From cd5dc9e3ce5834ef394a09641143add7f87d8a0f Mon Sep 17 00:00:00 2001 From: Royce Williams Date: Tue, 12 Dec 2023 23:00:20 -0900 Subject: [PATCH 01/95] summarize invalid rule chains --- src/rp.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/rp.c b/src/rp.c index 67ebd9322..ace86877b 100644 --- a/src/rp.c +++ b/src/rp.c @@ -906,6 +906,7 @@ int kernel_rules_load (hashcat_ctx_t *hashcat_ctx, kernel_rule_t **out_buf, u32 } u32 invalid_cnt = 0; + u32 valid_cnt = 0; for (u32 i = 0; i < kernel_rules_cnt; i++) { @@ -924,18 +925,27 @@ int kernel_rules_load (hashcat_ctx_t *hashcat_ctx, kernel_rule_t **out_buf, u32 { if (out_pos == RULES_MAX - 1) { - event_log_warning (hashcat_ctx, "Maximum functions per rule exceeded during chaining of rules, skipping..."); - invalid_cnt++; break; } + else + { + valid_cnt++; + } out->cmds[out_pos] = in->cmds[in_pos]; } } } + if (invalid_cnt > 0) + { + event_log_warning (hashcat_ctx, "Maximum functions per rule exceeded during chaining of rules."); + event_log_warning (hashcat_ctx, "Skipped %u rule chains, %u valid chains remain.", invalid_cnt, valid_cnt); + event_log_warning (hashcat_ctx, NULL); + } + hcfree (repeats); kernel_rules_cnt -= invalid_cnt; From 0788fd9ae745dacc3b697cdae8534f73329bdc91 Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Sat, 26 Oct 2024 13:24:00 +0200 Subject: [PATCH 02/95] Fixed stack buffer overflow in PKZIP modules (17200, 17210, 17220, 17225, 17230) --- docs/changes.txt | 1 + src/modules/module_17200.c | 9 +++++++-- src/modules/module_17210.c | 9 +++++++-- src/modules/module_17220.c | 9 +++++++-- src/modules/module_17225.c | 9 +++++++-- src/modules/module_17230.c | 9 +++++++-- 6 files changed, 36 insertions(+), 10 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index 283e3c0d4..e1aab3de3 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -98,6 +98,7 @@ - Fixed minimum password length in module of hash-mode 28200 - Fixed minimum password length in module of hash-mode 29800 - Fixed out-of-boundary read when a fast hash defines a kernel_loops_min value higher than the amplifiers provided by the user +- Fixed stack buffer overflow in PKZIP modules (17200, 17210, 17220, 17225, 17230) - Fixed vector datatypes usage for HIP - Fix missing check for -j and -k before writing hashcat.dictstat2 which can lead to false negatives - Handle signed/unsigned PDF permission P value for all PDF hash-modes diff --git a/src/modules/module_17200.c b/src/modules/module_17200.c index 24f77798f..2125812e2 100644 --- a/src/modules/module_17200.c +++ b/src/modules/module_17200.c @@ -91,6 +91,7 @@ Related publication: https://scitepress.org/PublicationsDetail.aspx?ID=KLPzPqStp #include "bitops.h" #include "convert.h" #include "shared.h" +#include "memory.h" static const u32 ATTACK_EXEC = ATTACK_EXEC_INSIDE_KERNEL; static const u32 DGST_POS0 = 0; @@ -206,9 +207,11 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE u32 *digest = (u32 *) digest_buf; - char input[line_len + 1]; + char *input = (char *) hcmalloc (line_len + 1); + if (!input) return PARSER_HAVE_ERRNO; + + memcpy (input, line_buf, line_len); input[line_len] = '\0'; - memcpy (&input, line_buf, line_len); char *saveptr = NULL; @@ -318,6 +321,8 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE digest[2] = 0; digest[3] = 0; + hcfree (input); + return (PARSER_OK); } diff --git a/src/modules/module_17210.c b/src/modules/module_17210.c index 307757689..58edcf343 100644 --- a/src/modules/module_17210.c +++ b/src/modules/module_17210.c @@ -91,6 +91,7 @@ Related publication: https://scitepress.org/PublicationsDetail.aspx?ID=KLPzPqStp #include "bitops.h" #include "convert.h" #include "shared.h" +#include "memory.h" static const u32 ATTACK_EXEC = ATTACK_EXEC_INSIDE_KERNEL; static const u32 DGST_POS0 = 0; @@ -186,9 +187,11 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE u32 *digest = (u32 *) digest_buf; - char input[line_len + 1]; + char *input = (char *) hcmalloc (line_len + 1); + if (!input) return PARSER_HAVE_ERRNO; + + memcpy (input, line_buf, line_len); input[line_len] = '\0'; - memcpy (&input, line_buf, line_len); char *saveptr = NULL; @@ -297,6 +300,8 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE digest[2] = 0; digest[3] = 0; + hcfree (input); + return (PARSER_OK); } diff --git a/src/modules/module_17220.c b/src/modules/module_17220.c index c2ac82b2c..1356cf5e5 100644 --- a/src/modules/module_17220.c +++ b/src/modules/module_17220.c @@ -91,6 +91,7 @@ Related publication: https://scitepress.org/PublicationsDetail.aspx?ID=KLPzPqStp #include "bitops.h" #include "convert.h" #include "shared.h" +#include "memory.h" static const u32 ATTACK_EXEC = ATTACK_EXEC_INSIDE_KERNEL; static const u32 DGST_POS0 = 0; @@ -206,9 +207,11 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE u32 *digest = (u32 *) digest_buf; - char input[line_len + 1]; + char *input = (char *) hcmalloc (line_len + 1); + if (!input) return PARSER_HAVE_ERRNO; + + memcpy (input, line_buf, line_len); input[line_len] = '\0'; - memcpy (&input, line_buf, line_len); char *saveptr = NULL; @@ -314,6 +317,8 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE salt->salt_len = pkzip->hash_count << 2; + hcfree (input); + return (PARSER_OK); } diff --git a/src/modules/module_17225.c b/src/modules/module_17225.c index 3cbf0f51b..376d77e60 100644 --- a/src/modules/module_17225.c +++ b/src/modules/module_17225.c @@ -91,6 +91,7 @@ Related publication: https://scitepress.org/PublicationsDetail.aspx?ID=KLPzPqStp #include "bitops.h" #include "convert.h" #include "shared.h" +#include "memory.h" static const u32 ATTACK_EXEC = ATTACK_EXEC_INSIDE_KERNEL; static const u32 DGST_POS0 = 0; @@ -207,9 +208,11 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE u32 *digest = (u32 *) digest_buf; - char input[line_len + 1]; + char *input = (char *) hcmalloc (line_len + 1); + if (!input) return PARSER_HAVE_ERRNO; + + memcpy (input, line_buf, line_len); input[line_len] = '\0'; - memcpy (&input, line_buf, line_len); char *saveptr = NULL; @@ -315,6 +318,8 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE salt->salt_len = pkzip->hash_count << 2; + hcfree (input); + return (PARSER_OK); } diff --git a/src/modules/module_17230.c b/src/modules/module_17230.c index 2b3ef24c9..2166c3f6d 100644 --- a/src/modules/module_17230.c +++ b/src/modules/module_17230.c @@ -91,6 +91,7 @@ Related publication: https://scitepress.org/PublicationsDetail.aspx?ID=KLPzPqStp #include "bitops.h" #include "convert.h" #include "shared.h" +#include "memory.h" static const u32 ATTACK_EXEC = ATTACK_EXEC_INSIDE_KERNEL; static const u32 DGST_POS0 = 0; @@ -199,9 +200,11 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE u32 *digest = (u32 *) digest_buf; - char input[line_len + 1]; + char *input = (char *) hcmalloc (line_len + 1); + if (!input) return PARSER_HAVE_ERRNO; + + memcpy (input, line_buf, line_len); input[line_len] = '\0'; - memcpy (&input, line_buf, line_len); char *saveptr = NULL; @@ -308,6 +311,8 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE salt->salt_len = pkzip->hash_count << 2; + hcfree (input); + return (PARSER_OK); } From 356ad9f927a16a85ec490c70112f8553f3811d36 Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Sun, 27 Oct 2024 00:45:44 +0200 Subject: [PATCH 03/95] Fixed memory leaks in tuning_db_init in tuningdb.c --- docs/changes.txt | 1 + src/tuningdb.c | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index 283e3c0d4..727f93bf2 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -95,6 +95,7 @@ - Fixed keys extraction in luks2hashcat - now extracts all active keys - Fixed maximum password length in module/test_module of hash-mode 2400 - Fixed maximum password length in module/test_module of hash-mode 2410 +- Fixed memory leaks in tuning_db_init in tuningdb.c - Fixed minimum password length in module of hash-mode 28200 - Fixed minimum password length in module of hash-mode 29800 - Fixed out-of-boundary read when a fast hash defines a kernel_loops_min value higher than the amplifiers provided by the user diff --git a/src/tuningdb.c b/src/tuningdb.c index 2f983b31e..332ab51cb 100644 --- a/src/tuningdb.c +++ b/src/tuningdb.c @@ -72,6 +72,8 @@ int tuning_db_init (hashcat_ctx_t *hashcat_ctx) char **tuning_db_files = scan_directory (tuning_db_folder); + hcfree (tuning_db_folder); + for (int i = 0; tuning_db_files[i] != NULL; i++) { char *tuning_db_file = tuning_db_files[i]; @@ -80,9 +82,19 @@ int tuning_db_init (hashcat_ctx_t *hashcat_ctx) const size_t dblen = strlen (tuning_db_file); - if (dblen < suflen) continue; // make sure to not do any out-of-boundary reads + if (dblen < suflen) + { + hcfree (tuning_db_file); - if (memcmp (tuning_db_file + dblen - suflen, TUNING_DB_SUFFIX, suflen) != 0) continue; + continue; // make sure to not do any out-of-boundary reads + } + + if (memcmp (tuning_db_file + dblen - suflen, TUNING_DB_SUFFIX, suflen) != 0) + { + hcfree (tuning_db_file); + + continue; + } HCFILE fp; @@ -90,6 +102,8 @@ int tuning_db_init (hashcat_ctx_t *hashcat_ctx) { event_log_error (hashcat_ctx, "%s: %s", tuning_db_file, strerror (errno)); + for (int j = 0; tuning_db_files[j] != NULL; j++) hcfree (tuning_db_files[j]); + return -1; } From 5efbd2f435511fd055a648759a2d8d1aec47c9c6 Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Thu, 31 Oct 2024 18:17:34 +0100 Subject: [PATCH 04/95] Fixed clang identification in src/Makefile --- docs/changes.txt | 1 + src/Makefile | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index 283e3c0d4..96dd0e729 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -88,6 +88,7 @@ - Fixed build failed for 18600 with Apple Metal - Fixed build failed for 4410 with vector width > 1 - Fixed build failure for almost all hash modes that make use of hc_swap64 and/or hc_swap64_S with Apple Metal +- Fixed clang identification in src/Makefile - Fixed debug mode 5 by adding the missing colon between original-word and finding-rule - Fixed display problem of the "Optimizers applied" list for algorithms using OPTI_TYPE_SLOW_HASH_SIMD_INIT2 and/or OPTI_TYPE_SLOW_HASH_SIMD_LOOP2 - Fixed incompatible pointer types (salt1 and salt2 buf) in 3730 a3 kernel diff --git a/src/Makefile b/src/Makefile index 1cd440645..786fb4b19 100644 --- a/src/Makefile +++ b/src/Makefile @@ -37,6 +37,8 @@ endif ifeq ($(DEBUG),1) $(info "## Detected Operating System : $(UNAME)") +$(info "## Detected CC : $(CC)") +$(info "## Detected CXX : $(CXX)") endif ## @@ -188,15 +190,17 @@ CFLAGS += -Wextra endif ## because LZMA SDK -ifeq ($(CC),clang) -#No longer supported in clang 10.0.0 -#CFLAGS += -Wno-enum-conversion +ifneq (,$(findstring clang, $(CC))) CFLAGS += -Wno-typedef-redefinition +else +ifeq ($(CC),cc) +CFLAGS += -Wno-typedef-redefinition +endif endif ifeq ($(USE_SYSTEM_LZMA),0) CFLAGS_LZMA += -D_7ZIP_ST -ifneq ($(CC),clang) +ifeq (,$(findstring clang, $(CC))) CFLAGS_LZMA += -Wno-misleading-indentation endif endif @@ -208,12 +212,15 @@ CFLAGS_ZLIB += -Wno-implicit-function-declaration CFLAGS_ZLIB += -Wno-unused-parameter CFLAGS_ZLIB += -DIOAPI_NO_64 CFLAGS_ZLIB += -DUNZ_BUFSIZE=262144 +ifneq (,$(findstring clang, $(CC))) +CFLAGS_ZLIB += -Wno-deprecated-non-prototype -Wno-unknown-warning-option +endif endif ## because UNRAR ifeq ($(ENABLE_UNRAR),1) ifeq ($(USE_SYSTEM_UNRAR),0) -ifneq ($(CC),clang) +ifeq (,$(findstring clang, $(CC))) CFLAGS_UNRAR += -Wno-class-memaccess CFLAGS_UNRAR += -Wno-misleading-indentation CFLAGS_UNRAR += -Wno-format-overflow From 0ba76629c0164e9c5b077fc0f5f06e3c7bbb873e Mon Sep 17 00:00:00 2001 From: wizardsd Date: Thu, 7 Nov 2024 12:47:36 +0300 Subject: [PATCH 05/95] Fixed a host buffer overflow bug when copying rules from host to device --- src/backend.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/backend.c b/src/backend.c index f7c916e1d..59b287cdc 100644 --- a/src/backend.c +++ b/src/backend.c @@ -9817,8 +9817,9 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) u32 aligned_rules_cnt = MAX (MAX (straight_ctx->kernel_rules_cnt, device_param->kernel_loops_min), KERNEL_RULES); - u64 size_rules = (u64) aligned_rules_cnt * sizeof (kernel_rule_t); - u64 size_rules_c = (u64) KERNEL_RULES * sizeof (kernel_rule_t); + u64 size_rules = (u64) aligned_rules_cnt * sizeof (kernel_rule_t); + u64 size_rules_src = (u64) straight_ctx->kernel_rules_cnt * sizeof (kernel_rule_t); // size of source rules buffer can be less than aligned_rules_cnt + u64 size_rules_c = (u64) KERNEL_RULES * sizeof (kernel_rule_t); device_param->size_rules = size_rules; device_param->size_rules_c = size_rules_c; @@ -10872,7 +10873,7 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) if (hc_cuMemAlloc (hashcat_ctx, &device_param->cuda_d_rules_c, size_rules_c) == -1) return -1; } - if (hc_cuMemcpyHtoDAsync (hashcat_ctx, device_param->cuda_d_rules, straight_ctx->kernel_rules_buf, size_rules, device_param->cuda_stream) == -1) return -1; + if (hc_cuMemcpyHtoDAsync (hashcat_ctx, device_param->cuda_d_rules, straight_ctx->kernel_rules_buf, size_rules_src, device_param->cuda_stream) == -1) return -1; } else if (user_options_extra->attack_kern == ATTACK_KERN_COMBI) { @@ -10983,7 +10984,7 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) if (hc_hipMemAlloc (hashcat_ctx, &device_param->hip_d_rules_c, size_rules_c) == -1) return -1; } - if (hc_hipMemcpyHtoDAsync (hashcat_ctx, device_param->hip_d_rules, straight_ctx->kernel_rules_buf, size_rules, device_param->hip_stream) == -1) return -1; + if (hc_hipMemcpyHtoDAsync (hashcat_ctx, device_param->hip_d_rules, straight_ctx->kernel_rules_buf, size_rules_src, device_param->hip_stream) == -1) return -1; } else if (user_options_extra->attack_kern == ATTACK_KERN_COMBI) { @@ -11100,7 +11101,7 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) if (hc_mtlCreateBuffer (hashcat_ctx, device_param->metal_device, size_rules, NULL, &device_param->metal_d_rules) == -1) return -1; if (hc_mtlCreateBuffer (hashcat_ctx, device_param->metal_device, size_rules_c, NULL, &device_param->metal_d_rules_c) == -1) return -1; - if (hc_mtlMemcpyHtoD (hashcat_ctx, device_param->metal_command_queue, device_param->metal_d_rules, 0, straight_ctx->kernel_rules_buf, size_rules) == -1) return -1; + if (hc_mtlMemcpyHtoD (hashcat_ctx, device_param->metal_command_queue, device_param->metal_d_rules, 0, straight_ctx->kernel_rules_buf, size_rules_src) == -1) return -1; } else if (user_options_extra->attack_kern == ATTACK_KERN_COMBI) { @@ -11194,7 +11195,7 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) if (hc_clCreateBuffer (hashcat_ctx, device_param->opencl_context, CL_MEM_READ_ONLY, size_rules, NULL, &device_param->opencl_d_rules) == -1) return -1; if (hc_clCreateBuffer (hashcat_ctx, device_param->opencl_context, CL_MEM_READ_ONLY, size_rules_c, NULL, &device_param->opencl_d_rules_c) == -1) return -1; - if (hc_clEnqueueWriteBuffer (hashcat_ctx, device_param->opencl_command_queue, device_param->opencl_d_rules, CL_FALSE, 0, size_rules, straight_ctx->kernel_rules_buf, 0, NULL, NULL) == -1) return -1; + if (hc_clEnqueueWriteBuffer (hashcat_ctx, device_param->opencl_command_queue, device_param->opencl_d_rules, CL_FALSE, 0, size_rules_src, straight_ctx->kernel_rules_buf, 0, NULL, NULL) == -1) return -1; } else if (user_options_extra->attack_kern == ATTACK_KERN_COMBI) { From 5b26392adb7d26f67961bfd8856d788b1287b2c6 Mon Sep 17 00:00:00 2001 From: Code Curiously <67614186+codecuriously@users.noreply.github.com> Date: Sun, 1 Dec 2024 19:20:26 +0000 Subject: [PATCH 06/95] Fix RAM usage bug for Linux Apple Silicon #4125 --- src/backend.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/backend.c b/src/backend.c index f7c916e1d..088cb40cb 100644 --- a/src/backend.c +++ b/src/backend.c @@ -8035,7 +8035,8 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) device_param->device_available_mem = device_param->device_global_mem - MAX_ALLOC_CHECKS_SIZE; - if ((device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) && ((device_param->opencl_platform_vendor_id != VENDOR_ID_INTEL_SDK) || (device_param->device_host_unified_memory == 0))) + if ((device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) && + (((device_param->opencl_platform_vendor_id != VENDOR_ID_INTEL_SDK) && (device_param->opencl_platform_vendor_id != VENDOR_ID_GENERIC)) || (device_param->device_host_unified_memory == 0))) { // OK, so the problem here is the following: // There's just CL_DEVICE_GLOBAL_MEM_SIZE to ask OpenCL about the total memory on the device, From b2c846135dbc7cd0e5e226d9217f8716eb5f3a95 Mon Sep 17 00:00:00 2001 From: magnum Date: Tue, 25 Feb 2025 15:10:33 +0100 Subject: [PATCH 07/95] Recover from (rare) non-fatal file locking problems --- src/locking.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/locking.c b/src/locking.c index 8918101a2..492350bab 100644 --- a/src/locking.c +++ b/src/locking.c @@ -20,9 +20,18 @@ int hc_lockfile (HCFILE *fp) lock.l_type = F_WRLCK; - /* Needs this loop because a signal may interrupt a wait for lock */ while (fcntl (fp->fd, F_SETLKW, &lock)) { + // These shouldn't happen with F_SETLKW yet are (rarely) seen IRL. Recoverable! + if (errno == EAGAIN || errno == ENOLCK) + { + struct timeval tv = { .tv_sec = 0, .tv_usec = 10000 }; + select (0, NULL, NULL, NULL, &tv); + + continue; + } + + // A signal may interrupt a wait for lock with EINTR. Anything else is fatal if (errno != EINTR) return -1; } From d2e9eacca8fa540e4d18f34258a72307aca8c30c Mon Sep 17 00:00:00 2001 From: holly-o <128481388+holly-o@users.noreply.github.com> Date: Fri, 11 Apr 2025 16:11:20 +0100 Subject: [PATCH 08/95] Added OpenCL files for plugin 67890 --- OpenCL/inc_hash_blake2s.cl | 664 ++++++++++++++++++++++++++++++++++++- OpenCL/inc_hash_blake2s.h | 37 +++ OpenCL/m67890_a0-pure.cl | 135 ++++++++ OpenCL/m67890_a1-pure.cl | 183 ++++++++++ OpenCL/m67890_a3-pure.cl | 156 +++++++++ 5 files changed, 1172 insertions(+), 3 deletions(-) create mode 100644 OpenCL/m67890_a0-pure.cl create mode 100644 OpenCL/m67890_a1-pure.cl create mode 100644 OpenCL/m67890_a3-pure.cl diff --git a/OpenCL/inc_hash_blake2s.cl b/OpenCL/inc_hash_blake2s.cl index 5fb60f979..77ecc02fb 100644 --- a/OpenCL/inc_hash_blake2s.cl +++ b/OpenCL/inc_hash_blake2s.cl @@ -9,6 +9,7 @@ #include "inc_common.h" #include "inc_hash_blake2s.h" + DECLSPEC u32 blake2s_rot16_S (const u32 a) { vconv32_t in; @@ -217,7 +218,7 @@ DECLSPEC void blake2s_update_64 (PRIVATE_AS blake2s_ctx_t *ctx, PRIVATE_AS u32 * if (pos == 0) { - if (ctx->len > 0) // if new block (pos == 0) AND the (old) len is not zero => transform + if (ctx->len > 0) { blake2s_transform (ctx->h, ctx->m, ctx->len, BLAKE2S_UPDATE); } @@ -288,8 +289,6 @@ DECLSPEC void blake2s_update_64 (PRIVATE_AS blake2s_ctx_t *ctx, PRIVATE_AS u32 * ctx->m[14] |= w3[2]; ctx->m[15] |= w3[3]; - // len must be a multiple of 64 (not ctx->len) for BLAKE2S_UPDATE: - const u32 cur_len = ((ctx->len + len) / 64) * 64; blake2s_transform (ctx->h, ctx->m, cur_len, BLAKE2S_UPDATE); @@ -424,11 +423,520 @@ DECLSPEC void blake2s_update_global (PRIVATE_AS blake2s_ctx_t *ctx, GLOBAL_AS co blake2s_update_64 (ctx, w0, w1, w2, w3, len - (u32) pos1); } +DECLSPEC void blake2s_update_swap (PRIVATE_AS blake2s_ctx_t *ctx, PRIVATE_AS const u32 *w, const int len) +{ + u32 w0[4]; + u32 w1[4]; + u32 w2[4]; + u32 w3[4]; + + int pos1; + int pos4; + + for (pos1 = 0, pos4 = 0; pos1 < len - 64; pos1 += 64, pos4 += 16) + { + w0[0] = w[pos4 + 0]; + w0[1] = w[pos4 + 1]; + w0[2] = w[pos4 + 2]; + w0[3] = w[pos4 + 3]; + w1[0] = w[pos4 + 4]; + w1[1] = w[pos4 + 5]; + w1[2] = w[pos4 + 6]; + w1[3] = w[pos4 + 7]; + w2[0] = w[pos4 + 8]; + w2[1] = w[pos4 + 9]; + w2[2] = w[pos4 + 10]; + w2[3] = w[pos4 + 11]; + w3[0] = w[pos4 + 12]; + w3[1] = w[pos4 + 13]; + w3[2] = w[pos4 + 14]; + w3[3] = w[pos4 + 15]; + + w0[0] = hc_swap32_S (w0[0]); + w0[1] = hc_swap32_S (w0[1]); + w0[2] = hc_swap32_S (w0[2]); + w0[3] = hc_swap32_S (w0[3]); + w1[0] = hc_swap32_S (w1[0]); + w1[1] = hc_swap32_S (w1[1]); + w1[2] = hc_swap32_S (w1[2]); + w1[3] = hc_swap32_S (w1[3]); + w2[0] = hc_swap32_S (w2[0]); + w2[1] = hc_swap32_S (w2[1]); + w2[2] = hc_swap32_S (w2[2]); + w2[3] = hc_swap32_S (w2[3]); + w3[0] = hc_swap32_S (w3[0]); + w3[1] = hc_swap32_S (w3[1]); + w3[2] = hc_swap32_S (w3[2]); + w3[3] = hc_swap32_S (w3[3]); + + blake2s_update_64 (ctx, w0, w1, w2, w3, 64); + } + + w0[0] = w[pos4 + 0]; + w0[1] = w[pos4 + 1]; + w0[2] = w[pos4 + 2]; + w0[3] = w[pos4 + 3]; + w1[0] = w[pos4 + 4]; + w1[1] = w[pos4 + 5]; + w1[2] = w[pos4 + 6]; + w1[3] = w[pos4 + 7]; + w2[0] = w[pos4 + 8]; + w2[1] = w[pos4 + 9]; + w2[2] = w[pos4 + 10]; + w2[3] = w[pos4 + 11]; + w3[0] = w[pos4 + 12]; + w3[1] = w[pos4 + 13]; + w3[2] = w[pos4 + 14]; + w3[3] = w[pos4 + 15]; + + w0[0] = hc_swap32_S (w0[0]); + w0[1] = hc_swap32_S (w0[1]); + w0[2] = hc_swap32_S (w0[2]); + w0[3] = hc_swap32_S (w0[3]); + w1[0] = hc_swap32_S (w1[0]); + w1[1] = hc_swap32_S (w1[1]); + w1[2] = hc_swap32_S (w1[2]); + w1[3] = hc_swap32_S (w1[3]); + w2[0] = hc_swap32_S (w2[0]); + w2[1] = hc_swap32_S (w2[1]); + w2[2] = hc_swap32_S (w2[2]); + w2[3] = hc_swap32_S (w2[3]); + w3[0] = hc_swap32_S (w3[0]); + w3[1] = hc_swap32_S (w3[1]); + w3[2] = hc_swap32_S (w3[2]); + w3[3] = hc_swap32_S (w3[3]); + + blake2s_update_64 (ctx, w0, w1, w2, w3, len - pos1); +} + +DECLSPEC void blake2s_update_global_swap (PRIVATE_AS blake2s_ctx_t *ctx, GLOBAL_AS const u32 *w, const int len) +{ + u32 w0[4]; + u32 w1[4]; + u32 w2[4]; + u32 w3[4]; + + const int limit = (const int) len - 64; // int type needed, could be negative + + int pos1; + int pos4; + + for (pos1 = 0, pos4 = 0; pos1 < limit; pos1 += 64, pos4 += 16) + { + w0[0] = w[pos4 + 0]; + w0[1] = w[pos4 + 1]; + w0[2] = w[pos4 + 2]; + w0[3] = w[pos4 + 3]; + w1[0] = w[pos4 + 4]; + w1[1] = w[pos4 + 5]; + w1[2] = w[pos4 + 6]; + w1[3] = w[pos4 + 7]; + w2[0] = w[pos4 + 8]; + w2[1] = w[pos4 + 9]; + w2[2] = w[pos4 + 10]; + w2[3] = w[pos4 + 11]; + w3[0] = w[pos4 + 12]; + w3[1] = w[pos4 + 13]; + w3[2] = w[pos4 + 14]; + w3[3] = w[pos4 + 15]; + + w0[0] = hc_swap32_S (w0[0]); + w0[1] = hc_swap32_S (w0[1]); + w0[2] = hc_swap32_S (w0[2]); + w0[3] = hc_swap32_S (w0[3]); + w1[0] = hc_swap32_S (w1[0]); + w1[1] = hc_swap32_S (w1[1]); + w1[2] = hc_swap32_S (w1[2]); + w1[3] = hc_swap32_S (w1[3]); + w2[0] = hc_swap32_S (w2[0]); + w2[1] = hc_swap32_S (w2[1]); + w2[2] = hc_swap32_S (w2[2]); + w2[3] = hc_swap32_S (w2[3]); + w3[0] = hc_swap32_S (w3[0]); + w3[1] = hc_swap32_S (w3[1]); + w3[2] = hc_swap32_S (w3[2]); + w3[3] = hc_swap32_S (w3[3]); + + blake2s_update_64 (ctx, w0, w1, w2, w3, 64); + } + + w0[0] = w[pos4 + 0]; + w0[1] = w[pos4 + 1]; + w0[2] = w[pos4 + 2]; + w0[3] = w[pos4 + 3]; + w1[0] = w[pos4 + 4]; + w1[1] = w[pos4 + 5]; + w1[2] = w[pos4 + 6]; + w1[3] = w[pos4 + 7]; + w2[0] = w[pos4 + 8]; + w2[1] = w[pos4 + 9]; + w2[2] = w[pos4 + 10]; + w2[3] = w[pos4 + 11]; + w3[0] = w[pos4 + 12]; + w3[1] = w[pos4 + 13]; + w3[2] = w[pos4 + 14]; + w3[3] = w[pos4 + 15]; + + w0[0] = hc_swap32_S (w0[0]); + w0[1] = hc_swap32_S (w0[1]); + w0[2] = hc_swap32_S (w0[2]); + w0[3] = hc_swap32_S (w0[3]); + w1[0] = hc_swap32_S (w1[0]); + w1[1] = hc_swap32_S (w1[1]); + w1[2] = hc_swap32_S (w1[2]); + w1[3] = hc_swap32_S (w1[3]); + w2[0] = hc_swap32_S (w2[0]); + w2[1] = hc_swap32_S (w2[1]); + w2[2] = hc_swap32_S (w2[2]); + w2[3] = hc_swap32_S (w2[3]); + w3[0] = hc_swap32_S (w3[0]); + w3[1] = hc_swap32_S (w3[1]); + w3[2] = hc_swap32_S (w3[2]); + w3[3] = hc_swap32_S (w3[3]); + + blake2s_update_64 (ctx, w0, w1, w2, w3, len - (u32) pos1); +} + + DECLSPEC void blake2s_final (PRIVATE_AS blake2s_ctx_t *ctx) { blake2s_transform (ctx->h, ctx->m, ctx->len, BLAKE2S_FINAL); } + +DECLSPEC void blake2s_hmac_init_64 (PRIVATE_AS blake2s_hmac_ctx_t *ctx, PRIVATE_AS const u32 *w0, PRIVATE_AS const u32 *w1, PRIVATE_AS const u32 *w2, PRIVATE_AS const u32 *w3) +{ + u32 a0[4]; + u32 a1[4]; + u32 a2[4]; + u32 a3[4]; + + // ipad + + a0[0] = w0[0] ^ 0x36363636; + a0[1] = w0[1] ^ 0x36363636; + a0[2] = w0[2] ^ 0x36363636; + a0[3] = w0[3] ^ 0x36363636; + a1[0] = w1[0] ^ 0x36363636; + a1[1] = w1[1] ^ 0x36363636; + a1[2] = w1[2] ^ 0x36363636; + a1[3] = w1[3] ^ 0x36363636; + a2[0] = w2[0] ^ 0x36363636; + a2[1] = w2[1] ^ 0x36363636; + a2[2] = w2[2] ^ 0x36363636; + a2[3] = w2[3] ^ 0x36363636; + a3[0] = w3[0] ^ 0x36363636; + a3[1] = w3[1] ^ 0x36363636; + a3[2] = w3[2] ^ 0x36363636; + a3[3] = w3[3] ^ 0x36363636; + + blake2s_init (&ctx->ipad); + + blake2s_update_64 (&ctx->ipad, a0, a1, a2, a3, 64); + + // opad + + u32 b0[4]; + u32 b1[4]; + u32 b2[4]; + u32 b3[4]; + + b0[0] = w0[0] ^ 0x5c5c5c5c; + b0[1] = w0[1] ^ 0x5c5c5c5c; + b0[2] = w0[2] ^ 0x5c5c5c5c; + b0[3] = w0[3] ^ 0x5c5c5c5c; + b1[0] = w1[0] ^ 0x5c5c5c5c; + b1[1] = w1[1] ^ 0x5c5c5c5c; + b1[2] = w1[2] ^ 0x5c5c5c5c; + b1[3] = w1[3] ^ 0x5c5c5c5c; + b2[0] = w2[0] ^ 0x5c5c5c5c; + b2[1] = w2[1] ^ 0x5c5c5c5c; + b2[2] = w2[2] ^ 0x5c5c5c5c; + b2[3] = w2[3] ^ 0x5c5c5c5c; + b3[0] = w3[0] ^ 0x5c5c5c5c; + b3[1] = w3[1] ^ 0x5c5c5c5c; + b3[2] = w3[2] ^ 0x5c5c5c5c; + b3[3] = w3[3] ^ 0x5c5c5c5c; + + blake2s_init (&ctx->opad); + + blake2s_update_64 (&ctx->opad, b0, b1, b2, b3, 64); +} + +DECLSPEC void blake2s_hmac_init (PRIVATE_AS blake2s_hmac_ctx_t *ctx, PRIVATE_AS const u32 *w, const int len) +{ + u32 w0[4]; + u32 w1[4]; + u32 w2[4]; + u32 w3[4]; + + if (len > 64) + { + blake2s_ctx_t tmp; + + blake2s_init (&tmp); + + blake2s_update (&tmp, w, len); + + blake2s_final (&tmp); + + w0[0] = tmp.h[0]; + w0[1] = tmp.h[1]; + w0[2] = tmp.h[2]; + w0[3] = tmp.h[3]; + w1[0] = tmp.h[4]; + w1[1] = tmp.h[5]; + w1[2] = tmp.h[6]; + w1[3] = tmp.h[7]; + w2[0] = 0; + w2[1] = 0; + w2[2] = 0; + w2[3] = 0; + w3[0] = 0; + w3[1] = 0; + w3[2] = 0; + w3[3] = 0; + } + else + { + w0[0] = w[ 0]; + w0[1] = w[ 1]; + w0[2] = w[ 2]; + w0[3] = w[ 3]; + w1[0] = w[ 4]; + w1[1] = w[ 5]; + w1[2] = w[ 6]; + w1[3] = w[ 7]; + w2[0] = w[ 8]; + w2[1] = w[ 9]; + w2[2] = w[10]; + w2[3] = w[11]; + w3[0] = w[12]; + w3[1] = w[13]; + w3[2] = w[14]; + w3[3] = w[15]; + } + + blake2s_hmac_init_64 (ctx, w0, w1, w2, w3); +} + +DECLSPEC void blake2s_hmac_init_swap (PRIVATE_AS blake2s_hmac_ctx_t *ctx, PRIVATE_AS const u32 *w, const int len) +{ + u32 w0[4]; + u32 w1[4]; + u32 w2[4]; + u32 w3[4]; + + if (len > 64) + { + blake2s_ctx_t tmp; + + blake2s_init (&tmp); + + blake2s_update_swap (&tmp, w, len); + + blake2s_final (&tmp); + + w0[0] = tmp.h[0]; + w0[1] = tmp.h[1]; + w0[2] = tmp.h[2]; + w0[3] = tmp.h[3]; + w1[0] = tmp.h[4]; + w1[1] = tmp.h[5]; + w1[2] = tmp.h[6]; + w1[3] = tmp.h[7]; + w2[0] = 0; + w2[1] = 0; + w2[2] = 0; + w2[3] = 0; + w3[0] = 0; + w3[1] = 0; + w3[2] = 0; + w3[3] = 0; + } + else + { + w0[0] = hc_swap32_S (w[ 0]); + w0[1] = hc_swap32_S (w[ 1]); + w0[2] = hc_swap32_S (w[ 2]); + w0[3] = hc_swap32_S (w[ 3]); + w1[0] = hc_swap32_S (w[ 4]); + w1[1] = hc_swap32_S (w[ 5]); + w1[2] = hc_swap32_S (w[ 6]); + w1[3] = hc_swap32_S (w[ 7]); + w2[0] = hc_swap32_S (w[ 8]); + w2[1] = hc_swap32_S (w[ 9]); + w2[2] = hc_swap32_S (w[10]); + w2[3] = hc_swap32_S (w[11]); + w3[0] = hc_swap32_S (w[12]); + w3[1] = hc_swap32_S (w[13]); + w3[2] = hc_swap32_S (w[14]); + w3[3] = hc_swap32_S (w[15]); + } + + blake2s_hmac_init_64 (ctx, w0, w1, w2, w3); +} + +DECLSPEC void blake2s_hmac_init_global (PRIVATE_AS blake2s_hmac_ctx_t *ctx, GLOBAL_AS const u32 *w, const int len) +{ + u32 w0[4]; + u32 w1[4]; + u32 w2[4]; + u32 w3[4]; + + if (len > 64) + { + blake2s_ctx_t tmp; + + blake2s_init (&tmp); + + blake2s_update_global (&tmp, w, len); + + blake2s_final (&tmp); + + w0[0] = tmp.h[0]; + w0[1] = tmp.h[1]; + w0[2] = tmp.h[2]; + w0[3] = tmp.h[3]; + w1[0] = tmp.h[4]; + w1[1] = tmp.h[5]; + w1[2] = tmp.h[6]; + w1[3] = tmp.h[7]; + w2[0] = 0; + w2[1] = 0; + w2[2] = 0; + w2[3] = 0; + w3[0] = 0; + w3[1] = 0; + w3[2] = 0; + w3[3] = 0; + } + else + { + w0[0] = w[ 0]; + w0[1] = w[ 1]; + w0[2] = w[ 2]; + w0[3] = w[ 3]; + w1[0] = w[ 4]; + w1[1] = w[ 5]; + w1[2] = w[ 6]; + w1[3] = w[ 7]; + w2[0] = w[ 8]; + w2[1] = w[ 9]; + w2[2] = w[10]; + w2[3] = w[11]; + w3[0] = w[12]; + w3[1] = w[13]; + w3[2] = w[14]; + w3[3] = w[15]; + } + + blake2s_hmac_init_64 (ctx, w0, w1, w2, w3); +} + +DECLSPEC void blake2s_hmac_init_global_swap (PRIVATE_AS blake2s_hmac_ctx_t *ctx, GLOBAL_AS const u32 *w, const int len) +{ + u32 w0[4]; + u32 w1[4]; + u32 w2[4]; + u32 w3[4]; + + if (len > 64) + { + blake2s_ctx_t tmp; + + blake2s_init (&tmp); + + blake2s_update_global_swap (&tmp, w, len); + + blake2s_final (&tmp); + + w0[0] = tmp.h[0]; + w0[1] = tmp.h[1]; + w0[2] = tmp.h[2]; + w0[3] = tmp.h[3]; + w1[0] = tmp.h[4]; + w1[1] = tmp.h[5]; + w1[2] = tmp.h[6]; + w1[3] = tmp.h[7]; + w2[0] = 0; + w2[1] = 0; + w2[2] = 0; + w2[3] = 0; + w3[0] = 0; + w3[1] = 0; + w3[2] = 0; + w3[3] = 0; + } + else + { + w0[0] = hc_swap32_S (w[ 0]); + w0[1] = hc_swap32_S (w[ 1]); + w0[2] = hc_swap32_S (w[ 2]); + w0[3] = hc_swap32_S (w[ 3]); + w1[0] = hc_swap32_S (w[ 4]); + w1[1] = hc_swap32_S (w[ 5]); + w1[2] = hc_swap32_S (w[ 6]); + w1[3] = hc_swap32_S (w[ 7]); + w2[0] = hc_swap32_S (w[ 8]); + w2[1] = hc_swap32_S (w[ 9]); + w2[2] = hc_swap32_S (w[10]); + w2[3] = hc_swap32_S (w[11]); + w3[0] = hc_swap32_S (w[12]); + w3[1] = hc_swap32_S (w[13]); + w3[2] = hc_swap32_S (w[14]); + w3[3] = hc_swap32_S (w[15]); + } + + blake2s_hmac_init_64 (ctx, w0, w1, w2, w3); +} + +DECLSPEC void blake2s_hmac_update_64 (PRIVATE_AS blake2s_hmac_ctx_t *ctx, PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w2, PRIVATE_AS u32 *w3, const int len) +{ + blake2s_update_64 (&ctx->ipad, w0, w1, w2, w3, len); +} + +DECLSPEC void blake2s_hmac_update (PRIVATE_AS blake2s_hmac_ctx_t *ctx, PRIVATE_AS const u32 *w, const int len) +{ + blake2s_update (&ctx->ipad, w, len); +} + +DECLSPEC void blake2s_hmac_update_swap (PRIVATE_AS blake2s_hmac_ctx_t *ctx, PRIVATE_AS const u32 *w, const int len) +{ + blake2s_update_swap (&ctx->ipad, w, len); +} + +DECLSPEC void blake2s_hmac_update_global (PRIVATE_AS blake2s_hmac_ctx_t *ctx, GLOBAL_AS const u32 *w, const int len) +{ + blake2s_update_global (&ctx->ipad, w, len); +} + +DECLSPEC void blake2s_hmac_update_global_swap (PRIVATE_AS blake2s_hmac_ctx_t *ctx, GLOBAL_AS const u32 *w, const int len) +{ + blake2s_update_global_swap (&ctx->ipad, w, len); +} + +DECLSPEC void blake2s_hmac_final (PRIVATE_AS blake2s_hmac_ctx_t *ctx) +{ + blake2s_final (&ctx->ipad); + + for (int n = 0; n < 8; n += 1) + { + blake2s_update(&ctx->opad, &ctx->ipad.h[n], 4); + } + + ctx->opad.m[8] = 0; + ctx->opad.m[9] = 0; + ctx->opad.m[10]= 0; + ctx->opad.m[11]= 0; + ctx->opad.m[12]= 0; + ctx->opad.m[13]= 0; + ctx->opad.m[14]= 0; + ctx->opad.m[15]= 0; + + blake2s_final (&ctx->opad); +} + DECLSPEC void blake2s_transform_vector (PRIVATE_AS u32x *h, PRIVATE_AS const u32x *m, const u32x len, const u32 f0) { const u32x t0 = len; @@ -452,6 +960,7 @@ DECLSPEC void blake2s_transform_vector (PRIVATE_AS u32x *h, PRIVATE_AS const u32 v[14] = BLAKE2S_IV_06 ^ f0; v[15] = BLAKE2S_IV_07; // ^ f1; + BLAKE2S_ROUND_VECTOR ( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); BLAKE2S_ROUND_VECTOR (14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3); BLAKE2S_ROUND_VECTOR (11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4); @@ -700,3 +1209,152 @@ DECLSPEC void blake2s_final_vector (PRIVATE_AS blake2s_ctx_vector_t *ctx) { blake2s_transform_vector (ctx->h, ctx->m, (u32x) ctx->len, BLAKE2S_FINAL); } + +DECLSPEC void blake2s_hmac_init_vector_64 (PRIVATE_AS blake2s_hmac_ctx_vector_t *ctx, PRIVATE_AS const u32x *w0, PRIVATE_AS const u32x *w1, PRIVATE_AS const u32x *w2, PRIVATE_AS const u32x *w3) +{ + u32x a0[4]; + u32x a1[4]; + u32x a2[4]; + u32x a3[4]; + + // ipad + + a0[0] = w0[0] ^ 0x36363636; + a0[1] = w0[1] ^ 0x36363636; + a0[2] = w0[2] ^ 0x36363636; + a0[3] = w0[3] ^ 0x36363636; + a1[0] = w1[0] ^ 0x36363636; + a1[1] = w1[1] ^ 0x36363636; + a1[2] = w1[2] ^ 0x36363636; + a1[3] = w1[3] ^ 0x36363636; + a2[0] = w2[0] ^ 0x36363636; + a2[1] = w2[1] ^ 0x36363636; + a2[2] = w2[2] ^ 0x36363636; + a2[3] = w2[3] ^ 0x36363636; + a3[0] = w3[0] ^ 0x36363636; + a3[1] = w3[1] ^ 0x36363636; + a3[2] = w3[2] ^ 0x36363636; + a3[3] = w3[3] ^ 0x36363636; + + blake2s_init_vector (&ctx->ipad); + + blake2s_update_vector_64 (&ctx->ipad, a0, a1, a2, a3, 64); + + // opad + + u32x b0[4]; + u32x b1[4]; + u32x b2[4]; + u32x b3[4]; + + b0[0] = w0[0] ^ 0x5c5c5c5c; + b0[1] = w0[1] ^ 0x5c5c5c5c; + b0[2] = w0[2] ^ 0x5c5c5c5c; + b0[3] = w0[3] ^ 0x5c5c5c5c; + b1[0] = w1[0] ^ 0x5c5c5c5c; + b1[1] = w1[1] ^ 0x5c5c5c5c; + b1[2] = w1[2] ^ 0x5c5c5c5c; + b1[3] = w1[3] ^ 0x5c5c5c5c; + b2[0] = w2[0] ^ 0x5c5c5c5c; + b2[1] = w2[1] ^ 0x5c5c5c5c; + b2[2] = w2[2] ^ 0x5c5c5c5c; + b2[3] = w2[3] ^ 0x5c5c5c5c; + b3[0] = w3[0] ^ 0x5c5c5c5c; + b3[1] = w3[1] ^ 0x5c5c5c5c; + b3[2] = w3[2] ^ 0x5c5c5c5c; + b3[3] = w3[3] ^ 0x5c5c5c5c; + + blake2s_init_vector (&ctx->opad); + + blake2s_update_vector_64 (&ctx->opad, b0, b1, b2, b3, 64); +} + + +DECLSPEC void blake2s_hmac_init_vector (PRIVATE_AS blake2s_hmac_ctx_vector_t *ctx, PRIVATE_AS const u32x *w, const int len) +{ + u32x w0[4]; + u32x w1[4]; + u32x w2[4]; + u32x w3[4]; + + if (len > 64) + { + blake2s_ctx_vector_t tmp; + + blake2s_init_vector (&tmp); + + blake2s_update_vector (&tmp, w, len); + + blake2s_final_vector (&tmp); + + w0[0] = tmp.h[0]; + w0[1] = tmp.h[1]; + w0[2] = tmp.h[2]; + w0[3] = tmp.h[3]; + w1[0] = tmp.h[4]; + w1[1] = tmp.h[5]; + w1[2] = tmp.h[6]; + w1[3] = tmp.h[7]; + w2[0] = 0; + w2[1] = 0; + w2[2] = 0; + w2[3] = 0; + w3[0] = 0; + w3[1] = 0; + w3[2] = 0; + w3[3] = 0; + } + else + { + w0[0] = w[ 0]; + w0[1] = w[ 1]; + w0[2] = w[ 2]; + w0[3] = w[ 3]; + w1[0] = w[ 4]; + w1[1] = w[ 5]; + w1[2] = w[ 6]; + w1[3] = w[ 7]; + w2[0] = w[ 8]; + w2[1] = w[ 9]; + w2[2] = w[10]; + w2[3] = w[11]; + w3[0] = w[12]; + w3[1] = w[13]; + w3[2] = w[14]; + w3[3] = w[15]; + } + + blake2s_hmac_init_vector_64 (ctx, w0, w1, w2, w3); +} + +DECLSPEC void blake2s_hmac_update_vector_64 (PRIVATE_AS blake2s_hmac_ctx_vector_t *ctx, PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_AS u32x *w2, PRIVATE_AS u32x *w3, const int len) +{ + blake2s_update_vector_64 (&ctx->ipad, w0, w1, w2, w3, len); +} + +DECLSPEC void blake2s_hmac_update_vector (PRIVATE_AS blake2s_hmac_ctx_vector_t *ctx, PRIVATE_AS const u32x *w, const int len) +{ + blake2s_update_vector (&ctx->ipad, w, len); +} + +DECLSPEC void blake2s_hmac_final_vector (PRIVATE_AS blake2s_hmac_ctx_vector_t *ctx) +{ + + blake2s_final_vector (&ctx->ipad); + + for (int n = 0; n < 8; n += 1) + { + blake2s_update_vector(&ctx->opad, &ctx->ipad.h[n], 4); + } + + ctx->opad.m[8] = 0; + ctx->opad.m[9] = 0; + ctx->opad.m[10]= 0; + ctx->opad.m[11]= 0; + ctx->opad.m[12]= 0; + ctx->opad.m[13]= 0; + ctx->opad.m[14]= 0; + ctx->opad.m[15]= 0; + + blake2s_final_vector (&ctx->opad); +} diff --git a/OpenCL/inc_hash_blake2s.h b/OpenCL/inc_hash_blake2s.h index 63f2942f1..9a13a59c7 100644 --- a/OpenCL/inc_hash_blake2s.h +++ b/OpenCL/inc_hash_blake2s.h @@ -72,6 +72,14 @@ typedef struct blake2s_ctx } blake2s_ctx_t; +typedef struct blake2s_hmac_ctx +{ + blake2s_ctx_t ipad; + blake2s_ctx_t opad; + +} blake2s_hmac_ctx_t; + + typedef struct blake2s_ctx_vector { u32x m[16]; // buffer @@ -81,16 +89,45 @@ typedef struct blake2s_ctx_vector } blake2s_ctx_vector_t; +typedef struct blake2s_hmac_ctx_vector +{ + blake2s_ctx_vector_t ipad; + blake2s_ctx_vector_t opad; + +} blake2s_hmac_ctx_vector_t; + + + + DECLSPEC void blake2s_transform (PRIVATE_AS u32 *h, PRIVATE_AS const u32 *m, const int len, const u32 f0); DECLSPEC void blake2s_init (PRIVATE_AS blake2s_ctx_t *ctx); DECLSPEC void blake2s_update (PRIVATE_AS blake2s_ctx_t *ctx, PRIVATE_AS const u32 *w, const int len); DECLSPEC void blake2s_update_global (PRIVATE_AS blake2s_ctx_t *ctx, GLOBAL_AS const u32 *w, const int len); +DECLSPEC void blake2s_update_global_swap (PRIVATE_AS blake2s_ctx_t *ctx, GLOBAL_AS const u32 *w, const int len); DECLSPEC void blake2s_final (PRIVATE_AS blake2s_ctx_t *ctx); +DECLSPEC void blake2s_hmac_init_64 (PRIVATE_AS blake2s_hmac_ctx_t *ctx, PRIVATE_AS const u32 *w0, PRIVATE_AS const u32 *w1, PRIVATE_AS const u32 *w2, PRIVATE_AS const u32 *w3); +DECLSPEC void blake2s_hmac_init (PRIVATE_AS blake2s_hmac_ctx_t *ctx, PRIVATE_AS const u32 *w, const int len); +DECLSPEC void blake2s_hmac_init_swap (PRIVATE_AS blake2s_hmac_ctx_t *ctx, PRIVATE_AS const u32 *w, const int len); +DECLSPEC void blake2s_hmac_init_global (PRIVATE_AS blake2s_hmac_ctx_t *ctx, GLOBAL_AS const u32 *w, const int len); +DECLSPEC void blake2s_hmac_init_global_swap (PRIVATE_AS blake2s_hmac_ctx_t *ctx, GLOBAL_AS const u32 *w, const int len); +DECLSPEC void blake2s_hmac_update_64 (PRIVATE_AS blake2s_hmac_ctx_t *ctx, PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w2, PRIVATE_AS u32 *w3, const int len); +DECLSPEC void blake2s_hmac_update (PRIVATE_AS blake2s_hmac_ctx_t *ctx, PRIVATE_AS const u32 *w, const int len); +DECLSPEC void blake2s_hmac_update_swap (PRIVATE_AS blake2s_hmac_ctx_t *ctx, PRIVATE_AS const u32 *w, const int len); +DECLSPEC void blake2s_hmac_update_global (PRIVATE_AS blake2s_hmac_ctx_t *ctx, GLOBAL_AS const u32 *w, const int len); +DECLSPEC void blake2s_hmac_update_global_swap (PRIVATE_AS blake2s_hmac_ctx_t *ctx, GLOBAL_AS const u32 *w, const int len); +DECLSPEC void blake2s_hmac_final (PRIVATE_AS blake2s_hmac_ctx_t *ctx); + DECLSPEC void blake2s_transform_vector (PRIVATE_AS u32x *h, PRIVATE_AS const u32x *m, const u32x len, const u32 f0); DECLSPEC void blake2s_init_vector (PRIVATE_AS blake2s_ctx_vector_t *ctx); DECLSPEC void blake2s_init_vector_from_scalar (PRIVATE_AS blake2s_ctx_vector_t *ctx, PRIVATE_AS blake2s_ctx_t *ctx0); DECLSPEC void blake2s_update_vector (PRIVATE_AS blake2s_ctx_vector_t *ctx, PRIVATE_AS const u32x *w, const int len); DECLSPEC void blake2s_final_vector (PRIVATE_AS blake2s_ctx_vector_t *ctx); +DECLSPEC void blake2s_hmac_init_vector_64 (PRIVATE_AS blake2s_hmac_ctx_vector_t *ctx, PRIVATE_AS const u32x *w0, PRIVATE_AS const u32x *w1, PRIVATE_AS const u32x *w2, PRIVATE_AS const u32x *w3); +DECLSPEC void blake2s_hmac_init_vector (PRIVATE_AS blake2s_hmac_ctx_vector_t *ctx, PRIVATE_AS const u32x *w, const int len); +DECLSPEC void blake2s_hmac_update_vector_64 (PRIVATE_AS blake2s_hmac_ctx_vector_t *ctx, PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_AS u32x *w2, PRIVATE_AS u32x *w3, const int len); +DECLSPEC void blake2s_hmac_update_vector (PRIVATE_AS blake2s_hmac_ctx_vector_t *ctx, PRIVATE_AS const u32x *w, const int len); +DECLSPEC void blake2s_hmac_final_vector (PRIVATE_AS blake2s_hmac_ctx_vector_t *ctx); + #endif // INC_HASH_BLAKE2S_H diff --git a/OpenCL/m67890_a0-pure.cl b/OpenCL/m67890_a0-pure.cl new file mode 100644 index 000000000..b32d7a7cf --- /dev/null +++ b/OpenCL/m67890_a0-pure.cl @@ -0,0 +1,135 @@ +/** + * Author......: See docs/credits.txt + * License.....: MIT + */ + +//#define NEW_SIMD_CODE + +#ifdef KERNEL_STATIC +#include M2S(INCLUDE_PATH/inc_vendor.h) +#include M2S(INCLUDE_PATH/inc_types.h) +#include M2S(INCLUDE_PATH/inc_platform.cl) +#include M2S(INCLUDE_PATH/inc_common.cl) +#include M2S(INCLUDE_PATH/inc_rp.h) +#include M2S(INCLUDE_PATH/inc_rp.cl) +#include M2S(INCLUDE_PATH/inc_scalar.cl) +#include M2S(INCLUDE_PATH/inc_hash_blake2s.cl) +#endif + +KERNEL_FQ void m67890_mxx (KERN_ATTR_RULES ()) +{ + /** + * modifier + */ + + const u64 lid = get_local_id (0); + const u64 gid = get_global_id (0); + + if (gid >= GID_CNT) return; + + /** + * base + */ + + COPY_PW (pws[gid]); + + const u32 salt_len = salt_bufs[SALT_POS_HOST].salt_len; + + u32 s[64] = { 0 }; + + for (u32 i = 0, idx = 0; i < salt_len; i += 4, idx += 1) + { + s[idx] = salt_bufs[SALT_POS_HOST].salt_buf[idx]; + } + + /** + * loop + */ + + for (u32 il_pos = 0; il_pos < IL_CNT; il_pos++) + { + pw_t tmp = PASTE_PW; + + tmp.pw_len = apply_rules (rules_buf[il_pos].cmds, tmp.i, tmp.pw_len); + + blake2s_hmac_ctx_t ctx; + + blake2s_hmac_init (&ctx, tmp.i, tmp.pw_len); + + blake2s_hmac_update (&ctx, s, salt_len); + + blake2s_hmac_final (&ctx); + + const u32 r0 = ctx.opad.h[DGST_R0]; + const u32 r1 = ctx.opad.h[DGST_R1]; + const u32 r2 = ctx.opad.h[DGST_R2]; + const u32 r3 = ctx.opad.h[DGST_R3]; + + COMPARE_M_SCALAR (r0, r1, r2, r3); + } +} + +KERNEL_FQ void m67890_sxx (KERN_ATTR_RULES ()) +{ + /** + * modifier + */ + + const u64 lid = get_local_id (0); + const u64 gid = get_global_id (0); + + if (gid >= GID_CNT) return; + + /** + * digest + */ + + const u32 search[4] = + { + digests_buf[DIGESTS_OFFSET_HOST].digest_buf[DGST_R0], + digests_buf[DIGESTS_OFFSET_HOST].digest_buf[DGST_R1], + digests_buf[DIGESTS_OFFSET_HOST].digest_buf[DGST_R2], + digests_buf[DIGESTS_OFFSET_HOST].digest_buf[DGST_R3] + }; + + /** + * base + */ + + COPY_PW (pws[gid]); + + const u32 salt_len = salt_bufs[SALT_POS_HOST].salt_len; + + u32 s[64] = { 0 }; + + for (u32 i = 0, idx = 0; i < salt_len; i += 4, idx += 1) + { + s[idx] = salt_bufs[SALT_POS_HOST].salt_buf[idx]; + } + + /** + * loop + */ + + for (u32 il_pos = 0; il_pos < IL_CNT; il_pos++) + { + pw_t tmp = PASTE_PW; + + tmp.pw_len = apply_rules (rules_buf[il_pos].cmds, tmp.i, tmp.pw_len); + + blake2s_hmac_ctx_t ctx; + + blake2s_hmac_init (&ctx, tmp.i, tmp.pw_len); + + blake2s_hmac_update (&ctx, s, salt_len); + + blake2s_hmac_final (&ctx); + + const u32 r0 = ctx.opad.h[DGST_R0]; + const u32 r1 = ctx.opad.h[DGST_R1]; + const u32 r2 = ctx.opad.h[DGST_R2]; + const u32 r3 = ctx.opad.h[DGST_R3]; + + COMPARE_S_SCALAR (r0, r1, r2, r3); + } +} diff --git a/OpenCL/m67890_a1-pure.cl b/OpenCL/m67890_a1-pure.cl new file mode 100644 index 000000000..04f023d61 --- /dev/null +++ b/OpenCL/m67890_a1-pure.cl @@ -0,0 +1,183 @@ +/** + * Author......: See docs/credits.txt + * License.....: MIT + */ + +//#define NEW_SIMD_CODE + +#ifdef KERNEL_STATIC +#include M2S(INCLUDE_PATH/inc_vendor.h) +#include M2S(INCLUDE_PATH/inc_types.h) +#include M2S(INCLUDE_PATH/inc_platform.cl) +#include M2S(INCLUDE_PATH/inc_common.cl) +#include M2S(INCLUDE_PATH/inc_scalar.cl) +#include M2S(INCLUDE_PATH/inc_hash_blake2s.cl) +#endif + +KERNEL_FQ void m67890_mxx (KERN_ATTR_BASIC ()) +{ + /** + * modifier + */ + + const u64 lid = get_local_id (0); + const u64 gid = get_global_id (0); + + if (gid >= GID_CNT) return; + + /** + * base + */ + + const u32 pw_len = pws[gid].pw_len; + + u32 w[64] = { 0 }; + + for (u32 i = 0, idx = 0; i < pw_len; i += 4, idx += 1) + { + w[idx] = pws[gid].i[idx]; + } + + const u32 salt_len = salt_bufs[SALT_POS_HOST].salt_len; + + u32 s[64] = { 0 }; + + for (u32 i = 0, idx = 0; i < salt_len; i += 4, idx += 1) + { + s[idx] = salt_bufs[SALT_POS_HOST].salt_buf[idx]; + } + + /** + * loop + */ + + for (u32 il_pos = 0; il_pos < IL_CNT; il_pos++) + { + const u32 comb_len = combs_buf[il_pos].pw_len; + + u32 c[64]; + + #ifdef _unroll + #pragma unroll + #endif + for (int idx = 0; idx < 64; idx++) + { + c[idx] = combs_buf[il_pos].i[idx]; + } + + switch_buffer_by_offset_1x64_le_S (c, pw_len); + + #ifdef _unroll + #pragma unroll + #endif + for (int i = 0; i < 64; i++) + { + c[i] |= w[i]; + } + + blake2s_hmac_ctx_t ctx; + + blake2s_hmac_init (&ctx, c, pw_len + comb_len); + + blake2s_hmac_update (&ctx, s, salt_len); + + blake2s_hmac_final (&ctx); + + const u32 r0 = ctx.opad.h[DGST_R0]; + const u32 r1 = ctx.opad.h[DGST_R1]; + const u32 r2 = ctx.opad.h[DGST_R2]; + const u32 r3 = ctx.opad.h[DGST_R3]; + + COMPARE_M_SCALAR (r0, r1, r2, r3); + } +} + +KERNEL_FQ void m67890_sxx (KERN_ATTR_BASIC ()) +{ + /** + * modifier + */ + + const u64 lid = get_local_id (0); + const u64 gid = get_global_id (0); + + if (gid >= GID_CNT) return; + + /** + * digest + */ + + const u32 search[4] = + { + digests_buf[DIGESTS_OFFSET_HOST].digest_buf[DGST_R0], + digests_buf[DIGESTS_OFFSET_HOST].digest_buf[DGST_R1], + digests_buf[DIGESTS_OFFSET_HOST].digest_buf[DGST_R2], + digests_buf[DIGESTS_OFFSET_HOST].digest_buf[DGST_R3] + }; + + /** + * base + */ + + const u32 pw_len = pws[gid].pw_len; + + u32 w[64] = { 0 }; + + for (u32 i = 0, idx = 0; i < pw_len; i += 4, idx += 1) + { + w[idx] = pws[gid].i[idx]; + } + + const u32 salt_len = salt_bufs[SALT_POS_HOST].salt_len; + + u32 s[64] = { 0 }; + + for (u32 i = 0, idx = 0; i < salt_len; i += 4, idx += 1) + { + s[idx] = salt_bufs[SALT_POS_HOST].salt_buf[idx]; + } + + /** + * loop + */ + + for (u32 il_pos = 0; il_pos < IL_CNT; il_pos++) + { + const u32 comb_len = combs_buf[il_pos].pw_len; + + u32 c[64]; + + #ifdef _unroll + #pragma unroll + #endif + for (int idx = 0; idx < 64; idx++) + { + c[idx] = combs_buf[il_pos].i[idx]; + } + + switch_buffer_by_offset_1x64_le_S (c, pw_len); + + #ifdef _unroll + #pragma unroll + #endif + for (int i = 0; i < 64; i++) + { + c[i] |= w[i]; + } + + blake2s_hmac_ctx_t ctx; + + blake2s_hmac_init (&ctx, c, pw_len + comb_len); + + blake2s_hmac_update (&ctx, s, salt_len); + + blake2s_hmac_final (&ctx); + + const u32 r0 = ctx.opad.h[DGST_R0]; + const u32 r1 = ctx.opad.h[DGST_R1]; + const u32 r2 = ctx.opad.h[DGST_R2]; + const u32 r3 = ctx.opad.h[DGST_R3]; + + COMPARE_S_SCALAR (r0, r1, r2, r3); + } +} diff --git a/OpenCL/m67890_a3-pure.cl b/OpenCL/m67890_a3-pure.cl new file mode 100644 index 000000000..8e39f0a60 --- /dev/null +++ b/OpenCL/m67890_a3-pure.cl @@ -0,0 +1,156 @@ +/** + * Author......: See docs/credits.txt + * License.....: MIT + */ + +#define NEW_SIMD_CODE + +#ifdef KERNEL_STATIC +#include M2S(INCLUDE_PATH/inc_vendor.h) +#include M2S(INCLUDE_PATH/inc_types.h) +#include M2S(INCLUDE_PATH/inc_platform.cl) +#include M2S(INCLUDE_PATH/inc_common.cl) +#include M2S(INCLUDE_PATH/inc_simd.cl) +#include M2S(INCLUDE_PATH/inc_hash_blake2s.cl) +#endif + +KERNEL_FQ void m67890_mxx (KERN_ATTR_VECTOR ()) +{ + /** + * modifier + */ + + const u64 lid = get_local_id (0); + const u64 gid = get_global_id (0); + + if (gid >= GID_CNT) return; + + /** + * base + */ + + const u32 pw_len = pws[gid].pw_len; + + u32x w[64] = { 0 }; + + for (u32 i = 0, idx = 0; i < pw_len; i += 4, idx += 1) + { + w[idx] = pws[gid].i[idx]; + } + + const u32 salt_len = salt_bufs[SALT_POS_HOST].salt_len; + + u32x s[64] = { 0 }; + + for (u32 i = 0, idx = 0; i < salt_len; i += 4, idx += 1) + { + s[idx] = (salt_bufs[SALT_POS_HOST].salt_buf[idx]); + } + + /** + * loop + */ + + u32x w0l = w[0]; + + for (u32 il_pos = 0; il_pos < IL_CNT; il_pos += VECT_SIZE) + { + const u32x w0r = words_buf_r[il_pos / VECT_SIZE]; + + const u32x w0 = w0l | w0r; + + w[0] = w0; + + blake2s_hmac_ctx_vector_t ctx; + + blake2s_hmac_init_vector (&ctx, w, pw_len); + + blake2s_hmac_update_vector (&ctx, s, salt_len); + + blake2s_hmac_final_vector (&ctx); + + const u32x r0 = ctx.opad.h[DGST_R0]; + const u32x r1 = ctx.opad.h[DGST_R1]; + const u32x r2 = ctx.opad.h[DGST_R2]; + const u32x r3 = ctx.opad.h[DGST_R3]; + + COMPARE_M_SIMD (r0, r1, r2, r3); + } +} + +KERNEL_FQ void m67890_sxx (KERN_ATTR_VECTOR ()) +{ + /** + * modifier + */ + + const u64 lid = get_local_id (0); + const u64 gid = get_global_id (0); + + if (gid >= GID_CNT) return; + + /** + * digest + */ + + const u32 search[4] = + { + digests_buf[DIGESTS_OFFSET_HOST].digest_buf[DGST_R0], + digests_buf[DIGESTS_OFFSET_HOST].digest_buf[DGST_R1], + digests_buf[DIGESTS_OFFSET_HOST].digest_buf[DGST_R2], + digests_buf[DIGESTS_OFFSET_HOST].digest_buf[DGST_R3] + }; + + /** + * base + */ + + const u32 pw_len = pws[gid].pw_len; + + u32x w[64] = { 0 }; + + for (u32 i = 0, idx = 0; i < pw_len; i += 4, idx += 1) + { + w[idx] = pws[gid].i[idx]; + } + + const u32 salt_len = salt_bufs[SALT_POS_HOST].salt_len; + + u32x s[64] = { 0 }; + + for (u32 i = 0, idx = 0; i < salt_len; i += 4, idx += 1) + { + s[idx] = (salt_bufs[SALT_POS_HOST].salt_buf[idx]); + } + + /** + * loop + */ + + u32x w0l = w[0]; + + for (u32 il_pos = 0; il_pos < IL_CNT; il_pos += VECT_SIZE) + { + const u32x w0r = words_buf_r[il_pos / VECT_SIZE]; + + const u32x w0 = w0l | w0r; + + w[0] = w0; + + blake2s_hmac_ctx_vector_t ctx; + + blake2s_hmac_init_vector (&ctx, w, pw_len); + + blake2s_hmac_update_vector (&ctx, s, salt_len); + + blake2s_hmac_final_vector (&ctx); + + const u32x r0 = ctx.opad.h[DGST_R0]; + const u32x r1 = ctx.opad.h[DGST_R1]; + const u32x r2 = ctx.opad.h[DGST_R2]; + const u32x r3 = ctx.opad.h[DGST_R3]; + + COMPARE_S_SIMD (r0, r1, r2, r3); + } + +} From c105104b92827b2344be2fec84e806422c08e877 Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Tue, 22 Apr 2025 23:46:58 +0200 Subject: [PATCH 09/95] Modules: Check UnpackSize to raise false positive with hc_decompress_rar --- deps/unrar/hc_decompress_rar.cpp | 4 ++++ deps/unrar/unpack.hpp | 1 + docs/changes.txt | 1 + 3 files changed, 6 insertions(+) diff --git a/deps/unrar/hc_decompress_rar.cpp b/deps/unrar/hc_decompress_rar.cpp index 7266c0877..36b91a172 100644 --- a/deps/unrar/hc_decompress_rar.cpp +++ b/deps/unrar/hc_decompress_rar.cpp @@ -47,6 +47,10 @@ extern "C" unsigned int hc_decompress_rar (unsigned char *Win, unsigned char *In Unp.DoUnpack (METHOD, SOLID); // sets output + unsigned int wfs = (unsigned int) Unp.GetWrittenFileSize(); + + if (wfs != UnpackSize) return 0; + unsigned int crc32 = (unsigned int) DataIO.UnpHash.GetCRC32 (); return crc32; diff --git a/deps/unrar/unpack.hpp b/deps/unrar/unpack.hpp index 3e23cd320..ab6531f09 100644 --- a/deps/unrar/unpack.hpp +++ b/deps/unrar/unpack.hpp @@ -383,6 +383,7 @@ class Unpack:PackDef bool IsFileExtracted() {return(FileExtracted);} void SetDestSize(int64 DestSize) {DestUnpSize=DestSize;FileExtracted=false;} void SetSuspended(bool Suspended) {Unpack::Suspended=Suspended;} + int64 GetWrittenFileSize() {return(WrittenFileSize);} #ifdef RAR_SMP void SetThreads(uint Threads); diff --git a/docs/changes.txt b/docs/changes.txt index 283e3c0d4..4b110c23c 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -129,6 +129,7 @@ - Metal Backend: added workaround to prevent 'Infinite Loop' bug when build kernels - Metal Backend: allow use of devices with Metal if runtime version is >= 200 - Metal Backend: disable Metal devices only if at least one OpenCL device is active +- Modules: Check UnpackSize to raise false positive with hc_decompress_rar - User Options: added --metal-compiler-runtime option - Hardware Monitor: avoid sprintf in src/ext_iokit.c - Help: show supported hash-modes only with -hh From 21a471139aa76817c761b0c98396285e7c244d8d Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Thu, 24 Apr 2025 11:16:54 +0200 Subject: [PATCH 10/95] avoid processing crc32 if the unpacked size is not the expected --- OpenCL/m23800-optimized.cl | 4 ++++ OpenCL/m23800-pure.cl | 4 ++++ deps/unrar/hc_decompress_rar.cpp | 6 ++---- deps/unrar/unpack.hpp | 4 ++-- src/modules/module_23800.c | 8 ++++++-- 5 files changed, 18 insertions(+), 8 deletions(-) diff --git a/OpenCL/m23800-optimized.cl b/OpenCL/m23800-optimized.cl index 2d7bc57e6..2cefcf827 100644 --- a/OpenCL/m23800-optimized.cl +++ b/OpenCL/m23800-optimized.cl @@ -44,6 +44,8 @@ typedef struct rar3_hook u32 first_block_decrypted[4]; + u32 unpack_failed; + u32 crc32; } rar3_hook_t; @@ -495,6 +497,8 @@ KERNEL_FQ void m23800_comp (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, if (gid >= GID_CNT) return; + if (hooks[gid].unpack_failed == 1) return; + u32 crc32 = hooks[gid].crc32; const u32 r0 = crc32; diff --git a/OpenCL/m23800-pure.cl b/OpenCL/m23800-pure.cl index 2db5f69a1..8b71ae0b8 100644 --- a/OpenCL/m23800-pure.cl +++ b/OpenCL/m23800-pure.cl @@ -42,6 +42,8 @@ typedef struct rar3_hook u32 first_block_decrypted[4]; + u32 unpack_failed; + u32 crc32; } rar3_hook_t; @@ -1096,6 +1098,8 @@ KERNEL_FQ void m23800_comp (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, if (gid >= GID_CNT) return; + if (hooks[gid].unpack_failed == 1) return; + u32 crc32 = hooks[gid].crc32; const u32 r0 = crc32; diff --git a/deps/unrar/hc_decompress_rar.cpp b/deps/unrar/hc_decompress_rar.cpp index 36b91a172..59ffea5fd 100644 --- a/deps/unrar/hc_decompress_rar.cpp +++ b/deps/unrar/hc_decompress_rar.cpp @@ -12,7 +12,7 @@ #define SOLID false #define METHOD VER_UNPACK // 29 for RAR3 archives -extern "C" unsigned int hc_decompress_rar (unsigned char *Win, unsigned char *Inp, unsigned char *VM, unsigned char *PPM, const unsigned int OutputSize, const unsigned char *Input, const unsigned int PackSize, const unsigned int UnpackSize, const unsigned char *Key, const unsigned char *IV) +extern "C" unsigned int hc_decompress_rar (unsigned char *Win, unsigned char *Inp, unsigned char *VM, unsigned char *PPM, const unsigned int OutputSize, const unsigned char *Input, const unsigned int PackSize, const unsigned int UnpackSize, const unsigned char *Key, const unsigned char *IV, unsigned int *unpack_failed) { ComprDataIO DataIO; @@ -47,9 +47,7 @@ extern "C" unsigned int hc_decompress_rar (unsigned char *Win, unsigned char *In Unp.DoUnpack (METHOD, SOLID); // sets output - unsigned int wfs = (unsigned int) Unp.GetWrittenFileSize(); - - if (wfs != UnpackSize) return 0; + *unpack_failed = (Unp.WrittenFileSize != UnpackSize); unsigned int crc32 = (unsigned int) DataIO.UnpHash.GetCRC32 (); diff --git a/deps/unrar/unpack.hpp b/deps/unrar/unpack.hpp index ab6531f09..769fac467 100644 --- a/deps/unrar/unpack.hpp +++ b/deps/unrar/unpack.hpp @@ -279,7 +279,6 @@ class Unpack:PackDef bool Suspended; bool UnpAllBuf; bool UnpSomeRead; - int64 WrittenFileSize; bool FileExtracted; @@ -383,13 +382,14 @@ class Unpack:PackDef bool IsFileExtracted() {return(FileExtracted);} void SetDestSize(int64 DestSize) {DestUnpSize=DestSize;FileExtracted=false;} void SetSuspended(bool Suspended) {Unpack::Suspended=Suspended;} - int64 GetWrittenFileSize() {return(WrittenFileSize);} #ifdef RAR_SMP void SetThreads(uint Threads); void UnpackDecode(UnpackThreadData &D); #endif + int64 WrittenFileSize; + byte *hcwin; byte *hcppm; diff --git a/src/modules/module_23800.c b/src/modules/module_23800.c index 214ea0f50..9b8279db7 100644 --- a/src/modules/module_23800.c +++ b/src/modules/module_23800.c @@ -73,6 +73,8 @@ typedef struct rar3_hook u32 first_block_decrypted[4]; + u32 unpack_failed; + u32 crc32; } rar3_hook_t; @@ -286,7 +288,7 @@ bool module_hook_extra_param_term (MAYBE_UNUSED const hashconfig_t *hashconfig, return true; } -unsigned int hc_decompress_rar (unsigned char *Win, unsigned char *Inp, unsigned char *VM, unsigned char *PPM, const unsigned int OutputSize, const unsigned char *Input, const unsigned int PackSize, const unsigned int UnpackSize, const unsigned char *Key, const unsigned char *IV); +unsigned int hc_decompress_rar (unsigned char *Win, unsigned char *Inp, unsigned char *VM, unsigned char *PPM, const unsigned int OutputSize, const unsigned char *Input, const unsigned int PackSize, const unsigned int UnpackSize, const unsigned char *Key, const unsigned char *IV, unsigned int *unpack_failed); void module_hook23 (hc_device_param_t *device_param, const void *hook_extra_param, const void *hook_salts_buf, const u32 salt_pos, const u64 pw_pos) { @@ -328,7 +330,9 @@ void module_hook23 (hc_device_param_t *device_param, const void *hook_extra_para const u8 *key = (u8 *) hook_item->key; const u8 *iv = (u8 *) hook_item->iv; - const u32 crc32 = hc_decompress_rar (rar3_hook_extra->win[device_param->device_id], rar3_hook_extra->inp[device_param->device_id], rar3_hook_extra->vm[device_param->device_id], rar3_hook_extra->ppm[device_param->device_id], unpack_size, data, pack_size, unpack_size, key, iv); + hook_item->unpack_failed = 1; + + const u32 crc32 = hc_decompress_rar (rar3_hook_extra->win[device_param->device_id], rar3_hook_extra->inp[device_param->device_id], rar3_hook_extra->vm[device_param->device_id], rar3_hook_extra->ppm[device_param->device_id], unpack_size, data, pack_size, unpack_size, key, iv, &hook_item->unpack_failed); hook_item->crc32 = crc32; } From 12bc11482b99b7b879ce5a161c7d16892b5e08e7 Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Sat, 26 Apr 2025 13:07:08 +0200 Subject: [PATCH 11/95] add test unit for 33300 (HMAC-BLAKE2s-256) --- tools/test_modules/m33300.pm | 46 ++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 tools/test_modules/m33300.pm diff --git a/tools/test_modules/m33300.pm b/tools/test_modules/m33300.pm new file mode 100644 index 000000000..6fd276965 --- /dev/null +++ b/tools/test_modules/m33300.pm @@ -0,0 +1,46 @@ +#!/usr/bin/env perl + +## +## Author......: See docs/credits.txt +## License.....: MIT +## + +use strict; +use warnings; + +use Digest::HMAC qw (hmac_hex); + +use Crypt::Digest::BLAKE2s_256 qw (blake2s_256); + +sub module_constraints { [[0, 256], [0, 256], [0, 55], [0, 55], [-1, -1]] } + +sub module_generate_hash +{ + my $word = shift; + my $salt = shift; + + my $digest = hmac_hex ($salt, $word, \&blake2s_256); + + my $hash = sprintf ("%s:%s", $digest, $salt); + + return $hash; +} + +sub module_verify_hash +{ + my $line = shift; + + my ($hash, $salt, $word) = split (':', $line); + + return unless defined $hash; + return unless defined $salt; + return unless defined $word; + + my $word_packed = pack_if_HEX_notation ($word); + + my $new_hash = module_generate_hash ($word_packed, $salt); + + return ($new_hash, $word); +} + +1; From 96cadf80c16d948e6b57fd3519341a75bec25142 Mon Sep 17 00:00:00 2001 From: holly-o <128481388+holly-o@users.noreply.github.com> Date: Fri, 11 Apr 2025 16:12:21 +0100 Subject: [PATCH 12/95] Removed local .DS_Store files --- .../{m67890_a0-pure.cl => m33300_a0-pure.cl} | 4 +- .../{m67890_a1-pure.cl => m33300_a1-pure.cl} | 4 +- .../{m67890_a3-pure.cl => m33300_a3-pure.cl} | 4 +- src/modules/module_33300.c | 216 ++++++++++++++++++ 4 files changed, 222 insertions(+), 6 deletions(-) rename OpenCL/{m67890_a0-pure.cl => m33300_a0-pure.cl} (96%) rename OpenCL/{m67890_a1-pure.cl => m33300_a1-pure.cl} (97%) rename OpenCL/{m67890_a3-pure.cl => m33300_a3-pure.cl} (96%) create mode 100644 src/modules/module_33300.c diff --git a/OpenCL/m67890_a0-pure.cl b/OpenCL/m33300_a0-pure.cl similarity index 96% rename from OpenCL/m67890_a0-pure.cl rename to OpenCL/m33300_a0-pure.cl index b32d7a7cf..78fc5d463 100644 --- a/OpenCL/m67890_a0-pure.cl +++ b/OpenCL/m33300_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2s.cl) #endif -KERNEL_FQ void m67890_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void m33300_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void m67890_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m67890_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void m33300_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m67890_a1-pure.cl b/OpenCL/m33300_a1-pure.cl similarity index 97% rename from OpenCL/m67890_a1-pure.cl rename to OpenCL/m33300_a1-pure.cl index 04f023d61..9c0cf15d0 100644 --- a/OpenCL/m67890_a1-pure.cl +++ b/OpenCL/m33300_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2s.cl) #endif -KERNEL_FQ void m67890_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void m33300_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -92,7 +92,7 @@ KERNEL_FQ void m67890_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m67890_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void m33300_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m67890_a3-pure.cl b/OpenCL/m33300_a3-pure.cl similarity index 96% rename from OpenCL/m67890_a3-pure.cl rename to OpenCL/m33300_a3-pure.cl index 8e39f0a60..5cdfefcd0 100644 --- a/OpenCL/m67890_a3-pure.cl +++ b/OpenCL/m33300_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2s.cl) #endif -KERNEL_FQ void m67890_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void m33300_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -78,7 +78,7 @@ KERNEL_FQ void m67890_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m67890_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void m33300_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/src/modules/module_33300.c b/src/modules/module_33300.c new file mode 100644 index 000000000..9026ac61b --- /dev/null +++ b/src/modules/module_33300.c @@ -0,0 +1,216 @@ +/** + * Author......: See docs/credits.txt + * License.....: MIT + */ + +#include "common.h" +#include "types.h" +#include "modules.h" +#include "bitops.h" +#include "convert.h" +#include "shared.h" + +static const u32 ATTACK_EXEC = ATTACK_EXEC_INSIDE_KERNEL; +static const u32 DGST_POS0 = 3; +static const u32 DGST_POS1 = 7; +static const u32 DGST_POS2 = 2; +static const u32 DGST_POS3 = 6; +static const u32 DGST_SIZE = DGST_SIZE_4_8; +static const u32 HASH_CATEGORY = HASH_CATEGORY_RAW_HASH_AUTHENTICATED; +static const char *HASH_NAME = "HMAC-BLAKE2S (key = $pass)"; +static const u64 KERN_TYPE = 33300; +static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE + | OPTI_TYPE_NOT_ITERATED; +static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE + | OPTS_TYPE_PT_GENERATE_LE + | OPTS_TYPE_ST_ADD80; +static const u32 SALT_TYPE = SALT_TYPE_GENERIC; +static const char *ST_PASS = "hashcat"; +static const char *ST_HASH = "0d541ae24d30aff2627c4d1a910f766088a64809edb46a05d29649a9b944da6c:1234"; + +u32 module_attack_exec (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ATTACK_EXEC; } +u32 module_dgst_pos0 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS0; } +u32 module_dgst_pos1 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS1; } +u32 module_dgst_pos2 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS2; } +u32 module_dgst_pos3 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS3; } +u32 module_dgst_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_SIZE; } +u32 module_hash_category (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return HASH_CATEGORY; } +const char *module_hash_name (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return HASH_NAME; } +u64 module_kern_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return KERN_TYPE; } +u32 module_opti_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return OPTI_TYPE; } +u64 module_opts_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return OPTS_TYPE; } +u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return SALT_TYPE; } +const char *module_st_hash (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_HASH; } +const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_PASS; } + +int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len) +{ + u32 *digest = (u32 *) digest_buf; + + hc_token_t token; + + memset (&token, 0, sizeof (hc_token_t)); + + token.token_cnt = 2; + + token.sep[0] = hashconfig->separator; + token.len[0] = 64; + token.attr[0] = TOKEN_ATTR_FIXED_LENGTH + | TOKEN_ATTR_VERIFY_HEX; + + token.len_min[1] = SALT_MIN; + token.len_max[1] = SALT_MAX; + token.attr[1] = TOKEN_ATTR_VERIFY_LENGTH; + + if (hashconfig->opts_type & OPTS_TYPE_ST_HEX) + { + token.len_min[1] *= 2; + token.len_max[1] *= 2; + + token.attr[1] |= TOKEN_ATTR_VERIFY_HEX; + } + + const int rc_tokenizer = input_tokenizer ((const u8 *) line_buf, line_len, &token); + + if (rc_tokenizer != PARSER_OK) return (rc_tokenizer); + + const u8 *hash_pos = token.buf[0]; + + digest[0] = hex_to_u32 (hash_pos + 0); + digest[1] = hex_to_u32 (hash_pos + 8); + digest[2] = hex_to_u32 (hash_pos + 16); + digest[3] = hex_to_u32 (hash_pos + 24); + digest[4] = hex_to_u32 (hash_pos + 32); + digest[5] = hex_to_u32 (hash_pos + 40); + digest[6] = hex_to_u32 (hash_pos + 48); + digest[7] = hex_to_u32 (hash_pos + 56); + + const u8 *salt_pos = token.buf[1]; + const int salt_len = token.len[1]; + + const bool parse_rc = generic_salt_decode (hashconfig, salt_pos, salt_len, (u8 *) salt->salt_buf, (int *) &salt->salt_len); + + if (parse_rc == false) return (PARSER_SALT_LENGTH); + + return (PARSER_OK); +} + +int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const void *digest_buf, MAYBE_UNUSED const salt_t *salt, MAYBE_UNUSED const void *esalt_buf, MAYBE_UNUSED const void *hook_salt_buf, MAYBE_UNUSED const hashinfo_t *hash_info, char *line_buf, MAYBE_UNUSED const int line_size) +{ + const u32 *digest = (const u32 *) digest_buf; + + // we can not change anything in the original buffer, otherwise destroying sorting + // therefore create some local buffer + + u32 tmp[8]; + + tmp[0] = digest[0]; + tmp[1] = digest[1]; + tmp[2] = digest[2]; + tmp[3] = digest[3]; + tmp[4] = digest[4]; + tmp[5] = digest[5]; + tmp[6] = digest[6]; + tmp[7] = digest[7]; + + u8 *out_buf = (u8 *) line_buf; + + int out_len = 0; + + u32_to_hex (tmp[0], out_buf + out_len); out_len += 8; + u32_to_hex (tmp[1], out_buf + out_len); out_len += 8; + u32_to_hex (tmp[2], out_buf + out_len); out_len += 8; + u32_to_hex (tmp[3], out_buf + out_len); out_len += 8; + u32_to_hex (tmp[4], out_buf + out_len); out_len += 8; + u32_to_hex (tmp[5], out_buf + out_len); out_len += 8; + u32_to_hex (tmp[6], out_buf + out_len); out_len += 8; + u32_to_hex (tmp[7], out_buf + out_len); out_len += 8; + + out_buf[out_len] = hashconfig->separator; + + out_len += 1; + + out_len += generic_salt_encode (hashconfig, (const u8 *) salt->salt_buf, (const int) salt->salt_len, out_buf + out_len); + + return out_len; +} + +void module_init (module_ctx_t *module_ctx) +{ + module_ctx->module_context_size = MODULE_CONTEXT_SIZE_CURRENT; + module_ctx->module_interface_version = MODULE_INTERFACE_VERSION_CURRENT; + + module_ctx->module_attack_exec = module_attack_exec; + module_ctx->module_benchmark_esalt = MODULE_DEFAULT; + module_ctx->module_benchmark_hook_salt = MODULE_DEFAULT; + module_ctx->module_benchmark_mask = MODULE_DEFAULT; + module_ctx->module_benchmark_charset = MODULE_DEFAULT; + module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; + module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; + module_ctx->module_deprecated_notice = MODULE_DEFAULT; + module_ctx->module_dgst_pos0 = module_dgst_pos0; + module_ctx->module_dgst_pos1 = module_dgst_pos1; + module_ctx->module_dgst_pos2 = module_dgst_pos2; + module_ctx->module_dgst_pos3 = module_dgst_pos3; + module_ctx->module_dgst_size = module_dgst_size; + module_ctx->module_dictstat_disable = MODULE_DEFAULT; + module_ctx->module_esalt_size = MODULE_DEFAULT; + module_ctx->module_extra_buffer_size = MODULE_DEFAULT; + module_ctx->module_extra_tmp_size = MODULE_DEFAULT; + module_ctx->module_extra_tuningdb_block = MODULE_DEFAULT; + module_ctx->module_forced_outfile_format = MODULE_DEFAULT; + module_ctx->module_hash_binary_count = MODULE_DEFAULT; + module_ctx->module_hash_binary_parse = MODULE_DEFAULT; + module_ctx->module_hash_binary_save = MODULE_DEFAULT; + module_ctx->module_hash_decode_postprocess = MODULE_DEFAULT; + module_ctx->module_hash_decode_potfile = MODULE_DEFAULT; + module_ctx->module_hash_decode_zero_hash = MODULE_DEFAULT; + module_ctx->module_hash_decode = module_hash_decode; + module_ctx->module_hash_encode_status = MODULE_DEFAULT; + module_ctx->module_hash_encode_potfile = MODULE_DEFAULT; + module_ctx->module_hash_encode = module_hash_encode; + module_ctx->module_hash_init_selftest = MODULE_DEFAULT; + module_ctx->module_hash_mode = MODULE_DEFAULT; + module_ctx->module_hash_category = module_hash_category; + module_ctx->module_hash_name = module_hash_name; + module_ctx->module_hashes_count_min = MODULE_DEFAULT; + module_ctx->module_hashes_count_max = MODULE_DEFAULT; + module_ctx->module_hlfmt_disable = MODULE_DEFAULT; + module_ctx->module_hook_extra_param_size = MODULE_DEFAULT; + module_ctx->module_hook_extra_param_init = MODULE_DEFAULT; + module_ctx->module_hook_extra_param_term = MODULE_DEFAULT; + module_ctx->module_hook12 = MODULE_DEFAULT; + module_ctx->module_hook23 = MODULE_DEFAULT; + module_ctx->module_hook_salt_size = MODULE_DEFAULT; + module_ctx->module_hook_size = MODULE_DEFAULT; + module_ctx->module_jit_build_options = MODULE_DEFAULT; + module_ctx->module_jit_cache_disable = MODULE_DEFAULT; + module_ctx->module_kernel_accel_max = MODULE_DEFAULT; + module_ctx->module_kernel_accel_min = MODULE_DEFAULT; + module_ctx->module_kernel_loops_max = MODULE_DEFAULT; + module_ctx->module_kernel_loops_min = MODULE_DEFAULT; + module_ctx->module_kernel_threads_max = MODULE_DEFAULT; + module_ctx->module_kernel_threads_min = MODULE_DEFAULT; + module_ctx->module_kern_type = module_kern_type; + module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; + module_ctx->module_opti_type = module_opti_type; + module_ctx->module_opts_type = module_opts_type; + module_ctx->module_outfile_check_disable = MODULE_DEFAULT; + module_ctx->module_outfile_check_nocomp = MODULE_DEFAULT; + module_ctx->module_potfile_custom_check = MODULE_DEFAULT; + module_ctx->module_potfile_disable = MODULE_DEFAULT; + module_ctx->module_potfile_keep_all_hashes = MODULE_DEFAULT; + module_ctx->module_pwdump_column = MODULE_DEFAULT; + module_ctx->module_pw_max = MODULE_DEFAULT; + module_ctx->module_pw_min = MODULE_DEFAULT; + module_ctx->module_salt_max = MODULE_DEFAULT; + module_ctx->module_salt_min = MODULE_DEFAULT; + module_ctx->module_salt_type = module_salt_type; + module_ctx->module_separator = MODULE_DEFAULT; + module_ctx->module_st_hash = module_st_hash; + module_ctx->module_st_pass = module_st_pass; + module_ctx->module_tmp_size = MODULE_DEFAULT; + module_ctx->module_unstable_warning = MODULE_DEFAULT; + module_ctx->module_warmup_disable = MODULE_DEFAULT; +} From 15e74c2e57c284d41bc9fcd3218892595c322f75 Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Sat, 24 May 2025 15:39:06 +0200 Subject: [PATCH 13/95] fix build error on old linux distro --- src/modules/module_33500.c | 4 ++-- src/modules/module_33501.c | 4 ++-- src/modules/module_33502.c | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/modules/module_33500.c b/src/modules/module_33500.c index e37d265c5..dadc7cc9e 100644 --- a/src/modules/module_33500.c +++ b/src/modules/module_33500.c @@ -58,8 +58,8 @@ typedef struct rc4 } rc4_t; static const char *SIGNATURE_RC4 = "$rc4$"; -static const u32 RC4_KEY_BITS = 40; -static const u32 PW_LEN = RC4_KEY_BITS / 8; // 5 +#define RC4_KEY_BITS 40 +#define PW_LEN (RC4_KEY_BITS / 8) // 5 bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) { diff --git a/src/modules/module_33501.c b/src/modules/module_33501.c index 4f51577a7..37f3ac585 100644 --- a/src/modules/module_33501.c +++ b/src/modules/module_33501.c @@ -58,8 +58,8 @@ typedef struct rc4 } rc4_t; static const char *SIGNATURE_RC4 = "$rc4$"; -static const u32 RC4_KEY_BITS = 72; -static const u32 PW_LEN = RC4_KEY_BITS / 8; // 9 +#define RC4_KEY_BITS 72 +#define PW_LEN (RC4_KEY_BITS / 8) // 9 bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) { diff --git a/src/modules/module_33502.c b/src/modules/module_33502.c index f02141e2d..8b317b1c4 100644 --- a/src/modules/module_33502.c +++ b/src/modules/module_33502.c @@ -58,8 +58,8 @@ typedef struct rc4 } rc4_t; static const char *SIGNATURE_RC4 = "$rc4$"; -static const u32 RC4_KEY_BITS = 104; -static const u32 PW_LEN = RC4_KEY_BITS / 8; // 13 +#define RC4_KEY_BITS 104 +#define PW_LEN (RC4_KEY_BITS / 8) // 13 bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) { From 5abef56ba8c90f63fc6b5d5675d0b1f51049ef98 Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Tue, 27 May 2025 18:54:35 +0200 Subject: [PATCH 14/95] Fix test.sh bugs with RC4, a6 and a7 multi --- tools/test.sh | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/tools/test.sh b/tools/test.sh index 7732cf515..abd7777a1 100755 --- a/tools/test.sh +++ b/tools/test.sh @@ -352,12 +352,12 @@ function init() min_len=7 # means length 8, since we start with 0 elif [ "${hash_type}" -eq 22000 ]; then min_len=7 # means length 8, since we start with 0 - elif [ "${hash_type}" -eq 40000 ]; then + elif [ "${hash_type}" -eq 33500 ]; then fixed_len=5 - elif [ "${hash_type}" -eq 40001 ]; then + elif [ "${hash_type}" -eq 33501 ]; then min_len=5 fixed_len=9 - elif [ "${hash_type}" -eq 40002 ]; then + elif [ "${hash_type}" -eq 33502 ]; then min_len=5 fixed_len=13 fi @@ -375,10 +375,14 @@ function init() rm -rf "${OUTD}/${hash_type}_dict1_multi_${i}" "${OUTD}/${hash_type}_dict2_multi_${i}" touch "${OUTD}/${hash_type}_dict1_multi_${i}" "${OUTD}/${hash_type}_dict2_multi_${i}" - if [ "${fixed_len}" -eq "${i}" ]; then - perl tools/test.pl single "${hash_type}" ${i} > "${cmd_file}" + if [ "${fixed_len}" -ne 0 ]; then + if [ "${fixed_len}" -eq "${i}" ]; then + perl tools/test.pl single "${hash_type}" ${i} > "${cmd_file}" + else + perl tools/test.pl single "${hash_type}" ${fixed_len} > "${cmd_file}" + fi else - perl tools/test.pl single "${hash_type}" ${fixed_len} > "${cmd_file}" + perl tools/test.pl single "${hash_type}" ${i} > "${cmd_file}" fi sed 's/^echo *|.*$//' "${cmd_file}" | awk '{print $2}' > "${OUTD}/${hash_type}_passwords_multi_${i}.txt" @@ -1944,11 +1948,11 @@ function attack_6() max=5 elif [ "${hash_type}" -eq 22000 ]; then max=5 - elif [ "${hash_type}" -eq 40000 ]; then + elif [ "${hash_type}" -eq 33500 ]; then min=5 - elif [ "${hash_type}" -eq 40001 ]; then + elif [ "${hash_type}" -eq 33501 ]; then min=8 - elif [ "${hash_type}" -eq 40002 ]; then + elif [ "${hash_type}" -eq 33502 ]; then min=8 fi @@ -2394,11 +2398,11 @@ function attack_7() max=5 elif [ "${hash_type}" -eq 22000 ]; then max=5 - elif [ "${hash_type}" -eq 40000 ]; then + elif [ "${hash_type}" -eq 33500 ]; then min=5 - elif [ "${hash_type}" -eq 40001 ]; then + elif [ "${hash_type}" -eq 33501 ]; then max=3 - elif [ "${hash_type}" -eq 40002 ]; then + elif [ "${hash_type}" -eq 33502 ]; then max=3 fi From 0d8c8cba2f63d4d159d7ada7d5228c42aa64e298 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Thu, 29 May 2025 15:08:53 +0200 Subject: [PATCH 15/95] The Assimilation Bridge (Introduction Document) --- docs/hashcat-assimilation-bridge.md | 73 +++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 docs/hashcat-assimilation-bridge.md diff --git a/docs/hashcat-assimilation-bridge.md b/docs/hashcat-assimilation-bridge.md new file mode 100644 index 000000000..7959120f2 --- /dev/null +++ b/docs/hashcat-assimilation-bridge.md @@ -0,0 +1,73 @@ +# Assimilation Bridge in Hashcat v7 + +## Overview + +Hashcat has historically optimized password cracking GPU and CPU compute backends. However, other types of hardware compute systems or pure software solutions were not supported. The Assimilation Bridge is a feature introduced in Hashcat v7 that extends the compute pipeline beyond traditional backends. It enables the integration of additional compute resources and software solutions such as FPGAs, remote TPMs, CPU reference implementations, or embedded runtimes into new or existing hash mode plugins. + +All existing hash-mode plugins continue to function as before. Bridges are optional and only active when explicitly declared within a plugin's configuration. This ensures full backward compatibility with existing setups. + +## Use Cases + +### Embedded Language Runtimes + +Hashcat v7 introduces support for an embedded Python interpreter as its premier demonstration example: + +- Hash modes `-m 72000` and `-m 73000` use embedded Python; start with `-m 73000`. +- These demonstrate a "generic hash" model, enabling full hash mode creation in Python. +- Users don’t need to recompile when making changes. +- Python’s crypto ecosystem helps developers or AI generate new hash mode code easily and performant. +- Here's a sample how a user can add `yescrypt` (`$y$...`) support with just one line of code: + +```python +from pyescrypt import Yescrypt,Mode + +def calc_hash(password: bytes, salt: dict) -> str: + return Yescrypt(n=4096, r=32, p=1, mode=Mode.MCF).digest(password=password, settings=hcshared.get_salt_buf(salt)).decode('utf8') +``` + +This is just a preview. See `docs/hashcat-python-plugin-quickstart.md` for details about hashing formats, self-test pairs, or when to use `-m 72000` vs. `-m 73000`. + +### Hybrid Architecture + +Note that tn the Python example, only CPU resources are used and Hashcat does not transform Python into GPU code. However, the Bridge supports hybrid setups, where part of the workload runs on a traditional backend and another part on the Bridge. This model allows performance-critical components to be handled by the most suitable type of compute unit. + +For example, in hash mode `-m 70100`, a demonstration of SCRYPT, the PBKDF2 stage runs on a GPU using OpenCL/CUDA/HIP/Metal, while the memory-intensive `smix()` runs on the CPU through a bridge using the scrypt-jane implementation. This could just as easily be offloaded to an FPGA instead, which would benefit from reduced code complexity and increased parallelization boosting performance significantly. + +A mix of traditional backend compute on GPU and embedded Python is also possible. + +### CPU-Based Reference Code + +Bridges can also be used to quickly integrate reference implementations of new algorithms. We will provide initial examples for Argon2 and SCRYPT. These can run entirely on CPU or form part of a hybrid setup. + +- Mode `-m 70000` uses the official Argon2 implementation from the Password Hashing Competition (PHC). +- Mode `-m 70200` demonstrates Yescrypt in its scrypt-emulation mode and benefits from AVX512 acceleration on capable CPUs. + +### Secure Distributed Cracking + +In scenarios where raw password data must remain local, bridges can enable remote processing of depersonalized intermediate keys. This allows secure password cracking using external compute infrastructure without compromising sensitive input. + +A working proof-of-concept exists, but it's not yet confirmed for inclusion in the v7 release. + +## Other Ideas for Use Cases (Not Yet Implemented) + +### Remote Hardware + +A bridge could be built to interact with TPMs on mobile devices or laptops, accessed through networked agents. This enables secure challenge/response flows with hardware-backed key storage. + +### Project Interoperability + +Depending on interface compatibility, code from other password cracking tools (e.g., JtR) could be wrapped in bridges, allowing functionality reuse and deeper collaboration. + +## Limitations and Status + +- Bridges are optional and configured on a per-plugin basis. +- Hashcat v7 includes working bridges for CPU and Python. +- FPGA support has been verified internally but is excluded from this release due to licensing issues. + +> **Call to FPGA Developers**: Contribute an open FPGA implementation and bitstream and the Hashcat Developer Team will support in integrating it into a bridge. Please contact us on Discord. + +## Conclusion + +The Assimilation Bridge introduces a highly extensible mechanism to integrate custom compute resources and logic into Hashcat. + +For hands-on examples and developer guidance, refer to the the accompanying documentation in `docs/hashcat-assimiliation-bridge-development.md` (first draft). From c607910f1cbac2beb4be615cefef93c0922bcf7a Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Thu, 29 May 2025 15:10:09 +0200 Subject: [PATCH 16/95] The Assimilation Bridge (Additional Documents) --- ...hashcat-assimilation-bridge-development.md | 133 ++++++++++++++++ docs/hashcat-python-plugin-quickstart.md | 144 ++++++++++++++++++ 2 files changed, 277 insertions(+) create mode 100644 docs/hashcat-assimilation-bridge-development.md create mode 100644 docs/hashcat-python-plugin-quickstart.md diff --git a/docs/hashcat-assimilation-bridge-development.md b/docs/hashcat-assimilation-bridge-development.md new file mode 100644 index 000000000..d82604cd1 --- /dev/null +++ b/docs/hashcat-assimilation-bridge-development.md @@ -0,0 +1,133 @@ + +## Developer Section + +The following section is for plugin and bridge developers. It contains low-level implementation details. It's a first draft, expect more details to fill in soon. + +--- + +## Plugin Integration and Bridge Registration + +Plugins can opt in to bridge support by adding: + +```c +static const u64 BRIDGE_TYPE = BRIDGE_TYPE_MATCH_TUNINGS + | BRIDGE_TYPE_LAUNCH_LOOP; +static const char *BRIDGE_NAME = "scrypt_jane"; +``` + +* `BRIDGE_NAME` tells Hashcat which bridge to load (e.g., `bridge_scrypt_jane.so`). +* `BRIDGE_TYPE` indicates which backend kernel functions the bridge will override: + + * `BRIDGE_TYPE_LAUNCH_LOOP` + * `BRIDGE_TYPE_LAUNCH_LOOP2` + +Hashcat loads the bridge dynamically and uses it for any declared replacements. It's the developer's responsibility to ensure compatibility. That typically means the handling of the `tmps` variable relevant in the `kernel_loop` and how it changes over time. Hashcat will take care of copying the data from and to the compute backend (GPU) buffers. + +--- + +## How Bridges Work + +When Hashcat starts with a plugin that specifies a bridge, it loads the bridge and invokes its initialization function. The bridge must then discover its internal compute units, called *bridge units*. This is done manually by the bridge developer. + +Each bridge unit maps to one virtual backend device, which allows asynchronous and independent parallel execution. + +### Virtual Backend Devices + +* Use `-Y` to define how many virtual backend devices to create. +* Use `-R` to bind these virtual devices to a physical backend host (new in v7). + +This structure supports mixed-performance hardware without bottlenecks. + +--- + +## Writing a Bridge + +### File Layout + +Bridges live in the `src/bridges/` directory and consist of a `.c` file and a `.mk` build rule: + +``` +src/bridges/bridge_scrypt_jane.c +src/bridges/bridge_scrypt_jane.mk +``` + +Example build rule: + +``` +bridges/bridge_scrypt_jane.so: src/bridges/bridge_scrypt_jane.c +``` + +Hashcat will automatically load this shared object based on the plugin's `BRIDGE_NAME`. + +### Required Function Exports + +```c +bridge_ctx->platform_init = platform_init; +bridge_ctx->platform_term = platform_term; +bridge_ctx->get_unit_count = get_unit_count; +bridge_ctx->get_unit_info = get_unit_info; +bridge_ctx->get_workitem_count = get_workitem_count; +bridge_ctx->thread_init = BRIDGE_DEFAULT; +bridge_ctx->thread_term = BRIDGE_DEFAULT; +bridge_ctx->salt_prepare = salt_prepare; +bridge_ctx->salt_destroy = salt_destroy; +bridge_ctx->launch_loop = launch_loop; +bridge_ctx->launch_loop2 = BRIDGE_DEFAULT; +bridge_ctx->st_update_hash = BRIDGE_DEFAULT; +bridge_ctx->st_update_pass = BRIDGE_DEFAULT; +``` + +> Use `BRIDGE_DEFAULT` when no function implementation is required. + +### Mandatory Functions + +The following functions must be defined: + +```c +CHECK_MANDATORY (bridge_ctx->platform_init); +CHECK_MANDATORY (bridge_ctx->platform_term); +CHECK_MANDATORY (bridge_ctx->get_unit_count); +CHECK_MANDATORY (bridge_ctx->get_unit_info); +CHECK_MANDATORY (bridge_ctx->get_workitem_count); +``` + +### Function Roles + +**platform\_init** +Called at startup. Responsible for initialization. This might include loading libraries, connecting to remote endpoints, or setting up hardware APIs. Returns a context pointer. + +**platform\_term** +Final cleanup logic. Frees any context data allocated during initialization. + +**get\_unit\_count** +Returns the number of available units. For example, return `2` if two FPGAs are detected. + +**get\_unit\_info** +Returns a human-readable description of a unit, like "Python v3.13.3". + +**get\_workitem\_count** +Returns the number of password candidates to process per invocation. + +**thread\_init** +Optional. Use for per-thread setup, such as creating a new Python interpreter. + +**thread\_term** +Optional. Use for per-thread cleanup. + +**salt\_prepare** +Called once per salt. Useful for preprocessing or storing large salt/esalt buffers. + +**salt\_destroy** +Optional cleanup routine for any salt-specific memory. + +**launch\_loop** +Main compute function. Replaces the traditional `_loop` kernel. + +**launch\_loop2** +Secondary compute function. Replaces `_loop2` if needed. + +**st\_update\_hash** +Optionally override the module's default self-test hash. + +**st\_update\_pass** +Optionally override the module's default self-test password. diff --git a/docs/hashcat-python-plugin-quickstart.md b/docs/hashcat-python-plugin-quickstart.md new file mode 100644 index 000000000..1c27617aa --- /dev/null +++ b/docs/hashcat-python-plugin-quickstart.md @@ -0,0 +1,144 @@ + +# Hashcat Python Plugin Developer Guide + +## Introduction + +This guide walks you through building custom hash modes in **pure Python** using Hashcat v7's Python plugin from the new assimilation bridge. Whether you're experimenting with a new algorithm, supporting a proprietary format, hacking a prototype, or just writing hashing logic in a high-level language, this plugin interface makes it fast and easy. + +No C required. No recompilation. Just write your logic in pure python code in `calc_hash()`. + +You can use any python modules you want. + +--- + +## Quick Start + +Hashcat mode `73000` is preconfigured to load a generic Python plugin source file from `Python/generic_hash_mp.py`: + +``` +hashcat -m 73000 -b +``` + +You can edit the `Python/generic_hash_mp.py`, or override the plugin source file with: + +``` +hashcat -m 73000 --bridge-parameter1=my_hash.py hash.txt wordlist.txt ... +``` + +--- + +## Yescrypt in One Line + +### Generate a Yescrypt Test Hash + +``` +echo password | mkpasswd -s -m yescrypt +``` + +Example output: + +``` +$y$j9T$uxVFACnNnGBakt9MLrpFf0$SmbSZAge5oa1BfHPBxYGq3mITgHeO/iG2Mdfgo93UN0 +``` + +### Prepare Hash Line for Hashcat + +``` +$y$j9T$uxVFACnNnGBakt9MLrpFf0$SmbSZAge5oa1BfHPBxYGq3mITgHeO/iG2Mdfgo93UN0*$y$j9T$uxVFACnNnGBakt9MLrpFf0$ +``` + +(Use the full hash before the `*`, and the salt portion after the `*`.) + +### Plugin Code + +Install the module: + +``` +pip install pyescrypt +``` + +Then in your plugin (either `generic_hash_mp.py` for -m 73000 or `generic_hash_sp.py` for -m 72000) + +```python +from pyescrypt import Yescrypt,Mode + +# Self-Test pair +ST_HASH = "$y$j9T$uxVFACnNnGBakt9MLrpFf0$SmbSZAge5oa1BfHPBxYGq3mITgHeO/iG2Mdfgo93UN0*$y$j9T$uxVFACnNnGBakt9MLrpFf0$" +ST_PASS = "password" + +def calc_hash(password: bytes, salt: dict) -> str: + return Yescrypt(n=4096, r=32, p=1, mode=Mode.MCF).digest(password=password, settings=hcshared.get_salt_buf(salt)).decode('utf8') +``` + +That's it - full Yescrypt support in Hashcat with a single line of code. + +### Run + +``` +hashcat -m 73000 yescrypt.hash wordlist.txt +``` + +--- + +## Debugging Without Hashcat + +You can run your plugin as a standalone script: + +``` +python3 generic_hash.py +``` + +It reads passwords from stdin and prints the result of `calc_hash()`: + +``` +echo "password" | python3 generic_hash_mp.py +``` + +Note that you probably want to inline the correct salt value, see the `main` section in the code. + +--- + +## Windows and Linux/macOS + +There are significant differences between Windows and Linux/macOS when embedding Python as done here. It's a complex issue, and we hope future Python developments toward a fully GIL-free mode will resolve it. For now, we must work around platform-specific behavior. + +### On Windows + +The `multiprocessing` module is not fully supported in this embedded setup. As a result, only one thread can run effectively. While the `threading` module does work, most cryptographic functions like `sha256()` block the GIL. CPU-intensive algorithms such as 10,000 iterations of `sha256()` will monopolize the GIL, making the program effectively single-threaded. + +### On Linux/macOS + +The `multiprocessing` module works correctly, enabling full CPU utilization through parallel worker processes. + +### Free-threaded Python (3.13+) + +Python 3.13 introduces optional GIL-free support. This allows multithreading to work even in embedded Python, both on Linux and Windows. Hashcat leverages this through two modes: + +- `-m 72000`: Uses free-threaded Python (no multiprocessing) +- `-m 73000`: Uses GIL-bound Python with multiprocessing + +Multiprocessing (73000) supports most modules and is generally better for real-world workloads, but it works only on Linux. Developers may use `-m 73000` on Linux for performance and `-m 72000` on Windows for development, provided their code does not rely on modules that require `cffi` because this as of now lacks support for running with Python free-treaded ABI. + +--- + +## Python 3.13 Requirement + +The `-m 72000` mode requires Python 3.13 due to its reliance on the new free-threading feature. This feature is not available in earlier versions. + +### Why Python 3.13 Isn't Preinstalled + +Several Linux distributions, including Ubuntu 24.04, do not ship with Python 3.13 because it was released after the distro’s feature freeze. You will likely need to install it manually. + +### Installing Python 3.13 + +**On Windows**: Use the official installer and ensure you check the "Install free-threaded" option - it's disabled by default. + +**On Linux/macOS**: Use `pyenv`. It's the easiest way to install and manage Python versions: + +``` +pyenv install 3.13t +pyenv local 3.13t +``` + +This makes it easy to manage `pip` packages without global installs or virtual environments. + From ceb5ff5641c0c7c6452c34e9f942acd0465e4849 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Thu, 29 May 2025 15:38:13 +0200 Subject: [PATCH 17/95] The Assimilation Bridge (Framework) --- .gitignore | 6 + modules/.lock => bridges/.gitkeep | 0 extra/tab_completion/hashcat.sh | 6 +- include/backend.h | 2 - include/bridges.h | 30 ++ include/types.h | 109 ++++- obj/.lock => modules/.gitkeep | 0 obj/{contrib/minizip/.lock => .gitkeep} | 0 obj/contrib/minizip/.gitkeep | 0 src/Makefile | 80 +++- src/backend.c | 452 +++++++++++++++---- src/bridges.c | 274 +++++++++++ src/bridges/.gitkeep | 0 src/dispatch.c | 38 ++ src/hashcat.c | 37 ++ src/hashes.c | 14 +- src/interface.c | 13 + src/main.c | 40 ++ src/modules/module_00000.c | 2 + src/modules/module_00010.c | 2 + src/modules/module_00011.c | 2 + src/modules/module_00012.c | 2 + src/modules/module_00020.c | 2 + src/modules/module_00021.c | 2 + src/modules/module_00022.c | 2 + src/modules/module_00023.c | 2 + src/modules/module_00024.c | 2 + src/modules/module_00030.c | 2 + src/modules/module_00040.c | 2 + src/modules/module_00050.c | 2 + src/modules/module_00060.c | 2 + src/modules/module_00070.c | 2 + src/modules/module_00100.c | 2 + src/modules/module_00101.c | 2 + src/modules/module_00110.c | 2 + src/modules/module_00111.c | 2 + src/modules/module_00112.c | 2 + src/modules/module_00120.c | 2 + src/modules/module_00121.c | 2 + src/modules/module_00122.c | 2 + src/modules/module_00124.c | 2 + src/modules/module_00125.c | 2 + src/modules/module_00130.c | 2 + src/modules/module_00131.c | 2 + src/modules/module_00132.c | 2 + src/modules/module_00133.c | 2 + src/modules/module_00140.c | 2 + src/modules/module_00141.c | 2 + src/modules/module_00150.c | 2 + src/modules/module_00160.c | 2 + src/modules/module_00170.c | 2 + src/modules/module_00200.c | 2 + src/modules/module_00300.c | 2 + src/modules/module_00400.c | 2 + src/modules/module_00500.c | 2 + src/modules/module_00501.c | 2 + src/modules/module_00600.c | 2 + src/modules/module_00610.c | 2 + src/modules/module_00620.c | 2 + src/modules/module_00900.c | 2 + src/modules/module_01000.c | 2 + src/modules/module_01100.c | 2 + src/modules/module_01300.c | 2 + src/modules/module_01400.c | 2 + src/modules/module_01410.c | 2 + src/modules/module_01411.c | 2 + src/modules/module_01420.c | 2 + src/modules/module_01421.c | 2 + src/modules/module_01430.c | 2 + src/modules/module_01440.c | 2 + src/modules/module_01441.c | 2 + src/modules/module_01450.c | 2 + src/modules/module_01460.c | 2 + src/modules/module_01470.c | 2 + src/modules/module_01500.c | 2 + src/modules/module_01600.c | 2 + src/modules/module_01700.c | 2 + src/modules/module_01710.c | 2 + src/modules/module_01711.c | 2 + src/modules/module_01720.c | 2 + src/modules/module_01722.c | 2 + src/modules/module_01730.c | 2 + src/modules/module_01731.c | 2 + src/modules/module_01740.c | 2 + src/modules/module_01750.c | 2 + src/modules/module_01760.c | 2 + src/modules/module_01770.c | 2 + src/modules/module_01800.c | 8 +- src/modules/module_02000.c | 2 + src/modules/module_02100.c | 2 + src/modules/module_02400.c | 2 + src/modules/module_02410.c | 2 + src/modules/module_02500.c | 2 + src/modules/module_02501.c | 2 + src/modules/module_02600.c | 2 + src/modules/module_02611.c | 2 + src/modules/module_02612.c | 2 + src/modules/module_02630.c | 2 + src/modules/module_02711.c | 2 + src/modules/module_02811.c | 2 + src/modules/module_03000.c | 2 + src/modules/module_03100.c | 2 + src/modules/module_03200.c | 2 + src/modules/module_03500.c | 2 + src/modules/module_03610.c | 2 + src/modules/module_03710.c | 2 + src/modules/module_03711.c | 2 + src/modules/module_03730.c | 2 + src/modules/module_03800.c | 2 + src/modules/module_03910.c | 2 + src/modules/module_04010.c | 2 + src/modules/module_04110.c | 2 + src/modules/module_04300.c | 2 + src/modules/module_04400.c | 2 + src/modules/module_04410.c | 2 + src/modules/module_04420.c | 2 + src/modules/module_04430.c | 2 + src/modules/module_04500.c | 2 + src/modules/module_04510.c | 2 + src/modules/module_04520.c | 2 + src/modules/module_04521.c | 2 + src/modules/module_04522.c | 2 + src/modules/module_04700.c | 2 + src/modules/module_04710.c | 2 + src/modules/module_04711.c | 2 + src/modules/module_04800.c | 2 + src/modules/module_04900.c | 2 + src/modules/module_05000.c | 2 + src/modules/module_05100.c | 2 + src/modules/module_05200.c | 2 + src/modules/module_05300.c | 2 + src/modules/module_05400.c | 2 + src/modules/module_05500.c | 2 + src/modules/module_05600.c | 2 + src/modules/module_05700.c | 2 + src/modules/module_05800.c | 2 + src/modules/module_06000.c | 2 + src/modules/module_06050.c | 2 + src/modules/module_06060.c | 2 + src/modules/module_06100.c | 7 + src/modules/module_06211.c | 2 + src/modules/module_06212.c | 2 + src/modules/module_06213.c | 2 + src/modules/module_06221.c | 2 + src/modules/module_06222.c | 2 + src/modules/module_06223.c | 2 + src/modules/module_06231.c | 2 + src/modules/module_06232.c | 2 + src/modules/module_06233.c | 2 + src/modules/module_06241.c | 2 + src/modules/module_06242.c | 2 + src/modules/module_06243.c | 2 + src/modules/module_06300.c | 2 + src/modules/module_06400.c | 2 + src/modules/module_06500.c | 2 + src/modules/module_06600.c | 2 + src/modules/module_06700.c | 2 + src/modules/module_06800.c | 2 + src/modules/module_06900.c | 2 + src/modules/module_07000.c | 2 + src/modules/module_07100.c | 2 + src/modules/module_07200.c | 2 + src/modules/module_07300.c | 2 + src/modules/module_07350.c | 2 + src/modules/module_07400.c | 2 + src/modules/module_07401.c | 2 + src/modules/module_07500.c | 2 + src/modules/module_07700.c | 2 + src/modules/module_07701.c | 2 + src/modules/module_07800.c | 2 + src/modules/module_07801.c | 2 + src/modules/module_07900.c | 2 + src/modules/module_08000.c | 2 + src/modules/module_08100.c | 2 + src/modules/module_08200.c | 2 + src/modules/module_08300.c | 2 + src/modules/module_08400.c | 2 + src/modules/module_08500.c | 2 + src/modules/module_08600.c | 2 + src/modules/module_08700.c | 17 +- src/modules/module_08800.c | 2 + src/modules/module_08900.c | 2 + src/modules/module_09000.c | 2 + src/modules/module_09100.c | 2 + src/modules/module_09200.c | 2 + src/modules/module_09300.c | 2 + src/modules/module_09400.c | 2 + src/modules/module_09500.c | 2 + src/modules/module_09600.c | 2 + src/modules/module_09700.c | 2 + src/modules/module_09710.c | 2 + src/modules/module_09720.c | 2 + src/modules/module_09800.c | 2 + src/modules/module_09810.c | 2 + src/modules/module_09820.c | 2 + src/modules/module_09900.c | 2 + src/modules/module_10000.c | 2 + src/modules/module_10100.c | 2 + src/modules/module_10200.c | 2 + src/modules/module_10300.c | 2 + src/modules/module_10400.c | 2 + src/modules/module_10410.c | 2 + src/modules/module_10420.c | 2 + src/modules/module_10500.c | 2 + src/modules/module_10600.c | 2 + src/modules/module_10700.c | 12 +- src/modules/module_10800.c | 2 + src/modules/module_10810.c | 2 + src/modules/module_10820.c | 2 + src/modules/module_10830.c | 2 + src/modules/module_10840.c | 2 + src/modules/module_10870.c | 2 + src/modules/module_10900.c | 2 + src/modules/module_10901.c | 2 + src/modules/module_11000.c | 2 + src/modules/module_11100.c | 2 + src/modules/module_11200.c | 2 + src/modules/module_11300.c | 2 + src/modules/module_11400.c | 2 + src/modules/module_11500.c | 2 + src/modules/module_11600.c | 2 + src/modules/module_11700.c | 2 + src/modules/module_11750.c | 2 + src/modules/module_11760.c | 2 + src/modules/module_11800.c | 2 + src/modules/module_11850.c | 2 + src/modules/module_11860.c | 2 + src/modules/module_11900.c | 2 + src/modules/module_12000.c | 2 + src/modules/module_12001.c | 2 + src/modules/module_12100.c | 2 + src/modules/module_12200.c | 2 + src/modules/module_12300.c | 2 + src/modules/module_12400.c | 2 + src/modules/module_12500.c | 2 + src/modules/module_12600.c | 2 + src/modules/module_12700.c | 2 + src/modules/module_12800.c | 2 + src/modules/module_12900.c | 2 + src/modules/module_13000.c | 2 + src/modules/module_13100.c | 2 + src/modules/module_13200.c | 2 + src/modules/module_13300.c | 2 + src/modules/module_13400.c | 2 + src/modules/module_13500.c | 2 + src/modules/module_13600.c | 2 + src/modules/module_13711.c | 2 + src/modules/module_13712.c | 2 + src/modules/module_13713.c | 2 + src/modules/module_13721.c | 2 + src/modules/module_13722.c | 2 + src/modules/module_13723.c | 2 + src/modules/module_13731.c | 2 + src/modules/module_13732.c | 2 + src/modules/module_13733.c | 2 + src/modules/module_13741.c | 2 + src/modules/module_13742.c | 2 + src/modules/module_13743.c | 2 + src/modules/module_13751.c | 2 + src/modules/module_13752.c | 2 + src/modules/module_13753.c | 2 + src/modules/module_13761.c | 2 + src/modules/module_13762.c | 2 + src/modules/module_13763.c | 2 + src/modules/module_13771.c | 2 + src/modules/module_13772.c | 2 + src/modules/module_13773.c | 2 + src/modules/module_13781.c | 2 + src/modules/module_13782.c | 2 + src/modules/module_13783.c | 2 + src/modules/module_13800.c | 2 + src/modules/module_13900.c | 2 + src/modules/module_14000.c | 2 + src/modules/module_14100.c | 2 + src/modules/module_14400.c | 2 + src/modules/module_14500.c | 2 + src/modules/module_14600.c | 2 + src/modules/module_14700.c | 2 + src/modules/module_14800.c | 2 + src/modules/module_14900.c | 2 + src/modules/module_15000.c | 2 + src/modules/module_15100.c | 2 + src/modules/module_15200.c | 2 + src/modules/module_15300.c | 2 + src/modules/module_15310.c | 2 + src/modules/module_15400.c | 2 + src/modules/module_15500.c | 2 + src/modules/module_15600.c | 2 + src/modules/module_15700.c | 2 + src/modules/module_15900.c | 2 + src/modules/module_15910.c | 2 + src/modules/module_16000.c | 2 + src/modules/module_16100.c | 2 + src/modules/module_16200.c | 2 + src/modules/module_16300.c | 2 + src/modules/module_16400.c | 2 + src/modules/module_16500.c | 2 + src/modules/module_16600.c | 2 + src/modules/module_16700.c | 2 + src/modules/module_16800.c | 2 + src/modules/module_16801.c | 2 + src/modules/module_16900.c | 2 + src/modules/module_17010.c | 2 + src/modules/module_17020.c | 2 + src/modules/module_17030.c | 2 + src/modules/module_17040.c | 2 + src/modules/module_17200.c | 2 + src/modules/module_17210.c | 2 + src/modules/module_17220.c | 2 + src/modules/module_17225.c | 2 + src/modules/module_17230.c | 2 + src/modules/module_17300.c | 2 + src/modules/module_17400.c | 2 + src/modules/module_17500.c | 2 + src/modules/module_17600.c | 2 + src/modules/module_17700.c | 2 + src/modules/module_17800.c | 2 + src/modules/module_17900.c | 2 + src/modules/module_18000.c | 2 + src/modules/module_18100.c | 2 + src/modules/module_18200.c | 2 + src/modules/module_18300.c | 2 + src/modules/module_18400.c | 2 + src/modules/module_18500.c | 18 +- src/modules/module_18600.c | 2 + src/modules/module_18700.c | 2 + src/modules/module_18800.c | 2 + src/modules/module_18900.c | 2 + src/modules/module_19000.c | 2 + src/modules/module_19100.c | 2 + src/modules/module_19200.c | 2 + src/modules/module_19210.c | 2 + src/modules/module_19300.c | 18 +- src/modules/module_19500.c | 18 +- src/modules/module_19600.c | 2 + src/modules/module_19700.c | 2 + src/modules/module_19800.c | 2 + src/modules/module_19900.c | 2 + src/modules/module_20011.c | 2 + src/modules/module_20012.c | 2 + src/modules/module_20013.c | 2 + src/modules/module_20200.c | 2 + src/modules/module_20300.c | 2 + src/modules/module_20400.c | 2 + src/modules/module_20500.c | 2 + src/modules/module_20510.c | 2 + src/modules/module_20600.c | 2 + src/modules/module_20710.c | 2 + src/modules/module_20711.c | 2 + src/modules/module_20712.c | 2 + src/modules/module_20720.c | 2 + src/modules/module_20730.c | 2 + src/modules/module_20800.c | 2 + src/modules/module_20900.c | 2 + src/modules/module_21000.c | 2 + src/modules/module_21100.c | 2 + src/modules/module_21200.c | 2 + src/modules/module_21300.c | 2 + src/modules/module_21310.c | 2 + src/modules/module_21400.c | 2 + src/modules/module_21420.c | 2 + src/modules/module_21500.c | 2 + src/modules/module_21501.c | 2 + src/modules/module_21600.c | 2 + src/modules/module_21700.c | 2 + src/modules/module_21800.c | 2 + src/modules/module_22000.c | 2 + src/modules/module_22001.c | 2 + src/modules/module_22100.c | 2 + src/modules/module_22200.c | 2 + src/modules/module_22300.c | 2 + src/modules/module_22301.c | 2 + src/modules/module_22400.c | 2 + src/modules/module_22500.c | 2 + src/modules/module_22600.c | 2 + src/modules/module_22700.c | 2 + src/modules/module_22911.c | 2 + src/modules/module_22921.c | 5 +- src/modules/module_22931.c | 2 + src/modules/module_22941.c | 2 + src/modules/module_22951.c | 2 + src/modules/module_23001.c | 2 + src/modules/module_23002.c | 2 + src/modules/module_23003.c | 5 +- src/modules/module_23100.c | 2 + src/modules/module_23200.c | 2 + src/modules/module_23300.c | 2 + src/modules/module_23400.c | 2 + src/modules/module_23500.c | 2 + src/modules/module_23600.c | 2 + src/modules/module_23700.c | 2 + src/modules/module_23800.c | 2 + src/modules/module_23900.c | 2 + src/modules/module_24000.c | 2 + src/modules/module_24100.c | 2 + src/modules/module_24200.c | 2 + src/modules/module_24300.c | 2 + src/modules/module_24410.c | 2 + src/modules/module_24420.c | 2 + src/modules/module_24500.c | 2 + src/modules/module_24600.c | 2 + src/modules/module_24700.c | 2 + src/modules/module_24800.c | 2 + src/modules/module_24900.c | 2 + src/modules/module_25000.c | 5 +- src/modules/module_25100.c | 5 +- src/modules/module_25200.c | 5 +- src/modules/module_25300.c | 2 + src/modules/module_25400.c | 2 + src/modules/module_25500.c | 2 + src/modules/module_25600.c | 2 + src/modules/module_25700.c | 2 + src/modules/module_25800.c | 2 + src/modules/module_25900.c | 2 + src/modules/module_26000.c | 2 + src/modules/module_26100.c | 2 + src/modules/module_26200.c | 2 + src/modules/module_26300.c | 2 + src/modules/module_26401.c | 2 + src/modules/module_26402.c | 2 + src/modules/module_26403.c | 2 + src/modules/module_26500.c | 2 + src/modules/module_26600.c | 2 + src/modules/module_26610.c | 2 + src/modules/module_26700.c | 2 + src/modules/module_26800.c | 2 + src/modules/module_26900.c | 2 + src/modules/module_27000.c | 2 + src/modules/module_27100.c | 2 + src/modules/module_27200.c | 2 + src/modules/module_27300.c | 2 + src/modules/module_27400.c | 2 + src/modules/module_27500.c | 2 + src/modules/module_27600.c | 2 + src/modules/module_27700.c | 2 + src/modules/module_27800.c | 2 + src/modules/module_27900.c | 2 + src/modules/module_28000.c | 2 + src/modules/module_28100.c | 2 + src/modules/module_28200.c | 2 + src/modules/module_28300.c | 2 + src/modules/module_28400.c | 2 + src/modules/module_28501.c | 2 + src/modules/module_28502.c | 2 + src/modules/module_28503.c | 2 + src/modules/module_28504.c | 2 + src/modules/module_28505.c | 2 + src/modules/module_28506.c | 2 + src/modules/module_28600.c | 2 + src/modules/module_28700.c | 2 + src/modules/module_28800.c | 2 + src/modules/module_28900.c | 2 + src/modules/module_29000.c | 2 + src/modules/module_29100.c | 2 + src/modules/module_29200.c | 2 + src/modules/module_29311.c | 2 + src/modules/module_29312.c | 2 + src/modules/module_29313.c | 2 + src/modules/module_29321.c | 2 + src/modules/module_29322.c | 2 + src/modules/module_29323.c | 2 + src/modules/module_29331.c | 2 + src/modules/module_29332.c | 2 + src/modules/module_29333.c | 2 + src/modules/module_29341.c | 2 + src/modules/module_29342.c | 2 + src/modules/module_29343.c | 2 + src/modules/module_29411.c | 2 + src/modules/module_29412.c | 2 + src/modules/module_29413.c | 2 + src/modules/module_29421.c | 2 + src/modules/module_29422.c | 2 + src/modules/module_29423.c | 2 + src/modules/module_29431.c | 2 + src/modules/module_29432.c | 2 + src/modules/module_29433.c | 2 + src/modules/module_29441.c | 2 + src/modules/module_29442.c | 2 + src/modules/module_29443.c | 2 + src/modules/module_29451.c | 2 + src/modules/module_29452.c | 2 + src/modules/module_29453.c | 2 + src/modules/module_29461.c | 2 + src/modules/module_29462.c | 2 + src/modules/module_29463.c | 2 + src/modules/module_29471.c | 2 + src/modules/module_29472.c | 2 + src/modules/module_29473.c | 2 + src/modules/module_29481.c | 2 + src/modules/module_29482.c | 2 + src/modules/module_29483.c | 2 + src/modules/module_29511.c | 2 + src/modules/module_29512.c | 2 + src/modules/module_29513.c | 2 + src/modules/module_29521.c | 2 + src/modules/module_29522.c | 2 + src/modules/module_29523.c | 2 + src/modules/module_29531.c | 2 + src/modules/module_29532.c | 2 + src/modules/module_29533.c | 2 + src/modules/module_29541.c | 2 + src/modules/module_29542.c | 2 + src/modules/module_29543.c | 2 + src/modules/module_29600.c | 2 + src/modules/module_29700.c | 2 + src/modules/module_29800.c | 2 + src/modules/module_29910.c | 2 + src/modules/module_29920.c | 2 + src/modules/module_29930.c | 2 + src/modules/module_29940.c | 2 + src/modules/module_30000.c | 2 + src/modules/module_30120.c | 2 + src/modules/module_30420.c | 2 + src/modules/module_30500.c | 2 + src/modules/module_30600.c | 2 + src/modules/module_30700.c | 2 + src/modules/module_30901.c | 2 + src/modules/module_30902.c | 2 + src/modules/module_30903.c | 2 + src/modules/module_30904.c | 2 + src/modules/module_30905.c | 2 + src/modules/module_30906.c | 2 + src/modules/module_31000.c | 2 + src/modules/module_31100.c | 2 + src/modules/module_31200.c | 2 + src/modules/module_31300.c | 2 + src/modules/module_31400.c | 2 + src/modules/module_31500.c | 2 + src/modules/module_31600.c | 2 + src/modules/module_31700.c | 2 + src/modules/module_31800.c | 2 + src/modules/module_31900.c | 2 + src/modules/module_32000.c | 2 + src/modules/module_32010.c | 2 + src/modules/module_32020.c | 2 + src/modules/module_32030.c | 2 + src/modules/module_32031.c | 2 + src/modules/module_32040.c | 2 + src/modules/module_32041.c | 2 + src/modules/module_32050.c | 2 + src/modules/module_32060.c | 2 + src/modules/module_32070.c | 2 + src/modules/module_32100.c | 2 + src/modules/module_32200.c | 2 + src/modules/module_32300.c | 2 + src/modules/module_32410.c | 2 + src/modules/module_32420.c | 2 + src/modules/module_32500.c | 2 + src/modules/module_32600.c | 2 + src/modules/module_32700.c | 2 + src/modules/module_33300.c | 2 + src/modules/module_33500.c | 2 + src/modules/module_33501.c | 2 + src/modules/module_33502.c | 2 + src/modules/module_99999.c | 2 + src/monitor.c | 6 +- src/selftest.c | 163 ++++++- src/terminal.c | 573 +++++++++++++++++------- src/usage.c | 7 +- src/user_options.c | 64 ++- tools/benchmark_deep.pl | 2 +- tools/package_bin.sh | 8 + 562 files changed, 2719 insertions(+), 378 deletions(-) rename modules/.lock => bridges/.gitkeep (100%) create mode 100644 include/bridges.h rename obj/.lock => modules/.gitkeep (100%) rename obj/{contrib/minizip/.lock => .gitkeep} (100%) create mode 100644 obj/contrib/minizip/.gitkeep create mode 100644 src/bridges.c create mode 100644 src/bridges/.gitkeep diff --git a/.gitignore b/.gitignore index d8ff600bb..a9fd43fb4 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,9 @@ obj/*.o obj/*.a include/CL tools/luks_tests +.vscode + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class diff --git a/modules/.lock b/bridges/.gitkeep similarity index 100% rename from modules/.lock rename to bridges/.gitkeep diff --git a/extra/tab_completion/hashcat.sh b/extra/tab_completion/hashcat.sh index f823cda72..8f243b126 100755 --- a/extra/tab_completion/hashcat.sh +++ b/extra/tab_completion/hashcat.sh @@ -425,9 +425,9 @@ _hashcat () local HIDDEN_FILES_AGGRESSIVE="${HIDDEN_FILES}|hcmask|hcchr" local BUILD_IN_CHARSETS='?l ?u ?d ?a ?b ?s ?h ?H' - local SHORT_OPTS="-m -a -V -h -b -t -T -o -p -c -d -D -w -n -u -j -k -r -g -1 -2 -3 -4 -i -I -s -l -O -S -z -M -Y" - local LONG_OPTS="--hash-type --attack-mode --version --help --quiet --benchmark --benchmark-all --hex-salt --hex-wordlist --hex-charset --force --status --status-json --status-timer --stdin-timeout-abort --machine-readable --loopback --markov-hcstat2 --markov-disable --markov-inverse --markov-classic --markov-threshold --runtime --session --speed-only --progress-only --restore --restore-file-path --restore-disable --outfile --outfile-format --outfile-autohex-disable --outfile-json --outfile-check-timer --outfile-check-dir --wordlist-autohex-disable --separator --show --deprecated-check-disable --left --username --dynamic-x --remove --remove-timer --potfile-disable --potfile-path --debug-mode --debug-file --induction-dir --segment-size --bitmap-min --bitmap-max --cpu-affinity --example-hashes --hash-info --backend-ignore-cuda --backend-ignore-opencl --backend-ignore-hip --backend-ignore-metal --backend-info --backend-devices --backend-devices-virtual --opencl-device-types --backend-vector-width --workload-profile --kernel-accel --kernel-loops --kernel-threads --spin-damp --hwmon-disable --hwmon-temp-abort --skip --limit --keyspace --rule-left --rule-right --rules-file --generate-rules --generate-rules-func-min --generate-rules-func-max --generate-rules-func-sel --generate-rules-seed --custom-charset1 --custom-charset2 --custom-charset3 --custom-charset4 --hook-threads --increment --increment-min --increment-max --logfile-disable --scrypt-tmto --keyboard-layout-mapping --truecrypt-keyfiles --veracrypt-keyfiles --veracrypt-pim-start --veracrypt-pim-stop --stdout --keep-guessing --hccapx-message-pair --nonce-error-corrections --encoding-from --encoding-to --optimized-kernel-enable --multiply-accel-disable --self-test-disable --slow-candidates --brain-server --brain-server-timer --brain-client --brain-client-features --brain-host --brain-port --brain-session --brain-session-whitelist --brain-password --identify" - local OPTIONS="-m -a -t -o -p -c -d -w -n -u -j -k -r -g -1 -2 -3 -4 -s -l --hash-type --attack-mode --status-timer --stdin-timeout-abort --markov-hcstat2 --markov-threshold --runtime --session --outfile --outfile-format --outfile-check-timer --outfile-check-dir --separator --remove-timer --potfile-path --restore-file-path --debug-mode --debug-file --induction-dir --segment-size --bitmap-min --bitmap-max --cpu-affinity --backend-devices --backend-devices-virtual --opencl-device-types --backend-vector-width --workload-profile --kernel-accel --kernel-loops --kernel-threads --spin-damp --hwmon-temp-abort --skip --limit --rule-left --rule-right --rules-file --generate-rules --generate-rules-func-min --generate-rules-func-max --generate-rules-func-sel --generate-rules-seed --custom-charset1 --custom-charset2 --custom-charset3 --custom-charset4 --hook-threads --increment-min --increment-max --scrypt-tmto --keyboard-layout-mapping --truecrypt-keyfiles --veracrypt-keyfiles --veracrypt-pim-start --veracrypt-pim-stop --hccapx-message-pair --nonce-error-corrections --encoding-from --encoding-to --brain-server-timer --brain-client-features --brain-host --brain-password --brain-port --brain-session --brain-session-whitelist" + local SHORT_OPTS="-m -a -V -h -b -t -T -o -p -c -d -D -w -n -u -j -k -r -g -1 -2 -3 -4 -i -I -s -l -O -S -z -M -Y -R" + local LONG_OPTS="--hash-type --attack-mode --version --help --quiet --benchmark --benchmark-all --hex-salt --hex-wordlist --hex-charset --force --status --status-json --status-timer --stdin-timeout-abort --machine-readable --loopback --markov-hcstat2 --markov-disable --markov-inverse --markov-classic --markov-threshold --runtime --session --speed-only --progress-only --restore --restore-file-path --restore-disable --outfile --outfile-format --outfile-autohex-disable --outfile-json --outfile-check-timer --outfile-check-dir --wordlist-autohex-disable --separator --show --deprecated-check-disable --left --username --dynamic-x --remove --remove-timer --potfile-disable --potfile-path --debug-mode --debug-file --induction-dir --segment-size --bitmap-min --bitmap-max --cpu-affinity --example-hashes --hash-info --backend-ignore-cuda --backend-ignore-opencl --backend-ignore-hip --backend-ignore-metal --backend-info --backend-devices --backend-devices-virtmulti --backend-devices-virthost --opencl-device-types --backend-vector-width --workload-profile --kernel-accel --kernel-loops --kernel-threads --spin-damp --hwmon-disable --hwmon-temp-abort --skip --limit --keyspace --rule-left --rule-right --rules-file --generate-rules --generate-rules-func-min --generate-rules-func-max --generate-rules-func-sel --generate-rules-seed --custom-charset1 --custom-charset2 --custom-charset3 --custom-charset4 --hook-threads --increment --increment-min --increment-max --logfile-disable --scrypt-tmto --keyboard-layout-mapping --truecrypt-keyfiles --veracrypt-keyfiles --veracrypt-pim-start --veracrypt-pim-stop --stdout --keep-guessing --hccapx-message-pair --nonce-error-corrections --encoding-from --encoding-to --optimized-kernel-enable --multiply-accel-disable --self-test-disable --slow-candidates --brain-server --brain-server-timer --brain-client --brain-client-features --brain-host --brain-port --brain-session --brain-session-whitelist --brain-password --identify --bridge-parameter1 --bridge-parameter2 --bridge-parameter3 --bridge-parameter4" + local OPTIONS="-m -a -t -o -p -c -d -w -n -u -j -k -r -g -1 -2 -3 -4 -s -l --hash-type --attack-mode --status-timer --stdin-timeout-abort --markov-hcstat2 --markov-threshold --runtime --session --outfile --outfile-format --outfile-check-timer --outfile-check-dir --separator --remove-timer --potfile-path --restore-file-path --debug-mode --debug-file --induction-dir --segment-size --bitmap-min --bitmap-max --cpu-affinity --backend-devices --backend-devices-virtmulti --backend-devices-virthost --opencl-device-types --backend-vector-width --workload-profile --kernel-accel --kernel-loops --kernel-threads --spin-damp --hwmon-temp-abort --skip --limit --rule-left --rule-right --rules-file --generate-rules --generate-rules-func-min --generate-rules-func-max --generate-rules-func-sel --generate-rules-seed --custom-charset1 --custom-charset2 --custom-charset3 --custom-charset4 --hook-threads --increment-min --increment-max --scrypt-tmto --keyboard-layout-mapping --truecrypt-keyfiles --veracrypt-keyfiles --veracrypt-pim-start --veracrypt-pim-stop --hccapx-message-pair --nonce-error-corrections --encoding-from --encoding-to --brain-server-timer --brain-client-features --brain-host --brain-password --brain-port --brain-session --brain-session-whitelist --bridge-parameter1 --bridge-parameter2 --bridge-parameter3 --bridge-parameter4" COMPREPLY=() local cur="${COMP_WORDS[COMP_CWORD]}" diff --git a/include/backend.h b/include/backend.h index ce1e9cfe4..cd0dfca44 100644 --- a/include/backend.h +++ b/include/backend.h @@ -39,8 +39,6 @@ int backend_session_update_combinator (hashcat_ctx_t *hashcat_ctx); int backend_session_update_mp (hashcat_ctx_t *hashcat_ctx); int backend_session_update_mp_rl (hashcat_ctx_t *hashcat_ctx, const u32 css_cnt_l, const u32 css_cnt_r); -u32 backend_device_idx_real_from_virtual (const u32 device_idx, const u32 backend_devices_virtual); - void generate_source_kernel_filename (const bool slow_candidates, const u32 attack_exec, const u32 attack_kern, const u32 kern_type, const u32 opti_type, char *shared_dir, char *source_file); void generate_cached_kernel_filename (const bool slow_candidates, const u32 attack_exec, const u32 attack_kern, const u32 kern_type, const u32 opti_type, char *cache_dir, const char *device_name_chksum, char *cached_file, bool is_metal); void generate_source_kernel_shared_filename (char *shared_dir, char *source_file); diff --git a/include/bridges.h b/include/bridges.h new file mode 100644 index 000000000..cd98a7b2f --- /dev/null +++ b/include/bridges.h @@ -0,0 +1,30 @@ +/** + * Author......: See docs/credits.txt + * License.....: MIT + */ + +#ifndef HC_BRIDGE_H +#define HC_BRIDGE_H + +#include +#include +#include +#include +#include +#include + +static const int BRIDGE_INTERFACE_VERSION_MINIMUM = 700; + +static const size_t BRIDGE_CONTEXT_SIZE_CURRENT = sizeof (bridge_ctx_t); + +/** + * output functions + */ + +bool bridges_init (hashcat_ctx_t *hashcat_ctx); +void bridges_destroy (hashcat_ctx_t *hashcat_ctx); + +bool bridges_salt_prepare (hashcat_ctx_t *hashcat_ctx); +void bridges_salt_destroy (hashcat_ctx_t *hashcat_ctx); + +#endif // HC_BRIDGE_H diff --git a/include/types.h b/include/types.h index 880af23ee..bef5982ad 100644 --- a/include/types.h +++ b/include/types.h @@ -106,6 +106,10 @@ typedef enum event_identifier EVENT_BITMAP_INIT_POST = 0x00000010, EVENT_BITMAP_INIT_PRE = 0x00000011, EVENT_BITMAP_FINAL_OVERFLOW = 0x00000012, + EVENT_BRIDGES_INIT_POST = 0x00000120, + EVENT_BRIDGES_INIT_PRE = 0x00000121, + EVENT_BRIDGES_SALT_POST = 0x00000122, + EVENT_BRIDGES_SALT_PRE = 0x00000123, EVENT_CALCULATED_WORDS_BASE = 0x00000020, EVENT_CRACKER_FINISHED = 0x00000030, EVENT_CRACKER_HASH_CRACKED = 0x00000031, @@ -470,9 +474,32 @@ typedef enum opts_type OPTS_TYPE_AUTODETECT_DISABLE = (1ULL << 56), // skip autodetect engine OPTS_TYPE_STOCK_MODULE = (1ULL << 57), // module included with hashcat default distribution + OPTS_TYPE_MULTIHASH_DESPITE_ESALT + = (1ULL << 58), // overrule multihash cracking check same salt but not same esalt } opts_type_t; +typedef enum bridge_type +{ + BRIDGE_TYPE_NONE = 0, // no bridge support + BRIDGE_TYPE_MATCH_TUNINGS = (1ULL << 1), // Disables autotune and adjusts -n, -u and -T for the backend device according to match bridge dimensions + BRIDGE_TYPE_UPDATE_SELFTEST = (1ULL << 2), // updates the selftest configured in the module. Can be useful for generic hash modes such as the python one + + BRIDGE_TYPE_LAUNCH_LOOP = (1ULL << 11), + BRIDGE_TYPE_LAUNCH_LOOP2 = (1ULL << 12), + + BRIDGE_TYPE_FORCE_WORKITEMS_001 = (1ULL << 20), // This override the workitem counts reported from the bridge device + BRIDGE_TYPE_FORCE_WORKITEMS_002 = (1ULL << 21), // Can be useful if this is not a physical hardware + BRIDGE_TYPE_FORCE_WORKITEMS_004 = (1ULL << 22), + BRIDGE_TYPE_FORCE_WORKITEMS_008 = (1ULL << 23), + BRIDGE_TYPE_FORCE_WORKITEMS_016 = (1ULL << 24), + BRIDGE_TYPE_FORCE_WORKITEMS_032 = (1ULL << 25), + BRIDGE_TYPE_FORCE_WORKITEMS_064 = (1ULL << 26), + BRIDGE_TYPE_FORCE_WORKITEMS_128 = (1ULL << 27), + BRIDGE_TYPE_FORCE_WORKITEMS_256 = (1ULL << 26), + +} bridge_type_t; + typedef enum dgst_size { DGST_SIZE_4_2 = (2 * sizeof (u32)), // 8 @@ -626,7 +653,8 @@ typedef enum user_options_defaults ADVICE = true, ATTACK_MODE = ATTACK_MODE_STRAIGHT, AUTODETECT = false, - BACKEND_DEVICES_VIRTUAL = 1, + BACKEND_DEVICES_VIRTMULTI = 1, + BACKEND_DEVICES_VIRTHOST = 1, BENCHMARK_ALL = false, BENCHMARK_MAX = 99999, BENCHMARK_MIN = 0, @@ -732,7 +760,8 @@ typedef enum user_options_map IDX_ADVICE_DISABLE = 0xff00, IDX_ATTACK_MODE = 'a', IDX_BACKEND_DEVICES = 'd', - IDX_BACKEND_DEVICES_VIRTUAL = 'Y', + IDX_BACKEND_DEVICES_VIRTMULTI = 'Y', + IDX_BACKEND_DEVICES_VIRTHOST = 'R', IDX_BACKEND_IGNORE_CUDA = 0xff01, IDX_BACKEND_IGNORE_HIP = 0xff02, IDX_BACKEND_IGNORE_METAL = 0xff03, @@ -756,6 +785,10 @@ typedef enum user_options_map IDX_BRAIN_SESSION = 0xff0f, IDX_BRAIN_SESSION_WHITELIST = 0xff10, #endif + IDX_BRIDGE_PARAMETER1 = 0xff80, + IDX_BRIDGE_PARAMETER2 = 0xff81, + IDX_BRIDGE_PARAMETER3 = 0xff82, + IDX_BRIDGE_PARAMETER4 = 0xff83, IDX_CPU_AFFINITY = 0xff11, IDX_CUSTOM_CHARSET_1 = '1', IDX_CUSTOM_CHARSET_2 = '2', @@ -1092,6 +1125,11 @@ typedef struct hashconfig u32 pwdump_column; + // bridge + + u64 bridge_type; + const char *bridge_name; + } hashconfig_t; typedef struct pw_pre @@ -1184,6 +1222,8 @@ typedef struct hc_device_param u32 kernel_preferred_wgs_multiple; + int bridge_link_device; + st_status_t st_status; // selftest status at_status_t at_status; // autotune status @@ -1374,6 +1414,8 @@ typedef struct hc_device_param pw_pre_t *pws_base_buf; // for debug mode u64 pws_base_cnt; + void *h_tmps; // we need this only for bridges + u64 words_off; u64 words_done; @@ -1895,19 +1937,20 @@ typedef struct backend_ctx int backend_device_from_opencl_platform[CL_PLATFORMS_MAX][DEVICES_MAX]; // from opencl device index to backend device index (by platform) int backend_devices_cnt; - int backend_devices_virtual; + int backend_devices_virtmulti; + int backend_devices_virthost; int backend_devices_active; int cuda_devices_cnt; int cuda_devices_active; int hip_devices_cnt; - int hip_devices_active; + int hip_devices_active; int metal_devices_cnt; int metal_devices_active; int opencl_devices_cnt; int opencl_devices_active; - bool backend_devices_filter[DEVICES_MAX + 1]; + int backend_devices_filter[DEVICES_MAX]; hc_device_param_t *devices_param; @@ -2396,6 +2439,10 @@ typedef struct user_options char *brain_password; char *brain_session_whitelist; #endif + char *bridge_parameter1; + char *bridge_parameter2; + char *bridge_parameter3; + char *bridge_parameter4; char *cpu_affinity; char *custom_charset_4; char *debug_file; @@ -2422,7 +2469,8 @@ typedef struct user_options const char *rule_buf_r; const char *session; u32 attack_mode; - u32 backend_devices_virtual; + u32 backend_devices_virtmulti; + u32 backend_devices_virthost; u32 backend_info; u32 benchmark_max; u32 benchmark_min; @@ -2872,6 +2920,50 @@ typedef struct event_ctx } event_ctx_t; +#define BRIDGE_DEFAULT (void *) -1 + +typedef void (*BRIDGE_INIT) (void *); + +typedef struct bridge_ctx +{ + // local variables + + size_t bridge_context_size; + int bridge_interface_version; + + hc_dynlib_t bridge_handle; + + BRIDGE_INIT bridge_init; + + bool enabled; + + void *platform_context; + + void *pws_buf; // transfer buffer for tmps[] + + // functions + + void *(*platform_init) (user_options_t *); + void (*platform_term) (void *); + + int (*get_unit_count) (void *); + char *(*get_unit_info) (void *, const int); + int (*get_workitem_count) (void *, const int); + + bool (*salt_prepare) (void *, hashconfig_t *, hashes_t *); + void (*salt_destroy) (void *, hashconfig_t *, hashes_t *); + + bool (*thread_init) (void *, hc_device_param_t *, hashconfig_t *, hashes_t *); + void (*thread_term) (void *, hc_device_param_t *, hashconfig_t *, hashes_t *); + + bool (*launch_loop) (void *, hc_device_param_t *, hashconfig_t *, hashes_t *, const u32, const u64); + bool (*launch_loop2) (void *, hc_device_param_t *, hashconfig_t *, hashes_t *, const u32, const u64); + + const char *(*st_update_pass) (void *); + const char *(*st_update_hash) (void *); + +} bridge_ctx_t; + #define MODULE_DEFAULT (void *) -1 typedef void (*MODULE_INIT) (void *); @@ -2969,12 +3061,16 @@ typedef struct module_ctx bool (*module_potfile_custom_check) (const hashconfig_t *, const hash_t *, const hash_t *, const void *); + u64 (*module_bridge_type) (const hashconfig_t *, const user_options_t *, const user_options_extra_t *); + const char *(*module_bridge_name) (const hashconfig_t *, const user_options_t *, const user_options_extra_t *); + } module_ctx_t; typedef struct hashcat_ctx { brain_ctx_t *brain_ctx; bitmap_ctx_t *bitmap_ctx; + bridge_ctx_t *bridge_ctx; combinator_ctx_t *combinator_ctx; cpt_ctx_t *cpt_ctx; debugfile_ctx_t *debugfile_ctx; @@ -3020,6 +3116,7 @@ typedef struct hook_thread_param int tid; int tsz; + bridge_ctx_t *bridge_ctx; module_ctx_t *module_ctx; status_ctx_t *status_ctx; diff --git a/obj/.lock b/modules/.gitkeep similarity index 100% rename from obj/.lock rename to modules/.gitkeep diff --git a/obj/contrib/minizip/.lock b/obj/.gitkeep similarity index 100% rename from obj/contrib/minizip/.lock rename to obj/.gitkeep diff --git a/obj/contrib/minizip/.gitkeep b/obj/contrib/minizip/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/src/Makefile b/src/Makefile index 0563eebee..15c587f71 100644 --- a/src/Makefile +++ b/src/Makefile @@ -54,6 +54,7 @@ endif ## MODULE_INTERFACE_VERSION := 700 +BRIDGE_INTERFACE_VERSION := 700 ## ## Native compiler paths @@ -213,12 +214,11 @@ endif ## because UNRAR ifeq ($(ENABLE_UNRAR),1) ifeq ($(USE_SYSTEM_UNRAR),0) +CFLAGS_UNRAR += -std=c++14 ifneq ($(CC),clang) CFLAGS_UNRAR += -Wno-class-memaccess CFLAGS_UNRAR += -Wno-misleading-indentation CFLAGS_UNRAR += -Wno-format-overflow -else -CFLAGS_UNRAR += -std=c++11 endif CFLAGS_UNRAR += -Wno-missing-braces CFLAGS_UNRAR += -Wno-unused-variable @@ -407,7 +407,7 @@ EMU_OBJS_ALL += emu_inc_hash_md4 emu_inc_hash_md5 emu_inc_hash_ripemd EMU_OBJS_ALL += emu_inc_cipher_aes emu_inc_cipher_camellia emu_inc_cipher_des emu_inc_cipher_kuznyechik emu_inc_cipher_serpent emu_inc_cipher_twofish EMU_OBJS_ALL += emu_inc_hash_base58 -OBJS_ALL := affinity autotune backend benchmark bitmap bitops combinator common convert cpt cpu_crc32 debugfile dictstat dispatch dynloader event ext_ADL ext_cuda ext_hip ext_nvapi ext_nvml ext_nvrtc ext_hiprtc ext_OpenCL ext_sysfs_amdgpu ext_sysfs_cpu ext_iokit ext_lzma filehandling folder hashcat hashes hlfmt hwmon induct interface keyboard_layout locking logfile loopback memory monitor mpsp outfile_check outfile pidfile potfile restore rp rp_cpu selftest slow_candidates shared status stdout straight terminal thread timer tuningdb usage user_options wordlist $(EMU_OBJS_ALL) +OBJS_ALL := affinity autotune backend benchmark bitmap bitops bridges combinator common convert cpt cpu_crc32 debugfile dictstat dispatch dynloader event ext_ADL ext_cuda ext_hip ext_nvapi ext_nvml ext_nvrtc ext_hiprtc ext_OpenCL ext_sysfs_amdgpu ext_sysfs_cpu ext_iokit ext_lzma filehandling folder hashcat hashes hlfmt hwmon induct interface keyboard_layout locking logfile loopback memory monitor mpsp outfile_check outfile pidfile potfile restore rp rp_cpu selftest slow_candidates shared status stdout straight terminal thread timer tuningdb usage user_options wordlist $(EMU_OBJS_ALL) ifeq ($(ENABLE_BRAIN),1) OBJS_ALL += brain @@ -464,15 +464,18 @@ endif ## .PHONY: default -default: $(HASHCAT_FRONTEND) modules +default: $(HASHCAT_FRONTEND) modules bridges .PHONY: clean clean: $(RM) -f $(HASHCAT_FRONTEND) $(RM) -f $(HASHCAT_LIBRARY) $(RM) -rf modules/*.dSYM + $(RM) -rf bridges/*.dSYM $(RM) -f modules/*.dll $(RM) -f modules/*.so + $(RM) -f bridges/*.dll + $(RM) -f bridges/*.so $(RM) -f obj/*/*/*.o $(RM) -f obj/*/*.o $(RM) -f obj/*.o @@ -516,9 +519,9 @@ endif .PHONY: install ifeq ($(SHARED),1) -install: install_docs install_shared install_library install_library_dev install_tunings install_kernels install_modules install_hashcat +install: install_docs install_shared install_library install_library_dev install_tunings install_kernels install_modules install_bridges install_hashcat else -install: install_docs install_shared install_tunings install_kernels install_modules install_hashcat +install: install_docs install_shared install_tunings install_kernels install_modules install_bridges install_hashcat endif # we need this extra target to make sure that for parallel builds (i.e. 2+ Makefile targets could possible run at the same time) @@ -591,6 +594,12 @@ install_modules: install_shared modules $(FIND) modules/ -mindepth 1 -type d -execdir $(INSTALL) -m 755 -d $(DESTDIR)$(SHARED_FOLDER)/modules/{} \; $(FIND) modules/ -mindepth 1 -type f -execdir $(INSTALL) -m 644 {} $(DESTDIR)$(SHARED_FOLDER)/modules/{} \; +.PHONY: install_bridges +install_bridges: install_shared bridges + $(INSTALL) -m 755 -d $(DESTDIR)$(SHARED_FOLDER)/bridges + $(FIND) bridges/ -mindepth 1 -type d -execdir $(INSTALL) -m 755 -d $(DESTDIR)$(SHARED_FOLDER)/bridges/{} \; + $(FIND) bridges/ -mindepth 1 -type f -execdir $(INSTALL) -m 644 {} $(DESTDIR)$(SHARED_FOLDER)/bridges/{} \; + .PHONY: install_library install_library: $(HASHCAT_LIBRARY) $(INSTALL) -m 755 -d $(DESTDIR)$(LIBRARY_FOLDER) @@ -714,6 +723,40 @@ MODULES_LIB := $(patsubst src/modules/module_%.c, modules/module_%.$(MODULE_SU .PHONY: modules modules: $(MODULES_LIB) +## +## native compiled bridges +## + +BRIDGE_SUFFIX := so + +ifeq ($(UNAME),CYGWIN) +BRIDGE_SUFFIX := dll +endif + +ifeq ($(UNAME),MSYS2) +BRIDGE_SUFFIX := dll +endif + +BRIDGES_SRC := $(wildcard src/bridges/*.c) + +## not used so far, see modules above +BRIDGES_DISABLE ?= + +$(BRIDGES_DISABLE): ; + +ifeq ($(SHARED),1) +bridges/bridge_%.$(BRIDGE_SUFFIX): src/bridges/bridge_%.c $(HASHCAT_LIBRARY) + $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) -march=native +else +bridges/bridge_%.$(BRIDGE_SUFFIX): src/bridges/bridge_%.c obj/combined.NATIVE.a + $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) -march=native +endif + +BRIDGES_LIB := $(patsubst src/bridges/bridge_%.c, bridges/bridge_%.$(BRIDGE_SUFFIX), $(BRIDGES_SRC)) + +.PHONY: bridges +bridges: $(BRIDGES_LIB) + ## ## Cross Compilation (binary release version) ## @@ -799,8 +842,8 @@ host_linux: hashcat.bin host_win: hashcat.exe .PHONY: linux win -linux: host_linux modules_linux -win: host_win modules_win +linux: host_linux modules_linux bridges_linux +win: host_win modules_win bridges_win endif ## @@ -820,6 +863,24 @@ modules/module_%.so: src/modules/module_%.c obj/combined.LINUX.a modules/module_%.dll: src/modules/module_%.c obj/combined.WIN.a $(CC_WIN) $(CCFLAGS) $(CFLAGS_CROSS_WIN) $^ -o $@ $(LFLAGS_CROSS_WIN) -shared -fPIC -D MODULE_INTERFACE_VERSION_CURRENT=$(MODULE_INTERFACE_VERSION) +## +## cross compiled bridges +## + +BRIDGES_LIB_LINUX := $(patsubst src/bridges/bridge_%.c, bridges/bridge_%.so, $(BRIDGES_SRC)) +BRIDGES_LIB_WIN := $(patsubst src/bridges/bridge_%.c, bridges/bridge_%.dll, $(BRIDGES_SRC)) + +.PHONY: bridges_linux bridges_win +bridges_linux: $(BRIDGES_LIB_LINUX) +bridges_win: $(BRIDGES_LIB_WIN) + +bridges/bridge_%.so: src/bridges/bridge_%.c obj/combined.LINUX.a + $(CC_LINUX) $(CCFLAGS) $(CFLAGS_CROSS_LINUX) $^ -o $@ $(LFLAGS_CROSS_LINUX) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) -march=native + +bridges/bridge_%.dll: src/bridges/bridge_%.c obj/combined.WIN.a + $(CC_WIN) $(CCFLAGS) $(CFLAGS_CROSS_WIN) $^ -o $@ $(LFLAGS_CROSS_WIN) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) -march=native + + ## ## cross compiled hashcat ## @@ -885,3 +946,6 @@ endif # Give plugin developers a chance to add some 3rd party libraries include $(wildcard src/modules/module_*.mk) + +# Give plugin developers a chance to add some 3rd party libraries +include $(wildcard src/bridges/bridge_*.mk) diff --git a/src/backend.c b/src/backend.c index f63aec1b1..1e15f8985 100644 --- a/src/backend.c +++ b/src/backend.c @@ -43,7 +43,7 @@ static const u32 bzeros[4] = { 0, 0, 0, 0 }; /* forward declarations */ static void rebuild_pws_compressed_append (hc_device_param_t *device_param, const u64 pws_cnt, const u8 chr); - +// static bool is_same_device (const hc_device_param_t *src, const hc_device_param_t *dst) { // First check by PCI address @@ -157,7 +157,7 @@ static int backend_ctx_find_alias_devices (hashcat_ctx_t *hashcat_ctx) // show a warning for specifically listed devices if they are an alias - if (backend_ctx->backend_devices_filter[alias_device->device_id]) + if (backend_ctx->backend_devices_filter[alias_device->device_id] == 1) { event_log_warning (hashcat_ctx, "The device #%d specifically listed was skipped because it is an alias of device #%d", alias_device->device_id + 1, backend_device->device_id + 1); event_log_warning (hashcat_ctx, NULL); @@ -270,51 +270,46 @@ static int ocl_check_dri (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx) return 0; } -static bool setup_backend_devices_filter (hashcat_ctx_t *hashcat_ctx, const char *backend_devices, bool *out) +static bool setup_backend_devices_filter (hashcat_ctx_t *hashcat_ctx, const char *backend_devices, int *backend_devices_filter) { - bool backend_devices_filter[DEVICES_MAX + 1] = {false}; + const bridge_ctx_t *bridge_ctx = hashcat_ctx->bridge_ctx; - if (backend_devices) + for (int i = 0; i < DEVICES_MAX; i++) backend_devices_filter[i] = 0; + + if (bridge_ctx->enabled == true) return true; + + if (backend_devices == NULL) return true; + + // in this case opposite + + for (int i = 0; i < DEVICES_MAX; i++) backend_devices_filter[i] = 1; + + char *devices = hcstrdup (backend_devices); + + if (devices == NULL) return false; + + char *saveptr = NULL; + + char *next = strtok_r (devices, ",", &saveptr); + + do { - char *devices = hcstrdup (backend_devices); + const int backend_device_id = (const int) strtol (next, NULL, 10); - if (devices == NULL) return false; - - char *saveptr = NULL; - - char *next = strtok_r (devices, ",", &saveptr); - - do + if ((backend_device_id <= 0) || (backend_device_id >= DEVICES_MAX)) { - const int backend_device_id = (const int) strtol (next, NULL, 10); + event_log_error (hashcat_ctx, "Invalid device_id %d specified.", backend_device_id); - if ((backend_device_id <= 0) || (backend_device_id >= DEVICES_MAX)) - { - event_log_error (hashcat_ctx, "Invalid device_id %d specified.", backend_device_id); + hcfree (devices); - hcfree (devices); - - return false; - } - - backend_devices_filter[backend_device_id - 1] = true; - - } while ((next = strtok_r ((char *) NULL, ",", &saveptr)) != NULL); - - hcfree (devices); - } - else - { - for (int i = 0; i <= DEVICES_MAX; i++) - { - backend_devices_filter[i] = true; + return false; } - } - for (int i = 0; i <= DEVICES_MAX; i++) - { - out[i] = backend_devices_filter[i]; - } + backend_devices_filter[backend_device_id - 1] = 0; + + } while ((next = strtok_r ((char *) NULL, ",", &saveptr)) != NULL); + + hcfree (devices); return true; } @@ -620,11 +615,6 @@ static bool write_kernel_binary (hashcat_ctx_t *hashcat_ctx, const char *kernel_ return true; } -u32 backend_device_idx_real_from_virtual (const u32 device_idx, const u32 backend_devices_virtual) -{ - return device_idx / backend_devices_virtual; -} - void generate_source_kernel_filename (const bool slow_candidates, const u32 attack_exec, const u32 attack_kern, const u32 kern_type, const u32 opti_type, char *shared_dir, char *source_file) { if (opti_type & OPTI_TYPE_OPTIMIZED_KERNEL) @@ -952,6 +942,7 @@ int copy_pws_comp (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, const u32 highest_pw_len, const u64 pws_pos, const u64 pws_cnt, const u32 fast_iteration, const u32 salt_pos) { + bridge_ctx_t *bridge_ctx = hashcat_ctx->bridge_ctx; hashconfig_t *hashconfig = hashcat_ctx->hashconfig; hashes_t *hashes = hashcat_ctx->hashes; module_ctx_t *module_ctx = hashcat_ctx->module_ctx; @@ -1073,6 +1064,41 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, // as soon as the first restore checkpoint is reached the prediction is accurate. // also the closer it gets to that point. + /* workflow overview: + + ATTACK_EXEC_OUTSIDE_KERNEL: + COPY_AMPLIFIER_MATERIAL + RUN_AMPLIFIER + RUN_UTF16_CONVERT + RUN_INIT + COPY_HOOK_DATA_TO_HOST + CALL_HOOK12 + COPY_HOOK_DATA_TO_DEVICE + SALT_REPEATS (default 1): + RUN_PREPARE + ITER_REPEATS: + RUN_LOOP + RUN_EXTENTED + COPY_BRIDGE_MATERIAL_TO_HOST + BRIDGE_LOOP + COPY_BRIDGE_MATERIAL_TO_DEVICE + COPY_HOOK_DATA_TO_HOST + CALL_HOOK23 + COPY_HOOK_DATA_TO_DEVICE + RUN_INIT2 + SALT_REPEATS (default 1): + RUN_PREPARE2 + ITER2_REPEATS: + RUN_LOOP2 + COPY_BRIDGE_MATERIAL_TO_HOST + BRIDGE_LOOP2 + COPY_BRIDGE_MATERIAL_TO_DEVICE + DEEP_COMP_KERNEL: + RUN_AUX1/2/3/4 + RUN_COMP + CLEAN_HOOK_DATA + */ + if (true) { if (device_param->is_cuda == true) @@ -1214,7 +1240,7 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, if (device_param->is_opencl == true) { - if (hc_clEnqueueWriteBuffer (hashcat_ctx, device_param->opencl_command_queue, device_param->opencl_d_hooks, CL_FALSE, 0, pws_cnt * hashconfig->hook_size, device_param->hooks_buf, 0, NULL, NULL) == -1) return -1; + if (hc_clEnqueueWriteBuffer (hashcat_ctx, device_param->opencl_command_queue, device_param->opencl_d_hooks, CL_TRUE, 0, pws_cnt * hashconfig->hook_size, device_param->hooks_buf, 0, NULL, NULL) == -1) return -1; } } } @@ -1292,6 +1318,60 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, } } + if (hashconfig->bridge_type & BRIDGE_TYPE_LAUNCH_LOOP) + { + if (device_param->is_cuda == true) + { + if (hc_cuMemcpyDtoHAsync (hashcat_ctx, device_param->h_tmps, device_param->cuda_d_tmps, pws_cnt * hashconfig->tmp_size, device_param->cuda_stream) == -1) return -1; + + if (hc_cuStreamSynchronize (hashcat_ctx, device_param->cuda_stream) == -1) return -1; + } + + if (device_param->is_hip == true) + { + if (hc_hipMemcpyDtoHAsync (hashcat_ctx, device_param->h_tmps, device_param->hip_d_tmps, pws_cnt * hashconfig->tmp_size, device_param->hip_stream) == -1) return -1; + + if (hc_hipStreamSynchronize (hashcat_ctx, device_param->hip_stream) == -1) return -1; + } + + #if defined (__APPLE__) + if (device_param->is_metal == true) + { + if (hc_mtlMemcpyDtoH (hashcat_ctx, device_param->metal_command_queue, device_param->h_tmps, device_param->metal_d_tmps, 0, pws_cnt * hashconfig->tmp_size) == -1) return -1; + } + #endif + + if (device_param->is_opencl == true) + { + /* blocking */ + if (hc_clEnqueueReadBuffer (hashcat_ctx, device_param->opencl_command_queue, device_param->opencl_d_tmps, CL_TRUE, 0, pws_cnt * hashconfig->tmp_size, device_param->h_tmps, 0, NULL, NULL) == -1) return -1; + } + + if (bridge_ctx->launch_loop (bridge_ctx->platform_context, device_param, hashconfig, hashes, salt_pos, pws_cnt) == false) return -1; + + if (device_param->is_cuda == true) + { + if (hc_cuMemcpyHtoDAsync (hashcat_ctx, device_param->cuda_d_tmps, device_param->h_tmps, pws_cnt * hashconfig->tmp_size, device_param->cuda_stream) == -1) return -1; + } + + if (device_param->is_hip == true) + { + if (hc_hipMemcpyHtoDAsync (hashcat_ctx, device_param->hip_d_tmps, device_param->h_tmps, pws_cnt * hashconfig->tmp_size, device_param->hip_stream) == -1) return -1; + } + + #if defined (__APPLE__) + if (device_param->is_metal == true) + { + if (hc_mtlMemcpyHtoD (hashcat_ctx, device_param->metal_command_queue, device_param->metal_d_tmps, 0, device_param->h_tmps, pws_cnt * hashconfig->tmp_size) == -1) return -1; + } + #endif + + if (device_param->is_opencl == true) + { + if (hc_clEnqueueWriteBuffer (hashcat_ctx, device_param->opencl_command_queue, device_param->opencl_d_tmps, CL_TRUE, 0, pws_cnt * hashconfig->tmp_size, device_param->h_tmps, 0, NULL, NULL) == -1) return -1; + } + } + if (hashconfig->opts_type & OPTS_TYPE_HOOK23) { if (run_kernel (hashcat_ctx, device_param, KERN_RUN_23, pws_pos, pws_cnt, false, 0) == -1) return -1; @@ -1374,7 +1454,7 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, if (device_param->is_opencl == true) { - if (hc_clEnqueueWriteBuffer (hashcat_ctx, device_param->opencl_command_queue, device_param->opencl_d_hooks, CL_FALSE, 0, pws_cnt * hashconfig->hook_size, device_param->hooks_buf, 0, NULL, NULL) == -1) return -1; + if (hc_clEnqueueWriteBuffer (hashcat_ctx, device_param->opencl_command_queue, device_param->opencl_d_hooks, CL_TRUE, 0, pws_cnt * hashconfig->hook_size, device_param->hooks_buf, 0, NULL, NULL) == -1) return -1; } } } @@ -1442,6 +1522,60 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, device_param->speed_msec[speed_pos] = speed_msec; } + + if (hashconfig->bridge_type & BRIDGE_TYPE_LAUNCH_LOOP2) + { + if (device_param->is_cuda == true) + { + if (hc_cuMemcpyDtoHAsync (hashcat_ctx, device_param->h_tmps, device_param->cuda_d_tmps, pws_cnt * hashconfig->tmp_size, device_param->cuda_stream) == -1) return -1; + + if (hc_cuStreamSynchronize (hashcat_ctx, device_param->cuda_stream) == -1) return -1; + } + + if (device_param->is_hip == true) + { + if (hc_hipMemcpyDtoHAsync (hashcat_ctx, device_param->h_tmps, device_param->hip_d_tmps, pws_cnt * hashconfig->tmp_size, device_param->hip_stream) == -1) return -1; + + if (hc_hipStreamSynchronize (hashcat_ctx, device_param->hip_stream) == -1) return -1; + } + + #if defined (__APPLE__) + if (device_param->is_metal == true) + { + if (hc_mtlMemcpyDtoH (hashcat_ctx, device_param->metal_command_queue, device_param->h_tmps, device_param->metal_d_tmps, 0, pws_cnt * hashconfig->tmp_size) == -1) return -1; + } + #endif + + if (device_param->is_opencl == true) + { + /* blocking */ + if (hc_clEnqueueReadBuffer (hashcat_ctx, device_param->opencl_command_queue, device_param->opencl_d_tmps, CL_TRUE, 0, pws_cnt * hashconfig->tmp_size, device_param->h_tmps, 0, NULL, NULL) == -1) return -1; + } + + if (bridge_ctx->launch_loop2 (bridge_ctx->platform_context, device_param, hashconfig, hashes, salt_pos, pws_cnt) == false) return -1; + + if (device_param->is_cuda == true) + { + if (hc_cuMemcpyHtoDAsync (hashcat_ctx, device_param->cuda_d_tmps, device_param->h_tmps, pws_cnt * hashconfig->tmp_size, device_param->cuda_stream) == -1) return -1; + } + + if (device_param->is_hip == true) + { + if (hc_hipMemcpyHtoDAsync (hashcat_ctx, device_param->hip_d_tmps, device_param->h_tmps, pws_cnt * hashconfig->tmp_size, device_param->hip_stream) == -1) return -1; + } + + #if defined (__APPLE__) + if (device_param->is_metal == true) + { + if (hc_mtlMemcpyHtoD (hashcat_ctx, device_param->metal_command_queue, device_param->metal_d_tmps, 0, device_param->h_tmps, pws_cnt * hashconfig->tmp_size) == -1) return -1; + } + #endif + + if (device_param->is_opencl == true) + { + if (hc_clEnqueueWriteBuffer (hashcat_ctx, device_param->opencl_command_queue, device_param->opencl_d_tmps, CL_TRUE, 0, pws_cnt * hashconfig->tmp_size, device_param->h_tmps, 0, NULL, NULL) == -1) return -1; + } + } } } } @@ -4621,11 +4755,7 @@ int backend_ctx_init (hashcat_ctx_t *hashcat_ctx) * Backend device selection */ - bool backend_devices_filter[DEVICES_MAX + 1]; - - if (setup_backend_devices_filter (hashcat_ctx, user_options->backend_devices, backend_devices_filter) == false) return -1; - - for (int i = 0; i <= DEVICES_MAX; i++) backend_ctx->backend_devices_filter[i] = backend_devices_filter[i]; + if (setup_backend_devices_filter (hashcat_ctx, user_options->backend_devices, backend_ctx->backend_devices_filter) == false) return -1; /** * OpenCL device type selection @@ -4844,12 +4974,14 @@ int backend_ctx_init (hashcat_ctx_t *hashcat_ctx) } } + /* no longer used opencl_platform_devices_cnt *= user_options->backend_devices_virtual; for (int i = opencl_platform_devices_cnt - 1; i >= 0; i--) { opencl_platform_devices[i] = opencl_platform_devices[backend_device_idx_real_from_virtual (i, user_options->backend_devices_virtual)]; } + */ opencl_platforms_devices[opencl_platforms_idx] = opencl_platform_devices; opencl_platforms_devices_cnt[opencl_platforms_idx] = opencl_platform_devices_cnt; @@ -4904,6 +5036,11 @@ int backend_ctx_init (hashcat_ctx_t *hashcat_ctx) } } + // we don't want accelerators here + // for this kind of devices, we use accelerator bridge plugin interface + + opencl_device_types_filter &= ~CL_DEVICE_TYPE_ACCELERATOR; + backend_ctx->opencl_device_types_filter = opencl_device_types_filter; } } @@ -4990,6 +5127,7 @@ void backend_ctx_destroy (hashcat_ctx_t *hashcat_ctx) int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) { + const bridge_ctx_t *bridge_ctx = hashcat_ctx->bridge_ctx; const folder_config_t *folder_config = hashcat_ctx->folder_config; backend_ctx_t *backend_ctx = hashcat_ctx->backend_ctx; user_options_t *user_options = hashcat_ctx->user_options; @@ -5005,7 +5143,16 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) bool need_sysfs_cpu = false; bool need_iokit = false; - int backend_devices_idx = 0; + int bridge_link_device = 0; // this will only count active device + + int backend_devices_idx = 0; // this will not only count active devices + + bool is_virtualized = ((user_options->backend_devices_virtmulti > 1) || (bridge_ctx->enabled == true)) ? true : false; + + int virtmulti = (bridge_ctx->enabled == true) ? bridge_ctx->get_unit_count (bridge_ctx->platform_context) : (int) user_options->backend_devices_virtmulti; + + int virthost = -1; + int virthost_finder = user_options->backend_devices_virthost; // CUDA @@ -5021,7 +5168,21 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) cuda_close (hashcat_ctx); } - cuda_devices_cnt *= user_options->backend_devices_virtual; + if (is_virtualized == true) + { + if ((virthost == -1) && (virthost_finder <= cuda_devices_cnt)) + { + cuda_devices_cnt = virtmulti; + + virthost = virthost_finder - 1; + } + else + { + virthost_finder -= cuda_devices_cnt; + + cuda_devices_cnt = 0; + } + } backend_ctx->cuda_devices_cnt = cuda_devices_cnt; @@ -5031,7 +5192,7 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) { const u32 device_id = backend_devices_idx; - const u32 cuda_devices_idx_real = backend_device_idx_real_from_virtual (cuda_devices_idx, user_options->backend_devices_virtual); + const u32 cuda_devices_idx_real = (is_virtualized == true) ? virthost : cuda_devices_idx; hc_device_param_t *device_param = &devices_param[backend_devices_idx]; @@ -5284,7 +5445,7 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) // skipped - if (!backend_ctx->backend_devices_filter[device_id]) + if (backend_ctx->backend_devices_filter[device_id] == 1) { device_param->skipped = true; } @@ -5411,7 +5572,12 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) * activate device */ - if (device_param->skipped == false) cuda_devices_active++; + if (device_param->skipped == false) + { + device_param->bridge_link_device = bridge_link_device++; + + cuda_devices_active++; + } } } @@ -5432,7 +5598,21 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) hip_close (hashcat_ctx); } - hip_devices_cnt *= user_options->backend_devices_virtual; + if (is_virtualized == true) + { + if ((virthost == -1) && (virthost_finder <= hip_devices_cnt)) + { + hip_devices_cnt = virtmulti; + + virthost = virthost_finder - 1; + } + else + { + virthost_finder -= hip_devices_cnt; + + hip_devices_cnt = 0; + } + } backend_ctx->hip_devices_cnt = hip_devices_cnt; @@ -5442,7 +5622,7 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) { const u32 device_id = backend_devices_idx; - const u32 hip_devices_idx_real = backend_device_idx_real_from_virtual (hip_devices_idx, user_options->backend_devices_virtual); + const u32 hip_devices_idx_real = (is_virtualized == true) ? virthost : hip_devices_idx; hc_device_param_t *device_param = &devices_param[backend_devices_idx]; @@ -5701,7 +5881,7 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) // skipped - if (!backend_ctx->backend_devices_filter[device_id]) + if (backend_ctx->backend_devices_filter[device_id] == 1) { device_param->skipped = true; } @@ -5842,7 +6022,12 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) * activate device */ - if (device_param->skipped == false) hip_devices_active++; + if (device_param->skipped == false) + { + device_param->bridge_link_device = bridge_link_device++; + + hip_devices_active++; + } } } @@ -5864,7 +6049,21 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) mtl_close (hashcat_ctx); } - metal_devices_cnt *= user_options->backend_devices_virtual; + if (is_virtualized == true) + { + if ((virthost == -1) && (virthost_finder <= metal_devices_cnt)) + { + metal_devices_cnt = virtmulti; + + virthost = virthost_finder - 1; + } + else + { + virthost_finder -= metal_devices_cnt; + + metal_devices_cnt = 0; + } + } backend_ctx->metal_devices_cnt = metal_devices_cnt; @@ -5874,7 +6073,7 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) { const u32 device_id = backend_devices_idx; - const u32 metal_devices_idx_real = backend_device_idx_real_from_virtual (metal_devices_idx, user_options->backend_devices_virtual); + const u32 metal_devices_idx_real = (is_virtualized == true) ? virthost : metal_devices_idx; hc_device_param_t *device_param = &devices_param[backend_devices_idx]; @@ -6198,7 +6397,7 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) // skipped - if (!backend_ctx->backend_devices_filter[device_id]) + if (backend_ctx->backend_devices_filter[device_id] == 1) { device_param->skipped = true; } @@ -6250,7 +6449,12 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) * activate device */ - if (device_param->skipped == false) metal_devices_active++; + if (device_param->skipped == false) + { + device_param->bridge_link_device = bridge_link_device++; + + metal_devices_active++; + } } } #endif // __APPLE__ @@ -6282,6 +6486,24 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) cl_uint opencl_platform_vendor_id = opencl_platforms_vendor_id[opencl_platforms_idx]; char *opencl_platform_version = opencl_platforms_version[opencl_platforms_idx]; + if (is_virtualized == true) + { + if ((virthost == -1) && (virthost_finder <= (int) opencl_platform_devices_cnt)) + { + opencl_platform_devices_cnt = virtmulti; + + virthost = virthost_finder - 1; + } + else + { + virthost_finder -= (int) opencl_platform_devices_cnt; + + opencl_platform_devices_cnt = 0; + } + + opencl_platforms_devices_cnt[opencl_platforms_idx] = opencl_platform_devices_cnt; + } + for (u32 opencl_platform_devices_idx = 0; opencl_platform_devices_idx < opencl_platform_devices_cnt; opencl_platform_devices_idx++, backend_devices_idx++, opencl_devices_cnt++) { const u32 device_id = backend_devices_idx; @@ -6296,7 +6518,7 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) device_param->opencl_platform_vendor_id = opencl_platform_vendor_id; - device_param->opencl_device = opencl_platform_devices[opencl_platform_devices_idx]; + device_param->opencl_device = opencl_platform_devices[(is_virtualized == true) ? virthost : (int) opencl_platform_devices_idx]; //device_param->opencl_platform = opencl_platform; @@ -6997,7 +7219,7 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) // skipped - if (!backend_ctx->backend_devices_filter[device_id]) + if (backend_ctx->backend_devices_filter[device_id] == 1) { device_param->skipped = true; } @@ -7602,6 +7824,8 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) * activate device */ + device_param->bridge_link_device = bridge_link_device++; + opencl_devices_active++; } } @@ -7633,7 +7857,7 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) if (device_param->skipped == false) { - if (backend_ctx->backend_devices_filter[DEVICES_MAX]) + if (backend_ctx->backend_devices_filter[device_param->device_id] == 1) { if ((user_options->quiet == false) && (user_options->backend_info == 0)) { @@ -7710,23 +7934,6 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) return -1; } - if (!backend_ctx->backend_devices_filter[DEVICES_MAX]) - { - // maybe we will need this in the future - //const u64 backend_devices_cnt_mask = ~(((u64) -1 >> backend_ctx->backend_devices_cnt) << backend_ctx->backend_devices_cnt); - - for (int i = backend_ctx->backend_devices_cnt; i < DEVICES_MAX; i++) - { - if (backend_ctx->backend_devices_filter[i]) - { - event_log_error (hashcat_ctx, "An invalid device was specified using the --backend-devices parameter."); - event_log_error (hashcat_ctx, "The specified device was higher than the number of available devices (%u).", backend_ctx->backend_devices_cnt); - - return -1; - } - } - } - // time or resource intensive operations which we do not run if the corresponding device was skipped by the user if (backend_ctx->cuda) @@ -8240,8 +8447,10 @@ void backend_ctx_devices_destroy (hashcat_ctx_t *hashcat_ctx) void backend_ctx_devices_sync_tuning (hashcat_ctx_t *hashcat_ctx) { - backend_ctx_t *backend_ctx = hashcat_ctx->backend_ctx; - hashconfig_t *hashconfig = hashcat_ctx->hashconfig; + backend_ctx_t *backend_ctx = hashcat_ctx->backend_ctx; + bridge_ctx_t *bridge_ctx = hashcat_ctx->bridge_ctx; + hashconfig_t *hashconfig = hashcat_ctx->hashconfig; + user_options_t *user_options = hashcat_ctx->user_options; if (backend_ctx->enabled == false) return; @@ -8274,6 +8483,38 @@ void backend_ctx_devices_sync_tuning (hashcat_ctx_t *hashcat_ctx) device_param_dst->kernel_power = kernel_power; } } + + // bridge overrides everything + + if (hashconfig->bridge_type) + { + for (int backend_devices_cnt = 0; backend_devices_cnt < backend_ctx->backend_devices_cnt; backend_devices_cnt++) + { + hc_device_param_t *device_param = &backend_ctx->devices_param[backend_devices_cnt]; + + if (device_param->skipped == true) continue; + if (device_param->skipped_warning == true) continue; + + int workitem_count = bridge_ctx->get_workitem_count (bridge_ctx->platform_context, device_param->bridge_link_device); + + if (hashconfig->bridge_type & BRIDGE_TYPE_FORCE_WORKITEMS_001) workitem_count = 1; + else if (hashconfig->bridge_type & BRIDGE_TYPE_FORCE_WORKITEMS_002) workitem_count = 2; + else if (hashconfig->bridge_type & BRIDGE_TYPE_FORCE_WORKITEMS_004) workitem_count = 4; + else if (hashconfig->bridge_type & BRIDGE_TYPE_FORCE_WORKITEMS_008) workitem_count = 8; + else if (hashconfig->bridge_type & BRIDGE_TYPE_FORCE_WORKITEMS_016) workitem_count = 16; + else if (hashconfig->bridge_type & BRIDGE_TYPE_FORCE_WORKITEMS_032) workitem_count = 32; + else if (hashconfig->bridge_type & BRIDGE_TYPE_FORCE_WORKITEMS_064) workitem_count = 64; + else if (hashconfig->bridge_type & BRIDGE_TYPE_FORCE_WORKITEMS_128) workitem_count = 128; + else if (hashconfig->bridge_type & BRIDGE_TYPE_FORCE_WORKITEMS_256) workitem_count = 256; + + if ((int) device_param->kernel_power < workitem_count) + { + if (user_options->quiet == false) event_log_warning (hashcat_ctx, "* Device #%u/Bridge #%u: kernel_power:%" PRIu64 " < workitem_count:%d", device_param->device_id + 1, device_param->bridge_link_device + 1, device_param->kernel_power, workitem_count); + } + + device_param->kernel_power = workitem_count; + } + } } void backend_ctx_devices_update_power (hashcat_ctx_t *hashcat_ctx) @@ -9172,6 +9413,7 @@ static bool load_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_p int backend_session_begin (hashcat_ctx_t *hashcat_ctx) { const bitmap_ctx_t *bitmap_ctx = hashcat_ctx->bitmap_ctx; + const bridge_ctx_t *bridge_ctx = hashcat_ctx->bridge_ctx; const folder_config_t *folder_config = hashcat_ctx->folder_config; const hashconfig_t *hashconfig = hashcat_ctx->hashconfig; const hashes_t *hashes = hashcat_ctx->hashes; @@ -9501,6 +9743,37 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) } } } + + if (hashconfig->bridge_type & BRIDGE_TYPE_MATCH_TUNINGS) + { + u32 workitem_count = bridge_ctx->get_workitem_count (bridge_ctx->platform_context, device_param->bridge_link_device); + + if (hashconfig->bridge_type & BRIDGE_TYPE_FORCE_WORKITEMS_001) workitem_count = 1; + else if (hashconfig->bridge_type & BRIDGE_TYPE_FORCE_WORKITEMS_002) workitem_count = 2; + else if (hashconfig->bridge_type & BRIDGE_TYPE_FORCE_WORKITEMS_004) workitem_count = 4; + else if (hashconfig->bridge_type & BRIDGE_TYPE_FORCE_WORKITEMS_008) workitem_count = 8; + else if (hashconfig->bridge_type & BRIDGE_TYPE_FORCE_WORKITEMS_016) workitem_count = 16; + else if (hashconfig->bridge_type & BRIDGE_TYPE_FORCE_WORKITEMS_032) workitem_count = 32; + else if (hashconfig->bridge_type & BRIDGE_TYPE_FORCE_WORKITEMS_064) workitem_count = 64; + else if (hashconfig->bridge_type & BRIDGE_TYPE_FORCE_WORKITEMS_128) workitem_count = 128; + else if (hashconfig->bridge_type & BRIDGE_TYPE_FORCE_WORKITEMS_256) workitem_count = 256; + + u32 native_threads = 0; + + if (device_param->opencl_device_type & CL_DEVICE_TYPE_CPU) + { + native_threads = 1; + } + else if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) + { + native_threads = device_param->kernel_preferred_wgs_multiple; + } + + const u32 _kernel_accel = ((workitem_count + native_threads - 1) / native_threads) * native_threads; + + device_param->kernel_accel_min = _kernel_accel; + device_param->kernel_accel_max = _kernel_accel; + } } if (user_options->kernel_loops_chgd == true) @@ -15408,6 +15681,13 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) * main host data */ + if (hashconfig->bridge_type) + { + void *h_tmps = hcmalloc_aligned (device_param->size_tmps, 64); + + device_param->h_tmps = h_tmps; + } + u32 *pws_comp = (u32 *) hcmalloc (size_pws_comp); device_param->pws_comp = pws_comp; @@ -15742,6 +16022,7 @@ void backend_session_destroy (hashcat_ctx_t *hashcat_ctx) if (device_param->skipped == true) continue; + hcfree_aligned (device_param->h_tmps); hcfree (device_param->pws_comp); hcfree (device_param->pws_idx); hcfree (device_param->pws_pre_buf); @@ -16308,6 +16589,7 @@ void backend_session_destroy (hashcat_ctx_t *hashcat_ctx) device_param->opencl_context = NULL; } + device_param->h_tmps = NULL; device_param->pws_comp = NULL; device_param->pws_idx = NULL; device_param->pws_pre_buf = NULL; diff --git a/src/bridges.c b/src/bridges.c new file mode 100644 index 000000000..f56224a8e --- /dev/null +++ b/src/bridges.c @@ -0,0 +1,274 @@ +/** + * Author......: See docs/credits.txt + * License.....: MIT + */ + +#include "common.h" +#include "types.h" +#include "memory.h" +#include "event.h" +#include "shared.h" +#include "modules.h" +#include "backend.h" +#include "dynloader.h" +#include "bridges.h" +#include "interface.h" + +/** + * parsing + */ + +int bridge_filename (const folder_config_t *folder_config, const char *bridge_name, char *out_buf, const size_t out_size) +{ + // native compiled + #if defined (_WIN) || defined (__CYGWIN__) + return snprintf (out_buf, out_size, "%s/bridges/bridge_%s.dll", folder_config->shared_dir, bridge_name); + #else + return snprintf (out_buf, out_size, "%s/bridges/bridge_%s.so", folder_config->shared_dir, bridge_name); + #endif +} + +bool bridge_load (hashcat_ctx_t *hashcat_ctx, bridge_ctx_t *bridge_ctx, const char *bridge_name) +{ + const folder_config_t *folder_config = hashcat_ctx->folder_config; + + char *bridge_file = (char *) hcmalloc (HCBUFSIZ_TINY); + + bridge_filename (folder_config, bridge_name, bridge_file, HCBUFSIZ_TINY); + + struct stat s; + + memset (&s, 0, sizeof (struct stat)); + + if (stat (bridge_file, &s) == -1) + { + event_log_warning (hashcat_ctx, "The bridge plugin '%s' couldn't be found.", bridge_file); + event_log_warning (hashcat_ctx, NULL); + } + + bridge_ctx->bridge_handle = hc_dlopen (bridge_file); + + if (bridge_ctx->bridge_handle == NULL) + { + #if defined (_WIN) + event_log_error (hashcat_ctx, "Cannot load bridge %s", bridge_file); // todo: maybe there's a dlerror () equivalent + #else + event_log_error (hashcat_ctx, "%s", dlerror ()); + #endif + + return false; + } + + bridge_ctx->bridge_init = (BRIDGE_INIT) hc_dlsym (bridge_ctx->bridge_handle, "bridge_init"); + + if (bridge_ctx->bridge_init == NULL) + { + event_log_error (hashcat_ctx, "Cannot load symbol 'bridge_init' in bridge %s", bridge_file); + + return false; + } + + hcfree (bridge_file); + + return true; +} + +void bridge_unload (bridge_ctx_t *bridge_ctx) +{ + if (bridge_ctx->bridge_handle) + { + hc_dlclose (bridge_ctx->bridge_handle); + } +} + +bool bridges_init (hashcat_ctx_t *hashcat_ctx) +{ + bridge_ctx_t *bridge_ctx = hashcat_ctx->bridge_ctx; + user_options_t *user_options = hashcat_ctx->user_options; + hashconfig_t *hashconfig = hashcat_ctx->hashconfig; + + if (user_options->hash_info == true) return true; + if (user_options->left == true) return true; + if (user_options->show == true) return true; + if (user_options->usage > 0) return true; + if (user_options->version == true) return true; + if (user_options->backend_info > 0) return true; + + // There is a problem here. At this point, hashconfig is not yet initialized. + // This is because initializing hashconfig requires the module to be loaded, + // but in order to load the module, we need to know the backend devices. + // However, the backend devices are also not yet initialized, because + // they require the virtualization count, which we only determine here. + // To break this chicken-and-egg problem, we cheat by quick-loading the module + // and unloading it afterwards, so it can be properly initialized later. + + const int hashconfig_init_rc = hashconfig_init (hashcat_ctx); + + if (hashconfig_init_rc == -1) return false; + + // ok, we can start + + if (hashconfig->bridge_type == BRIDGE_TYPE_NONE) + { + hashconfig_destroy (hashcat_ctx); + + return true; + } + + bridge_ctx->enabled = true; + + // finally, the real stuff + + const bool rc_load = bridge_load (hashcat_ctx, bridge_ctx, hashconfig->bridge_name); + + if (rc_load == false) return false; + + bridge_ctx->bridge_init (bridge_ctx); + + if (bridge_ctx->bridge_context_size != BRIDGE_CONTEXT_SIZE_CURRENT) + { + event_log_error (hashcat_ctx, "bridge context size is invalid. Old template?"); + + return false; + } + + if (bridge_ctx->bridge_interface_version < BRIDGE_INTERFACE_VERSION_MINIMUM) + { + event_log_error (hashcat_ctx, "bridge interface version is outdated, please compile"); + + return false; + } + + // check for missing pointer assignements + + #define CHECK_DEFINED(func) \ + if ((func) == NULL) \ + { \ + event_log_error (hashcat_ctx, "Missing symbol definitions in bridge '%s'. Old template?", hashconfig->bridge_name); \ + \ + return false; \ + } + + CHECK_DEFINED (bridge_ctx->platform_init); + CHECK_DEFINED (bridge_ctx->platform_term); + CHECK_DEFINED (bridge_ctx->get_unit_count); + CHECK_DEFINED (bridge_ctx->get_unit_info); + CHECK_DEFINED (bridge_ctx->get_workitem_count); + CHECK_DEFINED (bridge_ctx->thread_init); + CHECK_DEFINED (bridge_ctx->thread_term); + CHECK_DEFINED (bridge_ctx->salt_prepare); + CHECK_DEFINED (bridge_ctx->salt_destroy); + CHECK_DEFINED (bridge_ctx->launch_loop); + CHECK_DEFINED (bridge_ctx->launch_loop2); + CHECK_DEFINED (bridge_ctx->st_update_hash); + CHECK_DEFINED (bridge_ctx->st_update_pass); + + #undef CHECK_DEFINED + + // mandatory functions check + + #define CHECK_MANDATORY(func) \ + if ((func) == MODULE_DEFAULT) \ + { \ + event_log_error (hashcat_ctx, "Missing mandatory symbol definitions"); \ + \ + return false; \ + } + + CHECK_MANDATORY (bridge_ctx->platform_init); + CHECK_MANDATORY (bridge_ctx->platform_term); + CHECK_MANDATORY (bridge_ctx->get_unit_count); + CHECK_MANDATORY (bridge_ctx->get_unit_info); + CHECK_MANDATORY (bridge_ctx->get_workitem_count); + + if (hashconfig->bridge_type & BRIDGE_TYPE_LAUNCH_LOOP) CHECK_MANDATORY (bridge_ctx->launch_loop); + if (hashconfig->bridge_type & BRIDGE_TYPE_LAUNCH_LOOP2) CHECK_MANDATORY (bridge_ctx->launch_loop2); + + #undef CHECK_MANDATORY + + bridge_ctx->platform_context = bridge_ctx->platform_init (user_options); + + if (bridge_ctx->platform_context == NULL) + { + event_log_error (hashcat_ctx, "Platform initialization failed"); + + return false; + } + + // auto adjust workitem counts + + if (hashconfig->bridge_type & BRIDGE_TYPE_MATCH_TUNINGS) + { + if ((hashconfig->opts_type & OPTS_TYPE_NATIVE_THREADS) == 0) + { + event_log_error (hashcat_ctx, "BRIDGE_TYPE_MATCH_TUNINGS requires OPTS_TYPE_NATIVE_THREADS"); + + return false; + } + + if ((hashconfig->opts_type & OPTS_TYPE_MP_MULTI_DISABLE) == 0) + { + event_log_error (hashcat_ctx, "BRIDGE_TYPE_MATCH_TUNINGS requires OPTS_TYPE_MP_MULTI_DISABLE"); + + return false; + } + } + + // clean up + + hashconfig_destroy (hashcat_ctx); + + return true; +} + +void bridges_destroy (hashcat_ctx_t *hashcat_ctx) +{ + bridge_ctx_t *bridge_ctx = hashcat_ctx->bridge_ctx; + + if (bridge_ctx->enabled == false) return; + + bridge_ctx->platform_term (bridge_ctx->platform_context); + + bridge_unload (bridge_ctx); +} + +bool bridges_salt_prepare (hashcat_ctx_t *hashcat_ctx) +{ + bridge_ctx_t *bridge_ctx = hashcat_ctx->bridge_ctx; + hashconfig_t *hashconfig = hashcat_ctx->hashconfig; + hashes_t *hashes = hashcat_ctx->hashes; + user_options_t *user_options = hashcat_ctx->user_options; + + if (user_options->hash_info == true) return true; + if (user_options->left == true) return true; + if (user_options->show == true) return true; + if (user_options->usage > 0) return true; + if (user_options->version == true) return true; + if (user_options->backend_info > 0) return true; + + if (bridge_ctx->enabled == false) return true; + + if (bridge_ctx->salt_prepare == MODULE_DEFAULT) return true; + + if (bridge_ctx->salt_prepare (bridge_ctx->platform_context, hashconfig, hashes) == false) + { + event_log_error (hashcat_ctx, "Couldn't prepare salt specific data in bridge"); + + return false; + } + + return true; +} + +void bridges_salt_destroy (hashcat_ctx_t *hashcat_ctx) +{ + bridge_ctx_t *bridge_ctx = hashcat_ctx->bridge_ctx; + hashconfig_t *hashconfig = hashcat_ctx->hashconfig; + hashes_t *hashes = hashcat_ctx->hashes; + + if (bridge_ctx->enabled == false) return; + + if (bridge_ctx->salt_destroy == MODULE_DEFAULT) return; + + bridge_ctx->salt_destroy (bridge_ctx->platform_context, hashconfig, hashes); +} diff --git a/src/bridges/.gitkeep b/src/bridges/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/src/dispatch.c b/src/dispatch.c index fdb0b441d..ad7c9851b 100644 --- a/src/dispatch.c +++ b/src/dispatch.c @@ -355,6 +355,9 @@ HC_API_CALL void *thread_calc_stdin (void *p) hashcat_ctx_t *hashcat_ctx = thread_param->hashcat_ctx; backend_ctx_t *backend_ctx = hashcat_ctx->backend_ctx; + bridge_ctx_t *bridge_ctx = hashcat_ctx->bridge_ctx; + hashconfig_t *hashconfig = hashcat_ctx->hashconfig; + hashes_t *hashes = hashcat_ctx->hashes; if (backend_ctx->enabled == false) return NULL; @@ -363,6 +366,14 @@ HC_API_CALL void *thread_calc_stdin (void *p) if (device_param->skipped) return NULL; if (device_param->skipped_warning == true) return NULL; + if (bridge_ctx->enabled == true) + { + if (bridge_ctx->thread_init != BRIDGE_DEFAULT) + { + if (bridge_ctx->thread_init (bridge_ctx->platform_context, device_param, hashconfig, hashes) == false) return NULL; + } + } + if (device_param->is_cuda == true) { if (hc_cuCtxPushCurrent (hashcat_ctx, device_param->cuda_context) == -1) return NULL; @@ -390,6 +401,14 @@ HC_API_CALL void *thread_calc_stdin (void *p) if (hc_hipCtxPopCurrent (hashcat_ctx, &device_param->hip_context) == -1) return NULL; } + if (bridge_ctx->enabled == true) + { + if (bridge_ctx->thread_term != BRIDGE_DEFAULT) + { + bridge_ctx->thread_term (bridge_ctx->platform_context, device_param, hashconfig, hashes); + } + } + return NULL; } @@ -1640,6 +1659,9 @@ HC_API_CALL void *thread_calc (void *p) hashcat_ctx_t *hashcat_ctx = thread_param->hashcat_ctx; backend_ctx_t *backend_ctx = hashcat_ctx->backend_ctx; + bridge_ctx_t *bridge_ctx = hashcat_ctx->bridge_ctx; + hashconfig_t *hashconfig = hashcat_ctx->hashconfig; + hashes_t *hashes = hashcat_ctx->hashes; if (backend_ctx->enabled == false) return NULL; @@ -1648,6 +1670,14 @@ HC_API_CALL void *thread_calc (void *p) if (device_param->skipped) return NULL; if (device_param->skipped_warning == true) return NULL; + if (bridge_ctx->enabled == true) + { + if (bridge_ctx->thread_init != BRIDGE_DEFAULT) + { + if (bridge_ctx->thread_init (bridge_ctx->platform_context, device_param, hashconfig, hashes) == false) return NULL; + } + } + if (device_param->is_cuda == true) { if (hc_cuCtxPushCurrent (hashcat_ctx, device_param->cuda_context) == -1) return NULL; @@ -1675,5 +1705,13 @@ HC_API_CALL void *thread_calc (void *p) if (hc_hipCtxPopCurrent (hashcat_ctx, &device_param->hip_context) == -1) return NULL; } + if (bridge_ctx->enabled == true) + { + if (bridge_ctx->thread_term != BRIDGE_DEFAULT) + { + bridge_ctx->thread_term (bridge_ctx->platform_context, device_param, hashconfig, hashes); + } + } + return NULL; } diff --git a/src/hashcat.c b/src/hashcat.c index e1607450c..ff412654a 100644 --- a/src/hashcat.c +++ b/src/hashcat.c @@ -20,6 +20,7 @@ #include "autotune.h" #include "benchmark.h" #include "bitmap.h" +#include "bridges.h" #include "combinator.h" #include "cpt.h" #include "debugfile.h" @@ -836,6 +837,21 @@ static int outer_loop (hashcat_ctx_t *hashcat_ctx) EVENT (EVENT_POTFILE_NUM_CRACKED); + /** + * setup salts for bridges, needs to be after bridge init, but before session start + */ + + EVENT (EVENT_BRIDGES_SALT_PRE); + + if (bridges_salt_prepare (hashcat_ctx) == false) + { + event_log_error (hashcat_ctx, "Bridge salt preparation for hash-mode '%u' failed.", user_options->hash_mode); + + return -1; + } + + EVENT (EVENT_BRIDGES_SALT_POST); + /** * inform the user */ @@ -858,6 +874,8 @@ static int outer_loop (hashcat_ctx_t *hashcat_ctx) brain_ctx_destroy (hashcat_ctx); #endif + bridges_salt_destroy (hashcat_ctx); + bridges_destroy (hashcat_ctx); bitmap_ctx_destroy (hashcat_ctx); combinator_ctx_destroy (hashcat_ctx); cpt_ctx_destroy (hashcat_ctx); @@ -1034,6 +1052,8 @@ static int outer_loop (hashcat_ctx_t *hashcat_ctx) brain_ctx_destroy (hashcat_ctx); #endif + bridges_salt_destroy (hashcat_ctx); + bridges_destroy (hashcat_ctx); bitmap_ctx_destroy (hashcat_ctx); combinator_ctx_destroy (hashcat_ctx); cpt_ctx_destroy (hashcat_ctx); @@ -1065,6 +1085,7 @@ int hashcat_init (hashcat_ctx_t *hashcat_ctx, void (*event) (const u32, struct h hashcat_ctx->bitmap_ctx = (bitmap_ctx_t *) hcmalloc (sizeof (bitmap_ctx_t)); hashcat_ctx->brain_ctx = (brain_ctx_t *) hcmalloc (sizeof (brain_ctx_t)); + hashcat_ctx->bridge_ctx = (bridge_ctx_t *) hcmalloc (sizeof (bridge_ctx_t)); hashcat_ctx->combinator_ctx = (combinator_ctx_t *) hcmalloc (sizeof (combinator_ctx_t)); hashcat_ctx->cpt_ctx = (cpt_ctx_t *) hcmalloc (sizeof (cpt_ctx_t)); hashcat_ctx->debugfile_ctx = (debugfile_ctx_t *) hcmalloc (sizeof (debugfile_ctx_t)); @@ -1100,6 +1121,7 @@ void hashcat_destroy (hashcat_ctx_t *hashcat_ctx) { hcfree (hashcat_ctx->bitmap_ctx); hcfree (hashcat_ctx->brain_ctx); + hcfree (hashcat_ctx->bridge_ctx); hcfree (hashcat_ctx->combinator_ctx); hcfree (hashcat_ctx->cpt_ctx); hcfree (hashcat_ctx->debugfile_ctx); @@ -1291,6 +1313,21 @@ int hashcat_session_init (hashcat_ctx_t *hashcat_ctx, const char *install_folder if (user_options_check_files (hashcat_ctx) == -1) return -1; + /** + * Load bridge a bit too early actually, but we need to know the unit count so we can automatically configure virtualization for the user + */ + + EVENT (EVENT_BRIDGES_INIT_PRE); + + if (bridges_init (hashcat_ctx) == false) + { + event_log_error (hashcat_ctx, "Bridge initialization for hash-mode '%u' failed.", user_options->hash_mode); + + return -1; + } + + EVENT (EVENT_BRIDGES_INIT_POST); + /** * Init backend library loader */ diff --git a/src/hashes.c b/src/hashes.c index 9de7a95a3..4699328df 100644 --- a/src/hashes.c +++ b/src/hashes.c @@ -2283,13 +2283,19 @@ int hashes_init_stage4 (hashcat_ctx_t *hashcat_ctx) if ((hashconfig->opts_type & OPTS_TYPE_DEEP_COMP_KERNEL) == 0) { - if (hashconfig->attack_exec == ATTACK_EXEC_OUTSIDE_KERNEL) + if ((hashconfig->opts_type & OPTS_TYPE_MULTIHASH_DESPITE_ESALT) == 0) { - if (hashes->digests_cnt != hashes->salts_cnt) + if (hashconfig->attack_exec == ATTACK_EXEC_OUTSIDE_KERNEL) { - event_log_error (hashcat_ctx, "This hash-mode plugin cannot crack multiple hashes with the same salt, please select one of the hashes."); + if (hashconfig->esalt_size > 0) + { + if (hashes->digests_cnt != hashes->salts_cnt) + { + event_log_error (hashcat_ctx, "This hash-mode plugin cannot crack multiple hashes with the same salt, please select one of the hashes."); - return -1; + return -1; + } + } } } } diff --git a/src/interface.c b/src/interface.c index 691e2931b..f3836721a 100644 --- a/src/interface.c +++ b/src/interface.c @@ -87,6 +87,7 @@ void module_unload (module_ctx_t *module_ctx) int hashconfig_init (hashcat_ctx_t *hashcat_ctx) { const backend_ctx_t *backend_ctx = hashcat_ctx->backend_ctx; + const bridge_ctx_t *bridge_ctx = hashcat_ctx->bridge_ctx; const folder_config_t *folder_config = hashcat_ctx->folder_config; hashconfig_t *hashconfig = hashcat_ctx->hashconfig; module_ctx_t *module_ctx = hashcat_ctx->module_ctx; @@ -153,6 +154,8 @@ int hashconfig_init (hashcat_ctx_t *hashcat_ctx) CHECK_DEFINED (module_ctx->module_benchmark_mask); CHECK_DEFINED (module_ctx->module_benchmark_charset); CHECK_DEFINED (module_ctx->module_benchmark_salt); + CHECK_DEFINED (module_ctx->module_bridge_name); + CHECK_DEFINED (module_ctx->module_bridge_type); CHECK_DEFINED (module_ctx->module_build_plain_postprocess); CHECK_DEFINED (module_ctx->module_deep_comp_kernel); CHECK_DEFINED (module_ctx->module_deprecated_notice); @@ -464,6 +467,8 @@ int hashconfig_init (hashcat_ctx_t *hashcat_ctx) if (module_ctx->module_kernel_loops_max != MODULE_DEFAULT) hashconfig->kernel_loops_max = module_ctx->module_kernel_loops_max (hashconfig, user_options, user_options_extra); if (module_ctx->module_kernel_threads_min != MODULE_DEFAULT) hashconfig->kernel_threads_min = module_ctx->module_kernel_threads_min (hashconfig, user_options, user_options_extra); if (module_ctx->module_kernel_threads_max != MODULE_DEFAULT) hashconfig->kernel_threads_max = module_ctx->module_kernel_threads_max (hashconfig, user_options, user_options_extra); + if (module_ctx->module_bridge_name != MODULE_DEFAULT) hashconfig->bridge_name = module_ctx->module_bridge_name (hashconfig, user_options, user_options_extra); + if (module_ctx->module_bridge_type != MODULE_DEFAULT) hashconfig->bridge_type = module_ctx->module_bridge_type (hashconfig, user_options, user_options_extra); if (hashconfig->hook_extra_param_size) { @@ -495,6 +500,14 @@ int hashconfig_init (hashcat_ctx_t *hashcat_ctx) } } + // selftest bridge update + + if (hashconfig->bridge_type & BRIDGE_TYPE_UPDATE_SELFTEST) + { + if (bridge_ctx->st_update_hash) hashconfig->st_hash = bridge_ctx->st_update_hash (bridge_ctx->platform_context); + if (bridge_ctx->st_update_pass) hashconfig->st_pass = bridge_ctx->st_update_pass (bridge_ctx->platform_context); + } + return 0; } diff --git a/src/main.c b/src/main.c index 085ce38b4..25c6021f8 100644 --- a/src/main.c +++ b/src/main.c @@ -1157,6 +1157,42 @@ static void main_autotune_finished (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAY event_log_info_nn (hashcat_ctx, "Finished autotune"); } +static void main_bridges_init_pre (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len) +{ + const user_options_t *user_options = hashcat_ctx->user_options; + + if (user_options->quiet == true) return; + + event_log_info_nn (hashcat_ctx, "Initializing bridges. Please be patient..."); +} + +static void main_bridges_init_post (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len) +{ + const user_options_t *user_options = hashcat_ctx->user_options; + + if (user_options->quiet == true) return; + + event_log_info_nn (hashcat_ctx, "Initialized bridges"); +} + +static void main_bridges_salt_pre (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len) +{ + const user_options_t *user_options = hashcat_ctx->user_options; + + if (user_options->quiet == true) return; + + event_log_info_nn (hashcat_ctx, "Initializing bridge salts. Please be patient..."); +} + +static void main_bridges_salt_post (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len) +{ + const user_options_t *user_options = hashcat_ctx->user_options; + + if (user_options->quiet == true) return; + + event_log_info_nn (hashcat_ctx, "Initialized bridge salts"); +} + static void event (const u32 id, hashcat_ctx_t *hashcat_ctx, const void *buf, const size_t len) { switch (id) @@ -1170,6 +1206,10 @@ static void event (const u32 id, hashcat_ctx_t *hashcat_ctx, const void *buf, co case EVENT_BITMAP_INIT_POST: main_bitmap_init_post (hashcat_ctx, buf, len); break; case EVENT_BITMAP_INIT_PRE: main_bitmap_init_pre (hashcat_ctx, buf, len); break; case EVENT_BITMAP_FINAL_OVERFLOW: main_bitmap_final_overflow (hashcat_ctx, buf, len); break; + case EVENT_BRIDGES_INIT_POST: main_bridges_init_post (hashcat_ctx, buf, len); break; + case EVENT_BRIDGES_INIT_PRE: main_bridges_init_pre (hashcat_ctx, buf, len); break; + case EVENT_BRIDGES_SALT_POST: main_bridges_salt_post (hashcat_ctx, buf, len); break; + case EVENT_BRIDGES_SALT_PRE: main_bridges_salt_pre (hashcat_ctx, buf, len); break; case EVENT_CALCULATED_WORDS_BASE: main_calculated_words_base (hashcat_ctx, buf, len); break; case EVENT_CRACKER_FINISHED: main_cracker_finished (hashcat_ctx, buf, len); break; case EVENT_CRACKER_HASH_CRACKED: main_cracker_hash_cracked (hashcat_ctx, buf, len); break; diff --git a/src/modules/module_00000.c b/src/modules/module_00000.c index 127d95c16..2ac0449b7 100644 --- a/src/modules/module_00000.c +++ b/src/modules/module_00000.c @@ -130,6 +130,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00010.c b/src/modules/module_00010.c index 57197205e..3918445b4 100644 --- a/src/modules/module_00010.c +++ b/src/modules/module_00010.c @@ -153,6 +153,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00011.c b/src/modules/module_00011.c index e762f70d7..7026bd04f 100644 --- a/src/modules/module_00011.c +++ b/src/modules/module_00011.c @@ -155,6 +155,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00012.c b/src/modules/module_00012.c index f0236e151..115c24073 100644 --- a/src/modules/module_00012.c +++ b/src/modules/module_00012.c @@ -148,6 +148,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00020.c b/src/modules/module_00020.c index 505f648e4..3d514be55 100644 --- a/src/modules/module_00020.c +++ b/src/modules/module_00020.c @@ -152,6 +152,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00021.c b/src/modules/module_00021.c index 7ad9d9acf..a9072fb4e 100644 --- a/src/modules/module_00021.c +++ b/src/modules/module_00021.c @@ -147,6 +147,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00022.c b/src/modules/module_00022.c index 6e974b024..4252f2f6d 100644 --- a/src/modules/module_00022.c +++ b/src/modules/module_00022.c @@ -260,6 +260,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00023.c b/src/modules/module_00023.c index 1cbce89a2..b50bf7a84 100644 --- a/src/modules/module_00023.c +++ b/src/modules/module_00023.c @@ -162,6 +162,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00024.c b/src/modules/module_00024.c index fedd77c37..a2c4d2e90 100644 --- a/src/modules/module_00024.c +++ b/src/modules/module_00024.c @@ -146,6 +146,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00030.c b/src/modules/module_00030.c index 50c5ca511..48d76c069 100644 --- a/src/modules/module_00030.c +++ b/src/modules/module_00030.c @@ -154,6 +154,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00040.c b/src/modules/module_00040.c index 2d0186982..16907aa00 100644 --- a/src/modules/module_00040.c +++ b/src/modules/module_00040.c @@ -153,6 +153,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00050.c b/src/modules/module_00050.c index 7e4eeaa4d..a3c1bf1c4 100644 --- a/src/modules/module_00050.c +++ b/src/modules/module_00050.c @@ -132,6 +132,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00060.c b/src/modules/module_00060.c index 7a3e0757d..bba42dfa3 100644 --- a/src/modules/module_00060.c +++ b/src/modules/module_00060.c @@ -132,6 +132,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00070.c b/src/modules/module_00070.c index d503dd5fe..995c2b34e 100644 --- a/src/modules/module_00070.c +++ b/src/modules/module_00070.c @@ -128,6 +128,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00100.c b/src/modules/module_00100.c index 3d6bb223d..186616de0 100644 --- a/src/modules/module_00100.c +++ b/src/modules/module_00100.c @@ -146,6 +146,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00101.c b/src/modules/module_00101.c index 7482896e2..9d873f97b 100644 --- a/src/modules/module_00101.c +++ b/src/modules/module_00101.c @@ -150,6 +150,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00110.c b/src/modules/module_00110.c index 30ce167af..8ce8652bf 100644 --- a/src/modules/module_00110.c +++ b/src/modules/module_00110.c @@ -172,6 +172,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00111.c b/src/modules/module_00111.c index 499c9a67c..fbb4f312c 100644 --- a/src/modules/module_00111.c +++ b/src/modules/module_00111.c @@ -177,6 +177,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00112.c b/src/modules/module_00112.c index 152f2314a..f7220e57e 100644 --- a/src/modules/module_00112.c +++ b/src/modules/module_00112.c @@ -172,6 +172,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00120.c b/src/modules/module_00120.c index 2ecb1aa79..6a94d02fe 100644 --- a/src/modules/module_00120.c +++ b/src/modules/module_00120.c @@ -172,6 +172,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00121.c b/src/modules/module_00121.c index e988a45a6..6307a4311 100644 --- a/src/modules/module_00121.c +++ b/src/modules/module_00121.c @@ -173,6 +173,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00122.c b/src/modules/module_00122.c index c806a2055..ea9c8574f 100644 --- a/src/modules/module_00122.c +++ b/src/modules/module_00122.c @@ -153,6 +153,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00124.c b/src/modules/module_00124.c index ccdfe4e63..723165ee9 100644 --- a/src/modules/module_00124.c +++ b/src/modules/module_00124.c @@ -172,6 +172,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00125.c b/src/modules/module_00125.c index b865e087a..53ce3a8d8 100644 --- a/src/modules/module_00125.c +++ b/src/modules/module_00125.c @@ -155,6 +155,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00130.c b/src/modules/module_00130.c index d071fdc94..32ee6ae02 100644 --- a/src/modules/module_00130.c +++ b/src/modules/module_00130.c @@ -173,6 +173,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00131.c b/src/modules/module_00131.c index 26eae96f9..381634701 100644 --- a/src/modules/module_00131.c +++ b/src/modules/module_00131.c @@ -169,6 +169,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00132.c b/src/modules/module_00132.c index ab05701cb..e30f2bba4 100644 --- a/src/modules/module_00132.c +++ b/src/modules/module_00132.c @@ -163,6 +163,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00133.c b/src/modules/module_00133.c index ecef6b61f..925701f3b 100644 --- a/src/modules/module_00133.c +++ b/src/modules/module_00133.c @@ -145,6 +145,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00140.c b/src/modules/module_00140.c index bfded211a..abf65ff12 100644 --- a/src/modules/module_00140.c +++ b/src/modules/module_00140.c @@ -173,6 +173,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00141.c b/src/modules/module_00141.c index 6a356562f..d78a2a2c2 100644 --- a/src/modules/module_00141.c +++ b/src/modules/module_00141.c @@ -179,6 +179,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00150.c b/src/modules/module_00150.c index 9df2e605c..74c00d8c5 100644 --- a/src/modules/module_00150.c +++ b/src/modules/module_00150.c @@ -150,6 +150,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00160.c b/src/modules/module_00160.c index ab82bed03..466f97d77 100644 --- a/src/modules/module_00160.c +++ b/src/modules/module_00160.c @@ -150,6 +150,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00170.c b/src/modules/module_00170.c index ae08beca6..cd973e8a4 100644 --- a/src/modules/module_00170.c +++ b/src/modules/module_00170.c @@ -147,6 +147,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00200.c b/src/modules/module_00200.c index e2bd7c8f4..4eeffc1e5 100644 --- a/src/modules/module_00200.c +++ b/src/modules/module_00200.c @@ -114,6 +114,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00300.c b/src/modules/module_00300.c index db4731a85..d4369553e 100644 --- a/src/modules/module_00300.c +++ b/src/modules/module_00300.c @@ -145,6 +145,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00400.c b/src/modules/module_00400.c index 23dc5c4c4..3e30912a5 100644 --- a/src/modules/module_00400.c +++ b/src/modules/module_00400.c @@ -242,6 +242,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00500.c b/src/modules/module_00500.c index dad794f1b..108d08c45 100644 --- a/src/modules/module_00500.c +++ b/src/modules/module_00500.c @@ -261,6 +261,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = module_deep_comp_kernel; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00501.c b/src/modules/module_00501.c index f31985406..ef20df5a9 100644 --- a/src/modules/module_00501.c +++ b/src/modules/module_00501.c @@ -335,6 +335,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00600.c b/src/modules/module_00600.c index 9165bb744..d9d3831ea 100644 --- a/src/modules/module_00600.c +++ b/src/modules/module_00600.c @@ -120,6 +120,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00610.c b/src/modules/module_00610.c index 05f5074dc..4127aa481 100644 --- a/src/modules/module_00610.c +++ b/src/modules/module_00610.c @@ -154,6 +154,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00620.c b/src/modules/module_00620.c index fc56fadb6..e15777a66 100644 --- a/src/modules/module_00620.c +++ b/src/modules/module_00620.c @@ -154,6 +154,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_00900.c b/src/modules/module_00900.c index 8e007962a..0ff85f3ae 100644 --- a/src/modules/module_00900.c +++ b/src/modules/module_00900.c @@ -130,6 +130,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_01000.c b/src/modules/module_01000.c index 7662af81b..c0a4078f3 100644 --- a/src/modules/module_01000.c +++ b/src/modules/module_01000.c @@ -133,6 +133,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_01100.c b/src/modules/module_01100.c index d514c311e..ddd4948c9 100644 --- a/src/modules/module_01100.c +++ b/src/modules/module_01100.c @@ -157,6 +157,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_01300.c b/src/modules/module_01300.c index 149fd39ad..b50a0e99c 100644 --- a/src/modules/module_01300.c +++ b/src/modules/module_01300.c @@ -160,6 +160,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_01400.c b/src/modules/module_01400.c index ab002efbe..8b74d4ee0 100644 --- a/src/modules/module_01400.c +++ b/src/modules/module_01400.c @@ -167,6 +167,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_01410.c b/src/modules/module_01410.c index f2f763bfe..c95e4aeed 100644 --- a/src/modules/module_01410.c +++ b/src/modules/module_01410.c @@ -193,6 +193,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_01411.c b/src/modules/module_01411.c index 63d8bde69..35f352e8b 100644 --- a/src/modules/module_01411.c +++ b/src/modules/module_01411.c @@ -190,6 +190,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_01420.c b/src/modules/module_01420.c index 795bd254f..01d8a649b 100644 --- a/src/modules/module_01420.c +++ b/src/modules/module_01420.c @@ -193,6 +193,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_01421.c b/src/modules/module_01421.c index 22cda42c1..def451112 100644 --- a/src/modules/module_01421.c +++ b/src/modules/module_01421.c @@ -169,6 +169,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_01430.c b/src/modules/module_01430.c index 650a7ec92..38277bbff 100644 --- a/src/modules/module_01430.c +++ b/src/modules/module_01430.c @@ -194,6 +194,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_01440.c b/src/modules/module_01440.c index 4dd8fb3c6..67b88bd65 100644 --- a/src/modules/module_01440.c +++ b/src/modules/module_01440.c @@ -194,6 +194,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_01441.c b/src/modules/module_01441.c index 89ff454d6..cd6757780 100644 --- a/src/modules/module_01441.c +++ b/src/modules/module_01441.c @@ -194,6 +194,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_01450.c b/src/modules/module_01450.c index b909b0b70..cd0f541df 100644 --- a/src/modules/module_01450.c +++ b/src/modules/module_01450.c @@ -164,6 +164,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_01460.c b/src/modules/module_01460.c index 08937aeb2..7b4d28c7d 100644 --- a/src/modules/module_01460.c +++ b/src/modules/module_01460.c @@ -196,6 +196,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_01470.c b/src/modules/module_01470.c index 07d3b5bee..53592fed6 100644 --- a/src/modules/module_01470.c +++ b/src/modules/module_01470.c @@ -168,6 +168,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_01500.c b/src/modules/module_01500.c index 04992ff81..29c652099 100644 --- a/src/modules/module_01500.c +++ b/src/modules/module_01500.c @@ -250,6 +250,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_01600.c b/src/modules/module_01600.c index fd2698d9d..197dbd1ba 100644 --- a/src/modules/module_01600.c +++ b/src/modules/module_01600.c @@ -255,6 +255,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_01700.c b/src/modules/module_01700.c index 66398ad54..a17a2cb6b 100644 --- a/src/modules/module_01700.c +++ b/src/modules/module_01700.c @@ -200,6 +200,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_01710.c b/src/modules/module_01710.c index 870bc22ef..93d51c731 100644 --- a/src/modules/module_01710.c +++ b/src/modules/module_01710.c @@ -225,6 +225,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_01711.c b/src/modules/module_01711.c index 7d5f1b112..8afc9a83e 100644 --- a/src/modules/module_01711.c +++ b/src/modules/module_01711.c @@ -222,6 +222,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_01720.c b/src/modules/module_01720.c index 01b2571ee..70bcc1d93 100644 --- a/src/modules/module_01720.c +++ b/src/modules/module_01720.c @@ -225,6 +225,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_01722.c b/src/modules/module_01722.c index 9da97c101..05c8e6b34 100644 --- a/src/modules/module_01722.c +++ b/src/modules/module_01722.c @@ -203,6 +203,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_01730.c b/src/modules/module_01730.c index 0f9d1632b..1e0561669 100644 --- a/src/modules/module_01730.c +++ b/src/modules/module_01730.c @@ -226,6 +226,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_01731.c b/src/modules/module_01731.c index a150b407d..65a259dbe 100644 --- a/src/modules/module_01731.c +++ b/src/modules/module_01731.c @@ -213,6 +213,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_01740.c b/src/modules/module_01740.c index c45cb2cdf..36b653c6d 100644 --- a/src/modules/module_01740.c +++ b/src/modules/module_01740.c @@ -226,6 +226,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_01750.c b/src/modules/module_01750.c index e2eaa5382..9563fc997 100644 --- a/src/modules/module_01750.c +++ b/src/modules/module_01750.c @@ -165,6 +165,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_01760.c b/src/modules/module_01760.c index b2bff2f12..349ea045b 100644 --- a/src/modules/module_01760.c +++ b/src/modules/module_01760.c @@ -166,6 +166,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_01770.c b/src/modules/module_01770.c index 799f0d71f..c42574c1a 100644 --- a/src/modules/module_01770.c +++ b/src/modules/module_01770.c @@ -183,6 +183,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_01800.c b/src/modules/module_01800.c index 2c9be27b4..3e47ca1b5 100644 --- a/src/modules/module_01800.c +++ b/src/modules/module_01800.c @@ -456,12 +456,6 @@ char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAY return jit_build_options; } - // HIP - if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD_USE_HIP) - { - hc_asprintf (&jit_build_options, "-fno-unroll-loops"); - } - // ROCM if ((device_param->opencl_device_vendor_id == VENDOR_ID_AMD) && (device_param->has_vperm == true)) { @@ -576,6 +570,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_02000.c b/src/modules/module_02000.c index 6df5bff06..aa4110daf 100644 --- a/src/modules/module_02000.c +++ b/src/modules/module_02000.c @@ -70,6 +70,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_02100.c b/src/modules/module_02100.c index 34b407cd6..a5d69390f 100644 --- a/src/modules/module_02100.c +++ b/src/modules/module_02100.c @@ -184,6 +184,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_02400.c b/src/modules/module_02400.c index 1856a6f1d..5932bfea3 100644 --- a/src/modules/module_02400.c +++ b/src/modules/module_02400.c @@ -175,6 +175,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_02410.c b/src/modules/module_02410.c index e7aa402b8..10195f701 100644 --- a/src/modules/module_02410.c +++ b/src/modules/module_02410.c @@ -212,6 +212,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_02500.c b/src/modules/module_02500.c index 95e0c8713..e0ffc746d 100644 --- a/src/modules/module_02500.c +++ b/src/modules/module_02500.c @@ -912,6 +912,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = module_deep_comp_kernel; module_ctx->module_deprecated_notice = module_deprecated_notice; diff --git a/src/modules/module_02501.c b/src/modules/module_02501.c index 3b987cee8..458724712 100644 --- a/src/modules/module_02501.c +++ b/src/modules/module_02501.c @@ -910,6 +910,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = module_deep_comp_kernel; module_ctx->module_deprecated_notice = module_deprecated_notice; diff --git a/src/modules/module_02600.c b/src/modules/module_02600.c index a784dcb79..2d24809d3 100644 --- a/src/modules/module_02600.c +++ b/src/modules/module_02600.c @@ -139,6 +139,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_02611.c b/src/modules/module_02611.c index 096fb3cd8..50c91eb8f 100644 --- a/src/modules/module_02611.c +++ b/src/modules/module_02611.c @@ -153,6 +153,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_02612.c b/src/modules/module_02612.c index 56edc1de8..e4445ca13 100644 --- a/src/modules/module_02612.c +++ b/src/modules/module_02612.c @@ -155,6 +155,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_02630.c b/src/modules/module_02630.c index f1098413d..2cb6f0877 100644 --- a/src/modules/module_02630.c +++ b/src/modules/module_02630.c @@ -156,6 +156,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_02711.c b/src/modules/module_02711.c index e9943538f..11a2495d1 100644 --- a/src/modules/module_02711.c +++ b/src/modules/module_02711.c @@ -137,6 +137,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_02811.c b/src/modules/module_02811.c index 7f9c5fb3a..945878bae 100644 --- a/src/modules/module_02811.c +++ b/src/modules/module_02811.c @@ -167,6 +167,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_03000.c b/src/modules/module_03000.c index 451693052..3bfb28b74 100644 --- a/src/modules/module_03000.c +++ b/src/modules/module_03000.c @@ -224,6 +224,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_03100.c b/src/modules/module_03100.c index af0f98840..f5b77a395 100644 --- a/src/modules/module_03100.c +++ b/src/modules/module_03100.c @@ -135,6 +135,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_03200.c b/src/modules/module_03200.c index 69cd54cf3..633a27037 100644 --- a/src/modules/module_03200.c +++ b/src/modules/module_03200.c @@ -312,6 +312,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_03500.c b/src/modules/module_03500.c index cdca0d157..b6a94471d 100644 --- a/src/modules/module_03500.c +++ b/src/modules/module_03500.c @@ -139,6 +139,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_03610.c b/src/modules/module_03610.c index e93be95ed..413d0776f 100644 --- a/src/modules/module_03610.c +++ b/src/modules/module_03610.c @@ -153,6 +153,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_03710.c b/src/modules/module_03710.c index 787473468..f9c038577 100644 --- a/src/modules/module_03710.c +++ b/src/modules/module_03710.c @@ -152,6 +152,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_03711.c b/src/modules/module_03711.c index ad7fd3a9a..e1f221cfa 100644 --- a/src/modules/module_03711.c +++ b/src/modules/module_03711.c @@ -155,6 +155,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_03730.c b/src/modules/module_03730.c index c5959ad06..746fdff9a 100644 --- a/src/modules/module_03730.c +++ b/src/modules/module_03730.c @@ -207,6 +207,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_03800.c b/src/modules/module_03800.c index a863b7ec0..f80aea247 100644 --- a/src/modules/module_03800.c +++ b/src/modules/module_03800.c @@ -153,6 +153,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_03910.c b/src/modules/module_03910.c index 4aebe37c3..0adb66ef7 100644 --- a/src/modules/module_03910.c +++ b/src/modules/module_03910.c @@ -169,6 +169,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_04010.c b/src/modules/module_04010.c index 0e7e2063e..8a77bc84d 100644 --- a/src/modules/module_04010.c +++ b/src/modules/module_04010.c @@ -152,6 +152,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_04110.c b/src/modules/module_04110.c index 396238751..e364454f8 100644 --- a/src/modules/module_04110.c +++ b/src/modules/module_04110.c @@ -150,6 +150,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_04300.c b/src/modules/module_04300.c index 85d999530..05b1ae98b 100644 --- a/src/modules/module_04300.c +++ b/src/modules/module_04300.c @@ -139,6 +139,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_04400.c b/src/modules/module_04400.c index 6c86306d1..c00f9555c 100644 --- a/src/modules/module_04400.c +++ b/src/modules/module_04400.c @@ -129,6 +129,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_04410.c b/src/modules/module_04410.c index 4a763340a..e7c631a7b 100644 --- a/src/modules/module_04410.c +++ b/src/modules/module_04410.c @@ -152,6 +152,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_04420.c b/src/modules/module_04420.c index 9a2727935..c2dee200b 100644 --- a/src/modules/module_04420.c +++ b/src/modules/module_04420.c @@ -151,6 +151,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_04430.c b/src/modules/module_04430.c index 52eae5dea..e9acfe3f2 100644 --- a/src/modules/module_04430.c +++ b/src/modules/module_04430.c @@ -151,6 +151,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_04500.c b/src/modules/module_04500.c index ad98eb05d..7973d962d 100644 --- a/src/modules/module_04500.c +++ b/src/modules/module_04500.c @@ -144,6 +144,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_04510.c b/src/modules/module_04510.c index 6659b478d..b3e8cb224 100644 --- a/src/modules/module_04510.c +++ b/src/modules/module_04510.c @@ -182,6 +182,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_04520.c b/src/modules/module_04520.c index 3c0ff2eb5..5a92a0dc0 100644 --- a/src/modules/module_04520.c +++ b/src/modules/module_04520.c @@ -152,6 +152,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_04521.c b/src/modules/module_04521.c index 3e0f8abe8..ce8e3b859 100644 --- a/src/modules/module_04521.c +++ b/src/modules/module_04521.c @@ -143,6 +143,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_04522.c b/src/modules/module_04522.c index 5423f86cc..fc8ce061e 100644 --- a/src/modules/module_04522.c +++ b/src/modules/module_04522.c @@ -143,6 +143,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_04700.c b/src/modules/module_04700.c index 90b1f0f18..1b510503f 100644 --- a/src/modules/module_04700.c +++ b/src/modules/module_04700.c @@ -146,6 +146,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_04710.c b/src/modules/module_04710.c index 6a04380c0..27f47ccc6 100644 --- a/src/modules/module_04710.c +++ b/src/modules/module_04710.c @@ -182,6 +182,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_04711.c b/src/modules/module_04711.c index 1e1bfdcc0..bebcb9fda 100644 --- a/src/modules/module_04711.c +++ b/src/modules/module_04711.c @@ -183,6 +183,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_04800.c b/src/modules/module_04800.c index d65124938..05a3b11e3 100644 --- a/src/modules/module_04800.c +++ b/src/modules/module_04800.c @@ -150,6 +150,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_04900.c b/src/modules/module_04900.c index 02c7a2ca7..b82b5c8ee 100644 --- a/src/modules/module_04900.c +++ b/src/modules/module_04900.c @@ -167,6 +167,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_05000.c b/src/modules/module_05000.c index 85c5c9e87..8d2cb7f05 100644 --- a/src/modules/module_05000.c +++ b/src/modules/module_05000.c @@ -167,6 +167,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_05100.c b/src/modules/module_05100.c index d16ae19d6..a8c3800c3 100644 --- a/src/modules/module_05100.c +++ b/src/modules/module_05100.c @@ -107,6 +107,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_05200.c b/src/modules/module_05200.c index 47fb863cb..fae79c537 100644 --- a/src/modules/module_05200.c +++ b/src/modules/module_05200.c @@ -192,6 +192,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_05300.c b/src/modules/module_05300.c index ea10850b2..036043f57 100644 --- a/src/modules/module_05300.c +++ b/src/modules/module_05300.c @@ -248,6 +248,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_05400.c b/src/modules/module_05400.c index f6470f0c0..e5df606cf 100644 --- a/src/modules/module_05400.c +++ b/src/modules/module_05400.c @@ -255,6 +255,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_05500.c b/src/modules/module_05500.c index 9fc1de726..ffb3b3ba5 100644 --- a/src/modules/module_05500.c +++ b/src/modules/module_05500.c @@ -410,6 +410,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_05600.c b/src/modules/module_05600.c index a40ec4e64..bb347e372 100644 --- a/src/modules/module_05600.c +++ b/src/modules/module_05600.c @@ -305,6 +305,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_05700.c b/src/modules/module_05700.c index e981eeea1..78ed12a1f 100644 --- a/src/modules/module_05700.c +++ b/src/modules/module_05700.c @@ -156,6 +156,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_05800.c b/src/modules/module_05800.c index b646d0f89..9595ab988 100644 --- a/src/modules/module_05800.c +++ b/src/modules/module_05800.c @@ -168,6 +168,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_06000.c b/src/modules/module_06000.c index 6c7b5ffec..81aba5f37 100644 --- a/src/modules/module_06000.c +++ b/src/modules/module_06000.c @@ -110,6 +110,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_06050.c b/src/modules/module_06050.c index 7cb55504c..e092facd7 100644 --- a/src/modules/module_06050.c +++ b/src/modules/module_06050.c @@ -138,6 +138,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_06060.c b/src/modules/module_06060.c index 5407e642e..c9009589f 100644 --- a/src/modules/module_06060.c +++ b/src/modules/module_06060.c @@ -138,6 +138,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_06100.c b/src/modules/module_06100.c index 339a933fc..2791501ea 100644 --- a/src/modules/module_06100.c +++ b/src/modules/module_06100.c @@ -51,6 +51,11 @@ char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAY hc_asprintf (&jit_build_options, "-D FORCE_DISABLE_SHM"); } + if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD_USE_HIP) + { + hc_asprintf (&jit_build_options, "-D FORCE_DISABLE_SHM"); + } + return jit_build_options; } @@ -189,6 +194,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_06211.c b/src/modules/module_06211.c index 7fc1d3761..c444626e5 100644 --- a/src/modules/module_06211.c +++ b/src/modules/module_06211.c @@ -258,6 +258,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_06212.c b/src/modules/module_06212.c index d6b5d3e59..7ea785b75 100644 --- a/src/modules/module_06212.c +++ b/src/modules/module_06212.c @@ -258,6 +258,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_06213.c b/src/modules/module_06213.c index 0a7cb01d7..690a3faec 100644 --- a/src/modules/module_06213.c +++ b/src/modules/module_06213.c @@ -264,6 +264,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_06221.c b/src/modules/module_06221.c index 1948ccd46..4a3b6813f 100644 --- a/src/modules/module_06221.c +++ b/src/modules/module_06221.c @@ -269,6 +269,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_06222.c b/src/modules/module_06222.c index c46b7d2a7..9017b9518 100644 --- a/src/modules/module_06222.c +++ b/src/modules/module_06222.c @@ -269,6 +269,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_06223.c b/src/modules/module_06223.c index a87928a2d..0d5863ee6 100644 --- a/src/modules/module_06223.c +++ b/src/modules/module_06223.c @@ -272,6 +272,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_06231.c b/src/modules/module_06231.c index e9835cdd2..72525f3a0 100644 --- a/src/modules/module_06231.c +++ b/src/modules/module_06231.c @@ -274,6 +274,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_06232.c b/src/modules/module_06232.c index 65c50597c..962f3541c 100644 --- a/src/modules/module_06232.c +++ b/src/modules/module_06232.c @@ -274,6 +274,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_06233.c b/src/modules/module_06233.c index 3017e8093..4dbf860a8 100644 --- a/src/modules/module_06233.c +++ b/src/modules/module_06233.c @@ -274,6 +274,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_06241.c b/src/modules/module_06241.c index f202cbc37..8ff907219 100644 --- a/src/modules/module_06241.c +++ b/src/modules/module_06241.c @@ -273,6 +273,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_06242.c b/src/modules/module_06242.c index d7687337a..2242fef5f 100644 --- a/src/modules/module_06242.c +++ b/src/modules/module_06242.c @@ -273,6 +273,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_06243.c b/src/modules/module_06243.c index 005c4db9f..6f8945a6c 100644 --- a/src/modules/module_06243.c +++ b/src/modules/module_06243.c @@ -273,6 +273,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_06300.c b/src/modules/module_06300.c index 0f6ed5bc0..bf8c1e37f 100644 --- a/src/modules/module_06300.c +++ b/src/modules/module_06300.c @@ -246,6 +246,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_06400.c b/src/modules/module_06400.c index 79e825509..b7ac9d87f 100644 --- a/src/modules/module_06400.c +++ b/src/modules/module_06400.c @@ -370,6 +370,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_06500.c b/src/modules/module_06500.c index 2407f87da..3fb9853dd 100644 --- a/src/modules/module_06500.c +++ b/src/modules/module_06500.c @@ -560,6 +560,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_06600.c b/src/modules/module_06600.c index f7bea8cdd..a78540944 100644 --- a/src/modules/module_06600.c +++ b/src/modules/module_06600.c @@ -220,6 +220,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_06700.c b/src/modules/module_06700.c index 3305f1502..717908cf5 100644 --- a/src/modules/module_06700.c +++ b/src/modules/module_06700.c @@ -296,6 +296,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_06800.c b/src/modules/module_06800.c index 6439f98f3..215f26992 100644 --- a/src/modules/module_06800.c +++ b/src/modules/module_06800.c @@ -218,6 +218,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_06900.c b/src/modules/module_06900.c index eff993986..537f9df8f 100644 --- a/src/modules/module_06900.c +++ b/src/modules/module_06900.c @@ -121,6 +121,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_07000.c b/src/modules/module_07000.c index 99fb188cc..d11968a80 100644 --- a/src/modules/module_07000.c +++ b/src/modules/module_07000.c @@ -194,6 +194,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_07100.c b/src/modules/module_07100.c index d8bdba34f..51bd7c548 100644 --- a/src/modules/module_07100.c +++ b/src/modules/module_07100.c @@ -375,6 +375,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_07200.c b/src/modules/module_07200.c index f69f26e75..c54f4b53d 100644 --- a/src/modules/module_07200.c +++ b/src/modules/module_07200.c @@ -232,6 +232,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_07300.c b/src/modules/module_07300.c index 00bff337a..42efc5721 100644 --- a/src/modules/module_07300.c +++ b/src/modules/module_07300.c @@ -171,6 +171,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_07350.c b/src/modules/module_07350.c index fd79d31d1..ff59537cf 100644 --- a/src/modules/module_07350.c +++ b/src/modules/module_07350.c @@ -129,6 +129,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_07400.c b/src/modules/module_07400.c index 251aec4f8..5584e0482 100644 --- a/src/modules/module_07400.c +++ b/src/modules/module_07400.c @@ -376,6 +376,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = module_deep_comp_kernel; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_07401.c b/src/modules/module_07401.c index ae5fdd434..633c5dd47 100644 --- a/src/modules/module_07401.c +++ b/src/modules/module_07401.c @@ -412,6 +412,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_07500.c b/src/modules/module_07500.c index a9331d876..bca6a02d3 100644 --- a/src/modules/module_07500.c +++ b/src/modules/module_07500.c @@ -273,6 +273,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_07700.c b/src/modules/module_07700.c index af5dd78d6..2642a0bb7 100644 --- a/src/modules/module_07700.c +++ b/src/modules/module_07700.c @@ -142,6 +142,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_07701.c b/src/modules/module_07701.c index 8ca22e4c3..bc852639b 100644 --- a/src/modules/module_07701.c +++ b/src/modules/module_07701.c @@ -134,6 +134,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_07800.c b/src/modules/module_07800.c index 8aa784460..ce94bead4 100644 --- a/src/modules/module_07800.c +++ b/src/modules/module_07800.c @@ -156,6 +156,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_07801.c b/src/modules/module_07801.c index 4caf03e84..17f8777d4 100644 --- a/src/modules/module_07801.c +++ b/src/modules/module_07801.c @@ -156,6 +156,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_07900.c b/src/modules/module_07900.c index 68a75ec58..02b9fd02d 100644 --- a/src/modules/module_07900.c +++ b/src/modules/module_07900.c @@ -458,6 +458,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_08000.c b/src/modules/module_08000.c index 8b6c978a3..ba0913cb2 100644 --- a/src/modules/module_08000.c +++ b/src/modules/module_08000.c @@ -192,6 +192,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_08100.c b/src/modules/module_08100.c index 14459192a..8974f004b 100644 --- a/src/modules/module_08100.c +++ b/src/modules/module_08100.c @@ -165,6 +165,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_08200.c b/src/modules/module_08200.c index 1aeb647d0..a91356024 100644 --- a/src/modules/module_08200.c +++ b/src/modules/module_08200.c @@ -283,6 +283,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_08300.c b/src/modules/module_08300.c index 74bb19823..c499667ae 100644 --- a/src/modules/module_08300.c +++ b/src/modules/module_08300.c @@ -212,6 +212,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_08400.c b/src/modules/module_08400.c index 199177f2c..455243297 100644 --- a/src/modules/module_08400.c +++ b/src/modules/module_08400.c @@ -142,6 +142,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_08500.c b/src/modules/module_08500.c index 30984cb2e..ecaf87f4e 100644 --- a/src/modules/module_08500.c +++ b/src/modules/module_08500.c @@ -209,6 +209,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_08600.c b/src/modules/module_08600.c index 498e3f378..f1e83a17e 100644 --- a/src/modules/module_08600.c +++ b/src/modules/module_08600.c @@ -106,6 +106,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_08700.c b/src/modules/module_08700.c index 6b3b2970e..8351a9dc0 100644 --- a/src/modules/module_08700.c +++ b/src/modules/module_08700.c @@ -62,19 +62,6 @@ u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED con return pw_max; } -char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - char *jit_build_options = NULL; - - // HIP - if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD_USE_HIP) - { - hc_asprintf (&jit_build_options, "-fno-unroll-loops"); - } - - return jit_build_options; -} - int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len) { u32 *digest = (u32 *) digest_buf; @@ -162,6 +149,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; @@ -200,7 +189,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = module_jit_build_options; + module_ctx->module_jit_build_options = MODULE_DEFAULT; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; diff --git a/src/modules/module_08800.c b/src/modules/module_08800.c index 6b78e7f16..575c912fe 100644 --- a/src/modules/module_08800.c +++ b/src/modules/module_08800.c @@ -214,6 +214,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_08900.c b/src/modules/module_08900.c index 6f996a3b0..35a64484d 100644 --- a/src/modules/module_08900.c +++ b/src/modules/module_08900.c @@ -392,6 +392,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_09000.c b/src/modules/module_09000.c index 4ed3b41ff..5e0f66941 100644 --- a/src/modules/module_09000.c +++ b/src/modules/module_09000.c @@ -226,6 +226,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_09100.c b/src/modules/module_09100.c index b0378756a..c0195f136 100644 --- a/src/modules/module_09100.c +++ b/src/modules/module_09100.c @@ -200,6 +200,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_09200.c b/src/modules/module_09200.c index 495dea9fd..75266262d 100644 --- a/src/modules/module_09200.c +++ b/src/modules/module_09200.c @@ -213,6 +213,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_09300.c b/src/modules/module_09300.c index b4e06bef9..c2118e202 100644 --- a/src/modules/module_09300.c +++ b/src/modules/module_09300.c @@ -353,6 +353,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_09400.c b/src/modules/module_09400.c index a5961f4fb..756607efa 100644 --- a/src/modules/module_09400.c +++ b/src/modules/module_09400.c @@ -256,6 +256,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_09500.c b/src/modules/module_09500.c index a9b179889..c91ae9511 100644 --- a/src/modules/module_09500.c +++ b/src/modules/module_09500.c @@ -266,6 +266,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = module_deep_comp_kernel; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_09600.c b/src/modules/module_09600.c index 988908828..d6b4b589d 100644 --- a/src/modules/module_09600.c +++ b/src/modules/module_09600.c @@ -317,6 +317,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = module_deep_comp_kernel; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_09700.c b/src/modules/module_09700.c index 1bd16405f..8050babb7 100644 --- a/src/modules/module_09700.c +++ b/src/modules/module_09700.c @@ -258,6 +258,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_09710.c b/src/modules/module_09710.c index 79bb7587b..f4520d3d3 100644 --- a/src/modules/module_09710.c +++ b/src/modules/module_09710.c @@ -278,6 +278,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_09720.c b/src/modules/module_09720.c index ee1b6c6e8..daf23c6ea 100644 --- a/src/modules/module_09720.c +++ b/src/modules/module_09720.c @@ -273,6 +273,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_09800.c b/src/modules/module_09800.c index 193531626..11c5f8ef1 100644 --- a/src/modules/module_09800.c +++ b/src/modules/module_09800.c @@ -316,6 +316,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_09810.c b/src/modules/module_09810.c index 33dd15186..433616cf1 100644 --- a/src/modules/module_09810.c +++ b/src/modules/module_09810.c @@ -335,6 +335,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_09820.c b/src/modules/module_09820.c index f356fcbcb..99314896d 100644 --- a/src/modules/module_09820.c +++ b/src/modules/module_09820.c @@ -338,6 +338,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_09900.c b/src/modules/module_09900.c index 3d845f55a..9e772ea46 100644 --- a/src/modules/module_09900.c +++ b/src/modules/module_09900.c @@ -119,6 +119,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_10000.c b/src/modules/module_10000.c index 47901e03c..33fa062c0 100644 --- a/src/modules/module_10000.c +++ b/src/modules/module_10000.c @@ -222,6 +222,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_10100.c b/src/modules/module_10100.c index 096b8eba2..149cc5bf2 100644 --- a/src/modules/module_10100.c +++ b/src/modules/module_10100.c @@ -137,6 +137,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_10200.c b/src/modules/module_10200.c index 8c743a518..502984264 100644 --- a/src/modules/module_10200.c +++ b/src/modules/module_10200.c @@ -183,6 +183,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_10300.c b/src/modules/module_10300.c index 85937d115..cc83dc1d5 100644 --- a/src/modules/module_10300.c +++ b/src/modules/module_10300.c @@ -185,6 +185,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_10400.c b/src/modules/module_10400.c index c53cac8db..0f5ecb970 100644 --- a/src/modules/module_10400.c +++ b/src/modules/module_10400.c @@ -355,6 +355,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_10410.c b/src/modules/module_10410.c index bf6ec3723..25f3417de 100644 --- a/src/modules/module_10410.c +++ b/src/modules/module_10410.c @@ -376,6 +376,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_10420.c b/src/modules/module_10420.c index 14054efc7..af90f250e 100644 --- a/src/modules/module_10420.c +++ b/src/modules/module_10420.c @@ -373,6 +373,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_10500.c b/src/modules/module_10500.c index 811df922f..7c746ef10 100644 --- a/src/modules/module_10500.c +++ b/src/modules/module_10500.c @@ -486,6 +486,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_10600.c b/src/modules/module_10600.c index 6cd76cbbd..66506fb1d 100644 --- a/src/modules/module_10600.c +++ b/src/modules/module_10600.c @@ -291,6 +291,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_10700.c b/src/modules/module_10700.c index a5de11366..3c5f332c6 100644 --- a/src/modules/module_10700.c +++ b/src/modules/module_10700.c @@ -160,16 +160,6 @@ char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAY } } - if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD_USE_HIP) - { - if ((hashconfig->opti_type & OPTI_TYPE_OPTIMIZED_KERNEL) == 1) - { - // this is a workaround to avoid a compile time of over an hour (and then to not work) on ROCM in pure kernel mode - - hc_asprintf (&jit_build_options, "-D NO_INLINE"); - } - } - return jit_build_options; } @@ -357,6 +347,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_10800.c b/src/modules/module_10800.c index d121df35b..61258f778 100644 --- a/src/modules/module_10800.c +++ b/src/modules/module_10800.c @@ -211,6 +211,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_10810.c b/src/modules/module_10810.c index a21fcdb56..3c31bbdcf 100644 --- a/src/modules/module_10810.c +++ b/src/modules/module_10810.c @@ -223,6 +223,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_10820.c b/src/modules/module_10820.c index 97dd5b775..e4379bf54 100644 --- a/src/modules/module_10820.c +++ b/src/modules/module_10820.c @@ -223,6 +223,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_10830.c b/src/modules/module_10830.c index 6e3831d78..5e71c75ff 100644 --- a/src/modules/module_10830.c +++ b/src/modules/module_10830.c @@ -224,6 +224,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_10840.c b/src/modules/module_10840.c index 77e070dc0..d75d03cc3 100644 --- a/src/modules/module_10840.c +++ b/src/modules/module_10840.c @@ -224,6 +224,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_10870.c b/src/modules/module_10870.c index 3e2e4bfdd..c60b34586 100644 --- a/src/modules/module_10870.c +++ b/src/modules/module_10870.c @@ -198,6 +198,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_10900.c b/src/modules/module_10900.c index 75385f023..c1bf6b92f 100644 --- a/src/modules/module_10900.c +++ b/src/modules/module_10900.c @@ -228,6 +228,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_10901.c b/src/modules/module_10901.c index b0444bb8d..a5c2a2fd8 100644 --- a/src/modules/module_10901.c +++ b/src/modules/module_10901.c @@ -203,6 +203,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_11000.c b/src/modules/module_11000.c index 60ab88df0..536e30e73 100644 --- a/src/modules/module_11000.c +++ b/src/modules/module_11000.c @@ -141,6 +141,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_11100.c b/src/modules/module_11100.c index c95bd6893..a6f20dc6c 100644 --- a/src/modules/module_11100.c +++ b/src/modules/module_11100.c @@ -176,6 +176,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_11200.c b/src/modules/module_11200.c index 938b179b1..c899f7eb1 100644 --- a/src/modules/module_11200.c +++ b/src/modules/module_11200.c @@ -140,6 +140,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_11300.c b/src/modules/module_11300.c index 6ece4048a..5c7920e7a 100644 --- a/src/modules/module_11300.c +++ b/src/modules/module_11300.c @@ -286,6 +286,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = module_deep_comp_kernel; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_11400.c b/src/modules/module_11400.c index e5264d053..d3540797e 100644 --- a/src/modules/module_11400.c +++ b/src/modules/module_11400.c @@ -432,6 +432,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_11500.c b/src/modules/module_11500.c index fa691a2e2..48c803592 100644 --- a/src/modules/module_11500.c +++ b/src/modules/module_11500.c @@ -115,6 +115,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_11600.c b/src/modules/module_11600.c index 7205f6b7e..f2b848141 100644 --- a/src/modules/module_11600.c +++ b/src/modules/module_11600.c @@ -791,6 +791,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_11700.c b/src/modules/module_11700.c index 55b1bd13b..9de690ddc 100644 --- a/src/modules/module_11700.c +++ b/src/modules/module_11700.c @@ -142,6 +142,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_11750.c b/src/modules/module_11750.c index bf49d3f9e..1e3b779a7 100644 --- a/src/modules/module_11750.c +++ b/src/modules/module_11750.c @@ -168,6 +168,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_11760.c b/src/modules/module_11760.c index b9d0c19a2..25e931699 100644 --- a/src/modules/module_11760.c +++ b/src/modules/module_11760.c @@ -168,6 +168,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_11800.c b/src/modules/module_11800.c index 36fa205ce..d06f91bdc 100644 --- a/src/modules/module_11800.c +++ b/src/modules/module_11800.c @@ -166,6 +166,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_11850.c b/src/modules/module_11850.c index 4e952013a..ca04fbfaa 100644 --- a/src/modules/module_11850.c +++ b/src/modules/module_11850.c @@ -192,6 +192,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_11860.c b/src/modules/module_11860.c index 3147c7a8c..835d5819f 100644 --- a/src/modules/module_11860.c +++ b/src/modules/module_11860.c @@ -192,6 +192,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_11900.c b/src/modules/module_11900.c index 6e85beb0d..83b2c769a 100644 --- a/src/modules/module_11900.c +++ b/src/modules/module_11900.c @@ -192,6 +192,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_12000.c b/src/modules/module_12000.c index 733f161b6..32b26c261 100644 --- a/src/modules/module_12000.c +++ b/src/modules/module_12000.c @@ -197,6 +197,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_12001.c b/src/modules/module_12001.c index e2be237fe..300068589 100644 --- a/src/modules/module_12001.c +++ b/src/modules/module_12001.c @@ -170,6 +170,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_12100.c b/src/modules/module_12100.c index 556476236..d7dc28ddd 100644 --- a/src/modules/module_12100.c +++ b/src/modules/module_12100.c @@ -202,6 +202,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_12200.c b/src/modules/module_12200.c index c731fc89f..14868bad6 100644 --- a/src/modules/module_12200.c +++ b/src/modules/module_12200.c @@ -206,6 +206,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_12300.c b/src/modules/module_12300.c index e07b42b17..6915855fd 100644 --- a/src/modules/module_12300.c +++ b/src/modules/module_12300.c @@ -197,6 +197,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_12400.c b/src/modules/module_12400.c index e84420685..04ec8b03c 100644 --- a/src/modules/module_12400.c +++ b/src/modules/module_12400.c @@ -222,6 +222,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_12500.c b/src/modules/module_12500.c index f0aa23ede..b46e19ab0 100644 --- a/src/modules/module_12500.c +++ b/src/modules/module_12500.c @@ -220,6 +220,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_12600.c b/src/modules/module_12600.c index 27606ceeb..15ba04535 100644 --- a/src/modules/module_12600.c +++ b/src/modules/module_12600.c @@ -222,6 +222,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_12700.c b/src/modules/module_12700.c index f7af4f4d1..1d885ade2 100644 --- a/src/modules/module_12700.c +++ b/src/modules/module_12700.c @@ -153,6 +153,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_12800.c b/src/modules/module_12800.c index 066ed8a1d..848946cbe 100644 --- a/src/modules/module_12800.c +++ b/src/modules/module_12800.c @@ -225,6 +225,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_12900.c b/src/modules/module_12900.c index 2a09a0652..b77312145 100644 --- a/src/modules/module_12900.c +++ b/src/modules/module_12900.c @@ -233,6 +233,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13000.c b/src/modules/module_13000.c index a0f178372..7a4b4748b 100644 --- a/src/modules/module_13000.c +++ b/src/modules/module_13000.c @@ -275,6 +275,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13100.c b/src/modules/module_13100.c index 3fa5c30bb..6d18aa116 100644 --- a/src/modules/module_13100.c +++ b/src/modules/module_13100.c @@ -374,6 +374,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13200.c b/src/modules/module_13200.c index 22d201208..9f87b6a62 100644 --- a/src/modules/module_13200.c +++ b/src/modules/module_13200.c @@ -189,6 +189,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13300.c b/src/modules/module_13300.c index daef383d7..b8c7fb56b 100644 --- a/src/modules/module_13300.c +++ b/src/modules/module_13300.c @@ -117,6 +117,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13400.c b/src/modules/module_13400.c index 8f019d859..c5f9d6faf 100644 --- a/src/modules/module_13400.c +++ b/src/modules/module_13400.c @@ -637,6 +637,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13500.c b/src/modules/module_13500.c index 5f59900df..1079a32a7 100644 --- a/src/modules/module_13500.c +++ b/src/modules/module_13500.c @@ -210,6 +210,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13600.c b/src/modules/module_13600.c index f927d5761..1a419067c 100644 --- a/src/modules/module_13600.c +++ b/src/modules/module_13600.c @@ -411,6 +411,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13711.c b/src/modules/module_13711.c index 05ab89ecc..ff18b6c52 100644 --- a/src/modules/module_13711.c +++ b/src/modules/module_13711.c @@ -299,6 +299,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13712.c b/src/modules/module_13712.c index ffba232e1..b39eecfe7 100644 --- a/src/modules/module_13712.c +++ b/src/modules/module_13712.c @@ -316,6 +316,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13713.c b/src/modules/module_13713.c index f5aebfe91..d3c8d5fa4 100644 --- a/src/modules/module_13713.c +++ b/src/modules/module_13713.c @@ -316,6 +316,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13721.c b/src/modules/module_13721.c index ea94e290e..67c7dafa9 100644 --- a/src/modules/module_13721.c +++ b/src/modules/module_13721.c @@ -318,6 +318,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13722.c b/src/modules/module_13722.c index 37bd46b06..ec06b5a00 100644 --- a/src/modules/module_13722.c +++ b/src/modules/module_13722.c @@ -324,6 +324,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13723.c b/src/modules/module_13723.c index 5e76c81e8..7ef089514 100644 --- a/src/modules/module_13723.c +++ b/src/modules/module_13723.c @@ -324,6 +324,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13731.c b/src/modules/module_13731.c index 7b0fe41d6..843ea9595 100644 --- a/src/modules/module_13731.c +++ b/src/modules/module_13731.c @@ -307,6 +307,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13732.c b/src/modules/module_13732.c index 6c9c6ea57..0dd660582 100644 --- a/src/modules/module_13732.c +++ b/src/modules/module_13732.c @@ -307,6 +307,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13733.c b/src/modules/module_13733.c index 979884c4b..5cc512263 100644 --- a/src/modules/module_13733.c +++ b/src/modules/module_13733.c @@ -307,6 +307,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13741.c b/src/modules/module_13741.c index e4811633c..7dfb33100 100644 --- a/src/modules/module_13741.c +++ b/src/modules/module_13741.c @@ -301,6 +301,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13742.c b/src/modules/module_13742.c index 9340de8a4..25aa069d2 100644 --- a/src/modules/module_13742.c +++ b/src/modules/module_13742.c @@ -318,6 +318,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13743.c b/src/modules/module_13743.c index 7791c783f..4aa9a36e0 100644 --- a/src/modules/module_13743.c +++ b/src/modules/module_13743.c @@ -318,6 +318,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13751.c b/src/modules/module_13751.c index bad748893..dac31a633 100644 --- a/src/modules/module_13751.c +++ b/src/modules/module_13751.c @@ -335,6 +335,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13752.c b/src/modules/module_13752.c index 60891b7d8..e959a80af 100644 --- a/src/modules/module_13752.c +++ b/src/modules/module_13752.c @@ -335,6 +335,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13753.c b/src/modules/module_13753.c index d3304a48a..277afaf02 100644 --- a/src/modules/module_13753.c +++ b/src/modules/module_13753.c @@ -335,6 +335,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13761.c b/src/modules/module_13761.c index daf567523..e33a693e2 100644 --- a/src/modules/module_13761.c +++ b/src/modules/module_13761.c @@ -337,6 +337,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13762.c b/src/modules/module_13762.c index ccd9e3a1b..0f5f18545 100644 --- a/src/modules/module_13762.c +++ b/src/modules/module_13762.c @@ -337,6 +337,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13763.c b/src/modules/module_13763.c index 3f33c54a2..c9e28d4c7 100644 --- a/src/modules/module_13763.c +++ b/src/modules/module_13763.c @@ -337,6 +337,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13771.c b/src/modules/module_13771.c index 6d5485f6e..74efd072e 100644 --- a/src/modules/module_13771.c +++ b/src/modules/module_13771.c @@ -321,6 +321,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13772.c b/src/modules/module_13772.c index f1b61cf1d..3a990cc06 100644 --- a/src/modules/module_13772.c +++ b/src/modules/module_13772.c @@ -321,6 +321,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13773.c b/src/modules/module_13773.c index d4dd936dd..fd9dd44ff 100644 --- a/src/modules/module_13773.c +++ b/src/modules/module_13773.c @@ -321,6 +321,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13781.c b/src/modules/module_13781.c index b793bcc6e..fcc2ed181 100644 --- a/src/modules/module_13781.c +++ b/src/modules/module_13781.c @@ -323,6 +323,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13782.c b/src/modules/module_13782.c index b1b70a48b..2772e0bcb 100644 --- a/src/modules/module_13782.c +++ b/src/modules/module_13782.c @@ -323,6 +323,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13783.c b/src/modules/module_13783.c index 0b046ea67..8765fc6c8 100644 --- a/src/modules/module_13783.c +++ b/src/modules/module_13783.c @@ -323,6 +323,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13800.c b/src/modules/module_13800.c index 3a73858e3..507600568 100644 --- a/src/modules/module_13800.c +++ b/src/modules/module_13800.c @@ -209,6 +209,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_13900.c b/src/modules/module_13900.c index 9e6713396..20d016cb4 100644 --- a/src/modules/module_13900.c +++ b/src/modules/module_13900.c @@ -159,6 +159,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_14000.c b/src/modules/module_14000.c index 03abf486f..3a5cf6c4f 100644 --- a/src/modules/module_14000.c +++ b/src/modules/module_14000.c @@ -254,6 +254,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_14100.c b/src/modules/module_14100.c index bece404ad..da7a0b40c 100644 --- a/src/modules/module_14100.c +++ b/src/modules/module_14100.c @@ -205,6 +205,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_14400.c b/src/modules/module_14400.c index 7c10075a6..8512337b7 100644 --- a/src/modules/module_14400.c +++ b/src/modules/module_14400.c @@ -148,6 +148,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_14500.c b/src/modules/module_14500.c index c940dc953..3970fac13 100644 --- a/src/modules/module_14500.c +++ b/src/modules/module_14500.c @@ -347,6 +347,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_14600.c b/src/modules/module_14600.c index 6848ca06a..e850e3cc3 100644 --- a/src/modules/module_14600.c +++ b/src/modules/module_14600.c @@ -620,6 +620,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = module_benchmark_salt; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_14700.c b/src/modules/module_14700.c index f71fd99a9..4f29f52b6 100644 --- a/src/modules/module_14700.c +++ b/src/modules/module_14700.c @@ -345,6 +345,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_14800.c b/src/modules/module_14800.c index 2a5f6b33c..9f3c1ca0f 100644 --- a/src/modules/module_14800.c +++ b/src/modules/module_14800.c @@ -383,6 +383,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = module_benchmark_salt; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_14900.c b/src/modules/module_14900.c index 62499126f..7de3dba45 100644 --- a/src/modules/module_14900.c +++ b/src/modules/module_14900.c @@ -126,6 +126,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_15000.c b/src/modules/module_15000.c index b41d51d35..998fc2692 100644 --- a/src/modules/module_15000.c +++ b/src/modules/module_15000.c @@ -227,6 +227,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_15100.c b/src/modules/module_15100.c index e1c27067c..40ee7efbb 100644 --- a/src/modules/module_15100.c +++ b/src/modules/module_15100.c @@ -321,6 +321,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_15200.c b/src/modules/module_15200.c index 91c25f0c3..00b966b8e 100644 --- a/src/modules/module_15200.c +++ b/src/modules/module_15200.c @@ -159,6 +159,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_15300.c b/src/modules/module_15300.c index 650004903..071ce7680 100644 --- a/src/modules/module_15300.c +++ b/src/modules/module_15300.c @@ -398,6 +398,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_15310.c b/src/modules/module_15310.c index 0908be7a1..724034ce9 100644 --- a/src/modules/module_15310.c +++ b/src/modules/module_15310.c @@ -415,6 +415,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = module_benchmark_salt; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_15400.c b/src/modules/module_15400.c index ffcbc1b5a..fac76c8a1 100644 --- a/src/modules/module_15400.c +++ b/src/modules/module_15400.c @@ -216,6 +216,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_15500.c b/src/modules/module_15500.c index b87390fb7..cd8f4639b 100644 --- a/src/modules/module_15500.c +++ b/src/modules/module_15500.c @@ -282,6 +282,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_15600.c b/src/modules/module_15600.c index c06af7f29..1f2b7b9a3 100644 --- a/src/modules/module_15600.c +++ b/src/modules/module_15600.c @@ -273,6 +273,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_15700.c b/src/modules/module_15700.c index 6b8550095..26c381f71 100644 --- a/src/modules/module_15700.c +++ b/src/modules/module_15700.c @@ -452,6 +452,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_15900.c b/src/modules/module_15900.c index 3f3302ea4..42e24b3f1 100644 --- a/src/modules/module_15900.c +++ b/src/modules/module_15900.c @@ -404,6 +404,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_15910.c b/src/modules/module_15910.c index a512a9111..cda606458 100644 --- a/src/modules/module_15910.c +++ b/src/modules/module_15910.c @@ -421,6 +421,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = module_benchmark_salt; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_16000.c b/src/modules/module_16000.c index 0d9536f73..9781e0e72 100644 --- a/src/modules/module_16000.c +++ b/src/modules/module_16000.c @@ -126,6 +126,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_16100.c b/src/modules/module_16100.c index 57b0d5a33..5ad51f65a 100644 --- a/src/modules/module_16100.c +++ b/src/modules/module_16100.c @@ -196,6 +196,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_16200.c b/src/modules/module_16200.c index f3d65d007..e6294a333 100644 --- a/src/modules/module_16200.c +++ b/src/modules/module_16200.c @@ -260,6 +260,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_16300.c b/src/modules/module_16300.c index 1b885e8d3..e11226609 100644 --- a/src/modules/module_16300.c +++ b/src/modules/module_16300.c @@ -290,6 +290,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_16400.c b/src/modules/module_16400.c index eecd9fe3d..3c8ab0504 100644 --- a/src/modules/module_16400.c +++ b/src/modules/module_16400.c @@ -123,6 +123,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_16500.c b/src/modules/module_16500.c index cea9e0a24..a9e9fa1af 100644 --- a/src/modules/module_16500.c +++ b/src/modules/module_16500.c @@ -343,6 +343,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = module_benchmark_salt; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_16600.c b/src/modules/module_16600.c index 47ed037d7..89cecad59 100644 --- a/src/modules/module_16600.c +++ b/src/modules/module_16600.c @@ -192,6 +192,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_16700.c b/src/modules/module_16700.c index 3066b8f0b..9dce98e62 100644 --- a/src/modules/module_16700.c +++ b/src/modules/module_16700.c @@ -232,6 +232,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_16800.c b/src/modules/module_16800.c index 9022b4cfb..22d7efba4 100644 --- a/src/modules/module_16800.c +++ b/src/modules/module_16800.c @@ -520,6 +520,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = module_deep_comp_kernel; module_ctx->module_deprecated_notice = module_deprecated_notice; diff --git a/src/modules/module_16801.c b/src/modules/module_16801.c index 183677ace..2d9132391 100644 --- a/src/modules/module_16801.c +++ b/src/modules/module_16801.c @@ -593,6 +593,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = module_deep_comp_kernel; module_ctx->module_deprecated_notice = module_deprecated_notice; diff --git a/src/modules/module_16900.c b/src/modules/module_16900.c index 3fd5a3d40..443da6007 100644 --- a/src/modules/module_16900.c +++ b/src/modules/module_16900.c @@ -295,6 +295,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_17010.c b/src/modules/module_17010.c index c5b4280b0..6dafe2296 100644 --- a/src/modules/module_17010.c +++ b/src/modules/module_17010.c @@ -336,6 +336,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = module_deep_comp_kernel; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_17020.c b/src/modules/module_17020.c index 624b07242..4f982ebf7 100644 --- a/src/modules/module_17020.c +++ b/src/modules/module_17020.c @@ -355,6 +355,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = module_deep_comp_kernel; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_17030.c b/src/modules/module_17030.c index 52fa74c92..4ebb0a1bf 100644 --- a/src/modules/module_17030.c +++ b/src/modules/module_17030.c @@ -334,6 +334,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = module_deep_comp_kernel; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_17040.c b/src/modules/module_17040.c index dd3661136..693c5bfc1 100644 --- a/src/modules/module_17040.c +++ b/src/modules/module_17040.c @@ -365,6 +365,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = module_deep_comp_kernel; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_17200.c b/src/modules/module_17200.c index d43e8132f..5cde1ed63 100644 --- a/src/modules/module_17200.c +++ b/src/modules/module_17200.c @@ -395,6 +395,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_17210.c b/src/modules/module_17210.c index 307757689..568f75842 100644 --- a/src/modules/module_17210.c +++ b/src/modules/module_17210.c @@ -362,6 +362,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_17220.c b/src/modules/module_17220.c index 1bc26bfd2..8131b1ea9 100644 --- a/src/modules/module_17220.c +++ b/src/modules/module_17220.c @@ -398,6 +398,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_17225.c b/src/modules/module_17225.c index 8ab15f05b..e693b5aba 100644 --- a/src/modules/module_17225.c +++ b/src/modules/module_17225.c @@ -399,6 +399,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_17230.c b/src/modules/module_17230.c index 2b3ef24c9..93cfc30c7 100644 --- a/src/modules/module_17230.c +++ b/src/modules/module_17230.c @@ -380,6 +380,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_17300.c b/src/modules/module_17300.c index 139bf7181..36eb6d681 100644 --- a/src/modules/module_17300.c +++ b/src/modules/module_17300.c @@ -118,6 +118,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_17400.c b/src/modules/module_17400.c index 74a7b2275..99c0ed604 100644 --- a/src/modules/module_17400.c +++ b/src/modules/module_17400.c @@ -109,6 +109,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_17500.c b/src/modules/module_17500.c index 2bd2448e4..06d396b0a 100644 --- a/src/modules/module_17500.c +++ b/src/modules/module_17500.c @@ -115,6 +115,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_17600.c b/src/modules/module_17600.c index b6760541b..ccf6101f3 100644 --- a/src/modules/module_17600.c +++ b/src/modules/module_17600.c @@ -121,6 +121,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_17700.c b/src/modules/module_17700.c index 803bed8c5..445d8e579 100644 --- a/src/modules/module_17700.c +++ b/src/modules/module_17700.c @@ -118,6 +118,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_17800.c b/src/modules/module_17800.c index ae6abb885..519566ec0 100644 --- a/src/modules/module_17800.c +++ b/src/modules/module_17800.c @@ -109,6 +109,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_17900.c b/src/modules/module_17900.c index 3db6a9496..c83930537 100644 --- a/src/modules/module_17900.c +++ b/src/modules/module_17900.c @@ -115,6 +115,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_18000.c b/src/modules/module_18000.c index 5f3209c5b..98d352b31 100644 --- a/src/modules/module_18000.c +++ b/src/modules/module_18000.c @@ -121,6 +121,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_18100.c b/src/modules/module_18100.c index 37a8ef2e7..46dadfe60 100644 --- a/src/modules/module_18100.c +++ b/src/modules/module_18100.c @@ -135,6 +135,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_18200.c b/src/modules/module_18200.c index 159f30fa8..4e5023160 100644 --- a/src/modules/module_18200.c +++ b/src/modules/module_18200.c @@ -342,6 +342,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_18300.c b/src/modules/module_18300.c index adc98432a..5c8926719 100644 --- a/src/modules/module_18300.c +++ b/src/modules/module_18300.c @@ -271,6 +271,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_18400.c b/src/modules/module_18400.c index 549e6ab71..86e43ef45 100644 --- a/src/modules/module_18400.c +++ b/src/modules/module_18400.c @@ -291,6 +291,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_18500.c b/src/modules/module_18500.c index f4e0e3cdc..78834a96f 100644 --- a/src/modules/module_18500.c +++ b/src/modules/module_18500.c @@ -48,20 +48,6 @@ u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, const char *module_st_hash (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_HASH; } const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_PASS; } -char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - char *jit_build_options = NULL; - - if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD_USE_HIP) - { - // this is a workaround to avoid a compile time of over an hour (and then to not work) on ROCM in pure kernel mode - - hc_asprintf (&jit_build_options, "-D NO_INLINE"); - } - - return jit_build_options; -} - int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len) { u32 *digest = (u32 *) digest_buf; @@ -160,6 +146,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; @@ -198,7 +186,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = module_jit_build_options; + module_ctx->module_jit_build_options = MODULE_DEFAULT; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; diff --git a/src/modules/module_18600.c b/src/modules/module_18600.c index ec7e5cbef..86605e2e6 100644 --- a/src/modules/module_18600.c +++ b/src/modules/module_18600.c @@ -382,6 +382,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_18700.c b/src/modules/module_18700.c index 57c7bdc1e..02652acf0 100644 --- a/src/modules/module_18700.c +++ b/src/modules/module_18700.c @@ -95,6 +95,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_18800.c b/src/modules/module_18800.c index 45e30f6b6..5e3550b3b 100644 --- a/src/modules/module_18800.c +++ b/src/modules/module_18800.c @@ -234,6 +234,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_18900.c b/src/modules/module_18900.c index 0d07400f8..66b767ae5 100644 --- a/src/modules/module_18900.c +++ b/src/modules/module_18900.c @@ -302,6 +302,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_19000.c b/src/modules/module_19000.c index 286635726..d8cd72d1c 100644 --- a/src/modules/module_19000.c +++ b/src/modules/module_19000.c @@ -196,6 +196,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_19100.c b/src/modules/module_19100.c index 50b89ecec..bef3b9536 100644 --- a/src/modules/module_19100.c +++ b/src/modules/module_19100.c @@ -196,6 +196,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_19200.c b/src/modules/module_19200.c index dbc93ec58..1e3681bb5 100644 --- a/src/modules/module_19200.c +++ b/src/modules/module_19200.c @@ -209,6 +209,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_19210.c b/src/modules/module_19210.c index b014c60cb..23c9e632c 100644 --- a/src/modules/module_19210.c +++ b/src/modules/module_19210.c @@ -234,6 +234,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_19300.c b/src/modules/module_19300.c index ad1d7cefc..aca7830a6 100644 --- a/src/modules/module_19300.c +++ b/src/modules/module_19300.c @@ -61,20 +61,6 @@ u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYB return kernel_threads_max; } -char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - char *jit_build_options = NULL; - - if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD_USE_HIP) - { - // this is a workaround to avoid a compile time of over an hour (and then to not work) on ROCM in pure kernel mode - - hc_asprintf (&jit_build_options, "-D NO_INLINE"); - } - - return jit_build_options; -} - u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const u64 esalt_size = (const u64) sizeof (sha1_double_salt_t); @@ -226,6 +212,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; @@ -264,7 +252,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = module_jit_build_options; + module_ctx->module_jit_build_options = MODULE_DEFAULT; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; diff --git a/src/modules/module_19500.c b/src/modules/module_19500.c index eaf90f385..f7f139bfb 100644 --- a/src/modules/module_19500.c +++ b/src/modules/module_19500.c @@ -70,20 +70,6 @@ bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE return false; } -char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - char *jit_build_options = NULL; - - if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD_USE_HIP) - { - // this is a workaround to avoid a compile time of over an hour (and then to not work) on ROCM in pure kernel mode - - hc_asprintf (&jit_build_options, "-D NO_INLINE"); - } - - return jit_build_options; -} - u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const u64 esalt_size = (const u64) sizeof (devise_hash_t); @@ -235,6 +221,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; @@ -273,7 +261,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = module_jit_build_options; + module_ctx->module_jit_build_options = MODULE_DEFAULT; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; diff --git a/src/modules/module_19600.c b/src/modules/module_19600.c index 296a1dca1..9b9a9f258 100644 --- a/src/modules/module_19600.c +++ b/src/modules/module_19600.c @@ -293,6 +293,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_19700.c b/src/modules/module_19700.c index c92d61f3c..8f6459225 100644 --- a/src/modules/module_19700.c +++ b/src/modules/module_19700.c @@ -310,6 +310,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_19800.c b/src/modules/module_19800.c index 93d746dd2..44146c46c 100644 --- a/src/modules/module_19800.c +++ b/src/modules/module_19800.c @@ -241,6 +241,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_19900.c b/src/modules/module_19900.c index facce5cca..c8ecebecc 100644 --- a/src/modules/module_19900.c +++ b/src/modules/module_19900.c @@ -241,6 +241,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_20011.c b/src/modules/module_20011.c index ffa1dbe4f..3f00a8751 100644 --- a/src/modules/module_20011.c +++ b/src/modules/module_20011.c @@ -218,6 +218,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_20012.c b/src/modules/module_20012.c index 3873c8a8e..6bc4dd506 100644 --- a/src/modules/module_20012.c +++ b/src/modules/module_20012.c @@ -218,6 +218,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_20013.c b/src/modules/module_20013.c index 141dd1e1a..5f3d4fbc0 100644 --- a/src/modules/module_20013.c +++ b/src/modules/module_20013.c @@ -218,6 +218,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_20200.c b/src/modules/module_20200.c index ff63ea7c6..af964cf80 100644 --- a/src/modules/module_20200.c +++ b/src/modules/module_20200.c @@ -231,6 +231,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_20300.c b/src/modules/module_20300.c index 2d6ac1fd6..ded45c48e 100644 --- a/src/modules/module_20300.c +++ b/src/modules/module_20300.c @@ -230,6 +230,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_20400.c b/src/modules/module_20400.c index 2fd8a7dcd..66a18a0c7 100644 --- a/src/modules/module_20400.c +++ b/src/modules/module_20400.c @@ -223,6 +223,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_20500.c b/src/modules/module_20500.c index 3a001c93e..37ce6a085 100644 --- a/src/modules/module_20500.c +++ b/src/modules/module_20500.c @@ -162,6 +162,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_20510.c b/src/modules/module_20510.c index 4172c1fda..4c8a340fc 100644 --- a/src/modules/module_20510.c +++ b/src/modules/module_20510.c @@ -204,6 +204,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_20600.c b/src/modules/module_20600.c index e6a17c5af..a8d23bdc9 100644 --- a/src/modules/module_20600.c +++ b/src/modules/module_20600.c @@ -193,6 +193,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_20710.c b/src/modules/module_20710.c index 49705221e..4fe2ba5f1 100644 --- a/src/modules/module_20710.c +++ b/src/modules/module_20710.c @@ -190,6 +190,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_20711.c b/src/modules/module_20711.c index 1103ddf7b..a72570d04 100644 --- a/src/modules/module_20711.c +++ b/src/modules/module_20711.c @@ -223,6 +223,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_20712.c b/src/modules/module_20712.c index e2b5a492d..987d688c4 100644 --- a/src/modules/module_20712.c +++ b/src/modules/module_20712.c @@ -196,6 +196,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_20720.c b/src/modules/module_20720.c index 3dc89ef5e..f65724855 100644 --- a/src/modules/module_20720.c +++ b/src/modules/module_20720.c @@ -190,6 +190,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_20730.c b/src/modules/module_20730.c index 26e1c1578..ccd1db2a7 100644 --- a/src/modules/module_20730.c +++ b/src/modules/module_20730.c @@ -190,6 +190,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_20800.c b/src/modules/module_20800.c index 54a1b02d5..6cece615d 100644 --- a/src/modules/module_20800.c +++ b/src/modules/module_20800.c @@ -167,6 +167,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_20900.c b/src/modules/module_20900.c index 8a0dd5c60..7b1321ea6 100644 --- a/src/modules/module_20900.c +++ b/src/modules/module_20900.c @@ -129,6 +129,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_21000.c b/src/modules/module_21000.c index 08697a332..4a5137e54 100644 --- a/src/modules/module_21000.c +++ b/src/modules/module_21000.c @@ -187,6 +187,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_21100.c b/src/modules/module_21100.c index b722be594..9e2f9392e 100644 --- a/src/modules/module_21100.c +++ b/src/modules/module_21100.c @@ -172,6 +172,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_21200.c b/src/modules/module_21200.c index f51d214a6..f8cfd2881 100644 --- a/src/modules/module_21200.c +++ b/src/modules/module_21200.c @@ -186,6 +186,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_21300.c b/src/modules/module_21300.c index 1825bef35..75e57c1f4 100644 --- a/src/modules/module_21300.c +++ b/src/modules/module_21300.c @@ -163,6 +163,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_21310.c b/src/modules/module_21310.c index 9bd5e991c..f631771c8 100644 --- a/src/modules/module_21310.c +++ b/src/modules/module_21310.c @@ -226,6 +226,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_21400.c b/src/modules/module_21400.c index 2959a503f..7e2ea0cad 100644 --- a/src/modules/module_21400.c +++ b/src/modules/module_21400.c @@ -167,6 +167,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_21420.c b/src/modules/module_21420.c index e55c031ab..f31dda02b 100644 --- a/src/modules/module_21420.c +++ b/src/modules/module_21420.c @@ -190,6 +190,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_21500.c b/src/modules/module_21500.c index ba52c09f0..dba580a7c 100644 --- a/src/modules/module_21500.c +++ b/src/modules/module_21500.c @@ -221,6 +221,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_21501.c b/src/modules/module_21501.c index 0c7d25abf..f548bebd5 100644 --- a/src/modules/module_21501.c +++ b/src/modules/module_21501.c @@ -228,6 +228,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_21600.c b/src/modules/module_21600.c index 868ed3e98..dd35f47de 100644 --- a/src/modules/module_21600.c +++ b/src/modules/module_21600.c @@ -181,6 +181,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_21700.c b/src/modules/module_21700.c index 394f548db..7767e456d 100644 --- a/src/modules/module_21700.c +++ b/src/modules/module_21700.c @@ -306,6 +306,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = module_deep_comp_kernel; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_21800.c b/src/modules/module_21800.c index e1dfa4757..16f97979a 100644 --- a/src/modules/module_21800.c +++ b/src/modules/module_21800.c @@ -283,6 +283,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = module_deep_comp_kernel; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_22000.c b/src/modules/module_22000.c index ebacaab95..24f2c9ad9 100644 --- a/src/modules/module_22000.c +++ b/src/modules/module_22000.c @@ -1340,6 +1340,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = module_deep_comp_kernel; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_22001.c b/src/modules/module_22001.c index b0fb51dd9..541835ee5 100644 --- a/src/modules/module_22001.c +++ b/src/modules/module_22001.c @@ -1341,6 +1341,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = module_deep_comp_kernel; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_22100.c b/src/modules/module_22100.c index f5b21082a..344218243 100644 --- a/src/modules/module_22100.c +++ b/src/modules/module_22100.c @@ -429,6 +429,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_22200.c b/src/modules/module_22200.c index 284264c7e..e7bbcb5ef 100644 --- a/src/modules/module_22200.c +++ b/src/modules/module_22200.c @@ -243,6 +243,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_22300.c b/src/modules/module_22300.c index 64f33ad4f..a85d1d753 100644 --- a/src/modules/module_22300.c +++ b/src/modules/module_22300.c @@ -190,6 +190,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_22301.c b/src/modules/module_22301.c index f75c196dc..fb675732a 100644 --- a/src/modules/module_22301.c +++ b/src/modules/module_22301.c @@ -190,6 +190,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_22400.c b/src/modules/module_22400.c index f16d7a453..0aed7670f 100644 --- a/src/modules/module_22400.c +++ b/src/modules/module_22400.c @@ -321,6 +321,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_22500.c b/src/modules/module_22500.c index 534539b4e..c130400a0 100644 --- a/src/modules/module_22500.c +++ b/src/modules/module_22500.c @@ -163,6 +163,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_22600.c b/src/modules/module_22600.c index 236ba6453..cd618d638 100644 --- a/src/modules/module_22600.c +++ b/src/modules/module_22600.c @@ -236,6 +236,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_22700.c b/src/modules/module_22700.c index 009b4a280..a943d36df 100644 --- a/src/modules/module_22700.c +++ b/src/modules/module_22700.c @@ -391,6 +391,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_22911.c b/src/modules/module_22911.c index 0edaaec52..91ae3d2fe 100644 --- a/src/modules/module_22911.c +++ b/src/modules/module_22911.c @@ -216,6 +216,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_22921.c b/src/modules/module_22921.c index 851308349..163aacee9 100644 --- a/src/modules/module_22921.c +++ b/src/modules/module_22921.c @@ -21,8 +21,7 @@ static const char *HASH_NAME = "RSA/DSA/EC/OpenSSH Private Keys ($6$)"; static const u64 KERN_TYPE = 22921; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE - | OPTS_TYPE_PT_GENERATE_LE - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_PT_GENERATE_LE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "$sshng$6$8$7620048997557487$1224$13517a1204dc69528c474ef5cbb02d548698771f2a607c04ea54eb92f13dedba0f2185d2884b4db0c95ce6432856108ea2db858be443e0f8004ffcd60857e4ff1e42b17f056998ec5f96806a06e39cc6e6d7ef4ce8ae62b57b2ec0d0236c35cf4bc00dd6fda45e4788dcca0f0e44dddae1dad2d6e7b705d076f2f8fc5837eec4a002d9633bcad1f395ca8e85e78459abe293451567494d440c3f087bb7fe4d6588018f92ca327dda514a99d7b4b32434da0e3b1bf9344afb2fe29f8d8315a385fe8b81fd4c202c7d82cd9f0bb1600e59762ab6ea1b42e4e299f0a59ce510767e1e1138453d362d0a1aa6680e86b5aa0bd5c62165f4fe7c2867f9533578085adc36739d6c9cf7b36899aac39dcabac8b39194433423e8e18ba28496bbe14dd01231eb5b091ae9de0f7f9ea714c22edac394077fb758fe496e1880571ade399ac229457ddd98577f8a01a036ad3bc8b03a9fb02e26b4b76f6cb676eabe82d1606fca0c5fca62cd1d82c3df1ed58ab4acd4611b2827ebde722bc05e471a427225818aa36dabf5bf1203ccb0ebc8dec097e49f7f948bfe7b939e6d0ff1125b863c033768f588964f8b77ca1e2425751f873f80e5d6a0671f7860cf4a46533585094726c3afe5f7203fa4a01650fa9839772c713a033139cfc6a6e6f7dc62e5844d4c57ef4fc3321bc85d597a54bd6fe37e9e696cf3b5ec66f55232e0964dc5cf880d8a41a9891150618bd9c088fd9824af0d86f817f2c79429c3d56cd6eb41eb6120f9accc10a863f23a2bb6c57d4bd6193f2283ae0215e2e87e672a8438e2550c044fa9556bdb4afc40d8c2752ffbc6c95571756a3c230bb2fa95f519f8da238ef0857ecf860247a8b26e28269f9bad564e7d8bfba2eac9760b52449251cb35e183f5b309a09071535154c6f1013b58f305b544f3589c9eb0e9ac4267a84374a3eab49c53aa9bedbf97f8f19ebc212d8db74ee03554a3514140667fa4ce8e06aad3f32d1b00015be0e8979fe66736018589beee06d6f318851dbe8d9689e70202185d71fc5e5a3d2996ddb8ae1d7718c49855c6f8c43301e0915f324f30d0d9c6a8504a91ad5a7179aafb87ede58598394949910874850994abe815817359152ff6a7c8cc6f19524dfc5e50ddfd038a2275bf809e3c8f05ed3e3137ebd62d91cd3578533787c3847e3c5e07e5a891480e5ceabcf6c344e7bec8b640ab9a03e90b846b35d2f46ba150accef32d2597b064810b15fd54fca6d2b146feabcd05c0b51617ae95e36f6817a62c3ff42c5c2f6f1d20a8a1fd334d3b7d3f83bba057b79d9b5508bb0cb706ba00acb0ab797401fdcfac80b5b6e38e51aec0b38f33ff4690425ca28d88a2e876591521230150b4e20a4a82e50061cee9c0705100bfe5fdbd8ef27aec20387cf32455ef305bce2a91ae6da91fc41376b97149e9b41c901b24811df9272ff09718923b8d94e8e459a164a22b0eca47653f3efcbf08188c5da78cd9fb9eda1761094f9d8bc3d479e9f40c7d79ebaaba2a5c632329f20a9962040ff8f512b42c5f32a8460d87b8e93c6f980a1562c436eea1c8994fbf671dda3c4ccd3c142acfcdde2ab61227289ad408213ac8e22d9ef487f36925f5ba3b8e7e913d25c4a8592c861d13f03b615bc2760aabc61d68db80d35296a3312fdf4b56c0fbee5ab3fea1cf9caf3960a564046939e8002d2dd909db446d85aeae9dd42a33fe28684f722172e6"; @@ -217,6 +216,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_22931.c b/src/modules/module_22931.c index e4a626688..8d21533e4 100644 --- a/src/modules/module_22931.c +++ b/src/modules/module_22931.c @@ -220,6 +220,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_22941.c b/src/modules/module_22941.c index 52c1e79a8..4b4bf09ac 100644 --- a/src/modules/module_22941.c +++ b/src/modules/module_22941.c @@ -220,6 +220,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_22951.c b/src/modules/module_22951.c index d9ca9b200..d7c6645ce 100644 --- a/src/modules/module_22951.c +++ b/src/modules/module_22951.c @@ -220,6 +220,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_23001.c b/src/modules/module_23001.c index db6fb556a..bbde4ee6e 100644 --- a/src/modules/module_23001.c +++ b/src/modules/module_23001.c @@ -246,6 +246,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_23002.c b/src/modules/module_23002.c index 189a78a54..ac58ee5b6 100644 --- a/src/modules/module_23002.c +++ b/src/modules/module_23002.c @@ -246,6 +246,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_23003.c b/src/modules/module_23003.c index c3a44d944..dc697a732 100644 --- a/src/modules/module_23003.c +++ b/src/modules/module_23003.c @@ -26,8 +26,7 @@ static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_BE | OPTS_TYPE_PT_ADD80 - | OPTS_TYPE_PT_ADDBITS15 - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_PT_ADDBITS15; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "$zip3$*0*1*256*0*39bff47df6152a0214d7a967*65ff418ffb3b1198cccdef0327c03750f328d6dd5287e00e4c467f33b92a6ef40a74bb11b5afad61a6c3c9b279d8bd7961e96af7b470c36fc186fd3cfe059107021c9dea0cf206692f727eeca71f18f5b0b6ee1f702b648bba01aa21c7b7f3f0f7d547838aad46868155a04214f22feef7b31d7a15e1abe6dba5e569c62ee640783bb4a54054c2c69e93ece9f1a2af9d*0*0*0*file.txt"; @@ -247,6 +246,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_23100.c b/src/modules/module_23100.c index 22b524e9f..7728d93d2 100644 --- a/src/modules/module_23100.c +++ b/src/modules/module_23100.c @@ -200,6 +200,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_23200.c b/src/modules/module_23200.c index 5ec94c72d..3b7b21136 100644 --- a/src/modules/module_23200.c +++ b/src/modules/module_23200.c @@ -195,6 +195,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_23300.c b/src/modules/module_23300.c index decc32913..36e2bcd51 100644 --- a/src/modules/module_23300.c +++ b/src/modules/module_23300.c @@ -263,6 +263,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_23400.c b/src/modules/module_23400.c index 7a0e5fb95..13743815f 100644 --- a/src/modules/module_23400.c +++ b/src/modules/module_23400.c @@ -269,6 +269,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_23500.c b/src/modules/module_23500.c index fc5a5ee9c..797d31428 100644 --- a/src/modules/module_23500.c +++ b/src/modules/module_23500.c @@ -305,6 +305,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_23600.c b/src/modules/module_23600.c index 88e68b745..dae2ece19 100644 --- a/src/modules/module_23600.c +++ b/src/modules/module_23600.c @@ -305,6 +305,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_23700.c b/src/modules/module_23700.c index 82e70f96f..22c9d9a0a 100644 --- a/src/modules/module_23700.c +++ b/src/modules/module_23700.c @@ -340,6 +340,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_23800.c b/src/modules/module_23800.c index be492b571..1b74f0291 100644 --- a/src/modules/module_23800.c +++ b/src/modules/module_23800.c @@ -611,6 +611,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_23900.c b/src/modules/module_23900.c index 7fe378938..fcee86004 100644 --- a/src/modules/module_23900.c +++ b/src/modules/module_23900.c @@ -204,6 +204,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_24000.c b/src/modules/module_24000.c index a3a69e488..7e6d545e2 100644 --- a/src/modules/module_24000.c +++ b/src/modules/module_24000.c @@ -463,6 +463,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_24100.c b/src/modules/module_24100.c index a871090f0..c97b4b9ac 100644 --- a/src/modules/module_24100.c +++ b/src/modules/module_24100.c @@ -284,6 +284,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_24200.c b/src/modules/module_24200.c index 4ab9c2a09..8b6a8e5c8 100644 --- a/src/modules/module_24200.c +++ b/src/modules/module_24200.c @@ -324,6 +324,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_24300.c b/src/modules/module_24300.c index cad17a5b4..c4c90f502 100644 --- a/src/modules/module_24300.c +++ b/src/modules/module_24300.c @@ -150,6 +150,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_24410.c b/src/modules/module_24410.c index 44e3202f9..945ee1041 100644 --- a/src/modules/module_24410.c +++ b/src/modules/module_24410.c @@ -311,6 +311,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_24420.c b/src/modules/module_24420.c index 7bd0e1e05..39820834a 100644 --- a/src/modules/module_24420.c +++ b/src/modules/module_24420.c @@ -311,6 +311,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_24500.c b/src/modules/module_24500.c index 4633993b1..17b67bf8f 100644 --- a/src/modules/module_24500.c +++ b/src/modules/module_24500.c @@ -261,6 +261,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_24600.c b/src/modules/module_24600.c index 838d61245..b6f14509a 100644 --- a/src/modules/module_24600.c +++ b/src/modules/module_24600.c @@ -287,6 +287,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_24700.c b/src/modules/module_24700.c index 24b41cf61..2b8cfed86 100644 --- a/src/modules/module_24700.c +++ b/src/modules/module_24700.c @@ -123,6 +123,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_24800.c b/src/modules/module_24800.c index fff6a347b..18db19378 100644 --- a/src/modules/module_24800.c +++ b/src/modules/module_24800.c @@ -122,6 +122,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_24900.c b/src/modules/module_24900.c index d3e419861..4b288cc41 100644 --- a/src/modules/module_24900.c +++ b/src/modules/module_24900.c @@ -163,6 +163,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_25000.c b/src/modules/module_25000.c index 99a365060..a3dd1872c 100644 --- a/src/modules/module_25000.c +++ b/src/modules/module_25000.c @@ -23,7 +23,8 @@ static const char *HASH_NAME = "SNMPv3 HMAC-MD5-96/HMAC-SHA1-96"; static const u64 KERN_TYPE = 25000; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE - | OPTS_TYPE_PT_GENERATE_LE; + | OPTS_TYPE_PT_GENERATE_LE + | OPTS_TYPE_MP_MULTI_DISABLE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat1"; static const char *ST_HASH = "$SNMPv3$0$45889431$30818f0201033011020409242fc0020300ffe304010102010304383036041180001f88808106d566db57fd600000000002011002020118040a6d61747269785f4d4435040c0000000000000000000000000400303d041180001f88808106d566db57fd60000000000400a226020411f319300201000201003018301606082b06010201010200060a2b06010401bf0803020a$80001f88808106d566db57fd6000000000$1b37c3ea872731f922959e90"; @@ -294,6 +295,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_25100.c b/src/modules/module_25100.c index 20a29ec71..24fd1ca74 100644 --- a/src/modules/module_25100.c +++ b/src/modules/module_25100.c @@ -23,7 +23,8 @@ static const char *HASH_NAME = "SNMPv3 HMAC-MD5-96"; static const u64 KERN_TYPE = 25100; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE - | OPTS_TYPE_PT_GENERATE_LE; + | OPTS_TYPE_PT_GENERATE_LE + | OPTS_TYPE_MP_MULTI_DISABLE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat1"; static const char *ST_HASH = "$SNMPv3$1$45889431$30818f0201033011020409242fc0020300ffe304010102010304383036041180001f88808106d566db57fd600000000002011002020118040a6d61747269785f4d4435040c0000000000000000000000000400303d041180001f88808106d566db57fd60000000000400a226020411f319300201000201003018301606082b06010201010200060a2b06010401bf0803020a$80001f88808106d566db57fd6000000000$1b37c3ea872731f922959e90"; @@ -275,6 +276,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_25200.c b/src/modules/module_25200.c index e81eed67e..22a671253 100644 --- a/src/modules/module_25200.c +++ b/src/modules/module_25200.c @@ -23,7 +23,8 @@ static const char *HASH_NAME = "SNMPv3 HMAC-SHA1-96"; static const u64 KERN_TYPE = 25200; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE - | OPTS_TYPE_PT_GENERATE_LE; + | OPTS_TYPE_PT_GENERATE_LE + | OPTS_TYPE_MP_MULTI_DISABLE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat1"; static const char *ST_HASH = "$SNMPv3$2$45889431$30818f02010330110204371780f3020300ffe304010102010304383036041180001f88808106d566db57fd600000000002011002020118040a6d61747269785f534841040c0000000000000000000000000400303d041180001f88808106d566db57fd60000000000400a2260204073557d50201000201003018301606082b06010201010200060a2b06010401bf0803020a$80001f88808106d566db57fd6000000000$81f14f1930589f26f6755f6b"; @@ -286,6 +287,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_25300.c b/src/modules/module_25300.c index b74903769..ab51bb57d 100644 --- a/src/modules/module_25300.c +++ b/src/modules/module_25300.c @@ -267,6 +267,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_25400.c b/src/modules/module_25400.c index fe084ae18..dbe2f8469 100644 --- a/src/modules/module_25400.c +++ b/src/modules/module_25400.c @@ -671,6 +671,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_25500.c b/src/modules/module_25500.c index 9e2305f84..afc451fb9 100644 --- a/src/modules/module_25500.c +++ b/src/modules/module_25500.c @@ -304,6 +304,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_25600.c b/src/modules/module_25600.c index dc6ec869c..dffc6068c 100644 --- a/src/modules/module_25600.c +++ b/src/modules/module_25600.c @@ -288,6 +288,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_25700.c b/src/modules/module_25700.c index 30b0df8d5..a00013a64 100644 --- a/src/modules/module_25700.c +++ b/src/modules/module_25700.c @@ -125,6 +125,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_25800.c b/src/modules/module_25800.c index 89c4251b6..fcdb994eb 100644 --- a/src/modules/module_25800.c +++ b/src/modules/module_25800.c @@ -288,6 +288,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_25900.c b/src/modules/module_25900.c index 898fc5b52..7ad951f6d 100644 --- a/src/modules/module_25900.c +++ b/src/modules/module_25900.c @@ -264,6 +264,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = module_deep_comp_kernel; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_26000.c b/src/modules/module_26000.c index 2d7ea5f7b..459bb3588 100644 --- a/src/modules/module_26000.c +++ b/src/modules/module_26000.c @@ -196,6 +196,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_26100.c b/src/modules/module_26100.c index 91a170b44..c42958289 100644 --- a/src/modules/module_26100.c +++ b/src/modules/module_26100.c @@ -250,6 +250,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_26200.c b/src/modules/module_26200.c index 88e9b22bd..90f5f49ea 100644 --- a/src/modules/module_26200.c +++ b/src/modules/module_26200.c @@ -163,6 +163,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_26300.c b/src/modules/module_26300.c index 0a219af8a..994af2523 100644 --- a/src/modules/module_26300.c +++ b/src/modules/module_26300.c @@ -200,6 +200,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_26401.c b/src/modules/module_26401.c index 108fb1697..7add8f50f 100644 --- a/src/modules/module_26401.c +++ b/src/modules/module_26401.c @@ -132,6 +132,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_26402.c b/src/modules/module_26402.c index f720ea3e7..c854479f7 100644 --- a/src/modules/module_26402.c +++ b/src/modules/module_26402.c @@ -132,6 +132,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_26403.c b/src/modules/module_26403.c index 7248f4a74..d36f4ec41 100644 --- a/src/modules/module_26403.c +++ b/src/modules/module_26403.c @@ -132,6 +132,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_26500.c b/src/modules/module_26500.c index 7e766f036..ea7df82aa 100644 --- a/src/modules/module_26500.c +++ b/src/modules/module_26500.c @@ -249,6 +249,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_26600.c b/src/modules/module_26600.c index 4f6d0de3b..926555e94 100644 --- a/src/modules/module_26600.c +++ b/src/modules/module_26600.c @@ -333,6 +333,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_26610.c b/src/modules/module_26610.c index 532246128..ef6f58d3a 100644 --- a/src/modules/module_26610.c +++ b/src/modules/module_26610.c @@ -313,6 +313,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = module_deep_comp_kernel; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_26700.c b/src/modules/module_26700.c index 46958bb94..e802726f6 100644 --- a/src/modules/module_26700.c +++ b/src/modules/module_26700.c @@ -290,6 +290,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_26800.c b/src/modules/module_26800.c index 65756f1ff..7363bedff 100644 --- a/src/modules/module_26800.c +++ b/src/modules/module_26800.c @@ -298,6 +298,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_26900.c b/src/modules/module_26900.c index 62159fb51..5282933a6 100644 --- a/src/modules/module_26900.c +++ b/src/modules/module_26900.c @@ -341,6 +341,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_27000.c b/src/modules/module_27000.c index bf5a190bb..88f0695fa 100644 --- a/src/modules/module_27000.c +++ b/src/modules/module_27000.c @@ -445,6 +445,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_27100.c b/src/modules/module_27100.c index b11a961d1..65a1f8717 100644 --- a/src/modules/module_27100.c +++ b/src/modules/module_27100.c @@ -343,6 +343,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_27200.c b/src/modules/module_27200.c index ffa2c6c8b..8be60f93a 100644 --- a/src/modules/module_27200.c +++ b/src/modules/module_27200.c @@ -190,6 +190,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_27300.c b/src/modules/module_27300.c index 1992ecf6d..535f7bc36 100644 --- a/src/modules/module_27300.c +++ b/src/modules/module_27300.c @@ -337,6 +337,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_27400.c b/src/modules/module_27400.c index f0368c6b5..7d9f0fbd4 100644 --- a/src/modules/module_27400.c +++ b/src/modules/module_27400.c @@ -239,6 +239,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_27500.c b/src/modules/module_27500.c index 24ea388fd..ebabe24e5 100644 --- a/src/modules/module_27500.c +++ b/src/modules/module_27500.c @@ -364,6 +364,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = module_benchmark_salt; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_27600.c b/src/modules/module_27600.c index 4f2feccd7..b4cdade54 100644 --- a/src/modules/module_27600.c +++ b/src/modules/module_27600.c @@ -380,6 +380,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = module_benchmark_salt; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_27700.c b/src/modules/module_27700.c index 10ecefe70..6b03236a8 100644 --- a/src/modules/module_27700.c +++ b/src/modules/module_27700.c @@ -415,6 +415,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_27800.c b/src/modules/module_27800.c index f5bf82a46..b78bebd3e 100644 --- a/src/modules/module_27800.c +++ b/src/modules/module_27800.c @@ -125,6 +125,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_27900.c b/src/modules/module_27900.c index ea06e0f2c..c610e73f2 100644 --- a/src/modules/module_27900.c +++ b/src/modules/module_27900.c @@ -115,6 +115,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_28000.c b/src/modules/module_28000.c index 90cf643ce..dade598c1 100644 --- a/src/modules/module_28000.c +++ b/src/modules/module_28000.c @@ -136,6 +136,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_28100.c b/src/modules/module_28100.c index f959f051b..502aef425 100644 --- a/src/modules/module_28100.c +++ b/src/modules/module_28100.c @@ -403,6 +403,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_28200.c b/src/modules/module_28200.c index dd3ce7998..0aacb889e 100644 --- a/src/modules/module_28200.c +++ b/src/modules/module_28200.c @@ -499,6 +499,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_28300.c b/src/modules/module_28300.c index b820dd9cb..be8ca0de5 100644 --- a/src/modules/module_28300.c +++ b/src/modules/module_28300.c @@ -178,6 +178,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_28400.c b/src/modules/module_28400.c index fdb164cee..404ccf054 100644 --- a/src/modules/module_28400.c +++ b/src/modules/module_28400.c @@ -288,6 +288,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_28501.c b/src/modules/module_28501.c index 123fa932e..764ac9b97 100644 --- a/src/modules/module_28501.c +++ b/src/modules/module_28501.c @@ -162,6 +162,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = module_benchmark_charset; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_28502.c b/src/modules/module_28502.c index 2c7b2d79b..793b99634 100644 --- a/src/modules/module_28502.c +++ b/src/modules/module_28502.c @@ -162,6 +162,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = module_benchmark_charset; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_28503.c b/src/modules/module_28503.c index 721942880..78618673b 100644 --- a/src/modules/module_28503.c +++ b/src/modules/module_28503.c @@ -344,6 +344,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = module_benchmark_charset; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_28504.c b/src/modules/module_28504.c index 90d94fc2b..805beb3cf 100644 --- a/src/modules/module_28504.c +++ b/src/modules/module_28504.c @@ -344,6 +344,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = module_benchmark_charset; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_28505.c b/src/modules/module_28505.c index e043d2f14..cee0ac61d 100644 --- a/src/modules/module_28505.c +++ b/src/modules/module_28505.c @@ -161,6 +161,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = module_benchmark_charset; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_28506.c b/src/modules/module_28506.c index 7d0312d91..15dcdf554 100644 --- a/src/modules/module_28506.c +++ b/src/modules/module_28506.c @@ -161,6 +161,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = module_benchmark_charset; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_28600.c b/src/modules/module_28600.c index b77869507..3a77867b9 100644 --- a/src/modules/module_28600.c +++ b/src/modules/module_28600.c @@ -338,6 +338,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_28700.c b/src/modules/module_28700.c index 4bf938a0f..4c88af250 100644 --- a/src/modules/module_28700.c +++ b/src/modules/module_28700.c @@ -363,6 +363,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_28800.c b/src/modules/module_28800.c index 88cf7c413..e32b7873b 100644 --- a/src/modules/module_28800.c +++ b/src/modules/module_28800.c @@ -268,6 +268,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_28900.c b/src/modules/module_28900.c index d2fbfe722..f6b348da2 100644 --- a/src/modules/module_28900.c +++ b/src/modules/module_28900.c @@ -277,6 +277,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29000.c b/src/modules/module_29000.c index 3cfab3d33..32dae72c1 100644 --- a/src/modules/module_29000.c +++ b/src/modules/module_29000.c @@ -234,6 +234,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29100.c b/src/modules/module_29100.c index 437cfcb89..81d09de47 100644 --- a/src/modules/module_29100.c +++ b/src/modules/module_29100.c @@ -151,6 +151,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = module_benchmark_salt; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29200.c b/src/modules/module_29200.c index df3fd21c4..bd47d8534 100644 --- a/src/modules/module_29200.c +++ b/src/modules/module_29200.c @@ -276,6 +276,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29311.c b/src/modules/module_29311.c index 8c97d7ea2..dd29c4b54 100644 --- a/src/modules/module_29311.c +++ b/src/modules/module_29311.c @@ -266,6 +266,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29312.c b/src/modules/module_29312.c index a002c4d69..bbfe15075 100644 --- a/src/modules/module_29312.c +++ b/src/modules/module_29312.c @@ -266,6 +266,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29313.c b/src/modules/module_29313.c index b5f877a7a..c13fdade1 100644 --- a/src/modules/module_29313.c +++ b/src/modules/module_29313.c @@ -266,6 +266,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29321.c b/src/modules/module_29321.c index ac5e1bf4f..526657c5e 100644 --- a/src/modules/module_29321.c +++ b/src/modules/module_29321.c @@ -264,6 +264,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29322.c b/src/modules/module_29322.c index 4322666c9..345c76f74 100644 --- a/src/modules/module_29322.c +++ b/src/modules/module_29322.c @@ -264,6 +264,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29323.c b/src/modules/module_29323.c index 63c016358..88f851e7b 100644 --- a/src/modules/module_29323.c +++ b/src/modules/module_29323.c @@ -264,6 +264,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29331.c b/src/modules/module_29331.c index 4c22415a7..1a10c3c8b 100644 --- a/src/modules/module_29331.c +++ b/src/modules/module_29331.c @@ -266,6 +266,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29332.c b/src/modules/module_29332.c index 4989b574a..d49724d1a 100644 --- a/src/modules/module_29332.c +++ b/src/modules/module_29332.c @@ -266,6 +266,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29333.c b/src/modules/module_29333.c index 32f9f3ee5..09f413932 100644 --- a/src/modules/module_29333.c +++ b/src/modules/module_29333.c @@ -266,6 +266,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29341.c b/src/modules/module_29341.c index 05a40bcda..b9b24c85c 100644 --- a/src/modules/module_29341.c +++ b/src/modules/module_29341.c @@ -279,6 +279,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29342.c b/src/modules/module_29342.c index 799940f12..b69ce942d 100644 --- a/src/modules/module_29342.c +++ b/src/modules/module_29342.c @@ -279,6 +279,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29343.c b/src/modules/module_29343.c index 6782c08ba..3059a988c 100644 --- a/src/modules/module_29343.c +++ b/src/modules/module_29343.c @@ -279,6 +279,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29411.c b/src/modules/module_29411.c index d5fe9d5c0..f26e4cf00 100644 --- a/src/modules/module_29411.c +++ b/src/modules/module_29411.c @@ -328,6 +328,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29412.c b/src/modules/module_29412.c index 76ddb550a..9dd4a5f94 100644 --- a/src/modules/module_29412.c +++ b/src/modules/module_29412.c @@ -328,6 +328,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29413.c b/src/modules/module_29413.c index 296e56911..de25a35f8 100644 --- a/src/modules/module_29413.c +++ b/src/modules/module_29413.c @@ -336,6 +336,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29421.c b/src/modules/module_29421.c index aa1dc80b9..4c0e94163 100644 --- a/src/modules/module_29421.c +++ b/src/modules/module_29421.c @@ -327,6 +327,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29422.c b/src/modules/module_29422.c index 1bbf4c2a5..d32d1471e 100644 --- a/src/modules/module_29422.c +++ b/src/modules/module_29422.c @@ -338,6 +338,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29423.c b/src/modules/module_29423.c index abd264fbf..988bc8a42 100644 --- a/src/modules/module_29423.c +++ b/src/modules/module_29423.c @@ -338,6 +338,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29431.c b/src/modules/module_29431.c index 9a188bf3b..eccc2beda 100644 --- a/src/modules/module_29431.c +++ b/src/modules/module_29431.c @@ -329,6 +329,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29432.c b/src/modules/module_29432.c index e38243438..6e8de6aac 100644 --- a/src/modules/module_29432.c +++ b/src/modules/module_29432.c @@ -329,6 +329,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29433.c b/src/modules/module_29433.c index 2ba87772a..b746e43f9 100644 --- a/src/modules/module_29433.c +++ b/src/modules/module_29433.c @@ -329,6 +329,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29441.c b/src/modules/module_29441.c index baab0733c..6ccc1e38e 100644 --- a/src/modules/module_29441.c +++ b/src/modules/module_29441.c @@ -330,6 +330,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29442.c b/src/modules/module_29442.c index 5639eb484..d30b7724e 100644 --- a/src/modules/module_29442.c +++ b/src/modules/module_29442.c @@ -330,6 +330,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29443.c b/src/modules/module_29443.c index ff435c5a4..26837cf5e 100644 --- a/src/modules/module_29443.c +++ b/src/modules/module_29443.c @@ -338,6 +338,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29451.c b/src/modules/module_29451.c index 821a616b1..183ba7cdb 100644 --- a/src/modules/module_29451.c +++ b/src/modules/module_29451.c @@ -355,6 +355,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29452.c b/src/modules/module_29452.c index a03f6e5a7..03b6dfefb 100644 --- a/src/modules/module_29452.c +++ b/src/modules/module_29452.c @@ -355,6 +355,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29453.c b/src/modules/module_29453.c index 4433fca7b..c20a923f3 100644 --- a/src/modules/module_29453.c +++ b/src/modules/module_29453.c @@ -355,6 +355,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29461.c b/src/modules/module_29461.c index 71c52fae0..ff26fffa0 100644 --- a/src/modules/module_29461.c +++ b/src/modules/module_29461.c @@ -357,6 +357,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29462.c b/src/modules/module_29462.c index f04ca6a51..e7b5a9d68 100644 --- a/src/modules/module_29462.c +++ b/src/modules/module_29462.c @@ -357,6 +357,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29463.c b/src/modules/module_29463.c index 0f6fc068b..9e58e087d 100644 --- a/src/modules/module_29463.c +++ b/src/modules/module_29463.c @@ -357,6 +357,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29471.c b/src/modules/module_29471.c index 586e16d74..18d50d294 100644 --- a/src/modules/module_29471.c +++ b/src/modules/module_29471.c @@ -340,6 +340,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29472.c b/src/modules/module_29472.c index a93b325c9..a4c0c275e 100644 --- a/src/modules/module_29472.c +++ b/src/modules/module_29472.c @@ -340,6 +340,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29473.c b/src/modules/module_29473.c index 4f122e7a4..744c1ac6d 100644 --- a/src/modules/module_29473.c +++ b/src/modules/module_29473.c @@ -340,6 +340,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29481.c b/src/modules/module_29481.c index a5068f4a2..3561d5de7 100644 --- a/src/modules/module_29481.c +++ b/src/modules/module_29481.c @@ -342,6 +342,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29482.c b/src/modules/module_29482.c index 725e28eef..c7244ab7a 100644 --- a/src/modules/module_29482.c +++ b/src/modules/module_29482.c @@ -342,6 +342,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29483.c b/src/modules/module_29483.c index 7db7b3cf9..4063a038f 100644 --- a/src/modules/module_29483.c +++ b/src/modules/module_29483.c @@ -342,6 +342,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = module_build_plain_postprocess; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29511.c b/src/modules/module_29511.c index 0f1d38566..2a3f9daf2 100644 --- a/src/modules/module_29511.c +++ b/src/modules/module_29511.c @@ -380,6 +380,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29512.c b/src/modules/module_29512.c index bdda11cac..e4edc5462 100644 --- a/src/modules/module_29512.c +++ b/src/modules/module_29512.c @@ -397,6 +397,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29513.c b/src/modules/module_29513.c index 603dfad8a..1bfe295bf 100644 --- a/src/modules/module_29513.c +++ b/src/modules/module_29513.c @@ -397,6 +397,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29521.c b/src/modules/module_29521.c index bc0e4fb2e..8eba5a72d 100644 --- a/src/modules/module_29521.c +++ b/src/modules/module_29521.c @@ -397,6 +397,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29522.c b/src/modules/module_29522.c index f305db77d..6b1c89088 100644 --- a/src/modules/module_29522.c +++ b/src/modules/module_29522.c @@ -397,6 +397,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29523.c b/src/modules/module_29523.c index 8569428d7..5c551e40c 100644 --- a/src/modules/module_29523.c +++ b/src/modules/module_29523.c @@ -397,6 +397,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29531.c b/src/modules/module_29531.c index 261de25e1..0c8f948c3 100644 --- a/src/modules/module_29531.c +++ b/src/modules/module_29531.c @@ -397,6 +397,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29532.c b/src/modules/module_29532.c index 557dfd82b..0f2af18cd 100644 --- a/src/modules/module_29532.c +++ b/src/modules/module_29532.c @@ -397,6 +397,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29533.c b/src/modules/module_29533.c index da84db774..bbbaaac2f 100644 --- a/src/modules/module_29533.c +++ b/src/modules/module_29533.c @@ -397,6 +397,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29541.c b/src/modules/module_29541.c index 1006486b4..ec81998f6 100644 --- a/src/modules/module_29541.c +++ b/src/modules/module_29541.c @@ -380,6 +380,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29542.c b/src/modules/module_29542.c index 57c4ae421..4d68a99fe 100644 --- a/src/modules/module_29542.c +++ b/src/modules/module_29542.c @@ -397,6 +397,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29543.c b/src/modules/module_29543.c index 1a29da536..f0789ccdd 100644 --- a/src/modules/module_29543.c +++ b/src/modules/module_29543.c @@ -397,6 +397,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29600.c b/src/modules/module_29600.c index 0dbdd3aa8..1242f5672 100644 --- a/src/modules/module_29600.c +++ b/src/modules/module_29600.c @@ -275,6 +275,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29700.c b/src/modules/module_29700.c index 4a2ca92ac..e0f9eab97 100644 --- a/src/modules/module_29700.c +++ b/src/modules/module_29700.c @@ -647,6 +647,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29800.c b/src/modules/module_29800.c index 364076c45..2bd6b351c 100644 --- a/src/modules/module_29800.c +++ b/src/modules/module_29800.c @@ -422,6 +422,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29910.c b/src/modules/module_29910.c index bb76e8da4..8f8028b03 100644 --- a/src/modules/module_29910.c +++ b/src/modules/module_29910.c @@ -255,6 +255,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29920.c b/src/modules/module_29920.c index 259e0f620..6cf4a3611 100644 --- a/src/modules/module_29920.c +++ b/src/modules/module_29920.c @@ -278,6 +278,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29930.c b/src/modules/module_29930.c index d29e9bcfe..eae649504 100644 --- a/src/modules/module_29930.c +++ b/src/modules/module_29930.c @@ -209,6 +209,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_29940.c b/src/modules/module_29940.c index be5522352..aa2791475 100644 --- a/src/modules/module_29940.c +++ b/src/modules/module_29940.c @@ -231,6 +231,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_30000.c b/src/modules/module_30000.c index 2a3fd4704..6a524703e 100644 --- a/src/modules/module_30000.c +++ b/src/modules/module_30000.c @@ -144,6 +144,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_30120.c b/src/modules/module_30120.c index f17570333..44fa456d3 100644 --- a/src/modules/module_30120.c +++ b/src/modules/module_30120.c @@ -208,6 +208,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_30420.c b/src/modules/module_30420.c index 8074d3412..179dd5904 100644 --- a/src/modules/module_30420.c +++ b/src/modules/module_30420.c @@ -160,6 +160,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_30500.c b/src/modules/module_30500.c index e68921944..1746f2625 100644 --- a/src/modules/module_30500.c +++ b/src/modules/module_30500.c @@ -167,6 +167,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_30600.c b/src/modules/module_30600.c index 2af2eecd4..b546989a7 100644 --- a/src/modules/module_30600.c +++ b/src/modules/module_30600.c @@ -288,6 +288,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_30700.c b/src/modules/module_30700.c index b078dc447..a853aeb9d 100644 --- a/src/modules/module_30700.c +++ b/src/modules/module_30700.c @@ -205,6 +205,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_30901.c b/src/modules/module_30901.c index 2ffca80aa..d5e424c7f 100644 --- a/src/modules/module_30901.c +++ b/src/modules/module_30901.c @@ -167,6 +167,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_30902.c b/src/modules/module_30902.c index 25f548d0c..3c8306a39 100644 --- a/src/modules/module_30902.c +++ b/src/modules/module_30902.c @@ -168,6 +168,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_30903.c b/src/modules/module_30903.c index 5ebb4cebf..e48098d43 100644 --- a/src/modules/module_30903.c +++ b/src/modules/module_30903.c @@ -350,6 +350,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_30904.c b/src/modules/module_30904.c index ebf7b3d4e..309bf8b67 100644 --- a/src/modules/module_30904.c +++ b/src/modules/module_30904.c @@ -350,6 +350,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_30905.c b/src/modules/module_30905.c index 33dfd9282..2bae3bb29 100644 --- a/src/modules/module_30905.c +++ b/src/modules/module_30905.c @@ -167,6 +167,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_30906.c b/src/modules/module_30906.c index 6810f6c16..1efb5bb65 100644 --- a/src/modules/module_30906.c +++ b/src/modules/module_30906.c @@ -167,6 +167,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_31000.c b/src/modules/module_31000.c index b7a3c2208..aeb654d19 100644 --- a/src/modules/module_31000.c +++ b/src/modules/module_31000.c @@ -120,6 +120,8 @@ void module_init (module_ctx_t * module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_31100.c b/src/modules/module_31100.c index 8db92fb91..6a4125041 100644 --- a/src/modules/module_31100.c +++ b/src/modules/module_31100.c @@ -167,6 +167,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_31200.c b/src/modules/module_31200.c index 72abe69f1..1bc8dc8a1 100644 --- a/src/modules/module_31200.c +++ b/src/modules/module_31200.c @@ -252,6 +252,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_31300.c b/src/modules/module_31300.c index ae4130837..c828a33bb 100644 --- a/src/modules/module_31300.c +++ b/src/modules/module_31300.c @@ -148,6 +148,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_31400.c b/src/modules/module_31400.c index 46bcef397..7539486f1 100644 --- a/src/modules/module_31400.c +++ b/src/modules/module_31400.c @@ -142,6 +142,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_31500.c b/src/modules/module_31500.c index 26ec4d0f3..c8e7985c7 100644 --- a/src/modules/module_31500.c +++ b/src/modules/module_31500.c @@ -174,6 +174,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_31600.c b/src/modules/module_31600.c index 2752f5d45..1517db1e3 100644 --- a/src/modules/module_31600.c +++ b/src/modules/module_31600.c @@ -196,6 +196,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = module_benchmark_mask; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_31700.c b/src/modules/module_31700.c index 1bdb6161a..e67ad51f6 100644 --- a/src/modules/module_31700.c +++ b/src/modules/module_31700.c @@ -205,6 +205,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_31800.c b/src/modules/module_31800.c index 8a91a90e7..576e9c018 100644 --- a/src/modules/module_31800.c +++ b/src/modules/module_31800.c @@ -382,6 +382,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = module_deep_comp_kernel; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_31900.c b/src/modules/module_31900.c index 7ef9a8f07..1ce10d7a2 100644 --- a/src/modules/module_31900.c +++ b/src/modules/module_31900.c @@ -291,6 +291,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_32000.c b/src/modules/module_32000.c index f1e17711a..50454f2ba 100644 --- a/src/modules/module_32000.c +++ b/src/modules/module_32000.c @@ -141,6 +141,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_32010.c b/src/modules/module_32010.c index d82e5ca6a..7c4279f98 100644 --- a/src/modules/module_32010.c +++ b/src/modules/module_32010.c @@ -150,6 +150,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_32020.c b/src/modules/module_32020.c index 98c525586..c55483742 100644 --- a/src/modules/module_32020.c +++ b/src/modules/module_32020.c @@ -185,6 +185,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_32030.c b/src/modules/module_32030.c index 11ac43ead..db7014287 100644 --- a/src/modules/module_32030.c +++ b/src/modules/module_32030.c @@ -197,6 +197,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_32031.c b/src/modules/module_32031.c index 2ce2cf719..3ff2e3a02 100644 --- a/src/modules/module_32031.c +++ b/src/modules/module_32031.c @@ -202,6 +202,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_32040.c b/src/modules/module_32040.c index a9afe56f7..9518db12d 100644 --- a/src/modules/module_32040.c +++ b/src/modules/module_32040.c @@ -198,6 +198,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_32041.c b/src/modules/module_32041.c index 445562e30..f4d35528e 100644 --- a/src/modules/module_32041.c +++ b/src/modules/module_32041.c @@ -205,6 +205,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_32050.c b/src/modules/module_32050.c index 131651dce..8fceefad2 100644 --- a/src/modules/module_32050.c +++ b/src/modules/module_32050.c @@ -227,6 +227,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_32060.c b/src/modules/module_32060.c index eade07596..c27efbad5 100644 --- a/src/modules/module_32060.c +++ b/src/modules/module_32060.c @@ -291,6 +291,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_32070.c b/src/modules/module_32070.c index a2a785628..23b84781c 100644 --- a/src/modules/module_32070.c +++ b/src/modules/module_32070.c @@ -240,6 +240,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_32100.c b/src/modules/module_32100.c index 0663afc28..1795c700b 100644 --- a/src/modules/module_32100.c +++ b/src/modules/module_32100.c @@ -367,6 +367,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_32200.c b/src/modules/module_32200.c index 8a2ccc36e..4c71f9427 100644 --- a/src/modules/module_32200.c +++ b/src/modules/module_32200.c @@ -366,6 +366,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_32300.c b/src/modules/module_32300.c index d811506b5..1b66c35c3 100644 --- a/src/modules/module_32300.c +++ b/src/modules/module_32300.c @@ -248,6 +248,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_32410.c b/src/modules/module_32410.c index 9554e980b..c1857e389 100644 --- a/src/modules/module_32410.c +++ b/src/modules/module_32410.c @@ -201,6 +201,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_32420.c b/src/modules/module_32420.c index c4b6d6494..f8a477d79 100644 --- a/src/modules/module_32420.c +++ b/src/modules/module_32420.c @@ -218,6 +218,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_32500.c b/src/modules/module_32500.c index d23a72114..2354ae3cf 100644 --- a/src/modules/module_32500.c +++ b/src/modules/module_32500.c @@ -223,6 +223,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_32600.c b/src/modules/module_32600.c index 819610413..9043655c3 100644 --- a/src/modules/module_32600.c +++ b/src/modules/module_32600.c @@ -221,6 +221,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_32700.c b/src/modules/module_32700.c index a34482a42..9bfdd3f02 100644 --- a/src/modules/module_32700.c +++ b/src/modules/module_32700.c @@ -158,6 +158,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_33300.c b/src/modules/module_33300.c index 9026ac61b..964aeee9e 100644 --- a/src/modules/module_33300.c +++ b/src/modules/module_33300.c @@ -146,6 +146,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_33500.c b/src/modules/module_33500.c index dadc7cc9e..9554ea8f3 100644 --- a/src/modules/module_33500.c +++ b/src/modules/module_33500.c @@ -342,6 +342,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_33501.c b/src/modules/module_33501.c index 37f3ac585..04befc153 100644 --- a/src/modules/module_33501.c +++ b/src/modules/module_33501.c @@ -342,6 +342,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_33502.c b/src/modules/module_33502.c index 8b317b1c4..50bf97077 100644 --- a/src/modules/module_33502.c +++ b/src/modules/module_33502.c @@ -342,6 +342,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/modules/module_99999.c b/src/modules/module_99999.c index b1dd810bd..520db334b 100644 --- a/src/modules/module_99999.c +++ b/src/modules/module_99999.c @@ -170,6 +170,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_mask = MODULE_DEFAULT; module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; diff --git a/src/monitor.c b/src/monitor.c index ce02a7a90..571e7c8c3 100644 --- a/src/monitor.c +++ b/src/monitor.c @@ -42,6 +42,7 @@ int get_runtime_left (const hashcat_ctx_t *hashcat_ctx) static int monitor (hashcat_ctx_t *hashcat_ctx) { + bridge_ctx_t *bridge_ctx = hashcat_ctx->bridge_ctx; hashes_t *hashes = hashcat_ctx->hashes; hwmon_ctx_t *hwmon_ctx = hashcat_ctx->hwmon_ctx; backend_ctx_t *backend_ctx = hashcat_ctx->backend_ctx; @@ -87,7 +88,10 @@ static int monitor (hashcat_ctx_t *hashcat_ctx) if (hwmon_ctx->enabled == true) { - performance_check = true; // this check simply requires hwmon to work + if (bridge_ctx->enabled == false) + { + performance_check = true; // this check simply requires hwmon to work + } } if ((runtime_check == false) && (remove_check == false) && (status_check == false) && (restore_check == false) && (hwmon_check == false) && (performance_check == false)) diff --git a/src/selftest.c b/src/selftest.c index 313725e55..04a2e98f7 100644 --- a/src/selftest.c +++ b/src/selftest.c @@ -14,6 +14,7 @@ static int selftest (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param) { + bridge_ctx_t *bridge_ctx = hashcat_ctx->bridge_ctx; hashconfig_t *hashconfig = hashcat_ctx->hashconfig; hashes_t *hashes = hashcat_ctx->hashes; module_ctx_t *module_ctx = hashcat_ctx->module_ctx; @@ -652,6 +653,77 @@ static int selftest (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param { if (run_kernel (hashcat_ctx, device_param, KERN_RUN_2E, 0, 1, false, 0) == -1) return -1; } + + if (hashconfig->bridge_type & BRIDGE_TYPE_LAUNCH_LOOP) + { + #define COPY_TMPS 1 + + if (COPY_TMPS) + { + if (device_param->is_cuda == true) + { + if (hc_cuMemcpyDtoHAsync (hashcat_ctx, device_param->h_tmps, device_param->cuda_d_tmps, hashconfig->tmp_size, device_param->cuda_stream) == -1) return -1; + + if (hc_cuStreamSynchronize (hashcat_ctx, device_param->cuda_stream) == -1) return -1; + } + + if (device_param->is_hip == true) + { + if (hc_hipMemcpyDtoHAsync (hashcat_ctx, device_param->h_tmps, device_param->hip_d_tmps, hashconfig->tmp_size, device_param->hip_stream) == -1) return -1; + + if (hc_hipStreamSynchronize (hashcat_ctx, device_param->hip_stream) == -1) return -1; + } + + #if defined (__APPLE__) + if (device_param->is_metal == true) + { + if (hc_mtlMemcpyDtoH (hashcat_ctx, device_param->metal_command_queue, device_param->h_tmps, device_param->metal_d_tmps, 0, hashconfig->tmp_size) == -1) return -1; + } + #endif + + if (device_param->is_opencl == true) + { + /* blocking */ + if (hc_clEnqueueReadBuffer (hashcat_ctx, device_param->opencl_command_queue, device_param->opencl_d_tmps, CL_TRUE, 0, hashconfig->tmp_size, device_param->h_tmps, 0, NULL, NULL) == -1) return -1; + } + } + + hashes_t st_hashes; + + memcpy (&st_hashes, hashes, sizeof (hashes_t)); + + st_hashes.digests_buf = st_hashes.st_digests_buf; + st_hashes.salts_buf = st_hashes.st_salts_buf; + st_hashes.esalts_buf = st_hashes.st_esalts_buf; + st_hashes.hook_salts_buf = st_hashes.st_hook_salts_buf; + + if (bridge_ctx->launch_loop (bridge_ctx->platform_context, device_param, hashconfig, &st_hashes, 0, 1) == false) return -1; + + if (COPY_TMPS) + { + if (device_param->is_cuda == true) + { + if (hc_cuMemcpyHtoDAsync (hashcat_ctx, device_param->cuda_d_tmps, device_param->h_tmps, hashconfig->tmp_size, device_param->cuda_stream) == -1) return -1; + } + + if (device_param->is_hip == true) + { + if (hc_hipMemcpyHtoDAsync (hashcat_ctx, device_param->hip_d_tmps, device_param->h_tmps, hashconfig->tmp_size, device_param->hip_stream) == -1) return -1; + } + + #if defined (__APPLE__) + if (device_param->is_metal == true) + { + if (hc_mtlMemcpyHtoD (hashcat_ctx, device_param->metal_command_queue, device_param->metal_d_tmps, 0, device_param->h_tmps, hashconfig->tmp_size) == -1) return -1; + } + #endif + + if (device_param->is_opencl == true) + { + if (hc_clEnqueueWriteBuffer (hashcat_ctx, device_param->opencl_command_queue, device_param->opencl_d_tmps, CL_TRUE, 0, hashconfig->tmp_size, device_param->h_tmps, 0, NULL, NULL) == -1) return -1; + } + } + } } if (hashconfig->opts_type & OPTS_TYPE_HOOK23) @@ -739,6 +811,77 @@ static int selftest (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param device_param->kernel_param.loop_cnt = loop_left; if (run_kernel (hashcat_ctx, device_param, KERN_RUN_LOOP2, 0, 1, false, 0) == -1) return -1; + + if (hashconfig->bridge_type & BRIDGE_TYPE_LAUNCH_LOOP2) + { + #define COPY_TMPS 1 + + if (COPY_TMPS) + { + if (device_param->is_cuda == true) + { + if (hc_cuMemcpyDtoHAsync (hashcat_ctx, device_param->h_tmps, device_param->cuda_d_tmps, hashconfig->tmp_size, device_param->cuda_stream) == -1) return -1; + + if (hc_cuStreamSynchronize (hashcat_ctx, device_param->cuda_stream) == -1) return -1; + } + + if (device_param->is_hip == true) + { + if (hc_hipMemcpyDtoHAsync (hashcat_ctx, device_param->h_tmps, device_param->hip_d_tmps, hashconfig->tmp_size, device_param->hip_stream) == -1) return -1; + + if (hc_hipStreamSynchronize (hashcat_ctx, device_param->hip_stream) == -1) return -1; + } + + #if defined (__APPLE__) + if (device_param->is_metal == true) + { + if (hc_mtlMemcpyDtoH (hashcat_ctx, device_param->metal_command_queue, device_param->h_tmps, device_param->metal_d_tmps, 0, hashconfig->tmp_size) == -1) return -1; + } + #endif + + if (device_param->is_opencl == true) + { + /* blocking */ + if (hc_clEnqueueReadBuffer (hashcat_ctx, device_param->opencl_command_queue, device_param->opencl_d_tmps, CL_TRUE, 0, hashconfig->tmp_size, device_param->h_tmps, 0, NULL, NULL) == -1) return -1; + } + } + + hashes_t st_hashes; + + memcpy (&st_hashes, hashes, sizeof (hashes_t)); + + st_hashes.digests_buf = st_hashes.st_digests_buf; + st_hashes.salts_buf = st_hashes.st_salts_buf; + st_hashes.esalts_buf = st_hashes.st_esalts_buf; + st_hashes.hook_salts_buf = st_hashes.st_hook_salts_buf; + + if (bridge_ctx->launch_loop2 (bridge_ctx->platform_context, device_param, hashconfig, &st_hashes, 0, 1) == false) return -1; + + if (COPY_TMPS) + { + if (device_param->is_cuda == true) + { + if (hc_cuMemcpyHtoDAsync (hashcat_ctx, device_param->cuda_d_tmps, device_param->h_tmps, hashconfig->tmp_size, device_param->cuda_stream) == -1) return -1; + } + + if (device_param->is_hip == true) + { + if (hc_hipMemcpyHtoDAsync (hashcat_ctx, device_param->hip_d_tmps, device_param->h_tmps, hashconfig->tmp_size, device_param->hip_stream) == -1) return -1; + } + + #if defined (__APPLE__) + if (device_param->is_metal == true) + { + if (hc_mtlMemcpyHtoD (hashcat_ctx, device_param->metal_command_queue, device_param->metal_d_tmps, 0, device_param->h_tmps, hashconfig->tmp_size) == -1) return -1; + } + #endif + + if (device_param->is_opencl == true) + { + if (hc_clEnqueueWriteBuffer (hashcat_ctx, device_param->opencl_command_queue, device_param->opencl_d_tmps, CL_TRUE, 0, hashconfig->tmp_size, device_param->h_tmps, 0, NULL, NULL) == -1) return -1; + } + } + } } } } @@ -1041,8 +1184,10 @@ HC_API_CALL void *thread_selftest (void *p) thread_param_t *thread_param = (thread_param_t *) p; hashcat_ctx_t *hashcat_ctx = thread_param->hashcat_ctx; - backend_ctx_t *backend_ctx = hashcat_ctx->backend_ctx; + bridge_ctx_t *bridge_ctx = hashcat_ctx->bridge_ctx; + hashconfig_t *hashconfig = hashcat_ctx->hashconfig; + hashes_t *hashes = hashcat_ctx->hashes; if (backend_ctx->enabled == false) return NULL; @@ -1055,6 +1200,14 @@ HC_API_CALL void *thread_selftest (void *p) if (device_param->skipped == true) return NULL; if (device_param->skipped_warning == true) return NULL; + if (bridge_ctx->enabled == true) + { + if (bridge_ctx->thread_init != BRIDGE_DEFAULT) + { + if (bridge_ctx->thread_init (bridge_ctx->platform_context, device_param, hashconfig, hashes) == false) return NULL; + } + } + if (device_param->is_cuda == true) { if (hc_cuCtxPushCurrent (hashcat_ctx, device_param->cuda_context) == -1) return NULL; @@ -1097,6 +1250,14 @@ HC_API_CALL void *thread_selftest (void *p) if (hc_hipCtxPopCurrent (hashcat_ctx, &device_param->hip_context) == -1) return NULL; } + if (bridge_ctx->enabled == true) + { + if (bridge_ctx->thread_term != BRIDGE_DEFAULT) + { + bridge_ctx->thread_term (bridge_ctx->platform_context, device_param, hashconfig, hashes); + } + } + if (device_param->is_opencl == true) { if (hc_clFinish (hashcat_ctx, device_param->opencl_command_queue) == -1) return NULL; diff --git a/src/terminal.c b/src/terminal.c index d87faed19..9ceaf5706 100644 --- a/src/terminal.c +++ b/src/terminal.c @@ -1179,11 +1179,11 @@ void backend_info (hashcat_ctx_t *hashcat_ctx) if (device_param->device_id_alias_cnt) { - event_log_info (hashcat_ctx, "Backend Device ID #%u (Alias: #%u)", device_id + 1, device_param->device_id_alias_buf[0] + 1); + event_log_info (hashcat_ctx, "Backend Device ID #%02u (Alias: #%02u)", device_id + 1, device_param->device_id_alias_buf[0] + 1); } else { - event_log_info (hashcat_ctx, "Backend Device ID #%u", device_id + 1); + event_log_info (hashcat_ctx, "Backend Device ID #%02u", device_id + 1); } event_log_info (hashcat_ctx, " Name...........: %s", device_name); @@ -1241,11 +1241,11 @@ void backend_info (hashcat_ctx_t *hashcat_ctx) if (device_param->device_id_alias_cnt) { - event_log_info (hashcat_ctx, "Backend Device ID #%u (Alias: #%u)", device_id + 1, device_param->device_id_alias_buf[0] + 1); + event_log_info (hashcat_ctx, "Backend Device ID #%02u (Alias: #%02u)", device_id + 1, device_param->device_id_alias_buf[0] + 1); } else { - event_log_info (hashcat_ctx, "Backend Device ID #%u", device_id + 1); + event_log_info (hashcat_ctx, "Backend Device ID #%02u", device_id + 1); } event_log_info (hashcat_ctx, " Name...........: %s", device_name); @@ -1305,11 +1305,11 @@ void backend_info (hashcat_ctx_t *hashcat_ctx) if (device_param->device_id_alias_cnt) { - event_log_info (hashcat_ctx, "Backend Device ID #%u (Alias: #%u)", device_id + 1, device_param->device_id_alias_buf[0] + 1); + event_log_info (hashcat_ctx, "Backend Device ID #%02u (Alias: #%02u)", device_id + 1, device_param->device_id_alias_buf[0] + 1); } else { - event_log_info (hashcat_ctx, "Backend Device ID #%u", device_id + 1); + event_log_info (hashcat_ctx, "Backend Device ID #%02u", device_id + 1); } event_log_info (hashcat_ctx, " Type...........: %s", ((opencl_device_type & CL_DEVICE_TYPE_CPU) ? "CPU" : ((opencl_device_type & CL_DEVICE_TYPE_GPU) ? "GPU" : "Accelerator"))); @@ -1407,11 +1407,11 @@ void backend_info (hashcat_ctx_t *hashcat_ctx) if (device_param->device_id_alias_cnt) { - event_log_info (hashcat_ctx, " Backend Device ID #%u (Alias: #%u)", device_id + 1, device_param->device_id_alias_buf[0] + 1); + event_log_info (hashcat_ctx, " Backend Device ID #%02u (Alias: #%02u)", device_id + 1, device_param->device_id_alias_buf[0] + 1); } else { - event_log_info (hashcat_ctx, " Backend Device ID #%u", device_id + 1); + event_log_info (hashcat_ctx, " Backend Device ID #%02u", device_id + 1); } event_log_info (hashcat_ctx, " Type...........: %s", ((opencl_device_type & CL_DEVICE_TYPE_CPU) ? "CPU" : ((opencl_device_type & CL_DEVICE_TYPE_GPU) ? "GPU" : "Accelerator"))); @@ -1452,6 +1452,7 @@ void backend_info (hashcat_ctx_t *hashcat_ctx) void backend_info_compact (hashcat_ctx_t *hashcat_ctx) { + const bridge_ctx_t *bridge_ctx = hashcat_ctx->bridge_ctx; const backend_ctx_t *backend_ctx = hashcat_ctx->backend_ctx; const user_options_t *user_options = hashcat_ctx->user_options; @@ -1459,6 +1460,53 @@ void backend_info_compact (hashcat_ctx_t *hashcat_ctx) if (user_options->machine_readable == true) return; if (user_options->status_json == true) return; + /** + * Bridges + */ + + if (bridge_ctx->enabled == true) + { + const int unit_count = bridge_ctx->get_unit_count (bridge_ctx->platform_context); + + const size_t len = event_log_info (hashcat_ctx, "Assimilation Bridge"); + + char line[HCBUFSIZ_TINY] = { 0 }; + + memset (line, '=', len); + + line[len] = 0; + + event_log_info (hashcat_ctx, "%s", line); + + bool all_same = true; + + char *tmp = bridge_ctx->get_unit_info (bridge_ctx->platform_context, 0); + + for (int i = 1; i < unit_count; i++) + { + if (strcmp (tmp, bridge_ctx->get_unit_info (bridge_ctx->platform_context, i))) + { + all_same = false; + + break; + } + } + + if (all_same == true) + { + event_log_info (hashcat_ctx, "* Unit #%02d -> #%02d: %s", 1, unit_count, tmp); + } + else + { + for (int i = 0; i < unit_count; i++) + { + event_log_info (hashcat_ctx, "* Unit #%02d: %s", i + 1, bridge_ctx->get_unit_info (bridge_ctx->platform_context, i)); + } + } + + event_log_info (hashcat_ctx, NULL); + } + /** * CUDA */ @@ -1468,46 +1516,83 @@ void backend_info_compact (hashcat_ctx_t *hashcat_ctx) int cuda_devices_cnt = backend_ctx->cuda_devices_cnt; int cuda_driver_version = backend_ctx->cuda_driver_version; - const size_t len = event_log_info (hashcat_ctx, "CUDA API (CUDA %u.%u)", cuda_driver_version / 1000, (cuda_driver_version % 100) / 10); - - char line[HCBUFSIZ_TINY] = { 0 }; - - memset (line, '=', len); - - line[len] = 0; - - event_log_info (hashcat_ctx, "%s", line); - - for (int cuda_devices_idx = 0; cuda_devices_idx < cuda_devices_cnt; cuda_devices_idx++) + // hide empty CUDA platforms + if (cuda_devices_cnt) { - const int backend_devices_idx = backend_ctx->backend_device_from_cuda[cuda_devices_idx]; + const size_t len = event_log_info (hashcat_ctx, "CUDA API (CUDA %u.%u)", cuda_driver_version / 1000, (cuda_driver_version % 100) / 10); - const hc_device_param_t *device_param = backend_ctx->devices_param + backend_devices_idx; + char line[HCBUFSIZ_TINY] = { 0 }; - int device_id = device_param->device_id; - char *device_name = device_param->device_name; - u32 device_processors = device_param->device_processors; - u64 device_global_mem = device_param->device_global_mem; - u64 device_available_mem = device_param->device_available_mem; + memset (line, '=', len); - if ((device_param->skipped == false) && (device_param->skipped_warning == false)) + line[len] = 0; + + event_log_info (hashcat_ctx, "%s", line); + + if (bridge_ctx->enabled == true) { - event_log_info (hashcat_ctx, "* Device #%u: %s, %" PRIu64 "/%" PRIu64 " MB, %uMCU", - device_id + 1, - device_name, - device_available_mem / 1024 / 1024, - device_global_mem / 1024 / 1024, - device_processors); + const int unit_count = bridge_ctx->get_unit_count (bridge_ctx->platform_context); + + const int backend_devices_idx = backend_ctx->backend_device_from_cuda[0]; + + const hc_device_param_t *device_param = backend_ctx->devices_param + backend_devices_idx; + + int device_id = device_param->device_id; + char *device_name = device_param->device_name; + u32 device_processors = device_param->device_processors; + u64 device_global_mem = device_param->device_global_mem; + u64 device_available_mem = device_param->device_available_mem; + + if ((device_param->skipped == false) && (device_param->skipped_warning == false)) + { + event_log_info (hashcat_ctx, "* Device #%02u -> #%02u: %s, %" PRIu64 "/%" PRIu64 " MB, %uMCU", + device_id + 1, unit_count, + device_name, + device_available_mem / 1024 / 1024, + device_global_mem / 1024 / 1024, + device_processors); + } + else + { + event_log_info (hashcat_ctx, "* Device #%02u -> #%02u: %s, skipped", + device_id + 1, unit_count, + device_name); + } } else { - event_log_info (hashcat_ctx, "* Device #%u: %s, skipped", - device_id + 1, - device_name); - } - } + for (int cuda_devices_idx = 0; cuda_devices_idx < cuda_devices_cnt; cuda_devices_idx++) + { + const int backend_devices_idx = backend_ctx->backend_device_from_cuda[cuda_devices_idx]; - event_log_info (hashcat_ctx, NULL); + const hc_device_param_t *device_param = backend_ctx->devices_param + backend_devices_idx; + + int device_id = device_param->device_id; + char *device_name = device_param->device_name; + u32 device_processors = device_param->device_processors; + u64 device_global_mem = device_param->device_global_mem; + u64 device_available_mem = device_param->device_available_mem; + + if ((device_param->skipped == false) && (device_param->skipped_warning == false)) + { + event_log_info (hashcat_ctx, "* Device #%02u: %s, %" PRIu64 "/%" PRIu64 " MB, %uMCU", + device_id + 1, + device_name, + device_available_mem / 1024 / 1024, + device_global_mem / 1024 / 1024, + device_processors); + } + else + { + event_log_info (hashcat_ctx, "* Device #%02u: %s, skipped", + device_id + 1, + device_name); + } + } + } + + event_log_info (hashcat_ctx, NULL); + } } /** @@ -1519,59 +1604,96 @@ void backend_info_compact (hashcat_ctx_t *hashcat_ctx) int hip_devices_cnt = backend_ctx->hip_devices_cnt; int hip_runtimeVersion = backend_ctx->hip_runtimeVersion; - size_t len; - - if (hip_runtimeVersion > 1000) + // hide empty HIP platforms + if (hip_devices_cnt) { - int hip_version_major = (hip_runtimeVersion - 0) / 10000000; - int hip_version_minor = (hip_runtimeVersion - (hip_version_major * 10000000)) / 100000; - int hip_version_patch = (hip_runtimeVersion - (hip_version_major * 10000000) - (hip_version_minor * 100000)); + size_t len; - len = event_log_info (hashcat_ctx, "HIP API (HIP %u.%u.%u)", hip_version_major, hip_version_minor, hip_version_patch); - } - else - { - len = event_log_info (hashcat_ctx, "HIP API (HIP %u.%u)", hip_runtimeVersion / 100, hip_runtimeVersion % 10); - } - - char line[HCBUFSIZ_TINY] = { 0 }; - - memset (line, '=', len); - - line[len] = 0; - - event_log_info (hashcat_ctx, "%s", line); - - for (int hip_devices_idx = 0; hip_devices_idx < hip_devices_cnt; hip_devices_idx++) - { - const int backend_devices_idx = backend_ctx->backend_device_from_hip[hip_devices_idx]; - - const hc_device_param_t *device_param = backend_ctx->devices_param + backend_devices_idx; - - int device_id = device_param->device_id; - char *device_name = device_param->device_name; - u32 device_processors = device_param->device_processors; - u64 device_global_mem = device_param->device_global_mem; - u64 device_available_mem = device_param->device_available_mem; - - if ((device_param->skipped == false) && (device_param->skipped_warning == false)) + if (hip_runtimeVersion > 1000) { - event_log_info (hashcat_ctx, "* Device #%u: %s, %" PRIu64 "/%" PRIu64 " MB, %uMCU", - device_id + 1, - device_name, - device_available_mem / 1024 / 1024, - device_global_mem / 1024 / 1024, - device_processors); + int hip_version_major = (hip_runtimeVersion - 0) / 10000000; + int hip_version_minor = (hip_runtimeVersion - (hip_version_major * 10000000)) / 100000; + int hip_version_patch = (hip_runtimeVersion - (hip_version_major * 10000000) - (hip_version_minor * 100000)); + + len = event_log_info (hashcat_ctx, "HIP API (HIP %u.%u.%u)", hip_version_major, hip_version_minor, hip_version_patch); } else { - event_log_info (hashcat_ctx, "* Device #%u: %s, skipped", - device_id + 1, - device_name); + len = event_log_info (hashcat_ctx, "HIP API (HIP %u.%u)", hip_runtimeVersion / 100, hip_runtimeVersion % 10); } - } - event_log_info (hashcat_ctx, NULL); + char line[HCBUFSIZ_TINY] = { 0 }; + + memset (line, '=', len); + + line[len] = 0; + + event_log_info (hashcat_ctx, "%s", line); + + if (bridge_ctx->enabled == true) + { + const int unit_count = bridge_ctx->get_unit_count (bridge_ctx->platform_context); + + const int backend_devices_idx = backend_ctx->backend_device_from_hip[0]; + + const hc_device_param_t *device_param = backend_ctx->devices_param + backend_devices_idx; + + int device_id = device_param->device_id; + char *device_name = device_param->device_name; + u32 device_processors = device_param->device_processors; + u64 device_global_mem = device_param->device_global_mem; + u64 device_available_mem = device_param->device_available_mem; + + if ((device_param->skipped == false) && (device_param->skipped_warning == false)) + { + event_log_info (hashcat_ctx, "* Device #%02u -> #%02u: %s, %" PRIu64 "/%" PRIu64 " MB, %uMCU", + device_id + 1, unit_count, + device_name, + device_available_mem / 1024 / 1024, + device_global_mem / 1024 / 1024, + device_processors); + } + else + { + event_log_info (hashcat_ctx, "* Device #%02u -> #%02u: %s, skipped", + device_id + 1, unit_count, + device_name); + } + } + else + { + for (int hip_devices_idx = 0; hip_devices_idx < hip_devices_cnt; hip_devices_idx++) + { + const int backend_devices_idx = backend_ctx->backend_device_from_hip[hip_devices_idx]; + + const hc_device_param_t *device_param = backend_ctx->devices_param + backend_devices_idx; + + int device_id = device_param->device_id; + char *device_name = device_param->device_name; + u32 device_processors = device_param->device_processors; + u64 device_global_mem = device_param->device_global_mem; + u64 device_available_mem = device_param->device_available_mem; + + if ((device_param->skipped == false) && (device_param->skipped_warning == false)) + { + event_log_info (hashcat_ctx, "* Device #%02u: %s, %" PRIu64 "/%" PRIu64 " MB, %uMCU", + device_id + 1, + device_name, + device_available_mem / 1024 / 1024, + device_global_mem / 1024 / 1024, + device_processors); + } + else + { + event_log_info (hashcat_ctx, "* Device #%02u: %s, skipped", + device_id + 1, + device_name); + } + } + } + + event_log_info (hashcat_ctx, NULL); + } } #if defined (__APPLE__) @@ -1581,50 +1703,88 @@ void backend_info_compact (hashcat_ctx_t *hashcat_ctx) if (backend_ctx->mtl) { - int metal_devices_cnt = backend_ctx->metal_devices_cnt; + int metal_devices_cnt = backend_ctx->metal_devices_cnt; - char *metal_runtimeVersionStr = backend_ctx->metal_runtimeVersionStr; + // hide empty Metal platforms + if (metal_devices_cnt) + { + char *metal_runtimeVersionStr = backend_ctx->metal_runtimeVersionStr; - size_t len = event_log_info (hashcat_ctx, "METAL API (Metal %s)", metal_runtimeVersionStr); + size_t len = event_log_info (hashcat_ctx, "METAL API (Metal %s)", metal_runtimeVersionStr); - char line[HCBUFSIZ_TINY] = { 0 }; + char line[HCBUFSIZ_TINY] = { 0 }; - memset (line, '=', len); + memset (line, '=', len); - line[len] = 0; + line[len] = 0; - event_log_info (hashcat_ctx, "%s", line); + event_log_info (hashcat_ctx, "%s", line); - for (int metal_devices_idx = 0; metal_devices_idx < metal_devices_cnt; metal_devices_idx++) - { - const int backend_devices_idx = backend_ctx->backend_device_from_metal[metal_devices_idx]; - - const hc_device_param_t *device_param = backend_ctx->devices_param + backend_devices_idx; - - int device_id = device_param->device_id; - char *device_name = device_param->device_name; - u32 device_processors = device_param->device_processors; - u64 device_global_mem = device_param->device_global_mem; - u64 device_available_mem = device_param->device_available_mem; - - if ((device_param->skipped == false) && (device_param->skipped_warning == false)) + if (bridge_ctx->enabled == true) { - event_log_info (hashcat_ctx, "* Device #%u: %s, %" PRIu64 "/%" PRIu64 " MB, %uMCU", - device_id + 1, - device_name, - device_available_mem / 1024 / 1024, - device_global_mem / 1024 / 1024, - device_processors); + const int unit_count = bridge_ctx->get_unit_count (bridge_ctx->platform_context); + + const int backend_devices_idx = backend_ctx->backend_device_from_metal[0]; + + const hc_device_param_t *device_param = backend_ctx->devices_param + backend_devices_idx; + + int device_id = device_param->device_id; + char *device_name = device_param->device_name; + u32 device_processors = device_param->device_processors; + u64 device_global_mem = device_param->device_global_mem; + u64 device_available_mem = device_param->device_available_mem; + + if ((device_param->skipped == false) && (device_param->skipped_warning == false)) + { + event_log_info (hashcat_ctx, "* Device #%02u -> #%02u: %s, %" PRIu64 "/%" PRIu64 " MB, %uMCU", + device_id + 1, unit_count, + device_name, + device_available_mem / 1024 / 1024, + device_global_mem / 1024 / 1024, + device_processors); + } + else + { + event_log_info (hashcat_ctx, "* Device #%02u -> #%02u: %s, skipped", + device_id + 1, unit_count, + device_name); + } + } else { - event_log_info (hashcat_ctx, "* Device #%u: %s, skipped", - device_id + 1, - device_name); - } - } + for (int metal_devices_idx = 0; metal_devices_idx < metal_devices_cnt; metal_devices_idx++) + { + const int backend_devices_idx = backend_ctx->backend_device_from_metal[metal_devices_idx]; - event_log_info (hashcat_ctx, NULL); + const hc_device_param_t *device_param = backend_ctx->devices_param + backend_devices_idx; + + int device_id = device_param->device_id; + char *device_name = device_param->device_name; + u32 device_processors = device_param->device_processors; + u64 device_global_mem = device_param->device_global_mem; + u64 device_available_mem = device_param->device_available_mem; + + if ((device_param->skipped == false) && (device_param->skipped_warning == false)) + { + event_log_info (hashcat_ctx, "* Device #%02u: %s, %" PRIu64 "/%" PRIu64 " MB, %uMCU", + device_id + 1, + device_name, + device_available_mem / 1024 / 1024, + device_global_mem / 1024 / 1024, + device_processors); + } + else + { + event_log_info (hashcat_ctx, "* Device #%02u: %s, skipped", + device_id + 1, + device_name); + } + } + } + + event_log_info (hashcat_ctx, NULL); + } } #endif @@ -1679,7 +1839,7 @@ void backend_info_compact (hashcat_ctx_t *hashcat_ctx) const char *device_type_desc = ((opencl_device_type & CL_DEVICE_TYPE_CPU) ? "CPU" : ((opencl_device_type & CL_DEVICE_TYPE_GPU) ? "GPU" : "Accelerator")); - event_log_info (hashcat_ctx, "* Device #%u: %s, %s, %" PRIu64 "/%" PRIu64 " MB (%" PRIu64 " MB allocatable), %uMCU", + event_log_info (hashcat_ctx, "* Device #%02u: %s, %s, %" PRIu64 "/%" PRIu64 " MB (%" PRIu64 " MB allocatable), %uMCU", device_id + 1, device_name, device_type_desc, @@ -1690,7 +1850,7 @@ void backend_info_compact (hashcat_ctx_t *hashcat_ctx) } else { - event_log_info (hashcat_ctx, "* Device #%u: %s, %" PRIu64 "/%" PRIu64 " MB (%" PRIu64 " MB allocatable), %uMCU", + event_log_info (hashcat_ctx, "* Device #%02u: %s, %" PRIu64 "/%" PRIu64 " MB (%" PRIu64 " MB allocatable), %uMCU", device_id + 1, device_name, device_available_mem / 1024 / 1024, @@ -1701,7 +1861,7 @@ void backend_info_compact (hashcat_ctx_t *hashcat_ctx) } else { - event_log_info (hashcat_ctx, "* Device #%u: %s, skipped", + event_log_info (hashcat_ctx, "* Device #%02u: %s, skipped", device_id + 1, device_name); } @@ -1924,7 +2084,7 @@ void status_display_status_json (hashcat_ctx_t *hashcat_ctx) printf (","); } - printf (" { \"device_id\": %u,", device_id + 1); + printf (" { \"device_id\": %02u,", device_id + 1); char *device_name_json_encoded = (char *) hcmalloc (strlen (device_info->device_name) * 2); @@ -1970,6 +2130,7 @@ void status_display_status_json (hashcat_ctx_t *hashcat_ctx) void status_display (hashcat_ctx_t *hashcat_ctx) { + const bridge_ctx_t *bridge_ctx = hashcat_ctx->bridge_ctx; const hashconfig_t *hashconfig = hashcat_ctx->hashconfig; const hwmon_ctx_t *hwmon_ctx = hashcat_ctx->hwmon_ctx; const user_options_t *user_options = hashcat_ctx->user_options; @@ -2359,21 +2520,40 @@ void status_display (hashcat_ctx_t *hashcat_ctx) break; } - for (int device_id = 0; device_id < hashcat_status->device_info_cnt; device_id++) + if (bridge_ctx->enabled == true) { - const device_info_t *device_info = hashcat_status->device_info_buf + device_id; + if (hashcat_status->device_info_cnt == 1) + { + const device_info_t *device_info0 = hashcat_status->device_info_buf + 0; + + event_log_info (hashcat_ctx, + "Speed.#%02u........: %9sH/s (%0.2fms) @ Accel:%u Loops:%u Thr:%u Vec:%u", 0 + 1, + device_info0->speed_sec_dev, + device_info0->exec_msec_dev, + device_info0->kernel_accel_dev, + device_info0->kernel_loops_dev, + device_info0->kernel_threads_dev, + device_info0->vector_width_dev); + } + } + else + { + for (int device_id = 0; device_id < hashcat_status->device_info_cnt; device_id++) + { + const device_info_t *device_info = hashcat_status->device_info_buf + device_id; - if (device_info->skipped_dev == true) continue; - if (device_info->skipped_warning_dev == true) continue; + if (device_info->skipped_dev == true) continue; + if (device_info->skipped_warning_dev == true) continue; - event_log_info (hashcat_ctx, - "Speed.#%u.........: %9sH/s (%0.2fms) @ Accel:%u Loops:%u Thr:%u Vec:%u", device_id + 1, - device_info->speed_sec_dev, - device_info->exec_msec_dev, - device_info->kernel_accel_dev, - device_info->kernel_loops_dev, - device_info->kernel_threads_dev, - device_info->vector_width_dev); + event_log_info (hashcat_ctx, + "Speed.#%02u........: %9sH/s (%0.2fms) @ Accel:%u Loops:%u Thr:%u Vec:%u", device_id + 1, + device_info->speed_sec_dev, + device_info->exec_msec_dev, + device_info->kernel_accel_dev, + device_info->kernel_loops_dev, + device_info->kernel_threads_dev, + device_info->vector_width_dev); + } } if (hashcat_status->device_info_active > 1) @@ -2491,7 +2671,7 @@ void status_display (hashcat_ctx_t *hashcat_ctx) if (device_info->brain_link_status_dev == BRAIN_LINK_STATUS_CONNECTED) { event_log_info (hashcat_ctx, - "Brain.Link.#%u....: RX: %sB (%sbps), TX: %sB (%sbps), idle", device_id + 1, + "Brain.Link.#%02u...: RX: %sB (%sbps), TX: %sB (%sbps), idle", device_id + 1, device_info->brain_link_recv_bytes_dev, device_info->brain_link_recv_bytes_sec_dev, device_info->brain_link_send_bytes_dev, @@ -2500,7 +2680,7 @@ void status_display (hashcat_ctx_t *hashcat_ctx) else if (device_info->brain_link_status_dev == BRAIN_LINK_STATUS_RECEIVING) { event_log_info (hashcat_ctx, - "Brain.Link.#%u....: RX: %sB (%sbps), TX: %sB (%sbps), receiving", device_id + 1, + "Brain.Link.#%02u...: RX: %sB (%sbps), TX: %sB (%sbps), receiving", device_id + 1, device_info->brain_link_recv_bytes_dev, device_info->brain_link_recv_bytes_sec_dev, device_info->brain_link_send_bytes_dev, @@ -2509,7 +2689,7 @@ void status_display (hashcat_ctx_t *hashcat_ctx) else if (device_info->brain_link_status_dev == BRAIN_LINK_STATUS_SENDING) { event_log_info (hashcat_ctx, - "Brain.Link.#%u....: RX: %sB (%sbps), TX: %sB (%sbps), sending", device_id + 1, + "Brain.Link.#%02u...: RX: %sB (%sbps), TX: %sB (%sbps), sending", device_id + 1, device_info->brain_link_recv_bytes_dev, device_info->brain_link_recv_bytes_sec_dev, device_info->brain_link_send_bytes_dev, @@ -2520,7 +2700,7 @@ void status_display (hashcat_ctx_t *hashcat_ctx) if ((device_info->brain_link_time_recv_dev > 0) && (device_info->brain_link_time_send_dev > 0)) { event_log_info (hashcat_ctx, - "Brain.Link.#%u....: RX: %sB (%sbps), TX: %sB (%sbps)", device_id + 1, + "Brain.Link.#%02u...: RX: %sB (%sbps), TX: %sB (%sbps)", device_id + 1, device_info->brain_link_recv_bytes_dev, device_info->brain_link_recv_bytes_sec_dev, device_info->brain_link_send_bytes_dev, @@ -2529,7 +2709,7 @@ void status_display (hashcat_ctx_t *hashcat_ctx) else { event_log_info (hashcat_ctx, - "Brain.Link.#%u....: N/A", device_id + 1); + "Brain.Link.#%02u...: N/A", device_id + 1); } } } @@ -2557,22 +2737,37 @@ void status_display (hashcat_ctx_t *hashcat_ctx) break; } - for (int device_id = 0; device_id < hashcat_status->device_info_cnt; device_id++) + if (bridge_ctx->enabled == true) { - const device_info_t *device_info = hashcat_status->device_info_buf + device_id; - - if (device_info->skipped_dev == true) continue; - if (device_info->skipped_warning_dev == true) continue; + const device_info_t *device_info = hashcat_status->device_info_buf + 0; event_log_info (hashcat_ctx, - "Restore.Sub.#%u...: Salt:%u Amplifier:%u-%u Iteration:%u-%u", device_id + 1, + "Restore.Sub.#%02u..: Salt:%u Amplifier:%u-%u Iteration:%u-%u", 0 + 1, device_info->salt_pos_dev, device_info->innerloop_pos_dev, device_info->innerloop_pos_dev + device_info->innerloop_left_dev, device_info->iteration_pos_dev, device_info->iteration_pos_dev + device_info->iteration_left_dev); } + else + { + for (int device_id = 0; device_id < hashcat_status->device_info_cnt; device_id++) + { + const device_info_t *device_info = hashcat_status->device_info_buf + device_id; + if (device_info->skipped_dev == true) continue; + if (device_info->skipped_warning_dev == true) continue; + + event_log_info (hashcat_ctx, + "Restore.Sub.#%02u..: Salt:%u Amplifier:%u-%u Iteration:%u-%u", device_id + 1, + device_info->salt_pos_dev, + device_info->innerloop_pos_dev, + device_info->innerloop_pos_dev + device_info->innerloop_left_dev, + device_info->iteration_pos_dev, + device_info->iteration_pos_dev + device_info->iteration_left_dev); + } + } + //if (hashconfig->opts_type & OPTS_TYPE_SLOW_CANDIDATES) if (user_options->slow_candidates == true) { @@ -2583,18 +2778,32 @@ void status_display (hashcat_ctx_t *hashcat_ctx) event_log_info (hashcat_ctx, "Candidate.Engine.: Device Generator"); } - for (int device_id = 0; device_id < hashcat_status->device_info_cnt; device_id++) + if (bridge_ctx->enabled == true) { - const device_info_t *device_info = hashcat_status->device_info_buf + device_id; + const device_info_t *device_info = hashcat_status->device_info_buf + 0; - if (device_info->skipped_dev == true) continue; - if (device_info->skipped_warning_dev == true) continue; + if (device_info->guess_candidates_dev) + { + event_log_info (hashcat_ctx, + "Candidates.#%02u...: %s", 0 + 1, + device_info->guess_candidates_dev); + } + } + else + { + for (int device_id = 0; device_id < hashcat_status->device_info_cnt; device_id++) + { + const device_info_t *device_info = hashcat_status->device_info_buf + device_id; - if (device_info->guess_candidates_dev == NULL) continue; + if (device_info->skipped_dev == true) continue; + if (device_info->skipped_warning_dev == true) continue; - event_log_info (hashcat_ctx, - "Candidates.#%u....: %s", device_id + 1, - device_info->guess_candidates_dev); + if (device_info->guess_candidates_dev == NULL) continue; + + event_log_info (hashcat_ctx, + "Candidates.#%02u...: %s", device_id + 1, + device_info->guess_candidates_dev); + } } if (hwmon_ctx->enabled == true) @@ -2603,26 +2812,48 @@ void status_display (hashcat_ctx_t *hashcat_ctx) bool first_dev = true; #endif - for (int device_id = 0; device_id < hashcat_status->device_info_cnt; device_id++) + if (bridge_ctx->enabled == true) { - const device_info_t *device_info = hashcat_status->device_info_buf + device_id; + const device_info_t *device_info = hashcat_status->device_info_buf + 0; - if (device_info->skipped_dev == true) continue; - if (device_info->skipped_warning_dev == true) continue; - - if (device_info->hwmon_dev == NULL) continue; - - #if defined(__APPLE__) - if (first_dev && strlen (device_info->hwmon_fan_dev) > 0) + if (device_info->hwmon_dev) { - event_log_info (hashcat_ctx, "Hardware.Mon.SMC.: %s", device_info->hwmon_fan_dev); - first_dev = false; - } - #endif + #if defined(__APPLE__) + if (first_dev && strlen (device_info->hwmon_fan_dev) > 0) + { + event_log_info (hashcat_ctx, "Hardware.Mon.SMC.: %s", device_info->hwmon_fan_dev); + first_dev = false; + } + #endif - event_log_info (hashcat_ctx, - "Hardware.Mon.#%u..: %s", device_id + 1, - device_info->hwmon_dev); + event_log_info (hashcat_ctx, + "Hardware.Mon.#%02u.: %s", 0 + 1, + device_info->hwmon_dev); + } + } + else + { + for (int device_id = 0; device_id < hashcat_status->device_info_cnt; device_id++) + { + const device_info_t *device_info = hashcat_status->device_info_buf + device_id; + + if (device_info->skipped_dev == true) continue; + if (device_info->skipped_warning_dev == true) continue; + + if (device_info->hwmon_dev == NULL) continue; + + #if defined(__APPLE__) + if (first_dev && strlen (device_info->hwmon_fan_dev) > 0) + { + event_log_info (hashcat_ctx, "Hardware.Mon.SMC.: %s", device_info->hwmon_fan_dev); + first_dev = false; + } + #endif + + event_log_info (hashcat_ctx, + "Hardware.Mon.#%02u.: %s", device_id + 1, + device_info->hwmon_dev); + } } } @@ -2689,7 +2920,7 @@ void status_benchmark (hashcat_ctx_t *hashcat_ctx) if (device_info->skipped_warning_dev == true) continue; event_log_info (hashcat_ctx, - "Speed.#%u.........: %9sH/s (%0.2fms) @ Accel:%u Loops:%u Thr:%u Vec:%u", device_id + 1, + "Speed.#%02u........: %9sH/s (%0.2fms) @ Accel:%u Loops:%u Thr:%u Vec:%u", device_id + 1, device_info->speed_sec_dev, device_info->exec_msec_dev, device_info->kernel_accel_dev, @@ -2810,7 +3041,7 @@ void status_speed (hashcat_ctx_t *hashcat_ctx) if (device_info->skipped_warning_dev == true) continue; event_log_info (hashcat_ctx, - "Speed.#%u.........: %9sH/s (%0.2fms)", device_id + 1, + "Speed.#%02u........: %9sH/s (%0.2fms)", device_id + 1, device_info->speed_sec_dev, device_info->exec_msec_dev); } @@ -2928,7 +3159,7 @@ void status_progress (hashcat_ctx_t *hashcat_ctx) if (device_info->skipped_warning_dev == true) continue; event_log_info (hashcat_ctx, - "Progress.#%u......: %" PRIu64, device_id + 1, + "Progress.#%02u.....: %" PRIu64, device_id + 1, device_info->progress_dev); } @@ -2940,7 +3171,7 @@ void status_progress (hashcat_ctx_t *hashcat_ctx) if (device_info->skipped_warning_dev == true) continue; event_log_info (hashcat_ctx, - "Runtime.#%u.......: %0.2fms", device_id + 1, + "Runtime.#%02u......: %0.2fms", device_id + 1, device_info->runtime_msec_dev); } diff --git a/src/usage.c b/src/usage.c index 870c790d0..13036f510 100644 --- a/src/usage.c +++ b/src/usage.c @@ -94,6 +94,10 @@ static const char *const USAGE_BIG_PRE_HASHMODES[] = " -c, --segment-size | Num | Sets size in MB to cache from the wordfile to X | -c 32", " --bitmap-min | Num | Sets minimum bits allowed for bitmaps to X | --bitmap-min=24", " --bitmap-max | Num | Sets maximum bits allowed for bitmaps to X | --bitmap-max=24", + " --bridge-parameter1 | Str | Sets the generatic parameter 1 for a Bridge |", + " --bridge-parameter2 | Str | Sets the generatic parameter 2 for a Bridge |", + " --bridge-parameter3 | Str | Sets the generatic parameter 3 for a Bridge |", + " --bridge-parameter4 | Str | Sets the generatic parameter 4 for a Bridge |", " --cpu-affinity | Str | Locks to CPU devices, separated with commas | --cpu-affinity=1,2,3", " --hook-threads | Num | Sets number of threads for a hook (per compute unit) | --hook-threads=8", " --hash-info | | Show information for each hash-mode |", @@ -104,7 +108,8 @@ static const char *const USAGE_BIG_PRE_HASHMODES[] = " --backend-ignore-opencl | | Do not try to open OpenCL interface on startup |", " -I, --backend-info | | Show system/environment/backend API info | -I or -II", " -d, --backend-devices | Str | Backend devices to use, separated with commas | -d 1", - " -Y, --backend-devices-virtual | Num | Spawn X virtual instances for each real device | -Y 8", + " -Y, --backend-devices-virtmulti| Num | Spawn X virtual instances on a real device | -Y 8", + " -R, --backend-devices-virthost | Num | Sets the real device to create virtual instances | -R 1", " -D, --opencl-device-types | Str | OpenCL device-types to use, separated with commas | -D 1", " -O, --optimized-kernel-enable | | Enable optimized kernels (limits password length) |", " -M, --multiply-accel-disable | | Disable multiply kernel-accel with processor count |", diff --git a/src/user_options.c b/src/user_options.c index 2adfc7ac2..25f1324a0 100644 --- a/src/user_options.c +++ b/src/user_options.c @@ -21,9 +21,9 @@ #endif #ifdef WITH_BRAIN -static const char *const short_options = "hVvm:a:r:j:k:g:o:t:d:D:n:u:T:c:p:s:l:1:2:3:4:iIbw:OMSY:z"; +static const char *const short_options = "hVvm:a:r:j:k:g:o:t:d:D:n:u:T:c:p:s:l:1:2:3:4:iIbw:OMSY:R:z"; #else -static const char *const short_options = "hVvm:a:r:j:k:g:o:t:d:D:n:u:T:c:p:s:l:1:2:3:4:iIbw:OMSY:"; +static const char *const short_options = "hVvm:a:r:j:k:g:o:t:d:D:n:u:T:c:p:s:l:1:2:3:4:iIbw:OMSY:R:"; #endif static char *const SEPARATOR = ":"; @@ -33,7 +33,8 @@ static const struct option long_options[] = {"advice-disable", no_argument, NULL, IDX_ADVICE_DISABLE}, {"attack-mode", required_argument, NULL, IDX_ATTACK_MODE}, {"backend-devices", required_argument, NULL, IDX_BACKEND_DEVICES}, - {"backend-devices-virtual", required_argument, NULL, IDX_BACKEND_DEVICES_VIRTUAL}, + {"backend-devices-virtmulti", required_argument, NULL, IDX_BACKEND_DEVICES_VIRTMULTI}, + {"backend-devices-virthost", required_argument, NULL, IDX_BACKEND_DEVICES_VIRTHOST}, {"backend-ignore-cuda", no_argument, NULL, IDX_BACKEND_IGNORE_CUDA}, {"backend-ignore-hip", no_argument, NULL, IDX_BACKEND_IGNORE_HIP}, #if defined (__APPLE__) @@ -48,6 +49,10 @@ static const struct option long_options[] = {"benchmark", no_argument, NULL, IDX_BENCHMARK}, {"bitmap-max", required_argument, NULL, IDX_BITMAP_MAX}, {"bitmap-min", required_argument, NULL, IDX_BITMAP_MIN}, + {"bridge-parameter1", required_argument, NULL, IDX_BRIDGE_PARAMETER1}, + {"bridge-parameter2", required_argument, NULL, IDX_BRIDGE_PARAMETER2}, + {"bridge-parameter3", required_argument, NULL, IDX_BRIDGE_PARAMETER3}, + {"bridge-parameter4", required_argument, NULL, IDX_BRIDGE_PARAMETER4}, {"cpu-affinity", required_argument, NULL, IDX_CPU_AFFINITY}, {"custom-charset1", required_argument, NULL, IDX_CUSTOM_CHARSET_1}, {"custom-charset2", required_argument, NULL, IDX_CUSTOM_CHARSET_2}, @@ -177,7 +182,8 @@ int user_options_init (hashcat_ctx_t *hashcat_ctx) user_options->attack_mode = ATTACK_MODE; user_options->autodetect = AUTODETECT; user_options->backend_devices = NULL; - user_options->backend_devices_virtual = BACKEND_DEVICES_VIRTUAL; + user_options->backend_devices_virtmulti = BACKEND_DEVICES_VIRTMULTI; + user_options->backend_devices_virthost = BACKEND_DEVICES_VIRTHOST; user_options->backend_ignore_cuda = BACKEND_IGNORE_CUDA; user_options->backend_ignore_hip = BACKEND_IGNORE_HIP; #if defined (__APPLE__) @@ -202,6 +208,10 @@ int user_options_init (hashcat_ctx_t *hashcat_ctx) user_options->brain_session = BRAIN_SESSION; user_options->brain_session_whitelist = NULL; #endif + user_options->bridge_parameter1 = NULL; + user_options->bridge_parameter2 = NULL; + user_options->bridge_parameter3 = NULL; + user_options->bridge_parameter4 = NULL; user_options->cpu_affinity = NULL; user_options->custom_charset_1 = NULL; user_options->custom_charset_2 = NULL; @@ -366,7 +376,8 @@ int user_options_getopt (hashcat_ctx_t *hashcat_ctx, int argc, char **argv) case IDX_INCREMENT_MIN: case IDX_INCREMENT_MAX: case IDX_HOOK_THREADS: - case IDX_BACKEND_DEVICES_VIRTUAL: + case IDX_BACKEND_DEVICES_VIRTMULTI: + case IDX_BACKEND_DEVICES_VIRTHOST: case IDX_BENCHMARK_MAX: case IDX_BENCHMARK_MIN: #ifdef WITH_BRAIN @@ -483,6 +494,10 @@ int user_options_getopt (hashcat_ctx_t *hashcat_ctx, int argc, char **argv) case IDX_HEX_CHARSET: user_options->hex_charset = true; break; case IDX_HEX_SALT: user_options->hex_salt = true; break; case IDX_HEX_WORDLIST: user_options->hex_wordlist = true; break; + case IDX_BRIDGE_PARAMETER1: user_options->bridge_parameter1 = optarg; break; + case IDX_BRIDGE_PARAMETER2: user_options->bridge_parameter2 = optarg; break; + case IDX_BRIDGE_PARAMETER3: user_options->bridge_parameter3 = optarg; break; + case IDX_BRIDGE_PARAMETER4: user_options->bridge_parameter4 = optarg; break; case IDX_CPU_AFFINITY: user_options->cpu_affinity = optarg; break; case IDX_BACKEND_IGNORE_CUDA: user_options->backend_ignore_cuda = true; break; case IDX_BACKEND_IGNORE_HIP: user_options->backend_ignore_hip = true; break; @@ -492,7 +507,8 @@ int user_options_getopt (hashcat_ctx_t *hashcat_ctx, int argc, char **argv) case IDX_BACKEND_IGNORE_OPENCL: user_options->backend_ignore_opencl = true; break; case IDX_BACKEND_INFO: user_options->backend_info++; break; case IDX_BACKEND_DEVICES: user_options->backend_devices = optarg; break; - case IDX_BACKEND_DEVICES_VIRTUAL: user_options->backend_devices_virtual = hc_strtoul (optarg, NULL, 10); break; + case IDX_BACKEND_DEVICES_VIRTMULTI: user_options->backend_devices_virtmulti = hc_strtoul (optarg, NULL, 10); break; + case IDX_BACKEND_DEVICES_VIRTHOST: user_options->backend_devices_virthost = hc_strtoul (optarg, NULL, 10); break; case IDX_BACKEND_VECTOR_WIDTH: user_options->backend_vector_width = hc_strtoul (optarg, NULL, 10); user_options->backend_vector_width_chgd = true; break; case IDX_OPENCL_DEVICE_TYPES: user_options->opencl_device_types = optarg; break; @@ -784,13 +800,20 @@ int user_options_sanity (hashcat_ctx_t *hashcat_ctx) return -1; } - if (user_options->backend_devices_virtual == 0) + if (user_options->backend_devices_virtmulti == 0) { - event_log_error (hashcat_ctx, "Invalid --backend-devices-virtual value specified."); + event_log_error (hashcat_ctx, "Invalid --backend-devices-virtmulti value specified."); return -1; } + if (user_options->backend_devices_virthost == 0) + { + event_log_error (hashcat_ctx, "Invalid --backend-devices-virthost value specified."); + + return -1; + } + if (user_options->outfile_format == 0) { event_log_error (hashcat_ctx, "Invalid --outfile-format value specified."); @@ -2167,9 +2190,14 @@ void user_options_info (hashcat_ctx_t *hashcat_ctx) event_log_info (hashcat_ctx, "* --backend-devices=%s", user_options->backend_devices); } - if (user_options->backend_devices_virtual) + if (user_options->backend_devices_virtmulti) { - event_log_info (hashcat_ctx, "* --backend-devices-virtual=%u", user_options->backend_devices_virtual); + event_log_info (hashcat_ctx, "* --backend-devices-virtmulti=%u", user_options->backend_devices_virtmulti); + } + + if (user_options->backend_devices_virthost) + { + event_log_info (hashcat_ctx, "* --backend-devices-virthost%u", user_options->backend_devices_virthost); } if (user_options->opencl_device_types) @@ -2241,9 +2269,14 @@ void user_options_info (hashcat_ctx_t *hashcat_ctx) event_log_info (hashcat_ctx, "# option: --backend-devices=%s", user_options->backend_devices); } - if (user_options->backend_devices_virtual) + if (user_options->backend_devices_virtmulti) { - event_log_info (hashcat_ctx, "# option: --backend-devices-virtual=%u", user_options->backend_devices_virtual); + event_log_info (hashcat_ctx, "# option: --backend-devices-virtmulti=%u", user_options->backend_devices_virtmulti); + } + + if (user_options->backend_devices_virthost) + { + event_log_info (hashcat_ctx, "# option: --backend-devices-virthost=%u", user_options->backend_devices_virthost); } if (user_options->opencl_device_types) @@ -3245,6 +3278,10 @@ void user_options_logger (hashcat_ctx_t *hashcat_ctx) #ifdef WITH_BRAIN logfile_top_string (user_options->brain_session_whitelist); #endif + logfile_top_string (user_options->bridge_parameter1); + logfile_top_string (user_options->bridge_parameter2); + logfile_top_string (user_options->bridge_parameter3); + logfile_top_string (user_options->bridge_parameter4); logfile_top_string (user_options->cpu_affinity); logfile_top_string (user_options->custom_charset_1); logfile_top_string (user_options->custom_charset_2); @@ -3276,7 +3313,8 @@ void user_options_logger (hashcat_ctx_t *hashcat_ctx) logfile_top_uint64 (user_options->limit); logfile_top_uint64 (user_options->skip); logfile_top_uint (user_options->attack_mode); - logfile_top_uint (user_options->backend_devices_virtual); + logfile_top_uint (user_options->backend_devices_virtmulti); + logfile_top_uint (user_options->backend_devices_virthost); logfile_top_uint (user_options->benchmark); logfile_top_uint (user_options->benchmark_all); logfile_top_uint (user_options->benchmark_max); diff --git a/tools/benchmark_deep.pl b/tools/benchmark_deep.pl index 79bb19580..41c03ac7f 100755 --- a/tools/benchmark_deep.pl +++ b/tools/benchmark_deep.pl @@ -13,7 +13,7 @@ my $amd_cache = "~/.AMD"; my $hashcat_path = "."; my $kernels_cache = "$hashcat_path/kernels"; my $hashcat_bin = "$hashcat_path/hashcat"; -my $device = 3; +my $device = 1; my $workload_profile = 3; my $runtime = 24; my $sleep_sec = 12; diff --git a/tools/package_bin.sh b/tools/package_bin.sh index 2854c4916..832ef1615 100755 --- a/tools/package_bin.sh +++ b/tools/package_bin.sh @@ -14,6 +14,7 @@ rm -rf $OUT.7z mkdir -p $OUT mkdir -p $OUT/tools +mkdir -p $OUT/Python cp $IN/hashcat.exe $OUT/ cp $IN/hashcat.bin $OUT/ @@ -23,6 +24,7 @@ cp -r $IN/docs $OUT/ cp -r $IN/charsets $OUT/ cp -r $IN/layouts $OUT/ cp -r $IN/masks $OUT/ +cp -r $IN/bridges $OUT/ cp -r $IN/modules $OUT/ cp -r $IN/rules $OUT/ cp -r $IN/extra $OUT/ @@ -30,6 +32,7 @@ cp -r $IN/tunings $OUT/ cp $IN/example.dict $OUT/ cp $IN/example[0123456789]*.hash $OUT/ cp $IN/example[0123456789]*.cmd $OUT/ +cp -r $IN/Python/*.py $OUT/Python/ cp -r $IN/OpenCL $OUT/ cp $IN/tools/*hashcat.pl $OUT/tools/ cp $IN/tools/*hashcat.py $OUT/tools/ @@ -60,6 +63,7 @@ unix2dos $OUT/rules/hybrid/*.rule unix2dos $OUT/docs/* unix2dos $OUT/docs/license_libs/* unix2dos $OUT/example*.cmd +unix2dos $OUT/Python/* unix2dos $OUT/OpenCL/* unix2dos $OUT/tools/* unix2dos $OUT/tunings/* @@ -79,6 +83,8 @@ chmod 755 $OUT/layouts chmod 644 $OUT/layouts/* chmod 755 $OUT/masks chmod 644 $OUT/masks/* +chmod 755 $OUT/bridges +chmod 644 $OUT/bridges/* chmod 755 $OUT/modules chmod 644 $OUT/modules/* chmod 644 $OUT/example* @@ -86,6 +92,8 @@ chmod 755 $OUT/example*.sh chmod 755 $OUT/extra chmod 755 $OUT/extra/tab_completion/*.sh chmod 755 $OUT/extra/tab_completion/install +chmod 755 $OUT/Python +chmod 644 $OUT/Python/* chmod 755 $OUT/OpenCL chmod 644 $OUT/OpenCL/* chmod 755 $OUT/tunings From f094ac207bd689e9712a4e75d84e3363d3ffc83e Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Thu, 29 May 2025 21:59:48 +0200 Subject: [PATCH 18/95] trying remove -std=c++14 from CFLAGS_UNRAR --- src/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Makefile b/src/Makefile index 15c587f71..4d8123aa9 100644 --- a/src/Makefile +++ b/src/Makefile @@ -214,7 +214,7 @@ endif ## because UNRAR ifeq ($(ENABLE_UNRAR),1) ifeq ($(USE_SYSTEM_UNRAR),0) -CFLAGS_UNRAR += -std=c++14 +#CFLAGS_UNRAR += -std=c++14 ifneq ($(CC),clang) CFLAGS_UNRAR += -Wno-class-memaccess CFLAGS_UNRAR += -Wno-misleading-indentation From daa41a0ab8c50b8be0b13272c3bcaf6ba2da8298 Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Thu, 29 May 2025 22:05:03 +0200 Subject: [PATCH 19/95] add -std=c++14 for UNRAR only on MacOS --- src/Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Makefile b/src/Makefile index 4d8123aa9..fe28aff62 100644 --- a/src/Makefile +++ b/src/Makefile @@ -214,7 +214,9 @@ endif ## because UNRAR ifeq ($(ENABLE_UNRAR),1) ifeq ($(USE_SYSTEM_UNRAR),0) -#CFLAGS_UNRAR += -std=c++14 +ifeq ($(UNAME),Darwin) +CFLAGS_UNRAR += -std=c++14 +endif ifneq ($(CC),clang) CFLAGS_UNRAR += -Wno-class-memaccess CFLAGS_UNRAR += -Wno-misleading-indentation From b28fa54dc67dcbdce812d3b25342139e3ec04873 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Fri, 30 May 2025 07:37:19 +0200 Subject: [PATCH 20/95] Add build Dockerfiles for binary compilation. Compiles both Linux and Windows binaries. Used to produce official releases for hashcat.net. Includes Dockerfiles for Ubuntu 20.04 or Arch-based environments. Supports optional user custom patches via docker/patches/. --- BUILD.md | 4 ++ BUILD_Docker.md | 40 +++++++++++++ docker/BinaryPackage.arch | 66 +++++++++++++++++++++ docker/BinaryPackage.ubuntu20 | 104 ++++++++++++++++++++++++++++++++++ docker/patches/.gitkeep | 0 5 files changed, 214 insertions(+) create mode 100644 BUILD_Docker.md create mode 100644 docker/BinaryPackage.arch create mode 100644 docker/BinaryPackage.ubuntu20 create mode 100644 docker/patches/.gitkeep diff --git a/BUILD.md b/BUILD.md index b552f48bc..92163a3a1 100644 --- a/BUILD.md +++ b/BUILD.md @@ -61,6 +61,10 @@ Otherwise: - Cached kernels go to: $HOME/.cache/hashcat - Potfiles go to: $HOME/.local/share/hashcat/ +### Building hashcat binaries using Docker ### + +Refer to [BUILD_Docker.md](BUILD_Docker.md) + ### Building hashcat for Windows (using macOS) ### Refer to [BUILD_macOS.md](BUILD_macOS.md) diff --git a/BUILD_Docker.md b/BUILD_Docker.md new file mode 100644 index 000000000..cd957bcc9 --- /dev/null +++ b/BUILD_Docker.md @@ -0,0 +1,40 @@ +# Compiling hashcat binaries with Docker + +To build both Linux and Windows binaries in a clean and reproducible environment a dockerfile is available. +It is not considered to be used as a runtime OS. + +### Building ### + +```bash +docker build -f docker/BinaryPackage.ubuntu20 -t hashcat-binaries . +``` + +This will create a Docker image with all required toolchains and dependencies. + +Optionally you can place custom *.patch or *.diff files into `patches/` folder. They will be applied before compiling. + +### Output ### + +The resulting output package will be located in: `/root/xy/hashcat-.7z`. + +You can copy it to your host with this command: + +```bash +docker run --rm \ + -e HOST_UID=$(id -u) \ + -e HOST_GID=$(id -g) \ + -v $(pwd):/out \ + hashcat-binaries \ + bash -c "cp /root/xy/hashcat-*.7z /out && chown \$HOST_UID:\$HOST_GID /out/hashcat-*.7z" +``` + +The package will be available on your host machine in the `out` directory. + +### Debug ### + +In case you want to play around in the docker, run: + +```bash +docker run --rm -it hashcat-binaries /bin/bash +``` + diff --git a/docker/BinaryPackage.arch b/docker/BinaryPackage.arch new file mode 100644 index 000000000..40d736557 --- /dev/null +++ b/docker/BinaryPackage.arch @@ -0,0 +1,66 @@ +FROM archlinux:latest + +# Set environment +RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && \ + locale-gen && \ + echo "LANG=en_US.UTF-8" > /etc/locale.conf && \ + ln -sf /usr/share/zoneinfo/UTC /etc/localtime +ENV LANG=en_US.UTF-8 +ENV LC_ALL=en_US.UTF-8 + +# Install all necessary packages +RUN pacman -Sy --noconfirm \ + base-devel \ + git \ + cmake \ + unzip \ + wget \ + zstd \ + python \ + mingw-w64-gcc \ + mingw-w64-crt \ + mingw-w64-headers \ + mingw-w64-binutils \ + mingw-w64-winpthreads \ + p7zip \ + dos2unix \ + && pacman -Scc --noconfirm + +# Set source working directory +WORKDIR /root + +# Clone hashcat and win-iconv repositories +RUN git clone https://github.com/win-iconv/win-iconv.git + +# Build win-iconv for Windows target +WORKDIR /root/win-iconv +RUN cmake \ + -D WIN_ICONV_BUILD_EXECUTABLE=OFF \ + -D CMAKE_INSTALL_PREFIX=/opt/win-iconv-64 \ + -D CMAKE_C_COMPILER=$(which x86_64-w64-mingw32-gcc) \ + -D CMAKE_CXX_COMPILER=$(which x86_64-w64-mingw32-g++) \ + . && \ + make -j$(nproc) && make install + +# Download and extract MSYS2 Python headers (still 3.12) +RUN mkdir /opt/cpython-mingw +WORKDIR /opt/cpython-mingw +RUN wget https://repo.msys2.org/mingw/mingw64/mingw-w64-x86_64-python-3.12.10-1-any.pkg.tar.zst && \ + zstd -d mingw-w64-x86_64-python-3.12.10-1-any.pkg.tar.zst && \ + tar -xf mingw-w64-x86_64-python-3.12.10-1-any.pkg.tar + +## Custom patches +WORKDIR /root +COPY docker/patches/ /root/patches/ + +## hashcat +WORKDIR /root +RUN git clone https://github.com/hashcat/hashcat.git + +## Compile +WORKDIR /root/hashcat +RUN bash -c 'shopt -s nullglob; for p in /root/patches/*.patch /root/patches/*.diff; do pwd && git apply "$p"; done' +RUN make -s binaries +RUN tools/package_bin.sh + +CMD ["/bin/bash"] diff --git a/docker/BinaryPackage.ubuntu20 b/docker/BinaryPackage.ubuntu20 new file mode 100644 index 000000000..872ec5b90 --- /dev/null +++ b/docker/BinaryPackage.ubuntu20 @@ -0,0 +1,104 @@ +FROM ubuntu:20.04 + +ENV DEBIAN_FRONTEND=noninteractive + +## Change to bash + +RUN echo "dash dash/sh boolean false" | debconf-set-selections && dpkg-reconfigure dash + +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + ca-certificates \ + build-essential \ + git \ + wget \ + pkg-config \ + make \ + gcc-mingw-w64-x86-64 \ + g++-mingw-w64-x86-64 \ + dos2unix \ + libssl-dev \ + zlib1g-dev \ + libncurses5-dev \ + libncursesw5-dev \ + libreadline-dev \ + libsqlite3-dev \ + libgdbm-dev \ + libdb5.3-dev \ + libbz2-dev \ + libexpat1-dev \ + liblzma-dev tk-dev \ + unzip \ + zstd \ + tar + +WORKDIR /root + +## Ubuntu 20.04 cmake version is incompatible to recent win-iconv so we use our own +RUN wget https://github.com/Kitware/CMake/releases/download/v3.25.3/cmake-3.25.3-linux-x86_64.sh && \ + chmod +x cmake-3.25.3-linux-x86_64.sh && \ + ./cmake-3.25.3-linux-x86_64.sh --skip-license --prefix=/usr/local + +## Also 7z on ubuntu 20.04 is very outdated +WORKDIR /root +RUN git clone --branch 24.09 https://github.com/ip7z/7zip.git +WORKDIR /root/7zip/CPP/7zip/Bundles/Alone2 +RUN make -f makefile.gcc -j +RUN cp /root/7zip/CPP/7zip/Bundles/Alone2/_o/7zz /usr/local/bin/7z + +## Iconv for windows +WORKDIR /root +RUN git clone --branch v0.0.10 https://github.com/win-iconv/win-iconv.git + +WORKDIR /root/win-iconv +RUN cmake \ + -D WIN_ICONV_BUILD_EXECUTABLE=OFF \ + -D CMAKE_INSTALL_PREFIX=/opt/win-iconv-64 \ + -D CMAKE_C_COMPILER=$(which x86_64-w64-mingw32-gcc) \ + -D CMAKE_CXX_COMPILER=$(which x86_64-w64-mingw32-g++) \ + . && \ + make install + +## Ubuntu 20.04 python version 3.10 is too old, it lacks support for non-GIL mode + +WORKDIR /root + +ENV PYTHON_VERSION=3.13.3 + +RUN wget https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz && \ + tar xzf Python-${PYTHON_VERSION}.tgz + +WORKDIR /root/Python-${PYTHON_VERSION} + +RUN ./configure --prefix=/opt/linux-python && \ + make -j && make install + +ENV PATH="/opt/linux-python/bin:$PATH" + +## For Windows we also need python + +WORKDIR /root + +RUN mkdir /opt/cpython-mingw +WORKDIR /opt/cpython-mingw +RUN wget https://repo.msys2.org/mingw/mingw64/mingw-w64-x86_64-python-3.12.10-1-any.pkg.tar.zst +RUN unzstd mingw-w64-x86_64-python-3.12.10-1-any.pkg.tar.zst +RUN tar -xf mingw-w64-x86_64-python-3.12.10-1-any.pkg.tar + +## Custom patches + +WORKDIR /root + +COPY docker/patches/ /root/patches/ + +RUN git clone https://github.com/hashcat/hashcat.git + +WORKDIR /root/hashcat + +RUN bash -c 'shopt -s nullglob; for p in /root/patches/*.patch /root/patches/*.diff; do pwd && git apply "$p"; done' + +RUN make -s binaries + +RUN tools/package_bin.sh + +RUN ["/bin/bash"] diff --git a/docker/patches/.gitkeep b/docker/patches/.gitkeep new file mode 100644 index 000000000..e69de29bb From dc50bdbc726a5c101dd48264ec4119f0205cea56 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Fri, 30 May 2025 11:21:40 +0200 Subject: [PATCH 21/95] The Assimilation Bridge (Argon2id plugin -m 70000) --- OpenCL/m70000-pure.cl | 69 + deps/phc-winner-argon2-20190702/Argon2.sln | 158 + deps/phc-winner-argon2-20190702/CHANGELOG.md | 32 + deps/phc-winner-argon2-20190702/LICENSE | 314 + deps/phc-winner-argon2-20190702/Makefile | 253 + deps/phc-winner-argon2-20190702/README.md | 297 + .../_hashcat/argon2.c | 71 + .../_hashcat/argon2.h | 440 + .../_hashcat/blake2/blake2-impl.h | 156 + .../_hashcat/blake2/blake2.h | 87 + .../_hashcat/blake2/blake2b.c | 390 + .../_hashcat/blake2/blamka-round-opt.h | 471 + .../_hashcat/core.c | 320 + .../_hashcat/core.h | 228 + .../phc-winner-argon2-20190702/_hashcat/opt.c | 283 + .../argon2-specs.pdf | 1366 ++ .../include/argon2.h | 437 + deps/phc-winner-argon2-20190702/kats/argon2d | 12304 ++++++++++++++++ .../kats/argon2d.shasum | 1 + .../kats/argon2d_v16 | 12304 ++++++++++++++++ .../kats/argon2d_v16.shasum | 1 + deps/phc-winner-argon2-20190702/kats/argon2i | 12304 ++++++++++++++++ .../kats/argon2i.shasum | 1 + .../kats/argon2i_v16 | 12304 ++++++++++++++++ .../kats/argon2i_v16.shasum | 1 + deps/phc-winner-argon2-20190702/kats/argon2id | 12304 ++++++++++++++++ .../kats/argon2id.shasum | 1 + .../kats/argon2id_v16 | 12304 ++++++++++++++++ .../kats/argon2id_v16.shasum | 1 + .../kats/check-sums.ps1 | 42 + .../kats/check-sums.sh | 13 + deps/phc-winner-argon2-20190702/kats/test.ps1 | 50 + deps/phc-winner-argon2-20190702/kats/test.sh | 49 + .../libargon2.pc.in | 18 + deps/phc-winner-argon2-20190702/man/argon2.1 | 57 + deps/phc-winner-argon2-20190702/src/argon2.c | 452 + deps/phc-winner-argon2-20190702/src/bench.c | 111 + .../src/blake2/blake2-impl.h | 156 + .../src/blake2/blake2.h | 89 + .../src/blake2/blake2b.c | 390 + .../src/blake2/blamka-round-opt.h | 471 + .../src/blake2/blamka-round-ref.h | 56 + deps/phc-winner-argon2-20190702/src/core.c | 648 + deps/phc-winner-argon2-20190702/src/core.h | 228 + .../phc-winner-argon2-20190702/src/encoding.c | 463 + .../phc-winner-argon2-20190702/src/encoding.h | 57 + deps/phc-winner-argon2-20190702/src/genkat.c | 207 + deps/phc-winner-argon2-20190702/src/genkat.h | 51 + deps/phc-winner-argon2-20190702/src/opt.c | 283 + deps/phc-winner-argon2-20190702/src/ref.c | 194 + deps/phc-winner-argon2-20190702/src/run.c | 337 + deps/phc-winner-argon2-20190702/src/test.c | 289 + deps/phc-winner-argon2-20190702/src/thread.c | 57 + deps/phc-winner-argon2-20190702/src/thread.h | 67 + .../vs2015/Argon2Opt/Argon2Opt.vcxproj | 231 + .../Argon2Opt/Argon2Opt.vcxproj.filters | 69 + .../Argon2OptBench/Argon2OptBench.vcxproj | 231 + .../Argon2OptBench.vcxproj.filters | 69 + .../vs2015/Argon2OptDll/Argon2OptDll.vcxproj | 230 + .../Argon2OptDll/Argon2OptDll.vcxproj.filters | 66 + .../Argon2OptGenKAT/Argon2OptGenKAT.vcxproj | 244 + .../Argon2OptGenKAT.vcxproj.filters | 72 + .../Argon2OptTestCI/Argon2OptTestCI.vcxproj | 235 + .../Argon2OptTestCI.vcxproj.filters | 69 + .../vs2015/Argon2Ref/Argon2Ref.vcxproj | 243 + .../Argon2Ref/Argon2Ref.vcxproj.filters | 69 + .../Argon2RefBench/Argon2RefBench.vcxproj | 231 + .../Argon2RefBench.vcxproj.filters | 69 + .../vs2015/Argon2RefDll/Argon2RefDll.vcxproj | 230 + .../Argon2RefDll/Argon2RefDll.vcxproj.filters | 66 + .../Argon2RefGenKAT/Argon2RefGenKAT.vcxproj | 232 + .../Argon2RefGenKAT.vcxproj.filters | 72 + .../Argon2RefTestCI/Argon2RefTestCI.vcxproj | 231 + .../Argon2RefTestCI.vcxproj.filters | 69 + src/bridges/bridge_argon2id_reference.c | 299 + src/bridges/bridge_argon2id_reference.mk | 14 + src/modules/module_70000.c | 326 + tools/test_modules/m70000.pm | 76 + 78 files changed, 87780 insertions(+) create mode 100644 OpenCL/m70000-pure.cl create mode 100644 deps/phc-winner-argon2-20190702/Argon2.sln create mode 100644 deps/phc-winner-argon2-20190702/CHANGELOG.md create mode 100644 deps/phc-winner-argon2-20190702/LICENSE create mode 100644 deps/phc-winner-argon2-20190702/Makefile create mode 100644 deps/phc-winner-argon2-20190702/README.md create mode 100644 deps/phc-winner-argon2-20190702/_hashcat/argon2.c create mode 100644 deps/phc-winner-argon2-20190702/_hashcat/argon2.h create mode 100644 deps/phc-winner-argon2-20190702/_hashcat/blake2/blake2-impl.h create mode 100644 deps/phc-winner-argon2-20190702/_hashcat/blake2/blake2.h create mode 100644 deps/phc-winner-argon2-20190702/_hashcat/blake2/blake2b.c create mode 100644 deps/phc-winner-argon2-20190702/_hashcat/blake2/blamka-round-opt.h create mode 100644 deps/phc-winner-argon2-20190702/_hashcat/core.c create mode 100644 deps/phc-winner-argon2-20190702/_hashcat/core.h create mode 100644 deps/phc-winner-argon2-20190702/_hashcat/opt.c create mode 100644 deps/phc-winner-argon2-20190702/argon2-specs.pdf create mode 100644 deps/phc-winner-argon2-20190702/include/argon2.h create mode 100644 deps/phc-winner-argon2-20190702/kats/argon2d create mode 100644 deps/phc-winner-argon2-20190702/kats/argon2d.shasum create mode 100644 deps/phc-winner-argon2-20190702/kats/argon2d_v16 create mode 100644 deps/phc-winner-argon2-20190702/kats/argon2d_v16.shasum create mode 100644 deps/phc-winner-argon2-20190702/kats/argon2i create mode 100644 deps/phc-winner-argon2-20190702/kats/argon2i.shasum create mode 100644 deps/phc-winner-argon2-20190702/kats/argon2i_v16 create mode 100644 deps/phc-winner-argon2-20190702/kats/argon2i_v16.shasum create mode 100644 deps/phc-winner-argon2-20190702/kats/argon2id create mode 100644 deps/phc-winner-argon2-20190702/kats/argon2id.shasum create mode 100644 deps/phc-winner-argon2-20190702/kats/argon2id_v16 create mode 100644 deps/phc-winner-argon2-20190702/kats/argon2id_v16.shasum create mode 100644 deps/phc-winner-argon2-20190702/kats/check-sums.ps1 create mode 100644 deps/phc-winner-argon2-20190702/kats/check-sums.sh create mode 100644 deps/phc-winner-argon2-20190702/kats/test.ps1 create mode 100644 deps/phc-winner-argon2-20190702/kats/test.sh create mode 100644 deps/phc-winner-argon2-20190702/libargon2.pc.in create mode 100644 deps/phc-winner-argon2-20190702/man/argon2.1 create mode 100644 deps/phc-winner-argon2-20190702/src/argon2.c create mode 100644 deps/phc-winner-argon2-20190702/src/bench.c create mode 100644 deps/phc-winner-argon2-20190702/src/blake2/blake2-impl.h create mode 100644 deps/phc-winner-argon2-20190702/src/blake2/blake2.h create mode 100644 deps/phc-winner-argon2-20190702/src/blake2/blake2b.c create mode 100644 deps/phc-winner-argon2-20190702/src/blake2/blamka-round-opt.h create mode 100644 deps/phc-winner-argon2-20190702/src/blake2/blamka-round-ref.h create mode 100644 deps/phc-winner-argon2-20190702/src/core.c create mode 100644 deps/phc-winner-argon2-20190702/src/core.h create mode 100644 deps/phc-winner-argon2-20190702/src/encoding.c create mode 100644 deps/phc-winner-argon2-20190702/src/encoding.h create mode 100644 deps/phc-winner-argon2-20190702/src/genkat.c create mode 100644 deps/phc-winner-argon2-20190702/src/genkat.h create mode 100644 deps/phc-winner-argon2-20190702/src/opt.c create mode 100644 deps/phc-winner-argon2-20190702/src/ref.c create mode 100644 deps/phc-winner-argon2-20190702/src/run.c create mode 100644 deps/phc-winner-argon2-20190702/src/test.c create mode 100644 deps/phc-winner-argon2-20190702/src/thread.c create mode 100644 deps/phc-winner-argon2-20190702/src/thread.h create mode 100644 deps/phc-winner-argon2-20190702/vs2015/Argon2Opt/Argon2Opt.vcxproj create mode 100644 deps/phc-winner-argon2-20190702/vs2015/Argon2Opt/Argon2Opt.vcxproj.filters create mode 100644 deps/phc-winner-argon2-20190702/vs2015/Argon2OptBench/Argon2OptBench.vcxproj create mode 100644 deps/phc-winner-argon2-20190702/vs2015/Argon2OptBench/Argon2OptBench.vcxproj.filters create mode 100644 deps/phc-winner-argon2-20190702/vs2015/Argon2OptDll/Argon2OptDll.vcxproj create mode 100644 deps/phc-winner-argon2-20190702/vs2015/Argon2OptDll/Argon2OptDll.vcxproj.filters create mode 100644 deps/phc-winner-argon2-20190702/vs2015/Argon2OptGenKAT/Argon2OptGenKAT.vcxproj create mode 100644 deps/phc-winner-argon2-20190702/vs2015/Argon2OptGenKAT/Argon2OptGenKAT.vcxproj.filters create mode 100644 deps/phc-winner-argon2-20190702/vs2015/Argon2OptTestCI/Argon2OptTestCI.vcxproj create mode 100644 deps/phc-winner-argon2-20190702/vs2015/Argon2OptTestCI/Argon2OptTestCI.vcxproj.filters create mode 100644 deps/phc-winner-argon2-20190702/vs2015/Argon2Ref/Argon2Ref.vcxproj create mode 100644 deps/phc-winner-argon2-20190702/vs2015/Argon2Ref/Argon2Ref.vcxproj.filters create mode 100644 deps/phc-winner-argon2-20190702/vs2015/Argon2RefBench/Argon2RefBench.vcxproj create mode 100644 deps/phc-winner-argon2-20190702/vs2015/Argon2RefBench/Argon2RefBench.vcxproj.filters create mode 100644 deps/phc-winner-argon2-20190702/vs2015/Argon2RefDll/Argon2RefDll.vcxproj create mode 100644 deps/phc-winner-argon2-20190702/vs2015/Argon2RefDll/Argon2RefDll.vcxproj.filters create mode 100644 deps/phc-winner-argon2-20190702/vs2015/Argon2RefGenKAT/Argon2RefGenKAT.vcxproj create mode 100644 deps/phc-winner-argon2-20190702/vs2015/Argon2RefGenKAT/Argon2RefGenKAT.vcxproj.filters create mode 100644 deps/phc-winner-argon2-20190702/vs2015/Argon2RefTestCI/Argon2RefTestCI.vcxproj create mode 100644 deps/phc-winner-argon2-20190702/vs2015/Argon2RefTestCI/Argon2RefTestCI.vcxproj.filters create mode 100644 src/bridges/bridge_argon2id_reference.c create mode 100644 src/bridges/bridge_argon2id_reference.mk create mode 100644 src/modules/module_70000.c create mode 100644 tools/test_modules/m70000.pm diff --git a/OpenCL/m70000-pure.cl b/OpenCL/m70000-pure.cl new file mode 100644 index 000000000..94edc957e --- /dev/null +++ b/OpenCL/m70000-pure.cl @@ -0,0 +1,69 @@ +/** + * Author......: See docs/credits.txt + * License.....: MIT + */ + +#ifdef KERNEL_STATIC +#include M2S(INCLUDE_PATH/inc_vendor.h) +#include M2S(INCLUDE_PATH/inc_types.h) +#include M2S(INCLUDE_PATH/inc_platform.cl) +#include M2S(INCLUDE_PATH/inc_common.cl) +#endif + +#define COMPARE_S M2S(INCLUDE_PATH/inc_comp_single.cl) +#define COMPARE_M M2S(INCLUDE_PATH/inc_comp_multi.cl) + +typedef struct +{ + // input + + u32 pw_buf[64]; + u32 pw_len; + + // output + + u32 h[64]; + +} argon2_reference_tmp_t; + +KERNEL_FQ void m70000_init (KERN_ATTR_TMPS (argon2_reference_tmp_t)) +{ + const u64 gid = get_global_id (0); + + if (gid >= GID_CNT) return; + + const u32 pw_len = pws[gid].pw_len; + + for (u32 idx = 0; idx < 64; idx++) + { + tmps[gid].pw_buf[idx] = pws[gid].i[idx]; + } + + tmps[gid].pw_len = pw_len; +} + +KERNEL_FQ void m70000_loop (KERN_ATTR_TMPS (argon2_reference_tmp_t)) +{ +} + +KERNEL_FQ void m70000_comp (KERN_ATTR_TMPS (argon2_reference_tmp_t)) +{ + /** + * base + */ + + const u64 gid = get_global_id (0); + + if (gid >= GID_CNT) return; + + const u32 r0 = tmps[gid].h[0]; + const u32 r1 = tmps[gid].h[1]; + const u32 r2 = tmps[gid].h[2]; + const u32 r3 = tmps[gid].h[3]; + + #define il_pos 0 + + #ifdef KERNEL_STATIC + #include COMPARE_M + #endif +} diff --git a/deps/phc-winner-argon2-20190702/Argon2.sln b/deps/phc-winner-argon2-20190702/Argon2.sln new file mode 100644 index 000000000..b16cda080 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/Argon2.sln @@ -0,0 +1,158 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Argon2OptTestCI", "vs2015\Argon2OptTestCI\Argon2OptTestCI.vcxproj", "{12956597-5E42-433A-93F3-D4EFF50AA207}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Argon2RefTestCI", "vs2015\Argon2RefTestCI\Argon2RefTestCI.vcxproj", "{8A1F7F84-34AF-4DB2-9D58-D4823DFE79E9}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Argon2OptGenKAT", "vs2015\Argon2OptGenKAT\Argon2OptGenKAT.vcxproj", "{DBBAAAE6-4560-4D11-8280-30A6650A82EF}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Argon2RefGenKAT", "vs2015\Argon2RefGenKAT\Argon2RefGenKAT.vcxproj", "{71921B4C-A795-4A37-95A3-99D600E01211}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Argon2Opt", "vs2015\Argon2Opt\Argon2Opt.vcxproj", "{CAA75C57-998C-494E-B8A5-5894EF0FC528}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Argon2Ref", "vs2015\Argon2Ref\Argon2Ref.vcxproj", "{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Argon2OptBench", "vs2015\Argon2OptBench\Argon2OptBench.vcxproj", "{B3A0FB44-0C1C-4EC3-B155-8B39371F8EE4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Argon2RefBench", "vs2015\Argon2RefBench\Argon2RefBench.vcxproj", "{99203F6A-6E8C-42FC-8C7C-C07E8913D539}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Argon2OptDll", "vs2015\Argon2OptDll\Argon2OptDll.vcxproj", "{3A898DD8-ACAE-4269-ADFE-EB7260D71583}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Argon2RefDll", "vs2015\Argon2RefDll\Argon2RefDll.vcxproj", "{19D911A1-533C-4475-B313-F372481A35D4}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + ReleaseStatic|x64 = ReleaseStatic|x64 + ReleaseStatic|x86 = ReleaseStatic|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {12956597-5E42-433A-93F3-D4EFF50AA207}.Debug|x64.ActiveCfg = Debug|x64 + {12956597-5E42-433A-93F3-D4EFF50AA207}.Debug|x64.Build.0 = Debug|x64 + {12956597-5E42-433A-93F3-D4EFF50AA207}.Debug|x86.ActiveCfg = Debug|Win32 + {12956597-5E42-433A-93F3-D4EFF50AA207}.Debug|x86.Build.0 = Debug|Win32 + {12956597-5E42-433A-93F3-D4EFF50AA207}.Release|x64.ActiveCfg = Release|x64 + {12956597-5E42-433A-93F3-D4EFF50AA207}.Release|x64.Build.0 = Release|x64 + {12956597-5E42-433A-93F3-D4EFF50AA207}.Release|x86.ActiveCfg = Release|Win32 + {12956597-5E42-433A-93F3-D4EFF50AA207}.Release|x86.Build.0 = Release|Win32 + {12956597-5E42-433A-93F3-D4EFF50AA207}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 + {12956597-5E42-433A-93F3-D4EFF50AA207}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 + {12956597-5E42-433A-93F3-D4EFF50AA207}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 + {12956597-5E42-433A-93F3-D4EFF50AA207}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 + {8A1F7F84-34AF-4DB2-9D58-D4823DFE79E9}.Debug|x64.ActiveCfg = Debug|x64 + {8A1F7F84-34AF-4DB2-9D58-D4823DFE79E9}.Debug|x64.Build.0 = Debug|x64 + {8A1F7F84-34AF-4DB2-9D58-D4823DFE79E9}.Debug|x86.ActiveCfg = Debug|Win32 + {8A1F7F84-34AF-4DB2-9D58-D4823DFE79E9}.Debug|x86.Build.0 = Debug|Win32 + {8A1F7F84-34AF-4DB2-9D58-D4823DFE79E9}.Release|x64.ActiveCfg = Release|x64 + {8A1F7F84-34AF-4DB2-9D58-D4823DFE79E9}.Release|x64.Build.0 = Release|x64 + {8A1F7F84-34AF-4DB2-9D58-D4823DFE79E9}.Release|x86.ActiveCfg = Release|Win32 + {8A1F7F84-34AF-4DB2-9D58-D4823DFE79E9}.Release|x86.Build.0 = Release|Win32 + {8A1F7F84-34AF-4DB2-9D58-D4823DFE79E9}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 + {8A1F7F84-34AF-4DB2-9D58-D4823DFE79E9}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 + {8A1F7F84-34AF-4DB2-9D58-D4823DFE79E9}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 + {8A1F7F84-34AF-4DB2-9D58-D4823DFE79E9}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 + {DBBAAAE6-4560-4D11-8280-30A6650A82EF}.Debug|x64.ActiveCfg = Debug|x64 + {DBBAAAE6-4560-4D11-8280-30A6650A82EF}.Debug|x64.Build.0 = Debug|x64 + {DBBAAAE6-4560-4D11-8280-30A6650A82EF}.Debug|x86.ActiveCfg = Debug|Win32 + {DBBAAAE6-4560-4D11-8280-30A6650A82EF}.Debug|x86.Build.0 = Debug|Win32 + {DBBAAAE6-4560-4D11-8280-30A6650A82EF}.Release|x64.ActiveCfg = Release|x64 + {DBBAAAE6-4560-4D11-8280-30A6650A82EF}.Release|x64.Build.0 = Release|x64 + {DBBAAAE6-4560-4D11-8280-30A6650A82EF}.Release|x86.ActiveCfg = Release|Win32 + {DBBAAAE6-4560-4D11-8280-30A6650A82EF}.Release|x86.Build.0 = Release|Win32 + {DBBAAAE6-4560-4D11-8280-30A6650A82EF}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 + {DBBAAAE6-4560-4D11-8280-30A6650A82EF}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 + {DBBAAAE6-4560-4D11-8280-30A6650A82EF}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 + {DBBAAAE6-4560-4D11-8280-30A6650A82EF}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 + {71921B4C-A795-4A37-95A3-99D600E01211}.Debug|x64.ActiveCfg = Debug|x64 + {71921B4C-A795-4A37-95A3-99D600E01211}.Debug|x64.Build.0 = Debug|x64 + {71921B4C-A795-4A37-95A3-99D600E01211}.Debug|x86.ActiveCfg = Debug|Win32 + {71921B4C-A795-4A37-95A3-99D600E01211}.Debug|x86.Build.0 = Debug|Win32 + {71921B4C-A795-4A37-95A3-99D600E01211}.Release|x64.ActiveCfg = Release|x64 + {71921B4C-A795-4A37-95A3-99D600E01211}.Release|x64.Build.0 = Release|x64 + {71921B4C-A795-4A37-95A3-99D600E01211}.Release|x86.ActiveCfg = Release|Win32 + {71921B4C-A795-4A37-95A3-99D600E01211}.Release|x86.Build.0 = Release|Win32 + {71921B4C-A795-4A37-95A3-99D600E01211}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 + {71921B4C-A795-4A37-95A3-99D600E01211}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 + {71921B4C-A795-4A37-95A3-99D600E01211}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 + {71921B4C-A795-4A37-95A3-99D600E01211}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 + {CAA75C57-998C-494E-B8A5-5894EF0FC528}.Debug|x64.ActiveCfg = Debug|x64 + {CAA75C57-998C-494E-B8A5-5894EF0FC528}.Debug|x64.Build.0 = Debug|x64 + {CAA75C57-998C-494E-B8A5-5894EF0FC528}.Debug|x86.ActiveCfg = Debug|Win32 + {CAA75C57-998C-494E-B8A5-5894EF0FC528}.Debug|x86.Build.0 = Debug|Win32 + {CAA75C57-998C-494E-B8A5-5894EF0FC528}.Release|x64.ActiveCfg = Release|x64 + {CAA75C57-998C-494E-B8A5-5894EF0FC528}.Release|x64.Build.0 = Release|x64 + {CAA75C57-998C-494E-B8A5-5894EF0FC528}.Release|x86.ActiveCfg = Release|Win32 + {CAA75C57-998C-494E-B8A5-5894EF0FC528}.Release|x86.Build.0 = Release|Win32 + {CAA75C57-998C-494E-B8A5-5894EF0FC528}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 + {CAA75C57-998C-494E-B8A5-5894EF0FC528}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 + {CAA75C57-998C-494E-B8A5-5894EF0FC528}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 + {CAA75C57-998C-494E-B8A5-5894EF0FC528}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 + {B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug|x64.ActiveCfg = Debug|x64 + {B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug|x64.Build.0 = Debug|x64 + {B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug|x86.ActiveCfg = Debug|Win32 + {B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug|x86.Build.0 = Debug|Win32 + {B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release|x64.ActiveCfg = Release|x64 + {B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release|x64.Build.0 = Release|x64 + {B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release|x86.ActiveCfg = Release|Win32 + {B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release|x86.Build.0 = Release|Win32 + {B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 + {B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 + {B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 + {B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 + {B3A0FB44-0C1C-4EC3-B155-8B39371F8EE4}.Debug|x64.ActiveCfg = Debug|x64 + {B3A0FB44-0C1C-4EC3-B155-8B39371F8EE4}.Debug|x64.Build.0 = Debug|x64 + {B3A0FB44-0C1C-4EC3-B155-8B39371F8EE4}.Debug|x86.ActiveCfg = Debug|Win32 + {B3A0FB44-0C1C-4EC3-B155-8B39371F8EE4}.Debug|x86.Build.0 = Debug|Win32 + {B3A0FB44-0C1C-4EC3-B155-8B39371F8EE4}.Release|x64.ActiveCfg = Release|x64 + {B3A0FB44-0C1C-4EC3-B155-8B39371F8EE4}.Release|x64.Build.0 = Release|x64 + {B3A0FB44-0C1C-4EC3-B155-8B39371F8EE4}.Release|x86.ActiveCfg = Release|Win32 + {B3A0FB44-0C1C-4EC3-B155-8B39371F8EE4}.Release|x86.Build.0 = Release|Win32 + {B3A0FB44-0C1C-4EC3-B155-8B39371F8EE4}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 + {B3A0FB44-0C1C-4EC3-B155-8B39371F8EE4}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 + {B3A0FB44-0C1C-4EC3-B155-8B39371F8EE4}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 + {B3A0FB44-0C1C-4EC3-B155-8B39371F8EE4}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 + {99203F6A-6E8C-42FC-8C7C-C07E8913D539}.Debug|x64.ActiveCfg = Debug|x64 + {99203F6A-6E8C-42FC-8C7C-C07E8913D539}.Debug|x64.Build.0 = Debug|x64 + {99203F6A-6E8C-42FC-8C7C-C07E8913D539}.Debug|x86.ActiveCfg = Debug|Win32 + {99203F6A-6E8C-42FC-8C7C-C07E8913D539}.Debug|x86.Build.0 = Debug|Win32 + {99203F6A-6E8C-42FC-8C7C-C07E8913D539}.Release|x64.ActiveCfg = Release|x64 + {99203F6A-6E8C-42FC-8C7C-C07E8913D539}.Release|x64.Build.0 = Release|x64 + {99203F6A-6E8C-42FC-8C7C-C07E8913D539}.Release|x86.ActiveCfg = Release|Win32 + {99203F6A-6E8C-42FC-8C7C-C07E8913D539}.Release|x86.Build.0 = Release|Win32 + {99203F6A-6E8C-42FC-8C7C-C07E8913D539}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 + {99203F6A-6E8C-42FC-8C7C-C07E8913D539}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 + {99203F6A-6E8C-42FC-8C7C-C07E8913D539}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 + {99203F6A-6E8C-42FC-8C7C-C07E8913D539}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 + {3A898DD8-ACAE-4269-ADFE-EB7260D71583}.Debug|x64.ActiveCfg = Debug|x64 + {3A898DD8-ACAE-4269-ADFE-EB7260D71583}.Debug|x64.Build.0 = Debug|x64 + {3A898DD8-ACAE-4269-ADFE-EB7260D71583}.Debug|x86.ActiveCfg = Debug|Win32 + {3A898DD8-ACAE-4269-ADFE-EB7260D71583}.Debug|x86.Build.0 = Debug|Win32 + {3A898DD8-ACAE-4269-ADFE-EB7260D71583}.Release|x64.ActiveCfg = Release|x64 + {3A898DD8-ACAE-4269-ADFE-EB7260D71583}.Release|x64.Build.0 = Release|x64 + {3A898DD8-ACAE-4269-ADFE-EB7260D71583}.Release|x86.ActiveCfg = Release|Win32 + {3A898DD8-ACAE-4269-ADFE-EB7260D71583}.Release|x86.Build.0 = Release|Win32 + {3A898DD8-ACAE-4269-ADFE-EB7260D71583}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 + {3A898DD8-ACAE-4269-ADFE-EB7260D71583}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 + {3A898DD8-ACAE-4269-ADFE-EB7260D71583}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 + {3A898DD8-ACAE-4269-ADFE-EB7260D71583}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 + {19D911A1-533C-4475-B313-F372481A35D4}.Debug|x64.ActiveCfg = Debug|x64 + {19D911A1-533C-4475-B313-F372481A35D4}.Debug|x64.Build.0 = Debug|x64 + {19D911A1-533C-4475-B313-F372481A35D4}.Debug|x86.ActiveCfg = Debug|Win32 + {19D911A1-533C-4475-B313-F372481A35D4}.Debug|x86.Build.0 = Debug|Win32 + {19D911A1-533C-4475-B313-F372481A35D4}.Release|x64.ActiveCfg = Release|x64 + {19D911A1-533C-4475-B313-F372481A35D4}.Release|x64.Build.0 = Release|x64 + {19D911A1-533C-4475-B313-F372481A35D4}.Release|x86.ActiveCfg = Release|Win32 + {19D911A1-533C-4475-B313-F372481A35D4}.Release|x86.Build.0 = Release|Win32 + {19D911A1-533C-4475-B313-F372481A35D4}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 + {19D911A1-533C-4475-B313-F372481A35D4}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 + {19D911A1-533C-4475-B313-F372481A35D4}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 + {19D911A1-533C-4475-B313-F372481A35D4}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/deps/phc-winner-argon2-20190702/CHANGELOG.md b/deps/phc-winner-argon2-20190702/CHANGELOG.md new file mode 100644 index 000000000..0578fde27 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/CHANGELOG.md @@ -0,0 +1,32 @@ +# 20171227 +* Added ABI version number +* AVX2/AVX-512F optimizations of BLAMKA +* Set Argon2 version number from the command line +* New bindings +* Minor bug and warning fixes (no security issue) + +# 20161029 + +* Argon2id added +* Better documentation +* Dual licensing CC0 / Apache 2.0 +* Minor bug fixes (no security issue) + +# 20160406 + +* Version 1.3 of Argon2 +* Version number in encoded hash +* Refactored low-level API +* Visibility control for library symbols +* Microsoft Visual Studio solution +* New bindings +* Minor bug and warning fixes (no security issue) + + +# 20151206 + +* Python bindings +* Password read from stdin, instead of being an argument +* Compatibility FreeBSD, NetBSD, OpenBSD +* Constant-time verification +* Minor bug and warning fixes (no security issue) diff --git a/deps/phc-winner-argon2-20190702/LICENSE b/deps/phc-winner-argon2-20190702/LICENSE new file mode 100644 index 000000000..fa611f7ac --- /dev/null +++ b/deps/phc-winner-argon2-20190702/LICENSE @@ -0,0 +1,314 @@ +Argon2 reference source code package - reference C implementations + +Copyright 2015 +Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves + +You may use this work under the terms of a Creative Commons CC0 1.0 +License/Waiver or the Apache Public License 2.0, at your option. The terms of +these licenses can be found at: + +- CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 +- Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + +The terms of the licenses are reproduced below. + +-------------------------------------------------------------------------------- + +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. + +-------------------------------------------------------------------------------- + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. diff --git a/deps/phc-winner-argon2-20190702/Makefile b/deps/phc-winner-argon2-20190702/Makefile new file mode 100644 index 000000000..837e7f7f3 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/Makefile @@ -0,0 +1,253 @@ +# +# Argon2 reference source code package - reference C implementations +# +# Copyright 2015 +# Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves +# +# You may use this work under the terms of a Creative Commons CC0 1.0 +# License/Waiver or the Apache Public License 2.0, at your option. The terms of +# these licenses can be found at: +# +# - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 +# - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 +# +# You should have received a copy of both of these licenses along with this +# software. If not, they may be obtained at the above URLs. +# + +RUN = argon2 +BENCH = bench +GENKAT = genkat +ARGON2_VERSION ?= ZERO + +# installation parameters for staging area and final installation path +# Note; if Linux and not Debian/Ubuntu version also add lib override to make command-line +# for RedHat/Fedora, add: LIBRARY_REL=lib64 +DESTDIR ?= +PREFIX ?= /usr + +# Increment on an ABI breaking change +ABI_VERSION = 1 + +DIST = phc-winner-argon2 + +SRC = src/argon2.c src/core.c src/blake2/blake2b.c src/thread.c src/encoding.c +SRC_RUN = src/run.c +SRC_BENCH = src/bench.c +SRC_GENKAT = src/genkat.c +OBJ = $(SRC:.c=.o) + +CFLAGS += -std=c89 -O3 -Wall -g -Iinclude -Isrc + +ifeq ($(NO_THREADS), 1) +CFLAGS += -DARGON2_NO_THREADS +else +CFLAGS += -pthread +endif + +CI_CFLAGS := $(CFLAGS) -Werror=declaration-after-statement -D_FORTIFY_SOURCE=2 \ + -Wextra -Wno-type-limits -Werror -coverage -DTEST_LARGE_RAM + +OPTTARGET ?= native +OPTTEST := $(shell $(CC) -Iinclude -Isrc -march=$(OPTTARGET) src/opt.c -c \ + -o /dev/null 2>/dev/null; echo $$?) +# Detect compatible platform +ifneq ($(OPTTEST), 0) +$(info Building without optimizations) + SRC += src/ref.c +else +$(info Building with optimizations for $(OPTTARGET)) + CFLAGS += -march=$(OPTTARGET) + SRC += src/opt.c +endif + +BUILD_PATH := $(shell pwd) +KERNEL_NAME := $(shell uname -s) +MACHINE_NAME := $(shell uname -m) + +LIB_NAME = argon2 +PC_NAME = lib$(LIB_NAME).pc +PC_SRC = $(PC_NAME).in + +ifeq ($(KERNEL_NAME), Linux) + LIB_EXT := so.$(ABI_VERSION) + LIB_CFLAGS := -shared -fPIC -fvisibility=hidden -DA2_VISCTL=1 + SO_LDFLAGS := -Wl,-soname,lib$(LIB_NAME).$(LIB_EXT) + LINKED_LIB_EXT := so + PC_EXTRA_LIBS ?= -lrt -ldl +endif +ifeq ($(KERNEL_NAME), $(filter $(KERNEL_NAME),DragonFly FreeBSD NetBSD OpenBSD)) + LIB_EXT := so + LIB_CFLAGS := -shared -fPIC + PC_EXTRA_LIBS ?= +endif +ifeq ($(KERNEL_NAME), Darwin) + LIB_EXT := $(ABI_VERSION).dylib + LIB_CFLAGS := -dynamiclib -install_name @rpath/lib$(LIB_NAME).$(LIB_EXT) + LINKED_LIB_EXT := dylib + PC_EXTRA_LIBS ?= +endif +ifeq ($(findstring CYGWIN, $(KERNEL_NAME)), CYGWIN) + LIB_EXT := dll + LIB_CFLAGS := -shared -Wl,--out-implib,lib$(LIB_NAME).$(LIB_EXT).a + PC_EXTRA_LIBS ?= +endif +ifeq ($(findstring MINGW, $(KERNEL_NAME)), MINGW) + LIB_EXT := dll + LIB_CFLAGS := -shared -Wl,--out-implib,lib$(LIB_NAME).$(LIB_EXT).a + PC_EXTRA_LIBS ?= +endif +ifeq ($(findstring MSYS, $(KERNEL_NAME)), MSYS) + LIB_EXT := dll + LIB_CFLAGS := -shared -Wl,--out-implib,lib$(LIB_NAME).$(LIB_EXT).a + PC_EXTRA_LIBS ?= +endif +ifeq ($(KERNEL_NAME), SunOS) + CC := gcc + CFLAGS += -D_REENTRANT + LIB_EXT := so + LIB_CFLAGS := -shared -fPIC + PC_EXTRA_LIBS ?= +endif + +ifeq ($(KERNEL_NAME), Linux) +ifeq ($(CC), clang) + CI_CFLAGS += -fsanitize=address -fsanitize=undefined +endif +endif + +LIB_SH := lib$(LIB_NAME).$(LIB_EXT) +LIB_ST := lib$(LIB_NAME).a + +ifdef LINKED_LIB_EXT +LINKED_LIB_SH := lib$(LIB_NAME).$(LINKED_LIB_EXT) +endif + + +LIBRARIES = $(LIB_SH) $(LIB_ST) +HEADERS = include/argon2.h + +INSTALL = install + +# relative paths for different OS +ifeq ($(KERNEL_NAME), $(filter $(KERNEL_NAME),DragonFly FreeBSD)) + +# default for FreeBSD +BINARY_REL ?= bin +INCLUDE_REL ?= include +LIBRARY_REL ?= lib +PKGCONFIG_REL ?= libdata + +else ifeq ($(KERNEL_NAME)-$(MACHINE_NAME), Linux-x86_64) + +# default for Debian/Ubuntu x86_64 +BINARY_REL ?= bin +INCLUDE_REL ?= include +LIBRARY_REL ?= lib/x86_64-linux-gnu +PKGCONFIG_REL ?= $(LIBRARY_REL) + +else + +# NetBSD, ... and Linux64/Linux32 variants that use plain lib directory +BINARY_REL ?= bin +INCLUDE_REL ?= include +LIBRARY_REL ?= lib +PKGCONFIG_REL ?= $(LIBRARY_REL) + +endif + +# absolute paths to staging area +INST_INCLUDE = $(DESTDIR)$(PREFIX)/$(INCLUDE_REL) +INST_LIBRARY = $(DESTDIR)$(PREFIX)/$(LIBRARY_REL) +INST_BINARY = $(DESTDIR)$(PREFIX)/$(BINARY_REL) +INST_PKGCONFIG = $(DESTDIR)$(PREFIX)/$(PKGCONFIG_REL)/pkgconfig + +# main target +.PHONY: all +all: $(RUN) libs + +.PHONY: libs +libs: $(LIBRARIES) $(PC_NAME) + +$(RUN): $(SRC) $(SRC_RUN) + $(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@ + +$(BENCH): $(SRC) $(SRC_BENCH) + $(CC) $(CFLAGS) $^ -o $@ + +$(GENKAT): $(SRC) $(SRC_GENKAT) + $(CC) $(CFLAGS) $^ -o $@ -DGENKAT + +$(LIB_SH): $(SRC) + $(CC) $(CFLAGS) $(LIB_CFLAGS) $(LDFLAGS) $(SO_LDFLAGS) $^ -o $@ + +$(LIB_ST): $(OBJ) + ar rcs $@ $^ + +.PHONY: clean +clean: + rm -f '$(RUN)' '$(BENCH)' '$(GENKAT)' + rm -f '$(LIB_SH)' '$(LIB_ST)' kat-argon2* '$(PC_NAME)' + rm -f testcase + rm -rf *.dSYM + cd src/ && rm -f *.o + cd src/blake2/ && rm -f *.o + cd kats/ && rm -f kat-* diff* run_* make_* + + +# all substitutions to pc template +SED_COMMANDS = /^\#\#.*$$/d; +SED_COMMANDS += s\#@PREFIX@\#$(PREFIX)\#g; +SED_COMMANDS += s\#@EXTRA_LIBS@\#$(PC_EXTRA_LIBS)\#g; +SED_COMMANDS += s\#@UPSTREAM_VER@\#$(ARGON2_VERSION)\#g; +SED_COMMANDS += s\#@HOST_MULTIARCH@\#$(LIBRARY_REL)\#g; +SED_COMMANDS += s\#@INCLUDE@\#$(INCLUDE_REL)\#g; + +# substitute PREFIX and PC_EXTRA_LIBS into pkgconfig pc file +$(PC_NAME): $(PC_SRC) + sed '$(SED_COMMANDS)' < '$(PC_SRC)' > '$@' + + +.PHONY: dist +dist: + cd ..; \ + tar -c --exclude='.??*' -z -f $(DIST)-`date "+%Y%m%d"`.tgz $(DIST)/* + +.PHONY: test +test: $(SRC) src/test.c + $(CC) $(CFLAGS) -Wextra -Wno-type-limits $^ -o testcase + @sh kats/test.sh + ./testcase + +.PHONY: testci +testci: $(SRC) src/test.c + $(CC) $(CI_CFLAGS) $^ -o testcase + @sh kats/test.sh + ./testcase + + +.PHONY: format +format: + clang-format -style="{BasedOnStyle: llvm, IndentWidth: 4}" \ + -i include/*.h src/*.c src/*.h src/blake2/*.c src/blake2/*.h + +.PHONY: install +install: $(RUN) libs + $(INSTALL) -d $(INST_INCLUDE) + $(INSTALL) -m 0644 $(HEADERS) $(INST_INCLUDE) + $(INSTALL) -d $(INST_LIBRARY) + $(INSTALL) -m 0644 $(LIBRARIES) $(INST_LIBRARY) +ifdef LINKED_LIB_SH + cd $(INST_LIBRARY) && ln -s $(notdir $(LIB_SH) $(LINKED_LIB_SH)) +endif + $(INSTALL) -d $(INST_BINARY) + $(INSTALL) $(RUN) $(INST_BINARY) + $(INSTALL) -d $(INST_PKGCONFIG) + $(INSTALL) -m 0644 $(PC_NAME) $(INST_PKGCONFIG) + +.PHONY: uninstall +uninstall: + cd $(INST_INCLUDE) && rm -f $(notdir $(HEADERS)) + cd $(INST_LIBRARY) && rm -f $(notdir $(LIBRARIES) $(LINKED_LIB_SH)) + cd $(INST_BINARY) && rm -f $(notdir $(RUN)) + cd $(INST_PKG_CONFIG) && rm -f $(notdir $(PC_NAME)) diff --git a/deps/phc-winner-argon2-20190702/README.md b/deps/phc-winner-argon2-20190702/README.md new file mode 100644 index 000000000..9f2d17c37 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/README.md @@ -0,0 +1,297 @@ +# Argon2 + +[![Build Status](https://travis-ci.org/P-H-C/phc-winner-argon2.svg?branch=master)](https://travis-ci.org/P-H-C/phc-winner-argon2) +[![Build status](https://ci.appveyor.com/api/projects/status/8nfwuwq55sgfkele?svg=true)](https://ci.appveyor.com/project/P-H-C/phc-winner-argon2) +[![codecov.io](https://codecov.io/github/P-H-C/phc-winner-argon2/coverage.svg?branch=master)](https://codecov.io/github/P-H-C/phc-winner-argon2?branch=master) + +This is the reference C implementation of Argon2, the password-hashing +function that won the [Password Hashing Competition +(PHC)](https://password-hashing.net). + +Argon2 is a password-hashing function that summarizes the state of the +art in the design of memory-hard functions and can be used to hash +passwords for credential storage, key derivation, or other applications. + +It has a simple design aimed at the highest memory filling rate and +effective use of multiple computing units, while still providing defense +against tradeoff attacks (by exploiting the cache and memory organization +of the recent processors). + +Argon2 has three variants: Argon2i, Argon2d, and Argon2id. Argon2d is faster +and uses data-depending memory access, which makes it highly resistant +against GPU cracking attacks and suitable for applications with no threats +from side-channel timing attacks (eg. cryptocurrencies). Argon2i instead +uses data-independent memory access, which is preferred for password +hashing and password-based key derivation, but it is slower as it makes +more passes over the memory to protect from tradeoff attacks. Argon2id is a +hybrid of Argon2i and Argon2d, using a combination of data-depending and +data-independent memory accesses, which gives some of Argon2i's resistance to +side-channel cache timing attacks and much of Argon2d's resistance to GPU +cracking attacks. + +Argon2i, Argon2d, and Argon2id are parametrized by: + +* A **time** cost, which defines the amount of computation realized and + therefore the execution time, given in number of iterations +* A **memory** cost, which defines the memory usage, given in kibibytes +* A **parallelism** degree, which defines the number of parallel threads + +The [Argon2 document](argon2-specs.pdf) gives detailed specs and design +rationale. + +Please report bugs as issues on this repository. + +## Usage + +`make` builds the executable `argon2`, the static library `libargon2.a`, +and the shared library `libargon2.so` (or `libargon2.dylib` on OSX). +Make sure to run `make test` to verify that your build produces valid +results. `make install PREFIX=/usr` installs it to your system. + +### Command-line utility + +`argon2` is a command-line utility to test specific Argon2 instances +on your system. To show usage instructions, run +`./argon2 -h` as +``` +Usage: ./argon2 [-h] salt [-i|-d|-id] [-t iterations] [-m memory] [-p parallelism] [-l hash length] [-e|-r] [-v (10|13)] + Password is read from stdin +Parameters: + salt The salt to use, at least 8 characters + -i Use Argon2i (this is the default) + -d Use Argon2d instead of Argon2i + -id Use Argon2id instead of Argon2i + -t N Sets the number of iterations to N (default = 3) + -m N Sets the memory usage of 2^N KiB (default 12) + -p N Sets parallelism to N threads (default 1) + -l N Sets hash output length to N bytes (default 32) + -e Output only encoded hash + -r Output only the raw bytes of the hash + -v (10|13) Argon2 version (defaults to the most recent version, currently 13) + -h Print argon2 usage +``` +For example, to hash "password" using "somesalt" as a salt and doing 2 +iterations, consuming 64 MiB, using four parallel threads and an output hash +of 24 bytes +``` +$ echo -n "password" | ./argon2 somesalt -t 2 -m 16 -p 4 -l 24 +Type: Argon2i +Iterations: 2 +Memory: 65536 KiB +Parallelism: 4 +Hash: 45d7ac72e76f242b20b77b9bf9bf9d5915894e669a24e6c6 +Encoded: $argon2i$v=19$m=65536,t=2,p=4$c29tZXNhbHQ$RdescudvJCsgt3ub+b+dWRWJTmaaJObG +0.188 seconds +Verification ok +``` + +### Library + +`libargon2` provides an API to both low-level and high-level functions +for using Argon2. + +The example program below hashes the string "password" with Argon2i +using the high-level API and then using the low-level API. While the +high-level API takes the three cost parameters (time, memory, and +parallelism), the password input buffer, the salt input buffer, and the +output buffers, the low-level API takes in these and additional parameters +, as defined in [`include/argon2.h`](include/argon2.h). + +There are many additional parameters, but we will highlight three of them here. + +1. The `secret` parameter, which is used for [keyed hashing]( + https://en.wikipedia.org/wiki/Hash-based_message_authentication_code). + This allows a secret key to be input at hashing time (from some external + location) and be folded into the value of the hash. This means that even if + your salts and hashes are compromized, an attacker cannot brute-force to find + the password without the key. + +2. The `ad` parameter, which is used to fold any additional data into the hash + value. Functionally, this behaves almost exactly like the `secret` or `salt` + parameters; the `ad` parameter is folding into the value of the hash. + However, this parameter is used for different data. The `salt` should be a + random string stored alongside your password. The `secret` should be a random + key only usable at hashing time. The `ad` is for any other data. + +3. The `flags` parameter, which determines which memory should be securely + erased. This is useful if you want to securly delete the `pwd` or `secret` + fields right after they are used. To do this set `flags` to either + `ARGON2_FLAG_CLEAR_PASSWORD` or `ARGON2_FLAG_CLEAR_SECRET`. To change how + internal memory is cleared, change the global flag + `FLAG_clear_internal_memory` (defaults to clearing internal memory). + +Here the time cost `t_cost` is set to 2 iterations, the +memory cost `m_cost` is set to 216 kibibytes (64 mebibytes), +and parallelism is set to 1 (single-thread). + +Compile for example as `gcc test.c libargon2.a -Isrc -o test`, if the program +below is named `test.c` and placed in the project's root directory. + +```c +#include "argon2.h" +#include +#include +#include + +#define HASHLEN 32 +#define SALTLEN 16 +#define PWD "password" + +int main(void) +{ + uint8_t hash1[HASHLEN]; + uint8_t hash2[HASHLEN]; + + uint8_t salt[SALTLEN]; + memset( salt, 0x00, SALTLEN ); + + uint8_t *pwd = (uint8_t *)strdup(PWD); + uint32_t pwdlen = strlen((char *)pwd); + + uint32_t t_cost = 2; // 1-pass computation + uint32_t m_cost = (1<<16); // 64 mebibytes memory usage + uint32_t parallelism = 1; // number of threads and lanes + + // high-level API + argon2i_hash_raw(t_cost, m_cost, parallelism, pwd, pwdlen, salt, SALTLEN, hash1, HASHLEN); + + // low-level API + argon2_context context = { + hash2, /* output array, at least HASHLEN in size */ + HASHLEN, /* digest length */ + pwd, /* password array */ + pwdlen, /* password length */ + salt, /* salt array */ + SALTLEN, /* salt length */ + NULL, 0, /* optional secret data */ + NULL, 0, /* optional associated data */ + t_cost, m_cost, parallelism, parallelism, + ARGON2_VERSION_13, /* algorithm version */ + NULL, NULL, /* custom memory allocation / deallocation functions */ + /* by default only internal memory is cleared (pwd is not wiped) */ + ARGON2_DEFAULT_FLAGS + }; + + int rc = argon2i_ctx( &context ); + if(ARGON2_OK != rc) { + printf("Error: %s\n", argon2_error_message(rc)); + exit(1); + } + free(pwd); + + for( int i=0; i +#include +#include + +#include "argon2.h" +#include "core.h" + + + +int argon2_ctx(argon2_context *context, argon2_type type) { + /* 1. Validate all inputs */ + + uint32_t memory_blocks, segment_length; + argon2_instance_t instance; + + /* 2. Align memory size */ + /* Minimum memory_blocks = 8L blocks, where L is the number of lanes */ + memory_blocks = context->m_cost; + + if (memory_blocks < 2 * ARGON2_SYNC_POINTS * context->lanes) { + memory_blocks = 2 * ARGON2_SYNC_POINTS * context->lanes; + } + + segment_length = memory_blocks / (context->lanes * ARGON2_SYNC_POINTS); + /* Ensure that all segments have equal length */ + memory_blocks = segment_length * (context->lanes * ARGON2_SYNC_POINTS); + + instance.version = context->version; + instance.memory = NULL; + instance.passes = context->t_cost; + instance.memory_blocks = memory_blocks; + instance.segment_length = segment_length; + instance.lane_length = segment_length * ARGON2_SYNC_POINTS; + instance.lanes = context->lanes; + instance.threads = context->threads; + instance.type = type; + + if (instance.threads > instance.lanes) { + instance.threads = instance.lanes; + } + + /* 3. Initialization: Hashing inputs, allocating memory, filling first + * blocks + */ + initialize(&instance, context); + + /* 4. Filling memory */ + fill_memory_blocks(&instance); + + /* 5. Finalization */ + finalize(context, &instance); + + return ARGON2_OK; +} diff --git a/deps/phc-winner-argon2-20190702/_hashcat/argon2.h b/deps/phc-winner-argon2-20190702/_hashcat/argon2.h new file mode 100644 index 000000000..fdc251040 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/_hashcat/argon2.h @@ -0,0 +1,440 @@ +/* + * Argon2 reference source code package - reference C implementations + * + * Copyright 2015 + * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves + * + * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of + * these licenses can be found at: + * + * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + * + * You should have received a copy of both of these licenses along with this + * software. If not, they may be obtained at the above URLs. + */ + +#ifndef ARGON2_H +#define ARGON2_H + +#include +#include +#include + +#if defined(__cplusplus) +extern "C" { +#endif + +/* Symbols visibility control */ +#ifdef A2_VISCTL +#define ARGON2_PUBLIC __attribute__((visibility("default"))) +#define ARGON2_LOCAL __attribute__ ((visibility ("hidden"))) +#elif _MSC_VER +#define ARGON2_PUBLIC __declspec(dllexport) +#define ARGON2_LOCAL +#else +#define ARGON2_PUBLIC +#define ARGON2_LOCAL +#endif + +/* + * Argon2 input parameter restrictions + */ + +/* Minimum and maximum number of lanes (degree of parallelism) */ +#define ARGON2_MIN_LANES UINT32_C(1) +#define ARGON2_MAX_LANES UINT32_C(0xFFFFFF) + +/* Minimum and maximum number of threads */ +#define ARGON2_MIN_THREADS UINT32_C(1) +#define ARGON2_MAX_THREADS UINT32_C(0xFFFFFF) + +/* Number of synchronization points between lanes per pass */ +#define ARGON2_SYNC_POINTS UINT32_C(4) + +/* Minimum and maximum digest size in bytes */ +#define ARGON2_MIN_OUTLEN UINT32_C(4) +#define ARGON2_MAX_OUTLEN UINT32_C(0xFFFFFFFF) + +/* Minimum and maximum number of memory blocks (each of BLOCK_SIZE bytes) */ +#define ARGON2_MIN_MEMORY (2 * ARGON2_SYNC_POINTS) /* 2 blocks per slice */ + +#define ARGON2_MIN(a, b) ((a) < (b) ? (a) : (b)) +/* Max memory size is addressing-space/2, topping at 2^32 blocks (4 TB) */ +#define ARGON2_MAX_MEMORY_BITS \ + ARGON2_MIN(UINT32_C(32), (sizeof(void *) * CHAR_BIT - 10 - 1)) +#define ARGON2_MAX_MEMORY \ + ARGON2_MIN(UINT32_C(0xFFFFFFFF), UINT64_C(1) << ARGON2_MAX_MEMORY_BITS) + +/* Minimum and maximum number of passes */ +#define ARGON2_MIN_TIME UINT32_C(1) +#define ARGON2_MAX_TIME UINT32_C(0xFFFFFFFF) + +/* Minimum and maximum password length in bytes */ +#define ARGON2_MIN_PWD_LENGTH UINT32_C(0) +#define ARGON2_MAX_PWD_LENGTH UINT32_C(0xFFFFFFFF) + +/* Minimum and maximum associated data length in bytes */ +#define ARGON2_MIN_AD_LENGTH UINT32_C(0) +#define ARGON2_MAX_AD_LENGTH UINT32_C(0xFFFFFFFF) + +/* Minimum and maximum salt length in bytes */ +#define ARGON2_MIN_SALT_LENGTH UINT32_C(8) +#define ARGON2_MAX_SALT_LENGTH UINT32_C(0xFFFFFFFF) + +/* Minimum and maximum key length in bytes */ +#define ARGON2_MIN_SECRET UINT32_C(0) +#define ARGON2_MAX_SECRET UINT32_C(0xFFFFFFFF) + +/* Flags to determine which fields are securely wiped (default = no wipe). */ +#define ARGON2_DEFAULT_FLAGS UINT32_C(0) +#define ARGON2_FLAG_CLEAR_PASSWORD (UINT32_C(1) << 0) +#define ARGON2_FLAG_CLEAR_SECRET (UINT32_C(1) << 1) + +/* Global flag to determine if we are wiping internal memory buffers. This flag + * is defined in core.c and defaults to 1 (wipe internal memory). */ +extern int FLAG_clear_internal_memory; + +/* Error codes */ +typedef enum Argon2_ErrorCodes { + ARGON2_OK = 0, + + ARGON2_OUTPUT_PTR_NULL = -1, + + ARGON2_OUTPUT_TOO_SHORT = -2, + ARGON2_OUTPUT_TOO_LONG = -3, + + ARGON2_PWD_TOO_SHORT = -4, + ARGON2_PWD_TOO_LONG = -5, + + ARGON2_SALT_TOO_SHORT = -6, + ARGON2_SALT_TOO_LONG = -7, + + ARGON2_AD_TOO_SHORT = -8, + ARGON2_AD_TOO_LONG = -9, + + ARGON2_SECRET_TOO_SHORT = -10, + ARGON2_SECRET_TOO_LONG = -11, + + ARGON2_TIME_TOO_SMALL = -12, + ARGON2_TIME_TOO_LARGE = -13, + + ARGON2_MEMORY_TOO_LITTLE = -14, + ARGON2_MEMORY_TOO_MUCH = -15, + + ARGON2_LANES_TOO_FEW = -16, + ARGON2_LANES_TOO_MANY = -17, + + ARGON2_PWD_PTR_MISMATCH = -18, /* NULL ptr with non-zero length */ + ARGON2_SALT_PTR_MISMATCH = -19, /* NULL ptr with non-zero length */ + ARGON2_SECRET_PTR_MISMATCH = -20, /* NULL ptr with non-zero length */ + ARGON2_AD_PTR_MISMATCH = -21, /* NULL ptr with non-zero length */ + + ARGON2_MEMORY_ALLOCATION_ERROR = -22, + + ARGON2_FREE_MEMORY_CBK_NULL = -23, + ARGON2_ALLOCATE_MEMORY_CBK_NULL = -24, + + ARGON2_INCORRECT_PARAMETER = -25, + ARGON2_INCORRECT_TYPE = -26, + + ARGON2_OUT_PTR_MISMATCH = -27, + + ARGON2_THREADS_TOO_FEW = -28, + ARGON2_THREADS_TOO_MANY = -29, + + ARGON2_MISSING_ARGS = -30, + + ARGON2_ENCODING_FAIL = -31, + + ARGON2_DECODING_FAIL = -32, + + ARGON2_THREAD_FAIL = -33, + + ARGON2_DECODING_LENGTH_FAIL = -34, + + ARGON2_VERIFY_MISMATCH = -35 +} argon2_error_codes; + +/* Memory allocator types --- for external allocation */ +typedef int (*allocate_fptr)(uint8_t **memory, size_t bytes_to_allocate); +typedef void (*deallocate_fptr)(uint8_t *memory, size_t bytes_to_allocate); + +/* Argon2 external data structures */ + +/* + ***** + * Context: structure to hold Argon2 inputs: + * output array and its length, + * password and its length, + * salt and its length, + * secret and its length, + * associated data and its length, + * number of passes, amount of used memory (in KBytes, can be rounded up a bit) + * number of parallel threads that will be run. + * All the parameters above affect the output hash value. + * Additionally, two function pointers can be provided to allocate and + * deallocate the memory (if NULL, memory will be allocated internally). + * Also, three flags indicate whether to erase password, secret as soon as they + * are pre-hashed (and thus not needed anymore), and the entire memory + ***** + * Simplest situation: you have output array out[8], password is stored in + * pwd[32], salt is stored in salt[16], you do not have keys nor associated + * data. You need to spend 1 GB of RAM and you run 5 passes of Argon2d with + * 4 parallel lanes. + * You want to erase the password, but you're OK with last pass not being + * erased. You want to use the default memory allocator. + * Then you initialize: + Argon2_Context(out,8,pwd,32,salt,16,NULL,0,NULL,0,5,1<<20,4,4,NULL,NULL,true,false,false,false) + */ +typedef struct Argon2_Context { + uint8_t *out; /* output array */ + uint32_t outlen; /* digest length */ + + uint8_t *pwd; /* password array */ + uint32_t pwdlen; /* password length */ + + uint8_t *salt; /* salt array */ + uint32_t saltlen; /* salt length */ + + uint8_t *secret; /* key array */ + uint32_t secretlen; /* key length */ + + uint8_t *ad; /* associated data array */ + uint32_t adlen; /* associated data length */ + + uint32_t t_cost; /* number of passes */ + uint32_t m_cost; /* amount of memory requested (KB) */ + uint32_t lanes; /* number of lanes */ + uint32_t threads; /* maximum number of threads */ + + uint32_t version; /* version number */ + + allocate_fptr allocate_cbk; /* pointer to memory allocator */ + deallocate_fptr free_cbk; /* pointer to memory deallocator */ + + uint32_t flags; /* array of bool options */ + + void *memory; + +} argon2_context; + +/* Argon2 primitive type */ +typedef enum Argon2_type { + Argon2_d = 0, + Argon2_i = 1, + Argon2_id = 2 +} argon2_type; + +/* Version of the algorithm */ +typedef enum Argon2_version { + ARGON2_VERSION_10 = 0x10, + ARGON2_VERSION_13 = 0x13, + ARGON2_VERSION_NUMBER = ARGON2_VERSION_13 +} argon2_version; + +/* + * Function that gives the string representation of an argon2_type. + * @param type The argon2_type that we want the string for + * @param uppercase Whether the string should have the first letter uppercase + * @return NULL if invalid type, otherwise the string representation. + */ +ARGON2_PUBLIC const char *argon2_type2string(argon2_type type, int uppercase); + +/* + * Function that performs memory-hard hashing with certain degree of parallelism + * @param context Pointer to the Argon2 internal structure + * @return Error code if smth is wrong, ARGON2_OK otherwise + */ +ARGON2_PUBLIC int argon2_ctx(argon2_context *context, argon2_type type); + +/** + * Hashes a password with Argon2i, producing an encoded hash + * @param t_cost Number of iterations + * @param m_cost Sets memory usage to m_cost kibibytes + * @param parallelism Number of threads and compute lanes + * @param pwd Pointer to password + * @param pwdlen Password size in bytes + * @param salt Pointer to salt + * @param saltlen Salt size in bytes + * @param hashlen Desired length of the hash in bytes + * @param encoded Buffer where to write the encoded hash + * @param encodedlen Size of the buffer (thus max size of the encoded hash) + * @pre Different parallelism levels will give different results + * @pre Returns ARGON2_OK if successful + */ +ARGON2_PUBLIC int argon2i_hash_encoded(const uint32_t t_cost, + const uint32_t m_cost, + const uint32_t parallelism, + const void *pwd, const size_t pwdlen, + const void *salt, const size_t saltlen, + const size_t hashlen, char *encoded, + const size_t encodedlen); + +/** + * Hashes a password with Argon2i, producing a raw hash at @hash + * @param t_cost Number of iterations + * @param m_cost Sets memory usage to m_cost kibibytes + * @param parallelism Number of threads and compute lanes + * @param pwd Pointer to password + * @param pwdlen Password size in bytes + * @param salt Pointer to salt + * @param saltlen Salt size in bytes + * @param hash Buffer where to write the raw hash - updated by the function + * @param hashlen Desired length of the hash in bytes + * @pre Different parallelism levels will give different results + * @pre Returns ARGON2_OK if successful + */ +ARGON2_PUBLIC int argon2i_hash_raw(const uint32_t t_cost, const uint32_t m_cost, + const uint32_t parallelism, const void *pwd, + const size_t pwdlen, const void *salt, + const size_t saltlen, void *hash, + const size_t hashlen); + +ARGON2_PUBLIC int argon2d_hash_encoded(const uint32_t t_cost, + const uint32_t m_cost, + const uint32_t parallelism, + const void *pwd, const size_t pwdlen, + const void *salt, const size_t saltlen, + const size_t hashlen, char *encoded, + const size_t encodedlen); + +ARGON2_PUBLIC int argon2d_hash_raw(const uint32_t t_cost, const uint32_t m_cost, + const uint32_t parallelism, const void *pwd, + const size_t pwdlen, const void *salt, + const size_t saltlen, void *hash, + const size_t hashlen); + +ARGON2_PUBLIC int argon2id_hash_encoded(const uint32_t t_cost, + const uint32_t m_cost, + const uint32_t parallelism, + const void *pwd, const size_t pwdlen, + const void *salt, const size_t saltlen, + const size_t hashlen, char *encoded, + const size_t encodedlen); + +ARGON2_PUBLIC int argon2id_hash_raw(const uint32_t t_cost, + const uint32_t m_cost, + const uint32_t parallelism, const void *pwd, + const size_t pwdlen, const void *salt, + const size_t saltlen, void *hash, + const size_t hashlen); + +/* generic function underlying the above ones */ +ARGON2_PUBLIC int argon2_hash(const uint32_t t_cost, const uint32_t m_cost, + const uint32_t parallelism, const void *pwd, + const size_t pwdlen, const void *salt, + const size_t saltlen, void *hash, + const size_t hashlen, char *encoded, + const size_t encodedlen, argon2_type type, + const uint32_t version); + +/** + * Verifies a password against an encoded string + * Encoded string is restricted as in validate_inputs() + * @param encoded String encoding parameters, salt, hash + * @param pwd Pointer to password + * @pre Returns ARGON2_OK if successful + */ +ARGON2_PUBLIC int argon2i_verify(const char *encoded, const void *pwd, + const size_t pwdlen); + +ARGON2_PUBLIC int argon2d_verify(const char *encoded, const void *pwd, + const size_t pwdlen); + +ARGON2_PUBLIC int argon2id_verify(const char *encoded, const void *pwd, + const size_t pwdlen); + +/* generic function underlying the above ones */ +ARGON2_PUBLIC int argon2_verify(const char *encoded, const void *pwd, + const size_t pwdlen, argon2_type type); + +/** + * Argon2d: Version of Argon2 that picks memory blocks depending + * on the password and salt. Only for side-channel-free + * environment!! + ***** + * @param context Pointer to current Argon2 context + * @return Zero if successful, a non zero error code otherwise + */ +ARGON2_PUBLIC int argon2d_ctx(argon2_context *context); + +/** + * Argon2i: Version of Argon2 that picks memory blocks + * independent on the password and salt. Good for side-channels, + * but worse w.r.t. tradeoff attacks if only one pass is used. + ***** + * @param context Pointer to current Argon2 context + * @return Zero if successful, a non zero error code otherwise + */ +ARGON2_PUBLIC int argon2i_ctx(argon2_context *context); + +/** + * Argon2id: Version of Argon2 where the first half-pass over memory is + * password-independent, the rest are password-dependent (on the password and + * salt). OK against side channels (they reduce to 1/2-pass Argon2i), and + * better with w.r.t. tradeoff attacks (similar to Argon2d). + ***** + * @param context Pointer to current Argon2 context + * @return Zero if successful, a non zero error code otherwise + */ +ARGON2_PUBLIC int argon2id_ctx(argon2_context *context); + +/** + * Verify if a given password is correct for Argon2d hashing + * @param context Pointer to current Argon2 context + * @param hash The password hash to verify. The length of the hash is + * specified by the context outlen member + * @return Zero if successful, a non zero error code otherwise + */ +ARGON2_PUBLIC int argon2d_verify_ctx(argon2_context *context, const char *hash); + +/** + * Verify if a given password is correct for Argon2i hashing + * @param context Pointer to current Argon2 context + * @param hash The password hash to verify. The length of the hash is + * specified by the context outlen member + * @return Zero if successful, a non zero error code otherwise + */ +ARGON2_PUBLIC int argon2i_verify_ctx(argon2_context *context, const char *hash); + +/** + * Verify if a given password is correct for Argon2id hashing + * @param context Pointer to current Argon2 context + * @param hash The password hash to verify. The length of the hash is + * specified by the context outlen member + * @return Zero if successful, a non zero error code otherwise + */ +ARGON2_PUBLIC int argon2id_verify_ctx(argon2_context *context, + const char *hash); + +/* generic function underlying the above ones */ +ARGON2_PUBLIC int argon2_verify_ctx(argon2_context *context, const char *hash, + argon2_type type); + +/** + * Get the associated error message for given error code + * @return The error message associated with the given error code + */ +ARGON2_PUBLIC const char *argon2_error_message(int error_code); + +/** + * Returns the encoded hash length for the given input parameters + * @param t_cost Number of iterations + * @param m_cost Memory usage in kibibytes + * @param parallelism Number of threads; used to compute lanes + * @param saltlen Salt size in bytes + * @param hashlen Hash size in bytes + * @param type The argon2_type that we want the encoded length for + * @return The encoded hash length in bytes + */ +ARGON2_PUBLIC size_t argon2_encodedlen(uint32_t t_cost, uint32_t m_cost, + uint32_t parallelism, uint32_t saltlen, + uint32_t hashlen, argon2_type type); + +#if defined(__cplusplus) +} +#endif + +#endif diff --git a/deps/phc-winner-argon2-20190702/_hashcat/blake2/blake2-impl.h b/deps/phc-winner-argon2-20190702/_hashcat/blake2/blake2-impl.h new file mode 100644 index 000000000..241f0beb3 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/_hashcat/blake2/blake2-impl.h @@ -0,0 +1,156 @@ +/* + * Argon2 reference source code package - reference C implementations + * + * Copyright 2015 + * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves + * + * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of + * these licenses can be found at: + * + * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + * + * You should have received a copy of both of these licenses along with this + * software. If not, they may be obtained at the above URLs. + */ + +#ifndef PORTABLE_BLAKE2_IMPL_H +#define PORTABLE_BLAKE2_IMPL_H + +#include +#include + +#if defined(_MSC_VER) +#define BLAKE2_INLINE __inline +#elif defined(__GNUC__) || defined(__clang__) +#define BLAKE2_INLINE __inline__ +#else +#define BLAKE2_INLINE +#endif + +/* Argon2 Team - Begin Code */ +/* + Not an exhaustive list, but should cover the majority of modern platforms + Additionally, the code will always be correct---this is only a performance + tweak. +*/ +#if (defined(__BYTE_ORDER__) && \ + (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)) || \ + defined(__LITTLE_ENDIAN__) || defined(__ARMEL__) || defined(__MIPSEL__) || \ + defined(__AARCH64EL__) || defined(__amd64__) || defined(__i386__) || \ + defined(_M_IX86) || defined(_M_X64) || defined(_M_AMD64) || \ + defined(_M_ARM) +#define NATIVE_LITTLE_ENDIAN +#endif +/* Argon2 Team - End Code */ + +static BLAKE2_INLINE uint32_t load32(const void *src) { +#if defined(NATIVE_LITTLE_ENDIAN) + uint32_t w; + memcpy(&w, src, sizeof w); + return w; +#else + const uint8_t *p = (const uint8_t *)src; + uint32_t w = *p++; + w |= (uint32_t)(*p++) << 8; + w |= (uint32_t)(*p++) << 16; + w |= (uint32_t)(*p++) << 24; + return w; +#endif +} + +static BLAKE2_INLINE uint64_t load64(const void *src) { +#if defined(NATIVE_LITTLE_ENDIAN) + uint64_t w; + memcpy(&w, src, sizeof w); + return w; +#else + const uint8_t *p = (const uint8_t *)src; + uint64_t w = *p++; + w |= (uint64_t)(*p++) << 8; + w |= (uint64_t)(*p++) << 16; + w |= (uint64_t)(*p++) << 24; + w |= (uint64_t)(*p++) << 32; + w |= (uint64_t)(*p++) << 40; + w |= (uint64_t)(*p++) << 48; + w |= (uint64_t)(*p++) << 56; + return w; +#endif +} + +static BLAKE2_INLINE void store32(void *dst, uint32_t w) { +#if defined(NATIVE_LITTLE_ENDIAN) + memcpy(dst, &w, sizeof w); +#else + uint8_t *p = (uint8_t *)dst; + *p++ = (uint8_t)w; + w >>= 8; + *p++ = (uint8_t)w; + w >>= 8; + *p++ = (uint8_t)w; + w >>= 8; + *p++ = (uint8_t)w; +#endif +} + +static BLAKE2_INLINE void store64(void *dst, uint64_t w) { +#if defined(NATIVE_LITTLE_ENDIAN) + memcpy(dst, &w, sizeof w); +#else + uint8_t *p = (uint8_t *)dst; + *p++ = (uint8_t)w; + w >>= 8; + *p++ = (uint8_t)w; + w >>= 8; + *p++ = (uint8_t)w; + w >>= 8; + *p++ = (uint8_t)w; + w >>= 8; + *p++ = (uint8_t)w; + w >>= 8; + *p++ = (uint8_t)w; + w >>= 8; + *p++ = (uint8_t)w; + w >>= 8; + *p++ = (uint8_t)w; +#endif +} + +static BLAKE2_INLINE uint64_t load48(const void *src) { + const uint8_t *p = (const uint8_t *)src; + uint64_t w = *p++; + w |= (uint64_t)(*p++) << 8; + w |= (uint64_t)(*p++) << 16; + w |= (uint64_t)(*p++) << 24; + w |= (uint64_t)(*p++) << 32; + w |= (uint64_t)(*p++) << 40; + return w; +} + +static BLAKE2_INLINE void store48(void *dst, uint64_t w) { + uint8_t *p = (uint8_t *)dst; + *p++ = (uint8_t)w; + w >>= 8; + *p++ = (uint8_t)w; + w >>= 8; + *p++ = (uint8_t)w; + w >>= 8; + *p++ = (uint8_t)w; + w >>= 8; + *p++ = (uint8_t)w; + w >>= 8; + *p++ = (uint8_t)w; +} + +static BLAKE2_INLINE uint32_t rotr32(const uint32_t w, const unsigned c) { + return (w >> c) | (w << (32 - c)); +} + +static BLAKE2_INLINE uint64_t rotr64(const uint64_t w, const unsigned c) { + return (w >> c) | (w << (64 - c)); +} + +void clear_internal_memory(void *v, size_t n); + +#endif diff --git a/deps/phc-winner-argon2-20190702/_hashcat/blake2/blake2.h b/deps/phc-winner-argon2-20190702/_hashcat/blake2/blake2.h new file mode 100644 index 000000000..eeb45bedf --- /dev/null +++ b/deps/phc-winner-argon2-20190702/_hashcat/blake2/blake2.h @@ -0,0 +1,87 @@ +/* + * Argon2 reference source code package - reference C implementations + * + * Copyright 2015 + * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves + * + * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of + * these licenses can be found at: + * + * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + * + * You should have received a copy of both of these licenses along with this + * software. If not, they may be obtained at the above URLs. + */ + +#ifndef PORTABLE_BLAKE2_H +#define PORTABLE_BLAKE2_H + +#if defined(__cplusplus) +extern "C" { +#endif + +enum blake2b_constant { + BLAKE2B_BLOCKBYTES = 128, + BLAKE2B_OUTBYTES = 64, + BLAKE2B_KEYBYTES = 64, + BLAKE2B_SALTBYTES = 16, + BLAKE2B_PERSONALBYTES = 16 +}; + +#pragma pack(push, 1) +typedef struct __blake2b_param { + uint8_t digest_length; /* 1 */ + uint8_t key_length; /* 2 */ + uint8_t fanout; /* 3 */ + uint8_t depth; /* 4 */ + uint32_t leaf_length; /* 8 */ + uint64_t node_offset; /* 16 */ + uint8_t node_depth; /* 17 */ + uint8_t inner_length; /* 18 */ + uint8_t reserved[14]; /* 32 */ + uint8_t salt[BLAKE2B_SALTBYTES]; /* 48 */ + uint8_t personal[BLAKE2B_PERSONALBYTES]; /* 64 */ +} blake2b_param; +#pragma pack(pop) + +typedef struct __blake2b_state { + uint64_t h[8]; + uint64_t t[2]; + uint64_t f[2]; + uint8_t buf[BLAKE2B_BLOCKBYTES]; + unsigned buflen; + unsigned outlen; + uint8_t last_node; +} blake2b_state; + +/* Ensure param structs have not been wrongly padded */ +/* Poor man's static_assert */ +enum { + blake2_size_check_0 = 1 / !!(CHAR_BIT == 8), + blake2_size_check_2 = + 1 / !!(sizeof(blake2b_param) == sizeof(uint64_t) * CHAR_BIT) +}; + +/* Streaming API */ +ARGON2_LOCAL int blake2b_init(blake2b_state *S, size_t outlen); +ARGON2_LOCAL int blake2b_init_key(blake2b_state *S, size_t outlen, const void *key, + size_t keylen); +ARGON2_LOCAL int blake2b_init_param(blake2b_state *S, const blake2b_param *P); +ARGON2_LOCAL int blake2b_update(blake2b_state *S, const void *in, size_t inlen); +ARGON2_LOCAL int blake2b_final(blake2b_state *S, void *out, size_t outlen); + +/* Simple API */ +ARGON2_LOCAL int blake2b(void *out, size_t outlen, const void *in, size_t inlen, + const void *key, size_t keylen); + +/* Argon2 Team - Begin Code */ +ARGON2_LOCAL int blake2b_long(void *out, size_t outlen, const void *in, size_t inlen); +/* Argon2 Team - End Code */ + +#if defined(__cplusplus) +} +#endif + +#endif diff --git a/deps/phc-winner-argon2-20190702/_hashcat/blake2/blake2b.c b/deps/phc-winner-argon2-20190702/_hashcat/blake2/blake2b.c new file mode 100644 index 000000000..370eccf8d --- /dev/null +++ b/deps/phc-winner-argon2-20190702/_hashcat/blake2/blake2b.c @@ -0,0 +1,390 @@ +/* + * Argon2 reference source code package - reference C implementations + * + * Copyright 2015 + * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves + * + * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of + * these licenses can be found at: + * + * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + * + * You should have received a copy of both of these licenses along with this + * software. If not, they may be obtained at the above URLs. + */ + +#include +#include +#include + +#include "blake2.h" +#include "blake2-impl.h" + +static const uint64_t blake2b_IV[8] = { + UINT64_C(0x6a09e667f3bcc908), UINT64_C(0xbb67ae8584caa73b), + UINT64_C(0x3c6ef372fe94f82b), UINT64_C(0xa54ff53a5f1d36f1), + UINT64_C(0x510e527fade682d1), UINT64_C(0x9b05688c2b3e6c1f), + UINT64_C(0x1f83d9abfb41bd6b), UINT64_C(0x5be0cd19137e2179)}; + +static const unsigned int blake2b_sigma[12][16] = { + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, + {14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3}, + {11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4}, + {7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8}, + {9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13}, + {2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9}, + {12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11}, + {13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10}, + {6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5}, + {10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0}, + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, + {14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3}, +}; + +static BLAKE2_INLINE void blake2b_set_lastnode(blake2b_state *S) { + S->f[1] = (uint64_t)-1; +} + +static BLAKE2_INLINE void blake2b_set_lastblock(blake2b_state *S) { + if (S->last_node) { + blake2b_set_lastnode(S); + } + S->f[0] = (uint64_t)-1; +} + +static BLAKE2_INLINE void blake2b_increment_counter(blake2b_state *S, + uint64_t inc) { + S->t[0] += inc; + S->t[1] += (S->t[0] < inc); +} + +static BLAKE2_INLINE void blake2b_invalidate_state(blake2b_state *S) { +// clear_internal_memory(S, sizeof(*S)); /* wipe */ + blake2b_set_lastblock(S); /* invalidate for further use */ +} + +static BLAKE2_INLINE void blake2b_init0(blake2b_state *S) { + memset(S, 0, sizeof(*S)); + memcpy(S->h, blake2b_IV, sizeof(S->h)); +} + +int blake2b_init_param(blake2b_state *S, const blake2b_param *P) { + const unsigned char *p = (const unsigned char *)P; + unsigned int i; + + if (NULL == P || NULL == S) { + return -1; + } + + blake2b_init0(S); + /* IV XOR Parameter Block */ + for (i = 0; i < 8; ++i) { + S->h[i] ^= load64(&p[i * sizeof(S->h[i])]); + } + S->outlen = P->digest_length; + return 0; +} + +/* Sequential blake2b initialization */ +int blake2b_init(blake2b_state *S, size_t outlen) { + blake2b_param P; + + if (S == NULL) { + return -1; + } + + if ((outlen == 0) || (outlen > BLAKE2B_OUTBYTES)) { + blake2b_invalidate_state(S); + return -1; + } + + /* Setup Parameter Block for unkeyed BLAKE2 */ + P.digest_length = (uint8_t)outlen; + P.key_length = 0; + P.fanout = 1; + P.depth = 1; + P.leaf_length = 0; + P.node_offset = 0; + P.node_depth = 0; + P.inner_length = 0; + memset(P.reserved, 0, sizeof(P.reserved)); + memset(P.salt, 0, sizeof(P.salt)); + memset(P.personal, 0, sizeof(P.personal)); + + return blake2b_init_param(S, &P); +} + +int blake2b_init_key(blake2b_state *S, size_t outlen, const void *key, + size_t keylen) { + blake2b_param P; + + if (S == NULL) { + return -1; + } + + if ((outlen == 0) || (outlen > BLAKE2B_OUTBYTES)) { + blake2b_invalidate_state(S); + return -1; + } + + if ((key == 0) || (keylen == 0) || (keylen > BLAKE2B_KEYBYTES)) { + blake2b_invalidate_state(S); + return -1; + } + + /* Setup Parameter Block for keyed BLAKE2 */ + P.digest_length = (uint8_t)outlen; + P.key_length = (uint8_t)keylen; + P.fanout = 1; + P.depth = 1; + P.leaf_length = 0; + P.node_offset = 0; + P.node_depth = 0; + P.inner_length = 0; + memset(P.reserved, 0, sizeof(P.reserved)); + memset(P.salt, 0, sizeof(P.salt)); + memset(P.personal, 0, sizeof(P.personal)); + + if (blake2b_init_param(S, &P) < 0) { + blake2b_invalidate_state(S); + return -1; + } + + { + uint8_t block[BLAKE2B_BLOCKBYTES]; + memset(block, 0, BLAKE2B_BLOCKBYTES); + memcpy(block, key, keylen); + blake2b_update(S, block, BLAKE2B_BLOCKBYTES); + /* Burn the key from stack */ +// clear_internal_memory(block, BLAKE2B_BLOCKBYTES); + } + return 0; +} + +static void blake2b_compress(blake2b_state *S, const uint8_t *block) { + uint64_t m[16]; + uint64_t v[16]; + unsigned int i, r; + + for (i = 0; i < 16; ++i) { + m[i] = load64(block + i * sizeof(m[i])); + } + + for (i = 0; i < 8; ++i) { + v[i] = S->h[i]; + } + + v[8] = blake2b_IV[0]; + v[9] = blake2b_IV[1]; + v[10] = blake2b_IV[2]; + v[11] = blake2b_IV[3]; + v[12] = blake2b_IV[4] ^ S->t[0]; + v[13] = blake2b_IV[5] ^ S->t[1]; + v[14] = blake2b_IV[6] ^ S->f[0]; + v[15] = blake2b_IV[7] ^ S->f[1]; + +#define G(r, i, a, b, c, d) \ + do { \ + a = a + b + m[blake2b_sigma[r][2 * i + 0]]; \ + d = rotr64(d ^ a, 32); \ + c = c + d; \ + b = rotr64(b ^ c, 24); \ + a = a + b + m[blake2b_sigma[r][2 * i + 1]]; \ + d = rotr64(d ^ a, 16); \ + c = c + d; \ + b = rotr64(b ^ c, 63); \ + } while ((void)0, 0) + +#define ROUND(r) \ + do { \ + G(r, 0, v[0], v[4], v[8], v[12]); \ + G(r, 1, v[1], v[5], v[9], v[13]); \ + G(r, 2, v[2], v[6], v[10], v[14]); \ + G(r, 3, v[3], v[7], v[11], v[15]); \ + G(r, 4, v[0], v[5], v[10], v[15]); \ + G(r, 5, v[1], v[6], v[11], v[12]); \ + G(r, 6, v[2], v[7], v[8], v[13]); \ + G(r, 7, v[3], v[4], v[9], v[14]); \ + } while ((void)0, 0) + + for (r = 0; r < 12; ++r) { + ROUND(r); + } + + for (i = 0; i < 8; ++i) { + S->h[i] = S->h[i] ^ v[i] ^ v[i + 8]; + } + +#undef G +#undef ROUND +} + +int blake2b_update(blake2b_state *S, const void *in, size_t inlen) { + const uint8_t *pin = (const uint8_t *)in; + + if (inlen == 0) { + return 0; + } + + /* Sanity check */ + if (S == NULL || in == NULL) { + return -1; + } + + /* Is this a reused state? */ + if (S->f[0] != 0) { + return -1; + } + + if (S->buflen + inlen > BLAKE2B_BLOCKBYTES) { + /* Complete current block */ + size_t left = S->buflen; + size_t fill = BLAKE2B_BLOCKBYTES - left; + memcpy(&S->buf[left], pin, fill); + blake2b_increment_counter(S, BLAKE2B_BLOCKBYTES); + blake2b_compress(S, S->buf); + S->buflen = 0; + inlen -= fill; + pin += fill; + /* Avoid buffer copies when possible */ + while (inlen > BLAKE2B_BLOCKBYTES) { + blake2b_increment_counter(S, BLAKE2B_BLOCKBYTES); + blake2b_compress(S, pin); + inlen -= BLAKE2B_BLOCKBYTES; + pin += BLAKE2B_BLOCKBYTES; + } + } + memcpy(&S->buf[S->buflen], pin, inlen); + S->buflen += (unsigned int)inlen; + return 0; +} + +int blake2b_final(blake2b_state *S, void *out, size_t outlen) { + uint8_t buffer[BLAKE2B_OUTBYTES] = {0}; + unsigned int i; + + /* Sanity checks */ + if (S == NULL || out == NULL || outlen < S->outlen) { + return -1; + } + + /* Is this a reused state? */ + if (S->f[0] != 0) { + return -1; + } + + blake2b_increment_counter(S, S->buflen); + blake2b_set_lastblock(S); + memset(&S->buf[S->buflen], 0, BLAKE2B_BLOCKBYTES - S->buflen); /* Padding */ + blake2b_compress(S, S->buf); + + for (i = 0; i < 8; ++i) { /* Output full hash to temp buffer */ + store64(buffer + sizeof(S->h[i]) * i, S->h[i]); + } + + memcpy(out, buffer, S->outlen); +// clear_internal_memory(buffer, sizeof(buffer)); +// clear_internal_memory(S->buf, sizeof(S->buf)); +// clear_internal_memory(S->h, sizeof(S->h)); + return 0; +} + +int blake2b(void *out, size_t outlen, const void *in, size_t inlen, + const void *key, size_t keylen) { + blake2b_state S; + int ret = -1; + + /* Verify parameters */ + if (NULL == in && inlen > 0) { + goto fail; + } + + if (NULL == out || outlen == 0 || outlen > BLAKE2B_OUTBYTES) { + goto fail; + } + + if ((NULL == key && keylen > 0) || keylen > BLAKE2B_KEYBYTES) { + goto fail; + } + + if (keylen > 0) { + if (blake2b_init_key(&S, outlen, key, keylen) < 0) { + goto fail; + } + } else { + if (blake2b_init(&S, outlen) < 0) { + goto fail; + } + } + + if (blake2b_update(&S, in, inlen) < 0) { + goto fail; + } + ret = blake2b_final(&S, out, outlen); + +fail: +// clear_internal_memory(&S, sizeof(S)); + return ret; +} + +/* Argon2 Team - Begin Code */ +int blake2b_long(void *pout, size_t outlen, const void *in, size_t inlen) { + uint8_t *out = (uint8_t *)pout; + blake2b_state blake_state; + uint8_t outlen_bytes[sizeof(uint32_t)] = {0}; + int ret = -1; + + if (outlen > UINT32_MAX) { + goto fail; + } + + /* Ensure little-endian byte order! */ + store32(outlen_bytes, (uint32_t)outlen); + +#define TRY(statement) \ + do { \ + ret = statement; \ + if (ret < 0) { \ + goto fail; \ + } \ + } while ((void)0, 0) + + if (outlen <= BLAKE2B_OUTBYTES) { + TRY(blake2b_init(&blake_state, outlen)); + TRY(blake2b_update(&blake_state, outlen_bytes, sizeof(outlen_bytes))); + TRY(blake2b_update(&blake_state, in, inlen)); + TRY(blake2b_final(&blake_state, out, outlen)); + } else { + uint32_t toproduce; + uint8_t out_buffer[BLAKE2B_OUTBYTES]; + uint8_t in_buffer[BLAKE2B_OUTBYTES]; + TRY(blake2b_init(&blake_state, BLAKE2B_OUTBYTES)); + TRY(blake2b_update(&blake_state, outlen_bytes, sizeof(outlen_bytes))); + TRY(blake2b_update(&blake_state, in, inlen)); + TRY(blake2b_final(&blake_state, out_buffer, BLAKE2B_OUTBYTES)); + memcpy(out, out_buffer, BLAKE2B_OUTBYTES / 2); + out += BLAKE2B_OUTBYTES / 2; + toproduce = (uint32_t)outlen - BLAKE2B_OUTBYTES / 2; + + while (toproduce > BLAKE2B_OUTBYTES) { + memcpy(in_buffer, out_buffer, BLAKE2B_OUTBYTES); + TRY(blake2b(out_buffer, BLAKE2B_OUTBYTES, in_buffer, + BLAKE2B_OUTBYTES, NULL, 0)); + memcpy(out, out_buffer, BLAKE2B_OUTBYTES / 2); + out += BLAKE2B_OUTBYTES / 2; + toproduce -= BLAKE2B_OUTBYTES / 2; + } + + memcpy(in_buffer, out_buffer, BLAKE2B_OUTBYTES); + TRY(blake2b(out_buffer, toproduce, in_buffer, BLAKE2B_OUTBYTES, NULL, + 0)); + memcpy(out, out_buffer, toproduce); + } +fail: +// clear_internal_memory(&blake_state, sizeof(blake_state)); + return ret; +#undef TRY +} +/* Argon2 Team - End Code */ diff --git a/deps/phc-winner-argon2-20190702/_hashcat/blake2/blamka-round-opt.h b/deps/phc-winner-argon2-20190702/_hashcat/blake2/blamka-round-opt.h new file mode 100644 index 000000000..2c8942e31 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/_hashcat/blake2/blamka-round-opt.h @@ -0,0 +1,471 @@ +/* + * Argon2 reference source code package - reference C implementations + * + * Copyright 2015 + * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves + * + * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of + * these licenses can be found at: + * + * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + * + * You should have received a copy of both of these licenses along with this + * software. If not, they may be obtained at the above URLs. + */ + +#ifndef BLAKE_ROUND_MKA_OPT_H +#define BLAKE_ROUND_MKA_OPT_H + +#include "blake2-impl.h" + +#include +#if defined(__SSSE3__) +#include /* for _mm_shuffle_epi8 and _mm_alignr_epi8 */ +#endif + +#if defined(__XOP__) && (defined(__GNUC__) || defined(__clang__)) +#include +#endif + +#if !defined(__AVX512F__) +#if !defined(__AVX2__) +#if !defined(__XOP__) +#if defined(__SSSE3__) +#define r16 \ + (_mm_setr_epi8(2, 3, 4, 5, 6, 7, 0, 1, 10, 11, 12, 13, 14, 15, 8, 9)) +#define r24 \ + (_mm_setr_epi8(3, 4, 5, 6, 7, 0, 1, 2, 11, 12, 13, 14, 15, 8, 9, 10)) +#define _mm_roti_epi64(x, c) \ + (-(c) == 32) \ + ? _mm_shuffle_epi32((x), _MM_SHUFFLE(2, 3, 0, 1)) \ + : (-(c) == 24) \ + ? _mm_shuffle_epi8((x), r24) \ + : (-(c) == 16) \ + ? _mm_shuffle_epi8((x), r16) \ + : (-(c) == 63) \ + ? _mm_xor_si128(_mm_srli_epi64((x), -(c)), \ + _mm_add_epi64((x), (x))) \ + : _mm_xor_si128(_mm_srli_epi64((x), -(c)), \ + _mm_slli_epi64((x), 64 - (-(c)))) +#else /* defined(__SSE2__) */ +#define _mm_roti_epi64(r, c) \ + _mm_xor_si128(_mm_srli_epi64((r), -(c)), _mm_slli_epi64((r), 64 - (-(c)))) +#endif +#else +#endif + +static BLAKE2_INLINE __m128i fBlaMka(__m128i x, __m128i y) { + const __m128i z = _mm_mul_epu32(x, y); + return _mm_add_epi64(_mm_add_epi64(x, y), _mm_add_epi64(z, z)); +} + +#define G1(A0, B0, C0, D0, A1, B1, C1, D1) \ + do { \ + A0 = fBlaMka(A0, B0); \ + A1 = fBlaMka(A1, B1); \ + \ + D0 = _mm_xor_si128(D0, A0); \ + D1 = _mm_xor_si128(D1, A1); \ + \ + D0 = _mm_roti_epi64(D0, -32); \ + D1 = _mm_roti_epi64(D1, -32); \ + \ + C0 = fBlaMka(C0, D0); \ + C1 = fBlaMka(C1, D1); \ + \ + B0 = _mm_xor_si128(B0, C0); \ + B1 = _mm_xor_si128(B1, C1); \ + \ + B0 = _mm_roti_epi64(B0, -24); \ + B1 = _mm_roti_epi64(B1, -24); \ + } while ((void)0, 0) + +#define G2(A0, B0, C0, D0, A1, B1, C1, D1) \ + do { \ + A0 = fBlaMka(A0, B0); \ + A1 = fBlaMka(A1, B1); \ + \ + D0 = _mm_xor_si128(D0, A0); \ + D1 = _mm_xor_si128(D1, A1); \ + \ + D0 = _mm_roti_epi64(D0, -16); \ + D1 = _mm_roti_epi64(D1, -16); \ + \ + C0 = fBlaMka(C0, D0); \ + C1 = fBlaMka(C1, D1); \ + \ + B0 = _mm_xor_si128(B0, C0); \ + B1 = _mm_xor_si128(B1, C1); \ + \ + B0 = _mm_roti_epi64(B0, -63); \ + B1 = _mm_roti_epi64(B1, -63); \ + } while ((void)0, 0) + +#if defined(__SSSE3__) +#define DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \ + do { \ + __m128i t0 = _mm_alignr_epi8(B1, B0, 8); \ + __m128i t1 = _mm_alignr_epi8(B0, B1, 8); \ + B0 = t0; \ + B1 = t1; \ + \ + t0 = C0; \ + C0 = C1; \ + C1 = t0; \ + \ + t0 = _mm_alignr_epi8(D1, D0, 8); \ + t1 = _mm_alignr_epi8(D0, D1, 8); \ + D0 = t1; \ + D1 = t0; \ + } while ((void)0, 0) + +#define UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \ + do { \ + __m128i t0 = _mm_alignr_epi8(B0, B1, 8); \ + __m128i t1 = _mm_alignr_epi8(B1, B0, 8); \ + B0 = t0; \ + B1 = t1; \ + \ + t0 = C0; \ + C0 = C1; \ + C1 = t0; \ + \ + t0 = _mm_alignr_epi8(D0, D1, 8); \ + t1 = _mm_alignr_epi8(D1, D0, 8); \ + D0 = t1; \ + D1 = t0; \ + } while ((void)0, 0) +#else /* SSE2 */ +#define DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \ + do { \ + __m128i t0 = D0; \ + __m128i t1 = B0; \ + D0 = C0; \ + C0 = C1; \ + C1 = D0; \ + D0 = _mm_unpackhi_epi64(D1, _mm_unpacklo_epi64(t0, t0)); \ + D1 = _mm_unpackhi_epi64(t0, _mm_unpacklo_epi64(D1, D1)); \ + B0 = _mm_unpackhi_epi64(B0, _mm_unpacklo_epi64(B1, B1)); \ + B1 = _mm_unpackhi_epi64(B1, _mm_unpacklo_epi64(t1, t1)); \ + } while ((void)0, 0) + +#define UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \ + do { \ + __m128i t0, t1; \ + t0 = C0; \ + C0 = C1; \ + C1 = t0; \ + t0 = B0; \ + t1 = D0; \ + B0 = _mm_unpackhi_epi64(B1, _mm_unpacklo_epi64(B0, B0)); \ + B1 = _mm_unpackhi_epi64(t0, _mm_unpacklo_epi64(B1, B1)); \ + D0 = _mm_unpackhi_epi64(D0, _mm_unpacklo_epi64(D1, D1)); \ + D1 = _mm_unpackhi_epi64(D1, _mm_unpacklo_epi64(t1, t1)); \ + } while ((void)0, 0) +#endif + +#define BLAKE2_ROUND(A0, A1, B0, B1, C0, C1, D0, D1) \ + do { \ + G1(A0, B0, C0, D0, A1, B1, C1, D1); \ + G2(A0, B0, C0, D0, A1, B1, C1, D1); \ + \ + DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \ + \ + G1(A0, B0, C0, D0, A1, B1, C1, D1); \ + G2(A0, B0, C0, D0, A1, B1, C1, D1); \ + \ + UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \ + } while ((void)0, 0) +#else /* __AVX2__ */ + +#include + +#define rotr32(x) _mm256_shuffle_epi32(x, _MM_SHUFFLE(2, 3, 0, 1)) +#define rotr24(x) _mm256_shuffle_epi8(x, _mm256_setr_epi8(3, 4, 5, 6, 7, 0, 1, 2, 11, 12, 13, 14, 15, 8, 9, 10, 3, 4, 5, 6, 7, 0, 1, 2, 11, 12, 13, 14, 15, 8, 9, 10)) +#define rotr16(x) _mm256_shuffle_epi8(x, _mm256_setr_epi8(2, 3, 4, 5, 6, 7, 0, 1, 10, 11, 12, 13, 14, 15, 8, 9, 2, 3, 4, 5, 6, 7, 0, 1, 10, 11, 12, 13, 14, 15, 8, 9)) +#define rotr63(x) _mm256_xor_si256(_mm256_srli_epi64((x), 63), _mm256_add_epi64((x), (x))) + +#define G1_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ + do { \ + __m256i ml = _mm256_mul_epu32(A0, B0); \ + ml = _mm256_add_epi64(ml, ml); \ + A0 = _mm256_add_epi64(A0, _mm256_add_epi64(B0, ml)); \ + D0 = _mm256_xor_si256(D0, A0); \ + D0 = rotr32(D0); \ + \ + ml = _mm256_mul_epu32(C0, D0); \ + ml = _mm256_add_epi64(ml, ml); \ + C0 = _mm256_add_epi64(C0, _mm256_add_epi64(D0, ml)); \ + \ + B0 = _mm256_xor_si256(B0, C0); \ + B0 = rotr24(B0); \ + \ + ml = _mm256_mul_epu32(A1, B1); \ + ml = _mm256_add_epi64(ml, ml); \ + A1 = _mm256_add_epi64(A1, _mm256_add_epi64(B1, ml)); \ + D1 = _mm256_xor_si256(D1, A1); \ + D1 = rotr32(D1); \ + \ + ml = _mm256_mul_epu32(C1, D1); \ + ml = _mm256_add_epi64(ml, ml); \ + C1 = _mm256_add_epi64(C1, _mm256_add_epi64(D1, ml)); \ + \ + B1 = _mm256_xor_si256(B1, C1); \ + B1 = rotr24(B1); \ + } while((void)0, 0); + +#define G2_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ + do { \ + __m256i ml = _mm256_mul_epu32(A0, B0); \ + ml = _mm256_add_epi64(ml, ml); \ + A0 = _mm256_add_epi64(A0, _mm256_add_epi64(B0, ml)); \ + D0 = _mm256_xor_si256(D0, A0); \ + D0 = rotr16(D0); \ + \ + ml = _mm256_mul_epu32(C0, D0); \ + ml = _mm256_add_epi64(ml, ml); \ + C0 = _mm256_add_epi64(C0, _mm256_add_epi64(D0, ml)); \ + B0 = _mm256_xor_si256(B0, C0); \ + B0 = rotr63(B0); \ + \ + ml = _mm256_mul_epu32(A1, B1); \ + ml = _mm256_add_epi64(ml, ml); \ + A1 = _mm256_add_epi64(A1, _mm256_add_epi64(B1, ml)); \ + D1 = _mm256_xor_si256(D1, A1); \ + D1 = rotr16(D1); \ + \ + ml = _mm256_mul_epu32(C1, D1); \ + ml = _mm256_add_epi64(ml, ml); \ + C1 = _mm256_add_epi64(C1, _mm256_add_epi64(D1, ml)); \ + B1 = _mm256_xor_si256(B1, C1); \ + B1 = rotr63(B1); \ + } while((void)0, 0); + +#define DIAGONALIZE_1(A0, B0, C0, D0, A1, B1, C1, D1) \ + do { \ + B0 = _mm256_permute4x64_epi64(B0, _MM_SHUFFLE(0, 3, 2, 1)); \ + C0 = _mm256_permute4x64_epi64(C0, _MM_SHUFFLE(1, 0, 3, 2)); \ + D0 = _mm256_permute4x64_epi64(D0, _MM_SHUFFLE(2, 1, 0, 3)); \ + \ + B1 = _mm256_permute4x64_epi64(B1, _MM_SHUFFLE(0, 3, 2, 1)); \ + C1 = _mm256_permute4x64_epi64(C1, _MM_SHUFFLE(1, 0, 3, 2)); \ + D1 = _mm256_permute4x64_epi64(D1, _MM_SHUFFLE(2, 1, 0, 3)); \ + } while((void)0, 0); + +#define DIAGONALIZE_2(A0, A1, B0, B1, C0, C1, D0, D1) \ + do { \ + __m256i tmp1 = _mm256_blend_epi32(B0, B1, 0xCC); \ + __m256i tmp2 = _mm256_blend_epi32(B0, B1, 0x33); \ + B1 = _mm256_permute4x64_epi64(tmp1, _MM_SHUFFLE(2,3,0,1)); \ + B0 = _mm256_permute4x64_epi64(tmp2, _MM_SHUFFLE(2,3,0,1)); \ + \ + tmp1 = C0; \ + C0 = C1; \ + C1 = tmp1; \ + \ + tmp1 = _mm256_blend_epi32(D0, D1, 0xCC); \ + tmp2 = _mm256_blend_epi32(D0, D1, 0x33); \ + D0 = _mm256_permute4x64_epi64(tmp1, _MM_SHUFFLE(2,3,0,1)); \ + D1 = _mm256_permute4x64_epi64(tmp2, _MM_SHUFFLE(2,3,0,1)); \ + } while(0); + +#define UNDIAGONALIZE_1(A0, B0, C0, D0, A1, B1, C1, D1) \ + do { \ + B0 = _mm256_permute4x64_epi64(B0, _MM_SHUFFLE(2, 1, 0, 3)); \ + C0 = _mm256_permute4x64_epi64(C0, _MM_SHUFFLE(1, 0, 3, 2)); \ + D0 = _mm256_permute4x64_epi64(D0, _MM_SHUFFLE(0, 3, 2, 1)); \ + \ + B1 = _mm256_permute4x64_epi64(B1, _MM_SHUFFLE(2, 1, 0, 3)); \ + C1 = _mm256_permute4x64_epi64(C1, _MM_SHUFFLE(1, 0, 3, 2)); \ + D1 = _mm256_permute4x64_epi64(D1, _MM_SHUFFLE(0, 3, 2, 1)); \ + } while((void)0, 0); + +#define UNDIAGONALIZE_2(A0, A1, B0, B1, C0, C1, D0, D1) \ + do { \ + __m256i tmp1 = _mm256_blend_epi32(B0, B1, 0xCC); \ + __m256i tmp2 = _mm256_blend_epi32(B0, B1, 0x33); \ + B0 = _mm256_permute4x64_epi64(tmp1, _MM_SHUFFLE(2,3,0,1)); \ + B1 = _mm256_permute4x64_epi64(tmp2, _MM_SHUFFLE(2,3,0,1)); \ + \ + tmp1 = C0; \ + C0 = C1; \ + C1 = tmp1; \ + \ + tmp1 = _mm256_blend_epi32(D0, D1, 0x33); \ + tmp2 = _mm256_blend_epi32(D0, D1, 0xCC); \ + D0 = _mm256_permute4x64_epi64(tmp1, _MM_SHUFFLE(2,3,0,1)); \ + D1 = _mm256_permute4x64_epi64(tmp2, _MM_SHUFFLE(2,3,0,1)); \ + } while((void)0, 0); + +#define BLAKE2_ROUND_1(A0, A1, B0, B1, C0, C1, D0, D1) \ + do{ \ + G1_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ + G2_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ + \ + DIAGONALIZE_1(A0, B0, C0, D0, A1, B1, C1, D1) \ + \ + G1_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ + G2_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ + \ + UNDIAGONALIZE_1(A0, B0, C0, D0, A1, B1, C1, D1) \ + } while((void)0, 0); + +#define BLAKE2_ROUND_2(A0, A1, B0, B1, C0, C1, D0, D1) \ + do{ \ + G1_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ + G2_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ + \ + DIAGONALIZE_2(A0, A1, B0, B1, C0, C1, D0, D1) \ + \ + G1_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ + G2_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ + \ + UNDIAGONALIZE_2(A0, A1, B0, B1, C0, C1, D0, D1) \ + } while((void)0, 0); + +#endif /* __AVX2__ */ + +#else /* __AVX512F__ */ + +#include + +#define ror64(x, n) _mm512_ror_epi64((x), (n)) + +static __m512i muladd(__m512i x, __m512i y) +{ + __m512i z = _mm512_mul_epu32(x, y); + return _mm512_add_epi64(_mm512_add_epi64(x, y), _mm512_add_epi64(z, z)); +} + +#define G1(A0, B0, C0, D0, A1, B1, C1, D1) \ + do { \ + A0 = muladd(A0, B0); \ + A1 = muladd(A1, B1); \ +\ + D0 = _mm512_xor_si512(D0, A0); \ + D1 = _mm512_xor_si512(D1, A1); \ +\ + D0 = ror64(D0, 32); \ + D1 = ror64(D1, 32); \ +\ + C0 = muladd(C0, D0); \ + C1 = muladd(C1, D1); \ +\ + B0 = _mm512_xor_si512(B0, C0); \ + B1 = _mm512_xor_si512(B1, C1); \ +\ + B0 = ror64(B0, 24); \ + B1 = ror64(B1, 24); \ + } while ((void)0, 0) + +#define G2(A0, B0, C0, D0, A1, B1, C1, D1) \ + do { \ + A0 = muladd(A0, B0); \ + A1 = muladd(A1, B1); \ +\ + D0 = _mm512_xor_si512(D0, A0); \ + D1 = _mm512_xor_si512(D1, A1); \ +\ + D0 = ror64(D0, 16); \ + D1 = ror64(D1, 16); \ +\ + C0 = muladd(C0, D0); \ + C1 = muladd(C1, D1); \ +\ + B0 = _mm512_xor_si512(B0, C0); \ + B1 = _mm512_xor_si512(B1, C1); \ +\ + B0 = ror64(B0, 63); \ + B1 = ror64(B1, 63); \ + } while ((void)0, 0) + +#define DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \ + do { \ + B0 = _mm512_permutex_epi64(B0, _MM_SHUFFLE(0, 3, 2, 1)); \ + B1 = _mm512_permutex_epi64(B1, _MM_SHUFFLE(0, 3, 2, 1)); \ +\ + C0 = _mm512_permutex_epi64(C0, _MM_SHUFFLE(1, 0, 3, 2)); \ + C1 = _mm512_permutex_epi64(C1, _MM_SHUFFLE(1, 0, 3, 2)); \ +\ + D0 = _mm512_permutex_epi64(D0, _MM_SHUFFLE(2, 1, 0, 3)); \ + D1 = _mm512_permutex_epi64(D1, _MM_SHUFFLE(2, 1, 0, 3)); \ + } while ((void)0, 0) + +#define UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \ + do { \ + B0 = _mm512_permutex_epi64(B0, _MM_SHUFFLE(2, 1, 0, 3)); \ + B1 = _mm512_permutex_epi64(B1, _MM_SHUFFLE(2, 1, 0, 3)); \ +\ + C0 = _mm512_permutex_epi64(C0, _MM_SHUFFLE(1, 0, 3, 2)); \ + C1 = _mm512_permutex_epi64(C1, _MM_SHUFFLE(1, 0, 3, 2)); \ +\ + D0 = _mm512_permutex_epi64(D0, _MM_SHUFFLE(0, 3, 2, 1)); \ + D1 = _mm512_permutex_epi64(D1, _MM_SHUFFLE(0, 3, 2, 1)); \ + } while ((void)0, 0) + +#define BLAKE2_ROUND(A0, B0, C0, D0, A1, B1, C1, D1) \ + do { \ + G1(A0, B0, C0, D0, A1, B1, C1, D1); \ + G2(A0, B0, C0, D0, A1, B1, C1, D1); \ +\ + DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \ +\ + G1(A0, B0, C0, D0, A1, B1, C1, D1); \ + G2(A0, B0, C0, D0, A1, B1, C1, D1); \ +\ + UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \ + } while ((void)0, 0) + +#define SWAP_HALVES(A0, A1) \ + do { \ + __m512i t0, t1; \ + t0 = _mm512_shuffle_i64x2(A0, A1, _MM_SHUFFLE(1, 0, 1, 0)); \ + t1 = _mm512_shuffle_i64x2(A0, A1, _MM_SHUFFLE(3, 2, 3, 2)); \ + A0 = t0; \ + A1 = t1; \ + } while((void)0, 0) + +#define SWAP_QUARTERS(A0, A1) \ + do { \ + SWAP_HALVES(A0, A1); \ + A0 = _mm512_permutexvar_epi64(_mm512_setr_epi64(0, 1, 4, 5, 2, 3, 6, 7), A0); \ + A1 = _mm512_permutexvar_epi64(_mm512_setr_epi64(0, 1, 4, 5, 2, 3, 6, 7), A1); \ + } while((void)0, 0) + +#define UNSWAP_QUARTERS(A0, A1) \ + do { \ + A0 = _mm512_permutexvar_epi64(_mm512_setr_epi64(0, 1, 4, 5, 2, 3, 6, 7), A0); \ + A1 = _mm512_permutexvar_epi64(_mm512_setr_epi64(0, 1, 4, 5, 2, 3, 6, 7), A1); \ + SWAP_HALVES(A0, A1); \ + } while((void)0, 0) + +#define BLAKE2_ROUND_1(A0, C0, B0, D0, A1, C1, B1, D1) \ + do { \ + SWAP_HALVES(A0, B0); \ + SWAP_HALVES(C0, D0); \ + SWAP_HALVES(A1, B1); \ + SWAP_HALVES(C1, D1); \ + BLAKE2_ROUND(A0, B0, C0, D0, A1, B1, C1, D1); \ + SWAP_HALVES(A0, B0); \ + SWAP_HALVES(C0, D0); \ + SWAP_HALVES(A1, B1); \ + SWAP_HALVES(C1, D1); \ + } while ((void)0, 0) + +#define BLAKE2_ROUND_2(A0, A1, B0, B1, C0, C1, D0, D1) \ + do { \ + SWAP_QUARTERS(A0, A1); \ + SWAP_QUARTERS(B0, B1); \ + SWAP_QUARTERS(C0, C1); \ + SWAP_QUARTERS(D0, D1); \ + BLAKE2_ROUND(A0, B0, C0, D0, A1, B1, C1, D1); \ + UNSWAP_QUARTERS(A0, A1); \ + UNSWAP_QUARTERS(B0, B1); \ + UNSWAP_QUARTERS(C0, C1); \ + UNSWAP_QUARTERS(D0, D1); \ + } while ((void)0, 0) + +#endif /* __AVX512F__ */ +#endif /* BLAKE_ROUND_MKA_OPT_H */ diff --git a/deps/phc-winner-argon2-20190702/_hashcat/core.c b/deps/phc-winner-argon2-20190702/_hashcat/core.c new file mode 100644 index 000000000..456a78e6f --- /dev/null +++ b/deps/phc-winner-argon2-20190702/_hashcat/core.c @@ -0,0 +1,320 @@ +/* + * Argon2 reference source code package - reference C implementations + * + * Copyright 2015 + * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves + * + * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of + * these licenses can be found at: + * + * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + * + * You should have received a copy of both of these licenses along with this + * software. If not, they may be obtained at the above URLs. + */ + +/*For memory wiping*/ +#ifdef _MSC_VER +#include +#include /* For SecureZeroMemory */ +#endif +#if defined __STDC_LIB_EXT1__ +#define __STDC_WANT_LIB_EXT1__ 1 +#endif +#define VC_GE_2005(version) (version >= 1400) + +/* for explicit_bzero() on glibc */ +#define _DEFAULT_SOURCE + +#include +#include +#include + +#include "core.h" + +#include "blake2/blake2.h" +#include "blake2/blake2-impl.h" + + + +#if defined(__clang__) +#if __has_attribute(optnone) +#define NOT_OPTIMIZED __attribute__((optnone)) +#endif +#elif defined(__GNUC__) +#define GCC_VERSION \ + (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) +#if GCC_VERSION >= 40400 +#define NOT_OPTIMIZED __attribute__((optimize("O0"))) +#endif +#endif +#ifndef NOT_OPTIMIZED +#define NOT_OPTIMIZED +#endif + +/***************Instance and Position constructors**********/ +void init_block_value(block *b, uint8_t in) { memset(b->v, in, sizeof(b->v)); } + +void copy_block(block *dst, const block *src) { + memcpy(dst->v, src->v, sizeof(uint64_t) * ARGON2_QWORDS_IN_BLOCK); +} + +void xor_block(block *dst, const block *src) { + int i; + for (i = 0; i < ARGON2_QWORDS_IN_BLOCK; ++i) { + dst->v[i] ^= src->v[i]; + } +} + +static void load_block(block *dst, const void *input) { + unsigned i; + for (i = 0; i < ARGON2_QWORDS_IN_BLOCK; ++i) { + dst->v[i] = load64((const uint8_t *)input + i * sizeof(dst->v[i])); + } +} + +static void store_block(void *output, const block *src) { + unsigned i; + for (i = 0; i < ARGON2_QWORDS_IN_BLOCK; ++i) { + store64((uint8_t *)output + i * sizeof(src->v[i]), src->v[i]); + } +} + +/***************Memory functions*****************/ + + + +void finalize(const argon2_context *context, argon2_instance_t *instance) { + if (context != NULL && instance != NULL) { + block blockhash; + uint32_t l; + + copy_block(&blockhash, instance->memory + instance->lane_length - 1); + + /* XOR the last blocks */ + for (l = 1; l < instance->lanes; ++l) { + uint32_t last_block_in_lane = + l * instance->lane_length + (instance->lane_length - 1); + xor_block(&blockhash, instance->memory + last_block_in_lane); + } + + /* Hash the result */ + { + uint8_t blockhash_bytes[ARGON2_BLOCK_SIZE]; + store_block(blockhash_bytes, &blockhash); + blake2b_long(context->out, context->outlen, blockhash_bytes, + ARGON2_BLOCK_SIZE); + + } + + + } +} + +uint32_t index_alpha(const argon2_instance_t *instance, + const argon2_position_t *position, uint32_t pseudo_rand, + int same_lane) { + /* + * Pass 0: + * This lane : all already finished segments plus already constructed + * blocks in this segment + * Other lanes : all already finished segments + * Pass 1+: + * This lane : (SYNC_POINTS - 1) last segments plus already constructed + * blocks in this segment + * Other lanes : (SYNC_POINTS - 1) last segments + */ + uint32_t reference_area_size; + uint64_t relative_position; + uint32_t start_position, absolute_position; + + if (0 == position->pass) { + /* First pass */ + if (0 == position->slice) { + /* First slice */ + reference_area_size = + position->index - 1; /* all but the previous */ + } else { + if (same_lane) { + /* The same lane => add current segment */ + reference_area_size = + position->slice * instance->segment_length + + position->index - 1; + } else { + reference_area_size = + position->slice * instance->segment_length + + ((position->index == 0) ? (-1) : 0); + } + } + } else { + /* Second pass */ + if (same_lane) { + reference_area_size = instance->lane_length - + instance->segment_length + position->index - + 1; + } else { + reference_area_size = instance->lane_length - + instance->segment_length + + ((position->index == 0) ? (-1) : 0); + } + } + + /* 1.2.4. Mapping pseudo_rand to 0.. and produce + * relative position */ + relative_position = pseudo_rand; + relative_position = relative_position * relative_position >> 32; + relative_position = reference_area_size - 1 - + (reference_area_size * relative_position >> 32); + + /* 1.2.5 Computing starting position */ + start_position = 0; + + if (0 != position->pass) { + start_position = (position->slice == ARGON2_SYNC_POINTS - 1) + ? 0 + : (position->slice + 1) * instance->segment_length; + } + + /* 1.2.6. Computing absolute position */ + absolute_position = (start_position + relative_position) % + instance->lane_length; /* absolute position */ + return absolute_position; +} + +/* Single-threaded version for p=1 case */ +int fill_memory_blocks(argon2_instance_t *instance) { + uint32_t r, s, l; + + for (r = 0; r < instance->passes; ++r) { + for (s = 0; s < ARGON2_SYNC_POINTS; ++s) { + for (l = 0; l < instance->lanes; ++l) { + argon2_position_t position = {r, l, (uint8_t)s, 0}; + fill_segment(instance, position); + } + } + + } + return ARGON2_OK; +} + + + +void fill_first_blocks(uint8_t *blockhash, const argon2_instance_t *instance) { + uint32_t l; + /* Make the first and second block in each lane as G(H0||0||i) or + G(H0||1||i) */ + uint8_t blockhash_bytes[ARGON2_BLOCK_SIZE]; + for (l = 0; l < instance->lanes; ++l) { + + store32(blockhash + ARGON2_PREHASH_DIGEST_LENGTH, 0); + store32(blockhash + ARGON2_PREHASH_DIGEST_LENGTH + 4, l); + blake2b_long(blockhash_bytes, ARGON2_BLOCK_SIZE, blockhash, + ARGON2_PREHASH_SEED_LENGTH); + load_block(&instance->memory[l * instance->lane_length + 0], + blockhash_bytes); + + store32(blockhash + ARGON2_PREHASH_DIGEST_LENGTH, 1); + blake2b_long(blockhash_bytes, ARGON2_BLOCK_SIZE, blockhash, + ARGON2_PREHASH_SEED_LENGTH); + load_block(&instance->memory[l * instance->lane_length + 1], + blockhash_bytes); + } + +} + +void initial_hash(uint8_t *blockhash, argon2_context *context, + argon2_type type) { + blake2b_state BlakeHash; + uint8_t value[sizeof(uint32_t)]; + + if (NULL == context || NULL == blockhash) { + return; + } + + blake2b_init(&BlakeHash, ARGON2_PREHASH_DIGEST_LENGTH); + + store32(&value, context->lanes); + blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); + + store32(&value, context->outlen); + blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); + + store32(&value, context->m_cost); + blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); + + store32(&value, context->t_cost); + blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); + + store32(&value, context->version); + blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); + + store32(&value, (uint32_t)type); + blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); + + store32(&value, context->pwdlen); + blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); + + if (context->pwd != NULL) { + blake2b_update(&BlakeHash, (const uint8_t *)context->pwd, + context->pwdlen); + + + } + + store32(&value, context->saltlen); + blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); + + if (context->salt != NULL) { + blake2b_update(&BlakeHash, (const uint8_t *)context->salt, + context->saltlen); + } + + store32(&value, context->secretlen); + blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); + + if (context->secret != NULL) { + blake2b_update(&BlakeHash, (const uint8_t *)context->secret, + context->secretlen); + + + } + + store32(&value, context->adlen); + blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); + + if (context->ad != NULL) { + blake2b_update(&BlakeHash, (const uint8_t *)context->ad, + context->adlen); + } + + blake2b_final(&BlakeHash, blockhash, ARGON2_PREHASH_DIGEST_LENGTH); +} + +int initialize(argon2_instance_t *instance, argon2_context *context) { + uint8_t blockhash[ARGON2_PREHASH_SEED_LENGTH]; + + + + instance->context_ptr = context; + + /* 1. Memory allocation */ + + instance->memory = context->memory; + + + /* 2. Initial hashing */ + /* H_0 + 8 extra bytes to produce the first blocks */ + /* uint8_t blockhash[ARGON2_PREHASH_SEED_LENGTH]; */ + /* Hashing all inputs */ + initial_hash(blockhash, context, instance->type); + /* Zeroing 8 extra bytes */ + + + /* 3. Creating first blocks, we always have at least two blocks in a slice + */ + fill_first_blocks(blockhash, instance); + + return ARGON2_OK; +} diff --git a/deps/phc-winner-argon2-20190702/_hashcat/core.h b/deps/phc-winner-argon2-20190702/_hashcat/core.h new file mode 100644 index 000000000..78000ba9e --- /dev/null +++ b/deps/phc-winner-argon2-20190702/_hashcat/core.h @@ -0,0 +1,228 @@ +/* + * Argon2 reference source code package - reference C implementations + * + * Copyright 2015 + * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves + * + * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of + * these licenses can be found at: + * + * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + * + * You should have received a copy of both of these licenses along with this + * software. If not, they may be obtained at the above URLs. + */ + +#ifndef ARGON2_CORE_H +#define ARGON2_CORE_H + +#include "argon2.h" + +#define CONST_CAST(x) (x)(uintptr_t) + +/**********************Argon2 internal constants*******************************/ + +enum argon2_core_constants { + /* Memory block size in bytes */ + ARGON2_BLOCK_SIZE = 1024, + ARGON2_QWORDS_IN_BLOCK = ARGON2_BLOCK_SIZE / 8, + ARGON2_OWORDS_IN_BLOCK = ARGON2_BLOCK_SIZE / 16, + ARGON2_HWORDS_IN_BLOCK = ARGON2_BLOCK_SIZE / 32, + ARGON2_512BIT_WORDS_IN_BLOCK = ARGON2_BLOCK_SIZE / 64, + + /* Number of pseudo-random values generated by one call to Blake in Argon2i + to + generate reference block positions */ + ARGON2_ADDRESSES_IN_BLOCK = 128, + + /* Pre-hashing digest length and its extension*/ + ARGON2_PREHASH_DIGEST_LENGTH = 64, + ARGON2_PREHASH_SEED_LENGTH = 72 +}; + +/*************************Argon2 internal data types***********************/ + +/* + * Structure for the (1KB) memory block implemented as 128 64-bit words. + * Memory blocks can be copied, XORed. Internal words can be accessed by [] (no + * bounds checking). + */ +typedef struct block_ { uint64_t v[ARGON2_QWORDS_IN_BLOCK]; } block; + +/*****************Functions that work with the block******************/ + +/* Initialize each byte of the block with @in */ +void init_block_value(block *b, uint8_t in); + +/* Copy block @src to block @dst */ +void copy_block(block *dst, const block *src); + +/* XOR @src onto @dst bytewise */ +void xor_block(block *dst, const block *src); + +/* + * Argon2 instance: memory pointer, number of passes, amount of memory, type, + * and derived values. + * Used to evaluate the number and location of blocks to construct in each + * thread + */ +typedef struct Argon2_instance_t { + block *memory; /* Memory pointer */ + uint32_t version; + uint32_t passes; /* Number of passes */ + uint32_t memory_blocks; /* Number of blocks in memory */ + uint32_t segment_length; + uint32_t lane_length; + uint32_t lanes; + uint32_t threads; + argon2_type type; + int print_internals; /* whether to print the memory blocks */ + argon2_context *context_ptr; /* points back to original context */ +} argon2_instance_t; + +/* + * Argon2 position: where we construct the block right now. Used to distribute + * work between threads. + */ +typedef struct Argon2_position_t { + uint32_t pass; + uint32_t lane; + uint8_t slice; + uint32_t index; +} argon2_position_t; + +/*Struct that holds the inputs for thread handling FillSegment*/ +typedef struct Argon2_thread_data { + argon2_instance_t *instance_ptr; + argon2_position_t pos; +} argon2_thread_data; + +/*************************Argon2 core functions********************************/ + +/* Allocates memory to the given pointer, uses the appropriate allocator as + * specified in the context. Total allocated memory is num*size. + * @param context argon2_context which specifies the allocator + * @param memory pointer to the pointer to the memory + * @param size the size in bytes for each element to be allocated + * @param num the number of elements to be allocated + * @return ARGON2_OK if @memory is a valid pointer and memory is allocated + */ +int allocate_memory(const argon2_context *context, uint8_t **memory, + size_t num, size_t size); + +/* + * Frees memory at the given pointer, uses the appropriate deallocator as + * specified in the context. Also cleans the memory using clear_internal_memory. + * @param context argon2_context which specifies the deallocator + * @param memory pointer to buffer to be freed + * @param size the size in bytes for each element to be deallocated + * @param num the number of elements to be deallocated + */ +void free_memory(const argon2_context *context, uint8_t *memory, + size_t num, size_t size); + +/* Function that securely cleans the memory. This ignores any flags set + * regarding clearing memory. Usually one just calls clear_internal_memory. + * @param mem Pointer to the memory + * @param s Memory size in bytes + */ +void secure_wipe_memory(void *v, size_t n); + +/* Function that securely clears the memory if FLAG_clear_internal_memory is + * set. If the flag isn't set, this function does nothing. + * @param mem Pointer to the memory + * @param s Memory size in bytes + */ +void clear_internal_memory(void *v, size_t n); + +/* + * Computes absolute position of reference block in the lane following a skewed + * distribution and using a pseudo-random value as input + * @param instance Pointer to the current instance + * @param position Pointer to the current position + * @param pseudo_rand 32-bit pseudo-random value used to determine the position + * @param same_lane Indicates if the block will be taken from the current lane. + * If so we can reference the current segment + * @pre All pointers must be valid + */ +uint32_t index_alpha(const argon2_instance_t *instance, + const argon2_position_t *position, uint32_t pseudo_rand, + int same_lane); + +/* + * Function that validates all inputs against predefined restrictions and return + * an error code + * @param context Pointer to current Argon2 context + * @return ARGON2_OK if everything is all right, otherwise one of error codes + * (all defined in + */ +int validate_inputs(const argon2_context *context); + +/* + * Hashes all the inputs into @a blockhash[PREHASH_DIGEST_LENGTH], clears + * password and secret if needed + * @param context Pointer to the Argon2 internal structure containing memory + * pointer, and parameters for time and space requirements. + * @param blockhash Buffer for pre-hashing digest + * @param type Argon2 type + * @pre @a blockhash must have at least @a PREHASH_DIGEST_LENGTH bytes + * allocated + */ +void initial_hash(uint8_t *blockhash, argon2_context *context, + argon2_type type); + +/* + * Function creates first 2 blocks per lane + * @param instance Pointer to the current instance + * @param blockhash Pointer to the pre-hashing digest + * @pre blockhash must point to @a PREHASH_SEED_LENGTH allocated values + */ +void fill_first_blocks(uint8_t *blockhash, const argon2_instance_t *instance); + +/* + * Function allocates memory, hashes the inputs with Blake, and creates first + * two blocks. Returns the pointer to the main memory with 2 blocks per lane + * initialized + * @param context Pointer to the Argon2 internal structure containing memory + * pointer, and parameters for time and space requirements. + * @param instance Current Argon2 instance + * @return Zero if successful, -1 if memory failed to allocate. @context->state + * will be modified if successful. + */ +int initialize(argon2_instance_t *instance, argon2_context *context); + +/* + * XORing the last block of each lane, hashing it, making the tag. Deallocates + * the memory. + * @param context Pointer to current Argon2 context (use only the out parameters + * from it) + * @param instance Pointer to current instance of Argon2 + * @pre instance->state must point to necessary amount of memory + * @pre context->out must point to outlen bytes of memory + * @pre if context->free_cbk is not NULL, it should point to a function that + * deallocates memory + */ +void finalize(const argon2_context *context, argon2_instance_t *instance); + +/* + * Function that fills the segment using previous segments also from other + * threads + * @param context current context + * @param instance Pointer to the current instance + * @param position Current position + * @pre all block pointers must be valid + */ +void fill_segment(const argon2_instance_t *instance, + argon2_position_t position); + +/* + * Function that fills the entire memory t_cost times based on the first two + * blocks in each lane + * @param instance Pointer to the current instance + * @return ARGON2_OK if successful, @context->state + */ +int fill_memory_blocks(argon2_instance_t *instance); + +#endif diff --git a/deps/phc-winner-argon2-20190702/_hashcat/opt.c b/deps/phc-winner-argon2-20190702/_hashcat/opt.c new file mode 100644 index 000000000..f6c20528e --- /dev/null +++ b/deps/phc-winner-argon2-20190702/_hashcat/opt.c @@ -0,0 +1,283 @@ +/* + * Argon2 reference source code package - reference C implementations + * + * Copyright 2015 + * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves + * + * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of + * these licenses can be found at: + * + * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + * + * You should have received a copy of both of these licenses along with this + * software. If not, they may be obtained at the above URLs. + */ + +#include +#include +#include + +#include "argon2.h" +#include "core.h" + +#include "blake2/blake2.h" +#include "blake2/blamka-round-opt.h" + +/* + * Function fills a new memory block and optionally XORs the old block over the new one. + * Memory must be initialized. + * @param state Pointer to the just produced block. Content will be updated(!) + * @param ref_block Pointer to the reference block + * @param next_block Pointer to the block to be XORed over. May coincide with @ref_block + * @param with_xor Whether to XOR into the new block (1) or just overwrite (0) + * @pre all block pointers must be valid + */ +#if defined(__AVX512F__) +static void fill_block(__m512i *state, const block *ref_block, + block *next_block, int with_xor) { + __m512i block_XY[ARGON2_512BIT_WORDS_IN_BLOCK]; + unsigned int i; + + if (with_xor) { + for (i = 0; i < ARGON2_512BIT_WORDS_IN_BLOCK; i++) { + state[i] = _mm512_xor_si512( + state[i], _mm512_loadu_si512((const __m512i *)ref_block->v + i)); + block_XY[i] = _mm512_xor_si512( + state[i], _mm512_loadu_si512((const __m512i *)next_block->v + i)); + } + } else { + for (i = 0; i < ARGON2_512BIT_WORDS_IN_BLOCK; i++) { + block_XY[i] = state[i] = _mm512_xor_si512( + state[i], _mm512_loadu_si512((const __m512i *)ref_block->v + i)); + } + } + + for (i = 0; i < 2; ++i) { + BLAKE2_ROUND_1( + state[8 * i + 0], state[8 * i + 1], state[8 * i + 2], state[8 * i + 3], + state[8 * i + 4], state[8 * i + 5], state[8 * i + 6], state[8 * i + 7]); + } + + for (i = 0; i < 2; ++i) { + BLAKE2_ROUND_2( + state[2 * 0 + i], state[2 * 1 + i], state[2 * 2 + i], state[2 * 3 + i], + state[2 * 4 + i], state[2 * 5 + i], state[2 * 6 + i], state[2 * 7 + i]); + } + + for (i = 0; i < ARGON2_512BIT_WORDS_IN_BLOCK; i++) { + state[i] = _mm512_xor_si512(state[i], block_XY[i]); + _mm512_storeu_si512((__m512i *)next_block->v + i, state[i]); + } +} +#elif defined(__AVX2__) +static void fill_block(__m256i *state, const block *ref_block, + block *next_block, int with_xor) { + __m256i block_XY[ARGON2_HWORDS_IN_BLOCK]; + unsigned int i; + + if (with_xor) { + for (i = 0; i < ARGON2_HWORDS_IN_BLOCK; i++) { + state[i] = _mm256_xor_si256( + state[i], _mm256_loadu_si256((const __m256i *)ref_block->v + i)); + block_XY[i] = _mm256_xor_si256( + state[i], _mm256_loadu_si256((const __m256i *)next_block->v + i)); + } + } else { + for (i = 0; i < ARGON2_HWORDS_IN_BLOCK; i++) { + block_XY[i] = state[i] = _mm256_xor_si256( + state[i], _mm256_loadu_si256((const __m256i *)ref_block->v + i)); + } + } + + for (i = 0; i < 4; ++i) { + BLAKE2_ROUND_1(state[8 * i + 0], state[8 * i + 4], state[8 * i + 1], state[8 * i + 5], + state[8 * i + 2], state[8 * i + 6], state[8 * i + 3], state[8 * i + 7]); + } + + for (i = 0; i < 4; ++i) { + BLAKE2_ROUND_2(state[ 0 + i], state[ 4 + i], state[ 8 + i], state[12 + i], + state[16 + i], state[20 + i], state[24 + i], state[28 + i]); + } + + for (i = 0; i < ARGON2_HWORDS_IN_BLOCK; i++) { + state[i] = _mm256_xor_si256(state[i], block_XY[i]); + _mm256_storeu_si256((__m256i *)next_block->v + i, state[i]); + } +} +#else +static void fill_block(__m128i *state, const block *ref_block, + block *next_block, int with_xor) { + __m128i block_XY[ARGON2_OWORDS_IN_BLOCK]; + unsigned int i; + + if (with_xor) { + for (i = 0; i < ARGON2_OWORDS_IN_BLOCK; i++) { + state[i] = _mm_xor_si128( + state[i], _mm_loadu_si128((const __m128i *)ref_block->v + i)); + block_XY[i] = _mm_xor_si128( + state[i], _mm_loadu_si128((const __m128i *)next_block->v + i)); + } + } else { + for (i = 0; i < ARGON2_OWORDS_IN_BLOCK; i++) { + block_XY[i] = state[i] = _mm_xor_si128( + state[i], _mm_loadu_si128((const __m128i *)ref_block->v + i)); + } + } + + for (i = 0; i < 8; ++i) { + BLAKE2_ROUND(state[8 * i + 0], state[8 * i + 1], state[8 * i + 2], + state[8 * i + 3], state[8 * i + 4], state[8 * i + 5], + state[8 * i + 6], state[8 * i + 7]); + } + + for (i = 0; i < 8; ++i) { + BLAKE2_ROUND(state[8 * 0 + i], state[8 * 1 + i], state[8 * 2 + i], + state[8 * 3 + i], state[8 * 4 + i], state[8 * 5 + i], + state[8 * 6 + i], state[8 * 7 + i]); + } + + for (i = 0; i < ARGON2_OWORDS_IN_BLOCK; i++) { + state[i] = _mm_xor_si128(state[i], block_XY[i]); + _mm_storeu_si128((__m128i *)next_block->v + i, state[i]); + } +} +#endif + +static void next_addresses(block *address_block, block *input_block) { + /*Temporary zero-initialized blocks*/ +#if defined(__AVX512F__) + __m512i zero_block[ARGON2_512BIT_WORDS_IN_BLOCK]; + __m512i zero2_block[ARGON2_512BIT_WORDS_IN_BLOCK]; +#elif defined(__AVX2__) + __m256i zero_block[ARGON2_HWORDS_IN_BLOCK]; + __m256i zero2_block[ARGON2_HWORDS_IN_BLOCK]; +#else + __m128i zero_block[ARGON2_OWORDS_IN_BLOCK]; + __m128i zero2_block[ARGON2_OWORDS_IN_BLOCK]; +#endif + + memset(zero_block, 0, sizeof(zero_block)); + memset(zero2_block, 0, sizeof(zero2_block)); + + /*Increasing index counter*/ + input_block->v[6]++; + + /*First iteration of G*/ + fill_block(zero_block, input_block, address_block, 0); + + /*Second iteration of G*/ + fill_block(zero2_block, address_block, address_block, 0); +} + +void fill_segment(const argon2_instance_t *instance, + argon2_position_t position) { + block *ref_block = NULL, *curr_block = NULL; + block address_block, input_block; + uint64_t pseudo_rand, ref_index, ref_lane; + uint32_t prev_offset, curr_offset; + uint32_t starting_index, i; +#if defined(__AVX512F__) + __m512i state[ARGON2_512BIT_WORDS_IN_BLOCK]; +#elif defined(__AVX2__) + __m256i state[ARGON2_HWORDS_IN_BLOCK]; +#else + __m128i state[ARGON2_OWORDS_IN_BLOCK]; +#endif + int data_independent_addressing; + + if (instance == NULL) { + return; + } + + data_independent_addressing = + (instance->type == Argon2_i) || + (instance->type == Argon2_id && (position.pass == 0) && + (position.slice < ARGON2_SYNC_POINTS / 2)); + + if (data_independent_addressing) { + init_block_value(&input_block, 0); + + input_block.v[0] = position.pass; + input_block.v[1] = position.lane; + input_block.v[2] = position.slice; + input_block.v[3] = instance->memory_blocks; + input_block.v[4] = instance->passes; + input_block.v[5] = instance->type; + } + + starting_index = 0; + + if ((0 == position.pass) && (0 == position.slice)) { + starting_index = 2; /* we have already generated the first two blocks */ + + /* Don't forget to generate the first block of addresses: */ + if (data_independent_addressing) { + next_addresses(&address_block, &input_block); + } + } + + /* Offset of the current block */ + curr_offset = position.lane * instance->lane_length + + position.slice * instance->segment_length + starting_index; + + if (0 == curr_offset % instance->lane_length) { + /* Last block in this lane */ + prev_offset = curr_offset + instance->lane_length - 1; + } else { + /* Previous block */ + prev_offset = curr_offset - 1; + } + + memcpy(state, ((instance->memory + prev_offset)->v), ARGON2_BLOCK_SIZE); + + for (i = starting_index; i < instance->segment_length; + ++i, ++curr_offset, ++prev_offset) { + /*1.1 Rotating prev_offset if needed */ + if (curr_offset % instance->lane_length == 1) { + prev_offset = curr_offset - 1; + } + + /* 1.2 Computing the index of the reference block */ + /* 1.2.1 Taking pseudo-random value from the previous block */ + if (data_independent_addressing) { + if (i % ARGON2_ADDRESSES_IN_BLOCK == 0) { + next_addresses(&address_block, &input_block); + } + pseudo_rand = address_block.v[i % ARGON2_ADDRESSES_IN_BLOCK]; + } else { + pseudo_rand = instance->memory[prev_offset].v[0]; + } + + /* 1.2.2 Computing the lane of the reference block */ + ref_lane = ((pseudo_rand >> 32)) % instance->lanes; + + if ((position.pass == 0) && (position.slice == 0)) { + /* Can not reference other lanes yet */ + ref_lane = position.lane; + } + + /* 1.2.3 Computing the number of possible reference block within the + * lane. + */ + position.index = i; + ref_index = index_alpha(instance, &position, pseudo_rand & 0xFFFFFFFF, + ref_lane == position.lane); + + /* 2 Creating a new block */ + ref_block = + instance->memory + instance->lane_length * ref_lane + ref_index; + curr_block = instance->memory + curr_offset; + if (ARGON2_VERSION_10 == instance->version) { + /* version 1.2.1 and earlier: overwrite, not XOR */ + fill_block(state, ref_block, curr_block, 0); + } else { + if(0 == position.pass) { + fill_block(state, ref_block, curr_block, 0); + } else { + fill_block(state, ref_block, curr_block, 1); + } + } + } +} diff --git a/deps/phc-winner-argon2-20190702/argon2-specs.pdf b/deps/phc-winner-argon2-20190702/argon2-specs.pdf new file mode 100644 index 000000000..220b3f8df --- /dev/null +++ b/deps/phc-winner-argon2-20190702/argon2-specs.pdf @@ -0,0 +1,1366 @@ +Argon2: the memory-hard function for password hashing and other + applications + + Designers: Alex Biryukov, Daniel Dinu, and Dmitry Khovratovich + University of Luxembourg, Luxembourg + + alex.biryukov@uni.lu, dumitru-daniel.dinu@uni.lu, khovratovich@gmail.com + + https://www.cryptolux.org/index.php/Argon2 + https://github.com/P-H-C/phc-winner-argon2 + + https://github.com/khovratovich/Argon2 + + Version 1.3 of Argon2: PHC release + March 24, 2017 + +Contents + +1 Introduction 2 + +2 Definitions 3 + +2.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 + +2.2 Model for memory-hard functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 + +3 Specification of Argon2 4 + +3.1 Inputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 + +3.2 Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 + +3.3 Indexing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 + +3.4 Compression function G . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 + +4 Features 8 + +4.1 Available features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 + +4.2 Possible future extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 + +5 Security analysis 9 + +5.1 Ranking tradeoff attack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 + +5.2 Memory optimization attack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 + +5.3 Attack on iterative compression function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 + +5.4 Security of Argon2 to generic attacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 + +5.5 Security of Argon2 to ranking tradeoff attacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 + +5.6 Security of Argon2i to generic tradeoff attacks on random graphs . . . . . . . . . . . . . . . . . . 12 + +5.7 Summary of tradeoff attacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 + +6 Design rationale 12 + +6.1 Indexing function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 + +6.2 Implementing parallelism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 + +6.3 Compression function design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 + +6.3.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 + +6.3.2 Design criteria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 + +6.4 User-controlled parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 + +7 Performance 16 + +7.1 x86 architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 + +8 Applications 16 + + 1 + 9 Recommended parameters 17 + +10 Conclusion 17 + +A Permutation P 18 + +B Additional functionality 19 + +C Change log 20 + +C.1 v.1.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 + +C.2 v1.2.1 – February 1st, 2016 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 + +C.3 v1.2 – 21th June, 2015 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 + +C.4 v1.1 – 6th February, 2015 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 + +1 Introduction + +Passwords, despite all their drawbacks, remain the primary form of authentication on various web-services. +Passwords are usually stored in a hashed form in a server’s database. These databases are quite often captured +by the adversaries, who then apply dictionary attacks since passwords tend to have low entropy. Protocol +designers use a number of tricks to mitigate these issues. Starting from the late 70’s, a password is hashed +together with a random salt value to prevent detection of identical passwords across different users and services. +The hash function computations, which became faster and faster due to Moore’s law have been called multiple +times to increase the cost of password trial for the attacker. + + In the meanwhile, the password crackers migrated to new architectures, such as FPGAs, multiple-core GPUs +and dedicated ASIC modules, where the amortized cost of a multiple-iterated hash function is much lower. It +was quickly noted that these new environments are great when the computation is almost memoryless, but they +experience difficulties when operating on a large amount of memory. The defenders responded by designing +memory-hard functions, which require a large amount of memory to be computed, and impose computational +penalties if less memory is used. The password hashing scheme scrypt [15] is an instance of such function. + + Memory-hard schemes also have other applications. They can be used for key derivation from low-entropy +sources. Memory-hard schemes are also welcome in cryptocurrency designs [13] if a creator wants to demotivate +the use of GPUs and ASICs for mining and promote the use of standard desktops. + +Problems of existing schemes A trivial solution for password hashing is a keyed hash function such as +HMAC. If the protocol designer prefers hashing without secret keys to avoid all the problems with key generation, +storage, and update, then he has few alternatives: the generic mode PBKDF2, the Blowfish-based bcrypt, and +scrypt. Among those, only scrypt aims for high memory, but the existence of a trivial time-memory tradeoff [8] +allows compact implementations with the same energy cost. + + Design of a memory-hard function proved to be a tough problem. Since early 80’s it has been known +that many cryptographic problems that seemingly require large memory actually allow for a time-memory +tradeoff [11], where the adversary can trade memory for time and do his job on fast hardware with low memory. +In application to password-hashing schemes, this means that the password crackers can still be implemented on +a dedicated hardware even though at some additional cost. + + Another problem with the existing schemes is their complexity. The same scrypt calls a stack of subproce- +dures, whose design rationale has not been fully motivated (e.g, scrypt calls SMix, which calls ROMix, which +calls BlockMix, which calls Salsa20/8 etc.). It is hard to analyze and, moreover, hard to achieve confidence. +Finally, it is not flexible in separating time and memory costs. At the same time, the story of cryptographic +competitions [14, 17] has demonstrated that the most secure designs come with simplicity, where every element +is well motivated and a cryptanalyst has as few entry points as possible. + + The Password Hashing Competition, which started in 2014, highlighted the following problems: + + • Should the memory addressing (indexing functions) be input-independent or input-dependent, or hybrid? + The first type of schemes, where the memory read location are known in advance, is immediately vulnerable + to time-space tradeoff attacks, since an adversary can precompute the missing block by the time it is + needed [4]. In turn, the input-dependent schemes are vulnerable to side-channel attacks [16], as the + timing information allows for much faster password search. + + • Is it better to fill more memory but suffer from time-space tradeoffs, or make more passes over the memory + to be more robust? This question was quite difficult to answer due to absence of generic tradeoff tools, + which would analyze the security against tradeoff attacks, and the absence of unified metric to measure + adversary’s costs. + + 2 + • How should the input-independent addresses be computed? Several seemingly secure options have been + attacked [4]. + + • How large a single memory block should be? Reading smaller random-placed blocks is slower (in cycles + per byte) due to the spacial locality principle of the CPU cache. In turn, larger blocks are difficult to + process due to the limited number of long registers. + + • If the block is large, how to choose the internal compression function? Should it be cryptographically + secure or more lightweight, providing only basic mixing of the inputs? Many candidates simply proposed + an iterative construction and argued against cryptographically strong transformations. + + • How to exploit multiple cores of modern CPUs, when they are available? Parallelizing calls to the hashing + function without any interaction is subject to simple tradeoff attacks. + +Our solution We offer a hashing scheme called Argon2. Argon2 summarizes the state of the art in the design +of memory-hard functions. It is a streamlined and simple design. It aims at the highest memory filling rate +and effective use of multiple computing units, while still providing defense against tradeoff attacks. Argon2 +is optimized for the x86 architecture and exploits the cache and memory organization of the recent Intel and +AMD processors. Argon2 has two variants: Argon2d and Argon2i. Argon2d is faster and uses data-depending +memory access, which makes it suitable for cryptocurrencies and applications with no threats from side-channel +timing attacks. Argon2i uses data-independent memory access, which is preferred for password hashing and +password-based key derivation. Argon2i is slower as it makes more passes over the memory to protect from +tradeoff attacks. + + We recommend Argon2 for the applications that aim for high performance. Both versions of Argon2 allow +to fill 1 GB of RAM in a fraction of second, and smaller amounts even faster. It scales easily to the arbitrary +number of parallel computing units. Its design is also optimized for clarity to ease analysis and implementation. + + Our scheme provides more features and better tradeoff resilience than pre-PHC designs and equals in per- +formance with the PHC finalists [5]. + +2 Definitions + +2.1 Motivation + +We aim to maximize the cost of password cracking on ASICs. There can be different approaches to measure +this cost, but we turn to one of the most popular – the time-area product [3, 18]. We assume that the password +P is hashed with salt S but without secret keys, and the hashes may leak to the adversaries together with salts: + + Tag ← H(P, S); + Cracker ← {(Tagi, Si)}. + +In the case of the password hashing, we suppose that the defender allocates certain amount of time (e.g., 1 + +second) per password and a certain number of CPU cores (e.g., 4 cores). Then he hashes the password using the + +maximum amount M of memory. This memory size translates to certain ASIC area A. The running ASIC time + +T is determined by the length of the longest computational chain and by the ASIC memory latency. Therefore, + +we maximize the value AT . The other usecases follow a similar procedure. + +Suppose that an ASIC designer that wants to reduce the memory and thus the area wants to compute H + +using αM memory only for some α < 1. Using some tradeoff specific to H, he has to spend C(α) times as much + +computation and his running time increases by at least the factor D(α). Therefore, the maximum possible gain + +E in the time-area product is + + Emax = max 1 . + αD(α) + α + +The hash function is called memory-hard if D(α) > 1/α as α → 0. Clearly, in this case the time-area product +does not decrease. Moreover, the following aspects may further increase it: + +• Computing cores needed to implement the C(α) penalty may occupy significant area. + +• If the tradeoff requires significant communication between the computing cores, the memory bandwidth + limits may impose additional restrictions on the running time. + + In the following text, we will not attempt to estimate time and area with large precision. However, an +interested reader may use the following implementations as reference: + + • The 50-nm DRAM implementation [9] takes 550 mm2 per GByte; + + 3 + • The Blake2b implementation in the 65-nm process should take about 0.1 mm2 (using Blake-512 imple- + mentation in [10]); + +• The maximum memory bandwidth achieved by modern GPUs is around 400 GB/sec. + +2.2 Model for memory-hard functions + +The memory-hard functions that we explore use the following mode of operation. The memory array B[] is +filled with the compression function G: + +B[0] = H(P, S); + +for j from 1 to t (1) + +B[j] = G B[φ1(j)], B[φ2(j)], · · · , B[φk(j)] , + +where φi() are some indexing functions. + We distinguish two types of indexing functions: + +• Independent of the password and salt, but possibly dependent on other public parameters (thus called + data-independent). The addresses can be calculated by the memory-saving adversaries. We suppose that + the dedicated hardware can handle parallel memory access, so that the cracker can prefetch the data + from the memory. Moreover, if she implements a time-space tradeoff, then the missing blocks can be also + precomputed without losing time. Let the single G core occupy the area equivalent to the β of the entire + memory. Then if we use αM memory, then the gain in the time-area product is + + E (α) = α + 1 . + C (α)β + +• Dependent on the password (data-dependent), in our case: φ(j) = g(B[j − 1]). This choice prevents the + adversary from prefetching and precomputing missing data. The adversary figures out what he has to + recompute only at the time the element is needed. If an element is recomputed as a tree of F calls of + average depth D, then the total processing time is multiplied by D. The gain in the time-area product is + +E (α) = (α + 1 . + C (α)β )D(α) + + The maximum bandwidth Bwmax is a hypothetical upper bound on the memory bandwidth on the adver- +sary’s architecture. Suppose that for each call to G an adversary has to load R(α) blocks from the memory on +average. Therefore, the adversary can keep the execution time the same as long as + + R(α)Bw ≤ Bwmax, + +where Bw is the bandwidth achieved by a full-space implementation. In the tradeoff attacks that we apply the +following holds: + + R(α) = C(α). + +3 Specification of Argon2 + +There are two flavors of Argon2 – Argon2d and Argon2i. The former one uses data-dependent memory access to +thwart tradeoff attacks. However, this makes it vulnerable for side-channel attacks, so Argon2d is recommended +primarily for cryptocurrencies and backend servers. Argon2i uses data-independent memory access, which is +recommended for password hashing and password-based key derivation. + +3.1 Inputs + +Argon2 has two types of inputs: primary inputs and secondary inputs, or parameters. Primary inputs are +message P and nonce S, which are password and salt, respectively, for the password hashing. Primary inputs +must always be given by the user such that + + • Message P may have any length from 0 to 232 − 1 bytes; + • Nonce S may have any length from 8 to 232 − 1 bytes (16 bytes is recommended for password hashing). + +Secondary inputs have the following restrictions: + + 4 + • Degree of parallelism p determines how many independent (but synchronizing) computational chains can + be run. It may take any integer value from 1 to 224 − 1. + + • Tag length τ may be any integer number of bytes from 4 to 232 − 1. + + • Memory size m can be any integer number of kilobytes from 8p to 232 − 1. The actual number of blocks + is m , which is m rounded down to the nearest multiple of 4p. + + • Number of iterations t (used to tune the running time independently of the memory size) can be any + integer number from 1 to 232 − 1; + + • Version number v is one byte 0x13; + + • Secret value K (serves as key if necessary, but we do not assume any key use by default) may have any + length from 0 to 232 − 1 bytes. + + • Associated data X may have any length from 0 to 232 − 1 bytes. + + • Type y of Argon2: 0 for Argon2d, 1 for Argon2i, 2 for Argon2id. + + Argon2 uses internal compression function G with two 1024-byte inputs and a 1024-byte output, and internal +hash function H. Here H is the Blake2b hash function, and G is based on its internal permutation. The mode +of operation of Argon2 is quite simple when no parallelism is used: function G is iterated m times. At step i a +block with index φ(i) < i is taken from the memory (Figure 1), where φ(i) is either determined by the previous +block in Argon2d, or is a fixed value in Argon2i. + + G G G + + φ(i) φ(i + 1) i−1 i i+1 + + Figure 1: Argon2 mode of operation with no parallelism. + +3.2 Operation + +Argon2 follows the extract-then-expand concept. First, it extracts entropy from message and nonce by hashing +it. All the other parameters are also added to the input. The variable length inputs P, S, K, X are prepended +with their lengths: + + H0 = H(p, τ, m, t, v, y, P , P, S , S, K , K, X , X). + +Here H0 is 64-byte value, and the parameters p, τ, m, t, v, y, P , S , K , X are treated as little-endian 32-bit + +integers. + +Argon2 then fills the memory with m = m · 4p 1024-byte blocks. For tunable parallelism with p threads, + 4p + +the memory is organized in a matrix B[i][j] of blocks with p rows (lanes) and q = m /p columns. We denote + +the block produced in pass t by Bt[i][j], t > 0. Blocks are computed as follows: + + B1[i][0] = H (H0|| 0 || i ), 0 ≤ i < p; + + 4 bytes 4 bytes + + B1[i][1] = H (H0|| 1 || i ), 0 ≤ i < p; + + 4 bytes 4 bytes + + B1[i][j] = G(B1[i][j − 1], B1[i ][j ]), 0 ≤ i < p, 2 ≤ j < q. + +where block index [i ][j ] is determined differently for Argon2d/2ds and Argon2i, G is the compression function, +and H is a variable-length hash function built upon H. Both G and H will be fully defined in the further text. + + 5 + If t > 1, we repeat the procedure, but we XOR the new blocks to the old ones instead of overwriting them. + + Bt[i][0] = G(Bt−1[i][q − 1], B[i ][j ]) ⊕ Bt−1[i][0]; + Bt[i][j] = G(Bt[i][j − 1], B[i ][j ]) ⊕ Bt−1[i][j]. + +Here the block B[i ][j ] may be either Bt[i ][j ] for j < j or Bt−1[i ][j ] for j > j . + After we have done T iterations over the memory, we compute the final block Bfinal as the XOR of the last + +column: + Bfinal = BT [0][q − 1] ⊕ BT [1][q − 1] ⊕ · · · ⊕ BT [p − 1][q − 1]. + +Then we apply H to Bfinal to get the output tag. + + Tag ← H (Bfinal). + +Variable-length hash function. Let Hx be a hash function with x-byte output (in our case Hx is Blake2b, + +which supports 1 ≤ x ≤ 64). We define H as follows. Let Vi be a 64-byte block, and Ai be its first 32 bytes, +and τ < 232 be the 32-bit tag length (viewed little-endian) in bytes. Then we define + + if τ ≤ 64 H (X) d=ef Hτ (τ ||X). + else + r = τ /32 − 2; + V1 ← H64(τ ||X); + V2 ← H64(V1); + ··· + Vr ← H64(Vr−1), + Vr+1 ← Hτ−32r(Vr). + H (X) d=ef A1||A2|| . . . Ar||Vr+1. + + 4 slices + + B[0][0] p lanes + H + message + nonce + +parameters + + B[p − 1][0] + + H H H + + Tag + + Figure 2: Single-pass Argon2 with p lanes and 4 slices. + +3.3 Indexing + +To enable parallel block computation, we further partition the memory matrix into S = 4 vertical slices. The +intersection of a slice and a lane is a segment of length q/S. Segments of the same slice are computed in +parallel, and may not reference blocks from each other. All other blocks can be referenced, and now we explain +the procedure in detail. + +Getting two 32-bit values. In Argon2d we select the first 32 bits of block B[i][j − 1] and denote this value +by J1. Then we take the next 32 bits of B[i][j − 1] and denote this value by J2. In Argon2i we run G2 — the +2-round compression function G — in the counter mode, where the first input is all-zero block, and the second +input is constructed as + + ( r || l || s || m || t || x || i || 0 ), + + 8 bytes 8 bytes 8 bytes 8 bytes 8 bytes 8 bytes 8 bytes 968 bytes + +where + + 6 + • r is the pass number; + • l is the lane number; + • s is the slice number; + • m is the total number of memory blocks; + • t is the total number of passes; + • x is the type of the Argon function (equals 1 for Argon2i); + • i is the counter starting in each segment from 1. +All the numbers are put as little-endian. We increase the counter so that each application of G2 gives 128 64-bit +values J1||J2. + +Mapping J1, J2 to the reference block index The value l = J2 mod p determines the index of the lane +from which the block will be taken. If we work with the first slice and the first pass (r = s = 0), then l is set +to the current lane index. + + Then we determine the set of indices R that can be referenced for given [i][j] according to the following +rules: + +1. If l is the current lane, then R includes all blocks computed in this lane, that are not overwritten yet, + excluding B[i][j − 1]. + +2. If l is not the current lane, then R includes all blocks in the last S − 1 = 3 segments computed and finished + in lane l. If B[i][j] is the first block of a segment, then the very last block from R is excluded. + +We are going to take a block from R with a non-uniform distribution over [0..|R|): + +J1 ∈ [0..232) → |R| 1 − (J1)2 . + 264 + +To avoid floating-point computation, we use the following integer approximation: + +x = (J1)2/232; +y = (|R| ∗ x)/232; +z = |R| − 1 − y. + +Then we enumerate the blocks in R in the order of construction and select z-th block from it as the reference +block. + +3.4 Compression function G + +Compression function G is built upon the Blake2b round function P (fully defined in Section A). P operates +on the 128-byte input, which can be viewed as 8 16-byte registers (see details below): + + P(A0, A1, . . . , A7) = (B0, B1, . . . , B7). + + Compression function G(X, Y ) operates on two 1024-byte blocks X and Y . It first computes R = X ⊕ Y . +Then R is viewed as a 8 × 8-matrix of 16-byte registers R0, R1, . . . , R63. Then P is first applied rowwise, and +then columnwise to get Z: + + (Q0, Q1, . . . , Q7) ← P(R0, R1, . . . , R7); + (Q8, Q9, . . . , Q15) ← P(R8, R9, . . . , R15); + + ... + (Q56, Q57, . . . , Q63) ← P(R56, R57, . . . , R63); + + (Z0, Z8, Z16, . . . , Z56) ← P(Q0, Q8, Q16, . . . , Q56); + (Z1, Z9, Z17, . . . , Z57) ← P(Q1, Q9, Q17, . . . , Q57); + + ... + (Z7, Z15, Z23, . . . , Z63) ← P(Q7, Q15, Q23, . . . , Q63). + +Finally, G outputs Z ⊕ R: + + G : (X, Y ) → R = X ⊕ Y −P→ Q −P→ Z → Z ⊕ R. + +7 + X Y + + R + + P Blake2b + round + + P + + P + + Q + + PP P + + Z + + Figure 3: Argon2 compression function G. + +4 Features + +Argon2 is a multi-purpose family of hashing schemes, which is suitable for password hashing, key derivation, +cryptocurrencies and other applications that require provably high memory use. Argon2 is optimized for the x86 +architecture, but it does not slow much on older processors. The key feature of Argon2 is its performance and +the ability to use multiple computational cores in a way that prohibits time-memory tradeoffs. Several features +are not included into this version, but can be easily added later. + +4.1 Available features + +Now we provide an extensive list of features of Argon2. + Performance. Argon2 fills memory very fast, thus increasing the area multiplier in the time-area product + +for ASIC-equipped adversaries. Data-independent version Argon2i securely fills the memory spending about 2 +CPU cycles per byte, and Argon2d is three times as fast. This makes it suitable for applications that need +memory-hardness but can not allow much CPU time, like cryptocurrency peer software. + + Tradeoff resilience. Despite high performance, Argon2 provides reasonable level of tradeoff resilience. Our +tradeoff attacks previously applied to Catena and Lyra2 show the following. With default number of passes over +memory (1 for Argon2d, 3 for Argon2i, an ASIC-equipped adversary can not decrease the time-area product if +the memory is reduced by the factor of 4 or more. Much higher penalties apply if more passes over the memory +are made. + + Scalability. Argon2 is scalable both in time and memory dimensions. Both parameters can be changed +independently provided that a certain amount of time is always needed to fill the memory. + + Parallelism. Argon2 may use up to 224 threads in parallel, although in our experiments 8 threads already +exhaust the available bandwidth and computing power of the machine. + + GPU/FPGA/ASIC-unfriendly. Argon2 is heavily optimized for the x86 architecture, so that imple- +menting it on dedicated cracking hardware should be neither cheaper nor faster. Even specialized ASICs would +require significant area and would not allow reduction in the time-area product. + + Additional input support. Argon2 supports additional input, which is syntactically separated from the +message and nonce, such as secret key, environment parameters, user data, etc.. + + 8 + 4.2 Possible future extensions + +Argon2 can be rather easily tuned to support other compression functions, hash functions and block sizes. ROM +can be easily integrated into Argon2 by simply including it into the area where the blocks are referenced from. + +5 Security analysis + +All the attacks detailed below apply to one-lane version of Argon2, but can be carried to the multi-lane version +with the same efficiency. + +5.1 Ranking tradeoff attack + +To figure out the costs of the ASIC-equipped adversary, we first need to calculate the time-space tradeoffs for +Argon2. To the best of our knowledge, the first generic tradeoffs attacks were reported in [4], and they apply to +both data-dependent and data-independent schemes. The idea of the ranking method [4] is as follows. When +we generate a memory block B[l], we make a decision, to store it or not. If we do not store it, we calculate the +access complexity of this block — the number of calls to F needed to compute the block, which is based on the +access complexity of B[l − 1] and B[φ(l)]. The detailed strategy is as follows: + + 1. Select an integer q (for the sake of simplicity let q divide T ). + + 2. Store B[kq] for all k; + + 3. Store all ri and all access complexities; + + 4. Store the T /q highest access complexities. If B[i] refers to a vertex from this top, we store B[i]. + +The memory reduction is a probabilistic function of q. We applied the algorithm to the indexing function of +Argon2 and obtained the results in Table 1. Each recomputation is a tree of certain depth, also given in the +table. + + We conclude that for data-dependent one-pass schemes the adversary is always able to reduce the memory +by the factor of 3 and still keep the time-area product the same. + + α 1 1 1 1 1 1 +C (α) +D(α) 2 3 4 5 6 7 + + 1.5 4 20.2 344 4660 218 + + 1.5 2.8 5.5 10.3 17 27 + +Table 1: Time and computation penalties for the ranking tradeoff attack for the Argon2 indexing function. + +5.2 Memory optimization attack + +As reported in [6], it is possible to optimize the memory use in the earlier version 1.2.1 of Argon2, concretely for + +Argon2i. The memory blocks produced in the version 1.2.1 at second and later passes replaced, not overwrote +the blocks at earlier passes. Therefore, for each block B[i] there is a time gap (let us call it a no-use gap) +between the moment the block is used for the last time (as a reference or as a fresh new block) and the moment +it is overwritten. We formalize this issue as follows. Let us denote by φr(i) the reference block index for block +B r [i]. + +• For t-pass Argon2i the block Br[i], r < t is not used between step lir = max i, maxφ(jr)=i j and step i of + pass r + 1, where it is overwritten. + +• For t-pass Argon2i the block Bt[i] is not used between step lit = max i, maxφ(jr)=i j and step m of pass + t, where it is discarded. + + Since addresses li can be precomputed, an attacker can figure out for each block Br[i] when it can be +discarded. A separate data structure will be needed though to keep the address of newly produced blocks as +they land up at pseudo-random locations at the memory. + + This saving strategy uses the fraction + + Lt = 1 − lit + m + i + + 9 + of memory for the last pass, and + + Lr = m + i − lir + m + i + +for the previous passes. Our experiments show that in 1-pass Argon2i L1 ≈ 0.15, i.e. on average 1/7-th of +memory is used. Since in the straightforward application on average 1/2 of memory is used, the advantage in +the time-area product is about 3.5. For t > 1 this strategy uses 0.25 of memory on average, so the time-area +product advantage is close to 4. If we use the peak memory amount in the time-area calculations, then the +advantage would be 5 and 2.7, respectively. + + The version 1.3 of Argon2 replaces overwriting operation with the XOR. This gives minimal overhead on the +performance: for memory requirements of 8 MB and higher the performance difference is between 5% and 15% +depending on the operating system and hardware. For instance, the highest speed of 3-pass Argon2d v.1.2.1 on +1.8 GHz CPU with Ubuntu is 1.61 cycles per byte, whereas for v.1.3 it is 1.7 cpb (both measured for 2 GB of +RAM, 4 threads). + + In the version 1.3 this saving strategy applies to the one-pass Argon2i only, where it brings the same time- +area product advantage. The multi-pass versions are safe as all the blocks have to be kept in memory till the +overwrite. + +5.3 Attack on iterative compression function + +Let us consider the following structure of the compression function F (X, Y ), where X and Y are input blocks: + + • The input blocks of size t are divided into shorter subblocks of length t (for instance, 128 bits) X0, X1, + X2, . . . and Y0, Y1, Y2, . . .. + + • The output block Z is computed subblockwise: + + Z0 = G(X0, Y0); + Zi = G(Xi, Yi, Zi−1), i > 0. + +This scheme resembles the duplex authenticated encryption mode, which is secure under certain assumptions + +on G. However, it is totally insecure against tradeoff adversaries, as shown below. + Suppose that an adversary computes Z = F (X, Y ) but Y is not stored. Suppose that Y is a tree function + +of stored elements of depth D. The adversary starts with computing Z0, which requires only Y0. In turn, +Y0 = G(X0, Y0 ) for some X , Y . Therefore, the adversary computes the tree of the same depth D, but with +the function G instead of F . Z1 is then a tree function of depth D + 1, Z2 of depth D + 2, etc. In total, +the recomputation takes (D + s)LG time, where s is the number of subblocks and LG is the latency of G. +This should be compared to the full-space implementation, which takes time sLG. Therefore, if the memory is +reduced by the factor q, then the time-area product is changed as + + ATnew = D(q) + s AT. + sq + +Therefore, if + + D(q) ≤ s(q − 1), (2) + +the adversary wins. + One may think of using the Zm−1[l−1] as input to computing Z0[l]. Clearly, this changes little in adversary’s + +strategy, who could simply store all Zm−1, which is feasible for large m. In concrete proposals, s can be 64, +128, 256 and even larger. + + We conclude that F with an iterative structure is insecure. We note that this attack applies also to other +PHC candidates with iterative compression function. + +5.4 Security of Argon2 to generic attacks + +Now we consider preimage and collision resistance of both versions of Argon2. Variable-length inputs are +prepended with their lengths, which shall ensure the absence of equal input strings. Inputs are processed by a +cryptographic hash function, so no collisions should occur at this stage. + + 10 + Internal collision resistance. The compression function G is not claimed to be collision resistant, so it may +happen that distinct inputs produce identical outputs. Recall that G works as follows: + + G(X, Y ) = P (Z) ⊕ (Z), Z = X ⊕ Y. + +where P is a permutation based on the 2-round Blake2b permutation. Let us prove that all Z are different +under certain assumptions. + +Theorem 1. Let Π be Argon2d or Argon2i with d lanes, s slices, and t passes over memory. Assume that + + • P (Z) ⊕ Z is collision-resistant, i.e. it is hard to find a, b such that P (a) ⊕ a = P (b) ⊕ b. + + • P (Z) ⊕ Z is 4-generalized-birthday-resistant, i.e. it is hard to find distinct a, b, c, d such that P (a) ⊕ P (b) ⊕ + P (c) ⊕ P (d) = a ⊕ b ⊕ c ⊕ d. + +Then all the blocks B[i] generated in those t passes are different. + +Proof. By specification, the value of Z is different for the first two blocks of each segment in the first slice in +the first pass. Consider the other blocks. + + Let us enumerate the blocks according to the moment they are computed. Within a slice, where segments +can be computed in parallel, we enumerate lane 0 fully first, then lane 1, etc.. Slices are then computed and +enumerated sequentially. Suppose the proposition is wrong, and let (B[x], B[y]) be a block collision such that +x < y and y is the smallest among all such collisions. As F (Z) ⊕ Z is collision resistant, the collision occurs in +Z, i.e. + + Zx = Zy. +Let rx, ry be reference block indices for B[x] and B[y], respectively, and let px, py be previous block indices for +B[x], B[y]. Then we get + + B[rx] ⊕ B[px] = B[ry] ⊕ B[py]. + +As we assume 4-generalized-birthday-resistance, some arguments are equal. Consider three cases: + + • rx = px. This is forbidden by the rule 3 in Section 3.3. + + • rx = ry. We get B[px] = B[py]. As px, py < y, and y is the smallest yielding such a collision, we get + px = py. However, by construction px = py for x = y. + + • rx = py. Then we get B[ry] = B[px]. As ry < y and px < x < y, we obtain ry = px. Since py = rx < x < y, + we get that x and y are in the same slice, we have two options: + + – py is the last block of a segment. Then y is the first block of a segment in the next slice. Since rx + is the last block of a segment, and x < y, x must be in the same slice as y, and x can not be the + first block in a segment by the rule 4 in Section 3.3. Therefore, ry = px = x − 1. However, this is + impossible, as ry can not belong to the same slice as y. + + – py is not the last block of a segment. Then rx = py = y − 1, which implies that rx ≥ x. The latter + is forbidden. + +Thus we get a contradiction in all cases. This ends the proof. + + The compression function G is not claimed to be collision resistant nor preimage-resistant. However, as the +attacker has no control over its input, the collisions are highly unlikely. We only take care that the starting +blocks are not identical by producing the first two blocks with a counter and forbidding to reference from the +memory the last block as (pseudo)random. + + Argon2d does not overwrite the memory, hence it is vulnerable to garbage-collector attacks and similar ones, +and is not recommended to use in the setting where these threats are possible. Argon2i with 3 passes overwrites +the memory twice, thus thwarting the memory-leak attacks. Even if the entire working memory of Argon2i is +leaked after the hash is computed, the adversary would have to compute two passes over the memory to try the +password. + +5.5 Security of Argon2 to ranking tradeoff attacks + +Time and computational penalties for 1-pass Argon2d are given in Table 1. It suggests that the adversary can +reduce memory by the factor of 3 at most while keeping the time-area product the same. + + Argon2i is more vulnerable to tradeoff attacks due to its data-independent addressing scheme. We applied +the ranking algorithm to 3-pass Argon2i to calculate time and computational penalties. We found out that the +memory reduction by the factor of 3 already gives the computational penalty of around 214. The 214 Blake2b +cores would take more area than 1 GB of RAM (Section 2.1), thus prohibiting the adversary to further reduce +the time-area product. We conclude that the time-area product cost for Argon2i can be reduced by 3 at best. + + 11 + 5.6 Security of Argon2i to generic tradeoff attacks on random graphs + +The recent paper by Alwen and Blocki [1] reports an improved attack on Argon2i (all versions) as an instance +of hash functions based on random graphs. + + For t-pass Argon2i, Alwen and Blocki explicitly construct a set of O(T 3/4) nodes so that removing these +nodes from the computation graph yields the so called sandwich graph with O(T 1/4) layers and O(T 1/2) depth +and size. The computation proceeds as follows: + + • Mark certain v = O(T 3/4) blocks as to be stored. + + • For every segment of length T 3/4: + + – Compute the reference blocks of the segment blocks in parallel. + + – Compute the segment blocks consecutively, store blocks that needs storing. + +Using O(T 1/2) cores, the segment computation takes time O(T 3/4) and the total time is O(T ). The cores are +used only for O(T 1/2) time, so it is possible to amortize costs computing O(T 1/4) instances using these cores +in the round-robin fashion. The memory complexity of each step is about to T log T . + + A precise formula for the time-area complexity using this tradeoff strategy is given in Corollary1 5.6 of [1]: + + ATnew = 2T 7/4 5 + t + ln T , + 8 + +Since the memory consumption in the standard implementation is M = T /t, the standard AT value is T 2/t and +the time-area advantage of the Alwen-Blocki attack is + +E = AT = T 1/4 ln T ) ≤ 2t3/4(5 + M 1/4 + 0.125 ln M ) . + ATnew 2t(5 + (ln t)/2 + 8 0.625 ln t + +For t ≥ 3 we get that E ≤ M 1/4/36. Therefore, for M up to 220 (1 GB) the advantage is smaller than 1 (i.e. the +attack is not beneficial to the adversary at all), and for M up to 224 (16 GB) it is smaller than 2. Therefore, +this approach is not better than the ranking attack. However, it is a subject of active research and we’ll update + +this documents if improvements appear. + +5.7 Summary of tradeoff attacks + +The best attack on the 1- and 2-pass Argon2i (v.1.3) is the low-storage attack from [6], which reduces the +time-area product (using the peak memory value) by the factor of 5. + + The best attack for t-pass (t > 2) Argon2i is the ranking tradeoff attack, which reduces the time-area product +by the factor of 3. + + The best attack on the t-pass Argon2d is the ranking tradeoff attack, which reduces the time-area product +by the factor 1.33. + +6 Design rationale + +Argon2 was designed with the following primary goal: to maximize the cost of exhaustive search on non-x86 +architectures, so that the switch even to dedicated ASICs would not give significant advantage over doing the +exhaustive search on defender’s machine. + +6.1 Indexing function + +The basic scheme (1) was extended to implement: + + • Tunable parallelism; + + • Several passes over memory. + + For the data-dependent addressing we set φ(l) = g(B[l]), where g simply truncates the block and takes the +result modulo l − 1. We considered taking the address not from the block B[l − 1] but from the block B[l − 2], +which should have allowed to prefetch the block earlier. However, not only the gain in our implementations is +limited, but also this benefit can be exploited by the adversary. Indeed, the efficient depth D(q) is now reduced +to D(q) − 1, since the adversary has one extra timeslot. Table 1 implies that then the adversary would be able + + 1the authors denote the total number of blocks by n and the number of passes by k. + + 12 + to reduce the memory by the factor of 5 without increasing the time-area product (which is a 25% increase in +the reduction factor compared to the standard approach). + + For the data-independent addressing we use a simple PRNG, in particular the compression function G in the +counter mode. Due to its long output, one call (or two consecutive calls) would produce hundreds of addresses, +thus minimizing the overhead. This approach does not give provable tradeoff bounds, but instead allows the +analysis with the tradeoff algorithms suited for data-dependent addressing. + +Motivation for our indexing functions Initially, we considered uniform selection of referenced blocks, but +then we considered a more generic case: + + φ ← (264 − (J1)γ ) · |Rl|/264 + + We tried to choose the γ which would maximize the adversary’s costs if he applies the tradeoff based on +the ranking method. We also attempted to make the reference block distribution close to uniform, so that each +memory block is referenced similar number of times. + + For each 1 ≤ γ ≤ 5 with step 0.1 we applied the ranking method with sliding window and selected the +best available tradeoffs. We obtained a set of time penalties {Dγ(α)} and computational penalties {Cγ(α)} for +0.01 < α < 1. We also calculated the reference block distribution for all possible γ. We considered two possible +metrics: + +1. Minimum time-area product + + ATγ = min{α · Dγ (α)}. + + α + +2. Maximum memory reduction which reduces the time-area product compared to the original: + + αγ = min{α | Dγ(α) < α}. + + α + +3. The goodness-of-fit value of the reference block distribution w.r.t. the uniform distribution with n bins: + + χ2 = (pi − 1 )2 , + n + 1 + + i n + +where pi is the average probability of the block from i-th bin to be referenced. For example, if p3 = +0.2, n = 10 and there are 1000 blocks, then blocks from 201 to 300 are referenced 1000 · 0.2 = 200 times + +throughout the computation. + +We got the following results for n = 10: + + γ ATγ αγ χ2 + 1 0.78 3.95 0.89 + 2 0.72 3.2 0.35 + 3 0.67 3.48 0.2 + 4 0.63 3.9 0.13 + 5 0.59 4.38 0.09 + +We conclude that the time-area product achievable by the attacker slowly decreases as γ grows. However, the +difference between γ = 1 and γ = 5 is only the factor of 1.3. We also see that the time-area product can be +kept below the original up to q = 3.2 for γ = 2, whereas for γ = 4 and γ = 1 such q is close to 4. To avoid +floating-point computations, we restrict to integer γ. Thus the optimal values are γ = 2 and γ = 3, where the + +former is slightly better in the first two metrics. + + However, if we consider the reference block uniformity, the situation favors larger γ considerably. We see +that the χ2 value is decreased by the factor of 2.5 when going from γ = 1 to γ = 2, and by the factor of 1.8 +further to γ = 3. In concrete probabilities (see also Figure 4), the first 20% of blocks accumulate 40% of all +reference hits for γ = 2 and 32% for γ = 3 (23.8% vs 19.3% hit for the first 10% of blocks). + + To summarize, γ = 2 and γ = 3 both are better against one specific attacker and slightly worse against the +other. We take γ = 2 as the value that minimizes the AT gain, as we consider this metric more important. + +6.2 Implementing parallelism + +As modern CPUs have several cores possibly available for hashing, it is tempting to use these cores to increase +the bandwidth, the amount of filled memory, and the CPU load. The cores of the recent Intel CPU share +the L3 cache and the entire memory, which both have large latencies (100 cycles and more). Therefore, the +inter-processor communication should be minimal to avoid delays. + + 13 + Memory fraction (1/q) 1 1 1 1 1 + γ=1 + γ=2 2 3 4 5 6 + γ=3 + 1.6 2.9 7.3 16.4 59 + + 1.5 4 20.2 344 4700 + + 1.4 4.3 28.1 1040 217 + +Table 2: Computational penalties for the ranking tradeoff attack with a sliding window, 1 pass. + + Memory fraction (1/q) 1 1 1 1 1 + γ=1 + γ=2 2 3 4 5 6 + γ=3 + 1.6 2.5 4 5.8 8.7 + + 1.5 2.6 5.4 10.7 17 + + 1.3 2.5 5.3 10.1 18 + + Table 3: Depth penalties for the ranking tradeoff attack with a sliding window, 1 pass. + +The simplest way to use p parallel cores is to compute and XOR p independent calls to H: + + H (P, S) = H(P, S, 0) ⊕ H(P, S, 1) ⊕ · · · ⊕ H(P, S, p − 1). + +If a single call uses m memory units, then p calls use pm units. However, this method admits a trivial tradeoff: +an adversary just makes p sequential calls to H using only m memory in total, which keeps the time-area +product constant. + + We suggest the following solution for p cores: the entire memory is split into p lanes of l equal slices each, +which can be viewed as elements of a (p × l)-matrix Q[i][j]. Consider the class of schemes given by Equation (1). +We modify it as follows: + +• p invocations to H run in parallel on the first column Q[∗][0] of the memory matrix. Their indexing + functions refer to their own slices only; + +• For each column j > 0, l invocations to H continue to run in parallel, but the indexing functions now may + refer not only to their own slice, but also to all jp slices of previous columns Q[∗][0], Q[∗][1], . . . , Q[∗][j −1]. + +• The last blocks produced in each slice of the last column are XORed. + +This idea is easily implemented in software with p threads and l joining points. It is easy to see that the adversary + +can use less memory when computing the last column, for instance by computing the slices sequentially and + +storing only the slice which is currently computed. Then his time is multiplied by (1 + p−1 ), whereas the + l + p−1 +memory use is multiplied by (1 − pl ), so the time-area product is modified as + + ATnew = AT 1 − p − 1 p−1 . + pl 1+ l + +For 2 ≤ p, l ≤ 10 this value is always between 1.05 and 3. We have selected l = 4 as this value gives low +synchronisation overhead while imposing time-area penalties on the adversary who reduces the memory even +by the factor 3/4. We note that values l = 8 or l = 16 could be chosen. + + If the compression function is collision-resistant, then one may easily prove that block collisions are highly +unlikely. However, we employ a weaker compression function, for which the following holds: + + G(X, Y ) = F (X ⊕ Y ), + +Figure 4: Access frequency for different memory segments (10%-buckets) and different exponents (from γ = 1 +to γ = 5) in the indexing functions. + + 14 + which is invariant to swap of inputs and is not collision-free. We take special care to ensure that the mode of +operation does not allow such collisions by introducing additional rule: + + • First block of a segment can not refer to the last block of any segment in the previous slice. +We prove that block collisions are unlikely under reasonable conditions on F in Section 5.4. + +6.3 Compression function design + +6.3.1 Overview + +In contrast to attacks on regular hash functions, the adversary does not control inputs to the compression +function G in our scheme. Intuitively, this should relax the cryptographic properties required from the compres- +sion function and allow for a faster primitive. To avoid being the bottleneck, the compression function ideally +should be on par with the performance of memcpy() or similar function, which may run at 0.1 cycle per byte +or even faster. This much faster than ordinary stream ciphers or hash functions, but we might not need strong +properties of those primitives. + + However, we first have to determine the optimal block size. When we request a block from a random location +in the memory, we most likely get a cache miss. The first bytes would arrive at the CPU from RAM within +at best 10 ns, which accounts for 30 cycles. In practice, the latency of a single load instruction may reach 100 +cycles and more. However, this number can be amortized if we request a large block of sequentially stored bytes. +When the first bytes are requested, the CPU stores the next ones in the L1 cache, automatically or using the +prefetch instruction. The data from the L1 cache can be loaded as fast as 64 bytes per cycle on the Haswell +architecture, though we did not manage to reach this speed in our application. + + Therefore, the larger the block is, the higher the throughput is. We have made a series of experiments with +a non-cryptographic compression function, which does little beyond simple XOR of its inputs, and achieved the +performance of around 0.7 cycles per byte per core with block sizes of 1024 bits and larger. + +6.3.2 Design criteria + +It was demonstrated that a compression function with a large block size may be vulnerable to tradeoff attacks +if it has a simple iterative structure, like modes of operation for a blockcipher [4] (some details in Section 5.3). + + Thus we formulate the following design criteria: + + • The compression function must require about t bits of storage (excluding inputs) to compute any output + bit. + +• Each output byte of F must be a nonlinear function of all input bytes, so that the function has differential + +probability below certain level, for example 1 . + 4 + +These criteria ensure that the attacker is unable to compute an output bit using only a few input bits or a few + +stored bits. Moreover, the output bits should not be (almost) linear functions of input bits, as otherwise the + +function tree would collapse. + +We have not found any generic design strategy for such large-block compression functions. It is difficult to + +maintain diffusion on large memory blocks due to the lack of CPU instructions that interleave many registers + +at once. A naive approach would be to apply a linear transformation with certain branch number. However, +even if we operate on 16-byte registers, a 1024-byte block would consist of 64 elements. A 64 × 64-matrix would + +require 32 XORs per register to implement, which gives a penalty about 2 cycles per byte. + +Instead, we propose to build the compression function on the top of a transformation P that already mixes + +several registers. We apply P in parallel (having a P-box), then shuffle the output registers and apply it again. +If P handles p registers, then the compression function may transform a block of p2 registers with 2 rounds of + +P-boxes. We do not have to manually shuffle the data, we just change the inputs to P-boxes. As an example, + +an implementation of the Blake2b [2] permutation processes 8 128-bit registers, so with 2 rounds of Blake2b we + +can design a compression function that mixes the 8192-bit block. We stress that this approach is not possible + +with dedicated AES instructions. Even though they are very fast, they apply only to the 128-bit block, and we + +still have to diffuse its content across other blocks. + +We replace the original Blake2b round function with its modification BlaMka [12], where the modular + +additions in G are combined with 32-bit multiplications. Our motivation was to increase the circuit depth (and + +thus the running time) of a potential ASIC implementation while having roughly the same running time on CPU + +thanks to parallelism and pipelining. Extra multiplications in the scheme serve well, as the best addition-based + +circuits for multiplication have latency about 4-5 times the addition latency for 32-bit multiplication (or roughly + +logn for n-bit multiplication). + As a result, any output 64-bit word of P is implemented by a chain of additions, multiplications, XORs, and + +rotations. The shortest possible chain for the 1 KB-block (e.g, from v0 to v0) consists of 12 MULs, 12 XORs, +and 12 rotations. + + 15 + Argon2d (1 pass) Argon2i (3 passes) + +Processor Threads Cycles/Byte Bandwidth Cycles/Byte Bandwidth + + (GB/s) (GB/s) + +i7-4500U 1 1.3 2.5 4.7 2.6 + +i7-4500U 2 0.9 3.8 2.8 4.5 + +i7-4500U 4 0.6 5.4 2 5.4 + +i7-4500U 8 0.6 5.4 1.9 5.8 + +Table 4: Speed and memory bandwidth of Argon2(d/i) measured on 1 GB memory filled. Core i7-4500U — +Intel Haswell 1.8 GHz, 4 cores + +6.4 User-controlled parameters + +We have made a number of design choices, which we consider optimal for a wide range of applications. Some +parameters can be altered, some should be kept as is. We give a user full control over: + + • Amount M of memory filled by algorithm. This value, evidently, depends on the application and the + environment. There is no ”insecure” value for this parameter, though clearly the more memory the + better. + + • Number T of passes over the memory. The running time depends linearly on this parameter. We expect + that the user chooses this number according to the time constraints on the application. Again, there is + no ”insecure value” for T . + + • Degree d of parallelism. This number determines the number of threads used by an optimized implemen- + tation of Argon2. We expect that the user is restricted by a number of CPU cores (or half-cores) that can + be devoted to the hash function, and chooses d accordingly (double the number of cores). + + • Length of password/message, salt/nonce, and tag (except for some low, insecure values for salt and tag + lengths). + + We allow to choose another compression function G, hash function H, block size b, and number of slices l. +However, we do not provide this flexibility in a reference implementation as we guess that the vast majority of +the users would prefer as few parameters as possible. + +7 Performance + +7.1 x86 architecture + +To optimize the data load and store from/to memory, the memory that will be processed has to be alligned on +16-byte boundary when loaded/stored into/from 128-bit registers and on 32-byte boundary when loaded/stored +into/from 256-bit registers. If the memory is not aligned on the specified boundaries, then each memory +operation may take one extra CPU cycle, which may cause consistent penalties for many memory accesses. + + The results presented are obtained using the gcc 4.8.2 compiler with the following options: -m64 -mavx +-std=c++11 -pthread -O3. The cycle count value was measured using the rdtscp Intel intrinsics C function +which inlines the RDTSCP assembly instruction that returns the 64-bit Time Stamp Counter (TSC) value. The +instruction waits for prevoius instruction to finish and then is executed, but meanwhile the next instructions may +begin before the value is read. Although this shortcoming, we used this method because it is the most realiable +handy method to measure the execution time and also it is widely used in other cryptographic operations +benchmarking. + +8 Applications + +Argon2d is optimized for settings where the adversary does not get regular access to system memory or CPU, +i.e. he can not run side-channel attacks based on the timing information, nor he can recover the password much +faster using garbage collection [7]. These settings are more typical for backend servers and cryptocurrency +minings. For practice we suggest the following settings: + + • Cryptocurrency mining, that takes 0.1 seconds on a 2 Ghz CPU using 1 core — Argon2d with 2 lanes and + 250 MB of RAM; + + 16 + • Backend server authentication, that takes 0.5 seconds on a 2 GHz CPU using 4 cores — Argon2d with 8 + lanes and 4 GB of RAM. + + Argon2i is optimized for more dangerous settings, where the adversary possibly can access the same machine, +use its CPU or mount cold-boot attacks. We use three passes to get rid entirely of the password in the memory. +We suggest the following settings: + + • Key derivation for hard-drive encryption, that takes 3 seconds on a 2 GHz CPU using 2 cores — Argon2i + with 4 lanes and 6 GB of RAM; + + • Frontend server authentication, that takes 0.5 seconds on a 2 GHz CPU using 2 cores — Argon2i with 4 + lanes and 1 GB of RAM. + +9 Recommended parameters + +We recommend the following procedure to select the type and the parameters for practical use of Argon2: + 1. Select the type y. If you do not know the difference between them or you consider side-channel attacks + as viable threat, choose Argon2i. Otherwise any choice is fine, including optional types. + 2. Figure out the maximum number h of threads that can be initiated by each call to Argon2. + 3. Figure out the maximum amount m of memory that each call can afford. + 4. Figure out the maximum amount x of time (in seconds) that each call can afford. + + 5. Select the salt length. 128 bits is sufficient for all applications, but can be reduced to 64 bits in the case + of space constraints. + + 6. Select the tag length. 128 bits is sufficient for most applications, including key derivation. If longer keys + are needed, select longer tags. + + 7. If side-channel attacks is a viable threat, enable the memory wiping option in the library call. + 8. Run the scheme of type y, memory m and h lanes and threads, using different number of passes t. Figure + + out the maximum t such that the running time does not exceed x. If it exceeds x even for t = 1, reduce + m accordingly. + 9. Hash all the passwords with the just determined values m, h, and t. + +10 Conclusion + +We presented the memory-hard function Argon2, which maximizes the ASIC implementation costs for given +CPU computing time. We aimed to make the design clear and compact, so that any feature and operation has +certain rationale. The clarity and brevity of the Argon2 design has been confirmed by its eventual selection as +the PHC winner. + + Further development of tradeoff attacks with dedication to Argon2 is the subject of future work. It also +remains to be seen how Argon2 withstands GPU cracking with low memory requirements. + +References + + [1] J. Alwen and J. Blocki, “Efficiently computing data-independent memory-hard functions,” IACR Cryptol- + ogy ePrint Archive, vol. 2016, p. 115, 2016. + + [2] J. Aumasson, S. Neves, Z. Wilcox-O’Hearn, and C. Winnerlein, “BLAKE2: simpler, smaller, fast as MD5,” + in ACNS’13, ser. Lecture Notes in Computer Science, vol. 7954. Springer, 2013, pp. 119–135. + + [3] D. J. Bernstein and T. Lange, “Non-uniform cracks in the concrete: The power of free precomputation,” + in ASIACRYPT’13, ser. Lecture Notes in Computer Science, vol. 8270. Springer, 2013, pp. 321–340. + + [4] A. Biryukov and D. Khovratovich, “Tradeoff cryptanalysis of memory-hard functions,” in Advances in + Cryptology - ASIACRYPT 2015, ser. Lecture Notes in Computer Science, T. Iwata and J. H. Cheon, Eds., + vol. 9453. Springer, 2015, pp. 633–657. + + 17 + [5] M. Broz, “Phc benchmarks,” 2015, https://github.com/mbroz/PHCtest/blob/master/output/phc round2. + pdf . + + [6] H. Corrigan-Gibbs, D. Boneh, and S. E. Schechter, “Balloon hashing: Provably space-hard hash functions + with data-independent access patterns,” IACR Cryptology ePrint Archive, vol. 2016, p. 27, 2016. + + [7] C. Forler, E. List, S. Lucks, and J. Wenzel, “Overview of the candidates for the password hashing competi- + tion - and their resistance against garbage-collector attacks,” Cryptology ePrint Archive, Report 2014/881, + 2014, http://eprint.iacr.org/. + + [8] C. Forler, S. Lucks, and J. Wenzel, “Memory-demanding password scrambling,” in ASIACRYPT’14, ser. + Lecture Notes in Computer Science, vol. 8874. Springer, 2014, pp. 289–305, tweaked version of [?]. + + [9] B. Giridhar, M. Cieslak, D. Duggal, R. G. Dreslinski, H. M. Chen, R. Patti, B. Hold, C. Chakrabarti, T. N. + Mudge, and D. Blaauw, “Exploring DRAM organizations for energy-efficient and resilient exascale mem- + ories,” in International Conference for High Performance Computing, Networking, Storage and Analysis + (SC 2013). ACM, 2013, pp. 23–35. + +[10] F. Gu¨rkaynak, K. Gaj, B. Muheim, E. Homsirikamol, C. Keller, M. Rogawski, H. Kaeslin, and J.-P. Kaps, + “Lessons learned from designing a 65nm ASIC for evaluating third round SHA-3 candidates,” in Third + SHA-3 Candidate Conference, Mar. 2012. + +[11] M. E. Hellman, “A cryptanalytic time-memory trade-off,” Information Theory, IEEE Transactions on, + vol. 26, no. 4, pp. 401–406, 1980. + +[12] M. A. S. Jr., L. C. Almeida, E. R. Andrade, P. C. F. dos Santos, and P. S. L. M. Barreto, “Lyra2: + Password hashing scheme with improved security against time-memory trade-offs,” Cryptology ePrint + Archive, Report 2015/136, 2015, http://eprint.iacr.org/. + +[13] C. Lee, “Litecoin - open source p2p digital currency,” https://bitcointalk.org/index.php?topic=47417.0, + 2011, https://litecoin.org/. + +[14] NIST, SHA-3 competition, 2007, http://csrc.nist.gov/groups/ST/hash/sha-3/index.html. + +[15] C. Percival, “Stronger key derivation via sequential memory-hard functions,” 2009, http://www.tarsnap. + com/scrypt/scrypt.pdf . + +[16] T. Ristenpart, E. Tromer, H. Shacham, and S. Savage, “Hey, you, get off of my cloud: exploring information + leakage in third-party compute clouds,” in ACM CCS’09, 2009, pp. 199–212. + +[17] M. Robshaw and O. Billet, New stream cipher designs: the eSTREAM finalists. Springer, 2008, vol. 4986. + +[18] C. D. Thompson, “Area-time complexity for VLSI,” in STOC’79. ACM, 1979, pp. 81–88. + +A Permutation P + +Permutation P is based on the round function of Blake2b and works as follows. Its 8 16-byte inputs S0, S1, . . . , S7 +are viewed as a 4 × 4-matrix of 64-bit words, where Si = (v2i+1||v2i): + +  v0 v1 v2 v3  + +  v4 v5 v6 v7  + +  v8 v9 v10 v11 +  + + v12 v13 v14 v15 + +Then we do + + G(v0, v4, v8, v12) G(v1, v5, v9, v13) + G(v2, v6, v10, v14) G(v3, v7, v11, v15) + G(v0, v5, v10, v15) G(v1, v6, v11, v12) + + G(v2, v7, v8, v13) G(v3, v4, v9, v14), + + 18 + where G applies to (a, b, c, d) as follows: + + a ← a + b + 2 ∗ aL ∗ bL; + d ← (d ⊕ a) ≫ 32; + c ← c + d + 2 ∗ cL ∗ dL; + b ← (b ⊕ c) ≫ 24; + + (3) + a ← a + b + 2 ∗ aL ∗ bL; + d ← (d ⊕ a) ≫ 16; + c ← c + d + 2 ∗ cL ∗ dL; + b ← (b ⊕ c) ≫ 63; + +Here + are additions modulo 264 and ≫ are 64-bit rotations to the right. xL is the 64-bit integer x truncated +to the 32 least significant bits. The modular additions in G are combined with 64-bit multiplications (that is +the only difference to the original Blake2 design). + + Our motivation in adding multiplications is to increase the circuit depth (and thus the running time) of +a potential ASIC implementation while having roughly the same running time on CPU thanks to parallelism +and pipelining. Extra multiplications in the scheme serve well, as the best addition-based circuits for multi- +plication have latency about 4-5 times the addition latency for 32-bit multiplication (or roughly logn for n-bit +multiplication). + + As a result, any output 64-bit word of P is implemented by a chain of additions, multiplications, XORs, and +rotations. The shortest possible chain for the 1 KB-block (e.g, from v0 to v0) consists of 12 MULs, 12 XORs, +and 12 rotations. + +B Additional functionality + +The following functionality is enabled in the extended implementation2 but is not officially included in the PHC +release3: + + • Hybrid construction Argon2id, which has type y = 2 (used in the pre-hashing and address generation). + In the first two slices of the first pass it generates reference addresses data-independently as in Argon2i, + whereas in later slices and next passes it generates them data-dependently as in Argon2d. + + • Sbox-hardened version Argon2ds, which has type y = 4. In this version the compression function G + includes the 64-bit transformation T , which is a chain of S-boxes, multiplications, and additions. In terms + of Section 3.4, we additionally compute + + W = LSB64(R0 ⊕ R63); + Z0+ = T (W ); + Z63+ = T (W ) 32. + + The transformation T , on the 64-bit word W is defined as follows: + + – Repeat 96 times: + 1. y ← S[W [8 : 0]]; + 2. z ← S[512 + W [40 : 32]]; + 3. W ← ((W [31 : 0] ◦ W [63 : 32]) + y) ⊕ z. + + – T (W ) ← W . + + All the operations are performed modulo 264. ◦ is the 64-bit multiplication, S[] is the Sbox (lookup table) + that maps 10-bit indices to 64-bit values. W [i : j] is the subset of bits of W from i to j inclusive. + The S-box is generated in the start of every pass in the following procedure. In total we specify 210 · 8 + bytes, or 8 KBytes. We take block B[0][0] and apply F (the core of G) to it 16 times. After each two + iterations we use the entire 1024-byte value and initialize 128 lookup values. + The properties of T and its initialization procedure is subject to change. + + 2https://github.com/khovratovich/Argon2 + 3https://github.com/P-H-C/phc-winner-argon2 + + 19 + C Change log + +C.1 v.1.3 + + • The blocks are XORed with, not overwritten in the second pass and later; + • The version number byte is now 0x13. + +C.2 v1.2.1 – February 1st, 2016 + + • The total number of blocks can reach 232 − 1; + • The reference block index now requires 64 bits; the lane number is computed separately. + • New modes Argon2id and Argon2ds are added as optional. +The specification of v1.2.1 released on 26th August, 2015, had incorrect description of the first block generation. +The version released on 2d September, 2015, had incorrect description of the counter used in generating addresses +for Argon2i. The version released on September 8th, 2015, lacked the ”Recommended parameters” section. The +version released on October 1st, 2015, had the maximal parallelism level of 255 lanes. The version released on +November 3d, 2015, had a typo. The versions released on November 5th and December 26th, had incorrect +description of the first block generation and the variable-length hash function. + +C.3 v1.2 – 21th June, 2015 + +Non-uniform indexing rule, the compression function gets multiplications. + +C.4 v1.1 – 6th February, 2015 + + • New indexing rule added to avoid collision with a proof. + • New rule to generate first two blocks in each lane. + • Non-zero constant added to the input block used to generate addresses in Argon2i. + + 20 + \ No newline at end of file diff --git a/deps/phc-winner-argon2-20190702/include/argon2.h b/deps/phc-winner-argon2-20190702/include/argon2.h new file mode 100644 index 000000000..fc8682c2d --- /dev/null +++ b/deps/phc-winner-argon2-20190702/include/argon2.h @@ -0,0 +1,437 @@ +/* + * Argon2 reference source code package - reference C implementations + * + * Copyright 2015 + * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves + * + * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of + * these licenses can be found at: + * + * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + * + * You should have received a copy of both of these licenses along with this + * software. If not, they may be obtained at the above URLs. + */ + +#ifndef ARGON2_H +#define ARGON2_H + +#include +#include +#include + +#if defined(__cplusplus) +extern "C" { +#endif + +/* Symbols visibility control */ +#ifdef A2_VISCTL +#define ARGON2_PUBLIC __attribute__((visibility("default"))) +#define ARGON2_LOCAL __attribute__ ((visibility ("hidden"))) +#elif _MSC_VER +#define ARGON2_PUBLIC __declspec(dllexport) +#define ARGON2_LOCAL +#else +#define ARGON2_PUBLIC +#define ARGON2_LOCAL +#endif + +/* + * Argon2 input parameter restrictions + */ + +/* Minimum and maximum number of lanes (degree of parallelism) */ +#define ARGON2_MIN_LANES UINT32_C(1) +#define ARGON2_MAX_LANES UINT32_C(0xFFFFFF) + +/* Minimum and maximum number of threads */ +#define ARGON2_MIN_THREADS UINT32_C(1) +#define ARGON2_MAX_THREADS UINT32_C(0xFFFFFF) + +/* Number of synchronization points between lanes per pass */ +#define ARGON2_SYNC_POINTS UINT32_C(4) + +/* Minimum and maximum digest size in bytes */ +#define ARGON2_MIN_OUTLEN UINT32_C(4) +#define ARGON2_MAX_OUTLEN UINT32_C(0xFFFFFFFF) + +/* Minimum and maximum number of memory blocks (each of BLOCK_SIZE bytes) */ +#define ARGON2_MIN_MEMORY (2 * ARGON2_SYNC_POINTS) /* 2 blocks per slice */ + +#define ARGON2_MIN(a, b) ((a) < (b) ? (a) : (b)) +/* Max memory size is addressing-space/2, topping at 2^32 blocks (4 TB) */ +#define ARGON2_MAX_MEMORY_BITS \ + ARGON2_MIN(UINT32_C(32), (sizeof(void *) * CHAR_BIT - 10 - 1)) +#define ARGON2_MAX_MEMORY \ + ARGON2_MIN(UINT32_C(0xFFFFFFFF), UINT64_C(1) << ARGON2_MAX_MEMORY_BITS) + +/* Minimum and maximum number of passes */ +#define ARGON2_MIN_TIME UINT32_C(1) +#define ARGON2_MAX_TIME UINT32_C(0xFFFFFFFF) + +/* Minimum and maximum password length in bytes */ +#define ARGON2_MIN_PWD_LENGTH UINT32_C(0) +#define ARGON2_MAX_PWD_LENGTH UINT32_C(0xFFFFFFFF) + +/* Minimum and maximum associated data length in bytes */ +#define ARGON2_MIN_AD_LENGTH UINT32_C(0) +#define ARGON2_MAX_AD_LENGTH UINT32_C(0xFFFFFFFF) + +/* Minimum and maximum salt length in bytes */ +#define ARGON2_MIN_SALT_LENGTH UINT32_C(8) +#define ARGON2_MAX_SALT_LENGTH UINT32_C(0xFFFFFFFF) + +/* Minimum and maximum key length in bytes */ +#define ARGON2_MIN_SECRET UINT32_C(0) +#define ARGON2_MAX_SECRET UINT32_C(0xFFFFFFFF) + +/* Flags to determine which fields are securely wiped (default = no wipe). */ +#define ARGON2_DEFAULT_FLAGS UINT32_C(0) +#define ARGON2_FLAG_CLEAR_PASSWORD (UINT32_C(1) << 0) +#define ARGON2_FLAG_CLEAR_SECRET (UINT32_C(1) << 1) + +/* Global flag to determine if we are wiping internal memory buffers. This flag + * is defined in core.c and defaults to 1 (wipe internal memory). */ +extern int FLAG_clear_internal_memory; + +/* Error codes */ +typedef enum Argon2_ErrorCodes { + ARGON2_OK = 0, + + ARGON2_OUTPUT_PTR_NULL = -1, + + ARGON2_OUTPUT_TOO_SHORT = -2, + ARGON2_OUTPUT_TOO_LONG = -3, + + ARGON2_PWD_TOO_SHORT = -4, + ARGON2_PWD_TOO_LONG = -5, + + ARGON2_SALT_TOO_SHORT = -6, + ARGON2_SALT_TOO_LONG = -7, + + ARGON2_AD_TOO_SHORT = -8, + ARGON2_AD_TOO_LONG = -9, + + ARGON2_SECRET_TOO_SHORT = -10, + ARGON2_SECRET_TOO_LONG = -11, + + ARGON2_TIME_TOO_SMALL = -12, + ARGON2_TIME_TOO_LARGE = -13, + + ARGON2_MEMORY_TOO_LITTLE = -14, + ARGON2_MEMORY_TOO_MUCH = -15, + + ARGON2_LANES_TOO_FEW = -16, + ARGON2_LANES_TOO_MANY = -17, + + ARGON2_PWD_PTR_MISMATCH = -18, /* NULL ptr with non-zero length */ + ARGON2_SALT_PTR_MISMATCH = -19, /* NULL ptr with non-zero length */ + ARGON2_SECRET_PTR_MISMATCH = -20, /* NULL ptr with non-zero length */ + ARGON2_AD_PTR_MISMATCH = -21, /* NULL ptr with non-zero length */ + + ARGON2_MEMORY_ALLOCATION_ERROR = -22, + + ARGON2_FREE_MEMORY_CBK_NULL = -23, + ARGON2_ALLOCATE_MEMORY_CBK_NULL = -24, + + ARGON2_INCORRECT_PARAMETER = -25, + ARGON2_INCORRECT_TYPE = -26, + + ARGON2_OUT_PTR_MISMATCH = -27, + + ARGON2_THREADS_TOO_FEW = -28, + ARGON2_THREADS_TOO_MANY = -29, + + ARGON2_MISSING_ARGS = -30, + + ARGON2_ENCODING_FAIL = -31, + + ARGON2_DECODING_FAIL = -32, + + ARGON2_THREAD_FAIL = -33, + + ARGON2_DECODING_LENGTH_FAIL = -34, + + ARGON2_VERIFY_MISMATCH = -35 +} argon2_error_codes; + +/* Memory allocator types --- for external allocation */ +typedef int (*allocate_fptr)(uint8_t **memory, size_t bytes_to_allocate); +typedef void (*deallocate_fptr)(uint8_t *memory, size_t bytes_to_allocate); + +/* Argon2 external data structures */ + +/* + ***** + * Context: structure to hold Argon2 inputs: + * output array and its length, + * password and its length, + * salt and its length, + * secret and its length, + * associated data and its length, + * number of passes, amount of used memory (in KBytes, can be rounded up a bit) + * number of parallel threads that will be run. + * All the parameters above affect the output hash value. + * Additionally, two function pointers can be provided to allocate and + * deallocate the memory (if NULL, memory will be allocated internally). + * Also, three flags indicate whether to erase password, secret as soon as they + * are pre-hashed (and thus not needed anymore), and the entire memory + ***** + * Simplest situation: you have output array out[8], password is stored in + * pwd[32], salt is stored in salt[16], you do not have keys nor associated + * data. You need to spend 1 GB of RAM and you run 5 passes of Argon2d with + * 4 parallel lanes. + * You want to erase the password, but you're OK with last pass not being + * erased. You want to use the default memory allocator. + * Then you initialize: + Argon2_Context(out,8,pwd,32,salt,16,NULL,0,NULL,0,5,1<<20,4,4,NULL,NULL,true,false,false,false) + */ +typedef struct Argon2_Context { + uint8_t *out; /* output array */ + uint32_t outlen; /* digest length */ + + uint8_t *pwd; /* password array */ + uint32_t pwdlen; /* password length */ + + uint8_t *salt; /* salt array */ + uint32_t saltlen; /* salt length */ + + uint8_t *secret; /* key array */ + uint32_t secretlen; /* key length */ + + uint8_t *ad; /* associated data array */ + uint32_t adlen; /* associated data length */ + + uint32_t t_cost; /* number of passes */ + uint32_t m_cost; /* amount of memory requested (KB) */ + uint32_t lanes; /* number of lanes */ + uint32_t threads; /* maximum number of threads */ + + uint32_t version; /* version number */ + + allocate_fptr allocate_cbk; /* pointer to memory allocator */ + deallocate_fptr free_cbk; /* pointer to memory deallocator */ + + uint32_t flags; /* array of bool options */ +} argon2_context; + +/* Argon2 primitive type */ +typedef enum Argon2_type { + Argon2_d = 0, + Argon2_i = 1, + Argon2_id = 2 +} argon2_type; + +/* Version of the algorithm */ +typedef enum Argon2_version { + ARGON2_VERSION_10 = 0x10, + ARGON2_VERSION_13 = 0x13, + ARGON2_VERSION_NUMBER = ARGON2_VERSION_13 +} argon2_version; + +/* + * Function that gives the string representation of an argon2_type. + * @param type The argon2_type that we want the string for + * @param uppercase Whether the string should have the first letter uppercase + * @return NULL if invalid type, otherwise the string representation. + */ +ARGON2_PUBLIC const char *argon2_type2string(argon2_type type, int uppercase); + +/* + * Function that performs memory-hard hashing with certain degree of parallelism + * @param context Pointer to the Argon2 internal structure + * @return Error code if smth is wrong, ARGON2_OK otherwise + */ +ARGON2_PUBLIC int argon2_ctx(argon2_context *context, argon2_type type); + +/** + * Hashes a password with Argon2i, producing an encoded hash + * @param t_cost Number of iterations + * @param m_cost Sets memory usage to m_cost kibibytes + * @param parallelism Number of threads and compute lanes + * @param pwd Pointer to password + * @param pwdlen Password size in bytes + * @param salt Pointer to salt + * @param saltlen Salt size in bytes + * @param hashlen Desired length of the hash in bytes + * @param encoded Buffer where to write the encoded hash + * @param encodedlen Size of the buffer (thus max size of the encoded hash) + * @pre Different parallelism levels will give different results + * @pre Returns ARGON2_OK if successful + */ +ARGON2_PUBLIC int argon2i_hash_encoded(const uint32_t t_cost, + const uint32_t m_cost, + const uint32_t parallelism, + const void *pwd, const size_t pwdlen, + const void *salt, const size_t saltlen, + const size_t hashlen, char *encoded, + const size_t encodedlen); + +/** + * Hashes a password with Argon2i, producing a raw hash at @hash + * @param t_cost Number of iterations + * @param m_cost Sets memory usage to m_cost kibibytes + * @param parallelism Number of threads and compute lanes + * @param pwd Pointer to password + * @param pwdlen Password size in bytes + * @param salt Pointer to salt + * @param saltlen Salt size in bytes + * @param hash Buffer where to write the raw hash - updated by the function + * @param hashlen Desired length of the hash in bytes + * @pre Different parallelism levels will give different results + * @pre Returns ARGON2_OK if successful + */ +ARGON2_PUBLIC int argon2i_hash_raw(const uint32_t t_cost, const uint32_t m_cost, + const uint32_t parallelism, const void *pwd, + const size_t pwdlen, const void *salt, + const size_t saltlen, void *hash, + const size_t hashlen); + +ARGON2_PUBLIC int argon2d_hash_encoded(const uint32_t t_cost, + const uint32_t m_cost, + const uint32_t parallelism, + const void *pwd, const size_t pwdlen, + const void *salt, const size_t saltlen, + const size_t hashlen, char *encoded, + const size_t encodedlen); + +ARGON2_PUBLIC int argon2d_hash_raw(const uint32_t t_cost, const uint32_t m_cost, + const uint32_t parallelism, const void *pwd, + const size_t pwdlen, const void *salt, + const size_t saltlen, void *hash, + const size_t hashlen); + +ARGON2_PUBLIC int argon2id_hash_encoded(const uint32_t t_cost, + const uint32_t m_cost, + const uint32_t parallelism, + const void *pwd, const size_t pwdlen, + const void *salt, const size_t saltlen, + const size_t hashlen, char *encoded, + const size_t encodedlen); + +ARGON2_PUBLIC int argon2id_hash_raw(const uint32_t t_cost, + const uint32_t m_cost, + const uint32_t parallelism, const void *pwd, + const size_t pwdlen, const void *salt, + const size_t saltlen, void *hash, + const size_t hashlen); + +/* generic function underlying the above ones */ +ARGON2_PUBLIC int argon2_hash(const uint32_t t_cost, const uint32_t m_cost, + const uint32_t parallelism, const void *pwd, + const size_t pwdlen, const void *salt, + const size_t saltlen, void *hash, + const size_t hashlen, char *encoded, + const size_t encodedlen, argon2_type type, + const uint32_t version); + +/** + * Verifies a password against an encoded string + * Encoded string is restricted as in validate_inputs() + * @param encoded String encoding parameters, salt, hash + * @param pwd Pointer to password + * @pre Returns ARGON2_OK if successful + */ +ARGON2_PUBLIC int argon2i_verify(const char *encoded, const void *pwd, + const size_t pwdlen); + +ARGON2_PUBLIC int argon2d_verify(const char *encoded, const void *pwd, + const size_t pwdlen); + +ARGON2_PUBLIC int argon2id_verify(const char *encoded, const void *pwd, + const size_t pwdlen); + +/* generic function underlying the above ones */ +ARGON2_PUBLIC int argon2_verify(const char *encoded, const void *pwd, + const size_t pwdlen, argon2_type type); + +/** + * Argon2d: Version of Argon2 that picks memory blocks depending + * on the password and salt. Only for side-channel-free + * environment!! + ***** + * @param context Pointer to current Argon2 context + * @return Zero if successful, a non zero error code otherwise + */ +ARGON2_PUBLIC int argon2d_ctx(argon2_context *context); + +/** + * Argon2i: Version of Argon2 that picks memory blocks + * independent on the password and salt. Good for side-channels, + * but worse w.r.t. tradeoff attacks if only one pass is used. + ***** + * @param context Pointer to current Argon2 context + * @return Zero if successful, a non zero error code otherwise + */ +ARGON2_PUBLIC int argon2i_ctx(argon2_context *context); + +/** + * Argon2id: Version of Argon2 where the first half-pass over memory is + * password-independent, the rest are password-dependent (on the password and + * salt). OK against side channels (they reduce to 1/2-pass Argon2i), and + * better with w.r.t. tradeoff attacks (similar to Argon2d). + ***** + * @param context Pointer to current Argon2 context + * @return Zero if successful, a non zero error code otherwise + */ +ARGON2_PUBLIC int argon2id_ctx(argon2_context *context); + +/** + * Verify if a given password is correct for Argon2d hashing + * @param context Pointer to current Argon2 context + * @param hash The password hash to verify. The length of the hash is + * specified by the context outlen member + * @return Zero if successful, a non zero error code otherwise + */ +ARGON2_PUBLIC int argon2d_verify_ctx(argon2_context *context, const char *hash); + +/** + * Verify if a given password is correct for Argon2i hashing + * @param context Pointer to current Argon2 context + * @param hash The password hash to verify. The length of the hash is + * specified by the context outlen member + * @return Zero if successful, a non zero error code otherwise + */ +ARGON2_PUBLIC int argon2i_verify_ctx(argon2_context *context, const char *hash); + +/** + * Verify if a given password is correct for Argon2id hashing + * @param context Pointer to current Argon2 context + * @param hash The password hash to verify. The length of the hash is + * specified by the context outlen member + * @return Zero if successful, a non zero error code otherwise + */ +ARGON2_PUBLIC int argon2id_verify_ctx(argon2_context *context, + const char *hash); + +/* generic function underlying the above ones */ +ARGON2_PUBLIC int argon2_verify_ctx(argon2_context *context, const char *hash, + argon2_type type); + +/** + * Get the associated error message for given error code + * @return The error message associated with the given error code + */ +ARGON2_PUBLIC const char *argon2_error_message(int error_code); + +/** + * Returns the encoded hash length for the given input parameters + * @param t_cost Number of iterations + * @param m_cost Memory usage in kibibytes + * @param parallelism Number of threads; used to compute lanes + * @param saltlen Salt size in bytes + * @param hashlen Hash size in bytes + * @param type The argon2_type that we want the encoded length for + * @return The encoded hash length in bytes + */ +ARGON2_PUBLIC size_t argon2_encodedlen(uint32_t t_cost, uint32_t m_cost, + uint32_t parallelism, uint32_t saltlen, + uint32_t hashlen, argon2_type type); + +#if defined(__cplusplus) +} +#endif + +#endif diff --git a/deps/phc-winner-argon2-20190702/kats/argon2d b/deps/phc-winner-argon2-20190702/kats/argon2d new file mode 100644 index 000000000..760cd3154 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/kats/argon2d @@ -0,0 +1,12304 @@ +======================================= +Argon2d version number 19 +======================================= +Memory: 32 KiB, Iterations: 3, Parallelism: 4 lanes, Tag length: 32 bytes +Password[32]: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +Salt[16]: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +Secret[8]: 03 03 03 03 03 03 03 03 +Associated data[12]: 04 04 04 04 04 04 04 04 04 04 04 04 +Pre-hashing digest: b8 81 97 91 a0 35 96 60 bb 77 09 c8 5f a4 8f 04 d5 d8 2c 05 c5 f2 15 cc db 88 54 91 71 7c f7 57 08 2c 28 b9 51 be 38 14 10 b5 fc 2e b7 27 40 33 b9 fd c7 ae 67 2b ca ac 5d 17 90 97 a4 af 31 09 + + After pass 0: +Block 0000 [ 0]: db2fea6b2c6f5c8a +Block 0000 [ 1]: 719413be00f82634 +Block 0000 [ 2]: a1e3f6dd42aa25cc +Block 0000 [ 3]: 3ea8efd4d55ac0d1 +Block 0000 [ 4]: 1278849d789aa327 +Block 0000 [ 5]: 54ec500e01cb4887 +Block 0000 [ 6]: 96c5956594a99199 +Block 0000 [ 7]: 54ef81c17e9b4b85 +Block 0000 [ 8]: baed2f6297b02ec0 +Block 0000 [ 9]: 4aaabe9242c77d92 +Block 0000 [ 10]: 77ee20571b300aba +Block 0000 [ 11]: f3eb71a1198a6329 +Block 0000 [ 12]: 426d5f6ae87a9437 +Block 0000 [ 13]: 6da602fb6e9da76f +Block 0000 [ 14]: 6cd3a4c30d15d1c8 +Block 0000 [ 15]: 5d2b71f0503a6081 +Block 0000 [ 16]: 5546d897e9ff2979 +Block 0000 [ 17]: 3f4dfa67e5766a1e +Block 0000 [ 18]: 4124d05b5a90526c +Block 0000 [ 19]: 7fdf2f081232cf92 +Block 0000 [ 20]: 5966a32b400ba845 +Block 0000 [ 21]: 1bc8d3001e30b570 +Block 0000 [ 22]: ab4f59b1db7de22c +Block 0000 [ 23]: c8c3b695f2999d99 +Block 0000 [ 24]: ed809c6fb5b3e08b +Block 0000 [ 25]: a35525b5cdb05508 +Block 0000 [ 26]: be72096c694a09a5 +Block 0000 [ 27]: e64fb95af6124cdb +Block 0000 [ 28]: 1283aca69967b329 +Block 0000 [ 29]: 573a3c93e1c4d2d0 +Block 0000 [ 30]: 4fe159afa866e46a +Block 0000 [ 31]: e1613f8cea969fb2 +Block 0000 [ 32]: 337f483e3cc6d5ff +Block 0000 [ 33]: 3434681c54e6162b +Block 0000 [ 34]: a02a65f1c3451133 +Block 0000 [ 35]: 9b5f838814d81637 +Block 0000 [ 36]: 52327c997c05bd67 +Block 0000 [ 37]: 49ceb51f96966824 +Block 0000 [ 38]: 589749ef2ded3cef +Block 0000 [ 39]: 369a0a5a280aceef +Block 0000 [ 40]: 53d2c8db35d546df +Block 0000 [ 41]: 437a8603e4c91a8b +Block 0000 [ 42]: 4a4642967b88dcda +Block 0000 [ 43]: 4b67d8a64d98ce65 +Block 0000 [ 44]: 7a51353e30a4d18c +Block 0000 [ 45]: ecfb8e818ddb5e3a +Block 0000 [ 46]: 687554e011af89b3 +Block 0000 [ 47]: 754ef2b08241903f +Block 0000 [ 48]: 898ed0d448d9bf80 +Block 0000 [ 49]: f98e7b29f668f39d +Block 0000 [ 50]: 1593baefbd91bcef +Block 0000 [ 51]: 9f48d75f063a4247 +Block 0000 [ 52]: b44c4730eb25dbde +Block 0000 [ 53]: ab1984298888f3be +Block 0000 [ 54]: 99636cee27f6ff9c +Block 0000 [ 55]: d771122043a2bcf5 +Block 0000 [ 56]: 99b7cdcb1768b8fc +Block 0000 [ 57]: c784bfc27e55790d +Block 0000 [ 58]: 587a90b47c57f0ee +Block 0000 [ 59]: c114a05eba21ff32 +Block 0000 [ 60]: 7fdceebe6889d888 +Block 0000 [ 61]: 1cbcf477efde21b7 +Block 0000 [ 62]: 4d9c10146cc32cc1 +Block 0000 [ 63]: 6fd032cd8f4bad32 +Block 0000 [ 64]: 05d46657a397048c +Block 0000 [ 65]: 5b4d561105d0db07 +Block 0000 [ 66]: c97ac2acc721fc88 +Block 0000 [ 67]: 93320ace2a54681d +Block 0000 [ 68]: 43dae71f04080ccf +Block 0000 [ 69]: 39f3a8dcbfa87912 +Block 0000 [ 70]: 27425b8b6f328d71 +Block 0000 [ 71]: 514b4457fe7aba28 +Block 0000 [ 72]: 258a430d30f0bc9f +Block 0000 [ 73]: 8d02b571f1c44624 +Block 0000 [ 74]: 296d7de559b099b0 +Block 0000 [ 75]: dbf8f772a054c3c1 +Block 0000 [ 76]: 19ec7cacf3967d0b +Block 0000 [ 77]: a40ba6bb7cbde791 +Block 0000 [ 78]: 43e99ec3f241aab7 +Block 0000 [ 79]: 12201cfde1128feb +Block 0000 [ 80]: 08b7689bb28fbeb7 +Block 0000 [ 81]: 2e96cc1546add647 +Block 0000 [ 82]: 65f12262aec7f677 +Block 0000 [ 83]: 462f640439ce4d40 +Block 0000 [ 84]: f2bc0d2e1b36d570 +Block 0000 [ 85]: 768cc6c87b6301e0 +Block 0000 [ 86]: bc4723908e88ff53 +Block 0000 [ 87]: 7887e378709a8b42 +Block 0000 [ 88]: de34544f59b8c144 +Block 0000 [ 89]: 84f7bb9129ea343a +Block 0000 [ 90]: f375bae1f1471e11 +Block 0000 [ 91]: 05c203052706f0dc +Block 0000 [ 92]: 627c32574d945282 +Block 0000 [ 93]: 5ff520c44d1cca7e +Block 0000 [ 94]: 06488dc3ccb24791 +Block 0000 [ 95]: 380fd531ccc2bc8d +Block 0000 [ 96]: 44d564d042d8a8e1 +Block 0000 [ 97]: ed01c6baed1cfd77 +Block 0000 [ 98]: 09e03973e4c4e8d0 +Block 0000 [ 99]: 0e814a59b8165a88 +Block 0000 [100]: 3ecd0fbe0196bb77 +Block 0000 [101]: 7fc4b520e11e8e47 +Block 0000 [102]: b77b6f2a5d754c6a +Block 0000 [103]: cd7869cb41b4e93d +Block 0000 [104]: b33588ab98af17a7 +Block 0000 [105]: 4667595e8112205d +Block 0000 [106]: 7fb587f723c62728 +Block 0000 [107]: e1f5311b30106b58 +Block 0000 [108]: f289ca11b2e3df4f +Block 0000 [109]: d50eab9479264fcc +Block 0000 [110]: 320bd31fa0ae830e +Block 0000 [111]: 458d7359106a0631 +Block 0000 [112]: c579ebd5456d59ea +Block 0000 [113]: 7de55d003eaaa255 +Block 0000 [114]: 7177eaaf395d9c67 +Block 0000 [115]: 9714192984bce397 +Block 0000 [116]: 16facb8107b05308 +Block 0000 [117]: 21d794cd54c9b151 +Block 0000 [118]: c9f71fa973d25883 +Block 0000 [119]: fdf9f60a11255ce8 +Block 0000 [120]: ae921043f61ba204 +Block 0000 [121]: 5636e1c68a2db5a5 +Block 0000 [122]: 6359770f48a1970f +Block 0000 [123]: e5ccffd488d54ca1 +Block 0000 [124]: 89e89ce9a892a965 +Block 0000 [125]: 11a1d552040e9f67 +Block 0000 [126]: 921a0dd7aead4224 +Block 0000 [127]: 8b298b5c367f7b39 +Block 0001 [ 0]: f7180a33ba9d571c +Block 0001 [ 1]: a34284b17ff613ff +Block 0001 [ 2]: 88fb62505306e91b +Block 0001 [ 3]: 99182c1bbe35a905 +Block 0001 [ 4]: b22b57179b3b38cb +Block 0001 [ 5]: 7dd134b46391e700 +Block 0001 [ 6]: cfa78494d6edc163 +Block 0001 [ 7]: d6e11db6febc3b53 +Block 0001 [ 8]: 3a1182fff056748a +Block 0001 [ 9]: 4a546d640288712c +Block 0001 [ 10]: 2574029c58ef3efd +Block 0001 [ 11]: 34c73cddabec3e98 +Block 0001 [ 12]: ed1138549ca015b4 +Block 0001 [ 13]: af132ca0de9e5e4d +Block 0001 [ 14]: c3800df9c81a2654 +Block 0001 [ 15]: b07f5cac8decb77e +Block 0001 [ 16]: 3bf88cbd16fac9a5 +Block 0001 [ 17]: 01e8b1c2acde7da5 +Block 0001 [ 18]: 5cc42f01d1ca339b +Block 0001 [ 19]: e808119da64d5035 +Block 0001 [ 20]: 27f2dc395d740631 +Block 0001 [ 21]: 3435bb42bcf41e3f +Block 0001 [ 22]: efd51e8fd8f75262 +Block 0001 [ 23]: 0218cd8cb64d7666 +Block 0001 [ 24]: 8751a679668aaaa0 +Block 0001 [ 25]: df274353f81f7884 +Block 0001 [ 26]: a0b214e15caa0ad5 +Block 0001 [ 27]: b6fdbdee571b01b4 +Block 0001 [ 28]: 72246eb1622ec154 +Block 0001 [ 29]: 4c1c25982d6f2dab +Block 0001 [ 30]: 05b9f3e0ad168986 +Block 0001 [ 31]: 27bff0a68798a1d0 +Block 0001 [ 32]: 1f44db82c1c7e7fe +Block 0001 [ 33]: ffb3bdab65bc7d2c +Block 0001 [ 34]: 450d02c9a8dd071d +Block 0001 [ 35]: a88d77a0da1d2dd9 +Block 0001 [ 36]: 50c6a8c821450618 +Block 0001 [ 37]: 5fb848148850ad38 +Block 0001 [ 38]: a192eab246a0d110 +Block 0001 [ 39]: 22b17b7a5626f975 +Block 0001 [ 40]: fb31ad45afb66ba4 +Block 0001 [ 41]: a7ec0feb0c44495e +Block 0001 [ 42]: 3405f81d4bbf5aef +Block 0001 [ 43]: b00e2aae495a4bc4 +Block 0001 [ 44]: b15206a8c175cb1f +Block 0001 [ 45]: 8096bb72edfd1cfd +Block 0001 [ 46]: 2deb7c3265f94a3a +Block 0001 [ 47]: 3248bbee1e385785 +Block 0001 [ 48]: 96697465d6c51a2d +Block 0001 [ 49]: f46460debf517212 +Block 0001 [ 50]: 8194fc09854dd60b +Block 0001 [ 51]: 66a7a5738655b4d8 +Block 0001 [ 52]: 04148cf4680acf01 +Block 0001 [ 53]: 8fdee6c9070506cb +Block 0001 [ 54]: 456e54d5edc02b52 +Block 0001 [ 55]: d3c3e074fa5c58d6 +Block 0001 [ 56]: 9144d1c46832b26c +Block 0001 [ 57]: 765be92b893ee7a6 +Block 0001 [ 58]: d3639b2617c63271 +Block 0001 [ 59]: 34dbc7ed83967845 +Block 0001 [ 60]: 59f7b9d2e55f9ad8 +Block 0001 [ 61]: e861b20bbc3bc7cc +Block 0001 [ 62]: 69ef1a8b7352058f +Block 0001 [ 63]: 1c4557528f2ff680 +Block 0001 [ 64]: f1272b295306297c +Block 0001 [ 65]: be1b32fdcdac3f89 +Block 0001 [ 66]: bfff0baee51735ac +Block 0001 [ 67]: badb585f9cacf724 +Block 0001 [ 68]: ba38493300e4c942 +Block 0001 [ 69]: 430dff3571065a0a +Block 0001 [ 70]: af2a00e52bd7ec7e +Block 0001 [ 71]: 675229a78358e776 +Block 0001 [ 72]: a81efa39233ddd81 +Block 0001 [ 73]: 32f0b4679eb2dbdd +Block 0001 [ 74]: e1b46c89f5a2691e +Block 0001 [ 75]: a81885bd728f95fd +Block 0001 [ 76]: b1e8fc4fac462cf9 +Block 0001 [ 77]: be28523020ce0b37 +Block 0001 [ 78]: 2b9b38ffae3df39f +Block 0001 [ 79]: d2e3a40120592659 +Block 0001 [ 80]: 083ae5a798856693 +Block 0001 [ 81]: 14fefaad3bbe20b1 +Block 0001 [ 82]: 7ccac041eca182df +Block 0001 [ 83]: 8e876b4533ba59a1 +Block 0001 [ 84]: 5050743b0198dcc4 +Block 0001 [ 85]: 6425fc13b0a6cb97 +Block 0001 [ 86]: edde0a4351adcbe9 +Block 0001 [ 87]: 643dc67ddccebeb8 +Block 0001 [ 88]: 1d06ff28237de139 +Block 0001 [ 89]: 695b7cfdb1cc33e8 +Block 0001 [ 90]: e5d1775842a51de5 +Block 0001 [ 91]: dd8925515ad2950b +Block 0001 [ 92]: 389f14e2e2ab7033 +Block 0001 [ 93]: 41f3a503fb7a542f +Block 0001 [ 94]: 29f6e2d8120e935d +Block 0001 [ 95]: 5ecee71853759564 +Block 0001 [ 96]: 0d2c0e7325f39d1d +Block 0001 [ 97]: 79549a2458b19519 +Block 0001 [ 98]: 595af605c0a319ea +Block 0001 [ 99]: 3fdad667164a1aeb +Block 0001 [100]: c0664af6ef191a7c +Block 0001 [101]: a5ba28896955c8b8 +Block 0001 [102]: da00aa274bdb05ec +Block 0001 [103]: 3e15c6cbcb67b2be +Block 0001 [104]: 85f2be2974588e9d +Block 0001 [105]: d9f37bb0e736a36f +Block 0001 [106]: dce4bc3edd830140 +Block 0001 [107]: 6151537aaa93f696 +Block 0001 [108]: 42beb3252800334a +Block 0001 [109]: 3b58a554b8973b60 +Block 0001 [110]: 6ef0f8dda98652ef +Block 0001 [111]: 2fadd0a1930dd7c3 +Block 0001 [112]: 06b2ce7bc4b8b503 +Block 0001 [113]: 66e4e2c48bcbf641 +Block 0001 [114]: d24e0268ad250901 +Block 0001 [115]: 7d4595caf0fa8581 +Block 0001 [116]: 2be6d7e0c8869901 +Block 0001 [117]: f75aec50f13b97fe +Block 0001 [118]: 2e090b419d1d2ff3 +Block 0001 [119]: 99ef2bbc132c7155 +Block 0001 [120]: 5f9196f038304a92 +Block 0001 [121]: 7152b4c3f11df557 +Block 0001 [122]: 03df91b1ddc97e7f +Block 0001 [123]: bb0e53bdfc8fb73c +Block 0001 [124]: cba896c6ecc4bee5 +Block 0001 [125]: fecc10891efb9caf +Block 0001 [126]: ec052df7554e2e7b +Block 0001 [127]: 4924c3dc10d8fd85 +Block 0002 [ 0]: dd269d6d1fe274bd +Block 0002 [ 1]: eaf87fd713312aeb +Block 0002 [ 2]: 8d4ba63951096c16 +Block 0002 [ 3]: 426a1231958f05d5 +Block 0002 [ 4]: 3b8b0f1949550baa +Block 0002 [ 5]: 8f61aad93507eb55 +Block 0002 [ 6]: 677e1f8f34ce88f2 +Block 0002 [ 7]: c4b1c172380afc85 +Block 0002 [ 8]: 6e3aa0bfda9f3090 +Block 0002 [ 9]: 7cab00b1179c425b +Block 0002 [ 10]: f97da6d4297c917d +Block 0002 [ 11]: ac4a2bca1203dc84 +Block 0002 [ 12]: bb3163556d3ecc3e +Block 0002 [ 13]: 3458c59f278ef520 +Block 0002 [ 14]: 4549b4a48a89f736 +Block 0002 [ 15]: 9c3356014b48be9d +Block 0002 [ 16]: a92c3171216be701 +Block 0002 [ 17]: b7c00ce80fb29dae +Block 0002 [ 18]: da49b7a803cfd49b +Block 0002 [ 19]: d6565369d2052776 +Block 0002 [ 20]: 6cfe1feda4d9c1fd +Block 0002 [ 21]: 8c8913c30028cc74 +Block 0002 [ 22]: bb866e6957a36aef +Block 0002 [ 23]: 5cb63399402b4668 +Block 0002 [ 24]: 1b5456d4cb6636de +Block 0002 [ 25]: c8fa9edf08541cef +Block 0002 [ 26]: 58832e65eda9309d +Block 0002 [ 27]: 143fde9eaacfc468 +Block 0002 [ 28]: 1ea0be670283ac5e +Block 0002 [ 29]: db0aa713e7be541b +Block 0002 [ 30]: 4c5fa13cec7b9957 +Block 0002 [ 31]: e40be01efef834fc +Block 0002 [ 32]: ee247ad65634a5d3 +Block 0002 [ 33]: 3dbb2e31d2ccfa7d +Block 0002 [ 34]: 0a910887da788607 +Block 0002 [ 35]: 94afaa1f565ad409 +Block 0002 [ 36]: de8c385415b7c6e9 +Block 0002 [ 37]: 9d70874bf5eba118 +Block 0002 [ 38]: 6c07b9fa57d5bc8f +Block 0002 [ 39]: 86c2e0eb098d1eba +Block 0002 [ 40]: 2e9cad031109ec88 +Block 0002 [ 41]: 54e83cba6599e437 +Block 0002 [ 42]: 16f1cd22843661be +Block 0002 [ 43]: d628ed0e9ee3d343 +Block 0002 [ 44]: fa8d3b772d22f922 +Block 0002 [ 45]: e4ea1efae60bb099 +Block 0002 [ 46]: 3f8abd4f93844c49 +Block 0002 [ 47]: 72e39e393fc65f19 +Block 0002 [ 48]: 70b3c48abd5ebefe +Block 0002 [ 49]: a251c297f3c9f146 +Block 0002 [ 50]: b6e8da00c83218fb +Block 0002 [ 51]: 502a5e772bac9098 +Block 0002 [ 52]: c717742be58356a3 +Block 0002 [ 53]: afca5b096967d6ab +Block 0002 [ 54]: e97c55d4c7dad2a1 +Block 0002 [ 55]: 452751179df9ea88 +Block 0002 [ 56]: 0789c627ffdbb196 +Block 0002 [ 57]: afa3e13bc2d20692 +Block 0002 [ 58]: c4a9f186650522d8 +Block 0002 [ 59]: a639b0ac85816a68 +Block 0002 [ 60]: a7e813fdfcdb17e0 +Block 0002 [ 61]: 6b9072999b6c766b +Block 0002 [ 62]: c8723a14860af1bc +Block 0002 [ 63]: 175f7fcaf3e3efad +Block 0002 [ 64]: b5dff4ca01082962 +Block 0002 [ 65]: ebf7904697e3e152 +Block 0002 [ 66]: 238a9ceb07db6e94 +Block 0002 [ 67]: dc6c845e0fb7b398 +Block 0002 [ 68]: b5c6122ec3ad1ced +Block 0002 [ 69]: 18f1239a9c6258b6 +Block 0002 [ 70]: 889553b3e5186020 +Block 0002 [ 71]: e46d535f909cff62 +Block 0002 [ 72]: 782fc6a6da899195 +Block 0002 [ 73]: d66602106655e56f +Block 0002 [ 74]: 92b3cea5bda0d657 +Block 0002 [ 75]: ceeac95de2189f8b +Block 0002 [ 76]: cf7d9de3742c540a +Block 0002 [ 77]: 709e7e293a012642 +Block 0002 [ 78]: a07915b0f1ebe100 +Block 0002 [ 79]: b07e80cc2b5dd3e3 +Block 0002 [ 80]: 20ac6fdb448fa0b2 +Block 0002 [ 81]: 94b9942695cbcbb8 +Block 0002 [ 82]: 311f8aaad789bf73 +Block 0002 [ 83]: caf04e5284e0c654 +Block 0002 [ 84]: 9300c30779fe56e4 +Block 0002 [ 85]: f8522aa857490cb1 +Block 0002 [ 86]: 4541922c719d65b4 +Block 0002 [ 87]: a8fe52948c78bea0 +Block 0002 [ 88]: 05c64d5df890f39a +Block 0002 [ 89]: 616ed72012588251 +Block 0002 [ 90]: e0b43de5aaa660e6 +Block 0002 [ 91]: d3531c2cc462424d +Block 0002 [ 92]: 8925e663e8112ab0 +Block 0002 [ 93]: 6e0c51f4b5123b69 +Block 0002 [ 94]: b9a46e0bbaf718c6 +Block 0002 [ 95]: 354c84845c1ea679 +Block 0002 [ 96]: f938f8aeb1dac4aa +Block 0002 [ 97]: 9ce45e15a40dabc0 +Block 0002 [ 98]: 05a443a6d5c0070d +Block 0002 [ 99]: 58de4d3dd78a1f71 +Block 0002 [100]: 7f46561d7b1884b4 +Block 0002 [101]: 3afa62f2f1882385 +Block 0002 [102]: a8242521b2a2dd09 +Block 0002 [103]: e9dd6211f0edc6b1 +Block 0002 [104]: 3684ae9600a661ee +Block 0002 [105]: 3c493b527698fa4a +Block 0002 [106]: acdf8c0ae547bf39 +Block 0002 [107]: cced5db75028ec30 +Block 0002 [108]: e592a369b0df07a2 +Block 0002 [109]: 1447b2d76a0d8b57 +Block 0002 [110]: 8d47814289002e20 +Block 0002 [111]: 8a6cebabe4bfa78c +Block 0002 [112]: b8d5c24d475de52d +Block 0002 [113]: b43ad32ce94d37dc +Block 0002 [114]: 21eca5ff11480da7 +Block 0002 [115]: 13fd97e3efa96b0d +Block 0002 [116]: 8a12187717976abd +Block 0002 [117]: 1a2bc270ca0f2856 +Block 0002 [118]: b836d6475e15f2e2 +Block 0002 [119]: 04f88dfdfd8b2a72 +Block 0002 [120]: ff9c5c6d0d288ad7 +Block 0002 [121]: e177fc6eef6599d8 +Block 0002 [122]: 6b4cb722482ae069 +Block 0002 [123]: aa3b58c166564292 +Block 0002 [124]: 75284d7db7495afa +Block 0002 [125]: a2223c5243a84893 +Block 0002 [126]: e980aaf0fc08301c +Block 0002 [127]: 07e96a224564f561 +Block 0003 [ 0]: 4a5f33e4aa0f4b24 +Block 0003 [ 1]: 74b1599a751a0e40 +Block 0003 [ 2]: 7648bcbafa8fde0e +Block 0003 [ 3]: 472fbc3e7f818be3 +Block 0003 [ 4]: 56a81d1eb0f4e388 +Block 0003 [ 5]: 822b3f5e6b6b1730 +Block 0003 [ 6]: ba45580cb101f4cc +Block 0003 [ 7]: 290754d62e6cce7a +Block 0003 [ 8]: 948f647900b662a2 +Block 0003 [ 9]: 57cfc6df71cf71a0 +Block 0003 [ 10]: 1722ac5aa4429df7 +Block 0003 [ 11]: 2bd56131730893d5 +Block 0003 [ 12]: 3b0fac05fe49310f +Block 0003 [ 13]: 59b94558676c1875 +Block 0003 [ 14]: 712fbccf992c1cfd +Block 0003 [ 15]: ab4c1e67173c95b7 +Block 0003 [ 16]: ca78ac3f3ec05fe1 +Block 0003 [ 17]: 4329991ad1d32531 +Block 0003 [ 18]: 67a577f45b95df88 +Block 0003 [ 19]: 2620b3d3889afff5 +Block 0003 [ 20]: b62732e9b207855c +Block 0003 [ 21]: ec4bac9eff014e78 +Block 0003 [ 22]: d936c2876fc1d56f +Block 0003 [ 23]: 41b37f7919dafd36 +Block 0003 [ 24]: 34f5bfc510b6f1bd +Block 0003 [ 25]: 700780640ab9aa78 +Block 0003 [ 26]: d16e7c95b49d7362 +Block 0003 [ 27]: 6544429cd2615175 +Block 0003 [ 28]: dabf343588eaf771 +Block 0003 [ 29]: d72449a5b3ab5873 +Block 0003 [ 30]: d9b9ca7d55747d23 +Block 0003 [ 31]: 2ece4be1cf5a2e99 +Block 0003 [ 32]: c6cdbc8cd725a922 +Block 0003 [ 33]: b139079c53fcbfd0 +Block 0003 [ 34]: 1e88db198f64fbd3 +Block 0003 [ 35]: 125b55f14ba51789 +Block 0003 [ 36]: 6f96b80b90a7fa45 +Block 0003 [ 37]: 406198e24a0ba096 +Block 0003 [ 38]: a29105896050b5e0 +Block 0003 [ 39]: 945d9788677d3391 +Block 0003 [ 40]: 802e7d305cd63255 +Block 0003 [ 41]: daacbbd0c7393898 +Block 0003 [ 42]: 2610a8d13ebdbe60 +Block 0003 [ 43]: d5953fef56fcf812 +Block 0003 [ 44]: f711a340a8c0c1f2 +Block 0003 [ 45]: d9c066e38168c679 +Block 0003 [ 46]: 6517a2cf0f0ea78c +Block 0003 [ 47]: 48985cd46ec3b306 +Block 0003 [ 48]: 6dc9a39170160a16 +Block 0003 [ 49]: f647600f302a0941 +Block 0003 [ 50]: 04102af1501b521b +Block 0003 [ 51]: 28c50bb275ef128c +Block 0003 [ 52]: c3e7d482090ce9e2 +Block 0003 [ 53]: b6879bee4977d1cf +Block 0003 [ 54]: 8b9d6ef567071bee +Block 0003 [ 55]: 2b02981d3c7fce71 +Block 0003 [ 56]: 1ada3aea276be7af +Block 0003 [ 57]: dd145aeadac33204 +Block 0003 [ 58]: ab18e04356a208a0 +Block 0003 [ 59]: d6e184c97d4b3864 +Block 0003 [ 60]: 3a7507d44c2d6917 +Block 0003 [ 61]: 64bd5b00012136ce +Block 0003 [ 62]: ed77dbf556e054a6 +Block 0003 [ 63]: dca248d800bc89ba +Block 0003 [ 64]: 8f74a5e29933e192 +Block 0003 [ 65]: 59b0460e3583e5ab +Block 0003 [ 66]: ed815fb3133ec6c7 +Block 0003 [ 67]: 151bdbadc9630fc2 +Block 0003 [ 68]: 6096f9a38b0bfdc6 +Block 0003 [ 69]: eaf65100a3cf5c50 +Block 0003 [ 70]: a9f4151b1b900586 +Block 0003 [ 71]: a695457135b20cd3 +Block 0003 [ 72]: ef6c6aac3a3a5497 +Block 0003 [ 73]: e0bb4329cc078888 +Block 0003 [ 74]: 1891f398b5d96011 +Block 0003 [ 75]: fa649c2bca16084d +Block 0003 [ 76]: 1c67e25f5fc82933 +Block 0003 [ 77]: 40b9806b0dee3332 +Block 0003 [ 78]: d91d9eab04d8e05b +Block 0003 [ 79]: 4bfca65c71cae454 +Block 0003 [ 80]: b276a2157bab9cbb +Block 0003 [ 81]: b87f21190c7825f6 +Block 0003 [ 82]: 5d1c99da2395a803 +Block 0003 [ 83]: e456839908106a2e +Block 0003 [ 84]: 42a7a74f484e7b88 +Block 0003 [ 85]: 6547ab46ab3f8e5b +Block 0003 [ 86]: 8e987511f85ca889 +Block 0003 [ 87]: 695238f363bf6cd2 +Block 0003 [ 88]: c6dcf17f6cb7bbc3 +Block 0003 [ 89]: c9f8509c8e84637a +Block 0003 [ 90]: eb517ec83c056f8a +Block 0003 [ 91]: 15b9cdb7f1dfdcae +Block 0003 [ 92]: 2e1194e754a4a2be +Block 0003 [ 93]: 3f6a3a58140e0f45 +Block 0003 [ 94]: 10b1cc31af190c0a +Block 0003 [ 95]: cf73be0f8afd8412 +Block 0003 [ 96]: 9766ec755228c4b2 +Block 0003 [ 97]: 637c3c5b06ca31f6 +Block 0003 [ 98]: 905da5bd011ddc3e +Block 0003 [ 99]: 410f3899cce9eaa5 +Block 0003 [100]: 59150e9b04b4a69d +Block 0003 [101]: bf512fb2757b16e2 +Block 0003 [102]: 94b12f119da458aa +Block 0003 [103]: a1a44cd6b831666d +Block 0003 [104]: a830ff1cee8f2557 +Block 0003 [105]: 2e881fd489a3f707 +Block 0003 [106]: a5868b29b028b67e +Block 0003 [107]: b0d8af6c48ce2cb6 +Block 0003 [108]: d85eecd25d77c1ad +Block 0003 [109]: cbc4a44882e12480 +Block 0003 [110]: 544dbc39292f2f33 +Block 0003 [111]: 8001372dd8c0854d +Block 0003 [112]: cd8de45f5e68497f +Block 0003 [113]: 42800cfa8e9de3b0 +Block 0003 [114]: 4b8db48b1bafa9c5 +Block 0003 [115]: 59c5db08b1255705 +Block 0003 [116]: a7f2bde359a2f516 +Block 0003 [117]: ef96aa9ed9da4791 +Block 0003 [118]: 599f81ad309e3794 +Block 0003 [119]: dbad21c8881f076f +Block 0003 [120]: 31f4ea7cad26f00b +Block 0003 [121]: 33c751b29e8ba961 +Block 0003 [122]: 120e5ac357fde45c +Block 0003 [123]: 5889c87f995ef82e +Block 0003 [124]: d06930cc570bb484 +Block 0003 [125]: 1314f624551afa5d +Block 0003 [126]: 49bccae63ff3135a +Block 0003 [127]: 68aeb82ef612c90b +Block 0004 [ 0]: 75cf7f435057da05 +Block 0004 [ 1]: 5fa9a015edecc3b1 +Block 0004 [ 2]: b3325174a5d45f4b +Block 0004 [ 3]: ac045dd7aa070547 +Block 0004 [ 4]: 760a3bde801efd61 +Block 0004 [ 5]: 29ba53ce7573d56c +Block 0004 [ 6]: 24d2101f7bf4f639 +Block 0004 [ 7]: 83f3556e5e8eb43f +Block 0004 [ 8]: 3cc66877e8d5016a +Block 0004 [ 9]: eb1c35540d8e9906 +Block 0004 [ 10]: f00b55c5c1e06e26 +Block 0004 [ 11]: d6a5165b6c1885a3 +Block 0004 [ 12]: d2811b93f9ab834f +Block 0004 [ 13]: 9d0557258f61edb2 +Block 0004 [ 14]: 07f8255621fc9618 +Block 0004 [ 15]: ae4b586c014f9ec6 +Block 0004 [ 16]: ec3836014f77e3c2 +Block 0004 [ 17]: b9911ef80161aa64 +Block 0004 [ 18]: 9ca62c3dcbc62020 +Block 0004 [ 19]: 3ffb28d86e7ec0e0 +Block 0004 [ 20]: 175679fa7fea816f +Block 0004 [ 21]: 30a6b89d44c8edbb +Block 0004 [ 22]: 48819b0e7f2bcd59 +Block 0004 [ 23]: 525858f7772e2bdb +Block 0004 [ 24]: ef5901d7b18b36a4 +Block 0004 [ 25]: 63bd442f2b3d6340 +Block 0004 [ 26]: 7a6f3878cbb89d56 +Block 0004 [ 27]: ad89aa9f7bf232cc +Block 0004 [ 28]: eeb77b64dcf9a009 +Block 0004 [ 29]: bc7e56339fced56f +Block 0004 [ 30]: 492fe116aefe8020 +Block 0004 [ 31]: 40ef14c0c916f44a +Block 0004 [ 32]: 27c6316e378a82a7 +Block 0004 [ 33]: ce5c0b7e763703a9 +Block 0004 [ 34]: 92c81bd10b1e008d +Block 0004 [ 35]: f6960dd9b508a3ad +Block 0004 [ 36]: 7401e08c33c802b5 +Block 0004 [ 37]: 018100c9dc56b87f +Block 0004 [ 38]: 150a5f6f10b10f8b +Block 0004 [ 39]: 1c284e29c18d225b +Block 0004 [ 40]: a27e542d5db0c667 +Block 0004 [ 41]: ee90318a26046e6c +Block 0004 [ 42]: d765ead85a540399 +Block 0004 [ 43]: 56533db96e0e1eb8 +Block 0004 [ 44]: 58ed5ee5629b9090 +Block 0004 [ 45]: 42e8ab0e460b8d17 +Block 0004 [ 46]: 11213401090ad8bd +Block 0004 [ 47]: bfc4823efc51914b +Block 0004 [ 48]: 134d198b80ce5571 +Block 0004 [ 49]: 6787fd9123ad4f2a +Block 0004 [ 50]: 42d6db3fbbab62cf +Block 0004 [ 51]: 56d6ac42819c8c1c +Block 0004 [ 52]: aea2608b849e88df +Block 0004 [ 53]: 984d22e7422a30db +Block 0004 [ 54]: 52efb62155fb0da7 +Block 0004 [ 55]: 370039ea938625bd +Block 0004 [ 56]: bd24fc01e0675a4b +Block 0004 [ 57]: 42404e268d028fe7 +Block 0004 [ 58]: 67f160abebebfa1d +Block 0004 [ 59]: 94a7b3eee4fb9f4e +Block 0004 [ 60]: f850f2a4d4db2b49 +Block 0004 [ 61]: 22a358c6251e3899 +Block 0004 [ 62]: 96eecea0930a4af7 +Block 0004 [ 63]: d75bce7e1bcaca47 +Block 0004 [ 64]: b80fedcc87eadb1b +Block 0004 [ 65]: 54b96798da68bd16 +Block 0004 [ 66]: b05b9a6dd3622c50 +Block 0004 [ 67]: e58fd5a7cc70ad72 +Block 0004 [ 68]: 1939f6f737bb007a +Block 0004 [ 69]: 08b8ed3e75fd711d +Block 0004 [ 70]: b6bfae0c877fe824 +Block 0004 [ 71]: d9d9e942c5dac552 +Block 0004 [ 72]: 542d87997ff6ab9c +Block 0004 [ 73]: 7f538deeb9e80b2d +Block 0004 [ 74]: 0a937577adc459e3 +Block 0004 [ 75]: 000509503fd7cf32 +Block 0004 [ 76]: f3a1eed284977fde +Block 0004 [ 77]: a8c91bac6a2c33a4 +Block 0004 [ 78]: 5932cd606b8c8e3c +Block 0004 [ 79]: cbd972f41417be96 +Block 0004 [ 80]: e0a5c3151fa6a03c +Block 0004 [ 81]: 10f4fb5b0458fe8a +Block 0004 [ 82]: 61023811aa937552 +Block 0004 [ 83]: d9fee5af6772fec0 +Block 0004 [ 84]: 40de55b55e4fcd16 +Block 0004 [ 85]: 6602ad68ac923126 +Block 0004 [ 86]: 8dd7e22e25f8fade +Block 0004 [ 87]: bdb66972663f2300 +Block 0004 [ 88]: 239ef85d83b8be0c +Block 0004 [ 89]: ae1d7173584d48d8 +Block 0004 [ 90]: 7b8b13ce97966729 +Block 0004 [ 91]: 44e87ba0b1f03d38 +Block 0004 [ 92]: b301ef27465f07ce +Block 0004 [ 93]: d67f6c2b925fc93a +Block 0004 [ 94]: 242668515882aa48 +Block 0004 [ 95]: 22c97753b467a139 +Block 0004 [ 96]: 7997dffb6ad65417 +Block 0004 [ 97]: ea18a9f6c2ed6336 +Block 0004 [ 98]: a73fff3e769afbd8 +Block 0004 [ 99]: e72f037a4d012e3b +Block 0004 [100]: dca1070c025d75a2 +Block 0004 [101]: d7fbf671f67dabb0 +Block 0004 [102]: 8240cb9987def406 +Block 0004 [103]: b5b655582720e251 +Block 0004 [104]: 95f052307724a402 +Block 0004 [105]: 898f694ec2f5d350 +Block 0004 [106]: 13d5949336179f40 +Block 0004 [107]: ab68ce11e05463b3 +Block 0004 [108]: 2a2a87ef1105b426 +Block 0004 [109]: a4a08a1950eb41f3 +Block 0004 [110]: 8d71e5193558fcbd +Block 0004 [111]: 75cbf21dfd1e84a0 +Block 0004 [112]: ba73cfd523a4d584 +Block 0004 [113]: d1468e7bff3d9dcb +Block 0004 [114]: f5b94e5888e3d071 +Block 0004 [115]: b5518abe5e84b654 +Block 0004 [116]: 826fda2d333407cf +Block 0004 [117]: 782db37d070a46b3 +Block 0004 [118]: e44c94bb1a87918e +Block 0004 [119]: ff802d7ff84fd6ac +Block 0004 [120]: ef0b4f377b6ffb0d +Block 0004 [121]: 5f7b900b8e883994 +Block 0004 [122]: d4a14d45b09f8a82 +Block 0004 [123]: 0285e5ddea5b8895 +Block 0004 [124]: 654d6b7867a3338e +Block 0004 [125]: 2df4c15c765b0038 +Block 0004 [126]: eda9ab30d67e4d72 +Block 0004 [127]: 828ee8d236f3dd62 +Block 0005 [ 0]: ce0d36af5fbd6f68 +Block 0005 [ 1]: d77f31b3a4e7f26a +Block 0005 [ 2]: bc8f82dc032a61b1 +Block 0005 [ 3]: 185c441b32babe3a +Block 0005 [ 4]: 1b0a2f90bb29c71c +Block 0005 [ 5]: 1ba919a1a30c9f76 +Block 0005 [ 6]: 2ab39ce0fe493b79 +Block 0005 [ 7]: aee4dc7120a2eecc +Block 0005 [ 8]: 0aa0166037779c01 +Block 0005 [ 9]: 5a242262af9161c4 +Block 0005 [ 10]: 3842cee480356cc8 +Block 0005 [ 11]: ace5c18c115a0327 +Block 0005 [ 12]: 1b242b83c275eb74 +Block 0005 [ 13]: eca18f8e399b2a1b +Block 0005 [ 14]: 9b9767106ea36294 +Block 0005 [ 15]: affd307d6c599270 +Block 0005 [ 16]: ab908e05a95ea728 +Block 0005 [ 17]: 020dcb8c9cad6b76 +Block 0005 [ 18]: 3f29b44c94eeb378 +Block 0005 [ 19]: c74e4becadf080e1 +Block 0005 [ 20]: 3d8a0c09cd8f4063 +Block 0005 [ 21]: 098a3627cc110c01 +Block 0005 [ 22]: 09e91371c95fa227 +Block 0005 [ 23]: d432d7e00528de20 +Block 0005 [ 24]: 4e1b531b205d00e5 +Block 0005 [ 25]: da647659ea08a347 +Block 0005 [ 26]: 75b817075757f562 +Block 0005 [ 27]: 14b2f6fd9ac456ed +Block 0005 [ 28]: e6e6582ad4b42a53 +Block 0005 [ 29]: fa73557a5e1f5a62 +Block 0005 [ 30]: a0ce5eac87b98730 +Block 0005 [ 31]: 5a8ebbf9c6c089b2 +Block 0005 [ 32]: db1b26c427ac7c7e +Block 0005 [ 33]: d9975deef1b77f4b +Block 0005 [ 34]: 0d346a2c877d9431 +Block 0005 [ 35]: d7fdc6e8f9f3b134 +Block 0005 [ 36]: 9430657f2d4551b9 +Block 0005 [ 37]: 7007133cb4cdd3e5 +Block 0005 [ 38]: 707fb7ed2ae55c59 +Block 0005 [ 39]: 93294988cc295c48 +Block 0005 [ 40]: e9bf4db5fbc1cea2 +Block 0005 [ 41]: 1ecb55c4f21a53ea +Block 0005 [ 42]: 9a4a75f979e2dd00 +Block 0005 [ 43]: 2a8e365046889bdc +Block 0005 [ 44]: 0fcfb36e8eb4ab8e +Block 0005 [ 45]: db5d5172030eee7b +Block 0005 [ 46]: ce170097bdb89426 +Block 0005 [ 47]: 56b169d594b09c15 +Block 0005 [ 48]: 225f10a91cdb02c6 +Block 0005 [ 49]: c39861e986249fcf +Block 0005 [ 50]: 7ae7c8c9932bac9b +Block 0005 [ 51]: de703a7cc7ef319b +Block 0005 [ 52]: 03874a532f07feed +Block 0005 [ 53]: a0c2e485d54df77c +Block 0005 [ 54]: b6fc72e0b5716a87 +Block 0005 [ 55]: 0cd89797a6753d97 +Block 0005 [ 56]: 475e735510d86da4 +Block 0005 [ 57]: 39a48e77b0b648d2 +Block 0005 [ 58]: 1bae8bad0cdbc64d +Block 0005 [ 59]: 060b290ffba35f12 +Block 0005 [ 60]: f586c88e2346baaa +Block 0005 [ 61]: 5f689663126ba25f +Block 0005 [ 62]: efe488f8ad30f968 +Block 0005 [ 63]: 653a3374e8cdb567 +Block 0005 [ 64]: 2412dd4b6fcf38fe +Block 0005 [ 65]: 43fdc2554c479aa3 +Block 0005 [ 66]: 4e4ccf4932b4e036 +Block 0005 [ 67]: b91582ee3161d432 +Block 0005 [ 68]: fcd95071b5e8fe01 +Block 0005 [ 69]: cd7523a9dc26c4c7 +Block 0005 [ 70]: 58bf47eadbe043b1 +Block 0005 [ 71]: c493a84069e6d701 +Block 0005 [ 72]: 1310593696022ce3 +Block 0005 [ 73]: a2d3749808a27627 +Block 0005 [ 74]: 4aa81c8265e45a75 +Block 0005 [ 75]: 1d9f43b9c5f2fdd4 +Block 0005 [ 76]: b2d53b7ba81b8c22 +Block 0005 [ 77]: ec6dec5fa3e97412 +Block 0005 [ 78]: ff11b2aa790499a6 +Block 0005 [ 79]: a5d7d7b3d0441fd2 +Block 0005 [ 80]: 92edbafa959a6550 +Block 0005 [ 81]: eb4e74ea7830d355 +Block 0005 [ 82]: 10b0f97c699177ad +Block 0005 [ 83]: 6e774e8e3b84c655 +Block 0005 [ 84]: 884612bf751ae947 +Block 0005 [ 85]: d8844041305209e2 +Block 0005 [ 86]: 4f5519c0b806f42c +Block 0005 [ 87]: ef4f16ef4caca11a +Block 0005 [ 88]: ce1d2390a9426430 +Block 0005 [ 89]: 4a282050ec3e0201 +Block 0005 [ 90]: ffd19c1157afa0c6 +Block 0005 [ 91]: 8fe0b8c890c386fe +Block 0005 [ 92]: 96e12bf8b1f76726 +Block 0005 [ 93]: 7fdd3df6053fb344 +Block 0005 [ 94]: 54abc965a92ee4ac +Block 0005 [ 95]: f02f6ea5f10b439a +Block 0005 [ 96]: 88b14772e5215a3f +Block 0005 [ 97]: 0c9e496f79c5e17a +Block 0005 [ 98]: bc99c4bc45caf42d +Block 0005 [ 99]: 1a7705997987c8a8 +Block 0005 [100]: 474ef0af0b85dfc8 +Block 0005 [101]: 69440fdaeed68cfa +Block 0005 [102]: a119edce664da081 +Block 0005 [103]: 942460fce9bc6f67 +Block 0005 [104]: 56edd7c43e735395 +Block 0005 [105]: e556ef2efa442d4f +Block 0005 [106]: 0ce0161e7944bb2a +Block 0005 [107]: 4a71159f4725f2a2 +Block 0005 [108]: 943a5a97403b8b7e +Block 0005 [109]: e9934b98a50821b1 +Block 0005 [110]: f6f93c625e714a0f +Block 0005 [111]: 0358af71f5f3d707 +Block 0005 [112]: 6513df4363dcd708 +Block 0005 [113]: 45cf7fb3ab28f915 +Block 0005 [114]: f0ecc3fabcbd07e3 +Block 0005 [115]: cf4de4bdad049eaf +Block 0005 [116]: 35594a058df4b18e +Block 0005 [117]: 2b25c1cd2a176af2 +Block 0005 [118]: 45a71cfa08b35c00 +Block 0005 [119]: 6ccb7f53cca788c7 +Block 0005 [120]: 25cb96798577f4dd +Block 0005 [121]: 913c54b058ab1709 +Block 0005 [122]: 2e324b5d5b7df67a +Block 0005 [123]: 6133fac505d62790 +Block 0005 [124]: 1fba4d2401f9870f +Block 0005 [125]: 002139471981c5f4 +Block 0005 [126]: c352642eea37f541 +Block 0005 [127]: dfe6bd2e638fa315 +Block 0006 [ 0]: afc3cb5d24d78ee8 +Block 0006 [ 1]: 659554bb4ec96f7b +Block 0006 [ 2]: a5d0225b10a29e3b +Block 0006 [ 3]: 7c637d0f2afb6e27 +Block 0006 [ 4]: 588aea062939b944 +Block 0006 [ 5]: 38c8afd4744672bc +Block 0006 [ 6]: dab595d8bb4cdffb +Block 0006 [ 7]: bbbef393ca71f32f +Block 0006 [ 8]: f5d45f05109d63d7 +Block 0006 [ 9]: 7a5c3d262c526c0b +Block 0006 [ 10]: da8bafd35e5069b6 +Block 0006 [ 11]: 918297d17ee797fb +Block 0006 [ 12]: 39320d32cf8d4ec6 +Block 0006 [ 13]: 1b70f9daf8e8f854 +Block 0006 [ 14]: 0bd5ef35f6de0a17 +Block 0006 [ 15]: e3723be9854d2946 +Block 0006 [ 16]: dc1939a2b8ddf140 +Block 0006 [ 17]: 08decf3387f67396 +Block 0006 [ 18]: c9627e4527095c6a +Block 0006 [ 19]: b7bea9f784c9c990 +Block 0006 [ 20]: 41e7f8e6b01ba679 +Block 0006 [ 21]: b0e5feb867d6deeb +Block 0006 [ 22]: d7df0a6deb6d443f +Block 0006 [ 23]: 61d7ac33ba0ae2a0 +Block 0006 [ 24]: 93ac174a57b2a517 +Block 0006 [ 25]: 1f3f6b66ae964272 +Block 0006 [ 26]: 2e305f0a1d1518b1 +Block 0006 [ 27]: 823ec4233a6317b1 +Block 0006 [ 28]: 2d43f0617675db3f +Block 0006 [ 29]: aa5cee5075e7aafb +Block 0006 [ 30]: 3451358e5b428d20 +Block 0006 [ 31]: 2e9c26ff065a27ec +Block 0006 [ 32]: 076e96e4f57cb9c4 +Block 0006 [ 33]: d24834ee48497064 +Block 0006 [ 34]: 7619dc9233d449b5 +Block 0006 [ 35]: 85b7ffae30372874 +Block 0006 [ 36]: 3f5c51e637cc3154 +Block 0006 [ 37]: b13ca9971d205e65 +Block 0006 [ 38]: 8947882913f53f2f +Block 0006 [ 39]: 97a68cde46209cae +Block 0006 [ 40]: a74855b63f7fbc78 +Block 0006 [ 41]: 44587edf73bcdf03 +Block 0006 [ 42]: d4135ee125b0d171 +Block 0006 [ 43]: 02306d041dd8846d +Block 0006 [ 44]: 60556ffadf0bea48 +Block 0006 [ 45]: 906d716ee211ead0 +Block 0006 [ 46]: 260d15cb9df34b8d +Block 0006 [ 47]: 13f2447cbbc686e6 +Block 0006 [ 48]: d7b0d80bd9444cee +Block 0006 [ 49]: fe37f87b31ed9190 +Block 0006 [ 50]: c8ffc3ccf7ea129e +Block 0006 [ 51]: 4299090758524b05 +Block 0006 [ 52]: 8b1e449c8aa11c60 +Block 0006 [ 53]: 01205e1c45ae3419 +Block 0006 [ 54]: cc59437963d7ae9b +Block 0006 [ 55]: 5ef5f570555fef01 +Block 0006 [ 56]: 299db72b400c78a5 +Block 0006 [ 57]: c895058e40b1fff2 +Block 0006 [ 58]: c4646d110490c1e9 +Block 0006 [ 59]: 391fc3b24f0db416 +Block 0006 [ 60]: d2f1e8d1b167a8bf +Block 0006 [ 61]: 591fb9b0fa5a1f7c +Block 0006 [ 62]: 313fab10223645fa +Block 0006 [ 63]: 7af43d95e6a1d595 +Block 0006 [ 64]: fe2ca7ee3dbc077b +Block 0006 [ 65]: 21387e44601ec9f9 +Block 0006 [ 66]: 1e00d189c00480cb +Block 0006 [ 67]: dba0f1b11cbe3c7f +Block 0006 [ 68]: 159f5c62e20ac794 +Block 0006 [ 69]: 843053d4f1876f95 +Block 0006 [ 70]: ac74ea56574f4461 +Block 0006 [ 71]: 0cbba62c01911fdf +Block 0006 [ 72]: 9ea785e198bb40d0 +Block 0006 [ 73]: e7e1b5ebde02baf7 +Block 0006 [ 74]: 9093879586663275 +Block 0006 [ 75]: 595241bc3ecebd8a +Block 0006 [ 76]: 3661789351fc4808 +Block 0006 [ 77]: 384847b49b26a1bb +Block 0006 [ 78]: cba3e34a38b91022 +Block 0006 [ 79]: 282e394edb58cc8c +Block 0006 [ 80]: 5ea53580559e126f +Block 0006 [ 81]: dbf2425682255163 +Block 0006 [ 82]: be2fd91a7dbd236c +Block 0006 [ 83]: 2787d4789ad70026 +Block 0006 [ 84]: 9985c2acadfd5b92 +Block 0006 [ 85]: af63c3ed508d8a17 +Block 0006 [ 86]: 900947553bec9649 +Block 0006 [ 87]: 41e3845ffc2ee3fb +Block 0006 [ 88]: f5f2d613417c6091 +Block 0006 [ 89]: 652a905d54d23008 +Block 0006 [ 90]: 696dcba75a422c33 +Block 0006 [ 91]: fbae4a9e644a972b +Block 0006 [ 92]: 56377880c80b7b98 +Block 0006 [ 93]: cdd849ac3456c35d +Block 0006 [ 94]: 06f0c0ea2066d717 +Block 0006 [ 95]: 664c6e9621fe116b +Block 0006 [ 96]: af7aea28925e0b1b +Block 0006 [ 97]: 26e2bfa2ecb4fa8b +Block 0006 [ 98]: 4f2762b4774c8ecf +Block 0006 [ 99]: 9d73f8f4bef65087 +Block 0006 [100]: 90a67f5dc176c8af +Block 0006 [101]: 826ab7e61a3d3bd3 +Block 0006 [102]: 31a4c60bcdbc3a49 +Block 0006 [103]: 58f8320c580548b5 +Block 0006 [104]: 5cd5fb246ce9e50d +Block 0006 [105]: 10e35b24687425ba +Block 0006 [106]: 8b063cb4f7c5f477 +Block 0006 [107]: ac102106f4f45fdb +Block 0006 [108]: a5ced9abd4084b5a +Block 0006 [109]: 14daf22aeed1864f +Block 0006 [110]: 2e6700b8254ed26a +Block 0006 [111]: 58f36abe5aaf3857 +Block 0006 [112]: 8e2fa216babf4555 +Block 0006 [113]: fbfc95b5816ac03f +Block 0006 [114]: c3cf9c67383fb870 +Block 0006 [115]: 099596b7b2291d51 +Block 0006 [116]: 41a2d68d62b26966 +Block 0006 [117]: 371d37c69b85757a +Block 0006 [118]: d6aa71abd42733c0 +Block 0006 [119]: 7695f0121903fa3d +Block 0006 [120]: f99b75a67ba99543 +Block 0006 [121]: febdd604f0037284 +Block 0006 [122]: 68f0e100a0f45435 +Block 0006 [123]: 540f71cbd6879829 +Block 0006 [124]: 3686fecabc98739c +Block 0006 [125]: 9d677f7cbc7f0d15 +Block 0006 [126]: f2d9ba6f91ea7db9 +Block 0006 [127]: 2e97a12d80d19209 +Block 0007 [ 0]: 313f8267b05460dc +Block 0007 [ 1]: a5944cec2d194084 +Block 0007 [ 2]: c46e817919e6c81d +Block 0007 [ 3]: 97473d5f834f53a6 +Block 0007 [ 4]: 2a0723d18d904edd +Block 0007 [ 5]: 00bd2b0cd3ab0226 +Block 0007 [ 6]: 21dfd141814191bb +Block 0007 [ 7]: 90e3842b2e821913 +Block 0007 [ 8]: 552fa8e34c66cd9e +Block 0007 [ 9]: 065ffdbe87182934 +Block 0007 [ 10]: 7da305f47d8112a8 +Block 0007 [ 11]: b93da7a36c47e48b +Block 0007 [ 12]: 423aeb9cd7fcdaeb +Block 0007 [ 13]: 9ff079b2504337ac +Block 0007 [ 14]: 8c300fd256c14597 +Block 0007 [ 15]: 3d2c1c9072e07d2c +Block 0007 [ 16]: 44be13fb2abf1073 +Block 0007 [ 17]: a29c794f375e3bb7 +Block 0007 [ 18]: 49968e31e443d5b9 +Block 0007 [ 19]: 639cc152b7609b35 +Block 0007 [ 20]: 14f8ecb663683555 +Block 0007 [ 21]: 416426eb03dff4f9 +Block 0007 [ 22]: cb0355359f15364e +Block 0007 [ 23]: 14ad1c0b2df92f7b +Block 0007 [ 24]: e9550350c3d61952 +Block 0007 [ 25]: 1f63f70ab40027d7 +Block 0007 [ 26]: 2d43fd0c34cb5b16 +Block 0007 [ 27]: 870999cf969d244a +Block 0007 [ 28]: d63f27cb25e40145 +Block 0007 [ 29]: 1a68af16c9be8706 +Block 0007 [ 30]: 409fb5a60bdf3f5d +Block 0007 [ 31]: 94b232386d591829 +Block 0007 [ 32]: 6319fce6d8a2e6b9 +Block 0007 [ 33]: 97a7b7d0cc7c702d +Block 0007 [ 34]: f0d42918d62b6b78 +Block 0007 [ 35]: 7f95fa2cb797d904 +Block 0007 [ 36]: 209d161fac787ffd +Block 0007 [ 37]: 02161ec72c97ff65 +Block 0007 [ 38]: 5e7491e14b169df3 +Block 0007 [ 39]: 563374e7d14a8f27 +Block 0007 [ 40]: 5cb922cc003e7056 +Block 0007 [ 41]: 83cb96ed64ec843b +Block 0007 [ 42]: ec234b3079e44cc8 +Block 0007 [ 43]: adcb5ba59126d544 +Block 0007 [ 44]: 17d147dd97d4e23e +Block 0007 [ 45]: 800991ca73676481 +Block 0007 [ 46]: ea217a52d19952de +Block 0007 [ 47]: 54e18406e4cc7a8b +Block 0007 [ 48]: 05a862e2e7c772e8 +Block 0007 [ 49]: ad5338c9b9f048b6 +Block 0007 [ 50]: 03e7e379bddb0b14 +Block 0007 [ 51]: 7664afc5d7182dab +Block 0007 [ 52]: 5889d9abb800ee03 +Block 0007 [ 53]: 270c52be464c969d +Block 0007 [ 54]: b03ea59a36910cf6 +Block 0007 [ 55]: 84490f20cf223065 +Block 0007 [ 56]: ee81c65507c78efc +Block 0007 [ 57]: e43da10193dc297e +Block 0007 [ 58]: dd30e335cf68d444 +Block 0007 [ 59]: 69914459c3a59be3 +Block 0007 [ 60]: d7266930c9431f0b +Block 0007 [ 61]: e5ec3e6ea6fa86d7 +Block 0007 [ 62]: 07514caf186ffcba +Block 0007 [ 63]: 7db93dd390ddd186 +Block 0007 [ 64]: a09363d83dee989a +Block 0007 [ 65]: 03df627b1d06fbb0 +Block 0007 [ 66]: 8789a381901384a8 +Block 0007 [ 67]: 08b1ae57f82eae0a +Block 0007 [ 68]: 17f8a362efd8fabb +Block 0007 [ 69]: 0688a79b5d0518ed +Block 0007 [ 70]: 563715746b7cb426 +Block 0007 [ 71]: ab4e46660c304515 +Block 0007 [ 72]: a5f8b5462c4f2a35 +Block 0007 [ 73]: 10e109ba109355ad +Block 0007 [ 74]: f6060f3af89fbe5a +Block 0007 [ 75]: f4d782b55ef091ec +Block 0007 [ 76]: 12be85979c4a838f +Block 0007 [ 77]: ae34eba057515205 +Block 0007 [ 78]: cc0f83c65aa0aa33 +Block 0007 [ 79]: 0633ad5fa544f189 +Block 0007 [ 80]: acced57d705d2199 +Block 0007 [ 81]: 7b35f04f46cac58b +Block 0007 [ 82]: 416d7d82a9bdda0b +Block 0007 [ 83]: c318e3316990307b +Block 0007 [ 84]: c6d55f8e8c00bb70 +Block 0007 [ 85]: 686a412a85992ee4 +Block 0007 [ 86]: 073a5260e237b1f4 +Block 0007 [ 87]: 798249a43be5ef1d +Block 0007 [ 88]: 42aa6e6192ae7cc2 +Block 0007 [ 89]: c360216deaacd3bf +Block 0007 [ 90]: 52c8ab5f0fe4d5c0 +Block 0007 [ 91]: 5a9ee91c1e177a41 +Block 0007 [ 92]: e0b07ff5ce08eb69 +Block 0007 [ 93]: a6d4dd4bcfaafb16 +Block 0007 [ 94]: 1163452af40450b3 +Block 0007 [ 95]: 4e704596475cb453 +Block 0007 [ 96]: ca0f153a0686e2d3 +Block 0007 [ 97]: 882c0b2a380c36ec +Block 0007 [ 98]: 7c29c813bcf409b3 +Block 0007 [ 99]: e4e2b640cfe0d86b +Block 0007 [100]: dbc2cfae7a3a4231 +Block 0007 [101]: fa731843d27f5080 +Block 0007 [102]: 816ad332d19cd0f3 +Block 0007 [103]: db09ce87e9ceb166 +Block 0007 [104]: d2b7b680d5032a8b +Block 0007 [105]: 3adb05a1ccf7ef1c +Block 0007 [106]: 25d8504aee3430bf +Block 0007 [107]: d659f93f8db423ac +Block 0007 [108]: d9aa66776bbdcfc4 +Block 0007 [109]: 8b14098e6561628e +Block 0007 [110]: 69fb649b5db962b1 +Block 0007 [111]: 7665d436fb3b4f77 +Block 0007 [112]: 782c9789e833c68d +Block 0007 [113]: 4817adea4076d69f +Block 0007 [114]: 73e8e6cc802bf100 +Block 0007 [115]: d40c51e9c159a5fc +Block 0007 [116]: 630a7a4dfd286539 +Block 0007 [117]: dc6f3f63c56c265e +Block 0007 [118]: 9a0085dca381888f +Block 0007 [119]: 97b4ff695cbaab3c +Block 0007 [120]: abf4698a130ff8b4 +Block 0007 [121]: 3e226eb60f065ea3 +Block 0007 [122]: faf78a890f83a873 +Block 0007 [123]: c6a292eb570af3c3 +Block 0007 [124]: 7b2d2fa8016553bf +Block 0007 [125]: ae6a78024fc32785 +Block 0007 [126]: 948ba97e8fd28478 +Block 0007 [127]: a7e6438070fcdf5c +Block 0008 [ 0]: 2e9cc9c3e6b135b3 +Block 0008 [ 1]: d20ed84956a6ee5b +Block 0008 [ 2]: 824a4f18130361bd +Block 0008 [ 3]: 2720ec65b42dc705 +Block 0008 [ 4]: 55cf668c6a6858dc +Block 0008 [ 5]: e4edaa3e7f4c0ae5 +Block 0008 [ 6]: b3690f0b517be35d +Block 0008 [ 7]: aab603dab5401cd5 +Block 0008 [ 8]: 9734fd526765de8e +Block 0008 [ 9]: f8a7c8e208c74505 +Block 0008 [ 10]: 3bff0939b8ba936f +Block 0008 [ 11]: 0497f8f783147616 +Block 0008 [ 12]: 35b88fca5c5e8d6f +Block 0008 [ 13]: e63ed3a90c4651d3 +Block 0008 [ 14]: b7c80fdad434b54a +Block 0008 [ 15]: 84036657d5cfbb7c +Block 0008 [ 16]: c5d725fc3f6b8c1e +Block 0008 [ 17]: 17a6efe7658421c6 +Block 0008 [ 18]: f9887ee4c64ade59 +Block 0008 [ 19]: 299efe5dc6bc3dc9 +Block 0008 [ 20]: 389b0a0b9022f882 +Block 0008 [ 21]: 35611ff88c03a5ae +Block 0008 [ 22]: e1a07d24aff18d97 +Block 0008 [ 23]: 4c0bb87a929863dd +Block 0008 [ 24]: 6bc6dbabe096f75f +Block 0008 [ 25]: 9530f345d9303e2e +Block 0008 [ 26]: 088d5ece04da7145 +Block 0008 [ 27]: e8d38ebb18126f0a +Block 0008 [ 28]: b8bd223ef1931cbe +Block 0008 [ 29]: 4978886f78fbea5c +Block 0008 [ 30]: 3bf1ef2947a7252a +Block 0008 [ 31]: 3d1020e7790b3852 +Block 0008 [ 32]: 862a689a33fd5bb7 +Block 0008 [ 33]: 528ecc556a8f8b8c +Block 0008 [ 34]: 92176be498db9417 +Block 0008 [ 35]: 5e8a2a7380544773 +Block 0008 [ 36]: 494309297e14ebc5 +Block 0008 [ 37]: a5713c39d411a1d5 +Block 0008 [ 38]: 7106f6b61968c8ef +Block 0008 [ 39]: 90ffdb92e45e4271 +Block 0008 [ 40]: 6835a84ca857d06c +Block 0008 [ 41]: 7d739c7fca38d272 +Block 0008 [ 42]: a992806a13fb22fc +Block 0008 [ 43]: cecfa6cb668369c9 +Block 0008 [ 44]: 65aa1b4a582bc615 +Block 0008 [ 45]: bbeb50f2709e1070 +Block 0008 [ 46]: a6201dff1dc19643 +Block 0008 [ 47]: bf451423a2dbf1ea +Block 0008 [ 48]: 8836e2fc20b1da97 +Block 0008 [ 49]: 5bcc7001abab5b2c +Block 0008 [ 50]: 6cbff3d65dfdf5b1 +Block 0008 [ 51]: d1dc33283811de18 +Block 0008 [ 52]: 7af1be34e2641ab4 +Block 0008 [ 53]: 3c1ba04e93be61b9 +Block 0008 [ 54]: d4273abf36466331 +Block 0008 [ 55]: 8b35892319de5443 +Block 0008 [ 56]: f9d3ebbdb63cc92f +Block 0008 [ 57]: 5b7e5ef5bddb3c4f +Block 0008 [ 58]: 5259a3dd695c7c6c +Block 0008 [ 59]: db7d68d97cd1b706 +Block 0008 [ 60]: 04fa49a377111938 +Block 0008 [ 61]: 0529a32ae4f9f7fb +Block 0008 [ 62]: b259b442507c105d +Block 0008 [ 63]: 4603efd5764f9460 +Block 0008 [ 64]: 8d25e825f8d56ede +Block 0008 [ 65]: 186e7e8e08895229 +Block 0008 [ 66]: 1d3d7c07ed3b419c +Block 0008 [ 67]: 326baad7ed02fd0d +Block 0008 [ 68]: d8dac3bb50bf67ff +Block 0008 [ 69]: f770b9cab9866625 +Block 0008 [ 70]: 47c3a771429039fb +Block 0008 [ 71]: aac9a678cc80f2c6 +Block 0008 [ 72]: b942f416e5bc48e5 +Block 0008 [ 73]: 2a2d0b0958417b30 +Block 0008 [ 74]: 842d6cf63b07316f +Block 0008 [ 75]: 854f397563c6bdbf +Block 0008 [ 76]: 5d44be1127880a5a +Block 0008 [ 77]: 1766a2b7ffea324c +Block 0008 [ 78]: 61c6bcf062aa12e1 +Block 0008 [ 79]: db9130986d8233fa +Block 0008 [ 80]: 3cae9e52f7517619 +Block 0008 [ 81]: 6bc06914ce32e1cd +Block 0008 [ 82]: 3fc450fdbe333575 +Block 0008 [ 83]: 27a458fd8b358a5f +Block 0008 [ 84]: 8a7f7426828352b8 +Block 0008 [ 85]: bb0c8daac96bc54a +Block 0008 [ 86]: e51721bf776f4385 +Block 0008 [ 87]: c27c103839a47828 +Block 0008 [ 88]: 615902453eae7e54 +Block 0008 [ 89]: 065769df53b50ae9 +Block 0008 [ 90]: e2cdb8c440cd666c +Block 0008 [ 91]: 0a9e983f8bb2c395 +Block 0008 [ 92]: a8ed136a220ffba2 +Block 0008 [ 93]: 4c2104b8a3106274 +Block 0008 [ 94]: f79cd4843458b671 +Block 0008 [ 95]: ca3ab237d1bcd885 +Block 0008 [ 96]: 9208ca5b017118f6 +Block 0008 [ 97]: 542d8219fe025cb5 +Block 0008 [ 98]: ea8b039748259027 +Block 0008 [ 99]: 3ae845cde600d61c +Block 0008 [100]: b97f83cf358075b3 +Block 0008 [101]: 43a916fe6ec08054 +Block 0008 [102]: 955ad4f7f4678783 +Block 0008 [103]: d0b88886cc986d6d +Block 0008 [104]: 7bb2acbb38bfe037 +Block 0008 [105]: eae9e9899b5ddd82 +Block 0008 [106]: cde20f402a22050d +Block 0008 [107]: d72b190fc5bfe98c +Block 0008 [108]: 3b735764df8431ac +Block 0008 [109]: 2ad92f81f927f307 +Block 0008 [110]: 4637052793914f43 +Block 0008 [111]: 7c36bb6fd25addfa +Block 0008 [112]: 826cfbda99be0b03 +Block 0008 [113]: ddf3ced5fc302d83 +Block 0008 [114]: fb8c8449e0910102 +Block 0008 [115]: 8463ff3f92a3292a +Block 0008 [116]: 05bf45d8d32c0aa3 +Block 0008 [117]: 1cf076a04b88d512 +Block 0008 [118]: 6e2d7b51e84ee979 +Block 0008 [119]: a302ddea68252da2 +Block 0008 [120]: 9abde3e462398515 +Block 0008 [121]: e64d3cc9f21b3bbe +Block 0008 [122]: 3dace2ec24cc0c2b +Block 0008 [123]: 88483a20ea38dd8f +Block 0008 [124]: 620ae53ee928d46b +Block 0008 [125]: c7fa0fd20b9ee233 +Block 0008 [126]: cf0b70565fa8d1c0 +Block 0008 [127]: dde107597004f663 +Block 0009 [ 0]: 209a347fd29977e2 +Block 0009 [ 1]: c061a9725908f6cf +Block 0009 [ 2]: 81353c3151dfb6d6 +Block 0009 [ 3]: 926ce448a5ce1128 +Block 0009 [ 4]: 72ef7d779de2768b +Block 0009 [ 5]: cc2e3e7abb982d1c +Block 0009 [ 6]: 6f7bcf77b7858e5c +Block 0009 [ 7]: 4c07d89badf8b0c6 +Block 0009 [ 8]: 0e2098ba415db491 +Block 0009 [ 9]: ba5aab87359547ec +Block 0009 [ 10]: 9f39ce7624c3fa13 +Block 0009 [ 11]: b94ed628f9a619e6 +Block 0009 [ 12]: a96ec7cad41eb137 +Block 0009 [ 13]: 4d7365b0dcac29a9 +Block 0009 [ 14]: 93db4a5f9510ea21 +Block 0009 [ 15]: c2182ccd6366da14 +Block 0009 [ 16]: df49f804b43e7999 +Block 0009 [ 17]: cabc390bd13b9bc8 +Block 0009 [ 18]: b186f52b3846ab6d +Block 0009 [ 19]: ded1bcd95e907934 +Block 0009 [ 20]: 38bf831c2af9e788 +Block 0009 [ 21]: 5346d0899e8a8fca +Block 0009 [ 22]: 16ee9287d6cddb15 +Block 0009 [ 23]: 3f7e53e659f5e0d2 +Block 0009 [ 24]: 4c44d3fac07ced70 +Block 0009 [ 25]: d2839ed10e988d59 +Block 0009 [ 26]: e2276469f6c2c7c5 +Block 0009 [ 27]: f757916ef5395c35 +Block 0009 [ 28]: 6586225cc5ef9ffd +Block 0009 [ 29]: cdee0721f56ae49f +Block 0009 [ 30]: 51cf5ef7a119b1df +Block 0009 [ 31]: 859e7e63b5a143d0 +Block 0009 [ 32]: ae99a2c00c9161b1 +Block 0009 [ 33]: fa3823d62a0374a5 +Block 0009 [ 34]: 3d3c5017570dbf86 +Block 0009 [ 35]: 92639ce301f1b81f +Block 0009 [ 36]: 5523d0e458c01d63 +Block 0009 [ 37]: cb8ddedc266abc88 +Block 0009 [ 38]: 1c7d9f9322dcccf2 +Block 0009 [ 39]: 1c03d8e6b11d883d +Block 0009 [ 40]: 32e030be8b96956b +Block 0009 [ 41]: c840202ff4c8471b +Block 0009 [ 42]: c6730e4209cb0592 +Block 0009 [ 43]: 987560f61edc458e +Block 0009 [ 44]: 54654778d2957045 +Block 0009 [ 45]: 34a83c65a88871e5 +Block 0009 [ 46]: a09e9bbb2df3eb9f +Block 0009 [ 47]: 74490e2824445378 +Block 0009 [ 48]: fe3e62b849649981 +Block 0009 [ 49]: 043556a6df5185b7 +Block 0009 [ 50]: b571d3e4d2e56472 +Block 0009 [ 51]: 43d7d84fbb688f5b +Block 0009 [ 52]: c0a7901239238809 +Block 0009 [ 53]: d6e84ae5d888446f +Block 0009 [ 54]: 15c3cce6a4cccb0c +Block 0009 [ 55]: 6373f9fca0709283 +Block 0009 [ 56]: 51b9bbba928409de +Block 0009 [ 57]: bd7804ec7b8b9b4f +Block 0009 [ 58]: 6e9d64dc2121f5da +Block 0009 [ 59]: f49cddfc3833f51c +Block 0009 [ 60]: a9ebbe0c83c98f3b +Block 0009 [ 61]: dc3efed4e44c0e24 +Block 0009 [ 62]: f16bf46a8082429e +Block 0009 [ 63]: 27b9b38f767ba4c8 +Block 0009 [ 64]: 03ee25cd3f3189d1 +Block 0009 [ 65]: 592af46a525096c8 +Block 0009 [ 66]: e0f410df25491dae +Block 0009 [ 67]: bd2be5e6fb441dc5 +Block 0009 [ 68]: abf8b268d7024d16 +Block 0009 [ 69]: 0fc232b72879a229 +Block 0009 [ 70]: 02ae0ba2bce5cdb1 +Block 0009 [ 71]: 295723bd5f13bf22 +Block 0009 [ 72]: 31c65623d3437798 +Block 0009 [ 73]: 790854810b9f981f +Block 0009 [ 74]: 46ea67f43d9d3b3a +Block 0009 [ 75]: f52a39d525541d8a +Block 0009 [ 76]: 99c295f0ee707df0 +Block 0009 [ 77]: 34fb0aa05c400015 +Block 0009 [ 78]: 97a7e3a1aa073e56 +Block 0009 [ 79]: ea0011e85f251e9a +Block 0009 [ 80]: 93866a3475fd84e9 +Block 0009 [ 81]: bb1b0f3e6c6b3fb0 +Block 0009 [ 82]: 6d29acab032d43f7 +Block 0009 [ 83]: 121cbf273badebae +Block 0009 [ 84]: 58ded818809f6630 +Block 0009 [ 85]: e578892283ff24f1 +Block 0009 [ 86]: 219235a5d502224c +Block 0009 [ 87]: a139fc5f39ac8d65 +Block 0009 [ 88]: 6ec265516ae92429 +Block 0009 [ 89]: b302315a209bae25 +Block 0009 [ 90]: 3f9d17f0357f3139 +Block 0009 [ 91]: 0466be553530b887 +Block 0009 [ 92]: ef804d6297e6b404 +Block 0009 [ 93]: 27049c1938ef9fd9 +Block 0009 [ 94]: f74f27e6a0f7169b +Block 0009 [ 95]: e97a5a3036228ec3 +Block 0009 [ 96]: c1bc91ae9ed2b008 +Block 0009 [ 97]: f00bf18399d36951 +Block 0009 [ 98]: 600cb47d4e4a55ad +Block 0009 [ 99]: 934299f5e7a3d825 +Block 0009 [100]: 4787e7d716a3d9b5 +Block 0009 [101]: e9bcaf5f2d451670 +Block 0009 [102]: ad5e13ee0b217a5a +Block 0009 [103]: dac4ae25e1c6cf3c +Block 0009 [104]: 18e1559471376622 +Block 0009 [105]: 234197f39be8711b +Block 0009 [106]: 0a2b9482ba98ca71 +Block 0009 [107]: b7eddfebd7b2ce53 +Block 0009 [108]: e60c8b75e72b1569 +Block 0009 [109]: ab8b6471bd07c0d9 +Block 0009 [110]: 4d29ef0b49b6b176 +Block 0009 [111]: 87e02204f0af0d6d +Block 0009 [112]: 6da9d35faa1a0990 +Block 0009 [113]: f9b5f5d5f03c1a49 +Block 0009 [114]: a81da4419bd23c36 +Block 0009 [115]: e270cfa27ae3703c +Block 0009 [116]: 6d0a394cab7bc4b5 +Block 0009 [117]: 34785b08faace8c3 +Block 0009 [118]: 20185431d252ad2e +Block 0009 [119]: 66d44ae9078a1741 +Block 0009 [120]: e3e6295ad1bca0d1 +Block 0009 [121]: 33b0dbaa494681d7 +Block 0009 [122]: 61f5dab90b66f2d9 +Block 0009 [123]: 43a6e3bed2cc71e7 +Block 0009 [124]: bf75bc3f9bb5bb02 +Block 0009 [125]: 0d2e74e50ff9f296 +Block 0009 [126]: 5973b5959b00ea90 +Block 0009 [127]: 52a775ae400e714b +Block 0010 [ 0]: 10b705da8395f04c +Block 0010 [ 1]: 3a64c95eb697fc3c +Block 0010 [ 2]: 7586175e549038e1 +Block 0010 [ 3]: 56de6895cef27b26 +Block 0010 [ 4]: e702d37714afa28d +Block 0010 [ 5]: 1629970faf4bfbd5 +Block 0010 [ 6]: 028d51b5e7ca4680 +Block 0010 [ 7]: f9a6b66093100143 +Block 0010 [ 8]: b15dd726704428dd +Block 0010 [ 9]: 4582611de10e16da +Block 0010 [ 10]: e040ed664fd0cd3a +Block 0010 [ 11]: 8bf64cbab6fcf4a0 +Block 0010 [ 12]: 837daa67d2904ba2 +Block 0010 [ 13]: 8045a33944a1fd35 +Block 0010 [ 14]: d4dbd734ec2aa4a6 +Block 0010 [ 15]: 362cbe03aab89d82 +Block 0010 [ 16]: 02d30b08962cde66 +Block 0010 [ 17]: 77602b3de395dd11 +Block 0010 [ 18]: 9d92a45283ff4ca3 +Block 0010 [ 19]: 1e49ca4b9d7df723 +Block 0010 [ 20]: 0c55389b0df259f4 +Block 0010 [ 21]: ffc74e25199d26ba +Block 0010 [ 22]: 646f73d902384812 +Block 0010 [ 23]: 1571d94c86994393 +Block 0010 [ 24]: a640762502fe113b +Block 0010 [ 25]: 6861536ff90a4f1d +Block 0010 [ 26]: 35d5c406d0c930a3 +Block 0010 [ 27]: a4da70145cd20828 +Block 0010 [ 28]: 8e4b4a16c16fc390 +Block 0010 [ 29]: 50d9c0355fa52b2b +Block 0010 [ 30]: 52ca5b52bddfc8ad +Block 0010 [ 31]: c5e896e214b9e11b +Block 0010 [ 32]: e117033bcd9625ef +Block 0010 [ 33]: 100e49c8268d8f2f +Block 0010 [ 34]: 2a958d58b325efdc +Block 0010 [ 35]: a2395a37949ff556 +Block 0010 [ 36]: 4c1e874bca55d04c +Block 0010 [ 37]: 5f1bc5262644b343 +Block 0010 [ 38]: ad11e453e038deaa +Block 0010 [ 39]: 287b94b109d7df97 +Block 0010 [ 40]: 0c424aca407f8984 +Block 0010 [ 41]: 62079d33ca943d72 +Block 0010 [ 42]: e4530fa28668e2d5 +Block 0010 [ 43]: e6daf6dd8a6be133 +Block 0010 [ 44]: a1a3dfd0125ede58 +Block 0010 [ 45]: 760feb30830ae154 +Block 0010 [ 46]: 077ef34a416f5886 +Block 0010 [ 47]: 31687239a635eae0 +Block 0010 [ 48]: 95fd0087afc7c838 +Block 0010 [ 49]: 87ca60d36dd7df36 +Block 0010 [ 50]: dffda96d886a96f4 +Block 0010 [ 51]: f8ad397459b0ad94 +Block 0010 [ 52]: 58097d9ddc18e114 +Block 0010 [ 53]: 0ef111b195052ba1 +Block 0010 [ 54]: 01f720c2f276a54a +Block 0010 [ 55]: 6e1f1243af57995a +Block 0010 [ 56]: 3eb65ece378c1197 +Block 0010 [ 57]: d6fff89c6d4f6bee +Block 0010 [ 58]: 1ee850f36749e874 +Block 0010 [ 59]: 44a84ef91de9cc29 +Block 0010 [ 60]: d4228cc0a1ded059 +Block 0010 [ 61]: 8265ec768f3c31cb +Block 0010 [ 62]: 52d0a6c81f7d7e25 +Block 0010 [ 63]: 60f8f34e0ee51912 +Block 0010 [ 64]: 7e296a5588063666 +Block 0010 [ 65]: d7c340360acfb706 +Block 0010 [ 66]: 5c38e604a7d84d65 +Block 0010 [ 67]: 9394c554e95ef046 +Block 0010 [ 68]: 2ebb479ae3059c4b +Block 0010 [ 69]: 079e88c1483363ca +Block 0010 [ 70]: 720ac22598be7958 +Block 0010 [ 71]: 794417526d2982b5 +Block 0010 [ 72]: 752252a5603ec066 +Block 0010 [ 73]: d62d4cc0b661537d +Block 0010 [ 74]: 8687304a5ce5183c +Block 0010 [ 75]: 8ca8c10b032e3fa8 +Block 0010 [ 76]: c29c11ff6853939c +Block 0010 [ 77]: cae1bae35ceaf6c5 +Block 0010 [ 78]: b2584a08cbf87502 +Block 0010 [ 79]: 1a07c00c94b6e96d +Block 0010 [ 80]: 5ba02dc60341bb67 +Block 0010 [ 81]: 5f3c3c068ff5925a +Block 0010 [ 82]: 310a1f867714e882 +Block 0010 [ 83]: e27e7e95a6030227 +Block 0010 [ 84]: 7eae41077b7cfa57 +Block 0010 [ 85]: e6f885645efb251c +Block 0010 [ 86]: 4afcdde9189673a5 +Block 0010 [ 87]: a8359776d73a509c +Block 0010 [ 88]: 53fbc97624693850 +Block 0010 [ 89]: c5cb54d8681267bd +Block 0010 [ 90]: 94a91156c3ad818c +Block 0010 [ 91]: 486788a97f9eed9c +Block 0010 [ 92]: f1e80bd47e1bead9 +Block 0010 [ 93]: 6c0c8789e7ae2b7f +Block 0010 [ 94]: 2e9fcba124e00bb7 +Block 0010 [ 95]: 14ab4120e959cbb0 +Block 0010 [ 96]: e886072019cdb34b +Block 0010 [ 97]: a5e7dd581c669d1e +Block 0010 [ 98]: c3020e7807e0b773 +Block 0010 [ 99]: d20e054b8604e5af +Block 0010 [100]: fbf072c54ee3a4bd +Block 0010 [101]: f32a5a150b1703e5 +Block 0010 [102]: 25c471f04a072cec +Block 0010 [103]: a59dedf5884094e5 +Block 0010 [104]: 6210d174ecf94984 +Block 0010 [105]: f0c39b9f4040914e +Block 0010 [106]: 210f2b657dd53eda +Block 0010 [107]: 8632ff56c33e7b87 +Block 0010 [108]: 7239c0bbdadfe813 +Block 0010 [109]: 32ec7541d19960d5 +Block 0010 [110]: d85ff9b490aeb9b1 +Block 0010 [111]: 2416348a4822a40a +Block 0010 [112]: e4baef241d563a56 +Block 0010 [113]: 7b378fbc2beb24ba +Block 0010 [114]: a7c65c31bb5bb666 +Block 0010 [115]: d46629a61124fc0b +Block 0010 [116]: d49c3abb0210183d +Block 0010 [117]: d1974949b75ccc07 +Block 0010 [118]: 19329244871efd55 +Block 0010 [119]: c45e9eb14a2eb1ec +Block 0010 [120]: e870bcf4d438375d +Block 0010 [121]: 0359d1c2cb62f251 +Block 0010 [122]: e12903a40147d90e +Block 0010 [123]: c549cd1a1f8a229d +Block 0010 [124]: 3a85f379d1c5f7fe +Block 0010 [125]: 11221154382972bc +Block 0010 [126]: e655c58b7b41b104 +Block 0010 [127]: 22846d513c8c4c61 +Block 0011 [ 0]: 087c4a60f7fdcc8a +Block 0011 [ 1]: a16751907a1c9062 +Block 0011 [ 2]: e5307c613784d75e +Block 0011 [ 3]: 642c9cc06f4e67d4 +Block 0011 [ 4]: c8da783b1213b284 +Block 0011 [ 5]: cc6fb6a6d80b3797 +Block 0011 [ 6]: 3f1398684def9ae4 +Block 0011 [ 7]: 24260a2da339bccf +Block 0011 [ 8]: 8dd645b474415c70 +Block 0011 [ 9]: acfa4ba58a001598 +Block 0011 [ 10]: 9c0b110f98c3afb6 +Block 0011 [ 11]: abbecf2c6893ec40 +Block 0011 [ 12]: 77c8c41012fc9a92 +Block 0011 [ 13]: 610f88076839c41c +Block 0011 [ 14]: 6f082b5261f7e38e +Block 0011 [ 15]: c75e62720817a4d4 +Block 0011 [ 16]: a49ab7174523b5b2 +Block 0011 [ 17]: 63393cc05061577d +Block 0011 [ 18]: ff624379436a6cb2 +Block 0011 [ 19]: a71b7407b4ec74b1 +Block 0011 [ 20]: 044a0eb1dc46b867 +Block 0011 [ 21]: 95ee8cab74458e8b +Block 0011 [ 22]: 1ae75464926aee1b +Block 0011 [ 23]: b0449f73ce98b3a4 +Block 0011 [ 24]: 925483abc8bd86f0 +Block 0011 [ 25]: cc0a60e8210b1eee +Block 0011 [ 26]: 21736abdade24267 +Block 0011 [ 27]: 39bed01022945311 +Block 0011 [ 28]: 273eb86173f1b0ba +Block 0011 [ 29]: 4e74e045d26408a6 +Block 0011 [ 30]: 9bd1d32674b4418b +Block 0011 [ 31]: 5f2db619452b3e6c +Block 0011 [ 32]: 2d2b1b7dc990bcab +Block 0011 [ 33]: 6975d2169d1e64a0 +Block 0011 [ 34]: ac08dec82fb69f97 +Block 0011 [ 35]: 8d86ab2cb64b5743 +Block 0011 [ 36]: 6e52666b53ebb4e1 +Block 0011 [ 37]: 05d9ed8353359686 +Block 0011 [ 38]: 4d8e726410069c75 +Block 0011 [ 39]: 3047edc384cd7ad0 +Block 0011 [ 40]: 5927a66a3693b292 +Block 0011 [ 41]: ec4ddaa0d1062c01 +Block 0011 [ 42]: 56a76e0424f3431b +Block 0011 [ 43]: ff180425a253e617 +Block 0011 [ 44]: aef38fa44093c20f +Block 0011 [ 45]: d9ea2788a5f4b33f +Block 0011 [ 46]: c5ee5f8214eeadd3 +Block 0011 [ 47]: ae26aa6379355549 +Block 0011 [ 48]: 342cf009717a3cf9 +Block 0011 [ 49]: b249d52df9974c94 +Block 0011 [ 50]: daca199ea5162793 +Block 0011 [ 51]: 504440e9f34f2ea4 +Block 0011 [ 52]: 6e4a0ee45733522f +Block 0011 [ 53]: bc002a2d103dafb9 +Block 0011 [ 54]: 21453d25757b20ab +Block 0011 [ 55]: 6de3ec6e8c583fc4 +Block 0011 [ 56]: ba35f66cd858aac1 +Block 0011 [ 57]: cab68224bb07850e +Block 0011 [ 58]: ffd62d859483fbf5 +Block 0011 [ 59]: bddf886f53ae98af +Block 0011 [ 60]: c9c9db7f51294b61 +Block 0011 [ 61]: 2f17b8ac8f19838d +Block 0011 [ 62]: bea386a3c0f2b883 +Block 0011 [ 63]: 5cc8a9bc30b44f60 +Block 0011 [ 64]: f6b8420f06031880 +Block 0011 [ 65]: 6e550e89ed69a4f2 +Block 0011 [ 66]: 0f20af55db3a61f5 +Block 0011 [ 67]: 13d66a8892f20f94 +Block 0011 [ 68]: eca0cb483c58a3c9 +Block 0011 [ 69]: 39f79cfa748dfacb +Block 0011 [ 70]: d30c012a7af33e12 +Block 0011 [ 71]: 082c1ca2b8130ecc +Block 0011 [ 72]: c85e54db0d0637a7 +Block 0011 [ 73]: 01041626ef5c7864 +Block 0011 [ 74]: 8227dfea66b11bf6 +Block 0011 [ 75]: b7d475e79564f7ce +Block 0011 [ 76]: dbd9e472d5cb5511 +Block 0011 [ 77]: 3974a73be4c3e651 +Block 0011 [ 78]: a0dc6811417a4ddf +Block 0011 [ 79]: 91dd84cea94e45e8 +Block 0011 [ 80]: 70b31d33b3591da6 +Block 0011 [ 81]: 08687f898128f78e +Block 0011 [ 82]: 1ba4f787284e0c64 +Block 0011 [ 83]: fc3605e8516c988f +Block 0011 [ 84]: 9e33611951c7459b +Block 0011 [ 85]: e26fbc9ca703c2f3 +Block 0011 [ 86]: ddc8a9b6c1d5b390 +Block 0011 [ 87]: 21b21e9b65a0f690 +Block 0011 [ 88]: 27446f75da28067b +Block 0011 [ 89]: 0320b4243ea5cd7c +Block 0011 [ 90]: 98ddcc6855ee3b8a +Block 0011 [ 91]: 99d70a73cb919721 +Block 0011 [ 92]: c9a802b4526d366a +Block 0011 [ 93]: 9ed10168b49b54ba +Block 0011 [ 94]: f49780fa64c29aa9 +Block 0011 [ 95]: fc8f149967071a63 +Block 0011 [ 96]: 242033b18a01351e +Block 0011 [ 97]: d5d20ee36d53a3a5 +Block 0011 [ 98]: 0def71eae139449c +Block 0011 [ 99]: f48b3ab19e312f27 +Block 0011 [100]: 04d14ab2e4c96da2 +Block 0011 [101]: caf020d484d724e3 +Block 0011 [102]: 3b47556e5f91133a +Block 0011 [103]: 06a6e66d4024926c +Block 0011 [104]: 26b4a90b3a7babff +Block 0011 [105]: da6deb49c640617e +Block 0011 [106]: a0f431571ce0cdf4 +Block 0011 [107]: a7f4018c8028af61 +Block 0011 [108]: 2b9be19108c53caa +Block 0011 [109]: 37dc3ef56277ecf3 +Block 0011 [110]: cb1f1519f7f6409a +Block 0011 [111]: b673f3aa13b9c3bb +Block 0011 [112]: bbf051ef2ef41554 +Block 0011 [113]: 779a335c4687271a +Block 0011 [114]: fcb5e2d10d07cc1e +Block 0011 [115]: 409c972b93d2f0b5 +Block 0011 [116]: 4e1221d61d60556b +Block 0011 [117]: a7171d38abb1b56c +Block 0011 [118]: 22c1e97d366a0242 +Block 0011 [119]: e2d3e159746843b7 +Block 0011 [120]: 4d591a5e23730cc3 +Block 0011 [121]: 903a4842eb68247a +Block 0011 [122]: c4aa3fa64636ef53 +Block 0011 [123]: 7f92f99f0aa91b22 +Block 0011 [124]: 873f5c9e82cfbdf0 +Block 0011 [125]: ac3b0c40f4317688 +Block 0011 [126]: 830675a89d335e0e +Block 0011 [127]: d93df64ab91dfdc9 +Block 0012 [ 0]: 1ad345df4db50eb2 +Block 0012 [ 1]: 7f2a991f509130e9 +Block 0012 [ 2]: 5b11b82461502f75 +Block 0012 [ 3]: d2502b2312475a91 +Block 0012 [ 4]: 235a1b1b8fbaaca7 +Block 0012 [ 5]: 54300afb3c272e47 +Block 0012 [ 6]: c83d4ed5e93d04ea +Block 0012 [ 7]: 92c7e0dab1b161a0 +Block 0012 [ 8]: e391fef7324fedb2 +Block 0012 [ 9]: da51ed473e82976b +Block 0012 [ 10]: da7cf42297440604 +Block 0012 [ 11]: 39c532ece6e4c67e +Block 0012 [ 12]: 2e8ec6fba2b43181 +Block 0012 [ 13]: e4c0272e6a3a7b2b +Block 0012 [ 14]: 61e5121d987d4bfb +Block 0012 [ 15]: 1efc1de2eb195832 +Block 0012 [ 16]: 83ea202c2677629d +Block 0012 [ 17]: 4d553ee685791054 +Block 0012 [ 18]: 9908af39367d6f42 +Block 0012 [ 19]: 0ed9a6e98a863475 +Block 0012 [ 20]: 4fd7b7f0611df61b +Block 0012 [ 21]: 1a215453a7773bab +Block 0012 [ 22]: ca5f63603c63523b +Block 0012 [ 23]: 2e0ca98c896f42b6 +Block 0012 [ 24]: ef33ee178de5e931 +Block 0012 [ 25]: 78a3d15a99e7c46d +Block 0012 [ 26]: 986097342bb0b51b +Block 0012 [ 27]: b79d38b577ef3bd0 +Block 0012 [ 28]: 4c04efe735ee9aa3 +Block 0012 [ 29]: 4408ee8ac6cc9b03 +Block 0012 [ 30]: a964e18a98feebca +Block 0012 [ 31]: e9980c96d51d78a4 +Block 0012 [ 32]: b030a343e1fed12f +Block 0012 [ 33]: af98cd31d6e5f2ae +Block 0012 [ 34]: 37c3268c71d35630 +Block 0012 [ 35]: bdfb0ad9f749f0ba +Block 0012 [ 36]: 4f3e2bf11096123f +Block 0012 [ 37]: 17879701cb4a1a6a +Block 0012 [ 38]: ee36d707bb272a6d +Block 0012 [ 39]: bc80e260e49601e9 +Block 0012 [ 40]: 7864867c5fbcaca2 +Block 0012 [ 41]: 5de9d72cc44e465e +Block 0012 [ 42]: c0610768400af1f7 +Block 0012 [ 43]: d3bfe5033cedf36d +Block 0012 [ 44]: 734de7e52fbc8edf +Block 0012 [ 45]: aca5cdb35f89215c +Block 0012 [ 46]: d9f8cc9d80ad3f5e +Block 0012 [ 47]: a62a68de189b641c +Block 0012 [ 48]: 7c7ca4dadf0d3e57 +Block 0012 [ 49]: 6e5abd429ad14d50 +Block 0012 [ 50]: 02719e587143939b +Block 0012 [ 51]: 00ceef42af11c7e0 +Block 0012 [ 52]: f1c5f4ed527a2440 +Block 0012 [ 53]: eeb79837ce3a0e21 +Block 0012 [ 54]: ad2d4df530faa7f5 +Block 0012 [ 55]: 13687cab0e868fc9 +Block 0012 [ 56]: d22f8dfc671eeae7 +Block 0012 [ 57]: 70e6519287e17172 +Block 0012 [ 58]: 64f0bcd93ce1195c +Block 0012 [ 59]: e863a76e5b71fb30 +Block 0012 [ 60]: 4395c0d11c924dcb +Block 0012 [ 61]: 9f56bb6bf9506f7a +Block 0012 [ 62]: 2afdf7d2ef3c22fb +Block 0012 [ 63]: e77a668d06f5f5f9 +Block 0012 [ 64]: 952ae073e7174ccf +Block 0012 [ 65]: 6c68dd56660ac7ca +Block 0012 [ 66]: 2ff187f2cebb916d +Block 0012 [ 67]: b5381748e6c0350d +Block 0012 [ 68]: 257094c2b57bf7ee +Block 0012 [ 69]: e2e15bc30698034b +Block 0012 [ 70]: c0a07bdbab7b6861 +Block 0012 [ 71]: fc6965990b7123e4 +Block 0012 [ 72]: 1a09c34714985d6c +Block 0012 [ 73]: 66c61d78f3fa0901 +Block 0012 [ 74]: 45b8bd1699612eaf +Block 0012 [ 75]: 6337d206d8f6a1c6 +Block 0012 [ 76]: 1c6e6a883a316d7b +Block 0012 [ 77]: 8e2520966a3f5393 +Block 0012 [ 78]: 28328a2d7ffbd5d8 +Block 0012 [ 79]: 7a13afae5090f487 +Block 0012 [ 80]: dc9e54d596385074 +Block 0012 [ 81]: 7b2a19c9b048959c +Block 0012 [ 82]: 6fa578ecc65e441a +Block 0012 [ 83]: 0e05de01a70a6559 +Block 0012 [ 84]: fe202d50eb104a91 +Block 0012 [ 85]: 7564eb93f410f212 +Block 0012 [ 86]: f242236f542072cb +Block 0012 [ 87]: 262a216932431387 +Block 0012 [ 88]: 269636433d40f862 +Block 0012 [ 89]: 1c297b358273dcea +Block 0012 [ 90]: e4d99ff9affa34c6 +Block 0012 [ 91]: 8aaea2d759ab7f9c +Block 0012 [ 92]: 527932b0e8b922f8 +Block 0012 [ 93]: 3366937699d3cdbe +Block 0012 [ 94]: d80974a91ac0a0b4 +Block 0012 [ 95]: db086bfd83ddf51f +Block 0012 [ 96]: 604078a09efb7a74 +Block 0012 [ 97]: 5785dc0086b89269 +Block 0012 [ 98]: 859596be9c142de9 +Block 0012 [ 99]: 492ca15c36f63554 +Block 0012 [100]: eab20093faab6936 +Block 0012 [101]: 65b2e8dd2926e710 +Block 0012 [102]: d9afd0da91abcf83 +Block 0012 [103]: 2b1ea3e0f35d8b3c +Block 0012 [104]: 8c1cfa61d92384de +Block 0012 [105]: 076752406e32e99c +Block 0012 [106]: 5bb249c53a792191 +Block 0012 [107]: fc8cee3fa34790e5 +Block 0012 [108]: 8549d1fea8dd8798 +Block 0012 [109]: e06853678f64e142 +Block 0012 [110]: f63402296b31f24a +Block 0012 [111]: 26ea2832acb17e48 +Block 0012 [112]: f1a60fdef2a3e415 +Block 0012 [113]: 1326bd0d6192ed1c +Block 0012 [114]: 1b99169d3bf2e65a +Block 0012 [115]: d8f4c1a60f882992 +Block 0012 [116]: 7b02d30fc580dd08 +Block 0012 [117]: 9f56c86fea37b1c5 +Block 0012 [118]: ff8f6119deb1d6b2 +Block 0012 [119]: 9f7d344af36658b9 +Block 0012 [120]: 635732acba33b90c +Block 0012 [121]: bf44366219c55c4a +Block 0012 [122]: 15bbff300adcf605 +Block 0012 [123]: 2bcde7efb0fa12a1 +Block 0012 [124]: 4823d0fc36dc9fa3 +Block 0012 [125]: 61d737e414cbdb5a +Block 0012 [126]: d0ad0e2902139a09 +Block 0012 [127]: 707eb8916b627127 +Block 0013 [ 0]: f5b25a4acd8eac85 +Block 0013 [ 1]: ee959cf39d3c4644 +Block 0013 [ 2]: 78d7bfa8de372b87 +Block 0013 [ 3]: 31d07e82e6e9e4a6 +Block 0013 [ 4]: 53317a8b03edbd30 +Block 0013 [ 5]: 4df04dc0850df577 +Block 0013 [ 6]: 489794583f20cb0b +Block 0013 [ 7]: 15b684ebce4f4fc8 +Block 0013 [ 8]: 493f8ddb94fc6f8e +Block 0013 [ 9]: 5c28a522d742021d +Block 0013 [ 10]: 9ae7e6a23a8f400d +Block 0013 [ 11]: 11454491ba4a02f4 +Block 0013 [ 12]: 87b5a0821f6a8e20 +Block 0013 [ 13]: 220ba016407d5c90 +Block 0013 [ 14]: 153e626fd2d674a7 +Block 0013 [ 15]: 622ff968c50d21ef +Block 0013 [ 16]: 47fde8ffcbe1f793 +Block 0013 [ 17]: 7b503a6b4527e62f +Block 0013 [ 18]: ecd0b784fd42ee2d +Block 0013 [ 19]: e9f295e0c9618983 +Block 0013 [ 20]: d60bd7403ca015d9 +Block 0013 [ 21]: 88edd56f2c209ba1 +Block 0013 [ 22]: 9c0db046364ac775 +Block 0013 [ 23]: f1b38a5f55895ebc +Block 0013 [ 24]: 3fb1e9fb4ce2a19b +Block 0013 [ 25]: e185c2ed252ff095 +Block 0013 [ 26]: 583c36eb1c2895e6 +Block 0013 [ 27]: d496049eea1f17ee +Block 0013 [ 28]: d2388fc090f49393 +Block 0013 [ 29]: e8643bf2a54cccbf +Block 0013 [ 30]: cdeac9a1398b57a2 +Block 0013 [ 31]: 839a73661c2872c0 +Block 0013 [ 32]: 09cc4949586308ba +Block 0013 [ 33]: 24dee87aceef390c +Block 0013 [ 34]: beab4e57f06e1427 +Block 0013 [ 35]: 00204629e891b870 +Block 0013 [ 36]: 657ee461e9159696 +Block 0013 [ 37]: be041415db73f231 +Block 0013 [ 38]: 247f4b5377d4ca7c +Block 0013 [ 39]: 70d415da5bb36bea +Block 0013 [ 40]: 313a1179f617093b +Block 0013 [ 41]: 41bcffd8350e1754 +Block 0013 [ 42]: 2c4f76024e43f645 +Block 0013 [ 43]: 1994dbd3c51e1c31 +Block 0013 [ 44]: 221ad24959953a4c +Block 0013 [ 45]: aa40bbd20a4016c6 +Block 0013 [ 46]: d6bf58116a751602 +Block 0013 [ 47]: 24734bf7a5d389bf +Block 0013 [ 48]: 928f777444bd7d68 +Block 0013 [ 49]: 465cf35d4417a49d +Block 0013 [ 50]: 2f3c687a1bbdaf2f +Block 0013 [ 51]: fd2eb5b5a73f1419 +Block 0013 [ 52]: 5a2cc27e60b1798d +Block 0013 [ 53]: d93a4af5c2492231 +Block 0013 [ 54]: c7a4258fd56c5df3 +Block 0013 [ 55]: e83d9db8ea4ba71d +Block 0013 [ 56]: d7752996d109d14a +Block 0013 [ 57]: ef45b6603c9edf8a +Block 0013 [ 58]: 0efbb174225721de +Block 0013 [ 59]: d2642ac42b528890 +Block 0013 [ 60]: bc6040869673b79b +Block 0013 [ 61]: fc4b0c4ee58ad868 +Block 0013 [ 62]: ded3ebbf16f440da +Block 0013 [ 63]: 75625237408a7862 +Block 0013 [ 64]: 601d8af508992764 +Block 0013 [ 65]: 2132ec3f36fd592b +Block 0013 [ 66]: 4990b4750222cfd0 +Block 0013 [ 67]: c9abaa67cbe284b3 +Block 0013 [ 68]: 597dee2f5ea8ccfd +Block 0013 [ 69]: 7679ae1f07cdfc36 +Block 0013 [ 70]: 1c13c154abf5cb34 +Block 0013 [ 71]: ebe9cc030f0b1a9b +Block 0013 [ 72]: 71cae6255cf82411 +Block 0013 [ 73]: 83708a47b6689ebb +Block 0013 [ 74]: d7cb99b8d8bfe518 +Block 0013 [ 75]: b98021e9f611c058 +Block 0013 [ 76]: fb37596c497e3c88 +Block 0013 [ 77]: a16ac0a883ced256 +Block 0013 [ 78]: b29aaf06bf1d2469 +Block 0013 [ 79]: 1dc488b3457a3f32 +Block 0013 [ 80]: 46402961371a034e +Block 0013 [ 81]: 7877d9505be77805 +Block 0013 [ 82]: 5078ade761e50cfa +Block 0013 [ 83]: 7ec4cd853f9b0335 +Block 0013 [ 84]: a14b957a670d405f +Block 0013 [ 85]: 1722084e87827637 +Block 0013 [ 86]: 15e8e2e3159dccc7 +Block 0013 [ 87]: 0ac1283e5aaada10 +Block 0013 [ 88]: 38a0e878c2a1ce0a +Block 0013 [ 89]: 566bc9d400a99ff4 +Block 0013 [ 90]: 509edd600055f6c3 +Block 0013 [ 91]: a57c5b4f94d5728b +Block 0013 [ 92]: c4b0df787e20289d +Block 0013 [ 93]: 24b30c1d65cf2d27 +Block 0013 [ 94]: 21a6c6fa045f0f88 +Block 0013 [ 95]: 3dd681b3a08f3773 +Block 0013 [ 96]: 725eeb9947bfcd95 +Block 0013 [ 97]: ad56a88e51d68125 +Block 0013 [ 98]: 35caf5c18f20a731 +Block 0013 [ 99]: 2ddd6ec2de7b9fd8 +Block 0013 [100]: 6295f275afd2977a +Block 0013 [101]: e85d4045aa9da6f0 +Block 0013 [102]: 473cc44a01350486 +Block 0013 [103]: 80d86fa1fc760a9a +Block 0013 [104]: 0b7e4a76a6b30ca3 +Block 0013 [105]: 9b0c415641abb4ad +Block 0013 [106]: a58f46926db36f37 +Block 0013 [107]: 9558bb81a088fbf8 +Block 0013 [108]: 20ab2645bfcd5707 +Block 0013 [109]: 41459b186702a0a2 +Block 0013 [110]: f01bcb9dd08ef05e +Block 0013 [111]: 91613230b930f3d7 +Block 0013 [112]: bd0c9a81312cf8bf +Block 0013 [113]: 3b521db4eda40f02 +Block 0013 [114]: 5f99993d710e0150 +Block 0013 [115]: 2efe9490a78cd199 +Block 0013 [116]: c29b3bc4d52109cc +Block 0013 [117]: cc9a7182f55cd6ab +Block 0013 [118]: fc674176b0dc3548 +Block 0013 [119]: d33b6146b3f1ab1a +Block 0013 [120]: 5531827ddf03bf29 +Block 0013 [121]: a301b4d782e7f83d +Block 0013 [122]: 8fe1e8d8657cd51c +Block 0013 [123]: abdecfdafada2c2e +Block 0013 [124]: e94378ab518f1d8a +Block 0013 [125]: 18c0089c7d48b989 +Block 0013 [126]: 91aefb6654bfba5c +Block 0013 [127]: 727fe8bdc1d2a601 +Block 0014 [ 0]: 10b1676c40244bb4 +Block 0014 [ 1]: 0ab039140f617e39 +Block 0014 [ 2]: dd79402081be7e8a +Block 0014 [ 3]: 79cee37643926e99 +Block 0014 [ 4]: f195ac2b27bae925 +Block 0014 [ 5]: f2a52f91848f0b1a +Block 0014 [ 6]: 55874c67614a346c +Block 0014 [ 7]: 0365bb7b50200a78 +Block 0014 [ 8]: 06421ea996b48809 +Block 0014 [ 9]: 2c28753bde627a8e +Block 0014 [ 10]: 2bf761bc6e2851be +Block 0014 [ 11]: e61da0f18228ce08 +Block 0014 [ 12]: 1c909989f8ff4a0c +Block 0014 [ 13]: b4c9f8b096bd52e1 +Block 0014 [ 14]: e0a3710feca1e3cc +Block 0014 [ 15]: acd36c867bedbb5b +Block 0014 [ 16]: 06bb06ddcd6997c3 +Block 0014 [ 17]: 5049d60c6e65e147 +Block 0014 [ 18]: 59a58a1ccff02b1a +Block 0014 [ 19]: 2d813ae8f5e627b8 +Block 0014 [ 20]: f7a3b8e855dfeb31 +Block 0014 [ 21]: 95a144f33b8d6865 +Block 0014 [ 22]: 48608e431db16dff +Block 0014 [ 23]: 5603d21bea9814e1 +Block 0014 [ 24]: 29a0395b87dfa45f +Block 0014 [ 25]: 94ba29202947a04a +Block 0014 [ 26]: add8292182af9466 +Block 0014 [ 27]: 3133c1ea696e1492 +Block 0014 [ 28]: fc4c66d16b34541a +Block 0014 [ 29]: d07d4bd572129296 +Block 0014 [ 30]: 21fabcc60cd7579b +Block 0014 [ 31]: 108a4ec2c3736878 +Block 0014 [ 32]: 1a7c4bd5f871ee74 +Block 0014 [ 33]: 59de5a617bf3f1db +Block 0014 [ 34]: 6d42b9e076aa6f5b +Block 0014 [ 35]: 4f44e6b995e08524 +Block 0014 [ 36]: 884b59cf9e61d728 +Block 0014 [ 37]: b63870e49d382a8e +Block 0014 [ 38]: e9f2a844db92cd51 +Block 0014 [ 39]: 7b47ba589406327c +Block 0014 [ 40]: 889bde34d1a312d2 +Block 0014 [ 41]: 0afbd1c0acc0fc19 +Block 0014 [ 42]: 7fc655169f230234 +Block 0014 [ 43]: 52c31ef06c1bef89 +Block 0014 [ 44]: 3fda04354e8054bc +Block 0014 [ 45]: 6060cdf695c598b4 +Block 0014 [ 46]: 07717cf2e169176e +Block 0014 [ 47]: 8e20cddb52f2cce8 +Block 0014 [ 48]: 88c93460aa78072d +Block 0014 [ 49]: 919f9fe662867b98 +Block 0014 [ 50]: b0a0f9f25b168bb8 +Block 0014 [ 51]: aa62d17fc6d9e630 +Block 0014 [ 52]: b5c64f4551eeeb17 +Block 0014 [ 53]: 451de645c0be63d8 +Block 0014 [ 54]: 16a451d91dc56ce6 +Block 0014 [ 55]: d47a79d435d0c6b3 +Block 0014 [ 56]: d36e1bc27b66b211 +Block 0014 [ 57]: 5a0412bcba3f0648 +Block 0014 [ 58]: d63998a31aa4403d +Block 0014 [ 59]: 0b6890275cd12195 +Block 0014 [ 60]: f41dc35ba2ee18dd +Block 0014 [ 61]: e52134ebb9407340 +Block 0014 [ 62]: e30e8684808a8207 +Block 0014 [ 63]: 6873a33cd17b1d42 +Block 0014 [ 64]: 2f6d2bc803375757 +Block 0014 [ 65]: 4c865ecb4981f520 +Block 0014 [ 66]: a4c88995838907d1 +Block 0014 [ 67]: a7c3e8d3c26c8a7e +Block 0014 [ 68]: 0f9f7be519c491b5 +Block 0014 [ 69]: ff2778b2dbb8b68d +Block 0014 [ 70]: 40c257be8af04112 +Block 0014 [ 71]: 4774c5f446e5ec29 +Block 0014 [ 72]: 16b8e4ea48ce6762 +Block 0014 [ 73]: 1b8bf07b5c72d62f +Block 0014 [ 74]: f957fbafcf0203f1 +Block 0014 [ 75]: 280aba1ffcf5548c +Block 0014 [ 76]: 78c193e68f2279fe +Block 0014 [ 77]: 32ad8f36dca6bc0a +Block 0014 [ 78]: 99df6ce337faa989 +Block 0014 [ 79]: 9c7b79fc62ed39bf +Block 0014 [ 80]: 5c48affa90dc91d6 +Block 0014 [ 81]: d902824f2de78b36 +Block 0014 [ 82]: ca800b35c6c4a3d7 +Block 0014 [ 83]: a2a0e389d67b2219 +Block 0014 [ 84]: 84abe64d24cda2fa +Block 0014 [ 85]: 3b8fee610918ae1c +Block 0014 [ 86]: 4807e19d49d2620e +Block 0014 [ 87]: 8a4daac02dd5a1f1 +Block 0014 [ 88]: 84193ecf9397a8ac +Block 0014 [ 89]: 3a878d3c7143626d +Block 0014 [ 90]: fefa2fea15776bed +Block 0014 [ 91]: b5b3aff0e3764326 +Block 0014 [ 92]: bb6cf890ad7bdd93 +Block 0014 [ 93]: 05db7bbb378d5b4a +Block 0014 [ 94]: ef536b5401914b3c +Block 0014 [ 95]: 1669cea05508ca6d +Block 0014 [ 96]: c6fa5dcd69b2289c +Block 0014 [ 97]: 81c4f6e588e88828 +Block 0014 [ 98]: f79df208f6a28f72 +Block 0014 [ 99]: eff01bd909548eaa +Block 0014 [100]: f3aadefe5fa688f7 +Block 0014 [101]: 5eb8f34faad19615 +Block 0014 [102]: 76e2160b0f8a3be3 +Block 0014 [103]: 384d6f6d12bf33dd +Block 0014 [104]: e19b1a15721e64ec +Block 0014 [105]: 56fe02cb2dd6bff7 +Block 0014 [106]: ea4740f275b38022 +Block 0014 [107]: 22c0fe908d71be63 +Block 0014 [108]: bbbb17d83f8ceaac +Block 0014 [109]: b4131310f114b478 +Block 0014 [110]: a30b7094283ce815 +Block 0014 [111]: f37b55dab3f0111a +Block 0014 [112]: 50b86270bad3f5cd +Block 0014 [113]: d8712d30644285da +Block 0014 [114]: 6a98fade890e4928 +Block 0014 [115]: 7ea0752485687df3 +Block 0014 [116]: dee516c8e6167ea6 +Block 0014 [117]: d6d6fdf505410090 +Block 0014 [118]: b32bc9d8ca917423 +Block 0014 [119]: 2d9f32b5bbdb1ccf +Block 0014 [120]: 35da94c8a2408b96 +Block 0014 [121]: f65500bffa03086c +Block 0014 [122]: 88b0596f10ff559e +Block 0014 [123]: 5cb9a2dedceb1a38 +Block 0014 [124]: 72360e96f822afd8 +Block 0014 [125]: 395b93cc58ec538a +Block 0014 [126]: 8d974a371c3f3083 +Block 0014 [127]: bca4da67b8208cca +Block 0015 [ 0]: f189eac80b130e98 +Block 0015 [ 1]: 33f6733a94d003dd +Block 0015 [ 2]: a6ac8be5d69abb9c +Block 0015 [ 3]: 9284f0e1ff25fa3e +Block 0015 [ 4]: 974c173009f23b54 +Block 0015 [ 5]: f039f84eac6c7176 +Block 0015 [ 6]: 6eeb055e842f01a6 +Block 0015 [ 7]: f4b998946c13fd7e +Block 0015 [ 8]: f9a6bd32f6917a3f +Block 0015 [ 9]: 123d884226b23a95 +Block 0015 [ 10]: dbcfa8deb02bde7a +Block 0015 [ 11]: 19e40500041dff85 +Block 0015 [ 12]: 98a779869b36095b +Block 0015 [ 13]: f1a4665aa48df2aa +Block 0015 [ 14]: f12aee1bbe71e754 +Block 0015 [ 15]: 2832355f0859ae9f +Block 0015 [ 16]: e36f3ac620b21342 +Block 0015 [ 17]: 18d5d719e771ef0a +Block 0015 [ 18]: 7071360728fb35b8 +Block 0015 [ 19]: 7f0d4cd2b1a2dbfc +Block 0015 [ 20]: e66f2beca141c0c2 +Block 0015 [ 21]: 633620378d948360 +Block 0015 [ 22]: 09bf7ab13b7b8113 +Block 0015 [ 23]: cb30b7662b21ab38 +Block 0015 [ 24]: 2edc4731d2308a7e +Block 0015 [ 25]: 4e49a895a5ef98f6 +Block 0015 [ 26]: db34f4043edc554c +Block 0015 [ 27]: 30697edc4c093bfb +Block 0015 [ 28]: 5797f671e7bc95f7 +Block 0015 [ 29]: d74bd8d2d1a1e1b0 +Block 0015 [ 30]: f583913e4ff8009e +Block 0015 [ 31]: 10281ef2dca1f23d +Block 0015 [ 32]: 8127bd68bf85332f +Block 0015 [ 33]: e6ff6cbc20158925 +Block 0015 [ 34]: 98ab39f4f1d48bef +Block 0015 [ 35]: e25a5306cb2675a8 +Block 0015 [ 36]: 2b2562295968c33c +Block 0015 [ 37]: 6358a7dfcf36d573 +Block 0015 [ 38]: 8cbd7034d97fd867 +Block 0015 [ 39]: f06ab20be6ace852 +Block 0015 [ 40]: 53b92749e6daba84 +Block 0015 [ 41]: 13a93af10eb8a565 +Block 0015 [ 42]: 84d658b873d03cc4 +Block 0015 [ 43]: b02815931e125a52 +Block 0015 [ 44]: fffc1b1cdf95d195 +Block 0015 [ 45]: ee73a37dadb40b39 +Block 0015 [ 46]: 9e4e88a2ae5dc686 +Block 0015 [ 47]: 1385cd88e6425087 +Block 0015 [ 48]: 4d772741406ee491 +Block 0015 [ 49]: 6e9e9271fb4edf7a +Block 0015 [ 50]: 5b02a5717a3acaf7 +Block 0015 [ 51]: 24882157db0dcda3 +Block 0015 [ 52]: 4a1688e4d711fd76 +Block 0015 [ 53]: ad144c4d2eea708a +Block 0015 [ 54]: 8aa4f446306360c7 +Block 0015 [ 55]: bf677939988d20e0 +Block 0015 [ 56]: c664e88326639846 +Block 0015 [ 57]: 97b47955a332e498 +Block 0015 [ 58]: 43b7457f3a89c803 +Block 0015 [ 59]: 15f108424f133523 +Block 0015 [ 60]: 60ef61eab9430dc0 +Block 0015 [ 61]: 41978abdc34630ca +Block 0015 [ 62]: 80fdee0a502c933a +Block 0015 [ 63]: 40aeb6bcf72a83dd +Block 0015 [ 64]: c34873b79f92feda +Block 0015 [ 65]: 93b287cc7f2d6576 +Block 0015 [ 66]: a5e423046b37f7b5 +Block 0015 [ 67]: 3e45cc879804f363 +Block 0015 [ 68]: 8089be076d83ec63 +Block 0015 [ 69]: 7f942e9341bfef64 +Block 0015 [ 70]: fc36f40b2c23727c +Block 0015 [ 71]: 88f59f1b7aab23f6 +Block 0015 [ 72]: 6cd961e20b46cf04 +Block 0015 [ 73]: af8daa17307ece9f +Block 0015 [ 74]: 55c8a732a5024405 +Block 0015 [ 75]: 493351c9d90f5dca +Block 0015 [ 76]: e383eb9d2b702083 +Block 0015 [ 77]: 3531d76a907ff09b +Block 0015 [ 78]: 8b948c1f1adf708c +Block 0015 [ 79]: f60219e3c20f81bf +Block 0015 [ 80]: fdef7e1d0096ae36 +Block 0015 [ 81]: 0023848ed3244880 +Block 0015 [ 82]: ae70ea7e1e56bf11 +Block 0015 [ 83]: 6e32bdb76fe2ca3c +Block 0015 [ 84]: 269abe8ddbe52a74 +Block 0015 [ 85]: 2850442d72280b43 +Block 0015 [ 86]: 22d905fb996b5ab9 +Block 0015 [ 87]: 287e2018200cad12 +Block 0015 [ 88]: 6a1fe428bd732e3f +Block 0015 [ 89]: 4eb723cfea7bb304 +Block 0015 [ 90]: 530dbd634dd3efe3 +Block 0015 [ 91]: 74800758ff2daba1 +Block 0015 [ 92]: 90e457d82488bb2f +Block 0015 [ 93]: 1830be721f3ef8f8 +Block 0015 [ 94]: 5ccb3fab432a940a +Block 0015 [ 95]: b6ea244a748381a3 +Block 0015 [ 96]: b52aa1d526514b32 +Block 0015 [ 97]: 56337c73fe59a3bd +Block 0015 [ 98]: 823e910e9955c22f +Block 0015 [ 99]: 828b237a8aca3c43 +Block 0015 [100]: 805565bdb4eaf460 +Block 0015 [101]: 68cd5ca7e6a0f2fc +Block 0015 [102]: 2932126750b1bf54 +Block 0015 [103]: d96142902c6521c5 +Block 0015 [104]: bdba35f039f09c7d +Block 0015 [105]: d90d774b89e2fa8c +Block 0015 [106]: af4b578a109f3cbb +Block 0015 [107]: e7780dd887a4e339 +Block 0015 [108]: 1fd0a50762a32802 +Block 0015 [109]: 50daa087e523e884 +Block 0015 [110]: 3e94bce39aaeefbf +Block 0015 [111]: 99807216aaa83931 +Block 0015 [112]: 7fe25144749c8f9f +Block 0015 [113]: abbada9b71d20f73 +Block 0015 [114]: a6c6d5de3a4c4eab +Block 0015 [115]: 4238c5b727ddab36 +Block 0015 [116]: 65013e9f62f9c1e2 +Block 0015 [117]: 2e3ba5a1d874ac1c +Block 0015 [118]: 14b6ead39de6c35d +Block 0015 [119]: a59f40506f9bfde1 +Block 0015 [120]: 12d16d162b0cb94c +Block 0015 [121]: 87beca102f670103 +Block 0015 [122]: 84f177dddbb32ccf +Block 0015 [123]: fb7aed944a854935 +Block 0015 [124]: 70eb5f312639686f +Block 0015 [125]: 303f408c14c9e843 +Block 0015 [126]: fb6ba597191585b2 +Block 0015 [127]: 1e824a1b47167883 +Block 0016 [ 0]: e1ddeb06fb830a30 +Block 0016 [ 1]: d9ceeeb4dc057082 +Block 0016 [ 2]: 464dfdb178004fc9 +Block 0016 [ 3]: 98bccedb76dddac2 +Block 0016 [ 4]: da66667814cbf9c2 +Block 0016 [ 5]: b5f24d697ddbd51f +Block 0016 [ 6]: 54ef6a4c43dba9a8 +Block 0016 [ 7]: 1e525968c22632cb +Block 0016 [ 8]: 8bef045bd2e18cf4 +Block 0016 [ 9]: b592f422d19ec71e +Block 0016 [ 10]: 7690ed8e96aced5b +Block 0016 [ 11]: 6126a2deb2a336f1 +Block 0016 [ 12]: a3fa671528218d61 +Block 0016 [ 13]: 41c3390dc61f4dd2 +Block 0016 [ 14]: cdae2748aa147504 +Block 0016 [ 15]: 0dee773c929709ea +Block 0016 [ 16]: 413ae9680850dcd0 +Block 0016 [ 17]: 7ed328cf552481d4 +Block 0016 [ 18]: b66e178fb368811a +Block 0016 [ 19]: 251b75d20032bf7a +Block 0016 [ 20]: 545e1f4ef50e1fd8 +Block 0016 [ 21]: 2c91fc1f70cbdf5d +Block 0016 [ 22]: fc950316eb56d1a5 +Block 0016 [ 23]: 57f2ac7ad2d8e7c4 +Block 0016 [ 24]: 254bc347e7938b20 +Block 0016 [ 25]: 241ac053e0b11fac +Block 0016 [ 26]: 54fe9568bdb48368 +Block 0016 [ 27]: 5b1df834c305aaab +Block 0016 [ 28]: 0b6677fe6f663d73 +Block 0016 [ 29]: 2a58d4e0d23987bf +Block 0016 [ 30]: eed5f52ba9cfbeee +Block 0016 [ 31]: e901a61d3ac59b61 +Block 0016 [ 32]: a1b047e2d37cd3b1 +Block 0016 [ 33]: b1932b38a69fd47e +Block 0016 [ 34]: 67a1438ad6a91e4c +Block 0016 [ 35]: 47747d87352a5176 +Block 0016 [ 36]: 89b3e43ee9466ab2 +Block 0016 [ 37]: 7d1bf0dad3286e44 +Block 0016 [ 38]: ff2505d940b11463 +Block 0016 [ 39]: 08da9591c67460e2 +Block 0016 [ 40]: 66f29fc0597f157f +Block 0016 [ 41]: 4819aff7a4691283 +Block 0016 [ 42]: 5a8b617bacc4ad46 +Block 0016 [ 43]: ebefc29bd65b838f +Block 0016 [ 44]: 05ff5dd1e5b3ab2e +Block 0016 [ 45]: 626c0f1ec1e47007 +Block 0016 [ 46]: 7a7b03b162769bec +Block 0016 [ 47]: 2e34537f239786fe +Block 0016 [ 48]: cb19fa94cc202fe2 +Block 0016 [ 49]: 31434f64bee338d2 +Block 0016 [ 50]: ba1eb78fb1b860fe +Block 0016 [ 51]: af72f1fe3ca7be85 +Block 0016 [ 52]: e5707ea32838fa1f +Block 0016 [ 53]: 69370e3f3c439886 +Block 0016 [ 54]: 373aa92fe81eff81 +Block 0016 [ 55]: 4f19d93514ca2f6d +Block 0016 [ 56]: c45314514c999c2c +Block 0016 [ 57]: 48636e71fbb8e2e2 +Block 0016 [ 58]: 6fd04c75f37d7cf5 +Block 0016 [ 59]: 535fffc75b2845af +Block 0016 [ 60]: 116f083a20faf1ea +Block 0016 [ 61]: a6b9cb30c10f4d7d +Block 0016 [ 62]: f65f50637963ed64 +Block 0016 [ 63]: ef45e24b1895a1e0 +Block 0016 [ 64]: 3cf86c8f7c86c83c +Block 0016 [ 65]: 7bb329c554448bc9 +Block 0016 [ 66]: b654af05945ffba9 +Block 0016 [ 67]: 05d3a07ecf3e821b +Block 0016 [ 68]: 2df71ff3f80362a7 +Block 0016 [ 69]: 79127958922bcbb3 +Block 0016 [ 70]: 622d190346b38432 +Block 0016 [ 71]: bf2dc65337296ccd +Block 0016 [ 72]: d6def66a26196560 +Block 0016 [ 73]: 122c98a535332c4d +Block 0016 [ 74]: 3b1169fcbf2e9411 +Block 0016 [ 75]: 9db2f647a52b8fe1 +Block 0016 [ 76]: f37e7eaf346c6c92 +Block 0016 [ 77]: 4aec23b4617cbd25 +Block 0016 [ 78]: 12cc694713dcd514 +Block 0016 [ 79]: 15a22d24f142459b +Block 0016 [ 80]: 8ec4e9db5dd2a88e +Block 0016 [ 81]: a4451dc90a8d2b75 +Block 0016 [ 82]: f92f552a4edc9084 +Block 0016 [ 83]: 233e0e15607eede6 +Block 0016 [ 84]: 3856b3e05a6c9904 +Block 0016 [ 85]: e3f46537f77c0332 +Block 0016 [ 86]: 24bc337ec13085f5 +Block 0016 [ 87]: 8ccdb10b7dd2de17 +Block 0016 [ 88]: 151b7ae5357d3e4b +Block 0016 [ 89]: f19457cb407fe87d +Block 0016 [ 90]: 6ea7efee69876066 +Block 0016 [ 91]: 51bb185a42a9ceb1 +Block 0016 [ 92]: 014c91e31f516f65 +Block 0016 [ 93]: 321202000b51bffd +Block 0016 [ 94]: 0b70e28615347b98 +Block 0016 [ 95]: ea6794917d1a9560 +Block 0016 [ 96]: fdd5631f8f8f3323 +Block 0016 [ 97]: d51704a4a308cfe2 +Block 0016 [ 98]: 65c17ee053a0e313 +Block 0016 [ 99]: 1ecd108d43490cdc +Block 0016 [100]: 8f6b57024c6aa782 +Block 0016 [101]: 161a22a97dbf0ad4 +Block 0016 [102]: 774aff9e1b3f6cdd +Block 0016 [103]: e588f347ad869391 +Block 0016 [104]: 4c2eee9fb6c6c0fc +Block 0016 [105]: 5834b8b51e701a47 +Block 0016 [106]: d4526cbb4d9bf681 +Block 0016 [107]: 0cadec8e56b0c70a +Block 0016 [108]: e1419c694af58241 +Block 0016 [109]: 2b51d757e16bb60b +Block 0016 [110]: a709cc9e3ac3cba5 +Block 0016 [111]: d500ae924ab9d656 +Block 0016 [112]: 4ef55d95efef9c67 +Block 0016 [113]: f4928cc63b92c4f7 +Block 0016 [114]: 201936d80b3bd3c2 +Block 0016 [115]: 367bfa07ca4c2aa8 +Block 0016 [116]: 7dcf97e3f616bfea +Block 0016 [117]: 09a9c5b8fbba724a +Block 0016 [118]: 4be5048497c65e6b +Block 0016 [119]: a38719b4833e8880 +Block 0016 [120]: 6fbb2b72f13bb81e +Block 0016 [121]: c0373061dbe0377e +Block 0016 [122]: 2c963162f790bbd5 +Block 0016 [123]: dfd2bc34bb295f3f +Block 0016 [124]: 4ccef74b9fab3a08 +Block 0016 [125]: d1bdf49c5e2397e5 +Block 0016 [126]: 43fc92247bddea27 +Block 0016 [127]: e3e79824dace601e +Block 0017 [ 0]: f8c0d8dbd83c6a93 +Block 0017 [ 1]: cbd22848e9e04bef +Block 0017 [ 2]: 8df51e47313583dd +Block 0017 [ 3]: 4e8920fa638fb77d +Block 0017 [ 4]: d5eb6e73d621f8ec +Block 0017 [ 5]: 8118af023e35d71c +Block 0017 [ 6]: 23ccdde7874145db +Block 0017 [ 7]: 33fbe77067316647 +Block 0017 [ 8]: 3554a4f1579eb0e1 +Block 0017 [ 9]: 9b783e2c31916c6d +Block 0017 [ 10]: 749b91c44deb5b1d +Block 0017 [ 11]: 8f34a76a9abfde3b +Block 0017 [ 12]: f288d5114f2cdd30 +Block 0017 [ 13]: b0eaa31bf934816a +Block 0017 [ 14]: 45dc0133186af561 +Block 0017 [ 15]: bee61e5d7de2b407 +Block 0017 [ 16]: 9cd877b670a9f7dc +Block 0017 [ 17]: 3d799d42cbcdabd8 +Block 0017 [ 18]: 2adc8fa64b275533 +Block 0017 [ 19]: 5a8555c5a474b462 +Block 0017 [ 20]: 294f076d4ae34d2d +Block 0017 [ 21]: e8765e154b60b76e +Block 0017 [ 22]: fced1cb25770df34 +Block 0017 [ 23]: 3f5eddfa13d36537 +Block 0017 [ 24]: f09d5a7587f1f135 +Block 0017 [ 25]: 94a43ea2088173e4 +Block 0017 [ 26]: f4647c28a56d3def +Block 0017 [ 27]: 8cbca4eb5f78d8fd +Block 0017 [ 28]: 9f24ca461a660dbd +Block 0017 [ 29]: 2f11b3dc4b162b34 +Block 0017 [ 30]: 15be4b6787f72d78 +Block 0017 [ 31]: 689415a8565fc6a3 +Block 0017 [ 32]: ba16470d503687a4 +Block 0017 [ 33]: b05c65f6b504dc3d +Block 0017 [ 34]: 202bc24f335a9aad +Block 0017 [ 35]: 1f93f1c5745c3fa2 +Block 0017 [ 36]: 308f4467e0ef4c7c +Block 0017 [ 37]: 987f2c7f7741543a +Block 0017 [ 38]: 0cb3223416b7e971 +Block 0017 [ 39]: 030c8741b1db2412 +Block 0017 [ 40]: 420d90a459271a6c +Block 0017 [ 41]: a3ee8a93febbd0ce +Block 0017 [ 42]: 8e1a9f2aad5ddf4b +Block 0017 [ 43]: e31ef7e016d6e5d4 +Block 0017 [ 44]: 69817e2130fa7bf9 +Block 0017 [ 45]: 42ecdc96fe63f7f7 +Block 0017 [ 46]: 75f217a3d588f719 +Block 0017 [ 47]: ea1110e25bab55aa +Block 0017 [ 48]: 17d6eee2bfd1fc92 +Block 0017 [ 49]: 770ba296808b3d1f +Block 0017 [ 50]: ebe66bd4b4e209d9 +Block 0017 [ 51]: 2856c4111e42c984 +Block 0017 [ 52]: 4f3a2c8cb161439c +Block 0017 [ 53]: 931c9fab713a4362 +Block 0017 [ 54]: 59bcd09f39ee5245 +Block 0017 [ 55]: 2f72987bc8cb90ac +Block 0017 [ 56]: a94531dc789bf64b +Block 0017 [ 57]: d556a056d5eca922 +Block 0017 [ 58]: 1c8c8e2607265fbf +Block 0017 [ 59]: ce05b759e48d786a +Block 0017 [ 60]: 0cf70e6b71b6b087 +Block 0017 [ 61]: 3905b0f10c5753e5 +Block 0017 [ 62]: 204c0e23f983b729 +Block 0017 [ 63]: eea30fffb591692a +Block 0017 [ 64]: 2092e319f719acf4 +Block 0017 [ 65]: 303114a5662660ae +Block 0017 [ 66]: 0aa60806230aaea5 +Block 0017 [ 67]: 5daaf906c740ef37 +Block 0017 [ 68]: 43174da93c1899bd +Block 0017 [ 69]: 55eefb2ffa06c6d1 +Block 0017 [ 70]: e3f36fdfe0ec5692 +Block 0017 [ 71]: 13c15a1a05e1a107 +Block 0017 [ 72]: e051fabc5e0d43f8 +Block 0017 [ 73]: 7df93f40edd1fa91 +Block 0017 [ 74]: e55805cce70493d0 +Block 0017 [ 75]: 07c1351fd7576c60 +Block 0017 [ 76]: d053915e4a55bba5 +Block 0017 [ 77]: 9b8d03ca70afa1b6 +Block 0017 [ 78]: dc9aa7a607b68164 +Block 0017 [ 79]: ec3abd6f5fcb70f3 +Block 0017 [ 80]: 5fded738f31f9b5f +Block 0017 [ 81]: daadb148ef52da6b +Block 0017 [ 82]: 2931a672df2e5e9c +Block 0017 [ 83]: bddd0d5d7a314df0 +Block 0017 [ 84]: a962d2f797da997f +Block 0017 [ 85]: aaaec1c3a4e7402f +Block 0017 [ 86]: 2a069d415ba940f7 +Block 0017 [ 87]: 5c1915a6dd37a3fb +Block 0017 [ 88]: af295da329360919 +Block 0017 [ 89]: 2704a39402efad8c +Block 0017 [ 90]: 81d3c2b0ea7230d4 +Block 0017 [ 91]: a90a2b8791cf17a2 +Block 0017 [ 92]: 7bca0e2cb4532c12 +Block 0017 [ 93]: 286e51161ff47347 +Block 0017 [ 94]: dce682ef46ce8926 +Block 0017 [ 95]: deaa896bfaf85484 +Block 0017 [ 96]: 84b8dfd1e71d76dd +Block 0017 [ 97]: eefd07b5eab683c0 +Block 0017 [ 98]: 9f3c8e987d506cf9 +Block 0017 [ 99]: 129112d058177710 +Block 0017 [100]: 85c12d6275744ae3 +Block 0017 [101]: 1a32ce9834a94da9 +Block 0017 [102]: 55c47e8dd9e026df +Block 0017 [103]: 5d40e159b07e97a2 +Block 0017 [104]: 834c6bd420bab8fe +Block 0017 [105]: 0a53f14dd39d8ebb +Block 0017 [106]: 48fdb70b92100de9 +Block 0017 [107]: 82dbac2e655058bd +Block 0017 [108]: 59772c79fdc45cc0 +Block 0017 [109]: ee7b3f05d26ed6fc +Block 0017 [110]: 9ad113092d4e2f6c +Block 0017 [111]: f9959f9f69a733d8 +Block 0017 [112]: 4eacd5578cc7b2b9 +Block 0017 [113]: 107381cd15b9f5db +Block 0017 [114]: 62ab4703795a6f01 +Block 0017 [115]: 05e6fc31906fba7a +Block 0017 [116]: 88258c5f311e914a +Block 0017 [117]: 9288c816aa7c111e +Block 0017 [118]: 3624485540cc2cf4 +Block 0017 [119]: 94af9fe90ae22a71 +Block 0017 [120]: 0bcdc699892b3fa7 +Block 0017 [121]: cb5c6c5298ccc4d4 +Block 0017 [122]: 2648f01cf5322a4d +Block 0017 [123]: 6d6e80d62493a5ec +Block 0017 [124]: cb46cc606d710890 +Block 0017 [125]: fa63666adfb0c7d8 +Block 0017 [126]: 9d7a5d6d313966a3 +Block 0017 [127]: 9dca2d40ecf3caf9 +Block 0018 [ 0]: 41d8eba2b27e8ffb +Block 0018 [ 1]: ddff1e14d97eafc5 +Block 0018 [ 2]: d6521ada6762a59a +Block 0018 [ 3]: 75ec7d924ed612fe +Block 0018 [ 4]: a5e33611406ed95e +Block 0018 [ 5]: 23a98ec1e96ae57c +Block 0018 [ 6]: 5f9fd3d229c24c83 +Block 0018 [ 7]: 76fa60f7d8c8998f +Block 0018 [ 8]: 5c030f75c22fcd89 +Block 0018 [ 9]: 534ac5f50eb44fca +Block 0018 [ 10]: a739bd10713b8b97 +Block 0018 [ 11]: 4e6f87176e72e398 +Block 0018 [ 12]: 6e0d2a49f9aa5dc3 +Block 0018 [ 13]: 6cbc16f8383af2c9 +Block 0018 [ 14]: 8f5a5cce393406ad +Block 0018 [ 15]: b7b0df795df78383 +Block 0018 [ 16]: 32ac85c1b3afb835 +Block 0018 [ 17]: 5322dfb0eb9caf98 +Block 0018 [ 18]: 7a1de529f2f636f5 +Block 0018 [ 19]: 5b9ace630dc336df +Block 0018 [ 20]: 29d91addab9bdff3 +Block 0018 [ 21]: 1f84a68592a1862c +Block 0018 [ 22]: a3fc3835fe84d8af +Block 0018 [ 23]: ea35a61b06b43d45 +Block 0018 [ 24]: 5f41f2b0836bfab8 +Block 0018 [ 25]: 769f922caed6e9f0 +Block 0018 [ 26]: 8ef2cc29fbbc35b6 +Block 0018 [ 27]: d1ec004e64b184bd +Block 0018 [ 28]: e30664f43e049be0 +Block 0018 [ 29]: 2ca44a1dc6d8d4a3 +Block 0018 [ 30]: 8f59369926d5e973 +Block 0018 [ 31]: 26399ac675daed1e +Block 0018 [ 32]: c9ecf425a6f8ea3a +Block 0018 [ 33]: b108f214f96adfad +Block 0018 [ 34]: 25fbe09109ed920f +Block 0018 [ 35]: 14c5a9e69e48beeb +Block 0018 [ 36]: 03a28f26f088774e +Block 0018 [ 37]: 242853b73545ab1f +Block 0018 [ 38]: edf3c093f44adc92 +Block 0018 [ 39]: b64b1e909d8ae53e +Block 0018 [ 40]: e6cebbd27a8a1823 +Block 0018 [ 41]: a5f0395142c18539 +Block 0018 [ 42]: e0f5d5665927e888 +Block 0018 [ 43]: 7a683bbac488c694 +Block 0018 [ 44]: 3534c4247936f396 +Block 0018 [ 45]: 20eeb0deffa9b7d8 +Block 0018 [ 46]: 76f68bd31fc40cc3 +Block 0018 [ 47]: 56d5211ed2076486 +Block 0018 [ 48]: 3ae860a16080d1e5 +Block 0018 [ 49]: 9bb9aeaf8ff539de +Block 0018 [ 50]: 92bbd2ed06a94dd6 +Block 0018 [ 51]: b670108883c32507 +Block 0018 [ 52]: 043ac5bc24bd7023 +Block 0018 [ 53]: 9a26fd657901d39b +Block 0018 [ 54]: 001505488513a271 +Block 0018 [ 55]: e0f52e9ee43d5acb +Block 0018 [ 56]: 207c9951a27e8d42 +Block 0018 [ 57]: d1a024de5a287d4d +Block 0018 [ 58]: 7339d8810c9752ad +Block 0018 [ 59]: 50c291efea09790e +Block 0018 [ 60]: 413952cfc7f4d524 +Block 0018 [ 61]: 97a796f4ba686a1e +Block 0018 [ 62]: a5d3b36326136c79 +Block 0018 [ 63]: c83d34934cff9bce +Block 0018 [ 64]: d647ed0ab4f70fb0 +Block 0018 [ 65]: cb3b129980d593c5 +Block 0018 [ 66]: 2daeeb3b7a32c464 +Block 0018 [ 67]: 3d11ca2eaa3129dc +Block 0018 [ 68]: 69918f90199141fc +Block 0018 [ 69]: 4a966b9201c121aa +Block 0018 [ 70]: fcd187be4ddd30ec +Block 0018 [ 71]: a9ffdcf157639d51 +Block 0018 [ 72]: 57c44134d9ede65e +Block 0018 [ 73]: 2969a0b45033e193 +Block 0018 [ 74]: 578504557677f544 +Block 0018 [ 75]: c72f9a3106f1840d +Block 0018 [ 76]: 1817a772dac99295 +Block 0018 [ 77]: a7c3e3c25780f8f1 +Block 0018 [ 78]: 25088cced1cecb19 +Block 0018 [ 79]: fb0f74cfbeb475a7 +Block 0018 [ 80]: 7521f5a566fbc53b +Block 0018 [ 81]: eb43e619fe7627be +Block 0018 [ 82]: bfc0451e97bb2c09 +Block 0018 [ 83]: 2a9a8e551e19412d +Block 0018 [ 84]: 72c355f26e74cdf9 +Block 0018 [ 85]: 812b95f0e42905c3 +Block 0018 [ 86]: e47fbc58e7a23e8e +Block 0018 [ 87]: 8287cfa4dbf6b4f1 +Block 0018 [ 88]: edd351257983dcc7 +Block 0018 [ 89]: 6f2d7e6268c46c70 +Block 0018 [ 90]: 8873e4d627217a6c +Block 0018 [ 91]: dadb6fb73483f950 +Block 0018 [ 92]: 96c0f1f56ef916cf +Block 0018 [ 93]: 8ae137ba396c5b51 +Block 0018 [ 94]: c5623d376dc44ff0 +Block 0018 [ 95]: 468744eec4787edb +Block 0018 [ 96]: 541c9a809d09ad87 +Block 0018 [ 97]: 12c06624677a34c0 +Block 0018 [ 98]: 65a9f78b9721ab68 +Block 0018 [ 99]: c0fce7c5f3c14e4b +Block 0018 [100]: 220ff8d8bc2c9aa8 +Block 0018 [101]: d8b873796ec7c116 +Block 0018 [102]: 0270437041c8097c +Block 0018 [103]: adf5866d0ab4d935 +Block 0018 [104]: bf01ece42754ef4c +Block 0018 [105]: e2c36d1246558b3b +Block 0018 [106]: b65d2e98ef5cd6bf +Block 0018 [107]: 9b93da55732f8f35 +Block 0018 [108]: 0074ddefd19ad665 +Block 0018 [109]: 4a3e02e5f328c4fb +Block 0018 [110]: 9ac2195c1da0dca1 +Block 0018 [111]: 475dcad3d814a6b1 +Block 0018 [112]: 6988288e956f5c14 +Block 0018 [113]: fc836a01bb8ca4a3 +Block 0018 [114]: b8d217fa56dad448 +Block 0018 [115]: 06727706c59a4a6a +Block 0018 [116]: 94cc16f7239d205e +Block 0018 [117]: b9c84c3c7718ea3e +Block 0018 [118]: b2304a46173492bc +Block 0018 [119]: 1c0f38ecb6f1cd07 +Block 0018 [120]: 3722bd0642232c72 +Block 0018 [121]: bc4f0e23d2022839 +Block 0018 [122]: 4cf310c54cfee088 +Block 0018 [123]: dd4dcee5f70e9a6e +Block 0018 [124]: 4c3d4fbd3aa75015 +Block 0018 [125]: 87ba959de0f63169 +Block 0018 [126]: 5c1e8fd799894a1c +Block 0018 [127]: 865447d77e4b2e13 +Block 0019 [ 0]: eabae49e13df33ac +Block 0019 [ 1]: 386269d795a8f899 +Block 0019 [ 2]: 1a1d30373d0c4905 +Block 0019 [ 3]: abbe30aec1ac09dc +Block 0019 [ 4]: f67470f8729cc26b +Block 0019 [ 5]: db68c7d8a44b4d5f +Block 0019 [ 6]: 3d513341faae4e19 +Block 0019 [ 7]: dcf3e0974e76be86 +Block 0019 [ 8]: a3c5a352c9fbf4d0 +Block 0019 [ 9]: e4e34f59a33d54e6 +Block 0019 [ 10]: 81470205f725bc1d +Block 0019 [ 11]: 743bb43a01c90b8f +Block 0019 [ 12]: ac231cbb51f86d7f +Block 0019 [ 13]: 76a54de1db9a2d49 +Block 0019 [ 14]: ce92d6a9fa205255 +Block 0019 [ 15]: be195b17682d7ba3 +Block 0019 [ 16]: fba4f7b8cb7cb499 +Block 0019 [ 17]: d6df894fabf3682f +Block 0019 [ 18]: 8b54ace58eba1262 +Block 0019 [ 19]: 30247e3c460bce00 +Block 0019 [ 20]: f6b7e6b2938e97d4 +Block 0019 [ 21]: 5d68ef5ec31b8518 +Block 0019 [ 22]: 2abcae4d72aeddfe +Block 0019 [ 23]: 57141fa0f14c98a5 +Block 0019 [ 24]: 293cec5f696540ff +Block 0019 [ 25]: b57fd404b2bbc3e6 +Block 0019 [ 26]: 1b1fe64e4d2e5982 +Block 0019 [ 27]: bb7c3161fe94c152 +Block 0019 [ 28]: cdfe146e99217225 +Block 0019 [ 29]: 53b945e98283d4e5 +Block 0019 [ 30]: 07406d1f09e99c7c +Block 0019 [ 31]: 9420f9136e228ce3 +Block 0019 [ 32]: 7bb1709ddccf5482 +Block 0019 [ 33]: 5be06e97ad22b8ec +Block 0019 [ 34]: 8fd822c429336371 +Block 0019 [ 35]: 708ff63d3cdee345 +Block 0019 [ 36]: 3be6b50763010552 +Block 0019 [ 37]: 3b5b31627020868f +Block 0019 [ 38]: ed8e108725e4a36a +Block 0019 [ 39]: c9e00b22f7ee55a0 +Block 0019 [ 40]: ab10cc8e2124e3b0 +Block 0019 [ 41]: 680b39f254c17357 +Block 0019 [ 42]: bb3f25cf9dec09bf +Block 0019 [ 43]: 9cded1b385da5a5c +Block 0019 [ 44]: a8824f4dde37cae2 +Block 0019 [ 45]: 640741dc69e5d6f6 +Block 0019 [ 46]: 3943126660d3ab0b +Block 0019 [ 47]: d035bafd210ac487 +Block 0019 [ 48]: 1329d8bc8de0280a +Block 0019 [ 49]: 294ee403668a24a4 +Block 0019 [ 50]: b9371e440144702d +Block 0019 [ 51]: 4d83f8a6a76e04e5 +Block 0019 [ 52]: f0ecca30f442c18b +Block 0019 [ 53]: 1b05e7da5a2a7708 +Block 0019 [ 54]: 206b24859e3b7817 +Block 0019 [ 55]: 3f48f4fba18a722a +Block 0019 [ 56]: f6b9ea739daec77d +Block 0019 [ 57]: e0646a6e2f3d7888 +Block 0019 [ 58]: b16c17c22375a7d6 +Block 0019 [ 59]: 89fc35a3719b82ed +Block 0019 [ 60]: c1b372d596d55826 +Block 0019 [ 61]: 122c39ffa8304b19 +Block 0019 [ 62]: d59a7a685c911edf +Block 0019 [ 63]: 0d9530abb61832ef +Block 0019 [ 64]: ac58dca00e9fce01 +Block 0019 [ 65]: f5962c53929d8c31 +Block 0019 [ 66]: 0d78b7ff701fe901 +Block 0019 [ 67]: a0f021b918b06bb3 +Block 0019 [ 68]: 9c5d043e9d746ae8 +Block 0019 [ 69]: 3f5e29d072761db1 +Block 0019 [ 70]: c3ee3470217337bf +Block 0019 [ 71]: 4125236e2528aa90 +Block 0019 [ 72]: 40c3a08d6c07650b +Block 0019 [ 73]: 71ad98ff1278387a +Block 0019 [ 74]: ab60b3e13af4a91b +Block 0019 [ 75]: 2014763714f5a399 +Block 0019 [ 76]: 1311f2de0099b0d4 +Block 0019 [ 77]: c740e9ed79e3adcf +Block 0019 [ 78]: fae29a8949a373b2 +Block 0019 [ 79]: 9656ccc5932cf87f +Block 0019 [ 80]: 80e5d6fd6d78ecc7 +Block 0019 [ 81]: 63881ea17dbd6af8 +Block 0019 [ 82]: 27031c2db85a88c9 +Block 0019 [ 83]: 225fcd42ace4217d +Block 0019 [ 84]: 630d473ffe3ea3fa +Block 0019 [ 85]: b930183e630ee15a +Block 0019 [ 86]: 99b0a373d0700de4 +Block 0019 [ 87]: ac67d86ade7a0ff3 +Block 0019 [ 88]: 960346c43a4274b0 +Block 0019 [ 89]: 07bd044bcccec75a +Block 0019 [ 90]: ec1032137ca21709 +Block 0019 [ 91]: 46bf9749f28f7d1a +Block 0019 [ 92]: 9b1c7277bb9d5ab1 +Block 0019 [ 93]: e0c200f2bc1ddb26 +Block 0019 [ 94]: e31376b9283d63ed +Block 0019 [ 95]: 26dfa5fe7517caab +Block 0019 [ 96]: eb6f2eb775379ad0 +Block 0019 [ 97]: ee0f910cf9f8f31a +Block 0019 [ 98]: 06b5103d17d2989d +Block 0019 [ 99]: a9008a2572950c2b +Block 0019 [100]: 62d96078e0e320a6 +Block 0019 [101]: df7bf4070f3a1530 +Block 0019 [102]: 892d3bdbd986be5d +Block 0019 [103]: e64a5e43fb9f6b4a +Block 0019 [104]: 620297da0ccae536 +Block 0019 [105]: ea388ef4cbd46326 +Block 0019 [106]: 70a971c66a94fadc +Block 0019 [107]: 30d6ed877a5d8484 +Block 0019 [108]: 90066a6e95d77f87 +Block 0019 [109]: 46170065f3945fcc +Block 0019 [110]: 5eec3c145bcc73ad +Block 0019 [111]: 9ed9b4503bd9bd18 +Block 0019 [112]: b7b6bdfed4116990 +Block 0019 [113]: 418511a8dda758e3 +Block 0019 [114]: 8e79e8268e4f28b4 +Block 0019 [115]: cd76ba2354acc3f7 +Block 0019 [116]: c2ea82d31473fbad +Block 0019 [117]: 44f19f11aa6c6eec +Block 0019 [118]: 5317b3b060485c0c +Block 0019 [119]: 1a8cf52343a2f35f +Block 0019 [120]: 54245b8759ac29f8 +Block 0019 [121]: 1d446c77f484be94 +Block 0019 [122]: 30b3ce2ea67ccda1 +Block 0019 [123]: 7f86cadfd8d2e406 +Block 0019 [124]: 03a748ad48712800 +Block 0019 [125]: 98e39c608dce89b7 +Block 0019 [126]: 89467383917bcab9 +Block 0019 [127]: 679a4a7f7a32645b +Block 0020 [ 0]: 269b4f54d5b6ea86 +Block 0020 [ 1]: 3e8f0e7bfa7f9b18 +Block 0020 [ 2]: 3c24ba9a51fae5a4 +Block 0020 [ 3]: 710ea18a16c6b046 +Block 0020 [ 4]: 68e94ffbde56ad2f +Block 0020 [ 5]: 86da1a6a88291d99 +Block 0020 [ 6]: 8cfaac3fe27fc668 +Block 0020 [ 7]: eed4b933fab3a449 +Block 0020 [ 8]: f71c3da612229377 +Block 0020 [ 9]: 3368fca33417690e +Block 0020 [ 10]: 0122102ca85016da +Block 0020 [ 11]: 787753a175ccb6e9 +Block 0020 [ 12]: be72a2fb1a353c25 +Block 0020 [ 13]: 04141fca4af1d143 +Block 0020 [ 14]: d5ff0e4f8bf7083b +Block 0020 [ 15]: c9414c9628e8b42a +Block 0020 [ 16]: 2c715fb098bccba6 +Block 0020 [ 17]: 4f503c04dc96c4a7 +Block 0020 [ 18]: 410e1febb9942559 +Block 0020 [ 19]: 1cf639f21af783da +Block 0020 [ 20]: 1c1435c8a6f82db2 +Block 0020 [ 21]: f1cd6ac7f46302f0 +Block 0020 [ 22]: 642393e4685039cd +Block 0020 [ 23]: 337e7cdd34a96b5d +Block 0020 [ 24]: 69d74b6ed0058f4c +Block 0020 [ 25]: 5a7f2ae1c692eaaf +Block 0020 [ 26]: 4492c035073d26af +Block 0020 [ 27]: e8a02ecc89abe328 +Block 0020 [ 28]: 3bc9c8c5dadda071 +Block 0020 [ 29]: cdfb2fcf7e0cd089 +Block 0020 [ 30]: 2e6cae86d961e86a +Block 0020 [ 31]: bb4c8da8c790e028 +Block 0020 [ 32]: ad0eeb7a7acbfb5f +Block 0020 [ 33]: e87a8fb9e2adbb04 +Block 0020 [ 34]: 6321586882426a05 +Block 0020 [ 35]: 74f28496cb02d128 +Block 0020 [ 36]: 1eb5bfd4db4a9a6c +Block 0020 [ 37]: 2ac3a783b8d8270f +Block 0020 [ 38]: a0d668f390021153 +Block 0020 [ 39]: c24108c03011b66d +Block 0020 [ 40]: 051fdb3e3f3aed34 +Block 0020 [ 41]: 484bc346942d1cbc +Block 0020 [ 42]: 9872e0ba4d324643 +Block 0020 [ 43]: 634e78730386b24b +Block 0020 [ 44]: 0d45f77882cac20a +Block 0020 [ 45]: 2563d91cdc8769ee +Block 0020 [ 46]: d15ce3d51e52a2a7 +Block 0020 [ 47]: a2fe0729f7ac8808 +Block 0020 [ 48]: 8e25f4fe2233ece5 +Block 0020 [ 49]: 39ed8579f13d1a19 +Block 0020 [ 50]: dd377af4aea398aa +Block 0020 [ 51]: 7515ba75210832ff +Block 0020 [ 52]: 0575630fd37e1f53 +Block 0020 [ 53]: 6f9912cf58d98dc6 +Block 0020 [ 54]: ef86cc11eb440d76 +Block 0020 [ 55]: ca50b1e8f855acf7 +Block 0020 [ 56]: 893c938d4e382afa +Block 0020 [ 57]: 7ca5580e9832a0bc +Block 0020 [ 58]: b375c7ea7d45fb66 +Block 0020 [ 59]: 836875f69d7226b0 +Block 0020 [ 60]: ffe41d0d91068504 +Block 0020 [ 61]: 989828f2ea37d7e1 +Block 0020 [ 62]: 43dd0fef0eb1ec0b +Block 0020 [ 63]: 77f86256c1d7b23b +Block 0020 [ 64]: 46b433077021cc67 +Block 0020 [ 65]: 7f7e8e5b69c96716 +Block 0020 [ 66]: 4165168edff2204c +Block 0020 [ 67]: 08c41002eed0d2d1 +Block 0020 [ 68]: f1cb8faed68a26f0 +Block 0020 [ 69]: 0065ca90c981a82f +Block 0020 [ 70]: 3ba799f102db0422 +Block 0020 [ 71]: e820f5f562ea5ef4 +Block 0020 [ 72]: 8f43af626790b9f1 +Block 0020 [ 73]: a6a51921588adc5c +Block 0020 [ 74]: cbeb139bd0a91bb2 +Block 0020 [ 75]: d82f0cf77c8e41b7 +Block 0020 [ 76]: 3d06e68f63323b5f +Block 0020 [ 77]: 91b6755b9db0d038 +Block 0020 [ 78]: e8c6f6c0cc63a663 +Block 0020 [ 79]: 7d94ea6a2ee23a2f +Block 0020 [ 80]: c245f840027ccbd2 +Block 0020 [ 81]: 46ff208f126d520d +Block 0020 [ 82]: 01f8167f979679d9 +Block 0020 [ 83]: 2a9d18db600ec858 +Block 0020 [ 84]: 11bbdca37897fcad +Block 0020 [ 85]: 141a41ff68571e1f +Block 0020 [ 86]: 390c617bb94bea7e +Block 0020 [ 87]: 556aa8fed6a96cf1 +Block 0020 [ 88]: fc21092d05f38a09 +Block 0020 [ 89]: e56ef53df73a4f96 +Block 0020 [ 90]: da9cbd854a3cffc9 +Block 0020 [ 91]: 5cf4c3ad805e9f91 +Block 0020 [ 92]: 431bf9648a49612c +Block 0020 [ 93]: 2663d89c48654b6e +Block 0020 [ 94]: e79521d0d32cdf99 +Block 0020 [ 95]: 4f1ceca1c344f7bf +Block 0020 [ 96]: 89330e4f55dbf4fc +Block 0020 [ 97]: f4338c691915e196 +Block 0020 [ 98]: 26b1101246f9bcdc +Block 0020 [ 99]: f8432055e31fc4a8 +Block 0020 [100]: 3266a7a5c4dad24c +Block 0020 [101]: 94c854dd76241f0d +Block 0020 [102]: 99bee1ce63474a15 +Block 0020 [103]: 74bb4aa98d4eb3a1 +Block 0020 [104]: 3cfc2ac312e1c45c +Block 0020 [105]: 6b883da6c5ddc9c4 +Block 0020 [106]: 0743f1fdce6a56ee +Block 0020 [107]: 7c69a5e1a0dcf03e +Block 0020 [108]: fa66426c585f3464 +Block 0020 [109]: 99a8ec507bc26e0d +Block 0020 [110]: 7a28ca634a80f5fe +Block 0020 [111]: 600fba11d691a99c +Block 0020 [112]: d67094eac4f48e31 +Block 0020 [113]: 80376da2f9893c8e +Block 0020 [114]: 8d13887a2e6e16f7 +Block 0020 [115]: 64edf8096260ecec +Block 0020 [116]: 36c2885b38e52b20 +Block 0020 [117]: 459b84990d0598e5 +Block 0020 [118]: 3db3b437866cfec5 +Block 0020 [119]: 294035be518d3bbb +Block 0020 [120]: b9dfc1c086e87c0a +Block 0020 [121]: 510eaff39735d8bc +Block 0020 [122]: ab9ced4efc23c16d +Block 0020 [123]: ed0985c99ce8f77d +Block 0020 [124]: e862b3f058619ddd +Block 0020 [125]: 457d0d4ceca5cb31 +Block 0020 [126]: 1bb73497b80c8610 +Block 0020 [127]: 1156041f667292ff +Block 0021 [ 0]: 17b4c2abe86f2897 +Block 0021 [ 1]: cbb482190938ccd8 +Block 0021 [ 2]: 09e6454421255c7b +Block 0021 [ 3]: 34ea66797350bbf4 +Block 0021 [ 4]: b08b039be403c4fb +Block 0021 [ 5]: c12bb73dac7934ae +Block 0021 [ 6]: 3fd05c8a944dfebc +Block 0021 [ 7]: 7d9e0e6c0c0c1c46 +Block 0021 [ 8]: ca45c30e190203b8 +Block 0021 [ 9]: a50382d342a306f4 +Block 0021 [ 10]: 304f0a3f51cee32a +Block 0021 [ 11]: 9bd7ec4d41224ebc +Block 0021 [ 12]: 3644bd6b37a9c65e +Block 0021 [ 13]: 318da00f1ed8c6e6 +Block 0021 [ 14]: da2d235e81557df5 +Block 0021 [ 15]: b78edb91572aaac6 +Block 0021 [ 16]: 74a9d0e5cb2001bf +Block 0021 [ 17]: d92bf9e32a07b0fc +Block 0021 [ 18]: 52dffb55b33e624a +Block 0021 [ 19]: 490e48183d213f68 +Block 0021 [ 20]: e28ec7a2771feebc +Block 0021 [ 21]: 9fb9637f8be653dc +Block 0021 [ 22]: c99bbc6df1e6c0a7 +Block 0021 [ 23]: ba1e24ed83829bd8 +Block 0021 [ 24]: 8abe8cd81b291831 +Block 0021 [ 25]: a5d3f6aebf6cd859 +Block 0021 [ 26]: 98dda64e3d33c005 +Block 0021 [ 27]: 97be589257c84bf5 +Block 0021 [ 28]: e27a06b1ff130d3a +Block 0021 [ 29]: 6ec7117cea210b36 +Block 0021 [ 30]: 111acd56ac355eba +Block 0021 [ 31]: a8eef71b826e7eab +Block 0021 [ 32]: 4ec68125a7cfb615 +Block 0021 [ 33]: 932bd9ca8390c775 +Block 0021 [ 34]: 51b4107894563221 +Block 0021 [ 35]: 4f9bd56272c5d569 +Block 0021 [ 36]: 1124c4abc2802bd7 +Block 0021 [ 37]: ab9d5b19efca80bc +Block 0021 [ 38]: be9e5035c3d260a1 +Block 0021 [ 39]: 27e7df352e918662 +Block 0021 [ 40]: d18118afc14e3bd3 +Block 0021 [ 41]: 4f1ba18852decdd1 +Block 0021 [ 42]: 7cf79363017d4911 +Block 0021 [ 43]: 17a5cc740117b5a1 +Block 0021 [ 44]: d2477f7f3d5d028b +Block 0021 [ 45]: 4ca5cd043721ebde +Block 0021 [ 46]: fddbb22550b51849 +Block 0021 [ 47]: 97ae58c4799ca750 +Block 0021 [ 48]: 452df8cca9a156bd +Block 0021 [ 49]: fb11d84264de9b30 +Block 0021 [ 50]: fd3b057638165488 +Block 0021 [ 51]: 0d813d621a3366c9 +Block 0021 [ 52]: 4756062fd3bd46f8 +Block 0021 [ 53]: 696bca682db5bb74 +Block 0021 [ 54]: 32d80dfe2be958d3 +Block 0021 [ 55]: 1f6c4037c090c687 +Block 0021 [ 56]: 9139c4d021534fac +Block 0021 [ 57]: 43311d46e08c4c88 +Block 0021 [ 58]: e0f4a375ef393912 +Block 0021 [ 59]: bf1db582f22ffc4f +Block 0021 [ 60]: 0a71ec4c54667179 +Block 0021 [ 61]: 6eb26d0a6f9d40d9 +Block 0021 [ 62]: 022f4fc9d70b674b +Block 0021 [ 63]: 366694b68ac94113 +Block 0021 [ 64]: 87c49c593c614f27 +Block 0021 [ 65]: cb7691ade7b4e3db +Block 0021 [ 66]: 9ab50d350f3b76c5 +Block 0021 [ 67]: 963e8b4ba65faf26 +Block 0021 [ 68]: c8b6caeaadec21b0 +Block 0021 [ 69]: f39f45a19bd109e8 +Block 0021 [ 70]: 2366f4f4cde23673 +Block 0021 [ 71]: 757a9d6c2cac7ca8 +Block 0021 [ 72]: 2096a46aca98ef6f +Block 0021 [ 73]: 5c8928a3be29c46e +Block 0021 [ 74]: a8658d5f9bb9ac48 +Block 0021 [ 75]: a2f678d6c78f2bea +Block 0021 [ 76]: b5ca9f573fd46c28 +Block 0021 [ 77]: 1c4c588ffeaa7304 +Block 0021 [ 78]: 22fe1ea2e21f58dd +Block 0021 [ 79]: 0383af29fc89c577 +Block 0021 [ 80]: 4cd4d3d68dde2827 +Block 0021 [ 81]: d50342ac6da4265c +Block 0021 [ 82]: 4ef2fc0217047481 +Block 0021 [ 83]: 9b4abfcae05f45ec +Block 0021 [ 84]: 65aa951feacbd437 +Block 0021 [ 85]: 86c133b88597ed58 +Block 0021 [ 86]: 3b363bce9f4ee3ec +Block 0021 [ 87]: 7acbee487ed5446b +Block 0021 [ 88]: 942b1703ff00610f +Block 0021 [ 89]: b105c6a5ed4196b5 +Block 0021 [ 90]: d70d811c3f30d240 +Block 0021 [ 91]: 29ddada97ea6101b +Block 0021 [ 92]: 99819a3ffdbd958a +Block 0021 [ 93]: e023fb3f4d4ad3d6 +Block 0021 [ 94]: baab5aef9e588c17 +Block 0021 [ 95]: dce51988a7418b79 +Block 0021 [ 96]: 48fdadbac5a11a65 +Block 0021 [ 97]: 42b7b66efffb8f5e +Block 0021 [ 98]: c7c8f3f6f7bc5d85 +Block 0021 [ 99]: 0a7738cd6a5fad47 +Block 0021 [100]: 8b3a03f8fb566033 +Block 0021 [101]: 49723e452bb29a70 +Block 0021 [102]: 98e32b7a5f4f8471 +Block 0021 [103]: 1696713cf1cfeca5 +Block 0021 [104]: 42c3ba036c3e764f +Block 0021 [105]: 0907d697be28fdbf +Block 0021 [106]: b172dcbf1332c5f6 +Block 0021 [107]: bc90c713f8d177ab +Block 0021 [108]: c74b2b83df4a3fb4 +Block 0021 [109]: 806796945f7970ee +Block 0021 [110]: 50996835394d4221 +Block 0021 [111]: 02476eb09a0a98dc +Block 0021 [112]: 5f9af4ebce5aab37 +Block 0021 [113]: 60c1de13240a58d0 +Block 0021 [114]: 332cb5d422cf7df9 +Block 0021 [115]: 2c210191386ec581 +Block 0021 [116]: a38b29631d4127a4 +Block 0021 [117]: c4b6459d55cfb424 +Block 0021 [118]: a925a87f6510e076 +Block 0021 [119]: 6d39268556f0a2c7 +Block 0021 [120]: 716f35a0f2749fa7 +Block 0021 [121]: aa80e7f9ebf68e6d +Block 0021 [122]: 57ab564f64cd5fac +Block 0021 [123]: 58019bb64c24d659 +Block 0021 [124]: b86acb9911e8e025 +Block 0021 [125]: a8aee8d75e91cc71 +Block 0021 [126]: 6ab7210d4ddcf8b2 +Block 0021 [127]: 4311b77316be2c79 +Block 0022 [ 0]: 61a6ff51085e1dfe +Block 0022 [ 1]: 1f5bf5edca141a25 +Block 0022 [ 2]: 0eb22ca5c3fc8bfd +Block 0022 [ 3]: 096be76c523a2ca8 +Block 0022 [ 4]: e9fe3f7d5ac67faf +Block 0022 [ 5]: 5acadc120ef7884d +Block 0022 [ 6]: ec49fda5c88742b3 +Block 0022 [ 7]: 902b13afbb4107be +Block 0022 [ 8]: 744d2922934d0beb +Block 0022 [ 9]: e6d72c7f5d1c532a +Block 0022 [ 10]: ec6356952d67f6dd +Block 0022 [ 11]: 3d4aa12d18e8352e +Block 0022 [ 12]: ff896a193a375011 +Block 0022 [ 13]: b3b4883dccf68953 +Block 0022 [ 14]: 4a620343cf266a7c +Block 0022 [ 15]: 5404bc64195b1f4f +Block 0022 [ 16]: 69494f69154fcb1d +Block 0022 [ 17]: 947db329bbdb4cd8 +Block 0022 [ 18]: 486a729f03eab8df +Block 0022 [ 19]: 9c570aa48dbdd34b +Block 0022 [ 20]: c71e71a0b0f41441 +Block 0022 [ 21]: d09d043418ee3ecd +Block 0022 [ 22]: 73fe1423a65144c3 +Block 0022 [ 23]: fbd495d2d82df0aa +Block 0022 [ 24]: ed4617c1bc87968c +Block 0022 [ 25]: 5ec6eaf86871340e +Block 0022 [ 26]: 97329b3572e7f3ba +Block 0022 [ 27]: 08fe3a910411f8e8 +Block 0022 [ 28]: d2d92688687f769f +Block 0022 [ 29]: 0572673de37c3623 +Block 0022 [ 30]: 6baeb3fad387399a +Block 0022 [ 31]: 03b6857fbade033b +Block 0022 [ 32]: dec7d2fb4389a1f4 +Block 0022 [ 33]: 62bf9de8caeef073 +Block 0022 [ 34]: 3535db8501d42797 +Block 0022 [ 35]: 426148dffb8b6c6c +Block 0022 [ 36]: cfdbf603331aa1ba +Block 0022 [ 37]: d526ff87d8bbf7d8 +Block 0022 [ 38]: ec27978a3066ffa8 +Block 0022 [ 39]: 07c5d9f1ac3504eb +Block 0022 [ 40]: 03e4290511b51612 +Block 0022 [ 41]: 65709c94ef2664ca +Block 0022 [ 42]: 4c2794cee1ca9dea +Block 0022 [ 43]: b3f53335e16434aa +Block 0022 [ 44]: ce63271edf85caf7 +Block 0022 [ 45]: 459b724ef24ef009 +Block 0022 [ 46]: 1c5e9e9668b3ba6a +Block 0022 [ 47]: 3d76a5f2e85365af +Block 0022 [ 48]: bbff41578ebc089a +Block 0022 [ 49]: 8c3e3d9e30f82118 +Block 0022 [ 50]: 154541c874a970d5 +Block 0022 [ 51]: e28b76c2f1255dfe +Block 0022 [ 52]: 857d0590f8d33c50 +Block 0022 [ 53]: d631fe61e5af784a +Block 0022 [ 54]: 7b45c83168fd3457 +Block 0022 [ 55]: af5e354071395c20 +Block 0022 [ 56]: d6e032527c5e42ae +Block 0022 [ 57]: 209888f062668f8e +Block 0022 [ 58]: b8d138d8fcb57269 +Block 0022 [ 59]: 22a9ab6cc0c1a912 +Block 0022 [ 60]: 704a6260aebf0689 +Block 0022 [ 61]: 65819c67058eeedb +Block 0022 [ 62]: 1156016eaaa2c028 +Block 0022 [ 63]: 07ab5e27a7ee85f1 +Block 0022 [ 64]: ca06f6545486bc04 +Block 0022 [ 65]: 6d5e5e4685da6424 +Block 0022 [ 66]: 2d8b6e05f2e649f4 +Block 0022 [ 67]: e1bb5e3165663da1 +Block 0022 [ 68]: cfae06b12eb26241 +Block 0022 [ 69]: 30368e8c03d0f6cb +Block 0022 [ 70]: ea9e4e5a1a15220b +Block 0022 [ 71]: 0ced69387046c774 +Block 0022 [ 72]: 32bd0f765f6d2e90 +Block 0022 [ 73]: a537a0cf7a48de71 +Block 0022 [ 74]: 40f7ad34f549721d +Block 0022 [ 75]: 16f48f8c860c255c +Block 0022 [ 76]: 9aaddbc5643bf9fd +Block 0022 [ 77]: 4fc5670d938c4060 +Block 0022 [ 78]: d9930f3b78aa29d0 +Block 0022 [ 79]: d4e43d6280ab3b51 +Block 0022 [ 80]: da10e01944beb383 +Block 0022 [ 81]: f08884432d877b53 +Block 0022 [ 82]: ec57f639f4d371b9 +Block 0022 [ 83]: 904a2ea3a5d0307c +Block 0022 [ 84]: 2d49f8d9f9b6dce1 +Block 0022 [ 85]: e6da1ba672b7bcef +Block 0022 [ 86]: b2d22296480d6b8f +Block 0022 [ 87]: f78b659c7b32b534 +Block 0022 [ 88]: be564c07566930fb +Block 0022 [ 89]: 16d4223b5cbadf2f +Block 0022 [ 90]: 06d18d9da6c73ee6 +Block 0022 [ 91]: 3e44dcfd7da27d18 +Block 0022 [ 92]: 217bc24e2bae57f7 +Block 0022 [ 93]: 49a8a3f1152c7037 +Block 0022 [ 94]: b63c0c5729d5261b +Block 0022 [ 95]: 317ad8dec554eb1e +Block 0022 [ 96]: 1cd40e3803488528 +Block 0022 [ 97]: e93ffc3a78bedcb7 +Block 0022 [ 98]: f28c842c550d2ab1 +Block 0022 [ 99]: 4d311be4c8a29098 +Block 0022 [100]: 9c5cf9159c8eb3fc +Block 0022 [101]: 1e58e5b4bb1b28a9 +Block 0022 [102]: 27337340376d8e81 +Block 0022 [103]: 6ced8f7b00504dc5 +Block 0022 [104]: c3e20cdbe90d1d09 +Block 0022 [105]: fa4436423628b433 +Block 0022 [106]: 5574d238558a591e +Block 0022 [107]: ebddbd36bdb1415b +Block 0022 [108]: df5cda5812a18e7c +Block 0022 [109]: 9f9aade1bb756c3a +Block 0022 [110]: 33d27b3747e16282 +Block 0022 [111]: ffb19eeed77e0f70 +Block 0022 [112]: 7e06ba7933616246 +Block 0022 [113]: 94b313c4b145defb +Block 0022 [114]: 8df180f62502dd74 +Block 0022 [115]: 5181f971e6917593 +Block 0022 [116]: 16c113e1c1b916a7 +Block 0022 [117]: 915bfbe0cea5c438 +Block 0022 [118]: 9195ba860ffd4924 +Block 0022 [119]: 084b15c7884b460b +Block 0022 [120]: b85902697f1fbf9d +Block 0022 [121]: b9a66a8ac079ab07 +Block 0022 [122]: 5a715fed9ba3ebf2 +Block 0022 [123]: 42ce627af9462ed0 +Block 0022 [124]: e49799409e744ba0 +Block 0022 [125]: 9f54148151c32bae +Block 0022 [126]: 6532db4062d5cae5 +Block 0022 [127]: 1c6ae63866aca622 +Block 0023 [ 0]: 71b6b6aca18b78a6 +Block 0023 [ 1]: 00ba35d5c7a24fe8 +Block 0023 [ 2]: 23b225256d68661e +Block 0023 [ 3]: 49648a8cac7875c8 +Block 0023 [ 4]: 052e7d601ff9c1f8 +Block 0023 [ 5]: 7fba093144801e1f +Block 0023 [ 6]: 7927b854cfd88de7 +Block 0023 [ 7]: a11ea2bc81caf36b +Block 0023 [ 8]: b7e7ae76ae03126d +Block 0023 [ 9]: 60d0807e48e5db71 +Block 0023 [ 10]: ddf1d2beef8a2dee +Block 0023 [ 11]: b9924481df9d2cd3 +Block 0023 [ 12]: d0b26e2edeadd78e +Block 0023 [ 13]: 6913abfc0351b6b4 +Block 0023 [ 14]: cad416dcaf5dd5fb +Block 0023 [ 15]: a43f1deada1a802b +Block 0023 [ 16]: 2150535e28518ddc +Block 0023 [ 17]: 9ab467acbf91fd64 +Block 0023 [ 18]: 9afb5ba8ebaa158b +Block 0023 [ 19]: 743713b59576c89f +Block 0023 [ 20]: 40a9b9dfd096ed85 +Block 0023 [ 21]: b0563463bb53de6e +Block 0023 [ 22]: a2a02b23689dca10 +Block 0023 [ 23]: 7fabf80d6e78eed6 +Block 0023 [ 24]: 0fa6d2177a605bc0 +Block 0023 [ 25]: ed6766d412cf1e54 +Block 0023 [ 26]: bb0480e3b472ba6b +Block 0023 [ 27]: da084b05e5454f0f +Block 0023 [ 28]: 83a895c52c11834f +Block 0023 [ 29]: 07a7edef2841be43 +Block 0023 [ 30]: d612d8cee619b42d +Block 0023 [ 31]: d9b8fe0ca5898f99 +Block 0023 [ 32]: 70f2724814542a4a +Block 0023 [ 33]: 5920b6bc3b6b3caa +Block 0023 [ 34]: 144b26a1e650a6d4 +Block 0023 [ 35]: d91a86c85aa62ca4 +Block 0023 [ 36]: 8d99b9be60c56aec +Block 0023 [ 37]: 227e477f539aeb59 +Block 0023 [ 38]: d364dd616cc3b90f +Block 0023 [ 39]: 38f9643fb6637388 +Block 0023 [ 40]: 1d394841225a0066 +Block 0023 [ 41]: ec35e6b57868aa4f +Block 0023 [ 42]: 8ff8e59354814fa3 +Block 0023 [ 43]: 75d87416cd0225db +Block 0023 [ 44]: f16a8d875e127f26 +Block 0023 [ 45]: e92a4d13dc6b4d72 +Block 0023 [ 46]: a8ad1696cea7b54a +Block 0023 [ 47]: 8b3f716ce03aa77f +Block 0023 [ 48]: f6e70eb1fb494101 +Block 0023 [ 49]: 58e27c7dc8a70aa5 +Block 0023 [ 50]: 493f01c81a9b6b27 +Block 0023 [ 51]: 023efca7911d5bc7 +Block 0023 [ 52]: e33e448c98a97f10 +Block 0023 [ 53]: b0261944d98e2c31 +Block 0023 [ 54]: 9593200f81e7972f +Block 0023 [ 55]: 4f66e5a211c0ebce +Block 0023 [ 56]: 54ba34f05b2d3546 +Block 0023 [ 57]: dfd889d802536436 +Block 0023 [ 58]: 9abd4e9759d11d54 +Block 0023 [ 59]: b4752150d4f62535 +Block 0023 [ 60]: f1e9f64b7b3b60df +Block 0023 [ 61]: 81d184500bfa18c6 +Block 0023 [ 62]: bcd72f47ef6b9fe0 +Block 0023 [ 63]: 140c4f355bc6b553 +Block 0023 [ 64]: 8d4f7f8418330c7c +Block 0023 [ 65]: 6e3afc414724d608 +Block 0023 [ 66]: bc267a035071bc1a +Block 0023 [ 67]: 156fae6c712c065b +Block 0023 [ 68]: f9c57277382a1f89 +Block 0023 [ 69]: 0299652c21ba7eae +Block 0023 [ 70]: 3cb2859906a40ced +Block 0023 [ 71]: 53f71c9235df76b5 +Block 0023 [ 72]: 2df91f772efc52c4 +Block 0023 [ 73]: c796cad57787e135 +Block 0023 [ 74]: 9f578feb31fd77d6 +Block 0023 [ 75]: c09bd264239bc205 +Block 0023 [ 76]: cb44da110cb5b368 +Block 0023 [ 77]: 3bff59dfcccb50a4 +Block 0023 [ 78]: 0ab31a2ef1b93b29 +Block 0023 [ 79]: aa27612628dc4b4f +Block 0023 [ 80]: 641a26e82e94dd36 +Block 0023 [ 81]: 7e078b59d2827af7 +Block 0023 [ 82]: 3b5010c0fffb9674 +Block 0023 [ 83]: 7a7cfbcf82144d03 +Block 0023 [ 84]: e1f531fe11ae9627 +Block 0023 [ 85]: 4ee64eb4df28757a +Block 0023 [ 86]: ed0f36bcc988bd97 +Block 0023 [ 87]: 60dc8c5ae0338b1d +Block 0023 [ 88]: 5c4371dc7476482c +Block 0023 [ 89]: 2e1477181780fb98 +Block 0023 [ 90]: 33032e2d91f913af +Block 0023 [ 91]: 73ae22f0311ba5d8 +Block 0023 [ 92]: 83d30b9409e6b567 +Block 0023 [ 93]: a22134803a423a9a +Block 0023 [ 94]: 2546765a58acab4a +Block 0023 [ 95]: 45140ea710d5b1eb +Block 0023 [ 96]: 3fefc60626708193 +Block 0023 [ 97]: c49989661e0967cc +Block 0023 [ 98]: 956cb9090041edf0 +Block 0023 [ 99]: 85ce994e449272b1 +Block 0023 [100]: 77cbb274fd8546a3 +Block 0023 [101]: 820222b05ac04e86 +Block 0023 [102]: 9de2fb4747dd05cc +Block 0023 [103]: e47f6957d7bd52b5 +Block 0023 [104]: 453b5ebf33f91b87 +Block 0023 [105]: 666fd007ad7896f9 +Block 0023 [106]: 2786f30e5c14a822 +Block 0023 [107]: 161a849e41872871 +Block 0023 [108]: 79b0cfded556359e +Block 0023 [109]: 7c2f3eda92ba20d3 +Block 0023 [110]: 1440b52c7e60d1f8 +Block 0023 [111]: dc8134fc1139d38d +Block 0023 [112]: 99f47f609a2842c6 +Block 0023 [113]: cf71b12956787955 +Block 0023 [114]: 923f3c21d2b602eb +Block 0023 [115]: ef0eb85a0f0044d0 +Block 0023 [116]: d2d7cd413a3734a7 +Block 0023 [117]: 52c792c0299769ef +Block 0023 [118]: 87cfe0b332479275 +Block 0023 [119]: 09ae791666a1e1d7 +Block 0023 [120]: 5c6fe74964c18a98 +Block 0023 [121]: 65fc39dad202ef2a +Block 0023 [122]: d238f7673a7fc116 +Block 0023 [123]: 2c59c0ee6153643b +Block 0023 [124]: c808636d1c65d472 +Block 0023 [125]: 519346986007bb4e +Block 0023 [126]: 927c3fa1ea477d77 +Block 0023 [127]: 37c224071d594e0d +Block 0024 [ 0]: 9956a13b1b49a85e +Block 0024 [ 1]: eb4f6e16f84345b4 +Block 0024 [ 2]: 34f6ca61e8c33636 +Block 0024 [ 3]: 6619df465c5f5c38 +Block 0024 [ 4]: 26bee849a293cd26 +Block 0024 [ 5]: d935f8ce2a13010a +Block 0024 [ 6]: 520924f2c511c492 +Block 0024 [ 7]: 05c9abfd72f2ca8a +Block 0024 [ 8]: 734bd3d20a147017 +Block 0024 [ 9]: 680c0da85f1852db +Block 0024 [ 10]: 113faf1a430babd9 +Block 0024 [ 11]: 15e983b8123560c2 +Block 0024 [ 12]: bf5688b1cd7981a7 +Block 0024 [ 13]: 5db814aafe1ed2bf +Block 0024 [ 14]: 14cd28c8b2cf7803 +Block 0024 [ 15]: dcc18e8bd28e55d5 +Block 0024 [ 16]: 46e43400f0591055 +Block 0024 [ 17]: 2841dc8cb0d8cf95 +Block 0024 [ 18]: 58158a74bb3c194c +Block 0024 [ 19]: d0306f7ad12acb75 +Block 0024 [ 20]: 8dd0ccd0618c6944 +Block 0024 [ 21]: e292b0011d5d135d +Block 0024 [ 22]: c5ec0e7363dfb996 +Block 0024 [ 23]: 76d0e59bae0dcaa6 +Block 0024 [ 24]: b3582ae0d8f07720 +Block 0024 [ 25]: f08264f0e63f22ec +Block 0024 [ 26]: e5e831ae374d05d5 +Block 0024 [ 27]: 5a2e612598c01d0d +Block 0024 [ 28]: 3fba5724c4b5b898 +Block 0024 [ 29]: e833e8d79e08d5b7 +Block 0024 [ 30]: f427b869f5c1f3fc +Block 0024 [ 31]: 4b7d2b43fedf05de +Block 0024 [ 32]: a5e8d8d68f802ecd +Block 0024 [ 33]: 005f86378c842d77 +Block 0024 [ 34]: a4110ab6ae4dbdb4 +Block 0024 [ 35]: 0ad3d04b3a846de7 +Block 0024 [ 36]: 66f3472239cf48fa +Block 0024 [ 37]: 225ee0eb863c5474 +Block 0024 [ 38]: 7464f3987d5d780e +Block 0024 [ 39]: f02a6163175bdcc8 +Block 0024 [ 40]: 06e837a1ac826f07 +Block 0024 [ 41]: 63759540df7a5a2a +Block 0024 [ 42]: d804b31c5f48feda +Block 0024 [ 43]: 15390632d3e458c6 +Block 0024 [ 44]: 83c4211a657fa871 +Block 0024 [ 45]: e5b2232c95dbca6f +Block 0024 [ 46]: 3e99d6d6151e5169 +Block 0024 [ 47]: 80d9d65d4a9fc135 +Block 0024 [ 48]: 81ef675d5a8d33d7 +Block 0024 [ 49]: d791ecaf1a8c00b8 +Block 0024 [ 50]: 6d237b0014b9f4f3 +Block 0024 [ 51]: e2e8796d6cc66289 +Block 0024 [ 52]: d8f6d1f343c2aaaa +Block 0024 [ 53]: 7385abc47311c98d +Block 0024 [ 54]: ca72576fbe6eaea2 +Block 0024 [ 55]: 2d5f7c84c051a65a +Block 0024 [ 56]: a752e21c12698852 +Block 0024 [ 57]: f781ab22ef0001df +Block 0024 [ 58]: a5c09dfb70ee58d5 +Block 0024 [ 59]: b861372d101ff470 +Block 0024 [ 60]: 5da08c8421df97ab +Block 0024 [ 61]: 76c2459521edf83a +Block 0024 [ 62]: 7ea6c0dbac13c4e4 +Block 0024 [ 63]: 8f669c059c89658f +Block 0024 [ 64]: 901e1cb70e5bdada +Block 0024 [ 65]: 595e1291e3cbab62 +Block 0024 [ 66]: 4201eaf65a5494b4 +Block 0024 [ 67]: 6bfdb634efea5e73 +Block 0024 [ 68]: d4cce6cfd93349c7 +Block 0024 [ 69]: 3f3bf90f1ccf7d43 +Block 0024 [ 70]: d57d37b02100a068 +Block 0024 [ 71]: ec9a67f508dd0a5b +Block 0024 [ 72]: f353c388db97240a +Block 0024 [ 73]: b54d96369fd7e18f +Block 0024 [ 74]: 7cf8073613299bc6 +Block 0024 [ 75]: d34b71de098a5c34 +Block 0024 [ 76]: 8896dc90580c9acb +Block 0024 [ 77]: f3d2e7edc21e6d17 +Block 0024 [ 78]: 0aa32dff469c42f4 +Block 0024 [ 79]: d84d6bd84a3f5704 +Block 0024 [ 80]: 592d29696aa1611b +Block 0024 [ 81]: 4c769b1a91910e3c +Block 0024 [ 82]: d9181ac139052fa7 +Block 0024 [ 83]: 7bf07944f4e78370 +Block 0024 [ 84]: a13c3bb0f9367b49 +Block 0024 [ 85]: 3c4bf4c3b33b4414 +Block 0024 [ 86]: 9408f64ba6cbb2af +Block 0024 [ 87]: 9e572c0ab8a66682 +Block 0024 [ 88]: 05146fe0279cc63a +Block 0024 [ 89]: 392e3a7f2ff4c0af +Block 0024 [ 90]: 6cb1b4abc10f26a8 +Block 0024 [ 91]: a97380cef9f9c1d7 +Block 0024 [ 92]: a39611d6f966761d +Block 0024 [ 93]: a1be82dfbebdc6f6 +Block 0024 [ 94]: ab962e96f1066c7d +Block 0024 [ 95]: 427b91b8b9a1f976 +Block 0024 [ 96]: 3c6fb8f326956c60 +Block 0024 [ 97]: 52263ae65140b3c5 +Block 0024 [ 98]: 4b21f82c2026b56d +Block 0024 [ 99]: 9b6689849e05f482 +Block 0024 [100]: 1898c9348c12d11a +Block 0024 [101]: 95da7290a7784974 +Block 0024 [102]: 0f025fba1a081ef6 +Block 0024 [103]: d2212444055affa3 +Block 0024 [104]: 3d0b9a0e26ba4c60 +Block 0024 [105]: a96f202adbb1dcc0 +Block 0024 [106]: 5f2d801ffbe742a8 +Block 0024 [107]: 398b83e5c3b82ec6 +Block 0024 [108]: 9bb98a30513045e0 +Block 0024 [109]: 9e49507f75e0e273 +Block 0024 [110]: b6167732adb9ace3 +Block 0024 [111]: 14c51dd25c3b0711 +Block 0024 [112]: d23719bfb63c813f +Block 0024 [113]: 466f1d49562849ea +Block 0024 [114]: 5f65af04730f1d3d +Block 0024 [115]: 4ae36efe0c348731 +Block 0024 [116]: 3b1cf728f294dcc1 +Block 0024 [117]: 8afc9d93b01daac7 +Block 0024 [118]: fb5387bac10ba1fe +Block 0024 [119]: 5600926e4360daf7 +Block 0024 [120]: 910a656b9b23d68b +Block 0024 [121]: 400469d9842f7c37 +Block 0024 [122]: ae81a2f8022e7b9a +Block 0024 [123]: 55124c8da08f7aab +Block 0024 [124]: d792973dc799ad1a +Block 0024 [125]: 46a5fbef3053ef4d +Block 0024 [126]: 54dd3ef21014e501 +Block 0024 [127]: 874e921013f3b13d +Block 0025 [ 0]: f40ac8f5845def30 +Block 0025 [ 1]: 1f4296441bbd6779 +Block 0025 [ 2]: 65f2730864a5a27c +Block 0025 [ 3]: 41cee44733d6a4eb +Block 0025 [ 4]: 37972b4e9c1337f0 +Block 0025 [ 5]: 0da94ac748ecfccc +Block 0025 [ 6]: d00ec56bd42ab356 +Block 0025 [ 7]: 9995be2379853fce +Block 0025 [ 8]: 5e133846cb0874c8 +Block 0025 [ 9]: d6aa81a7f7fe4116 +Block 0025 [ 10]: 5c23e4d73838297b +Block 0025 [ 11]: de4046378b228598 +Block 0025 [ 12]: 82033a1812a810b7 +Block 0025 [ 13]: 36d19a02b1197e62 +Block 0025 [ 14]: 27847cf3eb8fed8c +Block 0025 [ 15]: ca441892fd7a3298 +Block 0025 [ 16]: e7d1ee4610813059 +Block 0025 [ 17]: e95b1311a07e4d59 +Block 0025 [ 18]: 9a74bbad3499e48b +Block 0025 [ 19]: 3fa0ce3260f1c2a2 +Block 0025 [ 20]: 2c02959f4e1baf3c +Block 0025 [ 21]: c681e7d24a07ed41 +Block 0025 [ 22]: 865fde98d28f65c6 +Block 0025 [ 23]: cd7ecc6a328adea8 +Block 0025 [ 24]: 7a84b37001af50da +Block 0025 [ 25]: 49e511ec6f403431 +Block 0025 [ 26]: 5a69a0ddbf783485 +Block 0025 [ 27]: 578f49f8c13f2d16 +Block 0025 [ 28]: 5695e8d9cb8d4a0d +Block 0025 [ 29]: 85a7a121175fc91b +Block 0025 [ 30]: e437059a8c03b9e2 +Block 0025 [ 31]: bab846561467bc3e +Block 0025 [ 32]: c281376ed6bc4f21 +Block 0025 [ 33]: 7cd34007c72e99a7 +Block 0025 [ 34]: 969adb28d883462c +Block 0025 [ 35]: 71763c3e19cfd5b7 +Block 0025 [ 36]: 8388042bbb291add +Block 0025 [ 37]: a29b5a461d706d9a +Block 0025 [ 38]: b4f60478fad36637 +Block 0025 [ 39]: 260fd795fa3fac08 +Block 0025 [ 40]: 73c8ef82f97dacec +Block 0025 [ 41]: d26b5e8add1ec2ac +Block 0025 [ 42]: 3d6f281924c49974 +Block 0025 [ 43]: 99a45ea9a1da887a +Block 0025 [ 44]: 1eb184eb695585c8 +Block 0025 [ 45]: 510c194fb94a8610 +Block 0025 [ 46]: acc7ebcd8b3819d9 +Block 0025 [ 47]: 4fe39efc1efe8096 +Block 0025 [ 48]: 1066a79624bc93b7 +Block 0025 [ 49]: a6d83c9fbbcde211 +Block 0025 [ 50]: a0078f9f08d55000 +Block 0025 [ 51]: 3a51a4ad52307cfd +Block 0025 [ 52]: 7650dc6bf608bb68 +Block 0025 [ 53]: 6bf46dd79e2e379f +Block 0025 [ 54]: b3c98c3f49ebdea6 +Block 0025 [ 55]: 4634c08aff58b2cb +Block 0025 [ 56]: 66b7637206c1241d +Block 0025 [ 57]: 97c04418a19c7a10 +Block 0025 [ 58]: 572a0c8d5e97bc3d +Block 0025 [ 59]: 2c0c4bcc9a8b913f +Block 0025 [ 60]: 2d42eb8a5c89595e +Block 0025 [ 61]: a490f7f31b5a32f2 +Block 0025 [ 62]: 3456ab2f7b9f5153 +Block 0025 [ 63]: a90cf3f0015e90e3 +Block 0025 [ 64]: 4081d7690d2b09f4 +Block 0025 [ 65]: 8170b2e0f6724b15 +Block 0025 [ 66]: bfa2c86fcf51d13d +Block 0025 [ 67]: cf4026c87fc36b50 +Block 0025 [ 68]: a19eeb309e0ed951 +Block 0025 [ 69]: 94968a68e780bb82 +Block 0025 [ 70]: fd06b14cb0e244d3 +Block 0025 [ 71]: 1a5df1d3bd1da7bd +Block 0025 [ 72]: cf92c12d5501b592 +Block 0025 [ 73]: 33dfcade68dcf782 +Block 0025 [ 74]: 3c34c8de434cd8a0 +Block 0025 [ 75]: 583fd5fa9cdc334b +Block 0025 [ 76]: a561a5771600760d +Block 0025 [ 77]: 5bfff03f2074662c +Block 0025 [ 78]: 9a3cab09c49296a2 +Block 0025 [ 79]: c56e377afb6b9ac7 +Block 0025 [ 80]: 98e2570ecb9f0e9a +Block 0025 [ 81]: cc934d5b70c73d3e +Block 0025 [ 82]: e69d1e00bb93731e +Block 0025 [ 83]: 8fc0c795dc74ebb9 +Block 0025 [ 84]: 220b46e546584007 +Block 0025 [ 85]: c74519effd86d175 +Block 0025 [ 86]: 5ab87fef552bc8e3 +Block 0025 [ 87]: cc959be70d739717 +Block 0025 [ 88]: 17f1b7bc5d39f702 +Block 0025 [ 89]: 762ebc3e921b84ee +Block 0025 [ 90]: 888a1d4dc4c3380f +Block 0025 [ 91]: db8f9235f7204500 +Block 0025 [ 92]: 503d9ddadb99fd67 +Block 0025 [ 93]: 62409e9cde17fe73 +Block 0025 [ 94]: e9ca642a2880194a +Block 0025 [ 95]: 6f4c703d8fd584f9 +Block 0025 [ 96]: b10fc66cf1416e64 +Block 0025 [ 97]: 91e9eba3834f82e9 +Block 0025 [ 98]: 20ab216a2cc0113a +Block 0025 [ 99]: bd621abe0b12ccb8 +Block 0025 [100]: 0c1c7cd2b30bfd1c +Block 0025 [101]: 200b79e1e90ee82b +Block 0025 [102]: 6a6287dc3b913eff +Block 0025 [103]: fc0b87e1ad118bc3 +Block 0025 [104]: 9a6b87099c4706ed +Block 0025 [105]: 373fabb9b76bf6ed +Block 0025 [106]: 536e17be7870998e +Block 0025 [107]: 2c18f19b85c54d1c +Block 0025 [108]: 5169df225240c0be +Block 0025 [109]: e653baf950d6b0b5 +Block 0025 [110]: 3d7977cb7e63fa91 +Block 0025 [111]: b3ffcdd7e3d15e58 +Block 0025 [112]: 00d16dcf47a61b68 +Block 0025 [113]: 8d1c4f35e4354ea8 +Block 0025 [114]: 5b7920f6270c732e +Block 0025 [115]: 6da654051829a7f3 +Block 0025 [116]: fc7ec3060f200354 +Block 0025 [117]: 7bc527041bc699aa +Block 0025 [118]: 36e804a3bce47567 +Block 0025 [119]: 5078a05b3689ccb0 +Block 0025 [120]: cd36db69ab1452d0 +Block 0025 [121]: 2ffbb1267bda416f +Block 0025 [122]: 5afe4953b0b8abec +Block 0025 [123]: 62e953030ae41e09 +Block 0025 [124]: 59c2d3acda8e7210 +Block 0025 [125]: b3148cae31588dda +Block 0025 [126]: 7d3d2d2a62e66584 +Block 0025 [127]: 7d1bc1dd3f23304f +Block 0026 [ 0]: aa12cd00fc19aa98 +Block 0026 [ 1]: 4baa3e2f0d2d9965 +Block 0026 [ 2]: cccc9d36f2b22bd7 +Block 0026 [ 3]: 66262feec7d5ca74 +Block 0026 [ 4]: 5ca622cdf216866e +Block 0026 [ 5]: 30811834a878128e +Block 0026 [ 6]: 1831ac788a613c33 +Block 0026 [ 7]: 7c5431da91e89887 +Block 0026 [ 8]: 002b8a6bfcca3171 +Block 0026 [ 9]: 563ea3cefeb34181 +Block 0026 [ 10]: 27b5d3695d8acea2 +Block 0026 [ 11]: bfefe32924482e29 +Block 0026 [ 12]: dbb1691432b6f222 +Block 0026 [ 13]: 5cdd96afe1e34f32 +Block 0026 [ 14]: 6d7e8399851e95f4 +Block 0026 [ 15]: 43294203e112bcb9 +Block 0026 [ 16]: 8337ce689d3e9caa +Block 0026 [ 17]: 7c26a7ef08e470d7 +Block 0026 [ 18]: 759a31d3fa1e8236 +Block 0026 [ 19]: 2149cc4365689b19 +Block 0026 [ 20]: 3b6bb146c1904fce +Block 0026 [ 21]: c3f0fa1dd9bbd53d +Block 0026 [ 22]: 337b92787d57be4c +Block 0026 [ 23]: 5402836eede6ed17 +Block 0026 [ 24]: 7c297b0511fc2afe +Block 0026 [ 25]: 30cc08a100c263a4 +Block 0026 [ 26]: 3be7c204b7169815 +Block 0026 [ 27]: e506d93b81a75733 +Block 0026 [ 28]: 1a36cf3c96c7000a +Block 0026 [ 29]: abf78cb4e62a9c9d +Block 0026 [ 30]: bfe1d6bc3d4ad847 +Block 0026 [ 31]: a9b8d174fb0a5b58 +Block 0026 [ 32]: 7c01f62ac035bfb3 +Block 0026 [ 33]: 792b16e8761a2231 +Block 0026 [ 34]: e33ae23d15dd49ff +Block 0026 [ 35]: 81e01c580bb42aa4 +Block 0026 [ 36]: 0b7854b34b42b26e +Block 0026 [ 37]: e5f3890795c8fd3f +Block 0026 [ 38]: 1d32f3cd092c011d +Block 0026 [ 39]: bb846e08144af8c9 +Block 0026 [ 40]: 529c328a0fd6be1c +Block 0026 [ 41]: 1838e4cc3b1e1bee +Block 0026 [ 42]: 0f8daadca7ece815 +Block 0026 [ 43]: e6744a102f363ba5 +Block 0026 [ 44]: ec0180f97f8dc01a +Block 0026 [ 45]: b7875db887d8fa98 +Block 0026 [ 46]: 0e14703884e20016 +Block 0026 [ 47]: 51e7d6f8f33eb75e +Block 0026 [ 48]: e4996dbaa2737503 +Block 0026 [ 49]: cadb50fe0ae56e79 +Block 0026 [ 50]: 572aa6d3ed950c8e +Block 0026 [ 51]: 9b8c0a7a8dbc04d3 +Block 0026 [ 52]: 6059cb549441ca18 +Block 0026 [ 53]: 9500848c02cd176a +Block 0026 [ 54]: 5db9764a7ced5cdb +Block 0026 [ 55]: 325d4e51b05d23fb +Block 0026 [ 56]: f9884df02768f572 +Block 0026 [ 57]: 0aa40c7b5503989e +Block 0026 [ 58]: d817a371209c118b +Block 0026 [ 59]: e22bf07992f26ca9 +Block 0026 [ 60]: 690d3e6005735450 +Block 0026 [ 61]: 0070329e2156498a +Block 0026 [ 62]: 04f5e9b53490b84c +Block 0026 [ 63]: dc854d01c6d9638d +Block 0026 [ 64]: e3fc2193160c9c54 +Block 0026 [ 65]: 1d8550c266bb484b +Block 0026 [ 66]: b42ad34afd366dbb +Block 0026 [ 67]: 9744998468bc6ac9 +Block 0026 [ 68]: 3a5f729463a09383 +Block 0026 [ 69]: eca7bd87f12a5180 +Block 0026 [ 70]: 6122ed0517cc3b62 +Block 0026 [ 71]: cc72077761614624 +Block 0026 [ 72]: d88a25deabb1eea7 +Block 0026 [ 73]: 1028ffb6d1792abe +Block 0026 [ 74]: 92d03b7f00202965 +Block 0026 [ 75]: 02214bddf45887be +Block 0026 [ 76]: 946fa7bd3f16134e +Block 0026 [ 77]: 3bb05c80eb7b9e13 +Block 0026 [ 78]: 3fa6da973455eef9 +Block 0026 [ 79]: 77fd6d705dc5eae9 +Block 0026 [ 80]: 590461cd09e0b05c +Block 0026 [ 81]: a41d33a709dac06d +Block 0026 [ 82]: f51cc50323f5dd76 +Block 0026 [ 83]: 691aedf3966aec4c +Block 0026 [ 84]: 28128ef432e02aa2 +Block 0026 [ 85]: 197d1d0322f6b647 +Block 0026 [ 86]: c455c6c29400221b +Block 0026 [ 87]: 9fd4cd9eda0a1ef4 +Block 0026 [ 88]: a52e7e396e31ea48 +Block 0026 [ 89]: 10e4dfc62a716c6d +Block 0026 [ 90]: 1cea0672ccab61ba +Block 0026 [ 91]: 083c605e2d85fb34 +Block 0026 [ 92]: 369d098dde8ae9e0 +Block 0026 [ 93]: aad473e6d8dd7bd5 +Block 0026 [ 94]: b96bc5b048b796af +Block 0026 [ 95]: 11ed0ca89be26340 +Block 0026 [ 96]: 1599fc597339eb3a +Block 0026 [ 97]: 468fae3ebe64843b +Block 0026 [ 98]: efcc60fa3d14c8ee +Block 0026 [ 99]: 65a32ce3a18bdcf3 +Block 0026 [100]: af9208773e96aab2 +Block 0026 [101]: 8e1af05387165864 +Block 0026 [102]: 5ddff1b588aa14c9 +Block 0026 [103]: f8639e1aba07adda +Block 0026 [104]: e5395cd2d12320aa +Block 0026 [105]: 7759c07513d7f662 +Block 0026 [106]: 48377f83e29b778d +Block 0026 [107]: 19e70cfcfc8c2607 +Block 0026 [108]: 886bac7d24ca1f81 +Block 0026 [109]: e4e3f70544723cf7 +Block 0026 [110]: 6ca3eb985bb1ec17 +Block 0026 [111]: b8b4e578e5eb7856 +Block 0026 [112]: 3b3b7c449c27a4dd +Block 0026 [113]: defe515fcc6e2cc7 +Block 0026 [114]: 8a373232c3f9efa4 +Block 0026 [115]: 17a870a8636beec7 +Block 0026 [116]: 7d8903416c9f1320 +Block 0026 [117]: ecc207884b932101 +Block 0026 [118]: 18bf11e41267b18a +Block 0026 [119]: b4b347da9a7cb8ac +Block 0026 [120]: aecfcd3642ffea30 +Block 0026 [121]: 5122a78e0ca8816b +Block 0026 [122]: 6bbfce230920d8b3 +Block 0026 [123]: 161a2c5ea15a0e0b +Block 0026 [124]: c2d4801fb452e4ac +Block 0026 [125]: 82fd4d7b2d2fe2e8 +Block 0026 [126]: 854257a01b287eba +Block 0026 [127]: 334a677fd1ec9fda +Block 0027 [ 0]: 5be3fe13bdce08c7 +Block 0027 [ 1]: b0a7a8a8ade045e3 +Block 0027 [ 2]: 06df886512fe5392 +Block 0027 [ 3]: 9af2bf3676906d07 +Block 0027 [ 4]: 88e2cc40b8a4e76f +Block 0027 [ 5]: de37cbf63f3a44bc +Block 0027 [ 6]: a35ba64d6ddc8be7 +Block 0027 [ 7]: 511a834bc9aa1cc2 +Block 0027 [ 8]: f4e669ed4f8cb89d +Block 0027 [ 9]: d07308fc0ed46a4f +Block 0027 [ 10]: 7491f695a47aa04a +Block 0027 [ 11]: 31a11a9b71441773 +Block 0027 [ 12]: f0503c89f24fa682 +Block 0027 [ 13]: 75c12f9832ced304 +Block 0027 [ 14]: 54bde80d94f2cf24 +Block 0027 [ 15]: 550375f77d8be0af +Block 0027 [ 16]: 5696378300c055d2 +Block 0027 [ 17]: f2779fe23b85677a +Block 0027 [ 18]: 073405dcbbf97024 +Block 0027 [ 19]: 9013e7655de698aa +Block 0027 [ 20]: 2d44241faee0b9ef +Block 0027 [ 21]: ec51c8714f062da1 +Block 0027 [ 22]: 23d915c0aaaceb88 +Block 0027 [ 23]: d165697c18914924 +Block 0027 [ 24]: 24e554f22f933aa4 +Block 0027 [ 25]: 60d0782fc7ee202e +Block 0027 [ 26]: 63618eed5b6db134 +Block 0027 [ 27]: fd50ebe0567c4e6a +Block 0027 [ 28]: 95cb587105016157 +Block 0027 [ 29]: 6906ac0146770772 +Block 0027 [ 30]: 86031f68bbcbcf07 +Block 0027 [ 31]: 237b74293c87ed16 +Block 0027 [ 32]: 28b1d41aec829c34 +Block 0027 [ 33]: d84033367d075335 +Block 0027 [ 34]: c1b1440ee98abbfc +Block 0027 [ 35]: b338f834ceb27aa7 +Block 0027 [ 36]: cba740aed97e8d1d +Block 0027 [ 37]: a542c6a851d2a483 +Block 0027 [ 38]: 0799a8e55015b1f7 +Block 0027 [ 39]: c819a6146209f768 +Block 0027 [ 40]: cf8f88793592c941 +Block 0027 [ 41]: b822c49796097152 +Block 0027 [ 42]: 1fc839bfaf3e2f0c +Block 0027 [ 43]: 94cf66e5cacb5150 +Block 0027 [ 44]: 023c2713d277b7da +Block 0027 [ 45]: 42c9af54b7467477 +Block 0027 [ 46]: 06c87780cd1390fe +Block 0027 [ 47]: 4df89f800ac57ce4 +Block 0027 [ 48]: da72cf9ca4d8bf76 +Block 0027 [ 49]: 31bbd9520371297c +Block 0027 [ 50]: 5d99b61c5c43683d +Block 0027 [ 51]: 10bf4476116ac309 +Block 0027 [ 52]: c7abf37c2087b657 +Block 0027 [ 53]: 813a4a75afa0e07f +Block 0027 [ 54]: 06f8edc535913caa +Block 0027 [ 55]: 0e4836f75e413c0d +Block 0027 [ 56]: fbdc28f079ab6844 +Block 0027 [ 57]: ae5e53895c5e7a1a +Block 0027 [ 58]: 9712100247309cfe +Block 0027 [ 59]: 0be03ed03e7eb934 +Block 0027 [ 60]: 96104af9ad7e935f +Block 0027 [ 61]: b6ac1142ab06b5cc +Block 0027 [ 62]: c9e4cb50733efba1 +Block 0027 [ 63]: 74ea5251be8ca509 +Block 0027 [ 64]: f83778625640b346 +Block 0027 [ 65]: 11215e4e29240901 +Block 0027 [ 66]: d8f9a392f74ab538 +Block 0027 [ 67]: d0ac6f59d243531d +Block 0027 [ 68]: 8d63dd236aa37568 +Block 0027 [ 69]: 03bf34c4868d649e +Block 0027 [ 70]: df8e57df569aa85d +Block 0027 [ 71]: 71dfb145215c570b +Block 0027 [ 72]: 88d8eda9ee1a1ccb +Block 0027 [ 73]: 775f02960e9c8f91 +Block 0027 [ 74]: 42848838d08ab650 +Block 0027 [ 75]: 050183f31a1958ea +Block 0027 [ 76]: 134ca64846003950 +Block 0027 [ 77]: 1e2f30784e021a33 +Block 0027 [ 78]: 5fd720a5f4a10263 +Block 0027 [ 79]: 70c2c08cc82c6e5d +Block 0027 [ 80]: 68d0124851ad816c +Block 0027 [ 81]: 5930bd7ddc05735b +Block 0027 [ 82]: b8df3438977d79e5 +Block 0027 [ 83]: 7158f5c748d0dd09 +Block 0027 [ 84]: 60e53a3cfb9a75e5 +Block 0027 [ 85]: fb0cc38694941195 +Block 0027 [ 86]: 5536cf36b8ed3ba8 +Block 0027 [ 87]: 5aaae223caec9458 +Block 0027 [ 88]: fcd688ba2023d937 +Block 0027 [ 89]: 2b23815894329792 +Block 0027 [ 90]: edef6c1e61c71e64 +Block 0027 [ 91]: 0e57b6aac7894345 +Block 0027 [ 92]: 14ebf95eec26c84d +Block 0027 [ 93]: 1a748bb411e49be8 +Block 0027 [ 94]: dbd73d86a6520c4a +Block 0027 [ 95]: 38436185c244b69d +Block 0027 [ 96]: 3712f093d0292f34 +Block 0027 [ 97]: 32813df121b4155d +Block 0027 [ 98]: 6ad496d0b7522951 +Block 0027 [ 99]: 851fe36a165d38f7 +Block 0027 [100]: 145751d01f5fe0b5 +Block 0027 [101]: 2eff47cf3e629eb1 +Block 0027 [102]: 811a787ec3369198 +Block 0027 [103]: 563945cc33943766 +Block 0027 [104]: a6abe4655beb1d8b +Block 0027 [105]: dafd2224158188a5 +Block 0027 [106]: 18c78fb93d7eb7f8 +Block 0027 [107]: 0cd57cc01b3a80f0 +Block 0027 [108]: 04d2ec2408194328 +Block 0027 [109]: 44a6ccf18a1db45e +Block 0027 [110]: 5561ffd2d09051af +Block 0027 [111]: 52d51f6943763516 +Block 0027 [112]: 52f1b6ccc089f896 +Block 0027 [113]: f83184008f9b70b1 +Block 0027 [114]: 47d67a0849c7fde3 +Block 0027 [115]: 7e9f8078e4be0c14 +Block 0027 [116]: 1c4a3cdd84be40c0 +Block 0027 [117]: f9916cedc43bd59b +Block 0027 [118]: 9bc4380d0351e854 +Block 0027 [119]: 00cfbceb39e15f88 +Block 0027 [120]: 7f5f41a71976be18 +Block 0027 [121]: 5c6b7b42ec0a93ee +Block 0027 [122]: eac2b68d34c73688 +Block 0027 [123]: a7ddbf2bfc4be3ef +Block 0027 [124]: 49d47531d67094a9 +Block 0027 [125]: a6eaf85645fb6eae +Block 0027 [126]: 77a99a8bd0ea288d +Block 0027 [127]: d54c07bcb55f92d7 +Block 0028 [ 0]: ea035ea2040b86fa +Block 0028 [ 1]: 2e16a6ff91268b3e +Block 0028 [ 2]: c33278f3f2568bcd +Block 0028 [ 3]: 4e7a49242419fea0 +Block 0028 [ 4]: 6762092f26336892 +Block 0028 [ 5]: a346752d8aaf6445 +Block 0028 [ 6]: 397328788712c7c7 +Block 0028 [ 7]: 340ec72f35291f80 +Block 0028 [ 8]: 9b9a3f1443fdf705 +Block 0028 [ 9]: b642da5d981d9f96 +Block 0028 [ 10]: 78bb8d36eadc7cd6 +Block 0028 [ 11]: daf5dcf74717e45c +Block 0028 [ 12]: b2ad870532880376 +Block 0028 [ 13]: 3567026ef751358a +Block 0028 [ 14]: 93d5566d1fe4ec35 +Block 0028 [ 15]: afdee647c2fca6f4 +Block 0028 [ 16]: 7016d9708eb7df00 +Block 0028 [ 17]: 201c3ad2a8a7c3c6 +Block 0028 [ 18]: 25d14750df3d239b +Block 0028 [ 19]: 70bafb70600a8c04 +Block 0028 [ 20]: 46ce039305fb1a7b +Block 0028 [ 21]: 7984538abbfadcd6 +Block 0028 [ 22]: 64aecb8107d681bf +Block 0028 [ 23]: 496cf0f56bff4df1 +Block 0028 [ 24]: f065187755f8cb53 +Block 0028 [ 25]: b3ea311b5f67abbc +Block 0028 [ 26]: 2a828b7595500d4b +Block 0028 [ 27]: 34f0a68a4e6119f5 +Block 0028 [ 28]: 004c38fd036b5024 +Block 0028 [ 29]: aa526730ee10da64 +Block 0028 [ 30]: d39d0fac773bafcb +Block 0028 [ 31]: b11607e91b9f5a00 +Block 0028 [ 32]: c7f3de33f5f4cf6a +Block 0028 [ 33]: 266f646f53cbea7c +Block 0028 [ 34]: cd80be78d7225cb8 +Block 0028 [ 35]: 3ab994a40c96cd3f +Block 0028 [ 36]: 946f570038bb1774 +Block 0028 [ 37]: 348efca8d38658cf +Block 0028 [ 38]: dd737ec2d7011280 +Block 0028 [ 39]: a9670f393e9bc143 +Block 0028 [ 40]: 7487a7eee9bc3abb +Block 0028 [ 41]: af350b815c13205b +Block 0028 [ 42]: af5d5d6b18eeb661 +Block 0028 [ 43]: df325329eb54cc34 +Block 0028 [ 44]: 95eea5b85bf729f1 +Block 0028 [ 45]: 8cc4861ad9ae97c2 +Block 0028 [ 46]: d8fa96de59d1c36d +Block 0028 [ 47]: d83a13b1285ba019 +Block 0028 [ 48]: 06f15b3e227b12e2 +Block 0028 [ 49]: 89eff8ca5feb5b54 +Block 0028 [ 50]: 2965b0ae039dc693 +Block 0028 [ 51]: b053ce0a9639b9e2 +Block 0028 [ 52]: 6b1294b3b911d087 +Block 0028 [ 53]: cb8ed5a39f69a591 +Block 0028 [ 54]: f401f0d2325dc6f0 +Block 0028 [ 55]: 52702e2f4fd6cc0f +Block 0028 [ 56]: 552fafd12d308c6d +Block 0028 [ 57]: fc3930e1e07015b0 +Block 0028 [ 58]: ded4395a07ef93d5 +Block 0028 [ 59]: 352d277d5f9aa883 +Block 0028 [ 60]: f1e65e32dfda026e +Block 0028 [ 61]: d06fa1b780055d65 +Block 0028 [ 62]: 3d91dedd8322ab05 +Block 0028 [ 63]: 6c54b369bd42086d +Block 0028 [ 64]: b63e977354277451 +Block 0028 [ 65]: e51466e99f6cc354 +Block 0028 [ 66]: 5fa67b6b41447bbb +Block 0028 [ 67]: 733e4305ce6154db +Block 0028 [ 68]: 1421bedf364b1955 +Block 0028 [ 69]: 38a036084d175daf +Block 0028 [ 70]: 4dc377e4411fd24f +Block 0028 [ 71]: abb4fda7705ed57f +Block 0028 [ 72]: 3844dec4d4f399fc +Block 0028 [ 73]: 44d53f09c35e3822 +Block 0028 [ 74]: d2bcd61705007948 +Block 0028 [ 75]: 39cd9df9f7e059bc +Block 0028 [ 76]: f0ac2ab3385517d4 +Block 0028 [ 77]: b8c0a4141d077e38 +Block 0028 [ 78]: b83aaaddc5ead1cf +Block 0028 [ 79]: 56c73f9d8cf69fef +Block 0028 [ 80]: 979d31a4ed576dd6 +Block 0028 [ 81]: 9a8d33932d334fcb +Block 0028 [ 82]: 5943ca7be3e1a9ab +Block 0028 [ 83]: 8aeeee3a3e71e088 +Block 0028 [ 84]: b304d443b00f4aa6 +Block 0028 [ 85]: 16882d4404bd747d +Block 0028 [ 86]: 8af608fd07a6a83a +Block 0028 [ 87]: 22bb9dfc7f464419 +Block 0028 [ 88]: 0754bb3c27a00864 +Block 0028 [ 89]: 8cee6891c9c53736 +Block 0028 [ 90]: fadd02c16c0e8a2c +Block 0028 [ 91]: 3a6029c10bd05df1 +Block 0028 [ 92]: e87d999067440344 +Block 0028 [ 93]: 861b32010d72a2d4 +Block 0028 [ 94]: 7a05572de09a1c5a +Block 0028 [ 95]: cabea168c4a214c5 +Block 0028 [ 96]: 3cff347defdadd78 +Block 0028 [ 97]: 2843cb0790f9e480 +Block 0028 [ 98]: b0df9bce712bbf4d +Block 0028 [ 99]: f6a2c8e92ebebd7f +Block 0028 [100]: 4f0a9e32dc2630ae +Block 0028 [101]: 294af970066eae49 +Block 0028 [102]: 5325be741ea3470d +Block 0028 [103]: 9c7f2e03fe4a5b58 +Block 0028 [104]: c2d8f4da0903a91f +Block 0028 [105]: 9b70790583419a59 +Block 0028 [106]: a6d9d7c679a4d90a +Block 0028 [107]: fa61e1d94dae1846 +Block 0028 [108]: 818fde1c5b259df4 +Block 0028 [109]: f6fb171cd4d98e0f +Block 0028 [110]: b43ad75705f2ef0f +Block 0028 [111]: 59a5eb3f9a5fe96f +Block 0028 [112]: 08b6d1cc904187ae +Block 0028 [113]: c8218eae71884346 +Block 0028 [114]: e17951439c57259b +Block 0028 [115]: 669f4548595914ff +Block 0028 [116]: 982e95a55f69f9a4 +Block 0028 [117]: e228afc8f89d45fb +Block 0028 [118]: 47099aed1a722d5a +Block 0028 [119]: f83cefa338551daa +Block 0028 [120]: 2c21f9a015a8a516 +Block 0028 [121]: d2ec752a4d981f6b +Block 0028 [122]: 146521d7a2f009a2 +Block 0028 [123]: 071014e51af69e26 +Block 0028 [124]: 5f82eae58d2972a5 +Block 0028 [125]: 966eb97f7e0f60a1 +Block 0028 [126]: 308ce93e852a62bc +Block 0028 [127]: efc36d7416e66af6 +Block 0029 [ 0]: 3bdabd48605c830d +Block 0029 [ 1]: 301ed6564cd8adec +Block 0029 [ 2]: df374c730df57a03 +Block 0029 [ 3]: fad6e7bdacbbcf17 +Block 0029 [ 4]: e92e32543552cbe4 +Block 0029 [ 5]: 29447af54f3ee354 +Block 0029 [ 6]: 452121662a1e7130 +Block 0029 [ 7]: e7e398737b41d189 +Block 0029 [ 8]: a1117ca5f5c3c5fa +Block 0029 [ 9]: d76ab9d95a081eec +Block 0029 [ 10]: 5301a2721f0df1eb +Block 0029 [ 11]: 95200fbff6ad0d78 +Block 0029 [ 12]: 195f9faddea81f3e +Block 0029 [ 13]: bd7534410b5bd10d +Block 0029 [ 14]: 6327d0b34d6a447a +Block 0029 [ 15]: db196f244badd93d +Block 0029 [ 16]: 7d62585524f47b6b +Block 0029 [ 17]: 2013c6d5df94b708 +Block 0029 [ 18]: d5e8d62b1af8df38 +Block 0029 [ 19]: f89f1563c6372121 +Block 0029 [ 20]: 50b7efa2fbdfdd40 +Block 0029 [ 21]: 656eef73963c5266 +Block 0029 [ 22]: 3da1eacc8baf2460 +Block 0029 [ 23]: 390a9769d20ddf52 +Block 0029 [ 24]: 23d923f21eed6aa5 +Block 0029 [ 25]: 173dc145e6d0171f +Block 0029 [ 26]: 6c72b0739a4ee6c0 +Block 0029 [ 27]: 0f1acedbf79b41b4 +Block 0029 [ 28]: 40b950241d55ce76 +Block 0029 [ 29]: b59e3bd42c1e5a78 +Block 0029 [ 30]: e6be2f76812aa447 +Block 0029 [ 31]: f37036ff225bbbda +Block 0029 [ 32]: 351f3c43a983b318 +Block 0029 [ 33]: 3c63ce438fa5e84f +Block 0029 [ 34]: e0a56205e09aa574 +Block 0029 [ 35]: b50f7850346b47d6 +Block 0029 [ 36]: b0a19b67c2ed5b8e +Block 0029 [ 37]: 8f50feafdaea26ec +Block 0029 [ 38]: cdc0bc350397fde4 +Block 0029 [ 39]: b824e50d70d878b8 +Block 0029 [ 40]: 20c2852ed5fc9e9b +Block 0029 [ 41]: d260cc25828b18cc +Block 0029 [ 42]: 97f0a84ee15612ea +Block 0029 [ 43]: 48afdb506f6251df +Block 0029 [ 44]: 461c26175b8ae4ef +Block 0029 [ 45]: 216dbe3ccbb14768 +Block 0029 [ 46]: 594bbcb744f7b638 +Block 0029 [ 47]: c9af82003c6890bb +Block 0029 [ 48]: 62536e8df9755acf +Block 0029 [ 49]: b7ef0918894031d2 +Block 0029 [ 50]: 7a453d700fbb40cd +Block 0029 [ 51]: 71ad7f2a5729d489 +Block 0029 [ 52]: 20691da8478b2dde +Block 0029 [ 53]: 9f0a0c8183f30200 +Block 0029 [ 54]: a6d136280e231439 +Block 0029 [ 55]: ba8aaf65340929ec +Block 0029 [ 56]: c80f137c575e21a0 +Block 0029 [ 57]: b9a819a536b2975b +Block 0029 [ 58]: 5d767f30e753f9cb +Block 0029 [ 59]: c5c8b4e9285ab45f +Block 0029 [ 60]: 104063c24eda0f34 +Block 0029 [ 61]: fb3993aa2b39c1cb +Block 0029 [ 62]: 47d27cc72c649216 +Block 0029 [ 63]: b1e6d9348be399b3 +Block 0029 [ 64]: a6d723637e610f54 +Block 0029 [ 65]: 5a122ebb3829ce5d +Block 0029 [ 66]: b0686b38d9c9dd43 +Block 0029 [ 67]: 47c31e82b95419b9 +Block 0029 [ 68]: 9f05eca085d6e86e +Block 0029 [ 69]: 7e13c02e53b4e999 +Block 0029 [ 70]: f02db46b55a65df6 +Block 0029 [ 71]: 77896aea6c63fa83 +Block 0029 [ 72]: 8b9f53272e5b2ee1 +Block 0029 [ 73]: ac843be226b3579c +Block 0029 [ 74]: 82b7b66c3fa114a9 +Block 0029 [ 75]: 72fee33e9be86f50 +Block 0029 [ 76]: dc27b4a5de1906c8 +Block 0029 [ 77]: e3c2039d4303a548 +Block 0029 [ 78]: 15e3b3a7892b0d8f +Block 0029 [ 79]: 61d89048357716ce +Block 0029 [ 80]: 0e7ccb48edb01b41 +Block 0029 [ 81]: 31fa10f63f19067c +Block 0029 [ 82]: 6e12ca8d56c07bdf +Block 0029 [ 83]: c96238b43ce281a7 +Block 0029 [ 84]: ea92aabec561c97c +Block 0029 [ 85]: 5b30055449d1b10a +Block 0029 [ 86]: 6bc365c220fa363a +Block 0029 [ 87]: e80070c1d31570ae +Block 0029 [ 88]: f000f70cb7f68723 +Block 0029 [ 89]: 616e9af618594d1f +Block 0029 [ 90]: acbf4d18a682c25c +Block 0029 [ 91]: 14cdcd57ca47433d +Block 0029 [ 92]: a428accbefb4d001 +Block 0029 [ 93]: 895c764190262d06 +Block 0029 [ 94]: 64b93e0add42e93f +Block 0029 [ 95]: 26235c89252710a9 +Block 0029 [ 96]: e743ecadafb28d0c +Block 0029 [ 97]: 0c8bb00bbbe17d45 +Block 0029 [ 98]: bdb9e60a72a82689 +Block 0029 [ 99]: 59ac39145a7ae1c1 +Block 0029 [100]: cb5419e28b5f6009 +Block 0029 [101]: 8a9b807b28c6b546 +Block 0029 [102]: 13f5c91565058303 +Block 0029 [103]: 630b1263788776e1 +Block 0029 [104]: f89193742379c81e +Block 0029 [105]: 9b3fb899f09b4cb1 +Block 0029 [106]: 40fd48829eb77bd7 +Block 0029 [107]: 477d964d41c8d9d0 +Block 0029 [108]: 2a797b8d5a2f0702 +Block 0029 [109]: 366689716914f34d +Block 0029 [110]: 4d0c98ad9d485725 +Block 0029 [111]: 4fcca43a76ba9ea2 +Block 0029 [112]: d8b9ebf080d6b155 +Block 0029 [113]: b6b9b9bed4dc8ecd +Block 0029 [114]: 84c306ea62699a25 +Block 0029 [115]: 0de49041213208e6 +Block 0029 [116]: ef61d4ee82187557 +Block 0029 [117]: 0a8f1d03285d95ec +Block 0029 [118]: c25f5ffb0f4df0a9 +Block 0029 [119]: ade24bb8321c6aa1 +Block 0029 [120]: 674fd09cc02b1746 +Block 0029 [121]: 251cd54c44f9e1ce +Block 0029 [122]: fa4e3ef002c99ebd +Block 0029 [123]: 7f9595eccb3636cf +Block 0029 [124]: 4ac562e87d01c37d +Block 0029 [125]: b48318bac585fbc2 +Block 0029 [126]: 42b91d62b469afec +Block 0029 [127]: adf8ebc72e5180ce +Block 0030 [ 0]: 78ebb0cc500cfd23 +Block 0030 [ 1]: c460a52a939b100f +Block 0030 [ 2]: 413797d113559097 +Block 0030 [ 3]: 24097f4a72aa4d7a +Block 0030 [ 4]: 7fd192dc686f9dd1 +Block 0030 [ 5]: 1403f9433f94c680 +Block 0030 [ 6]: 2888ddca7026222f +Block 0030 [ 7]: d8de309eb8eea83a +Block 0030 [ 8]: 7ddbc393ee013ca4 +Block 0030 [ 9]: eab9f37fc71f9c64 +Block 0030 [ 10]: d67184afa449b483 +Block 0030 [ 11]: b34365013ef6f697 +Block 0030 [ 12]: 7d3c26cc8eed80f6 +Block 0030 [ 13]: 8cdd8df5db037fe7 +Block 0030 [ 14]: 0ac112d54d43168e +Block 0030 [ 15]: 74e4494bcc9636a3 +Block 0030 [ 16]: 0edf89b34fad5868 +Block 0030 [ 17]: b1e24de77dccf693 +Block 0030 [ 18]: d92f485e04babc84 +Block 0030 [ 19]: 8c91873ed76e45d7 +Block 0030 [ 20]: fa777c8e222f5d7b +Block 0030 [ 21]: fdac371cbe360dbb +Block 0030 [ 22]: db06c1b81b37310d +Block 0030 [ 23]: 839d563b33c36c0c +Block 0030 [ 24]: c6b15e0f746c4c94 +Block 0030 [ 25]: 2891ba5e8b3fdf6f +Block 0030 [ 26]: 838e406c57fd4d90 +Block 0030 [ 27]: 8247d5267df0762e +Block 0030 [ 28]: 7cc4c5a7cf99d0ea +Block 0030 [ 29]: 1bc549cdfdb8f404 +Block 0030 [ 30]: a749161c3abfbd15 +Block 0030 [ 31]: 634640ab3dba42e9 +Block 0030 [ 32]: 4f66bff1a5599b37 +Block 0030 [ 33]: 77fca844c066144b +Block 0030 [ 34]: 73174973c64ba79a +Block 0030 [ 35]: 47ce5a1c3de46611 +Block 0030 [ 36]: 0b2417e4adbb9c4a +Block 0030 [ 37]: 56f91835257a8ab2 +Block 0030 [ 38]: a947a800c9ae0adc +Block 0030 [ 39]: dfba4ce0ca8a9022 +Block 0030 [ 40]: 7fd0c982518c8bc3 +Block 0030 [ 41]: 0e38079a66f607c9 +Block 0030 [ 42]: bb13ce39ce7c838d +Block 0030 [ 43]: 301a331b613c173f +Block 0030 [ 44]: 6de35dd0db47a4a4 +Block 0030 [ 45]: f4061faea81daff5 +Block 0030 [ 46]: fa1b99d63c7b81d0 +Block 0030 [ 47]: ebbc817d664c3b5d +Block 0030 [ 48]: ed08b9868c781530 +Block 0030 [ 49]: 7ebc4ab09b5f9f8c +Block 0030 [ 50]: 428f35ba0da0fb8d +Block 0030 [ 51]: 3cc4dd39deb4b916 +Block 0030 [ 52]: ef85cca2918123aa +Block 0030 [ 53]: e9b923891414adb5 +Block 0030 [ 54]: 990078e6307bf03d +Block 0030 [ 55]: 46293fa01ab6eba6 +Block 0030 [ 56]: 88c1973464f2a740 +Block 0030 [ 57]: 29f30f34cbdb32f9 +Block 0030 [ 58]: 6e0c364377a98b5a +Block 0030 [ 59]: 4a608ade6a63b04b +Block 0030 [ 60]: c4d07ec581c6e110 +Block 0030 [ 61]: c6e38c532d112754 +Block 0030 [ 62]: c7404f3f4c5ca81d +Block 0030 [ 63]: b2399b4108208e93 +Block 0030 [ 64]: 6cf803e9c511a589 +Block 0030 [ 65]: 21bede8cc081d6cb +Block 0030 [ 66]: 0f31881b96348c43 +Block 0030 [ 67]: 208a6a3f6b5a6aea +Block 0030 [ 68]: d96f9a9b3d38498a +Block 0030 [ 69]: fe12c848b152f88b +Block 0030 [ 70]: ba37377989634bbe +Block 0030 [ 71]: f87f306d4e55fc58 +Block 0030 [ 72]: 6e3af73d61e5acb6 +Block 0030 [ 73]: 01ebb62867ae7346 +Block 0030 [ 74]: 34f9f3f14540d8a0 +Block 0030 [ 75]: a0530a04a4fed871 +Block 0030 [ 76]: 8aab51aa2699c2d7 +Block 0030 [ 77]: 8cc1c112302e9c0a +Block 0030 [ 78]: 66d2c4c1b0f369ca +Block 0030 [ 79]: 5881e8885f7618aa +Block 0030 [ 80]: ece8ee07d5a526c8 +Block 0030 [ 81]: 5b8be9aec2f46490 +Block 0030 [ 82]: aacfa3b578ffc40b +Block 0030 [ 83]: 90b2be8bbc0b5982 +Block 0030 [ 84]: e7baaa8858cc81ff +Block 0030 [ 85]: f7995581dc6bcb96 +Block 0030 [ 86]: 624c813678edc943 +Block 0030 [ 87]: 2275455d12b12b0b +Block 0030 [ 88]: eb45b6b9fe5718a9 +Block 0030 [ 89]: 0df81b2d8f23c101 +Block 0030 [ 90]: a6cf10ca19e15f80 +Block 0030 [ 91]: 405a403a54f6ea58 +Block 0030 [ 92]: e07f299250a4083b +Block 0030 [ 93]: a3b82fe32687fced +Block 0030 [ 94]: bfd23f20d69d4dc6 +Block 0030 [ 95]: 2a476b8e3de7b369 +Block 0030 [ 96]: 20826b265857d295 +Block 0030 [ 97]: 1c347a083c6d2644 +Block 0030 [ 98]: fe1e1d3de266875c +Block 0030 [ 99]: 3332fe21e25d8b24 +Block 0030 [100]: 809711549430ae58 +Block 0030 [101]: d384c8613f965dd7 +Block 0030 [102]: 7a3ece3e88c6e242 +Block 0030 [103]: ca520dd2aaff2c07 +Block 0030 [104]: 5ed1157c64803562 +Block 0030 [105]: ab10c5653f8a0834 +Block 0030 [106]: e673d52089c309c3 +Block 0030 [107]: f8337353fe6934f6 +Block 0030 [108]: 294de71aba166af5 +Block 0030 [109]: feec046f98dbb7f7 +Block 0030 [110]: d217e0685afd51f5 +Block 0030 [111]: 675996cc4f1738e3 +Block 0030 [112]: f19f120722f24321 +Block 0030 [113]: d64b4a71899b2cc0 +Block 0030 [114]: b7e02717d1dad185 +Block 0030 [115]: 9aec98d8ecfaf56a +Block 0030 [116]: d1b145c263d02309 +Block 0030 [117]: bc5338fbc3d7782d +Block 0030 [118]: 335b5ad99aeb80df +Block 0030 [119]: a68c507da4296764 +Block 0030 [120]: b68e6e3cb8332116 +Block 0030 [121]: aabcdc1e36e7aab6 +Block 0030 [122]: 7059fdcb44c4449e +Block 0030 [123]: d0a07c2ae3431bae +Block 0030 [124]: ad3824b96e5d8871 +Block 0030 [125]: 4a08dc8d052e9081 +Block 0030 [126]: 27bef794993fe81b +Block 0030 [127]: 5bba260ee5d913ce +Block 0031 [ 0]: 8056a89f8ad77396 +Block 0031 [ 1]: 0acbf994ee770d14 +Block 0031 [ 2]: d72a158734769c8a +Block 0031 [ 3]: 96616da2ec8ed518 +Block 0031 [ 4]: d26d683efb269aba +Block 0031 [ 5]: 9e77187292137456 +Block 0031 [ 6]: d3c5abc61cfba5f0 +Block 0031 [ 7]: da2c4be29800e8d4 +Block 0031 [ 8]: 1424a710054dbaff +Block 0031 [ 9]: e5960c0dd23f2e1a +Block 0031 [ 10]: 2cadcb97d3fe1953 +Block 0031 [ 11]: 0ccd24845599050a +Block 0031 [ 12]: 7320274c7126640a +Block 0031 [ 13]: 7cd8472ac2aaaddd +Block 0031 [ 14]: e5bacffb3c811f52 +Block 0031 [ 15]: 10fbda16e9eeb4ce +Block 0031 [ 16]: 1500a7ea6b4a94d2 +Block 0031 [ 17]: a1ba7e4b8aa528e9 +Block 0031 [ 18]: db1a5f54d44181fc +Block 0031 [ 19]: 1fd19ef893ef2e0a +Block 0031 [ 20]: 62040393e33ade1d +Block 0031 [ 21]: 31e3ec9bf63dfcb9 +Block 0031 [ 22]: c1992e801e8345c8 +Block 0031 [ 23]: 950b6603fce64375 +Block 0031 [ 24]: a658a546d46a6dd5 +Block 0031 [ 25]: 99ba119e73bf2451 +Block 0031 [ 26]: ca77d7ef039f066c +Block 0031 [ 27]: 0f87eecf64bde053 +Block 0031 [ 28]: cdb9d6e10e55a108 +Block 0031 [ 29]: d21eedb708db5c2f +Block 0031 [ 30]: 20d14163de3ea6e6 +Block 0031 [ 31]: 993f46dd66cf0e88 +Block 0031 [ 32]: c3546c4fccc13367 +Block 0031 [ 33]: 0484e711add96774 +Block 0031 [ 34]: a1a1debc1c40712b +Block 0031 [ 35]: 096825b113b5d71c +Block 0031 [ 36]: c95554f8f54b1b48 +Block 0031 [ 37]: 26a1af38ace06794 +Block 0031 [ 38]: 66df71657d902bf6 +Block 0031 [ 39]: bbd767041fc32fac +Block 0031 [ 40]: 3ece0676c3ae967e +Block 0031 [ 41]: 6d1bf9cfbe754e01 +Block 0031 [ 42]: 72203d494509b05e +Block 0031 [ 43]: af6cd4272b298bcc +Block 0031 [ 44]: 40317a0ca1d316bb +Block 0031 [ 45]: fec590ce7045da13 +Block 0031 [ 46]: ce9ea146364d5e3f +Block 0031 [ 47]: 3c2cce0a903c1b26 +Block 0031 [ 48]: 6f3dbc07470ccc2f +Block 0031 [ 49]: 6351893a222bd8cf +Block 0031 [ 50]: 0cd4d72b32b918e8 +Block 0031 [ 51]: 29cd14a678355e28 +Block 0031 [ 52]: a10bef462977255b +Block 0031 [ 53]: 6ebfb703429b51e8 +Block 0031 [ 54]: 9943623f765c7658 +Block 0031 [ 55]: 90638f6e666bead3 +Block 0031 [ 56]: da55186b2cb868bf +Block 0031 [ 57]: c0a953f05ca97440 +Block 0031 [ 58]: 991e5450713fa2d0 +Block 0031 [ 59]: 9f1117bc7a25c8ab +Block 0031 [ 60]: b1cab74a81011a00 +Block 0031 [ 61]: 24717ae307ffa148 +Block 0031 [ 62]: 49778268b7e5b98c +Block 0031 [ 63]: 1082ca8e9d07a245 +Block 0031 [ 64]: 4cecb2326330d454 +Block 0031 [ 65]: e116f69e48d7663d +Block 0031 [ 66]: dd6fc7fb20eeed81 +Block 0031 [ 67]: 467086efaa6c70a5 +Block 0031 [ 68]: 06374063912b5d23 +Block 0031 [ 69]: d15fbd1c5b678f13 +Block 0031 [ 70]: f8c29343528d1ec7 +Block 0031 [ 71]: 76089db7b8607221 +Block 0031 [ 72]: 711c36ee0a3bfc0d +Block 0031 [ 73]: 2c04c97ec81d3aeb +Block 0031 [ 74]: 47d14e368861ca0c +Block 0031 [ 75]: 8b77572fe7c02210 +Block 0031 [ 76]: 3a93283ad7ec4394 +Block 0031 [ 77]: bf65a5f5dcdf5a7c +Block 0031 [ 78]: 02e56c288b5e017a +Block 0031 [ 79]: 7a130bec028a12a2 +Block 0031 [ 80]: 4373299ae5c00617 +Block 0031 [ 81]: fe15f92f01ae432e +Block 0031 [ 82]: c385eacaba89938d +Block 0031 [ 83]: b3dc4616fd72c200 +Block 0031 [ 84]: e453bb3534da09bf +Block 0031 [ 85]: b00fec3805b83138 +Block 0031 [ 86]: 95c96ef7d22e4ad9 +Block 0031 [ 87]: 93f8f5bbc6a8c31f +Block 0031 [ 88]: 06bfe5c4d32f03bc +Block 0031 [ 89]: f3e2d02a807ed7f2 +Block 0031 [ 90]: 883c84bfb046e7fd +Block 0031 [ 91]: b9f1c7ad0a7b4b9b +Block 0031 [ 92]: 77ccbca2abcc81fb +Block 0031 [ 93]: 3bb00a769cf2ebcc +Block 0031 [ 94]: 8f178ea513f83875 +Block 0031 [ 95]: 07e289f5760a5695 +Block 0031 [ 96]: 7d447ccb68d68fec +Block 0031 [ 97]: b1d4e8e9888d051e +Block 0031 [ 98]: 447e71ca682102e9 +Block 0031 [ 99]: f590ffeb8bef018f +Block 0031 [100]: d54559d0ab3b6afc +Block 0031 [101]: caf7649dbe8fde6a +Block 0031 [102]: c39efa41c6fb669f +Block 0031 [103]: 5b796db29d271d39 +Block 0031 [104]: dabaecc9fa05b4ad +Block 0031 [105]: 3cc6c412e203762b +Block 0031 [106]: 999eaf1a774d5a56 +Block 0031 [107]: 66ccd06d248b67c4 +Block 0031 [108]: 940273840c36b61e +Block 0031 [109]: 60845cfb3553ce08 +Block 0031 [110]: 499847123467e401 +Block 0031 [111]: c3e46f4ac502aba6 +Block 0031 [112]: 1a416510f69fc5b4 +Block 0031 [113]: 4a4786d118b23383 +Block 0031 [114]: ad4d126ee991f3ad +Block 0031 [115]: 59281ed002081934 +Block 0031 [116]: 1ccae3345cb54ae8 +Block 0031 [117]: 773e9b04ce3a1f7e +Block 0031 [118]: 3259c02c69346830 +Block 0031 [119]: 03d2e98b455ee4e9 +Block 0031 [120]: 0ab0c6a934464e66 +Block 0031 [121]: 7963df0df1398154 +Block 0031 [122]: af67b262a61c36b5 +Block 0031 [123]: 32bca7aa219f2e78 +Block 0031 [124]: 28d17914aea9734c +Block 0031 [125]: 6a4622176522e398 +Block 0031 [126]: 951aa08aeecb2c05 +Block 0031 [127]: 6a6c49d2cb75d5b6 + + After pass 1: +Block 0000 [ 0]: d3801200410f8c0d +Block 0000 [ 1]: 0bf9e8a6e442ba6d +Block 0000 [ 2]: e2ca92fe9c541fcc +Block 0000 [ 3]: 6269fe6db177a388 +Block 0000 [ 4]: 54697b2f25faeed4 +Block 0000 [ 5]: ca4dcbdcd4eefcae +Block 0000 [ 6]: 869f43f14f6ae784 +Block 0000 [ 7]: 6b157abf5710f387 +Block 0000 [ 8]: dccc9f665cc70060 +Block 0000 [ 9]: 0c5edcc99fa61403 +Block 0000 [ 10]: f29303c301980249 +Block 0000 [ 11]: 5988c1bbd30d834c +Block 0000 [ 12]: 39e364b591bdfe22 +Block 0000 [ 13]: 416a7a66289539fe +Block 0000 [ 14]: aeac3509f8c8e956 +Block 0000 [ 15]: bbc521663bf6a8e2 +Block 0000 [ 16]: bef194b164ce3e99 +Block 0000 [ 17]: fd49e154856ac494 +Block 0000 [ 18]: 4ce1a25b28624fde +Block 0000 [ 19]: 0ceb5695cf3204b4 +Block 0000 [ 20]: 5401064c72926583 +Block 0000 [ 21]: c1ae83b9ffa27e61 +Block 0000 [ 22]: 16eaaa854054e945 +Block 0000 [ 23]: c17a5724ee8d1bb1 +Block 0000 [ 24]: 4bf3658090d191f3 +Block 0000 [ 25]: b4d5b6e3db79c5e0 +Block 0000 [ 26]: d4e0b7e7a3688394 +Block 0000 [ 27]: 4bd8b5a50ccef493 +Block 0000 [ 28]: 4142a58a18979b33 +Block 0000 [ 29]: c14bb56255a035e6 +Block 0000 [ 30]: ce21b973b1c42d32 +Block 0000 [ 31]: e5882618965206a1 +Block 0000 [ 32]: 289232b90dfc00a7 +Block 0000 [ 33]: f6eb11683430d228 +Block 0000 [ 34]: e31a02277106ef3e +Block 0000 [ 35]: d80de6836272b387 +Block 0000 [ 36]: 5c09d4e606638b96 +Block 0000 [ 37]: 58895feb876e41ab +Block 0000 [ 38]: 5cf9d44568297c87 +Block 0000 [ 39]: eed0050361734627 +Block 0000 [ 40]: 4ea00fe53450879a +Block 0000 [ 41]: b3064d067f9f262e +Block 0000 [ 42]: ca87f9054518759f +Block 0000 [ 43]: b2608daa5232463a +Block 0000 [ 44]: ca741245ec6e2b97 +Block 0000 [ 45]: a9f1625a9355e35f +Block 0000 [ 46]: 77f2764d0f0dc02b +Block 0000 [ 47]: 9a5e8e24f351f5a8 +Block 0000 [ 48]: 016be699c579a7be +Block 0000 [ 49]: 93398aca060014c5 +Block 0000 [ 50]: 0d47df3cafd4d82e +Block 0000 [ 51]: 395a20bf86d0abed +Block 0000 [ 52]: 75b7482c7b8e5671 +Block 0000 [ 53]: 1ff48f393668b7a4 +Block 0000 [ 54]: d49085c4afe25a0e +Block 0000 [ 55]: 136fde4497f52b21 +Block 0000 [ 56]: 3b370889aa35ed71 +Block 0000 [ 57]: cc8c190f1c472520 +Block 0000 [ 58]: 3693124a7e8386d9 +Block 0000 [ 59]: 297d10d970645437 +Block 0000 [ 60]: 993a29d9e20d578a +Block 0000 [ 61]: be2a4c09ff56ddf9 +Block 0000 [ 62]: 5d419a2b8f618cf0 +Block 0000 [ 63]: e040f440ec86b82d +Block 0000 [ 64]: 07774dfca51e71ad +Block 0000 [ 65]: 4976a68a18d53aef +Block 0000 [ 66]: ab97b1a63c81a71d +Block 0000 [ 67]: bd73fa31f2bb5ebd +Block 0000 [ 68]: a52da172b97961d0 +Block 0000 [ 69]: 3d2ced1687fca2ac +Block 0000 [ 70]: c79a95caa247ebe5 +Block 0000 [ 71]: 65300100024c12d3 +Block 0000 [ 72]: 20f12fa6508f8063 +Block 0000 [ 73]: 267c109454fbc217 +Block 0000 [ 74]: fe9568ba884d417b +Block 0000 [ 75]: bfde126a9ba3a56a +Block 0000 [ 76]: 601281f62f846c59 +Block 0000 [ 77]: 2bac2b0e29765653 +Block 0000 [ 78]: 9e7b7041901f6621 +Block 0000 [ 79]: d9163f3a5a6d65d8 +Block 0000 [ 80]: a3ffed8a7445715c +Block 0000 [ 81]: e06888305780966c +Block 0000 [ 82]: 7f500d7bdf4912e3 +Block 0000 [ 83]: 00004ac96e78ef85 +Block 0000 [ 84]: ff02aabd39208163 +Block 0000 [ 85]: da2ddc922d9c7de3 +Block 0000 [ 86]: 6dc4aa44c0f6444f +Block 0000 [ 87]: 53c918eceabb95b2 +Block 0000 [ 88]: 2d86fbf1d0d4f513 +Block 0000 [ 89]: 755a0e402d9f2ef3 +Block 0000 [ 90]: 266280dc98e6bee1 +Block 0000 [ 91]: 82efb4e4b9ef9703 +Block 0000 [ 92]: d0fa8b78e7c3511d +Block 0000 [ 93]: a93cad157a39bd8e +Block 0000 [ 94]: a0f66af8bffe6691 +Block 0000 [ 95]: 87b9cfcdac11cacd +Block 0000 [ 96]: 7c62fe7cb7ab47cf +Block 0000 [ 97]: 7081003ec1e06f77 +Block 0000 [ 98]: 64154c14edc0996f +Block 0000 [ 99]: 58bfa58059732347 +Block 0000 [100]: 42dd823b7b3d9d3e +Block 0000 [101]: 57fd57d0ce388b8b +Block 0000 [102]: 7d562a38ef9e3fbb +Block 0000 [103]: f99001a3ad511bd3 +Block 0000 [104]: 5b61a9ac870c859b +Block 0000 [105]: 8f099adec5730a51 +Block 0000 [106]: d80dbca4c6846746 +Block 0000 [107]: 00678617d7cee9a1 +Block 0000 [108]: 207fe5ad05cc1e50 +Block 0000 [109]: 3adee7a9a8c821cb +Block 0000 [110]: 01f1e835d06f9c01 +Block 0000 [111]: 237cdc3267368609 +Block 0000 [112]: 6f872d1adc8473a3 +Block 0000 [113]: c8ea6cae26f32a04 +Block 0000 [114]: f641027f4ff79c7f +Block 0000 [115]: 0acba686f655d7d3 +Block 0000 [116]: d2d3613a0eb5a76c +Block 0000 [117]: 44b37e72dca1ef1c +Block 0000 [118]: f026dca86e752f36 +Block 0000 [119]: b1c2cddd938aed8a +Block 0000 [120]: b8abac934f3180aa +Block 0000 [121]: cd8d3861ca00c527 +Block 0000 [122]: 4efb238110b5fb03 +Block 0000 [123]: b99922a3d81cb223 +Block 0000 [124]: fada8c89e3243fd3 +Block 0000 [125]: 13d87d5f1a2654bf +Block 0000 [126]: aac80c5e2476391a +Block 0000 [127]: e52f1c839b7e7263 +Block 0001 [ 0]: 1945bd92227552e0 +Block 0001 [ 1]: 3fe9fff6337fd477 +Block 0001 [ 2]: a731a2d7c491e874 +Block 0001 [ 3]: 3f9009bc4b0a32d8 +Block 0001 [ 4]: 1d5401dab8c8d9c0 +Block 0001 [ 5]: 430468ea6cf08e6f +Block 0001 [ 6]: 0616282f31428559 +Block 0001 [ 7]: d288d4efb6ad143b +Block 0001 [ 8]: a6b4019d2075bdff +Block 0001 [ 9]: f9ebc4b5f9ce2914 +Block 0001 [ 10]: 5341c6e85c21fca3 +Block 0001 [ 11]: c8ed550770e49a23 +Block 0001 [ 12]: 4627d43a4ac34db1 +Block 0001 [ 13]: 566a676e9510f48b +Block 0001 [ 14]: 78122727319284ab +Block 0001 [ 15]: a978f1042a8863c7 +Block 0001 [ 16]: c83efaf192023550 +Block 0001 [ 17]: 0d28a82f3db7bc03 +Block 0001 [ 18]: 1f8f3377c446ecda +Block 0001 [ 19]: 54d175c08b8d9eda +Block 0001 [ 20]: e0767ab01740a973 +Block 0001 [ 21]: e80f906cfbd20ee5 +Block 0001 [ 22]: faee549cd23e1c39 +Block 0001 [ 23]: 7779da9131534517 +Block 0001 [ 24]: d264688eb5eb4330 +Block 0001 [ 25]: a8afe053886f0bfc +Block 0001 [ 26]: a50b8e2503af3118 +Block 0001 [ 27]: d2d69c9234ecb4f0 +Block 0001 [ 28]: 14be320d2ae7813e +Block 0001 [ 29]: e2fb5f4eeb9dd171 +Block 0001 [ 30]: f8f5deccc87825eb +Block 0001 [ 31]: 582e0e0d97aefade +Block 0001 [ 32]: bd3cfbc46403045e +Block 0001 [ 33]: 0c67956254623ad2 +Block 0001 [ 34]: 5f90bde837bdeaab +Block 0001 [ 35]: d70cda7b6fe733b0 +Block 0001 [ 36]: 56eca4b0ace51877 +Block 0001 [ 37]: d92b6b6f3023fa7c +Block 0001 [ 38]: c21b2b9b865910a6 +Block 0001 [ 39]: 9863c770c0c38e0e +Block 0001 [ 40]: 656751169a661bbd +Block 0001 [ 41]: 97bf4f460e616ee0 +Block 0001 [ 42]: 2f98d464de04bb49 +Block 0001 [ 43]: c13647628f0acb3b +Block 0001 [ 44]: 92a96fa4ca62be7c +Block 0001 [ 45]: 92e69ce54fb41d93 +Block 0001 [ 46]: 06158c62c277c079 +Block 0001 [ 47]: 090f39247ffd50b7 +Block 0001 [ 48]: a0e56ea21f34f0a8 +Block 0001 [ 49]: ed1ef87602a07da6 +Block 0001 [ 50]: 497c9c19f2e34039 +Block 0001 [ 51]: 92f5cdb6e0ffc12b +Block 0001 [ 52]: 22b5b9756f3eef75 +Block 0001 [ 53]: f25efed27d000764 +Block 0001 [ 54]: bf9fb608b6e8e627 +Block 0001 [ 55]: 6cbf05cce0bdaf97 +Block 0001 [ 56]: 123c2a4d0b848602 +Block 0001 [ 57]: 52f9e2d84442b089 +Block 0001 [ 58]: e976ff506e1a80f9 +Block 0001 [ 59]: 8bf09d1b927c2d76 +Block 0001 [ 60]: b87219fd5c8ee8a0 +Block 0001 [ 61]: 713bd1d4eb7d8973 +Block 0001 [ 62]: 8492d5a39e7259ff +Block 0001 [ 63]: 5f5edf1d3c733f98 +Block 0001 [ 64]: 0246a25b84769963 +Block 0001 [ 65]: 286741bf3049d3c8 +Block 0001 [ 66]: 1636132789273cd3 +Block 0001 [ 67]: 9c613f569067aa59 +Block 0001 [ 68]: f5898e3a316a42f6 +Block 0001 [ 69]: 5b4c8006a01b9c06 +Block 0001 [ 70]: 66552db224c38815 +Block 0001 [ 71]: cf9749c91c42aa45 +Block 0001 [ 72]: ce7c98b8f4af9ffc +Block 0001 [ 73]: 68cf6a2b40f09c3b +Block 0001 [ 74]: 0905f46812a05b3f +Block 0001 [ 75]: 015cbead12bc8397 +Block 0001 [ 76]: 6d418c8d90ab5614 +Block 0001 [ 77]: d0b15b9a1ac9d73a +Block 0001 [ 78]: 887a93b384c035c7 +Block 0001 [ 79]: a29bcd852552c96d +Block 0001 [ 80]: 1d05609538a8b284 +Block 0001 [ 81]: 87662540dde6a878 +Block 0001 [ 82]: 6b1ae84769074ea0 +Block 0001 [ 83]: 6fbb58e7443b5f6f +Block 0001 [ 84]: 40fa72222a87e13a +Block 0001 [ 85]: b1e8a120d2800327 +Block 0001 [ 86]: a5476fd807667282 +Block 0001 [ 87]: ba68e2e45c8c0419 +Block 0001 [ 88]: 2e805d7dd9f3e7cd +Block 0001 [ 89]: 6c84b78c64307ecc +Block 0001 [ 90]: 2eaf6655fbf22f5d +Block 0001 [ 91]: 66602192bb412f8a +Block 0001 [ 92]: e34baf74015205ca +Block 0001 [ 93]: 39202b9ffa5c994f +Block 0001 [ 94]: 6d16e568327a9c2f +Block 0001 [ 95]: 085fae46b4269f70 +Block 0001 [ 96]: 999ad58b0a117bc4 +Block 0001 [ 97]: ce15de3d2e5826b8 +Block 0001 [ 98]: c03c2d06ffb5b99f +Block 0001 [ 99]: 84c6ba4f13458353 +Block 0001 [100]: beb6c09a3a5194cc +Block 0001 [101]: 34394fa0ff1091ab +Block 0001 [102]: fa11be98a4e8ee53 +Block 0001 [103]: b62f437abb79b7fe +Block 0001 [104]: 561bff03009cddfd +Block 0001 [105]: 171359698cc75e4a +Block 0001 [106]: 4c24145a2adc9229 +Block 0001 [107]: 8992e622258ef17e +Block 0001 [108]: 3a909d2299d4593e +Block 0001 [109]: c9965a227170be63 +Block 0001 [110]: 17741a4490c4af3c +Block 0001 [111]: 170c431f5463ee9f +Block 0001 [112]: 0df53bf18ea7ce09 +Block 0001 [113]: 4ccd25b38f8839e6 +Block 0001 [114]: b9c84384dadc8dd2 +Block 0001 [115]: e446ab27c623ecba +Block 0001 [116]: c4698296ed168df1 +Block 0001 [117]: ce98040ace2e51f3 +Block 0001 [118]: 2a305189d1de6c40 +Block 0001 [119]: 604bda6551a184dd +Block 0001 [120]: ce73633f7037c144 +Block 0001 [121]: 9e26b774ac1bdeff +Block 0001 [122]: e402d8dc15d6e1f7 +Block 0001 [123]: 72aaab45896934bc +Block 0001 [124]: f3ce458f876b08a7 +Block 0001 [125]: e4cbd63c9cb6522f +Block 0001 [126]: 0b499bbe86150fd8 +Block 0001 [127]: d13c062f33d4c833 +Block 0002 [ 0]: ba91b55bbcc9c44b +Block 0002 [ 1]: ef4e99f999dae035 +Block 0002 [ 2]: d8aa1c505b46ab7d +Block 0002 [ 3]: 161365f459855e5b +Block 0002 [ 4]: b59ce6a7276c0313 +Block 0002 [ 5]: b6bbfbe6c3a4ccd9 +Block 0002 [ 6]: 592972bf9bf98c94 +Block 0002 [ 7]: 5da354b04f15f821 +Block 0002 [ 8]: fa1006fa6a96df9b +Block 0002 [ 9]: 6263146aa513f00d +Block 0002 [ 10]: 0d811087fb7afb0e +Block 0002 [ 11]: 7e6e21016a92a8c2 +Block 0002 [ 12]: 45f09b0f30befd10 +Block 0002 [ 13]: 87a59e630c107ff3 +Block 0002 [ 14]: b723de6f0f63977b +Block 0002 [ 15]: 338d3e44d5e16d0b +Block 0002 [ 16]: 5ef7898fa708e2c4 +Block 0002 [ 17]: a6cbc1bab7a2544f +Block 0002 [ 18]: 8a036c0f36e22fe8 +Block 0002 [ 19]: 7cd77b1a3ad76405 +Block 0002 [ 20]: 07cf084d96f9e8ce +Block 0002 [ 21]: 19eecfa89fd77725 +Block 0002 [ 22]: b0c19b5d40941581 +Block 0002 [ 23]: 827182feebd76922 +Block 0002 [ 24]: 40ee3d84069c3a31 +Block 0002 [ 25]: c0489f64169a76ec +Block 0002 [ 26]: 53c889b64969b287 +Block 0002 [ 27]: adfbbb1914ca4759 +Block 0002 [ 28]: 2ba3aea68b7e970a +Block 0002 [ 29]: ca9d0cb6c1d00d60 +Block 0002 [ 30]: 72a72acc38c1fc7d +Block 0002 [ 31]: f8f027e04b16ade3 +Block 0002 [ 32]: ca75618529c9562b +Block 0002 [ 33]: fb8aff1638783021 +Block 0002 [ 34]: c6d05939d2f83537 +Block 0002 [ 35]: e0e251f3454d020f +Block 0002 [ 36]: c79a6f14d3dd3974 +Block 0002 [ 37]: 6493ede738fab09b +Block 0002 [ 38]: 210487350fa557c0 +Block 0002 [ 39]: d2dcede8fcd00251 +Block 0002 [ 40]: b88578fb1e583c32 +Block 0002 [ 41]: 460f7c6f933a805b +Block 0002 [ 42]: b48a1953360954f3 +Block 0002 [ 43]: c0f9d6d5f451df28 +Block 0002 [ 44]: d89207b92d8f9ba7 +Block 0002 [ 45]: e69a38a67a54f5c8 +Block 0002 [ 46]: 11f75a0109d257db +Block 0002 [ 47]: 19bd04eacdcfaafe +Block 0002 [ 48]: 8d4d532b061fceb1 +Block 0002 [ 49]: a0a79bc1d110c780 +Block 0002 [ 50]: a8e94cac065b310f +Block 0002 [ 51]: 97e43b3770c87ad3 +Block 0002 [ 52]: d0a77f2b7bc888eb +Block 0002 [ 53]: fdf7376f17f6b5e2 +Block 0002 [ 54]: 11f502100246cef9 +Block 0002 [ 55]: ad1a13d0aa5acd01 +Block 0002 [ 56]: d68613c11793b88f +Block 0002 [ 57]: 2ac95bcd120c8c32 +Block 0002 [ 58]: 935adb1cc9b686ab +Block 0002 [ 59]: 2d79c88d33ca29dc +Block 0002 [ 60]: 726453fd936c6ef4 +Block 0002 [ 61]: 990570ccb4919d9e +Block 0002 [ 62]: 69d0b6440d8e3183 +Block 0002 [ 63]: 6712b294bba95869 +Block 0002 [ 64]: 1eb00d8d33b41a7f +Block 0002 [ 65]: 2ee451e9ff0e71b3 +Block 0002 [ 66]: f9ffd27bee51d5b2 +Block 0002 [ 67]: 4d15fc6e5f3e5dae +Block 0002 [ 68]: a6899eff879f2a74 +Block 0002 [ 69]: 0806eb87bbee41a4 +Block 0002 [ 70]: 1c9f8648ec062246 +Block 0002 [ 71]: 56c2b32194d047b3 +Block 0002 [ 72]: 1f1a5896372ccbb6 +Block 0002 [ 73]: 1435a02c33ad89df +Block 0002 [ 74]: 9f938145231a369a +Block 0002 [ 75]: 3d72686ac66459b2 +Block 0002 [ 76]: 2e0222a2f9916308 +Block 0002 [ 77]: 9ed37e9132a8b19a +Block 0002 [ 78]: c24917158db12ce7 +Block 0002 [ 79]: 103588d94fc7757d +Block 0002 [ 80]: 2caf0fe9acf3ec0b +Block 0002 [ 81]: b61c96f3a96426d8 +Block 0002 [ 82]: 05de68a8c3ee42f1 +Block 0002 [ 83]: ec1f82f8af1d903b +Block 0002 [ 84]: 253fadbd87952312 +Block 0002 [ 85]: 1de5945b574001f0 +Block 0002 [ 86]: 03872fb2d6941330 +Block 0002 [ 87]: 32358ba499959926 +Block 0002 [ 88]: 9b28ce180b92a1a7 +Block 0002 [ 89]: a229f2616047a544 +Block 0002 [ 90]: 3c874b9946795967 +Block 0002 [ 91]: b8a26bd8e577f4a9 +Block 0002 [ 92]: e798d879adf569c8 +Block 0002 [ 93]: 6e23b3170dc7a258 +Block 0002 [ 94]: a0076913112ec88f +Block 0002 [ 95]: dda7a83d40ef7d5c +Block 0002 [ 96]: 1611deda81abcac5 +Block 0002 [ 97]: 074ccadbeea42d4a +Block 0002 [ 98]: 6ea2c5707adb8f45 +Block 0002 [ 99]: 80da00c20d4bb11e +Block 0002 [100]: dc96adbec42f44a7 +Block 0002 [101]: 5da32b2f6f13baa0 +Block 0002 [102]: ca8e52f587863a8b +Block 0002 [103]: 865a1d8964d6a636 +Block 0002 [104]: 729c4b71bc3f9ba4 +Block 0002 [105]: 38f394888711ad72 +Block 0002 [106]: 0e091de912e1a945 +Block 0002 [107]: 75ca35d28beaf076 +Block 0002 [108]: 798bdabc47914a36 +Block 0002 [109]: 1cb78eae0084f6e5 +Block 0002 [110]: 869c5d43fac72e43 +Block 0002 [111]: 7124df3e72e5055c +Block 0002 [112]: d9d6dee51ac44d5b +Block 0002 [113]: ef1f60c3aef1eb52 +Block 0002 [114]: deb93e3180de04f2 +Block 0002 [115]: e6f805543d0bce6e +Block 0002 [116]: 894cba70645c746f +Block 0002 [117]: 2fa8dfad858cfb19 +Block 0002 [118]: 43f65744789bd8fa +Block 0002 [119]: c43f4efa7614c598 +Block 0002 [120]: 2aa22dd068fe3e8c +Block 0002 [121]: 9c18388f5b00cbae +Block 0002 [122]: a9105c8405b24c5e +Block 0002 [123]: bae5b6ce43c5a9df +Block 0002 [124]: 0819dc402397abb4 +Block 0002 [125]: ead7908e2e7b1ead +Block 0002 [126]: 7c49e028000bef0a +Block 0002 [127]: 22cd0e710d3607f1 +Block 0003 [ 0]: dcc0ded548f10ae1 +Block 0003 [ 1]: 1d2e18366b7da0ca +Block 0003 [ 2]: e2de5a320056a6c4 +Block 0003 [ 3]: f9462a22af7c11e4 +Block 0003 [ 4]: af27d3d2b8650e71 +Block 0003 [ 5]: 532a58a92dd0f8f2 +Block 0003 [ 6]: b56b0087681d06fe +Block 0003 [ 7]: 78bbf2dd701c058e +Block 0003 [ 8]: 1dbddf25cec077ee +Block 0003 [ 9]: c812af1bdd8e26c6 +Block 0003 [ 10]: 177996cf3f1f819a +Block 0003 [ 11]: 6cd659e433485c29 +Block 0003 [ 12]: ac5ec15d9920127f +Block 0003 [ 13]: facf6ce5cb2d959f +Block 0003 [ 14]: cb487aaf1811e764 +Block 0003 [ 15]: 062071fcb5ffe047 +Block 0003 [ 16]: 71e3503a0e6df8a1 +Block 0003 [ 17]: 24775f27efc9ba78 +Block 0003 [ 18]: c6f1fb1f6b771d35 +Block 0003 [ 19]: 734fd5b47aaa319f +Block 0003 [ 20]: 2d8a40514d0f2027 +Block 0003 [ 21]: 6eb0e0c6562ecbf1 +Block 0003 [ 22]: beb6d3a66bdd7159 +Block 0003 [ 23]: 46d2e4eb9b3e5a34 +Block 0003 [ 24]: dc4c8bce2ca70df5 +Block 0003 [ 25]: 68d7472e72ce3eef +Block 0003 [ 26]: 18c267da346f3dc5 +Block 0003 [ 27]: a3fb91802385fc4d +Block 0003 [ 28]: 16e151f8930c0dc4 +Block 0003 [ 29]: 60585b77a71f4a7b +Block 0003 [ 30]: 620480b715921164 +Block 0003 [ 31]: 4609561ad34203f3 +Block 0003 [ 32]: d6970f63f27ed566 +Block 0003 [ 33]: 2516ff93960c7fe1 +Block 0003 [ 34]: e941af020fbf31c9 +Block 0003 [ 35]: f96d31e5bc2f9316 +Block 0003 [ 36]: 5585f2cbaf1b86af +Block 0003 [ 37]: f64a713997c5e5d0 +Block 0003 [ 38]: 7b32d6946b093c50 +Block 0003 [ 39]: 4b218a214ddc2548 +Block 0003 [ 40]: a679a8e777d60ef9 +Block 0003 [ 41]: dcec0857f3037b8a +Block 0003 [ 42]: 8ecde17ce4c21efb +Block 0003 [ 43]: ac79fed000ea2ced +Block 0003 [ 44]: f7663aeefdc36bed +Block 0003 [ 45]: 70c85d47ef60d769 +Block 0003 [ 46]: b73a6f9aa78acb29 +Block 0003 [ 47]: aaf447cfa5d92a7b +Block 0003 [ 48]: 7643418bfb8a731c +Block 0003 [ 49]: 4ebb46031677c4dc +Block 0003 [ 50]: 94d54d967c54291c +Block 0003 [ 51]: 76828c28b720d958 +Block 0003 [ 52]: c8b1025ca0206cda +Block 0003 [ 53]: 419c457ab3179aa9 +Block 0003 [ 54]: fdb0e83a8981ed63 +Block 0003 [ 55]: a48511be8c943210 +Block 0003 [ 56]: fa4a08568d0b2622 +Block 0003 [ 57]: 5ad1b56c9a8f97a4 +Block 0003 [ 58]: 16eb45c9c3c514c4 +Block 0003 [ 59]: 2735ab930271e048 +Block 0003 [ 60]: 00f8788ccc61d627 +Block 0003 [ 61]: a25d45d035893152 +Block 0003 [ 62]: 17f47f46131f888c +Block 0003 [ 63]: 9743f2b2ff11465f +Block 0003 [ 64]: 61f750aaf9c5026d +Block 0003 [ 65]: df0f25aaf5b74f1a +Block 0003 [ 66]: 0547223f8179b53a +Block 0003 [ 67]: a6a8dcabb1b433fb +Block 0003 [ 68]: 8a7e4041f55d8df2 +Block 0003 [ 69]: 76b1422ea39d47ef +Block 0003 [ 70]: 7c079885eddc7b66 +Block 0003 [ 71]: e3caf2a31d4946b6 +Block 0003 [ 72]: 09feca87c0fb72aa +Block 0003 [ 73]: e23465b2f7e56deb +Block 0003 [ 74]: ace65aeef77d812a +Block 0003 [ 75]: 8a8b2c97e8d229ba +Block 0003 [ 76]: f300a0a7f213a50c +Block 0003 [ 77]: 714bd30614b4bf2b +Block 0003 [ 78]: 38e78a67080d973c +Block 0003 [ 79]: c44ffe682b0b92e1 +Block 0003 [ 80]: 0a0dc7ad40a8cb31 +Block 0003 [ 81]: 328ad7a9c6aa3b94 +Block 0003 [ 82]: 722f8491e660bf19 +Block 0003 [ 83]: a947d1a8682da13f +Block 0003 [ 84]: 6625e609734bda42 +Block 0003 [ 85]: 374f7df0f39cac38 +Block 0003 [ 86]: 23118aea1aea8558 +Block 0003 [ 87]: 795944fa000fc32e +Block 0003 [ 88]: 5c0cc56ec4d36876 +Block 0003 [ 89]: b9a1a09c507a2f15 +Block 0003 [ 90]: a557c2b1be1df79f +Block 0003 [ 91]: b9b900f964885aee +Block 0003 [ 92]: 70d410b5dccc0cb6 +Block 0003 [ 93]: 2dfbdfb73da5cd7b +Block 0003 [ 94]: d64cb3edc647361e +Block 0003 [ 95]: e77cb0e072deb80b +Block 0003 [ 96]: 14b3f216a2e67b3d +Block 0003 [ 97]: 574fc539722db295 +Block 0003 [ 98]: 7a16f80eca5e7e11 +Block 0003 [ 99]: 76c8fea99b70aaa6 +Block 0003 [100]: fe0300268d802b45 +Block 0003 [101]: 86035e342b596a22 +Block 0003 [102]: eb5b48ad2d79cf70 +Block 0003 [103]: 424330100a9bc87c +Block 0003 [104]: d3ae2fa20e07bd7e +Block 0003 [105]: 357f0e5a5ebca41f +Block 0003 [106]: 4c86d4b417f49e3d +Block 0003 [107]: 86b060563b328b08 +Block 0003 [108]: 98e9754e35c1b4b6 +Block 0003 [109]: 8a4916af20b73399 +Block 0003 [110]: 63b6ca9dbe064f8b +Block 0003 [111]: 1ce064c5c3257af6 +Block 0003 [112]: c5ddc58ad0d6c4f3 +Block 0003 [113]: a06a361f0a442eef +Block 0003 [114]: 79256fae0347e4fe +Block 0003 [115]: 4fa9aef5835679ba +Block 0003 [116]: f0a58f6646413011 +Block 0003 [117]: 46b532af9df91ac9 +Block 0003 [118]: 1280b739029c7543 +Block 0003 [119]: 5d88e4ea2058889f +Block 0003 [120]: 3719c1706570dec9 +Block 0003 [121]: afa81e2d57d77489 +Block 0003 [122]: 18b3b64205efae40 +Block 0003 [123]: ee5fa7f06db1a8f7 +Block 0003 [124]: 83688896c9a489c7 +Block 0003 [125]: d9b1bbde14d95efe +Block 0003 [126]: f2259de115d64f0f +Block 0003 [127]: 710ec82f945eaadf +Block 0004 [ 0]: ea1fe2ab7a7036b2 +Block 0004 [ 1]: 85c6477a85f91236 +Block 0004 [ 2]: 05c5a08666d2931b +Block 0004 [ 3]: 41a7c68f43da7c7d +Block 0004 [ 4]: 0defb4961f1694da +Block 0004 [ 5]: d0304b7d3063a446 +Block 0004 [ 6]: 8c46ea68904e29d3 +Block 0004 [ 7]: d38da6c07cacb5ce +Block 0004 [ 8]: a603b0c600e9f236 +Block 0004 [ 9]: 5fc25b4c401b835c +Block 0004 [ 10]: 9bb577e3984fe6f9 +Block 0004 [ 11]: 021984c7e342b9e3 +Block 0004 [ 12]: cba1d5481629e4cf +Block 0004 [ 13]: 43fc94ea9a713a11 +Block 0004 [ 14]: e6af00ea4d897083 +Block 0004 [ 15]: b401ed470c0e1a4f +Block 0004 [ 16]: 231856f0c98b75b5 +Block 0004 [ 17]: 509380f041608001 +Block 0004 [ 18]: 7ddb7b55c3f7a32c +Block 0004 [ 19]: ab538267f69eb583 +Block 0004 [ 20]: fbc7aefaa0564964 +Block 0004 [ 21]: 7f158c8a60784aeb +Block 0004 [ 22]: 4648999ce4911e3c +Block 0004 [ 23]: 980beec1366efcba +Block 0004 [ 24]: 8759ff4a7082eae0 +Block 0004 [ 25]: 18a37bc4e3593613 +Block 0004 [ 26]: 9e0c3ab54634e89f +Block 0004 [ 27]: 0756ddc71ba6e41b +Block 0004 [ 28]: ce331883216a9055 +Block 0004 [ 29]: cbb90e3c5d30711c +Block 0004 [ 30]: 4a3391e02cb7e881 +Block 0004 [ 31]: 6b3a78414d4ab4df +Block 0004 [ 32]: 499ad48ed83fc044 +Block 0004 [ 33]: 72a9b10916d398c3 +Block 0004 [ 34]: ae72073814b44109 +Block 0004 [ 35]: bee50180bc61074a +Block 0004 [ 36]: 1690a81ebd7559d0 +Block 0004 [ 37]: 71085e55a036400a +Block 0004 [ 38]: 92fe8eec29736019 +Block 0004 [ 39]: cf735a813a92080a +Block 0004 [ 40]: 88252967ae06ad1b +Block 0004 [ 41]: 4150b41ba673b2e1 +Block 0004 [ 42]: 6889e1a8078d6d67 +Block 0004 [ 43]: dcebc07ddf63aba6 +Block 0004 [ 44]: e22b522bae7679fc +Block 0004 [ 45]: 52fc15ac981c648b +Block 0004 [ 46]: 4802cdc7906fe4cf +Block 0004 [ 47]: 19d42d9ff6b6d21a +Block 0004 [ 48]: 5ca85a0807f9dd5e +Block 0004 [ 49]: 8f48ad6e6ee76c50 +Block 0004 [ 50]: e2a894bc918e6f69 +Block 0004 [ 51]: d1fffa8c4c48fde2 +Block 0004 [ 52]: e627611dfdfb333f +Block 0004 [ 53]: c6c349ab4fdbc238 +Block 0004 [ 54]: 7da9f80b464ef8ea +Block 0004 [ 55]: 067d55581ee7e3c2 +Block 0004 [ 56]: fbe9b0ee4bf31aaf +Block 0004 [ 57]: a44b7b7efdd0e193 +Block 0004 [ 58]: 5e0db34b73b8ef2b +Block 0004 [ 59]: 88c8f30f1acc503e +Block 0004 [ 60]: e2cac47ce0fb4347 +Block 0004 [ 61]: a16f6d7841887932 +Block 0004 [ 62]: 219778816b0aa3f8 +Block 0004 [ 63]: a932db70e4feb4f4 +Block 0004 [ 64]: 075c7ef6126bc9a3 +Block 0004 [ 65]: 08245933a277dbe1 +Block 0004 [ 66]: eda3c6f55d8dec61 +Block 0004 [ 67]: c5e72f83f91d9ef0 +Block 0004 [ 68]: e6d401a4acb97d8f +Block 0004 [ 69]: f499338f8e2a6f25 +Block 0004 [ 70]: 5725ea1e9a7c9a40 +Block 0004 [ 71]: 78015cf40fd43146 +Block 0004 [ 72]: 8e53780ce8cc04b9 +Block 0004 [ 73]: 1a1c458d1d05af9e +Block 0004 [ 74]: 7a576ff157948c64 +Block 0004 [ 75]: 7c9f6f165d136062 +Block 0004 [ 76]: a038ea9b75a1f436 +Block 0004 [ 77]: 858043a7ad2aa121 +Block 0004 [ 78]: bfc610d9724d4325 +Block 0004 [ 79]: 659d18f29c4f7995 +Block 0004 [ 80]: 18049b3c80c77175 +Block 0004 [ 81]: 8060c37bc1f03a74 +Block 0004 [ 82]: bbc7c274ecf6a8d6 +Block 0004 [ 83]: a487c7e4734d3b39 +Block 0004 [ 84]: 681167693061d9a7 +Block 0004 [ 85]: ff6f7a17112ffb87 +Block 0004 [ 86]: 83df04decd05742a +Block 0004 [ 87]: 086f57c9ffc40003 +Block 0004 [ 88]: d9e31cb73edac6e7 +Block 0004 [ 89]: 93a8cf45366a874c +Block 0004 [ 90]: cee20eb0ca470904 +Block 0004 [ 91]: e7e0ace92d9b3d61 +Block 0004 [ 92]: b3ae86ff91d9f0fb +Block 0004 [ 93]: 6f227e57ae9e4c80 +Block 0004 [ 94]: 8a01ab3a4678eb6f +Block 0004 [ 95]: 80da3c6a719c0209 +Block 0004 [ 96]: a91c8edea57913af +Block 0004 [ 97]: ea6ab28a0e2f37f7 +Block 0004 [ 98]: 3f795b47ebeead2a +Block 0004 [ 99]: 5e1505078f12cff1 +Block 0004 [100]: ecba75be892e25ef +Block 0004 [101]: 6d3feef41567ae8a +Block 0004 [102]: 4517a0804df1ecc0 +Block 0004 [103]: 58bc996afd6c0712 +Block 0004 [104]: ba12c78acd45132e +Block 0004 [105]: 7ee89654818197a7 +Block 0004 [106]: 514ecbc9845bd37c +Block 0004 [107]: 11d29359991ee6ff +Block 0004 [108]: fe713242d737c3a3 +Block 0004 [109]: 32f84914ce2fdaf9 +Block 0004 [110]: 974ecb6b51e80ae7 +Block 0004 [111]: ed9c92603ca0e403 +Block 0004 [112]: a5058b1cdf5edd52 +Block 0004 [113]: 45ad7579118ccbfd +Block 0004 [114]: 964fc1432cf81d8e +Block 0004 [115]: a862bd5e512696af +Block 0004 [116]: 9b49f72e01622b4c +Block 0004 [117]: e72a25dad57c482a +Block 0004 [118]: 61e0eba167cca8f9 +Block 0004 [119]: 366294652d3cf919 +Block 0004 [120]: 5e58ea40ddbd5196 +Block 0004 [121]: 8aa2db0a693790b2 +Block 0004 [122]: c31566392c57c1ec +Block 0004 [123]: 8394c122b6d01178 +Block 0004 [124]: fb42ac99a450a533 +Block 0004 [125]: e6a9cff5060f1e82 +Block 0004 [126]: 60e2a713bde568b6 +Block 0004 [127]: 83e1282e71de5848 +Block 0005 [ 0]: c8a00942e6fab217 +Block 0005 [ 1]: 5f3900cc396002cb +Block 0005 [ 2]: c2098b6274dcc746 +Block 0005 [ 3]: 663ce4aa4874678f +Block 0005 [ 4]: 5792103890802ed5 +Block 0005 [ 5]: 93fa06bdc66fe195 +Block 0005 [ 6]: e0d6c790decb7cc5 +Block 0005 [ 7]: 0a81879d52836a92 +Block 0005 [ 8]: 0e52d7de3cde3cbb +Block 0005 [ 9]: 105ff6f967a4f460 +Block 0005 [ 10]: 40c3229e477af434 +Block 0005 [ 11]: b3c5128c5940310f +Block 0005 [ 12]: 139836a039ff17fd +Block 0005 [ 13]: bc1bf0e49c651fa7 +Block 0005 [ 14]: f1d26434c506cc0c +Block 0005 [ 15]: 0b02fbf0a0471f31 +Block 0005 [ 16]: 4ccdacb55b294a21 +Block 0005 [ 17]: 1ee8df23ccf5342a +Block 0005 [ 18]: 0e9456d3e7903d56 +Block 0005 [ 19]: b3f6794f08b15886 +Block 0005 [ 20]: fd65389bd69c17e2 +Block 0005 [ 21]: 9c26848be1617f55 +Block 0005 [ 22]: 78bc8f5c4a21097d +Block 0005 [ 23]: ff93a642f914134b +Block 0005 [ 24]: 39ea6e448d04d4ea +Block 0005 [ 25]: 708148a8d39a0745 +Block 0005 [ 26]: 0fbf4da1da80b844 +Block 0005 [ 27]: 61ae114a155d5ae4 +Block 0005 [ 28]: 0ef079afd2959963 +Block 0005 [ 29]: 54abcd41a84c0a5c +Block 0005 [ 30]: 9db495b2a6f908f3 +Block 0005 [ 31]: 9ce42afa31af3158 +Block 0005 [ 32]: 1eade628e9b7172c +Block 0005 [ 33]: 3439ac345c0e50f9 +Block 0005 [ 34]: 53d4b4a87da6c3cb +Block 0005 [ 35]: be412590435a41b3 +Block 0005 [ 36]: 2b72d2c74275ca6c +Block 0005 [ 37]: 64bdba533fc452f6 +Block 0005 [ 38]: 6b78aef20e0afdda +Block 0005 [ 39]: 0676838cbbf73829 +Block 0005 [ 40]: 78b240089f718c68 +Block 0005 [ 41]: 0a6bcb165c8ca245 +Block 0005 [ 42]: 5cbfbf1a7b7ceb7b +Block 0005 [ 43]: 1f5b4c47ce730d9d +Block 0005 [ 44]: 029cee169ab2033f +Block 0005 [ 45]: 4bf62feafb239c79 +Block 0005 [ 46]: ecb412518681a909 +Block 0005 [ 47]: 3aa3bb1e4f34c2fa +Block 0005 [ 48]: 27cc3db9b21b7193 +Block 0005 [ 49]: 189d495529dc5853 +Block 0005 [ 50]: 1b96e2533620e1ca +Block 0005 [ 51]: 00caee4e87e09b8a +Block 0005 [ 52]: 473818a7322b984c +Block 0005 [ 53]: 4edd73d65bbc1721 +Block 0005 [ 54]: 0ffede59ded70af0 +Block 0005 [ 55]: 49dc058fd59587bf +Block 0005 [ 56]: e86b8c9fc4e64fd7 +Block 0005 [ 57]: 16bb898549ee3a82 +Block 0005 [ 58]: 1f858fcea6c3cb44 +Block 0005 [ 59]: 56b71eaac6ded63a +Block 0005 [ 60]: 5d1be7993b9e5d43 +Block 0005 [ 61]: 6eea32343ea4be5b +Block 0005 [ 62]: 7a8a3e23abafbd1e +Block 0005 [ 63]: db0a8eff9415fab7 +Block 0005 [ 64]: 514e5db61cedb6bc +Block 0005 [ 65]: fa2f4ddb28d56882 +Block 0005 [ 66]: 9eb643cf6be83890 +Block 0005 [ 67]: 9ef39e62be287dad +Block 0005 [ 68]: 114a029159dd0e77 +Block 0005 [ 69]: c3c6258532250025 +Block 0005 [ 70]: 182987e1a9f9c56f +Block 0005 [ 71]: 7ae2aa48e9595ccb +Block 0005 [ 72]: c5b4a0f5c6297318 +Block 0005 [ 73]: 76b5455e463ac9b6 +Block 0005 [ 74]: abbdb2271a03b410 +Block 0005 [ 75]: 77d3c85d31fb0a50 +Block 0005 [ 76]: 4b37d5a3a36b5c2f +Block 0005 [ 77]: 45e4cb2d76d87e68 +Block 0005 [ 78]: 9da1636691c616a0 +Block 0005 [ 79]: d9f77c6c249f650e +Block 0005 [ 80]: 72d7afbfe8262971 +Block 0005 [ 81]: 3b35df52da5feabe +Block 0005 [ 82]: 7696b93b21273e02 +Block 0005 [ 83]: db4fc3efd9e8c0b5 +Block 0005 [ 84]: 78fb9a87cfc22f47 +Block 0005 [ 85]: 95dfe8b7f66af8ce +Block 0005 [ 86]: a489ea3ec00d689e +Block 0005 [ 87]: 7b428b52d1e5a706 +Block 0005 [ 88]: 1dc435d48476bbae +Block 0005 [ 89]: 9601f814fd53536f +Block 0005 [ 90]: ddc3b64730bb0dd6 +Block 0005 [ 91]: d5f14040203b4b69 +Block 0005 [ 92]: a35b17db080c898a +Block 0005 [ 93]: 9a42d2cc0cabd88d +Block 0005 [ 94]: d2ad2bc6b4cc79fd +Block 0005 [ 95]: 5a438d9a2d8060e7 +Block 0005 [ 96]: 19c6a90f24108aeb +Block 0005 [ 97]: a67eb012ba11cd90 +Block 0005 [ 98]: a6a96f8cebd4ad0d +Block 0005 [ 99]: e14f7c290a284bc1 +Block 0005 [100]: 7a08c29453764b2d +Block 0005 [101]: d06f68f4751b5e34 +Block 0005 [102]: 8e80c5dbbaf8ffe8 +Block 0005 [103]: 6b1e41c36c114373 +Block 0005 [104]: 49d830c4906de0fe +Block 0005 [105]: b0ee513791cad520 +Block 0005 [106]: ab9e60e0968d3a0a +Block 0005 [107]: 2284da3cb1f7c309 +Block 0005 [108]: 17a689e78674644d +Block 0005 [109]: bd9e41f8e2f85fce +Block 0005 [110]: 1c98dec77ed6cfc7 +Block 0005 [111]: 69f9539b6e1938cc +Block 0005 [112]: 2413ed5967171c23 +Block 0005 [113]: f52bb67788b17c5d +Block 0005 [114]: 9c58d36c1a0e4d9c +Block 0005 [115]: 986158f9bc6da22a +Block 0005 [116]: 6668746a8ab7701f +Block 0005 [117]: 395c1277a648bfcd +Block 0005 [118]: aa1f79834a1cd936 +Block 0005 [119]: d8888d13fd202ad5 +Block 0005 [120]: 925e9a3c90e002ca +Block 0005 [121]: fd773ff418bfd642 +Block 0005 [122]: 30253479ba10d167 +Block 0005 [123]: 90075643c6a2cdb3 +Block 0005 [124]: 65ce7cd429906ce3 +Block 0005 [125]: d045c0f7cc934b3a +Block 0005 [126]: 15610c6b2e28b0ff +Block 0005 [127]: 4e39efce679d8906 +Block 0006 [ 0]: 1e325ed2212387d1 +Block 0006 [ 1]: 3d0e385b3df2f34c +Block 0006 [ 2]: f5e9da41d473a50c +Block 0006 [ 3]: 6c41f75b09633114 +Block 0006 [ 4]: e5c40b0a5c3c3d3c +Block 0006 [ 5]: 70390c2060d02d5b +Block 0006 [ 6]: 13cfcc8f3a87a4e8 +Block 0006 [ 7]: 694cc08eb1cc357a +Block 0006 [ 8]: 066bd7778e34c240 +Block 0006 [ 9]: 02546d4e08d48cf1 +Block 0006 [ 10]: 667ac555c19f4fd9 +Block 0006 [ 11]: e2f0f49161bba1a1 +Block 0006 [ 12]: 46bcd9c803861439 +Block 0006 [ 13]: 6cf465b0d8236f95 +Block 0006 [ 14]: 12ace71d5959aad3 +Block 0006 [ 15]: aeeb352782be85af +Block 0006 [ 16]: 5a021e2205f64f63 +Block 0006 [ 17]: 3fbdb9434dc71254 +Block 0006 [ 18]: 8234a650879d7645 +Block 0006 [ 19]: 070f81fae6f2be5a +Block 0006 [ 20]: 1fd9b2c5f14d41d4 +Block 0006 [ 21]: 159455a467f28d58 +Block 0006 [ 22]: a0bddae8748dcd60 +Block 0006 [ 23]: 343aded618ecffcd +Block 0006 [ 24]: 97bff7d40fdcab71 +Block 0006 [ 25]: 32dc2e9bd0365fd1 +Block 0006 [ 26]: 4aa3dc7bb9c27451 +Block 0006 [ 27]: be3c25443096c335 +Block 0006 [ 28]: d73fae835d16832f +Block 0006 [ 29]: 82c5fe5db9b50422 +Block 0006 [ 30]: 5c822dec966da5d9 +Block 0006 [ 31]: d3cd392b9ce27b79 +Block 0006 [ 32]: c8baed6dabb7aef4 +Block 0006 [ 33]: 048770c6881afd15 +Block 0006 [ 34]: f122e8cfe8f76764 +Block 0006 [ 35]: 107168691e3f9738 +Block 0006 [ 36]: d65b69f4799b6db0 +Block 0006 [ 37]: 974445327044eebc +Block 0006 [ 38]: 50467387ff2d4696 +Block 0006 [ 39]: 838c29b0b0d34e28 +Block 0006 [ 40]: 436cd94c81c96b56 +Block 0006 [ 41]: 996ab1aa9f53b25c +Block 0006 [ 42]: cb76b9da4e401489 +Block 0006 [ 43]: 1f63bf42233b63ca +Block 0006 [ 44]: 6f123ceaa4ead5c6 +Block 0006 [ 45]: 2f4c070f4618f760 +Block 0006 [ 46]: 97ab4ea49e241fc4 +Block 0006 [ 47]: 37801e0034f0c0dd +Block 0006 [ 48]: b7161fda13bcd2da +Block 0006 [ 49]: ebe6cbe0e9b75f52 +Block 0006 [ 50]: b1ceca181c16a480 +Block 0006 [ 51]: e806183b1bf6b766 +Block 0006 [ 52]: 5880a473e2ac3d17 +Block 0006 [ 53]: 68c7e161cddca8ef +Block 0006 [ 54]: 21ce049e22ee28e4 +Block 0006 [ 55]: 94a98f294503b9b2 +Block 0006 [ 56]: 0f193763b7ad5b27 +Block 0006 [ 57]: 2d0702f236454417 +Block 0006 [ 58]: d40d19c0290b48bf +Block 0006 [ 59]: 42e5ab63638e87ad +Block 0006 [ 60]: 18120e37f9af0de5 +Block 0006 [ 61]: 14c510336c1373d1 +Block 0006 [ 62]: c6407562b0bbf1b9 +Block 0006 [ 63]: f1c2f7fa6181d9dd +Block 0006 [ 64]: bae064f2705158b4 +Block 0006 [ 65]: fcdc22a1aad7bf8c +Block 0006 [ 66]: b4f7dfd2a6ef95f8 +Block 0006 [ 67]: 15da42f7b3828d9e +Block 0006 [ 68]: 63861e4623edd926 +Block 0006 [ 69]: 0c9fb5d206786c38 +Block 0006 [ 70]: cc9197e49df2d79c +Block 0006 [ 71]: dd7237d89fb311e2 +Block 0006 [ 72]: b18667c1f5f22fd1 +Block 0006 [ 73]: 36a6df076e50f7fc +Block 0006 [ 74]: 3aabee6b302d1288 +Block 0006 [ 75]: 8892f49ba624e8fe +Block 0006 [ 76]: 4a2ced3a274ec188 +Block 0006 [ 77]: 187f7da5461e9b81 +Block 0006 [ 78]: fac3f4ca90050a52 +Block 0006 [ 79]: 2ffd193f6716cdef +Block 0006 [ 80]: 11cc9006d842b575 +Block 0006 [ 81]: e44268924819c35c +Block 0006 [ 82]: 725257733df64b91 +Block 0006 [ 83]: f7fdb2b0649f4a80 +Block 0006 [ 84]: 9087d12ba4d0c2bd +Block 0006 [ 85]: a494ade254d09b36 +Block 0006 [ 86]: 7ec3b1fc9e451974 +Block 0006 [ 87]: accba2d0e221af9c +Block 0006 [ 88]: c519f5c987806dc3 +Block 0006 [ 89]: 2f010a3439a00b8c +Block 0006 [ 90]: d48826af110704a7 +Block 0006 [ 91]: 5232aad8b79c6af4 +Block 0006 [ 92]: ca5d0256e2b35d0b +Block 0006 [ 93]: 10c295f5c2e46f19 +Block 0006 [ 94]: 8281197973bb9bb4 +Block 0006 [ 95]: df9f65ae49b5f93c +Block 0006 [ 96]: 7dfe5b4fa339d915 +Block 0006 [ 97]: 7965a0eafe0305bc +Block 0006 [ 98]: 7e734063819b7ca5 +Block 0006 [ 99]: 87005587175739ed +Block 0006 [100]: 985b7218bbd1e0df +Block 0006 [101]: a5c4aaad731e9e52 +Block 0006 [102]: 94f8576241e6a93e +Block 0006 [103]: e76117d948600c60 +Block 0006 [104]: 5fe8da4b25406121 +Block 0006 [105]: 14ee0178a8daba6b +Block 0006 [106]: 53226d7eab9099d9 +Block 0006 [107]: 9e6a09e237cff17f +Block 0006 [108]: bc7879f71ef775a9 +Block 0006 [109]: 04e5eb3b91e265d2 +Block 0006 [110]: dcfc2adf3b5553b6 +Block 0006 [111]: 7e4063b07d077a2f +Block 0006 [112]: fee54d9875bceac1 +Block 0006 [113]: c100d4e93dd98cca +Block 0006 [114]: 89f574f2e045e6ee +Block 0006 [115]: 03ed7984ab4ab699 +Block 0006 [116]: edb7c889baea7dce +Block 0006 [117]: 6b8250649f5b1668 +Block 0006 [118]: d41c7ee32201babf +Block 0006 [119]: d2922482c1e04578 +Block 0006 [120]: fcf0c6413ae4722b +Block 0006 [121]: b3b784a4c136f5c6 +Block 0006 [122]: 24e170a067979de6 +Block 0006 [123]: 4ef268adf91d6949 +Block 0006 [124]: 491e4adbc870f18b +Block 0006 [125]: e71f2fb4840b8c21 +Block 0006 [126]: bb0f5afaa1613284 +Block 0006 [127]: 4dd594b381688dc7 +Block 0007 [ 0]: 02054cdda9ac52e9 +Block 0007 [ 1]: 74c8c9e85b5e02f4 +Block 0007 [ 2]: 792716474cd648e9 +Block 0007 [ 3]: f6823e73b2025209 +Block 0007 [ 4]: abc2801a85f23f90 +Block 0007 [ 5]: fd6a18603579e622 +Block 0007 [ 6]: 0796b3f23d0f0cbb +Block 0007 [ 7]: af154a25aeb75835 +Block 0007 [ 8]: 172767f4ab83b39c +Block 0007 [ 9]: 1820af02c9f8c438 +Block 0007 [ 10]: 71b304192b469ba4 +Block 0007 [ 11]: 0733625d1f0b07ae +Block 0007 [ 12]: 5f3fb92e7b81e28f +Block 0007 [ 13]: 7f51f85692c08278 +Block 0007 [ 14]: e04d383c8d9e3cb4 +Block 0007 [ 15]: a808e2901eda05e8 +Block 0007 [ 16]: 95d18dffcd956e3f +Block 0007 [ 17]: c495bf92cc1eb2c3 +Block 0007 [ 18]: e4b5068e15c6237d +Block 0007 [ 19]: 038ebdd28a2f5e1f +Block 0007 [ 20]: e8a78fec794b374f +Block 0007 [ 21]: 49cf5128ad356c6c +Block 0007 [ 22]: 3a81503f52bb1d32 +Block 0007 [ 23]: b5e7a0c5e054f041 +Block 0007 [ 24]: f03d87e4f633fea8 +Block 0007 [ 25]: 35c905a45ed6f147 +Block 0007 [ 26]: 778b682178f753b0 +Block 0007 [ 27]: c11bd927fa19d8bf +Block 0007 [ 28]: 6f55f1e70164debb +Block 0007 [ 29]: 5b25d7d0ebae2719 +Block 0007 [ 30]: 4334711eeb4e61f0 +Block 0007 [ 31]: 8f25b6e85f26f5a5 +Block 0007 [ 32]: 99a59b735700c91c +Block 0007 [ 33]: ecbde758ee3d44a9 +Block 0007 [ 34]: 8beb7e8b0796896e +Block 0007 [ 35]: c776e92c6eace265 +Block 0007 [ 36]: 7b482447cdbb7923 +Block 0007 [ 37]: d066cf62481bd85d +Block 0007 [ 38]: 3760107b555f164d +Block 0007 [ 39]: bd2ed42b3469118a +Block 0007 [ 40]: b3b93ec089fa9570 +Block 0007 [ 41]: a3b83ac726cebc90 +Block 0007 [ 42]: f5a5f6ba7520d94c +Block 0007 [ 43]: 669acf3b099d0044 +Block 0007 [ 44]: 0c17fbece76f2cdb +Block 0007 [ 45]: 20c269cc5957f277 +Block 0007 [ 46]: 1cedb1bdfe8fd7b5 +Block 0007 [ 47]: 668576fe733972f0 +Block 0007 [ 48]: eb8ecef9caa76a30 +Block 0007 [ 49]: 545f45145682a434 +Block 0007 [ 50]: fd6d43e9e4053104 +Block 0007 [ 51]: 191be545a61fa7f5 +Block 0007 [ 52]: f55a49467b6d56bc +Block 0007 [ 53]: d16adb69a1271e48 +Block 0007 [ 54]: 135a7ad9f44cf075 +Block 0007 [ 55]: a6ee7d2c5de58c94 +Block 0007 [ 56]: 30629407d7baf044 +Block 0007 [ 57]: fd609a1f539a7ded +Block 0007 [ 58]: b2bd283aa38b095c +Block 0007 [ 59]: 63d7c3ebc0d760eb +Block 0007 [ 60]: f5985ffcbfdd3499 +Block 0007 [ 61]: aaf55572963fba6e +Block 0007 [ 62]: 3c9832957188c10e +Block 0007 [ 63]: c68df92e57b25f71 +Block 0007 [ 64]: 919fba1782add59b +Block 0007 [ 65]: 0af703d15bdafd30 +Block 0007 [ 66]: 56af9ba05fb32915 +Block 0007 [ 67]: 69504d9eef0b609e +Block 0007 [ 68]: 2c56d65a473495d7 +Block 0007 [ 69]: b799808d50d74b7e +Block 0007 [ 70]: 40face41b3f9b58b +Block 0007 [ 71]: 68f24c272359346d +Block 0007 [ 72]: 43371f1865cf7c3d +Block 0007 [ 73]: 94bbb9681e012ca5 +Block 0007 [ 74]: 99cf6f595e669bcd +Block 0007 [ 75]: b4eb393b2032bf37 +Block 0007 [ 76]: 2a609a846f0b45d1 +Block 0007 [ 77]: 00d3614b72e4e9e4 +Block 0007 [ 78]: 687d33b89c4af490 +Block 0007 [ 79]: 03801094658884a6 +Block 0007 [ 80]: aeac1d0951d7ac95 +Block 0007 [ 81]: 515de863fd8c5ae2 +Block 0007 [ 82]: e0b567e683019ee6 +Block 0007 [ 83]: 158ad01affa22539 +Block 0007 [ 84]: 80198398eadd3d4d +Block 0007 [ 85]: 30d23f755c4bdd55 +Block 0007 [ 86]: 707473e977a255b8 +Block 0007 [ 87]: ab3bf25f1921ebc9 +Block 0007 [ 88]: 87714bfba3c105bc +Block 0007 [ 89]: 07801fab91f7ead0 +Block 0007 [ 90]: e7a2ab5b12011c2e +Block 0007 [ 91]: 985187b1fe217d3a +Block 0007 [ 92]: 3c06fe12f45194c0 +Block 0007 [ 93]: 906b2d6ae3e5d42a +Block 0007 [ 94]: 7b4da55d949793fa +Block 0007 [ 95]: 496565ae57757dc3 +Block 0007 [ 96]: 2464c2638aa0dae9 +Block 0007 [ 97]: be41ced962625b10 +Block 0007 [ 98]: 1c0785d7518b9398 +Block 0007 [ 99]: 5621b3bde815f5fc +Block 0007 [100]: a24047d86c344073 +Block 0007 [101]: 440ec2f91f946f60 +Block 0007 [102]: c96a0decfc8fa5f7 +Block 0007 [103]: d1b64811d448ba49 +Block 0007 [104]: 48cb56cbd461f112 +Block 0007 [105]: 418a7ecf1da71421 +Block 0007 [106]: 0fc7bb85c55dde6f +Block 0007 [107]: 3e69bb8a9a749ec4 +Block 0007 [108]: 2cd764dd85558988 +Block 0007 [109]: 086a9a71dcc47efc +Block 0007 [110]: 8c633ed6465c6cb1 +Block 0007 [111]: aef902ed6cf036c7 +Block 0007 [112]: 435cd6832c6e226f +Block 0007 [113]: cf6da02414411184 +Block 0007 [114]: 3ac15ddfa8ccaf45 +Block 0007 [115]: 9bedcfc4d61d8144 +Block 0007 [116]: 9cfdb2843dec6e4c +Block 0007 [117]: 3789d674e283e722 +Block 0007 [118]: 7df19105095e5bba +Block 0007 [119]: 4838d5ba7017a5f2 +Block 0007 [120]: ecde583dff0051d7 +Block 0007 [121]: 39956b97b9fa4c14 +Block 0007 [122]: 5ea6bf784ecb1b42 +Block 0007 [123]: 198f7d4505405412 +Block 0007 [124]: 01bcf2435403b8f6 +Block 0007 [125]: e448fd363f0771ea +Block 0007 [126]: f2398b53dd97db61 +Block 0007 [127]: 54ff44b6be8d86a7 +Block 0008 [ 0]: 00ddd74226547ee8 +Block 0008 [ 1]: 24159266aff1280e +Block 0008 [ 2]: 8eadb32d57990290 +Block 0008 [ 3]: cf1b40ac0c8a5c8c +Block 0008 [ 4]: b7cf03c731e5b992 +Block 0008 [ 5]: f2dac041171f38bb +Block 0008 [ 6]: 69076dcccfb46ea3 +Block 0008 [ 7]: 5651dbed1100bfde +Block 0008 [ 8]: 53dceb417238cbc1 +Block 0008 [ 9]: 0b0744892b164cf3 +Block 0008 [ 10]: e35a3105fb950399 +Block 0008 [ 11]: 0dd91d7e71c2183e +Block 0008 [ 12]: 612d867f2effaab8 +Block 0008 [ 13]: 3080d3b0f71bb081 +Block 0008 [ 14]: 6d2bd684c1b15ede +Block 0008 [ 15]: 38420dfdc7bde3a5 +Block 0008 [ 16]: 509a5aec595434ae +Block 0008 [ 17]: 8fe411bf400f0853 +Block 0008 [ 18]: a4e7ef66ee576adf +Block 0008 [ 19]: f95c6ca90cfe8c0d +Block 0008 [ 20]: b8293e4db0f1ab2c +Block 0008 [ 21]: 92415d9ceeb88885 +Block 0008 [ 22]: 33201e020f8f673d +Block 0008 [ 23]: 225de785d2ad17bb +Block 0008 [ 24]: eb51e2cddb968254 +Block 0008 [ 25]: abcedb7f11da17d2 +Block 0008 [ 26]: 048be2d856275271 +Block 0008 [ 27]: 81c4b42d8e334881 +Block 0008 [ 28]: 20f23fba874aa617 +Block 0008 [ 29]: 554d738888d0c78a +Block 0008 [ 30]: 1e04ac9bdd6e31f2 +Block 0008 [ 31]: aa1eb35d3815a484 +Block 0008 [ 32]: 462c5af1abcc9cff +Block 0008 [ 33]: 57e47b4ef3f56bce +Block 0008 [ 34]: 91fd0882fb9f93ee +Block 0008 [ 35]: 75d4d9890062a2ae +Block 0008 [ 36]: 35d3aaaecdca0d36 +Block 0008 [ 37]: b20cb6d0461d42e2 +Block 0008 [ 38]: ea6a187ef41badd5 +Block 0008 [ 39]: 3a437dccfcb3b3f7 +Block 0008 [ 40]: ef7f28c8865b58ec +Block 0008 [ 41]: 43f1f573a75017a7 +Block 0008 [ 42]: f5124a1edbdf4cb9 +Block 0008 [ 43]: db8b81c93502b6fc +Block 0008 [ 44]: 19efaa7f870b165f +Block 0008 [ 45]: bdacffd1774061b1 +Block 0008 [ 46]: cbf97601989fc422 +Block 0008 [ 47]: dbdf79c7cb4e49e0 +Block 0008 [ 48]: 42565c17ab4572aa +Block 0008 [ 49]: 5a9516fed8a4eea5 +Block 0008 [ 50]: 40ad887a8ab8b545 +Block 0008 [ 51]: 4ae0d7ad030b2fb1 +Block 0008 [ 52]: dab076f1a9cf3cc2 +Block 0008 [ 53]: d0b1f467452016e2 +Block 0008 [ 54]: 8b10a4bb5d001dd5 +Block 0008 [ 55]: 9d44cb7201468d39 +Block 0008 [ 56]: fa24a3bebbb521eb +Block 0008 [ 57]: 144327403d115894 +Block 0008 [ 58]: ee982acd08e54537 +Block 0008 [ 59]: acc789d4f7e62797 +Block 0008 [ 60]: eae6f48d56b37821 +Block 0008 [ 61]: 2bff8aa7a8499a95 +Block 0008 [ 62]: 257e7a09e4176354 +Block 0008 [ 63]: dbb72295972e9ac9 +Block 0008 [ 64]: ea0b8135e233bcb3 +Block 0008 [ 65]: ff9c535a76808ac3 +Block 0008 [ 66]: 1c703b1b4c728f8c +Block 0008 [ 67]: 4ae21bc7002f7893 +Block 0008 [ 68]: c40b1fd090b0e033 +Block 0008 [ 69]: c35fc5717bbaffba +Block 0008 [ 70]: 0868adcb35c16d4a +Block 0008 [ 71]: cd17ecfca6479f03 +Block 0008 [ 72]: 46648f40bd72d80d +Block 0008 [ 73]: 77f2fad0fc87b479 +Block 0008 [ 74]: 31f2b2ba0b7ccfa5 +Block 0008 [ 75]: 5b85cd1c91ee5f74 +Block 0008 [ 76]: 0fec78845097ce3f +Block 0008 [ 77]: 088adaac9e7dc5cd +Block 0008 [ 78]: dccc6c3a857a4ba9 +Block 0008 [ 79]: 5a19f83b98b444cf +Block 0008 [ 80]: 9b5124cfed3ce26f +Block 0008 [ 81]: 38ddc9403b6d081d +Block 0008 [ 82]: da528afe93f665ef +Block 0008 [ 83]: 68845aca943ea5ea +Block 0008 [ 84]: 64847160c5dcc4ef +Block 0008 [ 85]: 8b4bee768926418c +Block 0008 [ 86]: 9cff834458860832 +Block 0008 [ 87]: 29193c32427c8a8b +Block 0008 [ 88]: 033acac495ed117e +Block 0008 [ 89]: 4a4172c01aef8ea6 +Block 0008 [ 90]: e14551ad4f04ca04 +Block 0008 [ 91]: 2da9c7411b038405 +Block 0008 [ 92]: fe6fdb9a710ad45e +Block 0008 [ 93]: ad63b771789e3e5c +Block 0008 [ 94]: 8ac32bef70c99599 +Block 0008 [ 95]: 6f507ae99b983a6e +Block 0008 [ 96]: ba5628d85986c214 +Block 0008 [ 97]: 725d58c7f6c6c1ce +Block 0008 [ 98]: 1a8214c75a42dba6 +Block 0008 [ 99]: 545d28f9455fc511 +Block 0008 [100]: 7b64a2e365a1d275 +Block 0008 [101]: 63fe760a1c262dd4 +Block 0008 [102]: c0b03d9d02ad5fcd +Block 0008 [103]: 901db491ff2f9d56 +Block 0008 [104]: d63c43b99276870d +Block 0008 [105]: 4cea375449b08481 +Block 0008 [106]: 8f32d81540fbca4a +Block 0008 [107]: f70a8336ac731f08 +Block 0008 [108]: 20508e588bde2fea +Block 0008 [109]: fa33830f6aca3567 +Block 0008 [110]: 51467149c89a20df +Block 0008 [111]: 2a33e0af1afb0909 +Block 0008 [112]: 44b0dd9cf07a759f +Block 0008 [113]: 4ae0823ba2849505 +Block 0008 [114]: 0e7000eba4682c1b +Block 0008 [115]: 0601a32520c29e86 +Block 0008 [116]: 1acef2bfed1a2490 +Block 0008 [117]: f56433c4b77ba5fd +Block 0008 [118]: 249169f9ebac36b3 +Block 0008 [119]: 3dff8073c16c9ddd +Block 0008 [120]: 2d3fa1047c8481af +Block 0008 [121]: a8da96ca08141a8b +Block 0008 [122]: 93da560820064f1e +Block 0008 [123]: 8394940dc494de93 +Block 0008 [124]: af1b5d8150fe7d3b +Block 0008 [125]: 9e57bfe48024e642 +Block 0008 [126]: 84193e6ca6daccc5 +Block 0008 [127]: 825d98f10fbae8e5 +Block 0009 [ 0]: 6116f146783633c9 +Block 0009 [ 1]: 8935acf007f9a42f +Block 0009 [ 2]: 363327a94a365cda +Block 0009 [ 3]: 40145736eab8bdcf +Block 0009 [ 4]: 63a805bfdac5881a +Block 0009 [ 5]: 56469b1c1503b144 +Block 0009 [ 6]: a68f19d26e9641a4 +Block 0009 [ 7]: 9a2ad1cfa5a780d2 +Block 0009 [ 8]: 94314d76f0e5e4cf +Block 0009 [ 9]: 4f53793011ffa6c0 +Block 0009 [ 10]: b29d9b3204ffb826 +Block 0009 [ 11]: 7f610c5d2a235cde +Block 0009 [ 12]: 192f89d97731c461 +Block 0009 [ 13]: 8fe626843baebd22 +Block 0009 [ 14]: 89880c978f68a70c +Block 0009 [ 15]: b6ae708839d63a02 +Block 0009 [ 16]: 3e693ff12084a6b0 +Block 0009 [ 17]: 171f108f0848032d +Block 0009 [ 18]: 6a0f5bafd20043f4 +Block 0009 [ 19]: 4b6de51ba2a9d7cf +Block 0009 [ 20]: 6895a0816b97bceb +Block 0009 [ 21]: 9abf256ba172eb74 +Block 0009 [ 22]: 88bf934006c0f404 +Block 0009 [ 23]: 23d290612e4455a3 +Block 0009 [ 24]: 57f6883f4db1f04d +Block 0009 [ 25]: 9988574cb4c3bc93 +Block 0009 [ 26]: 032ae161e8a24562 +Block 0009 [ 27]: 61b10a42786c20cb +Block 0009 [ 28]: 78c77004760ee74d +Block 0009 [ 29]: 8480f5a9ff0cad99 +Block 0009 [ 30]: 351f1f1f476c01a6 +Block 0009 [ 31]: 53020a75e59b9f0a +Block 0009 [ 32]: 06bd0455ae0f3a87 +Block 0009 [ 33]: 512dde0965bc4a52 +Block 0009 [ 34]: e4999a84b0df4686 +Block 0009 [ 35]: 1a9c16b4710e9310 +Block 0009 [ 36]: cc499906b76f2b9b +Block 0009 [ 37]: f983199dfc547586 +Block 0009 [ 38]: 10cd35c318c8b898 +Block 0009 [ 39]: fe08ee0f007d4bd5 +Block 0009 [ 40]: 50d7d98ac62b0ecc +Block 0009 [ 41]: 04f80f9b011117e6 +Block 0009 [ 42]: d99f3a076e400edd +Block 0009 [ 43]: d5bf5a4b773344e9 +Block 0009 [ 44]: be8168893cd26b55 +Block 0009 [ 45]: 1952cf7c98b3134f +Block 0009 [ 46]: a918b9de5d2e8664 +Block 0009 [ 47]: 853ccc7da2424092 +Block 0009 [ 48]: 2ec713fbf107b8fb +Block 0009 [ 49]: 2d119d176cc4ccf6 +Block 0009 [ 50]: ad257df871b099ce +Block 0009 [ 51]: 33b8904b2ca92680 +Block 0009 [ 52]: bbf1814327b90017 +Block 0009 [ 53]: 2fcfe327f39b8b1c +Block 0009 [ 54]: 5986f6465a96540d +Block 0009 [ 55]: a252fa4d75a1d09e +Block 0009 [ 56]: a8042efac888810b +Block 0009 [ 57]: 4d62fbc776a24f76 +Block 0009 [ 58]: d1066a2a4ec27d26 +Block 0009 [ 59]: 3420e65ecf597b18 +Block 0009 [ 60]: ff251e6526185035 +Block 0009 [ 61]: 6f19e43f1628cac9 +Block 0009 [ 62]: b24d9869cf6c2f90 +Block 0009 [ 63]: 6e37a79565716f96 +Block 0009 [ 64]: 3d94a95786eb2014 +Block 0009 [ 65]: 73086d129e94e92d +Block 0009 [ 66]: cbee49880781e87b +Block 0009 [ 67]: 61371356af82274f +Block 0009 [ 68]: 29b8c37cd53ad57a +Block 0009 [ 69]: 324733f2b5cdfa62 +Block 0009 [ 70]: ea13180259aa70a4 +Block 0009 [ 71]: e505a2f059c46d54 +Block 0009 [ 72]: 8110a82788ecaab9 +Block 0009 [ 73]: 2f85dc978a4929d3 +Block 0009 [ 74]: 9f1d14a079a20fcb +Block 0009 [ 75]: 54d18ce87ef37756 +Block 0009 [ 76]: f708cb5851c5d102 +Block 0009 [ 77]: 8fa3eb7e87e6619c +Block 0009 [ 78]: f93fd1f75756e8d4 +Block 0009 [ 79]: a6f3b595905af386 +Block 0009 [ 80]: 25efb720353451c1 +Block 0009 [ 81]: 80f8094683879e59 +Block 0009 [ 82]: 072ff09d395c9640 +Block 0009 [ 83]: f2f63b7020693ae5 +Block 0009 [ 84]: 6a42ab0c39e29403 +Block 0009 [ 85]: 27a9334f38dd7bad +Block 0009 [ 86]: 4fd11b325797f410 +Block 0009 [ 87]: cc2020b56cd3c7a4 +Block 0009 [ 88]: c54140df15111cd0 +Block 0009 [ 89]: a8a2482dadd5ff2c +Block 0009 [ 90]: 7f9d62d9890db82b +Block 0009 [ 91]: 4c3bb8918fef6957 +Block 0009 [ 92]: 739da007f3401e45 +Block 0009 [ 93]: 014441b4fc664f16 +Block 0009 [ 94]: ae2d8cdbec8a5b61 +Block 0009 [ 95]: 2546bd681965ce57 +Block 0009 [ 96]: c8dd35fbba2daeaa +Block 0009 [ 97]: 00ecc682b149ffa5 +Block 0009 [ 98]: 761a96f6d52275d3 +Block 0009 [ 99]: c881827304e78734 +Block 0009 [100]: 2a9dd8664f879242 +Block 0009 [101]: 715b472bf254b68d +Block 0009 [102]: 6ceff5a995f00cec +Block 0009 [103]: ec55ef14d6b8a520 +Block 0009 [104]: d314bc12ccb8b902 +Block 0009 [105]: 9b863e7e00226537 +Block 0009 [106]: c52fbf34d7e75d59 +Block 0009 [107]: e849c03be5b2da05 +Block 0009 [108]: b38e0205f0528189 +Block 0009 [109]: 7c97db54a80221f9 +Block 0009 [110]: c546349847005e72 +Block 0009 [111]: 376ec10d06843bda +Block 0009 [112]: c5cbd62cf9e43405 +Block 0009 [113]: e6cc6877ce17773f +Block 0009 [114]: 7613897fcd047e34 +Block 0009 [115]: ec48eae7984efc9c +Block 0009 [116]: eaa7f881f7f7c89c +Block 0009 [117]: 256fc2ebe98ef0da +Block 0009 [118]: 29dd9bd56a02a843 +Block 0009 [119]: f1d5b4e674d8c52f +Block 0009 [120]: fdc4eac9b3d350ef +Block 0009 [121]: 7261f2450e8f66a5 +Block 0009 [122]: efad51924a77e9d3 +Block 0009 [123]: fa96bf4dcb96faac +Block 0009 [124]: 4f6330cdbb2cc9b8 +Block 0009 [125]: 8da60af9c7d48e56 +Block 0009 [126]: ee4d25f5d0731762 +Block 0009 [127]: b034c742e982a237 +Block 0010 [ 0]: 1581550dad35e99a +Block 0010 [ 1]: 05d9fb5dd139072e +Block 0010 [ 2]: 4a750673a7a39cd8 +Block 0010 [ 3]: 5dd25947128cb63e +Block 0010 [ 4]: 3c70a199d2289f50 +Block 0010 [ 5]: cb5b05d366cac5cf +Block 0010 [ 6]: 6ec9d18e4f699e96 +Block 0010 [ 7]: 7ef94df9822d067e +Block 0010 [ 8]: cc0154b55089ed53 +Block 0010 [ 9]: 6cdff108c72c740b +Block 0010 [ 10]: 1922a63692a7ad69 +Block 0010 [ 11]: c5e57600387ec72d +Block 0010 [ 12]: ba8606b14cbf7795 +Block 0010 [ 13]: e8149dc812f3f495 +Block 0010 [ 14]: 1b7cd4786cdb1489 +Block 0010 [ 15]: 54b072f64b65506f +Block 0010 [ 16]: e468892cabab73b4 +Block 0010 [ 17]: 8c23f8b762b983d1 +Block 0010 [ 18]: 3379165a16599e67 +Block 0010 [ 19]: 251d4a02152ab9cd +Block 0010 [ 20]: 3ae70d9f24fd7f7b +Block 0010 [ 21]: 9031d6c71cc1df7a +Block 0010 [ 22]: 74ee35696178dbb1 +Block 0010 [ 23]: 74e72d75ca52359b +Block 0010 [ 24]: a084ac9759f74dba +Block 0010 [ 25]: 9023bbb7b6dad75f +Block 0010 [ 26]: 2cd8b7a9d6a0d0bf +Block 0010 [ 27]: 43632bfc53fef602 +Block 0010 [ 28]: 932c3ce043b9d5a5 +Block 0010 [ 29]: dd424acccc7f3426 +Block 0010 [ 30]: 6a00dafeb648d626 +Block 0010 [ 31]: 559e29b3670ae181 +Block 0010 [ 32]: 7cdb59d67e7b0847 +Block 0010 [ 33]: 9112fc484c1856ef +Block 0010 [ 34]: 6330d32dac31fc9c +Block 0010 [ 35]: f4cc8b585269d45b +Block 0010 [ 36]: 3ed4bad64f8d15b6 +Block 0010 [ 37]: 7d28923e599082d3 +Block 0010 [ 38]: 489779a0484a8a87 +Block 0010 [ 39]: 29f5ad3ea2de0e03 +Block 0010 [ 40]: 9e71cab15323b5ec +Block 0010 [ 41]: c778e291423650ee +Block 0010 [ 42]: d9fab25b79472568 +Block 0010 [ 43]: be31604f2b51db18 +Block 0010 [ 44]: 2c6b307dcd80a198 +Block 0010 [ 45]: dc4972e5fa1a6b8e +Block 0010 [ 46]: 1c9c9151b237a79f +Block 0010 [ 47]: d296b9c11e54dc49 +Block 0010 [ 48]: 061a87b483254066 +Block 0010 [ 49]: 9181748c91e61093 +Block 0010 [ 50]: 7f0245daa712fca3 +Block 0010 [ 51]: c31cd3af5e3c325a +Block 0010 [ 52]: 883f4f752fc1ed6a +Block 0010 [ 53]: 8e8a6b2ad2e9f78b +Block 0010 [ 54]: a6828c7b9ae69793 +Block 0010 [ 55]: 5fd21d7e09c07e76 +Block 0010 [ 56]: d46460dc13aea5d6 +Block 0010 [ 57]: 7837284a5f7fa560 +Block 0010 [ 58]: a67d348980d25e9e +Block 0010 [ 59]: 7105db7bc3a185eb +Block 0010 [ 60]: b640219f27d0a87d +Block 0010 [ 61]: 1cdbf6e6bcb96342 +Block 0010 [ 62]: 518a9db055b4caf6 +Block 0010 [ 63]: 6d9580534ef590f5 +Block 0010 [ 64]: c62f771deb9c4d44 +Block 0010 [ 65]: 86500c646cfe0cb7 +Block 0010 [ 66]: c5b986115fada57a +Block 0010 [ 67]: 8754d87c1c255f00 +Block 0010 [ 68]: a007aff8deb8ce6e +Block 0010 [ 69]: 19c17a24d62c3670 +Block 0010 [ 70]: 53051a43f12bcbd5 +Block 0010 [ 71]: 347d012a37ca3b7d +Block 0010 [ 72]: 0f26ed5326fe4a2f +Block 0010 [ 73]: 48d50db051744ec6 +Block 0010 [ 74]: e47219b32d675659 +Block 0010 [ 75]: 494134100b4fb7b6 +Block 0010 [ 76]: cd4e658c5c461b92 +Block 0010 [ 77]: 869f79190a5435eb +Block 0010 [ 78]: 935b606d09833496 +Block 0010 [ 79]: df9e265f08a00697 +Block 0010 [ 80]: c8fd59cd5b8a8b0e +Block 0010 [ 81]: 81281454bf7a1b4a +Block 0010 [ 82]: f0e94eefcdd74473 +Block 0010 [ 83]: 557c0ee5cfadfaed +Block 0010 [ 84]: c1e76d9b70f5085c +Block 0010 [ 85]: f326a4044566e114 +Block 0010 [ 86]: 2a3487f29b575895 +Block 0010 [ 87]: 47508a14bd6769ce +Block 0010 [ 88]: 161645c30267ebf9 +Block 0010 [ 89]: be3385c7c63566a0 +Block 0010 [ 90]: 52efbda144902dba +Block 0010 [ 91]: bd3ef2a4b859e30a +Block 0010 [ 92]: edd3aeea5b7b0d76 +Block 0010 [ 93]: f3742851032d0706 +Block 0010 [ 94]: 065c8a5ca189571a +Block 0010 [ 95]: 38073ab2b43d4fc5 +Block 0010 [ 96]: fff19498f099d9d8 +Block 0010 [ 97]: 76eb0ebbbfa4b030 +Block 0010 [ 98]: 2b467d2766ae5093 +Block 0010 [ 99]: e0d0fcf033eb16e2 +Block 0010 [100]: 455941faca082d2e +Block 0010 [101]: eb0ebc8001c0ee88 +Block 0010 [102]: 014ef8e92fdf1609 +Block 0010 [103]: a45754ecab977f21 +Block 0010 [104]: 8851e7729875e24c +Block 0010 [105]: 24eb03f9f64bd274 +Block 0010 [106]: 0ae3cce50b82f30b +Block 0010 [107]: 7d568c148cb4c4d8 +Block 0010 [108]: 29c6b592b88c18b3 +Block 0010 [109]: e6e17ec5b18be1d2 +Block 0010 [110]: f9454e53c4c0d899 +Block 0010 [111]: bca482e99dbc8b54 +Block 0010 [112]: bf43d5b658c4d900 +Block 0010 [113]: c1a5fa13cfdb425e +Block 0010 [114]: 514f21e92dd1bb69 +Block 0010 [115]: 605acc73c7d5d8bb +Block 0010 [116]: bb8057c50072ab70 +Block 0010 [117]: 1f9ffdab48f0ca58 +Block 0010 [118]: d535f7d811f5b7a7 +Block 0010 [119]: 98bd18ecc347eefc +Block 0010 [120]: 1e69ba6f3a7f4fd0 +Block 0010 [121]: e1e2a7af5e7e361a +Block 0010 [122]: 3df786477ee6f7f7 +Block 0010 [123]: c2f3d9ea7feb0ec3 +Block 0010 [124]: 50bd7d5499aaca90 +Block 0010 [125]: e38fb4acdcf1b6ac +Block 0010 [126]: 4f92cefd6ebb0794 +Block 0010 [127]: f275a4842c740714 +Block 0011 [ 0]: f9d07509503819bd +Block 0011 [ 1]: 7ce6341ac752d873 +Block 0011 [ 2]: cf4550cbedff3a5e +Block 0011 [ 3]: 8768db6544d9c977 +Block 0011 [ 4]: 4fbd5c2b0a7036c1 +Block 0011 [ 5]: ee474ae73d0e3156 +Block 0011 [ 6]: 478b517b17c70aee +Block 0011 [ 7]: d67f67db907587b7 +Block 0011 [ 8]: 98623377f34cc9fa +Block 0011 [ 9]: 517221fb649687ff +Block 0011 [ 10]: 035cc4b9754f3cea +Block 0011 [ 11]: d172d1d16e842534 +Block 0011 [ 12]: 126ba6d66dc03c10 +Block 0011 [ 13]: ef2bff64caeafb53 +Block 0011 [ 14]: a8d87ec45b71adef +Block 0011 [ 15]: c0fc912f4cb97dbb +Block 0011 [ 16]: d461a1fe274d00ea +Block 0011 [ 17]: b3c91d2c2b561f50 +Block 0011 [ 18]: d9d15e51315c1662 +Block 0011 [ 19]: 237314480e44d2f6 +Block 0011 [ 20]: cd1666524d9908be +Block 0011 [ 21]: 399c98b7b390fc51 +Block 0011 [ 22]: 711e961e04711c5a +Block 0011 [ 23]: 4039879c114b23c1 +Block 0011 [ 24]: a5fbd0eb93a342fe +Block 0011 [ 25]: 3f859f3ddc5e8819 +Block 0011 [ 26]: 93dcfe098f9de5aa +Block 0011 [ 27]: f3d3afe76a718bd6 +Block 0011 [ 28]: 752df2d429465e81 +Block 0011 [ 29]: bd4a4f26d19791f4 +Block 0011 [ 30]: 4c57242e5f0b55aa +Block 0011 [ 31]: 01275075e4f8a4e1 +Block 0011 [ 32]: 3a37199950dce330 +Block 0011 [ 33]: 2e41aafd16cf1b05 +Block 0011 [ 34]: 92243d071386ab20 +Block 0011 [ 35]: d869ba9a984d4bde +Block 0011 [ 36]: 6be491e7a3be8d9f +Block 0011 [ 37]: acef9890cec1a375 +Block 0011 [ 38]: e232f0287c136279 +Block 0011 [ 39]: d95325c0d7ab9a82 +Block 0011 [ 40]: 90d8b5b0c8c6afa1 +Block 0011 [ 41]: 5bb67f83bf5f1a83 +Block 0011 [ 42]: 75affbe23953fd5b +Block 0011 [ 43]: d43a2db1ac58dec5 +Block 0011 [ 44]: 0af8868fbcd3ebe0 +Block 0011 [ 45]: 6f0cf6609fbc2a32 +Block 0011 [ 46]: 1b4a24795691fda7 +Block 0011 [ 47]: e6e032b6720d0903 +Block 0011 [ 48]: 8b4a5e1ac40c6d53 +Block 0011 [ 49]: f09c4457e757d976 +Block 0011 [ 50]: d5eb3b17dbbf75e2 +Block 0011 [ 51]: 74ee41b96ce4915d +Block 0011 [ 52]: f5a6c444f6c7dab4 +Block 0011 [ 53]: a6dd992782c12a9b +Block 0011 [ 54]: 82ab2f6c6abd9c4b +Block 0011 [ 55]: 24dbb03795c538e2 +Block 0011 [ 56]: b703785f0aa21442 +Block 0011 [ 57]: 1911ce525bff5d72 +Block 0011 [ 58]: edc77bb56a4ab0c1 +Block 0011 [ 59]: 84ad7caa4e66e14c +Block 0011 [ 60]: 660aa6a2745246a4 +Block 0011 [ 61]: d0531eb0c94d2835 +Block 0011 [ 62]: e07ea2345379ad0d +Block 0011 [ 63]: 499700d903192292 +Block 0011 [ 64]: 595e9750f70bbf3f +Block 0011 [ 65]: 3ec2b0d5546008ce +Block 0011 [ 66]: 1e9afbafb3fe7892 +Block 0011 [ 67]: 051889a2e3b3c12e +Block 0011 [ 68]: a47cf414a9c2e3ee +Block 0011 [ 69]: ad75a5ec9388091b +Block 0011 [ 70]: e6c48f94041c6d16 +Block 0011 [ 71]: ac4d0e7ad884428c +Block 0011 [ 72]: 222e82f8af709648 +Block 0011 [ 73]: 33b376379cc8d21e +Block 0011 [ 74]: 97ed5f80b3ab3a65 +Block 0011 [ 75]: ca903f8faa0a9f3a +Block 0011 [ 76]: 766d650d4f88ad10 +Block 0011 [ 77]: 49004a3e3d5a0cec +Block 0011 [ 78]: 80fe987f05769c43 +Block 0011 [ 79]: e7ab3340c8480b4f +Block 0011 [ 80]: eb4b06163cbd2966 +Block 0011 [ 81]: 18256d0b24389063 +Block 0011 [ 82]: c39c1550f3fda74e +Block 0011 [ 83]: 254f94232ffc456f +Block 0011 [ 84]: 7a07379880f898c1 +Block 0011 [ 85]: 10bcbb1e56036b64 +Block 0011 [ 86]: aa13e477412afb1b +Block 0011 [ 87]: c9efe5bd72b75944 +Block 0011 [ 88]: e721be1923769258 +Block 0011 [ 89]: 2d85f117a10321c9 +Block 0011 [ 90]: 6830c4cbc6b34147 +Block 0011 [ 91]: 407cb2e8b2e35046 +Block 0011 [ 92]: 610d429a7aa7bc01 +Block 0011 [ 93]: a87b6f3066bd4f95 +Block 0011 [ 94]: 15c058703f06b644 +Block 0011 [ 95]: 4e3bdd301ec7a0f1 +Block 0011 [ 96]: 5e726da6a1338bba +Block 0011 [ 97]: ce3bc3a123db3655 +Block 0011 [ 98]: 77225e3ff6f31055 +Block 0011 [ 99]: 0656971d13d67e7c +Block 0011 [100]: 7c05554b1068393c +Block 0011 [101]: 4810197934d77904 +Block 0011 [102]: 349cc06be7997ef9 +Block 0011 [103]: d00b3ded2d522f5e +Block 0011 [104]: 227acc01f569ca9e +Block 0011 [105]: 977c0a71d22f2cd7 +Block 0011 [106]: 8017ecfa54e3d7a8 +Block 0011 [107]: 3d1aaf609a4a527b +Block 0011 [108]: a62db92347317e92 +Block 0011 [109]: 063b9b695ce07f42 +Block 0011 [110]: 7e6c285a42777ae4 +Block 0011 [111]: 57c8f2a7a0fb2918 +Block 0011 [112]: 920ee3f0d6bc0111 +Block 0011 [113]: 9c3aa6dad4a6741c +Block 0011 [114]: 858bcf22afea1c1f +Block 0011 [115]: efde8bec8729ea86 +Block 0011 [116]: fb858be9ffe79d1f +Block 0011 [117]: df4d290f94188e6b +Block 0011 [118]: d15a924c44977496 +Block 0011 [119]: 96b0d68c74b98b21 +Block 0011 [120]: 45123713a09a64ce +Block 0011 [121]: 7adb89ae11063d09 +Block 0011 [122]: 3957bcb1cadfb4db +Block 0011 [123]: 86e2fb643a1f1b25 +Block 0011 [124]: 70ccb8e27170d6d2 +Block 0011 [125]: 72b9f822beed7313 +Block 0011 [126]: d3a930c21c4a2956 +Block 0011 [127]: 8273bb90c3b5600e +Block 0012 [ 0]: 8806f36d35c1423b +Block 0012 [ 1]: 14653c73ccf5bc88 +Block 0012 [ 2]: 4207fc5b55d55fda +Block 0012 [ 3]: efbdfa4d752b6918 +Block 0012 [ 4]: a4a2d8f6065b95d5 +Block 0012 [ 5]: 97ae0bd93615b75e +Block 0012 [ 6]: ea30d4b1d695e231 +Block 0012 [ 7]: 0f0ca5ca8152e942 +Block 0012 [ 8]: 383566c45510b12b +Block 0012 [ 9]: a0ae9a21d1a1df6b +Block 0012 [ 10]: 71353b98020fb2f4 +Block 0012 [ 11]: 14defb047ecd1cfc +Block 0012 [ 12]: 6f8d61281e48d8d3 +Block 0012 [ 13]: 4e68a4a4107f1cbf +Block 0012 [ 14]: 82ac58dc69bed136 +Block 0012 [ 15]: 082cf1a328c9d60a +Block 0012 [ 16]: cd7c6c4269625174 +Block 0012 [ 17]: dc4e7de5e2132891 +Block 0012 [ 18]: 605722ef953732bb +Block 0012 [ 19]: ef28c8050fb1ffbb +Block 0012 [ 20]: 8b6d0fab9e173cd4 +Block 0012 [ 21]: a9f69ac0b87c3248 +Block 0012 [ 22]: b00898c9abd03a75 +Block 0012 [ 23]: 743e6179354ef1d4 +Block 0012 [ 24]: ecc061362554bb3d +Block 0012 [ 25]: 9ac900bdfe1342cb +Block 0012 [ 26]: 39a9deeb4bd618ac +Block 0012 [ 27]: ea98a8de1ba57756 +Block 0012 [ 28]: d72d9b53c6e21291 +Block 0012 [ 29]: e711b901b297e96e +Block 0012 [ 30]: 9762d95e177c4f1f +Block 0012 [ 31]: c55051fa55ba56b3 +Block 0012 [ 32]: 5d73ae3e34932185 +Block 0012 [ 33]: 248c4c499a5d1382 +Block 0012 [ 34]: 1bde77252efbe61f +Block 0012 [ 35]: da398389113e48ac +Block 0012 [ 36]: 251b9f0f957ff7bb +Block 0012 [ 37]: 9ecc553346dcd262 +Block 0012 [ 38]: 9cb0cb2499323e09 +Block 0012 [ 39]: 196608d377614970 +Block 0012 [ 40]: ad301f3b39eab9eb +Block 0012 [ 41]: 07292fb5039b5a0c +Block 0012 [ 42]: b8c242fde0656a78 +Block 0012 [ 43]: de2ffbe33e4255f4 +Block 0012 [ 44]: ef88307c4af2465f +Block 0012 [ 45]: 8130e319111c7e12 +Block 0012 [ 46]: d30446203591a7f0 +Block 0012 [ 47]: 92d9a9c97962de12 +Block 0012 [ 48]: 81ffb8785be950b8 +Block 0012 [ 49]: dd7a8f4f4f1be7fc +Block 0012 [ 50]: ae16a8611e2fab24 +Block 0012 [ 51]: 274ae59677ed5cde +Block 0012 [ 52]: 9ee2a215fc45877d +Block 0012 [ 53]: 44c02472b9d4865e +Block 0012 [ 54]: 7a99faae6ce71424 +Block 0012 [ 55]: 9f14ec3364b617b5 +Block 0012 [ 56]: 4e5f21c0f9fa5cdb +Block 0012 [ 57]: 8581be6ff99ff6e9 +Block 0012 [ 58]: 286a475c94d8531b +Block 0012 [ 59]: 5829a37f5059aba7 +Block 0012 [ 60]: 63966f77f572f1fa +Block 0012 [ 61]: 2b385db8fdd63b29 +Block 0012 [ 62]: 7f19c5dfa2d51b19 +Block 0012 [ 63]: e6c7faac63fd8be9 +Block 0012 [ 64]: 20978fded5ed200c +Block 0012 [ 65]: 3d7f27000be3bf33 +Block 0012 [ 66]: 424c8604e3439841 +Block 0012 [ 67]: c7c17415eea225fd +Block 0012 [ 68]: 119ad57ef17db880 +Block 0012 [ 69]: 7c5ec22d1e8246f4 +Block 0012 [ 70]: 02aaff890ed6a0d8 +Block 0012 [ 71]: 38885a315c9cb170 +Block 0012 [ 72]: 9bdea427f4331556 +Block 0012 [ 73]: 0b9d377ac4a053ee +Block 0012 [ 74]: ae093cbad8ebfd1f +Block 0012 [ 75]: da9a129e658ed6d5 +Block 0012 [ 76]: 5fc18fb4ede1183c +Block 0012 [ 77]: 03ac6cc465a317d6 +Block 0012 [ 78]: 90216f4e34b94195 +Block 0012 [ 79]: 7374632b8bfa4ed2 +Block 0012 [ 80]: 3f01f0d5c1d11263 +Block 0012 [ 81]: ce97cb17f8470c45 +Block 0012 [ 82]: 48446e58576c981b +Block 0012 [ 83]: 3af83ee98ee746f7 +Block 0012 [ 84]: e036c677e9d4f210 +Block 0012 [ 85]: 15e75b241dadf152 +Block 0012 [ 86]: 6414a2ac0b3d0934 +Block 0012 [ 87]: 3e2bbf6a7f90858e +Block 0012 [ 88]: a8db21963b8e39f3 +Block 0012 [ 89]: fd73cb703b0ac5ce +Block 0012 [ 90]: 2f34ee7be12306e7 +Block 0012 [ 91]: c24f9ac5f72fd067 +Block 0012 [ 92]: cc2171bb74a68e15 +Block 0012 [ 93]: 80834464ea81f238 +Block 0012 [ 94]: d2344c88383cfd55 +Block 0012 [ 95]: e8241e72f2d88c34 +Block 0012 [ 96]: 7510928f8266427e +Block 0012 [ 97]: fb57a7823a65cb28 +Block 0012 [ 98]: d30dd5b6d6bfc46a +Block 0012 [ 99]: 1350828149e5ee7d +Block 0012 [100]: 944087103d17187e +Block 0012 [101]: 72c9e02ae3037f35 +Block 0012 [102]: aae68c10254df726 +Block 0012 [103]: 3c72bcac4a61afae +Block 0012 [104]: ce0501cd931819df +Block 0012 [105]: 426e32d58167fbfb +Block 0012 [106]: 9e5dc832972aa924 +Block 0012 [107]: 848b3f39861c3eb5 +Block 0012 [108]: ed871992cfd6e2e3 +Block 0012 [109]: 1843a4cebb0d19ac +Block 0012 [110]: 6b59416e812adc5b +Block 0012 [111]: ff7753e7dd87cb07 +Block 0012 [112]: d85a0a1902640928 +Block 0012 [113]: 5a770deeb225fbce +Block 0012 [114]: 7246a7c49bf20941 +Block 0012 [115]: c0e9edc2c5b87ffa +Block 0012 [116]: fae6521ac53f5836 +Block 0012 [117]: 9eca1d246c821c14 +Block 0012 [118]: 6ec6ced3960fef2c +Block 0012 [119]: 9af70f8caf586a52 +Block 0012 [120]: 5f30942072110be3 +Block 0012 [121]: bfc7df63c519ee08 +Block 0012 [122]: 012890af79b89e65 +Block 0012 [123]: 17c6a29fd7ea0fca +Block 0012 [124]: 9284e78adc31e53b +Block 0012 [125]: 56d34c2e48b5e556 +Block 0012 [126]: 6f7c8fa37870b55e +Block 0012 [127]: 64d5549f6eb29b2f +Block 0013 [ 0]: e72efbcee6e1fcc2 +Block 0013 [ 1]: 41c9fa08bec04f71 +Block 0013 [ 2]: afdff9477d9dd990 +Block 0013 [ 3]: 847e1b15aee75dd3 +Block 0013 [ 4]: 51a5faf1e49312e4 +Block 0013 [ 5]: 98bcc5a1b36fcb8d +Block 0013 [ 6]: d4d840de4f9c632b +Block 0013 [ 7]: 5c9caaea2214b8ad +Block 0013 [ 8]: dfb03ae68b0b3a54 +Block 0013 [ 9]: 1d791e93ae70eff7 +Block 0013 [ 10]: 9924c218180bca12 +Block 0013 [ 11]: 5cabe42dcc8eceb6 +Block 0013 [ 12]: 3aadd556303df415 +Block 0013 [ 13]: a2e90919b4a888ff +Block 0013 [ 14]: ea9096263ccf5466 +Block 0013 [ 15]: 230bcadd55c5d8cf +Block 0013 [ 16]: 72b74072cfd88278 +Block 0013 [ 17]: 99287c1741b988a4 +Block 0013 [ 18]: 9261d65b6402547a +Block 0013 [ 19]: 95fd4b54d8291fd5 +Block 0013 [ 20]: fbf7d4b4962449ba +Block 0013 [ 21]: bd89c24c92cdabd6 +Block 0013 [ 22]: 1773376e4f1cb495 +Block 0013 [ 23]: f196d1f575cfef2e +Block 0013 [ 24]: 5d443966d2508d3c +Block 0013 [ 25]: df929f9765749018 +Block 0013 [ 26]: 4e98bda4c9aa91d6 +Block 0013 [ 27]: 3b74998d38c6f9a9 +Block 0013 [ 28]: a69472986a031370 +Block 0013 [ 29]: 55999e6cbb50ffe9 +Block 0013 [ 30]: df955f1fc8cebba6 +Block 0013 [ 31]: 7f9090b065d11439 +Block 0013 [ 32]: f522cab9b83ca10e +Block 0013 [ 33]: 27644ea4cb350062 +Block 0013 [ 34]: ff6d1db5e34d9eee +Block 0013 [ 35]: 0a03ae8f8fde0222 +Block 0013 [ 36]: 8d71db40f234b291 +Block 0013 [ 37]: 93dc4ec94a65e856 +Block 0013 [ 38]: 23169228ab00ccb9 +Block 0013 [ 39]: 92f2b127f4ffa819 +Block 0013 [ 40]: 36260a0ad39d896a +Block 0013 [ 41]: cb46dfcf38f9487d +Block 0013 [ 42]: 71351268c905ab11 +Block 0013 [ 43]: 8a726ed65034f3dd +Block 0013 [ 44]: 6ff7b9cd220b4b25 +Block 0013 [ 45]: d09bb2bbdadda776 +Block 0013 [ 46]: 14f63b5e2576d304 +Block 0013 [ 47]: 2012e78d9f11d05f +Block 0013 [ 48]: 84c4c6327aba9915 +Block 0013 [ 49]: 64bd4339a6f4730e +Block 0013 [ 50]: e8db6637f982ba64 +Block 0013 [ 51]: 80426b505ab9b659 +Block 0013 [ 52]: 7b183c8d992d6e89 +Block 0013 [ 53]: 27be6d49797c8929 +Block 0013 [ 54]: c2ce4c1f3bc4bc85 +Block 0013 [ 55]: 10f597203eb06167 +Block 0013 [ 56]: b337d265c1ffbae5 +Block 0013 [ 57]: 2cb28d5998618cb2 +Block 0013 [ 58]: 3694423e3dce42ee +Block 0013 [ 59]: a4f273033178e7c3 +Block 0013 [ 60]: c3046ec981137bb3 +Block 0013 [ 61]: 1009e948b01acf67 +Block 0013 [ 62]: cf8ff3786b295ab4 +Block 0013 [ 63]: c326444756ddd088 +Block 0013 [ 64]: e6319be1c3024f8d +Block 0013 [ 65]: 7ea1cdbcab9d1e37 +Block 0013 [ 66]: 5a278a8c214dffc3 +Block 0013 [ 67]: e1e3096f9467c652 +Block 0013 [ 68]: 5ca93fb559033a8f +Block 0013 [ 69]: 6e94c69f7f3833be +Block 0013 [ 70]: 0f28fd96ca3fbe9d +Block 0013 [ 71]: f45a753a250f8885 +Block 0013 [ 72]: 85596b79d2b69dc5 +Block 0013 [ 73]: 668a8092d5936a81 +Block 0013 [ 74]: ca8f2365d51addcf +Block 0013 [ 75]: b6d7f0efd51024da +Block 0013 [ 76]: eae27ca92101b01d +Block 0013 [ 77]: 41a31214dff85a05 +Block 0013 [ 78]: cefc4a5bc9e160b6 +Block 0013 [ 79]: b2ec3b0af6d0cfad +Block 0013 [ 80]: eaf8ccbae405a96a +Block 0013 [ 81]: bf80f0cb8290672b +Block 0013 [ 82]: 1d354282bfb867b0 +Block 0013 [ 83]: defd9743a6ed5ec4 +Block 0013 [ 84]: b9f7e89081a83de9 +Block 0013 [ 85]: 475a016e71f52c7b +Block 0013 [ 86]: 9200fa2b3e510c1c +Block 0013 [ 87]: 722dbf069e3bb00a +Block 0013 [ 88]: 4456a0288267d739 +Block 0013 [ 89]: 9bb0deec79a73b28 +Block 0013 [ 90]: 5668f034f9593324 +Block 0013 [ 91]: 716f5609d579186c +Block 0013 [ 92]: d3885db0ca291647 +Block 0013 [ 93]: 7362a661049f019a +Block 0013 [ 94]: 2a3af104bfdf5f9d +Block 0013 [ 95]: 12e8f6e36733c9b1 +Block 0013 [ 96]: 771fb14c5e514301 +Block 0013 [ 97]: 7253c7e989875dc3 +Block 0013 [ 98]: 0169faf6582e95ad +Block 0013 [ 99]: a78686d559d37864 +Block 0013 [100]: 3ed327acc1ca2d97 +Block 0013 [101]: d4df3ae4a05987c6 +Block 0013 [102]: 734086ace6f3ba89 +Block 0013 [103]: c014cbeb31bd5fe5 +Block 0013 [104]: 8773bbe012dc88b4 +Block 0013 [105]: a4364d36a4a0ec5c +Block 0013 [106]: c3080f5baa28264d +Block 0013 [107]: c74122c7d560f312 +Block 0013 [108]: df4eebdca740a2e1 +Block 0013 [109]: 415708c10d8419a5 +Block 0013 [110]: d2e8f4acb6c9229b +Block 0013 [111]: 31405c89ee5f9078 +Block 0013 [112]: dcb5a58709568836 +Block 0013 [113]: f9adc209054ca3cd +Block 0013 [114]: 8f54dd7f1e576e69 +Block 0013 [115]: 90200596f5f31919 +Block 0013 [116]: a51bb22209110112 +Block 0013 [117]: 395c30fc016b08fa +Block 0013 [118]: 984e30e11239af0e +Block 0013 [119]: 0c01cf9e1b6c375e +Block 0013 [120]: 1dc8cb664c66b463 +Block 0013 [121]: 42e8e6591fa02520 +Block 0013 [122]: 1556177ba9cfe1b5 +Block 0013 [123]: 7c8383f4db999495 +Block 0013 [124]: 0b4446b852033798 +Block 0013 [125]: e364b9e50c65e807 +Block 0013 [126]: 22c2b338400fa40e +Block 0013 [127]: 197b3e06a9b9b35d +Block 0014 [ 0]: 8d14eda116d8b174 +Block 0014 [ 1]: f0ed99cc6e9bad1f +Block 0014 [ 2]: aa681b19cb2aa856 +Block 0014 [ 3]: 51b9371d6db9a704 +Block 0014 [ 4]: fd4e067c50a82bf1 +Block 0014 [ 5]: b84fe88cef8f8ce1 +Block 0014 [ 6]: e005bbdea12c5cce +Block 0014 [ 7]: 8921662cb47324d5 +Block 0014 [ 8]: 19b0df7e73fedfb0 +Block 0014 [ 9]: eb2e94f27c2c08d6 +Block 0014 [ 10]: c6c93a91e4ff2395 +Block 0014 [ 11]: 78ca8005a838af79 +Block 0014 [ 12]: 832134055a083e60 +Block 0014 [ 13]: e2baab535beeaca9 +Block 0014 [ 14]: 6cb6415b356f9c6b +Block 0014 [ 15]: 4d188011ab14c17a +Block 0014 [ 16]: 4eb9bbf6642e83fe +Block 0014 [ 17]: b11101eb0f96d3c3 +Block 0014 [ 18]: 49bd14abcacc79c2 +Block 0014 [ 19]: 908454e7efcf67aa +Block 0014 [ 20]: 0c6bd3e1d0d1a801 +Block 0014 [ 21]: a6fd600f4d316505 +Block 0014 [ 22]: c6b3b58a099b0132 +Block 0014 [ 23]: 1fd168a48e08af81 +Block 0014 [ 24]: 7d0abf0de858e6c9 +Block 0014 [ 25]: e1c1ec6fccf881b0 +Block 0014 [ 26]: 66c26e61d80a5717 +Block 0014 [ 27]: 30d88fc6f4fcfb1c +Block 0014 [ 28]: f4bef017c2aa3d69 +Block 0014 [ 29]: 54ec842d96c65623 +Block 0014 [ 30]: 3dd02da54acc953e +Block 0014 [ 31]: 6c9a5523129d0a12 +Block 0014 [ 32]: e80101c9a3eb28af +Block 0014 [ 33]: 5e5012733c54de06 +Block 0014 [ 34]: 14a6fc541b76f2c4 +Block 0014 [ 35]: ae2aaa5d9de0a5a8 +Block 0014 [ 36]: d0e66232ba166660 +Block 0014 [ 37]: fb5ce73d6e6f73a0 +Block 0014 [ 38]: 1d430c477c21b0a4 +Block 0014 [ 39]: a047b3225665765b +Block 0014 [ 40]: 6629b699bffc7016 +Block 0014 [ 41]: 986241e23222e465 +Block 0014 [ 42]: 67f53ba71892b9f3 +Block 0014 [ 43]: cca9cd5a1b010cca +Block 0014 [ 44]: d963121f56ae7d48 +Block 0014 [ 45]: 314021d79e98d3a9 +Block 0014 [ 46]: c33fb6dba4174783 +Block 0014 [ 47]: c50d1c6765478c78 +Block 0014 [ 48]: e83173786e25b7ec +Block 0014 [ 49]: 1bea0e1d495317ad +Block 0014 [ 50]: ea5c6380f39600f8 +Block 0014 [ 51]: 5e4ae1400406c36e +Block 0014 [ 52]: 1755aea74cf69384 +Block 0014 [ 53]: 2571f5cb87a57586 +Block 0014 [ 54]: cd88b273efb66357 +Block 0014 [ 55]: fd404e9cdcd9c9fe +Block 0014 [ 56]: 15031c81ff4f7d59 +Block 0014 [ 57]: 67c01cb57dc56faa +Block 0014 [ 58]: 8fc3faf1a58630fc +Block 0014 [ 59]: 4a2fea71ed6905fa +Block 0014 [ 60]: 4176ea688e1a9bff +Block 0014 [ 61]: 0baf1e600ebba90f +Block 0014 [ 62]: d4c62bedc6c17c5a +Block 0014 [ 63]: fe82cc4b18777fbb +Block 0014 [ 64]: 8c94dd054153a818 +Block 0014 [ 65]: aa31581716fef7e5 +Block 0014 [ 66]: b42153e50e973f5a +Block 0014 [ 67]: d652f8ae8b6207f3 +Block 0014 [ 68]: e06432d955b0ab86 +Block 0014 [ 69]: f92dbd0e338f8ccb +Block 0014 [ 70]: 562ba0d2b04549ef +Block 0014 [ 71]: 29a231a4c57a3de1 +Block 0014 [ 72]: 7e2145921fee5493 +Block 0014 [ 73]: 20a340d5895bcd9a +Block 0014 [ 74]: e2e354ca5272b509 +Block 0014 [ 75]: abcdee5c5bb2cfa3 +Block 0014 [ 76]: d371f81a8be84f1d +Block 0014 [ 77]: 8220ea4b6cbe82fc +Block 0014 [ 78]: a58ce51218a79494 +Block 0014 [ 79]: f635a38fce84fed0 +Block 0014 [ 80]: 0b408788ad40eba1 +Block 0014 [ 81]: 30d60016156bd242 +Block 0014 [ 82]: 81d0c5358dddce93 +Block 0014 [ 83]: 4f7908a5cb8bb7d5 +Block 0014 [ 84]: 14b529212b6530c4 +Block 0014 [ 85]: 33044b35a9337d9a +Block 0014 [ 86]: c8fde54e83feb1c5 +Block 0014 [ 87]: 3be5432e49aec1bb +Block 0014 [ 88]: f98a1e3a999a4f79 +Block 0014 [ 89]: 75045dbaa4dca89e +Block 0014 [ 90]: 294bddf0db98b8ac +Block 0014 [ 91]: a7d8b2a1daaecbc7 +Block 0014 [ 92]: c2abce3a81f24c50 +Block 0014 [ 93]: f76054fadd7e4cfe +Block 0014 [ 94]: 86af8192d73f1e4c +Block 0014 [ 95]: ae1e37842e18f6d7 +Block 0014 [ 96]: f771f980b278b4d5 +Block 0014 [ 97]: 1c5bf21c38eee556 +Block 0014 [ 98]: e62a9a43d1945340 +Block 0014 [ 99]: 9cb9a94b5edcdfa3 +Block 0014 [100]: 2ef34979f56f344b +Block 0014 [101]: 31dbbd3b49048f01 +Block 0014 [102]: c39b10dfc2141dcc +Block 0014 [103]: ede638cecaa47945 +Block 0014 [104]: 47a56d23f46fb7c1 +Block 0014 [105]: 72b848fd7517cd75 +Block 0014 [106]: 321312e6606d202b +Block 0014 [107]: fccb2896a973930e +Block 0014 [108]: a95b5677fe9bb5e7 +Block 0014 [109]: cc196e39010d655b +Block 0014 [110]: 92836ef9898b94ca +Block 0014 [111]: dbe8aeb97154968b +Block 0014 [112]: ec80ac4ed462dd58 +Block 0014 [113]: f1899ab7707e7d66 +Block 0014 [114]: 537c431765423717 +Block 0014 [115]: 2577e7bc01750f96 +Block 0014 [116]: f70bb7875341ccba +Block 0014 [117]: 17fd2d1068f6f10f +Block 0014 [118]: 9092c995c5a598da +Block 0014 [119]: 3c4712e895e00263 +Block 0014 [120]: 81302387429d318b +Block 0014 [121]: 0ad80f67bfc1effa +Block 0014 [122]: 715791caef2d1725 +Block 0014 [123]: e19080e37dedbba4 +Block 0014 [124]: faef540798e35c43 +Block 0014 [125]: 4ab3f59b7018e628 +Block 0014 [126]: 054b4d0e9c328acf +Block 0014 [127]: 61b4b091403df82c +Block 0015 [ 0]: 779fdc9d92242706 +Block 0015 [ 1]: 9a258d936a6fad08 +Block 0015 [ 2]: 6c393c4981d158b7 +Block 0015 [ 3]: c15ab151d5d4c946 +Block 0015 [ 4]: 4a202feb1c0ccf11 +Block 0015 [ 5]: dd2665b2c7d60c1c +Block 0015 [ 6]: 3d4ccf48ef10e923 +Block 0015 [ 7]: 9c5a9c7cbf6e3401 +Block 0015 [ 8]: 65ce6f9d46877ee2 +Block 0015 [ 9]: 81f60dd9637a027c +Block 0015 [ 10]: 26028b3cbb08ed0b +Block 0015 [ 11]: 14eba36c0d9d3afc +Block 0015 [ 12]: c17a2d030b8b69ba +Block 0015 [ 13]: b7e3fcba56fd92b4 +Block 0015 [ 14]: 55590ed2d6873531 +Block 0015 [ 15]: 1dd55802c3af0284 +Block 0015 [ 16]: 627b98d51e7d1a7c +Block 0015 [ 17]: e29afac9fbac4919 +Block 0015 [ 18]: bbf2da6ff5909bb1 +Block 0015 [ 19]: 3b32e7edbe95f4b8 +Block 0015 [ 20]: cb079b6aab21f5f6 +Block 0015 [ 21]: 249766d55216f91b +Block 0015 [ 22]: 73f12b90f2141fb4 +Block 0015 [ 23]: 9bce2173ff2c4648 +Block 0015 [ 24]: b8c9fc1983ce5225 +Block 0015 [ 25]: 518bd4b370df77d1 +Block 0015 [ 26]: fe3ef246f24fbe85 +Block 0015 [ 27]: 2a55a2c25d1e8092 +Block 0015 [ 28]: 3175467c6b826aad +Block 0015 [ 29]: 542eecc9f9329ddc +Block 0015 [ 30]: 6d578ceeffd6443f +Block 0015 [ 31]: 36957998d6304ca0 +Block 0015 [ 32]: f38e5b60db371ba3 +Block 0015 [ 33]: adcd63e573d6d1d6 +Block 0015 [ 34]: e0b3241d8998c718 +Block 0015 [ 35]: e975d85c9ed509b1 +Block 0015 [ 36]: 43400dc263942f07 +Block 0015 [ 37]: bbd70c7d2d975ff6 +Block 0015 [ 38]: 08f6a406873f1c3d +Block 0015 [ 39]: 2c2c43a20f7094b8 +Block 0015 [ 40]: 2fc707898b9c426e +Block 0015 [ 41]: cc26a970aeb682f6 +Block 0015 [ 42]: 3200da0a96adedf8 +Block 0015 [ 43]: 10472bb55cef7373 +Block 0015 [ 44]: 7a434a0b29b2840f +Block 0015 [ 45]: f4cbd065866cd338 +Block 0015 [ 46]: 6d4a6cec78e4060e +Block 0015 [ 47]: d2cb64f0f26bd67c +Block 0015 [ 48]: 61944777d05d951e +Block 0015 [ 49]: f26d818850c7677c +Block 0015 [ 50]: 40d774d58b5bd2bd +Block 0015 [ 51]: 06de2e113d247652 +Block 0015 [ 52]: d65d143565d2a655 +Block 0015 [ 53]: 415bf9a3fbcd058c +Block 0015 [ 54]: c7c8463a62c2f5c1 +Block 0015 [ 55]: 1f28341958af298b +Block 0015 [ 56]: 815d6569ad4d8ad3 +Block 0015 [ 57]: 65572ea3e5ad177d +Block 0015 [ 58]: cd2e5a09bec730bf +Block 0015 [ 59]: c34b3aa86255aba8 +Block 0015 [ 60]: 6562cf377b9a4afb +Block 0015 [ 61]: 4617ea9bbd4958fa +Block 0015 [ 62]: 2495d4cbf49e49de +Block 0015 [ 63]: 630506139887c342 +Block 0015 [ 64]: 7625ad38357a61d2 +Block 0015 [ 65]: bb8190ead706d07e +Block 0015 [ 66]: 9bdc83c71765309e +Block 0015 [ 67]: a7d137f733a27b67 +Block 0015 [ 68]: 54fafb19769caaa1 +Block 0015 [ 69]: c19c792f768ca925 +Block 0015 [ 70]: d8bea44c81c7658f +Block 0015 [ 71]: a6eb6215c6a59748 +Block 0015 [ 72]: fd15d732c1b31ebf +Block 0015 [ 73]: dfdb5b469b911033 +Block 0015 [ 74]: c66c55a55b87dd6a +Block 0015 [ 75]: e0d409cd710f43c1 +Block 0015 [ 76]: c4b643585e9e14f2 +Block 0015 [ 77]: 30265a5a01666abe +Block 0015 [ 78]: b822366f9b7f61fd +Block 0015 [ 79]: 5f6805b698a28154 +Block 0015 [ 80]: a5097b0cb31eff3e +Block 0015 [ 81]: 1dd47a154c05ea75 +Block 0015 [ 82]: 36d0a7a0a3ebe6de +Block 0015 [ 83]: ceae8ceb45cba297 +Block 0015 [ 84]: 1bace6b5856e12c9 +Block 0015 [ 85]: 36c73df6ddf75167 +Block 0015 [ 86]: f7d174736c6e676a +Block 0015 [ 87]: e60790c5d7e71a98 +Block 0015 [ 88]: dfe970afb98d7efe +Block 0015 [ 89]: 11192bffd60dc4ab +Block 0015 [ 90]: 7779c3b5819f97bf +Block 0015 [ 91]: 5cb53f840af6bdcd +Block 0015 [ 92]: 44ae27f6098c1f9e +Block 0015 [ 93]: 62835545eee575fd +Block 0015 [ 94]: 68fc7b52043d33a3 +Block 0015 [ 95]: 6212f393295bf32b +Block 0015 [ 96]: 956cf671200d8e76 +Block 0015 [ 97]: d535cf9a699971a6 +Block 0015 [ 98]: 6ea0dd8db2cd5795 +Block 0015 [ 99]: be774dbb1d3f838b +Block 0015 [100]: 603318927cc24df5 +Block 0015 [101]: 4306aeba83fa65c2 +Block 0015 [102]: 971f4603b634e6a4 +Block 0015 [103]: 08df12318be15bd4 +Block 0015 [104]: 78c916bc9c8af835 +Block 0015 [105]: 7a79893be28af6e3 +Block 0015 [106]: aa1565cf39e71f57 +Block 0015 [107]: a2518fef8f40884a +Block 0015 [108]: 4f50a2512b883063 +Block 0015 [109]: 224db521097e45b0 +Block 0015 [110]: ad2090c5df88b115 +Block 0015 [111]: 914c7ae4bb49a7ad +Block 0015 [112]: 13afbd9f5140d4a8 +Block 0015 [113]: e67f553ff5c7ffe6 +Block 0015 [114]: e0ea9cb29843527d +Block 0015 [115]: 4bcbc626e3ce3149 +Block 0015 [116]: 79e87f100ff4065e +Block 0015 [117]: 8091cbbfedea39a7 +Block 0015 [118]: 1ca3fa2f4899954c +Block 0015 [119]: aab5b8c150686443 +Block 0015 [120]: 64b7688a862fd4da +Block 0015 [121]: b6eb832a658ebd2a +Block 0015 [122]: 17979d3dcb358c74 +Block 0015 [123]: 6c7321e6ad62d763 +Block 0015 [124]: 454a5b778dad5e71 +Block 0015 [125]: 06f95cb760f63eac +Block 0015 [126]: cc520a4b29a88c88 +Block 0015 [127]: fe4b8f09014dff9f +Block 0016 [ 0]: 6b6b8299b7544ec8 +Block 0016 [ 1]: 2dbb57599a674be3 +Block 0016 [ 2]: 159b18bbb6ecc6a3 +Block 0016 [ 3]: 660a4a24394333c7 +Block 0016 [ 4]: d4601f439a2be46c +Block 0016 [ 5]: ecd216468c5463eb +Block 0016 [ 6]: fd9ce03453659fb6 +Block 0016 [ 7]: 78df3460997ba0e5 +Block 0016 [ 8]: b4c5d2709bb12a53 +Block 0016 [ 9]: 828fdfaeed6df627 +Block 0016 [ 10]: 09f6b577c2837324 +Block 0016 [ 11]: c66268994523b9bc +Block 0016 [ 12]: ccf7c3dc16831a70 +Block 0016 [ 13]: 209e46cce63b0dd5 +Block 0016 [ 14]: 22d9cfc02bab8310 +Block 0016 [ 15]: 731881b7af38c587 +Block 0016 [ 16]: fd47a81306380ccd +Block 0016 [ 17]: 0c0b9997a6796403 +Block 0016 [ 18]: 7c6cb0650780c844 +Block 0016 [ 19]: 4bc29837890a4f0f +Block 0016 [ 20]: 16b02858d67a4009 +Block 0016 [ 21]: a3794b3d0ee899af +Block 0016 [ 22]: 8564e1126ff91d30 +Block 0016 [ 23]: 09a4d961e7f0607e +Block 0016 [ 24]: 7d12bc7afbdfe937 +Block 0016 [ 25]: dbbf0fb80558efa3 +Block 0016 [ 26]: 3c73c66093bef941 +Block 0016 [ 27]: 6ee549f6c199bca2 +Block 0016 [ 28]: 5ac1d438db0194d6 +Block 0016 [ 29]: 7d2ed2b822df8076 +Block 0016 [ 30]: 7926528f7a19cf79 +Block 0016 [ 31]: 77ab595784cf2d3e +Block 0016 [ 32]: 74508b5b98db1802 +Block 0016 [ 33]: 5ad6e824297985d3 +Block 0016 [ 34]: a68a904fe8e766b9 +Block 0016 [ 35]: 2bc4f691c9348864 +Block 0016 [ 36]: 35223aef0a5cc8f2 +Block 0016 [ 37]: 3555eead6e8818fc +Block 0016 [ 38]: d842744228cb5744 +Block 0016 [ 39]: b4ab1d1a94e7f2f3 +Block 0016 [ 40]: 9a91ba199294fcb2 +Block 0016 [ 41]: b5cebefdf0f53e3b +Block 0016 [ 42]: b922a39e9ebbb6f2 +Block 0016 [ 43]: 017622ef687cf8c8 +Block 0016 [ 44]: e1946a2b6dd4a289 +Block 0016 [ 45]: 89f5ecc8a5bc50c2 +Block 0016 [ 46]: 5e44eabe9a78220f +Block 0016 [ 47]: af7dad98882c8ea5 +Block 0016 [ 48]: cded7b67851ac70a +Block 0016 [ 49]: 8f0a5d94c2bf7581 +Block 0016 [ 50]: cf759794cf82f5c4 +Block 0016 [ 51]: 52ec8b0b7930341b +Block 0016 [ 52]: b7f5f830b5041631 +Block 0016 [ 53]: 40557ff24816836b +Block 0016 [ 54]: 4924cc34b3c38777 +Block 0016 [ 55]: fb183663b0910a7a +Block 0016 [ 56]: 5688b0ed5a3694c5 +Block 0016 [ 57]: 4e6b6866ff7be69f +Block 0016 [ 58]: a5bbdda0972ef80b +Block 0016 [ 59]: 7f9602dc2786130b +Block 0016 [ 60]: 6f90952e6fd32e9e +Block 0016 [ 61]: 2976c5d47709830a +Block 0016 [ 62]: 369242fc7db856c6 +Block 0016 [ 63]: badcb263ff876336 +Block 0016 [ 64]: 5e1ae252cf7c660a +Block 0016 [ 65]: a6659303195743dc +Block 0016 [ 66]: 856f50f369e04d85 +Block 0016 [ 67]: b87f07258403769a +Block 0016 [ 68]: 33992b9b25d692bd +Block 0016 [ 69]: 4a0b5d6218a41006 +Block 0016 [ 70]: 3c37317fe37662bf +Block 0016 [ 71]: 1baba6fed257c4c8 +Block 0016 [ 72]: f0cd28f6bb911cf8 +Block 0016 [ 73]: e5761b0cc3f4a001 +Block 0016 [ 74]: 768b71c52a70eab0 +Block 0016 [ 75]: 7db5ed7f4c1ef039 +Block 0016 [ 76]: 78d38d1a4d9f6010 +Block 0016 [ 77]: 42149147a519d29f +Block 0016 [ 78]: 10274d8b80ef4a84 +Block 0016 [ 79]: 1bcb4169f9f5eca5 +Block 0016 [ 80]: 8080874425722c0f +Block 0016 [ 81]: d30f56e184749fbf +Block 0016 [ 82]: 13c9ec5c3d4211f5 +Block 0016 [ 83]: 336b9f7a4e19b359 +Block 0016 [ 84]: d117bda81fcf17ab +Block 0016 [ 85]: 55857cb4924b5bb5 +Block 0016 [ 86]: 7b00db4bcf2ace67 +Block 0016 [ 87]: efa6e895257c9dd7 +Block 0016 [ 88]: 5139fb4c4b935b24 +Block 0016 [ 89]: 2feaf6f70f9fc604 +Block 0016 [ 90]: ee9c2dd9c238232a +Block 0016 [ 91]: a85201b5e8ef1918 +Block 0016 [ 92]: b05201dfaf17a564 +Block 0016 [ 93]: 878cc2037453c301 +Block 0016 [ 94]: 98ecda8b2afe34e5 +Block 0016 [ 95]: 6262816e83d8dc79 +Block 0016 [ 96]: 7d77e2bceb694e30 +Block 0016 [ 97]: ad3b4a848289b4ab +Block 0016 [ 98]: 712fd94ed41ce643 +Block 0016 [ 99]: 35297c592ee58baf +Block 0016 [100]: d36c6b3c14a64c28 +Block 0016 [101]: e95d95c3720d633f +Block 0016 [102]: 89b8341d64e6cc30 +Block 0016 [103]: 628d4402248e242d +Block 0016 [104]: cf352f1abb75d74b +Block 0016 [105]: 111c71103148d99e +Block 0016 [106]: 0ae63ebb34a344f1 +Block 0016 [107]: 14aaed20bd8b8291 +Block 0016 [108]: aab94fc361a452b7 +Block 0016 [109]: f331f918ab5ee676 +Block 0016 [110]: 4b642391284c6ed8 +Block 0016 [111]: 42e1197aee18fb4f +Block 0016 [112]: 976b5714f428a15b +Block 0016 [113]: c520ddb7da18def8 +Block 0016 [114]: 07f7f2acea09e1d8 +Block 0016 [115]: fb2d08080e33afbb +Block 0016 [116]: cf65922568a8119a +Block 0016 [117]: 4eb17eca9ba107d0 +Block 0016 [118]: b0375b3187f0a9b0 +Block 0016 [119]: 6c7041bef30e3b40 +Block 0016 [120]: 308f7fd4baf2a106 +Block 0016 [121]: 51d5c01ce50b57df +Block 0016 [122]: 2d9965e67ef469e8 +Block 0016 [123]: 50bca96e25dc1e94 +Block 0016 [124]: fc66e8f3903164ee +Block 0016 [125]: f2c7dcf89787e187 +Block 0016 [126]: 663bba6642f4329a +Block 0016 [127]: d3c267a2da821e5a +Block 0017 [ 0]: fcfdc3df1c946197 +Block 0017 [ 1]: 6d3a7f8b138b68b7 +Block 0017 [ 2]: e8c5fd655d0f8fb7 +Block 0017 [ 3]: 0240b93cca7ec55f +Block 0017 [ 4]: e78c58c267172d23 +Block 0017 [ 5]: 3fe304db80db7083 +Block 0017 [ 6]: fa3860b74b1868e9 +Block 0017 [ 7]: 0d784d59a6fa4f0e +Block 0017 [ 8]: c1e151c95455076a +Block 0017 [ 9]: 5feb20e609a58be8 +Block 0017 [ 10]: 8093301a607a4b84 +Block 0017 [ 11]: 1667dae45ba06926 +Block 0017 [ 12]: b416d57b17811d86 +Block 0017 [ 13]: acbce71ff949098d +Block 0017 [ 14]: 77a0cd27521206f2 +Block 0017 [ 15]: e5a9f80eda0e2d6c +Block 0017 [ 16]: b4d7a75fee54f8e5 +Block 0017 [ 17]: fe86b8dcca89692d +Block 0017 [ 18]: 8361819f8e48814b +Block 0017 [ 19]: 996dcd01c5ddea4e +Block 0017 [ 20]: 8fd62784132a601a +Block 0017 [ 21]: 38ba7e7ac1c175ed +Block 0017 [ 22]: dfb306c54cf71426 +Block 0017 [ 23]: 00967a5af80d646c +Block 0017 [ 24]: a255c76fea4d0609 +Block 0017 [ 25]: 462b07780caa6d81 +Block 0017 [ 26]: 84b08d3b74ff87ca +Block 0017 [ 27]: d0562df36fd7c6d2 +Block 0017 [ 28]: 6d1a47eed84ddb02 +Block 0017 [ 29]: 6238a05d0116d9a2 +Block 0017 [ 30]: 6d29b2173a807c05 +Block 0017 [ 31]: fd87f368e8965a70 +Block 0017 [ 32]: 90f3e8279034ac89 +Block 0017 [ 33]: 8497a7b5e99eae27 +Block 0017 [ 34]: ae40662b4abc0132 +Block 0017 [ 35]: 6885d2f92cacfebe +Block 0017 [ 36]: d86eac1dba8b2822 +Block 0017 [ 37]: 64da53ae09100afd +Block 0017 [ 38]: 671f21aac24550f9 +Block 0017 [ 39]: 27258e7d1f12748a +Block 0017 [ 40]: 64bcd532eca9903c +Block 0017 [ 41]: c43d4f5d599a450e +Block 0017 [ 42]: b4e2b1ffaee50dba +Block 0017 [ 43]: 190338b27bfca99f +Block 0017 [ 44]: 64528d8b69004613 +Block 0017 [ 45]: d48293de39ac0e6e +Block 0017 [ 46]: 25c238dde29f05a0 +Block 0017 [ 47]: ccddfeea898b0b31 +Block 0017 [ 48]: ea1c6839dd274cdf +Block 0017 [ 49]: 2fa7e6ddccc9c005 +Block 0017 [ 50]: 7d2d05e2d93e6e37 +Block 0017 [ 51]: 2f0ffc8c74ed3fc6 +Block 0017 [ 52]: 996c6e452180fa46 +Block 0017 [ 53]: e877e033c2758860 +Block 0017 [ 54]: 6bfd51bac35e1dc4 +Block 0017 [ 55]: a06551f72fe3a0e7 +Block 0017 [ 56]: cfbfb75ea65b4774 +Block 0017 [ 57]: daa545f34527a9f1 +Block 0017 [ 58]: a56f2c7bb59fd56a +Block 0017 [ 59]: 0865420cffd781c2 +Block 0017 [ 60]: cd0d74d18e97ef59 +Block 0017 [ 61]: 2d1b5a4a080a4a04 +Block 0017 [ 62]: 0323cb2335ad4259 +Block 0017 [ 63]: cfe0ef15e403e696 +Block 0017 [ 64]: cda2bf85e5c1d3c3 +Block 0017 [ 65]: e35648924e2e166e +Block 0017 [ 66]: c18265bbb84c09ea +Block 0017 [ 67]: 26fbc2832f7742a7 +Block 0017 [ 68]: fc91a5047cbe7065 +Block 0017 [ 69]: 06ac77aba6a36972 +Block 0017 [ 70]: a54b48b2c521529c +Block 0017 [ 71]: bff56e3103927512 +Block 0017 [ 72]: aa56df749934c277 +Block 0017 [ 73]: e4cbc3eb16580852 +Block 0017 [ 74]: 605985b507b8a17c +Block 0017 [ 75]: 5b49a190ef882cde +Block 0017 [ 76]: 9556eedf7b110989 +Block 0017 [ 77]: 5a837ddf8991603d +Block 0017 [ 78]: 62f928de75fbb9e2 +Block 0017 [ 79]: 87ccfff3728e7e4f +Block 0017 [ 80]: cd0081aa3eef7d91 +Block 0017 [ 81]: 3e1f7753627235c2 +Block 0017 [ 82]: ee7eead4d40598d4 +Block 0017 [ 83]: fd2ad86ece0e4d93 +Block 0017 [ 84]: 7511e10b5b4abe92 +Block 0017 [ 85]: 7cc7b0493ce49e28 +Block 0017 [ 86]: 9b0caf208e867909 +Block 0017 [ 87]: ec70b4e586a3dce4 +Block 0017 [ 88]: 7461b2471fde9e63 +Block 0017 [ 89]: 52dc1872c33e2273 +Block 0017 [ 90]: 5a793766c52e8c82 +Block 0017 [ 91]: f42cf278970327f5 +Block 0017 [ 92]: beb03ae0d86eb797 +Block 0017 [ 93]: e4e73466fb304d15 +Block 0017 [ 94]: e9658ed6be6f6081 +Block 0017 [ 95]: e12fa6cca1cc02fd +Block 0017 [ 96]: 9f57cae8c852f2d1 +Block 0017 [ 97]: 123c5896fa6814db +Block 0017 [ 98]: b0c9148dfbed76a2 +Block 0017 [ 99]: 46410406d1af9473 +Block 0017 [100]: fae3e7941e5beb9f +Block 0017 [101]: edb066d11372355f +Block 0017 [102]: 6a6cb2ce8df9fa25 +Block 0017 [103]: 283e06e02cee0bc6 +Block 0017 [104]: d7105a3c22517163 +Block 0017 [105]: 911a160616853a57 +Block 0017 [106]: 5989406740b373cb +Block 0017 [107]: 4c9483a19b057503 +Block 0017 [108]: ebb7b709242d8fac +Block 0017 [109]: c0a6f69ce7099f04 +Block 0017 [110]: 191a7a033cb52c1b +Block 0017 [111]: 91f9b8e107f40569 +Block 0017 [112]: 9f1b4416b2b3e3bb +Block 0017 [113]: 79cad712977dc9a5 +Block 0017 [114]: b073ef8ce6768e7c +Block 0017 [115]: 45ec92a6d569c94f +Block 0017 [116]: faf83f399b5188cf +Block 0017 [117]: d67394ddcc90be8b +Block 0017 [118]: 4a0ccd308297588e +Block 0017 [119]: 65afc3485290a1ae +Block 0017 [120]: 875bf5efb8c4135b +Block 0017 [121]: 0325974e7c089ce9 +Block 0017 [122]: 833655a2a7093406 +Block 0017 [123]: 60e8577d82cdfcfc +Block 0017 [124]: 4047226b5fea5e12 +Block 0017 [125]: e4f2c4185dce67dc +Block 0017 [126]: 8dc296b99cd157ed +Block 0017 [127]: d06c5a12cc83f875 +Block 0018 [ 0]: 506b9dff8f66dfc9 +Block 0018 [ 1]: 77ebc8f2b790b075 +Block 0018 [ 2]: 5f6b43fa7674a697 +Block 0018 [ 3]: 2c5180ec36e6e9f9 +Block 0018 [ 4]: eea72969852a0b14 +Block 0018 [ 5]: 5b9ba92ef08a91ca +Block 0018 [ 6]: e44afbd53674fa86 +Block 0018 [ 7]: c751b97cd72874d0 +Block 0018 [ 8]: 98e2cfceaaf5b987 +Block 0018 [ 9]: 59e7c20104d52b86 +Block 0018 [ 10]: fe9783d8f50e8564 +Block 0018 [ 11]: ec2ff6e16517d28c +Block 0018 [ 12]: 2ccc3bad6621a17d +Block 0018 [ 13]: a177b2be6b2fecdb +Block 0018 [ 14]: 703922963cc27392 +Block 0018 [ 15]: 466f05721fe0afb5 +Block 0018 [ 16]: 66aaeb6b2b42733b +Block 0018 [ 17]: ba33703147105331 +Block 0018 [ 18]: 67946b26659261f0 +Block 0018 [ 19]: 82e8278754222efb +Block 0018 [ 20]: e508acd54b0b5386 +Block 0018 [ 21]: 835d1e501fa5c24b +Block 0018 [ 22]: fb337e256303eeb5 +Block 0018 [ 23]: 01a9432585bbcb92 +Block 0018 [ 24]: e714b55e218ec12b +Block 0018 [ 25]: 26f6d3b38162143f +Block 0018 [ 26]: 52c4b662a35d8518 +Block 0018 [ 27]: e591f3bd01a0f260 +Block 0018 [ 28]: be97dfe523580591 +Block 0018 [ 29]: e87de0ecafea4e2b +Block 0018 [ 30]: 8c50573e84c5dbac +Block 0018 [ 31]: a104c4fa704fef54 +Block 0018 [ 32]: b31e99ab31889f9b +Block 0018 [ 33]: 2a5bae12c632ed66 +Block 0018 [ 34]: 3131689530cb91f8 +Block 0018 [ 35]: 86ecc03640aec2f2 +Block 0018 [ 36]: 360d5c87abde1d98 +Block 0018 [ 37]: 87628cc7a9c7e439 +Block 0018 [ 38]: bdec97daaf4fbed1 +Block 0018 [ 39]: cb135fa0dd1401b6 +Block 0018 [ 40]: 5d3498e58bd5cdaf +Block 0018 [ 41]: b21a2e740b18d3f3 +Block 0018 [ 42]: 04a56c431529e670 +Block 0018 [ 43]: 6dfc2e1b8a624915 +Block 0018 [ 44]: 4807e0a62fa02d8f +Block 0018 [ 45]: 045d5ee489190cbf +Block 0018 [ 46]: de6f7133d497b091 +Block 0018 [ 47]: 0d29ac253d7cf301 +Block 0018 [ 48]: 5d017136a4bf6d4b +Block 0018 [ 49]: 273bea5c28ef2afa +Block 0018 [ 50]: aa3380fd789085b7 +Block 0018 [ 51]: 06184d12fb6e646f +Block 0018 [ 52]: 9e8e7be60ce7be29 +Block 0018 [ 53]: da4b77cac5e3a44a +Block 0018 [ 54]: f18f7d0282e3ff2f +Block 0018 [ 55]: ffdf17f661f5a782 +Block 0018 [ 56]: baee89cd6027332d +Block 0018 [ 57]: e750340705b997f0 +Block 0018 [ 58]: 8d6d0c0638a27b0d +Block 0018 [ 59]: 8370de31338de210 +Block 0018 [ 60]: d19afe6daf1f6c6a +Block 0018 [ 61]: 6ca9730711d17695 +Block 0018 [ 62]: 28b287d8094da73d +Block 0018 [ 63]: d53cfc855e567583 +Block 0018 [ 64]: 0528fa8214051972 +Block 0018 [ 65]: e4326c77e19bc8e3 +Block 0018 [ 66]: 566e44790f3ff080 +Block 0018 [ 67]: 7a5fecedb6ac443e +Block 0018 [ 68]: f8d783bf81737ea2 +Block 0018 [ 69]: f328ef1493e09ad4 +Block 0018 [ 70]: 014d01edb2f1fec2 +Block 0018 [ 71]: 56090da3432688f0 +Block 0018 [ 72]: 756a65d5d144e7ab +Block 0018 [ 73]: b0387d690442e8ca +Block 0018 [ 74]: bcdc99a6c9701d94 +Block 0018 [ 75]: eb07a08cbfa32e3d +Block 0018 [ 76]: bea66981aba9da32 +Block 0018 [ 77]: 53437e3ee89e8180 +Block 0018 [ 78]: 1216da56618bf2a0 +Block 0018 [ 79]: 02dcbade81e80fef +Block 0018 [ 80]: fa9c42aa06f8dc27 +Block 0018 [ 81]: 143b6085501c079b +Block 0018 [ 82]: 3a7d6e1fbe910f7b +Block 0018 [ 83]: 84c10aa8f298dff1 +Block 0018 [ 84]: 6e7b1471d59c528b +Block 0018 [ 85]: bef312137a52bb94 +Block 0018 [ 86]: ef0fd8e81e404951 +Block 0018 [ 87]: 09d61611c24f84bf +Block 0018 [ 88]: f4bc2dc495584550 +Block 0018 [ 89]: eca233aae56be950 +Block 0018 [ 90]: 7c99caec1b8fbdfb +Block 0018 [ 91]: 28fe5488cc443c00 +Block 0018 [ 92]: f6987d2cb9da913e +Block 0018 [ 93]: 182e7544698569a9 +Block 0018 [ 94]: 80dbf54b72f5becb +Block 0018 [ 95]: 79a6c4c1318f7efb +Block 0018 [ 96]: 1dbff052ca33d753 +Block 0018 [ 97]: 4882194ca6f60741 +Block 0018 [ 98]: 770609181b43290f +Block 0018 [ 99]: fc262452312f6f79 +Block 0018 [100]: a4bcf7f51f733216 +Block 0018 [101]: c0ce7300a630e981 +Block 0018 [102]: f70d856b7f98cb0b +Block 0018 [103]: d287a4e4efc61485 +Block 0018 [104]: ad1be4004f9b4d90 +Block 0018 [105]: cafbf67a7a6c972f +Block 0018 [106]: 348471e3fe197c24 +Block 0018 [107]: ff5e95a969c83de6 +Block 0018 [108]: 409e12a717ca4b5a +Block 0018 [109]: 44cba534a035fbe9 +Block 0018 [110]: e97071f5b82453bc +Block 0018 [111]: b81fffd5e3411461 +Block 0018 [112]: fc18781ee372ab3f +Block 0018 [113]: b0693a61adddcbbd +Block 0018 [114]: 195c25844390b153 +Block 0018 [115]: 8f3e3ca6db496b51 +Block 0018 [116]: 69e2431f8f101f99 +Block 0018 [117]: 9228889034350cca +Block 0018 [118]: ebb7804d727feb62 +Block 0018 [119]: 498247e41ed29b72 +Block 0018 [120]: 32a24f0ac18beca9 +Block 0018 [121]: 09a432090643383b +Block 0018 [122]: 53e59d3caece1007 +Block 0018 [123]: 7b921f24930ac8dc +Block 0018 [124]: 17429db79612b532 +Block 0018 [125]: 32e4ccf3a816a341 +Block 0018 [126]: 53b02b523e641324 +Block 0018 [127]: 0929ccfcd333ef75 +Block 0019 [ 0]: 33e8d34b96a01194 +Block 0019 [ 1]: 456c32397eb0894c +Block 0019 [ 2]: 65f01bdf2b710523 +Block 0019 [ 3]: 1dc93d65920c5bab +Block 0019 [ 4]: 42c36f92c0ffd279 +Block 0019 [ 5]: a10d02d32c435128 +Block 0019 [ 6]: daa8fd35e22e7b0d +Block 0019 [ 7]: b3ef2ff8a04c3286 +Block 0019 [ 8]: 49496b0690707e8c +Block 0019 [ 9]: 8cae1bddf0b87419 +Block 0019 [ 10]: 34af6f0f333b6a73 +Block 0019 [ 11]: 9bc57b3ca9ad1aae +Block 0019 [ 12]: 4a84296458f08564 +Block 0019 [ 13]: 0382cdf60c0d61e6 +Block 0019 [ 14]: 383ffd993ca3a949 +Block 0019 [ 15]: d63f97665f89336b +Block 0019 [ 16]: 7770de57cc5c502d +Block 0019 [ 17]: 463aa97d108ea115 +Block 0019 [ 18]: 207e1c3c04d2f1c5 +Block 0019 [ 19]: 044e34d20ee5533d +Block 0019 [ 20]: 2d97f42d289e2be7 +Block 0019 [ 21]: 4c9ffb0c99dbd232 +Block 0019 [ 22]: 360d6c2d9242376b +Block 0019 [ 23]: d1a2d9f5c38b2196 +Block 0019 [ 24]: d59b5ecb66fa715d +Block 0019 [ 25]: d891f9b36c4cd181 +Block 0019 [ 26]: 9233c0d197b1e01b +Block 0019 [ 27]: 880e6ab061a568bf +Block 0019 [ 28]: 751bf0b45c77097c +Block 0019 [ 29]: f5efc6d5aed55271 +Block 0019 [ 30]: afef1f697de4cc72 +Block 0019 [ 31]: 47bc3efeacfb1d8d +Block 0019 [ 32]: 452c5045d2f478ab +Block 0019 [ 33]: ef0e422a51a4df0a +Block 0019 [ 34]: d5820f7da222bf7c +Block 0019 [ 35]: 1a33e2dbc09e14b8 +Block 0019 [ 36]: 182abf3da51c3790 +Block 0019 [ 37]: eb43140f75787e50 +Block 0019 [ 38]: 83ee465fb1646fd7 +Block 0019 [ 39]: b0974362ea612ca8 +Block 0019 [ 40]: 6ecf1aed4945275b +Block 0019 [ 41]: b2b61e5feffc7da5 +Block 0019 [ 42]: 256afa7a9e79a9e7 +Block 0019 [ 43]: b8700d5519ea31b9 +Block 0019 [ 44]: f9705c5c75795590 +Block 0019 [ 45]: c985bdee35ef9975 +Block 0019 [ 46]: 2704e5851930ef96 +Block 0019 [ 47]: 1a0fab98a8eeb146 +Block 0019 [ 48]: 2b3f8e80c613ab04 +Block 0019 [ 49]: 50eb91eab2776883 +Block 0019 [ 50]: 5e84a7b8972ac0b9 +Block 0019 [ 51]: 912f4062a68db567 +Block 0019 [ 52]: 18d2895a53a5921a +Block 0019 [ 53]: 72b6255c917acc9d +Block 0019 [ 54]: ca6cbff869322dd0 +Block 0019 [ 55]: eef952be691a20f5 +Block 0019 [ 56]: 6f705f130dfb1557 +Block 0019 [ 57]: bf412cc1f48530d8 +Block 0019 [ 58]: 058cc43ca302c665 +Block 0019 [ 59]: 632f5f954bc426bc +Block 0019 [ 60]: 216b8ee983257087 +Block 0019 [ 61]: 729d14711002bfba +Block 0019 [ 62]: 8cb7a6c5b30b023f +Block 0019 [ 63]: eb895614190db8e6 +Block 0019 [ 64]: 00f6b51593d0001c +Block 0019 [ 65]: c9c6c2f0de55bd01 +Block 0019 [ 66]: 90930dbe0fd64cb7 +Block 0019 [ 67]: 23259875ae38f2cf +Block 0019 [ 68]: 0ba1b821cbdaf400 +Block 0019 [ 69]: 512916bec94d30f5 +Block 0019 [ 70]: 4cbe59d184551f56 +Block 0019 [ 71]: 1b4758db954f1af2 +Block 0019 [ 72]: 428689d6d6e69a0e +Block 0019 [ 73]: 52551a4b2d531690 +Block 0019 [ 74]: 6f77b382d7139995 +Block 0019 [ 75]: d56cc7dc1d2a8ebe +Block 0019 [ 76]: d188bc8c7e0976b6 +Block 0019 [ 77]: 04d67c02573fe79b +Block 0019 [ 78]: 8b87e81756afe094 +Block 0019 [ 79]: 6406121e3bce2c3a +Block 0019 [ 80]: d23e625bbb09019c +Block 0019 [ 81]: 1bee10418eb08329 +Block 0019 [ 82]: 7be1dc14844c01e7 +Block 0019 [ 83]: 91962c941bd83082 +Block 0019 [ 84]: 640a363630d4772b +Block 0019 [ 85]: f63c927e04a4ba60 +Block 0019 [ 86]: eb69466de921d59c +Block 0019 [ 87]: ed7b4721c81f09e2 +Block 0019 [ 88]: c80be87f1549bd5f +Block 0019 [ 89]: a14a421ac5647f3b +Block 0019 [ 90]: 0b5a9db32d7fe7b1 +Block 0019 [ 91]: c00d02fa54401973 +Block 0019 [ 92]: 6c39bdb781e2a2fb +Block 0019 [ 93]: 36cec55cd30d0f07 +Block 0019 [ 94]: 2cf36013bcd3c69c +Block 0019 [ 95]: 5e4f2edb6657692c +Block 0019 [ 96]: 091ea4bc2a7b809b +Block 0019 [ 97]: f3cb77b9e1af72d1 +Block 0019 [ 98]: ee5ff9dc0fd47a05 +Block 0019 [ 99]: dfcd6c3dc2bfcc56 +Block 0019 [100]: f144bf7c7971f6cb +Block 0019 [101]: c3bc32b647c6116b +Block 0019 [102]: da51fbd339bb8629 +Block 0019 [103]: e0f5104e1e073f52 +Block 0019 [104]: 80eabe1f52fac945 +Block 0019 [105]: b3e50ec9dd215058 +Block 0019 [106]: 841fb9a746f218b5 +Block 0019 [107]: 97b5ab9e6340c839 +Block 0019 [108]: 0f58c48d1c8dfc7d +Block 0019 [109]: e775d0923861572f +Block 0019 [110]: f6a445b60873fd29 +Block 0019 [111]: 321d5c299f3a792a +Block 0019 [112]: 167f87905283f049 +Block 0019 [113]: d3a020474f4fb545 +Block 0019 [114]: bab29108eb5c88d3 +Block 0019 [115]: 3a20e0370a1b8925 +Block 0019 [116]: 798fe12f9b6900aa +Block 0019 [117]: ab6c723abdfce5eb +Block 0019 [118]: 02ca78dfbdd788fb +Block 0019 [119]: 4bb50c93fc01969f +Block 0019 [120]: b2370576435c57b9 +Block 0019 [121]: 487a9abad653352f +Block 0019 [122]: bce2e11433162789 +Block 0019 [123]: 803a8adad602226f +Block 0019 [124]: 4e7fb4ec6b000d6f +Block 0019 [125]: c2fe3f7c260f6f0d +Block 0019 [126]: 21ff5ba529b232ee +Block 0019 [127]: 13400b66c4f76b82 +Block 0020 [ 0]: 89e2081ab56e78b2 +Block 0020 [ 1]: 9d963e394a7fb51b +Block 0020 [ 2]: c70adaee1eea37a9 +Block 0020 [ 3]: 69a9c964557a3b79 +Block 0020 [ 4]: c9f94cb30f3f58e2 +Block 0020 [ 5]: f0b2b2f23b6a6e85 +Block 0020 [ 6]: 42a4ab31999785bd +Block 0020 [ 7]: 8e9c274e43e9b45e +Block 0020 [ 8]: de3e2ceae9a6fe03 +Block 0020 [ 9]: da1b6677984cdfe8 +Block 0020 [ 10]: f48a0d27047fb866 +Block 0020 [ 11]: fc08a550adc9d9de +Block 0020 [ 12]: abf2c0384cbb0323 +Block 0020 [ 13]: 293cd3700767b4be +Block 0020 [ 14]: fc5d6f6596e7c186 +Block 0020 [ 15]: 8803591e7d0dbf4e +Block 0020 [ 16]: f97659a838f29b36 +Block 0020 [ 17]: d972e1b0be0d4aab +Block 0020 [ 18]: 4b2b7dfe0b815a55 +Block 0020 [ 19]: dc27f9ee2b42d875 +Block 0020 [ 20]: b3cba9ebfff5b2c9 +Block 0020 [ 21]: aa62216b5929178e +Block 0020 [ 22]: 84f2c8289ad8f965 +Block 0020 [ 23]: 9e7b7d736f2ac92d +Block 0020 [ 24]: fbefb819d94b2750 +Block 0020 [ 25]: df3f3904db85a3ff +Block 0020 [ 26]: 8016900bfb6445da +Block 0020 [ 27]: c16dece77f8c7e00 +Block 0020 [ 28]: a330a89ec3a5567f +Block 0020 [ 29]: a59a7c9114a83803 +Block 0020 [ 30]: 26fa6bdaca72d62b +Block 0020 [ 31]: ffcedf85d5126dd4 +Block 0020 [ 32]: 1cd608003aeac1e5 +Block 0020 [ 33]: c10289c6d8f9d74e +Block 0020 [ 34]: 554a650031d37d60 +Block 0020 [ 35]: e49707264df0b4b0 +Block 0020 [ 36]: 9c9b855d35883c29 +Block 0020 [ 37]: 7639c20cdf1a73fc +Block 0020 [ 38]: c7b98180b14d8b44 +Block 0020 [ 39]: bcca9a6a5ff0e814 +Block 0020 [ 40]: 934da896cc350c97 +Block 0020 [ 41]: 4a7fd6c54c483639 +Block 0020 [ 42]: 03c35c2d2f3d1bb9 +Block 0020 [ 43]: 91aefa9f69fca3f6 +Block 0020 [ 44]: a6b57e87ac0557bc +Block 0020 [ 45]: c734e8728042bf42 +Block 0020 [ 46]: ce8619b03a4fc81b +Block 0020 [ 47]: 1b2e4653286bd5a2 +Block 0020 [ 48]: 566a7ec3ffc55b63 +Block 0020 [ 49]: 3095290ad086d2ab +Block 0020 [ 50]: b7b900312f0d43ff +Block 0020 [ 51]: 4e59f9f7952cc456 +Block 0020 [ 52]: 2ae68fbd3c6898dd +Block 0020 [ 53]: f61aa0d9522ba762 +Block 0020 [ 54]: 908d6dc5774d9795 +Block 0020 [ 55]: 34a6f69f331e26ec +Block 0020 [ 56]: 1e358c8e233d737a +Block 0020 [ 57]: ef28c27583088746 +Block 0020 [ 58]: 8c0c1c359e4cf564 +Block 0020 [ 59]: e92e6baae855892e +Block 0020 [ 60]: 601707524fce7966 +Block 0020 [ 61]: ef1c20a0839a335f +Block 0020 [ 62]: bfa44ce166bbf8c9 +Block 0020 [ 63]: 75778fd2c93656ef +Block 0020 [ 64]: 4c9a92d24230b4e3 +Block 0020 [ 65]: 7393ba1c3f34f583 +Block 0020 [ 66]: def43e4128851116 +Block 0020 [ 67]: 1d0343325dd9afda +Block 0020 [ 68]: 77a184c56dd2daf1 +Block 0020 [ 69]: fa52d0755ef66fd6 +Block 0020 [ 70]: 19b6bfb6fc17b332 +Block 0020 [ 71]: 6023968314c86cf1 +Block 0020 [ 72]: e6ae971aa6ec62cf +Block 0020 [ 73]: 85c7ad07e1a21687 +Block 0020 [ 74]: 626397687c030509 +Block 0020 [ 75]: 423282a89b49ac4f +Block 0020 [ 76]: e37c8c15c1eaed62 +Block 0020 [ 77]: 3a40363589cb1bcb +Block 0020 [ 78]: 38896537a90b4de3 +Block 0020 [ 79]: a9453dd305d96c0c +Block 0020 [ 80]: e39cae1ab2e1286b +Block 0020 [ 81]: 3841a9433a6efbf3 +Block 0020 [ 82]: 6cc65c960c0d9c45 +Block 0020 [ 83]: 8241839366333155 +Block 0020 [ 84]: 928eff87a269246d +Block 0020 [ 85]: 732878e0f9bad41e +Block 0020 [ 86]: d6a1bfa526acb7a1 +Block 0020 [ 87]: 8ab9f839b3c056b0 +Block 0020 [ 88]: c4e6fbad32d6205d +Block 0020 [ 89]: 92ee8c80415b2c23 +Block 0020 [ 90]: d2298d8920afcf84 +Block 0020 [ 91]: b7663bbf35af559f +Block 0020 [ 92]: 24182e3fb8239f5f +Block 0020 [ 93]: 17b6bbbd54d66105 +Block 0020 [ 94]: d0dc543bd229a489 +Block 0020 [ 95]: a87c8ddf7e5eccc9 +Block 0020 [ 96]: f4ccea782545035d +Block 0020 [ 97]: 31b2c512d0e9b274 +Block 0020 [ 98]: 5ab11954f1112d4a +Block 0020 [ 99]: 36dd53c7b85c3853 +Block 0020 [100]: 0cdf8048a452cd87 +Block 0020 [101]: bcbe5c1dfc5ea36d +Block 0020 [102]: 8ed3c84091965d94 +Block 0020 [103]: 84a7ac74afd99f64 +Block 0020 [104]: cea3b16c8e688a0d +Block 0020 [105]: bab4db3705dc5573 +Block 0020 [106]: 679ba8e94cb1c0ee +Block 0020 [107]: 6ef5f18ba4f0e3ff +Block 0020 [108]: 8c4984673fc2ce2f +Block 0020 [109]: 60530f588bd74c30 +Block 0020 [110]: 48cb0a9a28b64c84 +Block 0020 [111]: 3c10b3d5beb4a79c +Block 0020 [112]: 7ff26d639992cf37 +Block 0020 [113]: 720aec460b083524 +Block 0020 [114]: 1e09d19b0e1a00dd +Block 0020 [115]: 8fe278ba6d1a9b20 +Block 0020 [116]: 68baf4f5d15623aa +Block 0020 [117]: 63bfc00118aad83a +Block 0020 [118]: 9d25e1848491d360 +Block 0020 [119]: 6cb99c493aefb52e +Block 0020 [120]: e2eee4f83fe4f010 +Block 0020 [121]: e5e0cef422585a9f +Block 0020 [122]: a19e517ec6959e25 +Block 0020 [123]: abf4475aa22fc3ce +Block 0020 [124]: bcad2f12feb07911 +Block 0020 [125]: 453c5d52011365de +Block 0020 [126]: 69897cc10d44fcaf +Block 0020 [127]: b95f9117d2fa4bfc +Block 0021 [ 0]: 2e53af0ffcf72453 +Block 0021 [ 1]: f4d2ee09bf6e68fa +Block 0021 [ 2]: 0309586ec4f1b841 +Block 0021 [ 3]: 04a6ee34c1719365 +Block 0021 [ 4]: ad8c7240f5745491 +Block 0021 [ 5]: cfadccd354d621e8 +Block 0021 [ 6]: 1fb50aa51f24373a +Block 0021 [ 7]: a0eaa951533cdbfc +Block 0021 [ 8]: 88e80be14fb09e20 +Block 0021 [ 9]: 5956e4b9a89aec1e +Block 0021 [ 10]: f23b6614d091d565 +Block 0021 [ 11]: a8d6810b1fd7b35b +Block 0021 [ 12]: d48796a1dcb92c52 +Block 0021 [ 13]: 3e38c2720cf8d123 +Block 0021 [ 14]: 497df05177535211 +Block 0021 [ 15]: 6987feb6811a5d13 +Block 0021 [ 16]: 40ffa042f1343f14 +Block 0021 [ 17]: cd8423bb29575e16 +Block 0021 [ 18]: b2f2250cadf6ee42 +Block 0021 [ 19]: cd9436ad7a906a5b +Block 0021 [ 20]: a4caba8291763463 +Block 0021 [ 21]: c0450b96a40e1d6f +Block 0021 [ 22]: 922df81edfc8672c +Block 0021 [ 23]: 19fd391d5149a693 +Block 0021 [ 24]: 274659cf928be9ac +Block 0021 [ 25]: f13f9c76b5e1e8b9 +Block 0021 [ 26]: 462a09302c07589f +Block 0021 [ 27]: 6233cce4bcb9604c +Block 0021 [ 28]: 5ada3f773b0a022e +Block 0021 [ 29]: d9824f52f60414bb +Block 0021 [ 30]: fd7d2b394bc7f935 +Block 0021 [ 31]: c652630acaa12963 +Block 0021 [ 32]: b87a925784883817 +Block 0021 [ 33]: 871730bf13fa35e3 +Block 0021 [ 34]: 75d410f433cf9075 +Block 0021 [ 35]: fc9d0f2388fb0755 +Block 0021 [ 36]: 637c2fbdc29699b3 +Block 0021 [ 37]: dcfc58f0240aab69 +Block 0021 [ 38]: 47f63e317ae148a8 +Block 0021 [ 39]: 6e85d5c81fabb692 +Block 0021 [ 40]: 6bbd7a0d80dceece +Block 0021 [ 41]: 5e8763c6ba1dfb3f +Block 0021 [ 42]: 2b67b9b1ee74cae6 +Block 0021 [ 43]: 44556e23b6a12a9c +Block 0021 [ 44]: da67accd90528c8e +Block 0021 [ 45]: c8d64e5987dbf1b8 +Block 0021 [ 46]: a4d299e996095736 +Block 0021 [ 47]: 45cecf89612ed432 +Block 0021 [ 48]: a9e0104756d4ed0a +Block 0021 [ 49]: 96bd5b592d58f449 +Block 0021 [ 50]: a1d4d76c43899d99 +Block 0021 [ 51]: ac92a47c2c3bb722 +Block 0021 [ 52]: a4b54abd56bef9ac +Block 0021 [ 53]: 145584fd48b6e654 +Block 0021 [ 54]: e2b2b5a236df9e1a +Block 0021 [ 55]: 78f71ca730c345f5 +Block 0021 [ 56]: c6653be2c128b6fc +Block 0021 [ 57]: 2b02761b0c1fa9f0 +Block 0021 [ 58]: d7d0ccaf5b6a4ef1 +Block 0021 [ 59]: 4eddcaf6ae19c5d6 +Block 0021 [ 60]: 986f18a1622df37e +Block 0021 [ 61]: 63fe2eafcfaa88ed +Block 0021 [ 62]: 697bb686eb310b15 +Block 0021 [ 63]: 4d36cbe576e44e76 +Block 0021 [ 64]: ecace5129f458bda +Block 0021 [ 65]: f8111733fa1c8bdb +Block 0021 [ 66]: c1b84cac574f86bb +Block 0021 [ 67]: d3c632fa66f74c20 +Block 0021 [ 68]: 3f443c021f0ccb3d +Block 0021 [ 69]: 68e6932baf806b66 +Block 0021 [ 70]: 58cddbf112d26752 +Block 0021 [ 71]: 540b5a73ebf324de +Block 0021 [ 72]: a6f78cb47fa04966 +Block 0021 [ 73]: 05dbc3e897e88dbb +Block 0021 [ 74]: 5400e9f8c028c0d1 +Block 0021 [ 75]: 3c70a7f46bd02139 +Block 0021 [ 76]: 110c4ae844cddb35 +Block 0021 [ 77]: bfa7d83241c23818 +Block 0021 [ 78]: edcaad25b8daf0a8 +Block 0021 [ 79]: 4e25f39c672fd3dd +Block 0021 [ 80]: f73c7d57898cbf89 +Block 0021 [ 81]: 68188c1c0cf25a53 +Block 0021 [ 82]: 2a9faf31cf04b569 +Block 0021 [ 83]: f9431287814fe37e +Block 0021 [ 84]: 243be3b90b38ba25 +Block 0021 [ 85]: 2ff865d3aabd376f +Block 0021 [ 86]: 517977a3c9ab4721 +Block 0021 [ 87]: 1344eb09e10d836d +Block 0021 [ 88]: 22352ab596708b45 +Block 0021 [ 89]: 70318e312b45713b +Block 0021 [ 90]: f1776ae5cdbb977c +Block 0021 [ 91]: 98ecf492f39168d7 +Block 0021 [ 92]: bd6eee889a309d69 +Block 0021 [ 93]: 42c87318994b9192 +Block 0021 [ 94]: e75487bdc5d5fc17 +Block 0021 [ 95]: f56246095cd3d83c +Block 0021 [ 96]: 95d38b3a2bee0e00 +Block 0021 [ 97]: eb854d1b0ae99bfa +Block 0021 [ 98]: 882415de5094207f +Block 0021 [ 99]: e7d79d750bb5a919 +Block 0021 [100]: ce6fac74067139d9 +Block 0021 [101]: 2e1e4eb6ba0bff7f +Block 0021 [102]: 6fd197b1fc11fbb7 +Block 0021 [103]: b50b9c7241ea857f +Block 0021 [104]: c5055a1cc6627673 +Block 0021 [105]: d10ef73892c24811 +Block 0021 [106]: 5fdece9bf5a0922c +Block 0021 [107]: d72210546b9ed17e +Block 0021 [108]: 67bc46392660cb91 +Block 0021 [109]: b9e5e47d1700a0a5 +Block 0021 [110]: 3cfc03ee00186042 +Block 0021 [111]: 79c5e50b190fef69 +Block 0021 [112]: ef4c795b859d9da3 +Block 0021 [113]: 2d35cec5c1107fe7 +Block 0021 [114]: c5af4ae73a397b8b +Block 0021 [115]: 991371cf40815432 +Block 0021 [116]: 14eb4ce84a65d07b +Block 0021 [117]: d59def0e00fdf27e +Block 0021 [118]: bf6a452ac1bdcaa9 +Block 0021 [119]: 2c8c674766f0864e +Block 0021 [120]: 5aacb9ad7aae4664 +Block 0021 [121]: e3bb57f7b3fdc1ef +Block 0021 [122]: 63ff45b42def5846 +Block 0021 [123]: 1fd1958c4fd3db2a +Block 0021 [124]: 1cc4429b52fe74f4 +Block 0021 [125]: 177bc5006d309d61 +Block 0021 [126]: df06b53a2374935f +Block 0021 [127]: 846f56c0e0199b09 +Block 0022 [ 0]: f0055544a8a66da3 +Block 0022 [ 1]: cdacd919de93783e +Block 0022 [ 2]: 97f4db38d37eeb63 +Block 0022 [ 3]: bbc6005afe3b391f +Block 0022 [ 4]: 39453f1a16a99f6e +Block 0022 [ 5]: de60a9e4640d8d2a +Block 0022 [ 6]: 62458a8a90a3d3cb +Block 0022 [ 7]: e1a0a8dddfd694e3 +Block 0022 [ 8]: f1910aa3624bd380 +Block 0022 [ 9]: be922abb3b4e3611 +Block 0022 [ 10]: 80c904701bfd133a +Block 0022 [ 11]: 3928fead5a645d9e +Block 0022 [ 12]: 4cc74f7f222d03ed +Block 0022 [ 13]: d0bc3853685a26f1 +Block 0022 [ 14]: 2f0fe1f6a7f76173 +Block 0022 [ 15]: dbcf422aa98d10d7 +Block 0022 [ 16]: 90e21ad1620963bb +Block 0022 [ 17]: db51c68d42dba8a1 +Block 0022 [ 18]: fafbae7409259cb2 +Block 0022 [ 19]: 52b69193864cc071 +Block 0022 [ 20]: 469d7827ed811032 +Block 0022 [ 21]: 14b2829c68b218b5 +Block 0022 [ 22]: 988892a5cb23313e +Block 0022 [ 23]: 7c5dca957c103b98 +Block 0022 [ 24]: df4bbc097a837981 +Block 0022 [ 25]: 2011417f5d39bd07 +Block 0022 [ 26]: eb9431f73df35f3d +Block 0022 [ 27]: 2009d2e8ac8ef52f +Block 0022 [ 28]: 8dab9e07d07f1b42 +Block 0022 [ 29]: 8e6a29c7f42c8637 +Block 0022 [ 30]: 3d1190f642641e80 +Block 0022 [ 31]: fced87abd38c315d +Block 0022 [ 32]: 04c4a8db5579b4fe +Block 0022 [ 33]: ea0cb649d964d9d7 +Block 0022 [ 34]: 70dd1c19230a475f +Block 0022 [ 35]: df22428fcc8f233e +Block 0022 [ 36]: 67cc6440482ef9a4 +Block 0022 [ 37]: ab95961940393dea +Block 0022 [ 38]: 7254b13ee0a68318 +Block 0022 [ 39]: f7b9c47a884d55cb +Block 0022 [ 40]: 189fbf3c55d2e89b +Block 0022 [ 41]: 9bd08c8067c10b08 +Block 0022 [ 42]: 597b3fbb3b1acb52 +Block 0022 [ 43]: 9f26e9bf7054c44c +Block 0022 [ 44]: ba90c0be3b113827 +Block 0022 [ 45]: 7ccf834cd647176a +Block 0022 [ 46]: f5e7f7c012401b91 +Block 0022 [ 47]: fb8bb2c9f8ee3a18 +Block 0022 [ 48]: bf00c504ea2160de +Block 0022 [ 49]: a9b185b64b2d534b +Block 0022 [ 50]: f9de1b7d13834000 +Block 0022 [ 51]: cc1b7969b3e035e0 +Block 0022 [ 52]: e6217156fbab7f7f +Block 0022 [ 53]: 286de6b5d5201f7f +Block 0022 [ 54]: cf012128fb6319ff +Block 0022 [ 55]: 76666fd989324c40 +Block 0022 [ 56]: 4ea7259afae53efb +Block 0022 [ 57]: 87a5ed4f0a8fff9b +Block 0022 [ 58]: 587c0fcfaad8121d +Block 0022 [ 59]: b97d07e01372cb75 +Block 0022 [ 60]: f2427574f2bd08a4 +Block 0022 [ 61]: c73ed9aa0a72f689 +Block 0022 [ 62]: 0e5b7d2cbd12bf6f +Block 0022 [ 63]: 257263442e299978 +Block 0022 [ 64]: 46c0b8d4fdbab0ee +Block 0022 [ 65]: 53a37a6e716a6747 +Block 0022 [ 66]: 7148161554525e66 +Block 0022 [ 67]: e29136a0ef2fca6c +Block 0022 [ 68]: b2495652b43df870 +Block 0022 [ 69]: d328dcac872d5623 +Block 0022 [ 70]: f025f96d1fe7181c +Block 0022 [ 71]: d857f1856f5821a9 +Block 0022 [ 72]: d0d1f3a0a6a3bfd2 +Block 0022 [ 73]: a394175356089b4a +Block 0022 [ 74]: dcb547e12b9f51dd +Block 0022 [ 75]: 03e89f2d8832bcd0 +Block 0022 [ 76]: 3fcf81ea646ffdec +Block 0022 [ 77]: 9811080c51ed8898 +Block 0022 [ 78]: 7f1955428a5ab71c +Block 0022 [ 79]: 904c1d262f4697fe +Block 0022 [ 80]: 71e299786f4153af +Block 0022 [ 81]: 03bf7656a59378d0 +Block 0022 [ 82]: 134e3117146b0ec3 +Block 0022 [ 83]: b5a105a68f0e0285 +Block 0022 [ 84]: 8e332c18345792c0 +Block 0022 [ 85]: 1c8a1b9311af8035 +Block 0022 [ 86]: da7ba0f9ddfe3ca6 +Block 0022 [ 87]: 7b3f169f787ad5fd +Block 0022 [ 88]: 1eee01d5233b877d +Block 0022 [ 89]: bdad3fa8e33afa81 +Block 0022 [ 90]: 9bbc15b8f5fb7063 +Block 0022 [ 91]: 432f6b4d1905ec3f +Block 0022 [ 92]: f2d2365eca7ba1b9 +Block 0022 [ 93]: 97e2f5a82b925ba0 +Block 0022 [ 94]: fbc0fadc13d4564a +Block 0022 [ 95]: b2ad0bee976cc199 +Block 0022 [ 96]: 17f8c2b7bdbb67ff +Block 0022 [ 97]: be69957d7a56dbe9 +Block 0022 [ 98]: 79ea684556110c84 +Block 0022 [ 99]: 907836169c0a3ed0 +Block 0022 [100]: 529cfcde28e86278 +Block 0022 [101]: ec6c52c7c521e753 +Block 0022 [102]: 6d4b0089b66db0f7 +Block 0022 [103]: 8f52889ca92d1ca1 +Block 0022 [104]: 712b763cf1461916 +Block 0022 [105]: c2f0e7bcab362673 +Block 0022 [106]: 7e37c9354c58c3c6 +Block 0022 [107]: e92e77e0fb03dd9c +Block 0022 [108]: af01ae66d8933069 +Block 0022 [109]: c177af2038666fb7 +Block 0022 [110]: ef8d51bd9f8fc316 +Block 0022 [111]: 8fc7ad7cd464e4db +Block 0022 [112]: 77b2c5d08e22e032 +Block 0022 [113]: 45b7b9a307de1b30 +Block 0022 [114]: 799e4a09a2567d1b +Block 0022 [115]: 48aefad5c1d4b969 +Block 0022 [116]: 81bd46d517aa797f +Block 0022 [117]: 863d3836c0c64d38 +Block 0022 [118]: a80930810c4b2661 +Block 0022 [119]: bb01f4029f69250a +Block 0022 [120]: 0886cc90560770cc +Block 0022 [121]: 42f0f28407b02147 +Block 0022 [122]: bbeb300621e965a5 +Block 0022 [123]: dc517baac3ca7837 +Block 0022 [124]: ea2d75283572876b +Block 0022 [125]: acc64495739e7ca9 +Block 0022 [126]: 549e0c6ecc48dbb2 +Block 0022 [127]: 5116a7094206d198 +Block 0023 [ 0]: 35a67e548212b65a +Block 0023 [ 1]: 47a597dd7729d580 +Block 0023 [ 2]: 4f4d6c3d73cd4492 +Block 0023 [ 3]: 6fea5e56611b0a46 +Block 0023 [ 4]: a0dba662fd6b63eb +Block 0023 [ 5]: 0f01e27d84bee3dc +Block 0023 [ 6]: 4870943c3036e680 +Block 0023 [ 7]: 20b20c677c15275c +Block 0023 [ 8]: 6f01bc825322649f +Block 0023 [ 9]: 4110d224d880ec5c +Block 0023 [ 10]: d7973558f1e07cb4 +Block 0023 [ 11]: 511e22e748073a68 +Block 0023 [ 12]: b7bc8abedf5d7251 +Block 0023 [ 13]: 4f64508c05105c35 +Block 0023 [ 14]: 62bbf36b6d1ff161 +Block 0023 [ 15]: 4bde3ecb4471ae65 +Block 0023 [ 16]: ead26f76d51554b6 +Block 0023 [ 17]: 7b3458dff62b800f +Block 0023 [ 18]: a084ba6ce74c1eb9 +Block 0023 [ 19]: df609dbb8ab6265d +Block 0023 [ 20]: d2ae1cdce8efdf99 +Block 0023 [ 21]: d806c82cfc649816 +Block 0023 [ 22]: c3ed6017e8689558 +Block 0023 [ 23]: 2a415ef2d37108f9 +Block 0023 [ 24]: 2175b37e3691c307 +Block 0023 [ 25]: 73b750467289ce4c +Block 0023 [ 26]: 2f839c6ddaacbdf5 +Block 0023 [ 27]: 011e1736ccb05edc +Block 0023 [ 28]: ab899953fb5935c7 +Block 0023 [ 29]: d8ffcb98d41f8f2f +Block 0023 [ 30]: f0f9066153f1709b +Block 0023 [ 31]: 8b37d3c770e07bed +Block 0023 [ 32]: 617653ad907f68c2 +Block 0023 [ 33]: 9f2e89d721331c2f +Block 0023 [ 34]: b3fdbe13e5c5475b +Block 0023 [ 35]: 5014a37260ef1027 +Block 0023 [ 36]: 44ebc51f31d5648f +Block 0023 [ 37]: cf1e345a2278c411 +Block 0023 [ 38]: 9527cdb440d9d570 +Block 0023 [ 39]: fc1c61d0d22f0234 +Block 0023 [ 40]: dc170707a41d02bc +Block 0023 [ 41]: 4f20a8a6b536d6a6 +Block 0023 [ 42]: c9d1d992c5177320 +Block 0023 [ 43]: b2d08f4e16e0ead0 +Block 0023 [ 44]: 644e66e97d0a76a7 +Block 0023 [ 45]: 932b1d6b4bf97250 +Block 0023 [ 46]: 8553d2e3f36287ab +Block 0023 [ 47]: e66ee506aeff7310 +Block 0023 [ 48]: e2df446fadcc1bbc +Block 0023 [ 49]: 4e68292d5e271c1e +Block 0023 [ 50]: 82d3a1669e44216b +Block 0023 [ 51]: 7fe477b396245eaa +Block 0023 [ 52]: d64caf9f56a25d4f +Block 0023 [ 53]: 168cad48469c2814 +Block 0023 [ 54]: cf80d1426fd4d12f +Block 0023 [ 55]: 438c56732fb88f97 +Block 0023 [ 56]: 95be9d4df9078f11 +Block 0023 [ 57]: 2c324be70809d4b0 +Block 0023 [ 58]: 6526998522b6a01e +Block 0023 [ 59]: e2bd9aa42195e196 +Block 0023 [ 60]: b40d71d74220de38 +Block 0023 [ 61]: d6e5b4ab8bd94e50 +Block 0023 [ 62]: ed4fae73a1bcfcd8 +Block 0023 [ 63]: b00f6d5d13555317 +Block 0023 [ 64]: 99740378ef630c6d +Block 0023 [ 65]: f6a7e5b72e6aa9ec +Block 0023 [ 66]: 4c5048997311b874 +Block 0023 [ 67]: 62da86a8e0bc516c +Block 0023 [ 68]: 3ef48da188d9c901 +Block 0023 [ 69]: 8eb3ac3b10af96f0 +Block 0023 [ 70]: d4a7c9a80237d4fa +Block 0023 [ 71]: 2a92923febbe2b1e +Block 0023 [ 72]: 957330d6817f55bb +Block 0023 [ 73]: bcd4fee916ef8197 +Block 0023 [ 74]: 92b3dae57a69e496 +Block 0023 [ 75]: 44ce49a2c22b1985 +Block 0023 [ 76]: 10a8624ca831fe9a +Block 0023 [ 77]: ac59a462bc479f25 +Block 0023 [ 78]: 06e0f2b14d9de57d +Block 0023 [ 79]: f7ebe6eb30b76c91 +Block 0023 [ 80]: a290cc65e72977b8 +Block 0023 [ 81]: c53025ea87d0d76d +Block 0023 [ 82]: 8b1d31e588f27e7e +Block 0023 [ 83]: 85e3b5998e045553 +Block 0023 [ 84]: e5ef1b6888c1ede3 +Block 0023 [ 85]: d3682fe7748090c6 +Block 0023 [ 86]: 18121bcf94337603 +Block 0023 [ 87]: c0f5aa67be8bdd90 +Block 0023 [ 88]: 0f97bb8a07aa0937 +Block 0023 [ 89]: 98aca43aae3d20a3 +Block 0023 [ 90]: 6daeb804404c39a2 +Block 0023 [ 91]: 2373de1540bba42a +Block 0023 [ 92]: 8d9d3261981ecae3 +Block 0023 [ 93]: af3e00f0032cc72e +Block 0023 [ 94]: 4ce3496aa0fb8655 +Block 0023 [ 95]: ad07c56975938caf +Block 0023 [ 96]: 88e0b8c9d2b54f50 +Block 0023 [ 97]: c427840539ee5821 +Block 0023 [ 98]: 6717c698b370aec4 +Block 0023 [ 99]: d1e341823d56df4c +Block 0023 [100]: 82c29686c67b57ab +Block 0023 [101]: 7819999440faf2c7 +Block 0023 [102]: 4bc4c03f6165ed12 +Block 0023 [103]: ec6aeb644e48ddaa +Block 0023 [104]: 5a008d97e36f737d +Block 0023 [105]: 428d8b4bd1b95382 +Block 0023 [106]: f3221d2ae6f23867 +Block 0023 [107]: d92f795d6158a7e4 +Block 0023 [108]: eda1169cacd46e8e +Block 0023 [109]: 275acbab7e64c866 +Block 0023 [110]: cb4ecb99b9940ea1 +Block 0023 [111]: c3c77f0efcf1e959 +Block 0023 [112]: 41928e20fb40d811 +Block 0023 [113]: e08e5064a84575e0 +Block 0023 [114]: aec4b3870e8be76b +Block 0023 [115]: 3530333223726e1f +Block 0023 [116]: f8d3bf85e583ffde +Block 0023 [117]: 0171584e95f38c8e +Block 0023 [118]: 5d06a52835a771bd +Block 0023 [119]: e97b95f46a318115 +Block 0023 [120]: 08fcd8dbb4b5dc88 +Block 0023 [121]: 684999374c097e8f +Block 0023 [122]: 35ea6d01484a577d +Block 0023 [123]: fb01d73e1d552919 +Block 0023 [124]: a1490ccf830745c5 +Block 0023 [125]: b0bbef60d9833111 +Block 0023 [126]: 477c02fd95e838d6 +Block 0023 [127]: 8baa884f5ed6c02b +Block 0024 [ 0]: d061ed936e1a32d3 +Block 0024 [ 1]: 541a30c0b95ffea7 +Block 0024 [ 2]: 1928de5e1f440c51 +Block 0024 [ 3]: c9f14c74dac24ab2 +Block 0024 [ 4]: fe4f84507d62789a +Block 0024 [ 5]: c331d363c2c8c0a9 +Block 0024 [ 6]: e747c23cec188011 +Block 0024 [ 7]: b78f6b4cbbdd4934 +Block 0024 [ 8]: 28581eafaca26cba +Block 0024 [ 9]: 44b5ae30d6118faa +Block 0024 [ 10]: 7bcf55d440d2688a +Block 0024 [ 11]: 51ca3b4d6b156519 +Block 0024 [ 12]: e5666e5b1b35e022 +Block 0024 [ 13]: dfddbfab40c9ff3a +Block 0024 [ 14]: 188654eef14df41c +Block 0024 [ 15]: 55600accb5cac797 +Block 0024 [ 16]: 4fc9cc2498403e32 +Block 0024 [ 17]: 00e5021cbb66d69d +Block 0024 [ 18]: 364c7398079d7de6 +Block 0024 [ 19]: 849b9218651c4338 +Block 0024 [ 20]: ac1740598af70ad2 +Block 0024 [ 21]: 0799297570e3afa3 +Block 0024 [ 22]: 2732b513a96712de +Block 0024 [ 23]: dc13860cf73ff7b3 +Block 0024 [ 24]: 45b81cea5644bbe4 +Block 0024 [ 25]: 2bac4d9df968b6d7 +Block 0024 [ 26]: 1c2c19f0a424895d +Block 0024 [ 27]: 743629acd72ee78f +Block 0024 [ 28]: 6938084dd1a25f3c +Block 0024 [ 29]: 5d8fdef799f3a7a7 +Block 0024 [ 30]: 32c9dd570ee7f229 +Block 0024 [ 31]: 635275210d4dcc60 +Block 0024 [ 32]: 0b6a30a0f9d8cd62 +Block 0024 [ 33]: 325b6147f91b93d2 +Block 0024 [ 34]: 5693c3b83d29486d +Block 0024 [ 35]: 9ae916389575f4dc +Block 0024 [ 36]: a9ac27bdf4920386 +Block 0024 [ 37]: fb2b943c71b1f651 +Block 0024 [ 38]: b3439452a404a424 +Block 0024 [ 39]: d7ca3d322ddd0d34 +Block 0024 [ 40]: cfb81600244f133f +Block 0024 [ 41]: c4fc0f63568bc898 +Block 0024 [ 42]: 40e4716f08a63a3b +Block 0024 [ 43]: c0e487f16e9e4031 +Block 0024 [ 44]: 240146e7c19878bf +Block 0024 [ 45]: 0e41626ba08e23a5 +Block 0024 [ 46]: 9f195c84461c825b +Block 0024 [ 47]: 9c3f6c6a2966f0a8 +Block 0024 [ 48]: 45853ff7c0b93daf +Block 0024 [ 49]: 7db484a6bfbe0427 +Block 0024 [ 50]: ae168d723e3413fd +Block 0024 [ 51]: 070dd51541ac7eea +Block 0024 [ 52]: d52cdead741239e7 +Block 0024 [ 53]: b0fcd63276cb4aea +Block 0024 [ 54]: 8c967ddb1d15730f +Block 0024 [ 55]: dd469e509bd1432e +Block 0024 [ 56]: 624a5f0f28028f6e +Block 0024 [ 57]: 2d4963cd135783d7 +Block 0024 [ 58]: 459365718bb4c0df +Block 0024 [ 59]: 9ee458e2ebfb4331 +Block 0024 [ 60]: 774ab6c8d85d0c23 +Block 0024 [ 61]: 9386c117e41e29b7 +Block 0024 [ 62]: 45cce696de9d97e8 +Block 0024 [ 63]: b678a357a46dbd0c +Block 0024 [ 64]: 2d0923ed6e8904ef +Block 0024 [ 65]: ff4b8d2913c5114e +Block 0024 [ 66]: dc05ff473012b91b +Block 0024 [ 67]: b817c71405fa2b47 +Block 0024 [ 68]: c1b8451cc37ca669 +Block 0024 [ 69]: b53274d2bc303d21 +Block 0024 [ 70]: 0b585e8da0c28ec0 +Block 0024 [ 71]: 96d1c3f9b6316fd0 +Block 0024 [ 72]: 9d751e17ddb84b92 +Block 0024 [ 73]: 15cd8f9877d08621 +Block 0024 [ 74]: 31427e152ae1f228 +Block 0024 [ 75]: 58c308b9049a1a35 +Block 0024 [ 76]: a7c6d337bea4cd79 +Block 0024 [ 77]: c74a3612bb6c2920 +Block 0024 [ 78]: bcd995a490138eca +Block 0024 [ 79]: 3ab8aa80102b731c +Block 0024 [ 80]: 12ca895d089a075d +Block 0024 [ 81]: 90ca0070cac5d46c +Block 0024 [ 82]: 79cf2adead63539a +Block 0024 [ 83]: aa2b9edc6e245007 +Block 0024 [ 84]: b85174b8df690554 +Block 0024 [ 85]: a714f0d57ded76c1 +Block 0024 [ 86]: eee45ed25c8026a0 +Block 0024 [ 87]: 7ffceacdb23db6d5 +Block 0024 [ 88]: d081599d922b548e +Block 0024 [ 89]: bdc6c423c6dfbd46 +Block 0024 [ 90]: ac97234b39a66ea0 +Block 0024 [ 91]: 8354643289ab2777 +Block 0024 [ 92]: 7768471ee706bcfc +Block 0024 [ 93]: d5d5558b0f65d5e8 +Block 0024 [ 94]: 4fcccd6440c9993f +Block 0024 [ 95]: e2349553b73474a8 +Block 0024 [ 96]: 2298b2c517299e44 +Block 0024 [ 97]: 5c71ae34b1646e7c +Block 0024 [ 98]: bb2f21e33ef80226 +Block 0024 [ 99]: c1d6744c0daa4ec1 +Block 0024 [100]: d1c2045ba1c82a86 +Block 0024 [101]: d827935d52f05a26 +Block 0024 [102]: 641bc1718fbdd804 +Block 0024 [103]: 1e93f35ba580c78d +Block 0024 [104]: 38dcd866d4ba60b0 +Block 0024 [105]: c569e6c978d6370f +Block 0024 [106]: 665b6de1b84e4d1e +Block 0024 [107]: 59e8c6d2e0ef07b3 +Block 0024 [108]: 1019324ba6f47ddf +Block 0024 [109]: bf453a53194efe17 +Block 0024 [110]: 740c895bd04b3212 +Block 0024 [111]: 279d7d4e8a17205a +Block 0024 [112]: bf0562156ec46599 +Block 0024 [113]: f4cfe480afee6fd0 +Block 0024 [114]: 6dc65fde295bc25c +Block 0024 [115]: 608aa55b507597a1 +Block 0024 [116]: 10bad16db28743f2 +Block 0024 [117]: 16b24343b9778d3f +Block 0024 [118]: f94e6c6b43502e95 +Block 0024 [119]: 048837063d6a0f2f +Block 0024 [120]: 6010c23f59e2b3be +Block 0024 [121]: 33051c610ff7a8e3 +Block 0024 [122]: 456dd3fb90581e01 +Block 0024 [123]: 61f13604e9cba016 +Block 0024 [124]: 5abbea569a465d20 +Block 0024 [125]: e099ef641551a3b3 +Block 0024 [126]: 34f9bda1ee9bdb9f +Block 0024 [127]: cbe1f2c55812a488 +Block 0025 [ 0]: 70ebd121a7257a28 +Block 0025 [ 1]: ee4c2ac9909ac584 +Block 0025 [ 2]: adfaf99676dc4eff +Block 0025 [ 3]: 5bb604144163d732 +Block 0025 [ 4]: 04ba77fee44bca6d +Block 0025 [ 5]: 117632540e9a1351 +Block 0025 [ 6]: 821fd24564be611b +Block 0025 [ 7]: ee6d3854f8aa8e6a +Block 0025 [ 8]: bd5d0386e54bf100 +Block 0025 [ 9]: 5fd6ff010f7ffccf +Block 0025 [ 10]: 6280ead5f8ce3ce8 +Block 0025 [ 11]: 8fefeea8a3ecfeea +Block 0025 [ 12]: 568373e8752d762d +Block 0025 [ 13]: c7aeb28c1a22213f +Block 0025 [ 14]: 135ac6f83c51250a +Block 0025 [ 15]: e0351d9290e44c26 +Block 0025 [ 16]: 721d1f259e59b608 +Block 0025 [ 17]: 9e75d7f84f0bc4d8 +Block 0025 [ 18]: 77f1351a7349e3de +Block 0025 [ 19]: bd90c3924bafa69f +Block 0025 [ 20]: 894a4d6baa341ef8 +Block 0025 [ 21]: e9507179545ecad6 +Block 0025 [ 22]: 71d116328734e1af +Block 0025 [ 23]: d8098eaea09439a8 +Block 0025 [ 24]: 5d991df3c678bb33 +Block 0025 [ 25]: 667e9c87829af175 +Block 0025 [ 26]: f1f640695d856a45 +Block 0025 [ 27]: ea5c53d6c2c5ee2c +Block 0025 [ 28]: a0ac38bbb6105a03 +Block 0025 [ 29]: 312001c836009739 +Block 0025 [ 30]: 626988741f041169 +Block 0025 [ 31]: c04eb57fcdc6dc28 +Block 0025 [ 32]: 8631d3c1eae8d8a1 +Block 0025 [ 33]: b86a0341a6aace14 +Block 0025 [ 34]: c1ee46fe54acb220 +Block 0025 [ 35]: e010f93accc68429 +Block 0025 [ 36]: 3059b9d96afd0981 +Block 0025 [ 37]: 55107999b1e215cd +Block 0025 [ 38]: 6f8efceccadf69ca +Block 0025 [ 39]: f949524531c51bbc +Block 0025 [ 40]: 7d72a929f74af045 +Block 0025 [ 41]: 7672dc7082c41bab +Block 0025 [ 42]: f3def1f446699d0a +Block 0025 [ 43]: d4814bce24153b17 +Block 0025 [ 44]: e216945683f065f7 +Block 0025 [ 45]: 576411a7012ca38d +Block 0025 [ 46]: 723090d9c993b2ee +Block 0025 [ 47]: 4d823fefc8f9035c +Block 0025 [ 48]: cf0f4589118758a4 +Block 0025 [ 49]: b1d4460fa64aa621 +Block 0025 [ 50]: 94e82983b5173949 +Block 0025 [ 51]: ee5d570d4e61dcb1 +Block 0025 [ 52]: 357d37a1ae5df910 +Block 0025 [ 53]: 11f0a3fb6b7421c8 +Block 0025 [ 54]: 0aca0f137cfa300a +Block 0025 [ 55]: dd6d6f5bec942848 +Block 0025 [ 56]: 66d79c4704c0c2cf +Block 0025 [ 57]: ffe19bb80d92656a +Block 0025 [ 58]: c1bd6d50fa655462 +Block 0025 [ 59]: 4839837755a6182c +Block 0025 [ 60]: c20dfc55eaa2b63d +Block 0025 [ 61]: aefdf12048445e78 +Block 0025 [ 62]: 732fde83bd73a479 +Block 0025 [ 63]: db9e3a074d14bc35 +Block 0025 [ 64]: 5086f3fe923e5c95 +Block 0025 [ 65]: d12d3f7ff1b1447a +Block 0025 [ 66]: a6b5e44c58356eb0 +Block 0025 [ 67]: 472b0aa28e7d6b9b +Block 0025 [ 68]: 0f8dd423906ccf22 +Block 0025 [ 69]: a8295f1a3a00bcca +Block 0025 [ 70]: 76c5f59eea1920b0 +Block 0025 [ 71]: 5ae795cdbf364338 +Block 0025 [ 72]: 23952cc743c68ba3 +Block 0025 [ 73]: 5810730a92bfd13f +Block 0025 [ 74]: f956febc1edb9e2f +Block 0025 [ 75]: 55e31c195108a36f +Block 0025 [ 76]: e02b758b63004a43 +Block 0025 [ 77]: 60497305b0cd869d +Block 0025 [ 78]: b18c2987b2938143 +Block 0025 [ 79]: a49174eb08fa5d31 +Block 0025 [ 80]: e3b098abb1b7ecc7 +Block 0025 [ 81]: 0f057184a4fa53d4 +Block 0025 [ 82]: 57b34bf21444321c +Block 0025 [ 83]: 607c182ca523340b +Block 0025 [ 84]: 804edac2f1b00605 +Block 0025 [ 85]: 101a6b49ceaca684 +Block 0025 [ 86]: 447a34a4fb951403 +Block 0025 [ 87]: dbc1eb36865c36a2 +Block 0025 [ 88]: af4abc94ba557920 +Block 0025 [ 89]: 1d698533ab769326 +Block 0025 [ 90]: 5c3426b817abb8f0 +Block 0025 [ 91]: f38cecd553c531d2 +Block 0025 [ 92]: ef3694fcc3d99451 +Block 0025 [ 93]: 53bfda338a59ab41 +Block 0025 [ 94]: c6f5fb7b6029de2d +Block 0025 [ 95]: e3fc04c1f36144a8 +Block 0025 [ 96]: 820737f3b4eacb98 +Block 0025 [ 97]: 85cec89abce81975 +Block 0025 [ 98]: 745271c6bc864740 +Block 0025 [ 99]: 1c0811cf1c431e19 +Block 0025 [100]: 4d99ff91c0c64d1a +Block 0025 [101]: 979cb0118168a9fb +Block 0025 [102]: d53fa0291a3d76e0 +Block 0025 [103]: 1ce5fbd785ad370a +Block 0025 [104]: 6d7049f9344ec655 +Block 0025 [105]: 53f7839ff27c66c7 +Block 0025 [106]: fc9a2098d2211301 +Block 0025 [107]: f5f926c8bd4c4d01 +Block 0025 [108]: 3b058a18e77f9bb1 +Block 0025 [109]: ca320ef75bca7535 +Block 0025 [110]: 79339df3ec05b866 +Block 0025 [111]: c816026a714092bd +Block 0025 [112]: b82d81735606531e +Block 0025 [113]: d8268ae55a6131ce +Block 0025 [114]: 4f268372782968b5 +Block 0025 [115]: a3062a5aeb9384dd +Block 0025 [116]: 65dcc349c62b4191 +Block 0025 [117]: 85f5779531f46af1 +Block 0025 [118]: 43787b67d0c1778c +Block 0025 [119]: 73f5ed29f3e61e5d +Block 0025 [120]: 449b111b7e54e5e0 +Block 0025 [121]: 8f880be186dee777 +Block 0025 [122]: 3ab3a6d0e2493169 +Block 0025 [123]: 95852a5bee3d5164 +Block 0025 [124]: 90b38d7051960232 +Block 0025 [125]: 936e413aeae9d225 +Block 0025 [126]: 54774428cd567644 +Block 0025 [127]: 14be833fb3c1ac88 +Block 0026 [ 0]: fb487be18df7eb8d +Block 0026 [ 1]: 2412501be404fb4e +Block 0026 [ 2]: d7b2c081d9131080 +Block 0026 [ 3]: 0a581196251f1831 +Block 0026 [ 4]: bded1e5259f76500 +Block 0026 [ 5]: 6016730d78d0bc53 +Block 0026 [ 6]: 52f90543516e0fb9 +Block 0026 [ 7]: d02d45cd3f1a17b5 +Block 0026 [ 8]: a0d5c083921cbaa6 +Block 0026 [ 9]: eb736849ae0115bb +Block 0026 [ 10]: 38499c85645ea09f +Block 0026 [ 11]: 073a5dba363f3553 +Block 0026 [ 12]: 59b34c2590679624 +Block 0026 [ 13]: 5e2de51bca2407a9 +Block 0026 [ 14]: aac20d25a2b2ed15 +Block 0026 [ 15]: 244859ec8edc3cbb +Block 0026 [ 16]: 618a3558f289a76f +Block 0026 [ 17]: 40f3419b8ed0524d +Block 0026 [ 18]: d868a3a6e0a5d7df +Block 0026 [ 19]: 6f96de68338ea557 +Block 0026 [ 20]: 870fb44e701b4404 +Block 0026 [ 21]: 61c567f8db2a6ce5 +Block 0026 [ 22]: 169cdd5f6449f530 +Block 0026 [ 23]: e9810f4bcc425020 +Block 0026 [ 24]: 3152e7edc348cf7a +Block 0026 [ 25]: 9eac974a1e5b0350 +Block 0026 [ 26]: 99c7a8f313578337 +Block 0026 [ 27]: c724d4256fc1241a +Block 0026 [ 28]: 3ee0245454922982 +Block 0026 [ 29]: c6441c8af990ced6 +Block 0026 [ 30]: dbac5d89ef4f3e2a +Block 0026 [ 31]: 414aa7cd0f754e55 +Block 0026 [ 32]: 489bc0760eda7b07 +Block 0026 [ 33]: fd383b765fb81891 +Block 0026 [ 34]: 4d852ceed348635c +Block 0026 [ 35]: 811cb9f91082156e +Block 0026 [ 36]: aa7fcfdf2c355044 +Block 0026 [ 37]: 9f35f2708fd615b6 +Block 0026 [ 38]: 3321a64e9ed24a5f +Block 0026 [ 39]: 4fe9684a31256a87 +Block 0026 [ 40]: 0f583fe70d6982a0 +Block 0026 [ 41]: a6755d33ea305335 +Block 0026 [ 42]: 2263c8affb70cd87 +Block 0026 [ 43]: 6d582e490d23613d +Block 0026 [ 44]: d3f6775090e90406 +Block 0026 [ 45]: 8cf43fe930e2f86e +Block 0026 [ 46]: fe4542378bbd625c +Block 0026 [ 47]: 8d660ec74c5a6c6e +Block 0026 [ 48]: 9f7c3ff4997a8c11 +Block 0026 [ 49]: 44256d91adf7b314 +Block 0026 [ 50]: 857e5e379b306054 +Block 0026 [ 51]: 28a4891ccbd52570 +Block 0026 [ 52]: fa3ee9dad4f01df4 +Block 0026 [ 53]: 18f98918c7f237b9 +Block 0026 [ 54]: 294fd5c947a31bab +Block 0026 [ 55]: 06295a7262a12b86 +Block 0026 [ 56]: 5a5a7a7eba41739d +Block 0026 [ 57]: 4d98727eb9f6bcf9 +Block 0026 [ 58]: 49e3cb6ab07fec0e +Block 0026 [ 59]: 962e2140c0a21b25 +Block 0026 [ 60]: 86069730a4abf3ed +Block 0026 [ 61]: fc22af18ec18d2c4 +Block 0026 [ 62]: 5fa009f2eaad07c6 +Block 0026 [ 63]: 08c58faf884a793f +Block 0026 [ 64]: 986adc48582ffb12 +Block 0026 [ 65]: dc77fa6a85a5e76d +Block 0026 [ 66]: c29359fe2f1ee366 +Block 0026 [ 67]: 23087c88088978ca +Block 0026 [ 68]: 7c1c4bb1f4297c1e +Block 0026 [ 69]: ef501ae32f369047 +Block 0026 [ 70]: 8a79d9699334e928 +Block 0026 [ 71]: aab7b483178735ff +Block 0026 [ 72]: 622ec4e95fbe36bd +Block 0026 [ 73]: eb0bf85db3bc78a8 +Block 0026 [ 74]: f44be5060f166f98 +Block 0026 [ 75]: 6255bfff5f971965 +Block 0026 [ 76]: 52f61bc236ac1b65 +Block 0026 [ 77]: f23b70892420cefe +Block 0026 [ 78]: 6e8f53f9674910e6 +Block 0026 [ 79]: d7132b9c00a6ad7c +Block 0026 [ 80]: 020bc2685469901d +Block 0026 [ 81]: 108cd38e30f23200 +Block 0026 [ 82]: f450098cfe218776 +Block 0026 [ 83]: 4f67e9fc7039a747 +Block 0026 [ 84]: 37eba43f2fa0d31b +Block 0026 [ 85]: f0f42e8fe6ac612f +Block 0026 [ 86]: 1f376340d44ab901 +Block 0026 [ 87]: d77f62728aca121d +Block 0026 [ 88]: ac1072995fc2ff37 +Block 0026 [ 89]: e7069948a84a3977 +Block 0026 [ 90]: b33c06e54ab93729 +Block 0026 [ 91]: 39e0af0be89603dd +Block 0026 [ 92]: d22f84dfd99dcc8a +Block 0026 [ 93]: 88ac4c95d7937a2a +Block 0026 [ 94]: 0cf2539c4243d967 +Block 0026 [ 95]: 34e8d12e0b92aaea +Block 0026 [ 96]: e15df1069c6ef442 +Block 0026 [ 97]: 40f35bc356fc0c3d +Block 0026 [ 98]: 0e071590cf2db74a +Block 0026 [ 99]: e387d14f6bdd296b +Block 0026 [100]: 73fb9acc7733fab5 +Block 0026 [101]: 4266f8cc2efa280b +Block 0026 [102]: b3d909ebafc201c9 +Block 0026 [103]: e5412fc8412e7fc9 +Block 0026 [104]: 02210cc87412d5a3 +Block 0026 [105]: 54f130c0554c6ac3 +Block 0026 [106]: 68a7b73bc65cf9e4 +Block 0026 [107]: 307263b13f5b963a +Block 0026 [108]: 7596dd4e7d1db393 +Block 0026 [109]: 6f139dfd1be30627 +Block 0026 [110]: 1d3ef50a50ceaed6 +Block 0026 [111]: eb88fda3b09b1296 +Block 0026 [112]: 4c3b8e2b4ca2e1f7 +Block 0026 [113]: 57ce38c178027833 +Block 0026 [114]: ce45c95b2532bbdd +Block 0026 [115]: bf634de9141dfe76 +Block 0026 [116]: 1ba389024f54f36b +Block 0026 [117]: 3ac1f8ae10577c81 +Block 0026 [118]: 814252a3e5652404 +Block 0026 [119]: 3322ff859d6b20d5 +Block 0026 [120]: bf7ee00ef0fe69b3 +Block 0026 [121]: b3ef0667ff20b60f +Block 0026 [122]: 79fe044ee99570bb +Block 0026 [123]: 5c03a6ffb98c6c3d +Block 0026 [124]: fc3e251d52c216ea +Block 0026 [125]: 274c5148e90c511b +Block 0026 [126]: 3eafcafba246f626 +Block 0026 [127]: 935a2ec2b3396f23 +Block 0027 [ 0]: 159e40334396333d +Block 0027 [ 1]: 35debd9f9e959a3b +Block 0027 [ 2]: e1fbc7a924a625fe +Block 0027 [ 3]: 90ad1340b58c1e89 +Block 0027 [ 4]: 67b4cd3e612f9c38 +Block 0027 [ 5]: 61a7596c0b4d1b21 +Block 0027 [ 6]: 587fcd006c063e9f +Block 0027 [ 7]: b0f4588fbe2fe388 +Block 0027 [ 8]: 5047302d958a2dbe +Block 0027 [ 9]: 959582f80834b214 +Block 0027 [ 10]: e4b8921bcf7453d3 +Block 0027 [ 11]: cef065b8fe85471f +Block 0027 [ 12]: 4c28967e6e845806 +Block 0027 [ 13]: 95097bd7a3f1b357 +Block 0027 [ 14]: 4cc838f128fdb9a5 +Block 0027 [ 15]: e763538ff7bf6905 +Block 0027 [ 16]: e8bc164923715cd5 +Block 0027 [ 17]: 1aab15c51709863d +Block 0027 [ 18]: f916024c0fd94f60 +Block 0027 [ 19]: bb805c2ff026f601 +Block 0027 [ 20]: 39a4e6570eea2e20 +Block 0027 [ 21]: 356a1aba03e1d831 +Block 0027 [ 22]: c74e8ec0aa6532b8 +Block 0027 [ 23]: ba610ecdf6d64405 +Block 0027 [ 24]: 9e70622f149a89b9 +Block 0027 [ 25]: 345b1a805f2b69c6 +Block 0027 [ 26]: ab9cac31ce78f811 +Block 0027 [ 27]: 95dc637304bfd01e +Block 0027 [ 28]: c3c85afe6db662b6 +Block 0027 [ 29]: 1147079a0ee70d38 +Block 0027 [ 30]: 9aa8571b4c12ab3a +Block 0027 [ 31]: 0c5bc0316ffbb5da +Block 0027 [ 32]: 8e6d03850ebf0c6b +Block 0027 [ 33]: 16d56a59f5c9d9ed +Block 0027 [ 34]: 6c9d8fc35506be7b +Block 0027 [ 35]: 1b1bb9e6da78719d +Block 0027 [ 36]: b6adeb5a05127a11 +Block 0027 [ 37]: 6f8b8e355e4940dd +Block 0027 [ 38]: e1c3e8f1a0f554b6 +Block 0027 [ 39]: c5eb3dff6c043572 +Block 0027 [ 40]: 9a86baac2419994e +Block 0027 [ 41]: c9c44c781da2e1c3 +Block 0027 [ 42]: 639000af64968df2 +Block 0027 [ 43]: 1c4c7ec41762744a +Block 0027 [ 44]: e768397942510cf9 +Block 0027 [ 45]: 434bbca62243dab6 +Block 0027 [ 46]: 786480067546a5f6 +Block 0027 [ 47]: d749591161b87446 +Block 0027 [ 48]: e1563d5a486c87c3 +Block 0027 [ 49]: 9f0c7700273b813e +Block 0027 [ 50]: 304836e556914ec0 +Block 0027 [ 51]: f65ef06f782ba50f +Block 0027 [ 52]: 5b965ee1f01ef44f +Block 0027 [ 53]: 6338cc24f6ea3230 +Block 0027 [ 54]: 593a3771c1e7a207 +Block 0027 [ 55]: 5ab77e5059a9a160 +Block 0027 [ 56]: 49e72d762260501c +Block 0027 [ 57]: 4ae2e5a7a667142a +Block 0027 [ 58]: b64d7c61f720ba52 +Block 0027 [ 59]: 5c04d5b69f09ddee +Block 0027 [ 60]: 6424491f6cbe7e74 +Block 0027 [ 61]: 34edd83bf282bb4c +Block 0027 [ 62]: ba7d59f9fe2cb25c +Block 0027 [ 63]: c24cb5e01a00ef27 +Block 0027 [ 64]: 2a3a486c959977c1 +Block 0027 [ 65]: ed0da6827836de25 +Block 0027 [ 66]: 7042248ab660371d +Block 0027 [ 67]: afd8cf2fa335245c +Block 0027 [ 68]: 1b4e226a51d82d6a +Block 0027 [ 69]: dd05266199543763 +Block 0027 [ 70]: 689c0b986a2d93d8 +Block 0027 [ 71]: 0a8271d7de2878a7 +Block 0027 [ 72]: 9f44d2816b1b50df +Block 0027 [ 73]: 1719aea0e7e3eaa9 +Block 0027 [ 74]: e106c5709673b01f +Block 0027 [ 75]: b04fcb886a18ae63 +Block 0027 [ 76]: e8f3d9b2308eef93 +Block 0027 [ 77]: db65d3dd6473325a +Block 0027 [ 78]: c659d81491aed1e9 +Block 0027 [ 79]: e12cff0492e843c0 +Block 0027 [ 80]: 7403b7de484abbd7 +Block 0027 [ 81]: 1fbaa3c23d8f4b7c +Block 0027 [ 82]: a854cdf30488f6a9 +Block 0027 [ 83]: eccdd64e58074056 +Block 0027 [ 84]: d65f8859f44ff969 +Block 0027 [ 85]: a230cd84cd2588a0 +Block 0027 [ 86]: ff2bc0e01e574048 +Block 0027 [ 87]: a56bb59d3ddc7e38 +Block 0027 [ 88]: db383d2ea5f60f4a +Block 0027 [ 89]: 02f70a87053f54b9 +Block 0027 [ 90]: 106c65eb3d0a0ef7 +Block 0027 [ 91]: 779a3d3e70076a46 +Block 0027 [ 92]: ab63c42176583636 +Block 0027 [ 93]: cfd08c6d8ebb1703 +Block 0027 [ 94]: b7bb88525417a838 +Block 0027 [ 95]: eb118a9673be378e +Block 0027 [ 96]: 39ed8faae4710682 +Block 0027 [ 97]: d4ba3147a41ba3d2 +Block 0027 [ 98]: a0a701460ad6804d +Block 0027 [ 99]: 3a67a2c71a8cce3b +Block 0027 [100]: 0102b5ef646994b2 +Block 0027 [101]: 19dcffd9c433deef +Block 0027 [102]: f0939e375d416a48 +Block 0027 [103]: a26a910720ceb122 +Block 0027 [104]: c377d599215ce2b5 +Block 0027 [105]: 7e30dc33a90a37b1 +Block 0027 [106]: fc335a52fe857c07 +Block 0027 [107]: 3b5d0455b3860a76 +Block 0027 [108]: cec5a9162e644993 +Block 0027 [109]: 2cfe25839dd15ab7 +Block 0027 [110]: 9b156e7837236a75 +Block 0027 [111]: d6eb2e3a281a5cdb +Block 0027 [112]: 42c6565b34cba6af +Block 0027 [113]: d66060382243dc0b +Block 0027 [114]: 486d5bc00554a4b1 +Block 0027 [115]: 458ad595a0269bc7 +Block 0027 [116]: 2968c320d059d4cd +Block 0027 [117]: bd84bd47e559db51 +Block 0027 [118]: 3c4e312783b9859a +Block 0027 [119]: 6e49857079e4c504 +Block 0027 [120]: a7777b7394e65639 +Block 0027 [121]: 230be5f469a8b638 +Block 0027 [122]: 0728f719aa188543 +Block 0027 [123]: ff9963971241708c +Block 0027 [124]: 0ace11603796535c +Block 0027 [125]: cd2788157711e0a8 +Block 0027 [126]: 375f1148708a76c0 +Block 0027 [127]: 7a825f3267910e33 +Block 0028 [ 0]: 0849f26117e82e69 +Block 0028 [ 1]: d5f71170afc0cd99 +Block 0028 [ 2]: 337cf42a1f9aa6ed +Block 0028 [ 3]: 8b3ee65b0fa2ee71 +Block 0028 [ 4]: 08e5f029da386cf5 +Block 0028 [ 5]: 56faaaa1bd86acb1 +Block 0028 [ 6]: c5b50eef97e1aaf2 +Block 0028 [ 7]: 44fb3096543f68b5 +Block 0028 [ 8]: a49b5724cabeaade +Block 0028 [ 9]: c9984984f42d456d +Block 0028 [ 10]: 86087eb21aa86362 +Block 0028 [ 11]: 7c26cd8835fe070a +Block 0028 [ 12]: df7893c4c3184f26 +Block 0028 [ 13]: 213ef3aff6a570d1 +Block 0028 [ 14]: 2e6d52b63938f7b2 +Block 0028 [ 15]: 2d40ede261919ac2 +Block 0028 [ 16]: 3a5db1e8c3d48c18 +Block 0028 [ 17]: bd96321cef252f19 +Block 0028 [ 18]: 5fa45329ce5fe729 +Block 0028 [ 19]: 3108fa03894aa4e6 +Block 0028 [ 20]: e3760737d9e8436f +Block 0028 [ 21]: 22f767c73cfb6d1a +Block 0028 [ 22]: d3752b7eccedb8bf +Block 0028 [ 23]: 90151508c3540bcb +Block 0028 [ 24]: e42592301a636512 +Block 0028 [ 25]: e70ee12d7216f4e9 +Block 0028 [ 26]: aad05fb9c5894f49 +Block 0028 [ 27]: 0bee7b256f071ab4 +Block 0028 [ 28]: 92ce045f4138a3be +Block 0028 [ 29]: 7f7065c75a435f24 +Block 0028 [ 30]: a431b3b6e0c59cae +Block 0028 [ 31]: ef20bc3f22350a04 +Block 0028 [ 32]: b275f5fa1e04cb09 +Block 0028 [ 33]: 370630d3d9a41d2b +Block 0028 [ 34]: 4dafe30055bdb07e +Block 0028 [ 35]: 834f9a112778a3a7 +Block 0028 [ 36]: 4f3f222636687ea1 +Block 0028 [ 37]: 5d56952ee08e0a6a +Block 0028 [ 38]: 26a59314ae105696 +Block 0028 [ 39]: d16327fc3f66f2ca +Block 0028 [ 40]: 1a14f45ff2619475 +Block 0028 [ 41]: afb1cd011f1d190a +Block 0028 [ 42]: 4b193be4e955e2d9 +Block 0028 [ 43]: 112011bd408e324f +Block 0028 [ 44]: 982c98964b0baca7 +Block 0028 [ 45]: 7d93cc6551a4fd9d +Block 0028 [ 46]: ee58c96acfc8c064 +Block 0028 [ 47]: 68c962a88a2a51c9 +Block 0028 [ 48]: 905d84e0e7b066c0 +Block 0028 [ 49]: 8e2a80dbf5dadd98 +Block 0028 [ 50]: ba8e81f0dce0c3d3 +Block 0028 [ 51]: c0eeaf524cdc1a9a +Block 0028 [ 52]: e2f2b0a38d8bb527 +Block 0028 [ 53]: 30ca19c0bcc47ce5 +Block 0028 [ 54]: a51213f07e89eee5 +Block 0028 [ 55]: 96f72b7410c329bd +Block 0028 [ 56]: b97493bbe5136439 +Block 0028 [ 57]: 89717556a6753782 +Block 0028 [ 58]: d4cfb003fc67c9f5 +Block 0028 [ 59]: 541dc2a89c9e400e +Block 0028 [ 60]: 4251b6717b98dc3d +Block 0028 [ 61]: 1cfab5fc275fa115 +Block 0028 [ 62]: 814f8d19cb4fbb3a +Block 0028 [ 63]: 132f7ef88079c208 +Block 0028 [ 64]: 833cd31cacb85c65 +Block 0028 [ 65]: d4bb68949f3df570 +Block 0028 [ 66]: 92bcae2eac5e7765 +Block 0028 [ 67]: c7f23e8397ddaf35 +Block 0028 [ 68]: b566b8e8adff82e7 +Block 0028 [ 69]: 0a2162802341b685 +Block 0028 [ 70]: 73bce590f290184f +Block 0028 [ 71]: 8ff6a187a4def08c +Block 0028 [ 72]: 584577ed0490bc21 +Block 0028 [ 73]: ac4406c4137dfee9 +Block 0028 [ 74]: f4fbf4110f495a81 +Block 0028 [ 75]: 08f5780ba9cc43d9 +Block 0028 [ 76]: 75c168632ff3dfce +Block 0028 [ 77]: 3dee16456c07ebcd +Block 0028 [ 78]: 036c0730b8f60056 +Block 0028 [ 79]: 6b9d6a60d9cc1975 +Block 0028 [ 80]: 6f374b04e4e75fe5 +Block 0028 [ 81]: 01da5a909d9e0d78 +Block 0028 [ 82]: 0c6fbe7746f25058 +Block 0028 [ 83]: bd91552984f5ac9f +Block 0028 [ 84]: f385b64acabaa0c6 +Block 0028 [ 85]: 0eee4367c6323e93 +Block 0028 [ 86]: 702ecb0bde5c9096 +Block 0028 [ 87]: 040a6edea15014bd +Block 0028 [ 88]: 09409b7a46a09515 +Block 0028 [ 89]: 593ffbb45922881e +Block 0028 [ 90]: 93d1b8eddbeb3779 +Block 0028 [ 91]: 20e543ddff978938 +Block 0028 [ 92]: ab067161ec9a6b01 +Block 0028 [ 93]: b3ba38bc824538ee +Block 0028 [ 94]: 9c56eb38eb4431f6 +Block 0028 [ 95]: 3fb4fcd01732e6da +Block 0028 [ 96]: d78ce9b0a9fbdad2 +Block 0028 [ 97]: 156975f6f8233d48 +Block 0028 [ 98]: f436a80f86e2cb90 +Block 0028 [ 99]: d0f1e1209cf6049f +Block 0028 [100]: f32f5e2f8024c792 +Block 0028 [101]: 29b30130eaf52b55 +Block 0028 [102]: 37e560fe3a1696c8 +Block 0028 [103]: c331eadc24d9beca +Block 0028 [104]: d5b8368f1a774c9b +Block 0028 [105]: 03f3c0bd89abcadb +Block 0028 [106]: f455906baa4fb0ba +Block 0028 [107]: e80fe133ffbab8bd +Block 0028 [108]: 577157827c027d91 +Block 0028 [109]: 4a08fe8ba548fa0b +Block 0028 [110]: 0b66ee4cb9c7ea4e +Block 0028 [111]: 8fdbed3184ee5d52 +Block 0028 [112]: ddd779a1731696ee +Block 0028 [113]: d96141b193a21297 +Block 0028 [114]: 6a81beb51328863d +Block 0028 [115]: db461e53677de07c +Block 0028 [116]: f2f8671327ceeb4c +Block 0028 [117]: 7c904037691f33ba +Block 0028 [118]: 96fb37b562e4c9b8 +Block 0028 [119]: 05fcd6da00353939 +Block 0028 [120]: 0f596ac66bc611c0 +Block 0028 [121]: af26b7fa3530572f +Block 0028 [122]: 18c3afbee2dd6326 +Block 0028 [123]: 5385c318968ff79c +Block 0028 [124]: 74ff24b87493af07 +Block 0028 [125]: 5c194c0a50cb046e +Block 0028 [126]: 73022d716b6a6d1b +Block 0028 [127]: caa125ca87182882 +Block 0029 [ 0]: fc0960a67b7ec1a8 +Block 0029 [ 1]: 6d7bd2f98e6a5ffe +Block 0029 [ 2]: d9ecf72f70549a6a +Block 0029 [ 3]: 47805459f5c4fbd6 +Block 0029 [ 4]: 72fecd2e969f8bb8 +Block 0029 [ 5]: 726a7d27060c41f6 +Block 0029 [ 6]: 2876b25d393f7e10 +Block 0029 [ 7]: 3b1bc55ae5474c0d +Block 0029 [ 8]: 61edce506daea986 +Block 0029 [ 9]: 3e8a6bc466ff959d +Block 0029 [ 10]: 19a6c7d4ac26c129 +Block 0029 [ 11]: 16ad302ec06d236b +Block 0029 [ 12]: 0f34685a73e16ceb +Block 0029 [ 13]: c782e2fd258b4df3 +Block 0029 [ 14]: 35971b0d4ec5b3e2 +Block 0029 [ 15]: c76d6c071c4f0b16 +Block 0029 [ 16]: 6b74e316b38c6bd2 +Block 0029 [ 17]: da9a635a7a35e375 +Block 0029 [ 18]: eedcd0af08112474 +Block 0029 [ 19]: c4e3c5b62f518d59 +Block 0029 [ 20]: 07a9045032534a34 +Block 0029 [ 21]: 8e86baf9d908a2b5 +Block 0029 [ 22]: a12823e5e8d33cc6 +Block 0029 [ 23]: aecdaed64f20ce64 +Block 0029 [ 24]: cf81e3c1bd174f2a +Block 0029 [ 25]: 9b66257654f67fb7 +Block 0029 [ 26]: f3d9816877c71ade +Block 0029 [ 27]: 5e5d7109eb946b0f +Block 0029 [ 28]: cfabf5385167b3e7 +Block 0029 [ 29]: f10e7285325a928d +Block 0029 [ 30]: 179038a47687b7fa +Block 0029 [ 31]: 1209ab7eaf12118d +Block 0029 [ 32]: 2770efce7650bfa0 +Block 0029 [ 33]: 0d8622cfc8311eb0 +Block 0029 [ 34]: 4c83e4b1401e10ee +Block 0029 [ 35]: e7a9bf81a99de5e4 +Block 0029 [ 36]: 3bc5037d75e60ea5 +Block 0029 [ 37]: 9661e829b7a7ba4a +Block 0029 [ 38]: 9d33f0ff44e5bf07 +Block 0029 [ 39]: 522cd22f151397cc +Block 0029 [ 40]: 6b6272068e7fcbfc +Block 0029 [ 41]: fd58176e4a1bbd63 +Block 0029 [ 42]: 8daa234502905ad3 +Block 0029 [ 43]: 3efa160297920c1e +Block 0029 [ 44]: 25effc8c223c842e +Block 0029 [ 45]: 33bc726de3e9e93b +Block 0029 [ 46]: b9e9a801c48e3e99 +Block 0029 [ 47]: 2bc381b9ef4d5a2f +Block 0029 [ 48]: 6837fa8901fdc454 +Block 0029 [ 49]: f23ba3cee006be2b +Block 0029 [ 50]: 0255aaa71fec0b30 +Block 0029 [ 51]: 93ff41644f070fed +Block 0029 [ 52]: 1c1bc44a784a3ed4 +Block 0029 [ 53]: c430d3f39922e831 +Block 0029 [ 54]: 0923d42873597fc9 +Block 0029 [ 55]: cceb977535285fb3 +Block 0029 [ 56]: 8ca0c8994ffc8298 +Block 0029 [ 57]: 24c5d796e0394e74 +Block 0029 [ 58]: 2379800cd30f75d0 +Block 0029 [ 59]: 0f5eaf10e0976ac1 +Block 0029 [ 60]: 76c68cecfee565b8 +Block 0029 [ 61]: 0b647de2dd4f60eb +Block 0029 [ 62]: b9d97be8b9d383a1 +Block 0029 [ 63]: f904b1c9eccef85e +Block 0029 [ 64]: cca9c2c31c4231be +Block 0029 [ 65]: 5e48ce618e385e9f +Block 0029 [ 66]: 9c06a0eebfebca2f +Block 0029 [ 67]: 8180caaa86a0e64a +Block 0029 [ 68]: 5cf18413a32f2966 +Block 0029 [ 69]: c59a9dda2ba89f4d +Block 0029 [ 70]: 69338caebbfb57ec +Block 0029 [ 71]: b2209df6c60fd644 +Block 0029 [ 72]: 2ae1fd8436562fcd +Block 0029 [ 73]: e9bd61cae08d2451 +Block 0029 [ 74]: a4b3defce71b8b2c +Block 0029 [ 75]: 7f1d2047b6298ae2 +Block 0029 [ 76]: cdb72c0cd885af3b +Block 0029 [ 77]: 01d3fd9d4a69b3a4 +Block 0029 [ 78]: 43302b20f168c76c +Block 0029 [ 79]: 1580f91718fbd7c3 +Block 0029 [ 80]: 0f094d8bda5145ed +Block 0029 [ 81]: 4431891cc01a6d4f +Block 0029 [ 82]: c81674848264747c +Block 0029 [ 83]: de3b7800eb2e952a +Block 0029 [ 84]: 285f74d9190aa9e4 +Block 0029 [ 85]: 2cd143aff3fcec91 +Block 0029 [ 86]: 5579ad6b7db95d5a +Block 0029 [ 87]: 21749b437208eae9 +Block 0029 [ 88]: 7ef65a417893a6a9 +Block 0029 [ 89]: b4ceb7fa75463c39 +Block 0029 [ 90]: 3331cf19e3458714 +Block 0029 [ 91]: 6535e001a8a19f13 +Block 0029 [ 92]: aa68097aa9ff3e76 +Block 0029 [ 93]: 74eb5b4fdbe6f9a0 +Block 0029 [ 94]: d05996b9585d7a1d +Block 0029 [ 95]: 5601726c8d72a7ed +Block 0029 [ 96]: dfce7f302b2f05ff +Block 0029 [ 97]: 7dd1f91852f35728 +Block 0029 [ 98]: 1f8698b22c96ed8a +Block 0029 [ 99]: fca4b98cac2e9ece +Block 0029 [100]: 7fb9b24de99a5e85 +Block 0029 [101]: 2f8e30a8ce7c2e01 +Block 0029 [102]: ce1e83f07b07e303 +Block 0029 [103]: b134093842c631ac +Block 0029 [104]: 2c34cfdf69eb3afc +Block 0029 [105]: 4a9877b224c738af +Block 0029 [106]: 34af8d0d9f0f1ff3 +Block 0029 [107]: 2895793c87c52173 +Block 0029 [108]: 1dd6e52d77529937 +Block 0029 [109]: a05ece635779c143 +Block 0029 [110]: d262438d4c71f022 +Block 0029 [111]: 095bfd122b580ac3 +Block 0029 [112]: 24756361b5a5153a +Block 0029 [113]: e6ceee958b68a91d +Block 0029 [114]: cd728e6ee76a6551 +Block 0029 [115]: 8de4480de3e706dc +Block 0029 [116]: 58d1e5aaadaa81ea +Block 0029 [117]: 5bd443fcb025a311 +Block 0029 [118]: 2447b45da523cd5b +Block 0029 [119]: 770d3f8864efbbdb +Block 0029 [120]: bc11cfa12135a788 +Block 0029 [121]: cbf9d333493841c2 +Block 0029 [122]: 78ee18e0ce8f6acb +Block 0029 [123]: fd65bce63ab57899 +Block 0029 [124]: 18c1e72c8b937615 +Block 0029 [125]: 0315f5261511b26a +Block 0029 [126]: 2b3dab20a993a7d1 +Block 0029 [127]: 0b9feaeeee468d2f +Block 0030 [ 0]: b2052ef0dd8f768a +Block 0030 [ 1]: b2b2234ce1973cc3 +Block 0030 [ 2]: 143d19226de29046 +Block 0030 [ 3]: e97211989dedab2e +Block 0030 [ 4]: 2422d9d75bb5bb2c +Block 0030 [ 5]: 305d57c1db2a6865 +Block 0030 [ 6]: e24070b4a268131a +Block 0030 [ 7]: c195f3bc8374f60f +Block 0030 [ 8]: d22ec1870be3b450 +Block 0030 [ 9]: 4559d92ad988b95a +Block 0030 [ 10]: b048f80baa657118 +Block 0030 [ 11]: 0e528a71fad655a3 +Block 0030 [ 12]: 511d78d7d4fc0f33 +Block 0030 [ 13]: 27d7316835672471 +Block 0030 [ 14]: 8cf3ac78da4f354d +Block 0030 [ 15]: b14bb0436ba7bde1 +Block 0030 [ 16]: 8c1bcffac0305930 +Block 0030 [ 17]: a48e003e06294fab +Block 0030 [ 18]: 1c4b57890adaf5e6 +Block 0030 [ 19]: be8aacd556831ec0 +Block 0030 [ 20]: 9a31b07f36eee8ef +Block 0030 [ 21]: 7e290e793e182e2f +Block 0030 [ 22]: 34f7a70e1c71e3ee +Block 0030 [ 23]: ea7bd765e8889914 +Block 0030 [ 24]: 73bb2edb8aade3d4 +Block 0030 [ 25]: cc489b76677d6524 +Block 0030 [ 26]: ace427159176b2b6 +Block 0030 [ 27]: c7ba07529cafa00d +Block 0030 [ 28]: 92ba84640725a577 +Block 0030 [ 29]: 53db5e65e62f40eb +Block 0030 [ 30]: 997c21e63f59c0be +Block 0030 [ 31]: 21a008e41804b69a +Block 0030 [ 32]: 17565f5deec66b24 +Block 0030 [ 33]: a4aecbe8d7e6c344 +Block 0030 [ 34]: 77322670bb8d123d +Block 0030 [ 35]: ff8796a180f48928 +Block 0030 [ 36]: 21d4f5b662279278 +Block 0030 [ 37]: e2203839dab8f281 +Block 0030 [ 38]: 2038dc2c363f8b6a +Block 0030 [ 39]: 1d5a096ca3d83a43 +Block 0030 [ 40]: ceab1bcb187e1696 +Block 0030 [ 41]: bcc01d99df65815b +Block 0030 [ 42]: e1c41fc7fbe1733f +Block 0030 [ 43]: ba7bd22a99fbfc93 +Block 0030 [ 44]: 3bf9adbca3d5aa1e +Block 0030 [ 45]: 5f306633205050cd +Block 0030 [ 46]: 2f352fc9dc50c917 +Block 0030 [ 47]: d7e450f208ba7fed +Block 0030 [ 48]: 44b89f076c0a8e32 +Block 0030 [ 49]: 0222879a3652e295 +Block 0030 [ 50]: 758a6bdb8c865426 +Block 0030 [ 51]: f4cbb242a24e88a0 +Block 0030 [ 52]: c9b5bc6c1d0aa4e8 +Block 0030 [ 53]: cb7a79143dd740f4 +Block 0030 [ 54]: 26b7dda4e33fa82a +Block 0030 [ 55]: b265116b6b7f5fdc +Block 0030 [ 56]: 9d98fa4388b3b1d2 +Block 0030 [ 57]: 63613dd863ffad59 +Block 0030 [ 58]: 5d260e364270c1b5 +Block 0030 [ 59]: 7926ce139af5724f +Block 0030 [ 60]: d491f878ace5751d +Block 0030 [ 61]: cb3e3414137aacf3 +Block 0030 [ 62]: 062ce6f69e6855f9 +Block 0030 [ 63]: 0062e1c94c9fe256 +Block 0030 [ 64]: 92caa34b0ef94118 +Block 0030 [ 65]: dbc5f3073dc30f08 +Block 0030 [ 66]: be3d40036d538186 +Block 0030 [ 67]: 4fbcd8cd79b5052a +Block 0030 [ 68]: 2335944f5b2bf43f +Block 0030 [ 69]: d3a81c3cf09ec276 +Block 0030 [ 70]: 3c82254099597e83 +Block 0030 [ 71]: 60ed028842e9c82b +Block 0030 [ 72]: e10eec69b48c3384 +Block 0030 [ 73]: 1c70f1994eae3be1 +Block 0030 [ 74]: ad67e9cbb7398a34 +Block 0030 [ 75]: dacf3aa8a4a0ba0c +Block 0030 [ 76]: f93343c03119b360 +Block 0030 [ 77]: 667246ada6958ce2 +Block 0030 [ 78]: b3edc34acaf5bbd2 +Block 0030 [ 79]: 3a0309b96bc4f5b6 +Block 0030 [ 80]: 07cfe170c526dfed +Block 0030 [ 81]: a7ea925aa63371f8 +Block 0030 [ 82]: 71f7658e621ebfb7 +Block 0030 [ 83]: 3912f92e486900cd +Block 0030 [ 84]: aedf0645dccfdb9f +Block 0030 [ 85]: 5fd59b9193f61ffc +Block 0030 [ 86]: 1d1885d2ee2a09ea +Block 0030 [ 87]: 54525cea48c434d4 +Block 0030 [ 88]: fde50a79628501e3 +Block 0030 [ 89]: d2bdb7791728bc8c +Block 0030 [ 90]: f47623128330618a +Block 0030 [ 91]: d386f78c8135ba7f +Block 0030 [ 92]: 83508d04d7acdbb2 +Block 0030 [ 93]: d72bec03760e0396 +Block 0030 [ 94]: 797e03273a488905 +Block 0030 [ 95]: 4436818cd7d1722a +Block 0030 [ 96]: 3f7b2a6b2c71efa7 +Block 0030 [ 97]: df843ca2b4d35c43 +Block 0030 [ 98]: bb8b8dcfd2b319dc +Block 0030 [ 99]: 37036a2b2eedf738 +Block 0030 [100]: b090f8e2d304969d +Block 0030 [101]: 650cccfd275c64b6 +Block 0030 [102]: dcfee0436658a01e +Block 0030 [103]: a551a617a6b6a03b +Block 0030 [104]: 12658c3efa5b96f0 +Block 0030 [105]: 4bf8704cdadb4120 +Block 0030 [106]: 91f163a47f8f6d0c +Block 0030 [107]: d67877cafce702cd +Block 0030 [108]: 3c9cf393dfd17fc3 +Block 0030 [109]: 503f28c42762fb95 +Block 0030 [110]: f2c82fa39d46da89 +Block 0030 [111]: 037acff46f38e827 +Block 0030 [112]: 7d6edb0bb6ed18b0 +Block 0030 [113]: 0ae509fab7d47c9b +Block 0030 [114]: 82f725b5acdecd8e +Block 0030 [115]: 9a30b79e16b1477f +Block 0030 [116]: 87d77f42cdeb213c +Block 0030 [117]: b18c6f2b9c1919d2 +Block 0030 [118]: b915794dffc5501f +Block 0030 [119]: 0c6b77c723ca40cf +Block 0030 [120]: 19ca061467c3b5c2 +Block 0030 [121]: 9eb33654b6244029 +Block 0030 [122]: 8583a9d82347931c +Block 0030 [123]: c04fa36a94647b18 +Block 0030 [124]: f886d82796d3d215 +Block 0030 [125]: 25d68dbad584ebe4 +Block 0030 [126]: 1d1de84c4e7bb0e0 +Block 0030 [127]: 12964c6a8e3c24c5 +Block 0031 [ 0]: 1a2c8c1bcaabe68b +Block 0031 [ 1]: b7fd776c18f9b862 +Block 0031 [ 2]: f45b25d204f536c6 +Block 0031 [ 3]: 0e1ec1d884b332ec +Block 0031 [ 4]: 85ba1f4bdbad8499 +Block 0031 [ 5]: 0f32370a51cd3bc1 +Block 0031 [ 6]: f9a8d18784762055 +Block 0031 [ 7]: 6033bc1c026256ae +Block 0031 [ 8]: 7c2ecce01d0d64c9 +Block 0031 [ 9]: 651628e8f822d4f6 +Block 0031 [ 10]: 93b7ce3adf7b86d2 +Block 0031 [ 11]: 95f87ed6efb293db +Block 0031 [ 12]: c5432aefa2fd457f +Block 0031 [ 13]: 00c5907d79fa6b5e +Block 0031 [ 14]: 330562160036c2c1 +Block 0031 [ 15]: 9095bbddb1b6e02e +Block 0031 [ 16]: 37336fa02074432c +Block 0031 [ 17]: 2f74cc26c2050fe7 +Block 0031 [ 18]: 06e2b942aa0b29a3 +Block 0031 [ 19]: c1b41019bdc69a34 +Block 0031 [ 20]: de7010f1e1e1313f +Block 0031 [ 21]: eb0fc0f48840d290 +Block 0031 [ 22]: bdbd37932788c629 +Block 0031 [ 23]: 1d42b93ecf1c2bbd +Block 0031 [ 24]: e42e70e9cb70832b +Block 0031 [ 25]: e652991b2aa76029 +Block 0031 [ 26]: 23fb258e4e7fee36 +Block 0031 [ 27]: 674d3ac465bddc12 +Block 0031 [ 28]: 56a17a87b3e7fdc4 +Block 0031 [ 29]: b10fafba31785f46 +Block 0031 [ 30]: bd16e3f7c623e5fb +Block 0031 [ 31]: 50dffab4fa9ff60e +Block 0031 [ 32]: 94d9b2ce9a522f3f +Block 0031 [ 33]: 80c610c5aec3601e +Block 0031 [ 34]: 40209cc4c5430d7c +Block 0031 [ 35]: 11af15192ea2bac0 +Block 0031 [ 36]: ccbd3b3c53528d22 +Block 0031 [ 37]: 29c6b992555c2df7 +Block 0031 [ 38]: 7a3d9aec341eb2d2 +Block 0031 [ 39]: 7cf7e40e94efc19a +Block 0031 [ 40]: ffcbeb96f181a60c +Block 0031 [ 41]: a9e7fc1c04eaaf72 +Block 0031 [ 42]: 7a11028ec5f57bd3 +Block 0031 [ 43]: ac50d9103f4a38a7 +Block 0031 [ 44]: 62c2ab00c9050c55 +Block 0031 [ 45]: 19ace5b13e02ef92 +Block 0031 [ 46]: 15805e1aa8d6d234 +Block 0031 [ 47]: a83da175fd667938 +Block 0031 [ 48]: 599544fe52cccc3c +Block 0031 [ 49]: 7328d9fa3a03bdd2 +Block 0031 [ 50]: e99f9beec2239b0e +Block 0031 [ 51]: e2665d5afd9bf4cd +Block 0031 [ 52]: f18fdbec632ad538 +Block 0031 [ 53]: c0f2934c37d59988 +Block 0031 [ 54]: 063d57b42ce3fe55 +Block 0031 [ 55]: 59cef85aa100303c +Block 0031 [ 56]: b804c6444c2a37fd +Block 0031 [ 57]: a0a46c89999cce7d +Block 0031 [ 58]: bd02136cdd2729b0 +Block 0031 [ 59]: 47895d4bc230b5b2 +Block 0031 [ 60]: 72dcd1e60d596ace +Block 0031 [ 61]: d3de8808628f18db +Block 0031 [ 62]: f5314a77dc38704e +Block 0031 [ 63]: ddd68c71a56ef2fc +Block 0031 [ 64]: 467bc2e5455c1ae7 +Block 0031 [ 65]: c9ea376dbeb55719 +Block 0031 [ 66]: e5034a450818a9cc +Block 0031 [ 67]: 1cfe70d8e73160fe +Block 0031 [ 68]: 81bd4568141b1161 +Block 0031 [ 69]: 52e25159c99a81e1 +Block 0031 [ 70]: 7b0584c6185b2ca7 +Block 0031 [ 71]: bcaa6093048ce033 +Block 0031 [ 72]: d3e27332ed086c0d +Block 0031 [ 73]: 9c93d42ba384372d +Block 0031 [ 74]: e7f690faa06d23d2 +Block 0031 [ 75]: 4cdd9f1007f7021b +Block 0031 [ 76]: 6be8fb6a4861435f +Block 0031 [ 77]: 048206d822bb042f +Block 0031 [ 78]: fd158dcb8c5ffda6 +Block 0031 [ 79]: 751d0f0b4a45bf77 +Block 0031 [ 80]: 862179d699217e2a +Block 0031 [ 81]: 7137c108e8207ff4 +Block 0031 [ 82]: 9849386ad51ebd49 +Block 0031 [ 83]: 2b1dc6fd29b4de8c +Block 0031 [ 84]: e9572bf08ff72695 +Block 0031 [ 85]: 595505301c056fe7 +Block 0031 [ 86]: 01adcab40f77fe14 +Block 0031 [ 87]: 9192080456546a10 +Block 0031 [ 88]: afceb66af9c8b1ad +Block 0031 [ 89]: ca3828fa65c64bb9 +Block 0031 [ 90]: fecd07d3146ea570 +Block 0031 [ 91]: b3066118394c1441 +Block 0031 [ 92]: 54d3a1d691bc0001 +Block 0031 [ 93]: f9117f8477ab3070 +Block 0031 [ 94]: 6cf7675acdbf390a +Block 0031 [ 95]: 1a24b03a02cc2cc1 +Block 0031 [ 96]: 9665f44bcee15e0c +Block 0031 [ 97]: ee19c0e5b5dadc4e +Block 0031 [ 98]: 0f14abfed1b8a0a5 +Block 0031 [ 99]: a4767e7d6c36a1aa +Block 0031 [100]: f53b35d3fc79f49b +Block 0031 [101]: 91a1f89fbd7bb719 +Block 0031 [102]: e960e8c3c6bf7be5 +Block 0031 [103]: b9a6f3159aa3bf7b +Block 0031 [104]: 58864d1643b857f7 +Block 0031 [105]: 4b6cdc649b45b4a2 +Block 0031 [106]: 84a895724ac0a7b5 +Block 0031 [107]: dde4c935479d6403 +Block 0031 [108]: 903dd11f8c11cf0c +Block 0031 [109]: 9f58c04ce66c1b7f +Block 0031 [110]: 62f18bed8942b0d0 +Block 0031 [111]: 205921ed45b35441 +Block 0031 [112]: 975afa8726547dd7 +Block 0031 [113]: 44b535af11791774 +Block 0031 [114]: 91344f7802210472 +Block 0031 [115]: 3209a717e8b8a883 +Block 0031 [116]: 0d970f1c82784832 +Block 0031 [117]: 450ab7ef353a856e +Block 0031 [118]: d8268f9ea2dc02f6 +Block 0031 [119]: f986c5ffcb996a13 +Block 0031 [120]: e34469a95b305c6b +Block 0031 [121]: d246ee673527bddb +Block 0031 [122]: e28ab4d42c75568e +Block 0031 [123]: 645ed1164314f06c +Block 0031 [124]: 9eacfcfbdb3ce0fc +Block 0031 [125]: 07dedaeb0aee71ac +Block 0031 [126]: 074435fad91548f4 +Block 0031 [127]: 2dbfff23f31b5883 + + After pass 2: +Block 0000 [ 0]: 5f047b575c5ff4d2 +Block 0000 [ 1]: f06985dbf11c91a8 +Block 0000 [ 2]: 89efb2759f9a8964 +Block 0000 [ 3]: 7486a73f62f9b142 +Block 0000 [ 4]: 04510925420c66ee +Block 0000 [ 5]: 02ec38228c37c5c1 +Block 0000 [ 6]: e6ab2b457912bab8 +Block 0000 [ 7]: 7a7302160f813d0b +Block 0000 [ 8]: 85196983c6a99c88 +Block 0000 [ 9]: 793919b5d4d2fe3f +Block 0000 [ 10]: 4174ca650bf22cbf +Block 0000 [ 11]: 73d33705a47001a6 +Block 0000 [ 12]: 10eb4382afcc83c8 +Block 0000 [ 13]: 52fed27577f0d80f +Block 0000 [ 14]: 36d1c95b87f653da +Block 0000 [ 15]: 6f9e5acbdb49a453 +Block 0000 [ 16]: b8262734f13b4a90 +Block 0000 [ 17]: a8f02f5e522cc67c +Block 0000 [ 18]: fff3ae5438debcf9 +Block 0000 [ 19]: e60bf91cdef498bc +Block 0000 [ 20]: 92ec94d4802a8bf1 +Block 0000 [ 21]: 0a2d24b6e655dc7d +Block 0000 [ 22]: 7d1d0fb920dd0459 +Block 0000 [ 23]: dedd69551c04b7c1 +Block 0000 [ 24]: 3511aededd90af82 +Block 0000 [ 25]: a1c6ec50f1a3ee01 +Block 0000 [ 26]: 28740d043e641129 +Block 0000 [ 27]: b28aa3b94d3c62eb +Block 0000 [ 28]: 953f8ce4563fefc9 +Block 0000 [ 29]: 64480ac4c555dc1c +Block 0000 [ 30]: 30948d009ba6d9d0 +Block 0000 [ 31]: b12e34f4768d5ab1 +Block 0000 [ 32]: ea79366a5c411c94 +Block 0000 [ 33]: 3820909417b535b2 +Block 0000 [ 34]: a60b56c5d8e47c14 +Block 0000 [ 35]: 6d64419df3c1657b +Block 0000 [ 36]: 4e60fe0e68fdc370 +Block 0000 [ 37]: 6b34d1e7ffd1f58f +Block 0000 [ 38]: a2618e2a71782401 +Block 0000 [ 39]: 2e0ebd59471df5f1 +Block 0000 [ 40]: afca46f9e6c7a3a8 +Block 0000 [ 41]: 0afc976edd5eef13 +Block 0000 [ 42]: 8d57326fca2940a7 +Block 0000 [ 43]: 4b0896a7e28a8009 +Block 0000 [ 44]: ba9b97a085d9944f +Block 0000 [ 45]: 86dc7b027eb5239d +Block 0000 [ 46]: a1adb7eea4de8f4b +Block 0000 [ 47]: e14b47fb17ee94a0 +Block 0000 [ 48]: 0673a2ded047d48a +Block 0000 [ 49]: 8018a5b24996b8b8 +Block 0000 [ 50]: 550adaf7002459f4 +Block 0000 [ 51]: 619740442a82e646 +Block 0000 [ 52]: 841d26f23222d87e +Block 0000 [ 53]: a5bda4a6c6ebef40 +Block 0000 [ 54]: 1d35886ff0994a0a +Block 0000 [ 55]: 9f2efe245a9a0f6d +Block 0000 [ 56]: da834952d4054492 +Block 0000 [ 57]: 79b44cfc747e6e35 +Block 0000 [ 58]: 454f45b843148ea7 +Block 0000 [ 59]: fe4e7e8d6ee284d4 +Block 0000 [ 60]: 81bfeb6930e92f50 +Block 0000 [ 61]: c5a8c22323c3329e +Block 0000 [ 62]: b7a4075886e814f7 +Block 0000 [ 63]: 38485da04db198a4 +Block 0000 [ 64]: fffa92db07389636 +Block 0000 [ 65]: 4079321de7a249f7 +Block 0000 [ 66]: 9150351d5a078294 +Block 0000 [ 67]: fe6da74e90e55b56 +Block 0000 [ 68]: d151fdb37e488be9 +Block 0000 [ 69]: 222fcdcaa2951d4a +Block 0000 [ 70]: cf7466f1e72ce6a6 +Block 0000 [ 71]: 270d3da26dca1c5b +Block 0000 [ 72]: 567e57efd070a016 +Block 0000 [ 73]: 2786865e1820fb18 +Block 0000 [ 74]: adabab3af194dcc3 +Block 0000 [ 75]: 9b41d5ba67787de2 +Block 0000 [ 76]: 931f4d8a86aca9e1 +Block 0000 [ 77]: d9bca2e97b0d4c9e +Block 0000 [ 78]: 62f0c0bb37535905 +Block 0000 [ 79]: 5776709c1ead9801 +Block 0000 [ 80]: 6ee4546f7151d0e3 +Block 0000 [ 81]: f6884c2886809927 +Block 0000 [ 82]: 2137d2b78baa5334 +Block 0000 [ 83]: 52861e17e6b0be52 +Block 0000 [ 84]: 3c7331786635fddc +Block 0000 [ 85]: 25d2804d3b22f999 +Block 0000 [ 86]: ef36e6d7d49fbb86 +Block 0000 [ 87]: afe8278e58dce088 +Block 0000 [ 88]: 9922e9f924c3588c +Block 0000 [ 89]: 0171a37fc1ef9c4d +Block 0000 [ 90]: a7841e6d2dfa7d6a +Block 0000 [ 91]: e1f0fdfae60f66ba +Block 0000 [ 92]: 29009786b06cd61b +Block 0000 [ 93]: 9c4dfe4cc81fc529 +Block 0000 [ 94]: 35d9e9d3af62794f +Block 0000 [ 95]: 34b057c385eb4fa3 +Block 0000 [ 96]: b3064864a0abf7a0 +Block 0000 [ 97]: e8fbd585908f564a +Block 0000 [ 98]: 5dadf05c04c6e76f +Block 0000 [ 99]: ad0e98068b35bf8b +Block 0000 [100]: e3256c1b7cd320ff +Block 0000 [101]: 8e7673b95838317e +Block 0000 [102]: d8e8331b4fd1f648 +Block 0000 [103]: 2bb6651719c89e56 +Block 0000 [104]: 6110bfa919d8c5ef +Block 0000 [105]: aad86681411c2ac7 +Block 0000 [106]: afbd14609f1d924b +Block 0000 [107]: d568c327bd96e968 +Block 0000 [108]: 8d810ddc42ede14c +Block 0000 [109]: a70d18be3ce495e6 +Block 0000 [110]: 1e38926e13748064 +Block 0000 [111]: ee37b89b52fc73fd +Block 0000 [112]: 96157ab6dc1e04dc +Block 0000 [113]: bb0a05f04288cc31 +Block 0000 [114]: 7134bfe5ce3962a3 +Block 0000 [115]: b25e1793c8803d91 +Block 0000 [116]: 2dffadb73a9c092a +Block 0000 [117]: 934b6dccfa3f7461 +Block 0000 [118]: 509ac15213826b45 +Block 0000 [119]: 21bb0bd5cc719fe5 +Block 0000 [120]: 150184fdbddd607f +Block 0000 [121]: 7d177f7f6b568b47 +Block 0000 [122]: cf69c346b4077ed5 +Block 0000 [123]: 1646908bd3cfd3a7 +Block 0000 [124]: d3198f31d64ab429 +Block 0000 [125]: ea0fd99cc5edcf8f +Block 0000 [126]: b008b065b82a72bc +Block 0000 [127]: 505fd35d1e4ccef7 +Block 0001 [ 0]: e23fe02dfece0288 +Block 0001 [ 1]: 7a7047500e615340 +Block 0001 [ 2]: afd8a4beaf7eecbe +Block 0001 [ 3]: 3853b52881b4d557 +Block 0001 [ 4]: 3a0726b2611e576c +Block 0001 [ 5]: 164de228aef03411 +Block 0001 [ 6]: e0ef04f35c1b90bf +Block 0001 [ 7]: 8a24c8c277606abb +Block 0001 [ 8]: 15a9a3833a46cd66 +Block 0001 [ 9]: 3479e3154cbd781b +Block 0001 [ 10]: cee2576a3ea0a445 +Block 0001 [ 11]: 71c742512ce7dfe7 +Block 0001 [ 12]: 374bb75c47786552 +Block 0001 [ 13]: 630b3b5d99fcd3e7 +Block 0001 [ 14]: 846e9694385dcb34 +Block 0001 [ 15]: 5be2868061e80aa0 +Block 0001 [ 16]: 0e16b6de661c36fc +Block 0001 [ 17]: 0e0d73e8f72a85cf +Block 0001 [ 18]: 662e527420484106 +Block 0001 [ 19]: fcbe0420b0c32a2f +Block 0001 [ 20]: 89e98ddc25ef2d06 +Block 0001 [ 21]: 5caa597bcb7ba3e7 +Block 0001 [ 22]: 8e03cf25508e979f +Block 0001 [ 23]: 363bd2a52521a8f2 +Block 0001 [ 24]: c1f3534d80f3aeeb +Block 0001 [ 25]: b3eb770ff7cb18db +Block 0001 [ 26]: 2c7aa5f0da8ac2e7 +Block 0001 [ 27]: 15e9bdb364864ddc +Block 0001 [ 28]: 255c874b1c6a9018 +Block 0001 [ 29]: b5ba03b749263dbf +Block 0001 [ 30]: e2ed6f93e61f5697 +Block 0001 [ 31]: a78394dcc822edab +Block 0001 [ 32]: c08c2ac9e1443d09 +Block 0001 [ 33]: b88b9991ebef2207 +Block 0001 [ 34]: fcd15d6715225a8f +Block 0001 [ 35]: a9133bf21b326cd9 +Block 0001 [ 36]: eb9e37c6a7389f4a +Block 0001 [ 37]: e512d3c8e4461442 +Block 0001 [ 38]: 43ea6edbdfee43da +Block 0001 [ 39]: 7732be0a715b4fe1 +Block 0001 [ 40]: b7f665f9497beedf +Block 0001 [ 41]: dec2cc2b22055132 +Block 0001 [ 42]: c453e83a35577b22 +Block 0001 [ 43]: 0bec3a763bd104fe +Block 0001 [ 44]: 8b3bae725e3cd134 +Block 0001 [ 45]: ee59014b976308ab +Block 0001 [ 46]: f87ad095fb5c97cf +Block 0001 [ 47]: 0ae0eaceb2778e2f +Block 0001 [ 48]: 723bd2b7767936c5 +Block 0001 [ 49]: f49d4c733715ef4e +Block 0001 [ 50]: d3c7f66d314946ea +Block 0001 [ 51]: b4d09df6006617bd +Block 0001 [ 52]: 7cacc786cae67a7f +Block 0001 [ 53]: cb7c92aa113c6456 +Block 0001 [ 54]: 00beca54428b7dfc +Block 0001 [ 55]: 411b91c93166751e +Block 0001 [ 56]: db3db21fad2ef261 +Block 0001 [ 57]: 4c7fdda23adee093 +Block 0001 [ 58]: 9aa9d0309fe56528 +Block 0001 [ 59]: 7ac95d0e833e8229 +Block 0001 [ 60]: b866b5cac808e923 +Block 0001 [ 61]: ec33c77566bd6359 +Block 0001 [ 62]: b2eebb43d735ee1d +Block 0001 [ 63]: 118649041c59e2a7 +Block 0001 [ 64]: af20206ba5a1d752 +Block 0001 [ 65]: ba2ffe7788aae99a +Block 0001 [ 66]: a7b7298d3894db9f +Block 0001 [ 67]: 672ca76708483292 +Block 0001 [ 68]: aff4782c897c1a19 +Block 0001 [ 69]: 538d023ad96755df +Block 0001 [ 70]: 7ed7c497cab08355 +Block 0001 [ 71]: 884b34285863cb15 +Block 0001 [ 72]: ad1074a607136bf4 +Block 0001 [ 73]: 2ce505de99c23839 +Block 0001 [ 74]: b5604fab94c774ce +Block 0001 [ 75]: 109c4bd7c942078d +Block 0001 [ 76]: 3162ee468266a0bb +Block 0001 [ 77]: 6c3fc918ea50144b +Block 0001 [ 78]: 78f48ec6e1935763 +Block 0001 [ 79]: 40d6723006b90439 +Block 0001 [ 80]: 949a1c0ada5735dc +Block 0001 [ 81]: dc267afd286782f0 +Block 0001 [ 82]: 8804bd6d72a09d6d +Block 0001 [ 83]: bf39223e7a69770f +Block 0001 [ 84]: eb9d92cf56dff8d4 +Block 0001 [ 85]: 9ba7e9818f3e2b83 +Block 0001 [ 86]: accc832478308d87 +Block 0001 [ 87]: 71426e5757b74cf5 +Block 0001 [ 88]: 86a2ce89cd883f48 +Block 0001 [ 89]: d51f5d0a02790eb0 +Block 0001 [ 90]: 69e80c29297bedba +Block 0001 [ 91]: b3ec930fd404c55f +Block 0001 [ 92]: f24a1b23b7fedd1b +Block 0001 [ 93]: df5eccd58d6e4d6d +Block 0001 [ 94]: df40d0c69d78d9e8 +Block 0001 [ 95]: 3f8deaad8715ac9e +Block 0001 [ 96]: 1420be79644c1361 +Block 0001 [ 97]: 7e419bbb9bb9c864 +Block 0001 [ 98]: 013bf5d9ff74a285 +Block 0001 [ 99]: 581cd3a635a82691 +Block 0001 [100]: 199060c3ec5749a7 +Block 0001 [101]: d2fb1f9a243f098e +Block 0001 [102]: 37e1d71ee09bf2ea +Block 0001 [103]: 8c6955f9c37d373d +Block 0001 [104]: 0198d6d56e79086c +Block 0001 [105]: 129bfc2713ea2f9b +Block 0001 [106]: 8a967e53ac7c5692 +Block 0001 [107]: 75c7da7d357d5081 +Block 0001 [108]: 2dd6000b05d59968 +Block 0001 [109]: 06d0f5a683d1d03d +Block 0001 [110]: ebe5918726260f2f +Block 0001 [111]: 6930dac6aed65ff2 +Block 0001 [112]: e6df29645dd40e27 +Block 0001 [113]: 7b194cdaa168bcbe +Block 0001 [114]: 4a6cf8603ba55ee7 +Block 0001 [115]: 810f83dfc5dba615 +Block 0001 [116]: 07309feafb67199a +Block 0001 [117]: f6935d2b7c348c42 +Block 0001 [118]: 03c9c420a3e2eb7e +Block 0001 [119]: 8fe083617e5113eb +Block 0001 [120]: 28646389371863dc +Block 0001 [121]: 9d2d5c7776640f98 +Block 0001 [122]: 50494930c9be4284 +Block 0001 [123]: ef8058bf7ff7bde1 +Block 0001 [124]: be1b94279c25e46c +Block 0001 [125]: dcf4a14db25c1256 +Block 0001 [126]: ca8ef78ff53a0810 +Block 0001 [127]: 60f3728e2974e872 +Block 0002 [ 0]: 39369bd574bae1e2 +Block 0002 [ 1]: 03c14c225a42f602 +Block 0002 [ 2]: 59451ab02d6097c4 +Block 0002 [ 3]: 6201036724302781 +Block 0002 [ 4]: 7df52ebbc54327fb +Block 0002 [ 5]: 02cfe5c5677df54c +Block 0002 [ 6]: 383b7ca84b2fe67b +Block 0002 [ 7]: 935af47cb7e61e8e +Block 0002 [ 8]: 2986c34f785bf3ce +Block 0002 [ 9]: 7fba12b74db5a3ea +Block 0002 [ 10]: 0ff431215ac1f459 +Block 0002 [ 11]: 43a4cb7337fcd315 +Block 0002 [ 12]: 814d8fe45d6cecae +Block 0002 [ 13]: 7b902f70ed347f57 +Block 0002 [ 14]: 29fe23d166395653 +Block 0002 [ 15]: eef4afe6df3f28f3 +Block 0002 [ 16]: 127e45c900e2c848 +Block 0002 [ 17]: 3306010e528593e7 +Block 0002 [ 18]: b8c02ac97a845931 +Block 0002 [ 19]: 46b64e9d8859791c +Block 0002 [ 20]: 7c4593f720b8abfc +Block 0002 [ 21]: e671739a7fa910c8 +Block 0002 [ 22]: 3c0ca2e596d4c5d7 +Block 0002 [ 23]: e5cc2e4ca17ee077 +Block 0002 [ 24]: 701b7a9777c5b49a +Block 0002 [ 25]: 9131b8f9e8d63e08 +Block 0002 [ 26]: 2b7337f76bc9eacd +Block 0002 [ 27]: 2239c65e34ca42fb +Block 0002 [ 28]: 745f147facd4c359 +Block 0002 [ 29]: 82719af98b72fd9d +Block 0002 [ 30]: cd2848b4284fde78 +Block 0002 [ 31]: ca255cad0f479018 +Block 0002 [ 32]: db7ec3db4fa79052 +Block 0002 [ 33]: 2a3a0842efecbdd6 +Block 0002 [ 34]: e6f8d36519338fa6 +Block 0002 [ 35]: 54bb7617ed5b435e +Block 0002 [ 36]: 3b2807d9b536ad4a +Block 0002 [ 37]: fc84c316852ec1fa +Block 0002 [ 38]: 26b77f4eb9432021 +Block 0002 [ 39]: d789c86e89425b09 +Block 0002 [ 40]: f8be2d5484b0516a +Block 0002 [ 41]: 2bfeda2bb3b7e808 +Block 0002 [ 42]: d3bafc5d0646a46f +Block 0002 [ 43]: 3d0952ab4da0d97d +Block 0002 [ 44]: 7464b8d709366c81 +Block 0002 [ 45]: 36d1b42cde123306 +Block 0002 [ 46]: 8004e517e8316a81 +Block 0002 [ 47]: 7c90747d7b078051 +Block 0002 [ 48]: 199d6dfc53aa8200 +Block 0002 [ 49]: 259280428b473b5a +Block 0002 [ 50]: b8f07b7ef895a5e0 +Block 0002 [ 51]: e1d51665927f76bd +Block 0002 [ 52]: a8eb08f4e73b8cdd +Block 0002 [ 53]: ee82681cc6052db9 +Block 0002 [ 54]: e5826081a53a17f6 +Block 0002 [ 55]: ff40c3b7dd042602 +Block 0002 [ 56]: 57dd3f387a60b728 +Block 0002 [ 57]: 807a505c9f389331 +Block 0002 [ 58]: 67f2d7a33e606167 +Block 0002 [ 59]: 2d45965aa7e282f9 +Block 0002 [ 60]: 5624e92fb2dc4f4b +Block 0002 [ 61]: a1538a72c67d49b8 +Block 0002 [ 62]: a69b48d6b0e95ba7 +Block 0002 [ 63]: 4da8014e6a26f616 +Block 0002 [ 64]: 5d6b7d6ab6ebc703 +Block 0002 [ 65]: aeb74a3c5d7f4e27 +Block 0002 [ 66]: e67f12f71042997d +Block 0002 [ 67]: 8b4e258db674c59b +Block 0002 [ 68]: 095994a8f629afa1 +Block 0002 [ 69]: cefe061777f2b9ba +Block 0002 [ 70]: 3111c90d014dfd20 +Block 0002 [ 71]: 9326129a0010bd4c +Block 0002 [ 72]: ac17c28df5603581 +Block 0002 [ 73]: ad9e792b2600856b +Block 0002 [ 74]: 7b52afe6653f1cbc +Block 0002 [ 75]: 4a3e1516bfaf4925 +Block 0002 [ 76]: 8a082f41cca1c7de +Block 0002 [ 77]: 5e078a2d9634808e +Block 0002 [ 78]: 24951ed4ec5dea22 +Block 0002 [ 79]: 3091f28343d7c8b3 +Block 0002 [ 80]: dd18c8476dee4378 +Block 0002 [ 81]: fb421e171aac32be +Block 0002 [ 82]: 76bfb4022d16cfdb +Block 0002 [ 83]: 8f11eff2545455b4 +Block 0002 [ 84]: 8a2caf8661e95761 +Block 0002 [ 85]: 978e70edf1fafd80 +Block 0002 [ 86]: db4c587ad8767542 +Block 0002 [ 87]: 048172243ee062ab +Block 0002 [ 88]: ad90fc7b6b091293 +Block 0002 [ 89]: 2cc72efbd1e1fc8a +Block 0002 [ 90]: 639149af926c30ee +Block 0002 [ 91]: 7f942b868a1e86c5 +Block 0002 [ 92]: 8dd06eb5391596bc +Block 0002 [ 93]: e06cd833c21c3452 +Block 0002 [ 94]: f6f1f3faaa49b90c +Block 0002 [ 95]: b69c11f167588766 +Block 0002 [ 96]: 33eba8a816984e87 +Block 0002 [ 97]: 75c80eebb391fd0d +Block 0002 [ 98]: f9fdf867aa40219f +Block 0002 [ 99]: 73d3352396231a1e +Block 0002 [100]: 1c4bacf442c7da1e +Block 0002 [101]: b6b7fe2213ed030c +Block 0002 [102]: 8d0c685cb7c66ed9 +Block 0002 [103]: 1a96ac2110dd72bb +Block 0002 [104]: 244427570cb404eb +Block 0002 [105]: 8ae727d6c5d3518d +Block 0002 [106]: 97b104542790620e +Block 0002 [107]: 622dfdd36156eeca +Block 0002 [108]: a681e9d1ddda8db1 +Block 0002 [109]: f83107b93461b7f7 +Block 0002 [110]: cac3d7435c8b7450 +Block 0002 [111]: 876b185293c2ca77 +Block 0002 [112]: 2e1062849912cca8 +Block 0002 [113]: 467cf6b5ac5de0d5 +Block 0002 [114]: 6f44c747864760d5 +Block 0002 [115]: 7c686cf9c11360c3 +Block 0002 [116]: 3ed0e4a95c138496 +Block 0002 [117]: 6993c2bc63d9ac3d +Block 0002 [118]: 0fb471c25e0c41f8 +Block 0002 [119]: b7b0a9f7f9f49c2f +Block 0002 [120]: b8f3f293846684d6 +Block 0002 [121]: d5e6beb9078d4fd5 +Block 0002 [122]: dd647833684bd281 +Block 0002 [123]: 9978cc549f5c517e +Block 0002 [124]: d2c6b09d7235366d +Block 0002 [125]: 42dd43d586384fb5 +Block 0002 [126]: 1e54c27c01e78a0a +Block 0002 [127]: 08a37dbd2e2c584c +Block 0003 [ 0]: f654555f71650eb5 +Block 0003 [ 1]: 3311cb058032eb5e +Block 0003 [ 2]: fc42c737ea9c6945 +Block 0003 [ 3]: e21292d9164f2490 +Block 0003 [ 4]: 27d5b895386b5566 +Block 0003 [ 5]: 33f63d927b58fc26 +Block 0003 [ 6]: 32174cdb2bdc697a +Block 0003 [ 7]: 1631ec0d811e1d44 +Block 0003 [ 8]: 5ff386aeb5b7bbc9 +Block 0003 [ 9]: 286d219ba13605b2 +Block 0003 [ 10]: 0eafeddd1a0e0ef1 +Block 0003 [ 11]: 2ba6e0082d1218ae +Block 0003 [ 12]: 6956be8e800c160c +Block 0003 [ 13]: fded8de7903d4593 +Block 0003 [ 14]: edcac78e6073c155 +Block 0003 [ 15]: 273bc8ae910e209f +Block 0003 [ 16]: 4936f51d1793db47 +Block 0003 [ 17]: abfd6cef979f9dc7 +Block 0003 [ 18]: 85f80f74df948f05 +Block 0003 [ 19]: facb8f407834cdbf +Block 0003 [ 20]: f17ef84c91fefb2e +Block 0003 [ 21]: 0bc71a9ff8563aa5 +Block 0003 [ 22]: 5f00784cdffd8521 +Block 0003 [ 23]: c3efad6fcbbc8a06 +Block 0003 [ 24]: 9490284fad1de8b8 +Block 0003 [ 25]: 14d654aedea41317 +Block 0003 [ 26]: c6d4efd8354e0949 +Block 0003 [ 27]: b9d56d742808a1c6 +Block 0003 [ 28]: 93c4b288ef9737e2 +Block 0003 [ 29]: da912a5517927945 +Block 0003 [ 30]: 153b0fd5456cea9f +Block 0003 [ 31]: 88ff1e555463a130 +Block 0003 [ 32]: 29a555f4cd5b9da0 +Block 0003 [ 33]: 14c51a88b06a0773 +Block 0003 [ 34]: 127711470296f408 +Block 0003 [ 35]: b77c859a87ddd4b2 +Block 0003 [ 36]: 55989192f96f7c3d +Block 0003 [ 37]: b8cd6fa583cf4447 +Block 0003 [ 38]: 30e4137e4fe0b6a3 +Block 0003 [ 39]: d193e8dcb686123f +Block 0003 [ 40]: ae11628e6951ccc9 +Block 0003 [ 41]: 87c07ce234d715ed +Block 0003 [ 42]: 48512af01ece52c6 +Block 0003 [ 43]: ac5bd0db212ea1c2 +Block 0003 [ 44]: fc27495856d80c64 +Block 0003 [ 45]: d52ad551af985ed5 +Block 0003 [ 46]: 0f61ba492b8ea576 +Block 0003 [ 47]: 16f7d80e585074f7 +Block 0003 [ 48]: 1168c339be2be781 +Block 0003 [ 49]: 5491fea8c46927b3 +Block 0003 [ 50]: aa61457274175666 +Block 0003 [ 51]: 3a4cf2ecfa768b01 +Block 0003 [ 52]: 0b02dfde40ed6dd9 +Block 0003 [ 53]: 3aef92409270803d +Block 0003 [ 54]: 7d9b3b46d5f370b3 +Block 0003 [ 55]: 8bfe8cea00744a99 +Block 0003 [ 56]: c3ddc5c8c41dfb8c +Block 0003 [ 57]: 65d9708ed44e7df6 +Block 0003 [ 58]: 6ffdcee0a3f57453 +Block 0003 [ 59]: a8c006aca6c7f351 +Block 0003 [ 60]: 9fcb17f2691e1b55 +Block 0003 [ 61]: 0d090bf265f19bc5 +Block 0003 [ 62]: 21ad8443d491f5d1 +Block 0003 [ 63]: 916906b4f23224a3 +Block 0003 [ 64]: 10326b632749767c +Block 0003 [ 65]: f98c66a67c554352 +Block 0003 [ 66]: 9d1db4e901aec7a7 +Block 0003 [ 67]: f4a9961aba0cce0b +Block 0003 [ 68]: 90838c0c8fbee672 +Block 0003 [ 69]: a629e641159afbce +Block 0003 [ 70]: 0243ef1605b73782 +Block 0003 [ 71]: f4da62fa164f1744 +Block 0003 [ 72]: ba1ab52f4c558313 +Block 0003 [ 73]: 3382bbdd5f4d4288 +Block 0003 [ 74]: c87f9ec6d052b361 +Block 0003 [ 75]: 8c2de6ea01c4b855 +Block 0003 [ 76]: aef8c1c0bc852867 +Block 0003 [ 77]: a15792470e7625f7 +Block 0003 [ 78]: eb1499c0c6cb078b +Block 0003 [ 79]: 798694ae75cdcb8b +Block 0003 [ 80]: 93fffae472430115 +Block 0003 [ 81]: 282640d3575746c7 +Block 0003 [ 82]: ae00e8190db94ff8 +Block 0003 [ 83]: 947bc0354b75208e +Block 0003 [ 84]: ea8105cefa4cfcc4 +Block 0003 [ 85]: afe4ec955e6566d2 +Block 0003 [ 86]: b981cf985be10ec2 +Block 0003 [ 87]: 49434b094d1ae22b +Block 0003 [ 88]: 556e09e96107d1af +Block 0003 [ 89]: f62123222b386d5e +Block 0003 [ 90]: 6d178b5dd97aaf24 +Block 0003 [ 91]: 692bc5ab5b4ae925 +Block 0003 [ 92]: 3eebac8e2943d15f +Block 0003 [ 93]: d4c6171da55b6eac +Block 0003 [ 94]: dc546cd17f8219b7 +Block 0003 [ 95]: b933681a382fee47 +Block 0003 [ 96]: 4db5fa3ce780954d +Block 0003 [ 97]: 15229c91cb28bd08 +Block 0003 [ 98]: f740ddedafb71fc7 +Block 0003 [ 99]: d913d87686827178 +Block 0003 [100]: 563ab13b43e54c66 +Block 0003 [101]: f6ff4f6d55021cbf +Block 0003 [102]: 6d98731ba4459fe4 +Block 0003 [103]: fbef87bfb8f3b748 +Block 0003 [104]: 266b4c4a60074b3e +Block 0003 [105]: 0350f01dae1431b2 +Block 0003 [106]: 13a6a89350b1ee9f +Block 0003 [107]: 0326c88be0d895ea +Block 0003 [108]: 4ebefeafac42a5f4 +Block 0003 [109]: 71892e75bdc60352 +Block 0003 [110]: b7d3b5ecb45e0c8d +Block 0003 [111]: 860a73b1dd642684 +Block 0003 [112]: fd84fba35e10a99d +Block 0003 [113]: 7a8410820891078b +Block 0003 [114]: 86425f3ff9294b51 +Block 0003 [115]: d5fb33f90967ce7f +Block 0003 [116]: 53f65da243c0178d +Block 0003 [117]: 62029d3cce2945c2 +Block 0003 [118]: 4b1e0f57d816419f +Block 0003 [119]: 51eb3849aaffbaac +Block 0003 [120]: e05d248edb287da8 +Block 0003 [121]: 9615afc8dbd4ff70 +Block 0003 [122]: ff3e6685c8335e56 +Block 0003 [123]: 4394ae3741da402d +Block 0003 [124]: 62b8900ae6d45ec7 +Block 0003 [125]: 1e0e3b150ac1b8e6 +Block 0003 [126]: 46406a5dbdb3f471 +Block 0003 [127]: 4f2f51287c0533c5 +Block 0004 [ 0]: 6db3c512b201002a +Block 0004 [ 1]: a4893e550c6e847d +Block 0004 [ 2]: d738c01c6a4163cf +Block 0004 [ 3]: 3964a940c68c7672 +Block 0004 [ 4]: 008607d363313b1e +Block 0004 [ 5]: 09ac4c012f8a9f73 +Block 0004 [ 6]: 30407682ac696ad5 +Block 0004 [ 7]: d11878678fd15c5e +Block 0004 [ 8]: 2c97e49a7c535568 +Block 0004 [ 9]: c657dc0e64f3bada +Block 0004 [ 10]: 71d6d5d67c0e69c0 +Block 0004 [ 11]: 113f757922c12d80 +Block 0004 [ 12]: dff40f405affada0 +Block 0004 [ 13]: 7c770d074afdccbe +Block 0004 [ 14]: 02178564a28476ca +Block 0004 [ 15]: db9f8e2d04cb05d0 +Block 0004 [ 16]: 28dcb359ce250e08 +Block 0004 [ 17]: 1a551496399d2942 +Block 0004 [ 18]: e88e14ab890ff5ef +Block 0004 [ 19]: 488747a7703b9e7e +Block 0004 [ 20]: c31d161b0cc89570 +Block 0004 [ 21]: 4565c4b429ba6e1b +Block 0004 [ 22]: 0dfc72c087e1e08d +Block 0004 [ 23]: c92bf55e556097f8 +Block 0004 [ 24]: c4e7fe3a2a6e24ae +Block 0004 [ 25]: 581c2a385043aa51 +Block 0004 [ 26]: 35aef500b5f3eeae +Block 0004 [ 27]: 7f0e1d27c86cd926 +Block 0004 [ 28]: d557943ed1408c41 +Block 0004 [ 29]: 4af1b776a3298be5 +Block 0004 [ 30]: 8fd70fb3204a5114 +Block 0004 [ 31]: cd384f9fe3618f69 +Block 0004 [ 32]: 7c1c3fda22ce27c7 +Block 0004 [ 33]: dafd9ca79b351f86 +Block 0004 [ 34]: d44cb4fe10e44d5a +Block 0004 [ 35]: e9b2864c088d109e +Block 0004 [ 36]: 48e804a44fcc8a52 +Block 0004 [ 37]: daf3c5093302dc6b +Block 0004 [ 38]: a5be11b060ed5242 +Block 0004 [ 39]: e9140882ceeca69e +Block 0004 [ 40]: cc52836dc00f5bc7 +Block 0004 [ 41]: a60c4dd162e9ff75 +Block 0004 [ 42]: 48583d5cc8289c3e +Block 0004 [ 43]: 7f054592fdc38b14 +Block 0004 [ 44]: 132a9aa37870e575 +Block 0004 [ 45]: 73190cf53e288776 +Block 0004 [ 46]: ce8fde7a06993a1c +Block 0004 [ 47]: ed6199768f24b208 +Block 0004 [ 48]: 3ce97da1f9764400 +Block 0004 [ 49]: 23ecfa6cada7dd08 +Block 0004 [ 50]: 742ac86a22594f47 +Block 0004 [ 51]: 97676b7e0ae47bfa +Block 0004 [ 52]: ca78eecf87b2c0ef +Block 0004 [ 53]: dbff89c5a1ebad88 +Block 0004 [ 54]: 5533435d722aa535 +Block 0004 [ 55]: d51f7db2b23c1fcc +Block 0004 [ 56]: 65945d416121db78 +Block 0004 [ 57]: 2dc4f63b23ade57c +Block 0004 [ 58]: 22918d3b5b563b9d +Block 0004 [ 59]: 586ecd2e7df54ab2 +Block 0004 [ 60]: 1ac158a954866416 +Block 0004 [ 61]: 58d7ffbda6c857ff +Block 0004 [ 62]: 05a5b1765440b5d4 +Block 0004 [ 63]: f5593d391d483ae6 +Block 0004 [ 64]: b63afd052e7947cb +Block 0004 [ 65]: e9f1f92af8a2691d +Block 0004 [ 66]: 60fc54dfe8069a35 +Block 0004 [ 67]: fd2d4ccef3df5227 +Block 0004 [ 68]: 865b629d66d54066 +Block 0004 [ 69]: 062e9dab817e9e93 +Block 0004 [ 70]: 01671e76195217b0 +Block 0004 [ 71]: db554319cc55bbc6 +Block 0004 [ 72]: 33767aa620c6b9b4 +Block 0004 [ 73]: eb3070747ce8cd7a +Block 0004 [ 74]: 04a8f94c1f278eb8 +Block 0004 [ 75]: e37bd2e6fd74ac2d +Block 0004 [ 76]: 51954636db769391 +Block 0004 [ 77]: 62c924aef3d3a00b +Block 0004 [ 78]: 6be2ac1f4372e6bd +Block 0004 [ 79]: 6da5ea764aca7b86 +Block 0004 [ 80]: 7e98e9bb49fd5555 +Block 0004 [ 81]: 240a6bbea9499bf4 +Block 0004 [ 82]: ddae77704bd95091 +Block 0004 [ 83]: f20301a1e60a6388 +Block 0004 [ 84]: 843a97d690d125be +Block 0004 [ 85]: 0b22b9279728e0e4 +Block 0004 [ 86]: a68682bfef9cab88 +Block 0004 [ 87]: 54c152c5f6aa3347 +Block 0004 [ 88]: 3808ff4b61eb729e +Block 0004 [ 89]: eefb42a45db2b6df +Block 0004 [ 90]: 1057807d974ab8ba +Block 0004 [ 91]: f8b3a10c3c4ff30c +Block 0004 [ 92]: 50a10480d2c50642 +Block 0004 [ 93]: 9346af5b676d53d8 +Block 0004 [ 94]: fb4f3d3d2071a72c +Block 0004 [ 95]: 34ba748255e95958 +Block 0004 [ 96]: 1d55802ac5c6fbdd +Block 0004 [ 97]: 6e9bf639f96a71f7 +Block 0004 [ 98]: 2865022a7dca1fb3 +Block 0004 [ 99]: 051f576aa5462e73 +Block 0004 [100]: d7d06ece195f2115 +Block 0004 [101]: d198cfcdb221649a +Block 0004 [102]: d29774868386b41a +Block 0004 [103]: ed82361d873ab22c +Block 0004 [104]: a183f13bbdb3604d +Block 0004 [105]: 0d090eafafb9360d +Block 0004 [106]: c332ad53dca32795 +Block 0004 [107]: fca986dd4c58e868 +Block 0004 [108]: 7b049c4605c543ae +Block 0004 [109]: 59001a287ee5eb5a +Block 0004 [110]: ec48fff4d2bf19bc +Block 0004 [111]: 1ffbfa763d246fb2 +Block 0004 [112]: 77d442d05e756c41 +Block 0004 [113]: 7303708414279f9f +Block 0004 [114]: 1af6d103ba844721 +Block 0004 [115]: bf3af22c312f879f +Block 0004 [116]: 1974673bd6eace85 +Block 0004 [117]: 3c09fe80692acf97 +Block 0004 [118]: 69b5ceffe923242e +Block 0004 [119]: 5250d18f4e18d38f +Block 0004 [120]: 775d04feeecac653 +Block 0004 [121]: 3158b3eebf7cbfa1 +Block 0004 [122]: c9eb36370d6b31fa +Block 0004 [123]: 1c8d0a60062f4870 +Block 0004 [124]: 0536d25cf8ac9a2d +Block 0004 [125]: 2bbdd54340de4566 +Block 0004 [126]: 83a3bb8032d4444e +Block 0004 [127]: 49472858871210ef +Block 0005 [ 0]: b4676f8440d3dd72 +Block 0005 [ 1]: 543dc9478bcae8a8 +Block 0005 [ 2]: 0a1b2608dad7d093 +Block 0005 [ 3]: 158d884310bf64b9 +Block 0005 [ 4]: 0c39f463ae7e1f98 +Block 0005 [ 5]: 0f484a93597079e2 +Block 0005 [ 6]: 22008b41a1cae988 +Block 0005 [ 7]: 39fb86f28f9a72a9 +Block 0005 [ 8]: 0580218b147847ec +Block 0005 [ 9]: 45050f209731847b +Block 0005 [ 10]: a74df9c792a856ad +Block 0005 [ 11]: 59f9d055bf19b4b4 +Block 0005 [ 12]: 580d97d3550b9001 +Block 0005 [ 13]: 99394acf81072667 +Block 0005 [ 14]: 93bbd5b7531eada8 +Block 0005 [ 15]: 1fecebd996a84649 +Block 0005 [ 16]: 6a17fbcdbcde10f9 +Block 0005 [ 17]: 5276ce784b77e366 +Block 0005 [ 18]: 8a44853a1744c6c0 +Block 0005 [ 19]: 4760a36dfe24f187 +Block 0005 [ 20]: 7820ef1c716bc110 +Block 0005 [ 21]: 6ef7d4f420895751 +Block 0005 [ 22]: 605216e6d4a25a6a +Block 0005 [ 23]: 4b5acecae3fc8137 +Block 0005 [ 24]: 8df97b41aa216f3e +Block 0005 [ 25]: dcf8b51afa021170 +Block 0005 [ 26]: 72f57e5d1198747e +Block 0005 [ 27]: 7ab38114f0c3bfa0 +Block 0005 [ 28]: f515e2ba68a87769 +Block 0005 [ 29]: f422c9c76c9eb8cb +Block 0005 [ 30]: 9c9891e7d3c223d4 +Block 0005 [ 31]: ce6f99e5c48a2663 +Block 0005 [ 32]: d29a3e3cd369dc81 +Block 0005 [ 33]: 40d164ddb9622371 +Block 0005 [ 34]: acb980475786ab78 +Block 0005 [ 35]: f01def3e29ade749 +Block 0005 [ 36]: 85c0aca46da00807 +Block 0005 [ 37]: 6d6d6499dff5bc9b +Block 0005 [ 38]: f1a27605d1fe54ab +Block 0005 [ 39]: 592b2bc9bed0c745 +Block 0005 [ 40]: b9b8f3626ae6869f +Block 0005 [ 41]: 928331757d8b0ad0 +Block 0005 [ 42]: 0122bca4dd95e8fa +Block 0005 [ 43]: 25deae32523e74d9 +Block 0005 [ 44]: f8504d6710fa925b +Block 0005 [ 45]: 9d1b3bfa72ae59c5 +Block 0005 [ 46]: 3bba17b4dd2869d1 +Block 0005 [ 47]: e37edf9156e83204 +Block 0005 [ 48]: 104bd93e079e7426 +Block 0005 [ 49]: 82ccac92ea08c463 +Block 0005 [ 50]: 4f9fbf43f625dff8 +Block 0005 [ 51]: ef452ce3634d96d6 +Block 0005 [ 52]: 6ca846373c25297b +Block 0005 [ 53]: 20f669afc7c5af53 +Block 0005 [ 54]: 3cb2ad71a1c3a85b +Block 0005 [ 55]: 8e62f61109c2a232 +Block 0005 [ 56]: 944e5054bdca864e +Block 0005 [ 57]: 449c32f8480c83eb +Block 0005 [ 58]: e72123d7320f8a5c +Block 0005 [ 59]: ea19e7d53fc6fdc8 +Block 0005 [ 60]: 7a0bce3cc157ed97 +Block 0005 [ 61]: b931c70ee2259840 +Block 0005 [ 62]: bb95f4ea8eb1f929 +Block 0005 [ 63]: baaff204920aec3b +Block 0005 [ 64]: d53b7d052d5fe9eb +Block 0005 [ 65]: 846fa7db54e2b603 +Block 0005 [ 66]: d58ecfb72f270009 +Block 0005 [ 67]: 2e2e2e0ed43881b1 +Block 0005 [ 68]: 37e5fa1b47043b18 +Block 0005 [ 69]: 2d2fc7ac1c4e27b4 +Block 0005 [ 70]: 41bdf2f0b4343a48 +Block 0005 [ 71]: d6c50cf3cbd28f69 +Block 0005 [ 72]: 4f15d88744e935a3 +Block 0005 [ 73]: d2d070023d316db8 +Block 0005 [ 74]: 65d9ddede0875a36 +Block 0005 [ 75]: a85314d0b5bbb492 +Block 0005 [ 76]: 9621385a2f5571ba +Block 0005 [ 77]: d8b64682e9e633e3 +Block 0005 [ 78]: 34625b7ac1add871 +Block 0005 [ 79]: 0bd132a3ff51918b +Block 0005 [ 80]: 0bb1a7820a7db02f +Block 0005 [ 81]: 5416bc0ac394fe0b +Block 0005 [ 82]: e4a245f3f2ef7307 +Block 0005 [ 83]: f32a9098d6413d91 +Block 0005 [ 84]: be5f1d656b05bb45 +Block 0005 [ 85]: cb5d82099937e4ef +Block 0005 [ 86]: 6ccb388fa51e044f +Block 0005 [ 87]: fb325dce97a5669d +Block 0005 [ 88]: a997c10efa786b25 +Block 0005 [ 89]: 69efe80c86c535aa +Block 0005 [ 90]: 62acfc9e2e0cdc71 +Block 0005 [ 91]: 5ca162ddc15667a2 +Block 0005 [ 92]: 6bf05b3e8df7591b +Block 0005 [ 93]: f2cc19d04fc4678f +Block 0005 [ 94]: cc85393eb2f131c6 +Block 0005 [ 95]: 4bd2459fa6ac74dc +Block 0005 [ 96]: 794aa76fcece2af1 +Block 0005 [ 97]: a66e09232668e617 +Block 0005 [ 98]: 33e95cf3618e4e63 +Block 0005 [ 99]: ebf0af1432a8d2d4 +Block 0005 [100]: 3bd654a90acf89b5 +Block 0005 [101]: db3b1e828e36e540 +Block 0005 [102]: c2edec0973b1f22b +Block 0005 [103]: 29e916a5983dcf50 +Block 0005 [104]: 679e56d49d4fb9ad +Block 0005 [105]: 5339d09cda2b4cc0 +Block 0005 [106]: df3f7016c2fc771e +Block 0005 [107]: 94af855801dd680f +Block 0005 [108]: 38f0e2ee03acce8b +Block 0005 [109]: ca815a0c41218568 +Block 0005 [110]: ae44de789a0125e0 +Block 0005 [111]: b9cf3947f5aa75f9 +Block 0005 [112]: ef601c65b86c2a39 +Block 0005 [113]: ef17112febe7e477 +Block 0005 [114]: 44974a2a50bd092f +Block 0005 [115]: 0c30352ce2e2284b +Block 0005 [116]: 120566988befae10 +Block 0005 [117]: 396d4337fbe810d9 +Block 0005 [118]: 772684b56b646145 +Block 0005 [119]: 771e20d7bc7ae85c +Block 0005 [120]: b3d55b22de13f793 +Block 0005 [121]: 8f6403353849ee33 +Block 0005 [122]: 90eae65b5bc8e530 +Block 0005 [123]: aff5d5566e449a9b +Block 0005 [124]: bf7f8fba7ae06be1 +Block 0005 [125]: 293aec5b82c5fdbf +Block 0005 [126]: 440e20ef46f7ecbf +Block 0005 [127]: d662bde9b1cc1f76 +Block 0006 [ 0]: 14b82b49b0e25e71 +Block 0006 [ 1]: e937c4f6a43a3a5c +Block 0006 [ 2]: 065b9b36f123727a +Block 0006 [ 3]: a074456c731b7c9d +Block 0006 [ 4]: 8e0b0ee249b35b85 +Block 0006 [ 5]: ee5efbaaaedc6382 +Block 0006 [ 6]: 372ef432529a19dd +Block 0006 [ 7]: 0c39971923fd7ee3 +Block 0006 [ 8]: ab56b63dcb823bc2 +Block 0006 [ 9]: e3e30eba2c887545 +Block 0006 [ 10]: b1c1cf7f034fcab9 +Block 0006 [ 11]: 5a37ae1a9aba41ba +Block 0006 [ 12]: 90417da3eb65e3c6 +Block 0006 [ 13]: 9715c7adf7d48bd9 +Block 0006 [ 14]: a665424a5fa14b29 +Block 0006 [ 15]: 75e72489bda8111f +Block 0006 [ 16]: b497ab6e2575a894 +Block 0006 [ 17]: 10e82458b6431842 +Block 0006 [ 18]: 9c4fe9b5b4fa60b5 +Block 0006 [ 19]: cc0d3fc1fa5be33a +Block 0006 [ 20]: 4016c756a496d9d4 +Block 0006 [ 21]: 20d97fa72058f7d4 +Block 0006 [ 22]: 3a636962e222ebab +Block 0006 [ 23]: 2edbcf4ee4bd517c +Block 0006 [ 24]: e8d7fba7a86bddb4 +Block 0006 [ 25]: cf6180086cac6d0a +Block 0006 [ 26]: e3f8824092b4260f +Block 0006 [ 27]: f056ef7493b06cca +Block 0006 [ 28]: fac82c5c43b31478 +Block 0006 [ 29]: e660f484bafd3c93 +Block 0006 [ 30]: 95d236ab04727c88 +Block 0006 [ 31]: b9a61e8878952e45 +Block 0006 [ 32]: 689a578392b86703 +Block 0006 [ 33]: eb8522fc4bf33672 +Block 0006 [ 34]: 93f45c0020ea773a +Block 0006 [ 35]: 2fdf8e4d359075bc +Block 0006 [ 36]: ab571ba7bc6ec2fd +Block 0006 [ 37]: dda3dcbe917aaff8 +Block 0006 [ 38]: 9eb95a1e8ead794e +Block 0006 [ 39]: 6fedd57de55d273c +Block 0006 [ 40]: b1e982229232f1ad +Block 0006 [ 41]: 4fe42603c8a9fb69 +Block 0006 [ 42]: d659310e16205de3 +Block 0006 [ 43]: 20d78a53b3eb58aa +Block 0006 [ 44]: 38f5fdd6dc865e40 +Block 0006 [ 45]: d15b5699f7697b8e +Block 0006 [ 46]: 49ab382b1b33423c +Block 0006 [ 47]: 1d6efabc9ce41282 +Block 0006 [ 48]: 2961d5538a38da76 +Block 0006 [ 49]: 73aafddd34985b8c +Block 0006 [ 50]: 06b22e6994377ac5 +Block 0006 [ 51]: adae03a3e7842760 +Block 0006 [ 52]: 5e87d802acbe15c6 +Block 0006 [ 53]: 5cbb54f89ca40959 +Block 0006 [ 54]: e5b25cb912455ee4 +Block 0006 [ 55]: 4c6341f2bf67640c +Block 0006 [ 56]: 514c70013c6e98e7 +Block 0006 [ 57]: 5d6ac5092f7084bf +Block 0006 [ 58]: 3e8aba33150418bf +Block 0006 [ 59]: a30cf862735d162b +Block 0006 [ 60]: 6318ca3cd9772bd1 +Block 0006 [ 61]: d9ec0d7f1dbca7cd +Block 0006 [ 62]: b59787682be88aff +Block 0006 [ 63]: a064dca241a15e2c +Block 0006 [ 64]: 9e8c9708fc584c31 +Block 0006 [ 65]: f38b9cec2f104837 +Block 0006 [ 66]: aab3c7ad54444c98 +Block 0006 [ 67]: 1930cdbb75108f35 +Block 0006 [ 68]: e975c9867aceab39 +Block 0006 [ 69]: f96191489d892c54 +Block 0006 [ 70]: c8e1674971e0648f +Block 0006 [ 71]: b907513bcf5625a0 +Block 0006 [ 72]: ac104180b8a3fde9 +Block 0006 [ 73]: 013292e60a55a6d0 +Block 0006 [ 74]: f0423e702fc2c4ed +Block 0006 [ 75]: 61e8d0990582c55a +Block 0006 [ 76]: 4cbe0cb788314bed +Block 0006 [ 77]: 8c6280a475751998 +Block 0006 [ 78]: 29f7cc903c7c9634 +Block 0006 [ 79]: 57137bb43725f3d6 +Block 0006 [ 80]: 7a3e0bb3b04cb289 +Block 0006 [ 81]: c319cc5e6bb8d7d4 +Block 0006 [ 82]: 71b8459072558920 +Block 0006 [ 83]: 35316d0f774e5804 +Block 0006 [ 84]: deffee844b2ac25c +Block 0006 [ 85]: a52cce030fa44ca2 +Block 0006 [ 86]: c6921938401e2665 +Block 0006 [ 87]: 2b5a7a4619b39322 +Block 0006 [ 88]: c638cb6047ad7f73 +Block 0006 [ 89]: a22c9b0e4064cce3 +Block 0006 [ 90]: 69ec00c7c380d2b9 +Block 0006 [ 91]: dfd92cc8a4282ae2 +Block 0006 [ 92]: 3065f4657ee7867e +Block 0006 [ 93]: 2560cad440b434e5 +Block 0006 [ 94]: ac8bdaf8b273716f +Block 0006 [ 95]: 7326ef4e982b2e03 +Block 0006 [ 96]: f028bef637e8f480 +Block 0006 [ 97]: 4d5d126fc092a061 +Block 0006 [ 98]: 73ab780da60b5719 +Block 0006 [ 99]: 6119c713f2fc328b +Block 0006 [100]: 891e7a9911c5e6d9 +Block 0006 [101]: d40521ec37610f40 +Block 0006 [102]: a3fc256443a27d79 +Block 0006 [103]: 6b602f608c0e3af2 +Block 0006 [104]: dce03c74fd50362a +Block 0006 [105]: f779685936b26eba +Block 0006 [106]: d2534193125bcb00 +Block 0006 [107]: 12ca834d6b1eedb0 +Block 0006 [108]: 073d19e3c4f1bfe9 +Block 0006 [109]: 31935c96b465d0e1 +Block 0006 [110]: 13432f5bd1879a52 +Block 0006 [111]: b9e2cef15789ddd8 +Block 0006 [112]: 534f0d54cebe0592 +Block 0006 [113]: 761601a3a63b69e3 +Block 0006 [114]: 748b16ca57aaa7ab +Block 0006 [115]: aa677d0a7b68e486 +Block 0006 [116]: b2215d7cdecdf1b2 +Block 0006 [117]: 7ba8d9f400b2407b +Block 0006 [118]: 17682787fc9c8fc6 +Block 0006 [119]: e0d866a02b93fd02 +Block 0006 [120]: 8354c7153bc15c88 +Block 0006 [121]: 4df0d563bdab7ed9 +Block 0006 [122]: 468547092b155225 +Block 0006 [123]: 0e25c4e3903193f9 +Block 0006 [124]: 946f87745d6dc6ab +Block 0006 [125]: 636b2ba44cf3a26c +Block 0006 [126]: 7f2ed8b4cbd37294 +Block 0006 [127]: 1666f0a8a45f67e2 +Block 0007 [ 0]: 89bc5991b66a4f9a +Block 0007 [ 1]: 244f9a50eede4a24 +Block 0007 [ 2]: 83976af8c3a0a861 +Block 0007 [ 3]: 38ea76e0f71cc313 +Block 0007 [ 4]: c6e1867e6fa2278f +Block 0007 [ 5]: 27e79ac27c615f48 +Block 0007 [ 6]: 832d73e2c2f0c4fa +Block 0007 [ 7]: 0c4ee0490467a033 +Block 0007 [ 8]: e75eeac5cf1d7adc +Block 0007 [ 9]: 8c8a45c6946c950d +Block 0007 [ 10]: b5baad053f9ca7bd +Block 0007 [ 11]: 46fc8205c42f5a5f +Block 0007 [ 12]: 7c76404757f0454d +Block 0007 [ 13]: d9695eaedce9a870 +Block 0007 [ 14]: 9a5f14c4a42e1fe0 +Block 0007 [ 15]: 4003794a258c067f +Block 0007 [ 16]: cd9de2f71394f07e +Block 0007 [ 17]: 5dbbfdbe775cb191 +Block 0007 [ 18]: 9305fd724ef6ca78 +Block 0007 [ 19]: 9d4ea857a7e98879 +Block 0007 [ 20]: 3ef8dbba9be3b0d2 +Block 0007 [ 21]: cdcb7d8d4937c74d +Block 0007 [ 22]: 2b413663beab789c +Block 0007 [ 23]: 8c2022398a6f105f +Block 0007 [ 24]: fbc6564054e0c5ae +Block 0007 [ 25]: 29bc64cd100368b3 +Block 0007 [ 26]: 5b49e63514ce07ad +Block 0007 [ 27]: ee09dd8044e2993a +Block 0007 [ 28]: 0ef1a2e5536719e1 +Block 0007 [ 29]: a73127758047003a +Block 0007 [ 30]: 6ffb968f03445b73 +Block 0007 [ 31]: 1d6110a090f74e3e +Block 0007 [ 32]: 151ba2612e331780 +Block 0007 [ 33]: fbfc128b382d4c05 +Block 0007 [ 34]: f27fe4a8a1bc79e7 +Block 0007 [ 35]: 3484f508a5a56d2e +Block 0007 [ 36]: 414b6c4370ac4a9a +Block 0007 [ 37]: 1febb1feff45a2b8 +Block 0007 [ 38]: 0c9c9427da10327b +Block 0007 [ 39]: 9b4ebc3732023d56 +Block 0007 [ 40]: 9d74e0967d5b224d +Block 0007 [ 41]: d048577dc40fdb8d +Block 0007 [ 42]: 3879b17a30b0b978 +Block 0007 [ 43]: fb3f18a76754800f +Block 0007 [ 44]: 50559d8df5580475 +Block 0007 [ 45]: 9111d08c239370c7 +Block 0007 [ 46]: d766091af4b45a4b +Block 0007 [ 47]: 62aee41c1d8674a3 +Block 0007 [ 48]: a2930820ec8b2505 +Block 0007 [ 49]: fbd3b0a6e3565791 +Block 0007 [ 50]: aaa953c5471dbb17 +Block 0007 [ 51]: 49d5b5f4e86f9247 +Block 0007 [ 52]: 4b2b84aa2aabf8db +Block 0007 [ 53]: 5af1810ce84263f0 +Block 0007 [ 54]: 8fb74dc06e2c75b2 +Block 0007 [ 55]: df299055074a521f +Block 0007 [ 56]: 6f79200c0ae6493c +Block 0007 [ 57]: 8f8bfab88a8bc57b +Block 0007 [ 58]: 5723fc0b3895145c +Block 0007 [ 59]: ab919fe3268ceefb +Block 0007 [ 60]: 306be7b7d686339f +Block 0007 [ 61]: 43014813fb7fffa0 +Block 0007 [ 62]: 8428dec31fb0c09c +Block 0007 [ 63]: d8f65c034c59d7c2 +Block 0007 [ 64]: e6d5ea8a06c52ec8 +Block 0007 [ 65]: 2872ea29527eac1b +Block 0007 [ 66]: be4d066da29ec0e6 +Block 0007 [ 67]: 4665ebd5d344c313 +Block 0007 [ 68]: 50d6e23aea3e760b +Block 0007 [ 69]: 5e0e3e5f3534d811 +Block 0007 [ 70]: 1ee7dba867effc30 +Block 0007 [ 71]: c222516a167eb883 +Block 0007 [ 72]: f1d1e74cbf8ae6e9 +Block 0007 [ 73]: e106eb6f8bdca40a +Block 0007 [ 74]: b1b70e885bca3a77 +Block 0007 [ 75]: 0f64afa7c1004b06 +Block 0007 [ 76]: 2ea15d6201b8d307 +Block 0007 [ 77]: cd5c49ca4ed9b1c3 +Block 0007 [ 78]: bc0ddc91b4213b76 +Block 0007 [ 79]: 61cf167ea124ffdc +Block 0007 [ 80]: 8806befdffa43b77 +Block 0007 [ 81]: bcc6a6a392620c69 +Block 0007 [ 82]: 1434f9acecacaebe +Block 0007 [ 83]: 7c6af7c2f1d3a016 +Block 0007 [ 84]: 115556eb3d8d23bc +Block 0007 [ 85]: e3eafc2dda0aa391 +Block 0007 [ 86]: 5750369e0d454865 +Block 0007 [ 87]: a7c6fd735d535569 +Block 0007 [ 88]: 29e6ad4a5e5dfd52 +Block 0007 [ 89]: 1de107ad6c220b0f +Block 0007 [ 90]: 9c47398621cee82b +Block 0007 [ 91]: 7dfabceacb90433a +Block 0007 [ 92]: dd080065f92db5f8 +Block 0007 [ 93]: 808fb2ca8f9855fc +Block 0007 [ 94]: 9b37d0255ca874d9 +Block 0007 [ 95]: a29945156f5e78e0 +Block 0007 [ 96]: 7ebb17b54f99cc52 +Block 0007 [ 97]: 86a2c533d65321ec +Block 0007 [ 98]: e5fb0d5fa7cd9535 +Block 0007 [ 99]: 6c207d4bfaf49f7b +Block 0007 [100]: 44eb34b160e8f527 +Block 0007 [101]: 71ef01526ddb2885 +Block 0007 [102]: 915c082d99d95fd7 +Block 0007 [103]: bfcad755fc1307af +Block 0007 [104]: dfdb5ac657037222 +Block 0007 [105]: 08da606ac7d1602b +Block 0007 [106]: 95c0b0e9ebd7e4a0 +Block 0007 [107]: e77addfab259b972 +Block 0007 [108]: e3010379e9ad41d3 +Block 0007 [109]: 0f64d0ba35d2b8e5 +Block 0007 [110]: 2fad709e13c7b6f3 +Block 0007 [111]: 8fca48fc169624c9 +Block 0007 [112]: 05f2f0e60d335cb2 +Block 0007 [113]: cb7a2cd2340b3bfe +Block 0007 [114]: 6e058f453af0ccb6 +Block 0007 [115]: 3f445b7cc7839d27 +Block 0007 [116]: 619bfe60221d6100 +Block 0007 [117]: e5049d9c35782378 +Block 0007 [118]: acea85d52eb0c9f5 +Block 0007 [119]: 0b4f88ff01eb6c9c +Block 0007 [120]: 53bd40631c73d79b +Block 0007 [121]: 6a8e9acb96295031 +Block 0007 [122]: d1d48bed6b85937e +Block 0007 [123]: 9a4ce896116b82d8 +Block 0007 [124]: d580d4b5de6c3e9e +Block 0007 [125]: 812089540331bbaa +Block 0007 [126]: 6b9b3242b2fb8b9c +Block 0007 [127]: 2a402a6b13a8c267 +Block 0008 [ 0]: b7ab95721117d35e +Block 0008 [ 1]: 22efa2b9e5e159b2 +Block 0008 [ 2]: 964d836e880b8f89 +Block 0008 [ 3]: 465893367077dde0 +Block 0008 [ 4]: 04b86461613ddecf +Block 0008 [ 5]: faad3b55b362d764 +Block 0008 [ 6]: 9bfb8fdf7a2d2749 +Block 0008 [ 7]: 2514d8487b2f337e +Block 0008 [ 8]: 76b0368ad20aaf0e +Block 0008 [ 9]: 2e73c820427627ab +Block 0008 [ 10]: d6710dc04fd71cf7 +Block 0008 [ 11]: 05f1214cf754fe9c +Block 0008 [ 12]: 1b9226ebb176545d +Block 0008 [ 13]: d09950e8d137b218 +Block 0008 [ 14]: a556442aaa5a4704 +Block 0008 [ 15]: 22a558765f5b708c +Block 0008 [ 16]: 5a956898ea8655bb +Block 0008 [ 17]: d00c0f9a64cf54f8 +Block 0008 [ 18]: 1924450be9d7d7d3 +Block 0008 [ 19]: 4b2093cc1dba44d9 +Block 0008 [ 20]: 40e06f4fe9d9f193 +Block 0008 [ 21]: 9f669102987d4b33 +Block 0008 [ 22]: 25773e4784493e3e +Block 0008 [ 23]: f28659e531958e97 +Block 0008 [ 24]: 6946e4820d222c77 +Block 0008 [ 25]: 4681223f5565478d +Block 0008 [ 26]: 2e4d5f19e61816c4 +Block 0008 [ 27]: c96da5ff44d7b204 +Block 0008 [ 28]: 83582dd48b6fde2a +Block 0008 [ 29]: c7964d848c2cb4e1 +Block 0008 [ 30]: c0fbd722926446a8 +Block 0008 [ 31]: f7f224036da1b50b +Block 0008 [ 32]: 794c427ca82715f9 +Block 0008 [ 33]: 8a2b97b3013583b7 +Block 0008 [ 34]: 3244ee89081e7460 +Block 0008 [ 35]: f5e2a548eb51f3e4 +Block 0008 [ 36]: d1f2917f33c9beef +Block 0008 [ 37]: 4be72bd00cf526aa +Block 0008 [ 38]: c4783ba6b1a63baa +Block 0008 [ 39]: aa6c043d2a2b24b9 +Block 0008 [ 40]: 9770847719e53708 +Block 0008 [ 41]: 9062cef0c0d7b719 +Block 0008 [ 42]: 03bbe219e7b92dd6 +Block 0008 [ 43]: 60e53b185d155c18 +Block 0008 [ 44]: 1d6ba06581c7d26f +Block 0008 [ 45]: 8622eba9ec8d607b +Block 0008 [ 46]: d970b275e9b38475 +Block 0008 [ 47]: cd054ad4f06c85df +Block 0008 [ 48]: f326e9cf128b309b +Block 0008 [ 49]: 26e3d59d0f1514db +Block 0008 [ 50]: 957d99899c37ddb5 +Block 0008 [ 51]: 496914dbd6936795 +Block 0008 [ 52]: 5b297ef27bd7e1df +Block 0008 [ 53]: 6d0197c85b350e0c +Block 0008 [ 54]: 85d0ece1e8500251 +Block 0008 [ 55]: 480487de2170b8c1 +Block 0008 [ 56]: a015392335b28618 +Block 0008 [ 57]: 7f57a60af4f33b0f +Block 0008 [ 58]: 851a927b8c624cad +Block 0008 [ 59]: 89c747c64caab2a6 +Block 0008 [ 60]: 477cfa9b1918256a +Block 0008 [ 61]: d98e9f90a8bfb1bc +Block 0008 [ 62]: 30ff60298156ba3c +Block 0008 [ 63]: 3c7761e58ec0e095 +Block 0008 [ 64]: 8f679b883e408880 +Block 0008 [ 65]: 257ef71da8d77b46 +Block 0008 [ 66]: 4b7ad321efc75f0c +Block 0008 [ 67]: 1f6a32b542eebc6b +Block 0008 [ 68]: 0a0967b0f7acd6db +Block 0008 [ 69]: 54163535e5d00f3a +Block 0008 [ 70]: 7fdec43e6b6b4930 +Block 0008 [ 71]: c1c53843bd4aaab0 +Block 0008 [ 72]: 07016805847a07d8 +Block 0008 [ 73]: 10fb712c92c61c4b +Block 0008 [ 74]: 015e817683d154e8 +Block 0008 [ 75]: fe47daf5171bfc13 +Block 0008 [ 76]: c4827a7bfd8ce2d9 +Block 0008 [ 77]: 230c9209805eb318 +Block 0008 [ 78]: e63a7fa09253432f +Block 0008 [ 79]: 389ec0abe21e0ae7 +Block 0008 [ 80]: d905cce5cbd8176c +Block 0008 [ 81]: a422de2b3bb9a792 +Block 0008 [ 82]: e697168d4153dbcf +Block 0008 [ 83]: 23eb13f63115c465 +Block 0008 [ 84]: cf22e9ff2140d01e +Block 0008 [ 85]: 8a04ab6f7c64bdf4 +Block 0008 [ 86]: dc485082ce16fc73 +Block 0008 [ 87]: 4683333477cc0b97 +Block 0008 [ 88]: 863db556e1caaf30 +Block 0008 [ 89]: 50bd44001676b011 +Block 0008 [ 90]: 6a11db826217b8a8 +Block 0008 [ 91]: 3d2760322a5a5f6b +Block 0008 [ 92]: 5173a7ced46cafd3 +Block 0008 [ 93]: 990529a5161d0b95 +Block 0008 [ 94]: ca880dbb12f980d2 +Block 0008 [ 95]: f302c5e44f59329a +Block 0008 [ 96]: 983e583ac8e8e523 +Block 0008 [ 97]: 846f0c63282b5bbf +Block 0008 [ 98]: 08a4b7b9c5d791b8 +Block 0008 [ 99]: 86a7abed532c43b8 +Block 0008 [100]: 59fe6cf801a30e6d +Block 0008 [101]: f5764116d593fc3b +Block 0008 [102]: c0697b3cbd3001ab +Block 0008 [103]: 45e42c5ffb139e80 +Block 0008 [104]: d7ed91668c402ce0 +Block 0008 [105]: 6397bdd0d8527ae4 +Block 0008 [106]: 12880cb013fe58fc +Block 0008 [107]: 971fe855ed549949 +Block 0008 [108]: d1e0e639eb31c572 +Block 0008 [109]: 6e335ec1cf8de464 +Block 0008 [110]: da20beebc9ed0af9 +Block 0008 [111]: df0955ee5e18d4ef +Block 0008 [112]: 70eb91b051b35a76 +Block 0008 [113]: 7548e2994282c4d6 +Block 0008 [114]: 489a1b29c4a99af6 +Block 0008 [115]: 94cad03afaaa3898 +Block 0008 [116]: 37cbca7c85c8491d +Block 0008 [117]: 30faa00e59a713f6 +Block 0008 [118]: 35cc78464d8e0da4 +Block 0008 [119]: 7057afb2dd623ac4 +Block 0008 [120]: 6b1a9205926fc23c +Block 0008 [121]: e9e200e9ffd25f94 +Block 0008 [122]: 877f0fcc2e621a2e +Block 0008 [123]: 64535122e6a3edde +Block 0008 [124]: ae387cd847ebe238 +Block 0008 [125]: 059fc807fc322613 +Block 0008 [126]: c3b01aa192b0a0e9 +Block 0008 [127]: 77191027156712cc +Block 0009 [ 0]: 8e732c2c500d1bcf +Block 0009 [ 1]: e9f582c285d839fb +Block 0009 [ 2]: 2fc5142d3a7a7654 +Block 0009 [ 3]: 9095c31471464fe1 +Block 0009 [ 4]: 8e991a3caf2a3052 +Block 0009 [ 5]: 37702ba2be1e7b0a +Block 0009 [ 6]: 835c109a4a30f143 +Block 0009 [ 7]: 0eb4ae9d12f396c7 +Block 0009 [ 8]: 88f2953817eddb54 +Block 0009 [ 9]: 1cecd3d0a1e201c9 +Block 0009 [ 10]: deafac03b504e11d +Block 0009 [ 11]: 8157bf20b970b8e5 +Block 0009 [ 12]: 50b3e5bf1e48eb70 +Block 0009 [ 13]: 9d7efd0bff2d2e83 +Block 0009 [ 14]: 2a792a8f2b0982c2 +Block 0009 [ 15]: f18c1232d73408db +Block 0009 [ 16]: f5a62d2f9de07c74 +Block 0009 [ 17]: 8204c3aacca9edbb +Block 0009 [ 18]: b5baa1f4e095eef1 +Block 0009 [ 19]: 13235a4064138ef2 +Block 0009 [ 20]: a142635c58c634d7 +Block 0009 [ 21]: b7ddf6f55ab349a6 +Block 0009 [ 22]: f71717df61515bbf +Block 0009 [ 23]: 1890a0eeeed4ec12 +Block 0009 [ 24]: 2521df3d057602b1 +Block 0009 [ 25]: f425966f41a3cbae +Block 0009 [ 26]: 517dbeacc6a8e886 +Block 0009 [ 27]: 4e6782d7bfc248b0 +Block 0009 [ 28]: 077d169e58f83834 +Block 0009 [ 29]: 566f54c60623e8dd +Block 0009 [ 30]: 9282e16be5d00504 +Block 0009 [ 31]: 43e00854ca66714e +Block 0009 [ 32]: 28774e5b81f76aaa +Block 0009 [ 33]: 8950b8ae23d4faf1 +Block 0009 [ 34]: 09e4d38b92711e7c +Block 0009 [ 35]: 9a2eb57e82bc2afa +Block 0009 [ 36]: 506099a8d3aa3d16 +Block 0009 [ 37]: c3e99f028c752146 +Block 0009 [ 38]: 7ec9eb85c13ff100 +Block 0009 [ 39]: 718db4822eaf3c3f +Block 0009 [ 40]: 6e8cf355d00578c4 +Block 0009 [ 41]: a96f23d2042ed081 +Block 0009 [ 42]: b1efa003a52051a2 +Block 0009 [ 43]: 083cd3f3afeaac19 +Block 0009 [ 44]: 0d69d9676b1259fa +Block 0009 [ 45]: 08c3761ad4b25440 +Block 0009 [ 46]: 0c406de866ecbc24 +Block 0009 [ 47]: 5cb289de573f01cc +Block 0009 [ 48]: 02893bb82c671ed6 +Block 0009 [ 49]: c081209aca5d643e +Block 0009 [ 50]: 9a51ca107935abeb +Block 0009 [ 51]: 354aed6cc4970cb0 +Block 0009 [ 52]: fbd56117a58309b6 +Block 0009 [ 53]: daae519e820f1e5e +Block 0009 [ 54]: 48162d9e0c40b513 +Block 0009 [ 55]: 93b9f51a284d2e22 +Block 0009 [ 56]: b91de3ce3b32c35f +Block 0009 [ 57]: a2692cb72cd2f4bd +Block 0009 [ 58]: b34187d3ec2443e9 +Block 0009 [ 59]: 69c8d1d6b9141ab6 +Block 0009 [ 60]: 96e4e5ac6fc7de7d +Block 0009 [ 61]: 6edb6ef2a2c9524a +Block 0009 [ 62]: f2c41d9cfa6140a6 +Block 0009 [ 63]: 01d6b829b5a0478b +Block 0009 [ 64]: bebfd01f651b8408 +Block 0009 [ 65]: 2550cc3cdae04d67 +Block 0009 [ 66]: 15595a3d607dfbda +Block 0009 [ 67]: b46e32730ca3295f +Block 0009 [ 68]: 9ec5f85084cef798 +Block 0009 [ 69]: 2f404ab4feeb707f +Block 0009 [ 70]: fd41201b15012abe +Block 0009 [ 71]: 6ca913e4f0fd8fee +Block 0009 [ 72]: 709d15d4a5c351ca +Block 0009 [ 73]: 0ff417d5fb37ebe7 +Block 0009 [ 74]: 802e11d62972e3bd +Block 0009 [ 75]: bc2c232ea9b2159e +Block 0009 [ 76]: 69e7678104f56c09 +Block 0009 [ 77]: cde317f9f0a761f7 +Block 0009 [ 78]: daa884e6383a0c9b +Block 0009 [ 79]: 624e467ea037d7fc +Block 0009 [ 80]: da29125f93d7e351 +Block 0009 [ 81]: 7b8a251d7d757a20 +Block 0009 [ 82]: 123b966cfc4bdbe2 +Block 0009 [ 83]: e4b764a11ec7b794 +Block 0009 [ 84]: 61465f002fd37b96 +Block 0009 [ 85]: 519d444057d1d1bc +Block 0009 [ 86]: 17ca9449f5f2b619 +Block 0009 [ 87]: 20e1968729b8cbd3 +Block 0009 [ 88]: e07232d4ec01eec7 +Block 0009 [ 89]: 292fe0de615d0448 +Block 0009 [ 90]: 6d447d417ac58b7f +Block 0009 [ 91]: 213085ba89c1a0e6 +Block 0009 [ 92]: 279218ed0f586188 +Block 0009 [ 93]: 85432b291b14ae92 +Block 0009 [ 94]: d3811f53e9fb02b6 +Block 0009 [ 95]: 14b83bd6e46eaed6 +Block 0009 [ 96]: 622711519314f9f4 +Block 0009 [ 97]: ed92baab649ec78f +Block 0009 [ 98]: c72c72d7b0848cfe +Block 0009 [ 99]: de53a491c6295c22 +Block 0009 [100]: 2be4a0b8b5e43cbc +Block 0009 [101]: e6f22ceac7bccd1f +Block 0009 [102]: 05b12ebec17c187e +Block 0009 [103]: 52f341e886242a28 +Block 0009 [104]: e30c872494dae813 +Block 0009 [105]: bdad94979f6995a5 +Block 0009 [106]: bc9e4d10f9e5f606 +Block 0009 [107]: acb2275cf353d8e0 +Block 0009 [108]: 051c08df05a430a4 +Block 0009 [109]: ea68d850dbea3577 +Block 0009 [110]: d170a2ad236d937f +Block 0009 [111]: d15f44a6debf6691 +Block 0009 [112]: 155fb21a0411d4e6 +Block 0009 [113]: 7ef7eeb7ac21cf4b +Block 0009 [114]: 92edc47cbac6c4a6 +Block 0009 [115]: 510544dbaa033367 +Block 0009 [116]: 46a67011096e757c +Block 0009 [117]: 3a1a9464956028f7 +Block 0009 [118]: 38c1dea1570c12b9 +Block 0009 [119]: 0e1db1c9aa4e6e8a +Block 0009 [120]: e565a8750f24205c +Block 0009 [121]: 722413539d2ad804 +Block 0009 [122]: b9f8daba5bb18eec +Block 0009 [123]: 1e5be1da6957bcac +Block 0009 [124]: 8057de9f3f373a31 +Block 0009 [125]: ff03efbd16744e8c +Block 0009 [126]: 9424bb60b0df4407 +Block 0009 [127]: 13460e85e31e66d1 +Block 0010 [ 0]: 543b940990095875 +Block 0010 [ 1]: 18eaeb3f2173cdd7 +Block 0010 [ 2]: 0d08db9d1badfb0b +Block 0010 [ 3]: 67644ff573140c3a +Block 0010 [ 4]: 295ab880314f0f85 +Block 0010 [ 5]: 112edbb91c2a8fd7 +Block 0010 [ 6]: c038e70916f72cde +Block 0010 [ 7]: 4f9c910aa9899d1c +Block 0010 [ 8]: dada45d5af22d56c +Block 0010 [ 9]: e8b476a0c6350fbc +Block 0010 [ 10]: 870bc5fad488facf +Block 0010 [ 11]: 6b7dbbc32595f4c7 +Block 0010 [ 12]: a964783636eb2e97 +Block 0010 [ 13]: d145b572544eae6d +Block 0010 [ 14]: fe8ef676787818cb +Block 0010 [ 15]: 20e375197aa04ab2 +Block 0010 [ 16]: d011f89244a3d4df +Block 0010 [ 17]: 759e5d451dae6e92 +Block 0010 [ 18]: bec7d0751f0ab01e +Block 0010 [ 19]: 149251274eb89159 +Block 0010 [ 20]: f91432fc0eb92ec6 +Block 0010 [ 21]: 72e8c6ddcc930a13 +Block 0010 [ 22]: 8452c113f7fa9b56 +Block 0010 [ 23]: 4f5daba6e08b86c9 +Block 0010 [ 24]: 0e2d8b734f0bcf74 +Block 0010 [ 25]: 1a6c20125994331d +Block 0010 [ 26]: a87e4eed3891e466 +Block 0010 [ 27]: 3d00c4836245c1b3 +Block 0010 [ 28]: 189483b92b00a86d +Block 0010 [ 29]: 06d49ab12bbf1f15 +Block 0010 [ 30]: 20b348e5ead7bf24 +Block 0010 [ 31]: 506ba7e964fea6b4 +Block 0010 [ 32]: e8f23d6e2ea9f924 +Block 0010 [ 33]: f6d0d2bd74d90737 +Block 0010 [ 34]: 8fb226cbf1ce49c9 +Block 0010 [ 35]: 6815c3e3f8f4ef0b +Block 0010 [ 36]: abb3e01f3fce839b +Block 0010 [ 37]: e92757b13b57b915 +Block 0010 [ 38]: 5aeb88f6b7d1cb0b +Block 0010 [ 39]: bb1650328a3a14aa +Block 0010 [ 40]: f0728fb2ff0c8666 +Block 0010 [ 41]: 3e84a83c151639a7 +Block 0010 [ 42]: 9b0f4d15d9cf179f +Block 0010 [ 43]: dbb8c5716afd021c +Block 0010 [ 44]: e8bfc3df051ed951 +Block 0010 [ 45]: 2e0dfba45843e305 +Block 0010 [ 46]: a01b3aeb323b6409 +Block 0010 [ 47]: c9111b107b5297e7 +Block 0010 [ 48]: e2ff0a84b8ec6add +Block 0010 [ 49]: a1a71d29c99ea301 +Block 0010 [ 50]: 63bfcaad0e326961 +Block 0010 [ 51]: 9615e8c180b752fb +Block 0010 [ 52]: 7e5abed116da961d +Block 0010 [ 53]: 74ef9fa68f55818e +Block 0010 [ 54]: dc792d50364b460c +Block 0010 [ 55]: 45914d8df39e6635 +Block 0010 [ 56]: fa6b6755e5d333df +Block 0010 [ 57]: 6dd4c60cfa704cc7 +Block 0010 [ 58]: 3741ce484f6a142e +Block 0010 [ 59]: ad6e491cc36c0a3b +Block 0010 [ 60]: 62bb1c10e00e80d4 +Block 0010 [ 61]: ec9a80476840f855 +Block 0010 [ 62]: a6ee55d533895c55 +Block 0010 [ 63]: 6b0ca397060e3b98 +Block 0010 [ 64]: 0ad956334279e43a +Block 0010 [ 65]: b87d52c2a2c90ec3 +Block 0010 [ 66]: 50ff46a35d7842cc +Block 0010 [ 67]: c3d9a0d2d55ea9c1 +Block 0010 [ 68]: dfa49e5406a2e725 +Block 0010 [ 69]: 541dd28aa2563e8f +Block 0010 [ 70]: 53ad650ffc8e5958 +Block 0010 [ 71]: 3a5adad382c04c27 +Block 0010 [ 72]: 44943c194a99a8f2 +Block 0010 [ 73]: 3e1098d058fd17d8 +Block 0010 [ 74]: e12c8eb2e985e97d +Block 0010 [ 75]: f020c6b429ca33fb +Block 0010 [ 76]: 87d2223bd0ebcd78 +Block 0010 [ 77]: 459b25a71ba6b614 +Block 0010 [ 78]: 41da41285d0667ee +Block 0010 [ 79]: 09e80349cac41549 +Block 0010 [ 80]: ffc52232e58aeead +Block 0010 [ 81]: d8e66f8b2f80bbd1 +Block 0010 [ 82]: e04ae31c590646fa +Block 0010 [ 83]: ba8ad218ce90618d +Block 0010 [ 84]: bfe77439e9fe02f0 +Block 0010 [ 85]: 59eb9a5bb1936564 +Block 0010 [ 86]: f0a2471f9add76d7 +Block 0010 [ 87]: 9f8793e60fe20141 +Block 0010 [ 88]: f9b307023c67d822 +Block 0010 [ 89]: d0aeca62f1cf526e +Block 0010 [ 90]: 765d93ce65c4fa16 +Block 0010 [ 91]: b113f2b94c8726e7 +Block 0010 [ 92]: 38a889e531ea46bd +Block 0010 [ 93]: 6d5d5be952f68d15 +Block 0010 [ 94]: 6a9bdfe362d0869a +Block 0010 [ 95]: 7e659ff724978315 +Block 0010 [ 96]: 42ccdc3db17d27d7 +Block 0010 [ 97]: faec96f2411fd748 +Block 0010 [ 98]: fedf541027365e36 +Block 0010 [ 99]: 05aa427cbfa8c197 +Block 0010 [100]: 09db0e1c73dd017f +Block 0010 [101]: 051154d397ab8eb5 +Block 0010 [102]: c14899d6cfd6db92 +Block 0010 [103]: 76eba202872418f0 +Block 0010 [104]: 7de93ad989b7fa63 +Block 0010 [105]: 79b9781eb6d08a83 +Block 0010 [106]: 18c7e233870ab87e +Block 0010 [107]: a2f24fac2ccfaa05 +Block 0010 [108]: aa0329bd328e07aa +Block 0010 [109]: 6d568e267df6cbd8 +Block 0010 [110]: 0cdec16e4b3af9df +Block 0010 [111]: 516a6543fd378d95 +Block 0010 [112]: 044353035e8ed9e2 +Block 0010 [113]: 8cce3633089e9ef6 +Block 0010 [114]: 241ca0819199c35f +Block 0010 [115]: b84e6be91f3ba29c +Block 0010 [116]: 7681dba7d67b853d +Block 0010 [117]: cfaa8457e94a2ca3 +Block 0010 [118]: 4f55fddfa61e1c14 +Block 0010 [119]: 4ae2c0df0be7bdd2 +Block 0010 [120]: adf064db6f41b2d0 +Block 0010 [121]: 66e36ed60db08e78 +Block 0010 [122]: 9db421efe09b5dc9 +Block 0010 [123]: 25eab21b2878e5ba +Block 0010 [124]: f4ceb1a0e178b084 +Block 0010 [125]: f117d1fb52d7f0a1 +Block 0010 [126]: 7a2ac65a075a7e0f +Block 0010 [127]: 810954fbb31fdf1a +Block 0011 [ 0]: 0e29d95fe511e04d +Block 0011 [ 1]: 13c9ef6946e59fb2 +Block 0011 [ 2]: b9edf0e8e52a2e21 +Block 0011 [ 3]: 953124c3fc0130f4 +Block 0011 [ 4]: f9e368d2ce6e9f2b +Block 0011 [ 5]: 2c013e6d64bfac16 +Block 0011 [ 6]: 85ee494ff677546c +Block 0011 [ 7]: 7e5e241249696384 +Block 0011 [ 8]: f1bd19de6eb2b578 +Block 0011 [ 9]: fd7dff90cd127146 +Block 0011 [ 10]: b0276a8590517308 +Block 0011 [ 11]: 1997e6961cd4172b +Block 0011 [ 12]: e970bf5937e8ba67 +Block 0011 [ 13]: 997a801c2be3d65e +Block 0011 [ 14]: f251b1ac7c259652 +Block 0011 [ 15]: c65c431013920d9c +Block 0011 [ 16]: 8d77564d250306b4 +Block 0011 [ 17]: d9c99ace927fb203 +Block 0011 [ 18]: 615208697c3e89d7 +Block 0011 [ 19]: a657575ec6603056 +Block 0011 [ 20]: ffcfaad18c7e709f +Block 0011 [ 21]: c4236e6fbbd3e654 +Block 0011 [ 22]: 9912a1c921f60b6d +Block 0011 [ 23]: 0591dbfe857cbf25 +Block 0011 [ 24]: 37dca3835abf08ef +Block 0011 [ 25]: fe86e8c90fb2c5bd +Block 0011 [ 26]: f13d31fb9e188a0b +Block 0011 [ 27]: 52f558bae211b69a +Block 0011 [ 28]: 850898653a80ccf0 +Block 0011 [ 29]: d26bb731a29067f5 +Block 0011 [ 30]: 86457f7e5895d7f1 +Block 0011 [ 31]: 1b3349076ae1892e +Block 0011 [ 32]: 6409935520ced717 +Block 0011 [ 33]: ca0fcf02eca75105 +Block 0011 [ 34]: 5223f92b3919c403 +Block 0011 [ 35]: f15ff36a0dbc9a19 +Block 0011 [ 36]: 9d7776e6c269f58f +Block 0011 [ 37]: c04ee2bedbdc990f +Block 0011 [ 38]: ae936612661d3076 +Block 0011 [ 39]: d937f92bee9e6ca0 +Block 0011 [ 40]: fb6d834ac2a2ce56 +Block 0011 [ 41]: 804e4e605ac67a64 +Block 0011 [ 42]: de073c7c0740efd0 +Block 0011 [ 43]: 19fabb72e5670a8f +Block 0011 [ 44]: 4700769583220e60 +Block 0011 [ 45]: a3cc907f36e1fd94 +Block 0011 [ 46]: 13186c0243a98246 +Block 0011 [ 47]: 3fb2722223782206 +Block 0011 [ 48]: 0bae6ef325ea98df +Block 0011 [ 49]: bfa458d7bbc10e07 +Block 0011 [ 50]: e5af71034751f4dc +Block 0011 [ 51]: 60b296e6b629d7fd +Block 0011 [ 52]: f21c933bca848abc +Block 0011 [ 53]: f51be91c0e69b9b6 +Block 0011 [ 54]: cd47910b75abd177 +Block 0011 [ 55]: fde3573dc408cb71 +Block 0011 [ 56]: 9cd8f9089d99653b +Block 0011 [ 57]: 4bb5a1a43a0d5438 +Block 0011 [ 58]: 75d318af98df4e40 +Block 0011 [ 59]: 98bb9cfbf3051166 +Block 0011 [ 60]: 50f2c44750bf6bf5 +Block 0011 [ 61]: b417a6096ea6c619 +Block 0011 [ 62]: 773ab817c6b1d5d2 +Block 0011 [ 63]: d22a9eacb5a3d7f7 +Block 0011 [ 64]: 8cb6a5559d6fbcee +Block 0011 [ 65]: 0452f75d265fa348 +Block 0011 [ 66]: 193e6c5e124077c5 +Block 0011 [ 67]: 6642e04fe60a48c2 +Block 0011 [ 68]: daae3e4a5e745967 +Block 0011 [ 69]: 9843e3c8dda09afb +Block 0011 [ 70]: 67c8a319c4ac1922 +Block 0011 [ 71]: eacabb0f75114aac +Block 0011 [ 72]: 860ebbee0faf1cce +Block 0011 [ 73]: 7bf16fc76a8b56f5 +Block 0011 [ 74]: 5516fca385608bd1 +Block 0011 [ 75]: c3810f023ac43b84 +Block 0011 [ 76]: 2ec2a2053b9d16ab +Block 0011 [ 77]: 03b1d1d164395fce +Block 0011 [ 78]: 4a5569a698107fe4 +Block 0011 [ 79]: eeebc9893a8833da +Block 0011 [ 80]: baae7d25bb1718e3 +Block 0011 [ 81]: e0bd0e82ec8f8e56 +Block 0011 [ 82]: 00a3f878303000de +Block 0011 [ 83]: 81b15606e01d1853 +Block 0011 [ 84]: 4b68d808f18264f2 +Block 0011 [ 85]: cfbc30166b95a051 +Block 0011 [ 86]: 7ccf8c6fbe594d1a +Block 0011 [ 87]: 8fb7f6125de8a4b8 +Block 0011 [ 88]: 9874ab2e71425803 +Block 0011 [ 89]: 89836faa299c3612 +Block 0011 [ 90]: 18848a63fe32ac03 +Block 0011 [ 91]: 80c4fa2d0fa06de0 +Block 0011 [ 92]: 8f96900b1f819c8d +Block 0011 [ 93]: 25b5543a08d55450 +Block 0011 [ 94]: 93030b656f492ed6 +Block 0011 [ 95]: b27a28206ff52c96 +Block 0011 [ 96]: 7f6e7f6e09cf2d75 +Block 0011 [ 97]: 959272d1c52f6e68 +Block 0011 [ 98]: 1ada4e3a2de6c66e +Block 0011 [ 99]: d6569dfc7529f763 +Block 0011 [100]: 038cca522a11ac0f +Block 0011 [101]: 454db675e85984c8 +Block 0011 [102]: 58df9a938bdb8c55 +Block 0011 [103]: 0eedcc2512ddc387 +Block 0011 [104]: 936c4a2daa8ccb10 +Block 0011 [105]: b521e399d33e4d89 +Block 0011 [106]: 012c38f3584346f1 +Block 0011 [107]: 9771b339121cde79 +Block 0011 [108]: 909df00f57e0f0d8 +Block 0011 [109]: 231678b808c5f790 +Block 0011 [110]: 1301e2a6fe312dd4 +Block 0011 [111]: 9657e8e3084d6e89 +Block 0011 [112]: 7e83773b9757c9a9 +Block 0011 [113]: e569bf33a0b83346 +Block 0011 [114]: a442e925d7063b16 +Block 0011 [115]: f91f8be4eeb9e9d3 +Block 0011 [116]: 13b2253dc99c5078 +Block 0011 [117]: bf73b2bbb0f7feea +Block 0011 [118]: 7913497f784f9c00 +Block 0011 [119]: c135b851de9ca1f9 +Block 0011 [120]: 10d4ac102075f58c +Block 0011 [121]: 3e894baf2d480e04 +Block 0011 [122]: d2669db4d2abf1ae +Block 0011 [123]: b5b3a56a014be498 +Block 0011 [124]: 02059fe631e30976 +Block 0011 [125]: 2af8b8d2a9373534 +Block 0011 [126]: b7c31b0d57ea305e +Block 0011 [127]: 1c01db8d2984e3c3 +Block 0012 [ 0]: f0a10e805d6a3d42 +Block 0012 [ 1]: 793f18c15e3a812b +Block 0012 [ 2]: cd71670532fc3879 +Block 0012 [ 3]: 52026378e6aff4f4 +Block 0012 [ 4]: 18271d36c62e4b05 +Block 0012 [ 5]: fa6930a37b56ec6c +Block 0012 [ 6]: 583be84a02ec6ffe +Block 0012 [ 7]: 4b11ca6fb2f9097a +Block 0012 [ 8]: a1bbd58c4ae15ee9 +Block 0012 [ 9]: dbee5a087bbecbbb +Block 0012 [ 10]: 882bf5a9101613ce +Block 0012 [ 11]: bb3dde2797ef3263 +Block 0012 [ 12]: cbf13cfa9034a08b +Block 0012 [ 13]: 811814c390f8bfea +Block 0012 [ 14]: fcfe41d624f6b8ea +Block 0012 [ 15]: 68e3856880355b6f +Block 0012 [ 16]: 1236f5c74c7bf903 +Block 0012 [ 17]: d180385f9fb9a21c +Block 0012 [ 18]: 7499349f22b9555a +Block 0012 [ 19]: 5fb57d55eb9fbf15 +Block 0012 [ 20]: 5110de9baffaeabf +Block 0012 [ 21]: 793e08a617682e55 +Block 0012 [ 22]: 493b642d49020517 +Block 0012 [ 23]: 94df9b09283d2489 +Block 0012 [ 24]: fd2d581994173c8f +Block 0012 [ 25]: e07bf0dd445094a7 +Block 0012 [ 26]: f0ad829a158735b0 +Block 0012 [ 27]: d704ed42147e4768 +Block 0012 [ 28]: 94e8dd6c664e9b7a +Block 0012 [ 29]: 2e639aadb2538f91 +Block 0012 [ 30]: e2e9b6be2b7b4bd6 +Block 0012 [ 31]: 8eea81002f9ed55d +Block 0012 [ 32]: fda7705421c952b1 +Block 0012 [ 33]: c7fb8ff8a46f9bfd +Block 0012 [ 34]: 1633518f427b4076 +Block 0012 [ 35]: b61d459f7bdca710 +Block 0012 [ 36]: a1e87287e279fb03 +Block 0012 [ 37]: d5950378d37f53f9 +Block 0012 [ 38]: a2594348f93f1bea +Block 0012 [ 39]: a618cc5ac0dfe096 +Block 0012 [ 40]: 9266c0f94217c115 +Block 0012 [ 41]: 96d61a622b19ce38 +Block 0012 [ 42]: f63a027f9aca11df +Block 0012 [ 43]: 55729809d54915e1 +Block 0012 [ 44]: cbd491cb52e43cae +Block 0012 [ 45]: b481994150fd14ed +Block 0012 [ 46]: f83a7f15934b47cb +Block 0012 [ 47]: d3e1e10e23c2da2a +Block 0012 [ 48]: 372244cf798883ba +Block 0012 [ 49]: e8794123bacdf1e4 +Block 0012 [ 50]: 062ff79705430499 +Block 0012 [ 51]: 0fddc01417f4f219 +Block 0012 [ 52]: 740c3f09be649563 +Block 0012 [ 53]: 417915d57dc5e333 +Block 0012 [ 54]: f4ee80593bd8e5e8 +Block 0012 [ 55]: 1aee1eb265897cf7 +Block 0012 [ 56]: 0b9ad0f240ba5b24 +Block 0012 [ 57]: 02305b2b03979574 +Block 0012 [ 58]: 472d3640594de091 +Block 0012 [ 59]: 23fbf913420fcc2e +Block 0012 [ 60]: 6ca81dbbb5d512ce +Block 0012 [ 61]: e0520559706bc438 +Block 0012 [ 62]: fc33c33b8963da2c +Block 0012 [ 63]: 2aff701acb05547b +Block 0012 [ 64]: 5a3d42e91e578fc4 +Block 0012 [ 65]: 59758063adf92785 +Block 0012 [ 66]: 6e951b562c76432a +Block 0012 [ 67]: 51fff0413fb1aa59 +Block 0012 [ 68]: d727046b8866df8a +Block 0012 [ 69]: 6b4ebd88ac923a21 +Block 0012 [ 70]: 3c7e55e1d711a11d +Block 0012 [ 71]: 514608cba1330771 +Block 0012 [ 72]: ccb3fbfc634d067c +Block 0012 [ 73]: 68060b3d512ebbe3 +Block 0012 [ 74]: 5f78d84f461f23a6 +Block 0012 [ 75]: 0e0aef3906cb0db3 +Block 0012 [ 76]: 0ef3f0a509d24321 +Block 0012 [ 77]: 272fe65195e2de31 +Block 0012 [ 78]: 5da29cd98a1a39d6 +Block 0012 [ 79]: befb7a2c57c841dc +Block 0012 [ 80]: 8aae609c4e5dfef2 +Block 0012 [ 81]: 4d9b10b5e6ca0d55 +Block 0012 [ 82]: 66757b1cc499a8fd +Block 0012 [ 83]: c59eea79d9ae02c6 +Block 0012 [ 84]: deb05636105f0577 +Block 0012 [ 85]: 8f910d9f13862dcd +Block 0012 [ 86]: 8bbf0b58f2bfcae4 +Block 0012 [ 87]: 1dc80a5af6216876 +Block 0012 [ 88]: f0c7f38f688d275c +Block 0012 [ 89]: 02403970ee4c0e2e +Block 0012 [ 90]: 9bf3b1f16309c29d +Block 0012 [ 91]: a4af59c84060dc96 +Block 0012 [ 92]: c3e3fc9cf27457c6 +Block 0012 [ 93]: 220546fb39e69bfa +Block 0012 [ 94]: bc219a5e82fd01f9 +Block 0012 [ 95]: 893586e7f24bbbbb +Block 0012 [ 96]: 5ae5a74274584644 +Block 0012 [ 97]: a3d9b022bdb17043 +Block 0012 [ 98]: 44f0bbe60e366459 +Block 0012 [ 99]: 88f5771b41071c50 +Block 0012 [100]: d03e3dd3ff2884d7 +Block 0012 [101]: df42e00141a4c89c +Block 0012 [102]: 5aaaa0a2ae8cf52f +Block 0012 [103]: 3d81539d33d9b161 +Block 0012 [104]: 115e34c07ae62a81 +Block 0012 [105]: 94e9221ff8a546a1 +Block 0012 [106]: 8ece3db10b15f445 +Block 0012 [107]: 032849a37be21edb +Block 0012 [108]: 92714bca0b25c3eb +Block 0012 [109]: 721aa5702abcc45c +Block 0012 [110]: 01617ba1be353c8c +Block 0012 [111]: bc2fe091715fcb5a +Block 0012 [112]: 7043ec541e986c7a +Block 0012 [113]: bd57d71922db1672 +Block 0012 [114]: f0c92f03d437e05e +Block 0012 [115]: 9634e655a6d37386 +Block 0012 [116]: 3566fd3ebdaf03f4 +Block 0012 [117]: 85f6da1bc86fea33 +Block 0012 [118]: 1805b65c7746103a +Block 0012 [119]: eb0a6900ef07ca4a +Block 0012 [120]: 8f594a63644580fd +Block 0012 [121]: bfe1dd1be8d6cac2 +Block 0012 [122]: abc26813b3c0d475 +Block 0012 [123]: dbb6fb0dc45d5336 +Block 0012 [124]: abd7de0d061bc830 +Block 0012 [125]: 4f2d1a573c90037a +Block 0012 [126]: 3b9864dd28daf6ea +Block 0012 [127]: 9a7f1f97327c21fa +Block 0013 [ 0]: 110f27a1aef9087f +Block 0013 [ 1]: c0cfc9adf0c80b95 +Block 0013 [ 2]: 915b2854a9b6b139 +Block 0013 [ 3]: 705cd3389ad868f9 +Block 0013 [ 4]: 7ffa3e9cf5dc0143 +Block 0013 [ 5]: add08043ba2eb292 +Block 0013 [ 6]: b997dc82acbc56b3 +Block 0013 [ 7]: 29f9142ed8e3e203 +Block 0013 [ 8]: 050d803719d5d047 +Block 0013 [ 9]: be408d73e0383a54 +Block 0013 [ 10]: 0043e17848f8a16c +Block 0013 [ 11]: 7ab8058b78922cd3 +Block 0013 [ 12]: a97d9693d58a402d +Block 0013 [ 13]: d28560c5cf09156b +Block 0013 [ 14]: ea3cb0a06ba7e158 +Block 0013 [ 15]: fa0fa4343d04cece +Block 0013 [ 16]: 5b183466bb0e7d09 +Block 0013 [ 17]: 120ce02546fb925d +Block 0013 [ 18]: e7fc63058f17cdc3 +Block 0013 [ 19]: 1fae37ddb0408070 +Block 0013 [ 20]: 40c7079b90e2e848 +Block 0013 [ 21]: 7a9c8911517f1e87 +Block 0013 [ 22]: 63029b2b67fb12c9 +Block 0013 [ 23]: 4d800e4f7ba91f7f +Block 0013 [ 24]: b434650ee99c2251 +Block 0013 [ 25]: 74407b19bc5486db +Block 0013 [ 26]: b67c9a18dadf965a +Block 0013 [ 27]: d98744b3b1bb6d09 +Block 0013 [ 28]: 2d8c34b0cbcd7a6f +Block 0013 [ 29]: fd0afc73cc572177 +Block 0013 [ 30]: 07b09f0e5653ce17 +Block 0013 [ 31]: cab97eb257f691db +Block 0013 [ 32]: 9f11eae0f39f21a8 +Block 0013 [ 33]: 15d19b49b7e02c6c +Block 0013 [ 34]: 46da6e970f66b6c8 +Block 0013 [ 35]: 49a17e8263eec903 +Block 0013 [ 36]: c9de78f4bc6aa868 +Block 0013 [ 37]: 1d8dfea55f5b6796 +Block 0013 [ 38]: 175316a8f61b2587 +Block 0013 [ 39]: 25efcc429557ec7e +Block 0013 [ 40]: a9384ef695b7bc06 +Block 0013 [ 41]: 56f2662a3bacbdf6 +Block 0013 [ 42]: e69affaafe48fb24 +Block 0013 [ 43]: e3136ec9687b8b85 +Block 0013 [ 44]: 02d1dc27aac26fd1 +Block 0013 [ 45]: e7e6e588167ec3c9 +Block 0013 [ 46]: 652fe019d9c046cf +Block 0013 [ 47]: e3942dadc5eece24 +Block 0013 [ 48]: 6d93b00de46cf751 +Block 0013 [ 49]: fa8dd8fb0f6a895b +Block 0013 [ 50]: a086d03df0190e1c +Block 0013 [ 51]: 3494cede809724c7 +Block 0013 [ 52]: 0e391a8be24b0c61 +Block 0013 [ 53]: 63b504727b8f421d +Block 0013 [ 54]: f589dc5bb5b3bb05 +Block 0013 [ 55]: 2d907b105dc21167 +Block 0013 [ 56]: 80d67a062dc94ed8 +Block 0013 [ 57]: 7062e09641789f6a +Block 0013 [ 58]: e7a0e21c50810817 +Block 0013 [ 59]: f4c561d19debae21 +Block 0013 [ 60]: bcb9d85144bb0ec4 +Block 0013 [ 61]: 901b4b59386d1079 +Block 0013 [ 62]: 958c2c24f57698e3 +Block 0013 [ 63]: 378994aadd67b8bb +Block 0013 [ 64]: af646ae2a18aa18c +Block 0013 [ 65]: 98cf82fa8cad9367 +Block 0013 [ 66]: 34acd9fb664da41b +Block 0013 [ 67]: cb0c55d6a06a36d1 +Block 0013 [ 68]: 596cac0f464dccf5 +Block 0013 [ 69]: e0b7e5b458bf7e65 +Block 0013 [ 70]: 9d4153213429e381 +Block 0013 [ 71]: bd175bd05ad89ddc +Block 0013 [ 72]: 3a32b790edeb3b50 +Block 0013 [ 73]: 76181582b4bb6db4 +Block 0013 [ 74]: 3bacbf9a5c6bc5d2 +Block 0013 [ 75]: 52025dd1e69fe955 +Block 0013 [ 76]: 24766a27757868e1 +Block 0013 [ 77]: ea254628c57d6565 +Block 0013 [ 78]: 4dffd3946e2391c9 +Block 0013 [ 79]: a3f0ec19131b2c74 +Block 0013 [ 80]: aabf1ebb453cad3f +Block 0013 [ 81]: 5ce4d4039ae51784 +Block 0013 [ 82]: 063b31568aaa2b58 +Block 0013 [ 83]: b2edb1f3fd849ce2 +Block 0013 [ 84]: e1c635d7781384ab +Block 0013 [ 85]: 434ca168921233af +Block 0013 [ 86]: 5a4cd5d7f2893065 +Block 0013 [ 87]: dbab9cbae3521a69 +Block 0013 [ 88]: 73eba126bc1bd0ec +Block 0013 [ 89]: 036d4e6e1a1bd19a +Block 0013 [ 90]: 1bbcd74a6795d7b7 +Block 0013 [ 91]: d1dcfe677aa57f4d +Block 0013 [ 92]: 502f4df14adefb98 +Block 0013 [ 93]: 9cf907ea8095e86d +Block 0013 [ 94]: 68952d15ce5ffec0 +Block 0013 [ 95]: 51ef41bd9953cf0d +Block 0013 [ 96]: c75de12576679af2 +Block 0013 [ 97]: 3a1245ca4b59d991 +Block 0013 [ 98]: 58da406deda0a2be +Block 0013 [ 99]: ed1d359b0924fc6a +Block 0013 [100]: 88b53326e7c95d86 +Block 0013 [101]: bf63c58402be96e1 +Block 0013 [102]: 27e94f0a9fc33bd4 +Block 0013 [103]: 0941976229a26011 +Block 0013 [104]: f393524504acfc53 +Block 0013 [105]: 9d12db1e3a8fdd72 +Block 0013 [106]: 65f94d0cf0f79d71 +Block 0013 [107]: eb80341772fd94f3 +Block 0013 [108]: 50d0e71609e35d14 +Block 0013 [109]: d6e1428d1a900f1d +Block 0013 [110]: c0438ecdf9ee424e +Block 0013 [111]: fb220c418b818629 +Block 0013 [112]: 7c792913ed892332 +Block 0013 [113]: 0699f2d790569f7b +Block 0013 [114]: b3637f2e9d09356d +Block 0013 [115]: fc6e80e108607a84 +Block 0013 [116]: 93101242fdc3284c +Block 0013 [117]: 0f65daea4d92cc13 +Block 0013 [118]: aeb01cf68d144bb2 +Block 0013 [119]: d3132f63adac679c +Block 0013 [120]: 9956ffa4821ade14 +Block 0013 [121]: 45d10cd12b08a7f7 +Block 0013 [122]: 87df8b5647c8d31a +Block 0013 [123]: 42c90f381e6c64f3 +Block 0013 [124]: 530fde3cc6aa2cd9 +Block 0013 [125]: a7b34dbb301080f1 +Block 0013 [126]: 790189cfcbe04e38 +Block 0013 [127]: b448bd06eabfa98b +Block 0014 [ 0]: 9f1cd0689f53b9b6 +Block 0014 [ 1]: e35b168966e80b90 +Block 0014 [ 2]: b5a0942914a9db2c +Block 0014 [ 3]: 7231649171873f3d +Block 0014 [ 4]: 2c0a81ffc170207e +Block 0014 [ 5]: 168b9363fd1e8c79 +Block 0014 [ 6]: 0b7f5f346840af27 +Block 0014 [ 7]: f1e08d27b9de4794 +Block 0014 [ 8]: 90c4838daaa18f3c +Block 0014 [ 9]: c2d426a11ddfff84 +Block 0014 [ 10]: 6a2e7d5722f53302 +Block 0014 [ 11]: 2da4baa266ac48ac +Block 0014 [ 12]: 222cb59e7384d5bb +Block 0014 [ 13]: 9cc616e7b6e09d64 +Block 0014 [ 14]: d832f28ddee93b3c +Block 0014 [ 15]: 512ed55d654e52c4 +Block 0014 [ 16]: f8b9a8f05fad25eb +Block 0014 [ 17]: 58da11fa5bb50a7a +Block 0014 [ 18]: b16d7729e5485ed2 +Block 0014 [ 19]: 4762f37ae7b70419 +Block 0014 [ 20]: ce877c5117af06e1 +Block 0014 [ 21]: a264cfa6af1399cb +Block 0014 [ 22]: 1c713c633a43e490 +Block 0014 [ 23]: 605294b6d0d3e1e3 +Block 0014 [ 24]: e6699e6c92b1605f +Block 0014 [ 25]: 77283eeb32daee4f +Block 0014 [ 26]: d8d610cda9e3c069 +Block 0014 [ 27]: 59d3bddf6621cc2b +Block 0014 [ 28]: e8bbf2f7b451e342 +Block 0014 [ 29]: 9ca3895b73353bbe +Block 0014 [ 30]: d3ed63a85178af46 +Block 0014 [ 31]: 3de2f2b674cd7ec0 +Block 0014 [ 32]: 887ad16072a7cf85 +Block 0014 [ 33]: c062593e55dc4740 +Block 0014 [ 34]: b3eeaf3026f24201 +Block 0014 [ 35]: d404cb5e83d3e5d7 +Block 0014 [ 36]: 1f46223eb204e335 +Block 0014 [ 37]: 2f387000b96c0af9 +Block 0014 [ 38]: 52dc1b965363315d +Block 0014 [ 39]: 5dbab2ff30334937 +Block 0014 [ 40]: 827077350ef835ea +Block 0014 [ 41]: a5bb8eafd57608cd +Block 0014 [ 42]: bc37683bce72b276 +Block 0014 [ 43]: 489ec1943b6efce6 +Block 0014 [ 44]: 28c9a58821ed6adb +Block 0014 [ 45]: 663397bd43ea5ecf +Block 0014 [ 46]: 54980827a023f04f +Block 0014 [ 47]: 706eb7a6be4cdd9f +Block 0014 [ 48]: 4e6b5ecf1a232fe5 +Block 0014 [ 49]: 2c47b454de1dcafa +Block 0014 [ 50]: 5e1d313c65f0c1f9 +Block 0014 [ 51]: b0cadb11ec6bd339 +Block 0014 [ 52]: 5dd3a637173d8857 +Block 0014 [ 53]: a33f8ddff280b343 +Block 0014 [ 54]: c9da85614cb6590e +Block 0014 [ 55]: 7b568d8c124f7072 +Block 0014 [ 56]: 6f5ff6b532b5a348 +Block 0014 [ 57]: 60d2ead8531affff +Block 0014 [ 58]: 877b1a71f3346e8a +Block 0014 [ 59]: 242e688117a0b8d2 +Block 0014 [ 60]: 19b6fafc9a26c636 +Block 0014 [ 61]: 3d79c909792e2519 +Block 0014 [ 62]: 731417532be4bd67 +Block 0014 [ 63]: e2986d03c73c3b21 +Block 0014 [ 64]: f1668b930bf7d92e +Block 0014 [ 65]: 726901a66463d300 +Block 0014 [ 66]: 052f2baa09531e23 +Block 0014 [ 67]: 9ee57ada74595090 +Block 0014 [ 68]: b1d683625fbbe541 +Block 0014 [ 69]: 2ca43737ff0a5718 +Block 0014 [ 70]: 1721e2e1e9985f54 +Block 0014 [ 71]: d50e276b2aa551d2 +Block 0014 [ 72]: a799e3018b5e9184 +Block 0014 [ 73]: 4f277f05bdc10280 +Block 0014 [ 74]: 00a99d452e6e2fce +Block 0014 [ 75]: 9cd4b73c0081c1d3 +Block 0014 [ 76]: 2536bbd5d2e4a47e +Block 0014 [ 77]: e9cf0d3b2c3030b6 +Block 0014 [ 78]: 656e91bcfc0e222a +Block 0014 [ 79]: a6da444ba9091ea8 +Block 0014 [ 80]: e0afe24cdb91b8c3 +Block 0014 [ 81]: 97f078a7948b822e +Block 0014 [ 82]: 5ca27019b4d2028e +Block 0014 [ 83]: f9fd77cb1f46983a +Block 0014 [ 84]: d13fe437a13cc54e +Block 0014 [ 85]: 006dc58126a3680a +Block 0014 [ 86]: cd8216267cc53592 +Block 0014 [ 87]: e5b6c5d75cd47a7b +Block 0014 [ 88]: 8ec249b6f585da10 +Block 0014 [ 89]: 3d299fcdcebfd8a0 +Block 0014 [ 90]: 921e8f4085db462b +Block 0014 [ 91]: 4179567387eacae7 +Block 0014 [ 92]: e7f8371d18e577fc +Block 0014 [ 93]: 301a74658b8a2b21 +Block 0014 [ 94]: 64454eb02213d764 +Block 0014 [ 95]: 6053b14fdf4ed719 +Block 0014 [ 96]: df018d7367b07151 +Block 0014 [ 97]: d50a9c2eecf3f057 +Block 0014 [ 98]: c486b8ccbd41e401 +Block 0014 [ 99]: fa8978518353c015 +Block 0014 [100]: 18c4ad2167895d88 +Block 0014 [101]: a5c38befc8633165 +Block 0014 [102]: ea798f7e1bb559c6 +Block 0014 [103]: 668cc3c01b2fbc8f +Block 0014 [104]: de2267386c58da11 +Block 0014 [105]: d6b83abd71a31208 +Block 0014 [106]: 38ab9df0a5d6b2c6 +Block 0014 [107]: c70ff46aa3c2c60d +Block 0014 [108]: 7d45101acb53cfcd +Block 0014 [109]: 094b173ab1ae9e2d +Block 0014 [110]: a4c3c60b822ef6aa +Block 0014 [111]: be99a740b86c90af +Block 0014 [112]: a068c651c7bee61d +Block 0014 [113]: a5bd2b2ab61dd25a +Block 0014 [114]: 94831b9b6f0ffaef +Block 0014 [115]: ffdce9d64741f054 +Block 0014 [116]: a1bc5fb0b5b8161a +Block 0014 [117]: 2fc4d76a12e81c91 +Block 0014 [118]: aff984f2849e9279 +Block 0014 [119]: 75cebdf31da0ac2a +Block 0014 [120]: 488570167b20be47 +Block 0014 [121]: bbd10c9260824085 +Block 0014 [122]: 0057c389ecaa85f0 +Block 0014 [123]: 40d8491601f433d6 +Block 0014 [124]: b5be2fefe01b5d0b +Block 0014 [125]: f7518252c19f76da +Block 0014 [126]: 985d37680c4cf0a6 +Block 0014 [127]: 9a2867c2c0e609ba +Block 0015 [ 0]: 13910b6bc3664aa0 +Block 0015 [ 1]: 810c299005aceed3 +Block 0015 [ 2]: ed0b536ccefd2bf4 +Block 0015 [ 3]: 90e9118b3fba9a29 +Block 0015 [ 4]: f245832f7121268b +Block 0015 [ 5]: 1b9f85dbb96ea6ac +Block 0015 [ 6]: c42d0fdd5387a138 +Block 0015 [ 7]: dc60c5abb673cbd6 +Block 0015 [ 8]: c7705bbbda6bdaa3 +Block 0015 [ 9]: 6e17017b53f92aef +Block 0015 [ 10]: a0ba6415a40d1b1e +Block 0015 [ 11]: fa9e111e339104c5 +Block 0015 [ 12]: 8275b953b8f61384 +Block 0015 [ 13]: 01525585e0f3a8ff +Block 0015 [ 14]: 8e48915135123c0c +Block 0015 [ 15]: e449243c3be44c24 +Block 0015 [ 16]: 5e71f56cb5817b37 +Block 0015 [ 17]: 824e99b239ea043b +Block 0015 [ 18]: 20277a3732ba698f +Block 0015 [ 19]: 601b1a32059f9125 +Block 0015 [ 20]: 8c8a2f8094592d46 +Block 0015 [ 21]: e39f3ee523a2ea39 +Block 0015 [ 22]: 0b230a73c13a63bd +Block 0015 [ 23]: 274b81e73393d329 +Block 0015 [ 24]: 837dfd3bd0357519 +Block 0015 [ 25]: 195546d2218bcb43 +Block 0015 [ 26]: 532217c28434a94c +Block 0015 [ 27]: e29ef7168db35357 +Block 0015 [ 28]: dfa65c0f5ea36613 +Block 0015 [ 29]: f5ea1b2477ea5019 +Block 0015 [ 30]: eea2a212d4724c06 +Block 0015 [ 31]: 82ddd5df70bce0e3 +Block 0015 [ 32]: bed114d0172c9188 +Block 0015 [ 33]: 5c2327d38576b4a9 +Block 0015 [ 34]: 967cd759b4ac6a33 +Block 0015 [ 35]: 0f2562866c3454cc +Block 0015 [ 36]: af96dfb88fdca575 +Block 0015 [ 37]: 7dbb9f11564be976 +Block 0015 [ 38]: 0aa59b9e7bf7f48f +Block 0015 [ 39]: e81eb3014bac9fa7 +Block 0015 [ 40]: 0680394a1d912913 +Block 0015 [ 41]: 357ed036e65c33a5 +Block 0015 [ 42]: 75ae6371adf01990 +Block 0015 [ 43]: a2ace9bf2a013566 +Block 0015 [ 44]: 6d5ef6c3440afb82 +Block 0015 [ 45]: 37b072042495a57a +Block 0015 [ 46]: e6aa7dd55fcb12c2 +Block 0015 [ 47]: 7bdde78e351cbd8d +Block 0015 [ 48]: a188855b01202e2f +Block 0015 [ 49]: 0d159146d76e7f2b +Block 0015 [ 50]: 0cf5f48a18081329 +Block 0015 [ 51]: 389ab774f9126d73 +Block 0015 [ 52]: e51476adeaf90275 +Block 0015 [ 53]: b4d89924dc05ff5b +Block 0015 [ 54]: 09b69ba48ff39335 +Block 0015 [ 55]: 19e99309184f742b +Block 0015 [ 56]: 333b1a54ac0c3688 +Block 0015 [ 57]: 008c9b8d51233e6a +Block 0015 [ 58]: 92078aa2c4fd6d0d +Block 0015 [ 59]: 9445ce5fb44d94fc +Block 0015 [ 60]: 799dceafe1118445 +Block 0015 [ 61]: 54b47c19ad881f4f +Block 0015 [ 62]: 5fa8ace3817a0179 +Block 0015 [ 63]: c3a420b1843a745b +Block 0015 [ 64]: 44afad54500c9837 +Block 0015 [ 65]: 4ecbbd1225b43e5e +Block 0015 [ 66]: 66c9b32f899631c5 +Block 0015 [ 67]: e7d81299bacd2082 +Block 0015 [ 68]: 30d9d63610b0ffe3 +Block 0015 [ 69]: 9d8cfc4c8844d513 +Block 0015 [ 70]: b7c084178b4137a0 +Block 0015 [ 71]: f83e5d17062eb8b9 +Block 0015 [ 72]: 0d0b6549369d8f9d +Block 0015 [ 73]: b1124c8f15e76634 +Block 0015 [ 74]: 059926f89443c09e +Block 0015 [ 75]: 045a096f41a09c73 +Block 0015 [ 76]: 044c28c7194d8ad3 +Block 0015 [ 77]: e6df09e32fe8a94b +Block 0015 [ 78]: ab76ab78da161bbf +Block 0015 [ 79]: 316b39fc15505896 +Block 0015 [ 80]: 3fbe2060a5b8f55c +Block 0015 [ 81]: eb190ddebb4b6807 +Block 0015 [ 82]: af0456440e6ab638 +Block 0015 [ 83]: be0dab7d08cbc76a +Block 0015 [ 84]: abafe12ea41d5fe6 +Block 0015 [ 85]: 3b0cf7d7111bcfab +Block 0015 [ 86]: 7616a546c8ee4745 +Block 0015 [ 87]: b538bae6bf7ab536 +Block 0015 [ 88]: 81fd8f8b12a77f3b +Block 0015 [ 89]: 39a27b1569437440 +Block 0015 [ 90]: ae9964bb3cdff849 +Block 0015 [ 91]: e3a4132cdba67906 +Block 0015 [ 92]: d158cd59ea9f9034 +Block 0015 [ 93]: 2bf2511afb694d05 +Block 0015 [ 94]: 58838b0cd79d44b6 +Block 0015 [ 95]: 64064c613bf2e3f1 +Block 0015 [ 96]: 1fdfa3bf5446c792 +Block 0015 [ 97]: 2ca19444da846a6f +Block 0015 [ 98]: 695657edf5467ed8 +Block 0015 [ 99]: 920f468266e669d3 +Block 0015 [100]: 8730b7895b7f558a +Block 0015 [101]: 04fe6d8e53bcaa1b +Block 0015 [102]: 7c71b094b720ab4a +Block 0015 [103]: cadc9d7ab9b10062 +Block 0015 [104]: d1f55e2ad6398ebb +Block 0015 [105]: 59cf88c99120351e +Block 0015 [106]: 7b98146dab48ec98 +Block 0015 [107]: c13c99b8e717db1b +Block 0015 [108]: 80d0d51210e327f6 +Block 0015 [109]: 6ba3a2ba66a637fe +Block 0015 [110]: bf1937951c46acdd +Block 0015 [111]: a9366cd100f1fc79 +Block 0015 [112]: 341a0fe4906324d7 +Block 0015 [113]: 9913c4d902b0f3ee +Block 0015 [114]: ad09b2f566324f03 +Block 0015 [115]: 9f6f5f4349ee7f1e +Block 0015 [116]: 8b1948a1a8bf9fa1 +Block 0015 [117]: 178f7d8ceabf9cd5 +Block 0015 [118]: fdf3473cd9eeb149 +Block 0015 [119]: 552b82c798528d52 +Block 0015 [120]: b336c3211cfc3415 +Block 0015 [121]: 1461cf354137ecee +Block 0015 [122]: a584771e2094c871 +Block 0015 [123]: ff6e940e11f094db +Block 0015 [124]: 65e837b609d53c15 +Block 0015 [125]: ada005f93180c3b0 +Block 0015 [126]: ac8ebdb88c35c1a7 +Block 0015 [127]: ed3abf44c47ac005 +Block 0016 [ 0]: 9a0bb8d093596be9 +Block 0016 [ 1]: e1bfdc05ee03fd0d +Block 0016 [ 2]: 4a7b8afd32898b11 +Block 0016 [ 3]: 263bf05080975928 +Block 0016 [ 4]: 0563f113f91d5a5a +Block 0016 [ 5]: e862a00d92f15cc2 +Block 0016 [ 6]: e089bd9ccc09bea9 +Block 0016 [ 7]: ebe9f60e8c7a0e65 +Block 0016 [ 8]: 7f48279b30898131 +Block 0016 [ 9]: 17de2db04f052abf +Block 0016 [ 10]: 2cc5414dc6ad2c64 +Block 0016 [ 11]: 86d060b19d2f3be6 +Block 0016 [ 12]: 26e6b473a55b01d0 +Block 0016 [ 13]: d15c82850170d2ab +Block 0016 [ 14]: 3afa12012cf636de +Block 0016 [ 15]: 8280e9b3c7b94ae7 +Block 0016 [ 16]: 3b75e9ab4b6363c0 +Block 0016 [ 17]: 08773ef3f0850ae6 +Block 0016 [ 18]: 010c22444c34b6ee +Block 0016 [ 19]: 58961c39c35db529 +Block 0016 [ 20]: 8306e410937d0760 +Block 0016 [ 21]: 563b892ed86b6c0e +Block 0016 [ 22]: 636d5b97a0c83748 +Block 0016 [ 23]: 3d2dbcf4bb47154d +Block 0016 [ 24]: 9fa80ade851efc6c +Block 0016 [ 25]: 602c1d73bf843f33 +Block 0016 [ 26]: b3f7583703712055 +Block 0016 [ 27]: cebd7a463a65108c +Block 0016 [ 28]: 8abc836cdc9a09dd +Block 0016 [ 29]: 926f6766ee4b4e4a +Block 0016 [ 30]: 69f36ed4fe16e884 +Block 0016 [ 31]: 0391acd1b8d5875c +Block 0016 [ 32]: d200bbf9f45f84a3 +Block 0016 [ 33]: 3540b92d47171fb3 +Block 0016 [ 34]: e0fb94d4da9f4257 +Block 0016 [ 35]: ef32cf22f5a01cb3 +Block 0016 [ 36]: df1e8e16f3556b3f +Block 0016 [ 37]: b1fa8d466cdfa033 +Block 0016 [ 38]: 16f43f463a72d9cf +Block 0016 [ 39]: d31c53228c3c607c +Block 0016 [ 40]: 5f4875332e0a7a3c +Block 0016 [ 41]: 66c32d33164cdd0b +Block 0016 [ 42]: 6bc342588808610d +Block 0016 [ 43]: 75722f4c4d895bc3 +Block 0016 [ 44]: de5ead39fe3adf2f +Block 0016 [ 45]: 2d76d5a3c958f392 +Block 0016 [ 46]: 91cc2c795b0ea82e +Block 0016 [ 47]: f84b957da44e0f33 +Block 0016 [ 48]: 50049c6e6d1be204 +Block 0016 [ 49]: 0f84d4f7a4f4623f +Block 0016 [ 50]: c483afeac90c583b +Block 0016 [ 51]: 5241f5b4718b1996 +Block 0016 [ 52]: 189c1ae8662a63c7 +Block 0016 [ 53]: 5889d3e318c05e53 +Block 0016 [ 54]: 5861e11e8a35c858 +Block 0016 [ 55]: 48e5b948f6c3c526 +Block 0016 [ 56]: dadaab651667f7e6 +Block 0016 [ 57]: 82b7e7fb9150020a +Block 0016 [ 58]: da5e055412c7486d +Block 0016 [ 59]: dfd7090ff83f2156 +Block 0016 [ 60]: 63e3609787b041d8 +Block 0016 [ 61]: e4adb17b0082436f +Block 0016 [ 62]: e90c704102ce9df0 +Block 0016 [ 63]: f7f2b4a1c2fb125c +Block 0016 [ 64]: 618e7ec96f20d5e8 +Block 0016 [ 65]: 76fc2dbdcaf8bbf2 +Block 0016 [ 66]: ec96562071ce660d +Block 0016 [ 67]: 2a2213e85db607aa +Block 0016 [ 68]: 3fc2f6739556310f +Block 0016 [ 69]: 256ac5562ea7de43 +Block 0016 [ 70]: d542ad70ca615a20 +Block 0016 [ 71]: fc6d8c2817a34ea9 +Block 0016 [ 72]: 3c8f3ed7b7c6b9df +Block 0016 [ 73]: c791195df2a66f44 +Block 0016 [ 74]: 2c0d711503dbd28d +Block 0016 [ 75]: c4e7a179e25cf184 +Block 0016 [ 76]: b1d267c1a4f4beb9 +Block 0016 [ 77]: 2f4ef773b00980ba +Block 0016 [ 78]: 845a3577578f7664 +Block 0016 [ 79]: 1329b906846966f7 +Block 0016 [ 80]: 9ce86824f02b1a97 +Block 0016 [ 81]: 5c1b8630f6b3ffd8 +Block 0016 [ 82]: c56403dfff373b13 +Block 0016 [ 83]: 449de31b81ed40d0 +Block 0016 [ 84]: da5d86f1d4859c40 +Block 0016 [ 85]: af68984af506de62 +Block 0016 [ 86]: af0a30caa06ea84a +Block 0016 [ 87]: 66a71b0fd1eea1a7 +Block 0016 [ 88]: 91a458c8179efc09 +Block 0016 [ 89]: 324a160de3980429 +Block 0016 [ 90]: b4ef6da86a04fca6 +Block 0016 [ 91]: 87509873a5e21aa2 +Block 0016 [ 92]: 8fe6cceaab2ea6e8 +Block 0016 [ 93]: f51c3860ffce0184 +Block 0016 [ 94]: e16694975bfac692 +Block 0016 [ 95]: 95793e832e74d3a2 +Block 0016 [ 96]: 0605b8359c162493 +Block 0016 [ 97]: b54cd3949d30e152 +Block 0016 [ 98]: eb36361d9a8cef2e +Block 0016 [ 99]: f25eec2dc7386a06 +Block 0016 [100]: d19ba04ffc53b6ba +Block 0016 [101]: 3816f7769f6bd0fd +Block 0016 [102]: effbd7aa623d98ae +Block 0016 [103]: fc1bbfc3fb63741e +Block 0016 [104]: db3ec9d71c9b6955 +Block 0016 [105]: 49eb5111ec17d14a +Block 0016 [106]: 94117297793212f0 +Block 0016 [107]: 0ec9abf1e13bbe99 +Block 0016 [108]: 3a4273167ecc5265 +Block 0016 [109]: 852857524a04c4ce +Block 0016 [110]: 4178c75b2edd173e +Block 0016 [111]: c90afac8bc77aad7 +Block 0016 [112]: 6c92e96d83ccb468 +Block 0016 [113]: 9dbf8877c737acc7 +Block 0016 [114]: 5808636bf5dfec55 +Block 0016 [115]: b5d700579728717b +Block 0016 [116]: 9c9a0bdb324f4ec5 +Block 0016 [117]: 11bddc88463a56d3 +Block 0016 [118]: f5cf8247b6af1ff6 +Block 0016 [119]: cd2463cce0e4c423 +Block 0016 [120]: d78e5dc71540157e +Block 0016 [121]: 045815154efbdecc +Block 0016 [122]: b9cb3f0e83d30af0 +Block 0016 [123]: 803fd63d9ff39d87 +Block 0016 [124]: 372cad617ab2e088 +Block 0016 [125]: 9fc7449aef3171c6 +Block 0016 [126]: 949f1546def1e4e5 +Block 0016 [127]: 7ff68880ad3e4171 +Block 0017 [ 0]: 17bc51246a97bfe8 +Block 0017 [ 1]: 7c307392a89164be +Block 0017 [ 2]: 3bd25ce4dd817fdd +Block 0017 [ 3]: 060ac5b552a17caf +Block 0017 [ 4]: f4e5cb5ec952721c +Block 0017 [ 5]: f40a02b23dacf1ed +Block 0017 [ 6]: cc7916b0003b7715 +Block 0017 [ 7]: fc024a28346e29d2 +Block 0017 [ 8]: 853a0213a4bba254 +Block 0017 [ 9]: 86458aa39e26fb79 +Block 0017 [ 10]: d0c5986ee2a8b77c +Block 0017 [ 11]: b7e9a2067e41b9dc +Block 0017 [ 12]: 1480f8731540a9a5 +Block 0017 [ 13]: a611565fa40d4e17 +Block 0017 [ 14]: ed2165f337d3254f +Block 0017 [ 15]: 9a2ca8e3b872f068 +Block 0017 [ 16]: 2a8dcea98d5ca8e1 +Block 0017 [ 17]: 46588793c6ee55b7 +Block 0017 [ 18]: ce760091c665de69 +Block 0017 [ 19]: 4df6fd4c724c3c02 +Block 0017 [ 20]: e3d5e35e793d4938 +Block 0017 [ 21]: cbc479714ea420e4 +Block 0017 [ 22]: ca4cf169361fc3ae +Block 0017 [ 23]: 6e0ff7647dbee083 +Block 0017 [ 24]: 2a77fbb07ea0868b +Block 0017 [ 25]: e2269c613372f038 +Block 0017 [ 26]: d5c9a67fb1bd36cf +Block 0017 [ 27]: 94e6f478c6bad422 +Block 0017 [ 28]: 73d510ad54eab733 +Block 0017 [ 29]: f407ddfecc8746da +Block 0017 [ 30]: 39d0482ea9dad35d +Block 0017 [ 31]: 734ce00d891aa7ec +Block 0017 [ 32]: 1a6c74ee238502c1 +Block 0017 [ 33]: 0fcc8fa05bcc224e +Block 0017 [ 34]: ad32b509d3d19c3d +Block 0017 [ 35]: bb9b95df60ffb63d +Block 0017 [ 36]: 8bffc2455c34f2c0 +Block 0017 [ 37]: d6f5ef776360eee9 +Block 0017 [ 38]: 21659782e3299c20 +Block 0017 [ 39]: ec7ac42b913b8806 +Block 0017 [ 40]: 9314f0c2971f9ec0 +Block 0017 [ 41]: 5340aba1b3895424 +Block 0017 [ 42]: d4724e17d3e2e403 +Block 0017 [ 43]: dcfe96954d356b40 +Block 0017 [ 44]: d5262bbc7d9d9e42 +Block 0017 [ 45]: a983ed3013d9715b +Block 0017 [ 46]: 1d6ac87ef06ee57d +Block 0017 [ 47]: 8416641ced13f76e +Block 0017 [ 48]: 1e72c0a977c6f809 +Block 0017 [ 49]: a6c0a7b48524e94a +Block 0017 [ 50]: a8d4d8f0b5b1ee56 +Block 0017 [ 51]: 06951457a0cde01f +Block 0017 [ 52]: 17a8f30ddab4fe10 +Block 0017 [ 53]: 41a5c0de05cb6849 +Block 0017 [ 54]: 7d6e61695eb13641 +Block 0017 [ 55]: aef78a53d6f9c52e +Block 0017 [ 56]: d0a9b02db118488a +Block 0017 [ 57]: f9f3148df06e460f +Block 0017 [ 58]: ba54c9d7da37026c +Block 0017 [ 59]: 813043bb6263b64a +Block 0017 [ 60]: 01e8ed3940b3a653 +Block 0017 [ 61]: 95600d5f7b6e4d77 +Block 0017 [ 62]: 51b3fc67c6a0ea2a +Block 0017 [ 63]: a4bb04ccc8265b11 +Block 0017 [ 64]: 0ab034f465cc0813 +Block 0017 [ 65]: e405436951fc79ab +Block 0017 [ 66]: 3ffbc05b9fcdeb7a +Block 0017 [ 67]: 28a0287c2941a2fc +Block 0017 [ 68]: 5bf655516a93e471 +Block 0017 [ 69]: a52095c9bd7237c3 +Block 0017 [ 70]: 7bb4ba223bee1011 +Block 0017 [ 71]: 50948fc7c91590af +Block 0017 [ 72]: 6ca4a3345a4f0106 +Block 0017 [ 73]: fae756af4dda49f6 +Block 0017 [ 74]: c39806c4c73bf1f1 +Block 0017 [ 75]: b9b643d55df8b682 +Block 0017 [ 76]: eea591b9d94795b0 +Block 0017 [ 77]: 88f24f15d82df6c0 +Block 0017 [ 78]: 1d35dc2e5f49fb41 +Block 0017 [ 79]: 5916da9d7b572428 +Block 0017 [ 80]: 180ba1758293cd85 +Block 0017 [ 81]: 5a6735d12f2982fe +Block 0017 [ 82]: dd921fc0eee69756 +Block 0017 [ 83]: e0771b3f026dbabf +Block 0017 [ 84]: 6df839ab1ce96516 +Block 0017 [ 85]: 72ec1c04a9fdc1a2 +Block 0017 [ 86]: e0c95b2b94db0792 +Block 0017 [ 87]: a8642ff38ac9e870 +Block 0017 [ 88]: b110669b3d07ea33 +Block 0017 [ 89]: 2d8aa2a78f93c49f +Block 0017 [ 90]: b5a40d81a59f5ef8 +Block 0017 [ 91]: 70d2112c6066451f +Block 0017 [ 92]: 8417e0871fac12c6 +Block 0017 [ 93]: c38c9899e8edcdf8 +Block 0017 [ 94]: ce9590f30ff53347 +Block 0017 [ 95]: 6895d4878d62caf9 +Block 0017 [ 96]: 262535b134187242 +Block 0017 [ 97]: a0deecfbbbe86396 +Block 0017 [ 98]: 1ee3e87369ad6e5c +Block 0017 [ 99]: eb6d2adec6c431cd +Block 0017 [100]: 76d98fffc6de3f84 +Block 0017 [101]: f47b69b4f56db042 +Block 0017 [102]: f0123fbf21b74be5 +Block 0017 [103]: e82156d144a42e08 +Block 0017 [104]: b96dfd6e82865304 +Block 0017 [105]: 2b65b6f8bf85aa49 +Block 0017 [106]: 43784bb1d195eadd +Block 0017 [107]: 8e65dd65aca567b8 +Block 0017 [108]: ea9c8c9e75172184 +Block 0017 [109]: 8aadae18a51aadd6 +Block 0017 [110]: ad11911ba95b3a14 +Block 0017 [111]: e3244be33fcbb3a7 +Block 0017 [112]: 80fbed869132d4ff +Block 0017 [113]: 4156c7bdac7fb574 +Block 0017 [114]: 4a5e0ebfdc6185d5 +Block 0017 [115]: 808ffed756ed20ff +Block 0017 [116]: 423276097e8ee14f +Block 0017 [117]: 26a7de2148a76179 +Block 0017 [118]: b02275a467bca390 +Block 0017 [119]: 7646106b9071629a +Block 0017 [120]: 5b6c21a823ff65de +Block 0017 [121]: 3add52a1b76d989a +Block 0017 [122]: df9f28f504111275 +Block 0017 [123]: 7cac15fedd243ed5 +Block 0017 [124]: eb26ae42cf401b70 +Block 0017 [125]: 59ee7e4ee4833712 +Block 0017 [126]: a1e2bc7f1348749c +Block 0017 [127]: 98dca4163fdca5c8 +Block 0018 [ 0]: d084772fe184585c +Block 0018 [ 1]: b7a71a5c80ee84e4 +Block 0018 [ 2]: a483de7b04caaa0b +Block 0018 [ 3]: ccf118ab7d75e9b9 +Block 0018 [ 4]: 77853b81dbf3be54 +Block 0018 [ 5]: 5c20332b42ade752 +Block 0018 [ 6]: 1b732b6811dcea0a +Block 0018 [ 7]: 4a3d6efac28e3d78 +Block 0018 [ 8]: d14a43c694fc46ee +Block 0018 [ 9]: b3d3dabbb3287e12 +Block 0018 [ 10]: 358d5c7f1c7eec24 +Block 0018 [ 11]: 12b8d5a8c5df0034 +Block 0018 [ 12]: 131ff3fe443d313b +Block 0018 [ 13]: 00acf1cff6c323cf +Block 0018 [ 14]: 8838c79d58713e79 +Block 0018 [ 15]: 1aefe3b69e1ccf27 +Block 0018 [ 16]: 8fc035f26b129484 +Block 0018 [ 17]: febf943bfe6b4f27 +Block 0018 [ 18]: 17763060ae755bfa +Block 0018 [ 19]: 928cd6c24615587e +Block 0018 [ 20]: d05d9f8434053cc9 +Block 0018 [ 21]: 6b2ca6e171e4ed5b +Block 0018 [ 22]: 0572ce2d3cf14a9d +Block 0018 [ 23]: 7a61ce4a2c246662 +Block 0018 [ 24]: 605742a341eb3985 +Block 0018 [ 25]: a753887d0eb40761 +Block 0018 [ 26]: bd0f8da298d9c1b7 +Block 0018 [ 27]: 00596e2557f7f475 +Block 0018 [ 28]: 22a1329d12efeb77 +Block 0018 [ 29]: 0e626cb6fbfb5970 +Block 0018 [ 30]: dc8d9697877c7c19 +Block 0018 [ 31]: 005a226a1279357f +Block 0018 [ 32]: c4e5947af0e6deca +Block 0018 [ 33]: 94d569d17b1e6f67 +Block 0018 [ 34]: de386d45c5f3224d +Block 0018 [ 35]: 01403b1912e12590 +Block 0018 [ 36]: 00326afc95f0821c +Block 0018 [ 37]: 43dd6cae3a1686cf +Block 0018 [ 38]: 57ad2a4169aff5f6 +Block 0018 [ 39]: f0d13dbcf2539637 +Block 0018 [ 40]: 2af4dee0883f6264 +Block 0018 [ 41]: c372bb4b2347b981 +Block 0018 [ 42]: f8355df82fd6e1e5 +Block 0018 [ 43]: 62f87bd55f1766fb +Block 0018 [ 44]: 7d09765dc41d0f6c +Block 0018 [ 45]: b4ef9dff26945262 +Block 0018 [ 46]: 30c988904e8f9bc7 +Block 0018 [ 47]: 778b20a07139015a +Block 0018 [ 48]: 57337400114a4f22 +Block 0018 [ 49]: 607be229edbde71b +Block 0018 [ 50]: 0b40abc4ed7d31e9 +Block 0018 [ 51]: 8b7fed47f43ebb51 +Block 0018 [ 52]: a7e464184f6c95d9 +Block 0018 [ 53]: c6231982c1921464 +Block 0018 [ 54]: 5e758c90ff72fd07 +Block 0018 [ 55]: 37b5cc5e18198231 +Block 0018 [ 56]: 21528056165f24af +Block 0018 [ 57]: c74644315731a372 +Block 0018 [ 58]: 503f171f2ea0db88 +Block 0018 [ 59]: 0f584869dd54f31e +Block 0018 [ 60]: c10466c393cc5be7 +Block 0018 [ 61]: 24e7a034f6ad5fe0 +Block 0018 [ 62]: 0196a0f69cdae74e +Block 0018 [ 63]: 3c271b723ff0c33c +Block 0018 [ 64]: 36577195709ea2ec +Block 0018 [ 65]: e0951bce093b31ba +Block 0018 [ 66]: 6c0a54fa572e54da +Block 0018 [ 67]: 448a72ac125c2e9f +Block 0018 [ 68]: 4613c81ca1d46bcb +Block 0018 [ 69]: bee31e192f200f01 +Block 0018 [ 70]: a6cf318b6393bc81 +Block 0018 [ 71]: 7628622d5df2a701 +Block 0018 [ 72]: 04015c4ecfcf9bfe +Block 0018 [ 73]: 2071eebdf355667b +Block 0018 [ 74]: 86610a505283627d +Block 0018 [ 75]: 2b2a880964250e32 +Block 0018 [ 76]: 7121473b76166136 +Block 0018 [ 77]: 09d4a66876d0e7a0 +Block 0018 [ 78]: e4743e35c5c2eaab +Block 0018 [ 79]: 646868b26a9c4594 +Block 0018 [ 80]: 8dac159f6186bf69 +Block 0018 [ 81]: 380546891bd4c666 +Block 0018 [ 82]: 1720354bc9f61fc6 +Block 0018 [ 83]: 98e09f5f28637dd2 +Block 0018 [ 84]: 0420311ec175f586 +Block 0018 [ 85]: 516caaad13a66966 +Block 0018 [ 86]: 84e653e235fd0ffc +Block 0018 [ 87]: 2c1e232cfceb2e15 +Block 0018 [ 88]: 8822ab2668064755 +Block 0018 [ 89]: c7a99e8a5ff6bca0 +Block 0018 [ 90]: d98d6bb5829a56c6 +Block 0018 [ 91]: 19ae3576f64a5fff +Block 0018 [ 92]: effb8092b1f6f935 +Block 0018 [ 93]: 09ec59b5392d58d0 +Block 0018 [ 94]: 3a4ae1a0c6b596f4 +Block 0018 [ 95]: 86945defe7b4c6bf +Block 0018 [ 96]: 6bef6ff460e42e62 +Block 0018 [ 97]: c49b80acbc65b852 +Block 0018 [ 98]: 8b2d1c4baf8c075f +Block 0018 [ 99]: 7e3f7bf10f525d6f +Block 0018 [100]: ee9d6f757d30a1aa +Block 0018 [101]: 589a2046727cc440 +Block 0018 [102]: 53491fc1647a4e0a +Block 0018 [103]: ce68ea7fb20ead43 +Block 0018 [104]: 4dd0de9bfad115f3 +Block 0018 [105]: 6b0f8b8425f2b5a0 +Block 0018 [106]: c44db4c514acfc14 +Block 0018 [107]: e6dd1022bf14c48d +Block 0018 [108]: d8711234f656ce8a +Block 0018 [109]: 08bf8dec13ff93d2 +Block 0018 [110]: 0ff665e0275941d6 +Block 0018 [111]: 01e8c370456c3eb1 +Block 0018 [112]: eca303a81bc07867 +Block 0018 [113]: 6c1f9fd5e1cf7c28 +Block 0018 [114]: cecf8cd3e55e50ca +Block 0018 [115]: 6d791fb10089b0d7 +Block 0018 [116]: ba1c16d4628c8ac2 +Block 0018 [117]: 0add2f746a15fde5 +Block 0018 [118]: b8b1c169cec54425 +Block 0018 [119]: 2118f7b75c8eec10 +Block 0018 [120]: 62a698a86fdbea7c +Block 0018 [121]: d1f445354accf76f +Block 0018 [122]: 54a5ad09cfff950e +Block 0018 [123]: 321b3438f579b51e +Block 0018 [124]: 84fab9c8f11370d6 +Block 0018 [125]: 5362ef92ccee2146 +Block 0018 [126]: 7177d9edb1502f96 +Block 0018 [127]: 69d163f02c4974ed +Block 0019 [ 0]: 3d0916ed9e833207 +Block 0019 [ 1]: 246916dfc2448d0e +Block 0019 [ 2]: 1802a650dc4cc6a7 +Block 0019 [ 3]: 11945e0300016f36 +Block 0019 [ 4]: e65fe8dc14d54a2c +Block 0019 [ 5]: 8628137392bf8e5f +Block 0019 [ 6]: a45fbfdaf581c97f +Block 0019 [ 7]: a506ce7a102c6fb3 +Block 0019 [ 8]: c364b39bbbe2accc +Block 0019 [ 9]: 47a304654d05f7a4 +Block 0019 [ 10]: e39b8615c4e06e74 +Block 0019 [ 11]: 34907f8fd543151d +Block 0019 [ 12]: 4a1759c5e83a1206 +Block 0019 [ 13]: 6778a6195c965d45 +Block 0019 [ 14]: 9af9889bcb643739 +Block 0019 [ 15]: d756d62aa2e25a04 +Block 0019 [ 16]: 827dba7101e28106 +Block 0019 [ 17]: 3b0e46ba9b3c39cf +Block 0019 [ 18]: f1f38f90e67e5fe3 +Block 0019 [ 19]: 2c6cf41c1873dc3d +Block 0019 [ 20]: 48d9dc8fc1fd0d05 +Block 0019 [ 21]: 984cfb30aee058f7 +Block 0019 [ 22]: dba6c35650569ef6 +Block 0019 [ 23]: 05758ff526281ff8 +Block 0019 [ 24]: dea551321b133c9b +Block 0019 [ 25]: 2d2febfe90cc21c8 +Block 0019 [ 26]: 2a5ab9b4cf66466b +Block 0019 [ 27]: e8c8736b1118fe0f +Block 0019 [ 28]: 906569f6cebdd903 +Block 0019 [ 29]: 48977b0e03cc7acd +Block 0019 [ 30]: 392c1604e5e25847 +Block 0019 [ 31]: 0f3a782d67e75dc0 +Block 0019 [ 32]: 72ace7605024c74f +Block 0019 [ 33]: a1b1ecc0efb8d5ee +Block 0019 [ 34]: ea272ed7f31981bd +Block 0019 [ 35]: 92cde2b4d0a00a22 +Block 0019 [ 36]: 4de44e29a20cc050 +Block 0019 [ 37]: a14abcc63ff548c1 +Block 0019 [ 38]: 86af7968efed7819 +Block 0019 [ 39]: fa7b27ea7592d525 +Block 0019 [ 40]: 88386f081e59a92b +Block 0019 [ 41]: 2dbf4cae55ea74af +Block 0019 [ 42]: a7c4d6d44b7779db +Block 0019 [ 43]: 8fcceeab46f56dff +Block 0019 [ 44]: bf2701da005989d8 +Block 0019 [ 45]: 3885da5bfebc498f +Block 0019 [ 46]: 886c978a342d26ff +Block 0019 [ 47]: 5627e56d96e81ac6 +Block 0019 [ 48]: ae4e19022c09db70 +Block 0019 [ 49]: 8385a5556e4f951b +Block 0019 [ 50]: 2942868c20dff7ab +Block 0019 [ 51]: 7119533db3aedbf2 +Block 0019 [ 52]: 5707c74688cee744 +Block 0019 [ 53]: 511343dee334a23d +Block 0019 [ 54]: 6cd09da27c938bdc +Block 0019 [ 55]: c77e4714dcf668d3 +Block 0019 [ 56]: 767c11648d06b8f6 +Block 0019 [ 57]: deccdf769bef9089 +Block 0019 [ 58]: 455a5f824ffbc916 +Block 0019 [ 59]: 6c0fa714f83aec15 +Block 0019 [ 60]: cea560f5e6dc9218 +Block 0019 [ 61]: 87615693e82231f7 +Block 0019 [ 62]: 7abb05196b159d93 +Block 0019 [ 63]: f1968b8b3ac9bd54 +Block 0019 [ 64]: 0f5b76884a66ac19 +Block 0019 [ 65]: 593634c801741fb6 +Block 0019 [ 66]: 36fe94fdcac45f59 +Block 0019 [ 67]: 1260f8fe84cd160d +Block 0019 [ 68]: 63da6183ad0a643a +Block 0019 [ 69]: 5b27fbbda96e7ab4 +Block 0019 [ 70]: da3fec81f2e9218b +Block 0019 [ 71]: 5097727f0becde66 +Block 0019 [ 72]: 188d05de76951b8f +Block 0019 [ 73]: d654e94ccbd8d0ec +Block 0019 [ 74]: c1ea500224a941e0 +Block 0019 [ 75]: 1adc6cc4b1c7654f +Block 0019 [ 76]: 723738ebddeeda77 +Block 0019 [ 77]: 258540fd5b39a123 +Block 0019 [ 78]: bf8e0e3022f84c86 +Block 0019 [ 79]: d5d7e843a792f503 +Block 0019 [ 80]: 861c3f6650784c73 +Block 0019 [ 81]: ec58f0a9f36f6bf2 +Block 0019 [ 82]: 9fed771a57dd20cd +Block 0019 [ 83]: 79228975a1ad1a4b +Block 0019 [ 84]: 2f9d09811d3349db +Block 0019 [ 85]: 796ad44e7586692d +Block 0019 [ 86]: ab1191e9410f68fb +Block 0019 [ 87]: 1128ee882c6af04a +Block 0019 [ 88]: 73f57bf6cf9dc609 +Block 0019 [ 89]: dff741812d32401b +Block 0019 [ 90]: ea12d97dc9dc03fd +Block 0019 [ 91]: f50f4ad7c6e7abc6 +Block 0019 [ 92]: 688d13caa19ef5fe +Block 0019 [ 93]: 1dbaaf3ff5ad791b +Block 0019 [ 94]: 2884de8faece0a70 +Block 0019 [ 95]: 0c38bf887f4d311a +Block 0019 [ 96]: 95b004d9b0337a97 +Block 0019 [ 97]: 0ce5642f30645a2d +Block 0019 [ 98]: 8c7b39377deaadb4 +Block 0019 [ 99]: adce80468faaf392 +Block 0019 [100]: b7dc1859f20cbbc7 +Block 0019 [101]: 382d7f0d3d6cfe40 +Block 0019 [102]: abf0c8ef57ecb5d1 +Block 0019 [103]: 2b966db4075b3bf4 +Block 0019 [104]: c3868f4576df0661 +Block 0019 [105]: a56bc51175ea255c +Block 0019 [106]: 432656f6cf6ab332 +Block 0019 [107]: ec96141cdf52aa98 +Block 0019 [108]: 26e75ed39252d5ad +Block 0019 [109]: 1e6b75aaa66dab60 +Block 0019 [110]: 5fc14959a0021118 +Block 0019 [111]: 2832c47a618f6549 +Block 0019 [112]: ba03b67a60002625 +Block 0019 [113]: 200f5ce345022e08 +Block 0019 [114]: 0d82c4c459db15f2 +Block 0019 [115]: 344074f5390b7ddc +Block 0019 [116]: c320f898546a4174 +Block 0019 [117]: 430d1e2d1be316b2 +Block 0019 [118]: 8dceddf10c9e569a +Block 0019 [119]: 8122ec86dc334421 +Block 0019 [120]: e2758de2b61ec590 +Block 0019 [121]: c68f8b9d8c8cc491 +Block 0019 [122]: 42685a32054bd9b3 +Block 0019 [123]: e53de9a8050a4ad6 +Block 0019 [124]: 6330cbef475c6b1a +Block 0019 [125]: eccf64a43197e265 +Block 0019 [126]: 7c0b1667cb1e0562 +Block 0019 [127]: 141bb29376e7011d +Block 0020 [ 0]: f9c9c5dda18a6965 +Block 0020 [ 1]: b690a36c14cbd868 +Block 0020 [ 2]: 163c4705e87b13b6 +Block 0020 [ 3]: 929a86fe2df99e80 +Block 0020 [ 4]: 28e33d0ff638ceb0 +Block 0020 [ 5]: ab48f32887082c70 +Block 0020 [ 6]: b59ab6eb7f42f485 +Block 0020 [ 7]: e2622758fd7c67e6 +Block 0020 [ 8]: a4a71160bfb71c73 +Block 0020 [ 9]: 9b4925d44839e634 +Block 0020 [ 10]: 0340e91a9f6c3090 +Block 0020 [ 11]: b1a00bfc86641292 +Block 0020 [ 12]: 4759310f15b591b7 +Block 0020 [ 13]: 9091b33e75707188 +Block 0020 [ 14]: 81a4d0d991e6cd4d +Block 0020 [ 15]: 0efc2412ca9c947b +Block 0020 [ 16]: 8d26b3f7dce089b2 +Block 0020 [ 17]: f1da8900bcf32fa4 +Block 0020 [ 18]: 5ec8949e5eba513e +Block 0020 [ 19]: 4bff9e41de6e8843 +Block 0020 [ 20]: 515ce37f89dc28dc +Block 0020 [ 21]: e7ba4aee5acb5cd3 +Block 0020 [ 22]: c1d8c42c9fc6892b +Block 0020 [ 23]: 8b4011f6641bd2f6 +Block 0020 [ 24]: 9ab0113ecbf2a1a7 +Block 0020 [ 25]: 993cd18ecb74bcc1 +Block 0020 [ 26]: c335d78612d4a36c +Block 0020 [ 27]: eefc0b1d1a926985 +Block 0020 [ 28]: f875802c6f495962 +Block 0020 [ 29]: e4223bfc4a2b65dd +Block 0020 [ 30]: 08880db04b44e9ee +Block 0020 [ 31]: a332263240c1cac8 +Block 0020 [ 32]: 9fa737c30707186b +Block 0020 [ 33]: 595227e9b79d9a88 +Block 0020 [ 34]: 57a2008021d20e48 +Block 0020 [ 35]: a58eab22c505e4bf +Block 0020 [ 36]: f0109b2e88f6fb85 +Block 0020 [ 37]: c75d08e197165e56 +Block 0020 [ 38]: ec954f3f90eec8f0 +Block 0020 [ 39]: dbc876da2eb7cb3a +Block 0020 [ 40]: 5bbf9ea8ab943e25 +Block 0020 [ 41]: 20940bc2fa5e8391 +Block 0020 [ 42]: e7c829fca1e7f482 +Block 0020 [ 43]: d3ebf89ce06b9252 +Block 0020 [ 44]: 8a47b9736b1182fe +Block 0020 [ 45]: c729ce9f350718a9 +Block 0020 [ 46]: cdd723f353a00bca +Block 0020 [ 47]: 54dfa84d908b15a9 +Block 0020 [ 48]: 7fa23409fbe36687 +Block 0020 [ 49]: 5976fc7c4ae89b79 +Block 0020 [ 50]: c3bfee4f92c6dea4 +Block 0020 [ 51]: 70d69740726f23eb +Block 0020 [ 52]: e18c2b2e22c7e5c9 +Block 0020 [ 53]: 5ea08ab2df6f8a2b +Block 0020 [ 54]: 7063ae1ab581e206 +Block 0020 [ 55]: a5d6adfdfc22dda9 +Block 0020 [ 56]: 2d89c11429ccfdbc +Block 0020 [ 57]: 37db3754f2a57c26 +Block 0020 [ 58]: 1340fac6eb112a2c +Block 0020 [ 59]: 30189af6af800d0d +Block 0020 [ 60]: 6d611bd46ad93afc +Block 0020 [ 61]: 65ece3082d0a0bf7 +Block 0020 [ 62]: 155d2cb0a797a797 +Block 0020 [ 63]: 290f6f5c75189bdb +Block 0020 [ 64]: 2c9e04cc29a5f253 +Block 0020 [ 65]: 199eb8571717b01a +Block 0020 [ 66]: 8b22891284d0caa1 +Block 0020 [ 67]: 0a3c890819a97540 +Block 0020 [ 68]: 560bd8306af411b2 +Block 0020 [ 69]: 2fc338aa51fc1060 +Block 0020 [ 70]: 864a9eb237755447 +Block 0020 [ 71]: deb4c74af8f2eb0e +Block 0020 [ 72]: 0bf2c92928b99c42 +Block 0020 [ 73]: 4962cd509c4f2c3b +Block 0020 [ 74]: c89be72654913596 +Block 0020 [ 75]: a60eadb82746d5af +Block 0020 [ 76]: b3326e39ca57e78c +Block 0020 [ 77]: e6a6a9bebedcc84d +Block 0020 [ 78]: b667858af3138308 +Block 0020 [ 79]: dfeda5d85bbdcfee +Block 0020 [ 80]: d919b7578b76d74e +Block 0020 [ 81]: 850284e391722b19 +Block 0020 [ 82]: b03d2baa35837efa +Block 0020 [ 83]: a209abae24213ed5 +Block 0020 [ 84]: 49d5ac9f0fb11d32 +Block 0020 [ 85]: 69ea2a245f5c1813 +Block 0020 [ 86]: b11db3d63ceec6a9 +Block 0020 [ 87]: 8ef660c90b176663 +Block 0020 [ 88]: f26147a27dda57e2 +Block 0020 [ 89]: ed2b6911130346ac +Block 0020 [ 90]: b7a6fb331da0dab5 +Block 0020 [ 91]: 43c39f32728e46ae +Block 0020 [ 92]: 27eff7a0e2eff334 +Block 0020 [ 93]: 58714734110f1ed5 +Block 0020 [ 94]: 8e9501c8857d00fa +Block 0020 [ 95]: a09bed917512854d +Block 0020 [ 96]: a55609989993a5cf +Block 0020 [ 97]: a742b1aac4f486b3 +Block 0020 [ 98]: 1b64f3fbf7325e76 +Block 0020 [ 99]: 7116e730adff7f4f +Block 0020 [100]: 0c51d67ee841778f +Block 0020 [101]: 3bf13731bb2d6bf7 +Block 0020 [102]: 4a9352b8d776d47d +Block 0020 [103]: f6d78f9788bec749 +Block 0020 [104]: 8f1287aba7db6f4a +Block 0020 [105]: 0f10efdc8298ef68 +Block 0020 [106]: fae8d4b151fc557a +Block 0020 [107]: 8c5d238cd00d1e84 +Block 0020 [108]: ae1fba74cc6295c3 +Block 0020 [109]: 62ccae0639dc4631 +Block 0020 [110]: 6763e3e83f9959f3 +Block 0020 [111]: 813fb0a090e8d241 +Block 0020 [112]: 16d2ba6082843b5a +Block 0020 [113]: cf81b8308f4180b8 +Block 0020 [114]: 5bfbf79b1cc15285 +Block 0020 [115]: 7a64046d593d0c69 +Block 0020 [116]: fbf6a2343475bf5e +Block 0020 [117]: c0369ef57773309f +Block 0020 [118]: 18989bc4213e408c +Block 0020 [119]: 0538d61079e129a1 +Block 0020 [120]: c9ac59192ce92126 +Block 0020 [121]: 5556cce49cdc8ca3 +Block 0020 [122]: 17582f4977b56e48 +Block 0020 [123]: ea46273c59909883 +Block 0020 [124]: c1d1028489caba25 +Block 0020 [125]: a03a95f0ca25aefd +Block 0020 [126]: 05248c8fad679a3b +Block 0020 [127]: c460ffc0cdb31374 +Block 0021 [ 0]: 56e3d6cdc1058695 +Block 0021 [ 1]: 84d273510bffaa1d +Block 0021 [ 2]: 3ee27baf0003ffac +Block 0021 [ 3]: 17a56cc4ce43d1ad +Block 0021 [ 4]: eada1378b12c5b88 +Block 0021 [ 5]: bc5f12ec4fe0b98d +Block 0021 [ 6]: 863a9703fada5f2e +Block 0021 [ 7]: 4b74ea1dadc6e075 +Block 0021 [ 8]: 4df4976a127b8c34 +Block 0021 [ 9]: 2a589bae3f2f325f +Block 0021 [ 10]: ede299cc94e319c2 +Block 0021 [ 11]: 399d90f13a456d69 +Block 0021 [ 12]: 130c6e1fe2abf0f0 +Block 0021 [ 13]: d1229c11837a9c4e +Block 0021 [ 14]: d6847938c2a676eb +Block 0021 [ 15]: 677b2013e7dca300 +Block 0021 [ 16]: e9dd6c608bdd778b +Block 0021 [ 17]: 1b7147ac56de72f2 +Block 0021 [ 18]: 89e826683c323bf7 +Block 0021 [ 19]: 9b717e27007eeadb +Block 0021 [ 20]: f6e2a5be9bdc79f4 +Block 0021 [ 21]: 8a0b776dfbf2e02d +Block 0021 [ 22]: 6a961a882c9f1687 +Block 0021 [ 23]: 6f88a8233e259f64 +Block 0021 [ 24]: ead97b9ca691db31 +Block 0021 [ 25]: faaeeb04aa749d17 +Block 0021 [ 26]: c193caf83958f1a7 +Block 0021 [ 27]: 66ab1fc224c3b601 +Block 0021 [ 28]: bb43dc26d220b518 +Block 0021 [ 29]: e6dfc133b81dd628 +Block 0021 [ 30]: 6412a2acc78546d3 +Block 0021 [ 31]: 5caeeb9893888a44 +Block 0021 [ 32]: c8ad13c366fd6925 +Block 0021 [ 33]: 46474cc5bcbbad2b +Block 0021 [ 34]: 4d2012ac62d01d1a +Block 0021 [ 35]: 02202cc48c295cd8 +Block 0021 [ 36]: e5bd0cf27cc1a946 +Block 0021 [ 37]: 11fc8ea2f1af1294 +Block 0021 [ 38]: 5a1b503fe205d2c6 +Block 0021 [ 39]: 7dcfd7e8d37da7ff +Block 0021 [ 40]: daa02c5de85539ca +Block 0021 [ 41]: 2ef385aa290e2ffe +Block 0021 [ 42]: ec75f049b0c8bdd5 +Block 0021 [ 43]: 55086dcd60af2011 +Block 0021 [ 44]: 75bd4d45c5e74ae5 +Block 0021 [ 45]: 965897eb57f8eb5c +Block 0021 [ 46]: 427a52c3117476a5 +Block 0021 [ 47]: 2bb17fb421557439 +Block 0021 [ 48]: 613b7590b307f22f +Block 0021 [ 49]: 6b495b70ddaa6da9 +Block 0021 [ 50]: 8e035b4816af8019 +Block 0021 [ 51]: c22c82ddd9307ca1 +Block 0021 [ 52]: f2b817657210a745 +Block 0021 [ 53]: c35a72e9a6988cff +Block 0021 [ 54]: 49f30739d3b82d52 +Block 0021 [ 55]: 0a17decbc52dff3a +Block 0021 [ 56]: 9f09e1919fd18160 +Block 0021 [ 57]: f0133f28990d7c4a +Block 0021 [ 58]: 419824662919cae7 +Block 0021 [ 59]: e7025ec193302b60 +Block 0021 [ 60]: c36526923f11a314 +Block 0021 [ 61]: 0c79d97e27b889fe +Block 0021 [ 62]: 25a2c335ba84ada1 +Block 0021 [ 63]: ef4599d4390f42fb +Block 0021 [ 64]: 6a692ab692937aea +Block 0021 [ 65]: 8e92553f9bd587cc +Block 0021 [ 66]: c264f7ce2573326c +Block 0021 [ 67]: 1e110f26b0f028ca +Block 0021 [ 68]: 84feb398a69d30bc +Block 0021 [ 69]: 57066cdb0dd73bce +Block 0021 [ 70]: 131362f400566a4c +Block 0021 [ 71]: 1315c6beb6c3bf4b +Block 0021 [ 72]: 26aaaefc0ebff4d1 +Block 0021 [ 73]: a358eb15b2793ed2 +Block 0021 [ 74]: 02528da64402b96a +Block 0021 [ 75]: 7873f04aaaf20566 +Block 0021 [ 76]: 18848e03d5666413 +Block 0021 [ 77]: 03810f21b747d2da +Block 0021 [ 78]: 07a3bdd3385164db +Block 0021 [ 79]: e22ceea12176eab8 +Block 0021 [ 80]: 0b11b5e67cb86402 +Block 0021 [ 81]: fdbbb3e8d2d3c03a +Block 0021 [ 82]: 8c46ebdc1827bae5 +Block 0021 [ 83]: ebccc5f84e5bff07 +Block 0021 [ 84]: af9bb087253c48ec +Block 0021 [ 85]: bc858f152ef33f92 +Block 0021 [ 86]: d2f1ac013a227a55 +Block 0021 [ 87]: 3c20350c794aa4f6 +Block 0021 [ 88]: fdf399df49e450c4 +Block 0021 [ 89]: f37fb06fd2dd4c22 +Block 0021 [ 90]: fea8ab9a0a146a3e +Block 0021 [ 91]: 17355110050bddd3 +Block 0021 [ 92]: 422b1207f671670a +Block 0021 [ 93]: 530ddc77b6d64cc8 +Block 0021 [ 94]: ecba5ec654e4c582 +Block 0021 [ 95]: 54e0209c70a11ffe +Block 0021 [ 96]: 5c4cd04463205db2 +Block 0021 [ 97]: bcc35736a824f54b +Block 0021 [ 98]: dc43c322ec2d8a84 +Block 0021 [ 99]: f5613764992f37dd +Block 0021 [100]: e0a6ceb0583eef8f +Block 0021 [101]: 804eacf20c63f8a4 +Block 0021 [102]: 6e3806866f273a61 +Block 0021 [103]: b0c227e201485667 +Block 0021 [104]: f9fc0f92f9bedcac +Block 0021 [105]: fccafd379e9f12ef +Block 0021 [106]: 05ae07dec96f9eb0 +Block 0021 [107]: fd15d9577c4ea8e4 +Block 0021 [108]: 1a4e61a28ff11004 +Block 0021 [109]: a4872d13a69a0b4c +Block 0021 [110]: 8aa4ec2f2d437813 +Block 0021 [111]: 819bfdfeaaa63f48 +Block 0021 [112]: ed5a68b009e360c4 +Block 0021 [113]: e0e8b4a7cb576db0 +Block 0021 [114]: b59c4f32dd03da00 +Block 0021 [115]: b2ad853f8f069f41 +Block 0021 [116]: ca994d65093a74bb +Block 0021 [117]: d6a367644126ff76 +Block 0021 [118]: 474bcb62a5a32578 +Block 0021 [119]: afe92b0c4a373a90 +Block 0021 [120]: 2441672629527279 +Block 0021 [121]: d48d70a936bc1f6a +Block 0021 [122]: 06c0a578a5be8cff +Block 0021 [123]: bc465df8825e63b8 +Block 0021 [124]: 009832fb2593ed52 +Block 0021 [125]: 240ea37a5b3c0898 +Block 0021 [126]: a5e6792687d94efd +Block 0021 [127]: 016f2a1a3938b59d +Block 0022 [ 0]: f28208ecaf7daa39 +Block 0022 [ 1]: 53aa8bfdd2c7a82e +Block 0022 [ 2]: 040c51ebe7130e9b +Block 0022 [ 3]: c53745bc099f0a10 +Block 0022 [ 4]: 994c0f76e52c4e70 +Block 0022 [ 5]: d10f139c2035a83f +Block 0022 [ 6]: f45c9a03e7124b1c +Block 0022 [ 7]: 509df037e7cbcdc9 +Block 0022 [ 8]: f2e5559090115b70 +Block 0022 [ 9]: 920cca40b2d82562 +Block 0022 [ 10]: ce7fd5163ff910a1 +Block 0022 [ 11]: fe32d902cb033902 +Block 0022 [ 12]: 53a99b4671e1bd64 +Block 0022 [ 13]: 3a0a6b6ee19a017d +Block 0022 [ 14]: 6db107dc01c49333 +Block 0022 [ 15]: 714519d0c9dd6df6 +Block 0022 [ 16]: 0294a739ffac2767 +Block 0022 [ 17]: be852872da6c9909 +Block 0022 [ 18]: c689b81da8b6cc7b +Block 0022 [ 19]: 5b14400973fb7d4e +Block 0022 [ 20]: 94a2733e6461bf20 +Block 0022 [ 21]: f2b7d10b078450bf +Block 0022 [ 22]: 69f891c8b44849fa +Block 0022 [ 23]: adcc4aa0504c18e8 +Block 0022 [ 24]: bf56349a07bc26e6 +Block 0022 [ 25]: 1693eb4a1a011bab +Block 0022 [ 26]: 6b918c066f8c9886 +Block 0022 [ 27]: 7c74b51fd5003283 +Block 0022 [ 28]: cd33fc82717ef356 +Block 0022 [ 29]: 9be3279650ef3317 +Block 0022 [ 30]: 1636d1c49d3d8bb8 +Block 0022 [ 31]: d4c61b5e73e94a51 +Block 0022 [ 32]: d3834f906c63ae8a +Block 0022 [ 33]: 0729d1c26cd9665e +Block 0022 [ 34]: 0a8161ec2c96e248 +Block 0022 [ 35]: c83174338be92fde +Block 0022 [ 36]: 0431c9b4e21fa8f4 +Block 0022 [ 37]: 5e0a8a900923b805 +Block 0022 [ 38]: 8291af7cc00969ab +Block 0022 [ 39]: 11112b26e731e5a7 +Block 0022 [ 40]: e06428d5143e1bd6 +Block 0022 [ 41]: 2c12d27d4339701b +Block 0022 [ 42]: 072bfc5abe95f12e +Block 0022 [ 43]: 495f489c8045a96c +Block 0022 [ 44]: ef037b259d652793 +Block 0022 [ 45]: 76e13c91d34dd109 +Block 0022 [ 46]: 27c82183818246c5 +Block 0022 [ 47]: f767637242bee843 +Block 0022 [ 48]: f901c0738c648b8e +Block 0022 [ 49]: 96a2184fb86c7895 +Block 0022 [ 50]: bd7fb979f668146f +Block 0022 [ 51]: 36dd269c0380ed7c +Block 0022 [ 52]: 24511c91ad9e13b6 +Block 0022 [ 53]: 70e978c71bc99f9a +Block 0022 [ 54]: 5ea1a65b5cebc7c9 +Block 0022 [ 55]: edc11a6b51c5cd1e +Block 0022 [ 56]: 780ada000e671454 +Block 0022 [ 57]: 119cd1b73129ac78 +Block 0022 [ 58]: 3178d12be1db151e +Block 0022 [ 59]: ce6742aa5b3f70be +Block 0022 [ 60]: 4fc9591f439bba56 +Block 0022 [ 61]: d422a0643532cca6 +Block 0022 [ 62]: 1852782dcc6ab49b +Block 0022 [ 63]: caad088aeb0fc18b +Block 0022 [ 64]: b305da56b3fc0e06 +Block 0022 [ 65]: 809d79c7bf612db4 +Block 0022 [ 66]: 37082bf7a806431a +Block 0022 [ 67]: 63a7d2e4d19e97bd +Block 0022 [ 68]: b5962ee6c2321441 +Block 0022 [ 69]: db1776121fa5afe6 +Block 0022 [ 70]: 1c53ad44ab3643b6 +Block 0022 [ 71]: 5f873f6632e08c98 +Block 0022 [ 72]: 4c20777b04117596 +Block 0022 [ 73]: ba04e67acfa757cf +Block 0022 [ 74]: c1dbca772fe70d02 +Block 0022 [ 75]: 94ade1780a3edf02 +Block 0022 [ 76]: 288d7b3743d4e61f +Block 0022 [ 77]: 9b055d1193eb5291 +Block 0022 [ 78]: 0ec0e7c91a4aaa92 +Block 0022 [ 79]: a34de8d02873eb79 +Block 0022 [ 80]: 180f8fbdb0a4cc53 +Block 0022 [ 81]: 899c5bcc0ab9f829 +Block 0022 [ 82]: 641dc8e4a42347d8 +Block 0022 [ 83]: 37397c3696b512d2 +Block 0022 [ 84]: 171da4bc79dd8334 +Block 0022 [ 85]: e778f4ce24bdcc9a +Block 0022 [ 86]: 07ed3b0c74a1cff6 +Block 0022 [ 87]: eb774f9bd5d3a786 +Block 0022 [ 88]: 7ecc8df8de9b010e +Block 0022 [ 89]: 4bc8ff96cb6c1075 +Block 0022 [ 90]: 4e87e8d5b103a61c +Block 0022 [ 91]: 6970f27c0119652b +Block 0022 [ 92]: 4dd0ec5ee21849e5 +Block 0022 [ 93]: c1605b97fb688038 +Block 0022 [ 94]: 628a8cd70fbc14ec +Block 0022 [ 95]: fcf1558cb6d49aba +Block 0022 [ 96]: bda88d1a7603641f +Block 0022 [ 97]: c57e868e6e0b3eb5 +Block 0022 [ 98]: d6209eb6dc713428 +Block 0022 [ 99]: 1941dbe12465838f +Block 0022 [100]: d93ade4fa7c6ed41 +Block 0022 [101]: c9035a14343aa4c3 +Block 0022 [102]: 3916d1588daaa456 +Block 0022 [103]: 7f2220f99db61237 +Block 0022 [104]: 170fc02232581fb8 +Block 0022 [105]: ed832e589ccc12f7 +Block 0022 [106]: 83304d94de7f62c3 +Block 0022 [107]: d668470108f6fe2d +Block 0022 [108]: d25bc5e58f55894f +Block 0022 [109]: 40844e9c014682e2 +Block 0022 [110]: aecd9fee20958744 +Block 0022 [111]: b6ce492e71f31e6b +Block 0022 [112]: 456975f1da0a7502 +Block 0022 [113]: 7fe09228d49664bb +Block 0022 [114]: 004c96474ee60f41 +Block 0022 [115]: 6e727e5c490ea0fb +Block 0022 [116]: e2d8a78f06ec4e3e +Block 0022 [117]: 35e193e5480740e4 +Block 0022 [118]: dae2a930e3764785 +Block 0022 [119]: 4e034457389b8366 +Block 0022 [120]: 19a58f91fcb3ddff +Block 0022 [121]: 3a62f251e411e180 +Block 0022 [122]: 5c669a8f9a95a0e6 +Block 0022 [123]: ee7deb9f94a0865e +Block 0022 [124]: c8d5b909868f1e4e +Block 0022 [125]: 7d0bfb7632800a9b +Block 0022 [126]: 1a88e866ade9002b +Block 0022 [127]: 079029262e56f903 +Block 0023 [ 0]: c15a8fc42b27f642 +Block 0023 [ 1]: e03a8e8631d2b5bb +Block 0023 [ 2]: 60676b51a501fd20 +Block 0023 [ 3]: 70363f1f5d0982e7 +Block 0023 [ 4]: 6e64ad1dba37c597 +Block 0023 [ 5]: 077ec82bd054088a +Block 0023 [ 6]: 5b7c4ddd1228e337 +Block 0023 [ 7]: e2447d5fe98ef4a1 +Block 0023 [ 8]: a9272395f698506e +Block 0023 [ 9]: 19674a3d25dd1c41 +Block 0023 [ 10]: 3615d79951e1ee4b +Block 0023 [ 11]: b8779be91637ea3d +Block 0023 [ 12]: 8bfd401b59f0b40b +Block 0023 [ 13]: 63d27f0efb1fbecd +Block 0023 [ 14]: 0c92f5146c1000d8 +Block 0023 [ 15]: 0b82cd63e4a90488 +Block 0023 [ 16]: f36d845ed88968e8 +Block 0023 [ 17]: e55c4a5888669a9c +Block 0023 [ 18]: e2859d86961336e7 +Block 0023 [ 19]: 09cce3cb91692d8c +Block 0023 [ 20]: d831491e7a744a7f +Block 0023 [ 21]: 845e21c8789fbe20 +Block 0023 [ 22]: 7471f20a31c0f11b +Block 0023 [ 23]: f4a98b968bbe508a +Block 0023 [ 24]: c8b373278654bd2d +Block 0023 [ 25]: f5b7753a582847fd +Block 0023 [ 26]: c6c6833fa454822b +Block 0023 [ 27]: 60a96d2b60ff8110 +Block 0023 [ 28]: 740095523a202d0d +Block 0023 [ 29]: ccd5618264c2c7d7 +Block 0023 [ 30]: 26acdbd4c51053bc +Block 0023 [ 31]: 00cee5634151956e +Block 0023 [ 32]: 6468ca3bbf126e1e +Block 0023 [ 33]: 4e0ecb735bac1923 +Block 0023 [ 34]: 058fd5d9faa97acb +Block 0023 [ 35]: b985441f8cd0aea2 +Block 0023 [ 36]: 98db7e03c4b4fa5f +Block 0023 [ 37]: fce6c028c40d31d1 +Block 0023 [ 38]: bd46a1812c2d9989 +Block 0023 [ 39]: b7b16f5a4e5a4e46 +Block 0023 [ 40]: 1620f3704a2646dc +Block 0023 [ 41]: ef6c5ecffbba17d2 +Block 0023 [ 42]: 3ad6d21b5820df63 +Block 0023 [ 43]: 5513dac83bbb0253 +Block 0023 [ 44]: c3a976704657237a +Block 0023 [ 45]: d237eb3dc895af8d +Block 0023 [ 46]: 6889cf8777a35680 +Block 0023 [ 47]: 16634fd85637e778 +Block 0023 [ 48]: f16e9eec717fc4a9 +Block 0023 [ 49]: 4e317adaefc26b67 +Block 0023 [ 50]: 85971efb7c005aed +Block 0023 [ 51]: 88bb12c5e3d8cf61 +Block 0023 [ 52]: 677ab5233b01fba4 +Block 0023 [ 53]: b0010729c7615307 +Block 0023 [ 54]: 20b7ecf44ac319a9 +Block 0023 [ 55]: eef793b98a7e61fd +Block 0023 [ 56]: 85b60099f6d0bfa5 +Block 0023 [ 57]: 9ef45c3df475e8da +Block 0023 [ 58]: a0c4e30b646b34f2 +Block 0023 [ 59]: b74229c3f8f8f116 +Block 0023 [ 60]: 6b64b642b55f4b77 +Block 0023 [ 61]: 084ff048b1ab04d3 +Block 0023 [ 62]: d375965de7bbff82 +Block 0023 [ 63]: 57786d15edce08a2 +Block 0023 [ 64]: ce78982e90708e15 +Block 0023 [ 65]: b0e39ed6c7402cc2 +Block 0023 [ 66]: 3586998fe0495f3c +Block 0023 [ 67]: 60fdadfb02cb9a8f +Block 0023 [ 68]: bb58aa898c65a14d +Block 0023 [ 69]: f17213260e0fad9a +Block 0023 [ 70]: b42b62935550b400 +Block 0023 [ 71]: 5543e77410120d07 +Block 0023 [ 72]: 8d486269dd536011 +Block 0023 [ 73]: bd4f1af4698e9cc7 +Block 0023 [ 74]: 78abd3f2e0ad6851 +Block 0023 [ 75]: 0f382abc61fd54b8 +Block 0023 [ 76]: c9fcaa40dd997fb5 +Block 0023 [ 77]: 2818fe972f636137 +Block 0023 [ 78]: dee6cde471d08bf0 +Block 0023 [ 79]: 61e74d63ce506e93 +Block 0023 [ 80]: 4119c8d5cc111e68 +Block 0023 [ 81]: b6460571b021c77a +Block 0023 [ 82]: 3682f1268469be47 +Block 0023 [ 83]: da1041b9b821500f +Block 0023 [ 84]: 42c3f149c0939593 +Block 0023 [ 85]: 2eb6fe95cd7f8f7e +Block 0023 [ 86]: 30a28f6884baf140 +Block 0023 [ 87]: fb4517a8f6f314f0 +Block 0023 [ 88]: 159d8c247a4e0906 +Block 0023 [ 89]: 91843a594cfe15cd +Block 0023 [ 90]: 9a3f9e8078b72dc3 +Block 0023 [ 91]: dbe9713f47902a9a +Block 0023 [ 92]: aa2b6e73ba3c3d0c +Block 0023 [ 93]: 451ceb1b888cbe16 +Block 0023 [ 94]: 4db42dc635c0bb34 +Block 0023 [ 95]: 1828653d95f4341b +Block 0023 [ 96]: c1299eff4a5f8047 +Block 0023 [ 97]: f897b2a772822f5b +Block 0023 [ 98]: 33fd9d8a58670737 +Block 0023 [ 99]: ce47236b3e468a36 +Block 0023 [100]: 34cd0caf09c05c00 +Block 0023 [101]: 8c91a2667a59ef7a +Block 0023 [102]: 7c89fea7f780a662 +Block 0023 [103]: dbfd76736779b2c3 +Block 0023 [104]: 1f861037bd0abc1b +Block 0023 [105]: e5d868458e43dbce +Block 0023 [106]: 1703c8c3c5f122eb +Block 0023 [107]: 47168a277b482e6f +Block 0023 [108]: 239421a6e9376e4b +Block 0023 [109]: fab879b198eac843 +Block 0023 [110]: acc5f29c207f96c3 +Block 0023 [111]: 5e0459b6cad2017d +Block 0023 [112]: d03eeb4f2ce559ec +Block 0023 [113]: e74ff3674d169a0b +Block 0023 [114]: 26076994b57ff424 +Block 0023 [115]: 38dbf73a4d1fe5a8 +Block 0023 [116]: a3b7dc4a267c7521 +Block 0023 [117]: 583d4e15f7e10c9f +Block 0023 [118]: 38cb311dbc767883 +Block 0023 [119]: d67412648b62d999 +Block 0023 [120]: a132b14a24350528 +Block 0023 [121]: 8dc4bf4893d3a381 +Block 0023 [122]: 07254e51d81a9dc0 +Block 0023 [123]: 694e27e2bca68da0 +Block 0023 [124]: 2733cbe18458a93e +Block 0023 [125]: 17133c2fc328d2d8 +Block 0023 [126]: dcc6852dbac50cdc +Block 0023 [127]: d9989bf3ec285e44 +Block 0024 [ 0]: bafc20be127345f7 +Block 0024 [ 1]: a0e105b58755375b +Block 0024 [ 2]: 1d6a71416ff67391 +Block 0024 [ 3]: 9e839dfce45172b1 +Block 0024 [ 4]: d33112aaed4852e1 +Block 0024 [ 5]: 0622aee69fcb9e97 +Block 0024 [ 6]: 5e88992880040a2f +Block 0024 [ 7]: 852b8867310e3211 +Block 0024 [ 8]: e428be753777967d +Block 0024 [ 9]: ddeef681b468aad6 +Block 0024 [ 10]: b847fd00ea092021 +Block 0024 [ 11]: fdf2d32288baece4 +Block 0024 [ 12]: bb1ecc42e2fc594c +Block 0024 [ 13]: b610bf428a5bee66 +Block 0024 [ 14]: 48683a33fe4e565b +Block 0024 [ 15]: 67416c79b45c527f +Block 0024 [ 16]: d54025dca586097a +Block 0024 [ 17]: 6903b9074305a44a +Block 0024 [ 18]: 515a74f3004d1a83 +Block 0024 [ 19]: 5e247be7152ab011 +Block 0024 [ 20]: f89524bfacae7eb7 +Block 0024 [ 21]: bf1419b938b3ebc2 +Block 0024 [ 22]: ac612be97e2535b7 +Block 0024 [ 23]: 8b4b7e35ed62efed +Block 0024 [ 24]: c4db0666691de89c +Block 0024 [ 25]: da746bb3a0ea9036 +Block 0024 [ 26]: 648e0d474d9d5edf +Block 0024 [ 27]: d6cc1c7b9481a978 +Block 0024 [ 28]: c03ead602a6f125c +Block 0024 [ 29]: 52d1e2fba64a4c05 +Block 0024 [ 30]: beac5772e0792903 +Block 0024 [ 31]: 1a0fce7643d06795 +Block 0024 [ 32]: 9cf9c86abc978ef6 +Block 0024 [ 33]: 14edb2fb446834ea +Block 0024 [ 34]: 1aff2b0a0561082e +Block 0024 [ 35]: 1bdc3688d8a49501 +Block 0024 [ 36]: 25aa17332f0a1d54 +Block 0024 [ 37]: 493d2af91f4de279 +Block 0024 [ 38]: 93911a09eab9d742 +Block 0024 [ 39]: 76b476f9d874e180 +Block 0024 [ 40]: 1adb25a2cec03ab4 +Block 0024 [ 41]: 8527203b85b693c3 +Block 0024 [ 42]: 79f3cb77c155e8c2 +Block 0024 [ 43]: 0574b0c4b99985c6 +Block 0024 [ 44]: af18733188176aeb +Block 0024 [ 45]: b42cc646d1fe6639 +Block 0024 [ 46]: 6e4ddc05a0aaaf15 +Block 0024 [ 47]: bc4478c9716532b7 +Block 0024 [ 48]: 4fcbc6dc5f29f830 +Block 0024 [ 49]: ec47edc42c40a226 +Block 0024 [ 50]: 92da9c7bd9b3241f +Block 0024 [ 51]: 8aa095b9fab99b90 +Block 0024 [ 52]: 9cf9d0b635369605 +Block 0024 [ 53]: 8c94a54ec3d3d9db +Block 0024 [ 54]: d51d82e1e5647069 +Block 0024 [ 55]: f5c340c32eeb76f7 +Block 0024 [ 56]: fa5902c7acdc4f3b +Block 0024 [ 57]: f46b2cf8e9d44be0 +Block 0024 [ 58]: 6706a878e07af770 +Block 0024 [ 59]: 6da1f034bef87d13 +Block 0024 [ 60]: 799e0a83fd490d4c +Block 0024 [ 61]: a354e01a2ad75bcd +Block 0024 [ 62]: c27358c4ac491b7d +Block 0024 [ 63]: 18ba545379367429 +Block 0024 [ 64]: 1c1c5042b0d7a965 +Block 0024 [ 65]: 6d92f7e87e591c69 +Block 0024 [ 66]: ad72b6c6fbae77a8 +Block 0024 [ 67]: 20cc0e1d83937562 +Block 0024 [ 68]: b1c5e36ea64465d8 +Block 0024 [ 69]: aef9474384eae537 +Block 0024 [ 70]: 96c55972051f16bd +Block 0024 [ 71]: f6b9fbd4c1770049 +Block 0024 [ 72]: 00063b28ba569959 +Block 0024 [ 73]: 15034e11892d2b53 +Block 0024 [ 74]: 49c65e51d1c77d3e +Block 0024 [ 75]: c6cbe3c13677dbb9 +Block 0024 [ 76]: c9278514eb23f973 +Block 0024 [ 77]: 0418e33c3d1d1d67 +Block 0024 [ 78]: eaa9823ac8ef9f1d +Block 0024 [ 79]: b808887eee920d4b +Block 0024 [ 80]: 2762abdb3a826d18 +Block 0024 [ 81]: f6bd043987950f92 +Block 0024 [ 82]: 5e953a434ff2db87 +Block 0024 [ 83]: 5357c86ca298191a +Block 0024 [ 84]: 9516f3592e6e9c8a +Block 0024 [ 85]: 8f9689fc2c705eca +Block 0024 [ 86]: 41c091bd3bed62a9 +Block 0024 [ 87]: 8f5b0f2f7bdbf769 +Block 0024 [ 88]: 728639c0f6ef9b1d +Block 0024 [ 89]: 08aede8636e79efd +Block 0024 [ 90]: a9fe4536a61be7c9 +Block 0024 [ 91]: 014e422b37f869dd +Block 0024 [ 92]: 64d1e18d22d2928f +Block 0024 [ 93]: f0106d49826a34bd +Block 0024 [ 94]: 864bb5eda4a35c1f +Block 0024 [ 95]: bb8a9778ba354712 +Block 0024 [ 96]: d7875d3c0b0ab74e +Block 0024 [ 97]: 69038303e1460b09 +Block 0024 [ 98]: a6ca05dd54aef2ee +Block 0024 [ 99]: 728d835ab505d6bc +Block 0024 [100]: f1be387c80c03e4b +Block 0024 [101]: 2aac86175bda747c +Block 0024 [102]: d288c4d7161502bc +Block 0024 [103]: b0e42aa7ecbd6572 +Block 0024 [104]: 52e77db04ece14f7 +Block 0024 [105]: 6adb74b3d56f09a8 +Block 0024 [106]: 2a6452c901b43573 +Block 0024 [107]: 1056bf56e286e0b7 +Block 0024 [108]: c928aeb275c4b7fa +Block 0024 [109]: 389b14bde4c4d382 +Block 0024 [110]: 9965960db1954391 +Block 0024 [111]: b058a195f70320b4 +Block 0024 [112]: 7619ac5501f4432c +Block 0024 [113]: 586c2db0440f1c83 +Block 0024 [114]: 29e5c6289766490f +Block 0024 [115]: c53c12c1b8dd4d7a +Block 0024 [116]: 1e41341416298856 +Block 0024 [117]: d0a7ae5578f472ce +Block 0024 [118]: b65da50b01d5b8a5 +Block 0024 [119]: 83ec23e27b3eec21 +Block 0024 [120]: ddb5cbc028b735cb +Block 0024 [121]: 4884c6452683f7d5 +Block 0024 [122]: 6cd0174e00017e97 +Block 0024 [123]: fd24844d4d331560 +Block 0024 [124]: 816482d8427a8e64 +Block 0024 [125]: fed0e63ad09481e2 +Block 0024 [126]: 18b61579f735a700 +Block 0024 [127]: fee0bb721ee1ecbb +Block 0025 [ 0]: 218f7d49738f92c6 +Block 0025 [ 1]: 7c43c89d034788a4 +Block 0025 [ 2]: f5d1f2d8a8920f06 +Block 0025 [ 3]: 299f14e7ed5496cc +Block 0025 [ 4]: 1cbea1c1b52d4256 +Block 0025 [ 5]: b2592bd426bc03e0 +Block 0025 [ 6]: ca33a1cc73e76dc3 +Block 0025 [ 7]: 15b633ac2cd4b284 +Block 0025 [ 8]: 7b346972a603745c +Block 0025 [ 9]: ae49e15247e0539c +Block 0025 [ 10]: c39719dde95ec973 +Block 0025 [ 11]: 791d01640218069e +Block 0025 [ 12]: 9e12cde9bc52bbe4 +Block 0025 [ 13]: c86c7f806ea55df1 +Block 0025 [ 14]: 6b61f785e2d65f69 +Block 0025 [ 15]: cb37008fc82db79e +Block 0025 [ 16]: 6a60abdb40faf82a +Block 0025 [ 17]: 8cf923b935d9bcf5 +Block 0025 [ 18]: 76825bb43adce337 +Block 0025 [ 19]: babbde01d9655fb1 +Block 0025 [ 20]: f3d78eb5ad275d05 +Block 0025 [ 21]: d2870cf57340c55e +Block 0025 [ 22]: 91af1fc8c89689fc +Block 0025 [ 23]: 1a5433e50b5e05a8 +Block 0025 [ 24]: f457295bfa093ddc +Block 0025 [ 25]: 1957226241d244e1 +Block 0025 [ 26]: 36cc9305fd37b4e3 +Block 0025 [ 27]: 4aa1aac99f568863 +Block 0025 [ 28]: 941674cf76af7190 +Block 0025 [ 29]: 1b2c8add189d17ee +Block 0025 [ 30]: 562fd164598ba90c +Block 0025 [ 31]: 90d89a9e2623318f +Block 0025 [ 32]: 9ff0a6747fc96454 +Block 0025 [ 33]: 44b54df3ab1aead2 +Block 0025 [ 34]: 509e4c640941d270 +Block 0025 [ 35]: d9b30bff5ed623b2 +Block 0025 [ 36]: b716592c68837232 +Block 0025 [ 37]: cd8a95452b6aa6e1 +Block 0025 [ 38]: df5a3d86c0052718 +Block 0025 [ 39]: 2cae0d438b45a92b +Block 0025 [ 40]: 9bb50165d3b673e9 +Block 0025 [ 41]: 090a71cc136ec229 +Block 0025 [ 42]: 3bfc57430d7d2475 +Block 0025 [ 43]: b21d732e80efc1e1 +Block 0025 [ 44]: 569d99152241f5cb +Block 0025 [ 45]: 5bee8181547575e7 +Block 0025 [ 46]: 360a0f24e67e378b +Block 0025 [ 47]: 0a444cb4f1287e92 +Block 0025 [ 48]: f8fe73d971ad4e15 +Block 0025 [ 49]: 7809a6c41558690c +Block 0025 [ 50]: 14c554cbb8d87a9f +Block 0025 [ 51]: 4bf94d2f59a1b885 +Block 0025 [ 52]: d819171c43d2c448 +Block 0025 [ 53]: b9bad5c60bfa27b5 +Block 0025 [ 54]: 2f4ec140540ba3cc +Block 0025 [ 55]: 5e0b06feb534cb6b +Block 0025 [ 56]: 55eef994d053a92b +Block 0025 [ 57]: 3c3efb4ca90f9aa2 +Block 0025 [ 58]: 4ac1b476371364e9 +Block 0025 [ 59]: cfb1ac1ffb41f16f +Block 0025 [ 60]: 2e47b513102c6e6e +Block 0025 [ 61]: baf2a3f185deefc1 +Block 0025 [ 62]: 9688648864cb8ddb +Block 0025 [ 63]: 0726d0615a1a85b5 +Block 0025 [ 64]: 3d7383c8adfb85a7 +Block 0025 [ 65]: dac839ce44c2b275 +Block 0025 [ 66]: 0954eed70bd6fda5 +Block 0025 [ 67]: b347e872bdcd43da +Block 0025 [ 68]: cc040228c23d0e6e +Block 0025 [ 69]: 0de8b3f517319c2a +Block 0025 [ 70]: 50eff13db15ff965 +Block 0025 [ 71]: 5b5e495005b6e3a4 +Block 0025 [ 72]: ea83a832b036de55 +Block 0025 [ 73]: 4b92d114ff4c8a85 +Block 0025 [ 74]: 352986db66e2c6f2 +Block 0025 [ 75]: 5a5b775b10bd3414 +Block 0025 [ 76]: 7840ea80a027bde7 +Block 0025 [ 77]: f4365b7239cf5007 +Block 0025 [ 78]: 24fda471b099ae21 +Block 0025 [ 79]: 72b184a1ddc10267 +Block 0025 [ 80]: 362aa580b6b44a23 +Block 0025 [ 81]: 2249ca6bb3512afa +Block 0025 [ 82]: 9d86d882d57b1214 +Block 0025 [ 83]: 09cd175d74396827 +Block 0025 [ 84]: e9b1152be6185310 +Block 0025 [ 85]: b6fa99c7d3f6e258 +Block 0025 [ 86]: bb1157a075afefb8 +Block 0025 [ 87]: ecfad80c123ddcf4 +Block 0025 [ 88]: f4c5f6049360c7ed +Block 0025 [ 89]: 9b4a4dcb7b95af93 +Block 0025 [ 90]: 6af0da4d6ea78de5 +Block 0025 [ 91]: d486be8a57928782 +Block 0025 [ 92]: 2d3747216952a042 +Block 0025 [ 93]: 7480bdbc4fc25e99 +Block 0025 [ 94]: 7caea647a8b0f52b +Block 0025 [ 95]: a759ceef02e325d2 +Block 0025 [ 96]: a2f14256abd2a57f +Block 0025 [ 97]: 101ddae96091e57e +Block 0025 [ 98]: e810140f913206f3 +Block 0025 [ 99]: edb6506015ec4e5e +Block 0025 [100]: 114dc2565158243a +Block 0025 [101]: 4e9d15bdf88ad4e4 +Block 0025 [102]: ece4b8ff68cea6a2 +Block 0025 [103]: f0ebe4d86b4b9316 +Block 0025 [104]: 8355940d8efe6fc4 +Block 0025 [105]: ea8a6355cca5d9d3 +Block 0025 [106]: 65aca3bcc4d4a292 +Block 0025 [107]: b4ad427852001777 +Block 0025 [108]: 85639d301162a27f +Block 0025 [109]: 759e87e84b2f7c42 +Block 0025 [110]: ee1d3820c4f58ee3 +Block 0025 [111]: 88688a321ffa4610 +Block 0025 [112]: 9d4e4c09d07e6414 +Block 0025 [113]: 21cc042a64f6f219 +Block 0025 [114]: 934eb23f70839cdc +Block 0025 [115]: 52b37f2b7eef3a7a +Block 0025 [116]: 5f6642d0bcc72f28 +Block 0025 [117]: 7bc04881f38f6a04 +Block 0025 [118]: 37fdffd62c6fe429 +Block 0025 [119]: eb893917d8365d52 +Block 0025 [120]: 7bff88282c1cc77f +Block 0025 [121]: 1a877bda6afc8cee +Block 0025 [122]: f6261537899eb64f +Block 0025 [123]: 0631a65eda39a9cb +Block 0025 [124]: 4ef993405ba60811 +Block 0025 [125]: 62400e9a554324eb +Block 0025 [126]: 46a1f4e5f7d44185 +Block 0025 [127]: 98628c54e42825e7 +Block 0026 [ 0]: 3c6983afbba804d5 +Block 0026 [ 1]: 6711c9d79fddc321 +Block 0026 [ 2]: 2391ab06e29b8e47 +Block 0026 [ 3]: 357cda706f696cf8 +Block 0026 [ 4]: 7de77eb985e3e694 +Block 0026 [ 5]: 0b1cca5039a0bcf2 +Block 0026 [ 6]: 02b63e6bf9d96807 +Block 0026 [ 7]: 19d9ca3eb6108b20 +Block 0026 [ 8]: fa46aba3dcc57351 +Block 0026 [ 9]: 261914f924334ffb +Block 0026 [ 10]: aa184f31ff808f1f +Block 0026 [ 11]: f70c6320224698db +Block 0026 [ 12]: 20afaddd294fb3ec +Block 0026 [ 13]: 826874f33b12c683 +Block 0026 [ 14]: 036a6550f020d424 +Block 0026 [ 15]: f64caa528536a1b7 +Block 0026 [ 16]: eff5a71792f55f01 +Block 0026 [ 17]: 48f7424b0df5c46f +Block 0026 [ 18]: 01c1ade0611d07f1 +Block 0026 [ 19]: c89280c83156add8 +Block 0026 [ 20]: 258f1b61fc7f6b11 +Block 0026 [ 21]: ed5c950819eace58 +Block 0026 [ 22]: 2eeb9d215f9e1d41 +Block 0026 [ 23]: fae0b2678e3c8a67 +Block 0026 [ 24]: 739195ac32a0e262 +Block 0026 [ 25]: 6d71718902f627aa +Block 0026 [ 26]: a8cd44e2ec39edae +Block 0026 [ 27]: d8cc82a9d8334dee +Block 0026 [ 28]: 3e0bbab36c2d4b13 +Block 0026 [ 29]: 7173f42e8fb7d186 +Block 0026 [ 30]: aa49cc111f609407 +Block 0026 [ 31]: 86b5d32d57254d39 +Block 0026 [ 32]: c1c3ef5753af595a +Block 0026 [ 33]: 136cb058821065a2 +Block 0026 [ 34]: 0974f4cf5a77a026 +Block 0026 [ 35]: c5e39f3305aab8b1 +Block 0026 [ 36]: 10821d1445291cba +Block 0026 [ 37]: 81d371c00c1b4c08 +Block 0026 [ 38]: 85c8c719277f3965 +Block 0026 [ 39]: c590db7df5a36675 +Block 0026 [ 40]: 545f3dff15b55c1e +Block 0026 [ 41]: e980768ad45c12ef +Block 0026 [ 42]: 3be75af231bac2ca +Block 0026 [ 43]: 95ec39119f1250f2 +Block 0026 [ 44]: bbff859c5c9f89bb +Block 0026 [ 45]: 142a0680ef5b5f16 +Block 0026 [ 46]: 27facd74fffda870 +Block 0026 [ 47]: 55dd1b22cc90f735 +Block 0026 [ 48]: a12d88ec60c512fd +Block 0026 [ 49]: a135793f811d6111 +Block 0026 [ 50]: 34c6fa055bdc63e9 +Block 0026 [ 51]: cb40ef918c0a282f +Block 0026 [ 52]: 0a9042c429b52e20 +Block 0026 [ 53]: 8025ec3592aaac36 +Block 0026 [ 54]: e6fe903a66fe4e3f +Block 0026 [ 55]: e31655f738fd1ce8 +Block 0026 [ 56]: 9ee25a076d5f41cf +Block 0026 [ 57]: cde79d1536830e67 +Block 0026 [ 58]: 7721d1919a0ff9b9 +Block 0026 [ 59]: cc495c11c8639a44 +Block 0026 [ 60]: 5b6291631d8b1728 +Block 0026 [ 61]: 3f5037b0c8cbc91e +Block 0026 [ 62]: b9b6d9c18539e66a +Block 0026 [ 63]: 366ed0f240bf7120 +Block 0026 [ 64]: 9b201c10a4353d2f +Block 0026 [ 65]: 359c2842aa330468 +Block 0026 [ 66]: a3fb5a76d20bacd3 +Block 0026 [ 67]: a18496fc163bc0e9 +Block 0026 [ 68]: bbf9ca616287297c +Block 0026 [ 69]: 939beb6456f35b3c +Block 0026 [ 70]: 4e0f82cc86bfd22b +Block 0026 [ 71]: e966d50cc7df0f87 +Block 0026 [ 72]: e517c5470cea1c0c +Block 0026 [ 73]: c112ddf352579302 +Block 0026 [ 74]: a63420c0997f61e3 +Block 0026 [ 75]: 3926f92cdfc55124 +Block 0026 [ 76]: 88ec54e147108123 +Block 0026 [ 77]: 7e828e3c0fc07af4 +Block 0026 [ 78]: bdfe6fad95995ffd +Block 0026 [ 79]: b4919dca6d54d29b +Block 0026 [ 80]: 2a405f1adf13a606 +Block 0026 [ 81]: 404cc4b6e4adf8df +Block 0026 [ 82]: 15bf36bdcab5acb9 +Block 0026 [ 83]: cb0884b41dd7cbf2 +Block 0026 [ 84]: 96af5406db7d487c +Block 0026 [ 85]: c8074d30dd0c86ba +Block 0026 [ 86]: 7d1c52344ed5ecf2 +Block 0026 [ 87]: 5826b80aaa041c09 +Block 0026 [ 88]: aac72ffdfc5b0024 +Block 0026 [ 89]: 2077fe5a631f42a6 +Block 0026 [ 90]: 9fd9e717bcc0dfb8 +Block 0026 [ 91]: 69de97e2bd116811 +Block 0026 [ 92]: ed51dcd989772100 +Block 0026 [ 93]: 88c57a4fd02c9c4e +Block 0026 [ 94]: f5162652fd844d77 +Block 0026 [ 95]: d645ec63828fb2cb +Block 0026 [ 96]: f8bac28ed154957d +Block 0026 [ 97]: 9290f00d8a17bdb2 +Block 0026 [ 98]: e9833bb57c692f55 +Block 0026 [ 99]: db21a9b32401012a +Block 0026 [100]: 162b6d8c35201524 +Block 0026 [101]: 75ade54377c77238 +Block 0026 [102]: b8d7284df781f3d0 +Block 0026 [103]: 303bd658599f0e6c +Block 0026 [104]: 0232876bafc7bfd9 +Block 0026 [105]: 920c9811b0077634 +Block 0026 [106]: fcab0361efef9ff2 +Block 0026 [107]: ab8519c253a00f4a +Block 0026 [108]: da9867be15d00f19 +Block 0026 [109]: c82b7fe39d4017f2 +Block 0026 [110]: 583847c2f8775b22 +Block 0026 [111]: a303262ed2cd1159 +Block 0026 [112]: ccaf60e46589054f +Block 0026 [113]: 5bbb7b1b4cb3111c +Block 0026 [114]: 29eb66dd0bf01df5 +Block 0026 [115]: e8cf9b1056366920 +Block 0026 [116]: 0399042b521c3626 +Block 0026 [117]: c37fb9108d6c0d0a +Block 0026 [118]: 913c845e777489f5 +Block 0026 [119]: 918d92d0b7809530 +Block 0026 [120]: 0c36ee266601a21b +Block 0026 [121]: f2d1cd576aed1bb5 +Block 0026 [122]: 7b58b466d3fee7df +Block 0026 [123]: d5158fb67955e952 +Block 0026 [124]: 6ef3cfa7180c9bc1 +Block 0026 [125]: fa9acd56b8400839 +Block 0026 [126]: bc82d8d53d9ecfda +Block 0026 [127]: 5761bdea1282864c +Block 0027 [ 0]: 7d3c9a0ec3269b48 +Block 0027 [ 1]: 6686eb93fbda0d77 +Block 0027 [ 2]: cb7ee69fe719e3b4 +Block 0027 [ 3]: 54ae42cd9118070c +Block 0027 [ 4]: 62164ca70764a185 +Block 0027 [ 5]: 185e261947601d34 +Block 0027 [ 6]: 092bb74b591bd0ca +Block 0027 [ 7]: 1279028f9bf6f93d +Block 0027 [ 8]: 916e719df2543a93 +Block 0027 [ 9]: 3d38f8078087f328 +Block 0027 [ 10]: 09087bfdf5ba3af2 +Block 0027 [ 11]: de613c261f43a1ad +Block 0027 [ 12]: dd194937c3e7c7c7 +Block 0027 [ 13]: a354a8be75a53c84 +Block 0027 [ 14]: 58e61315e8799749 +Block 0027 [ 15]: 3790f1889691087d +Block 0027 [ 16]: 9c109cbb13bd0946 +Block 0027 [ 17]: 69d2a3cb24d725da +Block 0027 [ 18]: 66edb597ec53292d +Block 0027 [ 19]: a9be38befecc0584 +Block 0027 [ 20]: 96d0731c9f242696 +Block 0027 [ 21]: e3ba1585a32dce68 +Block 0027 [ 22]: 5a0484ed5038971b +Block 0027 [ 23]: 78bcdb43bf93d164 +Block 0027 [ 24]: 744576d9c3c30082 +Block 0027 [ 25]: 64f778f3189c1cff +Block 0027 [ 26]: f8eb15da12c637e1 +Block 0027 [ 27]: fcbebcbe50a21695 +Block 0027 [ 28]: 970e19c4f0521beb +Block 0027 [ 29]: bb5af6ec3a7ed2d1 +Block 0027 [ 30]: 096904e407e41cb7 +Block 0027 [ 31]: 796ef5112b7a1edd +Block 0027 [ 32]: db1a153e66ae58ea +Block 0027 [ 33]: b1f77c17cee5e733 +Block 0027 [ 34]: 20285245122afb59 +Block 0027 [ 35]: 4df42e52389d2aff +Block 0027 [ 36]: 201f9602a2014992 +Block 0027 [ 37]: 65f0cf04f5981313 +Block 0027 [ 38]: 0943da03f0840c17 +Block 0027 [ 39]: 2eced3376b8d7e95 +Block 0027 [ 40]: 5d2c25c04a6527e3 +Block 0027 [ 41]: 9d8e3bb1b210e5b4 +Block 0027 [ 42]: 1d552706ac628676 +Block 0027 [ 43]: d24b7fbd453c47b9 +Block 0027 [ 44]: 94a3efedba376d46 +Block 0027 [ 45]: c6cfaf61c5738603 +Block 0027 [ 46]: 6dc7dd999626802f +Block 0027 [ 47]: 679a0a330366aa5f +Block 0027 [ 48]: a588a97355f0b410 +Block 0027 [ 49]: a53c8e0722c1f2a3 +Block 0027 [ 50]: 5aaee7d200469b7b +Block 0027 [ 51]: 3aed0d73099c2bbb +Block 0027 [ 52]: 78b7a36c5ca25608 +Block 0027 [ 53]: e6b432160dcce680 +Block 0027 [ 54]: 1ba1aeff2677be69 +Block 0027 [ 55]: 3a73d1cbafe00bee +Block 0027 [ 56]: 44847a38e4ef1636 +Block 0027 [ 57]: 817c2c94824200ef +Block 0027 [ 58]: 028f8e5775dfaed1 +Block 0027 [ 59]: 0cbc774a55ab5843 +Block 0027 [ 60]: aeb5aacf73e0eb39 +Block 0027 [ 61]: 0b8433622bea4382 +Block 0027 [ 62]: 79769c5b649f1261 +Block 0027 [ 63]: 0c829d21a3e179b1 +Block 0027 [ 64]: 813f3231bba22a33 +Block 0027 [ 65]: a2416e7899d6fe8a +Block 0027 [ 66]: b6e98b7cfa6bd74b +Block 0027 [ 67]: 41bc3948470a0b96 +Block 0027 [ 68]: 69ea8fd9e284aea6 +Block 0027 [ 69]: def3afe35abbe28b +Block 0027 [ 70]: b68ea4c646fb6573 +Block 0027 [ 71]: 4fa9b31650260ae6 +Block 0027 [ 72]: 7e01fc0f2a7429d6 +Block 0027 [ 73]: 627b93dbd343caeb +Block 0027 [ 74]: f3eeae8deb82e242 +Block 0027 [ 75]: 1e851591772c1bb5 +Block 0027 [ 76]: 3c2e59c09ef5b878 +Block 0027 [ 77]: ad49c7f75f437548 +Block 0027 [ 78]: 46f34b1e7a607915 +Block 0027 [ 79]: aacf30a2e549bb4a +Block 0027 [ 80]: 5a19914c8fff5e96 +Block 0027 [ 81]: f415490e00fb30b9 +Block 0027 [ 82]: 9846376d7adcf814 +Block 0027 [ 83]: 78bbe891c9abfe1d +Block 0027 [ 84]: 7c4a0979fea67b38 +Block 0027 [ 85]: 59e586690f942554 +Block 0027 [ 86]: 0acca76f34a6d794 +Block 0027 [ 87]: 2f7b55cb6fe9390f +Block 0027 [ 88]: 7635a592209d0a11 +Block 0027 [ 89]: 7e83394274d76e07 +Block 0027 [ 90]: 6a7dc7b77fcd9ee7 +Block 0027 [ 91]: 2b97fb8c36950a71 +Block 0027 [ 92]: 1fd5a884ef569a60 +Block 0027 [ 93]: e910b6544d71b381 +Block 0027 [ 94]: de5c857dd603fd6a +Block 0027 [ 95]: 5417634f369d5986 +Block 0027 [ 96]: ba1ae13eb3352d9f +Block 0027 [ 97]: 402e1be1915906fa +Block 0027 [ 98]: 3e45c339df96d224 +Block 0027 [ 99]: a2a0c19bc60f28e2 +Block 0027 [100]: 14b5aa263f6b02ac +Block 0027 [101]: 455b8ce5effd82f1 +Block 0027 [102]: f9067ed819bfe040 +Block 0027 [103]: 34ee1496df2e9258 +Block 0027 [104]: 85132137bfd83071 +Block 0027 [105]: 274902202877e214 +Block 0027 [106]: 4df3027bdf10659e +Block 0027 [107]: 50e85dae17476d58 +Block 0027 [108]: ebd15a07c578a603 +Block 0027 [109]: 73539de46fd213d6 +Block 0027 [110]: aabf6dcb01dc066a +Block 0027 [111]: a742de72f634eecb +Block 0027 [112]: bd3e9d53c38cccbc +Block 0027 [113]: 0c6aee347a62283a +Block 0027 [114]: e8218a191cdfeba3 +Block 0027 [115]: 850cfae86fd4a736 +Block 0027 [116]: 2e9647c876dcf630 +Block 0027 [117]: 786b0a5bf8f8ed00 +Block 0027 [118]: 7d52cebe4d24c525 +Block 0027 [119]: 8dbd8532181f83a0 +Block 0027 [120]: e2003436c78933f2 +Block 0027 [121]: 6196d5c9274650f8 +Block 0027 [122]: 50e0015a9708e2c2 +Block 0027 [123]: 0df7db3f56521de7 +Block 0027 [124]: 41c4e4d30977c324 +Block 0027 [125]: fe90ec673b2a3ed5 +Block 0027 [126]: 8b894913484a96cd +Block 0027 [127]: b3ce79c030832f8b +Block 0028 [ 0]: 8001ef270631eb46 +Block 0028 [ 1]: 83416ab52ade6a20 +Block 0028 [ 2]: 2c2c2d8a6e19d701 +Block 0028 [ 3]: d8876e22d1e005e7 +Block 0028 [ 4]: 39ec3701311b6f21 +Block 0028 [ 5]: e27d91be0b0f01ea +Block 0028 [ 6]: 3a468a9921bd57d6 +Block 0028 [ 7]: e979f5210101a334 +Block 0028 [ 8]: 0fe50b2f6002dd2f +Block 0028 [ 9]: e93dccdb8c30683f +Block 0028 [ 10]: a39f7bb93d2527d7 +Block 0028 [ 11]: 43131f328e9f3257 +Block 0028 [ 12]: 3916bad309c754f5 +Block 0028 [ 13]: 01f6c6295e8f726a +Block 0028 [ 14]: 2980801f3d4d3c54 +Block 0028 [ 15]: a901be2b20bca6d9 +Block 0028 [ 16]: bd35a7f931c1bded +Block 0028 [ 17]: 27409429f88c477b +Block 0028 [ 18]: 8036cce294e86513 +Block 0028 [ 19]: 857a2229c5afedf8 +Block 0028 [ 20]: d3373ab3af5873a8 +Block 0028 [ 21]: 4066441cd77d44ed +Block 0028 [ 22]: 48f2ef97141ddf21 +Block 0028 [ 23]: 476609786badb439 +Block 0028 [ 24]: 98fe66b30b5fa4bf +Block 0028 [ 25]: 14ec3f588d97430d +Block 0028 [ 26]: 6067ae97295f88a2 +Block 0028 [ 27]: 7472170c692fec72 +Block 0028 [ 28]: abca04dcc1646c6a +Block 0028 [ 29]: 593abb9ad2fb4754 +Block 0028 [ 30]: d383c2cec2319674 +Block 0028 [ 31]: 383d630e75d111ce +Block 0028 [ 32]: aade349d6aa54022 +Block 0028 [ 33]: 6a005af570ce8a1d +Block 0028 [ 34]: f7b1a835dca0178f +Block 0028 [ 35]: 87fcdd328f68b675 +Block 0028 [ 36]: 08caa798697afc12 +Block 0028 [ 37]: dbf8280ba26bfac4 +Block 0028 [ 38]: 87ebbcd95eb62676 +Block 0028 [ 39]: 0e3c59cd8c020fdb +Block 0028 [ 40]: 2df7176c8b1ab6fd +Block 0028 [ 41]: 575bad97b70c3e66 +Block 0028 [ 42]: 323c319d2d524b44 +Block 0028 [ 43]: 368bb20d0637def3 +Block 0028 [ 44]: c4638388f45266ee +Block 0028 [ 45]: 3e437f36851a630c +Block 0028 [ 46]: 2779419dd62bdc82 +Block 0028 [ 47]: 6b8ad3cd205e4ad0 +Block 0028 [ 48]: a90e6cad3c5c2b0a +Block 0028 [ 49]: f8ae347a60d74f84 +Block 0028 [ 50]: c6c0926217b23c45 +Block 0028 [ 51]: fff3fa7d093cbb84 +Block 0028 [ 52]: 70fafbbdcb4a7ac9 +Block 0028 [ 53]: 8ab582b972cb8700 +Block 0028 [ 54]: e1fe38cfe02a0b27 +Block 0028 [ 55]: 6861f64be54a0dfc +Block 0028 [ 56]: 8e888789a129f02f +Block 0028 [ 57]: f46cd73182cd385f +Block 0028 [ 58]: e88c0c118ad7b6f3 +Block 0028 [ 59]: ca6a2cadf443f63e +Block 0028 [ 60]: 1bd7984c082c1ef6 +Block 0028 [ 61]: 49b2cc8e2d76a30f +Block 0028 [ 62]: 4eeaba2f6a5802b3 +Block 0028 [ 63]: 0c8cd49bc7463e4b +Block 0028 [ 64]: 8e97970259c37934 +Block 0028 [ 65]: 5b51d47446ba7d59 +Block 0028 [ 66]: 209bd2bfbad9f3a5 +Block 0028 [ 67]: 4933bc3073cce49a +Block 0028 [ 68]: 499abb45745240c9 +Block 0028 [ 69]: 686dec33783f389f +Block 0028 [ 70]: db53075850fa6621 +Block 0028 [ 71]: 8e2e332d929ac8fe +Block 0028 [ 72]: 12188a5b7a3191fd +Block 0028 [ 73]: b5224394b27de504 +Block 0028 [ 74]: 0a4637a76f5ceddc +Block 0028 [ 75]: 2512376fe7ac236d +Block 0028 [ 76]: d0409eee03676e53 +Block 0028 [ 77]: cf10ff014ec1119e +Block 0028 [ 78]: 8b31f8267b762c34 +Block 0028 [ 79]: c746da7b7446448f +Block 0028 [ 80]: ce5afecb66c7ea9a +Block 0028 [ 81]: dc50af46efdce716 +Block 0028 [ 82]: 8ef9fe564ce372bf +Block 0028 [ 83]: 9386004b96f3d07b +Block 0028 [ 84]: 931edb230d806873 +Block 0028 [ 85]: 463972892751ca7c +Block 0028 [ 86]: ea39b6b40936d859 +Block 0028 [ 87]: 5c58eb39f0c08539 +Block 0028 [ 88]: 6610cc54cd07c0c9 +Block 0028 [ 89]: e4c0ce16afd786cd +Block 0028 [ 90]: e25114fbc70f82ad +Block 0028 [ 91]: 6e47602eed12ae23 +Block 0028 [ 92]: 025c64b56a765d41 +Block 0028 [ 93]: 3dffc43a35be1657 +Block 0028 [ 94]: f9b04b0c7094b53d +Block 0028 [ 95]: 4389da938709bc9d +Block 0028 [ 96]: 4f946796bde00fdb +Block 0028 [ 97]: cd435c40d8746458 +Block 0028 [ 98]: 9a70f9e6a7d23334 +Block 0028 [ 99]: 7fe9132e580b2145 +Block 0028 [100]: e05b3c6c2eb2e055 +Block 0028 [101]: f230bd45be19ed50 +Block 0028 [102]: 98a17f9086217896 +Block 0028 [103]: 5a19b54398eb0f1e +Block 0028 [104]: 81805b218b4d7acc +Block 0028 [105]: 53cc0888db15d952 +Block 0028 [106]: 0a455db0253eeab5 +Block 0028 [107]: 427b99b3709a9278 +Block 0028 [108]: 309f67cf226c6dad +Block 0028 [109]: 04cc7e2268c9f8cb +Block 0028 [110]: b50cdbe6cd24ebd0 +Block 0028 [111]: 3b6ec1744022ce3a +Block 0028 [112]: 1c7bde9e2444594b +Block 0028 [113]: 8d2fdda47d1280df +Block 0028 [114]: dd593b7ef7cbc160 +Block 0028 [115]: 603425f28180ce0a +Block 0028 [116]: 36de44b577684c20 +Block 0028 [117]: b6e6174afd7cb6f0 +Block 0028 [118]: 26c361be1a85382b +Block 0028 [119]: 52093e7af6fb04c3 +Block 0028 [120]: 6b7bad5bdedbb60e +Block 0028 [121]: e01bcc7c7bc736b6 +Block 0028 [122]: cc0df433cf949b9c +Block 0028 [123]: 6ce89651fe24f50b +Block 0028 [124]: 2f65d14ec85d1d2f +Block 0028 [125]: f03036c3706caa76 +Block 0028 [126]: 468d03ccf8153f05 +Block 0028 [127]: 967dbda43084d3f3 +Block 0029 [ 0]: f7658b7617623350 +Block 0029 [ 1]: e03903fb99c2f364 +Block 0029 [ 2]: fa5e598d449bc7c1 +Block 0029 [ 3]: 64440941ca0286d0 +Block 0029 [ 4]: c4f04649929e715a +Block 0029 [ 5]: fc8b4e25df9a43a4 +Block 0029 [ 6]: 53aa104be4478ec1 +Block 0029 [ 7]: 18e8a7702998cfed +Block 0029 [ 8]: c38282b83a2bbf8d +Block 0029 [ 9]: d224c762f65e99f9 +Block 0029 [ 10]: 0182e8439fd508d9 +Block 0029 [ 11]: 55012ed0e1ddba0d +Block 0029 [ 12]: e788c80f0597f6c3 +Block 0029 [ 13]: 37da30953d61166d +Block 0029 [ 14]: 6a961813a7033b89 +Block 0029 [ 15]: 3c62e34b3e27b1c1 +Block 0029 [ 16]: e46a91515a994a98 +Block 0029 [ 17]: f3015c41b62f357a +Block 0029 [ 18]: ffc74dd046d74be8 +Block 0029 [ 19]: 0e58a388145cd6b2 +Block 0029 [ 20]: c25f2be79b76308b +Block 0029 [ 21]: b94035810d2020cb +Block 0029 [ 22]: e0f3d82a929ce754 +Block 0029 [ 23]: cde9659f5fce847e +Block 0029 [ 24]: 9e139ca8f03b3023 +Block 0029 [ 25]: 2eabec9e991c81e1 +Block 0029 [ 26]: 441ac0c3033ab565 +Block 0029 [ 27]: 31f7a287c5388a1f +Block 0029 [ 28]: 960a2014148ec008 +Block 0029 [ 29]: 512481b4ac76ea85 +Block 0029 [ 30]: 41e4e64d8adf69e9 +Block 0029 [ 31]: b73914f0091513d9 +Block 0029 [ 32]: 0b6b5f496c1cf4bb +Block 0029 [ 33]: de5f6aedafd3bd92 +Block 0029 [ 34]: c6d64010bf68ea8a +Block 0029 [ 35]: 0cc383a9e718ebd4 +Block 0029 [ 36]: 37c23e0c7722b7e6 +Block 0029 [ 37]: e5a48c2204d0b7a6 +Block 0029 [ 38]: cb05f8b51984a566 +Block 0029 [ 39]: b8c601d4357892cd +Block 0029 [ 40]: cc9cf4d83353f878 +Block 0029 [ 41]: 382e5b2d1692bc06 +Block 0029 [ 42]: c539774a206fce40 +Block 0029 [ 43]: 11f48ac74223311d +Block 0029 [ 44]: afe26e5a3fd54c79 +Block 0029 [ 45]: d3ae9fef26be1b6c +Block 0029 [ 46]: 541f3624089b54f8 +Block 0029 [ 47]: e04c07c4f89494c8 +Block 0029 [ 48]: 50be2647fea6aa3e +Block 0029 [ 49]: 100db5b5428a6916 +Block 0029 [ 50]: 32128747f3ea25cd +Block 0029 [ 51]: fff567fd0fb38972 +Block 0029 [ 52]: 0ac0a01a5357027e +Block 0029 [ 53]: 2b3c731c47903254 +Block 0029 [ 54]: fb73b7724da0a212 +Block 0029 [ 55]: cf83d5083f766a27 +Block 0029 [ 56]: 76ba8624d21308cc +Block 0029 [ 57]: fda64090fdaebdc7 +Block 0029 [ 58]: ce1db32a30eebabc +Block 0029 [ 59]: 554ad2d4f7b1a909 +Block 0029 [ 60]: 628bfb79f526d389 +Block 0029 [ 61]: fc722985e7ee67f8 +Block 0029 [ 62]: d04c65e8e57a99fe +Block 0029 [ 63]: a3196755e7f7c584 +Block 0029 [ 64]: cd330610beee5fe6 +Block 0029 [ 65]: f155296fc87aa152 +Block 0029 [ 66]: 44785555beba5f04 +Block 0029 [ 67]: f21d20529e52bc15 +Block 0029 [ 68]: 26bf65ef544e8ae8 +Block 0029 [ 69]: b0a20d786ec319dd +Block 0029 [ 70]: 87b001a1ddbc6ce4 +Block 0029 [ 71]: 6d86f2cfcbee56f8 +Block 0029 [ 72]: 9546ff8a0cf7f664 +Block 0029 [ 73]: 742e0cba36127004 +Block 0029 [ 74]: 68d8c05fd335d672 +Block 0029 [ 75]: 36859f6866bbc4ef +Block 0029 [ 76]: 04e86efcfc6155e8 +Block 0029 [ 77]: f0f74fcc82eaae4c +Block 0029 [ 78]: d5fbc145a2038e9b +Block 0029 [ 79]: c97dd73bdef94d85 +Block 0029 [ 80]: 46641a0d5e74d7cf +Block 0029 [ 81]: ef0685b5097b5e67 +Block 0029 [ 82]: 1d5fd9ee302a79b0 +Block 0029 [ 83]: cd863c3f6985ab13 +Block 0029 [ 84]: 4ca7738aeebb1b3d +Block 0029 [ 85]: 1ba380e7f9c6d41a +Block 0029 [ 86]: 053be3f43d0815d0 +Block 0029 [ 87]: 4531b35560fa4649 +Block 0029 [ 88]: 71170fcb9f881969 +Block 0029 [ 89]: 1d6539470e53caba +Block 0029 [ 90]: c811cd3a099745dd +Block 0029 [ 91]: d24e5a4cab1f6097 +Block 0029 [ 92]: bf49c3c36ce953e7 +Block 0029 [ 93]: 7ec2b167b48bb25c +Block 0029 [ 94]: 7f8f22149ea593c1 +Block 0029 [ 95]: 41045c4656526da0 +Block 0029 [ 96]: 0a62016ef6fe2d6f +Block 0029 [ 97]: dcc506a2314d1ab6 +Block 0029 [ 98]: 84fd724119b1778e +Block 0029 [ 99]: 6c7d5b3b446a1fd1 +Block 0029 [100]: 9b0f033862438e18 +Block 0029 [101]: 978b0aaed61203a4 +Block 0029 [102]: 218befc3d5b5aefb +Block 0029 [103]: 450431d34382b3a3 +Block 0029 [104]: 3e2d2c92065cd146 +Block 0029 [105]: 3c7e61ae4a8f0279 +Block 0029 [106]: d051b0de2d324355 +Block 0029 [107]: d7644e4a6b72da80 +Block 0029 [108]: 91133f252f076c21 +Block 0029 [109]: 173e52b3d1ab5ba8 +Block 0029 [110]: c86e504f324de992 +Block 0029 [111]: 4ddf966c7242fed3 +Block 0029 [112]: 18a29093e7e2bb3a +Block 0029 [113]: 36dafe385f2c2b10 +Block 0029 [114]: 2b6fe7ef1813672d +Block 0029 [115]: 9939a4bf68bba9d8 +Block 0029 [116]: 0adab70daef4deed +Block 0029 [117]: 5a735581b8a18158 +Block 0029 [118]: f6f3c9bc7ad697dd +Block 0029 [119]: a4deeac9deecda6e +Block 0029 [120]: 72d888dd86ec2222 +Block 0029 [121]: 81014cfe6416656b +Block 0029 [122]: 3ad075b693516c76 +Block 0029 [123]: 7ddd2aa89adb05be +Block 0029 [124]: 5ca65be828845c91 +Block 0029 [125]: 86117ec0186de07f +Block 0029 [126]: cafa675111211ca4 +Block 0029 [127]: 4a92b1c01c991dc7 +Block 0030 [ 0]: 3a4e77baaceeda4f +Block 0030 [ 1]: 7a9ee225ee9d9639 +Block 0030 [ 2]: be87707cf63597d6 +Block 0030 [ 3]: 4cc45af01e0c3d38 +Block 0030 [ 4]: 61eb5cb37a5db980 +Block 0030 [ 5]: a21053715936dbd4 +Block 0030 [ 6]: 2e2a60f4b776a427 +Block 0030 [ 7]: c3160614bf7b6e67 +Block 0030 [ 8]: 2c09de08c8702cd2 +Block 0030 [ 9]: 42075967917bfa70 +Block 0030 [ 10]: c3a601e6c4af7352 +Block 0030 [ 11]: 7da95db7a912839a +Block 0030 [ 12]: 7b91b6daf74df3d1 +Block 0030 [ 13]: 7e68f0c963c11656 +Block 0030 [ 14]: 292bf228471ea592 +Block 0030 [ 15]: 28297197c4237221 +Block 0030 [ 16]: c011080c1138e15b +Block 0030 [ 17]: 649689340374f6b2 +Block 0030 [ 18]: 22c4f943de3c6691 +Block 0030 [ 19]: 13dcc60a6e166690 +Block 0030 [ 20]: fa7b5a54f3fcd738 +Block 0030 [ 21]: 6795de2cac74fd73 +Block 0030 [ 22]: 970f60d8918882aa +Block 0030 [ 23]: ac1f731a31df5499 +Block 0030 [ 24]: 13e34af1c65e7b29 +Block 0030 [ 25]: 4bb39dae73b770f4 +Block 0030 [ 26]: e0df37aabf0a24f6 +Block 0030 [ 27]: 6353983bf4cfaf43 +Block 0030 [ 28]: 86149b53a770fdcb +Block 0030 [ 29]: 0a8047c119b1ea18 +Block 0030 [ 30]: ec84dee6813b98c1 +Block 0030 [ 31]: 68d4b8e0ccd7b622 +Block 0030 [ 32]: 4f5636008654d419 +Block 0030 [ 33]: eda05631c9161315 +Block 0030 [ 34]: eebb69dc293f8497 +Block 0030 [ 35]: 22c93868ebc40dce +Block 0030 [ 36]: c8b4d47f3480051e +Block 0030 [ 37]: 3e12b38ee5dac831 +Block 0030 [ 38]: 1c0c6618fd0b1a03 +Block 0030 [ 39]: edf8afbbdc630d8f +Block 0030 [ 40]: 74db17078f3381b5 +Block 0030 [ 41]: 1f3ef7f652def5d1 +Block 0030 [ 42]: 823081fa577de1cb +Block 0030 [ 43]: bab3df9f63e2474a +Block 0030 [ 44]: 5f8943ad9630ce55 +Block 0030 [ 45]: 49986b0a5fd83bb7 +Block 0030 [ 46]: 5a5d0b2f0fc4f2fa +Block 0030 [ 47]: ff63d169f9b3ee72 +Block 0030 [ 48]: d375bb8f1fbdddd6 +Block 0030 [ 49]: 52c165386bb256e3 +Block 0030 [ 50]: 1a925b2d08860b41 +Block 0030 [ 51]: 2a7211d563ae55a0 +Block 0030 [ 52]: 944d8a32a0f620cf +Block 0030 [ 53]: c221ab1dfc88b935 +Block 0030 [ 54]: 167bbd3c0073900c +Block 0030 [ 55]: 0db633dc8f2c1fd7 +Block 0030 [ 56]: f3c9215754dd8f0c +Block 0030 [ 57]: d104919d3adcc42b +Block 0030 [ 58]: c3d815aa1b927c67 +Block 0030 [ 59]: d91f5b17a46bb7fd +Block 0030 [ 60]: 6d1d86a418781821 +Block 0030 [ 61]: 3f0960ab45883d83 +Block 0030 [ 62]: ffb4730d3ec55144 +Block 0030 [ 63]: b127ee8cb7bf977b +Block 0030 [ 64]: c6838a7e889e1588 +Block 0030 [ 65]: 7ffedaf44973699a +Block 0030 [ 66]: 008ff4b9472cf2dc +Block 0030 [ 67]: 2c2e9d5ed75d138f +Block 0030 [ 68]: 329c478d8bfc8eab +Block 0030 [ 69]: a4b5d417ca5cad57 +Block 0030 [ 70]: 757f87821b6cc4ac +Block 0030 [ 71]: b82ba42df02d75f0 +Block 0030 [ 72]: c887e666f40bc6bb +Block 0030 [ 73]: ae6e53a5c3048169 +Block 0030 [ 74]: 4d296c09642f6d91 +Block 0030 [ 75]: 4fd264c1d18f900a +Block 0030 [ 76]: 1c15dc236ad7d489 +Block 0030 [ 77]: 57c630419d7fa503 +Block 0030 [ 78]: a5ec2b38561864cf +Block 0030 [ 79]: 51056353bcccaaea +Block 0030 [ 80]: da73a3459a97b928 +Block 0030 [ 81]: bd3279d2117f0962 +Block 0030 [ 82]: 42fc1367b4296b8b +Block 0030 [ 83]: 4de989cf50579856 +Block 0030 [ 84]: 9c11f82833791e40 +Block 0030 [ 85]: 6be709cb596edf6c +Block 0030 [ 86]: fb68b38c53e92279 +Block 0030 [ 87]: 68f1a49c0cb2311c +Block 0030 [ 88]: 50a4612fd938d89e +Block 0030 [ 89]: d58eee675fa3a41f +Block 0030 [ 90]: 870ed05ee6350067 +Block 0030 [ 91]: 8c53bd46aba7beec +Block 0030 [ 92]: e546cea63e89529c +Block 0030 [ 93]: 85bb7096cc9b51e2 +Block 0030 [ 94]: 9b151d482e5f737f +Block 0030 [ 95]: 3e02ee4e48d40847 +Block 0030 [ 96]: 143794b3b806c105 +Block 0030 [ 97]: 740138578a4412e3 +Block 0030 [ 98]: d6e1430d236fbd8d +Block 0030 [ 99]: c93ff2afac930718 +Block 0030 [100]: 0ee3fc474f99b65c +Block 0030 [101]: 7bc02766f6986262 +Block 0030 [102]: bc4687933c275a94 +Block 0030 [103]: e2ec1bc66998dfcd +Block 0030 [104]: 0f3137a4c7c39136 +Block 0030 [105]: 6640cc5a47acc8da +Block 0030 [106]: e2e2b4ddd0b254e1 +Block 0030 [107]: 2851fdb6ecbb9717 +Block 0030 [108]: 3bfdbefaee7b1d3b +Block 0030 [109]: 0b20c582f9b86a9a +Block 0030 [110]: dc058e810c81fc5f +Block 0030 [111]: dc1ad509e96d5af4 +Block 0030 [112]: ea2b48353d92a0c8 +Block 0030 [113]: 4f0fbd9411f1aefe +Block 0030 [114]: df2ee5a34ef9892b +Block 0030 [115]: 88d91adc176ece1b +Block 0030 [116]: e493018de47fbbf3 +Block 0030 [117]: 0bc0d0efc7465b23 +Block 0030 [118]: 616c33128632676c +Block 0030 [119]: 3c17e6a96769a2dc +Block 0030 [120]: 2eb32b1f6f7ee404 +Block 0030 [121]: 3b9bd65bcf653b07 +Block 0030 [122]: a23aec57c56882ec +Block 0030 [123]: 805e394d2b515733 +Block 0030 [124]: 3445d77be8923ddf +Block 0030 [125]: 20d3726bef9ac7b4 +Block 0030 [126]: 8f781753caa7d491 +Block 0030 [127]: 6b0ec3c5e1d47486 +Block 0031 [ 0]: 8306f7c967b395c3 +Block 0031 [ 1]: ffbda0ec347706b6 +Block 0031 [ 2]: 6b538b8f54fde01d +Block 0031 [ 3]: 92cddba06a854e63 +Block 0031 [ 4]: e99652ed7a685653 +Block 0031 [ 5]: 06285bf3d2c84177 +Block 0031 [ 6]: 4fd4db438b0a25c6 +Block 0031 [ 7]: 3d593b9d18304741 +Block 0031 [ 8]: e2a49f385a3ec381 +Block 0031 [ 9]: 9ea8d9ec4a6ebacf +Block 0031 [ 10]: b0013cf98afbadbf +Block 0031 [ 11]: dbdcc22dac267551 +Block 0031 [ 12]: 379d1119cb488e8a +Block 0031 [ 13]: 67c4a226cae340d2 +Block 0031 [ 14]: 61bb2a63fbf188d4 +Block 0031 [ 15]: 0f817bb25ea1b0a4 +Block 0031 [ 16]: 0f94ca725ccccba3 +Block 0031 [ 17]: a632e0f21c8f58b8 +Block 0031 [ 18]: 1d79a5e778c40ab6 +Block 0031 [ 19]: 79e3dc533eebfc58 +Block 0031 [ 20]: 1a2a047311c1b025 +Block 0031 [ 21]: 73489e4eedbaec14 +Block 0031 [ 22]: 318ba718b36de770 +Block 0031 [ 23]: 2ccaebfbe880e7ee +Block 0031 [ 24]: aa65a3cf94a7cc82 +Block 0031 [ 25]: 96f862a3645089a4 +Block 0031 [ 26]: 45456f474da39292 +Block 0031 [ 27]: 293b382f5b70f9d4 +Block 0031 [ 28]: 6837e6047dc46312 +Block 0031 [ 29]: 5f0491803d570380 +Block 0031 [ 30]: 77d19869608ac4f1 +Block 0031 [ 31]: d7f936ed6a30c940 +Block 0031 [ 32]: 2c94e8b715017145 +Block 0031 [ 33]: 3db8ea9151bf639e +Block 0031 [ 34]: 04d98fc999448e08 +Block 0031 [ 35]: 1e30799273f79847 +Block 0031 [ 36]: ed4a299ddef0824c +Block 0031 [ 37]: 53059a92df99a968 +Block 0031 [ 38]: 6317980fda9bd7ac +Block 0031 [ 39]: 531c258c22b37111 +Block 0031 [ 40]: 3e144cb617d753e5 +Block 0031 [ 41]: 0ad1b6cc800fad97 +Block 0031 [ 42]: 485de075ce354cf7 +Block 0031 [ 43]: 3e939cbdcbe8d38b +Block 0031 [ 44]: 0997fe08f57f0688 +Block 0031 [ 45]: 0c29cbb8ff0520a0 +Block 0031 [ 46]: 9013fa5da1f9d57e +Block 0031 [ 47]: 36eb3989037992db +Block 0031 [ 48]: d28c2374d860cc20 +Block 0031 [ 49]: 79cc56225c2ebc97 +Block 0031 [ 50]: 80ee579977e66ce9 +Block 0031 [ 51]: ef37303706d4c739 +Block 0031 [ 52]: c12bb9458ec378b3 +Block 0031 [ 53]: ab8b1475ca99dee1 +Block 0031 [ 54]: e01ccdb1c01665f5 +Block 0031 [ 55]: e9103674ac072d8e +Block 0031 [ 56]: 1bd24ece78517070 +Block 0031 [ 57]: 44438d3d8f2a34ac +Block 0031 [ 58]: 5a662ad1c9bb32ad +Block 0031 [ 59]: 60ea59c0ec8b19fb +Block 0031 [ 60]: ed360f0271f6e226 +Block 0031 [ 61]: ff6fe136d8939f79 +Block 0031 [ 62]: 3aae328e3bcf3077 +Block 0031 [ 63]: 7a1009c1813ebb07 +Block 0031 [ 64]: f7fa7ff6b5cff9dc +Block 0031 [ 65]: 6aafbdc262751941 +Block 0031 [ 66]: 318323a996e7a435 +Block 0031 [ 67]: daaba3ad743cbb49 +Block 0031 [ 68]: a0993c7c36cbbf10 +Block 0031 [ 69]: 263840e836b8c805 +Block 0031 [ 70]: 8bedb868059ad2e8 +Block 0031 [ 71]: 61a1155c5a5a0d77 +Block 0031 [ 72]: 7ed07df38823f7d6 +Block 0031 [ 73]: deaf2fe38de9a9b1 +Block 0031 [ 74]: 13c1471961aa3032 +Block 0031 [ 75]: 865379c27a3afe33 +Block 0031 [ 76]: 10f2c731e3471ff8 +Block 0031 [ 77]: d11ec955b352ea34 +Block 0031 [ 78]: 1bae54b12af0ee66 +Block 0031 [ 79]: 6d2191bc118b5106 +Block 0031 [ 80]: 2ca4a296fae792c1 +Block 0031 [ 81]: ba0a2f5e9545eb65 +Block 0031 [ 82]: b02a49851af4f76f +Block 0031 [ 83]: c214f20bac978c16 +Block 0031 [ 84]: 811c3e9926388f27 +Block 0031 [ 85]: a211b6e9a6d66463 +Block 0031 [ 86]: 01e5b225c481858a +Block 0031 [ 87]: 39d92f1aec39be76 +Block 0031 [ 88]: 79c9f3ee5bbd64c8 +Block 0031 [ 89]: a451d0ee456f1ad7 +Block 0031 [ 90]: f210d043b918cc7e +Block 0031 [ 91]: fd385af25e8eb5d4 +Block 0031 [ 92]: 4c1297afd1f15d9b +Block 0031 [ 93]: 31c395a3a375c5b7 +Block 0031 [ 94]: 34a9b2385663c299 +Block 0031 [ 95]: 3d99bcd6d489beeb +Block 0031 [ 96]: a6e71b785c66ae8d +Block 0031 [ 97]: 601e41b8f3311735 +Block 0031 [ 98]: b95597e39654bb80 +Block 0031 [ 99]: 2ba68c443b1388cd +Block 0031 [100]: c2eb6ec1890299d0 +Block 0031 [101]: 450921c9d7985bd0 +Block 0031 [102]: 51432dd07403de26 +Block 0031 [103]: e9c807d29d00abef +Block 0031 [104]: 69f4eac4ce9ece4f +Block 0031 [105]: e9e1977d0ec7b38f +Block 0031 [106]: 5ba243615e820eaa +Block 0031 [107]: 32f5d778185e5134 +Block 0031 [108]: 4052e09b2628a83e +Block 0031 [109]: cc8997055934d815 +Block 0031 [110]: 82037f7a6beef794 +Block 0031 [111]: 28943b7f1c12e2a3 +Block 0031 [112]: 23cccf5ec328d527 +Block 0031 [113]: 44d9465be2cf4352 +Block 0031 [114]: f7753906b77a4eed +Block 0031 [115]: 6aaf7384c73c1dc5 +Block 0031 [116]: 148aa0ed8ab6ee20 +Block 0031 [117]: f6b34a35560f84fe +Block 0031 [118]: 5958fa89d0ed311d +Block 0031 [119]: e229f574b84ba2d8 +Block 0031 [120]: 6e9a4188a3f6756a +Block 0031 [121]: ec28503a0854e61a +Block 0031 [122]: 57cd455e58f6f8b0 +Block 0031 [123]: 1a3541b15feb7f05 +Block 0031 [124]: 57cfb9d20479da49 +Block 0031 [125]: 4099654bc6607f69 +Block 0031 [126]: f142a1126075a5c8 +Block 0031 [127]: c341b3ca45c10da5 +Tag: 51 2b 39 1b 6f 11 62 97 53 71 d3 09 19 73 42 94 f8 68 e3 be 39 84 f3 c1 a1 3a 4d b9 fa be 4a cb diff --git a/deps/phc-winner-argon2-20190702/kats/argon2d.shasum b/deps/phc-winner-argon2-20190702/kats/argon2d.shasum new file mode 100644 index 000000000..b1b045d1b --- /dev/null +++ b/deps/phc-winner-argon2-20190702/kats/argon2d.shasum @@ -0,0 +1 @@ +73619cfe0f35e52fdd1ca2595ffaa359879467407f98b61f4969c2861cc329ce argon2d diff --git a/deps/phc-winner-argon2-20190702/kats/argon2d_v16 b/deps/phc-winner-argon2-20190702/kats/argon2d_v16 new file mode 100644 index 000000000..d35bd4269 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/kats/argon2d_v16 @@ -0,0 +1,12304 @@ +======================================= +Argon2d version number 16 +======================================= +Memory: 32 KiB, Iterations: 3, Parallelism: 4 lanes, Tag length: 32 bytes +Password[32]: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +Salt[16]: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +Secret[8]: 03 03 03 03 03 03 03 03 +Associated data[12]: 04 04 04 04 04 04 04 04 04 04 04 04 +Pre-hashing digest: ec dc 26 dc 6b dd 21 56 19 68 97 aa 8c c9 a0 4c 03 ed 07 cd 12 92 67 c5 3c a6 ae f7 76 a4 30 89 6a 09 80 54 e4 de c3 e0 2e cd 82 c4 7f 56 2c a2 73 d2 f6 97 8a 5c 05 41 1a 0c d0 9d 47 7b 7b 06 + + After pass 0: +Block 0000 [ 0]: b0470f8400af9a3e +Block 0000 [ 1]: 73761d3efffb3c57 +Block 0000 [ 2]: 369f09e4da0c49b4 +Block 0000 [ 3]: f0ae6399a00bba82 +Block 0000 [ 4]: eee79cd2f0460d60 +Block 0000 [ 5]: 297b71501a8f338e +Block 0000 [ 6]: 9b61176d407909c3 +Block 0000 [ 7]: 66ff2a7fa45fae7e +Block 0000 [ 8]: c25d34462fb86e28 +Block 0000 [ 9]: 1722d2592c6d2ee9 +Block 0000 [ 10]: 4e53ae3da056ed0b +Block 0000 [ 11]: 07fe2bba6b66c178 +Block 0000 [ 12]: 5ec4cde6415931a2 +Block 0000 [ 13]: 35f1752594c09eb6 +Block 0000 [ 14]: 440d7f2b2fcfc0b2 +Block 0000 [ 15]: 9bd8f0a5b3ddedcc +Block 0000 [ 16]: 45577256f4ed31f1 +Block 0000 [ 17]: 722c5080dcb4b97a +Block 0000 [ 18]: e00041f0806886e4 +Block 0000 [ 19]: fe05098342a9d3fb +Block 0000 [ 20]: a8ab223d3d042e8b +Block 0000 [ 21]: 503fbc822817e86a +Block 0000 [ 22]: 05cc6a2089cc5d48 +Block 0000 [ 23]: eb3ada41307fc6ca +Block 0000 [ 24]: 83e52b2ff5b82787 +Block 0000 [ 25]: 310678685cead533 +Block 0000 [ 26]: 3a30a891a9347881 +Block 0000 [ 27]: 8a0bd25d5560dd7b +Block 0000 [ 28]: 263a1a16487c9dcd +Block 0000 [ 29]: 9b2c75e65c7aeb33 +Block 0000 [ 30]: 9a2d2e8e60a7ee9e +Block 0000 [ 31]: 18d5e488e8f929b2 +Block 0000 [ 32]: 53e264db9a04474f +Block 0000 [ 33]: c777f5c8fbc2b4c8 +Block 0000 [ 34]: 017246c703bdf7b0 +Block 0000 [ 35]: 30a5cbd790558b68 +Block 0000 [ 36]: 33a1b499675bcbeb +Block 0000 [ 37]: 23ddf458c2cb3da4 +Block 0000 [ 38]: 608a7b074a001e4a +Block 0000 [ 39]: 2f467b32c96b96bf +Block 0000 [ 40]: 7747313d71e791b2 +Block 0000 [ 41]: 485d66811d2f3814 +Block 0000 [ 42]: ba99a9bd1e43be30 +Block 0000 [ 43]: 53f0cd6ae19f0f0d +Block 0000 [ 44]: 59137981bd54937b +Block 0000 [ 45]: c5f473a3df6b9855 +Block 0000 [ 46]: 2ae6dcdbeaab3163 +Block 0000 [ 47]: a4fdb3388c42acc0 +Block 0000 [ 48]: 7bfab3c558e71ba4 +Block 0000 [ 49]: fca67432297d1cc4 +Block 0000 [ 50]: 57eced62c617b8ee +Block 0000 [ 51]: ead2fcf6b9865e75 +Block 0000 [ 52]: 1e0415b7d63186ae +Block 0000 [ 53]: 48ab90d7e3446023 +Block 0000 [ 54]: 6cb87870278b3f88 +Block 0000 [ 55]: 92d7d7605ae82850 +Block 0000 [ 56]: 2c00219bee6cace9 +Block 0000 [ 57]: 3986013bf8aa5be9 +Block 0000 [ 58]: 0f37c1ace5344089 +Block 0000 [ 59]: 398a91714ecd2c80 +Block 0000 [ 60]: 8adf42359d4c68aa +Block 0000 [ 61]: 1546fb42e3581df7 +Block 0000 [ 62]: f37a594c954bc404 +Block 0000 [ 63]: 2002d1097c0ce1c9 +Block 0000 [ 64]: 44d379e56798d98b +Block 0000 [ 65]: 8fd7eca2c1ba9bf1 +Block 0000 [ 66]: d7692a1ebae09a8f +Block 0000 [ 67]: 9dd054b950c447c2 +Block 0000 [ 68]: 8bd1f021f9e66f28 +Block 0000 [ 69]: 1abc5cab26fe2b45 +Block 0000 [ 70]: 9437187b1b2374f2 +Block 0000 [ 71]: 036fa42f4670a4cd +Block 0000 [ 72]: 3cda85705397c20c +Block 0000 [ 73]: 61d94f7670dc5745 +Block 0000 [ 74]: 48472cc130ec3dee +Block 0000 [ 75]: 7c375245b55f305e +Block 0000 [ 76]: 6630e68e114bdd1c +Block 0000 [ 77]: 79c8e7a1fd0b6d4e +Block 0000 [ 78]: f298c7419222a6a4 +Block 0000 [ 79]: f4659ba158b5934f +Block 0000 [ 80]: 972162604d305712 +Block 0000 [ 81]: a35a2238c97be97a +Block 0000 [ 82]: 7e79114089c65562 +Block 0000 [ 83]: bb789be2751a1de1 +Block 0000 [ 84]: 8efbfadc522fcfdb +Block 0000 [ 85]: 780d4e1a6fd7c6b5 +Block 0000 [ 86]: 6b9cfe77e601e7eb +Block 0000 [ 87]: 4f5537e3a224f600 +Block 0000 [ 88]: c5dfbee166944e3b +Block 0000 [ 89]: f42877c75d6a7ef2 +Block 0000 [ 90]: a7d34acad6a5a97f +Block 0000 [ 91]: 50d4dd96e00368bd +Block 0000 [ 92]: 092272774f2216d5 +Block 0000 [ 93]: 0a635f82303e1c4f +Block 0000 [ 94]: 9b9d405490f6a720 +Block 0000 [ 95]: 586ae3294ed8c291 +Block 0000 [ 96]: 3003bbca0021b5b0 +Block 0000 [ 97]: 68669eba07ae39f4 +Block 0000 [ 98]: 01715b14a9d26ef1 +Block 0000 [ 99]: 283673720c02984d +Block 0000 [100]: 930f81c178e5cb14 +Block 0000 [101]: a0a5edb1f31eba1c +Block 0000 [102]: 7aaee5640b99640b +Block 0000 [103]: 2e99d18246f5f4d9 +Block 0000 [104]: 6ea36e6869f1ac2f +Block 0000 [105]: 3581f1d1a2b126d7 +Block 0000 [106]: 0c8a55beefe5d92f +Block 0000 [107]: c9025ffe0d55429e +Block 0000 [108]: e9c2d55dd56a1b49 +Block 0000 [109]: e1449008d709b955 +Block 0000 [110]: 9d83305392cd07fa +Block 0000 [111]: 9c67f71d0d966cd0 +Block 0000 [112]: 6ac22b04295d8c0a +Block 0000 [113]: 5883e67617dde560 +Block 0000 [114]: 0901b89c026d313f +Block 0000 [115]: 11558f2456435166 +Block 0000 [116]: 99cfd4734a726790 +Block 0000 [117]: 407a21fa4523dbcd +Block 0000 [118]: f484b24dd1f08c68 +Block 0000 [119]: 31cb0c527a35975d +Block 0000 [120]: 65a55c3e82335f9f +Block 0000 [121]: 2a6f20c9818beb78 +Block 0000 [122]: 2d46e2c60c8e9d03 +Block 0000 [123]: 010bf8d357d74314 +Block 0000 [124]: 9920b8105a72ca59 +Block 0000 [125]: 5ba81a39878a8d89 +Block 0000 [126]: 5536fb2357880f88 +Block 0000 [127]: 8d41d5c05bb02c76 +Block 0001 [ 0]: 7c4dea0e2d60f524 +Block 0001 [ 1]: aa2a00de14b18b07 +Block 0001 [ 2]: 21096c8af065b38f +Block 0001 [ 3]: 497933239d8a973a +Block 0001 [ 4]: a142a7f757f8fc7e +Block 0001 [ 5]: d40e8a8d9a21e249 +Block 0001 [ 6]: b1ec7f19913afc1f +Block 0001 [ 7]: a338cff2cc8bc4ac +Block 0001 [ 8]: aac0b85583bf7289 +Block 0001 [ 9]: 690d5a54662e6410 +Block 0001 [ 10]: ac468078f037f0d6 +Block 0001 [ 11]: 384841ffe93d19e5 +Block 0001 [ 12]: 720f69aeff671d51 +Block 0001 [ 13]: d198555d8468ae2b +Block 0001 [ 14]: 7ffeefca4c978232 +Block 0001 [ 15]: 3360f4dfdf6895b5 +Block 0001 [ 16]: db53bd1b7e54520a +Block 0001 [ 17]: ea9f149f6212a583 +Block 0001 [ 18]: 020b78f177d94965 +Block 0001 [ 19]: 8ce06021e66d0bf2 +Block 0001 [ 20]: 5466008802bef56e +Block 0001 [ 21]: d8a227d38b6f358c +Block 0001 [ 22]: 296734d9cfe0d11e +Block 0001 [ 23]: 3e2eeb4342eb2262 +Block 0001 [ 24]: 46a62cb525e796c1 +Block 0001 [ 25]: 1824b1bd628b2847 +Block 0001 [ 26]: cc813a25271149a9 +Block 0001 [ 27]: fb0fcbe1fca6e76a +Block 0001 [ 28]: f5efd2568201f4da +Block 0001 [ 29]: 905670995124373a +Block 0001 [ 30]: d7b0ba4c678a83cc +Block 0001 [ 31]: 1c3c260b14d880ab +Block 0001 [ 32]: 56efe59ab054f179 +Block 0001 [ 33]: c695b1e57cb7af58 +Block 0001 [ 34]: 97885a5f0d1674a2 +Block 0001 [ 35]: a629559911b65eef +Block 0001 [ 36]: c2f2e5fc0c03a7c0 +Block 0001 [ 37]: 2dee9f43d23c80b2 +Block 0001 [ 38]: 5f68bda41bfcfa3d +Block 0001 [ 39]: fc7855b664b3caf8 +Block 0001 [ 40]: 66e223e79d9624bf +Block 0001 [ 41]: bfcac21a1f58b978 +Block 0001 [ 42]: 373154530d4e9cfe +Block 0001 [ 43]: 42a83b6b5a95a8f9 +Block 0001 [ 44]: dec51468eec2db12 +Block 0001 [ 45]: 52ca0501bc82cc25 +Block 0001 [ 46]: d2aae011fe9ef8e7 +Block 0001 [ 47]: 16602dccb9ceb742 +Block 0001 [ 48]: 573651bd7f1e70e4 +Block 0001 [ 49]: 92ca272adcc5f65d +Block 0001 [ 50]: fe1f0568275b66fc +Block 0001 [ 51]: d961aa493d1530f1 +Block 0001 [ 52]: d7d276d4745ebfb7 +Block 0001 [ 53]: adacd9d6986d03e6 +Block 0001 [ 54]: e3c5674a50aa9abc +Block 0001 [ 55]: 0cf2efe898a18bf7 +Block 0001 [ 56]: 7797339171b236d2 +Block 0001 [ 57]: bbe52e123b2df8e0 +Block 0001 [ 58]: eb1b7fba9e7589aa +Block 0001 [ 59]: 840badae7501c2be +Block 0001 [ 60]: 06deeda1ce2988d7 +Block 0001 [ 61]: 140a8210912f6372 +Block 0001 [ 62]: bcce0defcfaf3ff0 +Block 0001 [ 63]: bd8bbe3a5b7357c5 +Block 0001 [ 64]: 49637a6af40bb8e3 +Block 0001 [ 65]: fd75ad0b367affa6 +Block 0001 [ 66]: 69add785f11074df +Block 0001 [ 67]: 8454b757336e64a5 +Block 0001 [ 68]: 386ab1f621ab6142 +Block 0001 [ 69]: c2cd42d349dce6b6 +Block 0001 [ 70]: e32969ca5db538b4 +Block 0001 [ 71]: 74480a0d6ac3bf3f +Block 0001 [ 72]: 571082cf3b01e4c5 +Block 0001 [ 73]: 6bb06bd9260dea72 +Block 0001 [ 74]: d15a6b862bc7a814 +Block 0001 [ 75]: 558c4bd2255f8037 +Block 0001 [ 76]: 64b6c7b26cab95ce +Block 0001 [ 77]: 9a09637d8a22fc29 +Block 0001 [ 78]: 3df548df02d4b16c +Block 0001 [ 79]: 829be92eb1e213d5 +Block 0001 [ 80]: e6738c64ece294c0 +Block 0001 [ 81]: 66462b0b89f83f59 +Block 0001 [ 82]: e5013615a05a323e +Block 0001 [ 83]: 7cdfc7bdba04a275 +Block 0001 [ 84]: d0b9783aa00824f8 +Block 0001 [ 85]: 0f7febc5cf63d48b +Block 0001 [ 86]: ac3b53f9b1e8fff0 +Block 0001 [ 87]: fb6f0353cc6266ed +Block 0001 [ 88]: 70389279c1af15da +Block 0001 [ 89]: 5feb883aa01dac56 +Block 0001 [ 90]: 62c86cb126dd7e0a +Block 0001 [ 91]: 77dc24689be31b73 +Block 0001 [ 92]: 7591fa8815fee297 +Block 0001 [ 93]: a31a34a642aeee28 +Block 0001 [ 94]: 3cd8b4e84083f0bc +Block 0001 [ 95]: 88d90cc76c011122 +Block 0001 [ 96]: fc5548d89ff93615 +Block 0001 [ 97]: 4d0c9885517a4d90 +Block 0001 [ 98]: 10c21d0b82cd815e +Block 0001 [ 99]: 36978c5f64e948da +Block 0001 [100]: 93d37e62eb63da10 +Block 0001 [101]: c2063e399f8e0681 +Block 0001 [102]: 9f3ad235b61e3d64 +Block 0001 [103]: d0b5897523f036ce +Block 0001 [104]: 3d4bc104da4058eb +Block 0001 [105]: cab22022accf99e7 +Block 0001 [106]: 0a196df3f344aff8 +Block 0001 [107]: 7f2b12300165aee0 +Block 0001 [108]: fd653635d914158b +Block 0001 [109]: fb21692a6c1366a6 +Block 0001 [110]: edd6c2d040094961 +Block 0001 [111]: c79280e9941ec27a +Block 0001 [112]: 280fbce8e5cd6960 +Block 0001 [113]: 7cc512600d40f97b +Block 0001 [114]: 113b17fcc8deb868 +Block 0001 [115]: bc46307516881707 +Block 0001 [116]: c0aff8d55ea5a700 +Block 0001 [117]: d4c1d8dcbf1ecee8 +Block 0001 [118]: 3f09e229a0cf497f +Block 0001 [119]: 1def3afaac33feaf +Block 0001 [120]: cc2096dcd2211d73 +Block 0001 [121]: dfa75a456a313e59 +Block 0001 [122]: 3fe11ef2c04e65eb +Block 0001 [123]: ba1b015c57ab3dc5 +Block 0001 [124]: d4a1ca9073a23c77 +Block 0001 [125]: 51ac68a0fb4e1cb0 +Block 0001 [126]: ef182d66a08362fc +Block 0001 [127]: 699c95881a1b1060 +Block 0002 [ 0]: 71b8ec93e3f732c5 +Block 0002 [ 1]: 2921408aba7a6ee8 +Block 0002 [ 2]: c3025490c26543cd +Block 0002 [ 3]: 2e30a512c2b6484d +Block 0002 [ 4]: 162f85d06406e065 +Block 0002 [ 5]: 099550c9a0775360 +Block 0002 [ 6]: 826cd9cc4508ced2 +Block 0002 [ 7]: 8b50e67c9e390589 +Block 0002 [ 8]: 3f65b5a83ab16eeb +Block 0002 [ 9]: 17a13cfedda02c46 +Block 0002 [ 10]: caffc1c212eaf6da +Block 0002 [ 11]: 70544d093dae2eff +Block 0002 [ 12]: 75f87da3c49ef5cd +Block 0002 [ 13]: 3908fe7447cb509d +Block 0002 [ 14]: 2c13ce7102738447 +Block 0002 [ 15]: e7621f9479588459 +Block 0002 [ 16]: 89dd43987c830d89 +Block 0002 [ 17]: 4be2c7d1536f7afa +Block 0002 [ 18]: 60268880e79480d9 +Block 0002 [ 19]: 1ed06be1eecb34d7 +Block 0002 [ 20]: 2882a4262d1541c6 +Block 0002 [ 21]: bddd95b9db563f26 +Block 0002 [ 22]: fced5f7ad7b81f12 +Block 0002 [ 23]: c04469c639662e04 +Block 0002 [ 24]: 460754262f521e05 +Block 0002 [ 25]: 21c7d27cc5452fdd +Block 0002 [ 26]: 1310befaa07e57bc +Block 0002 [ 27]: ee7c3e228022978d +Block 0002 [ 28]: 64e2cf6ca5a6fdd8 +Block 0002 [ 29]: 5cbc6ef1df9cd675 +Block 0002 [ 30]: d6e3caee351230ba +Block 0002 [ 31]: 61546e25e5983aa1 +Block 0002 [ 32]: d41c9423345965f0 +Block 0002 [ 33]: 407791f4576a3aa8 +Block 0002 [ 34]: 46db5a0bcd5c846f +Block 0002 [ 35]: 8a95ee17bfe0ec08 +Block 0002 [ 36]: 5876f92dfc84ba7c +Block 0002 [ 37]: 8da713191be496b1 +Block 0002 [ 38]: f4c8167930dffef9 +Block 0002 [ 39]: 9781a08d32a0b1cf +Block 0002 [ 40]: 2037493b5f57d782 +Block 0002 [ 41]: 7e5354a5a79301a6 +Block 0002 [ 42]: ca1c80a7d3c25855 +Block 0002 [ 43]: 7c16b889b05d5d15 +Block 0002 [ 44]: cc8d72fcfa904393 +Block 0002 [ 45]: e69be7ed9d4a4b9b +Block 0002 [ 46]: 5b83edd2dc756478 +Block 0002 [ 47]: f06469381ce4b98c +Block 0002 [ 48]: 2cbb142fe5a0e8b1 +Block 0002 [ 49]: 25a7cc27085c2fa0 +Block 0002 [ 50]: 39bca88c1a5b175e +Block 0002 [ 51]: 2349a999fc48b56e +Block 0002 [ 52]: c498911f0fccf069 +Block 0002 [ 53]: fcc68ab56005de17 +Block 0002 [ 54]: c6ad828542abea0d +Block 0002 [ 55]: c8af3d891cbb47c8 +Block 0002 [ 56]: 3b95683722fcc593 +Block 0002 [ 57]: 418bd5f4f9ca062d +Block 0002 [ 58]: 111a6b7f103d805c +Block 0002 [ 59]: 319537bd4bb50060 +Block 0002 [ 60]: b431772961ad550b +Block 0002 [ 61]: cdd54e4909e4f5d6 +Block 0002 [ 62]: 4825697dcafe9f1a +Block 0002 [ 63]: b22fdd05afa7dcb2 +Block 0002 [ 64]: d740558c3e22b6b7 +Block 0002 [ 65]: 1a6700ef884972b8 +Block 0002 [ 66]: e1ddada589d6769e +Block 0002 [ 67]: 16e7d46c2f308c57 +Block 0002 [ 68]: a805a5577cabb7ac +Block 0002 [ 69]: e3190cb63ff4cea2 +Block 0002 [ 70]: d1d59749b12e2218 +Block 0002 [ 71]: aa05daeb0365bb35 +Block 0002 [ 72]: 53219e14d6ffd549 +Block 0002 [ 73]: 7f404b81efa8bcd8 +Block 0002 [ 74]: 3174a66d45b4c8ca +Block 0002 [ 75]: 6f4ece4db00d016b +Block 0002 [ 76]: 72609905da2763aa +Block 0002 [ 77]: b4df27508135bc32 +Block 0002 [ 78]: 2a1af06212e7ab05 +Block 0002 [ 79]: 83a250b2fc0dd162 +Block 0002 [ 80]: af2eb57044690474 +Block 0002 [ 81]: e308e6cd64304bab +Block 0002 [ 82]: 305c0c0a99e443ab +Block 0002 [ 83]: bc6b254c9b761c71 +Block 0002 [ 84]: 2eeb658cd9a94706 +Block 0002 [ 85]: 8b2e74a5947310b3 +Block 0002 [ 86]: 7eb34be2120cf80a +Block 0002 [ 87]: dff3f71f4898493b +Block 0002 [ 88]: c8cef85d3f0d5b4c +Block 0002 [ 89]: 664806ac6dade916 +Block 0002 [ 90]: bb65d599c8c080df +Block 0002 [ 91]: c54b8e93dbc7ded9 +Block 0002 [ 92]: 50a030ce6618ee8c +Block 0002 [ 93]: 45f54cb2aaa89e65 +Block 0002 [ 94]: 267b21b4235d7346 +Block 0002 [ 95]: 1bf408ed4e75b1dc +Block 0002 [ 96]: 0e8f1edbd4bbd0c8 +Block 0002 [ 97]: a1adb6d652b48eba +Block 0002 [ 98]: 09d7a628b284f260 +Block 0002 [ 99]: 2eb568f917e0a238 +Block 0002 [100]: 12067efa542954da +Block 0002 [101]: fed335dcd6c0d327 +Block 0002 [102]: 0ef0658af19df88c +Block 0002 [103]: 79772b8c71426f57 +Block 0002 [104]: a3fa41213ac1f06f +Block 0002 [105]: c1121c7f277a0413 +Block 0002 [106]: 69417dc62124eba2 +Block 0002 [107]: e5f073d09cc97483 +Block 0002 [108]: 6d4b689e3050ffeb +Block 0002 [109]: 8460b46071ee44e6 +Block 0002 [110]: 4f086191e05c2da3 +Block 0002 [111]: 0354280e4d44d36f +Block 0002 [112]: 790c8aa9173258fb +Block 0002 [113]: 60ed51d0eb2bb310 +Block 0002 [114]: da8ca7fcaab8acb4 +Block 0002 [115]: c6999b51539b1dea +Block 0002 [116]: 362b9d5fa7b5ebd5 +Block 0002 [117]: ef482e43f06ce25c +Block 0002 [118]: 6dc1ee2e3359b2d0 +Block 0002 [119]: 25afa5d76d54d610 +Block 0002 [120]: 878969f20bf69cd5 +Block 0002 [121]: 924a37340899c61f +Block 0002 [122]: 7ed02ee734978796 +Block 0002 [123]: 40fc63ad985ec23f +Block 0002 [124]: 3928395a5dd1a2bc +Block 0002 [125]: 9abb635194848088 +Block 0002 [126]: 4a5d219cac1ab9e7 +Block 0002 [127]: 3194b42ac43716a7 +Block 0003 [ 0]: ed9b018cf73119d4 +Block 0003 [ 1]: 676d7e00d2b3d934 +Block 0003 [ 2]: 24ed504cf99b75a2 +Block 0003 [ 3]: d9c68fa321957471 +Block 0003 [ 4]: c7dc7aeff1353f1e +Block 0003 [ 5]: 9a0b969f89ed418a +Block 0003 [ 6]: 043cfd3c93718f01 +Block 0003 [ 7]: e55c9f988adc8507 +Block 0003 [ 8]: d57fa23652f38e2f +Block 0003 [ 9]: 709d8bc2f7dd84f7 +Block 0003 [ 10]: ada563f3de793c91 +Block 0003 [ 11]: e27691545c44cc18 +Block 0003 [ 12]: 2fe9ca2b832c6714 +Block 0003 [ 13]: 747c2cab2953c670 +Block 0003 [ 14]: 6703532445d3915c +Block 0003 [ 15]: dfd77bc90722f024 +Block 0003 [ 16]: 16435ba9fbeb075d +Block 0003 [ 17]: 476d334c3dca8bfa +Block 0003 [ 18]: cde2fd89449eb0d5 +Block 0003 [ 19]: bd60a48ef022b66b +Block 0003 [ 20]: a2b9d31cb2bcc0ea +Block 0003 [ 21]: b5ea599c25604703 +Block 0003 [ 22]: 4120850f7df2620b +Block 0003 [ 23]: a0ecdb519966f5ee +Block 0003 [ 24]: 6463ec02a83f114d +Block 0003 [ 25]: 077ef4a147bf4cf4 +Block 0003 [ 26]: ceb96b986f2b6938 +Block 0003 [ 27]: 42dd9f1be3d42686 +Block 0003 [ 28]: d63add83abf847fd +Block 0003 [ 29]: 14798f3c6a47385c +Block 0003 [ 30]: 81a7c676faeff12f +Block 0003 [ 31]: 8007634d756d7974 +Block 0003 [ 32]: e530dd0f316b30e3 +Block 0003 [ 33]: 60537c75bc4e58f4 +Block 0003 [ 34]: 8c58c4b07d61a3c2 +Block 0003 [ 35]: 7314d4b84f29db19 +Block 0003 [ 36]: b1a8510d99f95311 +Block 0003 [ 37]: 77aec34e430a2ef3 +Block 0003 [ 38]: be9352608d95554c +Block 0003 [ 39]: afbdecc23c77e71a +Block 0003 [ 40]: ee9038b82427c8c6 +Block 0003 [ 41]: 3e7fe31ff4244515 +Block 0003 [ 42]: 9a19698f515d3421 +Block 0003 [ 43]: 6f8ff3c4f4815b14 +Block 0003 [ 44]: 761014fe861048a7 +Block 0003 [ 45]: 1f45dc9a00dc4d41 +Block 0003 [ 46]: 0b8b32add02a90bd +Block 0003 [ 47]: 7a009a892a306723 +Block 0003 [ 48]: 42cce6cfa293666e +Block 0003 [ 49]: b652771a017d6014 +Block 0003 [ 50]: a121c1f96f26c035 +Block 0003 [ 51]: d4ec5a9f263e50f3 +Block 0003 [ 52]: 6d2a4c8b05ef8267 +Block 0003 [ 53]: f61cf97cc03049fd +Block 0003 [ 54]: cc8397dd2288f295 +Block 0003 [ 55]: a77557382f89e947 +Block 0003 [ 56]: 403fb02df66263b8 +Block 0003 [ 57]: b76f07afa1117612 +Block 0003 [ 58]: 67c4c28018281163 +Block 0003 [ 59]: 092d53a36a29aa29 +Block 0003 [ 60]: 2f276cc30cb2d64a +Block 0003 [ 61]: 09b079ccc7d34bb5 +Block 0003 [ 62]: dec9a5b166f0ec7f +Block 0003 [ 63]: 7a88ad9e18177537 +Block 0003 [ 64]: 21a6a68a52e17069 +Block 0003 [ 65]: 97e42522e13bb917 +Block 0003 [ 66]: 49a945cf664ad2e3 +Block 0003 [ 67]: 7c90c7238fab3dc0 +Block 0003 [ 68]: f6847cbb9fc1dcf9 +Block 0003 [ 69]: 613b69f2ba41a4d6 +Block 0003 [ 70]: cd59fef52d150563 +Block 0003 [ 71]: b23fb8c47fc95d8e +Block 0003 [ 72]: 4eb21cc522448370 +Block 0003 [ 73]: be2a1cae856b6920 +Block 0003 [ 74]: 3598905d25c18c85 +Block 0003 [ 75]: 73b4c4eee6198073 +Block 0003 [ 76]: 16c26bcbac3bdf2c +Block 0003 [ 77]: f8ac9f5d95065fbe +Block 0003 [ 78]: 65648fc6460c45bf +Block 0003 [ 79]: a380fff8646f6293 +Block 0003 [ 80]: 3db7f55dcec13491 +Block 0003 [ 81]: 073383663b073614 +Block 0003 [ 82]: 79b12d0d0c82cb40 +Block 0003 [ 83]: 086a4b6b0fc2256a +Block 0003 [ 84]: ce61a9b255e7f76a +Block 0003 [ 85]: 30aacf6ee481f877 +Block 0003 [ 86]: c1035ed72ecf5286 +Block 0003 [ 87]: 8d7c39140fae6ef7 +Block 0003 [ 88]: d5a479c1cb9aba85 +Block 0003 [ 89]: f0a10cd2d8bb5f99 +Block 0003 [ 90]: b01948d3e6b8e3ea +Block 0003 [ 91]: dbbf70c01fac6be5 +Block 0003 [ 92]: 636ab4bdc5ca0716 +Block 0003 [ 93]: 61e4955bb3e60859 +Block 0003 [ 94]: d056e739fbb78902 +Block 0003 [ 95]: ad7bdf23e2d3c0e4 +Block 0003 [ 96]: 68b2dafb66a5c70d +Block 0003 [ 97]: aeb52729d6f0213f +Block 0003 [ 98]: d22801e34a52020e +Block 0003 [ 99]: 3e5f3f27cbb5c16b +Block 0003 [100]: c3dac10d2ee9a3b7 +Block 0003 [101]: 943bef903b65b36a +Block 0003 [102]: acdbd6a2e74a6d2e +Block 0003 [103]: 223fc07fb15b3c2e +Block 0003 [104]: 4cc21098fc36f7e9 +Block 0003 [105]: 6c4742940ea08300 +Block 0003 [106]: a318d8cbc50f01ce +Block 0003 [107]: a1223a4b89fe758c +Block 0003 [108]: 7df4cb5a8696ca03 +Block 0003 [109]: 27637f388536a4a9 +Block 0003 [110]: 1c563e66b7c61df7 +Block 0003 [111]: 4d92572792bd3787 +Block 0003 [112]: a3a589f00137e6bd +Block 0003 [113]: 480ae4ee49a1045b +Block 0003 [114]: 32e1a4543563d81a +Block 0003 [115]: caf283982a76d442 +Block 0003 [116]: f13be5d11aa516fe +Block 0003 [117]: e8a1dbd6fc937744 +Block 0003 [118]: 8c6aee1b9d7866f3 +Block 0003 [119]: cce7053af9f1aaa0 +Block 0003 [120]: eade4e2857a1a201 +Block 0003 [121]: fde12acd969b09b7 +Block 0003 [122]: 22d756c288c83344 +Block 0003 [123]: 02f684d861b7ca1f +Block 0003 [124]: 1fa704bee1681316 +Block 0003 [125]: 8df154c2ae1d9075 +Block 0003 [126]: 8c6c02319f35a7bf +Block 0003 [127]: 1766d7e719c829d3 +Block 0004 [ 0]: 90d839630181a712 +Block 0004 [ 1]: 31d40561345ccafe +Block 0004 [ 2]: ed3bb1ec934eb32a +Block 0004 [ 3]: 5158d93e82035417 +Block 0004 [ 4]: 628176e2ce74e373 +Block 0004 [ 5]: 2be8dd104a093ba5 +Block 0004 [ 6]: 5453f9a6c44d3631 +Block 0004 [ 7]: f8ea14f4bae9c0b7 +Block 0004 [ 8]: 95812642baad81ab +Block 0004 [ 9]: 5dfcb2fb77201eec +Block 0004 [ 10]: f79d47a8fb49794f +Block 0004 [ 11]: b2feee7f8f445b8e +Block 0004 [ 12]: 19b1d3ff0c53cf11 +Block 0004 [ 13]: 28f2554b95410c7d +Block 0004 [ 14]: cdfa040f869838b0 +Block 0004 [ 15]: a6f647991b3cb6ab +Block 0004 [ 16]: 91fc048145229e4c +Block 0004 [ 17]: ad19c42e4772ec1d +Block 0004 [ 18]: a1c37bbabe144901 +Block 0004 [ 19]: 89bd26a605f77b5b +Block 0004 [ 20]: 7794732d75f63a08 +Block 0004 [ 21]: f678f8f5e9c39808 +Block 0004 [ 22]: 5381a28c3ca44c6c +Block 0004 [ 23]: 8ae5e76c1e1122be +Block 0004 [ 24]: eee5585bab1a102f +Block 0004 [ 25]: 5e1f1fde2dbf1193 +Block 0004 [ 26]: 6b533d9727cc50fe +Block 0004 [ 27]: 87dafb6e3fbdc398 +Block 0004 [ 28]: 36f76d8fafcae2d0 +Block 0004 [ 29]: 15288254e14e5c2d +Block 0004 [ 30]: 496c6c8f8623621d +Block 0004 [ 31]: 28d16b519704b395 +Block 0004 [ 32]: e712775b8bb142a1 +Block 0004 [ 33]: 6a869b2a212c4e31 +Block 0004 [ 34]: 8524f52b679fd180 +Block 0004 [ 35]: 045b00049350acd7 +Block 0004 [ 36]: b66de5cc34a53bb8 +Block 0004 [ 37]: a0cfbc2274974caf +Block 0004 [ 38]: 56c94fb7d70e67cd +Block 0004 [ 39]: 006ce5dd55c8c12a +Block 0004 [ 40]: 60ef5183fe831ac5 +Block 0004 [ 41]: d89d487934705042 +Block 0004 [ 42]: 3b2acc4cbff1b2ba +Block 0004 [ 43]: 7bf6c5188eefdbb8 +Block 0004 [ 44]: 8c3b2593646988a8 +Block 0004 [ 45]: 28aa328e1a3e5b4b +Block 0004 [ 46]: 74fbb3c3b45b6637 +Block 0004 [ 47]: b20f255f1ce5a949 +Block 0004 [ 48]: 0358047b7364172e +Block 0004 [ 49]: 162c6c06f5bb0ea8 +Block 0004 [ 50]: 65ca6a515f0ee61a +Block 0004 [ 51]: 5f1cfa1e60f277c5 +Block 0004 [ 52]: 05e8c0ad94b7bc34 +Block 0004 [ 53]: f832de7a4bd3ac2f +Block 0004 [ 54]: 9eea74a6901b91a4 +Block 0004 [ 55]: 1f367789fc44140e +Block 0004 [ 56]: 695b670f7bc01632 +Block 0004 [ 57]: 3e7d34e670023872 +Block 0004 [ 58]: c989195f9b616264 +Block 0004 [ 59]: a21c5f971308c13a +Block 0004 [ 60]: 58b87503c8635980 +Block 0004 [ 61]: 3245610b4d97d82d +Block 0004 [ 62]: e34a0f2d155360b1 +Block 0004 [ 63]: baf280cbc7fffb87 +Block 0004 [ 64]: 58510f97a6f2e4fc +Block 0004 [ 65]: c3366abaa8b7eab1 +Block 0004 [ 66]: 893caba7b9600db0 +Block 0004 [ 67]: 37c367da3446b904 +Block 0004 [ 68]: 84167169b47affbc +Block 0004 [ 69]: 9dc74c47cc8d7f78 +Block 0004 [ 70]: aa6925dcf92952c7 +Block 0004 [ 71]: 59f66d9a13ca1062 +Block 0004 [ 72]: de96a08f9c99c2f3 +Block 0004 [ 73]: 30b98fc65d399fda +Block 0004 [ 74]: 950542d7df476453 +Block 0004 [ 75]: cb7fb37d21104379 +Block 0004 [ 76]: 2bea7104cd1c5ef3 +Block 0004 [ 77]: c54453a78f0101f7 +Block 0004 [ 78]: 93ff56dd2ba89557 +Block 0004 [ 79]: b838fe564d46e7f3 +Block 0004 [ 80]: 8960183d8596dfdc +Block 0004 [ 81]: f9b0885a7c7d64d9 +Block 0004 [ 82]: 6a44f97f4714b2b1 +Block 0004 [ 83]: fc9528da99669c4e +Block 0004 [ 84]: d8b7d4ca2567129d +Block 0004 [ 85]: 1720d486d7e638ce +Block 0004 [ 86]: 7a95ddcf453b2e08 +Block 0004 [ 87]: 9da746f32e51288f +Block 0004 [ 88]: f93accc446e95fb9 +Block 0004 [ 89]: 2d1de132a48664dd +Block 0004 [ 90]: 39583bba3d9fbb08 +Block 0004 [ 91]: 9a3da40a9dd5d893 +Block 0004 [ 92]: 3439fe746eb1d98b +Block 0004 [ 93]: b2854012ccc088fe +Block 0004 [ 94]: 0bd26ec0fbef03a6 +Block 0004 [ 95]: 412b9c3c62e87da1 +Block 0004 [ 96]: f2b20003dd729349 +Block 0004 [ 97]: 5096494607d466b0 +Block 0004 [ 98]: 9df5f7537e761192 +Block 0004 [ 99]: cba43f26b1a5934f +Block 0004 [100]: ffe6f2a661c64ddd +Block 0004 [101]: 42f416be423dd904 +Block 0004 [102]: 5c8a2a6a229e88aa +Block 0004 [103]: 45b7de400eddb52e +Block 0004 [104]: 61f0b2212a2560ca +Block 0004 [105]: a158ceb5c0937b7d +Block 0004 [106]: 62f686b1e4a7de10 +Block 0004 [107]: 45f6eba38f22f491 +Block 0004 [108]: 43b50d660b6c2fc5 +Block 0004 [109]: 2fce08a13cda1519 +Block 0004 [110]: 169c1a9c683cb235 +Block 0004 [111]: a5d2facdeffdde02 +Block 0004 [112]: 2ab227e7a7f5849d +Block 0004 [113]: efde35e81d357f68 +Block 0004 [114]: 4d5f2d83c52fce90 +Block 0004 [115]: 241c77003a456d44 +Block 0004 [116]: b5add1f38714d889 +Block 0004 [117]: 41666f254082da28 +Block 0004 [118]: 6d12a9213c48cbdb +Block 0004 [119]: 0bf9b91e0ed22fc7 +Block 0004 [120]: 02373fa7a4e3e90c +Block 0004 [121]: b1c086a91f0485dc +Block 0004 [122]: 1167003ca5e99357 +Block 0004 [123]: 141e5480972f7bfd +Block 0004 [124]: 63daa7474f351787 +Block 0004 [125]: 332052c9298085bb +Block 0004 [126]: 733ea09c23cb071d +Block 0004 [127]: fa41e42ec3d39e7f +Block 0005 [ 0]: 5e7846318659b41b +Block 0005 [ 1]: 5498eccba3733c30 +Block 0005 [ 2]: 3babdb1fb5d41161 +Block 0005 [ 3]: 36f2b33bdc764f24 +Block 0005 [ 4]: 3f221dda7d6d34bb +Block 0005 [ 5]: 77176ae7b153eadd +Block 0005 [ 6]: 342e2e8794a8af6e +Block 0005 [ 7]: 20dea27fc8fae486 +Block 0005 [ 8]: 15323b3e533f0c7a +Block 0005 [ 9]: 0193254289eb31e3 +Block 0005 [ 10]: 4a81fd81fb7d90b0 +Block 0005 [ 11]: 8f287ad488427dfe +Block 0005 [ 12]: d7eb8dedcc6cd803 +Block 0005 [ 13]: d9b6de0e50372560 +Block 0005 [ 14]: 324222fe078be0da +Block 0005 [ 15]: 6a948a5b4ebdbd71 +Block 0005 [ 16]: 52a1e7302ec5d8be +Block 0005 [ 17]: 6af1222211cb1b0d +Block 0005 [ 18]: b1d9f1ddb03d7da0 +Block 0005 [ 19]: 2d9bb8070b62cf15 +Block 0005 [ 20]: 5a87a430cd6f9f81 +Block 0005 [ 21]: 340bcc02b9ad15c9 +Block 0005 [ 22]: 98db72f822dd6a1b +Block 0005 [ 23]: f9305db39a479727 +Block 0005 [ 24]: 78c68f205955a9f3 +Block 0005 [ 25]: baadd583ec827375 +Block 0005 [ 26]: 291e96dda338f722 +Block 0005 [ 27]: ca2fd96c45f08d2b +Block 0005 [ 28]: 66295ca71d284284 +Block 0005 [ 29]: cf6aefc8074ed121 +Block 0005 [ 30]: 205c887346749eaf +Block 0005 [ 31]: d1a818c4cb17d88f +Block 0005 [ 32]: d28404b27af6d3de +Block 0005 [ 33]: 68f38514db6ce691 +Block 0005 [ 34]: 9810855101734602 +Block 0005 [ 35]: 334ed4ce0bbaa7d1 +Block 0005 [ 36]: 1769d56aad14c3da +Block 0005 [ 37]: 5040635b0964ca75 +Block 0005 [ 38]: 0d2d406dcd0da21e +Block 0005 [ 39]: 3f0d5711e7d95959 +Block 0005 [ 40]: b9648e9ccd94997e +Block 0005 [ 41]: cdbcdbd0291121a2 +Block 0005 [ 42]: c2c776e399fb1502 +Block 0005 [ 43]: 10d7b02208474647 +Block 0005 [ 44]: 8dd2cae279f20ec7 +Block 0005 [ 45]: e2a4911895890527 +Block 0005 [ 46]: d5ddc4bf372c2f32 +Block 0005 [ 47]: a7d9d7c0e24d0291 +Block 0005 [ 48]: b05f408614e904c0 +Block 0005 [ 49]: bbd0c036e048df41 +Block 0005 [ 50]: 8eed1406ddf119a0 +Block 0005 [ 51]: da90ba3dcac5e24a +Block 0005 [ 52]: b1c9d509e7c4e991 +Block 0005 [ 53]: eafc798f9b854437 +Block 0005 [ 54]: 83350b23cf076d28 +Block 0005 [ 55]: b904c82269abbf30 +Block 0005 [ 56]: 4f9470766db9f036 +Block 0005 [ 57]: 8d94d3b34697e7e9 +Block 0005 [ 58]: 9110bc556a9e4405 +Block 0005 [ 59]: 65851e38116eee1a +Block 0005 [ 60]: d7990c5616c3310b +Block 0005 [ 61]: f44a043870e946fe +Block 0005 [ 62]: 497d20f5a83a43bb +Block 0005 [ 63]: cf47efb899f32d07 +Block 0005 [ 64]: 9ed434cd932fd840 +Block 0005 [ 65]: c33f7501c8c7104e +Block 0005 [ 66]: 72894f99ad784543 +Block 0005 [ 67]: 520dbb68dac9d894 +Block 0005 [ 68]: 39a98546fe09e803 +Block 0005 [ 69]: 8bf75e44b18c4dc5 +Block 0005 [ 70]: b0e11b03cad79f54 +Block 0005 [ 71]: 785d01a461667158 +Block 0005 [ 72]: 2464d3fc7be6e14a +Block 0005 [ 73]: 3c56497d32689298 +Block 0005 [ 74]: de2986b940d32487 +Block 0005 [ 75]: d9d5cfb103f6cea4 +Block 0005 [ 76]: 832e8c4d909d7b97 +Block 0005 [ 77]: 903d7d62755ae704 +Block 0005 [ 78]: a54cef3105844550 +Block 0005 [ 79]: f5b738152f173e09 +Block 0005 [ 80]: fdf02e4e100e3460 +Block 0005 [ 81]: 5a71685373a067eb +Block 0005 [ 82]: 2dc6f153213ac8bb +Block 0005 [ 83]: 227d2d6a16d74573 +Block 0005 [ 84]: 4703d6e40d6de4b2 +Block 0005 [ 85]: 9297e5c7c78805f2 +Block 0005 [ 86]: d13bb39fa6cf15b7 +Block 0005 [ 87]: b4e86661abb79f78 +Block 0005 [ 88]: 5f62a96a771a79c9 +Block 0005 [ 89]: 7f5fdb426c93deff +Block 0005 [ 90]: 8ec5bec7a7be07bb +Block 0005 [ 91]: 6c4a44e9b8e262bb +Block 0005 [ 92]: 69d02ed7903ae98a +Block 0005 [ 93]: 9d93c3a8515505ec +Block 0005 [ 94]: b2f8780a5241a542 +Block 0005 [ 95]: 1903e7ee2ad04c3e +Block 0005 [ 96]: 57c98601e7623a24 +Block 0005 [ 97]: eb032d6dab553367 +Block 0005 [ 98]: a717a3fa9ca5e346 +Block 0005 [ 99]: 088edeae54d9b6f4 +Block 0005 [100]: f7bab20588a9ee70 +Block 0005 [101]: 32c0ed6315b77431 +Block 0005 [102]: 037db77faeccc301 +Block 0005 [103]: edebe8ca2930df7b +Block 0005 [104]: 975d89059e4c5930 +Block 0005 [105]: 1e90aa88a537676f +Block 0005 [106]: ad5d5855d8b8ee4a +Block 0005 [107]: 3e4a4cbb750e652a +Block 0005 [108]: 4d9150310e7a9ec9 +Block 0005 [109]: f2750b962f399a59 +Block 0005 [110]: 5b7bf09e4a0ba5d7 +Block 0005 [111]: dafc4f656d94b7a8 +Block 0005 [112]: 641bee8cef5ae340 +Block 0005 [113]: 9b62ae31301e1379 +Block 0005 [114]: c8ab9073ae12bbe7 +Block 0005 [115]: bcfc6272d1012f69 +Block 0005 [116]: 22f31f6ac36a18e3 +Block 0005 [117]: 75437f21353a161b +Block 0005 [118]: 85ee0a8925de3c14 +Block 0005 [119]: 93dbf2879401c798 +Block 0005 [120]: dc20b9024f9ca22a +Block 0005 [121]: 67d1055a09faf352 +Block 0005 [122]: 16610e8af8545564 +Block 0005 [123]: 612fe25e6478e6a8 +Block 0005 [124]: d9a92e44a145ae37 +Block 0005 [125]: 783f29b7380227d6 +Block 0005 [126]: 1870326b162dc6c8 +Block 0005 [127]: 6f485b82113bc2a5 +Block 0006 [ 0]: 0417e8d2c09771fa +Block 0006 [ 1]: a726fdcd1ac3a31a +Block 0006 [ 2]: 84d14b41bb6059ea +Block 0006 [ 3]: 3f53c23b60df7038 +Block 0006 [ 4]: 19239c627a485bc5 +Block 0006 [ 5]: fb4aabd5defe2f47 +Block 0006 [ 6]: f9f1e77d2e9e514c +Block 0006 [ 7]: 7956e820153bfb8f +Block 0006 [ 8]: 95470e1a550e5d09 +Block 0006 [ 9]: 2df5c82514ab9a06 +Block 0006 [ 10]: 18fd74e083ae8ceb +Block 0006 [ 11]: 4e7434e120c54b8a +Block 0006 [ 12]: f91a96890a2d4ac0 +Block 0006 [ 13]: 232d40c217b875ce +Block 0006 [ 14]: 762f49fc25fcd3a0 +Block 0006 [ 15]: 35d5437c8b64405e +Block 0006 [ 16]: 0b422d304c0ed838 +Block 0006 [ 17]: 85a3333bf921879e +Block 0006 [ 18]: f3914d23823a2d06 +Block 0006 [ 19]: cc231b9f95233733 +Block 0006 [ 20]: 95a45fed71b29b0a +Block 0006 [ 21]: 11b8f5bc39821ade +Block 0006 [ 22]: beed6d07ff11c69c +Block 0006 [ 23]: de3fcab576d24290 +Block 0006 [ 24]: cb31ef7a9d8002ed +Block 0006 [ 25]: e60798c0537c5cbe +Block 0006 [ 26]: 25dbc252460cf848 +Block 0006 [ 27]: da174e23673492ae +Block 0006 [ 28]: 5aa2fc50a36cce3d +Block 0006 [ 29]: 78642ee4e8259afb +Block 0006 [ 30]: ad9a1811a189ce80 +Block 0006 [ 31]: 2f1afb8e0386b092 +Block 0006 [ 32]: 777789abcad25560 +Block 0006 [ 33]: 127feff5537b2332 +Block 0006 [ 34]: 4205ad01c2be853e +Block 0006 [ 35]: 988ae5fd34f0c7c7 +Block 0006 [ 36]: 0b9f67850f84e5f2 +Block 0006 [ 37]: e1eef8199b93426e +Block 0006 [ 38]: 99e06d1c35c00831 +Block 0006 [ 39]: 59d99a6c99d0c6fa +Block 0006 [ 40]: bd5dceb6e37ef712 +Block 0006 [ 41]: 688e2a2779c7dc71 +Block 0006 [ 42]: 0bcba0f31e421c97 +Block 0006 [ 43]: 950a987e49b4a192 +Block 0006 [ 44]: 97a6320062a8ecad +Block 0006 [ 45]: ec9f00a9d09d89ba +Block 0006 [ 46]: 4117681b09f99aba +Block 0006 [ 47]: d8467026dda87eb2 +Block 0006 [ 48]: 8eae6e49ce6a479a +Block 0006 [ 49]: 543f4baf8ae08462 +Block 0006 [ 50]: d55c072b00a22ac2 +Block 0006 [ 51]: 54aa10083de6905b +Block 0006 [ 52]: 85b5c10b32ff7623 +Block 0006 [ 53]: 17f117b0a28bfc9a +Block 0006 [ 54]: 37ac27e7c6bc3a0c +Block 0006 [ 55]: dd9068b75c93bbd1 +Block 0006 [ 56]: 69f1a8ad964fa784 +Block 0006 [ 57]: fcb52326d3c515eb +Block 0006 [ 58]: 2c6ddb220f385957 +Block 0006 [ 59]: c5714a72aec686d3 +Block 0006 [ 60]: 66b376281e03b4dc +Block 0006 [ 61]: 28877c7f3213b260 +Block 0006 [ 62]: e579ce747b053fdd +Block 0006 [ 63]: 8727815de424a4cb +Block 0006 [ 64]: bc6d9c0d3179a1ef +Block 0006 [ 65]: ac4f154a1d761539 +Block 0006 [ 66]: 55fbaeec6dc7ca86 +Block 0006 [ 67]: a6f0af31cfe67f15 +Block 0006 [ 68]: 3922b3d031a2129b +Block 0006 [ 69]: 4453b2cb3aec5c2f +Block 0006 [ 70]: e380387d90a5e924 +Block 0006 [ 71]: 35e776afaf39e0b2 +Block 0006 [ 72]: b9f397c3611ec050 +Block 0006 [ 73]: 96df5c83a6df4140 +Block 0006 [ 74]: 695ff5340eec5ec5 +Block 0006 [ 75]: 987f9703bd026e3d +Block 0006 [ 76]: 0f4348c35038b1dc +Block 0006 [ 77]: 3d268153f9b16a2c +Block 0006 [ 78]: dc1cf419721a2453 +Block 0006 [ 79]: 1607e5d6ed685375 +Block 0006 [ 80]: 9a3d76a4963d8e34 +Block 0006 [ 81]: e9a1d2e0a80513c6 +Block 0006 [ 82]: 9fb6e4802f6e7169 +Block 0006 [ 83]: 01b29ef13e829bb4 +Block 0006 [ 84]: 66844c827d52bc55 +Block 0006 [ 85]: d07d0c3cbfdf7d5e +Block 0006 [ 86]: cf944367025e3ec7 +Block 0006 [ 87]: d90c8c514fcfc4b8 +Block 0006 [ 88]: 524c86be0fb92f8c +Block 0006 [ 89]: ce0a4bdd95819f54 +Block 0006 [ 90]: 89294a0f3414ae13 +Block 0006 [ 91]: d8cd430c02e6f74b +Block 0006 [ 92]: de46e3d9261a7b0f +Block 0006 [ 93]: 18e8320c1be34393 +Block 0006 [ 94]: f4bb7e71f45c46e7 +Block 0006 [ 95]: 3f0b6d6dd0e0c0fb +Block 0006 [ 96]: a64be31a62119da2 +Block 0006 [ 97]: 6972060764978fb8 +Block 0006 [ 98]: f3710a7be0ad2de5 +Block 0006 [ 99]: d6b80dd54b07c537 +Block 0006 [100]: d6051fc8b86b24b9 +Block 0006 [101]: d904afa89bbef2f5 +Block 0006 [102]: 2079fb23f3e3c75b +Block 0006 [103]: b594448695102524 +Block 0006 [104]: 7f6cfa7cea3593d8 +Block 0006 [105]: dd5fd43fdaaae533 +Block 0006 [106]: f30c2659a9142b1d +Block 0006 [107]: 3aa159403dced7a4 +Block 0006 [108]: 5962f9bf5160d458 +Block 0006 [109]: b8a982f7bb6fc161 +Block 0006 [110]: 5b5d15c13166d1d8 +Block 0006 [111]: 58aad2b0da7f6023 +Block 0006 [112]: 75421389e4139da8 +Block 0006 [113]: 91bc8b067014c464 +Block 0006 [114]: 7f91fd554a29cb3f +Block 0006 [115]: 54865eb5f6f4a935 +Block 0006 [116]: 1bbf6187700f04cb +Block 0006 [117]: fd95668e86d46407 +Block 0006 [118]: c1771c1acf358dc7 +Block 0006 [119]: 240ef33e1f0f5692 +Block 0006 [120]: 37f5f7a3d3dc98b3 +Block 0006 [121]: 0fdbc5425b41a182 +Block 0006 [122]: 8d029071e47bc518 +Block 0006 [123]: e33d5ba83bdbc7c5 +Block 0006 [124]: 9dfd7a2e63d545b9 +Block 0006 [125]: 74b00cf4ccf77152 +Block 0006 [126]: f02776461acb55a7 +Block 0006 [127]: a17599995e42dc1d +Block 0007 [ 0]: b790a46d763c1f8a +Block 0007 [ 1]: 88372edc47d473a5 +Block 0007 [ 2]: fdbf5895c75de68f +Block 0007 [ 3]: b576d710dc6934a9 +Block 0007 [ 4]: 261dbe511e84920e +Block 0007 [ 5]: 23ccb49198ef407e +Block 0007 [ 6]: dc7a607fcfdebbbb +Block 0007 [ 7]: c40f7909c8b74565 +Block 0007 [ 8]: bcb70d8b8c5ad62a +Block 0007 [ 9]: b407de45ef00203d +Block 0007 [ 10]: 1c9216113fbd2c5b +Block 0007 [ 11]: 77275accdb669b8a +Block 0007 [ 12]: 4fdcc4d247eaecbf +Block 0007 [ 13]: 3c9c6f9c725a8147 +Block 0007 [ 14]: 5896c77481a605a0 +Block 0007 [ 15]: e1a48bfa6f467b28 +Block 0007 [ 16]: dbf9935ebb5e2b89 +Block 0007 [ 17]: 14dab3f72d5e2176 +Block 0007 [ 18]: a154a24fe73fd778 +Block 0007 [ 19]: e6924d0f65899b84 +Block 0007 [ 20]: 4e62f41e7d33cb81 +Block 0007 [ 21]: 57aeacf64ee17eb9 +Block 0007 [ 22]: 2d1099c984394239 +Block 0007 [ 23]: a982e5e228a3385f +Block 0007 [ 24]: ca6d134a2b475bba +Block 0007 [ 25]: 3ef8c9ba2748bf6e +Block 0007 [ 26]: c6340e266c4c7758 +Block 0007 [ 27]: 805e6103e708427a +Block 0007 [ 28]: 83400bd566dc6d15 +Block 0007 [ 29]: 047f958c710d7217 +Block 0007 [ 30]: 281963f6a7372405 +Block 0007 [ 31]: 056cc5a85889d3d1 +Block 0007 [ 32]: 9752a6c3ff0ba9e3 +Block 0007 [ 33]: 092282962e219d5d +Block 0007 [ 34]: a453dd749ce5e0d2 +Block 0007 [ 35]: 88cb7090e75dfd2b +Block 0007 [ 36]: 9045ad926c38a180 +Block 0007 [ 37]: 637fd1abe93970e8 +Block 0007 [ 38]: 7a2bdbc77ba5a2a1 +Block 0007 [ 39]: 0d58dc850c38de96 +Block 0007 [ 40]: 9b8fb72271a76f9e +Block 0007 [ 41]: 82ce9be13cea48f8 +Block 0007 [ 42]: b24e764f68f217de +Block 0007 [ 43]: 9f7627a126af1bfb +Block 0007 [ 44]: 57163e7e745632fd +Block 0007 [ 45]: d282b8d0620d8261 +Block 0007 [ 46]: 807477780495b097 +Block 0007 [ 47]: 0f8f13b3edf03a12 +Block 0007 [ 48]: 899a059ba9a3840b +Block 0007 [ 49]: 8ed2c0cf3dc1f9c7 +Block 0007 [ 50]: cabc04edf2d6b2d2 +Block 0007 [ 51]: 1f4dd4cf9f078444 +Block 0007 [ 52]: 2927a20e27700649 +Block 0007 [ 53]: de52aaa1375b33bd +Block 0007 [ 54]: f1e8ea93f19d218c +Block 0007 [ 55]: 1550af4fa2fd9f2f +Block 0007 [ 56]: 55c59620ae537114 +Block 0007 [ 57]: cf489cd74a05e814 +Block 0007 [ 58]: c4c315c3cf39d416 +Block 0007 [ 59]: e59752fe467b5b96 +Block 0007 [ 60]: 997e1d12fb346c7b +Block 0007 [ 61]: 0a37442715377f32 +Block 0007 [ 62]: ebbe365a0e1bacfd +Block 0007 [ 63]: 8fcbbc39ecb89c4c +Block 0007 [ 64]: b38bd0764cde9d82 +Block 0007 [ 65]: 6f16527d4267b0a3 +Block 0007 [ 66]: 4ae5dea02d5fd9d9 +Block 0007 [ 67]: d6034ae87122afd7 +Block 0007 [ 68]: 12cc1f806cbc9d7c +Block 0007 [ 69]: ab9d9811c91588bb +Block 0007 [ 70]: e69c0a53a793ec61 +Block 0007 [ 71]: 4244a7184b2def54 +Block 0007 [ 72]: e05a4b9bcf35a10f +Block 0007 [ 73]: 83b4c5a14acf620b +Block 0007 [ 74]: 5c395967dd494072 +Block 0007 [ 75]: 9cc99d42a15cf863 +Block 0007 [ 76]: 651313f6ce56ac54 +Block 0007 [ 77]: 2d624d3b5e267495 +Block 0007 [ 78]: e5c5edce3caceb3a +Block 0007 [ 79]: 9e6a73a49cb1e138 +Block 0007 [ 80]: b63ce259bde73249 +Block 0007 [ 81]: 73ecd229001d48f9 +Block 0007 [ 82]: f596d98b783df7a9 +Block 0007 [ 83]: 7353862898dd9389 +Block 0007 [ 84]: 57063423fb02c599 +Block 0007 [ 85]: f5c261d8635cea29 +Block 0007 [ 86]: 506b486faca9af11 +Block 0007 [ 87]: ac0751d372f6ee49 +Block 0007 [ 88]: 5cb470a4a19ce898 +Block 0007 [ 89]: 45dfc8900981c9f8 +Block 0007 [ 90]: 2fdc79a1de246e99 +Block 0007 [ 91]: 63a7108d4264ef3f +Block 0007 [ 92]: 9089aae68dc0d946 +Block 0007 [ 93]: fbf2426d313a38ce +Block 0007 [ 94]: 4d737aa292130361 +Block 0007 [ 95]: c1eb918fba4db728 +Block 0007 [ 96]: 19c7bb8ed8bdd039 +Block 0007 [ 97]: 29cc46fb1db3081a +Block 0007 [ 98]: 6af7ead3aa61c786 +Block 0007 [ 99]: cdb8b00b8880bfb6 +Block 0007 [100]: b34176cd8343ba10 +Block 0007 [101]: b5a302876a9a9a2d +Block 0007 [102]: b766d763b9e23e61 +Block 0007 [103]: 3efd17036bb6ca0b +Block 0007 [104]: feeaae24f4c47ed1 +Block 0007 [105]: bebd53ac00c1c2a0 +Block 0007 [106]: babb3ef27e187adc +Block 0007 [107]: 981eeecfb50ac179 +Block 0007 [108]: 59188d843b69adfa +Block 0007 [109]: f4d2f0c370640543 +Block 0007 [110]: f725433a397d9b7e +Block 0007 [111]: 7505a3b205552a64 +Block 0007 [112]: a19ae22e984b2833 +Block 0007 [113]: fef5ba7a4a4de67d +Block 0007 [114]: 7dd338034b955296 +Block 0007 [115]: 60380e2b6e8b5651 +Block 0007 [116]: 1bf12c38cfaa4ccd +Block 0007 [117]: d8d9d8865e4da277 +Block 0007 [118]: 87ab45b1c1b2a472 +Block 0007 [119]: ac42c04e86a00b57 +Block 0007 [120]: f6f3afa0bfc7ee1a +Block 0007 [121]: a9d327166f257b5e +Block 0007 [122]: 8369e41dd8e7f1dc +Block 0007 [123]: b2541d86369b89c6 +Block 0007 [124]: 0c2e1060ad2cfb4d +Block 0007 [125]: f2d1ca5669641434 +Block 0007 [126]: a2f6616cc5520f24 +Block 0007 [127]: 1a5e4817b7ad354f +Block 0008 [ 0]: b9c7c2532b67d22b +Block 0008 [ 1]: 077ce77061aa2ff0 +Block 0008 [ 2]: 87adc5012fcc6d17 +Block 0008 [ 3]: 9d9bea1474b767e4 +Block 0008 [ 4]: cebe16566a953f30 +Block 0008 [ 5]: 9ad7069976e86c26 +Block 0008 [ 6]: ac1cd6d7c3be9fd5 +Block 0008 [ 7]: a0af6592942d74e6 +Block 0008 [ 8]: 62c54bb2125a6e98 +Block 0008 [ 9]: c98a354b32588b91 +Block 0008 [ 10]: f3b596fd6cf1e8bd +Block 0008 [ 11]: a8d5fb4cef80096c +Block 0008 [ 12]: 3d681d3f79cd27bc +Block 0008 [ 13]: df8fbea460aee1c4 +Block 0008 [ 14]: 5c75c3b402008252 +Block 0008 [ 15]: 580a6f636ab15434 +Block 0008 [ 16]: 208a7b74815ed1c3 +Block 0008 [ 17]: 1fb9abd67e26253e +Block 0008 [ 18]: e2b912f1b2e83e90 +Block 0008 [ 19]: e2e8a873d27242ab +Block 0008 [ 20]: 07f0cd5d2b520e6a +Block 0008 [ 21]: ad42bad9cbf997a7 +Block 0008 [ 22]: 833b071d6f74a63f +Block 0008 [ 23]: 48cef23c752c885e +Block 0008 [ 24]: 39f842734be8c8fd +Block 0008 [ 25]: 107782af44b5177a +Block 0008 [ 26]: 04439164e4963ec3 +Block 0008 [ 27]: 000c4a7af3d87aad +Block 0008 [ 28]: 1d853884ad7c35d1 +Block 0008 [ 29]: 7b898e1a009ae92b +Block 0008 [ 30]: 019a1f557de1c3b1 +Block 0008 [ 31]: 7587ba1dde02c979 +Block 0008 [ 32]: ac9a50a01d24a32f +Block 0008 [ 33]: d654c8db0fde8224 +Block 0008 [ 34]: da93df7fa2eb912a +Block 0008 [ 35]: 3d96657e8a3b7857 +Block 0008 [ 36]: f5c827e6634974f2 +Block 0008 [ 37]: e24f4f704a0d9606 +Block 0008 [ 38]: 4822ea21f1536e66 +Block 0008 [ 39]: 5f2d56075ce92649 +Block 0008 [ 40]: 7cf7365eec2c003e +Block 0008 [ 41]: d2072ae424d198a9 +Block 0008 [ 42]: bc0f44f4960bfeda +Block 0008 [ 43]: b9cf51e48deda197 +Block 0008 [ 44]: e1eeea36715a244b +Block 0008 [ 45]: c225441be8108083 +Block 0008 [ 46]: e31bce8554868b34 +Block 0008 [ 47]: c95ab4fc24c39772 +Block 0008 [ 48]: dec6166495e4ed32 +Block 0008 [ 49]: 9b923dbc7ca53682 +Block 0008 [ 50]: cbe461b15013d38a +Block 0008 [ 51]: 765cd1afecb13d26 +Block 0008 [ 52]: 6362c36a7d163513 +Block 0008 [ 53]: 72adc9a1f3a48bf8 +Block 0008 [ 54]: f5f68421f2f34166 +Block 0008 [ 55]: ea61e7179fe82d20 +Block 0008 [ 56]: 01662f9615ecdd3a +Block 0008 [ 57]: 17f61d1fc63ec481 +Block 0008 [ 58]: 0fe4fe28ef6821c5 +Block 0008 [ 59]: e681ba127361b647 +Block 0008 [ 60]: b191928ed0ed6e27 +Block 0008 [ 61]: ee67b65013c1a02e +Block 0008 [ 62]: 7376f8837774d67e +Block 0008 [ 63]: da60f51b24fa5db6 +Block 0008 [ 64]: da97f5dae1fb50bd +Block 0008 [ 65]: 3d897acc250ad297 +Block 0008 [ 66]: fc7eefc17b6e4d8f +Block 0008 [ 67]: d5a702a6e4bc4c77 +Block 0008 [ 68]: e680b62cfdbf407a +Block 0008 [ 69]: f01a14d0703e6713 +Block 0008 [ 70]: a50ab2984f01da78 +Block 0008 [ 71]: c81a6f7f9f0ff6b3 +Block 0008 [ 72]: 6af882b4197f35be +Block 0008 [ 73]: da153ae3f295e48d +Block 0008 [ 74]: 2144c2b8826db407 +Block 0008 [ 75]: 34a6080b38a6ffa8 +Block 0008 [ 76]: 4fba023c2961f20b +Block 0008 [ 77]: bf863224ec20a811 +Block 0008 [ 78]: 20c5125e6c39cfc9 +Block 0008 [ 79]: 0f5e74f9eb179b9a +Block 0008 [ 80]: 50dda8efcc4d1e77 +Block 0008 [ 81]: 6ea326dcb9006352 +Block 0008 [ 82]: 0389c30094ff80e0 +Block 0008 [ 83]: 7a7b9280301047f5 +Block 0008 [ 84]: c306819d8dc0c57b +Block 0008 [ 85]: 2c2d25d8a3b87926 +Block 0008 [ 86]: 3268d42a19fce381 +Block 0008 [ 87]: 65bb2ed5af98cb0d +Block 0008 [ 88]: 5db461cdec83a707 +Block 0008 [ 89]: 07eabe068ae1a576 +Block 0008 [ 90]: ca542c1db2c41368 +Block 0008 [ 91]: c0f6c2f19d388b31 +Block 0008 [ 92]: 67df7325f41a345e +Block 0008 [ 93]: 9f4a855eee802af2 +Block 0008 [ 94]: d308ac5aac84d191 +Block 0008 [ 95]: ab8e77fbb517080e +Block 0008 [ 96]: 050506ad63fc077d +Block 0008 [ 97]: ac2f98f6cf49f961 +Block 0008 [ 98]: 0998004b75a10f9f +Block 0008 [ 99]: 288a0cd29f0efb43 +Block 0008 [100]: 056f8ed8bad8f621 +Block 0008 [101]: 8f5774a97742bd65 +Block 0008 [102]: 8b8ab2e31359c1c5 +Block 0008 [103]: 852b384f17a635b2 +Block 0008 [104]: 2490e65cfacf7d22 +Block 0008 [105]: 2b15baa7e28aae41 +Block 0008 [106]: ed3c1c7ad7ac5646 +Block 0008 [107]: 24cf55a144ce1496 +Block 0008 [108]: a1c455ce9fe0dfb9 +Block 0008 [109]: f387f3a16d5cb9be +Block 0008 [110]: 8b48f8d6d65ea8d0 +Block 0008 [111]: 57eb999061ffc1da +Block 0008 [112]: 9163fc4867f0a9c5 +Block 0008 [113]: 6c0abdae81bdca0c +Block 0008 [114]: 38af67ebfaaf9b35 +Block 0008 [115]: 87b9ba3610e8c6b0 +Block 0008 [116]: 6b6f7fe3d7a42823 +Block 0008 [117]: cf7283ecbb972e62 +Block 0008 [118]: f006feb0d78c58e5 +Block 0008 [119]: 90bdf281b84ef947 +Block 0008 [120]: 8076948a0639e8dd +Block 0008 [121]: a911542a23ad3a85 +Block 0008 [122]: ae90a2f32e210a66 +Block 0008 [123]: bbced4d0627ead7f +Block 0008 [124]: 34c7c5f4f8da73f1 +Block 0008 [125]: 2029aae2afbc78dc +Block 0008 [126]: 7a1ab65f99792819 +Block 0008 [127]: 1c338df72ffafb0d +Block 0009 [ 0]: 90f63b41acfd2e3f +Block 0009 [ 1]: 2df1e2e603f91b0f +Block 0009 [ 2]: 5084f932783615e5 +Block 0009 [ 3]: a3710c3bfaf40ed0 +Block 0009 [ 4]: 13d4d81d5135df0f +Block 0009 [ 5]: 5dfeb4b8b74b2312 +Block 0009 [ 6]: 445e3a8c63053092 +Block 0009 [ 7]: b053c2140b29ad21 +Block 0009 [ 8]: 30a3517a523a9c9d +Block 0009 [ 9]: 3ee26153e2ef5731 +Block 0009 [ 10]: e3d9715f1c98d0d4 +Block 0009 [ 11]: 5cb14f3d7938ea32 +Block 0009 [ 12]: e0a2d15a050345df +Block 0009 [ 13]: b653b62615d0c5c0 +Block 0009 [ 14]: 0a13ebbb02227645 +Block 0009 [ 15]: fb27584fd730feae +Block 0009 [ 16]: 9de7027a352fc818 +Block 0009 [ 17]: 7ae68d9daadced50 +Block 0009 [ 18]: a7e012161f463b0f +Block 0009 [ 19]: d36322fbd9de50e8 +Block 0009 [ 20]: 33cee18a7b695d07 +Block 0009 [ 21]: a0a668e0d1079520 +Block 0009 [ 22]: 118beb776a2dab01 +Block 0009 [ 23]: cae16884e955da26 +Block 0009 [ 24]: f3ecd50fbb69b366 +Block 0009 [ 25]: f83690aecc4f84e1 +Block 0009 [ 26]: 2ebaeddbcdeb73ac +Block 0009 [ 27]: 361ec0b0acfffc17 +Block 0009 [ 28]: 5f49f0d5bf30edc9 +Block 0009 [ 29]: b07e1cfec13fdbcb +Block 0009 [ 30]: e9fb2ecc77c28262 +Block 0009 [ 31]: 7b47036980551052 +Block 0009 [ 32]: 2e804703942e3250 +Block 0009 [ 33]: 85c07d3d4bb3ceb3 +Block 0009 [ 34]: b310f1225e0bb382 +Block 0009 [ 35]: 9d13dfe845126a23 +Block 0009 [ 36]: 715274518ecb3edd +Block 0009 [ 37]: 7dbafe91429982f2 +Block 0009 [ 38]: bb103004f4b01569 +Block 0009 [ 39]: 37bebf44b2290105 +Block 0009 [ 40]: 3066f2347c59ae01 +Block 0009 [ 41]: 3622dad29d563c0d +Block 0009 [ 42]: af6200ec04529c2d +Block 0009 [ 43]: 6aaef2c134cc26cd +Block 0009 [ 44]: 15a1d9b32d636d66 +Block 0009 [ 45]: 66c47adabccb2e37 +Block 0009 [ 46]: 6b0a3a4f05bd126c +Block 0009 [ 47]: 2ef6b8d9fd0ac2c1 +Block 0009 [ 48]: 30d2dddb9c6fd9ae +Block 0009 [ 49]: 32b752b1d8d0f825 +Block 0009 [ 50]: 15f2273324185e41 +Block 0009 [ 51]: 2fc7cfaa0007f735 +Block 0009 [ 52]: 5bb0cb3e7a98dc42 +Block 0009 [ 53]: d4ba1caee83bd718 +Block 0009 [ 54]: d58bca8365593feb +Block 0009 [ 55]: 1caaa560f824f823 +Block 0009 [ 56]: 06d66004eef81ec8 +Block 0009 [ 57]: e62be588eb71c6e3 +Block 0009 [ 58]: 028af83ba978c75a +Block 0009 [ 59]: 455d36e5a57838c2 +Block 0009 [ 60]: 2271f285b39b417f +Block 0009 [ 61]: 19b9d33317ec5ce0 +Block 0009 [ 62]: 62a66573c00d9f1b +Block 0009 [ 63]: 1857e18294b8f3dd +Block 0009 [ 64]: 7926c357c015c014 +Block 0009 [ 65]: a57ad006cd650064 +Block 0009 [ 66]: f132763de2164979 +Block 0009 [ 67]: 1a6b884bf664c0ce +Block 0009 [ 68]: 4c7a58a1c301b62f +Block 0009 [ 69]: ca9ea9c9bb7ee4d5 +Block 0009 [ 70]: fda794c88609587f +Block 0009 [ 71]: 9113554d7df707b8 +Block 0009 [ 72]: dc15bdf224dd0352 +Block 0009 [ 73]: 6921c623544303e8 +Block 0009 [ 74]: b35a0a99d7d443ee +Block 0009 [ 75]: cc2a220c616c5049 +Block 0009 [ 76]: 7671e209b5318ee5 +Block 0009 [ 77]: a5e864ad143f8d39 +Block 0009 [ 78]: b06abe5900bffbba +Block 0009 [ 79]: 158d9421b8c0f9e4 +Block 0009 [ 80]: 2da152014cab559b +Block 0009 [ 81]: b8c17e04ad93e8f8 +Block 0009 [ 82]: 52eac4a8a411ba69 +Block 0009 [ 83]: 7a8f00a44b79615d +Block 0009 [ 84]: e1cdfaaeb0d07db2 +Block 0009 [ 85]: e78c69027b4403bd +Block 0009 [ 86]: 8d0ace0a9de358ef +Block 0009 [ 87]: 259e17069c1985ef +Block 0009 [ 88]: 2bbcf3de532871f8 +Block 0009 [ 89]: 0f0b5a3dc838ebed +Block 0009 [ 90]: 9039b06f29793ff1 +Block 0009 [ 91]: e3cdfa84c5e825b6 +Block 0009 [ 92]: 48d5c902a1d7445e +Block 0009 [ 93]: d323aabdadda5174 +Block 0009 [ 94]: bd286464b4d67c67 +Block 0009 [ 95]: b0c54c030c7afa1e +Block 0009 [ 96]: 3baa0122d9b14320 +Block 0009 [ 97]: aab0ea19711df1ba +Block 0009 [ 98]: 9469d4ce54a3fced +Block 0009 [ 99]: b1c72afddc74f4d0 +Block 0009 [100]: c29670cebb2988c1 +Block 0009 [101]: bf02191c60bfa561 +Block 0009 [102]: cf357b9034136a10 +Block 0009 [103]: c23d5df417f88814 +Block 0009 [104]: 83114ef35de168f2 +Block 0009 [105]: 058f7dc566f6f951 +Block 0009 [106]: b6ff38f14922933b +Block 0009 [107]: 0be1429882f0911e +Block 0009 [108]: f5efae1c14b31f47 +Block 0009 [109]: f8b4df8a360a01a5 +Block 0009 [110]: 43e67a6ccd951ba0 +Block 0009 [111]: ed95ded23d5b20b6 +Block 0009 [112]: 22b130913c60e481 +Block 0009 [113]: cb5a40e52e1e1104 +Block 0009 [114]: 7011efed737ae691 +Block 0009 [115]: 8a59bf8464200afb +Block 0009 [116]: b2d8f9050d97513c +Block 0009 [117]: d57f69030504491e +Block 0009 [118]: 2403848983113b0b +Block 0009 [119]: 22db081455729811 +Block 0009 [120]: d0db5aefd0419fd5 +Block 0009 [121]: e41070df7b2fd51b +Block 0009 [122]: 0fce0e7ffb3d7840 +Block 0009 [123]: 43fbaec79d79039a +Block 0009 [124]: 1d71fb266791c825 +Block 0009 [125]: aedf742f89a5b302 +Block 0009 [126]: 41c0f73c931dbe24 +Block 0009 [127]: 1c8cba64e64e34f2 +Block 0010 [ 0]: 03162a3d2fb31a25 +Block 0010 [ 1]: 95d94a611da86488 +Block 0010 [ 2]: a04524d51f43fbfe +Block 0010 [ 3]: b5fbf83fe35e1742 +Block 0010 [ 4]: 1702d9d1540b5e0e +Block 0010 [ 5]: a9cb1fc14db76b1c +Block 0010 [ 6]: 482da64056af648d +Block 0010 [ 7]: c5c6e169209aa2d1 +Block 0010 [ 8]: 5ff81bbb23cfa875 +Block 0010 [ 9]: 0a760c8cb3fff112 +Block 0010 [ 10]: a2af68f0049ca01d +Block 0010 [ 11]: 8b612089307f6546 +Block 0010 [ 12]: 7fc69ebacf75d649 +Block 0010 [ 13]: 72305888dff67bdc +Block 0010 [ 14]: 8801e7b401c32102 +Block 0010 [ 15]: 2222112df4517523 +Block 0010 [ 16]: 4ae3745fe43db23b +Block 0010 [ 17]: 0ae88e2a493b9a1f +Block 0010 [ 18]: a9cc47ea89a7bf49 +Block 0010 [ 19]: cbbe32c2f6b863b9 +Block 0010 [ 20]: 2f06cab4c8f4888f +Block 0010 [ 21]: 3b144622e62f7e5a +Block 0010 [ 22]: a859a6ec7da1e596 +Block 0010 [ 23]: 5fb8968a8d04c7ef +Block 0010 [ 24]: 5aaac0a73b6928e1 +Block 0010 [ 25]: 68cd864b58e58b1f +Block 0010 [ 26]: f0d9dfbf38e75ea1 +Block 0010 [ 27]: b92936821414ca29 +Block 0010 [ 28]: 19fc4f8375dbbd8e +Block 0010 [ 29]: ff51aec8104e45e6 +Block 0010 [ 30]: ad4518cca50dc645 +Block 0010 [ 31]: 42bbffddbf9af0b9 +Block 0010 [ 32]: b8568cf87046e23b +Block 0010 [ 33]: 28e5aca86ce23c97 +Block 0010 [ 34]: df69b5becf4306ee +Block 0010 [ 35]: a7e30b2fb0abf323 +Block 0010 [ 36]: f1e4b8b603ee5497 +Block 0010 [ 37]: 8937c677fb8ecdbd +Block 0010 [ 38]: f0cbce948a4fd7c5 +Block 0010 [ 39]: de19ec873867caf8 +Block 0010 [ 40]: 457f4d3348476483 +Block 0010 [ 41]: e19a51d9c78b78b3 +Block 0010 [ 42]: 97bebd6958586035 +Block 0010 [ 43]: 22a862ee6959c5d9 +Block 0010 [ 44]: eb6e508abb1c4e05 +Block 0010 [ 45]: 14234c65a136a786 +Block 0010 [ 46]: af12338c1ca6ad2e +Block 0010 [ 47]: 03d183bef690445e +Block 0010 [ 48]: 326ec9c641ea0ecf +Block 0010 [ 49]: ce787971555c98f4 +Block 0010 [ 50]: 0aa538a409c2cecc +Block 0010 [ 51]: e5ad409a55648f06 +Block 0010 [ 52]: 3b3c3e48dfbcf089 +Block 0010 [ 53]: 0be74cbe5ab3bda8 +Block 0010 [ 54]: 52c78e15e5b2adcd +Block 0010 [ 55]: a6acd621e94df26d +Block 0010 [ 56]: 19b3601aad02118b +Block 0010 [ 57]: ea86b5c50e080ee9 +Block 0010 [ 58]: e30b54d9ae2a555e +Block 0010 [ 59]: 0dd1c1abcaa0bf79 +Block 0010 [ 60]: da3dc56d55130978 +Block 0010 [ 61]: 87c97e8e8187d127 +Block 0010 [ 62]: 4720ff4be1fe0973 +Block 0010 [ 63]: 8ffa4974698469b8 +Block 0010 [ 64]: b74f20d179b01198 +Block 0010 [ 65]: 1cf9956c0b469776 +Block 0010 [ 66]: 0a4c0c1e2d98dd4e +Block 0010 [ 67]: 30ad0a024b0059dd +Block 0010 [ 68]: 0753951043b731c4 +Block 0010 [ 69]: c54d897d6a39226d +Block 0010 [ 70]: 7fce081f2122b0f0 +Block 0010 [ 71]: 5e003b5cbcc0aba4 +Block 0010 [ 72]: b584571f879d7593 +Block 0010 [ 73]: c0d22747a0873a89 +Block 0010 [ 74]: 096b1ab7cc3cd779 +Block 0010 [ 75]: 2104787f82456800 +Block 0010 [ 76]: 87ffeb72fb25ca92 +Block 0010 [ 77]: a6d45632612c75f9 +Block 0010 [ 78]: d84a222c579ad8a7 +Block 0010 [ 79]: 260e49a3917db014 +Block 0010 [ 80]: ddc70aef5f5f1289 +Block 0010 [ 81]: ce75db71f8307c39 +Block 0010 [ 82]: 988669c21d68b798 +Block 0010 [ 83]: bc253d44309e988d +Block 0010 [ 84]: 133b2d34fb862fb4 +Block 0010 [ 85]: 337fcded4be0ef7f +Block 0010 [ 86]: dba1a8dc49b65f56 +Block 0010 [ 87]: 70d4d2cc01651078 +Block 0010 [ 88]: 83d6646e37f6e2b6 +Block 0010 [ 89]: 27503f337a53e990 +Block 0010 [ 90]: 44aafbae9a1c5514 +Block 0010 [ 91]: 7539a36b19544cc7 +Block 0010 [ 92]: 5d0623d16de3b93e +Block 0010 [ 93]: 623e6fa8cf8dc502 +Block 0010 [ 94]: 084ac30cc5095a42 +Block 0010 [ 95]: bf6a2b9d4438871e +Block 0010 [ 96]: 6742f0a4e7b224f8 +Block 0010 [ 97]: 00e3179dc5145dfb +Block 0010 [ 98]: 3809bbecac742553 +Block 0010 [ 99]: 0de0efc339600332 +Block 0010 [100]: b86f4cda47b795f1 +Block 0010 [101]: ebb9583575c70f47 +Block 0010 [102]: 6601cf1f14855e00 +Block 0010 [103]: 54a19f47266bae3d +Block 0010 [104]: 2b30afe1ffff7bbe +Block 0010 [105]: e7186358f45ec150 +Block 0010 [106]: 2f3fc0f4ec78188b +Block 0010 [107]: dfb03a09423769a0 +Block 0010 [108]: c92df3af123f69a5 +Block 0010 [109]: f61f79e3b60ad2ae +Block 0010 [110]: 62155dab043e8e17 +Block 0010 [111]: 72b1b9b0ab48243a +Block 0010 [112]: 167a89196e5e3cb2 +Block 0010 [113]: 3f601eeec23df9d4 +Block 0010 [114]: 965d8400a3a092b2 +Block 0010 [115]: 611dc2ebbbb43701 +Block 0010 [116]: 27bb3105406300f7 +Block 0010 [117]: 435783800ec13a83 +Block 0010 [118]: eb7bb000b8de1dcc +Block 0010 [119]: 0b91a3a50360b857 +Block 0010 [120]: 431dc1068099cb7f +Block 0010 [121]: 63640dba63f66b02 +Block 0010 [122]: c175a55bb8195031 +Block 0010 [123]: cc39c58d7546d7e5 +Block 0010 [124]: 5130c4ed8e0d553e +Block 0010 [125]: 481a68ccccccb7ba +Block 0010 [126]: a31c3f8ea54032c0 +Block 0010 [127]: bc790a78ad15e281 +Block 0011 [ 0]: cd289066739699b7 +Block 0011 [ 1]: ef6f08e83b2279cc +Block 0011 [ 2]: bfe116223a67eac7 +Block 0011 [ 3]: 5ed9e51a2f3fa756 +Block 0011 [ 4]: d091e01529a66c68 +Block 0011 [ 5]: 6c00296717dc4db4 +Block 0011 [ 6]: 8e1a0e28f76b7b3a +Block 0011 [ 7]: ae25fb50b09ed824 +Block 0011 [ 8]: 93d73babe4143961 +Block 0011 [ 9]: 0da1f4d09c94370f +Block 0011 [ 10]: 30f77c7c452d7ce4 +Block 0011 [ 11]: 788024e40ab22171 +Block 0011 [ 12]: 26ccd25ef63a2f11 +Block 0011 [ 13]: d1c07c37e293eac0 +Block 0011 [ 14]: c0aa81d79ad9a8a6 +Block 0011 [ 15]: 6ec7214f553d8c69 +Block 0011 [ 16]: 893d6226e03c6bd1 +Block 0011 [ 17]: 962ed1779a6573bc +Block 0011 [ 18]: 7300c734c3c57e79 +Block 0011 [ 19]: 0834fd221492ebd2 +Block 0011 [ 20]: eab8cb092d44c594 +Block 0011 [ 21]: d85bc9e0605c61c9 +Block 0011 [ 22]: 0f10bcda5cc091d6 +Block 0011 [ 23]: 5dd2835a198b8ac3 +Block 0011 [ 24]: 414c25271a38a161 +Block 0011 [ 25]: 1d0c907d6caab7f5 +Block 0011 [ 26]: f6100897ed6eed1e +Block 0011 [ 27]: cd54dfefe46f6a86 +Block 0011 [ 28]: 9208e77496c06a3a +Block 0011 [ 29]: 296237fd89703010 +Block 0011 [ 30]: 03c11023e62bcf5f +Block 0011 [ 31]: 8851fb5b68678dcd +Block 0011 [ 32]: 40ff9e933fb5d757 +Block 0011 [ 33]: 18859d7030dd523c +Block 0011 [ 34]: c8cb6d5521ef7e7b +Block 0011 [ 35]: 88166acdfb046b45 +Block 0011 [ 36]: 2647d84ea607a84d +Block 0011 [ 37]: 9de18c9dcc05463a +Block 0011 [ 38]: 58e3a7730182d15c +Block 0011 [ 39]: b66213fb6a76642d +Block 0011 [ 40]: ec44e39215a9ac17 +Block 0011 [ 41]: 994c8fd34794739f +Block 0011 [ 42]: bc07c6d306bf6538 +Block 0011 [ 43]: 334dd171cfbf7e0d +Block 0011 [ 44]: 6ca8cf56b84e8066 +Block 0011 [ 45]: 269115bbc80e6bda +Block 0011 [ 46]: 7a58d538e5fd4fd7 +Block 0011 [ 47]: 10c69a27de84b7ce +Block 0011 [ 48]: 588946878009a2df +Block 0011 [ 49]: aab803acae234714 +Block 0011 [ 50]: 0db30430f182d18b +Block 0011 [ 51]: 374488ebafbd6f8d +Block 0011 [ 52]: 51bea2536583c798 +Block 0011 [ 53]: 5349f72cc9d30415 +Block 0011 [ 54]: 17e62cbd6fccce76 +Block 0011 [ 55]: f6ca270555d78986 +Block 0011 [ 56]: bd9f558733940b5b +Block 0011 [ 57]: 310c6473cf1f3eb5 +Block 0011 [ 58]: aaf61ebeb7b59d94 +Block 0011 [ 59]: c9ba9470ca8d94c5 +Block 0011 [ 60]: a7ee2542ad140b41 +Block 0011 [ 61]: 37d3fbf1ea5e25ce +Block 0011 [ 62]: df5c2e87a48fcf7a +Block 0011 [ 63]: 96ea0a40093da6bc +Block 0011 [ 64]: 1832e3d9420b9254 +Block 0011 [ 65]: 26d02a9dd32e1691 +Block 0011 [ 66]: 42ae4f33f51cbb54 +Block 0011 [ 67]: f8cd3a46c99d6bc8 +Block 0011 [ 68]: ae0e89024a1a7111 +Block 0011 [ 69]: 54127d1e8d5dd168 +Block 0011 [ 70]: 01fde931daffd7f4 +Block 0011 [ 71]: 350c6e16723fdd1c +Block 0011 [ 72]: df22c95585648b1a +Block 0011 [ 73]: e1f0024942478c76 +Block 0011 [ 74]: 70335cf2f4de5df2 +Block 0011 [ 75]: cdbe12e0abb4823c +Block 0011 [ 76]: fde59debfdbaac10 +Block 0011 [ 77]: 0bff220a8928c2dc +Block 0011 [ 78]: 0461fa55d303407a +Block 0011 [ 79]: 1634a41d6c9a5f1a +Block 0011 [ 80]: 6e6e4cd6db594d4f +Block 0011 [ 81]: dd18e467511a09ee +Block 0011 [ 82]: 9bdf9e3b17fd4342 +Block 0011 [ 83]: 8609696d927795b9 +Block 0011 [ 84]: d6d3fbf43587b11e +Block 0011 [ 85]: 6991a74f5a870d29 +Block 0011 [ 86]: d9cd608fee2e6721 +Block 0011 [ 87]: 6170131c10cc2374 +Block 0011 [ 88]: b0ab65f7594f8cc5 +Block 0011 [ 89]: d7185a9e216c4c1e +Block 0011 [ 90]: dde483d99f7e02a1 +Block 0011 [ 91]: e083b70b71230d2f +Block 0011 [ 92]: 1af2c5c2bd1e6dfe +Block 0011 [ 93]: c21b1fe7adc10d54 +Block 0011 [ 94]: bad581e4fbd50269 +Block 0011 [ 95]: 2d635c846e09fa3b +Block 0011 [ 96]: c093b53ede074fc2 +Block 0011 [ 97]: 41d4e984f8ad23d8 +Block 0011 [ 98]: 8a2bce31da109bce +Block 0011 [ 99]: 9725a483e6c34623 +Block 0011 [100]: 13089cdee7c3f5f2 +Block 0011 [101]: 3d4419b6807b8bfb +Block 0011 [102]: 2b609b191757fa48 +Block 0011 [103]: b171e65fdc7a27d9 +Block 0011 [104]: 69b8c8e5323e729b +Block 0011 [105]: 82357f1cfbdf2208 +Block 0011 [106]: e68036deb4d37145 +Block 0011 [107]: 6eecd0042852d038 +Block 0011 [108]: bb449cc49f3b4219 +Block 0011 [109]: 53e78414e3c3fa7f +Block 0011 [110]: f26d647fda1a1903 +Block 0011 [111]: c7788d7a05cb74d4 +Block 0011 [112]: f91960b42f1ea818 +Block 0011 [113]: 4fffd18f0deae9fb +Block 0011 [114]: 5ac77014671515e8 +Block 0011 [115]: d01d29217b293089 +Block 0011 [116]: c987835d3b2757b1 +Block 0011 [117]: 1b9d12290c75783b +Block 0011 [118]: 1b609eb672703181 +Block 0011 [119]: f0d7bed8ef5544fe +Block 0011 [120]: fd908aa2b4d52443 +Block 0011 [121]: 03ac288fa342e752 +Block 0011 [122]: 3e131ef012aef122 +Block 0011 [123]: acbb9427eb6c4095 +Block 0011 [124]: 65779c01fd20ff68 +Block 0011 [125]: ce2a60b7bbb1e01e +Block 0011 [126]: 5774720a372271f5 +Block 0011 [127]: ea30c4ce0712381b +Block 0012 [ 0]: 1c2a63bac7c154c1 +Block 0012 [ 1]: 42508ad075a16b3a +Block 0012 [ 2]: 791f280551d06f3e +Block 0012 [ 3]: 348a853e2533a525 +Block 0012 [ 4]: 3df830f0a023d57f +Block 0012 [ 5]: 009821b9b5259d3b +Block 0012 [ 6]: 0473a5252522f400 +Block 0012 [ 7]: a4cc17e35e27a5d3 +Block 0012 [ 8]: 3cec4c0926ed9a1d +Block 0012 [ 9]: 92e1ebf0f81b264d +Block 0012 [ 10]: 043aac8959c4f50e +Block 0012 [ 11]: 8216989f36994386 +Block 0012 [ 12]: 6c7a46ec0f593b4a +Block 0012 [ 13]: 615d9bc53c8aafd4 +Block 0012 [ 14]: e69671624cf39231 +Block 0012 [ 15]: de31127ba2643136 +Block 0012 [ 16]: 2645ccbeb9cc81e6 +Block 0012 [ 17]: 7872e0f680327659 +Block 0012 [ 18]: 9db25e0c68ddf8f9 +Block 0012 [ 19]: 6f27907812ee7d29 +Block 0012 [ 20]: b656b4af253ea7e0 +Block 0012 [ 21]: 2178637bdfcf46b3 +Block 0012 [ 22]: 1035f16577c1ba85 +Block 0012 [ 23]: 8cbeee81e32da9a2 +Block 0012 [ 24]: 475ae5e8a1a7fd03 +Block 0012 [ 25]: cd32872310c4cf5b +Block 0012 [ 26]: 1300b982803803d2 +Block 0012 [ 27]: 07f8ba5cd1184097 +Block 0012 [ 28]: 76d7fca7033112cf +Block 0012 [ 29]: acc28de2c427f438 +Block 0012 [ 30]: 6828aef30f3ef56e +Block 0012 [ 31]: 4da395dae574e44c +Block 0012 [ 32]: 827494c27d25fb51 +Block 0012 [ 33]: c9b5d7e7cc3eec16 +Block 0012 [ 34]: e068185515567a4c +Block 0012 [ 35]: ed2d26c2c0ea4970 +Block 0012 [ 36]: 1780aea878a1a49c +Block 0012 [ 37]: c04af2793f6c3d3a +Block 0012 [ 38]: 13494fccd3d844b8 +Block 0012 [ 39]: 1dbe9064ca0da769 +Block 0012 [ 40]: 6c4938243bf4e221 +Block 0012 [ 41]: 49aeca73f743075f +Block 0012 [ 42]: 684b4dc878fb5a2a +Block 0012 [ 43]: 4d8c36434eccb40d +Block 0012 [ 44]: a5ab9e20d5b38fd0 +Block 0012 [ 45]: b46dcc6a69e362c7 +Block 0012 [ 46]: 625077c4ab8f7e5b +Block 0012 [ 47]: 2f2b6451831786fa +Block 0012 [ 48]: 29bd2a796a638e84 +Block 0012 [ 49]: 9e5f8787ba2edfed +Block 0012 [ 50]: 16ec9a39d20182ac +Block 0012 [ 51]: abe01ec3ab8b71e9 +Block 0012 [ 52]: 145e8d1c67bf159f +Block 0012 [ 53]: 50a981c572813f38 +Block 0012 [ 54]: 87977fd04b380373 +Block 0012 [ 55]: 6e72ee7f8a5f195c +Block 0012 [ 56]: 55298c77c6435c8c +Block 0012 [ 57]: d1ea5008f239e8bc +Block 0012 [ 58]: 2d2b1d358bea1c27 +Block 0012 [ 59]: 9d293b3e70505688 +Block 0012 [ 60]: 1f57a815b02dd03f +Block 0012 [ 61]: 5bd99c9650ebed7d +Block 0012 [ 62]: be52d8ff71651ed3 +Block 0012 [ 63]: 35f3a2d423c0edc9 +Block 0012 [ 64]: d43ec0fbc3dbed4e +Block 0012 [ 65]: eb53cea0ec093139 +Block 0012 [ 66]: c200c6a5337f3c77 +Block 0012 [ 67]: c0e16f0190ef51f8 +Block 0012 [ 68]: 6c0c98019fa49148 +Block 0012 [ 69]: 15906d5647aaea5c +Block 0012 [ 70]: 712a775873db7424 +Block 0012 [ 71]: 2eac1964eabdcae4 +Block 0012 [ 72]: e71e32396b0ad27b +Block 0012 [ 73]: bef6323dbbc3818c +Block 0012 [ 74]: a9dd5cfdb6630790 +Block 0012 [ 75]: f064029a11a00acd +Block 0012 [ 76]: 696332e154302e67 +Block 0012 [ 77]: e2582460cd2816ef +Block 0012 [ 78]: e59950b4cfaa467d +Block 0012 [ 79]: 5991d99e5d1bacef +Block 0012 [ 80]: 16d23dd64096e1ed +Block 0012 [ 81]: 984eb0ed25ed2394 +Block 0012 [ 82]: 2f755244e1fc2598 +Block 0012 [ 83]: cb708970664b867c +Block 0012 [ 84]: 2ef6c4c2da67430d +Block 0012 [ 85]: d7c59053f2ba40b8 +Block 0012 [ 86]: df85654b59aaab8f +Block 0012 [ 87]: 6fc5e4f54a421593 +Block 0012 [ 88]: a8ba9d179663aa0e +Block 0012 [ 89]: c5da879ae66728a6 +Block 0012 [ 90]: e220fbd3cee2b2fe +Block 0012 [ 91]: f8b1b1e10aeec07b +Block 0012 [ 92]: d7175c31f480cd3e +Block 0012 [ 93]: 3a79224610a8642b +Block 0012 [ 94]: 270b4264c407cd08 +Block 0012 [ 95]: 738f6bb7f9abbb48 +Block 0012 [ 96]: e7a11c9a50808fce +Block 0012 [ 97]: 8663ca2db53e308f +Block 0012 [ 98]: 92bfd65af2b01a33 +Block 0012 [ 99]: 67205230b49bc74c +Block 0012 [100]: 5b4a4df4a812b2e3 +Block 0012 [101]: 8d1454ccca03b57f +Block 0012 [102]: 269156b9cadc71d9 +Block 0012 [103]: 4f9606502988716f +Block 0012 [104]: 5afbbff2b0d632d1 +Block 0012 [105]: c4ff98688046c0fb +Block 0012 [106]: df1d7b1d65f4c708 +Block 0012 [107]: a5ded21243ff9887 +Block 0012 [108]: c1ed83564bac320c +Block 0012 [109]: 87644000cf3b6328 +Block 0012 [110]: 03eddf451f4582ad +Block 0012 [111]: 4e99bfef863aefe3 +Block 0012 [112]: f4c5c9a281af9741 +Block 0012 [113]: f00a08a68c220c3c +Block 0012 [114]: b7c633c54afc5771 +Block 0012 [115]: ecde6342173832d9 +Block 0012 [116]: 25290781e957d9b5 +Block 0012 [117]: 1885d88000e584ad +Block 0012 [118]: 03b8e9a7748e4481 +Block 0012 [119]: f207874f5d14dbc3 +Block 0012 [120]: 39c8600104de16cd +Block 0012 [121]: 90c31d4b18011207 +Block 0012 [122]: 11c96fb4b8548f7a +Block 0012 [123]: 1548cae3f9a6fee0 +Block 0012 [124]: e46b97ed40e220d7 +Block 0012 [125]: 59cd30aea307e20f +Block 0012 [126]: 7e774fa0cf2e25e4 +Block 0012 [127]: 368f296b22ac7048 +Block 0013 [ 0]: 690c233779fcd1a5 +Block 0013 [ 1]: 164d19b92fd845e5 +Block 0013 [ 2]: 4a60478f329d03d1 +Block 0013 [ 3]: f6e7a353dc1d8509 +Block 0013 [ 4]: 8c6c26e9bce3999c +Block 0013 [ 5]: 73d1dba4d13a7fa1 +Block 0013 [ 6]: de62d56f692c8b88 +Block 0013 [ 7]: 4029a641b255e05b +Block 0013 [ 8]: e849c487d21a109d +Block 0013 [ 9]: b3752eb956b5a28c +Block 0013 [ 10]: 43b04c0f444343df +Block 0013 [ 11]: da8b8019e3177dcf +Block 0013 [ 12]: 4e4512fa70430746 +Block 0013 [ 13]: 68d6ceb3dbcf3abb +Block 0013 [ 14]: a54ff7cacea91ee1 +Block 0013 [ 15]: f6f265399b8e3390 +Block 0013 [ 16]: 77a159a100d38741 +Block 0013 [ 17]: d2b1cca843b0244b +Block 0013 [ 18]: 562e3eeba500ed4a +Block 0013 [ 19]: fb0f37bdcece65db +Block 0013 [ 20]: 698b10976e3f51d2 +Block 0013 [ 21]: 88d07ea552c403e6 +Block 0013 [ 22]: 65d5ab4c88a0c847 +Block 0013 [ 23]: e0c49b553e82b0c2 +Block 0013 [ 24]: a85aa2f95bed56f2 +Block 0013 [ 25]: 8920d955defe3c8a +Block 0013 [ 26]: d62b529a0274d319 +Block 0013 [ 27]: fee24b797049ae16 +Block 0013 [ 28]: 16710bb090bc2451 +Block 0013 [ 29]: 41a2a3df035869da +Block 0013 [ 30]: 2e8a999878b3c0be +Block 0013 [ 31]: afa17424460f43a3 +Block 0013 [ 32]: 3ab13cd5fe21b763 +Block 0013 [ 33]: 6409ae0b067e5573 +Block 0013 [ 34]: 54add50ef70c3e80 +Block 0013 [ 35]: 778cae26c9dbabf1 +Block 0013 [ 36]: 1ad4e56c961eeeed +Block 0013 [ 37]: c74678ca700e7048 +Block 0013 [ 38]: a5014f9ba1895d62 +Block 0013 [ 39]: d5909f7f417177a1 +Block 0013 [ 40]: eba69c817c3aefb5 +Block 0013 [ 41]: 63d57343f3fabf6f +Block 0013 [ 42]: 0a2b03f5fbf2010c +Block 0013 [ 43]: c5ba82905af74eda +Block 0013 [ 44]: 983ce80682e205ea +Block 0013 [ 45]: 7b89eb6563073133 +Block 0013 [ 46]: 030427ac1d91dc06 +Block 0013 [ 47]: 2e5454dd24ed6d24 +Block 0013 [ 48]: 48c692282390170c +Block 0013 [ 49]: 6182b733e5fcda88 +Block 0013 [ 50]: 29be37f56c231a16 +Block 0013 [ 51]: 9863267f76bb14ac +Block 0013 [ 52]: dff4f3f9230b833f +Block 0013 [ 53]: f10677d82116f55e +Block 0013 [ 54]: c6e3bcdc02c40157 +Block 0013 [ 55]: 0e356fa761c71a5f +Block 0013 [ 56]: 267b619a0368396b +Block 0013 [ 57]: 323b19403de6fa35 +Block 0013 [ 58]: 4b4927454270439c +Block 0013 [ 59]: 56b4024ff5fa70b1 +Block 0013 [ 60]: 78aa7bf906495eea +Block 0013 [ 61]: 981cb071b1d932bb +Block 0013 [ 62]: 0119f99b266444ad +Block 0013 [ 63]: a63f7e923977a02d +Block 0013 [ 64]: ff44a639740dc6e0 +Block 0013 [ 65]: 6e78313d8ee1b7f0 +Block 0013 [ 66]: ebd4e567ff5d0bd4 +Block 0013 [ 67]: 04fc7e127f1363d5 +Block 0013 [ 68]: 9f854557dc7cdc2a +Block 0013 [ 69]: 123a85765004f761 +Block 0013 [ 70]: 25987189fdc1c199 +Block 0013 [ 71]: 7645eec6d56596eb +Block 0013 [ 72]: de3d640e12f4a2e4 +Block 0013 [ 73]: a7088a305483aafa +Block 0013 [ 74]: 69f5c4f93a37c42c +Block 0013 [ 75]: 5a86c47ac539bfcd +Block 0013 [ 76]: 7cf4ce6c9207945c +Block 0013 [ 77]: 0cf8a991245eda31 +Block 0013 [ 78]: bacb196f26dba8ec +Block 0013 [ 79]: 1990ff657d9e0653 +Block 0013 [ 80]: 5eef63b1d0fb79e9 +Block 0013 [ 81]: 693d7795607687c5 +Block 0013 [ 82]: 2f0e3e3df3258209 +Block 0013 [ 83]: e5821367c959a292 +Block 0013 [ 84]: bc6eb31a2247bc03 +Block 0013 [ 85]: 6c82f7f810850d1b +Block 0013 [ 86]: 465322d01d969ea6 +Block 0013 [ 87]: 0dd07730117537b3 +Block 0013 [ 88]: 5d99807522c99cfa +Block 0013 [ 89]: c22a3ee8bf8419e6 +Block 0013 [ 90]: 4751bb03660f437b +Block 0013 [ 91]: 951e7871e44de80f +Block 0013 [ 92]: 8f4b787a3bc1a4ac +Block 0013 [ 93]: 437f765c7c45ac61 +Block 0013 [ 94]: d6283c5b3a90ad12 +Block 0013 [ 95]: 54099af4833a840c +Block 0013 [ 96]: 89ae56f7a1608fe9 +Block 0013 [ 97]: 680a073db29a30ac +Block 0013 [ 98]: f4518f7e14a2fbf4 +Block 0013 [ 99]: 94858d8127d3fbf0 +Block 0013 [100]: 9964c0749ef69904 +Block 0013 [101]: dfbb7bf3bcc80371 +Block 0013 [102]: 2b177b792a857f68 +Block 0013 [103]: fb7575b39037ef56 +Block 0013 [104]: b1047efa3fcad858 +Block 0013 [105]: c53c4c7aad92dfad +Block 0013 [106]: a68bd64b9f9a8e32 +Block 0013 [107]: a1ffa9474cd19e6d +Block 0013 [108]: 51f0cf2b00ef294b +Block 0013 [109]: ad54422b421ba9b7 +Block 0013 [110]: b33b2166933e82cf +Block 0013 [111]: d998e290753b0c2e +Block 0013 [112]: d5b55ce657f61ff4 +Block 0013 [113]: 1a2ff90cc7ac584e +Block 0013 [114]: e85ee2492584f982 +Block 0013 [115]: 9c1cf32314ee8aeb +Block 0013 [116]: f1fa688c871d1bf9 +Block 0013 [117]: 169d32554781beaa +Block 0013 [118]: 523aed8c7d307c93 +Block 0013 [119]: 2b7b881cb3c586b7 +Block 0013 [120]: 394a238db0bf1022 +Block 0013 [121]: d89139f29d14d6db +Block 0013 [122]: 71ef3f099cd3352f +Block 0013 [123]: b420e528391858bf +Block 0013 [124]: 6ebce924b5f8b524 +Block 0013 [125]: 8df56ab35b4dc343 +Block 0013 [126]: fe60f549720c38e5 +Block 0013 [127]: 52b2844a8ad07c19 +Block 0014 [ 0]: 42f9a2216ea60ceb +Block 0014 [ 1]: f4be235f9165be42 +Block 0014 [ 2]: e789f9d5fa754b79 +Block 0014 [ 3]: 022854d55d727111 +Block 0014 [ 4]: 812eb2f323f74d88 +Block 0014 [ 5]: fbcf65d73d76eaac +Block 0014 [ 6]: a4fac1040fb1be3c +Block 0014 [ 7]: 9a540a2bc0a1aa09 +Block 0014 [ 8]: fa65ffe434f56fb5 +Block 0014 [ 9]: 4b065f486f802cb1 +Block 0014 [ 10]: 5879b735d57c9adb +Block 0014 [ 11]: 7b7917daf59c28d7 +Block 0014 [ 12]: 17200f95067efd16 +Block 0014 [ 13]: 5d205d348a48db4d +Block 0014 [ 14]: 42100e93335dca01 +Block 0014 [ 15]: 69618baff0475d71 +Block 0014 [ 16]: ead862e0e6687f0d +Block 0014 [ 17]: 653c798b5dc34141 +Block 0014 [ 18]: c53378cd5de69d1b +Block 0014 [ 19]: a86b278f7d653ce2 +Block 0014 [ 20]: 5ba4121570a62068 +Block 0014 [ 21]: ae1ef5ab3f8b769b +Block 0014 [ 22]: 0227f65cc1231b76 +Block 0014 [ 23]: a8e28a1702dbb594 +Block 0014 [ 24]: 03e66ff4e4a2b18f +Block 0014 [ 25]: 101a43cad5c5fe60 +Block 0014 [ 26]: 98eb2eb0a56028a0 +Block 0014 [ 27]: 5877b7de89886613 +Block 0014 [ 28]: cfd4e8cca45b1790 +Block 0014 [ 29]: e4b35e3874b9e876 +Block 0014 [ 30]: 14541160c6b3ee02 +Block 0014 [ 31]: dd81bacea364da1d +Block 0014 [ 32]: 36fb0d5cbbb8dae3 +Block 0014 [ 33]: a5e78dbb96f499fe +Block 0014 [ 34]: cb9e478672e4fca6 +Block 0014 [ 35]: 2fb70e58b6f44554 +Block 0014 [ 36]: 229f985536cfbdc5 +Block 0014 [ 37]: 4777ce4b21b955dc +Block 0014 [ 38]: 35bedadfd4af9b10 +Block 0014 [ 39]: f0eb52f55c675a29 +Block 0014 [ 40]: 6ff3abb4b0918527 +Block 0014 [ 41]: a5fca11483c388bc +Block 0014 [ 42]: d253b0c295c6fbf8 +Block 0014 [ 43]: df39a28a23b4f038 +Block 0014 [ 44]: d163372bfb6af489 +Block 0014 [ 45]: 1e1804bf5afe3fa8 +Block 0014 [ 46]: dab4f6f07c2bebf2 +Block 0014 [ 47]: 07b8936bc3533670 +Block 0014 [ 48]: c70835706442a1a7 +Block 0014 [ 49]: c60f346aa6eca9ad +Block 0014 [ 50]: 97a0ce931e61716f +Block 0014 [ 51]: 60a2ba4b96edb79c +Block 0014 [ 52]: b055188f8aba284a +Block 0014 [ 53]: a6043aa3ad7bec78 +Block 0014 [ 54]: f4c35bfce3ace67d +Block 0014 [ 55]: 319ccada848cdee2 +Block 0014 [ 56]: d0795590ea34a8b8 +Block 0014 [ 57]: e87a7307f237f419 +Block 0014 [ 58]: ae12cee379d66302 +Block 0014 [ 59]: 86b85724e1286c79 +Block 0014 [ 60]: 7894b054641720aa +Block 0014 [ 61]: 49e32fbda0747886 +Block 0014 [ 62]: a16876726931b8c0 +Block 0014 [ 63]: 95a87d1556254491 +Block 0014 [ 64]: 1b7359bdd4645944 +Block 0014 [ 65]: f177fc737aebc782 +Block 0014 [ 66]: 9e72721109423695 +Block 0014 [ 67]: b5fccf24cb0ea7d3 +Block 0014 [ 68]: 80a6b33ddc9b5720 +Block 0014 [ 69]: 9e2e62146504301b +Block 0014 [ 70]: 18f348c546a48b21 +Block 0014 [ 71]: e9c4c72be6bdbcc2 +Block 0014 [ 72]: ff301b1c853cd28f +Block 0014 [ 73]: b86477b7bfd084c2 +Block 0014 [ 74]: c74db1d1144db45b +Block 0014 [ 75]: 1555cafa0c364252 +Block 0014 [ 76]: 7282bf96c973f185 +Block 0014 [ 77]: 16fcda0df22d0d0a +Block 0014 [ 78]: bde4d5ba20822c22 +Block 0014 [ 79]: c27d9a170dfa7344 +Block 0014 [ 80]: bd663b25e9bd3e90 +Block 0014 [ 81]: 06995c1ac6b3f2c6 +Block 0014 [ 82]: 0ff746c47c5feafa +Block 0014 [ 83]: 370f75aa1c2aaacf +Block 0014 [ 84]: 1de1a575bba86945 +Block 0014 [ 85]: 9a1954a4c45cc63e +Block 0014 [ 86]: a2e4824e3e170256 +Block 0014 [ 87]: 1d435c8cf13aa8f5 +Block 0014 [ 88]: 47773d9a5c4e3b77 +Block 0014 [ 89]: b97ed8dc09f6d1fd +Block 0014 [ 90]: 2492b160c74c94b6 +Block 0014 [ 91]: 377877a2f5d232a7 +Block 0014 [ 92]: 19813e25319f5d5b +Block 0014 [ 93]: 2981dcd02bd36023 +Block 0014 [ 94]: 9c51ced5edc2f88a +Block 0014 [ 95]: bdfcc0f92340b53b +Block 0014 [ 96]: ca3f8d8ea0028190 +Block 0014 [ 97]: 6083dd598898d0df +Block 0014 [ 98]: b7c2764a629af855 +Block 0014 [ 99]: cb7b51f275a23764 +Block 0014 [100]: 0999e69569ff8654 +Block 0014 [101]: 75d419e7e4034cf1 +Block 0014 [102]: 9926c163ccf6fbc0 +Block 0014 [103]: 6f6fbfbc4634b106 +Block 0014 [104]: 99aab02824ac6428 +Block 0014 [105]: 755070d1503322d0 +Block 0014 [106]: 794e25994c009ffd +Block 0014 [107]: 86c42e4262d68dab +Block 0014 [108]: 36a474da4489ddbb +Block 0014 [109]: ea205d9048c07756 +Block 0014 [110]: b3b00cb88461299c +Block 0014 [111]: abd0616d54bf1f27 +Block 0014 [112]: 298326ff8b16010b +Block 0014 [113]: 736d092013ecf8e7 +Block 0014 [114]: c80706fa402b55cc +Block 0014 [115]: 643f6ca3cd72bb76 +Block 0014 [116]: 1e43fab3e955c081 +Block 0014 [117]: f81da96e09233646 +Block 0014 [118]: 63db4670f362122e +Block 0014 [119]: ffe8fa6827833188 +Block 0014 [120]: a19d0f8c1f840a05 +Block 0014 [121]: a330e308ccb789fe +Block 0014 [122]: 4af172102042a852 +Block 0014 [123]: 78fe11656db11997 +Block 0014 [124]: ffd3f265c3bcad3b +Block 0014 [125]: 40939ffec182cb0f +Block 0014 [126]: f2e10f47cfed9d45 +Block 0014 [127]: 0db682170c37d732 +Block 0015 [ 0]: 5c60ebf343964379 +Block 0015 [ 1]: c844eb5bb2f5d7ee +Block 0015 [ 2]: 8c18a6010c78383f +Block 0015 [ 3]: fc52029ab145346b +Block 0015 [ 4]: 05f78944f5618755 +Block 0015 [ 5]: 6833faa1b7925ec6 +Block 0015 [ 6]: 142dcb8cdbcf985f +Block 0015 [ 7]: 1eec4fe13e3eb436 +Block 0015 [ 8]: 093270287ff6c154 +Block 0015 [ 9]: af0492e23c6948c4 +Block 0015 [ 10]: 2d6209d2e3bb36c9 +Block 0015 [ 11]: 5dc0d600021d81cb +Block 0015 [ 12]: 2efc1d348d9dfd50 +Block 0015 [ 13]: 80d5311f1b323f28 +Block 0015 [ 14]: 65b6b8c85e49651d +Block 0015 [ 15]: dd83f1aaa29f2b5c +Block 0015 [ 16]: dd0caea719886d54 +Block 0015 [ 17]: bd0737cfb15066fa +Block 0015 [ 18]: 4ee7af30812dba7a +Block 0015 [ 19]: 592e32c4663cf43b +Block 0015 [ 20]: 8115137c067d43c0 +Block 0015 [ 21]: 2bc8f96f7bd33335 +Block 0015 [ 22]: b42162e04c360f71 +Block 0015 [ 23]: 4c93a2bbbefa40c1 +Block 0015 [ 24]: b670eef90f8a3b4b +Block 0015 [ 25]: 2f0133f2465e20d9 +Block 0015 [ 26]: 6f5b35c7183bbb58 +Block 0015 [ 27]: 54863424d1104479 +Block 0015 [ 28]: c110593d9561e19e +Block 0015 [ 29]: 85915bdf108cfb8d +Block 0015 [ 30]: 564c2c9d12a17c32 +Block 0015 [ 31]: ae51b6cd7d8dba85 +Block 0015 [ 32]: 86801cbdd9edf13c +Block 0015 [ 33]: 4627159cacf299f6 +Block 0015 [ 34]: fcec5f216cbc609b +Block 0015 [ 35]: 92da6375678dca6d +Block 0015 [ 36]: 23237b4aca3e3087 +Block 0015 [ 37]: 778ced58723f4db7 +Block 0015 [ 38]: f8b8ac5c0c11a6db +Block 0015 [ 39]: ca5a9cfa51fb092b +Block 0015 [ 40]: ad9c36454a7b4555 +Block 0015 [ 41]: c2ec64eaed0476e2 +Block 0015 [ 42]: 9e42f0a6d2ecedf4 +Block 0015 [ 43]: 5ec5baacc56984a4 +Block 0015 [ 44]: 48cc00c537ad73f2 +Block 0015 [ 45]: 0e1950a5b40721b5 +Block 0015 [ 46]: 2219b901e1de2332 +Block 0015 [ 47]: 54da4a3f5776bb19 +Block 0015 [ 48]: 605cd0995671b863 +Block 0015 [ 49]: 6f565b0337c7940a +Block 0015 [ 50]: b6f7c44fa6ddde1c +Block 0015 [ 51]: b9bdbd9710ee5e3d +Block 0015 [ 52]: 233f90f4ae9a2661 +Block 0015 [ 53]: 0ad62c6866e21f0e +Block 0015 [ 54]: 21f27ed906fda36b +Block 0015 [ 55]: 8f1a7c3d6e92ab09 +Block 0015 [ 56]: 9b9188cec8960b71 +Block 0015 [ 57]: e81af96c30aa9ea0 +Block 0015 [ 58]: e10ba0b8ce762d3b +Block 0015 [ 59]: f6f1842458770d66 +Block 0015 [ 60]: b0ea72e76bb8b2c0 +Block 0015 [ 61]: 48735c0b7a684c9b +Block 0015 [ 62]: 3700939516de0b9f +Block 0015 [ 63]: 99ffb1b3c77a5911 +Block 0015 [ 64]: 3b0bea89f2d75973 +Block 0015 [ 65]: 7284d5a6e4ca73fa +Block 0015 [ 66]: fc2980004fa1d6fd +Block 0015 [ 67]: 85204a0328b701df +Block 0015 [ 68]: 951945bef9422e4b +Block 0015 [ 69]: 27fd0976cbd1aae8 +Block 0015 [ 70]: d6884a6d8c94694f +Block 0015 [ 71]: 097442b7e5f413b1 +Block 0015 [ 72]: 1c8239a020d0d2ed +Block 0015 [ 73]: 26e32bdf5c5f287a +Block 0015 [ 74]: 8eec296926a32040 +Block 0015 [ 75]: 40925c65e41f704c +Block 0015 [ 76]: 6dfc1b6036ac83f1 +Block 0015 [ 77]: 4372772306842f15 +Block 0015 [ 78]: 85d08be9df2914df +Block 0015 [ 79]: b6a217b37bd41e7c +Block 0015 [ 80]: 0c179dd3a6f1d8c3 +Block 0015 [ 81]: 83acfb8c99e2915f +Block 0015 [ 82]: f67b69c627380be8 +Block 0015 [ 83]: eb83f410554ab2d4 +Block 0015 [ 84]: a9b1da448e9c0e18 +Block 0015 [ 85]: c62a104866a6899f +Block 0015 [ 86]: b512109239c786e9 +Block 0015 [ 87]: d3d30893c8ef2d5b +Block 0015 [ 88]: 185fb60f6d5b6fd0 +Block 0015 [ 89]: 20b710b22ec06809 +Block 0015 [ 90]: 9ea3919f273b086c +Block 0015 [ 91]: fb4d1bba70e26bc3 +Block 0015 [ 92]: e237ab18824c0f9e +Block 0015 [ 93]: 4fa18dbf16693282 +Block 0015 [ 94]: 5f515456d7cf884b +Block 0015 [ 95]: dd01c2e260558f84 +Block 0015 [ 96]: b851d646c4273226 +Block 0015 [ 97]: 153ff9a1c2fad967 +Block 0015 [ 98]: efb1a8348b2034c0 +Block 0015 [ 99]: 39321e6706e1ca32 +Block 0015 [100]: 71f73d91cd992df2 +Block 0015 [101]: 47b532cfb7d073be +Block 0015 [102]: f9dabbfb4e3dd13f +Block 0015 [103]: b70c10269560f42a +Block 0015 [104]: 5980fa7986b2174a +Block 0015 [105]: bd9ecb17969cb07d +Block 0015 [106]: f05da06e851b53bc +Block 0015 [107]: 433e3504d76870af +Block 0015 [108]: cb5a0c78eab9e338 +Block 0015 [109]: e652db008f460a5d +Block 0015 [110]: cbbbc86cb666048b +Block 0015 [111]: 81ff315c2fc6c975 +Block 0015 [112]: 8399e727faa22a09 +Block 0015 [113]: eb0b9969885f2309 +Block 0015 [114]: 3b327c3fe4446450 +Block 0015 [115]: b3c0c30bd7a48a78 +Block 0015 [116]: 33d547fef50f583a +Block 0015 [117]: 9862ae613d5f6a05 +Block 0015 [118]: f77ba6cef1eef1b9 +Block 0015 [119]: 74ecf3320c1d18f5 +Block 0015 [120]: 04f27b3d8db404fa +Block 0015 [121]: e7c42ef35dbe1e69 +Block 0015 [122]: 9f722564ad1f94ca +Block 0015 [123]: 3808033cc8a6264a +Block 0015 [124]: 1948446042580abc +Block 0015 [125]: 025eb81c6f5bd44c +Block 0015 [126]: d2cdfcab1c7cc163 +Block 0015 [127]: deb4ea7420a60a38 +Block 0016 [ 0]: 8ef71222e25e33a7 +Block 0016 [ 1]: 5b788bacd4a161d2 +Block 0016 [ 2]: 4c085a5d4b387162 +Block 0016 [ 3]: fb00f740c0bff138 +Block 0016 [ 4]: 45f63e1874e69080 +Block 0016 [ 5]: 78a2f2d260a54dde +Block 0016 [ 6]: 8cb461cb1355137a +Block 0016 [ 7]: 7b7e3cd55639f758 +Block 0016 [ 8]: ba7f598ebc7d0a24 +Block 0016 [ 9]: 9cd3d7fa9b61dfba +Block 0016 [ 10]: 0f4bfda84f8bdbae +Block 0016 [ 11]: 43d53060d71491f4 +Block 0016 [ 12]: 7b4a2d3825164639 +Block 0016 [ 13]: 509a1b3858bd2bed +Block 0016 [ 14]: 792e1edbc1ea84b1 +Block 0016 [ 15]: be636d230f55cf24 +Block 0016 [ 16]: f4ce5fe0d5f89ea6 +Block 0016 [ 17]: d3bec22193b9fa85 +Block 0016 [ 18]: c50401a757676486 +Block 0016 [ 19]: 3801152878206e10 +Block 0016 [ 20]: a6f32c77460a68ca +Block 0016 [ 21]: 5be9be1aa491771f +Block 0016 [ 22]: b8d681e557a6b464 +Block 0016 [ 23]: b3d7a221ff57bdbd +Block 0016 [ 24]: 88c49fc0e90d2982 +Block 0016 [ 25]: ff22dc20add2096e +Block 0016 [ 26]: 6688f9c931036c83 +Block 0016 [ 27]: fbf4a2f65116f128 +Block 0016 [ 28]: 708dfca5957923bd +Block 0016 [ 29]: 5cab6655f730ead8 +Block 0016 [ 30]: 652c868b4e0973c6 +Block 0016 [ 31]: 7faf39e6e68db8f4 +Block 0016 [ 32]: 5ed3b7e45168776e +Block 0016 [ 33]: 3233f0afc73f8fc9 +Block 0016 [ 34]: 4f61d181ed54920e +Block 0016 [ 35]: 45af51628268a386 +Block 0016 [ 36]: b81809f7405da7c2 +Block 0016 [ 37]: 7f04e166e18f898e +Block 0016 [ 38]: 9461d15e80360ddf +Block 0016 [ 39]: bf0279fe577f4a56 +Block 0016 [ 40]: 68eebc0b0f81a4f6 +Block 0016 [ 41]: 16a7d9859c25a3b8 +Block 0016 [ 42]: aad09c771d7c5046 +Block 0016 [ 43]: 2e83257346b21f51 +Block 0016 [ 44]: 212616f504644c05 +Block 0016 [ 45]: 25b6ee612334f735 +Block 0016 [ 46]: d0f8fc39fabf5258 +Block 0016 [ 47]: c231ff70ac3bb48c +Block 0016 [ 48]: e5a4d9bdc0325012 +Block 0016 [ 49]: 7b3fc5655f613956 +Block 0016 [ 50]: ec5b647ca9a4b333 +Block 0016 [ 51]: 8975b8bbfa7b5b64 +Block 0016 [ 52]: c9afd74a277d31f9 +Block 0016 [ 53]: d6109dfb79b3199e +Block 0016 [ 54]: 503a79cbe90d1000 +Block 0016 [ 55]: 6b96e1111aa5b4a6 +Block 0016 [ 56]: 62e48b5640dc72bb +Block 0016 [ 57]: 0323e21f38eb7a85 +Block 0016 [ 58]: c2b3329aa089ea80 +Block 0016 [ 59]: 7e6de45346324c73 +Block 0016 [ 60]: 30d34ff4baf1ad6b +Block 0016 [ 61]: e70b1ecb101c7a8f +Block 0016 [ 62]: f6f4c4815d5c6443 +Block 0016 [ 63]: 84ddf532213ee089 +Block 0016 [ 64]: 3383dc784306f5c5 +Block 0016 [ 65]: d410866c9820fb80 +Block 0016 [ 66]: 9ad1a811918ae747 +Block 0016 [ 67]: 99cccd5f357e9e45 +Block 0016 [ 68]: d4bcab0da4749c7f +Block 0016 [ 69]: ca36322b45b520d3 +Block 0016 [ 70]: 9bbe0827e6440146 +Block 0016 [ 71]: 5ea0191d0bd9d6bc +Block 0016 [ 72]: b6b1d7c9f8b3b365 +Block 0016 [ 73]: 7b14bfce8ce14778 +Block 0016 [ 74]: 15733305ad30a8b0 +Block 0016 [ 75]: 3b3b8bbef4e20874 +Block 0016 [ 76]: 007b2c2770bbce68 +Block 0016 [ 77]: 9580dbbc49161c87 +Block 0016 [ 78]: e996e4a0fb606ff5 +Block 0016 [ 79]: 8166385b61c551c9 +Block 0016 [ 80]: 905b3a4586c9628f +Block 0016 [ 81]: 6c3538319960701a +Block 0016 [ 82]: 726852503e929623 +Block 0016 [ 83]: 0d1370de52be24ca +Block 0016 [ 84]: 137c4cd293095677 +Block 0016 [ 85]: e1a533c284ade63e +Block 0016 [ 86]: aa03ff8f2d48e0e8 +Block 0016 [ 87]: 8070a0ca0533d5e9 +Block 0016 [ 88]: de4f9b80be79236b +Block 0016 [ 89]: f61dd73e6ff6cb28 +Block 0016 [ 90]: b6d6b411c7d73e90 +Block 0016 [ 91]: 02675d6dda93734b +Block 0016 [ 92]: 52b5fe33ff0edf12 +Block 0016 [ 93]: 139bc3df49f3b211 +Block 0016 [ 94]: cfe9120dd35237a8 +Block 0016 [ 95]: f7d4041b2c512498 +Block 0016 [ 96]: ec5e66bb264d3022 +Block 0016 [ 97]: 57417ff639782925 +Block 0016 [ 98]: 7593670d37a496db +Block 0016 [ 99]: feab9e35be512f28 +Block 0016 [100]: cb506d5764fed86b +Block 0016 [101]: 6aec183ee8e3745f +Block 0016 [102]: ec2dd19767a5734d +Block 0016 [103]: 7b6358cc3b32a264 +Block 0016 [104]: d04380da36957c7f +Block 0016 [105]: 9ba5769ddfaa6a3d +Block 0016 [106]: 3aeb202ee3f852fd +Block 0016 [107]: 6ad40cabdb80aaf4 +Block 0016 [108]: a6c3dac45ee8a5c1 +Block 0016 [109]: e9cb6215b9882b7c +Block 0016 [110]: 625f58ff78a5786e +Block 0016 [111]: 2cef23f4a3b5387e +Block 0016 [112]: 1aba2156c5cc14ed +Block 0016 [113]: 70778bb6caf8e015 +Block 0016 [114]: b79817079fa67733 +Block 0016 [115]: 2040c00a18883d6f +Block 0016 [116]: 412e281fbfde7312 +Block 0016 [117]: 130fb0debdad3f8e +Block 0016 [118]: ce30ca55fc0c9a38 +Block 0016 [119]: 45010a54f0da2809 +Block 0016 [120]: b1f29bcd5a661b0d +Block 0016 [121]: f5461d4639986c9f +Block 0016 [122]: 79839bdaa491069e +Block 0016 [123]: eb8c090fbf0d2957 +Block 0016 [124]: f7a83b1156b6ffe4 +Block 0016 [125]: aaed1d193830d24e +Block 0016 [126]: b224c4377f85bc52 +Block 0016 [127]: 33f5586f84573cea +Block 0017 [ 0]: 02fe7e853ebe0d0f +Block 0017 [ 1]: e67e2c7ef9905707 +Block 0017 [ 2]: bd081291079d349f +Block 0017 [ 3]: ce214e31c447258f +Block 0017 [ 4]: 69f77c776aef74ac +Block 0017 [ 5]: 3ef5b6d0c3112146 +Block 0017 [ 6]: 09e582516b1c1946 +Block 0017 [ 7]: 5435e0c7d1062de4 +Block 0017 [ 8]: df4b0f596e780cc0 +Block 0017 [ 9]: 0b0d0a7707db157a +Block 0017 [ 10]: ca853fdaf1f30538 +Block 0017 [ 11]: dbc61bec8a0a7bcd +Block 0017 [ 12]: bbf288024ff1b4bd +Block 0017 [ 13]: 8faf22bafbdda20a +Block 0017 [ 14]: 2de1c40ca884f4f8 +Block 0017 [ 15]: ef1a6ab15a6bc297 +Block 0017 [ 16]: 8e7e3775b6e620ef +Block 0017 [ 17]: b73ee4a9b5447bd8 +Block 0017 [ 18]: a7c9c64002e7de6c +Block 0017 [ 19]: 856743efdc51e1f2 +Block 0017 [ 20]: 86c9fae9e825e51d +Block 0017 [ 21]: b46144dc2d2bd13e +Block 0017 [ 22]: bb5fc5f58afe9f3d +Block 0017 [ 23]: 72565138c0c0de3f +Block 0017 [ 24]: d84fe0d08aeec7f4 +Block 0017 [ 25]: d82d1fe736931013 +Block 0017 [ 26]: 553ccfd5d897edd3 +Block 0017 [ 27]: 1946897a258ceea8 +Block 0017 [ 28]: 478f4e0bb4d26feb +Block 0017 [ 29]: e5d7b422fce1d6ef +Block 0017 [ 30]: d20534b5858c1f2e +Block 0017 [ 31]: 2d337040a6af6b92 +Block 0017 [ 32]: 54b35c906bfc0254 +Block 0017 [ 33]: c576354c4fed88e2 +Block 0017 [ 34]: 855ef7a03ddc9780 +Block 0017 [ 35]: 02ae016abd455038 +Block 0017 [ 36]: 5b08b4330a0f36b9 +Block 0017 [ 37]: e701a20db187fa01 +Block 0017 [ 38]: 69f8c2535b667d31 +Block 0017 [ 39]: 0583ad87707f1166 +Block 0017 [ 40]: 6c264bad170d16a1 +Block 0017 [ 41]: 564e696401b54e74 +Block 0017 [ 42]: 8e1acd3b5a0ad13d +Block 0017 [ 43]: ce1e5f83383e7882 +Block 0017 [ 44]: 177d21beb37812d0 +Block 0017 [ 45]: 4676715efd422319 +Block 0017 [ 46]: 780a06261172d470 +Block 0017 [ 47]: d9632d7e70419064 +Block 0017 [ 48]: 02b3db83a3af41c3 +Block 0017 [ 49]: a6e65a316272a79c +Block 0017 [ 50]: a594b0086e916d24 +Block 0017 [ 51]: 0b064fce44a2a76e +Block 0017 [ 52]: 2432d7db8b6f7667 +Block 0017 [ 53]: 6b2be3b92c8db847 +Block 0017 [ 54]: 1bbce28d4fb4dda3 +Block 0017 [ 55]: 0a5c3648ed841873 +Block 0017 [ 56]: 4b4c24e1bfaa0eac +Block 0017 [ 57]: 215b198b57484d44 +Block 0017 [ 58]: 7e28db06c4967f06 +Block 0017 [ 59]: 39e94d6e13a8808d +Block 0017 [ 60]: a50a0f8831791cb8 +Block 0017 [ 61]: 206ae656ceea22ef +Block 0017 [ 62]: eb9e7198a871b113 +Block 0017 [ 63]: f787d735bd1a533a +Block 0017 [ 64]: 095f66cb5f1c248c +Block 0017 [ 65]: 80fc162065b052c9 +Block 0017 [ 66]: 153b6e9c7c97401c +Block 0017 [ 67]: f4a9643d056f0a72 +Block 0017 [ 68]: bc049b48bbfce9a1 +Block 0017 [ 69]: 36ed38a3b7ea84ad +Block 0017 [ 70]: cb6f51ee30ecd90a +Block 0017 [ 71]: ac3a5ca12a82be94 +Block 0017 [ 72]: 468d587d7ba0a88f +Block 0017 [ 73]: 6f907170b9e7aa5b +Block 0017 [ 74]: a9fd5366ca960483 +Block 0017 [ 75]: fbb9bc4c359f1468 +Block 0017 [ 76]: f226fad7fc553d60 +Block 0017 [ 77]: 048d6944e0ca29fb +Block 0017 [ 78]: bb318db94c95df18 +Block 0017 [ 79]: 105509a613c5abd8 +Block 0017 [ 80]: e332fdec7d180a2d +Block 0017 [ 81]: 0eee4c4474ae8711 +Block 0017 [ 82]: 6ab584eaec00b13d +Block 0017 [ 83]: a83bd159c1e167a6 +Block 0017 [ 84]: 9c34d31dd5cacd55 +Block 0017 [ 85]: 7293faa10f50cb2f +Block 0017 [ 86]: 762dd1ef8251fad0 +Block 0017 [ 87]: 2811a9f56bd43318 +Block 0017 [ 88]: 07519086e22d47c0 +Block 0017 [ 89]: 86f9d58e400448d8 +Block 0017 [ 90]: e232d4b04455bb74 +Block 0017 [ 91]: cf556841d4f2a45d +Block 0017 [ 92]: 491b78ca34525eda +Block 0017 [ 93]: 6a082b3b72e71133 +Block 0017 [ 94]: 4e1647256eb998ee +Block 0017 [ 95]: 08a31dcfd48be9bb +Block 0017 [ 96]: 8a4e4a5b57cdf1aa +Block 0017 [ 97]: 5b7bd8bf7ec28733 +Block 0017 [ 98]: b9c55f7917141bc2 +Block 0017 [ 99]: 980b698d90b954b8 +Block 0017 [100]: baa10262b146c465 +Block 0017 [101]: 44d9ccb900b6f193 +Block 0017 [102]: 4fc6aa48bb32c460 +Block 0017 [103]: c28c6acbc1be8628 +Block 0017 [104]: 54cc0cb3ddbae117 +Block 0017 [105]: 1720fbfe18c9b3ef +Block 0017 [106]: bfab05e66a69aaa0 +Block 0017 [107]: a71a908f786c34a9 +Block 0017 [108]: 5ee97817c670b28c +Block 0017 [109]: 535cc2a0664dd333 +Block 0017 [110]: db8351e905bddff4 +Block 0017 [111]: 1a2e45990fd03ab8 +Block 0017 [112]: ad73b205252daa73 +Block 0017 [113]: 8e12bdbe877b55f8 +Block 0017 [114]: e4b688e3c50dbec2 +Block 0017 [115]: e1bcb0ee231819b0 +Block 0017 [116]: ce3c23e03b3ef2e2 +Block 0017 [117]: 6432e7536ae6ccad +Block 0017 [118]: 20f0e04af94a13b5 +Block 0017 [119]: 7736490bd70914ae +Block 0017 [120]: 7024a116d4af3b76 +Block 0017 [121]: ab9e8c2f372ff436 +Block 0017 [122]: 1d545892a1065e03 +Block 0017 [123]: b0f4f3c0dfaeb2cc +Block 0017 [124]: 74de51d4e9f3d9f6 +Block 0017 [125]: a0b38d15ed7bf487 +Block 0017 [126]: 33a46ece14805c89 +Block 0017 [127]: 834fa9ef3ef24bcb +Block 0018 [ 0]: 1a242ce230997d9b +Block 0018 [ 1]: 27975054b29babe8 +Block 0018 [ 2]: 18762553e598c29f +Block 0018 [ 3]: db01e8d1a2ab9376 +Block 0018 [ 4]: 7bb81b4dd6cc2115 +Block 0018 [ 5]: 02cc7040043a1d92 +Block 0018 [ 6]: ae9f9edf3b6fce7f +Block 0018 [ 7]: c423921b660990a1 +Block 0018 [ 8]: 281a011bcbeece96 +Block 0018 [ 9]: 2983c2b72941eaa8 +Block 0018 [ 10]: 183e1e12a8798776 +Block 0018 [ 11]: 6d09aaa1212c44c3 +Block 0018 [ 12]: d4fe7f0108acac6c +Block 0018 [ 13]: e8c816784b6ef0f6 +Block 0018 [ 14]: b78c7e808a211ac5 +Block 0018 [ 15]: 31c20264a10ba60f +Block 0018 [ 16]: b08a505efef753d3 +Block 0018 [ 17]: 3e942daa0e5f1ea5 +Block 0018 [ 18]: 9b45f7e39e5ac395 +Block 0018 [ 19]: f94807bef7c72762 +Block 0018 [ 20]: aab80003ae994d98 +Block 0018 [ 21]: 15aec49efb7568c1 +Block 0018 [ 22]: cb17490b118d47d4 +Block 0018 [ 23]: abedd85d337b6148 +Block 0018 [ 24]: e4b422270e181995 +Block 0018 [ 25]: a60a9d9e401cb171 +Block 0018 [ 26]: 9e3d0787cf999dba +Block 0018 [ 27]: 47c6e6f979d72e4d +Block 0018 [ 28]: 0120cf5c8d5d8d29 +Block 0018 [ 29]: 5914b6ac500cabe0 +Block 0018 [ 30]: d4844b8e42b295bf +Block 0018 [ 31]: d11cb644b0aa6b16 +Block 0018 [ 32]: 34a280f5c6861b00 +Block 0018 [ 33]: 941fdabe32af2a3e +Block 0018 [ 34]: ed5f13ac3dfa8b17 +Block 0018 [ 35]: e40211257d153bb5 +Block 0018 [ 36]: 3ebecfce85fddabc +Block 0018 [ 37]: b058f2daa35d0659 +Block 0018 [ 38]: 6e81776227dc1de4 +Block 0018 [ 39]: 903cdd86ab044958 +Block 0018 [ 40]: db80e50ca568989e +Block 0018 [ 41]: b3a2667bf1afb19d +Block 0018 [ 42]: 2fb3b686e259b527 +Block 0018 [ 43]: 9d502c5be8f047e9 +Block 0018 [ 44]: 5ebe6a9c788aa7c3 +Block 0018 [ 45]: 0129219b3ab99be5 +Block 0018 [ 46]: 76fe8083ac5bc860 +Block 0018 [ 47]: b25a5c9803e15174 +Block 0018 [ 48]: 8e41588d22498da3 +Block 0018 [ 49]: 535d49cbcce974ee +Block 0018 [ 50]: 5ea7114ad5badab0 +Block 0018 [ 51]: eb274b50e0dd9f1a +Block 0018 [ 52]: ab155492a5c70b5f +Block 0018 [ 53]: e258df1ff509eef8 +Block 0018 [ 54]: 5a695278ef55ceab +Block 0018 [ 55]: 9e161114a82e15ef +Block 0018 [ 56]: 170045e4e9954260 +Block 0018 [ 57]: a56a50835b800700 +Block 0018 [ 58]: a23ce122ac1279da +Block 0018 [ 59]: f575b95bee91b087 +Block 0018 [ 60]: 8fc0e92bdd552538 +Block 0018 [ 61]: 288931bff9509197 +Block 0018 [ 62]: c387b8567a16558e +Block 0018 [ 63]: 5dfe7026d392410e +Block 0018 [ 64]: 77031b0bc52274b4 +Block 0018 [ 65]: 9768e068ba0a897f +Block 0018 [ 66]: 838fe9b83e9f8539 +Block 0018 [ 67]: 8223f105c1d0479b +Block 0018 [ 68]: 7b75e46b05d940c8 +Block 0018 [ 69]: c4588f5474a26ae8 +Block 0018 [ 70]: 1951941657f37da6 +Block 0018 [ 71]: 23f8893a1575ec0d +Block 0018 [ 72]: b2fd7ad7278072df +Block 0018 [ 73]: 4a4c3e999cfc173c +Block 0018 [ 74]: bd7589d499563076 +Block 0018 [ 75]: ae61c35742a7b0f9 +Block 0018 [ 76]: 3322400c35475fb9 +Block 0018 [ 77]: 65718a454c86e9d7 +Block 0018 [ 78]: 95c19f7fe564841f +Block 0018 [ 79]: c0afa7b93be8a16e +Block 0018 [ 80]: 610392365382be84 +Block 0018 [ 81]: 3d8894c43775de2e +Block 0018 [ 82]: a3c3a715cabe7fea +Block 0018 [ 83]: 065ab25ffcef32e7 +Block 0018 [ 84]: 33981a456b7eacd5 +Block 0018 [ 85]: 8beb1382748f3cb5 +Block 0018 [ 86]: 5dea419f8f0ee480 +Block 0018 [ 87]: d17e8c3ce9bed985 +Block 0018 [ 88]: 80e3414b6a1d33e8 +Block 0018 [ 89]: fe3e4f8b5de4d95c +Block 0018 [ 90]: 0eb88acb805e30a4 +Block 0018 [ 91]: caa8daa0063324c6 +Block 0018 [ 92]: 8a84c2e5487490c6 +Block 0018 [ 93]: 92c0919cce8933e0 +Block 0018 [ 94]: 95e40747a89ec3f8 +Block 0018 [ 95]: c94a85345a36fb98 +Block 0018 [ 96]: 4884a40550574ea6 +Block 0018 [ 97]: 98aef193a0b4195c +Block 0018 [ 98]: 547605d40d5874b5 +Block 0018 [ 99]: bcf2921c10084e3b +Block 0018 [100]: 2ae0acda27100af9 +Block 0018 [101]: b838891a6385a123 +Block 0018 [102]: d4ceec21e572c544 +Block 0018 [103]: 02d799fd3a0d43a8 +Block 0018 [104]: 874c74cf56e66a28 +Block 0018 [105]: 455ec04f0c6f644b +Block 0018 [106]: 794d622cefeb3142 +Block 0018 [107]: 397cc3fb58f243fd +Block 0018 [108]: bfce9c65d6e547dc +Block 0018 [109]: 3fc535b6747dda96 +Block 0018 [110]: b232041172c61955 +Block 0018 [111]: d0866b7afc724904 +Block 0018 [112]: 1bd0e861a1832f90 +Block 0018 [113]: a5b46e83ec65fccf +Block 0018 [114]: 14bf4cfaf58434ac +Block 0018 [115]: c6722ca70b88aec5 +Block 0018 [116]: 43f4f75ed575746b +Block 0018 [117]: 318dee187f44b2ef +Block 0018 [118]: 7718e9e01d747b67 +Block 0018 [119]: eabe624668bfdf10 +Block 0018 [120]: 86b91fdc534cd49b +Block 0018 [121]: de0d5d5ad7e1bd04 +Block 0018 [122]: 470fdb1caec64506 +Block 0018 [123]: 5ad95fcaef3c3781 +Block 0018 [124]: f3da0001aa2f20a5 +Block 0018 [125]: ea4df80b5c7b274f +Block 0018 [126]: 5e422b2276b364e3 +Block 0018 [127]: 2daba476dc742f98 +Block 0019 [ 0]: 5292bf204d008798 +Block 0019 [ 1]: 7ebaeba170dc400b +Block 0019 [ 2]: c8878105fd55f1b2 +Block 0019 [ 3]: a245621c86d0a8e3 +Block 0019 [ 4]: 636ca9abda535b34 +Block 0019 [ 5]: fd6e38f15d0d651f +Block 0019 [ 6]: 8b9def75cef5e50f +Block 0019 [ 7]: 0b23ac908432ea37 +Block 0019 [ 8]: b039c7c46ac081e9 +Block 0019 [ 9]: 3ca943597d747790 +Block 0019 [ 10]: 9e8849ca90b39e95 +Block 0019 [ 11]: e45654ea0a38a7f9 +Block 0019 [ 12]: 9f4c310ed74d5d09 +Block 0019 [ 13]: e29417a8eb9b0064 +Block 0019 [ 14]: 7f6b0ee1b68de286 +Block 0019 [ 15]: f871922b573a0e94 +Block 0019 [ 16]: 4f40a6cf457ef1fd +Block 0019 [ 17]: a7ced1866505a14b +Block 0019 [ 18]: 1c266357ac946c5c +Block 0019 [ 19]: 52fc52cc033b0ea3 +Block 0019 [ 20]: ebf88c70993e3715 +Block 0019 [ 21]: f19fb0dc686bd492 +Block 0019 [ 22]: 1da1a221153ee7f9 +Block 0019 [ 23]: 4ac6a02ae545485f +Block 0019 [ 24]: 5eed7871fbd8b74d +Block 0019 [ 25]: 930228abdbbcec23 +Block 0019 [ 26]: 856ae86b5eaa828b +Block 0019 [ 27]: 034fe05023dd4d48 +Block 0019 [ 28]: c26d7f4c8b06ef17 +Block 0019 [ 29]: c9de1f992e2271b0 +Block 0019 [ 30]: 875d1a7e35ab78ca +Block 0019 [ 31]: 47ae3b6799be5a90 +Block 0019 [ 32]: acd7d3791262cf96 +Block 0019 [ 33]: 656cb43289c97db8 +Block 0019 [ 34]: 8066231473820839 +Block 0019 [ 35]: 230d998ade75e245 +Block 0019 [ 36]: ee23d7552097aaa4 +Block 0019 [ 37]: c545ef4eb6d12dff +Block 0019 [ 38]: ae2e4952f240f07f +Block 0019 [ 39]: 922ad44ed38552c0 +Block 0019 [ 40]: b2fbff55158c04c2 +Block 0019 [ 41]: 3fe9a10ea5aef870 +Block 0019 [ 42]: 6b8cd254eefe733b +Block 0019 [ 43]: 7c99c409d5bdd715 +Block 0019 [ 44]: da8dacd2c0ed0281 +Block 0019 [ 45]: dcea85cffde78e15 +Block 0019 [ 46]: 0e709509407f3866 +Block 0019 [ 47]: 9331b3925ac0914c +Block 0019 [ 48]: 19d3d18adc5dbc63 +Block 0019 [ 49]: 5dfd33332c89d190 +Block 0019 [ 50]: c61a6a352b9227bc +Block 0019 [ 51]: c4e5c7b0a3785d94 +Block 0019 [ 52]: 6f74bae4e2174723 +Block 0019 [ 53]: 63dbe046cc100f82 +Block 0019 [ 54]: d882d08c1b6cc810 +Block 0019 [ 55]: 050374613b45e9af +Block 0019 [ 56]: 5cd129e5e2430a26 +Block 0019 [ 57]: 08ff1a2d09e10475 +Block 0019 [ 58]: 4ab63c621e814a29 +Block 0019 [ 59]: 717be236db19de8e +Block 0019 [ 60]: b69702badc215404 +Block 0019 [ 61]: 0f938810792db042 +Block 0019 [ 62]: 9cd896b3683874e4 +Block 0019 [ 63]: e5a2b94e27ae70d8 +Block 0019 [ 64]: 99a106c84e5a5eb2 +Block 0019 [ 65]: 363341869679ec8d +Block 0019 [ 66]: ee1153712c35345e +Block 0019 [ 67]: a7c8a5d924760fe9 +Block 0019 [ 68]: 32beac8da9d2fe0f +Block 0019 [ 69]: c0b40564b99ac08c +Block 0019 [ 70]: 21c6f279089d8d67 +Block 0019 [ 71]: c17eb4e9657c7d38 +Block 0019 [ 72]: 82119d42ee7383ee +Block 0019 [ 73]: 839a5ba4ad33e320 +Block 0019 [ 74]: dca3fbd6b621523b +Block 0019 [ 75]: 831be6174d1b7bfe +Block 0019 [ 76]: 3f9e8bfe785fef8b +Block 0019 [ 77]: 6ad962a245dc4541 +Block 0019 [ 78]: 3bcab76901720eeb +Block 0019 [ 79]: 220a3352d04b525b +Block 0019 [ 80]: 179aecb646a78ad3 +Block 0019 [ 81]: 0e37e2692c841cac +Block 0019 [ 82]: 5b9f397a9fc9914a +Block 0019 [ 83]: f6a7673df3a257f5 +Block 0019 [ 84]: 615685fffa2fe235 +Block 0019 [ 85]: 5e237db301dba24c +Block 0019 [ 86]: 81535ef20914d77f +Block 0019 [ 87]: e12cdcfe47093097 +Block 0019 [ 88]: 48c4b926c428a68c +Block 0019 [ 89]: fd308f9af27493ad +Block 0019 [ 90]: 2cd8f4bf32095907 +Block 0019 [ 91]: 77e525fe7a8e416d +Block 0019 [ 92]: 132e99f6e13c81da +Block 0019 [ 93]: 3f4b9f866fb660a4 +Block 0019 [ 94]: b0e935906dac73db +Block 0019 [ 95]: d7f22b090e9905e7 +Block 0019 [ 96]: cb11d90136f020f9 +Block 0019 [ 97]: c96be13880b6cd43 +Block 0019 [ 98]: 1712c855b6a0e9a7 +Block 0019 [ 99]: 06c2322f35f2c656 +Block 0019 [100]: 3959da36a56e8319 +Block 0019 [101]: 00395e9c332612d6 +Block 0019 [102]: 6ae26df19284f3b2 +Block 0019 [103]: 1e2691a6e0d129df +Block 0019 [104]: fc73f98a93270339 +Block 0019 [105]: 6cd684812beff818 +Block 0019 [106]: 7f6afcc089780856 +Block 0019 [107]: 41ba7228f41b01d8 +Block 0019 [108]: 8e2fcf2ea124d9c9 +Block 0019 [109]: ebc64f65ee2aee4f +Block 0019 [110]: 43369a8e316a948e +Block 0019 [111]: b3ff2df0c7f10202 +Block 0019 [112]: 0d03d4023e9810a0 +Block 0019 [113]: 873b2ed4d5aa7898 +Block 0019 [114]: 9780b00f14da8b14 +Block 0019 [115]: cd9995c99e10bf5a +Block 0019 [116]: e158368cbe15dbf5 +Block 0019 [117]: c2340418c755b209 +Block 0019 [118]: 9d6a8efa736d3c45 +Block 0019 [119]: 589d9b1963690d48 +Block 0019 [120]: 88a35d4ed48dd42a +Block 0019 [121]: bd08c9ff2cb27f60 +Block 0019 [122]: 57055384720f2845 +Block 0019 [123]: a21217b4da0a9fc5 +Block 0019 [124]: 744fa33320036cbc +Block 0019 [125]: 4e57db9bfa06c2a3 +Block 0019 [126]: 490b17fdfbcb169e +Block 0019 [127]: 084a615be1a9e4d9 +Block 0020 [ 0]: 5d57ca47136f780e +Block 0020 [ 1]: f7e6a489158047e0 +Block 0020 [ 2]: 43afd73ca20617e2 +Block 0020 [ 3]: f330892dcc219aec +Block 0020 [ 4]: 69ddcc169837eaca +Block 0020 [ 5]: 76276b1b9f66128a +Block 0020 [ 6]: 4a3c15e11e71cd34 +Block 0020 [ 7]: d136f0129e70d740 +Block 0020 [ 8]: bed3273b28f942a7 +Block 0020 [ 9]: 5666679b22a0e825 +Block 0020 [ 10]: 3cc5122dc80159bc +Block 0020 [ 11]: 1f9762b33b33aba5 +Block 0020 [ 12]: 62fdd7c730a65160 +Block 0020 [ 13]: c482f5bf34979c2f +Block 0020 [ 14]: 4f2349b0ecfeefb8 +Block 0020 [ 15]: 155b8ad94c89cbb6 +Block 0020 [ 16]: 1b9f6770ca2aedf4 +Block 0020 [ 17]: 192416f1c8c95ac1 +Block 0020 [ 18]: e9dd5be037cb364a +Block 0020 [ 19]: 0f090a08cd9aba13 +Block 0020 [ 20]: 31e9b657221639b3 +Block 0020 [ 21]: 87b363aa553befd0 +Block 0020 [ 22]: 4477b840ca7905ba +Block 0020 [ 23]: 05cc227f7f6d9b75 +Block 0020 [ 24]: 3a8c7320409d5d26 +Block 0020 [ 25]: 31ad20d85c763a6c +Block 0020 [ 26]: 4e73aa89e8725561 +Block 0020 [ 27]: 9a7b37f6c4ce09d5 +Block 0020 [ 28]: 98d1d425577e1801 +Block 0020 [ 29]: 89f69be4232297c6 +Block 0020 [ 30]: 792d3563c3bf9e98 +Block 0020 [ 31]: 2512ad23f53284c7 +Block 0020 [ 32]: c2981553ed8736f2 +Block 0020 [ 33]: f0e20cbfb5609433 +Block 0020 [ 34]: f8d948e6e651fa86 +Block 0020 [ 35]: 3149268c4aac6990 +Block 0020 [ 36]: 2658045704d43b96 +Block 0020 [ 37]: f2a949e2ac83b68b +Block 0020 [ 38]: 8f58f6bdd819b9c6 +Block 0020 [ 39]: 48d427bf2c2c0400 +Block 0020 [ 40]: dcf52ff4b5056b04 +Block 0020 [ 41]: 9360854e262cbd13 +Block 0020 [ 42]: 46228619dec396e7 +Block 0020 [ 43]: a5c0c9024eb34b51 +Block 0020 [ 44]: 80a4ff3799ffaa55 +Block 0020 [ 45]: ec44c47fe6760771 +Block 0020 [ 46]: 1c10b973bc0b4e65 +Block 0020 [ 47]: a10cfd79a24c6966 +Block 0020 [ 48]: a5d1d59a2470be40 +Block 0020 [ 49]: f32d79247a4b459b +Block 0020 [ 50]: ae7733eb4ece186d +Block 0020 [ 51]: 7fdf2ba9666fff99 +Block 0020 [ 52]: 5324ac97a90fda85 +Block 0020 [ 53]: c93ce65f7f8d362b +Block 0020 [ 54]: 1a8c3a78f89292f8 +Block 0020 [ 55]: 3b14b0cf8f636730 +Block 0020 [ 56]: e58c0d49afbbd7f6 +Block 0020 [ 57]: 0c7b4cf0cfeebbb7 +Block 0020 [ 58]: 2b2e13b6943f1a39 +Block 0020 [ 59]: a0b73361ed004dcf +Block 0020 [ 60]: 93eba2ea0ae14829 +Block 0020 [ 61]: 4b2f44fe71cf5fc3 +Block 0020 [ 62]: 3ed8260985628995 +Block 0020 [ 63]: ccc751ccb582a8c6 +Block 0020 [ 64]: addb305fb77183b9 +Block 0020 [ 65]: 6ae008af5ca19b9a +Block 0020 [ 66]: 6a2b6da53d8c5e9b +Block 0020 [ 67]: 684a936687acf847 +Block 0020 [ 68]: 95ddec6659b9826f +Block 0020 [ 69]: 568b6ada0abf36bb +Block 0020 [ 70]: 7dab587621d25117 +Block 0020 [ 71]: 719c14b211475577 +Block 0020 [ 72]: 6d6cfb1a289476e3 +Block 0020 [ 73]: 11bb65adb073bf84 +Block 0020 [ 74]: e8564c9ab3287123 +Block 0020 [ 75]: 055c00f96aba87ee +Block 0020 [ 76]: 2ce8391c91ff17ef +Block 0020 [ 77]: 712b4f15acccf00f +Block 0020 [ 78]: a557001a2a542828 +Block 0020 [ 79]: 8aa5fcd18d9be6c4 +Block 0020 [ 80]: a064fa473db20fe3 +Block 0020 [ 81]: 1ab5e78858bf2061 +Block 0020 [ 82]: c8408a0601756a2a +Block 0020 [ 83]: 8ebd7b0fa610e267 +Block 0020 [ 84]: 4737a8848fa8756e +Block 0020 [ 85]: 084383af4e6a6a33 +Block 0020 [ 86]: ee2aa19d3d4f1e0c +Block 0020 [ 87]: a425205d5b3c0e44 +Block 0020 [ 88]: a9b7d132ab432afe +Block 0020 [ 89]: cb3d70781cde1f01 +Block 0020 [ 90]: 13b46a9cc6036627 +Block 0020 [ 91]: f3cb9cf1013a522b +Block 0020 [ 92]: f04b6ae327081e12 +Block 0020 [ 93]: a00b16fc80f1fa79 +Block 0020 [ 94]: b7291598fc44947d +Block 0020 [ 95]: 5b0def4014962dfe +Block 0020 [ 96]: 889b67aae30ca681 +Block 0020 [ 97]: 38b9629ce8c21a58 +Block 0020 [ 98]: e31fa547764f1192 +Block 0020 [ 99]: 6c9fd99cb27b91eb +Block 0020 [100]: 729a48be4128351d +Block 0020 [101]: c9ef08e71850a66a +Block 0020 [102]: 222bb5d86b7f734a +Block 0020 [103]: 8d73e0e8f544544e +Block 0020 [104]: b90d08c81440cf69 +Block 0020 [105]: dd9fcc9d6e1c2a7c +Block 0020 [106]: 88360967c8ba6163 +Block 0020 [107]: 084ee06004657e4b +Block 0020 [108]: 4808ed26e383a9fd +Block 0020 [109]: 99216d7d19ebd14f +Block 0020 [110]: 86804f939794a1a0 +Block 0020 [111]: 79808541b501f7e1 +Block 0020 [112]: 87d9ced7805ba881 +Block 0020 [113]: 3cecd150f641b6ae +Block 0020 [114]: 48818425086f97d0 +Block 0020 [115]: 259ed59ef6f4eab9 +Block 0020 [116]: eeefaa0d117276db +Block 0020 [117]: b345010d4cff1602 +Block 0020 [118]: b2ebc77b9784db1a +Block 0020 [119]: b0fccb9ee2146d44 +Block 0020 [120]: 12efff78f820153e +Block 0020 [121]: f055073327d18f03 +Block 0020 [122]: ce7854ab4ef4adf0 +Block 0020 [123]: 06d17b027037f0fd +Block 0020 [124]: 92ce711adc04a9a1 +Block 0020 [125]: 66478a9d6396bc0d +Block 0020 [126]: ff1eb65c6ce7ea23 +Block 0020 [127]: 87e96088e607b745 +Block 0021 [ 0]: 976e9f659febc2e8 +Block 0021 [ 1]: a88f1274f70e5647 +Block 0021 [ 2]: 2d1030809e10bdbf +Block 0021 [ 3]: 39fa3a0e6eeb51d9 +Block 0021 [ 4]: a3dccb41bf561eba +Block 0021 [ 5]: 39174042994d9c86 +Block 0021 [ 6]: e653eb04aeba31fd +Block 0021 [ 7]: 1b4bf239f4fc1ae8 +Block 0021 [ 8]: b8ee57434441c67e +Block 0021 [ 9]: 3368705f1cf61836 +Block 0021 [ 10]: 5265f3bee7e8a64d +Block 0021 [ 11]: aee6bdc6c7453a50 +Block 0021 [ 12]: 3baa3a53a511d6d7 +Block 0021 [ 13]: b052f430ef905497 +Block 0021 [ 14]: 15655072b91558fd +Block 0021 [ 15]: d8f5df7a3e047ad8 +Block 0021 [ 16]: 7dc6a612217c1121 +Block 0021 [ 17]: 566076b6a23f9387 +Block 0021 [ 18]: ba4ed88d763b7640 +Block 0021 [ 19]: 9ddcc34d61bda242 +Block 0021 [ 20]: bca43b61b90ef9f0 +Block 0021 [ 21]: 44f372e24cab6c1a +Block 0021 [ 22]: 4a28ccd569072749 +Block 0021 [ 23]: 3bba0847ae0b83ed +Block 0021 [ 24]: 49494038474e4275 +Block 0021 [ 25]: 598fe8b9223c0f33 +Block 0021 [ 26]: ab22b6a0c4f78ab0 +Block 0021 [ 27]: 210db7846a68d8ae +Block 0021 [ 28]: 43282ca03322625e +Block 0021 [ 29]: b3ad67fe8abe1f46 +Block 0021 [ 30]: 989391df47fa1387 +Block 0021 [ 31]: e2cca1cde49182f6 +Block 0021 [ 32]: 2bb23a36ea2afdd7 +Block 0021 [ 33]: 5a7f289f9251fed6 +Block 0021 [ 34]: 5a544243ac7744d7 +Block 0021 [ 35]: cc72df263c6f51ec +Block 0021 [ 36]: c43f009bb3d5c4ff +Block 0021 [ 37]: be57289215b40eda +Block 0021 [ 38]: 6199f895c87b2dcc +Block 0021 [ 39]: 7ae8e2df71099f02 +Block 0021 [ 40]: 94d1ab2ecb1e962d +Block 0021 [ 41]: ac38b599cf400fe3 +Block 0021 [ 42]: e2d04241732ef8a2 +Block 0021 [ 43]: 311f2618f88be20f +Block 0021 [ 44]: bc624ead2ff7931a +Block 0021 [ 45]: 53dce757b2c8a471 +Block 0021 [ 46]: b45e24e9711e96ae +Block 0021 [ 47]: 4449f0d3ee397b7b +Block 0021 [ 48]: 701696b5549d2d6e +Block 0021 [ 49]: abd841c53153facb +Block 0021 [ 50]: 3dc2199505f24e66 +Block 0021 [ 51]: 9774d5a5bfd689f5 +Block 0021 [ 52]: 4d546794b4c18718 +Block 0021 [ 53]: 8dba23eaf3c9d3ae +Block 0021 [ 54]: cb1376d0c0ec06ce +Block 0021 [ 55]: 73cebc8b6066075d +Block 0021 [ 56]: d80e0ddbcd207d04 +Block 0021 [ 57]: 511ee60f7ab4b82d +Block 0021 [ 58]: 55f2ba5663fda61a +Block 0021 [ 59]: 4a1bf598eb874381 +Block 0021 [ 60]: 6d2eea6b4e0e2791 +Block 0021 [ 61]: 91a8d6a65942c0fd +Block 0021 [ 62]: f36cb50cadc4c59a +Block 0021 [ 63]: b51c59122c247d33 +Block 0021 [ 64]: d73e4c0f4ba0b24e +Block 0021 [ 65]: 9d062a74eddb078c +Block 0021 [ 66]: 76e462d56034ba74 +Block 0021 [ 67]: 7f981ba9589c3c86 +Block 0021 [ 68]: f87f9bbf54d53d09 +Block 0021 [ 69]: b58a591bb6d366eb +Block 0021 [ 70]: a5d206cbc7965fc4 +Block 0021 [ 71]: 0737b44abb7b8eb3 +Block 0021 [ 72]: 4eec2ff63f5346a9 +Block 0021 [ 73]: e7aad25813a2551a +Block 0021 [ 74]: a9db0a77fc3a3627 +Block 0021 [ 75]: dd5c26ab99927254 +Block 0021 [ 76]: a7351601b2018b23 +Block 0021 [ 77]: 56e87f62e4bd36a0 +Block 0021 [ 78]: 7579b8aabe7dfa32 +Block 0021 [ 79]: 34fe2f3bc8e03b0c +Block 0021 [ 80]: b6b3ad970eb248b1 +Block 0021 [ 81]: 121d7272bd7ebc93 +Block 0021 [ 82]: c80eb86fb6c50b6b +Block 0021 [ 83]: 8bd485d99bc66730 +Block 0021 [ 84]: cf903a06d42efa64 +Block 0021 [ 85]: a0bf1ea7429d9b66 +Block 0021 [ 86]: 100e7668252d8234 +Block 0021 [ 87]: 5611ac51e0c4aec0 +Block 0021 [ 88]: e0d47dbb54bd4fc2 +Block 0021 [ 89]: 762c3fc263658f83 +Block 0021 [ 90]: 0977a8ac842da06d +Block 0021 [ 91]: ffece2e0fcf82469 +Block 0021 [ 92]: 251d9000edf3560a +Block 0021 [ 93]: f88f20544d4602ab +Block 0021 [ 94]: a32ffc01b4f0fe3c +Block 0021 [ 95]: a24a0e2d9ff22a4b +Block 0021 [ 96]: 69d9855d6212b44a +Block 0021 [ 97]: 05fad3385f71b8be +Block 0021 [ 98]: 3b915fb26c778939 +Block 0021 [ 99]: 81485ec2990b5f1f +Block 0021 [100]: df6bde77b4b90dad +Block 0021 [101]: f54543616da45238 +Block 0021 [102]: 08f27ab408ba9e98 +Block 0021 [103]: 382039b1ac11c85b +Block 0021 [104]: 304799345fb375d8 +Block 0021 [105]: 9aa9d07bc2c653cf +Block 0021 [106]: c01eb96471beb8d2 +Block 0021 [107]: bf028c4a42a5c5b7 +Block 0021 [108]: 6bc2feea37184034 +Block 0021 [109]: 93ae626810c10f9c +Block 0021 [110]: e2185c6ae98e1a60 +Block 0021 [111]: a365bf7029eabc63 +Block 0021 [112]: da1ba6ddd489d60e +Block 0021 [113]: d7114e5abe779e82 +Block 0021 [114]: d62e97914253cc02 +Block 0021 [115]: 2d990cb146dc6ffb +Block 0021 [116]: 9f8dd338cb3d9169 +Block 0021 [117]: 00417fb43b21719f +Block 0021 [118]: c547a1fa25dff537 +Block 0021 [119]: 6649468066baba07 +Block 0021 [120]: aeb4eae2da0f4711 +Block 0021 [121]: b9619918b2b99ded +Block 0021 [122]: 7b3aa37c52219510 +Block 0021 [123]: c67f4ab94d67fdfe +Block 0021 [124]: 8c4d9ae73c0384d7 +Block 0021 [125]: 30fcd267567ade99 +Block 0021 [126]: 8eb4c44af8925b02 +Block 0021 [127]: 91532368b2dd5d98 +Block 0022 [ 0]: 7a7eb778ba137642 +Block 0022 [ 1]: 75fd20cc726c9447 +Block 0022 [ 2]: 377a009ac96c4e5b +Block 0022 [ 3]: 5137193344b6fa8e +Block 0022 [ 4]: fd3c6f316b4b2203 +Block 0022 [ 5]: c8c10e87059b7fcb +Block 0022 [ 6]: c3e984b4f4c19e0f +Block 0022 [ 7]: c1df342507a4239d +Block 0022 [ 8]: f3d84364c81068b5 +Block 0022 [ 9]: a84f4a8e0875f61b +Block 0022 [ 10]: f074dbaf73f5a520 +Block 0022 [ 11]: c917181b46f9e191 +Block 0022 [ 12]: 64da0eff5b833f16 +Block 0022 [ 13]: 8c3a814b666d1a5b +Block 0022 [ 14]: bb5ade7b7db56500 +Block 0022 [ 15]: 0094e518971a127b +Block 0022 [ 16]: 0fad4d30b3cc902d +Block 0022 [ 17]: 94acb7d50ba979f7 +Block 0022 [ 18]: cb1c8994dbbaec67 +Block 0022 [ 19]: db593985ab96d088 +Block 0022 [ 20]: 016cf146031e0455 +Block 0022 [ 21]: dbe4263eae7443a7 +Block 0022 [ 22]: 38b1ed9c3a1e8a0e +Block 0022 [ 23]: 30ccb33155dc79a6 +Block 0022 [ 24]: ab3f38b7fbe9c6a7 +Block 0022 [ 25]: b6ab6339e3b5cd2f +Block 0022 [ 26]: 105fb25c2d53aad2 +Block 0022 [ 27]: 9100d9974a0ebc84 +Block 0022 [ 28]: 05557560d577787d +Block 0022 [ 29]: 0be7aa32a729523c +Block 0022 [ 30]: 987ebbccd2e595ad +Block 0022 [ 31]: d1a61b40e35b65dd +Block 0022 [ 32]: 87edbd02dbb27253 +Block 0022 [ 33]: fd3917fe08ded9e1 +Block 0022 [ 34]: 5154aca7a67f09e6 +Block 0022 [ 35]: 0ac7077b17b0ce6b +Block 0022 [ 36]: 022506e3e68af855 +Block 0022 [ 37]: 477b231cb63085b7 +Block 0022 [ 38]: facbc07678f43b4e +Block 0022 [ 39]: f793ea3f705dbd7e +Block 0022 [ 40]: c9fdc7172747c3f7 +Block 0022 [ 41]: 69b7d2c9df87ef7e +Block 0022 [ 42]: ba896967adafe7ca +Block 0022 [ 43]: 15865ebadfe18b9d +Block 0022 [ 44]: 8a374b6123ccda48 +Block 0022 [ 45]: 1ccfc954e24f0885 +Block 0022 [ 46]: 6eaa9454516dc0c4 +Block 0022 [ 47]: a47cecb2678bca2c +Block 0022 [ 48]: c9d512ee9869639b +Block 0022 [ 49]: f2be8f067e53a2f7 +Block 0022 [ 50]: d12367af680b6f97 +Block 0022 [ 51]: 5b08d27744c63ee7 +Block 0022 [ 52]: 68240e233e3f5df7 +Block 0022 [ 53]: dabb61a4b4489e8a +Block 0022 [ 54]: 58daa56e290df240 +Block 0022 [ 55]: b7668b7b4334ad4b +Block 0022 [ 56]: 9b81324b9195a489 +Block 0022 [ 57]: 5c1b0f7850b4fdba +Block 0022 [ 58]: a19a882d2259b483 +Block 0022 [ 59]: 000144eaa2490219 +Block 0022 [ 60]: b86ade826f9ab064 +Block 0022 [ 61]: 2b30e0be2742140c +Block 0022 [ 62]: 5798c3cfcae5c8c5 +Block 0022 [ 63]: 318050a2867cc321 +Block 0022 [ 64]: 496efff959586146 +Block 0022 [ 65]: 042e2c16b9ce0ba3 +Block 0022 [ 66]: cbf37aba11d55dc2 +Block 0022 [ 67]: fa547c1aee0079cd +Block 0022 [ 68]: 81b1015f9bc428d3 +Block 0022 [ 69]: 5ee624ba1cec9ff4 +Block 0022 [ 70]: cc06875eecff4bfc +Block 0022 [ 71]: 70c5de30f89553ea +Block 0022 [ 72]: 82d6a1825d3e92d7 +Block 0022 [ 73]: 08ae275dc58392cf +Block 0022 [ 74]: ef27eec48a368912 +Block 0022 [ 75]: 413f245be1a350a1 +Block 0022 [ 76]: ac6ed1397cf170b1 +Block 0022 [ 77]: 88f42a66dbffe788 +Block 0022 [ 78]: 3e0dda4b5a02b8fc +Block 0022 [ 79]: 8f8eb68cdb179ae0 +Block 0022 [ 80]: fd018b0bac7799c5 +Block 0022 [ 81]: eba408d26249d044 +Block 0022 [ 82]: d75ac46fc02f7275 +Block 0022 [ 83]: c70a15596671f5d1 +Block 0022 [ 84]: e261a9551e07abc1 +Block 0022 [ 85]: 794892ee911a29de +Block 0022 [ 86]: 95b5b9a11d146624 +Block 0022 [ 87]: 86c21ad27d1543a4 +Block 0022 [ 88]: 1c277baeeff0ce9d +Block 0022 [ 89]: 7bd90b2cd713e638 +Block 0022 [ 90]: 0b2a164ea19e2b78 +Block 0022 [ 91]: 12fb9127ce3b8607 +Block 0022 [ 92]: 6361a6ec49a7b80d +Block 0022 [ 93]: 7cca1af1dce8ce7d +Block 0022 [ 94]: 6800dc2ac217bec3 +Block 0022 [ 95]: ec16cbb822442386 +Block 0022 [ 96]: b061fdcdc50e1e3e +Block 0022 [ 97]: dbd45a3166c80fa1 +Block 0022 [ 98]: 406e39115c27c83c +Block 0022 [ 99]: 4e67e960cc388f46 +Block 0022 [100]: 2a5706bdd0c69408 +Block 0022 [101]: 74720d5a7862a031 +Block 0022 [102]: 99eaa516e72e07a9 +Block 0022 [103]: 0652ebc6a9556b32 +Block 0022 [104]: 22e1c4807ba2d0d8 +Block 0022 [105]: b84684c4fe3cb95c +Block 0022 [106]: c5ae3cc6ff36e4bc +Block 0022 [107]: 7c6356397667c985 +Block 0022 [108]: 85a8a88cdb7088b2 +Block 0022 [109]: baaa4a40b2fe327f +Block 0022 [110]: bb549f69550ac7fe +Block 0022 [111]: 700ce2f1e6a53745 +Block 0022 [112]: fbd53afa58bdb58b +Block 0022 [113]: 59b964fe20508807 +Block 0022 [114]: e57b1917deb499be +Block 0022 [115]: 1ab30b4e53cdba30 +Block 0022 [116]: e97d383251335d8e +Block 0022 [117]: d58b02e4e16d9256 +Block 0022 [118]: 41814117f9badbdb +Block 0022 [119]: f47ac20cd426fc8b +Block 0022 [120]: b550ecef8d0d1bb6 +Block 0022 [121]: 816ae3c96a1e867e +Block 0022 [122]: 1a88cc4c5f601a97 +Block 0022 [123]: fe78b73e3cb347c0 +Block 0022 [124]: ab7c6f0d0fc23560 +Block 0022 [125]: df85ca82509c97aa +Block 0022 [126]: 040cd972f4f4cde0 +Block 0022 [127]: 8cc1f28d8b7a424c +Block 0023 [ 0]: b66bc13398076979 +Block 0023 [ 1]: 43b1f58fdbe5c6d7 +Block 0023 [ 2]: 78cfeb884aa0dcf8 +Block 0023 [ 3]: f6ad7bdbce0fc1f1 +Block 0023 [ 4]: 97bd0555962ab048 +Block 0023 [ 5]: dfeb2974250f3fba +Block 0023 [ 6]: 841d9de38b24c45d +Block 0023 [ 7]: f7ba62597d6b981c +Block 0023 [ 8]: 642acde47945bf0a +Block 0023 [ 9]: ba5998732b6e3a32 +Block 0023 [ 10]: fc5f4f5fa312aabb +Block 0023 [ 11]: 2f890fd5b28f6575 +Block 0023 [ 12]: a019341906f2c75a +Block 0023 [ 13]: 17bdcab50a8b8cad +Block 0023 [ 14]: 4bbd3902ab6ca789 +Block 0023 [ 15]: bd5b5bf197858bd3 +Block 0023 [ 16]: 76b97396716afeac +Block 0023 [ 17]: b5c6b2607a110210 +Block 0023 [ 18]: 3676052713568a3c +Block 0023 [ 19]: 1b243d70337d6a27 +Block 0023 [ 20]: 14a68d15138c679e +Block 0023 [ 21]: 2e5dec69515a9a11 +Block 0023 [ 22]: 89fad0d2ff2b3b0c +Block 0023 [ 23]: 65ffa10e16de42d4 +Block 0023 [ 24]: 2fe475a4468285bd +Block 0023 [ 25]: 598befca0e6acaa1 +Block 0023 [ 26]: bef9208bcce61210 +Block 0023 [ 27]: 497d41b68bf1eb06 +Block 0023 [ 28]: 8d8d7c7e8928d427 +Block 0023 [ 29]: 72dc43efe0c530cf +Block 0023 [ 30]: 50c87715dca1c97f +Block 0023 [ 31]: 97a31b1b001ff7ef +Block 0023 [ 32]: 2a2e6ab678997b48 +Block 0023 [ 33]: 3bcba511e04175e0 +Block 0023 [ 34]: c6ad3b6fd73abd88 +Block 0023 [ 35]: 49c135aede7792a2 +Block 0023 [ 36]: ab10861dfeed0a2a +Block 0023 [ 37]: b350fce5f7e9bfea +Block 0023 [ 38]: d45a436bfb246a48 +Block 0023 [ 39]: 29892cb62a433349 +Block 0023 [ 40]: 603e5902b12e7886 +Block 0023 [ 41]: 7b4ef649559126de +Block 0023 [ 42]: 2b7b48c2bbccc978 +Block 0023 [ 43]: 0f8035fc0a8f24e2 +Block 0023 [ 44]: f722f06c3b244851 +Block 0023 [ 45]: dab2722606c3e666 +Block 0023 [ 46]: 2c55f308a67bbe59 +Block 0023 [ 47]: 269043b9686499a5 +Block 0023 [ 48]: 109deb97c1757859 +Block 0023 [ 49]: cf3164ffce16fbfc +Block 0023 [ 50]: 7a221223e0354820 +Block 0023 [ 51]: 2ffbd3d62c1707fe +Block 0023 [ 52]: d0c6e6b39c3558af +Block 0023 [ 53]: e7fcc877262a87ee +Block 0023 [ 54]: eae055d6a0e7fdd3 +Block 0023 [ 55]: db620e9d037e13b6 +Block 0023 [ 56]: 469935d3b817996d +Block 0023 [ 57]: ee245d8a65759846 +Block 0023 [ 58]: b53d6d62749bba67 +Block 0023 [ 59]: dbf209dc213dfad3 +Block 0023 [ 60]: e36b204b799683ce +Block 0023 [ 61]: 1455b7fc3037401f +Block 0023 [ 62]: 42ce4ef72d07cd55 +Block 0023 [ 63]: 92eb30d2eb66f108 +Block 0023 [ 64]: 8fa86c51ef64302a +Block 0023 [ 65]: 2d0d0d36976fbc53 +Block 0023 [ 66]: 5fc6d2b9917bc624 +Block 0023 [ 67]: 889cf6888dd7bc8a +Block 0023 [ 68]: 992f099b98c3740c +Block 0023 [ 69]: 12fe92fe02ee099a +Block 0023 [ 70]: 23ce13d7948ddd64 +Block 0023 [ 71]: 33ee61ee295d4fa0 +Block 0023 [ 72]: 8283374ec0cce033 +Block 0023 [ 73]: fff2602247882991 +Block 0023 [ 74]: 4b1663575c159028 +Block 0023 [ 75]: bafdb75175f3f801 +Block 0023 [ 76]: 4896dc4bf1314297 +Block 0023 [ 77]: c194e7febcc3f109 +Block 0023 [ 78]: 58479af120c28438 +Block 0023 [ 79]: a4a0a51c58e36277 +Block 0023 [ 80]: 0b3bb203c682dc67 +Block 0023 [ 81]: 746cd2daa1e039dd +Block 0023 [ 82]: 778726fad45bc5c4 +Block 0023 [ 83]: 7032fd18f64ba5f7 +Block 0023 [ 84]: bfc6a54ff3c4b225 +Block 0023 [ 85]: 72b34d7cdd4ce5a0 +Block 0023 [ 86]: a98b6dcc105c6599 +Block 0023 [ 87]: f1e96f02fad3ed0b +Block 0023 [ 88]: 1939fc5e44020b06 +Block 0023 [ 89]: 448dfdd8798a4874 +Block 0023 [ 90]: 98a2c3a040beee9a +Block 0023 [ 91]: 6f2db254dd4b6380 +Block 0023 [ 92]: 08c4e1603c2e6090 +Block 0023 [ 93]: f827733c9a22a2ce +Block 0023 [ 94]: 3d1c8748079a56a3 +Block 0023 [ 95]: 7ae919efdd933131 +Block 0023 [ 96]: c727cf1cb2808cb3 +Block 0023 [ 97]: 7b6def6b630a169e +Block 0023 [ 98]: 6ef5ceefdf3d02bf +Block 0023 [ 99]: d181753664d13703 +Block 0023 [100]: 502f862c989e3fa7 +Block 0023 [101]: bb2f03f33d6ac3ae +Block 0023 [102]: 5c604b717948a33a +Block 0023 [103]: 630988dfb218abe5 +Block 0023 [104]: 5acb7fd208d802db +Block 0023 [105]: ac830527c5e999b1 +Block 0023 [106]: 516fd37d43ae2d1e +Block 0023 [107]: 594c0dc0159c63c6 +Block 0023 [108]: 836bc0c551eded8b +Block 0023 [109]: e0eddf7b8bf4760e +Block 0023 [110]: 47942839c8110b8f +Block 0023 [111]: dcb4aca02099f907 +Block 0023 [112]: ac918e1eb8d52a65 +Block 0023 [113]: 5146539f9438d2a6 +Block 0023 [114]: 922b0f0abfd46794 +Block 0023 [115]: 3fb0f166928220e4 +Block 0023 [116]: e2c9d29dbff352c8 +Block 0023 [117]: 3c949bb615b76a18 +Block 0023 [118]: 09881809f1e367b9 +Block 0023 [119]: d1fe339181b8b543 +Block 0023 [120]: b7fd1e77372bef3f +Block 0023 [121]: 03773182b98b9987 +Block 0023 [122]: 9e840ac0cc8d09ac +Block 0023 [123]: 2f45e7e49be08dfc +Block 0023 [124]: 6fe8bca985b15f5a +Block 0023 [125]: 594084ec59454bea +Block 0023 [126]: 5d0c687a81fc544d +Block 0023 [127]: ee89421c46d7e558 +Block 0024 [ 0]: fa103a94eb8b6e74 +Block 0024 [ 1]: 71cf5ea7430c6609 +Block 0024 [ 2]: 379c6751fee7ae1b +Block 0024 [ 3]: 1f3f70b9027f6e7c +Block 0024 [ 4]: 75d20e9caa8fa717 +Block 0024 [ 5]: 115a61491b07b6cd +Block 0024 [ 6]: 7932288af80cd9bf +Block 0024 [ 7]: 6535b5d2d138f903 +Block 0024 [ 8]: 284d6527a81184ec +Block 0024 [ 9]: 4e70f9959222fcbb +Block 0024 [ 10]: dd2a61a55cdc78e3 +Block 0024 [ 11]: 8365ad7d50f8f015 +Block 0024 [ 12]: ca4972f76a1c0238 +Block 0024 [ 13]: a6c0011066aa15b7 +Block 0024 [ 14]: 9eab0e1c3130d275 +Block 0024 [ 15]: aa76c422fa6b9f84 +Block 0024 [ 16]: 555e0ac5402670f1 +Block 0024 [ 17]: 0e2aa8b082335a73 +Block 0024 [ 18]: fa0aa4e7358150ac +Block 0024 [ 19]: a8f0ae6455d0cc7f +Block 0024 [ 20]: 24f1ee88bf0fabf7 +Block 0024 [ 21]: 38563cb2b3e99490 +Block 0024 [ 22]: 161de2f55406017c +Block 0024 [ 23]: 21c2167cf87df602 +Block 0024 [ 24]: 1cdc9f40d0c13285 +Block 0024 [ 25]: 734995aaa9ae30a4 +Block 0024 [ 26]: 74683a21713b323b +Block 0024 [ 27]: 1b7a14dd0ae8c7b0 +Block 0024 [ 28]: e93ebff9df6564ef +Block 0024 [ 29]: abe93118fe044789 +Block 0024 [ 30]: 41466094f1898728 +Block 0024 [ 31]: ea57b47d087a417a +Block 0024 [ 32]: 4c53c6cbcfd96e90 +Block 0024 [ 33]: 3adea2be4c2966a6 +Block 0024 [ 34]: 1823455650de85f3 +Block 0024 [ 35]: daf707bd14f21c4a +Block 0024 [ 36]: 600ca4b48bcbcf53 +Block 0024 [ 37]: b1af608e1c1acfce +Block 0024 [ 38]: 145d6117eda40e01 +Block 0024 [ 39]: 43bb28822f88806f +Block 0024 [ 40]: 18fd37e5c8359f98 +Block 0024 [ 41]: 7d93b6fae58530cf +Block 0024 [ 42]: 5b4cd795c04b4bf1 +Block 0024 [ 43]: 38dad5655f02d404 +Block 0024 [ 44]: af5f968c1a391d62 +Block 0024 [ 45]: c37bd6023c551d3c +Block 0024 [ 46]: f0c7f2917fbf51fb +Block 0024 [ 47]: c53f7f33cb2cb648 +Block 0024 [ 48]: eb35a7abedeedf32 +Block 0024 [ 49]: dd7fa26ee17cd9fc +Block 0024 [ 50]: f5fcce040a9308fa +Block 0024 [ 51]: a4552572b9348b7f +Block 0024 [ 52]: 7909ee855e91d636 +Block 0024 [ 53]: 94f69b3368d2c478 +Block 0024 [ 54]: 2bf78c27935d13ff +Block 0024 [ 55]: 36b9ed5e69ae9474 +Block 0024 [ 56]: 48fcc8a46a27b79b +Block 0024 [ 57]: b856786098b8bacd +Block 0024 [ 58]: 20dc555f833c4cad +Block 0024 [ 59]: ffdd83a0f20b35d1 +Block 0024 [ 60]: 13cfff8112e27de4 +Block 0024 [ 61]: fc935988d81e3589 +Block 0024 [ 62]: f0eee3a476f22d0c +Block 0024 [ 63]: fdcd5ba6dd44cf97 +Block 0024 [ 64]: e68d31d6f9ef3f8e +Block 0024 [ 65]: 508f9ff8d087e9f4 +Block 0024 [ 66]: f429f0cba38d7842 +Block 0024 [ 67]: 182fb1cac2acc609 +Block 0024 [ 68]: ca9a4568171cde9c +Block 0024 [ 69]: d47e38dba8e537e5 +Block 0024 [ 70]: bd743a39cd59f99c +Block 0024 [ 71]: 495abdd1bd1fc0f2 +Block 0024 [ 72]: 148c5ba07f03a932 +Block 0024 [ 73]: 904c4a6a79abfd96 +Block 0024 [ 74]: deecdf43f7698331 +Block 0024 [ 75]: e4f67a19d7041b1e +Block 0024 [ 76]: 16b5848fd1b24266 +Block 0024 [ 77]: 7d7ac333b809d08f +Block 0024 [ 78]: 35eaa6ae35afd3f1 +Block 0024 [ 79]: 5fca382578f0aba3 +Block 0024 [ 80]: a2250744c418ad53 +Block 0024 [ 81]: fadbb88c2f52c4d9 +Block 0024 [ 82]: d5954ae05fec3428 +Block 0024 [ 83]: d47ef4350d39f8b3 +Block 0024 [ 84]: 63bd863fa81e3d55 +Block 0024 [ 85]: 5b210d8edd4bf343 +Block 0024 [ 86]: 86216a2d781e3aba +Block 0024 [ 87]: 925a75c19797e906 +Block 0024 [ 88]: 0f4879030aa235b8 +Block 0024 [ 89]: 850d9f1d51e61cba +Block 0024 [ 90]: d21cbab6dc6a90f1 +Block 0024 [ 91]: f0288cd7780dd66b +Block 0024 [ 92]: 987f7d6f5e033538 +Block 0024 [ 93]: 339f9acd310bc324 +Block 0024 [ 94]: 3b0c17458702ddd1 +Block 0024 [ 95]: 8e2de118a2df9e6e +Block 0024 [ 96]: 355f5b40341e6a6d +Block 0024 [ 97]: 97b426f12c8ecd0a +Block 0024 [ 98]: 5f6c0bd4f4ad4801 +Block 0024 [ 99]: d83ccd8e06c9b99e +Block 0024 [100]: 0092227b6d6aba22 +Block 0024 [101]: c0d9f079e67bee82 +Block 0024 [102]: ddc0cf6634af2d1c +Block 0024 [103]: 926f01523f7f52c2 +Block 0024 [104]: 55ff254c9117c227 +Block 0024 [105]: 462dcdc07963b99e +Block 0024 [106]: 1d34ff532c8e6510 +Block 0024 [107]: 0fbf72a6de9b69db +Block 0024 [108]: 5e93cb1d7c955aaf +Block 0024 [109]: fa36f19bb7c882a0 +Block 0024 [110]: 6c6f68d785518d9c +Block 0024 [111]: 632bc6c3ce8a5029 +Block 0024 [112]: 31945fc5020e6cf5 +Block 0024 [113]: 1c097aff84bbc77e +Block 0024 [114]: 8649e1bf2f457f18 +Block 0024 [115]: db4da4890b69094a +Block 0024 [116]: 8d542edade32524a +Block 0024 [117]: 4b79711c5f1d24ef +Block 0024 [118]: 18b44b2118a930eb +Block 0024 [119]: 1ad45f28f08be690 +Block 0024 [120]: 305613dbe3e7ae65 +Block 0024 [121]: cc10a15534f46c09 +Block 0024 [122]: 0cd495b83f19a0e9 +Block 0024 [123]: 70b84f26fd32b9c1 +Block 0024 [124]: 059b57532d61ef20 +Block 0024 [125]: 0db5ea4dac04395d +Block 0024 [126]: 84e4b96503cad6e0 +Block 0024 [127]: b22cece0e90325b5 +Block 0025 [ 0]: acadb47787e0e62d +Block 0025 [ 1]: 89db15bfeb35c67c +Block 0025 [ 2]: ed2997a2cd0015a0 +Block 0025 [ 3]: 194671063cd59b39 +Block 0025 [ 4]: bfb10fa28657c239 +Block 0025 [ 5]: a3c9f57c2e492a5a +Block 0025 [ 6]: d2ad1559dc2faa60 +Block 0025 [ 7]: 07b30a013f1f0e8c +Block 0025 [ 8]: 9e24764dd386d411 +Block 0025 [ 9]: 9eecaf179e51d7a6 +Block 0025 [ 10]: 1e3ccb14c450b9fb +Block 0025 [ 11]: a02fbd9c3fdd5cd8 +Block 0025 [ 12]: cae040fffa896b67 +Block 0025 [ 13]: c30348e230fe34e7 +Block 0025 [ 14]: 2bab58f77b702f0c +Block 0025 [ 15]: 458a8b1be3ba75cc +Block 0025 [ 16]: 05f630c5b0fcefce +Block 0025 [ 17]: bbae1e1b7b233558 +Block 0025 [ 18]: a4f3cdc1a95349d6 +Block 0025 [ 19]: 6d48d6fc63a2b369 +Block 0025 [ 20]: 5a58b2e088572a86 +Block 0025 [ 21]: 93021d253a6ca370 +Block 0025 [ 22]: c4669e03aba0e41c +Block 0025 [ 23]: 517c21f6f717beef +Block 0025 [ 24]: ad1ed0842b693990 +Block 0025 [ 25]: 932ea3b600e8fa63 +Block 0025 [ 26]: 94412081fe5d7db6 +Block 0025 [ 27]: 0c9587581ca0676a +Block 0025 [ 28]: f6b804ef2660bb1d +Block 0025 [ 29]: 342294f1c057f5ac +Block 0025 [ 30]: 6cf1635982de5d91 +Block 0025 [ 31]: 26b51a9b4901465c +Block 0025 [ 32]: 47560ef80d00e93d +Block 0025 [ 33]: 1719bdd4357a7f33 +Block 0025 [ 34]: 6478f7b2660c9b93 +Block 0025 [ 35]: bd5209fc80832ddc +Block 0025 [ 36]: f6592e8643238445 +Block 0025 [ 37]: 6f204a61f25e4b12 +Block 0025 [ 38]: 35694628a2ff8abd +Block 0025 [ 39]: fea9ac42aa3ceff1 +Block 0025 [ 40]: 36e352f162c706fd +Block 0025 [ 41]: 8b3a6b5850374e58 +Block 0025 [ 42]: 451d1544d57f7618 +Block 0025 [ 43]: 62e57656237e4b0e +Block 0025 [ 44]: d85e6c03cda3ff01 +Block 0025 [ 45]: e10874aa046d1dfb +Block 0025 [ 46]: b6a0b09d65515347 +Block 0025 [ 47]: 86cbd5f2cb16e8ab +Block 0025 [ 48]: a4a135272607deff +Block 0025 [ 49]: f445fd366d4ff7f2 +Block 0025 [ 50]: dd15c10173acb786 +Block 0025 [ 51]: ed741e791affc000 +Block 0025 [ 52]: 1515bd8fd6a6d28b +Block 0025 [ 53]: d28947fae8e86d43 +Block 0025 [ 54]: 5670b6f88fc2e9ed +Block 0025 [ 55]: bc1776fe1e2a05d2 +Block 0025 [ 56]: b508250a4219c65a +Block 0025 [ 57]: 45f02eda1a48ea03 +Block 0025 [ 58]: 607bcf65c28ccb29 +Block 0025 [ 59]: 111e9405cc0a9c58 +Block 0025 [ 60]: abb33ee022dda838 +Block 0025 [ 61]: b2240c4df99b2d4c +Block 0025 [ 62]: e8c4a136a3eadcf9 +Block 0025 [ 63]: d7ec593b9aef542b +Block 0025 [ 64]: 6f510d1b002ec558 +Block 0025 [ 65]: a01e2071f0eb2e94 +Block 0025 [ 66]: 26f75e619cfb5140 +Block 0025 [ 67]: f1145e65bfdd120f +Block 0025 [ 68]: 5f0620860cd88389 +Block 0025 [ 69]: 52ca8641c7ebc6ac +Block 0025 [ 70]: a3c97e5904a54b1b +Block 0025 [ 71]: 57b37085fd40a46b +Block 0025 [ 72]: 8674f89c371ad57e +Block 0025 [ 73]: d939b68dfa8da895 +Block 0025 [ 74]: a86e84431961783c +Block 0025 [ 75]: 4365b03c8a63133b +Block 0025 [ 76]: a1b358ddc73aaf52 +Block 0025 [ 77]: e697264359e17f7d +Block 0025 [ 78]: 54cd0039bb353cb6 +Block 0025 [ 79]: c607259b67e3ce6f +Block 0025 [ 80]: 4b329cc61bf3eb5a +Block 0025 [ 81]: 2492f1f9bc9a8b5d +Block 0025 [ 82]: 7d4f7b9a4969b0a3 +Block 0025 [ 83]: b30cd7f1eba80723 +Block 0025 [ 84]: 4603bdb7771b5a18 +Block 0025 [ 85]: 22370064c642e39b +Block 0025 [ 86]: 67933471b75cf941 +Block 0025 [ 87]: 707ebb2467979a75 +Block 0025 [ 88]: 71bdbb34998bb883 +Block 0025 [ 89]: 7ca6b42ea9fb26a5 +Block 0025 [ 90]: 350e49361365bf71 +Block 0025 [ 91]: 33349dc1ced81fde +Block 0025 [ 92]: a358ee5e36aaa4c4 +Block 0025 [ 93]: 937b184837c13da3 +Block 0025 [ 94]: bd7a02b7e7b72a62 +Block 0025 [ 95]: d0656b37c7dc422d +Block 0025 [ 96]: fe65fcbe8a0ad440 +Block 0025 [ 97]: 12ed44baba3ebacb +Block 0025 [ 98]: 9a680c17e49ed88a +Block 0025 [ 99]: b839bf85c6d3956b +Block 0025 [100]: 75e6674117502c08 +Block 0025 [101]: d6cb9459957d0e4e +Block 0025 [102]: 2f025b945f2f71b0 +Block 0025 [103]: b15b992ebf46ea26 +Block 0025 [104]: a58186fd4f22c433 +Block 0025 [105]: db2c21ec363674eb +Block 0025 [106]: f88fe356feaaf1ff +Block 0025 [107]: 570f6a4b4849e237 +Block 0025 [108]: 14035bc7f48df466 +Block 0025 [109]: ddb45cdddb15dbdb +Block 0025 [110]: f0572535fe525143 +Block 0025 [111]: 1ce3c0282ea29234 +Block 0025 [112]: d73347c8a9c6df0f +Block 0025 [113]: 721642c7734110aa +Block 0025 [114]: f5b43e20200e678d +Block 0025 [115]: 53652fc6c3886359 +Block 0025 [116]: caa4c48dc6da888d +Block 0025 [117]: 8dbe7af4765ba285 +Block 0025 [118]: e7c34d642ab8379c +Block 0025 [119]: 694eba65c6198cd1 +Block 0025 [120]: 951e0c3a0fc9dac2 +Block 0025 [121]: a9512f0ae3e175bf +Block 0025 [122]: f912282c1fe8850d +Block 0025 [123]: 88ba06847be5780f +Block 0025 [124]: 9cf3b21809173c93 +Block 0025 [125]: 87afd19c5e19a948 +Block 0025 [126]: 990f1184b82f0c59 +Block 0025 [127]: 94d8c54ba08642ab +Block 0026 [ 0]: 50b295833dfb05dd +Block 0026 [ 1]: 567661a5a807fec5 +Block 0026 [ 2]: 03e4375c0677aa6c +Block 0026 [ 3]: 8df882b653a8e546 +Block 0026 [ 4]: 06a1a2e5b4dd1497 +Block 0026 [ 5]: ebf09eb380f1d347 +Block 0026 [ 6]: 8d674162d4d58415 +Block 0026 [ 7]: 8e9640ef1effca77 +Block 0026 [ 8]: 5415ecd367187b2f +Block 0026 [ 9]: f4e96c6f043df6ff +Block 0026 [ 10]: 75f864f3d561d897 +Block 0026 [ 11]: 401d802ccd58cbc2 +Block 0026 [ 12]: a2211178619d5b24 +Block 0026 [ 13]: 39d5bee61d034875 +Block 0026 [ 14]: 52815128485ab93d +Block 0026 [ 15]: 0598d9f55a912669 +Block 0026 [ 16]: 941552dd580575c0 +Block 0026 [ 17]: 8f619028dcc6784f +Block 0026 [ 18]: a6ecb0eb7e1cfba9 +Block 0026 [ 19]: 5e2e43be46ff1cfd +Block 0026 [ 20]: 3c015d055ab6467c +Block 0026 [ 21]: 1340e475f5b92367 +Block 0026 [ 22]: 100575c85d3eefe8 +Block 0026 [ 23]: 25baddd62863a612 +Block 0026 [ 24]: c3d327c5bfd22a3a +Block 0026 [ 25]: fa7a754f2bd820ea +Block 0026 [ 26]: 1d42473fb2d97483 +Block 0026 [ 27]: 3471d76071e9809b +Block 0026 [ 28]: cdb7c4192c5ae660 +Block 0026 [ 29]: 963ed324e1ac1061 +Block 0026 [ 30]: 421d12df283ff52e +Block 0026 [ 31]: 70f87bee5b64efc1 +Block 0026 [ 32]: 0421bc40a8db2f7d +Block 0026 [ 33]: b65a077b1e547d8a +Block 0026 [ 34]: b4dc92b0f61c5029 +Block 0026 [ 35]: 555b623fb30f1237 +Block 0026 [ 36]: 262edb116a2993a6 +Block 0026 [ 37]: 9582ef318a3ee8f9 +Block 0026 [ 38]: 7affb49d286d9632 +Block 0026 [ 39]: 27c704dfb98b3acf +Block 0026 [ 40]: 13e542f23f896758 +Block 0026 [ 41]: c8bbd0d56dfd7638 +Block 0026 [ 42]: eaba65a57471e933 +Block 0026 [ 43]: c98607a547832622 +Block 0026 [ 44]: 1ebd1b8afb0bf886 +Block 0026 [ 45]: f206507bfe115f86 +Block 0026 [ 46]: 326842eacb06c6bb +Block 0026 [ 47]: 95c621502add5dad +Block 0026 [ 48]: 60bcfce88154b796 +Block 0026 [ 49]: 9d0982e683e06e1f +Block 0026 [ 50]: 6e404290e8de2e0a +Block 0026 [ 51]: f7379a896794c18c +Block 0026 [ 52]: 7b2bfcb545e5ce3b +Block 0026 [ 53]: c7ea3b36e261e463 +Block 0026 [ 54]: 087aadf263e814dc +Block 0026 [ 55]: 470e873d7a28d2ea +Block 0026 [ 56]: 9c1de86f22c84905 +Block 0026 [ 57]: 0cb31716564be97d +Block 0026 [ 58]: 57c84f1733b38d11 +Block 0026 [ 59]: 90054ae99b4a469a +Block 0026 [ 60]: 44fc18fd1fbbfdf5 +Block 0026 [ 61]: 896474ccfa2a8abe +Block 0026 [ 62]: 6d1a83c45ab01d07 +Block 0026 [ 63]: 6e1db62335275c0e +Block 0026 [ 64]: f9e1778a7ace16c3 +Block 0026 [ 65]: 1a588e9ded9674b4 +Block 0026 [ 66]: d835296109312572 +Block 0026 [ 67]: 2e647c1fd56d0e9c +Block 0026 [ 68]: 2cfc5d8177130f53 +Block 0026 [ 69]: 48f63500ec356093 +Block 0026 [ 70]: c07082b25b554e7e +Block 0026 [ 71]: 28db93b22107fe9a +Block 0026 [ 72]: 6c8fb3681f1bf160 +Block 0026 [ 73]: 760d701be621a605 +Block 0026 [ 74]: 0cfda0e5c55ec8c7 +Block 0026 [ 75]: 5c6fdbbb2a8f8ff8 +Block 0026 [ 76]: aebfcee72b0950a3 +Block 0026 [ 77]: 9e2cb7decd8c3d48 +Block 0026 [ 78]: 27d55cfcb210dc24 +Block 0026 [ 79]: 55ad71b954f6abaf +Block 0026 [ 80]: be9834ba9ea0ac99 +Block 0026 [ 81]: 57f29d843db85712 +Block 0026 [ 82]: 9479adb08abb161a +Block 0026 [ 83]: 206421c067eb9317 +Block 0026 [ 84]: 7d72ee59b7d4463f +Block 0026 [ 85]: f02df93b0e19851d +Block 0026 [ 86]: 8dfa179b2fc85c50 +Block 0026 [ 87]: 4317539dae930952 +Block 0026 [ 88]: 4dc95947a415e992 +Block 0026 [ 89]: c828a34a403c233c +Block 0026 [ 90]: 44bde65a36130b0c +Block 0026 [ 91]: 43a9331614311fab +Block 0026 [ 92]: e343ad268e0db819 +Block 0026 [ 93]: 3bf80e0968fb4740 +Block 0026 [ 94]: 006f6758fb198787 +Block 0026 [ 95]: 5e4580c97af6364c +Block 0026 [ 96]: 0674fa0e5c5bb448 +Block 0026 [ 97]: 2b9cf6328e071183 +Block 0026 [ 98]: e82012c0f1292107 +Block 0026 [ 99]: 0041eb6c74330b21 +Block 0026 [100]: a0e1d5da140e1559 +Block 0026 [101]: 0cae4836a0580159 +Block 0026 [102]: 083475b819af769b +Block 0026 [103]: 497fcd3f6f96c7a6 +Block 0026 [104]: 1633d9be1cbeba9c +Block 0026 [105]: 431079c20c6dac62 +Block 0026 [106]: 5797684ab5a51658 +Block 0026 [107]: 6c669f583c1269c2 +Block 0026 [108]: a5d4304877962ed9 +Block 0026 [109]: 16abbaf910a907a7 +Block 0026 [110]: 7b80279a7ba988aa +Block 0026 [111]: 0bc8cea2c7084aa9 +Block 0026 [112]: 264cb55c54d5ad27 +Block 0026 [113]: 1a7f8846e62bba9c +Block 0026 [114]: 1c03cc75f7ce74e4 +Block 0026 [115]: 9944571757ddc5fa +Block 0026 [116]: 529e6ae1da16744d +Block 0026 [117]: c5153e8300f6dbed +Block 0026 [118]: abc65417de290d1b +Block 0026 [119]: 1f004424202a1b0a +Block 0026 [120]: cf3e839eeb92b189 +Block 0026 [121]: ef8b63f709186be2 +Block 0026 [122]: 1381a46de4cc9b60 +Block 0026 [123]: 46ef069715fbb521 +Block 0026 [124]: 5c225fbc8021dcc5 +Block 0026 [125]: bef20cb6a61f0826 +Block 0026 [126]: 688df34aa80029c2 +Block 0026 [127]: cd08d3de46464946 +Block 0027 [ 0]: f096dc3185d966c2 +Block 0027 [ 1]: d0ad3ab0d0656bae +Block 0027 [ 2]: 74c2422614d2ec64 +Block 0027 [ 3]: 687c01d102663a96 +Block 0027 [ 4]: a7a23967ca1e4843 +Block 0027 [ 5]: ecebcdc9d292e5bb +Block 0027 [ 6]: 7fa0abe1f526c09f +Block 0027 [ 7]: 37fc299537e25b91 +Block 0027 [ 8]: 99bee1a0a45aac3a +Block 0027 [ 9]: cf15202220272cb2 +Block 0027 [ 10]: eae1fcc2bceafb95 +Block 0027 [ 11]: dd5bd3d9fad9f727 +Block 0027 [ 12]: 80567562dcba64cf +Block 0027 [ 13]: e508747af9686bc4 +Block 0027 [ 14]: 4182eece1c93274a +Block 0027 [ 15]: 7edc10b4a33b2e1b +Block 0027 [ 16]: 7ec5682a947beac0 +Block 0027 [ 17]: 118d651eaa9b0f62 +Block 0027 [ 18]: b61d88641f68ab5d +Block 0027 [ 19]: 35badd2de0889c48 +Block 0027 [ 20]: 2c8f346e6876f454 +Block 0027 [ 21]: 478304ae6349d7e8 +Block 0027 [ 22]: 6d2810500634084e +Block 0027 [ 23]: 96d3d864a7d25fb4 +Block 0027 [ 24]: f29dfe7a753d21e4 +Block 0027 [ 25]: 2d2092e0345b81b4 +Block 0027 [ 26]: d3d4e7b8f30b5b4d +Block 0027 [ 27]: 966cc775e108688d +Block 0027 [ 28]: 92e135470b853dda +Block 0027 [ 29]: 1270493a870aa921 +Block 0027 [ 30]: 919cd6c705466b1d +Block 0027 [ 31]: a2939acdc6e4d066 +Block 0027 [ 32]: a304ab077675c888 +Block 0027 [ 33]: dfb58333a936fe6c +Block 0027 [ 34]: cca98347e639d280 +Block 0027 [ 35]: e0c7751fa0b95207 +Block 0027 [ 36]: 848c0482ff822b16 +Block 0027 [ 37]: 5af01581b7e62b6c +Block 0027 [ 38]: b016464dd3036bca +Block 0027 [ 39]: 1fb2a2ee30dff1a4 +Block 0027 [ 40]: fbf4e0ffa0ad1f2e +Block 0027 [ 41]: edf5f3be5331f61c +Block 0027 [ 42]: 7e5f55881a225643 +Block 0027 [ 43]: 62341c5352c796cb +Block 0027 [ 44]: bf162dc8d61c35ad +Block 0027 [ 45]: eee782d2dfb9f576 +Block 0027 [ 46]: 6b7ba3c07d263005 +Block 0027 [ 47]: e4b04cbfa903cf30 +Block 0027 [ 48]: 062e83f4560a79d8 +Block 0027 [ 49]: 17c1af32aa700e69 +Block 0027 [ 50]: d439638e74b2f66b +Block 0027 [ 51]: 64fd9c61d612a243 +Block 0027 [ 52]: 8dd0336357856c6d +Block 0027 [ 53]: 6d4c9d450b8ffb59 +Block 0027 [ 54]: 077a74414a905dc9 +Block 0027 [ 55]: 8046a314cc058ee5 +Block 0027 [ 56]: d8d54fce2d967c0e +Block 0027 [ 57]: 72035c981b1306f8 +Block 0027 [ 58]: 817343d510a272c3 +Block 0027 [ 59]: f07eb869b912aac8 +Block 0027 [ 60]: 1f57bf346c0b9468 +Block 0027 [ 61]: 84b55995890629ca +Block 0027 [ 62]: dec290057cec9c1b +Block 0027 [ 63]: 539154b989212510 +Block 0027 [ 64]: 58784ed313cd22f7 +Block 0027 [ 65]: 9e38a70af5a7db0b +Block 0027 [ 66]: dab3720f488e7c35 +Block 0027 [ 67]: a507550806424731 +Block 0027 [ 68]: 685b6a98ea7bbe6f +Block 0027 [ 69]: 9e8e21270e505097 +Block 0027 [ 70]: b77daaaf5e0fe51d +Block 0027 [ 71]: 79ef13739388ce3f +Block 0027 [ 72]: fe00eafe45c56be6 +Block 0027 [ 73]: bc7b9c5baff182fb +Block 0027 [ 74]: b35eabd2e8175144 +Block 0027 [ 75]: 99f48f8251f50e27 +Block 0027 [ 76]: ae1de2e512df9a3a +Block 0027 [ 77]: 470ee861030b164a +Block 0027 [ 78]: 5cd8f4c145b8dc2b +Block 0027 [ 79]: 41ad914535bf1043 +Block 0027 [ 80]: c5c20273c2ea694d +Block 0027 [ 81]: 6910400d047274eb +Block 0027 [ 82]: fa23ccc88611ed27 +Block 0027 [ 83]: 3fde5d5785ff6868 +Block 0027 [ 84]: 5ccc668ca420c783 +Block 0027 [ 85]: 21ad91fdb222acab +Block 0027 [ 86]: 16adf902927c8366 +Block 0027 [ 87]: 3cdb6e0c7a52bfe8 +Block 0027 [ 88]: a1bc687942afa21e +Block 0027 [ 89]: 8f54dddce8f7fd5c +Block 0027 [ 90]: 7b098fa4d4b6ab4a +Block 0027 [ 91]: a20634cbbf712aba +Block 0027 [ 92]: dd7777ea8afb70c9 +Block 0027 [ 93]: be05beeef4a4b8ee +Block 0027 [ 94]: e8b1925905bc113d +Block 0027 [ 95]: f0a1d60ea245eb7b +Block 0027 [ 96]: 1772469e07a94532 +Block 0027 [ 97]: 1df3f8439e4aa1ce +Block 0027 [ 98]: 66d5968f758bf1b0 +Block 0027 [ 99]: 5c35f016cfa6930e +Block 0027 [100]: 814ba6154fda28ad +Block 0027 [101]: e3dbf45106e1200d +Block 0027 [102]: ebb117726dab2d87 +Block 0027 [103]: 9e44b77784c653dd +Block 0027 [104]: a407d0952407cbf3 +Block 0027 [105]: 5e2110099e1cd4ea +Block 0027 [106]: 0f18e49033f7dc41 +Block 0027 [107]: c4332aa0c9c3c053 +Block 0027 [108]: 05b77caab4522bce +Block 0027 [109]: 29a3efbc52325114 +Block 0027 [110]: e1c0e2502bfa61af +Block 0027 [111]: f2a63277d6a3862d +Block 0027 [112]: 91b78dd58fc89d92 +Block 0027 [113]: 83a9e84f93692327 +Block 0027 [114]: fb6b7e7168751ec1 +Block 0027 [115]: 842c25ba64d5a3d8 +Block 0027 [116]: a50ebc02ce848a46 +Block 0027 [117]: 7fef4c3fd17127e8 +Block 0027 [118]: d661b87fbf9a2e34 +Block 0027 [119]: 98b71c1163dee85f +Block 0027 [120]: dfcacdd89eaa6e56 +Block 0027 [121]: b9abd457c2d22663 +Block 0027 [122]: 96e2ffbe173bb116 +Block 0027 [123]: f08974b04d026456 +Block 0027 [124]: f837e1862f495cc1 +Block 0027 [125]: 9dc79c703e07b954 +Block 0027 [126]: 0edb3ea5ce47e628 +Block 0027 [127]: bb94cd2b6c52fd2f +Block 0028 [ 0]: 0b8bfa4c5c97692d +Block 0028 [ 1]: 3fa01aeccfbcdebf +Block 0028 [ 2]: 9b19e228c5ffe5ec +Block 0028 [ 3]: 4624ebbea8947c48 +Block 0028 [ 4]: c30d6ed540afa086 +Block 0028 [ 5]: 2a61862b51cc4001 +Block 0028 [ 6]: 986a72ca0d3b275f +Block 0028 [ 7]: 8254f5483e9217c4 +Block 0028 [ 8]: a28f52ee554db367 +Block 0028 [ 9]: 7e03ad05d1743a6f +Block 0028 [ 10]: 5756878036e93a0b +Block 0028 [ 11]: ba168dcebfbe1b24 +Block 0028 [ 12]: 4eca447838c8fcf3 +Block 0028 [ 13]: 5dd09b4e010e7181 +Block 0028 [ 14]: 11aa79e5cfcb306f +Block 0028 [ 15]: 07a7d142ea04b372 +Block 0028 [ 16]: f2af2f7e65bc0d87 +Block 0028 [ 17]: baa9df98896b93a4 +Block 0028 [ 18]: 9c15d421cb8ba455 +Block 0028 [ 19]: fe2be76efa88ed21 +Block 0028 [ 20]: 1b37035070f9cbb9 +Block 0028 [ 21]: bbcbe391e2ce09f6 +Block 0028 [ 22]: 178ac0961508db49 +Block 0028 [ 23]: eff7abc82697e447 +Block 0028 [ 24]: 40f84b5085d1cd45 +Block 0028 [ 25]: 67775e01d463e559 +Block 0028 [ 26]: 8d07e8cdc435f37d +Block 0028 [ 27]: 9934217b91a7d414 +Block 0028 [ 28]: fa385dda3f4b1013 +Block 0028 [ 29]: 395a49ed50e1c9d2 +Block 0028 [ 30]: f329b164e220d024 +Block 0028 [ 31]: c660fbcdc4aa0785 +Block 0028 [ 32]: d6645444da6ace9d +Block 0028 [ 33]: cda566bd2bd27f63 +Block 0028 [ 34]: a282c756f0f20738 +Block 0028 [ 35]: db2ab31cd2a9ed5e +Block 0028 [ 36]: d6fbbe901dc5cb15 +Block 0028 [ 37]: 009aa73089ee763f +Block 0028 [ 38]: c09ecb723ca77bf1 +Block 0028 [ 39]: 79985c69f715a7be +Block 0028 [ 40]: ce8357764e0d204b +Block 0028 [ 41]: 26433dec7d36c631 +Block 0028 [ 42]: 9a70506191b6b793 +Block 0028 [ 43]: 79c2f30246220b39 +Block 0028 [ 44]: 1d2077172eff0607 +Block 0028 [ 45]: a9de9fa916722872 +Block 0028 [ 46]: d89b88b87ca12d3e +Block 0028 [ 47]: 870c847a554f4fef +Block 0028 [ 48]: a3a7a2748bfdb1de +Block 0028 [ 49]: edd069eee7b46d58 +Block 0028 [ 50]: 652602bbf39aaab7 +Block 0028 [ 51]: 2d4f209f3845e1e2 +Block 0028 [ 52]: 21308472e7be9f3a +Block 0028 [ 53]: 6c2db272b2a22b3c +Block 0028 [ 54]: 07a0740492d2359b +Block 0028 [ 55]: 374739683573a339 +Block 0028 [ 56]: 96c6ca6c0416b67e +Block 0028 [ 57]: b55df4f9cd261108 +Block 0028 [ 58]: af862bd549991a2a +Block 0028 [ 59]: 7dad80edf5e8206e +Block 0028 [ 60]: 05c95b6a445cc1dc +Block 0028 [ 61]: aa157bbfbb22d1aa +Block 0028 [ 62]: ca7b3e7ab07c0d70 +Block 0028 [ 63]: 394cd42c5c06a3c0 +Block 0028 [ 64]: 3a4bcdf992fedb45 +Block 0028 [ 65]: bc3a86c8c1a65078 +Block 0028 [ 66]: 5c5aeb0ba453aeaf +Block 0028 [ 67]: f284834b9c12c294 +Block 0028 [ 68]: f40b0d89c6a0441e +Block 0028 [ 69]: a4c885144d2dfd4f +Block 0028 [ 70]: 995ccb8d3d3af7e7 +Block 0028 [ 71]: c04b150b328137e6 +Block 0028 [ 72]: 90e86832780c763b +Block 0028 [ 73]: 4b251c2ffb40fd28 +Block 0028 [ 74]: 6d7bcad44112d76a +Block 0028 [ 75]: 1910e0c9e3b1d838 +Block 0028 [ 76]: 502ce4c4567d9432 +Block 0028 [ 77]: 124b66d5caab14d8 +Block 0028 [ 78]: 3fade26963f7b685 +Block 0028 [ 79]: 706539b9aa256e7b +Block 0028 [ 80]: c60fb2c39aa1b794 +Block 0028 [ 81]: b0211dc59dc646f1 +Block 0028 [ 82]: f34537f1b3e7d8cc +Block 0028 [ 83]: ba3baa631204f008 +Block 0028 [ 84]: 8c70d71cb5a2e75e +Block 0028 [ 85]: 1baa6160eaacb35b +Block 0028 [ 86]: 1d5a7acefa143c97 +Block 0028 [ 87]: 61c5da59873dd000 +Block 0028 [ 88]: 0292ee3bebcb4896 +Block 0028 [ 89]: 78b3fdfedac96082 +Block 0028 [ 90]: 8c53202fc59c6ee0 +Block 0028 [ 91]: c84a57856de4f50d +Block 0028 [ 92]: edd6e10e8954bc69 +Block 0028 [ 93]: ee16b0aeecfb83a6 +Block 0028 [ 94]: f5d2407a655cd4fc +Block 0028 [ 95]: 5582eba4f4f336a4 +Block 0028 [ 96]: 386c6c2b31e071ad +Block 0028 [ 97]: 4b6789f4e9271a28 +Block 0028 [ 98]: 1732ab6cb3b1c80b +Block 0028 [ 99]: 15726eb3db8d583d +Block 0028 [100]: d7e0ceea926cab91 +Block 0028 [101]: 94703084e3bb47e1 +Block 0028 [102]: 75e539dbeb6bc96c +Block 0028 [103]: 2da516bfde306d23 +Block 0028 [104]: 112679a6295082fe +Block 0028 [105]: ed817f8eade76421 +Block 0028 [106]: f39d3920dbc72bcf +Block 0028 [107]: 5a1a9faf59352d55 +Block 0028 [108]: e89a7d450442923f +Block 0028 [109]: ba346fe4087e77e7 +Block 0028 [110]: 35492364250abde6 +Block 0028 [111]: 9832e2b7905992a1 +Block 0028 [112]: 10b9b9b31d3ac35b +Block 0028 [113]: e4b0106fde39639d +Block 0028 [114]: d300caff1b81fc16 +Block 0028 [115]: 4aeee1beed87381b +Block 0028 [116]: 54eede43bd7f508a +Block 0028 [117]: 51ffc1138420db2c +Block 0028 [118]: 5e765bb31b18c0c2 +Block 0028 [119]: 1bf00fb92186e7c2 +Block 0028 [120]: 32d4d8cdb00aff86 +Block 0028 [121]: c1a075505c618c74 +Block 0028 [122]: 2862f96036005511 +Block 0028 [123]: f7e86b9564e716f3 +Block 0028 [124]: a4498d8255501669 +Block 0028 [125]: 771f2428943d3630 +Block 0028 [126]: f4dbed4a8483b5f8 +Block 0028 [127]: 38e0618f70429e7a +Block 0029 [ 0]: 1342aa819759ad55 +Block 0029 [ 1]: 2a58d88b1313ee1d +Block 0029 [ 2]: 04380d2370776def +Block 0029 [ 3]: 2984280394553fa4 +Block 0029 [ 4]: e6e0cbf7515e7614 +Block 0029 [ 5]: 65d3039585de045b +Block 0029 [ 6]: fad2abab2d69eabf +Block 0029 [ 7]: 14f6856b255cc8b0 +Block 0029 [ 8]: cf5e53abb23fde4b +Block 0029 [ 9]: 0f9ed7c99a4186b1 +Block 0029 [ 10]: 5128f73f1c9c476a +Block 0029 [ 11]: daa8ace3701b388b +Block 0029 [ 12]: 528eef2a04f98732 +Block 0029 [ 13]: b2f7800cb0863ba7 +Block 0029 [ 14]: 4c7f9bc145bfca64 +Block 0029 [ 15]: 62cb81be906a7529 +Block 0029 [ 16]: ae6a747e1fe0c590 +Block 0029 [ 17]: 64c36f221ccd38cb +Block 0029 [ 18]: 62e82903b941ce11 +Block 0029 [ 19]: 34abc5adfb0b23c9 +Block 0029 [ 20]: 69ac60e945ade24d +Block 0029 [ 21]: 80642aeab6d7bca9 +Block 0029 [ 22]: 4c8395c9e008dc8a +Block 0029 [ 23]: 0e3fc29352116891 +Block 0029 [ 24]: 78f2c451e68d73f7 +Block 0029 [ 25]: 6a4594a1b3f1c724 +Block 0029 [ 26]: 768002b557fef95e +Block 0029 [ 27]: 7bdcf6b313041bfc +Block 0029 [ 28]: 2e4c3ba77b7dc340 +Block 0029 [ 29]: 73080545a3049a27 +Block 0029 [ 30]: 3b71ab0a0f6b5be0 +Block 0029 [ 31]: 8fb04622b683c1fa +Block 0029 [ 32]: 29367052161c185d +Block 0029 [ 33]: 54c7744f8bd9d6ac +Block 0029 [ 34]: 35bf09e564100364 +Block 0029 [ 35]: 88f3c401223434f8 +Block 0029 [ 36]: 96d01519f6d5f60c +Block 0029 [ 37]: 4872434a3b4be97b +Block 0029 [ 38]: b64455bbe358020f +Block 0029 [ 39]: b455a338bafb3877 +Block 0029 [ 40]: 101974b5b225f62a +Block 0029 [ 41]: bb130e2146078e1d +Block 0029 [ 42]: 08d5d8867a06cdcb +Block 0029 [ 43]: 5188fb4d5e177880 +Block 0029 [ 44]: 1e88286829af2a8b +Block 0029 [ 45]: 1fb55b9f7549c764 +Block 0029 [ 46]: e1b13f2e423836c0 +Block 0029 [ 47]: 21f928ab65ee3682 +Block 0029 [ 48]: dbb430a89dd1a2a0 +Block 0029 [ 49]: caeb04df4c3100b2 +Block 0029 [ 50]: 013548395a133533 +Block 0029 [ 51]: ceb65861a017b5a8 +Block 0029 [ 52]: 3503846ee3882099 +Block 0029 [ 53]: f2b3055f0274c056 +Block 0029 [ 54]: 3c1aaed297fa6a09 +Block 0029 [ 55]: a1b3eaa82adb7138 +Block 0029 [ 56]: 7c98c993986612c7 +Block 0029 [ 57]: 332e0a10cb62caa6 +Block 0029 [ 58]: 7255157123d19354 +Block 0029 [ 59]: 87fada98140da26c +Block 0029 [ 60]: aa8f500aa9b5b4b4 +Block 0029 [ 61]: 5334543eba7805d2 +Block 0029 [ 62]: cda91bedbba419c2 +Block 0029 [ 63]: 8500721d1be41584 +Block 0029 [ 64]: d7d443102fbfbc58 +Block 0029 [ 65]: c8509445b06f2de8 +Block 0029 [ 66]: 41b046af2881f5d4 +Block 0029 [ 67]: 5a3a48952a70c0e9 +Block 0029 [ 68]: 2084ab777d8696fb +Block 0029 [ 69]: 367e4408de9f5e17 +Block 0029 [ 70]: 484f3345ea0f2209 +Block 0029 [ 71]: c3e89ccdec8d22c0 +Block 0029 [ 72]: 0242efdae8284e48 +Block 0029 [ 73]: f42905a84a844efe +Block 0029 [ 74]: 4424a2d4a1197b13 +Block 0029 [ 75]: 1d6d68842f1f3baa +Block 0029 [ 76]: b2edca88f7391dd4 +Block 0029 [ 77]: 07fe96875027d8dd +Block 0029 [ 78]: 26d07af4b56aa62b +Block 0029 [ 79]: 42ed21346aa2e910 +Block 0029 [ 80]: 427767abb9fc5db4 +Block 0029 [ 81]: 0ac5fea84b1c8fea +Block 0029 [ 82]: e27b91cfe888586d +Block 0029 [ 83]: 9068ed91b466cc0d +Block 0029 [ 84]: a55c75d158364b84 +Block 0029 [ 85]: d32d2407084e5174 +Block 0029 [ 86]: ea4f8cd3446c1654 +Block 0029 [ 87]: 52abfadbf462d66e +Block 0029 [ 88]: e670f796c665c750 +Block 0029 [ 89]: acbd1e8a64642e79 +Block 0029 [ 90]: a4c52d4c306fb308 +Block 0029 [ 91]: e7cea689579e0459 +Block 0029 [ 92]: ca6d2536a9c2b9a2 +Block 0029 [ 93]: 976ae0ac10f180e0 +Block 0029 [ 94]: 21f2d2f4a76951c8 +Block 0029 [ 95]: c63af3df30f6c4cf +Block 0029 [ 96]: 7c8d504059d31bde +Block 0029 [ 97]: 199eed54c6d323f4 +Block 0029 [ 98]: 04ef01484192b42a +Block 0029 [ 99]: 1cc19807d3fe0312 +Block 0029 [100]: 076c5b88f99a4766 +Block 0029 [101]: 32d3367c2e6058bf +Block 0029 [102]: 4c1ab23f34450cd4 +Block 0029 [103]: d05a45b002419d95 +Block 0029 [104]: a3e427169cce8c7b +Block 0029 [105]: 41b0beda3e123b31 +Block 0029 [106]: 1fd29ff5325c3021 +Block 0029 [107]: 418d7de5c18e8e7b +Block 0029 [108]: d857b25e57918532 +Block 0029 [109]: f23eab6af4e6f76b +Block 0029 [110]: 40df4093be491248 +Block 0029 [111]: 615b5919b163abc8 +Block 0029 [112]: dcecda207b953e9d +Block 0029 [113]: 612961710ce6358c +Block 0029 [114]: 408d6b85949c58f4 +Block 0029 [115]: d76936ce1d0d13c4 +Block 0029 [116]: f9c53a9492aad041 +Block 0029 [117]: c322c91811f78d3c +Block 0029 [118]: 609092f732b959b9 +Block 0029 [119]: ffe586d098e15630 +Block 0029 [120]: 5ffa0694fecaf5be +Block 0029 [121]: 8e08307f8ce1a92e +Block 0029 [122]: caa97eb3c6a9dfdf +Block 0029 [123]: 16ab5c05cb1bbef2 +Block 0029 [124]: 4651fbe947cda767 +Block 0029 [125]: b96daab8a4836c53 +Block 0029 [126]: 08fef05406742d7f +Block 0029 [127]: fee5545bf12d959f +Block 0030 [ 0]: ecb2b372da831b49 +Block 0030 [ 1]: c709558a41457c0e +Block 0030 [ 2]: f8464ae225358d10 +Block 0030 [ 3]: 565858a0371880b2 +Block 0030 [ 4]: 846f3802baa7d4d5 +Block 0030 [ 5]: 6a2041cf11bdc232 +Block 0030 [ 6]: 7391dac65c6ca396 +Block 0030 [ 7]: 20610c5f3458d103 +Block 0030 [ 8]: cf7dc2c3b5d21218 +Block 0030 [ 9]: b26b81b52310e8be +Block 0030 [ 10]: 1caf5d5acdd8ad0d +Block 0030 [ 11]: 9844351aac7ebd44 +Block 0030 [ 12]: 34b85f9e05026736 +Block 0030 [ 13]: 8d90acaec66ee2c5 +Block 0030 [ 14]: 79ebbbcc314700ea +Block 0030 [ 15]: af9ce295d25e9854 +Block 0030 [ 16]: 4633750c86574511 +Block 0030 [ 17]: 841dd873cf7c9af8 +Block 0030 [ 18]: 30a56a49963d6332 +Block 0030 [ 19]: 8758c43d7f43bc52 +Block 0030 [ 20]: 613500bf86a2472e +Block 0030 [ 21]: b662ccfc37dafc4e +Block 0030 [ 22]: b892dd0b1ed4867d +Block 0030 [ 23]: 55d004e0c22a6fa9 +Block 0030 [ 24]: 01895e286327f069 +Block 0030 [ 25]: 6316e819327f5aac +Block 0030 [ 26]: c17a79dc28221ff2 +Block 0030 [ 27]: fc7217cbe4abcb0f +Block 0030 [ 28]: e0a22abc712fc4ec +Block 0030 [ 29]: fc2ca70ad9656a5d +Block 0030 [ 30]: 78ad17f00e8363f9 +Block 0030 [ 31]: 5b8e9b907b095c13 +Block 0030 [ 32]: 1d0437e94c488a53 +Block 0030 [ 33]: a6c09180446ee448 +Block 0030 [ 34]: 592db16392414b1f +Block 0030 [ 35]: dfceadcd216f1c3b +Block 0030 [ 36]: afd0defb38513b4a +Block 0030 [ 37]: 55fec53c4a852f66 +Block 0030 [ 38]: 97cc98dede0e137a +Block 0030 [ 39]: 1efe8b0285eb0d53 +Block 0030 [ 40]: 0947a3ce98d0b868 +Block 0030 [ 41]: 4d49836cbb9e0f4d +Block 0030 [ 42]: 4464d43166968015 +Block 0030 [ 43]: 703e0898da38b794 +Block 0030 [ 44]: 5b7cfe7a59211f1c +Block 0030 [ 45]: 3c5fdc76342c4cc1 +Block 0030 [ 46]: 7edc3f911984cd71 +Block 0030 [ 47]: 53449b257e33379e +Block 0030 [ 48]: 97d49ba1e50a04fe +Block 0030 [ 49]: ca13017e3f9f4a72 +Block 0030 [ 50]: 86894a3d08a6cb97 +Block 0030 [ 51]: 805c183bd03c0ba8 +Block 0030 [ 52]: 966043770eadc1cf +Block 0030 [ 53]: 24a31a0bd717faa9 +Block 0030 [ 54]: 5a19962dad2bf5df +Block 0030 [ 55]: 3034f2f99495ce20 +Block 0030 [ 56]: 195fc7abd1a5dbe9 +Block 0030 [ 57]: 1f3a814bd85e8d9c +Block 0030 [ 58]: 59d4902d0897791f +Block 0030 [ 59]: 70616ecbae769969 +Block 0030 [ 60]: c0b35fdf7dd011a6 +Block 0030 [ 61]: 6c27eecf0dfaf13f +Block 0030 [ 62]: 04f4f55a838c904b +Block 0030 [ 63]: ee2bfa574b1f004c +Block 0030 [ 64]: 84cb47f17a211553 +Block 0030 [ 65]: 5ac7865a063f9175 +Block 0030 [ 66]: e1ce6460323291c0 +Block 0030 [ 67]: eddc3b6f7afb8969 +Block 0030 [ 68]: 1e1ed3f48592d3dc +Block 0030 [ 69]: c67f038d66ff6f88 +Block 0030 [ 70]: bd781d0261855bc3 +Block 0030 [ 71]: 2e1566dbfb78a892 +Block 0030 [ 72]: 035a4f7d351c8810 +Block 0030 [ 73]: d9301b86641d0837 +Block 0030 [ 74]: 4b4aa1e8bdf77993 +Block 0030 [ 75]: 22d5689c791cc39d +Block 0030 [ 76]: 04b267f305fdd276 +Block 0030 [ 77]: 89753d14693cdb86 +Block 0030 [ 78]: 49fd119b577707e6 +Block 0030 [ 79]: 04d8b03e8f25118c +Block 0030 [ 80]: f6aaf158c98bf608 +Block 0030 [ 81]: 6338c751302a2349 +Block 0030 [ 82]: b7169b8de98723cd +Block 0030 [ 83]: 9876c68d02e8d8da +Block 0030 [ 84]: d8be27b15da3e9c4 +Block 0030 [ 85]: d3c3bd16ce4518a1 +Block 0030 [ 86]: f116e6da60817f05 +Block 0030 [ 87]: 424d9096e5b7b236 +Block 0030 [ 88]: 68d08f23d2e01660 +Block 0030 [ 89]: 8391b1d4ccc96e77 +Block 0030 [ 90]: fa5a0445cb9d4eca +Block 0030 [ 91]: f35dea2991f818b8 +Block 0030 [ 92]: da06fcfbf14caaa3 +Block 0030 [ 93]: 3396473fc9b49d26 +Block 0030 [ 94]: dc0e4607f7047e53 +Block 0030 [ 95]: 88b8af32491bc7af +Block 0030 [ 96]: 2543c3dcba53d6cf +Block 0030 [ 97]: 74ccab446534e9a3 +Block 0030 [ 98]: 0875c246fb99841e +Block 0030 [ 99]: 2f13fcc0817d3543 +Block 0030 [100]: c8ab3c7a4e7260e6 +Block 0030 [101]: c730058d7eeda80d +Block 0030 [102]: de7fb4151297bbaf +Block 0030 [103]: 8b2bad56cd257929 +Block 0030 [104]: a16f121d2c6babeb +Block 0030 [105]: b23aed50a12698f7 +Block 0030 [106]: e6bc74f1c5e53eac +Block 0030 [107]: 2ecf12c6cc28ee0f +Block 0030 [108]: 73265ce24ac7eefa +Block 0030 [109]: c417f95b086f1ec4 +Block 0030 [110]: f5b33108d3254d7d +Block 0030 [111]: 2282b8385a69f71f +Block 0030 [112]: 08a128c65513bfc3 +Block 0030 [113]: dd1a056868bcb22c +Block 0030 [114]: 3711a120d9fe89fc +Block 0030 [115]: f629ebef106760db +Block 0030 [116]: 778784289feeebf6 +Block 0030 [117]: 781afab3042ba6cf +Block 0030 [118]: 69bfc9973c31f543 +Block 0030 [119]: 5a5d3d243c6a8b20 +Block 0030 [120]: d11b7960cf63ec8b +Block 0030 [121]: 6ad4c4cdb53621ce +Block 0030 [122]: 4ac645a6e18a6b16 +Block 0030 [123]: d4475ac4c0dbe40e +Block 0030 [124]: dfe701181b74acef +Block 0030 [125]: d4e308ef3c600531 +Block 0030 [126]: ef51f4965e80d50b +Block 0030 [127]: 2124a91e80b26b68 +Block 0031 [ 0]: 309f6c299d9879f9 +Block 0031 [ 1]: 61375f9b7b14d354 +Block 0031 [ 2]: 40ea625b81391ff8 +Block 0031 [ 3]: f15cbed827226249 +Block 0031 [ 4]: 5ce9b1693a572eda +Block 0031 [ 5]: 65f45c6d4dfa8c12 +Block 0031 [ 6]: 3e67d3cf7da85c8c +Block 0031 [ 7]: b8f8961765faa2c9 +Block 0031 [ 8]: 99f0b83b95d7c0f1 +Block 0031 [ 9]: fb304008030ea3f5 +Block 0031 [ 10]: ae5e2fa3a29075b4 +Block 0031 [ 11]: aa1ae37b327f62f2 +Block 0031 [ 12]: b94bce85e927be6c +Block 0031 [ 13]: c896549ae636df68 +Block 0031 [ 14]: 6952c1358d21b5a2 +Block 0031 [ 15]: 4038f1bbbdf6adde +Block 0031 [ 16]: 97fcf925d6298326 +Block 0031 [ 17]: 3e504f4327bcbdb6 +Block 0031 [ 18]: 024d30c429f5054f +Block 0031 [ 19]: 75318591f6653e81 +Block 0031 [ 20]: 29f7301b7b033e0d +Block 0031 [ 21]: 449cb4cc3a62ea86 +Block 0031 [ 22]: 42394853452068a9 +Block 0031 [ 23]: c87ddfebc72f384a +Block 0031 [ 24]: 47e532412f29d651 +Block 0031 [ 25]: 125959ed7619d763 +Block 0031 [ 26]: 68abeabaac672be4 +Block 0031 [ 27]: 784a08ffe3ea2e41 +Block 0031 [ 28]: 6635e49ca42e4b89 +Block 0031 [ 29]: bfe5d9a0b21ac03a +Block 0031 [ 30]: ee6453c49343c88e +Block 0031 [ 31]: 8665b5fa8f950f2e +Block 0031 [ 32]: f7f69ec71b54b177 +Block 0031 [ 33]: 40c25f95d856ebf5 +Block 0031 [ 34]: 59b9f6a29a90c6ec +Block 0031 [ 35]: 096e5d0f85b170ee +Block 0031 [ 36]: 98ac3365d491ef48 +Block 0031 [ 37]: 6a24ed36ca69234c +Block 0031 [ 38]: 9f4db634e58667b2 +Block 0031 [ 39]: 7f15383988bb1942 +Block 0031 [ 40]: 675e54a4986414dd +Block 0031 [ 41]: 9fb264d03b0bf34b +Block 0031 [ 42]: cc1fe359233a59ca +Block 0031 [ 43]: 06a7b5af161bca13 +Block 0031 [ 44]: d28e1ed596b43cce +Block 0031 [ 45]: d29ca29e051618cb +Block 0031 [ 46]: 9b11d233a9dc1f8b +Block 0031 [ 47]: 05116b39d78d10af +Block 0031 [ 48]: cfe9dc47077bbf75 +Block 0031 [ 49]: d89b8e20b6ddd178 +Block 0031 [ 50]: 2ea00f20ffc093cd +Block 0031 [ 51]: 51a0bd55c1eba699 +Block 0031 [ 52]: 3bf5d4ab777f6481 +Block 0031 [ 53]: 46308de0349ff974 +Block 0031 [ 54]: 677f762cbf01eafb +Block 0031 [ 55]: 148e52d70f13d161 +Block 0031 [ 56]: aac9894a6c0f52d8 +Block 0031 [ 57]: 916fad8177fb1517 +Block 0031 [ 58]: 2c6cb971e8ce24cf +Block 0031 [ 59]: b7f66b84ff3f1c6a +Block 0031 [ 60]: 7f131a58d45e20bf +Block 0031 [ 61]: b6b67bc9e2b162f3 +Block 0031 [ 62]: 224e9472ce3079a7 +Block 0031 [ 63]: bd52673cf1ebbc03 +Block 0031 [ 64]: 44210f114a3a508a +Block 0031 [ 65]: ab3566dfbea655ce +Block 0031 [ 66]: cf56bb4dabf2242b +Block 0031 [ 67]: d5749f3362a12aa9 +Block 0031 [ 68]: 65ebbb72e3ef59aa +Block 0031 [ 69]: f7484897773e242f +Block 0031 [ 70]: d043e243e50c581c +Block 0031 [ 71]: 7d1856ffd1fd2b33 +Block 0031 [ 72]: 723d2b6879dc6233 +Block 0031 [ 73]: 0128bca8e3230729 +Block 0031 [ 74]: e7f2af7f1f7a1162 +Block 0031 [ 75]: fad5c639a11e0a56 +Block 0031 [ 76]: e9bf231c61e72996 +Block 0031 [ 77]: b27143bd911ac35f +Block 0031 [ 78]: 757d9dc8b44d6729 +Block 0031 [ 79]: 0f784c8f9e2c457a +Block 0031 [ 80]: 5296215752af68c3 +Block 0031 [ 81]: fa2a0d6367d5d43a +Block 0031 [ 82]: 1c9d65b53604c9d0 +Block 0031 [ 83]: 1d55fd904fe8220b +Block 0031 [ 84]: ed34cd49c315a03a +Block 0031 [ 85]: 861ea5c5823bd9d5 +Block 0031 [ 86]: 358f58cb124df94c +Block 0031 [ 87]: 0b435adf91a35571 +Block 0031 [ 88]: dae7e1826db85ac4 +Block 0031 [ 89]: e670470c6ab8d9f2 +Block 0031 [ 90]: 30486e741c630a66 +Block 0031 [ 91]: 450d29e8cc3d4a69 +Block 0031 [ 92]: 49cdad6d59ac0add +Block 0031 [ 93]: e2bf968460f6259c +Block 0031 [ 94]: 191ca7f68c89af1e +Block 0031 [ 95]: 4497145b189ebb9a +Block 0031 [ 96]: 8da638358c0172ed +Block 0031 [ 97]: 8605c94d37eda7a0 +Block 0031 [ 98]: 6f2f59e44ef3811c +Block 0031 [ 99]: d5a44e6cc6dbb8b4 +Block 0031 [100]: bde572402e5c7dc2 +Block 0031 [101]: 3cd497d950293385 +Block 0031 [102]: 102be5062c637c5b +Block 0031 [103]: 69eaf3ad1722eb9f +Block 0031 [104]: 731dac2d1a722ca6 +Block 0031 [105]: afdfc9648bbb9b22 +Block 0031 [106]: 4ab06cc5234aef04 +Block 0031 [107]: 1f34f7c1ae7a0fb7 +Block 0031 [108]: 146d394a1d56fd2b +Block 0031 [109]: a71cef66736ea071 +Block 0031 [110]: be4dc0c799a9ab61 +Block 0031 [111]: 8f57dd28099e022e +Block 0031 [112]: bd6e3b1a62c0275b +Block 0031 [113]: fdfe31be37c6a3b8 +Block 0031 [114]: e6a7e6915adba060 +Block 0031 [115]: 95451eace1219c4e +Block 0031 [116]: 897816235b92c932 +Block 0031 [117]: 45e906d8622b85d3 +Block 0031 [118]: b82f4e0aa72d95dd +Block 0031 [119]: f4caee2823606dbb +Block 0031 [120]: 8c82170ba6003b71 +Block 0031 [121]: b9ba587178c53719 +Block 0031 [122]: 8da04337ef20afda +Block 0031 [123]: a863485e73253dc6 +Block 0031 [124]: 86ff3e9a61b6889c +Block 0031 [125]: dd50c7237eb67f05 +Block 0031 [126]: 7f19e13551117d48 +Block 0031 [127]: 67acdea7f4a2c876 + + After pass 1: +Block 0000 [ 0]: eb70c5da71245685 +Block 0000 [ 1]: b9aff8ada10961b8 +Block 0000 [ 2]: 865a10e399244b02 +Block 0000 [ 3]: 3161b9cd7980bda1 +Block 0000 [ 4]: 6bd2564c45042263 +Block 0000 [ 5]: 2b70da92385e4d23 +Block 0000 [ 6]: 98662686decc6e46 +Block 0000 [ 7]: 0de4ef0b5e35c2b4 +Block 0000 [ 8]: f238d4faa61a746f +Block 0000 [ 9]: 811d631e78456381 +Block 0000 [ 10]: 6b819488537c6b98 +Block 0000 [ 11]: 37bed8fffc2982ca +Block 0000 [ 12]: d8d61a26c1e1ab05 +Block 0000 [ 13]: 1568a7dfdae11df3 +Block 0000 [ 14]: b98f088aa645818c +Block 0000 [ 15]: 49aa299e0418469f +Block 0000 [ 16]: 4525a20e6ccba1fa +Block 0000 [ 17]: 937a4c94329365c5 +Block 0000 [ 18]: f0651d65470c89ee +Block 0000 [ 19]: ad9c2258efd5b32f +Block 0000 [ 20]: e95c39b287f061cb +Block 0000 [ 21]: 7105469e5f3b6097 +Block 0000 [ 22]: 52c23bd89c3dbe93 +Block 0000 [ 23]: e8e2706053327645 +Block 0000 [ 24]: 426c93675bfb8bad +Block 0000 [ 25]: 0d7dd3f7765e74c4 +Block 0000 [ 26]: 2c0954cbdd78ae1e +Block 0000 [ 27]: a484f003d25c1e2c +Block 0000 [ 28]: e433f058fdc53484 +Block 0000 [ 29]: 32db9ec16228254d +Block 0000 [ 30]: 8606a609508964c6 +Block 0000 [ 31]: 028fa140a907996a +Block 0000 [ 32]: 3afe54aee0ac53f9 +Block 0000 [ 33]: cc841e8ea9256952 +Block 0000 [ 34]: b27a9e52e5a82a90 +Block 0000 [ 35]: c6952624f6604e7e +Block 0000 [ 36]: 3e5e9a30a46765d1 +Block 0000 [ 37]: cc9f0a8b549ed406 +Block 0000 [ 38]: bfc31a98356d4436 +Block 0000 [ 39]: 89dea935c35aa6fd +Block 0000 [ 40]: 4ad0cb25dcc550db +Block 0000 [ 41]: 90a65cd8468abe7a +Block 0000 [ 42]: e4a2d75fbd35f1f4 +Block 0000 [ 43]: 03dcdcc9f0c3237f +Block 0000 [ 44]: 0e994242e9a98267 +Block 0000 [ 45]: f99ef10d64526f28 +Block 0000 [ 46]: 5fa42b5b906d097b +Block 0000 [ 47]: 3e57b6d1537dea15 +Block 0000 [ 48]: 175fdc8efe4590af +Block 0000 [ 49]: 809ab15fc4a2f68f +Block 0000 [ 50]: a9d11f6794e8d56d +Block 0000 [ 51]: ed6917141657969c +Block 0000 [ 52]: ea1a177cd47cd946 +Block 0000 [ 53]: cd289f074b35107c +Block 0000 [ 54]: 6359c0b519a8c31a +Block 0000 [ 55]: e081ba4316625dbb +Block 0000 [ 56]: de621edd1c166bb0 +Block 0000 [ 57]: 119aae89e2d7ae00 +Block 0000 [ 58]: 9c582b7525e90087 +Block 0000 [ 59]: e8c5df0b317630e5 +Block 0000 [ 60]: 17cb00fd02299703 +Block 0000 [ 61]: e69d92c5b0f3f45f +Block 0000 [ 62]: da58b8821a7dad01 +Block 0000 [ 63]: 596b3101643a1c77 +Block 0000 [ 64]: ee313aa55337b4bb +Block 0000 [ 65]: 06c72d8e8f38ea5d +Block 0000 [ 66]: 750ff687051a770f +Block 0000 [ 67]: 5d62741e42692ce5 +Block 0000 [ 68]: 9aa7b38ac07ff7a9 +Block 0000 [ 69]: df6175baf2fbc7b9 +Block 0000 [ 70]: cb00ce655414438f +Block 0000 [ 71]: af8716443e612d6a +Block 0000 [ 72]: 035b48984d145bc8 +Block 0000 [ 73]: c027c987a5064e5e +Block 0000 [ 74]: 66fb69540d4cca95 +Block 0000 [ 75]: be24d4bbbf3b02d6 +Block 0000 [ 76]: 0d3c404e0eeb547e +Block 0000 [ 77]: 08d96b387dd93a3f +Block 0000 [ 78]: 7d4209513e3c6dcf +Block 0000 [ 79]: 5894561b00c0b399 +Block 0000 [ 80]: f43326c64db2884e +Block 0000 [ 81]: 824e4ce31d9017db +Block 0000 [ 82]: a1d77f6e1368af6b +Block 0000 [ 83]: f733fa8b41d42e35 +Block 0000 [ 84]: 97c1608fcc7fa98d +Block 0000 [ 85]: db39d6b9297fe0ec +Block 0000 [ 86]: 8612f6beecb98441 +Block 0000 [ 87]: e82c1a9b4e205b3b +Block 0000 [ 88]: f91dcdb7188cfee6 +Block 0000 [ 89]: 57c8499d166215d4 +Block 0000 [ 90]: d774d1f7501185a8 +Block 0000 [ 91]: 08c158f7c95c4270 +Block 0000 [ 92]: 14b2df73ec7323c5 +Block 0000 [ 93]: 4e51fe5e5cc36675 +Block 0000 [ 94]: 5246234dc2a65747 +Block 0000 [ 95]: e88225ff9aafe09a +Block 0000 [ 96]: e1bda4b1a686a873 +Block 0000 [ 97]: eceb71893e27e7df +Block 0000 [ 98]: bca712ae5301ab4f +Block 0000 [ 99]: 6db640a15fe58ea4 +Block 0000 [100]: ba8e3fd75b1ae8b5 +Block 0000 [101]: 97ead52de3d8e35a +Block 0000 [102]: 3d4cf8cfc6dcd3c4 +Block 0000 [103]: 365d4258a2a2327e +Block 0000 [104]: 8bf174175fba6d54 +Block 0000 [105]: 3ce2d97f02a42d99 +Block 0000 [106]: 4df564c159e3b688 +Block 0000 [107]: 969691276b698548 +Block 0000 [108]: 2555c88e11430978 +Block 0000 [109]: e8c762e576a1f13c +Block 0000 [110]: 3b73325fdf4dba52 +Block 0000 [111]: 4e14995f0006aa8a +Block 0000 [112]: 822837767bd6da76 +Block 0000 [113]: f3f9d0ae4419aa57 +Block 0000 [114]: 23b9d2a26182eb2c +Block 0000 [115]: accb780b765bb407 +Block 0000 [116]: cca383fad32fafe3 +Block 0000 [117]: 47a02bbaee291a3c +Block 0000 [118]: 7085e3ac8acc427a +Block 0000 [119]: fed8144177ccaa27 +Block 0000 [120]: caa9bbfd51958faa +Block 0000 [121]: 8cb014215f290920 +Block 0000 [122]: 09b9ef1b731adc3d +Block 0000 [123]: d2a34f72092af56a +Block 0000 [124]: 249e39d444310e4b +Block 0000 [125]: 073fd444412cba9d +Block 0000 [126]: 7ca3c58f2c75d8a3 +Block 0000 [127]: 26dbe92fb3f5f00d +Block 0001 [ 0]: 4f728b69452fae31 +Block 0001 [ 1]: 654a59d030defa14 +Block 0001 [ 2]: 5f458f10c59f812a +Block 0001 [ 3]: 2a62954ed18bb93b +Block 0001 [ 4]: 26684fc624027a00 +Block 0001 [ 5]: 0ea0d3102c0485dd +Block 0001 [ 6]: 7ae1bdad4f312a66 +Block 0001 [ 7]: 8fea98a8c478b87e +Block 0001 [ 8]: 6f692ec7e9c54bbb +Block 0001 [ 9]: da9ca98424721bed +Block 0001 [ 10]: 900cbd5ce6fbe7bb +Block 0001 [ 11]: 85dbd49905599fc7 +Block 0001 [ 12]: 92f4addaefd9925b +Block 0001 [ 13]: 09608538561f2ca8 +Block 0001 [ 14]: ed7e94fd75bdd70a +Block 0001 [ 15]: 6d3ae3542fc34e01 +Block 0001 [ 16]: 7e7320c7088bb0e4 +Block 0001 [ 17]: e84d71c8ffbb2e67 +Block 0001 [ 18]: b7186919d8398b85 +Block 0001 [ 19]: e01b6bbe4055a48a +Block 0001 [ 20]: 3fd1d5fef68647d3 +Block 0001 [ 21]: 6300d72e1ffdf28b +Block 0001 [ 22]: b60996e804f36f8a +Block 0001 [ 23]: 2e93284225f6fc7c +Block 0001 [ 24]: a81d205f94650509 +Block 0001 [ 25]: 71f606dd8bebd0be +Block 0001 [ 26]: ee5d60be569efca5 +Block 0001 [ 27]: 4fc7328a0df5fcf4 +Block 0001 [ 28]: 2d961d7cfd357bd2 +Block 0001 [ 29]: 218726fbb9aeefc5 +Block 0001 [ 30]: 63f6f9cba09bb92d +Block 0001 [ 31]: 23973798dd642b97 +Block 0001 [ 32]: 68fe2ef53a26e4d0 +Block 0001 [ 33]: 9c3b84e088170e25 +Block 0001 [ 34]: c45fd09ea0d35688 +Block 0001 [ 35]: f2223ca8a907b99c +Block 0001 [ 36]: 4d85ca6a4e238eb0 +Block 0001 [ 37]: 9887644e7a74709d +Block 0001 [ 38]: 61c05b5b39af1c81 +Block 0001 [ 39]: 168218475794699a +Block 0001 [ 40]: 94fe356de27a61b8 +Block 0001 [ 41]: 08f98c2a5d687d4b +Block 0001 [ 42]: cdd9c1173a7cba9e +Block 0001 [ 43]: 4cbcf597f3cc3741 +Block 0001 [ 44]: e25bbedf15ccd7af +Block 0001 [ 45]: 8edc82479e1021c5 +Block 0001 [ 46]: d6ac7072e5cb40bc +Block 0001 [ 47]: e3dd6a54105d8932 +Block 0001 [ 48]: 581127fb5cb723a1 +Block 0001 [ 49]: 7050d0b24075dd5d +Block 0001 [ 50]: d5d2db339110fecf +Block 0001 [ 51]: ca62dccb416e4ac0 +Block 0001 [ 52]: 0293fe19b2c7a989 +Block 0001 [ 53]: 003ffccf01821aef +Block 0001 [ 54]: a3862c4116af5880 +Block 0001 [ 55]: b32910abbd694633 +Block 0001 [ 56]: 3f1176ab6a7f813f +Block 0001 [ 57]: 2025169a421a1771 +Block 0001 [ 58]: 935e5cc76adda9cb +Block 0001 [ 59]: 7335434849a26c6b +Block 0001 [ 60]: fa8ac0211e6b711a +Block 0001 [ 61]: 67145dbd1fb8001f +Block 0001 [ 62]: 4028012eeb9526ba +Block 0001 [ 63]: 385e0230fdf4f479 +Block 0001 [ 64]: 5a08384e562ccbe4 +Block 0001 [ 65]: 8fb1278b85d0d468 +Block 0001 [ 66]: 510c114748e9813f +Block 0001 [ 67]: d97ae3c8d92fb2d8 +Block 0001 [ 68]: dba513dc70d1bcca +Block 0001 [ 69]: 76df969ae1aa86e7 +Block 0001 [ 70]: 0a8bae02bae5800a +Block 0001 [ 71]: bb2078b61251d404 +Block 0001 [ 72]: b6db3e229806b315 +Block 0001 [ 73]: e60dee1006818f8a +Block 0001 [ 74]: a8e840613f64bf94 +Block 0001 [ 75]: e3d557347e2c6765 +Block 0001 [ 76]: 3cfd647de70de6ca +Block 0001 [ 77]: 2727cb94eacf75c8 +Block 0001 [ 78]: 782e0fd561e7fc1c +Block 0001 [ 79]: aaf6005b1175d39d +Block 0001 [ 80]: 1e38a51a498783fe +Block 0001 [ 81]: 8118e9ad026edfd1 +Block 0001 [ 82]: da1b462bb6ada0d5 +Block 0001 [ 83]: 0e07fd989e0740ec +Block 0001 [ 84]: 167027d0dfe260c4 +Block 0001 [ 85]: 3831c5065879f87a +Block 0001 [ 86]: 9969d6538518bbf0 +Block 0001 [ 87]: f729432491dde5bc +Block 0001 [ 88]: e488ad11f9e8a09b +Block 0001 [ 89]: b0b6bb576e656477 +Block 0001 [ 90]: d107bb0a7281ba2d +Block 0001 [ 91]: 5f83375bb027d15e +Block 0001 [ 92]: f4d94c88a0509f9f +Block 0001 [ 93]: 0d52e6500b11f46d +Block 0001 [ 94]: ff310a86b946253b +Block 0001 [ 95]: f8a4490cf057837e +Block 0001 [ 96]: c3569d9e20c30dde +Block 0001 [ 97]: 63772178aef6a3c2 +Block 0001 [ 98]: 0cd5abad15d3526a +Block 0001 [ 99]: 929f1688256337ec +Block 0001 [100]: fe99116df0ed24f7 +Block 0001 [101]: 6ebd12248fdeed7b +Block 0001 [102]: 724ce2c56c917514 +Block 0001 [103]: 60e91f3260a33db6 +Block 0001 [104]: 2300595ae52bde6b +Block 0001 [105]: 9ed3942bec949ecc +Block 0001 [106]: 35ab67790672ce89 +Block 0001 [107]: bcd97ac09925600f +Block 0001 [108]: 53bd812c1d5b983b +Block 0001 [109]: 9ee217e78798db42 +Block 0001 [110]: 024621d6eaa9dfa6 +Block 0001 [111]: 091d7bbc00b74cac +Block 0001 [112]: 51a3e878a7ec9637 +Block 0001 [113]: 8f1c496da75b71d4 +Block 0001 [114]: c3213542557c95e4 +Block 0001 [115]: 3259db47b00f135d +Block 0001 [116]: 77f0b3f24f6f2748 +Block 0001 [117]: 0a56aaa8a68eecb0 +Block 0001 [118]: 604cd1106c8bd53b +Block 0001 [119]: b17b9ba59c48e0e3 +Block 0001 [120]: 29a79c9ad70ac72f +Block 0001 [121]: efc613d0bde417ce +Block 0001 [122]: 975b3264affc0594 +Block 0001 [123]: 1bddc4bcc71f4ff6 +Block 0001 [124]: 8338248ef8fcfd02 +Block 0001 [125]: 2d566298f391fcc9 +Block 0001 [126]: 83db40ba1ec6e825 +Block 0001 [127]: 9376c28a2100e36a +Block 0002 [ 0]: 6f0aa682ddaa6126 +Block 0002 [ 1]: dab7227193219bb7 +Block 0002 [ 2]: 4de277e66c81dbba +Block 0002 [ 3]: d7721b4e73c47130 +Block 0002 [ 4]: 95b731717c175846 +Block 0002 [ 5]: 65d958e75791c1b8 +Block 0002 [ 6]: 0a49f6ecc98de387 +Block 0002 [ 7]: 72b02922d766a72a +Block 0002 [ 8]: fad2410fe9e386e9 +Block 0002 [ 9]: 9ff80811205f8e40 +Block 0002 [ 10]: bfd83bf7915bd06d +Block 0002 [ 11]: f2241c6bb086373c +Block 0002 [ 12]: f529fec9d07fc5c7 +Block 0002 [ 13]: 45ddf09931b44152 +Block 0002 [ 14]: 216aa6af5774af56 +Block 0002 [ 15]: 1babf510968c3bd0 +Block 0002 [ 16]: 6b3cc25f82bc7bab +Block 0002 [ 17]: a51883837931ec24 +Block 0002 [ 18]: 15d314e761f4f79f +Block 0002 [ 19]: 907ad9d3e6003728 +Block 0002 [ 20]: 8345e83982730ced +Block 0002 [ 21]: a98973f2f323f2fd +Block 0002 [ 22]: 34ceac857bc82192 +Block 0002 [ 23]: 3aff5a16248d61d0 +Block 0002 [ 24]: bf585e02a4ee76b3 +Block 0002 [ 25]: f102da35c3a1d22f +Block 0002 [ 26]: b8e0c5c6dffa8035 +Block 0002 [ 27]: b69a0ff4b7dc4be3 +Block 0002 [ 28]: 58f6befa5b4be20f +Block 0002 [ 29]: 53e17992af4bf567 +Block 0002 [ 30]: 97b6bbbe40e15da8 +Block 0002 [ 31]: b456092c3bbdee3d +Block 0002 [ 32]: 0fe760445435a994 +Block 0002 [ 33]: 8f00ec3d6cd764cf +Block 0002 [ 34]: 27f17691f81dba17 +Block 0002 [ 35]: 3eb25337717caf80 +Block 0002 [ 36]: 1a08dd7b4b987929 +Block 0002 [ 37]: ece8357a308528ea +Block 0002 [ 38]: e53ab5938ff9847d +Block 0002 [ 39]: cac2d4e6c427a151 +Block 0002 [ 40]: c1d3de78f8bcfc97 +Block 0002 [ 41]: 89026bd7fd300175 +Block 0002 [ 42]: c837079cf4b8e7a0 +Block 0002 [ 43]: cc4f01269d869716 +Block 0002 [ 44]: 1ced768b8adf0ca8 +Block 0002 [ 45]: 752ee66cb91592fd +Block 0002 [ 46]: 8d529b4831c2501b +Block 0002 [ 47]: 6898a8031165c701 +Block 0002 [ 48]: ba973e3b66aeab6d +Block 0002 [ 49]: b38b035f75e1f8ae +Block 0002 [ 50]: 8cea05b80f49929b +Block 0002 [ 51]: e0c6eaef11df5798 +Block 0002 [ 52]: edcb7cbb7a6a2838 +Block 0002 [ 53]: bd0954b83250312c +Block 0002 [ 54]: 030d8c4d29a827ab +Block 0002 [ 55]: defeea24becf9c47 +Block 0002 [ 56]: 4f1bd3d64032f88b +Block 0002 [ 57]: 5d559121df3fcf38 +Block 0002 [ 58]: d40333183106d935 +Block 0002 [ 59]: 9a68b1362e4ecdf3 +Block 0002 [ 60]: 8d094f6fe202c2a0 +Block 0002 [ 61]: cf51c0ec8d9a7bd0 +Block 0002 [ 62]: 6fc5ce646d5459b0 +Block 0002 [ 63]: 1355d7414fb8222d +Block 0002 [ 64]: 1d79f24f45055747 +Block 0002 [ 65]: b048cc45283b5ba4 +Block 0002 [ 66]: 9f599fc0d1a9b797 +Block 0002 [ 67]: 837d7802a73fec8c +Block 0002 [ 68]: ee0cac044c356913 +Block 0002 [ 69]: bd01139dc4a0a74d +Block 0002 [ 70]: 9687ac9b90372c6c +Block 0002 [ 71]: 7ad65839bced3728 +Block 0002 [ 72]: 3dc5cbf1b894db1e +Block 0002 [ 73]: 07359d7c76e52a41 +Block 0002 [ 74]: 9821998dcd6f2e0b +Block 0002 [ 75]: 55e08a3a8bf3f31a +Block 0002 [ 76]: 028648d336310757 +Block 0002 [ 77]: 505c49b8e78c72a5 +Block 0002 [ 78]: 847d4ad5e67effa6 +Block 0002 [ 79]: debe088acd5e0c67 +Block 0002 [ 80]: 09baf2a793f6e85a +Block 0002 [ 81]: 74c53ac1c44923c3 +Block 0002 [ 82]: 2d8e2f704dae8e0d +Block 0002 [ 83]: c11096107ecd9a1a +Block 0002 [ 84]: 6e92f0b937267ca4 +Block 0002 [ 85]: eb91961b00b8494a +Block 0002 [ 86]: e445eff84a307891 +Block 0002 [ 87]: 167008ffb848e317 +Block 0002 [ 88]: ffcd081be48824e8 +Block 0002 [ 89]: ae1188ab3620d030 +Block 0002 [ 90]: 7b5154bb3ae4beeb +Block 0002 [ 91]: 66a8189a6e829b4c +Block 0002 [ 92]: 1045478edacef269 +Block 0002 [ 93]: 4214f2b32e58abf7 +Block 0002 [ 94]: 8a0632f79e9a47d2 +Block 0002 [ 95]: 125f2e34aa373f69 +Block 0002 [ 96]: 4bdaf3650b12ff30 +Block 0002 [ 97]: 09a67d21f7c9a4b7 +Block 0002 [ 98]: da257867835c6ad0 +Block 0002 [ 99]: b09a503a1e027c3a +Block 0002 [100]: d82eab74b27e8c9e +Block 0002 [101]: b8ca0c4c1f8a66bb +Block 0002 [102]: 3295141fafa54773 +Block 0002 [103]: a711da3266cda357 +Block 0002 [104]: 8c491f18c12bef34 +Block 0002 [105]: fb3856d95887799b +Block 0002 [106]: 882efa262eba85c7 +Block 0002 [107]: e70e3ed6325ddce9 +Block 0002 [108]: 6cd188d08d8faaab +Block 0002 [109]: 3d8e89890fa8069e +Block 0002 [110]: 1740ded2e9212552 +Block 0002 [111]: 97dbb638e111dbaa +Block 0002 [112]: 591b3ef515441981 +Block 0002 [113]: 47924a68e2f2d931 +Block 0002 [114]: 56f6c3046c63e935 +Block 0002 [115]: 5d9b054b25c3cac7 +Block 0002 [116]: 730e460a6b42888e +Block 0002 [117]: 2a89748c965add5d +Block 0002 [118]: 2e21eda0da280986 +Block 0002 [119]: 8310061edc77f4ab +Block 0002 [120]: 663eccfd5e98f3da +Block 0002 [121]: ef140e3bb971144b +Block 0002 [122]: def56d52b3a2306e +Block 0002 [123]: c4d693020bec1987 +Block 0002 [124]: a3f956918de780b2 +Block 0002 [125]: f7a6e5c929d6a71a +Block 0002 [126]: 657926002bd1b059 +Block 0002 [127]: d87898adc25622e7 +Block 0003 [ 0]: a5098825713de56b +Block 0003 [ 1]: 5abdb2c9a238997c +Block 0003 [ 2]: 0df17021d43634ae +Block 0003 [ 3]: ec32a902ab58e758 +Block 0003 [ 4]: 4c31bf2c0f5a3e20 +Block 0003 [ 5]: 76b348a560871883 +Block 0003 [ 6]: 6b742fcacab4cd9d +Block 0003 [ 7]: 4d7181fe894748dd +Block 0003 [ 8]: a0f9122c42cfa0fa +Block 0003 [ 9]: b77b3a2b3a94836d +Block 0003 [ 10]: b2ec7046aa8e8c6e +Block 0003 [ 11]: f172c7888965cdf6 +Block 0003 [ 12]: d6c24405293e85f2 +Block 0003 [ 13]: 69ca9337912f8f1d +Block 0003 [ 14]: d11fd34b79f60203 +Block 0003 [ 15]: 7a7368c3416d7757 +Block 0003 [ 16]: 8a60c9c442d9a50b +Block 0003 [ 17]: e5003305596ff3f5 +Block 0003 [ 18]: 1f5a977083174168 +Block 0003 [ 19]: 3d2084004885c012 +Block 0003 [ 20]: 0dfcdb66c89fe7f8 +Block 0003 [ 21]: 7a542bc74aa62c61 +Block 0003 [ 22]: bbae5509f2bafa64 +Block 0003 [ 23]: 9c2fbdddab52a811 +Block 0003 [ 24]: 4eb45004f32e646c +Block 0003 [ 25]: 83575377e39c935c +Block 0003 [ 26]: 32c30d2dc888c05d +Block 0003 [ 27]: cf6c2f4e2e886954 +Block 0003 [ 28]: d763036a6ba7467e +Block 0003 [ 29]: 2949a553cb7bfb44 +Block 0003 [ 30]: 39e9a683d74a4a47 +Block 0003 [ 31]: 510b42f86fb01c3c +Block 0003 [ 32]: 1db70a935a24a08a +Block 0003 [ 33]: 37a4c61b5b50f6ce +Block 0003 [ 34]: 2ff60aebaff4c12c +Block 0003 [ 35]: cc43a35d3f92cb2b +Block 0003 [ 36]: e47a246363c0cf53 +Block 0003 [ 37]: 20c725e9838000f0 +Block 0003 [ 38]: 4e9e4630b154de4e +Block 0003 [ 39]: 9d91f5cab8ef6ca3 +Block 0003 [ 40]: c09cd72657c2b2e3 +Block 0003 [ 41]: 00c941ef8d77923a +Block 0003 [ 42]: c4a86260ceaa44c5 +Block 0003 [ 43]: b23cfde52879f0bb +Block 0003 [ 44]: 055a459516341951 +Block 0003 [ 45]: 15b38a4de76a86e3 +Block 0003 [ 46]: 500162d1d85b0734 +Block 0003 [ 47]: e4c121a06eeb8d00 +Block 0003 [ 48]: 59d00180f6bf9cab +Block 0003 [ 49]: 520a19a8621155f7 +Block 0003 [ 50]: b7ac913b05b0cdd7 +Block 0003 [ 51]: 2498e9f4684d695e +Block 0003 [ 52]: 9ff6533b36a439bd +Block 0003 [ 53]: b7e710b1b252173e +Block 0003 [ 54]: cddcdfc9bd2c30cc +Block 0003 [ 55]: 85d624f3b2903c78 +Block 0003 [ 56]: 1e0aebc7e45117e9 +Block 0003 [ 57]: a776b6281cd6b1f9 +Block 0003 [ 58]: 8a06bb51088eb00b +Block 0003 [ 59]: b59c40e38ff6ea03 +Block 0003 [ 60]: afc0cc4b3623e16d +Block 0003 [ 61]: 782c4c3d0474a5cf +Block 0003 [ 62]: 56ce8d13748c3e5b +Block 0003 [ 63]: c977975a1ff7a1f9 +Block 0003 [ 64]: 21546cc77fa04c11 +Block 0003 [ 65]: 23445ab1a31c4fcd +Block 0003 [ 66]: 329b27a58fa9ec0c +Block 0003 [ 67]: 1dd2c06440b93077 +Block 0003 [ 68]: b3be12b007cd0186 +Block 0003 [ 69]: 4a03029fa6a0b54b +Block 0003 [ 70]: a3cc4fdae3a06c28 +Block 0003 [ 71]: ea9497ff15ab73ee +Block 0003 [ 72]: e06aa57b0d93e9e6 +Block 0003 [ 73]: b8f1138ed2b5c2e4 +Block 0003 [ 74]: ca65309d17c912be +Block 0003 [ 75]: a79480072494d1df +Block 0003 [ 76]: a2cc762dc3085ebf +Block 0003 [ 77]: 4d8804b94f150480 +Block 0003 [ 78]: 010bc1d1d2d5e6a9 +Block 0003 [ 79]: 618deb456508ef66 +Block 0003 [ 80]: f4660b0c8ab78a72 +Block 0003 [ 81]: b8cafe97718c4b0c +Block 0003 [ 82]: 9e393ddbe4897c96 +Block 0003 [ 83]: 1941204736b1e333 +Block 0003 [ 84]: 819495456568a0e5 +Block 0003 [ 85]: 069191b00125985b +Block 0003 [ 86]: 8df6f2bc73a8f609 +Block 0003 [ 87]: d02410b0b3af460f +Block 0003 [ 88]: 5ad235682f1a4e6e +Block 0003 [ 89]: 31cc343b49bb3c5c +Block 0003 [ 90]: 1c5f33a9a895121f +Block 0003 [ 91]: dcfadc3f76c2a0db +Block 0003 [ 92]: cb87e12e0347cca2 +Block 0003 [ 93]: c3dadf345a0bf265 +Block 0003 [ 94]: 84c3d44034671090 +Block 0003 [ 95]: e0e9f65f68c7cc0f +Block 0003 [ 96]: 882d861688f924bc +Block 0003 [ 97]: 9cfc66984007086d +Block 0003 [ 98]: 91dc692e2ce706b9 +Block 0003 [ 99]: 86d088cd01e55500 +Block 0003 [100]: aafd183298ff1003 +Block 0003 [101]: aa4d5020b5ebfb5f +Block 0003 [102]: 98a71f8dbbdbf24c +Block 0003 [103]: 640f07762fee838b +Block 0003 [104]: 9bbfdd5f9f23460a +Block 0003 [105]: c1e3157b2e7cea32 +Block 0003 [106]: 205acdbfea7304f5 +Block 0003 [107]: d3903de60ff877fb +Block 0003 [108]: 2ffff2f401c666c2 +Block 0003 [109]: 71d728360ff4d066 +Block 0003 [110]: 1fa9cd9997943d58 +Block 0003 [111]: 37cd8137f9ed1517 +Block 0003 [112]: 4138ff82ec94ce81 +Block 0003 [113]: c5bdc5c497fb5efc +Block 0003 [114]: 765279b71bb1a03d +Block 0003 [115]: d41d5e2e112f0fa8 +Block 0003 [116]: 357a184df3d5a794 +Block 0003 [117]: e81a33a463f91f12 +Block 0003 [118]: 1b5e5040169f5195 +Block 0003 [119]: 65a6ceba06b05e8d +Block 0003 [120]: 238160bc1d2bf802 +Block 0003 [121]: 003f752624f1a8b8 +Block 0003 [122]: 89ee084762af8511 +Block 0003 [123]: 543d6f278a505ed6 +Block 0003 [124]: 14bf434e3d68965e +Block 0003 [125]: 3a8ff0179c0b0acc +Block 0003 [126]: ded1168930b9ebb6 +Block 0003 [127]: 50caf52f839d5504 +Block 0004 [ 0]: af9eced90a3d60a2 +Block 0004 [ 1]: 3458bd6dccdc5a86 +Block 0004 [ 2]: 05f6a062431d2afa +Block 0004 [ 3]: 40e258d40e9c80b6 +Block 0004 [ 4]: 1c6db8b3fd4c0899 +Block 0004 [ 5]: d5216db6d8913af1 +Block 0004 [ 6]: 80778a715660665f +Block 0004 [ 7]: 82db35653611f89f +Block 0004 [ 8]: 5d4bd06fff5fdcdf +Block 0004 [ 9]: 50059e85fca48e27 +Block 0004 [ 10]: a9568cb5426a5236 +Block 0004 [ 11]: 4ff2f5eaab600283 +Block 0004 [ 12]: 4577b19f9ff16d6b +Block 0004 [ 13]: 34d6b1d3fc137020 +Block 0004 [ 14]: a13ba3cc8c9b1783 +Block 0004 [ 15]: 48d97e808f8af599 +Block 0004 [ 16]: 718a8c5091f5c05a +Block 0004 [ 17]: d767e72321690b90 +Block 0004 [ 18]: 10ed05706530391d +Block 0004 [ 19]: a3da1bebae712116 +Block 0004 [ 20]: 3010dad96d0aa1cd +Block 0004 [ 21]: 078eecb48d148ae0 +Block 0004 [ 22]: 74672b83af77f91a +Block 0004 [ 23]: 3fa4fdfb8a92c047 +Block 0004 [ 24]: 96178f425ec4a875 +Block 0004 [ 25]: dd3fd3cce9ceac5e +Block 0004 [ 26]: 049865736c634c55 +Block 0004 [ 27]: bb322ce0a56bac6e +Block 0004 [ 28]: ca961724d6ea8c2d +Block 0004 [ 29]: af33db626bcba7d7 +Block 0004 [ 30]: 539c29974e7730fb +Block 0004 [ 31]: c267909579ef4313 +Block 0004 [ 32]: b9c8059b629272a0 +Block 0004 [ 33]: 3a18f4a5bc8e46e5 +Block 0004 [ 34]: 1888a2e964943b59 +Block 0004 [ 35]: 2380a9dd92f2ec21 +Block 0004 [ 36]: 9fc8021fe3043d67 +Block 0004 [ 37]: 107833c67f457b34 +Block 0004 [ 38]: 3e2ce4a56a45bb77 +Block 0004 [ 39]: 084a7ad0d3ef4922 +Block 0004 [ 40]: 8175a1738e9ce296 +Block 0004 [ 41]: c686afc17b2812e6 +Block 0004 [ 42]: c8e7b3598949ae60 +Block 0004 [ 43]: 667e47836b39bd99 +Block 0004 [ 44]: 3604e1597cc944ad +Block 0004 [ 45]: 7ab71831df29df52 +Block 0004 [ 46]: e889cfc1441d8415 +Block 0004 [ 47]: 762430a2d72ccf81 +Block 0004 [ 48]: 2f9a51b2e3112715 +Block 0004 [ 49]: 20099292f390a970 +Block 0004 [ 50]: 0b6c4d04e9754c82 +Block 0004 [ 51]: 3adc49b980633db3 +Block 0004 [ 52]: 8368e8fa2086f14e +Block 0004 [ 53]: e5369eeda68501e6 +Block 0004 [ 54]: 6fa74ecd57fa72f8 +Block 0004 [ 55]: d71a9415ba8dc920 +Block 0004 [ 56]: eb858d1ca26f6a40 +Block 0004 [ 57]: 28f7cc213b047e4a +Block 0004 [ 58]: c5042731bbd2b6ad +Block 0004 [ 59]: 5e2a0c937bb6adce +Block 0004 [ 60]: 2c1546f5dcd5ea09 +Block 0004 [ 61]: 0a55f02c93bef2f5 +Block 0004 [ 62]: 36439d472e564d9d +Block 0004 [ 63]: 3cf3e188d8724a5c +Block 0004 [ 64]: d20dcc19dfe8ee10 +Block 0004 [ 65]: 1e8ea45c14e22f6e +Block 0004 [ 66]: d9e188a0c2cd7de8 +Block 0004 [ 67]: 69878ffd2d67e813 +Block 0004 [ 68]: ca30fe88eb4a8303 +Block 0004 [ 69]: 3510ecb290818e10 +Block 0004 [ 70]: 577d78d8b0b762d0 +Block 0004 [ 71]: 7a3f510e17a35949 +Block 0004 [ 72]: bc5d883c6e8b23f7 +Block 0004 [ 73]: 1737df43b6c0f384 +Block 0004 [ 74]: a59f90005d06889b +Block 0004 [ 75]: c4f11cb4bece144b +Block 0004 [ 76]: 82b11dd2bd8e1499 +Block 0004 [ 77]: 242adaad084c4281 +Block 0004 [ 78]: ffa6ca17c08e29e7 +Block 0004 [ 79]: 37584bc6cf8344ad +Block 0004 [ 80]: 4062901ff4a9f07d +Block 0004 [ 81]: 20653350117ec63a +Block 0004 [ 82]: 45e642098a74abda +Block 0004 [ 83]: 89bed5a24c62d08d +Block 0004 [ 84]: 6e990f7008adee71 +Block 0004 [ 85]: 3c9126660bd152a9 +Block 0004 [ 86]: ef46fbf3e4fc19d4 +Block 0004 [ 87]: 4a711294a574aadc +Block 0004 [ 88]: d0efcf189dc02bcf +Block 0004 [ 89]: 0b9a48427ec38900 +Block 0004 [ 90]: 98e275b7e095d3f5 +Block 0004 [ 91]: 0353d666b93fb663 +Block 0004 [ 92]: a4646c2d8bfa4d1a +Block 0004 [ 93]: 52d08735a0ea0d9e +Block 0004 [ 94]: e55f869281c22581 +Block 0004 [ 95]: 46e82d4f204f0bad +Block 0004 [ 96]: fd26877918e173a5 +Block 0004 [ 97]: 6fdf6ec2bfa7b0f9 +Block 0004 [ 98]: ea146432e63186c4 +Block 0004 [ 99]: cd50784b0958662c +Block 0004 [100]: c25aff66357e24d1 +Block 0004 [101]: 99d34900b33f60d5 +Block 0004 [102]: 98a063f95e4bb934 +Block 0004 [103]: 4506dedfb4e77e5a +Block 0004 [104]: ad87e672cc7a4644 +Block 0004 [105]: e2965d2b0ae768ca +Block 0004 [106]: 52740c3dd4b833cd +Block 0004 [107]: 86a1f3edefdb6d8b +Block 0004 [108]: c5b1d035b9837203 +Block 0004 [109]: 694652d2340b99d6 +Block 0004 [110]: 2bf6e2963182a8d9 +Block 0004 [111]: 250d6c5d00fc762c +Block 0004 [112]: d2a822c642cbebce +Block 0004 [113]: 1a222412dcde3705 +Block 0004 [114]: f233dad5cdde3b9d +Block 0004 [115]: 7d72f0fac57caf91 +Block 0004 [116]: c2c83c5e69eca9d0 +Block 0004 [117]: 4b6f24ea92332019 +Block 0004 [118]: 80ac4c2f9eb482d6 +Block 0004 [119]: e52624e96ab034f2 +Block 0004 [120]: 273f6f30b19e5149 +Block 0004 [121]: d0a2128e22bb5ab7 +Block 0004 [122]: c6254c37b7c08c52 +Block 0004 [123]: a4e9aef8ecce1b94 +Block 0004 [124]: 333e39a2d3e1ce42 +Block 0004 [125]: c7ece998f84c8a3c +Block 0004 [126]: 702c957ff3364c06 +Block 0004 [127]: 06c2f7892027c350 +Block 0005 [ 0]: 37fb883b3937ac93 +Block 0005 [ 1]: 6acec54a53ba1331 +Block 0005 [ 2]: 4c4d2fd0e811a0b2 +Block 0005 [ 3]: f86ce63134bf480d +Block 0005 [ 4]: 04b31b850ceeff33 +Block 0005 [ 5]: ec4f3972779a5807 +Block 0005 [ 6]: 4a38a3f44fa47814 +Block 0005 [ 7]: bcb1991407ad6c02 +Block 0005 [ 8]: 0f82b1e0ba066aaa +Block 0005 [ 9]: f54bed9000ac6d55 +Block 0005 [ 10]: 481fa35fb39a97ec +Block 0005 [ 11]: 643ae4be056c1fc5 +Block 0005 [ 12]: 8d46d87b02bf389b +Block 0005 [ 13]: 5a7fdc9e765c2590 +Block 0005 [ 14]: a987d4731ceae07f +Block 0005 [ 15]: 83c199f1d90e4967 +Block 0005 [ 16]: 2563b5d5ef1bdddb +Block 0005 [ 17]: cc4a90082adb5576 +Block 0005 [ 18]: ccfbb01c7bdb2a09 +Block 0005 [ 19]: d78e46de3d4b41d4 +Block 0005 [ 20]: afafa14a5460b979 +Block 0005 [ 21]: 3973fa9623ec6c3e +Block 0005 [ 22]: 5425a2b596353a0d +Block 0005 [ 23]: e39d8e6a2702e7da +Block 0005 [ 24]: 665ff8a5fa7395ed +Block 0005 [ 25]: dc8ac092ad76cc8a +Block 0005 [ 26]: b2bad6d483d0f35b +Block 0005 [ 27]: 702b5502bc4d9f0a +Block 0005 [ 28]: 34b68078c136dbbd +Block 0005 [ 29]: c58b0e7c79d3760c +Block 0005 [ 30]: a26c53403f613aa6 +Block 0005 [ 31]: 6c4593e1dfb652c5 +Block 0005 [ 32]: 747ae28048698d2c +Block 0005 [ 33]: 3c30792dce14a383 +Block 0005 [ 34]: 7d4c52934c3c97ea +Block 0005 [ 35]: be9210487bc27afa +Block 0005 [ 36]: b1b0f786bd2ecd14 +Block 0005 [ 37]: 5e1483d330345f76 +Block 0005 [ 38]: b6bd1d623a641c03 +Block 0005 [ 39]: 9c2eef877e56f795 +Block 0005 [ 40]: e7169c587776a221 +Block 0005 [ 41]: cf5441b20cb71c90 +Block 0005 [ 42]: 69431b3b02dfeee6 +Block 0005 [ 43]: 495249d284250f7e +Block 0005 [ 44]: c69d107cd21df04c +Block 0005 [ 45]: 016b358679f15ece +Block 0005 [ 46]: f6ed30c43580ad07 +Block 0005 [ 47]: c8fa50877f0ad8d5 +Block 0005 [ 48]: d654182b26c4db2f +Block 0005 [ 49]: 28249e944de6e463 +Block 0005 [ 50]: fbf815ebca2f424a +Block 0005 [ 51]: d9c3c5996d1a615c +Block 0005 [ 52]: 1ed370fedf078cf4 +Block 0005 [ 53]: 3e8a6e37b9bedf55 +Block 0005 [ 54]: ef3369be5be150a9 +Block 0005 [ 55]: f4f724a2551fa487 +Block 0005 [ 56]: 088b9b009db5fc68 +Block 0005 [ 57]: 2e450de812063bb3 +Block 0005 [ 58]: fd20078b92ad2212 +Block 0005 [ 59]: ada2ab1a6d276600 +Block 0005 [ 60]: 2353d4e8ed05dcc8 +Block 0005 [ 61]: 48980a983637a4d3 +Block 0005 [ 62]: aefa1109f93347e1 +Block 0005 [ 63]: 0ced5850fbb88b4a +Block 0005 [ 64]: 433f25d571fb15c6 +Block 0005 [ 65]: b372ed489fd0a7f8 +Block 0005 [ 66]: d561dfd10da4202c +Block 0005 [ 67]: 4f5380cf14258bf6 +Block 0005 [ 68]: 9700f377438cc2a5 +Block 0005 [ 69]: a1c45cc8da4e3887 +Block 0005 [ 70]: 08b7d3ac75cea15d +Block 0005 [ 71]: 36e03cf3fbd05396 +Block 0005 [ 72]: c3fb7e03ba6f8fbc +Block 0005 [ 73]: 3f29718b41ff57c1 +Block 0005 [ 74]: d09946ec9b27aa37 +Block 0005 [ 75]: 4a0718a8f5616ac5 +Block 0005 [ 76]: e38cc23047827da9 +Block 0005 [ 77]: 002e16cd25071184 +Block 0005 [ 78]: 869182a986a7b7ee +Block 0005 [ 79]: 174a057e0e3b23a1 +Block 0005 [ 80]: 999aa42055b49c03 +Block 0005 [ 81]: c6d5b5d5120af131 +Block 0005 [ 82]: beb10bc4288cb0b7 +Block 0005 [ 83]: 214163d0c27f32e6 +Block 0005 [ 84]: 251a7d51579283e1 +Block 0005 [ 85]: ac0a7173e7268ccd +Block 0005 [ 86]: efabfb39669a0193 +Block 0005 [ 87]: 026de346a9670d9d +Block 0005 [ 88]: 15c15e1754978b30 +Block 0005 [ 89]: 977ebe9542e66de7 +Block 0005 [ 90]: c8fe60d834be0957 +Block 0005 [ 91]: 7e16de91837068a8 +Block 0005 [ 92]: 27785e000961550b +Block 0005 [ 93]: 9a5a8f77b6cba683 +Block 0005 [ 94]: f90378fa99cfd37b +Block 0005 [ 95]: f8c3ccad6676d6fe +Block 0005 [ 96]: c0b658afd44ad15b +Block 0005 [ 97]: b2580e884ffc329d +Block 0005 [ 98]: f79de1cc43658261 +Block 0005 [ 99]: 4536d5eb3f448ee0 +Block 0005 [100]: a4815de2946fe975 +Block 0005 [101]: 2295138fae33b9aa +Block 0005 [102]: 32947ba2cb293586 +Block 0005 [103]: 2c96c493e71235d9 +Block 0005 [104]: 546b634b59350c17 +Block 0005 [105]: bfd82c1e545abf86 +Block 0005 [106]: ede8399895eafe84 +Block 0005 [107]: 9027ddacc2ae573f +Block 0005 [108]: 7da810b9c7bf4af7 +Block 0005 [109]: 7e7de19cb6f96d91 +Block 0005 [110]: 08b249fed8b5cf45 +Block 0005 [111]: 90aae1f0d65f196d +Block 0005 [112]: 0cb847511541ea6b +Block 0005 [113]: 450c0c049ed61d99 +Block 0005 [114]: 8a095dd9c6d54157 +Block 0005 [115]: 82a4fbf93f735094 +Block 0005 [116]: d55fbc420c629102 +Block 0005 [117]: 25c9bf0fe571f5dd +Block 0005 [118]: 80207b546203df4c +Block 0005 [119]: 1cb70dea46305eef +Block 0005 [120]: 890003e8e39ecf29 +Block 0005 [121]: e558c275564dbf38 +Block 0005 [122]: 1d060fe29707d16b +Block 0005 [123]: 5037a90495063117 +Block 0005 [124]: e0d0226c0fce2c3c +Block 0005 [125]: ac55085dea1eef97 +Block 0005 [126]: d0a0f531e14cb58e +Block 0005 [127]: dda1781abb811d29 +Block 0006 [ 0]: a4000cb5a1cc76dd +Block 0006 [ 1]: 0c6a94a4086be124 +Block 0006 [ 2]: 819335f8932114b9 +Block 0006 [ 3]: d857ab033288c788 +Block 0006 [ 4]: f2e4630dbc30fddb +Block 0006 [ 5]: a1e8320af2866db4 +Block 0006 [ 6]: e225b40713f854ee +Block 0006 [ 7]: 088f90ee8bae291d +Block 0006 [ 8]: a43322a0c40abfbc +Block 0006 [ 9]: 83a4793e21d20b58 +Block 0006 [ 10]: 4d96e775f789cea2 +Block 0006 [ 11]: 30bd3620326a7f96 +Block 0006 [ 12]: d09c9035cd910544 +Block 0006 [ 13]: 81d572ae2eeb8006 +Block 0006 [ 14]: ceaf14127b62344b +Block 0006 [ 15]: 4f433cb45b3d6b0d +Block 0006 [ 16]: 31725df5018af041 +Block 0006 [ 17]: 927a1ed74e91cf76 +Block 0006 [ 18]: 555f5323de185080 +Block 0006 [ 19]: 2e303b4ff3920046 +Block 0006 [ 20]: 723ed0de113fa48b +Block 0006 [ 21]: 1d016713b6fff742 +Block 0006 [ 22]: c50a5aa3a0a0cfdb +Block 0006 [ 23]: a7d2e5db07f1475b +Block 0006 [ 24]: cd8324b0a3c0cad5 +Block 0006 [ 25]: 22da45be8cd1ec58 +Block 0006 [ 26]: 3d4f99a20af4ff73 +Block 0006 [ 27]: 5de2f3351e5fb287 +Block 0006 [ 28]: 3fedb44f445c865f +Block 0006 [ 29]: 2dcc364d689235c1 +Block 0006 [ 30]: 8fd3800f89627a4f +Block 0006 [ 31]: d4fd9bd4cc90b65a +Block 0006 [ 32]: d2453a16c4292b6c +Block 0006 [ 33]: d5c78b9e8066bc63 +Block 0006 [ 34]: 3de47a08c1ca30a4 +Block 0006 [ 35]: d226d79350129999 +Block 0006 [ 36]: 94017a9989f909b7 +Block 0006 [ 37]: 973151520b780bc4 +Block 0006 [ 38]: b852007fba960687 +Block 0006 [ 39]: ab0780741ff20149 +Block 0006 [ 40]: a9324a16f54ed9c4 +Block 0006 [ 41]: 393abfca3807175c +Block 0006 [ 42]: 690a91e3d9751ccb +Block 0006 [ 43]: f63676a1df3693a0 +Block 0006 [ 44]: c947250437a22b2f +Block 0006 [ 45]: 783c5571a97b606f +Block 0006 [ 46]: 6d05d793cd281272 +Block 0006 [ 47]: 60f5c5e244e4c08e +Block 0006 [ 48]: ea2ec7dabb54f430 +Block 0006 [ 49]: c6dce5092746fa3d +Block 0006 [ 50]: 973bc36c87c55018 +Block 0006 [ 51]: 0b564299f84975bb +Block 0006 [ 52]: f3ce81c95f39913d +Block 0006 [ 53]: 81357040f6d08a8a +Block 0006 [ 54]: dc40acbc9c27bcd3 +Block 0006 [ 55]: ae401fdd7ee471e6 +Block 0006 [ 56]: 80740241c5495c34 +Block 0006 [ 57]: cdb0a501fcfe4787 +Block 0006 [ 58]: 9f23f2af6531784a +Block 0006 [ 59]: e1c3475e31535d8f +Block 0006 [ 60]: 726770b5755e3324 +Block 0006 [ 61]: a5d7dfd224b844a3 +Block 0006 [ 62]: c7d7309774a868f9 +Block 0006 [ 63]: fde43b69a05ff27a +Block 0006 [ 64]: 78ba6d2fd465062e +Block 0006 [ 65]: ebc28526805859d7 +Block 0006 [ 66]: fd781d5281e8c097 +Block 0006 [ 67]: abe63b415d6c8429 +Block 0006 [ 68]: 73c804af9ac76b22 +Block 0006 [ 69]: c920fa3ad6d82433 +Block 0006 [ 70]: 15baf3d384adcebe +Block 0006 [ 71]: a83ad88c365bb9cd +Block 0006 [ 72]: a4d5ce841d92a276 +Block 0006 [ 73]: 5462f046b839af67 +Block 0006 [ 74]: 5b2edf414b026135 +Block 0006 [ 75]: ab768f985123b080 +Block 0006 [ 76]: f3e05481874d72b3 +Block 0006 [ 77]: ce73c152e3ff2f96 +Block 0006 [ 78]: 78bdc7edc3985401 +Block 0006 [ 79]: 6e3f52fa030d9227 +Block 0006 [ 80]: 69fc3df28dd982b6 +Block 0006 [ 81]: 87214bb7ffc2dc1d +Block 0006 [ 82]: f45a7ba051ba8110 +Block 0006 [ 83]: 2f9ccac16c85693c +Block 0006 [ 84]: f4447e2b8b6edbe6 +Block 0006 [ 85]: 7cad68391b787930 +Block 0006 [ 86]: 538850758753fc1a +Block 0006 [ 87]: fb8ee00e51149914 +Block 0006 [ 88]: c6936b88c520b802 +Block 0006 [ 89]: dca494f588a65fe3 +Block 0006 [ 90]: 7e261e838c252e46 +Block 0006 [ 91]: 8f4a0b941c47c9b6 +Block 0006 [ 92]: 773509cad95e3333 +Block 0006 [ 93]: 1475ee7d56a9da13 +Block 0006 [ 94]: feafdd14849f4089 +Block 0006 [ 95]: 2a1030fc9cae7e7c +Block 0006 [ 96]: d8fc6122c52cccaa +Block 0006 [ 97]: 02b7b807639b4d85 +Block 0006 [ 98]: 61712d9de40c2e87 +Block 0006 [ 99]: 345ace9a8469b06d +Block 0006 [100]: 9dcaa04d2aaa46a4 +Block 0006 [101]: 5c7f906c18c3b569 +Block 0006 [102]: 96cf6a3057491690 +Block 0006 [103]: 92341fd19b9555b4 +Block 0006 [104]: cd7be1cbec00959e +Block 0006 [105]: fbd2fc3c8a3d82e5 +Block 0006 [106]: f8bead38c9ad1356 +Block 0006 [107]: 5b0b7f47c9a71f9e +Block 0006 [108]: 670e7bfc0c037aa1 +Block 0006 [109]: 09a571475b06b55f +Block 0006 [110]: 2aaa535f4b5af572 +Block 0006 [111]: 47c00b90cdf87c08 +Block 0006 [112]: 985306fd8b26771f +Block 0006 [113]: 06b05349f47bfc1a +Block 0006 [114]: ca411ea698000db5 +Block 0006 [115]: cb85ea28dca6abf1 +Block 0006 [116]: 77b17ea121cd0348 +Block 0006 [117]: e5e4aa917ff9a4ba +Block 0006 [118]: 996faa37d20b0cb0 +Block 0006 [119]: f8dc838f2c8f7f3b +Block 0006 [120]: 4da7fed9fc5e3b3a +Block 0006 [121]: c833da16dea13c63 +Block 0006 [122]: efcaca85677958bc +Block 0006 [123]: a64498dca760f872 +Block 0006 [124]: 9a1bbadb8aa68b52 +Block 0006 [125]: a319d574ee5b8c46 +Block 0006 [126]: f4ff528d79cfee8f +Block 0006 [127]: b1af436e7c0b1c92 +Block 0007 [ 0]: e3ca02813668c742 +Block 0007 [ 1]: a7729db1aede304c +Block 0007 [ 2]: 9bb0d397cebc3d49 +Block 0007 [ 3]: 21f5d7dcd2e2fb53 +Block 0007 [ 4]: 2a31d5bdf05b7362 +Block 0007 [ 5]: 69239eb5a0b4bd31 +Block 0007 [ 6]: 48552e28bae9c687 +Block 0007 [ 7]: 23a438f8a232653a +Block 0007 [ 8]: aaaaf7b7895be8a6 +Block 0007 [ 9]: 567017d6a21230c2 +Block 0007 [ 10]: 00e9a00244ddff2a +Block 0007 [ 11]: b39a550c9200aedb +Block 0007 [ 12]: af8eeb528d432076 +Block 0007 [ 13]: e306f8fcfb5e1673 +Block 0007 [ 14]: cb6f324d48ea87de +Block 0007 [ 15]: c9279674b24388bb +Block 0007 [ 16]: 747e27bb51c50f7d +Block 0007 [ 17]: 51c2bb725842f6c2 +Block 0007 [ 18]: 14c56a15a8e3de1c +Block 0007 [ 19]: da3c7cb2760f3a76 +Block 0007 [ 20]: 75db3ede9cdc7ba1 +Block 0007 [ 21]: 4272ea974cdb8c1a +Block 0007 [ 22]: e99d25ca0e6883e9 +Block 0007 [ 23]: ec88b2fb97bb6b1d +Block 0007 [ 24]: aee2d46370e3900f +Block 0007 [ 25]: 3df19ce3caaf9db0 +Block 0007 [ 26]: 3bee45344fa45a62 +Block 0007 [ 27]: 259b38d5bfb723e5 +Block 0007 [ 28]: 782a1894acdd67eb +Block 0007 [ 29]: dd69343d8b2a42b0 +Block 0007 [ 30]: adb49da918224aae +Block 0007 [ 31]: e20ca605df492741 +Block 0007 [ 32]: 5c786e5c5f4a6ba7 +Block 0007 [ 33]: 3df1691d217fc686 +Block 0007 [ 34]: 7da6d378e182ddeb +Block 0007 [ 35]: 24078fd55514fdc0 +Block 0007 [ 36]: 996bed5355b02441 +Block 0007 [ 37]: 0c3a5c248f888609 +Block 0007 [ 38]: 2ec1ed046e161f71 +Block 0007 [ 39]: c1639cff4bf02347 +Block 0007 [ 40]: 87b135dc7f7a8b9a +Block 0007 [ 41]: 43ce7d06f71ffa98 +Block 0007 [ 42]: 7d3798f0664c9059 +Block 0007 [ 43]: e326063f0a25eed9 +Block 0007 [ 44]: 00abf225c2807f91 +Block 0007 [ 45]: b8aac8dccf1c912d +Block 0007 [ 46]: 56bc16c7ba15ef5b +Block 0007 [ 47]: bcd08294729e70f2 +Block 0007 [ 48]: db341d8367232a64 +Block 0007 [ 49]: 0dc9b2b57218845d +Block 0007 [ 50]: 12568bb40ff2045d +Block 0007 [ 51]: 5a62b75c8bb83c21 +Block 0007 [ 52]: c17362581e812f90 +Block 0007 [ 53]: 4580f3b28720b90e +Block 0007 [ 54]: b946d0208b06c214 +Block 0007 [ 55]: c9ef31df9b2d4378 +Block 0007 [ 56]: 6aa97cb883cdf5e4 +Block 0007 [ 57]: 42275d7f7e29da30 +Block 0007 [ 58]: fcc5b7368657d74d +Block 0007 [ 59]: adf37d794e5f9d31 +Block 0007 [ 60]: 97b138514fc74fd8 +Block 0007 [ 61]: 9eb6b55fa47fc297 +Block 0007 [ 62]: 754051ffac48b541 +Block 0007 [ 63]: 1d8b95b09af8fd1a +Block 0007 [ 64]: acd16a127bced27e +Block 0007 [ 65]: ae3382e9f75feac7 +Block 0007 [ 66]: c76a1f20a5c9a347 +Block 0007 [ 67]: dbe7136e2087e8d8 +Block 0007 [ 68]: 577029805d2cfb5d +Block 0007 [ 69]: 78dee0f47b02e323 +Block 0007 [ 70]: eeaa97dc4cb11975 +Block 0007 [ 71]: bdfa8f0f44599323 +Block 0007 [ 72]: 7f1d58af698b5e71 +Block 0007 [ 73]: fc5601043ef0b4e1 +Block 0007 [ 74]: 85eaa5dcd3db9539 +Block 0007 [ 75]: 2f357fa81f4adb91 +Block 0007 [ 76]: e91a41bc924a8ff2 +Block 0007 [ 77]: f70375d6d1380304 +Block 0007 [ 78]: c1bb93a4b3deb5d2 +Block 0007 [ 79]: 6c75ed60f7bd386e +Block 0007 [ 80]: 2a6417c70ca6da09 +Block 0007 [ 81]: 496bc0f2253ee4d6 +Block 0007 [ 82]: 385397524a41a976 +Block 0007 [ 83]: 385e12a008ae8ace +Block 0007 [ 84]: 94ac859b0438f0b6 +Block 0007 [ 85]: 2200d981da6dccad +Block 0007 [ 86]: 6f6f3c5730b2bac1 +Block 0007 [ 87]: 6e4ca80bc0ba5194 +Block 0007 [ 88]: 65a5bd29d8321a5c +Block 0007 [ 89]: b62cc59f27aaad04 +Block 0007 [ 90]: d923fdae147bc40c +Block 0007 [ 91]: 9c616bd57b7e84ae +Block 0007 [ 92]: ab85da331161632c +Block 0007 [ 93]: 1f829ab9e3d82e0f +Block 0007 [ 94]: a1a0cb5d41abd087 +Block 0007 [ 95]: 65d1a44fa4f74d71 +Block 0007 [ 96]: 0fff9f47af53d7bc +Block 0007 [ 97]: a6137e578c90212a +Block 0007 [ 98]: 1952ddf5f0d8559e +Block 0007 [ 99]: 82caa6d17701ce93 +Block 0007 [100]: ce2c4f2caa70d647 +Block 0007 [101]: 43b6f388fc63fceb +Block 0007 [102]: f0ab2a4a5f2401eb +Block 0007 [103]: 73f81ab2ff30012b +Block 0007 [104]: 0d48f1ed17ad305d +Block 0007 [105]: b9e395a5436b964b +Block 0007 [106]: 26ef4df90b6def84 +Block 0007 [107]: e2fe192b2e7fd243 +Block 0007 [108]: 2a1a94bfc3284834 +Block 0007 [109]: 20d972830befddeb +Block 0007 [110]: c4f665c5b4aae334 +Block 0007 [111]: dfc863e717497389 +Block 0007 [112]: c9d20e095e714d4a +Block 0007 [113]: 080e99e41e40ccd2 +Block 0007 [114]: 155244fecd9b4d56 +Block 0007 [115]: 0390aa4affdc169a +Block 0007 [116]: 24fd146729ad23c2 +Block 0007 [117]: 6c1c75d802e768bd +Block 0007 [118]: 18a2e91cc583305c +Block 0007 [119]: 38df18475a423feb +Block 0007 [120]: 5debbde2af61f810 +Block 0007 [121]: aeaca5dee3a59241 +Block 0007 [122]: bcde39331a1ecc97 +Block 0007 [123]: fbb5f3387dc6ee45 +Block 0007 [124]: 3a6761898cf1de67 +Block 0007 [125]: 274e953bd9e0c65a +Block 0007 [126]: 207eee4dbea76ede +Block 0007 [127]: 5ae4c378c10596ed +Block 0008 [ 0]: 7a4558382ec26ffe +Block 0008 [ 1]: bfb3a4220ee33bec +Block 0008 [ 2]: 0bb9abef17c12091 +Block 0008 [ 3]: 2d1a5e78e0315a51 +Block 0008 [ 4]: 5229abb2e02f3c9c +Block 0008 [ 5]: 4bf95fcf42690b6a +Block 0008 [ 6]: 69f9c812e04e0a23 +Block 0008 [ 7]: b9a9776bf9a9ebef +Block 0008 [ 8]: 4c68c489cd6f9f2f +Block 0008 [ 9]: d8aeafa31f1b226f +Block 0008 [ 10]: ab3999523eef3655 +Block 0008 [ 11]: 522930a175b1c971 +Block 0008 [ 12]: 6d854994a052c568 +Block 0008 [ 13]: 4f6a0b0e9ad28cee +Block 0008 [ 14]: 9ccbd1b8073aca10 +Block 0008 [ 15]: 9cb57f7137ccf8e4 +Block 0008 [ 16]: c3b6b259a447ec16 +Block 0008 [ 17]: c7d28a929ba8a4b9 +Block 0008 [ 18]: ef07034d2c437791 +Block 0008 [ 19]: 886507bd0b23dd4a +Block 0008 [ 20]: 439b59baa42dddab +Block 0008 [ 21]: adca3d7066d8c1c9 +Block 0008 [ 22]: 237de3c198c75d7e +Block 0008 [ 23]: 14a12b61a00c27d8 +Block 0008 [ 24]: 21ec3e3b68c03bea +Block 0008 [ 25]: 62f145b5bdfd0265 +Block 0008 [ 26]: 441c29b7ab81e019 +Block 0008 [ 27]: 721250f6ba37cec5 +Block 0008 [ 28]: 4f1d66952a460eac +Block 0008 [ 29]: 36c90c6c08958ba0 +Block 0008 [ 30]: 36e0d6b302c4c43d +Block 0008 [ 31]: a1036de72d3a24c4 +Block 0008 [ 32]: 5eb1b5a99de68da2 +Block 0008 [ 33]: d0f436a3c1bc2ac6 +Block 0008 [ 34]: bde158d75549813d +Block 0008 [ 35]: c747c78b6c871a27 +Block 0008 [ 36]: bf6583d6d6568f05 +Block 0008 [ 37]: 67752ac1e4e6d2a8 +Block 0008 [ 38]: d400789d1a2c99b6 +Block 0008 [ 39]: 4062fc2df7422502 +Block 0008 [ 40]: 16f312161d62c8ca +Block 0008 [ 41]: b73c24e98ec33c57 +Block 0008 [ 42]: a5051349edae2a72 +Block 0008 [ 43]: b79a6d8a2aaec726 +Block 0008 [ 44]: bc2138ff076b8662 +Block 0008 [ 45]: b6572caea7fba1b6 +Block 0008 [ 46]: 602ac98c8a63ace9 +Block 0008 [ 47]: dd7ef06b16122ceb +Block 0008 [ 48]: 80a999eb61bd8d70 +Block 0008 [ 49]: 9b7d45dbc341d857 +Block 0008 [ 50]: ac4e67fabca37aa9 +Block 0008 [ 51]: f9c524809e716091 +Block 0008 [ 52]: 619639e9fb27b57e +Block 0008 [ 53]: 5c1608ab33ed5ed2 +Block 0008 [ 54]: 369589c03d0eafa7 +Block 0008 [ 55]: a7914d392d81cc98 +Block 0008 [ 56]: 83759d9856a94944 +Block 0008 [ 57]: 9cfee9c2a8cb1780 +Block 0008 [ 58]: 30fe1eeac6982f47 +Block 0008 [ 59]: f4548a258a723f75 +Block 0008 [ 60]: 9aa833ecedeb3db1 +Block 0008 [ 61]: 12bad08144aafdfd +Block 0008 [ 62]: ff87f476fa549ee1 +Block 0008 [ 63]: 9bfcd44245b5d2d0 +Block 0008 [ 64]: 3a11a5b0fb4ff669 +Block 0008 [ 65]: ccfb7ba588c3d8fa +Block 0008 [ 66]: d8fd851205d9a244 +Block 0008 [ 67]: 4417f445a9a3d69d +Block 0008 [ 68]: 6721e7f561f6193f +Block 0008 [ 69]: ff39a930ac96214a +Block 0008 [ 70]: f0a33cfe65e8e5a7 +Block 0008 [ 71]: 906c6ae625eba5ef +Block 0008 [ 72]: 9ff110b00db8cf82 +Block 0008 [ 73]: a50a37b4ec50baef +Block 0008 [ 74]: aea63d8d8ab312b8 +Block 0008 [ 75]: 38bcee3687cfd826 +Block 0008 [ 76]: f55e6ebeeb5943f1 +Block 0008 [ 77]: 0cf154b24e0f7114 +Block 0008 [ 78]: 6e6149f3381c77da +Block 0008 [ 79]: d2c808920c78012f +Block 0008 [ 80]: 28375eb951f79538 +Block 0008 [ 81]: f84d4a372c6ac727 +Block 0008 [ 82]: 18e8fd6355ae1e8b +Block 0008 [ 83]: 993b2759755c6511 +Block 0008 [ 84]: fa0ad100b03f4a83 +Block 0008 [ 85]: 26d937298697431b +Block 0008 [ 86]: 2667bcd9fa134517 +Block 0008 [ 87]: 25bf69ea01c9f43b +Block 0008 [ 88]: 651d7711288dfee6 +Block 0008 [ 89]: dbdbc71ad1d3d8e6 +Block 0008 [ 90]: 19a2bc2962073d38 +Block 0008 [ 91]: 6fed17191de5eb87 +Block 0008 [ 92]: d00e7248d67d818f +Block 0008 [ 93]: 552f48b24a3c532d +Block 0008 [ 94]: 92f601c4a12ca656 +Block 0008 [ 95]: 6bd72e8382bab9f4 +Block 0008 [ 96]: 87800dd5e699ffa0 +Block 0008 [ 97]: 62051340716b1174 +Block 0008 [ 98]: cc61f428a6bff2ab +Block 0008 [ 99]: 54a69e44d4ce3a2c +Block 0008 [100]: 6496d5318c1f8a48 +Block 0008 [101]: bb871f31a81fa4a5 +Block 0008 [102]: 6a74236c72414426 +Block 0008 [103]: 15bae3add20aca96 +Block 0008 [104]: c80ea241cd5f97a8 +Block 0008 [105]: c04bdaaefaca448e +Block 0008 [106]: 81e3c2a697fe8f89 +Block 0008 [107]: 3be29e5ef72ea2d2 +Block 0008 [108]: 3f6b73d9c412839a +Block 0008 [109]: a8147b4754e46f0a +Block 0008 [110]: 29a478f91ff30eb8 +Block 0008 [111]: afe171a02f8ab002 +Block 0008 [112]: 14402c72b6ed606a +Block 0008 [113]: 0fc6cf88e4b26b79 +Block 0008 [114]: 1371cfaf137a4a36 +Block 0008 [115]: 3508f7e250e4812b +Block 0008 [116]: 6c0cdce1e3cec82e +Block 0008 [117]: b2e134c697f67e2d +Block 0008 [118]: 059929cfb84c8223 +Block 0008 [119]: 934dd6d510a690af +Block 0008 [120]: 26e3c05f2c8e2eb8 +Block 0008 [121]: 9e05231042675d2f +Block 0008 [122]: f8dfaedd456045cd +Block 0008 [123]: 0504ccf5fc2d1bf3 +Block 0008 [124]: f0345bbcc1d562ce +Block 0008 [125]: 2bdf71543425789a +Block 0008 [126]: 1b2ae340f1eb41a0 +Block 0008 [127]: 6ec035c341932b16 +Block 0009 [ 0]: 76da9663625cefa5 +Block 0009 [ 1]: 14d8f3ea4efe924a +Block 0009 [ 2]: d971d85251e15d77 +Block 0009 [ 3]: 1c25e2e430baeda6 +Block 0009 [ 4]: 0c4de1e3dbbf5aa1 +Block 0009 [ 5]: 6bf912dd75d1ebee +Block 0009 [ 6]: 89c6fd1e272626f6 +Block 0009 [ 7]: 4267979560731667 +Block 0009 [ 8]: bba1c48ef0407566 +Block 0009 [ 9]: bf22ba8f0c8db099 +Block 0009 [ 10]: abf49acd22b68ee7 +Block 0009 [ 11]: 19721b88f46e7b15 +Block 0009 [ 12]: 7b2f6dac68e7509c +Block 0009 [ 13]: d74ad4e90c4b1a0b +Block 0009 [ 14]: b02f8f4b13ee4aed +Block 0009 [ 15]: 3435fb7ceaebaf14 +Block 0009 [ 16]: cb59f285f76ecd91 +Block 0009 [ 17]: 19a98fac16083d0f +Block 0009 [ 18]: a6d6f2e7f0a10405 +Block 0009 [ 19]: b89f8e247760352b +Block 0009 [ 20]: 104507b7b68bfc06 +Block 0009 [ 21]: de351c2819b20286 +Block 0009 [ 22]: 9ec1c7aa3e8073a2 +Block 0009 [ 23]: 7c2c46aa130f6c1b +Block 0009 [ 24]: 5ac3a947e461ab4f +Block 0009 [ 25]: eca30a19e7455c87 +Block 0009 [ 26]: 9640d7b0113b5e71 +Block 0009 [ 27]: c896d6339618e6fb +Block 0009 [ 28]: d52d34642b92723e +Block 0009 [ 29]: 2a55ca129d38038e +Block 0009 [ 30]: 8a6dc3d7ceec85e9 +Block 0009 [ 31]: 7ba681ec3a53db83 +Block 0009 [ 32]: 3b9583434b7b2859 +Block 0009 [ 33]: 88bb320d5478546c +Block 0009 [ 34]: 09fe2e25f91bfd7a +Block 0009 [ 35]: 63c2c517ed701e04 +Block 0009 [ 36]: 61d250293a71cb82 +Block 0009 [ 37]: 32bdc1b64b6104b9 +Block 0009 [ 38]: f70a89b6785a1d41 +Block 0009 [ 39]: fc82d03affdb8016 +Block 0009 [ 40]: 514005dcdaae909a +Block 0009 [ 41]: 9211e089b2f9cda7 +Block 0009 [ 42]: 1416e44e5ae8b972 +Block 0009 [ 43]: 939c49d1b0d529b8 +Block 0009 [ 44]: 1840aede76b35c76 +Block 0009 [ 45]: 310b737a4d04eb51 +Block 0009 [ 46]: d7a2a1b09c71f893 +Block 0009 [ 47]: 3ea296cca93d6bfc +Block 0009 [ 48]: 91d7f03844662ebe +Block 0009 [ 49]: 10ded6ff22ebf906 +Block 0009 [ 50]: d13a2d771145017e +Block 0009 [ 51]: 3108f839bba8758e +Block 0009 [ 52]: c14c4cee0d507f99 +Block 0009 [ 53]: 892d6f69c439966f +Block 0009 [ 54]: 2509cbab89dac3e3 +Block 0009 [ 55]: f3645d2ebd8256cb +Block 0009 [ 56]: ece3b3e870ccc6b0 +Block 0009 [ 57]: 8069fedcc032f7cd +Block 0009 [ 58]: f1f3c7c853ce120c +Block 0009 [ 59]: 0c98b4f251d8b58c +Block 0009 [ 60]: c09d5932ecedc2e5 +Block 0009 [ 61]: d77d7ed390080d2e +Block 0009 [ 62]: 6a22a1fc7572e784 +Block 0009 [ 63]: 278de8d4b1198f48 +Block 0009 [ 64]: 5750b28e6422a7dd +Block 0009 [ 65]: f7d1a934c4c4f05c +Block 0009 [ 66]: af4ec05117ea6427 +Block 0009 [ 67]: 6fb4f6920fc7e676 +Block 0009 [ 68]: f2d83512befbd4b1 +Block 0009 [ 69]: f86687a23209f3aa +Block 0009 [ 70]: c777825f7401eee4 +Block 0009 [ 71]: c662f86b0d3f349c +Block 0009 [ 72]: 382a513dd4753c4b +Block 0009 [ 73]: a048c89447a62b56 +Block 0009 [ 74]: a74aa6b3081d0308 +Block 0009 [ 75]: f13092e648766c28 +Block 0009 [ 76]: 03032bb4913dc1b2 +Block 0009 [ 77]: b6998b0e42c2e209 +Block 0009 [ 78]: ab39805f67bca821 +Block 0009 [ 79]: 2fc2a4955b78cbe7 +Block 0009 [ 80]: 159cba427791e7c3 +Block 0009 [ 81]: 3fe7d23e3c571718 +Block 0009 [ 82]: 5e0d6f1e911c52b3 +Block 0009 [ 83]: 22f7a61b77838204 +Block 0009 [ 84]: d77426be938516bb +Block 0009 [ 85]: f7cb3ce698976d4f +Block 0009 [ 86]: 2cdd848c7d0eae51 +Block 0009 [ 87]: ad6f6dcbf2c0d570 +Block 0009 [ 88]: 817c9ec46f060801 +Block 0009 [ 89]: 4b7f9262adfdacd0 +Block 0009 [ 90]: 9f31812f3e5255a8 +Block 0009 [ 91]: cd174aa2c8c16338 +Block 0009 [ 92]: 8789b5ef6ade172b +Block 0009 [ 93]: 39373711e9a96757 +Block 0009 [ 94]: dff1fb97ccd6a6c2 +Block 0009 [ 95]: d9d4e3179b5f13e8 +Block 0009 [ 96]: 0a304d46e94cca00 +Block 0009 [ 97]: c1209e65a601f90b +Block 0009 [ 98]: 23bc71e75c8c4214 +Block 0009 [ 99]: 712904d565d09b14 +Block 0009 [100]: 97cfd610419e9abb +Block 0009 [101]: 3472ae86e479b578 +Block 0009 [102]: fef9f9f5b4491d49 +Block 0009 [103]: 1237c8b4e9dceb47 +Block 0009 [104]: 8ecddaf0a2588160 +Block 0009 [105]: bb75acd9afe17a30 +Block 0009 [106]: abb9ec4eaaf15acd +Block 0009 [107]: 36ca450d2be94bfc +Block 0009 [108]: a5ba15a2f35969ca +Block 0009 [109]: 5fe9dd04c051aa7f +Block 0009 [110]: 766ae8329fb254a4 +Block 0009 [111]: 5297e1d430ef5b0a +Block 0009 [112]: 38028d4ef043b385 +Block 0009 [113]: 367eae2fee1ecfb3 +Block 0009 [114]: 5244025847818051 +Block 0009 [115]: 5a708274f861d144 +Block 0009 [116]: c47fc6eb23e4815f +Block 0009 [117]: 4237e8b9b1f3cd9d +Block 0009 [118]: dbe1041d34cac4e1 +Block 0009 [119]: 413d2ae2ebf997c0 +Block 0009 [120]: f2e1a0edb6131e83 +Block 0009 [121]: 6017d817162e938e +Block 0009 [122]: e615ec7b7b788ba9 +Block 0009 [123]: 65980da4c019ce57 +Block 0009 [124]: fc0468d8994e41f6 +Block 0009 [125]: b4acf9c210b4c4a8 +Block 0009 [126]: 9d41bf349c2c7d76 +Block 0009 [127]: 692fde9411561af2 +Block 0010 [ 0]: 31b0e0280e2ecc43 +Block 0010 [ 1]: d93ce8f68a0da03e +Block 0010 [ 2]: 905acb624ea42359 +Block 0010 [ 3]: 41db5464be6fd809 +Block 0010 [ 4]: 1e18ca7554a26f96 +Block 0010 [ 5]: 13b7dab161d1fdd8 +Block 0010 [ 6]: 9b66c337f64cd75e +Block 0010 [ 7]: dcd57a568b0aa2eb +Block 0010 [ 8]: bb146ad41505d2f2 +Block 0010 [ 9]: 68b23abdcc2bedd2 +Block 0010 [ 10]: 98ea131811a6ce9d +Block 0010 [ 11]: bd4637f6ebaa8950 +Block 0010 [ 12]: de8a6392c9be3746 +Block 0010 [ 13]: 2877ec90bd19d6b4 +Block 0010 [ 14]: fa7e8f7f7268a613 +Block 0010 [ 15]: 74a12ec6ff3ea15b +Block 0010 [ 16]: 7760e314bb610a69 +Block 0010 [ 17]: c2567a4d1debed82 +Block 0010 [ 18]: 92a09f57410c22c6 +Block 0010 [ 19]: 029cf267e7fe7104 +Block 0010 [ 20]: fbea3477892c0bc9 +Block 0010 [ 21]: b2e3f0e7ef5a7a06 +Block 0010 [ 22]: d79a6b9875552ed8 +Block 0010 [ 23]: bb2af0a80556d78f +Block 0010 [ 24]: cba43070f27af0be +Block 0010 [ 25]: 0916245fd48c1b13 +Block 0010 [ 26]: ee72922b5c95c68b +Block 0010 [ 27]: 8442fa24985ecf3a +Block 0010 [ 28]: cf80392cac06da0c +Block 0010 [ 29]: d0920a00aeec8df8 +Block 0010 [ 30]: 3e24e4a5ceda5c74 +Block 0010 [ 31]: d8bbe4e1b6a62b5b +Block 0010 [ 32]: 54ebe9d0d5e0211e +Block 0010 [ 33]: 91317dbb9e6807b5 +Block 0010 [ 34]: 549c5ffb68d51a73 +Block 0010 [ 35]: 5f82c9335aa3513f +Block 0010 [ 36]: 495addbb2524905b +Block 0010 [ 37]: 64a03dcd91790e8a +Block 0010 [ 38]: d014df8b4bb91da3 +Block 0010 [ 39]: 6bcd8d9c0efa18a8 +Block 0010 [ 40]: 6c0e217ffe91d746 +Block 0010 [ 41]: 392eca2f236e3649 +Block 0010 [ 42]: 153c191538d717fb +Block 0010 [ 43]: c599c0570b6e3b3f +Block 0010 [ 44]: e97a9c1aea767f83 +Block 0010 [ 45]: f94b7ba8ba460a99 +Block 0010 [ 46]: 09947779799a24ff +Block 0010 [ 47]: 907f6f5cfe9a3a15 +Block 0010 [ 48]: 35926d86cc4b6a06 +Block 0010 [ 49]: c6ba133f79a0dbf0 +Block 0010 [ 50]: 004c55c1df4b91fb +Block 0010 [ 51]: dbadadd7d628d9b6 +Block 0010 [ 52]: 86f9e3ccf70cadd8 +Block 0010 [ 53]: e40b6524491e38f7 +Block 0010 [ 54]: 7e8ccdb6aa7ee6c8 +Block 0010 [ 55]: 673e5a85a14411e1 +Block 0010 [ 56]: 83fc3f033b501ec5 +Block 0010 [ 57]: 62ea0d3cc43de771 +Block 0010 [ 58]: eb51849733fa0a69 +Block 0010 [ 59]: ba3a5561891a745a +Block 0010 [ 60]: 508ac863f9ed414d +Block 0010 [ 61]: 7901256c6773a819 +Block 0010 [ 62]: 66128cf9e004a626 +Block 0010 [ 63]: d8f5776a2f46c852 +Block 0010 [ 64]: 22feb1b89d6f2615 +Block 0010 [ 65]: 6e15418dd65e27ed +Block 0010 [ 66]: 6078aac19f8c26a0 +Block 0010 [ 67]: e7f4ce3a286b3289 +Block 0010 [ 68]: d7b784346ed69fad +Block 0010 [ 69]: 3a01ff3f21fd890b +Block 0010 [ 70]: a8e64f89ba8a89e4 +Block 0010 [ 71]: 5faca06ed3155ee9 +Block 0010 [ 72]: db1279ef5d952316 +Block 0010 [ 73]: 7a6f2cca2eb8fd17 +Block 0010 [ 74]: fa350ee18ea4f4ef +Block 0010 [ 75]: fd23540d3ba0ada5 +Block 0010 [ 76]: fe71f0b180fb7a6c +Block 0010 [ 77]: bc1e622145c35033 +Block 0010 [ 78]: 4fc14b7a245c0357 +Block 0010 [ 79]: 0e1e1bdff76aa6a9 +Block 0010 [ 80]: a927389a374a1b32 +Block 0010 [ 81]: aff1a61bfb7d1891 +Block 0010 [ 82]: 72918289c24056b0 +Block 0010 [ 83]: 0833a583e75d1b50 +Block 0010 [ 84]: d13fa3a097554968 +Block 0010 [ 85]: f76322cbf6ae3de4 +Block 0010 [ 86]: d10106a843f3bc6a +Block 0010 [ 87]: 28f603e202e9f6a8 +Block 0010 [ 88]: e46a32b64599b2f1 +Block 0010 [ 89]: 88c6a687989f490d +Block 0010 [ 90]: 1ff23120e10c7e49 +Block 0010 [ 91]: fafb40a0f8529f66 +Block 0010 [ 92]: 3487240fef8bdf47 +Block 0010 [ 93]: 8248d2350c00490c +Block 0010 [ 94]: adc9101f99058a3b +Block 0010 [ 95]: 7d5f41ae871f8547 +Block 0010 [ 96]: 437207a49efdec8a +Block 0010 [ 97]: a4a383635c4c1daf +Block 0010 [ 98]: caf5fe0f57bb5e70 +Block 0010 [ 99]: a8af868ea7caeaf6 +Block 0010 [100]: 95fc901d137f29cf +Block 0010 [101]: e2480d5cec52a4f5 +Block 0010 [102]: 27fcbc1059d0b47a +Block 0010 [103]: 6cac9c61964647b9 +Block 0010 [104]: c80374446458ea9e +Block 0010 [105]: 294cd33eb188fb53 +Block 0010 [106]: aaedf14d09be48e6 +Block 0010 [107]: 54bd2364c64e7129 +Block 0010 [108]: b97dd69e971b74e2 +Block 0010 [109]: 3a913f07ce8383ca +Block 0010 [110]: 03c86810f373931b +Block 0010 [111]: 44affaf2720253ec +Block 0010 [112]: 9e459c99aefc0a66 +Block 0010 [113]: 172156f40a813320 +Block 0010 [114]: 918eb2798a1ec024 +Block 0010 [115]: 4f8c69444bc9b10c +Block 0010 [116]: 2485548f4f2dfafc +Block 0010 [117]: d88b524283e1930b +Block 0010 [118]: 12193f879f60e01f +Block 0010 [119]: d03dfb6ee7cb1e01 +Block 0010 [120]: 67256e0de8d1daf0 +Block 0010 [121]: 5fbce0def71cb5ea +Block 0010 [122]: d536a5ca66d99e5b +Block 0010 [123]: aa293c38c4e50d7c +Block 0010 [124]: 9c96c76ff9329c4b +Block 0010 [125]: 89caec0b4702e34d +Block 0010 [126]: 6bbc4c71d1f9a952 +Block 0010 [127]: 2c4eefa6b29b0a9f +Block 0011 [ 0]: d1e82a4318ce77be +Block 0011 [ 1]: 874f2182f38b5342 +Block 0011 [ 2]: a57e47eab52c45ef +Block 0011 [ 3]: d7868f310ded7eb8 +Block 0011 [ 4]: 2ab5e7aa907db14f +Block 0011 [ 5]: 8f5eb091fca8ae9c +Block 0011 [ 6]: 91a8d5162ebf9145 +Block 0011 [ 7]: e63439256b6c3095 +Block 0011 [ 8]: ba7c299a1f46c2b5 +Block 0011 [ 9]: 5ac255566aed1dcc +Block 0011 [ 10]: b744aeee793dd56b +Block 0011 [ 11]: 40ff3553e445a0a6 +Block 0011 [ 12]: 47cdec6b8fd8e08d +Block 0011 [ 13]: 378a3eaccc571892 +Block 0011 [ 14]: a43bbaacf3b7c831 +Block 0011 [ 15]: 9cf93a8aac9ac5dd +Block 0011 [ 16]: 644a7e1659437ae0 +Block 0011 [ 17]: be7aca7c8eeb7a78 +Block 0011 [ 18]: 5489b83282196cd2 +Block 0011 [ 19]: 12b3c67f31e850ca +Block 0011 [ 20]: 78acadb5952ded66 +Block 0011 [ 21]: 2f5532bf38ed472d +Block 0011 [ 22]: 80b01e9f61ae9217 +Block 0011 [ 23]: 137d9dbb651eeeec +Block 0011 [ 24]: 91fb38a676d620e5 +Block 0011 [ 25]: c6ee49c2b882c3dc +Block 0011 [ 26]: fd857c3247645a71 +Block 0011 [ 27]: e01ccd93bdb5360c +Block 0011 [ 28]: b27916b0936e7083 +Block 0011 [ 29]: ca6bd8cfc6c79705 +Block 0011 [ 30]: 42e029a388a28b08 +Block 0011 [ 31]: 88a6038c5deb05df +Block 0011 [ 32]: d8e7581a960046be +Block 0011 [ 33]: 55db8fad721a8593 +Block 0011 [ 34]: e181ae0982209758 +Block 0011 [ 35]: 9b3f644bc56863bb +Block 0011 [ 36]: 695442459c0b18d5 +Block 0011 [ 37]: 3180bedbeb601294 +Block 0011 [ 38]: 8916a950f0fb1a93 +Block 0011 [ 39]: 09b1af364f196d42 +Block 0011 [ 40]: 5c4d48b1fdb9e4ea +Block 0011 [ 41]: 06bd164d5fe8cd7c +Block 0011 [ 42]: 5d08357823fdd0fe +Block 0011 [ 43]: 871aa81df5297db4 +Block 0011 [ 44]: aea1bb914cc4d3de +Block 0011 [ 45]: 5805bff2f68f3fdd +Block 0011 [ 46]: 05da3d9d7bb42b11 +Block 0011 [ 47]: f0d6cec4ff7576a3 +Block 0011 [ 48]: 586c76e40ae98ec1 +Block 0011 [ 49]: 7df9ba4cccc6f6fc +Block 0011 [ 50]: a12f512bda7cce33 +Block 0011 [ 51]: 097a47bb7afcaf97 +Block 0011 [ 52]: 6cd6cf7ef02230c1 +Block 0011 [ 53]: 1a2dab3aaf33461e +Block 0011 [ 54]: 4d4461daf1edb76e +Block 0011 [ 55]: 4b094e8be464a5e1 +Block 0011 [ 56]: 94b49b52468af12d +Block 0011 [ 57]: e97f29956e4f3f65 +Block 0011 [ 58]: 546a2f30e98fa22f +Block 0011 [ 59]: a6a0a2679d03cbc7 +Block 0011 [ 60]: fb2d7fb78efc80c4 +Block 0011 [ 61]: cecb0c7cfc14d85e +Block 0011 [ 62]: 042dc5f3eb0ad513 +Block 0011 [ 63]: 52515d7e6dc6a8da +Block 0011 [ 64]: 2575cc25e9839a8e +Block 0011 [ 65]: 7f516599f948cb42 +Block 0011 [ 66]: e46f36f1c0818d6b +Block 0011 [ 67]: 5731d012d459c4e9 +Block 0011 [ 68]: 81cff35112704502 +Block 0011 [ 69]: da0bebf564d3dd82 +Block 0011 [ 70]: 6eb0391b93c3d6de +Block 0011 [ 71]: 1923bfbed3be6f3e +Block 0011 [ 72]: b6dfb17deaee4398 +Block 0011 [ 73]: de0be6017872013a +Block 0011 [ 74]: c148acb5b418afa0 +Block 0011 [ 75]: b1ca1e5f9d454327 +Block 0011 [ 76]: 550fbbd0d340ebe0 +Block 0011 [ 77]: 428ad5fcb873e497 +Block 0011 [ 78]: 1ea91704a4d3163a +Block 0011 [ 79]: f5b226019dd7ecdb +Block 0011 [ 80]: e216e4c8c718f95e +Block 0011 [ 81]: fde6918ddab3c6dd +Block 0011 [ 82]: a76475fd1c2cd357 +Block 0011 [ 83]: 536a89d3e96743db +Block 0011 [ 84]: cc10a5c4c126803d +Block 0011 [ 85]: 94ec09d9d7fd1b47 +Block 0011 [ 86]: aadd844c38ae1ad3 +Block 0011 [ 87]: c23192926aae85c1 +Block 0011 [ 88]: 9a3da449c0a5c317 +Block 0011 [ 89]: 965b1bb78c380db6 +Block 0011 [ 90]: c4534716589815d1 +Block 0011 [ 91]: 9ba4fd59e3b8bd34 +Block 0011 [ 92]: b7e7f48548a8b3a9 +Block 0011 [ 93]: 0c8f981ecad3b2cd +Block 0011 [ 94]: 58e0f56cef6e5df4 +Block 0011 [ 95]: 200e65e54ea07964 +Block 0011 [ 96]: e2ea08dd9dcb51ae +Block 0011 [ 97]: a58c5aacf25cd0c3 +Block 0011 [ 98]: 2bbd2393fb09dabc +Block 0011 [ 99]: d7c789974e35f75a +Block 0011 [100]: a5f2cfb27cc81bd4 +Block 0011 [101]: 0dbba0cd49c7fff0 +Block 0011 [102]: 3009e3a888fd14da +Block 0011 [103]: 8bb49cc8a5933291 +Block 0011 [104]: 3ff75be07f6da507 +Block 0011 [105]: 46b952048fae8b54 +Block 0011 [106]: 7d91a4bcc82074a8 +Block 0011 [107]: 3d1d0424d4b61236 +Block 0011 [108]: 2f9e57b172250828 +Block 0011 [109]: 110651a2fb71a9e2 +Block 0011 [110]: b8d52422bd4b24b7 +Block 0011 [111]: ad1285e4bda390bd +Block 0011 [112]: 9914e7817f719d17 +Block 0011 [113]: acfe8f67181ad3ec +Block 0011 [114]: ce07461f18020414 +Block 0011 [115]: bc2c5ea5b825f0ff +Block 0011 [116]: 8f34db8f5ecad7eb +Block 0011 [117]: 94d1a356122a6b15 +Block 0011 [118]: 4ac50fe0e2fcf6dd +Block 0011 [119]: 0e86996b9a244cbf +Block 0011 [120]: ef15e3204c51e486 +Block 0011 [121]: 7c96ce7c8273218c +Block 0011 [122]: 08481880faf9071d +Block 0011 [123]: 1127c3f2a6bf95cb +Block 0011 [124]: c9ba567895d6a66c +Block 0011 [125]: 5e0728ee3527ac2d +Block 0011 [126]: 085a8b3210d29a8e +Block 0011 [127]: b10a923b96936609 +Block 0012 [ 0]: 7ca5c1c23ba6fcf5 +Block 0012 [ 1]: 93896c87071cb700 +Block 0012 [ 2]: 0a7b001ab1d4f108 +Block 0012 [ 3]: f5971749b3290e79 +Block 0012 [ 4]: bbe4b1b8f9ae97cc +Block 0012 [ 5]: f0dc4d86da7101d8 +Block 0012 [ 6]: f44093e88688d153 +Block 0012 [ 7]: 9b57e221f5fa8003 +Block 0012 [ 8]: b9be5cc908dd61d1 +Block 0012 [ 9]: dce02419744f80ff +Block 0012 [ 10]: 590345f83559e7ae +Block 0012 [ 11]: 2b511a0ce02963f0 +Block 0012 [ 12]: cf49704b097c97a8 +Block 0012 [ 13]: 5e617f96beefc078 +Block 0012 [ 14]: 26904c1a263343e3 +Block 0012 [ 15]: d198ed95ed7899e3 +Block 0012 [ 16]: 7fb6c36f83d74440 +Block 0012 [ 17]: 26d6d951affa686a +Block 0012 [ 18]: 429458ed251aa32d +Block 0012 [ 19]: 30564a6502752222 +Block 0012 [ 20]: 083b3593f6437019 +Block 0012 [ 21]: bfb2edf1d3e2f9df +Block 0012 [ 22]: 8ef9a090bd52ba74 +Block 0012 [ 23]: 5960fa5b86350e43 +Block 0012 [ 24]: 87d794a0f5fe8de2 +Block 0012 [ 25]: 1f57ffd067f747bd +Block 0012 [ 26]: a7d821de0a8dedc1 +Block 0012 [ 27]: e1f07bf2a21990e9 +Block 0012 [ 28]: b3eef4b38c12154c +Block 0012 [ 29]: c4116ef122474677 +Block 0012 [ 30]: 6bf969976fae2b7d +Block 0012 [ 31]: 5c9192386d774124 +Block 0012 [ 32]: ea2542ca11476ed1 +Block 0012 [ 33]: 0f6c064701aea6a8 +Block 0012 [ 34]: 2a23cfa48e6bab6f +Block 0012 [ 35]: f9e1a627c2049543 +Block 0012 [ 36]: 498c67b116f61850 +Block 0012 [ 37]: a00d000b36091880 +Block 0012 [ 38]: 98416e75169a8b1d +Block 0012 [ 39]: 739ddcb3ac78772b +Block 0012 [ 40]: f987556d3e7e1df8 +Block 0012 [ 41]: ed080bc2bf785655 +Block 0012 [ 42]: 5f3b5a444e7658b0 +Block 0012 [ 43]: 7f58797e8a5a964a +Block 0012 [ 44]: 17ebd94342ae69ef +Block 0012 [ 45]: a78ce8b8314a838b +Block 0012 [ 46]: 4bf854703175d834 +Block 0012 [ 47]: 80ad519d6ca1dbe7 +Block 0012 [ 48]: 0034082b54ae9a4a +Block 0012 [ 49]: 503c5d03d2ee6f33 +Block 0012 [ 50]: 204944949f5b4a25 +Block 0012 [ 51]: 7ca8d9e4035c02ed +Block 0012 [ 52]: 5f29bf6897d71373 +Block 0012 [ 53]: a98f567680ffe33b +Block 0012 [ 54]: bed6859cef39bc91 +Block 0012 [ 55]: 66a5ed3f8ac0d2f3 +Block 0012 [ 56]: f9992ff178cb62e7 +Block 0012 [ 57]: 519b60c89b4a9e6e +Block 0012 [ 58]: 68cf1d3f38e3282a +Block 0012 [ 59]: 487e0010e144b05c +Block 0012 [ 60]: a6e09dce21d71d56 +Block 0012 [ 61]: 3f430a49042f84d2 +Block 0012 [ 62]: 98b3d6776bff822f +Block 0012 [ 63]: 74d938e0417ae0f7 +Block 0012 [ 64]: a8326370d10eff51 +Block 0012 [ 65]: 08ae557de683d605 +Block 0012 [ 66]: 7ab2fd7755ce48db +Block 0012 [ 67]: d15cc3febefee36d +Block 0012 [ 68]: 11e258f2eaad3bd6 +Block 0012 [ 69]: 3e5bf59ff6de85ef +Block 0012 [ 70]: 28b67261c63ca8c5 +Block 0012 [ 71]: 31ca052e999c45cb +Block 0012 [ 72]: 1faac598530b1f73 +Block 0012 [ 73]: 1a80147ba6b55947 +Block 0012 [ 74]: 02f41d623c86bfbb +Block 0012 [ 75]: 28d352044c3d0332 +Block 0012 [ 76]: 51227bb407e40943 +Block 0012 [ 77]: b191e20bba5ea6fa +Block 0012 [ 78]: 5a312002b2b849e5 +Block 0012 [ 79]: 969250eeadb700df +Block 0012 [ 80]: 2f2b0c204965f63d +Block 0012 [ 81]: 44adafa88612b805 +Block 0012 [ 82]: e61ad5e762b8e7c2 +Block 0012 [ 83]: d02e02a9f7c2893b +Block 0012 [ 84]: 0589f6ab6e0e88a6 +Block 0012 [ 85]: 7bd21a4db5bdc536 +Block 0012 [ 86]: 5e36482a2a3841ff +Block 0012 [ 87]: 7df93b0a71b9ac74 +Block 0012 [ 88]: fef8ca444cf873a3 +Block 0012 [ 89]: 733d37035f85b13a +Block 0012 [ 90]: bd9667eb6c003398 +Block 0012 [ 91]: 86e39720f5a6d34e +Block 0012 [ 92]: 87b59164d4a6bf7b +Block 0012 [ 93]: 927cece859b18d76 +Block 0012 [ 94]: cdc44fe6c8cd0871 +Block 0012 [ 95]: 7fe6340847034e40 +Block 0012 [ 96]: fe1ba94d16fefc2e +Block 0012 [ 97]: 08598f6f400d59a2 +Block 0012 [ 98]: 2e224e7a6b238166 +Block 0012 [ 99]: 4355d3f32647af5e +Block 0012 [100]: abdcf4c292a354cd +Block 0012 [101]: 7767314711558d31 +Block 0012 [102]: f1be6ed3f5d65a32 +Block 0012 [103]: 869911f775ba374d +Block 0012 [104]: e1c96e065e7630d3 +Block 0012 [105]: d43c7b0348047d5a +Block 0012 [106]: 2d3cb7990e56bb98 +Block 0012 [107]: a2b18306ef3ea736 +Block 0012 [108]: 744545559db80b1d +Block 0012 [109]: b0d93df763d7341b +Block 0012 [110]: 27fe604eaeac07f0 +Block 0012 [111]: 91c8e0ce703d48e8 +Block 0012 [112]: 901d510d6e4e50fd +Block 0012 [113]: 2652abf2b7403a3b +Block 0012 [114]: 11fa4ade8dab09c8 +Block 0012 [115]: e2df4a27e429f753 +Block 0012 [116]: dd033575e5f9d6c8 +Block 0012 [117]: f252e3c78e2e6b65 +Block 0012 [118]: 620fe7ce4ab1760e +Block 0012 [119]: c371755dc9851eda +Block 0012 [120]: 0b433ba5ddd97375 +Block 0012 [121]: dfde5cab62b93c63 +Block 0012 [122]: 083d2b596861dc5e +Block 0012 [123]: fd3433f1329ff7f8 +Block 0012 [124]: cabdff76543d1539 +Block 0012 [125]: bc26b3144c0a289d +Block 0012 [126]: 6f4a916e08ff334b +Block 0012 [127]: e5b0a4a8e5240637 +Block 0013 [ 0]: fd7ce244c7475828 +Block 0013 [ 1]: cacbfbd93617f1b8 +Block 0013 [ 2]: fdb0cf48b620586c +Block 0013 [ 3]: 94956780c2e98c6d +Block 0013 [ 4]: 459b6a1652d4486d +Block 0013 [ 5]: 6771131551e25220 +Block 0013 [ 6]: e0f3adab0728de2b +Block 0013 [ 7]: c857c4ef14df60aa +Block 0013 [ 8]: 783c3f264f917e14 +Block 0013 [ 9]: 4acc8ca7db5e61a3 +Block 0013 [ 10]: 6da6df59f8723540 +Block 0013 [ 11]: 71404b58ae33ad1e +Block 0013 [ 12]: 2d262d75c9de8656 +Block 0013 [ 13]: 605867033025d5bf +Block 0013 [ 14]: feed04276187d9d4 +Block 0013 [ 15]: 15ecefec97adbe97 +Block 0013 [ 16]: b3c0ba25f92b6407 +Block 0013 [ 17]: b4d88b79d5f8118e +Block 0013 [ 18]: 07af806302bf4150 +Block 0013 [ 19]: cdbf444301ef2cc4 +Block 0013 [ 20]: a83d0468385b1bf7 +Block 0013 [ 21]: 8cfc125da8f7b77b +Block 0013 [ 22]: 1594a86836460d1d +Block 0013 [ 23]: 3f18f39a56755b9f +Block 0013 [ 24]: ff78b84c9062e743 +Block 0013 [ 25]: 6d0ba651733a82a7 +Block 0013 [ 26]: 274b8e73a9a164ee +Block 0013 [ 27]: 2d3fbd108699a52e +Block 0013 [ 28]: 13680eff7955bae3 +Block 0013 [ 29]: 075258a2e2129a54 +Block 0013 [ 30]: 60a7ac04e29c4aac +Block 0013 [ 31]: 54cc75e4326adef5 +Block 0013 [ 32]: e043bc18332cba15 +Block 0013 [ 33]: a93ec2c04a305e5e +Block 0013 [ 34]: 28bd2e7185ce9911 +Block 0013 [ 35]: 6ede8387462677be +Block 0013 [ 36]: b6f7ae65415a323c +Block 0013 [ 37]: ba1c8d92ee403589 +Block 0013 [ 38]: c0d3bbb3043f10f9 +Block 0013 [ 39]: ec8e1e4344ad6062 +Block 0013 [ 40]: c94ecb937323d618 +Block 0013 [ 41]: 9754f1c11c9a7804 +Block 0013 [ 42]: d8efaa317c06f2b5 +Block 0013 [ 43]: a22b6ed585837d7e +Block 0013 [ 44]: 12c343c5d0e9520e +Block 0013 [ 45]: 6747b0dd0325b557 +Block 0013 [ 46]: 6fbb047d945192c6 +Block 0013 [ 47]: a6045420c6f3771a +Block 0013 [ 48]: df2a352f6214bcd2 +Block 0013 [ 49]: c3a292f001e6b65f +Block 0013 [ 50]: 723caaba605418ff +Block 0013 [ 51]: 6f8e850a165e2c9d +Block 0013 [ 52]: dcb982867ea624b3 +Block 0013 [ 53]: a0bf3e1c3fdc4ab4 +Block 0013 [ 54]: e824433d920a9952 +Block 0013 [ 55]: 98e66aa8596eb9ac +Block 0013 [ 56]: cb89ceb9f4cdfbf7 +Block 0013 [ 57]: e138589c0b1aeffa +Block 0013 [ 58]: 523f0606cffaea25 +Block 0013 [ 59]: 631bd8041e1b3b9b +Block 0013 [ 60]: 65e31ec29e142f85 +Block 0013 [ 61]: aa24720c1cc2595b +Block 0013 [ 62]: f367717328bebeb3 +Block 0013 [ 63]: 9172c6dcb9471144 +Block 0013 [ 64]: bb7fe520bf5b10e9 +Block 0013 [ 65]: 0c448c1b958ba9bb +Block 0013 [ 66]: 3342dea528ba0404 +Block 0013 [ 67]: 38101672d55d514f +Block 0013 [ 68]: 295f68aa6b25072b +Block 0013 [ 69]: 0a23137aacb2ca3f +Block 0013 [ 70]: 06365c4a08d7dc52 +Block 0013 [ 71]: 925a4eb911246ff4 +Block 0013 [ 72]: 79678ba22a5af61f +Block 0013 [ 73]: c6a264d4266d6705 +Block 0013 [ 74]: f83c88ef42aa748e +Block 0013 [ 75]: 71111052820882f3 +Block 0013 [ 76]: 0431e61dc2b6e548 +Block 0013 [ 77]: 11861c8cd487e3c4 +Block 0013 [ 78]: dc7e3139c735152b +Block 0013 [ 79]: 9d4214d83eb5168c +Block 0013 [ 80]: ecfeb1108bd18ae0 +Block 0013 [ 81]: eb6d12f55dc8d27b +Block 0013 [ 82]: 90d76b8da957c074 +Block 0013 [ 83]: 11361e1dcbe17eb6 +Block 0013 [ 84]: 841baacb0c5578a1 +Block 0013 [ 85]: 0b688c3798cc1ec1 +Block 0013 [ 86]: 46577db35ac5b023 +Block 0013 [ 87]: 766ab57bde46ca71 +Block 0013 [ 88]: e173aee80c598c25 +Block 0013 [ 89]: 4c0f26b801014154 +Block 0013 [ 90]: b00674f3807c4cce +Block 0013 [ 91]: c5504a8596323b1d +Block 0013 [ 92]: 0f5c0149b310640e +Block 0013 [ 93]: 74681f161ed43407 +Block 0013 [ 94]: 87f96733ba9a9305 +Block 0013 [ 95]: 5b057120a9eda19e +Block 0013 [ 96]: a879658c469f816f +Block 0013 [ 97]: e8e7a8bd1fee6418 +Block 0013 [ 98]: 374f686f822d71c4 +Block 0013 [ 99]: 67373b96acd04bd6 +Block 0013 [100]: 9a60f9fd85a895c5 +Block 0013 [101]: c558b5cd131c8b0a +Block 0013 [102]: 22dabcedc843d71a +Block 0013 [103]: 7edbb62c2e9b6e61 +Block 0013 [104]: 7fae51b3ec828ce0 +Block 0013 [105]: 1a0de7b941720cc5 +Block 0013 [106]: 5fda761c024f32fe +Block 0013 [107]: d77d00379261498a +Block 0013 [108]: ca3a3c8f18efe862 +Block 0013 [109]: 8c9c4dae15073fe0 +Block 0013 [110]: e7c3d35f790635f1 +Block 0013 [111]: 0db7c40f399e6ca5 +Block 0013 [112]: 368d2f184ee634bc +Block 0013 [113]: cf9c845b2527ad3e +Block 0013 [114]: 5a911598e5731f6d +Block 0013 [115]: b8e698a1d10a45c2 +Block 0013 [116]: f84ff315ba6ce3e9 +Block 0013 [117]: 4f69cb819ada3ff4 +Block 0013 [118]: 1e16b7331e757b2e +Block 0013 [119]: cea4a14373c1dc54 +Block 0013 [120]: 8c09c205a962250d +Block 0013 [121]: 001aa12eddf882b1 +Block 0013 [122]: db55f0f45bbe5c3e +Block 0013 [123]: e0874e9b2b8fd7c5 +Block 0013 [124]: b2c4e4287c43c5b2 +Block 0013 [125]: f16604ac4d68f1b3 +Block 0013 [126]: 7744f22d0a3f760f +Block 0013 [127]: 0a18fb6f2ea680c1 +Block 0014 [ 0]: f2f03d1b04a17cef +Block 0014 [ 1]: 96992a0db12dc452 +Block 0014 [ 2]: c7da5aa80bff1ab9 +Block 0014 [ 3]: be7c01a0e083cda4 +Block 0014 [ 4]: 474108589e0ec82b +Block 0014 [ 5]: ec8892e4f6903c4c +Block 0014 [ 6]: 739f9160edf19f30 +Block 0014 [ 7]: 58cfbefe026c3f53 +Block 0014 [ 8]: 3fadcb006fe1f646 +Block 0014 [ 9]: 4d25defa435a56e6 +Block 0014 [ 10]: 8feb9f57775a61aa +Block 0014 [ 11]: 038df252cf08fe7b +Block 0014 [ 12]: 5a0cdf9786d3d986 +Block 0014 [ 13]: 5be9dc12c5530d3a +Block 0014 [ 14]: 94af01ec9648d74f +Block 0014 [ 15]: 4977da96d56c854b +Block 0014 [ 16]: be4f7249746c253c +Block 0014 [ 17]: c408cc59fd752762 +Block 0014 [ 18]: 086bedc984333962 +Block 0014 [ 19]: 39b3219879079a48 +Block 0014 [ 20]: 90b885202a64f113 +Block 0014 [ 21]: abc0a2ad49b2f704 +Block 0014 [ 22]: 7a2677fdbf428392 +Block 0014 [ 23]: 4668ee34a150ddcd +Block 0014 [ 24]: a8a46a39ad66e435 +Block 0014 [ 25]: da4c56ff993a177a +Block 0014 [ 26]: eccff9b93a55dc50 +Block 0014 [ 27]: cd8657a12ba4e3d4 +Block 0014 [ 28]: 21914e642bc6fdfe +Block 0014 [ 29]: 4480f86b8e9db2d8 +Block 0014 [ 30]: d6a24e5481c56350 +Block 0014 [ 31]: 1a8b840bcfe985be +Block 0014 [ 32]: d23efab915d69ef0 +Block 0014 [ 33]: 697e3d1584c3f8d5 +Block 0014 [ 34]: 1d6bd5c30988e3cf +Block 0014 [ 35]: b8a22e618971d997 +Block 0014 [ 36]: 1fbe49fdddadc888 +Block 0014 [ 37]: 7ceefb8d37e9bfa4 +Block 0014 [ 38]: cbee4bf6ce316222 +Block 0014 [ 39]: d6733e7d86990202 +Block 0014 [ 40]: f85bcd8891002bd4 +Block 0014 [ 41]: bcbac6f06255668c +Block 0014 [ 42]: 55090ef103152488 +Block 0014 [ 43]: 7cd3bf9926e877da +Block 0014 [ 44]: 5cab104e2b8c8b44 +Block 0014 [ 45]: 2a16ffdc1a4a879a +Block 0014 [ 46]: 2867317c152f109e +Block 0014 [ 47]: 76ec5ec6e994b320 +Block 0014 [ 48]: ad77c12ec7c75ba1 +Block 0014 [ 49]: 09b4a81a2e216e77 +Block 0014 [ 50]: 5908fe588be9fd0a +Block 0014 [ 51]: 26ffcc96221c1989 +Block 0014 [ 52]: 3310c69cdd95eef0 +Block 0014 [ 53]: 0432787506b0745c +Block 0014 [ 54]: 7d9d002f2b6f18b1 +Block 0014 [ 55]: 8bd9abcedfa7b4f8 +Block 0014 [ 56]: d758fddd27590f92 +Block 0014 [ 57]: 67e82e109ce16bef +Block 0014 [ 58]: deaa1e3b8fdfe767 +Block 0014 [ 59]: 5119a6bb9208ae19 +Block 0014 [ 60]: 274efdc1006d3a22 +Block 0014 [ 61]: c94f0b13873b7b24 +Block 0014 [ 62]: 357ac407d0b5759c +Block 0014 [ 63]: 3930e5d999b0312e +Block 0014 [ 64]: 33e3e6bd2fe095f8 +Block 0014 [ 65]: 338b9696938d0cc0 +Block 0014 [ 66]: c96b296da856ad27 +Block 0014 [ 67]: 14148dfb090c18c7 +Block 0014 [ 68]: cd7d931e870597e7 +Block 0014 [ 69]: c1cc609ca861a3c4 +Block 0014 [ 70]: 09056c2aa840eef5 +Block 0014 [ 71]: 9d6e78244394c4d4 +Block 0014 [ 72]: 7e2dc358a727d8b0 +Block 0014 [ 73]: a88b992feed4d62a +Block 0014 [ 74]: bd54844166fb0f1d +Block 0014 [ 75]: a696233c40a65b6d +Block 0014 [ 76]: c9e1f184fb491805 +Block 0014 [ 77]: 3d65649659b5bc13 +Block 0014 [ 78]: b8cd773cfd1472c5 +Block 0014 [ 79]: fc75b5985df11340 +Block 0014 [ 80]: b8d937b3f3ff97f3 +Block 0014 [ 81]: abea06296e20efc5 +Block 0014 [ 82]: a7ccb1aadd084873 +Block 0014 [ 83]: be960608efa8f86a +Block 0014 [ 84]: 2235ba471ea6cea9 +Block 0014 [ 85]: 6d5c640b585ed896 +Block 0014 [ 86]: 38f6ed9f38bc9391 +Block 0014 [ 87]: cbedcd648c24df47 +Block 0014 [ 88]: d151aba03768ae3c +Block 0014 [ 89]: 758e544c4f59313a +Block 0014 [ 90]: f3832f4c300332f1 +Block 0014 [ 91]: 8eaac11d100c0c1d +Block 0014 [ 92]: 130a1c5607c584a3 +Block 0014 [ 93]: 0dfb11d24999f348 +Block 0014 [ 94]: 7e317c9700d59f24 +Block 0014 [ 95]: e58a8f116bd3d788 +Block 0014 [ 96]: 6988e8db0ee7fba5 +Block 0014 [ 97]: 8e82951b0136710f +Block 0014 [ 98]: 3d02d910d490375c +Block 0014 [ 99]: faeb97304bb1be0c +Block 0014 [100]: 21e7742bc48de3cd +Block 0014 [101]: 65e8f95e9b3fbc47 +Block 0014 [102]: be63ccf97ce8754b +Block 0014 [103]: 6789594d4bddec50 +Block 0014 [104]: a18c8782e6905365 +Block 0014 [105]: 4436042cd2d01265 +Block 0014 [106]: 2285d882b07ee472 +Block 0014 [107]: 6557c4dac229d174 +Block 0014 [108]: 68b0d678ce7212e2 +Block 0014 [109]: 825e3feeadc63f9a +Block 0014 [110]: 09617c5a98cdc06a +Block 0014 [111]: fefb35a97c41a327 +Block 0014 [112]: 09f9effdaeb72080 +Block 0014 [113]: 65bbb2866f516772 +Block 0014 [114]: f0fc0d1466e91442 +Block 0014 [115]: 57e41d6f7b9a9830 +Block 0014 [116]: ed3dab2c2a606e1f +Block 0014 [117]: 53925f1e10f3d52d +Block 0014 [118]: ff01f703dfecba68 +Block 0014 [119]: 6e049b809c19c293 +Block 0014 [120]: 42add865c70171a8 +Block 0014 [121]: 6a66f6439622b1dd +Block 0014 [122]: 1ad1b3f08aac6977 +Block 0014 [123]: 6f9fcebaba3a8239 +Block 0014 [124]: 349c01c02eb52510 +Block 0014 [125]: d779dd0e5d7578f5 +Block 0014 [126]: bae26cd8f24fc0b4 +Block 0014 [127]: de7a654482ac69f3 +Block 0015 [ 0]: 1255358413a2f1f9 +Block 0015 [ 1]: 751ead88b0364f98 +Block 0015 [ 2]: b30312b425732427 +Block 0015 [ 3]: 4dd5694abdf8e712 +Block 0015 [ 4]: d02e249ca6d3f489 +Block 0015 [ 5]: 71493faca635c5ad +Block 0015 [ 6]: f78982bc7f4ca168 +Block 0015 [ 7]: c633520a9725f4af +Block 0015 [ 8]: 341db6d65fddf672 +Block 0015 [ 9]: 00e78a8c97e7500b +Block 0015 [ 10]: 3c1eddc1acdaf215 +Block 0015 [ 11]: bc5ace37b9d774b5 +Block 0015 [ 12]: 895485b8620a8aee +Block 0015 [ 13]: a4b23e29fcf0582c +Block 0015 [ 14]: dae479e8563081ac +Block 0015 [ 15]: 91ce9ed95308593b +Block 0015 [ 16]: 1f597249ed72d58b +Block 0015 [ 17]: f0037a97ecc07819 +Block 0015 [ 18]: 270262d7c2a2215c +Block 0015 [ 19]: 2c708de0238eef8c +Block 0015 [ 20]: c6056f29b6e4e73d +Block 0015 [ 21]: dcc9a09ea0d6d07f +Block 0015 [ 22]: 42630afe629efd41 +Block 0015 [ 23]: ef89fb3fa093fbee +Block 0015 [ 24]: 907eb2909634cca2 +Block 0015 [ 25]: e1b76abbb4c1e695 +Block 0015 [ 26]: 1aa2fa18102682d2 +Block 0015 [ 27]: bf05c904ff36f1dd +Block 0015 [ 28]: 89fe77d740427896 +Block 0015 [ 29]: ae7c4b328a98651a +Block 0015 [ 30]: aaa34fcf1098df10 +Block 0015 [ 31]: ea7f105cedd5ce17 +Block 0015 [ 32]: e48627ab79a7ccd4 +Block 0015 [ 33]: bf080032bf8c8d3f +Block 0015 [ 34]: 901f4fa87b358010 +Block 0015 [ 35]: 28687f31c48e45c6 +Block 0015 [ 36]: 69a67c4c183d2a09 +Block 0015 [ 37]: cf5d0c0964860a2f +Block 0015 [ 38]: ef7cca75218f27a0 +Block 0015 [ 39]: 755891ba0181c6df +Block 0015 [ 40]: 69fc1f1fb54f7e68 +Block 0015 [ 41]: e1a50bcdd76c01b2 +Block 0015 [ 42]: 8d20bc9e4582d634 +Block 0015 [ 43]: f5bb031864f83c09 +Block 0015 [ 44]: b6a23f45f2367307 +Block 0015 [ 45]: 3e82729a6494e098 +Block 0015 [ 46]: 7791faaac40f4632 +Block 0015 [ 47]: acb9d9be87280aa2 +Block 0015 [ 48]: 0f29ad18d6e83cbc +Block 0015 [ 49]: e1d7ec9ed395ae76 +Block 0015 [ 50]: e8360c0c6b3fcd7c +Block 0015 [ 51]: ad8ccdefc893d72b +Block 0015 [ 52]: 90abd311e2537d6a +Block 0015 [ 53]: a395a4653707425f +Block 0015 [ 54]: a8fa96881bf142a9 +Block 0015 [ 55]: cb80ecdcebcc94a2 +Block 0015 [ 56]: 2855f69a9c3bb4e5 +Block 0015 [ 57]: ab213ef77b3a45db +Block 0015 [ 58]: 5ce4cea1fe393c3d +Block 0015 [ 59]: 3e53f9b07a96f0a9 +Block 0015 [ 60]: c544ee084b9f0309 +Block 0015 [ 61]: b1a2040b934b211c +Block 0015 [ 62]: 5786c6421c449ecd +Block 0015 [ 63]: 026a08e9a3a4cd5d +Block 0015 [ 64]: 49ebf2b8246b3c49 +Block 0015 [ 65]: 131dbb5efced5f87 +Block 0015 [ 66]: e953740868a2dbd3 +Block 0015 [ 67]: cd2b4261d4d98342 +Block 0015 [ 68]: fdb12b71ee28acea +Block 0015 [ 69]: bb19976da7b21eeb +Block 0015 [ 70]: 724cd3d9d2e9d16b +Block 0015 [ 71]: 6696d05c291c1967 +Block 0015 [ 72]: 042b9a5efae770df +Block 0015 [ 73]: 602824b47d02bf47 +Block 0015 [ 74]: 40d0f9eff044a6f0 +Block 0015 [ 75]: 5285b30bdf724adf +Block 0015 [ 76]: 14813c0b2cdc4809 +Block 0015 [ 77]: 6e2e1693ff0fc7f6 +Block 0015 [ 78]: 5a165346997138ce +Block 0015 [ 79]: 1a76bf7aa83132c8 +Block 0015 [ 80]: a6519d9659432a64 +Block 0015 [ 81]: f5f1c2d6b15bce5a +Block 0015 [ 82]: f5b29a131ca0a074 +Block 0015 [ 83]: c5e9a0544b261af0 +Block 0015 [ 84]: 8d9953c2d32b33f9 +Block 0015 [ 85]: c7f21a3e0d0b3bb7 +Block 0015 [ 86]: 75f4a476b8c4b2f9 +Block 0015 [ 87]: 756d6972e7060a75 +Block 0015 [ 88]: 62699ecf6ddbee77 +Block 0015 [ 89]: 7d195f9a4f52b21c +Block 0015 [ 90]: ea4c560cea05cda3 +Block 0015 [ 91]: 0d5589b1e874cd8d +Block 0015 [ 92]: 68c9804bb7ceaded +Block 0015 [ 93]: 64949cd5db3bd11c +Block 0015 [ 94]: 391c3bfe0a230a0e +Block 0015 [ 95]: 5f9584071f0450f0 +Block 0015 [ 96]: 11f7986cd347ffeb +Block 0015 [ 97]: a3d32d4f7c987b46 +Block 0015 [ 98]: 97306e0cb5794d17 +Block 0015 [ 99]: f6600ddb12c2360b +Block 0015 [100]: ee875f8f1e829ed1 +Block 0015 [101]: f8838d4105e9e06d +Block 0015 [102]: 29a64f9ede3483c6 +Block 0015 [103]: 4c8bfa826e1c98ae +Block 0015 [104]: 8b8764597961e33c +Block 0015 [105]: 446734f12cd1e8a5 +Block 0015 [106]: 1575565d48091cbb +Block 0015 [107]: df76d2d4fb41d479 +Block 0015 [108]: 9c731839f9a69055 +Block 0015 [109]: 63a1bcba5e407783 +Block 0015 [110]: 89eee48d0f2af665 +Block 0015 [111]: d435a276381b3f5d +Block 0015 [112]: a15f2a8cf30c8242 +Block 0015 [113]: f3aa49983fee282a +Block 0015 [114]: e582e86f9e8ee653 +Block 0015 [115]: 4c7c33109e0dec66 +Block 0015 [116]: 6fd95057ae162c43 +Block 0015 [117]: 47c054c1102250ba +Block 0015 [118]: 5ca2000678b17d5f +Block 0015 [119]: b7a46465f2f67b9f +Block 0015 [120]: 3be6f3a2fe74eb70 +Block 0015 [121]: 6bd87ed167e85c64 +Block 0015 [122]: 4578998648f615f0 +Block 0015 [123]: 8d6b943f96554611 +Block 0015 [124]: b8f726520775506e +Block 0015 [125]: 2c720aacce22a83f +Block 0015 [126]: 4c74a22df9900c10 +Block 0015 [127]: 677933502ccbb992 +Block 0016 [ 0]: 4db7d68d9601e701 +Block 0016 [ 1]: c22dbfcd31599660 +Block 0016 [ 2]: 5a571361825c35f5 +Block 0016 [ 3]: a6e2abaa12350087 +Block 0016 [ 4]: 8d539b6a04326542 +Block 0016 [ 5]: 13aa4d46af6159d7 +Block 0016 [ 6]: 2b46a2baaa82b799 +Block 0016 [ 7]: 6db1ffe91647adf1 +Block 0016 [ 8]: fa299728b2d664bb +Block 0016 [ 9]: 7106dc0e4de7fb6b +Block 0016 [ 10]: 23bad9c3029d5ed2 +Block 0016 [ 11]: 5b2a068f6fb744da +Block 0016 [ 12]: a09d30ab6242d56c +Block 0016 [ 13]: e57083fbac677790 +Block 0016 [ 14]: 61ea4bfcffccd406 +Block 0016 [ 15]: 66c50e9d8adce355 +Block 0016 [ 16]: 5ac73d2b9e4e38fb +Block 0016 [ 17]: 09e063f4fb7790bb +Block 0016 [ 18]: 46dfd5a0f8d8dec2 +Block 0016 [ 19]: bd925ed692313d4e +Block 0016 [ 20]: 3e5013e04540b07f +Block 0016 [ 21]: 36d13e4cb42ed6ba +Block 0016 [ 22]: 19a6fba6330763c9 +Block 0016 [ 23]: 4b8e8279794a06ea +Block 0016 [ 24]: 669cc88cb6ebf3fd +Block 0016 [ 25]: 5d26b291e22d6f3c +Block 0016 [ 26]: eded220ce598a9b1 +Block 0016 [ 27]: 82bf01afa95b32ac +Block 0016 [ 28]: 9d2d4f8ce3cf4a5a +Block 0016 [ 29]: efb52aa40b14f099 +Block 0016 [ 30]: 303b3d066fa3bb0e +Block 0016 [ 31]: d79142270c27e172 +Block 0016 [ 32]: f8b29998949ab8d5 +Block 0016 [ 33]: 976ec56b65bc1cdb +Block 0016 [ 34]: 00ec9322e0c65283 +Block 0016 [ 35]: 5a682d984b0253db +Block 0016 [ 36]: dfeeb5a0cd007a74 +Block 0016 [ 37]: 6d7ed66839d81317 +Block 0016 [ 38]: 7cbf6ff524df82ea +Block 0016 [ 39]: a402cba8fe4ee222 +Block 0016 [ 40]: 051ce4340605fb49 +Block 0016 [ 41]: db1c5330069c673f +Block 0016 [ 42]: d04ad8bdeb9ee349 +Block 0016 [ 43]: 095a39dfbedeb10f +Block 0016 [ 44]: c8f2764065673d60 +Block 0016 [ 45]: 250f51b581f26844 +Block 0016 [ 46]: 89f8ff131b1e1adf +Block 0016 [ 47]: 8c278f41821d1b65 +Block 0016 [ 48]: 45064aaffb3c6590 +Block 0016 [ 49]: 0ed7d575c479d9e9 +Block 0016 [ 50]: a880e9daeb7a648c +Block 0016 [ 51]: d0fb1bd6daa2e147 +Block 0016 [ 52]: 1f13ac0f49a4d2e8 +Block 0016 [ 53]: e748f547f85b940d +Block 0016 [ 54]: 6f4014e2e1beea5c +Block 0016 [ 55]: 0bf87689a53f2a46 +Block 0016 [ 56]: acd91b7197cf80eb +Block 0016 [ 57]: 9603a84c49ea2b0c +Block 0016 [ 58]: 7674eb49dbcbd228 +Block 0016 [ 59]: 54a8b7d3fcb61a40 +Block 0016 [ 60]: b5f0e12b74727573 +Block 0016 [ 61]: ea7e8ba3eb6af459 +Block 0016 [ 62]: d1b08409c386140e +Block 0016 [ 63]: 3e346330eae2f3c0 +Block 0016 [ 64]: 19594146c1309b3b +Block 0016 [ 65]: 8039aac71029f73e +Block 0016 [ 66]: d1e9ec55bb6e7cf6 +Block 0016 [ 67]: 9252fee592a2d1ce +Block 0016 [ 68]: c8fe275bd8ccc476 +Block 0016 [ 69]: 357d09183e4eea94 +Block 0016 [ 70]: 992d00208d5f5286 +Block 0016 [ 71]: 0c854a63942fa090 +Block 0016 [ 72]: 69dd9ef7ec5397cf +Block 0016 [ 73]: b9afe5e205d6e5c9 +Block 0016 [ 74]: 2371fbb9bf596a93 +Block 0016 [ 75]: d6bec9f826beb54a +Block 0016 [ 76]: 48954f405076ba24 +Block 0016 [ 77]: 327b7a72c294184d +Block 0016 [ 78]: ff3813caf762b02e +Block 0016 [ 79]: 6701af476b138c3e +Block 0016 [ 80]: ff27a00fc63062a3 +Block 0016 [ 81]: ab1ab6bf00205f51 +Block 0016 [ 82]: 7ccddffaf79e0429 +Block 0016 [ 83]: b2e0f5f4b62c8f47 +Block 0016 [ 84]: f1e3cb6a21181e4c +Block 0016 [ 85]: e8ba84317f763bdd +Block 0016 [ 86]: ea2627679ca2629f +Block 0016 [ 87]: 68a29eccab7bdf7e +Block 0016 [ 88]: aa81043849728072 +Block 0016 [ 89]: f03fe30d8cc1750a +Block 0016 [ 90]: e1c8dc0586b6d96a +Block 0016 [ 91]: 9efb4cefbc1f797a +Block 0016 [ 92]: e9614318106bb145 +Block 0016 [ 93]: 6a05a48ce9764b41 +Block 0016 [ 94]: 35d9f3e94e77a4d3 +Block 0016 [ 95]: 1d3d8037ca4c3f94 +Block 0016 [ 96]: b781fb66e6ba85a7 +Block 0016 [ 97]: 82aaa076c2bf43f3 +Block 0016 [ 98]: f922a9c456a4b545 +Block 0016 [ 99]: eee12870754d9bb8 +Block 0016 [100]: b1942602108d6701 +Block 0016 [101]: 43a61f3c92d2d0df +Block 0016 [102]: f49bf18180934b65 +Block 0016 [103]: 79e13c570bdc1a64 +Block 0016 [104]: 79e5a885c8f6a304 +Block 0016 [105]: c193d6341218fc8d +Block 0016 [106]: 9fd3fe537b8da1d8 +Block 0016 [107]: 0cb5defa5667eaa8 +Block 0016 [108]: 4a362119f16ebcee +Block 0016 [109]: 328d6c6fe467f299 +Block 0016 [110]: 1ebe0815be15b551 +Block 0016 [111]: f72344ed513952bb +Block 0016 [112]: 230c62884c7bb1bc +Block 0016 [113]: 0509bf0a7180b231 +Block 0016 [114]: bea5fa3794b76431 +Block 0016 [115]: 58fe11d9e0ac41f2 +Block 0016 [116]: 29ee103be36b97cc +Block 0016 [117]: 9ddb5e6a37034145 +Block 0016 [118]: 36182ee882cb12ef +Block 0016 [119]: 4b6cda7dd1c879a4 +Block 0016 [120]: b36a7852a1576905 +Block 0016 [121]: 69f26e6c7af01c50 +Block 0016 [122]: 51d24eee59eea10e +Block 0016 [123]: 4413829b410310e7 +Block 0016 [124]: 6e400eca296a3eec +Block 0016 [125]: 83dcf4d0698b439e +Block 0016 [126]: c78b6ca7d4e4fa65 +Block 0016 [127]: d9622848b6251236 +Block 0017 [ 0]: c54328d345ca134d +Block 0017 [ 1]: cfa77c1577707f01 +Block 0017 [ 2]: b5aa378403ab29b0 +Block 0017 [ 3]: f20b478caa621ff5 +Block 0017 [ 4]: ab99c9536508c527 +Block 0017 [ 5]: 1f4f3e051eca8e47 +Block 0017 [ 6]: 0e60c96834ac2fc8 +Block 0017 [ 7]: 4cca30658c05da56 +Block 0017 [ 8]: 9198d2faa4c0335d +Block 0017 [ 9]: 100fdd49ef23faa6 +Block 0017 [ 10]: 1ad7bc8ec193d0aa +Block 0017 [ 11]: 383474b87bc77f78 +Block 0017 [ 12]: 7379b1216d9fb400 +Block 0017 [ 13]: d441d1836fef3337 +Block 0017 [ 14]: 5a222157ae4b4ebc +Block 0017 [ 15]: 1c96f190fa25fcdd +Block 0017 [ 16]: d8a3ef1a22b6600a +Block 0017 [ 17]: 19559dd25da63154 +Block 0017 [ 18]: df8d7fc83bdf129b +Block 0017 [ 19]: 57d7d7f2dd9e659f +Block 0017 [ 20]: ac96e1ff1aa1aa95 +Block 0017 [ 21]: 1160e842ccc628f4 +Block 0017 [ 22]: f66aabf8a6679a72 +Block 0017 [ 23]: d413c7452672421b +Block 0017 [ 24]: 9c8553bc9aa9a3ac +Block 0017 [ 25]: aea0b3ad0a8e7b97 +Block 0017 [ 26]: 7d024038e0b25b37 +Block 0017 [ 27]: 25e901ca558b870d +Block 0017 [ 28]: 646311cb35864fdc +Block 0017 [ 29]: 7755180ad31050bb +Block 0017 [ 30]: db45dcbddd267c51 +Block 0017 [ 31]: d7776d1556dae483 +Block 0017 [ 32]: ba57f51d620df982 +Block 0017 [ 33]: 94523d6c3bd0dca6 +Block 0017 [ 34]: e80c237ab5434208 +Block 0017 [ 35]: f8b6582d4d0b28e5 +Block 0017 [ 36]: 1ba4596ef5f23763 +Block 0017 [ 37]: a1b5be3f522e4f18 +Block 0017 [ 38]: f46d15fb9aec82a9 +Block 0017 [ 39]: fc554234bf947ba0 +Block 0017 [ 40]: 81555cb4ba1e65b8 +Block 0017 [ 41]: 51c91682e578b053 +Block 0017 [ 42]: 7523b1d8e0c77245 +Block 0017 [ 43]: 6c16476e5ac5e8bd +Block 0017 [ 44]: 6314944acce18cbc +Block 0017 [ 45]: 6b43cd08397cd457 +Block 0017 [ 46]: a239e3c7d48b9e5a +Block 0017 [ 47]: 69c2376df7b66591 +Block 0017 [ 48]: 826105da3fb96f0c +Block 0017 [ 49]: 5b70d4230b4309f2 +Block 0017 [ 50]: 1d5b84056f0c9427 +Block 0017 [ 51]: 86a6061b9157b530 +Block 0017 [ 52]: c5781a6ee336c6d4 +Block 0017 [ 53]: c83cbfb283f2db87 +Block 0017 [ 54]: 73c3a7ee255b70b4 +Block 0017 [ 55]: e35346cf3c917a18 +Block 0017 [ 56]: 51d17c233753e88c +Block 0017 [ 57]: c708839e0cfe70d8 +Block 0017 [ 58]: db38c49c7deb9110 +Block 0017 [ 59]: a4b316fc65fe56b4 +Block 0017 [ 60]: 278b861666460673 +Block 0017 [ 61]: 8a602bdd360facee +Block 0017 [ 62]: 9187b67f360fb96f +Block 0017 [ 63]: 929eb2819f26f457 +Block 0017 [ 64]: 416e6d297b208f50 +Block 0017 [ 65]: 35995bf5743caa54 +Block 0017 [ 66]: f2c12345798abde2 +Block 0017 [ 67]: 387e8376d981ed5c +Block 0017 [ 68]: d35b2c8fbed5bbf4 +Block 0017 [ 69]: f77d0f68fbc0b8b6 +Block 0017 [ 70]: 6ca736edbb3f688d +Block 0017 [ 71]: ef34ee1747771a6b +Block 0017 [ 72]: eebf0ca5b6311f32 +Block 0017 [ 73]: fa3fa95cb3d67c5e +Block 0017 [ 74]: 2bccc3d9a03e5bf6 +Block 0017 [ 75]: 736b79dfb710023d +Block 0017 [ 76]: c6f4c8d9b79c8b74 +Block 0017 [ 77]: f5c38b8fd5241700 +Block 0017 [ 78]: ffd159c0618bdffc +Block 0017 [ 79]: b7f47549a90bc033 +Block 0017 [ 80]: 9e876174a58ad8db +Block 0017 [ 81]: 77b8427d935b21ab +Block 0017 [ 82]: 4927a28eba796c7f +Block 0017 [ 83]: 78045ac02f89368f +Block 0017 [ 84]: 4b27512bf6edc90f +Block 0017 [ 85]: 40646c4e19dd788e +Block 0017 [ 86]: 68ab9102c1676ed9 +Block 0017 [ 87]: 05c56dfa101e5935 +Block 0017 [ 88]: 186693df865e9407 +Block 0017 [ 89]: 0385811decc5060d +Block 0017 [ 90]: bfe32fafcf161c7a +Block 0017 [ 91]: 12f640466210cc83 +Block 0017 [ 92]: bfee4686d9857686 +Block 0017 [ 93]: 7aef4cba468a9955 +Block 0017 [ 94]: 4c75ab47d5cc3a8a +Block 0017 [ 95]: 2a5eec15181f9b55 +Block 0017 [ 96]: afa922a4970eec4e +Block 0017 [ 97]: b4675389b5a2ac9b +Block 0017 [ 98]: 9cba91a2e292b96d +Block 0017 [ 99]: 0afdeafb943582b8 +Block 0017 [100]: bf25b9f2b10e5efb +Block 0017 [101]: a2d10582b75d78b5 +Block 0017 [102]: 2a441f808bd0333b +Block 0017 [103]: a642e7057149cc1f +Block 0017 [104]: d6bc9ab2fc3dedd4 +Block 0017 [105]: 0a69e038dad8ed99 +Block 0017 [106]: cb6f1e8b33aa7bbf +Block 0017 [107]: 8304861a110a863f +Block 0017 [108]: c64db5cffd1dddc9 +Block 0017 [109]: 21ab4b7d16d24343 +Block 0017 [110]: c70d7531ff41687b +Block 0017 [111]: d9fbf424520de3ab +Block 0017 [112]: 62dbc0c63614a2ca +Block 0017 [113]: fb5ddca5cc9b5ef5 +Block 0017 [114]: 102fb169979dff96 +Block 0017 [115]: 89bb3c6d5273def2 +Block 0017 [116]: 4e8ad330ed9ba987 +Block 0017 [117]: 91f9120badad4fe8 +Block 0017 [118]: 2cba6deb67a93e33 +Block 0017 [119]: 82eb9efbfc3f069c +Block 0017 [120]: 92751db67186e7b8 +Block 0017 [121]: 452989bad621fbd0 +Block 0017 [122]: b55a1956286888a8 +Block 0017 [123]: 9b60dc755f5cc9f3 +Block 0017 [124]: 752866cc50addf99 +Block 0017 [125]: f80c6f88dbaf5618 +Block 0017 [126]: 2dacf26165da310a +Block 0017 [127]: 5a5c1346648cb98f +Block 0018 [ 0]: c041b5404fc14796 +Block 0018 [ 1]: 42c1d1d2d2412a2c +Block 0018 [ 2]: 322612b96dbe404c +Block 0018 [ 3]: 357a1fb8cc729650 +Block 0018 [ 4]: 7a527a5309468dd2 +Block 0018 [ 5]: fb2cb6f6e10e59b3 +Block 0018 [ 6]: 34c83bfa6b96fe14 +Block 0018 [ 7]: 32e5eee98371df6a +Block 0018 [ 8]: 814e7423992dab73 +Block 0018 [ 9]: 4bb91cf61fbf942a +Block 0018 [ 10]: f87274d2287559b3 +Block 0018 [ 11]: fed41160f5deb3ac +Block 0018 [ 12]: 3fe00e7ccb816d8a +Block 0018 [ 13]: e98cff2234abbb10 +Block 0018 [ 14]: 92e7a0367f92a4d3 +Block 0018 [ 15]: d5b51b4d450add95 +Block 0018 [ 16]: dc28b4287e3f9ed7 +Block 0018 [ 17]: da0cb8b59bc77666 +Block 0018 [ 18]: 5a888148a7c23edc +Block 0018 [ 19]: 22630c8872df9a76 +Block 0018 [ 20]: d05adf7c8efc2f5d +Block 0018 [ 21]: 43be90f2e7d8bcf2 +Block 0018 [ 22]: eac412fc14be4be7 +Block 0018 [ 23]: e1e771059e409d40 +Block 0018 [ 24]: e135eb81cecf1833 +Block 0018 [ 25]: 0c01619993e2f658 +Block 0018 [ 26]: c8cd4eb79c5cd6fa +Block 0018 [ 27]: 9b7ffab4b459cfb6 +Block 0018 [ 28]: bb354089eba04584 +Block 0018 [ 29]: 6b3b2a819b790a99 +Block 0018 [ 30]: ea717cdc28bd1e23 +Block 0018 [ 31]: 3736624be21dadff +Block 0018 [ 32]: ac6b859c93b2e762 +Block 0018 [ 33]: 1cb8d4442942a949 +Block 0018 [ 34]: 7fb052284494bded +Block 0018 [ 35]: 6f952e9ec4bd5d81 +Block 0018 [ 36]: 043d4040a33ed417 +Block 0018 [ 37]: 278620a20136dc5e +Block 0018 [ 38]: 4b71f1f93451bf05 +Block 0018 [ 39]: 4939662290575aaf +Block 0018 [ 40]: 313e1346d49191a6 +Block 0018 [ 41]: 6d39db233f342f32 +Block 0018 [ 42]: d2ae94655f710ce3 +Block 0018 [ 43]: c9c047392f281a66 +Block 0018 [ 44]: 80dd26a85e5e796f +Block 0018 [ 45]: f186dd414ce01efb +Block 0018 [ 46]: 051f172d5797a286 +Block 0018 [ 47]: 835513a6ab42e638 +Block 0018 [ 48]: 3226271414bf91ae +Block 0018 [ 49]: 04cb3ebae9b28551 +Block 0018 [ 50]: 83ed429d7eb9b927 +Block 0018 [ 51]: 7095a647334175a9 +Block 0018 [ 52]: 33db074e9991615d +Block 0018 [ 53]: 46d842a09fe53c20 +Block 0018 [ 54]: 557606fc5495a082 +Block 0018 [ 55]: a3ad8552fe15a034 +Block 0018 [ 56]: 078a9456a97efccf +Block 0018 [ 57]: d18f62b6e538775a +Block 0018 [ 58]: f81e4b8ec17d28d4 +Block 0018 [ 59]: 5928661efcc1b8bd +Block 0018 [ 60]: fcf4eac3d546e540 +Block 0018 [ 61]: ddb969004b39ba74 +Block 0018 [ 62]: 20e448cd8be12f7a +Block 0018 [ 63]: a61b19150fafec9d +Block 0018 [ 64]: 748bdc3cf48998a6 +Block 0018 [ 65]: ab65d8df971cbe5a +Block 0018 [ 66]: 8c6f9434a9586b89 +Block 0018 [ 67]: 895ca0446a2c28fa +Block 0018 [ 68]: 904d7791774e17fc +Block 0018 [ 69]: 223b37a2589eb79d +Block 0018 [ 70]: 16fa6b43545df34c +Block 0018 [ 71]: 05053dfbf5963e0c +Block 0018 [ 72]: bf4e015f2b2a8543 +Block 0018 [ 73]: bf18babcf76250c0 +Block 0018 [ 74]: a3b1fdfea3b799c3 +Block 0018 [ 75]: 7b66b5e810bb8ed0 +Block 0018 [ 76]: c31a6e1403261884 +Block 0018 [ 77]: fcc69d0a7dc39120 +Block 0018 [ 78]: fa1226c66d84c99b +Block 0018 [ 79]: 4fc6666d38efd0d2 +Block 0018 [ 80]: 180af3a735556b6c +Block 0018 [ 81]: 257757c7b0d7bd60 +Block 0018 [ 82]: b8cf53a7741f7206 +Block 0018 [ 83]: 36445f0e4fa2ff4f +Block 0018 [ 84]: 84e818bcf7f9c0e7 +Block 0018 [ 85]: aef043adae1fea8a +Block 0018 [ 86]: 1a4b58be1665f6c8 +Block 0018 [ 87]: f05dc6e91bc674b7 +Block 0018 [ 88]: fb774360bac8a6be +Block 0018 [ 89]: b391bc826f20faee +Block 0018 [ 90]: d27202a49375b6a0 +Block 0018 [ 91]: 7f4d317308ed1f24 +Block 0018 [ 92]: 85b0e894700e8c53 +Block 0018 [ 93]: 2dc02256d2e6e25a +Block 0018 [ 94]: f59439776d6f90b3 +Block 0018 [ 95]: 743cb12747d017ae +Block 0018 [ 96]: 3dba91a205dcc769 +Block 0018 [ 97]: 51a7dc73cfe29b8a +Block 0018 [ 98]: 43c46e0312db15f2 +Block 0018 [ 99]: 6405b2d2fe5e79a5 +Block 0018 [100]: 9637fdc2d5644c31 +Block 0018 [101]: ea1f9a3fa19447b3 +Block 0018 [102]: 8844881da9341a88 +Block 0018 [103]: a468100efa203be3 +Block 0018 [104]: 628df4042f4e5768 +Block 0018 [105]: d47d10937d3a46d9 +Block 0018 [106]: 9df989b91d7709e2 +Block 0018 [107]: 017ebdf71eda7aaa +Block 0018 [108]: bd75089946ac2eef +Block 0018 [109]: 978c9a569c3de744 +Block 0018 [110]: bf43f9640ece86d2 +Block 0018 [111]: e6bd892f7b28d4e6 +Block 0018 [112]: 2ff9516b1e19d1c3 +Block 0018 [113]: f0dc1c592e7010b9 +Block 0018 [114]: eb4cce9940eccf06 +Block 0018 [115]: da4d653f57eec00f +Block 0018 [116]: e51ab8d3c4be9827 +Block 0018 [117]: 82a6fc187105d291 +Block 0018 [118]: 5c2917ce70d42dc6 +Block 0018 [119]: 2d13186607f06354 +Block 0018 [120]: 08255748d3544673 +Block 0018 [121]: 38864c085f79994e +Block 0018 [122]: ddb698307723325f +Block 0018 [123]: bfec853f7eba283d +Block 0018 [124]: 29dbde8f56583edb +Block 0018 [125]: 89c8a74d98ca5d87 +Block 0018 [126]: 2568841313d637b8 +Block 0018 [127]: c7c147e011020538 +Block 0019 [ 0]: 5975d074fb2b80ca +Block 0019 [ 1]: d3a0fd982f4ffb97 +Block 0019 [ 2]: f2669a67972dfa35 +Block 0019 [ 3]: 1f574aaa1262c366 +Block 0019 [ 4]: 9c1e3ed5ba77c25e +Block 0019 [ 5]: 88783fba68f8148a +Block 0019 [ 6]: e87d826ed27f9403 +Block 0019 [ 7]: 14ecc52ba1db2fe0 +Block 0019 [ 8]: aae61478ed5259ba +Block 0019 [ 9]: 4b1414084db18e5f +Block 0019 [ 10]: c35f1e0ea6765b4c +Block 0019 [ 11]: 7c17e2cd01b7faef +Block 0019 [ 12]: 31888561748cb1bf +Block 0019 [ 13]: 9c8eef4bb77e3b31 +Block 0019 [ 14]: 65615a5be74205b7 +Block 0019 [ 15]: 834fa75572cc0c16 +Block 0019 [ 16]: ced5b8d8a542ca3e +Block 0019 [ 17]: 63fc5c364db120fe +Block 0019 [ 18]: 03385d133a6b3b8d +Block 0019 [ 19]: 6e9483e026d4c324 +Block 0019 [ 20]: 01c63c1034072162 +Block 0019 [ 21]: 4106addfa2a6c4a4 +Block 0019 [ 22]: 545bb4774f5af6fb +Block 0019 [ 23]: f304cc3ff0149f20 +Block 0019 [ 24]: c432491aeea87c6f +Block 0019 [ 25]: 67b894d2251fcd87 +Block 0019 [ 26]: a8f491ffe7629435 +Block 0019 [ 27]: 0529f1dc08202fe3 +Block 0019 [ 28]: dce32768c571875d +Block 0019 [ 29]: 0ee9629f09082ef6 +Block 0019 [ 30]: cad6d8d9b39f6a0f +Block 0019 [ 31]: b3a689484a015bc0 +Block 0019 [ 32]: 9d8877a13d1c3826 +Block 0019 [ 33]: 238759c6a375b2e4 +Block 0019 [ 34]: 1a0840206d678414 +Block 0019 [ 35]: 5f4f523e2f9bc1db +Block 0019 [ 36]: 86bac81c9f087660 +Block 0019 [ 37]: 2b1fc228b7ce1eae +Block 0019 [ 38]: 272373ba633e502a +Block 0019 [ 39]: 07d1da188de3bd27 +Block 0019 [ 40]: 60f1d7a0cf09bd7d +Block 0019 [ 41]: e8338703ba406ffa +Block 0019 [ 42]: a3126dac248af0ba +Block 0019 [ 43]: b66d1411baeee667 +Block 0019 [ 44]: 7e428cba8e92009a +Block 0019 [ 45]: f433fe4cc97cb0a1 +Block 0019 [ 46]: 6d54be08d676e02f +Block 0019 [ 47]: 5520bcd293855640 +Block 0019 [ 48]: 3f559b48823c0871 +Block 0019 [ 49]: 9c3709178d3c2c73 +Block 0019 [ 50]: dc5d227ca8b0a06c +Block 0019 [ 51]: bd6752dd42d9d747 +Block 0019 [ 52]: 2855f70a04ff378e +Block 0019 [ 53]: 33fdd9e42f309bb6 +Block 0019 [ 54]: bbd3ece6fd7e22d3 +Block 0019 [ 55]: 55dc22237d39f2f0 +Block 0019 [ 56]: 86c379043652eebc +Block 0019 [ 57]: c170577fe3e3559b +Block 0019 [ 58]: 11787c617d9b2ff8 +Block 0019 [ 59]: eb7101cfebc209fb +Block 0019 [ 60]: 802bba4c3656ef15 +Block 0019 [ 61]: 583c2ae983b05494 +Block 0019 [ 62]: a03b6463c9aaa2eb +Block 0019 [ 63]: bde4ae47733fa2e2 +Block 0019 [ 64]: 23ada257cf4c6c7a +Block 0019 [ 65]: ada4e1f5e4344a35 +Block 0019 [ 66]: cc978a0231cfbffe +Block 0019 [ 67]: a371c42dc049887c +Block 0019 [ 68]: 345f8bda6f0df672 +Block 0019 [ 69]: 8650d26948762f48 +Block 0019 [ 70]: f43c2d95e07b072a +Block 0019 [ 71]: 67f61ef3ebbc0f96 +Block 0019 [ 72]: 10e739223f7d96e5 +Block 0019 [ 73]: fd6c29b7a80413a9 +Block 0019 [ 74]: 4e1c3d1da37018bc +Block 0019 [ 75]: b02c4fbb8af4294f +Block 0019 [ 76]: 8b40c90a7c84e1ce +Block 0019 [ 77]: 0f985348b6d734b1 +Block 0019 [ 78]: 7dd931cc8b11632a +Block 0019 [ 79]: 814fe25909879a87 +Block 0019 [ 80]: 76d914493b833e24 +Block 0019 [ 81]: 5b5be017ff49892c +Block 0019 [ 82]: 5d83b46073cfd823 +Block 0019 [ 83]: 290b8fdb7f7fb122 +Block 0019 [ 84]: 0efc2d0bbc0d35ac +Block 0019 [ 85]: fec9e053d1874abc +Block 0019 [ 86]: 6724fad53bb13885 +Block 0019 [ 87]: 5940e1a1676bee41 +Block 0019 [ 88]: ed7f9730e4aa9718 +Block 0019 [ 89]: 0cba50e516fe5321 +Block 0019 [ 90]: 417b1c44ebc37352 +Block 0019 [ 91]: c072e1ef6fdbbbc0 +Block 0019 [ 92]: f59b0ea794221c51 +Block 0019 [ 93]: 8a80635f831b642c +Block 0019 [ 94]: 816090e93f345f93 +Block 0019 [ 95]: 8a60e2d12967aeaa +Block 0019 [ 96]: 6707818a46cde2cc +Block 0019 [ 97]: 75daf2d9dd0846d9 +Block 0019 [ 98]: 506b1cf7d9d6b08e +Block 0019 [ 99]: 65903cee3e8a7f3b +Block 0019 [100]: be2174352527d8ce +Block 0019 [101]: 12e0d0792954a886 +Block 0019 [102]: 7eab60f6de1ce0d9 +Block 0019 [103]: 360ea3fd133fd307 +Block 0019 [104]: 5f7435144945666d +Block 0019 [105]: 243ea63a94f2ad1f +Block 0019 [106]: 2d8e733176d41102 +Block 0019 [107]: 746146ad34837e87 +Block 0019 [108]: 90354e38c8503718 +Block 0019 [109]: 1cd40344cbe92283 +Block 0019 [110]: c668973adf6ca79c +Block 0019 [111]: a7e8b08f16ee0da1 +Block 0019 [112]: 4b0a6b18f0a124b1 +Block 0019 [113]: c587e43c8155c830 +Block 0019 [114]: 58cb61030ee0e295 +Block 0019 [115]: a288723f509a656d +Block 0019 [116]: a234563f4e938bc7 +Block 0019 [117]: 78eae87758c6490c +Block 0019 [118]: 3f725bf6465c17bd +Block 0019 [119]: d906e8489e8bd295 +Block 0019 [120]: 589e8eb2682879ab +Block 0019 [121]: d64af1ef2a74f6b6 +Block 0019 [122]: 8144c43fde1ad585 +Block 0019 [123]: 296883ffd42aaf46 +Block 0019 [124]: a3d1b0b82df571d0 +Block 0019 [125]: b8912fe47cc36af9 +Block 0019 [126]: 785f891f4fcbe2c5 +Block 0019 [127]: dface78ba2552ce9 +Block 0020 [ 0]: bf06b2703ca2687f +Block 0020 [ 1]: 66eeeb3ddf34f8a1 +Block 0020 [ 2]: b95f9f996c1c5488 +Block 0020 [ 3]: 242a8bbb2cba35b1 +Block 0020 [ 4]: d742af34a7687518 +Block 0020 [ 5]: fd49b478c7c35b1e +Block 0020 [ 6]: a9aa82aef77d374c +Block 0020 [ 7]: 931f287f229addfb +Block 0020 [ 8]: aea5556a92b17106 +Block 0020 [ 9]: 3421eb9c547646df +Block 0020 [ 10]: 84902b6557754253 +Block 0020 [ 11]: 0dddc14b4aa9dc2c +Block 0020 [ 12]: 400f9e0e79df61d4 +Block 0020 [ 13]: 17aa6a5b0509dc43 +Block 0020 [ 14]: 4f5c4056326d4a69 +Block 0020 [ 15]: 462ac87fda95d3f4 +Block 0020 [ 16]: 9dc248b452234994 +Block 0020 [ 17]: 9f55bef8c449b3fe +Block 0020 [ 18]: dcb9018c911c9823 +Block 0020 [ 19]: 8b0666361853eb86 +Block 0020 [ 20]: f75bfee1a466f38a +Block 0020 [ 21]: eef004f6622ba3a4 +Block 0020 [ 22]: 5e7542da527fbfc7 +Block 0020 [ 23]: cad27d215519e198 +Block 0020 [ 24]: 543a711a2012c0df +Block 0020 [ 25]: 782439a5cf4c6357 +Block 0020 [ 26]: 626f8cb2f646e336 +Block 0020 [ 27]: 27d63ff2d2f5a069 +Block 0020 [ 28]: 7a8adda616f7f464 +Block 0020 [ 29]: 01481647db7b5bfb +Block 0020 [ 30]: 133f07aa86c8d5fb +Block 0020 [ 31]: fdb9090a47295857 +Block 0020 [ 32]: 2b8af4c3a603a10e +Block 0020 [ 33]: 6893ba15ef708e00 +Block 0020 [ 34]: ae6e506b7231044a +Block 0020 [ 35]: 80a831e434a83282 +Block 0020 [ 36]: e6f31bf7f5ac1013 +Block 0020 [ 37]: 59cb7125f004794d +Block 0020 [ 38]: 909d3baf9e4f87a4 +Block 0020 [ 39]: 424af5e6e79d06b1 +Block 0020 [ 40]: 3fae61df4c245611 +Block 0020 [ 41]: 47910940370dfa1c +Block 0020 [ 42]: 255d8003b2be5289 +Block 0020 [ 43]: af9ef269872b42fe +Block 0020 [ 44]: 6148bb955ee73cfd +Block 0020 [ 45]: 9153a8710241bfa8 +Block 0020 [ 46]: 7f990736fa01991f +Block 0020 [ 47]: b0fd4eef9c02115d +Block 0020 [ 48]: 9dd6f482f4191acf +Block 0020 [ 49]: ca024fbf3db9a740 +Block 0020 [ 50]: df82edd640dc69b1 +Block 0020 [ 51]: 1654b5ae829fbd58 +Block 0020 [ 52]: 761c1b1b18247948 +Block 0020 [ 53]: faca1c68baf59e32 +Block 0020 [ 54]: cc38df5e5e7aa81f +Block 0020 [ 55]: 49f3d3f152d1dc0f +Block 0020 [ 56]: f89018f9c5129515 +Block 0020 [ 57]: dac5b6c8ae9f50ed +Block 0020 [ 58]: 8ba01f9fbe900280 +Block 0020 [ 59]: 10611166a326e7e6 +Block 0020 [ 60]: de55eadd96b3f4df +Block 0020 [ 61]: 42aab6fff6e521cf +Block 0020 [ 62]: 47ec7168714eaece +Block 0020 [ 63]: 904dd019a3ab244a +Block 0020 [ 64]: 7f2df0d8c84f6e34 +Block 0020 [ 65]: 1fb128a8df1f68fd +Block 0020 [ 66]: f36c3853507c46c2 +Block 0020 [ 67]: 4df02816df208152 +Block 0020 [ 68]: a6048fc325ec6135 +Block 0020 [ 69]: 01e3809304a909cc +Block 0020 [ 70]: 5f1aa6c03fe7ffa0 +Block 0020 [ 71]: a71d6fadb3403338 +Block 0020 [ 72]: b05b24740b5059bb +Block 0020 [ 73]: 1e5be332cab4cc96 +Block 0020 [ 74]: eabd4670953d4bcf +Block 0020 [ 75]: 75bb0e890c309e8c +Block 0020 [ 76]: 4ba5f3410211ad2a +Block 0020 [ 77]: 74cf2a9624d12fd4 +Block 0020 [ 78]: 6aea587ee952596d +Block 0020 [ 79]: f6ac7426e0240886 +Block 0020 [ 80]: 1ab879b3a53065db +Block 0020 [ 81]: 4a5beac193536b01 +Block 0020 [ 82]: 5193a8fd2c3c74db +Block 0020 [ 83]: 77616a4f76538cf6 +Block 0020 [ 84]: 495cd739bf10f5c8 +Block 0020 [ 85]: b68f2b22d119f196 +Block 0020 [ 86]: 42cdda3bb05cae1a +Block 0020 [ 87]: bea6a38d6aa87f25 +Block 0020 [ 88]: 76664223b0a34ea7 +Block 0020 [ 89]: 86c583aa440330f4 +Block 0020 [ 90]: 088a72d7ec72de94 +Block 0020 [ 91]: 88460c4824f41ca6 +Block 0020 [ 92]: 633bcdeecbb960ac +Block 0020 [ 93]: 5e75c4663e3d852e +Block 0020 [ 94]: 1ccf9cbc5da47576 +Block 0020 [ 95]: 046dc004ef4923bf +Block 0020 [ 96]: 88eefd45eb5e9eaa +Block 0020 [ 97]: 0e955efe5f8797c1 +Block 0020 [ 98]: 91d9762a0fed8ebb +Block 0020 [ 99]: 52d8ebcdbacb5df7 +Block 0020 [100]: 574cd3e9238e2764 +Block 0020 [101]: a980d494a5100569 +Block 0020 [102]: 86832502488c9aa7 +Block 0020 [103]: 1fc9bdb470956f1f +Block 0020 [104]: 39f8bf49af2c10c1 +Block 0020 [105]: 037f1959a20a2823 +Block 0020 [106]: c9fa2b01347358db +Block 0020 [107]: 2494b5368202ff78 +Block 0020 [108]: 7a61a9b0ee5dc1be +Block 0020 [109]: 8da10663648d024a +Block 0020 [110]: 5ac14216531e239e +Block 0020 [111]: 91c917ab42a14684 +Block 0020 [112]: 80aa0cdb9b0cb881 +Block 0020 [113]: 80353569cd511cb0 +Block 0020 [114]: 334c54fca282870c +Block 0020 [115]: d2fb2e2aa01c2da1 +Block 0020 [116]: 06baca7139225edd +Block 0020 [117]: 4d23ee2ef7aa6c5a +Block 0020 [118]: 85e3b2db336611d3 +Block 0020 [119]: 54e049b532f97e15 +Block 0020 [120]: 9ba8ca6975ee7697 +Block 0020 [121]: dbb4a07ee8e1e1ec +Block 0020 [122]: 08a88026b23a1a8f +Block 0020 [123]: 904a6fb70888cc8e +Block 0020 [124]: 8015003a37c1d2c8 +Block 0020 [125]: 4a0bece1dc802e8a +Block 0020 [126]: e83b5bc5b63254dd +Block 0020 [127]: 315b078379732a55 +Block 0021 [ 0]: d98dacb952d24420 +Block 0021 [ 1]: 6ecefcfe9d2fce83 +Block 0021 [ 2]: 382b10cdcd4992f2 +Block 0021 [ 3]: 7c448939c4bf754d +Block 0021 [ 4]: e952610c3a3def5b +Block 0021 [ 5]: b8530f5459295399 +Block 0021 [ 6]: bbe9e115b1e37624 +Block 0021 [ 7]: 3619cf1d35d29654 +Block 0021 [ 8]: 1623a3887360cc74 +Block 0021 [ 9]: 8d33879e4b8217fd +Block 0021 [ 10]: 6c63b8e106d93d20 +Block 0021 [ 11]: 33a3a79e9cf2a354 +Block 0021 [ 12]: a24c5ba0e3072c87 +Block 0021 [ 13]: dbc11e2218cf95b3 +Block 0021 [ 14]: 1ba86314b90b1788 +Block 0021 [ 15]: 17b0904e5bf6f224 +Block 0021 [ 16]: 1451021dffe4fc93 +Block 0021 [ 17]: fa60d71c5556f9be +Block 0021 [ 18]: a4d8a51e384ab69b +Block 0021 [ 19]: 67d12fd94a2be9f5 +Block 0021 [ 20]: f14bb5b5aac93bc9 +Block 0021 [ 21]: 9378796ef3ba102b +Block 0021 [ 22]: 5e6f488326121b6b +Block 0021 [ 23]: 592621c434b0ce6d +Block 0021 [ 24]: c7424cfff8b3b826 +Block 0021 [ 25]: 04b0b25e87bd42f2 +Block 0021 [ 26]: 69339b43e358f015 +Block 0021 [ 27]: 9c1a659e532ff7c5 +Block 0021 [ 28]: a1d5bd93788dbcac +Block 0021 [ 29]: 9366ff377573f23d +Block 0021 [ 30]: 86d8b9e63bc75e4f +Block 0021 [ 31]: e4a67711b9f4fa29 +Block 0021 [ 32]: 0dad38ae8f5a1e04 +Block 0021 [ 33]: 4fae94319789ee3e +Block 0021 [ 34]: 3cdbdb5dfe5b731b +Block 0021 [ 35]: 4e0ce9a6413c3bcd +Block 0021 [ 36]: 93640d28a17deca2 +Block 0021 [ 37]: 07ed1daa7f314e39 +Block 0021 [ 38]: dde6874f6cb113ab +Block 0021 [ 39]: 84d5e35f62380ed3 +Block 0021 [ 40]: cb9e1fccad5a49a8 +Block 0021 [ 41]: ac4d4db97342a253 +Block 0021 [ 42]: f8116ff018848c4b +Block 0021 [ 43]: a05377f405673668 +Block 0021 [ 44]: 7472fa1ac1fa40dd +Block 0021 [ 45]: 66139b5e4c70780e +Block 0021 [ 46]: 88c21339074cf6c1 +Block 0021 [ 47]: a5148f1e4e76661b +Block 0021 [ 48]: 170a478179733825 +Block 0021 [ 49]: eb143bdecf5dd3ec +Block 0021 [ 50]: d2823463723e066d +Block 0021 [ 51]: b3940bbd94f8bd9c +Block 0021 [ 52]: dc5aacae8113ea16 +Block 0021 [ 53]: 1cfccf1746c31e74 +Block 0021 [ 54]: c0ef593db7d6031a +Block 0021 [ 55]: 332ea71b13a66d46 +Block 0021 [ 56]: 4a64bf8f0edd195b +Block 0021 [ 57]: 865db29b08296b25 +Block 0021 [ 58]: 4910a3014fe2f270 +Block 0021 [ 59]: a358cfd6afbe1a7b +Block 0021 [ 60]: 6986b50badaf443b +Block 0021 [ 61]: 598890f56972ca95 +Block 0021 [ 62]: ec44d5f01c361a8c +Block 0021 [ 63]: f79b2cafc96cd35a +Block 0021 [ 64]: 641067f7e4d0fc30 +Block 0021 [ 65]: b8edd873352f01ef +Block 0021 [ 66]: d1ff92e53c93a46d +Block 0021 [ 67]: 74ede5ca7e19622c +Block 0021 [ 68]: 9efa50c40af182d4 +Block 0021 [ 69]: 1dc41311428d8ed6 +Block 0021 [ 70]: d711fe07a8727a56 +Block 0021 [ 71]: c4d212ff76c97984 +Block 0021 [ 72]: 9d073689ca2ad4fc +Block 0021 [ 73]: 178aa8d197172ee7 +Block 0021 [ 74]: 46a0c28765bb4043 +Block 0021 [ 75]: afa90f2b421dbf1c +Block 0021 [ 76]: 8e7bee6842b6af3a +Block 0021 [ 77]: 79d2f5438af8bcb6 +Block 0021 [ 78]: ea00efd5db7c57de +Block 0021 [ 79]: f0974aa1ec354092 +Block 0021 [ 80]: 6c74b588913d4b1e +Block 0021 [ 81]: e8c90d16b01d747f +Block 0021 [ 82]: 7ef33f5658372999 +Block 0021 [ 83]: 4e0397c1dd16e9a7 +Block 0021 [ 84]: 289e3c980bc5c267 +Block 0021 [ 85]: fdc35d92fb2b138d +Block 0021 [ 86]: 4f60dbb4715f4377 +Block 0021 [ 87]: 038ea7ce4501b429 +Block 0021 [ 88]: f5d6971a39619b5c +Block 0021 [ 89]: 1ee68cb6ad1ad2bf +Block 0021 [ 90]: e7b678892a7ab0d3 +Block 0021 [ 91]: 5296b50abd13f8d8 +Block 0021 [ 92]: 0a0c11eb32bad5d1 +Block 0021 [ 93]: 62a04ab31aca9b85 +Block 0021 [ 94]: 8ee3c8aaafc1c37a +Block 0021 [ 95]: a679930ef4e84767 +Block 0021 [ 96]: b04cffad7dd306f4 +Block 0021 [ 97]: 615bf6a1ce835476 +Block 0021 [ 98]: fded9b06857aaeef +Block 0021 [ 99]: fdbf46d28acab387 +Block 0021 [100]: 58fcf9286a597f27 +Block 0021 [101]: 365e45615e1c06a1 +Block 0021 [102]: d5b5b8783a8f6e94 +Block 0021 [103]: 4f6704326849f6ee +Block 0021 [104]: 4786fb349eeb83d3 +Block 0021 [105]: 6e23749d929458d7 +Block 0021 [106]: 762b35de343c8888 +Block 0021 [107]: 45c0bbe5e881eebb +Block 0021 [108]: 5524af970d7747c2 +Block 0021 [109]: 7642e839a38308ed +Block 0021 [110]: 83116756fae0756d +Block 0021 [111]: dc1310d82834160f +Block 0021 [112]: db164a0b29b09861 +Block 0021 [113]: 297e4577cf659941 +Block 0021 [114]: e7fc84e90aac30ca +Block 0021 [115]: b36c4bea07e566d4 +Block 0021 [116]: 2ab7769287c75732 +Block 0021 [117]: fd931d4cb3c65f6f +Block 0021 [118]: f678f8e63ec79f54 +Block 0021 [119]: db7985eca3d474e9 +Block 0021 [120]: e6f59690114a1d52 +Block 0021 [121]: e3307b0f6212383b +Block 0021 [122]: 0c128521465d65ea +Block 0021 [123]: b798c51553ecfa41 +Block 0021 [124]: 20377296fa088c82 +Block 0021 [125]: bb3e7fe72954d469 +Block 0021 [126]: 0bdd6756a03fc48b +Block 0021 [127]: a59afa783ff40b08 +Block 0022 [ 0]: 894fb10684f63911 +Block 0022 [ 1]: c79e516e27e0eae1 +Block 0022 [ 2]: e4eb70963475aa54 +Block 0022 [ 3]: fa82a9bd92c66730 +Block 0022 [ 4]: 6bac0da0c39340c9 +Block 0022 [ 5]: 8ec6d78db179db48 +Block 0022 [ 6]: feb6da1a2c768038 +Block 0022 [ 7]: 8d8330d86ab0b201 +Block 0022 [ 8]: 782a6b1b6582aa80 +Block 0022 [ 9]: f18bd0c0ac40731f +Block 0022 [ 10]: 876077f975a2610e +Block 0022 [ 11]: ab514d1c8bd52949 +Block 0022 [ 12]: 758a978e57a5cb53 +Block 0022 [ 13]: a3f99b1346fbc817 +Block 0022 [ 14]: b98c66ba86dad2da +Block 0022 [ 15]: 891da0ae5d3c8167 +Block 0022 [ 16]: d5665fcafefc49af +Block 0022 [ 17]: b896b1d29e0478ab +Block 0022 [ 18]: a66a6c204d5e1dac +Block 0022 [ 19]: 991fcd02bdb902a8 +Block 0022 [ 20]: 4a10d59071361da9 +Block 0022 [ 21]: 38ee47da00b3896f +Block 0022 [ 22]: 1b1a81ae9ff8c085 +Block 0022 [ 23]: cb5f18bc3495bfa7 +Block 0022 [ 24]: ab16c36264a70127 +Block 0022 [ 25]: 2c00e90e8650f9a7 +Block 0022 [ 26]: b865eb3c34a4898c +Block 0022 [ 27]: 686164804f2386fd +Block 0022 [ 28]: cdf4f95feaa6880e +Block 0022 [ 29]: de938318bce749ab +Block 0022 [ 30]: 6a8884ad54f8e0c0 +Block 0022 [ 31]: ba17a2eed4edb6a3 +Block 0022 [ 32]: 03565e3f24fc6c53 +Block 0022 [ 33]: a72d60702118177d +Block 0022 [ 34]: 53cc8a0dd84a79ee +Block 0022 [ 35]: d8bc2ff2f8e1e245 +Block 0022 [ 36]: 4664e02b6091aaf7 +Block 0022 [ 37]: 8ce8fbfb6b2c659f +Block 0022 [ 38]: 1d3ff48f828c076e +Block 0022 [ 39]: 2a154a5733380c66 +Block 0022 [ 40]: 97935f5fcf051a92 +Block 0022 [ 41]: 30a082488b0cc18f +Block 0022 [ 42]: b8cec1865510da77 +Block 0022 [ 43]: f69f733d02225eb8 +Block 0022 [ 44]: 5e977e5a7fb48dc9 +Block 0022 [ 45]: c9ac7bbbde9594fe +Block 0022 [ 46]: 38726e01c66a8330 +Block 0022 [ 47]: d0cad8f24e4bf70d +Block 0022 [ 48]: b92f4fb7765df3c3 +Block 0022 [ 49]: 599e65781b30edae +Block 0022 [ 50]: 30371e95d33a8566 +Block 0022 [ 51]: ef8cdbb7b77acf52 +Block 0022 [ 52]: 7e62aa6c33002015 +Block 0022 [ 53]: b79f8344f4aca7d2 +Block 0022 [ 54]: c306c71173828957 +Block 0022 [ 55]: 04ec0a2cea3ca2be +Block 0022 [ 56]: 669ed752935e38de +Block 0022 [ 57]: e41e57dad7e38479 +Block 0022 [ 58]: f68f6869312acf69 +Block 0022 [ 59]: d2e9eef906a6e5da +Block 0022 [ 60]: 3dc8f02bf675a71c +Block 0022 [ 61]: fe05d48e00d632d7 +Block 0022 [ 62]: 7f2dee8ee9900bbe +Block 0022 [ 63]: 7d499069dfe3f84a +Block 0022 [ 64]: efc16839f74bd528 +Block 0022 [ 65]: 85a573fa646a7922 +Block 0022 [ 66]: 739f50e997638d43 +Block 0022 [ 67]: 02d0f0e636f1ead4 +Block 0022 [ 68]: fb0925efa1e52cd4 +Block 0022 [ 69]: c46b1cf1f1a59a8d +Block 0022 [ 70]: 1ffb7a7a2402392b +Block 0022 [ 71]: 95694bedb94e49a4 +Block 0022 [ 72]: bf6b98b553e545c9 +Block 0022 [ 73]: 024b23922c08cbf6 +Block 0022 [ 74]: e942a9619f377d06 +Block 0022 [ 75]: 845346bd3d6ed087 +Block 0022 [ 76]: 811557cc8ed4cdf5 +Block 0022 [ 77]: 2596c4bef0b39380 +Block 0022 [ 78]: 00b3ec347bc265b8 +Block 0022 [ 79]: 3e3f1e7f786c1514 +Block 0022 [ 80]: 40c8998c013651cd +Block 0022 [ 81]: 424ada87053d72ca +Block 0022 [ 82]: 135f12196de93fd1 +Block 0022 [ 83]: 85d71d71a38da084 +Block 0022 [ 84]: b2c2e83ce6bf68be +Block 0022 [ 85]: c00799ccb83f163b +Block 0022 [ 86]: 23d14becef3b11d3 +Block 0022 [ 87]: 436c07c01f94bcd7 +Block 0022 [ 88]: 182e68a627907240 +Block 0022 [ 89]: 3049fbea32141bbb +Block 0022 [ 90]: 6ad0528debcec2bc +Block 0022 [ 91]: 8b49f103c0010c3c +Block 0022 [ 92]: 2ad22e691ed79870 +Block 0022 [ 93]: fca9c54f859e2927 +Block 0022 [ 94]: 11e276466ab8bcfa +Block 0022 [ 95]: 001174f7b1c4f6a5 +Block 0022 [ 96]: e237f3a569ede1c8 +Block 0022 [ 97]: 2199033ff0c87b70 +Block 0022 [ 98]: 46ca834e676152d3 +Block 0022 [ 99]: b90b08ea4b9b1272 +Block 0022 [100]: ddba70ef01abc23b +Block 0022 [101]: 8a7f67c932bfa0c2 +Block 0022 [102]: 6c8e92f6a8b41c30 +Block 0022 [103]: d8de541588bd27cb +Block 0022 [104]: bd72f5b7c21c327f +Block 0022 [105]: 9bbca4fe9883b002 +Block 0022 [106]: 1e17e97459704a3d +Block 0022 [107]: 1b5e1bb4d628e734 +Block 0022 [108]: 4164a672d7f37337 +Block 0022 [109]: 79202876a4e1d434 +Block 0022 [110]: 83a60d1ae8b4d69d +Block 0022 [111]: be992378e10ae871 +Block 0022 [112]: 8ef05f200cc7a9b8 +Block 0022 [113]: 8e3b8ecbd99494f3 +Block 0022 [114]: 8be8f5e9977fb07b +Block 0022 [115]: 6562a43f5eee838a +Block 0022 [116]: 278de9718e90574d +Block 0022 [117]: 09976190662a1bc6 +Block 0022 [118]: f8bc98e4c7f01f71 +Block 0022 [119]: 1f5b6162280592b1 +Block 0022 [120]: 93c35337d2f78dd8 +Block 0022 [121]: fba0e65ae8ad86a8 +Block 0022 [122]: bb080e690d538029 +Block 0022 [123]: cd914b9a50bc983c +Block 0022 [124]: b86bb82fbb02716f +Block 0022 [125]: 69debb138546a813 +Block 0022 [126]: 5573bba3fa50b093 +Block 0022 [127]: e0486d1e7e4ba4d2 +Block 0023 [ 0]: 4c2e8bfde4858256 +Block 0023 [ 1]: 0e27b8df1a7bfd63 +Block 0023 [ 2]: 0ca3b35943cf7423 +Block 0023 [ 3]: b409995a80af9766 +Block 0023 [ 4]: 27cfac08e2e49ad8 +Block 0023 [ 5]: 8a6e4f3e271e25a0 +Block 0023 [ 6]: c71594856a479dac +Block 0023 [ 7]: 506f4270ed9605f4 +Block 0023 [ 8]: 2e7c70c26839396b +Block 0023 [ 9]: 0b20f649d9523165 +Block 0023 [ 10]: 543e217485c0abeb +Block 0023 [ 11]: 0cb1abcc888e01c8 +Block 0023 [ 12]: 9d6360c15dcb2600 +Block 0023 [ 13]: 3f16dbb1f886001a +Block 0023 [ 14]: ec9b7d4980243fca +Block 0023 [ 15]: afdfec256cbf0b7a +Block 0023 [ 16]: 8f584e724b650a88 +Block 0023 [ 17]: c413f1aba32cc4eb +Block 0023 [ 18]: 17d545f8b2e64314 +Block 0023 [ 19]: 9068a6d6ce974e4e +Block 0023 [ 20]: d6b452deab39ca75 +Block 0023 [ 21]: 59218d12cab0af33 +Block 0023 [ 22]: ed19b3667f1fbba8 +Block 0023 [ 23]: 93a226a16d6bb59e +Block 0023 [ 24]: 0de268264746dc53 +Block 0023 [ 25]: 42bec86aa16652c4 +Block 0023 [ 26]: a17a4df361e17dc5 +Block 0023 [ 27]: 2ca05b04344c29f6 +Block 0023 [ 28]: 15ec2ac7c425d01e +Block 0023 [ 29]: 98723a73be5c449d +Block 0023 [ 30]: fac664e9b515c24d +Block 0023 [ 31]: 667c74be9cfbf2de +Block 0023 [ 32]: de3851fc81a42170 +Block 0023 [ 33]: 4d9afc9e7d1dba49 +Block 0023 [ 34]: 8380e0274161b55c +Block 0023 [ 35]: 3b3f74f7b1ffdc7d +Block 0023 [ 36]: af8146b72185e1b1 +Block 0023 [ 37]: 045c8173a0ca5e9b +Block 0023 [ 38]: 6b9462d3a3079ca7 +Block 0023 [ 39]: 91a29181d7aee397 +Block 0023 [ 40]: 1f78f53cba1cfb53 +Block 0023 [ 41]: a4ecd6402fe982b2 +Block 0023 [ 42]: 52290de77a77a30b +Block 0023 [ 43]: 8636b59fdfc2628a +Block 0023 [ 44]: e981e9ef1efd52fa +Block 0023 [ 45]: 2daceec89e9e75d8 +Block 0023 [ 46]: 7553a6b86c1bd3b4 +Block 0023 [ 47]: 8d2703641eaabd8e +Block 0023 [ 48]: a7d768e9c39c2fcd +Block 0023 [ 49]: f1857f0b55b6f379 +Block 0023 [ 50]: db895bb3f18d46d9 +Block 0023 [ 51]: 04a5007ada435091 +Block 0023 [ 52]: 3f70592bbaa98b62 +Block 0023 [ 53]: 8b67d0d8abbe328e +Block 0023 [ 54]: ea7474021a650668 +Block 0023 [ 55]: e90347a7acaf41af +Block 0023 [ 56]: 37c7a4f487483706 +Block 0023 [ 57]: 6f854c4fa348730f +Block 0023 [ 58]: 783761eea411efa2 +Block 0023 [ 59]: d2f84fffdc1c2dab +Block 0023 [ 60]: 15876740b2afeca4 +Block 0023 [ 61]: 42df2017f6cb0cd6 +Block 0023 [ 62]: da2288c5b587b656 +Block 0023 [ 63]: 8fc504318b434fb2 +Block 0023 [ 64]: be72c16924931758 +Block 0023 [ 65]: 5eb26ba68f62fb65 +Block 0023 [ 66]: a026b7c625a26eaa +Block 0023 [ 67]: e37dcfbbd3416388 +Block 0023 [ 68]: dc52d59c0b02448d +Block 0023 [ 69]: 935543a8846025b2 +Block 0023 [ 70]: d60143cd0a4b3cef +Block 0023 [ 71]: 86f7efa204af95ac +Block 0023 [ 72]: 2b6f6816679f91d1 +Block 0023 [ 73]: 94e6182998b96b54 +Block 0023 [ 74]: 93e73bf0f0105569 +Block 0023 [ 75]: da13f18e4c0cb699 +Block 0023 [ 76]: 870448ce3efa8548 +Block 0023 [ 77]: 4a6416a905d86b3e +Block 0023 [ 78]: 1fe58f6a54047cca +Block 0023 [ 79]: f42edddfef0201d4 +Block 0023 [ 80]: f2a9f93e5ea486d2 +Block 0023 [ 81]: b9d1604eb4f52307 +Block 0023 [ 82]: 56c5d663e18af644 +Block 0023 [ 83]: 162302f10139e362 +Block 0023 [ 84]: 0042db324df502f2 +Block 0023 [ 85]: 28495f12c64d8cd5 +Block 0023 [ 86]: e3fe80b267e1b630 +Block 0023 [ 87]: 641544818559128f +Block 0023 [ 88]: ab828451acaf5169 +Block 0023 [ 89]: ec86a3fd707ed0e1 +Block 0023 [ 90]: 3eb5572a1e406ab5 +Block 0023 [ 91]: c6cc09d3d4fb0e82 +Block 0023 [ 92]: 4738b1bb726b069c +Block 0023 [ 93]: 317e2a78a9908215 +Block 0023 [ 94]: a63c7f3cb168d444 +Block 0023 [ 95]: 9b17d567889390ef +Block 0023 [ 96]: 3d4bc23a26789e48 +Block 0023 [ 97]: a43b551c6e1bfc15 +Block 0023 [ 98]: ed2b8686fe6304d9 +Block 0023 [ 99]: 00620e444100bd23 +Block 0023 [100]: a43f1dd9f630d8e3 +Block 0023 [101]: d64b5dcd78d0fa09 +Block 0023 [102]: 870ff475afc7e794 +Block 0023 [103]: 11224ada8d5df827 +Block 0023 [104]: 20c39bc4cd167cb7 +Block 0023 [105]: 88d5cd35be323b5c +Block 0023 [106]: e3b289bb6a505cd3 +Block 0023 [107]: 40c9a2a625417bb5 +Block 0023 [108]: 2878a1103bcb1215 +Block 0023 [109]: 622d767c09fe18f5 +Block 0023 [110]: e00be87cbb6151cd +Block 0023 [111]: 68629d325a0095a8 +Block 0023 [112]: b49cb38fbb6a6518 +Block 0023 [113]: 86c32eebbd93b831 +Block 0023 [114]: 6d490907ad5e39cc +Block 0023 [115]: 610a7fa27d41f3ec +Block 0023 [116]: 491fd646a4be24dc +Block 0023 [117]: d2b3f507e79ddbbf +Block 0023 [118]: 9bafa9c11b16eac1 +Block 0023 [119]: cc2c7a70a9326714 +Block 0023 [120]: da03090b736421a2 +Block 0023 [121]: c78c8bf47b2fa258 +Block 0023 [122]: 6b40c85c5a3ef0b6 +Block 0023 [123]: 039e611fd2f43f50 +Block 0023 [124]: 4d96dc1301e43a45 +Block 0023 [125]: f9390676244bb1b4 +Block 0023 [126]: 541447043f38c5a7 +Block 0023 [127]: 9fa74c869aedb58f +Block 0024 [ 0]: 1b6d97f364ab1346 +Block 0024 [ 1]: 687c08189d7efe5d +Block 0024 [ 2]: 6e2970046223f59a +Block 0024 [ 3]: 201784f74072fc2a +Block 0024 [ 4]: 2d2547403935e57b +Block 0024 [ 5]: 7d853338f6589465 +Block 0024 [ 6]: 9da8aead5eea47d6 +Block 0024 [ 7]: 4cb61307518d7fbe +Block 0024 [ 8]: 0bd6df24105219cb +Block 0024 [ 9]: 9e3c1a1c459a1560 +Block 0024 [ 10]: c4afb9befd5c4615 +Block 0024 [ 11]: 35cc8bb5890e32fd +Block 0024 [ 12]: 42d369e59a7bbf15 +Block 0024 [ 13]: ed7a3c27e46f61d2 +Block 0024 [ 14]: 9ae3d245b38ff4ac +Block 0024 [ 15]: 6606075547aec2c7 +Block 0024 [ 16]: 87cf9c94c0c06f9a +Block 0024 [ 17]: 33cc104c0a1e67cd +Block 0024 [ 18]: 95b65f1410712d0d +Block 0024 [ 19]: e5a685c8d48d8bfe +Block 0024 [ 20]: 6e3f226d46a8825a +Block 0024 [ 21]: 1b040014d7aa884b +Block 0024 [ 22]: ca62adf20dafce90 +Block 0024 [ 23]: 4be470b0fa205479 +Block 0024 [ 24]: 24308ae259e78652 +Block 0024 [ 25]: a22865e6df84c43d +Block 0024 [ 26]: 8a257435179ef5f3 +Block 0024 [ 27]: 7528d2d048b63094 +Block 0024 [ 28]: 52d6b0bbae33dd91 +Block 0024 [ 29]: b786b9bf3f260a14 +Block 0024 [ 30]: 8022252f3494ac9d +Block 0024 [ 31]: f08b21f7dbed0caa +Block 0024 [ 32]: f2746d7321fc2375 +Block 0024 [ 33]: bd6d6dcc95880acc +Block 0024 [ 34]: a19e4304559ba8bf +Block 0024 [ 35]: 10ff706c1856688a +Block 0024 [ 36]: 3f63ed9e8363333f +Block 0024 [ 37]: 1fd49162c4817b52 +Block 0024 [ 38]: ddc70fc91fc43c97 +Block 0024 [ 39]: ae180ca44f1e9390 +Block 0024 [ 40]: a09e0ce6f7ca33e4 +Block 0024 [ 41]: ebc444a5cabb3206 +Block 0024 [ 42]: 5519bd49fa0d4d48 +Block 0024 [ 43]: 4f3ec96c151d6a1d +Block 0024 [ 44]: 2e7e65ad9de4611d +Block 0024 [ 45]: e29c6024528a1481 +Block 0024 [ 46]: e70eaf44fb8dbdac +Block 0024 [ 47]: a20804e6afabfd4a +Block 0024 [ 48]: abec4c52a6ba54f8 +Block 0024 [ 49]: f18776eceb179fc3 +Block 0024 [ 50]: 71c5b59ff02c64d5 +Block 0024 [ 51]: 0eb62ddb7c7b9898 +Block 0024 [ 52]: 78e7cf44557ed070 +Block 0024 [ 53]: dcf3718610a69b15 +Block 0024 [ 54]: d2aee39a8abc74fb +Block 0024 [ 55]: d8eca1f46bc06ae0 +Block 0024 [ 56]: c20ddf556d469215 +Block 0024 [ 57]: 77d2fce63b53504d +Block 0024 [ 58]: ca0f78a6db59b782 +Block 0024 [ 59]: e08630201e93844b +Block 0024 [ 60]: 011b122308a2ad54 +Block 0024 [ 61]: 989563a37aa0250b +Block 0024 [ 62]: 50c69b16e0c3aae4 +Block 0024 [ 63]: 61738db62009e68e +Block 0024 [ 64]: 4fee029f50b9ad21 +Block 0024 [ 65]: 59e8d0db17da305e +Block 0024 [ 66]: b6077aa1ca0d36c6 +Block 0024 [ 67]: f469a0199cb637ea +Block 0024 [ 68]: 6d644a367fed3a78 +Block 0024 [ 69]: 40c2ebf12ced7376 +Block 0024 [ 70]: b0f9f1af56f200d4 +Block 0024 [ 71]: 9c470579f03b27ec +Block 0024 [ 72]: 29ef27bb4e7261df +Block 0024 [ 73]: 3bb0c11596f105a7 +Block 0024 [ 74]: 831e6117a872ef3f +Block 0024 [ 75]: 141586a939871928 +Block 0024 [ 76]: de05c66973c18f61 +Block 0024 [ 77]: bb04e9de901e6e4b +Block 0024 [ 78]: f209934886855554 +Block 0024 [ 79]: f205f3433fc48384 +Block 0024 [ 80]: 1a91e7fc0f8f7add +Block 0024 [ 81]: 2ef9e4a071709634 +Block 0024 [ 82]: 32a6d71c4c162cd8 +Block 0024 [ 83]: 40cd26eb6ff34e7e +Block 0024 [ 84]: 1bf4edf9fe9811f2 +Block 0024 [ 85]: 5bbb164291c455e4 +Block 0024 [ 86]: a3bb18b302a9a9f7 +Block 0024 [ 87]: 7ac7d717cd014cc8 +Block 0024 [ 88]: 3355afbd7da534fd +Block 0024 [ 89]: 0d488eddc9478451 +Block 0024 [ 90]: 2192fd7c8f12f985 +Block 0024 [ 91]: 77cd72d33cf5cf87 +Block 0024 [ 92]: 11c0fadc29eade8b +Block 0024 [ 93]: af3078c91e0e86fc +Block 0024 [ 94]: 857211547a0b3253 +Block 0024 [ 95]: b5600bb399a4fec3 +Block 0024 [ 96]: 57bef31e17560d76 +Block 0024 [ 97]: fc89b941ffcde649 +Block 0024 [ 98]: ad3fbfb2612cc072 +Block 0024 [ 99]: 0768c44e8e79642f +Block 0024 [100]: fa82a7fc94531b44 +Block 0024 [101]: f4c591741e03ce27 +Block 0024 [102]: 601142b021e0d820 +Block 0024 [103]: 1b3a2508c3b26062 +Block 0024 [104]: b987bbaf19cdb37f +Block 0024 [105]: 8b4af1e25c892610 +Block 0024 [106]: 7951909eefee86df +Block 0024 [107]: 2cb36e418dcbe252 +Block 0024 [108]: b51abea53ca30724 +Block 0024 [109]: 14e49911570af91f +Block 0024 [110]: a00c4c240bb7249b +Block 0024 [111]: 451fe680abefa587 +Block 0024 [112]: 5369dfc1b916d153 +Block 0024 [113]: 1761ff4a62d7d45e +Block 0024 [114]: 151c216f3c1944ef +Block 0024 [115]: 7a185bbcdd0531fc +Block 0024 [116]: c700e6047cc7a9ce +Block 0024 [117]: 6ea92ecf27030984 +Block 0024 [118]: ecc7bf426636fcde +Block 0024 [119]: 38b9bd46560f0b1b +Block 0024 [120]: 346e7252c870ee10 +Block 0024 [121]: 3aa8d6c44e60d291 +Block 0024 [122]: f9dd7a421fb3d07c +Block 0024 [123]: ff85282feda3cd60 +Block 0024 [124]: dbfb89e57658dccf +Block 0024 [125]: 5728d16e353ea62b +Block 0024 [126]: 162c91687bbe2588 +Block 0024 [127]: 62180018d170be19 +Block 0025 [ 0]: 9dea98e0f45c8df3 +Block 0025 [ 1]: e718675e0ca9af64 +Block 0025 [ 2]: 2a200f968940a3e6 +Block 0025 [ 3]: 7c56da29d7d510af +Block 0025 [ 4]: 5b519939866bfefc +Block 0025 [ 5]: 134b855183457280 +Block 0025 [ 6]: 170ac5fed0cb9ee0 +Block 0025 [ 7]: d0a9bacf2034d21a +Block 0025 [ 8]: 00fce08c97ef87e0 +Block 0025 [ 9]: 9aa0041eaa7ad61f +Block 0025 [ 10]: 407a94b0a313e995 +Block 0025 [ 11]: b955191be75b7b24 +Block 0025 [ 12]: 316c31961ddff5f3 +Block 0025 [ 13]: 02a21a3bbbc4a5fe +Block 0025 [ 14]: 55fb14c755cd390d +Block 0025 [ 15]: 2a4b331d7df48c4e +Block 0025 [ 16]: 1be3b27043f0361f +Block 0025 [ 17]: f5c84613bd424fbe +Block 0025 [ 18]: e83919e013bef260 +Block 0025 [ 19]: 8fbdd74b3ffd0c32 +Block 0025 [ 20]: 066215f05844ab4d +Block 0025 [ 21]: 7b621ea46579b6bb +Block 0025 [ 22]: f3204a3744956a24 +Block 0025 [ 23]: 21428bee28221146 +Block 0025 [ 24]: 9f3eda1b1cb2a9af +Block 0025 [ 25]: baedddaa0cad8da8 +Block 0025 [ 26]: 6fdda68a32b9d387 +Block 0025 [ 27]: 5f1e005ced3c19e1 +Block 0025 [ 28]: cff1336476a4540b +Block 0025 [ 29]: a6be6f21ed834472 +Block 0025 [ 30]: 54f1db5d11d1874b +Block 0025 [ 31]: e0973ae921ea1ec6 +Block 0025 [ 32]: 54026fec00959adf +Block 0025 [ 33]: f355788737a4226d +Block 0025 [ 34]: 08eb52c06424d35e +Block 0025 [ 35]: 4c51dd52a31b3a25 +Block 0025 [ 36]: 8d6fb8828dc93960 +Block 0025 [ 37]: 9ca7d3414f6be751 +Block 0025 [ 38]: 5536071059f29bd0 +Block 0025 [ 39]: 212d31590dc55ff4 +Block 0025 [ 40]: 00160f22408fe1bf +Block 0025 [ 41]: 2ae2d51e4ef4fc38 +Block 0025 [ 42]: 3197ecb672fd06fb +Block 0025 [ 43]: f1291d96197e5455 +Block 0025 [ 44]: aabd77ecd5f9cf74 +Block 0025 [ 45]: ea21b4064dfcddbf +Block 0025 [ 46]: 7fe4679308b95d5b +Block 0025 [ 47]: 719cae719c25851f +Block 0025 [ 48]: 88cb63475ddd958a +Block 0025 [ 49]: e8def05e2a50961b +Block 0025 [ 50]: 3306b43d445e0c6c +Block 0025 [ 51]: 1a0ee61add088b04 +Block 0025 [ 52]: ebeb156ec51a9240 +Block 0025 [ 53]: 03998909b2b26e65 +Block 0025 [ 54]: 94d90f46e365b989 +Block 0025 [ 55]: fdc410a5ceccff31 +Block 0025 [ 56]: 557cc6b7afa5ae1f +Block 0025 [ 57]: 92045147a4608d29 +Block 0025 [ 58]: f24cd61d05340a80 +Block 0025 [ 59]: e8a771bb3e64ba20 +Block 0025 [ 60]: ea7a859223d8c1be +Block 0025 [ 61]: e0ed40a0864b6654 +Block 0025 [ 62]: cdca027f76da810d +Block 0025 [ 63]: 3e90ca16f87f8c64 +Block 0025 [ 64]: ada45048fa983c11 +Block 0025 [ 65]: 71676d391911b13a +Block 0025 [ 66]: 1d50c778ba2a1e16 +Block 0025 [ 67]: ee2174c9cfc78c55 +Block 0025 [ 68]: 4e649a15999421b4 +Block 0025 [ 69]: 283b514d302de05f +Block 0025 [ 70]: 0e5ffdfdd82c65aa +Block 0025 [ 71]: b05c24c95c134893 +Block 0025 [ 72]: 2d23b161436d607c +Block 0025 [ 73]: d191b4dfbc763bbc +Block 0025 [ 74]: 0fc53094eda325ab +Block 0025 [ 75]: 1e73613359daf5e9 +Block 0025 [ 76]: dadf7d0cd21e9f95 +Block 0025 [ 77]: d738d1a27daecafa +Block 0025 [ 78]: 31f8765d2324fbfb +Block 0025 [ 79]: 4db749e5e1e91ce3 +Block 0025 [ 80]: 312f948729f66ff9 +Block 0025 [ 81]: fe2b219ac8c6af11 +Block 0025 [ 82]: 947e787f9c64e091 +Block 0025 [ 83]: 49378284ecd531d5 +Block 0025 [ 84]: 061fbf2e83dfb196 +Block 0025 [ 85]: e065a3bb91f47c0a +Block 0025 [ 86]: 0bac9c6e8ddad59e +Block 0025 [ 87]: 82458709614459a1 +Block 0025 [ 88]: 184b5ba3476a00d8 +Block 0025 [ 89]: ac35cdb330809819 +Block 0025 [ 90]: 4164015963e94a50 +Block 0025 [ 91]: 5b49db84037e46ca +Block 0025 [ 92]: eccb81844e039636 +Block 0025 [ 93]: 94a259a089ebb6ee +Block 0025 [ 94]: c8365c576d7ca7e4 +Block 0025 [ 95]: 9600a395ee895e92 +Block 0025 [ 96]: d3f2a00d550f507e +Block 0025 [ 97]: 245198c21c2c6ae8 +Block 0025 [ 98]: 057f8dce7f761c0e +Block 0025 [ 99]: 3b88913083dda199 +Block 0025 [100]: c5eb496e745c47cb +Block 0025 [101]: 6a13fe3ee998220d +Block 0025 [102]: e44904f23834ebd5 +Block 0025 [103]: acaf928c769a8852 +Block 0025 [104]: 0866087633969633 +Block 0025 [105]: 8dd5b1dde3b06956 +Block 0025 [106]: 29f3bd382a42c2a5 +Block 0025 [107]: 29ea43a5a960be6b +Block 0025 [108]: 164710ec5da538da +Block 0025 [109]: 4e8d7d1fe9563032 +Block 0025 [110]: a920e54e66141df0 +Block 0025 [111]: 09d93900fd84dbb7 +Block 0025 [112]: 007245b49a574c20 +Block 0025 [113]: 595c4a0e5a8d9914 +Block 0025 [114]: fd3b2741644d6845 +Block 0025 [115]: 97ff3f94b0ac27c7 +Block 0025 [116]: c1c2efb0b9d18aaf +Block 0025 [117]: 22abb5fd2ecc9e62 +Block 0025 [118]: 3c41db1bdead501a +Block 0025 [119]: c0f75a3fdbbd361c +Block 0025 [120]: e36a235924b7cd2b +Block 0025 [121]: 92f3a12daa934ab9 +Block 0025 [122]: c0e1da579eebdbe1 +Block 0025 [123]: b1ac487a725cdb21 +Block 0025 [124]: a39fab7029df3ed7 +Block 0025 [125]: 7b8fe4524db844eb +Block 0025 [126]: b7fdf1a6ca4ff258 +Block 0025 [127]: f68cf7b80de6823a +Block 0026 [ 0]: c1b768e4ab523978 +Block 0026 [ 1]: 5521d67bc3751eeb +Block 0026 [ 2]: a123beff943e992f +Block 0026 [ 3]: a481f25f5c200f65 +Block 0026 [ 4]: ce26d5b7c8bee62f +Block 0026 [ 5]: 7f2072875ee51d8d +Block 0026 [ 6]: caf87e7d0df6e37d +Block 0026 [ 7]: e651b78783205174 +Block 0026 [ 8]: 614321f79276d222 +Block 0026 [ 9]: f9f78652a5bb3bfa +Block 0026 [ 10]: 53d925d442ea4557 +Block 0026 [ 11]: 312a5b33795050b7 +Block 0026 [ 12]: cba5769f359671c5 +Block 0026 [ 13]: 93c2a858f246f896 +Block 0026 [ 14]: 5f3eb206646804d1 +Block 0026 [ 15]: 16e5ecd1c0ad3301 +Block 0026 [ 16]: 8bdf8382b5f2b3ed +Block 0026 [ 17]: 045c403db709d4f0 +Block 0026 [ 18]: ee934246f22072af +Block 0026 [ 19]: 0f70f344e2c9f578 +Block 0026 [ 20]: 0901b57afe2fadc3 +Block 0026 [ 21]: 7dfed2e4a595459d +Block 0026 [ 22]: fc78ee1cda513a1f +Block 0026 [ 23]: deb4abff7339b932 +Block 0026 [ 24]: f6332454f63314a5 +Block 0026 [ 25]: 261c97b58a557f94 +Block 0026 [ 26]: 26bda71112c57f76 +Block 0026 [ 27]: 63c9cdc690144e61 +Block 0026 [ 28]: 228b202353c930f1 +Block 0026 [ 29]: cd5b0960c4c9a6b9 +Block 0026 [ 30]: f4e6d387d6d7d453 +Block 0026 [ 31]: f54ab733b2f25833 +Block 0026 [ 32]: cc6e4118a0ef810b +Block 0026 [ 33]: 03f01fdf18ea4cba +Block 0026 [ 34]: 5cb4f724e790eaff +Block 0026 [ 35]: 5979ac899ca55c44 +Block 0026 [ 36]: c74ef1a91d4deb67 +Block 0026 [ 37]: e0fc99d3c50934c9 +Block 0026 [ 38]: e2df12194bd1fa08 +Block 0026 [ 39]: 12f4b8caf4503184 +Block 0026 [ 40]: cec9dffaa4d18089 +Block 0026 [ 41]: 613ae59272234838 +Block 0026 [ 42]: cd20d01802e789eb +Block 0026 [ 43]: 710c8602eced8907 +Block 0026 [ 44]: 77c6c58846a6b8e5 +Block 0026 [ 45]: b42064e5052fd0c9 +Block 0026 [ 46]: a442a14edaf934f0 +Block 0026 [ 47]: e36aa911fc51365e +Block 0026 [ 48]: 08994423dd52d9e2 +Block 0026 [ 49]: 3af306d20f71a362 +Block 0026 [ 50]: ddd19978ffbfc195 +Block 0026 [ 51]: a98d1c2853b66a7f +Block 0026 [ 52]: bcfa8f96df34ce90 +Block 0026 [ 53]: aac16a4e7790de1f +Block 0026 [ 54]: cb58692620dfdf6e +Block 0026 [ 55]: 0a159b6511e3ef66 +Block 0026 [ 56]: 37e2a3cec5bfa151 +Block 0026 [ 57]: 790c8919db0afb67 +Block 0026 [ 58]: 0db6896dad7786e0 +Block 0026 [ 59]: 1c508ba2eb33c916 +Block 0026 [ 60]: 7813ac676e47bbd0 +Block 0026 [ 61]: c0c1f531f081a1db +Block 0026 [ 62]: cb790687688c62c9 +Block 0026 [ 63]: 63817244e76d9501 +Block 0026 [ 64]: 26bfb652cc6bdedc +Block 0026 [ 65]: e22e045baa9da7f3 +Block 0026 [ 66]: 302ba10d58dea506 +Block 0026 [ 67]: bba2d7cb5a6c5f63 +Block 0026 [ 68]: d0e81de1bcebf888 +Block 0026 [ 69]: 85afaa8d746c4ad2 +Block 0026 [ 70]: 9d4553d7e1930919 +Block 0026 [ 71]: 7928f64d08bca456 +Block 0026 [ 72]: c05167e3574c5123 +Block 0026 [ 73]: 3279ee18661433d2 +Block 0026 [ 74]: e9e16e636967561a +Block 0026 [ 75]: 34b50294012f9026 +Block 0026 [ 76]: a6706d61a88b965b +Block 0026 [ 77]: b194e35bfb3322be +Block 0026 [ 78]: 9eb1502169ed7f53 +Block 0026 [ 79]: 9ffba512e785acc2 +Block 0026 [ 80]: ad74a73d057a68f1 +Block 0026 [ 81]: d13ad830ec250f12 +Block 0026 [ 82]: 89990d03fcda5d40 +Block 0026 [ 83]: 7f41fe42aab938af +Block 0026 [ 84]: e7b12c40b212bedb +Block 0026 [ 85]: 2271c1588b468df4 +Block 0026 [ 86]: 214975ca6aa32f35 +Block 0026 [ 87]: f0c6aa78d1f1c858 +Block 0026 [ 88]: aaabaf4a63267c00 +Block 0026 [ 89]: 03898ff8906d365f +Block 0026 [ 90]: baa52fe008c7c1eb +Block 0026 [ 91]: 5eb08154e5a18442 +Block 0026 [ 92]: 739afe1d946e5da4 +Block 0026 [ 93]: fd3f3c47a107f99b +Block 0026 [ 94]: a0ae9aae60e91db4 +Block 0026 [ 95]: 688a0f505ad71c75 +Block 0026 [ 96]: e400ef9ef47fbc41 +Block 0026 [ 97]: d4d61a48f3ca6b9e +Block 0026 [ 98]: dc46bcdcae323a05 +Block 0026 [ 99]: 70eb928f22f91eb7 +Block 0026 [100]: 3356b17622be880c +Block 0026 [101]: b26b8de5b961f86d +Block 0026 [102]: c88d10e282a6c105 +Block 0026 [103]: d1a4fa0df2642bbc +Block 0026 [104]: 3c2eb1be6a990b63 +Block 0026 [105]: 7698318905e3d24b +Block 0026 [106]: 25069d30ab91d51c +Block 0026 [107]: 00d22156781af202 +Block 0026 [108]: 872c784c0766ef3f +Block 0026 [109]: 59c0caaad7afb6e5 +Block 0026 [110]: f577e87ab65ef4b8 +Block 0026 [111]: 5f6511ad9970b9f6 +Block 0026 [112]: efd260e4b49fb223 +Block 0026 [113]: ecb1c4b543007a9f +Block 0026 [114]: e9ab27fc3b6f5843 +Block 0026 [115]: 202737490e645c2d +Block 0026 [116]: d56b3e3b827021ca +Block 0026 [117]: 64b68ff331ac5aa9 +Block 0026 [118]: 8cbf36f00083ff2a +Block 0026 [119]: 274ea8aa43adcd0a +Block 0026 [120]: b238ae985e018099 +Block 0026 [121]: c333b2c0e3794b74 +Block 0026 [122]: 7c63f863700f6744 +Block 0026 [123]: b01f279d312af042 +Block 0026 [124]: 5450528f718101e2 +Block 0026 [125]: 8e121c1018d5a808 +Block 0026 [126]: 09f735d16f02fd17 +Block 0026 [127]: 30bdbd4ab589600d +Block 0027 [ 0]: dfb1b7b6e19fef45 +Block 0027 [ 1]: 8a7e2af24e969d87 +Block 0027 [ 2]: 6b743c2dece928b4 +Block 0027 [ 3]: 50275017b269ff38 +Block 0027 [ 4]: fb3756653d2a67d3 +Block 0027 [ 5]: 96b0005894cb9c6f +Block 0027 [ 6]: c77260686102fe4b +Block 0027 [ 7]: 7b4db34395d8d4cc +Block 0027 [ 8]: 6cf098719acb748e +Block 0027 [ 9]: 9f8a882796d1ed33 +Block 0027 [ 10]: d41a525bbf224af7 +Block 0027 [ 11]: 5965acbb144b0ffd +Block 0027 [ 12]: bb174761b0489258 +Block 0027 [ 13]: 2c4b9428c0e54b03 +Block 0027 [ 14]: 3a070ae66305b255 +Block 0027 [ 15]: 31a6e4f4060f33f4 +Block 0027 [ 16]: 67d29285c6b81359 +Block 0027 [ 17]: 1d97e1e82c4bb8ec +Block 0027 [ 18]: 9147a224773267be +Block 0027 [ 19]: cada23a7599100e8 +Block 0027 [ 20]: 39f654ca5affb557 +Block 0027 [ 21]: 653e55fb1fe7d98d +Block 0027 [ 22]: 1fe150b6c5e568df +Block 0027 [ 23]: 11b04652c7425426 +Block 0027 [ 24]: 51ed5eab1d250839 +Block 0027 [ 25]: a157a2654e2f31a7 +Block 0027 [ 26]: 5ac42844add3bfd4 +Block 0027 [ 27]: 092ea7ad07912ed6 +Block 0027 [ 28]: 57be83c5dd581252 +Block 0027 [ 29]: a4150638b5232b78 +Block 0027 [ 30]: 91baf1e273f3292b +Block 0027 [ 31]: 279ddb9ae0f59685 +Block 0027 [ 32]: e1ede6b23ac6ce30 +Block 0027 [ 33]: b65d7f1aceaa298b +Block 0027 [ 34]: 1356d0e6ae4203b4 +Block 0027 [ 35]: b162f2dbe36e9099 +Block 0027 [ 36]: d2efeae7e4eb03bf +Block 0027 [ 37]: 10cd45bd5b941710 +Block 0027 [ 38]: 45ee2d5ff2910df1 +Block 0027 [ 39]: 9e31c67dcc63a2f8 +Block 0027 [ 40]: 6d4047eb18b27369 +Block 0027 [ 41]: 319096d6062b8482 +Block 0027 [ 42]: bc1d42249ce2caba +Block 0027 [ 43]: 95e6c2ecdf193df3 +Block 0027 [ 44]: f581c15ed36c2773 +Block 0027 [ 45]: d09f6bdfe41d9deb +Block 0027 [ 46]: 63359723da79b1ec +Block 0027 [ 47]: b014e747082bed32 +Block 0027 [ 48]: d4fcea83c8489367 +Block 0027 [ 49]: 79264c6a13f6d74b +Block 0027 [ 50]: 23a98835209cb37d +Block 0027 [ 51]: 55cf27731bc71b54 +Block 0027 [ 52]: 579d23c3c8f0d874 +Block 0027 [ 53]: c2d9c527760854e5 +Block 0027 [ 54]: b67733a70e32c7a5 +Block 0027 [ 55]: bf3c8adda26c4378 +Block 0027 [ 56]: 9a4e6986727599a7 +Block 0027 [ 57]: 5d23ac243a3758b7 +Block 0027 [ 58]: 98f6bf7a738c86f1 +Block 0027 [ 59]: 9e6727d5968272f9 +Block 0027 [ 60]: cecb900fe87b7449 +Block 0027 [ 61]: 68171bbfeeec88d6 +Block 0027 [ 62]: c8280dab9e0be4f5 +Block 0027 [ 63]: 786dcdfd9f13e110 +Block 0027 [ 64]: 15ac1cc5a67a123f +Block 0027 [ 65]: 8ba78d88911bb074 +Block 0027 [ 66]: 11d81827a8bf57a8 +Block 0027 [ 67]: 293af374772b85e8 +Block 0027 [ 68]: 29043eae6117e07b +Block 0027 [ 69]: 7d8b59384e757a4f +Block 0027 [ 70]: d7eadfa7fa1a057c +Block 0027 [ 71]: 08020d3f2ed7d3e4 +Block 0027 [ 72]: 3ffd01936555240e +Block 0027 [ 73]: 4172d0d76e3a425e +Block 0027 [ 74]: e80b2670c69d0187 +Block 0027 [ 75]: c8b66b9b7589a2c5 +Block 0027 [ 76]: 3da25f6759ac3ced +Block 0027 [ 77]: b8f45a9416f6c2b4 +Block 0027 [ 78]: 6bd3a3df27308217 +Block 0027 [ 79]: 30f61b3b5818ca8e +Block 0027 [ 80]: 563376db56d040f3 +Block 0027 [ 81]: a6123f082a29fe18 +Block 0027 [ 82]: 98361cd23cddfe24 +Block 0027 [ 83]: 0504e44336ddc550 +Block 0027 [ 84]: 12096c9de0473588 +Block 0027 [ 85]: ccb1faa1fc5c3aef +Block 0027 [ 86]: a285d47e4a11135f +Block 0027 [ 87]: 4e3bef96d97d6995 +Block 0027 [ 88]: 28af4e31ac05b822 +Block 0027 [ 89]: 4421ffa284241116 +Block 0027 [ 90]: eff52a0fd5c8d53a +Block 0027 [ 91]: 3c9105b1e792f051 +Block 0027 [ 92]: c6699665bd597fbe +Block 0027 [ 93]: f4e7bf0aa2f4ab6a +Block 0027 [ 94]: 9ea7d6698bcd3d73 +Block 0027 [ 95]: f7070ccfb227cf25 +Block 0027 [ 96]: 0e73f666dea37687 +Block 0027 [ 97]: c14e8d7de7f64630 +Block 0027 [ 98]: 6868515684a2e725 +Block 0027 [ 99]: 206095a669b7650c +Block 0027 [100]: 48dd79ad5aab7562 +Block 0027 [101]: 2b915476af89bedb +Block 0027 [102]: 9c1387f4f1ff6c7d +Block 0027 [103]: a1c3389ebbc7ad3b +Block 0027 [104]: 6cc1fe26cda5ca6e +Block 0027 [105]: 4175a4fbd5406670 +Block 0027 [106]: 2d268ff39496b430 +Block 0027 [107]: f985b90d6a900624 +Block 0027 [108]: da1b3e8a3ee00a3c +Block 0027 [109]: 6dec5419d237ae08 +Block 0027 [110]: 4833bd3dc940c7e2 +Block 0027 [111]: c0b6e96736180b3a +Block 0027 [112]: 764786ef491a21cc +Block 0027 [113]: 6ab8b494951aa58d +Block 0027 [114]: 1654435146879de9 +Block 0027 [115]: 0c7df427e44d2fcb +Block 0027 [116]: ca7a758ad8d8df28 +Block 0027 [117]: e35ce9f1d8f8c51b +Block 0027 [118]: 1ac1d9afec8e66fa +Block 0027 [119]: 57f25346a9fa27e3 +Block 0027 [120]: 2e79157e350d0ac6 +Block 0027 [121]: 92d09dd28f617b33 +Block 0027 [122]: c400341fd1bc382f +Block 0027 [123]: f83172627c338632 +Block 0027 [124]: 6ebf3b078e99f975 +Block 0027 [125]: 76b1b6be911347ce +Block 0027 [126]: f154a593a33de676 +Block 0027 [127]: c4c34f93aa371a57 +Block 0028 [ 0]: 4e2ac80509bca280 +Block 0028 [ 1]: 53717768028a3f68 +Block 0028 [ 2]: e39dc8aca99e6f66 +Block 0028 [ 3]: 53ebffa315286c27 +Block 0028 [ 4]: 705fba0ce74adda1 +Block 0028 [ 5]: 40cf24b7846fbeea +Block 0028 [ 6]: 08e1a9ca69b52556 +Block 0028 [ 7]: 5742721314aa28d7 +Block 0028 [ 8]: a8e7ba94670950ba +Block 0028 [ 9]: d682cbf431183b33 +Block 0028 [ 10]: 6da4c3e4a20f9af4 +Block 0028 [ 11]: 2ee2e501d76c7f47 +Block 0028 [ 12]: 18c76e756851c749 +Block 0028 [ 13]: d7499ec23d51287f +Block 0028 [ 14]: c8a21d3b456ccd9c +Block 0028 [ 15]: e318a0d2dec093f2 +Block 0028 [ 16]: c8387e0d1103811b +Block 0028 [ 17]: cfd9fafc75da3916 +Block 0028 [ 18]: c90d21f4ec27b430 +Block 0028 [ 19]: eb110a88aaf9e8c4 +Block 0028 [ 20]: fe43290e11e97783 +Block 0028 [ 21]: e711badb49e785ae +Block 0028 [ 22]: 47da30f3dfadd77c +Block 0028 [ 23]: 213005e8eaaec1b2 +Block 0028 [ 24]: 0db1337e0939cded +Block 0028 [ 25]: 79402cfac8f41b81 +Block 0028 [ 26]: 8fb206b462d929d3 +Block 0028 [ 27]: 8bf4edccde1b3f5e +Block 0028 [ 28]: 4fb5750fd001ec5f +Block 0028 [ 29]: 6163db3306eb00c3 +Block 0028 [ 30]: cd2ad0bdcba9703a +Block 0028 [ 31]: a989225aa8e9805c +Block 0028 [ 32]: 66af421dbabc751e +Block 0028 [ 33]: 19ca456193827f8e +Block 0028 [ 34]: ae61e6f8e84ea077 +Block 0028 [ 35]: ea6dad1c09cd284e +Block 0028 [ 36]: f958dbaa44014255 +Block 0028 [ 37]: e9c596f3061ad9cf +Block 0028 [ 38]: a743d258c493448e +Block 0028 [ 39]: dfe0ea446e47b64e +Block 0028 [ 40]: 09656df9863a4d0e +Block 0028 [ 41]: 097514eb0e9fdb0b +Block 0028 [ 42]: dd901308afe3324d +Block 0028 [ 43]: 639c721c16fd4955 +Block 0028 [ 44]: 35972be5aa22701b +Block 0028 [ 45]: 351dd3796340bdac +Block 0028 [ 46]: c31bb6ed7ee361e3 +Block 0028 [ 47]: 5163df958fd4e5af +Block 0028 [ 48]: ce6fdf2ae0a10c27 +Block 0028 [ 49]: b8155894b2d469a2 +Block 0028 [ 50]: 2bf15585424c2500 +Block 0028 [ 51]: e3d4b0bf2e7919b5 +Block 0028 [ 52]: 76d4ea66e8e27e9a +Block 0028 [ 53]: 515cd2ae2772ce7b +Block 0028 [ 54]: 679aa73fe2c89064 +Block 0028 [ 55]: 7997086c96c4a813 +Block 0028 [ 56]: 1a7bb444208bd79b +Block 0028 [ 57]: f21833b017a5400e +Block 0028 [ 58]: d266eef93b3490ff +Block 0028 [ 59]: 6f72683f6295d4c8 +Block 0028 [ 60]: caf38a6e397d6771 +Block 0028 [ 61]: ee88b044901a7a00 +Block 0028 [ 62]: cd05fc2e355e9719 +Block 0028 [ 63]: 3eb58642439c07c2 +Block 0028 [ 64]: 37b3c2e8c31b2ac2 +Block 0028 [ 65]: 298497119f560963 +Block 0028 [ 66]: a851e8e9e3d31be3 +Block 0028 [ 67]: 6d2c3bc9bdca1aff +Block 0028 [ 68]: dccbb833daf4fb92 +Block 0028 [ 69]: 5105f182cb32c48a +Block 0028 [ 70]: 7d8fb4b4881034ec +Block 0028 [ 71]: 21ba5176a4d8b744 +Block 0028 [ 72]: ef773853c451d06b +Block 0028 [ 73]: bfcb4fa94cbd866e +Block 0028 [ 74]: 06698214fef5596d +Block 0028 [ 75]: effbd0e63460d9d0 +Block 0028 [ 76]: a3953f6125c44b22 +Block 0028 [ 77]: d7fd87fdb0dc2d43 +Block 0028 [ 78]: 239ea462ebb0534d +Block 0028 [ 79]: 7924c7edc51d7998 +Block 0028 [ 80]: a9a5c86c148c5b83 +Block 0028 [ 81]: 58fa2801a433f66a +Block 0028 [ 82]: 08b6b4a726074921 +Block 0028 [ 83]: 451e8ed1f1c26f8d +Block 0028 [ 84]: 67b6c5ca1214bdad +Block 0028 [ 85]: 68bccd07601599c4 +Block 0028 [ 86]: 44f1d4401f2662f3 +Block 0028 [ 87]: b33dc98b525a1493 +Block 0028 [ 88]: 5d5c6952b912dcc7 +Block 0028 [ 89]: 31679f3139323221 +Block 0028 [ 90]: 052faed9f3a4e084 +Block 0028 [ 91]: 03bc4bb7589a4dfc +Block 0028 [ 92]: a31038ec95934e61 +Block 0028 [ 93]: 097dc529b1217289 +Block 0028 [ 94]: 4be72bc9cc749312 +Block 0028 [ 95]: 4c1f68597848d992 +Block 0028 [ 96]: b444c7254fa8fb61 +Block 0028 [ 97]: c346543ef84e8a59 +Block 0028 [ 98]: 206e055b3f3f3730 +Block 0028 [ 99]: 078d4ce845c6455c +Block 0028 [100]: 655cfd84ba3aabbe +Block 0028 [101]: 7da6829e216aa0bc +Block 0028 [102]: 435efea8611f7c12 +Block 0028 [103]: 6312478ed7893960 +Block 0028 [104]: c79bc333eaecaf10 +Block 0028 [105]: 8cdd24ffa611f409 +Block 0028 [106]: c716631996a6d371 +Block 0028 [107]: cfa3c11f4ae6ca0f +Block 0028 [108]: e371b34cf30063ec +Block 0028 [109]: 1718fd0b77146341 +Block 0028 [110]: d52a6b12f48603ce +Block 0028 [111]: 42b73ab9ffe6a4b3 +Block 0028 [112]: 452a7b610ce7c398 +Block 0028 [113]: d88650bcaad9c965 +Block 0028 [114]: ba7fa59d0ce7bd70 +Block 0028 [115]: f4b59e0f6fb3a8a0 +Block 0028 [116]: 3e1aeeda56a01d9c +Block 0028 [117]: e9279b366a89e250 +Block 0028 [118]: 778ba4ae19a9af6d +Block 0028 [119]: 72fc6f6559bf14c2 +Block 0028 [120]: 3a118ac1bf4871fb +Block 0028 [121]: 70574565eb2cfc81 +Block 0028 [122]: 1983ab178235c534 +Block 0028 [123]: 5604a37353928f70 +Block 0028 [124]: 7fd8d5cce867e1c8 +Block 0028 [125]: 70d7e1ed61847f19 +Block 0028 [126]: 1a3d93af42c2c9e0 +Block 0028 [127]: ed13f2ac7eedcbef +Block 0029 [ 0]: 33cf93e6cce7be2c +Block 0029 [ 1]: 372711da69651ef5 +Block 0029 [ 2]: 5f181b07cee4fd30 +Block 0029 [ 3]: 67535edc41066807 +Block 0029 [ 4]: 30b4aba2d58eeae1 +Block 0029 [ 5]: dca3d06b611e0aae +Block 0029 [ 6]: c769fab6173e6bfe +Block 0029 [ 7]: 10b0480ec9249fa7 +Block 0029 [ 8]: 41fad98a38fb6f67 +Block 0029 [ 9]: 1d15f3f87fb05962 +Block 0029 [ 10]: cd5704702ccd37e9 +Block 0029 [ 11]: 6d5f3e7b74a6640e +Block 0029 [ 12]: 884fa40221d10e15 +Block 0029 [ 13]: 7f18b8d5e79143f0 +Block 0029 [ 14]: 28f11a889ffef7d1 +Block 0029 [ 15]: 28decff387bee808 +Block 0029 [ 16]: 6907e08a57d2f8de +Block 0029 [ 17]: 54816218bce03e77 +Block 0029 [ 18]: c91274596de25c36 +Block 0029 [ 19]: 6d926b9a697f08d0 +Block 0029 [ 20]: 5601cb11e42287ad +Block 0029 [ 21]: e67a9e7239317578 +Block 0029 [ 22]: 3b347aaecb5bb370 +Block 0029 [ 23]: 993f8601c116adb4 +Block 0029 [ 24]: 4bd559876fa2a678 +Block 0029 [ 25]: 56c572647d6b98c0 +Block 0029 [ 26]: 981d52ed292920a3 +Block 0029 [ 27]: f53f2adbcb37b2d9 +Block 0029 [ 28]: c60e801d5ff660bb +Block 0029 [ 29]: 545c53bd9e909cba +Block 0029 [ 30]: a50059730c68333b +Block 0029 [ 31]: f229e0a49de642d6 +Block 0029 [ 32]: 64a92610a4e81764 +Block 0029 [ 33]: 289c40c21a874f0f +Block 0029 [ 34]: 2d20318544d7a828 +Block 0029 [ 35]: 4e776209bf3163a5 +Block 0029 [ 36]: 4e4d880f59f82d31 +Block 0029 [ 37]: e3450815aa32bb05 +Block 0029 [ 38]: 605c3125306f7b9f +Block 0029 [ 39]: a550b122e1ce00c4 +Block 0029 [ 40]: ec2b5a795837a0bc +Block 0029 [ 41]: 119f699a09a13ad5 +Block 0029 [ 42]: 9a340071e76e84e7 +Block 0029 [ 43]: c54ee0cca8723d1d +Block 0029 [ 44]: 6df24d0c6fcf3814 +Block 0029 [ 45]: 58fbebabf998cc37 +Block 0029 [ 46]: bddf26bf6235a216 +Block 0029 [ 47]: 871ed9ba19f3cf4b +Block 0029 [ 48]: 6299baf2f954ec4e +Block 0029 [ 49]: 444ee538008d2ec6 +Block 0029 [ 50]: 026a21131e13b73c +Block 0029 [ 51]: b080b44e6724b4ed +Block 0029 [ 52]: 6c94166dca97de12 +Block 0029 [ 53]: 356ee8e0bd44b94b +Block 0029 [ 54]: 800a52ccc57fbf98 +Block 0029 [ 55]: 68da4be416925eb6 +Block 0029 [ 56]: bdadbd80576b246f +Block 0029 [ 57]: 44b38c548a2cfd19 +Block 0029 [ 58]: be7f2123f69a9ea4 +Block 0029 [ 59]: 1b8f37faec9a6ab1 +Block 0029 [ 60]: e3c4b10ae4ba4e3b +Block 0029 [ 61]: eee4d03c910fe3b5 +Block 0029 [ 62]: 745cf878722aa984 +Block 0029 [ 63]: 8e7085a568dbb61e +Block 0029 [ 64]: 966da2b5386203be +Block 0029 [ 65]: bc6421ec3d4fc07c +Block 0029 [ 66]: 9d470f80efa5c663 +Block 0029 [ 67]: 8c4a9b72f9ef31c2 +Block 0029 [ 68]: 5f6f0abd618f7409 +Block 0029 [ 69]: 76371da61293896d +Block 0029 [ 70]: 0dc2d295a512ce69 +Block 0029 [ 71]: e87771709fbc90f4 +Block 0029 [ 72]: bb6c4d5e2ce22862 +Block 0029 [ 73]: 90e1af93e71818cb +Block 0029 [ 74]: 55b1c9d0d3313531 +Block 0029 [ 75]: 9688b54c43f4547f +Block 0029 [ 76]: f3b43a51cf8379c9 +Block 0029 [ 77]: 3f64ee2df539ccf9 +Block 0029 [ 78]: 0052afb100e3e6d2 +Block 0029 [ 79]: 556f77896150e82f +Block 0029 [ 80]: 0289300035cc07f5 +Block 0029 [ 81]: e6ac3e026d176d28 +Block 0029 [ 82]: d256dd0979870ade +Block 0029 [ 83]: 52f1edf016820998 +Block 0029 [ 84]: 7990c26012425aa5 +Block 0029 [ 85]: b2fdc9cd71716664 +Block 0029 [ 86]: 499eea789dfd8c6c +Block 0029 [ 87]: a33739d6dc44df83 +Block 0029 [ 88]: 5b2473304ff02ba2 +Block 0029 [ 89]: 6221fe99ce18fd6f +Block 0029 [ 90]: 9b88abce601fb555 +Block 0029 [ 91]: d4255810ae3bd298 +Block 0029 [ 92]: 8a3957699742a79c +Block 0029 [ 93]: c1e90c11b21afdca +Block 0029 [ 94]: 2c7531ce3a0f8ae5 +Block 0029 [ 95]: de3570a2b72d8ab4 +Block 0029 [ 96]: 7058926b75183c6d +Block 0029 [ 97]: b036b85be8608da9 +Block 0029 [ 98]: 4908a8d134b324dc +Block 0029 [ 99]: 9ca9c9a119d9865f +Block 0029 [100]: 05efd6adf2af52c7 +Block 0029 [101]: 53c7a35c9c88758c +Block 0029 [102]: cd4ed200fd912eec +Block 0029 [103]: b1044093fbb535af +Block 0029 [104]: cf5e842a5a94efa1 +Block 0029 [105]: 1954b5b8c49d4462 +Block 0029 [106]: 5f3a71fecff0d4f1 +Block 0029 [107]: ed2705757b17552f +Block 0029 [108]: afd077618cefdad9 +Block 0029 [109]: 007303311b2e4fa6 +Block 0029 [110]: da07ecdc7845ad01 +Block 0029 [111]: 33724bb091b3cad0 +Block 0029 [112]: 4f30c96b7bb5a778 +Block 0029 [113]: dd633315a7413454 +Block 0029 [114]: 1215bea5da3b0263 +Block 0029 [115]: a890ad66a77d0fd9 +Block 0029 [116]: 80f7d436ca7c0534 +Block 0029 [117]: 1ff2f3dbe5171bcb +Block 0029 [118]: 1bd78433a2de661d +Block 0029 [119]: 4fd6406d8b56293b +Block 0029 [120]: d35bcaab27db2e2f +Block 0029 [121]: b83da5153feb2ebe +Block 0029 [122]: 2e7e8954d6c25e01 +Block 0029 [123]: bb47ee3b0fff9cc3 +Block 0029 [124]: 272cffa537b8710b +Block 0029 [125]: 57a15d3001de9398 +Block 0029 [126]: 2321da238e044e17 +Block 0029 [127]: a8bd886d88ba8cf4 +Block 0030 [ 0]: 6ecd3a74b8ca272f +Block 0030 [ 1]: b5dbd6ae9917542c +Block 0030 [ 2]: 92796d78d9eb12a5 +Block 0030 [ 3]: ce36aa84848aeb2b +Block 0030 [ 4]: b2fd7b2b1275d646 +Block 0030 [ 5]: 7924e2d5736dcb1f +Block 0030 [ 6]: dedf8fa9f053c3ce +Block 0030 [ 7]: 3704cd36cdc8489f +Block 0030 [ 8]: f439f82ca1402d2c +Block 0030 [ 9]: f0535c5815780519 +Block 0030 [ 10]: 301ee82afbb2f4f0 +Block 0030 [ 11]: c8cf2dbfae87a7b8 +Block 0030 [ 12]: 9788cfc325f465a2 +Block 0030 [ 13]: d16609c0ffedea6b +Block 0030 [ 14]: 2cd87900f24384b2 +Block 0030 [ 15]: bbd3b932af9756d4 +Block 0030 [ 16]: 4726092cb27622e5 +Block 0030 [ 17]: 23e7a536a9abdc04 +Block 0030 [ 18]: b85c68d32b08ac68 +Block 0030 [ 19]: 01c7cd213e0357bc +Block 0030 [ 20]: 520cbe46d040e8fe +Block 0030 [ 21]: 4e18b68037222145 +Block 0030 [ 22]: 9d0533780ec15042 +Block 0030 [ 23]: 6aa0998dfbd1fc5d +Block 0030 [ 24]: 34b8f0f77fb20531 +Block 0030 [ 25]: 4ced999c154dfcb4 +Block 0030 [ 26]: b9a91ee42ece1d4b +Block 0030 [ 27]: a64ca0a2413435a3 +Block 0030 [ 28]: a154c9bfe4dd0880 +Block 0030 [ 29]: a9319f178c7ad588 +Block 0030 [ 30]: 233d887655e00f93 +Block 0030 [ 31]: 0ee0c36c2966e538 +Block 0030 [ 32]: 00a6f9b7fb4cde72 +Block 0030 [ 33]: b6b0777f23d1b2ab +Block 0030 [ 34]: 006222e11286472e +Block 0030 [ 35]: 2fe7e3124ceef0d1 +Block 0030 [ 36]: ff6e89a72dcd81f3 +Block 0030 [ 37]: 2df079639e87e734 +Block 0030 [ 38]: fe888a1af0b870c5 +Block 0030 [ 39]: 77a5dbbea31587ae +Block 0030 [ 40]: 387f86968288fe9b +Block 0030 [ 41]: 262a7864cb6144ed +Block 0030 [ 42]: 077e0a154fa50c43 +Block 0030 [ 43]: 119043b23af44739 +Block 0030 [ 44]: b7aee252cad97cc0 +Block 0030 [ 45]: 711c23dd4c5a1695 +Block 0030 [ 46]: ed051bb2a391b7ce +Block 0030 [ 47]: e973e2a22e396475 +Block 0030 [ 48]: a0bc6bfa849824f3 +Block 0030 [ 49]: e9f7a93f57279b83 +Block 0030 [ 50]: acb04d04db307e5d +Block 0030 [ 51]: e3c2b1944e0aa0c4 +Block 0030 [ 52]: f84e30a19a08949d +Block 0030 [ 53]: aa41b6af0f7682a4 +Block 0030 [ 54]: d53e4ac5eec1401e +Block 0030 [ 55]: 8a4d7682c811c47d +Block 0030 [ 56]: 6b13be440a301a75 +Block 0030 [ 57]: fec09305aa9cb47f +Block 0030 [ 58]: 5b49e2e6139c6af5 +Block 0030 [ 59]: 54b9144ef244c041 +Block 0030 [ 60]: 37d475e4e8c7162f +Block 0030 [ 61]: cea7a663067c9675 +Block 0030 [ 62]: be5354eeb5e8a1e1 +Block 0030 [ 63]: e775a094cc07905a +Block 0030 [ 64]: 291d525c7f6b3a27 +Block 0030 [ 65]: 7bef57e5526868d6 +Block 0030 [ 66]: 6f54b6cdfeb7227f +Block 0030 [ 67]: 93282dd954e1bf49 +Block 0030 [ 68]: 57c18e7631bbc297 +Block 0030 [ 69]: c2d3178a04d2d48c +Block 0030 [ 70]: 44127507cdadbae6 +Block 0030 [ 71]: 1c3c2e2ecbbd89ad +Block 0030 [ 72]: 509c90bc050d19b7 +Block 0030 [ 73]: 464023c2557ea4c4 +Block 0030 [ 74]: d99c16a1de32e6a6 +Block 0030 [ 75]: ae0176330021ff02 +Block 0030 [ 76]: b3fe389546fd5b6c +Block 0030 [ 77]: 8498583a9577b1da +Block 0030 [ 78]: 915d4d61a3b08f7d +Block 0030 [ 79]: 3578b5b049de581b +Block 0030 [ 80]: a80612a42043a474 +Block 0030 [ 81]: a59df7ec56ed0e61 +Block 0030 [ 82]: ba3cf869d25aedc6 +Block 0030 [ 83]: 2049762e0d3ca8fc +Block 0030 [ 84]: 8d771e0161f3a0eb +Block 0030 [ 85]: 98d0872d072574e7 +Block 0030 [ 86]: 4cfe5d48b8c10515 +Block 0030 [ 87]: 50c9043d923a50c7 +Block 0030 [ 88]: 5c910292699c0b89 +Block 0030 [ 89]: 95e4bc9a8f04e102 +Block 0030 [ 90]: 47b404d915b1f09a +Block 0030 [ 91]: f310c30b79c434c5 +Block 0030 [ 92]: a32cfc80bfd999af +Block 0030 [ 93]: ba6fb895832005e7 +Block 0030 [ 94]: c940b07d4bbac8d8 +Block 0030 [ 95]: b927cacd864b8ef4 +Block 0030 [ 96]: 7f86cbec290ce150 +Block 0030 [ 97]: 44019f102bbc346c +Block 0030 [ 98]: f4922e3a79972b25 +Block 0030 [ 99]: 57a11cec2904209b +Block 0030 [100]: ed500a5896662d38 +Block 0030 [101]: 40a1e81c7710aebb +Block 0030 [102]: 0f7c55b652f43c6c +Block 0030 [103]: 76fa83f4935552b0 +Block 0030 [104]: fda0042a566c8419 +Block 0030 [105]: bc669a6b2f036242 +Block 0030 [106]: 5ea211557564cd1e +Block 0030 [107]: e2b66a7d127fb62d +Block 0030 [108]: fb0497bb58905fd3 +Block 0030 [109]: 9bf162918404c986 +Block 0030 [110]: dabc64ecba15c2a5 +Block 0030 [111]: ff69083ee852f81b +Block 0030 [112]: 3739cb3c2a316ae1 +Block 0030 [113]: 0914028c39ec51de +Block 0030 [114]: 38261471477e87eb +Block 0030 [115]: 09681ad936fd9609 +Block 0030 [116]: baba75611ec7f474 +Block 0030 [117]: 5a587814bbc26e41 +Block 0030 [118]: 7929e20b70736dbb +Block 0030 [119]: a1c3fe1ad20fccde +Block 0030 [120]: 40789b143639d83c +Block 0030 [121]: 1f54a0c9767d4704 +Block 0030 [122]: cf2fa83d66dd7b8c +Block 0030 [123]: e8d8978cbe11894d +Block 0030 [124]: 9c75ca73199f324b +Block 0030 [125]: 06818c0d4dd46001 +Block 0030 [126]: 4f10eefc69bd7d4e +Block 0030 [127]: 9c35ccb7d1b407a3 +Block 0031 [ 0]: 7b2c886a0becf8aa +Block 0031 [ 1]: a961a68cd9802059 +Block 0031 [ 2]: c17906242f91d148 +Block 0031 [ 3]: 07b5168a9ba5dc20 +Block 0031 [ 4]: 7aa37588acbb43f7 +Block 0031 [ 5]: 03b0d1e09eb1e873 +Block 0031 [ 6]: c12f280456f1599a +Block 0031 [ 7]: 1b9eb2aa25f4fe4a +Block 0031 [ 8]: 92a506c1c444d06c +Block 0031 [ 9]: ab0a55ef35918793 +Block 0031 [ 10]: af635b968f49a6ca +Block 0031 [ 11]: 314f6856774229fb +Block 0031 [ 12]: 588edd661fab5266 +Block 0031 [ 13]: 3067a959a20de573 +Block 0031 [ 14]: ce8587775df42928 +Block 0031 [ 15]: 998f789c66194f76 +Block 0031 [ 16]: fa5cefe6d2653f8c +Block 0031 [ 17]: c9e69ab9e1cca147 +Block 0031 [ 18]: aa8ea6e905228faa +Block 0031 [ 19]: ffaba13e3b61b88d +Block 0031 [ 20]: db2eaa23530363ea +Block 0031 [ 21]: a64096fddc020f87 +Block 0031 [ 22]: a35c94cbd4f04a9f +Block 0031 [ 23]: e8396a978198ec52 +Block 0031 [ 24]: 5e7a8437b42c9016 +Block 0031 [ 25]: f1c65654317c0508 +Block 0031 [ 26]: 08a818ddbf2a23fd +Block 0031 [ 27]: cb3ef670786fcae9 +Block 0031 [ 28]: e83f4fc405e1d49f +Block 0031 [ 29]: 94b089965afe8871 +Block 0031 [ 30]: 92008c2a75103b5a +Block 0031 [ 31]: c9ce40dcb0ae0fff +Block 0031 [ 32]: 31e7b05a84523cbe +Block 0031 [ 33]: 1b854b7afd4321aa +Block 0031 [ 34]: e611bbf67f403d94 +Block 0031 [ 35]: e7ddb82fcf732908 +Block 0031 [ 36]: 8afea8045337f395 +Block 0031 [ 37]: 5a4b29a0464a87fd +Block 0031 [ 38]: ddc4b39b66d51a4e +Block 0031 [ 39]: 8a962a2a7848e9c7 +Block 0031 [ 40]: c553d559a2dbc2f7 +Block 0031 [ 41]: f0d5b10beb21bccb +Block 0031 [ 42]: 29a8b6322d76864d +Block 0031 [ 43]: 30a6a1d4b043ee12 +Block 0031 [ 44]: 0f8698a6f49cbbf8 +Block 0031 [ 45]: 0271710fca1ae0e6 +Block 0031 [ 46]: 86b474e9cc978929 +Block 0031 [ 47]: 6381d0f8c249ca80 +Block 0031 [ 48]: ae93ff832984a78b +Block 0031 [ 49]: e3806eb3831109ab +Block 0031 [ 50]: c4bb916929ec7540 +Block 0031 [ 51]: 587ce5ea6a14b5af +Block 0031 [ 52]: 81ae14d279dd55ce +Block 0031 [ 53]: b4490e4a095cccc7 +Block 0031 [ 54]: b5b74756d1a47600 +Block 0031 [ 55]: 229f5aa2436f8fd4 +Block 0031 [ 56]: f4dda68045c81478 +Block 0031 [ 57]: d307c85dd48a2344 +Block 0031 [ 58]: 433ad4706e5d90f9 +Block 0031 [ 59]: e74575dbb844a038 +Block 0031 [ 60]: a89f0718e3393ce1 +Block 0031 [ 61]: 588fe47981e7946b +Block 0031 [ 62]: 6518231d42469f4a +Block 0031 [ 63]: 746c07f616058dfc +Block 0031 [ 64]: 3c968cf79bb87403 +Block 0031 [ 65]: 8c4cd47f02979496 +Block 0031 [ 66]: 0303646363f1dbe4 +Block 0031 [ 67]: dcdf94b5679bbdab +Block 0031 [ 68]: 8e92abfffa0073b0 +Block 0031 [ 69]: 712d21d6945e5d7d +Block 0031 [ 70]: 09114fac05fe6744 +Block 0031 [ 71]: 4568bcb4a9fa8b29 +Block 0031 [ 72]: 6608c183890263d6 +Block 0031 [ 73]: 1f74ccf6ab150884 +Block 0031 [ 74]: facdc83fa2c1c817 +Block 0031 [ 75]: 7ae035fa8ed0ce1b +Block 0031 [ 76]: 29f7d651507d76df +Block 0031 [ 77]: e73b4c7efb5671dc +Block 0031 [ 78]: c74deda09b63447d +Block 0031 [ 79]: 629a595aaa37a3c2 +Block 0031 [ 80]: 751fa8d3d07f1156 +Block 0031 [ 81]: 7c8a83446320004d +Block 0031 [ 82]: 993186df8a1ae482 +Block 0031 [ 83]: 6bf5f5c6071b66c1 +Block 0031 [ 84]: d495bb47b2ef1361 +Block 0031 [ 85]: 528404d7247a455f +Block 0031 [ 86]: 8cc33913d6ef8cb6 +Block 0031 [ 87]: 70c0b0ce7fefbd05 +Block 0031 [ 88]: a58a8a3c7c246774 +Block 0031 [ 89]: 2ffda09b4d88cb6b +Block 0031 [ 90]: 3fb07d2cd72192fd +Block 0031 [ 91]: 84689e06eb122836 +Block 0031 [ 92]: e2f659a255c97fc2 +Block 0031 [ 93]: a4e8983f8e3f2363 +Block 0031 [ 94]: f5c06cdf6ac58be1 +Block 0031 [ 95]: cce957feb8dc694e +Block 0031 [ 96]: 955f7bd29f980a3e +Block 0031 [ 97]: 5e6a9b06b958d9eb +Block 0031 [ 98]: 13e2ae511f9fcf95 +Block 0031 [ 99]: 7e90dc5738154a96 +Block 0031 [100]: 2fbff3198bc7dfbb +Block 0031 [101]: 029b171c3879b4e5 +Block 0031 [102]: 6b2e35fc0ec55726 +Block 0031 [103]: 8b7618296c29640b +Block 0031 [104]: aa6da19845af6feb +Block 0031 [105]: af2aab61252a6652 +Block 0031 [106]: 70107491337b1baf +Block 0031 [107]: d01fa41824afe775 +Block 0031 [108]: 2f49d846b7e7fde5 +Block 0031 [109]: 36de3a765cd99df7 +Block 0031 [110]: e1892ef5e7bf72e5 +Block 0031 [111]: cdb4e92f199df6f7 +Block 0031 [112]: ac68f1f63533a059 +Block 0031 [113]: 54d709cf88689da1 +Block 0031 [114]: d22355579e725146 +Block 0031 [115]: f68214076ccce3f6 +Block 0031 [116]: 061f07bc4b3f9526 +Block 0031 [117]: 93ca7252bd067ab8 +Block 0031 [118]: 25fac18a5fb39a86 +Block 0031 [119]: f823ae791d41fe57 +Block 0031 [120]: 5b72f046297886bc +Block 0031 [121]: cbae98da46154192 +Block 0031 [122]: c087b1a1b5ede419 +Block 0031 [123]: 2c05d9fa80a8f2ff +Block 0031 [124]: 3921a5c7788362de +Block 0031 [125]: e0b99140444ee63a +Block 0031 [126]: 9cb08bbd62f6ecb5 +Block 0031 [127]: 7863ba7c31e4780d + + After pass 2: +Block 0000 [ 0]: 074ffcc2d6211662 +Block 0000 [ 1]: 23dc267c4f3d1696 +Block 0000 [ 2]: 067781fb67b4a7cd +Block 0000 [ 3]: 4405600ea87c3236 +Block 0000 [ 4]: 5c7d7668ebdd0f48 +Block 0000 [ 5]: 2c158c83d6a8dfc6 +Block 0000 [ 6]: a51c8b5beac9a07b +Block 0000 [ 7]: 1cae283e1849d908 +Block 0000 [ 8]: 67d9e3f64caa972d +Block 0000 [ 9]: fc6754c829fc7cba +Block 0000 [ 10]: 017dfa540b6c9bc9 +Block 0000 [ 11]: 39b736ea7cdf7b0b +Block 0000 [ 12]: 1f37d704a41cb903 +Block 0000 [ 13]: 3aecddd32b254afa +Block 0000 [ 14]: 4700d23ff95830df +Block 0000 [ 15]: 8d21806d416feb40 +Block 0000 [ 16]: 5053c210b1f3f1a6 +Block 0000 [ 17]: c7cac96030349349 +Block 0000 [ 18]: b980e68ee8d6b5c0 +Block 0000 [ 19]: 02834d681a06cd74 +Block 0000 [ 20]: 02ac55d5bb3f15a2 +Block 0000 [ 21]: e67d07df976b00a1 +Block 0000 [ 22]: a439d570908a6dfc +Block 0000 [ 23]: 50f092cbe300c2fc +Block 0000 [ 24]: befdffab9975f1e4 +Block 0000 [ 25]: f4f4600d82cd417d +Block 0000 [ 26]: 17f6612758926fc5 +Block 0000 [ 27]: dfd8c28f34a09aed +Block 0000 [ 28]: 24584d701e1a84e2 +Block 0000 [ 29]: 47c5add8e8460639 +Block 0000 [ 30]: 0f9c8e1641cf56bb +Block 0000 [ 31]: 9ec95ca5bcff5620 +Block 0000 [ 32]: 97b7cdda0a711063 +Block 0000 [ 33]: 63853fcecb6b6b8a +Block 0000 [ 34]: 5df2cde7e36bafc7 +Block 0000 [ 35]: d7e0e9b81910dd50 +Block 0000 [ 36]: 399ac6865b269713 +Block 0000 [ 37]: 8376d957a91e502e +Block 0000 [ 38]: b9ccdb00eced58d8 +Block 0000 [ 39]: 0ca46bce53d80ec1 +Block 0000 [ 40]: 403e6af6dde5401a +Block 0000 [ 41]: 79041a1ee46d5de5 +Block 0000 [ 42]: 6478018547a45c10 +Block 0000 [ 43]: b586c73694a50ad5 +Block 0000 [ 44]: 19c09a72ffb077c6 +Block 0000 [ 45]: cd4ed30f1950c280 +Block 0000 [ 46]: 30a24c09eb9f26e3 +Block 0000 [ 47]: a5a3e3544f299ca2 +Block 0000 [ 48]: 4daf9512c147bf09 +Block 0000 [ 49]: 566c7455847c148f +Block 0000 [ 50]: 9d1b5569164a3cd2 +Block 0000 [ 51]: 89c678b2ab335957 +Block 0000 [ 52]: 32d2c5727eaa685b +Block 0000 [ 53]: 6cc29cae8d088214 +Block 0000 [ 54]: 217d81e9f0fefbe2 +Block 0000 [ 55]: 639ac623a21feded +Block 0000 [ 56]: 235e78e584141ede +Block 0000 [ 57]: 7919e75c6d3dab69 +Block 0000 [ 58]: 6a876509af846fd1 +Block 0000 [ 59]: 215a62e84a5dda9b +Block 0000 [ 60]: 1be8f91ab4628c1a +Block 0000 [ 61]: 1d6526223d2ce03d +Block 0000 [ 62]: a62350b8d2991ef3 +Block 0000 [ 63]: e3256eebc2e9743d +Block 0000 [ 64]: 7d3c911dde4b729d +Block 0000 [ 65]: bc30bb8cbadaea85 +Block 0000 [ 66]: b7794d58951616b7 +Block 0000 [ 67]: ba9d59b655e8426d +Block 0000 [ 68]: 3e84c80234db69df +Block 0000 [ 69]: 57c75d2442885b3c +Block 0000 [ 70]: 19abdeb8612da37f +Block 0000 [ 71]: ec8efaf2e2d2e65c +Block 0000 [ 72]: 87692796d1f2e210 +Block 0000 [ 73]: f6d623948e49ce7b +Block 0000 [ 74]: 8e96e29c9a2fa442 +Block 0000 [ 75]: 54bb73c34877db70 +Block 0000 [ 76]: 98dad77daadd139d +Block 0000 [ 77]: 0f794bfaf84e29b0 +Block 0000 [ 78]: 2b34a73157d7ef5c +Block 0000 [ 79]: 8ecb005134ac5b8a +Block 0000 [ 80]: 793d55e30eb5485c +Block 0000 [ 81]: de517434bcf0cafa +Block 0000 [ 82]: 7ea4f8ecbc183f32 +Block 0000 [ 83]: 72a35118ac328bce +Block 0000 [ 84]: f4275ff7a034f425 +Block 0000 [ 85]: e95a8c458757ffd0 +Block 0000 [ 86]: 64fd3ce6e85f934e +Block 0000 [ 87]: d9c027d06733c4e6 +Block 0000 [ 88]: 6e7eb7d2f3f4b2a4 +Block 0000 [ 89]: f6b9860481ea6f18 +Block 0000 [ 90]: 9d883d8955179f0c +Block 0000 [ 91]: b1ba223d9186b36f +Block 0000 [ 92]: 1989b62b3c499c02 +Block 0000 [ 93]: a292a87cacf94dc5 +Block 0000 [ 94]: ef8cd9123be7351f +Block 0000 [ 95]: 98c5673b3bb4e050 +Block 0000 [ 96]: 300366627841dc69 +Block 0000 [ 97]: 2834511a487aca0e +Block 0000 [ 98]: 0b4fa280d5e7967c +Block 0000 [ 99]: da97469d8738dfdb +Block 0000 [100]: d00c6e9085aba92a +Block 0000 [101]: 029e1930514f1d49 +Block 0000 [102]: 7749ba0fb768e9ef +Block 0000 [103]: 631f5377678c24ee +Block 0000 [104]: 7997bd3d7d2b3ddb +Block 0000 [105]: 63170d21238ffc00 +Block 0000 [106]: 4bae77aba388d1af +Block 0000 [107]: 9ff14fc9d20615f7 +Block 0000 [108]: 8cc4d7f451e5ea62 +Block 0000 [109]: d317157783a6278a +Block 0000 [110]: 4a0a192d4102224f +Block 0000 [111]: 56bda18173b56c75 +Block 0000 [112]: c194d8f1db07f888 +Block 0000 [113]: e08781cc46e76541 +Block 0000 [114]: d1104ae30639dc72 +Block 0000 [115]: 81f4c81422544029 +Block 0000 [116]: 36c3fbba9c223820 +Block 0000 [117]: fa92e2c95a6ac010 +Block 0000 [118]: 0e5e2a5f620020cc +Block 0000 [119]: b08063b69cd858eb +Block 0000 [120]: 63d32af9ea60f5c7 +Block 0000 [121]: 3815e273927c8b44 +Block 0000 [122]: 01aabcd9163ee1fb +Block 0000 [123]: 332241a4b6dd26a1 +Block 0000 [124]: b801a887e60e88b1 +Block 0000 [125]: 730a4b559c209261 +Block 0000 [126]: 6cef830772dad5c6 +Block 0000 [127]: b1080b96394ceb2b +Block 0001 [ 0]: 35578285c65e90fd +Block 0001 [ 1]: 4bb9cc0c6d2efc55 +Block 0001 [ 2]: 7baa171e89c44f1a +Block 0001 [ 3]: b5248ac1751059d1 +Block 0001 [ 4]: 6bad1484d694d0e0 +Block 0001 [ 5]: f93622b535148cc3 +Block 0001 [ 6]: 751a6fe829a61d29 +Block 0001 [ 7]: e8c3aca31e64ab54 +Block 0001 [ 8]: 93745f7637ef0a30 +Block 0001 [ 9]: a49ed01e2e6e0753 +Block 0001 [ 10]: c04456bd7e5bfd5b +Block 0001 [ 11]: 3a7cb2b5b5fa1bcd +Block 0001 [ 12]: 8ba5050fca0be409 +Block 0001 [ 13]: 0fe0d194cbe241b0 +Block 0001 [ 14]: f767dbead0b52cba +Block 0001 [ 15]: 35e72a7bb50d7144 +Block 0001 [ 16]: 143a86cf490b4b49 +Block 0001 [ 17]: 3ceb93f75eacf023 +Block 0001 [ 18]: 55f78adb9892524b +Block 0001 [ 19]: 97a9c8c671792a2b +Block 0001 [ 20]: bd930f3e27a8e299 +Block 0001 [ 21]: f48dc858d7623a19 +Block 0001 [ 22]: e4dc1f425b078cd9 +Block 0001 [ 23]: 40abe54c27a1df54 +Block 0001 [ 24]: 0f13ecb6b1f801ae +Block 0001 [ 25]: 40e76bbc9e8e0359 +Block 0001 [ 26]: 5a1fba7aa341f9fb +Block 0001 [ 27]: f6cb6c0dc939b786 +Block 0001 [ 28]: 5f3163fc202e2c15 +Block 0001 [ 29]: a060056daefacd6d +Block 0001 [ 30]: 962582e26876c45d +Block 0001 [ 31]: 8f2ae61de120c15c +Block 0001 [ 32]: 1798a6b18d5df0fa +Block 0001 [ 33]: f35379efc89f3185 +Block 0001 [ 34]: 9aa653f4d27037d4 +Block 0001 [ 35]: f55d25a85ef70083 +Block 0001 [ 36]: e0b5fa445529ad98 +Block 0001 [ 37]: 90cd2452561901c0 +Block 0001 [ 38]: e13e29ac39c5c75b +Block 0001 [ 39]: 3b5f3754b72ad946 +Block 0001 [ 40]: 0b74c97f8530631e +Block 0001 [ 41]: f205c031d6eab47a +Block 0001 [ 42]: 0392f102d95bedd0 +Block 0001 [ 43]: df8cc06fd357b932 +Block 0001 [ 44]: adba22945f6ea54b +Block 0001 [ 45]: 245c28eb786846fc +Block 0001 [ 46]: 1374137daa585fa4 +Block 0001 [ 47]: 9bbfdb864d4a44a4 +Block 0001 [ 48]: fa43c6b21ca5e381 +Block 0001 [ 49]: 7fcd01d29f0cf1b5 +Block 0001 [ 50]: 26ed604d9cccb91d +Block 0001 [ 51]: 61f83421bd6c1f23 +Block 0001 [ 52]: 1f8b6d81b8e3e293 +Block 0001 [ 53]: ae720a3cd9e026e1 +Block 0001 [ 54]: 799793cee15b9fcc +Block 0001 [ 55]: 50a2920934111544 +Block 0001 [ 56]: ae98b61798fe4197 +Block 0001 [ 57]: d09b498bcc92caa4 +Block 0001 [ 58]: 626405a3f141ac39 +Block 0001 [ 59]: 3b8fc5a9403eff81 +Block 0001 [ 60]: 26be736898a3d356 +Block 0001 [ 61]: fec9b55fe7400706 +Block 0001 [ 62]: 7b42f7e3dc25495d +Block 0001 [ 63]: 0ad2b5ac04f2455a +Block 0001 [ 64]: f9cee4116bb71092 +Block 0001 [ 65]: 017640c28e88caf5 +Block 0001 [ 66]: 4d9a590bd7959d08 +Block 0001 [ 67]: e0889cdd7e722e2b +Block 0001 [ 68]: b864c81b4f0a72ab +Block 0001 [ 69]: f13be1af5f968168 +Block 0001 [ 70]: a18c60f1bca699b5 +Block 0001 [ 71]: b0d6efd7f979ab4b +Block 0001 [ 72]: 44251fa7bd97a8ec +Block 0001 [ 73]: 80fc637798575c3d +Block 0001 [ 74]: b49d9f0a356332a0 +Block 0001 [ 75]: 577788eb3e3cde4e +Block 0001 [ 76]: 4b0f73f577b3bf93 +Block 0001 [ 77]: 0703cffd01ec20c4 +Block 0001 [ 78]: 57b7fad9a047f157 +Block 0001 [ 79]: 3d4a385b573bf8f4 +Block 0001 [ 80]: 3ec7cd6e9a586917 +Block 0001 [ 81]: 30502a8f0d6b3b3b +Block 0001 [ 82]: 5827740f69f6ed7e +Block 0001 [ 83]: e772f948ef87d9e8 +Block 0001 [ 84]: 113292b8eb726923 +Block 0001 [ 85]: e1a0f99b9b4c7f45 +Block 0001 [ 86]: 849ca6d49a8beb6f +Block 0001 [ 87]: 899e64706cc6cc22 +Block 0001 [ 88]: 762aac2687b27c1e +Block 0001 [ 89]: bec687a1a0ff5f67 +Block 0001 [ 90]: a6d0d4c0dd017184 +Block 0001 [ 91]: 7184b936a5192649 +Block 0001 [ 92]: 8a0b189778c5c2f9 +Block 0001 [ 93]: 388c8aa99414a343 +Block 0001 [ 94]: bfa9e7e8b944a012 +Block 0001 [ 95]: 0bec06d22c5cbc68 +Block 0001 [ 96]: 48cf01fc006a932a +Block 0001 [ 97]: 4eca2a3ce6a9ede5 +Block 0001 [ 98]: 5de361340ad870d4 +Block 0001 [ 99]: 991c300d989769b7 +Block 0001 [100]: e81e6ff5168dea46 +Block 0001 [101]: b80b74c2dea3598b +Block 0001 [102]: 4178c7a329ec33f9 +Block 0001 [103]: 821b69f7ec159cb4 +Block 0001 [104]: 3fbcf7aed8b16057 +Block 0001 [105]: 8ff6fd8c8dbb7d97 +Block 0001 [106]: 00999cc3dfd68ed5 +Block 0001 [107]: 4b1125750e10c124 +Block 0001 [108]: c4faa4346465f470 +Block 0001 [109]: 9228b997dec487a9 +Block 0001 [110]: 7a77a1f7775085a7 +Block 0001 [111]: 76c87a4eb0814378 +Block 0001 [112]: 9d1dc217f8205567 +Block 0001 [113]: 192082947d040aff +Block 0001 [114]: 835a0e7dc57147a4 +Block 0001 [115]: d658d49131e2034f +Block 0001 [116]: 8178295354854b4b +Block 0001 [117]: 546509eed0804fd2 +Block 0001 [118]: dad30f4cad39632f +Block 0001 [119]: 7067a93d88b400b3 +Block 0001 [120]: f208ab50a921620b +Block 0001 [121]: 11d3c5a308076062 +Block 0001 [122]: 66cc7ff9c93e6d86 +Block 0001 [123]: d6d88bbd8f39f66a +Block 0001 [124]: 2267ded47cd0fd58 +Block 0001 [125]: 3f54c246e26607c7 +Block 0001 [126]: 90549bbe29fd6b8b +Block 0001 [127]: 13ee9844392f8eb3 +Block 0002 [ 0]: 73d51d413b4c53d0 +Block 0002 [ 1]: 76ae856cbdb336a0 +Block 0002 [ 2]: af1b19667ebc609b +Block 0002 [ 3]: 79e1597f33187d55 +Block 0002 [ 4]: 6a65de429602a2a3 +Block 0002 [ 5]: f1143254e35f0f75 +Block 0002 [ 6]: e8e367d45b989e55 +Block 0002 [ 7]: 7bcd857863800596 +Block 0002 [ 8]: a849576915058869 +Block 0002 [ 9]: 84e96cfd017f8259 +Block 0002 [ 10]: 5faa617589a4bb6e +Block 0002 [ 11]: 9779d55b049906f4 +Block 0002 [ 12]: bf6b51a7c73464ac +Block 0002 [ 13]: d1362f3e2c38a1fc +Block 0002 [ 14]: 1f009be2c745a955 +Block 0002 [ 15]: a9cf27c109ab7ae6 +Block 0002 [ 16]: 9bae95cb88fd2bfd +Block 0002 [ 17]: aa3fc5e576e3f2e9 +Block 0002 [ 18]: 727a888a9cdf5d82 +Block 0002 [ 19]: e29325278794849d +Block 0002 [ 20]: aa579a642dc5efc0 +Block 0002 [ 21]: e64d2aa10ca93a83 +Block 0002 [ 22]: fbf9a497307c6789 +Block 0002 [ 23]: 63dec585b76b0e36 +Block 0002 [ 24]: 9914fe6ae8f7902e +Block 0002 [ 25]: 9f183f1f898a2eec +Block 0002 [ 26]: 871dd6f0c5ed7391 +Block 0002 [ 27]: 6a998c598e62d632 +Block 0002 [ 28]: ae4fb7d7d044a498 +Block 0002 [ 29]: 45bb02b68c94dabe +Block 0002 [ 30]: 0ee5b5b2a12fedcb +Block 0002 [ 31]: f81100966671170e +Block 0002 [ 32]: bc10a0e55f0581e3 +Block 0002 [ 33]: 59fa2ae5ae73bc1a +Block 0002 [ 34]: 8734ef9fd26b2592 +Block 0002 [ 35]: 8b1125062051701d +Block 0002 [ 36]: b8e68fc7dfe6e175 +Block 0002 [ 37]: 4e350c55108d1b95 +Block 0002 [ 38]: a92a1a6e50453305 +Block 0002 [ 39]: 12ae32bee16cbc4b +Block 0002 [ 40]: e63b524d74f88184 +Block 0002 [ 41]: 1c32b08c95f570e2 +Block 0002 [ 42]: e1f63121e0c49256 +Block 0002 [ 43]: e8908ea1b577e153 +Block 0002 [ 44]: bf670a809c56f86a +Block 0002 [ 45]: 0bd87114ea78aa82 +Block 0002 [ 46]: a5f83d398c0518c8 +Block 0002 [ 47]: caf9fc4fd0d13fac +Block 0002 [ 48]: 87dc556761c3b84e +Block 0002 [ 49]: b271d201d69d87ba +Block 0002 [ 50]: 60afbeeb05e32ce6 +Block 0002 [ 51]: 3f7d0c4c77690400 +Block 0002 [ 52]: 827402ca4c4b7568 +Block 0002 [ 53]: cc1490ac87cae9ab +Block 0002 [ 54]: 5f0c0be02bfee0d6 +Block 0002 [ 55]: ee55646ea303f7ee +Block 0002 [ 56]: 760b0ef4f4be1085 +Block 0002 [ 57]: f6e1dda0ba5aa3ec +Block 0002 [ 58]: 64d813c90f235d07 +Block 0002 [ 59]: 7e243d64c004d7cf +Block 0002 [ 60]: 9ba0e4619f9321b1 +Block 0002 [ 61]: 9af7d15278ce6e9c +Block 0002 [ 62]: 84429fe41e908a5f +Block 0002 [ 63]: 087d31f94451179a +Block 0002 [ 64]: 6bd8e211a6776757 +Block 0002 [ 65]: bce0156f33df21ff +Block 0002 [ 66]: b89d728cb0ea1478 +Block 0002 [ 67]: 1d38586723a2aaf6 +Block 0002 [ 68]: 7fdf415d588153a9 +Block 0002 [ 69]: 784414ab43287466 +Block 0002 [ 70]: 7549c68a0508a290 +Block 0002 [ 71]: fb6e20ff908acfbc +Block 0002 [ 72]: 1b7ea5812d994dd2 +Block 0002 [ 73]: eceb8fb8ecc00544 +Block 0002 [ 74]: 6a1db08dcf131415 +Block 0002 [ 75]: ef12b7be1c98f06d +Block 0002 [ 76]: 4bab0815544ff51c +Block 0002 [ 77]: d7005204797a3a09 +Block 0002 [ 78]: 3a62509e74742fb6 +Block 0002 [ 79]: d299457155448ac2 +Block 0002 [ 80]: 97f4f9620deb14f3 +Block 0002 [ 81]: 569cd97b9e8554b1 +Block 0002 [ 82]: 971aa2f58c986a44 +Block 0002 [ 83]: d2462db7dd1dc03f +Block 0002 [ 84]: f0709d7bc71246be +Block 0002 [ 85]: 0b25b74b0b86e738 +Block 0002 [ 86]: b685b14a81c45aa8 +Block 0002 [ 87]: 1a512dc11da0a043 +Block 0002 [ 88]: 47b0149e3e3ac09c +Block 0002 [ 89]: 675a13653235da5d +Block 0002 [ 90]: 79cd73d9561f7abe +Block 0002 [ 91]: 2b7e85da8095a630 +Block 0002 [ 92]: ea9ee50b427a24f0 +Block 0002 [ 93]: cf3a906fc784dee6 +Block 0002 [ 94]: c5e846fbb3cef89b +Block 0002 [ 95]: d2e00082f5bd5d75 +Block 0002 [ 96]: 311bc46892a29e3f +Block 0002 [ 97]: 5404eee07dffcd46 +Block 0002 [ 98]: 793df68160ff5272 +Block 0002 [ 99]: 9cf21ecd74a09c05 +Block 0002 [100]: 97c651e1b57fe890 +Block 0002 [101]: d21b4652fdaa71aa +Block 0002 [102]: f62616d527da1b00 +Block 0002 [103]: 8111d5ef7eb2fd3d +Block 0002 [104]: 88bc12e37dfb1f51 +Block 0002 [105]: 706b7a1d6384bf60 +Block 0002 [106]: 1bc22344df9219a0 +Block 0002 [107]: 8f7ca7a93c0cc2f3 +Block 0002 [108]: 4f45b8e0a2529942 +Block 0002 [109]: e7b00d653cf2f13c +Block 0002 [110]: 67187d7826c89513 +Block 0002 [111]: 7754f65a9f702ba5 +Block 0002 [112]: 68a5bfea171493cc +Block 0002 [113]: deb3870509d40d3e +Block 0002 [114]: fb3690dee5a3fc15 +Block 0002 [115]: 02f3a66dbad140a3 +Block 0002 [116]: 44b70f1d0eabf627 +Block 0002 [117]: a57ce8e7d9cc1fce +Block 0002 [118]: 6831b2965eebf76f +Block 0002 [119]: 05303f957ebaf718 +Block 0002 [120]: 17a65879d3fb0003 +Block 0002 [121]: 6ab65ffaea096928 +Block 0002 [122]: 2164657f763a5dbe +Block 0002 [123]: 1d8072135dc98a7a +Block 0002 [124]: d2b2f7a5744d25b7 +Block 0002 [125]: 71314040af09b83d +Block 0002 [126]: 2f73ab3da08b6618 +Block 0002 [127]: 801c6c6324986446 +Block 0003 [ 0]: 64732568928f828e +Block 0003 [ 1]: f0e835abec79b14c +Block 0003 [ 2]: 4207566a57dafdc0 +Block 0003 [ 3]: 8c7214adc4de6a5c +Block 0003 [ 4]: 1ba9060d3fdbd2b1 +Block 0003 [ 5]: c283b201aaed5725 +Block 0003 [ 6]: fd7e524200d55194 +Block 0003 [ 7]: 9cad3f8488691d33 +Block 0003 [ 8]: f24250ba766eeea0 +Block 0003 [ 9]: 4dafb4ca2313c16a +Block 0003 [ 10]: fc1b1fdb788694d4 +Block 0003 [ 11]: fa314a001d805b18 +Block 0003 [ 12]: fc9b8a9e15eedbd6 +Block 0003 [ 13]: c1a95d732ea90450 +Block 0003 [ 14]: 747798647d3da8ee +Block 0003 [ 15]: b5486a8fabc5c299 +Block 0003 [ 16]: 23ff76548af23c21 +Block 0003 [ 17]: f662e50172dc06b4 +Block 0003 [ 18]: b99fe04efacbabc9 +Block 0003 [ 19]: 030c683e8be4b57e +Block 0003 [ 20]: c7d04e1e2f7eb1b7 +Block 0003 [ 21]: 06c758882e33c1d4 +Block 0003 [ 22]: 6ea19794559d0bac +Block 0003 [ 23]: 1f80b0b09de7b6cf +Block 0003 [ 24]: d46987c238db6213 +Block 0003 [ 25]: f0f363d487c64c01 +Block 0003 [ 26]: b20cf91dc47ee91c +Block 0003 [ 27]: 48fac840c62f466a +Block 0003 [ 28]: c7104baed50fbd2e +Block 0003 [ 29]: 7a7565f6163eb33e +Block 0003 [ 30]: baf293590025e736 +Block 0003 [ 31]: 638ddb2a0dcf89aa +Block 0003 [ 32]: 0bf1d84cd8c9548f +Block 0003 [ 33]: e173ce50e3ac7125 +Block 0003 [ 34]: 431a7a3b7020cd23 +Block 0003 [ 35]: 7312ca0186fcccac +Block 0003 [ 36]: 9c93dd7716859719 +Block 0003 [ 37]: b53476d68465f248 +Block 0003 [ 38]: 2c8ae3759ff45f6c +Block 0003 [ 39]: 89f858e6b950a51b +Block 0003 [ 40]: c024f8b01f375725 +Block 0003 [ 41]: e17760ffe78506fe +Block 0003 [ 42]: 67f71589fa342748 +Block 0003 [ 43]: c2bfb19181a1b336 +Block 0003 [ 44]: b117ceec5935ffec +Block 0003 [ 45]: 14e0f64aa4d6a5b3 +Block 0003 [ 46]: 5a03026316942429 +Block 0003 [ 47]: 788e7c14dbe17ab5 +Block 0003 [ 48]: 8e0eb445c3d928e8 +Block 0003 [ 49]: 523f883054d18325 +Block 0003 [ 50]: eb0bf194d4800e32 +Block 0003 [ 51]: 777275d6cc00e7fb +Block 0003 [ 52]: dca496f17a00aafe +Block 0003 [ 53]: 9cb2d38eec372050 +Block 0003 [ 54]: 4f93385cf1076d07 +Block 0003 [ 55]: fdc58139d57e6687 +Block 0003 [ 56]: 7e615f13e128b1bc +Block 0003 [ 57]: 4fb44deb8bbf5c5c +Block 0003 [ 58]: 54c6683b193dea25 +Block 0003 [ 59]: ca828ff49ea7ed7b +Block 0003 [ 60]: 23ef27dd6876b365 +Block 0003 [ 61]: 7b76f0bf2bc26e1c +Block 0003 [ 62]: eae5d4ac7f7144bf +Block 0003 [ 63]: b1f9099b11ededcc +Block 0003 [ 64]: 32cc9c81f017ba0e +Block 0003 [ 65]: 5b2444503a200158 +Block 0003 [ 66]: cecc6fc191799aae +Block 0003 [ 67]: d21109299e87add6 +Block 0003 [ 68]: 9a62b1fa3f2a5bb0 +Block 0003 [ 69]: 879d63a256449f83 +Block 0003 [ 70]: c4648ef65d063255 +Block 0003 [ 71]: ed478356d2d62771 +Block 0003 [ 72]: 0e26ca78fe098d30 +Block 0003 [ 73]: 40072329c48e1ec8 +Block 0003 [ 74]: 07e5bd63f3304854 +Block 0003 [ 75]: fb34638a5201ce10 +Block 0003 [ 76]: a951299757c793b0 +Block 0003 [ 77]: e368d57abe74ff7b +Block 0003 [ 78]: 85ec98ccb26290e7 +Block 0003 [ 79]: 53459ad4acf2da65 +Block 0003 [ 80]: c98a78858f14d347 +Block 0003 [ 81]: 9d8b22547d48916b +Block 0003 [ 82]: 80d0e8f5f215b88c +Block 0003 [ 83]: 5edbf7bcd02fd162 +Block 0003 [ 84]: 9954d82dec3ca03a +Block 0003 [ 85]: 444b538378d0a5d6 +Block 0003 [ 86]: 606066967cda56db +Block 0003 [ 87]: d7d491715b473467 +Block 0003 [ 88]: a6d02b9ecc8ff032 +Block 0003 [ 89]: 0595036c7117a22c +Block 0003 [ 90]: 11180cf417129d6d +Block 0003 [ 91]: aea26c1f97481b9c +Block 0003 [ 92]: cc45377f1ae1c8ee +Block 0003 [ 93]: 966793a197ca6057 +Block 0003 [ 94]: 85ac7fe90fb11019 +Block 0003 [ 95]: af2078d3ede0a983 +Block 0003 [ 96]: 7958ec6a4835c1ce +Block 0003 [ 97]: 9c2a859b73a07937 +Block 0003 [ 98]: 8b115dcfc1d79139 +Block 0003 [ 99]: 53094bc763b39413 +Block 0003 [100]: 9750583002d83564 +Block 0003 [101]: a4c554841aa2f5da +Block 0003 [102]: b3917593d039083b +Block 0003 [103]: 06f729fc1fb672ed +Block 0003 [104]: 038cd42a493d0293 +Block 0003 [105]: e20cde867860f38e +Block 0003 [106]: 62690da6b7c25ae7 +Block 0003 [107]: bd660101bac5a274 +Block 0003 [108]: 3523ebeb30ac0d6a +Block 0003 [109]: 76d94c2febc0f225 +Block 0003 [110]: 212d2f1a307cd09b +Block 0003 [111]: cb71474dc2bddc34 +Block 0003 [112]: 0cedb05f7f3999b7 +Block 0003 [113]: 59d49b2bdc5ff79f +Block 0003 [114]: 8f41dad377f98ea4 +Block 0003 [115]: 7e8c4f12f658b1be +Block 0003 [116]: b9ed73dd3c09bc2a +Block 0003 [117]: 4d70b50bf9f67b7c +Block 0003 [118]: b16376113c6b3388 +Block 0003 [119]: 1959de6ed1ea5ef7 +Block 0003 [120]: 2d05696db2182ffe +Block 0003 [121]: 0614bd82fda3c718 +Block 0003 [122]: 992fbd510b5095a3 +Block 0003 [123]: 6064c37e3677f6a8 +Block 0003 [124]: 5400f81ee75febe5 +Block 0003 [125]: e4ea20163ed41feb +Block 0003 [126]: aad145432d99ce84 +Block 0003 [127]: 28ca037ca0c948b5 +Block 0004 [ 0]: 9537a8d571e14dd2 +Block 0004 [ 1]: 4dc0ad51cc92ed8a +Block 0004 [ 2]: 55bd4ba9424aa6ff +Block 0004 [ 3]: a744762b554e1ec3 +Block 0004 [ 4]: d8320c91f51a677a +Block 0004 [ 5]: b2cf00025f31b59d +Block 0004 [ 6]: 01ae36ad13a305d4 +Block 0004 [ 7]: b9b9767808ea9c62 +Block 0004 [ 8]: 713d9125c3306797 +Block 0004 [ 9]: b61665cce9e83699 +Block 0004 [ 10]: 325d6eb6798a8584 +Block 0004 [ 11]: 4f07c3d6a680f5c2 +Block 0004 [ 12]: 0a09f03b8ce46486 +Block 0004 [ 13]: 6286566c595fba0b +Block 0004 [ 14]: e1ebe6e6c31431e8 +Block 0004 [ 15]: ffe04f39685d0461 +Block 0004 [ 16]: 53ca4927ae552083 +Block 0004 [ 17]: bfc0ac7bbfb0a523 +Block 0004 [ 18]: ef7007a863c595fa +Block 0004 [ 19]: 7843cde5fe943990 +Block 0004 [ 20]: bf2f584814389b08 +Block 0004 [ 21]: ed568f494f3b7f31 +Block 0004 [ 22]: 1504344614110bca +Block 0004 [ 23]: 993f1f0f045854bc +Block 0004 [ 24]: 158161730b7a01f5 +Block 0004 [ 25]: cedec86d0c6474f2 +Block 0004 [ 26]: 61277594ce55e9ef +Block 0004 [ 27]: 1ac9623722103320 +Block 0004 [ 28]: e0b1f7ff25d63fca +Block 0004 [ 29]: 561a1d0cfb2f7d0a +Block 0004 [ 30]: 9485584b613ae3fd +Block 0004 [ 31]: 23ef53706164ff5c +Block 0004 [ 32]: d75b09f417d430c0 +Block 0004 [ 33]: ff8b028717907100 +Block 0004 [ 34]: 875111393d253da7 +Block 0004 [ 35]: f458ee5ba05a9b78 +Block 0004 [ 36]: d33a40a8a389fbb5 +Block 0004 [ 37]: 89405e2c0126e397 +Block 0004 [ 38]: f0624eaf3617dd35 +Block 0004 [ 39]: 3339d799ca9fa273 +Block 0004 [ 40]: 7fa3e0e496d8d9b5 +Block 0004 [ 41]: 1cec3be146a79491 +Block 0004 [ 42]: bb4f051657fd1e2b +Block 0004 [ 43]: af33959d559547bc +Block 0004 [ 44]: fb6dd05eee469853 +Block 0004 [ 45]: f8ba2f1392589c80 +Block 0004 [ 46]: 5fc140faa08de7a8 +Block 0004 [ 47]: 4b3fdd5510eac7c7 +Block 0004 [ 48]: 29f31eed05b8526c +Block 0004 [ 49]: e5a75fce6e74c1d6 +Block 0004 [ 50]: 9ebca9c5b0e88888 +Block 0004 [ 51]: 54012deed102f6e8 +Block 0004 [ 52]: dc6aa4029c0feedd +Block 0004 [ 53]: b82cab65e5d81650 +Block 0004 [ 54]: 665ab42e1780c04f +Block 0004 [ 55]: 8336681730e97b0b +Block 0004 [ 56]: d9cc84a4b22d9b68 +Block 0004 [ 57]: b292fc773296606a +Block 0004 [ 58]: 32fadadded74ff6d +Block 0004 [ 59]: 5e255ad5bd09fd79 +Block 0004 [ 60]: 1c5d99287c2d81e4 +Block 0004 [ 61]: b21f3fddabcc79be +Block 0004 [ 62]: c2d4470091d2a399 +Block 0004 [ 63]: 4989fa7d69a80f25 +Block 0004 [ 64]: aa69da87b7db456a +Block 0004 [ 65]: 51fde513e2f7d7ae +Block 0004 [ 66]: 812d57ccc291d970 +Block 0004 [ 67]: 25b973a25beb11c3 +Block 0004 [ 68]: fee862dbadbf76ce +Block 0004 [ 69]: 04dbf43ecbf53aa8 +Block 0004 [ 70]: ccdc2c2b573af1f3 +Block 0004 [ 71]: e4b32bf0e0bfeaa6 +Block 0004 [ 72]: 3a3879ec1c6e004b +Block 0004 [ 73]: 107f4958b25af714 +Block 0004 [ 74]: fa4e0c74a0ee9e83 +Block 0004 [ 75]: 911bccc813b79cf6 +Block 0004 [ 76]: b497c614eb3a8c6c +Block 0004 [ 77]: d7a01e12f35f6e00 +Block 0004 [ 78]: c99ff61e804121dd +Block 0004 [ 79]: e3d05657ff5b4f90 +Block 0004 [ 80]: e48828629f5aed9f +Block 0004 [ 81]: cdc8aff4caa1f315 +Block 0004 [ 82]: 9013a736ab5fa851 +Block 0004 [ 83]: cbb8c9c276816950 +Block 0004 [ 84]: a67ece7c71b7ad02 +Block 0004 [ 85]: a0ed8a4f128f6ecb +Block 0004 [ 86]: fb62d4c0d755d0fc +Block 0004 [ 87]: 1091699fdab67e95 +Block 0004 [ 88]: 901d7aa388933dd5 +Block 0004 [ 89]: ba0ad9b7db68b704 +Block 0004 [ 90]: c8b46edf36578856 +Block 0004 [ 91]: b3d87a4ec5ff3a2d +Block 0004 [ 92]: 9c7d3eea8191b86d +Block 0004 [ 93]: 3f791b6883190899 +Block 0004 [ 94]: b694aa889c99fa7b +Block 0004 [ 95]: c42559f1608034fd +Block 0004 [ 96]: 5557e364bfd0674d +Block 0004 [ 97]: 9dbade36191fd2c0 +Block 0004 [ 98]: 1a47f258bc00bd52 +Block 0004 [ 99]: 56e4f50be8c33e69 +Block 0004 [100]: ee6c8f3e30c52581 +Block 0004 [101]: b6302207b64d8ed2 +Block 0004 [102]: 681bcd0107359d8a +Block 0004 [103]: 738a0384b182ac67 +Block 0004 [104]: 4941db6da14bf8f3 +Block 0004 [105]: 6ddf9e01ffd4cfc6 +Block 0004 [106]: b9fd089568236f38 +Block 0004 [107]: ea9a02ed74d0ce66 +Block 0004 [108]: b7c398164d2cec98 +Block 0004 [109]: 074b120be92e77e2 +Block 0004 [110]: 21554e4a0007f53a +Block 0004 [111]: 40bf8073b9818922 +Block 0004 [112]: af2b47782b6e69aa +Block 0004 [113]: 689a3140a931152c +Block 0004 [114]: ef127931b979b81f +Block 0004 [115]: 333d56e7771fde6d +Block 0004 [116]: d7dac660115eb2fe +Block 0004 [117]: 783f0447b10b0687 +Block 0004 [118]: 839287fa51814963 +Block 0004 [119]: 51fd8c9d26d2cfa6 +Block 0004 [120]: 98096c3229af0623 +Block 0004 [121]: f1e44616cf83a89d +Block 0004 [122]: d7dee4c489526646 +Block 0004 [123]: d1ff564c6e0cd950 +Block 0004 [124]: 4fafa266ced52aa7 +Block 0004 [125]: 22498eba46a04ef8 +Block 0004 [126]: 45b609663e3b7ce3 +Block 0004 [127]: ee22f7dd21561ac8 +Block 0005 [ 0]: 3cd2e94de90ca481 +Block 0005 [ 1]: dfba8ebdd159db11 +Block 0005 [ 2]: d4d9c891fc74618d +Block 0005 [ 3]: ee4a8995ad390d5b +Block 0005 [ 4]: 2dfbe3d914219e1d +Block 0005 [ 5]: 55649cca2df44184 +Block 0005 [ 6]: d08257933ed59497 +Block 0005 [ 7]: eef09b6cde6aa023 +Block 0005 [ 8]: 9470b40a38496b22 +Block 0005 [ 9]: 8b63c69dc20b94f3 +Block 0005 [ 10]: ab67bd14275990f4 +Block 0005 [ 11]: 278328cc9a689607 +Block 0005 [ 12]: 45bd50f8323de809 +Block 0005 [ 13]: e006cfe9893815ff +Block 0005 [ 14]: 7e7f1ea102228e0c +Block 0005 [ 15]: def383cbb711f355 +Block 0005 [ 16]: 375621a2ad73a6cb +Block 0005 [ 17]: 9e84a59a85925193 +Block 0005 [ 18]: 1447a30c4d2aee4a +Block 0005 [ 19]: 6654b312db275611 +Block 0005 [ 20]: d31d748bee47a017 +Block 0005 [ 21]: 510443570050a8f3 +Block 0005 [ 22]: ea626416bd3fa29e +Block 0005 [ 23]: 3c2cd53b276cd524 +Block 0005 [ 24]: 2b2083e1d220c4d8 +Block 0005 [ 25]: d94599d6f3785390 +Block 0005 [ 26]: 67dad7e6c48ebb00 +Block 0005 [ 27]: 6b92998802e30c96 +Block 0005 [ 28]: 645b1010baac196f +Block 0005 [ 29]: cf4282c3a8ef150c +Block 0005 [ 30]: 5cea9998241d0b66 +Block 0005 [ 31]: 1da03fc4761ee079 +Block 0005 [ 32]: 85544e5a0e0a40a7 +Block 0005 [ 33]: 7d2c97e52be32169 +Block 0005 [ 34]: eaa643ad41ed1c8a +Block 0005 [ 35]: 8e3a28e84a0d15b3 +Block 0005 [ 36]: 98ca6c4cde9f092b +Block 0005 [ 37]: c8397eff8a335a64 +Block 0005 [ 38]: bab0e00748aa1acc +Block 0005 [ 39]: 6979089506d97131 +Block 0005 [ 40]: 35fdb48046953cdd +Block 0005 [ 41]: e9329191b9f4586c +Block 0005 [ 42]: d8615adbab425d2f +Block 0005 [ 43]: 272a1a2d7a7e1554 +Block 0005 [ 44]: 74df2fecf4828a47 +Block 0005 [ 45]: 8d18d4efcd6b5999 +Block 0005 [ 46]: 026aa3c4d8365938 +Block 0005 [ 47]: cdc6eb20428ed057 +Block 0005 [ 48]: 587b106898200c89 +Block 0005 [ 49]: e4cbb4cc3292d8e4 +Block 0005 [ 50]: 8cd19eec986586e6 +Block 0005 [ 51]: 2dc92fc62f91f407 +Block 0005 [ 52]: 1995b751c561d8ed +Block 0005 [ 53]: a354a2cb47fb6d52 +Block 0005 [ 54]: 1edbaac5c88a5409 +Block 0005 [ 55]: 0603484ad13feb48 +Block 0005 [ 56]: 055a26aa8ba641be +Block 0005 [ 57]: 84df1bd3ba8e553e +Block 0005 [ 58]: 7b6863e87b5c4889 +Block 0005 [ 59]: 1f2f946a3193a989 +Block 0005 [ 60]: 5c41ad6c9307af04 +Block 0005 [ 61]: 51b014b4202c9e6c +Block 0005 [ 62]: bcd2327d0fc577eb +Block 0005 [ 63]: c707c191c590c79e +Block 0005 [ 64]: 57257237320ff10a +Block 0005 [ 65]: e48199dfc56bb7f0 +Block 0005 [ 66]: a05ab88148b58f38 +Block 0005 [ 67]: a82063473bd88e71 +Block 0005 [ 68]: 7ce490d805eb0802 +Block 0005 [ 69]: da09b404a4fd5d59 +Block 0005 [ 70]: 796b87be5f3ad540 +Block 0005 [ 71]: 832a6d5b275b9736 +Block 0005 [ 72]: e5dc09d9ff333c8f +Block 0005 [ 73]: bd325fae47103b43 +Block 0005 [ 74]: 842cc4b109936d28 +Block 0005 [ 75]: 0288ad46048a598b +Block 0005 [ 76]: 6e6aca4e2f64cc00 +Block 0005 [ 77]: 74531597ecfa1e36 +Block 0005 [ 78]: 413b81c34e0f35fd +Block 0005 [ 79]: 75f045e6159ec582 +Block 0005 [ 80]: 02b7e4158121f50c +Block 0005 [ 81]: facdab0b178e2d0e +Block 0005 [ 82]: 96dfc5937b23fd82 +Block 0005 [ 83]: d70cb31166d20062 +Block 0005 [ 84]: 19f89ce3f2dd58cb +Block 0005 [ 85]: 24982d720b762691 +Block 0005 [ 86]: d523f396f3a6eb3e +Block 0005 [ 87]: 9284f59b96bccaa1 +Block 0005 [ 88]: b8ea93e059626094 +Block 0005 [ 89]: d2ff2f61d0edf52f +Block 0005 [ 90]: 7712bb23fd5e9d3f +Block 0005 [ 91]: 327ccbdff1b9f0f9 +Block 0005 [ 92]: 1f78ae754cd9f907 +Block 0005 [ 93]: 9224a03220ae07a1 +Block 0005 [ 94]: ecd122202fd83f76 +Block 0005 [ 95]: 756f86991892353b +Block 0005 [ 96]: 209acb92814e6097 +Block 0005 [ 97]: f31ea1ea1d038547 +Block 0005 [ 98]: df8383e6e6d46768 +Block 0005 [ 99]: 204eb18e722413bb +Block 0005 [100]: 8272dc586305e4e5 +Block 0005 [101]: 6df368fdc20eecb4 +Block 0005 [102]: bb0d1440d64fa01d +Block 0005 [103]: f9e2b4c2b114be60 +Block 0005 [104]: 7b639d21f1a4c262 +Block 0005 [105]: 8e9e1f91102ef9c1 +Block 0005 [106]: d2872fbb0f21f30b +Block 0005 [107]: 4a9983530a52d87c +Block 0005 [108]: 6880c281e0ebb884 +Block 0005 [109]: 54fd1bf55c2da8d2 +Block 0005 [110]: e0b9f3163ab63d65 +Block 0005 [111]: 783d94c97ea356ff +Block 0005 [112]: 69458be8db9536e9 +Block 0005 [113]: dbcadae9ee38190d +Block 0005 [114]: ab0eb15bddcbf967 +Block 0005 [115]: 2d46dfc393f333b5 +Block 0005 [116]: 88fc92a12c24f8d6 +Block 0005 [117]: 85565f4cd6be55d5 +Block 0005 [118]: 22d83c79b8b18a0f +Block 0005 [119]: 2e333918c4a9abab +Block 0005 [120]: 5c495fc0b97433cd +Block 0005 [121]: 96d29cc3808c059f +Block 0005 [122]: a4cbfb8614fc4478 +Block 0005 [123]: 5f768a83d326cbf9 +Block 0005 [124]: 9e304b29e1a6a0bf +Block 0005 [125]: c022c4ff7eb1ddd5 +Block 0005 [126]: 742349c9da4a5c73 +Block 0005 [127]: 82004e9101493542 +Block 0006 [ 0]: cae85a2ceb8efc02 +Block 0006 [ 1]: 6d93381a5d1d8d86 +Block 0006 [ 2]: 49434e31aab85464 +Block 0006 [ 3]: 596e450733089895 +Block 0006 [ 4]: 7ad5266fb35c9dc6 +Block 0006 [ 5]: f103661c0f84cdcb +Block 0006 [ 6]: bdbe945901233f82 +Block 0006 [ 7]: 7a4fc3fa729bf6a9 +Block 0006 [ 8]: 411d8ecffde9d0bc +Block 0006 [ 9]: 3f3879677ae88a93 +Block 0006 [ 10]: 691d2256d8c12414 +Block 0006 [ 11]: 05404821b655cbdf +Block 0006 [ 12]: dc4a287118bd7a42 +Block 0006 [ 13]: f885e8da9e48d9a4 +Block 0006 [ 14]: ee20557eeca2759a +Block 0006 [ 15]: 9b57b912699d14b8 +Block 0006 [ 16]: 9ec2b555224f5056 +Block 0006 [ 17]: 45f8f99df3076f67 +Block 0006 [ 18]: 75188b4f06146b33 +Block 0006 [ 19]: fa1940bb72d8bfa9 +Block 0006 [ 20]: ee77215b5a6461be +Block 0006 [ 21]: 130e5694a4a657a6 +Block 0006 [ 22]: b6d6240eba5cff31 +Block 0006 [ 23]: 6c263e648845c25d +Block 0006 [ 24]: 010f505761537c16 +Block 0006 [ 25]: 2bcd8e8d78174280 +Block 0006 [ 26]: 09cc439d6038920b +Block 0006 [ 27]: 102e6fcadf8fab25 +Block 0006 [ 28]: 865536493af63e34 +Block 0006 [ 29]: 92ba807f489592c3 +Block 0006 [ 30]: fa63293e6bf3450d +Block 0006 [ 31]: 0ab2b18e20af652f +Block 0006 [ 32]: c98d6491c993727d +Block 0006 [ 33]: b91f68d6f2a0935b +Block 0006 [ 34]: 874208aaac5ea660 +Block 0006 [ 35]: fad07e63f8cdcb80 +Block 0006 [ 36]: 05ac511fa2ad4e9c +Block 0006 [ 37]: 91e2f2bef739eb7a +Block 0006 [ 38]: fa418b08d22535b8 +Block 0006 [ 39]: f3bdafdb79902895 +Block 0006 [ 40]: 4278119248e1374c +Block 0006 [ 41]: 2c15a1216716e84f +Block 0006 [ 42]: 06dc9d2d38aa5d01 +Block 0006 [ 43]: 3305f0e0c4a6bf15 +Block 0006 [ 44]: ee6d12b7dae3c9c0 +Block 0006 [ 45]: 9ce6de35c567a77e +Block 0006 [ 46]: aed4cd9f12f9791c +Block 0006 [ 47]: f544023b7aff183e +Block 0006 [ 48]: e239dd3ca8ea9d3f +Block 0006 [ 49]: 17d93ae3f4526473 +Block 0006 [ 50]: 2856d2082a92b453 +Block 0006 [ 51]: 600c119b6d555873 +Block 0006 [ 52]: 3dafb34abaa13aac +Block 0006 [ 53]: 8b9143da50cd92ef +Block 0006 [ 54]: c768a76c43beb3a7 +Block 0006 [ 55]: b125fa82ae2ef4f4 +Block 0006 [ 56]: c4918a79cc02e24d +Block 0006 [ 57]: 4d08a1876b80affe +Block 0006 [ 58]: c98370851d92e969 +Block 0006 [ 59]: e3db1a89b7c66b82 +Block 0006 [ 60]: a5402a035e74f02c +Block 0006 [ 61]: 7daa9f89a675fa9c +Block 0006 [ 62]: 48704bf794e0da1a +Block 0006 [ 63]: 2680b08618fdf25a +Block 0006 [ 64]: 9d5549d923fa207b +Block 0006 [ 65]: 458f138ffc7aded3 +Block 0006 [ 66]: 3b37e756328b99c6 +Block 0006 [ 67]: 04276fee936e3fba +Block 0006 [ 68]: 13f801049a751510 +Block 0006 [ 69]: 4018cb14f41af756 +Block 0006 [ 70]: 8fa9339cd9a10e80 +Block 0006 [ 71]: 9f7398196bcdb698 +Block 0006 [ 72]: 380d6e5db36b1e76 +Block 0006 [ 73]: 48322289e5744636 +Block 0006 [ 74]: 63c91ee0e2c28cfa +Block 0006 [ 75]: 9bda8b855e06fa54 +Block 0006 [ 76]: d411082aeb0decae +Block 0006 [ 77]: 9a81183d5ceeb7a0 +Block 0006 [ 78]: 5b521ded3990d418 +Block 0006 [ 79]: 34e6f3c32e525b4b +Block 0006 [ 80]: 88409ccd5c81fc37 +Block 0006 [ 81]: b7653a0babcf04d4 +Block 0006 [ 82]: bae435aab4d286f3 +Block 0006 [ 83]: 43732419de6f6d91 +Block 0006 [ 84]: 66371d8bd924e722 +Block 0006 [ 85]: 8f523e494a2ec953 +Block 0006 [ 86]: c2bceda3ed49f414 +Block 0006 [ 87]: ed6a64fa5a07244d +Block 0006 [ 88]: 61a1cf88debb7a05 +Block 0006 [ 89]: 85fdf531bc2c9a43 +Block 0006 [ 90]: 8bf9f05cff8eac65 +Block 0006 [ 91]: 9b52f433a222ff47 +Block 0006 [ 92]: 4ac5392090073723 +Block 0006 [ 93]: 07c0e145df5c2c24 +Block 0006 [ 94]: 28be9407aee2d860 +Block 0006 [ 95]: 7a6bc60d1354c7f0 +Block 0006 [ 96]: c524527490c63e7f +Block 0006 [ 97]: 9f0811bbe6b6a454 +Block 0006 [ 98]: 3f04d9d829c49e04 +Block 0006 [ 99]: c208949b51e67461 +Block 0006 [100]: d9df595fcb66c187 +Block 0006 [101]: d83c0989a89578d2 +Block 0006 [102]: 53eb66cc61df5273 +Block 0006 [103]: 220b69c92abb99f6 +Block 0006 [104]: 0ee4c8c6bfb270b1 +Block 0006 [105]: c402b2a60b9525d6 +Block 0006 [106]: f5b846806988ea0b +Block 0006 [107]: 989420c88849ed91 +Block 0006 [108]: 2e423daea0cd45ab +Block 0006 [109]: fbc8cab48993dc1c +Block 0006 [110]: a81466b266d649d3 +Block 0006 [111]: a1cf72a6980c8dec +Block 0006 [112]: e024e1561c0c0e55 +Block 0006 [113]: f5fa1c1120a3590c +Block 0006 [114]: b518502c3c71694a +Block 0006 [115]: e2ab9448cf43d8c1 +Block 0006 [116]: ffae6e44db873d57 +Block 0006 [117]: 5a0f0a08fd6a38a1 +Block 0006 [118]: 40ddbed30d3d9031 +Block 0006 [119]: 8da59292ddbc0263 +Block 0006 [120]: 10b7aabec6c51827 +Block 0006 [121]: 07f794acdff97a71 +Block 0006 [122]: c59fdc4356994dde +Block 0006 [123]: 4f3307d87776106a +Block 0006 [124]: befd22b455bc0865 +Block 0006 [125]: 701121ca8c9515d3 +Block 0006 [126]: 1ef8d046d0b9a563 +Block 0006 [127]: 39b63a35b9efdb99 +Block 0007 [ 0]: aa96f9e08367c767 +Block 0007 [ 1]: 649f858166f87ed5 +Block 0007 [ 2]: e3a12f109cb8c3d9 +Block 0007 [ 3]: 8812c38cd64c7d94 +Block 0007 [ 4]: 3ad89cea6c879850 +Block 0007 [ 5]: 4ad57f58078de647 +Block 0007 [ 6]: 7c91531334d0d4dc +Block 0007 [ 7]: a0fb2ac5e8b87cff +Block 0007 [ 8]: 484649d71b9d1e43 +Block 0007 [ 9]: 094f7304f8ab4c8a +Block 0007 [ 10]: 6df95fa9e9a3f3f8 +Block 0007 [ 11]: e623e88cef2337d0 +Block 0007 [ 12]: e88d11f6d2ed8a35 +Block 0007 [ 13]: 4432c0595c14f75e +Block 0007 [ 14]: 258bd33ca56c8a19 +Block 0007 [ 15]: 6cc890994f178d88 +Block 0007 [ 16]: 38fd3ad0a8d8d873 +Block 0007 [ 17]: ff00206d6f40d106 +Block 0007 [ 18]: 40c1540922ad3309 +Block 0007 [ 19]: ac62185a61a98e5a +Block 0007 [ 20]: a52969af6f33c5f9 +Block 0007 [ 21]: 07a5ed928429d229 +Block 0007 [ 22]: c050a35ba5c589a6 +Block 0007 [ 23]: 8ca12828ceca882a +Block 0007 [ 24]: b68899a29a8a8409 +Block 0007 [ 25]: 909b0feb3da3956b +Block 0007 [ 26]: e6187a3fde82a3d9 +Block 0007 [ 27]: 2cfbaffc07547b7e +Block 0007 [ 28]: bc87b96179db239c +Block 0007 [ 29]: 15f6a8b3f195469e +Block 0007 [ 30]: 8ccc5a4bad93dd85 +Block 0007 [ 31]: f28389eab823c396 +Block 0007 [ 32]: 5c878a746f493847 +Block 0007 [ 33]: dc630599ea9a7a43 +Block 0007 [ 34]: be8f61cede964c9f +Block 0007 [ 35]: 0a0aed40cd05eeab +Block 0007 [ 36]: 7bee51bc54fa558c +Block 0007 [ 37]: cb4c7f727bb2b0e8 +Block 0007 [ 38]: 3e7f5a7844614578 +Block 0007 [ 39]: 820ef308cc67186e +Block 0007 [ 40]: 4ec109927b4043be +Block 0007 [ 41]: f9e4071f5f488bfb +Block 0007 [ 42]: a94607b9b6b215a0 +Block 0007 [ 43]: 28827d5daa40fc2f +Block 0007 [ 44]: 54f31e9dfab0345c +Block 0007 [ 45]: 887c56da37c6e314 +Block 0007 [ 46]: 1148953965073ce8 +Block 0007 [ 47]: c01ae7f35cd7c0ac +Block 0007 [ 48]: e776abf00711922d +Block 0007 [ 49]: 482b7bbafc9c6b93 +Block 0007 [ 50]: 97e6bf7879562de0 +Block 0007 [ 51]: 23d739237098aa07 +Block 0007 [ 52]: bdc9b4185d94ade7 +Block 0007 [ 53]: c63b815b15f2796b +Block 0007 [ 54]: 8553ac1b6a37be91 +Block 0007 [ 55]: 4fe3e5356b9ed266 +Block 0007 [ 56]: 6b2d180c55f275ec +Block 0007 [ 57]: d4fa4fb13209f598 +Block 0007 [ 58]: 5443aa93e28afa7b +Block 0007 [ 59]: 6b647752d66f57b7 +Block 0007 [ 60]: 9666cff649c996d5 +Block 0007 [ 61]: 7bd692c2d21a5047 +Block 0007 [ 62]: eb7c79815024a53b +Block 0007 [ 63]: 1d5196d7fb6f63a1 +Block 0007 [ 64]: ac79fa1a8b4dc7f8 +Block 0007 [ 65]: a8df09a098c0be84 +Block 0007 [ 66]: a0a54a9d55b0b259 +Block 0007 [ 67]: 9ac055953106d3f9 +Block 0007 [ 68]: cecfbbbd0a75b297 +Block 0007 [ 69]: d8f24f0b6bb69dc5 +Block 0007 [ 70]: 378ebbd76c6e3a90 +Block 0007 [ 71]: acd6e360894ee0a3 +Block 0007 [ 72]: ca2554b43fdb94fd +Block 0007 [ 73]: d3f9cde1e592226f +Block 0007 [ 74]: 0dbfb10f2f1efae9 +Block 0007 [ 75]: c71e2c6c043d4dd6 +Block 0007 [ 76]: 542b5306ef9f6d3d +Block 0007 [ 77]: 76edfa648496c329 +Block 0007 [ 78]: 250612884c4f0b85 +Block 0007 [ 79]: 6075f1ce858b87e6 +Block 0007 [ 80]: 104f24fd6dd36325 +Block 0007 [ 81]: e877c408d7628431 +Block 0007 [ 82]: bfde93ac7c25c4c3 +Block 0007 [ 83]: 5df386f7c1ec1683 +Block 0007 [ 84]: b71ecaddf313cf0e +Block 0007 [ 85]: a12579e2673e01d6 +Block 0007 [ 86]: 2ad19a0604cd5fe9 +Block 0007 [ 87]: 272ea01051cb6358 +Block 0007 [ 88]: a2d7685936a4ceb4 +Block 0007 [ 89]: b3e3249849509375 +Block 0007 [ 90]: 6b8203a8e0c94907 +Block 0007 [ 91]: 1d688c4a3f966428 +Block 0007 [ 92]: 2016b91b50f0f449 +Block 0007 [ 93]: 4d5e3e8b2fd48920 +Block 0007 [ 94]: 9ce0e560887cf9d3 +Block 0007 [ 95]: 8bf1c4fe311f6941 +Block 0007 [ 96]: eea996cf128b79fd +Block 0007 [ 97]: 87d2181997f90c9f +Block 0007 [ 98]: 2e6ff5336274c0b1 +Block 0007 [ 99]: 07bcbc51de405ed5 +Block 0007 [100]: 58528c033854e6c4 +Block 0007 [101]: 1e74bb2c415e259a +Block 0007 [102]: 81257185b52075ed +Block 0007 [103]: f69a6f103e6d90d9 +Block 0007 [104]: 2957fac276b0ecf3 +Block 0007 [105]: 73bf7c5536294f71 +Block 0007 [106]: 9a6275570ed2df1d +Block 0007 [107]: ccf4ba74c777f8ee +Block 0007 [108]: eaff28c6db196040 +Block 0007 [109]: d54fe5cf5874a657 +Block 0007 [110]: c93036465726f57f +Block 0007 [111]: b660605a42952da9 +Block 0007 [112]: d4ab99d7310068cd +Block 0007 [113]: 21f7fb4e319084ce +Block 0007 [114]: 519edf5d36936eb9 +Block 0007 [115]: b2c82d19c105271a +Block 0007 [116]: 718dfcd0eb783bc5 +Block 0007 [117]: b235745fdf50c280 +Block 0007 [118]: b7b333715a491c57 +Block 0007 [119]: 4d1d58bf981fc3ff +Block 0007 [120]: 09142593a9e31264 +Block 0007 [121]: 2ba15f73ae641cdb +Block 0007 [122]: 0dbedd4b8ad66694 +Block 0007 [123]: a2e08ce9a67e410d +Block 0007 [124]: 3c33479a6316a3d4 +Block 0007 [125]: b49dcf61cc1ee0f7 +Block 0007 [126]: 554dd48bd5a57ba3 +Block 0007 [127]: 7f62bde60a68421f +Block 0008 [ 0]: 92f6d6ca261fc8cf +Block 0008 [ 1]: 46231b8ea96831aa +Block 0008 [ 2]: d7b240430ce761e2 +Block 0008 [ 3]: 78bf44b216c84d15 +Block 0008 [ 4]: 233673b6dbc99394 +Block 0008 [ 5]: fef85a6245b2959f +Block 0008 [ 6]: b50611c7b12700a3 +Block 0008 [ 7]: b1d5b20c38fd698b +Block 0008 [ 8]: ed05bdf565eb1670 +Block 0008 [ 9]: c1bd5b774427ee83 +Block 0008 [ 10]: 662366030971d978 +Block 0008 [ 11]: a3672fc5e14d3835 +Block 0008 [ 12]: 396f9f9e5fdc007d +Block 0008 [ 13]: 9c2af96d848a18ec +Block 0008 [ 14]: 17753b738206411c +Block 0008 [ 15]: 1173420c24118788 +Block 0008 [ 16]: 0a6a9f243be7ee99 +Block 0008 [ 17]: 2b7e600ca9aaa924 +Block 0008 [ 18]: c0766db77b8640b6 +Block 0008 [ 19]: 7d32c2e8b617fb00 +Block 0008 [ 20]: 55aeb0119138c0d4 +Block 0008 [ 21]: 0da720da65b9f532 +Block 0008 [ 22]: 9ebd62381d2d5491 +Block 0008 [ 23]: 79cb72a785dde658 +Block 0008 [ 24]: e76297c84f559e80 +Block 0008 [ 25]: a2b36a54e16f0260 +Block 0008 [ 26]: 3c6f3f453a1bd215 +Block 0008 [ 27]: 74330ed8f77ec3f1 +Block 0008 [ 28]: 331dde512c425385 +Block 0008 [ 29]: 9fc0c6ccb30db6e6 +Block 0008 [ 30]: 774aafaf5dcc91b5 +Block 0008 [ 31]: 9b05e8f3b4a8189f +Block 0008 [ 32]: 82e0b0bdd1398b73 +Block 0008 [ 33]: 0cb016fab2a01997 +Block 0008 [ 34]: 3be4263af97114bc +Block 0008 [ 35]: 0d55775808650824 +Block 0008 [ 36]: 8105fea6f9a6deb4 +Block 0008 [ 37]: e6a69e43428e0116 +Block 0008 [ 38]: d1dae82531d7f6a0 +Block 0008 [ 39]: 75f3152168bcef9b +Block 0008 [ 40]: 5324b2ae324a2354 +Block 0008 [ 41]: 33ed57275072eb06 +Block 0008 [ 42]: 7e9e632411ee708d +Block 0008 [ 43]: 9bcce35940c7159c +Block 0008 [ 44]: f5af40b874b2a402 +Block 0008 [ 45]: 110c586d5e1c1188 +Block 0008 [ 46]: 978d2662424a4bac +Block 0008 [ 47]: a656e414d797b095 +Block 0008 [ 48]: 0970f7c8c6075dec +Block 0008 [ 49]: 6ff3e812a7f1aa46 +Block 0008 [ 50]: eee42ac2dbcb5760 +Block 0008 [ 51]: 4e8489009f2a83d5 +Block 0008 [ 52]: fea08093f6f4ed51 +Block 0008 [ 53]: 352247f19ec0e53f +Block 0008 [ 54]: 82d807f61412e2b5 +Block 0008 [ 55]: 3276543fce1e8ba9 +Block 0008 [ 56]: 305629c5c3b64aed +Block 0008 [ 57]: 5b6f8f456b643373 +Block 0008 [ 58]: 9d0f9c2a4c8f060b +Block 0008 [ 59]: 438294ae3de753ce +Block 0008 [ 60]: b0a6e33302a9deff +Block 0008 [ 61]: b10592023513b0b9 +Block 0008 [ 62]: f8c79b71c102905b +Block 0008 [ 63]: 43b4413873a270ba +Block 0008 [ 64]: d34f5c5e0998a1f8 +Block 0008 [ 65]: 19f5df3546045ba8 +Block 0008 [ 66]: dcece1ca7a0dcd19 +Block 0008 [ 67]: bc53d2ae75a68004 +Block 0008 [ 68]: 54f7e9cdaa7e569e +Block 0008 [ 69]: 94aba4e907e3ad17 +Block 0008 [ 70]: 8e09815df38d82ad +Block 0008 [ 71]: 52ebb7d86386430e +Block 0008 [ 72]: adfa72bf58111b6f +Block 0008 [ 73]: 9a97a34d02f35c55 +Block 0008 [ 74]: 88a5f560607896e6 +Block 0008 [ 75]: 30e3deba10a0e2c7 +Block 0008 [ 76]: a88c9001142218f0 +Block 0008 [ 77]: 34443da1afe34ad5 +Block 0008 [ 78]: dff9a8672d9c3c16 +Block 0008 [ 79]: 4c922e79b39902a0 +Block 0008 [ 80]: 8c87abe539b79af1 +Block 0008 [ 81]: c27dd77ff32e7546 +Block 0008 [ 82]: 32394933c3cf5e0c +Block 0008 [ 83]: 579cd4a121e76b03 +Block 0008 [ 84]: d0ddc746442ea314 +Block 0008 [ 85]: 268e280ea0775645 +Block 0008 [ 86]: 255c28d63c7288b4 +Block 0008 [ 87]: 220aba41a338f9e4 +Block 0008 [ 88]: fff7450697217135 +Block 0008 [ 89]: 3c5ef84ee9febcfc +Block 0008 [ 90]: ca1fe3294dc518c7 +Block 0008 [ 91]: a562721d4f6bbf01 +Block 0008 [ 92]: fc33d7633e7dcc7d +Block 0008 [ 93]: cfb8c4bbd4953e6e +Block 0008 [ 94]: 01bbf2c52cac42c2 +Block 0008 [ 95]: b65219c09fd95934 +Block 0008 [ 96]: e96d416d0ccab83d +Block 0008 [ 97]: c4f88891388c48ee +Block 0008 [ 98]: d6a10504939a858e +Block 0008 [ 99]: 713907c339464081 +Block 0008 [100]: 6e1fb4478d2ce08c +Block 0008 [101]: 834969ca83993eef +Block 0008 [102]: fd91b73ae90795e0 +Block 0008 [103]: d9cfa18953aea3f9 +Block 0008 [104]: 1eb6a19221268e59 +Block 0008 [105]: c0ad63c783ac8007 +Block 0008 [106]: 1a2d426c6dc70c86 +Block 0008 [107]: 26d59d50f8388ec8 +Block 0008 [108]: a80437af7437599c +Block 0008 [109]: 6969260f334d5d82 +Block 0008 [110]: 00dfd4895631ef90 +Block 0008 [111]: dfd0efe509122127 +Block 0008 [112]: b52af91406aff929 +Block 0008 [113]: adb32b6ab6fdcbd7 +Block 0008 [114]: 3e89d6ace903a5d8 +Block 0008 [115]: d11fd78a1445e270 +Block 0008 [116]: bdadee3624fbefd4 +Block 0008 [117]: 424ff6da14872281 +Block 0008 [118]: 6dd4cf79eaa5797b +Block 0008 [119]: f176c7ecc2872fb3 +Block 0008 [120]: a79bfc8746f264b9 +Block 0008 [121]: 9625eb7aa57c52eb +Block 0008 [122]: ac854065c1dc3575 +Block 0008 [123]: cf4b92c820e2d280 +Block 0008 [124]: 3c5b29c8ab4c7d21 +Block 0008 [125]: 81a16e1d57a4a742 +Block 0008 [126]: 0a59951bb4a5350b +Block 0008 [127]: 5afbe0d24e05c8a6 +Block 0009 [ 0]: 861d303a02999e8e +Block 0009 [ 1]: 39bff09c822fdbc0 +Block 0009 [ 2]: 622b81abdc3f4a32 +Block 0009 [ 3]: ab9d09e5dfd64194 +Block 0009 [ 4]: 326a874cec237f12 +Block 0009 [ 5]: 8fb67fab8060e98c +Block 0009 [ 6]: d2d74a1c2f83d3d3 +Block 0009 [ 7]: 2f55faf116707ea5 +Block 0009 [ 8]: 79da12d2f0c3e61a +Block 0009 [ 9]: 891d23c5a9412f39 +Block 0009 [ 10]: 6cdd30456923f037 +Block 0009 [ 11]: 14d3ce76187b9c60 +Block 0009 [ 12]: 936f98d58d2218f3 +Block 0009 [ 13]: 628ee9e7c16b3580 +Block 0009 [ 14]: 71f65d809281dd0b +Block 0009 [ 15]: 775d67d622193f7e +Block 0009 [ 16]: 4a22de00a7c3b0c0 +Block 0009 [ 17]: b0ff5e3db98eeed5 +Block 0009 [ 18]: c4ef45496b302eb2 +Block 0009 [ 19]: 4a2c2b6b8a87d99c +Block 0009 [ 20]: cc850382694f8c0e +Block 0009 [ 21]: c022ab6a59ba02b1 +Block 0009 [ 22]: 2b350ffab1420e6f +Block 0009 [ 23]: 97c40487830a1ddd +Block 0009 [ 24]: eb2c092a9a8a5a9a +Block 0009 [ 25]: 6fef1e9dbee32d55 +Block 0009 [ 26]: b9da76a743ce6df8 +Block 0009 [ 27]: 80d9afd64c6c21b0 +Block 0009 [ 28]: 8956b45ae00aa70b +Block 0009 [ 29]: 6802ece7ab96c121 +Block 0009 [ 30]: 00ee32a4a2ca9d90 +Block 0009 [ 31]: 9f0e1f59571a3276 +Block 0009 [ 32]: 8ac3d2cf84ebb6b5 +Block 0009 [ 33]: e2e94ddfeaac1f8b +Block 0009 [ 34]: f9a025b84c989037 +Block 0009 [ 35]: c1f33f3cba4c0ad1 +Block 0009 [ 36]: 198d388d3756c187 +Block 0009 [ 37]: 431ca049992cd38e +Block 0009 [ 38]: d468ada99b30f701 +Block 0009 [ 39]: 2fcd5b0b5dabc78f +Block 0009 [ 40]: 649f86945f38593a +Block 0009 [ 41]: 213ee790f61abd50 +Block 0009 [ 42]: 39b0cb1110006813 +Block 0009 [ 43]: b5703b76384430ad +Block 0009 [ 44]: 3eaeebeb30fcc9f9 +Block 0009 [ 45]: 9a5dd247256ef2c8 +Block 0009 [ 46]: b9985bc60977cda1 +Block 0009 [ 47]: 62cdd6be32a5d84c +Block 0009 [ 48]: af8858bf60bb22fb +Block 0009 [ 49]: 7f5f239c2b2f7ca0 +Block 0009 [ 50]: b71a7a67cf14960f +Block 0009 [ 51]: 7911708c3a71d21b +Block 0009 [ 52]: 4408de99594ba448 +Block 0009 [ 53]: 423fc44df0684f3e +Block 0009 [ 54]: 2e0c36453dd361a0 +Block 0009 [ 55]: 2d7c96f01c7fd189 +Block 0009 [ 56]: ddfdd016b5a9cebe +Block 0009 [ 57]: 2fd26d237640f4e6 +Block 0009 [ 58]: 47f5f2444af6c7cf +Block 0009 [ 59]: 0d3b91052b41c61e +Block 0009 [ 60]: d62f462898904aeb +Block 0009 [ 61]: 4b470aba5f110e6a +Block 0009 [ 62]: ffbe1984153237fb +Block 0009 [ 63]: f9df2c0fcd574baf +Block 0009 [ 64]: 08a6531cd251adfb +Block 0009 [ 65]: 1decd865fc6e0472 +Block 0009 [ 66]: bce66f9ea598171a +Block 0009 [ 67]: f5f88f984a85ee08 +Block 0009 [ 68]: feb94e6b9343480f +Block 0009 [ 69]: 2d611326d643c179 +Block 0009 [ 70]: 40a46d7c231ab873 +Block 0009 [ 71]: 4d406e17273b6c99 +Block 0009 [ 72]: 6b28c89629bcfbb4 +Block 0009 [ 73]: a748f1788d8a8a5c +Block 0009 [ 74]: ffb3b25cb52ea498 +Block 0009 [ 75]: 44817bdbe66a4938 +Block 0009 [ 76]: 9d80db4fc1cddbd9 +Block 0009 [ 77]: a1c9ebbad8bdc094 +Block 0009 [ 78]: b2ce16610b569c06 +Block 0009 [ 79]: e13ef6abd5b78468 +Block 0009 [ 80]: 3593f789c862423b +Block 0009 [ 81]: 756c40de660aab62 +Block 0009 [ 82]: 447a830e3f02dc0b +Block 0009 [ 83]: 9b2816be8209816b +Block 0009 [ 84]: 1a2e31d8cd87e262 +Block 0009 [ 85]: c162dfea41dfbeca +Block 0009 [ 86]: f1f5ae63bf8992f0 +Block 0009 [ 87]: 163c3c7ac5d4a7b0 +Block 0009 [ 88]: 5cc9ba44845532c8 +Block 0009 [ 89]: cc991c2f782193f6 +Block 0009 [ 90]: a657bcd3365b522e +Block 0009 [ 91]: 04a272455d7de47f +Block 0009 [ 92]: 4de4b0911e7d01b6 +Block 0009 [ 93]: 2a64bfd12cef0747 +Block 0009 [ 94]: 4f870d2fe4aa5fc6 +Block 0009 [ 95]: ee8b0743542e9751 +Block 0009 [ 96]: cd64ea70a570d282 +Block 0009 [ 97]: c4ab20bb416c6943 +Block 0009 [ 98]: 841bb1199cb466cd +Block 0009 [ 99]: f60f32b0b68e4f2d +Block 0009 [100]: 1a71dc489bd5c3e1 +Block 0009 [101]: c53b31169829e4bd +Block 0009 [102]: cd2c064dd76b1865 +Block 0009 [103]: 2b4a556a60e999e9 +Block 0009 [104]: 9909c2b0a72e2fa9 +Block 0009 [105]: eae2c80121344389 +Block 0009 [106]: d69778d04e1a09af +Block 0009 [107]: 32f17b7202372cc1 +Block 0009 [108]: 00790b7928166164 +Block 0009 [109]: a3fb0db8a27f0a52 +Block 0009 [110]: 1fd50e78d45abf18 +Block 0009 [111]: ace28638e7964859 +Block 0009 [112]: 365d9776d1d13dd4 +Block 0009 [113]: 466a93251e133b44 +Block 0009 [114]: dba49ff0b3b9fbfa +Block 0009 [115]: 6ea36c0808696c7b +Block 0009 [116]: 19c4e2fe051d08f7 +Block 0009 [117]: d0f9c63843224913 +Block 0009 [118]: ebc7e793b642d70f +Block 0009 [119]: 6de8c83fe37b7836 +Block 0009 [120]: b2b2af5741a01d6a +Block 0009 [121]: 31717aa7407194ac +Block 0009 [122]: eb34348ac46cb928 +Block 0009 [123]: 95e2142661045702 +Block 0009 [124]: 82892ec15063676a +Block 0009 [125]: 0a93ffd5635a838c +Block 0009 [126]: f5054bb7e05f8478 +Block 0009 [127]: f0e32a040eb8d62c +Block 0010 [ 0]: 110297f463d4717e +Block 0010 [ 1]: 3828eb6209d28c20 +Block 0010 [ 2]: 35c1584b1757b98d +Block 0010 [ 3]: 771c3556525c54af +Block 0010 [ 4]: 5226e0fa8b5a97be +Block 0010 [ 5]: d4404af7854f4531 +Block 0010 [ 6]: e91725de137e3987 +Block 0010 [ 7]: d1a77075a0e6bb9d +Block 0010 [ 8]: cd2f8e8fb6d0901b +Block 0010 [ 9]: 7e246e279c85e964 +Block 0010 [ 10]: 0da2a382740fa23f +Block 0010 [ 11]: ddbe4942cc122308 +Block 0010 [ 12]: 7a3d92ac09975af1 +Block 0010 [ 13]: 8d210d589a07defd +Block 0010 [ 14]: d12322eadbed1288 +Block 0010 [ 15]: 626edcd2444b7c78 +Block 0010 [ 16]: e10856c39889ccba +Block 0010 [ 17]: 1e7ce7e9b0d7f793 +Block 0010 [ 18]: 03022c6f8619397c +Block 0010 [ 19]: 61cadf5c6c612d5f +Block 0010 [ 20]: 266a8188eb214c7a +Block 0010 [ 21]: 8f91d5c0bf6f3bbd +Block 0010 [ 22]: 10da2e0b78c9e301 +Block 0010 [ 23]: 46f4a4577e3c3755 +Block 0010 [ 24]: 099b19a75a149e97 +Block 0010 [ 25]: f977352167b9048f +Block 0010 [ 26]: ed87004d3f744f8e +Block 0010 [ 27]: 8980201a571eeaac +Block 0010 [ 28]: f8775f7233d82ef5 +Block 0010 [ 29]: 81ad57684a96a61c +Block 0010 [ 30]: fa0e5b145e36e1c0 +Block 0010 [ 31]: 5da6470b7e51be0a +Block 0010 [ 32]: 5cd1fe96302b8b27 +Block 0010 [ 33]: d38b9cf01a52f2f8 +Block 0010 [ 34]: fa7bfeb316d67b52 +Block 0010 [ 35]: 5173a803996cad74 +Block 0010 [ 36]: 37a46313dc93e2ff +Block 0010 [ 37]: 044735689012d83d +Block 0010 [ 38]: 99cd36a5787006e7 +Block 0010 [ 39]: e2aa7201b180dc9c +Block 0010 [ 40]: 384f6cbd27e96f5d +Block 0010 [ 41]: 33e0f9f86a59665a +Block 0010 [ 42]: 17991cc270086db8 +Block 0010 [ 43]: cf93f6aa37ab95d2 +Block 0010 [ 44]: 1f2728468af489c9 +Block 0010 [ 45]: 804443ff55476398 +Block 0010 [ 46]: 5b7ed05930a6c76c +Block 0010 [ 47]: d97b71273879328a +Block 0010 [ 48]: e6950700c420861d +Block 0010 [ 49]: 2efcb94c032a0a7f +Block 0010 [ 50]: 7f4cf4eb22135d4d +Block 0010 [ 51]: e3b10b4195f7f945 +Block 0010 [ 52]: 006bb903385536a4 +Block 0010 [ 53]: 77ca0b9a29c058db +Block 0010 [ 54]: 9d8a471366bd13cb +Block 0010 [ 55]: 40d9cf15a3986f5f +Block 0010 [ 56]: 50a080ed23996ea3 +Block 0010 [ 57]: 11e420bea0c08fb7 +Block 0010 [ 58]: 2e85b9ddad230198 +Block 0010 [ 59]: f50b554c8bfbb3b7 +Block 0010 [ 60]: 08a7d72d8aa342c6 +Block 0010 [ 61]: 6cc80e83f2c15811 +Block 0010 [ 62]: b3a6e194a6fda8c0 +Block 0010 [ 63]: d7f74e7aa4f4d630 +Block 0010 [ 64]: 2df488549fb0f8dd +Block 0010 [ 65]: 9a5bc68d4474cd5c +Block 0010 [ 66]: d41aca980d1f2603 +Block 0010 [ 67]: df6552b8d6654437 +Block 0010 [ 68]: 983a9339b96cb1b8 +Block 0010 [ 69]: e3071ef62bf10360 +Block 0010 [ 70]: 3eaaa277b6d1bafc +Block 0010 [ 71]: 172345b0d9558fed +Block 0010 [ 72]: 97319c89c731a02c +Block 0010 [ 73]: 8ff07e264876973f +Block 0010 [ 74]: 01c32c0c0d654104 +Block 0010 [ 75]: 5f53661a1ee1b4c6 +Block 0010 [ 76]: a9c3da1ad696a16a +Block 0010 [ 77]: 30fe71394a311283 +Block 0010 [ 78]: 0f430ad1dea89c48 +Block 0010 [ 79]: fff048ac83a64f90 +Block 0010 [ 80]: c972527bf676f382 +Block 0010 [ 81]: ecb9a1ecb1be64c4 +Block 0010 [ 82]: 9c13e375c2ab34fd +Block 0010 [ 83]: 075bc62ae5a021b5 +Block 0010 [ 84]: 3f9b3f22818dd97d +Block 0010 [ 85]: 3eae713ae75fafaa +Block 0010 [ 86]: def4641c47a181f5 +Block 0010 [ 87]: 2ad7ac99f83eb6ef +Block 0010 [ 88]: 8d9bf96f4262d9a1 +Block 0010 [ 89]: 4bf1edb2dc479604 +Block 0010 [ 90]: 406c2f505dabf0a7 +Block 0010 [ 91]: 0776ad101c034fab +Block 0010 [ 92]: 2857c04f873dafca +Block 0010 [ 93]: a552f1e8ffa8ec48 +Block 0010 [ 94]: cd4ac3951c1c7ac8 +Block 0010 [ 95]: 991a387dc304b4d3 +Block 0010 [ 96]: 4a62ae26332cf695 +Block 0010 [ 97]: 99989a5b0ec7afe5 +Block 0010 [ 98]: ab2b76e0fb2e34dd +Block 0010 [ 99]: d3d09e0fa3dc5e77 +Block 0010 [100]: 7414b924a1f4f9fd +Block 0010 [101]: 01081a97e3667c3e +Block 0010 [102]: a879d8ae57621b88 +Block 0010 [103]: b252f12b3a3992d9 +Block 0010 [104]: b239a13aec939a49 +Block 0010 [105]: 029148ded8d39810 +Block 0010 [106]: 0f09288a2e1ad2b8 +Block 0010 [107]: f289a0a95b9d76fc +Block 0010 [108]: bc151f281383fb02 +Block 0010 [109]: f3bfe6a2939a9c5f +Block 0010 [110]: 4951bd53b83739ea +Block 0010 [111]: 20062e7ccefa3c7f +Block 0010 [112]: 20049fbcca6e1276 +Block 0010 [113]: 6554bd2ba666dbdf +Block 0010 [114]: b84b84abc76ff06e +Block 0010 [115]: 2816898ed2d362c1 +Block 0010 [116]: 2cc5d0406a9b8a30 +Block 0010 [117]: 5cb404b772ec2e72 +Block 0010 [118]: 30ff618b95dd0ca4 +Block 0010 [119]: 197e19f88bbb4c54 +Block 0010 [120]: 8efd88b018876d72 +Block 0010 [121]: d16ce6880bb48af0 +Block 0010 [122]: 8279d270c5ae1b3b +Block 0010 [123]: 6f23fa0e7ede09c2 +Block 0010 [124]: dd73f98a2379858e +Block 0010 [125]: 6fe85bbab6b21a5a +Block 0010 [126]: c05d149be2380f54 +Block 0010 [127]: d1ae698a35b02155 +Block 0011 [ 0]: bf619ba9cd33f95c +Block 0011 [ 1]: 0d2ac712c43a258a +Block 0011 [ 2]: d9dd4ee0d026984d +Block 0011 [ 3]: 646f79b969d84848 +Block 0011 [ 4]: 6d70dafdc7603cca +Block 0011 [ 5]: f12d6b70c293bef8 +Block 0011 [ 6]: 489e389aa5a7c24a +Block 0011 [ 7]: 086272b565165ee5 +Block 0011 [ 8]: c9f4fb5a39048c4d +Block 0011 [ 9]: a6f603aa70d9e5d2 +Block 0011 [ 10]: 3bf25a0bb1f7ac38 +Block 0011 [ 11]: 14ddd25c2d5e3596 +Block 0011 [ 12]: faa4e84c465394d8 +Block 0011 [ 13]: f8ef145f6844f82f +Block 0011 [ 14]: f9549b745c33d239 +Block 0011 [ 15]: b396a5075f3d4296 +Block 0011 [ 16]: 3d469a0b36f79da8 +Block 0011 [ 17]: d95f7a181fc9efbc +Block 0011 [ 18]: acf4136c4277bd85 +Block 0011 [ 19]: d77857338a5e203c +Block 0011 [ 20]: 63bf886f0d376e4d +Block 0011 [ 21]: 4afc35e28228b78b +Block 0011 [ 22]: 88ce07494723a779 +Block 0011 [ 23]: ec0a4672f81e2455 +Block 0011 [ 24]: 9b274d635cc92fbf +Block 0011 [ 25]: 8e6d72ea1532273a +Block 0011 [ 26]: b788d44eec8ed38f +Block 0011 [ 27]: ca0b197b4dc4c8e0 +Block 0011 [ 28]: 092230b70e1e4a42 +Block 0011 [ 29]: 5d625d9ac17bde09 +Block 0011 [ 30]: b93db814b66e4291 +Block 0011 [ 31]: 6f52e5601eb894ab +Block 0011 [ 32]: 0b77390efee15e79 +Block 0011 [ 33]: 82f6b168a63fe7f1 +Block 0011 [ 34]: 928a76a455f889d7 +Block 0011 [ 35]: 45c46061f47474d6 +Block 0011 [ 36]: d4065cb48f92aa76 +Block 0011 [ 37]: bf6f8c1b76f13500 +Block 0011 [ 38]: 57e3cbff98403ac9 +Block 0011 [ 39]: 4eb93a3eb96f1bdc +Block 0011 [ 40]: a0d9dac64a63e011 +Block 0011 [ 41]: 80cf457a61239ce5 +Block 0011 [ 42]: 12cbdf7f7b345bdd +Block 0011 [ 43]: 558fca889cbfb6a8 +Block 0011 [ 44]: ada62c7467f789a2 +Block 0011 [ 45]: 847e4323ebbe551a +Block 0011 [ 46]: d86b0fb2d0a54c81 +Block 0011 [ 47]: 2f9f78ce91656503 +Block 0011 [ 48]: 9224c2d9e15272ab +Block 0011 [ 49]: 57f39cdd4dbfbb37 +Block 0011 [ 50]: 5ac28368fd6414e2 +Block 0011 [ 51]: 7fea8df3452d5ff6 +Block 0011 [ 52]: 0ddb457c7ed1693f +Block 0011 [ 53]: d15eafd50e4839e6 +Block 0011 [ 54]: 70b74f4ec868eeed +Block 0011 [ 55]: 1f50fbb8eadedc4d +Block 0011 [ 56]: 2bff0b825beecb9a +Block 0011 [ 57]: f7e23f0fbf8fb5e0 +Block 0011 [ 58]: 169fc6a7da58e7c6 +Block 0011 [ 59]: c759c0fe25fdca4e +Block 0011 [ 60]: a193c01631706ff5 +Block 0011 [ 61]: 8425925525cfb70d +Block 0011 [ 62]: e36d59fa28e117e3 +Block 0011 [ 63]: 021f51f6e924bd1c +Block 0011 [ 64]: 88d912c9de684d7c +Block 0011 [ 65]: b08faaf01463fa22 +Block 0011 [ 66]: dfca8cec70dd1005 +Block 0011 [ 67]: 4518e831507f33a4 +Block 0011 [ 68]: 7265bcabed2a4d1d +Block 0011 [ 69]: 56f8f9a0f20afb0e +Block 0011 [ 70]: 9466d5828edade85 +Block 0011 [ 71]: 4a5990ef5fe1a0a1 +Block 0011 [ 72]: 9e8d71c58adf1850 +Block 0011 [ 73]: 2fce135d3f208a11 +Block 0011 [ 74]: eb02eb1a0e77cf4e +Block 0011 [ 75]: 83b8334bd764ab5f +Block 0011 [ 76]: fc98743a215282e4 +Block 0011 [ 77]: f628862aeb37e3cf +Block 0011 [ 78]: 0e285752ea8b49f6 +Block 0011 [ 79]: 45137ed52e87fc71 +Block 0011 [ 80]: f16667bed93b16e1 +Block 0011 [ 81]: 19ea703c42ba921a +Block 0011 [ 82]: e8fec569d85d1da5 +Block 0011 [ 83]: c582602a4902e2ef +Block 0011 [ 84]: 5118a85f2f85b6d2 +Block 0011 [ 85]: 5254a0abbf3e1bf6 +Block 0011 [ 86]: 864d04b8aeafaba2 +Block 0011 [ 87]: a9157728d3eace94 +Block 0011 [ 88]: 929fff7cd5c8912f +Block 0011 [ 89]: d6b565cdcbfe97a2 +Block 0011 [ 90]: f1cac3f87b2d83b1 +Block 0011 [ 91]: 391784898501b826 +Block 0011 [ 92]: 963fd42330391bb7 +Block 0011 [ 93]: 22f53f44ba19f81b +Block 0011 [ 94]: 849a3c40e7f35a6a +Block 0011 [ 95]: 2621c1353cd8fa5a +Block 0011 [ 96]: bc5b32f805e90323 +Block 0011 [ 97]: 48c9c41acfa6534d +Block 0011 [ 98]: 47e2c3054fe2863f +Block 0011 [ 99]: 61275e63f8f2c157 +Block 0011 [100]: 49cdff8f529dbe70 +Block 0011 [101]: 172135c6ebd89118 +Block 0011 [102]: 94015490366fd71a +Block 0011 [103]: 9e0975de7ab4c2ba +Block 0011 [104]: f87576ecd5896a97 +Block 0011 [105]: 3d241dfeb9eff1bf +Block 0011 [106]: 87ced3201be31c9b +Block 0011 [107]: a1b205a82e4a060b +Block 0011 [108]: 225d1ce3c11da16c +Block 0011 [109]: c07dfe2ce4aabd03 +Block 0011 [110]: 1434ee5041b82175 +Block 0011 [111]: 1c4e1b1c7334a509 +Block 0011 [112]: 60c151bfa5932a93 +Block 0011 [113]: 84d44077ee4c8253 +Block 0011 [114]: 6a4b8d6cd076e254 +Block 0011 [115]: df882989a57a6b51 +Block 0011 [116]: bbe63591d7ab0e4e +Block 0011 [117]: bb46e03a39c54fea +Block 0011 [118]: 14198e736ed8209f +Block 0011 [119]: 73a82d993ddbf317 +Block 0011 [120]: 81be44f6bb106619 +Block 0011 [121]: cb0a5d74cc13275f +Block 0011 [122]: 8abc8fb70c4dc792 +Block 0011 [123]: d47faaceb91155c7 +Block 0011 [124]: 95aa009ba3ac5d98 +Block 0011 [125]: 6d25fc5c774bec47 +Block 0011 [126]: c72751d51103cd58 +Block 0011 [127]: 726aba80485a4db1 +Block 0012 [ 0]: 73ce723169e527f6 +Block 0012 [ 1]: 308bd4738f7976a1 +Block 0012 [ 2]: c355b356d91f24d6 +Block 0012 [ 3]: 09ed9df50d935a67 +Block 0012 [ 4]: 717c7ff7c944689d +Block 0012 [ 5]: 6c5820e5948a5959 +Block 0012 [ 6]: a2cba3426fdeedcd +Block 0012 [ 7]: 0c4f78f7fe2e775f +Block 0012 [ 8]: 198c071d5b3f64ff +Block 0012 [ 9]: caf9aad5d3de5a15 +Block 0012 [ 10]: 0a9d3484d272f3ca +Block 0012 [ 11]: 3f82a2d990cce3c6 +Block 0012 [ 12]: f927453eee587c23 +Block 0012 [ 13]: 5a36887bf9b00b27 +Block 0012 [ 14]: f88bbe6c5bc73f5b +Block 0012 [ 15]: 52da3b1769a613eb +Block 0012 [ 16]: 39840c2892de1cdf +Block 0012 [ 17]: 4b805e1770f4777f +Block 0012 [ 18]: ae59fcacf8ec62a5 +Block 0012 [ 19]: aed76584ef1be382 +Block 0012 [ 20]: 477e1854261d29ae +Block 0012 [ 21]: 00c04e48d1d6438d +Block 0012 [ 22]: e43e846dfa10e2c7 +Block 0012 [ 23]: 54dc1d90c10beec6 +Block 0012 [ 24]: 31eac75291e4f891 +Block 0012 [ 25]: eeabb2fb46c0e7fa +Block 0012 [ 26]: be72d2a02c40e76f +Block 0012 [ 27]: 2c223a1d489e3e53 +Block 0012 [ 28]: 1b842e1c231e577f +Block 0012 [ 29]: 5a560f0f2e6af886 +Block 0012 [ 30]: 658dbf3060d2ed46 +Block 0012 [ 31]: cd4efafc6edde8a3 +Block 0012 [ 32]: 5218beab24ad8820 +Block 0012 [ 33]: fc844dc6d30edc70 +Block 0012 [ 34]: c03e32282b08b833 +Block 0012 [ 35]: f6526556c4c2bc8c +Block 0012 [ 36]: eef40a4c8d3246dc +Block 0012 [ 37]: d395cdddd5dcaded +Block 0012 [ 38]: 5d141c705958116f +Block 0012 [ 39]: bf6eb3d80d70a6d4 +Block 0012 [ 40]: becea1cfbd53daee +Block 0012 [ 41]: 1ffca512f562d1f7 +Block 0012 [ 42]: e8bc5235bf1f0011 +Block 0012 [ 43]: 3ee59d7fef681870 +Block 0012 [ 44]: 8316e6c7ec8d86ac +Block 0012 [ 45]: 00cc2bcfd342063e +Block 0012 [ 46]: 97abc50fdefb7beb +Block 0012 [ 47]: 7c4a3fd61c121c41 +Block 0012 [ 48]: 7eef15597ff45a1e +Block 0012 [ 49]: 2635654685e51a2a +Block 0012 [ 50]: 196d80c0220cf5e9 +Block 0012 [ 51]: 907d81d5db058770 +Block 0012 [ 52]: 5db1d4866657cca1 +Block 0012 [ 53]: 494307edf2063396 +Block 0012 [ 54]: dc19b63a79b917d0 +Block 0012 [ 55]: b9d18ad8d4260be8 +Block 0012 [ 56]: dab1095a4b004abe +Block 0012 [ 57]: e6afd37d77d008ef +Block 0012 [ 58]: 854726fc8461ca89 +Block 0012 [ 59]: a8a69473c59d37c3 +Block 0012 [ 60]: f55724283be2330b +Block 0012 [ 61]: 2dcfd5ea5ad3636a +Block 0012 [ 62]: f3848e715bf6e61b +Block 0012 [ 63]: be4d839c33f14bfd +Block 0012 [ 64]: 397abb336ac92022 +Block 0012 [ 65]: f20cee19e5e388fc +Block 0012 [ 66]: 6edd6d3d0d2323ab +Block 0012 [ 67]: e3b6c5f7c944af17 +Block 0012 [ 68]: 990fcad01d4052f0 +Block 0012 [ 69]: 629c06d809f81f90 +Block 0012 [ 70]: 5c4a5071655f899f +Block 0012 [ 71]: 40d54256be550482 +Block 0012 [ 72]: 4fe1f617c9c672b3 +Block 0012 [ 73]: 3af9e965e25ee169 +Block 0012 [ 74]: 93246b2adad69d87 +Block 0012 [ 75]: 3eb7245c60abfa3a +Block 0012 [ 76]: 411c2a17452fc250 +Block 0012 [ 77]: 5d2af0c77b854c04 +Block 0012 [ 78]: 11218a31a7d3960b +Block 0012 [ 79]: 79b6f5e1d69a33b6 +Block 0012 [ 80]: 81fbaab092b14bf3 +Block 0012 [ 81]: 9f40f1f5344bc391 +Block 0012 [ 82]: 52fd68c595c511d0 +Block 0012 [ 83]: ec28704fb787cbe2 +Block 0012 [ 84]: 2ef764aef58346ae +Block 0012 [ 85]: e76767105c7b8af2 +Block 0012 [ 86]: b7ea621da02c9d03 +Block 0012 [ 87]: 3086a0391498b2e3 +Block 0012 [ 88]: 252329e57c6144c0 +Block 0012 [ 89]: e0d034657ad118b2 +Block 0012 [ 90]: 3d81206435e4cbae +Block 0012 [ 91]: 3b3ca2059dc97c30 +Block 0012 [ 92]: aabcdf9fb844df47 +Block 0012 [ 93]: 3c6b558831ed4b92 +Block 0012 [ 94]: b7bc17b4b0f33c9d +Block 0012 [ 95]: a4a82578872fbc6d +Block 0012 [ 96]: d85124a9b6672389 +Block 0012 [ 97]: 08b17e75139006f6 +Block 0012 [ 98]: 977827cd78088f2a +Block 0012 [ 99]: c20bc30182a91fe1 +Block 0012 [100]: 91bd9bda54db837c +Block 0012 [101]: a56f2ec6fa7ae2a1 +Block 0012 [102]: 75b8aab88e62f2f6 +Block 0012 [103]: e058c358294f6c0d +Block 0012 [104]: 98343c65fbe5e6ba +Block 0012 [105]: 659c225db9887bc8 +Block 0012 [106]: 948fb28011425b40 +Block 0012 [107]: 67cf0ff8cf3e0439 +Block 0012 [108]: 26e5546ece3ef627 +Block 0012 [109]: 72aab058c6c7cbc0 +Block 0012 [110]: ccc489c7bbbcde3a +Block 0012 [111]: 65b2322e9fbb9abe +Block 0012 [112]: 52326cb2a92360aa +Block 0012 [113]: 6eb0f22b356aacda +Block 0012 [114]: 156607f0176d9d5b +Block 0012 [115]: 0e18a589d9c98b2b +Block 0012 [116]: b73ed2b9c3cddad6 +Block 0012 [117]: bb4bac45f760c708 +Block 0012 [118]: f954e80c85c61a21 +Block 0012 [119]: f72b0dea1dbd82ee +Block 0012 [120]: 061e6c6fd5c9af78 +Block 0012 [121]: d8036a836de015bc +Block 0012 [122]: c06b956b2c5944b8 +Block 0012 [123]: d354483d3da39bc5 +Block 0012 [124]: 8042853ccccdf2aa +Block 0012 [125]: cb33ae4bcdbf89f5 +Block 0012 [126]: b36b52f64c953c3e +Block 0012 [127]: 43d5c23cbf60f228 +Block 0013 [ 0]: 18e43ecb466a8968 +Block 0013 [ 1]: de0624bc4603c390 +Block 0013 [ 2]: e47c6900e1e0f9ec +Block 0013 [ 3]: 1f7523e92ceff004 +Block 0013 [ 4]: 90ea827f76ffd035 +Block 0013 [ 5]: e2207e851ad049a1 +Block 0013 [ 6]: 0dadce26fee967e3 +Block 0013 [ 7]: f6c91d95427d2e35 +Block 0013 [ 8]: d163aca31bc02437 +Block 0013 [ 9]: ae11833e1859b9dd +Block 0013 [ 10]: 0085475658b25b37 +Block 0013 [ 11]: a941662fc1bf7290 +Block 0013 [ 12]: 785b6a11ee6cdcf8 +Block 0013 [ 13]: 78ae534c17d037e9 +Block 0013 [ 14]: 5409875d5a7c1f94 +Block 0013 [ 15]: 2e57b97295d14afa +Block 0013 [ 16]: 20f11b28155fdaa0 +Block 0013 [ 17]: 49680370961a80b2 +Block 0013 [ 18]: 506ec8c10dd1ca21 +Block 0013 [ 19]: b323ba42707917f0 +Block 0013 [ 20]: 2c7ac437db4b5bc8 +Block 0013 [ 21]: 7609f06765e28d19 +Block 0013 [ 22]: 09bc9531879ebcff +Block 0013 [ 23]: 6b96f2e996fe0877 +Block 0013 [ 24]: 0be156a465407fe9 +Block 0013 [ 25]: c5c4043a6b9ab6ea +Block 0013 [ 26]: ead52b39166fc1e6 +Block 0013 [ 27]: f40357c33f749e39 +Block 0013 [ 28]: f3d43b525a872a0a +Block 0013 [ 29]: 1e62f830e3519b2e +Block 0013 [ 30]: dffcd1e0532ddf7f +Block 0013 [ 31]: ecdebc7e2df4ca61 +Block 0013 [ 32]: 956e9be0eae88846 +Block 0013 [ 33]: 5f2867f853307359 +Block 0013 [ 34]: 54f0c56e75250fc7 +Block 0013 [ 35]: d821f1a65277b0da +Block 0013 [ 36]: 5a1badcd335982e0 +Block 0013 [ 37]: 2aefcd4c13c5595f +Block 0013 [ 38]: d8cae5e2fd0ecd13 +Block 0013 [ 39]: e111ec2dea668473 +Block 0013 [ 40]: 4f94418823c5fd86 +Block 0013 [ 41]: 6cbfd543b9e6c0f3 +Block 0013 [ 42]: 635b3f358ddebe5d +Block 0013 [ 43]: e1fedaf13a785014 +Block 0013 [ 44]: cb1ecd99b31799d2 +Block 0013 [ 45]: 7a55a2101bc1badd +Block 0013 [ 46]: 3789674f01e71585 +Block 0013 [ 47]: b30e075a7084778a +Block 0013 [ 48]: 68a9b8dba31d54de +Block 0013 [ 49]: 5924e35dad98726d +Block 0013 [ 50]: 54c063d3efd3f781 +Block 0013 [ 51]: 35a5759d0e811a46 +Block 0013 [ 52]: 67f813e40948aa3e +Block 0013 [ 53]: e30f18c6a37e3ef7 +Block 0013 [ 54]: 9fa54fdd007564c4 +Block 0013 [ 55]: c20d517b50bc5f9b +Block 0013 [ 56]: 17bc793afcc2d58f +Block 0013 [ 57]: 8ee17609a1f73d66 +Block 0013 [ 58]: 9512c68643cdbc82 +Block 0013 [ 59]: 93cea37bcad14887 +Block 0013 [ 60]: e82d710423fc7374 +Block 0013 [ 61]: edba70dbc24e1ab5 +Block 0013 [ 62]: 0dbaf4429ad565f8 +Block 0013 [ 63]: fef4942ca08fed0d +Block 0013 [ 64]: ca83d6487de24384 +Block 0013 [ 65]: 9e92dfd67d866a01 +Block 0013 [ 66]: d274d461fa499a68 +Block 0013 [ 67]: 70a2e178171a42ef +Block 0013 [ 68]: 2522a77aa3935a8e +Block 0013 [ 69]: 38fcde56f53a4afb +Block 0013 [ 70]: 5e49c140c03a9923 +Block 0013 [ 71]: 171aa7389918a2e7 +Block 0013 [ 72]: 3a8f18ccd501197b +Block 0013 [ 73]: 76f0992020b3d59c +Block 0013 [ 74]: 3c373d386809a05c +Block 0013 [ 75]: 2a30a1b8155318a4 +Block 0013 [ 76]: a03fa84d01f13453 +Block 0013 [ 77]: 4a872280f5ef1a3b +Block 0013 [ 78]: c22b8619c689c0ef +Block 0013 [ 79]: dd6c265ea30559a6 +Block 0013 [ 80]: c819aafe8db166ed +Block 0013 [ 81]: 46f01e808cfe0a4a +Block 0013 [ 82]: 440f0e8ab090496f +Block 0013 [ 83]: ce51c3ecd3766d6b +Block 0013 [ 84]: 7f0b0ef92deffc64 +Block 0013 [ 85]: 116c821f6c9fdc28 +Block 0013 [ 86]: 9cc813686c478e37 +Block 0013 [ 87]: 1ff9523444a9f731 +Block 0013 [ 88]: bfc9b93360dc52fd +Block 0013 [ 89]: 453d3a0c4d2a6ce8 +Block 0013 [ 90]: e64484db10e4c9ea +Block 0013 [ 91]: f85e66468328fce4 +Block 0013 [ 92]: d3b71ef1d0857bdb +Block 0013 [ 93]: 8fc64459b1b84aa9 +Block 0013 [ 94]: 4ff3785ad108501e +Block 0013 [ 95]: 5db53ddd955530b0 +Block 0013 [ 96]: 0e9db8ed5086f981 +Block 0013 [ 97]: 8ef019feb7b74454 +Block 0013 [ 98]: b13a76096fdd138f +Block 0013 [ 99]: cb7d283fc650d0c0 +Block 0013 [100]: 2e85ae49006df7f5 +Block 0013 [101]: 6bc81aa091850cfc +Block 0013 [102]: c8337747d3a09c23 +Block 0013 [103]: 67b1769f37d721cb +Block 0013 [104]: 6cc2cd4c1bf5bfd5 +Block 0013 [105]: 2f2d8fea231dc9b5 +Block 0013 [106]: d07c5b8da4cefa1c +Block 0013 [107]: 21824639499054fb +Block 0013 [108]: 5aa3d5bd8b14ca72 +Block 0013 [109]: c5897b79d1064a0b +Block 0013 [110]: bac2bb6e9516511b +Block 0013 [111]: 7cf309367e8b306e +Block 0013 [112]: a0abfa3564cb142e +Block 0013 [113]: 0f2b7c41cde3a983 +Block 0013 [114]: 6b77066f440bb86b +Block 0013 [115]: 419b2373a574cb92 +Block 0013 [116]: cb2a2e3d1c092282 +Block 0013 [117]: f3be594d1481879e +Block 0013 [118]: 2e56778ff9740d34 +Block 0013 [119]: 9eb7964504e4b519 +Block 0013 [120]: 4202d23d721d162b +Block 0013 [121]: a1d0610d3bd8fbbb +Block 0013 [122]: 070e2baa1f4b17fe +Block 0013 [123]: d8465bb41a1826e8 +Block 0013 [124]: f2dc327281534bfb +Block 0013 [125]: a8674141208bf59d +Block 0013 [126]: 414187ba004fc431 +Block 0013 [127]: 85664d6cdae69ec7 +Block 0014 [ 0]: 273f89c3c4d02299 +Block 0014 [ 1]: 65cdbad74085012f +Block 0014 [ 2]: 1b209b55833ad98e +Block 0014 [ 3]: ecc8b976b1a67ae9 +Block 0014 [ 4]: cb5166556f87a25b +Block 0014 [ 5]: b7d1f89b87526040 +Block 0014 [ 6]: 373382b4d510dfd3 +Block 0014 [ 7]: 04fbe454c5ea3f3b +Block 0014 [ 8]: 26ee04db4cee85e1 +Block 0014 [ 9]: b49d3ce4b2a068fb +Block 0014 [ 10]: 1e0284184e27ad46 +Block 0014 [ 11]: 9f05fcd205c15aad +Block 0014 [ 12]: 8c84f8290060fef1 +Block 0014 [ 13]: fe0f3f65a0e49203 +Block 0014 [ 14]: f0cfcb1a06f79993 +Block 0014 [ 15]: 453a2a0021034051 +Block 0014 [ 16]: 442c6629ea64dda6 +Block 0014 [ 17]: ce15b0b7ad384fd9 +Block 0014 [ 18]: 039550d4511e19c8 +Block 0014 [ 19]: 54bde38889bb00a5 +Block 0014 [ 20]: 48dda5fe7bd65bc0 +Block 0014 [ 21]: 1f0b7375d9cdd05b +Block 0014 [ 22]: 48df34a0dbf136ba +Block 0014 [ 23]: b20a359e9281ea3b +Block 0014 [ 24]: 431c29ff33a999d3 +Block 0014 [ 25]: 0968e84781dd8bde +Block 0014 [ 26]: 182b2d58441e26ee +Block 0014 [ 27]: fb23c95d4d4abcbe +Block 0014 [ 28]: 25b087fb10a7b02d +Block 0014 [ 29]: 0591464d8c341c3a +Block 0014 [ 30]: 394ed79a62d9c0ae +Block 0014 [ 31]: d9bf954211f9f238 +Block 0014 [ 32]: f3e8633abc0da2c7 +Block 0014 [ 33]: b55d953f9561dc9c +Block 0014 [ 34]: 34b94b3f5a185d38 +Block 0014 [ 35]: 41994961bc5912b4 +Block 0014 [ 36]: 0a49a8f3fa468833 +Block 0014 [ 37]: 3168909e7e87dcd8 +Block 0014 [ 38]: 49a79f694d38b937 +Block 0014 [ 39]: aeca197acd807826 +Block 0014 [ 40]: e78018bda087ed66 +Block 0014 [ 41]: caf0caca076d215a +Block 0014 [ 42]: df57e8aaa56e06e8 +Block 0014 [ 43]: e04757a1866d206f +Block 0014 [ 44]: b14d1f7e87a9b7f4 +Block 0014 [ 45]: 1f2fed83aafb7139 +Block 0014 [ 46]: e62bb58ff3b8e493 +Block 0014 [ 47]: 0f4db670f7d7e617 +Block 0014 [ 48]: 49393771498d5f3d +Block 0014 [ 49]: 40ff217967d0e6b4 +Block 0014 [ 50]: 43361453b3774655 +Block 0014 [ 51]: 798eff0f49dcf729 +Block 0014 [ 52]: 2b52f449561c01d6 +Block 0014 [ 53]: 7f22e3d534852755 +Block 0014 [ 54]: 5c5a01509a2ceaf1 +Block 0014 [ 55]: e723988ef8d43faf +Block 0014 [ 56]: 5cd2a452f32589e3 +Block 0014 [ 57]: 4492d0afff901013 +Block 0014 [ 58]: 5f74c6b8364a8b16 +Block 0014 [ 59]: 531f2fdffbed3c1b +Block 0014 [ 60]: b58c72a19555d9e9 +Block 0014 [ 61]: a2b49eee8d78c6ad +Block 0014 [ 62]: ac5b58636303f51d +Block 0014 [ 63]: bbb04381f89de22b +Block 0014 [ 64]: 310bb057d316746b +Block 0014 [ 65]: df609a73aa6f04c1 +Block 0014 [ 66]: dde1e330db4a2353 +Block 0014 [ 67]: df8bd2c3aa4ed8d5 +Block 0014 [ 68]: a354ff5ec71203d3 +Block 0014 [ 69]: a63bd02607f399dc +Block 0014 [ 70]: f686121f14151e98 +Block 0014 [ 71]: 99b2bb138b954be7 +Block 0014 [ 72]: 308625b4491ccb32 +Block 0014 [ 73]: 297a597e8c04e7c4 +Block 0014 [ 74]: c126cb6c2c547416 +Block 0014 [ 75]: 95466d15799cf5b7 +Block 0014 [ 76]: 363687f488132959 +Block 0014 [ 77]: 1a7824f884e546e5 +Block 0014 [ 78]: 6f2591631287db18 +Block 0014 [ 79]: f4b6521106d317a2 +Block 0014 [ 80]: 7e3835fc300cf076 +Block 0014 [ 81]: 1caac48041fba75f +Block 0014 [ 82]: 8212146ba19b4068 +Block 0014 [ 83]: ba118608fd5f86e0 +Block 0014 [ 84]: d909e703db90c331 +Block 0014 [ 85]: a09b6bfbe24eaf6b +Block 0014 [ 86]: 6996644aa1b4214e +Block 0014 [ 87]: eb02ad1a13fade24 +Block 0014 [ 88]: ad14cb674fdc24fe +Block 0014 [ 89]: 75a579cc9bc86d81 +Block 0014 [ 90]: 11a448208b1bad80 +Block 0014 [ 91]: dd7e817951488ebb +Block 0014 [ 92]: 84319b6e0a938a8e +Block 0014 [ 93]: 601a085543c1f304 +Block 0014 [ 94]: a26ec834a5008ed6 +Block 0014 [ 95]: 065886b182b12de9 +Block 0014 [ 96]: bca693abbc55f94e +Block 0014 [ 97]: d75838f966cd197d +Block 0014 [ 98]: 0fc473ed39950739 +Block 0014 [ 99]: 86b5eeb016c5c09e +Block 0014 [100]: b620889b18b197e4 +Block 0014 [101]: 7bd685894288c621 +Block 0014 [102]: a4fb318772e1f30e +Block 0014 [103]: 75d292c046b66ba8 +Block 0014 [104]: 106da59cc1adc7b9 +Block 0014 [105]: f72257945ad6c61e +Block 0014 [106]: 97f73c5a48c7eb8f +Block 0014 [107]: bbf3c353fe34c7ce +Block 0014 [108]: ba8b83a9f90f632e +Block 0014 [109]: 4747de44c251976d +Block 0014 [110]: f18a8336d5c33cdf +Block 0014 [111]: c94db7537973cc65 +Block 0014 [112]: 11e1046ee6ffa84a +Block 0014 [113]: 61ede68d3dd7a018 +Block 0014 [114]: 840a15e6cdb6615a +Block 0014 [115]: c35bece40424bee4 +Block 0014 [116]: 63d05f3e0c4f1d1e +Block 0014 [117]: e802bb16993cf741 +Block 0014 [118]: 39ee29de862cd4bf +Block 0014 [119]: 6c9e966cba8180ea +Block 0014 [120]: 0f31cfc44385b89a +Block 0014 [121]: 36ab1b02706b383d +Block 0014 [122]: d8e57c05760ab650 +Block 0014 [123]: 0745e27d24cb16b5 +Block 0014 [124]: e588703fb8d7bc20 +Block 0014 [125]: 0644bdce31a77191 +Block 0014 [126]: 1bd0666d9975b8f9 +Block 0014 [127]: 7dc4943f398250a6 +Block 0015 [ 0]: 4e7562e99872522b +Block 0015 [ 1]: 66b8a4b078db303c +Block 0015 [ 2]: 4f9e3d64d3c842cf +Block 0015 [ 3]: c22b2bdbf886ef3c +Block 0015 [ 4]: cdd4df9530916a8d +Block 0015 [ 5]: 23bb0f61caf2b262 +Block 0015 [ 6]: 17c2092fa60f6f45 +Block 0015 [ 7]: 4125dd598e088602 +Block 0015 [ 8]: 8406d6514999d625 +Block 0015 [ 9]: 8467b8c69044a698 +Block 0015 [ 10]: 1418ded13a87f1c1 +Block 0015 [ 11]: ec81553a84582651 +Block 0015 [ 12]: 6d37718ba2e32dc4 +Block 0015 [ 13]: 31119a7d298fedba +Block 0015 [ 14]: 6aec539cbe7a2d82 +Block 0015 [ 15]: 1302e8bf03137898 +Block 0015 [ 16]: 27f7482fd8b4c288 +Block 0015 [ 17]: 211f11d1af0df544 +Block 0015 [ 18]: b610c439809337bc +Block 0015 [ 19]: 51ef516a43d28553 +Block 0015 [ 20]: d6953153439c5df9 +Block 0015 [ 21]: 8bae6253e709b68f +Block 0015 [ 22]: 68065cd35f15374f +Block 0015 [ 23]: 6a238be5cea416af +Block 0015 [ 24]: 977d7259234f6365 +Block 0015 [ 25]: 4cd916b891b0778f +Block 0015 [ 26]: 35116f1080cef277 +Block 0015 [ 27]: 568c31f4ed06dd0d +Block 0015 [ 28]: f3036b593431b2f2 +Block 0015 [ 29]: 734441677e625cd7 +Block 0015 [ 30]: f891ecf5e790d153 +Block 0015 [ 31]: 7b4959ff7cd052ed +Block 0015 [ 32]: 7e90fb5ae04ec9ec +Block 0015 [ 33]: 278bdb2b3068750d +Block 0015 [ 34]: 542970101d9e03b5 +Block 0015 [ 35]: 92613dff6f3cace4 +Block 0015 [ 36]: 0bca0734e50828f7 +Block 0015 [ 37]: 93d8a2694b1228fd +Block 0015 [ 38]: 58f220eede1aee8d +Block 0015 [ 39]: 1296ac6d714977aa +Block 0015 [ 40]: b10bfd20792f958f +Block 0015 [ 41]: e51bb8dafb1cac13 +Block 0015 [ 42]: 0f033677bae35a45 +Block 0015 [ 43]: 8815c9cc589ef617 +Block 0015 [ 44]: 0a7588f5ba0585b3 +Block 0015 [ 45]: 561c9266bf857827 +Block 0015 [ 46]: 1a658bb9854aa89d +Block 0015 [ 47]: 2bc84c130bf82b05 +Block 0015 [ 48]: ab8019ce7e71d1df +Block 0015 [ 49]: 011cfb35e8763a17 +Block 0015 [ 50]: c9173bccc4ca9678 +Block 0015 [ 51]: bbcb9e737c362350 +Block 0015 [ 52]: 09e15c0437a57cdb +Block 0015 [ 53]: 64f684ab037429d6 +Block 0015 [ 54]: 1420435f8cdd5c66 +Block 0015 [ 55]: 36adee091cfc29ee +Block 0015 [ 56]: 1fde9df5dbff0132 +Block 0015 [ 57]: b6a34569f36bc4c7 +Block 0015 [ 58]: 8eb15a83c5d21868 +Block 0015 [ 59]: 660cd0e9c8a1a7d8 +Block 0015 [ 60]: e54badb052c928ee +Block 0015 [ 61]: ac8cc341e0ae1af5 +Block 0015 [ 62]: 5155906cc20e5e77 +Block 0015 [ 63]: d86576106452b0f0 +Block 0015 [ 64]: c66032c9204546e4 +Block 0015 [ 65]: 8332b4874131b9cb +Block 0015 [ 66]: 47ae353d4464335f +Block 0015 [ 67]: fd646e4545794a48 +Block 0015 [ 68]: 9fd0218acae10f24 +Block 0015 [ 69]: f2f6040ffbc6e58f +Block 0015 [ 70]: 388720e8c1d2dc12 +Block 0015 [ 71]: 822980335abb942c +Block 0015 [ 72]: a54e39961e5e6203 +Block 0015 [ 73]: 4f8eea2afae53a05 +Block 0015 [ 74]: ec36590c61711e62 +Block 0015 [ 75]: 1d044f7eb1edbb8e +Block 0015 [ 76]: 020f47bb7c4dc9b0 +Block 0015 [ 77]: dc8cf730af322a2f +Block 0015 [ 78]: 5ba84a051d763d7b +Block 0015 [ 79]: e04e796053d22286 +Block 0015 [ 80]: 1fa5ce52fc8565a6 +Block 0015 [ 81]: b25f1c05d7490304 +Block 0015 [ 82]: a4e0006cce1fa914 +Block 0015 [ 83]: 3279c3cde2c9ecec +Block 0015 [ 84]: 689361e4370c48b6 +Block 0015 [ 85]: 77567214a9d5dd81 +Block 0015 [ 86]: f4877ca9650391cc +Block 0015 [ 87]: 93747ddab39b430a +Block 0015 [ 88]: 2c0b37f027b54360 +Block 0015 [ 89]: 052529d6af326a57 +Block 0015 [ 90]: 91357d945a80cdb8 +Block 0015 [ 91]: 2fda3ba647eac74c +Block 0015 [ 92]: f5c21a8e76fa19d3 +Block 0015 [ 93]: 69c8bf807e40f728 +Block 0015 [ 94]: 7177057f6df7fab8 +Block 0015 [ 95]: 19637448baea9365 +Block 0015 [ 96]: 1bc3c05cd0a7e170 +Block 0015 [ 97]: 8b175f281aa5184c +Block 0015 [ 98]: 22f878ec508d2505 +Block 0015 [ 99]: 02bad20f789cc371 +Block 0015 [100]: df485d396e80da2e +Block 0015 [101]: e1177e38552b3b0f +Block 0015 [102]: cd5d9d315a42b212 +Block 0015 [103]: 4ed4199994fc0503 +Block 0015 [104]: b4556ef1bbf50d9b +Block 0015 [105]: 27ec9c33c2817064 +Block 0015 [106]: 2cb72f64b92601eb +Block 0015 [107]: af35f896991a8829 +Block 0015 [108]: a8a6bed2402f441f +Block 0015 [109]: 92371ee6ee3dd914 +Block 0015 [110]: f01d46477e83f53c +Block 0015 [111]: 157f0bc4848bf4e7 +Block 0015 [112]: b8accc3eadeda0a7 +Block 0015 [113]: d234ef67c125e7ef +Block 0015 [114]: d3ad74bedef4c4fd +Block 0015 [115]: 9d647f2d0f69b7df +Block 0015 [116]: 7508119dee6aeb48 +Block 0015 [117]: 28f0c80b6803f8c8 +Block 0015 [118]: 7f7528ded9487889 +Block 0015 [119]: af444f8e9ad26d92 +Block 0015 [120]: 1e849f3d83b05579 +Block 0015 [121]: 3905d4df49382f60 +Block 0015 [122]: 0579d173ff4e01dd +Block 0015 [123]: 7ad8e9bd97862430 +Block 0015 [124]: 9d9df0ba6442503f +Block 0015 [125]: e83d5bffc3957d64 +Block 0015 [126]: dec92b7cb93eb3d8 +Block 0015 [127]: 132eceec8b789472 +Block 0016 [ 0]: a7c4bd9c8195e5ae +Block 0016 [ 1]: d2e7203b85272ece +Block 0016 [ 2]: c4c57f73c5463166 +Block 0016 [ 3]: 703ab3c8d9c1db19 +Block 0016 [ 4]: 9720fe7c801a431e +Block 0016 [ 5]: 4b9783e71df58bb1 +Block 0016 [ 6]: d100be4423e41516 +Block 0016 [ 7]: 1f5bc28255df4c18 +Block 0016 [ 8]: dc29d9e528350071 +Block 0016 [ 9]: 70e98de92f01c8e8 +Block 0016 [ 10]: 082a279585108603 +Block 0016 [ 11]: 12824a1c6baddbf8 +Block 0016 [ 12]: 299b198d5687861b +Block 0016 [ 13]: d764532121fcb048 +Block 0016 [ 14]: 7ed58a31dc247ca1 +Block 0016 [ 15]: 04974b0e380e190e +Block 0016 [ 16]: 005cd3437ce2b618 +Block 0016 [ 17]: 4d2160b2e9929125 +Block 0016 [ 18]: 4c2f1164bd9572ca +Block 0016 [ 19]: e45ce310e0ab8651 +Block 0016 [ 20]: 4d4ce7e432b5ef92 +Block 0016 [ 21]: 5598f75c0e3ed39e +Block 0016 [ 22]: 74a116c69967d582 +Block 0016 [ 23]: 7a61a7262e89199d +Block 0016 [ 24]: 2a70ca5bd3b70742 +Block 0016 [ 25]: b176ad069e401739 +Block 0016 [ 26]: 08ec43669e715bf5 +Block 0016 [ 27]: 834f52898a5622ed +Block 0016 [ 28]: 69fc86a4ae45b482 +Block 0016 [ 29]: f8f87fb7c99b53c9 +Block 0016 [ 30]: 8b26ba5c4aaaf50d +Block 0016 [ 31]: 257a9e3be7804fd6 +Block 0016 [ 32]: 92b35066abb159db +Block 0016 [ 33]: d5652c3400531043 +Block 0016 [ 34]: 17121e2c27c5243a +Block 0016 [ 35]: bd2429d2c6881bfb +Block 0016 [ 36]: 3fe2e56950c12c7d +Block 0016 [ 37]: 2d4b8a1bf11c6257 +Block 0016 [ 38]: 04aa03aead29ddaf +Block 0016 [ 39]: bca22327be578191 +Block 0016 [ 40]: f75a1c32c133c5a0 +Block 0016 [ 41]: 5789b745ce7deaa6 +Block 0016 [ 42]: 19d1f1f0f0307e01 +Block 0016 [ 43]: a74e6d13a3b0e57b +Block 0016 [ 44]: d427fb2528c9a0a2 +Block 0016 [ 45]: 4e06a13184d4589f +Block 0016 [ 46]: b3a015cb32e2fa41 +Block 0016 [ 47]: 89083dd7a3a7ea7b +Block 0016 [ 48]: 7f8197bba08ae770 +Block 0016 [ 49]: f8173c4a7d9e9a20 +Block 0016 [ 50]: a25ef0122bb3e4fe +Block 0016 [ 51]: a8cfcf2ccb632274 +Block 0016 [ 52]: 4794a1c6e0c6fd3a +Block 0016 [ 53]: 28bfebcf8eba67fd +Block 0016 [ 54]: 548ce35ad71a6de8 +Block 0016 [ 55]: 55e14585214b44ae +Block 0016 [ 56]: 4f2c91227ef2f67e +Block 0016 [ 57]: 1f46ff01df8c7b92 +Block 0016 [ 58]: 176e93db8da1c1aa +Block 0016 [ 59]: c1999f8432873a9a +Block 0016 [ 60]: f253261d5c603127 +Block 0016 [ 61]: 4dc28da5758a3ecc +Block 0016 [ 62]: 9dc6739c55bfe672 +Block 0016 [ 63]: d46ceb9c82cf77f0 +Block 0016 [ 64]: 606ace0c4e59088c +Block 0016 [ 65]: 6a2b1c743bed4464 +Block 0016 [ 66]: a222bb63a9d1dfa4 +Block 0016 [ 67]: 7bf4a973bb0ea950 +Block 0016 [ 68]: b6e4eb111b0f90e9 +Block 0016 [ 69]: 963b4f01ca24e49a +Block 0016 [ 70]: f12a07803f119709 +Block 0016 [ 71]: c9a4bd99c942bb93 +Block 0016 [ 72]: 1b631319178a8b8b +Block 0016 [ 73]: 13dce9b5956e7c62 +Block 0016 [ 74]: af1ab6950e39073a +Block 0016 [ 75]: 2077fc99c62a3629 +Block 0016 [ 76]: 7b17e876bc56d9a1 +Block 0016 [ 77]: 5697e81e5b10b640 +Block 0016 [ 78]: ec1a36a6ba2668c2 +Block 0016 [ 79]: ce3e10c7c721e1aa +Block 0016 [ 80]: d55eb97cd2b697ca +Block 0016 [ 81]: 7d6190610198b4a4 +Block 0016 [ 82]: 6eaf57dbad34d038 +Block 0016 [ 83]: 61e3393f4c4b9a42 +Block 0016 [ 84]: e3c0008bbe5960d7 +Block 0016 [ 85]: c6f809afbee36fea +Block 0016 [ 86]: 4c3d6ed4514efa91 +Block 0016 [ 87]: 0897a22b8fd03be3 +Block 0016 [ 88]: 0103454f10ab0cb1 +Block 0016 [ 89]: a4a40dd908a3e32d +Block 0016 [ 90]: 2865f329d9da074f +Block 0016 [ 91]: 3fc7f288b723d94e +Block 0016 [ 92]: 9f5fe6a83da6c0b3 +Block 0016 [ 93]: d96214e995bc42dc +Block 0016 [ 94]: 4d17727350dc92fb +Block 0016 [ 95]: 99e33bc47e06c103 +Block 0016 [ 96]: 566bd4910d1149e6 +Block 0016 [ 97]: deb495e41515c67c +Block 0016 [ 98]: 9dda393d183ebe5e +Block 0016 [ 99]: 50da7b9bd87c0620 +Block 0016 [100]: 20eaca05f8caecf0 +Block 0016 [101]: 73f201cfabe4e3df +Block 0016 [102]: 8837f8da8260eb0f +Block 0016 [103]: afec76bbd77b1a05 +Block 0016 [104]: 94318f9750f6a554 +Block 0016 [105]: 8fdb5ad4d8f03be0 +Block 0016 [106]: b13106b580105096 +Block 0016 [107]: a3ef3f3a8518a008 +Block 0016 [108]: b85051713552ee6d +Block 0016 [109]: abd559c687293ffd +Block 0016 [110]: c701a56b69c9670f +Block 0016 [111]: 9fe8ce8a418c1029 +Block 0016 [112]: 5131ac1b41dc1db1 +Block 0016 [113]: a8f5622b22294904 +Block 0016 [114]: 99d166b28c228cba +Block 0016 [115]: 4221fa4de0332567 +Block 0016 [116]: 7e5e49691c67a3b0 +Block 0016 [117]: 04c18bdb2bbe716e +Block 0016 [118]: 6c95bba9a6a0066e +Block 0016 [119]: 65913aae6e7f3496 +Block 0016 [120]: 6ccee1cf9135225e +Block 0016 [121]: eea59d57c3c1067b +Block 0016 [122]: bc53b79d836fcd67 +Block 0016 [123]: 005b4b44a8c75488 +Block 0016 [124]: 75a0c228c4925ca1 +Block 0016 [125]: 51db30da0208afa3 +Block 0016 [126]: c3fa22b10c158f11 +Block 0016 [127]: 32f9bfdf3810cffb +Block 0017 [ 0]: 55f864a4bba04b69 +Block 0017 [ 1]: 86688ea3b4c7b570 +Block 0017 [ 2]: 4acb9000c989e990 +Block 0017 [ 3]: a684cce37b3dbecf +Block 0017 [ 4]: 1308047031fd0b09 +Block 0017 [ 5]: 48d0396732b7d297 +Block 0017 [ 6]: e65eab4b35fdc1e8 +Block 0017 [ 7]: f8f55563c27513ad +Block 0017 [ 8]: 43631c52a17d0455 +Block 0017 [ 9]: 7c58534e0153d743 +Block 0017 [ 10]: b680014bde5a5b00 +Block 0017 [ 11]: a98686fa6034fb55 +Block 0017 [ 12]: b40e7cd918e4bb6b +Block 0017 [ 13]: 7a129caa8f7b7ecd +Block 0017 [ 14]: 7a2c5f80068ed988 +Block 0017 [ 15]: 74930f06e7818b64 +Block 0017 [ 16]: 699df22ad1c2b7a7 +Block 0017 [ 17]: 935ab251bd87d363 +Block 0017 [ 18]: 0ae1d9012e3edbe5 +Block 0017 [ 19]: 32ea4d9dd0b8a926 +Block 0017 [ 20]: 547db28a60aa43e5 +Block 0017 [ 21]: 6c9ee0a9de7f1b87 +Block 0017 [ 22]: 905cc8aaf66a86eb +Block 0017 [ 23]: 7d20f5583a60e2f3 +Block 0017 [ 24]: e34f5bbbfa73d678 +Block 0017 [ 25]: d61c1b847c02150f +Block 0017 [ 26]: 41cb644e15d0b052 +Block 0017 [ 27]: e00227734f066173 +Block 0017 [ 28]: d8af76bd1770ab69 +Block 0017 [ 29]: b79d451c214a4bc4 +Block 0017 [ 30]: 2f5402b7495d5cb6 +Block 0017 [ 31]: bebecb6d82b81cab +Block 0017 [ 32]: 840c99b3a37ee1c3 +Block 0017 [ 33]: eee590dc48ce4c28 +Block 0017 [ 34]: 6b75a284765b0d20 +Block 0017 [ 35]: d4d30ec02cef9dd5 +Block 0017 [ 36]: 594fa4b9f2e1f661 +Block 0017 [ 37]: 14d30d5dbcbbf39a +Block 0017 [ 38]: 97f18e14fc209bf3 +Block 0017 [ 39]: ad730f490aa5a7fc +Block 0017 [ 40]: 7cf845139f9df67a +Block 0017 [ 41]: 090a6c6adb749c17 +Block 0017 [ 42]: c66fc330fe7a832d +Block 0017 [ 43]: 7d046a6232b6644e +Block 0017 [ 44]: eccd8b00bb5c89ae +Block 0017 [ 45]: cfa80b3ca9b32666 +Block 0017 [ 46]: cf538995385e0d84 +Block 0017 [ 47]: 5a058bf3cb834267 +Block 0017 [ 48]: 734d6406b7c25f24 +Block 0017 [ 49]: 58f2c405e68c867b +Block 0017 [ 50]: 3dac578d2f388db0 +Block 0017 [ 51]: 00cd551f962e2d02 +Block 0017 [ 52]: 49b13b2924e88a93 +Block 0017 [ 53]: e7743f5443a9d274 +Block 0017 [ 54]: 98dd74f1733f61bc +Block 0017 [ 55]: 711854c53a5a12c2 +Block 0017 [ 56]: 01ba975458f076c1 +Block 0017 [ 57]: 2935ddb4a0a9a780 +Block 0017 [ 58]: 98a3847b5f5a92b1 +Block 0017 [ 59]: f6b51f815727a771 +Block 0017 [ 60]: 83d455831270fa14 +Block 0017 [ 61]: bf01382f3fb5dc3b +Block 0017 [ 62]: 1e40bfb6f2493fe3 +Block 0017 [ 63]: 5a861f123e59c889 +Block 0017 [ 64]: 44569ccf53d43812 +Block 0017 [ 65]: 08e3be00922024dd +Block 0017 [ 66]: b30ea60175ed31b8 +Block 0017 [ 67]: c67ada13ea4ef796 +Block 0017 [ 68]: 6ae9bb2e162e1793 +Block 0017 [ 69]: d16637c04dd7479b +Block 0017 [ 70]: 82d1f83bfa388973 +Block 0017 [ 71]: a6ee8701855d80ad +Block 0017 [ 72]: e6a6f0f9a815394a +Block 0017 [ 73]: b09d9a2c1ba5f6c6 +Block 0017 [ 74]: 29253a5eb8f062ec +Block 0017 [ 75]: 9f2f42051b859c49 +Block 0017 [ 76]: 7a553bd4e61add79 +Block 0017 [ 77]: 49f5b81d6d3da61a +Block 0017 [ 78]: 4a2a6b70585823f2 +Block 0017 [ 79]: e0ba481ebbb314a2 +Block 0017 [ 80]: 2e026a086b59c6e5 +Block 0017 [ 81]: af75fc6519e8292b +Block 0017 [ 82]: 68f34b44c3d6ce1f +Block 0017 [ 83]: 66414b29e763ca01 +Block 0017 [ 84]: 7bb093c4cbee74d9 +Block 0017 [ 85]: 52a4474b0cb7c318 +Block 0017 [ 86]: 0514f43a6f43fa6e +Block 0017 [ 87]: 88678d0d92fc9d04 +Block 0017 [ 88]: 9aca117183c360cf +Block 0017 [ 89]: 22b278c99c1be55f +Block 0017 [ 90]: 734f078cd0c14fe4 +Block 0017 [ 91]: a6c4697929b35037 +Block 0017 [ 92]: 20caff1ac11c6a3b +Block 0017 [ 93]: b7b58e29c410063c +Block 0017 [ 94]: f5f82a0e4ffb425c +Block 0017 [ 95]: 1d1faf6a9e04f749 +Block 0017 [ 96]: f61180a10c47e350 +Block 0017 [ 97]: 90c2d0f116370800 +Block 0017 [ 98]: 245c6a8c032df64e +Block 0017 [ 99]: 72af2e2387729677 +Block 0017 [100]: 255fef7d0f299493 +Block 0017 [101]: 63696cd15a9827db +Block 0017 [102]: 9ff1a677815906e9 +Block 0017 [103]: cfe7645e84fbcc6b +Block 0017 [104]: 7d118f5c1773a380 +Block 0017 [105]: 53c22df34ab0c79d +Block 0017 [106]: e60cafb5a84da024 +Block 0017 [107]: c71b19e25f00eaca +Block 0017 [108]: 70a2599c461d4b5a +Block 0017 [109]: a1defaf5d43782e7 +Block 0017 [110]: 307173d4eb84a5f0 +Block 0017 [111]: b2965ee119aae588 +Block 0017 [112]: aea1214bdc220904 +Block 0017 [113]: af783e47a62e2905 +Block 0017 [114]: c17c6bd0dd07543e +Block 0017 [115]: bc2f4f61b3d4bc42 +Block 0017 [116]: 427af793fe06f68e +Block 0017 [117]: d3ddbc5545d45375 +Block 0017 [118]: 7e8f88721e1d599e +Block 0017 [119]: 2fddf0a0a1d0b8de +Block 0017 [120]: 536c66fe9d3064d4 +Block 0017 [121]: ca596ae712b194c4 +Block 0017 [122]: 2d98514c3a3fc1a3 +Block 0017 [123]: 2099f96fa5525447 +Block 0017 [124]: 3a0da830930120fa +Block 0017 [125]: f65c0f3d4d80ec4d +Block 0017 [126]: b02733acf2e0bd07 +Block 0017 [127]: 9a777043164a9ecb +Block 0018 [ 0]: 9757cc1f8fc67731 +Block 0018 [ 1]: 35bf6c0a07d6151b +Block 0018 [ 2]: 4a562b10d3cb3b5b +Block 0018 [ 3]: 3837df4668b638ff +Block 0018 [ 4]: fd8641b21b4bde24 +Block 0018 [ 5]: 7a4c20b761f213bf +Block 0018 [ 6]: c7fbe70faf6e78ad +Block 0018 [ 7]: a35a01acc5baae2d +Block 0018 [ 8]: ba8375042c16a408 +Block 0018 [ 9]: 2c17a49df0210514 +Block 0018 [ 10]: 54bcfc9c5e61a2df +Block 0018 [ 11]: 20b669a6e9371de8 +Block 0018 [ 12]: 5f60f6fa0ce2b5cf +Block 0018 [ 13]: 8876d888784de54d +Block 0018 [ 14]: 5a14abc68ade70d2 +Block 0018 [ 15]: caf7c3bd9bb8d627 +Block 0018 [ 16]: 6aa9f50c26c864b4 +Block 0018 [ 17]: 42c651a28985bfe1 +Block 0018 [ 18]: 299525de82ccf4b7 +Block 0018 [ 19]: 805093fc25cf4833 +Block 0018 [ 20]: fd71d130eead0c07 +Block 0018 [ 21]: 44e09d7e4e7c79ef +Block 0018 [ 22]: d6c9edddb29687b1 +Block 0018 [ 23]: 9ea7f4af4c6e404c +Block 0018 [ 24]: 44b15a0e484e20a8 +Block 0018 [ 25]: 4c0a4ea8ae119282 +Block 0018 [ 26]: 1625138e2fec19e0 +Block 0018 [ 27]: 8c431896e4c7f89f +Block 0018 [ 28]: 1e391f9440f50bbb +Block 0018 [ 29]: abe564717646535b +Block 0018 [ 30]: bfdd2d6c7a615b0c +Block 0018 [ 31]: a476b4167fe0d71e +Block 0018 [ 32]: 2ee078458a627435 +Block 0018 [ 33]: 0f92479fb6bbe7db +Block 0018 [ 34]: f4910af60181eea0 +Block 0018 [ 35]: bdf2c1d96257032f +Block 0018 [ 36]: aa18a53adae220ea +Block 0018 [ 37]: 4680eb844619121c +Block 0018 [ 38]: b5381e15c57b1f8d +Block 0018 [ 39]: a1adbf1d3fc63488 +Block 0018 [ 40]: 456a44ce404b2e50 +Block 0018 [ 41]: 3d588bcdee76376a +Block 0018 [ 42]: 8a7c2c43a9315512 +Block 0018 [ 43]: fe46734e4c364784 +Block 0018 [ 44]: 10de3b6380dcd058 +Block 0018 [ 45]: 04ce55eadbd266fb +Block 0018 [ 46]: 3114eac782bf5a3f +Block 0018 [ 47]: ef503aec668a2980 +Block 0018 [ 48]: 73b2e046a73cce5e +Block 0018 [ 49]: 06dc65dc97686835 +Block 0018 [ 50]: 9afa20ac608c0c95 +Block 0018 [ 51]: a722124767a49fc1 +Block 0018 [ 52]: 3ca0c4282bb241c1 +Block 0018 [ 53]: e3eb230c04aa6faa +Block 0018 [ 54]: 27a925e841a0081a +Block 0018 [ 55]: 92fa113d0e62b8d1 +Block 0018 [ 56]: e1a23f578ad3b6e2 +Block 0018 [ 57]: f0a40e4f904293cb +Block 0018 [ 58]: 24868ed872e36b84 +Block 0018 [ 59]: 25e7a53a161bfcaf +Block 0018 [ 60]: 26e1c9c12b5939e1 +Block 0018 [ 61]: a13029dc4e435467 +Block 0018 [ 62]: 60dee45dc1d2c33b +Block 0018 [ 63]: e5060012f7e3c08f +Block 0018 [ 64]: d80235bfd51562b4 +Block 0018 [ 65]: 9e65692aa89c51ae +Block 0018 [ 66]: f6189d85d588d4b8 +Block 0018 [ 67]: 6db9500363de22cd +Block 0018 [ 68]: cc5a9622b64f01db +Block 0018 [ 69]: e4c795a27f76dd79 +Block 0018 [ 70]: 3e2371f3bf3bc607 +Block 0018 [ 71]: 91613779534e6f9d +Block 0018 [ 72]: 012e99a50f2ef5af +Block 0018 [ 73]: 0f72353196725129 +Block 0018 [ 74]: 56c1e7f4592babb9 +Block 0018 [ 75]: ffd4fa2bf674ec77 +Block 0018 [ 76]: ae3864b6e39c9804 +Block 0018 [ 77]: 0707d4da655e8e8a +Block 0018 [ 78]: e412ab43d93fe67e +Block 0018 [ 79]: 070aacc9f712091d +Block 0018 [ 80]: 8b7868f2fc6e0f37 +Block 0018 [ 81]: ff7a2b63db626acc +Block 0018 [ 82]: 4ff42dcd52320549 +Block 0018 [ 83]: 914a7a459398aa31 +Block 0018 [ 84]: ee51f62912e4ba33 +Block 0018 [ 85]: 6a9547de7f719ae6 +Block 0018 [ 86]: 515534b4c1a9b96e +Block 0018 [ 87]: af49c87f6cc80cab +Block 0018 [ 88]: 6e4037b2f8a44b6c +Block 0018 [ 89]: 4205d6e29532c56c +Block 0018 [ 90]: 8b4772cc0b174ebc +Block 0018 [ 91]: cb8ebf453087902b +Block 0018 [ 92]: 4725e327afb7bec5 +Block 0018 [ 93]: 20c361231f875f96 +Block 0018 [ 94]: 7b19053aaa2e3d99 +Block 0018 [ 95]: bf249d83ac92e83e +Block 0018 [ 96]: 79fd44ef823bddd6 +Block 0018 [ 97]: c1f1a2089940dbbe +Block 0018 [ 98]: b23109bfc79dd2d0 +Block 0018 [ 99]: 503f7aff2422c84a +Block 0018 [100]: 0e3eae25cd971986 +Block 0018 [101]: 4f55b8acfe8132d7 +Block 0018 [102]: 835190a8cce3d640 +Block 0018 [103]: d3c3e2d6be9bb545 +Block 0018 [104]: 903b4f4716a77729 +Block 0018 [105]: feac8b79414f6615 +Block 0018 [106]: e00e93f66de68aef +Block 0018 [107]: 6ad3b10817355a15 +Block 0018 [108]: 4ed19e42abb08129 +Block 0018 [109]: e7bb8588cc665460 +Block 0018 [110]: 49ef295634a90acf +Block 0018 [111]: e6a7881b69491467 +Block 0018 [112]: ee99ba0eab2c15d4 +Block 0018 [113]: 68c7e2218006e47c +Block 0018 [114]: 73bda829fdab534a +Block 0018 [115]: 1746c6743d7cbe37 +Block 0018 [116]: 47f0145c5b347fe6 +Block 0018 [117]: 6541d303cd230e44 +Block 0018 [118]: 9e2235cd3562fa39 +Block 0018 [119]: 103dd929e08da913 +Block 0018 [120]: e530d486b9c1c3ac +Block 0018 [121]: cdb3beda3d93767d +Block 0018 [122]: 9ffd5b80d6db00d2 +Block 0018 [123]: 1b03c689857a1268 +Block 0018 [124]: b19cbf649b04d17f +Block 0018 [125]: bc949d4214befa50 +Block 0018 [126]: fc9bb6c70f544751 +Block 0018 [127]: 17cb94b26db9fc77 +Block 0019 [ 0]: 4314154c5f8bfb7f +Block 0019 [ 1]: 3960b49759850cc7 +Block 0019 [ 2]: 8976b29aa88ba0e9 +Block 0019 [ 3]: 1961c02cf5bd3641 +Block 0019 [ 4]: 36cd5ad5ba621760 +Block 0019 [ 5]: 2b90507c27f79886 +Block 0019 [ 6]: c18aaa55cccfdb73 +Block 0019 [ 7]: d1c214ff58eb7c03 +Block 0019 [ 8]: 1378de6fc11c6541 +Block 0019 [ 9]: a56ecb0ac3b4af54 +Block 0019 [ 10]: 2d2190fd988dde5d +Block 0019 [ 11]: 84f3ee1af8e2af5b +Block 0019 [ 12]: 6dddf7618d5625be +Block 0019 [ 13]: 979c0ce7f7396465 +Block 0019 [ 14]: 11896471c733b0cc +Block 0019 [ 15]: 30a7692f04c7551b +Block 0019 [ 16]: f9f9f053c712aa09 +Block 0019 [ 17]: 58b44b128159e693 +Block 0019 [ 18]: 37e086353c6296c2 +Block 0019 [ 19]: 557f7c0aa022e101 +Block 0019 [ 20]: 5314aa7234e465e5 +Block 0019 [ 21]: 9d36d7f79f38c0cb +Block 0019 [ 22]: 89a72d1fb523a939 +Block 0019 [ 23]: 458747163d53ba06 +Block 0019 [ 24]: 7703d30593f95a8b +Block 0019 [ 25]: ec8311fbd6fd53f2 +Block 0019 [ 26]: 713c830141066152 +Block 0019 [ 27]: 4a62995d5ffbe602 +Block 0019 [ 28]: 6af0645d48bec0d6 +Block 0019 [ 29]: 27e45b09463f3dff +Block 0019 [ 30]: baa124296071c0fd +Block 0019 [ 31]: d16c5d4d4b1c8d2f +Block 0019 [ 32]: 9ac6176e1ef86aa1 +Block 0019 [ 33]: a47cee4462a9d6fc +Block 0019 [ 34]: 472f0c6fd49768fa +Block 0019 [ 35]: 52c6b14445e43848 +Block 0019 [ 36]: e8d71cf621702683 +Block 0019 [ 37]: 09ada9a60ad9c009 +Block 0019 [ 38]: d2b1449ad7e4b3e0 +Block 0019 [ 39]: 49bb73806621273d +Block 0019 [ 40]: 23171ad9f2922791 +Block 0019 [ 41]: b84891d44abdc33c +Block 0019 [ 42]: 333d7b252c09d8ed +Block 0019 [ 43]: 2b5a825ad59e10a4 +Block 0019 [ 44]: a2b7d87242a47ab6 +Block 0019 [ 45]: 78c603789153920e +Block 0019 [ 46]: c74772f388fe7abf +Block 0019 [ 47]: 6efe8e593bc16925 +Block 0019 [ 48]: 699162891707e631 +Block 0019 [ 49]: d0157fbd2b53030e +Block 0019 [ 50]: 9afa5daed35b7362 +Block 0019 [ 51]: 6793c8bc068da00f +Block 0019 [ 52]: 7e9edbe7feba10ae +Block 0019 [ 53]: 0a20088cd94941cc +Block 0019 [ 54]: aa3d527ab123df69 +Block 0019 [ 55]: ab75f2204a3d0324 +Block 0019 [ 56]: 964c7f893c365ea8 +Block 0019 [ 57]: 483a6808ea8790bc +Block 0019 [ 58]: 29b19f92e91f2f9c +Block 0019 [ 59]: 3a4ca873d9ad1d49 +Block 0019 [ 60]: ffdbd035ce98254c +Block 0019 [ 61]: 1be20771208967bc +Block 0019 [ 62]: 2d8fd4c1a2db84e9 +Block 0019 [ 63]: 7c05013f4e86cf36 +Block 0019 [ 64]: 32a65907c497fecf +Block 0019 [ 65]: 537804b593d1e020 +Block 0019 [ 66]: dad22ee481314e93 +Block 0019 [ 67]: bf616fd3f343980a +Block 0019 [ 68]: 8454052ca6d01d92 +Block 0019 [ 69]: 98382a5905785879 +Block 0019 [ 70]: 5c656a82d3a37c94 +Block 0019 [ 71]: 859ff66ae8019e17 +Block 0019 [ 72]: 1ac9b185efd30d59 +Block 0019 [ 73]: 694701c7f6c151ef +Block 0019 [ 74]: 86035ab5b492d8d7 +Block 0019 [ 75]: 6382b4fa05470299 +Block 0019 [ 76]: 7c0baaf7846825b5 +Block 0019 [ 77]: 55f1fecaf8ade443 +Block 0019 [ 78]: b3eda2e95c094348 +Block 0019 [ 79]: 840e5b37fe246ebd +Block 0019 [ 80]: aa85bd44078f5912 +Block 0019 [ 81]: 4f016b6d1a7508c1 +Block 0019 [ 82]: 1a2f83fd10f571ee +Block 0019 [ 83]: 8b38fceecb329171 +Block 0019 [ 84]: 6b5a8ba2f5afa6cc +Block 0019 [ 85]: b327aa70032e1b62 +Block 0019 [ 86]: 33d803f14f60c47c +Block 0019 [ 87]: 75411f058e6d9c92 +Block 0019 [ 88]: 424013b76efefd3c +Block 0019 [ 89]: 988e31f9985e32b6 +Block 0019 [ 90]: 36a2ecbd086d21e6 +Block 0019 [ 91]: c0cc2d8c896d1c67 +Block 0019 [ 92]: db70f98dbeaebcdd +Block 0019 [ 93]: 1433d6cf2fa2659c +Block 0019 [ 94]: 980f4efcab856f56 +Block 0019 [ 95]: fcc7e7e55faa441c +Block 0019 [ 96]: af22e93ab1b3d6de +Block 0019 [ 97]: e4815feb2c7317b1 +Block 0019 [ 98]: f0c02e5d140958e0 +Block 0019 [ 99]: be559709a94d435d +Block 0019 [100]: 3af7f5ebdadcd7e9 +Block 0019 [101]: 1323a5528cfe9894 +Block 0019 [102]: a0808f334ae43cff +Block 0019 [103]: 8b2c3a75006c0c5a +Block 0019 [104]: 387180249c231ee6 +Block 0019 [105]: 6d6b61885cc1759e +Block 0019 [106]: c703e8d94dcf72d9 +Block 0019 [107]: ad82be834e120dfd +Block 0019 [108]: bc4f3dc566411565 +Block 0019 [109]: 330cd1b8ed68386a +Block 0019 [110]: 1aa8639d72a79c51 +Block 0019 [111]: 5fb694dab1306633 +Block 0019 [112]: 872a2f427b6aaea2 +Block 0019 [113]: 6058670384ca92a8 +Block 0019 [114]: 701ba8e9a43f1fb8 +Block 0019 [115]: ff0589f989f9a9f7 +Block 0019 [116]: bc39e80dbe8946b8 +Block 0019 [117]: de0d6c1534faad54 +Block 0019 [118]: 04ec12783b64d1a6 +Block 0019 [119]: 59cfde4877e8691c +Block 0019 [120]: ce18fd19ef32feb9 +Block 0019 [121]: d734d700036c5912 +Block 0019 [122]: 6d58153be0df3a46 +Block 0019 [123]: 37e7d95f1815c981 +Block 0019 [124]: a543cd85f55168ae +Block 0019 [125]: e47dff1e4ed1ae7e +Block 0019 [126]: 29edc56980fc3dc0 +Block 0019 [127]: f4d7bbc79e4d3caf +Block 0020 [ 0]: 99b54612d5331442 +Block 0020 [ 1]: 1df109b2551f5cff +Block 0020 [ 2]: 8d7f342edf1f1ced +Block 0020 [ 3]: c52ae3d91c062623 +Block 0020 [ 4]: e3a9aa53339e7425 +Block 0020 [ 5]: c1c6de190f3c376a +Block 0020 [ 6]: b01061a26c2b3be5 +Block 0020 [ 7]: 35b7980d9f01a3ec +Block 0020 [ 8]: f36abc3066eeef34 +Block 0020 [ 9]: 6c6a1641be1b68ca +Block 0020 [ 10]: 8e81654080ebb01e +Block 0020 [ 11]: 3102256ba607483a +Block 0020 [ 12]: 8b179c528e84a0ac +Block 0020 [ 13]: a09af43d38700de7 +Block 0020 [ 14]: 57e1c72a076854c7 +Block 0020 [ 15]: 806d9d5bbae63fbc +Block 0020 [ 16]: 78e8baf331882e1f +Block 0020 [ 17]: 2875993187cf01f8 +Block 0020 [ 18]: 1db07ca0c8c1571a +Block 0020 [ 19]: bde598a325fc60d8 +Block 0020 [ 20]: a9b9ea0af0ce7552 +Block 0020 [ 21]: fe9c03e4901de695 +Block 0020 [ 22]: bd21ae857dbbe711 +Block 0020 [ 23]: 4d9f8da024ec27d9 +Block 0020 [ 24]: 3304bdbf57ad64f1 +Block 0020 [ 25]: 3c69c5fc82417a9b +Block 0020 [ 26]: a66d465e11d67c52 +Block 0020 [ 27]: 315070b1e7e7a2d8 +Block 0020 [ 28]: 7689fe180a552186 +Block 0020 [ 29]: a19f92527d77f1ad +Block 0020 [ 30]: 1dec4550e47ded4e +Block 0020 [ 31]: 47e340ee79e1e937 +Block 0020 [ 32]: 8b18ab4d70a89258 +Block 0020 [ 33]: 8b0f557cb2c5d6b0 +Block 0020 [ 34]: 562279f5f801a973 +Block 0020 [ 35]: 4f8ddf383e960f5f +Block 0020 [ 36]: aec60f9e5560e4b3 +Block 0020 [ 37]: 0f95d7160757f116 +Block 0020 [ 38]: 91fb5708a31df4b3 +Block 0020 [ 39]: e21b9fcb6d7ff780 +Block 0020 [ 40]: 36a7a60680d38c08 +Block 0020 [ 41]: 1fcac6fcd32a1d00 +Block 0020 [ 42]: f1026ee196f319b1 +Block 0020 [ 43]: dd8f46ea4886b7b9 +Block 0020 [ 44]: 35c62335537e7cbf +Block 0020 [ 45]: 8c353ab20852e073 +Block 0020 [ 46]: 69a6a3b13a46c746 +Block 0020 [ 47]: a6169fa549169c83 +Block 0020 [ 48]: c6bb5d303ed28f72 +Block 0020 [ 49]: ce4c7f745cde2de8 +Block 0020 [ 50]: 717d92d2a9c842c4 +Block 0020 [ 51]: df649d3a2919ca3c +Block 0020 [ 52]: 3b3f2310b1e47458 +Block 0020 [ 53]: 6f664ab9b206191c +Block 0020 [ 54]: 94b785ee0c5ac9a1 +Block 0020 [ 55]: df92354c9ab1d65f +Block 0020 [ 56]: 1276546bf5321547 +Block 0020 [ 57]: a65b38bf4c4fd99b +Block 0020 [ 58]: 6fa757438ddef903 +Block 0020 [ 59]: 4af3819a7cfd003b +Block 0020 [ 60]: 9f00b83185c90c15 +Block 0020 [ 61]: 72b821506b22be45 +Block 0020 [ 62]: 4baadadb24e5ef4f +Block 0020 [ 63]: dcb9e3d9c2406da1 +Block 0020 [ 64]: 534c7e46dc0da3c7 +Block 0020 [ 65]: c3f79ae0d244cbb9 +Block 0020 [ 66]: c093ed3f909efd22 +Block 0020 [ 67]: 8ec38073bc8c6f16 +Block 0020 [ 68]: b3cad456a6c4943b +Block 0020 [ 69]: bc7f40e766001aff +Block 0020 [ 70]: 35aeacc99092a2b9 +Block 0020 [ 71]: 1754588e2b90e14a +Block 0020 [ 72]: 9e4beabb01216807 +Block 0020 [ 73]: b18d269b6be68c5b +Block 0020 [ 74]: c84476ed288034e9 +Block 0020 [ 75]: e54edd60a9adb04d +Block 0020 [ 76]: 9f1f178bf34f5eb7 +Block 0020 [ 77]: 3ccccb0b6ea19f95 +Block 0020 [ 78]: ec17067b40d70152 +Block 0020 [ 79]: 341fbf6208d5e1fa +Block 0020 [ 80]: 9bcd09c030e71c95 +Block 0020 [ 81]: a004676b00008402 +Block 0020 [ 82]: 7a44d5bba550c975 +Block 0020 [ 83]: 25b45af16d682520 +Block 0020 [ 84]: c1df2912476f1b7a +Block 0020 [ 85]: c5a3651373817558 +Block 0020 [ 86]: e73f947765d51638 +Block 0020 [ 87]: a46887137d124b59 +Block 0020 [ 88]: b9aee454d4e109d1 +Block 0020 [ 89]: 3dff8b985a9ed506 +Block 0020 [ 90]: 137459f4dfa321cc +Block 0020 [ 91]: 76877953eb8dedab +Block 0020 [ 92]: 9bbac2f32b25eaec +Block 0020 [ 93]: b74998965f640906 +Block 0020 [ 94]: acc825a4ad52d287 +Block 0020 [ 95]: d197fdc61372c0cd +Block 0020 [ 96]: 5a4e95595b22a985 +Block 0020 [ 97]: a1fc30dd53054d3b +Block 0020 [ 98]: 22feaadf7b85fa4f +Block 0020 [ 99]: ffa4b7d06f2ee116 +Block 0020 [100]: f8cae02794177009 +Block 0020 [101]: 0c0da064cf078a0e +Block 0020 [102]: 3b4530a03afa5efc +Block 0020 [103]: 426a556b6d45a9ec +Block 0020 [104]: 27953a0a104c326b +Block 0020 [105]: db94f0756b6965cc +Block 0020 [106]: f301360676859492 +Block 0020 [107]: 707a4e21d3d8dc16 +Block 0020 [108]: eb115c2a7c9afe03 +Block 0020 [109]: ac784d0ac04f8f13 +Block 0020 [110]: 39d71ab9ffe878ab +Block 0020 [111]: b1443a770fce6211 +Block 0020 [112]: d10dd0565ff67628 +Block 0020 [113]: e1fb38a21599a693 +Block 0020 [114]: 9ee8e257cf634826 +Block 0020 [115]: d5f6e5170e1da3d8 +Block 0020 [116]: 9a10a7e8d7668df8 +Block 0020 [117]: 12298c1738cf4bc7 +Block 0020 [118]: 505f4a9720725022 +Block 0020 [119]: 20572575149e406b +Block 0020 [120]: b0bdd2ce731aa1cb +Block 0020 [121]: 96cde79047a80bb1 +Block 0020 [122]: ef4b364dd09598d4 +Block 0020 [123]: 4ded87a8b524729d +Block 0020 [124]: ef23734b6b00b198 +Block 0020 [125]: 54af6f6764f54d6d +Block 0020 [126]: c584a13771d952ad +Block 0020 [127]: a43755deb1070142 +Block 0021 [ 0]: eaf22a72257ece3e +Block 0021 [ 1]: bc3db8d75db6ab56 +Block 0021 [ 2]: f6fd83b4066f8478 +Block 0021 [ 3]: 612d22eda0ebe1a9 +Block 0021 [ 4]: 465477c0efeea0a8 +Block 0021 [ 5]: cfa5293a6fef2f5f +Block 0021 [ 6]: 23ea14915d5247dd +Block 0021 [ 7]: a2ed1868435d0781 +Block 0021 [ 8]: 83b20881f9332c81 +Block 0021 [ 9]: e8a61edb2c077a93 +Block 0021 [ 10]: c963e144d48b7872 +Block 0021 [ 11]: 8d4cbaa38c3a9fcc +Block 0021 [ 12]: d69c356de80d6cb7 +Block 0021 [ 13]: 9a433254d972c2a6 +Block 0021 [ 14]: d3a6458db7b5f574 +Block 0021 [ 15]: b152bc0809d76014 +Block 0021 [ 16]: cd80587aad983590 +Block 0021 [ 17]: 714df7d77e1f7471 +Block 0021 [ 18]: e56def8658adc47f +Block 0021 [ 19]: e32056e570f63065 +Block 0021 [ 20]: cfdaba585602ba13 +Block 0021 [ 21]: 691e36443ec4b181 +Block 0021 [ 22]: 93aaeea268573ece +Block 0021 [ 23]: 4312d3fd583bda77 +Block 0021 [ 24]: cee8c693eb1da004 +Block 0021 [ 25]: 0d6e0f419eee0037 +Block 0021 [ 26]: e9e4e113c0d7a023 +Block 0021 [ 27]: 366ee6913e04d0c9 +Block 0021 [ 28]: e5be4eb934faa2db +Block 0021 [ 29]: 5964b39808d5b797 +Block 0021 [ 30]: 42ecda87914bd65a +Block 0021 [ 31]: 5bfb873d10a207d7 +Block 0021 [ 32]: ca66068cf8c41ee3 +Block 0021 [ 33]: 376a2fe75f80be7b +Block 0021 [ 34]: 5ad07cad128d3a78 +Block 0021 [ 35]: 8dcb75e704a01312 +Block 0021 [ 36]: 2d4cdaabafb2011f +Block 0021 [ 37]: 4e4fc05aa0def3ac +Block 0021 [ 38]: 8ad7096e0b1966d4 +Block 0021 [ 39]: ed6086ed6c30399e +Block 0021 [ 40]: 6d6ad65c81e1e574 +Block 0021 [ 41]: 378f39e47b6d5022 +Block 0021 [ 42]: 623a21c9267b9efa +Block 0021 [ 43]: 0610511f07a7f9eb +Block 0021 [ 44]: 5680ce8724225437 +Block 0021 [ 45]: d5eb8daa9d713835 +Block 0021 [ 46]: a0b9f5efa5c9802d +Block 0021 [ 47]: e9333e99222c5aab +Block 0021 [ 48]: 597fbe9522296cd3 +Block 0021 [ 49]: ee7269c78dd9c000 +Block 0021 [ 50]: 03d3a1a6a7039b42 +Block 0021 [ 51]: 6df4eb00d4cebffb +Block 0021 [ 52]: 8295f7ac0ddc80bb +Block 0021 [ 53]: 9f0ead21df6e7856 +Block 0021 [ 54]: 9d48d524fe0d564a +Block 0021 [ 55]: f97a84fa8cf4143a +Block 0021 [ 56]: 5e238cdfb3a37dee +Block 0021 [ 57]: 13dd319d1576ce29 +Block 0021 [ 58]: b4a0b6c870ddd21d +Block 0021 [ 59]: 5ced7d1931881510 +Block 0021 [ 60]: e6362d3752dce714 +Block 0021 [ 61]: 64721226de7f4231 +Block 0021 [ 62]: 5e29523e73f0cb30 +Block 0021 [ 63]: 7e5c701c4a754eb9 +Block 0021 [ 64]: f90f9928575d19c8 +Block 0021 [ 65]: 5a87671b1792bb9e +Block 0021 [ 66]: 1ba1edb579ff5ce1 +Block 0021 [ 67]: d81f8269d698d8af +Block 0021 [ 68]: a95debed7aa19f9e +Block 0021 [ 69]: a7d9265743c5c802 +Block 0021 [ 70]: e6df5edc0823fbd3 +Block 0021 [ 71]: 1b3ef0d4395fbccf +Block 0021 [ 72]: 7f6bde3c73fc513d +Block 0021 [ 73]: 16cda4a056dc3a9d +Block 0021 [ 74]: 36563b6c92443394 +Block 0021 [ 75]: 749536d4491edf2f +Block 0021 [ 76]: ce011359b419b387 +Block 0021 [ 77]: 4c8455044dfc4dd5 +Block 0021 [ 78]: aa4d04037787ae89 +Block 0021 [ 79]: 3480568ed27e30aa +Block 0021 [ 80]: 436ff0c954f70457 +Block 0021 [ 81]: 6c6d781dc1817e60 +Block 0021 [ 82]: dbba7171652bcd3f +Block 0021 [ 83]: 62dea6260849c192 +Block 0021 [ 84]: 3d9d26097d6cc1f3 +Block 0021 [ 85]: 22639329408cc1b2 +Block 0021 [ 86]: 849d9f4bb0604fe3 +Block 0021 [ 87]: 01cc125b244e0ea8 +Block 0021 [ 88]: 7ebbb57a0de64d80 +Block 0021 [ 89]: c37ab535fc7d686e +Block 0021 [ 90]: adb00a142848417f +Block 0021 [ 91]: 3445a90c3e87fcd7 +Block 0021 [ 92]: e34ff72206ff1386 +Block 0021 [ 93]: 11626fc232e4270f +Block 0021 [ 94]: 28bbd829c97758de +Block 0021 [ 95]: 67b017e60ef4a655 +Block 0021 [ 96]: a720681c19c0fb13 +Block 0021 [ 97]: 7e1f2be672dd9c07 +Block 0021 [ 98]: c10afaa9599d6269 +Block 0021 [ 99]: 57bdf94c65106f2b +Block 0021 [100]: dc59da56d4e8c48b +Block 0021 [101]: 5ce2b008062974cd +Block 0021 [102]: d7950df8e7812438 +Block 0021 [103]: 0913b55a9026ff83 +Block 0021 [104]: 4d8311ba0f1a8c0d +Block 0021 [105]: fe53cd482d9a09bf +Block 0021 [106]: 1bdf01edc7da7f10 +Block 0021 [107]: d4391237df17af26 +Block 0021 [108]: 3d694dfcd22c5a91 +Block 0021 [109]: f1b09ca49bc8eec9 +Block 0021 [110]: 09f81a527a65c25e +Block 0021 [111]: cf3b08baf5856dbb +Block 0021 [112]: 12cabc43d1fb108e +Block 0021 [113]: b7c209c2bfde3031 +Block 0021 [114]: 02e0d3d4029e7510 +Block 0021 [115]: 36c7a4f9dcf9cae4 +Block 0021 [116]: 580cab16cc58aa6a +Block 0021 [117]: f502f9c2c13c00d5 +Block 0021 [118]: dbf6bcc189397a5c +Block 0021 [119]: 641d6882bf43781b +Block 0021 [120]: ff471cbbadce8b04 +Block 0021 [121]: 5fb8d2a88e62fa1a +Block 0021 [122]: bf56dea0710e9ef8 +Block 0021 [123]: 68eba851089279e7 +Block 0021 [124]: dee4e1f0a55f11f2 +Block 0021 [125]: 1729abaa6c28f626 +Block 0021 [126]: d1e4360bf9a99709 +Block 0021 [127]: 57cd8306d3c9972c +Block 0022 [ 0]: d9017177a669b6e5 +Block 0022 [ 1]: d2561f290188fbe2 +Block 0022 [ 2]: f5c9c509ab75bf4a +Block 0022 [ 3]: debd7125423ade4c +Block 0022 [ 4]: d89cd562b4dd7a29 +Block 0022 [ 5]: 944b7f8c8169715b +Block 0022 [ 6]: 4d7d25a7bd269bdf +Block 0022 [ 7]: 07e089a684eafbc7 +Block 0022 [ 8]: 9a9a15206e1bd87b +Block 0022 [ 9]: 885062c80f1323e6 +Block 0022 [ 10]: ffa7679520887020 +Block 0022 [ 11]: c29294b8d2736bf5 +Block 0022 [ 12]: 10bf9218eb2046a9 +Block 0022 [ 13]: 39a5fc7ecaf5e87e +Block 0022 [ 14]: a2f0798f897c0857 +Block 0022 [ 15]: 4dba832b267d8e91 +Block 0022 [ 16]: 7438fad141293cba +Block 0022 [ 17]: 3ec92fa015f218f0 +Block 0022 [ 18]: 18071da78366eeca +Block 0022 [ 19]: c8a7112b99128c1e +Block 0022 [ 20]: 04c3dbc620abb9cd +Block 0022 [ 21]: e63c4f3d8e79330b +Block 0022 [ 22]: 318615b27ad7c835 +Block 0022 [ 23]: 6429acacb6d345f7 +Block 0022 [ 24]: 036320dbb7f843e8 +Block 0022 [ 25]: c5221241c3397245 +Block 0022 [ 26]: 961c54c8b1a5bd7b +Block 0022 [ 27]: a3dd266a7d0f434f +Block 0022 [ 28]: e012c881f77fb9a7 +Block 0022 [ 29]: f39867b0dcc0baf9 +Block 0022 [ 30]: b3f236d9551e1fe1 +Block 0022 [ 31]: fea089089ba359a0 +Block 0022 [ 32]: cb3703237146bf20 +Block 0022 [ 33]: 73f0720fcae901a9 +Block 0022 [ 34]: a1c7de63038bd5f6 +Block 0022 [ 35]: 7c157239f4f4b199 +Block 0022 [ 36]: aeb4a9f78eabcdcd +Block 0022 [ 37]: b0f1e62f53e0e463 +Block 0022 [ 38]: 1c3acd6bdfd48f04 +Block 0022 [ 39]: 4c4ac7710afffbe0 +Block 0022 [ 40]: 0243e157d6d847ba +Block 0022 [ 41]: 2aeb704359df1996 +Block 0022 [ 42]: b0662086e5b73c39 +Block 0022 [ 43]: 05d79ef890244df4 +Block 0022 [ 44]: af01278314058d10 +Block 0022 [ 45]: 4372e42f10ef5443 +Block 0022 [ 46]: 438de8d30efd58a2 +Block 0022 [ 47]: 1bd8d75d30df4e7c +Block 0022 [ 48]: e3daf4091eb7097f +Block 0022 [ 49]: c6dbbdc0a6f9a781 +Block 0022 [ 50]: aef97c8fbbfbe25c +Block 0022 [ 51]: 0e6881706cb458a0 +Block 0022 [ 52]: e609f19ae55d5ffc +Block 0022 [ 53]: 17031d4c3738c72b +Block 0022 [ 54]: 5231693d9e2a207d +Block 0022 [ 55]: 50dbae42c1c0806c +Block 0022 [ 56]: cb01a7fd19a411b1 +Block 0022 [ 57]: 6859a8f3cfaa64c9 +Block 0022 [ 58]: 04defed4aaa73495 +Block 0022 [ 59]: f3ae8c7ce1882111 +Block 0022 [ 60]: 553c94b9dab67ae3 +Block 0022 [ 61]: f23f1bab715a7fe5 +Block 0022 [ 62]: 42b8e1e62d9174ff +Block 0022 [ 63]: ad75d5d56e0e0225 +Block 0022 [ 64]: f7460a269e67b3dc +Block 0022 [ 65]: 421c8a8a7d0c9833 +Block 0022 [ 66]: 06a3b172d2175ded +Block 0022 [ 67]: 223564e8a1801481 +Block 0022 [ 68]: c74c488483a39dce +Block 0022 [ 69]: 5c301a5fb7c7bb62 +Block 0022 [ 70]: 6d307c79268412d1 +Block 0022 [ 71]: e11b10b2f300fdc6 +Block 0022 [ 72]: 790a855854675477 +Block 0022 [ 73]: 9ddef4befcea38aa +Block 0022 [ 74]: 8fbc6fbd777cd48e +Block 0022 [ 75]: 3ee49861fb128f70 +Block 0022 [ 76]: 7583637e2397ed12 +Block 0022 [ 77]: ecae2f66700d1a4f +Block 0022 [ 78]: 4a4d4065d20d8349 +Block 0022 [ 79]: 65cf24b9e53a8fb4 +Block 0022 [ 80]: 99dbae8b2d889df2 +Block 0022 [ 81]: b9ac3793aafbd04b +Block 0022 [ 82]: 51c26c283f570544 +Block 0022 [ 83]: d16d8a09a8d47994 +Block 0022 [ 84]: cc57b8302e49656b +Block 0022 [ 85]: ac389ca16ad04216 +Block 0022 [ 86]: 8988e5b3a38d0ccc +Block 0022 [ 87]: 57f2686c27fe305f +Block 0022 [ 88]: 0e762dabcff6c25b +Block 0022 [ 89]: a45da9efeb14129b +Block 0022 [ 90]: 1c222d3f443d81c9 +Block 0022 [ 91]: 8fb5de5479c7a3b4 +Block 0022 [ 92]: a78c7ae1e313f074 +Block 0022 [ 93]: 9f8cb10b4bb4efe0 +Block 0022 [ 94]: 89e094fed9b5d688 +Block 0022 [ 95]: 577b162a6b10cfc0 +Block 0022 [ 96]: e220188a3a495256 +Block 0022 [ 97]: 2462082fd6415c0b +Block 0022 [ 98]: 72b7bd3af5f430a5 +Block 0022 [ 99]: 180e07c5fc6bad72 +Block 0022 [100]: e3738c9b8202dac5 +Block 0022 [101]: 4a253af6aa78901d +Block 0022 [102]: 79c249156bc8b4c9 +Block 0022 [103]: a4c9d12d7a1ca0ae +Block 0022 [104]: 41665c3cc225b69e +Block 0022 [105]: 42b4536ad5c5f09c +Block 0022 [106]: 9949fdb6c75e0fb9 +Block 0022 [107]: d124a71717d1c071 +Block 0022 [108]: d19982096015d9e2 +Block 0022 [109]: b80a05faf21e2911 +Block 0022 [110]: 50669ab3798654a9 +Block 0022 [111]: 05bbf71791adb8ca +Block 0022 [112]: 2b24afdacdbc7570 +Block 0022 [113]: feac8d01ae4b08dc +Block 0022 [114]: 4072a0567202afc5 +Block 0022 [115]: b50e1cb840bf5e3a +Block 0022 [116]: 34c6de5d4b22ffe7 +Block 0022 [117]: b0c05f78400ca0cb +Block 0022 [118]: c873334f15b4e1f7 +Block 0022 [119]: 39ad9d10b5e1d750 +Block 0022 [120]: 88a1ad499aca526f +Block 0022 [121]: aa2bd5a6c1f38caf +Block 0022 [122]: 603557577d75599c +Block 0022 [123]: f361f34f5820dff9 +Block 0022 [124]: 85ed6ef23956eac4 +Block 0022 [125]: bd26eacf31c7a353 +Block 0022 [126]: b2ffd15aa41db4e0 +Block 0022 [127]: e91021ab90f8cc95 +Block 0023 [ 0]: a29ad9956727f9cb +Block 0023 [ 1]: 524b13d7bf20dd27 +Block 0023 [ 2]: 14c0f637bb393dd3 +Block 0023 [ 3]: 29aad246fdada10b +Block 0023 [ 4]: d5b615fcec0c08a1 +Block 0023 [ 5]: 850221d183d0efbd +Block 0023 [ 6]: 13d223815685feac +Block 0023 [ 7]: 87e7c7bf9494f3cf +Block 0023 [ 8]: f2b24763c57bf743 +Block 0023 [ 9]: a955627873df3d9f +Block 0023 [ 10]: eb19072ea79b706e +Block 0023 [ 11]: 554f841bf8289187 +Block 0023 [ 12]: 5b2a7a1be684d10f +Block 0023 [ 13]: fb86695ec08991bc +Block 0023 [ 14]: d570ba9f4043e5a3 +Block 0023 [ 15]: ebc35889e61d4065 +Block 0023 [ 16]: 88328db3b597316e +Block 0023 [ 17]: 2ee2ebe41f9b15ba +Block 0023 [ 18]: 43d6aec812d2f7aa +Block 0023 [ 19]: d4e775fa43332640 +Block 0023 [ 20]: b806bcd4c2a3c968 +Block 0023 [ 21]: ebf8c4c91925ad87 +Block 0023 [ 22]: 57e8556a90240f0c +Block 0023 [ 23]: 8286650e1d23ba45 +Block 0023 [ 24]: ae934251ba4c4150 +Block 0023 [ 25]: d006bccf7f11fc65 +Block 0023 [ 26]: 0f66a89ec37bea84 +Block 0023 [ 27]: 6c4ff6a351250fd3 +Block 0023 [ 28]: bc2ed16b7ccd77da +Block 0023 [ 29]: f8992a75652efd74 +Block 0023 [ 30]: 541a0238d8c87aa4 +Block 0023 [ 31]: 60a419e0abc63204 +Block 0023 [ 32]: 9ab5285ed5a4886a +Block 0023 [ 33]: 70d2cd82c589ca56 +Block 0023 [ 34]: f14e21d1174f7038 +Block 0023 [ 35]: 045a340d0a05c6df +Block 0023 [ 36]: 265a854800392dfa +Block 0023 [ 37]: 1febb38eb7e840f3 +Block 0023 [ 38]: d7da8f296f748474 +Block 0023 [ 39]: 321e5bea25a1c0d3 +Block 0023 [ 40]: dfd8bb4afd35f8b2 +Block 0023 [ 41]: 94b8d2e10841ccbb +Block 0023 [ 42]: 6f114382039a8228 +Block 0023 [ 43]: e9da6a56692fa330 +Block 0023 [ 44]: 5bc2f30da0303c1a +Block 0023 [ 45]: d1bda2513b50bfc3 +Block 0023 [ 46]: 13334d39ee171bcb +Block 0023 [ 47]: ae9ea591b5930fce +Block 0023 [ 48]: 64973a25f91e2a82 +Block 0023 [ 49]: aff456b8d8d34f40 +Block 0023 [ 50]: 164dbfc91f4fa96b +Block 0023 [ 51]: 9dc6292bff5fbc5d +Block 0023 [ 52]: bb191847509ff434 +Block 0023 [ 53]: 10e9a0ad94ef7acc +Block 0023 [ 54]: d9954305d5f16c4f +Block 0023 [ 55]: d0a5957208441157 +Block 0023 [ 56]: 529205ea9738c777 +Block 0023 [ 57]: fe1cb6297e9ace0e +Block 0023 [ 58]: fd8e28400112061f +Block 0023 [ 59]: fb912ca9f8059fd1 +Block 0023 [ 60]: 0c2ea500a95da40b +Block 0023 [ 61]: 8a91a09684952f67 +Block 0023 [ 62]: 5f26b82d0c8417a7 +Block 0023 [ 63]: 2326074c848f0d02 +Block 0023 [ 64]: a23474e62e4744ed +Block 0023 [ 65]: 3ad865e5974f5527 +Block 0023 [ 66]: 3901c8a615c69aaf +Block 0023 [ 67]: 71cd871d7eb67c88 +Block 0023 [ 68]: 9fe70add737e4f1a +Block 0023 [ 69]: 87dcc3e08ad7d9d4 +Block 0023 [ 70]: e5ef3e417b23cb96 +Block 0023 [ 71]: b9373896f18c1e66 +Block 0023 [ 72]: 9e7786adfbce6085 +Block 0023 [ 73]: 3f91a9f344df4df1 +Block 0023 [ 74]: 2d526c15df0c84ff +Block 0023 [ 75]: 9ba7a5b5ee5de5b4 +Block 0023 [ 76]: 3d6ae44c06ab9887 +Block 0023 [ 77]: 4afe7b68d6464748 +Block 0023 [ 78]: 0a866a8c319fa828 +Block 0023 [ 79]: c8f841262c4f60d4 +Block 0023 [ 80]: f83563e151dfc565 +Block 0023 [ 81]: 310bd851ee8f72ee +Block 0023 [ 82]: dd50d4efe4195375 +Block 0023 [ 83]: 5cdff14af1b6be5c +Block 0023 [ 84]: f80f75c43c6374e8 +Block 0023 [ 85]: d17a7017c65a71b6 +Block 0023 [ 86]: 6700c8703fe2dd5b +Block 0023 [ 87]: 803ece8035840bd8 +Block 0023 [ 88]: d2e8da645cc4f0c3 +Block 0023 [ 89]: 4f0e262f60b4a0cd +Block 0023 [ 90]: e6118043496083d2 +Block 0023 [ 91]: d16b6ea9b44ac8d2 +Block 0023 [ 92]: 97d7ea25d23ec420 +Block 0023 [ 93]: 584389ba3e0466f5 +Block 0023 [ 94]: f7e33a38de304d1e +Block 0023 [ 95]: b1a8df3491b0cafa +Block 0023 [ 96]: ba545b5360692a6d +Block 0023 [ 97]: 0ca7cb54eeb9d32d +Block 0023 [ 98]: 617ced7b2c227496 +Block 0023 [ 99]: eefacf3c069f5845 +Block 0023 [100]: 391176458830f910 +Block 0023 [101]: c3fe4a86dc5bae9f +Block 0023 [102]: 6b36ab560852d6a2 +Block 0023 [103]: 207988111cb654f6 +Block 0023 [104]: 7b5e2576e2b3bb8e +Block 0023 [105]: ac267506fd370a46 +Block 0023 [106]: b4ee88ac9fcc6eba +Block 0023 [107]: 510d7b841c6d38d3 +Block 0023 [108]: 235d4e1bd7ffd276 +Block 0023 [109]: 2df8efc35016e0fb +Block 0023 [110]: d2577859f955b1b9 +Block 0023 [111]: c8f962216dc4ffad +Block 0023 [112]: 7846e4fc2ba62cb0 +Block 0023 [113]: 6b851256f5061ef8 +Block 0023 [114]: 497ee81cf6dda322 +Block 0023 [115]: 1620886ee32ef2ca +Block 0023 [116]: ff3079c7656033b9 +Block 0023 [117]: fc1b78a962226c50 +Block 0023 [118]: bf975fd236d5f371 +Block 0023 [119]: 4f7f421e74b21343 +Block 0023 [120]: ab1345b271fdaf8b +Block 0023 [121]: 308b376c1bdb360e +Block 0023 [122]: 6c63beff5d5dbafe +Block 0023 [123]: d0167e4bf9145352 +Block 0023 [124]: 222c497dc9a79c9f +Block 0023 [125]: e8248b9c830f7d58 +Block 0023 [126]: 1de80a68d405c3ef +Block 0023 [127]: d79ad55a65da2664 +Block 0024 [ 0]: 6969f641ffdfe715 +Block 0024 [ 1]: 9258b43ee34e21d9 +Block 0024 [ 2]: d50ffe6a5801f950 +Block 0024 [ 3]: 61b72030cbb4a177 +Block 0024 [ 4]: cafa82549198a73d +Block 0024 [ 5]: d1150c31b668f77e +Block 0024 [ 6]: 1fe77b51c643d8ae +Block 0024 [ 7]: 790bca1b555b9a9a +Block 0024 [ 8]: 7174696da064fe4f +Block 0024 [ 9]: 861deeae3929aec4 +Block 0024 [ 10]: 3a388025f4725473 +Block 0024 [ 11]: 9f2fd193b86e54e6 +Block 0024 [ 12]: 7dcafe338e777ea0 +Block 0024 [ 13]: f224bb7eedbd95b2 +Block 0024 [ 14]: c0b6d2f978ab0dec +Block 0024 [ 15]: 1f1ae23b9628a194 +Block 0024 [ 16]: b9dec21d58d34d8e +Block 0024 [ 17]: eef0ee6370727c70 +Block 0024 [ 18]: bc3ba66b8e252048 +Block 0024 [ 19]: 40d59fbfee193677 +Block 0024 [ 20]: d98ad7ba132685a8 +Block 0024 [ 21]: 16a00dfd8846515b +Block 0024 [ 22]: 0628d2508c84b5d7 +Block 0024 [ 23]: 23523cf2a4c53fb5 +Block 0024 [ 24]: 715d3ab7a9295ef5 +Block 0024 [ 25]: 50fbb85c3d387005 +Block 0024 [ 26]: 7964421278c0de1c +Block 0024 [ 27]: a30df4d76612f3d9 +Block 0024 [ 28]: ac93914885b34586 +Block 0024 [ 29]: a9a6084c17e06e6e +Block 0024 [ 30]: 9a8765c57557cf2f +Block 0024 [ 31]: 9535d5e5b1f0eefc +Block 0024 [ 32]: 160c2c3a863b6758 +Block 0024 [ 33]: 017158926c8902fe +Block 0024 [ 34]: eb0d01d4d1a5f399 +Block 0024 [ 35]: b458e852b548ef2f +Block 0024 [ 36]: 4a9f07351074ff05 +Block 0024 [ 37]: 891636249b931c48 +Block 0024 [ 38]: 1df71c0d7f49eceb +Block 0024 [ 39]: c0c17bf91a9348fa +Block 0024 [ 40]: 0c8ec34f06d0ca8d +Block 0024 [ 41]: c8a64e6518bca6e2 +Block 0024 [ 42]: 32a79e401b2033a1 +Block 0024 [ 43]: 4436a57b1984ebde +Block 0024 [ 44]: c4b635de2118e547 +Block 0024 [ 45]: b46a58c3da799e3d +Block 0024 [ 46]: 809428c1e866ee3c +Block 0024 [ 47]: 6a3fae63cc23b5b5 +Block 0024 [ 48]: 59cb5ddb257ba3f2 +Block 0024 [ 49]: 2cc69453f630e10c +Block 0024 [ 50]: 5b9c483dc73034bc +Block 0024 [ 51]: a77fa6d7baffdaf1 +Block 0024 [ 52]: 53c3624d4b339c82 +Block 0024 [ 53]: 03a2a64f36000e48 +Block 0024 [ 54]: abcdf3f1795c6c69 +Block 0024 [ 55]: 1f466a05d7965d5c +Block 0024 [ 56]: 9b6f8788e01c5381 +Block 0024 [ 57]: bf5e74b5e1c32ef2 +Block 0024 [ 58]: 4758b08aa9afe564 +Block 0024 [ 59]: 48f94e1fffe6438c +Block 0024 [ 60]: 4b4a2892f06818f2 +Block 0024 [ 61]: bceff5a99e47b620 +Block 0024 [ 62]: 3060d08b52af4aa1 +Block 0024 [ 63]: a3d9a165e5c65d79 +Block 0024 [ 64]: 123b231f7bf1be25 +Block 0024 [ 65]: cc1e3ad20d8f2356 +Block 0024 [ 66]: 69852803fcb614c4 +Block 0024 [ 67]: db7480b12650096c +Block 0024 [ 68]: cce190a49a4a96fa +Block 0024 [ 69]: ccc9b26c541113aa +Block 0024 [ 70]: d73544f23c5bd6cc +Block 0024 [ 71]: 55cd4e9884d01240 +Block 0024 [ 72]: b358876752a98151 +Block 0024 [ 73]: c1881eac1a053aad +Block 0024 [ 74]: 4789407f7d033e41 +Block 0024 [ 75]: 3360667505df643c +Block 0024 [ 76]: 579bf698b57c80a6 +Block 0024 [ 77]: 5b47d4d45b4a3f3e +Block 0024 [ 78]: b77d0607040d6c41 +Block 0024 [ 79]: 6884dac57b7f12ac +Block 0024 [ 80]: d3cc1f9fd938bb7e +Block 0024 [ 81]: 73a68dd0528fe5cd +Block 0024 [ 82]: c7859f68ad84be24 +Block 0024 [ 83]: 5b0db28343bbcc56 +Block 0024 [ 84]: ed31bbd129906e60 +Block 0024 [ 85]: 05f40f05ddc90ae9 +Block 0024 [ 86]: 4f4f039c3db15331 +Block 0024 [ 87]: 704e8b3862009b61 +Block 0024 [ 88]: a1edbf57f0b139ca +Block 0024 [ 89]: 78f5af917866a501 +Block 0024 [ 90]: a485e287c34a06b2 +Block 0024 [ 91]: 6cdd76520612e2ce +Block 0024 [ 92]: 39fa227307e0bb4f +Block 0024 [ 93]: 96245312a7935575 +Block 0024 [ 94]: 77f694a7b65e06ce +Block 0024 [ 95]: 0b4c5b0b23a0792a +Block 0024 [ 96]: ad46df6ff95fa686 +Block 0024 [ 97]: 02024ea948b9604b +Block 0024 [ 98]: beb882c124cd1ab8 +Block 0024 [ 99]: db7ec51f4fb2e3b6 +Block 0024 [100]: 148e6c98c2dcff3d +Block 0024 [101]: aa4e5910f5fe7772 +Block 0024 [102]: 665451a76989dba0 +Block 0024 [103]: aab9def1764c01de +Block 0024 [104]: 7187deed9a554c1c +Block 0024 [105]: a5dd3db07fc83d94 +Block 0024 [106]: 77b9f80938269a0a +Block 0024 [107]: a6512b101c9b02cc +Block 0024 [108]: f72ab2ecbcea2450 +Block 0024 [109]: 91b778f0a54da32b +Block 0024 [110]: 0dcb8a95679b55b4 +Block 0024 [111]: 9cd32122fe513e5d +Block 0024 [112]: b075bc86cceb1250 +Block 0024 [113]: 30bbf6f47551705f +Block 0024 [114]: 1d186a57f4818c81 +Block 0024 [115]: 501666ec7907c229 +Block 0024 [116]: cafbe336eb85f78d +Block 0024 [117]: d77bc0f41cf3adfe +Block 0024 [118]: 2d90197cf7095b6c +Block 0024 [119]: e42911f51b42d1d6 +Block 0024 [120]: 5faf35557a21aaf3 +Block 0024 [121]: 85be59bc0dd2201e +Block 0024 [122]: dd9295a14aef5e0e +Block 0024 [123]: b93a47670cf5b680 +Block 0024 [124]: a65ff50fc3bf9fc8 +Block 0024 [125]: 8d951d29aff95fa6 +Block 0024 [126]: 13bbbeeda75b273d +Block 0024 [127]: 98f195d7024186a0 +Block 0025 [ 0]: bba40f5a47d417b9 +Block 0025 [ 1]: 38e25e958235bb82 +Block 0025 [ 2]: 518e6b13a896b70f +Block 0025 [ 3]: 60405fe81faf9b64 +Block 0025 [ 4]: 2ced5f6ef3502bc8 +Block 0025 [ 5]: 79e7be1233ee4f0c +Block 0025 [ 6]: 3b978f674d06920e +Block 0025 [ 7]: 3df44338dbcefa3b +Block 0025 [ 8]: e4a94353df03ed60 +Block 0025 [ 9]: 59390ed09a0f47c9 +Block 0025 [ 10]: 9954694167bc7935 +Block 0025 [ 11]: 45577851e5fcf7a2 +Block 0025 [ 12]: ded46e2b0499a4dd +Block 0025 [ 13]: f00cafff22ac4044 +Block 0025 [ 14]: 511e53d92769a80f +Block 0025 [ 15]: af95973928a31f86 +Block 0025 [ 16]: 99b76728184ff8ac +Block 0025 [ 17]: a57e8f06400e1e2f +Block 0025 [ 18]: daa4835775144800 +Block 0025 [ 19]: 679a78622d3b16c5 +Block 0025 [ 20]: 5692552bd6ab8996 +Block 0025 [ 21]: c24ee7e93c3db671 +Block 0025 [ 22]: 61e434a343652398 +Block 0025 [ 23]: c47346cfd3191661 +Block 0025 [ 24]: f5e6ce91648c3c68 +Block 0025 [ 25]: 279f57679d6f6132 +Block 0025 [ 26]: 37c0a781cf440243 +Block 0025 [ 27]: 5ea5669a328cdf11 +Block 0025 [ 28]: 802d09ab6e7a0868 +Block 0025 [ 29]: 07eb1fa6bca9debb +Block 0025 [ 30]: ef3c12dd091134be +Block 0025 [ 31]: 2567727d448590c1 +Block 0025 [ 32]: e08540f824239b10 +Block 0025 [ 33]: 31c7beba56868274 +Block 0025 [ 34]: 077fc225a960ee90 +Block 0025 [ 35]: 301b82376a7ccae9 +Block 0025 [ 36]: fdd3881fc5fca41d +Block 0025 [ 37]: addce699566df76e +Block 0025 [ 38]: 092d9c03d980d984 +Block 0025 [ 39]: 7d98605e2aa3f4ac +Block 0025 [ 40]: 2608763bed27ec95 +Block 0025 [ 41]: 8782b2dff9b41089 +Block 0025 [ 42]: 3c3afbe5d82dac0d +Block 0025 [ 43]: 6bde148ab758b189 +Block 0025 [ 44]: d6ddd8914ac9cf79 +Block 0025 [ 45]: 52a1e1122baf014a +Block 0025 [ 46]: de57140a5c5aa9fd +Block 0025 [ 47]: 05db47d0e4e02af8 +Block 0025 [ 48]: 41990891d0444d56 +Block 0025 [ 49]: 547ff48a9d700720 +Block 0025 [ 50]: a810a834c1543a71 +Block 0025 [ 51]: 34fcaef0ef5d2f29 +Block 0025 [ 52]: fade3aa85d7cf180 +Block 0025 [ 53]: 1b574b782f1428c7 +Block 0025 [ 54]: e6e74b37b14430d4 +Block 0025 [ 55]: bcc097d24ab98a70 +Block 0025 [ 56]: 9e2954057a3d9414 +Block 0025 [ 57]: 7e6ea29ffbb0f63b +Block 0025 [ 58]: a7cc9ec051b86dad +Block 0025 [ 59]: 6f8274c9d96e52a7 +Block 0025 [ 60]: f447c520e61e4a60 +Block 0025 [ 61]: 27837b7d8014892f +Block 0025 [ 62]: 32c933e68fb44ff6 +Block 0025 [ 63]: df63aca26e3cd24c +Block 0025 [ 64]: bee83c8517f44de6 +Block 0025 [ 65]: 423ce78c74ed7149 +Block 0025 [ 66]: d8994e5735b66f8e +Block 0025 [ 67]: ce621833a2a3961f +Block 0025 [ 68]: b203e8ad73f78c2b +Block 0025 [ 69]: 5d602060b48c9acb +Block 0025 [ 70]: bbfd338d371fcbc8 +Block 0025 [ 71]: f299f99bdd7ba144 +Block 0025 [ 72]: 8324537878431c11 +Block 0025 [ 73]: 387dc9e73b15d8b3 +Block 0025 [ 74]: b943f301cf9f1f3d +Block 0025 [ 75]: cdf888ac99fff4f8 +Block 0025 [ 76]: 0eae3766686c5209 +Block 0025 [ 77]: 5f97d1fba4bcfcb4 +Block 0025 [ 78]: 715884edef0cf617 +Block 0025 [ 79]: e22540f279cc18d4 +Block 0025 [ 80]: f242de5481fd070d +Block 0025 [ 81]: ec292ce495f429a3 +Block 0025 [ 82]: d92a9fdd84a23406 +Block 0025 [ 83]: a7fc57fd55b481a2 +Block 0025 [ 84]: 383ac58faa6a8afa +Block 0025 [ 85]: e15530da8507a5e6 +Block 0025 [ 86]: 27eee21e792ca907 +Block 0025 [ 87]: c5ea9ec8a817e81f +Block 0025 [ 88]: 70008fdb121ecf32 +Block 0025 [ 89]: 978e2f5024aebf1d +Block 0025 [ 90]: 54143c4d79513ca4 +Block 0025 [ 91]: e5753e90346facad +Block 0025 [ 92]: b274b4c10a0161ff +Block 0025 [ 93]: 4f9096920761d015 +Block 0025 [ 94]: ae52b378a843f7d4 +Block 0025 [ 95]: 215f01ff30b7aeb2 +Block 0025 [ 96]: 5690ba842925161e +Block 0025 [ 97]: b7e25a89542e522c +Block 0025 [ 98]: 7644cfc97b40b48a +Block 0025 [ 99]: 4380c85f11f70baa +Block 0025 [100]: 94ba2b2707ebb3f2 +Block 0025 [101]: 89125afa70ed9ba4 +Block 0025 [102]: 5181f2282d281fe1 +Block 0025 [103]: f2f3dbcde02f7b28 +Block 0025 [104]: c0cca5a20a9cef7f +Block 0025 [105]: 6ee895188116cbc4 +Block 0025 [106]: e782e9270cecc673 +Block 0025 [107]: 95793a3c704b4dec +Block 0025 [108]: 5be31429be10f2bb +Block 0025 [109]: 8b2243083615ec15 +Block 0025 [110]: c5ade73601838bb6 +Block 0025 [111]: cc498fab3f9da0ea +Block 0025 [112]: 3fb7ce8e8ff8e31e +Block 0025 [113]: 9007393c51b786ce +Block 0025 [114]: 0d2e3be79e8be99c +Block 0025 [115]: 22a0992219b7d9c1 +Block 0025 [116]: 201a88022a7a5e5e +Block 0025 [117]: a5e413ff26993fa3 +Block 0025 [118]: ed88af659a44ff8e +Block 0025 [119]: a3a95740338b24b9 +Block 0025 [120]: c0c268eb4867d83a +Block 0025 [121]: 6bc5f961c03e2fc1 +Block 0025 [122]: 4707f39a3d5fc77d +Block 0025 [123]: 8aabb099015c1bd8 +Block 0025 [124]: eed1e19d8ca2a204 +Block 0025 [125]: 443a58299ed4223d +Block 0025 [126]: d74770e09dce90bb +Block 0025 [127]: 4b888c18c4236b8f +Block 0026 [ 0]: 7524ecdc95e7c6d7 +Block 0026 [ 1]: b3cb822ba2eceed0 +Block 0026 [ 2]: 7d987ffbecfccf8c +Block 0026 [ 3]: 3a258473aa1fdc9f +Block 0026 [ 4]: 83e61e2c136c00bf +Block 0026 [ 5]: caab98d5a6680f59 +Block 0026 [ 6]: 3908a0934c16862e +Block 0026 [ 7]: cc51e77f565be08f +Block 0026 [ 8]: 50d45dff2ee9795f +Block 0026 [ 9]: a35605e01aacbbc6 +Block 0026 [ 10]: 65c99361e71f2100 +Block 0026 [ 11]: 89a8baffa55ff0e5 +Block 0026 [ 12]: c65bec11667a437b +Block 0026 [ 13]: 090740aa017af145 +Block 0026 [ 14]: fab2e73cfa81f396 +Block 0026 [ 15]: 8679026a13ee01e3 +Block 0026 [ 16]: c05d58a1f3ab7333 +Block 0026 [ 17]: c896937796641e46 +Block 0026 [ 18]: ee27c718c81600aa +Block 0026 [ 19]: 0a3b9a30f844f5d0 +Block 0026 [ 20]: 567ee45f0a0c28d3 +Block 0026 [ 21]: cf3876bf24e2a5e8 +Block 0026 [ 22]: 9a2cafb3f511bf6e +Block 0026 [ 23]: 8487f16264a92081 +Block 0026 [ 24]: 74f04fae8ecf7090 +Block 0026 [ 25]: bd34df8e4e140159 +Block 0026 [ 26]: 24b7139c92dc8525 +Block 0026 [ 27]: 0553db4b337a9f7f +Block 0026 [ 28]: 1c24f59103b3a966 +Block 0026 [ 29]: a5175df227ce8de8 +Block 0026 [ 30]: f3b4ae3a1754e5c0 +Block 0026 [ 31]: 6c704dc1f8c64299 +Block 0026 [ 32]: 4d8a9c79d715519e +Block 0026 [ 33]: 8eaab1487cba16c8 +Block 0026 [ 34]: 528c6d737b994fd5 +Block 0026 [ 35]: fc8acca0cc21c09c +Block 0026 [ 36]: d61bc364f6ebaf18 +Block 0026 [ 37]: 8b94c071976e68a0 +Block 0026 [ 38]: 56ded45d70cd498b +Block 0026 [ 39]: 6a152849b21db2fd +Block 0026 [ 40]: 86bd73f44d45264b +Block 0026 [ 41]: c40ac98438a506ed +Block 0026 [ 42]: 5701ffca1aaad2ec +Block 0026 [ 43]: cff12b9747736945 +Block 0026 [ 44]: f9a6a6323192d3ab +Block 0026 [ 45]: 18c0163c6a7445a9 +Block 0026 [ 46]: ebba754fafbaa806 +Block 0026 [ 47]: da031098c2d192e1 +Block 0026 [ 48]: 2136f081115bb910 +Block 0026 [ 49]: 42cfafd06a770254 +Block 0026 [ 50]: 3cb4fe46c0f36b15 +Block 0026 [ 51]: 497e81c32e8afca4 +Block 0026 [ 52]: 69be4fb9638403d3 +Block 0026 [ 53]: 623d7fc341bb7b36 +Block 0026 [ 54]: 07d4519da1bd73f5 +Block 0026 [ 55]: 39af114fee896a8a +Block 0026 [ 56]: 9d7f584810c79e34 +Block 0026 [ 57]: f322aaa42a4ae198 +Block 0026 [ 58]: fb1aabd77964bde2 +Block 0026 [ 59]: d78ebb3d243f9b2d +Block 0026 [ 60]: 56a651b80a3da854 +Block 0026 [ 61]: edfd1fc542a8a0e6 +Block 0026 [ 62]: 0a46f95d3fae6429 +Block 0026 [ 63]: 3f20f938f650b5b6 +Block 0026 [ 64]: 54d570030c9c4837 +Block 0026 [ 65]: 5a2bef18df0d2e76 +Block 0026 [ 66]: b9e8a41eaba841cb +Block 0026 [ 67]: f5dcbf5174e0cbe2 +Block 0026 [ 68]: 70f5c1b6902e4a6d +Block 0026 [ 69]: 9761e7fb83ccb56f +Block 0026 [ 70]: 5f18b557308f0816 +Block 0026 [ 71]: a11c1e7aa6418541 +Block 0026 [ 72]: c631bafe9232e605 +Block 0026 [ 73]: 8826e45712fce91d +Block 0026 [ 74]: cd7e12f6195a79f9 +Block 0026 [ 75]: 9b8e8d667a3a4d1b +Block 0026 [ 76]: ef7efc9b3ae6f0a5 +Block 0026 [ 77]: 0f4c34f7f2ec4243 +Block 0026 [ 78]: 8f556330f679d973 +Block 0026 [ 79]: df7bda01e284a44e +Block 0026 [ 80]: eeabac8631c766ef +Block 0026 [ 81]: fef44e5ef6a3498c +Block 0026 [ 82]: 2d382ba1d1226d27 +Block 0026 [ 83]: b4f91bd12ec9f39f +Block 0026 [ 84]: 1db321ce939ddc97 +Block 0026 [ 85]: 7a5a0eabeab0078f +Block 0026 [ 86]: 51eb1dda474c86c1 +Block 0026 [ 87]: feb8d76a89319ec8 +Block 0026 [ 88]: d0039a53c43dfa4e +Block 0026 [ 89]: 82e48ec313b1cdea +Block 0026 [ 90]: c767da8cc93f5a1a +Block 0026 [ 91]: bfae99754e21e39c +Block 0026 [ 92]: 63fe97ada5387dbc +Block 0026 [ 93]: 2495c0d09d9f5d0a +Block 0026 [ 94]: bd2bbee826f6f61c +Block 0026 [ 95]: 59e3da689fe1d853 +Block 0026 [ 96]: e0f2181f9021901a +Block 0026 [ 97]: ce0bca4afe4bcdbd +Block 0026 [ 98]: 806ad96f49d275fb +Block 0026 [ 99]: ca66fff815705ad9 +Block 0026 [100]: 5e98c84e2bc4c65d +Block 0026 [101]: 138ce0cd914c7e4b +Block 0026 [102]: 1618685441796cd2 +Block 0026 [103]: 5652d9b9b577c1ca +Block 0026 [104]: fee05c49605b365d +Block 0026 [105]: 3a21df7d902490b6 +Block 0026 [106]: 0e56efb726856293 +Block 0026 [107]: ca9357c7d84aeaf3 +Block 0026 [108]: 814277096e54588a +Block 0026 [109]: ad5782d3e8183ea5 +Block 0026 [110]: 5258092311f7e6f9 +Block 0026 [111]: 16d04ef134231d8a +Block 0026 [112]: 4108069cb7d3c144 +Block 0026 [113]: b9fd8d673423e689 +Block 0026 [114]: 351480ec621ec66c +Block 0026 [115]: e6a6252aacf2671d +Block 0026 [116]: 7d2d586140549db6 +Block 0026 [117]: bfd7061371b05c96 +Block 0026 [118]: cfdcfe617d0483c4 +Block 0026 [119]: d573dd56878888fb +Block 0026 [120]: a040fd126cc375ae +Block 0026 [121]: 2d2c73cb9fe6db48 +Block 0026 [122]: 339570f37059f69e +Block 0026 [123]: 82ef4b1697bacaf7 +Block 0026 [124]: 1955bb40ef1fc395 +Block 0026 [125]: 8ff584d88baa7c9d +Block 0026 [126]: 0ad220eb031acb72 +Block 0026 [127]: 2484f6a33f13f23e +Block 0027 [ 0]: 1fda0c7229c75fdb +Block 0027 [ 1]: 3b057cc942f3cd3f +Block 0027 [ 2]: 31c9c320a5c0376a +Block 0027 [ 3]: cb00a56e4d62b45a +Block 0027 [ 4]: b7572461ea7d6726 +Block 0027 [ 5]: cbc887b494d57efa +Block 0027 [ 6]: cb1b6c6fc2d82eb9 +Block 0027 [ 7]: 33881117fe70f2a6 +Block 0027 [ 8]: 3d1cb35895213d3a +Block 0027 [ 9]: cadf7a6c0022d5f4 +Block 0027 [ 10]: a12c7a7bed011c22 +Block 0027 [ 11]: 536018ae6e9d2647 +Block 0027 [ 12]: 75c4cb0be2473d4d +Block 0027 [ 13]: 9764997b546ebb1a +Block 0027 [ 14]: dda4c694dab76ad4 +Block 0027 [ 15]: 55567a0d8ab9e123 +Block 0027 [ 16]: 2a49c160bb879bce +Block 0027 [ 17]: 5a2403c98b0f8ae8 +Block 0027 [ 18]: a4a92b12cb2b5c51 +Block 0027 [ 19]: ad1798fe3ab20086 +Block 0027 [ 20]: ea98bbeb727fd02e +Block 0027 [ 21]: 43958b17a50e1ec6 +Block 0027 [ 22]: 112a473821660ed4 +Block 0027 [ 23]: 987280b0b5818417 +Block 0027 [ 24]: f7f3543254541625 +Block 0027 [ 25]: 5ab76e1f9126f8ab +Block 0027 [ 26]: 65e55682ea820bdc +Block 0027 [ 27]: 972dc0ebaed288ab +Block 0027 [ 28]: f79b148835c0958d +Block 0027 [ 29]: 3ace78497080a361 +Block 0027 [ 30]: 9969a3d7b1befeaf +Block 0027 [ 31]: bd742e51395a89d3 +Block 0027 [ 32]: baf43c1483db2352 +Block 0027 [ 33]: e84ee2f1a84ece40 +Block 0027 [ 34]: 8f22dc4670472f04 +Block 0027 [ 35]: 2dcf99ef10f86670 +Block 0027 [ 36]: ce14e564c83002bc +Block 0027 [ 37]: 2e32ecc6db0741fa +Block 0027 [ 38]: ad4f625ed99e4383 +Block 0027 [ 39]: e6603fb0f3152626 +Block 0027 [ 40]: 32eaec4ac6c7c398 +Block 0027 [ 41]: 865a9e0a85b188b8 +Block 0027 [ 42]: 560965c1253f5da6 +Block 0027 [ 43]: 2693d2406683e622 +Block 0027 [ 44]: f43c35decf7602d7 +Block 0027 [ 45]: a5fff958abd0eeef +Block 0027 [ 46]: 8a33327b82089453 +Block 0027 [ 47]: 005bef4f733bc2c3 +Block 0027 [ 48]: 97a28713c59f913d +Block 0027 [ 49]: 5cd353bd83cdc6ef +Block 0027 [ 50]: 0aacbc79afddab85 +Block 0027 [ 51]: 4fe6b306da0bfa7d +Block 0027 [ 52]: 282f1a5d2122d391 +Block 0027 [ 53]: f438beb0459123af +Block 0027 [ 54]: 8d9a638b3e3972e1 +Block 0027 [ 55]: c57f98b7f0ebec5f +Block 0027 [ 56]: 493014c1e861a08d +Block 0027 [ 57]: 45dea4bb52398bb4 +Block 0027 [ 58]: 4202e23da13e9241 +Block 0027 [ 59]: 5ca76107962004d4 +Block 0027 [ 60]: 168a3f3fb1162c0c +Block 0027 [ 61]: 10a2c8451d4897d4 +Block 0027 [ 62]: 47be7e7ab8dade9e +Block 0027 [ 63]: 744d7e7a55d4300e +Block 0027 [ 64]: e6443af357da9913 +Block 0027 [ 65]: 385e14bfc8c813d0 +Block 0027 [ 66]: f3f6bbd7ce800d04 +Block 0027 [ 67]: 1e9bec6599344a5b +Block 0027 [ 68]: f58295f409ae0aef +Block 0027 [ 69]: 1fbed74bd118c839 +Block 0027 [ 70]: d5853cab4e59c44e +Block 0027 [ 71]: b94325cf3fbb0cad +Block 0027 [ 72]: 47e21f2b9ea96510 +Block 0027 [ 73]: 9cd1830ba9360d6c +Block 0027 [ 74]: 65f9e4a2bbb6bf7a +Block 0027 [ 75]: 3709eb11e8d6fece +Block 0027 [ 76]: f0faeac468e19460 +Block 0027 [ 77]: c4471652d4912143 +Block 0027 [ 78]: c876c69eccbece1d +Block 0027 [ 79]: 7950940be4fb865e +Block 0027 [ 80]: 1b4f4a1601f2c591 +Block 0027 [ 81]: e5706950d5d8f6b0 +Block 0027 [ 82]: 4042a47ec801379d +Block 0027 [ 83]: 6be04ec20118f578 +Block 0027 [ 84]: 001a180d065bce38 +Block 0027 [ 85]: 80964ddc465ba83d +Block 0027 [ 86]: 415c2aa44481ac91 +Block 0027 [ 87]: aed89f436287d7e3 +Block 0027 [ 88]: 802952efaaf3d094 +Block 0027 [ 89]: 1af0ad9a1610ed91 +Block 0027 [ 90]: 744f0d0bef283a27 +Block 0027 [ 91]: 1b689530c140618e +Block 0027 [ 92]: 4f7f8dc2b1bc8bf4 +Block 0027 [ 93]: 376ee176419f6bcb +Block 0027 [ 94]: 2ee40b0c2b7ffc4f +Block 0027 [ 95]: 7e368f2600d064e3 +Block 0027 [ 96]: 54553339b386dfbc +Block 0027 [ 97]: fd22006cdd6cc1d1 +Block 0027 [ 98]: aeaf9f07ce706f0c +Block 0027 [ 99]: 9a937eed3aaac150 +Block 0027 [100]: 50dbe43b498b11af +Block 0027 [101]: 03a25bcf482de7db +Block 0027 [102]: 1ac83d9c336e1ae5 +Block 0027 [103]: c7f954237ed53c26 +Block 0027 [104]: 7f8d262d30bd8811 +Block 0027 [105]: 9a47671a117cf278 +Block 0027 [106]: a0f96d1f1dbd203b +Block 0027 [107]: c8f89836bcb2ace2 +Block 0027 [108]: 6aa9b91c1cd82772 +Block 0027 [109]: 54445ab2a0e7dc23 +Block 0027 [110]: 66fc9ad87cf140db +Block 0027 [111]: 0159efe6983f9106 +Block 0027 [112]: b6cf18fdd907cf1d +Block 0027 [113]: 7696955344a1d27c +Block 0027 [114]: 1f3dfbd6e87b3d20 +Block 0027 [115]: 299d8c04822e399d +Block 0027 [116]: 0532c0de3a332eef +Block 0027 [117]: 696239a2ac2cbbb5 +Block 0027 [118]: 68f545a0ec2c696c +Block 0027 [119]: 048222d61d6f610d +Block 0027 [120]: 6584663441c18229 +Block 0027 [121]: a830dac83ecbaccd +Block 0027 [122]: 51f2a3e552d6153f +Block 0027 [123]: 7bdc0c6c3384f2b7 +Block 0027 [124]: e803e1fb1417ad70 +Block 0027 [125]: cf0ec4475e1e64fd +Block 0027 [126]: a4e27f7d5dc71200 +Block 0027 [127]: 06d4c361534e9911 +Block 0028 [ 0]: 32c41335ea9210b6 +Block 0028 [ 1]: 2908caade7811d5c +Block 0028 [ 2]: 4b1a563eb5a1d98d +Block 0028 [ 3]: 45cf5b4af41deea0 +Block 0028 [ 4]: 5909a634f94e4646 +Block 0028 [ 5]: ff552e94367fede7 +Block 0028 [ 6]: 8989b674682ab120 +Block 0028 [ 7]: 800dd98f9fa275ab +Block 0028 [ 8]: edffe0b58e9c86fd +Block 0028 [ 9]: c45282004f2814a8 +Block 0028 [ 10]: a521cf9953b68333 +Block 0028 [ 11]: 70abc3e590f22725 +Block 0028 [ 12]: 8f29ae090f8d0773 +Block 0028 [ 13]: e4d540b0329e3fd3 +Block 0028 [ 14]: 77fddd636772d800 +Block 0028 [ 15]: ba078e3c82b5318b +Block 0028 [ 16]: 56d10528600ed38a +Block 0028 [ 17]: 89d098154caa0893 +Block 0028 [ 18]: e4aa0f03e1cb18d5 +Block 0028 [ 19]: fc4cf7eb61cf8f4f +Block 0028 [ 20]: 44dc4ee07a7bfd74 +Block 0028 [ 21]: cb06692efcf18e23 +Block 0028 [ 22]: 5a9d5ebdacfef739 +Block 0028 [ 23]: 9790bad34a423c07 +Block 0028 [ 24]: 3383040615c439a7 +Block 0028 [ 25]: 226fde6e0cb002f1 +Block 0028 [ 26]: 7978d600dd285d8c +Block 0028 [ 27]: 0835c8b042d47a83 +Block 0028 [ 28]: b1a17cbff3060a9f +Block 0028 [ 29]: 4545802efeae6841 +Block 0028 [ 30]: 5367aec249f2b6de +Block 0028 [ 31]: 9a8422a7f6aea5e0 +Block 0028 [ 32]: 94cabf485e66553d +Block 0028 [ 33]: e57981e2b14887a4 +Block 0028 [ 34]: 93905e1e794d2205 +Block 0028 [ 35]: 6a4ff9e27c02848d +Block 0028 [ 36]: 10c8f985566fe580 +Block 0028 [ 37]: b3c3171e95becffa +Block 0028 [ 38]: eec81d0bcede8dd4 +Block 0028 [ 39]: b00be28516aca858 +Block 0028 [ 40]: 6934e88a20ace76c +Block 0028 [ 41]: 47f08f5592350122 +Block 0028 [ 42]: 14e17ffc342eebaf +Block 0028 [ 43]: 863d389922f73a18 +Block 0028 [ 44]: 0ff7df6a4bbf6bcd +Block 0028 [ 45]: 2faba6af4b500401 +Block 0028 [ 46]: 372768258430dfe1 +Block 0028 [ 47]: 01bcbd80ed1de995 +Block 0028 [ 48]: ae5afc3480fb7967 +Block 0028 [ 49]: f250d7a29d4be253 +Block 0028 [ 50]: 872e9136a10d0eb5 +Block 0028 [ 51]: 3564f6703348db6b +Block 0028 [ 52]: cf93aa26857f8ee7 +Block 0028 [ 53]: 1d299906531381e4 +Block 0028 [ 54]: ed7ca859c6d8b326 +Block 0028 [ 55]: 5bbab373efc162e8 +Block 0028 [ 56]: 41b53fef1db146c2 +Block 0028 [ 57]: 9867a1d10a2b388d +Block 0028 [ 58]: a5ad3d460ca549c4 +Block 0028 [ 59]: 8bed29dd5fc55562 +Block 0028 [ 60]: 3dcf490ad631e1a9 +Block 0028 [ 61]: ca435946ccb81dcb +Block 0028 [ 62]: 1b4562bcf9168a82 +Block 0028 [ 63]: 2fd4e872eaa1fe62 +Block 0028 [ 64]: b983dc5232d579d5 +Block 0028 [ 65]: 03c695c140c0edf1 +Block 0028 [ 66]: 12099ea1c402ac91 +Block 0028 [ 67]: e5afa04a89237da7 +Block 0028 [ 68]: a728ae68bd5437fc +Block 0028 [ 69]: b88fd09c300d4a2d +Block 0028 [ 70]: 9914366e0b3c126a +Block 0028 [ 71]: 8364641c737e50d1 +Block 0028 [ 72]: 122e37cb75998698 +Block 0028 [ 73]: 85572ba9771af0fe +Block 0028 [ 74]: a44b9f591f80b58a +Block 0028 [ 75]: 6459da15cb5d272f +Block 0028 [ 76]: ae12e0972e058f17 +Block 0028 [ 77]: a0e841ae6a81805d +Block 0028 [ 78]: 5acd71d74a03b7c9 +Block 0028 [ 79]: c1673f3dffac1f87 +Block 0028 [ 80]: 9683f8d059a3b697 +Block 0028 [ 81]: 15f48a9a018b5479 +Block 0028 [ 82]: e0a92373d66cb331 +Block 0028 [ 83]: b84417d7cb5bd6b3 +Block 0028 [ 84]: 22132d54c2fd5b3f +Block 0028 [ 85]: 785d35635126aacf +Block 0028 [ 86]: d0b53d2c7798ecce +Block 0028 [ 87]: 9b626d1e9b959bff +Block 0028 [ 88]: da50d0911145526d +Block 0028 [ 89]: 75312c2a5cf2e275 +Block 0028 [ 90]: fb3aa5e8a13c4046 +Block 0028 [ 91]: e1c7c3217dd12c33 +Block 0028 [ 92]: 07909d45807dd952 +Block 0028 [ 93]: 110ec96ff2ebdc7f +Block 0028 [ 94]: 7ea07fe9842efe47 +Block 0028 [ 95]: 425c93ed6006230c +Block 0028 [ 96]: b7fb64295a59a93d +Block 0028 [ 97]: 4efcb995d56337c4 +Block 0028 [ 98]: bf377c88a5af6c75 +Block 0028 [ 99]: ce50e122e1079e8e +Block 0028 [100]: 06b62a99c54dd329 +Block 0028 [101]: 5b0a20d8f32a0af9 +Block 0028 [102]: 3dcc3c5ac31473ed +Block 0028 [103]: edcdeeabbecb091c +Block 0028 [104]: 38e14f2ad8ddaef1 +Block 0028 [105]: 3949a00bdfc849d5 +Block 0028 [106]: 3b9f6f89d40e7f3e +Block 0028 [107]: fd7903c040f8ee1b +Block 0028 [108]: 7d2e15f404b0d354 +Block 0028 [109]: 44f182b1f5898001 +Block 0028 [110]: c07e54e736fcfc92 +Block 0028 [111]: 3261288fd6af25bc +Block 0028 [112]: 37eb6fb2c2600a4d +Block 0028 [113]: 5eb2713e33ebc44a +Block 0028 [114]: c1bc5125e04a3cc8 +Block 0028 [115]: 069c8e186b801b0d +Block 0028 [116]: 12cfde575ffb4f28 +Block 0028 [117]: 52c4b308cf636f0f +Block 0028 [118]: d0d7c70301717b1c +Block 0028 [119]: 5e336270c1e4be93 +Block 0028 [120]: bbc5117dafb3e016 +Block 0028 [121]: e92c253e4ff5c789 +Block 0028 [122]: 2fe2ef37a3bad40d +Block 0028 [123]: 5f2b5516992e9a7c +Block 0028 [124]: 751834695924b8b9 +Block 0028 [125]: 1690f02af7b84ea1 +Block 0028 [126]: 532fc595d9512246 +Block 0028 [127]: c61ba9a02850ea46 +Block 0029 [ 0]: add11aa00a1ea4d0 +Block 0029 [ 1]: fefe9582aaec41cd +Block 0029 [ 2]: 5cd4a89c4444635d +Block 0029 [ 3]: bdd0c9350b4a5094 +Block 0029 [ 4]: 5d0a829bca844556 +Block 0029 [ 5]: 186a40fca2ba9ad9 +Block 0029 [ 6]: b6607f2d0e772114 +Block 0029 [ 7]: 8fdad92bdeab4dfc +Block 0029 [ 8]: af5824fae0d6e220 +Block 0029 [ 9]: 1172624a43ce5a27 +Block 0029 [ 10]: 9efa1c98083ea629 +Block 0029 [ 11]: 2057b1f90d21994a +Block 0029 [ 12]: b4a78f175af13055 +Block 0029 [ 13]: a8067c8ecb690f89 +Block 0029 [ 14]: 696808a37d55b720 +Block 0029 [ 15]: 3ac7ac8bcf254afc +Block 0029 [ 16]: 3118370cc0dd00ea +Block 0029 [ 17]: 2076c62ed3b2abc5 +Block 0029 [ 18]: 17bb0bf6de2ddc05 +Block 0029 [ 19]: 25e529d36c8adab3 +Block 0029 [ 20]: 7b3e7cc26479761f +Block 0029 [ 21]: cbd465a0506827a4 +Block 0029 [ 22]: d37d375e0e95a1f5 +Block 0029 [ 23]: 76f8302d75ed5d19 +Block 0029 [ 24]: 2191acabbb23f800 +Block 0029 [ 25]: 3d377fb20887a356 +Block 0029 [ 26]: c7682304541f1323 +Block 0029 [ 27]: ceb43d33e7d3386a +Block 0029 [ 28]: 407add972d722890 +Block 0029 [ 29]: 93a767e25ada3ba7 +Block 0029 [ 30]: 8fed6af3edc7824f +Block 0029 [ 31]: bf01dfabc83a3c4c +Block 0029 [ 32]: fe1ef8d4ce519029 +Block 0029 [ 33]: f1a09603ee5fcdf2 +Block 0029 [ 34]: 67cc66acdff21067 +Block 0029 [ 35]: 1116b86114d72bcb +Block 0029 [ 36]: 56164ccc856823e4 +Block 0029 [ 37]: 3171a29cde173382 +Block 0029 [ 38]: cbf5e8127ef7fb2f +Block 0029 [ 39]: 884573ff59238a7b +Block 0029 [ 40]: 8c3565a5909ba912 +Block 0029 [ 41]: 58e7366a05905181 +Block 0029 [ 42]: dbf13d7043ede744 +Block 0029 [ 43]: de011ea9c7c23e54 +Block 0029 [ 44]: 428cad22d58f193a +Block 0029 [ 45]: 45de623cf58b0c53 +Block 0029 [ 46]: 483fc391de58d241 +Block 0029 [ 47]: e73d32757f024a7b +Block 0029 [ 48]: c835d9a411601ec6 +Block 0029 [ 49]: 4a3af9cc90fa8a69 +Block 0029 [ 50]: b1c327c3b12a12ff +Block 0029 [ 51]: 7fdc8c0ebd7c30b6 +Block 0029 [ 52]: 4b9b92ff0b10341c +Block 0029 [ 53]: 9d8b0c5831e6c994 +Block 0029 [ 54]: d47efb3be63d3e3d +Block 0029 [ 55]: ade765bf86f5df54 +Block 0029 [ 56]: 788fd7782936eeea +Block 0029 [ 57]: 540e48df4db64ada +Block 0029 [ 58]: 2fe776d6bf8d30a4 +Block 0029 [ 59]: 63c88f63651bea29 +Block 0029 [ 60]: 81aea09a44806f4b +Block 0029 [ 61]: d90a0f9ba502ac3f +Block 0029 [ 62]: 4f96462a8497a7c7 +Block 0029 [ 63]: a7ae07aeb861a596 +Block 0029 [ 64]: 3a1b6d5ebcfc303d +Block 0029 [ 65]: 723827adee4a8e15 +Block 0029 [ 66]: 72b52160c47894e1 +Block 0029 [ 67]: 15616dcc3f42f6e3 +Block 0029 [ 68]: de67114cc4170021 +Block 0029 [ 69]: 95ee35dfd896d229 +Block 0029 [ 70]: 7dc3c038cac0bb6a +Block 0029 [ 71]: e114afde3c1de71f +Block 0029 [ 72]: 93ea33127d3ce347 +Block 0029 [ 73]: bdee9a999f9f8214 +Block 0029 [ 74]: 3550c57e4800e4ca +Block 0029 [ 75]: 59bdb97534185fb3 +Block 0029 [ 76]: d4efb828dc1f5ff5 +Block 0029 [ 77]: 711c1f4bacce64ab +Block 0029 [ 78]: 459a1b080ac101c6 +Block 0029 [ 79]: ef8e36116123fc71 +Block 0029 [ 80]: 0d0fae7c0cf5e221 +Block 0029 [ 81]: 3b102939edcc0eae +Block 0029 [ 82]: 2d9b9bf5be11f338 +Block 0029 [ 83]: 271550e5da1f36de +Block 0029 [ 84]: cca29d23e9c467b4 +Block 0029 [ 85]: 744636c4a604ae60 +Block 0029 [ 86]: 89b8ee0f4749a36a +Block 0029 [ 87]: 65220bc4563a257a +Block 0029 [ 88]: b74c05e4eaa7cc4f +Block 0029 [ 89]: 086fd14ecdeb82e8 +Block 0029 [ 90]: 230b4c7e56c1ee7b +Block 0029 [ 91]: bae6c10b660c5111 +Block 0029 [ 92]: 07cd541cc6437cb1 +Block 0029 [ 93]: b5ea0b9f20ad5934 +Block 0029 [ 94]: 18e9b42ec8814d0e +Block 0029 [ 95]: e83fb10b5a09e073 +Block 0029 [ 96]: da5e28b56288ac58 +Block 0029 [ 97]: 174a4b4903b9c5d6 +Block 0029 [ 98]: 82bc2f5b6793b6cc +Block 0029 [ 99]: ac6b5c349715cfbf +Block 0029 [100]: 7a48fed3b0c9f26e +Block 0029 [101]: 4eeb834b011f248a +Block 0029 [102]: 2a1d26ca58e502b1 +Block 0029 [103]: 040c0107e7aaa35e +Block 0029 [104]: 3cdad0dfe1993113 +Block 0029 [105]: 1c49204462db6030 +Block 0029 [106]: 0bb6e36674aef59d +Block 0029 [107]: 78f8a4a051cb7d88 +Block 0029 [108]: a95d9a11b1b56cd1 +Block 0029 [109]: e3664edc847d987f +Block 0029 [110]: 699052c329fcd1c3 +Block 0029 [111]: 8b02281ab5d25587 +Block 0029 [112]: 61fa5bcacc25ec28 +Block 0029 [113]: 382590c5a74307db +Block 0029 [114]: de30a0f8f4c2f320 +Block 0029 [115]: c55f1987ae2aa60a +Block 0029 [116]: 8a724baccfc67cfa +Block 0029 [117]: de0cfef70f80dd8d +Block 0029 [118]: 77beeebf78cc6a32 +Block 0029 [119]: 617da08890f3c0e9 +Block 0029 [120]: 62bb69bb0f1c5160 +Block 0029 [121]: a93377cb766010b5 +Block 0029 [122]: 112da6ac115a74fb +Block 0029 [123]: e3a52beb05168b2b +Block 0029 [124]: f3fd36ecabb3527b +Block 0029 [125]: 64574738ec294c16 +Block 0029 [126]: d5333065268994d7 +Block 0029 [127]: b09bd8e650de9161 +Block 0030 [ 0]: 08dfb5b3fe406306 +Block 0030 [ 1]: c5312272e1f69b52 +Block 0030 [ 2]: cbdd6a284c512f4d +Block 0030 [ 3]: 687538b188f6bf15 +Block 0030 [ 4]: 5aee1a263441db4a +Block 0030 [ 5]: 00e32ad00ade10e7 +Block 0030 [ 6]: bab8788eafa26d22 +Block 0030 [ 7]: 7b843cae9bd7429c +Block 0030 [ 8]: 89ab7c909ce0afcb +Block 0030 [ 9]: 7fb383e1420a5e21 +Block 0030 [ 10]: b26b0cfbee87d48a +Block 0030 [ 11]: 983210f3de9b9047 +Block 0030 [ 12]: fb59126535223142 +Block 0030 [ 13]: db514d95f211c7fb +Block 0030 [ 14]: f515b48c97bd9515 +Block 0030 [ 15]: 7e68254e02cdd184 +Block 0030 [ 16]: c496044d88ab47c0 +Block 0030 [ 17]: 22db0bf93215dd06 +Block 0030 [ 18]: cf46a109f73acc39 +Block 0030 [ 19]: e6a9c9e5962a2bfc +Block 0030 [ 20]: 12797c2591967658 +Block 0030 [ 21]: 1014994c62a70462 +Block 0030 [ 22]: 90a53cae4c9b0e1f +Block 0030 [ 23]: a633d50ff83bcb8d +Block 0030 [ 24]: 70a6e461bd449dbf +Block 0030 [ 25]: 4da0098f9c7a5453 +Block 0030 [ 26]: a09198d0dfe7713b +Block 0030 [ 27]: 6eb90d60a5ba7529 +Block 0030 [ 28]: 81d8c5ebe039a33b +Block 0030 [ 29]: 4e37f98a762ef594 +Block 0030 [ 30]: 1abfad99141701c9 +Block 0030 [ 31]: 67ee74fa668481eb +Block 0030 [ 32]: 7a669dd3cb4cf59e +Block 0030 [ 33]: aea827dc1f7195ca +Block 0030 [ 34]: 5c80866eb9c926eb +Block 0030 [ 35]: 0d5dae78f6f6aa32 +Block 0030 [ 36]: da67e2bf0a9a4b77 +Block 0030 [ 37]: 8a18b58bfcb1cd04 +Block 0030 [ 38]: fa0637bd520b412c +Block 0030 [ 39]: 3d018060fe8aa1e0 +Block 0030 [ 40]: c6c79556dedc0000 +Block 0030 [ 41]: 54265a1bfe4733f9 +Block 0030 [ 42]: dae1c5465ac7ce06 +Block 0030 [ 43]: 91d1e17536504207 +Block 0030 [ 44]: b16901c12fbbcec2 +Block 0030 [ 45]: b0cab54ebbc38c1a +Block 0030 [ 46]: cb177d1c379b6ba5 +Block 0030 [ 47]: 9e89831cd5f7af27 +Block 0030 [ 48]: c58c9ea11044eb08 +Block 0030 [ 49]: 0098fda05b1145c6 +Block 0030 [ 50]: ca02336bd40c4e33 +Block 0030 [ 51]: 77abb03f0e361d83 +Block 0030 [ 52]: bfa6459a28eb2f57 +Block 0030 [ 53]: 54d31d24130925b7 +Block 0030 [ 54]: a12618fe3ca0c681 +Block 0030 [ 55]: a24b0483c9958e0a +Block 0030 [ 56]: 64d5a56781f4d6f4 +Block 0030 [ 57]: e20130a5f6d87d0a +Block 0030 [ 58]: 5f580a9102de8a68 +Block 0030 [ 59]: 502a334100566829 +Block 0030 [ 60]: 797750bf411eb51b +Block 0030 [ 61]: 62a09e380225fc5e +Block 0030 [ 62]: b33ee6ddb9ac36f8 +Block 0030 [ 63]: 9ad1dd87f3ee6417 +Block 0030 [ 64]: c665959960517a13 +Block 0030 [ 65]: 4e5cbc7e627f4e24 +Block 0030 [ 66]: cf059e777b429508 +Block 0030 [ 67]: b9927671cb6d6302 +Block 0030 [ 68]: 19926b6bda53e8fe +Block 0030 [ 69]: 423ba4b5555df12a +Block 0030 [ 70]: d733c68771548188 +Block 0030 [ 71]: 29a6ccd4536f41dc +Block 0030 [ 72]: 5c0d40dfa1a71042 +Block 0030 [ 73]: 181b1f0ff83ca88d +Block 0030 [ 74]: f8d3a324d605f361 +Block 0030 [ 75]: c7ad66be1e571c2e +Block 0030 [ 76]: 2a21a8c1e20120b0 +Block 0030 [ 77]: 02952b2500d1efa2 +Block 0030 [ 78]: adf8c180acee7d49 +Block 0030 [ 79]: 8237b37ed5f21ac5 +Block 0030 [ 80]: bfd242ac3779da36 +Block 0030 [ 81]: d7b855378e7fbdd2 +Block 0030 [ 82]: 170f22ae96fe001f +Block 0030 [ 83]: 8eab780bebebf04a +Block 0030 [ 84]: 477e80264e61af76 +Block 0030 [ 85]: dc69e31592d53b7e +Block 0030 [ 86]: 328fb77f8bae2fcc +Block 0030 [ 87]: c455a0092a29ea78 +Block 0030 [ 88]: 1800e6910efc272b +Block 0030 [ 89]: aafdfa08b9556b15 +Block 0030 [ 90]: ad91adfa49ce7d6b +Block 0030 [ 91]: 877b80cac732ef89 +Block 0030 [ 92]: 44674288a92e8bd9 +Block 0030 [ 93]: 79f4d5eaf13b6f7f +Block 0030 [ 94]: 684b87a9b0d52671 +Block 0030 [ 95]: d9db925848ab10d7 +Block 0030 [ 96]: 0f2b06ba22a78c8f +Block 0030 [ 97]: b243791bc790a685 +Block 0030 [ 98]: 1170616247ef89f1 +Block 0030 [ 99]: 5aeff68c2d24e50e +Block 0030 [100]: 4343a891e18c7467 +Block 0030 [101]: 75d3996a744fa7d5 +Block 0030 [102]: 48914f9a89dbc621 +Block 0030 [103]: 0e2fb9f7e0f8178b +Block 0030 [104]: a4788b9e0fd44e18 +Block 0030 [105]: 591ea8f93e28cff6 +Block 0030 [106]: de9e9a4a5f89f020 +Block 0030 [107]: 1a88133a2a7ad118 +Block 0030 [108]: 115997bfc3fd9306 +Block 0030 [109]: 30a4ad4d9ef28ef6 +Block 0030 [110]: d537b41a77b10f73 +Block 0030 [111]: 3369bdfb413b272b +Block 0030 [112]: 8e34565660c067bb +Block 0030 [113]: 3da1bd4281d3d62f +Block 0030 [114]: 1370fa3a826909b8 +Block 0030 [115]: 656e4e0c713a2771 +Block 0030 [116]: 8ad3b509c8186a57 +Block 0030 [117]: 4acfd4b8dacba1ba +Block 0030 [118]: bb6cfd146f147a75 +Block 0030 [119]: 4ce21db7ebc6bec5 +Block 0030 [120]: 3b037cf3d8980a60 +Block 0030 [121]: 58b03a7d9e6ab6d1 +Block 0030 [122]: ee0d4ee5f201021a +Block 0030 [123]: 6608e0f76e954f0b +Block 0030 [124]: 0a296388dc27b0a5 +Block 0030 [125]: 39436aba3e4b9171 +Block 0030 [126]: 5d9d8588ee7539a8 +Block 0030 [127]: ad10057b7c4da7e0 +Block 0031 [ 0]: b3c48688fc2b713b +Block 0031 [ 1]: 364781fc5f750423 +Block 0031 [ 2]: ea69a118315d23c7 +Block 0031 [ 3]: 4ac9ed2303ec053e +Block 0031 [ 4]: b6c7e3bfcc85a6f7 +Block 0031 [ 5]: 160b6b27cc70d7f1 +Block 0031 [ 6]: d9b57e9cc0aad16d +Block 0031 [ 7]: f51388fa42bd1428 +Block 0031 [ 8]: 8db628f8a2ccbf52 +Block 0031 [ 9]: 0ef96003d0231d89 +Block 0031 [ 10]: a77815f354a8e5b7 +Block 0031 [ 11]: d584a05b6814fdf8 +Block 0031 [ 12]: f74510d8ca59d0bb +Block 0031 [ 13]: 13c0fd32bdd2cc33 +Block 0031 [ 14]: 6b9516534e1e8ee1 +Block 0031 [ 15]: 34a15e4c62a6ab14 +Block 0031 [ 16]: 1882e2eba3ae44e9 +Block 0031 [ 17]: 957874ed3ac0ca45 +Block 0031 [ 18]: a471a22d5c6b42de +Block 0031 [ 19]: c56f33082e512277 +Block 0031 [ 20]: b81484ee71fe466f +Block 0031 [ 21]: 07d24fcbeb680a1e +Block 0031 [ 22]: f320052c7a5e3ca1 +Block 0031 [ 23]: 56a7f75059c8ff64 +Block 0031 [ 24]: 66d9988e90a28fc8 +Block 0031 [ 25]: c52009fa320c94fc +Block 0031 [ 26]: 38998b1a93fa14ed +Block 0031 [ 27]: 40fcfdcca6291c75 +Block 0031 [ 28]: cc025109722879c5 +Block 0031 [ 29]: 9e52089a827f9efd +Block 0031 [ 30]: 78b4b8748c01ddc2 +Block 0031 [ 31]: 5ffe0751b440f784 +Block 0031 [ 32]: 169ce11a3f88a85f +Block 0031 [ 33]: 33c9a0e2de1d0c3a +Block 0031 [ 34]: 85e428ffcd39101f +Block 0031 [ 35]: 3fa0828a33be4bc6 +Block 0031 [ 36]: 78196d7f8e4c8698 +Block 0031 [ 37]: 9f0c886cf76a8f7d +Block 0031 [ 38]: 4eb7c07ae742f382 +Block 0031 [ 39]: 467bb21382b7aa46 +Block 0031 [ 40]: 4bafc9489e5fbe32 +Block 0031 [ 41]: 1fb0fb5c81d35964 +Block 0031 [ 42]: c434eb81393e44f2 +Block 0031 [ 43]: 561f1f4b28c42edd +Block 0031 [ 44]: 277df226f23e81ee +Block 0031 [ 45]: c08d4113b941697a +Block 0031 [ 46]: 829e09624e128f31 +Block 0031 [ 47]: 6283d40b695d8127 +Block 0031 [ 48]: 9655b9e317f39b77 +Block 0031 [ 49]: 7b68f551daff8793 +Block 0031 [ 50]: c7703dbdf2683b4e +Block 0031 [ 51]: 55c627bbe2d149d1 +Block 0031 [ 52]: a3a66eff7c8051ae +Block 0031 [ 53]: a26573784f8e6ab3 +Block 0031 [ 54]: b5f1e85d216f7949 +Block 0031 [ 55]: f4f73a7c4b9aad80 +Block 0031 [ 56]: 7825ab8d82f2e119 +Block 0031 [ 57]: 477b0475d80ecb8c +Block 0031 [ 58]: 55d7e5090c40da89 +Block 0031 [ 59]: f78377f6048ae4f7 +Block 0031 [ 60]: 8cd3f34ad475a8d6 +Block 0031 [ 61]: 4b083d7bdd6a8cba +Block 0031 [ 62]: 95d8abfb240c4814 +Block 0031 [ 63]: a3377ef2f90de6c2 +Block 0031 [ 64]: dbc89827423716f1 +Block 0031 [ 65]: 335e301508ad645f +Block 0031 [ 66]: 651b44508cd7a07b +Block 0031 [ 67]: c6193afb80e62027 +Block 0031 [ 68]: 2a71a83b6e034408 +Block 0031 [ 69]: e434912f53a352bc +Block 0031 [ 70]: f9d50b8fb251136f +Block 0031 [ 71]: f27424b6c6eba780 +Block 0031 [ 72]: b2264f402f8ef79f +Block 0031 [ 73]: 81697a71fc39551d +Block 0031 [ 74]: 00c6a580d7f107b5 +Block 0031 [ 75]: d6c923bcda6464b2 +Block 0031 [ 76]: b94aa22a4d66b346 +Block 0031 [ 77]: f24aa1224c7568ed +Block 0031 [ 78]: f2b2b13c5372ec7e +Block 0031 [ 79]: 02f019342bfd68de +Block 0031 [ 80]: e7c71e7270a9125f +Block 0031 [ 81]: 5d48c3fde040dd13 +Block 0031 [ 82]: f0f48402df38fe5f +Block 0031 [ 83]: 3c181ea41dc2ec3c +Block 0031 [ 84]: 2beb6e97876b88cf +Block 0031 [ 85]: 7ea1174c0dc96fe5 +Block 0031 [ 86]: 1f8a392f03d0c079 +Block 0031 [ 87]: 4701d9fff4897905 +Block 0031 [ 88]: 14161fe99ea020a2 +Block 0031 [ 89]: 2fa89d01e50bfb3c +Block 0031 [ 90]: 909a26187893ff8c +Block 0031 [ 91]: d71a9cde6778796b +Block 0031 [ 92]: dc5c48410d2a711f +Block 0031 [ 93]: 6d157148168c2013 +Block 0031 [ 94]: a9534ea78f37392f +Block 0031 [ 95]: 04fe65b5dcc4223e +Block 0031 [ 96]: 76cdd2997d6eb568 +Block 0031 [ 97]: e1d576333a57d9ba +Block 0031 [ 98]: c1a31217c5f5599d +Block 0031 [ 99]: 4cb52c88e2e00fe8 +Block 0031 [100]: 153cfd925ef21b00 +Block 0031 [101]: 2e4f158d03b58211 +Block 0031 [102]: 639ffe731e811fcc +Block 0031 [103]: 24fb4a3d962e898b +Block 0031 [104]: e0bcc96f713b8ff9 +Block 0031 [105]: 0cf4c44703830b7f +Block 0031 [106]: b32cb05c07886e34 +Block 0031 [107]: ba08b062ccba50d0 +Block 0031 [108]: 91294b4aa9bc5a43 +Block 0031 [109]: 2d400f10c1b6a9be +Block 0031 [110]: 62a147f32799a447 +Block 0031 [111]: d8d5a2fd4fc9bfdf +Block 0031 [112]: 244d3a7fb1fabfec +Block 0031 [113]: c5b919604e91a5fb +Block 0031 [114]: 387d446b9148351b +Block 0031 [115]: afa4faf51d18ceb6 +Block 0031 [116]: 3d185ce015d811db +Block 0031 [117]: 055b8e4f1439bf47 +Block 0031 [118]: 96a004c174932568 +Block 0031 [119]: 7cde3345b6a6a927 +Block 0031 [120]: 3b2cd27114b81fc0 +Block 0031 [121]: 85a734f9649b30b3 +Block 0031 [122]: dbfac3c3ba955bdd +Block 0031 [123]: cbdd3b8c4c271e4f +Block 0031 [124]: be934f0029c83a48 +Block 0031 [125]: db7e4b8f39c91c7d +Block 0031 [126]: 60b2676ff06a944a +Block 0031 [127]: 802b5b8358cf77b4 +Tag: 96 a9 d4 e5 a1 73 40 92 c8 5e 29 f4 10 a4 59 14 a5 dd 1f 5c bf 08 b2 67 0d a6 8a 02 85 ab f3 2b diff --git a/deps/phc-winner-argon2-20190702/kats/argon2d_v16.shasum b/deps/phc-winner-argon2-20190702/kats/argon2d_v16.shasum new file mode 100644 index 000000000..6df69c8de --- /dev/null +++ b/deps/phc-winner-argon2-20190702/kats/argon2d_v16.shasum @@ -0,0 +1 @@ +4ec4569a016c3accc6a25a34252b03a6135939b3c452389917a3f3b65878165b argon2d_v16 diff --git a/deps/phc-winner-argon2-20190702/kats/argon2i b/deps/phc-winner-argon2-20190702/kats/argon2i new file mode 100644 index 000000000..2438db048 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/kats/argon2i @@ -0,0 +1,12304 @@ +======================================= +Argon2i version number 19 +======================================= +Memory: 32 KiB, Iterations: 3, Parallelism: 4 lanes, Tag length: 32 bytes +Password[32]: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +Salt[16]: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +Secret[8]: 03 03 03 03 03 03 03 03 +Associated data[12]: 04 04 04 04 04 04 04 04 04 04 04 04 +Pre-hashing digest: c4 60 65 81 52 76 a0 b3 e7 31 73 1c 90 2f 1f d8 0c f7 76 90 7f bb 7b 6a 5c a7 2e 7b 56 01 1f ee ca 44 6c 86 dd 75 b9 46 9a 5e 68 79 de c4 b7 2d 08 63 fb 93 9b 98 2e 5f 39 7c c7 d1 64 fd da a9 + + After pass 0: +Block 0000 [ 0]: f8f9e84545db08f6 +Block 0000 [ 1]: 9b073a5c87aa2d97 +Block 0000 [ 2]: d1e868d75ca8d8e4 +Block 0000 [ 3]: 349634174e1aebcc +Block 0000 [ 4]: eea679ca0b5f6de1 +Block 0000 [ 5]: 28f43caf97eba539 +Block 0000 [ 6]: 0f7895c9d5b3a714 +Block 0000 [ 7]: 34ee3afb003414a8 +Block 0000 [ 8]: 19e25e3ad0aea4dd +Block 0000 [ 9]: 0621947f5c64686c +Block 0000 [ 10]: f9eb4d3b70a00365 +Block 0000 [ 11]: 29d30205ecdbbfdd +Block 0000 [ 12]: bd82cd842052f713 +Block 0000 [ 13]: e465f1dd3eb4d797 +Block 0000 [ 14]: 56769e2b75d3d2e7 +Block 0000 [ 15]: fa423c1914be7eea +Block 0000 [ 16]: 62c74952efa4962e +Block 0000 [ 17]: 7452bcfeae5ed127 +Block 0000 [ 18]: 9b244b507058a767 +Block 0000 [ 19]: ad381b104b333277 +Block 0000 [ 20]: d74814cfe245d0a8 +Block 0000 [ 21]: 1e502a5c5fae8de4 +Block 0000 [ 22]: facc3eb8b94d3934 +Block 0000 [ 23]: 309a560639f36145 +Block 0000 [ 24]: 97c9414271065971 +Block 0000 [ 25]: 9d2d8e80f0b210fd +Block 0000 [ 26]: 8ad91ada654260d9 +Block 0000 [ 27]: e8f0199dc84ec601 +Block 0000 [ 28]: 259b8023dfe9f620 +Block 0000 [ 29]: a89f710764c84faa +Block 0000 [ 30]: 00ef7d0ed19c9170 +Block 0000 [ 31]: c3365e9be7f8ad9a +Block 0000 [ 32]: 0713eccea1449c39 +Block 0000 [ 33]: 76dfdcbc5418ca19 +Block 0000 [ 34]: 6dae38246899edb4 +Block 0000 [ 35]: d119c2592c32d2fd +Block 0000 [ 36]: 12588a09c09fa985 +Block 0000 [ 37]: fd7de45ad68146e2 +Block 0000 [ 38]: b8b2a32696f86ff5 +Block 0000 [ 39]: 7a8597fe96c79b15 +Block 0000 [ 40]: 0b1c32b869e29e8e +Block 0000 [ 41]: d109376ce2cd296a +Block 0000 [ 42]: 5930033519fbc3ea +Block 0000 [ 43]: 26c0615c70db9a06 +Block 0000 [ 44]: c52e63756eb284d6 +Block 0000 [ 45]: f46353b6fa27de93 +Block 0000 [ 46]: c3f16cd0bf50beb1 +Block 0000 [ 47]: 7cbb5010db6ca163 +Block 0000 [ 48]: 6df6fb9d5477cb8d +Block 0000 [ 49]: f76c9bc2200b9271 +Block 0000 [ 50]: 4307dd8d26190968 +Block 0000 [ 51]: 559d187e7f15ce59 +Block 0000 [ 52]: 3fa3181855fc8fae +Block 0000 [ 53]: 8a5c7a26545c3289 +Block 0000 [ 54]: 6e0dab49fbd175c9 +Block 0000 [ 55]: 162d68393ba63961 +Block 0000 [ 56]: 7e8bf654d150b577 +Block 0000 [ 57]: 245981b04758d084 +Block 0000 [ 58]: b94c1f15f33a00c3 +Block 0000 [ 59]: 09b776c573975316 +Block 0000 [ 60]: e059c7959776505f +Block 0000 [ 61]: c8dec45d870e2428 +Block 0000 [ 62]: 9d05dd926cbe5e24 +Block 0000 [ 63]: 07eadbb03290625e +Block 0000 [ 64]: 1813e236d70246c4 +Block 0000 [ 65]: 6b9e88ab27f282a1 +Block 0000 [ 66]: 8cab57c214d0e51b +Block 0000 [ 67]: 819344c6d98d7949 +Block 0000 [ 68]: 642adef349e0b4c2 +Block 0000 [ 69]: 9147532626665562 +Block 0000 [ 70]: 4ce7940e9759fa18 +Block 0000 [ 71]: 86d723f5cb5bfa23 +Block 0000 [ 72]: 5956a509891d3a19 +Block 0000 [ 73]: fb65eb9452479fe5 +Block 0000 [ 74]: 15600005da769dbc +Block 0000 [ 75]: 0460dfcc45a3df4c +Block 0000 [ 76]: 9aeaf38a4e4a76a9 +Block 0000 [ 77]: a32de9ae286662a0 +Block 0000 [ 78]: 6c77f20cb87d260b +Block 0000 [ 79]: b4ee4f5014fe19b3 +Block 0000 [ 80]: 786e8758451fedc0 +Block 0000 [ 81]: 9f8a3f5a0bea80d5 +Block 0000 [ 82]: 1f5ed85ddaa1bb51 +Block 0000 [ 83]: 431138b634bdf789 +Block 0000 [ 84]: 8fee5e61ed0f3a28 +Block 0000 [ 85]: 3f166d47f662999d +Block 0000 [ 86]: 01825a35d081ba83 +Block 0000 [ 87]: 363beef46f72e254 +Block 0000 [ 88]: c0404cbcaeb8b1e5 +Block 0000 [ 89]: bf01bb3491b46fd2 +Block 0000 [ 90]: a96f73ec77d2ea1b +Block 0000 [ 91]: 7307883b0bb3368c +Block 0000 [ 92]: 180c75845418050e +Block 0000 [ 93]: 9fdd76f0e4c993c1 +Block 0000 [ 94]: d27430c09a31f795 +Block 0000 [ 95]: b16a193a47b44cd5 +Block 0000 [ 96]: 07213b9404ed4cf7 +Block 0000 [ 97]: 71794be1c4c5f86a +Block 0000 [ 98]: 46ac3a39882cffc5 +Block 0000 [ 99]: b607228f89c849b3 +Block 0000 [100]: a686fe80a061b73d +Block 0000 [101]: 5da420bbf2060e84 +Block 0000 [102]: 41d90855f9cfdd8a +Block 0000 [103]: 0bd841213cab1533 +Block 0000 [104]: f2c61ec90b666394 +Block 0000 [105]: 2ccdba05749dfd50 +Block 0000 [106]: 892110f27c3b5cec +Block 0000 [107]: 83a48c906e85ec88 +Block 0000 [108]: 9e47d91d9fd201f6 +Block 0000 [109]: b63a128d51ad43c8 +Block 0000 [110]: b704ba46fcf4e5ff +Block 0000 [111]: b12ae3f3cd72953c +Block 0000 [112]: 757f5ab719072f8f +Block 0000 [113]: 7aa97ff2970a4983 +Block 0000 [114]: 26d6bfd165886039 +Block 0000 [115]: e7adc882d7cb951b +Block 0000 [116]: ada2f6156a676320 +Block 0000 [117]: 171d0b6b8aa5a810 +Block 0000 [118]: 23bed4ea02a196ee +Block 0000 [119]: 02f0188d935ab1ca +Block 0000 [120]: 35587bbaae997e8f +Block 0000 [121]: e019dc02fbbd82c7 +Block 0000 [122]: f6075ab25dbcf553 +Block 0000 [123]: fb9083c228f4a752 +Block 0000 [124]: 9d15acfaa9b10ba4 +Block 0000 [125]: f0a6348c8d1d5414 +Block 0000 [126]: 3677542aa326e00f +Block 0000 [127]: 4243b9abcf3da44a +Block 0001 [ 0]: ef764133b4ca7099 +Block 0001 [ 1]: 620440b335cfe9e1 +Block 0001 [ 2]: 57168a36ebcb7715 +Block 0001 [ 3]: ff3b0b0f3930071d +Block 0001 [ 4]: 45172aba01f6fb3f +Block 0001 [ 5]: 0e1606b528bbcc18 +Block 0001 [ 6]: 45e18c0a19181cfc +Block 0001 [ 7]: 82bfbe0920b6587e +Block 0001 [ 8]: 3bab67fb1c68f77a +Block 0001 [ 9]: 56c49774a6130f3b +Block 0001 [ 10]: 3a6dfe75c9eb7f87 +Block 0001 [ 11]: 73c5e435e706cfe0 +Block 0001 [ 12]: 4c99046a73c091a9 +Block 0001 [ 13]: af7daf0a40e91b94 +Block 0001 [ 14]: 9da14c9e8cbb3ecb +Block 0001 [ 15]: 60440e10556a8e9e +Block 0001 [ 16]: 83353ede182e7349 +Block 0001 [ 17]: 2421e9e19a58a64d +Block 0001 [ 18]: f1eb1a9a17260a7a +Block 0001 [ 19]: a1898333c9e704ba +Block 0001 [ 20]: 159219bddbc57599 +Block 0001 [ 21]: dfbe30755288733b +Block 0001 [ 22]: fe9df8f860580019 +Block 0001 [ 23]: 16a1ca7d3854643e +Block 0001 [ 24]: 485e3ac74e7231ba +Block 0001 [ 25]: beebe23e664c4a95 +Block 0001 [ 26]: c9049347422d9e0d +Block 0001 [ 27]: 4d88f3373c446af7 +Block 0001 [ 28]: b83c654f54013a30 +Block 0001 [ 29]: 75b41709be2283c4 +Block 0001 [ 30]: 83f2efbed5b0d3f0 +Block 0001 [ 31]: 04629de997b1b2b0 +Block 0001 [ 32]: 583c5766265c50fe +Block 0001 [ 33]: e0306a89eb326efd +Block 0001 [ 34]: 5c1f148541f18e2c +Block 0001 [ 35]: 0462bd80b505f544 +Block 0001 [ 36]: afa70cd1847e14ba +Block 0001 [ 37]: 4a107dc0330d7392 +Block 0001 [ 38]: a41d234f92da5fef +Block 0001 [ 39]: 5c1f1ef242e817ac +Block 0001 [ 40]: 4c21ded5b41e4094 +Block 0001 [ 41]: 5382efd3508c2e0c +Block 0001 [ 42]: f99d3383b9f79cd4 +Block 0001 [ 43]: c59cf9cca42b6c3c +Block 0001 [ 44]: c1073a16b4609c9e +Block 0001 [ 45]: eeb0741015c0bec1 +Block 0001 [ 46]: 59fdebef1fa66310 +Block 0001 [ 47]: ac6041a2f43ddf7e +Block 0001 [ 48]: 1dfa0e2d9bf3acf9 +Block 0001 [ 49]: d424856738a27879 +Block 0001 [ 50]: a00c23feea1774f4 +Block 0001 [ 51]: 89aa283bcb83e2ea +Block 0001 [ 52]: d5c467511139648b +Block 0001 [ 53]: 736a35cbe2be51a7 +Block 0001 [ 54]: 2a9a116684b668a6 +Block 0001 [ 55]: 6c97a9ae3f327f6e +Block 0001 [ 56]: 7a37d7d11fa226a1 +Block 0001 [ 57]: e933955bb195f86f +Block 0001 [ 58]: 33e0ba8e788c608b +Block 0001 [ 59]: b191c25233ce5744 +Block 0001 [ 60]: a47cbd502d3d657d +Block 0001 [ 61]: 9373f7d43329517c +Block 0001 [ 62]: 69c08268cd250f03 +Block 0001 [ 63]: 64806d4cebc49823 +Block 0001 [ 64]: 51b7c4d051e70e05 +Block 0001 [ 65]: 91598eb48764ed2c +Block 0001 [ 66]: b9be7ab1d422d2c3 +Block 0001 [ 67]: eb4243989b24e6da +Block 0001 [ 68]: 0df9fb33ec5a2734 +Block 0001 [ 69]: db21c080fd6a4f45 +Block 0001 [ 70]: b33850abcfdd0713 +Block 0001 [ 71]: 7dad7d9d0be16da2 +Block 0001 [ 72]: ae3ccab55493d758 +Block 0001 [ 73]: d0d752f17120f636 +Block 0001 [ 74]: bc9d875ca9a5617b +Block 0001 [ 75]: f71b4218c11d1de7 +Block 0001 [ 76]: b71c8b9ad12f8574 +Block 0001 [ 77]: 1f47cd7880ee5f60 +Block 0001 [ 78]: 7e94dcef68d5437b +Block 0001 [ 79]: 5212acee74773cd5 +Block 0001 [ 80]: 447fe1f91d18984b +Block 0001 [ 81]: 42b651bbf71123bf +Block 0001 [ 82]: a36cbec05af8a16e +Block 0001 [ 83]: f0062604e61b9562 +Block 0001 [ 84]: 8de69b3901f9beed +Block 0001 [ 85]: 0ef87138213d49bb +Block 0001 [ 86]: ac23b588ee62df85 +Block 0001 [ 87]: 214784f404183fc6 +Block 0001 [ 88]: 80bd01721550b847 +Block 0001 [ 89]: 477d6c0b7cde2cbe +Block 0001 [ 90]: 52854d28f1c327ef +Block 0001 [ 91]: 6d023ae28c3aa0b8 +Block 0001 [ 92]: ad28349b9fb94455 +Block 0001 [ 93]: 9f03641c1e41fd77 +Block 0001 [ 94]: b7f2c676f362a9eb +Block 0001 [ 95]: 66974a6cf91ef0f3 +Block 0001 [ 96]: 767da5d9fc567f54 +Block 0001 [ 97]: 43b4c5bd3a112b5f +Block 0001 [ 98]: d14f0ebe0a796ebe +Block 0001 [ 99]: e4a7ade650871550 +Block 0001 [100]: 8841858fab3bbc24 +Block 0001 [101]: 9bf02ae3876cee46 +Block 0001 [102]: fb3d03e3030580de +Block 0001 [103]: 3cd714a5f553c6ae +Block 0001 [104]: 7301e5f821f928da +Block 0001 [105]: c2fc74e88d5b7cff +Block 0001 [106]: 6161d5101e4fd223 +Block 0001 [107]: 45cf0588a9a55a41 +Block 0001 [108]: 77902bd3439bf89d +Block 0001 [109]: 6fa5269812f867d1 +Block 0001 [110]: 2caa21dbd02ea223 +Block 0001 [111]: b776e0d326f8bf2b +Block 0001 [112]: 3f3959f6cf241888 +Block 0001 [113]: e2ad2d05b2095775 +Block 0001 [114]: 08403c042f8bfe87 +Block 0001 [115]: 2ee327dcc9e04a69 +Block 0001 [116]: 6031d492c05b0970 +Block 0001 [117]: 9b6f35141994e4a4 +Block 0001 [118]: 24427c298a09f2a6 +Block 0001 [119]: 3325ce5ef7c363fe +Block 0001 [120]: 5821f16b64830335 +Block 0001 [121]: 18d3c2a72d220c00 +Block 0001 [122]: 60c684f8541cdb39 +Block 0001 [123]: 53e20b76bdc07a15 +Block 0001 [124]: 396fd953e51a57f7 +Block 0001 [125]: 6c45c1dd68804fbb +Block 0001 [126]: 386e57e7fe152c87 +Block 0001 [127]: 2b8ab7d454b17187 +Block 0002 [ 0]: f800892a7954baa5 +Block 0002 [ 1]: bb211f064d193505 +Block 0002 [ 2]: 2c406a2eb271e25e +Block 0002 [ 3]: fa438cb81ec6e36f +Block 0002 [ 4]: 9735e9adcf04badc +Block 0002 [ 5]: 197193e9f53e6c35 +Block 0002 [ 6]: 260ee704b27a33d5 +Block 0002 [ 7]: fc9e533fe0595718 +Block 0002 [ 8]: 0a5b5d636945ddc1 +Block 0002 [ 9]: 2b8c865b8c7cbbc9 +Block 0002 [ 10]: 407b524588d22887 +Block 0002 [ 11]: 5bf322dd7ed3f320 +Block 0002 [ 12]: 68b0ac8fcd51f09e +Block 0002 [ 13]: e573f760dbeab339 +Block 0002 [ 14]: 8f9bbb1aa92d30df +Block 0002 [ 15]: de70db7a94f48763 +Block 0002 [ 16]: c7343a9920a08774 +Block 0002 [ 17]: 04a16cc553ccfd91 +Block 0002 [ 18]: ba758a5bcf1ceee1 +Block 0002 [ 19]: 302d7a2500b04827 +Block 0002 [ 20]: fab42113e7a58400 +Block 0002 [ 21]: 774d2f3fb3ebac54 +Block 0002 [ 22]: 039fb1f8b4bd0ae6 +Block 0002 [ 23]: a0062ed5dc741bfb +Block 0002 [ 24]: c1f8b84daf845788 +Block 0002 [ 25]: 676d9d836a19800a +Block 0002 [ 26]: a38f6fd865ac4848 +Block 0002 [ 27]: caeb787c80d60dd8 +Block 0002 [ 28]: c0ef86db1ef7dc8c +Block 0002 [ 29]: 2ab8f9a9e8e5c11d +Block 0002 [ 30]: a4541aee68c4eb23 +Block 0002 [ 31]: e95fe5830c6b8ba0 +Block 0002 [ 32]: 15b15aae605b133c +Block 0002 [ 33]: 96b0a14a369ec241 +Block 0002 [ 34]: ef41fbe7867703a6 +Block 0002 [ 35]: efd04ef060083c4e +Block 0002 [ 36]: 6989e447eb83bdc2 +Block 0002 [ 37]: 9a36016905584a79 +Block 0002 [ 38]: 0d13b26ce0ff9d05 +Block 0002 [ 39]: b4d7e57e14069ece +Block 0002 [ 40]: 1f0e4c518f1c8c1e +Block 0002 [ 41]: 8b78a9808d9690d2 +Block 0002 [ 42]: 90c2d89b2aed8a6b +Block 0002 [ 43]: ff2e5c3beb3a1815 +Block 0002 [ 44]: d496191f32068f3a +Block 0002 [ 45]: b8dfe21cb707da28 +Block 0002 [ 46]: d79319d5f2e41fab +Block 0002 [ 47]: 9a46839bc093121e +Block 0002 [ 48]: 5bac63652a33f3ec +Block 0002 [ 49]: 02c37aa9ae4990e8 +Block 0002 [ 50]: 1398f6f1dbb7af0f +Block 0002 [ 51]: 7eb5484d7affbb12 +Block 0002 [ 52]: 78660ba371fea159 +Block 0002 [ 53]: 98e4d1399d2362c8 +Block 0002 [ 54]: 8568b763f41a812d +Block 0002 [ 55]: b9bbbefe59138b97 +Block 0002 [ 56]: 86039e4a97b3f9c1 +Block 0002 [ 57]: 23f89f528c03a7d7 +Block 0002 [ 58]: 34602582e567cc92 +Block 0002 [ 59]: a85188de86a572bd +Block 0002 [ 60]: 8a73a6b3119b4089 +Block 0002 [ 61]: 7bc9311caf998892 +Block 0002 [ 62]: 938f52a89c882cc7 +Block 0002 [ 63]: 3caa06a9012cb757 +Block 0002 [ 64]: 54b797ab02e20770 +Block 0002 [ 65]: f96f77af4acc75c9 +Block 0002 [ 66]: fbfea542d5e8050e +Block 0002 [ 67]: d34858f9f7c0509e +Block 0002 [ 68]: 770353666b8d6d6d +Block 0002 [ 69]: 876cfcb815cb1825 +Block 0002 [ 70]: d5794151cc1d4b6b +Block 0002 [ 71]: c94613ec9e726d59 +Block 0002 [ 72]: b386eddf504649b4 +Block 0002 [ 73]: 048945fcd8814cd2 +Block 0002 [ 74]: 1ca2c95c74bda800 +Block 0002 [ 75]: c881bb4a4c047e6f +Block 0002 [ 76]: 7d0311c7ffc91e51 +Block 0002 [ 77]: fde167d6295385f8 +Block 0002 [ 78]: 25decd8821d31214 +Block 0002 [ 79]: 67dbf17c5a3615be +Block 0002 [ 80]: 235fce4fbbaf1b91 +Block 0002 [ 81]: f8cf3fe7dc09dd19 +Block 0002 [ 82]: 1047453126c4e863 +Block 0002 [ 83]: 8845e5b3deb21c6c +Block 0002 [ 84]: 4cbcfb62e7732ecb +Block 0002 [ 85]: f673aca506549a4a +Block 0002 [ 86]: 9273d099a3df174f +Block 0002 [ 87]: 08ffdc9464e5292b +Block 0002 [ 88]: c8ca072e21db9bba +Block 0002 [ 89]: 3c2610eb1e17098f +Block 0002 [ 90]: fe447430a6ac29a2 +Block 0002 [ 91]: 021f607556d333bf +Block 0002 [ 92]: 42f7f71e90b08b96 +Block 0002 [ 93]: c2e25d7dfaefc9bc +Block 0002 [ 94]: cc372cea39d95dea +Block 0002 [ 95]: c7bb1a34bce7deb7 +Block 0002 [ 96]: 3699605b8efc1d72 +Block 0002 [ 97]: b9d1203e5e5a9f93 +Block 0002 [ 98]: e0ac8c626778c5b9 +Block 0002 [ 99]: e8f0abe5bfffc759 +Block 0002 [100]: a0ddef1454f012c4 +Block 0002 [101]: c35b7e6bb3c129ef +Block 0002 [102]: c495ece8dffaa61f +Block 0002 [103]: 9f303d56213c5213 +Block 0002 [104]: c15b627a5137b819 +Block 0002 [105]: c767b5cdb34e6640 +Block 0002 [106]: 63970c306c5456b3 +Block 0002 [107]: 3c5d22fed3a34b4b +Block 0002 [108]: 77fcecc4982e6e5d +Block 0002 [109]: ad1612003aca1745 +Block 0002 [110]: e1952b3ba36fb7ad +Block 0002 [111]: bc654d244a26361a +Block 0002 [112]: 996cba723c6dee9f +Block 0002 [113]: abfd371026ffc462 +Block 0002 [114]: 2aca5170a54baf57 +Block 0002 [115]: fe5af00451aa2448 +Block 0002 [116]: adcc756aad83c72c +Block 0002 [117]: ea0b0fd40b596cb2 +Block 0002 [118]: e553a4d72df13b74 +Block 0002 [119]: 43d6b8d77a537397 +Block 0002 [120]: cdfd86bdf959205a +Block 0002 [121]: cb0e847adf1b1a21 +Block 0002 [122]: 7daf47cb8acefa5d +Block 0002 [123]: f473a1dc75308090 +Block 0002 [124]: b5c963edba8f5b31 +Block 0002 [125]: 977fe5978311b717 +Block 0002 [126]: 508d8a5d678bdce3 +Block 0002 [127]: a9fc0d3300c8acc0 +Block 0003 [ 0]: f29f5ee7dde3e2fa +Block 0003 [ 1]: a69ac3ce1bfbe156 +Block 0003 [ 2]: f20cd315e3237ea6 +Block 0003 [ 3]: f65add2c10041390 +Block 0003 [ 4]: 224a2f1d2d0cb714 +Block 0003 [ 5]: 852d30cc9e7667b2 +Block 0003 [ 6]: 5bae034c9ae55292 +Block 0003 [ 7]: 3693e7e73fcb7211 +Block 0003 [ 8]: 1bc540987729dad0 +Block 0003 [ 9]: 61bc9fef7ee05b1e +Block 0003 [ 10]: c349dbc3fbdd2373 +Block 0003 [ 11]: b9943f5eedfec4e6 +Block 0003 [ 12]: 78070afd731fad12 +Block 0003 [ 13]: 5bd3aab17f6b9d8c +Block 0003 [ 14]: a6b24b01005d202c +Block 0003 [ 15]: 333fe2532820ff48 +Block 0003 [ 16]: 1f4f7e472e2b8fb3 +Block 0003 [ 17]: f176be488974611a +Block 0003 [ 18]: 1e9f6f9231c09908 +Block 0003 [ 19]: 5d54c79477328673 +Block 0003 [ 20]: 3e7969bf3766cf2d +Block 0003 [ 21]: b4dcc50e5b21245b +Block 0003 [ 22]: 7a53bfcd6e7fc1b8 +Block 0003 [ 23]: 7212aeab8eccdb9b +Block 0003 [ 24]: 909aa8c6929eca7c +Block 0003 [ 25]: ff8a4ee4e6e07f69 +Block 0003 [ 26]: 5d189711c4cbf159 +Block 0003 [ 27]: 6e16fb8216c3341d +Block 0003 [ 28]: 74b7cf5d99f50dd9 +Block 0003 [ 29]: a3e420ff6430892f +Block 0003 [ 30]: 32bcd10ef54c9025 +Block 0003 [ 31]: 4040565062b0c14a +Block 0003 [ 32]: 48e8d06ee166f230 +Block 0003 [ 33]: a7941b7ef30da38b +Block 0003 [ 34]: dc303d0535fb39c0 +Block 0003 [ 35]: 704564c8a42f5387 +Block 0003 [ 36]: 995ae4804047a33c +Block 0003 [ 37]: c9aaed214935c044 +Block 0003 [ 38]: a1ddf242e51be1e1 +Block 0003 [ 39]: 509629b7401dae92 +Block 0003 [ 40]: aa08ce0caa96268c +Block 0003 [ 41]: 916ade45d30f4159 +Block 0003 [ 42]: 689738eedf7ebff5 +Block 0003 [ 43]: 1a7addd2b677db5f +Block 0003 [ 44]: fb5bb4c97d66b670 +Block 0003 [ 45]: 41a52657afbe3147 +Block 0003 [ 46]: 3883bc90bc1169d8 +Block 0003 [ 47]: ec52333d647d5b85 +Block 0003 [ 48]: 5a444fd37a3c4f27 +Block 0003 [ 49]: 8c32816c9d713368 +Block 0003 [ 50]: 5d5224766dd5d5db +Block 0003 [ 51]: 4904f3da1d5dcae4 +Block 0003 [ 52]: ce1a724bd5858367 +Block 0003 [ 53]: 8eccc94bf8659467 +Block 0003 [ 54]: f452f0b9278f115d +Block 0003 [ 55]: f0cbb770de867a30 +Block 0003 [ 56]: 7e52ecf3a381577c +Block 0003 [ 57]: 2b1228c2a7ba6127 +Block 0003 [ 58]: 5e826b4c3d378b86 +Block 0003 [ 59]: 2479e83e33f483eb +Block 0003 [ 60]: b98b54b722038d21 +Block 0003 [ 61]: f9e4729b6e07e4af +Block 0003 [ 62]: ac3e565b4b0d5c61 +Block 0003 [ 63]: 20f2acbd2702c2b0 +Block 0003 [ 64]: 2806b9b55ae9f42a +Block 0003 [ 65]: 3b0ff28da85596ff +Block 0003 [ 66]: 67de27987796c904 +Block 0003 [ 67]: 7cad0f6f1c0baf7d +Block 0003 [ 68]: 87394f6d9e6387a2 +Block 0003 [ 69]: e684ab37a27ffa95 +Block 0003 [ 70]: 40044ced68c8fcf8 +Block 0003 [ 71]: c3cd8c8d3a92a151 +Block 0003 [ 72]: 586fc6e2612b29d9 +Block 0003 [ 73]: 0a05e7e439049499 +Block 0003 [ 74]: a2e36bc85145c34c +Block 0003 [ 75]: ebdffd4eee30c7d0 +Block 0003 [ 76]: eb4bf0c46b2fd17d +Block 0003 [ 77]: a6247f3ec7467b0d +Block 0003 [ 78]: d35d387770f7b130 +Block 0003 [ 79]: 6587143e81164304 +Block 0003 [ 80]: 87a0d7265bb58016 +Block 0003 [ 81]: a0e8b7ed5337329a +Block 0003 [ 82]: 20bffc3919b2f8ee +Block 0003 [ 83]: 5bae72ac7bc9e98e +Block 0003 [ 84]: f0720b89617c114c +Block 0003 [ 85]: d458007dd3ad396d +Block 0003 [ 86]: f6a77609442e6dbc +Block 0003 [ 87]: 6927f28f9f2b3931 +Block 0003 [ 88]: 9dd53d1ba8546814 +Block 0003 [ 89]: 375b50984dd3215f +Block 0003 [ 90]: d916bca2077a3dfc +Block 0003 [ 91]: fddd15ac8ec81f25 +Block 0003 [ 92]: 5f7fc3b451ef209a +Block 0003 [ 93]: 04500f0944cfb165 +Block 0003 [ 94]: 55e97e7a0286d396 +Block 0003 [ 95]: 21a9d670b0d460d6 +Block 0003 [ 96]: 4b5ef30861dd497d +Block 0003 [ 97]: 05868fe9bee1b79a +Block 0003 [ 98]: 4090c8b98223f86a +Block 0003 [ 99]: 952446e47335d4cf +Block 0003 [100]: 8ce87f53a456595d +Block 0003 [101]: 2e337ac5f6c713ff +Block 0003 [102]: 14c0320208b056f7 +Block 0003 [103]: 4b62cfe312451641 +Block 0003 [104]: b84242c858a3c472 +Block 0003 [105]: 224c1df89e776cc7 +Block 0003 [106]: 4b87c369fba56549 +Block 0003 [107]: 7fc4979047128a2d +Block 0003 [108]: 1656d958d82950e4 +Block 0003 [109]: dfedfbee1e7e1006 +Block 0003 [110]: d682028ee41f8844 +Block 0003 [111]: 53f64e8bb452c43c +Block 0003 [112]: 3a0f16fa65ccd87f +Block 0003 [113]: b1563cdcd9ffa4a1 +Block 0003 [114]: 67fa21f7b286a798 +Block 0003 [115]: 0baa99c3ad450dc5 +Block 0003 [116]: e9bd5f54023ce367 +Block 0003 [117]: d08137ab3255eee1 +Block 0003 [118]: eb904d633401c297 +Block 0003 [119]: 3332a4249f22ad11 +Block 0003 [120]: a8f06f44894e1b5e +Block 0003 [121]: c8255151ffc2df5b +Block 0003 [122]: 8e4a109353c6adaf +Block 0003 [123]: 9b28b15b5d3174f4 +Block 0003 [124]: c6d904a8edee34c6 +Block 0003 [125]: 87375410235cbcd9 +Block 0003 [126]: 55bf929868fc10c3 +Block 0003 [127]: 127c01e4eb0a2de7 +Block 0004 [ 0]: c5669884e05e1054 +Block 0004 [ 1]: 3f94ff6ebc2b2554 +Block 0004 [ 2]: 8fbc379431b56422 +Block 0004 [ 3]: f88c86f1f1270af0 +Block 0004 [ 4]: 26b6ae60cef93b49 +Block 0004 [ 5]: 72b0b121127be7b5 +Block 0004 [ 6]: dab1be76dc74af93 +Block 0004 [ 7]: a03e9cfcc4ac8a05 +Block 0004 [ 8]: d8c9e3b84f55f063 +Block 0004 [ 9]: ffa26c3a57c34ad2 +Block 0004 [ 10]: bd74c5a8a2127eb8 +Block 0004 [ 11]: cea1dc181f6f2a21 +Block 0004 [ 12]: 4843f0f8551328b3 +Block 0004 [ 13]: 47b8b38b1acdb67a +Block 0004 [ 14]: 781232b450232fdd +Block 0004 [ 15]: 9e2377879037b3e2 +Block 0004 [ 16]: 85a04f0ffa72a07c +Block 0004 [ 17]: 39451ddefe9fc9d8 +Block 0004 [ 18]: 173704443ef64f6b +Block 0004 [ 19]: 84f4b473532ad2a1 +Block 0004 [ 20]: 3089cff815b0f3b8 +Block 0004 [ 21]: 233f0730c04ea4da +Block 0004 [ 22]: 6fec989fd9ca3751 +Block 0004 [ 23]: 950ca59da61af60d +Block 0004 [ 24]: 64ed9179567b182c +Block 0004 [ 25]: 5dc48b9fe1d0a171 +Block 0004 [ 26]: 2f66b2eb0ee38875 +Block 0004 [ 27]: d175513a90dd451a +Block 0004 [ 28]: 4206e0c724377abd +Block 0004 [ 29]: cc13835a191fa67b +Block 0004 [ 30]: 3053614f4145274f +Block 0004 [ 31]: 1ca6125149cac629 +Block 0004 [ 32]: 1ec4eb1d931fcec5 +Block 0004 [ 33]: b48d876f2c3b85d9 +Block 0004 [ 34]: e94ce07477ca43e9 +Block 0004 [ 35]: 700c79cbe93b4394 +Block 0004 [ 36]: e89e17b0489867ff +Block 0004 [ 37]: 3cd01ed6b3858f52 +Block 0004 [ 38]: 474dad41679d199b +Block 0004 [ 39]: 5b255cc1d055e5df +Block 0004 [ 40]: 4ccade7e3293957a +Block 0004 [ 41]: 4d73c3ed8f0f9dce +Block 0004 [ 42]: 682e559fef82408c +Block 0004 [ 43]: 55a3398f6c8ad9f0 +Block 0004 [ 44]: a38c1d494d186dc9 +Block 0004 [ 45]: d4d9cb29dda4e9a9 +Block 0004 [ 46]: 5a881e243e65800f +Block 0004 [ 47]: 3245ba87e34e6a01 +Block 0004 [ 48]: f8301e184fc6cda0 +Block 0004 [ 49]: 4c349af6614bdf35 +Block 0004 [ 50]: 38983beb42cabfa6 +Block 0004 [ 51]: 471b2b7d59aaf4c0 +Block 0004 [ 52]: 200340ed6848065c +Block 0004 [ 53]: fe5fa422a8539342 +Block 0004 [ 54]: 19db85340e85a4c7 +Block 0004 [ 55]: 764b873844fe5dc8 +Block 0004 [ 56]: f95b70aba7297760 +Block 0004 [ 57]: 28b74a30e88c25a4 +Block 0004 [ 58]: ff6052d1b7dc11b8 +Block 0004 [ 59]: 359fc7217f7b5ea3 +Block 0004 [ 60]: 7343b307e5077ab9 +Block 0004 [ 61]: 8150cdffb05bd766 +Block 0004 [ 62]: cc7c8dc0e4ab8231 +Block 0004 [ 63]: 16934251c5404298 +Block 0004 [ 64]: 5b8b9b3abdf59f9e +Block 0004 [ 65]: e9111f573f4630ab +Block 0004 [ 66]: 382795e34b2ec716 +Block 0004 [ 67]: fcc921aa39a2cff8 +Block 0004 [ 68]: 6705644ecca72318 +Block 0004 [ 69]: 43f91b74943af5ed +Block 0004 [ 70]: 4d7d1da11f036218 +Block 0004 [ 71]: e1c228cdfcd89e96 +Block 0004 [ 72]: 090f00dea2cc93be +Block 0004 [ 73]: b387db043b11e668 +Block 0004 [ 74]: 0da3856a53e7ca99 +Block 0004 [ 75]: af74d7028d88f1f6 +Block 0004 [ 76]: 0e0abae1e9a6f9f9 +Block 0004 [ 77]: 693fa44317e4a292 +Block 0004 [ 78]: 5db30f5a60e69d24 +Block 0004 [ 79]: 11c85a24b61982a9 +Block 0004 [ 80]: 799ce38a9797a637 +Block 0004 [ 81]: 22be541165077550 +Block 0004 [ 82]: 3e9d7987ed7393f2 +Block 0004 [ 83]: 346fc635e2423532 +Block 0004 [ 84]: c329869d6c743739 +Block 0004 [ 85]: 7e1776ce3430a617 +Block 0004 [ 86]: 4879c918b591a3d5 +Block 0004 [ 87]: df686348aa1bcc9d +Block 0004 [ 88]: 4c292b6cb6451b23 +Block 0004 [ 89]: 64a0a9e46c7f4944 +Block 0004 [ 90]: 0e66aa435ab0d3c2 +Block 0004 [ 91]: da8620defbe33208 +Block 0004 [ 92]: 65a8aebdc3b995f7 +Block 0004 [ 93]: f446a1293537c2a3 +Block 0004 [ 94]: a5c2b153c90dafbd +Block 0004 [ 95]: aee2502b1b7b6454 +Block 0004 [ 96]: f77055f60f6ded0f +Block 0004 [ 97]: 4c99ab5ec6d6cc51 +Block 0004 [ 98]: 8b0570e7d0993e6e +Block 0004 [ 99]: a57d13448847ab2e +Block 0004 [100]: 2e25763d3f1f8860 +Block 0004 [101]: 9438798b77b4c74c +Block 0004 [102]: 88e65057c688ebe4 +Block 0004 [103]: 23d18ba2061e692b +Block 0004 [104]: fa2590a606cb24bf +Block 0004 [105]: 959e41d5895359f9 +Block 0004 [106]: b2d9c8c2ea35b321 +Block 0004 [107]: 4ae5dd4861388fc1 +Block 0004 [108]: 7047bf4db43193ea +Block 0004 [109]: dc6a89e8e3031a84 +Block 0004 [110]: 49df122c84348347 +Block 0004 [111]: b9eaaf9df38dfa72 +Block 0004 [112]: a5eadb80efc9f742 +Block 0004 [113]: 6e289d7490d5e8df +Block 0004 [114]: 1d8dfa94f6a71ddd +Block 0004 [115]: 05d642c2d9accca5 +Block 0004 [116]: e2fa51b62d827843 +Block 0004 [117]: cc351a7fbc1d6c57 +Block 0004 [118]: 08483dae0fb2a6e7 +Block 0004 [119]: 1377a9b14e8a170a +Block 0004 [120]: 18dd33ecc8497fc6 +Block 0004 [121]: cc1bf6adee26abb2 +Block 0004 [122]: 1b0f9fa6148fdcb8 +Block 0004 [123]: d85c6b6f66af28d2 +Block 0004 [124]: edb28ef7c9fd8989 +Block 0004 [125]: 3482825859e2fc7f +Block 0004 [126]: 7aafe644d7847c19 +Block 0004 [127]: 2066cdb758166cd6 +Block 0005 [ 0]: c69d96a7bb15ad7c +Block 0005 [ 1]: cd7d7ed48d3cd0c5 +Block 0005 [ 2]: b9b77be8c3a6d644 +Block 0005 [ 3]: 5c090535da2bdf7e +Block 0005 [ 4]: 468ba6b3adecc383 +Block 0005 [ 5]: 9bdc6c810fb047b6 +Block 0005 [ 6]: 59fa24c0e4629f41 +Block 0005 [ 7]: 2671328033fbac24 +Block 0005 [ 8]: c52bf1f5c071984d +Block 0005 [ 9]: 941e98216ad7ba45 +Block 0005 [ 10]: 4512e358a8f202e9 +Block 0005 [ 11]: e04b6e394dc8fcbf +Block 0005 [ 12]: edeee98a26d2ed10 +Block 0005 [ 13]: acfa10bcafede436 +Block 0005 [ 14]: 0327e4dccfda0df3 +Block 0005 [ 15]: 1517590ce6508a53 +Block 0005 [ 16]: 93be06e857f828b0 +Block 0005 [ 17]: 9e334a17efeacf2d +Block 0005 [ 18]: 0abb1c185c360c66 +Block 0005 [ 19]: 6e8ba87a521c988f +Block 0005 [ 20]: e1ce03229d851942 +Block 0005 [ 21]: b3a2f4339372bea0 +Block 0005 [ 22]: aee33f6f38262588 +Block 0005 [ 23]: 18538d1dbff00c4b +Block 0005 [ 24]: 560b17ae3900a4ca +Block 0005 [ 25]: 4f59a85a546527ba +Block 0005 [ 26]: f04efb8b9aa3ed24 +Block 0005 [ 27]: 7bb31fa85be906fd +Block 0005 [ 28]: 02b6a569c025f548 +Block 0005 [ 29]: 02f5100db86384ca +Block 0005 [ 30]: 218bf5af0629d6ac +Block 0005 [ 31]: cfe334b46e5562e6 +Block 0005 [ 32]: dcc54852060e5f15 +Block 0005 [ 33]: 3225b16290cc6003 +Block 0005 [ 34]: e2424de76ed2e45b +Block 0005 [ 35]: ad15394489787731 +Block 0005 [ 36]: 7d05d61506fad68e +Block 0005 [ 37]: 2c0c1d672f2f9b1f +Block 0005 [ 38]: 3ea3a2c1e10a1dfa +Block 0005 [ 39]: 4b2d09219829c0b4 +Block 0005 [ 40]: 240d9cc9af661f07 +Block 0005 [ 41]: bc8d390ba8011edb +Block 0005 [ 42]: 9bb0be348cde4a4a +Block 0005 [ 43]: 647c882ae02f2a4f +Block 0005 [ 44]: 5dbd001ec7676d38 +Block 0005 [ 45]: 73ab60a147b1c181 +Block 0005 [ 46]: 84fea05444fa2a85 +Block 0005 [ 47]: aef881d5d95c0df1 +Block 0005 [ 48]: 5a692fe61bda2856 +Block 0005 [ 49]: fe3ecd15fcb2c13a +Block 0005 [ 50]: fa10984aec1d1382 +Block 0005 [ 51]: e9aee1ccb6b4965c +Block 0005 [ 52]: 4d2e18d82faf8c3e +Block 0005 [ 53]: 1c4ece926941a8e9 +Block 0005 [ 54]: 386b5528970270e1 +Block 0005 [ 55]: 823551ce67827ec7 +Block 0005 [ 56]: 87d81a2f1a8047fb +Block 0005 [ 57]: ba373060adbed505 +Block 0005 [ 58]: 8578052221d6ae46 +Block 0005 [ 59]: 1f168936c739c3a4 +Block 0005 [ 60]: 0bcca09786e83d87 +Block 0005 [ 61]: 5753de51288adfc2 +Block 0005 [ 62]: 8ad3bcca43f40be1 +Block 0005 [ 63]: 4f1b9617f9c86c30 +Block 0005 [ 64]: e4d837570a26318b +Block 0005 [ 65]: 067d4cb0d49a3121 +Block 0005 [ 66]: 91b77927a207b848 +Block 0005 [ 67]: 5dbc721e332e2bc4 +Block 0005 [ 68]: 2316410cbb3610b1 +Block 0005 [ 69]: 673181681ae22a67 +Block 0005 [ 70]: 8067fe815c96c23f +Block 0005 [ 71]: 80cc56dfebe3ddda +Block 0005 [ 72]: 14609d5fa6ce23c1 +Block 0005 [ 73]: 73cbea41966a7142 +Block 0005 [ 74]: 119ab1b5f53ba3ca +Block 0005 [ 75]: 9a6852050ece2e4a +Block 0005 [ 76]: bc3654b7fa5b0c6b +Block 0005 [ 77]: 4c69d15d64efcb85 +Block 0005 [ 78]: 5b09d250e32e8259 +Block 0005 [ 79]: c3e9baf9b11b3152 +Block 0005 [ 80]: 53e0b2ec68d041b4 +Block 0005 [ 81]: 0b98b646fc0fce16 +Block 0005 [ 82]: d25838c84d8cce12 +Block 0005 [ 83]: 1f7939000f470cb9 +Block 0005 [ 84]: ac4aacacba06092f +Block 0005 [ 85]: acfadfca8de0ff05 +Block 0005 [ 86]: bf09f53231d87750 +Block 0005 [ 87]: 79d905956e0f3889 +Block 0005 [ 88]: e14f247f4d5e216a +Block 0005 [ 89]: 212d91fda8e22bbb +Block 0005 [ 90]: 0e4c4aa22d20b934 +Block 0005 [ 91]: d0e46af19abc1ad2 +Block 0005 [ 92]: 2c7ea87d03e3d09b +Block 0005 [ 93]: 7164b75cc1953042 +Block 0005 [ 94]: 7b659a27384d82fb +Block 0005 [ 95]: 8bc42d8b31cebe7f +Block 0005 [ 96]: 7b06a683d868bc51 +Block 0005 [ 97]: 319e2ea63d699167 +Block 0005 [ 98]: 1ab697198262eb44 +Block 0005 [ 99]: 5b49959d8f4ca9c8 +Block 0005 [100]: 4f35c23e17f05819 +Block 0005 [101]: 26d5aaa4f087ae8f +Block 0005 [102]: b78fea4d6f1d7732 +Block 0005 [103]: 3f3e6f841d48add2 +Block 0005 [104]: ef24bee225179b89 +Block 0005 [105]: bed586e853daf5c7 +Block 0005 [106]: bc26d99c49cf9a6c +Block 0005 [107]: d909da65d4c11556 +Block 0005 [108]: ed12711f224cef83 +Block 0005 [109]: 2b9607d0e5e900a7 +Block 0005 [110]: fc43b421ce701587 +Block 0005 [111]: af7ac9f1a69d5e02 +Block 0005 [112]: d0fdb554f3165990 +Block 0005 [113]: 91aaac41e7f9ea3a +Block 0005 [114]: d217a6555996c34c +Block 0005 [115]: 54b2726ee172aaf7 +Block 0005 [116]: bc60721ff605e001 +Block 0005 [117]: 2a5c053049c31e68 +Block 0005 [118]: eb66aa545b46853b +Block 0005 [119]: da32c94d6ac845df +Block 0005 [120]: d3c36a7387623c03 +Block 0005 [121]: a5e37961367e911a +Block 0005 [122]: ed0223c8f80f0f62 +Block 0005 [123]: c9577e0c09c50399 +Block 0005 [124]: 0042484883108146 +Block 0005 [125]: 490c07c2c85c00d8 +Block 0005 [126]: cff6918e0df215d4 +Block 0005 [127]: 5e5dca04d2dd1563 +Block 0006 [ 0]: 06e575606df88e3b +Block 0006 [ 1]: 71a7464b72fd64a7 +Block 0006 [ 2]: 468923168d541632 +Block 0006 [ 3]: f3583b7ff4adbe56 +Block 0006 [ 4]: e87b42b4b254cde7 +Block 0006 [ 5]: 3548c94a108f6c4c +Block 0006 [ 6]: a56ac305d8f4bc99 +Block 0006 [ 7]: 8378293152189352 +Block 0006 [ 8]: c1dbba854c7c7f6e +Block 0006 [ 9]: 5d9fb7867d240ed6 +Block 0006 [ 10]: fdbd8b16b16c7494 +Block 0006 [ 11]: 7ad763ffba6200e8 +Block 0006 [ 12]: 77c8ebde2abb1d53 +Block 0006 [ 13]: ceabcc21195a1c4b +Block 0006 [ 14]: 20736ee04af8ae96 +Block 0006 [ 15]: 6161d5f1a7b82e44 +Block 0006 [ 16]: 7e35690bb164e16e +Block 0006 [ 17]: d0de4831d5825765 +Block 0006 [ 18]: f4b613fe1dad1e3c +Block 0006 [ 19]: e26741b0625f688b +Block 0006 [ 20]: b0d4b503e2229c7c +Block 0006 [ 21]: 819ff61fd8c3546a +Block 0006 [ 22]: e2252c69b5c0e012 +Block 0006 [ 23]: e6ac62b49e6aba20 +Block 0006 [ 24]: 5793fcaf58202c2a +Block 0006 [ 25]: b06a3c14e96ed572 +Block 0006 [ 26]: 036e41058b08b42c +Block 0006 [ 27]: 14989720933e50ad +Block 0006 [ 28]: 44ad4d4c252d6d1f +Block 0006 [ 29]: d3e00c49991c01b0 +Block 0006 [ 30]: 2615381daaed34ff +Block 0006 [ 31]: 0d645551e1597e3c +Block 0006 [ 32]: 2b11ec26203fd73b +Block 0006 [ 33]: 0e766f7080fe92d6 +Block 0006 [ 34]: 47b2ba5db10cfc3a +Block 0006 [ 35]: 6ad29e44a0f3be62 +Block 0006 [ 36]: da842a34d581ad7f +Block 0006 [ 37]: fb3c375543afd6a8 +Block 0006 [ 38]: ed9de9c706c068a6 +Block 0006 [ 39]: 1fb7693b385233b7 +Block 0006 [ 40]: 49eda29d7136fc7d +Block 0006 [ 41]: ab6e18616433333a +Block 0006 [ 42]: 72df17bf0a5580c7 +Block 0006 [ 43]: 0082bba3466cd5ea +Block 0006 [ 44]: e9a4c1e542244a87 +Block 0006 [ 45]: c2d9cf7758b923e3 +Block 0006 [ 46]: bee180f733988dbf +Block 0006 [ 47]: 59a2da4ab34ee654 +Block 0006 [ 48]: cc56314eb2fa23e6 +Block 0006 [ 49]: 0f087137ac0a1c7a +Block 0006 [ 50]: 8067c1e34852b917 +Block 0006 [ 51]: 90a8915d42ae5075 +Block 0006 [ 52]: d5a11fa31dcd190a +Block 0006 [ 53]: 441518b90ef57a2b +Block 0006 [ 54]: 5b9fa34fb393336d +Block 0006 [ 55]: 6cd5798454fa4a12 +Block 0006 [ 56]: e9e5be8a0a850ca8 +Block 0006 [ 57]: 9e557468d5e3f9a6 +Block 0006 [ 58]: 3be40b13014c63af +Block 0006 [ 59]: e5db3589ece2fa5d +Block 0006 [ 60]: a7db7905add3ccbc +Block 0006 [ 61]: fdb1a2121e3ee9b9 +Block 0006 [ 62]: 87b16d82fd2baf1e +Block 0006 [ 63]: 596798be5427ad24 +Block 0006 [ 64]: bbc45faa52e1c3b5 +Block 0006 [ 65]: e0c382fd816cedee +Block 0006 [ 66]: 278a382948535926 +Block 0006 [ 67]: e796002cdda2daf4 +Block 0006 [ 68]: 8927e6a03f549fca +Block 0006 [ 69]: 31b3180c654b4ddb +Block 0006 [ 70]: 18dce7f5bbf32bfa +Block 0006 [ 71]: ae6b15ff97e0c1d4 +Block 0006 [ 72]: 9c22613ba008bc2c +Block 0006 [ 73]: 39ecb7c2397ca17d +Block 0006 [ 74]: fbbed8367164594a +Block 0006 [ 75]: d7cb5457059e32d5 +Block 0006 [ 76]: b06eac3578f74d1c +Block 0006 [ 77]: 882fdacd5035687f +Block 0006 [ 78]: 595c5747ab50a560 +Block 0006 [ 79]: 9000f76a4aa7e370 +Block 0006 [ 80]: ca6b97e8b24d933c +Block 0006 [ 81]: b1c524d71db5ecb1 +Block 0006 [ 82]: 63f4933374b5e5e2 +Block 0006 [ 83]: 84a48cc12b57dc0d +Block 0006 [ 84]: 785a2a1c88a63522 +Block 0006 [ 85]: f86705d1a24f35ca +Block 0006 [ 86]: f6e7ca822fa200cf +Block 0006 [ 87]: ca207bf6bdee4a69 +Block 0006 [ 88]: d701d641fd420f68 +Block 0006 [ 89]: 1c4f598bff32340f +Block 0006 [ 90]: 3bbb6d14037f8e85 +Block 0006 [ 91]: 0ac8f692c37dbdf1 +Block 0006 [ 92]: e17256aaa2c6417b +Block 0006 [ 93]: 130aabc282078fe6 +Block 0006 [ 94]: 72c4cb749d0eec25 +Block 0006 [ 95]: ffe89caac8c5946d +Block 0006 [ 96]: 2f2d8c60afaf2c94 +Block 0006 [ 97]: 7db481c19f5fb1ba +Block 0006 [ 98]: 0508153944853486 +Block 0006 [ 99]: 37a9635cb7261716 +Block 0006 [100]: f60fdd2341537e3b +Block 0006 [101]: abe87965feb6c714 +Block 0006 [102]: 0f2cb41fe88f9686 +Block 0006 [103]: 5f7d5faa3191545c +Block 0006 [104]: 9870bcbd2c7d0fbf +Block 0006 [105]: 1980d28854804501 +Block 0006 [106]: 882c0e69b0d1cab3 +Block 0006 [107]: 181723d7663999d9 +Block 0006 [108]: ac3af38a6b5919b2 +Block 0006 [109]: f3c7b5014ca21a1d +Block 0006 [110]: 82d98fc9d3c26c7b +Block 0006 [111]: cd63896a773ee2f2 +Block 0006 [112]: 8ca6b1bc8e639c17 +Block 0006 [113]: dc643e71fa5ba0d4 +Block 0006 [114]: 826997cd621ce6c6 +Block 0006 [115]: 60d2ab15f86ccda7 +Block 0006 [116]: 736900641a1df82f +Block 0006 [117]: 74b7a10a22330c0f +Block 0006 [118]: 21faa45375e80c38 +Block 0006 [119]: 4b8c2f8bbb148222 +Block 0006 [120]: 586d669cc9dc46aa +Block 0006 [121]: 582cc814f6edde20 +Block 0006 [122]: a6171da287a072ee +Block 0006 [123]: 9dfafee0098dc6ba +Block 0006 [124]: 280efcd252cb68a8 +Block 0006 [125]: fb26ef59ef4d8505 +Block 0006 [126]: 1d5e477cb30e513c +Block 0006 [127]: 87dc7ecab98fe69c +Block 0007 [ 0]: 272d06fade6d331a +Block 0007 [ 1]: c625b4d1a098ff17 +Block 0007 [ 2]: b9a65a7b82e0c9c9 +Block 0007 [ 3]: a7301af123895781 +Block 0007 [ 4]: 05cc626884232f6b +Block 0007 [ 5]: cc1cb1d4830da55d +Block 0007 [ 6]: 7ad27fd0ebbbc641 +Block 0007 [ 7]: 1bdabd0730624045 +Block 0007 [ 8]: 8a796cb38f76bef5 +Block 0007 [ 9]: 955a31ecd6a3e9f3 +Block 0007 [ 10]: 8e614cbf6c83ed5b +Block 0007 [ 11]: 7cfee51609058b60 +Block 0007 [ 12]: c1a76d5bbfd35b39 +Block 0007 [ 13]: 12661d52aed610ed +Block 0007 [ 14]: 19ddb4706a02b6c4 +Block 0007 [ 15]: 512029583ae902a2 +Block 0007 [ 16]: 2a22ec2229b71abe +Block 0007 [ 17]: f35d343177e1a239 +Block 0007 [ 18]: a4b78e999c59f71d +Block 0007 [ 19]: 00121cf1bded93ee +Block 0007 [ 20]: 7f492bad6a0792ed +Block 0007 [ 21]: 5b2224cd6fbc8b30 +Block 0007 [ 22]: dc3b63b33575ed25 +Block 0007 [ 23]: af84aa371c386c6b +Block 0007 [ 24]: 174995fa235d8e0c +Block 0007 [ 25]: b1c7d3904bf63ed2 +Block 0007 [ 26]: a43938085a786223 +Block 0007 [ 27]: 6928a779ebd0acbe +Block 0007 [ 28]: 00649d7e17e68bf0 +Block 0007 [ 29]: 7ff8c78339c135e3 +Block 0007 [ 30]: d2cc3195e2f4a6fa +Block 0007 [ 31]: 87d7db26ff9c4839 +Block 0007 [ 32]: 170ff45d245abc95 +Block 0007 [ 33]: ca0de5afa7bc179b +Block 0007 [ 34]: 47f87e00ca4a5bd7 +Block 0007 [ 35]: 42c9e956ce7b830d +Block 0007 [ 36]: e2d68ca2fe26cbae +Block 0007 [ 37]: 31facbd28e4ff423 +Block 0007 [ 38]: 816dee4fde572108 +Block 0007 [ 39]: 24aabace105ecf93 +Block 0007 [ 40]: beac4f8a0eca1d5f +Block 0007 [ 41]: 228c9957808ed0e5 +Block 0007 [ 42]: 31ab6b20240ceb32 +Block 0007 [ 43]: 3079d7aa4522c927 +Block 0007 [ 44]: d9437ac020401bf7 +Block 0007 [ 45]: 2dbf3ec6847975f0 +Block 0007 [ 46]: 1c677f6d76964cc5 +Block 0007 [ 47]: 56e9aecea3bc1b26 +Block 0007 [ 48]: 2837465c37fb812d +Block 0007 [ 49]: 0c306513f38f378d +Block 0007 [ 50]: 0c37fd80799a554f +Block 0007 [ 51]: 7b39bbcd780ce2b7 +Block 0007 [ 52]: 37607a623990fa10 +Block 0007 [ 53]: 439b6ae755ff0868 +Block 0007 [ 54]: 352644a9cc59b330 +Block 0007 [ 55]: f2533ac8d81ba695 +Block 0007 [ 56]: b56c25657ac775cd +Block 0007 [ 57]: 69bcc975eb9cfda8 +Block 0007 [ 58]: e965849c9c4ecf32 +Block 0007 [ 59]: e1e5e54302307fca +Block 0007 [ 60]: 2ff11a374a3f367c +Block 0007 [ 61]: ef3347a4e2a55d88 +Block 0007 [ 62]: d4c092ae6aa73d35 +Block 0007 [ 63]: cd90b21e590d3b7f +Block 0007 [ 64]: 7f47d6288f261862 +Block 0007 [ 65]: e595765a549a7456 +Block 0007 [ 66]: 9b46d372f817fad0 +Block 0007 [ 67]: 0ef73e99671ced02 +Block 0007 [ 68]: 068c1456cffd15f2 +Block 0007 [ 69]: 0450108481b2aec3 +Block 0007 [ 70]: 9a51541fca67cef7 +Block 0007 [ 71]: 344a07ee5c0a9781 +Block 0007 [ 72]: b8e2b12cb684e206 +Block 0007 [ 73]: 73aa863c2cec0580 +Block 0007 [ 74]: 56fba126410a6204 +Block 0007 [ 75]: 803deaed4fcf5750 +Block 0007 [ 76]: 02bcfae2d70280fb +Block 0007 [ 77]: b8ab8a5874e27d6f +Block 0007 [ 78]: d74bc0568607a2f1 +Block 0007 [ 79]: 8dfc1a8581f4797d +Block 0007 [ 80]: 7d5e362d1f502015 +Block 0007 [ 81]: fd494de723c9e751 +Block 0007 [ 82]: c1205d413f2fce7b +Block 0007 [ 83]: eee662d69c3a0011 +Block 0007 [ 84]: 9b902b3931050f40 +Block 0007 [ 85]: bd830f0036694cd4 +Block 0007 [ 86]: e9420bf5b18f8b4f +Block 0007 [ 87]: aa0f2c68410ae330 +Block 0007 [ 88]: 47d4132eb7dade03 +Block 0007 [ 89]: 0c05c6af851968e5 +Block 0007 [ 90]: c5b535d388a53d78 +Block 0007 [ 91]: ac97ce6b41d6c7d5 +Block 0007 [ 92]: 112052d13f30e8c1 +Block 0007 [ 93]: cc560af42f595097 +Block 0007 [ 94]: ad7abf51469c4f83 +Block 0007 [ 95]: 5dd9175d9fff36f6 +Block 0007 [ 96]: 14ab61988879261d +Block 0007 [ 97]: 4726e1f0236e01ad +Block 0007 [ 98]: 7309705c333c73b6 +Block 0007 [ 99]: 4ba518ea29172f7f +Block 0007 [100]: ecdff9f4dc349e2c +Block 0007 [101]: 2e0b9def72ef1912 +Block 0007 [102]: 78a468fc70c7075c +Block 0007 [103]: d705b64d14bfbd7c +Block 0007 [104]: 67a2b7162aee3bd3 +Block 0007 [105]: 5978e84637288123 +Block 0007 [106]: 5153bcaf415ee20f +Block 0007 [107]: e3a999e7921a7722 +Block 0007 [108]: 1defb1f37bb6df78 +Block 0007 [109]: 4396889ae5329428 +Block 0007 [110]: 1f5304f6d3f4c5eb +Block 0007 [111]: 7ad70f5d1b72c11b +Block 0007 [112]: 2a497b553a83863d +Block 0007 [113]: afaa70491f8139a8 +Block 0007 [114]: b41152f3eea230d9 +Block 0007 [115]: 27b29c968c0e02eb +Block 0007 [116]: 380544bbc10304c2 +Block 0007 [117]: f32188d2a43f24de +Block 0007 [118]: 6e2b22fb4ed9b3d8 +Block 0007 [119]: 927e2d31cbfdfb51 +Block 0007 [120]: 15be340149804f89 +Block 0007 [121]: fe8e654001ec9dc3 +Block 0007 [122]: 0952688acce880d9 +Block 0007 [123]: bfd9caca8b3c2ed7 +Block 0007 [124]: 57489b9341cc60b9 +Block 0007 [125]: 5c290f757cb97be6 +Block 0007 [126]: dea6a955364f7879 +Block 0007 [127]: 2734980c24943229 +Block 0008 [ 0]: dc6b6d1adf13ba10 +Block 0008 [ 1]: b91d17ea5fd061fa +Block 0008 [ 2]: aeb5e95e05f28465 +Block 0008 [ 3]: aae5d4364c1ac7e2 +Block 0008 [ 4]: 531c8c4860b55657 +Block 0008 [ 5]: 546f378ddacf7d44 +Block 0008 [ 6]: 1fbdab2cab565be2 +Block 0008 [ 7]: 3907d1b6b09a1762 +Block 0008 [ 8]: 2eeef614ecbd720d +Block 0008 [ 9]: 46e5e7efd4525bd9 +Block 0008 [ 10]: f4d0acbf1bed6c87 +Block 0008 [ 11]: 83cc80d830e03068 +Block 0008 [ 12]: bb67c441b80c8604 +Block 0008 [ 13]: 9dcc40be341714ac +Block 0008 [ 14]: 18abaf3eb1a7890c +Block 0008 [ 15]: 1990d7f3ac301693 +Block 0008 [ 16]: d0e8b3bdfeec80fd +Block 0008 [ 17]: d88b6939c62d2b0d +Block 0008 [ 18]: 917249fcba34089f +Block 0008 [ 19]: f970f8b97f892d13 +Block 0008 [ 20]: 5d3cf4f4665e8025 +Block 0008 [ 21]: 7fbc8fc1719a00e0 +Block 0008 [ 22]: 3b94c22e3e2725b5 +Block 0008 [ 23]: d4ce1e6309916de6 +Block 0008 [ 24]: 87fbacd4e43dd068 +Block 0008 [ 25]: 200cff600856dafe +Block 0008 [ 26]: 23ba6b39c79cb5ef +Block 0008 [ 27]: b1f46be594d43c95 +Block 0008 [ 28]: ff35e0beed2ea235 +Block 0008 [ 29]: bef54f0cad51bdf4 +Block 0008 [ 30]: d06e6a34d97cd464 +Block 0008 [ 31]: 85e39b5b21902dca +Block 0008 [ 32]: 6bc1d2871274396e +Block 0008 [ 33]: d7d23981830ab34f +Block 0008 [ 34]: fb7fefb74c559aed +Block 0008 [ 35]: 06e363f9a51f4783 +Block 0008 [ 36]: 3115e623e62aaa41 +Block 0008 [ 37]: 72e98c5a2f6ce676 +Block 0008 [ 38]: 9215b69396270668 +Block 0008 [ 39]: e0844ff4b74ba824 +Block 0008 [ 40]: 29954c50a989f002 +Block 0008 [ 41]: 82eb6370e89c3eb1 +Block 0008 [ 42]: 62ce9194a114645f +Block 0008 [ 43]: d7af7eef56703e93 +Block 0008 [ 44]: fcebd0463c2bbcff +Block 0008 [ 45]: 3f9ec1849914b05c +Block 0008 [ 46]: 6c9970e2a5698e8b +Block 0008 [ 47]: 9862a324eb161be6 +Block 0008 [ 48]: 32334ea7036383a4 +Block 0008 [ 49]: 7e64ecf8ad38de47 +Block 0008 [ 50]: ccf52cfd8dd5208f +Block 0008 [ 51]: 7058c1e23eca4bd2 +Block 0008 [ 52]: ad66da4882be2b72 +Block 0008 [ 53]: 6f95725de653f188 +Block 0008 [ 54]: 659e89de1828405e +Block 0008 [ 55]: 451d65f554be4ee6 +Block 0008 [ 56]: 84d337c6f49641df +Block 0008 [ 57]: a869207e69d5299f +Block 0008 [ 58]: 0078bd60849acc64 +Block 0008 [ 59]: 606f256c808ffbd0 +Block 0008 [ 60]: e96aed2a2b6073a6 +Block 0008 [ 61]: d2dc35007b056e00 +Block 0008 [ 62]: e1af5e8c6239ca8a +Block 0008 [ 63]: c13c556f4eb60ff2 +Block 0008 [ 64]: 0d383da1a0b22a3c +Block 0008 [ 65]: 85ae949a305ef696 +Block 0008 [ 66]: f59d0e46d51c54c5 +Block 0008 [ 67]: 0c7301c96a56b539 +Block 0008 [ 68]: 65dd44ab0979d798 +Block 0008 [ 69]: 61cfa43ce06ded75 +Block 0008 [ 70]: d1099cc2ce7dc5d0 +Block 0008 [ 71]: 4b51cbcc97c72879 +Block 0008 [ 72]: c4c96ed0aeb5be58 +Block 0008 [ 73]: cd4d3ad40727e0df +Block 0008 [ 74]: 9ac84675bd4eb1fa +Block 0008 [ 75]: 3873937250526178 +Block 0008 [ 76]: c695538e394b84f3 +Block 0008 [ 77]: e26ad59a4b45df18 +Block 0008 [ 78]: 3ccf1fc37ae30577 +Block 0008 [ 79]: 1da81eaf501a98bf +Block 0008 [ 80]: f5bde1fdb6c61688 +Block 0008 [ 81]: 48a236a088e9bc96 +Block 0008 [ 82]: 2e54ed7d3b0505bc +Block 0008 [ 83]: f756483978ec1b71 +Block 0008 [ 84]: 949c4fe87b7d67a9 +Block 0008 [ 85]: b788279c6674c956 +Block 0008 [ 86]: b96bfdc0c59a7cc3 +Block 0008 [ 87]: 37152d7aac6f5aad +Block 0008 [ 88]: 17128b43250a0624 +Block 0008 [ 89]: caaefd58274022e6 +Block 0008 [ 90]: 3e6af46acda01234 +Block 0008 [ 91]: 43091b598aecff38 +Block 0008 [ 92]: 1070375d7d2c8988 +Block 0008 [ 93]: 54ca7be036dc1816 +Block 0008 [ 94]: b631d974db91a390 +Block 0008 [ 95]: efc15bb9abc2cfad +Block 0008 [ 96]: 2b1c41ece54418ab +Block 0008 [ 97]: d7882b30049b13d5 +Block 0008 [ 98]: 4dc546209f942114 +Block 0008 [ 99]: 4da30a306bb48db6 +Block 0008 [100]: 3e78eacda997f0a3 +Block 0008 [101]: 42f92bc6bf89e191 +Block 0008 [102]: aef3a035402b18a9 +Block 0008 [103]: 7418b3827a08136b +Block 0008 [104]: 82f2bd22342aadd9 +Block 0008 [105]: 928bb61702b4cc95 +Block 0008 [106]: 779a5cae529e6d13 +Block 0008 [107]: e14bf3cdeefeb3fa +Block 0008 [108]: 34075120b790f68b +Block 0008 [109]: 2aa17b3a36b46677 +Block 0008 [110]: e96b0ffccb42f8d1 +Block 0008 [111]: c895ba8dd04aa4b7 +Block 0008 [112]: 26ffd120da78eb7e +Block 0008 [113]: aa2421483a0f6984 +Block 0008 [114]: aead9757c1108bc6 +Block 0008 [115]: 59a09752c2e4954b +Block 0008 [116]: 1275c2fb3e2f7d66 +Block 0008 [117]: 24f14bf43c8b3438 +Block 0008 [118]: 898abe2e8e0e1065 +Block 0008 [119]: 7c7c5df695255005 +Block 0008 [120]: 6801c208f9ac6f4f +Block 0008 [121]: 7df45962a612c76e +Block 0008 [122]: 2756812f921cb052 +Block 0008 [123]: 06a5fb01f2ba4e28 +Block 0008 [124]: 72617963057f1c4c +Block 0008 [125]: 3470685b81ac58a0 +Block 0008 [126]: 783c1a85437acb5c +Block 0008 [127]: 3bd80ab09cfb1139 +Block 0009 [ 0]: c87e47b1c3772012 +Block 0009 [ 1]: 53ef67895ef0ba16 +Block 0009 [ 2]: 51e4861563608c9d +Block 0009 [ 3]: 3cfcbc281c9ebdd6 +Block 0009 [ 4]: feaf7c32fee96066 +Block 0009 [ 5]: 1127f68fe2e0ef2b +Block 0009 [ 6]: d2b9348e169c5429 +Block 0009 [ 7]: 01def6b91eb75bad +Block 0009 [ 8]: f868acc084b74873 +Block 0009 [ 9]: b73c0d66f77e6e65 +Block 0009 [ 10]: 5dcf631cc3261744 +Block 0009 [ 11]: 5c063f0e7dc4ddc9 +Block 0009 [ 12]: d88ec186ab575517 +Block 0009 [ 13]: b49d4fd9265055fa +Block 0009 [ 14]: af9c253d9ec60147 +Block 0009 [ 15]: c133040684f7f94b +Block 0009 [ 16]: 7c9fd7f6bba1b216 +Block 0009 [ 17]: d9c687ce5c476a65 +Block 0009 [ 18]: 0005a29d070297c7 +Block 0009 [ 19]: dc897d2c175e3c02 +Block 0009 [ 20]: e942dfe4ccf40d40 +Block 0009 [ 21]: 6caa0532e5669a76 +Block 0009 [ 22]: 5baf9399bd1e8f8a +Block 0009 [ 23]: b3deb6ab6a5a1d4b +Block 0009 [ 24]: 3d454ed17ed9d6d4 +Block 0009 [ 25]: 4bbb1c5031ba97f1 +Block 0009 [ 26]: c2f1c71e39dad8ce +Block 0009 [ 27]: 6691d661c29e7010 +Block 0009 [ 28]: 6759aa49c1fc9154 +Block 0009 [ 29]: c9cc86dc186f4518 +Block 0009 [ 30]: b746e661d8353a8e +Block 0009 [ 31]: d238bafb93f0025a +Block 0009 [ 32]: 41e346bfb0d34e5b +Block 0009 [ 33]: eafafc3b447bccb4 +Block 0009 [ 34]: ceb113c031914223 +Block 0009 [ 35]: caf4e78e1cd53f5f +Block 0009 [ 36]: 78351504f8a33c16 +Block 0009 [ 37]: 7575acf932b356c8 +Block 0009 [ 38]: c09617cd3a1a1627 +Block 0009 [ 39]: cb07cf989cc4caf2 +Block 0009 [ 40]: 8cc189366d9b26f5 +Block 0009 [ 41]: 449beb3368a3877e +Block 0009 [ 42]: e8f5818a7858db70 +Block 0009 [ 43]: c793ebf3d301198f +Block 0009 [ 44]: 3aa508c80633437f +Block 0009 [ 45]: d3b867a3cbaf08f6 +Block 0009 [ 46]: fbde37db7e33e4fc +Block 0009 [ 47]: dc548c7f368e6497 +Block 0009 [ 48]: 4c1c0211c7516b79 +Block 0009 [ 49]: 75dbc72a82d41883 +Block 0009 [ 50]: 530487899a550ada +Block 0009 [ 51]: 27e20eb8330d18d7 +Block 0009 [ 52]: f5b0ea85baf15669 +Block 0009 [ 53]: ac9c2708dbe29cec +Block 0009 [ 54]: 102df235d45e0fe8 +Block 0009 [ 55]: 1ec27724b22275b8 +Block 0009 [ 56]: 7ff048771596e3d6 +Block 0009 [ 57]: 401be2cc8914cbb7 +Block 0009 [ 58]: 127969310e85020f +Block 0009 [ 59]: 668aa409ee1e22ab +Block 0009 [ 60]: 4ea69cd6b1727439 +Block 0009 [ 61]: 3da31ac5eefe1d0a +Block 0009 [ 62]: 7eeadbaf86a9e3fb +Block 0009 [ 63]: 7fd960e6520c2179 +Block 0009 [ 64]: 1e778bfc99b12598 +Block 0009 [ 65]: 737729bf678749fd +Block 0009 [ 66]: 25e9e1f65be274b9 +Block 0009 [ 67]: 1190348847839e7c +Block 0009 [ 68]: da6903502fbb1d6a +Block 0009 [ 69]: 8febd989e10caf6e +Block 0009 [ 70]: 5bec284c097f0f56 +Block 0009 [ 71]: 0ad7e582f0f3ca14 +Block 0009 [ 72]: ac3d0111de95633c +Block 0009 [ 73]: b03374b9fdf0165f +Block 0009 [ 74]: df6408de8b5d06e9 +Block 0009 [ 75]: 6545ea0295ffd8e2 +Block 0009 [ 76]: e7a37676dfb5330c +Block 0009 [ 77]: e97777e4dab1e386 +Block 0009 [ 78]: 23aad2be96ef0dbe +Block 0009 [ 79]: 67a3c60819619ed2 +Block 0009 [ 80]: cc5bf52ea2cb1323 +Block 0009 [ 81]: 3d1e3e79c7dcd249 +Block 0009 [ 82]: bd78f50ff24a14c1 +Block 0009 [ 83]: 24ebc5de9a24b1f1 +Block 0009 [ 84]: 35d2ad9a11fd08e7 +Block 0009 [ 85]: d5d586e87776af28 +Block 0009 [ 86]: 0a29e47fcd7bb004 +Block 0009 [ 87]: 5be280ff4eae5d10 +Block 0009 [ 88]: e9efc91da33b4f70 +Block 0009 [ 89]: 98ddf317551d1e13 +Block 0009 [ 90]: 9ed9fb074b0a2315 +Block 0009 [ 91]: 385474dcc69460b0 +Block 0009 [ 92]: edf4b8f53ee65fa3 +Block 0009 [ 93]: e55a8ee53447e358 +Block 0009 [ 94]: e5d77c0d5d0d447a +Block 0009 [ 95]: 9b8d0f0579b33fe2 +Block 0009 [ 96]: c38407b72241aa34 +Block 0009 [ 97]: ee6b13f12b3d99ef +Block 0009 [ 98]: 8dc888f6831b572e +Block 0009 [ 99]: decf4825f7a4524c +Block 0009 [100]: a3e3b8af2b57dd62 +Block 0009 [101]: 6acc58b90c361016 +Block 0009 [102]: 40a0794b70468084 +Block 0009 [103]: 2e8a1bf968e971f6 +Block 0009 [104]: 1572b5471c1e0893 +Block 0009 [105]: 741bc6497a2dc4a8 +Block 0009 [106]: 8846d56dae324d63 +Block 0009 [107]: 4864229bbb77532b +Block 0009 [108]: c5f6478ebca01d36 +Block 0009 [109]: 3c8d06e4e9ae61ae +Block 0009 [110]: 8b84b6a6ec874319 +Block 0009 [111]: b73a861c04f8d0ba +Block 0009 [112]: 21bf2816040b2d99 +Block 0009 [113]: e5e3954579481c8e +Block 0009 [114]: 6df21d01fc4ec2c0 +Block 0009 [115]: d85fe0be3c317775 +Block 0009 [116]: 6785100343e96142 +Block 0009 [117]: 60c1585dd04ec099 +Block 0009 [118]: 9035b1e5912bb6ad +Block 0009 [119]: 6447bc2528ad95d3 +Block 0009 [120]: f5f4a497dea40726 +Block 0009 [121]: df1c9adc1dd0354c +Block 0009 [122]: e30cee24d3114e16 +Block 0009 [123]: 3c16415b0b3e36d2 +Block 0009 [124]: ddc2d3d67ba5aa90 +Block 0009 [125]: 4e8b75fd86fc44aa +Block 0009 [126]: 43c133389abe42fa +Block 0009 [127]: 1f0163071d1c2fd1 +Block 0010 [ 0]: befa5b8772684bf6 +Block 0010 [ 1]: 085c709ecbb1163e +Block 0010 [ 2]: c9952c634b7d47f7 +Block 0010 [ 3]: a9f2b1b34abb7255 +Block 0010 [ 4]: be1e81439a7a7527 +Block 0010 [ 5]: c759115839e61b79 +Block 0010 [ 6]: 90cdc1d1dde970eb +Block 0010 [ 7]: 4280a622460f8f81 +Block 0010 [ 8]: 95fa2520e5ea2640 +Block 0010 [ 9]: 3ef882089894d918 +Block 0010 [ 10]: 0707aea599fcd04d +Block 0010 [ 11]: 263da9476e267dab +Block 0010 [ 12]: 0243d341cce26088 +Block 0010 [ 13]: a0baddf8da89da95 +Block 0010 [ 14]: 15a0b306f9705ef5 +Block 0010 [ 15]: 3ca3647aafd77025 +Block 0010 [ 16]: fee96d8bf3dd1a25 +Block 0010 [ 17]: cf2c6b7a5ece296a +Block 0010 [ 18]: 1607217149c09a31 +Block 0010 [ 19]: 7e01c277d0ef54c4 +Block 0010 [ 20]: 207f8b6971f3ae28 +Block 0010 [ 21]: 3dbb5683d75695e0 +Block 0010 [ 22]: a368fd19c839e578 +Block 0010 [ 23]: e60a3067d5d5693b +Block 0010 [ 24]: 405be0c196638dc5 +Block 0010 [ 25]: dd6b58f4cbb38216 +Block 0010 [ 26]: 67f9d42959a2f41d +Block 0010 [ 27]: 740cb740b3e2dfbc +Block 0010 [ 28]: e34b6c6d0a49657f +Block 0010 [ 29]: 685d381724c365a6 +Block 0010 [ 30]: b5d7fd05fa5304dd +Block 0010 [ 31]: 291426b0884ca7c0 +Block 0010 [ 32]: fc26d49c0b7307f6 +Block 0010 [ 33]: 1ce47f53948cba58 +Block 0010 [ 34]: c7873387db218bad +Block 0010 [ 35]: ef0e4ec79d349a29 +Block 0010 [ 36]: 7f42c4685301d3e1 +Block 0010 [ 37]: 646965e52f86b620 +Block 0010 [ 38]: 3b24fae553a213fa +Block 0010 [ 39]: b58c7bf6b48d4969 +Block 0010 [ 40]: df53292c9ffd2d03 +Block 0010 [ 41]: fcb36b01a3a98243 +Block 0010 [ 42]: 7e53d4ce327d8cb4 +Block 0010 [ 43]: 135711f8b9c07b15 +Block 0010 [ 44]: d78adac7fcaaf2f4 +Block 0010 [ 45]: f607b6b937105259 +Block 0010 [ 46]: bb3dc4c6e46379ca +Block 0010 [ 47]: eefaac476ee9ab7c +Block 0010 [ 48]: 468f2a5b91ee25f4 +Block 0010 [ 49]: fe6835bf15208fd4 +Block 0010 [ 50]: 8affa55b80d80c40 +Block 0010 [ 51]: 8fffb69a0a6bc68c +Block 0010 [ 52]: 891fc625a7a996f2 +Block 0010 [ 53]: 0d0685282c901497 +Block 0010 [ 54]: 2b954fbc63f376ae +Block 0010 [ 55]: 0bf1c04c7b66a429 +Block 0010 [ 56]: 57cfab3494e5a87b +Block 0010 [ 57]: 9c7cba71413b4420 +Block 0010 [ 58]: b6067ace22788323 +Block 0010 [ 59]: 88cc4cadb0ef6327 +Block 0010 [ 60]: 335e981c1139ea8c +Block 0010 [ 61]: 1891fde6348d4fc8 +Block 0010 [ 62]: b381eed13dc2b78d +Block 0010 [ 63]: f2a7eec805d51aae +Block 0010 [ 64]: cc135639e5e00188 +Block 0010 [ 65]: a69d976a329936b6 +Block 0010 [ 66]: 711efe69efaf4466 +Block 0010 [ 67]: 77457b10caf144d4 +Block 0010 [ 68]: 8aa80f5b398b0ba1 +Block 0010 [ 69]: 0462168a20ff98fd +Block 0010 [ 70]: 289476e527ad0471 +Block 0010 [ 71]: 0d16c9f256fd3fcf +Block 0010 [ 72]: 217f514f3cd70a35 +Block 0010 [ 73]: 2614c68433606c51 +Block 0010 [ 74]: 7ab84319913ed734 +Block 0010 [ 75]: dd5f5f5c9aaecbd9 +Block 0010 [ 76]: 702cd4909bdc11c0 +Block 0010 [ 77]: 72a4e082cbc8137b +Block 0010 [ 78]: 653aa0dd3bd208fd +Block 0010 [ 79]: e9f932f6da625eb3 +Block 0010 [ 80]: f509bb018f18cfaf +Block 0010 [ 81]: 99a9e8543ca215f5 +Block 0010 [ 82]: 4708e89ae1b1188e +Block 0010 [ 83]: 51891a2708bc5d49 +Block 0010 [ 84]: dad30d258b95dfeb +Block 0010 [ 85]: 484cb6452492d4b3 +Block 0010 [ 86]: 24e97876b8de8ad5 +Block 0010 [ 87]: 497aed5cc31eabe9 +Block 0010 [ 88]: 534be98534a52cd4 +Block 0010 [ 89]: 0fab7b40d1cc4b6b +Block 0010 [ 90]: 757ae5b5eae855b2 +Block 0010 [ 91]: 41e89502499a68f7 +Block 0010 [ 92]: 692503814db75985 +Block 0010 [ 93]: 880611b34e91bedd +Block 0010 [ 94]: ab7786085ad98a6e +Block 0010 [ 95]: b79e239e6ad63dc1 +Block 0010 [ 96]: 61776e383070a25e +Block 0010 [ 97]: f29cbc2b3acfb0c7 +Block 0010 [ 98]: 996441bfce221ced +Block 0010 [ 99]: 6f5ead13c143577d +Block 0010 [100]: aaaa31be402b27b4 +Block 0010 [101]: bf83e7a5e9ceaa42 +Block 0010 [102]: d7c70f2a03c8aafe +Block 0010 [103]: f208e9600f6eaf8f +Block 0010 [104]: a86e7647599dc845 +Block 0010 [105]: b7bd43ee9c81e4ae +Block 0010 [106]: b1040a7ff84bf978 +Block 0010 [107]: c1da4cab128267ac +Block 0010 [108]: 92663063b6bc8da6 +Block 0010 [109]: bbc3e4dff7e3a55c +Block 0010 [110]: e0064c5f0e09d73c +Block 0010 [111]: 49f643c676dc2772 +Block 0010 [112]: a3be74551a7e1e36 +Block 0010 [113]: abb7fe1b3fe50c56 +Block 0010 [114]: 526f984c4ab11df6 +Block 0010 [115]: b9eb4cf82a7a11de +Block 0010 [116]: aaa8b1c1d2be2069 +Block 0010 [117]: 0e35c1a3e51f6a46 +Block 0010 [118]: 07686089eebde1ab +Block 0010 [119]: 5263d0261569a314 +Block 0010 [120]: 1688ceb9338a4b31 +Block 0010 [121]: 5aaab77de3987dd8 +Block 0010 [122]: b56f428cb894f0a1 +Block 0010 [123]: 3cf7890c2f0ae0f3 +Block 0010 [124]: eccbb53963cfe1da +Block 0010 [125]: bb84140c85b73e58 +Block 0010 [126]: 16473f1cdafe7c7a +Block 0010 [127]: c402ee74ab2ac05c +Block 0011 [ 0]: c653e884a645cdaa +Block 0011 [ 1]: 1a80a4a9129c76af +Block 0011 [ 2]: ad20d6b7a20d3352 +Block 0011 [ 3]: 917837cc2a442b26 +Block 0011 [ 4]: 41d5764a042d0163 +Block 0011 [ 5]: f51dab48664317ff +Block 0011 [ 6]: 3b779caf5b8277da +Block 0011 [ 7]: b8c5828991b426ac +Block 0011 [ 8]: 47ab06236d61a15f +Block 0011 [ 9]: 0a0a476c1d875005 +Block 0011 [ 10]: d72be69d44f4ccb4 +Block 0011 [ 11]: d95a306e7bcc2d96 +Block 0011 [ 12]: 985203c137206ae1 +Block 0011 [ 13]: e07fadc68088ffeb +Block 0011 [ 14]: 1890161f30cc007d +Block 0011 [ 15]: 932d310e7cbc5ca4 +Block 0011 [ 16]: dfd306dea8fc3e87 +Block 0011 [ 17]: 39637a2bdd5dfee7 +Block 0011 [ 18]: 93db7797472ffa83 +Block 0011 [ 19]: 0cfe6f1f456731d8 +Block 0011 [ 20]: fddf2caa3d0cf657 +Block 0011 [ 21]: a49abbc39b10e22c +Block 0011 [ 22]: d0c6c58a83e7e52d +Block 0011 [ 23]: 2e4ef7d71b8465f4 +Block 0011 [ 24]: fe82bc09e95b6cc1 +Block 0011 [ 25]: b627e2fe87f7ad69 +Block 0011 [ 26]: 0fe85e68705aad64 +Block 0011 [ 27]: 6725c0fc669a2949 +Block 0011 [ 28]: 00af03bf439b3e92 +Block 0011 [ 29]: c55fcbcd0874aa11 +Block 0011 [ 30]: a6354e7265de96b0 +Block 0011 [ 31]: 6ab1657e8e5523cc +Block 0011 [ 32]: ffbbb07dda2378d6 +Block 0011 [ 33]: 91cdd7eacf43a1c4 +Block 0011 [ 34]: fda16e5ed4b758f9 +Block 0011 [ 35]: 75b36a93f61d0042 +Block 0011 [ 36]: 80621463273f5094 +Block 0011 [ 37]: 8c749b031564fdef +Block 0011 [ 38]: 1a26abfb041795ca +Block 0011 [ 39]: 92c69cdeb75efde3 +Block 0011 [ 40]: 64362ce5e598c487 +Block 0011 [ 41]: b65bc723e932f76b +Block 0011 [ 42]: f43ebd68f6e9c432 +Block 0011 [ 43]: de5de5c1f36a45ba +Block 0011 [ 44]: 2f8d0d9b95f74e80 +Block 0011 [ 45]: 5469c5dd541fa533 +Block 0011 [ 46]: d03b064b3c284dd5 +Block 0011 [ 47]: e95b01a5b9d29e3f +Block 0011 [ 48]: 622ca8c0ae5d930e +Block 0011 [ 49]: 69448a5aa5ace55f +Block 0011 [ 50]: c989a9e575455ebc +Block 0011 [ 51]: 0476db62a6886efd +Block 0011 [ 52]: a4832dec608aca4f +Block 0011 [ 53]: 86b177320faf452f +Block 0011 [ 54]: fbeafa6566deffcf +Block 0011 [ 55]: a0c875dd077aab2b +Block 0011 [ 56]: 09d79bbadb920be5 +Block 0011 [ 57]: dfa71d47055b1ae1 +Block 0011 [ 58]: 491e72e2c0b45b1b +Block 0011 [ 59]: 9d5d759a04605ff9 +Block 0011 [ 60]: 0995e9f221f5f944 +Block 0011 [ 61]: df4e0b7afd7ead75 +Block 0011 [ 62]: 61141a94ba73a087 +Block 0011 [ 63]: f9d6151cb6988393 +Block 0011 [ 64]: 66f098f5c572ddd2 +Block 0011 [ 65]: 1940bf2f30fa28ad +Block 0011 [ 66]: c0827cf0ddfff6f2 +Block 0011 [ 67]: 73f8fb11d825a338 +Block 0011 [ 68]: 10fe21234998f744 +Block 0011 [ 69]: f8efc010e321247f +Block 0011 [ 70]: 2db04992d9220e61 +Block 0011 [ 71]: d00a64e77a8220c9 +Block 0011 [ 72]: 3d27f291da5fd89c +Block 0011 [ 73]: 1650ea233a65a6d9 +Block 0011 [ 74]: d32faf1133b296bf +Block 0011 [ 75]: 025f216987806954 +Block 0011 [ 76]: 00c9f933047627f9 +Block 0011 [ 77]: 2ce59ffdbcc25feb +Block 0011 [ 78]: 9e5d95d5f5e1665f +Block 0011 [ 79]: 8e9aa2d6c5f4fb8f +Block 0011 [ 80]: f29a4f3b1df3f2f4 +Block 0011 [ 81]: 163e77046784203d +Block 0011 [ 82]: d3475f23d0bcbb68 +Block 0011 [ 83]: fb5c4cfddac2c802 +Block 0011 [ 84]: bb6d887a81266342 +Block 0011 [ 85]: ab2b93751d7057ee +Block 0011 [ 86]: e79b4ec1b629ee53 +Block 0011 [ 87]: e50213e5fc957257 +Block 0011 [ 88]: f35a4d4a55ee15ec +Block 0011 [ 89]: c3bc9d6d1181c300 +Block 0011 [ 90]: a9f97892e7819b52 +Block 0011 [ 91]: 7a81ab2502821be8 +Block 0011 [ 92]: 57a98531b6c8e311 +Block 0011 [ 93]: fbab2dbf19f01294 +Block 0011 [ 94]: 402824c6dbe777ee +Block 0011 [ 95]: 59509aa8448aac6c +Block 0011 [ 96]: 9bcf16665a0a953a +Block 0011 [ 97]: 2172cb256715c249 +Block 0011 [ 98]: 54d6bbe2385b704a +Block 0011 [ 99]: dc288a2ff4a31f21 +Block 0011 [100]: 33e3c4d905aa1584 +Block 0011 [101]: f87bcfbbc106fe52 +Block 0011 [102]: 7dee45d72215096d +Block 0011 [103]: b798a129a56a498d +Block 0011 [104]: 639de22338bdfb22 +Block 0011 [105]: 4f1b0e209be36402 +Block 0011 [106]: ecfbf8eed84dda98 +Block 0011 [107]: d737114d3c05d061 +Block 0011 [108]: 987eadfcab4ec3c9 +Block 0011 [109]: c7cd9308d517c07a +Block 0011 [110]: 8b8637368781bc8d +Block 0011 [111]: 032f8375d3ac536e +Block 0011 [112]: 7da4a1808bb34e88 +Block 0011 [113]: 1761824e178e9d2f +Block 0011 [114]: 9ce6a9d604b50b6d +Block 0011 [115]: 69cfb48f60aa6b37 +Block 0011 [116]: d10088c389c01e7c +Block 0011 [117]: 01039dabd810204e +Block 0011 [118]: 02473cbb6d6e86e7 +Block 0011 [119]: 783710a70144d0d7 +Block 0011 [120]: c2081f9cbd0809bc +Block 0011 [121]: 60ecdee8cfba90c0 +Block 0011 [122]: 6068a3dce6a26929 +Block 0011 [123]: 67f4c0a3db81d9a6 +Block 0011 [124]: 62271723a9aa8451 +Block 0011 [125]: 1de12a522b1eb996 +Block 0011 [126]: 7da35ad6ff1aeaaf +Block 0011 [127]: 80d7af237c2acafa +Block 0012 [ 0]: bd6fecfb82bc40a9 +Block 0012 [ 1]: 83336a93ab307b70 +Block 0012 [ 2]: 8b23f98b36e3f85d +Block 0012 [ 3]: b765a38c83edc5d2 +Block 0012 [ 4]: 9c0952608e9e1b40 +Block 0012 [ 5]: c6b0b813dd3ff03f +Block 0012 [ 6]: 4e2f62beefb4ae56 +Block 0012 [ 7]: b5a4a8eebcf9d58e +Block 0012 [ 8]: ae17f59b432b6d88 +Block 0012 [ 9]: 32819dd91d5739f4 +Block 0012 [ 10]: aaf0a8106472cfdf +Block 0012 [ 11]: b19f65ec5f51d84e +Block 0012 [ 12]: 159148c18cb66a09 +Block 0012 [ 13]: 9d2b434c6c1553ac +Block 0012 [ 14]: a5cce2701e867af0 +Block 0012 [ 15]: a55e1618aca4da98 +Block 0012 [ 16]: 81da9e768512baca +Block 0012 [ 17]: 1292f9b1473da8ac +Block 0012 [ 18]: a49f71e94a278e39 +Block 0012 [ 19]: 7fbb53543ca895ef +Block 0012 [ 20]: 00301a0afcd2be7a +Block 0012 [ 21]: e28304111c2c7648 +Block 0012 [ 22]: cf67a24ec647f5ed +Block 0012 [ 23]: bbc3b2b582a87d95 +Block 0012 [ 24]: f452cd934124cc65 +Block 0012 [ 25]: 1d378de963be2060 +Block 0012 [ 26]: 5990d862ea81af34 +Block 0012 [ 27]: 76147c9b39f87a13 +Block 0012 [ 28]: c25f4d3aa4d724b4 +Block 0012 [ 29]: 8a2b3d742203141b +Block 0012 [ 30]: e79ce7830b1839a6 +Block 0012 [ 31]: 77fcf2032765debf +Block 0012 [ 32]: aac37411ed2339c7 +Block 0012 [ 33]: b9269cb3fa20e7c1 +Block 0012 [ 34]: bfe8f0953b80457d +Block 0012 [ 35]: b8d693d0a724ebde +Block 0012 [ 36]: 6f81188db5f1dd62 +Block 0012 [ 37]: 2809cc7ca199f651 +Block 0012 [ 38]: 9cfbf8589f28d12e +Block 0012 [ 39]: 2cf2ccfac3dc9548 +Block 0012 [ 40]: 46a60eae36e52610 +Block 0012 [ 41]: 8371bc8f910afac3 +Block 0012 [ 42]: c8ed9127942d2db9 +Block 0012 [ 43]: 2d1c0bb32a76a732 +Block 0012 [ 44]: 6d082794caa06a07 +Block 0012 [ 45]: 2a600fd1301dfb8d +Block 0012 [ 46]: 0546619fe6018911 +Block 0012 [ 47]: 3dfaf84e4bdbc93c +Block 0012 [ 48]: f351151625eb1c56 +Block 0012 [ 49]: 65ca506fc1b2b211 +Block 0012 [ 50]: f22083d6e4593f8c +Block 0012 [ 51]: 38a532e405c9cc85 +Block 0012 [ 52]: 130358836e4ab549 +Block 0012 [ 53]: b5da86cbccf9964a +Block 0012 [ 54]: 1a9bb7ccbe06b579 +Block 0012 [ 55]: 490244cc3d3ee5e7 +Block 0012 [ 56]: 05d16e1931499413 +Block 0012 [ 57]: c0f16d5307625a9c +Block 0012 [ 58]: dd5b60f8d3b6c265 +Block 0012 [ 59]: 5ffe40efc39b43d9 +Block 0012 [ 60]: 8a46a99cb2986022 +Block 0012 [ 61]: 59038865f9fa8ad6 +Block 0012 [ 62]: 07ee51e4a12d312b +Block 0012 [ 63]: 8c26838791d078b5 +Block 0012 [ 64]: e8f3197cfd8946a7 +Block 0012 [ 65]: 8cd3de9ec42e8dca +Block 0012 [ 66]: 0e2ed85ed54aa7a5 +Block 0012 [ 67]: b6db0d7dc497200e +Block 0012 [ 68]: d32cbf9e9d2ce91e +Block 0012 [ 69]: de0fd572d12a1bb3 +Block 0012 [ 70]: 0fd7b72104abff6d +Block 0012 [ 71]: f77a43e60b67290f +Block 0012 [ 72]: 3400c1aa61958019 +Block 0012 [ 73]: b15adcc92694b70b +Block 0012 [ 74]: fd03d78fa44ac635 +Block 0012 [ 75]: 6cbfe20764d6dee2 +Block 0012 [ 76]: 182992629853ad1d +Block 0012 [ 77]: 400a9ebcf07d8420 +Block 0012 [ 78]: 326a1b23b215ae73 +Block 0012 [ 79]: 21bcc4c98c55b193 +Block 0012 [ 80]: c8b40befa3dbfb04 +Block 0012 [ 81]: 9d21f41a2cdd84d3 +Block 0012 [ 82]: 0b544356ce4d4441 +Block 0012 [ 83]: bdd72d812505c333 +Block 0012 [ 84]: bb579d11cc3fbc7e +Block 0012 [ 85]: f3993400276d22c0 +Block 0012 [ 86]: 7f72b9c256b482e6 +Block 0012 [ 87]: 6a96d43928b6b630 +Block 0012 [ 88]: 6ae39cf21c9dab65 +Block 0012 [ 89]: a71321114a321bbc +Block 0012 [ 90]: 66252673668e98c8 +Block 0012 [ 91]: 545ae6fc8e6869ee +Block 0012 [ 92]: 6aa1d357b3bea674 +Block 0012 [ 93]: 0305780721fc75b9 +Block 0012 [ 94]: 9b43ff8046dfd073 +Block 0012 [ 95]: 1f8406fcab692e3a +Block 0012 [ 96]: 87b7db6bd68117bf +Block 0012 [ 97]: 0fed7932df8a7c02 +Block 0012 [ 98]: a2480d823634a1cb +Block 0012 [ 99]: 599396eb3193929d +Block 0012 [100]: aa9daa60b3ee560a +Block 0012 [101]: 412dce8bf4f87d2c +Block 0012 [102]: 3e36a5398694573f +Block 0012 [103]: d7fb28a0679bae3a +Block 0012 [104]: 3d74fea861251b70 +Block 0012 [105]: 516254cd2865cee0 +Block 0012 [106]: 9ce59d8bef9b81f0 +Block 0012 [107]: 97edabc40b358a34 +Block 0012 [108]: c1da8b2dcb42b386 +Block 0012 [109]: 979a59bb41a1c6f9 +Block 0012 [110]: 7f2ce7c8350d6481 +Block 0012 [111]: 01f6f97f063f3cfb +Block 0012 [112]: 93d99359d44b5995 +Block 0012 [113]: 6fda1427ad9ffed2 +Block 0012 [114]: 1f94a1f1e8ac2548 +Block 0012 [115]: 9ce14a580a564fc5 +Block 0012 [116]: 5cd702995eafaab5 +Block 0012 [117]: 13cddde717fe137c +Block 0012 [118]: 32bbc3e14f19743c +Block 0012 [119]: 18b8fee621b29a66 +Block 0012 [120]: 6d324f4418d8d341 +Block 0012 [121]: 1af85a9d05911cb7 +Block 0012 [122]: e58c08b75a16ef4e +Block 0012 [123]: 7eed498732243b2a +Block 0012 [124]: 85ddb6c93b244e3a +Block 0012 [125]: 04c79ec3b6abdacd +Block 0012 [126]: d6ace9220597ec2d +Block 0012 [127]: c58e5433f48ee38f +Block 0013 [ 0]: 469b89bf35144e2d +Block 0013 [ 1]: f1bb807bcbd5492b +Block 0013 [ 2]: 91b9c93c749f507e +Block 0013 [ 3]: c680ccabc457bed4 +Block 0013 [ 4]: a479230d83618dc8 +Block 0013 [ 5]: 3a608e4b91e578c8 +Block 0013 [ 6]: f82f5fb88c62c45f +Block 0013 [ 7]: 9c0c70469edc71a8 +Block 0013 [ 8]: 109f3d2e62f8507e +Block 0013 [ 9]: be32a740c6fbf047 +Block 0013 [ 10]: d3c4eb40218c412c +Block 0013 [ 11]: fd85ca2ebb4cb9cf +Block 0013 [ 12]: f51fa3e9aff33cb3 +Block 0013 [ 13]: c4a86dbc5b4c4e04 +Block 0013 [ 14]: c9b4794615050c61 +Block 0013 [ 15]: 4e0a7930c1e9d6f6 +Block 0013 [ 16]: 41c663d90a0b34f8 +Block 0013 [ 17]: 117a51022de13b30 +Block 0013 [ 18]: e7fc0de7e64d2538 +Block 0013 [ 19]: 2d52025217802c22 +Block 0013 [ 20]: 4318fc8296bced59 +Block 0013 [ 21]: 9d48c41ffd81ceff +Block 0013 [ 22]: 667b1c99880199ed +Block 0013 [ 23]: 5b990dcfcbaaf93b +Block 0013 [ 24]: f37f472db4b6f7e8 +Block 0013 [ 25]: cc1008a071e70d81 +Block 0013 [ 26]: 75b3f963a92d01d4 +Block 0013 [ 27]: 47f644f4261bbcd2 +Block 0013 [ 28]: b48fc438ace2ec49 +Block 0013 [ 29]: 82306b345782219c +Block 0013 [ 30]: 3ba907903f025346 +Block 0013 [ 31]: 7a18eec36db22089 +Block 0013 [ 32]: 6e55e2b6898aaa84 +Block 0013 [ 33]: e730cd439b6e94b1 +Block 0013 [ 34]: 4fec54842c67cb85 +Block 0013 [ 35]: 5deadada3303fa9f +Block 0013 [ 36]: 176d6e6e4d0f3488 +Block 0013 [ 37]: 8725266fd29e99ab +Block 0013 [ 38]: 9f125355c004d01c +Block 0013 [ 39]: dc36f29aa027f5a6 +Block 0013 [ 40]: 525bf4bf8fb5bec4 +Block 0013 [ 41]: 8557409bab69aa67 +Block 0013 [ 42]: 3008d95b6835faab +Block 0013 [ 43]: 2fa1b7395cde8d4e +Block 0013 [ 44]: 8c23ee445af43f01 +Block 0013 [ 45]: 0e34c44d2c3c956e +Block 0013 [ 46]: f3ff515c41428f14 +Block 0013 [ 47]: 4bbd10994aa53ade +Block 0013 [ 48]: 70897165253d8ef9 +Block 0013 [ 49]: e4aa8b7916923cf9 +Block 0013 [ 50]: 46e24ef1ac6bfff1 +Block 0013 [ 51]: bc5d31a2b82f30dd +Block 0013 [ 52]: f57c5c12eed9c220 +Block 0013 [ 53]: 099affa1a90bc96f +Block 0013 [ 54]: 50d24186a40277a2 +Block 0013 [ 55]: bdf6cb0a23ab150a +Block 0013 [ 56]: c6550fbbb31eea4f +Block 0013 [ 57]: f2eb00dbbf2f741b +Block 0013 [ 58]: 705d493f35a221eb +Block 0013 [ 59]: 18c759f8d7372759 +Block 0013 [ 60]: cd53295156bbdaf7 +Block 0013 [ 61]: 55fcd365dffd3f54 +Block 0013 [ 62]: 5d1acc769fa1de1f +Block 0013 [ 63]: 2cd1a56d595cd38f +Block 0013 [ 64]: 781c267f2589cee0 +Block 0013 [ 65]: ee1c09ef98a5a1f1 +Block 0013 [ 66]: 7a1bfb603c4dba63 +Block 0013 [ 67]: 34514bf06f413a08 +Block 0013 [ 68]: f0ab7003938a1476 +Block 0013 [ 69]: 8192f273377b379b +Block 0013 [ 70]: 47728ee5081aef9a +Block 0013 [ 71]: 3a401ef54a86e805 +Block 0013 [ 72]: 09a3e8653cf89a9c +Block 0013 [ 73]: de57c3623c7c6716 +Block 0013 [ 74]: 531ccbe06178e4b7 +Block 0013 [ 75]: 9e7ab5d7f66c58c0 +Block 0013 [ 76]: 41ee6347824a9aec +Block 0013 [ 77]: 802ba21600951c51 +Block 0013 [ 78]: 8405a2255deae3cf +Block 0013 [ 79]: c03511dda328b340 +Block 0013 [ 80]: c28d190bbf5cf177 +Block 0013 [ 81]: 73871fd8db5c3f7b +Block 0013 [ 82]: 9c334dd4281aab96 +Block 0013 [ 83]: 292f2dda3329e449 +Block 0013 [ 84]: 2f541a89b08cf4ba +Block 0013 [ 85]: a2ab80002dcca405 +Block 0013 [ 86]: db676901ecd0fa45 +Block 0013 [ 87]: 096dfe473e13e96f +Block 0013 [ 88]: 53968abdbe6e4572 +Block 0013 [ 89]: c6e7b422616906dd +Block 0013 [ 90]: edc199a6e9f6778a +Block 0013 [ 91]: 8ae900b4c954e50d +Block 0013 [ 92]: f9ee03ef99ef37b4 +Block 0013 [ 93]: 8a20e8e614c05e8e +Block 0013 [ 94]: ad858cea0b6610cf +Block 0013 [ 95]: 48501c603e178f3e +Block 0013 [ 96]: 8ac0979a7338a41b +Block 0013 [ 97]: 89d0a41b5373145e +Block 0013 [ 98]: ba71436efa6b897d +Block 0013 [ 99]: 56f2a1a0ca08e284 +Block 0013 [100]: 760e5e43697efd46 +Block 0013 [101]: bae77c1a65bef07e +Block 0013 [102]: 25e18714ea68d2a2 +Block 0013 [103]: b8ca56d1a6018956 +Block 0013 [104]: 342258dccc6a6d80 +Block 0013 [105]: d1a935f161a883de +Block 0013 [106]: 223aa5ec5f1311dd +Block 0013 [107]: fc66376a80e78e43 +Block 0013 [108]: b465c3b8933975b9 +Block 0013 [109]: 2b805a1aa85636c2 +Block 0013 [110]: 3bdbd379782a4213 +Block 0013 [111]: b3443e45eaeed777 +Block 0013 [112]: 48a458478a4e1fd5 +Block 0013 [113]: ce95d563b9d2580c +Block 0013 [114]: ba1750aa2c93bb7a +Block 0013 [115]: c0a849e80ac219c1 +Block 0013 [116]: f7df4f1ee48f8e2e +Block 0013 [117]: 0c80dc43de98a7d2 +Block 0013 [118]: 2659164c58c94cc5 +Block 0013 [119]: 4add333f8e5b70b4 +Block 0013 [120]: 7ef8625419224a9f +Block 0013 [121]: 9438a803327d4709 +Block 0013 [122]: e52835e1e39dd129 +Block 0013 [123]: f703ee0b9232369c +Block 0013 [124]: ec1e4f18f2f11ef6 +Block 0013 [125]: a46901c0035eedd2 +Block 0013 [126]: 0cd3fcc9c81a85be +Block 0013 [127]: 1ebc5566d5fc58f6 +Block 0014 [ 0]: a6fd444da23d6e1c +Block 0014 [ 1]: 27d5f1f2edfa9804 +Block 0014 [ 2]: 049fe0712c2aabc8 +Block 0014 [ 3]: 83379947d2bd63e1 +Block 0014 [ 4]: 8c54d252f69aafae +Block 0014 [ 5]: e008c186c409521d +Block 0014 [ 6]: 8a4dd58902b9065d +Block 0014 [ 7]: 171da5b5d4ca2c54 +Block 0014 [ 8]: 47d296bbaffac7ca +Block 0014 [ 9]: 4245e46959d2ba01 +Block 0014 [ 10]: 0cd6fd7bed88782a +Block 0014 [ 11]: 789f688d25adb3ba +Block 0014 [ 12]: cfa2969bd35cdb01 +Block 0014 [ 13]: 8147baf43054c3c3 +Block 0014 [ 14]: f28980a5b7a66642 +Block 0014 [ 15]: 379842f855193f71 +Block 0014 [ 16]: 167618251bf12e1a +Block 0014 [ 17]: 3de4a36244acda65 +Block 0014 [ 18]: ff9e1b243a00498e +Block 0014 [ 19]: da067a939b699e93 +Block 0014 [ 20]: fafa959c3af548a9 +Block 0014 [ 21]: cd7fb142db37d651 +Block 0014 [ 22]: 57a08b06b92fe762 +Block 0014 [ 23]: f8f217cf85858346 +Block 0014 [ 24]: c633ded2a0a87279 +Block 0014 [ 25]: e9ae9e18c6a2185b +Block 0014 [ 26]: 7798a758f4c08d73 +Block 0014 [ 27]: 4dac706917b3a0e0 +Block 0014 [ 28]: 17f25c21df6f6ad8 +Block 0014 [ 29]: 72b898b7b31cf4d2 +Block 0014 [ 30]: 0fcdc820916a5f0d +Block 0014 [ 31]: f04a3dd5a97dec99 +Block 0014 [ 32]: 9266960d1846ae17 +Block 0014 [ 33]: 67bdcd5d02ce1ec5 +Block 0014 [ 34]: edc1a704aadbfce9 +Block 0014 [ 35]: 60605d2cf5826657 +Block 0014 [ 36]: 66a1abe201545d43 +Block 0014 [ 37]: c416a25c6add6379 +Block 0014 [ 38]: 14edd341150ffe0f +Block 0014 [ 39]: eb0a69d9692d422e +Block 0014 [ 40]: 5edc64141f3fe535 +Block 0014 [ 41]: 5517f8af8e63cfb0 +Block 0014 [ 42]: 6496e3427f0b72b4 +Block 0014 [ 43]: 533584b066c29739 +Block 0014 [ 44]: 5ef672ef52028670 +Block 0014 [ 45]: a3a73a265b5b4c68 +Block 0014 [ 46]: c317a90bed56f97f +Block 0014 [ 47]: b25eaa412e6826bf +Block 0014 [ 48]: c33ca6840a8f4a20 +Block 0014 [ 49]: 22ba3746a5d7c617 +Block 0014 [ 50]: f8d75f32795a920c +Block 0014 [ 51]: de36310091fe3fc4 +Block 0014 [ 52]: 8cd740bf21c74f09 +Block 0014 [ 53]: 1b06579f7fcc666c +Block 0014 [ 54]: 8ccc6d4c75062885 +Block 0014 [ 55]: 43fd4b36fb0f01e5 +Block 0014 [ 56]: f8a2253f4de60237 +Block 0014 [ 57]: a3a34bec7464896d +Block 0014 [ 58]: c7263f2c186fe862 +Block 0014 [ 59]: 52dbd94463c3e89d +Block 0014 [ 60]: 1bfb2ad7a5da2dcb +Block 0014 [ 61]: 242b1455089cb5e3 +Block 0014 [ 62]: 537f4c68e83e9592 +Block 0014 [ 63]: aa12ee9c267fbf0f +Block 0014 [ 64]: e1c90243ff1558fc +Block 0014 [ 65]: a3ec1df790d1dd94 +Block 0014 [ 66]: 839102ed6415bdcc +Block 0014 [ 67]: 41a1eb33046c79b4 +Block 0014 [ 68]: 70162541518db319 +Block 0014 [ 69]: 9e4a9ff2379777d2 +Block 0014 [ 70]: cd976546ac02b98c +Block 0014 [ 71]: e4d3c3e4d7bafa9c +Block 0014 [ 72]: 3006682d1102cd1e +Block 0014 [ 73]: 2dda21061d60eeb0 +Block 0014 [ 74]: be8a8a034b76bea0 +Block 0014 [ 75]: 41d84a746d71ab65 +Block 0014 [ 76]: 207ce30627e15f10 +Block 0014 [ 77]: fdf84363bc87a648 +Block 0014 [ 78]: c936d95a70ffc7e5 +Block 0014 [ 79]: b3827987cc12c8e0 +Block 0014 [ 80]: 1c9e093a8100d421 +Block 0014 [ 81]: cb08d8230707442f +Block 0014 [ 82]: a5030a8c92aa863e +Block 0014 [ 83]: aae38d609e0109b2 +Block 0014 [ 84]: 5eceb17f9447a99c +Block 0014 [ 85]: dbd9d5ee531b610b +Block 0014 [ 86]: 99711e89db1680b1 +Block 0014 [ 87]: 4f7a10b757cb608f +Block 0014 [ 88]: 68658d34dc7e94fb +Block 0014 [ 89]: 440eeb626787c17e +Block 0014 [ 90]: dc279af3228c0353 +Block 0014 [ 91]: 1dac0a35211d14ef +Block 0014 [ 92]: 33bfe237745a88be +Block 0014 [ 93]: f30c62a742b86288 +Block 0014 [ 94]: 343cfd6104f75999 +Block 0014 [ 95]: 931344dad6051583 +Block 0014 [ 96]: 1ce3c8aba7af78e3 +Block 0014 [ 97]: 27a53fdba01abe2f +Block 0014 [ 98]: 6b3a5a9d94b13792 +Block 0014 [ 99]: f2255279896284a1 +Block 0014 [100]: db937dc3e2711431 +Block 0014 [101]: 4320a35809367826 +Block 0014 [102]: 0b7cc7006e18961b +Block 0014 [103]: 498eedf7ae16de25 +Block 0014 [104]: 9ed3fd7b3616d7c5 +Block 0014 [105]: 2f215d99735d5724 +Block 0014 [106]: 3846a13d7f2189da +Block 0014 [107]: f0911c31c8b28468 +Block 0014 [108]: 6f905c811b277595 +Block 0014 [109]: 5b6b45083eecca78 +Block 0014 [110]: 30b9c29f7c5fa245 +Block 0014 [111]: ac8f586b04386777 +Block 0014 [112]: a774d9b1a99dff6e +Block 0014 [113]: 4e1aade50867b4df +Block 0014 [114]: 05056826da07617e +Block 0014 [115]: cfd596b007b261a1 +Block 0014 [116]: 2fb87c6b4b19e672 +Block 0014 [117]: dc7a50615db0941f +Block 0014 [118]: 5ad371dd8bbb2d82 +Block 0014 [119]: 7a0a4565560fcf8e +Block 0014 [120]: 8edfdbb2246844e5 +Block 0014 [121]: 78cba762a604171c +Block 0014 [122]: d4d5140c608e25fd +Block 0014 [123]: e9b7a0f411af0178 +Block 0014 [124]: 495579fde5795935 +Block 0014 [125]: 98e91ae67903df3a +Block 0014 [126]: fb858d0ce6815c77 +Block 0014 [127]: abf9a3b4783b95b9 +Block 0015 [ 0]: 48f1ac950cf3881c +Block 0015 [ 1]: eaf883ea6cf90acd +Block 0015 [ 2]: b2abd6966dde13e6 +Block 0015 [ 3]: 1c1dbd963e509e80 +Block 0015 [ 4]: 99bfefb56bcc8b5b +Block 0015 [ 5]: 91b695442100a299 +Block 0015 [ 6]: d83bece1229baf44 +Block 0015 [ 7]: fbce75e4f69616ef +Block 0015 [ 8]: 8c4c204a54ea028d +Block 0015 [ 9]: 6e6afa1b87e5a778 +Block 0015 [ 10]: 32a41c52296d6509 +Block 0015 [ 11]: d76d7f53b02b548b +Block 0015 [ 12]: 317a97a4e29484ae +Block 0015 [ 13]: 49b5a36d87c27964 +Block 0015 [ 14]: 39ea0bdaf61f37c3 +Block 0015 [ 15]: 9e9152c38d3e5f91 +Block 0015 [ 16]: 71416bda681eb455 +Block 0015 [ 17]: d0a7c1a1d26677c7 +Block 0015 [ 18]: e663c0641e7f5e4e +Block 0015 [ 19]: 4553876046389bb4 +Block 0015 [ 20]: 3cde6995f45a4871 +Block 0015 [ 21]: 52de8d0ebc9f2d28 +Block 0015 [ 22]: 60cd90051fb84a8c +Block 0015 [ 23]: e185ea6d7388200b +Block 0015 [ 24]: 8d7d7020905d621a +Block 0015 [ 25]: 900bec536616cc0f +Block 0015 [ 26]: 283f8b890d0ae676 +Block 0015 [ 27]: 680bb488f2b0c5ba +Block 0015 [ 28]: 605284785bf2f48f +Block 0015 [ 29]: 66f88983aa442e96 +Block 0015 [ 30]: 335863bf15240c60 +Block 0015 [ 31]: 75e73ea0b669185d +Block 0015 [ 32]: 5afe255a49284d18 +Block 0015 [ 33]: 42d132c12033b815 +Block 0015 [ 34]: 768745082542997a +Block 0015 [ 35]: 3eaaadd309f971dc +Block 0015 [ 36]: 60063eab924ef931 +Block 0015 [ 37]: f64bdc7714548239 +Block 0015 [ 38]: b72beb1f7a4047bc +Block 0015 [ 39]: a0180a0fe772d833 +Block 0015 [ 40]: 555207f87100a775 +Block 0015 [ 41]: 348ac5544e3e12c2 +Block 0015 [ 42]: c549140299b026c3 +Block 0015 [ 43]: f3658936873c5eba +Block 0015 [ 44]: 49ff7a8cd84acebc +Block 0015 [ 45]: fe9706b4679eae94 +Block 0015 [ 46]: 0abfa68ea8bc7995 +Block 0015 [ 47]: e04df13b96469667 +Block 0015 [ 48]: d2509b6a6f172a1e +Block 0015 [ 49]: 3f98700992a85d42 +Block 0015 [ 50]: 37d15e6350f1fcf2 +Block 0015 [ 51]: 6a4bedc47ff0824d +Block 0015 [ 52]: 70f4fe2199d457ff +Block 0015 [ 53]: 2c352f913ad00226 +Block 0015 [ 54]: 80ec73821a01a1b7 +Block 0015 [ 55]: 52f144a2b92a0b8b +Block 0015 [ 56]: 8cb51546d7a50169 +Block 0015 [ 57]: b11c13a15ec5255d +Block 0015 [ 58]: deaccaa72dfd73e6 +Block 0015 [ 59]: c0d8ff50d1a70a84 +Block 0015 [ 60]: 063070a7a03bf4c5 +Block 0015 [ 61]: 90aa76c10d2f3dcd +Block 0015 [ 62]: b3ea5c879e1b8f69 +Block 0015 [ 63]: 06d58d40b299fff5 +Block 0015 [ 64]: f0906a0cbb014658 +Block 0015 [ 65]: 03fb6e4c776e4e6b +Block 0015 [ 66]: 341efc293b930c6a +Block 0015 [ 67]: 8c3495057d757b46 +Block 0015 [ 68]: af0b9102cb848408 +Block 0015 [ 69]: 4a61c0921fbfdb02 +Block 0015 [ 70]: d3a97a49364fcc87 +Block 0015 [ 71]: d89c0d1eaef9131c +Block 0015 [ 72]: f4ee9aa2027b0a0e +Block 0015 [ 73]: 7af4d9b428349614 +Block 0015 [ 74]: 71ff65de539e5a82 +Block 0015 [ 75]: 8f83a497e1669ac7 +Block 0015 [ 76]: 825661a2b539797e +Block 0015 [ 77]: 391f3e236e22d860 +Block 0015 [ 78]: 5bd028a09b96c6b8 +Block 0015 [ 79]: d03b3abd6c7bd98b +Block 0015 [ 80]: b218c3cff8ca229a +Block 0015 [ 81]: 449e748579dd114a +Block 0015 [ 82]: e75e5765ec0ef4eb +Block 0015 [ 83]: 927a53763eb52763 +Block 0015 [ 84]: eb31bea6ac58be13 +Block 0015 [ 85]: 3f9e0b6243e43d9c +Block 0015 [ 86]: 7d36ccb527d2f47c +Block 0015 [ 87]: 2e6737d2ac42f8a4 +Block 0015 [ 88]: 6be4965ce76dcf99 +Block 0015 [ 89]: 5266eb13b7c0fb67 +Block 0015 [ 90]: bc4a02952a5c891e +Block 0015 [ 91]: 652f04e1955a0cb2 +Block 0015 [ 92]: 94a422e3d810af83 +Block 0015 [ 93]: 00952c083000917f +Block 0015 [ 94]: 14a67f3032a00925 +Block 0015 [ 95]: 69f7e91255059cd0 +Block 0015 [ 96]: 5a708dd19514a98f +Block 0015 [ 97]: 91316fabb0d60317 +Block 0015 [ 98]: 687b66014c5a7015 +Block 0015 [ 99]: 8ad7ed6406b0f002 +Block 0015 [100]: 1dfbff523447315d +Block 0015 [101]: 4c896e08bd7477bd +Block 0015 [102]: 1665790a010701f7 +Block 0015 [103]: 2dc97780c92719db +Block 0015 [104]: 404cc7858d36f9f1 +Block 0015 [105]: ca5feabd4fd0c204 +Block 0015 [106]: 2cabce3fa772a19d +Block 0015 [107]: b877c257103bf937 +Block 0015 [108]: 5f9ea2426ce35573 +Block 0015 [109]: e6845f8d690e983d +Block 0015 [110]: de3d1d493abb9fbd +Block 0015 [111]: 82371cfa0ff53dd6 +Block 0015 [112]: 3336ba8f5026315f +Block 0015 [113]: 8110fe8c4a0ec071 +Block 0015 [114]: abefc53ff83604ed +Block 0015 [115]: 432543ba9c4c5317 +Block 0015 [116]: 1c9ffaa7191280d0 +Block 0015 [117]: b822a777b82ae96e +Block 0015 [118]: 3c0200fd356b34a8 +Block 0015 [119]: 78702afdbecd0848 +Block 0015 [120]: ceb5463bb7e4c860 +Block 0015 [121]: d779daa42cbece71 +Block 0015 [122]: 0f648209e29f3ee7 +Block 0015 [123]: 7ae6b67331d4cd58 +Block 0015 [124]: 5ec5eff47f3c7ded +Block 0015 [125]: c0f9dd6c59ff0521 +Block 0015 [126]: 6dbda1415a779a2f +Block 0015 [127]: 6fae8d18b407e040 +Block 0016 [ 0]: 710cfaf0bee662a5 +Block 0016 [ 1]: 6912d7353809b4ec +Block 0016 [ 2]: f75afc8a20e77848 +Block 0016 [ 3]: ad2ce00df7907bc6 +Block 0016 [ 4]: d8609558c4656b32 +Block 0016 [ 5]: df01d7192f02d6ad +Block 0016 [ 6]: 352b6d394b14dcd7 +Block 0016 [ 7]: 8c2959de89207bbe +Block 0016 [ 8]: 23dfe7c79c0babe3 +Block 0016 [ 9]: 681ddaa5b4076422 +Block 0016 [ 10]: 97a39739ef278fa6 +Block 0016 [ 11]: f595186e3f7cfb95 +Block 0016 [ 12]: fd8237458bedd057 +Block 0016 [ 13]: 5af3ccf518f8a6a9 +Block 0016 [ 14]: b4e2d70622b28ad2 +Block 0016 [ 15]: 9c9d445d0fc67760 +Block 0016 [ 16]: fe51b49a33018412 +Block 0016 [ 17]: a64f16fe32b4663c +Block 0016 [ 18]: 8e00e12bdb7129df +Block 0016 [ 19]: f7ff04584b60c14f +Block 0016 [ 20]: 974549315b64ae56 +Block 0016 [ 21]: d2e2f3bad2f3c964 +Block 0016 [ 22]: 2ad09f40f62e916c +Block 0016 [ 23]: 834c123230fda32f +Block 0016 [ 24]: da3f268010f0ae2d +Block 0016 [ 25]: af77c72c041a267a +Block 0016 [ 26]: 0da0f22e2ab41b36 +Block 0016 [ 27]: ac4bb65a75a868ed +Block 0016 [ 28]: c07e1215f30f9b25 +Block 0016 [ 29]: fe9c83043786499d +Block 0016 [ 30]: 4156d45c9c90cda3 +Block 0016 [ 31]: a8ec3559f62350e4 +Block 0016 [ 32]: 7f30e5cb02bfe5fa +Block 0016 [ 33]: 0f6c1b3fdbaaf663 +Block 0016 [ 34]: b997ddb2b173d5eb +Block 0016 [ 35]: 19127cee6480525a +Block 0016 [ 36]: 397a7b2b5255dc3a +Block 0016 [ 37]: f605ad9c1aaa7ed5 +Block 0016 [ 38]: 05d03ece38045455 +Block 0016 [ 39]: d4d5d65162bcca6e +Block 0016 [ 40]: 3cb61f380c80a889 +Block 0016 [ 41]: 17d299f871ec5ea4 +Block 0016 [ 42]: 693b37025942dfd6 +Block 0016 [ 43]: c6c05c5b0dc9e3e8 +Block 0016 [ 44]: 4303937541762ac5 +Block 0016 [ 45]: 3abafd38ef6245ee +Block 0016 [ 46]: 4bc1936e70418b04 +Block 0016 [ 47]: 25f7c72049559b67 +Block 0016 [ 48]: a977bc3194d89a91 +Block 0016 [ 49]: 471fac0934c45a12 +Block 0016 [ 50]: 78804b9bc54e8573 +Block 0016 [ 51]: 295f435d98ee06f9 +Block 0016 [ 52]: 6a32dc0811626e3b +Block 0016 [ 53]: c4db418d2dc47928 +Block 0016 [ 54]: 577ba22ecf5d231a +Block 0016 [ 55]: 28482d1a3153e0f4 +Block 0016 [ 56]: b42b7f05d45a65e8 +Block 0016 [ 57]: 1e242452db0744f4 +Block 0016 [ 58]: d97329be8474cd63 +Block 0016 [ 59]: 7cf9eff8edd07327 +Block 0016 [ 60]: 9f13cceab620d429 +Block 0016 [ 61]: f28a3026dd1db08f +Block 0016 [ 62]: 1c856cac60b6ab53 +Block 0016 [ 63]: a65279bd15d7f9a9 +Block 0016 [ 64]: 803fefc16404a710 +Block 0016 [ 65]: abe288e325cb7802 +Block 0016 [ 66]: d805bdfcc44040ae +Block 0016 [ 67]: 3ddeb139a7a0ed25 +Block 0016 [ 68]: f70cf79756da13a3 +Block 0016 [ 69]: 973f68ed071dbb8a +Block 0016 [ 70]: f3a939066cd21bc9 +Block 0016 [ 71]: b88d5fa30a1bab23 +Block 0016 [ 72]: 72227642f90106d4 +Block 0016 [ 73]: 7881a0e385380ebd +Block 0016 [ 74]: 04fc2c77bab1f4e7 +Block 0016 [ 75]: 9bebb3381fd536e3 +Block 0016 [ 76]: ef66d65a4a6050ab +Block 0016 [ 77]: a0c9b8785e782343 +Block 0016 [ 78]: a47023641507e262 +Block 0016 [ 79]: 465731861624687d +Block 0016 [ 80]: 2ae9549efc699fa5 +Block 0016 [ 81]: 6a15176ff48c36e5 +Block 0016 [ 82]: 82b481f1af0802e4 +Block 0016 [ 83]: b8c2d24bef0b79e5 +Block 0016 [ 84]: 269962820b63ad6b +Block 0016 [ 85]: e8d57e0ce2d8fa9b +Block 0016 [ 86]: d7fa415b4526ff7d +Block 0016 [ 87]: fafefe6b65041c41 +Block 0016 [ 88]: bfdef0334b2045a2 +Block 0016 [ 89]: feedd024bc36e30f +Block 0016 [ 90]: 20f45c92eb155f9c +Block 0016 [ 91]: 871efb3f3f90dbcd +Block 0016 [ 92]: 521a292c3cb15113 +Block 0016 [ 93]: 38662f1474beb8c1 +Block 0016 [ 94]: 69b8e7fc0ac12eed +Block 0016 [ 95]: 6ccfa59f401331ea +Block 0016 [ 96]: db7ad7c040889c92 +Block 0016 [ 97]: e0b3515aef70da17 +Block 0016 [ 98]: 529d53c2147f38f6 +Block 0016 [ 99]: 22c0f0ab0f5153d9 +Block 0016 [100]: e3a1e05598ad1072 +Block 0016 [101]: e0b0d28ad8a3e7eb +Block 0016 [102]: 7f68b2c84d2af77b +Block 0016 [103]: 466cc2bb5864b911 +Block 0016 [104]: ee63ea577f1f4e3f +Block 0016 [105]: 41ccb035b33684e4 +Block 0016 [106]: d90e6188131d652c +Block 0016 [107]: b13d24b082aca657 +Block 0016 [108]: 286d91f7dae701f6 +Block 0016 [109]: 7ddff979b2863b0d +Block 0016 [110]: 29b0f3577ed4f54d +Block 0016 [111]: e7b2fc6f93e22cd4 +Block 0016 [112]: 481aa7ea963c8277 +Block 0016 [113]: 5bbfd2c5c401194a +Block 0016 [114]: 773fa381b1d58f24 +Block 0016 [115]: fcdd4ac68cf673f4 +Block 0016 [116]: c2e5d48aee88b451 +Block 0016 [117]: 96ee1b09d99bac93 +Block 0016 [118]: f594138e33640e81 +Block 0016 [119]: e33f50e896cbcddb +Block 0016 [120]: d81f98bb8eecfdaf +Block 0016 [121]: ec31d99173fb77a4 +Block 0016 [122]: f2acc3b6fb255414 +Block 0016 [123]: bfef242337128b14 +Block 0016 [124]: bb663dc0e3338f7b +Block 0016 [125]: f49c51621d4201cb +Block 0016 [126]: e53c1fedd3052913 +Block 0016 [127]: ed6a6fe4f31cecdf +Block 0017 [ 0]: 952aece0f16fb3b6 +Block 0017 [ 1]: c94589dd7551b542 +Block 0017 [ 2]: be3fd2c66132daa4 +Block 0017 [ 3]: 81c48a0b3f2de2bc +Block 0017 [ 4]: 9ac5a66a083de3a1 +Block 0017 [ 5]: 17ec452a15738cf9 +Block 0017 [ 6]: 56671b153c50b567 +Block 0017 [ 7]: a738f66fc6633cd6 +Block 0017 [ 8]: e2f5b4c00b04b715 +Block 0017 [ 9]: 3cb7271c9e33787a +Block 0017 [ 10]: 4afb98c129a9ba81 +Block 0017 [ 11]: 401f1034d0cdcef6 +Block 0017 [ 12]: b3efedcb63fd0b52 +Block 0017 [ 13]: 4ca2a7602ee2abc3 +Block 0017 [ 14]: 7e220a5a8e56f8f4 +Block 0017 [ 15]: 627b16f115ab64b3 +Block 0017 [ 16]: 9005adb61ec4d578 +Block 0017 [ 17]: a40878f747dc0488 +Block 0017 [ 18]: 716efca0eefef3fb +Block 0017 [ 19]: 267e4dd2ce4a37d4 +Block 0017 [ 20]: 1852a3b61229cd4b +Block 0017 [ 21]: d9e05bec5abb0cfb +Block 0017 [ 22]: 809000e0ce09670a +Block 0017 [ 23]: f63651bc886e9b53 +Block 0017 [ 24]: 6618b2ab81b879b1 +Block 0017 [ 25]: 1c47da92a5d1c8c9 +Block 0017 [ 26]: 783113941e83d8da +Block 0017 [ 27]: 78201466eedd7fe9 +Block 0017 [ 28]: 89d3b3aa0c047056 +Block 0017 [ 29]: ddd16957defe030d +Block 0017 [ 30]: db81dbb7545aacfc +Block 0017 [ 31]: 80932e26f6ac5e56 +Block 0017 [ 32]: d590d512dec1e8bc +Block 0017 [ 33]: 22d20bd8220c4073 +Block 0017 [ 34]: 7f7993cab07534c6 +Block 0017 [ 35]: d738bd5c4c396610 +Block 0017 [ 36]: 15f88e3db0cd588f +Block 0017 [ 37]: b297a18e99f05f81 +Block 0017 [ 38]: d2fcbe03ca586a9f +Block 0017 [ 39]: da08c038b2aa3bef +Block 0017 [ 40]: 5a190360d985b628 +Block 0017 [ 41]: 41b215e0ed7bb415 +Block 0017 [ 42]: b38b27298d8dd9da +Block 0017 [ 43]: 011f566449fdc64c +Block 0017 [ 44]: 70367da514bde68d +Block 0017 [ 45]: 663e8093c3095c2d +Block 0017 [ 46]: 4872581648e38cf3 +Block 0017 [ 47]: a24469e0e2bb9daa +Block 0017 [ 48]: 95f032b49673e322 +Block 0017 [ 49]: ac1b38e53d2fb7c9 +Block 0017 [ 50]: 9179c042a54419a1 +Block 0017 [ 51]: f754d6e4ba540299 +Block 0017 [ 52]: fd2c6f8f49d6b42d +Block 0017 [ 53]: 5afa29c2f36e9a2f +Block 0017 [ 54]: ac740f84ffaca274 +Block 0017 [ 55]: 7e0fd8c31320c792 +Block 0017 [ 56]: 9b16d4d7fc190110 +Block 0017 [ 57]: a49b6f07283e4e86 +Block 0017 [ 58]: 040b686ee5047205 +Block 0017 [ 59]: 8aed40cb6e27e3eb +Block 0017 [ 60]: 4ca31b9fd4606d5f +Block 0017 [ 61]: 74c87970a65f8356 +Block 0017 [ 62]: 1eb1d933307076b2 +Block 0017 [ 63]: 304aa86fa95d0ee4 +Block 0017 [ 64]: cfb6cbac1b17beee +Block 0017 [ 65]: 2661f3e0b33a5a4d +Block 0017 [ 66]: 18e500d1ef4fd8bc +Block 0017 [ 67]: 9afec62590f199db +Block 0017 [ 68]: 26e4843c77db29e4 +Block 0017 [ 69]: 91603b76ec35253b +Block 0017 [ 70]: 1756708a5280549d +Block 0017 [ 71]: ca5eaeed94c69c73 +Block 0017 [ 72]: 2ca3c6040c38b167 +Block 0017 [ 73]: 3013413ecde7db9a +Block 0017 [ 74]: a0691438772206c4 +Block 0017 [ 75]: 06561b5f445b5b51 +Block 0017 [ 76]: 0d197b9980a81b16 +Block 0017 [ 77]: e71cd08afa96a69c +Block 0017 [ 78]: 71d606b12ccac9c4 +Block 0017 [ 79]: 8b80d848ff657dbc +Block 0017 [ 80]: 1ef4e7aa2eb67ca1 +Block 0017 [ 81]: fd3cbb5c194e156a +Block 0017 [ 82]: 943b8a9eea7c81d8 +Block 0017 [ 83]: fdba08a52c123357 +Block 0017 [ 84]: 282d371eace2eca3 +Block 0017 [ 85]: 44ddb3bc4d49b335 +Block 0017 [ 86]: a86a22dd6190e990 +Block 0017 [ 87]: 85a33224357364fa +Block 0017 [ 88]: ed80d83fc228f476 +Block 0017 [ 89]: ac8539c903ad25ae +Block 0017 [ 90]: 2face77d2e2c1eb8 +Block 0017 [ 91]: 4aed4cbac77719fd +Block 0017 [ 92]: 89ae974f79cf3813 +Block 0017 [ 93]: 6cd3ac7cab276e7f +Block 0017 [ 94]: d32cf45b417879f7 +Block 0017 [ 95]: 1b5e429dc8b9b907 +Block 0017 [ 96]: 6bf3ebfe54c463d6 +Block 0017 [ 97]: 92b310b3afe0e8b8 +Block 0017 [ 98]: 39f4fb9b656899c6 +Block 0017 [ 99]: 5235703fecb3f167 +Block 0017 [100]: 9ea64cd88ba4357b +Block 0017 [101]: ea54ed9dbe94c8ff +Block 0017 [102]: c5cea8ee03f01ecb +Block 0017 [103]: 0f3640c69fedd57d +Block 0017 [104]: 36aefd6f034c6728 +Block 0017 [105]: b44915a3339efeb6 +Block 0017 [106]: d0bb17f934bc2700 +Block 0017 [107]: 983ad4dd718a532e +Block 0017 [108]: 35be08b039710fb5 +Block 0017 [109]: 38acd5446171ca7d +Block 0017 [110]: ec2ecb38c65e8336 +Block 0017 [111]: ef3da5eac5cc16bb +Block 0017 [112]: bfef6c86c428166d +Block 0017 [113]: 7d7f878381f100da +Block 0017 [114]: 36537e58dbe2ef59 +Block 0017 [115]: 53a2a7328158b0b0 +Block 0017 [116]: e5a265a5833444c0 +Block 0017 [117]: a523477bb35aed86 +Block 0017 [118]: 820aead8675755b4 +Block 0017 [119]: 1599320a5cd31db5 +Block 0017 [120]: 1e2832448cafe90e +Block 0017 [121]: fc80c971ff3a0716 +Block 0017 [122]: 05c122688dc31dc4 +Block 0017 [123]: 7e1d0c1c98f81cb3 +Block 0017 [124]: 8931b0cb5450a64b +Block 0017 [125]: 8f1db3816e6d618b +Block 0017 [126]: 0ed498b9dd789b3c +Block 0017 [127]: c125a3023d2920de +Block 0018 [ 0]: 8fabded4e0f2a1e4 +Block 0018 [ 1]: 68d45e22ed92b46d +Block 0018 [ 2]: c71a5ed100fc0449 +Block 0018 [ 3]: 7280db58709e201d +Block 0018 [ 4]: 9bbba222ee9a909b +Block 0018 [ 5]: d104738019223045 +Block 0018 [ 6]: e79cf9aecc636fd5 +Block 0018 [ 7]: 0c3e482363104c2e +Block 0018 [ 8]: 168dea4b19461c22 +Block 0018 [ 9]: 0a430224f27650db +Block 0018 [ 10]: 5876a9465dff7324 +Block 0018 [ 11]: cd5bdc51f16cdc6a +Block 0018 [ 12]: f7485bceab705b14 +Block 0018 [ 13]: 0194df9b6c93fdee +Block 0018 [ 14]: 64c4504f4cad09b6 +Block 0018 [ 15]: 39cb64e258fc4c55 +Block 0018 [ 16]: b6be51ba477832fb +Block 0018 [ 17]: a67ce79038849bc7 +Block 0018 [ 18]: 3fe1784e2a94738f +Block 0018 [ 19]: c3a849b6a92cfcfa +Block 0018 [ 20]: fcc82176f80498c2 +Block 0018 [ 21]: 263341b189902b6e +Block 0018 [ 22]: 417defc8c7f8f3c9 +Block 0018 [ 23]: f6644368b34df787 +Block 0018 [ 24]: ec2a2afb635a3784 +Block 0018 [ 25]: 0b701ff950a6425a +Block 0018 [ 26]: 9050f2cf14974fc1 +Block 0018 [ 27]: eabdb9008b5d7451 +Block 0018 [ 28]: 87294049cce968f8 +Block 0018 [ 29]: 3229fd9d6e0208d4 +Block 0018 [ 30]: 2711963d8828f89d +Block 0018 [ 31]: a36db7b573f46447 +Block 0018 [ 32]: adb0af4d022fde58 +Block 0018 [ 33]: 1ae6dfe87b9c72d0 +Block 0018 [ 34]: a84b81e0c9d4b3a3 +Block 0018 [ 35]: 2b938f9ba0f08d63 +Block 0018 [ 36]: 3636e2dbc0451bc0 +Block 0018 [ 37]: 4296eb63bdc8dbed +Block 0018 [ 38]: 55b9f09671453ea8 +Block 0018 [ 39]: ff7c0de03e212c77 +Block 0018 [ 40]: 4fe5bc2a5b762094 +Block 0018 [ 41]: aea3348becc82a97 +Block 0018 [ 42]: a0a6f19496037fd6 +Block 0018 [ 43]: 08f83b9ee8b1aec9 +Block 0018 [ 44]: c603a7b74d79d52d +Block 0018 [ 45]: 25bc006f70c29714 +Block 0018 [ 46]: 781425263a5ee427 +Block 0018 [ 47]: da4a74361607728d +Block 0018 [ 48]: dc6e928f3fcecee9 +Block 0018 [ 49]: a4e0922764d6f97f +Block 0018 [ 50]: 230b19a966032ca7 +Block 0018 [ 51]: e11298c93942a1f0 +Block 0018 [ 52]: 15a770dff2136cb8 +Block 0018 [ 53]: b99ec484f91812de +Block 0018 [ 54]: a2f500db72ef0d4e +Block 0018 [ 55]: c452e832489cccd3 +Block 0018 [ 56]: b55fbd3ae1cd35d4 +Block 0018 [ 57]: c74f7c32d7acb75f +Block 0018 [ 58]: 164e2f10659a683f +Block 0018 [ 59]: 9eb1438025013929 +Block 0018 [ 60]: 7899f290de335c1f +Block 0018 [ 61]: 18901b574e91a434 +Block 0018 [ 62]: a2a6f1685e526f95 +Block 0018 [ 63]: 077130043c8eda1b +Block 0018 [ 64]: cde5f3f6fb439b5a +Block 0018 [ 65]: b2e556df38615dc4 +Block 0018 [ 66]: b15ac399f94a6ff6 +Block 0018 [ 67]: c9647f6c2465eb54 +Block 0018 [ 68]: 3dfa14a29e41088d +Block 0018 [ 69]: 5e9712b7ec261592 +Block 0018 [ 70]: 9bbd51d4b33f949a +Block 0018 [ 71]: 10ac40fab5131993 +Block 0018 [ 72]: 91d646159065a62d +Block 0018 [ 73]: 3fbc0be21b7cedf9 +Block 0018 [ 74]: d6693caf5b42f0e4 +Block 0018 [ 75]: ae9de9793e268970 +Block 0018 [ 76]: 3c53254b71f4fa2d +Block 0018 [ 77]: 55b9ba93b4d18f36 +Block 0018 [ 78]: 2bb3e1e9c076965b +Block 0018 [ 79]: 45d215bb3c731484 +Block 0018 [ 80]: c3944831932612a0 +Block 0018 [ 81]: 7fd4c8b7fa48ffaa +Block 0018 [ 82]: ec86027bbdf08fe2 +Block 0018 [ 83]: c8a4d2c4a28d0b45 +Block 0018 [ 84]: 795c2d1e57a61e77 +Block 0018 [ 85]: 92bf81b1f4d87b5a +Block 0018 [ 86]: 1ef911d4a9425b17 +Block 0018 [ 87]: 6d25fa4b3185b9d4 +Block 0018 [ 88]: a93f54aa4124c757 +Block 0018 [ 89]: 48af4d4768aecbee +Block 0018 [ 90]: 35d4abed720841ed +Block 0018 [ 91]: 665b3ac85fc4ee43 +Block 0018 [ 92]: 7ab4ca6ce7050e88 +Block 0018 [ 93]: 5c153804cce23a8e +Block 0018 [ 94]: 08a7790b6ae73d7e +Block 0018 [ 95]: 783cf66f52f2e00f +Block 0018 [ 96]: f7b816646210de2b +Block 0018 [ 97]: 09b82cc60113ef18 +Block 0018 [ 98]: f01c85f079ba8c5d +Block 0018 [ 99]: a6b659870e6f818c +Block 0018 [100]: 3455c90f45c36368 +Block 0018 [101]: 4aaff880c2bf4336 +Block 0018 [102]: 3ca38b4514afaf7b +Block 0018 [103]: ae6baefa48127298 +Block 0018 [104]: 56c02afca5fa1ee6 +Block 0018 [105]: 276b9dc16980b90f +Block 0018 [106]: 3b7059c3608de518 +Block 0018 [107]: daafa75eb308f5d4 +Block 0018 [108]: 5106f5a61bf578e2 +Block 0018 [109]: 61298f9f09494838 +Block 0018 [110]: 898ce468450ba934 +Block 0018 [111]: 4603cddb732f5d23 +Block 0018 [112]: 4f992f8582a5558d +Block 0018 [113]: c04fa5bcc8962b01 +Block 0018 [114]: e7a91e75d0fb9d85 +Block 0018 [115]: 0d8618021c04f84f +Block 0018 [116]: 44805dbf1d4e2f5f +Block 0018 [117]: 1e3e39a6076048c9 +Block 0018 [118]: dce41a86d7fb8643 +Block 0018 [119]: 70645bbe501fe7a4 +Block 0018 [120]: 4e47b5e159be52ce +Block 0018 [121]: 87f87906a56eb933 +Block 0018 [122]: e3d1788b0c2aba8b +Block 0018 [123]: 33be685aa22ab3ee +Block 0018 [124]: 8ced6b6f38143c6c +Block 0018 [125]: 7423f8ec9a516e00 +Block 0018 [126]: d7f7c1ff44c6d67d +Block 0018 [127]: f23b8867d4dd6fe1 +Block 0019 [ 0]: e68c94b2460ec841 +Block 0019 [ 1]: 99aaac0b34f4f8b7 +Block 0019 [ 2]: 3c66c650488686ee +Block 0019 [ 3]: 006374c400feb21d +Block 0019 [ 4]: eea0a1659a2c98e5 +Block 0019 [ 5]: 780c33d6870d93a5 +Block 0019 [ 6]: 2194f53780f57e6d +Block 0019 [ 7]: 151aadf89b99214b +Block 0019 [ 8]: 8e2994935a4ace33 +Block 0019 [ 9]: 3fea9a95dd889748 +Block 0019 [ 10]: 25bda6a6de6c9a02 +Block 0019 [ 11]: e2e31f2388fb26bb +Block 0019 [ 12]: e67486341d841440 +Block 0019 [ 13]: 633ac48051c0a0f1 +Block 0019 [ 14]: 62ebe294b85f42bf +Block 0019 [ 15]: 4ae4d2d157c1aa18 +Block 0019 [ 16]: 82e4215bf4d93f58 +Block 0019 [ 17]: a2ca18667bd8f7ff +Block 0019 [ 18]: 3037c66438e88973 +Block 0019 [ 19]: da18a6f3fef45119 +Block 0019 [ 20]: 3437a3d396527380 +Block 0019 [ 21]: 13cee0476a7e3f5f +Block 0019 [ 22]: 8ec5610e05e28f37 +Block 0019 [ 23]: 4d48ec3452f91e7b +Block 0019 [ 24]: 3a793c6dde0c489d +Block 0019 [ 25]: 7b79a433882146fd +Block 0019 [ 26]: 6e8562d28af6c353 +Block 0019 [ 27]: 9a0b815272ab6b2d +Block 0019 [ 28]: 989089e323496f7e +Block 0019 [ 29]: 30df1bdc4aea0225 +Block 0019 [ 30]: 6a3a564f55f4b3dd +Block 0019 [ 31]: fc50dc83bceb546c +Block 0019 [ 32]: 447e4405aa759904 +Block 0019 [ 33]: 58266b1f78f2ac2e +Block 0019 [ 34]: 31dd27bf51d0d63a +Block 0019 [ 35]: 735e46b955e39717 +Block 0019 [ 36]: 1137bbe17d3b419b +Block 0019 [ 37]: ce95092221294cf2 +Block 0019 [ 38]: b6d43f6023590ef7 +Block 0019 [ 39]: b9d3ffdc98719c65 +Block 0019 [ 40]: ff3be96758e36733 +Block 0019 [ 41]: a12599993003b4a9 +Block 0019 [ 42]: 5223772f965c4f8e +Block 0019 [ 43]: a78299a08abeb803 +Block 0019 [ 44]: e90d78a70c0e8e0f +Block 0019 [ 45]: 74ecc0d57a293296 +Block 0019 [ 46]: d4ca0fa2a509d91e +Block 0019 [ 47]: 86618f44fa0a98d8 +Block 0019 [ 48]: daffa696aa145a98 +Block 0019 [ 49]: f80e1bbe12db884f +Block 0019 [ 50]: ebe33c1b5affb1fd +Block 0019 [ 51]: 44d448690ffbe1c9 +Block 0019 [ 52]: 9ca41894f7191203 +Block 0019 [ 53]: 1d2a66481d0d7db1 +Block 0019 [ 54]: 76920c05c68f5a3e +Block 0019 [ 55]: 0324f0278705d5af +Block 0019 [ 56]: 3452c35f0f075a17 +Block 0019 [ 57]: cde1816fe56e2fbe +Block 0019 [ 58]: 61abb618c5c0121c +Block 0019 [ 59]: f38bbdf15d765970 +Block 0019 [ 60]: 64706d4efadddf8f +Block 0019 [ 61]: 668bacefb840fa45 +Block 0019 [ 62]: 81231b2e6d5a7228 +Block 0019 [ 63]: e0d93a1b5bcd2131 +Block 0019 [ 64]: 0bacf6789927c3e9 +Block 0019 [ 65]: 7450e8b30f92531e +Block 0019 [ 66]: 05870796723598e7 +Block 0019 [ 67]: 50387864aef7f3a6 +Block 0019 [ 68]: 2a5cc79b01e2d90b +Block 0019 [ 69]: d51ae1a77c1dd0c4 +Block 0019 [ 70]: d79de203232c010b +Block 0019 [ 71]: 4f9bdd24343d3330 +Block 0019 [ 72]: c1aaa24ff29cfcdf +Block 0019 [ 73]: c84dbb8f6f12e921 +Block 0019 [ 74]: dc444657b3bf3c81 +Block 0019 [ 75]: 18267cb2799f6008 +Block 0019 [ 76]: d9f2cb8a341fe77f +Block 0019 [ 77]: e291cf5c2060b212 +Block 0019 [ 78]: 46cb0528271d6244 +Block 0019 [ 79]: b734aca21de50d61 +Block 0019 [ 80]: 5a5de201bf6a2673 +Block 0019 [ 81]: 19a117528479480c +Block 0019 [ 82]: e79b301c2d155dd0 +Block 0019 [ 83]: 0be0429e25f3d73f +Block 0019 [ 84]: cf50115c5a8756f4 +Block 0019 [ 85]: ee9df0785e86b82c +Block 0019 [ 86]: 867ee8925e4a829f +Block 0019 [ 87]: db6994d375cd1c5d +Block 0019 [ 88]: 613424ffe028a72b +Block 0019 [ 89]: cf2819132c6b90fb +Block 0019 [ 90]: ae7c354a78ceefa7 +Block 0019 [ 91]: 6ee261ad0d0a6524 +Block 0019 [ 92]: e063d7b6752108d8 +Block 0019 [ 93]: d400d60801ad65fe +Block 0019 [ 94]: 056813fbb4b32958 +Block 0019 [ 95]: da6538dd2c171c1e +Block 0019 [ 96]: f5620f8890c1353e +Block 0019 [ 97]: c3915a2bedda38fc +Block 0019 [ 98]: f28944cea0d819ed +Block 0019 [ 99]: 07e0317ad31d983a +Block 0019 [100]: 54bdd629f270f9db +Block 0019 [101]: 96936d62fda5b903 +Block 0019 [102]: ca7bf41d8b5afa41 +Block 0019 [103]: 4930a62f8787eef7 +Block 0019 [104]: 055401e28cace080 +Block 0019 [105]: b22d6a0368a17683 +Block 0019 [106]: 8153868647380d50 +Block 0019 [107]: 72e5c3f1ec2ccb24 +Block 0019 [108]: 5ef04cea652960ab +Block 0019 [109]: d1c491afee065791 +Block 0019 [110]: 9123e3d65be41ef6 +Block 0019 [111]: 5e573c21771a6e0f +Block 0019 [112]: 4c233c6896ad2bd8 +Block 0019 [113]: 0917fac4bef0e86a +Block 0019 [114]: d5eba161cdd4b19c +Block 0019 [115]: 231e08de94edb6a1 +Block 0019 [116]: 4238a5d0b6fee732 +Block 0019 [117]: 2ec30accc4214752 +Block 0019 [118]: 08adfd6dbb5c724f +Block 0019 [119]: 2bba105466e32b7c +Block 0019 [120]: e55defcb46625080 +Block 0019 [121]: 855a7f9b856df6b7 +Block 0019 [122]: 1a800bd9d8f62493 +Block 0019 [123]: 5c5a069470c15cc2 +Block 0019 [124]: fcc3739e177a54e1 +Block 0019 [125]: 76a1b592006e7414 +Block 0019 [126]: 5e597cdfa3b799a0 +Block 0019 [127]: c57e11887fcf795c +Block 0020 [ 0]: c54d3e2cb71bdcb3 +Block 0020 [ 1]: 045b75b5a325da89 +Block 0020 [ 2]: b9e14f31c00c36a4 +Block 0020 [ 3]: 966cda36e60c59d2 +Block 0020 [ 4]: 1f2fed12ae03196a +Block 0020 [ 5]: 394d0e3f47889ec9 +Block 0020 [ 6]: 1dfa30485d24f092 +Block 0020 [ 7]: 85fc989151ff8366 +Block 0020 [ 8]: 178abd2a02a4a8e9 +Block 0020 [ 9]: 0f95d8d8b4b33b17 +Block 0020 [ 10]: 7ce14c39ea336a61 +Block 0020 [ 11]: 8588e56ba55173b4 +Block 0020 [ 12]: 7c9f9fef0393618e +Block 0020 [ 13]: 3981488aa716fff4 +Block 0020 [ 14]: 2de3fcfec310f1f7 +Block 0020 [ 15]: 64c8abbb27c8ccb6 +Block 0020 [ 16]: a71a061b8aad5f01 +Block 0020 [ 17]: 4a8299be564abd67 +Block 0020 [ 18]: 928630af5033c132 +Block 0020 [ 19]: 35c2cf541f2c3539 +Block 0020 [ 20]: 934b011ac1d5f33f +Block 0020 [ 21]: f0261dfa4a0b84ff +Block 0020 [ 22]: a88a1ff2595f7ae4 +Block 0020 [ 23]: a03126345067fa76 +Block 0020 [ 24]: 3df3835b2c16eb32 +Block 0020 [ 25]: 60b4166b25329b80 +Block 0020 [ 26]: a8d471f7d45ff5ba +Block 0020 [ 27]: 2e6fe056562554d2 +Block 0020 [ 28]: 3d07f858142c2fe3 +Block 0020 [ 29]: dddfeca432ccd3ba +Block 0020 [ 30]: 8400fb66a8db5b16 +Block 0020 [ 31]: a748bca7d7302b54 +Block 0020 [ 32]: f925832d18b51065 +Block 0020 [ 33]: 77cb3f75fde4d890 +Block 0020 [ 34]: f35d2422522de8c3 +Block 0020 [ 35]: dfa7fde45521747b +Block 0020 [ 36]: df0695c8e0139c4d +Block 0020 [ 37]: 51047eb7b5dd8aba +Block 0020 [ 38]: 7c44efc45de0bcfd +Block 0020 [ 39]: 1491c82e92645137 +Block 0020 [ 40]: 6e6ecc04f4212e26 +Block 0020 [ 41]: 9d5b9ebb54f1e541 +Block 0020 [ 42]: 598e7f273d8a08ee +Block 0020 [ 43]: 3b6e27abfb649a5a +Block 0020 [ 44]: d0c6518b5a6a4791 +Block 0020 [ 45]: 2cbcf2c3c944b133 +Block 0020 [ 46]: ac7f945b5e493475 +Block 0020 [ 47]: 028cefefd0a89765 +Block 0020 [ 48]: de50ac74cb3dfc57 +Block 0020 [ 49]: c1f212cb7ff0e154 +Block 0020 [ 50]: 6c12225df148f8c9 +Block 0020 [ 51]: a531d30641fb8f3e +Block 0020 [ 52]: feb48fd4409e38ea +Block 0020 [ 53]: 7d97606342d70db7 +Block 0020 [ 54]: 25e4dc7a78a45ed1 +Block 0020 [ 55]: 213b0ad8218be4b2 +Block 0020 [ 56]: 907b03533fe689f6 +Block 0020 [ 57]: 0254dbaa7b4d1cb4 +Block 0020 [ 58]: fa2127039a17e414 +Block 0020 [ 59]: 8e42e9379fc70e9a +Block 0020 [ 60]: 7d6fcd35dfdc3df8 +Block 0020 [ 61]: 7c117c259b7f677b +Block 0020 [ 62]: ced9a88d8b6d21b9 +Block 0020 [ 63]: 3cd93f07ac90b6dd +Block 0020 [ 64]: 3f64026f2f2d5d21 +Block 0020 [ 65]: 918da82771c98e07 +Block 0020 [ 66]: fa0bcaa023b52934 +Block 0020 [ 67]: d254161d884dab65 +Block 0020 [ 68]: 0ab9fb2e38f39aa0 +Block 0020 [ 69]: 9b0ad40ca7a7e53d +Block 0020 [ 70]: a59718f79af53441 +Block 0020 [ 71]: 61dd123c0753cd8b +Block 0020 [ 72]: 9be36512f98bf123 +Block 0020 [ 73]: 1b10f5701374b409 +Block 0020 [ 74]: d2a9ecd263a43767 +Block 0020 [ 75]: 5588fcb390d08fc6 +Block 0020 [ 76]: 48c7d0ccbd865afa +Block 0020 [ 77]: baf1f14150d0c6ac +Block 0020 [ 78]: a513e811bed260aa +Block 0020 [ 79]: e2256898e554eabe +Block 0020 [ 80]: 245d08410ddc2073 +Block 0020 [ 81]: cac07dbc1480586f +Block 0020 [ 82]: 7af04b8310ad0ece +Block 0020 [ 83]: 5a12c12021d4c398 +Block 0020 [ 84]: 6e6771bb7a6146d5 +Block 0020 [ 85]: 3fec7cc7d0f05f06 +Block 0020 [ 86]: dac5d20d4a7f0558 +Block 0020 [ 87]: 36e29accf65b0fbf +Block 0020 [ 88]: 17f4cafd73b22af1 +Block 0020 [ 89]: bc3daf981eae353f +Block 0020 [ 90]: 9ea48362e9375a28 +Block 0020 [ 91]: dfe05001142b3662 +Block 0020 [ 92]: 66a26ef9cb3c9a62 +Block 0020 [ 93]: 7d9fece4c8e9060d +Block 0020 [ 94]: 67a9a26a7af4d68f +Block 0020 [ 95]: 0c73007e1b65eeb4 +Block 0020 [ 96]: bb0815188f59f189 +Block 0020 [ 97]: 532b8112c89fb754 +Block 0020 [ 98]: fe870b6acefedf44 +Block 0020 [ 99]: 87ffc30535a4e771 +Block 0020 [100]: 3065fc324181dea9 +Block 0020 [101]: bb66f0d2a87bebb6 +Block 0020 [102]: ec737a39dcfc4886 +Block 0020 [103]: a790b38df1cd0369 +Block 0020 [104]: fde7bcafccb7dec9 +Block 0020 [105]: fab95e7a5e1e9896 +Block 0020 [106]: 8fa2fb1044142009 +Block 0020 [107]: 13369c517008a55a +Block 0020 [108]: 51ebff2547ca9d7d +Block 0020 [109]: b4fec36f856ee016 +Block 0020 [110]: 522b8ce6e5135485 +Block 0020 [111]: 875bae25f8ac8cb3 +Block 0020 [112]: eff897d039cdc9b9 +Block 0020 [113]: 99758f2baea77a83 +Block 0020 [114]: d58ad76dd94db6e5 +Block 0020 [115]: 9b328f1e84364f75 +Block 0020 [116]: 4243923d22b1457d +Block 0020 [117]: 96de22ee64f80846 +Block 0020 [118]: 9663e19dc0808f0e +Block 0020 [119]: a31787db1626f171 +Block 0020 [120]: fe941f17981bedc3 +Block 0020 [121]: 24925bbf73d23de8 +Block 0020 [122]: d87e2a9df7952d66 +Block 0020 [123]: 163a92313113e2b6 +Block 0020 [124]: 8fcde73c94fb861b +Block 0020 [125]: 599d993568adde24 +Block 0020 [126]: ef53a06b7dc3ab34 +Block 0020 [127]: 6164df011b9803ce +Block 0021 [ 0]: b4359aafad15cb66 +Block 0021 [ 1]: 7ce75a4dc9d24ad5 +Block 0021 [ 2]: 80628ac68feba208 +Block 0021 [ 3]: 647a73904f76cf42 +Block 0021 [ 4]: 054f3fa5406f291c +Block 0021 [ 5]: 2a8a0ce8ca579a6c +Block 0021 [ 6]: 241db1a3fca580d8 +Block 0021 [ 7]: 53be796a6148af72 +Block 0021 [ 8]: 2c3f7ef0d9fa0fa6 +Block 0021 [ 9]: 232118c9bc2c1821 +Block 0021 [ 10]: 4732801687b6ad99 +Block 0021 [ 11]: 091eede831c70741 +Block 0021 [ 12]: 390b7bad92e5aad4 +Block 0021 [ 13]: 0e3bd13e7b8cf2b2 +Block 0021 [ 14]: a5d92db9aad5ebcb +Block 0021 [ 15]: 33096e82e7d9a193 +Block 0021 [ 16]: 345a736d05b8ae2e +Block 0021 [ 17]: 3cf0b101b23e68e3 +Block 0021 [ 18]: 3f206123e8289d5e +Block 0021 [ 19]: b3b82744857e6420 +Block 0021 [ 20]: 09fe2ef20ed5f50e +Block 0021 [ 21]: 309b9c0a7ebde4b3 +Block 0021 [ 22]: 110b6319f949d6d6 +Block 0021 [ 23]: 33afd02b5efd01cb +Block 0021 [ 24]: 1c64e2a0bf49aa3b +Block 0021 [ 25]: 91f7d6182f04c9e0 +Block 0021 [ 26]: f838cbeb18e1c36a +Block 0021 [ 27]: 83b0dbfaa26dd968 +Block 0021 [ 28]: b4bd77cde2e42069 +Block 0021 [ 29]: 92fb33478ed213fc +Block 0021 [ 30]: bd155dc19753e426 +Block 0021 [ 31]: b3baebd3c6baecac +Block 0021 [ 32]: 5503e71b97973de3 +Block 0021 [ 33]: 36191e2eb2082f5a +Block 0021 [ 34]: ee885969b22aad9c +Block 0021 [ 35]: 2134f58df159795c +Block 0021 [ 36]: dcf3454302715c0c +Block 0021 [ 37]: 96d6f6d96728028f +Block 0021 [ 38]: a6c2214609c42c1b +Block 0021 [ 39]: b4c9277ac8edc055 +Block 0021 [ 40]: 5ee3a94d1fbb0c98 +Block 0021 [ 41]: 5c6cc1572251a5df +Block 0021 [ 42]: 65460fd6055384d0 +Block 0021 [ 43]: 53046124ab0bb1ce +Block 0021 [ 44]: c1588ca311f6229b +Block 0021 [ 45]: af4c3450fd49bde2 +Block 0021 [ 46]: d8bd84abebca4b44 +Block 0021 [ 47]: 0dbd468e2ce4c736 +Block 0021 [ 48]: a05732cb618fb3d2 +Block 0021 [ 49]: 4285ee522591c15a +Block 0021 [ 50]: 226f73bbeb355b3d +Block 0021 [ 51]: 71eaaa9babe05328 +Block 0021 [ 52]: 34e517122258eb4f +Block 0021 [ 53]: 8db93c1689432f17 +Block 0021 [ 54]: cc042f252799cbdc +Block 0021 [ 55]: eb7bc92c56f1a160 +Block 0021 [ 56]: 93e3f8caf83238ff +Block 0021 [ 57]: 3d09fe62b2cec6ee +Block 0021 [ 58]: 0b3506ec7cc5c28b +Block 0021 [ 59]: 593b5033fc8e18eb +Block 0021 [ 60]: 09082196bc215c48 +Block 0021 [ 61]: 653aac366e202636 +Block 0021 [ 62]: d7c8fc4e7aff96b2 +Block 0021 [ 63]: 091ebda3ffbaba3e +Block 0021 [ 64]: d3b37b144c8d36ef +Block 0021 [ 65]: 88a95e9be1dc5dc8 +Block 0021 [ 66]: 083c1a074ea5a5e9 +Block 0021 [ 67]: 34a11d71b4925a91 +Block 0021 [ 68]: ac3f2081b74276e1 +Block 0021 [ 69]: e178dc364e9ce587 +Block 0021 [ 70]: fc358da58b918d09 +Block 0021 [ 71]: c98f6b556d55d177 +Block 0021 [ 72]: aef7971cfa9ff37d +Block 0021 [ 73]: b5d411fd662c5fba +Block 0021 [ 74]: 4e2562e0dbfdcbcb +Block 0021 [ 75]: b03ab288ba43ac82 +Block 0021 [ 76]: 9b7cd3120b8eecce +Block 0021 [ 77]: d311e41b9b961a2c +Block 0021 [ 78]: d74f38c1f470407b +Block 0021 [ 79]: b436ea598c38c2e8 +Block 0021 [ 80]: be7c8e0d99fcfa5b +Block 0021 [ 81]: 277bb5b7d604b0f3 +Block 0021 [ 82]: 95aa4567c7c08ced +Block 0021 [ 83]: b983c108c9552cc5 +Block 0021 [ 84]: dad3e1c67fc6291e +Block 0021 [ 85]: eea86a2a4fa30ee2 +Block 0021 [ 86]: 8e5e499491ad8d27 +Block 0021 [ 87]: c16da828dbb58de5 +Block 0021 [ 88]: aa1c634f7b67da81 +Block 0021 [ 89]: f6880237a2459b29 +Block 0021 [ 90]: 2cfc0b5833399be9 +Block 0021 [ 91]: 3714e3f38337f68a +Block 0021 [ 92]: 31d6460f7d0e5979 +Block 0021 [ 93]: 2caa43efea4389c2 +Block 0021 [ 94]: 4386b7afe0d31674 +Block 0021 [ 95]: 85fb37a557a28138 +Block 0021 [ 96]: 9cbbd44c38af6793 +Block 0021 [ 97]: bee341aebbcfe36c +Block 0021 [ 98]: 674ce8f742369cbb +Block 0021 [ 99]: 856b0b350bae5187 +Block 0021 [100]: 02a68a5823e3b954 +Block 0021 [101]: 6704e91be87c9ea0 +Block 0021 [102]: d92888c4a8c08134 +Block 0021 [103]: 87472fbfbc2fcfd5 +Block 0021 [104]: a50169e2fa648772 +Block 0021 [105]: 4feb188466f7e52d +Block 0021 [106]: 0d79238c73a589fa +Block 0021 [107]: 6332ffb33d56c49c +Block 0021 [108]: 68607184ed0754b1 +Block 0021 [109]: f272d2e8b08e7a34 +Block 0021 [110]: a968fd194564013f +Block 0021 [111]: 60e08b245657d2b2 +Block 0021 [112]: b473337ba3a572da +Block 0021 [113]: bdb28b111b33fcc1 +Block 0021 [114]: 7e4fc761ee70caf0 +Block 0021 [115]: b3fa3d33d9bf2517 +Block 0021 [116]: 93d97291bed8d833 +Block 0021 [117]: d8ee5c9a49a96764 +Block 0021 [118]: bb2bce5f4a8040e0 +Block 0021 [119]: 266fd5ba94493f99 +Block 0021 [120]: ea3e1b720fc5638a +Block 0021 [121]: 7ec3443cf459c697 +Block 0021 [122]: 670b59b62d2c1552 +Block 0021 [123]: 7ea24423e5485f69 +Block 0021 [124]: 86a381d3e697ec37 +Block 0021 [125]: 7ef381fd980cd373 +Block 0021 [126]: 4d97d8f2f15a08fd +Block 0021 [127]: f241c79c4336e5ee +Block 0022 [ 0]: 813e36b57f736f0e +Block 0022 [ 1]: 345edbccfd655060 +Block 0022 [ 2]: 45f4ada44a2382e7 +Block 0022 [ 3]: 62cd805ccbcf63e1 +Block 0022 [ 4]: 2609d71d9286f6d5 +Block 0022 [ 5]: 39eb81718e588a4c +Block 0022 [ 6]: 20b478f3eb7e3cc2 +Block 0022 [ 7]: 253c29e9bedcefc1 +Block 0022 [ 8]: 08004243908f4f1d +Block 0022 [ 9]: b7a67c83f293d403 +Block 0022 [ 10]: 1911fd2dda85e2f8 +Block 0022 [ 11]: 70f5f853b83b5dd7 +Block 0022 [ 12]: a67f4eba9920c6e3 +Block 0022 [ 13]: 56f13344621a0e61 +Block 0022 [ 14]: 971f77f862b273dc +Block 0022 [ 15]: e12eefe0abcc5b4e +Block 0022 [ 16]: 59b4f8f1a60fed17 +Block 0022 [ 17]: 2051dbd0c486d542 +Block 0022 [ 18]: 7f6423db1c459ead +Block 0022 [ 19]: 85293e221fc0b143 +Block 0022 [ 20]: d96e5034170a075a +Block 0022 [ 21]: c7c39f32dcaf4a9f +Block 0022 [ 22]: 2a880940c67864c4 +Block 0022 [ 23]: a54c6f2d14dd1e7e +Block 0022 [ 24]: 6dfc7feebdf6b0c7 +Block 0022 [ 25]: 716b53a52f1ca01e +Block 0022 [ 26]: ee494ea0dcd25617 +Block 0022 [ 27]: 9da47bea3267169d +Block 0022 [ 28]: 9b1cedca1279315e +Block 0022 [ 29]: a05e91f4da37ba4b +Block 0022 [ 30]: 3f9012c056d9ea0a +Block 0022 [ 31]: 9eafd586517cf956 +Block 0022 [ 32]: 33fc7e8fb52d11ce +Block 0022 [ 33]: 360c77ad386602e1 +Block 0022 [ 34]: 239bc09dbae396f3 +Block 0022 [ 35]: db564062b886e0db +Block 0022 [ 36]: 5b99052adc7fb1f4 +Block 0022 [ 37]: afbba2175808419a +Block 0022 [ 38]: 8584484a2cf421f3 +Block 0022 [ 39]: df26603c940349d7 +Block 0022 [ 40]: d44ba11ddfaa77d3 +Block 0022 [ 41]: ff903fbd137aa9b3 +Block 0022 [ 42]: e92191a967f00fe5 +Block 0022 [ 43]: eeacdc65c294236a +Block 0022 [ 44]: 8efaeac4c8bfc2c6 +Block 0022 [ 45]: 65842ccf54771329 +Block 0022 [ 46]: ff0a8a16832baa5f +Block 0022 [ 47]: dc2d92bd7ea194c3 +Block 0022 [ 48]: bb6baaa1316affbc +Block 0022 [ 49]: 9dba26c40d1f4c5c +Block 0022 [ 50]: 5c5dcaf5cc029b7b +Block 0022 [ 51]: 76dde8e5937ed9fa +Block 0022 [ 52]: 8c6912cf71d1b0f7 +Block 0022 [ 53]: c291157fa8faf585 +Block 0022 [ 54]: 846626675908e472 +Block 0022 [ 55]: 703c628a4b8160db +Block 0022 [ 56]: ba20a5ac7c56f3c8 +Block 0022 [ 57]: aeeda4e5faf9bd4f +Block 0022 [ 58]: 66a610879006072d +Block 0022 [ 59]: 056d180bd4f6af2f +Block 0022 [ 60]: 7505b0cdb9c93e64 +Block 0022 [ 61]: 0293ba0f95b4517e +Block 0022 [ 62]: befb683208444571 +Block 0022 [ 63]: 69035d1ab4c773c5 +Block 0022 [ 64]: 6b53ad1a6b633732 +Block 0022 [ 65]: 7942fdfc3c8d30fd +Block 0022 [ 66]: f631898c080bd8cf +Block 0022 [ 67]: 16eca90577600ed0 +Block 0022 [ 68]: 7029d3f17b6914d0 +Block 0022 [ 69]: 4779698217fce0c1 +Block 0022 [ 70]: 2a8b2a94619361dd +Block 0022 [ 71]: 280f6adcac49f9b9 +Block 0022 [ 72]: 42771780bbf292ed +Block 0022 [ 73]: 486b0fb39b59fd26 +Block 0022 [ 74]: ea95b24743c40e47 +Block 0022 [ 75]: 75dd1f2a65fc4348 +Block 0022 [ 76]: 9dcfc10e5d7d78f6 +Block 0022 [ 77]: 2cb8a82aafe24993 +Block 0022 [ 78]: 57e2a0c1b90752a5 +Block 0022 [ 79]: 6ec85892729bb3e9 +Block 0022 [ 80]: d7656c1d56dbcecf +Block 0022 [ 81]: 8f73225a3350f820 +Block 0022 [ 82]: 477edcbc02afc238 +Block 0022 [ 83]: e4275a1b9aa7e943 +Block 0022 [ 84]: 3ae96dad9513e87b +Block 0022 [ 85]: fb7fa4b503184cbd +Block 0022 [ 86]: 3ef220b5ca9bd822 +Block 0022 [ 87]: 6cc1b23ce216063c +Block 0022 [ 88]: a8bfec1577b858b5 +Block 0022 [ 89]: bc88a540cf4ccea0 +Block 0022 [ 90]: 8ef8ff6f9d2b187b +Block 0022 [ 91]: 87c6df841301e4fe +Block 0022 [ 92]: 63403f90699e4971 +Block 0022 [ 93]: 172ccd9b90911d01 +Block 0022 [ 94]: 627145555f3ca629 +Block 0022 [ 95]: 9598aa5a5d03ad85 +Block 0022 [ 96]: d1a9fd862eaad482 +Block 0022 [ 97]: eb84b9bd1db4e5f9 +Block 0022 [ 98]: a4e82f816e247783 +Block 0022 [ 99]: fdb966659f11201c +Block 0022 [100]: 54f4ceecbb73d1fd +Block 0022 [101]: 31237b6a155ac335 +Block 0022 [102]: ed9cdd6bc0440c99 +Block 0022 [103]: 5df61b5eafba2445 +Block 0022 [104]: c2e8a0b81e9f2861 +Block 0022 [105]: 50d50587c5ccf4d4 +Block 0022 [106]: 9f798cca5d417467 +Block 0022 [107]: e1a40ba6506cd7d9 +Block 0022 [108]: 14f6fbba5f8381b9 +Block 0022 [109]: 1507d17ae17e99e5 +Block 0022 [110]: 5b6a8344c3bf8a4e +Block 0022 [111]: 3a4b5da9f312b9e7 +Block 0022 [112]: 980d402ac279c4a1 +Block 0022 [113]: 4a83e58717bfdf2e +Block 0022 [114]: edfda956f994881e +Block 0022 [115]: dd928d191f2bad0f +Block 0022 [116]: 32f2b58f81e9db2e +Block 0022 [117]: 795786215883c510 +Block 0022 [118]: 2ea35a3be27dc59a +Block 0022 [119]: 696cb31e49444600 +Block 0022 [120]: d37ca87ae65fe96b +Block 0022 [121]: 7db487549599b66e +Block 0022 [122]: 02a9a74bad372257 +Block 0022 [123]: 81c7c8d7e3864a39 +Block 0022 [124]: dcb6a7a05eeafd74 +Block 0022 [125]: 899c2040fa48c0dd +Block 0022 [126]: 1ba5009a290db5af +Block 0022 [127]: 90f532941e285313 +Block 0023 [ 0]: d92feaf9ce8f832f +Block 0023 [ 1]: 3de3b81d2dab8116 +Block 0023 [ 2]: cf1e8cca6963628c +Block 0023 [ 3]: 07cb29d6ba973354 +Block 0023 [ 4]: c348b52ae94fbd89 +Block 0023 [ 5]: 61ce2eecdec8a31b +Block 0023 [ 6]: 82a2130eaea128dc +Block 0023 [ 7]: 4f8aa3e0d7d6710c +Block 0023 [ 8]: bcd653f901fb9f3b +Block 0023 [ 9]: 3bb0a8d09248a0e1 +Block 0023 [ 10]: 310899a7c559e07d +Block 0023 [ 11]: 621fb1b749c89c1d +Block 0023 [ 12]: e5dd90a69a7c2088 +Block 0023 [ 13]: df25ff336f01b4f3 +Block 0023 [ 14]: e82704f1da52db54 +Block 0023 [ 15]: 6cf8eaf00efd333b +Block 0023 [ 16]: 656e8a75c9990167 +Block 0023 [ 17]: 2495bd9a4e94b6ff +Block 0023 [ 18]: dc75566d181ba85d +Block 0023 [ 19]: 4b41a1f74adca60e +Block 0023 [ 20]: 7e2a74ac28620381 +Block 0023 [ 21]: ae2c8230deddc7ca +Block 0023 [ 22]: db57b6833bd71c5c +Block 0023 [ 23]: b98fe4728a732634 +Block 0023 [ 24]: ec0bdcfb62bf1944 +Block 0023 [ 25]: f118264665f3c202 +Block 0023 [ 26]: cbb5a036c33319fe +Block 0023 [ 27]: f327b9bae21d24fe +Block 0023 [ 28]: 4478291d73a3bf0d +Block 0023 [ 29]: e5fb606769ddfb31 +Block 0023 [ 30]: f523956060e94a9a +Block 0023 [ 31]: 8c32c1450c832977 +Block 0023 [ 32]: 430f30e003942c3b +Block 0023 [ 33]: 5b8dacd457d7041a +Block 0023 [ 34]: 512765b9187e2778 +Block 0023 [ 35]: 34683aff41f7d9d6 +Block 0023 [ 36]: 16ded03fb6edc604 +Block 0023 [ 37]: 60f18b90ca5ccbce +Block 0023 [ 38]: 26afa948ec150fdd +Block 0023 [ 39]: f1572bab289539ae +Block 0023 [ 40]: 54c85f3574d44104 +Block 0023 [ 41]: d7ae5531e526625c +Block 0023 [ 42]: 48ceb1160c16bc68 +Block 0023 [ 43]: a7f5980b2fef07ed +Block 0023 [ 44]: b0e154d525eab517 +Block 0023 [ 45]: 354c61f188ac9c85 +Block 0023 [ 46]: 1735825e0dcbb3c8 +Block 0023 [ 47]: 6c85a29988884a89 +Block 0023 [ 48]: 183d32c1c7b75210 +Block 0023 [ 49]: 1c61dd508c241991 +Block 0023 [ 50]: 5c1749abe0f7f0e1 +Block 0023 [ 51]: dfd50644c2722393 +Block 0023 [ 52]: a32f6e257045aa4f +Block 0023 [ 53]: 5f0d63a2fa6b9db5 +Block 0023 [ 54]: 8137c4a1649ff49e +Block 0023 [ 55]: 0361fd084a8429b4 +Block 0023 [ 56]: 2fff5a3d5978327d +Block 0023 [ 57]: 647412ac4a4a5db8 +Block 0023 [ 58]: 7c538866533b8084 +Block 0023 [ 59]: 9bd01c9630abd6e4 +Block 0023 [ 60]: 49d58e98765e7062 +Block 0023 [ 61]: d28099be1bebcfda +Block 0023 [ 62]: 4a299a576da2a4c5 +Block 0023 [ 63]: f3189872d6fb849f +Block 0023 [ 64]: 7dda31d38325b7e9 +Block 0023 [ 65]: 0f4c97f756b82ae3 +Block 0023 [ 66]: 6bb0608531658ea5 +Block 0023 [ 67]: 15eadad675329af7 +Block 0023 [ 68]: 27808f4042c4396c +Block 0023 [ 69]: 46ed46f38dd41e57 +Block 0023 [ 70]: ecf63b28dbc424ca +Block 0023 [ 71]: d39f3e9fd8c74f10 +Block 0023 [ 72]: 09bc3876def81567 +Block 0023 [ 73]: 712a20a8ac895b22 +Block 0023 [ 74]: 4d4110dc7b315e87 +Block 0023 [ 75]: 5ca2290813579508 +Block 0023 [ 76]: ca993d8a3e8fe80b +Block 0023 [ 77]: 8fa2d7afd58c99fb +Block 0023 [ 78]: 871df3e6bdd85cf8 +Block 0023 [ 79]: bd87aa5c46bcd0a5 +Block 0023 [ 80]: 29bc11f4b6940ae4 +Block 0023 [ 81]: 0f0cc784b683f458 +Block 0023 [ 82]: 3173391b65289758 +Block 0023 [ 83]: 80b49ee12ff0ea70 +Block 0023 [ 84]: ad29a311a9ac5e0c +Block 0023 [ 85]: fa4bce3853385cfd +Block 0023 [ 86]: 5ba5787462f7a889 +Block 0023 [ 87]: 8f881e91d93bb917 +Block 0023 [ 88]: 44e7b45101b23012 +Block 0023 [ 89]: 3700c0182238d7e7 +Block 0023 [ 90]: 25b2fcddc913a952 +Block 0023 [ 91]: b6187c757f862577 +Block 0023 [ 92]: 6fd30e484383d75d +Block 0023 [ 93]: 12e9bb3086090629 +Block 0023 [ 94]: 2d5019d6344d9351 +Block 0023 [ 95]: 4c5fc7108e6c87b3 +Block 0023 [ 96]: 16b1525a3b280956 +Block 0023 [ 97]: 98987e0229057d3d +Block 0023 [ 98]: fd8b47ca62cafec7 +Block 0023 [ 99]: 69fd38fae9a7c741 +Block 0023 [100]: 8c2e4f14813d552b +Block 0023 [101]: 2e9a7c9a55d324ff +Block 0023 [102]: 9b345c3bcbefe217 +Block 0023 [103]: 52962171fbaea0b7 +Block 0023 [104]: 856e0e7ac867e1ac +Block 0023 [105]: c0ebd9d4b59f5031 +Block 0023 [106]: eb5c94df7be654d7 +Block 0023 [107]: 0725acfb389c822e +Block 0023 [108]: 2ae46cf5dc01fb3d +Block 0023 [109]: 4c8c87d24c4c396d +Block 0023 [110]: 8e37af365f796e24 +Block 0023 [111]: cb454318ca6dd824 +Block 0023 [112]: 6669edae28765b15 +Block 0023 [113]: ecc90a6c75263179 +Block 0023 [114]: 91ae80ee00e213b2 +Block 0023 [115]: e4f6ae47598bd7c8 +Block 0023 [116]: d4d306030ee62936 +Block 0023 [117]: 7caa0f1a1bbb26ed +Block 0023 [118]: 2ae6972e42774638 +Block 0023 [119]: 4ecaf984d41d9d63 +Block 0023 [120]: 2d6aab1800387fb6 +Block 0023 [121]: 0a7a2961cc0f0e8c +Block 0023 [122]: 46e5b112f06ad739 +Block 0023 [123]: 44c5ad17398f4bc0 +Block 0023 [124]: 64be1d1b9194f92e +Block 0023 [125]: 3046768d16c6d93f +Block 0023 [126]: 59ac6bb60f2c9c85 +Block 0023 [127]: 95595e52b7f2152f +Block 0024 [ 0]: 421df20d08fd899e +Block 0024 [ 1]: 06490f067ca5f4c0 +Block 0024 [ 2]: 4b7bab14d2317386 +Block 0024 [ 3]: 928cb31a919ac9e0 +Block 0024 [ 4]: 8eeb69c9bf35ca26 +Block 0024 [ 5]: 3b871b2affbf59cb +Block 0024 [ 6]: 9a44775f57d70b0c +Block 0024 [ 7]: d1753e76fd4cd2f5 +Block 0024 [ 8]: 23beccd32f5a538c +Block 0024 [ 9]: 26cb1bfdc1bfe467 +Block 0024 [ 10]: d27541618bf4a7a7 +Block 0024 [ 11]: 0aa0a42080544478 +Block 0024 [ 12]: bc8f20da1a6e40e4 +Block 0024 [ 13]: e875b5a98a112900 +Block 0024 [ 14]: ca61219887cb4959 +Block 0024 [ 15]: e2493c2da5dc45cc +Block 0024 [ 16]: 376be64ae523a96d +Block 0024 [ 17]: bc26c2991a963b5d +Block 0024 [ 18]: d507fa831eb0b11c +Block 0024 [ 19]: cbb1fae2e8a7724d +Block 0024 [ 20]: 0d57265e72b6fcaf +Block 0024 [ 21]: 57bda72893b0ba2c +Block 0024 [ 22]: b1dfd60192386ed2 +Block 0024 [ 23]: dcfe908cf1bed33c +Block 0024 [ 24]: 3cf2ae1e6ba2f37b +Block 0024 [ 25]: c26c60ad1b72cec6 +Block 0024 [ 26]: 227b729e4be43c89 +Block 0024 [ 27]: f1698cc673f4b33d +Block 0024 [ 28]: 6d6a36ee935bd1be +Block 0024 [ 29]: e044d40fe77c96fd +Block 0024 [ 30]: 51f025fc9570d3b1 +Block 0024 [ 31]: 9047ccdcadfba8f3 +Block 0024 [ 32]: 4fbfd7f34c1fc530 +Block 0024 [ 33]: a21db2877a70cffe +Block 0024 [ 34]: 6779dd725caffcfa +Block 0024 [ 35]: abd46d03ab30e7e8 +Block 0024 [ 36]: 3df9ce3d3f9b8d77 +Block 0024 [ 37]: 79c4e82b1d66f2b2 +Block 0024 [ 38]: f6e56a9befd85521 +Block 0024 [ 39]: 63effa4aac8c722f +Block 0024 [ 40]: 5d95c78b470b652b +Block 0024 [ 41]: 0d49b3bd5c53de96 +Block 0024 [ 42]: 677fdc7ac25e2963 +Block 0024 [ 43]: 64cf061a259c532e +Block 0024 [ 44]: 2f9da934b23e75a0 +Block 0024 [ 45]: b8889059afbcd633 +Block 0024 [ 46]: 87268a47bdacb91a +Block 0024 [ 47]: bdd1d344a00442ce +Block 0024 [ 48]: ed2fb8fcfcccfd0f +Block 0024 [ 49]: 9702e80222aaa0a2 +Block 0024 [ 50]: b59fd3607c6f4a99 +Block 0024 [ 51]: b5a3abe17118d3f5 +Block 0024 [ 52]: b36e4548145308e8 +Block 0024 [ 53]: 9f58a90d739baeb2 +Block 0024 [ 54]: 949e5504da615608 +Block 0024 [ 55]: 8be00e3ae5fe9cae +Block 0024 [ 56]: 32c6269ff1f417d3 +Block 0024 [ 57]: a0fd7a40f50436bc +Block 0024 [ 58]: 804eddf125b05db8 +Block 0024 [ 59]: e412fa3b09805e30 +Block 0024 [ 60]: ee38f256fefee213 +Block 0024 [ 61]: 4700102c10caca7b +Block 0024 [ 62]: 7c72c70089dfa961 +Block 0024 [ 63]: bab72c9336d9b835 +Block 0024 [ 64]: 2146a5760b289949 +Block 0024 [ 65]: 9d3846479be2a556 +Block 0024 [ 66]: 6a81e0b707146bbc +Block 0024 [ 67]: 7648f0711580ddfe +Block 0024 [ 68]: aab8aee50021b344 +Block 0024 [ 69]: 38f296313d23ec72 +Block 0024 [ 70]: 04b4905eaec03ac5 +Block 0024 [ 71]: fe0f55aaeb91559f +Block 0024 [ 72]: 5fb453a232b4a989 +Block 0024 [ 73]: daa1ab85149235e2 +Block 0024 [ 74]: c825ee74fa3cfa1b +Block 0024 [ 75]: 6113b7f6fa3aa5fa +Block 0024 [ 76]: 9f3e6aea3b3be4d5 +Block 0024 [ 77]: f7d471f5f8ae3ce3 +Block 0024 [ 78]: c68f97bfab689e30 +Block 0024 [ 79]: b7c234060a797abf +Block 0024 [ 80]: 6041520f55b95a30 +Block 0024 [ 81]: 56ea11838e34faab +Block 0024 [ 82]: e2fa113ac34a4e76 +Block 0024 [ 83]: 952a842f6f1f0ea6 +Block 0024 [ 84]: 2bcdfb5279443993 +Block 0024 [ 85]: 10946fdd29e96316 +Block 0024 [ 86]: 5f908e7a28f81708 +Block 0024 [ 87]: d289b647f332fbe9 +Block 0024 [ 88]: f16d8e959f359c08 +Block 0024 [ 89]: 18601d046daf6b9f +Block 0024 [ 90]: 66214e8c17b7a365 +Block 0024 [ 91]: c6c7b0aeef79013c +Block 0024 [ 92]: dc20cc64d5a79a4c +Block 0024 [ 93]: 5187e9a6ff899eb1 +Block 0024 [ 94]: 730cac806359e63c +Block 0024 [ 95]: 9691bae04c4bbd94 +Block 0024 [ 96]: 0fa7b3a871abe79d +Block 0024 [ 97]: b3a3883ad7a4e928 +Block 0024 [ 98]: f1b2d895589851d8 +Block 0024 [ 99]: 6f905a6249a50eae +Block 0024 [100]: 4cf1840c45bca0d9 +Block 0024 [101]: 782e7ffb69c668aa +Block 0024 [102]: fe55c440f0227790 +Block 0024 [103]: dec111756b979cbc +Block 0024 [104]: 9e1621f10dc6142e +Block 0024 [105]: af92a355e0758599 +Block 0024 [106]: 1f85ba4b4b00884b +Block 0024 [107]: aff87e8f36e044cf +Block 0024 [108]: 87667d6990985f08 +Block 0024 [109]: 5e7d62dd0e2b654a +Block 0024 [110]: 984eeff01ce256d9 +Block 0024 [111]: 5d76c092a79bca15 +Block 0024 [112]: cb2ff31e3e9de68d +Block 0024 [113]: a4a6cc101833f846 +Block 0024 [114]: 0eeb05c1eac92920 +Block 0024 [115]: 3795d878dfbaaa3c +Block 0024 [116]: a363bb42a0bf4fd4 +Block 0024 [117]: 212c42d91a79e145 +Block 0024 [118]: 844305ca7ebe404e +Block 0024 [119]: c23c2a10a961d67c +Block 0024 [120]: 2038404d2ceadec9 +Block 0024 [121]: 71f48b5bff5b4c03 +Block 0024 [122]: 00d97ddde74a8b18 +Block 0024 [123]: d4a629a0f481c37b +Block 0024 [124]: a31ac02725842396 +Block 0024 [125]: 26c90ede186fd85f +Block 0024 [126]: 32d3c3f0385d16a2 +Block 0024 [127]: a58053f744dc93ad +Block 0025 [ 0]: 75e219ce652f9e9b +Block 0025 [ 1]: 5192d14a2c29f461 +Block 0025 [ 2]: ecadcc07806d90a7 +Block 0025 [ 3]: cb8f9debaf8159b8 +Block 0025 [ 4]: 922fd6b8cb6a2641 +Block 0025 [ 5]: fc1677aa64a158b1 +Block 0025 [ 6]: 0c24c2820ef42f14 +Block 0025 [ 7]: b3cd3deb0443f694 +Block 0025 [ 8]: 52b0ac996c835048 +Block 0025 [ 9]: 7b69b5d070589932 +Block 0025 [ 10]: 0381d9fcdb0803a1 +Block 0025 [ 11]: d7cf49bf4207a833 +Block 0025 [ 12]: 64bc64f604b3f54e +Block 0025 [ 13]: b37bfc379b820700 +Block 0025 [ 14]: f6fcf8867e9ed30a +Block 0025 [ 15]: 2cf52fe2e641e6cd +Block 0025 [ 16]: d9b5d1d957265528 +Block 0025 [ 17]: 456c76fd493723d9 +Block 0025 [ 18]: d09ec25592ba65e1 +Block 0025 [ 19]: 74ead8f490ea2724 +Block 0025 [ 20]: 1fcd94f345103418 +Block 0025 [ 21]: 28191af193f3b4a8 +Block 0025 [ 22]: 00ba309bea6bc75e +Block 0025 [ 23]: f820f928e042b770 +Block 0025 [ 24]: 0096864fb4a6195a +Block 0025 [ 25]: 1deb4dd4d925fc05 +Block 0025 [ 26]: 28e822e800e1f326 +Block 0025 [ 27]: 8a9e61f3ff3536f6 +Block 0025 [ 28]: 7bd53608d022cc05 +Block 0025 [ 29]: dc1da98bfbf23a80 +Block 0025 [ 30]: 335ec2757c72f04a +Block 0025 [ 31]: c699727d298109d9 +Block 0025 [ 32]: 5c4f4efb6a24011c +Block 0025 [ 33]: 45abc8326a1c11a6 +Block 0025 [ 34]: ea1ec080a5afa957 +Block 0025 [ 35]: c710f53a3016e4cf +Block 0025 [ 36]: 48bc8eae571960ee +Block 0025 [ 37]: 9717942f28632927 +Block 0025 [ 38]: baefc76649ee961b +Block 0025 [ 39]: 913d6a3d5cbebe92 +Block 0025 [ 40]: 3d486447ff8cdeb9 +Block 0025 [ 41]: 738e311c3606c310 +Block 0025 [ 42]: 752814a9b8a98007 +Block 0025 [ 43]: ea80a6739c87925e +Block 0025 [ 44]: d05607c48043b531 +Block 0025 [ 45]: 4e8077320bcb121a +Block 0025 [ 46]: db134a8b3ce51f86 +Block 0025 [ 47]: a3b62a8db4d931cb +Block 0025 [ 48]: 479838f512a07a3c +Block 0025 [ 49]: ad416f96a9c1dc62 +Block 0025 [ 50]: 2ce8d6c41e022354 +Block 0025 [ 51]: 02e88e689bb3c9bc +Block 0025 [ 52]: 4c4fa4dfd77f1efc +Block 0025 [ 53]: e481206da484d670 +Block 0025 [ 54]: 43a91e27c52cb0de +Block 0025 [ 55]: 9a3863141390c605 +Block 0025 [ 56]: db07004e00d8628d +Block 0025 [ 57]: b05ad69ed0d8db58 +Block 0025 [ 58]: aa78c6f41ae31f4c +Block 0025 [ 59]: 372bc9ff8debf9a9 +Block 0025 [ 60]: 832af3443b613cd2 +Block 0025 [ 61]: 10176ea29c715def +Block 0025 [ 62]: f1ae3f51da186219 +Block 0025 [ 63]: eb93e663b63849a0 +Block 0025 [ 64]: 0a10808e97df2cc8 +Block 0025 [ 65]: 0a8b16edfe0a46d6 +Block 0025 [ 66]: 25ee9dabd8559f47 +Block 0025 [ 67]: aae095f6613e07f8 +Block 0025 [ 68]: 6dee9a39650d583a +Block 0025 [ 69]: c8da4f9ba5efc464 +Block 0025 [ 70]: 2057651e6272cecf +Block 0025 [ 71]: 5bcf7937a601500b +Block 0025 [ 72]: 8c3097be523605ec +Block 0025 [ 73]: 12008ec70fc55a6b +Block 0025 [ 74]: 1dc40873a708a3a0 +Block 0025 [ 75]: 8550840bfb0b2a74 +Block 0025 [ 76]: 71b76f86ed93b236 +Block 0025 [ 77]: ada3b0d78299d2f3 +Block 0025 [ 78]: 196bbca1dd53c6ba +Block 0025 [ 79]: 25ae9a9b7a909ffd +Block 0025 [ 80]: 8332bc00f837a920 +Block 0025 [ 81]: bb13e06b3dcd6274 +Block 0025 [ 82]: 724e07a3c76bdcd3 +Block 0025 [ 83]: c11a941aa4678ac6 +Block 0025 [ 84]: d69d1f13fabb164e +Block 0025 [ 85]: 2d518e00e58c92ea +Block 0025 [ 86]: 698ecf7437bf07dc +Block 0025 [ 87]: c5758b279f98a217 +Block 0025 [ 88]: 4ace1d8069fb04c7 +Block 0025 [ 89]: 3a6848ca135c48a1 +Block 0025 [ 90]: 1284342c28b552e4 +Block 0025 [ 91]: a7bf09a8fb448bce +Block 0025 [ 92]: 23652822eef77d5b +Block 0025 [ 93]: ede7aa7d9975c43e +Block 0025 [ 94]: ec8d6127d93a7b37 +Block 0025 [ 95]: 38f50b3d0f17f5c9 +Block 0025 [ 96]: 91a10d4b7fe9f30b +Block 0025 [ 97]: 63112ee0f40a6241 +Block 0025 [ 98]: fad7e72daa8ad18d +Block 0025 [ 99]: 07e0f4d64d5744cc +Block 0025 [100]: aafbd22997d5cb7c +Block 0025 [101]: 76e6e220725528df +Block 0025 [102]: d540860ca129a3d4 +Block 0025 [103]: c652f20d7f2dafc6 +Block 0025 [104]: 39619c788de5f720 +Block 0025 [105]: b1153fbf6bc05c68 +Block 0025 [106]: 7936d6405a7745b0 +Block 0025 [107]: 69e1ea5b7dddab89 +Block 0025 [108]: a535615b5285f419 +Block 0025 [109]: c7039ed18206a233 +Block 0025 [110]: 0edf3cf1262dcd26 +Block 0025 [111]: 1f0b4499b2b9e8b2 +Block 0025 [112]: 671bed1ce2de5052 +Block 0025 [113]: 0e8b79824c58ca80 +Block 0025 [114]: 874458d3d760dd5a +Block 0025 [115]: 249f129d67cf59a5 +Block 0025 [116]: bc6962f83ec41f7d +Block 0025 [117]: 3b5b2bf5dbba3f76 +Block 0025 [118]: bc3213efa967e1e2 +Block 0025 [119]: 6a9208a3b0e96a13 +Block 0025 [120]: 4cc594a949c15018 +Block 0025 [121]: edc4f2d74b9ed106 +Block 0025 [122]: 17189edb9d25be84 +Block 0025 [123]: 335cacc975861bdb +Block 0025 [124]: 4e40d19267f33144 +Block 0025 [125]: fe8b5e16f077d4dd +Block 0025 [126]: eef70082d8d8ca4d +Block 0025 [127]: 0e35a18383368440 +Block 0026 [ 0]: f5fb505370677e73 +Block 0026 [ 1]: 3d8aab3e00026248 +Block 0026 [ 2]: 039ea2f2dc076a2b +Block 0026 [ 3]: 39c8d87ab919d22d +Block 0026 [ 4]: 5e4289e8494d7e21 +Block 0026 [ 5]: b62799988c90ffa4 +Block 0026 [ 6]: e4bbf6d54ec025a4 +Block 0026 [ 7]: d4906bcf299eb95f +Block 0026 [ 8]: 65430d2f59e217cf +Block 0026 [ 9]: 82d0ebd6510efa74 +Block 0026 [ 10]: 7631d5fc46073cb9 +Block 0026 [ 11]: 37293f77752fbc98 +Block 0026 [ 12]: cce2024931226a4e +Block 0026 [ 13]: 0b3e54fd2ae0b3ce +Block 0026 [ 14]: 35e2af0be586cf66 +Block 0026 [ 15]: f94a5a46a427b24c +Block 0026 [ 16]: 4030eb43a50f4bc6 +Block 0026 [ 17]: e5e817c211ffd536 +Block 0026 [ 18]: ce4d39f262d8906f +Block 0026 [ 19]: e109bca81d06ea97 +Block 0026 [ 20]: a52c2ea963311247 +Block 0026 [ 21]: ea1050b3679d3f68 +Block 0026 [ 22]: c9dae9c84e36b885 +Block 0026 [ 23]: 1e6a0ef172a58c1f +Block 0026 [ 24]: a1cdd2e6d157f211 +Block 0026 [ 25]: c2b28b17582588b2 +Block 0026 [ 26]: a2269ef1361a34d1 +Block 0026 [ 27]: 6f4108d0009a0a4a +Block 0026 [ 28]: 67e945bdf88e3a45 +Block 0026 [ 29]: 2734e1edf6b6d1ff +Block 0026 [ 30]: 64003857fe488908 +Block 0026 [ 31]: 23097d34ae04fdaa +Block 0026 [ 32]: 9f0ea9d7bac5f1ee +Block 0026 [ 33]: 16f9ff9a693423f8 +Block 0026 [ 34]: e8d94b5ad2280a5d +Block 0026 [ 35]: e08e8d1fddc32380 +Block 0026 [ 36]: a1ac08a8060bcaab +Block 0026 [ 37]: 437c08cbae28e67f +Block 0026 [ 38]: 3d269e57e32cecd0 +Block 0026 [ 39]: 8337155690848c62 +Block 0026 [ 40]: a868cc5d9c97cc04 +Block 0026 [ 41]: 9f719a13b79ba555 +Block 0026 [ 42]: c06df5e22c349b6d +Block 0026 [ 43]: 8fcbaad237433b6a +Block 0026 [ 44]: fc34c1b9d2bdd5f4 +Block 0026 [ 45]: b9bb08869920d24b +Block 0026 [ 46]: baf85dcd7f37fa00 +Block 0026 [ 47]: 35a40e91760a75c1 +Block 0026 [ 48]: 6e93320f5d477425 +Block 0026 [ 49]: 826a134a9801cb0b +Block 0026 [ 50]: 910033d07a75c521 +Block 0026 [ 51]: 755b3bc8251407db +Block 0026 [ 52]: 8dd64b25a605b6b8 +Block 0026 [ 53]: b950fbb99e155c2b +Block 0026 [ 54]: e87b27b31068f5b0 +Block 0026 [ 55]: ba423858cdff8905 +Block 0026 [ 56]: 642636c58acba031 +Block 0026 [ 57]: 017a0449dd896efd +Block 0026 [ 58]: 7620fc91870c63e7 +Block 0026 [ 59]: 3b757db72cc7c3e0 +Block 0026 [ 60]: 52c6505f35dea770 +Block 0026 [ 61]: bd6ed47f26715259 +Block 0026 [ 62]: f0d6f2d380f155fd +Block 0026 [ 63]: c6c8518a64cac880 +Block 0026 [ 64]: 53f09f11d506562c +Block 0026 [ 65]: c51aac6790e918c7 +Block 0026 [ 66]: 93a2ca9a510fb338 +Block 0026 [ 67]: f4974aa31138dd1f +Block 0026 [ 68]: ea548f592104df60 +Block 0026 [ 69]: d099d955bc104c10 +Block 0026 [ 70]: 8feaf5ad3acbeead +Block 0026 [ 71]: d774bca52aa40db1 +Block 0026 [ 72]: 631b8c8e5206ef96 +Block 0026 [ 73]: c2467f34313a2f1a +Block 0026 [ 74]: fbe46c13ef4734a9 +Block 0026 [ 75]: 84277835d9d323b2 +Block 0026 [ 76]: 2e4d98f1a671683d +Block 0026 [ 77]: e86bcdfafe1c9704 +Block 0026 [ 78]: 858d689f5447874c +Block 0026 [ 79]: 34c11778bae7a605 +Block 0026 [ 80]: c63373727a5b4951 +Block 0026 [ 81]: 2b6ee36647dbeab0 +Block 0026 [ 82]: 593c1210e15b9a2e +Block 0026 [ 83]: 7cbabf2d6a7f60dd +Block 0026 [ 84]: f6286c13a4054115 +Block 0026 [ 85]: d504d66401d19f08 +Block 0026 [ 86]: 4377a456061e4ba4 +Block 0026 [ 87]: bedc6a171c2c9f7d +Block 0026 [ 88]: daaa4c2b70e89d78 +Block 0026 [ 89]: b43f52f216b02a80 +Block 0026 [ 90]: b5938ee138c6bc1c +Block 0026 [ 91]: 0877679273c8f0c6 +Block 0026 [ 92]: f6fe77bd04c9e7a1 +Block 0026 [ 93]: 851cbda45a28add1 +Block 0026 [ 94]: 5fe2bc3b7c34160f +Block 0026 [ 95]: 7e04cfbb08fbfec3 +Block 0026 [ 96]: 560e3def15d51f49 +Block 0026 [ 97]: aa9dd5cd812de83c +Block 0026 [ 98]: fb96e9ac7eb362fb +Block 0026 [ 99]: 77a97e7fe8461cc4 +Block 0026 [100]: 49d6ef7afeabf9df +Block 0026 [101]: 2db33b3eab3c3e74 +Block 0026 [102]: 22ee497b98aff5a0 +Block 0026 [103]: daa8c64262e0e084 +Block 0026 [104]: ac2047b2a642b5f6 +Block 0026 [105]: c6a1bdbe1afafe7a +Block 0026 [106]: 40cc38524f5589f7 +Block 0026 [107]: 981613d268c3c78f +Block 0026 [108]: 9db3258cd0588b72 +Block 0026 [109]: ec987d516209c1d3 +Block 0026 [110]: e186f53aa49c1c16 +Block 0026 [111]: e21f193c314f6914 +Block 0026 [112]: 8b8f04c5e30d6a65 +Block 0026 [113]: 32f0379b3e282763 +Block 0026 [114]: 74611ed89926c85b +Block 0026 [115]: 82cb876074150f22 +Block 0026 [116]: b4e8636aa8d530e4 +Block 0026 [117]: 98c5cb9f36e3ca0e +Block 0026 [118]: 562de3e3a60b6377 +Block 0026 [119]: 6a9abbd609e9a77b +Block 0026 [120]: 963e356cec311d7b +Block 0026 [121]: 7075034174072426 +Block 0026 [122]: f58b94caf83bbb5c +Block 0026 [123]: 3d6e98f918fc35fc +Block 0026 [124]: c5408b21805a47a6 +Block 0026 [125]: b708ec7ca7019412 +Block 0026 [126]: b092d3938ed92f30 +Block 0026 [127]: cff8bf31a57540ef +Block 0027 [ 0]: 3833936ed309a40e +Block 0027 [ 1]: aa12aa94d9454a14 +Block 0027 [ 2]: 72c4a5b5e0eeb799 +Block 0027 [ 3]: 4024ffdb54eef730 +Block 0027 [ 4]: cd7bf4160fba3fff +Block 0027 [ 5]: 167d04d9139c38c7 +Block 0027 [ 6]: 570f0841b540745e +Block 0027 [ 7]: af34a7133cd2a7eb +Block 0027 [ 8]: 8e02eb212ba5d1e4 +Block 0027 [ 9]: 84756a529a924066 +Block 0027 [ 10]: fe2a7294d8395683 +Block 0027 [ 11]: 227ea6f39aa2db15 +Block 0027 [ 12]: 35891d0ffa4e156f +Block 0027 [ 13]: 73602a9a8749e196 +Block 0027 [ 14]: 4a85f3a4d4d8da72 +Block 0027 [ 15]: 334564cd39f78db5 +Block 0027 [ 16]: bb50ff365ec10d5b +Block 0027 [ 17]: 15af66399cd11253 +Block 0027 [ 18]: a7cf019ed9b1246b +Block 0027 [ 19]: fe94c3e001243205 +Block 0027 [ 20]: 9778185b3cad932f +Block 0027 [ 21]: 7f1bd55772064b0b +Block 0027 [ 22]: 9e13e24cbfc382ca +Block 0027 [ 23]: dbd4d1bbc191d0f7 +Block 0027 [ 24]: 7dd89184bbe49fd5 +Block 0027 [ 25]: 5af27c9e566eac9c +Block 0027 [ 26]: ed57cf89c8c5f4a7 +Block 0027 [ 27]: 836c0c093002e5f3 +Block 0027 [ 28]: dff3d9f1eb535dc4 +Block 0027 [ 29]: 327d67fc2049f8fb +Block 0027 [ 30]: 605fd14694fa9449 +Block 0027 [ 31]: 66822ee641a6ca0c +Block 0027 [ 32]: bc7c177b547a9299 +Block 0027 [ 33]: b228d67439803c1d +Block 0027 [ 34]: e80660f6a38d8930 +Block 0027 [ 35]: 48465638b515839e +Block 0027 [ 36]: f59aa28a2b5dfb4d +Block 0027 [ 37]: 451ed876660c6810 +Block 0027 [ 38]: 29ebbdcc493a13e4 +Block 0027 [ 39]: 9ad95963564f5e59 +Block 0027 [ 40]: d9f513c58466e6e4 +Block 0027 [ 41]: e8502393e51b4216 +Block 0027 [ 42]: 55410a20946569e7 +Block 0027 [ 43]: ac2e16e37e14263e +Block 0027 [ 44]: 8cc37d82b6dd99d5 +Block 0027 [ 45]: 018bb84f0209f5ce +Block 0027 [ 46]: af3e3d76394cb3e7 +Block 0027 [ 47]: ab519dd479103c56 +Block 0027 [ 48]: ec37868d55b82a51 +Block 0027 [ 49]: 0bd60f8790e408f8 +Block 0027 [ 50]: ca67177c3f31c96b +Block 0027 [ 51]: f6b20d690e55b321 +Block 0027 [ 52]: cb607a912230f0eb +Block 0027 [ 53]: 7c7c06a2d370ef3b +Block 0027 [ 54]: a5398513af3fed38 +Block 0027 [ 55]: a8e6ec3c16cda63f +Block 0027 [ 56]: a7288864d44f667b +Block 0027 [ 57]: 360e196a67d37b9e +Block 0027 [ 58]: ec06a0c378b7b1cc +Block 0027 [ 59]: f826d0f0aca8de3d +Block 0027 [ 60]: c8d1345bd495ce06 +Block 0027 [ 61]: c8cb738599268128 +Block 0027 [ 62]: 0f077e43a8105e05 +Block 0027 [ 63]: 5949111094f84982 +Block 0027 [ 64]: caab31a8dce41c8e +Block 0027 [ 65]: 14ec39b16f79a72c +Block 0027 [ 66]: 30f52ced8af85cbf +Block 0027 [ 67]: e7ecff9e0e0e5770 +Block 0027 [ 68]: bade9fd9644f14fc +Block 0027 [ 69]: f070e6746d4f632b +Block 0027 [ 70]: 928f8d1f8a137183 +Block 0027 [ 71]: fa7d998ddba748bb +Block 0027 [ 72]: 844b46d51416c7d8 +Block 0027 [ 73]: a8ce3dccbf849300 +Block 0027 [ 74]: 40b5bf59fac37079 +Block 0027 [ 75]: e693d904e51eef2d +Block 0027 [ 76]: 90fef2b130484972 +Block 0027 [ 77]: ad5b43c0ad1315fb +Block 0027 [ 78]: f5c51886d9fd50ee +Block 0027 [ 79]: 804c2aa34fba3aee +Block 0027 [ 80]: 4108d414e6218b42 +Block 0027 [ 81]: a055d4fb2e34d89f +Block 0027 [ 82]: d2341e113762009e +Block 0027 [ 83]: b0fc9752a454da10 +Block 0027 [ 84]: d1288c476704b25b +Block 0027 [ 85]: d3c4c572d91465ac +Block 0027 [ 86]: 2f8069a8289e7aca +Block 0027 [ 87]: 71f3b6a4b26995d6 +Block 0027 [ 88]: 4441ff6c4000ce3c +Block 0027 [ 89]: d3c96f999b30851e +Block 0027 [ 90]: 009122df0b16cfdf +Block 0027 [ 91]: bcdd32311dca65de +Block 0027 [ 92]: d1eb48772ad5d526 +Block 0027 [ 93]: 23906d56ebf95940 +Block 0027 [ 94]: 3d320da7906f09ca +Block 0027 [ 95]: 806162060635d7cf +Block 0027 [ 96]: a65c264228f152ef +Block 0027 [ 97]: 8402f96b258bbb89 +Block 0027 [ 98]: 49a04047c237edd3 +Block 0027 [ 99]: 3042a8a4678be559 +Block 0027 [100]: d3f7d3340ec80df8 +Block 0027 [101]: 1d17540fc5c633d1 +Block 0027 [102]: 4ad144abcec46b9c +Block 0027 [103]: 3a6805112b3af97e +Block 0027 [104]: a6772ba931271c65 +Block 0027 [105]: 24807675ebbd48e4 +Block 0027 [106]: d58fbed9e7350632 +Block 0027 [107]: 52454dc82c274360 +Block 0027 [108]: b12793e27b3e12f6 +Block 0027 [109]: 9269abbd3d9d1ae1 +Block 0027 [110]: 7b980387ddcb0e90 +Block 0027 [111]: 3338569394aa1806 +Block 0027 [112]: 1c985037c4308c4c +Block 0027 [113]: 3740dd5683d775d5 +Block 0027 [114]: acec65817bd7ba6c +Block 0027 [115]: 41ab62f1c98e3bfb +Block 0027 [116]: 973525758db70ade +Block 0027 [117]: d8d9076c0fe5513b +Block 0027 [118]: b9dda9b5d7a00cc6 +Block 0027 [119]: 85c1543f46708ec5 +Block 0027 [120]: 72bd1954fc92405c +Block 0027 [121]: 00f76076b61ace34 +Block 0027 [122]: a98d6335766bf76f +Block 0027 [123]: 1fbd089ee7c6f748 +Block 0027 [124]: 10136fb34cf6aaa2 +Block 0027 [125]: 50c5846e44fbc975 +Block 0027 [126]: 977ddbb793a83311 +Block 0027 [127]: d501160dda0add24 +Block 0028 [ 0]: b3f74da78e4bb4d1 +Block 0028 [ 1]: 0068b2500f8b2107 +Block 0028 [ 2]: acf96291acfb9feb +Block 0028 [ 3]: 43200819c384e18f +Block 0028 [ 4]: 54dccb52bc0ed9d4 +Block 0028 [ 5]: dd7d449eb8389b6d +Block 0028 [ 6]: 4c47575882bed005 +Block 0028 [ 7]: dccf5ec02f7b653e +Block 0028 [ 8]: 81d84bb23c0c4d99 +Block 0028 [ 9]: 3cc8ff7f6b1670dc +Block 0028 [ 10]: eb5447dc01331f1b +Block 0028 [ 11]: e6c5f694f1638081 +Block 0028 [ 12]: 5cfa9e9831bfd598 +Block 0028 [ 13]: 2cf881d2dfb3bb2e +Block 0028 [ 14]: 6e80b12a71cdf77b +Block 0028 [ 15]: 8379ddd89673f35e +Block 0028 [ 16]: ce5154ab9a574b72 +Block 0028 [ 17]: 41ea66748e335062 +Block 0028 [ 18]: 657679fce01a5d7d +Block 0028 [ 19]: 3896c88c2e5baabc +Block 0028 [ 20]: 315589187590cf3d +Block 0028 [ 21]: 0d39974eeae411ab +Block 0028 [ 22]: 84d402703dbdb892 +Block 0028 [ 23]: ba96e74e1919a832 +Block 0028 [ 24]: 30b7a76e90011125 +Block 0028 [ 25]: 28f312dc69ad2ffb +Block 0028 [ 26]: 81700effa6f96864 +Block 0028 [ 27]: 92c92ea93e3095e2 +Block 0028 [ 28]: 371c9bd565a0debc +Block 0028 [ 29]: f9337cdf06c282f3 +Block 0028 [ 30]: 27217fa566a5bbce +Block 0028 [ 31]: 10c312681c3491c5 +Block 0028 [ 32]: e7cdf437453ca28d +Block 0028 [ 33]: 4530c7ee1fd2677a +Block 0028 [ 34]: d16c39d8950b1db1 +Block 0028 [ 35]: 5ee3b113a97369c0 +Block 0028 [ 36]: f96a3796450f218d +Block 0028 [ 37]: 9dbbf0bbb9c7affc +Block 0028 [ 38]: 9367894b04cb7525 +Block 0028 [ 39]: 63d505005ca97afc +Block 0028 [ 40]: 755fba7c0546dab4 +Block 0028 [ 41]: 2c94e4f1ea898b9f +Block 0028 [ 42]: aaa9b9248181e1c3 +Block 0028 [ 43]: ba827f64a01f2b84 +Block 0028 [ 44]: 36e310230e22e0cf +Block 0028 [ 45]: d76f7cb6c31c910f +Block 0028 [ 46]: 7f55c08ca24c175f +Block 0028 [ 47]: 70d59843f362422b +Block 0028 [ 48]: fb2cc00b52176c97 +Block 0028 [ 49]: 9e91c272a354ccf9 +Block 0028 [ 50]: fedfa3bbfd084038 +Block 0028 [ 51]: 66c268e3d3471545 +Block 0028 [ 52]: cdcd7168925ae4eb +Block 0028 [ 53]: 1816c7d21f19a754 +Block 0028 [ 54]: 9e3100dd7798b55f +Block 0028 [ 55]: da2ef9205dcf4b82 +Block 0028 [ 56]: 372619bb220cf87c +Block 0028 [ 57]: 22a4413ecb6e4f99 +Block 0028 [ 58]: 03717cf0bfe1503d +Block 0028 [ 59]: 3caaa69489d9b6fb +Block 0028 [ 60]: cb98f0775973e3df +Block 0028 [ 61]: 1d888ba44c947535 +Block 0028 [ 62]: fc0d0ddb3ec24d7b +Block 0028 [ 63]: 1bc085ba44559e11 +Block 0028 [ 64]: 8953975b8539d843 +Block 0028 [ 65]: f96aea013628b82c +Block 0028 [ 66]: b419370dd5c74690 +Block 0028 [ 67]: fb6c6aa70aee9799 +Block 0028 [ 68]: 85c3aaeb348e6555 +Block 0028 [ 69]: 59dc27ad4cb80f88 +Block 0028 [ 70]: ed7afeffdf385af3 +Block 0028 [ 71]: 0f0dfd4dc6230c52 +Block 0028 [ 72]: 4636832c11781396 +Block 0028 [ 73]: 2c33a5a47579ca10 +Block 0028 [ 74]: ad88de9061a25e88 +Block 0028 [ 75]: d1224222eeedd591 +Block 0028 [ 76]: 69bc46adc65fa8ad +Block 0028 [ 77]: 1ee3233180d64833 +Block 0028 [ 78]: 11948dbb66ed6a04 +Block 0028 [ 79]: 31488740e7c9662d +Block 0028 [ 80]: 16df31894039b685 +Block 0028 [ 81]: af4f60facedaede6 +Block 0028 [ 82]: d683f45a39bb4306 +Block 0028 [ 83]: 13c961bf8ba5a0ec +Block 0028 [ 84]: 03530369d1cf43d4 +Block 0028 [ 85]: 71d91b318967084c +Block 0028 [ 86]: 32274b144bac8237 +Block 0028 [ 87]: d6d8eaac469832c5 +Block 0028 [ 88]: 3fefc193c0e9bbae +Block 0028 [ 89]: 54c4d65a3dbc724e +Block 0028 [ 90]: 9f5f3ada21ba189f +Block 0028 [ 91]: c6f754427c4d6fbc +Block 0028 [ 92]: aa2578e45b353de0 +Block 0028 [ 93]: a189e64da4c5edee +Block 0028 [ 94]: d8925737d18ba6cf +Block 0028 [ 95]: 19e7541d4bb078e6 +Block 0028 [ 96]: 6257ce84db6a0585 +Block 0028 [ 97]: c28fd38e38d259f5 +Block 0028 [ 98]: 21e5bbd6bc911d42 +Block 0028 [ 99]: 9e7ff827f7a6aa0b +Block 0028 [100]: 87b9d2b325e2d51e +Block 0028 [101]: 063d74eb3465a8f1 +Block 0028 [102]: fa4ce27126d960c1 +Block 0028 [103]: 6cf8a01df2a65fb7 +Block 0028 [104]: d3dd5981fd75d786 +Block 0028 [105]: 1d2aeee33712ebd9 +Block 0028 [106]: aef7d538f83bd76a +Block 0028 [107]: bc930cdb8705578e +Block 0028 [108]: 7cadc7439eb2940a +Block 0028 [109]: 169745940d7e1948 +Block 0028 [110]: 7d8665a74288db3c +Block 0028 [111]: b748b1cd8d96ba2a +Block 0028 [112]: defaba3d0b9aec81 +Block 0028 [113]: 7a5caf35df223c73 +Block 0028 [114]: b4a74e84a51b11fa +Block 0028 [115]: ebf12950c6f34a6e +Block 0028 [116]: 05683a715cc17966 +Block 0028 [117]: df2e9871efcc643d +Block 0028 [118]: 1b66b82b99320384 +Block 0028 [119]: 997df1a8e8e9244a +Block 0028 [120]: 20263014f76f78e8 +Block 0028 [121]: 42769a9211f735e5 +Block 0028 [122]: e8cc76e32520ff1b +Block 0028 [123]: 0a9130ff5bb61092 +Block 0028 [124]: 1bac198c40fb6a57 +Block 0028 [125]: fa685df2fe727bb3 +Block 0028 [126]: b3e7bcfd42ffe2d7 +Block 0028 [127]: 66be499624073e2d +Block 0029 [ 0]: 1178d0480551dfc6 +Block 0029 [ 1]: 5187eed47212089f +Block 0029 [ 2]: 42898321caf5af34 +Block 0029 [ 3]: 1e0565d05fb9f254 +Block 0029 [ 4]: 68d1cf52778d2feb +Block 0029 [ 5]: 2fc1c91be6b25822 +Block 0029 [ 6]: 9e616744ca1cd585 +Block 0029 [ 7]: cb52d5be9e180b62 +Block 0029 [ 8]: ca2217ead26e1eab +Block 0029 [ 9]: 75f749c30dfb9fab +Block 0029 [ 10]: 7ee7fba56c86c33b +Block 0029 [ 11]: 6d5b689f4f800858 +Block 0029 [ 12]: 28a17498950b879a +Block 0029 [ 13]: cb81340219891240 +Block 0029 [ 14]: c273841814b1e916 +Block 0029 [ 15]: f1674554a51e9b34 +Block 0029 [ 16]: b8edcf4f61113467 +Block 0029 [ 17]: 4c9fed95227d3220 +Block 0029 [ 18]: ea2560287408d60b +Block 0029 [ 19]: 910e6ebd0d760e08 +Block 0029 [ 20]: 7249b66d9458152d +Block 0029 [ 21]: 5bbbafb398ebe2af +Block 0029 [ 22]: d14cca3302065ae9 +Block 0029 [ 23]: 2381a24f70d7461f +Block 0029 [ 24]: 4610f2b3c45aaa48 +Block 0029 [ 25]: 0770c2aafa948d59 +Block 0029 [ 26]: 4b88fdc8aa300ec9 +Block 0029 [ 27]: 8be083716fb9ec8a +Block 0029 [ 28]: 57fc57bbf62aea8f +Block 0029 [ 29]: bdfcd3491ba8f1ff +Block 0029 [ 30]: 0aeed63235663fd9 +Block 0029 [ 31]: 191012cb4aa161e1 +Block 0029 [ 32]: 60678d765589fd1d +Block 0029 [ 33]: 223281bdd84345cb +Block 0029 [ 34]: 1a3f94b2164cc584 +Block 0029 [ 35]: 15e66f71f0544969 +Block 0029 [ 36]: a1b51a96bf12eb48 +Block 0029 [ 37]: 8b0a8a65b688eb0d +Block 0029 [ 38]: 6b0b58dd2d36652a +Block 0029 [ 39]: e5539a59cfcdefe7 +Block 0029 [ 40]: f2008d87b7556a7c +Block 0029 [ 41]: 84110ef2f60a53ee +Block 0029 [ 42]: b733f4f75f4b849d +Block 0029 [ 43]: a47f8945a6faebc6 +Block 0029 [ 44]: 3d5d650d8bb93088 +Block 0029 [ 45]: f5fc955ad93ab98a +Block 0029 [ 46]: 8af341c08d45dee8 +Block 0029 [ 47]: 7d07c8d014e9163f +Block 0029 [ 48]: 887a2fca5f135987 +Block 0029 [ 49]: ab251174f76ad2b9 +Block 0029 [ 50]: 404602ca6bcd80df +Block 0029 [ 51]: b4c2749a49e85a7d +Block 0029 [ 52]: 0d5d67e561f20bf6 +Block 0029 [ 53]: 53db11a315a12a0f +Block 0029 [ 54]: d802cc1dd33b595b +Block 0029 [ 55]: 68afa26bb1bc8087 +Block 0029 [ 56]: 9fa3a9eeee65c849 +Block 0029 [ 57]: 166ad5e90e1fb34a +Block 0029 [ 58]: 111cbb03483c7948 +Block 0029 [ 59]: d1a00ee3bc309870 +Block 0029 [ 60]: c26b7662c5117bcc +Block 0029 [ 61]: 02fd9550715a76b9 +Block 0029 [ 62]: 3bd94c9f496d061b +Block 0029 [ 63]: bd8c34d3de23173b +Block 0029 [ 64]: 73903c5a6130726c +Block 0029 [ 65]: 14e7ae74063b1c41 +Block 0029 [ 66]: 880c6cab2bf1f166 +Block 0029 [ 67]: f9766e9ef9d5bfd9 +Block 0029 [ 68]: addb32c388d90782 +Block 0029 [ 69]: 6554423048bedf74 +Block 0029 [ 70]: 51c6576b5281b903 +Block 0029 [ 71]: eeecd5b168b9b5bf +Block 0029 [ 72]: 062dca803c473ec9 +Block 0029 [ 73]: fb84d11eb83a1f48 +Block 0029 [ 74]: 9163949866a646c6 +Block 0029 [ 75]: ae458ee2c4aa38b0 +Block 0029 [ 76]: ba7b37a0fe308791 +Block 0029 [ 77]: 23bdb9b915739e12 +Block 0029 [ 78]: cebef87ee8e00146 +Block 0029 [ 79]: 1ff5050825cb849a +Block 0029 [ 80]: dcaf4b96d9369968 +Block 0029 [ 81]: cbd9923d4a25e778 +Block 0029 [ 82]: fda760b9bcce8309 +Block 0029 [ 83]: 9ba39fcea41dea54 +Block 0029 [ 84]: ff89703e444c7d03 +Block 0029 [ 85]: c1528bfd6f82fb85 +Block 0029 [ 86]: 04d4c35cba24af07 +Block 0029 [ 87]: 5d34229c32c2f458 +Block 0029 [ 88]: 8d07eb7d2dc56870 +Block 0029 [ 89]: 6dd6ea0c611eb1b5 +Block 0029 [ 90]: bac1f9799d2ab54e +Block 0029 [ 91]: 173b5b2a973bdaaf +Block 0029 [ 92]: b1a4d48e7ee1a46f +Block 0029 [ 93]: 0fb36719adc8e91c +Block 0029 [ 94]: faefc2753cb6cdb7 +Block 0029 [ 95]: 3427dee22c050a26 +Block 0029 [ 96]: 648629655322c85e +Block 0029 [ 97]: da6a37e23216fe1e +Block 0029 [ 98]: dac40e7d38f3ada2 +Block 0029 [ 99]: 1f9e046da29bcca6 +Block 0029 [100]: b0fa2e7b8f53a3ad +Block 0029 [101]: 4b7971342bd55433 +Block 0029 [102]: 14101d41f2afb513 +Block 0029 [103]: 1f0363b9b7c93230 +Block 0029 [104]: c26b7dc1abe4c074 +Block 0029 [105]: 511202c932605bc3 +Block 0029 [106]: 506f446b14c2fa0d +Block 0029 [107]: 9e5d0d754af3c04b +Block 0029 [108]: 2e79bcb2c0a7e061 +Block 0029 [109]: 5ce8a45905514efd +Block 0029 [110]: bb21b252b1c6abce +Block 0029 [111]: 27a6a502660183c1 +Block 0029 [112]: 3b27a572ce4e05c6 +Block 0029 [113]: a0e0c0768b022220 +Block 0029 [114]: 4873709f797c3e92 +Block 0029 [115]: 3fa74bae85c78557 +Block 0029 [116]: 330626653f791311 +Block 0029 [117]: 4e3401cd1d1f092e +Block 0029 [118]: f4ab84a94f25d989 +Block 0029 [119]: c1f9db3453d949e2 +Block 0029 [120]: d00d0eae1c6b4941 +Block 0029 [121]: 2f72341a47394d0f +Block 0029 [122]: 9faf011956ae9b44 +Block 0029 [123]: 6d5af027411369bf +Block 0029 [124]: 3ba9db1f0e087f5c +Block 0029 [125]: ff5f35b92c04605d +Block 0029 [126]: 6b522baa870cd062 +Block 0029 [127]: 116c95d872b06470 +Block 0030 [ 0]: a497707d907bdbb5 +Block 0030 [ 1]: 1387b1d7e2de9fb2 +Block 0030 [ 2]: e9b7a5ae2c3911c3 +Block 0030 [ 3]: 2304e30b4abe1342 +Block 0030 [ 4]: 6569e5e7e495cac3 +Block 0030 [ 5]: e781abd4b3be3fa2 +Block 0030 [ 6]: cec45944649475fe +Block 0030 [ 7]: e3fd8069db7556ca +Block 0030 [ 8]: 12aad9e722e95123 +Block 0030 [ 9]: f63c54f3569a0288 +Block 0030 [ 10]: 602202c9a3326c48 +Block 0030 [ 11]: 034a4bb4f502d541 +Block 0030 [ 12]: 906032657dd97cfa +Block 0030 [ 13]: b5a1edcb89d7eeae +Block 0030 [ 14]: b40c965b3a0ec87e +Block 0030 [ 15]: 19beb1de7d74c858 +Block 0030 [ 16]: 84d9844f4f30b2cd +Block 0030 [ 17]: 2de7df0d9270a720 +Block 0030 [ 18]: 987353a68f551dfe +Block 0030 [ 19]: 87231e01671d5682 +Block 0030 [ 20]: 95e08d7d4d13e893 +Block 0030 [ 21]: c9d54121b1cbe05a +Block 0030 [ 22]: 9173beb279257e2f +Block 0030 [ 23]: 6c0b47361287718b +Block 0030 [ 24]: d815836edde64e0d +Block 0030 [ 25]: 3aab70f8ef8acd58 +Block 0030 [ 26]: 3d4eacbb303b8942 +Block 0030 [ 27]: 47074d7a499f1b4d +Block 0030 [ 28]: 6b77d29cc5814f8e +Block 0030 [ 29]: 4a22120fe4303e54 +Block 0030 [ 30]: 788b37c81c090145 +Block 0030 [ 31]: 944d5943a04e0b67 +Block 0030 [ 32]: b3581ddd1331a125 +Block 0030 [ 33]: 9f34510aa2b7d72d +Block 0030 [ 34]: 1c612fbaac10b0c4 +Block 0030 [ 35]: ed62acd73a0b0d39 +Block 0030 [ 36]: 1eb6b7c4c3b33953 +Block 0030 [ 37]: 9598308b94b5e7d8 +Block 0030 [ 38]: c28392bfb3e48aff +Block 0030 [ 39]: 86833aec5beb2fd1 +Block 0030 [ 40]: be199029fcd63ac9 +Block 0030 [ 41]: 146e2a07296b54bc +Block 0030 [ 42]: 1b42bea1f2fffb84 +Block 0030 [ 43]: 4e01f060efa7f0dd +Block 0030 [ 44]: dfc3a66f34fdc191 +Block 0030 [ 45]: aaba1fb5f896bb29 +Block 0030 [ 46]: 3297ba5c2b77908a +Block 0030 [ 47]: dbb1641509d7d204 +Block 0030 [ 48]: 2a8a4be0b611de11 +Block 0030 [ 49]: 5abb85518f96f0ce +Block 0030 [ 50]: 23eec337eedea731 +Block 0030 [ 51]: f581a8d567be23b7 +Block 0030 [ 52]: 877c88e984fc6794 +Block 0030 [ 53]: fdf883e49b5450ae +Block 0030 [ 54]: 81ad8e2532db6a2b +Block 0030 [ 55]: a6d3644b428394df +Block 0030 [ 56]: ade7c3614a7f3454 +Block 0030 [ 57]: 4789c2d8ffd935b2 +Block 0030 [ 58]: 09571ee74ecdaeb9 +Block 0030 [ 59]: 5ec25b62459cd7df +Block 0030 [ 60]: ae9063222cebedd0 +Block 0030 [ 61]: 838691ff044dac26 +Block 0030 [ 62]: 9c2b1ff5d82f5c48 +Block 0030 [ 63]: 4ed661d83f838188 +Block 0030 [ 64]: da11ffe4f89a98bf +Block 0030 [ 65]: 026102a18ff640c3 +Block 0030 [ 66]: b40d27b026bd55a3 +Block 0030 [ 67]: 65dd56b86986b85f +Block 0030 [ 68]: b5f744df59d5cf0b +Block 0030 [ 69]: a9d05b38d431021e +Block 0030 [ 70]: 7aa376509a108cbb +Block 0030 [ 71]: 7e0cae8ca01a7ba2 +Block 0030 [ 72]: f257fb68679f2ba5 +Block 0030 [ 73]: a027a9a021201e96 +Block 0030 [ 74]: 8ff39ab8e46c65db +Block 0030 [ 75]: 1f61e97c20b1922b +Block 0030 [ 76]: 2e8f687076b3cbaf +Block 0030 [ 77]: 7d8107a7e3840cd5 +Block 0030 [ 78]: 2f65babde65d296f +Block 0030 [ 79]: 1897c1b8df8db90f +Block 0030 [ 80]: 7d431f0d0229c28d +Block 0030 [ 81]: a1f1c590f3ac726c +Block 0030 [ 82]: 5868070e74cecb5a +Block 0030 [ 83]: 6fca45ad6efdcb57 +Block 0030 [ 84]: ececbb1ddd986c18 +Block 0030 [ 85]: bb4f79fa8793727b +Block 0030 [ 86]: e9ccb85cba576ede +Block 0030 [ 87]: cad0e15d66710c9e +Block 0030 [ 88]: 47339a449ddf32bc +Block 0030 [ 89]: 9d82700ead343ae7 +Block 0030 [ 90]: 48d7c02a64d34fdd +Block 0030 [ 91]: a47baf96226a594f +Block 0030 [ 92]: c1bd47b224ffaa1b +Block 0030 [ 93]: 280edfb69fd7ea1a +Block 0030 [ 94]: 64417df4d9700c3e +Block 0030 [ 95]: a559eb16ca1690aa +Block 0030 [ 96]: 7a4cfedb4e665af8 +Block 0030 [ 97]: e9635d0de30f731a +Block 0030 [ 98]: 5e40ef66b6a35488 +Block 0030 [ 99]: a6c5a440428cae6b +Block 0030 [100]: 464bbed452e49552 +Block 0030 [101]: 2cd703be6cb48289 +Block 0030 [102]: 19814217d930cbb8 +Block 0030 [103]: 9ca6007e94343418 +Block 0030 [104]: 83628a532ebee52b +Block 0030 [105]: b96a42109d9b7797 +Block 0030 [106]: ccc287509dc3a229 +Block 0030 [107]: bcb1714a388e28ab +Block 0030 [108]: 7c0210e4bc243b95 +Block 0030 [109]: 0701316191270f44 +Block 0030 [110]: fe186f16bf6a4331 +Block 0030 [111]: ca565a897bcd7ef8 +Block 0030 [112]: fe5a66451bdf69f5 +Block 0030 [113]: 076858ec4a523860 +Block 0030 [114]: efe04a084a633f98 +Block 0030 [115]: be0a2c63541771bb +Block 0030 [116]: f32d430350e88858 +Block 0030 [117]: 7817ff971e7f4810 +Block 0030 [118]: b6f18c6e97c66e6b +Block 0030 [119]: ad4804cbb61673f5 +Block 0030 [120]: 4001049c9d5a4a69 +Block 0030 [121]: 7d04aa55446e6096 +Block 0030 [122]: 3bd9c63472650ea6 +Block 0030 [123]: c7b3e0272cfcd957 +Block 0030 [124]: 2dc05b7529c3166d +Block 0030 [125]: 7eb2b09e8b11d32e +Block 0030 [126]: d91455278416d563 +Block 0030 [127]: 66d637a2a2b6c5cc +Block 0031 [ 0]: 944a7ec736864f24 +Block 0031 [ 1]: 62207f9b144f6041 +Block 0031 [ 2]: 1b91de707e936258 +Block 0031 [ 3]: b11599a08b417d8b +Block 0031 [ 4]: 89ee0ff3f7266b4e +Block 0031 [ 5]: 36fb1c44fefd9e7f +Block 0031 [ 6]: 5cd146a84de48497 +Block 0031 [ 7]: d729287c49dba1ee +Block 0031 [ 8]: f63844866eab1228 +Block 0031 [ 9]: a28a6b71ea46f38a +Block 0031 [ 10]: 9aec7730893dbc33 +Block 0031 [ 11]: 8ef663a07b64cc7d +Block 0031 [ 12]: 05cc88303838c4be +Block 0031 [ 13]: 462bd3ab56e8a6a6 +Block 0031 [ 14]: 4f3d76237943927f +Block 0031 [ 15]: f6b6653932fe9ef0 +Block 0031 [ 16]: 6d7b4d2aa239c737 +Block 0031 [ 17]: caae7db69aa59aa7 +Block 0031 [ 18]: 1e31c6f143d9952a +Block 0031 [ 19]: 6b60a98e290ca696 +Block 0031 [ 20]: 940ca1bbcd3f7463 +Block 0031 [ 21]: e2018e95efea6502 +Block 0031 [ 22]: 723653c1f8b8b5aa +Block 0031 [ 23]: 44e8613497d80985 +Block 0031 [ 24]: 47fc4079d7548605 +Block 0031 [ 25]: 12c033e65ead5787 +Block 0031 [ 26]: 7e35d99dd937027d +Block 0031 [ 27]: db08418fcf1de9e2 +Block 0031 [ 28]: 962efd855a0c9915 +Block 0031 [ 29]: 49a9432586bd141c +Block 0031 [ 30]: 3e934ae2d20d3bf4 +Block 0031 [ 31]: ca3878557731e31b +Block 0031 [ 32]: 5a2e3f7af5fd99fc +Block 0031 [ 33]: d4cdb70de69868a7 +Block 0031 [ 34]: 2e466841a0631c49 +Block 0031 [ 35]: ad2cce77b3eaac9b +Block 0031 [ 36]: d7457681c1d3b8d1 +Block 0031 [ 37]: 21f8b6b030430d7e +Block 0031 [ 38]: 52e8e9ef6f17868d +Block 0031 [ 39]: 74643040276b49e0 +Block 0031 [ 40]: fa0fc64652a88bbe +Block 0031 [ 41]: b85368143ee3fc44 +Block 0031 [ 42]: ceb7bf6f9163bf98 +Block 0031 [ 43]: 014748d0c2530c89 +Block 0031 [ 44]: f08c8d17798594a5 +Block 0031 [ 45]: 300302703d482fb6 +Block 0031 [ 46]: f6c702c1f364984a +Block 0031 [ 47]: 88e96d54da28c933 +Block 0031 [ 48]: 600731f1d5e30200 +Block 0031 [ 49]: 3fafb57df73906ee +Block 0031 [ 50]: 50676df27723e8dc +Block 0031 [ 51]: 35276a345eafaa5b +Block 0031 [ 52]: 6836ff29f04060fb +Block 0031 [ 53]: f836a93b5a0e07b5 +Block 0031 [ 54]: 7ff0ec0945b7555f +Block 0031 [ 55]: 9a978bbe613eee43 +Block 0031 [ 56]: 0cb6317840199246 +Block 0031 [ 57]: 9ac40873681cb4f3 +Block 0031 [ 58]: ef3ab4e1f58c04cb +Block 0031 [ 59]: cf511bdcbbaab45a +Block 0031 [ 60]: ac604c91d14a4a8b +Block 0031 [ 61]: 5d9a3364c9cfe64a +Block 0031 [ 62]: 8f3c791a7e3997cd +Block 0031 [ 63]: af6786e36a555a52 +Block 0031 [ 64]: aa4c4498263bd24a +Block 0031 [ 65]: 17bb504c406e501c +Block 0031 [ 66]: 5605458618bb7567 +Block 0031 [ 67]: 23dba58aeaf90514 +Block 0031 [ 68]: ddf47fc505d368f3 +Block 0031 [ 69]: d020a357a81d8f2a +Block 0031 [ 70]: 5a8105998d6289cc +Block 0031 [ 71]: cc09c874e9ad7fb4 +Block 0031 [ 72]: 6e0e7a023893dea4 +Block 0031 [ 73]: 9bb514c8b1d2d2bd +Block 0031 [ 74]: 9afbba056d6b02db +Block 0031 [ 75]: 567639eeb1c4f4f3 +Block 0031 [ 76]: b23981b08a43352d +Block 0031 [ 77]: 8a99b8cb4cf52afd +Block 0031 [ 78]: 4c9ae1dcc386ba60 +Block 0031 [ 79]: 5877d8ffcee47c72 +Block 0031 [ 80]: 08ec719cd344b3d9 +Block 0031 [ 81]: 5fed35d31f385127 +Block 0031 [ 82]: a98b4f7dcb2fb022 +Block 0031 [ 83]: bed0b0d8eeb49d83 +Block 0031 [ 84]: 353088c2e9bffc0c +Block 0031 [ 85]: 621cd0ea9f951e5e +Block 0031 [ 86]: 15b6e21e7fe5cff1 +Block 0031 [ 87]: fb256930ba770de1 +Block 0031 [ 88]: 58153034cf988f39 +Block 0031 [ 89]: b135d6b52572443a +Block 0031 [ 90]: b46c8c25d02e20e1 +Block 0031 [ 91]: cdf31cdd2a5e6c86 +Block 0031 [ 92]: e5df8b1870d0fa5f +Block 0031 [ 93]: ff58e219eb2aaef9 +Block 0031 [ 94]: 7b7bf59a19bf4b82 +Block 0031 [ 95]: a83c4eddca7251b7 +Block 0031 [ 96]: e6846c08a364b23b +Block 0031 [ 97]: ce1e0e3990a0b85c +Block 0031 [ 98]: 4805db1de087560c +Block 0031 [ 99]: 65510d9d724717cf +Block 0031 [100]: a5083efef98e595a +Block 0031 [101]: eff774bbf800218d +Block 0031 [102]: fda9598516b2db5d +Block 0031 [103]: 4c1a7ec2bfbca7b7 +Block 0031 [104]: 805250bd4ac405ed +Block 0031 [105]: f11b412261ec3b87 +Block 0031 [106]: e08f40d87a900ff8 +Block 0031 [107]: 99b8fbca386979b6 +Block 0031 [108]: 07aa22432c786a5a +Block 0031 [109]: 585b41d00bc71127 +Block 0031 [110]: 0b03483ac6511c99 +Block 0031 [111]: 6d4cc89b3af28b23 +Block 0031 [112]: 6970451c183ee79a +Block 0031 [113]: f5580761f2eccdc7 +Block 0031 [114]: 0424ccc22b9d54f9 +Block 0031 [115]: 9c48d9de801d0bf0 +Block 0031 [116]: 54fa4f6346f39b22 +Block 0031 [117]: 1ece637d6f675279 +Block 0031 [118]: 260b9ebb18ab1078 +Block 0031 [119]: 4ec528bb24040a3f +Block 0031 [120]: 383fd565da93d8cd +Block 0031 [121]: 6935146f0387f41a +Block 0031 [122]: ae152b1a7f1d5c85 +Block 0031 [123]: d6269b14a3203dcc +Block 0031 [124]: 975f596583745e30 +Block 0031 [125]: e349bdd7edeb3092 +Block 0031 [126]: b751a689b7a83659 +Block 0031 [127]: c570f2ab2a86cf00 + + After pass 1: +Block 0000 [ 0]: b2e4ddfcf76dc85a +Block 0000 [ 1]: 4ffd0626c89a2327 +Block 0000 [ 2]: 4af1440fff212980 +Block 0000 [ 3]: 1e77299c7408505b +Block 0000 [ 4]: 7e672fb78ae3238d +Block 0000 [ 5]: e1cd67bfe18df2a1 +Block 0000 [ 6]: a8c04ae868f9e203 +Block 0000 [ 7]: 37a422ec2be1e14a +Block 0000 [ 8]: ea9c1ad5c2eb5a3c +Block 0000 [ 9]: 3c3424244acf65b3 +Block 0000 [ 10]: 989f059deef06d0e +Block 0000 [ 11]: da5804817b974b81 +Block 0000 [ 12]: 568bf960dcd66161 +Block 0000 [ 13]: c7e121cade4f297b +Block 0000 [ 14]: 27137ecb75c49a3f +Block 0000 [ 15]: 2dcd6d8f395ca8e2 +Block 0000 [ 16]: f54545a15ff00e31 +Block 0000 [ 17]: 3a7c1498b8d66c10 +Block 0000 [ 18]: 4a2d2bb85113a135 +Block 0000 [ 19]: 78b94e1def66f354 +Block 0000 [ 20]: e2c64ed507262087 +Block 0000 [ 21]: e6ca912ac501b306 +Block 0000 [ 22]: c0550c72d9d27c6f +Block 0000 [ 23]: 0a989bf18f3d182f +Block 0000 [ 24]: 03021933aeecca55 +Block 0000 [ 25]: a2c5723fd06c1245 +Block 0000 [ 26]: 29deb6fc754291db +Block 0000 [ 27]: 01e5e4663bd45e9b +Block 0000 [ 28]: 42df9217bad5bad4 +Block 0000 [ 29]: cbce9a4ee35f8a19 +Block 0000 [ 30]: 5e3da2d83d8eb369 +Block 0000 [ 31]: 4aa815e870f6d260 +Block 0000 [ 32]: 9fb5792a7cacd0dd +Block 0000 [ 33]: 537c357f3389887d +Block 0000 [ 34]: 85ab6defa2a243a6 +Block 0000 [ 35]: 9a0d93d5abead9c9 +Block 0000 [ 36]: 8db03096016980a9 +Block 0000 [ 37]: 8136c1a3dd0bb522 +Block 0000 [ 38]: 8cf8da44ab7d86b7 +Block 0000 [ 39]: e6f2cf5e26222f47 +Block 0000 [ 40]: fb2c472f85b81433 +Block 0000 [ 41]: 86e420d43e669e99 +Block 0000 [ 42]: a94125c90c4e51eb +Block 0000 [ 43]: f0cdfc7f5d9661d5 +Block 0000 [ 44]: f35814a7d0533f8e +Block 0000 [ 45]: eaee32abeeb1d71d +Block 0000 [ 46]: 5a19ad61e8018c3b +Block 0000 [ 47]: 42dc03945b12adb0 +Block 0000 [ 48]: 0efc60abd50a2629 +Block 0000 [ 49]: 71682cdb7a674bcc +Block 0000 [ 50]: b91c1757438caaa3 +Block 0000 [ 51]: 456a17580d4264d0 +Block 0000 [ 52]: e2830a456e3be8d1 +Block 0000 [ 53]: 6984a07c7eb39daa +Block 0000 [ 54]: 129d6a66f99e7c51 +Block 0000 [ 55]: 49cd04749c85f25d +Block 0000 [ 56]: cf5e1f90e3ccacea +Block 0000 [ 57]: e00d2db8929c2342 +Block 0000 [ 58]: 4a50a98f75a4d23a +Block 0000 [ 59]: 06f3a32ee178e8a3 +Block 0000 [ 60]: e34113ed208c810e +Block 0000 [ 61]: 2ded060db2eebe26 +Block 0000 [ 62]: dd60eb35ca0c7625 +Block 0000 [ 63]: ad1d92d562b0d222 +Block 0000 [ 64]: 047447517d666518 +Block 0000 [ 65]: 613ce6bb0ff26d08 +Block 0000 [ 66]: 5521788de49616b7 +Block 0000 [ 67]: 3a5056474730596e +Block 0000 [ 68]: d5cbdad593ff2517 +Block 0000 [ 69]: 61fa2a8e714695c1 +Block 0000 [ 70]: 23baaccba2490eb5 +Block 0000 [ 71]: 655cfc83b1a82fc5 +Block 0000 [ 72]: a5c66c25b7fc4ebf +Block 0000 [ 73]: 95f66ee973a5b6e3 +Block 0000 [ 74]: 082e286bdaa2cd49 +Block 0000 [ 75]: 849a992344f431c8 +Block 0000 [ 76]: 9bbc20fce1f8e3fc +Block 0000 [ 77]: 1b7586e5ce69f2b5 +Block 0000 [ 78]: 9a263f9fdd4628fc +Block 0000 [ 79]: 7cd5ff4d7eb3c224 +Block 0000 [ 80]: 76dd41d1fc458a1f +Block 0000 [ 81]: e7db382f1cb0c2c9 +Block 0000 [ 82]: 837e7a11ad6033c2 +Block 0000 [ 83]: eaf7ed04d62b47a7 +Block 0000 [ 84]: 7f3e93feae950543 +Block 0000 [ 85]: f43dce98db930c6c +Block 0000 [ 86]: 034085278bfb1aaf +Block 0000 [ 87]: 047c628b27d21682 +Block 0000 [ 88]: ff6f46a71535f39d +Block 0000 [ 89]: cf8b2ec8ea64daa0 +Block 0000 [ 90]: 7798fea1844fc894 +Block 0000 [ 91]: e5a89e1eaa8c2be8 +Block 0000 [ 92]: 7da8c3309f71a9c4 +Block 0000 [ 93]: 126aa1334fabc285 +Block 0000 [ 94]: a31b8a6990dff9ea +Block 0000 [ 95]: b6f753045da7efcb +Block 0000 [ 96]: d5f7ae86280997fb +Block 0000 [ 97]: 4ac781ee5a227dc2 +Block 0000 [ 98]: 90bf68c528de1614 +Block 0000 [ 99]: f2b948077c97bb31 +Block 0000 [100]: ed9869cd2fcc01d6 +Block 0000 [101]: dd757dd9bb87c485 +Block 0000 [102]: 401e6dfaeb98fdc1 +Block 0000 [103]: ce46cebd1c998df8 +Block 0000 [104]: 2c96b3649229238c +Block 0000 [105]: d73d3649246a34e8 +Block 0000 [106]: f8c09d8ed3624653 +Block 0000 [107]: 4b00e20ec3ef6334 +Block 0000 [108]: fc612e9aea430b66 +Block 0000 [109]: 082cb1bffd463327 +Block 0000 [110]: 708afd583f223878 +Block 0000 [111]: bacc8830cdfb689a +Block 0000 [112]: 51c543c47d97a5e5 +Block 0000 [113]: 088ddff206e1af93 +Block 0000 [114]: 14ba0bf68723ea38 +Block 0000 [115]: 60cec002007482d7 +Block 0000 [116]: cc35a0963e1e318e +Block 0000 [117]: e49f60771b29722a +Block 0000 [118]: 571920b4c7fc0351 +Block 0000 [119]: fb7800322db6813b +Block 0000 [120]: d6ee0ab287858786 +Block 0000 [121]: 8a78e72d193027b9 +Block 0000 [122]: 6e5c870b4156f14e +Block 0000 [123]: 940e690ff9bd0e4b +Block 0000 [124]: e4ceee2788ca1338 +Block 0000 [125]: 107efa0a04948bea +Block 0000 [126]: 54169c55f786c3de +Block 0000 [127]: 27f4ddbe3b4bfb29 +Block 0001 [ 0]: 7c7e4e842a102e2d +Block 0001 [ 1]: d97fb43fe330bc52 +Block 0001 [ 2]: dbb3531f03bfaed0 +Block 0001 [ 3]: 379d167ac7eb5f37 +Block 0001 [ 4]: bcac160bbdff1487 +Block 0001 [ 5]: a2ddda9500ea90be +Block 0001 [ 6]: 1d7966fb7d9f62f3 +Block 0001 [ 7]: f015be978fbcd6e9 +Block 0001 [ 8]: 6f6b9177dbf23924 +Block 0001 [ 9]: cd3d5950128429bc +Block 0001 [ 10]: 6002e39a85144740 +Block 0001 [ 11]: 9af2c013af0db2a5 +Block 0001 [ 12]: 32d56e0705ddb5d4 +Block 0001 [ 13]: f8ed5a41bf619926 +Block 0001 [ 14]: a48b07b10a30d3f0 +Block 0001 [ 15]: 30c347cbeac2dba4 +Block 0001 [ 16]: 0705452f5690858e +Block 0001 [ 17]: 91214114cad3fbb2 +Block 0001 [ 18]: c3c528bbc2f2b866 +Block 0001 [ 19]: 8449f042c4edcb84 +Block 0001 [ 20]: b4f8190f05d2860b +Block 0001 [ 21]: ff0e2dbbc88c0452 +Block 0001 [ 22]: d063b4424c6fabf3 +Block 0001 [ 23]: 79785bfe15e572e9 +Block 0001 [ 24]: 8b9cf846aeb1ad6e +Block 0001 [ 25]: 06384456c23106a8 +Block 0001 [ 26]: f67379d12f8af09c +Block 0001 [ 27]: d557757d96eb9d12 +Block 0001 [ 28]: b153ed5e9e18c9f8 +Block 0001 [ 29]: 9e865cefbd445b3a +Block 0001 [ 30]: 84a87d3cf1d42139 +Block 0001 [ 31]: 98eff782bd9f7acf +Block 0001 [ 32]: baa280b8075cae9b +Block 0001 [ 33]: 64ac022bf3b0cf64 +Block 0001 [ 34]: e445bbadf36fea9f +Block 0001 [ 35]: 7a638052234cecc5 +Block 0001 [ 36]: d1561f72f4db01a3 +Block 0001 [ 37]: c0ee406b5dab7a6c +Block 0001 [ 38]: 03999c6c700e7e52 +Block 0001 [ 39]: c2adb31c6e041da3 +Block 0001 [ 40]: fca2270651bb2959 +Block 0001 [ 41]: 5ee8f5be5975c4d7 +Block 0001 [ 42]: abe285efbc633b22 +Block 0001 [ 43]: 1232e79db37874d7 +Block 0001 [ 44]: 6f8b937469210023 +Block 0001 [ 45]: b6771199336d27d2 +Block 0001 [ 46]: 68261151e67ef112 +Block 0001 [ 47]: a3d3c5385acb39f3 +Block 0001 [ 48]: e13cc3158a887bad +Block 0001 [ 49]: 6e49bbe54dcdd6e1 +Block 0001 [ 50]: 7b53792348cebf03 +Block 0001 [ 51]: 2bad526dc40fd5ed +Block 0001 [ 52]: 4fc378646d4f270e +Block 0001 [ 53]: 7e1238268cb3c608 +Block 0001 [ 54]: 3e6bef59b00ed662 +Block 0001 [ 55]: 6cbc24d59c79bf65 +Block 0001 [ 56]: 93bf6f73eaaa18d3 +Block 0001 [ 57]: 3086062a47b65381 +Block 0001 [ 58]: 0a573df850f72ca7 +Block 0001 [ 59]: a34505f05cd9b423 +Block 0001 [ 60]: 73dc824fcfcd196e +Block 0001 [ 61]: ca8eb6deca473c6d +Block 0001 [ 62]: 6c750f133ae71a99 +Block 0001 [ 63]: 88c12f0eab06a0b1 +Block 0001 [ 64]: 1a0db5c1522ab263 +Block 0001 [ 65]: 99da78e8b8ff09d5 +Block 0001 [ 66]: fb8842c7292ca975 +Block 0001 [ 67]: 1ddb8ed4f63a9f47 +Block 0001 [ 68]: 70f53652df585383 +Block 0001 [ 69]: bf24132118dc24b4 +Block 0001 [ 70]: 937839e1f511fb44 +Block 0001 [ 71]: 65dc97b180f7d8df +Block 0001 [ 72]: f98385784dd99067 +Block 0001 [ 73]: aee167d39d525b8b +Block 0001 [ 74]: 11eb5ba83feaff09 +Block 0001 [ 75]: 3113331bd4fe5849 +Block 0001 [ 76]: c087bac03cc593eb +Block 0001 [ 77]: 911541803860d5ad +Block 0001 [ 78]: 972796bde9d1c42e +Block 0001 [ 79]: c8cd6935d63f999a +Block 0001 [ 80]: 4eb3a3310ac0652b +Block 0001 [ 81]: 5faa0e3ba17495cc +Block 0001 [ 82]: 54538022fe6f9c31 +Block 0001 [ 83]: 85ad4868c2fdd47a +Block 0001 [ 84]: 2e7bd3ad0d2a35b0 +Block 0001 [ 85]: 35087db302505af5 +Block 0001 [ 86]: 7b06c9fb29e26df2 +Block 0001 [ 87]: 9df831ef57448e1c +Block 0001 [ 88]: 1d908722a58fa4c6 +Block 0001 [ 89]: 9cfe0815564ca490 +Block 0001 [ 90]: 1b3cdb61b5feaa18 +Block 0001 [ 91]: e37917c95e8105a1 +Block 0001 [ 92]: 5704635a0737b2be +Block 0001 [ 93]: 734708322a4f163f +Block 0001 [ 94]: 65c5c56111e21f7b +Block 0001 [ 95]: 48a7e79585c82ac8 +Block 0001 [ 96]: 90b83ac17e185667 +Block 0001 [ 97]: 1e2d69687bb0f277 +Block 0001 [ 98]: 551effebbb0677cf +Block 0001 [ 99]: 7c7e64cb0b4a9dfb +Block 0001 [100]: b6e6a9e294ae2aef +Block 0001 [101]: c772befaa7b7d5a2 +Block 0001 [102]: 705a0ae7722982bd +Block 0001 [103]: 487550a7ae562b33 +Block 0001 [104]: c978ab00275b329b +Block 0001 [105]: ef22ed8e7ca24204 +Block 0001 [106]: c80b4bc89eab8590 +Block 0001 [107]: f02f2945d3db6813 +Block 0001 [108]: 1258ee15004331a1 +Block 0001 [109]: 12a45ca546f3f203 +Block 0001 [110]: 7eb5ba10595ab1bd +Block 0001 [111]: 83c50861b087e83b +Block 0001 [112]: e5c3369514f76c3b +Block 0001 [113]: b6f0b3be44be16bb +Block 0001 [114]: d90429b12ea6a18e +Block 0001 [115]: ce343138c9908c54 +Block 0001 [116]: f5b8874f958cca3b +Block 0001 [117]: 0e90768218b2827f +Block 0001 [118]: d10d62333598e847 +Block 0001 [119]: b7adbe6b921354b9 +Block 0001 [120]: f867bae8bff66bc4 +Block 0001 [121]: ec4fc408964ee14a +Block 0001 [122]: db1e5b94bf1a6ba9 +Block 0001 [123]: 4427a9a3b206a22e +Block 0001 [124]: f680b8152ab38fe3 +Block 0001 [125]: 57e82afc40c6bdb3 +Block 0001 [126]: 62669624fa9f150e +Block 0001 [127]: 3e2b78aca9af3e85 +Block 0002 [ 0]: 86efaf80eac2ed5e +Block 0002 [ 1]: 6cbb794e606e30fa +Block 0002 [ 2]: 58ba8f651613a62f +Block 0002 [ 3]: 39e6c82450a725ef +Block 0002 [ 4]: f7c274a22d6358b2 +Block 0002 [ 5]: 540c17b677071a38 +Block 0002 [ 6]: d5e18b9c175e9391 +Block 0002 [ 7]: 84142a92ecfb7e48 +Block 0002 [ 8]: 98fb5a0b8f3b87d5 +Block 0002 [ 9]: 1bac756bfe70762c +Block 0002 [ 10]: 426e9fdea7694bd7 +Block 0002 [ 11]: 2b2bc7b298230b84 +Block 0002 [ 12]: 2ba0f4d8cd3744e7 +Block 0002 [ 13]: c16dc3f56fefbe36 +Block 0002 [ 14]: 9456970ece1ae4f5 +Block 0002 [ 15]: dc71b76d67640fbd +Block 0002 [ 16]: 6a51483c1bcbd225 +Block 0002 [ 17]: ca5a32517132a4a7 +Block 0002 [ 18]: ba7b715053f1efd6 +Block 0002 [ 19]: a8c07fef13c81b75 +Block 0002 [ 20]: d08df79370575fa9 +Block 0002 [ 21]: 461e63a5da271692 +Block 0002 [ 22]: d13f39e35427319e +Block 0002 [ 23]: 727864f49a85bc04 +Block 0002 [ 24]: 229ef524b7660d7b +Block 0002 [ 25]: f2f4edb42bf81a78 +Block 0002 [ 26]: 2752e760c33b9a2b +Block 0002 [ 27]: 8c9a11a95b09715c +Block 0002 [ 28]: d0e9e5f5f517a199 +Block 0002 [ 29]: 9dad9e62f67e8afc +Block 0002 [ 30]: b8e5565ca41ee587 +Block 0002 [ 31]: 4bd71f8bcb062846 +Block 0002 [ 32]: 5e8a7c70a0cf04be +Block 0002 [ 33]: c26facf6fc442e2e +Block 0002 [ 34]: 8242539af817aec3 +Block 0002 [ 35]: 5c756cf641282347 +Block 0002 [ 36]: 209cf98052588aba +Block 0002 [ 37]: b1d35f1ccd13c627 +Block 0002 [ 38]: 66071ccee68fe1ba +Block 0002 [ 39]: c3221a5092ac879b +Block 0002 [ 40]: 789f48d15ef8de9e +Block 0002 [ 41]: ee6b857cb4aa1847 +Block 0002 [ 42]: 15c376adfaa40762 +Block 0002 [ 43]: eb0f698827d47eb1 +Block 0002 [ 44]: a394d2ea11fc10c2 +Block 0002 [ 45]: d67cf8f561e9a481 +Block 0002 [ 46]: a7acf11f6419b8e2 +Block 0002 [ 47]: e2612a660bb29fd8 +Block 0002 [ 48]: cf40e044fd3406b9 +Block 0002 [ 49]: f181e86d1eb929e5 +Block 0002 [ 50]: b730f4a0313a0f9d +Block 0002 [ 51]: ad12579bcb46430f +Block 0002 [ 52]: 65cf23444e237272 +Block 0002 [ 53]: 0c1f74ebcc48766a +Block 0002 [ 54]: c481845a7c971d93 +Block 0002 [ 55]: 4681c7fad6c494db +Block 0002 [ 56]: b7c59834dcc299b6 +Block 0002 [ 57]: 00d2679dca310ece +Block 0002 [ 58]: 186b0718dcbce10b +Block 0002 [ 59]: cdac40832d0120df +Block 0002 [ 60]: 2f74751ad7d219d3 +Block 0002 [ 61]: 36e9506170140101 +Block 0002 [ 62]: 63a29d721621df3a +Block 0002 [ 63]: f2bbb30328991022 +Block 0002 [ 64]: cf784e1f178183cb +Block 0002 [ 65]: c551388392a229d4 +Block 0002 [ 66]: e43c737c16a2998c +Block 0002 [ 67]: edba1c64023e06a8 +Block 0002 [ 68]: d30148725b097c00 +Block 0002 [ 69]: 2f7aacc907a0a410 +Block 0002 [ 70]: 0529807f7bfc11fb +Block 0002 [ 71]: 9c1fdcd641d1a7da +Block 0002 [ 72]: 432594adb3c7420b +Block 0002 [ 73]: a672c3e18f45886e +Block 0002 [ 74]: 9fdf014ee62a9a15 +Block 0002 [ 75]: 1eb438533674ead2 +Block 0002 [ 76]: 1667a75fdd2f08a4 +Block 0002 [ 77]: 88ef55710e08a035 +Block 0002 [ 78]: 2ed94808e5cbbc40 +Block 0002 [ 79]: 9e6c492a9369ab82 +Block 0002 [ 80]: 241d77bfa45b6e7a +Block 0002 [ 81]: 72b39a71964e5854 +Block 0002 [ 82]: 84de18604265df39 +Block 0002 [ 83]: 7c3edb10801b0d48 +Block 0002 [ 84]: 42f315c78dd33bb2 +Block 0002 [ 85]: 02d84c0fcc17dcde +Block 0002 [ 86]: 4361ab015f3f710b +Block 0002 [ 87]: 3f61db1d858a6be6 +Block 0002 [ 88]: 4f9efe1458258efa +Block 0002 [ 89]: 9245fc3739c44c2f +Block 0002 [ 90]: 60ceab1c851628c0 +Block 0002 [ 91]: 5e15d09383818a4c +Block 0002 [ 92]: 679f64a7cca20698 +Block 0002 [ 93]: b69349974a5e49ed +Block 0002 [ 94]: ac12e9258f2d6e04 +Block 0002 [ 95]: 489d9fd811795ec7 +Block 0002 [ 96]: 2e8296f89c6838c7 +Block 0002 [ 97]: c11755f2925691a7 +Block 0002 [ 98]: 41dbe65271283b39 +Block 0002 [ 99]: 409c1cf3e5788ed3 +Block 0002 [100]: 3e54cdb0b3fce3c4 +Block 0002 [101]: 955c3fb2dcb5810a +Block 0002 [102]: 16ae1a9795a45a40 +Block 0002 [103]: 715877d9f3b5b47e +Block 0002 [104]: 8e738b5a56e7fbdb +Block 0002 [105]: 3d2921bb972e0556 +Block 0002 [106]: 0085d78ec42ba7ff +Block 0002 [107]: 07f45baf4bcef049 +Block 0002 [108]: 6d775cc56a00f99f +Block 0002 [109]: 39217ea705c54f90 +Block 0002 [110]: 3881e3250797c790 +Block 0002 [111]: b055d6d9879ab68e +Block 0002 [112]: d947b16d523ab838 +Block 0002 [113]: 46e931e12f2d9197 +Block 0002 [114]: 85593910a8e77820 +Block 0002 [115]: d437375c655d1e9b +Block 0002 [116]: 952ba7cb1d8f446e +Block 0002 [117]: f5db5b403f667c07 +Block 0002 [118]: a72ced86fedf6fbd +Block 0002 [119]: e40062d8c9b929b1 +Block 0002 [120]: 18ab405d561e23e6 +Block 0002 [121]: db3f1f52d33e8521 +Block 0002 [122]: 526fc65c3d4198ce +Block 0002 [123]: 1c02368aedb009a0 +Block 0002 [124]: f0193b1322fea1eb +Block 0002 [125]: 08160def3ed589ba +Block 0002 [126]: c3d02084ef29e3a8 +Block 0002 [127]: 9e3c26c84794b742 +Block 0003 [ 0]: 47e4b55ca3a68849 +Block 0003 [ 1]: ce3677e651b75c83 +Block 0003 [ 2]: 93052446e287428b +Block 0003 [ 3]: 0f05057bdc434eb2 +Block 0003 [ 4]: 36bf9cdd1805985d +Block 0003 [ 5]: b9d6973b140575af +Block 0003 [ 6]: 536655215a96fc07 +Block 0003 [ 7]: 9f2c073205f1eefb +Block 0003 [ 8]: 49035726d5561411 +Block 0003 [ 9]: b19c87fa5805385d +Block 0003 [ 10]: c2048432848d1599 +Block 0003 [ 11]: 452a4980262dde88 +Block 0003 [ 12]: 6c2ff858fdd69274 +Block 0003 [ 13]: a9edd1d47c90287a +Block 0003 [ 14]: e52a0eab7afc24ef +Block 0003 [ 15]: 25eee1c982f06bba +Block 0003 [ 16]: 90bd4e021a66270e +Block 0003 [ 17]: 327bfcebf1d1c9cf +Block 0003 [ 18]: a6f77c2fcb3b40ea +Block 0003 [ 19]: cbd7b68a0d625e45 +Block 0003 [ 20]: 6a4943f1ff2876c2 +Block 0003 [ 21]: 7633be8700da0f98 +Block 0003 [ 22]: e3ec9e32f16a2da8 +Block 0003 [ 23]: fc7d59dcf497c0f5 +Block 0003 [ 24]: 5edb6a169eafd532 +Block 0003 [ 25]: d0e3c0cc94079a25 +Block 0003 [ 26]: 6f0c0ea1da6b3d56 +Block 0003 [ 27]: 0410e06dffe05b11 +Block 0003 [ 28]: a3b230d46679e317 +Block 0003 [ 29]: 5b18d07ed650f566 +Block 0003 [ 30]: 3ad4a7d10e729f78 +Block 0003 [ 31]: 1c6faf65c5e7880d +Block 0003 [ 32]: 28b6cb21416f151a +Block 0003 [ 33]: 21f23de1fb58bc00 +Block 0003 [ 34]: dba935f0876504d0 +Block 0003 [ 35]: 1b422804c8124bdb +Block 0003 [ 36]: d459afe5f9cad581 +Block 0003 [ 37]: df451308c78343c9 +Block 0003 [ 38]: 67752625a5ef6a7b +Block 0003 [ 39]: dfa0c32b55c7990b +Block 0003 [ 40]: dfa65d3cb4eff6f4 +Block 0003 [ 41]: 9d44a5a4583abc39 +Block 0003 [ 42]: 81221f10ce31c4cf +Block 0003 [ 43]: 2c75eaf2aae12a92 +Block 0003 [ 44]: 5c73ea9099605ec4 +Block 0003 [ 45]: e38ce91cc6fb0c88 +Block 0003 [ 46]: 59607ea7ed2cf60c +Block 0003 [ 47]: dc478047f6b71620 +Block 0003 [ 48]: 5857e51b6d638f28 +Block 0003 [ 49]: 280fbc8107a5c239 +Block 0003 [ 50]: 32ba01e4cffbd141 +Block 0003 [ 51]: 2052dd85024e1869 +Block 0003 [ 52]: 812f491bd5de07bb +Block 0003 [ 53]: dc80c11853ab55ff +Block 0003 [ 54]: 0be2e2faca6cd724 +Block 0003 [ 55]: 3de4a64cad66aff2 +Block 0003 [ 56]: dd39f6170b7ebb97 +Block 0003 [ 57]: 5deefd62fa73991d +Block 0003 [ 58]: 4d81ea48d0879d8d +Block 0003 [ 59]: 5e287e11a01fa8cc +Block 0003 [ 60]: 1750e9cdaa57979d +Block 0003 [ 61]: d44bc2a6bb5e0c1d +Block 0003 [ 62]: 3eb6172aa93f7235 +Block 0003 [ 63]: 625851b0f51453cd +Block 0003 [ 64]: 787aa08312b800c2 +Block 0003 [ 65]: 926dd8711de0aa81 +Block 0003 [ 66]: f92c3b44a3930a99 +Block 0003 [ 67]: 202321fd495bc4dd +Block 0003 [ 68]: 8ba8059f755bc587 +Block 0003 [ 69]: 912c62454af1486b +Block 0003 [ 70]: abc58ea3d020e71c +Block 0003 [ 71]: 019f064393246e8e +Block 0003 [ 72]: 447d2b297c5c0a60 +Block 0003 [ 73]: 8b10703382e5d0c2 +Block 0003 [ 74]: 1d3bc2052bace4dd +Block 0003 [ 75]: d840e74802a71b30 +Block 0003 [ 76]: 9860620a312cd5e1 +Block 0003 [ 77]: e02377a18ac65e65 +Block 0003 [ 78]: 11871fd45a03d051 +Block 0003 [ 79]: feaa331ec85d2e65 +Block 0003 [ 80]: 54b602f1cec5a912 +Block 0003 [ 81]: d03a5a9d3de97d60 +Block 0003 [ 82]: bcb99e1b95b67044 +Block 0003 [ 83]: 35976d9cac311fc1 +Block 0003 [ 84]: a838d7c9595d830d +Block 0003 [ 85]: ca8276cafa72e5be +Block 0003 [ 86]: 76b9769123938b18 +Block 0003 [ 87]: 3bb48f4670306aa0 +Block 0003 [ 88]: fbd323102d37a4cc +Block 0003 [ 89]: 7a787b482ae5c679 +Block 0003 [ 90]: 41759fa5a6c77e1d +Block 0003 [ 91]: 5eba576416c98141 +Block 0003 [ 92]: 0a4420853cd2220b +Block 0003 [ 93]: 764c40c685f1ad35 +Block 0003 [ 94]: b9c859e929596367 +Block 0003 [ 95]: c49f156da3049e06 +Block 0003 [ 96]: 0601b22007d45a9d +Block 0003 [ 97]: 7342d9112bdf462f +Block 0003 [ 98]: 57a4ea145c8dfd59 +Block 0003 [ 99]: 6713f392d28f454b +Block 0003 [100]: 54769b84908fe40a +Block 0003 [101]: 18ee40ca2547674d +Block 0003 [102]: 2e9b828597481407 +Block 0003 [103]: 7fcc3d5791033ac8 +Block 0003 [104]: 74163ca2e9f91de5 +Block 0003 [105]: 916299261106d2ee +Block 0003 [106]: c5c5798b20f0f813 +Block 0003 [107]: b98bfea35c51037c +Block 0003 [108]: e8907314d75807c4 +Block 0003 [109]: fc5ab15c031499db +Block 0003 [110]: a1ffdca0b3446d30 +Block 0003 [111]: f084211b0c5e43b2 +Block 0003 [112]: 52e7554b5df72092 +Block 0003 [113]: e55a86c0b8f08a81 +Block 0003 [114]: 9f021f191a8bef77 +Block 0003 [115]: b45e6d2a520505ac +Block 0003 [116]: 9bf1e40036d9fbee +Block 0003 [117]: 8df547b45358d289 +Block 0003 [118]: 543f8dac24f4841a +Block 0003 [119]: 33e7a353ca697ef7 +Block 0003 [120]: e8f81c6070ff2b86 +Block 0003 [121]: 05a0a6c1a44952d8 +Block 0003 [122]: dc1f07f38de6e460 +Block 0003 [123]: 381b8afc1b6d7bf6 +Block 0003 [124]: 8f92a8605ccc67e7 +Block 0003 [125]: e2a38a24d6c52813 +Block 0003 [126]: 8f69eb2814952c79 +Block 0003 [127]: 62a72909082d270e +Block 0004 [ 0]: 871209abdcbd4665 +Block 0004 [ 1]: 6ab1ca5cd5ecef94 +Block 0004 [ 2]: 1fea45956063895b +Block 0004 [ 3]: ee58d6590d1676bb +Block 0004 [ 4]: 3dc00f189dc5c3fa +Block 0004 [ 5]: a5b8ce1a1f4e7020 +Block 0004 [ 6]: 7b1f6d1a4a686357 +Block 0004 [ 7]: 8b1edaacca4590b2 +Block 0004 [ 8]: 60fedc7502cc9fa5 +Block 0004 [ 9]: b68e2a1d1dd5dfd9 +Block 0004 [ 10]: ad3a8268c1e90b40 +Block 0004 [ 11]: 84b4724c4bd5fc51 +Block 0004 [ 12]: 968da98760d2c519 +Block 0004 [ 13]: 7e20bddeea2c88c5 +Block 0004 [ 14]: 35cf39e20d289cb8 +Block 0004 [ 15]: c17a80a2c0a9250d +Block 0004 [ 16]: 801d2fe51918e490 +Block 0004 [ 17]: 334599dfe6468fcb +Block 0004 [ 18]: 05e2044464c256dc +Block 0004 [ 19]: 506830970d8ae416 +Block 0004 [ 20]: 97acbf19c3efd58b +Block 0004 [ 21]: 2dbf1feb30fa28c8 +Block 0004 [ 22]: 7d79f356d1d44674 +Block 0004 [ 23]: 40812a1b85e1aae2 +Block 0004 [ 24]: e4a94f755dfb89de +Block 0004 [ 25]: a683e248949966dc +Block 0004 [ 26]: 33f3a86f657124ef +Block 0004 [ 27]: fabc367ac27942c3 +Block 0004 [ 28]: b99e431918cc7c59 +Block 0004 [ 29]: 6d033fc5e284994e +Block 0004 [ 30]: b07e2fa321621b2c +Block 0004 [ 31]: f7535b1505615d74 +Block 0004 [ 32]: 68bb97943fa339cf +Block 0004 [ 33]: 91672a586f73085e +Block 0004 [ 34]: 7c3b401568284ce5 +Block 0004 [ 35]: fbc4adc821140d2d +Block 0004 [ 36]: ca5599b6de915aca +Block 0004 [ 37]: b3b6a518685f440b +Block 0004 [ 38]: a03850795b7c782e +Block 0004 [ 39]: 75020b29baf49164 +Block 0004 [ 40]: 86f193633b5f37af +Block 0004 [ 41]: fe3460ff365fd099 +Block 0004 [ 42]: db4921a0057c5560 +Block 0004 [ 43]: a9cbc706024dfa2b +Block 0004 [ 44]: 31d16202356d73a3 +Block 0004 [ 45]: 30e16b62c4099af6 +Block 0004 [ 46]: a6c9b1183dcd19f7 +Block 0004 [ 47]: 4d9e959d8d6b3754 +Block 0004 [ 48]: 61b83b597030b1c8 +Block 0004 [ 49]: ae6fcee3be93f61e +Block 0004 [ 50]: 50fc16f00eba0f19 +Block 0004 [ 51]: 0a64962755c66c4f +Block 0004 [ 52]: 6ccf1966f53437c9 +Block 0004 [ 53]: 3f5226c05a50ca43 +Block 0004 [ 54]: acaa53ac8359b625 +Block 0004 [ 55]: 938f69e09741ac2c +Block 0004 [ 56]: 0f0ac9cc7eb41bb3 +Block 0004 [ 57]: b5969b3c1fe6b866 +Block 0004 [ 58]: 07ca5b9db7f95807 +Block 0004 [ 59]: b063da491eb1c31e +Block 0004 [ 60]: 65ff8c77bead17f7 +Block 0004 [ 61]: ed8040671c8d7f81 +Block 0004 [ 62]: 464389f4113f5e88 +Block 0004 [ 63]: 7c48c61726449223 +Block 0004 [ 64]: 9f7b6bf8527d1d1f +Block 0004 [ 65]: e709423c16c82110 +Block 0004 [ 66]: 337f9777fa88c26c +Block 0004 [ 67]: 02d89d338ed99ff6 +Block 0004 [ 68]: d35b61d714e2159c +Block 0004 [ 69]: ef0065d8a46d091d +Block 0004 [ 70]: 21bbb304a6c274ce +Block 0004 [ 71]: 9754ea69566260de +Block 0004 [ 72]: 15af436883827327 +Block 0004 [ 73]: 294ebef6568a9143 +Block 0004 [ 74]: 216c83e9fb7bfefc +Block 0004 [ 75]: 6ea0a345816ae474 +Block 0004 [ 76]: 0d877976466f0287 +Block 0004 [ 77]: 455498ff52f8a84a +Block 0004 [ 78]: 4a048b3ee88673e7 +Block 0004 [ 79]: 3660bd8483ac2d36 +Block 0004 [ 80]: 391af29c8b695622 +Block 0004 [ 81]: 4f62ea7ffbe0a95c +Block 0004 [ 82]: 9b2b3f4d04352770 +Block 0004 [ 83]: 44c1cff0e51499b3 +Block 0004 [ 84]: a1e531f8cf6edf18 +Block 0004 [ 85]: 39419f0074881536 +Block 0004 [ 86]: cef4024632610741 +Block 0004 [ 87]: 11049ca17737c32c +Block 0004 [ 88]: 0a10c0cd7a189f1b +Block 0004 [ 89]: 687c690e01cd83cd +Block 0004 [ 90]: f06a0133bfce8cdc +Block 0004 [ 91]: 66df6a2e23c8944b +Block 0004 [ 92]: fbcff4b3ed651268 +Block 0004 [ 93]: 8ad5f038e3123bb7 +Block 0004 [ 94]: 6bb487bb9c8d8cd0 +Block 0004 [ 95]: 93cf69fc27d4689a +Block 0004 [ 96]: 2afec0f26e5bf277 +Block 0004 [ 97]: 31134929d344d951 +Block 0004 [ 98]: ffd87f78eb17b89c +Block 0004 [ 99]: faa9ec74ce7f8e49 +Block 0004 [100]: b3259d1d6c5be3e2 +Block 0004 [101]: 45b02bd8b76389f9 +Block 0004 [102]: bec627f348f56a93 +Block 0004 [103]: cbcae4615e596978 +Block 0004 [104]: 80c9283195da7520 +Block 0004 [105]: e8e6d067602f52a8 +Block 0004 [106]: 48a563e2f8a17c40 +Block 0004 [107]: 2d7194ce9e175b97 +Block 0004 [108]: f3bada1842a83c8d +Block 0004 [109]: 10a24148069fb4d0 +Block 0004 [110]: 87b4ac62310e3055 +Block 0004 [111]: 70b8e8adc9d8d6a9 +Block 0004 [112]: 988c39066b575815 +Block 0004 [113]: adaea6def4975f21 +Block 0004 [114]: e09dcaf815dd8dac +Block 0004 [115]: 790523ec82c9ba99 +Block 0004 [116]: 4e4f599373a63715 +Block 0004 [117]: e5d6a1032a0bbfcd +Block 0004 [118]: a87032ec60719b7e +Block 0004 [119]: 5522154a317e43a4 +Block 0004 [120]: 8c2420ea268cf592 +Block 0004 [121]: 50ca5df1c96c8b97 +Block 0004 [122]: 9361eceab543a181 +Block 0004 [123]: bce9db3fb691ac63 +Block 0004 [124]: bbaebb394c9fe4af +Block 0004 [125]: ed63ee581ce22d7e +Block 0004 [126]: 94ae21616c5b3094 +Block 0004 [127]: d95da019e0999430 +Block 0005 [ 0]: 155ccff39341aa6f +Block 0005 [ 1]: 54a69c64dcb493ca +Block 0005 [ 2]: eef63d3a6926f8d9 +Block 0005 [ 3]: e9ca019f8c490de2 +Block 0005 [ 4]: ef5fe2e9fe1cfda3 +Block 0005 [ 5]: e06a975887aa3e04 +Block 0005 [ 6]: 7f838117d20e0aee +Block 0005 [ 7]: f06651485d09f94b +Block 0005 [ 8]: ad01c8ce33481657 +Block 0005 [ 9]: f148a24f675e9076 +Block 0005 [ 10]: bf2b9ec0049a032b +Block 0005 [ 11]: 79852b9bfb6698d7 +Block 0005 [ 12]: 6bd08e133c925b5d +Block 0005 [ 13]: 27447ed323030ef8 +Block 0005 [ 14]: 7895b4059a429434 +Block 0005 [ 15]: 017379983bc697eb +Block 0005 [ 16]: 28633004c9c92418 +Block 0005 [ 17]: 49fe67b1a66ba90e +Block 0005 [ 18]: 46420673b44352d3 +Block 0005 [ 19]: 174a91fd26893166 +Block 0005 [ 20]: 7ccbf4705560e6d8 +Block 0005 [ 21]: cca42142125d19e2 +Block 0005 [ 22]: 2be2e05c33484649 +Block 0005 [ 23]: 06b455f3384c102b +Block 0005 [ 24]: d91ee93c8e0a32c8 +Block 0005 [ 25]: b8b3676e186c199a +Block 0005 [ 26]: 5318de0cac98b443 +Block 0005 [ 27]: cf2f2eafd31ecb65 +Block 0005 [ 28]: aa2c13d8af3ac49c +Block 0005 [ 29]: f13e38159c731e1d +Block 0005 [ 30]: bfb273d30db0ea8b +Block 0005 [ 31]: e9ee2ed512ec4707 +Block 0005 [ 32]: 536e64c7cd9be92d +Block 0005 [ 33]: 32d61c4f2eb9be8b +Block 0005 [ 34]: d1c1f55c0da42e83 +Block 0005 [ 35]: 5fe40d60e4f9a806 +Block 0005 [ 36]: 1bd9c2a64123ffe8 +Block 0005 [ 37]: d8c68b4b6755892c +Block 0005 [ 38]: 224f6d01f3b8dc87 +Block 0005 [ 39]: 95987eb6fd5f46fa +Block 0005 [ 40]: 09fb258b50b2b264 +Block 0005 [ 41]: 34f3e6a34baf8636 +Block 0005 [ 42]: 5663b55c7b79c10e +Block 0005 [ 43]: 264e60d189cd2be0 +Block 0005 [ 44]: a1aad8cc73e60800 +Block 0005 [ 45]: 87343e7c26f33a7a +Block 0005 [ 46]: f4c06e87f63e3ae3 +Block 0005 [ 47]: ef2a9f44d99cdc77 +Block 0005 [ 48]: 0c37d5b69521bdd3 +Block 0005 [ 49]: bf1a13fedd395420 +Block 0005 [ 50]: 5b555201c45b3bde +Block 0005 [ 51]: d697bb37c4d40ad5 +Block 0005 [ 52]: e05a26e4b9f4ccc5 +Block 0005 [ 53]: 0ec56bfea415df1f +Block 0005 [ 54]: 7a75ac9069cd78ef +Block 0005 [ 55]: 246d2c2beaa6c1b0 +Block 0005 [ 56]: 6140b1bda15aab8f +Block 0005 [ 57]: 7b8ef6f99539bf8c +Block 0005 [ 58]: fb5e418d315c83b3 +Block 0005 [ 59]: d6fe3bddeee33757 +Block 0005 [ 60]: 325bc7c925602628 +Block 0005 [ 61]: 43516cffe54b3b0a +Block 0005 [ 62]: 384035fcf36ccb13 +Block 0005 [ 63]: 3c9539555b7f3987 +Block 0005 [ 64]: 22b1ac749010da2c +Block 0005 [ 65]: 031eaeb8a8f08b92 +Block 0005 [ 66]: 6a63b6c7815d478e +Block 0005 [ 67]: dd27ffc33860c497 +Block 0005 [ 68]: 99126b88405bf412 +Block 0005 [ 69]: abccb2bd8cf0704b +Block 0005 [ 70]: 2b1bfcd0f9d379b3 +Block 0005 [ 71]: 3551021bf0ad8ee0 +Block 0005 [ 72]: 3aa0cb329547f7db +Block 0005 [ 73]: c780c336227e34f2 +Block 0005 [ 74]: caf8eacb9a26c871 +Block 0005 [ 75]: b3134f664b9dd172 +Block 0005 [ 76]: 8b23138df8a9fd40 +Block 0005 [ 77]: da12b22060a68654 +Block 0005 [ 78]: 266cb3df2a3e1018 +Block 0005 [ 79]: 492187e0415be49e +Block 0005 [ 80]: 312347210bf47feb +Block 0005 [ 81]: affa92d1b4555ad1 +Block 0005 [ 82]: 70328f688d12367b +Block 0005 [ 83]: 58818080e3e91734 +Block 0005 [ 84]: e36e9321b2429731 +Block 0005 [ 85]: 86b75de040abcef0 +Block 0005 [ 86]: 3306f439957b9731 +Block 0005 [ 87]: 06e0997abfb5d79f +Block 0005 [ 88]: a77295a2f4538305 +Block 0005 [ 89]: 6c0a3e8b55c9e35b +Block 0005 [ 90]: 568bae7e7d1b9abd +Block 0005 [ 91]: 1d3b9385bd55d372 +Block 0005 [ 92]: 4f536880c060d963 +Block 0005 [ 93]: 606521fc00a08c7f +Block 0005 [ 94]: ca173b52b80a7952 +Block 0005 [ 95]: 01c0457196c7269b +Block 0005 [ 96]: ac7a2712fb33911f +Block 0005 [ 97]: 77feb9e9ccf48ecf +Block 0005 [ 98]: b1c088252562dee0 +Block 0005 [ 99]: 5523c9d087069aaf +Block 0005 [100]: e878930aefaddd43 +Block 0005 [101]: 7487a72baff492ef +Block 0005 [102]: 6891437d8a389bd5 +Block 0005 [103]: bfa3113471fd5d18 +Block 0005 [104]: 0d3ddbe17f9e084e +Block 0005 [105]: 2cc1c5a314f6e837 +Block 0005 [106]: 03e0d06131142837 +Block 0005 [107]: 28537aa176e020fc +Block 0005 [108]: e410025b3345934b +Block 0005 [109]: 62c4883861dfd8ae +Block 0005 [110]: 12b80d8ab0a37f1a +Block 0005 [111]: 82b705019cec0fb3 +Block 0005 [112]: ec1ca9634dbffe5b +Block 0005 [113]: 72feedad093bb4b0 +Block 0005 [114]: 6abee7fca315e0d4 +Block 0005 [115]: 5d75e6744aef9203 +Block 0005 [116]: 6be017c75c642aa1 +Block 0005 [117]: 7e172e238794d952 +Block 0005 [118]: 142a6d2f23e2eb72 +Block 0005 [119]: 6c39eb4627fdce76 +Block 0005 [120]: 0f61eb951bb9a8c7 +Block 0005 [121]: f51a98b0335ee217 +Block 0005 [122]: 89f7533015d3b6c5 +Block 0005 [123]: 7c5f4947988a52bc +Block 0005 [124]: 737c5304fdea7426 +Block 0005 [125]: 34f53ef7e17fc1f4 +Block 0005 [126]: 62c66398981ea1e2 +Block 0005 [127]: 39c9a16aee082d52 +Block 0006 [ 0]: c3bcb1abd61815c0 +Block 0006 [ 1]: 83b7950cbd0c5c0e +Block 0006 [ 2]: 3f4b1eb8ca73ddd7 +Block 0006 [ 3]: 4941802796861b2f +Block 0006 [ 4]: d2423564817e9c63 +Block 0006 [ 5]: 30d3554169a39bc3 +Block 0006 [ 6]: 79325b66f3c62418 +Block 0006 [ 7]: a292650ed9851d8b +Block 0006 [ 8]: 5966a6a6a6b98159 +Block 0006 [ 9]: d3d0f7de1865efe1 +Block 0006 [ 10]: f806353da999c88c +Block 0006 [ 11]: 2596be1606155ac3 +Block 0006 [ 12]: 44f7e2410fdade67 +Block 0006 [ 13]: 3ae822a453e5df49 +Block 0006 [ 14]: c709635132fb5232 +Block 0006 [ 15]: 22f02a7d54e8c5ac +Block 0006 [ 16]: cb9702971b3c0666 +Block 0006 [ 17]: 83997e32defcc4f6 +Block 0006 [ 18]: 512837aa821221ac +Block 0006 [ 19]: 9b6396869872661c +Block 0006 [ 20]: 2fe121552172eddd +Block 0006 [ 21]: 946a4d7435354818 +Block 0006 [ 22]: 87b54129576c4a9c +Block 0006 [ 23]: 28b86e840a4064d9 +Block 0006 [ 24]: f9f1822ce98f3ca0 +Block 0006 [ 25]: 344e3c556a58cc14 +Block 0006 [ 26]: 883035b52362e185 +Block 0006 [ 27]: f36ba02aa3454e68 +Block 0006 [ 28]: 048750f15e3ffd00 +Block 0006 [ 29]: 51caa2d99e8a24ab +Block 0006 [ 30]: 7811c3a5ede085db +Block 0006 [ 31]: 191cd21a6481418d +Block 0006 [ 32]: af23c99585efa784 +Block 0006 [ 33]: 009b765496773741 +Block 0006 [ 34]: 6b2f4fc088cd7915 +Block 0006 [ 35]: 2f47f7ffb875f613 +Block 0006 [ 36]: 4d4bc03237a6f45d +Block 0006 [ 37]: 05a194b584b3e4f3 +Block 0006 [ 38]: 876c8e1c406258a9 +Block 0006 [ 39]: 094c4a65daf31597 +Block 0006 [ 40]: 71979d2c94876815 +Block 0006 [ 41]: d95fbb18cdde807b +Block 0006 [ 42]: 56873c3c6a77ea27 +Block 0006 [ 43]: 0e8ee552d3dbb73c +Block 0006 [ 44]: 354914b53c56f3cf +Block 0006 [ 45]: 3af03f752ae6d89f +Block 0006 [ 46]: 9cf11128e09615c1 +Block 0006 [ 47]: 2b1793be04e3d175 +Block 0006 [ 48]: 152c18eb08686b4e +Block 0006 [ 49]: ea062b401a839631 +Block 0006 [ 50]: aee5f2f751f1c24a +Block 0006 [ 51]: 174e16304bc95ced +Block 0006 [ 52]: 31afd4326e143511 +Block 0006 [ 53]: 3e6bb44a56e9adff +Block 0006 [ 54]: a9ab2ae4f513489b +Block 0006 [ 55]: e8b59bb6b3ed5627 +Block 0006 [ 56]: 1a0098009a7d2d2f +Block 0006 [ 57]: f768c69efa1d67b4 +Block 0006 [ 58]: bf24fd4213be81d2 +Block 0006 [ 59]: 26707139bbe1b40d +Block 0006 [ 60]: b0664adea7357dd7 +Block 0006 [ 61]: 048453a9909258e6 +Block 0006 [ 62]: b69cdb041e2b2de0 +Block 0006 [ 63]: 5430e7650ccd9852 +Block 0006 [ 64]: 019f7e73ee6525ac +Block 0006 [ 65]: 1bb5a8b0938dd82c +Block 0006 [ 66]: 5091e79b43e23f21 +Block 0006 [ 67]: f2da3be4a013db03 +Block 0006 [ 68]: 98b2008447c0b8ac +Block 0006 [ 69]: 8846b0e94373ea1f +Block 0006 [ 70]: fbe04b9847c48704 +Block 0006 [ 71]: d1cf382289dc3c2f +Block 0006 [ 72]: 3a29efe90d33f696 +Block 0006 [ 73]: f22903e77daf981e +Block 0006 [ 74]: e6db7a462ee8c50b +Block 0006 [ 75]: c0509059ce0d3cff +Block 0006 [ 76]: 1f46c664bba8807d +Block 0006 [ 77]: 6379a85f3aa0f184 +Block 0006 [ 78]: cc4ba6f32664b4fc +Block 0006 [ 79]: 4c915b1a7bee1063 +Block 0006 [ 80]: b9212960b6c24468 +Block 0006 [ 81]: 79b4f92e0c689f7a +Block 0006 [ 82]: c0f3af7508f81d94 +Block 0006 [ 83]: 58d580eb8f6cab7e +Block 0006 [ 84]: bab9252d091f5a2a +Block 0006 [ 85]: de577666a2048bc7 +Block 0006 [ 86]: 33632662d8715400 +Block 0006 [ 87]: 6d0ea1c72b931660 +Block 0006 [ 88]: a3da78066b27764c +Block 0006 [ 89]: a278a6ddc80a80df +Block 0006 [ 90]: 3c2c1591ff0ff037 +Block 0006 [ 91]: a0e81559825b745b +Block 0006 [ 92]: 7a39c65250040b17 +Block 0006 [ 93]: effd385d0bbfbd5c +Block 0006 [ 94]: a690fb0e8ffc9158 +Block 0006 [ 95]: 142669d9ce44d588 +Block 0006 [ 96]: 90af245b7597b010 +Block 0006 [ 97]: 7f81e10489d3f752 +Block 0006 [ 98]: 98d6bf0d23b826f9 +Block 0006 [ 99]: ff2b06359fa73091 +Block 0006 [100]: b9891d8a4e86a7d1 +Block 0006 [101]: 2f76cd97393807b0 +Block 0006 [102]: a6e08dbea22fdbb4 +Block 0006 [103]: 5e438ed85d0c539a +Block 0006 [104]: adbe1afcb407cd9d +Block 0006 [105]: f8c35e7209ae8fc2 +Block 0006 [106]: f01786a381e5f75d +Block 0006 [107]: a0fd8d9144d2038e +Block 0006 [108]: 559367e9de9364f0 +Block 0006 [109]: 2ccf232c8f6ca882 +Block 0006 [110]: 0e1db01c3b4c62f0 +Block 0006 [111]: 8113e8478672ec59 +Block 0006 [112]: f1ea0ae15d78c389 +Block 0006 [113]: c33cf9e67f720c6d +Block 0006 [114]: 2824d46afa608c48 +Block 0006 [115]: e9ede0276710d159 +Block 0006 [116]: 93e0433df7fc77f6 +Block 0006 [117]: 7d69e3993c1460f3 +Block 0006 [118]: 72abf66864ec87a3 +Block 0006 [119]: 605deff9007bc0ce +Block 0006 [120]: 21b78f4f4ea41262 +Block 0006 [121]: 93e4596f4d325cd0 +Block 0006 [122]: 9b7dee7ba08c21f6 +Block 0006 [123]: eaf1b9c52f63d89a +Block 0006 [124]: 89c423612f0c9ffd +Block 0006 [125]: 9418a0e8c1e851a7 +Block 0006 [126]: 69955c65a7490b33 +Block 0006 [127]: 3173a0c424292d3d +Block 0007 [ 0]: 6ba8496b38841197 +Block 0007 [ 1]: ff6a2e6d337b1531 +Block 0007 [ 2]: fec2383a55d6d0d3 +Block 0007 [ 3]: 822585037db7b999 +Block 0007 [ 4]: 6834a1dab9935597 +Block 0007 [ 5]: 3313c569327449d3 +Block 0007 [ 6]: 53e24b910c22985b +Block 0007 [ 7]: 1e8b33d9e05abd81 +Block 0007 [ 8]: 6670313249886b9e +Block 0007 [ 9]: 207e04ab88f7cf12 +Block 0007 [ 10]: 8a6f5bd892a41752 +Block 0007 [ 11]: b84a87556a3e88e3 +Block 0007 [ 12]: 21b205650be73cf2 +Block 0007 [ 13]: 1eb1561c9672c294 +Block 0007 [ 14]: 3e9a33b36d56b481 +Block 0007 [ 15]: f6ca32e7178da473 +Block 0007 [ 16]: e1ac00984e2fdf66 +Block 0007 [ 17]: e1f213beb00420fe +Block 0007 [ 18]: 70c93c4772003b75 +Block 0007 [ 19]: 2178696de08e8af6 +Block 0007 [ 20]: 0bffb4fc05ac46e1 +Block 0007 [ 21]: 49d5777efd5c299c +Block 0007 [ 22]: 4acec3e85211a3d1 +Block 0007 [ 23]: de3d57be5a2f1031 +Block 0007 [ 24]: 85044f690b7477ce +Block 0007 [ 25]: cd0d85379c56058f +Block 0007 [ 26]: 1c71b6be61c6b3b7 +Block 0007 [ 27]: 31190408aac590f1 +Block 0007 [ 28]: ce49aa0929d8a6ea +Block 0007 [ 29]: d9e6a8f41ec97ed4 +Block 0007 [ 30]: e50cc28d487bcddf +Block 0007 [ 31]: 6e68852e0fb4ea28 +Block 0007 [ 32]: adb9ee01a0fffb02 +Block 0007 [ 33]: 51dba1925c8aa63f +Block 0007 [ 34]: 6e92ab6f38465397 +Block 0007 [ 35]: c2ec2bcdf128653b +Block 0007 [ 36]: b25694a246c4592f +Block 0007 [ 37]: 66410b37f06c626d +Block 0007 [ 38]: 2ccad97a38b8a60d +Block 0007 [ 39]: e80513476e773cb6 +Block 0007 [ 40]: a766c53f0ad112c9 +Block 0007 [ 41]: 4427c130a94fe37a +Block 0007 [ 42]: 2060b67375f3ad3d +Block 0007 [ 43]: 74a58556cc0e6489 +Block 0007 [ 44]: c58074434fddc554 +Block 0007 [ 45]: 858a27583a085017 +Block 0007 [ 46]: f88a99df8f73b570 +Block 0007 [ 47]: c21bb09e329ac925 +Block 0007 [ 48]: 29ea872c5e08034c +Block 0007 [ 49]: bbd71198f12c71df +Block 0007 [ 50]: f6404ea4ef1d6f2e +Block 0007 [ 51]: 145386a7ced124d6 +Block 0007 [ 52]: 69cbf3fc4068f8d6 +Block 0007 [ 53]: d7b7cc641a2170bb +Block 0007 [ 54]: b83c95965b03faed +Block 0007 [ 55]: a4157cf188bb4117 +Block 0007 [ 56]: 7172143717acef86 +Block 0007 [ 57]: cdb6489f49711464 +Block 0007 [ 58]: 1b21f5488c062af2 +Block 0007 [ 59]: 281e751e504dbf68 +Block 0007 [ 60]: 60d0f12dc5e74185 +Block 0007 [ 61]: b08294081e8249ef +Block 0007 [ 62]: 4e5b7b8e64f09128 +Block 0007 [ 63]: 66add7f61b5c0e95 +Block 0007 [ 64]: 675debc5d747afae +Block 0007 [ 65]: 794d5d3f683068a8 +Block 0007 [ 66]: 36e8710f090ebac1 +Block 0007 [ 67]: 13529fc886acb59c +Block 0007 [ 68]: 1d3c5a8f79042ef6 +Block 0007 [ 69]: 3b0927181306d5e0 +Block 0007 [ 70]: 4873c12d854f2927 +Block 0007 [ 71]: a8ef6fb5a498fefc +Block 0007 [ 72]: 8e55a9e91f278162 +Block 0007 [ 73]: f5629f3cd20af0c5 +Block 0007 [ 74]: ae75e9f6c80cf778 +Block 0007 [ 75]: 38fa5d2caefb359b +Block 0007 [ 76]: 1fcfb6d2bbf23517 +Block 0007 [ 77]: 372d4e12820e8f5e +Block 0007 [ 78]: ac9dd03841fc2c41 +Block 0007 [ 79]: 76b002cdba27d3e0 +Block 0007 [ 80]: 1bf59879b1e30e6e +Block 0007 [ 81]: 8a68990cf2a5a8f5 +Block 0007 [ 82]: 632afa5231f6d3d4 +Block 0007 [ 83]: bbf44429a770bb79 +Block 0007 [ 84]: 746687e36209f07b +Block 0007 [ 85]: fad5bc64f3274572 +Block 0007 [ 86]: a018eb23b8814708 +Block 0007 [ 87]: b41cb61d4ad7753e +Block 0007 [ 88]: 580314d1a213d60b +Block 0007 [ 89]: 4e427e87fdc6d92d +Block 0007 [ 90]: 1cb485f5924de8fd +Block 0007 [ 91]: 687fdb6bb6ac98a9 +Block 0007 [ 92]: 04e069dd82a73b0b +Block 0007 [ 93]: 8925a70571fb554e +Block 0007 [ 94]: 14860dde567eb785 +Block 0007 [ 95]: 2426e70c2283d948 +Block 0007 [ 96]: 505e230457a88d97 +Block 0007 [ 97]: 1078e11353e9cfad +Block 0007 [ 98]: 9c29e7f7217ca11c +Block 0007 [ 99]: 3d22a8e0d5b6c73b +Block 0007 [100]: 0e9a6cfffddba9ae +Block 0007 [101]: 038737d6db808e1e +Block 0007 [102]: 76106281d3f52bad +Block 0007 [103]: 433a57c1931117b4 +Block 0007 [104]: 3195542f3f970037 +Block 0007 [105]: f390555bc1c142e8 +Block 0007 [106]: 6e393054580d5c77 +Block 0007 [107]: b59995f826e3ea8a +Block 0007 [108]: 8b67b02c62482a00 +Block 0007 [109]: fc571f50017bf799 +Block 0007 [110]: be5aea8814966996 +Block 0007 [111]: 0806343d7b049900 +Block 0007 [112]: e185db328360b1f7 +Block 0007 [113]: f592ab2705a7630c +Block 0007 [114]: 19a218f17ffaf619 +Block 0007 [115]: 11243b99852c5781 +Block 0007 [116]: e491ffdd746b6f91 +Block 0007 [117]: 2bb1bbc794389f18 +Block 0007 [118]: 05545e1dfa2952e1 +Block 0007 [119]: fae4b68ab089c759 +Block 0007 [120]: 2406bc9a7d295f89 +Block 0007 [121]: 4d14821942c2c37a +Block 0007 [122]: 9455321b00e5824b +Block 0007 [123]: c12b3a7316ccd0ad +Block 0007 [124]: 962ae5fed17351e4 +Block 0007 [125]: b4e0b6e97f44972b +Block 0007 [126]: 4b452df74ac1020e +Block 0007 [127]: 7e0d387b75c20cf5 +Block 0008 [ 0]: 5259ca6d3a36b313 +Block 0008 [ 1]: 1d6d1ead6f5edbf9 +Block 0008 [ 2]: 3e626075da15b3c4 +Block 0008 [ 3]: 159304bf818a9646 +Block 0008 [ 4]: 40f28de5b742a00d +Block 0008 [ 5]: fd764500ccda300a +Block 0008 [ 6]: 93c1a2d82fcfe062 +Block 0008 [ 7]: 891b24e3f7120153 +Block 0008 [ 8]: 27f332ccb78f83d4 +Block 0008 [ 9]: d3df53656df5e84a +Block 0008 [ 10]: b3e520d550fa7e1c +Block 0008 [ 11]: b1018a57bdd1e9f3 +Block 0008 [ 12]: 61b86a7179c4f80d +Block 0008 [ 13]: 4a03abac5da9f1ca +Block 0008 [ 14]: 8fda17eda1a0a156 +Block 0008 [ 15]: 1addce7e73437ac2 +Block 0008 [ 16]: fea9bedf8bb82502 +Block 0008 [ 17]: 4c5840bef9c83e56 +Block 0008 [ 18]: a5b218fc4e41c532 +Block 0008 [ 19]: 5ec230403ad39835 +Block 0008 [ 20]: c7f49b16c6102a74 +Block 0008 [ 21]: 9b2602c9f497a960 +Block 0008 [ 22]: 9b2d5fe555b3465f +Block 0008 [ 23]: 47122c2f575c13c1 +Block 0008 [ 24]: 50a4d6db14d04ddc +Block 0008 [ 25]: 410dc8958a5e2e93 +Block 0008 [ 26]: 20f5192234fac4b5 +Block 0008 [ 27]: b4c41f2c0051c250 +Block 0008 [ 28]: 4ba7da28b90c27e0 +Block 0008 [ 29]: 6c6b3db5578529b8 +Block 0008 [ 30]: 1108be2d43f32bf7 +Block 0008 [ 31]: 6c77b6100babf0a2 +Block 0008 [ 32]: 830dba5dc317b352 +Block 0008 [ 33]: 03da88c747d12d8c +Block 0008 [ 34]: 34dd0664bda16e49 +Block 0008 [ 35]: b78e41567969e6d6 +Block 0008 [ 36]: 92ee7dcaf0366a9e +Block 0008 [ 37]: e61fe366d2213950 +Block 0008 [ 38]: e8ddfcdef2070068 +Block 0008 [ 39]: a525d18a51ef42bf +Block 0008 [ 40]: 2914e74d1937b200 +Block 0008 [ 41]: 828e147751e87a58 +Block 0008 [ 42]: 6678f5b97860ff7e +Block 0008 [ 43]: b92df23d8cd7cf61 +Block 0008 [ 44]: 6249bd3a4dc38950 +Block 0008 [ 45]: 9cf718b68e6260af +Block 0008 [ 46]: 355b1eb992fff80e +Block 0008 [ 47]: fa39bf26a986146e +Block 0008 [ 48]: 4d50d1700b363539 +Block 0008 [ 49]: b576745005e28e0c +Block 0008 [ 50]: 4103cf637375435b +Block 0008 [ 51]: d73e3ce76a4a54a0 +Block 0008 [ 52]: 3afb76f130d0b780 +Block 0008 [ 53]: c107de104e9f2dd5 +Block 0008 [ 54]: 73cb0720c2240f50 +Block 0008 [ 55]: 1bf896e70d6c2083 +Block 0008 [ 56]: a45e07f0cff18009 +Block 0008 [ 57]: 4d7612f5a121ea61 +Block 0008 [ 58]: 893f75beaddfc367 +Block 0008 [ 59]: e370e0dfde0d5d99 +Block 0008 [ 60]: 0c6c3872aa92803d +Block 0008 [ 61]: 29af23c163072580 +Block 0008 [ 62]: e1932b09eba1f3f9 +Block 0008 [ 63]: 85f51b011b100456 +Block 0008 [ 64]: 00a9e1bc03e8991f +Block 0008 [ 65]: d09e12552ef1c5d1 +Block 0008 [ 66]: cc824029d72b7bdc +Block 0008 [ 67]: 05a5cd6e9b167495 +Block 0008 [ 68]: 6d4dcb4d9f5445a8 +Block 0008 [ 69]: cc98c830e7008817 +Block 0008 [ 70]: 814a7125a194beca +Block 0008 [ 71]: 5808972b2747fe67 +Block 0008 [ 72]: 7a81cd0866c59672 +Block 0008 [ 73]: 9d9f58c494142020 +Block 0008 [ 74]: 9b4faa9e4ada6403 +Block 0008 [ 75]: bb43d73d368406b5 +Block 0008 [ 76]: a975c8724e5db21e +Block 0008 [ 77]: 3f7a667f5f787811 +Block 0008 [ 78]: e4a9d2d0fb77087f +Block 0008 [ 79]: 739edaaa0e25def1 +Block 0008 [ 80]: d582427ee94572e7 +Block 0008 [ 81]: 3c8c45c831998bd6 +Block 0008 [ 82]: 4c344b54c0ccaf0c +Block 0008 [ 83]: cf7dd330084c741a +Block 0008 [ 84]: 953fa1dcf74a93e5 +Block 0008 [ 85]: 8084832af5b9a52d +Block 0008 [ 86]: 55baac78297fc151 +Block 0008 [ 87]: fae1b46c08dbc171 +Block 0008 [ 88]: a3d0bdb749a194e0 +Block 0008 [ 89]: e87d1b2638d34859 +Block 0008 [ 90]: 2b9f364c44ab2eb9 +Block 0008 [ 91]: d8262a2360ce0759 +Block 0008 [ 92]: 346bb034f119271c +Block 0008 [ 93]: c94b9fb51412a621 +Block 0008 [ 94]: 4225b9cde4fc86ac +Block 0008 [ 95]: 4e8e3c64415b1ee4 +Block 0008 [ 96]: 60009e56552c6993 +Block 0008 [ 97]: d1abc108a143c4e2 +Block 0008 [ 98]: ce5bdcb7836aa2ca +Block 0008 [ 99]: 1a010f4ef1d0b16c +Block 0008 [100]: 7c3a56be69587764 +Block 0008 [101]: 7369edd379ab8b63 +Block 0008 [102]: eb059375e9d81e38 +Block 0008 [103]: ae49a0bebd2c2ac9 +Block 0008 [104]: 8add79962ff22ad5 +Block 0008 [105]: 2dfb46381509ec52 +Block 0008 [106]: 04de7d1dae36bc35 +Block 0008 [107]: 99e3ae5cacf38f66 +Block 0008 [108]: 5b4db397ff6f28f8 +Block 0008 [109]: 89abdd89178308c5 +Block 0008 [110]: e54007bba21fe65d +Block 0008 [111]: c0e9fdadf5e1e527 +Block 0008 [112]: 3d0f9bbae6d4610a +Block 0008 [113]: df4b0e09deee4fe4 +Block 0008 [114]: 08cf08a9a18f088a +Block 0008 [115]: 58c8f1ae000a0d79 +Block 0008 [116]: 7744856a25d26d97 +Block 0008 [117]: f246a2fab3db25d9 +Block 0008 [118]: 54cf019234a9b36e +Block 0008 [119]: c793d0b47c8dbd37 +Block 0008 [120]: e8c663169cb43d49 +Block 0008 [121]: 19b18b1eb53f8254 +Block 0008 [122]: 483a04f336087aca +Block 0008 [123]: 97493df4888c1ba2 +Block 0008 [124]: e446534935ffa48b +Block 0008 [125]: ad8fa4e6f8cb4598 +Block 0008 [126]: dff80c58fb8dcf69 +Block 0008 [127]: 9615048467e85223 +Block 0009 [ 0]: 8d963957a536997f +Block 0009 [ 1]: c4a6ad17a4903963 +Block 0009 [ 2]: 3ee60a10fade64bd +Block 0009 [ 3]: 918230770a0bda88 +Block 0009 [ 4]: 4dad1f4d8f17a928 +Block 0009 [ 5]: 870a1122e272b9c3 +Block 0009 [ 6]: 899e307819c85ebc +Block 0009 [ 7]: 5641cd3d43fdfaa0 +Block 0009 [ 8]: 69c1d89c1ba02780 +Block 0009 [ 9]: 128b497198c1865c +Block 0009 [ 10]: 4160861b315ab2ee +Block 0009 [ 11]: 784697c277a6072e +Block 0009 [ 12]: 5d62d29bec87100c +Block 0009 [ 13]: 2e6e695196fc9121 +Block 0009 [ 14]: 86a30cd6b0741842 +Block 0009 [ 15]: 1e18a364e5529621 +Block 0009 [ 16]: a311f98926327790 +Block 0009 [ 17]: e32d9b217b876772 +Block 0009 [ 18]: 4582229ca541e0a1 +Block 0009 [ 19]: 8ddbf5257cd31eeb +Block 0009 [ 20]: 42b4f8b1484aac1b +Block 0009 [ 21]: b6c08be2826d7c43 +Block 0009 [ 22]: 848ef012c2332b6c +Block 0009 [ 23]: 4858f635c0303546 +Block 0009 [ 24]: eaed088be0c2a16c +Block 0009 [ 25]: bb4c1b64e3521fc1 +Block 0009 [ 26]: 67cba8006304295c +Block 0009 [ 27]: 95ed7e2dc98c07de +Block 0009 [ 28]: 4f0b541907b7ab11 +Block 0009 [ 29]: 7aaf4aadb5919b8a +Block 0009 [ 30]: 65c3144eacb5e21c +Block 0009 [ 31]: b870063bb1c29683 +Block 0009 [ 32]: d1fccbcb6ac869a8 +Block 0009 [ 33]: e19c542080c1037a +Block 0009 [ 34]: b782df41419c71b7 +Block 0009 [ 35]: 4a15b9dcf0f2914a +Block 0009 [ 36]: 5da3c185b1920dbc +Block 0009 [ 37]: 1e4f4ca00f51a8da +Block 0009 [ 38]: 4540b427d7986a06 +Block 0009 [ 39]: fafd493c29276799 +Block 0009 [ 40]: 6ed26c50e7f2f666 +Block 0009 [ 41]: 65aff4e3d3229085 +Block 0009 [ 42]: c9e8ba24fd75136c +Block 0009 [ 43]: 663fa64fa9fe42f7 +Block 0009 [ 44]: c7544b471dae4d4d +Block 0009 [ 45]: 517114e5034b0c26 +Block 0009 [ 46]: f24e844f304a3465 +Block 0009 [ 47]: 6e5db83b787cb0f8 +Block 0009 [ 48]: 723ec7e828d038fc +Block 0009 [ 49]: 0db3e649393b0c13 +Block 0009 [ 50]: 970b65347ed76a0b +Block 0009 [ 51]: 67b8830d910eb7d8 +Block 0009 [ 52]: cf84ec1f4b8d86eb +Block 0009 [ 53]: be876b2a347b2cfa +Block 0009 [ 54]: 81bb175f13040617 +Block 0009 [ 55]: 29674b23bc32c06a +Block 0009 [ 56]: 034979be2e66bd20 +Block 0009 [ 57]: 16616446a32d1454 +Block 0009 [ 58]: 4c3b6001cf1aa63f +Block 0009 [ 59]: c16597bd1140e5f8 +Block 0009 [ 60]: 4915156867633734 +Block 0009 [ 61]: c58d3c905365d036 +Block 0009 [ 62]: a1a58f8411565ab5 +Block 0009 [ 63]: e0b468700d2b3969 +Block 0009 [ 64]: af4e54cfdabd7edb +Block 0009 [ 65]: 8b634eecb5a46d85 +Block 0009 [ 66]: 5c923be735f6b858 +Block 0009 [ 67]: c0f362cb40cfd94e +Block 0009 [ 68]: c67c2ba34bda20ec +Block 0009 [ 69]: a3413ddc6029885f +Block 0009 [ 70]: cc207f19ab7e5f18 +Block 0009 [ 71]: c73bfd337bf0f0b1 +Block 0009 [ 72]: ee284443d5ced8cf +Block 0009 [ 73]: 1b9232b01fad047e +Block 0009 [ 74]: 703688554bee2ae4 +Block 0009 [ 75]: f597ac898a79680c +Block 0009 [ 76]: 5325576a2e5adbaf +Block 0009 [ 77]: b2781327e24f8204 +Block 0009 [ 78]: c6840aa28b3e3b9a +Block 0009 [ 79]: b80c00e463ce419e +Block 0009 [ 80]: 08c14af5fd669746 +Block 0009 [ 81]: cbf2715a3e703b03 +Block 0009 [ 82]: 5c5252edfcefc3fe +Block 0009 [ 83]: c48bbd0ba30fd38c +Block 0009 [ 84]: 0355e5b24d75ccb0 +Block 0009 [ 85]: 95339e461d24b225 +Block 0009 [ 86]: b9d5a4b5eb19ce67 +Block 0009 [ 87]: 7781e7c609adb4ba +Block 0009 [ 88]: fdef794fbe63f3a6 +Block 0009 [ 89]: bb85bdfff07b8070 +Block 0009 [ 90]: c1564b6b30544c8b +Block 0009 [ 91]: ca50d06573e145b8 +Block 0009 [ 92]: c8b9a64f3c9dcdfe +Block 0009 [ 93]: 96384a8d0c02ed62 +Block 0009 [ 94]: a3e0251da1846848 +Block 0009 [ 95]: 9e46f28821fcd8a3 +Block 0009 [ 96]: d511566c1b2a611a +Block 0009 [ 97]: b3f0b3d1d6decdf6 +Block 0009 [ 98]: b356cc84ab1dd563 +Block 0009 [ 99]: 79385780cdc22aa6 +Block 0009 [100]: 8e54d0f99da0ba48 +Block 0009 [101]: eeb4bbc030ecb64f +Block 0009 [102]: aa65a55cb2217b98 +Block 0009 [103]: 74c0f4b18cb18580 +Block 0009 [104]: 8800a12932cafd8d +Block 0009 [105]: dc3f1cafe3ef4169 +Block 0009 [106]: e22f0b7715086a3a +Block 0009 [107]: 23e7ff371f808fab +Block 0009 [108]: 2722c0cd8303729a +Block 0009 [109]: 2e19a354daddf68e +Block 0009 [110]: bf066010ca4d2470 +Block 0009 [111]: 93bf7152d6c01024 +Block 0009 [112]: bf0e9c8587beeeea +Block 0009 [113]: bdcd171d0af4f8c8 +Block 0009 [114]: 50d615372d928f8a +Block 0009 [115]: e6e1a1f298ead702 +Block 0009 [116]: 688961c8eef31af0 +Block 0009 [117]: 6286463479291f80 +Block 0009 [118]: 2326971a8e438ca8 +Block 0009 [119]: cfabc762664132ba +Block 0009 [120]: 453e4d9874f8c7d2 +Block 0009 [121]: 252f5639b54d91c1 +Block 0009 [122]: bdfadba3e20d0814 +Block 0009 [123]: c7e2ea1a068ac5fc +Block 0009 [124]: 60b0c61c569a38a9 +Block 0009 [125]: 23697167f4e5bca5 +Block 0009 [126]: f0f6d6ba1b088fc4 +Block 0009 [127]: 45c7753fff713126 +Block 0010 [ 0]: a155295b01ac4d30 +Block 0010 [ 1]: 68ab16c5843df6cb +Block 0010 [ 2]: ed7098da0bd1ff3b +Block 0010 [ 3]: 0db2099cb481af2f +Block 0010 [ 4]: a52db650e07ce567 +Block 0010 [ 5]: 2750f845c384504b +Block 0010 [ 6]: 0a83bf1dae23e4c3 +Block 0010 [ 7]: de8d504a2708cdf3 +Block 0010 [ 8]: f93265ef617dff1d +Block 0010 [ 9]: aeeff126f1e4567c +Block 0010 [ 10]: be36af22f2341833 +Block 0010 [ 11]: e237aa380f006bde +Block 0010 [ 12]: 2841c97e30c36218 +Block 0010 [ 13]: 184af4aea8cd5e3d +Block 0010 [ 14]: 876a611ed9d49bdf +Block 0010 [ 15]: 88dcffa6fdff7e0f +Block 0010 [ 16]: e868b86f79e7c8e5 +Block 0010 [ 17]: fc48a515f1f1fc7a +Block 0010 [ 18]: 4de6909906d51551 +Block 0010 [ 19]: f405e8ed00ab8bcb +Block 0010 [ 20]: 303ec10c8f448bfc +Block 0010 [ 21]: 356c758cb6c5a6e1 +Block 0010 [ 22]: 81c1c60cbfe526f3 +Block 0010 [ 23]: 67769a6e5c0614a4 +Block 0010 [ 24]: 808c3f810c6ae10a +Block 0010 [ 25]: 1311e7194ea63ca3 +Block 0010 [ 26]: 51d884b09a5f06c9 +Block 0010 [ 27]: 31f59e84e05466e3 +Block 0010 [ 28]: bbec4b3666df4af1 +Block 0010 [ 29]: 7cf8ac6e32ec9c9b +Block 0010 [ 30]: 6df4b0777ac0d800 +Block 0010 [ 31]: c044519371be85bd +Block 0010 [ 32]: c904303d438b2327 +Block 0010 [ 33]: d37cc11f5a390efe +Block 0010 [ 34]: a442a081b209a435 +Block 0010 [ 35]: ea5fd8c62a00f630 +Block 0010 [ 36]: f29acbd22fe24aba +Block 0010 [ 37]: 58250563d6e9d821 +Block 0010 [ 38]: b6aa81f0386d4805 +Block 0010 [ 39]: 2959dfb28bbfdc1d +Block 0010 [ 40]: afb376911753d340 +Block 0010 [ 41]: ff93ed94cac1679a +Block 0010 [ 42]: 255a7e056235ca61 +Block 0010 [ 43]: c53082cfa7444f13 +Block 0010 [ 44]: 85c5e2c1da5750c9 +Block 0010 [ 45]: 3d830e2c63bb654c +Block 0010 [ 46]: 38d498ed77856052 +Block 0010 [ 47]: 9f5bfa824372f0b0 +Block 0010 [ 48]: fa2a179bd8996d69 +Block 0010 [ 49]: 40f27a5bd12cf513 +Block 0010 [ 50]: 0e2770ef9875c3fd +Block 0010 [ 51]: 0b0605ce69236666 +Block 0010 [ 52]: e300caa5339b66d9 +Block 0010 [ 53]: ea15eb73ed763d9f +Block 0010 [ 54]: aca1d069a5b673ed +Block 0010 [ 55]: eb1582e734dca43b +Block 0010 [ 56]: ae1f595784c7a0d1 +Block 0010 [ 57]: 11773c35e07ad36e +Block 0010 [ 58]: ade39ad32aa382df +Block 0010 [ 59]: a0cd5005220bf1d2 +Block 0010 [ 60]: 4cd54612e5ae3ab1 +Block 0010 [ 61]: 718c32e1f0f4d42d +Block 0010 [ 62]: ed1f4959e2732ab9 +Block 0010 [ 63]: 56a9fd7a2779ec0d +Block 0010 [ 64]: 6c26e13421fc4adf +Block 0010 [ 65]: 2aef67967429131f +Block 0010 [ 66]: 98a3c0c68368bd99 +Block 0010 [ 67]: a26987ead29cc55d +Block 0010 [ 68]: 52488b2265b5c01b +Block 0010 [ 69]: 151cf48de1fe8f67 +Block 0010 [ 70]: 8ca385421622de8f +Block 0010 [ 71]: 030a4ed9cdbac297 +Block 0010 [ 72]: 648302f6f37362dd +Block 0010 [ 73]: 100a968b3ee2cbf2 +Block 0010 [ 74]: eedf1aef6c2dd804 +Block 0010 [ 75]: 0d715cdd579b672a +Block 0010 [ 76]: 0a5ea66e059bae9e +Block 0010 [ 77]: ef9f5ac4fbc451da +Block 0010 [ 78]: 845ea8478e73a043 +Block 0010 [ 79]: a77ccaf8cdd52b7f +Block 0010 [ 80]: 91ea5e5d11aef2cf +Block 0010 [ 81]: ff048e6f903d4a54 +Block 0010 [ 82]: 822305d17b8f1f91 +Block 0010 [ 83]: d73824354065568c +Block 0010 [ 84]: 2b44d0d77e59f310 +Block 0010 [ 85]: ec92eab7de901b36 +Block 0010 [ 86]: 6e08016fa0d063c3 +Block 0010 [ 87]: 4bf9004837e9583b +Block 0010 [ 88]: 3e90cf88cd76ef51 +Block 0010 [ 89]: 922de6420db4e9ad +Block 0010 [ 90]: 061881dfad24119a +Block 0010 [ 91]: 8f6a872a98be535b +Block 0010 [ 92]: 22ae2709eec244b2 +Block 0010 [ 93]: f236154cda27421c +Block 0010 [ 94]: 518cd738e05da247 +Block 0010 [ 95]: fc03cebe3057d920 +Block 0010 [ 96]: bb23eb6eb9e60b8e +Block 0010 [ 97]: 6193477b593d97fe +Block 0010 [ 98]: 40f082b0b3d57018 +Block 0010 [ 99]: 096790e49d224334 +Block 0010 [100]: d2dafff37dbffd43 +Block 0010 [101]: 3574fcbfe52e8b8c +Block 0010 [102]: 6ec82c308a5e69c1 +Block 0010 [103]: 583434560a091635 +Block 0010 [104]: 06829557ec535cfb +Block 0010 [105]: f4043f12018d3761 +Block 0010 [106]: 8e388c730ec84362 +Block 0010 [107]: 2a6e35d51235dbb2 +Block 0010 [108]: 1b9442bc195397f4 +Block 0010 [109]: 0936c2e76ce5a0df +Block 0010 [110]: 8d684e8befbbd5c7 +Block 0010 [111]: 0a1240e8def43989 +Block 0010 [112]: bfb4b54653ff9af3 +Block 0010 [113]: 25ae9402aa130a0d +Block 0010 [114]: 7d276ec556940d88 +Block 0010 [115]: cda890baf010f915 +Block 0010 [116]: 56f9901e7075728b +Block 0010 [117]: 6b73d35e23ddba2c +Block 0010 [118]: a89df666576093f2 +Block 0010 [119]: 8f65a1ede29fbd78 +Block 0010 [120]: a68506cdaef8c905 +Block 0010 [121]: a1470990c4b30b1a +Block 0010 [122]: 0eb09895d515d9b1 +Block 0010 [123]: bf69f75cdd17fcfa +Block 0010 [124]: eb84a10c20614087 +Block 0010 [125]: 96379c54d0c2023b +Block 0010 [126]: a7477d567fd71950 +Block 0010 [127]: f037e9b031a97504 +Block 0011 [ 0]: 16d5da761e2acf6f +Block 0011 [ 1]: 6ad87f540d41f387 +Block 0011 [ 2]: 6f820405b2971af5 +Block 0011 [ 3]: 17b25af4c1c16f5e +Block 0011 [ 4]: 2ee33eb0bfaa58f9 +Block 0011 [ 5]: b7485047f793e807 +Block 0011 [ 6]: e52fab8ca2aaf375 +Block 0011 [ 7]: d6acc6a7c567b85c +Block 0011 [ 8]: b9ab663e0824a963 +Block 0011 [ 9]: 3ed7c09ce01c8ad6 +Block 0011 [ 10]: 837443ede4f8bed6 +Block 0011 [ 11]: 8353cf5e1459756d +Block 0011 [ 12]: 01c08edcae2527d6 +Block 0011 [ 13]: db388b3e6b962544 +Block 0011 [ 14]: c113c7ed15543703 +Block 0011 [ 15]: 0bc986fa7737339d +Block 0011 [ 16]: e17dd29e93c96a73 +Block 0011 [ 17]: 7d4e5d3027092ecb +Block 0011 [ 18]: 8c165d43a9b74c65 +Block 0011 [ 19]: 11d3bb05f3c2dca0 +Block 0011 [ 20]: 8b12c7a8b3767321 +Block 0011 [ 21]: 24cce4a0f3500b45 +Block 0011 [ 22]: 7d6eaa8f935fe7fd +Block 0011 [ 23]: 149d30539dfa5940 +Block 0011 [ 24]: 23d0f122c7c0cbcf +Block 0011 [ 25]: d899562ed181b04e +Block 0011 [ 26]: dbc100cb4edfc990 +Block 0011 [ 27]: 177854a7449272f6 +Block 0011 [ 28]: 44d3ff8214a0f0c3 +Block 0011 [ 29]: 233f4fab487f5942 +Block 0011 [ 30]: c94a38017b4d0e24 +Block 0011 [ 31]: 14907f985d2d0332 +Block 0011 [ 32]: 3521d2a02c50eada +Block 0011 [ 33]: 329f4202c68dc27a +Block 0011 [ 34]: 5648323f8456bd6c +Block 0011 [ 35]: 9381cfcfb0b9a3da +Block 0011 [ 36]: 7420d4017e432c52 +Block 0011 [ 37]: 74ea06fcaf152880 +Block 0011 [ 38]: 7b44ce911f823401 +Block 0011 [ 39]: b923ee926f87622c +Block 0011 [ 40]: 0283c7a1f167499b +Block 0011 [ 41]: e1737ba82a19c571 +Block 0011 [ 42]: f9b63927e53a45f6 +Block 0011 [ 43]: 9550a830500a3210 +Block 0011 [ 44]: 05c7a35d07ade74f +Block 0011 [ 45]: ed1a289ffb3f305e +Block 0011 [ 46]: 2c8d598ad77f601b +Block 0011 [ 47]: 25e4baff52399210 +Block 0011 [ 48]: e74b1e3b49e9a78b +Block 0011 [ 49]: 18b4b3f39c90f7c7 +Block 0011 [ 50]: 329822ea868b1fd7 +Block 0011 [ 51]: 6411cb3574b64ade +Block 0011 [ 52]: 947891798fd01f8d +Block 0011 [ 53]: 3dd08d795b8c02c2 +Block 0011 [ 54]: 478fd0d43a7fa288 +Block 0011 [ 55]: 88a9b9dc0ae9c7a9 +Block 0011 [ 56]: b9583b9e42ba1802 +Block 0011 [ 57]: e1e9bc1d711c8f22 +Block 0011 [ 58]: 15881e0659ceda04 +Block 0011 [ 59]: d1501a760d3d4a33 +Block 0011 [ 60]: 038c4699f07c1fc5 +Block 0011 [ 61]: 89a0f133277bf367 +Block 0011 [ 62]: 67129d0a742b771b +Block 0011 [ 63]: d55736ca7e7d5c13 +Block 0011 [ 64]: 66d17ba5ebb98138 +Block 0011 [ 65]: 905043e0102e5136 +Block 0011 [ 66]: 5ce42fae82caeeb5 +Block 0011 [ 67]: eee0b24c626ccfb2 +Block 0011 [ 68]: f13b34cfa160faa6 +Block 0011 [ 69]: d152913d8434e565 +Block 0011 [ 70]: 46f08fa361436ed8 +Block 0011 [ 71]: 476fe95a3eb25b18 +Block 0011 [ 72]: d0821f62c54f4b63 +Block 0011 [ 73]: af1912c68f81b8b5 +Block 0011 [ 74]: 7d0aed1b7cfe9215 +Block 0011 [ 75]: f7013ad16ab17ac1 +Block 0011 [ 76]: bdea73e717e5e9c7 +Block 0011 [ 77]: 36d8d670c31182db +Block 0011 [ 78]: 50f5bbe3f051fcd9 +Block 0011 [ 79]: 5d410ac5d4379955 +Block 0011 [ 80]: 4b9720ccfbe61a3d +Block 0011 [ 81]: 6c63bd26273ad3d8 +Block 0011 [ 82]: 9909be9a65ef8aae +Block 0011 [ 83]: 47d7660487d79065 +Block 0011 [ 84]: 9b65b7f5ca6f10f7 +Block 0011 [ 85]: 5c30891026346e3a +Block 0011 [ 86]: 0955df9ce73a911a +Block 0011 [ 87]: 235c4f3afaac52f4 +Block 0011 [ 88]: d3fa46a611e7ae27 +Block 0011 [ 89]: 89c0db05c5f3024f +Block 0011 [ 90]: dbcb01a6c0e4050b +Block 0011 [ 91]: abca89b857e99e18 +Block 0011 [ 92]: eb31d6fb723e632a +Block 0011 [ 93]: 031c7b76283804d5 +Block 0011 [ 94]: 30ccac15e32a08ed +Block 0011 [ 95]: 242f2b13e7fe0266 +Block 0011 [ 96]: 0b1b51fdcaab6bb8 +Block 0011 [ 97]: 9d336dfd23b236a3 +Block 0011 [ 98]: 4eeaf99bcf0c1173 +Block 0011 [ 99]: 9294e337605f02d2 +Block 0011 [100]: b7391a42963d8a3f +Block 0011 [101]: 8c7f9f625e1c4ffb +Block 0011 [102]: 7c202d63402ffb12 +Block 0011 [103]: 465d394021fba944 +Block 0011 [104]: b70e74918fcf4e79 +Block 0011 [105]: a02932280e957875 +Block 0011 [106]: b82709862601c6e7 +Block 0011 [107]: 4dcd278efa73b84f +Block 0011 [108]: c989a31b52fe9ea3 +Block 0011 [109]: 3e67e65ed7d255b1 +Block 0011 [110]: 5bd18bc29536ccc3 +Block 0011 [111]: b23efe04420321f9 +Block 0011 [112]: c57b1b093eabd7a7 +Block 0011 [113]: bdefbdc6c8803be8 +Block 0011 [114]: cae880e44d925961 +Block 0011 [115]: 7cf1bf54e78c13ba +Block 0011 [116]: aafa3cf4189ae522 +Block 0011 [117]: 41b52b96d7aa2e0c +Block 0011 [118]: 9f67eff23fffc6e1 +Block 0011 [119]: 9eef0c2059cc2b4e +Block 0011 [120]: d0014fdd3e2eaaa9 +Block 0011 [121]: d6dc04699625b658 +Block 0011 [122]: ee5b509a8fec397d +Block 0011 [123]: e99b5a5b20642de4 +Block 0011 [124]: 1853735329636fde +Block 0011 [125]: 6249b557a6fb93d9 +Block 0011 [126]: 2502ceca006bcbef +Block 0011 [127]: 691208dd510b74b4 +Block 0012 [ 0]: 479bed6dde74697b +Block 0012 [ 1]: c837d8d60d2214a3 +Block 0012 [ 2]: 2cce7a5664653b4e +Block 0012 [ 3]: d5f47908104f9dfe +Block 0012 [ 4]: 8f33f1a3401ce873 +Block 0012 [ 5]: 6318d20c310aa3f3 +Block 0012 [ 6]: 9a8c1067e646cf2f +Block 0012 [ 7]: da0411c4f0b9d646 +Block 0012 [ 8]: 4f1a128c6195af3e +Block 0012 [ 9]: f66c9e56cb5f4ff4 +Block 0012 [ 10]: bb192d9a6e711985 +Block 0012 [ 11]: 57136bae517fc91d +Block 0012 [ 12]: a4b51776c440f3ae +Block 0012 [ 13]: 9948574e322d3dd9 +Block 0012 [ 14]: 9ea814ec6cbb9955 +Block 0012 [ 15]: 55b4234e06276f01 +Block 0012 [ 16]: 384ba30dd3183608 +Block 0012 [ 17]: dcc76d5af8b9f6e1 +Block 0012 [ 18]: 80d439b91f04b10f +Block 0012 [ 19]: b72f956fb72c081b +Block 0012 [ 20]: 78cc14d32f4f1cdc +Block 0012 [ 21]: ad99b2f9a74185f2 +Block 0012 [ 22]: 987dc5012ae1a664 +Block 0012 [ 23]: ebc1098f16346958 +Block 0012 [ 24]: 7cf6fb6601ad0cff +Block 0012 [ 25]: d53828e896e30068 +Block 0012 [ 26]: 80f07625663e91e9 +Block 0012 [ 27]: da9aa3dcebf93e45 +Block 0012 [ 28]: 5f7d20f04cfa78c6 +Block 0012 [ 29]: f880f90b6a602855 +Block 0012 [ 30]: 5e52e35b8b9910c5 +Block 0012 [ 31]: 6edaa56bdea58a09 +Block 0012 [ 32]: bd3bf1ccf3b938b5 +Block 0012 [ 33]: a72a4a89ab2fdc74 +Block 0012 [ 34]: 080d919b24f87a04 +Block 0012 [ 35]: 27e7d16d439111d6 +Block 0012 [ 36]: aa9674480df2c6e0 +Block 0012 [ 37]: 2f69d96019e10cdd +Block 0012 [ 38]: 522951c9583f8368 +Block 0012 [ 39]: e443adf29afac5f2 +Block 0012 [ 40]: 748efa26a7b9f7b4 +Block 0012 [ 41]: c1d82ff00f41a415 +Block 0012 [ 42]: 93b12a65b481644c +Block 0012 [ 43]: 3a9361a1a24fb8fe +Block 0012 [ 44]: 9fa9db4674c4ae0b +Block 0012 [ 45]: 6c09c898703d18dd +Block 0012 [ 46]: a2364154f4aa1c76 +Block 0012 [ 47]: 0317e1ab68529d62 +Block 0012 [ 48]: 82a51ec093f4e4ac +Block 0012 [ 49]: 7e1b86bae00f0341 +Block 0012 [ 50]: 4d9e742cc0951668 +Block 0012 [ 51]: d1bd11f39b511da6 +Block 0012 [ 52]: eb509302c5ed1b65 +Block 0012 [ 53]: e3a4db785c5e6419 +Block 0012 [ 54]: 5b43dc7bce9ac02c +Block 0012 [ 55]: 8fb29954e608f2fd +Block 0012 [ 56]: 2cf4847ccfd29810 +Block 0012 [ 57]: 7054dfa1e24ea4a1 +Block 0012 [ 58]: 413d54995b4a3847 +Block 0012 [ 59]: 0ca94a54d1234516 +Block 0012 [ 60]: e3f21986e65a1276 +Block 0012 [ 61]: 9d30023f2b0de00d +Block 0012 [ 62]: c57c67ac34de2acb +Block 0012 [ 63]: cea1c131b2e6f6f1 +Block 0012 [ 64]: 44d107c62c763d74 +Block 0012 [ 65]: c4b1203184ceac4a +Block 0012 [ 66]: 7726c5e222f77f87 +Block 0012 [ 67]: 96b88e59365ac05c +Block 0012 [ 68]: 94b969b2c696dc77 +Block 0012 [ 69]: 37b575acdafcdcbc +Block 0012 [ 70]: cb8e3c2b408d264d +Block 0012 [ 71]: 36e779fd95a9693c +Block 0012 [ 72]: d7e90f25f0da03d4 +Block 0012 [ 73]: e4975c96652101fe +Block 0012 [ 74]: 249694d8ba8080c7 +Block 0012 [ 75]: 078fbed98e73cf86 +Block 0012 [ 76]: 3dfa5218e5f22b77 +Block 0012 [ 77]: 9b3a6a1272d472dc +Block 0012 [ 78]: e3c6ce5493d39837 +Block 0012 [ 79]: 53518b494be87ca8 +Block 0012 [ 80]: cb9b6888c60d8336 +Block 0012 [ 81]: c73e313c1f688a9e +Block 0012 [ 82]: b732289be782b0dc +Block 0012 [ 83]: a23853027cf2a452 +Block 0012 [ 84]: 6203d97675096015 +Block 0012 [ 85]: 8cd7d53aeb740717 +Block 0012 [ 86]: 57d24cb2a31b5720 +Block 0012 [ 87]: b1b20f5f0cdfbc58 +Block 0012 [ 88]: 5e7adb7681cffb5c +Block 0012 [ 89]: 2ecba812756d30ab +Block 0012 [ 90]: 3ee2f6f4691fc2ee +Block 0012 [ 91]: 7ad83ed55ea1e4de +Block 0012 [ 92]: 8145b77b8bb02543 +Block 0012 [ 93]: 12ba71f86b801c88 +Block 0012 [ 94]: d742db3bb16c11ef +Block 0012 [ 95]: b6f3487e39bbbfea +Block 0012 [ 96]: 3c807e44e0f76419 +Block 0012 [ 97]: 2b67cb709daaba44 +Block 0012 [ 98]: 854e279d27594d9d +Block 0012 [ 99]: c6c5fc086e450097 +Block 0012 [100]: 60c96c36a34f567e +Block 0012 [101]: 320b1a20620c6a52 +Block 0012 [102]: e261aef2b4735167 +Block 0012 [103]: 38c79e39edd260f8 +Block 0012 [104]: 80d057ab61c1c373 +Block 0012 [105]: 3d843068498eaa9d +Block 0012 [106]: f7200a89d0b53ec2 +Block 0012 [107]: 208a5da69d2804cd +Block 0012 [108]: cdc8eb2dd5303721 +Block 0012 [109]: d553e50ff2dc23ad +Block 0012 [110]: b8a284c5390a6677 +Block 0012 [111]: 2e8337fb6b5a8068 +Block 0012 [112]: 8aa4ee1b63809c68 +Block 0012 [113]: cb2d7ce6f22bfe1c +Block 0012 [114]: 45884652a6502a3d +Block 0012 [115]: b70308e7a301b39a +Block 0012 [116]: 5e0fbc5229a687fb +Block 0012 [117]: e6090e6b6d4afdce +Block 0012 [118]: 283f22d8fb804f61 +Block 0012 [119]: 0140e2e41a6c1064 +Block 0012 [120]: 3bc6a2c13687a35e +Block 0012 [121]: 709c8a7b7787060a +Block 0012 [122]: 395451d23660c97e +Block 0012 [123]: 9de1b10411494865 +Block 0012 [124]: c7901a854d4b2ac0 +Block 0012 [125]: 36c185f932b47622 +Block 0012 [126]: 8da1cc1943d6651d +Block 0012 [127]: 84a6607c1b0506c9 +Block 0013 [ 0]: 869de2c4be545941 +Block 0013 [ 1]: 4e3e2310099f6efc +Block 0013 [ 2]: 53cf9c3ba87811c0 +Block 0013 [ 3]: 45ba8f270479088c +Block 0013 [ 4]: cbc47bdb4bfb9512 +Block 0013 [ 5]: 705f37996c447d25 +Block 0013 [ 6]: 64f985dd3edfb36a +Block 0013 [ 7]: 30dc1cccd7a15a67 +Block 0013 [ 8]: 9d64ca45397a3987 +Block 0013 [ 9]: 643c9f78432b9e83 +Block 0013 [ 10]: 59bb13fda190b187 +Block 0013 [ 11]: 9c133bb3453ed3c4 +Block 0013 [ 12]: 632fc9efd5701891 +Block 0013 [ 13]: 12849ab202ce82fb +Block 0013 [ 14]: 1ef1705beb9facec +Block 0013 [ 15]: 18c2856c7f1ffd53 +Block 0013 [ 16]: ec08f1d3139e748f +Block 0013 [ 17]: 6a9555f38829e066 +Block 0013 [ 18]: a266ec1c4d6a0914 +Block 0013 [ 19]: 9da85111fa971270 +Block 0013 [ 20]: d2703c03675b4d56 +Block 0013 [ 21]: 052169e2a88da447 +Block 0013 [ 22]: 4df8ea75293ef8eb +Block 0013 [ 23]: 98a67dffd7bf1584 +Block 0013 [ 24]: 9e0ea048198f4e6b +Block 0013 [ 25]: c0ced52ac8776fc1 +Block 0013 [ 26]: 5dc759a20859e47f +Block 0013 [ 27]: 3eaa91ec50be0842 +Block 0013 [ 28]: e01f425fff0d5ccd +Block 0013 [ 29]: 5bc54a37268f877d +Block 0013 [ 30]: d70aaf26f46b54ca +Block 0013 [ 31]: 38cc404e371a5fa3 +Block 0013 [ 32]: 8caf2d6497da9dd7 +Block 0013 [ 33]: 0f59968a70e65c73 +Block 0013 [ 34]: 5df8b31703ac512a +Block 0013 [ 35]: 6a282d3ccc9974d9 +Block 0013 [ 36]: 7e1f19160264cc76 +Block 0013 [ 37]: 31384a7c8ddbe02c +Block 0013 [ 38]: cc2366252232f299 +Block 0013 [ 39]: 3edae45774890aca +Block 0013 [ 40]: 0d68e6d5ab8a3789 +Block 0013 [ 41]: 0a6311497373525e +Block 0013 [ 42]: 392f2b5968e6da1d +Block 0013 [ 43]: f51bfde00fd8ae12 +Block 0013 [ 44]: f745dd5d22f2389f +Block 0013 [ 45]: 8a29d9d8e38d6abd +Block 0013 [ 46]: 43dfa80fbaee264f +Block 0013 [ 47]: 41c8f46d33dbc1df +Block 0013 [ 48]: 38e4ffeac09c1559 +Block 0013 [ 49]: 35e68675c46dd316 +Block 0013 [ 50]: cf7dd905cbcdfc71 +Block 0013 [ 51]: 0ecb3be43721b94f +Block 0013 [ 52]: d2df07056860f6bf +Block 0013 [ 53]: 4375012359501fab +Block 0013 [ 54]: 5f0f024635f27998 +Block 0013 [ 55]: 605253df9c015df1 +Block 0013 [ 56]: 52ef0714a0978174 +Block 0013 [ 57]: 1e0cbe08d115392d +Block 0013 [ 58]: b0861399e44a6671 +Block 0013 [ 59]: 12f06ce67cb65a63 +Block 0013 [ 60]: 88e2b2f4d5aa270c +Block 0013 [ 61]: b416ae8495cdb1dd +Block 0013 [ 62]: 476eb9a14827f2d6 +Block 0013 [ 63]: 3fe106fdc31e49b7 +Block 0013 [ 64]: f65c055ed52486ec +Block 0013 [ 65]: 520ce94b1bdf56fc +Block 0013 [ 66]: cb665701c023670b +Block 0013 [ 67]: efffd466a44a6ecc +Block 0013 [ 68]: 5d4016d66b7428c0 +Block 0013 [ 69]: 21dc31325439d1f1 +Block 0013 [ 70]: 09269f65d8343f6c +Block 0013 [ 71]: b8911cbf45e6e91e +Block 0013 [ 72]: 57917b9b8f857336 +Block 0013 [ 73]: d5936dc55b3b8dfa +Block 0013 [ 74]: 6bbcfb958f006d1b +Block 0013 [ 75]: 3eee9ffc6db62eaa +Block 0013 [ 76]: 0c27000175b7c256 +Block 0013 [ 77]: 7b57e54e0f284814 +Block 0013 [ 78]: ce5c71ad657a0f9e +Block 0013 [ 79]: 113fd1f5a39d12ab +Block 0013 [ 80]: 5d310f2e39a4ebf9 +Block 0013 [ 81]: caef54f2ee5bc4af +Block 0013 [ 82]: 74d02a51575f9d89 +Block 0013 [ 83]: cbe8c9b293f234a3 +Block 0013 [ 84]: 97664e656bdf7a18 +Block 0013 [ 85]: 50cadc8443995bfe +Block 0013 [ 86]: c5bc3dbcd40bfb84 +Block 0013 [ 87]: 4f182b51402a7fdd +Block 0013 [ 88]: 82e5cb9b38d5147d +Block 0013 [ 89]: 9f96d4d29ad743bb +Block 0013 [ 90]: 9df98bdaf7111234 +Block 0013 [ 91]: fa101598dbefaff3 +Block 0013 [ 92]: 0a9112ed1833295d +Block 0013 [ 93]: 5a1819c534c75f6e +Block 0013 [ 94]: 863b85ee5f040587 +Block 0013 [ 95]: 536a68ab78ce76db +Block 0013 [ 96]: e63773caba37d0d7 +Block 0013 [ 97]: 3019b9bcbc3f7f0c +Block 0013 [ 98]: c1dfb09fe2d9ed0b +Block 0013 [ 99]: ebe8e7e4e4d0bf5c +Block 0013 [100]: 55af1a98cd9c8eaf +Block 0013 [101]: 5a491d1c5210d0b7 +Block 0013 [102]: 36b51725274f3586 +Block 0013 [103]: d479ff760a6da201 +Block 0013 [104]: 5502a0a5abd69dc5 +Block 0013 [105]: cc7e981900143bb3 +Block 0013 [106]: 08262d89452d89bb +Block 0013 [107]: 2ade91d1358ef400 +Block 0013 [108]: 45a1bf547d66f5ad +Block 0013 [109]: f8534c4b19fdec11 +Block 0013 [110]: c2dc68df97f00da1 +Block 0013 [111]: 9a67651f64fc054c +Block 0013 [112]: 51cbcbb7f2388fc1 +Block 0013 [113]: b22586297e8d659b +Block 0013 [114]: 111c205af275e222 +Block 0013 [115]: a1b63b89156d22d0 +Block 0013 [116]: f00bc4173610a284 +Block 0013 [117]: 807f16cfa68d7daf +Block 0013 [118]: 131e2a15d73586be +Block 0013 [119]: 99c188d88b8b19f8 +Block 0013 [120]: b191a1d6a7f7025f +Block 0013 [121]: f9901cf222b01b1b +Block 0013 [122]: 64bcf834a02188bc +Block 0013 [123]: 268289b3f602d318 +Block 0013 [124]: d77bc155075f3301 +Block 0013 [125]: 3db1c22c96a653fe +Block 0013 [126]: ae5bfce1a9f3044e +Block 0013 [127]: 78d5aaf71c2a77d7 +Block 0014 [ 0]: 00c86bd24802ea9d +Block 0014 [ 1]: 70eaa8e2d857454e +Block 0014 [ 2]: b8461f74bdaeebea +Block 0014 [ 3]: 5b0fbdada15fa94d +Block 0014 [ 4]: 4e1c6a1b0d24fb70 +Block 0014 [ 5]: 6356e350ec69a25a +Block 0014 [ 6]: 9082450c3aed4839 +Block 0014 [ 7]: 5ce7c454002a4f90 +Block 0014 [ 8]: 41761904fd5e0795 +Block 0014 [ 9]: a51251eab300a4fe +Block 0014 [ 10]: 993abaa3ca0ef769 +Block 0014 [ 11]: a06ff7ca3a082cc8 +Block 0014 [ 12]: 32e0401836b47569 +Block 0014 [ 13]: 2d275468ec43edc1 +Block 0014 [ 14]: add41de9575a0742 +Block 0014 [ 15]: 106c2c271f1d5489 +Block 0014 [ 16]: 0484e39a05e6a3d9 +Block 0014 [ 17]: d1f40dc02a507f75 +Block 0014 [ 18]: 50f7834440e25b0e +Block 0014 [ 19]: 2fc995af1911e6a6 +Block 0014 [ 20]: ced0b1d1001c1dc0 +Block 0014 [ 21]: 8ba00763ea1a115d +Block 0014 [ 22]: 7a434535db10fa25 +Block 0014 [ 23]: dc56a10a894c332d +Block 0014 [ 24]: 87491bfa1203b506 +Block 0014 [ 25]: 96e8a73d3e8e437a +Block 0014 [ 26]: 713d91ffc723b560 +Block 0014 [ 27]: ae4ccde8b1e2f38b +Block 0014 [ 28]: c5ccc7ae6f2be8f9 +Block 0014 [ 29]: 79fca3dfceb34b7e +Block 0014 [ 30]: 549551fa994d9055 +Block 0014 [ 31]: a2629606bfb6448c +Block 0014 [ 32]: f1676c661be1fbd7 +Block 0014 [ 33]: 38d4e94c23878d90 +Block 0014 [ 34]: 36d2170e5cdfdcc5 +Block 0014 [ 35]: 201d50c4600eafac +Block 0014 [ 36]: 4e8a7a0f4774f2e1 +Block 0014 [ 37]: 56f3c307d20765eb +Block 0014 [ 38]: dafb7f11ad7730a2 +Block 0014 [ 39]: be6722b2fadb6160 +Block 0014 [ 40]: c8d96d73c11db8ce +Block 0014 [ 41]: f6ecadc3bd4ecf5b +Block 0014 [ 42]: 7beedae27ab13341 +Block 0014 [ 43]: 56f3ede80c8750c8 +Block 0014 [ 44]: ad31b1489aca9fc5 +Block 0014 [ 45]: cede55663da2fc9e +Block 0014 [ 46]: 6dd2af6408693a2c +Block 0014 [ 47]: 04d961d026175067 +Block 0014 [ 48]: 7c6fd82af1d6e8cf +Block 0014 [ 49]: 95397dbf1f7a6c38 +Block 0014 [ 50]: bdae428ffc7de7e7 +Block 0014 [ 51]: 84b8ef4eeb1d144b +Block 0014 [ 52]: 71f06279ec183109 +Block 0014 [ 53]: 7e2d2144e3364773 +Block 0014 [ 54]: 0ea7b5505ec554d4 +Block 0014 [ 55]: e43d0b3a8714b1b0 +Block 0014 [ 56]: 9e34e938edc4832a +Block 0014 [ 57]: 623e7858c67c1456 +Block 0014 [ 58]: ce8cbfa434ed6ab3 +Block 0014 [ 59]: 1bff169a2dd33fd1 +Block 0014 [ 60]: 5114fd75790e1723 +Block 0014 [ 61]: 2866e974f1feed4c +Block 0014 [ 62]: a8e955affe2235a9 +Block 0014 [ 63]: 3b57591f37fd14cd +Block 0014 [ 64]: 7b218b6b041d1a0a +Block 0014 [ 65]: f0f792a5970adb06 +Block 0014 [ 66]: 96885001e6238bbb +Block 0014 [ 67]: 7307175080bda5d8 +Block 0014 [ 68]: 8dcec3b6bc0a928a +Block 0014 [ 69]: 8edf3697e22d9995 +Block 0014 [ 70]: 5a6069964e3ad92c +Block 0014 [ 71]: c3075b22691aee95 +Block 0014 [ 72]: d0cde2edb64c8ca8 +Block 0014 [ 73]: 60e9d510f0d624c2 +Block 0014 [ 74]: 9d7c5975380b0389 +Block 0014 [ 75]: 4e361fe607121311 +Block 0014 [ 76]: b934e471d7f25770 +Block 0014 [ 77]: 3cc1b0b276a87957 +Block 0014 [ 78]: 36c3c3ccafbd940c +Block 0014 [ 79]: cdbacd401c0d26ac +Block 0014 [ 80]: e8cf26f9266243bc +Block 0014 [ 81]: 3e494b39746897f8 +Block 0014 [ 82]: 76f70f73a95d5040 +Block 0014 [ 83]: 9fcf6d04848799fc +Block 0014 [ 84]: 420adba2d5a0ffd8 +Block 0014 [ 85]: 7d3179bf1094ac98 +Block 0014 [ 86]: bf1c368e3f8db189 +Block 0014 [ 87]: 555766187874c3ba +Block 0014 [ 88]: 947d88cf25d2e292 +Block 0014 [ 89]: b3ad799755e3bdf4 +Block 0014 [ 90]: 329adf355bdb795b +Block 0014 [ 91]: a20dabdff81c9d7f +Block 0014 [ 92]: 102479e949df8a5a +Block 0014 [ 93]: 6eaf90100f244259 +Block 0014 [ 94]: 847dabe1ca858f90 +Block 0014 [ 95]: a996b83fe8181714 +Block 0014 [ 96]: ba3d4069779e6e66 +Block 0014 [ 97]: 9419a60629bd868c +Block 0014 [ 98]: 86babe464aeb9d25 +Block 0014 [ 99]: 3a1d5a4844a955f3 +Block 0014 [100]: 5c8e5dc4986e5d34 +Block 0014 [101]: a146bff2dd80ffc0 +Block 0014 [102]: 14f526ae0bf9f335 +Block 0014 [103]: 7068780723340465 +Block 0014 [104]: 8f05ac83e14eea15 +Block 0014 [105]: 6e977e15d10e6f06 +Block 0014 [106]: aabe0b897bedbac4 +Block 0014 [107]: ac46c22beea3cd31 +Block 0014 [108]: c2d1847c1152e335 +Block 0014 [109]: bd1ca29ae5b34d5b +Block 0014 [110]: 496331e4757ab303 +Block 0014 [111]: 9c79b215bf4472af +Block 0014 [112]: 36c603bf5809aa33 +Block 0014 [113]: 3bada4e0890a89eb +Block 0014 [114]: de41b684fe909f5c +Block 0014 [115]: 77acbca5c6cf32cf +Block 0014 [116]: 0a537ea31cb3da7f +Block 0014 [117]: 1cdcec02169ec735 +Block 0014 [118]: 802d3fdb8d8849b4 +Block 0014 [119]: faee1668d1e776b8 +Block 0014 [120]: 57981790a57fac50 +Block 0014 [121]: e4791f7d957ccf0e +Block 0014 [122]: b7ee4984decb37ec +Block 0014 [123]: 95264b7a43318d79 +Block 0014 [124]: 52a8fdf5c03e06d0 +Block 0014 [125]: e569b4bf5c4574d2 +Block 0014 [126]: a36df387d9cc8f37 +Block 0014 [127]: 57068ca334d423d0 +Block 0015 [ 0]: d75972ef03571f4c +Block 0015 [ 1]: 5e5e8b05d98f3896 +Block 0015 [ 2]: b04e1c546ce6d8e3 +Block 0015 [ 3]: 53f2adda47a9cc25 +Block 0015 [ 4]: 3eac52ee5a2cb38e +Block 0015 [ 5]: 7b694a48e0d2819e +Block 0015 [ 6]: c241e4ea0bd4ebab +Block 0015 [ 7]: d0375209fb4ee4b3 +Block 0015 [ 8]: 34cfe8cb52316010 +Block 0015 [ 9]: 149b360c2e1998a4 +Block 0015 [ 10]: 79be196992f3e9cf +Block 0015 [ 11]: 58bf824ecf470a1b +Block 0015 [ 12]: 81889fe16317e424 +Block 0015 [ 13]: 204b5157bbbae499 +Block 0015 [ 14]: a816fa2fe32c2baf +Block 0015 [ 15]: d3e6f71c565b77c3 +Block 0015 [ 16]: 441439ca5abafa8d +Block 0015 [ 17]: 7c203cbd869c4977 +Block 0015 [ 18]: 8ffef24d751f61da +Block 0015 [ 19]: 8700964313db8a34 +Block 0015 [ 20]: 7eb15ce9dce6d5e6 +Block 0015 [ 21]: a8ea8be42ba1aedb +Block 0015 [ 22]: 68e0cdf37d17d392 +Block 0015 [ 23]: c29c6cc7611a110b +Block 0015 [ 24]: 953e2e65492a624d +Block 0015 [ 25]: 885259398da320e3 +Block 0015 [ 26]: 83e966e8a38610d4 +Block 0015 [ 27]: 83ea8061ea029504 +Block 0015 [ 28]: 34b9a1d0d654badb +Block 0015 [ 29]: 5577f100ceb1ab30 +Block 0015 [ 30]: a4415f554a54f985 +Block 0015 [ 31]: f41f0445612657d3 +Block 0015 [ 32]: 4e6632178ddeebc7 +Block 0015 [ 33]: 8ed0150b5f742a90 +Block 0015 [ 34]: a0e50dc6f98027d6 +Block 0015 [ 35]: 9c2e0784a086a19d +Block 0015 [ 36]: f1250326cfeecf5f +Block 0015 [ 37]: f26f569ac0c27156 +Block 0015 [ 38]: d8b7aa1999e7bcf2 +Block 0015 [ 39]: 21afc665eef7f8f6 +Block 0015 [ 40]: 79c5529b8dbbfdce +Block 0015 [ 41]: d694d8c3fb45b159 +Block 0015 [ 42]: c87437dd97abd34c +Block 0015 [ 43]: 22a0fe0c8b91c357 +Block 0015 [ 44]: cdfe2967d8eca54b +Block 0015 [ 45]: b6637f2c58b8962a +Block 0015 [ 46]: fffe389ff9e282f8 +Block 0015 [ 47]: 01037b1735f05742 +Block 0015 [ 48]: fc0c711b36244e13 +Block 0015 [ 49]: 5a5cadf6259259e4 +Block 0015 [ 50]: 5b25a4892c1bbf2a +Block 0015 [ 51]: 0970a7cddc1a7638 +Block 0015 [ 52]: f1836959c9326f9d +Block 0015 [ 53]: 3cfc6246151da4d1 +Block 0015 [ 54]: 8021e484b484b98e +Block 0015 [ 55]: 09452842146e5091 +Block 0015 [ 56]: 92df9ea332551b95 +Block 0015 [ 57]: 708084655fe8fbdf +Block 0015 [ 58]: c5514438a489ff6d +Block 0015 [ 59]: 633d707db2ca6b0f +Block 0015 [ 60]: 503042eb463ed026 +Block 0015 [ 61]: 9047897e1216e5c1 +Block 0015 [ 62]: c5decb95009acd93 +Block 0015 [ 63]: 86a70312b794373b +Block 0015 [ 64]: 40543a7d1ff593eb +Block 0015 [ 65]: cde3c0e472895075 +Block 0015 [ 66]: bb4f1933fd49e35a +Block 0015 [ 67]: 8b07d06d62e39575 +Block 0015 [ 68]: fc7bd9dbb50d5b5d +Block 0015 [ 69]: 5385e3f433ad4c7d +Block 0015 [ 70]: d9e08a5968386621 +Block 0015 [ 71]: 1a8034bdf1d062a7 +Block 0015 [ 72]: d71633748f0984a6 +Block 0015 [ 73]: 30db9941ccca4edf +Block 0015 [ 74]: 1a07d24906730427 +Block 0015 [ 75]: 3713bff74517517b +Block 0015 [ 76]: c9fee35405dadbc1 +Block 0015 [ 77]: 31c5bbd7159c97d2 +Block 0015 [ 78]: 6963f0bd077b6b28 +Block 0015 [ 79]: 6e348b2cdbb823a0 +Block 0015 [ 80]: 7b57b1ff3d8ff3a5 +Block 0015 [ 81]: 6e2b1699acf177ae +Block 0015 [ 82]: 8678cbbc62f66658 +Block 0015 [ 83]: 40600816986324ff +Block 0015 [ 84]: 7c8cb0e28a6f28ae +Block 0015 [ 85]: a8cff1d4f445c4ee +Block 0015 [ 86]: 341612ac59cc7847 +Block 0015 [ 87]: d1deacb53809d7fd +Block 0015 [ 88]: 9b50a6ee5d7d1948 +Block 0015 [ 89]: 9d15c478f7dcc4b9 +Block 0015 [ 90]: 59d7263057f177ea +Block 0015 [ 91]: 289f4fc690f576c2 +Block 0015 [ 92]: 902d29652c8d7a5f +Block 0015 [ 93]: ebb6de4f2680ad2e +Block 0015 [ 94]: aebe09766aae6aed +Block 0015 [ 95]: a010352a4a466549 +Block 0015 [ 96]: 6d01abc20434cf28 +Block 0015 [ 97]: ef5490c26c7160db +Block 0015 [ 98]: c8967bdad6fec7d4 +Block 0015 [ 99]: 1f3f3b7d011a59ac +Block 0015 [100]: 14649f16126e9144 +Block 0015 [101]: 7514a5b367741bd2 +Block 0015 [102]: f3048e4c58fa961d +Block 0015 [103]: b2029cf4babc2ece +Block 0015 [104]: 57d3d365f470df82 +Block 0015 [105]: f26caa1e504b2cee +Block 0015 [106]: 4e14ee1162f1aba0 +Block 0015 [107]: 8b404c1894a6cd7e +Block 0015 [108]: 7e59e9ad0315edb9 +Block 0015 [109]: 2982da0a40e3c999 +Block 0015 [110]: 5ee7b95068be9b9d +Block 0015 [111]: 2189fd2f1977ba4e +Block 0015 [112]: 9ce806b536243b71 +Block 0015 [113]: d9111bcc2d73ef11 +Block 0015 [114]: a1ec7c389432f66b +Block 0015 [115]: ebc58ec09735e09e +Block 0015 [116]: a6a66414ae766b22 +Block 0015 [117]: c0c662760fcb1852 +Block 0015 [118]: 04b77f032d2d29fb +Block 0015 [119]: 8dfac7b3bc22a617 +Block 0015 [120]: b0c1f84766e79592 +Block 0015 [121]: d97f09302ba87684 +Block 0015 [122]: 8961b89bb1dd5ada +Block 0015 [123]: 0d5c705785872c8c +Block 0015 [124]: ba3e87aaaa1a8399 +Block 0015 [125]: 6a2d50a64a414a9e +Block 0015 [126]: 3e921708eacebd87 +Block 0015 [127]: a57e9e6d210d9d86 +Block 0016 [ 0]: df185dd78c1f2b78 +Block 0016 [ 1]: 49f9a99335a422c3 +Block 0016 [ 2]: 02f5635e3b743a97 +Block 0016 [ 3]: 55f4724e5adf72c0 +Block 0016 [ 4]: e30716783fee2adb +Block 0016 [ 5]: 39dfe7810c7dd4e6 +Block 0016 [ 6]: 1dc5bb0e8e136978 +Block 0016 [ 7]: d13e3eaa24203ad3 +Block 0016 [ 8]: 4339943877cf7d96 +Block 0016 [ 9]: b918c90f4188fa29 +Block 0016 [ 10]: 907d0ff73d281017 +Block 0016 [ 11]: 425fce389b70a999 +Block 0016 [ 12]: c3baf4d09f9ec2ad +Block 0016 [ 13]: 69d75dbceb4b915d +Block 0016 [ 14]: a29ffd628df96321 +Block 0016 [ 15]: cf88189cf78fdfb6 +Block 0016 [ 16]: ef07b5d1da111948 +Block 0016 [ 17]: 4a3a74f1376d0d9e +Block 0016 [ 18]: 1b01accbc747837f +Block 0016 [ 19]: b48871a477381e4b +Block 0016 [ 20]: c7b3494dcf85abbd +Block 0016 [ 21]: 8aee4be839ba50cb +Block 0016 [ 22]: e6a4fc4ea169d857 +Block 0016 [ 23]: edfb8357401cb614 +Block 0016 [ 24]: f9dc1ba46003757c +Block 0016 [ 25]: ec9c465391eaeea3 +Block 0016 [ 26]: 1e1402a3ab178ad0 +Block 0016 [ 27]: 5a5810524c1f782b +Block 0016 [ 28]: 475df04282096019 +Block 0016 [ 29]: be53861dcdf717aa +Block 0016 [ 30]: 517ee91e28c1e49b +Block 0016 [ 31]: 4f6e9f32312fe2b8 +Block 0016 [ 32]: 374a8ff4124c3ba5 +Block 0016 [ 33]: 0a9add0bf6378093 +Block 0016 [ 34]: a17a2a5d0e3ff0d0 +Block 0016 [ 35]: 833253687ab236c9 +Block 0016 [ 36]: 10f5c2b5789316ca +Block 0016 [ 37]: c4055ea79dc80e81 +Block 0016 [ 38]: 333e55f91ae29671 +Block 0016 [ 39]: 150e8674d536a0a0 +Block 0016 [ 40]: 28c66be816ffcaa1 +Block 0016 [ 41]: 592a94f3b1459cab +Block 0016 [ 42]: eea6ec4cba337888 +Block 0016 [ 43]: 8600219ec14cde04 +Block 0016 [ 44]: 3a9b5cdd3568b325 +Block 0016 [ 45]: aad6128a2a76c958 +Block 0016 [ 46]: bfb8cade0905c962 +Block 0016 [ 47]: dda1376b4299b18a +Block 0016 [ 48]: bd0078b78f05094a +Block 0016 [ 49]: ab94838730040fb3 +Block 0016 [ 50]: 8891b571e9e2336e +Block 0016 [ 51]: 5c18d22f60a1a657 +Block 0016 [ 52]: b4615a5fb8572c23 +Block 0016 [ 53]: d3cbac3c3adecd23 +Block 0016 [ 54]: 71cf3196d24159dd +Block 0016 [ 55]: e5b0c73bdb337098 +Block 0016 [ 56]: 8849fdd41969d56e +Block 0016 [ 57]: c24297d105b05808 +Block 0016 [ 58]: 3d206c5fe6f6289d +Block 0016 [ 59]: a9a8333d832b2199 +Block 0016 [ 60]: e66ec8f0873f231b +Block 0016 [ 61]: ca9905c770bfe992 +Block 0016 [ 62]: f63c14054d5124e9 +Block 0016 [ 63]: d58d91fd3ee2b1a1 +Block 0016 [ 64]: 6ff32629231dc72b +Block 0016 [ 65]: 255d68cb56d3fa47 +Block 0016 [ 66]: 6b0af8028d7ca3a3 +Block 0016 [ 67]: 736d0fe6f9f80d52 +Block 0016 [ 68]: 90d1bde757cd5e96 +Block 0016 [ 69]: 07db8b6e1b4d5c34 +Block 0016 [ 70]: 791b2ff7ef295bd7 +Block 0016 [ 71]: fae425b3e1da0fd8 +Block 0016 [ 72]: 9f19178f83fe4783 +Block 0016 [ 73]: 1167f6d05e9820f4 +Block 0016 [ 74]: 7df7b36d7debf250 +Block 0016 [ 75]: 82113bee719dd1b5 +Block 0016 [ 76]: 5e798b4976c90140 +Block 0016 [ 77]: 3290bcc2692f2fc9 +Block 0016 [ 78]: 79ca6777cbe0ae0a +Block 0016 [ 79]: 32a54689489dc4ea +Block 0016 [ 80]: ea95bbfbeec60577 +Block 0016 [ 81]: ef12d7710711faae +Block 0016 [ 82]: 7866976349319235 +Block 0016 [ 83]: b321f8967d8fe701 +Block 0016 [ 84]: 0edcf290c5c241b3 +Block 0016 [ 85]: 92cfa62cadaef334 +Block 0016 [ 86]: c0c4c0077068d155 +Block 0016 [ 87]: ee895ccf8a30ce54 +Block 0016 [ 88]: f71204e73361a729 +Block 0016 [ 89]: 157afabb278e2f75 +Block 0016 [ 90]: f44173218e7734b5 +Block 0016 [ 91]: 8ce162e3111fe98d +Block 0016 [ 92]: 3f5f5a4acbc10d7e +Block 0016 [ 93]: 8fec68852d8995ab +Block 0016 [ 94]: ff2eed0c3d136a66 +Block 0016 [ 95]: 431218a26b23c2cf +Block 0016 [ 96]: 01264b38f47d5244 +Block 0016 [ 97]: 92bc9bd098e8c02a +Block 0016 [ 98]: bb4d45a1401c21f3 +Block 0016 [ 99]: c98791ab390af0a3 +Block 0016 [100]: 8fe6c5109d119811 +Block 0016 [101]: c00cf15abf0089cb +Block 0016 [102]: 57038fc4a333e7b5 +Block 0016 [103]: 82b257d90a52da30 +Block 0016 [104]: b9cc96cce73c1c99 +Block 0016 [105]: dacefe330d03e9e2 +Block 0016 [106]: e811034d6fe46bb0 +Block 0016 [107]: 96cb3e04aa68af22 +Block 0016 [108]: d6c949273c0f6012 +Block 0016 [109]: edb20985c7cc041b +Block 0016 [110]: 8569c84b201e2722 +Block 0016 [111]: 37b8fbe2e91d4cce +Block 0016 [112]: 4f25db3dad602ad2 +Block 0016 [113]: ad25504f1f0029f8 +Block 0016 [114]: 55d05138e5fc67ea +Block 0016 [115]: 8abba493f0b14307 +Block 0016 [116]: dbda5a77b570203c +Block 0016 [117]: 6c0e73d8df2a5cbf +Block 0016 [118]: ab1675a4c073aa1b +Block 0016 [119]: c28837a4d5785148 +Block 0016 [120]: 6be217b67e87d0cd +Block 0016 [121]: 96b6f0aada351d55 +Block 0016 [122]: d7b08772796b0ca3 +Block 0016 [123]: b0b5beb384738224 +Block 0016 [124]: 2766dfdc8eebb835 +Block 0016 [125]: 6fbe781c87b91676 +Block 0016 [126]: ef9dae4fda31bf35 +Block 0016 [127]: 41ce4b9bfdcd494c +Block 0017 [ 0]: c255f12517b5f528 +Block 0017 [ 1]: 1a7c91d6a62de6c6 +Block 0017 [ 2]: 6042723b63c8b725 +Block 0017 [ 3]: edc1e525aace3c4d +Block 0017 [ 4]: 9083bb02e70719bf +Block 0017 [ 5]: dff2e711c263aad0 +Block 0017 [ 6]: 643e8a1676401ac9 +Block 0017 [ 7]: 67ee406626e2af5b +Block 0017 [ 8]: 2ca94c000c31762e +Block 0017 [ 9]: e3975e35e2eb5398 +Block 0017 [ 10]: 2088403155c03d95 +Block 0017 [ 11]: 1146ad509ae7d17e +Block 0017 [ 12]: ebf6b18eb6274f96 +Block 0017 [ 13]: 74c2258314569745 +Block 0017 [ 14]: d1a25a287f9acbc0 +Block 0017 [ 15]: 306846f42d1db68f +Block 0017 [ 16]: 4d07dc025ac6f493 +Block 0017 [ 17]: d014df675b0095b9 +Block 0017 [ 18]: 0cac62bf06a23332 +Block 0017 [ 19]: 6c579b8f790fc721 +Block 0017 [ 20]: 5aff18b8d7750ee6 +Block 0017 [ 21]: 5c41322f23c3d21b +Block 0017 [ 22]: cd64bb030c6d4c14 +Block 0017 [ 23]: d6abf4f11955fba4 +Block 0017 [ 24]: f08e1d8bb5aa745e +Block 0017 [ 25]: 51f0dd60784369cf +Block 0017 [ 26]: d3eea3880a74e837 +Block 0017 [ 27]: 027fb4558c227054 +Block 0017 [ 28]: 69705de9eb976c9e +Block 0017 [ 29]: 029ed81f3b8083fe +Block 0017 [ 30]: 6174a0327bbb3513 +Block 0017 [ 31]: f0865510be03373f +Block 0017 [ 32]: c06d8ae72cb28b64 +Block 0017 [ 33]: 619282b2915316e8 +Block 0017 [ 34]: 9544171bca5aba07 +Block 0017 [ 35]: 2bb07513d70af873 +Block 0017 [ 36]: 4a0649f9bcd697c1 +Block 0017 [ 37]: 569952b056a02d6a +Block 0017 [ 38]: ecc1a448e97ec334 +Block 0017 [ 39]: 3a3f886128900cb6 +Block 0017 [ 40]: 59ab40a31e998543 +Block 0017 [ 41]: 464c956704a1522f +Block 0017 [ 42]: 0a88e34421502b80 +Block 0017 [ 43]: 11f29238c24ca7ae +Block 0017 [ 44]: 4c4ed3acdc97d6c7 +Block 0017 [ 45]: b3dd9cbf8e290895 +Block 0017 [ 46]: 58597d61f7166115 +Block 0017 [ 47]: 0a3668475c207ac0 +Block 0017 [ 48]: 16bf61e088c6a552 +Block 0017 [ 49]: fb03ea187661dbbb +Block 0017 [ 50]: 936a42f8220b9daf +Block 0017 [ 51]: 8e534cb1de16ae4a +Block 0017 [ 52]: 10ce6cb9da19db43 +Block 0017 [ 53]: 440a033c0cbcfb97 +Block 0017 [ 54]: 8e1d18c6fe8879b2 +Block 0017 [ 55]: 9f8c3b96301f169d +Block 0017 [ 56]: 7aad3cbcacc015db +Block 0017 [ 57]: 7129d8ac7b3ac45b +Block 0017 [ 58]: 6459133e511c248d +Block 0017 [ 59]: afcaf25b44ac2cc0 +Block 0017 [ 60]: 5e50b5ab3bf43e66 +Block 0017 [ 61]: 6ead49151f1d1b6f +Block 0017 [ 62]: 84105ac703c1d668 +Block 0017 [ 63]: fe6ea623494ad5df +Block 0017 [ 64]: c0f2820a0784bcea +Block 0017 [ 65]: 6192b3775d188c4e +Block 0017 [ 66]: b80f2e5d98cb4314 +Block 0017 [ 67]: 62e6d5758eef3792 +Block 0017 [ 68]: 51e207f92257bdf8 +Block 0017 [ 69]: 871b10b5dcbd15fb +Block 0017 [ 70]: c293d554a47db14a +Block 0017 [ 71]: b01ccdc84de5763a +Block 0017 [ 72]: 5b7beabd11951254 +Block 0017 [ 73]: 3059926a0f099e08 +Block 0017 [ 74]: 9caf0ff4887cc6c1 +Block 0017 [ 75]: 3bc6b264d764258e +Block 0017 [ 76]: 790512ed0dd294c9 +Block 0017 [ 77]: 72ef920edb63ec2c +Block 0017 [ 78]: 394da25fd4f9e123 +Block 0017 [ 79]: aa54ec6877648eb7 +Block 0017 [ 80]: 44e1b077b8a7565b +Block 0017 [ 81]: 45857d0b5ad9479a +Block 0017 [ 82]: f062f65b5d503323 +Block 0017 [ 83]: a168acb912f125be +Block 0017 [ 84]: 15630c565fab9475 +Block 0017 [ 85]: 11455ef696ae101e +Block 0017 [ 86]: 86763895b6fe2b49 +Block 0017 [ 87]: 654cead6b7d65bba +Block 0017 [ 88]: 7632b64be27554b3 +Block 0017 [ 89]: ac562a4331bdf6b2 +Block 0017 [ 90]: 70438f6240517dcb +Block 0017 [ 91]: e5b1bbdd81883384 +Block 0017 [ 92]: e5406e221cfcc990 +Block 0017 [ 93]: 694c710d4750bc8d +Block 0017 [ 94]: dd1729bf7e0b12d3 +Block 0017 [ 95]: 55886f912b344cd3 +Block 0017 [ 96]: c902a53f97ba19a0 +Block 0017 [ 97]: b66c74cd9e7a20c1 +Block 0017 [ 98]: 2308e5b036079da4 +Block 0017 [ 99]: cdc526b983a98cfc +Block 0017 [100]: 9868dc35af76d88e +Block 0017 [101]: 1166ed598c534c7e +Block 0017 [102]: 66ed886b20c6ae61 +Block 0017 [103]: 804b12b774cb411d +Block 0017 [104]: a8e1de357f7444b5 +Block 0017 [105]: 7375b1c693cb1e59 +Block 0017 [106]: fdea379b45e1d482 +Block 0017 [107]: a7ae259328e505e1 +Block 0017 [108]: 4a498055e9c7a4e5 +Block 0017 [109]: fdb7762264b16d42 +Block 0017 [110]: b0afc809e1b4d93e +Block 0017 [111]: 4143e78d76c21ae8 +Block 0017 [112]: ede783054972535d +Block 0017 [113]: a30b50251b9a735c +Block 0017 [114]: bfdc3808fef4acd5 +Block 0017 [115]: af990dac9a2314f7 +Block 0017 [116]: 44e37b021779c6d1 +Block 0017 [117]: d846b03cfc7637b1 +Block 0017 [118]: a7c373274faff42e +Block 0017 [119]: bc9c3a5ab89c8aaa +Block 0017 [120]: 3b5a5fa7262355f3 +Block 0017 [121]: 1bc2d9f69829a86a +Block 0017 [122]: 3546ed470b5a8723 +Block 0017 [123]: 97f881b5aff970d3 +Block 0017 [124]: 1ac3821269c2ee8f +Block 0017 [125]: 1d24698d02c09cca +Block 0017 [126]: e968c1d7e6f7f983 +Block 0017 [127]: 615ae91ba244796e +Block 0018 [ 0]: c56353865706e01e +Block 0018 [ 1]: 2008deada2479371 +Block 0018 [ 2]: 6bf9640afa0be017 +Block 0018 [ 3]: cbff064315b5c969 +Block 0018 [ 4]: 73c6647d9e81768f +Block 0018 [ 5]: 54c35767415dcc0f +Block 0018 [ 6]: 85789ed843f63faa +Block 0018 [ 7]: a29e6d2bad36be72 +Block 0018 [ 8]: b301ef96181f4af9 +Block 0018 [ 9]: 623461467a1d50b8 +Block 0018 [ 10]: 779c081d5dd2a8d8 +Block 0018 [ 11]: 97d9bfcc4d7c1bf0 +Block 0018 [ 12]: a1d72012d47fa27c +Block 0018 [ 13]: 0d3641842d3e8f4e +Block 0018 [ 14]: 7b0c3ed769c28a37 +Block 0018 [ 15]: a16e60ca97b4983f +Block 0018 [ 16]: 2bcb4545dfdfa02f +Block 0018 [ 17]: 2852a84faf0688da +Block 0018 [ 18]: e4cf9192f6f7df0f +Block 0018 [ 19]: d79e3702087b824d +Block 0018 [ 20]: a3b87e0702914795 +Block 0018 [ 21]: e2f14145b5897d88 +Block 0018 [ 22]: 9fbb5bbc9089bc9b +Block 0018 [ 23]: d1a2d108b965ee75 +Block 0018 [ 24]: d3965baad215bdae +Block 0018 [ 25]: 5146559ceb1203f7 +Block 0018 [ 26]: 438229a438f64d84 +Block 0018 [ 27]: d52ea8df05362ef2 +Block 0018 [ 28]: f65849b93cac0fbc +Block 0018 [ 29]: 91d10136de976abc +Block 0018 [ 30]: a6e405c4cc904a3b +Block 0018 [ 31]: 680b6f21abd89675 +Block 0018 [ 32]: a71ce0ee26d18c2e +Block 0018 [ 33]: ce26ebecb85e8737 +Block 0018 [ 34]: 142f9a78e5c1538b +Block 0018 [ 35]: d05611f217f38322 +Block 0018 [ 36]: 831121ec0775df8d +Block 0018 [ 37]: fde91d847c51ecdd +Block 0018 [ 38]: 3ad5f8d0ccb56e6f +Block 0018 [ 39]: 9fcd5e80613b6c23 +Block 0018 [ 40]: cfc5db7486fd0e95 +Block 0018 [ 41]: e5a1867214869654 +Block 0018 [ 42]: acb382ffbe5139e6 +Block 0018 [ 43]: 1ed3941d890bb088 +Block 0018 [ 44]: a4145acf9ec95a86 +Block 0018 [ 45]: 78da7311f5416211 +Block 0018 [ 46]: 939b875265496872 +Block 0018 [ 47]: e1bb9c5c2220f3ff +Block 0018 [ 48]: 1c24f60c4ce3bae3 +Block 0018 [ 49]: 414f56e67af2736c +Block 0018 [ 50]: f1a5fd7110bda591 +Block 0018 [ 51]: ebd71b667376a60c +Block 0018 [ 52]: e6cd6e0aa97da042 +Block 0018 [ 53]: 653f9b43d66fd80e +Block 0018 [ 54]: 52db371819ad4bbe +Block 0018 [ 55]: 20b98ebd399caa7e +Block 0018 [ 56]: c3cba3ea8af37c61 +Block 0018 [ 57]: 20340256ad3a6278 +Block 0018 [ 58]: e9bba7cc05e901e8 +Block 0018 [ 59]: ef99a3e5e269af3f +Block 0018 [ 60]: 4ec9e41d99c9c61b +Block 0018 [ 61]: e737c793049f51fd +Block 0018 [ 62]: 735095de5b23f4af +Block 0018 [ 63]: 68702e4e0d7a42c4 +Block 0018 [ 64]: e74de4a633120e8b +Block 0018 [ 65]: 6dae24a779a30904 +Block 0018 [ 66]: c6a469551c191227 +Block 0018 [ 67]: b7967b46207c2c5c +Block 0018 [ 68]: 71379f1e1b5162b0 +Block 0018 [ 69]: 5ab11e0f2cc5802a +Block 0018 [ 70]: 55643f358e6e9381 +Block 0018 [ 71]: afb36c68f8206119 +Block 0018 [ 72]: 7d179088c52f6798 +Block 0018 [ 73]: 551634a47e4951ad +Block 0018 [ 74]: 752eda55f86b960f +Block 0018 [ 75]: a73594a6d81887f9 +Block 0018 [ 76]: 246794e4638b41e6 +Block 0018 [ 77]: 409b195249a51f5a +Block 0018 [ 78]: f7bd3026e193d18c +Block 0018 [ 79]: 4be5161c5bdd6e8b +Block 0018 [ 80]: de96cd3c413a8be9 +Block 0018 [ 81]: aba764ceb1adb102 +Block 0018 [ 82]: b7842636bd5aa117 +Block 0018 [ 83]: a9c14fdc42872e40 +Block 0018 [ 84]: a15963f20588b09c +Block 0018 [ 85]: 368cecfa2963a40d +Block 0018 [ 86]: 053d9f8602aa5b63 +Block 0018 [ 87]: 760fba8205ffcb02 +Block 0018 [ 88]: 38a771fa1838dc59 +Block 0018 [ 89]: c99bfa719cb66fe5 +Block 0018 [ 90]: b073ace471a2021e +Block 0018 [ 91]: fd7e19c27d2f7eca +Block 0018 [ 92]: 38fc7cb22e67dbf3 +Block 0018 [ 93]: 9a03652a320f0213 +Block 0018 [ 94]: f1cc4b1493b3703f +Block 0018 [ 95]: 1b3306a2f3865325 +Block 0018 [ 96]: 2595f7949a755f71 +Block 0018 [ 97]: 78e9fa382d0927d3 +Block 0018 [ 98]: 8b85e76f7f397022 +Block 0018 [ 99]: a19f6dd3b8dca52d +Block 0018 [100]: 00e82e5576b941e6 +Block 0018 [101]: a7fa7ae6faddf0d9 +Block 0018 [102]: d99ff748568de1f9 +Block 0018 [103]: 4e2675753ff9d242 +Block 0018 [104]: d0cd9788bfee8164 +Block 0018 [105]: f2da4d54b004e796 +Block 0018 [106]: 5b1a0f55a7d95023 +Block 0018 [107]: e4ef7b231962072e +Block 0018 [108]: 729cf2df66d37c30 +Block 0018 [109]: 40c7b786a7aed4b0 +Block 0018 [110]: 3ac08ac29d39223d +Block 0018 [111]: 203dc268677ed0e9 +Block 0018 [112]: 52c84d8337fd4d66 +Block 0018 [113]: 139e5667061027e1 +Block 0018 [114]: 6c078c85ee42c4aa +Block 0018 [115]: 63833db031595429 +Block 0018 [116]: d447ec89081e5689 +Block 0018 [117]: 840de94326fb0d5c +Block 0018 [118]: 410e13a5634eae20 +Block 0018 [119]: d7b756d4a7b1697f +Block 0018 [120]: 1050513a1e7b7326 +Block 0018 [121]: 08a14292e030a2a3 +Block 0018 [122]: 30d6edcc44ef12f2 +Block 0018 [123]: 77d8788d3cf22d4b +Block 0018 [124]: 9066b21a6c79f00e +Block 0018 [125]: c3eab9a459f9fcb8 +Block 0018 [126]: 3bdd440ce2e5e1f4 +Block 0018 [127]: 8f973dff57dbd378 +Block 0019 [ 0]: 01fb129cc5b77b4f +Block 0019 [ 1]: d97f57425162ea3e +Block 0019 [ 2]: e8276a92492039e6 +Block 0019 [ 3]: 3608e78e794a18a4 +Block 0019 [ 4]: 4b11369193064da4 +Block 0019 [ 5]: b0de35a83d3f72e4 +Block 0019 [ 6]: d2a6b44f3df673a8 +Block 0019 [ 7]: 2ac37c9b9bd04ab3 +Block 0019 [ 8]: 488c7cd49282a0a0 +Block 0019 [ 9]: 8c380c95963e6b4f +Block 0019 [ 10]: 81d5c1c378d59641 +Block 0019 [ 11]: 2d857e93286b67ae +Block 0019 [ 12]: 6a58c08de951b4d0 +Block 0019 [ 13]: 6ab7d4bee5b738d3 +Block 0019 [ 14]: 88bf6dc38b506d3b +Block 0019 [ 15]: 009b889d679b8497 +Block 0019 [ 16]: 59b1f1f74efb2322 +Block 0019 [ 17]: 52ceaeb9154ca50c +Block 0019 [ 18]: 28c0cd203b6b6fc9 +Block 0019 [ 19]: aad7e207dff3cec6 +Block 0019 [ 20]: 9ffd1e22884b708b +Block 0019 [ 21]: 06e86279cd514c88 +Block 0019 [ 22]: cb899f826746fe5d +Block 0019 [ 23]: 10b5ecf199c8d34d +Block 0019 [ 24]: faae19be3f1a73b1 +Block 0019 [ 25]: c05fa929156bb2b8 +Block 0019 [ 26]: 966ee6906bcc9ca0 +Block 0019 [ 27]: 910f75707b22bbeb +Block 0019 [ 28]: 05bea73cdcad1abe +Block 0019 [ 29]: 2a217ca21b87f4ea +Block 0019 [ 30]: 9803db62cd649fdb +Block 0019 [ 31]: e41f40690f0acedb +Block 0019 [ 32]: 2704ac203dbf666a +Block 0019 [ 33]: de3867742cda737b +Block 0019 [ 34]: 5e891ddbc0ebf80f +Block 0019 [ 35]: a26084633cbc25c6 +Block 0019 [ 36]: e324a914bb6ee989 +Block 0019 [ 37]: 12af57e4ebd54cfc +Block 0019 [ 38]: 7326a4ef7bb3ce72 +Block 0019 [ 39]: 96ebd2aacd9ea28a +Block 0019 [ 40]: 177b393db4a26bd8 +Block 0019 [ 41]: 1885addd7e6227f2 +Block 0019 [ 42]: 707cc6e9254dd0e5 +Block 0019 [ 43]: fbafea1c9cac4810 +Block 0019 [ 44]: f650d8ca36a2cc92 +Block 0019 [ 45]: df88d3699c7fd4ff +Block 0019 [ 46]: d01a174fa16b4df5 +Block 0019 [ 47]: e8c9e9b1426c2e01 +Block 0019 [ 48]: 13ca5016746e7cc2 +Block 0019 [ 49]: fa7bb4c75626d3b2 +Block 0019 [ 50]: 0f844dd13a6eedf9 +Block 0019 [ 51]: 2bdf7095dddb0eca +Block 0019 [ 52]: 70020701e7728c78 +Block 0019 [ 53]: 1b7cc5becedf1a6e +Block 0019 [ 54]: 4402873b468a684c +Block 0019 [ 55]: 9c7cbbb1df70289c +Block 0019 [ 56]: bd1d0dd77aa7b618 +Block 0019 [ 57]: 750c4d82f4c0978e +Block 0019 [ 58]: dbdc7edc1833b96b +Block 0019 [ 59]: bb7dba594b1c100f +Block 0019 [ 60]: ece11ceaa82d9904 +Block 0019 [ 61]: 7b808930d82a9020 +Block 0019 [ 62]: b06d85c1d2424bdd +Block 0019 [ 63]: 64ffd652a760ed2c +Block 0019 [ 64]: 4562d6f8e3b5dccb +Block 0019 [ 65]: 87e6d56d65c283c6 +Block 0019 [ 66]: 9fe94fc027c21a00 +Block 0019 [ 67]: 8dc400478b9f1163 +Block 0019 [ 68]: 029c14bce5524f9e +Block 0019 [ 69]: 423deec939785c44 +Block 0019 [ 70]: a969d7c12fea9a28 +Block 0019 [ 71]: cec54cf9731902f2 +Block 0019 [ 72]: 6cac7755e0231ce0 +Block 0019 [ 73]: 3ed2da7f7fdfa17c +Block 0019 [ 74]: 6469eff8bafbf4c0 +Block 0019 [ 75]: 5619e6ce49fea452 +Block 0019 [ 76]: 5ff711a1d157e9c6 +Block 0019 [ 77]: bbbb1e51b7c0fa8d +Block 0019 [ 78]: ff6020f896d4aa0a +Block 0019 [ 79]: 7793af1f4cb28be8 +Block 0019 [ 80]: d4119423ff81e99a +Block 0019 [ 81]: 87071a0fe6f1fdb2 +Block 0019 [ 82]: fe52ad7fc16253e8 +Block 0019 [ 83]: 7f5f03545de2fefc +Block 0019 [ 84]: 7b38fc2bb6260261 +Block 0019 [ 85]: da971613e240efe7 +Block 0019 [ 86]: 7a86717ff3583bc9 +Block 0019 [ 87]: 41e9e68bbc8d3459 +Block 0019 [ 88]: 352101524d076bdf +Block 0019 [ 89]: 56bc810db202a661 +Block 0019 [ 90]: 724895de53780184 +Block 0019 [ 91]: 472995ae2902dc14 +Block 0019 [ 92]: e26c34719dc75f33 +Block 0019 [ 93]: 284575a822951dee +Block 0019 [ 94]: 3c34de13fbf1fd82 +Block 0019 [ 95]: b7dd994c13edd4d0 +Block 0019 [ 96]: 8811e94ca8eabca9 +Block 0019 [ 97]: 02ea332997305ef9 +Block 0019 [ 98]: ade80b60a9a5e79e +Block 0019 [ 99]: 66077ba1b5565540 +Block 0019 [100]: 7388da600272d9d3 +Block 0019 [101]: def87e32345358d6 +Block 0019 [102]: e71436c27aa3f5e4 +Block 0019 [103]: a6c69a8fbb9110c0 +Block 0019 [104]: 48000a8ca2db151d +Block 0019 [105]: b2f16745a08b53c3 +Block 0019 [106]: a9bd83427a1fb1b2 +Block 0019 [107]: 3b5eaf5351dad3d7 +Block 0019 [108]: f6b94b7083aefcc2 +Block 0019 [109]: b460241c7ab61f9b +Block 0019 [110]: c239335eb5ed5785 +Block 0019 [111]: b73d576203875b21 +Block 0019 [112]: 0513d7728b6dabaa +Block 0019 [113]: 1be1815371f2da1a +Block 0019 [114]: 80af69b2bb1f5078 +Block 0019 [115]: 4ca38ab5b8309e95 +Block 0019 [116]: 330b528faad28a90 +Block 0019 [117]: 71ad5e378ee67af2 +Block 0019 [118]: 0c600c1d3b739681 +Block 0019 [119]: cec06a6b8cec5726 +Block 0019 [120]: 9f24740e13ae7b5e +Block 0019 [121]: bad1bf8dd52977b4 +Block 0019 [122]: 6a6858419908532f +Block 0019 [123]: d81b57f836be3478 +Block 0019 [124]: 20f707578f0627bb +Block 0019 [125]: eac9fa947830264d +Block 0019 [126]: d3bda8399e5f7b2f +Block 0019 [127]: a0c476401ade3caa +Block 0020 [ 0]: 2904d477754f1182 +Block 0020 [ 1]: c7817f8c904876aa +Block 0020 [ 2]: ef630ae6c82fdd4b +Block 0020 [ 3]: 2b90f2f26913e67e +Block 0020 [ 4]: 4a00e183ac3b02f2 +Block 0020 [ 5]: d36d5d6dd25c2444 +Block 0020 [ 6]: 2f6ff1b1a0d64a92 +Block 0020 [ 7]: fbaa201fda84ce01 +Block 0020 [ 8]: 4b29cc7f03ce8132 +Block 0020 [ 9]: baf31290c098e42d +Block 0020 [ 10]: fe21fd15da24aadf +Block 0020 [ 11]: b46774f27b1b06a9 +Block 0020 [ 12]: 7fd84d48a8f2dc8a +Block 0020 [ 13]: 42a97fe50cdce3cb +Block 0020 [ 14]: c597b37c0fbbdf6d +Block 0020 [ 15]: cefba6997f40e239 +Block 0020 [ 16]: ba63b0a3b6a92f33 +Block 0020 [ 17]: 3d2c8dc2af6de650 +Block 0020 [ 18]: 0416456efe02d663 +Block 0020 [ 19]: 8bb54ac882e37ad3 +Block 0020 [ 20]: 90873df0d3d9cdf2 +Block 0020 [ 21]: 27c896216f937720 +Block 0020 [ 22]: ae591b750081df20 +Block 0020 [ 23]: a1d13beb52615120 +Block 0020 [ 24]: 58242fd330b617fe +Block 0020 [ 25]: cea097568f1d910c +Block 0020 [ 26]: 06d3145ceb011b4c +Block 0020 [ 27]: c0907ede1d338bed +Block 0020 [ 28]: 5d647e9063e3a000 +Block 0020 [ 29]: fb2bc9ff8eb0da2b +Block 0020 [ 30]: cafc25218c1854f4 +Block 0020 [ 31]: 9494568ebe7b081f +Block 0020 [ 32]: 2fce8d55463d09b0 +Block 0020 [ 33]: 8bdf4e97534ee12c +Block 0020 [ 34]: 0f07aa1a0fcc4e9f +Block 0020 [ 35]: 084dc457956a6a0e +Block 0020 [ 36]: 232705d7f0cab526 +Block 0020 [ 37]: d448fb450c080da5 +Block 0020 [ 38]: 48b7912f7fe83b1e +Block 0020 [ 39]: 6489d462f6978400 +Block 0020 [ 40]: fad910fea0c872f7 +Block 0020 [ 41]: a2bc6a2472d0de22 +Block 0020 [ 42]: 1da8c7cc8c2a0ead +Block 0020 [ 43]: bda44d0c59102810 +Block 0020 [ 44]: bed9ec721abf77bd +Block 0020 [ 45]: 5eb04509a4efa5fe +Block 0020 [ 46]: 147abfb14b55ff4d +Block 0020 [ 47]: 464db5cb2ab081e4 +Block 0020 [ 48]: 347a42f1646122f7 +Block 0020 [ 49]: 6c60a9d4d4809c39 +Block 0020 [ 50]: 0faa4393af952836 +Block 0020 [ 51]: e96e650e09870d44 +Block 0020 [ 52]: f2fbbf0ea59259f6 +Block 0020 [ 53]: f9d39cf808465afa +Block 0020 [ 54]: 4f41c740452f42d8 +Block 0020 [ 55]: ccd0940ced56b760 +Block 0020 [ 56]: cfc2c111d630bb14 +Block 0020 [ 57]: 00bb0851dabe0d80 +Block 0020 [ 58]: 0db0f1293ff7fe6b +Block 0020 [ 59]: 6021268000713de0 +Block 0020 [ 60]: 8dd8a5cd7c133a5a +Block 0020 [ 61]: e2603e8416c2dcfc +Block 0020 [ 62]: aeece433db673608 +Block 0020 [ 63]: 06411431eb04ce7b +Block 0020 [ 64]: b4cde9369fd8fedd +Block 0020 [ 65]: ead8fa31d96ead7d +Block 0020 [ 66]: f1498c4b282142fc +Block 0020 [ 67]: 9a6bf2a2920dcc07 +Block 0020 [ 68]: ef19df470784a666 +Block 0020 [ 69]: 7b19ef45403eb2aa +Block 0020 [ 70]: 7f87efe8bb1347b9 +Block 0020 [ 71]: 966b6c76676b7cb2 +Block 0020 [ 72]: ddfde750a3792957 +Block 0020 [ 73]: af435d6f749595f3 +Block 0020 [ 74]: 6b66903f330cb882 +Block 0020 [ 75]: 2f5d5734383ab9b2 +Block 0020 [ 76]: 16c84ef3653ec28d +Block 0020 [ 77]: ed267393d64b8ca9 +Block 0020 [ 78]: 37617f3ef3cc84a2 +Block 0020 [ 79]: 0392cc1ddb7741bd +Block 0020 [ 80]: 3e4cd2bd5d298731 +Block 0020 [ 81]: fad5bfe2a757e129 +Block 0020 [ 82]: 77200759f5610f93 +Block 0020 [ 83]: c4a3a70476b47735 +Block 0020 [ 84]: 67d711646fe329a3 +Block 0020 [ 85]: a297b952e77fb1a5 +Block 0020 [ 86]: 6667da2228cad03d +Block 0020 [ 87]: 61e9958285b43f16 +Block 0020 [ 88]: 9ed6b30497286eee +Block 0020 [ 89]: a1390ee861b2ab3a +Block 0020 [ 90]: 4ed79e20591d2fd6 +Block 0020 [ 91]: d48ed0be2c925b76 +Block 0020 [ 92]: c822e029ac094eb3 +Block 0020 [ 93]: ba2d8c8a4a67e483 +Block 0020 [ 94]: ccb998f8886aa893 +Block 0020 [ 95]: 280cc0b728b73fad +Block 0020 [ 96]: 277e12cadbf7798d +Block 0020 [ 97]: 7f57143f08c86d28 +Block 0020 [ 98]: 1ca6f11a4b1e25ff +Block 0020 [ 99]: b2db91c288ed40cd +Block 0020 [100]: f2c6434730b685b2 +Block 0020 [101]: 0f9a24dd1275f7b9 +Block 0020 [102]: 9bd27d8fcac17d47 +Block 0020 [103]: af38fcf1b8cb26da +Block 0020 [104]: 16a1f451c0e83e8b +Block 0020 [105]: a8c2fb8a2cd2a9af +Block 0020 [106]: 686efdc520934059 +Block 0020 [107]: 23cb0295bad5928e +Block 0020 [108]: 22e331a0e82ae918 +Block 0020 [109]: b246bdcdcb1b3dc8 +Block 0020 [110]: e706d48f7b4be38b +Block 0020 [111]: f6b8e33579072361 +Block 0020 [112]: d093370d12803e37 +Block 0020 [113]: f5ee3f6bbe485f0c +Block 0020 [114]: ff26642a6224ef14 +Block 0020 [115]: 8e060f75459b1591 +Block 0020 [116]: 92d11d49029def67 +Block 0020 [117]: 83686769d908640a +Block 0020 [118]: 982d2d9cc1892c1a +Block 0020 [119]: d182c0a05d04be1f +Block 0020 [120]: 085b197d2ae051ef +Block 0020 [121]: 6a9f23d9345da493 +Block 0020 [122]: f1de02d627b8e3ad +Block 0020 [123]: 274aabf0e728e979 +Block 0020 [124]: f296c23bfd3ddd40 +Block 0020 [125]: d2d634b5e3eb437f +Block 0020 [126]: 28a830d2b2a53ae3 +Block 0020 [127]: 0204d4ecf900d9fd +Block 0021 [ 0]: c12cc1a7630ab20c +Block 0021 [ 1]: 7d843f9d1bb57449 +Block 0021 [ 2]: 4ec1c00fb99466b5 +Block 0021 [ 3]: 76f7b0ad0b006ffe +Block 0021 [ 4]: f8c75bd78486fcd5 +Block 0021 [ 5]: 31b3c8708d155fe3 +Block 0021 [ 6]: 20c16f1e186a23e4 +Block 0021 [ 7]: a878075c67e6146e +Block 0021 [ 8]: c448dd6ff4914bf2 +Block 0021 [ 9]: f26dc8f66622ff67 +Block 0021 [ 10]: 42913728606ca3b4 +Block 0021 [ 11]: 08df8268d1ab2dea +Block 0021 [ 12]: 62d6424701b0d763 +Block 0021 [ 13]: 74c12644770da62b +Block 0021 [ 14]: 57fed96b12c80890 +Block 0021 [ 15]: 48d7d8d34fa4a950 +Block 0021 [ 16]: 6d572991f37958e3 +Block 0021 [ 17]: 63f5eafb7cd7efbc +Block 0021 [ 18]: 291c0fa67d95097d +Block 0021 [ 19]: d745f3585cae2a23 +Block 0021 [ 20]: 5b098367274119eb +Block 0021 [ 21]: eeb0b972239d67c3 +Block 0021 [ 22]: 6f8d5d30a3290b2d +Block 0021 [ 23]: 1cd930f80f508fed +Block 0021 [ 24]: 13252320a59f1add +Block 0021 [ 25]: c0bd534bb0880794 +Block 0021 [ 26]: 2ae82368d37658b1 +Block 0021 [ 27]: 0767e3162640b624 +Block 0021 [ 28]: 97a163f101921954 +Block 0021 [ 29]: 240e2369e5df1c54 +Block 0021 [ 30]: 796dc4405b1058ce +Block 0021 [ 31]: e32a4b28380c93fc +Block 0021 [ 32]: fe45b1a7bc753ed2 +Block 0021 [ 33]: 9e036ac9e7500849 +Block 0021 [ 34]: 4ccffa21cc335fb9 +Block 0021 [ 35]: a98d9e57a864f8be +Block 0021 [ 36]: c821969719d0b4ee +Block 0021 [ 37]: ea18b297cddc70f2 +Block 0021 [ 38]: f2c76c0b5f9f4096 +Block 0021 [ 39]: 54e08c67e0685193 +Block 0021 [ 40]: a75405fdc2ae7c40 +Block 0021 [ 41]: 8e7132965e9d271d +Block 0021 [ 42]: 998217fcf11ac2f2 +Block 0021 [ 43]: 3defa4721885a50e +Block 0021 [ 44]: 70699c4abc689fba +Block 0021 [ 45]: d746bef4daf4bcea +Block 0021 [ 46]: 600fdc290ee2027d +Block 0021 [ 47]: 67be6a9bd1e606bc +Block 0021 [ 48]: af28be9adba758ed +Block 0021 [ 49]: ad583090bd70d41c +Block 0021 [ 50]: 9f4b3857054b108d +Block 0021 [ 51]: 5310a2ea584dea4e +Block 0021 [ 52]: 1e6b0959fae98af3 +Block 0021 [ 53]: a13a136d93c676a6 +Block 0021 [ 54]: 137ecb0ff39d3409 +Block 0021 [ 55]: 7ca34f346ffe4eb0 +Block 0021 [ 56]: b31d811d53e9fd89 +Block 0021 [ 57]: 33e9ee66616eefa5 +Block 0021 [ 58]: 036a3a60147520c5 +Block 0021 [ 59]: e5e6b915e03d02e1 +Block 0021 [ 60]: f2b85ab4bee057cc +Block 0021 [ 61]: f020edf1cfa20c62 +Block 0021 [ 62]: 560116c2cd4749a5 +Block 0021 [ 63]: fee85e86bbcec42d +Block 0021 [ 64]: fd24d86bfbf48a4b +Block 0021 [ 65]: daa1ca90040ea1ec +Block 0021 [ 66]: c113e6c001bda230 +Block 0021 [ 67]: 06c9e40ff5c0514f +Block 0021 [ 68]: ad6e82c68f64cf0c +Block 0021 [ 69]: a92062c5f8ecf9a3 +Block 0021 [ 70]: f446d44ccd988cdb +Block 0021 [ 71]: 2665503730a90b3f +Block 0021 [ 72]: 0d5b91cb0378ac0a +Block 0021 [ 73]: 9e37095869eb5713 +Block 0021 [ 74]: 2321ce41dd8da5a3 +Block 0021 [ 75]: 64614f3ce5ebaf1e +Block 0021 [ 76]: 99b437d318b3fd65 +Block 0021 [ 77]: 8da370c7b0a99bd1 +Block 0021 [ 78]: b88f5071e7b1ff22 +Block 0021 [ 79]: e385367b7446a5d8 +Block 0021 [ 80]: 7fd00d9988d6298b +Block 0021 [ 81]: 6dacadf00512c4c7 +Block 0021 [ 82]: a79fafc4c62f47e0 +Block 0021 [ 83]: bec3c28b98e09481 +Block 0021 [ 84]: 59658b57a179c94d +Block 0021 [ 85]: 9b5655e529c865bb +Block 0021 [ 86]: 446468a9aef42973 +Block 0021 [ 87]: 8b17d0792b62b959 +Block 0021 [ 88]: 946928416f827f66 +Block 0021 [ 89]: bf1e4e1cf11e4d13 +Block 0021 [ 90]: ed26651a9cc1cf4c +Block 0021 [ 91]: 1999ecb0492dbf6d +Block 0021 [ 92]: 5ae6127f4aff6568 +Block 0021 [ 93]: d44ed717054f9942 +Block 0021 [ 94]: 5437b56726a956ed +Block 0021 [ 95]: 6f6befe7e5b92675 +Block 0021 [ 96]: 6417eb27b53301bb +Block 0021 [ 97]: 620f7d9b1e2c90b6 +Block 0021 [ 98]: ebb1aaf241321a4e +Block 0021 [ 99]: 5afdb7a0b59befa7 +Block 0021 [100]: fae040ea8eee04f4 +Block 0021 [101]: 88d12acc0b99fece +Block 0021 [102]: b5e1e7175ac7fc22 +Block 0021 [103]: 4c7bd92ede0a3303 +Block 0021 [104]: 8c9e433bd43d540d +Block 0021 [105]: b41d516eba7eb06f +Block 0021 [106]: 2d7c6d31687048be +Block 0021 [107]: f3ed5c6303fe8930 +Block 0021 [108]: 63adb43e1eb1c2b0 +Block 0021 [109]: 0fd88f6d8c134194 +Block 0021 [110]: 96e5248b15869af1 +Block 0021 [111]: 2b2214a414b91922 +Block 0021 [112]: ec49cf29cd39bcb0 +Block 0021 [113]: 30a080de12274f79 +Block 0021 [114]: fdda4ce0c746632f +Block 0021 [115]: 95e428f16be30440 +Block 0021 [116]: 517bd14be65778c5 +Block 0021 [117]: 8047066c240bf71f +Block 0021 [118]: 76e99bbe489edc17 +Block 0021 [119]: e38bbfc1500917cd +Block 0021 [120]: 47b495ea51ddde99 +Block 0021 [121]: a7f465121e6866d6 +Block 0021 [122]: bcad55441d717cf4 +Block 0021 [123]: c01b4ccf3af42871 +Block 0021 [124]: a2fac53753be25d4 +Block 0021 [125]: ecf463167e33c65f +Block 0021 [126]: b59ec66d36b26358 +Block 0021 [127]: 3c69b335560021a7 +Block 0022 [ 0]: ab16b3a56c5075d9 +Block 0022 [ 1]: bf6e87316986ed91 +Block 0022 [ 2]: 3706dc9baa34f072 +Block 0022 [ 3]: d000956d44f7d1a1 +Block 0022 [ 4]: b9042077b3ba870e +Block 0022 [ 5]: 23f4954484f46834 +Block 0022 [ 6]: 7f00ea023bd08390 +Block 0022 [ 7]: 6d36d08a66d30fc7 +Block 0022 [ 8]: 90b1d92efe744358 +Block 0022 [ 9]: 43148be233395484 +Block 0022 [ 10]: 529f606afdabaea5 +Block 0022 [ 11]: 0840d08dfdc8cf40 +Block 0022 [ 12]: d2d110baa6ed66df +Block 0022 [ 13]: d94d5feceb8b6693 +Block 0022 [ 14]: 9d5f3588931f8d56 +Block 0022 [ 15]: 5909bb597b2548db +Block 0022 [ 16]: 4ef8519c35d03e3b +Block 0022 [ 17]: 3c963b75c7aa5cfb +Block 0022 [ 18]: 262fb246be170e59 +Block 0022 [ 19]: d440145519b7ad26 +Block 0022 [ 20]: 73ab50c82577acdd +Block 0022 [ 21]: a898aeed8a2d8301 +Block 0022 [ 22]: 0f12e4d69e8ff588 +Block 0022 [ 23]: 42de1e1610bf5ac0 +Block 0022 [ 24]: c9d77bd96186c22b +Block 0022 [ 25]: 48224c45c85d1a7e +Block 0022 [ 26]: eb605118f55496a7 +Block 0022 [ 27]: eae4f2d623f09f0c +Block 0022 [ 28]: 1bc8533a22ade72e +Block 0022 [ 29]: c5d5d068055194ba +Block 0022 [ 30]: dc8091ca4b23c5c9 +Block 0022 [ 31]: 4f6ab36707a798d1 +Block 0022 [ 32]: f5661f644f082a87 +Block 0022 [ 33]: 89906ef40c28c45c +Block 0022 [ 34]: 8245084f1e623ca3 +Block 0022 [ 35]: eb80dabbf146dfd1 +Block 0022 [ 36]: 21597abb85a09601 +Block 0022 [ 37]: 911883ff4eaad8ce +Block 0022 [ 38]: 37a30fcfd4e7e78e +Block 0022 [ 39]: a0e80cdfa662c635 +Block 0022 [ 40]: 8eab544a96438380 +Block 0022 [ 41]: 82c38c4f95d1ae3f +Block 0022 [ 42]: 29fd6fd0a6903703 +Block 0022 [ 43]: b6a8e2cda01ed83e +Block 0022 [ 44]: f90b7e33a0165041 +Block 0022 [ 45]: 977f2a7ac3eaf97e +Block 0022 [ 46]: 1942327dddd81546 +Block 0022 [ 47]: 517c90126edcaaa0 +Block 0022 [ 48]: c5ffce11d9f5fd31 +Block 0022 [ 49]: e7bcbb02539969cf +Block 0022 [ 50]: a4657d205059500a +Block 0022 [ 51]: 61e75294e0c5a7dd +Block 0022 [ 52]: 4b2297b821bf9d6c +Block 0022 [ 53]: f5d35f75b3efe34f +Block 0022 [ 54]: 3069214b0c198625 +Block 0022 [ 55]: 58dc0964970a7436 +Block 0022 [ 56]: 5ab8e583fcf8cc8a +Block 0022 [ 57]: d3f90e125dc63769 +Block 0022 [ 58]: d99fdc3e92d27d41 +Block 0022 [ 59]: 59c8a73d0a38ef89 +Block 0022 [ 60]: 7cfee5d258168e40 +Block 0022 [ 61]: 7f9531f36c2b78d2 +Block 0022 [ 62]: 5fa407b6ae15296b +Block 0022 [ 63]: b52c77c541797d42 +Block 0022 [ 64]: 1ac5d4233901339e +Block 0022 [ 65]: b29e6f85131997a2 +Block 0022 [ 66]: 87147a9a6dc9db3c +Block 0022 [ 67]: 033f96b424f5af0d +Block 0022 [ 68]: ec33cf847ef40a18 +Block 0022 [ 69]: 0f8f314e8c3a0bec +Block 0022 [ 70]: d6c21ea4ba3358a0 +Block 0022 [ 71]: ac3d0f1c487d577b +Block 0022 [ 72]: 11937f11fc59a840 +Block 0022 [ 73]: 61674f505fd229ae +Block 0022 [ 74]: 5a00e6607ec78934 +Block 0022 [ 75]: e249c6cd3f887bff +Block 0022 [ 76]: 716deb4f18e87fba +Block 0022 [ 77]: 92dd5e6b87ae487d +Block 0022 [ 78]: d45ae78ffed12c55 +Block 0022 [ 79]: 2c5bfc277658f3a1 +Block 0022 [ 80]: db971b0168ea4745 +Block 0022 [ 81]: 46e39abd9f685214 +Block 0022 [ 82]: 93ee55707d51ac38 +Block 0022 [ 83]: 3764e134d7bc5e1e +Block 0022 [ 84]: c867ee52271ef46c +Block 0022 [ 85]: d41958c6c6cdd2fd +Block 0022 [ 86]: 21a4c738e6b32bbb +Block 0022 [ 87]: 9182f1362fbe103f +Block 0022 [ 88]: d4fc051a73c0ba4f +Block 0022 [ 89]: 4b3b78d41e673f1b +Block 0022 [ 90]: de8859d43a77db34 +Block 0022 [ 91]: 702f0530d93babe9 +Block 0022 [ 92]: b67f17c55e7f9629 +Block 0022 [ 93]: 04584cb783e39923 +Block 0022 [ 94]: fd138c6fabea3a81 +Block 0022 [ 95]: 43658bec8f80a41d +Block 0022 [ 96]: 0440da4de750eaab +Block 0022 [ 97]: 4b7702f3d6554710 +Block 0022 [ 98]: d68d5f3de84d37ca +Block 0022 [ 99]: 18ca44373c453767 +Block 0022 [100]: d1fdbbe79c392c87 +Block 0022 [101]: 9dae17d1f4740b9b +Block 0022 [102]: a9c52e3c1eb100ad +Block 0022 [103]: 8bd7475cfb22956c +Block 0022 [104]: 85eb6b76a6d2a8c8 +Block 0022 [105]: 198bec106136c9ce +Block 0022 [106]: 9b81158c4c3d0e51 +Block 0022 [107]: 2022774adeafe355 +Block 0022 [108]: 7a1b3f58e921bfd0 +Block 0022 [109]: 906523ea688ebb1b +Block 0022 [110]: 74472376d97f71b8 +Block 0022 [111]: e2a6b16fe40d2a75 +Block 0022 [112]: 9abc505f14c1dd63 +Block 0022 [113]: d0fa9c766f6d104c +Block 0022 [114]: adefe0e0ae4bb777 +Block 0022 [115]: a5d379758af224e6 +Block 0022 [116]: dc29361b4c8ebc7d +Block 0022 [117]: 5c091ed940780a84 +Block 0022 [118]: 7ffc0e4038e28779 +Block 0022 [119]: 80b312993291f81e +Block 0022 [120]: 39608712b2445c46 +Block 0022 [121]: bf879dc1b80ae860 +Block 0022 [122]: 514c6ab3ff330561 +Block 0022 [123]: 55370d7c118dd1fb +Block 0022 [124]: 846f03da6bfa17f1 +Block 0022 [125]: 87948df888a4cbf2 +Block 0022 [126]: 89ccbff86501eb61 +Block 0022 [127]: 6aa3800ea4c30a6d +Block 0023 [ 0]: 556721f6dc987249 +Block 0023 [ 1]: 99b4dfec9c302f7d +Block 0023 [ 2]: 1117e2bb2476093b +Block 0023 [ 3]: 1b2f958fa1e0291a +Block 0023 [ 4]: d2ec858fef0236e7 +Block 0023 [ 5]: c3b8b8774e30fa01 +Block 0023 [ 6]: fec88aa56118cd0b +Block 0023 [ 7]: 7482e9a6e06d2726 +Block 0023 [ 8]: 803534fe2cf0f98e +Block 0023 [ 9]: ff6d8c8018ede5a7 +Block 0023 [ 10]: 87d7eff1d657f2ac +Block 0023 [ 11]: 819c06f8a94ddad7 +Block 0023 [ 12]: 6341df572ace94c6 +Block 0023 [ 13]: 2f45f9db86cf0797 +Block 0023 [ 14]: 6555d7ef0a6fa787 +Block 0023 [ 15]: 9db255c7658fe518 +Block 0023 [ 16]: b34faa5c72edf4ad +Block 0023 [ 17]: ba7bd4028c089f1a +Block 0023 [ 18]: 09602adb7e3c7b36 +Block 0023 [ 19]: 1209106421591752 +Block 0023 [ 20]: 5819306a403cd8e4 +Block 0023 [ 21]: 53197970bb5fa1f9 +Block 0023 [ 22]: 16e8bbc10bec7ef8 +Block 0023 [ 23]: 6b01c4dd49a87999 +Block 0023 [ 24]: 7495246fdc5193b5 +Block 0023 [ 25]: b3a8f9152786463b +Block 0023 [ 26]: 23c964909608bb59 +Block 0023 [ 27]: d48cb6d946414714 +Block 0023 [ 28]: 0bf19bb18fbe8fd4 +Block 0023 [ 29]: 776e3968ded52066 +Block 0023 [ 30]: cb51fe52d0717809 +Block 0023 [ 31]: 51a4f168ef8c6df2 +Block 0023 [ 32]: 828e73597ba1ffb4 +Block 0023 [ 33]: 775664a0a94d9a38 +Block 0023 [ 34]: aa8d077ca94bd294 +Block 0023 [ 35]: 0f8d196531249306 +Block 0023 [ 36]: 18bdafa6230e7c58 +Block 0023 [ 37]: 828062267b0d6fd3 +Block 0023 [ 38]: a3bdf8db2fe6cf2f +Block 0023 [ 39]: b0733ce01f2b0704 +Block 0023 [ 40]: d1c49348c163ffd0 +Block 0023 [ 41]: 9ceaa71c0412483e +Block 0023 [ 42]: 270728a894443699 +Block 0023 [ 43]: 31e0b34e8a211d4b +Block 0023 [ 44]: 065f68d65aa2ce32 +Block 0023 [ 45]: b3a0f4c50ba17262 +Block 0023 [ 46]: 6e4a884360dc6018 +Block 0023 [ 47]: 0229bb9b7f74e2e3 +Block 0023 [ 48]: a0e2d3bb2aa6f992 +Block 0023 [ 49]: 51816f912c836575 +Block 0023 [ 50]: e0b825bbc0d3e078 +Block 0023 [ 51]: 4c479c9963e79cf4 +Block 0023 [ 52]: 73dca92a9169307e +Block 0023 [ 53]: b429a5f8c46bd932 +Block 0023 [ 54]: b0b7fb8ef64c1b04 +Block 0023 [ 55]: 8169f07c085d8b2a +Block 0023 [ 56]: 0e8394c61e8979cc +Block 0023 [ 57]: 09692e621ebe9fbe +Block 0023 [ 58]: 307da2a38a26abf7 +Block 0023 [ 59]: db57d2225640b395 +Block 0023 [ 60]: 764b4447978991f1 +Block 0023 [ 61]: 6ff6a890fce95daf +Block 0023 [ 62]: c3e624ade7d96d9c +Block 0023 [ 63]: 2b5053bfb7ef35c8 +Block 0023 [ 64]: 2e8a62d6bb119e7b +Block 0023 [ 65]: 8cac526cc4a7a645 +Block 0023 [ 66]: 8fbb0601586486ce +Block 0023 [ 67]: 8044ffb0401b4041 +Block 0023 [ 68]: 8798e3677b488295 +Block 0023 [ 69]: 7433a887af3dd05a +Block 0023 [ 70]: 3a7189e6fb1014a1 +Block 0023 [ 71]: 32d00c4bbcaac4a9 +Block 0023 [ 72]: a77359f3d6c159b6 +Block 0023 [ 73]: 74f343d44052937d +Block 0023 [ 74]: 0c66f82b096e4a8c +Block 0023 [ 75]: 986205cf0d8ddfd5 +Block 0023 [ 76]: 4505e8e3ff1955c7 +Block 0023 [ 77]: bdfdb8e10137d89c +Block 0023 [ 78]: 3cfab16a6e505749 +Block 0023 [ 79]: 0c9e89e21030cda5 +Block 0023 [ 80]: 9b39ebca2638fa57 +Block 0023 [ 81]: a39a852d538cc65a +Block 0023 [ 82]: 417ac20a52b358c5 +Block 0023 [ 83]: 57bb86093eb9779e +Block 0023 [ 84]: 6104a01c0efb313a +Block 0023 [ 85]: 9a76e197a2daaaa4 +Block 0023 [ 86]: 0ba50f40599759b0 +Block 0023 [ 87]: 82d2f09e12c993e1 +Block 0023 [ 88]: 8213a0d0c050aaf5 +Block 0023 [ 89]: 7850e59315f640ec +Block 0023 [ 90]: 742b954ff07ec512 +Block 0023 [ 91]: 1cc7b7a76ddb5908 +Block 0023 [ 92]: 90175fb8e3f50c78 +Block 0023 [ 93]: a9bb387ad0caedfb +Block 0023 [ 94]: 687bb45cc5c9cc4c +Block 0023 [ 95]: d452dfa463e6cb6a +Block 0023 [ 96]: 77f1cc9138028d48 +Block 0023 [ 97]: f8d09a3ea40682a7 +Block 0023 [ 98]: a5a831cab641262d +Block 0023 [ 99]: 131636b6651e56f4 +Block 0023 [100]: 540331e6bd311bc3 +Block 0023 [101]: 29392009473107a3 +Block 0023 [102]: 9171ce46a6d71344 +Block 0023 [103]: ece3a2c971e5d580 +Block 0023 [104]: 7a90cdaa7553b5a8 +Block 0023 [105]: ef302aa8ca894274 +Block 0023 [106]: 9f92c44cbc91bc72 +Block 0023 [107]: 0e85df7e88220c16 +Block 0023 [108]: b59f9d637a0f1de4 +Block 0023 [109]: 365dedbc87eb2698 +Block 0023 [110]: 14b1e9d4bd03ed33 +Block 0023 [111]: 6894880ded846900 +Block 0023 [112]: 4019b80ea900fce9 +Block 0023 [113]: bb9eaa2c25a5e283 +Block 0023 [114]: b02f512376bfd802 +Block 0023 [115]: f44a5e0fd7134db4 +Block 0023 [116]: 5385593b6cf69c33 +Block 0023 [117]: 651d8a75b4f5d8cd +Block 0023 [118]: d9fa29584a6b0b21 +Block 0023 [119]: b2c2fca9073c3882 +Block 0023 [120]: 810511ff5d9e8807 +Block 0023 [121]: f160852a94f55308 +Block 0023 [122]: 2f741d93d26befbc +Block 0023 [123]: 0504623ef78331ec +Block 0023 [124]: 73feb604a4e6f0f5 +Block 0023 [125]: 4ad832c77a9891bd +Block 0023 [126]: b5e45edc4e847c4b +Block 0023 [127]: 6ffd61b212eb8ea2 +Block 0024 [ 0]: d88284f50713c31b +Block 0024 [ 1]: 8c87762439effae4 +Block 0024 [ 2]: 627d88554d9c676c +Block 0024 [ 3]: 456a544d129f6a19 +Block 0024 [ 4]: 1bba14a4866d3eaa +Block 0024 [ 5]: 8b95d511ff8e5399 +Block 0024 [ 6]: 5d2f3d694b9f103a +Block 0024 [ 7]: c616b5caf714f117 +Block 0024 [ 8]: 78500c063a98f09a +Block 0024 [ 9]: f8d930b864f14db7 +Block 0024 [ 10]: 1fd61ead5acebd80 +Block 0024 [ 11]: b4528739e5183157 +Block 0024 [ 12]: 89e5791f65963437 +Block 0024 [ 13]: 68f5cc6a53562ec0 +Block 0024 [ 14]: 3871f32fdaa3b946 +Block 0024 [ 15]: 75344f511527fedf +Block 0024 [ 16]: 4fe8800adf2466be +Block 0024 [ 17]: 9ab4030c1a3aaddd +Block 0024 [ 18]: 8339ff862f1ab707 +Block 0024 [ 19]: 5c6597e27d49f75b +Block 0024 [ 20]: 1a14e616a338206c +Block 0024 [ 21]: 31eed02a0647075a +Block 0024 [ 22]: 8c7a00d30e7d31e9 +Block 0024 [ 23]: acd25fe6051b5363 +Block 0024 [ 24]: da738b6d3d6e875a +Block 0024 [ 25]: f24fca741d0f8de3 +Block 0024 [ 26]: 12ca39f6d6087516 +Block 0024 [ 27]: e40695661644eeda +Block 0024 [ 28]: 4c5b86c9fab6199c +Block 0024 [ 29]: 6c24d91cbd243752 +Block 0024 [ 30]: a6ba8fb90af10a20 +Block 0024 [ 31]: 298bbf7d91bd6df3 +Block 0024 [ 32]: cda34cf012e25d4b +Block 0024 [ 33]: aee2c946a2f594a0 +Block 0024 [ 34]: 8cb96f7da1a78ef2 +Block 0024 [ 35]: 0fc18547c433ba29 +Block 0024 [ 36]: 6f03257b4a4aa101 +Block 0024 [ 37]: 9f4a1bf963efe77f +Block 0024 [ 38]: 24eccb6c5c64d4a9 +Block 0024 [ 39]: 5d3c5a06a53c2cf7 +Block 0024 [ 40]: 01d604366f6dc1e0 +Block 0024 [ 41]: a8e0dba29a99108e +Block 0024 [ 42]: 1c47a9a5f396ab45 +Block 0024 [ 43]: d45cbbfbb03fd673 +Block 0024 [ 44]: ddc29f83a08238ba +Block 0024 [ 45]: efb52fda37fd5483 +Block 0024 [ 46]: 2252e2ce16b35dd2 +Block 0024 [ 47]: 037fc7a6c0ff0c5a +Block 0024 [ 48]: f202db23b64e1eb6 +Block 0024 [ 49]: 743410480c25aff3 +Block 0024 [ 50]: 640a479a6f306adf +Block 0024 [ 51]: 958e2253a8914ede +Block 0024 [ 52]: 8b1e51392300b250 +Block 0024 [ 53]: a699253416b612d4 +Block 0024 [ 54]: c4e9097a571bdb24 +Block 0024 [ 55]: f7f1162a4fbc75ee +Block 0024 [ 56]: 1b6dd1fe292d9c22 +Block 0024 [ 57]: 796d46d2f71d4e77 +Block 0024 [ 58]: 893ded32ffb7ac70 +Block 0024 [ 59]: bb6dab308f4cee79 +Block 0024 [ 60]: 8b18e8740f27d639 +Block 0024 [ 61]: f644b8c3df7db7e2 +Block 0024 [ 62]: 35c04f8f8824a45b +Block 0024 [ 63]: bcd9215d9a18a39d +Block 0024 [ 64]: e80b5dfa5dfe2d2c +Block 0024 [ 65]: 47ca09e8916c744a +Block 0024 [ 66]: 527d58c882db4fe4 +Block 0024 [ 67]: 384654cce68a5a48 +Block 0024 [ 68]: 1e917bd09d5fc395 +Block 0024 [ 69]: f2eeb59a136c23c5 +Block 0024 [ 70]: d0062fa155adcbd3 +Block 0024 [ 71]: 650d4fd65c081681 +Block 0024 [ 72]: 77535a18a15e4f39 +Block 0024 [ 73]: 2a081a72b7522a15 +Block 0024 [ 74]: 9c64ed7680bc0ab6 +Block 0024 [ 75]: dfd06369f31d6630 +Block 0024 [ 76]: f669d8a8c9f0eb39 +Block 0024 [ 77]: c296a9c2a9485dbb +Block 0024 [ 78]: 6214d2f5ba58a315 +Block 0024 [ 79]: 5b653348723c129d +Block 0024 [ 80]: 9c48f59c76fcf934 +Block 0024 [ 81]: fd7498527f17d3ab +Block 0024 [ 82]: 7ae20772d38bf8d4 +Block 0024 [ 83]: ef647a626247193c +Block 0024 [ 84]: 4d317391d8df4450 +Block 0024 [ 85]: 12558123e175f980 +Block 0024 [ 86]: fac8e511cba42c82 +Block 0024 [ 87]: 8069fb7578f5f0cb +Block 0024 [ 88]: 31858de29f739b86 +Block 0024 [ 89]: c1e68b8f0eef3ca6 +Block 0024 [ 90]: 95bb9e89125dca10 +Block 0024 [ 91]: c5d1abd5a40b7cae +Block 0024 [ 92]: 94f17725613a0eef +Block 0024 [ 93]: ad34e36ea76bb481 +Block 0024 [ 94]: d07439a3ef48bff7 +Block 0024 [ 95]: 0a0c062abfc544f3 +Block 0024 [ 96]: 24f99b247f7b7e5a +Block 0024 [ 97]: ed27a580eaaf4ee5 +Block 0024 [ 98]: ebc61a0a4c093f87 +Block 0024 [ 99]: d08946d03ff1542a +Block 0024 [100]: 0befcf9d5f571522 +Block 0024 [101]: b5be7e66b886472c +Block 0024 [102]: 0271a6c1f348073b +Block 0024 [103]: 7f24ce4f67784d15 +Block 0024 [104]: bf7b10d70723ba6e +Block 0024 [105]: f00edf5c303e9b06 +Block 0024 [106]: 7a7ef27f4872669f +Block 0024 [107]: fffd0af0f5e95a97 +Block 0024 [108]: 7dac32c65cebd8ad +Block 0024 [109]: 611bdbe7f7ac37b6 +Block 0024 [110]: db3b333b27fb4ced +Block 0024 [111]: bb3cefc08d708545 +Block 0024 [112]: 1a17b3c9ba7fdf10 +Block 0024 [113]: 288dd53e76b91f62 +Block 0024 [114]: d2795c6696a76238 +Block 0024 [115]: 3eaf16374449b54f +Block 0024 [116]: 7ec146ee77bd917d +Block 0024 [117]: a9e40f4aa4a25eb7 +Block 0024 [118]: b2afd186798bcdd5 +Block 0024 [119]: 94815c56ceb4e679 +Block 0024 [120]: b4bc677bddd6448e +Block 0024 [121]: 01cd724d3300bbd0 +Block 0024 [122]: 8343503e5e98eb96 +Block 0024 [123]: 6a7a4414b7ed645e +Block 0024 [124]: 672bac9c0ae51d50 +Block 0024 [125]: 640075a4cfd1f8dc +Block 0024 [126]: 136974d993c474b3 +Block 0024 [127]: 7ce21aafca4593ee +Block 0025 [ 0]: 9b02443a6f899e73 +Block 0025 [ 1]: c1ee68a9c94f0899 +Block 0025 [ 2]: a6eaf7a6b38f45dc +Block 0025 [ 3]: 66069bc282e196e8 +Block 0025 [ 4]: 6d15c727711caa68 +Block 0025 [ 5]: 1a1efa2d260f3cde +Block 0025 [ 6]: eff2a14ce540dca8 +Block 0025 [ 7]: 94b2877a291c2fa9 +Block 0025 [ 8]: 4d57f7b951ec9e6c +Block 0025 [ 9]: 38643647a66bad56 +Block 0025 [ 10]: f4949cf4a451d471 +Block 0025 [ 11]: 38f9d32110a50ed8 +Block 0025 [ 12]: 00892238ac194fef +Block 0025 [ 13]: 5cc481f19bd1b7b2 +Block 0025 [ 14]: 89eae5086a6fb7df +Block 0025 [ 15]: d339c86fe08eaaf6 +Block 0025 [ 16]: d3615f7f03f60511 +Block 0025 [ 17]: 5beafb3a682787a5 +Block 0025 [ 18]: 7e690364d56c6f35 +Block 0025 [ 19]: 715ba6f8d92cfde8 +Block 0025 [ 20]: da002adec3a9aec0 +Block 0025 [ 21]: f7fd26727e3c39de +Block 0025 [ 22]: 5ce5effbabeb778b +Block 0025 [ 23]: 82488be85fa89f69 +Block 0025 [ 24]: ebf34f3cf31e872f +Block 0025 [ 25]: 904e3442eb91077d +Block 0025 [ 26]: 4ccb7af848995148 +Block 0025 [ 27]: 6674e0d65423b763 +Block 0025 [ 28]: 441ff96ad8206f58 +Block 0025 [ 29]: 94666bf2dfc0b99b +Block 0025 [ 30]: ed05edb80461172e +Block 0025 [ 31]: 48a4835d15f5dd8d +Block 0025 [ 32]: b7ba7f265b645ae8 +Block 0025 [ 33]: c28982cf0cc46f5f +Block 0025 [ 34]: 0047564c7e3a987b +Block 0025 [ 35]: 49c42f1ca2a0a3ee +Block 0025 [ 36]: 5fd7a85954ea8759 +Block 0025 [ 37]: d3a2e6ddb90e1819 +Block 0025 [ 38]: ca044a91edca1181 +Block 0025 [ 39]: 7befe3a3efd19c8c +Block 0025 [ 40]: 12e2593aa586a908 +Block 0025 [ 41]: ca3204fd0293daa7 +Block 0025 [ 42]: 6fffdd8f81c7ec5b +Block 0025 [ 43]: a5a9e710a5c35441 +Block 0025 [ 44]: 8fc140c3dd6a23b9 +Block 0025 [ 45]: 4dc101b965e2bf8b +Block 0025 [ 46]: bfe30265551dfb70 +Block 0025 [ 47]: 4325a4ab2bffde44 +Block 0025 [ 48]: 0873c9bb55796104 +Block 0025 [ 49]: 3d855f2ccb7886cf +Block 0025 [ 50]: a892ad2f13aa23fd +Block 0025 [ 51]: 7ec7f45b1c3a13a3 +Block 0025 [ 52]: 7933b1cf28b7e587 +Block 0025 [ 53]: fb261404744b4403 +Block 0025 [ 54]: 1ce9fbf19e0b05ed +Block 0025 [ 55]: 081e058ac89cf91b +Block 0025 [ 56]: 0f4c61900902f20e +Block 0025 [ 57]: 6e4e47d0a76c7b2f +Block 0025 [ 58]: 31dfad465737d2d6 +Block 0025 [ 59]: c4e565cd4db9cf80 +Block 0025 [ 60]: 0fc21868de584fed +Block 0025 [ 61]: cf4bc3bdde019366 +Block 0025 [ 62]: d4b6def2b28c6197 +Block 0025 [ 63]: 1e091aa94e9efee1 +Block 0025 [ 64]: 920ae1dfc602caa9 +Block 0025 [ 65]: b9e32b85330f06cf +Block 0025 [ 66]: 622903a2ba1f7401 +Block 0025 [ 67]: 376fc0c285b6e1d6 +Block 0025 [ 68]: 58262b60f7222c02 +Block 0025 [ 69]: 48963a834c84e786 +Block 0025 [ 70]: cbf03b6c03b3f0b2 +Block 0025 [ 71]: bffe850121f01632 +Block 0025 [ 72]: 74a2031f32512b24 +Block 0025 [ 73]: 4adcf0a16a0f52f3 +Block 0025 [ 74]: 657fbc2930fa5547 +Block 0025 [ 75]: 775a8a54e8a2b61c +Block 0025 [ 76]: 603cd60bf170030e +Block 0025 [ 77]: 601ec99f484a891f +Block 0025 [ 78]: b933410f3e524173 +Block 0025 [ 79]: d86f3e3c5a2ea17a +Block 0025 [ 80]: ca2303f8e28d86d4 +Block 0025 [ 81]: c94d7faa2359de02 +Block 0025 [ 82]: 6fe0c5ecd10dd8f7 +Block 0025 [ 83]: 132b13bc110fd6bb +Block 0025 [ 84]: 1396a58273222139 +Block 0025 [ 85]: b10ff9ffee965ea2 +Block 0025 [ 86]: 835e56180aec7730 +Block 0025 [ 87]: 7e845526c7c472b9 +Block 0025 [ 88]: cf559646d6e7acfe +Block 0025 [ 89]: 6da5fa01922bc97b +Block 0025 [ 90]: 8a7cecf7918a97f5 +Block 0025 [ 91]: 75c63598267982a4 +Block 0025 [ 92]: fb62647242501a21 +Block 0025 [ 93]: 053879ca2e32577c +Block 0025 [ 94]: 328874c4f6657677 +Block 0025 [ 95]: cd160a4827bac171 +Block 0025 [ 96]: 366fb60bdfd14ec8 +Block 0025 [ 97]: 53042bee2ee8eea9 +Block 0025 [ 98]: daab24de7ed4b56e +Block 0025 [ 99]: 618bbb25385e03e7 +Block 0025 [100]: be554b98dbfc2a9d +Block 0025 [101]: 4566911b80d8dc2c +Block 0025 [102]: 8b5305bdbcd6075b +Block 0025 [103]: 67133a756f6a4b94 +Block 0025 [104]: 8284f40064d78922 +Block 0025 [105]: 5cf6fd63cf1d566a +Block 0025 [106]: b0175f63f4ddde67 +Block 0025 [107]: d7fb740f72bbda6d +Block 0025 [108]: 3f826efe67b1be5f +Block 0025 [109]: f3dc52433918e9a7 +Block 0025 [110]: 5de0272794bbdc54 +Block 0025 [111]: 240198167e58db76 +Block 0025 [112]: ca61e16751058de5 +Block 0025 [113]: 69ed01fd9dfb4e30 +Block 0025 [114]: 23264aec15e29210 +Block 0025 [115]: 0ed5522a78def765 +Block 0025 [116]: da43bf7acbd3db76 +Block 0025 [117]: 1b08030a1e29657c +Block 0025 [118]: 4421fe09e2526c19 +Block 0025 [119]: c752a808ce58ef11 +Block 0025 [120]: a4a0ae7b4c27f551 +Block 0025 [121]: a9bd8741f2ce61bb +Block 0025 [122]: 6806af701aaaff8e +Block 0025 [123]: f51d43bad7d70d80 +Block 0025 [124]: b6ef49db4b4be794 +Block 0025 [125]: e36d78c39c512816 +Block 0025 [126]: cc32f44ae037a86b +Block 0025 [127]: 880fecf11ba54ced +Block 0026 [ 0]: 7ef468a64079cd9a +Block 0026 [ 1]: 8546dfe9d161c4bc +Block 0026 [ 2]: eebf928e3390334e +Block 0026 [ 3]: 7218cc9841e59f45 +Block 0026 [ 4]: 95d9e37c4b9a4f4d +Block 0026 [ 5]: 276db3f95e1261bf +Block 0026 [ 6]: a97405ae99bfaab7 +Block 0026 [ 7]: 58d5a4bab4709e48 +Block 0026 [ 8]: 7d53c7ee5ec47ccb +Block 0026 [ 9]: bd8064b37e9fcd44 +Block 0026 [ 10]: 838bda546d531773 +Block 0026 [ 11]: fe3e588ecb36d23d +Block 0026 [ 12]: 2bd509e8359fb68c +Block 0026 [ 13]: 21e808c5ccbbb67d +Block 0026 [ 14]: c8c63b5118c5b7bc +Block 0026 [ 15]: 5aa30e29e87723ed +Block 0026 [ 16]: 9bee04350c6ac26b +Block 0026 [ 17]: fd5f59a6868ee80a +Block 0026 [ 18]: d03cd60f128a4d38 +Block 0026 [ 19]: 319edf5ae1fd16c3 +Block 0026 [ 20]: 55fae0ac08942a8c +Block 0026 [ 21]: 48efd5deba981eda +Block 0026 [ 22]: 4a9a42f6929229b4 +Block 0026 [ 23]: 6e5250d853603705 +Block 0026 [ 24]: 470392f63cf8c80b +Block 0026 [ 25]: af637923901c26d7 +Block 0026 [ 26]: e0357745a3c135d9 +Block 0026 [ 27]: 69a1a5a1594c5498 +Block 0026 [ 28]: 8b33325678af02cf +Block 0026 [ 29]: df2c0c4935f133fb +Block 0026 [ 30]: 41517c2801176075 +Block 0026 [ 31]: b91c2a723d9c6a4f +Block 0026 [ 32]: c8f49391d970a150 +Block 0026 [ 33]: 611642a25e792a1f +Block 0026 [ 34]: 93551770566de5ff +Block 0026 [ 35]: 05c6a42cf2ae5314 +Block 0026 [ 36]: c87777b796c9bc1b +Block 0026 [ 37]: 6e4c8c8598220e5c +Block 0026 [ 38]: 63f141c6a0d2312d +Block 0026 [ 39]: 45e19d756e512b56 +Block 0026 [ 40]: 2b34021cd96cc4f4 +Block 0026 [ 41]: e3d41f9435cbab53 +Block 0026 [ 42]: 82bff43da2662c43 +Block 0026 [ 43]: 5fbf81d0f198a14d +Block 0026 [ 44]: 0719beae98c62ff9 +Block 0026 [ 45]: 3cf8075583d96a30 +Block 0026 [ 46]: 5011d98a15533b7e +Block 0026 [ 47]: 9bc8ea4f4c71754e +Block 0026 [ 48]: 6ea994994cc966d1 +Block 0026 [ 49]: cd5b3d21e82a4b3e +Block 0026 [ 50]: a82cc5d874e19644 +Block 0026 [ 51]: 75225bcee41db2c8 +Block 0026 [ 52]: 6f91ce2ee312bc16 +Block 0026 [ 53]: 8e3a411f853d1ee8 +Block 0026 [ 54]: 6e20aa263bb03ddf +Block 0026 [ 55]: 2bc22c49f82ac92a +Block 0026 [ 56]: 6834393a3a72cb2d +Block 0026 [ 57]: 2c15e7ee39881b9b +Block 0026 [ 58]: 3b680656e204c6f8 +Block 0026 [ 59]: 0db101ef83bc6e1d +Block 0026 [ 60]: 4ef271dcf28d5ad7 +Block 0026 [ 61]: b25d0a8e922b17cd +Block 0026 [ 62]: c029827e59818eed +Block 0026 [ 63]: 01c3c5fa5b1910a0 +Block 0026 [ 64]: 7e2acaf23c628008 +Block 0026 [ 65]: 3966da46acdbf674 +Block 0026 [ 66]: 6c546372f285eb81 +Block 0026 [ 67]: 4c64673f1bd15733 +Block 0026 [ 68]: ddc0115b4f88d8b2 +Block 0026 [ 69]: 6699aee29d277d58 +Block 0026 [ 70]: 7060e5e8708be4a6 +Block 0026 [ 71]: b4e995b146fbf8e9 +Block 0026 [ 72]: 6ca7a550c9676696 +Block 0026 [ 73]: c8aaae0e7ae2e6ec +Block 0026 [ 74]: de456377963d8cf0 +Block 0026 [ 75]: 8fc337a19a8f1ac8 +Block 0026 [ 76]: 3d2dfe4e4df1d79c +Block 0026 [ 77]: eda051c4a2c7b70a +Block 0026 [ 78]: 57cbaf017e6723ab +Block 0026 [ 79]: b049d3e6d213512d +Block 0026 [ 80]: 2c8412eaa5c44735 +Block 0026 [ 81]: 827939a1f4a276e8 +Block 0026 [ 82]: 1ae471fd346f7a74 +Block 0026 [ 83]: dfd457440025ce20 +Block 0026 [ 84]: 3a85730d2e41a58b +Block 0026 [ 85]: f31fb93979c8085f +Block 0026 [ 86]: 94b2247bf9bbc38a +Block 0026 [ 87]: 57e6e4d2fb9ae750 +Block 0026 [ 88]: 29f72e206e450dea +Block 0026 [ 89]: 98126e68984fba49 +Block 0026 [ 90]: 54908e7e85c5d297 +Block 0026 [ 91]: 0d904ba583bf36c7 +Block 0026 [ 92]: 3186f67cde1b92eb +Block 0026 [ 93]: 9546a09b767f715d +Block 0026 [ 94]: ed2ab1b74f1f424f +Block 0026 [ 95]: 9d9121f5252a10d5 +Block 0026 [ 96]: 8b6c6cda6565b693 +Block 0026 [ 97]: 6a8e539240a22900 +Block 0026 [ 98]: 40b4f95b2a231d63 +Block 0026 [ 99]: 6293633c33154160 +Block 0026 [100]: 96b28f631411950e +Block 0026 [101]: 67fe40c1aa95a7a1 +Block 0026 [102]: 37d54121b4d85920 +Block 0026 [103]: 75b5cbd8b8660c06 +Block 0026 [104]: 24ebb2de04d1114b +Block 0026 [105]: 5fc419f35e7ce336 +Block 0026 [106]: d4afdb18dca824cf +Block 0026 [107]: 293f5840856b1ec9 +Block 0026 [108]: f232d1b7074a32b8 +Block 0026 [109]: 6f1fc4541b484666 +Block 0026 [110]: 8d148a83d4e93398 +Block 0026 [111]: d8c832cb07658c49 +Block 0026 [112]: 6ad0e8f6d9daa36e +Block 0026 [113]: dda24c063ae01145 +Block 0026 [114]: 3bde319d36725fbc +Block 0026 [115]: f3b9a9454c05da6e +Block 0026 [116]: 06e186ddc78cf92d +Block 0026 [117]: 2a596ae91800204d +Block 0026 [118]: 212c7c706f943811 +Block 0026 [119]: ae7db514d3b24213 +Block 0026 [120]: 672e25c5cef9deb8 +Block 0026 [121]: 19d761c0b6076ad3 +Block 0026 [122]: be9b211c5366c41e +Block 0026 [123]: 0deda395bd9a27d4 +Block 0026 [124]: e791c020717c6e02 +Block 0026 [125]: d7f77e53b85a47ff +Block 0026 [126]: 6e33712b6beac4ac +Block 0026 [127]: a532ad317ce50370 +Block 0027 [ 0]: 9fa1c53b690e5115 +Block 0027 [ 1]: 8b37cc2741764653 +Block 0027 [ 2]: e8c49cf23c0f8cfa +Block 0027 [ 3]: 2bb24b419bd5e104 +Block 0027 [ 4]: 89fffe467a5cfc5e +Block 0027 [ 5]: 60fd2c56d6210a00 +Block 0027 [ 6]: dbfac4f4146bb1d4 +Block 0027 [ 7]: ac59d69f4bd2f4b3 +Block 0027 [ 8]: d49097043be118e3 +Block 0027 [ 9]: 25a7ae779e708584 +Block 0027 [ 10]: a53eddfb92e77aeb +Block 0027 [ 11]: bef96fb2ccdb40ad +Block 0027 [ 12]: f745b82dffd9f4ff +Block 0027 [ 13]: 30e1c89daa429f25 +Block 0027 [ 14]: d7a3c4a8a2adfe8f +Block 0027 [ 15]: 5caaeea3a87c46c4 +Block 0027 [ 16]: 7849920c43db9b8f +Block 0027 [ 17]: 7330761405e5eef6 +Block 0027 [ 18]: 3df683244cf7df08 +Block 0027 [ 19]: d876761a60146318 +Block 0027 [ 20]: 168b6e118598ef85 +Block 0027 [ 21]: 374310fa30d84885 +Block 0027 [ 22]: 100757baa01e6c74 +Block 0027 [ 23]: d542a23309d78ddb +Block 0027 [ 24]: 500e1ac576de3a31 +Block 0027 [ 25]: 68c6493eafc727d1 +Block 0027 [ 26]: 51c529a4cdaafd71 +Block 0027 [ 27]: 6c886eed1dcd2a9d +Block 0027 [ 28]: 76e816b102474317 +Block 0027 [ 29]: 5db645c2d8bbc3b5 +Block 0027 [ 30]: 528b633a10bff528 +Block 0027 [ 31]: 2eca05eeee7f445d +Block 0027 [ 32]: b90ff76fe52371b4 +Block 0027 [ 33]: 0da08131b4982cac +Block 0027 [ 34]: 82277c1a16645af4 +Block 0027 [ 35]: da2bc08daf4a5290 +Block 0027 [ 36]: a0832f040c393c7f +Block 0027 [ 37]: dccf4d0ce8f6ecd4 +Block 0027 [ 38]: db23ff4aa8381bea +Block 0027 [ 39]: 61bf2705ff3119f6 +Block 0027 [ 40]: 76f344f53ed13981 +Block 0027 [ 41]: eb01f42010398423 +Block 0027 [ 42]: 43a19e52956f565d +Block 0027 [ 43]: addbba697b6aafd4 +Block 0027 [ 44]: 96fb2ff3add663ce +Block 0027 [ 45]: 5641ffd5d86e93fc +Block 0027 [ 46]: 6fd4691920b273b4 +Block 0027 [ 47]: b81e5f93eca99d62 +Block 0027 [ 48]: 8d093429f1ff1d82 +Block 0027 [ 49]: aea6e5fbfcc25a52 +Block 0027 [ 50]: 62e1ebe136fa8dba +Block 0027 [ 51]: 15db85e69ba386cd +Block 0027 [ 52]: 527710ee9951122a +Block 0027 [ 53]: 0f091dfc4a9af619 +Block 0027 [ 54]: 3d84ef91adcdec8a +Block 0027 [ 55]: 343ebe2dd28417fe +Block 0027 [ 56]: 9be06f5b49a6f05e +Block 0027 [ 57]: f4b1e0dc0e81697e +Block 0027 [ 58]: 2c32e3ee4934a9c2 +Block 0027 [ 59]: c5abee7d81abe68a +Block 0027 [ 60]: aab7d4a83d0ced99 +Block 0027 [ 61]: d70d53f57205e491 +Block 0027 [ 62]: 543646a33d67ab52 +Block 0027 [ 63]: 9e7720bce3cb5286 +Block 0027 [ 64]: f1e849ce5c52f1ad +Block 0027 [ 65]: 8ab8eda5cd40c8fc +Block 0027 [ 66]: 52864bf8c065bbc5 +Block 0027 [ 67]: f6e11187c4bd5aa7 +Block 0027 [ 68]: bd39792abd351168 +Block 0027 [ 69]: ae6b7e3a6a100a79 +Block 0027 [ 70]: 713b081c7958b546 +Block 0027 [ 71]: e984cae7793fe035 +Block 0027 [ 72]: 1094841fa7eec293 +Block 0027 [ 73]: a49f3fed3d1697ff +Block 0027 [ 74]: 57b7a9aa5209c9f3 +Block 0027 [ 75]: 75dfa69fc876bdf5 +Block 0027 [ 76]: afd6ca990dc04546 +Block 0027 [ 77]: 650fe9377d9cebe4 +Block 0027 [ 78]: cc9cc3acdd5b8345 +Block 0027 [ 79]: 5b193656205729ff +Block 0027 [ 80]: 45e61b89a2e05f16 +Block 0027 [ 81]: a005d8298561714e +Block 0027 [ 82]: 1fa74ae4179734b2 +Block 0027 [ 83]: 2ee4f5fab9189036 +Block 0027 [ 84]: ef17041c685d0e40 +Block 0027 [ 85]: 5f92a508530ff0c0 +Block 0027 [ 86]: cfa7a375870e09e8 +Block 0027 [ 87]: 261f7ef8b9bfbff3 +Block 0027 [ 88]: cbe7e553a0cf2e7f +Block 0027 [ 89]: 39eb11ca144e77ca +Block 0027 [ 90]: de08863c98348c66 +Block 0027 [ 91]: 8fb79e25b74d0a9d +Block 0027 [ 92]: 7b589fc28e7e49f5 +Block 0027 [ 93]: 2b36a30651701013 +Block 0027 [ 94]: 33f3d35fac3e386a +Block 0027 [ 95]: 9b8232dd011c0cd9 +Block 0027 [ 96]: c222979853df7368 +Block 0027 [ 97]: a75437ef2e7ebee2 +Block 0027 [ 98]: ca7290f054ee32ff +Block 0027 [ 99]: f7f615bb41c13909 +Block 0027 [100]: 98a41dab04c916e3 +Block 0027 [101]: 56bd9abe4ffea529 +Block 0027 [102]: ab9e8c1838f9140a +Block 0027 [103]: 73b7e554d7085f0c +Block 0027 [104]: aa5bbfdc2d18403a +Block 0027 [105]: e951d7c31bbfda11 +Block 0027 [106]: 929bd0980cc9638b +Block 0027 [107]: 52a2f3b285fac8be +Block 0027 [108]: 59fce169b2718b88 +Block 0027 [109]: 156cb6fa586ac342 +Block 0027 [110]: 16318cd4bd24716e +Block 0027 [111]: 7ca17d055bcd7b2c +Block 0027 [112]: 32053bfc51617177 +Block 0027 [113]: 28beddc1cdd676e7 +Block 0027 [114]: b2255a813a0861e3 +Block 0027 [115]: 4757a1408edd8347 +Block 0027 [116]: 5c92919ddd014b15 +Block 0027 [117]: 7ff74e029790456d +Block 0027 [118]: a4c0c1e2e59ce89b +Block 0027 [119]: 7f9713ca32bc0ba5 +Block 0027 [120]: a614204dcc6463a9 +Block 0027 [121]: 0cb7f1d92565704e +Block 0027 [122]: 5a26f2a6a5d8d1f3 +Block 0027 [123]: 09e8fbb79f46d15a +Block 0027 [124]: 60cba24dbc7a69ea +Block 0027 [125]: ddae6302e17afaf7 +Block 0027 [126]: 8fae3a02a0cd58ae +Block 0027 [127]: 739eabc30024614d +Block 0028 [ 0]: 0e85cca41243c749 +Block 0028 [ 1]: 40ba0b7c7b17a399 +Block 0028 [ 2]: 65ac8f2a7be3503c +Block 0028 [ 3]: b87f91c2b1c410b9 +Block 0028 [ 4]: 054c671cdf78fed8 +Block 0028 [ 5]: 5d3ec01ba37df53b +Block 0028 [ 6]: a41996c0d74d1d4f +Block 0028 [ 7]: bf981d07080966b7 +Block 0028 [ 8]: fb38da158b87f305 +Block 0028 [ 9]: 5c144628680ea65f +Block 0028 [ 10]: 8155b6fea71b9ca6 +Block 0028 [ 11]: a7e86b495469fd06 +Block 0028 [ 12]: eab1fc3d6ef06c16 +Block 0028 [ 13]: ed27acee6714900c +Block 0028 [ 14]: ab257e11a32f3e2b +Block 0028 [ 15]: 77edcc29b66e91dc +Block 0028 [ 16]: 7817bf469d8cf51e +Block 0028 [ 17]: 29d5b4a8f4d782e3 +Block 0028 [ 18]: 8a7ecb0fe133bd77 +Block 0028 [ 19]: dfcd56d9f51ee53d +Block 0028 [ 20]: 1bf3d77568b1cb75 +Block 0028 [ 21]: c751f52caa4356a6 +Block 0028 [ 22]: 39a6b3286a5c30e8 +Block 0028 [ 23]: c1e0704b2b8456b1 +Block 0028 [ 24]: cb6e541ae789f116 +Block 0028 [ 25]: 7374b85accd6ec1a +Block 0028 [ 26]: f88601a3d9333dec +Block 0028 [ 27]: 5aa74417a8bbd5e7 +Block 0028 [ 28]: b7b24ec3a0179349 +Block 0028 [ 29]: b899ea108a55cb30 +Block 0028 [ 30]: cf36370deb66ab32 +Block 0028 [ 31]: c62d26777d0cf3c0 +Block 0028 [ 32]: a859b878ba83a08b +Block 0028 [ 33]: a87be8e682613211 +Block 0028 [ 34]: d01855cabfba05be +Block 0028 [ 35]: a6263d2dc62ce85f +Block 0028 [ 36]: dc69da3a993bcc2c +Block 0028 [ 37]: 83b472fba8ccfc63 +Block 0028 [ 38]: e0d64b25c699d08f +Block 0028 [ 39]: 584d5affcacb1e9e +Block 0028 [ 40]: b98d206a1f3544ea +Block 0028 [ 41]: 26b5ec7a7c297725 +Block 0028 [ 42]: cd96ab285713d99f +Block 0028 [ 43]: df492f93837f09f2 +Block 0028 [ 44]: cb3c9ff1fe66ada8 +Block 0028 [ 45]: bb006aedfa2ea6ad +Block 0028 [ 46]: e3939acaf8abcd32 +Block 0028 [ 47]: 4b14c3952070da49 +Block 0028 [ 48]: 574efbbefdf497ea +Block 0028 [ 49]: af01ce5b7378b06f +Block 0028 [ 50]: 20a9929b5bdf186a +Block 0028 [ 51]: ea42fe634d665702 +Block 0028 [ 52]: 6b0bd4f2912b8b3e +Block 0028 [ 53]: 814db8e14f32ae57 +Block 0028 [ 54]: e69ae15f95df680e +Block 0028 [ 55]: 425a977565c863f7 +Block 0028 [ 56]: 973c97da3ba71ff9 +Block 0028 [ 57]: d7143cb537a9f71d +Block 0028 [ 58]: 73439409660c5c38 +Block 0028 [ 59]: c8430dc386fc9d15 +Block 0028 [ 60]: 0c67cd6e6fff1e63 +Block 0028 [ 61]: 62c0256fde5856ff +Block 0028 [ 62]: 3e25b0c0db1e3416 +Block 0028 [ 63]: b2187c58176ae515 +Block 0028 [ 64]: 8dd7227f711ffd7e +Block 0028 [ 65]: fcd1182ce333eb1e +Block 0028 [ 66]: 1afd2879ab103888 +Block 0028 [ 67]: ea6db3a5935c5592 +Block 0028 [ 68]: 86f39e2e75bef366 +Block 0028 [ 69]: b1d9454de3de9e74 +Block 0028 [ 70]: 37b20202c244827b +Block 0028 [ 71]: 1ebe94e672421dcb +Block 0028 [ 72]: 92129c6d6bfbeef1 +Block 0028 [ 73]: a6caab1ac6da487b +Block 0028 [ 74]: 19d015236d62b791 +Block 0028 [ 75]: 275f059bdb96f81c +Block 0028 [ 76]: aa6fb609adb40425 +Block 0028 [ 77]: 46770ee193d5f0ee +Block 0028 [ 78]: 3013c7b5504eefc0 +Block 0028 [ 79]: 37ebc9d99ab31363 +Block 0028 [ 80]: 37d64d1d0b77f7e7 +Block 0028 [ 81]: baf4d2355c9e3f91 +Block 0028 [ 82]: 713c207bd98f5bad +Block 0028 [ 83]: 4adf2c66093519a0 +Block 0028 [ 84]: 7d90ba3ac0b79e34 +Block 0028 [ 85]: 960e9309c6ef6ff6 +Block 0028 [ 86]: 399f055a58788bdb +Block 0028 [ 87]: 8ee4b1a6799cd390 +Block 0028 [ 88]: 3099856d626a230c +Block 0028 [ 89]: c1fe40bb28b691f7 +Block 0028 [ 90]: afe7e4123bc59379 +Block 0028 [ 91]: b08b56a71ef1bc17 +Block 0028 [ 92]: e910f52504e7136e +Block 0028 [ 93]: fa26cfc79fb74284 +Block 0028 [ 94]: 553ba6b7d0429bfd +Block 0028 [ 95]: 340061b6aa853ae3 +Block 0028 [ 96]: 191cdde0fd8de140 +Block 0028 [ 97]: 6ddb0e9ffdd173c8 +Block 0028 [ 98]: 67d0dfba86c27796 +Block 0028 [ 99]: 94ec1e01b3bd8632 +Block 0028 [100]: 31867525f8bc8238 +Block 0028 [101]: 65e995ab9307b566 +Block 0028 [102]: 377b3b891df93943 +Block 0028 [103]: a3b9fdce60c4261d +Block 0028 [104]: f08bc6604b98f79d +Block 0028 [105]: baec2e81d8b364a4 +Block 0028 [106]: 02f2edac0f508601 +Block 0028 [107]: f82d55936f52ebf4 +Block 0028 [108]: 2fa3ef0957aec0f5 +Block 0028 [109]: b1f637bbedb476d8 +Block 0028 [110]: bb5dc2a1eb0e9f7b +Block 0028 [111]: 9e67d8c0f07623f6 +Block 0028 [112]: 65f009064ff0e9c3 +Block 0028 [113]: 5d08017b855e7be7 +Block 0028 [114]: 5d8eed96a64db23d +Block 0028 [115]: 3512927f50b1b1e2 +Block 0028 [116]: dc15de89063b4012 +Block 0028 [117]: c4679f41c6c56a6e +Block 0028 [118]: 0a4e0b7e365782bb +Block 0028 [119]: 9b7444a953c6d6ba +Block 0028 [120]: 64d1f446d97216fe +Block 0028 [121]: aae982e26bbd3da9 +Block 0028 [122]: ef1cd05ad517ed77 +Block 0028 [123]: 97a7dac0ddaf58dc +Block 0028 [124]: b241dd4508b65f10 +Block 0028 [125]: ca9aa32702f4ad94 +Block 0028 [126]: 0b5df4481d1655ac +Block 0028 [127]: 1f127ce283eb9aa0 +Block 0029 [ 0]: b28d5deaef96e66a +Block 0029 [ 1]: 60faf86916b45b57 +Block 0029 [ 2]: 4e5fa33acc5404c5 +Block 0029 [ 3]: 9fd6a17e93d035d6 +Block 0029 [ 4]: 0893d077e4b8d174 +Block 0029 [ 5]: f03e7f804936297f +Block 0029 [ 6]: cc76ddd3b1f33443 +Block 0029 [ 7]: ca571fde36d623c2 +Block 0029 [ 8]: 6c90fdc13ceaaffa +Block 0029 [ 9]: d9e61e9c12a5f434 +Block 0029 [ 10]: c1ad29dcbb355739 +Block 0029 [ 11]: 89c3d212b96b585a +Block 0029 [ 12]: edc5d46da39f3664 +Block 0029 [ 13]: 76f1b5a61c0123f7 +Block 0029 [ 14]: fe328e8203051cc3 +Block 0029 [ 15]: 9bd4e4ee7952ad46 +Block 0029 [ 16]: a1d2164a687d7afe +Block 0029 [ 17]: 71d22e2206efe720 +Block 0029 [ 18]: dd570188cb4768ac +Block 0029 [ 19]: 73e76f871a564857 +Block 0029 [ 20]: 19984cb80773d41a +Block 0029 [ 21]: 1e5a525f66c2bfab +Block 0029 [ 22]: 9eb9d711dc54bdfe +Block 0029 [ 23]: 80202120abb1f2af +Block 0029 [ 24]: 762aad6301f0f687 +Block 0029 [ 25]: 924a11ab5bdd8d6d +Block 0029 [ 26]: 71a2bc27939e981b +Block 0029 [ 27]: bf6cd48e38e6fecb +Block 0029 [ 28]: c33e0fa6f3853d62 +Block 0029 [ 29]: 9cec1adb998c40e7 +Block 0029 [ 30]: 456c0560470631cc +Block 0029 [ 31]: cbc4831ba9510433 +Block 0029 [ 32]: df115dc56383ef17 +Block 0029 [ 33]: 3ae2401e3b9d1071 +Block 0029 [ 34]: 529a3c7e240815cc +Block 0029 [ 35]: 60e469e9b79ecfec +Block 0029 [ 36]: 48978c13a0db4353 +Block 0029 [ 37]: 2807c4ccad614aba +Block 0029 [ 38]: 36bc5a395ea99a2d +Block 0029 [ 39]: 2f5eeb78c5a901a3 +Block 0029 [ 40]: b10fc4c58c21db64 +Block 0029 [ 41]: 976836b2e1e3046f +Block 0029 [ 42]: 648d34fcc495dfff +Block 0029 [ 43]: cf4f898d00641f63 +Block 0029 [ 44]: 768f15f98e84fb17 +Block 0029 [ 45]: 6e5a7e27aa0874ee +Block 0029 [ 46]: fc9b1390cb33f4fc +Block 0029 [ 47]: 8c916f3ee985266a +Block 0029 [ 48]: ac4f0564ad44f4ec +Block 0029 [ 49]: 098adc10cdeef1d4 +Block 0029 [ 50]: ffb0f1701437ffbc +Block 0029 [ 51]: a4ce31038dfcd250 +Block 0029 [ 52]: 10a1f6563a54453a +Block 0029 [ 53]: f17f021dc41171e2 +Block 0029 [ 54]: 6877dec2a510de4d +Block 0029 [ 55]: f035c7817b56646a +Block 0029 [ 56]: 8d2dc75ed87d1f09 +Block 0029 [ 57]: def747cce81ffedb +Block 0029 [ 58]: a404e5187e7c88e9 +Block 0029 [ 59]: c8a8f0f2eee0ab45 +Block 0029 [ 60]: 5177d3db538e7006 +Block 0029 [ 61]: 2033765493f54c07 +Block 0029 [ 62]: d25e03408762825c +Block 0029 [ 63]: bf358da4de74d44f +Block 0029 [ 64]: 7169d9bac3f6b089 +Block 0029 [ 65]: 34aa5592008cb63e +Block 0029 [ 66]: 648460c51b3eb8e2 +Block 0029 [ 67]: 745f4d631c28ed67 +Block 0029 [ 68]: 15b07807de3167ec +Block 0029 [ 69]: b271a3455f6ad429 +Block 0029 [ 70]: 8a4c7a688f53849b +Block 0029 [ 71]: d47b0059ca698b91 +Block 0029 [ 72]: 5401fcaa6e1613f5 +Block 0029 [ 73]: eab2ed41c82503ed +Block 0029 [ 74]: b651b03e13eb8116 +Block 0029 [ 75]: 22441c0d3152627f +Block 0029 [ 76]: 086b49b7fd79cd37 +Block 0029 [ 77]: 6a2072fd35ec9ffd +Block 0029 [ 78]: d60ad9b09b6f53a2 +Block 0029 [ 79]: bed980f12e3e9942 +Block 0029 [ 80]: a8d2311811115bd4 +Block 0029 [ 81]: 047607dbd328a4ab +Block 0029 [ 82]: 57929ac9e5d669ac +Block 0029 [ 83]: 17521cb6eebc4cbd +Block 0029 [ 84]: ec29c8b11f03b546 +Block 0029 [ 85]: 8c3207b69a2e03fd +Block 0029 [ 86]: b6f8deb6a899dd69 +Block 0029 [ 87]: 50eb7a89a30eb2a9 +Block 0029 [ 88]: 2f2eda5c8d005e89 +Block 0029 [ 89]: b925767aa40ed8d0 +Block 0029 [ 90]: c0b7aae715772ac5 +Block 0029 [ 91]: dccbd919a7913b20 +Block 0029 [ 92]: 1d0904985d927067 +Block 0029 [ 93]: ea17fad0c1205cf5 +Block 0029 [ 94]: c79c19bab0477b58 +Block 0029 [ 95]: e2f4b87c67079492 +Block 0029 [ 96]: 648f8e57ca950544 +Block 0029 [ 97]: 09a16d4452a5aeff +Block 0029 [ 98]: 1020c0d715864a87 +Block 0029 [ 99]: ef4571edec273ee3 +Block 0029 [100]: bbfc9532f778a70e +Block 0029 [101]: 764cf7bb9dd250e6 +Block 0029 [102]: fd2ee8be4998c8bf +Block 0029 [103]: 400a72a9e344c2fa +Block 0029 [104]: 90acd7a2f8016e3c +Block 0029 [105]: a1fd46e9f88ef794 +Block 0029 [106]: fbc375521db9ff27 +Block 0029 [107]: 426e56c2b8dfa489 +Block 0029 [108]: e501faec2ebe5e48 +Block 0029 [109]: 88d8cb1d2b938fb1 +Block 0029 [110]: 22481c28a857b844 +Block 0029 [111]: 0f48a0190e3998f8 +Block 0029 [112]: b987462fcbd0d42d +Block 0029 [113]: 92b894ed5ae61019 +Block 0029 [114]: 96fef58b74fd323e +Block 0029 [115]: 96384b5f636f7fb4 +Block 0029 [116]: 1fe75196ac057245 +Block 0029 [117]: 667a495e0fcf1af3 +Block 0029 [118]: 3d0b9fc737dc4f2f +Block 0029 [119]: b1395938051b5c3b +Block 0029 [120]: 3e8dcddd601ec5ef +Block 0029 [121]: cbba85b46d84cbca +Block 0029 [122]: ea62a35c8d28304e +Block 0029 [123]: ebedde4456cf597f +Block 0029 [124]: a333b258a27b5373 +Block 0029 [125]: 6f4f7c2c51ebbf33 +Block 0029 [126]: d542eff31f159567 +Block 0029 [127]: 6869d4daa5acd753 +Block 0030 [ 0]: b0e5888ede5c8dac +Block 0030 [ 1]: 2947e0c66206b871 +Block 0030 [ 2]: 931942ce42ad27d6 +Block 0030 [ 3]: 3dd35c71fa980316 +Block 0030 [ 4]: b549254e041de1f8 +Block 0030 [ 5]: 288a295329a1bdae +Block 0030 [ 6]: af2667951e3fce86 +Block 0030 [ 7]: fc7543071c09d556 +Block 0030 [ 8]: 4957f01ef9fe1ffb +Block 0030 [ 9]: be316c502ec520ed +Block 0030 [ 10]: ece84265d2ef9b97 +Block 0030 [ 11]: 4eaa0d6c6bad20de +Block 0030 [ 12]: 7ca1f307b296c8e8 +Block 0030 [ 13]: c4e32d348044f957 +Block 0030 [ 14]: 50697fda97ed01e5 +Block 0030 [ 15]: cd2a914e1a30208a +Block 0030 [ 16]: 3227da448a87316e +Block 0030 [ 17]: 8896e1c09e53ac5e +Block 0030 [ 18]: 9a02a17295caac6e +Block 0030 [ 19]: fe260353800fb2c5 +Block 0030 [ 20]: 98fe9a5abbee7323 +Block 0030 [ 21]: d2e465ad6ff6522a +Block 0030 [ 22]: dc1ec4681a531d77 +Block 0030 [ 23]: a9be825083445307 +Block 0030 [ 24]: 20a55e7ef381eaad +Block 0030 [ 25]: 9329bb7819768457 +Block 0030 [ 26]: 0f244df63d40188f +Block 0030 [ 27]: b3dd7873d937c70c +Block 0030 [ 28]: af9f93785f756d37 +Block 0030 [ 29]: c797db32266d8ce2 +Block 0030 [ 30]: 35cf4b324e67541b +Block 0030 [ 31]: 01844a32e3bfd33d +Block 0030 [ 32]: fd342870363d3422 +Block 0030 [ 33]: 8c7dd1a49645c4a3 +Block 0030 [ 34]: 24a8f8142ad33503 +Block 0030 [ 35]: e2ae44a3ae5e7af6 +Block 0030 [ 36]: 8028ac5f745267a7 +Block 0030 [ 37]: b690a9a4bc11258d +Block 0030 [ 38]: 2ff9c51288b1e54f +Block 0030 [ 39]: c65ab253f9eddfb2 +Block 0030 [ 40]: ae808cc2f3522ea8 +Block 0030 [ 41]: b8523a531b8ee3de +Block 0030 [ 42]: eb10ca13497f0a14 +Block 0030 [ 43]: 0234eb8439b05aa1 +Block 0030 [ 44]: 99ae2d652ab5f6f7 +Block 0030 [ 45]: ee86a5751b6be154 +Block 0030 [ 46]: b317c57e22d2fd04 +Block 0030 [ 47]: 8e525bd89823545e +Block 0030 [ 48]: 6db14c7cce51c804 +Block 0030 [ 49]: e59635843f833bbc +Block 0030 [ 50]: 408d78e00bd38918 +Block 0030 [ 51]: 332152358dcd8d8b +Block 0030 [ 52]: 2e4f4081eef49dbb +Block 0030 [ 53]: fc17367edefa01f4 +Block 0030 [ 54]: 8e88915176024a3e +Block 0030 [ 55]: 6ae1773750423a1a +Block 0030 [ 56]: 049e6661027076f1 +Block 0030 [ 57]: da464aa051508136 +Block 0030 [ 58]: 668a19912111ba4b +Block 0030 [ 59]: 4fc0f8758e6b072b +Block 0030 [ 60]: 9249479ec4f9a25b +Block 0030 [ 61]: e1b761f5f33f625a +Block 0030 [ 62]: 66a54f4afac4195f +Block 0030 [ 63]: 36f04e02d4f3c336 +Block 0030 [ 64]: 1a322be91f026c16 +Block 0030 [ 65]: ecb88344974e5267 +Block 0030 [ 66]: 287435939e643bfd +Block 0030 [ 67]: e58ee2cc81e2327b +Block 0030 [ 68]: 4775f9b50e042d9c +Block 0030 [ 69]: b3599c38d982a55f +Block 0030 [ 70]: 8d0a150207232f9c +Block 0030 [ 71]: 586c4528d0d00293 +Block 0030 [ 72]: 3d913208cc402a16 +Block 0030 [ 73]: 9aae0a4db183400b +Block 0030 [ 74]: 3fce4b4358d6f960 +Block 0030 [ 75]: e2c34cae7121c6fa +Block 0030 [ 76]: fb6066a5eec05661 +Block 0030 [ 77]: 19e3f805f7f395b3 +Block 0030 [ 78]: ea57f581bb90bd1e +Block 0030 [ 79]: 4403ddb3d5d88d54 +Block 0030 [ 80]: 9ec5620c2650cada +Block 0030 [ 81]: e187151963499d27 +Block 0030 [ 82]: e1e490016d3e7a90 +Block 0030 [ 83]: 47dba15fb3114a6a +Block 0030 [ 84]: 00e6713e3524748c +Block 0030 [ 85]: 83830560126cdc8d +Block 0030 [ 86]: 8b9795d20eba6712 +Block 0030 [ 87]: 1f8f0e4cabdf4a19 +Block 0030 [ 88]: d5dbaee140cef589 +Block 0030 [ 89]: 592578e759114087 +Block 0030 [ 90]: eccc40aba3284be3 +Block 0030 [ 91]: 4b02c4c91e5ed750 +Block 0030 [ 92]: d6620771f12fdb1d +Block 0030 [ 93]: f1bd112af7f6a8e8 +Block 0030 [ 94]: f47bfff0211edb2f +Block 0030 [ 95]: e131d353a0967967 +Block 0030 [ 96]: 65aed7d87586ba45 +Block 0030 [ 97]: f15197b40f0b7b6d +Block 0030 [ 98]: 54e06f25fe4ee906 +Block 0030 [ 99]: 34b01354129382ec +Block 0030 [100]: c7f6988356e5d16e +Block 0030 [101]: cd5f18759d23da4c +Block 0030 [102]: a53a9b98e51aa5d7 +Block 0030 [103]: 9dcaaa20febf21d0 +Block 0030 [104]: 15d188f2c06e0fdd +Block 0030 [105]: 3df0c897dd56961f +Block 0030 [106]: 214e5774a75128c2 +Block 0030 [107]: 1f3d964be08e22c9 +Block 0030 [108]: 7e2da6a44beeba29 +Block 0030 [109]: 794b8f5662cd37fc +Block 0030 [110]: 87e1930746ed7aba +Block 0030 [111]: 63b38bc439afc3f8 +Block 0030 [112]: a4974dbb47bd4ddf +Block 0030 [113]: d8c3107a98637538 +Block 0030 [114]: e7bf1c42db1a76d9 +Block 0030 [115]: c40c2a46939cbfec +Block 0030 [116]: 2f9a1d4bda4a7f87 +Block 0030 [117]: a1f04a1cf57bee91 +Block 0030 [118]: 2c80d3b0b53a4ff8 +Block 0030 [119]: 6780c97b92b320fc +Block 0030 [120]: 6ffad7bf7a3cef66 +Block 0030 [121]: c3ea5d7dcda539e2 +Block 0030 [122]: a0ce5960ccb716e3 +Block 0030 [123]: 14e7d5d9cc4b77bc +Block 0030 [124]: 873764de6fc77a4f +Block 0030 [125]: d2e5faef31dafe08 +Block 0030 [126]: d2480de38d2bf7cb +Block 0030 [127]: 0508ce05f2d3c998 +Block 0031 [ 0]: 0be96ca10d034a45 +Block 0031 [ 1]: 9575d2e4602f4318 +Block 0031 [ 2]: 89214d75d56ed403 +Block 0031 [ 3]: 2cc7abbfb9839016 +Block 0031 [ 4]: 8f7133d96eb95c09 +Block 0031 [ 5]: 5fec17150c93946a +Block 0031 [ 6]: 04d71991c57dbe81 +Block 0031 [ 7]: 2b5ff0848d9af7c4 +Block 0031 [ 8]: a582464dd6a0ea81 +Block 0031 [ 9]: 4dd7a4072a85a7aa +Block 0031 [ 10]: 5ac584683d0796f8 +Block 0031 [ 11]: 441bbbff03f42a0f +Block 0031 [ 12]: bbdce2a42ef826de +Block 0031 [ 13]: d042fda562e0bb63 +Block 0031 [ 14]: 361d43ee2c58c5c4 +Block 0031 [ 15]: 7de686cf2d145af9 +Block 0031 [ 16]: 6ce7323d894eb8cc +Block 0031 [ 17]: 1547f88fc60a49ae +Block 0031 [ 18]: f9a6d4fd04247a06 +Block 0031 [ 19]: ab25c7afa49b95f8 +Block 0031 [ 20]: 3e7b0916c93b6e61 +Block 0031 [ 21]: 18da624648ab23b9 +Block 0031 [ 22]: 59e1d686864cf4ee +Block 0031 [ 23]: a02fac31694739c1 +Block 0031 [ 24]: 785530b6ae946af4 +Block 0031 [ 25]: 6b894bacaa6489ac +Block 0031 [ 26]: 22d346de32ad482d +Block 0031 [ 27]: 730aeb618656de77 +Block 0031 [ 28]: e9286e648c915180 +Block 0031 [ 29]: 48e61c353897c210 +Block 0031 [ 30]: c699de54ca1fb7f8 +Block 0031 [ 31]: 26e5dd847fcbc9e5 +Block 0031 [ 32]: 3ec9afd124b60527 +Block 0031 [ 33]: 7a6e5ae14fd233ed +Block 0031 [ 34]: d498d8fbd24c99a2 +Block 0031 [ 35]: 68f63c8302d0b2be +Block 0031 [ 36]: 92aa88c5af73ddcf +Block 0031 [ 37]: 33bad457727e53c1 +Block 0031 [ 38]: bba23119ee8d666f +Block 0031 [ 39]: d86b119eec24e821 +Block 0031 [ 40]: 1465044ba63b7eb1 +Block 0031 [ 41]: 89f0d0319c93d477 +Block 0031 [ 42]: bdaf399c54254189 +Block 0031 [ 43]: 4d8bdefbcc8e8c41 +Block 0031 [ 44]: 7bf584eac7a5b05d +Block 0031 [ 45]: f485dc24ad6145cf +Block 0031 [ 46]: 5b3dd93acc2f39f4 +Block 0031 [ 47]: b409d73cfacb198c +Block 0031 [ 48]: c7cc71f41e692bf6 +Block 0031 [ 49]: cc7fe606a9c98628 +Block 0031 [ 50]: 65a1bdefcc16e8b3 +Block 0031 [ 51]: bcf903babebec896 +Block 0031 [ 52]: 14195ac57e7acef3 +Block 0031 [ 53]: a17ad05681735026 +Block 0031 [ 54]: 83983688b4510a11 +Block 0031 [ 55]: 391b7ecf135fccf9 +Block 0031 [ 56]: 16c862996731d2e9 +Block 0031 [ 57]: 11755979836c247a +Block 0031 [ 58]: ec206587fd6e429b +Block 0031 [ 59]: c6929ef1d28fa1bb +Block 0031 [ 60]: 1a5a684997bed207 +Block 0031 [ 61]: 5af629a8bab5430f +Block 0031 [ 62]: 4f970b23c03c2a16 +Block 0031 [ 63]: db8874377f4d472f +Block 0031 [ 64]: 0a2a27ae4a441659 +Block 0031 [ 65]: d9ae804b74a44141 +Block 0031 [ 66]: b59b24aa9b2a0c71 +Block 0031 [ 67]: b108f0eee97f2e57 +Block 0031 [ 68]: 08a4ed01afb97547 +Block 0031 [ 69]: 6290765dcecd698c +Block 0031 [ 70]: f979a05daa8d8585 +Block 0031 [ 71]: 33aba4bbc37fdc4b +Block 0031 [ 72]: 0539e40be7d9b206 +Block 0031 [ 73]: 8a59244b8a0debb7 +Block 0031 [ 74]: cb223a21caf3211e +Block 0031 [ 75]: e93e6821e67d18a9 +Block 0031 [ 76]: 10b2e28b612beea9 +Block 0031 [ 77]: bac404af0b69285a +Block 0031 [ 78]: b447cd291a0a7376 +Block 0031 [ 79]: 47a74d8f58347ab5 +Block 0031 [ 80]: 4a48960ce6a6f756 +Block 0031 [ 81]: 606f7c3dfd074823 +Block 0031 [ 82]: 2076b15081d66c1e +Block 0031 [ 83]: 9c4cad0f6c5fbc82 +Block 0031 [ 84]: d0822b2857eca2df +Block 0031 [ 85]: de651eeb74c86bc8 +Block 0031 [ 86]: 2adc4589b575fb47 +Block 0031 [ 87]: 0defd70a578c0f1b +Block 0031 [ 88]: 165f5c7899be2a2a +Block 0031 [ 89]: 6c235e2602669359 +Block 0031 [ 90]: 1a7b3c2830c1c249 +Block 0031 [ 91]: 2ae61f42fba7c357 +Block 0031 [ 92]: a3e3134ac362997a +Block 0031 [ 93]: 612de1e90e7d2665 +Block 0031 [ 94]: 6a98f405d60a5897 +Block 0031 [ 95]: da640cf46db9f3ad +Block 0031 [ 96]: 192189ab2fce097c +Block 0031 [ 97]: 980c4190f2bdff0e +Block 0031 [ 98]: 2af5f4959ffe8833 +Block 0031 [ 99]: b21d820700a31cc1 +Block 0031 [100]: 6b7cef3303925760 +Block 0031 [101]: b7f918936d0a977c +Block 0031 [102]: 7516ea298918042d +Block 0031 [103]: 3093f3755c9ad8ac +Block 0031 [104]: d55b8196194f1851 +Block 0031 [105]: 5b13af0fcc6dd9fb +Block 0031 [106]: 48ab25b261495bd0 +Block 0031 [107]: f706bc4b314d3605 +Block 0031 [108]: 9dc7d9998834723f +Block 0031 [109]: b374304d5060f92e +Block 0031 [110]: b8cbfaa4f3d7f622 +Block 0031 [111]: a39e300ed046f5d3 +Block 0031 [112]: b5ba736e0e3ad706 +Block 0031 [113]: 4fc2a74746529f60 +Block 0031 [114]: 75f4c5700bb63dfc +Block 0031 [115]: 8879fe7c00cb6666 +Block 0031 [116]: 58164fb0826c7345 +Block 0031 [117]: 7f9ca9b024878a8e +Block 0031 [118]: 3ee1db46ada2e47d +Block 0031 [119]: 0c76e6496a69ad8b +Block 0031 [120]: 890e19b75bed5274 +Block 0031 [121]: d1105605f9410829 +Block 0031 [122]: a30e7a92069a2a6b +Block 0031 [123]: 175bc756d16f1316 +Block 0031 [124]: e4274fd675d1e1d6 +Block 0031 [125]: 903fffb7c4a14c98 +Block 0031 [126]: 7e5db55def471966 +Block 0031 [127]: 421b3c6e9555b79d + + After pass 2: +Block 0000 [ 0]: af2a8bd8482c2f11 +Block 0000 [ 1]: 785442294fa55e6d +Block 0000 [ 2]: 9256a768529a7f96 +Block 0000 [ 3]: 25a1c1f5bb953766 +Block 0000 [ 4]: 72a9cd9a10886cd8 +Block 0000 [ 5]: 3ecaa9543eb7af4f +Block 0000 [ 6]: 15ee21ef99126afa +Block 0000 [ 7]: d096e22d0fdccbed +Block 0000 [ 8]: 98695dc49460ec60 +Block 0000 [ 9]: ab044a53cf328972 +Block 0000 [ 10]: a8f4132856b85100 +Block 0000 [ 11]: e4e16ec3f4b0a8e4 +Block 0000 [ 12]: 8ffc55592cd030ce +Block 0000 [ 13]: 4ce7804c886fdefa +Block 0000 [ 14]: b023146da6402293 +Block 0000 [ 15]: 856585f1c5c743f1 +Block 0000 [ 16]: 718fa6455c5781f9 +Block 0000 [ 17]: db0177f7e7dcdc24 +Block 0000 [ 18]: 59646c865b04120d +Block 0000 [ 19]: 42fafc9a487ab374 +Block 0000 [ 20]: 7734cee2193a300a +Block 0000 [ 21]: ed753f1dc5975edd +Block 0000 [ 22]: 0f2ef8f86bc502e2 +Block 0000 [ 23]: 523d9a809c797111 +Block 0000 [ 24]: f8dccc9247fb54b3 +Block 0000 [ 25]: 5e75f97947c4f9ae +Block 0000 [ 26]: 8770611909c9eb72 +Block 0000 [ 27]: 01c898af62ec5a22 +Block 0000 [ 28]: a1acad245dec85df +Block 0000 [ 29]: d5d6e3f14ff07f69 +Block 0000 [ 30]: c98f44f03cc8540d +Block 0000 [ 31]: e9eff12cfc7ac7b3 +Block 0000 [ 32]: 696308a7c4841e57 +Block 0000 [ 33]: fa6699460fe0dad0 +Block 0000 [ 34]: b00c52019aaba84e +Block 0000 [ 35]: e8c46902a1a082c0 +Block 0000 [ 36]: c463b9a06f7bfe1c +Block 0000 [ 37]: 5f1588d9124740cc +Block 0000 [ 38]: 8a3845857d8e6450 +Block 0000 [ 39]: 098b1d2b3083364e +Block 0000 [ 40]: 2bdacbc5d75a3796 +Block 0000 [ 41]: 5fe02a54a1d09388 +Block 0000 [ 42]: 9dd25924ab01fd49 +Block 0000 [ 43]: 28fc235c36a67e69 +Block 0000 [ 44]: b9cdcc6aed6b42aa +Block 0000 [ 45]: 2292bf66aeecd9b4 +Block 0000 [ 46]: b65c616f92615e70 +Block 0000 [ 47]: 665d2a8cc95fda20 +Block 0000 [ 48]: 5d6015cd24d5b58e +Block 0000 [ 49]: 566e2511fc13e860 +Block 0000 [ 50]: 0e6d4172d299fda2 +Block 0000 [ 51]: 51711bb30a213fee +Block 0000 [ 52]: baa627b1b95efb66 +Block 0000 [ 53]: 553ef8b4d081f251 +Block 0000 [ 54]: dc296e21d3908bd2 +Block 0000 [ 55]: 0b5577934372e18b +Block 0000 [ 56]: 325a7c02c34a0063 +Block 0000 [ 57]: 511cd738a2bb29ec +Block 0000 [ 58]: 78bd842866f6081b +Block 0000 [ 59]: a4917fb40f795866 +Block 0000 [ 60]: f63451ab7fe45926 +Block 0000 [ 61]: e72da44da8fa2526 +Block 0000 [ 62]: cf7a0a79171c3dc5 +Block 0000 [ 63]: 5dffa87b6a19c377 +Block 0000 [ 64]: 87709249d1a67953 +Block 0000 [ 65]: 8c6e8aff0b893742 +Block 0000 [ 66]: 6d1644b786853055 +Block 0000 [ 67]: 45344b95703440e7 +Block 0000 [ 68]: 69d529484a27369c +Block 0000 [ 69]: 77cd187ff379d71e +Block 0000 [ 70]: 4695c1676a6297cb +Block 0000 [ 71]: 129c2e4d8f0d130f +Block 0000 [ 72]: 80df37b16e8e0120 +Block 0000 [ 73]: 36816cf794842bf6 +Block 0000 [ 74]: cd51ebe0bea75d4f +Block 0000 [ 75]: 6e2640064f0024a8 +Block 0000 [ 76]: 5fa751c45d4571e6 +Block 0000 [ 77]: be08b615e84e99e2 +Block 0000 [ 78]: aff895f6bd7ad5a2 +Block 0000 [ 79]: a94668aec045af6f +Block 0000 [ 80]: 7df54929439123b6 +Block 0000 [ 81]: 2177e81dc530a178 +Block 0000 [ 82]: 23702198b8815fd7 +Block 0000 [ 83]: c6cfdfc6c58b7c23 +Block 0000 [ 84]: f6665bdaec247318 +Block 0000 [ 85]: 25e38016bd0c2b13 +Block 0000 [ 86]: bda625c7027b06ab +Block 0000 [ 87]: 105491576c6bf104 +Block 0000 [ 88]: cdbf6de9ff65be01 +Block 0000 [ 89]: 87dca172936422a9 +Block 0000 [ 90]: 277f6a1f433f47f0 +Block 0000 [ 91]: 464d3691eb0eeb9f +Block 0000 [ 92]: ab180830e1806e1d +Block 0000 [ 93]: 488749a577657e8c +Block 0000 [ 94]: 1ffec0ce2790e240 +Block 0000 [ 95]: a0efe4db12ef9a4b +Block 0000 [ 96]: 1ce776a738fe62c5 +Block 0000 [ 97]: d693a4f99ad2ddc0 +Block 0000 [ 98]: a2b8ce9c5a1181f8 +Block 0000 [ 99]: 6e037c488d9505e0 +Block 0000 [100]: c7b6863367ad8547 +Block 0000 [101]: a41c214223ae4f53 +Block 0000 [102]: 0caca33bd0555161 +Block 0000 [103]: e8ab772466030bda +Block 0000 [104]: 55a5256adf841b5c +Block 0000 [105]: c26501daed133a58 +Block 0000 [106]: c6ee94951fd20f1a +Block 0000 [107]: f9f7da71e229eb3b +Block 0000 [108]: 1294145272aa8dd7 +Block 0000 [109]: 83806fd19da7fa36 +Block 0000 [110]: 043dff3929d76862 +Block 0000 [111]: b207d7f3d742fc0f +Block 0000 [112]: e5cd7f664d8b9d85 +Block 0000 [113]: d354f54da4494d6e +Block 0000 [114]: 9b5f7db77aaf43b1 +Block 0000 [115]: 8760c0fda9bd5ef2 +Block 0000 [116]: 82e8cefc4f50beb9 +Block 0000 [117]: e0792492c41de5d2 +Block 0000 [118]: 961d746857b85e19 +Block 0000 [119]: fd8924440157f644 +Block 0000 [120]: 309fa2d2f185eca2 +Block 0000 [121]: df4477ca4024ca5a +Block 0000 [122]: 69c6c1b33ae10cf4 +Block 0000 [123]: 58df5414cc861dde +Block 0000 [124]: 77b32f2a19a5f0cf +Block 0000 [125]: 28c446e2110842b6 +Block 0000 [126]: 196a06e7803f07af +Block 0000 [127]: 703b8726fa442184 +Block 0001 [ 0]: b39e52eb91c1bdc1 +Block 0001 [ 1]: d92c2860542c5eab +Block 0001 [ 2]: cf88b66662afd9a4 +Block 0001 [ 3]: ab205105abf50363 +Block 0001 [ 4]: 0cad5ffe232c1e55 +Block 0001 [ 5]: 482eab98f97f69aa +Block 0001 [ 6]: df181ad58c929eaa +Block 0001 [ 7]: 1ca9a83149e9ab89 +Block 0001 [ 8]: ba562d31e81f884b +Block 0001 [ 9]: f95357df37ae767e +Block 0001 [ 10]: 45b2892b275dda33 +Block 0001 [ 11]: 241585e03db70e6d +Block 0001 [ 12]: 5c3324c4c067ddd8 +Block 0001 [ 13]: dc259c66486556a0 +Block 0001 [ 14]: b7497cd48e74a4f1 +Block 0001 [ 15]: 64ea476ce1178638 +Block 0001 [ 16]: 9e7045e96a30f5b8 +Block 0001 [ 17]: 5a69a92c5a464b3e +Block 0001 [ 18]: c7a059805b6d1880 +Block 0001 [ 19]: 440f25c7f2b63692 +Block 0001 [ 20]: 526c9603d5bb0f81 +Block 0001 [ 21]: c777fa917cb46eb8 +Block 0001 [ 22]: 59e0889599745628 +Block 0001 [ 23]: bd82e71af2c4f941 +Block 0001 [ 24]: ef9eabbe63ed885b +Block 0001 [ 25]: e5e7357881f13ba0 +Block 0001 [ 26]: aae864789abb9006 +Block 0001 [ 27]: 62343cf1b559b572 +Block 0001 [ 28]: 94c06926a5f752fa +Block 0001 [ 29]: 0f574fb3d218ff4f +Block 0001 [ 30]: 32c072026d0ee272 +Block 0001 [ 31]: 0a569df20a2ed675 +Block 0001 [ 32]: 2cfbee56a5b095fb +Block 0001 [ 33]: 32152424daad99a0 +Block 0001 [ 34]: 7a0a45c7a647c2e3 +Block 0001 [ 35]: a919db876ec5ee05 +Block 0001 [ 36]: 751af0fcf6b4506c +Block 0001 [ 37]: a213cfa621dd3379 +Block 0001 [ 38]: f4976f69ca9fd2a0 +Block 0001 [ 39]: fb9e8a81c1ae1561 +Block 0001 [ 40]: eb99e9a23c2bd68d +Block 0001 [ 41]: 109614411df38ee3 +Block 0001 [ 42]: d830230cb9ef4eeb +Block 0001 [ 43]: 7b6534f6b9125e6f +Block 0001 [ 44]: 4b8d06409fe2dcc0 +Block 0001 [ 45]: 1539d75c386cb30f +Block 0001 [ 46]: 34f2a2d5e70c5291 +Block 0001 [ 47]: 5e2d0c48230ca61c +Block 0001 [ 48]: 3dc0983d88937207 +Block 0001 [ 49]: 2ea263335271880a +Block 0001 [ 50]: 2e12ff10bfc8720c +Block 0001 [ 51]: 159a0a7b98efb22e +Block 0001 [ 52]: 98ee6f8150bd1bf7 +Block 0001 [ 53]: 4ab37247230bf307 +Block 0001 [ 54]: 1e8e9811d03bb579 +Block 0001 [ 55]: 069a57f413b64703 +Block 0001 [ 56]: f293bc9dc1bac9f2 +Block 0001 [ 57]: 068b62897b97b078 +Block 0001 [ 58]: fa6870e9439ae4b9 +Block 0001 [ 59]: e1e9a4d4bf2934bd +Block 0001 [ 60]: bd272bf53d295610 +Block 0001 [ 61]: 645938ab64a6d8c5 +Block 0001 [ 62]: af436972fd38544f +Block 0001 [ 63]: 43daf23ba5ead97d +Block 0001 [ 64]: a809fa9d2be31c90 +Block 0001 [ 65]: 5c52fa2e2da1ab6e +Block 0001 [ 66]: 39bd7bbcd09f6dfe +Block 0001 [ 67]: 5badc190cccecf31 +Block 0001 [ 68]: f72407904b16eb9a +Block 0001 [ 69]: 402228c2604e2359 +Block 0001 [ 70]: f1d353798d59dc0e +Block 0001 [ 71]: 91bc64df9fff4545 +Block 0001 [ 72]: 33c824a2621fd4df +Block 0001 [ 73]: 3b8e88ca432c6d5a +Block 0001 [ 74]: 9a0cb3f1b6ab96c2 +Block 0001 [ 75]: 067359cdebe0d519 +Block 0001 [ 76]: b4aacccf376ceb8d +Block 0001 [ 77]: 2aa6e909369143aa +Block 0001 [ 78]: df538d112febd4c0 +Block 0001 [ 79]: e1befd0fb9173850 +Block 0001 [ 80]: d402f5534c7eb96b +Block 0001 [ 81]: fe5a069f1e0ae34d +Block 0001 [ 82]: 6961cbeafba1ff67 +Block 0001 [ 83]: 54cf6d2bb3b82b3e +Block 0001 [ 84]: d7df2164ffb14392 +Block 0001 [ 85]: 142c0d8c20c56e01 +Block 0001 [ 86]: 5d9760b1fe61e8ef +Block 0001 [ 87]: c231026b091606cb +Block 0001 [ 88]: f7ace6fd77b17264 +Block 0001 [ 89]: dbed7e84e0a1b29c +Block 0001 [ 90]: 6dff9c730a69a47e +Block 0001 [ 91]: 9b5fae14c1947799 +Block 0001 [ 92]: 4f92371285c77bf3 +Block 0001 [ 93]: 773b5d4c10922cf8 +Block 0001 [ 94]: 189f25e093ec733b +Block 0001 [ 95]: a46f6b50f17faa5f +Block 0001 [ 96]: d2d8cb0cd59536c3 +Block 0001 [ 97]: d4f22425b74219ad +Block 0001 [ 98]: 44ece7df86187831 +Block 0001 [ 99]: 9b3b0f6d79aa3073 +Block 0001 [100]: eb5cd8e3706408dc +Block 0001 [101]: 4d095338d1559076 +Block 0001 [102]: 6b983b34a3cd1d03 +Block 0001 [103]: 0b9fb83578dde9e0 +Block 0001 [104]: 241b795deea655a8 +Block 0001 [105]: 6e74249559871092 +Block 0001 [106]: 3233dd2ab0ff3d60 +Block 0001 [107]: e53a50d0a98d0822 +Block 0001 [108]: 7d2dcd3a0e8588f0 +Block 0001 [109]: 96b8a86fcd45c056 +Block 0001 [110]: e8049d66f30a33c7 +Block 0001 [111]: bfa5249f4e5a109b +Block 0001 [112]: 088bb1e4dcd92a86 +Block 0001 [113]: ec15ec59f08a90f5 +Block 0001 [114]: 7b46daf17afb9e94 +Block 0001 [115]: 630b22e55f889c44 +Block 0001 [116]: 783691d88df12293 +Block 0001 [117]: c09e1eef375a4cb1 +Block 0001 [118]: 5292cd778f7d358b +Block 0001 [119]: 2c3b0f3b876e25fb +Block 0001 [120]: bfb2636b9592f067 +Block 0001 [121]: 07f44ff9972385bf +Block 0001 [122]: ffbccd62f3ced551 +Block 0001 [123]: 1f0f08705400cb47 +Block 0001 [124]: ef68b6e60b36887c +Block 0001 [125]: e698259b92b2c83e +Block 0001 [126]: dff046d9c5520ca6 +Block 0001 [127]: 7991bf5453c3b638 +Block 0002 [ 0]: dd23e459ec7a7b44 +Block 0002 [ 1]: 28741e6fe272b23c +Block 0002 [ 2]: 3bc8ee6d9f0b29a2 +Block 0002 [ 3]: ae39b5cbb3437522 +Block 0002 [ 4]: 758846264ea5f488 +Block 0002 [ 5]: ec3446e7f72f599d +Block 0002 [ 6]: 0bc86bd3b02a4152 +Block 0002 [ 7]: 95b7b5188fa5ea77 +Block 0002 [ 8]: 8d54f41ac3e6b462 +Block 0002 [ 9]: c788eabc6fc4b0ff +Block 0002 [ 10]: de3c64851157af6b +Block 0002 [ 11]: 4f287f4af73c67e9 +Block 0002 [ 12]: b6a19fc4e95e8290 +Block 0002 [ 13]: 85dc2853f27e9133 +Block 0002 [ 14]: 5663079347682383 +Block 0002 [ 15]: 02ef93c528c8b425 +Block 0002 [ 16]: f4244ee9c891c2b9 +Block 0002 [ 17]: a5728848d80240af +Block 0002 [ 18]: b9144b5d186a8590 +Block 0002 [ 19]: aaffa101deb880ad +Block 0002 [ 20]: 8b64003a05a79b57 +Block 0002 [ 21]: 8058e18f9de6f322 +Block 0002 [ 22]: 55b089d2703cddb5 +Block 0002 [ 23]: 86028d18880f2ad2 +Block 0002 [ 24]: 31355b1568d7adcf +Block 0002 [ 25]: 859079281ec15b46 +Block 0002 [ 26]: 8eb2be5993c11d50 +Block 0002 [ 27]: 7bec18fb9a0e784a +Block 0002 [ 28]: b792de1f75db4c8e +Block 0002 [ 29]: a876e86413fa1fa9 +Block 0002 [ 30]: 4cd6f37fd4eccee5 +Block 0002 [ 31]: a9dbc182dfeae36c +Block 0002 [ 32]: c4ef190a1e9d616b +Block 0002 [ 33]: 7c9e0bd0a2c26296 +Block 0002 [ 34]: 16b6ba5e8894b634 +Block 0002 [ 35]: 65a451695eae46d1 +Block 0002 [ 36]: c379abceeaabb352 +Block 0002 [ 37]: 5e0be866fca09057 +Block 0002 [ 38]: f16d10590dfa812e +Block 0002 [ 39]: 9364c03e8bf533c6 +Block 0002 [ 40]: 70ea4fe297664dae +Block 0002 [ 41]: 75d8c06c28f33748 +Block 0002 [ 42]: 5cbbec46e77b4d15 +Block 0002 [ 43]: 179bee833c0e2b11 +Block 0002 [ 44]: 189911c825c302eb +Block 0002 [ 45]: 60e2164c39da5a7f +Block 0002 [ 46]: b27a85a209358502 +Block 0002 [ 47]: 1e1a71fac6640545 +Block 0002 [ 48]: 5f86db5fddde6641 +Block 0002 [ 49]: a183e0e4ad45bb17 +Block 0002 [ 50]: 5326fc28f8c52311 +Block 0002 [ 51]: ca76d903b860c5aa +Block 0002 [ 52]: 3f15e4902a35d379 +Block 0002 [ 53]: 0b8eb6ba289ec0f9 +Block 0002 [ 54]: 9507ca02e069a05a +Block 0002 [ 55]: 61e21d6c08e494b9 +Block 0002 [ 56]: 505b52f1a764340f +Block 0002 [ 57]: 9d7b12f00bb712b6 +Block 0002 [ 58]: 08e4cc9a9d6af979 +Block 0002 [ 59]: 885db0825a30acc6 +Block 0002 [ 60]: 4ac721007866bb40 +Block 0002 [ 61]: 35ebcebaa1754249 +Block 0002 [ 62]: 8ec3842db1d07b56 +Block 0002 [ 63]: 8c2bba8b54d248a4 +Block 0002 [ 64]: 73e4883914fd19f1 +Block 0002 [ 65]: a53eddc4cb8cab79 +Block 0002 [ 66]: 77ceae67ac3b62f6 +Block 0002 [ 67]: 60bbb32043d74028 +Block 0002 [ 68]: e2a4e36e43f74ff7 +Block 0002 [ 69]: 71909946ab7773d1 +Block 0002 [ 70]: 7b5acff55fbb7dfb +Block 0002 [ 71]: c794dfa7065f2c47 +Block 0002 [ 72]: 66af2decb5329261 +Block 0002 [ 73]: c384d12af9f93a8d +Block 0002 [ 74]: ff80a743def4f0d0 +Block 0002 [ 75]: 10cbb8eac2d1ad4c +Block 0002 [ 76]: 546181544e57eca5 +Block 0002 [ 77]: 32110a65918a7e2d +Block 0002 [ 78]: ec276d8f8c71a33c +Block 0002 [ 79]: f11461667246342f +Block 0002 [ 80]: da2610422692be8e +Block 0002 [ 81]: b932777284ab93ed +Block 0002 [ 82]: 39e843b0a462f822 +Block 0002 [ 83]: 56be82271e70a6f1 +Block 0002 [ 84]: 394e12432c8d1f14 +Block 0002 [ 85]: b50f3562e448dd1a +Block 0002 [ 86]: d7c13dcd7fb4369d +Block 0002 [ 87]: 5c137edb4d11128f +Block 0002 [ 88]: 496401fc2b3a0dca +Block 0002 [ 89]: 20dcd790fd23aec6 +Block 0002 [ 90]: 38a0cceecad50c53 +Block 0002 [ 91]: 2a36cb7180d23f3b +Block 0002 [ 92]: 06a936f29ee07f91 +Block 0002 [ 93]: 679b87be6661c48a +Block 0002 [ 94]: 3104acb9c9416273 +Block 0002 [ 95]: 62cdeaadccd66f6e +Block 0002 [ 96]: 675596e72b20db7e +Block 0002 [ 97]: df51b05fa30443d7 +Block 0002 [ 98]: e550f147d18fa4f8 +Block 0002 [ 99]: b7c92884f699b00e +Block 0002 [100]: 3971bfe495111ddc +Block 0002 [101]: be6c841f9298b987 +Block 0002 [102]: 36264fdf4d66cc1e +Block 0002 [103]: 3966c703cdd2876b +Block 0002 [104]: 31072cbb07905072 +Block 0002 [105]: bb5cb679fd65f45c +Block 0002 [106]: 428bfa358e73473b +Block 0002 [107]: 9a2642a566a546ae +Block 0002 [108]: 0d3de325716c09f2 +Block 0002 [109]: 7b2b9773aff01a0e +Block 0002 [110]: 4cbd6f15e2746305 +Block 0002 [111]: 3d36f63c2c825d13 +Block 0002 [112]: a554238bf607ba3c +Block 0002 [113]: 7a86a81e929f9d6c +Block 0002 [114]: 8cf93c67a08a5915 +Block 0002 [115]: f48891bd8223a8b3 +Block 0002 [116]: aaee89560ce32e57 +Block 0002 [117]: a65fdc297527cff5 +Block 0002 [118]: 5d4054b589611c4b +Block 0002 [119]: efc6f60b84cca568 +Block 0002 [120]: 2db2e8633528bffb +Block 0002 [121]: d32c09564b09f418 +Block 0002 [122]: ebfa0176bb5954f4 +Block 0002 [123]: 72244abd8cc810bc +Block 0002 [124]: d156dc75cad947e7 +Block 0002 [125]: 620bd5bd6831dc75 +Block 0002 [126]: be69b12e194293b6 +Block 0002 [127]: 899f2fee213f1de9 +Block 0003 [ 0]: fb56a6f3add6fbf5 +Block 0003 [ 1]: 0f70eeb79f04a036 +Block 0003 [ 2]: 21988c987d9a6bae +Block 0003 [ 3]: 520bceff7462ace7 +Block 0003 [ 4]: ad909e68c1f012ff +Block 0003 [ 5]: b0dea9d56bd02153 +Block 0003 [ 6]: 66c1d56a4bcd3c3d +Block 0003 [ 7]: edf4eb0acb6c312f +Block 0003 [ 8]: 812f098eb3f51d98 +Block 0003 [ 9]: cb57986e6a080edf +Block 0003 [ 10]: 3ff9cf96daa45e5e +Block 0003 [ 11]: f03a603e2493f062 +Block 0003 [ 12]: 3a9bd9a68d202e97 +Block 0003 [ 13]: 570a6752c0c5cb3f +Block 0003 [ 14]: 6e3ff8cfde441c1e +Block 0003 [ 15]: b9a2c0d8bd8578ff +Block 0003 [ 16]: 4b8d7ef427d31ae9 +Block 0003 [ 17]: 065cf6acfd5b2e03 +Block 0003 [ 18]: c63a2ced88f063b9 +Block 0003 [ 19]: 5de62ee0f73c89d0 +Block 0003 [ 20]: c205637146f8c78c +Block 0003 [ 21]: 53ffa1ca2347257e +Block 0003 [ 22]: c9bbf7444d9deef3 +Block 0003 [ 23]: 6b214fc5d13ca15b +Block 0003 [ 24]: 1983a8131af7010f +Block 0003 [ 25]: 723598dddf1db8aa +Block 0003 [ 26]: d1f125036bb68c2e +Block 0003 [ 27]: 573314a277cbd46d +Block 0003 [ 28]: 8fb5257f38a0893d +Block 0003 [ 29]: 6f82aa350258358f +Block 0003 [ 30]: 0d70c253df3fced4 +Block 0003 [ 31]: e595ca4e326dde32 +Block 0003 [ 32]: 7c93535f19f04c44 +Block 0003 [ 33]: 06924354b5324a58 +Block 0003 [ 34]: beaa0c1a43bd5458 +Block 0003 [ 35]: a1d149ea16c1162b +Block 0003 [ 36]: 01640d4273b5839d +Block 0003 [ 37]: dce6b17485cb9db1 +Block 0003 [ 38]: c89a52747f1821f5 +Block 0003 [ 39]: 30bb832e0f53e158 +Block 0003 [ 40]: 1a0847008fd1b846 +Block 0003 [ 41]: 4cebde059f835332 +Block 0003 [ 42]: 0f034ddd0d4e4bc7 +Block 0003 [ 43]: cbe3528d589b6a73 +Block 0003 [ 44]: 6025d2bc3be52d8b +Block 0003 [ 45]: 5778af30e8c961a3 +Block 0003 [ 46]: 9692098526efbd5f +Block 0003 [ 47]: abf4049842746f89 +Block 0003 [ 48]: b1b779375f25ddc2 +Block 0003 [ 49]: b39ee648800d7f0e +Block 0003 [ 50]: 6ed0f992f6759f6a +Block 0003 [ 51]: 1214315851996819 +Block 0003 [ 52]: 07abf5656070323e +Block 0003 [ 53]: 18ac860f782bc9d2 +Block 0003 [ 54]: 980218218884d219 +Block 0003 [ 55]: 2f3fb9ad24298ab8 +Block 0003 [ 56]: 45a188a99b980d81 +Block 0003 [ 57]: 43f9bb24b34929f4 +Block 0003 [ 58]: eacc9f32423a06bf +Block 0003 [ 59]: 61d00561386621a0 +Block 0003 [ 60]: b64fd998ca28cc23 +Block 0003 [ 61]: e62e2aa17a058fcf +Block 0003 [ 62]: 4da3729542018be2 +Block 0003 [ 63]: 7523de30690d87ad +Block 0003 [ 64]: a0d414d97ff76659 +Block 0003 [ 65]: 94d80303cdccbe07 +Block 0003 [ 66]: b81ffe4a4e106cf6 +Block 0003 [ 67]: 41712d3a88f571aa +Block 0003 [ 68]: 9d011e543a5ce6e3 +Block 0003 [ 69]: 69d69c1e69e5f972 +Block 0003 [ 70]: f25a39ed9a7ec482 +Block 0003 [ 71]: 5832d4812c8c4c57 +Block 0003 [ 72]: 1211a9c54c07f790 +Block 0003 [ 73]: 5303c102e9b45c21 +Block 0003 [ 74]: 97457d5738540218 +Block 0003 [ 75]: acea58c384e21618 +Block 0003 [ 76]: b6259e5a7ceb3df8 +Block 0003 [ 77]: 440656da0f3ef414 +Block 0003 [ 78]: d8c484440162ecb9 +Block 0003 [ 79]: 64c335a57eb00044 +Block 0003 [ 80]: 6cecee1ae6bfa0b4 +Block 0003 [ 81]: 0ffc22fcf7b03663 +Block 0003 [ 82]: 540137e7b4398a11 +Block 0003 [ 83]: 7ddf5807771780d9 +Block 0003 [ 84]: 0363d76635de4e70 +Block 0003 [ 85]: 0abca167960b4b39 +Block 0003 [ 86]: fb65298a875c60c6 +Block 0003 [ 87]: 6346ea3ff20181c5 +Block 0003 [ 88]: cd51ada4f78050b5 +Block 0003 [ 89]: 2a43d4e2bf47b952 +Block 0003 [ 90]: acfcb3001f913635 +Block 0003 [ 91]: 411deab07c65ee19 +Block 0003 [ 92]: 1d189a46754809e4 +Block 0003 [ 93]: babf37efbf18c86c +Block 0003 [ 94]: f92fcdece817e247 +Block 0003 [ 95]: 873afe7217b7851d +Block 0003 [ 96]: 927eeadc8fadd290 +Block 0003 [ 97]: 7213c6ef9ca89f8f +Block 0003 [ 98]: 954d08698a03ddf0 +Block 0003 [ 99]: ccb51edd7f11262b +Block 0003 [100]: 6a498937058d4c78 +Block 0003 [101]: 4b14b8c5878e068e +Block 0003 [102]: ba12a7b03972114b +Block 0003 [103]: dff12621c17eca1f +Block 0003 [104]: 61fd0fea28e34153 +Block 0003 [105]: f06cdd41da132ef8 +Block 0003 [106]: 35acbb677a549a48 +Block 0003 [107]: ffd667b4c8e806f3 +Block 0003 [108]: 49200825235fbffd +Block 0003 [109]: 88e3019f9e034791 +Block 0003 [110]: 83c9e3abe3ea87fd +Block 0003 [111]: 6c3cea295a2565e1 +Block 0003 [112]: 538fb21149a66ed5 +Block 0003 [113]: d65d2f8b53a9106b +Block 0003 [114]: f483d2cebd16dec2 +Block 0003 [115]: 5c2e9fc4f7bd8e5d +Block 0003 [116]: 0f2bf6a3814c58d8 +Block 0003 [117]: 94e762719e799f4d +Block 0003 [118]: 7906a64262e02bde +Block 0003 [119]: d278e23ff953b7cd +Block 0003 [120]: c389950788607700 +Block 0003 [121]: c415165302ce18fc +Block 0003 [122]: c00a856c40f4c8bf +Block 0003 [123]: 9d8693388f6c4448 +Block 0003 [124]: e3bf742527c158dc +Block 0003 [125]: 78f831362f7dc9d8 +Block 0003 [126]: 21b0450a4a162590 +Block 0003 [127]: 9f14702133338041 +Block 0004 [ 0]: 1f4bfff1169c239e +Block 0004 [ 1]: 7826a84aebd08cb9 +Block 0004 [ 2]: 77b687cdebbb8252 +Block 0004 [ 3]: bb622856ff91cfc5 +Block 0004 [ 4]: 1cb853de37e58f4c +Block 0004 [ 5]: 8ab731ee056473c1 +Block 0004 [ 6]: 7cc452a31f71474c +Block 0004 [ 7]: 7e6af8625ebbcad5 +Block 0004 [ 8]: 94b7a53c75f01f3f +Block 0004 [ 9]: 24ac4e19a5c0fb37 +Block 0004 [ 10]: 59ea871a2ad1e802 +Block 0004 [ 11]: a19069ea084df0d7 +Block 0004 [ 12]: 15c55a1d96698e7a +Block 0004 [ 13]: 50ee5f96169dc765 +Block 0004 [ 14]: feebfdf9c4e8c14d +Block 0004 [ 15]: 109dbc84bbae0c77 +Block 0004 [ 16]: 7980f4474000e12c +Block 0004 [ 17]: 7bfb1e76fae72ecf +Block 0004 [ 18]: 80202573c08d0304 +Block 0004 [ 19]: 690dacc76d735f59 +Block 0004 [ 20]: ef7e52019560e447 +Block 0004 [ 21]: 6600da7a6bf6125c +Block 0004 [ 22]: c24d2e58a8e90406 +Block 0004 [ 23]: 712b9c2015d10024 +Block 0004 [ 24]: df63b5ad68463243 +Block 0004 [ 25]: 1b9039493b5dfb54 +Block 0004 [ 26]: caf0ccf6b4216f1e +Block 0004 [ 27]: 8387560fa1ba0168 +Block 0004 [ 28]: 30436beed598ccef +Block 0004 [ 29]: 542cba1ef2ef1b4f +Block 0004 [ 30]: e2830b7cd8a885f4 +Block 0004 [ 31]: 3c783826b3557628 +Block 0004 [ 32]: bb7d60801f02ad76 +Block 0004 [ 33]: cc354aa998635e97 +Block 0004 [ 34]: 5a2c1af11968c3b4 +Block 0004 [ 35]: da0a5a4d4e7a0d25 +Block 0004 [ 36]: 905dfde8c9f5931e +Block 0004 [ 37]: e0d86aaf2bdc0a00 +Block 0004 [ 38]: 875f10db09de687e +Block 0004 [ 39]: d3acbd2b9691eebb +Block 0004 [ 40]: 0f4ab9500d27b7f6 +Block 0004 [ 41]: d769190449856fa2 +Block 0004 [ 42]: f71772fb0b6e1757 +Block 0004 [ 43]: 1971206973bd9365 +Block 0004 [ 44]: 51e23fe410819a38 +Block 0004 [ 45]: 1d58d69319e63a56 +Block 0004 [ 46]: f59e3060ed85225b +Block 0004 [ 47]: b4487ec84cd0746e +Block 0004 [ 48]: c2348b990c23dbb1 +Block 0004 [ 49]: 38c5c34f0a61b67a +Block 0004 [ 50]: ee9f2cc1650a9172 +Block 0004 [ 51]: 5746f1fd8fdf085b +Block 0004 [ 52]: 43c65f28351411cd +Block 0004 [ 53]: 1bf0c575dd03cc83 +Block 0004 [ 54]: 89fd5da38d99f58a +Block 0004 [ 55]: bb776e8c70834de0 +Block 0004 [ 56]: bf0f2292e55ec916 +Block 0004 [ 57]: d9d98cd9eebac545 +Block 0004 [ 58]: 58d5ca66c32ce98b +Block 0004 [ 59]: 4a457a8f1c16a8ac +Block 0004 [ 60]: 4b2d30b9453fac13 +Block 0004 [ 61]: 80dd455f23308749 +Block 0004 [ 62]: 7b8e9c21befca460 +Block 0004 [ 63]: 382d5f6f88bb45c6 +Block 0004 [ 64]: 5446ac8c9a13aa21 +Block 0004 [ 65]: 5af8a4bf1be1404b +Block 0004 [ 66]: 4bed69e773c3bc33 +Block 0004 [ 67]: de21f3f20c01e245 +Block 0004 [ 68]: 07947acd343ff718 +Block 0004 [ 69]: a3273639f6aa2e86 +Block 0004 [ 70]: 81af6e7d148105fa +Block 0004 [ 71]: 6d2a2d27c0240158 +Block 0004 [ 72]: 230228f9486c7d5f +Block 0004 [ 73]: d0f9502d095d1d61 +Block 0004 [ 74]: eda1dfc0163868ba +Block 0004 [ 75]: fba2e329e4b590a9 +Block 0004 [ 76]: 7e3981f5c94a32f4 +Block 0004 [ 77]: aebbf3e39f176adb +Block 0004 [ 78]: 286ca52dfb323f51 +Block 0004 [ 79]: 833cf31e0d466e90 +Block 0004 [ 80]: 4e300c1e306b8f13 +Block 0004 [ 81]: 824b53333fced271 +Block 0004 [ 82]: edf34cd945d7210b +Block 0004 [ 83]: 43038b680e9dffe3 +Block 0004 [ 84]: 2f9fb7b082d9c219 +Block 0004 [ 85]: 619bf28703df87b7 +Block 0004 [ 86]: fda84f7ae8ae73ac +Block 0004 [ 87]: 39ec5d049200ec6a +Block 0004 [ 88]: b7bee34b3af6a88f +Block 0004 [ 89]: 393690efa5e2fcec +Block 0004 [ 90]: 07a885a1ab63f35d +Block 0004 [ 91]: 094cf25fe38b00d2 +Block 0004 [ 92]: 7938fde0ce831763 +Block 0004 [ 93]: fa548a2a97932eac +Block 0004 [ 94]: ca747928b037d4e2 +Block 0004 [ 95]: d8052573416f9a31 +Block 0004 [ 96]: 3e61a2127a36ea9b +Block 0004 [ 97]: 19ea0b3a6cf1c9a2 +Block 0004 [ 98]: 4e83b355bc86006e +Block 0004 [ 99]: aacd8df333ea6d30 +Block 0004 [100]: b6bfd76c58c3d60d +Block 0004 [101]: c7d73525add3bd57 +Block 0004 [102]: cad6fe5d1b06a2c1 +Block 0004 [103]: c4ab56c924fe5b08 +Block 0004 [104]: dbe4e0b763bb6bb1 +Block 0004 [105]: c19c86942ec530fb +Block 0004 [106]: e888bb27b3995932 +Block 0004 [107]: 30a878899a87c2a4 +Block 0004 [108]: 42b160bf69b804c3 +Block 0004 [109]: 1b662e82f5ff668f +Block 0004 [110]: 400b9463e2b70039 +Block 0004 [111]: 0c42792dd517f120 +Block 0004 [112]: e5d2783bc74b1db1 +Block 0004 [113]: 616271ebb481803c +Block 0004 [114]: ce397db1ea2f109e +Block 0004 [115]: ff2a4d9a41f27cfe +Block 0004 [116]: 143f5545c3cb7ac5 +Block 0004 [117]: 043d1e2315ee9b12 +Block 0004 [118]: c9c5db186171120c +Block 0004 [119]: 162d0f20feb42416 +Block 0004 [120]: 9a6ad48ba5165f31 +Block 0004 [121]: 2745f1f5d8a83383 +Block 0004 [122]: fb642a715308dcd9 +Block 0004 [123]: f4aaf8ef74a9fed0 +Block 0004 [124]: 277f46cda4ec5361 +Block 0004 [125]: 633e4dd91025d362 +Block 0004 [126]: bbaa459b3f915cb5 +Block 0004 [127]: 06be040c42f5364a +Block 0005 [ 0]: 56bc1f3296dd2ce5 +Block 0005 [ 1]: 8bc5ab8496de707e +Block 0005 [ 2]: d9644efa47808ffa +Block 0005 [ 3]: 8efe9e433a0c85e3 +Block 0005 [ 4]: 4a5df187ab89e42c +Block 0005 [ 5]: a152346eda240da5 +Block 0005 [ 6]: 6d2987077fb98c71 +Block 0005 [ 7]: 57a42e75ca3586c2 +Block 0005 [ 8]: 0a0ba506c7b76ee4 +Block 0005 [ 9]: 4fd130bc473ca0b8 +Block 0005 [ 10]: 9b29c4ac1d976010 +Block 0005 [ 11]: ff7913480eebda94 +Block 0005 [ 12]: dc9e218864ce3ef0 +Block 0005 [ 13]: 3cf7dbd1727b82b2 +Block 0005 [ 14]: a71c3c0ec3aea67b +Block 0005 [ 15]: 57a88ca0e5a824de +Block 0005 [ 16]: edc7720b0e811eef +Block 0005 [ 17]: e5deb23e00cd70d3 +Block 0005 [ 18]: 360f8b0603d3e05f +Block 0005 [ 19]: eecdf9fd77f4f367 +Block 0005 [ 20]: 5fd47b07a4fba1b8 +Block 0005 [ 21]: d7e7892acda87447 +Block 0005 [ 22]: d8a65351566b4cef +Block 0005 [ 23]: b448eea0fbe46f4f +Block 0005 [ 24]: c14fc4e53e7665bc +Block 0005 [ 25]: c5af40847ee10c41 +Block 0005 [ 26]: ec9a322dbbc80e10 +Block 0005 [ 27]: 62b8d071bb6df9e3 +Block 0005 [ 28]: ebdb4bd5139ec05f +Block 0005 [ 29]: 2cbb1cb894674200 +Block 0005 [ 30]: cbac9276b8d62258 +Block 0005 [ 31]: 340cb88843557dbb +Block 0005 [ 32]: 175bd4c2baa4574e +Block 0005 [ 33]: 1fc98675a50be7fe +Block 0005 [ 34]: 2a99f47a058fc17e +Block 0005 [ 35]: e79fd453fc8a698b +Block 0005 [ 36]: 3308cfa89a737ee6 +Block 0005 [ 37]: 4d874d35563f79c9 +Block 0005 [ 38]: 0901887475a16e95 +Block 0005 [ 39]: ca90d7075224fd56 +Block 0005 [ 40]: e9ccbba72c73f229 +Block 0005 [ 41]: 9a58978532de573f +Block 0005 [ 42]: 72a7c483199477fd +Block 0005 [ 43]: 74ae4a95aa86f679 +Block 0005 [ 44]: 39196e3bb0f9465a +Block 0005 [ 45]: 7e0aa61bebb4f8b7 +Block 0005 [ 46]: 3b3e4cf3c3767634 +Block 0005 [ 47]: 385568a115a4b7ba +Block 0005 [ 48]: ee475f11f508e361 +Block 0005 [ 49]: e2817d692ac425ca +Block 0005 [ 50]: 6bcb654d71ad29c6 +Block 0005 [ 51]: b8e0f8d40bd34cdc +Block 0005 [ 52]: 23e1122ed5fe525b +Block 0005 [ 53]: 118d441dd90d22d6 +Block 0005 [ 54]: 964d711ace56313d +Block 0005 [ 55]: 839a28506c08d638 +Block 0005 [ 56]: 1a9816a29d9ce7e5 +Block 0005 [ 57]: 61754f0576224d87 +Block 0005 [ 58]: 3e6408809e4e7de7 +Block 0005 [ 59]: a8f4a10955bf4406 +Block 0005 [ 60]: 94a63146fb256183 +Block 0005 [ 61]: 920c1b3d2c902b66 +Block 0005 [ 62]: 2df4b46832d03909 +Block 0005 [ 63]: b796e7fb9e6618fb +Block 0005 [ 64]: 973fa1e3eb5fb6ef +Block 0005 [ 65]: decdd1da1988d287 +Block 0005 [ 66]: d0753db3225995d5 +Block 0005 [ 67]: fee17a05a4e947ee +Block 0005 [ 68]: 0ca155fc78aa8be7 +Block 0005 [ 69]: 5cec59b99faac731 +Block 0005 [ 70]: bde7a1777f4dcb64 +Block 0005 [ 71]: 902be95825b61c51 +Block 0005 [ 72]: 401aff6e1f334c13 +Block 0005 [ 73]: ca46b2a0c1072b10 +Block 0005 [ 74]: cb7b0928958fb7e4 +Block 0005 [ 75]: 7ecc13ba897596cc +Block 0005 [ 76]: b1fa2e9e2fdfdf4b +Block 0005 [ 77]: a7c61a3b18ce9503 +Block 0005 [ 78]: e30fa55955465c83 +Block 0005 [ 79]: a099c26f48aea2d2 +Block 0005 [ 80]: 489b23555922b0cd +Block 0005 [ 81]: 275e8c7c9e772d38 +Block 0005 [ 82]: 173510ec47a69499 +Block 0005 [ 83]: 7cd31916cc558393 +Block 0005 [ 84]: 3f30016de11fafaa +Block 0005 [ 85]: f5b2e0ba7f14b171 +Block 0005 [ 86]: bfef8224ae7a0a51 +Block 0005 [ 87]: 8de95384bae75e40 +Block 0005 [ 88]: 3b666c78a48b30d0 +Block 0005 [ 89]: fd2321a748238c90 +Block 0005 [ 90]: 69fdab228d29478a +Block 0005 [ 91]: e0103afd01ceacd7 +Block 0005 [ 92]: 8b9ea3e23dd777e9 +Block 0005 [ 93]: 08635e8e5113bb4a +Block 0005 [ 94]: 3d315ca4675a44b1 +Block 0005 [ 95]: b20e22e6f65e1102 +Block 0005 [ 96]: a038d3ea447aa7fe +Block 0005 [ 97]: 0882a3723c4de776 +Block 0005 [ 98]: 575df4bf97ea305b +Block 0005 [ 99]: d98ea42ef107f0f0 +Block 0005 [100]: 0cba1d48f83867e7 +Block 0005 [101]: 649696d1781d2d95 +Block 0005 [102]: 9510c80999da84f7 +Block 0005 [103]: ce2f3c2d0f0d3ce2 +Block 0005 [104]: 2f30fa615e5a6c65 +Block 0005 [105]: 3c8589ad2c05e3e6 +Block 0005 [106]: c3576d16bf3517eb +Block 0005 [107]: 9b74bfbfe2f00fdf +Block 0005 [108]: b790e014dad1acdd +Block 0005 [109]: 29487c81893a5b04 +Block 0005 [110]: 4cc9f4f313fd7fc4 +Block 0005 [111]: a04f0d2766655766 +Block 0005 [112]: 0902eed758e7d367 +Block 0005 [113]: b1fcd9d76e1b30c8 +Block 0005 [114]: aa4f588a3a4aac13 +Block 0005 [115]: 0e57ff97e192f16e +Block 0005 [116]: 570393a65214975e +Block 0005 [117]: fe2abc9fb39a3db3 +Block 0005 [118]: 5833d62b97534288 +Block 0005 [119]: 452997ed754f9159 +Block 0005 [120]: 5befe711f63a4ed4 +Block 0005 [121]: f7ec83aff1f3c8ef +Block 0005 [122]: bbb5bd1ed3e4a6b5 +Block 0005 [123]: 45589b32b3e51e9d +Block 0005 [124]: 5fcd06dcf0473856 +Block 0005 [125]: c450164cff4ffeae +Block 0005 [126]: c64495c818121aa9 +Block 0005 [127]: 9fc7e86dc33cd2f3 +Block 0006 [ 0]: 6a3b43a71fe61a9d +Block 0006 [ 1]: 65dc6f99a409b85f +Block 0006 [ 2]: 3bfb666d815258ae +Block 0006 [ 3]: f86ce9ab75ffde48 +Block 0006 [ 4]: 3314c1be16a6df50 +Block 0006 [ 5]: 4d306e1ec94e6edb +Block 0006 [ 6]: 43402b6d6db3fc24 +Block 0006 [ 7]: 7b0149cc45cfcd7b +Block 0006 [ 8]: f6bbdd7398ec689d +Block 0006 [ 9]: 238319ac77ccc6c6 +Block 0006 [ 10]: fc36c2be2be64d9a +Block 0006 [ 11]: b090143eeed5bde4 +Block 0006 [ 12]: b865b75955c172e0 +Block 0006 [ 13]: ac328bf104acb8c7 +Block 0006 [ 14]: 7ca6c932408f7981 +Block 0006 [ 15]: c48572b8cb7807b1 +Block 0006 [ 16]: ea7fd8ba0749e76f +Block 0006 [ 17]: eb0842a6a483c361 +Block 0006 [ 18]: 4cd81bc9b5b020b2 +Block 0006 [ 19]: e69b3e81d49cbb97 +Block 0006 [ 20]: cc2c403448ef287f +Block 0006 [ 21]: 5dbd5c6f2cc79089 +Block 0006 [ 22]: 8ce898ea5ed001b1 +Block 0006 [ 23]: a4a8fbf4399e580e +Block 0006 [ 24]: b266b33d76edabdd +Block 0006 [ 25]: 72861366950e1b06 +Block 0006 [ 26]: 12fb10321bf4e848 +Block 0006 [ 27]: 1483bf9793e16cac +Block 0006 [ 28]: bb3ad110fc9f9c9c +Block 0006 [ 29]: 7d9a1aa5cdab1074 +Block 0006 [ 30]: bf36d5753f1f3ad2 +Block 0006 [ 31]: 3467a9be322905a2 +Block 0006 [ 32]: 0e82a639e7b7e4d7 +Block 0006 [ 33]: 0e5ba0c9c730232e +Block 0006 [ 34]: 67184bbc003e15cb +Block 0006 [ 35]: 9b18396759ec49be +Block 0006 [ 36]: 663b4946e9a5969a +Block 0006 [ 37]: 410edc3cb9af3358 +Block 0006 [ 38]: b9df4e421d49fe3e +Block 0006 [ 39]: 7a438d221e257b59 +Block 0006 [ 40]: e0694ab5116881b9 +Block 0006 [ 41]: b73f3da5c0327d16 +Block 0006 [ 42]: ab045a79f78afe15 +Block 0006 [ 43]: dd4b109852035a50 +Block 0006 [ 44]: 82a051573f849056 +Block 0006 [ 45]: de6f5c7607962384 +Block 0006 [ 46]: 097933cffaf24632 +Block 0006 [ 47]: 2b80ece7ee4995a9 +Block 0006 [ 48]: 346dc5c2df8b4418 +Block 0006 [ 49]: eb61689e0bc584fd +Block 0006 [ 50]: b3bc2fa36dd52ef2 +Block 0006 [ 51]: 7822e567796619e5 +Block 0006 [ 52]: dfee366e46cf7b59 +Block 0006 [ 53]: a12c1e7450428bfc +Block 0006 [ 54]: c9df1ad369529065 +Block 0006 [ 55]: 83e046722a7ddf69 +Block 0006 [ 56]: 1e3d5f066847e240 +Block 0006 [ 57]: c640f33eb71ea4a6 +Block 0006 [ 58]: a462476761bc6aa7 +Block 0006 [ 59]: 9a9397e75b7e150c +Block 0006 [ 60]: c459d118bfadc25b +Block 0006 [ 61]: a53c8b75dce6dab0 +Block 0006 [ 62]: 10f1f11a7f7ae936 +Block 0006 [ 63]: c734b2a1de8c7b42 +Block 0006 [ 64]: 118e5468ccfd0f3c +Block 0006 [ 65]: ab57d27c81dacbb0 +Block 0006 [ 66]: 78d2e6c45ae1e7e3 +Block 0006 [ 67]: 5d27d4f803340141 +Block 0006 [ 68]: 96c66baf2f146389 +Block 0006 [ 69]: e566ced7ba2cddae +Block 0006 [ 70]: 3c012d4bd72c0348 +Block 0006 [ 71]: baf38d9b8e04daff +Block 0006 [ 72]: f6feed25399edac5 +Block 0006 [ 73]: 478b5cc3dcd96f42 +Block 0006 [ 74]: ae74579919b6fc92 +Block 0006 [ 75]: 51fc1fa68ac1f1db +Block 0006 [ 76]: fa3ed06ccadd40b5 +Block 0006 [ 77]: 1db8e7cd61efa227 +Block 0006 [ 78]: b3cfa541a286c6c3 +Block 0006 [ 79]: 3272804c4fe3bf91 +Block 0006 [ 80]: 0080c0901626b2fa +Block 0006 [ 81]: af0da6e3aead2853 +Block 0006 [ 82]: 7e21db22722f0e3c +Block 0006 [ 83]: ab683cc97e8da7db +Block 0006 [ 84]: 27263c6eac0c9972 +Block 0006 [ 85]: ceccc3f5227ea80a +Block 0006 [ 86]: 01831837084a501b +Block 0006 [ 87]: 70b067419f21b827 +Block 0006 [ 88]: 65cea757322ba00c +Block 0006 [ 89]: 41c1a0ff8b0c3f32 +Block 0006 [ 90]: 3712715a850f2838 +Block 0006 [ 91]: 2ac61cb666e74a4a +Block 0006 [ 92]: 493189c0f8d7596d +Block 0006 [ 93]: e2bb69d85549becf +Block 0006 [ 94]: 51c73d8bf21898ee +Block 0006 [ 95]: bdb01d4cae47277f +Block 0006 [ 96]: bc2a923ed80017d4 +Block 0006 [ 97]: 87a1c6c4d38c5e8e +Block 0006 [ 98]: 4cd2b7721dca75ea +Block 0006 [ 99]: 1b7ea031a5808da9 +Block 0006 [100]: feb8ddd109ac72b9 +Block 0006 [101]: c4130e2bf97ea60d +Block 0006 [102]: c63b7d61a4388b9c +Block 0006 [103]: 314db246c472fea4 +Block 0006 [104]: cb33dc35d7857304 +Block 0006 [105]: 9c79fae6464d9639 +Block 0006 [106]: 370775c05750999a +Block 0006 [107]: cc59cd15aff3fcf9 +Block 0006 [108]: 72c7a887702ef86c +Block 0006 [109]: 2eba1082d8d310dc +Block 0006 [110]: e5df92c0479c82a7 +Block 0006 [111]: 925fd4e76d8f9aa9 +Block 0006 [112]: cf517f3178d8e581 +Block 0006 [113]: 58d49010da08f568 +Block 0006 [114]: 0b424f5aa96687e0 +Block 0006 [115]: 05937aa9fa4dbbc5 +Block 0006 [116]: e439bf60bb1ab810 +Block 0006 [117]: f6ed43b26a6e203f +Block 0006 [118]: e6fa12f52fe77030 +Block 0006 [119]: cca64264e6d574c0 +Block 0006 [120]: d777282f425ea35e +Block 0006 [121]: 06ffcf55bf74e8a9 +Block 0006 [122]: 4302e2530cef5824 +Block 0006 [123]: 101bb2ae18dbf8e7 +Block 0006 [124]: 35ed76e0f0d3521e +Block 0006 [125]: 707fd23042d46e34 +Block 0006 [126]: 8ad45ad78d5bd6b1 +Block 0006 [127]: 090f7d08b06abe8d +Block 0007 [ 0]: 59e479e05f916b33 +Block 0007 [ 1]: d170629134a24177 +Block 0007 [ 2]: c5a78cf1009b05c1 +Block 0007 [ 3]: 83a9dcb5e2ec7231 +Block 0007 [ 4]: 1616b9f12a99a638 +Block 0007 [ 5]: 02fbd63ddf2af667 +Block 0007 [ 6]: f5c20436df6ca8ca +Block 0007 [ 7]: 08cbe91a8e8b7aeb +Block 0007 [ 8]: e99eaa8eed7ad3c4 +Block 0007 [ 9]: 6d76bb05e62f8041 +Block 0007 [ 10]: 43417e37d6ac6c02 +Block 0007 [ 11]: ff20ea03c37e7778 +Block 0007 [ 12]: dcfc35fd7cb8b236 +Block 0007 [ 13]: 6e73ef79ad4921b5 +Block 0007 [ 14]: a128f0bbad4dc092 +Block 0007 [ 15]: 819290ea07d314a1 +Block 0007 [ 16]: 3233cce2c9759135 +Block 0007 [ 17]: f8dc66d2d321fb10 +Block 0007 [ 18]: 66902d9a98315fde +Block 0007 [ 19]: 9afbc0551c0d1f7e +Block 0007 [ 20]: d6e8f5ff43afebed +Block 0007 [ 21]: f95778ae0fc77151 +Block 0007 [ 22]: 1837f0f3b7a76f9d +Block 0007 [ 23]: 605f3328875eec26 +Block 0007 [ 24]: 1eb6a84483461d88 +Block 0007 [ 25]: 21298bbe36e17930 +Block 0007 [ 26]: 1a8829e5cabfe38b +Block 0007 [ 27]: b9edb6a15d084218 +Block 0007 [ 28]: 85746018776d8a75 +Block 0007 [ 29]: bde38b66cb6021e3 +Block 0007 [ 30]: bc642e63ab6a6c04 +Block 0007 [ 31]: e76312b76b9a6c68 +Block 0007 [ 32]: e43d533d4d6c4221 +Block 0007 [ 33]: fc0bcfda1ea9bdc0 +Block 0007 [ 34]: e4005e3b2d530103 +Block 0007 [ 35]: b3b9e8837034900f +Block 0007 [ 36]: dfe56aa81655556e +Block 0007 [ 37]: 8ad6a320388c6d3f +Block 0007 [ 38]: 9ae987a2539bd378 +Block 0007 [ 39]: 1576f25b6c489173 +Block 0007 [ 40]: ec1a591044807eae +Block 0007 [ 41]: 0f99146dc1860c2b +Block 0007 [ 42]: 536637bf1e4fe122 +Block 0007 [ 43]: f4999739b04901e1 +Block 0007 [ 44]: 650f99cf58618218 +Block 0007 [ 45]: 9a1ae560b1ac7f46 +Block 0007 [ 46]: 80cf15b71c2fb100 +Block 0007 [ 47]: 124cd01eab0338ab +Block 0007 [ 48]: 046fe5ecba1b7e0f +Block 0007 [ 49]: f74a03ad56db554a +Block 0007 [ 50]: 8153889b066fb09c +Block 0007 [ 51]: 283033056c99b707 +Block 0007 [ 52]: 0c21b5f77978d727 +Block 0007 [ 53]: 866031cd62857a99 +Block 0007 [ 54]: 6f97e8f3138a4e11 +Block 0007 [ 55]: c8d25173bc0a3c50 +Block 0007 [ 56]: 82ca24fa507cbf0c +Block 0007 [ 57]: c357faf33c66cfcf +Block 0007 [ 58]: 064f0616fccfd6a5 +Block 0007 [ 59]: 9bf3f89a6d1354f3 +Block 0007 [ 60]: cc7cff8a4d27620b +Block 0007 [ 61]: c9fb56f1b1669a97 +Block 0007 [ 62]: a89f350519d56943 +Block 0007 [ 63]: 5c400048568d631d +Block 0007 [ 64]: a96bf018d584151f +Block 0007 [ 65]: 0a3035ab955a79a5 +Block 0007 [ 66]: a19d60cbbe48f711 +Block 0007 [ 67]: f5b135b6f8c2e8a6 +Block 0007 [ 68]: 33270a12add9e641 +Block 0007 [ 69]: 8c224ab20be246e3 +Block 0007 [ 70]: 60df4727935eb9ce +Block 0007 [ 71]: 9b5141d124ec88cf +Block 0007 [ 72]: bcf91ee278b6e202 +Block 0007 [ 73]: 3dcd55a57ff9f5eb +Block 0007 [ 74]: 1dce42dba8d41d03 +Block 0007 [ 75]: 6f383dd35cdec94e +Block 0007 [ 76]: 36ce0d873d5c1de8 +Block 0007 [ 77]: 26d0c0004b6f19c4 +Block 0007 [ 78]: e618af3d62fee3a5 +Block 0007 [ 79]: 345492f55b4e985c +Block 0007 [ 80]: 6e4a85c1607b2c4b +Block 0007 [ 81]: 52dd856c7bb5efa4 +Block 0007 [ 82]: 52dcb46b9c209104 +Block 0007 [ 83]: 32717127c3ee487a +Block 0007 [ 84]: 312697b5cf52940e +Block 0007 [ 85]: 2dcb97fcc018a163 +Block 0007 [ 86]: 177d895c77466d2f +Block 0007 [ 87]: 6e61c547bfb37079 +Block 0007 [ 88]: a59b315fa1be5b68 +Block 0007 [ 89]: 87d66bc90afb2ca6 +Block 0007 [ 90]: 8cf85500edeee702 +Block 0007 [ 91]: ecbbab4d2133b00c +Block 0007 [ 92]: b26d33321ac1abc3 +Block 0007 [ 93]: b4a52773a6207e7d +Block 0007 [ 94]: a209c5896bc6f12a +Block 0007 [ 95]: 41fb84a301cff0c3 +Block 0007 [ 96]: 09cdf552c77b557d +Block 0007 [ 97]: 1e52df18ab3dfb9a +Block 0007 [ 98]: 57fd74a68ad68378 +Block 0007 [ 99]: 07227e916b0f5996 +Block 0007 [100]: 32ef2531400d1b35 +Block 0007 [101]: 4fc2dc41f7b23ff4 +Block 0007 [102]: 0b020da0feb2a228 +Block 0007 [103]: 5cfc2db650991a48 +Block 0007 [104]: f81c0cd56cb9c08f +Block 0007 [105]: e60e21da2ebb7ce8 +Block 0007 [106]: 268739ac9bca060a +Block 0007 [107]: 92cd1e2104e368c5 +Block 0007 [108]: 98156dc095f52233 +Block 0007 [109]: 30f247cf0f011fa1 +Block 0007 [110]: 66f829551d2e0a3e +Block 0007 [111]: ea52274d79ff571e +Block 0007 [112]: acb6d370148653a4 +Block 0007 [113]: 3669b3147dfe731a +Block 0007 [114]: 1c8bdda97133b4ad +Block 0007 [115]: 0cc5dd86167dbc1b +Block 0007 [116]: dd0aa6d96f923c39 +Block 0007 [117]: 512fe7564b090b61 +Block 0007 [118]: c86816c60da06a46 +Block 0007 [119]: dedf55b9d5f4268e +Block 0007 [120]: d29c4a93d713b733 +Block 0007 [121]: f87604f8f94f5aea +Block 0007 [122]: 97d9788450105075 +Block 0007 [123]: 54e489cefdbfb9e0 +Block 0007 [124]: 934701adf12d8e81 +Block 0007 [125]: 95bc8d473335a595 +Block 0007 [126]: fab387b04eacbaaf +Block 0007 [127]: fc3e56a297370c38 +Block 0008 [ 0]: 282145945f12ecd3 +Block 0008 [ 1]: 1ac1aa0b5c30acd6 +Block 0008 [ 2]: 60f8604f21e73053 +Block 0008 [ 3]: 763bbde8b3025afe +Block 0008 [ 4]: 19813cdc34768a0d +Block 0008 [ 5]: 6c91e7d7cca6e347 +Block 0008 [ 6]: 3f049f472508cc53 +Block 0008 [ 7]: e0ffa88d72bebdc2 +Block 0008 [ 8]: de17f817893dfa9c +Block 0008 [ 9]: 2d63b8df6cdea739 +Block 0008 [ 10]: a7d7bc228a9b0279 +Block 0008 [ 11]: f07ab3a91ba1cba8 +Block 0008 [ 12]: 41a0157563872217 +Block 0008 [ 13]: c109c12ad61ddba8 +Block 0008 [ 14]: ecb3deb6a4142e08 +Block 0008 [ 15]: 2a932539267a41ae +Block 0008 [ 16]: 6d3a62fc8d00e500 +Block 0008 [ 17]: f0e439bef2eb6c6e +Block 0008 [ 18]: 1dd011595308ac57 +Block 0008 [ 19]: d60a8d118a649d8d +Block 0008 [ 20]: 37af5bc5a580eeed +Block 0008 [ 21]: 547777804b31ac21 +Block 0008 [ 22]: ceeaa2b7bc51f419 +Block 0008 [ 23]: 680d345e4dfeffa3 +Block 0008 [ 24]: 3047a84a4e3c615f +Block 0008 [ 25]: fc7b6f9717120164 +Block 0008 [ 26]: a106a1af037e2478 +Block 0008 [ 27]: f1d93c81c3d5999e +Block 0008 [ 28]: f5a65b33b2538b91 +Block 0008 [ 29]: 934f66c72c8f525d +Block 0008 [ 30]: dae4e5dffbac54bc +Block 0008 [ 31]: afb603ae332283d2 +Block 0008 [ 32]: af3f345a59ad6951 +Block 0008 [ 33]: bb3ecdfb2eb1d571 +Block 0008 [ 34]: 5ccc9de9818c13d0 +Block 0008 [ 35]: faf5de9da827896e +Block 0008 [ 36]: 952eb0543c6eaa82 +Block 0008 [ 37]: 2137bd47cd8e8d2e +Block 0008 [ 38]: 4767e8759b44592d +Block 0008 [ 39]: 7d5c195b08c35bf9 +Block 0008 [ 40]: 070453b9d1fa6fe1 +Block 0008 [ 41]: 210fb2c38527d6a2 +Block 0008 [ 42]: 6d0e9f7449f23c3e +Block 0008 [ 43]: bac26f89bffad658 +Block 0008 [ 44]: 25ac007e672ee346 +Block 0008 [ 45]: a3c85973642a0166 +Block 0008 [ 46]: 3a925b7f8ad6e011 +Block 0008 [ 47]: 15e0badde1d99090 +Block 0008 [ 48]: 42bf9c540f2e1394 +Block 0008 [ 49]: c2029ee97cd9c915 +Block 0008 [ 50]: 1927c36c7f975006 +Block 0008 [ 51]: 73fa08166e0f1951 +Block 0008 [ 52]: 1aa1638331153336 +Block 0008 [ 53]: a0d8ba67e8d3832c +Block 0008 [ 54]: 5a35f3574b0ecadc +Block 0008 [ 55]: b29d225c180b9d7f +Block 0008 [ 56]: e360ba0f450119ef +Block 0008 [ 57]: 0451064565c02bc1 +Block 0008 [ 58]: 3e41001b8b0e0bbd +Block 0008 [ 59]: 8ca745962358496c +Block 0008 [ 60]: 6fcee749ec5a01f4 +Block 0008 [ 61]: f74dc0b916dd8578 +Block 0008 [ 62]: d79d32fb1ac52b9a +Block 0008 [ 63]: 91c3f4695bb05f08 +Block 0008 [ 64]: aea5311cde98edcb +Block 0008 [ 65]: 29681dca687cb503 +Block 0008 [ 66]: 5ed29cfcf4a05c65 +Block 0008 [ 67]: 69996409342ed84f +Block 0008 [ 68]: 1eb369993397ea34 +Block 0008 [ 69]: abe7f5d61d819f02 +Block 0008 [ 70]: 128ac7ec2988131d +Block 0008 [ 71]: cbf98166be45c13b +Block 0008 [ 72]: 3eb0cc4cf3ffc15b +Block 0008 [ 73]: 4be0eb7cdc596327 +Block 0008 [ 74]: a53dfb2e9c4f1572 +Block 0008 [ 75]: 97628a447584028d +Block 0008 [ 76]: ad8efb47b9527bda +Block 0008 [ 77]: d898345e003d8bfc +Block 0008 [ 78]: aed572ff49f824da +Block 0008 [ 79]: effdfb03ca6d262b +Block 0008 [ 80]: 5c76b7e719d4b092 +Block 0008 [ 81]: 3fbc5d75533377a0 +Block 0008 [ 82]: c3e9be1e87fff04f +Block 0008 [ 83]: 6fd35d2bfd653013 +Block 0008 [ 84]: 8ae6fc6a2a959fe9 +Block 0008 [ 85]: 16c177dac219e4bb +Block 0008 [ 86]: b778cfd1541b7d86 +Block 0008 [ 87]: 71cdb864322493fd +Block 0008 [ 88]: c84ee1bb3002781c +Block 0008 [ 89]: cd3f3001e43f22f2 +Block 0008 [ 90]: ee0723c7e3fa57fa +Block 0008 [ 91]: 3b7905f9889f12ce +Block 0008 [ 92]: 201c9588c929d89e +Block 0008 [ 93]: b1537c7fb54bdfd3 +Block 0008 [ 94]: e258a3bc1d698cf3 +Block 0008 [ 95]: 83255c867a2e8677 +Block 0008 [ 96]: 0279b6538a409fcf +Block 0008 [ 97]: f74290c084079691 +Block 0008 [ 98]: 0632ffc7e37ad8d9 +Block 0008 [ 99]: a200d59ee03ea9d6 +Block 0008 [100]: 46803d61b515f08c +Block 0008 [101]: 6cf535987406656a +Block 0008 [102]: 3995a42c92cc7966 +Block 0008 [103]: 85df03e49bfe47d5 +Block 0008 [104]: 6cceb87dee9aa0c9 +Block 0008 [105]: fc9d31d40341a15e +Block 0008 [106]: 0a180adfadc6356c +Block 0008 [107]: 0e058b8ef724d830 +Block 0008 [108]: f2245297d8482ccf +Block 0008 [109]: b9f1451dc3145bbf +Block 0008 [110]: d0b4ffdea62b3e54 +Block 0008 [111]: 88212eb7971b3f49 +Block 0008 [112]: 10fedd9fe29e14bb +Block 0008 [113]: e3cbbff144f56d12 +Block 0008 [114]: 767f4fd28abed05a +Block 0008 [115]: a6b2027a43f64775 +Block 0008 [116]: ba11fb9502d4a9b6 +Block 0008 [117]: 89729444846e3174 +Block 0008 [118]: cc5ce515d1e99aae +Block 0008 [119]: d46cb5dcdecb9520 +Block 0008 [120]: eb33b12794818b53 +Block 0008 [121]: 6dc4bef6e24fdbfe +Block 0008 [122]: 79c4cad4c865e91a +Block 0008 [123]: f42028b04d0dbbd4 +Block 0008 [124]: 6b0fe2e42e2c8d5e +Block 0008 [125]: 6efc4e74787fb7ad +Block 0008 [126]: 62e777191870974b +Block 0008 [127]: b637d492fff7bf5b +Block 0009 [ 0]: b51ebc1ce5c54587 +Block 0009 [ 1]: f24cfd2d28416a55 +Block 0009 [ 2]: a56be5bda1d10f36 +Block 0009 [ 3]: 1a5f620482fa56e5 +Block 0009 [ 4]: c8cd41bdc76c0502 +Block 0009 [ 5]: 38253d2c027e8ff2 +Block 0009 [ 6]: 89af4f4315191f22 +Block 0009 [ 7]: 77cfcb90bfcb4c5c +Block 0009 [ 8]: 86dd4fda752a6933 +Block 0009 [ 9]: 478a200eb9585357 +Block 0009 [ 10]: 904df51f016d77d7 +Block 0009 [ 11]: 42f6090334873cf3 +Block 0009 [ 12]: 1d0acdb372df3f75 +Block 0009 [ 13]: 6d882e7dee617c83 +Block 0009 [ 14]: 903ec926348998cb +Block 0009 [ 15]: e77922f31cf1b89a +Block 0009 [ 16]: f1f1f3e73eec2745 +Block 0009 [ 17]: 5ba312d7d83b2883 +Block 0009 [ 18]: 5ff76517a1633867 +Block 0009 [ 19]: 41af74d8f12e3e1d +Block 0009 [ 20]: fdc04bd78cfa38a5 +Block 0009 [ 21]: 720cbde8e8dfd8fb +Block 0009 [ 22]: 346652d8064f3f80 +Block 0009 [ 23]: 317b0d033c38db97 +Block 0009 [ 24]: 718f7f0c4bf7e910 +Block 0009 [ 25]: e17fda1c6a8e6ec2 +Block 0009 [ 26]: 3884b2a7782be170 +Block 0009 [ 27]: 0b28a061c237c26e +Block 0009 [ 28]: adbb8d0872b20abf +Block 0009 [ 29]: 2fc555b807f6da68 +Block 0009 [ 30]: 2429a5e8fa7514a9 +Block 0009 [ 31]: dd89d41b0bfe36de +Block 0009 [ 32]: b7d1955a2e89df52 +Block 0009 [ 33]: 60a53a7e0095b3df +Block 0009 [ 34]: bbe12271d25326dd +Block 0009 [ 35]: 7383edb8add93339 +Block 0009 [ 36]: d2c1340e78b8eb9b +Block 0009 [ 37]: 48bb9b6bdddd1978 +Block 0009 [ 38]: bfc99101cf8a0151 +Block 0009 [ 39]: 2e3d430da5248b01 +Block 0009 [ 40]: 714972754e2a3b17 +Block 0009 [ 41]: 980bcc89c6b68d41 +Block 0009 [ 42]: b0bc1736129cd3da +Block 0009 [ 43]: b5e11d28394e62d4 +Block 0009 [ 44]: 66e520fd1c988ac5 +Block 0009 [ 45]: dedd7c5e4748fc1c +Block 0009 [ 46]: 996ff3699d168445 +Block 0009 [ 47]: dd6c882d28be792d +Block 0009 [ 48]: 8523e263ddc58b4a +Block 0009 [ 49]: 179e9ec6d8182cd1 +Block 0009 [ 50]: e9cef718f9504909 +Block 0009 [ 51]: 3b898f007e372a80 +Block 0009 [ 52]: 08a283c2f650064c +Block 0009 [ 53]: 810fefdccd438bda +Block 0009 [ 54]: d5e8770991d2486f +Block 0009 [ 55]: fc1ae28b281de523 +Block 0009 [ 56]: 736f486afd0d647a +Block 0009 [ 57]: bb2be00d646a5185 +Block 0009 [ 58]: 1ca35ad8ceb99210 +Block 0009 [ 59]: 48eacc4e7cb83759 +Block 0009 [ 60]: 3e1dcd336966003c +Block 0009 [ 61]: 9275a2b29941257c +Block 0009 [ 62]: 257e1a89c6d4c1cd +Block 0009 [ 63]: 8c8f67a882805a33 +Block 0009 [ 64]: e5fe75eda295409d +Block 0009 [ 65]: bfdcafe10fdb456f +Block 0009 [ 66]: 40ad88568c584e13 +Block 0009 [ 67]: fa20866a2766c7fe +Block 0009 [ 68]: b310c6d79e568ffb +Block 0009 [ 69]: 503d9253aff998e4 +Block 0009 [ 70]: 495f296b6b61f264 +Block 0009 [ 71]: beef0e82653e020f +Block 0009 [ 72]: be4811e8488ffd1e +Block 0009 [ 73]: 14fb1ffd5fd037e4 +Block 0009 [ 74]: 8afac21754fba78e +Block 0009 [ 75]: d8d9734e8005d3dc +Block 0009 [ 76]: bde1976942530836 +Block 0009 [ 77]: 5a36cfa5bc85404f +Block 0009 [ 78]: 3efcdd865f2ef595 +Block 0009 [ 79]: 8503f12ded4ba3a2 +Block 0009 [ 80]: 8b550ac564227c3c +Block 0009 [ 81]: 3b72f71db910d566 +Block 0009 [ 82]: bc422a71f193fb78 +Block 0009 [ 83]: ac534f6fc1e09dff +Block 0009 [ 84]: ad0b10c5fb42fc0b +Block 0009 [ 85]: 52a2d4dcf13d5e0a +Block 0009 [ 86]: df202d34863e7be9 +Block 0009 [ 87]: 09e4eb0e6fd242ac +Block 0009 [ 88]: cd33e3660e9c1a73 +Block 0009 [ 89]: b6e4d387310b7df0 +Block 0009 [ 90]: f1d8514afa7b45d3 +Block 0009 [ 91]: cf750fb315193dc3 +Block 0009 [ 92]: 0d1f7681fe88f783 +Block 0009 [ 93]: e2580891465c28f6 +Block 0009 [ 94]: 81edf01e45e5303a +Block 0009 [ 95]: 972e459a0b4b78a1 +Block 0009 [ 96]: 73d4b4cd70e66a45 +Block 0009 [ 97]: e8ae9b153e316496 +Block 0009 [ 98]: c5bf4b57c7ee3cf7 +Block 0009 [ 99]: 5f0e59387d54969e +Block 0009 [100]: 4f06752cd7252de1 +Block 0009 [101]: 8a206fbc01509988 +Block 0009 [102]: c9d48b8fbd5b7adc +Block 0009 [103]: dd331a619ec7fd24 +Block 0009 [104]: ce99e40346f40515 +Block 0009 [105]: bc258259f1ff919c +Block 0009 [106]: 3007e9ff3fe6a502 +Block 0009 [107]: 4c9bc60f05fe4dd6 +Block 0009 [108]: fcee0af0e0ab22b0 +Block 0009 [109]: 7bf90ecf20597b49 +Block 0009 [110]: 14c6e9adffbcb2cc +Block 0009 [111]: 57d24e03ac4a9495 +Block 0009 [112]: 6265cd2145acfcbb +Block 0009 [113]: 462777e67b621ec4 +Block 0009 [114]: d83e82f38e7f7089 +Block 0009 [115]: 8240ac135c1961cf +Block 0009 [116]: 9b5cfa591d26ff97 +Block 0009 [117]: 23fc3a587408818a +Block 0009 [118]: a406f4578dc58fca +Block 0009 [119]: 8997f1c33e411d00 +Block 0009 [120]: 8908c3f119cf398d +Block 0009 [121]: 7ca9090945d56951 +Block 0009 [122]: a3d87d8e207ed64d +Block 0009 [123]: 8ce2e01f7a194ebc +Block 0009 [124]: 70231c9ccdb58341 +Block 0009 [125]: 2b3dea3311b02815 +Block 0009 [126]: bdebaed5c4dc0a02 +Block 0009 [127]: 84af05b1e80139c5 +Block 0010 [ 0]: f173509e8c6951f0 +Block 0010 [ 1]: 5ecae05ac3a7f094 +Block 0010 [ 2]: 87b04b90fb412faf +Block 0010 [ 3]: 9d7a4584deb3c1bc +Block 0010 [ 4]: 938349d693eabff7 +Block 0010 [ 5]: e51daa894d1b1d86 +Block 0010 [ 6]: 7839e531eb3ef150 +Block 0010 [ 7]: dcc8bac832dd9263 +Block 0010 [ 8]: 503f31984a22a73d +Block 0010 [ 9]: 32dd0cf3b1a6f6da +Block 0010 [ 10]: 6232dd0ddf1f293a +Block 0010 [ 11]: c08cf7243d71db15 +Block 0010 [ 12]: 9dd223a71d553c7e +Block 0010 [ 13]: e705405f11c0c88a +Block 0010 [ 14]: a76cbcff056ea623 +Block 0010 [ 15]: 4211d6067c63e4ea +Block 0010 [ 16]: e38b95c43b6c8c42 +Block 0010 [ 17]: fa039b85f4e37025 +Block 0010 [ 18]: c7641d8b3c1d3d27 +Block 0010 [ 19]: a168373a6246e3b1 +Block 0010 [ 20]: 1c29f3c317d4a842 +Block 0010 [ 21]: 0e112c2b5002251c +Block 0010 [ 22]: 35edabf640a1a4be +Block 0010 [ 23]: fbece5e62986f45e +Block 0010 [ 24]: a0300d91ab35e389 +Block 0010 [ 25]: 2307aae53bb6cdff +Block 0010 [ 26]: 8ff7b4bbe121ebe8 +Block 0010 [ 27]: 9fa0f247c76473b3 +Block 0010 [ 28]: b3fba8860e65096e +Block 0010 [ 29]: bc5fae00925aa4bd +Block 0010 [ 30]: e45c0c1a94a0716e +Block 0010 [ 31]: 81e3abe71ec403bc +Block 0010 [ 32]: 8cf7ad3248baf5d4 +Block 0010 [ 33]: 42a689d358de4862 +Block 0010 [ 34]: 722e6ab07bb13dd4 +Block 0010 [ 35]: 4925a4d2c005727a +Block 0010 [ 36]: c15fd84720b2611a +Block 0010 [ 37]: d4d87de5205dfb30 +Block 0010 [ 38]: 22b28aa75745fc2d +Block 0010 [ 39]: 749dc8d5598179a6 +Block 0010 [ 40]: eeaa16e0659e0192 +Block 0010 [ 41]: fa25ab267613034e +Block 0010 [ 42]: 4508a5f87fe32a35 +Block 0010 [ 43]: 9540fef3fc000dac +Block 0010 [ 44]: 0541345b4b35787d +Block 0010 [ 45]: b6d197f33253019b +Block 0010 [ 46]: 40c00ee49dabe233 +Block 0010 [ 47]: 10dcffe3f4d84140 +Block 0010 [ 48]: 6f6504bd4202b80b +Block 0010 [ 49]: 4910aadb5d995e14 +Block 0010 [ 50]: 3be7598ad6b7b00f +Block 0010 [ 51]: 16d760387217d677 +Block 0010 [ 52]: 157c2603fb94d372 +Block 0010 [ 53]: 245a425507040bbd +Block 0010 [ 54]: 53119479f5874f90 +Block 0010 [ 55]: bf6f9b8692f0b837 +Block 0010 [ 56]: 0049c75dfc7dc720 +Block 0010 [ 57]: f238ae4395b094b4 +Block 0010 [ 58]: 2dcb2348df0bd8e1 +Block 0010 [ 59]: 3210cccdb289293f +Block 0010 [ 60]: 51c7facbf4d63c99 +Block 0010 [ 61]: eff7c07dfef9e59d +Block 0010 [ 62]: f2ab55b9e629297f +Block 0010 [ 63]: 8edf75faa3478b49 +Block 0010 [ 64]: 774ecc317f36cfe1 +Block 0010 [ 65]: db216cef5837ca17 +Block 0010 [ 66]: e9cd3059b825aae6 +Block 0010 [ 67]: f46039c3d87aeb33 +Block 0010 [ 68]: 420dd68f9b66827a +Block 0010 [ 69]: 34f07ae5e76d6e8a +Block 0010 [ 70]: d5ac5c911584d4cb +Block 0010 [ 71]: 058f82cec99756b0 +Block 0010 [ 72]: d11c2004749ba930 +Block 0010 [ 73]: 9f1ff374580eb6c0 +Block 0010 [ 74]: 9f957fa50da0b9f3 +Block 0010 [ 75]: 1c44951395918e91 +Block 0010 [ 76]: 7111b1a8aae6be7f +Block 0010 [ 77]: 0ab3388f275426ef +Block 0010 [ 78]: 26fc0217e12d62d0 +Block 0010 [ 79]: f2ce2aa321c90437 +Block 0010 [ 80]: 4fda333183fd6655 +Block 0010 [ 81]: e019af98f13ee4d9 +Block 0010 [ 82]: 6bab83f3f92f653b +Block 0010 [ 83]: ffee52f49e2f42a8 +Block 0010 [ 84]: f150c70d8514a7e6 +Block 0010 [ 85]: 806c48b29ace438b +Block 0010 [ 86]: 6c9f59490dc47c0c +Block 0010 [ 87]: d2da0113cc468eec +Block 0010 [ 88]: acd3870091fa11ae +Block 0010 [ 89]: b3349dd058479c88 +Block 0010 [ 90]: 9802b3b860a9a3cb +Block 0010 [ 91]: 00e0840446d6776e +Block 0010 [ 92]: 57ef8b24e3d3cd3e +Block 0010 [ 93]: 9eb466c964e0fe56 +Block 0010 [ 94]: 5a73a0ddbf0b8322 +Block 0010 [ 95]: bf5e064687ff3f2f +Block 0010 [ 96]: 5657e143ddc3b17c +Block 0010 [ 97]: fcf05095a8320084 +Block 0010 [ 98]: f9f69e9b630ee96a +Block 0010 [ 99]: f1c9e9bdbe357cdd +Block 0010 [100]: 77103f2471d037dc +Block 0010 [101]: 270fbe363e682e11 +Block 0010 [102]: e26bcc409254504e +Block 0010 [103]: f090445c6daa8d1d +Block 0010 [104]: f2b96cf4bd3aee9d +Block 0010 [105]: d4b5c4138079400b +Block 0010 [106]: 851896bd06456429 +Block 0010 [107]: b0e197d30c2302f0 +Block 0010 [108]: ad14c29915ce379d +Block 0010 [109]: f20a29201fb36736 +Block 0010 [110]: ea3f27b2e1aa01ef +Block 0010 [111]: ece60dc38bf94d59 +Block 0010 [112]: 4ff4f6bba8050abe +Block 0010 [113]: be89f5fb18df5156 +Block 0010 [114]: f44369b404835880 +Block 0010 [115]: 62e51fbf337ceb9a +Block 0010 [116]: 3e1079ced5348d06 +Block 0010 [117]: ebeedc4a3dd087bf +Block 0010 [118]: d26839c2654c02a1 +Block 0010 [119]: cb67fe217aa3fa9e +Block 0010 [120]: 2d9a64ea20bab5eb +Block 0010 [121]: d2685facf666715a +Block 0010 [122]: 70e5091ed6e07b6c +Block 0010 [123]: fb3438d9b59896ef +Block 0010 [124]: 45a3f4fb770aae6c +Block 0010 [125]: 34dcff3647fe618e +Block 0010 [126]: 317cdd9023e383f9 +Block 0010 [127]: e8a91e43c976159a +Block 0011 [ 0]: 1fd1594b82df1dfa +Block 0011 [ 1]: 8356d52c018e2d54 +Block 0011 [ 2]: 2b25d4c0ce6857dc +Block 0011 [ 3]: e38988c550171f57 +Block 0011 [ 4]: f256212a4b780db5 +Block 0011 [ 5]: 109671484ffeb0e1 +Block 0011 [ 6]: 07958db0c32c7ad7 +Block 0011 [ 7]: b5244109ffaec646 +Block 0011 [ 8]: 6deb9ce5497d4bbf +Block 0011 [ 9]: f6bd231e7e9e4664 +Block 0011 [ 10]: 0af37ff345afd9f3 +Block 0011 [ 11]: 4e116d808b9db908 +Block 0011 [ 12]: c14a0b50f20f7f5c +Block 0011 [ 13]: 015304b3b9c7b933 +Block 0011 [ 14]: 75938887ff2ed1f8 +Block 0011 [ 15]: d497584fe66718cb +Block 0011 [ 16]: 5f9c6abddfc3c763 +Block 0011 [ 17]: fccdaf55d21a649c +Block 0011 [ 18]: 64047640a2346f52 +Block 0011 [ 19]: 7f87cac3095edc21 +Block 0011 [ 20]: e316f30445340fe7 +Block 0011 [ 21]: 26b96f77308e2070 +Block 0011 [ 22]: cff78be364db6c6b +Block 0011 [ 23]: 557b2b82bfae51a1 +Block 0011 [ 24]: a54c3e902a240602 +Block 0011 [ 25]: 8d666deaaf8c83c3 +Block 0011 [ 26]: 7f4e040bf76908a8 +Block 0011 [ 27]: f6adecc892d33ab0 +Block 0011 [ 28]: 5fc73bd7e58f4a3e +Block 0011 [ 29]: a4d0cce01bbee3e0 +Block 0011 [ 30]: fb2d8fb79f6ab152 +Block 0011 [ 31]: 38e68dc30491f640 +Block 0011 [ 32]: 2c9de1778c5de4f6 +Block 0011 [ 33]: ace30ebb97b3bc42 +Block 0011 [ 34]: bffe6eb4b67452a8 +Block 0011 [ 35]: c78b6d4d48e23ddf +Block 0011 [ 36]: 7775c5958faa5a6c +Block 0011 [ 37]: 68014715c9f5e5ce +Block 0011 [ 38]: 898c95f1cde02893 +Block 0011 [ 39]: 13f5ea34f1732ec6 +Block 0011 [ 40]: 7318b943b749fa47 +Block 0011 [ 41]: 082e401cab2de318 +Block 0011 [ 42]: 4c32158ff923f585 +Block 0011 [ 43]: eef77621983721fb +Block 0011 [ 44]: 02d490a3209b78a7 +Block 0011 [ 45]: 8770be626e6e8c16 +Block 0011 [ 46]: 3ddf6df056b37443 +Block 0011 [ 47]: 44d477f220017c45 +Block 0011 [ 48]: 0466ab1b16d9daf0 +Block 0011 [ 49]: 6ddc70d233e22d85 +Block 0011 [ 50]: 63c9a17c29126f50 +Block 0011 [ 51]: a04bb2d97d9a6b41 +Block 0011 [ 52]: 019bd561e0b2a9c9 +Block 0011 [ 53]: 1d18fd9a1ba73242 +Block 0011 [ 54]: 88c4f53bf9e5ef1a +Block 0011 [ 55]: ff13b6aee469b983 +Block 0011 [ 56]: 5726af33d8098ff6 +Block 0011 [ 57]: d51ee36307e108d9 +Block 0011 [ 58]: eceb791278214d78 +Block 0011 [ 59]: 0145bc4302e4a279 +Block 0011 [ 60]: 103fc5eb0ca47ade +Block 0011 [ 61]: a0815229bbf5a6a1 +Block 0011 [ 62]: 152f5e569d9cd53a +Block 0011 [ 63]: 11f789c95adc2fd8 +Block 0011 [ 64]: 78c4c36d005d72b9 +Block 0011 [ 65]: 14c55c2f993804bc +Block 0011 [ 66]: f335bc41204c6a26 +Block 0011 [ 67]: a3b078547373e462 +Block 0011 [ 68]: 29fbcf862902747d +Block 0011 [ 69]: f526be07b3d4cd6d +Block 0011 [ 70]: 6cc9609dfade5ebc +Block 0011 [ 71]: 4f7efba69a0477a4 +Block 0011 [ 72]: dbabe545e63b086d +Block 0011 [ 73]: 4bc7c9a2eed311b7 +Block 0011 [ 74]: 64e54d8b1bab4a1f +Block 0011 [ 75]: d76fff4669327dfd +Block 0011 [ 76]: 321692d0e50cbb4b +Block 0011 [ 77]: aa32a5f7807d1935 +Block 0011 [ 78]: 4f5a8fbfcac5f52b +Block 0011 [ 79]: 60f86347392bbd97 +Block 0011 [ 80]: 74a612d2547ff8b8 +Block 0011 [ 81]: 86529138b37e41b1 +Block 0011 [ 82]: 07a56ff7d5df2923 +Block 0011 [ 83]: 48c0b2cd2c8ec937 +Block 0011 [ 84]: f25406b807d0509f +Block 0011 [ 85]: 7dd53859b3414d79 +Block 0011 [ 86]: a542f6bbc495ef25 +Block 0011 [ 87]: 467563dd0f231916 +Block 0011 [ 88]: 453396eac5ad4b1e +Block 0011 [ 89]: 54aaf9a724d9627d +Block 0011 [ 90]: 7f7a8d36b13cc862 +Block 0011 [ 91]: 9961e8e3fd191c9c +Block 0011 [ 92]: ba00227f9cbcaed2 +Block 0011 [ 93]: ae68b8273c755e87 +Block 0011 [ 94]: cdce8af651a75b3b +Block 0011 [ 95]: 839999074aab83eb +Block 0011 [ 96]: a3427e62f8a2fde7 +Block 0011 [ 97]: 5aa52a737e043106 +Block 0011 [ 98]: 140d77a072532183 +Block 0011 [ 99]: 1629c1497b7dca49 +Block 0011 [100]: 139701bbf30af41e +Block 0011 [101]: fa67c839cbd36888 +Block 0011 [102]: b93f013495c2fb7c +Block 0011 [103]: a780e94dc6aed270 +Block 0011 [104]: caf607bc55cedb65 +Block 0011 [105]: 101c942911ede959 +Block 0011 [106]: 0e29fa0ded8a9f09 +Block 0011 [107]: ad8be809951517f7 +Block 0011 [108]: 61c3d9430d2dc220 +Block 0011 [109]: 8f994499afc1a216 +Block 0011 [110]: 369a6933dab8d31f +Block 0011 [111]: 9829be415fb7ca60 +Block 0011 [112]: 7d81a1df1b3a8a4b +Block 0011 [113]: 4a1f610433899dac +Block 0011 [114]: 102c08b6e7485a6c +Block 0011 [115]: 1a20f39e1997f7df +Block 0011 [116]: dede8cdccea7dbc4 +Block 0011 [117]: fe662506f4ef1565 +Block 0011 [118]: c59f245f91cc9f21 +Block 0011 [119]: 7edf0558eed181ff +Block 0011 [120]: 52660f58659e6416 +Block 0011 [121]: 9a8652ba35ebbfe3 +Block 0011 [122]: 3ddcc3f3a9d0d4e9 +Block 0011 [123]: 9b77732233e29b31 +Block 0011 [124]: 5cca0503b8810763 +Block 0011 [125]: 20437f00f7599495 +Block 0011 [126]: 697494785bf513c0 +Block 0011 [127]: 3ab8bd182b6c8249 +Block 0012 [ 0]: 74c495065857a14a +Block 0012 [ 1]: ec96b80a6b33aca7 +Block 0012 [ 2]: f444c0ff27974ebd +Block 0012 [ 3]: 8be83acdb72435c6 +Block 0012 [ 4]: dd61727abd58d7f6 +Block 0012 [ 5]: 5cfb6a444de715d1 +Block 0012 [ 6]: 96783e23efc4d2a0 +Block 0012 [ 7]: 8676efba8fca7711 +Block 0012 [ 8]: 03b65deaa794547b +Block 0012 [ 9]: 723cbdd0b9bb8d66 +Block 0012 [ 10]: f41cacae2bcf2b0b +Block 0012 [ 11]: e2aec66d0247e1c1 +Block 0012 [ 12]: 3b397dcc3b4b0baa +Block 0012 [ 13]: c1b6183e2bb1ba29 +Block 0012 [ 14]: 872ddf74f2f0c4b6 +Block 0012 [ 15]: 7fa99dcf8c868329 +Block 0012 [ 16]: 81aaf228dab8d432 +Block 0012 [ 17]: f662d33a0d61f712 +Block 0012 [ 18]: fc94f70f5dbbd7f8 +Block 0012 [ 19]: 091fdf4051ca05bf +Block 0012 [ 20]: db86fbd51496da46 +Block 0012 [ 21]: e23f27c3e27cfce4 +Block 0012 [ 22]: b30cbb5f194f3665 +Block 0012 [ 23]: 098e970f7402448a +Block 0012 [ 24]: 8b8c305c65695a8b +Block 0012 [ 25]: 7d510babc681fec3 +Block 0012 [ 26]: 9730753a01829732 +Block 0012 [ 27]: 07fcd4c5caad3b8a +Block 0012 [ 28]: 0e460f3d1bd79795 +Block 0012 [ 29]: c4a603208e0f3b48 +Block 0012 [ 30]: 379b4e95cba16ceb +Block 0012 [ 31]: bc72b408d217a603 +Block 0012 [ 32]: c47562fb642367b8 +Block 0012 [ 33]: 7c3c05432783dc7e +Block 0012 [ 34]: d67d0d228e37ecf9 +Block 0012 [ 35]: a2af9cf396be30e5 +Block 0012 [ 36]: 5f9c37739225a9f6 +Block 0012 [ 37]: 1622955d4a9a1422 +Block 0012 [ 38]: 05813a48687001ac +Block 0012 [ 39]: 29b364a9d8d6ae47 +Block 0012 [ 40]: c669633534f43bee +Block 0012 [ 41]: 44cfaee91755b969 +Block 0012 [ 42]: b438bfa944ef8f40 +Block 0012 [ 43]: 8d70530a6dd56e35 +Block 0012 [ 44]: 400f2ca1ed882bc7 +Block 0012 [ 45]: 160924cb0e833079 +Block 0012 [ 46]: 35a0cba772432178 +Block 0012 [ 47]: 0c854eeba328e0af +Block 0012 [ 48]: ed795385b6c8c33d +Block 0012 [ 49]: 99e486b31d520a75 +Block 0012 [ 50]: 1b5b830b450e4c3b +Block 0012 [ 51]: 93d51f5a82abbfce +Block 0012 [ 52]: 1bc16f482ff354bb +Block 0012 [ 53]: 757533f073cc215d +Block 0012 [ 54]: d408a1d75467d7b5 +Block 0012 [ 55]: 17e3c3b05d2def65 +Block 0012 [ 56]: eb8227aaf6789f99 +Block 0012 [ 57]: 59ad64f49eb5e25e +Block 0012 [ 58]: f6388f3df1ffa208 +Block 0012 [ 59]: b538d46a9f9f5615 +Block 0012 [ 60]: d7fadc7f0d1a1a9b +Block 0012 [ 61]: cc5653b41856d599 +Block 0012 [ 62]: 2eb0cb645a22bc9f +Block 0012 [ 63]: a604231af8395b0a +Block 0012 [ 64]: a280f5b5784bb713 +Block 0012 [ 65]: 8127d0070d705591 +Block 0012 [ 66]: 9d027a04414ff63b +Block 0012 [ 67]: c18b91df73f8b2ee +Block 0012 [ 68]: baba58a0614a8348 +Block 0012 [ 69]: fa0979b12baca497 +Block 0012 [ 70]: 488e2446c1ace4eb +Block 0012 [ 71]: 61b55bd7789e6757 +Block 0012 [ 72]: a3792ee1291d3d19 +Block 0012 [ 73]: ec996ff15540cb7f +Block 0012 [ 74]: 846eb47bb5500c0a +Block 0012 [ 75]: 63004d98c3fa85ad +Block 0012 [ 76]: d5e0c488c883d3a5 +Block 0012 [ 77]: e17c041222078902 +Block 0012 [ 78]: 5229cef32a4a309d +Block 0012 [ 79]: ff7e6b193154b239 +Block 0012 [ 80]: 50b448deb704b282 +Block 0012 [ 81]: fdf2757c71dd05fe +Block 0012 [ 82]: 798ce5f0123757e3 +Block 0012 [ 83]: 2ee64751ff269375 +Block 0012 [ 84]: 07b502f310eeb614 +Block 0012 [ 85]: 5a2921f9d24871da +Block 0012 [ 86]: a84d011edf032722 +Block 0012 [ 87]: a06da58fec671444 +Block 0012 [ 88]: 7b29541f047f8c39 +Block 0012 [ 89]: f272e37908f33227 +Block 0012 [ 90]: 32fd9dccac14f94e +Block 0012 [ 91]: 472efa6203e12101 +Block 0012 [ 92]: cac17d5f64192468 +Block 0012 [ 93]: 59ef34af8d1d42a7 +Block 0012 [ 94]: 875aff50e380c04a +Block 0012 [ 95]: 2ab6fe1d9aea14e8 +Block 0012 [ 96]: c687fa35d4bf9769 +Block 0012 [ 97]: 5be39abfa75b0e19 +Block 0012 [ 98]: ba5f78e7bf0c55ad +Block 0012 [ 99]: 3cebbe87e128539a +Block 0012 [100]: 0919a876f25bc820 +Block 0012 [101]: 6c9791f13fbbca50 +Block 0012 [102]: 3f74e510198bfc60 +Block 0012 [103]: f1aa13bc480aaa8c +Block 0012 [104]: 973b47716c2abba4 +Block 0012 [105]: 471cc7d2ca3eb89e +Block 0012 [106]: 8455ba5c570cd648 +Block 0012 [107]: e3bb3806a7479560 +Block 0012 [108]: 7d4cab7697e464b0 +Block 0012 [109]: 6c0ca3ec57564285 +Block 0012 [110]: 3267684183405f26 +Block 0012 [111]: 498afc2bc754e598 +Block 0012 [112]: 55076940aea93c2d +Block 0012 [113]: c63498bc724b3e1c +Block 0012 [114]: 50286619f7262a6f +Block 0012 [115]: 7984fb064e978bfc +Block 0012 [116]: 336490a1908c9a5b +Block 0012 [117]: f09f3b5b9959b3b7 +Block 0012 [118]: 04eceef263776576 +Block 0012 [119]: c7c191df82ea3c6a +Block 0012 [120]: 5b752037136cbc1c +Block 0012 [121]: 551ebaf941eec52c +Block 0012 [122]: 4d83b34b970f4d4f +Block 0012 [123]: 2a3e438748d1dc29 +Block 0012 [124]: c5ef48e4d9a7f09b +Block 0012 [125]: 762f8a841324bd19 +Block 0012 [126]: 65bec05883e5886e +Block 0012 [127]: b2fc97d678dbd986 +Block 0013 [ 0]: f75d1354c7eff19d +Block 0013 [ 1]: f5fd92f820842d7c +Block 0013 [ 2]: a711022a884ef6a1 +Block 0013 [ 3]: 796eb5ae4cebbf72 +Block 0013 [ 4]: 34f4edb4b0bb102a +Block 0013 [ 5]: 527c17ebdfc0c883 +Block 0013 [ 6]: bac872ffd4a899e9 +Block 0013 [ 7]: 0522808bceae9ae7 +Block 0013 [ 8]: eb3916bea08873f3 +Block 0013 [ 9]: b760bfb7537a57fa +Block 0013 [ 10]: 23d02fe031ecd3b5 +Block 0013 [ 11]: e400bae4a51546a9 +Block 0013 [ 12]: 49809cc34eecfd88 +Block 0013 [ 13]: e448e83b2b95201f +Block 0013 [ 14]: 2dc1a9d3a9c51942 +Block 0013 [ 15]: 8fef158e528ff970 +Block 0013 [ 16]: d661aadbbce68680 +Block 0013 [ 17]: ea34db317a216dd2 +Block 0013 [ 18]: 587895e1bf64fb03 +Block 0013 [ 19]: 64a9ed9c8bda7ab4 +Block 0013 [ 20]: 740cefd8d01b7666 +Block 0013 [ 21]: 4b6789a28b65f286 +Block 0013 [ 22]: f76c5b55c95c36f9 +Block 0013 [ 23]: 53f061c978252730 +Block 0013 [ 24]: 16a8ffa2013f1ff2 +Block 0013 [ 25]: 10ebd23ff30f48a2 +Block 0013 [ 26]: 3218fed20a63abf3 +Block 0013 [ 27]: e963d15f8d882329 +Block 0013 [ 28]: d26c43ad40e39071 +Block 0013 [ 29]: e6bb387045d95f5e +Block 0013 [ 30]: 9f68984830dd0c41 +Block 0013 [ 31]: 50c0a501f586171a +Block 0013 [ 32]: 015ae6072d8b2cba +Block 0013 [ 33]: b4141c1309479d7a +Block 0013 [ 34]: 120fc0ddf04bf858 +Block 0013 [ 35]: e3c3b1d547f1fbc2 +Block 0013 [ 36]: 3f440891de34519c +Block 0013 [ 37]: 859a4ece024def20 +Block 0013 [ 38]: b5f5a36371af5e5f +Block 0013 [ 39]: 3f5240a23a119f8c +Block 0013 [ 40]: 1ad71f0a68b88ca8 +Block 0013 [ 41]: b86e1a786107d5c8 +Block 0013 [ 42]: 01753f0f078fd87d +Block 0013 [ 43]: db2d2c4971651e47 +Block 0013 [ 44]: e47a46551a5218d7 +Block 0013 [ 45]: 8e2a4bec6d4106ae +Block 0013 [ 46]: 2e4c7722d94c4d90 +Block 0013 [ 47]: dffa15c8668c5cfd +Block 0013 [ 48]: 8ae2b1e76e12b127 +Block 0013 [ 49]: 49a5545f357b871b +Block 0013 [ 50]: 55aeb2fb9171edec +Block 0013 [ 51]: 1231e0a504d2971e +Block 0013 [ 52]: 84eac2f928b0a9d7 +Block 0013 [ 53]: fd1663ff5d624cff +Block 0013 [ 54]: e43cd597b2e3bddd +Block 0013 [ 55]: 7f1b719416fe0e8b +Block 0013 [ 56]: 3ae44722630c4674 +Block 0013 [ 57]: 465dcfb6ac8ce226 +Block 0013 [ 58]: ebd6211d53806927 +Block 0013 [ 59]: dd0cba9b6ee34124 +Block 0013 [ 60]: c77893c04e5e94e0 +Block 0013 [ 61]: 84acbc610447e84d +Block 0013 [ 62]: d133ad166027d506 +Block 0013 [ 63]: 51ea6c487d52417c +Block 0013 [ 64]: 5b13f5e040466e87 +Block 0013 [ 65]: 5bd01c7053fcf695 +Block 0013 [ 66]: dc6959bdff3c7319 +Block 0013 [ 67]: e07a1be4b5c6bf3a +Block 0013 [ 68]: f0a93277edf0c0fe +Block 0013 [ 69]: b2868562b862b79c +Block 0013 [ 70]: a75ec6c9f1625a7e +Block 0013 [ 71]: a916ca4fec36d981 +Block 0013 [ 72]: 7a7ef1190665727e +Block 0013 [ 73]: c8f525083c5e2f46 +Block 0013 [ 74]: 3236e7db95f7edba +Block 0013 [ 75]: e14e241dcb7d0a5f +Block 0013 [ 76]: 052ee041aa00b158 +Block 0013 [ 77]: aa201a671fecd938 +Block 0013 [ 78]: 5d3255300f8debe0 +Block 0013 [ 79]: 1dbe7f19c75a9a1c +Block 0013 [ 80]: c584df9197af7e54 +Block 0013 [ 81]: cf170f2644304dff +Block 0013 [ 82]: 6608d6d6b6ea219f +Block 0013 [ 83]: a6b43893a8363c79 +Block 0013 [ 84]: 6af3db3e1a954246 +Block 0013 [ 85]: a8ab0b1f021db354 +Block 0013 [ 86]: 89d22a874897ce37 +Block 0013 [ 87]: 631a49f4a9227896 +Block 0013 [ 88]: 597052bc91749582 +Block 0013 [ 89]: f731597f0238a1e9 +Block 0013 [ 90]: 98cd65e35a8a9de7 +Block 0013 [ 91]: 34b7630d576bdab0 +Block 0013 [ 92]: ab6cbc4905e83f76 +Block 0013 [ 93]: 65063cddd2cd614f +Block 0013 [ 94]: 5c6cf191124f0ca8 +Block 0013 [ 95]: 1d3130a17463b667 +Block 0013 [ 96]: b5998c71dc07fb0c +Block 0013 [ 97]: 9b47c94dc9ff3346 +Block 0013 [ 98]: 96b2173e4523582c +Block 0013 [ 99]: f0809f5374eec4a6 +Block 0013 [100]: ddf0752aeaad2081 +Block 0013 [101]: 8c1fb3710eedcadb +Block 0013 [102]: 988382d33a7f7cd1 +Block 0013 [103]: 8e5e7ea83a32557f +Block 0013 [104]: 55e74a052f3ddf11 +Block 0013 [105]: c1061700ffde6f76 +Block 0013 [106]: 102873e597b7160b +Block 0013 [107]: 642bbdc433f89d4b +Block 0013 [108]: 48135512e4835333 +Block 0013 [109]: 2ff1ae6b4e916b1e +Block 0013 [110]: d28b18bb3a370a8c +Block 0013 [111]: 67b7e874386777f0 +Block 0013 [112]: 66b00fdb00abf17c +Block 0013 [113]: d3ceed959b096696 +Block 0013 [114]: d44bb11bde2609d3 +Block 0013 [115]: 1bce7a85faa938ba +Block 0013 [116]: 6d7ccb20622593cb +Block 0013 [117]: e35a6dcd4dafdb81 +Block 0013 [118]: 2a755a917cf7f449 +Block 0013 [119]: 88ffa8fdf6960caa +Block 0013 [120]: b4b74a1f5928c3c2 +Block 0013 [121]: 704dc3689cc7cc99 +Block 0013 [122]: 95388c99ba9e902f +Block 0013 [123]: 76ce0e7b84b21455 +Block 0013 [124]: af618d480e8cc3dd +Block 0013 [125]: e3d0d2c733f20c6e +Block 0013 [126]: 47aedb4b4130ed9c +Block 0013 [127]: 630a965da8802d51 +Block 0014 [ 0]: a461476242d7a59e +Block 0014 [ 1]: 793e7b824d249885 +Block 0014 [ 2]: 8b31bf1c5251fa4f +Block 0014 [ 3]: 8419da321623d533 +Block 0014 [ 4]: c4e7b053013901b4 +Block 0014 [ 5]: 968287121fe56806 +Block 0014 [ 6]: 01dd360820ab43cd +Block 0014 [ 7]: d9747eb7cb1ae162 +Block 0014 [ 8]: aa61246c0096cea4 +Block 0014 [ 9]: 184744ac0181d478 +Block 0014 [ 10]: d33b25b159cbad6d +Block 0014 [ 11]: 57dae905157b326c +Block 0014 [ 12]: d2dfb8667245f623 +Block 0014 [ 13]: 53c48207f3560823 +Block 0014 [ 14]: 463becfdfd0dc65f +Block 0014 [ 15]: 3478ccf1587fa3e6 +Block 0014 [ 16]: ed43411af9589a5f +Block 0014 [ 17]: 498ac28bddf50caa +Block 0014 [ 18]: fa10436f3b1d9768 +Block 0014 [ 19]: 9c44f3528091dfe5 +Block 0014 [ 20]: d0fcba297c327462 +Block 0014 [ 21]: ea24e68ccd7e5881 +Block 0014 [ 22]: b57b40034030946a +Block 0014 [ 23]: 50d76f6d5c6246a2 +Block 0014 [ 24]: 4dc5fe0132ace88c +Block 0014 [ 25]: 085b1be1857617f4 +Block 0014 [ 26]: 8f0834b6fd83ba12 +Block 0014 [ 27]: c94afed014cdc9ee +Block 0014 [ 28]: 889fe873e29786bd +Block 0014 [ 29]: 99fca3a0f55bcbf6 +Block 0014 [ 30]: db6fe5823ed66e32 +Block 0014 [ 31]: 2bd9fcf53c862b1a +Block 0014 [ 32]: ce81207a7f1acfa4 +Block 0014 [ 33]: 5d71bf5f5f5acc02 +Block 0014 [ 34]: 739fbc4887d79690 +Block 0014 [ 35]: 6f4a792cde2fd5cc +Block 0014 [ 36]: d24cbfa7ff261450 +Block 0014 [ 37]: 360bd520e4115330 +Block 0014 [ 38]: fdea52ae2de55082 +Block 0014 [ 39]: 78f9158b431687a0 +Block 0014 [ 40]: 7133a4a752cf05a1 +Block 0014 [ 41]: 01c66f39cb89826e +Block 0014 [ 42]: 4ae0f9368cc3ad78 +Block 0014 [ 43]: b3db2b553f9b03b9 +Block 0014 [ 44]: 1469154cc172f9d1 +Block 0014 [ 45]: e1b64f1c6626069c +Block 0014 [ 46]: 879aea87b0a3d20b +Block 0014 [ 47]: 8455677d1bdc2c33 +Block 0014 [ 48]: e80237fe8e642e21 +Block 0014 [ 49]: 504e4b88eccfcc84 +Block 0014 [ 50]: 1fc697e8a26e91d5 +Block 0014 [ 51]: 9465a35e1648397c +Block 0014 [ 52]: 4f34578d6c381f62 +Block 0014 [ 53]: 25f545b54ff5ae63 +Block 0014 [ 54]: 5691ccb5637ad97d +Block 0014 [ 55]: caa0275684145e40 +Block 0014 [ 56]: 641968a1daa8cb41 +Block 0014 [ 57]: fb0ff3c67859c362 +Block 0014 [ 58]: dd0bca636e098eb6 +Block 0014 [ 59]: 25c5ea8ff9947ae7 +Block 0014 [ 60]: fe2a2e75cdde7486 +Block 0014 [ 61]: 9786b6dcda3a8002 +Block 0014 [ 62]: e33401fa5a304bcf +Block 0014 [ 63]: 17cdb217f104d8ed +Block 0014 [ 64]: 529ec3b59e120728 +Block 0014 [ 65]: e0f25bcbedbdeb14 +Block 0014 [ 66]: e87e2a611e9762c3 +Block 0014 [ 67]: 903b6e004f8e2466 +Block 0014 [ 68]: e769cc9b54e7fc0d +Block 0014 [ 69]: 88ba247a1459c620 +Block 0014 [ 70]: 8296682d67304ca4 +Block 0014 [ 71]: a197e9f9c9c2d027 +Block 0014 [ 72]: 70d6e5f97e4c08c3 +Block 0014 [ 73]: 1282284c67db0021 +Block 0014 [ 74]: 257e4df3e88791da +Block 0014 [ 75]: ea369d60cbbfc3b0 +Block 0014 [ 76]: 899327fe7af1696c +Block 0014 [ 77]: e3eb9f568072d39c +Block 0014 [ 78]: 61c6e4bae139da6e +Block 0014 [ 79]: 82d73a7b518a484a +Block 0014 [ 80]: ae1daa5055c3d728 +Block 0014 [ 81]: 181eb0a5605fe5f2 +Block 0014 [ 82]: 4adc3042c5c248f6 +Block 0014 [ 83]: 75720e34a8c4f9c1 +Block 0014 [ 84]: 184a961bbedf8d78 +Block 0014 [ 85]: 480f01987dc39470 +Block 0014 [ 86]: e5288386e93dbaa8 +Block 0014 [ 87]: 24a2631823663560 +Block 0014 [ 88]: 09a52a4f0522d21d +Block 0014 [ 89]: 685b6edb99314395 +Block 0014 [ 90]: 7caf3c4dfea8f03d +Block 0014 [ 91]: 4ba45b9e8df91dad +Block 0014 [ 92]: a0954b2eee1375a2 +Block 0014 [ 93]: 766c3dd0e8c84041 +Block 0014 [ 94]: 7d6854ff9c364cf3 +Block 0014 [ 95]: c3c18738f3b47743 +Block 0014 [ 96]: 73c732161b75d23a +Block 0014 [ 97]: 8b72fa77eaff6848 +Block 0014 [ 98]: 97f4169cdbbcc478 +Block 0014 [ 99]: cc08d746666366f8 +Block 0014 [100]: b5226b34853ccf1a +Block 0014 [101]: a463a634b3869611 +Block 0014 [102]: 2444d5021c683565 +Block 0014 [103]: 6fcbaa410bb39f3a +Block 0014 [104]: 3238537afdc9c134 +Block 0014 [105]: 58ed9109edbaceaf +Block 0014 [106]: a6355dad9a1b2ed3 +Block 0014 [107]: 710d861bd7de4875 +Block 0014 [108]: 9e8eec1be822f14b +Block 0014 [109]: c30a549d276e50a4 +Block 0014 [110]: 57038585a5eb2ceb +Block 0014 [111]: 97502c4b617e6d93 +Block 0014 [112]: e462aac2eab81993 +Block 0014 [113]: e35d06c7c51c8dc9 +Block 0014 [114]: 396e9f2aa5e74cde +Block 0014 [115]: c908d13b62e112fb +Block 0014 [116]: 35aa4755a42ba0fb +Block 0014 [117]: f9426c2be943b5a9 +Block 0014 [118]: e2931431f1fe9dd7 +Block 0014 [119]: 0a6f56e4e9558739 +Block 0014 [120]: 8ab84a163f6eaa0c +Block 0014 [121]: 42a0f15d6a6efb41 +Block 0014 [122]: 6d28afefc7dcfe58 +Block 0014 [123]: 4901be47a8c58453 +Block 0014 [124]: 73ec4fc7c75e84ef +Block 0014 [125]: 2920efbb06d8e325 +Block 0014 [126]: a6ecd7e4ef96dc05 +Block 0014 [127]: 1d0a9b2dc6418672 +Block 0015 [ 0]: fe7dd39a618e71e5 +Block 0015 [ 1]: 01c07c1b068c39c5 +Block 0015 [ 2]: b2a41ba7002b15b5 +Block 0015 [ 3]: ae477e64c1faa49b +Block 0015 [ 4]: f3dcfd9e46024f3c +Block 0015 [ 5]: 0e600176e0542726 +Block 0015 [ 6]: 56e014096bbfcee2 +Block 0015 [ 7]: 39844d9641076e23 +Block 0015 [ 8]: 8101229338fa9230 +Block 0015 [ 9]: fff04a34e83a1d04 +Block 0015 [ 10]: 0b76c8b60d1bddfc +Block 0015 [ 11]: daca86bb2aa461a4 +Block 0015 [ 12]: ccad5b535053995c +Block 0015 [ 13]: dc086420ea32e2c4 +Block 0015 [ 14]: 3e5f7db426829fa4 +Block 0015 [ 15]: 028179b0a2202f2a +Block 0015 [ 16]: 84664b21b0bed003 +Block 0015 [ 17]: 6b0b075c2720f673 +Block 0015 [ 18]: 3ab59f67edf1a91f +Block 0015 [ 19]: 49a00e47fcea9c9a +Block 0015 [ 20]: b0af9ca77eef6bd7 +Block 0015 [ 21]: 3ff02605e750fb68 +Block 0015 [ 22]: 6f888572cf623bde +Block 0015 [ 23]: 90792eba7c50bc6c +Block 0015 [ 24]: f76e260b80eab35c +Block 0015 [ 25]: c454977d76d885bb +Block 0015 [ 26]: 5ab8d0754e3af5db +Block 0015 [ 27]: a64a547249b6c6dc +Block 0015 [ 28]: d0ebccff364df8dc +Block 0015 [ 29]: b13f9c1b1bd1d3b6 +Block 0015 [ 30]: 134227e11312862a +Block 0015 [ 31]: 81a635d0de25be20 +Block 0015 [ 32]: 2bb3ff35c40ea726 +Block 0015 [ 33]: f84a0782feabb913 +Block 0015 [ 34]: 28d4f1889a890868 +Block 0015 [ 35]: d01673b6e235fc51 +Block 0015 [ 36]: 42c447fef3385aa3 +Block 0015 [ 37]: 50ca4b017f0bdecf +Block 0015 [ 38]: 9ac9f0ddccd1e52d +Block 0015 [ 39]: 21f8411108200f80 +Block 0015 [ 40]: 69e6d3d7b2c7a786 +Block 0015 [ 41]: ec8cf819bb02bbcb +Block 0015 [ 42]: 1fb8e462e6c4ff72 +Block 0015 [ 43]: cc89eb4748626454 +Block 0015 [ 44]: 6f0230ec870c485a +Block 0015 [ 45]: e9d1c047f8322b0d +Block 0015 [ 46]: 86b194b1353a70ba +Block 0015 [ 47]: 43d1307e773654bf +Block 0015 [ 48]: f47b4224fcb3488a +Block 0015 [ 49]: d7eee8fd41f4ba01 +Block 0015 [ 50]: a8fa5f257bab0e5e +Block 0015 [ 51]: f3931c2abded9a59 +Block 0015 [ 52]: e41fbeda83d18a71 +Block 0015 [ 53]: bab3d48f7589b45f +Block 0015 [ 54]: 7b9ed122cdc05112 +Block 0015 [ 55]: 660ee625e579e10a +Block 0015 [ 56]: 9a8420edb4efc070 +Block 0015 [ 57]: 71cdd65ab37df1aa +Block 0015 [ 58]: 59ec57a4d785ec5b +Block 0015 [ 59]: 56de28c195a6c9c1 +Block 0015 [ 60]: 38b77aa786eb4274 +Block 0015 [ 61]: 0339ba8813a04d23 +Block 0015 [ 62]: 5ff04478b159e5a8 +Block 0015 [ 63]: bb59a232c2fb822f +Block 0015 [ 64]: ce9b98e4d5505d4e +Block 0015 [ 65]: d94474d5044efad8 +Block 0015 [ 66]: dd7581fca67e6b47 +Block 0015 [ 67]: e5cf5ee7a1d303a6 +Block 0015 [ 68]: de54eb260e28d75d +Block 0015 [ 69]: 8dbc69487a475fbd +Block 0015 [ 70]: 2e8038ba499f6dbb +Block 0015 [ 71]: 322093a75c524f72 +Block 0015 [ 72]: aa559fe61ea1a37e +Block 0015 [ 73]: cb547e6a9106e64c +Block 0015 [ 74]: 67111f017926588a +Block 0015 [ 75]: 0e71f13aaedca44c +Block 0015 [ 76]: 885341674bd4987a +Block 0015 [ 77]: e0c5efe697c9b140 +Block 0015 [ 78]: 324ea9daaa3b6ba0 +Block 0015 [ 79]: 545898fe29df7e96 +Block 0015 [ 80]: 18ca585d12d3c743 +Block 0015 [ 81]: 04cdfe6bdd202450 +Block 0015 [ 82]: 3e6104bf852b8a6a +Block 0015 [ 83]: 08544bdc6f38ba5d +Block 0015 [ 84]: 7e49bfeec5d001f2 +Block 0015 [ 85]: 3906196d6e3c53ab +Block 0015 [ 86]: 4778aeb472a70184 +Block 0015 [ 87]: 8cc7e9a207cd88f0 +Block 0015 [ 88]: c1e1aed42d388dd7 +Block 0015 [ 89]: 93228c878bd09ded +Block 0015 [ 90]: b3e312be518f5ca0 +Block 0015 [ 91]: c63977ba692aacfe +Block 0015 [ 92]: 18ef5824532327a3 +Block 0015 [ 93]: daa17d2619b74141 +Block 0015 [ 94]: 3524418eb248f814 +Block 0015 [ 95]: 262e4eab5b257010 +Block 0015 [ 96]: aa45cdd8e749ae80 +Block 0015 [ 97]: 46dd2149ce337b8f +Block 0015 [ 98]: 425c1c35463031a0 +Block 0015 [ 99]: b1747326431aa01b +Block 0015 [100]: 07b504f49c05fc9e +Block 0015 [101]: fe8fc4dad3d269d8 +Block 0015 [102]: f18aff22d8f09960 +Block 0015 [103]: 5247cf1a92ba2294 +Block 0015 [104]: 5a0cc7c71bfd6734 +Block 0015 [105]: 0c926b5deed53fb9 +Block 0015 [106]: 6be5ac8ee2c31367 +Block 0015 [107]: cf808455894c338c +Block 0015 [108]: af04367baa4bba7c +Block 0015 [109]: 26397d26480e815b +Block 0015 [110]: a58ca838afb9ac8b +Block 0015 [111]: 75413a501ff0a6c0 +Block 0015 [112]: 1fac4f16e8ab214f +Block 0015 [113]: 19be611a230ce4f2 +Block 0015 [114]: 6530a63352ee1b61 +Block 0015 [115]: 00dcabf53a8e84ad +Block 0015 [116]: 4087c0f326283555 +Block 0015 [117]: 791eafa5a317015e +Block 0015 [118]: ef0f3079c2280b9d +Block 0015 [119]: 1035069b01d04a74 +Block 0015 [120]: 7fc066ca3a0df359 +Block 0015 [121]: 2c7e872cae3aeb64 +Block 0015 [122]: ff9d282ac9e3a146 +Block 0015 [123]: beffa43e452ce374 +Block 0015 [124]: a0f34d378d418f73 +Block 0015 [125]: 5790929a42de0b61 +Block 0015 [126]: 5b23ec6f6be2aa90 +Block 0015 [127]: d04c5f31efbeccc4 +Block 0016 [ 0]: ee4284bd7e01037d +Block 0016 [ 1]: f6725c9d044b3582 +Block 0016 [ 2]: efc6d8945d76028d +Block 0016 [ 3]: 29e9791ebfed5ec9 +Block 0016 [ 4]: 4c4d74485e886bb9 +Block 0016 [ 5]: 7a227580ea77203c +Block 0016 [ 6]: 8b8a892a45ce7773 +Block 0016 [ 7]: f552f61ef6b9987f +Block 0016 [ 8]: b0be9423022aa3c4 +Block 0016 [ 9]: a581a3a65719e8ed +Block 0016 [ 10]: 0ed1efa5c7b9cdb3 +Block 0016 [ 11]: 459d8670734b7440 +Block 0016 [ 12]: 0651d5c945182f07 +Block 0016 [ 13]: bced7850cfe86416 +Block 0016 [ 14]: e0c4f34534f1c63a +Block 0016 [ 15]: 2c6cd7aa929d8645 +Block 0016 [ 16]: dadf71c6c32421f0 +Block 0016 [ 17]: f4e8a2bdc76f0d3f +Block 0016 [ 18]: 418b1053a3257ffa +Block 0016 [ 19]: 012e877fde3e24c9 +Block 0016 [ 20]: 14d59b7c02a2e97c +Block 0016 [ 21]: ee8c0895a34f08b8 +Block 0016 [ 22]: 71cf5cadb05b7782 +Block 0016 [ 23]: 6a5c0717ec891466 +Block 0016 [ 24]: 9c1c845254e692f3 +Block 0016 [ 25]: f0a44a90e65aee66 +Block 0016 [ 26]: e222177e3bdec9bc +Block 0016 [ 27]: a5fec919612d165c +Block 0016 [ 28]: 020201b7a839067b +Block 0016 [ 29]: 84e786fba4a60afb +Block 0016 [ 30]: f7b1f4f6feb1c1c3 +Block 0016 [ 31]: 1c85f25c69ef9fd7 +Block 0016 [ 32]: 285122b6579f7056 +Block 0016 [ 33]: a9e1eec26a14de95 +Block 0016 [ 34]: fda85512de5464d0 +Block 0016 [ 35]: 71e076da7e3910bd +Block 0016 [ 36]: d30baaa4b044367a +Block 0016 [ 37]: 0b504eb61b0d6c26 +Block 0016 [ 38]: d3c30d0d974ed9af +Block 0016 [ 39]: 282158fd3005a366 +Block 0016 [ 40]: eeacca7d7d8c1519 +Block 0016 [ 41]: 4511c26cd8af6099 +Block 0016 [ 42]: 16adfdb6ba659689 +Block 0016 [ 43]: 3186aed45d7aeeb2 +Block 0016 [ 44]: 247da487eba794b7 +Block 0016 [ 45]: 584c74265acf4b10 +Block 0016 [ 46]: 93913d9a23a4fc60 +Block 0016 [ 47]: 4703bb124037e1a5 +Block 0016 [ 48]: 37239d7ace81e41d +Block 0016 [ 49]: ba7923d2d1abf6aa +Block 0016 [ 50]: 81cff74cc3030c46 +Block 0016 [ 51]: 80781fbda30f2c67 +Block 0016 [ 52]: 1072611bab0d1c25 +Block 0016 [ 53]: 6dafe937e223ffd4 +Block 0016 [ 54]: 0c58c5ecde11f220 +Block 0016 [ 55]: 808b5df6b010f5f0 +Block 0016 [ 56]: 4d2c7c97deb8bb3a +Block 0016 [ 57]: 297865d69ab1b78f +Block 0016 [ 58]: 15ef9ca22dcc25c2 +Block 0016 [ 59]: 8f01f2fbec1e1cda +Block 0016 [ 60]: a9db3a3d7e817b2a +Block 0016 [ 61]: 4f2f469445248c76 +Block 0016 [ 62]: 60fdb8c20980baa8 +Block 0016 [ 63]: e0af63046dfb4ec4 +Block 0016 [ 64]: 3d416ab4bed81fcb +Block 0016 [ 65]: da1ff08a91bab1ff +Block 0016 [ 66]: 7ddb3de6427f6dc2 +Block 0016 [ 67]: 02ac68f8d7b59827 +Block 0016 [ 68]: 2f8b56ade21b2a31 +Block 0016 [ 69]: 5479394c6e8c51c4 +Block 0016 [ 70]: beb501097c9b856e +Block 0016 [ 71]: f5b7e186fd0a6d74 +Block 0016 [ 72]: 8632eceb3c644fe5 +Block 0016 [ 73]: 578be5498c159f6d +Block 0016 [ 74]: b92cbafdd2bd1bd7 +Block 0016 [ 75]: cc7bc5fe2e10e8eb +Block 0016 [ 76]: 472df28e66c5e218 +Block 0016 [ 77]: 64494c08516ca24c +Block 0016 [ 78]: 29919b2152b46616 +Block 0016 [ 79]: c98bf2c8d5a59d7b +Block 0016 [ 80]: 7b4d78ce47083d2a +Block 0016 [ 81]: 2150d9fb4190dd49 +Block 0016 [ 82]: f4787d0cc450ddad +Block 0016 [ 83]: bca37f309b16b787 +Block 0016 [ 84]: 77f29e0273601339 +Block 0016 [ 85]: 5512896f2d009278 +Block 0016 [ 86]: ef63fc2dc268d2b3 +Block 0016 [ 87]: 2a796379964010fc +Block 0016 [ 88]: 6a7f8c157f4907f4 +Block 0016 [ 89]: 4a7f538aa5761182 +Block 0016 [ 90]: 29004d473d72bee3 +Block 0016 [ 91]: 834d5222c0011172 +Block 0016 [ 92]: bd2606194d2d148b +Block 0016 [ 93]: 38a5b0decd299c4f +Block 0016 [ 94]: abf149883113a697 +Block 0016 [ 95]: 34e170f49d93c917 +Block 0016 [ 96]: 53fc696fcc977325 +Block 0016 [ 97]: 3e28ab82d63594f6 +Block 0016 [ 98]: 915a3ff472e74518 +Block 0016 [ 99]: 69a618df6f6f84ae +Block 0016 [100]: c5d813be21361d83 +Block 0016 [101]: 03ac0914b557c176 +Block 0016 [102]: 4bdd25ac2aaa20fe +Block 0016 [103]: a3817cab3aa0e229 +Block 0016 [104]: 3155f6e8898d3626 +Block 0016 [105]: edf42f9307673e12 +Block 0016 [106]: e14daae30223ed73 +Block 0016 [107]: 82613039e7c17acd +Block 0016 [108]: 2b67bfa4ba3d75f2 +Block 0016 [109]: ce95d235cd915890 +Block 0016 [110]: 75624ef53a39d48b +Block 0016 [111]: ad0303b31652499e +Block 0016 [112]: e351b76ad04c39d7 +Block 0016 [113]: a9aa8650ea6734a5 +Block 0016 [114]: 527b776775eab895 +Block 0016 [115]: c41ab8f180e85ccd +Block 0016 [116]: 8ad4ef151659d1da +Block 0016 [117]: d94e5cf2654d7e64 +Block 0016 [118]: 7269fa6ebe4d0148 +Block 0016 [119]: c4f576c71186fe07 +Block 0016 [120]: 8ddce8b24b0b5bfb +Block 0016 [121]: 821a74dbd82c5a16 +Block 0016 [122]: 9695f6ac80338bfb +Block 0016 [123]: 728dee32c6c2475e +Block 0016 [124]: 7bac74994b5bacff +Block 0016 [125]: 3da6eea76bd3692f +Block 0016 [126]: 23cb9f7fa694eaa1 +Block 0016 [127]: cfe06a085d267a99 +Block 0017 [ 0]: f356666f01196720 +Block 0017 [ 1]: d5b86a80e04f9357 +Block 0017 [ 2]: 94511da0aa428e7c +Block 0017 [ 3]: 3b7adcefeb2b6f65 +Block 0017 [ 4]: 4d5283d8063472cc +Block 0017 [ 5]: 890aedd9f9a726b1 +Block 0017 [ 6]: 2711463e6bc5421a +Block 0017 [ 7]: 19923254aef59f6c +Block 0017 [ 8]: 559d243da7765ab0 +Block 0017 [ 9]: 59492428d9c4c089 +Block 0017 [ 10]: 669da2bd92b8c392 +Block 0017 [ 11]: 0d84cfb304ed2cb2 +Block 0017 [ 12]: 9183922fe8dc1321 +Block 0017 [ 13]: c9ddad6110958678 +Block 0017 [ 14]: 8c4ec6de6ef52270 +Block 0017 [ 15]: 158509f02ed33558 +Block 0017 [ 16]: 15f62a574d357bff +Block 0017 [ 17]: 9fc31aa7b10bdb39 +Block 0017 [ 18]: 14acd0af756da166 +Block 0017 [ 19]: 2ecf2d49440a608d +Block 0017 [ 20]: b5056c5192f93b7b +Block 0017 [ 21]: 8e19ba7cdd948025 +Block 0017 [ 22]: 34fbc0f77ec37398 +Block 0017 [ 23]: 03bb7138974402f0 +Block 0017 [ 24]: 9ad98d6af59e2f2e +Block 0017 [ 25]: e1bddfddc591121e +Block 0017 [ 26]: b2f16e8b68e6d9c1 +Block 0017 [ 27]: 49a32b416ceeae94 +Block 0017 [ 28]: b3ad11b80ce3df7e +Block 0017 [ 29]: 3ec29abc1f218b1e +Block 0017 [ 30]: fb3d6da7508f17bd +Block 0017 [ 31]: c790abf197c4c647 +Block 0017 [ 32]: 2a1110d48162fcd4 +Block 0017 [ 33]: 43f22c7b2d34617e +Block 0017 [ 34]: ebf0db27d136245d +Block 0017 [ 35]: 55aeb56679c1f189 +Block 0017 [ 36]: 8714d1a5bb55b389 +Block 0017 [ 37]: 075c04ac4d453c9a +Block 0017 [ 38]: 24c791b59a1a8330 +Block 0017 [ 39]: 8b62655e797d9396 +Block 0017 [ 40]: 162b218ffe8a7c58 +Block 0017 [ 41]: 51003cf43cc27c45 +Block 0017 [ 42]: 40cc3394355f3e30 +Block 0017 [ 43]: 91779f6973a7a103 +Block 0017 [ 44]: 15c5320b25394348 +Block 0017 [ 45]: 0f10820130a04127 +Block 0017 [ 46]: 319487b379c5f1fa +Block 0017 [ 47]: f9a7af31b5e73c6b +Block 0017 [ 48]: 127d7dd8a8a1c85c +Block 0017 [ 49]: acb5ef7d8732298c +Block 0017 [ 50]: 08332232ae0382e5 +Block 0017 [ 51]: 51250582ebb94ee8 +Block 0017 [ 52]: f84fd3e861577bbd +Block 0017 [ 53]: 6b26fb58367feb95 +Block 0017 [ 54]: df9f3d32ba3336ee +Block 0017 [ 55]: 5155ebd220efb0d2 +Block 0017 [ 56]: e178c553b64a81a2 +Block 0017 [ 57]: 098ba741f03ad24a +Block 0017 [ 58]: c16f280067cc2729 +Block 0017 [ 59]: 574811b3d231a4df +Block 0017 [ 60]: b7c1e511893af569 +Block 0017 [ 61]: 3b29211f0bfdcc03 +Block 0017 [ 62]: b6fdcdb1dfb27df4 +Block 0017 [ 63]: 2f0623a423bf9f9b +Block 0017 [ 64]: 00c97f0fa03bbdcd +Block 0017 [ 65]: 8e59dac12903971c +Block 0017 [ 66]: c71492c17ca1818d +Block 0017 [ 67]: 848aa69aa03ae0c8 +Block 0017 [ 68]: 8ca690303a718a1a +Block 0017 [ 69]: 7da40f323bc9ee34 +Block 0017 [ 70]: 41ea847cc9b2bd76 +Block 0017 [ 71]: 25a49ea6de3f0c52 +Block 0017 [ 72]: cf4d93c48f1e35a8 +Block 0017 [ 73]: 585128d5942b0376 +Block 0017 [ 74]: ab55eb453653dd3e +Block 0017 [ 75]: 2c12f55af3e1917f +Block 0017 [ 76]: 9ee6da77a8e82cec +Block 0017 [ 77]: 4bd6ddf3cf83631a +Block 0017 [ 78]: 30e4321586605141 +Block 0017 [ 79]: bed6fc4f0aa92e30 +Block 0017 [ 80]: 03c788844da03ad5 +Block 0017 [ 81]: 6de6b8a439c2334a +Block 0017 [ 82]: 334cb662ea6a20c0 +Block 0017 [ 83]: 261c2af8bb1cac22 +Block 0017 [ 84]: ea99a5a644b0d2c7 +Block 0017 [ 85]: 5b26ae0f91bf750c +Block 0017 [ 86]: d8fca02a32b73e10 +Block 0017 [ 87]: 6565907dcf1117c1 +Block 0017 [ 88]: 85d1ea8df3a60d46 +Block 0017 [ 89]: 5d19125acf3da900 +Block 0017 [ 90]: 9efb704db3d51276 +Block 0017 [ 91]: af54ed8281a78e58 +Block 0017 [ 92]: beb7449f1abb2e44 +Block 0017 [ 93]: f75330d91676f212 +Block 0017 [ 94]: a94814d6ebced6fd +Block 0017 [ 95]: 897d9e15c5dfdcb4 +Block 0017 [ 96]: d8e34107028ad021 +Block 0017 [ 97]: 293ebcd4466abd1d +Block 0017 [ 98]: 7254ba81b6ba11ad +Block 0017 [ 99]: 0390db567a96a4d9 +Block 0017 [100]: ccfe39f1c384118c +Block 0017 [101]: 43267d510015e12b +Block 0017 [102]: 280f4476d6f3ebd9 +Block 0017 [103]: 8760238c8360fcbf +Block 0017 [104]: 035d4cecf2bb1f1d +Block 0017 [105]: c142fe72cf22a6ae +Block 0017 [106]: 00ebf2d0e311b27e +Block 0017 [107]: 47798bfb775c7d54 +Block 0017 [108]: ce977fbfe5b65e34 +Block 0017 [109]: 92ff9b8cbe72c795 +Block 0017 [110]: a52f9937120521fa +Block 0017 [111]: 4584b9e83174b1e9 +Block 0017 [112]: dfe536bdd20cc1b4 +Block 0017 [113]: ecf8f4f29948ea49 +Block 0017 [114]: df7bc0f579ebb12a +Block 0017 [115]: a681fdb86e177244 +Block 0017 [116]: 79b17e4d1501eb36 +Block 0017 [117]: 0b690bd9f1abbcc1 +Block 0017 [118]: ecbc6a4e04ae26f1 +Block 0017 [119]: 779d3fcee066dac9 +Block 0017 [120]: f753cfc8cf14a180 +Block 0017 [121]: f80641ab303d1d0a +Block 0017 [122]: f6c8e8efda680da1 +Block 0017 [123]: 59c2c42e5080db17 +Block 0017 [124]: 2236f9288ec4ee14 +Block 0017 [125]: c55aa668a6c449be +Block 0017 [126]: 79d280f9c001c3da +Block 0017 [127]: 6f7e15d0071cc9b3 +Block 0018 [ 0]: 24c3e56d5f903fef +Block 0018 [ 1]: d1b0155e7ed77407 +Block 0018 [ 2]: 48027b4c6cf64f88 +Block 0018 [ 3]: 94c3af58d3faf91b +Block 0018 [ 4]: 74f92c253dca8e1c +Block 0018 [ 5]: 67b167f78d2d6020 +Block 0018 [ 6]: 0c7de09b37c02759 +Block 0018 [ 7]: 277affceef993cbf +Block 0018 [ 8]: c1995b671cded43b +Block 0018 [ 9]: dddad34e544c7881 +Block 0018 [ 10]: f4a3055714a6c8c7 +Block 0018 [ 11]: c0315efb62348bd2 +Block 0018 [ 12]: e6326929632dac14 +Block 0018 [ 13]: a6c25d68f8803e4b +Block 0018 [ 14]: 7acf39beabb63f94 +Block 0018 [ 15]: 2f83fce37c19e21c +Block 0018 [ 16]: 23ccecc2a8a38fb1 +Block 0018 [ 17]: fb91eb5c043d2716 +Block 0018 [ 18]: 43857050f463159a +Block 0018 [ 19]: e4690d9134bb6514 +Block 0018 [ 20]: 65871d3e136a8576 +Block 0018 [ 21]: 0941849804523512 +Block 0018 [ 22]: a76c754906d20fa3 +Block 0018 [ 23]: 720b4d043f954698 +Block 0018 [ 24]: e8e1b34b97efe5c6 +Block 0018 [ 25]: d65e0cafff3ca81b +Block 0018 [ 26]: 1015b96aff86a531 +Block 0018 [ 27]: 93db3f39dac63b89 +Block 0018 [ 28]: 27c64da54455bcf3 +Block 0018 [ 29]: fc07e831d5c9b636 +Block 0018 [ 30]: 7b32cf773c07e91a +Block 0018 [ 31]: eaaf151121b66a71 +Block 0018 [ 32]: 50734ccbd7fa7692 +Block 0018 [ 33]: 256941e161c2ca80 +Block 0018 [ 34]: d1b1558a980f6d5d +Block 0018 [ 35]: 70600d0b1c5f5a7c +Block 0018 [ 36]: 1889c20f14b6d47e +Block 0018 [ 37]: 5777eb45b6bc874d +Block 0018 [ 38]: 942a16b3b13eda53 +Block 0018 [ 39]: 0b03ac0435aa85ca +Block 0018 [ 40]: aad10114f5b3049d +Block 0018 [ 41]: 76a55e7d54f2b10c +Block 0018 [ 42]: f5965a11ddf92aa8 +Block 0018 [ 43]: 8b0f6ae29a2a6c7a +Block 0018 [ 44]: 135df7badfa08c89 +Block 0018 [ 45]: ea2401066fe560d4 +Block 0018 [ 46]: 562477e4bac2d2b8 +Block 0018 [ 47]: 3c71fb5ce80d6dc0 +Block 0018 [ 48]: fe7f4945d69e4cd8 +Block 0018 [ 49]: 04fee43cb4f3a04d +Block 0018 [ 50]: cfba36d25cc153f4 +Block 0018 [ 51]: d1463b7a0a975ab2 +Block 0018 [ 52]: 58dc72898c0d1d72 +Block 0018 [ 53]: c3334b968fe7170f +Block 0018 [ 54]: fd0741b983e69520 +Block 0018 [ 55]: 9b12d151bbd1836f +Block 0018 [ 56]: 7b9397a8e0fabde0 +Block 0018 [ 57]: beba98d7bda9bfee +Block 0018 [ 58]: 0d7395b3269cda03 +Block 0018 [ 59]: 32873a46cb76a56f +Block 0018 [ 60]: c3a4bce067ed614b +Block 0018 [ 61]: 240f6d3a4c6262b3 +Block 0018 [ 62]: 0d8cca9e57ad555b +Block 0018 [ 63]: abd6bfd9fea3bdb6 +Block 0018 [ 64]: cb82a692a45e3d10 +Block 0018 [ 65]: 91c6c5fddef8bdc6 +Block 0018 [ 66]: 50540941a55abb53 +Block 0018 [ 67]: 0fde1a645bd882cc +Block 0018 [ 68]: 82bb1379fa735cc9 +Block 0018 [ 69]: 592909a24cf2e71d +Block 0018 [ 70]: a4975ee76da39b0f +Block 0018 [ 71]: bc5eb397c2d15dd5 +Block 0018 [ 72]: 9ff9590633f36e98 +Block 0018 [ 73]: 6a4c0f97ab0100f7 +Block 0018 [ 74]: e2f2a364cd055c28 +Block 0018 [ 75]: 1082a32edba76a53 +Block 0018 [ 76]: 97bedd180d0ab0f2 +Block 0018 [ 77]: 841320c0656d5175 +Block 0018 [ 78]: e2bcd615276667ff +Block 0018 [ 79]: b6da9d70f45a817f +Block 0018 [ 80]: 05c1b04651e11c0a +Block 0018 [ 81]: b14db892c3cfcb2c +Block 0018 [ 82]: b127f0a55737c345 +Block 0018 [ 83]: ebfbd4f00fc01572 +Block 0018 [ 84]: 6e9f87e406f2f1e8 +Block 0018 [ 85]: 5385af9c9576c568 +Block 0018 [ 86]: 810ae26edb1dcf61 +Block 0018 [ 87]: 10a849c52efbefa6 +Block 0018 [ 88]: 34f45af18a0b340c +Block 0018 [ 89]: 1954ce64d34fee83 +Block 0018 [ 90]: e93701e0e0cbbd56 +Block 0018 [ 91]: ec8dea4b632d62db +Block 0018 [ 92]: 17f5f64702395fd3 +Block 0018 [ 93]: 0df98d15faacf9aa +Block 0018 [ 94]: bcf18c74021649d9 +Block 0018 [ 95]: 9f736366b0aaf256 +Block 0018 [ 96]: 8051586167b2167e +Block 0018 [ 97]: 6c3a10856e183e33 +Block 0018 [ 98]: 6e5a3236190684e3 +Block 0018 [ 99]: afa62b28d151194b +Block 0018 [100]: b1511ff8ff9de709 +Block 0018 [101]: 9456ec3070684f51 +Block 0018 [102]: f8b2e2c6b3a5ede1 +Block 0018 [103]: 957b0cff38ff5d65 +Block 0018 [104]: 80f65db2f4bef519 +Block 0018 [105]: 0a4b7424f557a97b +Block 0018 [106]: dbb46c78d3b16657 +Block 0018 [107]: 4fb97f89dbf34615 +Block 0018 [108]: 605a46364190bf07 +Block 0018 [109]: 82ab49f116e2d3a0 +Block 0018 [110]: 7bdca67b36403e69 +Block 0018 [111]: 76ddd2407cf40c49 +Block 0018 [112]: 816b6bdb860dcf94 +Block 0018 [113]: b1ef58ee0d58bf9e +Block 0018 [114]: 0ff5e16892fdc1e2 +Block 0018 [115]: 42e71d4690469785 +Block 0018 [116]: b18acdb8a0b68672 +Block 0018 [117]: f155ac095d6fa2ea +Block 0018 [118]: f60c65958b44f393 +Block 0018 [119]: ff5eb4d397fbae23 +Block 0018 [120]: 659e7b8fc27b481c +Block 0018 [121]: 0b0fee39c9b4978b +Block 0018 [122]: 66cd6e8f09ff280e +Block 0018 [123]: 66457a5d611d56b0 +Block 0018 [124]: c2af5b83515d5470 +Block 0018 [125]: e29fba1fd62392ca +Block 0018 [126]: 4d83dbe95866b4d4 +Block 0018 [127]: 7536f8c68069e3f3 +Block 0019 [ 0]: 722f273fc2dcb808 +Block 0019 [ 1]: b8ed98643c9037c8 +Block 0019 [ 2]: 7750cffa290e9bf5 +Block 0019 [ 3]: 70b53d0852adcc2d +Block 0019 [ 4]: ff012ca82a8502fd +Block 0019 [ 5]: dd31cf64aba30b03 +Block 0019 [ 6]: 1f8089c7e49c0295 +Block 0019 [ 7]: fb69aae42cd06e3c +Block 0019 [ 8]: 863ddde246472a00 +Block 0019 [ 9]: c43713ae38173c0b +Block 0019 [ 10]: f3b11690fd627fc2 +Block 0019 [ 11]: 8df098f89832649f +Block 0019 [ 12]: ee1808239b90adc6 +Block 0019 [ 13]: a1de235cd0a91f3a +Block 0019 [ 14]: c5ebc70a2c39e8ba +Block 0019 [ 15]: 7261ba38f8c0efc4 +Block 0019 [ 16]: 19ee91a1cfbf5b3d +Block 0019 [ 17]: f0332768e28a1b3a +Block 0019 [ 18]: 44edb26d9179e9c1 +Block 0019 [ 19]: 0cf32f79888b897a +Block 0019 [ 20]: 28a16746b980aa69 +Block 0019 [ 21]: 52fece763bc4b874 +Block 0019 [ 22]: 492462ddf0453667 +Block 0019 [ 23]: 9d5640570d88fc56 +Block 0019 [ 24]: 70757405d529a0e8 +Block 0019 [ 25]: 3b2af6a9e0c5eb14 +Block 0019 [ 26]: 42fa393692961d9d +Block 0019 [ 27]: acccc4f1b9fa4d77 +Block 0019 [ 28]: 00b0b01dc131a9c1 +Block 0019 [ 29]: 2b9dd58298aff850 +Block 0019 [ 30]: 1f9e9c8090846f83 +Block 0019 [ 31]: 66160b59c3f5914c +Block 0019 [ 32]: b9f5f550888de83b +Block 0019 [ 33]: c4a56854d14903c5 +Block 0019 [ 34]: c6d14f5cc3951abc +Block 0019 [ 35]: 08abd46128eb2bda +Block 0019 [ 36]: b9fdcd88d36e67f0 +Block 0019 [ 37]: 90fa2dd4e03640cb +Block 0019 [ 38]: fd16d218f1e56234 +Block 0019 [ 39]: 091acccd9d0e30d1 +Block 0019 [ 40]: e42811b626289ff9 +Block 0019 [ 41]: 1ece05985826d671 +Block 0019 [ 42]: c5f482a21ee796e0 +Block 0019 [ 43]: c06e692ca9f056c0 +Block 0019 [ 44]: e23ed7c9253dcaab +Block 0019 [ 45]: 6690fc1182d74429 +Block 0019 [ 46]: 6ef5a397f829abdd +Block 0019 [ 47]: 2683521b224ee50d +Block 0019 [ 48]: 0182b3c186f873a3 +Block 0019 [ 49]: 20c92c0febd05d7d +Block 0019 [ 50]: 01cc133fee6460de +Block 0019 [ 51]: c86d8364e693b5b9 +Block 0019 [ 52]: 23d64e599970dae2 +Block 0019 [ 53]: 0de884eb725ae3af +Block 0019 [ 54]: 517bcd0201644ed8 +Block 0019 [ 55]: 8df33bfe21658050 +Block 0019 [ 56]: 0c9930ca602516ad +Block 0019 [ 57]: 0ebf7d34c36aa33a +Block 0019 [ 58]: f6ee1dead03b43eb +Block 0019 [ 59]: b73cd68edd7f8248 +Block 0019 [ 60]: 4aa35e26918206fe +Block 0019 [ 61]: 3d876cdef4c6bd47 +Block 0019 [ 62]: 4e865ec2782bb709 +Block 0019 [ 63]: f74308f5e970cb9b +Block 0019 [ 64]: 2771aadf679ec45d +Block 0019 [ 65]: 226c76e4ba2a5dd7 +Block 0019 [ 66]: de0cddc2ae4427c8 +Block 0019 [ 67]: dd0c4bd379edeabd +Block 0019 [ 68]: 55fc60cd41a55679 +Block 0019 [ 69]: 82eefb6749f7d7c2 +Block 0019 [ 70]: 869e68618a19c7c7 +Block 0019 [ 71]: 442afd2c618bb724 +Block 0019 [ 72]: 3b0c6ff27923c66d +Block 0019 [ 73]: 4c982cc1c9926132 +Block 0019 [ 74]: 4985e72e8435d8ba +Block 0019 [ 75]: 73bb50df4a57233e +Block 0019 [ 76]: 54598373775f7082 +Block 0019 [ 77]: 989acb275bcd8f7e +Block 0019 [ 78]: 54fed75c76e59e7c +Block 0019 [ 79]: 48ca047ac54c6922 +Block 0019 [ 80]: 026b2df39c6a513d +Block 0019 [ 81]: 173bf4ba8e04d1da +Block 0019 [ 82]: 8acf7f1b9248060b +Block 0019 [ 83]: 46dc23cee3392db4 +Block 0019 [ 84]: f2c380c3aa45c2b5 +Block 0019 [ 85]: 3c7cfde74b2c36c0 +Block 0019 [ 86]: b6717d3bc372759f +Block 0019 [ 87]: dc311a8650a95f41 +Block 0019 [ 88]: 726c9df5a72d6b12 +Block 0019 [ 89]: a5c78f4fb2c4616a +Block 0019 [ 90]: 99752c728e64b11c +Block 0019 [ 91]: 2db8af40223e6337 +Block 0019 [ 92]: daf0df2c0fa99d1c +Block 0019 [ 93]: fa15f1ef7b4c253f +Block 0019 [ 94]: 55d5026d18fee917 +Block 0019 [ 95]: b28e3db01632bd47 +Block 0019 [ 96]: cf92192dec2a2c40 +Block 0019 [ 97]: cf6d5d9bc091e6f5 +Block 0019 [ 98]: dbce992d8c254db9 +Block 0019 [ 99]: 2e7ae686b8ca7ee8 +Block 0019 [100]: 384527ee71744859 +Block 0019 [101]: f5792f72aff7ce1f +Block 0019 [102]: 218acc6d548bffbd +Block 0019 [103]: c55a6901afdba4ee +Block 0019 [104]: 3f0321e8047687ac +Block 0019 [105]: 8c83bf546e2f4145 +Block 0019 [106]: f9ac4b2a66d9464d +Block 0019 [107]: c33356e2116f19e7 +Block 0019 [108]: aa1803bb336e1592 +Block 0019 [109]: bcb3bcda523ff128 +Block 0019 [110]: a8196da62d735972 +Block 0019 [111]: 83ac3bc10374503d +Block 0019 [112]: 82183e223bcdccdf +Block 0019 [113]: 6bf482af8ce0e92f +Block 0019 [114]: d33807071afa3e61 +Block 0019 [115]: a0889cc00ee25304 +Block 0019 [116]: ddcc3d96df20e1de +Block 0019 [117]: f31f7dab248a58b2 +Block 0019 [118]: 8d19be8959a8441a +Block 0019 [119]: de4916c0bdd8f395 +Block 0019 [120]: 08337c3616acbff2 +Block 0019 [121]: 1da9ee3be188c357 +Block 0019 [122]: e2be5499c55d69d5 +Block 0019 [123]: 8a88a87d2fcfaba3 +Block 0019 [124]: 57aa516673cb6b71 +Block 0019 [125]: e3f755c6f20e652b +Block 0019 [126]: 5a4131bef1f62b97 +Block 0019 [127]: 3db701be2103d01a +Block 0020 [ 0]: 70c6576f2e77e09a +Block 0020 [ 1]: 6601863f6b696595 +Block 0020 [ 2]: b91a34ab981fa137 +Block 0020 [ 3]: 736b66b7aab81706 +Block 0020 [ 4]: 65fb0a72aebe5b19 +Block 0020 [ 5]: f50ce081b2505436 +Block 0020 [ 6]: 021d3df7daa304bf +Block 0020 [ 7]: 61794a7f35b9385c +Block 0020 [ 8]: 17459a4b0e86f16d +Block 0020 [ 9]: 261d20aec867b2b1 +Block 0020 [ 10]: 7d6b10cb9e1ca1b6 +Block 0020 [ 11]: e771ea00bab91811 +Block 0020 [ 12]: 3b8d4966dba2fcee +Block 0020 [ 13]: b8cb7efbd136e0c5 +Block 0020 [ 14]: e905a8786d5c35d6 +Block 0020 [ 15]: 0febce01d9281167 +Block 0020 [ 16]: 030162e4b1bd5620 +Block 0020 [ 17]: 1d6c869d5abd924e +Block 0020 [ 18]: adae1f14c28c19c0 +Block 0020 [ 19]: a964bb0864bc9d52 +Block 0020 [ 20]: 648ef646997cadb1 +Block 0020 [ 21]: ca0321a35bf0cbdc +Block 0020 [ 22]: 59335968255b796e +Block 0020 [ 23]: 031511e73acec4df +Block 0020 [ 24]: 8c357525c9ec70e9 +Block 0020 [ 25]: 8b25fdfb42423ce6 +Block 0020 [ 26]: dfb06a7440745242 +Block 0020 [ 27]: 9e94b7cf234b4956 +Block 0020 [ 28]: 8c401a90a8168e37 +Block 0020 [ 29]: 431d28542972c237 +Block 0020 [ 30]: 344546c0e699c834 +Block 0020 [ 31]: aece7d9d6960069d +Block 0020 [ 32]: ea42707eb3a32685 +Block 0020 [ 33]: fd57e3a5f6e998cc +Block 0020 [ 34]: 52a662c2f6de431c +Block 0020 [ 35]: 0b255cf4fdd8ac5e +Block 0020 [ 36]: bc320584a71ba9e3 +Block 0020 [ 37]: c5fb2fee1e9e8106 +Block 0020 [ 38]: c2932e7718e22b16 +Block 0020 [ 39]: afb8c659f04a1d2e +Block 0020 [ 40]: 082e620daeb79466 +Block 0020 [ 41]: 043991be836d5eae +Block 0020 [ 42]: ad16fddbaa7ae57e +Block 0020 [ 43]: ab45c1663a1320cf +Block 0020 [ 44]: 3e2e2fad4ab6dd15 +Block 0020 [ 45]: 184d7c29d383f9cb +Block 0020 [ 46]: 11037c7773292bc4 +Block 0020 [ 47]: fa5cc51fb7a55375 +Block 0020 [ 48]: 9a2c041b82bdf603 +Block 0020 [ 49]: 63e9dad5b5d8e60c +Block 0020 [ 50]: d9750b241682d4bc +Block 0020 [ 51]: 970d5276092a0ea4 +Block 0020 [ 52]: 9dddabc29fe7edfa +Block 0020 [ 53]: 681055dcbfb3006a +Block 0020 [ 54]: 01900b21d31eff67 +Block 0020 [ 55]: 449abc581135982c +Block 0020 [ 56]: db2ae53eeee1c299 +Block 0020 [ 57]: 3dd54a6de8697c5b +Block 0020 [ 58]: f1e82c286114ddcd +Block 0020 [ 59]: adb5c79c12d8be22 +Block 0020 [ 60]: a09972fb6b077bb9 +Block 0020 [ 61]: 68eac35dcc5ff9e4 +Block 0020 [ 62]: 6364b9e7d921d09d +Block 0020 [ 63]: cb5f436ca07c7324 +Block 0020 [ 64]: 4aa340986fc7deaa +Block 0020 [ 65]: 458a6cfa537b5882 +Block 0020 [ 66]: 2a7a4bfe3923b89c +Block 0020 [ 67]: 1635e10d6f5d7235 +Block 0020 [ 68]: 28f5135a470b8332 +Block 0020 [ 69]: ff1eb2e7f4de0b70 +Block 0020 [ 70]: 12b3703e48703d4e +Block 0020 [ 71]: 1fb4586aca631990 +Block 0020 [ 72]: b39ea3c1335582eb +Block 0020 [ 73]: 0dc229d3c3fb5f8e +Block 0020 [ 74]: 35038bbcf50f7fb0 +Block 0020 [ 75]: b344ab23680de774 +Block 0020 [ 76]: 9d0ddb2f1c714c58 +Block 0020 [ 77]: 32a29abd2d42c740 +Block 0020 [ 78]: ac9856eb75f6da54 +Block 0020 [ 79]: 6e482388986341bb +Block 0020 [ 80]: 1aadb77781c10d89 +Block 0020 [ 81]: 06dd3907baa24d9b +Block 0020 [ 82]: ce12640b5e68b68a +Block 0020 [ 83]: 4dc6af7465c30b2e +Block 0020 [ 84]: e30c7faf4af19ed5 +Block 0020 [ 85]: f3bd1a9b0441641e +Block 0020 [ 86]: 8d0718fc38801ab2 +Block 0020 [ 87]: 329621668d8cac25 +Block 0020 [ 88]: 08fd2a23b99a3393 +Block 0020 [ 89]: 2f34f0550c5bf928 +Block 0020 [ 90]: 8af250cc80bc53c3 +Block 0020 [ 91]: 6e84810898ec71ca +Block 0020 [ 92]: 6d2f03ab20dcc568 +Block 0020 [ 93]: 7b6094febddf53a9 +Block 0020 [ 94]: f88eb9e8a6710cef +Block 0020 [ 95]: 015aebc0e7561485 +Block 0020 [ 96]: a2f1e67b4f53ef64 +Block 0020 [ 97]: b2f41b99adcabcb8 +Block 0020 [ 98]: 072c7441cad288fa +Block 0020 [ 99]: b7d76739d790000f +Block 0020 [100]: 8246205c8c8839ed +Block 0020 [101]: 36bf703de23ab32f +Block 0020 [102]: f50d0586961e5e1e +Block 0020 [103]: 0362b485dc0ecde9 +Block 0020 [104]: 3e8a15277d2384d3 +Block 0020 [105]: b00a398ae5bd9dcf +Block 0020 [106]: 07dbd6088a9b7b2e +Block 0020 [107]: a593dea22ee8de23 +Block 0020 [108]: 9dcc69bd05b50111 +Block 0020 [109]: f44fe5efbbe2a788 +Block 0020 [110]: 4c6ba01e0ce4a7bd +Block 0020 [111]: 2b29897c88458722 +Block 0020 [112]: f40cdc0d0d03360c +Block 0020 [113]: 4dd21c19c6bbca01 +Block 0020 [114]: 14a6671b6214c164 +Block 0020 [115]: 3a32de50b729cccf +Block 0020 [116]: c9187a994af18415 +Block 0020 [117]: 7fa0474d79569967 +Block 0020 [118]: 1b4425996a0c6378 +Block 0020 [119]: 076afc6c51ea4651 +Block 0020 [120]: 8e2cfd3f8ded4d1f +Block 0020 [121]: 15fe894d46c20a6f +Block 0020 [122]: a3f83bb955872823 +Block 0020 [123]: e6da877d40219104 +Block 0020 [124]: 1c8278e557d5a2db +Block 0020 [125]: 59846d21cfa0d9f6 +Block 0020 [126]: 81182cda9a926198 +Block 0020 [127]: 66c4a4c4af6cf770 +Block 0021 [ 0]: 97ba12617248d3a0 +Block 0021 [ 1]: a7474da1f3722804 +Block 0021 [ 2]: d812872de7c68fb0 +Block 0021 [ 3]: 77ff9583abecf493 +Block 0021 [ 4]: a115af0254d43eba +Block 0021 [ 5]: d859a2a9e6f64e30 +Block 0021 [ 6]: 74a626581f652ae9 +Block 0021 [ 7]: 2bf0ecb0ef299a6b +Block 0021 [ 8]: a3ecc9fe27c3c4fa +Block 0021 [ 9]: a6b5ee67c56a8a12 +Block 0021 [ 10]: ebb75bfd61ab58d5 +Block 0021 [ 11]: 140540d69b6b749c +Block 0021 [ 12]: 49dafaaea1750e39 +Block 0021 [ 13]: 9ce0775336a3f77a +Block 0021 [ 14]: d3efbd276ec1a746 +Block 0021 [ 15]: a1c82b2d2fd832a3 +Block 0021 [ 16]: 1b55d6ca561cf8f6 +Block 0021 [ 17]: 970ebebc2dbb4c47 +Block 0021 [ 18]: 55229dad6951aa65 +Block 0021 [ 19]: f3310d064331b06d +Block 0021 [ 20]: 76d95cafb7ff4bc0 +Block 0021 [ 21]: 8d5fd733bf770e1a +Block 0021 [ 22]: f637058052bcc6d1 +Block 0021 [ 23]: 4ab98283fba0118e +Block 0021 [ 24]: e8e525c902663eec +Block 0021 [ 25]: 644cca7d985c8a91 +Block 0021 [ 26]: c6c2de6b0e4ff1be +Block 0021 [ 27]: fc412f9b8a8cedd9 +Block 0021 [ 28]: 0e92b41df490818d +Block 0021 [ 29]: 1d0c2c517f488689 +Block 0021 [ 30]: 18b2da63716f204d +Block 0021 [ 31]: e554edf33f346126 +Block 0021 [ 32]: c08bda271a758810 +Block 0021 [ 33]: 5dd523abea7efb83 +Block 0021 [ 34]: d847a64de969361d +Block 0021 [ 35]: a4f36d26b3b54449 +Block 0021 [ 36]: 1921a0afad9f8fbf +Block 0021 [ 37]: 70da571767923985 +Block 0021 [ 38]: 6c5064a53ec3e555 +Block 0021 [ 39]: 62bcba250774bb08 +Block 0021 [ 40]: 2b5625ff6f5ba533 +Block 0021 [ 41]: c072367cce735fad +Block 0021 [ 42]: 8936f7691d34a967 +Block 0021 [ 43]: be608f7337bfed83 +Block 0021 [ 44]: c5644153fd94cc02 +Block 0021 [ 45]: b6976c4c85e42f9e +Block 0021 [ 46]: f8ad6580cc9a7eb0 +Block 0021 [ 47]: 3d824a32e3758d65 +Block 0021 [ 48]: f169ed5f08f9b944 +Block 0021 [ 49]: e87427a90507fbd4 +Block 0021 [ 50]: 931fb1fe7d965ede +Block 0021 [ 51]: 9b260a432ad72c1c +Block 0021 [ 52]: 79deb2541ce7342d +Block 0021 [ 53]: 69e5e734dba1fd9c +Block 0021 [ 54]: 1247ebe158d28acb +Block 0021 [ 55]: 7dbd681956aeb23a +Block 0021 [ 56]: 300321372051ac95 +Block 0021 [ 57]: 29a1f904e3279041 +Block 0021 [ 58]: d05fccea3fe647f4 +Block 0021 [ 59]: 2385827f254d2b4c +Block 0021 [ 60]: 56b9609de765952f +Block 0021 [ 61]: c94741ba55b5597a +Block 0021 [ 62]: 9e7913dccfeedd26 +Block 0021 [ 63]: 81fbd1291f9421ee +Block 0021 [ 64]: d6262e0e770aeb51 +Block 0021 [ 65]: c827cfb3a6abddfd +Block 0021 [ 66]: 278464d02be24499 +Block 0021 [ 67]: 6128073fae8d69e1 +Block 0021 [ 68]: a787862adac1f282 +Block 0021 [ 69]: 298346627e145ab3 +Block 0021 [ 70]: 13f37d5f03d860c0 +Block 0021 [ 71]: 472bc88d39141ca4 +Block 0021 [ 72]: a32d647eda32d4ef +Block 0021 [ 73]: adb7b6dbfd3ae3ee +Block 0021 [ 74]: e1269626ab25c0a2 +Block 0021 [ 75]: 0a81d0098dcb18b8 +Block 0021 [ 76]: 5a30c38f68fd8627 +Block 0021 [ 77]: 06680a83a31773f1 +Block 0021 [ 78]: 3bb8bfe6fdd1042b +Block 0021 [ 79]: 1991fe79ca1e3d2c +Block 0021 [ 80]: df82bee963637ef6 +Block 0021 [ 81]: f5f6405ea41a34d2 +Block 0021 [ 82]: fecb4282706d12a3 +Block 0021 [ 83]: 08944da6b98b49ff +Block 0021 [ 84]: da3991a854ebdb1e +Block 0021 [ 85]: 96d59a0a8eb94f1d +Block 0021 [ 86]: da88007dad0fb44d +Block 0021 [ 87]: 3a3a7c6401caadd1 +Block 0021 [ 88]: d1a4830ea6a0930c +Block 0021 [ 89]: 90ba4c240ce23c60 +Block 0021 [ 90]: 3ed84aa792e55aab +Block 0021 [ 91]: 69b4b96240dbeb77 +Block 0021 [ 92]: 2e83b29f76581a62 +Block 0021 [ 93]: 9b76934ba16a709c +Block 0021 [ 94]: 133875a80ec7e428 +Block 0021 [ 95]: 0cf80a0eb6cd800f +Block 0021 [ 96]: 875d7cacffadd659 +Block 0021 [ 97]: 6e7b01bd211dea78 +Block 0021 [ 98]: 6f414ca19d49a25c +Block 0021 [ 99]: 1a39a444f5f57861 +Block 0021 [100]: a49caaba3d8e8821 +Block 0021 [101]: b56b6106a9bd904a +Block 0021 [102]: ad2463203a51043e +Block 0021 [103]: e9093114910e868a +Block 0021 [104]: ab7afec2cd298c7f +Block 0021 [105]: 5ca3db0f2755ec4e +Block 0021 [106]: 930f28588ce3c4d9 +Block 0021 [107]: b9caed8e764da044 +Block 0021 [108]: 4ad9f43753450d1b +Block 0021 [109]: 2fd204073599e2e3 +Block 0021 [110]: 32e29607e96dcc49 +Block 0021 [111]: 346f9459d20813e1 +Block 0021 [112]: b9216cc91d1a0b93 +Block 0021 [113]: b2d7287641a5aedc +Block 0021 [114]: 64e3459f766c19a4 +Block 0021 [115]: a94828e02268bc34 +Block 0021 [116]: ab0bf58173c54029 +Block 0021 [117]: 34ece02bab456ed0 +Block 0021 [118]: faa3ac8c0f216393 +Block 0021 [119]: c72717b9c6cfa5e4 +Block 0021 [120]: de532f61d7c21181 +Block 0021 [121]: aaa343e41d74e64b +Block 0021 [122]: bed79982c13e22bd +Block 0021 [123]: a9d0acedec7fb082 +Block 0021 [124]: 33f9ee6919e5e69e +Block 0021 [125]: 9461e87f0d76e520 +Block 0021 [126]: 50d39455a480016a +Block 0021 [127]: 69d241940768dccf +Block 0022 [ 0]: 99ac09d3ecbcdbb4 +Block 0022 [ 1]: 514dda00e5127ffa +Block 0022 [ 2]: 03059e9afb29b1b3 +Block 0022 [ 3]: 5f2b16eedb2625c9 +Block 0022 [ 4]: 8421eca1dbfec1b2 +Block 0022 [ 5]: 1d9cd95877a17d18 +Block 0022 [ 6]: 29ad26ed44443664 +Block 0022 [ 7]: d5e9d0548f100140 +Block 0022 [ 8]: f2f96df7101178e1 +Block 0022 [ 9]: fcde7cc6e739d68c +Block 0022 [ 10]: 9da5994233b3b92c +Block 0022 [ 11]: ede676a1cfb49424 +Block 0022 [ 12]: 87f04a8bd8f02c3c +Block 0022 [ 13]: 793aa15c08c7d1cb +Block 0022 [ 14]: 6782338db894b187 +Block 0022 [ 15]: c4f72a9a6bcf2c10 +Block 0022 [ 16]: 00f5af2f848eb2f3 +Block 0022 [ 17]: decf9043e63c9b1a +Block 0022 [ 18]: 300b96ee9ee506c4 +Block 0022 [ 19]: d36b4e566db81299 +Block 0022 [ 20]: 90ce5819385cd408 +Block 0022 [ 21]: d2013dfebf9c5a82 +Block 0022 [ 22]: dfed4093841d7dee +Block 0022 [ 23]: f74c019e0b5502b9 +Block 0022 [ 24]: 14c8588c2533f91d +Block 0022 [ 25]: f1f261ad12cb3a9e +Block 0022 [ 26]: 46be19a1a1a0ba7d +Block 0022 [ 27]: 01cf062fa2e7b479 +Block 0022 [ 28]: c33e050c6fea3bc7 +Block 0022 [ 29]: 438d65b4399cf820 +Block 0022 [ 30]: f727a7bd6e61ec49 +Block 0022 [ 31]: f95dda0e791f32ff +Block 0022 [ 32]: cf91506b6b6351cd +Block 0022 [ 33]: 44aaf19ab3c4e0ba +Block 0022 [ 34]: fd54a5b7aa337d99 +Block 0022 [ 35]: a141b7ffddcdb8e3 +Block 0022 [ 36]: 9f79915e6dedfdaa +Block 0022 [ 37]: a69bc9b18050b6c0 +Block 0022 [ 38]: 2ce0fe170467aab2 +Block 0022 [ 39]: 94f3b3443bafb15e +Block 0022 [ 40]: f6368a58cb0d19c5 +Block 0022 [ 41]: c0f357c51f5bdb47 +Block 0022 [ 42]: a7273145bca106fe +Block 0022 [ 43]: ce91916807ea540d +Block 0022 [ 44]: 85af3d0bc3cbbbdf +Block 0022 [ 45]: c5e75b71391eed9a +Block 0022 [ 46]: e990ab8763434522 +Block 0022 [ 47]: 0a18de6ffcea0072 +Block 0022 [ 48]: b6b99c2642b1f93d +Block 0022 [ 49]: 880547abadac4ead +Block 0022 [ 50]: 9c824e5c3e3d840d +Block 0022 [ 51]: 71459956dc736b45 +Block 0022 [ 52]: d53fb6e0f374761c +Block 0022 [ 53]: 61b08dcef0ef837e +Block 0022 [ 54]: 584dfc7b7b1ac55d +Block 0022 [ 55]: 6d260c9b48104e21 +Block 0022 [ 56]: 74bd628609d0579b +Block 0022 [ 57]: 4da07fd544e14216 +Block 0022 [ 58]: 44699551cc96435d +Block 0022 [ 59]: 5cb6d7b5d4d32315 +Block 0022 [ 60]: 002c55ac837869de +Block 0022 [ 61]: 33910a7581ce0934 +Block 0022 [ 62]: c20bb59e0cb163b7 +Block 0022 [ 63]: 5724a2c79e0d567d +Block 0022 [ 64]: fc12585573a969a1 +Block 0022 [ 65]: 0f1802284711fc36 +Block 0022 [ 66]: d18a8169e1a758d7 +Block 0022 [ 67]: 55d40c0d1aa9d93c +Block 0022 [ 68]: 66f4cc1fd0b4a21c +Block 0022 [ 69]: 626c0c97a5746c99 +Block 0022 [ 70]: 5a8387f8935bd8d3 +Block 0022 [ 71]: 5774a5ef99ef0fa4 +Block 0022 [ 72]: 345753a67f42ffaa +Block 0022 [ 73]: d5c7db73671dd400 +Block 0022 [ 74]: 1c876fbd31b40929 +Block 0022 [ 75]: adb555c8cd4c682e +Block 0022 [ 76]: 4e35e1ec3a2fa91a +Block 0022 [ 77]: 97837b1d4e9d22e3 +Block 0022 [ 78]: db4de1fa218320cb +Block 0022 [ 79]: 6949e60bd0a77306 +Block 0022 [ 80]: 5a1a9285b471e18b +Block 0022 [ 81]: 133e1594f9013500 +Block 0022 [ 82]: 4fed50832b7552db +Block 0022 [ 83]: ea8ec75578b38f5e +Block 0022 [ 84]: 55f680462419d053 +Block 0022 [ 85]: 57a6bf1ae4c5cdda +Block 0022 [ 86]: 4490fb9d7437ec6c +Block 0022 [ 87]: 5c20149c3fdc0f19 +Block 0022 [ 88]: 3e05dd84d1b96161 +Block 0022 [ 89]: 8ee14ba173ef628c +Block 0022 [ 90]: 7c7335a772f5d1a0 +Block 0022 [ 91]: 218d2dc1909539f1 +Block 0022 [ 92]: c864e8ba266a87d9 +Block 0022 [ 93]: d05aa03f1c192d28 +Block 0022 [ 94]: 1a5afc3d25c10a33 +Block 0022 [ 95]: 06ebd6b0cab2a596 +Block 0022 [ 96]: ec56d04aa2cac393 +Block 0022 [ 97]: 84114dcff89ed7d6 +Block 0022 [ 98]: 9236b4914b6853c3 +Block 0022 [ 99]: 19b19c03c9f2cf00 +Block 0022 [100]: f89d5d10e0f2206d +Block 0022 [101]: b8c0768373077807 +Block 0022 [102]: 5f93b788171e6a3d +Block 0022 [103]: 06b4bffc543ba5ba +Block 0022 [104]: 2160cc4bcb298ce1 +Block 0022 [105]: a31ebc8cd3fb8e43 +Block 0022 [106]: 840ed2e07f648e5f +Block 0022 [107]: 44f7dabc1fa4ce16 +Block 0022 [108]: f3da6300d6853673 +Block 0022 [109]: 83a2d663f5bd1f39 +Block 0022 [110]: 467a553afb39e207 +Block 0022 [111]: 7e5d07e9e34aa631 +Block 0022 [112]: c18efe2cbee27f59 +Block 0022 [113]: 88c337ece41089b9 +Block 0022 [114]: 836dbe9587d964bd +Block 0022 [115]: d5dae636d08de614 +Block 0022 [116]: 8d10eb8da0c2f53f +Block 0022 [117]: 4a0f03949bc56298 +Block 0022 [118]: 2e2610735ed2c5e8 +Block 0022 [119]: 04d88eefe8be430f +Block 0022 [120]: b6f232d66a064d22 +Block 0022 [121]: 8b43f223c3bab19e +Block 0022 [122]: 42189f5dd777bdc7 +Block 0022 [123]: 26aebb9a0c7930c0 +Block 0022 [124]: 745a32b9b6d6ce9b +Block 0022 [125]: d82e6fa1d9eaa64c +Block 0022 [126]: f5226b2114974004 +Block 0022 [127]: d411871aafe92d03 +Block 0023 [ 0]: 099bad02ce6364d6 +Block 0023 [ 1]: 946434f53c381dfa +Block 0023 [ 2]: 7cc764145dcff211 +Block 0023 [ 3]: 863a1d0f6917e81f +Block 0023 [ 4]: b07148fffbf35d2e +Block 0023 [ 5]: 06e0a8c35d673389 +Block 0023 [ 6]: 0836a7016c46218d +Block 0023 [ 7]: f7448c33afda380d +Block 0023 [ 8]: 9d70de7501979872 +Block 0023 [ 9]: 5ec479e097342787 +Block 0023 [ 10]: 4c328e947adc0a3b +Block 0023 [ 11]: 673b567c3f825c7d +Block 0023 [ 12]: 88bbe75df8436559 +Block 0023 [ 13]: 31e8b9ff423389e9 +Block 0023 [ 14]: 7569469bba244732 +Block 0023 [ 15]: 0f019e02e9d44270 +Block 0023 [ 16]: 2cf0f216bb23dcbc +Block 0023 [ 17]: f942da467c94c759 +Block 0023 [ 18]: c531370dff6c7550 +Block 0023 [ 19]: 76eb32b05537d887 +Block 0023 [ 20]: 09be023c2f37ef6c +Block 0023 [ 21]: 913b6fb2ae92aa17 +Block 0023 [ 22]: 3905230d429ddb42 +Block 0023 [ 23]: 8dacca73716bd067 +Block 0023 [ 24]: b767e0600fbcad20 +Block 0023 [ 25]: fc4bbc20c754fe8f +Block 0023 [ 26]: 010fb475210b4052 +Block 0023 [ 27]: 55c219fa4a4e2d4a +Block 0023 [ 28]: 346444d97bc6ae08 +Block 0023 [ 29]: 51b0dc31dfae6277 +Block 0023 [ 30]: bd9651aca77ac723 +Block 0023 [ 31]: a6139c546b9d8a72 +Block 0023 [ 32]: e9e26f0535ae93f1 +Block 0023 [ 33]: d029451bda2edfd0 +Block 0023 [ 34]: 3f52bfe31df12f36 +Block 0023 [ 35]: d51d4d9383579576 +Block 0023 [ 36]: 918b16322ea2cd12 +Block 0023 [ 37]: 0fb4466b28e900dd +Block 0023 [ 38]: d06552715cb858c5 +Block 0023 [ 39]: 66700db36d68fd04 +Block 0023 [ 40]: 6c5248d72cc78817 +Block 0023 [ 41]: 6237033fbadc51c0 +Block 0023 [ 42]: 70ce5003d36e91fd +Block 0023 [ 43]: 9473b2ba7e1ea0b7 +Block 0023 [ 44]: 8570a1a79d0de212 +Block 0023 [ 45]: 38128c19a8cf3d94 +Block 0023 [ 46]: 996d86984478edb2 +Block 0023 [ 47]: 13a573e574db3c5f +Block 0023 [ 48]: 14c8a880130edffa +Block 0023 [ 49]: daa29af545495cbe +Block 0023 [ 50]: 2966004bbf930356 +Block 0023 [ 51]: 6254df94f338f8ea +Block 0023 [ 52]: 48ceb67f8fcfb1a1 +Block 0023 [ 53]: 054af1ac0f6f178a +Block 0023 [ 54]: bd24a125e957879e +Block 0023 [ 55]: 855df59044ecdbc7 +Block 0023 [ 56]: 2bdd65a1b699e3bd +Block 0023 [ 57]: 6cebfbc55dc696a6 +Block 0023 [ 58]: 3812eff0201089e2 +Block 0023 [ 59]: 012595753609368d +Block 0023 [ 60]: ae37b3e38d73252c +Block 0023 [ 61]: fb9610e25ae10d9a +Block 0023 [ 62]: fd0493c39dff6521 +Block 0023 [ 63]: 1abead7fa22e7ee7 +Block 0023 [ 64]: fa54f2336e7a816b +Block 0023 [ 65]: c9ef67deeb2238af +Block 0023 [ 66]: 3bd2bafd83abf2fa +Block 0023 [ 67]: 995385d15f693c1b +Block 0023 [ 68]: 35409549ee4db0c7 +Block 0023 [ 69]: 1e501283957b8d79 +Block 0023 [ 70]: 57edfd6799c7b1a0 +Block 0023 [ 71]: 42d993d322a85ca3 +Block 0023 [ 72]: 49842f3edfe3a13f +Block 0023 [ 73]: eaed319e568fe464 +Block 0023 [ 74]: 4839e1a7a8233599 +Block 0023 [ 75]: f2d5f7df30b2e85e +Block 0023 [ 76]: c9a770a607739db1 +Block 0023 [ 77]: 02c54ed70c63a598 +Block 0023 [ 78]: 27b1e90934def83a +Block 0023 [ 79]: 476fe1ecd08c315d +Block 0023 [ 80]: e546b55b51e06075 +Block 0023 [ 81]: 8bf363a6252cb544 +Block 0023 [ 82]: f712f271ef124632 +Block 0023 [ 83]: 19bd4969355d67b1 +Block 0023 [ 84]: b505bc0de2bc042f +Block 0023 [ 85]: 0461f15ec598306a +Block 0023 [ 86]: 7e0734c6a49752a4 +Block 0023 [ 87]: e97530b659023c82 +Block 0023 [ 88]: df66806a45af7ed4 +Block 0023 [ 89]: a1ee45ca25a4e8ef +Block 0023 [ 90]: 85f36f0919bda565 +Block 0023 [ 91]: af8d1c2bc3c6cda2 +Block 0023 [ 92]: d5c8b3905d6c4684 +Block 0023 [ 93]: 924285ed85d7f4fe +Block 0023 [ 94]: e667250c7fe0448d +Block 0023 [ 95]: f18072539252e69b +Block 0023 [ 96]: 98f930d88a11d73d +Block 0023 [ 97]: 40ddc2faea46a6fe +Block 0023 [ 98]: 55edf0abf338fe23 +Block 0023 [ 99]: 137afd6aac160ea4 +Block 0023 [100]: a930757fe62a632b +Block 0023 [101]: f26ea4497a99a22a +Block 0023 [102]: f7dd63b836565686 +Block 0023 [103]: e16156ef2389802e +Block 0023 [104]: e3e02a7fa444bc54 +Block 0023 [105]: d3e93563d3276e5a +Block 0023 [106]: 55e761b504d23408 +Block 0023 [107]: 4c1f0a70be317833 +Block 0023 [108]: 20a59044cc69cabc +Block 0023 [109]: e5642bf5fbf7694c +Block 0023 [110]: dc1e13a4fe52198e +Block 0023 [111]: 118b7c4b6335ca02 +Block 0023 [112]: 4f677c8f3f7d1653 +Block 0023 [113]: e3623052b8793124 +Block 0023 [114]: 64e8edf529114177 +Block 0023 [115]: 1b40d9ea83af342b +Block 0023 [116]: 68e7c45d6fe85d2b +Block 0023 [117]: 8d33a45c58de3420 +Block 0023 [118]: 6205c61932eac00e +Block 0023 [119]: 4c9001286a4a5748 +Block 0023 [120]: 629740cfc16c5f44 +Block 0023 [121]: aac9b6c66cf37178 +Block 0023 [122]: 362f773d06d7b5e5 +Block 0023 [123]: 7145aea05eabfbca +Block 0023 [124]: 3fa429c42644e339 +Block 0023 [125]: 026700c0b6e2e78c +Block 0023 [126]: 0db5145e9f66582e +Block 0023 [127]: f013125cd14c2aa2 +Block 0024 [ 0]: e2165971c08fea98 +Block 0024 [ 1]: 956b34362d16bde6 +Block 0024 [ 2]: 0a750c1da3669c5a +Block 0024 [ 3]: 28f0cc2dec551759 +Block 0024 [ 4]: b460b783bb6ce4d4 +Block 0024 [ 5]: ccd11552304ffe83 +Block 0024 [ 6]: 895f1451900d0571 +Block 0024 [ 7]: c718c33fc912a775 +Block 0024 [ 8]: 6ac891a642a415e0 +Block 0024 [ 9]: f9cc3a0b0bfd732e +Block 0024 [ 10]: 32c8c20180df24fc +Block 0024 [ 11]: 083ec47a8fc783bf +Block 0024 [ 12]: 10d4a62e2dfca22d +Block 0024 [ 13]: a7cbc7fe934df62d +Block 0024 [ 14]: 60b767b23c7b5434 +Block 0024 [ 15]: 013a9f1758cd46f4 +Block 0024 [ 16]: c521969bc47e72bb +Block 0024 [ 17]: c8c2805cf7474ad1 +Block 0024 [ 18]: d73691bff67d34eb +Block 0024 [ 19]: 0109966c69bf5c53 +Block 0024 [ 20]: bcef0f8a35acd7dc +Block 0024 [ 21]: b5ab773d7386f310 +Block 0024 [ 22]: ddbe3e6b9b29d885 +Block 0024 [ 23]: 53d4e2d94e14df8d +Block 0024 [ 24]: dd77c5edfdebd8dd +Block 0024 [ 25]: 4dfe82d7fcb944f8 +Block 0024 [ 26]: 1dda860fdb104746 +Block 0024 [ 27]: 690c21298d00576a +Block 0024 [ 28]: 31f616a8603ba209 +Block 0024 [ 29]: df15e6faf136ed42 +Block 0024 [ 30]: a2d0b72888d9a03b +Block 0024 [ 31]: f22e82632b4cd9f9 +Block 0024 [ 32]: e15829a9ca7c6ff9 +Block 0024 [ 33]: d0e0c25534f07259 +Block 0024 [ 34]: 39a144104a62a724 +Block 0024 [ 35]: ba85ed7991504855 +Block 0024 [ 36]: 29bb22ded5d822d1 +Block 0024 [ 37]: dc45c5b64f27ac67 +Block 0024 [ 38]: b5ab1d0a5d3ca66d +Block 0024 [ 39]: ebdec5e7d82f2f5f +Block 0024 [ 40]: 2660e8938068ecbf +Block 0024 [ 41]: fc5c71724b0cb677 +Block 0024 [ 42]: 84ee0dc836f79250 +Block 0024 [ 43]: 5b679856c2388af0 +Block 0024 [ 44]: fbf4eb8f24c8e20c +Block 0024 [ 45]: 2fe8cbd52863716c +Block 0024 [ 46]: fede1a5b69045a28 +Block 0024 [ 47]: 65809054232875e1 +Block 0024 [ 48]: f1a33e9b660490ae +Block 0024 [ 49]: f728418282376b71 +Block 0024 [ 50]: 910beb5b9d19dd01 +Block 0024 [ 51]: 0ef1de00ba9c6f07 +Block 0024 [ 52]: 7a669f3a91b22362 +Block 0024 [ 53]: 80fb3d95430597a7 +Block 0024 [ 54]: 10b373244e409034 +Block 0024 [ 55]: 71aaa62305372b2e +Block 0024 [ 56]: 787cdf237ee54aab +Block 0024 [ 57]: 956c44880fd8f8cb +Block 0024 [ 58]: 60c90815957df46f +Block 0024 [ 59]: 83f28fcaeaf7efdf +Block 0024 [ 60]: 7817d1a16c11f2b8 +Block 0024 [ 61]: 8d957aba9fe91cde +Block 0024 [ 62]: cc487239691feca9 +Block 0024 [ 63]: 7223ce9510cd99f0 +Block 0024 [ 64]: 574f63f3b893bd20 +Block 0024 [ 65]: 2f2654e8cf49ca0e +Block 0024 [ 66]: 338f89121a53ea59 +Block 0024 [ 67]: 511e9d8f0027e12d +Block 0024 [ 68]: 31d58a613f863ff8 +Block 0024 [ 69]: ff90079b882b3303 +Block 0024 [ 70]: 3dbbf7c9ff0da4f4 +Block 0024 [ 71]: bb52ab6617231643 +Block 0024 [ 72]: e62a9b54fc156ac1 +Block 0024 [ 73]: fca1f4a80bb48a37 +Block 0024 [ 74]: 04106b8fa9a32d1c +Block 0024 [ 75]: 64d243aa253f7eb1 +Block 0024 [ 76]: 2f763fbb0c2adac4 +Block 0024 [ 77]: edc93685822747f9 +Block 0024 [ 78]: d4cd3faa4576d0ff +Block 0024 [ 79]: cdd3212556200783 +Block 0024 [ 80]: 0f6c01aa978124bc +Block 0024 [ 81]: daf5f1d5f6ebc523 +Block 0024 [ 82]: a6a7d120838f1a38 +Block 0024 [ 83]: a29692c9d853e590 +Block 0024 [ 84]: 7190defba554d3dd +Block 0024 [ 85]: d778f0e9b1a010ea +Block 0024 [ 86]: efca87f19ffc3d91 +Block 0024 [ 87]: d83dc74dad48654f +Block 0024 [ 88]: 83bbcf53dbe87809 +Block 0024 [ 89]: 954a6988f2584a5e +Block 0024 [ 90]: 5fa4f2aa07e61f2d +Block 0024 [ 91]: 4419aa301b0edf63 +Block 0024 [ 92]: ae2a42774762f64f +Block 0024 [ 93]: e8c6383746f81621 +Block 0024 [ 94]: 29c3f2535d94b29c +Block 0024 [ 95]: 0a04988ad66aa658 +Block 0024 [ 96]: 554e3723e34d327f +Block 0024 [ 97]: b8f13dac291e9a97 +Block 0024 [ 98]: 07aecb10260d229f +Block 0024 [ 99]: 34df4da902134c48 +Block 0024 [100]: 6496134cfe2ba958 +Block 0024 [101]: 35b7391dfa167dc7 +Block 0024 [102]: 1b746919447ddb5e +Block 0024 [103]: c567f3eb1deeeaf0 +Block 0024 [104]: 6c38ac1788c46474 +Block 0024 [105]: d95e56354346a0b8 +Block 0024 [106]: cd077f86ac3d4edb +Block 0024 [107]: 1bb1f6b8dc1fb74c +Block 0024 [108]: 34a43954ba7d40b0 +Block 0024 [109]: 8648223359c3c41b +Block 0024 [110]: 91367335cda75388 +Block 0024 [111]: c4c21989dadcacb9 +Block 0024 [112]: ed6f4ff9c4d511b0 +Block 0024 [113]: fa9839f79f324c1f +Block 0024 [114]: f9d30bbf2c448265 +Block 0024 [115]: e77b01d0fb7a56a6 +Block 0024 [116]: 1b32529459898945 +Block 0024 [117]: 597b007f6fce7bd5 +Block 0024 [118]: c2b1361d1d167c45 +Block 0024 [119]: 3af3e20caa6c0158 +Block 0024 [120]: 9e61cd876ca97f38 +Block 0024 [121]: a93f46dfd68eb195 +Block 0024 [122]: cc1861552459b84e +Block 0024 [123]: 7aaf11c61f8ee8cd +Block 0024 [124]: 7010b56bb3d8d5a0 +Block 0024 [125]: eba510b51849285a +Block 0024 [126]: 1c1cdef86a925a57 +Block 0024 [127]: ef174658add9bc4e +Block 0025 [ 0]: 7fec1e914e41b561 +Block 0025 [ 1]: 8d453719a29ade82 +Block 0025 [ 2]: 4c44899c93e4fc6c +Block 0025 [ 3]: 29c0996cb00e492f +Block 0025 [ 4]: f8a70a32463afdaf +Block 0025 [ 5]: 3a7899c650c11af9 +Block 0025 [ 6]: bab6cbf971ef5305 +Block 0025 [ 7]: a8b4f7ba8b398784 +Block 0025 [ 8]: 73211324c30b68f3 +Block 0025 [ 9]: 623fe1e8f3cc900d +Block 0025 [ 10]: dc28af58c2f66a8d +Block 0025 [ 11]: 97cad6d2d8c6a9a0 +Block 0025 [ 12]: 7cd26c2cdb0b33a9 +Block 0025 [ 13]: 4794dfd6fbc171f0 +Block 0025 [ 14]: 05249ce01b3a8164 +Block 0025 [ 15]: b76e3ffe8767ee52 +Block 0025 [ 16]: 7beffefcb5523eff +Block 0025 [ 17]: bb5bc39e22e26736 +Block 0025 [ 18]: ab7961a2693b9b73 +Block 0025 [ 19]: 6209dfcad9e4dd27 +Block 0025 [ 20]: a1e4650c2db6be75 +Block 0025 [ 21]: fda9226ba7242240 +Block 0025 [ 22]: cf61b8b6356eb618 +Block 0025 [ 23]: ac2640d22df34c79 +Block 0025 [ 24]: 5024c3162fc67605 +Block 0025 [ 25]: 02256e53ff6da584 +Block 0025 [ 26]: 93ce393513783a84 +Block 0025 [ 27]: f66dadb003f85c57 +Block 0025 [ 28]: 0845f1d883f7459b +Block 0025 [ 29]: 00c32dc23c554d5d +Block 0025 [ 30]: 8a08a8902817f8a6 +Block 0025 [ 31]: 5308f47b7bb4a416 +Block 0025 [ 32]: 0cbef7467a40258b +Block 0025 [ 33]: e38877ed232a6297 +Block 0025 [ 34]: cd673cc2e015e8c3 +Block 0025 [ 35]: 6ae3ce670e62e29b +Block 0025 [ 36]: 78406412241f4dbf +Block 0025 [ 37]: 82340f60ec09dc7c +Block 0025 [ 38]: 0389649c90d3bd0d +Block 0025 [ 39]: 925d8d83d4a607ed +Block 0025 [ 40]: 2729cf9bf166d4cc +Block 0025 [ 41]: d116cfe5268cffc4 +Block 0025 [ 42]: 6b20a063a5057041 +Block 0025 [ 43]: 695aec8a0fec8f9f +Block 0025 [ 44]: 31ada27506d76516 +Block 0025 [ 45]: bf876ae720b84147 +Block 0025 [ 46]: ca643a7481f8052d +Block 0025 [ 47]: 3aff4d1535fa8346 +Block 0025 [ 48]: e32ffbfb48fa5a47 +Block 0025 [ 49]: ca4cac70a619a571 +Block 0025 [ 50]: d87acc4e60f2ed5b +Block 0025 [ 51]: a6759d0d86d5a6de +Block 0025 [ 52]: 22b94e6b1b2404c8 +Block 0025 [ 53]: 5d393398fcf14d57 +Block 0025 [ 54]: ed5ccc3e832ed159 +Block 0025 [ 55]: 147825a8a16b75a4 +Block 0025 [ 56]: 60e4990ac55196d2 +Block 0025 [ 57]: c274b29fa07122a5 +Block 0025 [ 58]: f508a05f24ed2a53 +Block 0025 [ 59]: 18f64b9695cc5087 +Block 0025 [ 60]: 41301013a11a2eea +Block 0025 [ 61]: cf1f820abded4e61 +Block 0025 [ 62]: f945403230120a27 +Block 0025 [ 63]: 143916edcea38206 +Block 0025 [ 64]: b468dd69c66bc0a2 +Block 0025 [ 65]: e983ac240732b25d +Block 0025 [ 66]: b96d92378b0dd639 +Block 0025 [ 67]: 468af3ef419975a3 +Block 0025 [ 68]: fa16fabd0450c504 +Block 0025 [ 69]: d876668000d8d18b +Block 0025 [ 70]: aa94e1c840e22475 +Block 0025 [ 71]: 0d8c86f2c096de62 +Block 0025 [ 72]: 295fb4a3ed96d94f +Block 0025 [ 73]: 47e05d1e6dbee24b +Block 0025 [ 74]: fd6243959bdbb659 +Block 0025 [ 75]: 10dd4a463ea83767 +Block 0025 [ 76]: 0eaa5cc32a273b99 +Block 0025 [ 77]: 88912904ce45fc60 +Block 0025 [ 78]: ccb0d9f387f74dbd +Block 0025 [ 79]: 405c47e118dee494 +Block 0025 [ 80]: b3f306cf8fea7d62 +Block 0025 [ 81]: 9c91b96d5bb9a697 +Block 0025 [ 82]: 3aa3a7334cb4c9d5 +Block 0025 [ 83]: 77aa2074e793da72 +Block 0025 [ 84]: 373258b45e261ad0 +Block 0025 [ 85]: a51b5dae4eb90126 +Block 0025 [ 86]: fdea9113f6951015 +Block 0025 [ 87]: ef0d4164c8ee9560 +Block 0025 [ 88]: 1d23cb4d4c9e43ac +Block 0025 [ 89]: 42416e0e356e80ab +Block 0025 [ 90]: 803d276ae917a23d +Block 0025 [ 91]: 8369f2919b947247 +Block 0025 [ 92]: 2a2aa71103176ab1 +Block 0025 [ 93]: 57658b2de0fcff86 +Block 0025 [ 94]: 66a2f1e9854343bf +Block 0025 [ 95]: 63a8e311a7610e18 +Block 0025 [ 96]: 6fb19e84fc761401 +Block 0025 [ 97]: 3524af3cb2f85c3e +Block 0025 [ 98]: 7868214e92c478d4 +Block 0025 [ 99]: e58934b63e931f63 +Block 0025 [100]: 0f6f38837b3640c4 +Block 0025 [101]: 7ba53b2d8568d174 +Block 0025 [102]: d4287578bc4b9c80 +Block 0025 [103]: 3b81ca6bb022200e +Block 0025 [104]: 4a1c1961b6f6abef +Block 0025 [105]: 60b02a0b6fe0e5b2 +Block 0025 [106]: 960fe18d397dfc00 +Block 0025 [107]: 497c1301e2120010 +Block 0025 [108]: 2743e5a8fa54d8fd +Block 0025 [109]: d91051c35b6937d9 +Block 0025 [110]: 61cf2d54b6a88b23 +Block 0025 [111]: aa97b9a04103678e +Block 0025 [112]: 88e8cc12ce6811d8 +Block 0025 [113]: 55ffb84df352154f +Block 0025 [114]: bc142122988a14af +Block 0025 [115]: 37de60d0a05f0003 +Block 0025 [116]: 8e24d02b3a35ec25 +Block 0025 [117]: 102c19d5020c7991 +Block 0025 [118]: ecd2c067a6d6325e +Block 0025 [119]: 924903bbe73407f7 +Block 0025 [120]: 672e27fff84fcd25 +Block 0025 [121]: 55952481cec95079 +Block 0025 [122]: 895d0739c3033a5c +Block 0025 [123]: 49849f73384e29a1 +Block 0025 [124]: d886142337a344d5 +Block 0025 [125]: 4059e0437a4c4d45 +Block 0025 [126]: ab9f890c59d37d30 +Block 0025 [127]: d35dccaa6b900138 +Block 0026 [ 0]: eee79f21af3c1e8e +Block 0026 [ 1]: cc2b33ab486fc093 +Block 0026 [ 2]: 7db236b8961a5233 +Block 0026 [ 3]: 319862e736fc58f1 +Block 0026 [ 4]: bdfa5963f1a5be5b +Block 0026 [ 5]: 5cf9608979c5355e +Block 0026 [ 6]: 4175701f1efa27d6 +Block 0026 [ 7]: 24ef75feaae50536 +Block 0026 [ 8]: 955e1030a76356d9 +Block 0026 [ 9]: d4c681c9bdc99c39 +Block 0026 [ 10]: d85f521c1aed09e7 +Block 0026 [ 11]: 45b8930d91788202 +Block 0026 [ 12]: 3d0729ae0f077706 +Block 0026 [ 13]: 6b0aedc4b086f3ee +Block 0026 [ 14]: b13861f6559ad8b2 +Block 0026 [ 15]: 6e5711968499f603 +Block 0026 [ 16]: 2922cc84dace481e +Block 0026 [ 17]: 7bf9a9a7faf8ad75 +Block 0026 [ 18]: 0ea59090b01bb758 +Block 0026 [ 19]: 89fc6435584e1314 +Block 0026 [ 20]: 7d0b42809c01601f +Block 0026 [ 21]: cd0195da60ebc4ca +Block 0026 [ 22]: 4837f09b307c04c7 +Block 0026 [ 23]: 36d3ca566e75c126 +Block 0026 [ 24]: a72fab6fed57b401 +Block 0026 [ 25]: 1ab0894c537871df +Block 0026 [ 26]: 6e53e4d625a51697 +Block 0026 [ 27]: 3da3deee9e4bc1b9 +Block 0026 [ 28]: 3524a0a179c6c924 +Block 0026 [ 29]: 840b3b1ba8ce34b6 +Block 0026 [ 30]: 53632d16b059cd40 +Block 0026 [ 31]: 647a5a5a55faac31 +Block 0026 [ 32]: 549d91d1f69ad199 +Block 0026 [ 33]: 2d0fa16485540e89 +Block 0026 [ 34]: 5a720ab2729b3793 +Block 0026 [ 35]: 22bcd8adb364c826 +Block 0026 [ 36]: a5f4256a78698151 +Block 0026 [ 37]: 5d0db6ce354e4290 +Block 0026 [ 38]: 947386a9e7360515 +Block 0026 [ 39]: 2a602fa9c315d38d +Block 0026 [ 40]: 3b5f77908f5ac97e +Block 0026 [ 41]: f62232e1a9e7c5f2 +Block 0026 [ 42]: 2ddc59304e07afff +Block 0026 [ 43]: 77270e436e65970a +Block 0026 [ 44]: 7f4850d45d0749e0 +Block 0026 [ 45]: d45d4e3f3366ddc9 +Block 0026 [ 46]: b93f772be1a3c78c +Block 0026 [ 47]: 4ef41e1a491b0786 +Block 0026 [ 48]: fa1b81838aadaf3f +Block 0026 [ 49]: 25699d36489510a7 +Block 0026 [ 50]: a545657caf170dd7 +Block 0026 [ 51]: 72017a211d0bbe62 +Block 0026 [ 52]: 1e9f826d09a0cab0 +Block 0026 [ 53]: f460f400efdd444f +Block 0026 [ 54]: a13fe8780376dbd1 +Block 0026 [ 55]: 98de57bda86100c4 +Block 0026 [ 56]: 45ffa1109383aebb +Block 0026 [ 57]: 51140cd9ad461755 +Block 0026 [ 58]: a851fb5f98b0d712 +Block 0026 [ 59]: 129097e9827e8523 +Block 0026 [ 60]: 08d008e8b91022dc +Block 0026 [ 61]: f928103deb0d802f +Block 0026 [ 62]: 38fcb3cbe1b11398 +Block 0026 [ 63]: 884212b2014cbcde +Block 0026 [ 64]: 6eb5e9ea0e3d1e5f +Block 0026 [ 65]: b45d847bfbcc5d82 +Block 0026 [ 66]: fbb702537bcfad8c +Block 0026 [ 67]: 8c61ddcb3cc2c197 +Block 0026 [ 68]: 37d5c6fb5974522f +Block 0026 [ 69]: 8356ebe985ec8ee8 +Block 0026 [ 70]: 80699d5d11742823 +Block 0026 [ 71]: 1bb1bb7a29b5f605 +Block 0026 [ 72]: 563409efa7d51aec +Block 0026 [ 73]: 91f6bbd7bd7840db +Block 0026 [ 74]: 62b862178bbbdeff +Block 0026 [ 75]: 4421a9f0633e5051 +Block 0026 [ 76]: 4a516a9ba47089e1 +Block 0026 [ 77]: 62a99ffac0b6ac28 +Block 0026 [ 78]: b5de42edd231de76 +Block 0026 [ 79]: ab223fa9002f8262 +Block 0026 [ 80]: aa5f21352cb23793 +Block 0026 [ 81]: 2e8aecaff5c1920d +Block 0026 [ 82]: 6fd6c1fa0bdfe9ad +Block 0026 [ 83]: f41b93489dd5d2fc +Block 0026 [ 84]: b5879ed954e3753e +Block 0026 [ 85]: a9a6346518d7265f +Block 0026 [ 86]: 7e55ef6f8be4f96f +Block 0026 [ 87]: 8915bc4f72f7e290 +Block 0026 [ 88]: e8f985beffef4195 +Block 0026 [ 89]: 0df30da439929ad8 +Block 0026 [ 90]: 65715634474e0c57 +Block 0026 [ 91]: cf051f53301a1280 +Block 0026 [ 92]: c13d30b7dbd59dc6 +Block 0026 [ 93]: 24161f8474d19be2 +Block 0026 [ 94]: 360846888ff2e5ed +Block 0026 [ 95]: 38715e7b8b17fc35 +Block 0026 [ 96]: a4741555b86046e8 +Block 0026 [ 97]: aa9a1a9591d65a3e +Block 0026 [ 98]: 767e5303940f01ff +Block 0026 [ 99]: b5247410c8d63475 +Block 0026 [100]: 3925646e1d5aee02 +Block 0026 [101]: 1803e317f46525a6 +Block 0026 [102]: ffcda1f5e28d1756 +Block 0026 [103]: 6567f296ff4f4122 +Block 0026 [104]: 653dd7e1836c5988 +Block 0026 [105]: 886f7c81c988d824 +Block 0026 [106]: 0d013b026518c3dd +Block 0026 [107]: 4fe2dfc65b4fe2d2 +Block 0026 [108]: 0bf2a1b164b22c42 +Block 0026 [109]: c043304c9083f586 +Block 0026 [110]: faea655742205723 +Block 0026 [111]: f42d636411a368a2 +Block 0026 [112]: 61c54f74a70abaf0 +Block 0026 [113]: 2018d953876f6124 +Block 0026 [114]: be334d3bae590130 +Block 0026 [115]: f13b8cf85d13f182 +Block 0026 [116]: f21645954df1cd54 +Block 0026 [117]: 9b737e10256a2fb8 +Block 0026 [118]: b3cf82a575fbe5ab +Block 0026 [119]: 5f265cad6ea1b14f +Block 0026 [120]: 7ac6b2d3ddf28088 +Block 0026 [121]: 8379ed4fae10de46 +Block 0026 [122]: e7079089c6dc636c +Block 0026 [123]: b7baecd0386b51b7 +Block 0026 [124]: 22c242b2a6d72f34 +Block 0026 [125]: 667fe4a58f5d2dcd +Block 0026 [126]: 95fa7431de515fd0 +Block 0026 [127]: e4d3fb6334c9ce97 +Block 0027 [ 0]: 95cc13c27dac11e0 +Block 0027 [ 1]: 9cd4b9d03cfb1dca +Block 0027 [ 2]: 99dc6b6b20905e25 +Block 0027 [ 3]: c65a7b0d85a1b052 +Block 0027 [ 4]: 615780330d0d4fcb +Block 0027 [ 5]: 91063aeab24cc367 +Block 0027 [ 6]: 7fef51645f233b87 +Block 0027 [ 7]: ea98795e8670e73f +Block 0027 [ 8]: b1835ec86b349192 +Block 0027 [ 9]: 98d2ac020adc50b3 +Block 0027 [ 10]: c64169feae7a03ab +Block 0027 [ 11]: 2a0401a8673c849d +Block 0027 [ 12]: 9ec963971adafe0d +Block 0027 [ 13]: 23c8ee325fe41f07 +Block 0027 [ 14]: 9cd9a0ab69d88679 +Block 0027 [ 15]: 70620926995771f7 +Block 0027 [ 16]: 412a42d7552db869 +Block 0027 [ 17]: 127a9d4f512c8c78 +Block 0027 [ 18]: b1f768cb54661374 +Block 0027 [ 19]: 4c40d442e2be9165 +Block 0027 [ 20]: 196a5e740a20c61a +Block 0027 [ 21]: cd756f83cc1e67d1 +Block 0027 [ 22]: 2bd8b214950f2a2b +Block 0027 [ 23]: 89d607084ba66af5 +Block 0027 [ 24]: 94b170d6c657e48d +Block 0027 [ 25]: 47e7d25dee2010a0 +Block 0027 [ 26]: 75274d0f5d1749e0 +Block 0027 [ 27]: ebca58ce3bc31452 +Block 0027 [ 28]: 776047d1eeedd606 +Block 0027 [ 29]: 3407ed41b231de65 +Block 0027 [ 30]: 28839677058efe92 +Block 0027 [ 31]: 4f0ad4617266354d +Block 0027 [ 32]: b58d45fc16ace760 +Block 0027 [ 33]: 0b469c2426665e50 +Block 0027 [ 34]: 9567c3437165695d +Block 0027 [ 35]: 6a33dbd1b503711a +Block 0027 [ 36]: 7fabae608ee3e8b8 +Block 0027 [ 37]: 83db64f31f42033e +Block 0027 [ 38]: a0e5e912cc5d3d3e +Block 0027 [ 39]: 2d7ed49e3cbf01cd +Block 0027 [ 40]: 96d3428f9fb93f11 +Block 0027 [ 41]: cb3ad898f8306b30 +Block 0027 [ 42]: 976498e32043cb2d +Block 0027 [ 43]: a7bf2d8c654826b9 +Block 0027 [ 44]: 1b979445eeb0247c +Block 0027 [ 45]: 4900f21dfd9f261f +Block 0027 [ 46]: 0be7ad994dd83751 +Block 0027 [ 47]: 2a28f760e8cfa6b3 +Block 0027 [ 48]: 4763d85a8b97536d +Block 0027 [ 49]: 03c4986b76d07230 +Block 0027 [ 50]: 9295e3f685a292c0 +Block 0027 [ 51]: 8a13bfda9f53a779 +Block 0027 [ 52]: e6fbc596a08c812f +Block 0027 [ 53]: 6f2c97960a54b9ff +Block 0027 [ 54]: a95b9bb892e33ad9 +Block 0027 [ 55]: 027bdcb1d4b52e75 +Block 0027 [ 56]: 93f6f341920ffdc7 +Block 0027 [ 57]: a1fd97e0f5da32af +Block 0027 [ 58]: 0bcf62886848b1e9 +Block 0027 [ 59]: 6e25a14e5433ac03 +Block 0027 [ 60]: 132fcbfe477f036c +Block 0027 [ 61]: 75a92ed68ce010d8 +Block 0027 [ 62]: 7c83f7bd5b194717 +Block 0027 [ 63]: 9518cd21fd0f176b +Block 0027 [ 64]: c373918eeaff9a99 +Block 0027 [ 65]: f9d5cb0527a0fab2 +Block 0027 [ 66]: 6b8052ee4e6c9eb8 +Block 0027 [ 67]: 4475452b265d8526 +Block 0027 [ 68]: 97ff0a402d283f29 +Block 0027 [ 69]: 47a28f8f668be30b +Block 0027 [ 70]: 0ce6135b75db2705 +Block 0027 [ 71]: f64a8a64b9a8b771 +Block 0027 [ 72]: e1e3bb7060a7fc4b +Block 0027 [ 73]: 02d019461560420d +Block 0027 [ 74]: 2a0c7f3203179483 +Block 0027 [ 75]: 1e53454b8473f274 +Block 0027 [ 76]: b82e79d9ee2fb12c +Block 0027 [ 77]: bf5bb18121a39453 +Block 0027 [ 78]: 13db251407e143e9 +Block 0027 [ 79]: a14c8eeac312f066 +Block 0027 [ 80]: bda30209efbfd004 +Block 0027 [ 81]: a816c337d880067b +Block 0027 [ 82]: 1514d0b15f85f6c5 +Block 0027 [ 83]: 14cfce4e0208bfa9 +Block 0027 [ 84]: 3f51407c083bdf83 +Block 0027 [ 85]: a8f28065fc004cc2 +Block 0027 [ 86]: f568afd0750735d8 +Block 0027 [ 87]: 4ac604a9699fbf25 +Block 0027 [ 88]: 34bb3001275762df +Block 0027 [ 89]: d82c054cbfec3252 +Block 0027 [ 90]: efb756acf812c5af +Block 0027 [ 91]: 5e0c11a707b379c8 +Block 0027 [ 92]: 0c0b52a5aa880fdb +Block 0027 [ 93]: 23895fe21b252e23 +Block 0027 [ 94]: 0e09635640fbadc0 +Block 0027 [ 95]: 39254b4e838b2f32 +Block 0027 [ 96]: ef5aaa0ecfbcbff9 +Block 0027 [ 97]: bb973544611c61b6 +Block 0027 [ 98]: 092b871664df6963 +Block 0027 [ 99]: 9f53a82922c82954 +Block 0027 [100]: dd6b16d4e8a4cc08 +Block 0027 [101]: 729f3afc047e52fa +Block 0027 [102]: bf5afa90e0abcb45 +Block 0027 [103]: d08500e0472967d1 +Block 0027 [104]: 8a01c778549f1d5b +Block 0027 [105]: 508e2cae29cbd162 +Block 0027 [106]: f8aadda50119c6dd +Block 0027 [107]: 6471e9aacb4d3110 +Block 0027 [108]: 587e2be246825736 +Block 0027 [109]: 1c4870ef364e8310 +Block 0027 [110]: 38ff3234b1eab64f +Block 0027 [111]: 4777693323256caa +Block 0027 [112]: 546824a3717104ef +Block 0027 [113]: 7063337898d609ef +Block 0027 [114]: c47e1708358f5032 +Block 0027 [115]: 85a4009bc5ffacc4 +Block 0027 [116]: 6512c7fe4585fe84 +Block 0027 [117]: 64f96860f4ba19d9 +Block 0027 [118]: eea974193a470d0e +Block 0027 [119]: 4123eac778690e31 +Block 0027 [120]: 9e8db8ec03ba056e +Block 0027 [121]: 8d1c8ab5487d9c9e +Block 0027 [122]: 27bc44f8b6608e52 +Block 0027 [123]: c5bd310b76c5194b +Block 0027 [124]: 2dae5cc9b0c327ef +Block 0027 [125]: cd0b20120f305504 +Block 0027 [126]: da0438041b4d5fa6 +Block 0027 [127]: 2ba18b31e43eade9 +Block 0028 [ 0]: ad8685e10cf2f919 +Block 0028 [ 1]: f6d22e193cac9b5f +Block 0028 [ 2]: caf5f2aabad6ad7b +Block 0028 [ 3]: ff5f32793e153b97 +Block 0028 [ 4]: c874a053b7eb1054 +Block 0028 [ 5]: 017ead4ebd2919e1 +Block 0028 [ 6]: 16b3b42213fe9b27 +Block 0028 [ 7]: 51c42934f453d785 +Block 0028 [ 8]: 8a39cfedde85b7fd +Block 0028 [ 9]: 80c9b2edb6cfa758 +Block 0028 [ 10]: 9afbbdc13ebb7c56 +Block 0028 [ 11]: 757e8f7715fb1aec +Block 0028 [ 12]: 4819c7e370720a42 +Block 0028 [ 13]: 6d76add26824ec7c +Block 0028 [ 14]: 61369c6d5ca30058 +Block 0028 [ 15]: 6a45b512fcefd574 +Block 0028 [ 16]: 4b18609149cefbb1 +Block 0028 [ 17]: b4f97ebade05e5d3 +Block 0028 [ 18]: 7daa2261afde9c2f +Block 0028 [ 19]: 66a98710a8c996b3 +Block 0028 [ 20]: 775ec612f0bac175 +Block 0028 [ 21]: 4bec6cc007f93196 +Block 0028 [ 22]: 6b5f0ba5117c13f1 +Block 0028 [ 23]: 3c8c904aea6eb348 +Block 0028 [ 24]: 77d851f25de2106e +Block 0028 [ 25]: 5bc8c342588b6280 +Block 0028 [ 26]: 3b84b6c6c38f1d93 +Block 0028 [ 27]: 3c8d8be0fe63e3a2 +Block 0028 [ 28]: 8e522662eab779fd +Block 0028 [ 29]: 0ecc0852e256f091 +Block 0028 [ 30]: be8f1bc3d5c71d67 +Block 0028 [ 31]: aed364e39a0f9f78 +Block 0028 [ 32]: e9e3a26f011cc0ca +Block 0028 [ 33]: afdca7a6ed0dd0ce +Block 0028 [ 34]: 05e9611dbb492b0c +Block 0028 [ 35]: b2d474ae67fcf6cc +Block 0028 [ 36]: cca9ff415d063e5f +Block 0028 [ 37]: ad9c2063ab1dcfbe +Block 0028 [ 38]: 4a9b800d68b88e2b +Block 0028 [ 39]: cbc3811f6957142f +Block 0028 [ 40]: 4d0503c9d66615c1 +Block 0028 [ 41]: ce3260f867eb4c95 +Block 0028 [ 42]: d1e76a7573c84e69 +Block 0028 [ 43]: c2c0cd96186c1781 +Block 0028 [ 44]: 9f36ee52a4329b7a +Block 0028 [ 45]: 87577edce1de66e6 +Block 0028 [ 46]: 816f80f6b2061edf +Block 0028 [ 47]: 17f9254bbdb5ac9e +Block 0028 [ 48]: e40ba54a1dc58fb0 +Block 0028 [ 49]: c3c1eb8de29e7f18 +Block 0028 [ 50]: 354e33ca9c7dc248 +Block 0028 [ 51]: f9641c60a1a69d30 +Block 0028 [ 52]: 9cbb5f6e87f8c5fd +Block 0028 [ 53]: 64d73e9d34cf28c1 +Block 0028 [ 54]: d242fc42d7f2ffdd +Block 0028 [ 55]: f79e36c08fa89318 +Block 0028 [ 56]: 49e82aaed9ec936f +Block 0028 [ 57]: 1240ee732e47d6a3 +Block 0028 [ 58]: facae1f5c6ac05f4 +Block 0028 [ 59]: 166a45523aeb1bfc +Block 0028 [ 60]: b30a305b36f190f3 +Block 0028 [ 61]: 7d2a4d7e5d29121d +Block 0028 [ 62]: 968f49abe714a1b2 +Block 0028 [ 63]: 1cc6c2145467657a +Block 0028 [ 64]: cc01c5f6fd8a42ff +Block 0028 [ 65]: 024febbd2427e866 +Block 0028 [ 66]: 60a9cee8fce0c2d2 +Block 0028 [ 67]: e1fceead57c03d4e +Block 0028 [ 68]: 726d7063bfa06784 +Block 0028 [ 69]: f688bd3a4835db4e +Block 0028 [ 70]: ddb6cbdf3bc1bb02 +Block 0028 [ 71]: 6fa7b201ec1bc4ca +Block 0028 [ 72]: 95cf4dc66e7625e1 +Block 0028 [ 73]: 6ed3c8efe613bd10 +Block 0028 [ 74]: 757e4772cea3852e +Block 0028 [ 75]: ec993d1bf6628c4e +Block 0028 [ 76]: aafa342b0fca8218 +Block 0028 [ 77]: 3874afd94e642562 +Block 0028 [ 78]: cba5970115ce5176 +Block 0028 [ 79]: a7b71cdd3ad1acb7 +Block 0028 [ 80]: 62333c9468ca0305 +Block 0028 [ 81]: f1ef305c21e55009 +Block 0028 [ 82]: 718435bd796146f8 +Block 0028 [ 83]: 622ccb59f1a22063 +Block 0028 [ 84]: 70f09c47e1a6037c +Block 0028 [ 85]: 63f46f14080976fd +Block 0028 [ 86]: 634f6d468361e03d +Block 0028 [ 87]: a46eb367a206683f +Block 0028 [ 88]: e70c1678cdf68f8e +Block 0028 [ 89]: cbfb3a46a4d51de7 +Block 0028 [ 90]: d9ee4028cebda472 +Block 0028 [ 91]: be5a5e7eb14f4e97 +Block 0028 [ 92]: 54980c3d0e11d17e +Block 0028 [ 93]: 650d4b43e8c1ea7c +Block 0028 [ 94]: 2b416705ae191d8b +Block 0028 [ 95]: 3eaffbb3c482a960 +Block 0028 [ 96]: bd0c8d5322ccc92b +Block 0028 [ 97]: 8fbb7f24539b0a83 +Block 0028 [ 98]: a556eaba9a3ea820 +Block 0028 [ 99]: 7a17a82dccc42eff +Block 0028 [100]: 4ce767729f962f45 +Block 0028 [101]: 2cb0ef025528422e +Block 0028 [102]: f2bd0ef295a5e7ac +Block 0028 [103]: 0c1c521fe8e6e437 +Block 0028 [104]: d89928a6b49ac759 +Block 0028 [105]: 54be46737f4e6f23 +Block 0028 [106]: 60bce70bb0d241d9 +Block 0028 [107]: 54d68c8a0ae774bd +Block 0028 [108]: f0a53cfa33bac937 +Block 0028 [109]: 60a10ff7da90dd83 +Block 0028 [110]: 6853b2706aadea1a +Block 0028 [111]: 24f9ce2b7bc8be46 +Block 0028 [112]: 6c0fe4b51a2e19cf +Block 0028 [113]: 5a982a426db92263 +Block 0028 [114]: 482d0dd31690892b +Block 0028 [115]: 8efdc4d5017429be +Block 0028 [116]: f575bc4565d51dd5 +Block 0028 [117]: 0ea5dd071321eaf6 +Block 0028 [118]: 52fbf8d427e76b99 +Block 0028 [119]: 46b3e05be5e398e8 +Block 0028 [120]: 3ddf2eb3c2b8e700 +Block 0028 [121]: bc78f822a065e9f3 +Block 0028 [122]: bdf8d5b4c5a8ba2d +Block 0028 [123]: f9c2b061b26bd2b7 +Block 0028 [124]: 33fe73f04f25bab5 +Block 0028 [125]: 62e764f93e73da37 +Block 0028 [126]: fa48fb80cf7a027a +Block 0028 [127]: 2fe93dab8fc62031 +Block 0029 [ 0]: 1c25114d080054b2 +Block 0029 [ 1]: 3049978dd3910faa +Block 0029 [ 2]: 630665bb66071a71 +Block 0029 [ 3]: 615f93e0080ad64a +Block 0029 [ 4]: 2e0e1c1bff1818bb +Block 0029 [ 5]: e71abf025fe71ad9 +Block 0029 [ 6]: 8083e314d46d24cb +Block 0029 [ 7]: ef0ec0198e11c2d6 +Block 0029 [ 8]: 9c25fd2cca5a3433 +Block 0029 [ 9]: 17d6327676bc3cbd +Block 0029 [ 10]: 083ba01aa922c0b9 +Block 0029 [ 11]: fc7476498b286d72 +Block 0029 [ 12]: 45ef0a52cb9120c0 +Block 0029 [ 13]: bc92315cd1ad1289 +Block 0029 [ 14]: 8adbd6b2d9def208 +Block 0029 [ 15]: ef7f1d7f6b273fdd +Block 0029 [ 16]: e1a66a8a177b0e92 +Block 0029 [ 17]: 7f0c17759a6a2c81 +Block 0029 [ 18]: 74f038a1222ade0b +Block 0029 [ 19]: e6b639a3ee39c877 +Block 0029 [ 20]: 8e8271212187b0ed +Block 0029 [ 21]: d1119b8a538012b7 +Block 0029 [ 22]: 9684a1db67815f03 +Block 0029 [ 23]: 92f13cbbc4511e8e +Block 0029 [ 24]: 04402e8baa138996 +Block 0029 [ 25]: 1421773017b7fcd0 +Block 0029 [ 26]: 425e4a2efb095890 +Block 0029 [ 27]: 615c4f54d6c05360 +Block 0029 [ 28]: 3cc3440506895656 +Block 0029 [ 29]: fbf3191e5e1dec36 +Block 0029 [ 30]: 00924a5c517f3ba5 +Block 0029 [ 31]: 641949bc41558437 +Block 0029 [ 32]: 95851f54663602d5 +Block 0029 [ 33]: 13518907e57abcab +Block 0029 [ 34]: 10df5be39581451d +Block 0029 [ 35]: 8c26dfc57214aa1f +Block 0029 [ 36]: 440d0670541231b7 +Block 0029 [ 37]: 22adc451023f7135 +Block 0029 [ 38]: bf90ad6b7d57a9d8 +Block 0029 [ 39]: 65f314a76571d0e6 +Block 0029 [ 40]: 4521c4fe7648e0e5 +Block 0029 [ 41]: a7819acc24b48997 +Block 0029 [ 42]: 9cbe988f344202aa +Block 0029 [ 43]: a5d8ca9a782a8d01 +Block 0029 [ 44]: 402a6cbbab4fbaac +Block 0029 [ 45]: bdcb98d56cf4b174 +Block 0029 [ 46]: 0fb55ee8828984d7 +Block 0029 [ 47]: cba941a9289119f2 +Block 0029 [ 48]: 406e10fe6482ae08 +Block 0029 [ 49]: 2ddf615535d61c97 +Block 0029 [ 50]: 1169c7db459d36b5 +Block 0029 [ 51]: 7c69e32963774bc5 +Block 0029 [ 52]: bab51bdf732a22a9 +Block 0029 [ 53]: 72338e75da6941d7 +Block 0029 [ 54]: 05cdf8d4d23c1510 +Block 0029 [ 55]: 2404f79400e9fa76 +Block 0029 [ 56]: 847854111a5076f3 +Block 0029 [ 57]: e28e0bbd9ac7c69e +Block 0029 [ 58]: f3fd0ca625676710 +Block 0029 [ 59]: 002d56307624a3de +Block 0029 [ 60]: 133b4d50c98238bc +Block 0029 [ 61]: 3db2517e7c12314a +Block 0029 [ 62]: 2887c63233a5c95c +Block 0029 [ 63]: 5b3df7053a5627f1 +Block 0029 [ 64]: f2373bec9848cf4b +Block 0029 [ 65]: 4f588754eec3c136 +Block 0029 [ 66]: 9b21f67a882b1990 +Block 0029 [ 67]: 243398980ba0d418 +Block 0029 [ 68]: b8a6edd946336b02 +Block 0029 [ 69]: 972f614eaf755f5d +Block 0029 [ 70]: 95074346cac8ed2b +Block 0029 [ 71]: 3ac12cf785f77d86 +Block 0029 [ 72]: 60f68806dd076b17 +Block 0029 [ 73]: d17fd5032a3d6b02 +Block 0029 [ 74]: 814f967198fec4c8 +Block 0029 [ 75]: 83f7d4dadafc179b +Block 0029 [ 76]: e709c02efada24c5 +Block 0029 [ 77]: 0d0580392c94ef2b +Block 0029 [ 78]: 046f19ac94b708f0 +Block 0029 [ 79]: f72fd5548fe8734f +Block 0029 [ 80]: cf00ecb33d557287 +Block 0029 [ 81]: e92d7ff78dade0f8 +Block 0029 [ 82]: 40598f10781e56ff +Block 0029 [ 83]: 040feadfeed71c71 +Block 0029 [ 84]: 1063149856339077 +Block 0029 [ 85]: 4aa74045e43ea7e2 +Block 0029 [ 86]: 26bc42c15328824a +Block 0029 [ 87]: 30a9638eaf11ce13 +Block 0029 [ 88]: 2dab95d3873af38f +Block 0029 [ 89]: 1118fe8e5f9278f5 +Block 0029 [ 90]: 16a7a469defe11a0 +Block 0029 [ 91]: db2c2013d8e6ea43 +Block 0029 [ 92]: 7b4773221d047734 +Block 0029 [ 93]: 4a1983262693af37 +Block 0029 [ 94]: f06ee2140af0a9f9 +Block 0029 [ 95]: 850d8f5b7be81399 +Block 0029 [ 96]: 1a32294f6575ad23 +Block 0029 [ 97]: fe3be63e5a2e6017 +Block 0029 [ 98]: 62805a7392fd4ffb +Block 0029 [ 99]: 1b33f67dec4b3903 +Block 0029 [100]: 9984dc27e9ad088f +Block 0029 [101]: 812c94fe8957095c +Block 0029 [102]: cc8fb61d7c16933a +Block 0029 [103]: 85f5d2ab0045cefd +Block 0029 [104]: 1503d44775433d09 +Block 0029 [105]: 652bfd106009a78e +Block 0029 [106]: e24f695c93fd5286 +Block 0029 [107]: 52404a1998c8ecff +Block 0029 [108]: 7e6ea513c1f5d6da +Block 0029 [109]: eb3a8171f4c3792f +Block 0029 [110]: e07da16a2319a335 +Block 0029 [111]: 381983c2feec9e07 +Block 0029 [112]: 714b1e5e148d6efb +Block 0029 [113]: e8058f7258172de5 +Block 0029 [114]: ca88c08a5a4b3cd1 +Block 0029 [115]: a7964146721530a4 +Block 0029 [116]: ebda1b93e6508268 +Block 0029 [117]: 1db938a8c1b0fb0d +Block 0029 [118]: 5fc6ea1a90e9039f +Block 0029 [119]: 460363f3dfbc6922 +Block 0029 [120]: 3c47febd956a90d4 +Block 0029 [121]: 5bf8e6cf0e64a21f +Block 0029 [122]: 1f453952acab6593 +Block 0029 [123]: 223e2d93bb88d64e +Block 0029 [124]: b444bb7bffbf06a9 +Block 0029 [125]: 6a38ebfc13ea2972 +Block 0029 [126]: e2eef6c6de25759d +Block 0029 [127]: 9768792450c49524 +Block 0030 [ 0]: 7ba3f579ddca2190 +Block 0030 [ 1]: 22d29b3c61068d60 +Block 0030 [ 2]: 87e20cd13655d9e0 +Block 0030 [ 3]: 504338f38abb9345 +Block 0030 [ 4]: 203c4012aeca1437 +Block 0030 [ 5]: 7329325b4838e0af +Block 0030 [ 6]: bb401b9ee25b488f +Block 0030 [ 7]: b1ef9f8114b85fa7 +Block 0030 [ 8]: 1040cc21ec703f3a +Block 0030 [ 9]: 4024e59925036861 +Block 0030 [ 10]: 4f81c9b2909a55da +Block 0030 [ 11]: a2cfa25e0e056fee +Block 0030 [ 12]: 83597c4710a6133e +Block 0030 [ 13]: 10b0b67df1881d63 +Block 0030 [ 14]: 32537c2d1bf8dbf4 +Block 0030 [ 15]: 2309f58471c388ef +Block 0030 [ 16]: 4a92e3537e0f7ec3 +Block 0030 [ 17]: 7d7bcdb20434f4b3 +Block 0030 [ 18]: 41ce82991845a620 +Block 0030 [ 19]: 941e16e476dd2690 +Block 0030 [ 20]: 6722b57a04e8a452 +Block 0030 [ 21]: b362caa175d37ccf +Block 0030 [ 22]: e6da12fe73f8a7a4 +Block 0030 [ 23]: ab91792510f58cc9 +Block 0030 [ 24]: 2f276058b3ca8b9e +Block 0030 [ 25]: d03fcd3844ead151 +Block 0030 [ 26]: 2bbbcbb509696ccc +Block 0030 [ 27]: a3c4cbea53e221b4 +Block 0030 [ 28]: 0ca8c51c32abbd85 +Block 0030 [ 29]: 12cecfde86337188 +Block 0030 [ 30]: 9115c3760647e3e0 +Block 0030 [ 31]: f0872dd56649161c +Block 0030 [ 32]: 8323778bd67875eb +Block 0030 [ 33]: 20a38125a1456cdf +Block 0030 [ 34]: c7132e10f95659b5 +Block 0030 [ 35]: 43550cbfaf96e971 +Block 0030 [ 36]: 906c6e43621fb3ab +Block 0030 [ 37]: a96773c8c2bf7bb8 +Block 0030 [ 38]: 77d9183329e7d8db +Block 0030 [ 39]: 976779ce3d284ef1 +Block 0030 [ 40]: fd3d3938f738f649 +Block 0030 [ 41]: 604939458597a8f2 +Block 0030 [ 42]: c16d61d770651c85 +Block 0030 [ 43]: 1788013376bf8022 +Block 0030 [ 44]: 22a75751a1a17395 +Block 0030 [ 45]: 7829de955a6b8108 +Block 0030 [ 46]: 0022a57f1fb5f1a2 +Block 0030 [ 47]: 41994f78614e71f8 +Block 0030 [ 48]: f90c7409006cdef3 +Block 0030 [ 49]: 6a5cfff126910613 +Block 0030 [ 50]: 71c80cab4e5b7d18 +Block 0030 [ 51]: fa8aa1522ce8b68d +Block 0030 [ 52]: 820294d934fd6ced +Block 0030 [ 53]: d5e0cc4de5354cd7 +Block 0030 [ 54]: fcceb29cda3fbb78 +Block 0030 [ 55]: b594083617ab7aa0 +Block 0030 [ 56]: e325471e296b5e13 +Block 0030 [ 57]: f5a3bfa29afd89d9 +Block 0030 [ 58]: 8365b026b7ae8265 +Block 0030 [ 59]: 06c4fdf81946a2d5 +Block 0030 [ 60]: 5c48237336016b39 +Block 0030 [ 61]: 09530a283cfd6aab +Block 0030 [ 62]: cc6a6548585a674c +Block 0030 [ 63]: 9ff25b0d09e3e588 +Block 0030 [ 64]: 74b16415b3a2942c +Block 0030 [ 65]: a2e929656474b2cc +Block 0030 [ 66]: f4c527bff2e0e132 +Block 0030 [ 67]: ed1f016e22c6bd7f +Block 0030 [ 68]: 6eabcdb711291cbf +Block 0030 [ 69]: 1afcd226b75700c6 +Block 0030 [ 70]: 38c0c65b11670ab6 +Block 0030 [ 71]: d8ce9e6ece91a980 +Block 0030 [ 72]: 798152643540f8d7 +Block 0030 [ 73]: c6b670b1959efccc +Block 0030 [ 74]: b1e22df81dd3fedf +Block 0030 [ 75]: 9e1f11ba0e058be6 +Block 0030 [ 76]: 07bd69d09794811a +Block 0030 [ 77]: 2ec47cbcbddeaeaf +Block 0030 [ 78]: 2df03bc4ba861b66 +Block 0030 [ 79]: ba773ed001496798 +Block 0030 [ 80]: 569b7778aff8670b +Block 0030 [ 81]: f46700e1c69e0435 +Block 0030 [ 82]: 5d74c9c45ba0de59 +Block 0030 [ 83]: 663e4cc2d268901a +Block 0030 [ 84]: 00ed57ccb43adc65 +Block 0030 [ 85]: f1028091a25d523a +Block 0030 [ 86]: b58ed0b0be701cb5 +Block 0030 [ 87]: 7ec399c9d0e0541e +Block 0030 [ 88]: a19d52d03c224f50 +Block 0030 [ 89]: aec2c87ef572e728 +Block 0030 [ 90]: 86cb9de77d58a1ed +Block 0030 [ 91]: 8916cdedc2f849a7 +Block 0030 [ 92]: 923cd22741ba9877 +Block 0030 [ 93]: bad3241c62d70131 +Block 0030 [ 94]: b8c8a46b492cd0cf +Block 0030 [ 95]: 583734e81f9b799f +Block 0030 [ 96]: 99f4c7482bd62b5f +Block 0030 [ 97]: 662934d9c8f13647 +Block 0030 [ 98]: ddde62fd5a66320a +Block 0030 [ 99]: 36b6b76c7659e86a +Block 0030 [100]: a8a030b06bf008c3 +Block 0030 [101]: 4091921778cf0f24 +Block 0030 [102]: f81c778387bdbe2a +Block 0030 [103]: 2d6fda29822ccf34 +Block 0030 [104]: 248cd0848efa0c98 +Block 0030 [105]: 2c95378b298a51b2 +Block 0030 [106]: beef562930250524 +Block 0030 [107]: 297b07c36a410f16 +Block 0030 [108]: 81610babf47ce7c5 +Block 0030 [109]: 1ef0a62159d4fe68 +Block 0030 [110]: 123b278bfdc3cd4c +Block 0030 [111]: cb138a7cf3457b3b +Block 0030 [112]: 824a513598683458 +Block 0030 [113]: b95ad1a909d09977 +Block 0030 [114]: f440f03dd9315c6d +Block 0030 [115]: 38f7b95bb7a655f9 +Block 0030 [116]: 1aa8af7867cf8c4a +Block 0030 [117]: efbbb9c8ec4864fc +Block 0030 [118]: 2a65eab6449268f7 +Block 0030 [119]: 78445cb93766fe81 +Block 0030 [120]: 91e91b63495526ae +Block 0030 [121]: 58472c829e44b0ce +Block 0030 [122]: d6979f417e37ce01 +Block 0030 [123]: 50e1ee7e7bbcadc6 +Block 0030 [124]: ac9e9063117ce00a +Block 0030 [125]: 724bbcb180df74f7 +Block 0030 [126]: 81731221098e1b21 +Block 0030 [127]: c8a2a98bbc450bcd +Block 0031 [ 0]: 045d89b2fef33cae +Block 0031 [ 1]: 4e612fc089c32623 +Block 0031 [ 2]: 619e71d9bb28fd39 +Block 0031 [ 3]: 27c3e53832cf0a19 +Block 0031 [ 4]: 64bb6a5d7ec18d9d +Block 0031 [ 5]: 18ed96ac0b1c3404 +Block 0031 [ 6]: 6c2d9ab21881ebd2 +Block 0031 [ 7]: bdfced95a3534f2e +Block 0031 [ 8]: 7b94334f82a87289 +Block 0031 [ 9]: 99ce29bbd4828ee3 +Block 0031 [ 10]: 1382201a56c62bd1 +Block 0031 [ 11]: 4c3aecadfffa1945 +Block 0031 [ 12]: 5d02d36270de91d2 +Block 0031 [ 13]: 194281f0b57ab6ca +Block 0031 [ 14]: 17990c3c8c43ea86 +Block 0031 [ 15]: c2613028a91da2bc +Block 0031 [ 16]: dc3c6a6ec19da0b0 +Block 0031 [ 17]: 36e4423274b42bf8 +Block 0031 [ 18]: ad8b2b684edeb541 +Block 0031 [ 19]: 08eb08aad913784e +Block 0031 [ 20]: 1cc66b7889948507 +Block 0031 [ 21]: 947d8151367f648b +Block 0031 [ 22]: 593aca6896c0d97f +Block 0031 [ 23]: d4302083d98bc450 +Block 0031 [ 24]: 5a8574574458868c +Block 0031 [ 25]: 1358e4ef5db7ba7d +Block 0031 [ 26]: 17069e66d9b3d800 +Block 0031 [ 27]: 576bcf035773c6b1 +Block 0031 [ 28]: 538d9e73892dd9f7 +Block 0031 [ 29]: 6674a874367c772c +Block 0031 [ 30]: b13ea5a6e9df9ec6 +Block 0031 [ 31]: dcad1575df673343 +Block 0031 [ 32]: 050f04429eb1712b +Block 0031 [ 33]: 264e02bb067c8b4a +Block 0031 [ 34]: fed0d6d4f132aff4 +Block 0031 [ 35]: de49da3e89765b84 +Block 0031 [ 36]: f310a259437af7b7 +Block 0031 [ 37]: 96cba3209fdb91a4 +Block 0031 [ 38]: e1713be8fe273a54 +Block 0031 [ 39]: 72aa9606b5970df7 +Block 0031 [ 40]: 2952b1adbf775bb1 +Block 0031 [ 41]: 16bbf6b77d65e6ec +Block 0031 [ 42]: 8320bcdca2785491 +Block 0031 [ 43]: 37d95f58b90bab98 +Block 0031 [ 44]: 328bfb2bbff04f24 +Block 0031 [ 45]: 60f95e2c47abf3c9 +Block 0031 [ 46]: 8114ebf4c06c1fd5 +Block 0031 [ 47]: 987744ea5dd44993 +Block 0031 [ 48]: 1a52f5fbf382b4a1 +Block 0031 [ 49]: d3da784814b828d0 +Block 0031 [ 50]: 52160ed0d7d97b05 +Block 0031 [ 51]: c2f4933259e6811f +Block 0031 [ 52]: 5185c163da681943 +Block 0031 [ 53]: 8b23845e2e3882da +Block 0031 [ 54]: 80d9fac6cb2145c7 +Block 0031 [ 55]: bd41dce9bf49293d +Block 0031 [ 56]: f9c2b9b968add98d +Block 0031 [ 57]: adc8c1c37a5b3d0e +Block 0031 [ 58]: 44425cb926b1bff6 +Block 0031 [ 59]: d1b13e628afc2ebf +Block 0031 [ 60]: 55eb2ae5a985d74f +Block 0031 [ 61]: 766c24a1bf79b78a +Block 0031 [ 62]: d51884b12c88cb82 +Block 0031 [ 63]: 5d0e445e6570dce8 +Block 0031 [ 64]: 4e21b48646f9a771 +Block 0031 [ 65]: 0bd4d6db21e72904 +Block 0031 [ 66]: 4da30953463891b9 +Block 0031 [ 67]: 0b0814f7ff59b523 +Block 0031 [ 68]: d35ade128a30c877 +Block 0031 [ 69]: 420b85f8cc8377d5 +Block 0031 [ 70]: 44daac39899181fc +Block 0031 [ 71]: a3878fc959ebeccb +Block 0031 [ 72]: 3bc2ccee5ae74f04 +Block 0031 [ 73]: 825aee9eed476634 +Block 0031 [ 74]: e59cf558fd5436ef +Block 0031 [ 75]: de17bb16683b18d5 +Block 0031 [ 76]: 97332d9e6a8a9ecf +Block 0031 [ 77]: f08e0091c43ee3d8 +Block 0031 [ 78]: 306922dc76b5ae0d +Block 0031 [ 79]: feff7c3426166bce +Block 0031 [ 80]: 777c10e8ddddde60 +Block 0031 [ 81]: 295055e9b9b5424f +Block 0031 [ 82]: cec9b5204d1939aa +Block 0031 [ 83]: c8bef3c029ca1f65 +Block 0031 [ 84]: 821259a846615ffe +Block 0031 [ 85]: 6d7ee283234891a8 +Block 0031 [ 86]: ecd0d3ed18aac687 +Block 0031 [ 87]: b996bb7bd69d65fd +Block 0031 [ 88]: 308a1a6df3ac818f +Block 0031 [ 89]: 8ef7e58d209370ee +Block 0031 [ 90]: 4fbdbaed220cc53c +Block 0031 [ 91]: fbd95a395f35c150 +Block 0031 [ 92]: e5dbdc7151568326 +Block 0031 [ 93]: bfeb05033d338aab +Block 0031 [ 94]: 6b46732eb7a71a53 +Block 0031 [ 95]: 9a92d880da129da1 +Block 0031 [ 96]: 0a37604a4211898c +Block 0031 [ 97]: f428a8da533063bb +Block 0031 [ 98]: cb0045208c1e3454 +Block 0031 [ 99]: 0f4d726112cc9b2f +Block 0031 [100]: 11f1e6024bcd910d +Block 0031 [101]: f7318f0bd5bee90d +Block 0031 [102]: a297c92f45a29d29 +Block 0031 [103]: 059bc108e5efce3a +Block 0031 [104]: 59e3a1e984eb056d +Block 0031 [105]: 46b15c158c83b579 +Block 0031 [106]: 806e5e022db2e538 +Block 0031 [107]: bd279d5e3ede5f38 +Block 0031 [108]: d2b1a4167a1a1137 +Block 0031 [109]: 2ea81a04f1325445 +Block 0031 [110]: e25e685daabbfbac +Block 0031 [111]: 2401ac591482c6e7 +Block 0031 [112]: 402eb1307a787cc2 +Block 0031 [113]: 57bd18111412a735 +Block 0031 [114]: 5725174a85050656 +Block 0031 [115]: fd12978efd937b2b +Block 0031 [116]: 2364d2d3f85cf135 +Block 0031 [117]: 5215c25a1af83d5f +Block 0031 [118]: cb2275ad0647eede +Block 0031 [119]: fef22902860e8f90 +Block 0031 [120]: 9e44297bb1235d52 +Block 0031 [121]: ec31c49dc6741f04 +Block 0031 [122]: 649cb1eb5bb62de1 +Block 0031 [123]: 4df8c0ca005c51c3 +Block 0031 [124]: 68cf72fccc7112b9 +Block 0031 [125]: 91e8c6f8bb0ad70d +Block 0031 [126]: 4f59c8bd65cbb765 +Block 0031 [127]: 71e436f035f30ed0 +Tag: c8 14 d9 d1 dc 7f 37 aa 13 f0 d7 7f 24 94 bd a1 c8 de 6b 01 6d d3 88 d2 99 52 a4 c4 67 2b 6c e8 diff --git a/deps/phc-winner-argon2-20190702/kats/argon2i.shasum b/deps/phc-winner-argon2-20190702/kats/argon2i.shasum new file mode 100644 index 000000000..eda8d2e3b --- /dev/null +++ b/deps/phc-winner-argon2-20190702/kats/argon2i.shasum @@ -0,0 +1 @@ +40a3aeafb092d10cf457a8ee0139c114c911ecf97bd5accf5a99c7ddd6917061 argon2i diff --git a/deps/phc-winner-argon2-20190702/kats/argon2i_v16 b/deps/phc-winner-argon2-20190702/kats/argon2i_v16 new file mode 100644 index 000000000..173ec023d --- /dev/null +++ b/deps/phc-winner-argon2-20190702/kats/argon2i_v16 @@ -0,0 +1,12304 @@ +======================================= +Argon2i version number 16 +======================================= +Memory: 32 KiB, Iterations: 3, Parallelism: 4 lanes, Tag length: 32 bytes +Password[32]: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +Salt[16]: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +Secret[8]: 03 03 03 03 03 03 03 03 +Associated data[12]: 04 04 04 04 04 04 04 04 04 04 04 04 +Pre-hashing digest: 1c dc ec c8 58 ca 1b 6d 45 c7 3c 78 d0 00 76 c5 ec fc 5e df 14 45 b4 43 73 97 b1 b8 20 83 ff bf e3 c9 1a a8 f5 06 67 ad 8f b9 d4 e7 52 df b3 85 34 71 9f ba d2 22 61 33 7b 2b 55 29 81 44 09 af + + After pass 0: +Block 0000 [ 0]: 6126d83b5f468363 +Block 0000 [ 1]: 9cec095773e5c7f8 +Block 0000 [ 2]: a84490b8594d238b +Block 0000 [ 3]: 86d7c7521b274d47 +Block 0000 [ 4]: 16aac5132c95105a +Block 0000 [ 5]: 54cf92650efc678a +Block 0000 [ 6]: e5760496d9207afb +Block 0000 [ 7]: 73607b15c2c78c86 +Block 0000 [ 8]: 68c80dce96859e75 +Block 0000 [ 9]: 0db622c99a22a2c5 +Block 0000 [ 10]: 086c753c14616114 +Block 0000 [ 11]: 1fd8377e636de79a +Block 0000 [ 12]: 43f36cb6dbd379be +Block 0000 [ 13]: f3341d9504df2bcb +Block 0000 [ 14]: 3879688fac8074c2 +Block 0000 [ 15]: 71f8cfcd8d86a5ed +Block 0000 [ 16]: 15292c0733f9f8f3 +Block 0000 [ 17]: bf220d19096cccf9 +Block 0000 [ 18]: 6864881c48351e87 +Block 0000 [ 19]: 3f7b64feac03bce2 +Block 0000 [ 20]: 2fa888497c07adf2 +Block 0000 [ 21]: c83602a08906d723 +Block 0000 [ 22]: ed1689618b780c75 +Block 0000 [ 23]: 767529d68b6e5521 +Block 0000 [ 24]: 17c3be6adc708cb5 +Block 0000 [ 25]: b95620c1d8a30c10 +Block 0000 [ 26]: 9f31bffc559b4ad4 +Block 0000 [ 27]: 7b6b7f96f53bb140 +Block 0000 [ 28]: 22a444f84cff8b57 +Block 0000 [ 29]: ebbafed985afb9e8 +Block 0000 [ 30]: ee14d542a4a02cdf +Block 0000 [ 31]: 5344c6fb9868f64a +Block 0000 [ 32]: 9a735a38656ad1ac +Block 0000 [ 33]: 2d312367c8ed15d4 +Block 0000 [ 34]: a27c4eed35237b88 +Block 0000 [ 35]: 9a2738107e55c09d +Block 0000 [ 36]: 6469b001f096721e +Block 0000 [ 37]: e0c1fcda0c416371 +Block 0000 [ 38]: 7d93d0d141fc441e +Block 0000 [ 39]: e16df9690e7dfab6 +Block 0000 [ 40]: bcd40d45bc5f29b7 +Block 0000 [ 41]: 04e28612ee435e2d +Block 0000 [ 42]: f0503ca50e2613e0 +Block 0000 [ 43]: 16aff99842004bff +Block 0000 [ 44]: db80c479037c7341 +Block 0000 [ 45]: 3c0f3c5fb9df5453 +Block 0000 [ 46]: 2925f5e03e0fc637 +Block 0000 [ 47]: c355a96ae6aafd32 +Block 0000 [ 48]: 9e1de5a5c025a425 +Block 0000 [ 49]: d2771ce35d37f4a3 +Block 0000 [ 50]: 09a3d1fe048dab61 +Block 0000 [ 51]: 5a7a53f847dddeab +Block 0000 [ 52]: 09b1981f68879719 +Block 0000 [ 53]: 859259a2c6f6ecf9 +Block 0000 [ 54]: 7f1ae20e3c6194bd +Block 0000 [ 55]: 4976b29d1b927454 +Block 0000 [ 56]: 193f7c26c9631d2e +Block 0000 [ 57]: b64561e3fdb2eab1 +Block 0000 [ 58]: c258b7f17c258b1e +Block 0000 [ 59]: eaff69021f31833d +Block 0000 [ 60]: 8122ce733bef6097 +Block 0000 [ 61]: 3a0dfe60c8e1c168 +Block 0000 [ 62]: 482c1026fb53178a +Block 0000 [ 63]: 152902c04dce5e68 +Block 0000 [ 64]: 51d2259aed46e79c +Block 0000 [ 65]: 2e2eba00224ef895 +Block 0000 [ 66]: a551c68118673401 +Block 0000 [ 67]: c5f8bc7582a504a6 +Block 0000 [ 68]: 016006bd31e9ab43 +Block 0000 [ 69]: 481174e08a737735 +Block 0000 [ 70]: 20729d08a9c3b628 +Block 0000 [ 71]: b591394c7087860d +Block 0000 [ 72]: ea18d459ccaad353 +Block 0000 [ 73]: e7194fa273999f61 +Block 0000 [ 74]: 87b0fe402d666f40 +Block 0000 [ 75]: 024173d9a832f146 +Block 0000 [ 76]: 5bc42a7e424b22dc +Block 0000 [ 77]: 0fc06bb16b038380 +Block 0000 [ 78]: 383dc71785510d0d +Block 0000 [ 79]: c9d4f74c814623a6 +Block 0000 [ 80]: 641fe35196d102a0 +Block 0000 [ 81]: 7be5646169de6e15 +Block 0000 [ 82]: 4b63bbbfee994ef4 +Block 0000 [ 83]: f4d00905bed63c10 +Block 0000 [ 84]: f504a390bd52851b +Block 0000 [ 85]: c7fb46861975facc +Block 0000 [ 86]: e0de393085b3266d +Block 0000 [ 87]: 2a02a46e04ae3fa4 +Block 0000 [ 88]: e3fafc272d96d1b4 +Block 0000 [ 89]: e8ac1b6b0bad54b2 +Block 0000 [ 90]: b7dd7d62d0032fb8 +Block 0000 [ 91]: c1234d0d3389d412 +Block 0000 [ 92]: dd7ddcd2ffd6e04f +Block 0000 [ 93]: f2d7f262ecae94d9 +Block 0000 [ 94]: 419b597a15d167b6 +Block 0000 [ 95]: c4f2c9379b9a3154 +Block 0000 [ 96]: 006161370212d3b7 +Block 0000 [ 97]: e16892fa7f773edd +Block 0000 [ 98]: 90580be4dd441d12 +Block 0000 [ 99]: 78aeffd87f012ac5 +Block 0000 [100]: 0fb81138826cbc2b +Block 0000 [101]: 64a426a5e1791e8d +Block 0000 [102]: 3c66e38936a602f3 +Block 0000 [103]: a89c993bb0499fe2 +Block 0000 [104]: e6cbc1df59d1885e +Block 0000 [105]: bf38ae6bb2d4769a +Block 0000 [106]: 37ca1944b603ee41 +Block 0000 [107]: 8ff503377e1072d4 +Block 0000 [108]: 922633b17f9ccaf4 +Block 0000 [109]: 56d31d1f20067b7c +Block 0000 [110]: 1b4d792e51d685c7 +Block 0000 [111]: 91a44b2a93de6b8c +Block 0000 [112]: b15d5c7ff3e9c59d +Block 0000 [113]: e9592fbe759d075c +Block 0000 [114]: 57a8176f7ce9f926 +Block 0000 [115]: fe4d2b861ed7d098 +Block 0000 [116]: 032053e827a76ae4 +Block 0000 [117]: e36be8b30b418994 +Block 0000 [118]: 5f98474597bc3bec +Block 0000 [119]: 5957eaee755491e2 +Block 0000 [120]: d9e0725e803c1c07 +Block 0000 [121]: 266075388fd82552 +Block 0000 [122]: 445a45e21df8f188 +Block 0000 [123]: 60a723ac7c2094a4 +Block 0000 [124]: fc1a2264395abc60 +Block 0000 [125]: aff3ef6f5e074ab4 +Block 0000 [126]: 14a0d19a17b1dee6 +Block 0000 [127]: 88aca67a1ba1eb77 +Block 0001 [ 0]: 92f6a137c0116c49 +Block 0001 [ 1]: e5d1db692d347116 +Block 0001 [ 2]: cbbc23afa412c0ea +Block 0001 [ 3]: 4608ae1fefbf6190 +Block 0001 [ 4]: b6c69c46fe10980d +Block 0001 [ 5]: 3e8dc5292577d451 +Block 0001 [ 6]: b2e5fd338710a60f +Block 0001 [ 7]: 9b15da0956e750e9 +Block 0001 [ 8]: 38e6b65004ae22b7 +Block 0001 [ 9]: bb6f0805d7e41838 +Block 0001 [ 10]: f30692ae7925cd6f +Block 0001 [ 11]: c3aaecfd3bc42cab +Block 0001 [ 12]: 40ae8704cbc43eb3 +Block 0001 [ 13]: 396b0210df3d5259 +Block 0001 [ 14]: b1c6d3ef23e17d05 +Block 0001 [ 15]: e28b54f6f76dc643 +Block 0001 [ 16]: 6d37b5b3d8d148dc +Block 0001 [ 17]: 488fd552a2adf0cd +Block 0001 [ 18]: 20c3ec97ff51a0f9 +Block 0001 [ 19]: 4afbc70841dcb9a1 +Block 0001 [ 20]: 749d23053fef9e27 +Block 0001 [ 21]: d34e0743ccb60326 +Block 0001 [ 22]: 4c7003c00f6301c7 +Block 0001 [ 23]: a0c64f1efef2bbc0 +Block 0001 [ 24]: 68598d652cd039ac +Block 0001 [ 25]: ec6ef77eb3f130c7 +Block 0001 [ 26]: 4192ac59c1334185 +Block 0001 [ 27]: 3ba7656e7c7a2f56 +Block 0001 [ 28]: 8e7dc7a60815d820 +Block 0001 [ 29]: 476dc8d7b7d42d66 +Block 0001 [ 30]: 540b485f1a99f74c +Block 0001 [ 31]: e716e1fb8dc69710 +Block 0001 [ 32]: 6e195ca6cb50f9f3 +Block 0001 [ 33]: 8f36a6ee0da6dca7 +Block 0001 [ 34]: 7b5db8356ef1eb93 +Block 0001 [ 35]: 91140488c13fefbc +Block 0001 [ 36]: 5b56e3a18aff3217 +Block 0001 [ 37]: 370fc9d02e5fe3f3 +Block 0001 [ 38]: 4481fb4fb2ebc19d +Block 0001 [ 39]: ee8fba7c535c1bc1 +Block 0001 [ 40]: 4bcf4833510f8629 +Block 0001 [ 41]: 8b227c4bf2b48a58 +Block 0001 [ 42]: 2af8ade6f3ba0841 +Block 0001 [ 43]: d0db6ac77a485870 +Block 0001 [ 44]: 916c69962dc6559d +Block 0001 [ 45]: f4885d9b8596d135 +Block 0001 [ 46]: 4f7ae3e6c229d186 +Block 0001 [ 47]: 9a4e75876ca9f1ec +Block 0001 [ 48]: aee24bbeaaeecc3f +Block 0001 [ 49]: cb219d5fdbeaab9e +Block 0001 [ 50]: 5261aaea4dc3b83e +Block 0001 [ 51]: b385b79bc7afff44 +Block 0001 [ 52]: 4af98335575f5e2a +Block 0001 [ 53]: bda4053fd315675b +Block 0001 [ 54]: 41060f2406a1d20d +Block 0001 [ 55]: eb2c51d83ebbd8f1 +Block 0001 [ 56]: 89b7f8f524822057 +Block 0001 [ 57]: fa8cedb05e2f7f20 +Block 0001 [ 58]: 1ad99636edf5754c +Block 0001 [ 59]: 9227b48f92263da8 +Block 0001 [ 60]: 8379858725ac5a34 +Block 0001 [ 61]: e9175a515bc33fed +Block 0001 [ 62]: 45c1af539ca1533b +Block 0001 [ 63]: a750b46c1b9e2e48 +Block 0001 [ 64]: aa7fca933b3bb05b +Block 0001 [ 65]: e56faae612e75484 +Block 0001 [ 66]: 06fda8818cd441c6 +Block 0001 [ 67]: 2490ab894da253cc +Block 0001 [ 68]: 9658b30c03beead8 +Block 0001 [ 69]: 4c69b5b64065b426 +Block 0001 [ 70]: 66b2511ab48f50d8 +Block 0001 [ 71]: d5ad57400ce97db8 +Block 0001 [ 72]: 34878dab0a6554cc +Block 0001 [ 73]: d944d1b92feb67e1 +Block 0001 [ 74]: 8ecdec9887dbfbed +Block 0001 [ 75]: af2bc080b6d34198 +Block 0001 [ 76]: caa1dce2e4974dc8 +Block 0001 [ 77]: efc0177fbaebba33 +Block 0001 [ 78]: 48246fde6f3bf50e +Block 0001 [ 79]: 14347c1e4c9ad74d +Block 0001 [ 80]: c209d794edacac4a +Block 0001 [ 81]: f31388a91f3bc4d9 +Block 0001 [ 82]: 181e34af2ef27582 +Block 0001 [ 83]: 5842b6cd751dc7d5 +Block 0001 [ 84]: c21d7a803651f895 +Block 0001 [ 85]: 856fccb97b344959 +Block 0001 [ 86]: 92434d14dd17508d +Block 0001 [ 87]: f4381d6cfc07a63a +Block 0001 [ 88]: f518d3ea8402c5d7 +Block 0001 [ 89]: fe0bf4b0c78ee477 +Block 0001 [ 90]: ae3d7206a0eebf82 +Block 0001 [ 91]: f3dc7d33c1e5a11b +Block 0001 [ 92]: 47f59e53ce1d5866 +Block 0001 [ 93]: 10d77a10fa0b7fe8 +Block 0001 [ 94]: 08c1156c8d5ad237 +Block 0001 [ 95]: 0bdb8b7d95fef340 +Block 0001 [ 96]: 6b6340b64b078628 +Block 0001 [ 97]: 74538397e38f3063 +Block 0001 [ 98]: 9763d327a10b018b +Block 0001 [ 99]: 8c1ec3f8b67ef707 +Block 0001 [100]: a65855fb53b3cf03 +Block 0001 [101]: 8cd6cbe80fdda8a6 +Block 0001 [102]: 528561ab03e6bea0 +Block 0001 [103]: f3291f99743d5774 +Block 0001 [104]: 1872782ff0e09f79 +Block 0001 [105]: 1de6a683d5ba8800 +Block 0001 [106]: 6852b94ec920fd37 +Block 0001 [107]: aa5fe8aecba3dbd7 +Block 0001 [108]: 9548dcfb3649984d +Block 0001 [109]: ed7bf1bb77ec6a8c +Block 0001 [110]: 00919c392cf70d5d +Block 0001 [111]: c3fa99c16a895fba +Block 0001 [112]: d4a2013dd8193b51 +Block 0001 [113]: 164c8364b08aa019 +Block 0001 [114]: 1c361bb6197c21e6 +Block 0001 [115]: 6c5c0b2f1d028964 +Block 0001 [116]: bdc640b0cf73be16 +Block 0001 [117]: 4c7c28018a0967a1 +Block 0001 [118]: fff1ce82132d02c7 +Block 0001 [119]: 201194ce949e91c1 +Block 0001 [120]: 37f825509d769cf0 +Block 0001 [121]: 92c8a6398dfb5420 +Block 0001 [122]: d421323258148fbf +Block 0001 [123]: 884d799cfb6f9608 +Block 0001 [124]: 357c4fa87d8ea9c1 +Block 0001 [125]: 7ca853f594a806e4 +Block 0001 [126]: b24be8ccb1fd4e00 +Block 0001 [127]: d67d8ab9d0149c41 +Block 0002 [ 0]: 7cb64797e59c2898 +Block 0002 [ 1]: c2c69f1df26fe4f7 +Block 0002 [ 2]: 860e26b28a7f38e7 +Block 0002 [ 3]: 03cfde69ef53362f +Block 0002 [ 4]: ca8ad628ddfe0175 +Block 0002 [ 5]: 3e75216893b8f594 +Block 0002 [ 6]: 5982c82ad8d4f0b0 +Block 0002 [ 7]: dd49775772e79838 +Block 0002 [ 8]: 381be5cb41b74429 +Block 0002 [ 9]: 10e5363f909f7a2b +Block 0002 [ 10]: 0db1fd3b51c83a01 +Block 0002 [ 11]: db09eb1946c6ffbe +Block 0002 [ 12]: 690cc31db135feca +Block 0002 [ 13]: 2064f8998646e505 +Block 0002 [ 14]: 365a864afe9f4fa9 +Block 0002 [ 15]: 04711b105f55045b +Block 0002 [ 16]: 74f81257464e4670 +Block 0002 [ 17]: 81aa2ec1cf089f9d +Block 0002 [ 18]: d78e413290a42017 +Block 0002 [ 19]: 0710017afb761109 +Block 0002 [ 20]: 28ab93bf1da6eaf6 +Block 0002 [ 21]: db42dbd893083632 +Block 0002 [ 22]: 0b613e82d208d081 +Block 0002 [ 23]: f86ba76e6769ab87 +Block 0002 [ 24]: 37a53ed14eb96885 +Block 0002 [ 25]: 7fddf209b7a7aae0 +Block 0002 [ 26]: 27ee9147537a1ffa +Block 0002 [ 27]: 0d87db4ccb03dbd7 +Block 0002 [ 28]: 543598bf8db7090d +Block 0002 [ 29]: 72b4336c52c01431 +Block 0002 [ 30]: 71d3af6cae675c15 +Block 0002 [ 31]: 65b57dfc7adb95de +Block 0002 [ 32]: ce8b82f6d8a790bd +Block 0002 [ 33]: f14bf7489f1cfdea +Block 0002 [ 34]: 9779478ba92b8635 +Block 0002 [ 35]: e3c5d4eea1d1b38f +Block 0002 [ 36]: f726715c4e7d4596 +Block 0002 [ 37]: 460eda3b2a00f89a +Block 0002 [ 38]: f43a475d55f514a2 +Block 0002 [ 39]: debcfd04de87ef41 +Block 0002 [ 40]: ccb3c6e561b4c5c1 +Block 0002 [ 41]: ebf2866ca4dafa31 +Block 0002 [ 42]: 91bdefb27e3e4e1b +Block 0002 [ 43]: 528f3555c38a4d53 +Block 0002 [ 44]: 2497400fbe5afe51 +Block 0002 [ 45]: ff4b8c72c6e53f7f +Block 0002 [ 46]: 2c40cb7438aa7300 +Block 0002 [ 47]: 9943309c4e6444ab +Block 0002 [ 48]: 93bdb8c08c695d05 +Block 0002 [ 49]: 3e026f39af513ff6 +Block 0002 [ 50]: 94f1714790aabcef +Block 0002 [ 51]: 0795a3358040e131 +Block 0002 [ 52]: ae4830e6481ee1eb +Block 0002 [ 53]: 3ecc56c7b013fa4c +Block 0002 [ 54]: ddfff79f85dafcad +Block 0002 [ 55]: 1f0c9ef1a52df3ca +Block 0002 [ 56]: e909957e4e37ecc8 +Block 0002 [ 57]: c8a40a7602da74e9 +Block 0002 [ 58]: de8822670791deed +Block 0002 [ 59]: 65934f243e9e1e83 +Block 0002 [ 60]: 474cb0df3377639a +Block 0002 [ 61]: 1736eb3a980fd11d +Block 0002 [ 62]: 8fa8d44a066e5257 +Block 0002 [ 63]: 48e036872f7af05c +Block 0002 [ 64]: e521b7cd11db971b +Block 0002 [ 65]: 37f1ee21d8f892a6 +Block 0002 [ 66]: daf18f10b4c59135 +Block 0002 [ 67]: a92c39375926d19c +Block 0002 [ 68]: 61776d72b6dfcbf6 +Block 0002 [ 69]: 6cfd113b795956a6 +Block 0002 [ 70]: 41df6184c37d305d +Block 0002 [ 71]: da0ea530201657b3 +Block 0002 [ 72]: 0eaa8327f0b26deb +Block 0002 [ 73]: 749bef1979a66c54 +Block 0002 [ 74]: 0a4803ba5f98464d +Block 0002 [ 75]: aeef50b86747236a +Block 0002 [ 76]: 7c4204ccbdb87888 +Block 0002 [ 77]: a86c145c2617d45b +Block 0002 [ 78]: e6ec9cf481b74a97 +Block 0002 [ 79]: 52da1faf824b842b +Block 0002 [ 80]: eec0083945a6d2ed +Block 0002 [ 81]: 0d7b28e58b0982f0 +Block 0002 [ 82]: ec807b340dcde015 +Block 0002 [ 83]: ed0db6917d48a4d2 +Block 0002 [ 84]: 85bc55d932e3b3a5 +Block 0002 [ 85]: 71b54dd726a7a3dc +Block 0002 [ 86]: 86dacac98463a414 +Block 0002 [ 87]: 9d9adf7a9a974406 +Block 0002 [ 88]: 2b1ad483c47d825d +Block 0002 [ 89]: 1dd4baa8e20cc036 +Block 0002 [ 90]: 300f765115a0d235 +Block 0002 [ 91]: 34b0bbec6295a57d +Block 0002 [ 92]: 47c2dcab1c8dc56e +Block 0002 [ 93]: 909dcbf65dfd3e4a +Block 0002 [ 94]: bdf4ce01c995501f +Block 0002 [ 95]: 2692141f3829aa9b +Block 0002 [ 96]: d52f697f214d2ea2 +Block 0002 [ 97]: 4eec1c847a44b701 +Block 0002 [ 98]: a14e42edfcff1342 +Block 0002 [ 99]: 597274dab26579c9 +Block 0002 [100]: c8938ed8f54ade44 +Block 0002 [101]: bbdafc08ba8a311b +Block 0002 [102]: 1f77d352b3fb4974 +Block 0002 [103]: 94f2bc7fba84f2d0 +Block 0002 [104]: e2b7015dd2b71522 +Block 0002 [105]: 1a8d1766a4832f57 +Block 0002 [106]: c65a8b0b90388f29 +Block 0002 [107]: 4079af95ac5bb19e +Block 0002 [108]: 961a858ee6f4507d +Block 0002 [109]: e23387d57615d488 +Block 0002 [110]: ea54c14ae8386039 +Block 0002 [111]: c18c93179a7f881f +Block 0002 [112]: 8c8cf06e883a59d9 +Block 0002 [113]: 37cd8e83271d4f0d +Block 0002 [114]: d514a6baa9a22279 +Block 0002 [115]: ca7a1d07761bd380 +Block 0002 [116]: 6654e0ab9bddf7bd +Block 0002 [117]: 605c709efd511084 +Block 0002 [118]: 051a36cd71ce213b +Block 0002 [119]: 344cc6b3d6a1d436 +Block 0002 [120]: f455839c5d4d7a4f +Block 0002 [121]: 1c24c88988a49b33 +Block 0002 [122]: f01bf8d496ee65aa +Block 0002 [123]: e03b0ba3f6117b98 +Block 0002 [124]: 6bca08fdc5511ca7 +Block 0002 [125]: 7fb253076266795f +Block 0002 [126]: 1426489946579710 +Block 0002 [127]: 33d4fa27e9e37b58 +Block 0003 [ 0]: 046a31cd596782ec +Block 0003 [ 1]: bc54a531abfcfa7b +Block 0003 [ 2]: 4b77511da81d7d87 +Block 0003 [ 3]: 83b4ead00cda96fd +Block 0003 [ 4]: 8e7f5159419fa475 +Block 0003 [ 5]: dca90d89e4a289bb +Block 0003 [ 6]: 357863376708b679 +Block 0003 [ 7]: 39cbd5feb80d6deb +Block 0003 [ 8]: 36cc83eb85aca316 +Block 0003 [ 9]: a60c7bca46e83bf0 +Block 0003 [ 10]: b47654f5fb4b0af7 +Block 0003 [ 11]: 8a1f3a2a2a8379a9 +Block 0003 [ 12]: 794fe4476e91c2ac +Block 0003 [ 13]: 12e0f417e18416ba +Block 0003 [ 14]: b56e37032b2c5d1b +Block 0003 [ 15]: db9927e597d1feaf +Block 0003 [ 16]: 0f3d8291a8065f7f +Block 0003 [ 17]: c5bdad1ba4d491ac +Block 0003 [ 18]: b92dd3a668c599d0 +Block 0003 [ 19]: d3ed13931fd174f5 +Block 0003 [ 20]: dd56a98550e6d564 +Block 0003 [ 21]: e36bf64d1375e226 +Block 0003 [ 22]: 20deb434e56892c3 +Block 0003 [ 23]: 85f1359078ee2533 +Block 0003 [ 24]: f722f5fde663ada6 +Block 0003 [ 25]: 619831358089e591 +Block 0003 [ 26]: 7c580214447aefee +Block 0003 [ 27]: 3c2f950a7b194280 +Block 0003 [ 28]: 1aa7cc80aeff8f4a +Block 0003 [ 29]: ce8fa25f55bfe78f +Block 0003 [ 30]: 45dc872f693d4f0f +Block 0003 [ 31]: c9f8dbf8c2c180e0 +Block 0003 [ 32]: 8c312b4ef842d09b +Block 0003 [ 33]: c227867fddc7021b +Block 0003 [ 34]: 403eabd3b6b05550 +Block 0003 [ 35]: a9b1a0ee2cdba6ba +Block 0003 [ 36]: 4795c98a795d0c25 +Block 0003 [ 37]: c9e0d0c57a1241bd +Block 0003 [ 38]: 6c9928c206adef1c +Block 0003 [ 39]: ed3f418ed47e41c0 +Block 0003 [ 40]: 001154d3cc4ce182 +Block 0003 [ 41]: d1ad903c0f1f94b8 +Block 0003 [ 42]: c3c8cea43847addd +Block 0003 [ 43]: 15159c3d406282e4 +Block 0003 [ 44]: feda097ad8fb4a18 +Block 0003 [ 45]: b546ba8ab0e92e3e +Block 0003 [ 46]: d0f960d5f07c7716 +Block 0003 [ 47]: 93f1aeb83b8ccfa3 +Block 0003 [ 48]: b3a262d1b3fa3cb2 +Block 0003 [ 49]: 6a9aceae3eab8923 +Block 0003 [ 50]: 3dd182181b145c83 +Block 0003 [ 51]: b58be4a8bca5f09c +Block 0003 [ 52]: f3f5e5ccac8fe364 +Block 0003 [ 53]: f9cbfb4c276d7eb8 +Block 0003 [ 54]: c24235d25fdc45ce +Block 0003 [ 55]: d315a35ddcd17553 +Block 0003 [ 56]: e1cc7517fa37a8d4 +Block 0003 [ 57]: 308371963bdd138d +Block 0003 [ 58]: 013977ff0ffe9c54 +Block 0003 [ 59]: ad33021b070e8c14 +Block 0003 [ 60]: e710659ac74ab001 +Block 0003 [ 61]: 1bd0f3c858425586 +Block 0003 [ 62]: ed4295897e10f1a8 +Block 0003 [ 63]: 1053070c46b83401 +Block 0003 [ 64]: ca6b0e8a8ccdd08e +Block 0003 [ 65]: 7cedb28e772004b9 +Block 0003 [ 66]: bdaa36a79b505fae +Block 0003 [ 67]: 0d5698f9b8aa0f63 +Block 0003 [ 68]: 504ca8ea7543efa1 +Block 0003 [ 69]: 9610336b7f760920 +Block 0003 [ 70]: 5df8e1999e267562 +Block 0003 [ 71]: 803b49d953e979fa +Block 0003 [ 72]: bc983c4136089649 +Block 0003 [ 73]: edb1e4ffa2af0a7d +Block 0003 [ 74]: 49dc4796c1597e97 +Block 0003 [ 75]: 9ae9a350dbb18072 +Block 0003 [ 76]: 6a09bc7b6cddfa17 +Block 0003 [ 77]: 19eed074b1d94d1b +Block 0003 [ 78]: 5f79a4365291e828 +Block 0003 [ 79]: ed3903991e88d303 +Block 0003 [ 80]: e6b4f5655bf1a227 +Block 0003 [ 81]: a660d316b19c6cf5 +Block 0003 [ 82]: 1bba7c7f616017ec +Block 0003 [ 83]: 6efee2015ea709b5 +Block 0003 [ 84]: 7bca856327d86867 +Block 0003 [ 85]: f1d901fb696cfe6e +Block 0003 [ 86]: b61228cc0f5519e5 +Block 0003 [ 87]: f1cca47f7aa1de4c +Block 0003 [ 88]: c4b0874e7b7523bc +Block 0003 [ 89]: fbe80a4579da608b +Block 0003 [ 90]: 51065fdacf129897 +Block 0003 [ 91]: 5c98141f3b90991a +Block 0003 [ 92]: cd19889c4a4d7139 +Block 0003 [ 93]: f37f5d6b56d239a4 +Block 0003 [ 94]: 973d728bb837500d +Block 0003 [ 95]: 337e69253643f939 +Block 0003 [ 96]: 82e638ae9586e603 +Block 0003 [ 97]: cac9aee8ff136d3d +Block 0003 [ 98]: a1800829a1715101 +Block 0003 [ 99]: df0d298230fb784b +Block 0003 [100]: 6b13a7468f0c0a38 +Block 0003 [101]: 8f0d7471ac242b32 +Block 0003 [102]: f44e149f9b58111e +Block 0003 [103]: 067502de3af50b9f +Block 0003 [104]: fbb82fc217e4b529 +Block 0003 [105]: 7d9881a1bc0e688e +Block 0003 [106]: 30c4685e53b55a42 +Block 0003 [107]: ff9592613630fe41 +Block 0003 [108]: 8bf52e194266394e +Block 0003 [109]: fba0c347e59a5039 +Block 0003 [110]: a9c06323b6fa268a +Block 0003 [111]: c3bad73a55771917 +Block 0003 [112]: acc361d48a5ae241 +Block 0003 [113]: a943d90299f113eb +Block 0003 [114]: 044d325cedeceb09 +Block 0003 [115]: 8947b50203df6ac1 +Block 0003 [116]: 81bfe91acfdc25c9 +Block 0003 [117]: 2f855fd29282043f +Block 0003 [118]: aa61cf9492ad1d75 +Block 0003 [119]: 3b61c07d952c3c5c +Block 0003 [120]: 750c557fcb0419e2 +Block 0003 [121]: 4e111c1b09db20fa +Block 0003 [122]: 38bca5e15536cc63 +Block 0003 [123]: 5c302c1351c2027e +Block 0003 [124]: f02ca3291dec7a84 +Block 0003 [125]: d8a0d514adacb41f +Block 0003 [126]: 41839d029f843d21 +Block 0003 [127]: eaca093b268ad0ba +Block 0004 [ 0]: 4a6feab4b8d9a6aa +Block 0004 [ 1]: 0ec8b94daf8494c6 +Block 0004 [ 2]: 972a66e201c44775 +Block 0004 [ 3]: 81418e65b5078237 +Block 0004 [ 4]: 1df7116b310281b7 +Block 0004 [ 5]: 3d4997690fcf345e +Block 0004 [ 6]: 001b812e2e96b2b3 +Block 0004 [ 7]: d405f56aecafe337 +Block 0004 [ 8]: 5e4d67602b1feb88 +Block 0004 [ 9]: b4012dcdbfaa0f65 +Block 0004 [ 10]: f46b2fd7d7d7c3e8 +Block 0004 [ 11]: 7a72d1dc28a6bfc1 +Block 0004 [ 12]: c1b087e6e31ce345 +Block 0004 [ 13]: d9178f5cd1d422d5 +Block 0004 [ 14]: 2644c0c342f60248 +Block 0004 [ 15]: c115b4f1b91b13f7 +Block 0004 [ 16]: 4a0d701fd1916369 +Block 0004 [ 17]: dead3ce075e71585 +Block 0004 [ 18]: 5d1e8fc49ba9e218 +Block 0004 [ 19]: eebd4465be91bc50 +Block 0004 [ 20]: 589ebbd596dc3bb5 +Block 0004 [ 21]: 060dec3bbfcfdc3f +Block 0004 [ 22]: d845285a84c5e634 +Block 0004 [ 23]: a2955062ee1b9cb9 +Block 0004 [ 24]: 12f1189860b40ba2 +Block 0004 [ 25]: 0559be7877e4540c +Block 0004 [ 26]: fe890e64101def53 +Block 0004 [ 27]: 9c4840aef7a8e6d1 +Block 0004 [ 28]: 7cdffa34d374b5e1 +Block 0004 [ 29]: 34a58d6c1800aa7d +Block 0004 [ 30]: 013aab816c6af91f +Block 0004 [ 31]: d1b420ea039d2850 +Block 0004 [ 32]: 6831b26763d83168 +Block 0004 [ 33]: 4a501813320e3c48 +Block 0004 [ 34]: 21414a84abb62985 +Block 0004 [ 35]: eb1dfbac686d01c6 +Block 0004 [ 36]: ba34dcb11d258cce +Block 0004 [ 37]: 253065e795c10bd2 +Block 0004 [ 38]: 42479f2a35988b10 +Block 0004 [ 39]: 6b557161266ef5cd +Block 0004 [ 40]: 469ecbd406da560b +Block 0004 [ 41]: e23d234f1d05a4f3 +Block 0004 [ 42]: ca9c7960f939525e +Block 0004 [ 43]: e909a0ffbdb01d0b +Block 0004 [ 44]: 4fdb635d89483ec7 +Block 0004 [ 45]: 701151f5c1a33e07 +Block 0004 [ 46]: 6e3df7807c2f136a +Block 0004 [ 47]: 6b481771a4b587c3 +Block 0004 [ 48]: 784a686a8b5377a9 +Block 0004 [ 49]: af6b9b72b81bc979 +Block 0004 [ 50]: 2c531c77707496eb +Block 0004 [ 51]: 1b84970004449d05 +Block 0004 [ 52]: 11f6aee665db9d5e +Block 0004 [ 53]: 498bfbeb89786794 +Block 0004 [ 54]: b87e2adddba796d5 +Block 0004 [ 55]: bc96cf7212cc363f +Block 0004 [ 56]: 73f49d8035e3bb11 +Block 0004 [ 57]: 0af3303a963bf26a +Block 0004 [ 58]: 9ece6fc7aaebbe27 +Block 0004 [ 59]: 0ba41078e55b2dd8 +Block 0004 [ 60]: 148d93b8883cfcb0 +Block 0004 [ 61]: 28ca70d4d9951701 +Block 0004 [ 62]: 927b0485265f2fad +Block 0004 [ 63]: 7e4ec0be8d07f7a9 +Block 0004 [ 64]: 3d3b81c2d4b1ae15 +Block 0004 [ 65]: 122d786485d65f49 +Block 0004 [ 66]: 128a9238e8bf5f92 +Block 0004 [ 67]: 084139a82686dcc9 +Block 0004 [ 68]: c2753d962cfb45c1 +Block 0004 [ 69]: ed4317b6488d2ac4 +Block 0004 [ 70]: 1a481b6e1265293b +Block 0004 [ 71]: babc5d0e2bf24943 +Block 0004 [ 72]: 968f09611a557929 +Block 0004 [ 73]: f7634e9c15e1fe5f +Block 0004 [ 74]: e58dad4f0a4e3128 +Block 0004 [ 75]: 4c8100c8f517cb58 +Block 0004 [ 76]: adc2ff093d49c0bc +Block 0004 [ 77]: 0b1604ea8a1e4e67 +Block 0004 [ 78]: d2d82d3a7b47df02 +Block 0004 [ 79]: 119575d44af91d2d +Block 0004 [ 80]: c8744a6b6ef42198 +Block 0004 [ 81]: a0d452abd110d22f +Block 0004 [ 82]: f7b64c116254c2ba +Block 0004 [ 83]: 9e561c45cc5a1e50 +Block 0004 [ 84]: 881bca7ef16d5453 +Block 0004 [ 85]: eb70824146b76fa3 +Block 0004 [ 86]: b9e137f458dd4a4f +Block 0004 [ 87]: 1f9dcf6dbce23161 +Block 0004 [ 88]: e12e9a5372dc5bab +Block 0004 [ 89]: 2a2f664e8640cee1 +Block 0004 [ 90]: 52c789496b2e681d +Block 0004 [ 91]: 8f8d8cda2b15640d +Block 0004 [ 92]: 9fa2cd5d3d2cfbad +Block 0004 [ 93]: cba04f79b6f84afd +Block 0004 [ 94]: 503cc81918aa8bd2 +Block 0004 [ 95]: be6434cfd25eb26b +Block 0004 [ 96]: a66ff820241911fa +Block 0004 [ 97]: 40a982a33c6db17c +Block 0004 [ 98]: 1548a37aaa2f1bc4 +Block 0004 [ 99]: 1b5bed3a31c66cc2 +Block 0004 [100]: 5f3ffbc962f42ece +Block 0004 [101]: f36ec53e5c4b528a +Block 0004 [102]: 374516cf62043ac3 +Block 0004 [103]: d4ff691eaa9face7 +Block 0004 [104]: 02f5223343418fd0 +Block 0004 [105]: 5a661b3cbd12cb5f +Block 0004 [106]: 5e8da0dfc6608ca3 +Block 0004 [107]: f4d5dd36bf79a562 +Block 0004 [108]: 2a9987c9f4affcc2 +Block 0004 [109]: 6d64596b325a6b97 +Block 0004 [110]: 36acdce8f84fe5d8 +Block 0004 [111]: 7ec1222497a89aed +Block 0004 [112]: a6a766ae96d768d4 +Block 0004 [113]: 9df26ef4377da55d +Block 0004 [114]: 434c1c0bd115606e +Block 0004 [115]: 62037e156afcd340 +Block 0004 [116]: 29059457b8c8e505 +Block 0004 [117]: 3395589ee15940fd +Block 0004 [118]: 3eca700460f7fc72 +Block 0004 [119]: 58d784ed6d428152 +Block 0004 [120]: 1fcc76e9b80d0973 +Block 0004 [121]: 091bd0c42556bf76 +Block 0004 [122]: 38c09a184c120445 +Block 0004 [123]: a947cc2b9e52124f +Block 0004 [124]: dd743025e87af1d3 +Block 0004 [125]: be5f845d0929b7be +Block 0004 [126]: 3fe708f194a42cda +Block 0004 [127]: 867d4c61e71e0b67 +Block 0005 [ 0]: fb543df6749e523d +Block 0005 [ 1]: 8a78683e4ab04b93 +Block 0005 [ 2]: 02c841e680679b47 +Block 0005 [ 3]: 136516cc99423371 +Block 0005 [ 4]: a769b959d945e45b +Block 0005 [ 5]: 3a30bdb2c18f4de8 +Block 0005 [ 6]: 9ba3535a0f59c9cf +Block 0005 [ 7]: af1452e75ee21cd5 +Block 0005 [ 8]: c2d3a094e5573fc9 +Block 0005 [ 9]: 3b0730860b630abe +Block 0005 [ 10]: 990af4f8f2013efb +Block 0005 [ 11]: e8bb67f6fd509a41 +Block 0005 [ 12]: 1605d1f84eead1e9 +Block 0005 [ 13]: 2ea50d34856b87e6 +Block 0005 [ 14]: 4fe1a2161761fcd4 +Block 0005 [ 15]: 559c8caea9bcc491 +Block 0005 [ 16]: 1819c9b7b5dc24a1 +Block 0005 [ 17]: 416e8cecde86b2a1 +Block 0005 [ 18]: 88fbf997a5fb3fb6 +Block 0005 [ 19]: cb3f8e874f54615a +Block 0005 [ 20]: fcdf3457cbc48f47 +Block 0005 [ 21]: fe161ed6b5fa8562 +Block 0005 [ 22]: cb28c641f83c2721 +Block 0005 [ 23]: c447d47847225215 +Block 0005 [ 24]: 53f5947e2ac4a3c7 +Block 0005 [ 25]: d328ee7dddde7b7f +Block 0005 [ 26]: 6d418f9039e885a6 +Block 0005 [ 27]: c49bd9a76b507899 +Block 0005 [ 28]: 576fe9bb6ca62c00 +Block 0005 [ 29]: be801c3749b880c8 +Block 0005 [ 30]: 4b0059b06dd5e4a9 +Block 0005 [ 31]: 2c3a89bd77b33c57 +Block 0005 [ 32]: 68a1d3f04769b9d5 +Block 0005 [ 33]: f8fc066e5a6f0c9e +Block 0005 [ 34]: e42b2962808c4cf0 +Block 0005 [ 35]: c4c0584656e15e35 +Block 0005 [ 36]: 294d1e713a98b7d6 +Block 0005 [ 37]: afe0633eaac739e0 +Block 0005 [ 38]: af7222b24131006a +Block 0005 [ 39]: 6178bbfb2124d548 +Block 0005 [ 40]: 56f5c66b4fe10b8f +Block 0005 [ 41]: 53c90a148b2ebd77 +Block 0005 [ 42]: 417b844c1274d9d8 +Block 0005 [ 43]: c8907a79e976bd33 +Block 0005 [ 44]: 7064d869deaaa1b1 +Block 0005 [ 45]: 024ed97ff2245f12 +Block 0005 [ 46]: 14fdf38d1306d1b2 +Block 0005 [ 47]: cb298fbfc55f3ee4 +Block 0005 [ 48]: eecc9a5195beacdd +Block 0005 [ 49]: 9d9e953c57e3fa74 +Block 0005 [ 50]: 302d90e2c08746b1 +Block 0005 [ 51]: b002b433537ac056 +Block 0005 [ 52]: aff555002370f1d4 +Block 0005 [ 53]: f92f23141050b6ad +Block 0005 [ 54]: 06d4378ec748701c +Block 0005 [ 55]: 81eeed081edc7f48 +Block 0005 [ 56]: dfe8ae684fd0f17a +Block 0005 [ 57]: 92e63e7564fac228 +Block 0005 [ 58]: 86158a52ab99db1f +Block 0005 [ 59]: 8ed6cc492aac5b00 +Block 0005 [ 60]: 7f51ad01e4076720 +Block 0005 [ 61]: 45bea9c00a87bb9d +Block 0005 [ 62]: 45ec0de126d5ae46 +Block 0005 [ 63]: e427a45bc89c0131 +Block 0005 [ 64]: 0dd149ab71faba66 +Block 0005 [ 65]: cb2b2e0071fa7b53 +Block 0005 [ 66]: 71e77479e9ea7cb2 +Block 0005 [ 67]: ecd627c2257d5842 +Block 0005 [ 68]: 67e2ff459ff6512f +Block 0005 [ 69]: 18cbf83fc201d0a7 +Block 0005 [ 70]: 07c57ab8658d81ec +Block 0005 [ 71]: 6183584d0c49845f +Block 0005 [ 72]: 45e12ff25a656646 +Block 0005 [ 73]: d21335cd1ba3047c +Block 0005 [ 74]: 6b7378fc20768c3b +Block 0005 [ 75]: ee564c9a368c1e46 +Block 0005 [ 76]: d1d18cb6f72d0c79 +Block 0005 [ 77]: aebbeda36f0fc0e0 +Block 0005 [ 78]: 6580a8f2676dcdef +Block 0005 [ 79]: b34b0614331bd5fc +Block 0005 [ 80]: 2243be4dd2e49980 +Block 0005 [ 81]: 783960f9d625078a +Block 0005 [ 82]: b5fa94e6f91b72c9 +Block 0005 [ 83]: 2657b20f7f31b021 +Block 0005 [ 84]: a86de3ee9dd25b95 +Block 0005 [ 85]: 3af6e85645f80ea4 +Block 0005 [ 86]: 3a68ed98df3d594d +Block 0005 [ 87]: d2a68745e380dd7f +Block 0005 [ 88]: 437135cba7eaa3e7 +Block 0005 [ 89]: b80144de6b82a67b +Block 0005 [ 90]: ba03053d2bd25052 +Block 0005 [ 91]: dfe01934ef3be8df +Block 0005 [ 92]: cd9c64f1a2139ea9 +Block 0005 [ 93]: 5bd83d1399ed8a42 +Block 0005 [ 94]: a786e2e263c5e47b +Block 0005 [ 95]: e5cb1fbaaaf26d6d +Block 0005 [ 96]: 2a47e840cf6f84fa +Block 0005 [ 97]: b4a5f7d6cc8957b1 +Block 0005 [ 98]: a42e0f60094cc7cb +Block 0005 [ 99]: 335cd356be912b47 +Block 0005 [100]: d30485e50e27d062 +Block 0005 [101]: e59ebdfd8013f6d6 +Block 0005 [102]: 818a06f6b6266b88 +Block 0005 [103]: c995b852c6da3ca0 +Block 0005 [104]: b72676cffffaf86d +Block 0005 [105]: d2498a2128c52576 +Block 0005 [106]: 2debc84192d6fd30 +Block 0005 [107]: d48716be7be4e90d +Block 0005 [108]: 88f03985da415f6c +Block 0005 [109]: dff03e4cfdd02d4a +Block 0005 [110]: ae970d0e7425c8e4 +Block 0005 [111]: 53a3cee362ea1c8e +Block 0005 [112]: a000e14a36a528bc +Block 0005 [113]: 524c86fec28b74f3 +Block 0005 [114]: 0b528ba6288396a3 +Block 0005 [115]: 749c64a4b184569d +Block 0005 [116]: 2e9488cf658cbded +Block 0005 [117]: c587392b84ba8fb3 +Block 0005 [118]: 018fe60c724a8ba1 +Block 0005 [119]: 2d5b243a75ca9634 +Block 0005 [120]: 06b67ca8f1bd302c +Block 0005 [121]: 688d2272401624fd +Block 0005 [122]: b111f0c4872d900d +Block 0005 [123]: 33d51a30d35f4283 +Block 0005 [124]: b9464778209546b4 +Block 0005 [125]: 1e24119f455c36b2 +Block 0005 [126]: 41fca34623d8bd15 +Block 0005 [127]: dad7e567bc66f72c +Block 0006 [ 0]: a3a72e2c8604b578 +Block 0006 [ 1]: 4713a88b4d727ef8 +Block 0006 [ 2]: d750d3a721d9f31b +Block 0006 [ 3]: 6a465b3a9d114ce6 +Block 0006 [ 4]: 887a8704c786cd4c +Block 0006 [ 5]: d975e67288451b37 +Block 0006 [ 6]: e9c343f24b375d68 +Block 0006 [ 7]: eba23301fa7bd4bd +Block 0006 [ 8]: 14521b31b4bf1c46 +Block 0006 [ 9]: 8c13afd741f37d2b +Block 0006 [ 10]: 6f2b59d1cf12c855 +Block 0006 [ 11]: 5dd35e7e01350317 +Block 0006 [ 12]: 224a64109cc2743b +Block 0006 [ 13]: be90804f32ee3a28 +Block 0006 [ 14]: fe2a8bd84deb0852 +Block 0006 [ 15]: 01d3cf8a505adc92 +Block 0006 [ 16]: bc08b05300c76e75 +Block 0006 [ 17]: 999d681fb563dc43 +Block 0006 [ 18]: d1d4a0f963f8fa6f +Block 0006 [ 19]: 35b5d12da998aefc +Block 0006 [ 20]: 90ed25375fed8bb1 +Block 0006 [ 21]: 77daf28509710d25 +Block 0006 [ 22]: eee16b40398474df +Block 0006 [ 23]: 646f422d3bd880b6 +Block 0006 [ 24]: aa6c2956bd819ec5 +Block 0006 [ 25]: 17eef62e7bf6ca72 +Block 0006 [ 26]: 9b70680f409ebbbd +Block 0006 [ 27]: 101cae1679e39b1a +Block 0006 [ 28]: ae539343701e746d +Block 0006 [ 29]: 9ebe9838e1f9a97b +Block 0006 [ 30]: 1d7df5e0c1f03918 +Block 0006 [ 31]: f6d13d16d00019c7 +Block 0006 [ 32]: f373e4095564f479 +Block 0006 [ 33]: d442f06e4e98d587 +Block 0006 [ 34]: 3a69c10e6292e2f4 +Block 0006 [ 35]: 479e23c96fb7743d +Block 0006 [ 36]: 37ec26d28b38943c +Block 0006 [ 37]: 6c35b46dbb181347 +Block 0006 [ 38]: 28ab9b420f8d8b5d +Block 0006 [ 39]: f4c1deb2acc7dcde +Block 0006 [ 40]: ea7c5ea61f6e6ad3 +Block 0006 [ 41]: d7b4bff98caa97ab +Block 0006 [ 42]: fd2559b884c946ae +Block 0006 [ 43]: 62588e85fcce2f30 +Block 0006 [ 44]: 67ace8d1f36ec6cd +Block 0006 [ 45]: 7292a3420dba77c5 +Block 0006 [ 46]: e0d6c21b226e1f6b +Block 0006 [ 47]: ae1f28664a579217 +Block 0006 [ 48]: 4a5ab4b03d7380a6 +Block 0006 [ 49]: 8a2508f7c7f1b0f3 +Block 0006 [ 50]: 3567a420a49dc098 +Block 0006 [ 51]: 61ad122d9db36182 +Block 0006 [ 52]: d97878725887819b +Block 0006 [ 53]: e7e0ad17f72d3565 +Block 0006 [ 54]: 62bfa6c56235fbb9 +Block 0006 [ 55]: 19ba832db474c7da +Block 0006 [ 56]: 382213437f2b5e61 +Block 0006 [ 57]: 40f5b7b35538c7ad +Block 0006 [ 58]: d43ca697239bd77a +Block 0006 [ 59]: fa0faa43eea87e6b +Block 0006 [ 60]: 7e45f6c8dbd6821c +Block 0006 [ 61]: 7ffac662823ab66e +Block 0006 [ 62]: 8c3ffb2704479749 +Block 0006 [ 63]: 4cbfd18a06cfed3c +Block 0006 [ 64]: 3d4f99072714204a +Block 0006 [ 65]: 3ebc6d35e69c5b28 +Block 0006 [ 66]: de07a1e5ca926edb +Block 0006 [ 67]: 5571cf9aa39c3215 +Block 0006 [ 68]: 844ca33bf4947c5e +Block 0006 [ 69]: c6c99f7d74f39266 +Block 0006 [ 70]: a37b366ee3edb520 +Block 0006 [ 71]: 5c4ec2b2655a8a06 +Block 0006 [ 72]: 97a48f22a613f515 +Block 0006 [ 73]: 540a61e06b1c6ae3 +Block 0006 [ 74]: c865bc526dac7065 +Block 0006 [ 75]: a3a088fb6b1efa14 +Block 0006 [ 76]: 9beea238c77ab9f3 +Block 0006 [ 77]: 08b336770fbb1d8e +Block 0006 [ 78]: 409a15767d0707bf +Block 0006 [ 79]: 2825ba8f5eb9e2e5 +Block 0006 [ 80]: 6978f619ee3c20de +Block 0006 [ 81]: 6568588f224ce8ad +Block 0006 [ 82]: e0989069852bd360 +Block 0006 [ 83]: 9a203b316ac1558d +Block 0006 [ 84]: 405f2306f85335bd +Block 0006 [ 85]: f5e3c0dbc69f96d8 +Block 0006 [ 86]: 2a451adb35138baa +Block 0006 [ 87]: fffdc1f7a0148257 +Block 0006 [ 88]: 7d84d77440bee90a +Block 0006 [ 89]: 60e5f23c63fda19c +Block 0006 [ 90]: 5716d0a8c0650062 +Block 0006 [ 91]: 81c75ba2d5bf8206 +Block 0006 [ 92]: f93a47bde77c06e4 +Block 0006 [ 93]: 57dc3d4b8d84ba68 +Block 0006 [ 94]: 21eb9140c58ea159 +Block 0006 [ 95]: 8f3a87bbc66a532c +Block 0006 [ 96]: 93e91414d8d86305 +Block 0006 [ 97]: 334215982e161477 +Block 0006 [ 98]: 28bef7bb826b610b +Block 0006 [ 99]: 6ee7a816de4a890b +Block 0006 [100]: caff0d2a6443ab5b +Block 0006 [101]: f642a6b5153b3428 +Block 0006 [102]: c381f82d97488a06 +Block 0006 [103]: 9bd7117ff6ed1fa3 +Block 0006 [104]: c314e4ee3b0a9a1f +Block 0006 [105]: 76800ae8fba93619 +Block 0006 [106]: bd25cb81c4257d9f +Block 0006 [107]: 1ce3bf40c40723e5 +Block 0006 [108]: f5e417cbe472bb97 +Block 0006 [109]: 8cfd294fa8945406 +Block 0006 [110]: a4c5d94d07afe74d +Block 0006 [111]: bcb602e186f471ff +Block 0006 [112]: c02c0c2e0af63068 +Block 0006 [113]: bc27e62ff57050af +Block 0006 [114]: a6dc335ddf95c5b1 +Block 0006 [115]: b0e366f93847f756 +Block 0006 [116]: 7fe108fe80552259 +Block 0006 [117]: a49d9f9fca18b0f0 +Block 0006 [118]: 27aeee8d45049e51 +Block 0006 [119]: 314b70072932cf39 +Block 0006 [120]: 6ef20c87fc0697c9 +Block 0006 [121]: 19da493d127bbe55 +Block 0006 [122]: c5b5f7cc1c77beaa +Block 0006 [123]: f5e3973f36bdd3f1 +Block 0006 [124]: 52f7210c0f544bb2 +Block 0006 [125]: f7c8945cbbb13f68 +Block 0006 [126]: f30e60931430aa3b +Block 0006 [127]: 323c286c4ce01b9c +Block 0007 [ 0]: 6387ec0a9b706d60 +Block 0007 [ 1]: bb702446236f8be0 +Block 0007 [ 2]: f98b3dae492b7558 +Block 0007 [ 3]: caa8f2f9e58e5421 +Block 0007 [ 4]: 570bc5ea80d9d75e +Block 0007 [ 5]: 2f274d6c336d55bc +Block 0007 [ 6]: 977e5e3d3c58d830 +Block 0007 [ 7]: 85135d0217021ad5 +Block 0007 [ 8]: 740f76b2966956cb +Block 0007 [ 9]: 829305b653c36e53 +Block 0007 [ 10]: fe8820deb0a05b9a +Block 0007 [ 11]: 70487cca2fa7b66a +Block 0007 [ 12]: 9baf5077693e12ab +Block 0007 [ 13]: 86c7875c562e7817 +Block 0007 [ 14]: 6fda95b0820b7626 +Block 0007 [ 15]: 87759ed28fc95dc5 +Block 0007 [ 16]: 1914dd4b93217d74 +Block 0007 [ 17]: 3175851fcde71765 +Block 0007 [ 18]: 429d7afe1a305245 +Block 0007 [ 19]: dc47b73aeef3ed87 +Block 0007 [ 20]: 4ad7fe926a869547 +Block 0007 [ 21]: 08a805cc0ca53ee3 +Block 0007 [ 22]: 92eb59c00f0fc241 +Block 0007 [ 23]: 4a9207af3b1b09c2 +Block 0007 [ 24]: 00b6146a8e156963 +Block 0007 [ 25]: 30ab9619f07ea05b +Block 0007 [ 26]: f7b7b8ac33c5a933 +Block 0007 [ 27]: 8e245c42cf3cd563 +Block 0007 [ 28]: 5f46e9a882003c74 +Block 0007 [ 29]: 194b404af2af00cc +Block 0007 [ 30]: 0b4e9da19d8523b5 +Block 0007 [ 31]: a4b827d6768ad06a +Block 0007 [ 32]: 118a7958aae82170 +Block 0007 [ 33]: 3e8903e2c2ba80f4 +Block 0007 [ 34]: 07d87f37f9e20e96 +Block 0007 [ 35]: 05294a48cf03630b +Block 0007 [ 36]: b7f897cabe953dcb +Block 0007 [ 37]: a046083e04a24015 +Block 0007 [ 38]: eeb8efb5c70409f9 +Block 0007 [ 39]: bfe5de4db2fa7e0d +Block 0007 [ 40]: 24a7e8037b5d2ca0 +Block 0007 [ 41]: a315e9daa0998eb1 +Block 0007 [ 42]: bd52356dc28f6dac +Block 0007 [ 43]: 226fb1009dfc10be +Block 0007 [ 44]: a779004a2ded38af +Block 0007 [ 45]: 85c57f732e286ea9 +Block 0007 [ 46]: 30b6b1dbc7798fcf +Block 0007 [ 47]: c89e51d00e162333 +Block 0007 [ 48]: e4c9d91c7dcfd8e3 +Block 0007 [ 49]: 106ce6c585962d8f +Block 0007 [ 50]: 22cf9c3f79496b09 +Block 0007 [ 51]: d94d968fec6ea652 +Block 0007 [ 52]: fb0c6976e070caf2 +Block 0007 [ 53]: 1787da9837e8262e +Block 0007 [ 54]: 4e45822661217409 +Block 0007 [ 55]: 51f4c5bdba281a43 +Block 0007 [ 56]: 71f6f5746a9cdbc5 +Block 0007 [ 57]: dd45b228f797a3ed +Block 0007 [ 58]: 5829018cdd1ab9c6 +Block 0007 [ 59]: af606f89f13d4187 +Block 0007 [ 60]: faab7f9a3350f5ac +Block 0007 [ 61]: 09ec94cc822811a6 +Block 0007 [ 62]: 9bb2f1fb5c15a70e +Block 0007 [ 63]: fb37b1f9f3858291 +Block 0007 [ 64]: 12e2b535b7b01f3d +Block 0007 [ 65]: 319c071179726a9d +Block 0007 [ 66]: c4c40af8058a8900 +Block 0007 [ 67]: f52597b11ca98e1f +Block 0007 [ 68]: 0264495f476a7dde +Block 0007 [ 69]: 21d452f219468635 +Block 0007 [ 70]: 64cbc8315af032bb +Block 0007 [ 71]: 04629095edb84f96 +Block 0007 [ 72]: 42b7b37a32e08328 +Block 0007 [ 73]: a7c62acb4f22e113 +Block 0007 [ 74]: c93f84a445c8b8c4 +Block 0007 [ 75]: 210bf0fd5973d7a5 +Block 0007 [ 76]: c6598b4fb35eb70c +Block 0007 [ 77]: dc3ab8ae47c5ec9e +Block 0007 [ 78]: 932b8a0159b60161 +Block 0007 [ 79]: 1e886e331d1d815b +Block 0007 [ 80]: d57e42a90b5b5ea2 +Block 0007 [ 81]: c19836b4eebcf0e0 +Block 0007 [ 82]: 7bcf27db4f73cecf +Block 0007 [ 83]: 4f337cae713d7a49 +Block 0007 [ 84]: c74db29321d52f0a +Block 0007 [ 85]: 81757ef96322e580 +Block 0007 [ 86]: 1e4f7d1b8905b7a1 +Block 0007 [ 87]: 6fe9f441a85dac8d +Block 0007 [ 88]: bb2b2c459eaba1f5 +Block 0007 [ 89]: f7a9148b29d6bfeb +Block 0007 [ 90]: 0cc049b9c6e1237c +Block 0007 [ 91]: d297ff0079dbb8e3 +Block 0007 [ 92]: df4b35c29891f33b +Block 0007 [ 93]: 95c07dfb25bdb5d3 +Block 0007 [ 94]: a1b58642419c579d +Block 0007 [ 95]: e4f0ae1ce73b7a94 +Block 0007 [ 96]: 747795cbb741f532 +Block 0007 [ 97]: 58122055bd9967a8 +Block 0007 [ 98]: e6d2fe83ad0bb0c7 +Block 0007 [ 99]: 7c6733d7e587fece +Block 0007 [100]: 6b583826c192891a +Block 0007 [101]: 8ae9b5e57e175517 +Block 0007 [102]: 2f6e710fb49abdd8 +Block 0007 [103]: d5be1ac3dda22c8d +Block 0007 [104]: 5afff784fa1bf48b +Block 0007 [105]: 1fc1d96bc25caea1 +Block 0007 [106]: fb74ff65f0f24544 +Block 0007 [107]: e48fd5ba945b02a2 +Block 0007 [108]: b7de6a07cfbfdb0a +Block 0007 [109]: 151e19b16051ab9f +Block 0007 [110]: 9254ef841a98c808 +Block 0007 [111]: 4b373f36b0e31770 +Block 0007 [112]: a0d241c34ff8cfa6 +Block 0007 [113]: 76c7e4c042ec3aec +Block 0007 [114]: 4832326e33ed6314 +Block 0007 [115]: 2339915d2024ef5f +Block 0007 [116]: e0d8261905b27f66 +Block 0007 [117]: 2261a1333158bfdb +Block 0007 [118]: 78f4b91b214610b6 +Block 0007 [119]: 13d6a0120299a8d0 +Block 0007 [120]: 7c15f3b8582db3ab +Block 0007 [121]: 00b9f16978014f32 +Block 0007 [122]: c37476f83eab622f +Block 0007 [123]: 3b504a0cce417082 +Block 0007 [124]: 504d28bac5681fcf +Block 0007 [125]: 53fe3f3c188cfdfc +Block 0007 [126]: d2edb0da87468512 +Block 0007 [127]: 8dd7c8f05895eea8 +Block 0008 [ 0]: 5d390b079d0f3c47 +Block 0008 [ 1]: 631734483921758e +Block 0008 [ 2]: ed4bf986e07b5e28 +Block 0008 [ 3]: 9ffa103e77ebc487 +Block 0008 [ 4]: 5c194d18d89640e6 +Block 0008 [ 5]: 8603e18fc4fe0f6a +Block 0008 [ 6]: 00b9f5cee0eaadfc +Block 0008 [ 7]: 8b1ea916bb95a9f2 +Block 0008 [ 8]: 99099a16e443ef5f +Block 0008 [ 9]: b8e6ba465a8b10e9 +Block 0008 [ 10]: 756a2fbbf4f5a154 +Block 0008 [ 11]: 7bc7f48014c56e73 +Block 0008 [ 12]: 1e11511a7bf4bd41 +Block 0008 [ 13]: e949210b66327b58 +Block 0008 [ 14]: 051f0050d5aac874 +Block 0008 [ 15]: 1a2566c306ead6b9 +Block 0008 [ 16]: 930d022e7888d216 +Block 0008 [ 17]: 0582ec2e435a555f +Block 0008 [ 18]: fe0dd7d9465e1e29 +Block 0008 [ 19]: de2ee4564bce48a5 +Block 0008 [ 20]: 0d5072a51ecc0fa0 +Block 0008 [ 21]: 44427a90322926cf +Block 0008 [ 22]: 1d315d890f65e83d +Block 0008 [ 23]: e1f9ca311dc237b8 +Block 0008 [ 24]: 0baf3526a72a11bc +Block 0008 [ 25]: 9a0d03779403602c +Block 0008 [ 26]: b14361834efb1c72 +Block 0008 [ 27]: c93f96de539b5c4f +Block 0008 [ 28]: 0763882c2814ac4c +Block 0008 [ 29]: 1713c202a7fefb89 +Block 0008 [ 30]: a3d9d35d0f938ac9 +Block 0008 [ 31]: fa39df6510e6f52a +Block 0008 [ 32]: d0ad5e8ded8cb6af +Block 0008 [ 33]: 63fc4badd29ec94b +Block 0008 [ 34]: a4421774c98764ef +Block 0008 [ 35]: 3414be973e81f2ef +Block 0008 [ 36]: 74df078314799d9d +Block 0008 [ 37]: be229396be40f7b6 +Block 0008 [ 38]: e0d009aa0635bb4c +Block 0008 [ 39]: fab2695ac684c57a +Block 0008 [ 40]: 6c0a94812877f048 +Block 0008 [ 41]: 7dc440749ae442ab +Block 0008 [ 42]: d78523d4176e3f2f +Block 0008 [ 43]: b8019dac190a312e +Block 0008 [ 44]: 98750809c9fd9a29 +Block 0008 [ 45]: 97d93132f60ba799 +Block 0008 [ 46]: 4b78d6769101dec3 +Block 0008 [ 47]: 8dfc4271071b6374 +Block 0008 [ 48]: 0d93e5b71ba5accf +Block 0008 [ 49]: 55b8352ba3de28a7 +Block 0008 [ 50]: 1ff98ead8ed53bff +Block 0008 [ 51]: 4345c4c79dc0dc9b +Block 0008 [ 52]: 07a4077a5731b408 +Block 0008 [ 53]: ce6b2dda9f81e9d8 +Block 0008 [ 54]: a54293585c425cd6 +Block 0008 [ 55]: 75430004a8b7b2ff +Block 0008 [ 56]: cdff0f60d61ed3a9 +Block 0008 [ 57]: 40473d034cdc74cc +Block 0008 [ 58]: 9dace14d7adffd8b +Block 0008 [ 59]: cf19dab22e542598 +Block 0008 [ 60]: 3949259d09c091d8 +Block 0008 [ 61]: 7c81a97d86a30f01 +Block 0008 [ 62]: 4f676a32da1a29d0 +Block 0008 [ 63]: 66e8d05639fb0c14 +Block 0008 [ 64]: 4c1af73d9a85dd31 +Block 0008 [ 65]: 79e9b95889a88a16 +Block 0008 [ 66]: f9908b3531cc76ea +Block 0008 [ 67]: f6cfad223752eec7 +Block 0008 [ 68]: 41479ece4c58b371 +Block 0008 [ 69]: 82a169276b336f19 +Block 0008 [ 70]: d44954dbd75a21b8 +Block 0008 [ 71]: 1f95e2b453d4f78b +Block 0008 [ 72]: bced4e6da5ba36eb +Block 0008 [ 73]: 068eafdb44cbfbc2 +Block 0008 [ 74]: 0999d545028f9efe +Block 0008 [ 75]: eded6e0de0c417a7 +Block 0008 [ 76]: 29458d270d29c726 +Block 0008 [ 77]: ca47e3726b5c83b7 +Block 0008 [ 78]: 55d4767698536bfd +Block 0008 [ 79]: d6625a482a8db1b3 +Block 0008 [ 80]: 1cc4d3f6df69fe20 +Block 0008 [ 81]: e8b4b60c15d40dca +Block 0008 [ 82]: 32f048c6f0d48123 +Block 0008 [ 83]: 2f35db8679917a7e +Block 0008 [ 84]: 759b5ada93849d12 +Block 0008 [ 85]: 1ae3c2be42c6eea9 +Block 0008 [ 86]: 93e74ea55d8b0d66 +Block 0008 [ 87]: 68fcbcde1e1a6565 +Block 0008 [ 88]: 1889a5726a26da42 +Block 0008 [ 89]: 411b88d9b6db4828 +Block 0008 [ 90]: de23768fd2455c23 +Block 0008 [ 91]: 4f6067933ce44e02 +Block 0008 [ 92]: 8efa982c0485196c +Block 0008 [ 93]: 526025198657de26 +Block 0008 [ 94]: 419b492b3661f65d +Block 0008 [ 95]: fe15b81200f6eb75 +Block 0008 [ 96]: c6a9ecad13aadff8 +Block 0008 [ 97]: 0a76c404e5278377 +Block 0008 [ 98]: c8172a7c6942cc25 +Block 0008 [ 99]: 311b55b1905a0a60 +Block 0008 [100]: 724ab2c3127bfe21 +Block 0008 [101]: 75e4ec223a74f3f5 +Block 0008 [102]: 5764eaa3be4daec2 +Block 0008 [103]: d1ded8250f85689c +Block 0008 [104]: a2f7c754668a6481 +Block 0008 [105]: ead4eeb6d1d49959 +Block 0008 [106]: 47bb132a81f3c0da +Block 0008 [107]: f3051e81a5dd1079 +Block 0008 [108]: 9d12025fdde61890 +Block 0008 [109]: 63c8049a357ca2c0 +Block 0008 [110]: 83ebad4c3c2faba3 +Block 0008 [111]: 1007d48feef5049d +Block 0008 [112]: 88d09ba2a9e8e2a5 +Block 0008 [113]: 2afbe3f5d1b30d82 +Block 0008 [114]: 00004c21a628e91c +Block 0008 [115]: 0e46db5c9f6e12c9 +Block 0008 [116]: 9cf96fab1e4dd3f8 +Block 0008 [117]: a7703f68865b6af4 +Block 0008 [118]: ad53f4297b4dd1db +Block 0008 [119]: a012faa78331fc14 +Block 0008 [120]: d5aaf6aeabe110f8 +Block 0008 [121]: d6de328de4c92196 +Block 0008 [122]: 75827f679ab6b8a7 +Block 0008 [123]: fbf6da92a4f6ced0 +Block 0008 [124]: f9df80a3daf27bb8 +Block 0008 [125]: 0b35df003d687d2f +Block 0008 [126]: 69ebef0dc424ec77 +Block 0008 [127]: 150d2aaa755eee68 +Block 0009 [ 0]: ce8d377f08f7fe79 +Block 0009 [ 1]: 8c20bf58c17115cf +Block 0009 [ 2]: 9d58f26c303997fd +Block 0009 [ 3]: 908a17f607eafb21 +Block 0009 [ 4]: ca4c3bf6e41ffade +Block 0009 [ 5]: 9b23d7636fb3f276 +Block 0009 [ 6]: 31d57db44e9d7078 +Block 0009 [ 7]: 71494598e4916674 +Block 0009 [ 8]: 7f43fee7abb5a94f +Block 0009 [ 9]: cc0b2152cc614b56 +Block 0009 [ 10]: a4c240deb0eb1a93 +Block 0009 [ 11]: 8dc29aa7479a224a +Block 0009 [ 12]: 23d557074d98a0b7 +Block 0009 [ 13]: cbe656a292df3d02 +Block 0009 [ 14]: cb8dc6eefa34d7c8 +Block 0009 [ 15]: 8d5a12c06108e989 +Block 0009 [ 16]: bcf42fe767f10284 +Block 0009 [ 17]: 73e4f1efa605ee48 +Block 0009 [ 18]: 3b05f1b3e39ce7c4 +Block 0009 [ 19]: 44a0da643669026d +Block 0009 [ 20]: 730a137534d337bf +Block 0009 [ 21]: 007c05c1857fab4e +Block 0009 [ 22]: f99aac7ee7a70067 +Block 0009 [ 23]: e2c11ca64fb8518c +Block 0009 [ 24]: 2d0244c8a78b3f7f +Block 0009 [ 25]: 02d54c9795ed259d +Block 0009 [ 26]: 1ccb41de825eb282 +Block 0009 [ 27]: 094e02b949396d6a +Block 0009 [ 28]: fe86cfd514adaf77 +Block 0009 [ 29]: b92fa1cd5c496f06 +Block 0009 [ 30]: 278fcfe3a4b794fa +Block 0009 [ 31]: 8eb888dd3e6e1d0d +Block 0009 [ 32]: 39971bfaa759afc1 +Block 0009 [ 33]: 5efc9323d1eaa784 +Block 0009 [ 34]: 32fa6022074c0fcf +Block 0009 [ 35]: 484b81c4f4653609 +Block 0009 [ 36]: 7b8beed4c906adf7 +Block 0009 [ 37]: 2dbe5bb15be5770f +Block 0009 [ 38]: 71409b1f63ac2093 +Block 0009 [ 39]: de542f2668c63b10 +Block 0009 [ 40]: 44b0c9767d4418c8 +Block 0009 [ 41]: b90ef7ff84c5e1a4 +Block 0009 [ 42]: b9fd084eda79682b +Block 0009 [ 43]: d91a574bda76901f +Block 0009 [ 44]: 8bc9f293e1d45b6c +Block 0009 [ 45]: a55399657500adf4 +Block 0009 [ 46]: 4b12096ac90ccc73 +Block 0009 [ 47]: 715af0c0bb5895e3 +Block 0009 [ 48]: ef82a77202164329 +Block 0009 [ 49]: 3a8911d0d52aa2ee +Block 0009 [ 50]: dfe9a2c49fd37efc +Block 0009 [ 51]: 44b03a85493a87d1 +Block 0009 [ 52]: 67ef6a9d0b782657 +Block 0009 [ 53]: 7830301ca2b6de19 +Block 0009 [ 54]: b77da999c566c7f0 +Block 0009 [ 55]: 4f075e97d94a8e0a +Block 0009 [ 56]: 7f4072a94c94f761 +Block 0009 [ 57]: 16cdea91df85080d +Block 0009 [ 58]: 3874d09a0ea0f90c +Block 0009 [ 59]: cd40596f76232601 +Block 0009 [ 60]: 56c4d1d584fe9206 +Block 0009 [ 61]: 8353f143a48f7493 +Block 0009 [ 62]: 3b43a5839db205dd +Block 0009 [ 63]: 7911e3e5c874bea7 +Block 0009 [ 64]: a202515a2b192ac0 +Block 0009 [ 65]: 0389f1e56dc55e6a +Block 0009 [ 66]: 4e951464e5ad25c5 +Block 0009 [ 67]: 257ac4933f14f134 +Block 0009 [ 68]: 3287ef9942926b40 +Block 0009 [ 69]: 40cec3bd22c86041 +Block 0009 [ 70]: dbd6ec1749aa5e99 +Block 0009 [ 71]: 5788f14286b46a60 +Block 0009 [ 72]: 72760917498f959e +Block 0009 [ 73]: 9f36d2b48e2822b6 +Block 0009 [ 74]: 5081f0e45fb5fd67 +Block 0009 [ 75]: cc5fb925077bd013 +Block 0009 [ 76]: 6518a37a669fde5e +Block 0009 [ 77]: df366ef1564c60e4 +Block 0009 [ 78]: 55be980f77a07ec0 +Block 0009 [ 79]: f9873ade723e65b7 +Block 0009 [ 80]: f35f4a2816fc122c +Block 0009 [ 81]: cd1eb28cfa398921 +Block 0009 [ 82]: 09da96aa8bdac0d5 +Block 0009 [ 83]: eb6dc7aab11559dc +Block 0009 [ 84]: 25447fc0c67575d4 +Block 0009 [ 85]: 91a4d8daa8c810f5 +Block 0009 [ 86]: 9e31930d5aef7367 +Block 0009 [ 87]: 4f5a712ea723acc8 +Block 0009 [ 88]: edd07d6da9c84795 +Block 0009 [ 89]: 02d2177706dd53f7 +Block 0009 [ 90]: bf6c192b4cf63a91 +Block 0009 [ 91]: c78c4419b3ee8253 +Block 0009 [ 92]: a100748306111376 +Block 0009 [ 93]: 73ce0d73b1e79718 +Block 0009 [ 94]: 1014b78632ec0d41 +Block 0009 [ 95]: 734231d1617553de +Block 0009 [ 96]: 5988558d1a8d8e3a +Block 0009 [ 97]: 5629c3ede2e9d511 +Block 0009 [ 98]: 79e13d0d94340525 +Block 0009 [ 99]: f4c5c7336d169b86 +Block 0009 [100]: 5764cef5ad7fa93f +Block 0009 [101]: fb6234c6a6386257 +Block 0009 [102]: f4b994758a0f35e7 +Block 0009 [103]: 1a0cd87926b1fde2 +Block 0009 [104]: c72591e546983e39 +Block 0009 [105]: 0f7b07aaa5e224c3 +Block 0009 [106]: ab73b302681f5e62 +Block 0009 [107]: ce0ba76a4505aa4e +Block 0009 [108]: ff7210fcd2fde9a6 +Block 0009 [109]: 4629ed41f29c3515 +Block 0009 [110]: 13ec4b4caa1040d2 +Block 0009 [111]: d1ceeddad6ad578b +Block 0009 [112]: bac3f41626f8d3dc +Block 0009 [113]: ad4ff3709d35af50 +Block 0009 [114]: 5e9cf2efe0414e28 +Block 0009 [115]: 27ce4c9d35606793 +Block 0009 [116]: f46f2476963e3e88 +Block 0009 [117]: 5861232534f983cc +Block 0009 [118]: 0f9800c4a3832b80 +Block 0009 [119]: f1fcb7824c057729 +Block 0009 [120]: 945e20f06a155498 +Block 0009 [121]: ffa7dfbd69cd6bb1 +Block 0009 [122]: 9a1be0799dbe2856 +Block 0009 [123]: 681ba56766e190f6 +Block 0009 [124]: 5e326010ccbda0bd +Block 0009 [125]: 94f0f292bfb4113c +Block 0009 [126]: fa3b9bae5b239f61 +Block 0009 [127]: 37d071a4e980c4a0 +Block 0010 [ 0]: 6ae4225fd3354e7d +Block 0010 [ 1]: ae61c609843bcde0 +Block 0010 [ 2]: ed5854bb11b0d8f9 +Block 0010 [ 3]: 0120456d2ab6b157 +Block 0010 [ 4]: ab7db2b1fc378e9a +Block 0010 [ 5]: c97048fe8a2f5f4a +Block 0010 [ 6]: cba30aaab4ef2f74 +Block 0010 [ 7]: 56efcefbc8806464 +Block 0010 [ 8]: 47488cad6c56f9d0 +Block 0010 [ 9]: 5d99c80238f6ab3d +Block 0010 [ 10]: 2aaac7c0e0b8d7b2 +Block 0010 [ 11]: 54677ec26bdc9712 +Block 0010 [ 12]: 1aab36f7d8d09dbc +Block 0010 [ 13]: f437d5d7483ec013 +Block 0010 [ 14]: 707edb42a8a784d0 +Block 0010 [ 15]: e594c41a0b98992f +Block 0010 [ 16]: dbb919a6e327f5ac +Block 0010 [ 17]: 83bb58fbec7087d4 +Block 0010 [ 18]: 6cf134c837408aa5 +Block 0010 [ 19]: d871df3877e67200 +Block 0010 [ 20]: aa09bbdc731bec8c +Block 0010 [ 21]: 397bd2b0904d0eb4 +Block 0010 [ 22]: 12e5d0c755e90680 +Block 0010 [ 23]: 646867347d61108d +Block 0010 [ 24]: ae575603915fed70 +Block 0010 [ 25]: 963882db4d43ed3e +Block 0010 [ 26]: 331347bff0ca99fb +Block 0010 [ 27]: 85ec009fe77bbdf2 +Block 0010 [ 28]: 084715d977901d19 +Block 0010 [ 29]: 5d70ffa2c7e8fcd0 +Block 0010 [ 30]: aae90dd8c199a885 +Block 0010 [ 31]: 094f2087a840c4c3 +Block 0010 [ 32]: 78970a09ff9119ee +Block 0010 [ 33]: 19164104a0809a35 +Block 0010 [ 34]: 67cf795053fc548f +Block 0010 [ 35]: 15d39628c9533f25 +Block 0010 [ 36]: a8521d7d68c133f9 +Block 0010 [ 37]: da48eb5cbd765e6e +Block 0010 [ 38]: 1c4dbae1e77c7698 +Block 0010 [ 39]: 693ffe0f2fe3fe1d +Block 0010 [ 40]: 2d1edc2b4a72a1df +Block 0010 [ 41]: 8e561749154aad0e +Block 0010 [ 42]: 0fd72e31af0b850c +Block 0010 [ 43]: 165f1c19fbebadfe +Block 0010 [ 44]: b26ee88a45cb6beb +Block 0010 [ 45]: c0e826858ed46223 +Block 0010 [ 46]: f992b123f14f1cab +Block 0010 [ 47]: 8a347ffa03d4829d +Block 0010 [ 48]: 1c7682e743b0584d +Block 0010 [ 49]: 2d0ae08ec8c7aa45 +Block 0010 [ 50]: 01e6d7667bd54686 +Block 0010 [ 51]: 8f95e476ebd46d17 +Block 0010 [ 52]: 94ef46dbbba5d43f +Block 0010 [ 53]: 8d29e31a9f4cc10b +Block 0010 [ 54]: 1be3ba26e8284d00 +Block 0010 [ 55]: ad2cef78f2a69fbf +Block 0010 [ 56]: a10dfde3deac51a0 +Block 0010 [ 57]: 36376969357596b8 +Block 0010 [ 58]: c2d33dca853ea6a1 +Block 0010 [ 59]: 628d33bcabbefbef +Block 0010 [ 60]: f40ff3b9ccc10e17 +Block 0010 [ 61]: 1e5528923919f862 +Block 0010 [ 62]: 414e61378799210e +Block 0010 [ 63]: 62a81dce51d609a7 +Block 0010 [ 64]: 096e77f5d7249666 +Block 0010 [ 65]: 47820b3a33cd71d3 +Block 0010 [ 66]: 0bd5d6025f579a6c +Block 0010 [ 67]: a9fa38990d42aca5 +Block 0010 [ 68]: 27bd9b1bd1097a06 +Block 0010 [ 69]: 03dafb3b4f0a4028 +Block 0010 [ 70]: 5fb19963de1e3de9 +Block 0010 [ 71]: 4939211959107034 +Block 0010 [ 72]: 666da05a2d74db1c +Block 0010 [ 73]: f19cf56f0a6c1655 +Block 0010 [ 74]: 92c4b322f190d295 +Block 0010 [ 75]: 9ad74d6c542b329d +Block 0010 [ 76]: 989f4d9fa7c577ba +Block 0010 [ 77]: 225b7af5faafe2a4 +Block 0010 [ 78]: 5aa9ea1a78ec99e8 +Block 0010 [ 79]: 228e7be67b366548 +Block 0010 [ 80]: 150b81a49ddc73c6 +Block 0010 [ 81]: 2686be4153716d63 +Block 0010 [ 82]: ffebb344c1e28f03 +Block 0010 [ 83]: b08324cad8a5226d +Block 0010 [ 84]: 8d6d3d47c0d054ca +Block 0010 [ 85]: 3e184784291a476d +Block 0010 [ 86]: 32f84fc587b2c6b0 +Block 0010 [ 87]: a2b2b8f1589defd7 +Block 0010 [ 88]: 54977641b62ca3f6 +Block 0010 [ 89]: a28f16c81a04dc04 +Block 0010 [ 90]: 305249ff2c268843 +Block 0010 [ 91]: b1e0bd99bdb4c0bd +Block 0010 [ 92]: 7cf0826d7d7e0da9 +Block 0010 [ 93]: 52754123e360fc24 +Block 0010 [ 94]: 0526df5315c972ce +Block 0010 [ 95]: 99b71c3b595c570d +Block 0010 [ 96]: 3813b5c8bf718f26 +Block 0010 [ 97]: cc36301d8c899aca +Block 0010 [ 98]: a4de37d02e4590bf +Block 0010 [ 99]: 6f82a145af50d633 +Block 0010 [100]: de36d308ff4ef542 +Block 0010 [101]: 9a33a513b52c8d89 +Block 0010 [102]: ab2d45c941001698 +Block 0010 [103]: de21774c3a9e5d89 +Block 0010 [104]: 382200ec936fd74d +Block 0010 [105]: dd8d3ae52c7715fd +Block 0010 [106]: 842c4259c643aa09 +Block 0010 [107]: 0b829f3180e13902 +Block 0010 [108]: cec67d91ad380b93 +Block 0010 [109]: 4dc4beebbb42a6f5 +Block 0010 [110]: 5be736664c2d8d83 +Block 0010 [111]: e2f1024ba77d28fb +Block 0010 [112]: 81b0bb61533210ec +Block 0010 [113]: f83a00c51e3d5f38 +Block 0010 [114]: 7db95cbd56f98dcd +Block 0010 [115]: ee9f7501afa33446 +Block 0010 [116]: df7a7cf05087effe +Block 0010 [117]: 008776f8c2bb79ef +Block 0010 [118]: 64f2536d4fddec8a +Block 0010 [119]: 42233a0aaa87bd28 +Block 0010 [120]: aa47058137b994c5 +Block 0010 [121]: 79deaf8cb75ceefa +Block 0010 [122]: 88f20958cc05a49c +Block 0010 [123]: 2e3801065fdccaee +Block 0010 [124]: 53f1c983bea4c1ad +Block 0010 [125]: 6f75ee8921399ac7 +Block 0010 [126]: e1ef4f82c909106b +Block 0010 [127]: 2ad0bc617385b62e +Block 0011 [ 0]: 84a8bbec5e9ee507 +Block 0011 [ 1]: e8a03a4136c62548 +Block 0011 [ 2]: d6d377ef5a53f910 +Block 0011 [ 3]: 661ba9468903274e +Block 0011 [ 4]: 159beb64d3f0bc11 +Block 0011 [ 5]: 43118ec42adbd446 +Block 0011 [ 6]: c0f8908e19fdc2eb +Block 0011 [ 7]: 9f6c9cbf9f38a396 +Block 0011 [ 8]: ff27ec0e5b15b35b +Block 0011 [ 9]: a3c32c3786f7abed +Block 0011 [ 10]: de7a4b557b81bcd4 +Block 0011 [ 11]: 47f34f0379397d03 +Block 0011 [ 12]: a28b5dcc934a73ae +Block 0011 [ 13]: e5f091472cb1bfa1 +Block 0011 [ 14]: 21cface025922c20 +Block 0011 [ 15]: 34243b1d719f51b1 +Block 0011 [ 16]: 4646e791e97f3067 +Block 0011 [ 17]: 2c4737e43fc46a7c +Block 0011 [ 18]: 37576580cb2492c5 +Block 0011 [ 19]: 79f8b1d97f0e8175 +Block 0011 [ 20]: 54a860d192f9aa2c +Block 0011 [ 21]: 407cda5ad8c11036 +Block 0011 [ 22]: ea47f0af4b9e5a9a +Block 0011 [ 23]: 755da21d178d3913 +Block 0011 [ 24]: 3d220cc9bdc29123 +Block 0011 [ 25]: 890994f162b2fcb5 +Block 0011 [ 26]: 0ecd9a8a8ba69663 +Block 0011 [ 27]: 792867585bc69059 +Block 0011 [ 28]: 099c4e35d90e319b +Block 0011 [ 29]: f68ee3ac82745acb +Block 0011 [ 30]: 715ceab2ace61477 +Block 0011 [ 31]: add36ee92d210fd9 +Block 0011 [ 32]: 8941e202a8ac2505 +Block 0011 [ 33]: 337cbdd068139e15 +Block 0011 [ 34]: 493cc70a9def9bae +Block 0011 [ 35]: 726fa6f389708a0c +Block 0011 [ 36]: 791b092018711bae +Block 0011 [ 37]: ff5f50b1219a362e +Block 0011 [ 38]: 637297cc8f5aca78 +Block 0011 [ 39]: 384420634789c4da +Block 0011 [ 40]: da3e44be4ac76889 +Block 0011 [ 41]: 48394be7eeba3e3e +Block 0011 [ 42]: e176657fb6b322b8 +Block 0011 [ 43]: c513ffedae4caad1 +Block 0011 [ 44]: 4ddbc4eac9242fc7 +Block 0011 [ 45]: 362645696d67c92d +Block 0011 [ 46]: 95570dee7ffafff2 +Block 0011 [ 47]: 8f3b2a3d572a1ed0 +Block 0011 [ 48]: a79e0894ca3d905a +Block 0011 [ 49]: dce9aa88d8a9d75b +Block 0011 [ 50]: 2a82a5435a689d82 +Block 0011 [ 51]: 32d286f29f37cacf +Block 0011 [ 52]: b19ce4dca4005b60 +Block 0011 [ 53]: 40847a0db8fe5e34 +Block 0011 [ 54]: 6138dcc695f94762 +Block 0011 [ 55]: 491328f6caa72814 +Block 0011 [ 56]: d0b86718c90f93a6 +Block 0011 [ 57]: 48640b60a60db10b +Block 0011 [ 58]: ba701372be54710c +Block 0011 [ 59]: e89bf12522b18b59 +Block 0011 [ 60]: a0a5d8654266c996 +Block 0011 [ 61]: afe130022ad9628f +Block 0011 [ 62]: dd319661eb7f7aad +Block 0011 [ 63]: 98bf04f183e0b0bd +Block 0011 [ 64]: 521f230536266d1b +Block 0011 [ 65]: 4c964a1ca31865cf +Block 0011 [ 66]: 7983f4550bc3d6d2 +Block 0011 [ 67]: 0e164c3fbce581f2 +Block 0011 [ 68]: 637686674de50ddf +Block 0011 [ 69]: a19d2b703b28c51d +Block 0011 [ 70]: c504278031ca23f3 +Block 0011 [ 71]: 9026013bac4a5535 +Block 0011 [ 72]: 652a23d15b9afe84 +Block 0011 [ 73]: 2d45fc40abd2c9e6 +Block 0011 [ 74]: 0d920ca47339da99 +Block 0011 [ 75]: 19f051f1f60130b4 +Block 0011 [ 76]: e608f533dcd7a6e1 +Block 0011 [ 77]: 4d59c7dacc856135 +Block 0011 [ 78]: cdcc9c8f0b17ebfc +Block 0011 [ 79]: bb13ab77aeb72e83 +Block 0011 [ 80]: c5900c3d399e428d +Block 0011 [ 81]: ab7bd462910e6519 +Block 0011 [ 82]: f7dbc144cc0076c3 +Block 0011 [ 83]: 5d80b17f4bc6ccda +Block 0011 [ 84]: 55c0c5e537ee7d11 +Block 0011 [ 85]: f305d86abf28d135 +Block 0011 [ 86]: 668f8c1e60a8fffa +Block 0011 [ 87]: 8e6e92f12139d3e0 +Block 0011 [ 88]: 90b32c3b5e579f75 +Block 0011 [ 89]: 4804297542b36066 +Block 0011 [ 90]: 0d1933319e2a7ff9 +Block 0011 [ 91]: 290f8644fbf35131 +Block 0011 [ 92]: b358a81c7060c4fc +Block 0011 [ 93]: 45b588b79be669a3 +Block 0011 [ 94]: 31baa98245901537 +Block 0011 [ 95]: acd49bf29b0b0634 +Block 0011 [ 96]: 6d3f843799ff6816 +Block 0011 [ 97]: 26326dfc3bbbab3a +Block 0011 [ 98]: 9242f6493a116b59 +Block 0011 [ 99]: 67502898e5348f84 +Block 0011 [100]: 23571627a7c9d9e0 +Block 0011 [101]: 4d886d318333c3ee +Block 0011 [102]: 20ddc8838c57eccd +Block 0011 [103]: e601082750c1a449 +Block 0011 [104]: 7aa1f0317c03160a +Block 0011 [105]: 51b365b732b327db +Block 0011 [106]: e0763a1f51c3bb8f +Block 0011 [107]: ab1584266689907b +Block 0011 [108]: 389e5c3adfd8185e +Block 0011 [109]: c6442e5b62ed24d6 +Block 0011 [110]: 50af38d5cf0f09b5 +Block 0011 [111]: 1008d4f64bfc0129 +Block 0011 [112]: a364e313e91732fe +Block 0011 [113]: b226645180d50df3 +Block 0011 [114]: f163bc669cf4b70e +Block 0011 [115]: 187ce08474232ec3 +Block 0011 [116]: 59dd06d3949824d2 +Block 0011 [117]: 8bf0b3a673af1ab3 +Block 0011 [118]: c8b5d0c652513b9b +Block 0011 [119]: 76c43e6630c174ca +Block 0011 [120]: 8dc908bb6c08c8b4 +Block 0011 [121]: 0c76121879f3f9e2 +Block 0011 [122]: a9a9c39976c5da9a +Block 0011 [123]: 509e26ce42034853 +Block 0011 [124]: 9276f4686d96bab6 +Block 0011 [125]: 61bd632fddc5381c +Block 0011 [126]: af2cc8c6499fce15 +Block 0011 [127]: 55322a996015ca7e +Block 0012 [ 0]: 2de6a260b3dc7033 +Block 0012 [ 1]: b199b1c2a33061bc +Block 0012 [ 2]: 6934301e1592cc31 +Block 0012 [ 3]: 08329482bbd037a3 +Block 0012 [ 4]: 3b74c1c774a7c3ea +Block 0012 [ 5]: 29039e3efa32b00e +Block 0012 [ 6]: b71c527205dc00df +Block 0012 [ 7]: c0f4b25c94f538b0 +Block 0012 [ 8]: eca61e402daa6569 +Block 0012 [ 9]: ba4db20991e9824c +Block 0012 [ 10]: 3e869f7935d4a0d8 +Block 0012 [ 11]: 0b6273fb4e41db98 +Block 0012 [ 12]: a0f161fd742126cd +Block 0012 [ 13]: 163b553fa996c120 +Block 0012 [ 14]: 03519d81912f1029 +Block 0012 [ 15]: c8dace89c4d03838 +Block 0012 [ 16]: ea6b9219f18405a9 +Block 0012 [ 17]: 373bb78358988878 +Block 0012 [ 18]: bcd325dcfd7ceea5 +Block 0012 [ 19]: d2f1d6173a7ff965 +Block 0012 [ 20]: 947458a9bd5311e7 +Block 0012 [ 21]: 4a59302fc6fd2b1f +Block 0012 [ 22]: 78b06821a947c9b6 +Block 0012 [ 23]: 6f6089d041ec1ab6 +Block 0012 [ 24]: 52054e7c6e7d1dd3 +Block 0012 [ 25]: e08e2601656dac82 +Block 0012 [ 26]: bb4c9839ecfc7208 +Block 0012 [ 27]: 641f5afddf424d36 +Block 0012 [ 28]: 3b4433461c77cb42 +Block 0012 [ 29]: 4958d19b9f87a1d6 +Block 0012 [ 30]: dce1d42c81cf32bb +Block 0012 [ 31]: 919d8b4967b1c11d +Block 0012 [ 32]: 5483f958324ea9cc +Block 0012 [ 33]: e58572e35d604799 +Block 0012 [ 34]: 0f11afd06441b2ac +Block 0012 [ 35]: 9d32367932b3beef +Block 0012 [ 36]: be8229b34b4cce48 +Block 0012 [ 37]: 627d429986fd97a7 +Block 0012 [ 38]: f4d35eec751273f2 +Block 0012 [ 39]: 5cd90b57ccccc552 +Block 0012 [ 40]: 136897ab6168509e +Block 0012 [ 41]: 52e93c6b812b7c55 +Block 0012 [ 42]: 21b61e3e8248e02f +Block 0012 [ 43]: 80665bbe9536995b +Block 0012 [ 44]: 4ad516ad1744af03 +Block 0012 [ 45]: 58904e9d8d3bc697 +Block 0012 [ 46]: 20447941272fcfaf +Block 0012 [ 47]: 653141cbebb72f86 +Block 0012 [ 48]: de9a2934bef33099 +Block 0012 [ 49]: f05298f7aecaff8f +Block 0012 [ 50]: 6ad7aa44563c7750 +Block 0012 [ 51]: a354661a945226e9 +Block 0012 [ 52]: aade90283df08ab4 +Block 0012 [ 53]: 6ad86b10a2edb467 +Block 0012 [ 54]: 9cb6246359729643 +Block 0012 [ 55]: 5e775696928d0575 +Block 0012 [ 56]: 223c0aeeeaf88eb9 +Block 0012 [ 57]: b535c81ea45b395f +Block 0012 [ 58]: 7b3b6a488b140e18 +Block 0012 [ 59]: 78e63df0f33c4298 +Block 0012 [ 60]: 71626f7696d02487 +Block 0012 [ 61]: 33d189e34208a296 +Block 0012 [ 62]: 5b8628463bb8370e +Block 0012 [ 63]: 3d5297daeb8f37b4 +Block 0012 [ 64]: a15e54b4218955b2 +Block 0012 [ 65]: 51df554a50dd1ac5 +Block 0012 [ 66]: 469ebeeabe5cfa14 +Block 0012 [ 67]: af41090cd43b27c9 +Block 0012 [ 68]: 3dfc7c9a5249e757 +Block 0012 [ 69]: 8083dc62d2141666 +Block 0012 [ 70]: 2d0c10b32040a47e +Block 0012 [ 71]: 4f2f846df18c4408 +Block 0012 [ 72]: 645797be6008bdd9 +Block 0012 [ 73]: f884a7fb4b143954 +Block 0012 [ 74]: a98762ac97397fa2 +Block 0012 [ 75]: 36d8803c36f9d2fd +Block 0012 [ 76]: 8b29f727011addc1 +Block 0012 [ 77]: dbffb03d24c3da4f +Block 0012 [ 78]: 39daa7f462274b2f +Block 0012 [ 79]: 252aa6b07d2cc934 +Block 0012 [ 80]: 767071afdb1e350a +Block 0012 [ 81]: ed9a4efa0c0eb3f9 +Block 0012 [ 82]: 927fec2ec528d3e6 +Block 0012 [ 83]: 53a883fc6082b6b5 +Block 0012 [ 84]: 905abef6eb87256e +Block 0012 [ 85]: 78275c32b72139bf +Block 0012 [ 86]: 41bb9cfdf54b0482 +Block 0012 [ 87]: 3ebfdd007aadc9d1 +Block 0012 [ 88]: dd663de48827a68a +Block 0012 [ 89]: 0d429c3e4c10e1a5 +Block 0012 [ 90]: 8831e3e39090d478 +Block 0012 [ 91]: 872a68049b31b16d +Block 0012 [ 92]: 678981f3eba99ec9 +Block 0012 [ 93]: 948493a87aa77acc +Block 0012 [ 94]: 2cb67e3f3624efb7 +Block 0012 [ 95]: 159ba09c46348a0a +Block 0012 [ 96]: a6df6afbf948c76f +Block 0012 [ 97]: 5f3660d91d0610f0 +Block 0012 [ 98]: e10c380a75c30731 +Block 0012 [ 99]: a3380d1cb4baac6c +Block 0012 [100]: 412122860cd829d8 +Block 0012 [101]: 3d72e351561446cb +Block 0012 [102]: 0d5785e0927ba58a +Block 0012 [103]: 93c450bd6c5408f9 +Block 0012 [104]: c8355b234469e077 +Block 0012 [105]: 8c8c40d89ddec43a +Block 0012 [106]: f3691d1d60862edc +Block 0012 [107]: 9c065215f0575b2c +Block 0012 [108]: d04fa24b788a01ce +Block 0012 [109]: 64964611c2d67b52 +Block 0012 [110]: 34bdcf3613501bb2 +Block 0012 [111]: 39a15e92d0bcb765 +Block 0012 [112]: 84e3e3bd76d195a2 +Block 0012 [113]: 652826ce38d4132a +Block 0012 [114]: a7f30b86b195a2d9 +Block 0012 [115]: f5a9c54cd5550a81 +Block 0012 [116]: 86732d95071189b9 +Block 0012 [117]: dc95387282aace54 +Block 0012 [118]: d563b5079fbeb7d3 +Block 0012 [119]: 17cc96cb016981f6 +Block 0012 [120]: f944e8e5437e9952 +Block 0012 [121]: 37bafa81c06d834f +Block 0012 [122]: 22e4666dcab7f6fa +Block 0012 [123]: 233e45542ee96524 +Block 0012 [124]: 8a3f7acfe023efce +Block 0012 [125]: d477d8b3fb298a6c +Block 0012 [126]: 6d75071da1c053df +Block 0012 [127]: c093ab77397d2a75 +Block 0013 [ 0]: c934e1166fb27497 +Block 0013 [ 1]: c21b829ec1ba75ef +Block 0013 [ 2]: 1812447326ab1f03 +Block 0013 [ 3]: bc5755813b65d394 +Block 0013 [ 4]: 0c55b69fe830401e +Block 0013 [ 5]: f4c57cba458e7b69 +Block 0013 [ 6]: c62cbc15e1273ca6 +Block 0013 [ 7]: 4a15f61d64f24324 +Block 0013 [ 8]: 45a16d7ed87dac30 +Block 0013 [ 9]: 5a042bd17950b220 +Block 0013 [ 10]: 7439bea3d54b3792 +Block 0013 [ 11]: 3e1cfaf0e1b4f0f0 +Block 0013 [ 12]: 79b74477b3b8f188 +Block 0013 [ 13]: a15569fed14e9e1e +Block 0013 [ 14]: 38b701e8bfdfe751 +Block 0013 [ 15]: acdd26a445547733 +Block 0013 [ 16]: 004c8807ca75f2f9 +Block 0013 [ 17]: e7773758ddf0e773 +Block 0013 [ 18]: c17a446f90fb41cf +Block 0013 [ 19]: 2f39aa5712f469c0 +Block 0013 [ 20]: 68e1b4e5a9499402 +Block 0013 [ 21]: 957b2873c2f3338d +Block 0013 [ 22]: d4df5d49fbd9ed5a +Block 0013 [ 23]: e50d7395f7621dbf +Block 0013 [ 24]: 438023a14c97b6fd +Block 0013 [ 25]: aacac0eff810b018 +Block 0013 [ 26]: b3aea30d6fe91e2c +Block 0013 [ 27]: c584091675cc073f +Block 0013 [ 28]: ed36a29bf348e46f +Block 0013 [ 29]: acf0f6ff411f229e +Block 0013 [ 30]: 5d23587357b2ed19 +Block 0013 [ 31]: a7ec3719369e365a +Block 0013 [ 32]: f5ffc8f0c71cec6d +Block 0013 [ 33]: 2a1c6c9deb0fd24c +Block 0013 [ 34]: e1acb5bcfcb18757 +Block 0013 [ 35]: eac5c6ddb44af556 +Block 0013 [ 36]: 4dd3d82cac986cb7 +Block 0013 [ 37]: fe391a158b6ed299 +Block 0013 [ 38]: 911b2e37380edc23 +Block 0013 [ 39]: 3b0d4717aa0f1bf2 +Block 0013 [ 40]: 76db16591771fa79 +Block 0013 [ 41]: 311532f58f784756 +Block 0013 [ 42]: f53186855bac398c +Block 0013 [ 43]: 0bb05e55b79f24f3 +Block 0013 [ 44]: 5da0c076d4e66f1b +Block 0013 [ 45]: e7019aa47334131c +Block 0013 [ 46]: fa128e2a0ba6ea05 +Block 0013 [ 47]: a56fb7281e59f0d3 +Block 0013 [ 48]: 2dec34f65a6d6ceb +Block 0013 [ 49]: 846008f66a2e1bd8 +Block 0013 [ 50]: b722b27b2137e16a +Block 0013 [ 51]: 9158ec8c8966460b +Block 0013 [ 52]: 9be7de535630b177 +Block 0013 [ 53]: ac2f5e16909b6e24 +Block 0013 [ 54]: b5df85fe74b20693 +Block 0013 [ 55]: 360e07ff6b7e8bc6 +Block 0013 [ 56]: 2837a8ebf9aea4df +Block 0013 [ 57]: 755f9c69267634b5 +Block 0013 [ 58]: ea0b7c1912ae0ddb +Block 0013 [ 59]: 59a785481d7e94d2 +Block 0013 [ 60]: 02028a280cbf45a5 +Block 0013 [ 61]: 6b346c9114292b86 +Block 0013 [ 62]: 5ca8c8c68c670efa +Block 0013 [ 63]: 56b101657ac927a6 +Block 0013 [ 64]: ed2918c587aacf9b +Block 0013 [ 65]: ac661ef81f54d2df +Block 0013 [ 66]: 2bf19454b9253bf1 +Block 0013 [ 67]: b20e9398e7f84a5c +Block 0013 [ 68]: 82f05894b799e79c +Block 0013 [ 69]: ea7c2be4af767103 +Block 0013 [ 70]: b2864d47c9263edf +Block 0013 [ 71]: 822aec5441d8f031 +Block 0013 [ 72]: 1c2d2a70e5462d44 +Block 0013 [ 73]: 8b7f3a74a8194379 +Block 0013 [ 74]: 851d2805a7713935 +Block 0013 [ 75]: de57ab09d60d7670 +Block 0013 [ 76]: 150c1158ad23a5c7 +Block 0013 [ 77]: 3330b89c2ad3aa29 +Block 0013 [ 78]: 6996229e973d6fa8 +Block 0013 [ 79]: ac4a5134dd9ce25b +Block 0013 [ 80]: 170b80b260896799 +Block 0013 [ 81]: 9338012e71e3c028 +Block 0013 [ 82]: 2ffe8997c5501b2e +Block 0013 [ 83]: 3b508d7e08a587c4 +Block 0013 [ 84]: 1660331d4211cd03 +Block 0013 [ 85]: ddbddd90efbb854a +Block 0013 [ 86]: 2d19e60c554775cf +Block 0013 [ 87]: 7232777bb83c8091 +Block 0013 [ 88]: ae26f1d73ef906e2 +Block 0013 [ 89]: 0d0e0a3f9e33ecab +Block 0013 [ 90]: 3000d316d97d6ab3 +Block 0013 [ 91]: 3a0b66d12607e7de +Block 0013 [ 92]: 4b27c6b67ea6e15a +Block 0013 [ 93]: ab0dcdc3cf1999dc +Block 0013 [ 94]: 0285ba539708330e +Block 0013 [ 95]: 6427a3253ed229bf +Block 0013 [ 96]: 90594375f4cccd87 +Block 0013 [ 97]: b333fded244366f2 +Block 0013 [ 98]: a2aabc7bdfac9070 +Block 0013 [ 99]: 6be0afc5e0da2a78 +Block 0013 [100]: df9cf2b977e9fb08 +Block 0013 [101]: b13b6ab3692afa87 +Block 0013 [102]: ef38da964aef5164 +Block 0013 [103]: 7d02336c83eeb32d +Block 0013 [104]: d1dc7212202f4f3b +Block 0013 [105]: 55b795c3fb9d1d03 +Block 0013 [106]: 7bdc41fb15eea35a +Block 0013 [107]: c9c4b30e5bf50128 +Block 0013 [108]: 91699e9a73f24915 +Block 0013 [109]: 52c57d8c079bb422 +Block 0013 [110]: dab261157b8fd9d2 +Block 0013 [111]: fb51df0782c97c8c +Block 0013 [112]: ee63f89968c75234 +Block 0013 [113]: ce6aa08a457d9185 +Block 0013 [114]: 5c5b86551c42ca2e +Block 0013 [115]: 086d3b05312ef786 +Block 0013 [116]: eac057b016da257c +Block 0013 [117]: 7fae02b887d2cf96 +Block 0013 [118]: 49d9276493017238 +Block 0013 [119]: f8100fbad4b197f6 +Block 0013 [120]: d5fefd5c94672f5c +Block 0013 [121]: 57f41f71207b5bb5 +Block 0013 [122]: 3177eddf189dfefa +Block 0013 [123]: feb8bc98df27321f +Block 0013 [124]: b8aa1e5a76155617 +Block 0013 [125]: 568b228968f816d5 +Block 0013 [126]: e9d3c5ffe55a95b4 +Block 0013 [127]: 18c9f13295493060 +Block 0014 [ 0]: 751611a6dca217ef +Block 0014 [ 1]: f30d5326133f623f +Block 0014 [ 2]: 3348d361099f0d4c +Block 0014 [ 3]: 2efcfc874a138a09 +Block 0014 [ 4]: de42be1bb44d2dca +Block 0014 [ 5]: a626d8e36a9b0811 +Block 0014 [ 6]: 621d28f13cb2b6ba +Block 0014 [ 7]: 7aad6051000015fe +Block 0014 [ 8]: dd095ff42875292a +Block 0014 [ 9]: 801ee2fa2c5a64c6 +Block 0014 [ 10]: a2e0b624ee27581c +Block 0014 [ 11]: 01a1484d67c0f465 +Block 0014 [ 12]: 35bb3ad0a791c30c +Block 0014 [ 13]: 0d5eb3bd17797601 +Block 0014 [ 14]: 5bc25c1b31a89dbb +Block 0014 [ 15]: 24260bacab7442a7 +Block 0014 [ 16]: 177a9da3c6fcdea9 +Block 0014 [ 17]: d10744177252796c +Block 0014 [ 18]: 96892f2c00e816c2 +Block 0014 [ 19]: 87f1a18e861985db +Block 0014 [ 20]: 8f689942a92c0238 +Block 0014 [ 21]: dfbdc178de50e5a3 +Block 0014 [ 22]: bcd2f6bedc6cd773 +Block 0014 [ 23]: c01d8d73958f7fdf +Block 0014 [ 24]: af5e13a4d7875042 +Block 0014 [ 25]: c314e5fd4c872732 +Block 0014 [ 26]: b0efedef8a761145 +Block 0014 [ 27]: f4d46eddf74bfac0 +Block 0014 [ 28]: c85753d308fdcfb9 +Block 0014 [ 29]: 81be18ed087bc898 +Block 0014 [ 30]: b747d4c1e2d1321c +Block 0014 [ 31]: 3aebf5d50792e57f +Block 0014 [ 32]: fc1ef0d9219ec253 +Block 0014 [ 33]: e9280df09e9c11b7 +Block 0014 [ 34]: 994e37fe7614467f +Block 0014 [ 35]: 658cb28441ef2bd3 +Block 0014 [ 36]: da96518ad4a20c83 +Block 0014 [ 37]: 3b772763462c7f90 +Block 0014 [ 38]: 250390de0658fb04 +Block 0014 [ 39]: 07f7f41163308f82 +Block 0014 [ 40]: e28525fd41a4c30f +Block 0014 [ 41]: 0eabece269b5cbc6 +Block 0014 [ 42]: e14a2544deacd381 +Block 0014 [ 43]: e37ca1a406f2ee67 +Block 0014 [ 44]: 6efd3c0c1f01593a +Block 0014 [ 45]: b8bc58787428afbb +Block 0014 [ 46]: 714b0631106ebe7e +Block 0014 [ 47]: c3e96745f00db12f +Block 0014 [ 48]: ab68f71a401fbb43 +Block 0014 [ 49]: bb575726d4f2fd1a +Block 0014 [ 50]: a341648f21481b2f +Block 0014 [ 51]: bb6a9a5259ef911b +Block 0014 [ 52]: c9cea2228263bfb2 +Block 0014 [ 53]: c7f334b5bcd959de +Block 0014 [ 54]: e45a55828ebfaa40 +Block 0014 [ 55]: 6a630d357bacb358 +Block 0014 [ 56]: e36896f02c834c8d +Block 0014 [ 57]: 0aaa0006f56d9259 +Block 0014 [ 58]: 4b5c1d7ab0e03775 +Block 0014 [ 59]: 542dcdcb6922bf5e +Block 0014 [ 60]: b4cbccf8d655d557 +Block 0014 [ 61]: 22e9550073a55847 +Block 0014 [ 62]: 4d81e363a0bc3d7d +Block 0014 [ 63]: 88888fd834353993 +Block 0014 [ 64]: 3d24cdc7e52b1201 +Block 0014 [ 65]: 3d8b52965b0135a7 +Block 0014 [ 66]: cc9d378ef8def398 +Block 0014 [ 67]: bfa7c266b6442afa +Block 0014 [ 68]: 111e8c3e0da7dd1c +Block 0014 [ 69]: c5912da214c3b084 +Block 0014 [ 70]: 20e58f7585611c9a +Block 0014 [ 71]: 9f15f86d137b6a6a +Block 0014 [ 72]: 6f7a6213f30baf69 +Block 0014 [ 73]: 37fcf232b3e00ca5 +Block 0014 [ 74]: 05931457c9dac739 +Block 0014 [ 75]: 571448470ca168e9 +Block 0014 [ 76]: c27d607587d72d6c +Block 0014 [ 77]: 40d94f8aa07fd0f5 +Block 0014 [ 78]: 485dae40764e0136 +Block 0014 [ 79]: bddd055e69aa3228 +Block 0014 [ 80]: 80847e77d994fbcf +Block 0014 [ 81]: 2205602d7c7880a6 +Block 0014 [ 82]: 01b57845dc15aac7 +Block 0014 [ 83]: 0bcad09546e5910c +Block 0014 [ 84]: 822ed733aad0d4be +Block 0014 [ 85]: 36eff814bdbcce2a +Block 0014 [ 86]: d34eb84e1859a50a +Block 0014 [ 87]: 492482efab353be1 +Block 0014 [ 88]: c873ea2b88095564 +Block 0014 [ 89]: ea34805735c0e69b +Block 0014 [ 90]: 282dbc532a16f0b2 +Block 0014 [ 91]: 9d73a4d2b509f4ed +Block 0014 [ 92]: cbffe1430b613d50 +Block 0014 [ 93]: 5e76863adb84a188 +Block 0014 [ 94]: d54b2945b9d2bfd8 +Block 0014 [ 95]: eefee9aa2903e333 +Block 0014 [ 96]: 848e77aa097cad40 +Block 0014 [ 97]: fb9d26b96a14e021 +Block 0014 [ 98]: 1f2786497b51402f +Block 0014 [ 99]: 935d85b4dec778fa +Block 0014 [100]: 9f4c19a556583adc +Block 0014 [101]: 51b5266e1d568092 +Block 0014 [102]: e8857d4a180ea62c +Block 0014 [103]: 4dba7f4d5841f89c +Block 0014 [104]: 7fda01ec3ebe7925 +Block 0014 [105]: 4f81b02917212b96 +Block 0014 [106]: 0ef65535cb286212 +Block 0014 [107]: b2f2b7d55afd99cd +Block 0014 [108]: 0925aedc2dbed1e9 +Block 0014 [109]: 5e1427758f2d88d6 +Block 0014 [110]: 0a6dd2a5c2cd029f +Block 0014 [111]: 7de7196e1f00f1db +Block 0014 [112]: fa98e1bbc7c10663 +Block 0014 [113]: f289964e052b1262 +Block 0014 [114]: 1e283e3fd3c0d4fa +Block 0014 [115]: 7c9aa9705eb22b96 +Block 0014 [116]: f3bb07922a5d2279 +Block 0014 [117]: 34a8fcefce841ade +Block 0014 [118]: 0709034e1c06baa2 +Block 0014 [119]: 598a4c2c1c07c589 +Block 0014 [120]: 26d5573b1775fb83 +Block 0014 [121]: 9cc4fd42c8865d4f +Block 0014 [122]: cfcbe0a59328c84a +Block 0014 [123]: 6bb349e66195498b +Block 0014 [124]: 4be2f84e7f1a4bb7 +Block 0014 [125]: 625a08a3e55cc7ba +Block 0014 [126]: 703ca94204f1eb2e +Block 0014 [127]: ba100657462ad47b +Block 0015 [ 0]: 90f9cf97fdfb1212 +Block 0015 [ 1]: 4ebfd0eb7bde74fe +Block 0015 [ 2]: 5d4892b667d8fb9a +Block 0015 [ 3]: eee897de87730152 +Block 0015 [ 4]: bd8707434bfeaa0a +Block 0015 [ 5]: fd8aee451c60cd9d +Block 0015 [ 6]: c58c0e0ffcaaea7b +Block 0015 [ 7]: 03e0436c90051504 +Block 0015 [ 8]: 7ed836946cee6ad8 +Block 0015 [ 9]: 8b156f73ee007bdf +Block 0015 [ 10]: d541428ece1acb9e +Block 0015 [ 11]: c7a395429389dc5a +Block 0015 [ 12]: 010f3d509e0d6821 +Block 0015 [ 13]: 5fb4c498d4416f4c +Block 0015 [ 14]: 319941fd256f4759 +Block 0015 [ 15]: de2ecefec27cbf7a +Block 0015 [ 16]: ab5295b324401b40 +Block 0015 [ 17]: a41144e0c61bb357 +Block 0015 [ 18]: bf8edc2253a1dda5 +Block 0015 [ 19]: b6b3236c2bf5e09c +Block 0015 [ 20]: a41a3ebdf0eb9f03 +Block 0015 [ 21]: f037384bd85667d9 +Block 0015 [ 22]: cd3b6163484a9319 +Block 0015 [ 23]: de534447766d1f29 +Block 0015 [ 24]: 8c8cdb1d34d34914 +Block 0015 [ 25]: 11541705e8bcb3b2 +Block 0015 [ 26]: 801b40db1cd0a376 +Block 0015 [ 27]: 15ce882abff4aeb6 +Block 0015 [ 28]: 0b4eccb36e5447ce +Block 0015 [ 29]: 9305728451875b90 +Block 0015 [ 30]: d2640809e3215ee4 +Block 0015 [ 31]: cbd0dfb61bc5f357 +Block 0015 [ 32]: 1423c16dd0dec029 +Block 0015 [ 33]: d6dbef65de65761e +Block 0015 [ 34]: eb9546f8f440b03d +Block 0015 [ 35]: 25626b0b8c94132f +Block 0015 [ 36]: b6399c16cfbebc22 +Block 0015 [ 37]: c41694770a8a9b9f +Block 0015 [ 38]: 15ac9e81f8349080 +Block 0015 [ 39]: 52825e57cba50916 +Block 0015 [ 40]: 51d2c9935e17d98c +Block 0015 [ 41]: 5607b931b9cbc2f6 +Block 0015 [ 42]: c15e398a71664716 +Block 0015 [ 43]: 6196cb09666b8aa6 +Block 0015 [ 44]: d1f004bf865d712f +Block 0015 [ 45]: 71c4ab4eb1a8c76c +Block 0015 [ 46]: a6de3842bbbd1029 +Block 0015 [ 47]: b9ec26bd0cdfafac +Block 0015 [ 48]: 9b830f151684793e +Block 0015 [ 49]: a89763e63465931b +Block 0015 [ 50]: 9a85d13f5e810f61 +Block 0015 [ 51]: d310f5b7712d28da +Block 0015 [ 52]: 5b28e526e9fa2a09 +Block 0015 [ 53]: 966f7b02ae839c94 +Block 0015 [ 54]: 86a2d4c5e71e7ac8 +Block 0015 [ 55]: e96910b6d32b0b84 +Block 0015 [ 56]: 241237960baaadb8 +Block 0015 [ 57]: 93ee135d761f7ef1 +Block 0015 [ 58]: 458563f18c30d6ca +Block 0015 [ 59]: 20339a86a422f5dc +Block 0015 [ 60]: 8be24a5a13609cd0 +Block 0015 [ 61]: f2341abd8d040b8f +Block 0015 [ 62]: 9944dd3970485508 +Block 0015 [ 63]: b73d28e85eecf928 +Block 0015 [ 64]: b7bd00ecf6510e61 +Block 0015 [ 65]: e6eaaa07d887015b +Block 0015 [ 66]: e2201e7b73b2b762 +Block 0015 [ 67]: d22248c2d87a1e38 +Block 0015 [ 68]: c8e6b242348e7e4d +Block 0015 [ 69]: df21a46b6b9178b5 +Block 0015 [ 70]: f449e89387dd2d54 +Block 0015 [ 71]: f9588b623b526b80 +Block 0015 [ 72]: 70e38fa377d75afe +Block 0015 [ 73]: cbf379cb401301bd +Block 0015 [ 74]: 34a2ba0457b360b5 +Block 0015 [ 75]: 3fcd0772e15aa753 +Block 0015 [ 76]: e6a1ee7587f2b0cf +Block 0015 [ 77]: b2a399f2bb958f0c +Block 0015 [ 78]: cd702bc394a274d9 +Block 0015 [ 79]: 2cf2c4f609352e79 +Block 0015 [ 80]: 6f8742ba962af80a +Block 0015 [ 81]: 187d7781f5b58bcb +Block 0015 [ 82]: ea995eaf547b26f1 +Block 0015 [ 83]: 70ff6a3ec66b4560 +Block 0015 [ 84]: 335412fe69fff286 +Block 0015 [ 85]: d7d982d6bdc0eaf9 +Block 0015 [ 86]: 6a91a369ebe4c227 +Block 0015 [ 87]: bd7d3af9c4695372 +Block 0015 [ 88]: 517d76991499e3dd +Block 0015 [ 89]: 1b5a124e4c09386e +Block 0015 [ 90]: 9dc15484e994c472 +Block 0015 [ 91]: c30a4bf622feae78 +Block 0015 [ 92]: c15f1cf31d1d2e79 +Block 0015 [ 93]: fd4afd7d9800e3ca +Block 0015 [ 94]: 9abdcbeea24b166a +Block 0015 [ 95]: fad22e44fd945a51 +Block 0015 [ 96]: 187dbda78f640e08 +Block 0015 [ 97]: 6f2ad2ff1fddc51b +Block 0015 [ 98]: 5c9e3d2a789d01f4 +Block 0015 [ 99]: e17643ada188ca5d +Block 0015 [100]: daf7d892618a7687 +Block 0015 [101]: ac5aa9b82e8d53d9 +Block 0015 [102]: ae8c60a4c1bc63bb +Block 0015 [103]: b35f4d4e3ced26a2 +Block 0015 [104]: 55abe3d57678671a +Block 0015 [105]: eb15e0d818d1fd62 +Block 0015 [106]: b23a0d03863ed118 +Block 0015 [107]: cbc0e428e6d752fb +Block 0015 [108]: f1931d6c45be4320 +Block 0015 [109]: 2c8bd9097f39e50d +Block 0015 [110]: cc33e6016cc08ee6 +Block 0015 [111]: 2280ad7ea4fe9832 +Block 0015 [112]: 2a922a76400a5cbe +Block 0015 [113]: 2d1a097b36b2a380 +Block 0015 [114]: 25a31a1a2b373c9b +Block 0015 [115]: 77a19abf854f116a +Block 0015 [116]: fe66884f193b74d7 +Block 0015 [117]: 9dab1bf53a7a50b9 +Block 0015 [118]: fdd36d0f46d6abd6 +Block 0015 [119]: c32638540d68fb28 +Block 0015 [120]: 32788f09d80f0f11 +Block 0015 [121]: baf18788397a3a20 +Block 0015 [122]: 4729a150debebe00 +Block 0015 [123]: 98db2abeca755d0c +Block 0015 [124]: 9fa7f4acdbfc2075 +Block 0015 [125]: c79cc37a40fed18f +Block 0015 [126]: 0b1374123d496b56 +Block 0015 [127]: 723bd40bcc338eb9 +Block 0016 [ 0]: dba1631496e37081 +Block 0016 [ 1]: 7bcab81931f7fb3a +Block 0016 [ 2]: ec1b708517efc104 +Block 0016 [ 3]: 1d9620eab17a8af2 +Block 0016 [ 4]: 348e88a95a5b4836 +Block 0016 [ 5]: 08fd70a3903354b2 +Block 0016 [ 6]: 78878a368235854d +Block 0016 [ 7]: 94015822062f61f3 +Block 0016 [ 8]: e6261162790fc67a +Block 0016 [ 9]: d1bd71216db48ea3 +Block 0016 [ 10]: fa0163a85027dfef +Block 0016 [ 11]: 70d35155d8c744db +Block 0016 [ 12]: de5713bffb82c049 +Block 0016 [ 13]: 6a2f55255edc50b2 +Block 0016 [ 14]: 2de24cdba809978f +Block 0016 [ 15]: a9037f5f21ffcb62 +Block 0016 [ 16]: 61a14e0e21dfbbb3 +Block 0016 [ 17]: ff04c2acd3c56a2a +Block 0016 [ 18]: 0c34a70f918e0b8d +Block 0016 [ 19]: b41db4fe7e90d0c4 +Block 0016 [ 20]: 50fd52d4ac3dcef1 +Block 0016 [ 21]: 49f6930c4f261bbd +Block 0016 [ 22]: cebb8fc10d6916bd +Block 0016 [ 23]: d2a870eb3a73d5e8 +Block 0016 [ 24]: 026b068c396ee281 +Block 0016 [ 25]: 37e31bcb07d3d06d +Block 0016 [ 26]: 51e18129c808df2c +Block 0016 [ 27]: e38bd894c7346a95 +Block 0016 [ 28]: 4666a2e0a015d89b +Block 0016 [ 29]: 53080e6a73bd7b2b +Block 0016 [ 30]: ab69db3d9699ea9c +Block 0016 [ 31]: 0a5fff8051cd1caf +Block 0016 [ 32]: c16f87f1ff14ee00 +Block 0016 [ 33]: 4f8261979edac3f2 +Block 0016 [ 34]: 1a015a10b756c6ec +Block 0016 [ 35]: 66cdc7820398cc5c +Block 0016 [ 36]: 45706053e2b18e31 +Block 0016 [ 37]: 500d1855f2009c73 +Block 0016 [ 38]: eaab57647a45b537 +Block 0016 [ 39]: 92b7eedc890cec89 +Block 0016 [ 40]: 04f79aefec3bc0e9 +Block 0016 [ 41]: 144ac54f82047d86 +Block 0016 [ 42]: 2ae5c5f9e60f6674 +Block 0016 [ 43]: 29fb00da354c45ba +Block 0016 [ 44]: 6b9e88cc40d8650b +Block 0016 [ 45]: 843b907fe783927f +Block 0016 [ 46]: 09640d95f0038a53 +Block 0016 [ 47]: 556f347c654c5ab3 +Block 0016 [ 48]: 60531233a823cde3 +Block 0016 [ 49]: 97c638e1c4927b03 +Block 0016 [ 50]: 29d80aa6e06b0456 +Block 0016 [ 51]: 5d00fd9a7ca97121 +Block 0016 [ 52]: 765ffe668dfdc2c1 +Block 0016 [ 53]: 5a2331032829fd09 +Block 0016 [ 54]: 4373276735c93c1b +Block 0016 [ 55]: 23410a050fe40fc7 +Block 0016 [ 56]: c0396855da2eee42 +Block 0016 [ 57]: b69958feeb38026e +Block 0016 [ 58]: 02c4f30af9932784 +Block 0016 [ 59]: 89d2d63d9ff65483 +Block 0016 [ 60]: 69583bd38d980b3e +Block 0016 [ 61]: 1036e040b045969e +Block 0016 [ 62]: a87365c2d51d93b8 +Block 0016 [ 63]: 8047300e3464fbea +Block 0016 [ 64]: 7ba7e44ac1b4e18e +Block 0016 [ 65]: c9a5f9247ffa1caa +Block 0016 [ 66]: 2672f42a31dd76c9 +Block 0016 [ 67]: 600c1ca9792f48de +Block 0016 [ 68]: edc0454eb60f5efb +Block 0016 [ 69]: 24ca25768dac07e2 +Block 0016 [ 70]: 5a897a1a626401d2 +Block 0016 [ 71]: b873371b5c32a10d +Block 0016 [ 72]: a79f82e2fe9a33a9 +Block 0016 [ 73]: e17fbb6e884277b9 +Block 0016 [ 74]: 705da8d6af3afd19 +Block 0016 [ 75]: 351cc4f25d20e442 +Block 0016 [ 76]: efdc3cef63ed0468 +Block 0016 [ 77]: 109e45a160396cc3 +Block 0016 [ 78]: f61273c4f78110cb +Block 0016 [ 79]: a149ae2114ef95c9 +Block 0016 [ 80]: 9686ae2ab6e96c4b +Block 0016 [ 81]: 82e34d717130811f +Block 0016 [ 82]: 96b6238ab9e97331 +Block 0016 [ 83]: 10af26c305b949af +Block 0016 [ 84]: 73bc99c3c9614621 +Block 0016 [ 85]: 5c4c3ee6f3a0eda2 +Block 0016 [ 86]: 9b78611d8965dcc9 +Block 0016 [ 87]: 5704f8fa7d51b4ef +Block 0016 [ 88]: e1038992b0be6efd +Block 0016 [ 89]: 45d148b6187fe37f +Block 0016 [ 90]: 55bcd22852ed2762 +Block 0016 [ 91]: 0f64f49ccfa80f38 +Block 0016 [ 92]: b5fad479b4ff5934 +Block 0016 [ 93]: d7997477fbb706e0 +Block 0016 [ 94]: 8a959e6e9a047bfb +Block 0016 [ 95]: 34071c4c6c491070 +Block 0016 [ 96]: 287346060fa77813 +Block 0016 [ 97]: f1b6634dccf64cb8 +Block 0016 [ 98]: 790b18cf5d8f57b2 +Block 0016 [ 99]: 9d83ef55adbb4729 +Block 0016 [100]: d35f419bf33dc17e +Block 0016 [101]: 1e38549f1fd07181 +Block 0016 [102]: 5ab80e4b365c6a77 +Block 0016 [103]: 261245bb1406f154 +Block 0016 [104]: 8ebd555d5865a16a +Block 0016 [105]: fd4a78d20da3993b +Block 0016 [106]: 6cb78c2f1ca8d5cf +Block 0016 [107]: 49ce107e280365c8 +Block 0016 [108]: 55d5f2fabbdc5d25 +Block 0016 [109]: 5521ebac47859c8a +Block 0016 [110]: 042dd30ace63fef2 +Block 0016 [111]: e1ea2fea6c4e51e7 +Block 0016 [112]: c75573901eac10df +Block 0016 [113]: 3d3dcba0172f75b2 +Block 0016 [114]: 4869c7007eee34ce +Block 0016 [115]: 0597dfbf53b667bf +Block 0016 [116]: f9d4c4ef00f016cd +Block 0016 [117]: aabebc3cb036df01 +Block 0016 [118]: 27cbced80caa86fc +Block 0016 [119]: 7de1ba464cfdb5d4 +Block 0016 [120]: 14319a2c4420864d +Block 0016 [121]: 1fccc5e717075731 +Block 0016 [122]: af0125d5e39888e3 +Block 0016 [123]: ad39af88f22b67e3 +Block 0016 [124]: af50dd714b281182 +Block 0016 [125]: 718dd9ffe15c66a1 +Block 0016 [126]: 0acc2655ba4339a7 +Block 0016 [127]: be96794bc4a79dd0 +Block 0017 [ 0]: 7b5ba70f2c9ad40f +Block 0017 [ 1]: 36f0a9a53c4b55e5 +Block 0017 [ 2]: 5425515f3660e150 +Block 0017 [ 3]: fc8697830553a6b6 +Block 0017 [ 4]: 1edbcbccfc4e85a7 +Block 0017 [ 5]: fa7c7ec35e1768ec +Block 0017 [ 6]: ceff78f0f46f476a +Block 0017 [ 7]: f1e93938c38dd1e2 +Block 0017 [ 8]: 6047d8bd58ba9bca +Block 0017 [ 9]: 38cd284c1a5f1b37 +Block 0017 [ 10]: b8c0090901487ce8 +Block 0017 [ 11]: 9fa9f59f78f8ba47 +Block 0017 [ 12]: d76da75fc59dcac1 +Block 0017 [ 13]: 909bf97bdb3c3695 +Block 0017 [ 14]: fa5d1ebdfd13ec94 +Block 0017 [ 15]: 30d28c34a972f817 +Block 0017 [ 16]: 030bb56aea8cd4cb +Block 0017 [ 17]: ed751bf31759ec31 +Block 0017 [ 18]: c2bd766b1bc8addd +Block 0017 [ 19]: 4208e42284623d16 +Block 0017 [ 20]: 065b57cd2ddd5c5b +Block 0017 [ 21]: c61d4d148a518c1f +Block 0017 [ 22]: 192d41daeddc3371 +Block 0017 [ 23]: d107ec22d1460874 +Block 0017 [ 24]: 2325ca6bf51b9ec2 +Block 0017 [ 25]: bd758560a6ca5726 +Block 0017 [ 26]: 96d3f1c698632e5f +Block 0017 [ 27]: 1c97ae8f8065d4a1 +Block 0017 [ 28]: 78640186f05f5d2c +Block 0017 [ 29]: cf6d82819e18ed27 +Block 0017 [ 30]: 4d6ebb2f1b700728 +Block 0017 [ 31]: 97d8ddd7084eb125 +Block 0017 [ 32]: 09558992c97b4c0f +Block 0017 [ 33]: c0a6ad16e3c9be87 +Block 0017 [ 34]: 9b6a4e984e24c9fd +Block 0017 [ 35]: 5958f55b2a13037a +Block 0017 [ 36]: 2e147024c0cd4121 +Block 0017 [ 37]: ea367dabd7ab4246 +Block 0017 [ 38]: ea8ba7cbf2389d9d +Block 0017 [ 39]: 8738b7e8961c9462 +Block 0017 [ 40]: 37bc3c32461a8ba3 +Block 0017 [ 41]: 1a988f291046040f +Block 0017 [ 42]: ef0f85ad9a8b1836 +Block 0017 [ 43]: c78659d686fe952c +Block 0017 [ 44]: 6ee163f93d3b653a +Block 0017 [ 45]: 26152cf977f49a65 +Block 0017 [ 46]: d301680c980a2c51 +Block 0017 [ 47]: 70df093ef8894d17 +Block 0017 [ 48]: c96e160883c1827e +Block 0017 [ 49]: 989f8143b240ad5c +Block 0017 [ 50]: e16c1e6c01410167 +Block 0017 [ 51]: ee2f28e8df14830c +Block 0017 [ 52]: 7bacbee1e27659ad +Block 0017 [ 53]: fdeccb4e07c45761 +Block 0017 [ 54]: db3d31660a842a47 +Block 0017 [ 55]: 3ff4286194042d07 +Block 0017 [ 56]: 2a98eb4b903d0cc1 +Block 0017 [ 57]: e646d6112546a058 +Block 0017 [ 58]: 27f241d5db630dff +Block 0017 [ 59]: 5628d1ebd53f023a +Block 0017 [ 60]: ba56ca849da491cb +Block 0017 [ 61]: 9ecda254008b4e50 +Block 0017 [ 62]: f05f1f3722817ed2 +Block 0017 [ 63]: c3fa24f242c29b90 +Block 0017 [ 64]: 1eab33b1d0e2465b +Block 0017 [ 65]: b869cfee39139c0a +Block 0017 [ 66]: b2fd4681352495b5 +Block 0017 [ 67]: b4fa867b48fbccf1 +Block 0017 [ 68]: d1ff00418d9e5d6f +Block 0017 [ 69]: 98fb0e309c62edff +Block 0017 [ 70]: 9e5c8611322c3e74 +Block 0017 [ 71]: 5182de709dc58259 +Block 0017 [ 72]: 20931b51dcc31663 +Block 0017 [ 73]: bc90b255d0624f0b +Block 0017 [ 74]: 85322ecab55c9fb0 +Block 0017 [ 75]: 61d5ad563831d979 +Block 0017 [ 76]: b8d8aa275bbe6b4a +Block 0017 [ 77]: 4482a96f016b95ba +Block 0017 [ 78]: a5bfe0adace1726f +Block 0017 [ 79]: 3adab49f26f7bee9 +Block 0017 [ 80]: 140f7a360bfab47e +Block 0017 [ 81]: 5f31d06e631f52ac +Block 0017 [ 82]: 5915cbba03a5a890 +Block 0017 [ 83]: 04da8af5b2a4f869 +Block 0017 [ 84]: dc57e07f79a3c990 +Block 0017 [ 85]: 7a0497ae45c6982d +Block 0017 [ 86]: d14d30fea11a17e9 +Block 0017 [ 87]: 9de84c6eff9fa195 +Block 0017 [ 88]: 6b429b095cc24ef9 +Block 0017 [ 89]: a7c7f6ff316e378f +Block 0017 [ 90]: 2a3b2ac5d7607632 +Block 0017 [ 91]: ec137e7f80dd20fb +Block 0017 [ 92]: 22a8bd325c264ae2 +Block 0017 [ 93]: 7007457346e49179 +Block 0017 [ 94]: 2f217594c468138d +Block 0017 [ 95]: 578c7d6bb4817011 +Block 0017 [ 96]: 3a5d32b954ff5f25 +Block 0017 [ 97]: b5791614aa7bb694 +Block 0017 [ 98]: c827579c0a97168b +Block 0017 [ 99]: 5ca0639fd40b32d3 +Block 0017 [100]: 60d021d8b6af09de +Block 0017 [101]: 1a400c7e0c9c38c1 +Block 0017 [102]: 7baf9e6d7c46bcda +Block 0017 [103]: 2c55bc07321f9a05 +Block 0017 [104]: b89e768d47a785c1 +Block 0017 [105]: 39534ecb8b83e175 +Block 0017 [106]: 64ee6ce08a1052fc +Block 0017 [107]: bd3d62e2c912f0b5 +Block 0017 [108]: 59b4cf828ea54ee4 +Block 0017 [109]: a3b111d1605c01be +Block 0017 [110]: da7d23de96a490de +Block 0017 [111]: 7c75d813c58cb4f7 +Block 0017 [112]: 008950719cd0b4e5 +Block 0017 [113]: 179d3d56a1051f16 +Block 0017 [114]: 442b82c14e3edb7b +Block 0017 [115]: f6edb20604028f65 +Block 0017 [116]: ebe72e71d4c15cef +Block 0017 [117]: 550bfb8d9f4aae3c +Block 0017 [118]: 3f005851e118c76e +Block 0017 [119]: b778f46af664d0d0 +Block 0017 [120]: 314df035073b5033 +Block 0017 [121]: efc6f26a182fcb60 +Block 0017 [122]: ecbd01d4a2aad969 +Block 0017 [123]: 82d5571cce229a3f +Block 0017 [124]: d9045c594f34c332 +Block 0017 [125]: 6edb8400b36a321c +Block 0017 [126]: e603318505c4b41e +Block 0017 [127]: 53080a8ac05f8ee6 +Block 0018 [ 0]: 1c6575f9a10acd80 +Block 0018 [ 1]: 2a9e757fc1985b42 +Block 0018 [ 2]: 2a070582f4d7fd52 +Block 0018 [ 3]: ea86a49f36d096d4 +Block 0018 [ 4]: 9d8c34c6e3d60f08 +Block 0018 [ 5]: 1622e0f45989720a +Block 0018 [ 6]: f5a13aa7c469240c +Block 0018 [ 7]: dd068ad7fa4ddd64 +Block 0018 [ 8]: ce149b2e7c66a869 +Block 0018 [ 9]: e6856096802179be +Block 0018 [ 10]: 78ada9ed8703ae27 +Block 0018 [ 11]: 72020afe3448bfec +Block 0018 [ 12]: 3fddc3d8928c3b97 +Block 0018 [ 13]: a21b1a8a520e04d9 +Block 0018 [ 14]: 06690fadc6cd9f06 +Block 0018 [ 15]: cafb12d4baea0b81 +Block 0018 [ 16]: 86bbed9914ae8cf2 +Block 0018 [ 17]: bedc4febe4696bf8 +Block 0018 [ 18]: 9cf81017baec53a7 +Block 0018 [ 19]: 2d9dfeb07cb61303 +Block 0018 [ 20]: 8437a139617fd876 +Block 0018 [ 21]: 343fd4208419d50c +Block 0018 [ 22]: 0996be65d9fbcd0a +Block 0018 [ 23]: 3d0f66e79c7e8344 +Block 0018 [ 24]: f03c3694659bcf13 +Block 0018 [ 25]: 546982fe89617636 +Block 0018 [ 26]: c7dfd03bd4a2ac6a +Block 0018 [ 27]: 388400aeea1a4bdb +Block 0018 [ 28]: 41645c6cf37246b2 +Block 0018 [ 29]: 6c110f7bc4ac7599 +Block 0018 [ 30]: 159bf2f2d0528b8d +Block 0018 [ 31]: 7c0f6070254b07ec +Block 0018 [ 32]: 27b8114d303790c7 +Block 0018 [ 33]: 6e2eda0717b86cf0 +Block 0018 [ 34]: 59ded021767f3c97 +Block 0018 [ 35]: afc68e65f85bd36b +Block 0018 [ 36]: b86592e214789675 +Block 0018 [ 37]: 34e2c8570370feea +Block 0018 [ 38]: 58e92d613717584e +Block 0018 [ 39]: a37a32a2270a702c +Block 0018 [ 40]: ea60b7b999c47428 +Block 0018 [ 41]: 5ef5855061b18b9f +Block 0018 [ 42]: 3fa31397437f9ba5 +Block 0018 [ 43]: b6689ef5bf20ab34 +Block 0018 [ 44]: 132c885cc262e48f +Block 0018 [ 45]: ce57e7ce64ca9bb3 +Block 0018 [ 46]: 36b2e6285f8c6965 +Block 0018 [ 47]: bf007ccb66d99b55 +Block 0018 [ 48]: 3e28b50440f345d5 +Block 0018 [ 49]: e994a6e41a10f083 +Block 0018 [ 50]: b54b5d9057a568e5 +Block 0018 [ 51]: fb3d507834f0abeb +Block 0018 [ 52]: 72dbb34a878af028 +Block 0018 [ 53]: 1aee63ddfe080bfb +Block 0018 [ 54]: 0025dee0fed4e37e +Block 0018 [ 55]: 56292c8afd174199 +Block 0018 [ 56]: f0aa15dc972c2853 +Block 0018 [ 57]: 9024522f6bef47a1 +Block 0018 [ 58]: ee29d18b8eab9af9 +Block 0018 [ 59]: 23d3accf2bda84db +Block 0018 [ 60]: 074b4b5728ebb32d +Block 0018 [ 61]: aceacbf4a6a899cd +Block 0018 [ 62]: 6f354c27f02bf5d6 +Block 0018 [ 63]: 7ec9c7d50f228293 +Block 0018 [ 64]: 0d0a219e06a20d6c +Block 0018 [ 65]: 33ab995959bae7f0 +Block 0018 [ 66]: f59c2eb8d2386105 +Block 0018 [ 67]: df2f3cf73585bfc4 +Block 0018 [ 68]: a9fac0135ad5aed0 +Block 0018 [ 69]: 49556d419f8433b9 +Block 0018 [ 70]: dd3afeed8d935892 +Block 0018 [ 71]: b24e7e4f9fdeb0d7 +Block 0018 [ 72]: 0e8ddb6b5c6c053e +Block 0018 [ 73]: 9fb0b4b7040dff6f +Block 0018 [ 74]: 335c0af90c7326b1 +Block 0018 [ 75]: 2b3a8b28e360a720 +Block 0018 [ 76]: a38f7a1fcd4c6f18 +Block 0018 [ 77]: 2fc14a2922ba9086 +Block 0018 [ 78]: 06d2331d98825423 +Block 0018 [ 79]: 421f972c3f7780b0 +Block 0018 [ 80]: 202301ef938e0bad +Block 0018 [ 81]: 7a8c48b25afe353c +Block 0018 [ 82]: e791bbead44e88c3 +Block 0018 [ 83]: d3867de18af9ac71 +Block 0018 [ 84]: 52482b3fc98d7974 +Block 0018 [ 85]: fae31ef53fab928d +Block 0018 [ 86]: 4484e8d59a1d41e8 +Block 0018 [ 87]: 1a5864cb33974ce1 +Block 0018 [ 88]: 62ac9ca77f59a539 +Block 0018 [ 89]: 4d440ce8e80b0a44 +Block 0018 [ 90]: 3dd25a1e99e082f0 +Block 0018 [ 91]: 45b5b3fccd11c949 +Block 0018 [ 92]: 1b3a66418cd781e2 +Block 0018 [ 93]: 48a8ce412844a394 +Block 0018 [ 94]: de71390ba827ddbd +Block 0018 [ 95]: 85976922171b9790 +Block 0018 [ 96]: d8423a1ec6d5bab1 +Block 0018 [ 97]: 592b5d193a3b3609 +Block 0018 [ 98]: 7bd2b8149cb2495b +Block 0018 [ 99]: 02cbe78ebbd8270b +Block 0018 [100]: 1f626cc675e0140d +Block 0018 [101]: 423dac87eb9493d4 +Block 0018 [102]: eee2243fe0d74697 +Block 0018 [103]: 5a7074a3bdd5cfe4 +Block 0018 [104]: 957f4b71a6c0cd03 +Block 0018 [105]: ecbd98ef8d09798e +Block 0018 [106]: 8c46a8ed1afb3ed2 +Block 0018 [107]: 1cbf535b8e9a90cb +Block 0018 [108]: 52081ad1254109e7 +Block 0018 [109]: a7be109d2e24fc45 +Block 0018 [110]: 43c3d4693421c9c9 +Block 0018 [111]: 320187d82c7622aa +Block 0018 [112]: 3005f4a02db5cd47 +Block 0018 [113]: c9b593e108491b8d +Block 0018 [114]: 07b285d679681f35 +Block 0018 [115]: ff6ad0d67969793a +Block 0018 [116]: 371a921169811926 +Block 0018 [117]: 09f67f449b49116e +Block 0018 [118]: ec51b4a5f1646649 +Block 0018 [119]: f67366ba7a177373 +Block 0018 [120]: 74c538aa4fb2f123 +Block 0018 [121]: 8e454baf2b483190 +Block 0018 [122]: 68944332288eeeb7 +Block 0018 [123]: c1f577313d81ab15 +Block 0018 [124]: 6fdfb2cd1475387d +Block 0018 [125]: 2f5f80b2fe940caa +Block 0018 [126]: 6ff1d7b0f222212c +Block 0018 [127]: 92d7874653b70612 +Block 0019 [ 0]: 93acbaeacded228f +Block 0019 [ 1]: 04ffad08d7cf945e +Block 0019 [ 2]: 7da44d978886ff7e +Block 0019 [ 3]: ee06010d47c0e8a2 +Block 0019 [ 4]: 94286d1d3fabcd7f +Block 0019 [ 5]: ae490c824c9c668f +Block 0019 [ 6]: 5ae115d1ec752d80 +Block 0019 [ 7]: d2c876dd1b3610de +Block 0019 [ 8]: 88f2df0f35c1e7ee +Block 0019 [ 9]: b74d0ca61e7db938 +Block 0019 [ 10]: b1732a6f4fb48910 +Block 0019 [ 11]: d40c0f502021679f +Block 0019 [ 12]: ea19fc7983c1da39 +Block 0019 [ 13]: d2ee700063bbdc38 +Block 0019 [ 14]: f3df222db778b740 +Block 0019 [ 15]: 73f659a6f658f7cf +Block 0019 [ 16]: 325d3be05f9277c0 +Block 0019 [ 17]: 401dc2508f41181e +Block 0019 [ 18]: c4777c5dcfec3e9a +Block 0019 [ 19]: 850819df3005f9df +Block 0019 [ 20]: 98887f8b695a363d +Block 0019 [ 21]: 340a02bc90f72b07 +Block 0019 [ 22]: 8ee3a0a9f0109fa9 +Block 0019 [ 23]: 8627997126ab3ef9 +Block 0019 [ 24]: 42c3cb91c821ae6c +Block 0019 [ 25]: 52a80de8fe0d7818 +Block 0019 [ 26]: bf67209e92990da1 +Block 0019 [ 27]: 583f282cfa720749 +Block 0019 [ 28]: 803a59ff851a9629 +Block 0019 [ 29]: 19b5137c3e2855c1 +Block 0019 [ 30]: 7b3ee14ce1847f65 +Block 0019 [ 31]: f39c3c8919a04b8e +Block 0019 [ 32]: df6e94c2319f2fac +Block 0019 [ 33]: be81ad71d3da8b6e +Block 0019 [ 34]: 96b5d3134e72bbd7 +Block 0019 [ 35]: 01be7314fbab115b +Block 0019 [ 36]: 9b6573be1f901eaf +Block 0019 [ 37]: 0af9f25fc41f65f1 +Block 0019 [ 38]: ecf061cbec0301da +Block 0019 [ 39]: e1f6de6ecc2c51d9 +Block 0019 [ 40]: a21201bed7bc2ece +Block 0019 [ 41]: c1de087e0461f89b +Block 0019 [ 42]: 640531594f92810a +Block 0019 [ 43]: 2f7c47537c46dd26 +Block 0019 [ 44]: b9e806297c8e285d +Block 0019 [ 45]: 23fc05e71c7ca87f +Block 0019 [ 46]: 6947a7418de6e5d4 +Block 0019 [ 47]: 11006b4b6595fc58 +Block 0019 [ 48]: 41b286b38a4b607d +Block 0019 [ 49]: eba60946c062f7e9 +Block 0019 [ 50]: f38aae3089bff1e8 +Block 0019 [ 51]: e1d219dacc19a0aa +Block 0019 [ 52]: bbd69ed673b586b2 +Block 0019 [ 53]: f3604701136a8539 +Block 0019 [ 54]: ee988f9217ca7216 +Block 0019 [ 55]: 3ec40766c32f9872 +Block 0019 [ 56]: aa8e6f55082b9b3a +Block 0019 [ 57]: eaee4cbf152450a2 +Block 0019 [ 58]: 2d6d634a578c3768 +Block 0019 [ 59]: cd1b30693fc22fd3 +Block 0019 [ 60]: 9134ae73ba6a6338 +Block 0019 [ 61]: 55b9202e263576e2 +Block 0019 [ 62]: 5990cb5a6abdf6d4 +Block 0019 [ 63]: 90e9bf1096d341c3 +Block 0019 [ 64]: f1184eee8bf92bad +Block 0019 [ 65]: 11557621833c2667 +Block 0019 [ 66]: 7f4fe41022bbbe8f +Block 0019 [ 67]: 1ce4d6a3f00a45e2 +Block 0019 [ 68]: 4d1176a9d73fbd04 +Block 0019 [ 69]: 348095dd5ec67914 +Block 0019 [ 70]: f68943632a9b36f8 +Block 0019 [ 71]: 39cbd678a2013855 +Block 0019 [ 72]: d480608f385da36a +Block 0019 [ 73]: 543abadc4389aec2 +Block 0019 [ 74]: 4c0781a69dd4e5f0 +Block 0019 [ 75]: d70d0b4684ca6fdb +Block 0019 [ 76]: 9f69a1c7beebf974 +Block 0019 [ 77]: 3cc130fef00c1f6b +Block 0019 [ 78]: be0fcd7716b57997 +Block 0019 [ 79]: 91c8cce70af1d23c +Block 0019 [ 80]: f1780fc4eae113de +Block 0019 [ 81]: 9a650c9f13e21cfa +Block 0019 [ 82]: e2a32a8550f79448 +Block 0019 [ 83]: 45cdb0e228907359 +Block 0019 [ 84]: b12202933f6e041e +Block 0019 [ 85]: 1eb6ce2a66e64ad0 +Block 0019 [ 86]: 0fd90d326844b151 +Block 0019 [ 87]: bc9396831333f0ab +Block 0019 [ 88]: a046b58b763c42e1 +Block 0019 [ 89]: 9794be294b3c7fa1 +Block 0019 [ 90]: 8fe6176456bab7bf +Block 0019 [ 91]: aaa0183d2b59afec +Block 0019 [ 92]: 5fa1d31dacccd5a5 +Block 0019 [ 93]: 7f693802526c4520 +Block 0019 [ 94]: 19d1bb4a4461ea59 +Block 0019 [ 95]: e44b42735431ff9a +Block 0019 [ 96]: f346ac2045974039 +Block 0019 [ 97]: cf1da77245b6a0ad +Block 0019 [ 98]: 5936a6f1553ef342 +Block 0019 [ 99]: 812ddc076e3cb742 +Block 0019 [100]: bfaf4ac38c3e6141 +Block 0019 [101]: 14bb89ac7a67a8dd +Block 0019 [102]: b4f278d441a2b70d +Block 0019 [103]: 81abe3584ea009fa +Block 0019 [104]: 467ccf31d2d0db6f +Block 0019 [105]: 9ad73b369b947213 +Block 0019 [106]: 711dd4a31a270b27 +Block 0019 [107]: be20d05f48a4486a +Block 0019 [108]: 5b9bd8d50bbf51d9 +Block 0019 [109]: 6c761a9911cfe27b +Block 0019 [110]: de7b5c685a3a34d9 +Block 0019 [111]: c16444edde5c6871 +Block 0019 [112]: aee99d1b74c68d6d +Block 0019 [113]: 63cfa31ef288b980 +Block 0019 [114]: acc6f55eefa30a69 +Block 0019 [115]: be177ae1dcf072fc +Block 0019 [116]: e7f163e4b7836001 +Block 0019 [117]: 88a2d20a0a31b8e5 +Block 0019 [118]: ded1724eb03f5ff0 +Block 0019 [119]: c79e0c464b5894d2 +Block 0019 [120]: 6b6dc0b043b95513 +Block 0019 [121]: 0ab3dbe638e144f7 +Block 0019 [122]: 580714872c942d95 +Block 0019 [123]: e2133ff2c9b56f8f +Block 0019 [124]: 3f443e86590b195b +Block 0019 [125]: 9f0df786b9d11a62 +Block 0019 [126]: 6019a3f50eeef5ec +Block 0019 [127]: e3af4457c6c57d74 +Block 0020 [ 0]: 9615c6f04b125822 +Block 0020 [ 1]: bbc6a3cbad09ad63 +Block 0020 [ 2]: 8b33a8b1717ecfcd +Block 0020 [ 3]: d22a3d65e0e5dc56 +Block 0020 [ 4]: 5a9c7f600b17734a +Block 0020 [ 5]: 85f34ac002eaaadf +Block 0020 [ 6]: 19102949a7d35dba +Block 0020 [ 7]: eba5faf3e0c5162b +Block 0020 [ 8]: 8d92b1b1cfd06f92 +Block 0020 [ 9]: ab604d743633ee9d +Block 0020 [ 10]: 68e8508552ac02ca +Block 0020 [ 11]: 8dfb2cd0c8b11294 +Block 0020 [ 12]: b76523dd79a50b15 +Block 0020 [ 13]: 71a9e1dcc57a7e88 +Block 0020 [ 14]: fc3fe755fd7c2f49 +Block 0020 [ 15]: 73021f9dc36ac323 +Block 0020 [ 16]: 470194d113aee51d +Block 0020 [ 17]: 9610e1dfe0fa76e4 +Block 0020 [ 18]: f9650a6fdfa140f2 +Block 0020 [ 19]: bb46922d0495f3db +Block 0020 [ 20]: 637ca17912541ba3 +Block 0020 [ 21]: 8be12ee728df3bbe +Block 0020 [ 22]: 6781d218e518816c +Block 0020 [ 23]: b509d54cc8bc2d47 +Block 0020 [ 24]: cf6dbf9c499ecf06 +Block 0020 [ 25]: 907e1dcbd9445922 +Block 0020 [ 26]: d1cedb9860d7d44a +Block 0020 [ 27]: 4db3e6ea4f8e3939 +Block 0020 [ 28]: 2bd8107671b012dc +Block 0020 [ 29]: 1358200893cc352d +Block 0020 [ 30]: 4076651997b8041d +Block 0020 [ 31]: 99583565d39d102b +Block 0020 [ 32]: 9a369ae3653a4844 +Block 0020 [ 33]: ff517930e12d0fb3 +Block 0020 [ 34]: dfe95097f26f5912 +Block 0020 [ 35]: 347791101536883a +Block 0020 [ 36]: f6ebe0adc5e81a86 +Block 0020 [ 37]: 9ee257ca3cb95b47 +Block 0020 [ 38]: 98960e94bcd4efa8 +Block 0020 [ 39]: d2e3fe76d8616647 +Block 0020 [ 40]: d0b7771e1038c71d +Block 0020 [ 41]: 79746f8f40a842fe +Block 0020 [ 42]: ef76f485c0812c0e +Block 0020 [ 43]: 86a66bc0c07c2b7e +Block 0020 [ 44]: e75b56d4dbdbf024 +Block 0020 [ 45]: 32160a23df550a63 +Block 0020 [ 46]: 3ee01df8c98b32c0 +Block 0020 [ 47]: c77fdff62a8be1e8 +Block 0020 [ 48]: 9af667adde4e0ba0 +Block 0020 [ 49]: 7a82d438193aa28f +Block 0020 [ 50]: ca03ab93813051f7 +Block 0020 [ 51]: 97f07d37bafe132c +Block 0020 [ 52]: 7f27cb32f8866e02 +Block 0020 [ 53]: 1f8a6cf5a6d84fc7 +Block 0020 [ 54]: bfaf83737a01bcd3 +Block 0020 [ 55]: 7fef2c3149a0fef0 +Block 0020 [ 56]: 5674a6a7331b6a6d +Block 0020 [ 57]: 0ca447676d116f6b +Block 0020 [ 58]: 7452d755cd1b15c3 +Block 0020 [ 59]: 5681a228481aaacf +Block 0020 [ 60]: 870185f00101adb1 +Block 0020 [ 61]: 86e2191f974f08b0 +Block 0020 [ 62]: 40bd272e9e289567 +Block 0020 [ 63]: b17bb938155258da +Block 0020 [ 64]: 30718b28f21d46dd +Block 0020 [ 65]: 1cc99b8fc23bb1b5 +Block 0020 [ 66]: 498683869b7ecf4c +Block 0020 [ 67]: 58c22169dae7c96d +Block 0020 [ 68]: 0db1b1f0e729cf2d +Block 0020 [ 69]: 3a9085879af82b40 +Block 0020 [ 70]: 4db5e82575ef9d32 +Block 0020 [ 71]: b9e9488f9b515cfc +Block 0020 [ 72]: 8e81d7de5e6c4782 +Block 0020 [ 73]: a217c7f05630e843 +Block 0020 [ 74]: 1f1e764caf5ff5f9 +Block 0020 [ 75]: 3382e12b81b8fe90 +Block 0020 [ 76]: 74e7c5c8c55662c8 +Block 0020 [ 77]: 6b3d6ef4f0d5127e +Block 0020 [ 78]: 1f5927978da0630d +Block 0020 [ 79]: 3b736b8bd8408bd9 +Block 0020 [ 80]: 0dd0b3b98821f799 +Block 0020 [ 81]: 471755b90a64fcb6 +Block 0020 [ 82]: 50b6ac3114749ac5 +Block 0020 [ 83]: b557c9e857ccaadd +Block 0020 [ 84]: 88a2d12570bfe63d +Block 0020 [ 85]: 053d60a3e450e87c +Block 0020 [ 86]: eeb64921f5670705 +Block 0020 [ 87]: 2b1ec30ab15b52af +Block 0020 [ 88]: 23d5521b1e5f9957 +Block 0020 [ 89]: bd68c9ee34594385 +Block 0020 [ 90]: 8f5595c804b0b0cb +Block 0020 [ 91]: 1f7ca670dbae80e7 +Block 0020 [ 92]: 312d9a3dc213f619 +Block 0020 [ 93]: 917c68959a12da86 +Block 0020 [ 94]: ae6457d11e64ac5a +Block 0020 [ 95]: cf9ae240fcbf42d6 +Block 0020 [ 96]: 80336ea9a3d65f65 +Block 0020 [ 97]: 3b9b55736496fb29 +Block 0020 [ 98]: cdadaf18790a76f5 +Block 0020 [ 99]: 7aa4592b00522b5e +Block 0020 [100]: 27497d630ad191c2 +Block 0020 [101]: 885f2f8a1612535b +Block 0020 [102]: ba18ae7c42139005 +Block 0020 [103]: b3ae5a2310cf6cdf +Block 0020 [104]: b696d851371dda54 +Block 0020 [105]: 0d8026cd41c69440 +Block 0020 [106]: 2c724ccda4cef368 +Block 0020 [107]: 8b5300389120cbe7 +Block 0020 [108]: 63bd3c75a62a6b19 +Block 0020 [109]: a793cba536c65be9 +Block 0020 [110]: 311ca002baeec894 +Block 0020 [111]: e87ee22e79820e40 +Block 0020 [112]: bc3a2f78ed41d5d4 +Block 0020 [113]: d8e475e4faa40234 +Block 0020 [114]: c162560b8adc92d4 +Block 0020 [115]: 91b49d09f4ab3123 +Block 0020 [116]: 20f97e7e634a57f5 +Block 0020 [117]: 215f0e74cdcce539 +Block 0020 [118]: b91ad49b46090a89 +Block 0020 [119]: cff450a937dc6300 +Block 0020 [120]: f2f7cf24f1155489 +Block 0020 [121]: 108b2b71758f3215 +Block 0020 [122]: 620dd7da567e1eeb +Block 0020 [123]: a24dc8baad94e416 +Block 0020 [124]: b0d51a0f0414e089 +Block 0020 [125]: d3cf0eb94293600c +Block 0020 [126]: b64fcb808681de54 +Block 0020 [127]: 971f8b5cdc194991 +Block 0021 [ 0]: 5c7cfb56c8f911b3 +Block 0021 [ 1]: 8b7a71622e11aa73 +Block 0021 [ 2]: 1930406e86ee544b +Block 0021 [ 3]: 2f92752aee9653e5 +Block 0021 [ 4]: 1aa7899289031259 +Block 0021 [ 5]: 9276ab0e19abd61a +Block 0021 [ 6]: 8d97e0abed86d503 +Block 0021 [ 7]: 52102de7a0c2541d +Block 0021 [ 8]: a48fd49a819bc22d +Block 0021 [ 9]: 006985b359e6ef5e +Block 0021 [ 10]: 56bd98e477212867 +Block 0021 [ 11]: 87658890e4136505 +Block 0021 [ 12]: 36fcf1dac078bbe6 +Block 0021 [ 13]: c48fe29b58629a66 +Block 0021 [ 14]: c5e510b7790915b4 +Block 0021 [ 15]: c7915e58bc88b962 +Block 0021 [ 16]: 90c98628841ed410 +Block 0021 [ 17]: b948bf66a81acd79 +Block 0021 [ 18]: 20f00016b577ac52 +Block 0021 [ 19]: c0850950f5518e9e +Block 0021 [ 20]: 9cc22f365c9ce483 +Block 0021 [ 21]: d488a15d4f9a09ba +Block 0021 [ 22]: 671624e35e8524fd +Block 0021 [ 23]: fd9cb7702e5a6a18 +Block 0021 [ 24]: 4f6ceca22c7b8def +Block 0021 [ 25]: 35993124c3429808 +Block 0021 [ 26]: d480f9a34ae79284 +Block 0021 [ 27]: 41de8b418a16a33c +Block 0021 [ 28]: bfe94b084eb4cb62 +Block 0021 [ 29]: 1fc72a96b053ac3e +Block 0021 [ 30]: 1d7602e7c7a72141 +Block 0021 [ 31]: ec35d716ed423ae1 +Block 0021 [ 32]: 1457905f2311c807 +Block 0021 [ 33]: ac633f5403f7f962 +Block 0021 [ 34]: 29e5963ae5cafa7e +Block 0021 [ 35]: 05db765805f482aa +Block 0021 [ 36]: 73b42333acffddf7 +Block 0021 [ 37]: 0c7ff380d6f770be +Block 0021 [ 38]: 71155bb1f4cb4f64 +Block 0021 [ 39]: 35819e4d516ed1f1 +Block 0021 [ 40]: f86a4e927f75c684 +Block 0021 [ 41]: 3b94b76c1cebbc1b +Block 0021 [ 42]: 878bd26f6d680ee1 +Block 0021 [ 43]: c853a628c6a2ae2d +Block 0021 [ 44]: 9eb7a9fd5286ac26 +Block 0021 [ 45]: a71ad3bc763bd705 +Block 0021 [ 46]: 7a809af2e80d6e1c +Block 0021 [ 47]: e60a5368fc2f7dcf +Block 0021 [ 48]: ce424d140d2833d3 +Block 0021 [ 49]: 9e2ca4a277a9bfa7 +Block 0021 [ 50]: b6f56b2368f2b2b0 +Block 0021 [ 51]: 8d2831a80c681111 +Block 0021 [ 52]: efa2a6d6b54b372c +Block 0021 [ 53]: 2795838739598c33 +Block 0021 [ 54]: ad0898ef6e088b20 +Block 0021 [ 55]: 3bb14c01e2d26abb +Block 0021 [ 56]: 3715b7840dd14f3a +Block 0021 [ 57]: 11032380cfb1a4e3 +Block 0021 [ 58]: 657f3aa18721b06a +Block 0021 [ 59]: bbc4e34b1a57036f +Block 0021 [ 60]: bb5aab0086615334 +Block 0021 [ 61]: 243bff40cea40263 +Block 0021 [ 62]: 288a58457b364065 +Block 0021 [ 63]: ff3e5f084e886b5d +Block 0021 [ 64]: 266a88b7fa318607 +Block 0021 [ 65]: 46887c524b47738c +Block 0021 [ 66]: 05a41f5d76a98c33 +Block 0021 [ 67]: 1dfce7882e67acfe +Block 0021 [ 68]: 95d64866745a7c0a +Block 0021 [ 69]: 0ea59084765ae9d5 +Block 0021 [ 70]: 07a516edb29cfaba +Block 0021 [ 71]: 92428aea3ebb55a6 +Block 0021 [ 72]: c04928d77c86f0a6 +Block 0021 [ 73]: 74cfd4f2b2dea2f7 +Block 0021 [ 74]: 9a6e39c49f8b73d3 +Block 0021 [ 75]: 8576b61a109ddcd9 +Block 0021 [ 76]: 3f045563a643b7d3 +Block 0021 [ 77]: 10814c54c69bcc58 +Block 0021 [ 78]: 2a8db338c71915d9 +Block 0021 [ 79]: 4a3586847b1a4453 +Block 0021 [ 80]: 1795ab20987b66e8 +Block 0021 [ 81]: da147943c40a3b65 +Block 0021 [ 82]: 3cb7b96d98a10213 +Block 0021 [ 83]: 334d50efa35837ea +Block 0021 [ 84]: 718a8a5a89adcf22 +Block 0021 [ 85]: d0b88dd56ab65fdd +Block 0021 [ 86]: 20b6f89bc23153b4 +Block 0021 [ 87]: af569b830d970527 +Block 0021 [ 88]: 3284c6e30514ad11 +Block 0021 [ 89]: 5280e13f9029f0f1 +Block 0021 [ 90]: 849811b7dd25f028 +Block 0021 [ 91]: 47cb9f761527d86b +Block 0021 [ 92]: dbeacdc212f2ced3 +Block 0021 [ 93]: d7c78ff536cadd0b +Block 0021 [ 94]: 999673e828c35b56 +Block 0021 [ 95]: f87f792b57afadb9 +Block 0021 [ 96]: 29d82c85eced236d +Block 0021 [ 97]: 21be8a63f2ce3afe +Block 0021 [ 98]: 0dc79d3954446982 +Block 0021 [ 99]: 03ab07ee97d110de +Block 0021 [100]: acfbe4f974bb42f7 +Block 0021 [101]: 72e7650500174416 +Block 0021 [102]: 7d2b4bcd0b45804f +Block 0021 [103]: 3f82fcf386947bcb +Block 0021 [104]: b163d4a6610760bb +Block 0021 [105]: af9dee5e93e1628b +Block 0021 [106]: 78d71f93b81e5bd2 +Block 0021 [107]: 1336842f51e07e6e +Block 0021 [108]: be00ff96ecb0c7c3 +Block 0021 [109]: 949daf9fe70e5259 +Block 0021 [110]: d6e900117f863b9a +Block 0021 [111]: cb81b9f4a8f7297e +Block 0021 [112]: 5c65c123427d7bc3 +Block 0021 [113]: 1fc80884cfa7d639 +Block 0021 [114]: ab653c2ad98fe613 +Block 0021 [115]: f8a76a3b7183e378 +Block 0021 [116]: 5801569adbbec72f +Block 0021 [117]: 5dd8f25c9590a887 +Block 0021 [118]: 61db5e3c40bdef0a +Block 0021 [119]: 5c531abfe2cca2ce +Block 0021 [120]: 415c80196f173bf9 +Block 0021 [121]: a1769093654e290f +Block 0021 [122]: 3dded0331d22ead6 +Block 0021 [123]: 4aa06495cc77fb16 +Block 0021 [124]: ba821eca3ac7e893 +Block 0021 [125]: c3f6d28767c41456 +Block 0021 [126]: d09e98175a49ea3a +Block 0021 [127]: c71b672605fe10b8 +Block 0022 [ 0]: 64fd9b4965b7865c +Block 0022 [ 1]: b318e42646c614ab +Block 0022 [ 2]: b0acf9b55022d714 +Block 0022 [ 3]: 24c8da93562c711c +Block 0022 [ 4]: bc2a6302275eadd4 +Block 0022 [ 5]: 3ad682c508033828 +Block 0022 [ 6]: 1135c30b72574375 +Block 0022 [ 7]: 9f4e3111a45f174b +Block 0022 [ 8]: be83dc96a5b8a4ba +Block 0022 [ 9]: fcfe3ab091aca65a +Block 0022 [ 10]: 9390f7c4351730be +Block 0022 [ 11]: bf604eb636f62cc9 +Block 0022 [ 12]: f98ea9f7e17e70fb +Block 0022 [ 13]: 0b015cd145f26853 +Block 0022 [ 14]: ec9163fa13f74ce7 +Block 0022 [ 15]: 8ff97292d63bcab4 +Block 0022 [ 16]: d3feaf92c2d8b41f +Block 0022 [ 17]: d4566510bd20e7ec +Block 0022 [ 18]: afd8d144692a7f33 +Block 0022 [ 19]: e802522f54f2a988 +Block 0022 [ 20]: ac672a89864152a7 +Block 0022 [ 21]: 186e62c8651dd183 +Block 0022 [ 22]: 6e67bf8aea31dfbb +Block 0022 [ 23]: eb785c9679765811 +Block 0022 [ 24]: cae7b721f9066c1d +Block 0022 [ 25]: 87a4293682a4004f +Block 0022 [ 26]: 96748181c2c3c4fe +Block 0022 [ 27]: 0235a425b2c59625 +Block 0022 [ 28]: 32a9ad0c9ababac2 +Block 0022 [ 29]: a691969d4c8a0c62 +Block 0022 [ 30]: 8fde0adacef37668 +Block 0022 [ 31]: 116793c8d7eafcd9 +Block 0022 [ 32]: 22b38c1b92ffbcb7 +Block 0022 [ 33]: 6676a04278883071 +Block 0022 [ 34]: eb46aaf2e70c8316 +Block 0022 [ 35]: dbf45374f04b815e +Block 0022 [ 36]: 258bee0542c96efa +Block 0022 [ 37]: 907e4f6f7595a8ef +Block 0022 [ 38]: df765a9c4c218eae +Block 0022 [ 39]: 3d0e3375b574edbb +Block 0022 [ 40]: 35f13384a1c995ae +Block 0022 [ 41]: 3d0c667fe013a4a8 +Block 0022 [ 42]: 906807c8d09563b3 +Block 0022 [ 43]: fcc287c6a5bcd77b +Block 0022 [ 44]: 14367a708f16b036 +Block 0022 [ 45]: 4ba57f16db97c8eb +Block 0022 [ 46]: 2f970f37091fa261 +Block 0022 [ 47]: 6f40b4a61829c687 +Block 0022 [ 48]: 8ddbf5fd6a8b8d50 +Block 0022 [ 49]: 4a9338a492c0e4ab +Block 0022 [ 50]: ef65910de5dde029 +Block 0022 [ 51]: f1a5348f27802811 +Block 0022 [ 52]: d5af7a4002abceab +Block 0022 [ 53]: d7e088abfc4201df +Block 0022 [ 54]: 7e0dfe72426c89a4 +Block 0022 [ 55]: fad0116ee37d0d35 +Block 0022 [ 56]: e3ccd23e735c6370 +Block 0022 [ 57]: 14b635dad052af0e +Block 0022 [ 58]: bb4b95c0a662f3e1 +Block 0022 [ 59]: 9e1661bf69498511 +Block 0022 [ 60]: 9d3168e59f1d0ed6 +Block 0022 [ 61]: 054bbfbb6227b9c2 +Block 0022 [ 62]: 108a0be1a3e3437e +Block 0022 [ 63]: 8fd5bde2e8c51242 +Block 0022 [ 64]: ec830719ab04c9b7 +Block 0022 [ 65]: 21e51390f98ca718 +Block 0022 [ 66]: 7739557023bee6fc +Block 0022 [ 67]: 0bfff86bba432124 +Block 0022 [ 68]: 607dbfa6887d1a81 +Block 0022 [ 69]: 13060a984bf13d20 +Block 0022 [ 70]: f65ee280fc34e309 +Block 0022 [ 71]: 58ee7e200095a738 +Block 0022 [ 72]: 18453e4acd4adafe +Block 0022 [ 73]: 3b8541389d26247b +Block 0022 [ 74]: ca21feb22f02fd5e +Block 0022 [ 75]: 09caa3b763337817 +Block 0022 [ 76]: 0a6eb6fc271a194d +Block 0022 [ 77]: d0987e4b0bef2d4e +Block 0022 [ 78]: 4d95ded45c6ba518 +Block 0022 [ 79]: 934a752ae10e8b3c +Block 0022 [ 80]: 0903e0909bdea81b +Block 0022 [ 81]: 3534472f695ad1d7 +Block 0022 [ 82]: fe36851b1f2fe863 +Block 0022 [ 83]: 6a0458fca1095df9 +Block 0022 [ 84]: 17a70572293bad90 +Block 0022 [ 85]: e2a48e238aaddd2f +Block 0022 [ 86]: 3b2f3d364af66648 +Block 0022 [ 87]: b6ccb0a91ca2f8b5 +Block 0022 [ 88]: dfbd598aa7af5d05 +Block 0022 [ 89]: 3dea46fc047d9f8e +Block 0022 [ 90]: f35e090d51415634 +Block 0022 [ 91]: 5c0db506447169f3 +Block 0022 [ 92]: 590d2caff15b9a7f +Block 0022 [ 93]: bd6f691b9249e471 +Block 0022 [ 94]: 2e3c804924a7f4f0 +Block 0022 [ 95]: a370d8fd190c7576 +Block 0022 [ 96]: 88c7b5e26c6ff6b3 +Block 0022 [ 97]: 3e059d97d3e58cf1 +Block 0022 [ 98]: d7b099503b1b2fda +Block 0022 [ 99]: 708462a06022938b +Block 0022 [100]: e9c8ac7db507acaa +Block 0022 [101]: 442d1076e088613c +Block 0022 [102]: 9d7ce0f464ff1b07 +Block 0022 [103]: f63b65ffb38aa005 +Block 0022 [104]: 4b5c0033e9502909 +Block 0022 [105]: 6c773a3cd7b5e4f0 +Block 0022 [106]: 08f1e94be69a4fd6 +Block 0022 [107]: 1c373be886f35eb0 +Block 0022 [108]: b14dc4794c9b8cb1 +Block 0022 [109]: f3fbc1e0f5bb285b +Block 0022 [110]: b2d27593c7a712e4 +Block 0022 [111]: c9dfab152aa78ea7 +Block 0022 [112]: 06fb9ca2a671a544 +Block 0022 [113]: 05c4cd7d6203176f +Block 0022 [114]: b295a9ef3a79401a +Block 0022 [115]: 9451857213b32bbb +Block 0022 [116]: 92eb9750a6bae538 +Block 0022 [117]: 0cb4db498fc3bba0 +Block 0022 [118]: ca36208bf56a1e9c +Block 0022 [119]: 901d87ba10136d72 +Block 0022 [120]: 2cac1b66b391c7c6 +Block 0022 [121]: df54b5eab81b24bf +Block 0022 [122]: d3c88b759a23a4fe +Block 0022 [123]: 4097fe18adbfbc6f +Block 0022 [124]: 47a3bc5614d062a3 +Block 0022 [125]: 7c94001e1a2d2c65 +Block 0022 [126]: 0e80b1921c8637a5 +Block 0022 [127]: 5abc6ef9377e861b +Block 0023 [ 0]: 6f1853c5319f9562 +Block 0023 [ 1]: e2276855409e9046 +Block 0023 [ 2]: 8de58f45d20e98b0 +Block 0023 [ 3]: 67f609324d652b57 +Block 0023 [ 4]: 3a4bb948f39345b9 +Block 0023 [ 5]: 7ef1f641e620643c +Block 0023 [ 6]: 28462ac5919ab4ef +Block 0023 [ 7]: 8f62db1f9b18733c +Block 0023 [ 8]: 31cd7b2ea2476fb1 +Block 0023 [ 9]: 11b9623ab428c965 +Block 0023 [ 10]: 5c2020f5c2fe21de +Block 0023 [ 11]: df5626fef0b5978d +Block 0023 [ 12]: e5345a586ff7176c +Block 0023 [ 13]: 5188b696ebed647f +Block 0023 [ 14]: 7a92ccf8de6e893e +Block 0023 [ 15]: 9dc2f344b4e2c921 +Block 0023 [ 16]: a9b5b02623130ebf +Block 0023 [ 17]: f2ff269b618ba660 +Block 0023 [ 18]: fcf6c01de14de5ce +Block 0023 [ 19]: 2e3457136a7e83fb +Block 0023 [ 20]: 2b61c5171f8159b1 +Block 0023 [ 21]: 14e562091620ae2c +Block 0023 [ 22]: 2c9d26f9a7b5e6d2 +Block 0023 [ 23]: d0cc7ace37891cee +Block 0023 [ 24]: e21b920a63af6535 +Block 0023 [ 25]: b2c622542bd642bb +Block 0023 [ 26]: c6d62b3c28afa5ea +Block 0023 [ 27]: 97e8bb80322d3307 +Block 0023 [ 28]: 39848b62b609a793 +Block 0023 [ 29]: 37b886a95aafbaf3 +Block 0023 [ 30]: cb0cdc116b750327 +Block 0023 [ 31]: 52ab4414c2ac68e7 +Block 0023 [ 32]: bdf682bba57bdedb +Block 0023 [ 33]: 944852982e2c5134 +Block 0023 [ 34]: 18e61b320d8fe09f +Block 0023 [ 35]: 396de631d0da3b9d +Block 0023 [ 36]: 03360f528e36c8aa +Block 0023 [ 37]: 2192278da2fcaeb9 +Block 0023 [ 38]: 9dc55ef7840d826c +Block 0023 [ 39]: 03da781c403b16e8 +Block 0023 [ 40]: a39c8b8a7c670aba +Block 0023 [ 41]: 97493ed7fa5943b4 +Block 0023 [ 42]: 9f2a1463c375c544 +Block 0023 [ 43]: 01be7e591061e086 +Block 0023 [ 44]: d5b3537bd8a31e5f +Block 0023 [ 45]: 9ce6039b063e6265 +Block 0023 [ 46]: df1b651695071d84 +Block 0023 [ 47]: acb5903b1934a4b4 +Block 0023 [ 48]: 35d9e6c2b39909e7 +Block 0023 [ 49]: 64a8b6b286de343e +Block 0023 [ 50]: 2c2de51a549d5b57 +Block 0023 [ 51]: 4867625ed31c0f96 +Block 0023 [ 52]: 9faeae884d5791d8 +Block 0023 [ 53]: 5bdf23a008c25bb1 +Block 0023 [ 54]: d2878f03e4fe900f +Block 0023 [ 55]: 017cd24a913bd254 +Block 0023 [ 56]: e271daebf861cf5b +Block 0023 [ 57]: 75477c84426b8f73 +Block 0023 [ 58]: c96a6bebf91e1a14 +Block 0023 [ 59]: 8e4277cc1fa2ce6b +Block 0023 [ 60]: 68c4a44a97ffba2f +Block 0023 [ 61]: f6c2c2b99f342b8c +Block 0023 [ 62]: 6690a2192de3c87f +Block 0023 [ 63]: 36a0d3497baa7820 +Block 0023 [ 64]: 157f9015c0c7f9f0 +Block 0023 [ 65]: 79e419eb8e807756 +Block 0023 [ 66]: e66cc11ff8aa6f61 +Block 0023 [ 67]: 7e9b408465e7ce4e +Block 0023 [ 68]: 52c6a49a03883386 +Block 0023 [ 69]: f03fb132eebd2045 +Block 0023 [ 70]: cd567beb7556ec86 +Block 0023 [ 71]: 85982ac59523492a +Block 0023 [ 72]: 20ee64cb514ad474 +Block 0023 [ 73]: 4d1c99a6a8c08e4f +Block 0023 [ 74]: 5131c291ea29e9c2 +Block 0023 [ 75]: 6235198630fad95b +Block 0023 [ 76]: 70fe76acb0b18fbd +Block 0023 [ 77]: b206b78ef678c1ba +Block 0023 [ 78]: 56a6db19ae8589e5 +Block 0023 [ 79]: 72cdedfbd94dce70 +Block 0023 [ 80]: 7a50b0bf9fd61a9e +Block 0023 [ 81]: 0c85f95eeb886204 +Block 0023 [ 82]: 816c6be3d15ff55d +Block 0023 [ 83]: 20817fd396239ec1 +Block 0023 [ 84]: d05612a38e22672f +Block 0023 [ 85]: f972bd8da51d6fdf +Block 0023 [ 86]: 20fc3311fd080dd7 +Block 0023 [ 87]: a176747132531fce +Block 0023 [ 88]: 2b22d83144efdc3b +Block 0023 [ 89]: 4f558ac03d6f9bed +Block 0023 [ 90]: 09b7bca775f5d9e2 +Block 0023 [ 91]: d3265666a853a184 +Block 0023 [ 92]: 485da114eaeed42f +Block 0023 [ 93]: 2d4bed5cb24a661c +Block 0023 [ 94]: 2a1ce8bc3865294d +Block 0023 [ 95]: ffa252bb0cd9df9f +Block 0023 [ 96]: 1f5c37a3ccd57245 +Block 0023 [ 97]: 0718e569a201014e +Block 0023 [ 98]: 4bb1602a978086bf +Block 0023 [ 99]: ebbd6e7528af36a9 +Block 0023 [100]: 2b4ab8751bc9fe94 +Block 0023 [101]: 68553e85db3f32b4 +Block 0023 [102]: e31ed80700c9fdbc +Block 0023 [103]: 93afa5f880862c8f +Block 0023 [104]: 4660514a885ff84b +Block 0023 [105]: 19b38d1f248013b6 +Block 0023 [106]: 2e3c39ec54094983 +Block 0023 [107]: 96c1dcf93b6c6f29 +Block 0023 [108]: a683f243ac481cfb +Block 0023 [109]: 309a7c76f0304c9e +Block 0023 [110]: f75b27228b66cac7 +Block 0023 [111]: 8eb73c3b7595d5b9 +Block 0023 [112]: 69bc2ff710baec62 +Block 0023 [113]: 1602ea60ad1ee868 +Block 0023 [114]: 73ba0e151c086ee9 +Block 0023 [115]: 6fadbbbc8e00a7cf +Block 0023 [116]: f238a3ba1b46babc +Block 0023 [117]: dd3d5b22a7f66c81 +Block 0023 [118]: f1d34a91886de3fd +Block 0023 [119]: c1671928190cea58 +Block 0023 [120]: 47174dba3a407fed +Block 0023 [121]: c7ddfc44251d0ed0 +Block 0023 [122]: 72f4f8a5b1cec9ff +Block 0023 [123]: 20999d3b61bc0eb4 +Block 0023 [124]: 0a75094f49d3ad65 +Block 0023 [125]: dc9350409c61baed +Block 0023 [126]: 0fd7037aa67bac99 +Block 0023 [127]: e287e0e42246c7f4 +Block 0024 [ 0]: 0432574fbc9d5dd8 +Block 0024 [ 1]: c204e6cbddc0e513 +Block 0024 [ 2]: bff86a52bbb84772 +Block 0024 [ 3]: a4ad714647a24141 +Block 0024 [ 4]: 306dfb160cb0168b +Block 0024 [ 5]: 103af7fecdc4e474 +Block 0024 [ 6]: dc7c2fbc8418ae2c +Block 0024 [ 7]: f9b9db9b5b00530a +Block 0024 [ 8]: fdd811cc89258674 +Block 0024 [ 9]: c021d74c30791cad +Block 0024 [ 10]: e1e3a2611ee62cdc +Block 0024 [ 11]: b4376209f57ba102 +Block 0024 [ 12]: 485bad429d7a74d1 +Block 0024 [ 13]: 2f00dd21f7cba740 +Block 0024 [ 14]: eeedb2ea7180653e +Block 0024 [ 15]: 21bd09fbe74d0c42 +Block 0024 [ 16]: 1c3cf40409d194b3 +Block 0024 [ 17]: abb803645f3d4eef +Block 0024 [ 18]: 760aeea7a9b5cc3f +Block 0024 [ 19]: 19fae830355800be +Block 0024 [ 20]: 141dba19caf13520 +Block 0024 [ 21]: 8ca23b8f3cd2633e +Block 0024 [ 22]: 78b7a41e4ac99edc +Block 0024 [ 23]: 531d130dcf9774d8 +Block 0024 [ 24]: 837e14d422f7557e +Block 0024 [ 25]: 1a8dbdfb37af6c74 +Block 0024 [ 26]: 134301202c87ec18 +Block 0024 [ 27]: fcbb7a22c5b3df52 +Block 0024 [ 28]: 32f4e44e9fac6b59 +Block 0024 [ 29]: 13ef9cf9aaee02e2 +Block 0024 [ 30]: 80418abbff69af85 +Block 0024 [ 31]: 3fdc185377252bae +Block 0024 [ 32]: 313c10ca6661d457 +Block 0024 [ 33]: 11f9b04c374037ca +Block 0024 [ 34]: 8f318bc97ca0a623 +Block 0024 [ 35]: 25567955504565ab +Block 0024 [ 36]: 94a627d187cb82aa +Block 0024 [ 37]: 6312efdd2a1b6b15 +Block 0024 [ 38]: 578d72ee851807a4 +Block 0024 [ 39]: 0d7ea132d31936ad +Block 0024 [ 40]: 1e7a1b0c13069b01 +Block 0024 [ 41]: 0c0ac3cd3fb22d0e +Block 0024 [ 42]: 0d86238598ac86a4 +Block 0024 [ 43]: 4f8fc85ec52bd436 +Block 0024 [ 44]: 656e06c90e503727 +Block 0024 [ 45]: f879f0a09097b288 +Block 0024 [ 46]: e5de3d1a739a7d89 +Block 0024 [ 47]: c0f9d1fcf2ae3a40 +Block 0024 [ 48]: 5abc3ec589836477 +Block 0024 [ 49]: 2b1b22823ca247b4 +Block 0024 [ 50]: fa725af759926695 +Block 0024 [ 51]: 451275844fc4cee2 +Block 0024 [ 52]: d55319d56a1d94f7 +Block 0024 [ 53]: a013da8d2b0cd1f4 +Block 0024 [ 54]: ed7a84ba49aff786 +Block 0024 [ 55]: 89d502e82eb686b5 +Block 0024 [ 56]: 15952ee29e0e742b +Block 0024 [ 57]: 38bad0e41edf0fda +Block 0024 [ 58]: 0917ac2e67e4abf4 +Block 0024 [ 59]: 3f1d8424ff0b061b +Block 0024 [ 60]: b28a7c092d523671 +Block 0024 [ 61]: 648492402817887a +Block 0024 [ 62]: 98392a38e1d1cb57 +Block 0024 [ 63]: 6c3f7e8f7284210b +Block 0024 [ 64]: fdf9ed8aab0dddee +Block 0024 [ 65]: d7cd3a000a642aa5 +Block 0024 [ 66]: 818c0c07e43eabc2 +Block 0024 [ 67]: 8f0cec21539c9184 +Block 0024 [ 68]: 3290a8bf82fbb054 +Block 0024 [ 69]: 774f9f56cb180482 +Block 0024 [ 70]: 05c93d89441573e2 +Block 0024 [ 71]: 6d909bbec0f2b043 +Block 0024 [ 72]: 9f5fd6cd2e4972ec +Block 0024 [ 73]: 1529c07b366527fc +Block 0024 [ 74]: 046f880c84a32721 +Block 0024 [ 75]: 9ead89d33173d633 +Block 0024 [ 76]: 14db9d8f07af67f7 +Block 0024 [ 77]: 7a39735cb6469f13 +Block 0024 [ 78]: effbe25d83c95cef +Block 0024 [ 79]: 1c13ef9b8127cca1 +Block 0024 [ 80]: 8c6c66bf4007f535 +Block 0024 [ 81]: 0e43774693ab0d9f +Block 0024 [ 82]: ad94f20b17ac7409 +Block 0024 [ 83]: e7fc3a1411454e6c +Block 0024 [ 84]: 1ab8d0b17650a589 +Block 0024 [ 85]: 631bb50d34843850 +Block 0024 [ 86]: e4637482fe3a837b +Block 0024 [ 87]: 4904d626a5376682 +Block 0024 [ 88]: a2f694ab52ba264b +Block 0024 [ 89]: 4665d1ef7c41f849 +Block 0024 [ 90]: b4ea1371947d2810 +Block 0024 [ 91]: 79fb98770f2d912c +Block 0024 [ 92]: 2ce74cabf98919a3 +Block 0024 [ 93]: 762030a596c31be3 +Block 0024 [ 94]: 01f6ec6459e8170f +Block 0024 [ 95]: d43caf792539d9fb +Block 0024 [ 96]: 6100b03b6bede581 +Block 0024 [ 97]: b5524ced6d9dd33f +Block 0024 [ 98]: f7b50e455bcd2eba +Block 0024 [ 99]: fd24d6a38ab51643 +Block 0024 [100]: 35629cf1b450109a +Block 0024 [101]: 1f2304fe412e1390 +Block 0024 [102]: 81c4f114d70aee49 +Block 0024 [103]: cd63c0935c4c8e31 +Block 0024 [104]: 4111632fd7eaa644 +Block 0024 [105]: e4eba60023668c10 +Block 0024 [106]: 1b391550d1793d68 +Block 0024 [107]: f834a1e65bd10e66 +Block 0024 [108]: 04cf3169883c1761 +Block 0024 [109]: 3feb52f056a0ffb3 +Block 0024 [110]: 00b5f30a55a77677 +Block 0024 [111]: a885fd7ce60d83f6 +Block 0024 [112]: d2e107f102334203 +Block 0024 [113]: 3964a70ec5b6cab3 +Block 0024 [114]: b613b663f0093f9f +Block 0024 [115]: 35b11d5e2f64070d +Block 0024 [116]: 97965edbda06083a +Block 0024 [117]: b034b567199107ec +Block 0024 [118]: 95aca8d8108d34a2 +Block 0024 [119]: 02a7090233566f9b +Block 0024 [120]: 67a7495b336b06d2 +Block 0024 [121]: 4281aa7d3ee9611b +Block 0024 [122]: 468dea7a61d1edca +Block 0024 [123]: 238094066657c3fe +Block 0024 [124]: 0e1ab01381100ee6 +Block 0024 [125]: 0f1af8701c31727d +Block 0024 [126]: 9c94844cef907f44 +Block 0024 [127]: 902e335c261a32e7 +Block 0025 [ 0]: 6a33df8f52ad99bf +Block 0025 [ 1]: 1e4738940d06379b +Block 0025 [ 2]: b9f081d1f8243661 +Block 0025 [ 3]: 7df44c97870c6e9d +Block 0025 [ 4]: fbf7eaee7c04aab3 +Block 0025 [ 5]: c625e47ec737f9d4 +Block 0025 [ 6]: dfdb0e81b1004005 +Block 0025 [ 7]: 1bbc61627ecbd467 +Block 0025 [ 8]: 5bddb477803f2e65 +Block 0025 [ 9]: 9027be96a3f42340 +Block 0025 [ 10]: 558c0c7b4e389af7 +Block 0025 [ 11]: 448b3293b8a175b1 +Block 0025 [ 12]: 0a65e5e6cee01e24 +Block 0025 [ 13]: e599d714f1493875 +Block 0025 [ 14]: 0a7f22d619766c70 +Block 0025 [ 15]: fb02933939450b2a +Block 0025 [ 16]: 3f12eff85ecd0b82 +Block 0025 [ 17]: 956e0ca5e3c0c248 +Block 0025 [ 18]: 22ff792f503db151 +Block 0025 [ 19]: 17084ef5418273dc +Block 0025 [ 20]: ce747362530ae619 +Block 0025 [ 21]: 20b416abcb77c071 +Block 0025 [ 22]: deb39aca8d50640b +Block 0025 [ 23]: d31cdd0763cc5c81 +Block 0025 [ 24]: 84a8e613c349b233 +Block 0025 [ 25]: e8bc7a697643f7b5 +Block 0025 [ 26]: 0c36ddfc4171a8f8 +Block 0025 [ 27]: 4dbd968c9d34bed6 +Block 0025 [ 28]: e1d57c69a41636f3 +Block 0025 [ 29]: 766ae46b78df2f2e +Block 0025 [ 30]: 8f8f7f5a4c864ab9 +Block 0025 [ 31]: 878f468c99598ee7 +Block 0025 [ 32]: c4352b3d5e7b6a9f +Block 0025 [ 33]: b09e084d0f9e7188 +Block 0025 [ 34]: 2f9356019d974131 +Block 0025 [ 35]: 648b17019e5e2026 +Block 0025 [ 36]: fc5d8f769a45c489 +Block 0025 [ 37]: 02622e6a0de5e763 +Block 0025 [ 38]: ed36ab59ab7f18b8 +Block 0025 [ 39]: 4a7b050e74b8645f +Block 0025 [ 40]: 7221af6a190edb2a +Block 0025 [ 41]: b3f8f1aec73b76e7 +Block 0025 [ 42]: 0c8a615a280f8d8f +Block 0025 [ 43]: a46ec28c5ad8b7e2 +Block 0025 [ 44]: f038bfe29ade127b +Block 0025 [ 45]: 463ebb4801f169eb +Block 0025 [ 46]: 393b89ae6915a527 +Block 0025 [ 47]: 4c9de27e93368fcf +Block 0025 [ 48]: 476798d8e490924a +Block 0025 [ 49]: 58dd5a5031d795fb +Block 0025 [ 50]: 7c2b0b7e8ac62762 +Block 0025 [ 51]: c14ec516db75e3ce +Block 0025 [ 52]: 809ef653b7973236 +Block 0025 [ 53]: 6d0c17627f8457d0 +Block 0025 [ 54]: 5e4c5707ec7a312a +Block 0025 [ 55]: 10cc52c802e38f2a +Block 0025 [ 56]: 53832930d7f99e6f +Block 0025 [ 57]: e87111500e7eaf61 +Block 0025 [ 58]: 201807f71790abb0 +Block 0025 [ 59]: 6654a2ef4dbadf77 +Block 0025 [ 60]: abc3f86ab105500c +Block 0025 [ 61]: d5e670d24870e38a +Block 0025 [ 62]: 73df25444586e7e5 +Block 0025 [ 63]: 3604c5115f172cd6 +Block 0025 [ 64]: 3ea3445257cc3d20 +Block 0025 [ 65]: 0bf5afbad73b5237 +Block 0025 [ 66]: daf94be6af7bf1a0 +Block 0025 [ 67]: 370dde956abb776e +Block 0025 [ 68]: 802bd2a5fa2661e7 +Block 0025 [ 69]: ae052a4ce269f03c +Block 0025 [ 70]: d6ca5a4ac9dd3989 +Block 0025 [ 71]: ef2f6fe0822d0e9d +Block 0025 [ 72]: 0f28e85470f7823a +Block 0025 [ 73]: 241bf3e44e28ec45 +Block 0025 [ 74]: f304a89cb0cc1ae4 +Block 0025 [ 75]: 1967071e8d5f3958 +Block 0025 [ 76]: 15f52e78a9be5e6f +Block 0025 [ 77]: 36eb08b3e5658be2 +Block 0025 [ 78]: d4cf1ad4b5a79ed1 +Block 0025 [ 79]: fd4e0abe38be5444 +Block 0025 [ 80]: 297b66d84318d18b +Block 0025 [ 81]: 49b339bf3e8d42f0 +Block 0025 [ 82]: f282d4d78d5450c8 +Block 0025 [ 83]: 0064797664727d25 +Block 0025 [ 84]: ccbc9790b4fd936f +Block 0025 [ 85]: 15ac480e2508669b +Block 0025 [ 86]: fea4af22a8cb5003 +Block 0025 [ 87]: 1b4b21e63b6e9cda +Block 0025 [ 88]: 47e39f00b6418d15 +Block 0025 [ 89]: 33cab571c1aa93fc +Block 0025 [ 90]: 4fdadc07cc36e16d +Block 0025 [ 91]: bcf8cbe2a449f361 +Block 0025 [ 92]: b180fbeff2434f3d +Block 0025 [ 93]: 450472dcb53e8d52 +Block 0025 [ 94]: 51a5bdfc173ca0c6 +Block 0025 [ 95]: eba8b59eedcfe0f9 +Block 0025 [ 96]: fbe4510c8c404a78 +Block 0025 [ 97]: 0ed380b414a806e8 +Block 0025 [ 98]: a601ac4334f312b4 +Block 0025 [ 99]: 4c3df8d16dcc6031 +Block 0025 [100]: a9ee4854b8c57d47 +Block 0025 [101]: abebcdf52911dca8 +Block 0025 [102]: 6099abea1e246362 +Block 0025 [103]: f5f62963254c90d9 +Block 0025 [104]: 6fbbb44ecb8ac43c +Block 0025 [105]: 6a1ed1569ec8b87e +Block 0025 [106]: 4ae870e93ab864c3 +Block 0025 [107]: 0f2d84f09dd60efd +Block 0025 [108]: 5d2f346e77e5f9aa +Block 0025 [109]: 6ee2faa370274d62 +Block 0025 [110]: c7ef7e1d468fafae +Block 0025 [111]: 45b5d7078557dfed +Block 0025 [112]: 1df7503c1707885b +Block 0025 [113]: cf4db59f80be2658 +Block 0025 [114]: d075daea15b69025 +Block 0025 [115]: d46e2b1666564126 +Block 0025 [116]: b20de022658b0937 +Block 0025 [117]: 5bbdd8ea5ac84fdc +Block 0025 [118]: d11604e8a302ef3d +Block 0025 [119]: b7989bb11e8896fe +Block 0025 [120]: cd1a256af97a7065 +Block 0025 [121]: 3be04657757ea2c6 +Block 0025 [122]: 2bf0875d14cfb3fe +Block 0025 [123]: 7a17400be50e0372 +Block 0025 [124]: cfb3e6c1c5b72e4e +Block 0025 [125]: 51f1f3f96adc1d38 +Block 0025 [126]: cb6895cf3808177e +Block 0025 [127]: c372ac9e2280b766 +Block 0026 [ 0]: d4644b09c003253e +Block 0026 [ 1]: 12f7dd4cf4963e9f +Block 0026 [ 2]: 475ce25005e2660c +Block 0026 [ 3]: 0ee5d9d17575e7a5 +Block 0026 [ 4]: bff637afde37cda0 +Block 0026 [ 5]: 652429dbc2fffdfb +Block 0026 [ 6]: 0d600cbf7fdb1a88 +Block 0026 [ 7]: 49d337d8aa97c307 +Block 0026 [ 8]: 753808c8f5df9e29 +Block 0026 [ 9]: 70d05d603f8072fc +Block 0026 [ 10]: 3e38c9a4da895bb4 +Block 0026 [ 11]: 75173dd8ccb661b9 +Block 0026 [ 12]: 1f0fa6398c2162f5 +Block 0026 [ 13]: 905141a22ebf8360 +Block 0026 [ 14]: a070815d16d7cc44 +Block 0026 [ 15]: b2e0243bca0b9076 +Block 0026 [ 16]: f2da1f4202bfdd0d +Block 0026 [ 17]: 29c4deffd4129b54 +Block 0026 [ 18]: 053ffdde9e7578a3 +Block 0026 [ 19]: 93d82106bf559278 +Block 0026 [ 20]: d0c048e1c812fb7e +Block 0026 [ 21]: 8a60d0a5eba8b872 +Block 0026 [ 22]: 93a6956d1f540594 +Block 0026 [ 23]: 68d6c2c6d0cc49dc +Block 0026 [ 24]: 24add3c074371dee +Block 0026 [ 25]: 98425302f639d739 +Block 0026 [ 26]: b0f100a24e4e3c5c +Block 0026 [ 27]: f04de3ee7d7b230f +Block 0026 [ 28]: eebe1a10cc7a109a +Block 0026 [ 29]: 286d1aa98409a5a9 +Block 0026 [ 30]: 998eb27d9099fab7 +Block 0026 [ 31]: 782979936291e152 +Block 0026 [ 32]: f6e7a458a0dd3f32 +Block 0026 [ 33]: 1eee46fd1322e250 +Block 0026 [ 34]: d3be4374c23bb5a3 +Block 0026 [ 35]: 36a7f2642043491f +Block 0026 [ 36]: 0d8bb89da3a2d8c3 +Block 0026 [ 37]: 92a7d48e3745a5f8 +Block 0026 [ 38]: 02d855e4fddf98c3 +Block 0026 [ 39]: 3bd76c9b741fc555 +Block 0026 [ 40]: 9a58c2c02a3e8bb0 +Block 0026 [ 41]: 0d5587098b39ec0b +Block 0026 [ 42]: 0573c24e48f0c8e1 +Block 0026 [ 43]: 124716b689c0b68e +Block 0026 [ 44]: e71a1a03bbb1d432 +Block 0026 [ 45]: dfec9f9aa29448dc +Block 0026 [ 46]: 96e73736125c28ef +Block 0026 [ 47]: 389e19fca6820912 +Block 0026 [ 48]: db4a9c13301cb73d +Block 0026 [ 49]: 64b8097bc2acee2e +Block 0026 [ 50]: 6f13f445b46f092f +Block 0026 [ 51]: 2ca17f8ca1d0c9f0 +Block 0026 [ 52]: ad6814b85cdc3d75 +Block 0026 [ 53]: a2e9688b5c45d0b6 +Block 0026 [ 54]: 13b9954b1eff332f +Block 0026 [ 55]: bfb42ee6c61c2332 +Block 0026 [ 56]: 84b305a26d7d025a +Block 0026 [ 57]: d3b86917d5344169 +Block 0026 [ 58]: 309d160aaf7f21ee +Block 0026 [ 59]: 3a613153a6461ad3 +Block 0026 [ 60]: 6289de5bb1473da6 +Block 0026 [ 61]: 2931e93ed65c9c23 +Block 0026 [ 62]: de5613d1dd794cb5 +Block 0026 [ 63]: 45348e49103c2238 +Block 0026 [ 64]: d75eb060ca91922b +Block 0026 [ 65]: 3e841a14d2279025 +Block 0026 [ 66]: cfe5bf05de6129e7 +Block 0026 [ 67]: cc13a37b4b7fdbd4 +Block 0026 [ 68]: 2cfc21d2a742ed01 +Block 0026 [ 69]: 48358561341ccf61 +Block 0026 [ 70]: 7bac9e21d22b5d0b +Block 0026 [ 71]: 3d4f67f5dd597ce2 +Block 0026 [ 72]: 4b3dece6f7e0b1ee +Block 0026 [ 73]: 821441b39b6550ed +Block 0026 [ 74]: 0e7ad63d6847df36 +Block 0026 [ 75]: d5b6800ce41af41a +Block 0026 [ 76]: 2ab97c68612fe7e6 +Block 0026 [ 77]: 6e1c48f0697fe866 +Block 0026 [ 78]: d91966706c816313 +Block 0026 [ 79]: c270124d3ba5d069 +Block 0026 [ 80]: 3b98e12b91834469 +Block 0026 [ 81]: 921de3f47bb28efa +Block 0026 [ 82]: a9ffcbbefa055af8 +Block 0026 [ 83]: fc739c1f52d29c26 +Block 0026 [ 84]: 51c10952e7468dfa +Block 0026 [ 85]: b36cda035eedcfca +Block 0026 [ 86]: 9345c125f02e59cd +Block 0026 [ 87]: 77c8410841bf9f1b +Block 0026 [ 88]: 45ebed6372f51109 +Block 0026 [ 89]: bde310d799c65859 +Block 0026 [ 90]: f6751c32b3de8aa5 +Block 0026 [ 91]: bfd9e8b6ec61500d +Block 0026 [ 92]: 3878727b18396b95 +Block 0026 [ 93]: c44e906a21a72ae0 +Block 0026 [ 94]: 0709e625a56972cd +Block 0026 [ 95]: 02e1c37389617f94 +Block 0026 [ 96]: be53ee0cd959341d +Block 0026 [ 97]: 149d1af43d748caa +Block 0026 [ 98]: 68a219dd25c29566 +Block 0026 [ 99]: a865c2b5613af47b +Block 0026 [100]: 926200d4e41c8575 +Block 0026 [101]: 66c9d78f346bddd6 +Block 0026 [102]: 8ca35ac9bc3429c0 +Block 0026 [103]: 5f6e6c772d04c958 +Block 0026 [104]: 6876462dcbd7cf6e +Block 0026 [105]: dc96acd154a932e8 +Block 0026 [106]: 169dd1dfed20ede8 +Block 0026 [107]: 427e326fc5947488 +Block 0026 [108]: d1f9248337185dd5 +Block 0026 [109]: ef948dfb4d3cfe6f +Block 0026 [110]: 7c3b1733fa34d810 +Block 0026 [111]: 4f3678050ba9b9a5 +Block 0026 [112]: 6d2b0ab3102f5e0c +Block 0026 [113]: 1b129019ac99b656 +Block 0026 [114]: 61b7cb5bf8d5bfe6 +Block 0026 [115]: 8a9962b673ceb4bd +Block 0026 [116]: 266264ff1a486ee8 +Block 0026 [117]: e9bae0cc052322f2 +Block 0026 [118]: 264fdf5a1384c5a3 +Block 0026 [119]: 0da1f3a192b8f17d +Block 0026 [120]: ab5b52630aee7555 +Block 0026 [121]: e1c6aca80af029b7 +Block 0026 [122]: 7faad66596f50406 +Block 0026 [123]: 0afb5266837fc857 +Block 0026 [124]: 49836a76ba3f17f5 +Block 0026 [125]: a4f2be896b9a7faa +Block 0026 [126]: 896d8796bedac776 +Block 0026 [127]: 54c0cec184484beb +Block 0027 [ 0]: f61ccbc977a56f2a +Block 0027 [ 1]: 16a2fc666566d811 +Block 0027 [ 2]: dbdcef27043ee92c +Block 0027 [ 3]: 7bf75d5f65e78a65 +Block 0027 [ 4]: 0a15def59f31c142 +Block 0027 [ 5]: 831022f386d0b2a2 +Block 0027 [ 6]: 932e0543e746b58a +Block 0027 [ 7]: 496766ab72544725 +Block 0027 [ 8]: 355cfe19f9116a8d +Block 0027 [ 9]: 88d0d1a1d56bef94 +Block 0027 [ 10]: 3d19de35a7a14699 +Block 0027 [ 11]: ae51010a38de2ffd +Block 0027 [ 12]: 801daa838f87964a +Block 0027 [ 13]: 07b4368ee07db13d +Block 0027 [ 14]: 50b5f86bff7d4ab8 +Block 0027 [ 15]: 9df3735a949255bd +Block 0027 [ 16]: a8f2cb1fccf4258e +Block 0027 [ 17]: b78d1707330d5940 +Block 0027 [ 18]: 22e52dec13656ede +Block 0027 [ 19]: d9169565e082d981 +Block 0027 [ 20]: 9201b66dd9cc75df +Block 0027 [ 21]: de3b5b1d58b0a378 +Block 0027 [ 22]: ac99bd46131880bc +Block 0027 [ 23]: 8ba435f5db7fd1a1 +Block 0027 [ 24]: bd66ac15d4312fd7 +Block 0027 [ 25]: d6ded2fbdcf07f22 +Block 0027 [ 26]: ffdd843379defc18 +Block 0027 [ 27]: 175c1d853ab71b75 +Block 0027 [ 28]: aa2852e60c337b14 +Block 0027 [ 29]: 4b653b3ba64d4260 +Block 0027 [ 30]: c87559ba9bdc7d9d +Block 0027 [ 31]: 269034d8bf7b97f2 +Block 0027 [ 32]: bc6aa987a9a62dae +Block 0027 [ 33]: 90d49b0713c77323 +Block 0027 [ 34]: c48082b5b4a54927 +Block 0027 [ 35]: 51b5179740948ce8 +Block 0027 [ 36]: a68528d3e9f7ec4d +Block 0027 [ 37]: d4ffa0faa6cc3e32 +Block 0027 [ 38]: e1a43960e3fe86e0 +Block 0027 [ 39]: 9ed0c70304b2b51c +Block 0027 [ 40]: b89813269c079a30 +Block 0027 [ 41]: 8feb1556e23194f2 +Block 0027 [ 42]: bd439d3c8324dd8f +Block 0027 [ 43]: 647365a561b4f90d +Block 0027 [ 44]: d112b5668642c8d7 +Block 0027 [ 45]: fedfa6bc506a5cca +Block 0027 [ 46]: 8f3a47e825ac7e6e +Block 0027 [ 47]: 5974748b49bf0f5b +Block 0027 [ 48]: d1712b6d08e1775e +Block 0027 [ 49]: 7d63514c4c7b44e7 +Block 0027 [ 50]: d276fe180222463a +Block 0027 [ 51]: d409b7d46cbb8991 +Block 0027 [ 52]: c8bde5ae23928e0c +Block 0027 [ 53]: 257f8a112f710427 +Block 0027 [ 54]: 99307b3d2515b0b5 +Block 0027 [ 55]: 56f7bffe335d7bdb +Block 0027 [ 56]: 36bcfee53e19166b +Block 0027 [ 57]: f4ec1ab9701e3895 +Block 0027 [ 58]: 1c5df9cda8fc7cd6 +Block 0027 [ 59]: fb688c2afeeaa596 +Block 0027 [ 60]: 50b6afe08a28dafb +Block 0027 [ 61]: 64ab62e27c9d676d +Block 0027 [ 62]: 573e46f4f67708fb +Block 0027 [ 63]: 63659fcb0d92a75b +Block 0027 [ 64]: 51f92b0593c5b597 +Block 0027 [ 65]: 3f9a9f503844da60 +Block 0027 [ 66]: 2784db967aa7752a +Block 0027 [ 67]: 83f1a4885aba587c +Block 0027 [ 68]: c736f3d979e01d86 +Block 0027 [ 69]: 838c3a38d5df2224 +Block 0027 [ 70]: f5101255016d63fa +Block 0027 [ 71]: 6a2d21ac3cdb4216 +Block 0027 [ 72]: 5dfdfc52471007a6 +Block 0027 [ 73]: 8e0494b3ae831e6e +Block 0027 [ 74]: 0ca49adfe68d6e46 +Block 0027 [ 75]: e212b64996b824ec +Block 0027 [ 76]: 3bf7a8b725b94547 +Block 0027 [ 77]: 0c70cff5245765dc +Block 0027 [ 78]: b02efdf665ad2ce7 +Block 0027 [ 79]: add07405dc8f4bbb +Block 0027 [ 80]: 58bdb3ce3fa596ce +Block 0027 [ 81]: f46e119a901ef320 +Block 0027 [ 82]: 3d9b2c5765e6a815 +Block 0027 [ 83]: 8bc0e93794000096 +Block 0027 [ 84]: 3f2ef8e5cc121cf8 +Block 0027 [ 85]: 9c16d0dcf88aa1e4 +Block 0027 [ 86]: d12ace2887043640 +Block 0027 [ 87]: c8264013644d8e79 +Block 0027 [ 88]: 30e6157603308b2e +Block 0027 [ 89]: 5e5f2fe403cf044e +Block 0027 [ 90]: ccbad96f2d1ab536 +Block 0027 [ 91]: b036220cbfe7a195 +Block 0027 [ 92]: d80a67932c54111f +Block 0027 [ 93]: c3d187db6e9107e0 +Block 0027 [ 94]: 753b5db43665d4b8 +Block 0027 [ 95]: db0ff374dbaa1a09 +Block 0027 [ 96]: 514410f945dd118f +Block 0027 [ 97]: 57be8156f07071d6 +Block 0027 [ 98]: 20831c61b0b1efb2 +Block 0027 [ 99]: 66ffa9cc28cb58df +Block 0027 [100]: 5277e5ed3417bb29 +Block 0027 [101]: 74cd388100954b51 +Block 0027 [102]: 3f77adb63994e9cc +Block 0027 [103]: b114e4175adb6f67 +Block 0027 [104]: 584c55bf7efe2059 +Block 0027 [105]: f761b03aca13740b +Block 0027 [106]: f43ef2edb5b1c54f +Block 0027 [107]: f79c3eb23dbfc248 +Block 0027 [108]: 81cd4a75d42e1e27 +Block 0027 [109]: 3166561195b94ac4 +Block 0027 [110]: 826f483d5befa9ee +Block 0027 [111]: 1d9d8e376a6f48b8 +Block 0027 [112]: 25017bc5b9a0dd4c +Block 0027 [113]: 15f0fbf1e2f697ce +Block 0027 [114]: 9418301b7413dc13 +Block 0027 [115]: 6d4eb8ca015f7bd9 +Block 0027 [116]: 55cf81dd7bf59dab +Block 0027 [117]: 3acfb1bf664fac56 +Block 0027 [118]: 998d482b2c6fafff +Block 0027 [119]: ba9136aaac2f7dd8 +Block 0027 [120]: 3c057d31fb558e0e +Block 0027 [121]: c6b8fa4d73cfe12f +Block 0027 [122]: 4afd2610bce623fc +Block 0027 [123]: 8735afac2aef1c73 +Block 0027 [124]: d10aa2652a6b0eda +Block 0027 [125]: 66f953bde6d06ea7 +Block 0027 [126]: 39652bf53e0ee8e6 +Block 0027 [127]: 89a6db078ffde367 +Block 0028 [ 0]: 088aac2c3857a577 +Block 0028 [ 1]: a0b6fed09124ac4b +Block 0028 [ 2]: 362ffa99f02943c9 +Block 0028 [ 3]: 642585817f143c4a +Block 0028 [ 4]: 208cdb81bd9b3d70 +Block 0028 [ 5]: 0e8678f22bebe281 +Block 0028 [ 6]: f1c23f381e42bffe +Block 0028 [ 7]: 80239e3f68f08461 +Block 0028 [ 8]: a1a3854533eff47b +Block 0028 [ 9]: cef9e5e06b8f5d1c +Block 0028 [ 10]: 4b500e643d6e2a75 +Block 0028 [ 11]: cd40cd86e0c473d1 +Block 0028 [ 12]: a0f5a6551cf8b3a5 +Block 0028 [ 13]: 966f11064e299e87 +Block 0028 [ 14]: eb918189c4486e01 +Block 0028 [ 15]: c52bd0d591f11524 +Block 0028 [ 16]: d85699f0dd4d09cb +Block 0028 [ 17]: a998379519b903d2 +Block 0028 [ 18]: 8233976a1289a10d +Block 0028 [ 19]: a908225bc32e5bbb +Block 0028 [ 20]: b783103dd9dbcc87 +Block 0028 [ 21]: e179ccd6917bcd5c +Block 0028 [ 22]: ddca54948b1a3d91 +Block 0028 [ 23]: 02bd15a442b61f38 +Block 0028 [ 24]: f9a5a27a56dd5c77 +Block 0028 [ 25]: d1922e84331e4a15 +Block 0028 [ 26]: 0968424d0a903155 +Block 0028 [ 27]: fbb63f95b1027d55 +Block 0028 [ 28]: 9b1be6806db0be87 +Block 0028 [ 29]: b21ddfd09c727934 +Block 0028 [ 30]: 0d277d7fe3649aa5 +Block 0028 [ 31]: dae278bdc8f4e2c0 +Block 0028 [ 32]: 709a6d6c85fa293e +Block 0028 [ 33]: a842ba1029339035 +Block 0028 [ 34]: 168829ae6706aa0a +Block 0028 [ 35]: 3f984a5e4fdb2013 +Block 0028 [ 36]: adbe084b6c4dcc9a +Block 0028 [ 37]: 9700c392f4b4bf99 +Block 0028 [ 38]: a35e4e093e46bda8 +Block 0028 [ 39]: dc1d5c11087128cb +Block 0028 [ 40]: 6a88231cbb42f9ef +Block 0028 [ 41]: b06b59352d903657 +Block 0028 [ 42]: dd2d0e40b3c26c89 +Block 0028 [ 43]: 52394f18a73620fa +Block 0028 [ 44]: c4549f455acd5498 +Block 0028 [ 45]: 9a84a37bebc72e51 +Block 0028 [ 46]: 9ab08cb35b3a30b0 +Block 0028 [ 47]: bb110b5dbe5976d9 +Block 0028 [ 48]: ba0bbf9ea786754d +Block 0028 [ 49]: 13b07b4afb7dcee3 +Block 0028 [ 50]: fa94d4c9fcc3234d +Block 0028 [ 51]: 5adba4b8489fc0e2 +Block 0028 [ 52]: 1c0b608a49d31305 +Block 0028 [ 53]: 1ed3c3c41a036183 +Block 0028 [ 54]: f0f0b7a20ef30fb0 +Block 0028 [ 55]: 3303b0304d01be85 +Block 0028 [ 56]: f1c10f3b34586772 +Block 0028 [ 57]: 37bf3b20abe148dd +Block 0028 [ 58]: 08dd78d309816e36 +Block 0028 [ 59]: 606df5b9c82c35fa +Block 0028 [ 60]: a93bcb45203e4766 +Block 0028 [ 61]: 18e782252b192fe5 +Block 0028 [ 62]: a5b432fe27b22a6b +Block 0028 [ 63]: 815befa4dbfb304c +Block 0028 [ 64]: 44b8a91d7d1945c3 +Block 0028 [ 65]: 5fe76cf485a03ea3 +Block 0028 [ 66]: 6d39d90222a44ea5 +Block 0028 [ 67]: 5b6a2edd580ba743 +Block 0028 [ 68]: 440f7c6240bb750a +Block 0028 [ 69]: d2b85d4e3d80d7a3 +Block 0028 [ 70]: 4d28137d3f7ded74 +Block 0028 [ 71]: de28ddfce56388df +Block 0028 [ 72]: a2108b11c471e2d4 +Block 0028 [ 73]: 4298b69f391e4244 +Block 0028 [ 74]: ac65036956570a74 +Block 0028 [ 75]: c45a698f324c1be7 +Block 0028 [ 76]: 89bde3ac62e3798f +Block 0028 [ 77]: 9b5ba6bd4a39a824 +Block 0028 [ 78]: 06a98f7479d97126 +Block 0028 [ 79]: 9fb5f80568d1e565 +Block 0028 [ 80]: 25da5865646da062 +Block 0028 [ 81]: 056993803daee9e4 +Block 0028 [ 82]: d79b510e6a2497ad +Block 0028 [ 83]: e57cccea49ab9d2e +Block 0028 [ 84]: 0573cd7a8a9f686b +Block 0028 [ 85]: e0bdb3957003d683 +Block 0028 [ 86]: 4cf9e311e9eb0697 +Block 0028 [ 87]: 1de23f2b155fa2c6 +Block 0028 [ 88]: 713f6f60a9ac9366 +Block 0028 [ 89]: 40660511f45d715c +Block 0028 [ 90]: 3d044bc452be348e +Block 0028 [ 91]: b1a3d26f9109e36c +Block 0028 [ 92]: b70831d9b9ad1111 +Block 0028 [ 93]: 45df8d4fca891faa +Block 0028 [ 94]: d71dac9055088d48 +Block 0028 [ 95]: 13a504472229514e +Block 0028 [ 96]: 8d8bd291fe868bfd +Block 0028 [ 97]: 1f66d37590815231 +Block 0028 [ 98]: b859beb049bd4b66 +Block 0028 [ 99]: 89829ed4ffb5170b +Block 0028 [100]: 52e8375395a467d7 +Block 0028 [101]: dcca6c6931e8cdde +Block 0028 [102]: 00f90463fbd8fc5a +Block 0028 [103]: 0a5f42e01c5b667b +Block 0028 [104]: e46cf47f24bedf8e +Block 0028 [105]: 034b1dd0073689d1 +Block 0028 [106]: a612861d03331e5f +Block 0028 [107]: 68ac52c319095484 +Block 0028 [108]: 350bc6c86e048311 +Block 0028 [109]: c1ae658f7f8af644 +Block 0028 [110]: 3c4c6ec5e982d732 +Block 0028 [111]: 3a7dea9db1cf7e6f +Block 0028 [112]: a00f6c189a25561f +Block 0028 [113]: d705eb5c682176f3 +Block 0028 [114]: 8195aed15af503da +Block 0028 [115]: 6ea0bc3009ae67b9 +Block 0028 [116]: bb40bd941cefcc70 +Block 0028 [117]: 60f5cc6a11061338 +Block 0028 [118]: 51e2aef2ef59d60e +Block 0028 [119]: b70676b31c174219 +Block 0028 [120]: 6a2ba18907524637 +Block 0028 [121]: 9d7c64aefab310f4 +Block 0028 [122]: 997067b75f51b90e +Block 0028 [123]: dc3bfa47e95a49a6 +Block 0028 [124]: eaec533ed804b5b7 +Block 0028 [125]: 5547101d57e37aef +Block 0028 [126]: 799dfdd22151025a +Block 0028 [127]: 90cc16f473dba724 +Block 0029 [ 0]: 572f1144c32f7dab +Block 0029 [ 1]: c31548f5a66c3fb6 +Block 0029 [ 2]: ca490b90ff80f8de +Block 0029 [ 3]: b146116df806ef35 +Block 0029 [ 4]: 6d600a5153b6a469 +Block 0029 [ 5]: 2da404efd679d833 +Block 0029 [ 6]: dbeb8ec42cc45f9e +Block 0029 [ 7]: 88739fea24e59cca +Block 0029 [ 8]: ca9ff1be0ebab86c +Block 0029 [ 9]: 7cdd3f4397352ced +Block 0029 [ 10]: e41b1f1cf69b0cc6 +Block 0029 [ 11]: 7e8932d1c89a6ed9 +Block 0029 [ 12]: 046c06abfd2f94e4 +Block 0029 [ 13]: 2a9fdb55d946d935 +Block 0029 [ 14]: 1eb8f81ae510e952 +Block 0029 [ 15]: 081ea3edc46f7990 +Block 0029 [ 16]: f189d1aa25714359 +Block 0029 [ 17]: 2614f7d8b82ca013 +Block 0029 [ 18]: 58787f4689125662 +Block 0029 [ 19]: 1e9f16c6744d5785 +Block 0029 [ 20]: 171cf29f14bcee0c +Block 0029 [ 21]: 9bdbd58787ca6a0c +Block 0029 [ 22]: 375d6ea49ab671d6 +Block 0029 [ 23]: 2ccefc0df4a3db19 +Block 0029 [ 24]: 5e2503088efa948f +Block 0029 [ 25]: a78105b291f531e6 +Block 0029 [ 26]: 418f0c8f58232cfa +Block 0029 [ 27]: bb3151e53430f7c0 +Block 0029 [ 28]: c080596a5a33fdc0 +Block 0029 [ 29]: ab40cbac0a446b74 +Block 0029 [ 30]: a4d39e0180a840d8 +Block 0029 [ 31]: e486a9d4701353a1 +Block 0029 [ 32]: 1980896626f0214c +Block 0029 [ 33]: 5e2b407a0b8452aa +Block 0029 [ 34]: 0ff5680993263bea +Block 0029 [ 35]: d8f68bc617df56c1 +Block 0029 [ 36]: 7a09a3bc6e3f2115 +Block 0029 [ 37]: 3de17c917e933d70 +Block 0029 [ 38]: 7d5f24bffa2f5bb0 +Block 0029 [ 39]: 28dbfce634746d88 +Block 0029 [ 40]: 378806628dd28ec9 +Block 0029 [ 41]: 531568e58a28c770 +Block 0029 [ 42]: 31228f6199722c5a +Block 0029 [ 43]: 1ed5d3b9e627c8c4 +Block 0029 [ 44]: 608a0a1d3af68c46 +Block 0029 [ 45]: 973dcfd310312d48 +Block 0029 [ 46]: 813e441942018cb7 +Block 0029 [ 47]: 13dc1955ca36589b +Block 0029 [ 48]: 7e5ead81cdeda257 +Block 0029 [ 49]: 0f4367bbc560ef51 +Block 0029 [ 50]: 5dc3771d1decf53d +Block 0029 [ 51]: cfbec72c90933cf2 +Block 0029 [ 52]: c1a6158ea9e320aa +Block 0029 [ 53]: 33c06d86c91ed670 +Block 0029 [ 54]: 85467d056d9b4f04 +Block 0029 [ 55]: 4a039fca79da2fb7 +Block 0029 [ 56]: d3b862a69ea8455a +Block 0029 [ 57]: 8df2d2a5ef2884d2 +Block 0029 [ 58]: ded0120bb11702e2 +Block 0029 [ 59]: 7c9c6143da42a5a2 +Block 0029 [ 60]: 8f5e253428b8c855 +Block 0029 [ 61]: 5bf874199625330c +Block 0029 [ 62]: b93ce12a653f7d23 +Block 0029 [ 63]: 67a439b00b8e30f7 +Block 0029 [ 64]: c266ff756d585cb8 +Block 0029 [ 65]: 1e42a8b331e42a23 +Block 0029 [ 66]: 7a160fbda5d05715 +Block 0029 [ 67]: 12920934bcce7a7a +Block 0029 [ 68]: 9c3f9b96c11b8bc7 +Block 0029 [ 69]: 1597088b19ac236a +Block 0029 [ 70]: f0211c610b4e66ca +Block 0029 [ 71]: a6ecc66bab3fcf49 +Block 0029 [ 72]: 3c16a295685c5d8a +Block 0029 [ 73]: c0d3f25b295e2acc +Block 0029 [ 74]: 6a25ba69a766c8aa +Block 0029 [ 75]: 15dac6fcd74d2ca7 +Block 0029 [ 76]: d66ee559cf707ee1 +Block 0029 [ 77]: 376cf4b0a389b1d1 +Block 0029 [ 78]: 95b7cccaa711e62a +Block 0029 [ 79]: 045137ff521630b6 +Block 0029 [ 80]: e80209e08c0b77d4 +Block 0029 [ 81]: 6f7d6fdb47d99fa6 +Block 0029 [ 82]: ca327877c6ea5a6c +Block 0029 [ 83]: aa2e63dc8dfa2102 +Block 0029 [ 84]: 6d074e9ebe45b594 +Block 0029 [ 85]: 43b8a4e840ade226 +Block 0029 [ 86]: 270b901b540052b0 +Block 0029 [ 87]: 4dfddc88d72aeff2 +Block 0029 [ 88]: 8bf43db820319d2f +Block 0029 [ 89]: 331ca9d80f2ec3e0 +Block 0029 [ 90]: 060830ef760715bc +Block 0029 [ 91]: 8a8325d30998d393 +Block 0029 [ 92]: aeaa2f11004e419d +Block 0029 [ 93]: fa8d7e4b5e7ab8c8 +Block 0029 [ 94]: 1baabae972b14d49 +Block 0029 [ 95]: 76d1394e3ba03bd8 +Block 0029 [ 96]: a0a0953687d17827 +Block 0029 [ 97]: 051b864ddf100caf +Block 0029 [ 98]: 514e508badc56cbf +Block 0029 [ 99]: d7a8c578e557b1d5 +Block 0029 [100]: caed014550fae99b +Block 0029 [101]: 0836242ac75e3bdb +Block 0029 [102]: 64a6302124675915 +Block 0029 [103]: f1c003c69d8e303f +Block 0029 [104]: fa0d37a15250c31c +Block 0029 [105]: f8e1724351bba255 +Block 0029 [106]: 667b6b5f6cc79af9 +Block 0029 [107]: ddc2b84fd4bd3e79 +Block 0029 [108]: 50d991c07f996c66 +Block 0029 [109]: 02c92496716cf522 +Block 0029 [110]: 04ab44d396d9c9c4 +Block 0029 [111]: 96c9ae1f87be0ad7 +Block 0029 [112]: f7796644baaf6e90 +Block 0029 [113]: 0f249954ee125408 +Block 0029 [114]: b0d2205cb60bf289 +Block 0029 [115]: b9c5ec1762ebc57c +Block 0029 [116]: 31f029ed8dfc27dd +Block 0029 [117]: 0893c028683bf03b +Block 0029 [118]: e830266fd7940a0e +Block 0029 [119]: 5485c0e009244e39 +Block 0029 [120]: a0432c001528bd5b +Block 0029 [121]: b0d05b8d644891d9 +Block 0029 [122]: 83199ca64c50deef +Block 0029 [123]: f26cb6a7a2b998aa +Block 0029 [124]: 05006e76730d7ad4 +Block 0029 [125]: cb1707a747abe93c +Block 0029 [126]: ca20245fdf028ad9 +Block 0029 [127]: 0eaa767ba568dda0 +Block 0030 [ 0]: 35eec3a1bdd9dcdf +Block 0030 [ 1]: b6d1023e5b82a174 +Block 0030 [ 2]: 5a08eb6fc3b96090 +Block 0030 [ 3]: c22a681ecb82a62d +Block 0030 [ 4]: 5cf2c83f5feaf5bb +Block 0030 [ 5]: d58d528b0d9792a8 +Block 0030 [ 6]: e269e6a6101c9310 +Block 0030 [ 7]: 0c71f9e54ed5b711 +Block 0030 [ 8]: daa5bc93c7835c15 +Block 0030 [ 9]: 0e733d8eafc9075d +Block 0030 [ 10]: a98ad05698c3ebb9 +Block 0030 [ 11]: cad1a03b880005b8 +Block 0030 [ 12]: 264d34c610ff7458 +Block 0030 [ 13]: 8120a277df740d4a +Block 0030 [ 14]: 0f0df615f4690f6e +Block 0030 [ 15]: 460c0f1ebed7ba74 +Block 0030 [ 16]: 98b68c7ea1bfc4dc +Block 0030 [ 17]: 0c3770b51f0ef728 +Block 0030 [ 18]: bf5a91880cec573b +Block 0030 [ 19]: 00dec1a05964e9c8 +Block 0030 [ 20]: 91472db675baf6aa +Block 0030 [ 21]: 57b966cc8b970571 +Block 0030 [ 22]: fe83863b3b423d83 +Block 0030 [ 23]: c4511487b6e058bf +Block 0030 [ 24]: f866ad2a5e3ef155 +Block 0030 [ 25]: d00d1a3b6d7e2143 +Block 0030 [ 26]: 09ccaa4d528b7f6f +Block 0030 [ 27]: 443a1754209266bb +Block 0030 [ 28]: 0658c243f1d4e623 +Block 0030 [ 29]: 1f15e52d01020370 +Block 0030 [ 30]: 3d29b62d3a00e90f +Block 0030 [ 31]: c801d874113fb712 +Block 0030 [ 32]: 31f1a0f6fa357f53 +Block 0030 [ 33]: d8a3901a28ad6915 +Block 0030 [ 34]: 6514a01c4bba4865 +Block 0030 [ 35]: 96d805c9c39a91fa +Block 0030 [ 36]: 0b53a27c8f27fbba +Block 0030 [ 37]: 61135b0d7c903e3c +Block 0030 [ 38]: 02a6bcae74e89195 +Block 0030 [ 39]: 0183b5104d995a56 +Block 0030 [ 40]: 8e6f77bb221c1b2f +Block 0030 [ 41]: 94257e6f522ab7e9 +Block 0030 [ 42]: 7935f5eb602ae0f0 +Block 0030 [ 43]: c190b3613d89e268 +Block 0030 [ 44]: fa8027f56884201f +Block 0030 [ 45]: 8452d5d1e97c7b9a +Block 0030 [ 46]: a744289083376f31 +Block 0030 [ 47]: 955ea0a65d356d40 +Block 0030 [ 48]: c7e8ebd7c1035444 +Block 0030 [ 49]: 32ee6c0c63df2a06 +Block 0030 [ 50]: c9c50a65fdcfa136 +Block 0030 [ 51]: 7c3949da834717e4 +Block 0030 [ 52]: 749ee2a2e64ef7e2 +Block 0030 [ 53]: 354171f4cf739fe8 +Block 0030 [ 54]: 6acdc20bc8cfff15 +Block 0030 [ 55]: 16332b8970b0b731 +Block 0030 [ 56]: 39a030c4e7303b1e +Block 0030 [ 57]: 0a8c7141990a51fd +Block 0030 [ 58]: 4994ff90a28e39d3 +Block 0030 [ 59]: 2b5f4aa3c04531ec +Block 0030 [ 60]: b4ca924c16740047 +Block 0030 [ 61]: 907c8e5f7fdac555 +Block 0030 [ 62]: 663590f5934b831a +Block 0030 [ 63]: 4814910e7ae9334e +Block 0030 [ 64]: 42f7f287225986de +Block 0030 [ 65]: a0a7c150090e9296 +Block 0030 [ 66]: e280f437ed51ac54 +Block 0030 [ 67]: 3aa6abcd3a48d52f +Block 0030 [ 68]: 4f3401719d462eb9 +Block 0030 [ 69]: f834a32b293e01bd +Block 0030 [ 70]: c2810f77328910af +Block 0030 [ 71]: 627f172bf1a181f2 +Block 0030 [ 72]: 64d92ef494745621 +Block 0030 [ 73]: 2cf202565cc16c7d +Block 0030 [ 74]: 737df2974bcb0abf +Block 0030 [ 75]: acf603206208444f +Block 0030 [ 76]: fa6edee39a5297d3 +Block 0030 [ 77]: cc4623ae6d994d2a +Block 0030 [ 78]: fd3675f83fde5920 +Block 0030 [ 79]: 2bb1331f7bd2ea92 +Block 0030 [ 80]: fb52ae43c3c284dd +Block 0030 [ 81]: 4825a51327dd0b90 +Block 0030 [ 82]: 45bd078cd0197078 +Block 0030 [ 83]: 71c34f74f169fa00 +Block 0030 [ 84]: ef1ad43c0d37519f +Block 0030 [ 85]: be67d13de95a25ac +Block 0030 [ 86]: 5629c929e6e1b125 +Block 0030 [ 87]: 91af1482e10844f5 +Block 0030 [ 88]: dcf844cf39afaf79 +Block 0030 [ 89]: e47b0b0d29cfaf1f +Block 0030 [ 90]: ac6f4fee2312428c +Block 0030 [ 91]: 3c8a03041548a4d3 +Block 0030 [ 92]: c34935ad9024a98e +Block 0030 [ 93]: 3282a01b8e51f0b2 +Block 0030 [ 94]: 48c5ff2f324f1d28 +Block 0030 [ 95]: 6b35fc1a36a9ecf6 +Block 0030 [ 96]: a41e7feb2b71d512 +Block 0030 [ 97]: e94cecb45a14c029 +Block 0030 [ 98]: 5aa3f223b12c8de9 +Block 0030 [ 99]: c6d730ea67389b8c +Block 0030 [100]: d488cfc4528666c0 +Block 0030 [101]: 600f2ccc30b2208b +Block 0030 [102]: 8d5c68cd498eb292 +Block 0030 [103]: 5f909bb9f8fc4aae +Block 0030 [104]: 033d0c61f989ea55 +Block 0030 [105]: 8a5c19ca84fb2c16 +Block 0030 [106]: a1b0a2c8dcc38ad5 +Block 0030 [107]: 8603876466cd7a1d +Block 0030 [108]: 6a282ca5a8f9dee4 +Block 0030 [109]: 0ded75533e1fa4d0 +Block 0030 [110]: 605949936666b3a5 +Block 0030 [111]: 5103e954515f21a5 +Block 0030 [112]: bf640ae5e6d30198 +Block 0030 [113]: 501e4517d702b2bd +Block 0030 [114]: bbb83c6ed92fde1d +Block 0030 [115]: e24b7bf1f4048387 +Block 0030 [116]: 27a75bde0d4482a5 +Block 0030 [117]: 1fee004f4ea1caa8 +Block 0030 [118]: a35697de43230d57 +Block 0030 [119]: 8e1a3dee6d4fc04e +Block 0030 [120]: 7137020314cc8f22 +Block 0030 [121]: b7df79f263c55815 +Block 0030 [122]: 5ae620c98adcc163 +Block 0030 [123]: 6f3cdde1d908d6cd +Block 0030 [124]: 0df0a1525bb95f5a +Block 0030 [125]: 8ec8f8c55d340d8a +Block 0030 [126]: a350788bd3453cc8 +Block 0030 [127]: 6d8d2e9626e4a502 +Block 0031 [ 0]: 17f04bbc11e7dc2d +Block 0031 [ 1]: 56fa16e87ce4a877 +Block 0031 [ 2]: 414aacac928886f9 +Block 0031 [ 3]: c278b12dd24e8545 +Block 0031 [ 4]: 900bbae93aa324a2 +Block 0031 [ 5]: e565209f68e87880 +Block 0031 [ 6]: e12768818997bd3a +Block 0031 [ 7]: ec463ae609e2980d +Block 0031 [ 8]: ef1eda834df17eed +Block 0031 [ 9]: ea6c80cd4897d934 +Block 0031 [ 10]: 4759ca11b6b43585 +Block 0031 [ 11]: 0a700649d273d4ff +Block 0031 [ 12]: a0292650159af12c +Block 0031 [ 13]: 5c51f53ededcb01d +Block 0031 [ 14]: b1eb730446485b2a +Block 0031 [ 15]: 28e955476e94c4c8 +Block 0031 [ 16]: cda545bde429a516 +Block 0031 [ 17]: a163659a8296eb0f +Block 0031 [ 18]: 554ef34819b72063 +Block 0031 [ 19]: 593178b25e0048b1 +Block 0031 [ 20]: 466f63e300bd02de +Block 0031 [ 21]: cd588de4d77a35cb +Block 0031 [ 22]: d1ebe193548aa8ac +Block 0031 [ 23]: 660dfe5583b59609 +Block 0031 [ 24]: 7caa8441a5730345 +Block 0031 [ 25]: ccc888ec843789e4 +Block 0031 [ 26]: 9103953a6cf5c334 +Block 0031 [ 27]: 5c422704f88d39ba +Block 0031 [ 28]: c8be51040c12db07 +Block 0031 [ 29]: 84858398a40042ad +Block 0031 [ 30]: dfcaa049225d167c +Block 0031 [ 31]: 98f2cc9f4e4258d0 +Block 0031 [ 32]: f3fae3fa4db6bfb0 +Block 0031 [ 33]: 8bfa9c45c8a401d2 +Block 0031 [ 34]: ab66cd15c2f7af11 +Block 0031 [ 35]: 62e64fbaf0892bb1 +Block 0031 [ 36]: 078c18524a46e818 +Block 0031 [ 37]: 8f6b27dda6f09cb9 +Block 0031 [ 38]: a906170570ca0e20 +Block 0031 [ 39]: 44369154789511f4 +Block 0031 [ 40]: 4f859124dc22dc99 +Block 0031 [ 41]: d968707bbce205da +Block 0031 [ 42]: 7ff0fd984ff0a1c6 +Block 0031 [ 43]: b944db9fec0c5cb1 +Block 0031 [ 44]: 5f54ca0bce6d4739 +Block 0031 [ 45]: 3c1776b8a9b1e6a0 +Block 0031 [ 46]: f4243052fe6111ac +Block 0031 [ 47]: 09731689890469fd +Block 0031 [ 48]: ee8c13fe19a0fc7d +Block 0031 [ 49]: cca002284ad8f54c +Block 0031 [ 50]: 11e37c8ef20aae2d +Block 0031 [ 51]: 8af27a895dc48c82 +Block 0031 [ 52]: 807a0952da78d9cf +Block 0031 [ 53]: bad0e80749fe807e +Block 0031 [ 54]: 076a367d0ed3de20 +Block 0031 [ 55]: 4c8f43e0f8ea7a22 +Block 0031 [ 56]: 02000f1a9bd4d6d9 +Block 0031 [ 57]: 25f514284bf170c0 +Block 0031 [ 58]: ebf76a18430a3683 +Block 0031 [ 59]: 9d7f67409a259d66 +Block 0031 [ 60]: 3b50b369a4c34bd1 +Block 0031 [ 61]: f385dcc6299ce473 +Block 0031 [ 62]: 1d22709b4dd07705 +Block 0031 [ 63]: 92ff35c57fb9a700 +Block 0031 [ 64]: 0d50a1ac1ca57f4b +Block 0031 [ 65]: 7ee41d83eb6124ab +Block 0031 [ 66]: 5691ff7e8fa8e58a +Block 0031 [ 67]: b3e4310469c63efa +Block 0031 [ 68]: e24a8771310b52a2 +Block 0031 [ 69]: a733c130da1b32eb +Block 0031 [ 70]: 44c32f9cd6c3ed90 +Block 0031 [ 71]: 4b20203253583d31 +Block 0031 [ 72]: 996147e6477e0ad6 +Block 0031 [ 73]: d86db7272010bbeb +Block 0031 [ 74]: c7fc45ee0dec0947 +Block 0031 [ 75]: 25a1645723db3526 +Block 0031 [ 76]: 7da54338e579e32d +Block 0031 [ 77]: 5f29c738c150bb1f +Block 0031 [ 78]: 34dcc2d8376aeb0e +Block 0031 [ 79]: 1921234d4052d257 +Block 0031 [ 80]: 004f0640368bd0c2 +Block 0031 [ 81]: 89f931c647d8f9b4 +Block 0031 [ 82]: 1f4a7045198e2d2a +Block 0031 [ 83]: e49345423ffa0203 +Block 0031 [ 84]: 42f67a45efede962 +Block 0031 [ 85]: 51ebcf52c66ad71b +Block 0031 [ 86]: 8c93f1d50c18862c +Block 0031 [ 87]: f9cbe34de0b63e22 +Block 0031 [ 88]: dc02d2c3e2a0e1d2 +Block 0031 [ 89]: f8fe0b8ce04e52f2 +Block 0031 [ 90]: 08b3785b2ed9f6b4 +Block 0031 [ 91]: a39851d6ab2f3f70 +Block 0031 [ 92]: b69af0d633f40c6e +Block 0031 [ 93]: 9a1aaa50cc9336ca +Block 0031 [ 94]: 64455ddbd424fb68 +Block 0031 [ 95]: 512cadd6b83a7da9 +Block 0031 [ 96]: 74439d194a299b98 +Block 0031 [ 97]: 09e7891d17775e57 +Block 0031 [ 98]: 863f478b9c56d481 +Block 0031 [ 99]: 0156ad653deb9a3a +Block 0031 [100]: 35ef7b185e953464 +Block 0031 [101]: bb34f03813de8918 +Block 0031 [102]: f73a6350becbab3b +Block 0031 [103]: a1dedf24e6b0e9aa +Block 0031 [104]: b61134a8ce3b8f8d +Block 0031 [105]: 5c24eb885f2838ec +Block 0031 [106]: c74db3229966d2b3 +Block 0031 [107]: 7f146ecea2afb556 +Block 0031 [108]: b59cbee73722bfe7 +Block 0031 [109]: 97a08d2807abf018 +Block 0031 [110]: a202a7d3bc2c1631 +Block 0031 [111]: f0f2c48ba5fb6065 +Block 0031 [112]: 669d543a28958dca +Block 0031 [113]: 3384de016a7ddbbf +Block 0031 [114]: a5881297663e6707 +Block 0031 [115]: a70d745c38904dc4 +Block 0031 [116]: 9f4d179cc16fe173 +Block 0031 [117]: aa6771a8009e295e +Block 0031 [118]: fb1a4e991991c6f3 +Block 0031 [119]: f2505e38b73a62ea +Block 0031 [120]: b3016d3b6191fc27 +Block 0031 [121]: 9fb9d1486ebe88c8 +Block 0031 [122]: a37b0ffd9bee0c99 +Block 0031 [123]: ff109aeefd852972 +Block 0031 [124]: 7f7e2156c126d827 +Block 0031 [125]: 8d0ed8ad89cac26e +Block 0031 [126]: ca21425508286511 +Block 0031 [127]: c5a87589413a5f41 + + After pass 1: +Block 0000 [ 0]: e9550cb7441be892 +Block 0000 [ 1]: a3fd96fddca6f69d +Block 0000 [ 2]: 0a0727a61a894945 +Block 0000 [ 3]: 11fe2d86c258ae46 +Block 0000 [ 4]: a9ef7448a0ccab00 +Block 0000 [ 5]: 06d8a79699b1e047 +Block 0000 [ 6]: 7fcb9ae69b0aaac7 +Block 0000 [ 7]: 69343012c3076ea1 +Block 0000 [ 8]: 6e00d67ace2ec3f8 +Block 0000 [ 9]: a49d58c0eba07a30 +Block 0000 [ 10]: 90926900f4773099 +Block 0000 [ 11]: a3da3441347fe815 +Block 0000 [ 12]: a79e6d347b657244 +Block 0000 [ 13]: 4285744253dfd00e +Block 0000 [ 14]: aa1fa5ed81b624df +Block 0000 [ 15]: 3d9b7373f8597467 +Block 0000 [ 16]: bd4379f32f94f0fc +Block 0000 [ 17]: 40355ac4178d53f3 +Block 0000 [ 18]: bd78c72572a6af61 +Block 0000 [ 19]: 281f99f8dc8d9050 +Block 0000 [ 20]: c97e563c83178d2f +Block 0000 [ 21]: 8d9d1e26b9db8034 +Block 0000 [ 22]: 3902197d294ef4aa +Block 0000 [ 23]: 1b57f06a2a0b709f +Block 0000 [ 24]: 277f75af34316bac +Block 0000 [ 25]: 32bc11625c1b2751 +Block 0000 [ 26]: a76f4d56e2bbd31c +Block 0000 [ 27]: 4383d549b9fee150 +Block 0000 [ 28]: ec4da4283ee19a25 +Block 0000 [ 29]: db40a685d75a97eb +Block 0000 [ 30]: f7e95a4293a58b67 +Block 0000 [ 31]: 459ce6d7ad8fb97e +Block 0000 [ 32]: e5da1d30fe9710fb +Block 0000 [ 33]: d47c35f1319eb43f +Block 0000 [ 34]: 4a3baab52a5da348 +Block 0000 [ 35]: 581d9990ca7d2c5c +Block 0000 [ 36]: f035855e7c5a0dba +Block 0000 [ 37]: 11729bc0a2cc2e05 +Block 0000 [ 38]: 2439be4b37549988 +Block 0000 [ 39]: 15fc82bfc2bc04e4 +Block 0000 [ 40]: f1560d8eafded40c +Block 0000 [ 41]: d139264a0bca6726 +Block 0000 [ 42]: 3ebd6bebc32c796f +Block 0000 [ 43]: 3c6dab5ba747707a +Block 0000 [ 44]: 83ec6820e1b375c7 +Block 0000 [ 45]: 0660dfa463fc9981 +Block 0000 [ 46]: a38630c563e0783d +Block 0000 [ 47]: bc7d652ca8672d8e +Block 0000 [ 48]: bfb5d9999448c339 +Block 0000 [ 49]: e56e2a8aaf192956 +Block 0000 [ 50]: 2d444595302a6f8f +Block 0000 [ 51]: 7ee4948d1aa843e8 +Block 0000 [ 52]: 40225ab51ab422af +Block 0000 [ 53]: 30c483daeb628c24 +Block 0000 [ 54]: 9025b7151da6425c +Block 0000 [ 55]: 8d032f891b7d9f4c +Block 0000 [ 56]: 769969c276f48220 +Block 0000 [ 57]: a935b2664cb6de87 +Block 0000 [ 58]: 388e764dc3e2db3a +Block 0000 [ 59]: 91191a07635348d1 +Block 0000 [ 60]: f2141c06c59d34f4 +Block 0000 [ 61]: 75cefd44bf8d34cc +Block 0000 [ 62]: 564f6e178f57da02 +Block 0000 [ 63]: b0288d8fb8ec24c6 +Block 0000 [ 64]: 53f404b6bada7fd5 +Block 0000 [ 65]: ce387b78af2e7da9 +Block 0000 [ 66]: 961019ec3bf5a7ba +Block 0000 [ 67]: 9c707e03c2138397 +Block 0000 [ 68]: b6e4104f00124c70 +Block 0000 [ 69]: f3ffa2968fa42fe1 +Block 0000 [ 70]: b41ac152d1da73dd +Block 0000 [ 71]: 546289e70071e674 +Block 0000 [ 72]: 6937af57f76368e8 +Block 0000 [ 73]: daffc82f1b00a6ec +Block 0000 [ 74]: dc8a1f1f6c1a3769 +Block 0000 [ 75]: 20d75bd00bfe8391 +Block 0000 [ 76]: 83dcbf84758e8b00 +Block 0000 [ 77]: 3c52616b112557bd +Block 0000 [ 78]: a6416f1995e460da +Block 0000 [ 79]: b0a1591f1e34c1d8 +Block 0000 [ 80]: 4602f24366054da3 +Block 0000 [ 81]: 808e8b80d660df50 +Block 0000 [ 82]: 93f7ff5247d8f563 +Block 0000 [ 83]: be9bd2e8847c9cfd +Block 0000 [ 84]: 78fe2bda93162b53 +Block 0000 [ 85]: 9ec83bb297e1f2ee +Block 0000 [ 86]: b90706d2bf061ff3 +Block 0000 [ 87]: 186c3646c266ca2c +Block 0000 [ 88]: 628050acddf15f79 +Block 0000 [ 89]: cc88eb65b6f03fec +Block 0000 [ 90]: de96108afee33c3e +Block 0000 [ 91]: c156d449313bfd02 +Block 0000 [ 92]: 58a2c3a3fc41adae +Block 0000 [ 93]: 3dfeb8dff8aa5b80 +Block 0000 [ 94]: a28048dfd71dc8d8 +Block 0000 [ 95]: b0d8d6bbc430f3ee +Block 0000 [ 96]: cbf2194f578d6db2 +Block 0000 [ 97]: 01ccb4d39161aac4 +Block 0000 [ 98]: f44fe5fff3ae387e +Block 0000 [ 99]: b1813dfa99c6953d +Block 0000 [100]: 5bca760ee97db409 +Block 0000 [101]: 3ce9ff5ec3099a35 +Block 0000 [102]: 9e1cb135ab1b42a0 +Block 0000 [103]: b251228dd5eb5ae0 +Block 0000 [104]: 66304590c17b8117 +Block 0000 [105]: a46257f0e6f256ed +Block 0000 [106]: 14e299ab4f2d187e +Block 0000 [107]: 24228dec25e8772d +Block 0000 [108]: f8f029106762c0d7 +Block 0000 [109]: 2f261305d9b518d1 +Block 0000 [110]: c6b27f4786596697 +Block 0000 [111]: 7e9a5e51425764ad +Block 0000 [112]: f6674f15be253b39 +Block 0000 [113]: 0922afec1f60f831 +Block 0000 [114]: 6c729428d9d0a23f +Block 0000 [115]: b673cf5b43402f36 +Block 0000 [116]: 9010b9a37fa13310 +Block 0000 [117]: 7b3b5f677ab6c0a1 +Block 0000 [118]: 6f0099ca29449c51 +Block 0000 [119]: 08941902d462588f +Block 0000 [120]: e7180fff290542e9 +Block 0000 [121]: 0ee4cd5dfee583ec +Block 0000 [122]: 7a60e32fe35b330e +Block 0000 [123]: daf1ffa261adc82f +Block 0000 [124]: 1a160254df704091 +Block 0000 [125]: ac5bf3535385f59a +Block 0000 [126]: f9decabf3ad9b4a4 +Block 0000 [127]: f7654a3f226adfa7 +Block 0001 [ 0]: bc459e0eea13a1f3 +Block 0001 [ 1]: 49eef4a59a5aa372 +Block 0001 [ 2]: 401c002334495016 +Block 0001 [ 3]: 88b39619877d25ff +Block 0001 [ 4]: 9f7cb547d36211b6 +Block 0001 [ 5]: 6cc6287d95e294a8 +Block 0001 [ 6]: d0e2fa02854d590e +Block 0001 [ 7]: e0370ab791652bac +Block 0001 [ 8]: eacbc294d4a30a44 +Block 0001 [ 9]: aeb62d61bc7705c0 +Block 0001 [ 10]: 1c6ec07f7cea9f47 +Block 0001 [ 11]: 6417fa6afaa2c5cf +Block 0001 [ 12]: c2f9504724c3bc92 +Block 0001 [ 13]: 83f7e665d693c1a0 +Block 0001 [ 14]: 0c6380b41a0201b9 +Block 0001 [ 15]: 7579e63288ae9d3a +Block 0001 [ 16]: d82ca980319e8378 +Block 0001 [ 17]: 5e71e4d4f0c94f01 +Block 0001 [ 18]: e2ae1815182d371a +Block 0001 [ 19]: 4dc20804ef3373b3 +Block 0001 [ 20]: ce746d95dc63549d +Block 0001 [ 21]: 5b0dca46deda0e87 +Block 0001 [ 22]: ed85a89304dee634 +Block 0001 [ 23]: ac266927481f3736 +Block 0001 [ 24]: cb290eb0eee448f7 +Block 0001 [ 25]: 6ed16ca8b8a80515 +Block 0001 [ 26]: 7ddef21f6d32effb +Block 0001 [ 27]: a698cfebc42f8b78 +Block 0001 [ 28]: 586ac3c8ca8a541b +Block 0001 [ 29]: fe5d850bfd7dc57b +Block 0001 [ 30]: 9118360b7d2bc4c9 +Block 0001 [ 31]: 80c528b10fb625d7 +Block 0001 [ 32]: 747b7d55cd6d5f31 +Block 0001 [ 33]: c5d7ead5b3d77159 +Block 0001 [ 34]: 0b587e890235e645 +Block 0001 [ 35]: c2484fa9b0f2be70 +Block 0001 [ 36]: 1c8a3c5bf70785db +Block 0001 [ 37]: f0eee081b3f166e3 +Block 0001 [ 38]: 53107934144a5cd8 +Block 0001 [ 39]: 0e460822accb4724 +Block 0001 [ 40]: 9fa234759c8ca51b +Block 0001 [ 41]: 73398d40f1ad7336 +Block 0001 [ 42]: ac0ffffe28ec0bd6 +Block 0001 [ 43]: 126739a06ed1fabb +Block 0001 [ 44]: 778065fea1b348d4 +Block 0001 [ 45]: 9e149c4d19c48b7d +Block 0001 [ 46]: 3ab9809fb1e88ea4 +Block 0001 [ 47]: 24edb1342bd45b11 +Block 0001 [ 48]: 794fd23b6fd32b33 +Block 0001 [ 49]: a793ee83b72c1c48 +Block 0001 [ 50]: 89b55cdc62adb18b +Block 0001 [ 51]: ccec9d11f1f473aa +Block 0001 [ 52]: ead0ddbdcf12d5da +Block 0001 [ 53]: 7f1b64e493de3a42 +Block 0001 [ 54]: 6b9a688eacb29c53 +Block 0001 [ 55]: 041ff10a56bfd124 +Block 0001 [ 56]: 11bcdfea9f4778ba +Block 0001 [ 57]: 5c3452982c95f36d +Block 0001 [ 58]: 78043a6334282ade +Block 0001 [ 59]: 2e6b32801d204496 +Block 0001 [ 60]: eda1e9230c69988f +Block 0001 [ 61]: b1e38ba52270d65a +Block 0001 [ 62]: 59867bea79e81eea +Block 0001 [ 63]: 4950d787032cab9c +Block 0001 [ 64]: a2e26164012c30ac +Block 0001 [ 65]: 47ffcfe006607e62 +Block 0001 [ 66]: 75e57bb2c0fecc99 +Block 0001 [ 67]: 8377f8cb872ff188 +Block 0001 [ 68]: 4f2f480425512165 +Block 0001 [ 69]: f11118f5c806ed9f +Block 0001 [ 70]: 5371a6d76715055a +Block 0001 [ 71]: dc71cfd303bcbbed +Block 0001 [ 72]: 432d3e34de79ea75 +Block 0001 [ 73]: b3c05a6624da3011 +Block 0001 [ 74]: b2b40d56350b73fe +Block 0001 [ 75]: 3f2065a4bdde3ef8 +Block 0001 [ 76]: d5d8a80cc0ace697 +Block 0001 [ 77]: 4f3bb1e4743984e7 +Block 0001 [ 78]: 52025366f9be8b92 +Block 0001 [ 79]: e476f5f80de3d2f3 +Block 0001 [ 80]: 4342bb1beb580982 +Block 0001 [ 81]: 67990f5680d612b2 +Block 0001 [ 82]: e2b764c69f871d05 +Block 0001 [ 83]: 5c115c46a9d77e7f +Block 0001 [ 84]: 1277b1cc8d0822a2 +Block 0001 [ 85]: 87483e53ebb66247 +Block 0001 [ 86]: f41b286b6678a395 +Block 0001 [ 87]: 39be6db92f34b25d +Block 0001 [ 88]: 05c798faca043d57 +Block 0001 [ 89]: 339176afa15c57e4 +Block 0001 [ 90]: addfacb21e7b3899 +Block 0001 [ 91]: 347baed2dc7e123e +Block 0001 [ 92]: c8e17e46dd176bf4 +Block 0001 [ 93]: ccb8aad34aa26683 +Block 0001 [ 94]: 6ebf6b0c3d9dca90 +Block 0001 [ 95]: aa78863c92270242 +Block 0001 [ 96]: 4b045aa366cce2d8 +Block 0001 [ 97]: 5d81d95a2df235c3 +Block 0001 [ 98]: bde894f1a74a76dc +Block 0001 [ 99]: ed38f15b1391dd95 +Block 0001 [100]: cabbae2dc702f85e +Block 0001 [101]: 31af49571ab46d58 +Block 0001 [102]: f6018e52178a3abd +Block 0001 [103]: 0b931029db37f1f3 +Block 0001 [104]: d335f2a1a4506271 +Block 0001 [105]: 47dee6e4d062a924 +Block 0001 [106]: 712500aad5917547 +Block 0001 [107]: ce52485b1c1c0c96 +Block 0001 [108]: 5201c069725f1e4a +Block 0001 [109]: 0baed79cad097c37 +Block 0001 [110]: 5ac9a6873ff1723c +Block 0001 [111]: 981afe97c87bf63c +Block 0001 [112]: c663cda5fc535e6f +Block 0001 [113]: c420f671a527e73e +Block 0001 [114]: 466add63b316c409 +Block 0001 [115]: 94b0804574e0bd8e +Block 0001 [116]: aa686639b37e98dc +Block 0001 [117]: 14907009742c9497 +Block 0001 [118]: e113a3c0fce07bbb +Block 0001 [119]: 7fc91c5d001b7b66 +Block 0001 [120]: d8857f78a9765b73 +Block 0001 [121]: 7b95fd0a7f2c2019 +Block 0001 [122]: 7d4b660fef058423 +Block 0001 [123]: d09a7312abec290a +Block 0001 [124]: 4526d55249dbaef2 +Block 0001 [125]: ed73e279750b1079 +Block 0001 [126]: 104eda79f420b860 +Block 0001 [127]: 8c421efbfcb0e58d +Block 0002 [ 0]: 8ea6f3005dc0961e +Block 0002 [ 1]: ec57014cac3899fa +Block 0002 [ 2]: 0a17bf60fd070a86 +Block 0002 [ 3]: ced6318e68a05ee3 +Block 0002 [ 4]: 3102b5632405b609 +Block 0002 [ 5]: 945825ed9f453504 +Block 0002 [ 6]: 46db680acf41a392 +Block 0002 [ 7]: eb65ee89868ba4fd +Block 0002 [ 8]: a5f85f09d827ec4b +Block 0002 [ 9]: 4d96ccbe256e70d0 +Block 0002 [ 10]: 6135bfdc5221cd76 +Block 0002 [ 11]: 7cdc62f1d3090016 +Block 0002 [ 12]: 4b8dfa10673895b0 +Block 0002 [ 13]: 81730e01622d73e7 +Block 0002 [ 14]: 0ed2a4e5cfd12538 +Block 0002 [ 15]: 76e6f0a376770db5 +Block 0002 [ 16]: 1f264bfa43ab6bcb +Block 0002 [ 17]: 76018b12515c9f17 +Block 0002 [ 18]: 4dabcc6ba9eef055 +Block 0002 [ 19]: 1d9b4b208308d0a5 +Block 0002 [ 20]: a5416a049c3e72b0 +Block 0002 [ 21]: 2ddd518f7db7c3eb +Block 0002 [ 22]: 82fc34c909e9d5cc +Block 0002 [ 23]: 0b7e631ea36dc9c7 +Block 0002 [ 24]: b4af6334fe3f2bf2 +Block 0002 [ 25]: 9900eef4c64644cd +Block 0002 [ 26]: 3023e322496d1d24 +Block 0002 [ 27]: b522c4417bd3e4a6 +Block 0002 [ 28]: e1f0b6d0e64ddc94 +Block 0002 [ 29]: 89391fd4c6bb340f +Block 0002 [ 30]: 1266543a5647e447 +Block 0002 [ 31]: 7a7af30f1460bedc +Block 0002 [ 32]: 0571774e124ed17a +Block 0002 [ 33]: c90b8125f3e09457 +Block 0002 [ 34]: 2c666a53b7d80823 +Block 0002 [ 35]: f03a8512d71da199 +Block 0002 [ 36]: 84501a2dc0eac1ca +Block 0002 [ 37]: 4c6ff369671d3097 +Block 0002 [ 38]: e019828aef77eb48 +Block 0002 [ 39]: 08324da56e7ec80c +Block 0002 [ 40]: 47c3fea7a541ad83 +Block 0002 [ 41]: bcd3e94fbfa1a121 +Block 0002 [ 42]: 914a7ea99ef847fd +Block 0002 [ 43]: 49d81b057bdb45a5 +Block 0002 [ 44]: 8d579d6ad1c0e128 +Block 0002 [ 45]: 1d5a3539225b32d1 +Block 0002 [ 46]: 70b078ed8c701e4e +Block 0002 [ 47]: b35f51f72d549a13 +Block 0002 [ 48]: 005cf45452fd26c1 +Block 0002 [ 49]: 795b4bb077b874d1 +Block 0002 [ 50]: 4d71a5da9eb1cba7 +Block 0002 [ 51]: 3187129a79216fc2 +Block 0002 [ 52]: ac146ec59c7e5314 +Block 0002 [ 53]: 85bafe512fac7623 +Block 0002 [ 54]: 60550bce77e85eca +Block 0002 [ 55]: 3ab28c531280f09b +Block 0002 [ 56]: 9b11b44f7ccb1823 +Block 0002 [ 57]: 668f4045e06ba4c3 +Block 0002 [ 58]: 879f1b67e5d8c5b8 +Block 0002 [ 59]: cc60238d7597d594 +Block 0002 [ 60]: 4e2a2cb3015a0467 +Block 0002 [ 61]: 7ef9528b0ae50aae +Block 0002 [ 62]: 7d8beaec217e81d8 +Block 0002 [ 63]: 348b9275fbfa1ff5 +Block 0002 [ 64]: ed1fb63138e1f50d +Block 0002 [ 65]: 9562d27cab09e659 +Block 0002 [ 66]: d806069af50f7794 +Block 0002 [ 67]: 8d0aff57a148caaf +Block 0002 [ 68]: 421250e9be352352 +Block 0002 [ 69]: 2b4fe8b0e3bf35e4 +Block 0002 [ 70]: 18211dcc5cc9deca +Block 0002 [ 71]: 540b72659f89c190 +Block 0002 [ 72]: 670c27e851cf8a60 +Block 0002 [ 73]: 71acec32b29a2caa +Block 0002 [ 74]: 0450e5f6eee18092 +Block 0002 [ 75]: a34227efcd51b86b +Block 0002 [ 76]: 5771a997c605dc6c +Block 0002 [ 77]: bf0edb63ee2e0696 +Block 0002 [ 78]: 22ff838a15ca6ff2 +Block 0002 [ 79]: e7d11842b9259ad8 +Block 0002 [ 80]: 9cc9014a99f2611f +Block 0002 [ 81]: 0712115fb800308e +Block 0002 [ 82]: b96fc2b34d47d68e +Block 0002 [ 83]: 09a3e5aebd720b56 +Block 0002 [ 84]: b8d5d104ab68646e +Block 0002 [ 85]: c73444d9a5bd5654 +Block 0002 [ 86]: d47e4cc54ffcaa43 +Block 0002 [ 87]: d8a7927fb3c75190 +Block 0002 [ 88]: 29a0cd526e8dbb27 +Block 0002 [ 89]: b686f1b621196790 +Block 0002 [ 90]: 631b2f9b530a956b +Block 0002 [ 91]: 4e18d6969ba0469d +Block 0002 [ 92]: 481c27be7030bf9d +Block 0002 [ 93]: 70c84dbe84d309a4 +Block 0002 [ 94]: 256841264bac123a +Block 0002 [ 95]: f908a6a11dfb21a6 +Block 0002 [ 96]: 6b4b356c30c62feb +Block 0002 [ 97]: 3dd9a072eecbe065 +Block 0002 [ 98]: c1d53bba775c35f0 +Block 0002 [ 99]: b8df34d4f7524d02 +Block 0002 [100]: 7b0deca6efdcc24d +Block 0002 [101]: 41cd9462a7992850 +Block 0002 [102]: 09e79c11f183be33 +Block 0002 [103]: 790cb6ea025ffb3f +Block 0002 [104]: 8698c499823ef322 +Block 0002 [105]: 58420a3826a66ddd +Block 0002 [106]: 3960ba6dcab5a023 +Block 0002 [107]: 4ce166e82c51c7f4 +Block 0002 [108]: 5bad585f7b816ff0 +Block 0002 [109]: 16f986b7b02f37d8 +Block 0002 [110]: 2fdf5d3c4e2fe48f +Block 0002 [111]: ab8562fe42ed05ed +Block 0002 [112]: e877cee731f0bdd1 +Block 0002 [113]: 0b4db86764860ebe +Block 0002 [114]: a391de7c10742d2a +Block 0002 [115]: 51e83db8e0dbffae +Block 0002 [116]: aa61f4616c0435bf +Block 0002 [117]: 6aa788d842071eb4 +Block 0002 [118]: 6f26ca76fe57f044 +Block 0002 [119]: 7fbefcb634977e04 +Block 0002 [120]: 040c1c551559d36e +Block 0002 [121]: 815326b814713dce +Block 0002 [122]: 21f8873f3284b327 +Block 0002 [123]: a7e2847d61bc0562 +Block 0002 [124]: 8aee0731ab4fec14 +Block 0002 [125]: 9391faf54a0cee1d +Block 0002 [126]: 6de600cf8c504229 +Block 0002 [127]: 51c20222f3371f26 +Block 0003 [ 0]: defbdd269247dccf +Block 0003 [ 1]: a917d017cd53d490 +Block 0003 [ 2]: c3fc89bccf53c160 +Block 0003 [ 3]: 7376b84e5a2841c0 +Block 0003 [ 4]: 27b9260af8a1fa18 +Block 0003 [ 5]: 0cd10e63618be28c +Block 0003 [ 6]: 688e75fad0999fa0 +Block 0003 [ 7]: 2f87962677d4456a +Block 0003 [ 8]: e6e8a06140ae4a8f +Block 0003 [ 9]: 43727e81157c3358 +Block 0003 [ 10]: 5f1af471ccecfecd +Block 0003 [ 11]: 282523c737f3ce59 +Block 0003 [ 12]: 4a4b20d1ca4a9f17 +Block 0003 [ 13]: 23f214ca8b99105d +Block 0003 [ 14]: 7f0bfc572d230507 +Block 0003 [ 15]: 921657836a1dc6e2 +Block 0003 [ 16]: d973ca4bd087d756 +Block 0003 [ 17]: 68dee0aaf60192c9 +Block 0003 [ 18]: f6b7b805b67d4c7d +Block 0003 [ 19]: f8e1402819b76190 +Block 0003 [ 20]: e45aee5f37907bf1 +Block 0003 [ 21]: 74d4bbcc731d7953 +Block 0003 [ 22]: 9c538094d34703c0 +Block 0003 [ 23]: 049f293341fd0f49 +Block 0003 [ 24]: 56d1af89b6934f7b +Block 0003 [ 25]: c06d5f12a9b959a0 +Block 0003 [ 26]: 0a738ab49d7f1140 +Block 0003 [ 27]: 4974722a08b9fb21 +Block 0003 [ 28]: 5515a5cdb9883b82 +Block 0003 [ 29]: 6ef52e56c7851f82 +Block 0003 [ 30]: 188325e68f1cd2a6 +Block 0003 [ 31]: 32a4559fe61d175e +Block 0003 [ 32]: e05943e39bc77ba1 +Block 0003 [ 33]: c63d13028907a676 +Block 0003 [ 34]: d2e643ec53311e10 +Block 0003 [ 35]: 831b2fd9c1d12049 +Block 0003 [ 36]: ec518b7b076fda55 +Block 0003 [ 37]: d0365d93bf0a67d8 +Block 0003 [ 38]: d12bab124b767c5c +Block 0003 [ 39]: 6debf3c5a3a87481 +Block 0003 [ 40]: 9b76bacb4feda29d +Block 0003 [ 41]: 972e482832ed1908 +Block 0003 [ 42]: f321cb74fc7ff73c +Block 0003 [ 43]: fef7f9306e1cadfe +Block 0003 [ 44]: 78bcc32d5bd4a468 +Block 0003 [ 45]: 05bb30b58e106a1c +Block 0003 [ 46]: 458e661c3edbb4f2 +Block 0003 [ 47]: c815023fe10e2953 +Block 0003 [ 48]: 5b9afadba0a0e2c2 +Block 0003 [ 49]: 9060bd4a68ba7683 +Block 0003 [ 50]: bd96ae69c1b0579c +Block 0003 [ 51]: 3c600e6edc5fb733 +Block 0003 [ 52]: 44f2242a97981614 +Block 0003 [ 53]: 2b8f3f6bcc388531 +Block 0003 [ 54]: 91975b293e5949ae +Block 0003 [ 55]: 7cd6d80733367b44 +Block 0003 [ 56]: 2893286bf377e181 +Block 0003 [ 57]: 9e9f576eb644c715 +Block 0003 [ 58]: aa0c95c6c0a9480a +Block 0003 [ 59]: ea0d7c84fb9073c2 +Block 0003 [ 60]: 6ea5293ca5a921dd +Block 0003 [ 61]: 00dbac8af8a1e88a +Block 0003 [ 62]: c29aa3e9e50972de +Block 0003 [ 63]: 0268e6c5804c49f2 +Block 0003 [ 64]: f6a3c6f98b724c4d +Block 0003 [ 65]: 2d179d15f41417c0 +Block 0003 [ 66]: 4a857320b45dac41 +Block 0003 [ 67]: 37b8660f7f759f67 +Block 0003 [ 68]: 3b37a0016af45092 +Block 0003 [ 69]: fd1a3627e2181f91 +Block 0003 [ 70]: 94136a9d4c1638b6 +Block 0003 [ 71]: 96bf6341988daf8f +Block 0003 [ 72]: ba9d427269beb6d8 +Block 0003 [ 73]: 338d43784b16339e +Block 0003 [ 74]: 258c9e2de5604f9f +Block 0003 [ 75]: bcc5d156fa5d3ee9 +Block 0003 [ 76]: f9ea8ceb3436b998 +Block 0003 [ 77]: 6681d34ea3bd3ac2 +Block 0003 [ 78]: 21230fcd512e1244 +Block 0003 [ 79]: a4c206a99699b869 +Block 0003 [ 80]: 23ca11323d64870f +Block 0003 [ 81]: 69d4bd4b5aecd7bc +Block 0003 [ 82]: 7926fc7c4fd85592 +Block 0003 [ 83]: f9981dc25da060dc +Block 0003 [ 84]: a56518aab4d26c6c +Block 0003 [ 85]: 5ebd99314579c81a +Block 0003 [ 86]: 697e53bcc2ce74da +Block 0003 [ 87]: ea7023bbe8c224b7 +Block 0003 [ 88]: 02ca6e8b3f6245d7 +Block 0003 [ 89]: bc369564806f736c +Block 0003 [ 90]: 74b2b79ff4a09b6e +Block 0003 [ 91]: ef509a784173335a +Block 0003 [ 92]: 7fdfed2b6024ecfe +Block 0003 [ 93]: f94c2475c3c2d394 +Block 0003 [ 94]: 70b5e9ca66108b36 +Block 0003 [ 95]: d833ab68bb44ffc4 +Block 0003 [ 96]: f77ece8ea46e2580 +Block 0003 [ 97]: 1ae7df31658e35a2 +Block 0003 [ 98]: ab0db62f9e77a1be +Block 0003 [ 99]: c46e14bf97493e69 +Block 0003 [100]: 5e103177d0a282df +Block 0003 [101]: 1d407aa0d722553c +Block 0003 [102]: 9a1b070f453e77eb +Block 0003 [103]: 7a49e2ccb043e84b +Block 0003 [104]: 128fa604e2049e13 +Block 0003 [105]: e8b0460a76453345 +Block 0003 [106]: ad6bbcbd5aad6663 +Block 0003 [107]: 86602cf6d3c04a63 +Block 0003 [108]: ddf5ed92306f5bb8 +Block 0003 [109]: a6d8b31feff6b5d5 +Block 0003 [110]: 0b31d395a152d5f2 +Block 0003 [111]: 8e19f1722242b1c7 +Block 0003 [112]: 4a2789d0abf4b6da +Block 0003 [113]: 91c7ea611376ca9c +Block 0003 [114]: 383d8259508783d3 +Block 0003 [115]: 2832818d509c32cf +Block 0003 [116]: 9bb26c92a26c6eed +Block 0003 [117]: baae366114f3ca3e +Block 0003 [118]: 09c413ff09704cbe +Block 0003 [119]: 5fc1338780cf93eb +Block 0003 [120]: 352469a1770e3e65 +Block 0003 [121]: 09d9489be33e8698 +Block 0003 [122]: 293a5c2b387975cf +Block 0003 [123]: 4d830525800bf49a +Block 0003 [124]: f60036d7c3126c7e +Block 0003 [125]: cce1956b6bb6f18e +Block 0003 [126]: b8e6e522b7f67d04 +Block 0003 [127]: b1833790bfe9a358 +Block 0004 [ 0]: 3d0218d3c7b74ca8 +Block 0004 [ 1]: d775ea77a653a27c +Block 0004 [ 2]: c176afeeeeec983f +Block 0004 [ 3]: 2f56b580b3d2038a +Block 0004 [ 4]: dd4f6cb833299896 +Block 0004 [ 5]: 36280f762b6d9d1f +Block 0004 [ 6]: e7931d5f58536e7f +Block 0004 [ 7]: 816acd37e673e4b1 +Block 0004 [ 8]: 252097ce80cf4471 +Block 0004 [ 9]: 53b5435ba1c7f8c3 +Block 0004 [ 10]: 64d876af9ba2b092 +Block 0004 [ 11]: f596aaf38f0d531c +Block 0004 [ 12]: daf15fd14343faf1 +Block 0004 [ 13]: 653e245995afa924 +Block 0004 [ 14]: 5d7490c3b74a7283 +Block 0004 [ 15]: 2938b33cd3959722 +Block 0004 [ 16]: fad161088d3d6d90 +Block 0004 [ 17]: a20f95889e04cc34 +Block 0004 [ 18]: ad95b5eff6f7e807 +Block 0004 [ 19]: 9c6a5409137873ec +Block 0004 [ 20]: d69f52d77ced25a0 +Block 0004 [ 21]: 30326cf9e8b26b65 +Block 0004 [ 22]: 27840208a4f1c105 +Block 0004 [ 23]: 9447a046e4644347 +Block 0004 [ 24]: 56087f6a44fdb588 +Block 0004 [ 25]: 6dc364d36cbf26d5 +Block 0004 [ 26]: 87b683d67201cdad +Block 0004 [ 27]: ba8742cda32586ce +Block 0004 [ 28]: b6cde1778051b9f3 +Block 0004 [ 29]: 1b82b268556f6c57 +Block 0004 [ 30]: 8339ec4f63995a93 +Block 0004 [ 31]: d606bc0fd42b9e00 +Block 0004 [ 32]: 15f734c2f1851101 +Block 0004 [ 33]: f506350a9337d1b1 +Block 0004 [ 34]: ddea2ea066855ca4 +Block 0004 [ 35]: 9854e88b7a91c00d +Block 0004 [ 36]: b9192978b32d53a4 +Block 0004 [ 37]: 525af839f9719cb5 +Block 0004 [ 38]: f0dd9f4c07a3c131 +Block 0004 [ 39]: 45168595c23f263c +Block 0004 [ 40]: 69b2bb5c381988d8 +Block 0004 [ 41]: 61ae296ca95aa156 +Block 0004 [ 42]: 61cc529c1199b52e +Block 0004 [ 43]: 6c7bea9a5fd4bd67 +Block 0004 [ 44]: ab7369fc537d81ee +Block 0004 [ 45]: 3cfe32d2a3865e9b +Block 0004 [ 46]: da5f06ec7db73c9d +Block 0004 [ 47]: d30bd62324bc5f48 +Block 0004 [ 48]: bdc0079a0cd32c12 +Block 0004 [ 49]: 102579dd0f6cbe7c +Block 0004 [ 50]: d28913132bdfa5a2 +Block 0004 [ 51]: 0c8d094baa236d78 +Block 0004 [ 52]: 06e461788c5b69a9 +Block 0004 [ 53]: 371dbf3107c1193b +Block 0004 [ 54]: f6aaab2550a65da8 +Block 0004 [ 55]: 428d89d340f1606f +Block 0004 [ 56]: 0533b686a16599e3 +Block 0004 [ 57]: 9b0a6ecddeea2536 +Block 0004 [ 58]: 4ec61df5ae2925ba +Block 0004 [ 59]: 889f3f5d3ab01086 +Block 0004 [ 60]: 1ba9860ad05bba5e +Block 0004 [ 61]: 44ae777798e36c5a +Block 0004 [ 62]: b2c5b481c53e9d60 +Block 0004 [ 63]: 4b880b2cf31f1b39 +Block 0004 [ 64]: 31c4ad49902e93f8 +Block 0004 [ 65]: c3406a45d218a4de +Block 0004 [ 66]: c55c240f9476ed2d +Block 0004 [ 67]: 8536df39d71e4bb2 +Block 0004 [ 68]: 880364005d870893 +Block 0004 [ 69]: f0399130b975e981 +Block 0004 [ 70]: 2a1cc94a9540bbc2 +Block 0004 [ 71]: 66ddc8498908dd94 +Block 0004 [ 72]: 29da7f4fb91fcafd +Block 0004 [ 73]: 3da5be32b39d893c +Block 0004 [ 74]: 400c926600b93260 +Block 0004 [ 75]: 3c0bc8a864c63ac5 +Block 0004 [ 76]: 1fa284b1929fedda +Block 0004 [ 77]: d8fbff92df12283a +Block 0004 [ 78]: 6f8a370ab6454744 +Block 0004 [ 79]: a8353ea2070b0cb0 +Block 0004 [ 80]: 8d1d9a211ae4a7b6 +Block 0004 [ 81]: e75caccf836fec07 +Block 0004 [ 82]: 13cd97d9ce0fd07e +Block 0004 [ 83]: a0acba9e9458bbe2 +Block 0004 [ 84]: da451f32ace6d295 +Block 0004 [ 85]: aeb5717f0b40d2a3 +Block 0004 [ 86]: 871bb5d3228b213e +Block 0004 [ 87]: e652337cacaea165 +Block 0004 [ 88]: 00827f84524518ab +Block 0004 [ 89]: 1dc3281fe4bbd871 +Block 0004 [ 90]: 070965dd4c53abbf +Block 0004 [ 91]: 01d7e50991766fb4 +Block 0004 [ 92]: 764d7031b5313c1f +Block 0004 [ 93]: a09cf477a95cb6be +Block 0004 [ 94]: 72f8e7681d5fff45 +Block 0004 [ 95]: 683674587d64b187 +Block 0004 [ 96]: b6b323e20a11c95f +Block 0004 [ 97]: 2efd915bd3a4378a +Block 0004 [ 98]: 70be9263eed7a411 +Block 0004 [ 99]: 6639b57c9775cd57 +Block 0004 [100]: 7111d121f936a543 +Block 0004 [101]: cc0465d2ded37ea0 +Block 0004 [102]: c1bc4dcc13cf1463 +Block 0004 [103]: faeaf234269d808b +Block 0004 [104]: 608c4812ec403401 +Block 0004 [105]: e6c45eb5bd0df3f5 +Block 0004 [106]: 157fc891efe07dd8 +Block 0004 [107]: f6063de8c707fbe1 +Block 0004 [108]: ea0cf9feb531ee49 +Block 0004 [109]: 7f03acb918dbed1b +Block 0004 [110]: 84d076272170fc4d +Block 0004 [111]: d630f0dab96da15f +Block 0004 [112]: cfc05aed43413a43 +Block 0004 [113]: 16cfe392a4b08a15 +Block 0004 [114]: f24f9093be143b5e +Block 0004 [115]: 4213be434fbf3ef1 +Block 0004 [116]: 8323183a4feccd4a +Block 0004 [117]: 0874e2b43461cff1 +Block 0004 [118]: 6bda6c5beef6b654 +Block 0004 [119]: b94f755575072464 +Block 0004 [120]: a0f1e43e0a95d678 +Block 0004 [121]: d99619485b84aed5 +Block 0004 [122]: 05a4613a31743eef +Block 0004 [123]: 9fb6cbf1a149fd72 +Block 0004 [124]: 9f5e4bd27a21db84 +Block 0004 [125]: de2deee92e6a36dc +Block 0004 [126]: 865c61eedf06610d +Block 0004 [127]: 5df4327e934a0615 +Block 0005 [ 0]: ebe0a110a19e35f6 +Block 0005 [ 1]: 008d2bc14ad221da +Block 0005 [ 2]: 7b650b6ffcc7419b +Block 0005 [ 3]: 3abb4c43361f8a2e +Block 0005 [ 4]: 91f87a4a3f6ee7db +Block 0005 [ 5]: 11426d9377c1fc47 +Block 0005 [ 6]: a87dceffb866d6d7 +Block 0005 [ 7]: dc1f68c91ea3b945 +Block 0005 [ 8]: 58baa73c25e5a80d +Block 0005 [ 9]: b4726199470be696 +Block 0005 [ 10]: 0f19e0f822013b8b +Block 0005 [ 11]: 5ec73451f5da8127 +Block 0005 [ 12]: e4a685a8b846beae +Block 0005 [ 13]: 7ab8a6acfb017f42 +Block 0005 [ 14]: 1b697272c549671a +Block 0005 [ 15]: e7cafbec03487054 +Block 0005 [ 16]: 6169e3164a21d81f +Block 0005 [ 17]: ebd69195322ce5f3 +Block 0005 [ 18]: c2e7ea52115ef8fe +Block 0005 [ 19]: 4505bdda7f1ec096 +Block 0005 [ 20]: e6223c84cb44d2bb +Block 0005 [ 21]: 9a66897d2f668bb1 +Block 0005 [ 22]: 361a9d11f702134c +Block 0005 [ 23]: 225333e618b38c82 +Block 0005 [ 24]: 938b95b671a477da +Block 0005 [ 25]: 12c1b35d3d957d84 +Block 0005 [ 26]: a8de7a408626987e +Block 0005 [ 27]: be99d2a21d4e6aaa +Block 0005 [ 28]: 3e00b15f24872c30 +Block 0005 [ 29]: 25da7df53480716b +Block 0005 [ 30]: d763b510a5b5176e +Block 0005 [ 31]: fb750bfaa121d443 +Block 0005 [ 32]: 29f3320b70f1fd51 +Block 0005 [ 33]: d8d0f3d810ea4631 +Block 0005 [ 34]: 249cfce46ad07796 +Block 0005 [ 35]: 48e2df9063c20c0a +Block 0005 [ 36]: d156ca43b733ee10 +Block 0005 [ 37]: 6e3211c3e811ef2e +Block 0005 [ 38]: b07c3324072f3e60 +Block 0005 [ 39]: f0876351201cd7e6 +Block 0005 [ 40]: 1d6b7c6248336fad +Block 0005 [ 41]: 711e290de918ef7e +Block 0005 [ 42]: db4cb24ab1ba3de1 +Block 0005 [ 43]: 04922f11be1c59d4 +Block 0005 [ 44]: d176c2007870606a +Block 0005 [ 45]: 3f9de1763ca7b9ac +Block 0005 [ 46]: 9e907691b4a675ef +Block 0005 [ 47]: 8a844094fdc5a88d +Block 0005 [ 48]: 511a7bdd9977d2d1 +Block 0005 [ 49]: 4c9b696660f251bf +Block 0005 [ 50]: 6564036fa992787e +Block 0005 [ 51]: e42d539963cacd5d +Block 0005 [ 52]: 21062cfef86ee74e +Block 0005 [ 53]: d3d66a92c9290c5b +Block 0005 [ 54]: e1cf3b28dbafede3 +Block 0005 [ 55]: b92371b18732fabc +Block 0005 [ 56]: 361ebd40a008b0f5 +Block 0005 [ 57]: 808be947d48db0a1 +Block 0005 [ 58]: c06627cff85764e2 +Block 0005 [ 59]: 6a5386c596fa2f1a +Block 0005 [ 60]: 2fb06a7a33185b99 +Block 0005 [ 61]: 3466d1791387669c +Block 0005 [ 62]: 6ddf4d98b1fdfdbf +Block 0005 [ 63]: a556957e3fd45eb2 +Block 0005 [ 64]: 10f86898cd368eb9 +Block 0005 [ 65]: 150e99f8016f90fa +Block 0005 [ 66]: 37ceaa78780b2975 +Block 0005 [ 67]: 53f47026278b7aa5 +Block 0005 [ 68]: 793cd8d42494022d +Block 0005 [ 69]: 28ebaa1ba5f09bb8 +Block 0005 [ 70]: 1e7e3efd8fa75642 +Block 0005 [ 71]: f74412432c5a7339 +Block 0005 [ 72]: 1e6634dab86ffc70 +Block 0005 [ 73]: 2a853b1f0398398e +Block 0005 [ 74]: b77ade9731734f4d +Block 0005 [ 75]: 5eb23b7a5395d0f5 +Block 0005 [ 76]: 65eb315d342866fb +Block 0005 [ 77]: 953b95837df8e936 +Block 0005 [ 78]: 599f63583bbde92d +Block 0005 [ 79]: 42b78d9dd0e0029f +Block 0005 [ 80]: 9f7d0390e5b45eb3 +Block 0005 [ 81]: 751ad633e588ae66 +Block 0005 [ 82]: c2d4bea00853cde0 +Block 0005 [ 83]: 4fd032806ea5b569 +Block 0005 [ 84]: fba664901a55f304 +Block 0005 [ 85]: 6c7c644ba5157365 +Block 0005 [ 86]: 23542e368ec13c64 +Block 0005 [ 87]: 04f8fadd8b735b7d +Block 0005 [ 88]: 0d145631c75c088e +Block 0005 [ 89]: eb1e0e1fe5cd7995 +Block 0005 [ 90]: deab81e9e69fcd13 +Block 0005 [ 91]: db8c1140e5e91a33 +Block 0005 [ 92]: 2fb6401714e6c913 +Block 0005 [ 93]: d5a647aae640d351 +Block 0005 [ 94]: 7ff7506e47258938 +Block 0005 [ 95]: 44e5d15a02d6f281 +Block 0005 [ 96]: 298a1c196621f326 +Block 0005 [ 97]: 8fd931f209c2a308 +Block 0005 [ 98]: 8f4b8fe6227c86d2 +Block 0005 [ 99]: 9cdb3001ef490ce4 +Block 0005 [100]: 13dde2bb569cbb44 +Block 0005 [101]: 1b0e09c4897bbb9f +Block 0005 [102]: 7956ff7a15ee636b +Block 0005 [103]: e1aafb98d48a4eb3 +Block 0005 [104]: 92f32b059f056a35 +Block 0005 [105]: 884387d7450e6955 +Block 0005 [106]: bfe97055990c8bb4 +Block 0005 [107]: 5e992b7b49084a96 +Block 0005 [108]: 28e360b2c013b884 +Block 0005 [109]: 1f9e7336eb1bb691 +Block 0005 [110]: 47c117348af2a6f8 +Block 0005 [111]: ccc5140886ca66b4 +Block 0005 [112]: 9b9c7e02d210182a +Block 0005 [113]: 4bf5e7c7b5c586d8 +Block 0005 [114]: 1b64a31ed9c6a34e +Block 0005 [115]: bfecc90bf4fa043b +Block 0005 [116]: 6e0a25e5fb276cf0 +Block 0005 [117]: c1baa5232ad374e7 +Block 0005 [118]: 4f68f109df6c02d5 +Block 0005 [119]: cb004fb5c813273b +Block 0005 [120]: fa71b52ef5384747 +Block 0005 [121]: b5a18bd9701b0c1f +Block 0005 [122]: 31e001f95dfa27db +Block 0005 [123]: d66ee543167724a2 +Block 0005 [124]: 4170180f6fa36c26 +Block 0005 [125]: 5ab82751d0014c9b +Block 0005 [126]: fdd4df1f9de608d1 +Block 0005 [127]: dbee35b29953798d +Block 0006 [ 0]: 953da22d91b4cdf1 +Block 0006 [ 1]: 9676f207e657a260 +Block 0006 [ 2]: 9060fb9cc1ee9e6f +Block 0006 [ 3]: 7e0c7d3e2a542fd3 +Block 0006 [ 4]: 6a61b82d82d10d4a +Block 0006 [ 5]: a32383166b9bcd0e +Block 0006 [ 6]: 4c3eee661bf1c858 +Block 0006 [ 7]: 0968e35bc6cccd6c +Block 0006 [ 8]: 741e38f728c12bcb +Block 0006 [ 9]: ff2f75f3742598b3 +Block 0006 [ 10]: 83ba2331f338c6e5 +Block 0006 [ 11]: a63ef474f95b8b64 +Block 0006 [ 12]: a3f5994b4d5b907b +Block 0006 [ 13]: 941c1189b8f92824 +Block 0006 [ 14]: 70aaf42c80f88f0a +Block 0006 [ 15]: 1aa7b30acb6c4b53 +Block 0006 [ 16]: 4e3b293be10ddaac +Block 0006 [ 17]: 9147f8c3764087cc +Block 0006 [ 18]: 51c784834665e149 +Block 0006 [ 19]: 360469980c63db76 +Block 0006 [ 20]: 4e95eac04f96ae83 +Block 0006 [ 21]: 2983d0f8d9631a7c +Block 0006 [ 22]: a16e8c2b0e6b6a42 +Block 0006 [ 23]: f61fa745edf7e028 +Block 0006 [ 24]: 9f706afd3abf305d +Block 0006 [ 25]: 309486cc6bf90c4f +Block 0006 [ 26]: be344cda4ca29fbf +Block 0006 [ 27]: 12b16f6034f6d56f +Block 0006 [ 28]: 4bea1e5d93ffb5aa +Block 0006 [ 29]: 903f34584a5c9d85 +Block 0006 [ 30]: eef4fb8144be4ec0 +Block 0006 [ 31]: a003f06275ca97ec +Block 0006 [ 32]: a8d5232e929c0325 +Block 0006 [ 33]: d468707146178f06 +Block 0006 [ 34]: 35afe4cf3e359f4e +Block 0006 [ 35]: c37deaea22cf78f8 +Block 0006 [ 36]: c32828ebe2f5f03f +Block 0006 [ 37]: 35544b4bc72bb7e5 +Block 0006 [ 38]: 0ff984bebbe4332f +Block 0006 [ 39]: aa90abc10b8bf925 +Block 0006 [ 40]: a30fae740369aeaa +Block 0006 [ 41]: b0d40ff0e1405b0b +Block 0006 [ 42]: 41e0ebd013434b43 +Block 0006 [ 43]: 93329fd5a2a0a615 +Block 0006 [ 44]: c5ce5a077ae78cfb +Block 0006 [ 45]: 2d7603c16f625bbe +Block 0006 [ 46]: 6d448aa77a0ba910 +Block 0006 [ 47]: 734effe2c30da157 +Block 0006 [ 48]: 6467bdbcac0a2e60 +Block 0006 [ 49]: a4a967217ec67c6e +Block 0006 [ 50]: 84088bfdd1f8fd6c +Block 0006 [ 51]: ceb0dff92ef2bf56 +Block 0006 [ 52]: e8d89cbeb4e6aafd +Block 0006 [ 53]: d7577f5276c6efff +Block 0006 [ 54]: 7b8666cbd445a194 +Block 0006 [ 55]: 283cbe1fca02ff49 +Block 0006 [ 56]: c1130c6e56caad55 +Block 0006 [ 57]: e703eb1b9cfb064b +Block 0006 [ 58]: 20681d5f25a51792 +Block 0006 [ 59]: 6b99ced7f66ff2f2 +Block 0006 [ 60]: ede2f8f94072ed04 +Block 0006 [ 61]: 35d4fdb152f85e55 +Block 0006 [ 62]: 5972cde3573436c5 +Block 0006 [ 63]: 514169dadd86b036 +Block 0006 [ 64]: dfb4a43b017afa26 +Block 0006 [ 65]: f3659113f547fc9d +Block 0006 [ 66]: f783483cc199a4cd +Block 0006 [ 67]: 880a64abd07e7226 +Block 0006 [ 68]: da74ccf3914aa25b +Block 0006 [ 69]: 0ef7529a6523ac67 +Block 0006 [ 70]: c7b2350d91c2ad1d +Block 0006 [ 71]: 00fe4d981f08cda3 +Block 0006 [ 72]: f109e3bea43047b4 +Block 0006 [ 73]: b11a591cabae2527 +Block 0006 [ 74]: 8584e130c4aa28f6 +Block 0006 [ 75]: e6cc066b517f3bf2 +Block 0006 [ 76]: c61d848b3604f406 +Block 0006 [ 77]: a6e481e6f62d417e +Block 0006 [ 78]: 98374fb8b642277d +Block 0006 [ 79]: 3cd691a8e368c1a3 +Block 0006 [ 80]: f5e4b070e60c6371 +Block 0006 [ 81]: ae704193c93f858a +Block 0006 [ 82]: 91ba194d1daa0855 +Block 0006 [ 83]: 94733c71d403736b +Block 0006 [ 84]: 2ba3e7fd9c6a3cd5 +Block 0006 [ 85]: 1afb61c7bf872e72 +Block 0006 [ 86]: d3725b5b472693e9 +Block 0006 [ 87]: 5a37d40a1ea35b2f +Block 0006 [ 88]: fb9b6b1b8c900513 +Block 0006 [ 89]: 9ccf2941f4f80c3c +Block 0006 [ 90]: 0c987b97df5adf27 +Block 0006 [ 91]: 76174bbba6dbfe6f +Block 0006 [ 92]: 94aac5d0f17cb183 +Block 0006 [ 93]: 3c1c6d2e3ba1ee47 +Block 0006 [ 94]: 830b0554211273d4 +Block 0006 [ 95]: c0be78c4cfb035d6 +Block 0006 [ 96]: 6d73af45c4760ff7 +Block 0006 [ 97]: 7f1c9d632ff58ddf +Block 0006 [ 98]: 4d28f566ec1be67b +Block 0006 [ 99]: ddddae2263706ff7 +Block 0006 [100]: b7d1ea8ff5b40ed9 +Block 0006 [101]: 060f1e1a15cf24c0 +Block 0006 [102]: b8ef978d9367132b +Block 0006 [103]: 75051540922cf5f7 +Block 0006 [104]: 9acab99071475dca +Block 0006 [105]: 9cf6fa671ba3c5e8 +Block 0006 [106]: da306220d6d92f3f +Block 0006 [107]: 96f370ed24c0a715 +Block 0006 [108]: eef65720ca00c62c +Block 0006 [109]: d0a4896fef4fbb76 +Block 0006 [110]: 34cb832b72571c57 +Block 0006 [111]: b6f372cf70846a46 +Block 0006 [112]: 089b00b51e7e7bb3 +Block 0006 [113]: 3a67f4f3a4e2ba6d +Block 0006 [114]: 3efe256bac84de46 +Block 0006 [115]: 7e12bd4d6af4d9f3 +Block 0006 [116]: 6081aefcc1b62159 +Block 0006 [117]: 9eee22656bd81016 +Block 0006 [118]: ab2ec3390f6456a0 +Block 0006 [119]: 7a3555752b91ecb3 +Block 0006 [120]: a32e7434fd10c015 +Block 0006 [121]: 1475b5ce252f4f53 +Block 0006 [122]: d75c74f6e22b18f0 +Block 0006 [123]: ea383d46ae76a8f5 +Block 0006 [124]: b9439a5a2a0342d7 +Block 0006 [125]: 0866fc6c0bc150dd +Block 0006 [126]: 1a48b3e6e8e7128f +Block 0006 [127]: f99acc084060ccc6 +Block 0007 [ 0]: 002beefd6242b6fc +Block 0007 [ 1]: ccd632cc9923d203 +Block 0007 [ 2]: 811448a01c1cee37 +Block 0007 [ 3]: bdb5d29914d0fd4b +Block 0007 [ 4]: aa8a6e84e5b9862d +Block 0007 [ 5]: 5cfe285ab264bdd1 +Block 0007 [ 6]: 9e007b855f8c4198 +Block 0007 [ 7]: a26ae8c98fd60957 +Block 0007 [ 8]: 8898a87f9d06ea7c +Block 0007 [ 9]: fc5224caf8054b51 +Block 0007 [ 10]: 6da6869d93083849 +Block 0007 [ 11]: c1816abe2cb148d3 +Block 0007 [ 12]: 6d526b4c8d7a7194 +Block 0007 [ 13]: b9b0ee4d9e221379 +Block 0007 [ 14]: 5eb5a2c637d58307 +Block 0007 [ 15]: 699550723f3335b9 +Block 0007 [ 16]: 8bd3efa71abca2da +Block 0007 [ 17]: 286304f7c483ef5f +Block 0007 [ 18]: 4b9273444ac054aa +Block 0007 [ 19]: 6665269cc5fe3c67 +Block 0007 [ 20]: 028c169ce962a690 +Block 0007 [ 21]: 932821205bda6248 +Block 0007 [ 22]: 12e7e8141030e59f +Block 0007 [ 23]: 6e53a28d9d6ed667 +Block 0007 [ 24]: a1b5387b05bbf7aa +Block 0007 [ 25]: eb32cc77b091f595 +Block 0007 [ 26]: ce2c166ab58cbbe0 +Block 0007 [ 27]: 03b1037106b358e2 +Block 0007 [ 28]: 3f92863ea1f614d0 +Block 0007 [ 29]: f05841d5cd327092 +Block 0007 [ 30]: 91e0fd9692bff005 +Block 0007 [ 31]: afd5f332341584c6 +Block 0007 [ 32]: 15071f83f2203c21 +Block 0007 [ 33]: 43ebdc1864818a2a +Block 0007 [ 34]: 0156f8f1493fce68 +Block 0007 [ 35]: f64e6ebe8e490ce8 +Block 0007 [ 36]: 6eed6c06e9e02dd6 +Block 0007 [ 37]: 9922babb8a661298 +Block 0007 [ 38]: b813c6bddbb4ac83 +Block 0007 [ 39]: 5b698fe61fc5208f +Block 0007 [ 40]: e706c9f769eba549 +Block 0007 [ 41]: df0f332b5b107970 +Block 0007 [ 42]: 0da80b0ad28623de +Block 0007 [ 43]: cf850bcda6e3de54 +Block 0007 [ 44]: 169055a58391024e +Block 0007 [ 45]: f92b9ffcf48a04df +Block 0007 [ 46]: 4124880c61e033e2 +Block 0007 [ 47]: e8345420f69b7b09 +Block 0007 [ 48]: db8e71e39ff08397 +Block 0007 [ 49]: 05bdc9300e0865d2 +Block 0007 [ 50]: 3109c1b72e9e5fc0 +Block 0007 [ 51]: f12bee6915c31c92 +Block 0007 [ 52]: c7d8812129b1e13f +Block 0007 [ 53]: 63fe835118a4449c +Block 0007 [ 54]: 66134014e4f99a06 +Block 0007 [ 55]: e03ed3e8aed721b1 +Block 0007 [ 56]: be7ddd16a45ed362 +Block 0007 [ 57]: 5d85f460481ef486 +Block 0007 [ 58]: 0d4e3d285acb2128 +Block 0007 [ 59]: a999dea8ad365308 +Block 0007 [ 60]: ca02a8b6803967e2 +Block 0007 [ 61]: a1c4d8818baeeb35 +Block 0007 [ 62]: 555ce5d78543ede5 +Block 0007 [ 63]: eb9ff1a5add111e3 +Block 0007 [ 64]: 439f9aea1de62ee3 +Block 0007 [ 65]: 7b59bf01ff510d8c +Block 0007 [ 66]: da2ac155c61c1f0b +Block 0007 [ 67]: 331dbc2c66eed4f2 +Block 0007 [ 68]: 652a5f3ab977b23b +Block 0007 [ 69]: 83fb468bb3e13696 +Block 0007 [ 70]: 03de2ebdd3f9bb1c +Block 0007 [ 71]: 5b3ca2644926db6c +Block 0007 [ 72]: 297776bedec9267b +Block 0007 [ 73]: 95beda56a6edbb35 +Block 0007 [ 74]: 94071492eece3348 +Block 0007 [ 75]: d77a89f14e33d1ee +Block 0007 [ 76]: d76fd7c32602756e +Block 0007 [ 77]: 1200fa9a61602f57 +Block 0007 [ 78]: 574bec69a352b0db +Block 0007 [ 79]: d42f7ae3ce87fc4e +Block 0007 [ 80]: a217f4ec297fe743 +Block 0007 [ 81]: 0d01f7578cf0e679 +Block 0007 [ 82]: ec97b5ce481abc89 +Block 0007 [ 83]: 656c1293bab962fb +Block 0007 [ 84]: 297a9721b48fa834 +Block 0007 [ 85]: 70a5ff29c7941f90 +Block 0007 [ 86]: b60f45feda3af7a6 +Block 0007 [ 87]: 548bdd7d053a03bd +Block 0007 [ 88]: 62d72d1ef6df5827 +Block 0007 [ 89]: 6131ae7350b40cc0 +Block 0007 [ 90]: 6b9f43233ba759c6 +Block 0007 [ 91]: 176cdac2adb09b47 +Block 0007 [ 92]: 6267a0329806fa44 +Block 0007 [ 93]: 3c305808bd0d2120 +Block 0007 [ 94]: 6479e3f470857aca +Block 0007 [ 95]: 8b0cf70ea2dc68d0 +Block 0007 [ 96]: 3de9c929d4af52fb +Block 0007 [ 97]: f80508a3f0cf5428 +Block 0007 [ 98]: 515b50830dc5d290 +Block 0007 [ 99]: bdcd51b2125a83ec +Block 0007 [100]: 3ed75ff8432271e0 +Block 0007 [101]: 4ba6ec3635b0e76b +Block 0007 [102]: 9ded925bce57397c +Block 0007 [103]: b93bdb8173bed393 +Block 0007 [104]: a11d019347a2c33c +Block 0007 [105]: 94101a31465b3284 +Block 0007 [106]: 7479e1eb888e7500 +Block 0007 [107]: b92a49c6d49f27bf +Block 0007 [108]: adf40d53776ed568 +Block 0007 [109]: f53fbe73cda6090f +Block 0007 [110]: 9b808347790c5d5a +Block 0007 [111]: 9622af5b138e5d69 +Block 0007 [112]: 4b659ba374ae26c0 +Block 0007 [113]: 24b1b1604d43976f +Block 0007 [114]: 1f8a68ffcab10d30 +Block 0007 [115]: 4535ac37b39b03b8 +Block 0007 [116]: 8f7f3080deaf81a1 +Block 0007 [117]: 603995246b14f01b +Block 0007 [118]: a780b701f2faaa04 +Block 0007 [119]: 156703383b497d9f +Block 0007 [120]: 38f0ec51b9bb66e0 +Block 0007 [121]: 1036342f66765314 +Block 0007 [122]: eb7c88a00e41ace8 +Block 0007 [123]: 9845e713fc5c9e5d +Block 0007 [124]: 1c99a9eaec15012c +Block 0007 [125]: 86fc425ad1459f8c +Block 0007 [126]: ecff41d17bc36118 +Block 0007 [127]: 0a65099375079ce5 +Block 0008 [ 0]: c7b8373a03afcf19 +Block 0008 [ 1]: a909269230364d43 +Block 0008 [ 2]: d799ffd1c5da04bd +Block 0008 [ 3]: 05f61178010cbb0b +Block 0008 [ 4]: 64b06d70c562fe17 +Block 0008 [ 5]: aa26efa251b45eb5 +Block 0008 [ 6]: 043edbf927768e4c +Block 0008 [ 7]: 4687854c9c446387 +Block 0008 [ 8]: 2ae6746e9e695849 +Block 0008 [ 9]: d632eaddeed40e2e +Block 0008 [ 10]: 2e1894229225f690 +Block 0008 [ 11]: cc681f3a01d12db0 +Block 0008 [ 12]: 59aa54aacd5118eb +Block 0008 [ 13]: b329a0950a899a89 +Block 0008 [ 14]: 49e3b4972c0de6f3 +Block 0008 [ 15]: 202fae02c2e5620a +Block 0008 [ 16]: f95b327c27fc70f3 +Block 0008 [ 17]: 3d5bb13789a7f840 +Block 0008 [ 18]: ca538a32e5cf05d7 +Block 0008 [ 19]: 6adc8c09af9cdd36 +Block 0008 [ 20]: 8009e1c4be9c7f1a +Block 0008 [ 21]: b6d9ebf3902cc509 +Block 0008 [ 22]: edfdc70b68ffe682 +Block 0008 [ 23]: 85971773ea2e2aa4 +Block 0008 [ 24]: fd5713a4dd2aae2f +Block 0008 [ 25]: 7fc21515c6515c23 +Block 0008 [ 26]: 134b73c32ec830e7 +Block 0008 [ 27]: 16835d88c1333f50 +Block 0008 [ 28]: 3bb27ca7d7a87a53 +Block 0008 [ 29]: 95714e2ec1a0baa0 +Block 0008 [ 30]: cc22ea124de03f5c +Block 0008 [ 31]: 6904cc3dfb20281f +Block 0008 [ 32]: 01f0d8396bee58ef +Block 0008 [ 33]: 01eec7dd2eff4865 +Block 0008 [ 34]: ed2bc2842d0add18 +Block 0008 [ 35]: 939c7b2dfe867802 +Block 0008 [ 36]: c5f57f1b42747a1f +Block 0008 [ 37]: 18af1227ebd86903 +Block 0008 [ 38]: 29b7dc33247912c4 +Block 0008 [ 39]: 00f4e97989cc3d8b +Block 0008 [ 40]: 61dd12b31336dd1d +Block 0008 [ 41]: 4b03857af3a06d71 +Block 0008 [ 42]: 725514d41421a49b +Block 0008 [ 43]: 23b3cbb357607d19 +Block 0008 [ 44]: 9b3927ecce07ceb9 +Block 0008 [ 45]: d0b7796042bfa8c6 +Block 0008 [ 46]: dd05d92323d8f813 +Block 0008 [ 47]: edf698eca5b99165 +Block 0008 [ 48]: b1dfdf82b4674811 +Block 0008 [ 49]: d5ca255656a63e19 +Block 0008 [ 50]: 197aac7dc09b8972 +Block 0008 [ 51]: d8d7a090740cf39a +Block 0008 [ 52]: b3ba2e7e524e0333 +Block 0008 [ 53]: 15ee29644b30bc96 +Block 0008 [ 54]: 12659f1a6a71b53b +Block 0008 [ 55]: e660b364e9e01413 +Block 0008 [ 56]: d8e60ba470f76e03 +Block 0008 [ 57]: 2268390a9c96548c +Block 0008 [ 58]: c2718c9dad08f162 +Block 0008 [ 59]: 65873efcb59a5197 +Block 0008 [ 60]: 2e05ebb8441f3edc +Block 0008 [ 61]: 6a9d2c0ab8c851db +Block 0008 [ 62]: ad24c928e658d046 +Block 0008 [ 63]: 50b6fc4bb8747b9b +Block 0008 [ 64]: 9be93e96d85b3f3a +Block 0008 [ 65]: c5ddc41b9c0c0433 +Block 0008 [ 66]: 5951b4a1ef885444 +Block 0008 [ 67]: dda7ec0d8457ebdf +Block 0008 [ 68]: 3ea34e7424121003 +Block 0008 [ 69]: 6351dfbe0f2744ef +Block 0008 [ 70]: baae70fdb538a0eb +Block 0008 [ 71]: 4e3a6085ef5f6c36 +Block 0008 [ 72]: bc0b3847702a388c +Block 0008 [ 73]: 2632f243eae0de51 +Block 0008 [ 74]: 83f4c3031c53da8f +Block 0008 [ 75]: 7ca1d5c056c3212c +Block 0008 [ 76]: e91d5c35bf2ac359 +Block 0008 [ 77]: 6ef5fcb669f8ba32 +Block 0008 [ 78]: a2d6070fb37dcea8 +Block 0008 [ 79]: d97f93802d983edb +Block 0008 [ 80]: 6f8d6d93927e937f +Block 0008 [ 81]: 539b8ba74e47a85a +Block 0008 [ 82]: d267a050f43e6edd +Block 0008 [ 83]: 9d606704b2663688 +Block 0008 [ 84]: 8b2648fb1289be9a +Block 0008 [ 85]: 21423b5e0d4e0114 +Block 0008 [ 86]: 502ea60aafcca859 +Block 0008 [ 87]: 2a71e295504afee6 +Block 0008 [ 88]: e27ca4bbe595d9c9 +Block 0008 [ 89]: 5b6f28b95c8ef12d +Block 0008 [ 90]: fa7883e79e4ebc9d +Block 0008 [ 91]: 74e9bd98da31842a +Block 0008 [ 92]: e7b9a0a7b5a3bf38 +Block 0008 [ 93]: dd3e398aebf1a877 +Block 0008 [ 94]: 07695e81f360ae4e +Block 0008 [ 95]: b6b30c9f4a29c2e8 +Block 0008 [ 96]: a9e06a63186894a6 +Block 0008 [ 97]: 7eb26e252eaa9995 +Block 0008 [ 98]: 93c64e8f318d7406 +Block 0008 [ 99]: 3adec85056ae3778 +Block 0008 [100]: 27f889dd9c85f165 +Block 0008 [101]: bd35ba0e789faee7 +Block 0008 [102]: 2c7c406b25d07593 +Block 0008 [103]: fb8a4b223e6131d3 +Block 0008 [104]: b5420c0981e94c1c +Block 0008 [105]: c2c33dc496497614 +Block 0008 [106]: 29df3353953d0207 +Block 0008 [107]: 5549a76b170723a4 +Block 0008 [108]: c20d3ae7f46d1982 +Block 0008 [109]: 422a49338347bbf8 +Block 0008 [110]: bfdec4da70aaedda +Block 0008 [111]: d91860f96421332f +Block 0008 [112]: 7b83b4377f28e210 +Block 0008 [113]: 45883aaa3c712c74 +Block 0008 [114]: 5b9bf0574f48e65a +Block 0008 [115]: 1ca2c6c126b50d21 +Block 0008 [116]: 9c1d4d9a7b519d7a +Block 0008 [117]: d1b495c6e63178de +Block 0008 [118]: c7f5aedc253cc38a +Block 0008 [119]: c10d67ddd0010dcd +Block 0008 [120]: d26f4968efdf04e4 +Block 0008 [121]: 254d3c73de94f530 +Block 0008 [122]: ee5fe9b21a65c3c2 +Block 0008 [123]: 0da2241e73889e92 +Block 0008 [124]: 15e1ecdf444ae9d9 +Block 0008 [125]: 5a0c111eb92c79ed +Block 0008 [126]: be331ef95f53d838 +Block 0008 [127]: 77474ea5a67680d4 +Block 0009 [ 0]: df0b91c201ac9942 +Block 0009 [ 1]: 6f84a33c554aa710 +Block 0009 [ 2]: 35ba5e6d84d3003f +Block 0009 [ 3]: b9456bd3dbb0a7f0 +Block 0009 [ 4]: 414d82dc7ee872f1 +Block 0009 [ 5]: a691e74cb34e90e1 +Block 0009 [ 6]: 221c06abd68740bc +Block 0009 [ 7]: ffad697908129e72 +Block 0009 [ 8]: 62a15c20d7cd2102 +Block 0009 [ 9]: d673060f04c04527 +Block 0009 [ 10]: cb6edf766a1bb01a +Block 0009 [ 11]: 0935c95a41b7811c +Block 0009 [ 12]: 448cb94eb2908b5b +Block 0009 [ 13]: ec311c1e42dce2e6 +Block 0009 [ 14]: 62982ffdc03b54a1 +Block 0009 [ 15]: a717faed7ee8fe1f +Block 0009 [ 16]: ba087cf64c4f938b +Block 0009 [ 17]: 6c895b58388893e9 +Block 0009 [ 18]: 3aca50c898a8b894 +Block 0009 [ 19]: 6f42216ee699b812 +Block 0009 [ 20]: f1a0099713f54a5b +Block 0009 [ 21]: e8e9afff66b861a8 +Block 0009 [ 22]: d5a17492de8da115 +Block 0009 [ 23]: 88acec5c381891ef +Block 0009 [ 24]: b094197c22566803 +Block 0009 [ 25]: 09139c3d2e44ffd2 +Block 0009 [ 26]: a41e2680e6f77d5c +Block 0009 [ 27]: 9e5dfcf66915ec5c +Block 0009 [ 28]: ece54cdfb9c923bb +Block 0009 [ 29]: 6b26d1a619995eb8 +Block 0009 [ 30]: 1fde8b780d9e7644 +Block 0009 [ 31]: 5b20ab006f62f2ea +Block 0009 [ 32]: e7fb9f5efb397851 +Block 0009 [ 33]: ec03581a4debc462 +Block 0009 [ 34]: 2739621c0dc6a51c +Block 0009 [ 35]: 43a677040f16655f +Block 0009 [ 36]: 8a86af39727c0788 +Block 0009 [ 37]: 67f66e4a6f77a496 +Block 0009 [ 38]: 3706c9a8b8ce7405 +Block 0009 [ 39]: 7c64362723e93e2a +Block 0009 [ 40]: d5ff005efd480c4e +Block 0009 [ 41]: 35f1600688530496 +Block 0009 [ 42]: 6aab73eb7272c1f7 +Block 0009 [ 43]: 6e4358e5606a2975 +Block 0009 [ 44]: a9f7d62b60fde122 +Block 0009 [ 45]: c8feb2c548dc793d +Block 0009 [ 46]: 9fe4708f7b2674b6 +Block 0009 [ 47]: 77a810d3a075fb57 +Block 0009 [ 48]: 3c0aa6c3fd7c85c5 +Block 0009 [ 49]: f2ffdbe790966f93 +Block 0009 [ 50]: 124ac9d5b645bc85 +Block 0009 [ 51]: 3060cc4d585e3d3e +Block 0009 [ 52]: 6dc9615348e9a3a2 +Block 0009 [ 53]: 853c7f38065107a9 +Block 0009 [ 54]: 421c82c549418317 +Block 0009 [ 55]: 3876db61dfb07871 +Block 0009 [ 56]: df06b1a43b9f66e4 +Block 0009 [ 57]: dff0f687fb927041 +Block 0009 [ 58]: 28cea38d6bd0ad43 +Block 0009 [ 59]: 0919aefbb62cae91 +Block 0009 [ 60]: 5746f327f0d2c535 +Block 0009 [ 61]: bb1365ac1e29ed76 +Block 0009 [ 62]: 93e745dad8a15140 +Block 0009 [ 63]: 3e3b193f8039d2fc +Block 0009 [ 64]: 85f0282c2d6a7563 +Block 0009 [ 65]: 0817805a055c26d1 +Block 0009 [ 66]: bfc51a96ba75a093 +Block 0009 [ 67]: 373fa1d846b62445 +Block 0009 [ 68]: e5cca7f5e9a9cbfa +Block 0009 [ 69]: a9ae844f885d9717 +Block 0009 [ 70]: 033be7201ffbb7fb +Block 0009 [ 71]: fe195a9b641b8799 +Block 0009 [ 72]: 6faba5c8e09d08a7 +Block 0009 [ 73]: 741b0907be8041ad +Block 0009 [ 74]: a96e074f55d6e5d4 +Block 0009 [ 75]: c6357f6ea02ffebd +Block 0009 [ 76]: b73816039f6bfb08 +Block 0009 [ 77]: f751a43d44b91ae2 +Block 0009 [ 78]: 1c3f09adcb6ba95d +Block 0009 [ 79]: cf75b0d707c9076d +Block 0009 [ 80]: 0a36fbe33c195174 +Block 0009 [ 81]: 453d81dcc483bdfd +Block 0009 [ 82]: 167edac1e41e46a7 +Block 0009 [ 83]: 328951c98589b0c0 +Block 0009 [ 84]: 160b54035815a09b +Block 0009 [ 85]: 00c1a36ce87d19ea +Block 0009 [ 86]: ef89588811143eae +Block 0009 [ 87]: 937f4f7560fce6a6 +Block 0009 [ 88]: 6cdec3ff6d2fa1e5 +Block 0009 [ 89]: 1a4ce03b83a4756e +Block 0009 [ 90]: da04b76d964e22c1 +Block 0009 [ 91]: a687274ca5a25edb +Block 0009 [ 92]: 84550fb207c15e94 +Block 0009 [ 93]: 55750f5fc80b47cd +Block 0009 [ 94]: cad236b1b597349e +Block 0009 [ 95]: 4e727ce399eff6d4 +Block 0009 [ 96]: 9d505481b2e3a51d +Block 0009 [ 97]: d5dfe11e287ed9d8 +Block 0009 [ 98]: 8ce7404ff599fc0d +Block 0009 [ 99]: 470204f510acde3d +Block 0009 [100]: 7ba66fe889c92854 +Block 0009 [101]: 87a5e69764636033 +Block 0009 [102]: 1e9001e57e736fd8 +Block 0009 [103]: 314909f6a2145aeb +Block 0009 [104]: efcf1e079bd105d6 +Block 0009 [105]: 8d242a18dcaa54e8 +Block 0009 [106]: a0a0573d9ce69ea3 +Block 0009 [107]: 938f115268396030 +Block 0009 [108]: c0378868d849d6e3 +Block 0009 [109]: ff1ee578eb3efd31 +Block 0009 [110]: d99a19b5bab336b5 +Block 0009 [111]: 1a7ba6b9c5872d86 +Block 0009 [112]: f9def2da6991a973 +Block 0009 [113]: 66a1e2cfaf0e0306 +Block 0009 [114]: 08fc893a0791480b +Block 0009 [115]: 1a73d52f72c63b82 +Block 0009 [116]: a33f2756e9253bbf +Block 0009 [117]: db0eff2fe9b13cd1 +Block 0009 [118]: 20973b7c758a661b +Block 0009 [119]: 2ff8806c93d75f4d +Block 0009 [120]: 9f1b9a5847d11da0 +Block 0009 [121]: 7d3b5cf7a4b7480d +Block 0009 [122]: 1d9fc165c758470b +Block 0009 [123]: 20b09f8a91462fef +Block 0009 [124]: 2129bc88a3e6a062 +Block 0009 [125]: f60f313a41a62bc4 +Block 0009 [126]: b2b2b34de8ebc90b +Block 0009 [127]: c6fd6b970f06e693 +Block 0010 [ 0]: 7f28485fae41c61c +Block 0010 [ 1]: fa0e3699cacc16d6 +Block 0010 [ 2]: a39c1aeed6d8b1c5 +Block 0010 [ 3]: 2883a312a09ad027 +Block 0010 [ 4]: cd3dd30e9b73b638 +Block 0010 [ 5]: 0c230d1074fe6f1f +Block 0010 [ 6]: 872452b98d232b2d +Block 0010 [ 7]: d775c1dacfaa7291 +Block 0010 [ 8]: 4d18e07ff6ca6eca +Block 0010 [ 9]: c348c6fbe35488f1 +Block 0010 [ 10]: 0c5f31be7aa5dd25 +Block 0010 [ 11]: 19d25fc35b7d789c +Block 0010 [ 12]: 7d366311f524a40a +Block 0010 [ 13]: fd82d9e641be9ce2 +Block 0010 [ 14]: f36648db501fc410 +Block 0010 [ 15]: 1fc0a7744abcfa1d +Block 0010 [ 16]: 2a74b93921014e03 +Block 0010 [ 17]: b3a6cfb22b82411f +Block 0010 [ 18]: 51e31c21bf3b2e34 +Block 0010 [ 19]: 6fb5abccf04dd2ec +Block 0010 [ 20]: 6dec81c70a782857 +Block 0010 [ 21]: 7d6c3372de7fbc24 +Block 0010 [ 22]: b5b6db12d3950a7e +Block 0010 [ 23]: 0e302839a31adc16 +Block 0010 [ 24]: 7cfba0473276dfc8 +Block 0010 [ 25]: e76109ead5cb5713 +Block 0010 [ 26]: 977e8bb574655f2f +Block 0010 [ 27]: c018185c2e3194dc +Block 0010 [ 28]: af61a2e2ebd8d8b4 +Block 0010 [ 29]: ee452ff8638d2b76 +Block 0010 [ 30]: ad55d266b0a40fb7 +Block 0010 [ 31]: 9889b7b971559a8e +Block 0010 [ 32]: a0fc23672a1e3bdf +Block 0010 [ 33]: 22ce2f07ad81e8de +Block 0010 [ 34]: 36ad96edda3bc8ca +Block 0010 [ 35]: 798d57c8c93f90e8 +Block 0010 [ 36]: e92afe4eabe2a1fa +Block 0010 [ 37]: 2dbb943d1de32244 +Block 0010 [ 38]: 84185c9ff10b4bcd +Block 0010 [ 39]: 25dae614f6f1e22b +Block 0010 [ 40]: ff3eee5a96aaf550 +Block 0010 [ 41]: 81381c491228560f +Block 0010 [ 42]: 803068857fd344e6 +Block 0010 [ 43]: c262bae576bdc7a9 +Block 0010 [ 44]: dfcec333f8b614b2 +Block 0010 [ 45]: 0aea3363bc3f344f +Block 0010 [ 46]: e18f0e0fcfa93d3c +Block 0010 [ 47]: 163e0a5dc3385a98 +Block 0010 [ 48]: 33c39e1b90c79bd6 +Block 0010 [ 49]: 5103572896584153 +Block 0010 [ 50]: 96623b63a57b0bcc +Block 0010 [ 51]: 8e5ee0c45887b09e +Block 0010 [ 52]: 7d6a8e036120ab2d +Block 0010 [ 53]: 32e46fc380011af5 +Block 0010 [ 54]: 557a7fb0b35b654f +Block 0010 [ 55]: 1d761afb9840f219 +Block 0010 [ 56]: afdad24da5bb7960 +Block 0010 [ 57]: bec28f0e94eec4a2 +Block 0010 [ 58]: b7fa86989ab8d5b4 +Block 0010 [ 59]: 66a4445fc047769a +Block 0010 [ 60]: 77e19aa42c9d10dc +Block 0010 [ 61]: 07a2a97a497dddca +Block 0010 [ 62]: b3571484eb5cdd0d +Block 0010 [ 63]: e175aa9b42cf3f42 +Block 0010 [ 64]: ddca20a6db44c602 +Block 0010 [ 65]: ef338426828143e3 +Block 0010 [ 66]: dd54632ca39231d3 +Block 0010 [ 67]: da1a2aa2859745fe +Block 0010 [ 68]: 74c97c8b2f33815a +Block 0010 [ 69]: c587421d57acf7f7 +Block 0010 [ 70]: 40d9dac9740b5349 +Block 0010 [ 71]: 0079c459c34cbc1f +Block 0010 [ 72]: 11e22f1682a3d113 +Block 0010 [ 73]: 9f49acd929fb413a +Block 0010 [ 74]: 8d55e456f55ed16d +Block 0010 [ 75]: cde96d37e1873857 +Block 0010 [ 76]: d1085cc95b3f405c +Block 0010 [ 77]: 37d477127dbef7bb +Block 0010 [ 78]: ead42fea0cf6cc80 +Block 0010 [ 79]: 044df94d21ddf550 +Block 0010 [ 80]: c53012b904c24725 +Block 0010 [ 81]: 95525031d1d04639 +Block 0010 [ 82]: 3863c49fc1087d2c +Block 0010 [ 83]: e6cf4f4ff7ce84da +Block 0010 [ 84]: bf23a90a9ae33ca2 +Block 0010 [ 85]: c47710c3a39f7fb6 +Block 0010 [ 86]: 948a6ccc2dfebdde +Block 0010 [ 87]: 7e021070b78e487a +Block 0010 [ 88]: 8ca241ffb7134f11 +Block 0010 [ 89]: 53cc15226ffa4c7b +Block 0010 [ 90]: bda5cfd2e8dd1214 +Block 0010 [ 91]: 8013e83689e4af42 +Block 0010 [ 92]: 832f073728faedfc +Block 0010 [ 93]: 2b696689ba886915 +Block 0010 [ 94]: f0122a38f0387b7b +Block 0010 [ 95]: d937260fe6a46278 +Block 0010 [ 96]: b623d52be1e296b9 +Block 0010 [ 97]: b49b26e8a40c5ae9 +Block 0010 [ 98]: 070f2c1b5c164fbd +Block 0010 [ 99]: ae118485ef77d8a2 +Block 0010 [100]: 1ccd3e8d85b1349d +Block 0010 [101]: df681302bae21e79 +Block 0010 [102]: a3e3e386c1566cd8 +Block 0010 [103]: dbf2c62d8af9d80b +Block 0010 [104]: 3fbd2fe86a0b078c +Block 0010 [105]: fd47ca2204a21f5b +Block 0010 [106]: 29cae7cb46b8a80b +Block 0010 [107]: 591c6568a46874b5 +Block 0010 [108]: 3f9df5a1623a987c +Block 0010 [109]: 11078c2b31dc9255 +Block 0010 [110]: 573467550986e576 +Block 0010 [111]: 5e6d3a4952a53546 +Block 0010 [112]: f0028177e38f421f +Block 0010 [113]: faf300a788ac70f8 +Block 0010 [114]: 1d79e8592eccf877 +Block 0010 [115]: 9f54739a8ac85f76 +Block 0010 [116]: a9e12fbae12e7a33 +Block 0010 [117]: 2584032801e3d559 +Block 0010 [118]: 11ff32939bd33fc2 +Block 0010 [119]: dd1e2b237b40a4d5 +Block 0010 [120]: 40b45c342afb5ed2 +Block 0010 [121]: 61bebe9cc3085fd4 +Block 0010 [122]: f4414aa37eab423e +Block 0010 [123]: 883c290ebbd8386e +Block 0010 [124]: ceeee1728db78c38 +Block 0010 [125]: 1e9954eaf177ed07 +Block 0010 [126]: 80018b0ffa4ada6b +Block 0010 [127]: 69ea0fe2bdb6aa7a +Block 0011 [ 0]: d823f2ebb073e169 +Block 0011 [ 1]: 46519cc7f32a3184 +Block 0011 [ 2]: 4f848c9df11c5dda +Block 0011 [ 3]: 0f95888556fe6484 +Block 0011 [ 4]: 5911f3c5a44cdb8f +Block 0011 [ 5]: 047ccd76c309cd9d +Block 0011 [ 6]: 8c7b47757a961e06 +Block 0011 [ 7]: a04e66f30643b51a +Block 0011 [ 8]: 7e9952d3090e28c7 +Block 0011 [ 9]: 27affecba3781f12 +Block 0011 [ 10]: 9655174693d550f4 +Block 0011 [ 11]: ee56b2a2a45941c6 +Block 0011 [ 12]: 8444478ca6156892 +Block 0011 [ 13]: 2744ee006e719b9d +Block 0011 [ 14]: c206b56f3ad73389 +Block 0011 [ 15]: 90eeab895899816c +Block 0011 [ 16]: 47b96ec2889a0e0b +Block 0011 [ 17]: 42ad9f254176d076 +Block 0011 [ 18]: f2f0875c81641f2c +Block 0011 [ 19]: d22978dd69845640 +Block 0011 [ 20]: ac102ad40d55b4f2 +Block 0011 [ 21]: 7dd10f15753e0c69 +Block 0011 [ 22]: a5af151b885e7e1c +Block 0011 [ 23]: 0f61a9031d9ad58a +Block 0011 [ 24]: 96147a38e8dd8e86 +Block 0011 [ 25]: 03b33d8df8bd05c1 +Block 0011 [ 26]: 2eb2d3b258561281 +Block 0011 [ 27]: 10340f5f1464ceda +Block 0011 [ 28]: e84e6ce48d91c47c +Block 0011 [ 29]: 2f52565f4b181ee7 +Block 0011 [ 30]: 99a673ad0f52411c +Block 0011 [ 31]: d238746f84d376a7 +Block 0011 [ 32]: ca2e030fb3e59fac +Block 0011 [ 33]: b33a1e2a6e6c32c8 +Block 0011 [ 34]: 4f5c8d8b74603beb +Block 0011 [ 35]: 5815912b2102decb +Block 0011 [ 36]: a6342080776818bc +Block 0011 [ 37]: 65465d7fe8ba063c +Block 0011 [ 38]: 924c3979ef6625a7 +Block 0011 [ 39]: 5f7b5b4d3f1a7de7 +Block 0011 [ 40]: 1387c91b9e3db3c2 +Block 0011 [ 41]: 3f969d2f0cf22e3d +Block 0011 [ 42]: 2ca2cda6f702248a +Block 0011 [ 43]: 07c264c15cb53a0a +Block 0011 [ 44]: 4d68922b1bf0578f +Block 0011 [ 45]: 9f4c622f27a9a767 +Block 0011 [ 46]: 551068996b9b9536 +Block 0011 [ 47]: 5ce843c9978c4d5f +Block 0011 [ 48]: d2af7fa4b7eb3eca +Block 0011 [ 49]: 4f1f0be1f941743a +Block 0011 [ 50]: b4ac8888be21332c +Block 0011 [ 51]: 270213a33fd89c67 +Block 0011 [ 52]: 4c9a215ddea4eebd +Block 0011 [ 53]: d0d8fb405477e881 +Block 0011 [ 54]: 3228f4ef397151a0 +Block 0011 [ 55]: a65c58eff39fa3d3 +Block 0011 [ 56]: 69c1497ca3b35d50 +Block 0011 [ 57]: 6b3aefd106898e22 +Block 0011 [ 58]: f4c3551419449f2b +Block 0011 [ 59]: a83c18e589503f1c +Block 0011 [ 60]: c97a73e6930cd38c +Block 0011 [ 61]: d11ab42796550a96 +Block 0011 [ 62]: 21bb952c8d1522ba +Block 0011 [ 63]: b3efb673edd0a50f +Block 0011 [ 64]: 6f3405964b106ed3 +Block 0011 [ 65]: 0fd159cc65a4e29f +Block 0011 [ 66]: a446f1dadfe504ce +Block 0011 [ 67]: 09bf99d9e804173e +Block 0011 [ 68]: 8470e09c51c6888c +Block 0011 [ 69]: e322d994f8b8e653 +Block 0011 [ 70]: 03e5107f547300e7 +Block 0011 [ 71]: 231647ee75a19f77 +Block 0011 [ 72]: 792ebd93791dd994 +Block 0011 [ 73]: 6684d2596987264d +Block 0011 [ 74]: 990e8bb7a7203131 +Block 0011 [ 75]: e432392c73dfc169 +Block 0011 [ 76]: 6aa53e7f024864bb +Block 0011 [ 77]: 90b67a6404e4845e +Block 0011 [ 78]: cbb23f233d34e66f +Block 0011 [ 79]: ff24fa04d9641ec6 +Block 0011 [ 80]: 778a4af4e74881db +Block 0011 [ 81]: 55907243faa69d05 +Block 0011 [ 82]: 4d4eabb494518c3b +Block 0011 [ 83]: 51c8c63a21531614 +Block 0011 [ 84]: cb1f11f105d6527a +Block 0011 [ 85]: 8fa5d40948ca6b4b +Block 0011 [ 86]: aeec5faad1b394de +Block 0011 [ 87]: 566679c3acdfdc7f +Block 0011 [ 88]: 6aeaa509ee1684f3 +Block 0011 [ 89]: e5e1f3b93ab07726 +Block 0011 [ 90]: 8cc62c076b72fe44 +Block 0011 [ 91]: f050819d8070c2d8 +Block 0011 [ 92]: a1654238bfb3e902 +Block 0011 [ 93]: 3e144a6601da32e4 +Block 0011 [ 94]: 8533f4d5df28925b +Block 0011 [ 95]: a0bf7983730213ee +Block 0011 [ 96]: 2d567f30d0b78b29 +Block 0011 [ 97]: fc8ffa1db1747998 +Block 0011 [ 98]: 7a79aea920f07bf1 +Block 0011 [ 99]: 60af46d99fb415d9 +Block 0011 [100]: 98a8e3eac4feab2f +Block 0011 [101]: cde6076dc1e41778 +Block 0011 [102]: 81b0b241fbfd5723 +Block 0011 [103]: 54d86946e10611d4 +Block 0011 [104]: be570072842ef00c +Block 0011 [105]: da8ba670370d14d9 +Block 0011 [106]: c9a8c79266e18357 +Block 0011 [107]: 4662021e96128f26 +Block 0011 [108]: b8890ef03513d9bd +Block 0011 [109]: b1e765b25512b72b +Block 0011 [110]: acc815dc214f985a +Block 0011 [111]: f2ff2d27f6197b46 +Block 0011 [112]: b0a04bbe8189bd51 +Block 0011 [113]: 038adddc71436c5c +Block 0011 [114]: 78be2a6b143beef9 +Block 0011 [115]: d47ef4fc71fd2449 +Block 0011 [116]: 1ac251a8b10bdaa5 +Block 0011 [117]: 38b1bdca6eb395b5 +Block 0011 [118]: 91cdd37a5d6d2917 +Block 0011 [119]: 6468c1d2a90a4b95 +Block 0011 [120]: f38298e9fbc627c5 +Block 0011 [121]: 281974ebb62f612f +Block 0011 [122]: dae84d62736df3f7 +Block 0011 [123]: 883fd538755b4678 +Block 0011 [124]: 0cb05ee801034510 +Block 0011 [125]: 380a81fcaae4ffe7 +Block 0011 [126]: 1c67d5d638d87f6e +Block 0011 [127]: b411a4d3d2ec2e9a +Block 0012 [ 0]: 255a9eb92510e44c +Block 0012 [ 1]: ab09530dd4233898 +Block 0012 [ 2]: cc05fd96a7df19de +Block 0012 [ 3]: 5da89b50eb7b0b3a +Block 0012 [ 4]: 312be76cd0558c61 +Block 0012 [ 5]: 6f5bcb47082a3df8 +Block 0012 [ 6]: 9f3c3393b98d51af +Block 0012 [ 7]: 5920d6c03f222d41 +Block 0012 [ 8]: 6f8a719295acfb80 +Block 0012 [ 9]: 6d7eed73e7fe9237 +Block 0012 [ 10]: 50ef8a3b6ebca6e9 +Block 0012 [ 11]: 99630c77a40fd8a3 +Block 0012 [ 12]: 9f9c89e408a22382 +Block 0012 [ 13]: e7e28e5874c52548 +Block 0012 [ 14]: 622a178029f344dc +Block 0012 [ 15]: b67d1c8303474a0a +Block 0012 [ 16]: 8bcede5c0ce2b4bb +Block 0012 [ 17]: a8b113091a2d1018 +Block 0012 [ 18]: 6fb492543aef040b +Block 0012 [ 19]: 0fdd1b28f42219fd +Block 0012 [ 20]: 8747821d660abab9 +Block 0012 [ 21]: 1911fb0f8d6a8859 +Block 0012 [ 22]: 729b9d38a3a185ac +Block 0012 [ 23]: 22154ac1267c55f6 +Block 0012 [ 24]: 768581ee4cbf975a +Block 0012 [ 25]: d25cdb1b4eab5257 +Block 0012 [ 26]: c8d1be9a40ebb82a +Block 0012 [ 27]: 90fdbe85e0f2fa15 +Block 0012 [ 28]: 054f461c93f2cec6 +Block 0012 [ 29]: a7496a0a5b20aeff +Block 0012 [ 30]: e01336457c5f1c2f +Block 0012 [ 31]: 69b6b95906a2eeaf +Block 0012 [ 32]: af2080da4ac007b2 +Block 0012 [ 33]: dc62b604cb5a4602 +Block 0012 [ 34]: 2b75460cd6b53759 +Block 0012 [ 35]: 9c947680980c66e9 +Block 0012 [ 36]: 2046e8f3c6a206f6 +Block 0012 [ 37]: c7e1eb7be31fa0b7 +Block 0012 [ 38]: 10b8eb7cc13e0991 +Block 0012 [ 39]: bea9cad97d149702 +Block 0012 [ 40]: b024e48f310144e0 +Block 0012 [ 41]: b9567a121acd2beb +Block 0012 [ 42]: 13b54389c87bd0b9 +Block 0012 [ 43]: e840a59948b3ec6f +Block 0012 [ 44]: 4909028080039634 +Block 0012 [ 45]: 0940ce4447d5a1e3 +Block 0012 [ 46]: 7ace92df7b8ad234 +Block 0012 [ 47]: 70a2a6faedf67a19 +Block 0012 [ 48]: d95b9fa5d551d6ca +Block 0012 [ 49]: d28fea58f9706160 +Block 0012 [ 50]: 4f6a0afa04d55adc +Block 0012 [ 51]: 4aec847e4b35b540 +Block 0012 [ 52]: 4798eedea9043c96 +Block 0012 [ 53]: 29fcb2a949e28343 +Block 0012 [ 54]: 50fee2618212eac1 +Block 0012 [ 55]: a2deb2055db58493 +Block 0012 [ 56]: 2130cae1cfaa3b52 +Block 0012 [ 57]: ed2a5651338720be +Block 0012 [ 58]: 74f9f622c7c4cb2c +Block 0012 [ 59]: c7f914e1e1ee88e9 +Block 0012 [ 60]: 4dd5bdd2e0dfb82d +Block 0012 [ 61]: 761e7529cfa5d50a +Block 0012 [ 62]: aee434fec94bea69 +Block 0012 [ 63]: 4fb829ad4214b9a3 +Block 0012 [ 64]: 45a6f3618a66137b +Block 0012 [ 65]: 759f870df4bb89ff +Block 0012 [ 66]: d5d451ab02f2fb17 +Block 0012 [ 67]: 065ee57f45efe776 +Block 0012 [ 68]: c440fda2ebae75a1 +Block 0012 [ 69]: 3619f9566b18cb66 +Block 0012 [ 70]: 4f694a31736272c0 +Block 0012 [ 71]: 83dcedfe72f8a5a6 +Block 0012 [ 72]: fd5ed48b69e26467 +Block 0012 [ 73]: c3ad2a9085b2350a +Block 0012 [ 74]: 0fa2a974fa66c2c5 +Block 0012 [ 75]: 824b1a0c0e320544 +Block 0012 [ 76]: 481a05e369d0b679 +Block 0012 [ 77]: 88d130e03144508c +Block 0012 [ 78]: 8fee335301144988 +Block 0012 [ 79]: 07497f7f4f8f897f +Block 0012 [ 80]: ebadd1b8bab2e986 +Block 0012 [ 81]: 1fdc42aa71ec04af +Block 0012 [ 82]: c830f16a2bce327f +Block 0012 [ 83]: 5c3422bc14a97050 +Block 0012 [ 84]: 555dc50f03762d67 +Block 0012 [ 85]: 465d7bb016a6feb5 +Block 0012 [ 86]: 2846817750c5d35d +Block 0012 [ 87]: 39543ba8b29341bc +Block 0012 [ 88]: b57a159c3bb2983b +Block 0012 [ 89]: 83a82c2208e51f99 +Block 0012 [ 90]: 60af61a328b09433 +Block 0012 [ 91]: d88f44d23202be03 +Block 0012 [ 92]: d766959e1b39aee3 +Block 0012 [ 93]: f8f2f9fef0993a41 +Block 0012 [ 94]: 3d4ef27f410409b0 +Block 0012 [ 95]: be039e6fec5957e7 +Block 0012 [ 96]: 088f51f404d0521d +Block 0012 [ 97]: 9b65dc9f2cc2aede +Block 0012 [ 98]: dc7536661a38a7a6 +Block 0012 [ 99]: bdd0ab6161ff4b1f +Block 0012 [100]: 389e53c15ff15cfd +Block 0012 [101]: 5defd83b8336d489 +Block 0012 [102]: 82302e22360576cc +Block 0012 [103]: 63dbfb98dc759bf0 +Block 0012 [104]: d320499ef0240bff +Block 0012 [105]: 867e9e1e82eeea0b +Block 0012 [106]: 11892cf6c3b16ea4 +Block 0012 [107]: 97425b3f8cc22294 +Block 0012 [108]: 6b60c1ee9c86bcac +Block 0012 [109]: 8f670c048b878783 +Block 0012 [110]: 1cbc5ee997483f3f +Block 0012 [111]: 4e5f800e1f0ed9fb +Block 0012 [112]: ac4d54811845bca5 +Block 0012 [113]: 83d6a4180f6c8246 +Block 0012 [114]: 87152434ac5293c0 +Block 0012 [115]: d396cbfe0bc020d8 +Block 0012 [116]: 332f6ef4428d5b67 +Block 0012 [117]: 24cc04221d2e1699 +Block 0012 [118]: effe0e0dce6c104f +Block 0012 [119]: 1deeabd514dc5327 +Block 0012 [120]: 7d59839dee7245b2 +Block 0012 [121]: 0f700c906b853913 +Block 0012 [122]: a2d8cc9aaf4d3706 +Block 0012 [123]: b7e258900647c992 +Block 0012 [124]: 5bec1c3ad11b4eb1 +Block 0012 [125]: 6c80045a4fee4b05 +Block 0012 [126]: e1552dff02e38133 +Block 0012 [127]: 679e80e021c84ecd +Block 0013 [ 0]: 1723ee8ce9fe1cac +Block 0013 [ 1]: d2f1cf9a4efa84b5 +Block 0013 [ 2]: 21587dbfcad9c4f5 +Block 0013 [ 3]: 5f871948d46daee6 +Block 0013 [ 4]: 068d97e3ae68ef93 +Block 0013 [ 5]: d538dcb328807ab7 +Block 0013 [ 6]: 113a40488be45963 +Block 0013 [ 7]: 37012839c0b5d310 +Block 0013 [ 8]: 8d6f6941e2bd76e9 +Block 0013 [ 9]: aa2ffed5d74653c8 +Block 0013 [ 10]: e9164847b7b793b8 +Block 0013 [ 11]: b7539783560cb3ab +Block 0013 [ 12]: 8de392422de03196 +Block 0013 [ 13]: 7b38cb4bbe90d7f9 +Block 0013 [ 14]: 20a86166f8a23ddb +Block 0013 [ 15]: 8b97d267f05b6cfa +Block 0013 [ 16]: 911169ae5649dd39 +Block 0013 [ 17]: 768d987294702a52 +Block 0013 [ 18]: 8bdfb68d467ab96d +Block 0013 [ 19]: 9bf0c3c34022df10 +Block 0013 [ 20]: bc787b4af1321929 +Block 0013 [ 21]: a8a08098fa5e3ea1 +Block 0013 [ 22]: 7b2bb14c18b18dac +Block 0013 [ 23]: 2bf9072250cfbd58 +Block 0013 [ 24]: 10712cfa1552dc46 +Block 0013 [ 25]: 1fdedfc0b64c31dd +Block 0013 [ 26]: 7e366ca0e007c421 +Block 0013 [ 27]: f73cb101f76605d5 +Block 0013 [ 28]: c7f412423441e907 +Block 0013 [ 29]: d287f4339efbb55b +Block 0013 [ 30]: 9769f3f35d0f638b +Block 0013 [ 31]: 35208e3a65e08351 +Block 0013 [ 32]: 36fddf107a016fc4 +Block 0013 [ 33]: be86c0425851e7b0 +Block 0013 [ 34]: b941755a95f42f24 +Block 0013 [ 35]: aca5df3e21444d03 +Block 0013 [ 36]: a4a0384e3a78c869 +Block 0013 [ 37]: 010bbb7f8f85b95b +Block 0013 [ 38]: e55b719afc352f94 +Block 0013 [ 39]: acae794987894403 +Block 0013 [ 40]: bd806954f12b3ba8 +Block 0013 [ 41]: 7da659f1b0c29ad2 +Block 0013 [ 42]: e3b91d833ae0ecf4 +Block 0013 [ 43]: 8347b8bb6a793d24 +Block 0013 [ 44]: b488b65397e96b6d +Block 0013 [ 45]: 5be99ed08c53a17d +Block 0013 [ 46]: a1ca5de1c1efcbae +Block 0013 [ 47]: 689c9bdec537707d +Block 0013 [ 48]: cf934aabeb0cb430 +Block 0013 [ 49]: fb07ca7786243a5a +Block 0013 [ 50]: 9777c81195f714d5 +Block 0013 [ 51]: 74d6b3d255765f83 +Block 0013 [ 52]: d00c729a6e17621e +Block 0013 [ 53]: a5286754e36a2203 +Block 0013 [ 54]: 7adcc00eeff68ddc +Block 0013 [ 55]: 9a2e26a365eff54d +Block 0013 [ 56]: 9cabb250d5fa0e23 +Block 0013 [ 57]: 0938223fe49c9b73 +Block 0013 [ 58]: 21de6e98149643e5 +Block 0013 [ 59]: 333f16a2bafe6b2e +Block 0013 [ 60]: 8cb6959855ac3912 +Block 0013 [ 61]: d0a62347d3e64023 +Block 0013 [ 62]: 0a60c2b8e08acf42 +Block 0013 [ 63]: 1ef0860ef26f3312 +Block 0013 [ 64]: 30d01dfc4917ece0 +Block 0013 [ 65]: d85ea32036c4831c +Block 0013 [ 66]: b28f30aee13c8a12 +Block 0013 [ 67]: 65fa8757876a80ed +Block 0013 [ 68]: 29042b6a76ac23ec +Block 0013 [ 69]: 72b48bf0a7a0e204 +Block 0013 [ 70]: 894b73d9ef351322 +Block 0013 [ 71]: b2c87ae7c7e6d450 +Block 0013 [ 72]: 48cd6faeb75b7817 +Block 0013 [ 73]: 68461c999cea7fea +Block 0013 [ 74]: 1214f93aae6260ed +Block 0013 [ 75]: 0cb603e467252906 +Block 0013 [ 76]: 9cd6831e38c65b5a +Block 0013 [ 77]: 65c0a8e3497f195f +Block 0013 [ 78]: 7b0d1aecc3c1795c +Block 0013 [ 79]: 62993f6f4b2c06a8 +Block 0013 [ 80]: 5641d96b7e258f5a +Block 0013 [ 81]: 8420cc555ff8fe86 +Block 0013 [ 82]: 7bb68c81a5e30422 +Block 0013 [ 83]: 61e4006de902467f +Block 0013 [ 84]: c2e36bc580b71a6d +Block 0013 [ 85]: 797567bb6f7b5f08 +Block 0013 [ 86]: c1c88c12cd86592e +Block 0013 [ 87]: 0f381934cb0eb20b +Block 0013 [ 88]: e3fd14470d2fb3b1 +Block 0013 [ 89]: 5ad7c316da0754ab +Block 0013 [ 90]: 2fd4793ba5ce45d3 +Block 0013 [ 91]: 160895ed4541c2ea +Block 0013 [ 92]: e4c8a7fc865ef8fc +Block 0013 [ 93]: c20c133ca98bc6dc +Block 0013 [ 94]: 35006a7edd252d4a +Block 0013 [ 95]: 087391913b15a62e +Block 0013 [ 96]: df00d5e689294f1a +Block 0013 [ 97]: 91574a55e924a080 +Block 0013 [ 98]: 31b5d04701a2f55d +Block 0013 [ 99]: cc6255b36e700629 +Block 0013 [100]: e23b9c536e5388ad +Block 0013 [101]: 4f73f1b7fb7c103b +Block 0013 [102]: 59e564baecaac210 +Block 0013 [103]: 593a399aa604bb7e +Block 0013 [104]: 4f844dcf478e5a28 +Block 0013 [105]: c5a527ec4bf2ceef +Block 0013 [106]: 646f87228d0f36ac +Block 0013 [107]: ef7b4c95a2c43d9a +Block 0013 [108]: c7175c798fc1cebc +Block 0013 [109]: fb091b378f8cd986 +Block 0013 [110]: 3e6ad6b16c8dd94d +Block 0013 [111]: 5781768ab765ed4e +Block 0013 [112]: f82a9a6a9cbb2a7a +Block 0013 [113]: 88213573967f2637 +Block 0013 [114]: f9fdec29c0653e8b +Block 0013 [115]: 28029582a0c7a607 +Block 0013 [116]: 08f4d18472a711b7 +Block 0013 [117]: 46f99803f13ab2a0 +Block 0013 [118]: b8850f6995e1e41c +Block 0013 [119]: baaeaa2334a63967 +Block 0013 [120]: d833632166dfe229 +Block 0013 [121]: af0d68b77fb4b447 +Block 0013 [122]: 2ae378be285f6729 +Block 0013 [123]: 627e3307d7300095 +Block 0013 [124]: 200c8902704a45f8 +Block 0013 [125]: 343efdcf7c4ffa75 +Block 0013 [126]: bb6dc112ef5e114b +Block 0013 [127]: d159229bbf65f47c +Block 0014 [ 0]: 3dd943aa31f9a0b1 +Block 0014 [ 1]: c5bc6fd1670258cb +Block 0014 [ 2]: 18e6da67d66b9d53 +Block 0014 [ 3]: 81b4aa65e75e9b58 +Block 0014 [ 4]: d6cd172a4942404c +Block 0014 [ 5]: bdfe9d1b90dc4cf7 +Block 0014 [ 6]: e774682eba357510 +Block 0014 [ 7]: 9bf9e106f2cd11f2 +Block 0014 [ 8]: cbb5a04871e1a89f +Block 0014 [ 9]: 546e0edc7e7fc7e3 +Block 0014 [ 10]: cc7f7879341493c4 +Block 0014 [ 11]: fc96d04ca1ae2938 +Block 0014 [ 12]: 287b2d8c7efff3f1 +Block 0014 [ 13]: 20bc2acd3175e0c3 +Block 0014 [ 14]: 6cac2eb9def0d010 +Block 0014 [ 15]: b25cd833fd0b0574 +Block 0014 [ 16]: 88ea49aca89c0d1d +Block 0014 [ 17]: 52f984ec11c6cbc5 +Block 0014 [ 18]: 103c897b024d6b14 +Block 0014 [ 19]: a8c5efeb3fbe112f +Block 0014 [ 20]: 8ac8deaf1292e525 +Block 0014 [ 21]: 7ce42b5ef1ce3574 +Block 0014 [ 22]: b79c78fc9d327ad0 +Block 0014 [ 23]: 2188e50592bc5be2 +Block 0014 [ 24]: 495d110805fadcd4 +Block 0014 [ 25]: 2a9d1c998c7c3540 +Block 0014 [ 26]: 0395da083459ffd4 +Block 0014 [ 27]: 498ecca4b155842c +Block 0014 [ 28]: e381623e361cf077 +Block 0014 [ 29]: 8d07c9891cc2f309 +Block 0014 [ 30]: d02d5dc9f6cca3cb +Block 0014 [ 31]: fed2d25cec28e05c +Block 0014 [ 32]: c9e92f090bf0d04c +Block 0014 [ 33]: 47a0990fa9157507 +Block 0014 [ 34]: 7e1bf44a16c871bb +Block 0014 [ 35]: 9f6c048c95381368 +Block 0014 [ 36]: 8063de969373331e +Block 0014 [ 37]: 7324b36e0b9f90de +Block 0014 [ 38]: a07493f91f829c82 +Block 0014 [ 39]: 23cae39877ead327 +Block 0014 [ 40]: 8dd2a700ff49698b +Block 0014 [ 41]: 676482fa3081bc05 +Block 0014 [ 42]: cad059f5f87db5ce +Block 0014 [ 43]: dc8480c0389142cd +Block 0014 [ 44]: f116d8e5fe656eec +Block 0014 [ 45]: cf3f2882b2e22c4a +Block 0014 [ 46]: 7e168a8d46c08b5c +Block 0014 [ 47]: 13b2d64679c8f22f +Block 0014 [ 48]: 6c2725e46c4c33ee +Block 0014 [ 49]: 20c13cc1814b51b5 +Block 0014 [ 50]: caa64bc4dbc09904 +Block 0014 [ 51]: 054539afaca09ca4 +Block 0014 [ 52]: 4f8bcdc220da40c7 +Block 0014 [ 53]: 700931050e282836 +Block 0014 [ 54]: 2e05c642fb88539a +Block 0014 [ 55]: bb8e2fa2b15b66cd +Block 0014 [ 56]: 166a88d4afe3b3a6 +Block 0014 [ 57]: f576f0924284caf9 +Block 0014 [ 58]: 09340b71709aee33 +Block 0014 [ 59]: b82d179ec03a5d78 +Block 0014 [ 60]: c532af4d7e5cc29a +Block 0014 [ 61]: 7f67a63723bd08d0 +Block 0014 [ 62]: 7a277c9c32390651 +Block 0014 [ 63]: 7998e89ea54051cb +Block 0014 [ 64]: 51aec979c6fb169d +Block 0014 [ 65]: e38fa59e7f37e8a0 +Block 0014 [ 66]: e6e78774d14022e6 +Block 0014 [ 67]: c09c69967c73416f +Block 0014 [ 68]: 94d52919c6ab33bd +Block 0014 [ 69]: 7db4b6c8e6f8791a +Block 0014 [ 70]: f8b7978d2cb7365b +Block 0014 [ 71]: 4d85b5c76fa67522 +Block 0014 [ 72]: 483495d94dcec2fc +Block 0014 [ 73]: ec09c3a7b1e17f3a +Block 0014 [ 74]: 596bb09b4d921b21 +Block 0014 [ 75]: 850a53a2f88792fa +Block 0014 [ 76]: 9d99c3421c09d6c2 +Block 0014 [ 77]: 24453adc8bf994cc +Block 0014 [ 78]: bd76bcd6b7a011d5 +Block 0014 [ 79]: 396ca885fbec8c16 +Block 0014 [ 80]: fc6bb33caee725ee +Block 0014 [ 81]: 2a080b313e6c4f2d +Block 0014 [ 82]: 86ec7cb50654b1ba +Block 0014 [ 83]: 0b92269a68747a49 +Block 0014 [ 84]: a98e133d367630a6 +Block 0014 [ 85]: 75b450bfdad3ef46 +Block 0014 [ 86]: 6813552bd0497e69 +Block 0014 [ 87]: f07fe4afdb8ea39d +Block 0014 [ 88]: 54d6068dbeb342e0 +Block 0014 [ 89]: a15aaf21c44ee8d0 +Block 0014 [ 90]: b63ee2cbe2c95663 +Block 0014 [ 91]: 166f73caabf49c4c +Block 0014 [ 92]: 76c8835f88e53e8c +Block 0014 [ 93]: ba720e37091d56c5 +Block 0014 [ 94]: f2fb3992b75480ea +Block 0014 [ 95]: 70100e90ad4018bc +Block 0014 [ 96]: e05af6957917481d +Block 0014 [ 97]: 22d8926bca1eea81 +Block 0014 [ 98]: 41e68fc80ea5f78a +Block 0014 [ 99]: 0db147a5541b7be8 +Block 0014 [100]: 6fa71cc135c40318 +Block 0014 [101]: c3a5d25e006850f5 +Block 0014 [102]: 78dd6b4586b53616 +Block 0014 [103]: 956f727c8d423a5a +Block 0014 [104]: 13a2c0b038967c05 +Block 0014 [105]: 81188925c367f9ae +Block 0014 [106]: 61d42f2b5c2bafff +Block 0014 [107]: 94e70ed21445617c +Block 0014 [108]: e3c84a00a8a71f34 +Block 0014 [109]: 9dfd45ca105a6a1c +Block 0014 [110]: 6b4b2fa24d42cf81 +Block 0014 [111]: 5d61008fbef90a71 +Block 0014 [112]: 6d901238e1b52e4e +Block 0014 [113]: 5babe5134ec46268 +Block 0014 [114]: 69f295aedc81d28d +Block 0014 [115]: faccc7d986350652 +Block 0014 [116]: e974271561377bb4 +Block 0014 [117]: 0e06e727ece35f86 +Block 0014 [118]: 03649503edee0552 +Block 0014 [119]: 3a19e21c2c08225f +Block 0014 [120]: 983714b28acfa352 +Block 0014 [121]: aec143ba15c3ae13 +Block 0014 [122]: eda04483d75a4442 +Block 0014 [123]: 1915bf9e51452160 +Block 0014 [124]: 14bbe5004ccafb94 +Block 0014 [125]: 160191ad91cfa45c +Block 0014 [126]: 5797b27c188b9f46 +Block 0014 [127]: 07ef94bd73c522ec +Block 0015 [ 0]: 1fcd62604579cf9a +Block 0015 [ 1]: f7472d4cf4966feb +Block 0015 [ 2]: 40070f3f8b371041 +Block 0015 [ 3]: 1c5f4fa46291cff6 +Block 0015 [ 4]: 50d96202fa98746f +Block 0015 [ 5]: 28bae24d7859cd0f +Block 0015 [ 6]: 6f29c3214bf42a3f +Block 0015 [ 7]: 0f43542ad0d68908 +Block 0015 [ 8]: 64f7623b19206023 +Block 0015 [ 9]: 0e5bb2b9695c3f2b +Block 0015 [ 10]: 4bd6cf02b5053f13 +Block 0015 [ 11]: 3cf06693539f0209 +Block 0015 [ 12]: 933c76f4958f88c7 +Block 0015 [ 13]: 224ba767c721b85e +Block 0015 [ 14]: bd89d30e7b07f405 +Block 0015 [ 15]: 621659f508fea9c1 +Block 0015 [ 16]: 93b29390eb009b18 +Block 0015 [ 17]: cb0b2c63381c225e +Block 0015 [ 18]: a9df8f2f799b3895 +Block 0015 [ 19]: 9540633258d0559b +Block 0015 [ 20]: 5799b367a1035c27 +Block 0015 [ 21]: ab039ef579d12f72 +Block 0015 [ 22]: fd4e1f97bbcec3f9 +Block 0015 [ 23]: 58020468792e3149 +Block 0015 [ 24]: f80fbbef9020ba14 +Block 0015 [ 25]: edb184adc37f8bac +Block 0015 [ 26]: ddf6607be258d11b +Block 0015 [ 27]: d6d3c7b02fd17a59 +Block 0015 [ 28]: 61f878685218fbfe +Block 0015 [ 29]: c4e7098d87c5131e +Block 0015 [ 30]: e3b30f966a024bcf +Block 0015 [ 31]: 7042a343ad0ac25d +Block 0015 [ 32]: 57c131ab1ce93055 +Block 0015 [ 33]: 587673bd57cbc69f +Block 0015 [ 34]: 027e042e33b06a63 +Block 0015 [ 35]: 1f8adfff35f9340c +Block 0015 [ 36]: 7d4d3c87affa8399 +Block 0015 [ 37]: 4ee69b09b0b7ff8c +Block 0015 [ 38]: 7362cbcb388e62fb +Block 0015 [ 39]: 1f610ec02a68ba5b +Block 0015 [ 40]: 9f7de6ce0b8ed8ab +Block 0015 [ 41]: ba792317ef6dbc5c +Block 0015 [ 42]: 1132f78837fea094 +Block 0015 [ 43]: 40a59b89aa43d01e +Block 0015 [ 44]: 6a09803f185e3ff2 +Block 0015 [ 45]: 07c1eecad1350467 +Block 0015 [ 46]: 09d90f88782c0bfe +Block 0015 [ 47]: b35c6cfa35224654 +Block 0015 [ 48]: 823bce98edaaecba +Block 0015 [ 49]: cbafd6a0c0bb6e02 +Block 0015 [ 50]: 61fe96f3b326f598 +Block 0015 [ 51]: 4fb52b9081149314 +Block 0015 [ 52]: 91663e8113a6ce4e +Block 0015 [ 53]: d476a59721dd319f +Block 0015 [ 54]: e4ccc1ce980d0c4c +Block 0015 [ 55]: f25acea299080098 +Block 0015 [ 56]: e90608f35587edff +Block 0015 [ 57]: aefcf2950ba5b9d9 +Block 0015 [ 58]: cc1af8155c48305f +Block 0015 [ 59]: 53dcfac38ec8f86f +Block 0015 [ 60]: fc1bb1f2e32d255b +Block 0015 [ 61]: 99284548c15668e5 +Block 0015 [ 62]: 27a476f03f858b6f +Block 0015 [ 63]: b825e395361306bc +Block 0015 [ 64]: dac2f0f879838706 +Block 0015 [ 65]: 386a43788954e7b6 +Block 0015 [ 66]: 1386add44c82e486 +Block 0015 [ 67]: 08f3bc30f205f92a +Block 0015 [ 68]: 472237068205e714 +Block 0015 [ 69]: 1201daecc5585bf1 +Block 0015 [ 70]: c5220e46003ba5af +Block 0015 [ 71]: c868b77f92aa8ee9 +Block 0015 [ 72]: a420eaa74ae15349 +Block 0015 [ 73]: 012441dcfc778c24 +Block 0015 [ 74]: e17ee3e175498905 +Block 0015 [ 75]: a95c4b9354624bd9 +Block 0015 [ 76]: 9fbfee215c9f6c86 +Block 0015 [ 77]: cc06de59a8c1d3cd +Block 0015 [ 78]: 15de5b29f117cd89 +Block 0015 [ 79]: c5afb057b3707956 +Block 0015 [ 80]: 46ddbeb2548e5444 +Block 0015 [ 81]: 7acaa8b02a4ee9d1 +Block 0015 [ 82]: f2c310c24529d4fd +Block 0015 [ 83]: 4687e251ff0c69de +Block 0015 [ 84]: 0637bec2b4fa9428 +Block 0015 [ 85]: cf3cf91402099626 +Block 0015 [ 86]: f5367cfdb8e40c50 +Block 0015 [ 87]: fee6d52ad443fd1f +Block 0015 [ 88]: 3729210175b2e368 +Block 0015 [ 89]: 61034e7d4b15c174 +Block 0015 [ 90]: e967558ab3fb8207 +Block 0015 [ 91]: 1b5d9942a291afc5 +Block 0015 [ 92]: 0042a21711dfe84e +Block 0015 [ 93]: c7e5cc3dfae41eb5 +Block 0015 [ 94]: 8d6815ea8462e1e0 +Block 0015 [ 95]: 24ddc84f6012c07a +Block 0015 [ 96]: dde6c9697b197fb7 +Block 0015 [ 97]: c1d334ede0e974a0 +Block 0015 [ 98]: 9b6e88f1fac64efc +Block 0015 [ 99]: 73a77f1cec717036 +Block 0015 [100]: 00ae8968991efbc1 +Block 0015 [101]: 2fcd04ae7f546d1d +Block 0015 [102]: 0a740ec11d3a5148 +Block 0015 [103]: 45b310eb7fd15383 +Block 0015 [104]: 4c958457fa24116a +Block 0015 [105]: 03da5f6480bda485 +Block 0015 [106]: 7f35c38b67402824 +Block 0015 [107]: 656b4a01fd263d60 +Block 0015 [108]: aad8afd7d59def4f +Block 0015 [109]: 75cf46c914b75c59 +Block 0015 [110]: ed93be8debefe186 +Block 0015 [111]: 9b7ec89183978119 +Block 0015 [112]: e20f3d6e8843d5c1 +Block 0015 [113]: d7bb812401bebff1 +Block 0015 [114]: 3f8d6dd1ecc81f66 +Block 0015 [115]: bc14386a3526f895 +Block 0015 [116]: 7e5b6f713419c4c1 +Block 0015 [117]: 2a64698fce16995d +Block 0015 [118]: d000adb7e6c0e4cd +Block 0015 [119]: 434f679a9fc3e1fe +Block 0015 [120]: dd426ee945045809 +Block 0015 [121]: 65aae23f6aea9ad2 +Block 0015 [122]: 7143ebecafad3dca +Block 0015 [123]: da4bd54be8467ce8 +Block 0015 [124]: f0fa70e0d98c6d2b +Block 0015 [125]: aea09c38188881df +Block 0015 [126]: 0e157482fd1280cd +Block 0015 [127]: 2ff51beaf585df53 +Block 0016 [ 0]: 828f2c485352fa60 +Block 0016 [ 1]: ee9c2f3cdcdb75e7 +Block 0016 [ 2]: 6d2e391e86d67ea9 +Block 0016 [ 3]: 596b9e719c06cc50 +Block 0016 [ 4]: 975e16e18ae5361c +Block 0016 [ 5]: 5c298c05b5f32e6e +Block 0016 [ 6]: 2916891dda24445a +Block 0016 [ 7]: 9f4a2af86a69d3e2 +Block 0016 [ 8]: 9d73dc719f872257 +Block 0016 [ 9]: b85fdf131fd717bf +Block 0016 [ 10]: 684eb6e9ed1c01e2 +Block 0016 [ 11]: 58839608215647dd +Block 0016 [ 12]: 206f268b4bb14be4 +Block 0016 [ 13]: 3d5b535329a6e403 +Block 0016 [ 14]: 2d568898552d4f8d +Block 0016 [ 15]: cfa37381a03a351c +Block 0016 [ 16]: c5028c29947c2d50 +Block 0016 [ 17]: 5a1d933fbd3848d5 +Block 0016 [ 18]: f59bf46a0f063ed1 +Block 0016 [ 19]: f6918f04111ddf7e +Block 0016 [ 20]: 7c1a166bb214a687 +Block 0016 [ 21]: 030c31f7244caa61 +Block 0016 [ 22]: cdb9751e424616cd +Block 0016 [ 23]: 4f3781a5f53bfa20 +Block 0016 [ 24]: 3b738ad910526fe5 +Block 0016 [ 25]: 34ab1ab51eb39bbf +Block 0016 [ 26]: 17f0896ca1d91ba2 +Block 0016 [ 27]: b26a95d6456610bc +Block 0016 [ 28]: 03dc598e5cb3b7bb +Block 0016 [ 29]: e1fb90ce6575dec7 +Block 0016 [ 30]: 51d6e111b898b9c9 +Block 0016 [ 31]: 3f4558387cd2857d +Block 0016 [ 32]: 2ac861cb9daba66e +Block 0016 [ 33]: fda318969d2509d3 +Block 0016 [ 34]: d1ab2a61acf0255f +Block 0016 [ 35]: 0a9e98014ff5cf4b +Block 0016 [ 36]: ff43d5718bf7cbb3 +Block 0016 [ 37]: 72c67b78b2e7f5bd +Block 0016 [ 38]: a86c7fe600e056bd +Block 0016 [ 39]: db522fb8a02ae5b5 +Block 0016 [ 40]: e1e0e75d8068687f +Block 0016 [ 41]: 3c941e212ba6b1e9 +Block 0016 [ 42]: 45569ae66e23158f +Block 0016 [ 43]: df5c11c7b63709ae +Block 0016 [ 44]: 983865fb4f8604c9 +Block 0016 [ 45]: 7e9b885b83d8778d +Block 0016 [ 46]: 111f961443264301 +Block 0016 [ 47]: 9cfd8ed196e60d9e +Block 0016 [ 48]: bf7213b901a84b8e +Block 0016 [ 49]: c978661dccd27fff +Block 0016 [ 50]: 332866198ac75a46 +Block 0016 [ 51]: 1c2a325ed328f960 +Block 0016 [ 52]: 3c90439149af1767 +Block 0016 [ 53]: 64358b7436fd7e49 +Block 0016 [ 54]: 4f1b49d1a5ab7c61 +Block 0016 [ 55]: c0020c4113fa374c +Block 0016 [ 56]: 011fb18c45527243 +Block 0016 [ 57]: e3307f47d8975757 +Block 0016 [ 58]: f11e000f080d427f +Block 0016 [ 59]: 8a1c4f73ecc4cc6c +Block 0016 [ 60]: ede7aa790f594024 +Block 0016 [ 61]: 1e9da7f180802051 +Block 0016 [ 62]: b61dde0eb7fbd6a7 +Block 0016 [ 63]: 18f38ca82589db1e +Block 0016 [ 64]: 1528f9a1be07c0e7 +Block 0016 [ 65]: b4db60957f7f7843 +Block 0016 [ 66]: 2ae17ca586b28099 +Block 0016 [ 67]: ca802df042e060a0 +Block 0016 [ 68]: 66e6272aa9b71072 +Block 0016 [ 69]: c6936825f7ea9448 +Block 0016 [ 70]: ef51f540db1acddd +Block 0016 [ 71]: 8e369ac72e128edd +Block 0016 [ 72]: ec3326007dfed530 +Block 0016 [ 73]: 481e96df8097d470 +Block 0016 [ 74]: a24dcf16cfcf0fd2 +Block 0016 [ 75]: fb2479a8d49620df +Block 0016 [ 76]: 23414d1bad1076ab +Block 0016 [ 77]: c38b43413e97af83 +Block 0016 [ 78]: b41ff2ea8766dea1 +Block 0016 [ 79]: 3b7889f6916fe377 +Block 0016 [ 80]: fb186b87a016d7e7 +Block 0016 [ 81]: f9f91628758f3d8a +Block 0016 [ 82]: 8e03f7277994f2bb +Block 0016 [ 83]: 3765d40583c11dd6 +Block 0016 [ 84]: 6eee2373f6845dc4 +Block 0016 [ 85]: 2d2c93802e0b7b1f +Block 0016 [ 86]: 9b56e3de8c9284ac +Block 0016 [ 87]: 949074807d4ae859 +Block 0016 [ 88]: fa061f193f91a1e2 +Block 0016 [ 89]: 866754e4d501c4e1 +Block 0016 [ 90]: f0f62ee9946919c2 +Block 0016 [ 91]: bc6601547ee7ea0a +Block 0016 [ 92]: 86ddb62db8a4ad05 +Block 0016 [ 93]: 7c2ca09bb50b0457 +Block 0016 [ 94]: dacdf825d404c6a8 +Block 0016 [ 95]: aa08d84ff6cba406 +Block 0016 [ 96]: f6535c1116e5584d +Block 0016 [ 97]: 3e704757e9cde846 +Block 0016 [ 98]: d45aeab671b384c2 +Block 0016 [ 99]: 3d62e2b86d26fcbc +Block 0016 [100]: 8646641e89e86d48 +Block 0016 [101]: 7228a5842048e2f8 +Block 0016 [102]: 5b119dd26a1e68fd +Block 0016 [103]: 429a898d9d3ce5d7 +Block 0016 [104]: cc6e4b52a982d9e0 +Block 0016 [105]: d103b261bcdbeca3 +Block 0016 [106]: b8a7f23f4e37272f +Block 0016 [107]: 394e766157d29364 +Block 0016 [108]: de712ec28a18e23a +Block 0016 [109]: 0099369d1b32a993 +Block 0016 [110]: c2e3a4bd0b76be77 +Block 0016 [111]: 0a114ec44e541a6c +Block 0016 [112]: 4bf70291b97e5fab +Block 0016 [113]: 58a20499d06c57b5 +Block 0016 [114]: 61475e499642a467 +Block 0016 [115]: 7236975c5f0543a2 +Block 0016 [116]: ff5105b25e9e2406 +Block 0016 [117]: 0bc2e103b353c08f +Block 0016 [118]: 11661c9354381a9c +Block 0016 [119]: 007a690c3be22cf7 +Block 0016 [120]: dfc24ca0f9fe2f3d +Block 0016 [121]: 3e0f8b301beff690 +Block 0016 [122]: 64fcc11a9d2784ff +Block 0016 [123]: e09df3c52e21b280 +Block 0016 [124]: ee0b7ad59d2e4023 +Block 0016 [125]: aae7d5b2bb5fea4b +Block 0016 [126]: 959230be28937e41 +Block 0016 [127]: dba56bccbac64216 +Block 0017 [ 0]: ce89ee786b4ad569 +Block 0017 [ 1]: 7f47eb49a6a2def9 +Block 0017 [ 2]: 917b0181dd4105a1 +Block 0017 [ 3]: 07237dccaedf6cd3 +Block 0017 [ 4]: 12929ecda91d89f6 +Block 0017 [ 5]: 00b197a5047feea3 +Block 0017 [ 6]: 0c297a666e52cddc +Block 0017 [ 7]: 7434d14db56879b2 +Block 0017 [ 8]: bcb39c6b20f1f1df +Block 0017 [ 9]: cbb3b0039d74b088 +Block 0017 [ 10]: 7f59794de02e8ecb +Block 0017 [ 11]: 0b00abbd728f59f5 +Block 0017 [ 12]: 953a6e0bfc2990fb +Block 0017 [ 13]: 757fa841f8272e10 +Block 0017 [ 14]: b3a6ad2578bf0524 +Block 0017 [ 15]: 01580bb744060c8c +Block 0017 [ 16]: 09f46e44bb89ab50 +Block 0017 [ 17]: bff0a3e576ce3a29 +Block 0017 [ 18]: 57e01d4799886e73 +Block 0017 [ 19]: fcbd0ba0b95b90c8 +Block 0017 [ 20]: 5915db9b56ccf74b +Block 0017 [ 21]: 3d5047a4c1b29cc4 +Block 0017 [ 22]: d44becc901d3505c +Block 0017 [ 23]: 7a63ffe683770972 +Block 0017 [ 24]: 282df0a2d43f0d8e +Block 0017 [ 25]: 819737a32c170191 +Block 0017 [ 26]: 18639d1ca84fd3de +Block 0017 [ 27]: 139d002bc502eed1 +Block 0017 [ 28]: cc15c143c4160e0b +Block 0017 [ 29]: ca15cd9ed3ceee15 +Block 0017 [ 30]: cd914797b4580e11 +Block 0017 [ 31]: d30007cd76eb5135 +Block 0017 [ 32]: a6b3d1c21f962019 +Block 0017 [ 33]: e9e17570fbf99c2d +Block 0017 [ 34]: 06b7f2b094af388b +Block 0017 [ 35]: 3a69df521f36251c +Block 0017 [ 36]: aa87a601f41bd67e +Block 0017 [ 37]: 9229f8b1a24e5b67 +Block 0017 [ 38]: 5ab8c75edb0059b0 +Block 0017 [ 39]: 56643d5fca625320 +Block 0017 [ 40]: ed6fa0b07679d6cc +Block 0017 [ 41]: 7a926a3962dce5f0 +Block 0017 [ 42]: 2e7c1a857712e07d +Block 0017 [ 43]: 4dbb3257c9e970c9 +Block 0017 [ 44]: 0ba7bfae2aa6d059 +Block 0017 [ 45]: 1e2693085a857605 +Block 0017 [ 46]: 8c4dc6356e6b63bc +Block 0017 [ 47]: e7a68e11969060d9 +Block 0017 [ 48]: af934b59932e7ce5 +Block 0017 [ 49]: 422b2f5359c2a256 +Block 0017 [ 50]: 1f1b19d8966dc78a +Block 0017 [ 51]: 660b8ae28928d1a2 +Block 0017 [ 52]: 392835f375a3af76 +Block 0017 [ 53]: 3c6935b1b3486332 +Block 0017 [ 54]: c31ea11b1e409293 +Block 0017 [ 55]: b21e17ef8df2ef53 +Block 0017 [ 56]: dc4178e3d0a64cb0 +Block 0017 [ 57]: fa75d4ad1fa3d373 +Block 0017 [ 58]: 4eac80114c6c6158 +Block 0017 [ 59]: 55f95b24bbb020ab +Block 0017 [ 60]: 16e59f5e48cd1bb6 +Block 0017 [ 61]: f9b03ec078552e6e +Block 0017 [ 62]: be5279d4eb39a799 +Block 0017 [ 63]: 328f860bd398d08b +Block 0017 [ 64]: 5a2703aecc6123b4 +Block 0017 [ 65]: 3c536d8d1b2c0a62 +Block 0017 [ 66]: bbc3db06535d4571 +Block 0017 [ 67]: 3268741c1d27962a +Block 0017 [ 68]: a3805e8aba7ea59e +Block 0017 [ 69]: 9cfbfe725de47a2a +Block 0017 [ 70]: decf2774dbfa59fd +Block 0017 [ 71]: a72c3ba7a281d12d +Block 0017 [ 72]: d72902af4fd00bcd +Block 0017 [ 73]: 76390014d18f1677 +Block 0017 [ 74]: ee8e96345cf54d5f +Block 0017 [ 75]: b922dd921b1fb99e +Block 0017 [ 76]: f37ec8053e0a744b +Block 0017 [ 77]: 2b251571cb4e3ae8 +Block 0017 [ 78]: 148910b407121353 +Block 0017 [ 79]: e137db2fd45ee69d +Block 0017 [ 80]: d3a8552ea211ac6c +Block 0017 [ 81]: e39ebc4e55c4e37a +Block 0017 [ 82]: 3d3f2f341fefd6ef +Block 0017 [ 83]: a15f09d4c3515aa4 +Block 0017 [ 84]: ddcfe559098640f8 +Block 0017 [ 85]: 52fefc5d7f069b8d +Block 0017 [ 86]: abf081ef47ab4cbd +Block 0017 [ 87]: 3a9858342a54b761 +Block 0017 [ 88]: 4efe1d20e12d73c5 +Block 0017 [ 89]: a6d1453039a41e47 +Block 0017 [ 90]: b1d47dae231d0d96 +Block 0017 [ 91]: f0e2ce92b7dfde39 +Block 0017 [ 92]: 156f6ba6e2c11d91 +Block 0017 [ 93]: d6684423fcccdaf0 +Block 0017 [ 94]: 871ceabb32883b09 +Block 0017 [ 95]: a436eb1d424978a5 +Block 0017 [ 96]: aba685bbc36e6d44 +Block 0017 [ 97]: 801ca6d910fd784c +Block 0017 [ 98]: dd575ba7405b9867 +Block 0017 [ 99]: 315ede332333372d +Block 0017 [100]: 12b3dd1cecdd07fc +Block 0017 [101]: a70b713c012a83d6 +Block 0017 [102]: 40688d2f420f956f +Block 0017 [103]: d5b2cc8a746b8091 +Block 0017 [104]: 2c1d498434463441 +Block 0017 [105]: 61fd1e197d6f8f86 +Block 0017 [106]: 1c51a98dd35e3943 +Block 0017 [107]: e44df0b88a454f73 +Block 0017 [108]: 8bef184df0b10365 +Block 0017 [109]: 7d2fd9f74196fa5e +Block 0017 [110]: 467821ae9c30a343 +Block 0017 [111]: 8dfa81eac2bf791c +Block 0017 [112]: 68591ee38e2be85e +Block 0017 [113]: 4c20506c12f9c8cb +Block 0017 [114]: af9e7d7413a73de9 +Block 0017 [115]: f4da9e2ec5bae137 +Block 0017 [116]: b06eae767eda651b +Block 0017 [117]: a7708b469b78bfe1 +Block 0017 [118]: dc46cbb4f8f38ff5 +Block 0017 [119]: 57e84ca7c9457579 +Block 0017 [120]: ac9f054f49663052 +Block 0017 [121]: 7f1de271ca02e347 +Block 0017 [122]: 15a54e4e09cd829b +Block 0017 [123]: 39a9d0616902cc17 +Block 0017 [124]: e1553e5d4ba03e55 +Block 0017 [125]: cb4e29473f8d4e18 +Block 0017 [126]: e016eab995590f27 +Block 0017 [127]: e5c9315c3fe9e037 +Block 0018 [ 0]: d73e6cb4f600d92e +Block 0018 [ 1]: 4ff7703a923020fe +Block 0018 [ 2]: 4411633c5a210fb1 +Block 0018 [ 3]: fd544fe9e0e9fdaa +Block 0018 [ 4]: 067626b375f3e8b4 +Block 0018 [ 5]: f64824c7a0c9bdf0 +Block 0018 [ 6]: 65507b2d7cb1fb42 +Block 0018 [ 7]: 97fb9eb3215e84b6 +Block 0018 [ 8]: 35912760e121dba3 +Block 0018 [ 9]: 70d05b2b45d3fcb3 +Block 0018 [ 10]: 6f3c9f75e54cb571 +Block 0018 [ 11]: 50b765e15fb480b2 +Block 0018 [ 12]: 5c1a3001a2530b03 +Block 0018 [ 13]: 256ad981d34f716e +Block 0018 [ 14]: f233c26131fd0541 +Block 0018 [ 15]: 1bd106c75c804353 +Block 0018 [ 16]: f22341bd2cd671b4 +Block 0018 [ 17]: 36126083ed04bd4c +Block 0018 [ 18]: 06ab2af20b4d85a4 +Block 0018 [ 19]: f34414b1c4800e19 +Block 0018 [ 20]: eb1dcf5c4c788abb +Block 0018 [ 21]: da8b8fdee6a4b98a +Block 0018 [ 22]: 2d11a43e6b207fda +Block 0018 [ 23]: 56765cf6baf60079 +Block 0018 [ 24]: 33dd629347c11c5e +Block 0018 [ 25]: f7eda83186e4886e +Block 0018 [ 26]: 2aebe5a3f0b4b297 +Block 0018 [ 27]: 5382619de4eb3788 +Block 0018 [ 28]: 4684d6997e414414 +Block 0018 [ 29]: 9dee04efbe7b2e82 +Block 0018 [ 30]: 6f0a3cd1e45ac162 +Block 0018 [ 31]: dd84e7982526cdbd +Block 0018 [ 32]: f4b17125344b6916 +Block 0018 [ 33]: 25eddc5a7fe26243 +Block 0018 [ 34]: db8c36c50f7bc812 +Block 0018 [ 35]: 58fbe2f0d288772e +Block 0018 [ 36]: 6b49d7be66155606 +Block 0018 [ 37]: e1f9c8ea25df1450 +Block 0018 [ 38]: 16e995512253005a +Block 0018 [ 39]: 37c3d7d37d78351b +Block 0018 [ 40]: e949d536bc8d6387 +Block 0018 [ 41]: 9efef5f12072a753 +Block 0018 [ 42]: 867fafe2afc9a465 +Block 0018 [ 43]: 0dafd80edaaa5872 +Block 0018 [ 44]: 6952f071a1c64048 +Block 0018 [ 45]: 56bff386a78386f3 +Block 0018 [ 46]: 9760b6f85d0c5c4d +Block 0018 [ 47]: eda2dcbb0efb9077 +Block 0018 [ 48]: b1d892f1748b0004 +Block 0018 [ 49]: 2e122bfcbdcf902e +Block 0018 [ 50]: 0ec3ebd60bac9671 +Block 0018 [ 51]: 975c7b0e154db60f +Block 0018 [ 52]: 3c0c3947068dac74 +Block 0018 [ 53]: 0370cfde4fc9316b +Block 0018 [ 54]: 056b25931cd1ee5b +Block 0018 [ 55]: f6f424d19e6afbe6 +Block 0018 [ 56]: e0ef6348fffb105a +Block 0018 [ 57]: 0d23302398aa31d5 +Block 0018 [ 58]: 1066b74ec1400fa9 +Block 0018 [ 59]: 2a05cd7fce6a2910 +Block 0018 [ 60]: eb51397926f7d88a +Block 0018 [ 61]: 728f3bd5238b8cb0 +Block 0018 [ 62]: 72a124a00a7a4df1 +Block 0018 [ 63]: d2db366281f2bdbc +Block 0018 [ 64]: 6e2f9b75321efbae +Block 0018 [ 65]: 7f514005c44610d9 +Block 0018 [ 66]: cf19d6e9232b1a5c +Block 0018 [ 67]: f8abdf7c86dcd958 +Block 0018 [ 68]: c3f1174767399f88 +Block 0018 [ 69]: 9245d5ef34aaaac6 +Block 0018 [ 70]: 60ca2b939a60556d +Block 0018 [ 71]: 868adc9ef194e4d4 +Block 0018 [ 72]: 1386a0335edcd1eb +Block 0018 [ 73]: 6a23a25059e5f2a8 +Block 0018 [ 74]: 2d641127b0301ef5 +Block 0018 [ 75]: daefe2bb3a31a00e +Block 0018 [ 76]: 2c11b078b722b266 +Block 0018 [ 77]: 6a23c72c4b218626 +Block 0018 [ 78]: fe528c5309492c9c +Block 0018 [ 79]: fdca411f1c0afa6d +Block 0018 [ 80]: f76b41c6ab138d85 +Block 0018 [ 81]: 989699d1634c6df6 +Block 0018 [ 82]: e8a767bac83906bc +Block 0018 [ 83]: caefa4594e0dd565 +Block 0018 [ 84]: 3f4c782be2bcb4a8 +Block 0018 [ 85]: 8197ac8d57d06e73 +Block 0018 [ 86]: 61278eca7c5c1e5f +Block 0018 [ 87]: 229b2d380d87d45c +Block 0018 [ 88]: 21b608cd3f165344 +Block 0018 [ 89]: c0ffd42b993ea5dd +Block 0018 [ 90]: 78dafbd6d85212d6 +Block 0018 [ 91]: 4ca01529d90f1566 +Block 0018 [ 92]: 8a60560d75426e37 +Block 0018 [ 93]: 07017df87b5faa68 +Block 0018 [ 94]: d480dba8df4ee24f +Block 0018 [ 95]: 171853f0c7b9e99f +Block 0018 [ 96]: b77ae974ab8f2c8f +Block 0018 [ 97]: b3ede770aa3bb08b +Block 0018 [ 98]: 945ba501a3770bf1 +Block 0018 [ 99]: 3fe6e485d4993670 +Block 0018 [100]: 56a70e0511dff037 +Block 0018 [101]: 5a7b44bcf455425e +Block 0018 [102]: 13b8f7ceb3154c5b +Block 0018 [103]: a6ce1a824666c259 +Block 0018 [104]: 0f85b8ebc2b82e58 +Block 0018 [105]: e51da2e0d636f019 +Block 0018 [106]: 14af0a6aa3d06111 +Block 0018 [107]: 1f28c97aa3505adc +Block 0018 [108]: aaf9a553387b914d +Block 0018 [109]: d1e1cad1e47e6ef9 +Block 0018 [110]: 990bbd3ef7b12da5 +Block 0018 [111]: feb392b66f7f164d +Block 0018 [112]: 5a9ec205e41b7b8a +Block 0018 [113]: 0df4470a3854ce68 +Block 0018 [114]: a4324c6a3b2998c9 +Block 0018 [115]: 305d72d1ffaece34 +Block 0018 [116]: de4ae4a306ed3089 +Block 0018 [117]: 15c9c221e4856d2e +Block 0018 [118]: 822ce405f96cabcb +Block 0018 [119]: 6f9d0074fdfa6fcb +Block 0018 [120]: 50eeefcb50d1e0fb +Block 0018 [121]: a8ca87a02c7dd5f5 +Block 0018 [122]: 87e6756b1c1f9a88 +Block 0018 [123]: c83b55d91835afd4 +Block 0018 [124]: f8b21499a265096b +Block 0018 [125]: d2c88fc6864098d1 +Block 0018 [126]: d31599a122ec4b33 +Block 0018 [127]: b2a8a53f6cc6c035 +Block 0019 [ 0]: c0a747c4e28329e1 +Block 0019 [ 1]: e5903abdd4685ea0 +Block 0019 [ 2]: f624dbf4eab2eac1 +Block 0019 [ 3]: a7bdb44367b6d439 +Block 0019 [ 4]: bb398b8a231ca85e +Block 0019 [ 5]: e4204b07902d3f6e +Block 0019 [ 6]: 4cf5c1556e8a6a99 +Block 0019 [ 7]: 8e4b37c7c8196407 +Block 0019 [ 8]: 9b9c40f5d78e30aa +Block 0019 [ 9]: e7ab522bc1a9e428 +Block 0019 [ 10]: e598184e9e82ac8d +Block 0019 [ 11]: 85d11f6a0ec8e397 +Block 0019 [ 12]: feb1e8fb825dfa31 +Block 0019 [ 13]: 093d569d83fd45ec +Block 0019 [ 14]: aba7cb862bd83ccf +Block 0019 [ 15]: b903dd3e66e5fad7 +Block 0019 [ 16]: 6c9163634e7d4721 +Block 0019 [ 17]: 3891d444fc59e86c +Block 0019 [ 18]: 106020d458ffd0b1 +Block 0019 [ 19]: 70c32531ff689b86 +Block 0019 [ 20]: f2c322c30200d1bb +Block 0019 [ 21]: 0ba7383adf6e0690 +Block 0019 [ 22]: 2467345100b70ae8 +Block 0019 [ 23]: b158590311fe6486 +Block 0019 [ 24]: 484daadfb022e2af +Block 0019 [ 25]: b1097ef6f21175bd +Block 0019 [ 26]: 270dabd2d26940b9 +Block 0019 [ 27]: 18983ac19d92c698 +Block 0019 [ 28]: a8b17d5ba3423a19 +Block 0019 [ 29]: a87220ce023ac5bc +Block 0019 [ 30]: a36bb40525f87baf +Block 0019 [ 31]: 4bf5ed1ea08d2b1d +Block 0019 [ 32]: 9c7dceaf23358f5b +Block 0019 [ 33]: 5e6b6a50b9317e1b +Block 0019 [ 34]: fba24c695b6d9940 +Block 0019 [ 35]: 44e6d0d7c8f3c59d +Block 0019 [ 36]: 7e1b616776b587d3 +Block 0019 [ 37]: a335932288c6b015 +Block 0019 [ 38]: 70029a6ff40cbc91 +Block 0019 [ 39]: bf199bf017a4dd32 +Block 0019 [ 40]: 4d0e92e558b43b51 +Block 0019 [ 41]: 19752bbee2635be6 +Block 0019 [ 42]: 9eaaf852febb4173 +Block 0019 [ 43]: 766784a43f0a887e +Block 0019 [ 44]: 7c6d151066f51ced +Block 0019 [ 45]: 24f6521ec26f2069 +Block 0019 [ 46]: 4e960d6ea50022ea +Block 0019 [ 47]: 9049d12e39ce2484 +Block 0019 [ 48]: fd2ff51c2f5f8821 +Block 0019 [ 49]: ccf41c9939ca7d20 +Block 0019 [ 50]: e50aee1c5e97559b +Block 0019 [ 51]: 92b6559486a3382b +Block 0019 [ 52]: e649679609765362 +Block 0019 [ 53]: af60c4de383ea2c1 +Block 0019 [ 54]: 4e208398efa77945 +Block 0019 [ 55]: 1d01cc680dc510e6 +Block 0019 [ 56]: 70ed10fb8a669ee6 +Block 0019 [ 57]: 4ad094cc1b463933 +Block 0019 [ 58]: d1c6678cb703cf1e +Block 0019 [ 59]: 5932c03c8411ca45 +Block 0019 [ 60]: 7a3f6207de673d9c +Block 0019 [ 61]: 08c1ead7ae9bc357 +Block 0019 [ 62]: 3aed1f0b8721f33b +Block 0019 [ 63]: 4f9b463e022ebb8b +Block 0019 [ 64]: e21373749f526c05 +Block 0019 [ 65]: 15f877a94e4cc28c +Block 0019 [ 66]: b6f4ee9b7a853074 +Block 0019 [ 67]: feddee4b7089ab99 +Block 0019 [ 68]: 177cbe49bb7f1c47 +Block 0019 [ 69]: d2f486e7840fa52e +Block 0019 [ 70]: 1efbe813d77b3386 +Block 0019 [ 71]: 204ad6780ac5dbda +Block 0019 [ 72]: 4ef70ce7237e9423 +Block 0019 [ 73]: 56c850fae048f8d5 +Block 0019 [ 74]: 272f156eb2b5e4f1 +Block 0019 [ 75]: fdaed8f20cbb428f +Block 0019 [ 76]: 7dd9edf940b064e2 +Block 0019 [ 77]: 2ba1f25cd640890d +Block 0019 [ 78]: cd62db094c06521c +Block 0019 [ 79]: fd309eaa17862655 +Block 0019 [ 80]: fdd1a5f7f2e77ef6 +Block 0019 [ 81]: 2ced967d6a27fbb5 +Block 0019 [ 82]: d13b492e289631cb +Block 0019 [ 83]: 0299503d00b6af73 +Block 0019 [ 84]: 037ebf2f3ab92248 +Block 0019 [ 85]: d1eba5f6791d01af +Block 0019 [ 86]: 2a8c256540a80ec6 +Block 0019 [ 87]: e5d327a9af2ffed5 +Block 0019 [ 88]: 7238fd1a386a597b +Block 0019 [ 89]: 8305be11f9cd3923 +Block 0019 [ 90]: 7ac3169632caca5d +Block 0019 [ 91]: e711a9fda50e3844 +Block 0019 [ 92]: 3f2ec23d73a53df1 +Block 0019 [ 93]: e85438d9247b7063 +Block 0019 [ 94]: 369701c20fc048b8 +Block 0019 [ 95]: f147196fe629cad4 +Block 0019 [ 96]: eff4bd0fe6e9d785 +Block 0019 [ 97]: 55b98aae7df801f8 +Block 0019 [ 98]: 473bd8bf72e9d80f +Block 0019 [ 99]: 372113d6a79fbd61 +Block 0019 [100]: 5ec994ad59527b5d +Block 0019 [101]: 370957d1ba5eb9cd +Block 0019 [102]: b94bf1c3a9b67714 +Block 0019 [103]: c384f86146bce9a9 +Block 0019 [104]: ae5905325523c818 +Block 0019 [105]: 313d63f1a1ca488e +Block 0019 [106]: 408bd8f292c44421 +Block 0019 [107]: 2c7809887d5a742e +Block 0019 [108]: e481163da10fd561 +Block 0019 [109]: 5aac3786bf38ed9d +Block 0019 [110]: 61a76e808c1333c3 +Block 0019 [111]: 9b7955f93efbd457 +Block 0019 [112]: d3281738a72230e2 +Block 0019 [113]: 170818a8479da122 +Block 0019 [114]: c62bf1703287d997 +Block 0019 [115]: 032a13da2248d702 +Block 0019 [116]: dddbcd0ac02f9f71 +Block 0019 [117]: 713bae2d25fa4e42 +Block 0019 [118]: fd8ae9d115a20f7c +Block 0019 [119]: 229ceef5f318ddce +Block 0019 [120]: 1f29d53de834e081 +Block 0019 [121]: bb291d7d59f10f19 +Block 0019 [122]: b8dbcf3c3f3583bb +Block 0019 [123]: 9753f2819307b322 +Block 0019 [124]: ebd2fb222df580fc +Block 0019 [125]: c948516bf1b366d1 +Block 0019 [126]: 52cdc69534a37726 +Block 0019 [127]: 2ef56f44cf9436f9 +Block 0020 [ 0]: 734e629a628dd5de +Block 0020 [ 1]: 5a58aafa604d7cea +Block 0020 [ 2]: decd1fa291ea7349 +Block 0020 [ 3]: a6d23612f86139d7 +Block 0020 [ 4]: a5af09fbf4a787ac +Block 0020 [ 5]: ef9d693b8a2de764 +Block 0020 [ 6]: 505c1353a5bae511 +Block 0020 [ 7]: 1200f97cfd770359 +Block 0020 [ 8]: 477d6b28d05cf49c +Block 0020 [ 9]: b8e6c1e506c7b188 +Block 0020 [ 10]: 4c3ed38e467d8962 +Block 0020 [ 11]: ff09466393490693 +Block 0020 [ 12]: f42acf0d7a204245 +Block 0020 [ 13]: 4c828fbde0a65ff1 +Block 0020 [ 14]: 63aab903dc0ea9fb +Block 0020 [ 15]: f7dd14cd6009a8e8 +Block 0020 [ 16]: c25eebdc89fdf70d +Block 0020 [ 17]: 430f2f1baa30da8c +Block 0020 [ 18]: dbc784f1638697ff +Block 0020 [ 19]: e6e761901024928c +Block 0020 [ 20]: 63f5db6ab1252d0c +Block 0020 [ 21]: a16b91f6d5ee2d14 +Block 0020 [ 22]: f8460fc61abc3765 +Block 0020 [ 23]: e5a7daf71f12150f +Block 0020 [ 24]: 8727e6edc4cb70f7 +Block 0020 [ 25]: f5fb5eac08f0ee73 +Block 0020 [ 26]: d5d2b60b4cbb1b7d +Block 0020 [ 27]: 0bc179a997f53853 +Block 0020 [ 28]: 88d40013d3c597da +Block 0020 [ 29]: 8520fd776fea57d1 +Block 0020 [ 30]: ff41c92a18c1f5e6 +Block 0020 [ 31]: 7d1170ecd08a140f +Block 0020 [ 32]: 9e9ecb61bdbecba1 +Block 0020 [ 33]: 8a05443ef9e3fd46 +Block 0020 [ 34]: 49ee58c153b1c903 +Block 0020 [ 35]: c4809f9cebbb67c1 +Block 0020 [ 36]: 8d05a31a29871b15 +Block 0020 [ 37]: 1f7fe6dbf3a2d1ff +Block 0020 [ 38]: 1d462a2121191cf8 +Block 0020 [ 39]: e752ebf763b17942 +Block 0020 [ 40]: 3f9d429a5326ea77 +Block 0020 [ 41]: ead587a738e81dcb +Block 0020 [ 42]: a9bcdecf85c217fd +Block 0020 [ 43]: a26d47b8c1238157 +Block 0020 [ 44]: 651a66b3bb581f2c +Block 0020 [ 45]: cfa955096506a3f7 +Block 0020 [ 46]: 035c92416aae689b +Block 0020 [ 47]: 87b078db6f37b7ec +Block 0020 [ 48]: 488698e807ebe8de +Block 0020 [ 49]: dacebd9d66eff4fb +Block 0020 [ 50]: 576420c8fb5df97f +Block 0020 [ 51]: 59c8ff43f450eef5 +Block 0020 [ 52]: c24907642efa69f8 +Block 0020 [ 53]: c2780f0f0ca49e23 +Block 0020 [ 54]: b8b7ed7ed06fe78a +Block 0020 [ 55]: dba3e1ea470d7fc5 +Block 0020 [ 56]: 8afdb154ef51f907 +Block 0020 [ 57]: 0f6e3c0f727f3195 +Block 0020 [ 58]: 155cc979261a61f4 +Block 0020 [ 59]: 2fa61a7f141c36c9 +Block 0020 [ 60]: 03ea29e722963040 +Block 0020 [ 61]: 0b872d389e13e0f1 +Block 0020 [ 62]: af9883b7f36b8a79 +Block 0020 [ 63]: e423bfee1d544df7 +Block 0020 [ 64]: c6a2b6850e3d148d +Block 0020 [ 65]: 2bded84ad45688c0 +Block 0020 [ 66]: 012306a6d0350fc4 +Block 0020 [ 67]: e241389275cbae09 +Block 0020 [ 68]: 35817c5ede994e82 +Block 0020 [ 69]: e8e061fe79ffa788 +Block 0020 [ 70]: a7047fdafab17a66 +Block 0020 [ 71]: 9b283ba2aacc46ca +Block 0020 [ 72]: 48df0e8e03643311 +Block 0020 [ 73]: d5bb8debb5655152 +Block 0020 [ 74]: e6067c7db547dabf +Block 0020 [ 75]: 6be963ea0e0aed0a +Block 0020 [ 76]: 6b33437061cb8be1 +Block 0020 [ 77]: d0bd3e644206102e +Block 0020 [ 78]: 78a388f73a7b53a6 +Block 0020 [ 79]: 5d24627ef8abb4f9 +Block 0020 [ 80]: 055be9e53c43c554 +Block 0020 [ 81]: e32509d26029caa5 +Block 0020 [ 82]: b3d8f6b2fd6bb726 +Block 0020 [ 83]: 2b4c4351318bdbc7 +Block 0020 [ 84]: df8a4d376a62be6f +Block 0020 [ 85]: 275bc692f96b3a4b +Block 0020 [ 86]: 3b91dbf87b274d2e +Block 0020 [ 87]: b0d17c2b706ebdc5 +Block 0020 [ 88]: e25acdbf9bdf0f66 +Block 0020 [ 89]: a5af03b271405b48 +Block 0020 [ 90]: a2a1d259bb89d2dd +Block 0020 [ 91]: ec334f738b812ea8 +Block 0020 [ 92]: 2b4502c4ef6d706c +Block 0020 [ 93]: 5d59dbc73eb0c655 +Block 0020 [ 94]: 62dd5829cecbfab6 +Block 0020 [ 95]: 61d3300680db7001 +Block 0020 [ 96]: ff825644b486bc24 +Block 0020 [ 97]: fa770c7fc3c288b3 +Block 0020 [ 98]: 5993533c0cc4f3ae +Block 0020 [ 99]: 3c8fb5b08245af96 +Block 0020 [100]: dec90adee7025117 +Block 0020 [101]: fb6af315a87846e5 +Block 0020 [102]: cb6df9e5f37b9030 +Block 0020 [103]: 46a9e3bf64dd2107 +Block 0020 [104]: 91bba1949e9e2858 +Block 0020 [105]: 89b5583cf4442bb0 +Block 0020 [106]: 2ef8ecf98a0d53a0 +Block 0020 [107]: a3fd11ccd3d2e41e +Block 0020 [108]: 197f99094a56452b +Block 0020 [109]: 893307690eeda57e +Block 0020 [110]: 04027b05e83cf5dd +Block 0020 [111]: 4e0240c99df4a613 +Block 0020 [112]: acfc2275643fdab0 +Block 0020 [113]: f63b244b2fbd5148 +Block 0020 [114]: edab8427721c3f75 +Block 0020 [115]: 72d7f7d722f2065e +Block 0020 [116]: a822ddfd1bc95aa2 +Block 0020 [117]: 9e6ff4809803e545 +Block 0020 [118]: 8dd66544283171fb +Block 0020 [119]: ddac6524728f6767 +Block 0020 [120]: a798cc0c897cbc15 +Block 0020 [121]: 3eee203dd63489c5 +Block 0020 [122]: 84ec9fb95b124ef8 +Block 0020 [123]: a52586f61e51857b +Block 0020 [124]: d62a8a6195a96220 +Block 0020 [125]: e64fbb51d72dadcc +Block 0020 [126]: 77256737a1bfb5b0 +Block 0020 [127]: b8de0df9be9d957e +Block 0021 [ 0]: 48f20b10689f4e83 +Block 0021 [ 1]: 39e62f37a525d865 +Block 0021 [ 2]: 4e47ab2acb135d33 +Block 0021 [ 3]: c42c2049323a9ce2 +Block 0021 [ 4]: 7026754810320262 +Block 0021 [ 5]: fdabf4cc98d526f2 +Block 0021 [ 6]: de98230ccc90e91d +Block 0021 [ 7]: 091a9b3d240576e6 +Block 0021 [ 8]: 68afd8c0f731cc3f +Block 0021 [ 9]: c78bf9764d661a01 +Block 0021 [ 10]: 5bea6ba0ff4287bb +Block 0021 [ 11]: 45454840c15c0c3e +Block 0021 [ 12]: b35b87954cbcddb5 +Block 0021 [ 13]: 573a5477da3314cb +Block 0021 [ 14]: 70f7bf27c2ce76a8 +Block 0021 [ 15]: e4368c992fceecac +Block 0021 [ 16]: ba96394ad6d02e53 +Block 0021 [ 17]: 641bfb72dc066998 +Block 0021 [ 18]: 65e25ca33cccf184 +Block 0021 [ 19]: ed8d73c34e56770a +Block 0021 [ 20]: 720a1d1d280cf938 +Block 0021 [ 21]: 75ced9e0e3a035af +Block 0021 [ 22]: c88e8062d9f9c06b +Block 0021 [ 23]: 00fef53c0c05d145 +Block 0021 [ 24]: 67cf04ecd6d30055 +Block 0021 [ 25]: 8377a625564c8266 +Block 0021 [ 26]: f688bacf63fe2148 +Block 0021 [ 27]: f6fcdfe3932894fb +Block 0021 [ 28]: 951c5ecc941392f9 +Block 0021 [ 29]: 3250b3ba358c5582 +Block 0021 [ 30]: 90b4f720fa9e460c +Block 0021 [ 31]: f963935871671ca0 +Block 0021 [ 32]: eceeb74ebc564d21 +Block 0021 [ 33]: b39c5c19445b7b9f +Block 0021 [ 34]: 0c7997285ec7189b +Block 0021 [ 35]: 2ecb5769ee985f73 +Block 0021 [ 36]: 83c9fcfabb40a364 +Block 0021 [ 37]: 0d792da304cc4f2c +Block 0021 [ 38]: c812537235db19f0 +Block 0021 [ 39]: ae460c73e6c63488 +Block 0021 [ 40]: 08a215922c6041de +Block 0021 [ 41]: c97a377b4a718b36 +Block 0021 [ 42]: fca614307204c74a +Block 0021 [ 43]: 3ef0c90941c10f62 +Block 0021 [ 44]: ebe065caa726b6ba +Block 0021 [ 45]: 587f7d1fb0a2cc4c +Block 0021 [ 46]: 4982d8334e60f667 +Block 0021 [ 47]: c1df28b2ec657562 +Block 0021 [ 48]: 02f1ea6a2701137e +Block 0021 [ 49]: b9a461776c3fd823 +Block 0021 [ 50]: d0324040a86b75a4 +Block 0021 [ 51]: ad3fd886752ccf0d +Block 0021 [ 52]: f1918a52c6e8c4df +Block 0021 [ 53]: d1b7ad59e221c111 +Block 0021 [ 54]: f5f4a3e2afd0f619 +Block 0021 [ 55]: 65ead9ca48410c43 +Block 0021 [ 56]: 1f5bac3f2b3a0481 +Block 0021 [ 57]: 6c750bb2492f27e5 +Block 0021 [ 58]: 47d3af1c99ff70f5 +Block 0021 [ 59]: 3f9213b0e327063a +Block 0021 [ 60]: 5df60788e29688d2 +Block 0021 [ 61]: 8cb58a31f2df38b8 +Block 0021 [ 62]: ac6f9bb436912716 +Block 0021 [ 63]: 0fd04153e2dff0b8 +Block 0021 [ 64]: 77194b4b3557e8c6 +Block 0021 [ 65]: ab697cf5b4580f90 +Block 0021 [ 66]: 3ed2f55b7a42844a +Block 0021 [ 67]: 604a957093fae6a0 +Block 0021 [ 68]: e5b816f30faf227c +Block 0021 [ 69]: 344c389ed851b0a7 +Block 0021 [ 70]: e4cda77cbf72b80f +Block 0021 [ 71]: 4ef8b3e43d395020 +Block 0021 [ 72]: a10e58d927f9f9b4 +Block 0021 [ 73]: 49b8db015f4dae6c +Block 0021 [ 74]: dcf8799bd62305f6 +Block 0021 [ 75]: 0aae21512005eda1 +Block 0021 [ 76]: a425eb287bb0d675 +Block 0021 [ 77]: 624d06068c67cb67 +Block 0021 [ 78]: 9ba0e3ab7d63b33f +Block 0021 [ 79]: e7883082beee3ea5 +Block 0021 [ 80]: 72a7baae685ab8fa +Block 0021 [ 81]: 77624b29d9937c07 +Block 0021 [ 82]: fd015836bb1dd973 +Block 0021 [ 83]: fc334f9178f9b1ba +Block 0021 [ 84]: 0dc2b5797a4fc547 +Block 0021 [ 85]: 632ab6ef84e992dc +Block 0021 [ 86]: da79d4b3e5c42721 +Block 0021 [ 87]: 6b75fb145aaf3905 +Block 0021 [ 88]: 76b4485790fb7531 +Block 0021 [ 89]: b6f39ef0d1f3215b +Block 0021 [ 90]: 7edd8123d87869e5 +Block 0021 [ 91]: 5670f2bc2d962483 +Block 0021 [ 92]: 5d574c361b64ecc4 +Block 0021 [ 93]: 6b57df741d9a6420 +Block 0021 [ 94]: 78e76645eddb15fd +Block 0021 [ 95]: f4383deaae902412 +Block 0021 [ 96]: 3a81a7f781de1169 +Block 0021 [ 97]: 1bcf6da80c7a9f6a +Block 0021 [ 98]: 39c5577fd931dd80 +Block 0021 [ 99]: b16dfc78e8f90081 +Block 0021 [100]: f833577181c9b58e +Block 0021 [101]: 55fe82a0d6b525ec +Block 0021 [102]: 32f776a8dfa3c62e +Block 0021 [103]: e0e24059fb11ef83 +Block 0021 [104]: bb196f3c2e138f6e +Block 0021 [105]: 668483f4d9d9afe8 +Block 0021 [106]: fdc40fd165bd8d81 +Block 0021 [107]: 2e3eca136e35b37a +Block 0021 [108]: 3fe1ab36fb63b066 +Block 0021 [109]: 3ab084f6f91109cc +Block 0021 [110]: ea32e83f7d7f53cc +Block 0021 [111]: 9bd8c601a541a041 +Block 0021 [112]: 056399de05e2d664 +Block 0021 [113]: 84bee8b3ad9a1002 +Block 0021 [114]: 53b65ae6f2ac7620 +Block 0021 [115]: 1266879844255f8f +Block 0021 [116]: f1b1e45e64da8ace +Block 0021 [117]: ef8fb8ebe51bfe21 +Block 0021 [118]: 834b1615e554d69d +Block 0021 [119]: bc44d1a4080cff7b +Block 0021 [120]: 60642bf7a867e050 +Block 0021 [121]: 0b0d757e35e73640 +Block 0021 [122]: 5909d96b6a9defef +Block 0021 [123]: c60ce5d733fd4646 +Block 0021 [124]: f5a292fb1e0043ed +Block 0021 [125]: 40f6cfb2c8902681 +Block 0021 [126]: 0dec03fdf115dfc2 +Block 0021 [127]: c985316bfe35e532 +Block 0022 [ 0]: 804791fca9c1392b +Block 0022 [ 1]: e4c1e426881c2e87 +Block 0022 [ 2]: 344b8889ea4ad4ac +Block 0022 [ 3]: 1a04e6befb3d575b +Block 0022 [ 4]: 5bef6e064c648074 +Block 0022 [ 5]: 11c161d08bf9428f +Block 0022 [ 6]: d067ddca34550faf +Block 0022 [ 7]: 69ef5611390631e5 +Block 0022 [ 8]: 6afe225214318138 +Block 0022 [ 9]: 80af3c0b4b02a81a +Block 0022 [ 10]: 14bf5b64af634b3f +Block 0022 [ 11]: 9abcb0455be97f1d +Block 0022 [ 12]: ea75c0baee66705c +Block 0022 [ 13]: fe701bea2d3b26ca +Block 0022 [ 14]: 67c4c6258ed27322 +Block 0022 [ 15]: 429a289edde69d6e +Block 0022 [ 16]: f4f4c2d615d9a7be +Block 0022 [ 17]: 59f7a6c990794400 +Block 0022 [ 18]: 0bdd7b9e5fcb9d42 +Block 0022 [ 19]: c853bb1b4bca7df7 +Block 0022 [ 20]: 52f6bc0c799da19a +Block 0022 [ 21]: 943bdeab5accea7b +Block 0022 [ 22]: 73d7bd65c013fa43 +Block 0022 [ 23]: 1ad34d66c52d0ec5 +Block 0022 [ 24]: b6094fcbf860e74a +Block 0022 [ 25]: e7422f4d5128dcb5 +Block 0022 [ 26]: 87ef0706c8c88aad +Block 0022 [ 27]: ea9163e940b85771 +Block 0022 [ 28]: 0042fd3e3c33bbb3 +Block 0022 [ 29]: 16afcdb6b697a7f8 +Block 0022 [ 30]: 82a36bc54241dc84 +Block 0022 [ 31]: 3c32121ed362c31a +Block 0022 [ 32]: 71b3b15fbb31d804 +Block 0022 [ 33]: 7f11cdbd64ac602b +Block 0022 [ 34]: 6c2c665c0c0b1422 +Block 0022 [ 35]: 13273bca3537684c +Block 0022 [ 36]: d2797a8549da57c7 +Block 0022 [ 37]: f486e3f08054fbb8 +Block 0022 [ 38]: 2749de998f4434bb +Block 0022 [ 39]: b04d3f88514a28bf +Block 0022 [ 40]: 89e0e0f8e42d378a +Block 0022 [ 41]: 9635003f04a988b6 +Block 0022 [ 42]: ba273189836e43a2 +Block 0022 [ 43]: a3e7e916b15ec2ed +Block 0022 [ 44]: 933afb5cbbc5a346 +Block 0022 [ 45]: b2fe858fb64c56ec +Block 0022 [ 46]: 93397c330c834d3b +Block 0022 [ 47]: 9ac6374db29ba4af +Block 0022 [ 48]: 9abbf0baf99066b9 +Block 0022 [ 49]: 53fe093bcfa30abf +Block 0022 [ 50]: 59f06188b9aeac95 +Block 0022 [ 51]: 4f203567486f8e1f +Block 0022 [ 52]: 399c129eb1954981 +Block 0022 [ 53]: 9e8f3df04edd855c +Block 0022 [ 54]: c7839759458f28b7 +Block 0022 [ 55]: 0680b6a90eab4916 +Block 0022 [ 56]: cec145b80fe78247 +Block 0022 [ 57]: 808b65ea6e63e98b +Block 0022 [ 58]: 2c1e5538262fdfec +Block 0022 [ 59]: 81b30dc073b434c5 +Block 0022 [ 60]: c0707436657289e6 +Block 0022 [ 61]: 120a7eca718d4092 +Block 0022 [ 62]: 3175853539247ab9 +Block 0022 [ 63]: 5d0c743b9b6ffd0b +Block 0022 [ 64]: d8c28ec0886e9d48 +Block 0022 [ 65]: 594d6544fd87ae3a +Block 0022 [ 66]: a0758e83bad55871 +Block 0022 [ 67]: 19629e54112a76c1 +Block 0022 [ 68]: c39adb24ef1e776e +Block 0022 [ 69]: 99ad43408d60ab08 +Block 0022 [ 70]: 33d692124c11d9ae +Block 0022 [ 71]: ca6ae3cd5e089872 +Block 0022 [ 72]: 96128569361b5183 +Block 0022 [ 73]: 3264c5006587f2f5 +Block 0022 [ 74]: 927b19661155b67d +Block 0022 [ 75]: 27577a0564c02580 +Block 0022 [ 76]: 4be4137d71a8d20f +Block 0022 [ 77]: e8fbb27cfb3dd116 +Block 0022 [ 78]: c546d54308c8238b +Block 0022 [ 79]: 0e6ea22a889661de +Block 0022 [ 80]: df0e770ab52e0f23 +Block 0022 [ 81]: 912c757dd483dcd1 +Block 0022 [ 82]: 28b07c4d25d2f527 +Block 0022 [ 83]: f833999f75dfde74 +Block 0022 [ 84]: 3f3bfa3feb61ff0e +Block 0022 [ 85]: fde9b05908908e32 +Block 0022 [ 86]: f37ac6a234f6d531 +Block 0022 [ 87]: 3002a06806c5a7b7 +Block 0022 [ 88]: 0ced9647463145f0 +Block 0022 [ 89]: f7103a918f8fc100 +Block 0022 [ 90]: c4533d7cc476b9fc +Block 0022 [ 91]: 100e0006dd1153e5 +Block 0022 [ 92]: 6a811c609480f8f1 +Block 0022 [ 93]: 510c39c9cd86173e +Block 0022 [ 94]: 2246697bda28e904 +Block 0022 [ 95]: d868a2e13c102004 +Block 0022 [ 96]: 6034a466933b698e +Block 0022 [ 97]: 8fc5e7a66acb11df +Block 0022 [ 98]: 2910e9f3ee967fef +Block 0022 [ 99]: 001b92fb7e89022f +Block 0022 [100]: ca87fa7b53499719 +Block 0022 [101]: 0154d784444d9cbd +Block 0022 [102]: 1bfa559512ce29d4 +Block 0022 [103]: 1e1d40d77e9b399e +Block 0022 [104]: f88aae2191055b90 +Block 0022 [105]: 504de7f12bff97d5 +Block 0022 [106]: ab03a38e37df0236 +Block 0022 [107]: 46bc61f156525399 +Block 0022 [108]: 5a36598201775ada +Block 0022 [109]: ef27216b243ec78b +Block 0022 [110]: c2013097bf9ec3cf +Block 0022 [111]: fde08a7d93d60ceb +Block 0022 [112]: 0080c53706f954e4 +Block 0022 [113]: b4588d78793f9818 +Block 0022 [114]: 1662c3cb14cabdf2 +Block 0022 [115]: b0c52775f338135a +Block 0022 [116]: d80afb191b9680cb +Block 0022 [117]: 01517fed70270cba +Block 0022 [118]: 7278e7ac5099dcb0 +Block 0022 [119]: 18b2779f192c0034 +Block 0022 [120]: d12a9b462f01e32e +Block 0022 [121]: 728c46acedd7f19c +Block 0022 [122]: a05306d6b31b2833 +Block 0022 [123]: d331c8c206fa1146 +Block 0022 [124]: 04605c92d2bfcc35 +Block 0022 [125]: ef83c4117b4716d2 +Block 0022 [126]: f612d22f4c162415 +Block 0022 [127]: 4a95bc5ff1436d26 +Block 0023 [ 0]: 1c27f28962d9a429 +Block 0023 [ 1]: ce6c0454be7f138d +Block 0023 [ 2]: fa0537b5173deb1e +Block 0023 [ 3]: c81af57b4e80e20a +Block 0023 [ 4]: e9c46fbaafffbd2d +Block 0023 [ 5]: 0cc31492e65580b5 +Block 0023 [ 6]: 2d51c8f8079dc721 +Block 0023 [ 7]: 74bb329130090ca2 +Block 0023 [ 8]: ef4e6d8e93662b43 +Block 0023 [ 9]: 283af41e7ee42300 +Block 0023 [ 10]: 743f3e00e4c57e0b +Block 0023 [ 11]: 8136ce7b15199709 +Block 0023 [ 12]: 047c5f46fbfc2269 +Block 0023 [ 13]: 02a5b806ee4bf5a2 +Block 0023 [ 14]: 09d40c72fefc6003 +Block 0023 [ 15]: b4e2241710c816ae +Block 0023 [ 16]: 855c2cac8c80c773 +Block 0023 [ 17]: 00e22cc97a97a901 +Block 0023 [ 18]: ba6785d60b8b5829 +Block 0023 [ 19]: d0678d50aa3b6566 +Block 0023 [ 20]: b0a18530b287b9c4 +Block 0023 [ 21]: 1425826dfb827651 +Block 0023 [ 22]: 3d79c30454292023 +Block 0023 [ 23]: ed52ad874ea725cb +Block 0023 [ 24]: 2f558b4c56382176 +Block 0023 [ 25]: 6dfbbf532ea34f0e +Block 0023 [ 26]: 9d86b03d15bb15f7 +Block 0023 [ 27]: dc229f5621ef7476 +Block 0023 [ 28]: 7f3914d304294e74 +Block 0023 [ 29]: c0cb249d4790157e +Block 0023 [ 30]: 1b549da01f8a3df0 +Block 0023 [ 31]: ba62cf7efd468685 +Block 0023 [ 32]: f454b7eeaa12a6c9 +Block 0023 [ 33]: a91074d5378b8494 +Block 0023 [ 34]: 88bce18fb76b8c48 +Block 0023 [ 35]: cfc04ad4fe68543e +Block 0023 [ 36]: df2057be18d33517 +Block 0023 [ 37]: 13226baa4125c349 +Block 0023 [ 38]: ef72cb1c23da3691 +Block 0023 [ 39]: da5f4f3db8bd3806 +Block 0023 [ 40]: 359ecf2233bbdd88 +Block 0023 [ 41]: 2da0dce2855ec11f +Block 0023 [ 42]: 53923497e1825a07 +Block 0023 [ 43]: 315b7d8242ce8993 +Block 0023 [ 44]: e6c20a9f32744b30 +Block 0023 [ 45]: b8280f049700fad3 +Block 0023 [ 46]: 9f86dfc83e311396 +Block 0023 [ 47]: 3d5389c7505ed7bc +Block 0023 [ 48]: 92f5d210510ee9ac +Block 0023 [ 49]: 5946a782c5e82902 +Block 0023 [ 50]: c2d548fa66061623 +Block 0023 [ 51]: e7bad6532357494d +Block 0023 [ 52]: d321776f0276918c +Block 0023 [ 53]: bd456bc123259f0c +Block 0023 [ 54]: 54a21561cdf88a8c +Block 0023 [ 55]: 5e358a502537b2f7 +Block 0023 [ 56]: 99b132361d154089 +Block 0023 [ 57]: 84f703f283fe9a3d +Block 0023 [ 58]: 69eb4b5540c63b45 +Block 0023 [ 59]: 1ccbb5de665d2f72 +Block 0023 [ 60]: fcaf74364ac9f8f8 +Block 0023 [ 61]: 5a8d6fc4175344c8 +Block 0023 [ 62]: 429cf28518d1d6b1 +Block 0023 [ 63]: 12fda086ea0009d9 +Block 0023 [ 64]: 2ec00664a4b15dd8 +Block 0023 [ 65]: 140a9b9ef7dfc853 +Block 0023 [ 66]: eddb2f43f8549e7c +Block 0023 [ 67]: 5782bd1f045fd9d0 +Block 0023 [ 68]: b8c6d19545590a92 +Block 0023 [ 69]: 7d575aadcfc41096 +Block 0023 [ 70]: 2c670dc169fca4d4 +Block 0023 [ 71]: 969e7c181c013882 +Block 0023 [ 72]: 707699fae53be225 +Block 0023 [ 73]: 599817453061b3aa +Block 0023 [ 74]: de50b8984deb3024 +Block 0023 [ 75]: 6577cebcd06675c7 +Block 0023 [ 76]: bf27f2775367d22a +Block 0023 [ 77]: 128b7a09850d97c6 +Block 0023 [ 78]: 3f505f36eb4ffd30 +Block 0023 [ 79]: 60d9c8a881890405 +Block 0023 [ 80]: a7f7eb087c7fcde3 +Block 0023 [ 81]: 87e5ffb94b2ccd52 +Block 0023 [ 82]: a2b3896a1578b3d0 +Block 0023 [ 83]: c730dc0d5c857ae6 +Block 0023 [ 84]: b78c67dd4544d4dc +Block 0023 [ 85]: e85429d5ddd6af9d +Block 0023 [ 86]: 91f7ba9e9b8195df +Block 0023 [ 87]: 1d0aa5dcb28f18a0 +Block 0023 [ 88]: 0ba3b3eeb02a966d +Block 0023 [ 89]: 6c8ceaf6d8f05ed7 +Block 0023 [ 90]: 2c969fc5f825097b +Block 0023 [ 91]: 548be2850059ff36 +Block 0023 [ 92]: 0493917ec9802a30 +Block 0023 [ 93]: fc068b2212e7cac1 +Block 0023 [ 94]: 7cc3b76b0709e28a +Block 0023 [ 95]: 81dbc467d1c7ae3a +Block 0023 [ 96]: 682dafd7341f6c2b +Block 0023 [ 97]: f4b958705828befb +Block 0023 [ 98]: c33bfff261f156b1 +Block 0023 [ 99]: fe8c617a34065ba0 +Block 0023 [100]: 6a6450fdd5369973 +Block 0023 [101]: a9ec838e3d01cf5c +Block 0023 [102]: d3624f4619c4ed6b +Block 0023 [103]: 2e27333b8045636f +Block 0023 [104]: 4302af176e71aabb +Block 0023 [105]: 47a021cc276346df +Block 0023 [106]: acab4e93993f3d4c +Block 0023 [107]: 915fc7ff50fec218 +Block 0023 [108]: 38d6b82052587c54 +Block 0023 [109]: 1785046ff7d042fc +Block 0023 [110]: 377a9b13fc1b9ea5 +Block 0023 [111]: 7265d3d78a9c6b2a +Block 0023 [112]: 6ccc5f6b63b72992 +Block 0023 [113]: 3d955c8dbd4680e2 +Block 0023 [114]: 1958ed0640792519 +Block 0023 [115]: 96d15acd6268fac3 +Block 0023 [116]: fce9b335ff6813bf +Block 0023 [117]: 31944f568c7a6e61 +Block 0023 [118]: 62474e159b6a69d0 +Block 0023 [119]: ba17ccc3e51ad03a +Block 0023 [120]: 06a4820b0ac6731d +Block 0023 [121]: 12d6b8463c7ee240 +Block 0023 [122]: 21ad64133acd11e4 +Block 0023 [123]: 9626ab9a178836a0 +Block 0023 [124]: 26427719be3fe4d2 +Block 0023 [125]: 43c7d5348eb934ac +Block 0023 [126]: a37be69b3f09895c +Block 0023 [127]: da21d8760a0a86df +Block 0024 [ 0]: cf8f96856b27bef3 +Block 0024 [ 1]: 538374b5db2e53df +Block 0024 [ 2]: 77081bd0b0d9303c +Block 0024 [ 3]: 71ea9b2f87d82f65 +Block 0024 [ 4]: b84b47aafe046d8d +Block 0024 [ 5]: 32281e46cb82140b +Block 0024 [ 6]: d74a975383daa261 +Block 0024 [ 7]: eb8ddf6fef2eab2c +Block 0024 [ 8]: 85efa5cdd2797a28 +Block 0024 [ 9]: 8988c6d6537f20cf +Block 0024 [ 10]: afa3befc0a1d0bd3 +Block 0024 [ 11]: 68594b431cfa9b37 +Block 0024 [ 12]: 8b4e0694766c9879 +Block 0024 [ 13]: 194ae444c11e14ae +Block 0024 [ 14]: 41c1f537433d5b74 +Block 0024 [ 15]: 32d80469d8e340f1 +Block 0024 [ 16]: 9c95332fe3ede149 +Block 0024 [ 17]: ba7e3eb54c1902f2 +Block 0024 [ 18]: a95e5ac9d8efdafc +Block 0024 [ 19]: 764b2f25047d6bc7 +Block 0024 [ 20]: 89beee560f2d500e +Block 0024 [ 21]: 17c78d78930ad71b +Block 0024 [ 22]: 703ee2ce41a0897d +Block 0024 [ 23]: 410353a71ad59e8b +Block 0024 [ 24]: ce133957feae7ab6 +Block 0024 [ 25]: ed83c399c42aba92 +Block 0024 [ 26]: ad9f3f30874f6cb1 +Block 0024 [ 27]: 353a7816060b52f3 +Block 0024 [ 28]: 55d24c9cd5567345 +Block 0024 [ 29]: 9576e73cb0f9cd57 +Block 0024 [ 30]: 3e4a93744b472b59 +Block 0024 [ 31]: 094a77da6bcb9b8f +Block 0024 [ 32]: 21cc11ecbc0347c7 +Block 0024 [ 33]: 858eab66e89d80a3 +Block 0024 [ 34]: a373da912a23fff5 +Block 0024 [ 35]: 6d01a0e582a1eb6a +Block 0024 [ 36]: cef03bd93495ff85 +Block 0024 [ 37]: 71f0d1a6b596741d +Block 0024 [ 38]: eb089e9710cf726d +Block 0024 [ 39]: f4ad37046aee8555 +Block 0024 [ 40]: 51a415a98700ba18 +Block 0024 [ 41]: 7492605ee6b50bf5 +Block 0024 [ 42]: e9d0aa6cf26ef7dc +Block 0024 [ 43]: fae3257644711601 +Block 0024 [ 44]: ef4ea37a228d87ab +Block 0024 [ 45]: 8cb0e52f96ad89c8 +Block 0024 [ 46]: 3a9beaac8a7c6673 +Block 0024 [ 47]: 2b8b083eaf9e5bea +Block 0024 [ 48]: b7017c5a9b985cc8 +Block 0024 [ 49]: ac45b63f5c03446e +Block 0024 [ 50]: 603871e8fa7c1798 +Block 0024 [ 51]: 95108dd25de5bf40 +Block 0024 [ 52]: 1b39f2a620715e4b +Block 0024 [ 53]: e7f278a6c8d5ef0a +Block 0024 [ 54]: 4522cbafa997ee91 +Block 0024 [ 55]: c5c456681b67ba2f +Block 0024 [ 56]: a5738a9048687c75 +Block 0024 [ 57]: 26f555b171320f58 +Block 0024 [ 58]: a37fae3c988a9d41 +Block 0024 [ 59]: 5070dedba406729b +Block 0024 [ 60]: 27b120850e97e811 +Block 0024 [ 61]: ca12b508cf982bd3 +Block 0024 [ 62]: d8f86605ff5ad305 +Block 0024 [ 63]: 27fff09a65e13879 +Block 0024 [ 64]: 80302fa5d0884bd4 +Block 0024 [ 65]: 218a5d3bc896af5f +Block 0024 [ 66]: 0782c41608278c7a +Block 0024 [ 67]: f06173fdf5887776 +Block 0024 [ 68]: 3f413e52c28415fc +Block 0024 [ 69]: 6ed1d893f9aee791 +Block 0024 [ 70]: 4a4438fdc957d30c +Block 0024 [ 71]: 048018874b319afa +Block 0024 [ 72]: f8b978784278cb81 +Block 0024 [ 73]: 195c322da4ada50a +Block 0024 [ 74]: f1f4fa13504e30ab +Block 0024 [ 75]: 0b5f3914ca1e9f56 +Block 0024 [ 76]: 43ccdf096c495bca +Block 0024 [ 77]: 147f901fdd3f63d6 +Block 0024 [ 78]: 641a252f4db1fb6a +Block 0024 [ 79]: 2af292c339ad3501 +Block 0024 [ 80]: b42ca580e00a0cfa +Block 0024 [ 81]: d2a6f637d9ff9533 +Block 0024 [ 82]: dd7000216156156a +Block 0024 [ 83]: bd4efc849861550a +Block 0024 [ 84]: 8cde35a8e7597756 +Block 0024 [ 85]: a2beeb20448d9965 +Block 0024 [ 86]: b29f413d5ce01443 +Block 0024 [ 87]: 53a07a46cf956d2f +Block 0024 [ 88]: 843f107c4755d038 +Block 0024 [ 89]: 270ce395f4d98ba0 +Block 0024 [ 90]: 16936e6d71963d18 +Block 0024 [ 91]: d1cfb0e9575879e3 +Block 0024 [ 92]: e430bc6bccf2553b +Block 0024 [ 93]: 6ca082f5aa5d3883 +Block 0024 [ 94]: 2fd0d4cabae6c843 +Block 0024 [ 95]: 062e2b70c3ac9f47 +Block 0024 [ 96]: 9e08deeeffdcfd2c +Block 0024 [ 97]: e0aea6ad8b918f2d +Block 0024 [ 98]: b5a3ae6b8fb101a5 +Block 0024 [ 99]: e4d6ce06de13dbda +Block 0024 [100]: e47bd4c9d5920c29 +Block 0024 [101]: 2ad1bf91ee2b946e +Block 0024 [102]: 1c7af48ddd4ab92f +Block 0024 [103]: 49d9829c93509027 +Block 0024 [104]: 7e16b2f4434eaf60 +Block 0024 [105]: 3b5fce28515d3e55 +Block 0024 [106]: ee5184f0bd0bc316 +Block 0024 [107]: 34f3fefa21929e75 +Block 0024 [108]: 29d7be32d5d1308f +Block 0024 [109]: 1af91678babbf821 +Block 0024 [110]: 4735c7e9971b1e95 +Block 0024 [111]: 6f5bdec6c62d2cf6 +Block 0024 [112]: 7b57d917f7916d98 +Block 0024 [113]: 4c305d9e6fe35298 +Block 0024 [114]: d078638df882056f +Block 0024 [115]: 3b319b154d4fa0d0 +Block 0024 [116]: 06900db2cbfe81c1 +Block 0024 [117]: 06673712431a59ae +Block 0024 [118]: 60f0a1274bae4374 +Block 0024 [119]: afcfbb81ba9212f6 +Block 0024 [120]: 6ecac6530deab23f +Block 0024 [121]: 69ae57c629abb352 +Block 0024 [122]: 266f0dabe5af7624 +Block 0024 [123]: 33eed4df71113084 +Block 0024 [124]: c6f13e96d5f6112d +Block 0024 [125]: 02efdc43c4e48b02 +Block 0024 [126]: 42283c13cdbfcd2c +Block 0024 [127]: 0436a1af463de562 +Block 0025 [ 0]: 5b9abfa7feb2a37c +Block 0025 [ 1]: 5d485f04bba0a1f8 +Block 0025 [ 2]: 46765ebb62cc41c3 +Block 0025 [ 3]: 557b8cfa9bd9e7df +Block 0025 [ 4]: 0e7716504d681b97 +Block 0025 [ 5]: 0b6bcf29374a050f +Block 0025 [ 6]: e98f9633d70cb263 +Block 0025 [ 7]: 800a0bb3298debd0 +Block 0025 [ 8]: d9f3f7cbabf9771c +Block 0025 [ 9]: 132e4129d1daffd1 +Block 0025 [ 10]: 39489c7cc8c2a06b +Block 0025 [ 11]: 9c2fdc9cda85c204 +Block 0025 [ 12]: 73a42d407e3a97bf +Block 0025 [ 13]: 59997a9a9ccd5086 +Block 0025 [ 14]: 475f0aa67e8087d5 +Block 0025 [ 15]: bdaee394ba5cf10a +Block 0025 [ 16]: ea729a7408010680 +Block 0025 [ 17]: 56a1679ad9ad4ebe +Block 0025 [ 18]: 1cc56e01ad0b38c4 +Block 0025 [ 19]: d46ece129d9a289a +Block 0025 [ 20]: 1390f7ce5344e77e +Block 0025 [ 21]: 8f781e2c5ab8fe80 +Block 0025 [ 22]: 997e9d8fd86ed661 +Block 0025 [ 23]: c6e26d91f5e89382 +Block 0025 [ 24]: 81ae4d5b3b765fa8 +Block 0025 [ 25]: 264e78c06f79d41e +Block 0025 [ 26]: 19e2b6aebb075733 +Block 0025 [ 27]: 4acc50b54032408a +Block 0025 [ 28]: 5ac7f30e4aaae5f4 +Block 0025 [ 29]: 0397e9e0f5d6e6ad +Block 0025 [ 30]: 0e711ba1239e83a4 +Block 0025 [ 31]: 0895d50a8ec9f19a +Block 0025 [ 32]: 3af5724f6e6c1e8d +Block 0025 [ 33]: 5af8c0606a4dc339 +Block 0025 [ 34]: 8096410d4630434c +Block 0025 [ 35]: 5cfdd78aa4075d16 +Block 0025 [ 36]: 2154a4ecd25dc45c +Block 0025 [ 37]: f0bb154e287e08e9 +Block 0025 [ 38]: 114f2bed186ce33e +Block 0025 [ 39]: 6d9c780293d2cd4c +Block 0025 [ 40]: 23612d45f0d156c9 +Block 0025 [ 41]: fa5e7e052ae2ba8e +Block 0025 [ 42]: 9eb8416e705b3c2c +Block 0025 [ 43]: ba6586685b87bd09 +Block 0025 [ 44]: 361a1cca5d78684f +Block 0025 [ 45]: f045f145f1047ecd +Block 0025 [ 46]: b66a58c8db976ddc +Block 0025 [ 47]: 1ff9eabf3e99d098 +Block 0025 [ 48]: bf57a4d81e63a4e5 +Block 0025 [ 49]: e9ba5c410ed8eeca +Block 0025 [ 50]: c2d46dbc68733832 +Block 0025 [ 51]: 5efc7dcb9b5bfe6d +Block 0025 [ 52]: 4154c8d811ee1e5a +Block 0025 [ 53]: b4cc77c95c0185c8 +Block 0025 [ 54]: 3d6ee2f21788c74a +Block 0025 [ 55]: 27588eb02b04eb8e +Block 0025 [ 56]: 28fb9544bf40218d +Block 0025 [ 57]: ca084c249c06f53d +Block 0025 [ 58]: d60b3b0c9ad45f54 +Block 0025 [ 59]: 65af42b7955016c8 +Block 0025 [ 60]: ddcff7cb451a8a7a +Block 0025 [ 61]: 399126720a6c58fb +Block 0025 [ 62]: cb9ca1ce53e78936 +Block 0025 [ 63]: 93a027cf494dd4d0 +Block 0025 [ 64]: 35ed9cd12a3a26eb +Block 0025 [ 65]: 4290e096ff8d8e24 +Block 0025 [ 66]: 45321339efcabf66 +Block 0025 [ 67]: a7721e8468b60e4c +Block 0025 [ 68]: 7cbc7aa27492601a +Block 0025 [ 69]: e1f50ea06a229f6c +Block 0025 [ 70]: 5691f85c4f126e26 +Block 0025 [ 71]: 874a48f6977c98b0 +Block 0025 [ 72]: 202b5f82a5b84018 +Block 0025 [ 73]: 7b32c5128fecb612 +Block 0025 [ 74]: a37ea9f179c0d7a0 +Block 0025 [ 75]: 327b8fc50cce958b +Block 0025 [ 76]: a8e2a1258fb1da80 +Block 0025 [ 77]: f80691238a1eef40 +Block 0025 [ 78]: 6c182b612af57ece +Block 0025 [ 79]: 178e573cc0d200e5 +Block 0025 [ 80]: bb8b504ceae9afe2 +Block 0025 [ 81]: 3c59e39992ae4a3c +Block 0025 [ 82]: 22b54658fd492202 +Block 0025 [ 83]: 52aea26785cac12b +Block 0025 [ 84]: 7c29b08458b0e3c3 +Block 0025 [ 85]: fd88eab7d627a17c +Block 0025 [ 86]: 37f909c6bd36b704 +Block 0025 [ 87]: 9f52cb379a083d4c +Block 0025 [ 88]: caee6a1fcad15eb9 +Block 0025 [ 89]: f7fd9d1a6b2bb28a +Block 0025 [ 90]: 304f7769dd3975f1 +Block 0025 [ 91]: 212c30fd3d98e27a +Block 0025 [ 92]: fef3d2bf4c3f7d45 +Block 0025 [ 93]: 2f0beb68030bb52e +Block 0025 [ 94]: ea352eb79030ef21 +Block 0025 [ 95]: 8d79331061c22ba6 +Block 0025 [ 96]: 770e83d3e6b823b1 +Block 0025 [ 97]: 89a9ec7c4487297f +Block 0025 [ 98]: 8dbcad4c4e11be67 +Block 0025 [ 99]: 8b7d38ef5fec1601 +Block 0025 [100]: e93c587d6bf2cbf9 +Block 0025 [101]: a53137a33d258830 +Block 0025 [102]: 7a0d11ca5acf1788 +Block 0025 [103]: b3dbaa7d7ecebd4d +Block 0025 [104]: d882e019de21daf8 +Block 0025 [105]: 45d2cdf54ca6be9a +Block 0025 [106]: 33d36d64d12442b6 +Block 0025 [107]: 8fc0b56aa86049d0 +Block 0025 [108]: 0b3fd87ac5ed9c10 +Block 0025 [109]: f3865aaea80fc664 +Block 0025 [110]: 5c85cbd5e3bbfcac +Block 0025 [111]: a2cc7235f21769e3 +Block 0025 [112]: 5ec5ce43bf29dd82 +Block 0025 [113]: de410519cd682004 +Block 0025 [114]: 3267444c60d75f3f +Block 0025 [115]: acd6ba02e82c6225 +Block 0025 [116]: 0322e9d6a5053284 +Block 0025 [117]: 4df45251e620c948 +Block 0025 [118]: adccf0d3de3bea09 +Block 0025 [119]: cb5bca189109f1ca +Block 0025 [120]: af2f65bee48c15b5 +Block 0025 [121]: 52989089263dd3d8 +Block 0025 [122]: 793c1f6d08cbe93f +Block 0025 [123]: d990a75b2ad2ff08 +Block 0025 [124]: 24e34bd7efd6d0d0 +Block 0025 [125]: c31b33bd91bcd47a +Block 0025 [126]: 34b1e70c5d8a133e +Block 0025 [127]: dd9b5f4b960c1c19 +Block 0026 [ 0]: dee9b2aa87871f5c +Block 0026 [ 1]: dd29e85f6d4b3046 +Block 0026 [ 2]: 983313f6040a4701 +Block 0026 [ 3]: 60e421701b903eb5 +Block 0026 [ 4]: aa1760fc7944b723 +Block 0026 [ 5]: 5e9cfdd75c022ec3 +Block 0026 [ 6]: 2344dd4599365deb +Block 0026 [ 7]: 46bcf69ff591ace9 +Block 0026 [ 8]: 67e126c5dffc41b8 +Block 0026 [ 9]: 6d03149e72cd6ad2 +Block 0026 [ 10]: ffd3ebb4669f8fb5 +Block 0026 [ 11]: 4f1f99d9f00858c8 +Block 0026 [ 12]: d188674d4f5880d3 +Block 0026 [ 13]: 4a9ed6f5c0f1136c +Block 0026 [ 14]: 293fac32e9fe652f +Block 0026 [ 15]: ca87659e3a8cb9f2 +Block 0026 [ 16]: 37f8096aae66b859 +Block 0026 [ 17]: 88efabca999b09d5 +Block 0026 [ 18]: f531a630ca5aea1f +Block 0026 [ 19]: c8d98dbee1b05b62 +Block 0026 [ 20]: 12296953234eed5f +Block 0026 [ 21]: 9d339201956f944d +Block 0026 [ 22]: eeda4cdc2976f262 +Block 0026 [ 23]: ba41e3628c946c9f +Block 0026 [ 24]: 1216bb9dce7018b2 +Block 0026 [ 25]: 1b261d6a529167cd +Block 0026 [ 26]: 4125bad6e4a3384d +Block 0026 [ 27]: db476851fa256b4a +Block 0026 [ 28]: b2fc7dc141cadae7 +Block 0026 [ 29]: c5eb5cb966d9dad9 +Block 0026 [ 30]: 3393e3a31b11a880 +Block 0026 [ 31]: ac872ec83d51cd5f +Block 0026 [ 32]: 29c51b4bd0274682 +Block 0026 [ 33]: c6c83089cb723994 +Block 0026 [ 34]: 1b0d4fe0d6e9f14b +Block 0026 [ 35]: 3cdce9f955907277 +Block 0026 [ 36]: 875c09bda8862c96 +Block 0026 [ 37]: 1d4e56b54e562742 +Block 0026 [ 38]: 12d9c0e0ac84c079 +Block 0026 [ 39]: ae01999edf7225b0 +Block 0026 [ 40]: 0e20472caed467fe +Block 0026 [ 41]: 6e487ddc7ea710e7 +Block 0026 [ 42]: a280d9ea0a29224c +Block 0026 [ 43]: 98126e05f1ce5ad4 +Block 0026 [ 44]: 9eb6223f8a3d336c +Block 0026 [ 45]: 60cec3a9a070e8e0 +Block 0026 [ 46]: 017adf6fe630672e +Block 0026 [ 47]: 3b7a7736523bc3bc +Block 0026 [ 48]: 9d5fb41cbf6adb09 +Block 0026 [ 49]: 48600b688c8c577e +Block 0026 [ 50]: 1051ce0ea3a4cfbc +Block 0026 [ 51]: a50896f93ece5cd0 +Block 0026 [ 52]: 4ff442fe3230ad8b +Block 0026 [ 53]: 604ceece7911b994 +Block 0026 [ 54]: 6541af944a04d111 +Block 0026 [ 55]: 8e987b86a8afdddd +Block 0026 [ 56]: ccac943c5646f2a4 +Block 0026 [ 57]: 86b5be6691aa654c +Block 0026 [ 58]: 412c474818edcb3b +Block 0026 [ 59]: 4b49534018da9114 +Block 0026 [ 60]: 9340dfc1b986dfa3 +Block 0026 [ 61]: dc0730e95c51f794 +Block 0026 [ 62]: f169981fadfc5549 +Block 0026 [ 63]: c71a8ee88ffef06c +Block 0026 [ 64]: eef8c797696883bd +Block 0026 [ 65]: 3dd92ac77d49f446 +Block 0026 [ 66]: 496d5985927355d0 +Block 0026 [ 67]: 5284e7cb68c2ca1b +Block 0026 [ 68]: 3c9719c5303b55fc +Block 0026 [ 69]: e3fb82f8ad2e8391 +Block 0026 [ 70]: d30b1110f61916d3 +Block 0026 [ 71]: 32512588b786c1fb +Block 0026 [ 72]: e010bdf498d961c9 +Block 0026 [ 73]: 074b5eb7e84d6ca2 +Block 0026 [ 74]: 44f8b7e9a934e38f +Block 0026 [ 75]: dde33fd942e913eb +Block 0026 [ 76]: f28b6b5e26433af4 +Block 0026 [ 77]: 8bbe1f779ca8dd98 +Block 0026 [ 78]: a804df4bb4ec3dd8 +Block 0026 [ 79]: daa6d81df64040fe +Block 0026 [ 80]: 842e1580985fd685 +Block 0026 [ 81]: 3c81fdf208936747 +Block 0026 [ 82]: 2f66d5edb35d9b3e +Block 0026 [ 83]: f0237f2a4fc163db +Block 0026 [ 84]: f019ee576d7661c2 +Block 0026 [ 85]: 0f7c9a4b83b83b05 +Block 0026 [ 86]: 5d6298890f9310f6 +Block 0026 [ 87]: 0ede0453519b1eda +Block 0026 [ 88]: 13af8affb04a2663 +Block 0026 [ 89]: 80872076367bfc81 +Block 0026 [ 90]: 2ea2f0780da7f2be +Block 0026 [ 91]: a99f73ce6a2a05c4 +Block 0026 [ 92]: b80dc9d2a2600dca +Block 0026 [ 93]: d4b9bc8454ffab5b +Block 0026 [ 94]: d200e46e43f879a9 +Block 0026 [ 95]: 537c6054435cb95c +Block 0026 [ 96]: 01b1a480310f40f5 +Block 0026 [ 97]: c05eec0798009539 +Block 0026 [ 98]: 47d145ed55765f11 +Block 0026 [ 99]: bc359cf5298fb1fb +Block 0026 [100]: 7a4fc2282e858a1e +Block 0026 [101]: 922e6d1261fe72a1 +Block 0026 [102]: 9233e06069f676ae +Block 0026 [103]: 28fd56cf04f236e6 +Block 0026 [104]: 2af5cbbab60a6994 +Block 0026 [105]: 8a035717c193c0e1 +Block 0026 [106]: be4d991be04daf58 +Block 0026 [107]: d62d6c8670910ca6 +Block 0026 [108]: ac8f20c64229cf79 +Block 0026 [109]: a0be7a6a741cb355 +Block 0026 [110]: 23a995532d6388a1 +Block 0026 [111]: b1538a43a24cd9f4 +Block 0026 [112]: e77500799ebece8d +Block 0026 [113]: ca127140631ad537 +Block 0026 [114]: 60a4f9f085cc5132 +Block 0026 [115]: 8e8bed70b3926177 +Block 0026 [116]: 208e7b4eb75dfb2e +Block 0026 [117]: 3b8f8ba0e8efffc7 +Block 0026 [118]: 8f18cb6e7a8d0f29 +Block 0026 [119]: 8f37d725599de412 +Block 0026 [120]: e14a83c050008162 +Block 0026 [121]: d2d6e966cbf9611a +Block 0026 [122]: ba9a2378c5dac511 +Block 0026 [123]: ba716dabf5ccd414 +Block 0026 [124]: 877f060b5aed5b8a +Block 0026 [125]: ad9db071b4cbcb75 +Block 0026 [126]: cab1f62b8803c369 +Block 0026 [127]: f050f7dbe5e6fd66 +Block 0027 [ 0]: 6cee4b9d191832e4 +Block 0027 [ 1]: a9ed71c242860d65 +Block 0027 [ 2]: 9d57bd98dc8c821a +Block 0027 [ 3]: 059bde7efdbfd8c1 +Block 0027 [ 4]: 269e8e1f20a45148 +Block 0027 [ 5]: 151e005fb247eb07 +Block 0027 [ 6]: d50170ee221d6e0e +Block 0027 [ 7]: 2c15fd72d852f3f9 +Block 0027 [ 8]: a170b2c99c039fbb +Block 0027 [ 9]: bb540d6fe2f80c7b +Block 0027 [ 10]: 26be1fccf08e833b +Block 0027 [ 11]: bec687afce3a11b5 +Block 0027 [ 12]: 49fbc628b10960c1 +Block 0027 [ 13]: 9ed97c1da2275ef6 +Block 0027 [ 14]: 67023b2e3ed8d148 +Block 0027 [ 15]: 6aaaff9a46cf4044 +Block 0027 [ 16]: ef946e6176c9df2d +Block 0027 [ 17]: 1924ca3e69fe39f1 +Block 0027 [ 18]: 3ab1dfab6b50980c +Block 0027 [ 19]: b70e0bc7440fc385 +Block 0027 [ 20]: fecdf018f791586e +Block 0027 [ 21]: 1236618a4c2e1d64 +Block 0027 [ 22]: aadc58b1c7562781 +Block 0027 [ 23]: 74394ced4218af4d +Block 0027 [ 24]: 1aef33449aa870fa +Block 0027 [ 25]: 20effaa9d742e0b6 +Block 0027 [ 26]: 2eac80dba70985a0 +Block 0027 [ 27]: a398c86bf53fc422 +Block 0027 [ 28]: b77b10e2168cc4d1 +Block 0027 [ 29]: fce8d4978068cf3d +Block 0027 [ 30]: 8bde6bd1a6bfb867 +Block 0027 [ 31]: 1a37ab91af293735 +Block 0027 [ 32]: ab2284a7ceced18a +Block 0027 [ 33]: 6d23a4a8dd5fcac2 +Block 0027 [ 34]: 01783511ff88040f +Block 0027 [ 35]: 0bfaa3cdd7629a5f +Block 0027 [ 36]: d1466859d1700abf +Block 0027 [ 37]: a323bfe6d5924ef6 +Block 0027 [ 38]: b0630ada9d4fa447 +Block 0027 [ 39]: 07621e3b349c5909 +Block 0027 [ 40]: fff27196da746f6e +Block 0027 [ 41]: ea43e184f8a6532e +Block 0027 [ 42]: 1998186d499f4e18 +Block 0027 [ 43]: 402e532b78357606 +Block 0027 [ 44]: e0a649a10d61d091 +Block 0027 [ 45]: 1eaf8a6209b93c4f +Block 0027 [ 46]: e1010b48889983a3 +Block 0027 [ 47]: 25655970b2a8d6de +Block 0027 [ 48]: 00a51d8b8c8e84e4 +Block 0027 [ 49]: 4f5db1b5e6dc5525 +Block 0027 [ 50]: fcc650fae81b515f +Block 0027 [ 51]: 0f676bb6cf68c300 +Block 0027 [ 52]: 860a1250580ae58d +Block 0027 [ 53]: eeef9111751458da +Block 0027 [ 54]: a789af0aaa552763 +Block 0027 [ 55]: ce24c29680c629d8 +Block 0027 [ 56]: 34ed0a8ee22bf010 +Block 0027 [ 57]: 3b0a4c70c76ffa93 +Block 0027 [ 58]: e9772cfe2b1b4614 +Block 0027 [ 59]: 0e0497ca49fd7322 +Block 0027 [ 60]: 85d0a7c5fdf74b8d +Block 0027 [ 61]: cd3891e2f2e49aa0 +Block 0027 [ 62]: 230c209081749b87 +Block 0027 [ 63]: 7295114e617d5b51 +Block 0027 [ 64]: 83d5c5fc1bfc5c22 +Block 0027 [ 65]: 2b9a2dfe113c5c95 +Block 0027 [ 66]: f388a2a9b91c3ed0 +Block 0027 [ 67]: ec61a56fc4028a0a +Block 0027 [ 68]: 7f32595cfd7865a8 +Block 0027 [ 69]: 85b7093f80093890 +Block 0027 [ 70]: 0b4d7bda002ad0de +Block 0027 [ 71]: 5b2b1bf027012ab1 +Block 0027 [ 72]: 9325569531e2db66 +Block 0027 [ 73]: 6c1ff4360235586d +Block 0027 [ 74]: d8ba96751d53a852 +Block 0027 [ 75]: 83410fdb0a21173a +Block 0027 [ 76]: 790fb01da6186465 +Block 0027 [ 77]: 7d3904d42d029f49 +Block 0027 [ 78]: c4ce0b7f94be6679 +Block 0027 [ 79]: c612310f9131c614 +Block 0027 [ 80]: d61e9b1f7a785d1f +Block 0027 [ 81]: f185e40a8bd95c05 +Block 0027 [ 82]: 4b6fb8883a1666e1 +Block 0027 [ 83]: ab03fcd9e323c69f +Block 0027 [ 84]: 42de84498a783ae8 +Block 0027 [ 85]: 7d16a844e4d8dcc9 +Block 0027 [ 86]: e81580d22a7bb2c1 +Block 0027 [ 87]: 7ed219f3a8c679b9 +Block 0027 [ 88]: 68f7c86d984e6784 +Block 0027 [ 89]: 7d123922ed59bbb9 +Block 0027 [ 90]: b45c03de2d713b60 +Block 0027 [ 91]: 99788dd95bc08ca7 +Block 0027 [ 92]: 09139929de450f31 +Block 0027 [ 93]: e76251a2f16af5f7 +Block 0027 [ 94]: f7087f98b0f45cad +Block 0027 [ 95]: 9d0dbd832c11fed4 +Block 0027 [ 96]: 49cfad882ed6c191 +Block 0027 [ 97]: 6aeb515660237856 +Block 0027 [ 98]: 02c5740c70202deb +Block 0027 [ 99]: 577d95f21e2e3bbf +Block 0027 [100]: c03e5473a2080989 +Block 0027 [101]: c262c10f462a8bc2 +Block 0027 [102]: 6fa94f1eacda3c70 +Block 0027 [103]: 45faae378c209581 +Block 0027 [104]: c7c7058e5f11b1b7 +Block 0027 [105]: 575cf1e4b381d95d +Block 0027 [106]: f5f663d9108800d4 +Block 0027 [107]: cb1fb7f209fd05d5 +Block 0027 [108]: 4841189501751a1b +Block 0027 [109]: 39a866af5fe517d2 +Block 0027 [110]: f9bbd9eec0fc0977 +Block 0027 [111]: 084fde551a81270d +Block 0027 [112]: 96923f1be57c5de3 +Block 0027 [113]: 808364e601919381 +Block 0027 [114]: 87bd3c59be533277 +Block 0027 [115]: 4e8f81a1886691f8 +Block 0027 [116]: 37e1a86f4b0f6f29 +Block 0027 [117]: 2bcd52d24d0d5585 +Block 0027 [118]: e583d419264bac50 +Block 0027 [119]: ba04b34eaa228f04 +Block 0027 [120]: 734b7b7ed2514509 +Block 0027 [121]: 8d48fa46cdf4380a +Block 0027 [122]: 07755610226a02a9 +Block 0027 [123]: d982c0b08c29f64a +Block 0027 [124]: 0213185434795e00 +Block 0027 [125]: 3f91b4136d9ab75e +Block 0027 [126]: 75a3cccc78dc560d +Block 0027 [127]: ca7664e9950ea00b +Block 0028 [ 0]: 021ba1bcdde6ad58 +Block 0028 [ 1]: 05754433d559cc24 +Block 0028 [ 2]: 13d1a128aa990eef +Block 0028 [ 3]: 1c5ba0f62141a511 +Block 0028 [ 4]: 8af1f026e263b7ab +Block 0028 [ 5]: e78a7881940a6c49 +Block 0028 [ 6]: cac7b0b9c260d131 +Block 0028 [ 7]: ce6a8fb8aa5ea347 +Block 0028 [ 8]: 244f1b3865d09688 +Block 0028 [ 9]: aa0a003891c3bfd7 +Block 0028 [ 10]: 3fe713094ec02d02 +Block 0028 [ 11]: ea6b606d3bce5251 +Block 0028 [ 12]: 9d66dfa678ded00a +Block 0028 [ 13]: c40de07bdf0185b6 +Block 0028 [ 14]: a3c77fc2f3c0fbb6 +Block 0028 [ 15]: 946bb60ad124c187 +Block 0028 [ 16]: c167a3e4cc7cfa26 +Block 0028 [ 17]: 54bc0c1e2d674273 +Block 0028 [ 18]: 105fc327f7e8ee3d +Block 0028 [ 19]: 16f039b56fc0a5a7 +Block 0028 [ 20]: a37bb14db8a46a9a +Block 0028 [ 21]: 48a54dec7fc69d51 +Block 0028 [ 22]: 9bce116e5facd867 +Block 0028 [ 23]: eb04c9f0019a2662 +Block 0028 [ 24]: b04eb3fd473a5d7b +Block 0028 [ 25]: 94b871a19cd1649a +Block 0028 [ 26]: 9ed5121361ce3387 +Block 0028 [ 27]: 6a1d11715db6979f +Block 0028 [ 28]: 59e15eddeb67ab7a +Block 0028 [ 29]: 839ccd2cb4c3318c +Block 0028 [ 30]: 7024ee61e96cee9f +Block 0028 [ 31]: 311c0401c64c981c +Block 0028 [ 32]: 65fc4884b80591cd +Block 0028 [ 33]: 3108e4165add79c1 +Block 0028 [ 34]: 0a3d0907c7ec23d5 +Block 0028 [ 35]: 94a38dd3f4ee55ab +Block 0028 [ 36]: 72faac9eabdaecca +Block 0028 [ 37]: 7a82e8dce2ea29f8 +Block 0028 [ 38]: 13c99f27feba2587 +Block 0028 [ 39]: 65c726d1264eb57c +Block 0028 [ 40]: 3f8c0497ad70ada4 +Block 0028 [ 41]: 0298113f4159a8ab +Block 0028 [ 42]: 458c01cb8c3ea337 +Block 0028 [ 43]: 1cf949c1a75e5e92 +Block 0028 [ 44]: 1e7253bebed45d79 +Block 0028 [ 45]: d55a5ec3329d8193 +Block 0028 [ 46]: e519244e1d684c9c +Block 0028 [ 47]: 7a0fa26b4cdc9472 +Block 0028 [ 48]: b0bf49049bc0740d +Block 0028 [ 49]: 1a7fc20aabf75ef8 +Block 0028 [ 50]: 38e09ddc184047e0 +Block 0028 [ 51]: 8516c0eec030039b +Block 0028 [ 52]: 6f9ea72875456583 +Block 0028 [ 53]: 4f013974f9881a3c +Block 0028 [ 54]: d0e3b2abf57f9778 +Block 0028 [ 55]: 4e114931fa4f38e3 +Block 0028 [ 56]: aa2c1b90c2b84707 +Block 0028 [ 57]: 7cf9e1bec166fa3c +Block 0028 [ 58]: 1d14ff9ce7c7c685 +Block 0028 [ 59]: 9b88487090e17bf9 +Block 0028 [ 60]: 150c3ca35ccf0b87 +Block 0028 [ 61]: daac811c31be3821 +Block 0028 [ 62]: bcdd701f9e1b680f +Block 0028 [ 63]: 9efb7a1bade02efb +Block 0028 [ 64]: 965ec869ef55fa1f +Block 0028 [ 65]: bc5ebba00a595680 +Block 0028 [ 66]: d230a4dc0284e46b +Block 0028 [ 67]: 823fec805865fb74 +Block 0028 [ 68]: fed454a3199ac15d +Block 0028 [ 69]: 68bf5dcdfd59023a +Block 0028 [ 70]: 03fb3802c49c76d3 +Block 0028 [ 71]: 640356823d9e1f25 +Block 0028 [ 72]: 9af81ea04ffae2d6 +Block 0028 [ 73]: dfe109e2b7d0bf40 +Block 0028 [ 74]: 66fc8c0daf88a898 +Block 0028 [ 75]: c75315d22fe1aa30 +Block 0028 [ 76]: f0caf3aea9d40a17 +Block 0028 [ 77]: afdbdabb57ab2819 +Block 0028 [ 78]: 174e7c9c1c84c955 +Block 0028 [ 79]: b6a536c200abab95 +Block 0028 [ 80]: d613e8709aa02577 +Block 0028 [ 81]: 39241a2e6f32c0af +Block 0028 [ 82]: 2f5332d5bf68ae62 +Block 0028 [ 83]: 92c842d69e754894 +Block 0028 [ 84]: dcb13e9f3e408523 +Block 0028 [ 85]: b3d1ecfdc8704dd6 +Block 0028 [ 86]: aaee559c5be890d6 +Block 0028 [ 87]: 393b7f63de100e35 +Block 0028 [ 88]: 322cf47045b22301 +Block 0028 [ 89]: 19ff6b2aa2ac9277 +Block 0028 [ 90]: dce7764521ba0a7b +Block 0028 [ 91]: ec055028f6e83fb8 +Block 0028 [ 92]: f2f20eeb21b515e9 +Block 0028 [ 93]: b9fd8d709f86f77e +Block 0028 [ 94]: f87e5b1d24d6bec3 +Block 0028 [ 95]: 5545693938b9b1b0 +Block 0028 [ 96]: d79b6740a34e5f86 +Block 0028 [ 97]: 1019c5dbba476ad9 +Block 0028 [ 98]: 9a55366e9030da6f +Block 0028 [ 99]: d43822683b3e8be4 +Block 0028 [100]: f966c8e1e7a36675 +Block 0028 [101]: fbf3966b8b80870d +Block 0028 [102]: 66d11762697d27b0 +Block 0028 [103]: 75969a1a3942deb2 +Block 0028 [104]: f28afc2f58cf33d6 +Block 0028 [105]: 55d35c2336ca57ee +Block 0028 [106]: 667d8b6d12f977e1 +Block 0028 [107]: 771b375bfff2802b +Block 0028 [108]: 21dc11f30d79569c +Block 0028 [109]: f02c16d785001d38 +Block 0028 [110]: aacb1ac75e686919 +Block 0028 [111]: 4ab85ab2b6c1835c +Block 0028 [112]: 049a59753bcfea7c +Block 0028 [113]: d8ec0bbcaff19bf1 +Block 0028 [114]: 555b8fb2fb3fc18a +Block 0028 [115]: 8c21368e54c09192 +Block 0028 [116]: f63dc13c28a441d3 +Block 0028 [117]: a9fe5883c3d89563 +Block 0028 [118]: 08d8ea5088dffb01 +Block 0028 [119]: dca841375d9b9868 +Block 0028 [120]: 667c3365686b7486 +Block 0028 [121]: 49bf1533c8b4064f +Block 0028 [122]: 602aea24f66274ea +Block 0028 [123]: bfc3de51f2c4d4c4 +Block 0028 [124]: ec8c6cdd1a00e16b +Block 0028 [125]: a9193f90093496b2 +Block 0028 [126]: 256c38224299ea19 +Block 0028 [127]: 57639a4bcfa0922e +Block 0029 [ 0]: bd80fcc7c493a4cc +Block 0029 [ 1]: c5023918f090ee9e +Block 0029 [ 2]: 120c321b4380db6a +Block 0029 [ 3]: af7830696eae7fca +Block 0029 [ 4]: eae34d49a4d64266 +Block 0029 [ 5]: 90ae58d5d4b35e0e +Block 0029 [ 6]: c7e27180eb24ab38 +Block 0029 [ 7]: 41a8a21726d95593 +Block 0029 [ 8]: aa48d5fffffa1bec +Block 0029 [ 9]: cd0a98894a346d20 +Block 0029 [ 10]: e9918f3944c6c57a +Block 0029 [ 11]: 0d51b503be8b7d3f +Block 0029 [ 12]: c01a39d6e5a816d3 +Block 0029 [ 13]: d98714fb42090c9a +Block 0029 [ 14]: 5b0f8b46c6552043 +Block 0029 [ 15]: f67ebb64f9c95c72 +Block 0029 [ 16]: 7a327ab56661672d +Block 0029 [ 17]: 014e44f8e1d6f4d0 +Block 0029 [ 18]: 22b0135ae6ce2169 +Block 0029 [ 19]: 5acb3fe8583bbbd4 +Block 0029 [ 20]: 8b77215be2ee636d +Block 0029 [ 21]: e1ceeab70e75a00b +Block 0029 [ 22]: 23bfe2afcc7274cb +Block 0029 [ 23]: e999907479ac7504 +Block 0029 [ 24]: 1a6263a273550a10 +Block 0029 [ 25]: 1d859d178a3556ee +Block 0029 [ 26]: d64aaa268bb5dfd5 +Block 0029 [ 27]: e5828d9d546d97cd +Block 0029 [ 28]: 6d1b4cd3c40591cc +Block 0029 [ 29]: 0661a62919dcf007 +Block 0029 [ 30]: fe81c4564cb304a9 +Block 0029 [ 31]: 79cf16a922a779bc +Block 0029 [ 32]: ff1c06acaca27742 +Block 0029 [ 33]: 23560b1205c5d4b1 +Block 0029 [ 34]: cecc64bc877212ae +Block 0029 [ 35]: 825465623ee4a468 +Block 0029 [ 36]: eea58b7496232e66 +Block 0029 [ 37]: 183cb64d603654f4 +Block 0029 [ 38]: 8f8bd8e1ba69fa6c +Block 0029 [ 39]: 46f47e6e0d443920 +Block 0029 [ 40]: 9278985cd955bac8 +Block 0029 [ 41]: eac6643986183a3f +Block 0029 [ 42]: 192c91da027c23de +Block 0029 [ 43]: f57b6cc6e82866cd +Block 0029 [ 44]: d231ac4c4df30e2c +Block 0029 [ 45]: 2cd3b6b6246d7aca +Block 0029 [ 46]: 7c1568e891d26f7b +Block 0029 [ 47]: 9021075d21c78aed +Block 0029 [ 48]: aefe6fca182c4173 +Block 0029 [ 49]: 636f6b7c9baf5612 +Block 0029 [ 50]: b03144eca38c224f +Block 0029 [ 51]: f2b62ee56a803d3a +Block 0029 [ 52]: 8f74f5b5a60a3836 +Block 0029 [ 53]: c7178cc43f208500 +Block 0029 [ 54]: 7f13626ba8001211 +Block 0029 [ 55]: 488a9269357691d2 +Block 0029 [ 56]: d7cb7779d0658d00 +Block 0029 [ 57]: 9b149d43a08de81a +Block 0029 [ 58]: 5e7353a6bb2c1b8c +Block 0029 [ 59]: dfe5cf98b5a80325 +Block 0029 [ 60]: b3650e30db17f3f8 +Block 0029 [ 61]: 6175497305602f2c +Block 0029 [ 62]: cdb7de41d2d8920c +Block 0029 [ 63]: 2f1c8b7cdc478ba1 +Block 0029 [ 64]: 3ff1f88d8c4322b6 +Block 0029 [ 65]: 536a009eddf2acc2 +Block 0029 [ 66]: 1d1f7900970142d0 +Block 0029 [ 67]: be173300ae594dc5 +Block 0029 [ 68]: d834bc0fb7c26737 +Block 0029 [ 69]: d0e6a394e14a8afa +Block 0029 [ 70]: 1c6f7dc2b61a68ba +Block 0029 [ 71]: 6d4108d773a24064 +Block 0029 [ 72]: 165a18fae86da727 +Block 0029 [ 73]: 2c630bded29340eb +Block 0029 [ 74]: d5484247b2b1b85b +Block 0029 [ 75]: fac0b38c5baeca1b +Block 0029 [ 76]: 910314fa78a08093 +Block 0029 [ 77]: 45e5737d9f5ba290 +Block 0029 [ 78]: 7e16e0d27234eda1 +Block 0029 [ 79]: 87090ffaf76b4dc8 +Block 0029 [ 80]: d5a96bdc6813af4f +Block 0029 [ 81]: 8c76742877047af9 +Block 0029 [ 82]: a8e3c59550fdaa11 +Block 0029 [ 83]: e63a45ddb7435b1e +Block 0029 [ 84]: 6f6ce4dd69a8b71f +Block 0029 [ 85]: f68f28b76c6af71d +Block 0029 [ 86]: ad52a1a38c74efae +Block 0029 [ 87]: c0025f62b2b43ca1 +Block 0029 [ 88]: bdfab290d7ceef39 +Block 0029 [ 89]: 4d997d3fcd108ee8 +Block 0029 [ 90]: 6e24a833e1d8a49f +Block 0029 [ 91]: 349585e1656c0931 +Block 0029 [ 92]: 7a38ee0f7efd88dc +Block 0029 [ 93]: 77f60e1ef786ab0b +Block 0029 [ 94]: 29490d414e566f59 +Block 0029 [ 95]: e9093cb773a67699 +Block 0029 [ 96]: 5636f645e6065f9b +Block 0029 [ 97]: 413cdadedad007a6 +Block 0029 [ 98]: 3ce17b377bb2ad09 +Block 0029 [ 99]: 9521a534bacb031b +Block 0029 [100]: 546c24c320ead0ef +Block 0029 [101]: e0675e71649d878b +Block 0029 [102]: a47fad1344a99e2e +Block 0029 [103]: 408876c4f82c47dc +Block 0029 [104]: dca85e162f8d0d36 +Block 0029 [105]: 6877846c40c7f0f2 +Block 0029 [106]: d864a84891ab5412 +Block 0029 [107]: f258de875bdca86d +Block 0029 [108]: 03e85378a491acbf +Block 0029 [109]: ef4333022e5e2266 +Block 0029 [110]: 7e5cab39863e81d4 +Block 0029 [111]: afda4f13115bf9e9 +Block 0029 [112]: 0862355e4c705112 +Block 0029 [113]: 0adbeb157deff933 +Block 0029 [114]: 059707393cc95e97 +Block 0029 [115]: fd3182b6cc4b166c +Block 0029 [116]: 2c961278c9d1f4b5 +Block 0029 [117]: a26f46272f117fe1 +Block 0029 [118]: d6cc93a6f359730d +Block 0029 [119]: d3c00e15a7b16c88 +Block 0029 [120]: 126313ed08ab6177 +Block 0029 [121]: 07fedc02098d9756 +Block 0029 [122]: 3eea4cd3ad6e17df +Block 0029 [123]: 77383c002c96a26f +Block 0029 [124]: 6f84dcc0df35965f +Block 0029 [125]: fda794b95a3ed635 +Block 0029 [126]: 17c31f69d737fecd +Block 0029 [127]: 1d0bb16832a5d8d9 +Block 0030 [ 0]: 06faaf86c4357a63 +Block 0030 [ 1]: 187215eb774ab9c4 +Block 0030 [ 2]: e5d6061e3a116325 +Block 0030 [ 3]: 56360afd6c76444b +Block 0030 [ 4]: e2ae61086f6baa40 +Block 0030 [ 5]: 95404adbf442bf22 +Block 0030 [ 6]: 17f373fd6aafa6e8 +Block 0030 [ 7]: a41d44529d3c7702 +Block 0030 [ 8]: f16f0c58c5a515a3 +Block 0030 [ 9]: 2cf725568683bad4 +Block 0030 [ 10]: 46fb319e77174ad4 +Block 0030 [ 11]: 0e7ad98d8b446f88 +Block 0030 [ 12]: 11001e00646f1339 +Block 0030 [ 13]: d13329ad0f7eeca2 +Block 0030 [ 14]: f87b30bd41ec5063 +Block 0030 [ 15]: 83f6de915368cb97 +Block 0030 [ 16]: 1d72642a0cfc2c12 +Block 0030 [ 17]: 1c49f60f8fe27a9d +Block 0030 [ 18]: e14c4a9eb832fb0a +Block 0030 [ 19]: 0558b1e4c804f704 +Block 0030 [ 20]: ae214c39704454c7 +Block 0030 [ 21]: e1543cded2b2b1a4 +Block 0030 [ 22]: 50025cf0f167f678 +Block 0030 [ 23]: 1ddd862ffe3480aa +Block 0030 [ 24]: 767efd1c4f0c72d0 +Block 0030 [ 25]: 02801327344e815f +Block 0030 [ 26]: 9501d4e0f2971e86 +Block 0030 [ 27]: fd0c9541a4739bc0 +Block 0030 [ 28]: af1851ea44b3e369 +Block 0030 [ 29]: 37215e2791a82a3e +Block 0030 [ 30]: d0c64eeb8306a627 +Block 0030 [ 31]: 1f592f7e1dcc4ea0 +Block 0030 [ 32]: 2ffe7eeb807e5dd1 +Block 0030 [ 33]: ecd4afdf62b6a263 +Block 0030 [ 34]: 588674ffb6710991 +Block 0030 [ 35]: bbe3344c63d991fe +Block 0030 [ 36]: 4d25aba6ecb0ab9e +Block 0030 [ 37]: b97c6198cb98993a +Block 0030 [ 38]: faf1d9e4b742e20b +Block 0030 [ 39]: a0fa95a0d9036fed +Block 0030 [ 40]: 10c92928749af328 +Block 0030 [ 41]: a2f08707d69942f0 +Block 0030 [ 42]: 14ed52c3376fbbb1 +Block 0030 [ 43]: 491744b39b23ec69 +Block 0030 [ 44]: 3d6fb0f811e1fa93 +Block 0030 [ 45]: b16b0918d1822cd1 +Block 0030 [ 46]: 4e9e24e3d83f58d7 +Block 0030 [ 47]: 937438d4d16a045d +Block 0030 [ 48]: 5c4dfe9183e7027d +Block 0030 [ 49]: 242d26fab41e8429 +Block 0030 [ 50]: 837997f2bcb0a989 +Block 0030 [ 51]: 733af3308f05666b +Block 0030 [ 52]: 9e7eff9d395b0d26 +Block 0030 [ 53]: f5eddbcb0359d70a +Block 0030 [ 54]: 6fb6f80eee13ee63 +Block 0030 [ 55]: 79705f3b3e8f50e6 +Block 0030 [ 56]: d400902a38bf8231 +Block 0030 [ 57]: 87905ac331d93527 +Block 0030 [ 58]: 759a79c21cdbe946 +Block 0030 [ 59]: 6e1bab338c267a63 +Block 0030 [ 60]: 2aaeddc1fd55ec08 +Block 0030 [ 61]: 73dcdb99d6529922 +Block 0030 [ 62]: fc20a90382ff207e +Block 0030 [ 63]: cd9951922068a854 +Block 0030 [ 64]: 99a2d615ce8f36d0 +Block 0030 [ 65]: 214b493680f9162a +Block 0030 [ 66]: 82a32c9170dd7706 +Block 0030 [ 67]: e7480d0108c76bee +Block 0030 [ 68]: 8a7f18a34fffdc27 +Block 0030 [ 69]: 2b2785750dcc7550 +Block 0030 [ 70]: 481082b18dbf5424 +Block 0030 [ 71]: 52583c728ae14666 +Block 0030 [ 72]: 5f5f694e2b724738 +Block 0030 [ 73]: 36f9c65d26534609 +Block 0030 [ 74]: 62cc88761fca9a68 +Block 0030 [ 75]: 0dd13380d7ac1f16 +Block 0030 [ 76]: 35fb9d078427ad24 +Block 0030 [ 77]: 1700fcdf1b796e53 +Block 0030 [ 78]: 158003d77db2d9d0 +Block 0030 [ 79]: 7cb7c0c420b5d9b1 +Block 0030 [ 80]: 782c4d56a15aebcd +Block 0030 [ 81]: ffe85632965712b0 +Block 0030 [ 82]: 129aee8c44b285ed +Block 0030 [ 83]: 21190577528afe47 +Block 0030 [ 84]: db9c19d775e6f11d +Block 0030 [ 85]: ac43b65cd70c76d2 +Block 0030 [ 86]: d325e5810a76c6b5 +Block 0030 [ 87]: 8f034f7e0eb746e5 +Block 0030 [ 88]: c8df3124c2cb3557 +Block 0030 [ 89]: 2f12b6192f15485a +Block 0030 [ 90]: ddb7107ff4a7f86b +Block 0030 [ 91]: 2887b68c44815c3e +Block 0030 [ 92]: 857831851a4949cc +Block 0030 [ 93]: a1f5e6dade25bc50 +Block 0030 [ 94]: 484f51bbb5b197e7 +Block 0030 [ 95]: b0d74bffbdee2ded +Block 0030 [ 96]: 6385f08f32511be4 +Block 0030 [ 97]: 4a67a1191db0dfa1 +Block 0030 [ 98]: 805ca6260698783f +Block 0030 [ 99]: 96c092604ed6b946 +Block 0030 [100]: 66893b81339d9ca9 +Block 0030 [101]: 51369a103bfb3948 +Block 0030 [102]: a8aa1fa92bf61251 +Block 0030 [103]: 6e09aaba9f66053c +Block 0030 [104]: c5ce3eb103dd370a +Block 0030 [105]: 4a2aaa9aaf6215ee +Block 0030 [106]: c67a60f23cc8a558 +Block 0030 [107]: a55e72a95dd53eea +Block 0030 [108]: dc97febd17830de0 +Block 0030 [109]: 635d64d5daf2bae4 +Block 0030 [110]: 6a2c19df26561bf8 +Block 0030 [111]: 1c87e6f1395ecce8 +Block 0030 [112]: 30654b9719440212 +Block 0030 [113]: 3eaf14e4981b3a4c +Block 0030 [114]: 39ec1251215373a9 +Block 0030 [115]: 5409e426ae48c456 +Block 0030 [116]: 438a2a14e43f1c87 +Block 0030 [117]: ffa3bfcd4f2e9316 +Block 0030 [118]: 0d0731d2e6465b95 +Block 0030 [119]: 6a8389557c831fd5 +Block 0030 [120]: 87f96e864fd48bc3 +Block 0030 [121]: 21cff67fa2b9db4a +Block 0030 [122]: 715fe10e95ff3746 +Block 0030 [123]: f2ade635af167312 +Block 0030 [124]: f7b3dd2ddbbbc129 +Block 0030 [125]: e3318db2d934c7f1 +Block 0030 [126]: e859c153c96218ce +Block 0030 [127]: 164fe9bc73bb26b4 +Block 0031 [ 0]: 1b75efd5304f056d +Block 0031 [ 1]: bf463e41d488275c +Block 0031 [ 2]: 941b47873adff5fe +Block 0031 [ 3]: 2e9b6397d72d3c3f +Block 0031 [ 4]: 5c5cbd4b38fbb99c +Block 0031 [ 5]: 35c8fb736f64ceeb +Block 0031 [ 6]: f09d8a73916dac38 +Block 0031 [ 7]: 93fba50823df06e6 +Block 0031 [ 8]: 0b7757128f783ae7 +Block 0031 [ 9]: bdee6f93051c40aa +Block 0031 [ 10]: c66cbdc6778c0eac +Block 0031 [ 11]: b033a39dac87bfd7 +Block 0031 [ 12]: 02b71a0ce04fadbe +Block 0031 [ 13]: 22e11dc3dc9e2bbd +Block 0031 [ 14]: b34ca0ba5283da3d +Block 0031 [ 15]: 6d6e3e83c2054d72 +Block 0031 [ 16]: cee1e38f20aabb40 +Block 0031 [ 17]: e60fd2fca2962346 +Block 0031 [ 18]: 6271c1ea64d3acab +Block 0031 [ 19]: e53b94baf089a82a +Block 0031 [ 20]: 986c8964a9c8856e +Block 0031 [ 21]: 634dab64bedb01cd +Block 0031 [ 22]: 3f102b85059c1b57 +Block 0031 [ 23]: 56bb3aa72f1cfe45 +Block 0031 [ 24]: 624cad38f78c2c7c +Block 0031 [ 25]: a41c872fb170de87 +Block 0031 [ 26]: fca6abd7af42e829 +Block 0031 [ 27]: 656d576d3c7dcf23 +Block 0031 [ 28]: 5a3ea0d15d914a77 +Block 0031 [ 29]: 68b39ed03d43822c +Block 0031 [ 30]: 326f2a39f2cf6e71 +Block 0031 [ 31]: 87032ea9406a27a3 +Block 0031 [ 32]: 290b8ca6f768dcd5 +Block 0031 [ 33]: 971ad7984f60d557 +Block 0031 [ 34]: f969c776d05a6ba2 +Block 0031 [ 35]: 568f1669228eae4f +Block 0031 [ 36]: 66c7df737d2d098c +Block 0031 [ 37]: 5991c4325083ca15 +Block 0031 [ 38]: 0a33cadfa5489d6b +Block 0031 [ 39]: 85161c0f20ada2e7 +Block 0031 [ 40]: 753e2541d4f26d3c +Block 0031 [ 41]: 529bd28c7b89855c +Block 0031 [ 42]: f37985cd14b0fc66 +Block 0031 [ 43]: 0d543ab4a2ab4a2c +Block 0031 [ 44]: d9821ac717c5da03 +Block 0031 [ 45]: 13aa09d388b150ca +Block 0031 [ 46]: 9d892c542b2da4f8 +Block 0031 [ 47]: 4596a049a50684c7 +Block 0031 [ 48]: 25fb0e9d2e35a2a6 +Block 0031 [ 49]: d53a3dde8446ae68 +Block 0031 [ 50]: 7a3670321ac561e6 +Block 0031 [ 51]: bb08107f2560b09f +Block 0031 [ 52]: 14c3857b159792dc +Block 0031 [ 53]: 6210affb7186cee3 +Block 0031 [ 54]: 7e1eb58956a1fb4a +Block 0031 [ 55]: e2b2d6ce4588401d +Block 0031 [ 56]: 5a6f61240e364ad2 +Block 0031 [ 57]: b6c884fdf1050aeb +Block 0031 [ 58]: f6286b150c1da490 +Block 0031 [ 59]: bb8e51a87b94f8a0 +Block 0031 [ 60]: 332ce9283f68d85e +Block 0031 [ 61]: c38fdd3f7434f32d +Block 0031 [ 62]: 228866b2c26e34c8 +Block 0031 [ 63]: f85ebc1618b79b6d +Block 0031 [ 64]: b518f14fc56caef6 +Block 0031 [ 65]: 752a292663431849 +Block 0031 [ 66]: 9d5fe9dac0697517 +Block 0031 [ 67]: b535a68f65c57dc0 +Block 0031 [ 68]: e348ea1cdac43f44 +Block 0031 [ 69]: 13f1334d6e9bf85e +Block 0031 [ 70]: 283b8fe3a17c3fea +Block 0031 [ 71]: 21bd877a7a74957a +Block 0031 [ 72]: ee156e24dd64640c +Block 0031 [ 73]: 22cfce14f0330ae5 +Block 0031 [ 74]: eb54556dd37c24d1 +Block 0031 [ 75]: 7d801f2118f7fa33 +Block 0031 [ 76]: 4c617d0148a382a9 +Block 0031 [ 77]: 58bf2b668a7c045d +Block 0031 [ 78]: 4cb48eb731183f86 +Block 0031 [ 79]: c3079adbfc30460d +Block 0031 [ 80]: 49215e84eb3b907f +Block 0031 [ 81]: f152c24a4624747e +Block 0031 [ 82]: 450842e74d33266d +Block 0031 [ 83]: 572ae15c16095fa3 +Block 0031 [ 84]: 5a5fc57805f2adc5 +Block 0031 [ 85]: 05c3fb94ed3ea6fa +Block 0031 [ 86]: 780589833f0abe13 +Block 0031 [ 87]: 87825a64c89e9a64 +Block 0031 [ 88]: ddaf109d7b13c739 +Block 0031 [ 89]: e8ebb94b4825d7bb +Block 0031 [ 90]: 62a82e219106de32 +Block 0031 [ 91]: f39e2861606df718 +Block 0031 [ 92]: e6210ab24e5b2584 +Block 0031 [ 93]: 770ea215d0556c76 +Block 0031 [ 94]: c974eef2fe9709e2 +Block 0031 [ 95]: fccb2cd4fe87501e +Block 0031 [ 96]: f12e254dc0df1911 +Block 0031 [ 97]: 26f01267d74549b5 +Block 0031 [ 98]: f9945591c29e5796 +Block 0031 [ 99]: f25bf3d06f6e0cdb +Block 0031 [100]: 29dd601fc1ebd250 +Block 0031 [101]: 9e1a251ecd42416a +Block 0031 [102]: c5f64ffca0f15a94 +Block 0031 [103]: 6b77e4cd72364bc2 +Block 0031 [104]: 87d514d8c7a2177a +Block 0031 [105]: b78b0f6991278189 +Block 0031 [106]: 3d2bcaa959d93492 +Block 0031 [107]: f45032027a4fcb81 +Block 0031 [108]: 9d96e07f3d41419c +Block 0031 [109]: 8e83ef21420b0263 +Block 0031 [110]: 0b834ffee596a9f1 +Block 0031 [111]: 987b7f1f2c86475d +Block 0031 [112]: 24840f2805ee7c0f +Block 0031 [113]: 23629efc11196286 +Block 0031 [114]: 56fd8771a0bc617a +Block 0031 [115]: 125e85de9586d448 +Block 0031 [116]: 4f194efe3a546712 +Block 0031 [117]: 0aabaee1afd9f936 +Block 0031 [118]: 47cb3f180ec29af9 +Block 0031 [119]: 8d3169c8810c7258 +Block 0031 [120]: cc9ab6861463e518 +Block 0031 [121]: cb72c54e6e7bd740 +Block 0031 [122]: a3161c47c51f546d +Block 0031 [123]: 38292d24214a65ab +Block 0031 [124]: a67ff90c16266a3c +Block 0031 [125]: 241fe584e4283bd8 +Block 0031 [126]: 16e73c7bc1067de9 +Block 0031 [127]: 78f5f3c568b26d50 + + After pass 2: +Block 0000 [ 0]: b2db2cba8393858f +Block 0000 [ 1]: b1645132ef755439 +Block 0000 [ 2]: c65526cc5b1ba836 +Block 0000 [ 3]: 0ceb6fde5a697c6d +Block 0000 [ 4]: cfba7c49d2c8a63e +Block 0000 [ 5]: ecca6830247751b0 +Block 0000 [ 6]: dfbcd384882e51bd +Block 0000 [ 7]: 0fae5c46e1916edd +Block 0000 [ 8]: b66226556fb54ed2 +Block 0000 [ 9]: 42677ba7315d3bdf +Block 0000 [ 10]: 51e965bd9678b787 +Block 0000 [ 11]: 41c58891359f7528 +Block 0000 [ 12]: 07c3c951dd9888f4 +Block 0000 [ 13]: b962bd19f8ad4887 +Block 0000 [ 14]: d9bcf1cb6d828ed1 +Block 0000 [ 15]: 1df7994029c16524 +Block 0000 [ 16]: 2c7c3b51da8ff0aa +Block 0000 [ 17]: 1419e9fa233b18a5 +Block 0000 [ 18]: 3a214d367965963a +Block 0000 [ 19]: 43b20d50ee8bdda7 +Block 0000 [ 20]: df32702230d38d42 +Block 0000 [ 21]: 7ee13d5892a9fde2 +Block 0000 [ 22]: fae7bfbcc7f2aae1 +Block 0000 [ 23]: 40045b3b20d1866a +Block 0000 [ 24]: 83d006d8e9595c48 +Block 0000 [ 25]: e1212375d386d373 +Block 0000 [ 26]: 0b72f1ff6dfae513 +Block 0000 [ 27]: 9bcd8a180ed0bbf9 +Block 0000 [ 28]: 3e1a3d7fa172da36 +Block 0000 [ 29]: 3bac80b4cedb219e +Block 0000 [ 30]: 3c3459c96616599e +Block 0000 [ 31]: b592b19385558ea1 +Block 0000 [ 32]: fbd2493ed10bb2a7 +Block 0000 [ 33]: 250e933ef6c9c020 +Block 0000 [ 34]: 0d7e0cefe3d0a15a +Block 0000 [ 35]: 6a7662c61a16f7fe +Block 0000 [ 36]: 245ee24b96eb96f1 +Block 0000 [ 37]: f06fce3e54a2d2bf +Block 0000 [ 38]: 89645646c43d254d +Block 0000 [ 39]: 1d6e702c0b24a3e2 +Block 0000 [ 40]: 4f29b5744156c572 +Block 0000 [ 41]: e510c23181c5b3ff +Block 0000 [ 42]: c19e9621e1c84234 +Block 0000 [ 43]: 97a28b13fd5bc3ce +Block 0000 [ 44]: d9e3c96741d996fa +Block 0000 [ 45]: 1b76d65989002d8c +Block 0000 [ 46]: 6dcb12f59eb46a20 +Block 0000 [ 47]: cdea2a6952939ac9 +Block 0000 [ 48]: 73cde7598b16f5e6 +Block 0000 [ 49]: 6e8d427a1fa79cc6 +Block 0000 [ 50]: 09231b609a9afff8 +Block 0000 [ 51]: daa1b5f0188f0433 +Block 0000 [ 52]: 893dfceae459725d +Block 0000 [ 53]: 592be1b00b7b28c8 +Block 0000 [ 54]: ac7c1b8ab820cf31 +Block 0000 [ 55]: 781a15a64a128347 +Block 0000 [ 56]: eb8d6ff2c23512dd +Block 0000 [ 57]: ec5bc9d05a4e273c +Block 0000 [ 58]: bd384a622836102a +Block 0000 [ 59]: 5076d7e3dcf92f7d +Block 0000 [ 60]: 439801ec770beae5 +Block 0000 [ 61]: 85ac3cddfe44da89 +Block 0000 [ 62]: 99b614b31261a345 +Block 0000 [ 63]: e2933b5f9611fc54 +Block 0000 [ 64]: 3037fa06b1ece01e +Block 0000 [ 65]: c9e51071135fa751 +Block 0000 [ 66]: 05bb076f2cc813f6 +Block 0000 [ 67]: 9f4717653db38ec9 +Block 0000 [ 68]: 41c71e48750cee5c +Block 0000 [ 69]: 9a0efdc6a8348896 +Block 0000 [ 70]: e8d34542f503625f +Block 0000 [ 71]: 6ac59a202acd31be +Block 0000 [ 72]: 0c6c398fd2b99bed +Block 0000 [ 73]: d7ed380318328435 +Block 0000 [ 74]: e1298d4fc69251c3 +Block 0000 [ 75]: 1b2f183356e54668 +Block 0000 [ 76]: 6eebc1ee8ed6cb90 +Block 0000 [ 77]: c261fa0c99a39c45 +Block 0000 [ 78]: 6df71efdef5b48c9 +Block 0000 [ 79]: 07162892169da587 +Block 0000 [ 80]: 5e736de2bdac47a6 +Block 0000 [ 81]: fde80f2d0a04bdfc +Block 0000 [ 82]: fd8486ce15f751d2 +Block 0000 [ 83]: e0f22c17510e70ac +Block 0000 [ 84]: 6a30ca58582063c8 +Block 0000 [ 85]: b325e44084988694 +Block 0000 [ 86]: 89f74d37d22ff300 +Block 0000 [ 87]: e9c409d05c38072b +Block 0000 [ 88]: 5fe0a89cb1e2e19b +Block 0000 [ 89]: c090cb619dbb525d +Block 0000 [ 90]: 0507d89abbab17f6 +Block 0000 [ 91]: 2fee6db9325d264f +Block 0000 [ 92]: e3fd1f8eedbda3e4 +Block 0000 [ 93]: 3424a4136765270d +Block 0000 [ 94]: c5b19c3af1971bbc +Block 0000 [ 95]: 6cb49826baeea0fd +Block 0000 [ 96]: b9b340de7a225a23 +Block 0000 [ 97]: 4b725cbedf9b7b08 +Block 0000 [ 98]: 7c75fc3b73e1b6d2 +Block 0000 [ 99]: fcd2e45c0fcd34aa +Block 0000 [100]: a5ad7705b674a22e +Block 0000 [101]: 6e2745f70d2e377d +Block 0000 [102]: 59006b446c4c82bb +Block 0000 [103]: 703f52dcee2e81d1 +Block 0000 [104]: 3f6b82b93effffb4 +Block 0000 [105]: 13ed467534c82418 +Block 0000 [106]: a55f4cb20247b2ee +Block 0000 [107]: 7131d4f50e8b890a +Block 0000 [108]: 73490c08292f39ff +Block 0000 [109]: 850a4da396b62427 +Block 0000 [110]: 1c1b4d28ed1be0a3 +Block 0000 [111]: bb9dc05ac200bc36 +Block 0000 [112]: eb87ae6d49a2fea9 +Block 0000 [113]: 8b01b4b60607e7b7 +Block 0000 [114]: 5601e9b4050e26a4 +Block 0000 [115]: 1a708020cf30e8c4 +Block 0000 [116]: 357787f560b3e117 +Block 0000 [117]: 270c70ba1394aeb3 +Block 0000 [118]: e974ce82f577c8af +Block 0000 [119]: e99a323c29101242 +Block 0000 [120]: df5246c0a22ef3aa +Block 0000 [121]: faa08f3454fa7b73 +Block 0000 [122]: 7703d220dfff70de +Block 0000 [123]: 3572d880754b85de +Block 0000 [124]: 74fd304cf2220306 +Block 0000 [125]: 0efda171378283b6 +Block 0000 [126]: 95d2fb71f0e67df6 +Block 0000 [127]: 5281bd4c8f8e3bfc +Block 0001 [ 0]: a601dc0876e7f5d2 +Block 0001 [ 1]: e8156a6fee9202a4 +Block 0001 [ 2]: e10d48d53f592f17 +Block 0001 [ 3]: 2112303d6ee471f4 +Block 0001 [ 4]: f625e1a0f9017d96 +Block 0001 [ 5]: 5b17ed2f17876d0f +Block 0001 [ 6]: 0c890126ce1adb94 +Block 0001 [ 7]: 78dff2e392d3a0c6 +Block 0001 [ 8]: f282dbd5f3ef11a5 +Block 0001 [ 9]: 524cb81ea5960dae +Block 0001 [ 10]: 4004d121dc3f834e +Block 0001 [ 11]: 774715d1bbafb642 +Block 0001 [ 12]: f99dd9b032874b77 +Block 0001 [ 13]: dffa663def2f79f6 +Block 0001 [ 14]: 16b48144484f1878 +Block 0001 [ 15]: b13072d77e12ced8 +Block 0001 [ 16]: 165681d7f28c89d7 +Block 0001 [ 17]: aec8db840bc885be +Block 0001 [ 18]: 02c41c5cc33323f6 +Block 0001 [ 19]: ac51867a32fae7d3 +Block 0001 [ 20]: a6662cf115cab5e4 +Block 0001 [ 21]: a7dfac6e1453e9ca +Block 0001 [ 22]: ecccdc35fe6a81da +Block 0001 [ 23]: 27a9a3e8bfc62791 +Block 0001 [ 24]: 2b33ed723d62b490 +Block 0001 [ 25]: 19568a46fb5516d7 +Block 0001 [ 26]: f204bae6ccfaa8b5 +Block 0001 [ 27]: 996cba2cf431026e +Block 0001 [ 28]: 61f7dd05475d6ee6 +Block 0001 [ 29]: 2962068995d86580 +Block 0001 [ 30]: 418e5d7ec95f73a4 +Block 0001 [ 31]: dbdc12a8702d4c8d +Block 0001 [ 32]: 749b9bc8a38f50d6 +Block 0001 [ 33]: 7a0f8357fd40f318 +Block 0001 [ 34]: 7cb99e83a49df9ea +Block 0001 [ 35]: f448e5b423259aa5 +Block 0001 [ 36]: fbb55be1b0dc18f1 +Block 0001 [ 37]: f9d3e9671ac793a5 +Block 0001 [ 38]: d7ed26cad3bd50dd +Block 0001 [ 39]: 7bdc2b25b7b4380e +Block 0001 [ 40]: 564193ed46bbd38f +Block 0001 [ 41]: bf93c93f54ad58fb +Block 0001 [ 42]: 968566bd98935a80 +Block 0001 [ 43]: 32aea1755a271495 +Block 0001 [ 44]: 1070a94cbe2953f5 +Block 0001 [ 45]: 400ea4d9f1a3fa35 +Block 0001 [ 46]: 7c935e65d9c735a1 +Block 0001 [ 47]: a8175cb4c5a150cc +Block 0001 [ 48]: 443e38c447553835 +Block 0001 [ 49]: ce0dff4aacadc471 +Block 0001 [ 50]: 53be5d9176c17ca0 +Block 0001 [ 51]: 3256ac925d114b7e +Block 0001 [ 52]: c48e34ab7016cf82 +Block 0001 [ 53]: 6785fc5ebe921c3f +Block 0001 [ 54]: dc79dc6a77fe9386 +Block 0001 [ 55]: 9d6d1d9be125d35c +Block 0001 [ 56]: 712b2f8118afd099 +Block 0001 [ 57]: d809acd71157d73a +Block 0001 [ 58]: ff16fadc5fb7dd6d +Block 0001 [ 59]: d67b1cb17bd3725b +Block 0001 [ 60]: 3daccb55beb052d8 +Block 0001 [ 61]: 35c964dec1386806 +Block 0001 [ 62]: bc105f476a5e1249 +Block 0001 [ 63]: 46ecb66699fa57e2 +Block 0001 [ 64]: f88e5a59aefe6cf2 +Block 0001 [ 65]: 5eadb66d6c148e37 +Block 0001 [ 66]: 7cf87f7735867538 +Block 0001 [ 67]: f6be4a2544f47f38 +Block 0001 [ 68]: 55266e0cead300c7 +Block 0001 [ 69]: 7e11af1a2670a739 +Block 0001 [ 70]: 9a2af3f6913c8ee4 +Block 0001 [ 71]: 394a6f1984e6d539 +Block 0001 [ 72]: ff7ed615ae767138 +Block 0001 [ 73]: d3ceb96f26db3d27 +Block 0001 [ 74]: 30d3b4ba1b1a0af8 +Block 0001 [ 75]: 0e45f476265b4d99 +Block 0001 [ 76]: cdbad3cd5ff77a1e +Block 0001 [ 77]: ef3187975a8f442b +Block 0001 [ 78]: c1308929690f0031 +Block 0001 [ 79]: 6d85c6d286a25367 +Block 0001 [ 80]: dac2896b549657a4 +Block 0001 [ 81]: 23e32881a1b09a6d +Block 0001 [ 82]: ec20c667fcbdeb4e +Block 0001 [ 83]: 87bbeb980e67d712 +Block 0001 [ 84]: 20cfdefef627dd01 +Block 0001 [ 85]: 621ae179a533c9a2 +Block 0001 [ 86]: a84be778d4427ffd +Block 0001 [ 87]: d0855b3fe58411a3 +Block 0001 [ 88]: 9754baed0bbe3f81 +Block 0001 [ 89]: 1f4bc2bd47559c8c +Block 0001 [ 90]: e9ee56d7d1e3fa45 +Block 0001 [ 91]: 19f21b10f69a7a56 +Block 0001 [ 92]: b40c652a7f4731d8 +Block 0001 [ 93]: 81e38a68107cbc0f +Block 0001 [ 94]: 49560f11e34b7439 +Block 0001 [ 95]: bbfdc16f8fbd75bf +Block 0001 [ 96]: e31edc9e8fceabcf +Block 0001 [ 97]: 32b1765671372267 +Block 0001 [ 98]: 8ad8dae552057de1 +Block 0001 [ 99]: 346aae886e91cc51 +Block 0001 [100]: b5531256bf78f06b +Block 0001 [101]: d79ecff14855b40f +Block 0001 [102]: 242357b9aed4b7d1 +Block 0001 [103]: 84845b5d45408e08 +Block 0001 [104]: d7dbef959f78cea2 +Block 0001 [105]: 21618b4913dfaa30 +Block 0001 [106]: 45761e263069a8a9 +Block 0001 [107]: 10994f746838cb8a +Block 0001 [108]: 9103b613cdcab634 +Block 0001 [109]: 7836e88870955857 +Block 0001 [110]: 8f0c4de9d1a2f683 +Block 0001 [111]: 30b4a1e9ab436f45 +Block 0001 [112]: f33c6c4d38df040b +Block 0001 [113]: 2f85731764ed984a +Block 0001 [114]: 30fbf7039eef9644 +Block 0001 [115]: ad98773602b57959 +Block 0001 [116]: 497ae71d5f2a1d4a +Block 0001 [117]: b21fa18653c5cdbc +Block 0001 [118]: ef19121d61008f70 +Block 0001 [119]: 66b6825d50197690 +Block 0001 [120]: 843664a09f8c1636 +Block 0001 [121]: 16a7ce3bd9d2eb0b +Block 0001 [122]: b22c00136e008148 +Block 0001 [123]: 7ea52a8d4177b05e +Block 0001 [124]: 18989952ed74fa99 +Block 0001 [125]: bce998118659ba50 +Block 0001 [126]: 3928fafd8927bcca +Block 0001 [127]: 68902f7910072951 +Block 0002 [ 0]: e81e0bbaf6f28522 +Block 0002 [ 1]: 396861783abb23b8 +Block 0002 [ 2]: 3d5d4742fb81fbd5 +Block 0002 [ 3]: 4fa13942992ac0da +Block 0002 [ 4]: b561199a7d8503a0 +Block 0002 [ 5]: c21da733b005a908 +Block 0002 [ 6]: c26444122b6b9274 +Block 0002 [ 7]: 36a63f4646df05b8 +Block 0002 [ 8]: 6b2a0c7fb0b6adc5 +Block 0002 [ 9]: c156d6f3856e3678 +Block 0002 [ 10]: 4c504d2c87841d81 +Block 0002 [ 11]: 4905e03cf1e6f0ee +Block 0002 [ 12]: 87a0c471ff7526ce +Block 0002 [ 13]: 26367649350d355e +Block 0002 [ 14]: 00e857202c91a68a +Block 0002 [ 15]: f9d076b2e46ebdaa +Block 0002 [ 16]: 9611b8a77b3aa7f3 +Block 0002 [ 17]: b14be5ae4ac7412e +Block 0002 [ 18]: 1eeebb9c268d7ef3 +Block 0002 [ 19]: d86c569647cbd1ad +Block 0002 [ 20]: a8fa312f44927434 +Block 0002 [ 21]: 82dcc374e99677b9 +Block 0002 [ 22]: 93ab2bccf995139d +Block 0002 [ 23]: 9b3ca0906a1d8569 +Block 0002 [ 24]: 705ba90bec5e96a5 +Block 0002 [ 25]: 737cd17db84d185b +Block 0002 [ 26]: 309057ac43fd66d9 +Block 0002 [ 27]: 220a24df79ee088d +Block 0002 [ 28]: 9d33ecdbf98b6765 +Block 0002 [ 29]: 52cb5ef7639b9dfe +Block 0002 [ 30]: 9007776749321e4a +Block 0002 [ 31]: db73be5f61995fe6 +Block 0002 [ 32]: 2dc127b7bee524b6 +Block 0002 [ 33]: b5abec945d264219 +Block 0002 [ 34]: 0031ea20aa52c2a2 +Block 0002 [ 35]: 3eed4344c253c7e0 +Block 0002 [ 36]: 6437a60bd66f53c4 +Block 0002 [ 37]: 6615df9a4e849340 +Block 0002 [ 38]: 8f86a3766032871a +Block 0002 [ 39]: ca4d635a6e057619 +Block 0002 [ 40]: 4390465343d27c46 +Block 0002 [ 41]: 3f2043373696faf4 +Block 0002 [ 42]: de93732af23f352a +Block 0002 [ 43]: da6778068e73ddd4 +Block 0002 [ 44]: 7453b8124450b27e +Block 0002 [ 45]: 5f51a2d57181f2b9 +Block 0002 [ 46]: de9c940fa9ab4c04 +Block 0002 [ 47]: 9d6d029e75c9a64f +Block 0002 [ 48]: 9073d8c7c776ac96 +Block 0002 [ 49]: 465b289ca08e6714 +Block 0002 [ 50]: aa890c575a2d7ec8 +Block 0002 [ 51]: 1cdb78c4199a40c5 +Block 0002 [ 52]: bce111d86807b484 +Block 0002 [ 53]: 3ab2d84a54074b6c +Block 0002 [ 54]: b8cc3aa6e3d80a02 +Block 0002 [ 55]: f1acd8318d693ac8 +Block 0002 [ 56]: 5eecf38eadaf104f +Block 0002 [ 57]: 4e79ef3026ab811b +Block 0002 [ 58]: 235310779616b594 +Block 0002 [ 59]: 73438a3256d1eaea +Block 0002 [ 60]: f4495e9185ed3c12 +Block 0002 [ 61]: c7a28910ae700391 +Block 0002 [ 62]: 742a596e1015c48f +Block 0002 [ 63]: 41178157bc7ce775 +Block 0002 [ 64]: edc6a55966707331 +Block 0002 [ 65]: 39497b1bd3a41980 +Block 0002 [ 66]: f4a3315a41c01d71 +Block 0002 [ 67]: 297dc5267a33faab +Block 0002 [ 68]: 170949ed98cc4fce +Block 0002 [ 69]: d2dc12ec69896786 +Block 0002 [ 70]: 434d5a5851822fe8 +Block 0002 [ 71]: 00118dec328147d3 +Block 0002 [ 72]: 03c8fc8c4d44db96 +Block 0002 [ 73]: ae231e8f920cac47 +Block 0002 [ 74]: d6b307e598cc639a +Block 0002 [ 75]: 2469cf2fe0950b18 +Block 0002 [ 76]: 0d9c209438395613 +Block 0002 [ 77]: e335d06493895f16 +Block 0002 [ 78]: b1b305629be232bd +Block 0002 [ 79]: 22b2c7be104a04f2 +Block 0002 [ 80]: 42956faf6651efdc +Block 0002 [ 81]: 98ffb95158f24920 +Block 0002 [ 82]: 4850d302878117b6 +Block 0002 [ 83]: a5d4ed41b0c9d2d8 +Block 0002 [ 84]: 4e3c6348c9371002 +Block 0002 [ 85]: 88608e6e14bffbc2 +Block 0002 [ 86]: 6cd8c4cf2259886c +Block 0002 [ 87]: 45139c5b12f9478d +Block 0002 [ 88]: 1f48e72c84f9dda5 +Block 0002 [ 89]: 6c546f01160e44a7 +Block 0002 [ 90]: 8b4efbca6310e636 +Block 0002 [ 91]: 40a500807dc6cd0e +Block 0002 [ 92]: dc02b2343fddfa24 +Block 0002 [ 93]: 4c4089218010c44b +Block 0002 [ 94]: 27eb0fc83d7da899 +Block 0002 [ 95]: c47a3ba94694ceb4 +Block 0002 [ 96]: 335f4d446479fd60 +Block 0002 [ 97]: 7e9c301621d8ab89 +Block 0002 [ 98]: 5fda24db61006fba +Block 0002 [ 99]: ff01a0a153fe3d37 +Block 0002 [100]: ab885dbb1dad5aa1 +Block 0002 [101]: 6da318547e8e48b3 +Block 0002 [102]: c67697e19524a439 +Block 0002 [103]: ea239bcd02527492 +Block 0002 [104]: edd3ee8a9021717f +Block 0002 [105]: ab51683a66552c40 +Block 0002 [106]: 2c887237f11c913d +Block 0002 [107]: 3f61e4b082c3b242 +Block 0002 [108]: c50d3d277054c9a7 +Block 0002 [109]: 2778d9b6e554a6e6 +Block 0002 [110]: 09641d71ffe05a4d +Block 0002 [111]: 58b8442be16e21a6 +Block 0002 [112]: d44d5b2dc2f9c20a +Block 0002 [113]: 677f96f5bbf6f9e5 +Block 0002 [114]: 06f53f76f2eb2e5a +Block 0002 [115]: b9e4fb1a579ac9b6 +Block 0002 [116]: 8252a5262e683358 +Block 0002 [117]: 11101fdb6e7d6be8 +Block 0002 [118]: 68a3174bf60b8d0f +Block 0002 [119]: cc1f471969d8661f +Block 0002 [120]: 6e2eb3874dfb9351 +Block 0002 [121]: 3dfe41bca6aeb9b6 +Block 0002 [122]: 2ca94479c1d9d9c3 +Block 0002 [123]: cd4cd1e58f0c1a4d +Block 0002 [124]: 220bc444db0c796e +Block 0002 [125]: 0165437e149e3cb5 +Block 0002 [126]: 2c8f5ef3fb489b1c +Block 0002 [127]: c74852363b7f3587 +Block 0003 [ 0]: 367c594bdf96b819 +Block 0003 [ 1]: 862711026ec3ec03 +Block 0003 [ 2]: 4291182dfe50a8a4 +Block 0003 [ 3]: 1968e610fb9b86ff +Block 0003 [ 4]: 1f73c18425908927 +Block 0003 [ 5]: 661b7f342e040cd4 +Block 0003 [ 6]: 8b88a35abe465f87 +Block 0003 [ 7]: 2b53235fa03d495e +Block 0003 [ 8]: 737a290089b25de2 +Block 0003 [ 9]: bf9058e3c9eec8d0 +Block 0003 [ 10]: 99b0126fab231886 +Block 0003 [ 11]: 16bdcc5a061cc916 +Block 0003 [ 12]: 667e764247e2e7be +Block 0003 [ 13]: 65a6b50454441f43 +Block 0003 [ 14]: be337b287eac42d9 +Block 0003 [ 15]: d5bed46e6c3349b1 +Block 0003 [ 16]: c2ea41bc5b6d4bd7 +Block 0003 [ 17]: 4ca8e1e8433670e4 +Block 0003 [ 18]: 759ab2d889551680 +Block 0003 [ 19]: e378158572542bfa +Block 0003 [ 20]: 6b1da15ac3fa96c0 +Block 0003 [ 21]: 8d36589f4cf25ddc +Block 0003 [ 22]: 503549d93ab6c1b7 +Block 0003 [ 23]: b8e8322845e29937 +Block 0003 [ 24]: 180c25fd2dbb1b48 +Block 0003 [ 25]: 6202f1842ab61832 +Block 0003 [ 26]: 5d4c894f0c4737c9 +Block 0003 [ 27]: 88f5a64b933a33df +Block 0003 [ 28]: 84eb153038e7aecc +Block 0003 [ 29]: 0d2621f75b1ae3e9 +Block 0003 [ 30]: b9123ff33039d4fe +Block 0003 [ 31]: 9ed38c24a4e1f8fb +Block 0003 [ 32]: 0c31e521335c8456 +Block 0003 [ 33]: db817288bd62628e +Block 0003 [ 34]: 7ff3b354dbaf962f +Block 0003 [ 35]: e183c8060ab80c30 +Block 0003 [ 36]: 9da848355b0a6225 +Block 0003 [ 37]: 0ceea1cf2734396c +Block 0003 [ 38]: 4432eeb03658f476 +Block 0003 [ 39]: b5b618f8b86b216b +Block 0003 [ 40]: 0d2d80ffd5e95700 +Block 0003 [ 41]: 159c8064f2989f4a +Block 0003 [ 42]: 760c9bcc3f6593ff +Block 0003 [ 43]: 8762acb41bfb6c63 +Block 0003 [ 44]: 4f7ea2fafcaa0e88 +Block 0003 [ 45]: c74933b7dbed9627 +Block 0003 [ 46]: cce5fe1d79ea5c75 +Block 0003 [ 47]: 4b231f4b26c89beb +Block 0003 [ 48]: caaea7d2fd4fd308 +Block 0003 [ 49]: 86b9c4f42595461d +Block 0003 [ 50]: 7ebf7c975364fa90 +Block 0003 [ 51]: 677efa86562f6c9c +Block 0003 [ 52]: 0e82d10cf9f1219a +Block 0003 [ 53]: d670593b1e019fd2 +Block 0003 [ 54]: 972cfb60ed8dba68 +Block 0003 [ 55]: f911987a43fc0a10 +Block 0003 [ 56]: 234a4ede8f00bc1f +Block 0003 [ 57]: 7967eb7e80ae4e59 +Block 0003 [ 58]: fb1a0481cc491916 +Block 0003 [ 59]: 0b058ac506301f85 +Block 0003 [ 60]: a74df515d9e08d97 +Block 0003 [ 61]: 383be2d3251aae14 +Block 0003 [ 62]: b3fd02e917a223ce +Block 0003 [ 63]: 29f39b011fad54c0 +Block 0003 [ 64]: f680bd509bcfdccd +Block 0003 [ 65]: 04d6aefd19cf741c +Block 0003 [ 66]: 0f1252791a746f17 +Block 0003 [ 67]: ab65eb095a9eeafd +Block 0003 [ 68]: c2928de1fe693493 +Block 0003 [ 69]: 048c2309b1815c9b +Block 0003 [ 70]: 8c54712e30b1bd31 +Block 0003 [ 71]: c63b79997378fcaa +Block 0003 [ 72]: 06a86dd8ad9696b5 +Block 0003 [ 73]: c38fc208cb319dc2 +Block 0003 [ 74]: 11cd45107d1f2e50 +Block 0003 [ 75]: e1d87aa8c5e1632e +Block 0003 [ 76]: 5ecdb4d890540442 +Block 0003 [ 77]: 686823fdee54d4ad +Block 0003 [ 78]: 6baade1b2d66b8bf +Block 0003 [ 79]: d55142011ebdea9c +Block 0003 [ 80]: 3c550a40516b719b +Block 0003 [ 81]: 09f369f036292023 +Block 0003 [ 82]: 7211fc8b5f134080 +Block 0003 [ 83]: 956d062cc49f7e15 +Block 0003 [ 84]: 7d04474795e014b4 +Block 0003 [ 85]: 0e8e5948404b3ac4 +Block 0003 [ 86]: 218ff6e138727371 +Block 0003 [ 87]: a1df22c6fbdf78f9 +Block 0003 [ 88]: 290465977b3b3ab9 +Block 0003 [ 89]: 862b0d5bfbf64d5a +Block 0003 [ 90]: c9b4eb5dceb436f5 +Block 0003 [ 91]: 480aa45ac4592905 +Block 0003 [ 92]: 1b42e2a9df42461f +Block 0003 [ 93]: 976e78dabb9a1f6d +Block 0003 [ 94]: 861d4a9050ee9931 +Block 0003 [ 95]: 5b4ae97afa1f29f0 +Block 0003 [ 96]: 61678bcd4367c07f +Block 0003 [ 97]: acefa26ea748ab48 +Block 0003 [ 98]: 0dbf00fa98bb3e54 +Block 0003 [ 99]: 7c8e72baf51824ce +Block 0003 [100]: b8f04cd864a6ff07 +Block 0003 [101]: 371431c4a64aa613 +Block 0003 [102]: 6ff7f3a454608db7 +Block 0003 [103]: cd7fdda08d309d9a +Block 0003 [104]: fc26af4ae96673b0 +Block 0003 [105]: 1e6021dc4f2fdd58 +Block 0003 [106]: 3e11ed915f93ea58 +Block 0003 [107]: 0b1d721f76ca5c50 +Block 0003 [108]: 74d56f4a98df89fd +Block 0003 [109]: 4ab79e7dece12d01 +Block 0003 [110]: 953ff63d4231cb98 +Block 0003 [111]: 29c749ebc02147e1 +Block 0003 [112]: ed59f5603d2dd69b +Block 0003 [113]: 42e81940699fdaf5 +Block 0003 [114]: 4fafbaf8edd4fab0 +Block 0003 [115]: 9591251ce09a535e +Block 0003 [116]: 2a17d91f13eefd80 +Block 0003 [117]: df438c508fc636ad +Block 0003 [118]: 94b1054862d5203a +Block 0003 [119]: 6e4f1e45898dba82 +Block 0003 [120]: 2b00c9cda99f2824 +Block 0003 [121]: f68ddd0fd8c7efe0 +Block 0003 [122]: 4faf35b95430fc43 +Block 0003 [123]: 09adc28b97ecf942 +Block 0003 [124]: 8bef2eb8712226f2 +Block 0003 [125]: 1be57ca4510531d2 +Block 0003 [126]: db6b46a50db33ef9 +Block 0003 [127]: d9871aeb9860bdc4 +Block 0004 [ 0]: 5f103c79d2da016e +Block 0004 [ 1]: eee0f4e13e3d408a +Block 0004 [ 2]: 5dac3a3b0c267dc0 +Block 0004 [ 3]: e7e4dd5e37f8be65 +Block 0004 [ 4]: cec7474083af3f60 +Block 0004 [ 5]: 95fb7feaf43b8be6 +Block 0004 [ 6]: 85d6a9e5c3a3f907 +Block 0004 [ 7]: e829e06d777ca98e +Block 0004 [ 8]: dcfd1b0ec732826c +Block 0004 [ 9]: 2cdefd109e8d3664 +Block 0004 [ 10]: 23ba90d2242bd021 +Block 0004 [ 11]: f86bd3217354cc3c +Block 0004 [ 12]: f79ce3b15e828607 +Block 0004 [ 13]: 83aae383ff27522f +Block 0004 [ 14]: 1d71b7ce3d807890 +Block 0004 [ 15]: 5d95cfd58d4d1f8c +Block 0004 [ 16]: 278cf931bd1e902a +Block 0004 [ 17]: 68fa20d22ba2aa27 +Block 0004 [ 18]: 9327a826bc94458f +Block 0004 [ 19]: 2501172b7436fe18 +Block 0004 [ 20]: 6f1c6c6d7179888e +Block 0004 [ 21]: f4446befe7c6ef7b +Block 0004 [ 22]: 84d0a72f5234af5a +Block 0004 [ 23]: 7394bf556f42d372 +Block 0004 [ 24]: acb72c38ced2fce7 +Block 0004 [ 25]: dea10a43040e26b2 +Block 0004 [ 26]: e77f7881689a7e3f +Block 0004 [ 27]: 83113c6790591257 +Block 0004 [ 28]: fe9c162fd48cb7d8 +Block 0004 [ 29]: 98ce1459c8390957 +Block 0004 [ 30]: bd0966102efc0163 +Block 0004 [ 31]: 1dc21f406c8f4ca5 +Block 0004 [ 32]: d8454639a35d8f9e +Block 0004 [ 33]: bf881beb1f767534 +Block 0004 [ 34]: 26288b46058cc1da +Block 0004 [ 35]: 413dd03618a00931 +Block 0004 [ 36]: f075d2081403a45b +Block 0004 [ 37]: 3cc6fea5be9893e4 +Block 0004 [ 38]: 22729e702fee4ce4 +Block 0004 [ 39]: 433011e48bc915db +Block 0004 [ 40]: 7e7d28c42751a323 +Block 0004 [ 41]: c67c60627460056b +Block 0004 [ 42]: 67a62b635341b39f +Block 0004 [ 43]: 0035c747ab878c83 +Block 0004 [ 44]: 4f0159abc209fa70 +Block 0004 [ 45]: 7696bf70050e4504 +Block 0004 [ 46]: 26fc497cdec0484d +Block 0004 [ 47]: 7be5f428ff505ed0 +Block 0004 [ 48]: 8bbe65a740edbbd9 +Block 0004 [ 49]: fd0216c36ed4ec06 +Block 0004 [ 50]: 353980216bb85309 +Block 0004 [ 51]: 5209b3883318741a +Block 0004 [ 52]: e299cd297f7b2f28 +Block 0004 [ 53]: c75e1bc0a94122b5 +Block 0004 [ 54]: 30bd876ace118de3 +Block 0004 [ 55]: c30156b792358312 +Block 0004 [ 56]: b06c27e9ae5a2e89 +Block 0004 [ 57]: 0ed2f057d2a6d8d9 +Block 0004 [ 58]: cbfbec25de3432fb +Block 0004 [ 59]: 32468164b6e0674d +Block 0004 [ 60]: b98ad9729363b082 +Block 0004 [ 61]: e2947ae8ab741abd +Block 0004 [ 62]: 8f3197f4de5f96a3 +Block 0004 [ 63]: 1dbc661b48b411f7 +Block 0004 [ 64]: 3509f4a7e745c326 +Block 0004 [ 65]: cfb820680c8d9be2 +Block 0004 [ 66]: 684ca83f500fda1b +Block 0004 [ 67]: 0de75f8640a01f43 +Block 0004 [ 68]: 325fbc7a5cba9916 +Block 0004 [ 69]: 1d18d81e36e58e94 +Block 0004 [ 70]: e71446e04328bed6 +Block 0004 [ 71]: ebd7f55759aa2912 +Block 0004 [ 72]: f5742bb63f673fef +Block 0004 [ 73]: 59a68c6bbdded65d +Block 0004 [ 74]: 85b002cb9cd71d15 +Block 0004 [ 75]: 0ac41456c7bddad7 +Block 0004 [ 76]: 6ac6ce40c3366d27 +Block 0004 [ 77]: 1a20a174adc1fbfb +Block 0004 [ 78]: 58f79bbc86149583 +Block 0004 [ 79]: 694506e12f0d36f8 +Block 0004 [ 80]: f8f2c809554e5b1a +Block 0004 [ 81]: 53a7dc845be334fe +Block 0004 [ 82]: 4a9131d02ccf2006 +Block 0004 [ 83]: 53a54f39969a27ee +Block 0004 [ 84]: 01cfbabc16bc8017 +Block 0004 [ 85]: 5a8e945f16d66035 +Block 0004 [ 86]: 8bbbe36c9b09a75d +Block 0004 [ 87]: b40e4c1cb50dc463 +Block 0004 [ 88]: a413bb190d1ce779 +Block 0004 [ 89]: dbdd0e71c83dfc68 +Block 0004 [ 90]: 32ba1eb6c9f3f028 +Block 0004 [ 91]: bcc99f21a9599f46 +Block 0004 [ 92]: 574636b0906e2dd3 +Block 0004 [ 93]: df111f20ab6f8e1a +Block 0004 [ 94]: c2d8a911b5f5d9a5 +Block 0004 [ 95]: 72bec94da09ffe7f +Block 0004 [ 96]: 1f14cea9804067db +Block 0004 [ 97]: 9d6c3f1bc1083432 +Block 0004 [ 98]: 73a2aadbe11f1f22 +Block 0004 [ 99]: 296f99c2f5d56e0b +Block 0004 [100]: fe74b6ff494c6fb0 +Block 0004 [101]: 6d2ebdd6ed290d80 +Block 0004 [102]: a3912c85e1036671 +Block 0004 [103]: 896a9c1bba98abdd +Block 0004 [104]: f174ddf24e51901f +Block 0004 [105]: 814150ce82c9a2d5 +Block 0004 [106]: 2d37595c363875f7 +Block 0004 [107]: 619771e8822004e7 +Block 0004 [108]: 935b811317780722 +Block 0004 [109]: c80e5b3e2f6ef79f +Block 0004 [110]: 62d855626bee4e94 +Block 0004 [111]: 8b43e0e640d7047b +Block 0004 [112]: 7c5fce5d045b0f97 +Block 0004 [113]: 2f9fd0f39d32d1d8 +Block 0004 [114]: cbb11bb386457bd2 +Block 0004 [115]: 0585288d1d9c986e +Block 0004 [116]: 613cbb2ffa954b64 +Block 0004 [117]: 6f5afd9be23f168e +Block 0004 [118]: dde300cbf5d3dc44 +Block 0004 [119]: 553b142212a32a0b +Block 0004 [120]: 042c170ebc9db65d +Block 0004 [121]: e551aed0fb8d12bd +Block 0004 [122]: 548a9bb03e34feda +Block 0004 [123]: d0a2064746a8003d +Block 0004 [124]: 8833977b70ec7fa4 +Block 0004 [125]: 192397378ba94c61 +Block 0004 [126]: 6ff2940ba5b14026 +Block 0004 [127]: 1ab6430ee436c0dd +Block 0005 [ 0]: 0de966218271a4ef +Block 0005 [ 1]: a2cfeb2c0d84198d +Block 0005 [ 2]: cfa60d565dfffca1 +Block 0005 [ 3]: 412f4c2588c3cc19 +Block 0005 [ 4]: 2728830ca24bb956 +Block 0005 [ 5]: b49f93ae79d1312f +Block 0005 [ 6]: 7306da5787f5ec0e +Block 0005 [ 7]: 1b8a34fdc9622b8c +Block 0005 [ 8]: e36370b335d7d928 +Block 0005 [ 9]: 49b86dbdccf03005 +Block 0005 [ 10]: 3b28005aa830ac5d +Block 0005 [ 11]: ca9b1344d3837c42 +Block 0005 [ 12]: 45c0c9b592e9b02f +Block 0005 [ 13]: cf0d005546e76fcd +Block 0005 [ 14]: e2def891d0fc245b +Block 0005 [ 15]: e90e1fc95f6596b3 +Block 0005 [ 16]: 0d62ca02afae51d9 +Block 0005 [ 17]: 93fc60ae47aa667c +Block 0005 [ 18]: 3718672a4e69c6d4 +Block 0005 [ 19]: da994e550ec5fdd3 +Block 0005 [ 20]: 80a8774d11086f21 +Block 0005 [ 21]: 57409662528e89c6 +Block 0005 [ 22]: 78558bcff1421a62 +Block 0005 [ 23]: 4ab11538852e391b +Block 0005 [ 24]: 13b25048138916a9 +Block 0005 [ 25]: 6148f40c5a20e12b +Block 0005 [ 26]: 4810c828883bf1df +Block 0005 [ 27]: f5fcb4e0a1a969c3 +Block 0005 [ 28]: a40583814da5f417 +Block 0005 [ 29]: 1cf1c7155698d64b +Block 0005 [ 30]: aa3ad1d538a2d02c +Block 0005 [ 31]: 4de3e769c1a3ad08 +Block 0005 [ 32]: 682669d5d0c75064 +Block 0005 [ 33]: f736e483fc776e37 +Block 0005 [ 34]: baa34ad440f7e5da +Block 0005 [ 35]: 2d3124c6a820d898 +Block 0005 [ 36]: c10dbfe5c258327a +Block 0005 [ 37]: 304c1f87ae94460e +Block 0005 [ 38]: 47a434b76b85d0be +Block 0005 [ 39]: 38e23fe30cc250a9 +Block 0005 [ 40]: d4fea920dc38e276 +Block 0005 [ 41]: 0b7ffb666eefc033 +Block 0005 [ 42]: 70338ebcb4e61d73 +Block 0005 [ 43]: 84bded0682d10c94 +Block 0005 [ 44]: dc5a559cdead2372 +Block 0005 [ 45]: 21c73103fb718573 +Block 0005 [ 46]: f9bbdac6c16e68d0 +Block 0005 [ 47]: b2bd3a0fe844c85f +Block 0005 [ 48]: 2ab10c961a078f5b +Block 0005 [ 49]: 39325e7ee2529990 +Block 0005 [ 50]: 9e6c5c8a54327c97 +Block 0005 [ 51]: 52ad7165f82b5620 +Block 0005 [ 52]: b5cc621f5c656ff2 +Block 0005 [ 53]: 380688bbca3ecd58 +Block 0005 [ 54]: 883889c2ea9d3295 +Block 0005 [ 55]: e079e44a0a62c366 +Block 0005 [ 56]: b8284494c8213bf1 +Block 0005 [ 57]: cdbe7f6c9ba93301 +Block 0005 [ 58]: 2d823bfcc8436620 +Block 0005 [ 59]: 1e158609ca45522a +Block 0005 [ 60]: 407a6f26a9fb16a7 +Block 0005 [ 61]: 218cf687d2746ee7 +Block 0005 [ 62]: 722be79206a7e5ad +Block 0005 [ 63]: 6bdc5a7cda224de3 +Block 0005 [ 64]: d8f66abdb2a506f5 +Block 0005 [ 65]: 2d54821b6d9a1cff +Block 0005 [ 66]: df77e54336ec9c2b +Block 0005 [ 67]: c499fdccf24a0513 +Block 0005 [ 68]: 87c5a41b01c159fe +Block 0005 [ 69]: db244459e270a8ef +Block 0005 [ 70]: 4aee9e7b4763c17a +Block 0005 [ 71]: 8f205d84ac9a1280 +Block 0005 [ 72]: 49197ac6271bbb2e +Block 0005 [ 73]: cdaf49b7a1767e0b +Block 0005 [ 74]: f7cf565d6c117301 +Block 0005 [ 75]: 88346bc563cf09c3 +Block 0005 [ 76]: 6ff639fb39b9d0c3 +Block 0005 [ 77]: e48aba9275f3daa9 +Block 0005 [ 78]: 7541718c0f5c899e +Block 0005 [ 79]: a422f5b2f1400761 +Block 0005 [ 80]: 8d6a5c361a594604 +Block 0005 [ 81]: e50ed69a6300ff68 +Block 0005 [ 82]: d16049e9eb4e38e8 +Block 0005 [ 83]: aa15939e849c1ebd +Block 0005 [ 84]: 059eb7b453f27287 +Block 0005 [ 85]: 45fb8533f5c7c986 +Block 0005 [ 86]: 4c76c301de9ab48c +Block 0005 [ 87]: 90b1a56887fd2c48 +Block 0005 [ 88]: 9fd7813a1508ff41 +Block 0005 [ 89]: 2a326b09fb8c9b9a +Block 0005 [ 90]: efb4350edbcdd5e6 +Block 0005 [ 91]: 7a36dc0b9babdeee +Block 0005 [ 92]: a25fe4ca39355228 +Block 0005 [ 93]: 5303077523d42415 +Block 0005 [ 94]: e026575393d878e2 +Block 0005 [ 95]: 373ce0152a6ee33c +Block 0005 [ 96]: 4f54a4afbcac993d +Block 0005 [ 97]: 36f7cc82d6a97698 +Block 0005 [ 98]: feddd35fdb839178 +Block 0005 [ 99]: a396259146239082 +Block 0005 [100]: cc1856fafbb4f906 +Block 0005 [101]: 85a1cf13ea55a8e6 +Block 0005 [102]: 16625d5ecefd1f48 +Block 0005 [103]: 6787085c993ce90f +Block 0005 [104]: 6d29d9f3d8e7dc82 +Block 0005 [105]: 44a6fbff8f68674c +Block 0005 [106]: ca8e8d86a15d66fe +Block 0005 [107]: 5cdcedee5006de76 +Block 0005 [108]: 2b090088bb3e641d +Block 0005 [109]: 258237f0878ffef1 +Block 0005 [110]: 8196ca4021a3eb70 +Block 0005 [111]: a2b8fe6e9572cff6 +Block 0005 [112]: c6d7aa973cf67d73 +Block 0005 [113]: 819e4db32d3f0c59 +Block 0005 [114]: 649053f6570cc68c +Block 0005 [115]: 3a3d451dc343d91d +Block 0005 [116]: 686e60f8c4207de9 +Block 0005 [117]: 3ee6eb06f251a0b8 +Block 0005 [118]: 32bf0426e100dc27 +Block 0005 [119]: af48b2f87b27c29f +Block 0005 [120]: 9b203f41b8d56660 +Block 0005 [121]: 100656e1838e23a3 +Block 0005 [122]: f3c1c20a03b2b109 +Block 0005 [123]: c14358b21020c956 +Block 0005 [124]: 100d50847f25bac5 +Block 0005 [125]: 6e474ffc741155a5 +Block 0005 [126]: d3837abc5cafb4b4 +Block 0005 [127]: 73413ce42e07707a +Block 0006 [ 0]: 207b10db5cffe8cc +Block 0006 [ 1]: 7313b549d3e7287a +Block 0006 [ 2]: 9a98eb99c3deb891 +Block 0006 [ 3]: 10069e28d0435cbf +Block 0006 [ 4]: e8ca034c80738973 +Block 0006 [ 5]: f1cb47ee4a476ca4 +Block 0006 [ 6]: f98e0d9a7b3678a9 +Block 0006 [ 7]: d87ddc69b89c26e3 +Block 0006 [ 8]: 5fb6984dca5a0935 +Block 0006 [ 9]: a74dc6254fd7a241 +Block 0006 [ 10]: fd190e53b4b1128a +Block 0006 [ 11]: da794330c18a845e +Block 0006 [ 12]: a1172aceb9a39806 +Block 0006 [ 13]: c73e42398788695a +Block 0006 [ 14]: db7ce46bae7ae7f8 +Block 0006 [ 15]: a1ba8bd31fb8f0ee +Block 0006 [ 16]: 74012a4340f94011 +Block 0006 [ 17]: efa47c287cf1a3ad +Block 0006 [ 18]: 6dc566a1c1f9638e +Block 0006 [ 19]: 3613a14178c896da +Block 0006 [ 20]: 0e38b0039e779469 +Block 0006 [ 21]: cf9888dc3ee62faf +Block 0006 [ 22]: 7367cf6b70ec5012 +Block 0006 [ 23]: d2f068c75b9b7789 +Block 0006 [ 24]: eb2a65901b5e03ee +Block 0006 [ 25]: 648b57529bde77bc +Block 0006 [ 26]: 4aff37b8b76729e6 +Block 0006 [ 27]: 609cbf9c2e072b5f +Block 0006 [ 28]: 46e369a4d063dedb +Block 0006 [ 29]: 373eb5b30e919ac0 +Block 0006 [ 30]: aa9243610f11f8b8 +Block 0006 [ 31]: 4fce70d711ae62ba +Block 0006 [ 32]: 564d752fbb623966 +Block 0006 [ 33]: a1f6ba47632f0206 +Block 0006 [ 34]: 62367c5cce6f7e03 +Block 0006 [ 35]: 82de40ea4cae8fc2 +Block 0006 [ 36]: 1309ab5fb6673aba +Block 0006 [ 37]: 4aca55f3f9f4aeb5 +Block 0006 [ 38]: b7b531d28376686a +Block 0006 [ 39]: f26fd9a982569b7b +Block 0006 [ 40]: 5b9ce5ded879f6e2 +Block 0006 [ 41]: 18c59a8d77053b18 +Block 0006 [ 42]: c499ad269fa61497 +Block 0006 [ 43]: 6e8b4060b8c502a8 +Block 0006 [ 44]: 9a8cb6bad14c9d0f +Block 0006 [ 45]: 1e98359f33b83bf7 +Block 0006 [ 46]: 1604438faacfdc2a +Block 0006 [ 47]: bedd53bcdb427d14 +Block 0006 [ 48]: 1dae57588a99d154 +Block 0006 [ 49]: 0fdcb29413b7167b +Block 0006 [ 50]: 23ce479ac77ec8fe +Block 0006 [ 51]: 3057176fbc13ce27 +Block 0006 [ 52]: 9d97168136290f32 +Block 0006 [ 53]: 10e9f9dfb8be79b7 +Block 0006 [ 54]: bf046bc5effedc65 +Block 0006 [ 55]: 1d119988b12ea53a +Block 0006 [ 56]: 62f88ac4a406d5f5 +Block 0006 [ 57]: 36e3dad6d5889c8f +Block 0006 [ 58]: c03ad9fdedb44c1a +Block 0006 [ 59]: 2ca0a0a505d6ad48 +Block 0006 [ 60]: 47b8d37b661e5d02 +Block 0006 [ 61]: d63f3d361ad0e2e8 +Block 0006 [ 62]: 0fec955ea758c8bd +Block 0006 [ 63]: de10b7c48004cb60 +Block 0006 [ 64]: 8e986ea33b73db2f +Block 0006 [ 65]: bb8e714f470452b1 +Block 0006 [ 66]: cdc713d39cd1ab4c +Block 0006 [ 67]: c05a6a8689e023c8 +Block 0006 [ 68]: 120b9b26cfd19db7 +Block 0006 [ 69]: b67ef16cc74f266b +Block 0006 [ 70]: 86cb36ab2f361439 +Block 0006 [ 71]: 29e7c9695a1d2a49 +Block 0006 [ 72]: 83f364c881607b8f +Block 0006 [ 73]: 23f6fa8bd886a772 +Block 0006 [ 74]: bed21643e5e7e5e1 +Block 0006 [ 75]: e2e97a56b51a2859 +Block 0006 [ 76]: 4d393e0b6d1d88bf +Block 0006 [ 77]: 35003e2abf8863ac +Block 0006 [ 78]: 0f488382a32f7c19 +Block 0006 [ 79]: 9ca2d208e38ce69f +Block 0006 [ 80]: 9625b25216944457 +Block 0006 [ 81]: 7e32ef15494d8452 +Block 0006 [ 82]: 4b1054077944dd66 +Block 0006 [ 83]: 1c036bb21867b709 +Block 0006 [ 84]: 303cd1949081adad +Block 0006 [ 85]: a0feb5be65aa2980 +Block 0006 [ 86]: a33c51024a269ba8 +Block 0006 [ 87]: 72035f020c2d5116 +Block 0006 [ 88]: c1b8f4a8bb0d6bef +Block 0006 [ 89]: 0c24bdf244970c9e +Block 0006 [ 90]: 458bdb8d42dff226 +Block 0006 [ 91]: da9ade8459a83877 +Block 0006 [ 92]: c62aa75f3ad8af18 +Block 0006 [ 93]: f3b0115b81a85189 +Block 0006 [ 94]: 4f8d10e3c8fa60bc +Block 0006 [ 95]: a8dc8bb82dd96d89 +Block 0006 [ 96]: ffbd8ca9279e0cab +Block 0006 [ 97]: fca3dc86e42bd209 +Block 0006 [ 98]: ea64792c1ebc8f5f +Block 0006 [ 99]: 3591955004fca6ee +Block 0006 [100]: 0ac25778983c4707 +Block 0006 [101]: 74368e8884bcdfec +Block 0006 [102]: 7151d6032e06d71c +Block 0006 [103]: c5c71b6560554c76 +Block 0006 [104]: de23bf17c2bb8819 +Block 0006 [105]: cfbb7295c3416e6a +Block 0006 [106]: 5df2f35264853653 +Block 0006 [107]: 1975d4925e2750d7 +Block 0006 [108]: 38c55cb4882a2065 +Block 0006 [109]: 9981db2c4bde5e81 +Block 0006 [110]: 7b60c41a8467a595 +Block 0006 [111]: 1f293556774eb26e +Block 0006 [112]: 41a0d1cbb6b9aebe +Block 0006 [113]: 74283de191cbbe30 +Block 0006 [114]: 6b4304c9721b5bed +Block 0006 [115]: e28ef6c6cb719ebb +Block 0006 [116]: 0008cae5ec0089d9 +Block 0006 [117]: ad90327c0ee207de +Block 0006 [118]: 447a5a24fcd4685d +Block 0006 [119]: 7facf44fef9d195e +Block 0006 [120]: 867f839cbc6f4034 +Block 0006 [121]: f06f3f89a4a07ca3 +Block 0006 [122]: 4edf63ff12b9ec51 +Block 0006 [123]: f3b59e506fa26a18 +Block 0006 [124]: d0076e1bcff93428 +Block 0006 [125]: 883962735cdcb10e +Block 0006 [126]: 91a342d726712b8d +Block 0006 [127]: ca9bfa6141a1cd99 +Block 0007 [ 0]: 92639f7eb0201bd1 +Block 0007 [ 1]: bff508c654d0a316 +Block 0007 [ 2]: c9e10ded181c85ba +Block 0007 [ 3]: dd0aa4c62496168a +Block 0007 [ 4]: 53e56c347c3e1748 +Block 0007 [ 5]: a7667ba20750c0ba +Block 0007 [ 6]: a61e71761bd77790 +Block 0007 [ 7]: 71aa5648045f8cc6 +Block 0007 [ 8]: 69c05be9057e6342 +Block 0007 [ 9]: e364571564765b59 +Block 0007 [ 10]: 9238a5a2f5275a39 +Block 0007 [ 11]: 258858e5c66c9c22 +Block 0007 [ 12]: 90001218c66bf46e +Block 0007 [ 13]: 62c859ae59c89890 +Block 0007 [ 14]: be72cd6ac393716e +Block 0007 [ 15]: 3d0e18a8bcfa640a +Block 0007 [ 16]: b375985c889a06fc +Block 0007 [ 17]: 7c13c1a3ac44b123 +Block 0007 [ 18]: 0c1fe0ed44844d8d +Block 0007 [ 19]: 67a5e7752a98dcdf +Block 0007 [ 20]: 1d3b696ebf5de5d1 +Block 0007 [ 21]: 90359e733d5c16c5 +Block 0007 [ 22]: 449f5afedd4f6996 +Block 0007 [ 23]: 97bcc0ff0a526ea9 +Block 0007 [ 24]: 13ed6824d6340099 +Block 0007 [ 25]: 354e5fbc6ca1ee51 +Block 0007 [ 26]: 9adfd16d27171d30 +Block 0007 [ 27]: 7f6316276addaf9c +Block 0007 [ 28]: b101e4b18cec1fa2 +Block 0007 [ 29]: d722bb7c8ddaa4cf +Block 0007 [ 30]: 724909c312c8404b +Block 0007 [ 31]: acf2bc435642575e +Block 0007 [ 32]: a39218a487e82583 +Block 0007 [ 33]: 8d14f885962058a5 +Block 0007 [ 34]: 9851440cfcde2435 +Block 0007 [ 35]: 492f52a3a4a9b67d +Block 0007 [ 36]: 970b91f982d92634 +Block 0007 [ 37]: 8442989dac511e75 +Block 0007 [ 38]: 203380bb904165df +Block 0007 [ 39]: d58a7d10d08d2272 +Block 0007 [ 40]: 79d5c3c7a956e43e +Block 0007 [ 41]: f7a74819963be129 +Block 0007 [ 42]: 061b0ae3c553a728 +Block 0007 [ 43]: a7721db2c9fcebeb +Block 0007 [ 44]: 3b1d4a9bbab3af2a +Block 0007 [ 45]: 811931ac1fa3f917 +Block 0007 [ 46]: acb7322a63fb6bda +Block 0007 [ 47]: 4984832580dd5c34 +Block 0007 [ 48]: 9ad12e5479f0c30c +Block 0007 [ 49]: d9473ecdaea89765 +Block 0007 [ 50]: c8caaf4bdf8f477e +Block 0007 [ 51]: 2fdaab5ff4b494e1 +Block 0007 [ 52]: fdef30421b7a39cd +Block 0007 [ 53]: 967217fa1e92ec59 +Block 0007 [ 54]: 728d382342a4159c +Block 0007 [ 55]: 1be6595bce295dbc +Block 0007 [ 56]: b4c40d238800cfc5 +Block 0007 [ 57]: 607c2d4a27c2b5e4 +Block 0007 [ 58]: 4fc7458f38ac2e19 +Block 0007 [ 59]: 846fea2ac878596d +Block 0007 [ 60]: af34e79d00b74c2a +Block 0007 [ 61]: 3956cc0c34643e42 +Block 0007 [ 62]: ba6d0365319d1bec +Block 0007 [ 63]: 60e4e131ada578d1 +Block 0007 [ 64]: 341af8d301af17ba +Block 0007 [ 65]: 9e9f8e4207a22688 +Block 0007 [ 66]: 9f79b73e65d02b06 +Block 0007 [ 67]: 59301917c3c15263 +Block 0007 [ 68]: 63e34dd709186a30 +Block 0007 [ 69]: ec7fd27fc8dbb1e5 +Block 0007 [ 70]: 440aa98a418a2131 +Block 0007 [ 71]: f9c5ba9031b1d826 +Block 0007 [ 72]: 0f4d36a43c029a63 +Block 0007 [ 73]: 1284d8e357e3bd01 +Block 0007 [ 74]: 3146e0c36173477b +Block 0007 [ 75]: 9c2fcd46d491155d +Block 0007 [ 76]: d25b78f7801545fd +Block 0007 [ 77]: cee8bc67c23b793e +Block 0007 [ 78]: f287bddf96962f7b +Block 0007 [ 79]: 890f655ea4780197 +Block 0007 [ 80]: 4ccdb583e3e68835 +Block 0007 [ 81]: 8e49d38352df80a8 +Block 0007 [ 82]: 9007f0b9b1644498 +Block 0007 [ 83]: 669e52534a22731f +Block 0007 [ 84]: 3ee66d53b92d25db +Block 0007 [ 85]: 3fa32c7f315a0bee +Block 0007 [ 86]: 75b06f3b0a679c4f +Block 0007 [ 87]: ce797b9e220966bf +Block 0007 [ 88]: fc782c6fe2e4bf15 +Block 0007 [ 89]: 508a1982385f1673 +Block 0007 [ 90]: 44713c78ff218860 +Block 0007 [ 91]: 5c57bb791463b88a +Block 0007 [ 92]: b556c28d6fffd834 +Block 0007 [ 93]: 02c839a4bea833dd +Block 0007 [ 94]: 1a6657fa702d17eb +Block 0007 [ 95]: 0aab5f5ea6a8025e +Block 0007 [ 96]: acac9efcbcf36c9c +Block 0007 [ 97]: 8656aec03615c4aa +Block 0007 [ 98]: 6bf56fc498e7d86f +Block 0007 [ 99]: 0dded31589058143 +Block 0007 [100]: bc0a945089635b30 +Block 0007 [101]: 11a4b1441f22f9e7 +Block 0007 [102]: 1e0f1d0b550519fa +Block 0007 [103]: b274b5ad1da912df +Block 0007 [104]: 9ca07448302011e4 +Block 0007 [105]: d9a97724cf0aef36 +Block 0007 [106]: a98a48483cf87837 +Block 0007 [107]: 16fe627774fe37f2 +Block 0007 [108]: 70ae49b3f2cba3de +Block 0007 [109]: c6019a28d8a84f51 +Block 0007 [110]: eeafcdadd890b0de +Block 0007 [111]: 612d51f03688bc5a +Block 0007 [112]: fe6e77f4f6aca6a5 +Block 0007 [113]: ae8b12a53d5578c6 +Block 0007 [114]: 4da5f1027fd097c3 +Block 0007 [115]: 1bdab124d64647aa +Block 0007 [116]: d4826060be069d2a +Block 0007 [117]: 408604168027ec6d +Block 0007 [118]: cd600a0f0e5aeaa4 +Block 0007 [119]: 6fbb6c43c9599aff +Block 0007 [120]: a2333bb2cd3ac800 +Block 0007 [121]: e66d8b6a4c823ae4 +Block 0007 [122]: 8e0606698decd1e7 +Block 0007 [123]: 92641e8250e01937 +Block 0007 [124]: fced8360f3192cb3 +Block 0007 [125]: 336ab5f395df00ad +Block 0007 [126]: 8a9c07658ef7a919 +Block 0007 [127]: 5ec2585c7bfc1859 +Block 0008 [ 0]: d7a32f2a0827cf48 +Block 0008 [ 1]: fe8e9442ca7c4a62 +Block 0008 [ 2]: 1ac3dc6903359815 +Block 0008 [ 3]: 0b8aa4ccce92d934 +Block 0008 [ 4]: 190ec5dd8cdd386e +Block 0008 [ 5]: 71029c05d16f33fe +Block 0008 [ 6]: 40fd5e4026f04da3 +Block 0008 [ 7]: 21ae9adc0a409886 +Block 0008 [ 8]: 3527516b3b50cd47 +Block 0008 [ 9]: fae211122ef4573f +Block 0008 [ 10]: b966633eefce1852 +Block 0008 [ 11]: 60286b42d102da9c +Block 0008 [ 12]: d2e444236395a76d +Block 0008 [ 13]: f3ceb35748329935 +Block 0008 [ 14]: 319a9a0cc9a31169 +Block 0008 [ 15]: 3df93869b18eba70 +Block 0008 [ 16]: c57e131d63fcedbc +Block 0008 [ 17]: 385aa44fdb7ff617 +Block 0008 [ 18]: cf0c30a4cc6101d3 +Block 0008 [ 19]: ed75e4cc5671b6d4 +Block 0008 [ 20]: 620b7dc94ff1745a +Block 0008 [ 21]: c0999aae6e9a6811 +Block 0008 [ 22]: b109ebd952882999 +Block 0008 [ 23]: 08544ca1ac4126c9 +Block 0008 [ 24]: 737cd559fcf13146 +Block 0008 [ 25]: 99381d9f2e261370 +Block 0008 [ 26]: 4d6bc4fbfe2a7172 +Block 0008 [ 27]: dc1979f94ea499e3 +Block 0008 [ 28]: 96067d03816361c7 +Block 0008 [ 29]: c63e0755acec2839 +Block 0008 [ 30]: c1e7c6a51b2d7641 +Block 0008 [ 31]: 08d90379743b61bd +Block 0008 [ 32]: 1c44e7b97c4219de +Block 0008 [ 33]: 857e0800382ca589 +Block 0008 [ 34]: 8433eebf9e376bd4 +Block 0008 [ 35]: 608b1b0186eea6a0 +Block 0008 [ 36]: 353d894da9c34618 +Block 0008 [ 37]: 4639dad690f86eba +Block 0008 [ 38]: f298b2ad3a061766 +Block 0008 [ 39]: d6f200ebb8e1690d +Block 0008 [ 40]: d3f9dd948ade14d4 +Block 0008 [ 41]: 31fdfe49f48b9ab1 +Block 0008 [ 42]: cf4cb128bd5b1eef +Block 0008 [ 43]: b5738119a2e3d243 +Block 0008 [ 44]: ffe9215e317c3db3 +Block 0008 [ 45]: fac8155e1d260771 +Block 0008 [ 46]: 1ca35710531e97f8 +Block 0008 [ 47]: 63980f2b3269a767 +Block 0008 [ 48]: 4a19b88413d2406e +Block 0008 [ 49]: ccb23a68dace3ab4 +Block 0008 [ 50]: db2e6cfd5f51b867 +Block 0008 [ 51]: e581eb27d138b8a4 +Block 0008 [ 52]: f3ba0e830dfa85ea +Block 0008 [ 53]: b19f82a630ccde90 +Block 0008 [ 54]: 7ca6e40cc6ea95cf +Block 0008 [ 55]: 02cc3c74c2ac7018 +Block 0008 [ 56]: 5b75a9db29883cdb +Block 0008 [ 57]: 68fd811e9657d448 +Block 0008 [ 58]: d0c70b19b4dc4445 +Block 0008 [ 59]: 337a8e2f147a9ac4 +Block 0008 [ 60]: 48ec26c7bcb09b5d +Block 0008 [ 61]: 7ee3b7f669944a69 +Block 0008 [ 62]: 85cbafaaabc1b7c0 +Block 0008 [ 63]: d378282d6a4fb14b +Block 0008 [ 64]: b5c4a859f972ba41 +Block 0008 [ 65]: 32f0e6bf92d52494 +Block 0008 [ 66]: 07a59fe5a1dcbefb +Block 0008 [ 67]: 65b8f375d97a8db7 +Block 0008 [ 68]: 094215233f0b5f31 +Block 0008 [ 69]: d4b8d0f377e48fb9 +Block 0008 [ 70]: 4d78725fbff27412 +Block 0008 [ 71]: 82b5f15be44fee37 +Block 0008 [ 72]: 6f08db1d8df4f3cf +Block 0008 [ 73]: faf6cede70806639 +Block 0008 [ 74]: ea2eba07c4477062 +Block 0008 [ 75]: 3482d24b81175403 +Block 0008 [ 76]: da24ea0a67f78c64 +Block 0008 [ 77]: 65e8b030ef344807 +Block 0008 [ 78]: 6c1c6aa7ee9efa9f +Block 0008 [ 79]: 5000bebc24e9ef81 +Block 0008 [ 80]: a6c7736f0d6b9957 +Block 0008 [ 81]: 7707cc16f7366011 +Block 0008 [ 82]: 10929dbf80c11f98 +Block 0008 [ 83]: 2c7d3a22de876b27 +Block 0008 [ 84]: 80fba4b809012410 +Block 0008 [ 85]: 056466ea9c0247b5 +Block 0008 [ 86]: 36956578b3fddd5f +Block 0008 [ 87]: 4e5743b85aa96859 +Block 0008 [ 88]: be09680812e0851e +Block 0008 [ 89]: 1e5bec4834ac4753 +Block 0008 [ 90]: d0f9372e3f60a200 +Block 0008 [ 91]: 5ab4bcef8bb03df9 +Block 0008 [ 92]: e2aea9de802983af +Block 0008 [ 93]: ffb26f08985e0ef1 +Block 0008 [ 94]: bb27500db2718bd8 +Block 0008 [ 95]: b45c0e6aaa63c7a5 +Block 0008 [ 96]: aa8b69bb102e1432 +Block 0008 [ 97]: 67f4724f3fe700e9 +Block 0008 [ 98]: b1fa8f95fa91138c +Block 0008 [ 99]: 74dcfc6303efd795 +Block 0008 [100]: 697820b63ee7881b +Block 0008 [101]: f1d5749128d4d216 +Block 0008 [102]: ca5eb06b4b2187ec +Block 0008 [103]: 6d4799a6e896b61c +Block 0008 [104]: 843d5dc3b6fbd6ef +Block 0008 [105]: e361b3c450ecbe54 +Block 0008 [106]: 3f2a65193e245e32 +Block 0008 [107]: ae54b6aaa09ce1c1 +Block 0008 [108]: 70a4df8bbfa5261c +Block 0008 [109]: 5df00fda80ad67f3 +Block 0008 [110]: 3ac1c4e9fb82980c +Block 0008 [111]: ea1f0237d8bd0dad +Block 0008 [112]: adafe0783378514b +Block 0008 [113]: efb23364e431ea53 +Block 0008 [114]: c884c5872ee09321 +Block 0008 [115]: 068919a5229618d7 +Block 0008 [116]: 7139accfe2fd404f +Block 0008 [117]: a2547790240851ef +Block 0008 [118]: 95eb676d47ba8dda +Block 0008 [119]: 4b9972623559149a +Block 0008 [120]: 57ff7b71148c3c54 +Block 0008 [121]: 8ffa691b244d70d4 +Block 0008 [122]: 09f8ffb1e6a08534 +Block 0008 [123]: 70a88fcae9d3ee9d +Block 0008 [124]: adcc44492f34a7fd +Block 0008 [125]: 62b1621dd05211f6 +Block 0008 [126]: 7c8764d0b5fba3a1 +Block 0008 [127]: d3ea7a45dd01bd53 +Block 0009 [ 0]: d08bd259d340d3c6 +Block 0009 [ 1]: 429557aed2016d51 +Block 0009 [ 2]: 77d12b978a1e2319 +Block 0009 [ 3]: c31ca96bc3b42584 +Block 0009 [ 4]: 962c4d3cc4a5e623 +Block 0009 [ 5]: 232c507b19dcc018 +Block 0009 [ 6]: e674558b67e49478 +Block 0009 [ 7]: 0c738b0c0e08dc01 +Block 0009 [ 8]: a3a4cea8b57f348e +Block 0009 [ 9]: 0b0bcc420dc8797d +Block 0009 [ 10]: 08de0203f13d7df6 +Block 0009 [ 11]: 59a6c3129e0ca977 +Block 0009 [ 12]: 313d1fe2cf306fff +Block 0009 [ 13]: 22aa2ef78c7bd925 +Block 0009 [ 14]: 509e5b5e3f9caa3d +Block 0009 [ 15]: d35f6e1bad7c86c0 +Block 0009 [ 16]: b8d48c2439aa2a25 +Block 0009 [ 17]: 2903a4a01fbf6f28 +Block 0009 [ 18]: 9837daa60b4a5d60 +Block 0009 [ 19]: e73aa62e324f8def +Block 0009 [ 20]: 7a8dedaef7c8081d +Block 0009 [ 21]: 8883f66b856f9b32 +Block 0009 [ 22]: bfc326c218d22ba8 +Block 0009 [ 23]: b8caa2dd6e3571fe +Block 0009 [ 24]: 65a52b4fca1522ce +Block 0009 [ 25]: 25cbc74d57b444df +Block 0009 [ 26]: 26fdc5d7ddf5b9e7 +Block 0009 [ 27]: 88228a1eeffe1815 +Block 0009 [ 28]: 8c45034ca552fcaf +Block 0009 [ 29]: 18e4642b4e82d914 +Block 0009 [ 30]: 4ff981f2eaf571b5 +Block 0009 [ 31]: 6e157fb736d60562 +Block 0009 [ 32]: 2b10660f514d312b +Block 0009 [ 33]: 22bf3a2837801aff +Block 0009 [ 34]: 61eafbb9e3b6fca0 +Block 0009 [ 35]: 823bd01b1aecd107 +Block 0009 [ 36]: b2a19bdfe12307ab +Block 0009 [ 37]: 8927f7176f855d06 +Block 0009 [ 38]: d4aef8e75777bdf1 +Block 0009 [ 39]: 206d9dccb1b939c8 +Block 0009 [ 40]: ac91b41fba63216e +Block 0009 [ 41]: b5b84fbdd569bfec +Block 0009 [ 42]: 146e312d7f6172c6 +Block 0009 [ 43]: de088fc95a4d0346 +Block 0009 [ 44]: b3c6e981c37559cb +Block 0009 [ 45]: 1001b9616071239d +Block 0009 [ 46]: 6bea9f89abb17a30 +Block 0009 [ 47]: 4a5a14d2853f60da +Block 0009 [ 48]: 41f418210e2573df +Block 0009 [ 49]: 5e39b91f69b7c397 +Block 0009 [ 50]: b521aaa82df655fc +Block 0009 [ 51]: 2f64b711ee0fc787 +Block 0009 [ 52]: d221cf816168ba5e +Block 0009 [ 53]: a39af1e90a530697 +Block 0009 [ 54]: aee2d02a683e92c2 +Block 0009 [ 55]: b5daa3e78190eec5 +Block 0009 [ 56]: cafd3d830ab10c85 +Block 0009 [ 57]: dbd796641fce27f9 +Block 0009 [ 58]: d24bfc0d8a99ab4b +Block 0009 [ 59]: 830bdc94684153de +Block 0009 [ 60]: 5b78fd0467e15764 +Block 0009 [ 61]: 55137012f62f906d +Block 0009 [ 62]: 866455113a07ed78 +Block 0009 [ 63]: 2191af3b847267ea +Block 0009 [ 64]: e5ebaa3dade7a97d +Block 0009 [ 65]: 5d8fb9aecb948a7f +Block 0009 [ 66]: 427619aedba4c182 +Block 0009 [ 67]: fb24b376bee4df10 +Block 0009 [ 68]: 95135cf1d29f80e2 +Block 0009 [ 69]: 2c51e533bdede03c +Block 0009 [ 70]: 52893b83af5480a4 +Block 0009 [ 71]: 1e0e0da7ac8c89d8 +Block 0009 [ 72]: f7c523e21b168bad +Block 0009 [ 73]: ea4e481e5969e7a9 +Block 0009 [ 74]: 39237fe8a127f2ea +Block 0009 [ 75]: 9c6d958103b2d551 +Block 0009 [ 76]: 75e38e8091abc932 +Block 0009 [ 77]: 3ddc63b07a1be378 +Block 0009 [ 78]: f11233b5add5cdff +Block 0009 [ 79]: 864ffb38776d09a1 +Block 0009 [ 80]: b6c93a2056ee2423 +Block 0009 [ 81]: f3b5e151ea4b7cf7 +Block 0009 [ 82]: bda60b0a42c98afc +Block 0009 [ 83]: 206c01f4b12908a5 +Block 0009 [ 84]: f9def6d5ac997ba6 +Block 0009 [ 85]: 01b680f90d692a0b +Block 0009 [ 86]: c4a90cb124152693 +Block 0009 [ 87]: 14d55e7fa42e375b +Block 0009 [ 88]: 2b8018bd80552d61 +Block 0009 [ 89]: 8eddde6c73a88c9d +Block 0009 [ 90]: 30c144a558c0e6c6 +Block 0009 [ 91]: 4f6c61db03719125 +Block 0009 [ 92]: 6771f4cdf1120f56 +Block 0009 [ 93]: a4a063679ad7d497 +Block 0009 [ 94]: 75aa05ef51f93d80 +Block 0009 [ 95]: 325c97906db37c77 +Block 0009 [ 96]: f09a14aa1fb090e1 +Block 0009 [ 97]: fa726606823f5fad +Block 0009 [ 98]: f8eb5b5c0703b09b +Block 0009 [ 99]: 228067ce5a3320ba +Block 0009 [100]: 1e74f435eb43fb9a +Block 0009 [101]: 004d5f043957d65a +Block 0009 [102]: 20dcf6bc285d9d0d +Block 0009 [103]: 848a0e38582a8944 +Block 0009 [104]: 3c1c49835ec69491 +Block 0009 [105]: 20063d3af3417cdc +Block 0009 [106]: 87dc824cb5c06c12 +Block 0009 [107]: 6525776d6502bb13 +Block 0009 [108]: 2e026670ca887659 +Block 0009 [109]: bd8efc8d29eb72af +Block 0009 [110]: 74991100959b9f7a +Block 0009 [111]: a5a2288c26fee2bb +Block 0009 [112]: 7283dd8ffcb0940d +Block 0009 [113]: 16a092fca662c662 +Block 0009 [114]: 5ed480134578c559 +Block 0009 [115]: 2663252693a54b82 +Block 0009 [116]: 95cf4c81e9f4ab71 +Block 0009 [117]: 4ab2f95d78af71da +Block 0009 [118]: 66eec9677f23b9f3 +Block 0009 [119]: 87ed8660f5c913c0 +Block 0009 [120]: fc892530429a248a +Block 0009 [121]: 03589e9cea760810 +Block 0009 [122]: 5b399da3f98c3128 +Block 0009 [123]: 26dcf9d52c2b9e31 +Block 0009 [124]: 5424678fc32d6683 +Block 0009 [125]: dc1009703fe5413b +Block 0009 [126]: 03ce3ad9c886da37 +Block 0009 [127]: f1a4cfd3a16361cf +Block 0010 [ 0]: f7102b7819862507 +Block 0010 [ 1]: df56220925ba6a2f +Block 0010 [ 2]: f51393014936014f +Block 0010 [ 3]: 15625042d501fdb0 +Block 0010 [ 4]: b21e29b86660cac3 +Block 0010 [ 5]: d29185b644e83366 +Block 0010 [ 6]: fa2820732246e503 +Block 0010 [ 7]: 7010a476d2a6d4d5 +Block 0010 [ 8]: ce54fa5cfee22a4a +Block 0010 [ 9]: f1ee891589e25001 +Block 0010 [ 10]: e25da33d7e215be9 +Block 0010 [ 11]: 384f8897822a8f92 +Block 0010 [ 12]: 65ee848c4bf3d662 +Block 0010 [ 13]: a945e8a041ebf8ff +Block 0010 [ 14]: fbcdf5feb172a921 +Block 0010 [ 15]: edd4b6fc18863cfa +Block 0010 [ 16]: 3ea4af86b1b8bcf1 +Block 0010 [ 17]: 5090e9061cdffe2b +Block 0010 [ 18]: 4ed2f171a8d3dc71 +Block 0010 [ 19]: 1d34acc8a37014b0 +Block 0010 [ 20]: 435fde3f03d94963 +Block 0010 [ 21]: ef7e011a248d9ab4 +Block 0010 [ 22]: b2713d0d04158674 +Block 0010 [ 23]: 34eda70ee54044aa +Block 0010 [ 24]: c17ffee696268e67 +Block 0010 [ 25]: bcf94972d44ac6aa +Block 0010 [ 26]: 62d4b2a710f28bc4 +Block 0010 [ 27]: cd3e1061b949f164 +Block 0010 [ 28]: 66bb3435151cb7c0 +Block 0010 [ 29]: 04927566e052dc70 +Block 0010 [ 30]: c6098d954b703238 +Block 0010 [ 31]: 6b38cac5f7e384fd +Block 0010 [ 32]: ad827462ecc594a1 +Block 0010 [ 33]: dc7dffd943b711d8 +Block 0010 [ 34]: 48acb309728fc0f3 +Block 0010 [ 35]: 23990349a973f2bd +Block 0010 [ 36]: 9858087a1350d908 +Block 0010 [ 37]: 830e4c7c0d3063ff +Block 0010 [ 38]: 353c20afdd0ce145 +Block 0010 [ 39]: 477c80401d92b4bb +Block 0010 [ 40]: 223aaa363c3131bc +Block 0010 [ 41]: 92bf771465be2dc7 +Block 0010 [ 42]: 4962650f4ca85833 +Block 0010 [ 43]: 9ff477d2bc5a5b4f +Block 0010 [ 44]: cedea84b3e0ae182 +Block 0010 [ 45]: 9bbb316a0430e7af +Block 0010 [ 46]: de5b2d55ef08bc41 +Block 0010 [ 47]: 4a68404c3af4cc55 +Block 0010 [ 48]: 322aa531e0e70d38 +Block 0010 [ 49]: d732a5c235c785f2 +Block 0010 [ 50]: d194b97d72dc3a39 +Block 0010 [ 51]: 6dbc081f1151718d +Block 0010 [ 52]: 82a2d3af9f897794 +Block 0010 [ 53]: 43d7a43718dc4bd2 +Block 0010 [ 54]: db61a4b356a2743a +Block 0010 [ 55]: 9ab6f0349b657e9f +Block 0010 [ 56]: 2c6065c9334fd4db +Block 0010 [ 57]: 5e2704a1d1060351 +Block 0010 [ 58]: 582a4a05cedddd44 +Block 0010 [ 59]: b958a045ff37830f +Block 0010 [ 60]: a34c2c509ac32f79 +Block 0010 [ 61]: 02ef34ca4730d0fa +Block 0010 [ 62]: 239172f43950d8fd +Block 0010 [ 63]: b79d7a305227b957 +Block 0010 [ 64]: ce660699f2567824 +Block 0010 [ 65]: 2226ac90308bc88b +Block 0010 [ 66]: 74afc00999644831 +Block 0010 [ 67]: 3b0ee6ea37495e91 +Block 0010 [ 68]: 6d04170b6116e08e +Block 0010 [ 69]: 57a1fffb9171a6c5 +Block 0010 [ 70]: 8e042dce88bf04e5 +Block 0010 [ 71]: a1f101a34208d1ff +Block 0010 [ 72]: 77be77d55ba39cf1 +Block 0010 [ 73]: f2f5463a10c77c0a +Block 0010 [ 74]: 54f36a5d93ebf9e0 +Block 0010 [ 75]: 1c270347feab23c3 +Block 0010 [ 76]: 4a4f45c009372f5f +Block 0010 [ 77]: 210b3203bd710469 +Block 0010 [ 78]: 0e3b847d4b92d146 +Block 0010 [ 79]: b3f0c7a18d6da095 +Block 0010 [ 80]: 53d3d14e7bc0cc98 +Block 0010 [ 81]: 3b8a954fce979752 +Block 0010 [ 82]: 8571c0ff14544b35 +Block 0010 [ 83]: cf52cb49f383d078 +Block 0010 [ 84]: 34b9a8d088b46a7d +Block 0010 [ 85]: 0c02556204f91c44 +Block 0010 [ 86]: 4ff85a111866656c +Block 0010 [ 87]: e8b7f0a60d9d78b0 +Block 0010 [ 88]: 7d50a0180d5ab40e +Block 0010 [ 89]: 5f26a2da9d155f4a +Block 0010 [ 90]: cb8e7b8dccbb09e2 +Block 0010 [ 91]: 548c3d903b2c3721 +Block 0010 [ 92]: dbed09ba9901f9af +Block 0010 [ 93]: 8f3bd6baed72f42f +Block 0010 [ 94]: c0523988601177b1 +Block 0010 [ 95]: 9479077ded200101 +Block 0010 [ 96]: 22bb9c0414c5311d +Block 0010 [ 97]: 0aa62726ef5006b1 +Block 0010 [ 98]: 65725877f28d41c0 +Block 0010 [ 99]: 1bf3fbbf62dc434f +Block 0010 [100]: 8d24325a2de1c34c +Block 0010 [101]: ad1ebc03915d3632 +Block 0010 [102]: a80744af224bc6e5 +Block 0010 [103]: a42f36ce1b331fa7 +Block 0010 [104]: 7f5b84c2264dde29 +Block 0010 [105]: 9d68aa35b0346155 +Block 0010 [106]: 106ec871bc9af474 +Block 0010 [107]: 0f30036315e3358f +Block 0010 [108]: ea0e307ee2de4cc0 +Block 0010 [109]: b8c78ff0b390416c +Block 0010 [110]: cb061486cafe634b +Block 0010 [111]: 1f65dc0a96c2df8c +Block 0010 [112]: 63509f1498fc4195 +Block 0010 [113]: 7958c9554127aa5d +Block 0010 [114]: aea53f20e9ae91f8 +Block 0010 [115]: d96a52977e99cfa9 +Block 0010 [116]: 9dd0669bf8bb9e4c +Block 0010 [117]: 17335cfb0b4a101b +Block 0010 [118]: ac83e8c088b3faa2 +Block 0010 [119]: e2d00f77ebdcb5d5 +Block 0010 [120]: 8953e063a53473cb +Block 0010 [121]: 0bf9340b692adf71 +Block 0010 [122]: 18e1d770623f5000 +Block 0010 [123]: b7f46f05950588e5 +Block 0010 [124]: bf82a3830897c743 +Block 0010 [125]: 45388ba792780880 +Block 0010 [126]: f298b7d1db9beaed +Block 0010 [127]: 80d82aaf83329f45 +Block 0011 [ 0]: 52b29e21da352337 +Block 0011 [ 1]: 2f0c85e24b2bb285 +Block 0011 [ 2]: 8bf5ede2af27b80b +Block 0011 [ 3]: d1d7798e3b7628b5 +Block 0011 [ 4]: 763577566ec4d2fb +Block 0011 [ 5]: 3e99eae6b9383da2 +Block 0011 [ 6]: 221dec4413c09f83 +Block 0011 [ 7]: f904d4d3e4bc9689 +Block 0011 [ 8]: 8f21dcec402bf89f +Block 0011 [ 9]: 68de13304dae5f9c +Block 0011 [ 10]: c464d43bf7ffb197 +Block 0011 [ 11]: 20d3b21625176b70 +Block 0011 [ 12]: e07b11307fa74f2e +Block 0011 [ 13]: 2a9fa72207dde048 +Block 0011 [ 14]: de300c37b9d59c53 +Block 0011 [ 15]: 8ed2a9fec9001675 +Block 0011 [ 16]: a411fa308bfb9948 +Block 0011 [ 17]: 01ae829642ff7219 +Block 0011 [ 18]: 5921b35dbafc1448 +Block 0011 [ 19]: cd2799228fd0dc30 +Block 0011 [ 20]: 00230c328bf3ef57 +Block 0011 [ 21]: d5a491d6021ae832 +Block 0011 [ 22]: c82ec6c1daaa93be +Block 0011 [ 23]: 40463c0836a29bd1 +Block 0011 [ 24]: 634d1419bbf24614 +Block 0011 [ 25]: 4a76864de4c728d4 +Block 0011 [ 26]: ccd8b6c9e22139c8 +Block 0011 [ 27]: b5e12193d76044c9 +Block 0011 [ 28]: 6d419f9ca6b2da18 +Block 0011 [ 29]: 631a3d2466f751c7 +Block 0011 [ 30]: eee3161ed510c1bc +Block 0011 [ 31]: 5c205b1ec867db89 +Block 0011 [ 32]: 57847ca52d6d1ca8 +Block 0011 [ 33]: a29a80eae282a2f9 +Block 0011 [ 34]: f75a6d57836ce3e3 +Block 0011 [ 35]: 46c644fe81a06770 +Block 0011 [ 36]: 89f77255596c64e7 +Block 0011 [ 37]: 557c8a199b0f3e57 +Block 0011 [ 38]: eece7fb87c820f63 +Block 0011 [ 39]: e9933bd1bfcb2efa +Block 0011 [ 40]: bc50e18635f727bb +Block 0011 [ 41]: d9abdabbba515124 +Block 0011 [ 42]: 3cf140d714fa3ab9 +Block 0011 [ 43]: 68b66ca1c4946d68 +Block 0011 [ 44]: 2cbe90f574d0aa6c +Block 0011 [ 45]: 942b66c749d50e3d +Block 0011 [ 46]: 14fe3b269ae7f924 +Block 0011 [ 47]: c34e24597c89e72d +Block 0011 [ 48]: 7db2d50634769bfc +Block 0011 [ 49]: 26b7f4115e5fa3e6 +Block 0011 [ 50]: 5c8811c8bb1f8518 +Block 0011 [ 51]: 5ccbd037664bbe60 +Block 0011 [ 52]: ae1a273e7682b4a7 +Block 0011 [ 53]: 992756342215636f +Block 0011 [ 54]: 41dd622f491d72ec +Block 0011 [ 55]: 157f7c4d6fa92e6b +Block 0011 [ 56]: 57f7c8e41f0843d8 +Block 0011 [ 57]: 06f4a658f7020d2f +Block 0011 [ 58]: b1900511e44d09ae +Block 0011 [ 59]: 2c636b5655bdca66 +Block 0011 [ 60]: f0cd0d2759b2a414 +Block 0011 [ 61]: aaa255272e910ba1 +Block 0011 [ 62]: f6cdfda91907a87b +Block 0011 [ 63]: 4daff4894e8c371c +Block 0011 [ 64]: 4b3fc1ed98b5c960 +Block 0011 [ 65]: 45aff93643e9bed6 +Block 0011 [ 66]: e57396cddcb85de0 +Block 0011 [ 67]: 453f06ae61b1ae84 +Block 0011 [ 68]: 92abd804af471c8c +Block 0011 [ 69]: de3db2263d007ea9 +Block 0011 [ 70]: 1cf00b12f02d302c +Block 0011 [ 71]: 4c98f282e6ed2ff4 +Block 0011 [ 72]: 7013d0175b3e1ade +Block 0011 [ 73]: 7d901f769d0fd762 +Block 0011 [ 74]: 554be32102a647ed +Block 0011 [ 75]: f027c617e3d22010 +Block 0011 [ 76]: 6e82b9c24aa56fea +Block 0011 [ 77]: dae2d2bbf585d44a +Block 0011 [ 78]: 8670017c6f7d7c45 +Block 0011 [ 79]: 95f5b9cc9521bf43 +Block 0011 [ 80]: 377311361d5e899f +Block 0011 [ 81]: c94963d5ff411540 +Block 0011 [ 82]: fd0a1ed433ef0547 +Block 0011 [ 83]: 0f52b42c428ecfa8 +Block 0011 [ 84]: 3da24c53fd340e11 +Block 0011 [ 85]: bc740a59bf3b9d91 +Block 0011 [ 86]: 47f7f84d80da6885 +Block 0011 [ 87]: cc33ce5dda2b18cd +Block 0011 [ 88]: a1079f9f43146d8d +Block 0011 [ 89]: 347b41316856a399 +Block 0011 [ 90]: de2a70e8fe948431 +Block 0011 [ 91]: 18f7a1e23950188c +Block 0011 [ 92]: e894053df2fb27d0 +Block 0011 [ 93]: 0bf2d7f61afac33a +Block 0011 [ 94]: f032f17390e9b43f +Block 0011 [ 95]: 76c2d93bdc87a6b2 +Block 0011 [ 96]: 5f94f381efd95cf0 +Block 0011 [ 97]: 780711e49c97fbf0 +Block 0011 [ 98]: ac9c82eade6bdeee +Block 0011 [ 99]: 5f55749397478696 +Block 0011 [100]: b6b8ee8ff05567af +Block 0011 [101]: 6215630fc4c7cd17 +Block 0011 [102]: c558c8971ccea93d +Block 0011 [103]: 55ba80c1a0b927b5 +Block 0011 [104]: f570ae43f549994c +Block 0011 [105]: 959ef14d47a74adf +Block 0011 [106]: 4ad49eefa6970106 +Block 0011 [107]: 32cd02e6655349bf +Block 0011 [108]: 3097c4d675de4902 +Block 0011 [109]: e1fdfd6688d3737f +Block 0011 [110]: 652ebc315836722f +Block 0011 [111]: 40f5ebd42d545915 +Block 0011 [112]: fbff4103ef433bc3 +Block 0011 [113]: 74d1748ea3a5bcd8 +Block 0011 [114]: 040978aca26fc2dd +Block 0011 [115]: 3650e07dce35b076 +Block 0011 [116]: 79100977dfc30b24 +Block 0011 [117]: ecc54d3e4c8bd3a6 +Block 0011 [118]: fe9a8fa9060ac214 +Block 0011 [119]: 850e726eeec182b6 +Block 0011 [120]: a21893e9f7760054 +Block 0011 [121]: bcb7f6992bd1051e +Block 0011 [122]: 69cc6743de97b4fc +Block 0011 [123]: 78a246a84319d5bc +Block 0011 [124]: 6719991920301152 +Block 0011 [125]: 62d3c940b1c82c4d +Block 0011 [126]: b8d54eaa8eefc9f1 +Block 0011 [127]: ef7cbc469902080a +Block 0012 [ 0]: b41d6643cd2d35e7 +Block 0012 [ 1]: 451993e7a1f452c9 +Block 0012 [ 2]: 19281a7c2c187a74 +Block 0012 [ 3]: f131ed721856f22c +Block 0012 [ 4]: f5aa54c24851e293 +Block 0012 [ 5]: 6daf0679c90cc7de +Block 0012 [ 6]: 6485b2c039fa9d7d +Block 0012 [ 7]: c6c2d967bf31e9aa +Block 0012 [ 8]: 6a373dfeb854197f +Block 0012 [ 9]: e721c34905b59088 +Block 0012 [ 10]: 177fe1b6c1bba1f4 +Block 0012 [ 11]: bdedea02f28e67ae +Block 0012 [ 12]: d96cf43dbb140033 +Block 0012 [ 13]: bc90d7ece2f06f22 +Block 0012 [ 14]: b1b149dbf7aafbf9 +Block 0012 [ 15]: 543a2bc21a6ef1c7 +Block 0012 [ 16]: c6adf0b95602151b +Block 0012 [ 17]: 1fa634a5014e68e0 +Block 0012 [ 18]: 156388d5b2cc39a4 +Block 0012 [ 19]: 3fa5584b8347398b +Block 0012 [ 20]: b80171c006813e45 +Block 0012 [ 21]: 93484f2494cb26a2 +Block 0012 [ 22]: d2a44226231d38b4 +Block 0012 [ 23]: 455dce0f0897d143 +Block 0012 [ 24]: 42a964a2f8b736a5 +Block 0012 [ 25]: 7b689eaed9d611cc +Block 0012 [ 26]: 748fac9d29981ff4 +Block 0012 [ 27]: 872a2f30efd85b27 +Block 0012 [ 28]: cc407811a5c3f5a3 +Block 0012 [ 29]: 5c901be277ec8973 +Block 0012 [ 30]: 1c2dd0eb9e25b060 +Block 0012 [ 31]: 57a92565827a07e5 +Block 0012 [ 32]: 1d1700d8734c11ec +Block 0012 [ 33]: 1edccd23555de63b +Block 0012 [ 34]: 10d90e9483ffdc52 +Block 0012 [ 35]: 9659c355ed944511 +Block 0012 [ 36]: df47ea500fa0a91f +Block 0012 [ 37]: c8eec40887899cb3 +Block 0012 [ 38]: 5afbb3990d6eb059 +Block 0012 [ 39]: c70615e230e7c4f6 +Block 0012 [ 40]: b7bafcae05874a33 +Block 0012 [ 41]: fa5d359d3482072a +Block 0012 [ 42]: 25106f2afcad8db9 +Block 0012 [ 43]: 1b5a77262e0c9ba6 +Block 0012 [ 44]: 5be08c2e2a919eae +Block 0012 [ 45]: 44bdb7ca0710d72e +Block 0012 [ 46]: 397cb3144bacf2ab +Block 0012 [ 47]: 511b264d429427f7 +Block 0012 [ 48]: aea9bc9f1b764af3 +Block 0012 [ 49]: 8d4a43506453f1d4 +Block 0012 [ 50]: 9806a89a986b115f +Block 0012 [ 51]: 0459b1632e869a12 +Block 0012 [ 52]: 4523dd7dd5485183 +Block 0012 [ 53]: f9c89833fdbda2ee +Block 0012 [ 54]: b89588ce4d5ba944 +Block 0012 [ 55]: afafcb5633f00c84 +Block 0012 [ 56]: 3677b05a67fa39bf +Block 0012 [ 57]: eafbe7bb4e4b8646 +Block 0012 [ 58]: 909a0b6387f8e49f +Block 0012 [ 59]: 6e858a5ea6670358 +Block 0012 [ 60]: 96915161672d880c +Block 0012 [ 61]: c179a9e40d93249a +Block 0012 [ 62]: e90403400d9b3166 +Block 0012 [ 63]: 1752659b1bae5d9f +Block 0012 [ 64]: 6fd39575db6a44e8 +Block 0012 [ 65]: 013de9bf0dbbdd11 +Block 0012 [ 66]: 73463d2189ada915 +Block 0012 [ 67]: 630fc52f88cb47b3 +Block 0012 [ 68]: ca4773724596e785 +Block 0012 [ 69]: cb5c2febf665f7b7 +Block 0012 [ 70]: 4e93e7dd9addea58 +Block 0012 [ 71]: 743c251ec9a34932 +Block 0012 [ 72]: 2056026bdde0ddaf +Block 0012 [ 73]: 8a2be10548d1b30b +Block 0012 [ 74]: a288353ffe05df65 +Block 0012 [ 75]: 5249529f94c8b330 +Block 0012 [ 76]: b4550cbf29ecdc90 +Block 0012 [ 77]: 962d8f1e68ef1beb +Block 0012 [ 78]: 84f687b4f6d8bb6e +Block 0012 [ 79]: 7444c30f326decca +Block 0012 [ 80]: 6fd686446a43aef2 +Block 0012 [ 81]: de5c7a070b961f9b +Block 0012 [ 82]: 21b25a9cd4f19753 +Block 0012 [ 83]: 88775ad5cdd7ea52 +Block 0012 [ 84]: aed154cdf4b74243 +Block 0012 [ 85]: 4ae9f92e0709773d +Block 0012 [ 86]: 107ff1bb7b349ad5 +Block 0012 [ 87]: aadc86f968bd0dcf +Block 0012 [ 88]: b4fed81d3a24dea6 +Block 0012 [ 89]: f2294093f5adcd7f +Block 0012 [ 90]: 7bb112a949891139 +Block 0012 [ 91]: dd9cd22cca3d4b50 +Block 0012 [ 92]: d3189d2bb0251c29 +Block 0012 [ 93]: 9d4ef66818294568 +Block 0012 [ 94]: fd6dbeeda6d42b41 +Block 0012 [ 95]: 34beb6e1fa79d1ff +Block 0012 [ 96]: 611fcfb5ea500a95 +Block 0012 [ 97]: 95c907722fb52e7e +Block 0012 [ 98]: ff44d6d256799080 +Block 0012 [ 99]: a0bed9defcd56afb +Block 0012 [100]: b580d489e3f02e54 +Block 0012 [101]: 72c5370840bf7f9b +Block 0012 [102]: 43441a6eab55953f +Block 0012 [103]: 945f22a7f40bb828 +Block 0012 [104]: dc99449d78dc5f4d +Block 0012 [105]: c7258afc1d62d9f3 +Block 0012 [106]: 53502b7babad94d8 +Block 0012 [107]: e44bb55a7247d194 +Block 0012 [108]: 703624923d1c44ac +Block 0012 [109]: de3b62036f77a962 +Block 0012 [110]: fdace61fd734e777 +Block 0012 [111]: e31fb59abb89ff5e +Block 0012 [112]: e0a50c2aa645a460 +Block 0012 [113]: 364d99f0e8cfaf47 +Block 0012 [114]: 0a3ceb5e14ae97fd +Block 0012 [115]: 068cf774cccf0b87 +Block 0012 [116]: 9078bf33cc1ea4cf +Block 0012 [117]: 102bdc8556c4aadc +Block 0012 [118]: 3d8218690d0a2275 +Block 0012 [119]: 02f8bb9d9554011e +Block 0012 [120]: b89e8162dfdc469e +Block 0012 [121]: e44a945e2c65f5d0 +Block 0012 [122]: af1e6328c8235052 +Block 0012 [123]: 1e841c1f63dea326 +Block 0012 [124]: 2db7659be0b50d50 +Block 0012 [125]: 50dccdf28a626d0e +Block 0012 [126]: d7c52028c281cd8c +Block 0012 [127]: e529fc89af20d455 +Block 0013 [ 0]: 3f79f1e30b5e7726 +Block 0013 [ 1]: 6b6c441852a1437f +Block 0013 [ 2]: 524c143552902847 +Block 0013 [ 3]: f9b339800d2d28cb +Block 0013 [ 4]: cf55d282c610193a +Block 0013 [ 5]: bf832f49274a60b8 +Block 0013 [ 6]: 45a4e7155816ac7e +Block 0013 [ 7]: e64bec13052f6941 +Block 0013 [ 8]: d6242b89535de78a +Block 0013 [ 9]: 918e2e27f15f721a +Block 0013 [ 10]: 31f4ea9a9d2857ff +Block 0013 [ 11]: 4c319ff476195c38 +Block 0013 [ 12]: d4355f6d48776116 +Block 0013 [ 13]: 93ffbeccc98cf397 +Block 0013 [ 14]: 25cfa21890d33df7 +Block 0013 [ 15]: cf5a579647ea0d8d +Block 0013 [ 16]: d727a14fcba6e5a0 +Block 0013 [ 17]: 6071de36f5e1028e +Block 0013 [ 18]: c93483002c5999dc +Block 0013 [ 19]: e58513e2865352fa +Block 0013 [ 20]: 03ca90a9f479c70e +Block 0013 [ 21]: e3a1a02a869e3683 +Block 0013 [ 22]: dacc0c5f28ba73cf +Block 0013 [ 23]: e1ae25441e581087 +Block 0013 [ 24]: 2e5a29a2d4985b3e +Block 0013 [ 25]: 6de6b2e0f421263f +Block 0013 [ 26]: 53dc84682df0c994 +Block 0013 [ 27]: f888d4cba517b460 +Block 0013 [ 28]: ff439db232b6fc9e +Block 0013 [ 29]: 7d58f7a83ac2c2e1 +Block 0013 [ 30]: c9b857272b2969d0 +Block 0013 [ 31]: 51855dab8e1357c6 +Block 0013 [ 32]: 16417e3b16743c74 +Block 0013 [ 33]: 0b32891249dc6a63 +Block 0013 [ 34]: a43b213b7bb8af74 +Block 0013 [ 35]: d4ed5f9f0696585a +Block 0013 [ 36]: e7082aad8d1d9fed +Block 0013 [ 37]: ccb027b71e7d70cf +Block 0013 [ 38]: 1908f7d226bd2374 +Block 0013 [ 39]: cd2c56282338cf35 +Block 0013 [ 40]: 465723b104c27515 +Block 0013 [ 41]: 6ebb42a9d3221d0d +Block 0013 [ 42]: 3edb4eacf01bbf7d +Block 0013 [ 43]: 86effc21d67d7342 +Block 0013 [ 44]: a18cb75bdb19e26b +Block 0013 [ 45]: 031ebbc38fca0940 +Block 0013 [ 46]: 9dca893dba6fabe7 +Block 0013 [ 47]: 16dc0a306d559c2c +Block 0013 [ 48]: 05d692d2e8d71369 +Block 0013 [ 49]: 7529565f8a9d4191 +Block 0013 [ 50]: 9dc457838464926f +Block 0013 [ 51]: 98dd7fe4c8308784 +Block 0013 [ 52]: 83f4a014c9dd1ebd +Block 0013 [ 53]: d1cf7b70be1c12a4 +Block 0013 [ 54]: df7fafe2f2b05c5c +Block 0013 [ 55]: 89f33833c8bb9933 +Block 0013 [ 56]: f8983927ab303c4f +Block 0013 [ 57]: ab385ef38e912d62 +Block 0013 [ 58]: 96b4e9e50cd94e26 +Block 0013 [ 59]: f8011b1cbea250a9 +Block 0013 [ 60]: 06cc68c9612a8547 +Block 0013 [ 61]: 9eb5fdb60d7dd9ff +Block 0013 [ 62]: 0ab426dd8341c5af +Block 0013 [ 63]: 6f5a384f223e4bda +Block 0013 [ 64]: 43a425b96623aad2 +Block 0013 [ 65]: 58a19d4d1e96aac2 +Block 0013 [ 66]: fefcab43331184f0 +Block 0013 [ 67]: 352a12578ddeebe8 +Block 0013 [ 68]: 5a8ba5c164aff53b +Block 0013 [ 69]: fd34095dec7f6a43 +Block 0013 [ 70]: 59ef6a514af304ee +Block 0013 [ 71]: b3f28a6b50e9eefc +Block 0013 [ 72]: f364142ad5f6f2a0 +Block 0013 [ 73]: 14c080411768f284 +Block 0013 [ 74]: 369ee6619b655c82 +Block 0013 [ 75]: 0e1b76fd96acdbe3 +Block 0013 [ 76]: 88616fdcf90cefd8 +Block 0013 [ 77]: a57f0eb8309ec5d2 +Block 0013 [ 78]: e46225f231033231 +Block 0013 [ 79]: 0f7bff3fb56060d0 +Block 0013 [ 80]: 864926034a3d58be +Block 0013 [ 81]: b4f4ff182a193fa9 +Block 0013 [ 82]: 42a9eda20b28ce4d +Block 0013 [ 83]: 48942f8c13152016 +Block 0013 [ 84]: b52c3f1d87a6b25e +Block 0013 [ 85]: c76ccf82bd8ace4a +Block 0013 [ 86]: eb6225fcafb3d553 +Block 0013 [ 87]: b38eeac9c4ed180b +Block 0013 [ 88]: 0e3726f21e5833e5 +Block 0013 [ 89]: 134bac0f131f4988 +Block 0013 [ 90]: 75d5e1d3db15b9ff +Block 0013 [ 91]: 7b85824230fe3a0c +Block 0013 [ 92]: ebd181d68697d465 +Block 0013 [ 93]: f197bfb66bc00c9f +Block 0013 [ 94]: 22bf2bfb071c6456 +Block 0013 [ 95]: d082ebcd3e459d4c +Block 0013 [ 96]: f44ca9dbaddfc73e +Block 0013 [ 97]: 0f4bd40e2efc8bcc +Block 0013 [ 98]: 9a177f8107cf3d7c +Block 0013 [ 99]: 35c4f26aad7c9e5b +Block 0013 [100]: 3a113403023d6b10 +Block 0013 [101]: 89daa9698721de5a +Block 0013 [102]: 0010e90c8d3451fb +Block 0013 [103]: ab8cea9f5a22f47b +Block 0013 [104]: abea62261666385e +Block 0013 [105]: c2fa2c669d87a44f +Block 0013 [106]: e97d4fee1a2ad6e5 +Block 0013 [107]: 39f4c7c19abf0718 +Block 0013 [108]: e902f38fd4a7f2e5 +Block 0013 [109]: 7883dc63e607eddf +Block 0013 [110]: d0d19d2d6ba8a80b +Block 0013 [111]: e87329db2f6aaf67 +Block 0013 [112]: efaabe1b2bf88c42 +Block 0013 [113]: f616ae68edba0dc3 +Block 0013 [114]: 58bf7d614b08eadd +Block 0013 [115]: b209c040f8a23484 +Block 0013 [116]: 1cde8c5201fb1b69 +Block 0013 [117]: 13b4333e71d45941 +Block 0013 [118]: 946305a39fe8b48b +Block 0013 [119]: 78a4c0885a91e21f +Block 0013 [120]: bc3fab5ac339e717 +Block 0013 [121]: 7d72b057bbb11f71 +Block 0013 [122]: a848b011f3c9bd93 +Block 0013 [123]: ba5bf9f6a7e1e947 +Block 0013 [124]: 4c929b7f7c4125d3 +Block 0013 [125]: c779bbe51677c684 +Block 0013 [126]: 7ce69656016bc8cc +Block 0013 [127]: 4060f77a3f4f375e +Block 0014 [ 0]: 36eb877e2cb684d6 +Block 0014 [ 1]: f9e8ab338f6c1e51 +Block 0014 [ 2]: 52faedc92b2e8b61 +Block 0014 [ 3]: 9bb1469da336c2a0 +Block 0014 [ 4]: 585fa4eec702f668 +Block 0014 [ 5]: fd7c1e2b7777ef25 +Block 0014 [ 6]: 2a7173209ca4ff4d +Block 0014 [ 7]: 0fcb08a71c391504 +Block 0014 [ 8]: 3b610bc5a7a224f5 +Block 0014 [ 9]: 25dd0a482210acc5 +Block 0014 [ 10]: 9694d8f19a8a0a91 +Block 0014 [ 11]: adfa18f2c0ca7f44 +Block 0014 [ 12]: 8ee2b1e1409e71bd +Block 0014 [ 13]: bea7a5183e79e431 +Block 0014 [ 14]: 98bd569af79c14f5 +Block 0014 [ 15]: b4dd008366f82442 +Block 0014 [ 16]: e9f3b4fc450e4d19 +Block 0014 [ 17]: bc9b583e1ee06e2c +Block 0014 [ 18]: 25cd0f442e01ed38 +Block 0014 [ 19]: edd96c9655cc3214 +Block 0014 [ 20]: 2b19a0e6b9ccb78a +Block 0014 [ 21]: 6b71b8e90c93cea0 +Block 0014 [ 22]: ad0b9f452be42586 +Block 0014 [ 23]: 52e78d83f9aee524 +Block 0014 [ 24]: c78174b11c8d5c1f +Block 0014 [ 25]: 0bd632f0fb2eae74 +Block 0014 [ 26]: 8c75e9efe3f75b38 +Block 0014 [ 27]: 712469cdfa1db23b +Block 0014 [ 28]: 625175cc28636029 +Block 0014 [ 29]: f7414204e9b1abb5 +Block 0014 [ 30]: cb2d8243eb03a7fd +Block 0014 [ 31]: b25d487501f1232d +Block 0014 [ 32]: 7ba19300c55e1518 +Block 0014 [ 33]: f380f524ba88d8fe +Block 0014 [ 34]: 23bdbd7438c69060 +Block 0014 [ 35]: a521773558402ff0 +Block 0014 [ 36]: dfdcb5870ffef2cc +Block 0014 [ 37]: c9fdcf18dc1f0529 +Block 0014 [ 38]: 2f9087ce5ac19e93 +Block 0014 [ 39]: 73b60c28230016b8 +Block 0014 [ 40]: f3ed5041b360449b +Block 0014 [ 41]: bbd4bc9021b7619d +Block 0014 [ 42]: ae9c40ba07422d8c +Block 0014 [ 43]: 09785605bd9eda18 +Block 0014 [ 44]: a6f7aa266270f957 +Block 0014 [ 45]: 051cdfcd704e0384 +Block 0014 [ 46]: 7387dbbf3e1a10c4 +Block 0014 [ 47]: 5dc0e14b24286a1f +Block 0014 [ 48]: e1d8bf350ff87374 +Block 0014 [ 49]: b9a99daa52530e06 +Block 0014 [ 50]: 116ffffb006a2144 +Block 0014 [ 51]: dd7a66d2e636a525 +Block 0014 [ 52]: 61db77a021ac3926 +Block 0014 [ 53]: 30d1f7744e647694 +Block 0014 [ 54]: 96fd74b22f5fcac1 +Block 0014 [ 55]: c1adc9f2b5a985ad +Block 0014 [ 56]: f09d8dacf51ec7c2 +Block 0014 [ 57]: aefd81d2e006dc85 +Block 0014 [ 58]: 9376229c3023edd2 +Block 0014 [ 59]: ae18700eda3b7964 +Block 0014 [ 60]: 8b997011c74aa16e +Block 0014 [ 61]: 4a552a9044f14799 +Block 0014 [ 62]: 9b5a9b4c5a5da0d0 +Block 0014 [ 63]: 3b8ee69a48ad75d5 +Block 0014 [ 64]: 87aec64397996f21 +Block 0014 [ 65]: 04eb7548c1fef388 +Block 0014 [ 66]: 6341ec25b8aa3747 +Block 0014 [ 67]: 35317eb9c4abfac9 +Block 0014 [ 68]: 45ea12041a15a084 +Block 0014 [ 69]: fda06c6db17ba115 +Block 0014 [ 70]: 7779d9b3b76283be +Block 0014 [ 71]: da844a2473775aac +Block 0014 [ 72]: 89f91c2c6564a50c +Block 0014 [ 73]: c8cd0aa7a3b1ddd7 +Block 0014 [ 74]: ff6abb5a4a485dad +Block 0014 [ 75]: d1ed559cae3e4b62 +Block 0014 [ 76]: 7b8437f83c6fc847 +Block 0014 [ 77]: 4e0be6962713d580 +Block 0014 [ 78]: 4443da814792ef38 +Block 0014 [ 79]: a93d0ea553d8a296 +Block 0014 [ 80]: a528a4bf080ac4c0 +Block 0014 [ 81]: 49dd9762b2f9aef2 +Block 0014 [ 82]: b2c920ce86a13d59 +Block 0014 [ 83]: 3dacedf3585ea447 +Block 0014 [ 84]: cbe8d2c6d0ad075a +Block 0014 [ 85]: a52b9f3aaa3b273c +Block 0014 [ 86]: ed2b0107316af4da +Block 0014 [ 87]: 5a10f265bb50b93d +Block 0014 [ 88]: 1417bf78895d5e7f +Block 0014 [ 89]: f5bcd9d996444e4d +Block 0014 [ 90]: 590307488b720fa3 +Block 0014 [ 91]: dea8e9d408b06dea +Block 0014 [ 92]: 872b059e9003b56b +Block 0014 [ 93]: 2ed43f98fd6f6254 +Block 0014 [ 94]: 93f57c98bd5b6cd7 +Block 0014 [ 95]: 9beeeb8e9207043f +Block 0014 [ 96]: dd54000038b5110d +Block 0014 [ 97]: 5332e79251d56378 +Block 0014 [ 98]: 5e48996dcaff378b +Block 0014 [ 99]: d56e7faf27afcffb +Block 0014 [100]: 90b6bed608144802 +Block 0014 [101]: 45cccf54d9317392 +Block 0014 [102]: 54ed8e4ac5dc2b76 +Block 0014 [103]: 885c812d8ff62a5f +Block 0014 [104]: bbcc2cb34eb38c9a +Block 0014 [105]: 9e9ebda71224a82f +Block 0014 [106]: 41b45afcdbc3c630 +Block 0014 [107]: 91d46218f582c264 +Block 0014 [108]: 0827c73740b561b5 +Block 0014 [109]: c4a54b4d6ec74a50 +Block 0014 [110]: 024ae95eaae719dc +Block 0014 [111]: 17117b346ffd2a35 +Block 0014 [112]: 39b7db4226a72f84 +Block 0014 [113]: 92886993615d1335 +Block 0014 [114]: 12b61372d0e851e0 +Block 0014 [115]: 8c4001f05b029c7c +Block 0014 [116]: 8a53cdb6444a882b +Block 0014 [117]: 3c685889fc62db28 +Block 0014 [118]: cfdc76e52e7c5f13 +Block 0014 [119]: f7f1a83420e11a14 +Block 0014 [120]: d5cb9b8ce8d28da4 +Block 0014 [121]: bed926b463fc5156 +Block 0014 [122]: a5f62e9940463b0a +Block 0014 [123]: a4089b6edc533caf +Block 0014 [124]: 097ac21fa0279d86 +Block 0014 [125]: 8c794c5f42e95e72 +Block 0014 [126]: d9d2a89c3ff25c4b +Block 0014 [127]: e012ba6c11d061f5 +Block 0015 [ 0]: fae64e566868810a +Block 0015 [ 1]: 8d81e940b129371d +Block 0015 [ 2]: 60106c5b4eb20b4c +Block 0015 [ 3]: 6e42f90ad23c62f6 +Block 0015 [ 4]: 131cc364e92de603 +Block 0015 [ 5]: de343b93a6d3549d +Block 0015 [ 6]: 1515a10f85cb86b3 +Block 0015 [ 7]: b57a75500f76cba3 +Block 0015 [ 8]: 75a2e082477a26e6 +Block 0015 [ 9]: 9a308ff19ea5aae9 +Block 0015 [ 10]: a8ad46a547e00b2f +Block 0015 [ 11]: 7275c3e38c70e7ff +Block 0015 [ 12]: 746ed2626d4cd88d +Block 0015 [ 13]: e922d7d439ec9044 +Block 0015 [ 14]: c0632b55bf466718 +Block 0015 [ 15]: ef8b572c9176d1f2 +Block 0015 [ 16]: f4492a45664b88f3 +Block 0015 [ 17]: 07527af74fabd39f +Block 0015 [ 18]: cb49229072c2db98 +Block 0015 [ 19]: 461026f699be3402 +Block 0015 [ 20]: b745dc7f8ebf58a0 +Block 0015 [ 21]: 194b7c920c12c491 +Block 0015 [ 22]: 1536ca06f172ea55 +Block 0015 [ 23]: 830173431c36eede +Block 0015 [ 24]: 463d0c62573022d6 +Block 0015 [ 25]: 62c887bed7ffa30b +Block 0015 [ 26]: ee75ec33cb8c4aa4 +Block 0015 [ 27]: 592d8ee4f8d69036 +Block 0015 [ 28]: b9a3ce12337d4c0f +Block 0015 [ 29]: 781e9fcad1891be8 +Block 0015 [ 30]: db46bad27e7e1dfe +Block 0015 [ 31]: 9028a7155a0860aa +Block 0015 [ 32]: a01a5ec2351afc02 +Block 0015 [ 33]: a09fb40edf104427 +Block 0015 [ 34]: 262fcbe6832677f2 +Block 0015 [ 35]: 5f52e7ce1df6560d +Block 0015 [ 36]: dc190299cc11093e +Block 0015 [ 37]: 34281d9238950010 +Block 0015 [ 38]: 225a27cf8bee7277 +Block 0015 [ 39]: 3429996a5c48f38d +Block 0015 [ 40]: c87e9a63ad2c0282 +Block 0015 [ 41]: 018b4e3e01fc9ecd +Block 0015 [ 42]: 392312f8091a3d85 +Block 0015 [ 43]: 7fd5794b59cd95fe +Block 0015 [ 44]: ef83133e4e2d939b +Block 0015 [ 45]: d0580c8013286eec +Block 0015 [ 46]: 5bbf1246d831f631 +Block 0015 [ 47]: 0054687cd3a0dec5 +Block 0015 [ 48]: 90ac0d297fa9aab7 +Block 0015 [ 49]: 51f36150003f7e04 +Block 0015 [ 50]: b9ef0b30c558aba6 +Block 0015 [ 51]: 460bc7e1538d62fd +Block 0015 [ 52]: 6d3e852ceeb68b69 +Block 0015 [ 53]: 568de03409ae5007 +Block 0015 [ 54]: c6ffdcfbeeaa12cb +Block 0015 [ 55]: 6a5e7db56071847c +Block 0015 [ 56]: d28c5793ae7d1d55 +Block 0015 [ 57]: 0267fd8e150f21be +Block 0015 [ 58]: 00bc5f653b17bf7b +Block 0015 [ 59]: 585da8b6ec306b61 +Block 0015 [ 60]: 1353061d1e353110 +Block 0015 [ 61]: 2fa207e0f1f0a407 +Block 0015 [ 62]: 7c977b733683ac75 +Block 0015 [ 63]: 241449dccd64fb26 +Block 0015 [ 64]: 338082d508dafcb0 +Block 0015 [ 65]: 3cd8e424bce5d327 +Block 0015 [ 66]: 31cce94299bf729a +Block 0015 [ 67]: f17f0248495e1a5b +Block 0015 [ 68]: 36e2da2618aa0127 +Block 0015 [ 69]: 38b639fb327e03b1 +Block 0015 [ 70]: a43510ced8f7dc89 +Block 0015 [ 71]: b3bfbbf1b59bbd75 +Block 0015 [ 72]: 75c1d4dff925a032 +Block 0015 [ 73]: 77c09a0b485faa19 +Block 0015 [ 74]: 8dd892fbb9ff328a +Block 0015 [ 75]: 017b4d0408cf7bbe +Block 0015 [ 76]: 51f3c7cba9a58139 +Block 0015 [ 77]: 049e4a5ccc4b17f9 +Block 0015 [ 78]: 19616ffc15a221e6 +Block 0015 [ 79]: 2ce8c0e5d2e7d1ab +Block 0015 [ 80]: 79c0d484fb10455e +Block 0015 [ 81]: a3fc63a5f8a9b9c0 +Block 0015 [ 82]: 9cfebe8a3d549467 +Block 0015 [ 83]: 09c06fe1b4c3a7c7 +Block 0015 [ 84]: 8607f6041ada778b +Block 0015 [ 85]: fae4e290100273e7 +Block 0015 [ 86]: fdd1e469396a400b +Block 0015 [ 87]: 4cd57f460af7a766 +Block 0015 [ 88]: 23321695a8adaf2e +Block 0015 [ 89]: fdfa218394a41fc8 +Block 0015 [ 90]: 9db89b71db54b466 +Block 0015 [ 91]: b405819d71bee318 +Block 0015 [ 92]: f7696c155cbb0ba0 +Block 0015 [ 93]: b5bee158592d57e7 +Block 0015 [ 94]: 618aa1003551b462 +Block 0015 [ 95]: b61d64015dc2a730 +Block 0015 [ 96]: 5b4387973c664b83 +Block 0015 [ 97]: c2fa9ee8ac6b02f9 +Block 0015 [ 98]: e3221b93bea4bf64 +Block 0015 [ 99]: 6dee17d482d317fd +Block 0015 [100]: 1130d6a3d3173623 +Block 0015 [101]: c9b57db857fdc466 +Block 0015 [102]: 9318a307bd7dd5df +Block 0015 [103]: f3efea82eb010ea7 +Block 0015 [104]: 835aa1bb7f95a2a6 +Block 0015 [105]: 97788be80f52b675 +Block 0015 [106]: 064691f59ec2de3d +Block 0015 [107]: 4aad4ab8889ac979 +Block 0015 [108]: 9f77af86a93272be +Block 0015 [109]: 57e46db473688315 +Block 0015 [110]: 9f45f229a6d63e5e +Block 0015 [111]: 37858db05cfa4789 +Block 0015 [112]: abe16cff88d854a9 +Block 0015 [113]: 85fef1d6f322d26c +Block 0015 [114]: 85558f7f6c6bf35d +Block 0015 [115]: 54be5379ce62b83b +Block 0015 [116]: f0427f7a71563307 +Block 0015 [117]: 695bd133f77e11a2 +Block 0015 [118]: 9efe3ed4696fdc1e +Block 0015 [119]: 703c4220f9092896 +Block 0015 [120]: ee71111a428823a2 +Block 0015 [121]: 2bdf0bc45eec47de +Block 0015 [122]: 50f379acec7ee7b8 +Block 0015 [123]: 6a7ce42b0a5ebc49 +Block 0015 [124]: 974e974bd88474c1 +Block 0015 [125]: d861a0a5c5c10163 +Block 0015 [126]: 73bdaf6e50134eb1 +Block 0015 [127]: acf7664666733c67 +Block 0016 [ 0]: 50ab0f9bfac24f78 +Block 0016 [ 1]: 76e94cfff68ea616 +Block 0016 [ 2]: c00150a5b14757e7 +Block 0016 [ 3]: 4d19657ab2083347 +Block 0016 [ 4]: 017ccdbd18f7aa76 +Block 0016 [ 5]: c8627a4acfcf9382 +Block 0016 [ 6]: 635afa6f665f6306 +Block 0016 [ 7]: 82a8a745b4d6d8ae +Block 0016 [ 8]: 4582bba135f3b4a1 +Block 0016 [ 9]: 526f1a88af7428bd +Block 0016 [ 10]: 9494aa25932ca80f +Block 0016 [ 11]: 90887f9ad9692795 +Block 0016 [ 12]: 967c01323dd819cc +Block 0016 [ 13]: b15b74896960da9a +Block 0016 [ 14]: b25030a5374f74da +Block 0016 [ 15]: e3383256ba6017ff +Block 0016 [ 16]: d999eb0ee0664b0c +Block 0016 [ 17]: f641eb0285a3c506 +Block 0016 [ 18]: 1b3bbbabcdb8314a +Block 0016 [ 19]: bb0fefad44cf0cac +Block 0016 [ 20]: e8e80497833606fc +Block 0016 [ 21]: dd7d61d1f3e68772 +Block 0016 [ 22]: 7ef78dd8add877e7 +Block 0016 [ 23]: 92a015aad5502ec8 +Block 0016 [ 24]: 4d31d23941318dd6 +Block 0016 [ 25]: e2559bbb689e5fb4 +Block 0016 [ 26]: e2503c10c55eaf2a +Block 0016 [ 27]: f903e0f1ac637eb5 +Block 0016 [ 28]: 5fa77cf36d36fc99 +Block 0016 [ 29]: b49c467b28d24b67 +Block 0016 [ 30]: c71141752046355f +Block 0016 [ 31]: 4f02b25bf2fbd626 +Block 0016 [ 32]: 266976c4945f8a20 +Block 0016 [ 33]: 4dff49abef037976 +Block 0016 [ 34]: 1db92cf72045c0ce +Block 0016 [ 35]: 646d8c11e8cc7da8 +Block 0016 [ 36]: d69609eed1e112eb +Block 0016 [ 37]: f71f70d33e21865e +Block 0016 [ 38]: 99723999d0b88330 +Block 0016 [ 39]: 602c4d8d6bc8f7d5 +Block 0016 [ 40]: 0675d32998c77081 +Block 0016 [ 41]: 74ec88c7c20a9ce9 +Block 0016 [ 42]: 2d6be9f55b35e386 +Block 0016 [ 43]: c5dceca8c3e9aa0e +Block 0016 [ 44]: ef7c553de2ac1b6e +Block 0016 [ 45]: ed1d4f23e7a0ec44 +Block 0016 [ 46]: ecaa70a863786230 +Block 0016 [ 47]: 6c00fb7c75083cba +Block 0016 [ 48]: 358ab6100cfadb0e +Block 0016 [ 49]: d355f128ad812a42 +Block 0016 [ 50]: 6e5ff1b32f8cd116 +Block 0016 [ 51]: b652b670ced34b15 +Block 0016 [ 52]: 869f55f7d310d958 +Block 0016 [ 53]: 1c7ab17e1b2a923c +Block 0016 [ 54]: 9bb5d4bcc6c5fb44 +Block 0016 [ 55]: abdd670dcbc1ab98 +Block 0016 [ 56]: 13f1ea2cd9968cf2 +Block 0016 [ 57]: 4468b4a8063832f4 +Block 0016 [ 58]: 5cd65db1b412d694 +Block 0016 [ 59]: 15ccb512736cd4f8 +Block 0016 [ 60]: ba3e10fd0ca3138b +Block 0016 [ 61]: da3c85d02e8eb749 +Block 0016 [ 62]: de0b8e8e36f82366 +Block 0016 [ 63]: 0842ec8f33175a3c +Block 0016 [ 64]: 2a1bc0208d7d4a97 +Block 0016 [ 65]: 16530cb323ff1d7d +Block 0016 [ 66]: 1f0966930be20b84 +Block 0016 [ 67]: bb9512a98ef21706 +Block 0016 [ 68]: bdd948ccde317cd6 +Block 0016 [ 69]: 7fa5e561bc345638 +Block 0016 [ 70]: 6fc7243a84e185dc +Block 0016 [ 71]: dfad6179cb99a475 +Block 0016 [ 72]: 9e61c0bb96277f9b +Block 0016 [ 73]: e6b08e6cad02b1cd +Block 0016 [ 74]: 78ac4aeb2e48dc4b +Block 0016 [ 75]: 6abc9082cae40c99 +Block 0016 [ 76]: 51a1fdb5e4afbb95 +Block 0016 [ 77]: 55740e7c226f47ba +Block 0016 [ 78]: d38187c139231aa1 +Block 0016 [ 79]: 9f8284a871165782 +Block 0016 [ 80]: 9e825895c153205a +Block 0016 [ 81]: 7e4c90935b6ffe4e +Block 0016 [ 82]: a357f20371f2a364 +Block 0016 [ 83]: 318e03f3f2513efb +Block 0016 [ 84]: 1c42a251389bd43a +Block 0016 [ 85]: 8564c0d088201c30 +Block 0016 [ 86]: 7fca97b124234e78 +Block 0016 [ 87]: b00bd077743cda70 +Block 0016 [ 88]: b055fd596a99aca0 +Block 0016 [ 89]: 34771a1332ffd9b4 +Block 0016 [ 90]: 78064a51b2f57bb7 +Block 0016 [ 91]: b6978318f72a3ccc +Block 0016 [ 92]: 3d3f08940ddfa044 +Block 0016 [ 93]: 87c148a2bcc7728f +Block 0016 [ 94]: e4cd764d8ab0deb1 +Block 0016 [ 95]: 549d8816dc2c1d5b +Block 0016 [ 96]: 0247cc6a27c0578c +Block 0016 [ 97]: 571f950746e01e76 +Block 0016 [ 98]: 900bf2c386989787 +Block 0016 [ 99]: 9e4c53d37c530595 +Block 0016 [100]: bb6db1a208af1e6a +Block 0016 [101]: b6cac57f894b24b7 +Block 0016 [102]: d16d7ef19e90d4bd +Block 0016 [103]: c8d8ef59dbe1a8c2 +Block 0016 [104]: c1f551eebbf00b0d +Block 0016 [105]: fe625b5dfd27d1f1 +Block 0016 [106]: d4aca3870d30cfa4 +Block 0016 [107]: 53b585bf2b9a34eb +Block 0016 [108]: e554344eab7dec31 +Block 0016 [109]: 8ca4ee2b6de70004 +Block 0016 [110]: 8612d6c8a635b35e +Block 0016 [111]: 494263004ad7e202 +Block 0016 [112]: 5e80b92e4d0d81e2 +Block 0016 [113]: c189db989da4db9a +Block 0016 [114]: 9fadfa6afccbbe8a +Block 0016 [115]: 6b69af4f59accb96 +Block 0016 [116]: 315bf00062219e81 +Block 0016 [117]: 471cc1fd1305a04a +Block 0016 [118]: 753f539eb4dd0e81 +Block 0016 [119]: 8927ac6207b8482a +Block 0016 [120]: 7f8216083c95518f +Block 0016 [121]: 8d5a275aabb839f2 +Block 0016 [122]: 53cdeeb793a608e9 +Block 0016 [123]: 1fb14ce52c620b71 +Block 0016 [124]: c37c9e2533a5c59e +Block 0016 [125]: 563255fb5ee7c5f7 +Block 0016 [126]: 46b2bc381f2d0cdb +Block 0016 [127]: 022b6a3f91aa7fe6 +Block 0017 [ 0]: f148c6ecfacf9073 +Block 0017 [ 1]: 4c2e5320c6a82272 +Block 0017 [ 2]: c85fa2b8cc946410 +Block 0017 [ 3]: 8641a7078f51c3bb +Block 0017 [ 4]: 1a1a5660deb38c86 +Block 0017 [ 5]: 9f9021e30fef3113 +Block 0017 [ 6]: 162b92533a701e91 +Block 0017 [ 7]: 1ff3c3be2ca424fc +Block 0017 [ 8]: 9863521a2fcc57d3 +Block 0017 [ 9]: 48a8854bcaf7a038 +Block 0017 [ 10]: 146063d72bc22e43 +Block 0017 [ 11]: 24df9b1f4ea286a8 +Block 0017 [ 12]: 2790a76d3c1763b7 +Block 0017 [ 13]: 1bc7152d8e234249 +Block 0017 [ 14]: d8e02822fd457154 +Block 0017 [ 15]: 70ceee9275bfacb2 +Block 0017 [ 16]: 9d3772a593d4dbcd +Block 0017 [ 17]: 422e9bfe5dc92050 +Block 0017 [ 18]: 60e0d65beab7c333 +Block 0017 [ 19]: 236ec0961a3ec888 +Block 0017 [ 20]: 370f39ef4114dc14 +Block 0017 [ 21]: d84485b6ed907549 +Block 0017 [ 22]: d84b2719fdea3830 +Block 0017 [ 23]: afabab6a0aef3b37 +Block 0017 [ 24]: b20c3789e2428092 +Block 0017 [ 25]: fe219a3fccb3f109 +Block 0017 [ 26]: 49a2b15d29d94d35 +Block 0017 [ 27]: a8a33c545ca0a806 +Block 0017 [ 28]: 87ee050651ec250c +Block 0017 [ 29]: cf2d7d720281726d +Block 0017 [ 30]: 39c95dd1a0cc479e +Block 0017 [ 31]: bf7ba9a85a58dfeb +Block 0017 [ 32]: 8a58d87bc1d64e80 +Block 0017 [ 33]: 1c1e5872a341c842 +Block 0017 [ 34]: f6ed8ebe2c5fb8f7 +Block 0017 [ 35]: 204e8c80cb442cf6 +Block 0017 [ 36]: 439feed11ebdc53d +Block 0017 [ 37]: f2a15c2e5e9203f9 +Block 0017 [ 38]: fdb84ef6548b0d53 +Block 0017 [ 39]: 27eabee46992a24b +Block 0017 [ 40]: 3d85395558467bef +Block 0017 [ 41]: ee324a06a5df5c58 +Block 0017 [ 42]: a22120d5f734e984 +Block 0017 [ 43]: 2bc5053e90ba8225 +Block 0017 [ 44]: e09f8948fbf44b20 +Block 0017 [ 45]: 896d207c32bd6b2d +Block 0017 [ 46]: 7bfa2e74b6011818 +Block 0017 [ 47]: 0889d124b7c363aa +Block 0017 [ 48]: b8ce5f77da6250aa +Block 0017 [ 49]: 7411129130218a47 +Block 0017 [ 50]: 37bdb739c55b5dd0 +Block 0017 [ 51]: 539e3e5695d9132e +Block 0017 [ 52]: d45f10156352999a +Block 0017 [ 53]: 3589cd477c5dec79 +Block 0017 [ 54]: 0ed10a28987665fc +Block 0017 [ 55]: 8eb3aaf7cb073a56 +Block 0017 [ 56]: f025d1b5eff402b3 +Block 0017 [ 57]: 6f5327448591fb37 +Block 0017 [ 58]: f530dcea50113637 +Block 0017 [ 59]: 75d2d8f0b0697456 +Block 0017 [ 60]: 8bd10f66b3aebaca +Block 0017 [ 61]: 6f93760f7113d397 +Block 0017 [ 62]: 42e8504c969a9ca3 +Block 0017 [ 63]: d122bf99d1f2738a +Block 0017 [ 64]: 050f1ef18fe956dd +Block 0017 [ 65]: 7f9a0b2a550f4886 +Block 0017 [ 66]: c211410f6f6346b7 +Block 0017 [ 67]: d21fac80ef0580f7 +Block 0017 [ 68]: 313089c250c94891 +Block 0017 [ 69]: 5b8c12ab6f45d396 +Block 0017 [ 70]: 0cc757071306a08c +Block 0017 [ 71]: 0cd18b8157d80d65 +Block 0017 [ 72]: 5378531ce24a9fe0 +Block 0017 [ 73]: 619ac127f25314b8 +Block 0017 [ 74]: 289666e9273cd9cf +Block 0017 [ 75]: 9d683046f40fd118 +Block 0017 [ 76]: 48056be7488a4d3b +Block 0017 [ 77]: 4cee9208e330d9da +Block 0017 [ 78]: 531b8009a08f8667 +Block 0017 [ 79]: bd5736dfe9c65709 +Block 0017 [ 80]: e9386f17671521bc +Block 0017 [ 81]: 640ff74bd3f62e82 +Block 0017 [ 82]: 2d298c4e677a4ae6 +Block 0017 [ 83]: 1b8df78a8d84216f +Block 0017 [ 84]: 9933fca3997cf107 +Block 0017 [ 85]: 08e19896c2ef82b5 +Block 0017 [ 86]: f55bae80ac972a6c +Block 0017 [ 87]: ebc1fdd921f50518 +Block 0017 [ 88]: c526c7fff85c0cd6 +Block 0017 [ 89]: 958988f409748aa8 +Block 0017 [ 90]: 9f53bfc38a3f99f8 +Block 0017 [ 91]: 30cb279e1a4180b0 +Block 0017 [ 92]: 68cbb795935906b6 +Block 0017 [ 93]: bbe023cd06ba4bec +Block 0017 [ 94]: ba0b431efd7f641d +Block 0017 [ 95]: 7f830d88ec16d7c7 +Block 0017 [ 96]: f51bc5bb8e0f60f3 +Block 0017 [ 97]: 6a090a16ea0664a5 +Block 0017 [ 98]: b60a6b89b78d5a41 +Block 0017 [ 99]: 3ee08774310d4b7f +Block 0017 [100]: 8cf3a2caa05293ee +Block 0017 [101]: 029abaacc0f9e5ec +Block 0017 [102]: aa5b96c1138bc2fb +Block 0017 [103]: 33f5ffa151ca2c41 +Block 0017 [104]: 723b07282d65a43a +Block 0017 [105]: 05d3f744eb0afc52 +Block 0017 [106]: 04d5d592022801dd +Block 0017 [107]: 3a85abb4dae37695 +Block 0017 [108]: 64930e7129ed9f6f +Block 0017 [109]: 569521d11e337955 +Block 0017 [110]: 0019d5e39e6101db +Block 0017 [111]: 7bb63a5d60fe40b7 +Block 0017 [112]: 086e09b78786e706 +Block 0017 [113]: a82a6aaa0d0e37c5 +Block 0017 [114]: d202447290bdfa0e +Block 0017 [115]: 50f4ac3092a59fe8 +Block 0017 [116]: 607d6f205e9684f8 +Block 0017 [117]: 2f0fcf52aa5c84fe +Block 0017 [118]: 71497f707f6c2992 +Block 0017 [119]: 6488988f6a29f694 +Block 0017 [120]: 9b1841ebe4358b52 +Block 0017 [121]: de02ad91f6ff73e7 +Block 0017 [122]: da7a221d3a007196 +Block 0017 [123]: e15636f251d68894 +Block 0017 [124]: c737efef4be1c6cd +Block 0017 [125]: bec2c5eb4b1f4b1f +Block 0017 [126]: 1bff0563b0dbfffb +Block 0017 [127]: e09006a90e6ead01 +Block 0018 [ 0]: faa545eff119cfb9 +Block 0018 [ 1]: 95d936643121d1da +Block 0018 [ 2]: ae713aa879b76334 +Block 0018 [ 3]: 2db08b3dc9fdb7be +Block 0018 [ 4]: 63485723e7e088b1 +Block 0018 [ 5]: a8b1ff1d0d8ad0fc +Block 0018 [ 6]: 157c01d987bcf4f6 +Block 0018 [ 7]: e9d5737671f2fc98 +Block 0018 [ 8]: 08931d6bba1ec789 +Block 0018 [ 9]: ecd9633e941073ea +Block 0018 [ 10]: 27850a0730f28ddf +Block 0018 [ 11]: df919fb65835d9d0 +Block 0018 [ 12]: be70c1c2f80a744f +Block 0018 [ 13]: 5f42037e0810283e +Block 0018 [ 14]: 1fa0a087aca0d0f5 +Block 0018 [ 15]: 88850bd42d42433c +Block 0018 [ 16]: 4c351ab8ac31727b +Block 0018 [ 17]: 032e362e9961c2c0 +Block 0018 [ 18]: a46fd3113d1903f0 +Block 0018 [ 19]: 76df2ea4d4fc4cd3 +Block 0018 [ 20]: 6360aef426b20c5f +Block 0018 [ 21]: c6c75e30d3125b04 +Block 0018 [ 22]: 2b4604dcc9fa89f0 +Block 0018 [ 23]: 71809018e3f08fd1 +Block 0018 [ 24]: eae38831b0434502 +Block 0018 [ 25]: 12354e8863578f73 +Block 0018 [ 26]: cc67649ed524fcda +Block 0018 [ 27]: f3fa35e89b0a0628 +Block 0018 [ 28]: dd4b39ce157c3917 +Block 0018 [ 29]: 79b3eac67611c5b3 +Block 0018 [ 30]: 18d646a35047896f +Block 0018 [ 31]: 7ad67c7909c4214a +Block 0018 [ 32]: 0f85a71cea5458fb +Block 0018 [ 33]: 5a496c5b9a42a99e +Block 0018 [ 34]: f41955d00a6cb89b +Block 0018 [ 35]: 6979ed134db972e2 +Block 0018 [ 36]: c52bc00afcba0bd5 +Block 0018 [ 37]: 0b593fa777b11fdc +Block 0018 [ 38]: ec522ff3dbdc5727 +Block 0018 [ 39]: 5d3c6969d329ff41 +Block 0018 [ 40]: 9c3eee30b62c351c +Block 0018 [ 41]: a5e4421accee4716 +Block 0018 [ 42]: 2dd1bbb8a07019c1 +Block 0018 [ 43]: be3f1ebb698a80fa +Block 0018 [ 44]: 25f84725c715ba2b +Block 0018 [ 45]: de0fa263fc4ef327 +Block 0018 [ 46]: 3309df9d4cab5b46 +Block 0018 [ 47]: 191d6e408413ccc2 +Block 0018 [ 48]: 4ffa07c911bd50b1 +Block 0018 [ 49]: 51513298dcb7e64f +Block 0018 [ 50]: bd61e5ebbb03d888 +Block 0018 [ 51]: 113fd47c82d2bfbc +Block 0018 [ 52]: 7ebc5acf30a5427b +Block 0018 [ 53]: 401178ea14ff6343 +Block 0018 [ 54]: 3dd4c60b0f20b1a0 +Block 0018 [ 55]: 24bec1bc4a96ebeb +Block 0018 [ 56]: dd6f9948397d00f7 +Block 0018 [ 57]: 6e7d7f79b6f68812 +Block 0018 [ 58]: 1ee287e74910a6fc +Block 0018 [ 59]: 32af1d9c9b8b5759 +Block 0018 [ 60]: f55d837645ddc363 +Block 0018 [ 61]: ee8fcf0ba4de85e4 +Block 0018 [ 62]: 0389e54df125e829 +Block 0018 [ 63]: 7b3147558a74ae2b +Block 0018 [ 64]: b3e867428af1fef8 +Block 0018 [ 65]: 3335faa99d817c04 +Block 0018 [ 66]: 9c451ddf0a477fc3 +Block 0018 [ 67]: 248deb6f91ea029a +Block 0018 [ 68]: 9505f628226f2289 +Block 0018 [ 69]: f2bc362d1106f544 +Block 0018 [ 70]: 19a8d07be37f7f36 +Block 0018 [ 71]: c8a3e7b320ee2940 +Block 0018 [ 72]: 20ad585907ffe654 +Block 0018 [ 73]: e5035ad9e307c077 +Block 0018 [ 74]: dbbb5bb28adecaa3 +Block 0018 [ 75]: e036b59cd6ebbca7 +Block 0018 [ 76]: dbf0ead323d11f90 +Block 0018 [ 77]: 32f54a06d8aed030 +Block 0018 [ 78]: 3130833bfebc3fa1 +Block 0018 [ 79]: 3afd1ffe68ed72be +Block 0018 [ 80]: 7ee64d0db46abd24 +Block 0018 [ 81]: 1aebcb1924869cd3 +Block 0018 [ 82]: ede2f00caa0a1709 +Block 0018 [ 83]: c20e575ac91f9e57 +Block 0018 [ 84]: 9895a20bc7b8ceb6 +Block 0018 [ 85]: a4568ccf1f27ca68 +Block 0018 [ 86]: 38e5616cefcb46dc +Block 0018 [ 87]: c8b38ec003578587 +Block 0018 [ 88]: 1558b927e2b931ff +Block 0018 [ 89]: 5f1573189ec111a8 +Block 0018 [ 90]: 744851f93a97bfea +Block 0018 [ 91]: f43418a1064d0e4b +Block 0018 [ 92]: 8f5a287077430279 +Block 0018 [ 93]: d57f9b51bb604f0e +Block 0018 [ 94]: fb3569fb2c75a1db +Block 0018 [ 95]: 698fe004d6cfbb9e +Block 0018 [ 96]: 3d16340d04a7867e +Block 0018 [ 97]: 4f12b922e3535727 +Block 0018 [ 98]: e322253e8d863075 +Block 0018 [ 99]: 70a9f11b9df32318 +Block 0018 [100]: 7b18fa5540acc374 +Block 0018 [101]: dcc69cc272dc099c +Block 0018 [102]: 79dddaee86527df3 +Block 0018 [103]: 71bde3173831260e +Block 0018 [104]: 553a53f6947f6ac8 +Block 0018 [105]: 385427965d6dd5c4 +Block 0018 [106]: 27c9cf044489d353 +Block 0018 [107]: 6c531adefac2ea14 +Block 0018 [108]: f484b2f5da906611 +Block 0018 [109]: 653af921e8b2dbd6 +Block 0018 [110]: 0613e26bb5977c9c +Block 0018 [111]: 2739f8817b25d1c2 +Block 0018 [112]: a561daf1a53fca8c +Block 0018 [113]: 0222fce2fd94825d +Block 0018 [114]: ff6fc60ed882c744 +Block 0018 [115]: 128a12162a13f8ba +Block 0018 [116]: b6ee7893fe13a3a2 +Block 0018 [117]: eca30b64cd3fe660 +Block 0018 [118]: d1e97f13d096b037 +Block 0018 [119]: 24010b30f6f9e86e +Block 0018 [120]: 3ec7a219f8ad7f02 +Block 0018 [121]: 921f39d9d108de43 +Block 0018 [122]: 99d4628829193a58 +Block 0018 [123]: 64edb398a333656d +Block 0018 [124]: eddc6a51f7ace163 +Block 0018 [125]: 64929280d38ce455 +Block 0018 [126]: 03510f854d5915aa +Block 0018 [127]: ee55ebedae2bcfee +Block 0019 [ 0]: 51156b1e59b20401 +Block 0019 [ 1]: a0cfc6bae59d1b2e +Block 0019 [ 2]: 74b5c25d0f7ab4b5 +Block 0019 [ 3]: 1c914ed0a727b1d0 +Block 0019 [ 4]: 72c91b18095608c3 +Block 0019 [ 5]: 715a5de0af7d9766 +Block 0019 [ 6]: 09d3d606f47b011d +Block 0019 [ 7]: 16c20f8f77c792fe +Block 0019 [ 8]: b3273069a0e10f98 +Block 0019 [ 9]: da691a5910c208e2 +Block 0019 [ 10]: cbf00e60d6a3de8d +Block 0019 [ 11]: 6278b92100223543 +Block 0019 [ 12]: 8d914b69ccc4fddb +Block 0019 [ 13]: 8d7764485ef210c7 +Block 0019 [ 14]: 38825b734f595024 +Block 0019 [ 15]: e3156907a6e20477 +Block 0019 [ 16]: 513e73ce59181e8b +Block 0019 [ 17]: 9a07ef1bb6ba4098 +Block 0019 [ 18]: 814cc7d9baa18105 +Block 0019 [ 19]: 930ff0e7542c339b +Block 0019 [ 20]: 13b4c760a11bd633 +Block 0019 [ 21]: 271e942aa0d31858 +Block 0019 [ 22]: b78d78f9b71e233a +Block 0019 [ 23]: 150cda71b9d5693b +Block 0019 [ 24]: bdf8115d41b0a85b +Block 0019 [ 25]: 3c3135d676d3c5f3 +Block 0019 [ 26]: 63a686736848d856 +Block 0019 [ 27]: ae8e8caf724b1a86 +Block 0019 [ 28]: 62b0cef1adc0882c +Block 0019 [ 29]: bd890c5b29317812 +Block 0019 [ 30]: 6ae86cf1fbf29ecc +Block 0019 [ 31]: 2363bbb76324e527 +Block 0019 [ 32]: e2155105647d2c32 +Block 0019 [ 33]: d751ac49af5305b6 +Block 0019 [ 34]: 87cd90883e5f4e4a +Block 0019 [ 35]: 1ea924e56f888b93 +Block 0019 [ 36]: c51aa77e288a938a +Block 0019 [ 37]: 08b4a2c85b40d94e +Block 0019 [ 38]: d6aa32c1ef08d3c2 +Block 0019 [ 39]: 77c3660ec5353f19 +Block 0019 [ 40]: 07c9e33daeb74568 +Block 0019 [ 41]: 9bd8f6448761708a +Block 0019 [ 42]: eb874940d021d769 +Block 0019 [ 43]: 6151f0ede0583917 +Block 0019 [ 44]: fcbb88e020140621 +Block 0019 [ 45]: 0e532e3d4bc81dc0 +Block 0019 [ 46]: 2da87c43744e95e4 +Block 0019 [ 47]: a65ccd771e8f10a1 +Block 0019 [ 48]: cd3fe32ccd77935b +Block 0019 [ 49]: 37aa26376d20f6ae +Block 0019 [ 50]: 1bf80fbff942c050 +Block 0019 [ 51]: 76b51d1eb128cbe5 +Block 0019 [ 52]: 8788a0ccf97411ae +Block 0019 [ 53]: 0628b1237ec140b3 +Block 0019 [ 54]: b2147e4a8c83871e +Block 0019 [ 55]: 181d78bd66418200 +Block 0019 [ 56]: 431ff7c40ae96867 +Block 0019 [ 57]: 88548a84877077df +Block 0019 [ 58]: 378d340893c16a54 +Block 0019 [ 59]: 2151705d33bf835a +Block 0019 [ 60]: fc79c670c5413994 +Block 0019 [ 61]: 16c5bd79dbfa8967 +Block 0019 [ 62]: da634c6f7a83f03a +Block 0019 [ 63]: b420552b64b33783 +Block 0019 [ 64]: 06ac23a0f3b74e58 +Block 0019 [ 65]: a7327fee9ac0294f +Block 0019 [ 66]: f191e1ad2217703a +Block 0019 [ 67]: e53781ab62f0818c +Block 0019 [ 68]: f72f0cd8463f8228 +Block 0019 [ 69]: ccf24473c682f82b +Block 0019 [ 70]: 4cf42b53bec904cc +Block 0019 [ 71]: ed68232d9606760e +Block 0019 [ 72]: 4ee6da37428d239c +Block 0019 [ 73]: eb519e362a49f472 +Block 0019 [ 74]: 1cb3b7e393614967 +Block 0019 [ 75]: 7498007ec5defa40 +Block 0019 [ 76]: eb29564f5a80ce82 +Block 0019 [ 77]: ab56822a376bec75 +Block 0019 [ 78]: e646e9ced0205651 +Block 0019 [ 79]: cb56383cab821219 +Block 0019 [ 80]: d983a7932f436ca4 +Block 0019 [ 81]: 5a4dc7700cfe9515 +Block 0019 [ 82]: ec041f5ca30771db +Block 0019 [ 83]: 79d89b4394c9f93f +Block 0019 [ 84]: df61390b9e6f09bb +Block 0019 [ 85]: ead82beea5c58374 +Block 0019 [ 86]: 420ec98edea624fb +Block 0019 [ 87]: 82c6ba1d1d626c10 +Block 0019 [ 88]: 5d9505914adf649b +Block 0019 [ 89]: 8772eb7b04f29a02 +Block 0019 [ 90]: 8877a6e531032495 +Block 0019 [ 91]: b959c48e2c45a09f +Block 0019 [ 92]: 98bade59b92f14df +Block 0019 [ 93]: d80e8b763aa82afe +Block 0019 [ 94]: 90a62a4170b0afd9 +Block 0019 [ 95]: 4b6592da812760c2 +Block 0019 [ 96]: a121ecfb71c1eb1c +Block 0019 [ 97]: db1a767dcea7a999 +Block 0019 [ 98]: e5da01ee35c87e2e +Block 0019 [ 99]: 94ef21581c109698 +Block 0019 [100]: 870d7a1b74517e73 +Block 0019 [101]: 21193745713987d4 +Block 0019 [102]: 9a1e85064a182266 +Block 0019 [103]: 1f9124bb0d2cb4d2 +Block 0019 [104]: ff6902372d42a1a3 +Block 0019 [105]: c98b73edf2c207c7 +Block 0019 [106]: b0f6926ce2b9ce80 +Block 0019 [107]: 0e908f07eafb7898 +Block 0019 [108]: 8cbc193b329811d2 +Block 0019 [109]: d664f2d6272d3043 +Block 0019 [110]: 9c8450d1be037ef3 +Block 0019 [111]: cda6a04729fee455 +Block 0019 [112]: 1b96fd0c0e48ee86 +Block 0019 [113]: 4edfd43166ff8978 +Block 0019 [114]: 69d814cf195ff166 +Block 0019 [115]: 93656f22239260af +Block 0019 [116]: 6bbcaeff4a7a65a5 +Block 0019 [117]: 597cfeb021b3a839 +Block 0019 [118]: 07630947c089ea53 +Block 0019 [119]: 54544623c47a5e06 +Block 0019 [120]: f7acde6ac2995642 +Block 0019 [121]: 9d72c9bd012683a5 +Block 0019 [122]: 9c79f0e0bcaa18dc +Block 0019 [123]: 7cabc98e881b8fd5 +Block 0019 [124]: ac3a9a98ad95aae3 +Block 0019 [125]: 229a698070456d46 +Block 0019 [126]: f32db81398e49b5c +Block 0019 [127]: 83ab49dd8530b868 +Block 0020 [ 0]: e85992534b52b52e +Block 0020 [ 1]: f61354ae69bf8266 +Block 0020 [ 2]: 2189370fe268fc96 +Block 0020 [ 3]: 3ac2683aeb082adc +Block 0020 [ 4]: 6675872a5f886c76 +Block 0020 [ 5]: 594cc7787962d384 +Block 0020 [ 6]: 22d19fcad3648a3b +Block 0020 [ 7]: 7cbc8c3dec075825 +Block 0020 [ 8]: ee9f47c460c21add +Block 0020 [ 9]: 3641c274622ad42a +Block 0020 [ 10]: d51e286ed408b52f +Block 0020 [ 11]: b6e079c56147eb83 +Block 0020 [ 12]: f1c571e5c2dd437a +Block 0020 [ 13]: 170fcb05bed6e518 +Block 0020 [ 14]: 993c03f74b4f2f0e +Block 0020 [ 15]: 61cf7ac5747d9e17 +Block 0020 [ 16]: 2a8f513411963e3b +Block 0020 [ 17]: 4210c7f3dca178ef +Block 0020 [ 18]: 685c12a359327905 +Block 0020 [ 19]: cbd3fe04536f559f +Block 0020 [ 20]: 48ca877575d6674e +Block 0020 [ 21]: 271824743d2baff8 +Block 0020 [ 22]: ddf15d645723b79b +Block 0020 [ 23]: 71ec825ec5920c7c +Block 0020 [ 24]: c41f5cac7e0cf7ca +Block 0020 [ 25]: 7239a2d67055bcd1 +Block 0020 [ 26]: d773129866bcca99 +Block 0020 [ 27]: 567e5380bf4023b6 +Block 0020 [ 28]: 2265061bedd0f5e2 +Block 0020 [ 29]: ae15b953f2f6075c +Block 0020 [ 30]: 3197600cca3ecc16 +Block 0020 [ 31]: 52331e2bdf3d7f35 +Block 0020 [ 32]: cc661f4d0d802264 +Block 0020 [ 33]: 4abb5d426a4c05bb +Block 0020 [ 34]: 4b4ab952f30f21d8 +Block 0020 [ 35]: e47bf862aabe3e43 +Block 0020 [ 36]: a56438e599749cff +Block 0020 [ 37]: 7e88f730db0f5a51 +Block 0020 [ 38]: 02bd9a4ecd19dca1 +Block 0020 [ 39]: 789f62a6a44aa6a0 +Block 0020 [ 40]: 608cfe89b7c64305 +Block 0020 [ 41]: 9b0a9e3421114bf1 +Block 0020 [ 42]: 550d3f8d2bd63adc +Block 0020 [ 43]: 8733fcf078850b5d +Block 0020 [ 44]: 9866076a077c6fb5 +Block 0020 [ 45]: 6fb0147fa3e62c27 +Block 0020 [ 46]: a99f21e68aee3e65 +Block 0020 [ 47]: 589f8ff0158d1a23 +Block 0020 [ 48]: 31bcc76a59d047c9 +Block 0020 [ 49]: 9acdc9ab75f3a2d5 +Block 0020 [ 50]: 6868dfabd0fcf609 +Block 0020 [ 51]: e8aeaa973386a2ae +Block 0020 [ 52]: b0d60c3ddd71dc28 +Block 0020 [ 53]: d3d1cd9f303d3566 +Block 0020 [ 54]: 135d83379d63f3d8 +Block 0020 [ 55]: 265efc06899b4ed7 +Block 0020 [ 56]: c3895da03fa54b01 +Block 0020 [ 57]: bc0827502c9f333d +Block 0020 [ 58]: 335cf97881ed15af +Block 0020 [ 59]: 6b2bf00fb0fddd51 +Block 0020 [ 60]: 79fc0cf1f58be11c +Block 0020 [ 61]: 475e5b6f80b01e2b +Block 0020 [ 62]: 5f75c519a34aabc6 +Block 0020 [ 63]: 78c40a13e5360eac +Block 0020 [ 64]: d5baae967881b47f +Block 0020 [ 65]: f5f084c072b3cb4d +Block 0020 [ 66]: a68f891b7c71f817 +Block 0020 [ 67]: 562984e5d6215c7c +Block 0020 [ 68]: 6d7bd3c4f1a4ca8b +Block 0020 [ 69]: 5e730c9b9dc46542 +Block 0020 [ 70]: a4960b310ef10938 +Block 0020 [ 71]: 63764644a4183792 +Block 0020 [ 72]: 10822c35fef06151 +Block 0020 [ 73]: e5405919f5c8c53b +Block 0020 [ 74]: 58bb97e26251352b +Block 0020 [ 75]: dfd2ba15930180ef +Block 0020 [ 76]: 4b94d59c8069f5f4 +Block 0020 [ 77]: 2783164757466e67 +Block 0020 [ 78]: 82a63e11c945edd9 +Block 0020 [ 79]: ded3949304f2233a +Block 0020 [ 80]: c63e9a32698d7505 +Block 0020 [ 81]: 05ad1f94bc351c70 +Block 0020 [ 82]: 5491ac37abc73f1a +Block 0020 [ 83]: 164f3bb7d7765b93 +Block 0020 [ 84]: eca8c78b3c984428 +Block 0020 [ 85]: 5b9fabc93ad5d131 +Block 0020 [ 86]: 7fba9cf868e3f45f +Block 0020 [ 87]: c381821248a668c9 +Block 0020 [ 88]: 2f587c8807d8b617 +Block 0020 [ 89]: 459ca25197ebb81e +Block 0020 [ 90]: 3e5affb81962a6dd +Block 0020 [ 91]: b070badc22c2dbb4 +Block 0020 [ 92]: 0733d88dca0ba766 +Block 0020 [ 93]: 902b8fbc9e12f340 +Block 0020 [ 94]: 7bc7921592e9a5ad +Block 0020 [ 95]: a8fd1807f6d40c01 +Block 0020 [ 96]: 5ae0ab72dc04eedd +Block 0020 [ 97]: fa802d4a9821620e +Block 0020 [ 98]: 8baba494675f4156 +Block 0020 [ 99]: ff5ec2b3a0d5fcdf +Block 0020 [100]: a6460e7d5190118c +Block 0020 [101]: 4444827f3408cb94 +Block 0020 [102]: fb0b35803100ae19 +Block 0020 [103]: 9eed6e1a3abadd09 +Block 0020 [104]: 9b7b0600d055aeb2 +Block 0020 [105]: 77864bc48531546a +Block 0020 [106]: a53237e754c26b62 +Block 0020 [107]: 72bbd37fa894c2f0 +Block 0020 [108]: ed3eb4b2d686977d +Block 0020 [109]: 8d89e405248d512d +Block 0020 [110]: d8fb95216b5e0fd4 +Block 0020 [111]: 33bae91d35125e6d +Block 0020 [112]: 7117375e729dc431 +Block 0020 [113]: 68c443e213bb91c3 +Block 0020 [114]: 7ac856210ec3cfa4 +Block 0020 [115]: dea14ee7fed209f1 +Block 0020 [116]: 1d7dfcc3060859c8 +Block 0020 [117]: 049728f7bddf2f37 +Block 0020 [118]: b2d10f09f53a3be9 +Block 0020 [119]: 3149a2ec78e05acc +Block 0020 [120]: b2b2e4015754424d +Block 0020 [121]: 09622de722d9b4c0 +Block 0020 [122]: ed71dda8b87529c9 +Block 0020 [123]: 53e64f56cef18c5a +Block 0020 [124]: d9c6011c8605417c +Block 0020 [125]: 0c36da5b8af617e3 +Block 0020 [126]: eae8ed3d7d9bfcee +Block 0020 [127]: 9e92d4f5cc6930b8 +Block 0021 [ 0]: 44985db9e0d0d5cd +Block 0021 [ 1]: 7956b565c894de54 +Block 0021 [ 2]: f6e635f3c0db6f2d +Block 0021 [ 3]: fa78335d39a6d106 +Block 0021 [ 4]: cd831adb42c2eeba +Block 0021 [ 5]: dce9ca3d0982e302 +Block 0021 [ 6]: a9f3c863d73ddcf3 +Block 0021 [ 7]: 5b2b8053f70e71d6 +Block 0021 [ 8]: 926e3e83f2779add +Block 0021 [ 9]: 7d12ee3c87a7e354 +Block 0021 [ 10]: 244574f45210fa3c +Block 0021 [ 11]: 9ca1f0da6e24c4ed +Block 0021 [ 12]: de23064711375377 +Block 0021 [ 13]: e6b3575a0d6530ec +Block 0021 [ 14]: cb37b6cb29c790ea +Block 0021 [ 15]: 0d7394ad50729ec1 +Block 0021 [ 16]: ee4511db89da128d +Block 0021 [ 17]: 60c263f7e0943e58 +Block 0021 [ 18]: 74ff35474102dd03 +Block 0021 [ 19]: fe8da1de78cae60a +Block 0021 [ 20]: 8378dc12ff0411a0 +Block 0021 [ 21]: ef43399ed115049b +Block 0021 [ 22]: ce60008f30dc972b +Block 0021 [ 23]: fd48adaefb079b60 +Block 0021 [ 24]: 00dc34d2f5e9e336 +Block 0021 [ 25]: a168e8e31ce93d72 +Block 0021 [ 26]: b206314a6d3852e1 +Block 0021 [ 27]: 32945a1b34ccf798 +Block 0021 [ 28]: b6a2d70441e25d74 +Block 0021 [ 29]: 5189961081aedaf3 +Block 0021 [ 30]: d089d9ae0e6ac5ed +Block 0021 [ 31]: a4e562c76ebc01c7 +Block 0021 [ 32]: 5b1498a98c21068e +Block 0021 [ 33]: 4973ca78752b0432 +Block 0021 [ 34]: 7bf9c40a387df3d9 +Block 0021 [ 35]: 55a1778719be59c3 +Block 0021 [ 36]: 5500e9f3a7369575 +Block 0021 [ 37]: c69c8ef4d7f206fb +Block 0021 [ 38]: c67db3b601347b37 +Block 0021 [ 39]: 64939709d97d89e9 +Block 0021 [ 40]: b4948a1be2068243 +Block 0021 [ 41]: a5d7fd8e568b5cf9 +Block 0021 [ 42]: 09be3ebd25b0f943 +Block 0021 [ 43]: a04507d93f31fe78 +Block 0021 [ 44]: e732c2df513e8110 +Block 0021 [ 45]: b802e0d7c1a290d4 +Block 0021 [ 46]: 4b6bf519c99ae9b0 +Block 0021 [ 47]: 85792737e8be632e +Block 0021 [ 48]: 564fc5a46434e372 +Block 0021 [ 49]: aa8ce8ef23751750 +Block 0021 [ 50]: df75fdd2692a5d60 +Block 0021 [ 51]: 1e34ef41f7558203 +Block 0021 [ 52]: 85c68a3c8d591bb2 +Block 0021 [ 53]: 95ffccb84560b190 +Block 0021 [ 54]: c6329218a27e2430 +Block 0021 [ 55]: e8156443949278ec +Block 0021 [ 56]: 44bf970f7595eeb3 +Block 0021 [ 57]: 7f4745a48d409f34 +Block 0021 [ 58]: 283bb7b02e09a7c2 +Block 0021 [ 59]: e4f46238114fdd65 +Block 0021 [ 60]: 10535b408b72de34 +Block 0021 [ 61]: 3c64d16cfd92bd3f +Block 0021 [ 62]: 398092839b05a0a7 +Block 0021 [ 63]: 5f90e13e1c2f6143 +Block 0021 [ 64]: 8801a1020f792fe7 +Block 0021 [ 65]: 22009e6c49c289c1 +Block 0021 [ 66]: 7728eed80c2a225c +Block 0021 [ 67]: ae8b07a069418ee5 +Block 0021 [ 68]: e388086ae4de33c8 +Block 0021 [ 69]: 969308d65d29f310 +Block 0021 [ 70]: e26c571c259f52dd +Block 0021 [ 71]: 2a4a8580482b06cc +Block 0021 [ 72]: 5bcb5a34fffb96df +Block 0021 [ 73]: c819c17d707e281a +Block 0021 [ 74]: 47edf648395c27e0 +Block 0021 [ 75]: 247d4a2ca0f4dc59 +Block 0021 [ 76]: 183dc03432665caf +Block 0021 [ 77]: e9475ae82292c354 +Block 0021 [ 78]: cb4fe59e9130040d +Block 0021 [ 79]: 67e9681701be322d +Block 0021 [ 80]: 238953b3c2a838bf +Block 0021 [ 81]: 9f0ccae6e48a3061 +Block 0021 [ 82]: 17c218b8b8a799a4 +Block 0021 [ 83]: 6d77392eddc506b7 +Block 0021 [ 84]: 1d871bc3cc1ffb1f +Block 0021 [ 85]: b854e20d68df0832 +Block 0021 [ 86]: 739148762da737cf +Block 0021 [ 87]: ddb87e4b0773508d +Block 0021 [ 88]: 8bfbcffb98ed3b64 +Block 0021 [ 89]: 7ee8acf2f2d2af37 +Block 0021 [ 90]: 0c1ce1ab8bf0cd37 +Block 0021 [ 91]: 0208258d0e1ce2da +Block 0021 [ 92]: e54eeb09da26d0da +Block 0021 [ 93]: 6b62121f7f624310 +Block 0021 [ 94]: 66596927e38bd357 +Block 0021 [ 95]: 22b936173f0670e0 +Block 0021 [ 96]: 42d6b168957c9057 +Block 0021 [ 97]: 2dea30b7ad13294c +Block 0021 [ 98]: ef66a9ebc13538fd +Block 0021 [ 99]: abb52bb31f79729e +Block 0021 [100]: e24db95af6322403 +Block 0021 [101]: ebdb0c859fffcd60 +Block 0021 [102]: d1a06b46377eec61 +Block 0021 [103]: e2d31763aed1ed82 +Block 0021 [104]: ffe24b1f9d5c98b7 +Block 0021 [105]: a4c2e29ed729ab15 +Block 0021 [106]: e726cc9788e7d9db +Block 0021 [107]: c97057fbbe9e7cbe +Block 0021 [108]: d62f0209ac1a3070 +Block 0021 [109]: 2cdae15e7d2da1d3 +Block 0021 [110]: d9cd90c13b3a3646 +Block 0021 [111]: 57fde2b7db2b52e5 +Block 0021 [112]: 1d5cf0b89f587221 +Block 0021 [113]: 78013d6bba9ef856 +Block 0021 [114]: 3995718292542768 +Block 0021 [115]: b1671c5b8290bac1 +Block 0021 [116]: c5a2c85029dbe997 +Block 0021 [117]: b87428b2ccbe4eb7 +Block 0021 [118]: 0dec848541a1d9c3 +Block 0021 [119]: e6c9b99297b41448 +Block 0021 [120]: 788939a6276d7865 +Block 0021 [121]: 713fb3b29fc991be +Block 0021 [122]: 321a3868527330a2 +Block 0021 [123]: 7cf41f165199b48d +Block 0021 [124]: 5fc478500e5d2f18 +Block 0021 [125]: e4f2597a03e914c3 +Block 0021 [126]: 555d961eb62d4030 +Block 0021 [127]: 8ff3daa8c0416f13 +Block 0022 [ 0]: 359ea034194e9837 +Block 0022 [ 1]: d78550ca0ab16474 +Block 0022 [ 2]: 40ba684936f5571b +Block 0022 [ 3]: d5123d27cf585581 +Block 0022 [ 4]: 2416be15e92484f4 +Block 0022 [ 5]: f3fa77ad7aaa55c1 +Block 0022 [ 6]: 583928692aec8b0e +Block 0022 [ 7]: ed3df1623952b0ea +Block 0022 [ 8]: c57e9f7c7c0bcad3 +Block 0022 [ 9]: 885ab6cd1c632566 +Block 0022 [ 10]: 1290294c7c6580ad +Block 0022 [ 11]: fa01cbb3169e5bb7 +Block 0022 [ 12]: 6ec333a957dcb800 +Block 0022 [ 13]: 9d42f781b8392cbf +Block 0022 [ 14]: 1af51dd0d78a0777 +Block 0022 [ 15]: 27ca875f7007076d +Block 0022 [ 16]: d45bd1b2b7496a3f +Block 0022 [ 17]: 71d0bc4df457c664 +Block 0022 [ 18]: cff1e3749eff7fc3 +Block 0022 [ 19]: 9547fd4c77ca5038 +Block 0022 [ 20]: 6a888adc9f599a51 +Block 0022 [ 21]: 9b809dbb86136958 +Block 0022 [ 22]: 430f8942f4df64df +Block 0022 [ 23]: 0e90501ceeb9b589 +Block 0022 [ 24]: 806e49712709b024 +Block 0022 [ 25]: 1742e2f60a8cd3a6 +Block 0022 [ 26]: dbfc8e83d1d512ad +Block 0022 [ 27]: 0cf7f132a3e20ad1 +Block 0022 [ 28]: 9e873b4c0dc1dac6 +Block 0022 [ 29]: 89945226c2272e7a +Block 0022 [ 30]: b5d181ce274a0b0c +Block 0022 [ 31]: 116b16c196bc7d09 +Block 0022 [ 32]: 2d8c6d3a492cddbb +Block 0022 [ 33]: ce8279161863b53b +Block 0022 [ 34]: b8df4aa4a78722b6 +Block 0022 [ 35]: 8c7e68419060d08c +Block 0022 [ 36]: 0d68f7355f83d095 +Block 0022 [ 37]: e0d6b93af3c1f8e8 +Block 0022 [ 38]: 8e7ab9c04b9304f9 +Block 0022 [ 39]: 2e1aea547be324fa +Block 0022 [ 40]: 452ee11bfe9775f2 +Block 0022 [ 41]: b40b63ca6ca959f7 +Block 0022 [ 42]: c7e2522bdf39ee22 +Block 0022 [ 43]: 3252b7ea0f42c364 +Block 0022 [ 44]: bf83748abdd885a8 +Block 0022 [ 45]: 3a41fbd16b55e560 +Block 0022 [ 46]: 1bdc3ad30ab8281e +Block 0022 [ 47]: f43e3102c2b2f31e +Block 0022 [ 48]: aaf357cba9b1fcdf +Block 0022 [ 49]: 89dd304402be8aa2 +Block 0022 [ 50]: 0f096417aa7934f0 +Block 0022 [ 51]: 9ed6d449bcbb0f4a +Block 0022 [ 52]: ec6fbbd7257fa97c +Block 0022 [ 53]: d258163a989c0cb1 +Block 0022 [ 54]: f87de0405bfd2a85 +Block 0022 [ 55]: 8fadee635ca3bf8b +Block 0022 [ 56]: 8c2b49b3389dd1b6 +Block 0022 [ 57]: 0965075129b75a38 +Block 0022 [ 58]: 5ca5e173f8903715 +Block 0022 [ 59]: 45eff6a7d24a1f97 +Block 0022 [ 60]: 9b51a40c8c8988c6 +Block 0022 [ 61]: 637b89f48ff3fec8 +Block 0022 [ 62]: 728f9d6f9bb2b21a +Block 0022 [ 63]: 89bc904decbb53b6 +Block 0022 [ 64]: db8e98e0e80c8c9b +Block 0022 [ 65]: 6a4f479b00afcdf0 +Block 0022 [ 66]: d3746d207db7569a +Block 0022 [ 67]: 708951244e5efdb3 +Block 0022 [ 68]: 0e39a86b20244617 +Block 0022 [ 69]: 89c550440a864e0d +Block 0022 [ 70]: 18f302e1690bdddc +Block 0022 [ 71]: d4d88aeb6aa90eb3 +Block 0022 [ 72]: 3ed14399fd19860a +Block 0022 [ 73]: 36771b7d82612ee4 +Block 0022 [ 74]: b316cc4bdae219f0 +Block 0022 [ 75]: 0912a4991e79007e +Block 0022 [ 76]: 4855b6f6cc5af6c8 +Block 0022 [ 77]: d2204ba86d9e3306 +Block 0022 [ 78]: 7c4afeed2a1d6ea8 +Block 0022 [ 79]: 3a23c2802e4cd40e +Block 0022 [ 80]: c22a2e7614514d95 +Block 0022 [ 81]: f313d4c25b03d71c +Block 0022 [ 82]: 479ca05314ec2c7d +Block 0022 [ 83]: 97c41ff46cfafc0a +Block 0022 [ 84]: a60ff47aba2ce596 +Block 0022 [ 85]: b391956a26acb634 +Block 0022 [ 86]: cdfe906b5c69ffc4 +Block 0022 [ 87]: 4f6721d63000152a +Block 0022 [ 88]: 5231ddf2b368af61 +Block 0022 [ 89]: 57a45b3ca6f71734 +Block 0022 [ 90]: 81d6271b2f60cabd +Block 0022 [ 91]: 2950a00d07534dec +Block 0022 [ 92]: 74e039f97e8aa73b +Block 0022 [ 93]: b4b2578228ce5af6 +Block 0022 [ 94]: 7b8a152b75883d1d +Block 0022 [ 95]: d207419167a96c24 +Block 0022 [ 96]: 0a523f2a8a05ae17 +Block 0022 [ 97]: b7f339aa5cc88542 +Block 0022 [ 98]: 9df6fd53a0623750 +Block 0022 [ 99]: cc1f852330d28cbd +Block 0022 [100]: 1d0a822c3693df89 +Block 0022 [101]: 6aaf30c9ddcdfc08 +Block 0022 [102]: 7ef3d4bec6351a5b +Block 0022 [103]: 6bba1464a14c1035 +Block 0022 [104]: 39c41d54e5f6f1b4 +Block 0022 [105]: 653ccaab162e37f1 +Block 0022 [106]: fa8694d3ba064670 +Block 0022 [107]: 910c761a8683388c +Block 0022 [108]: a733cb24de424eea +Block 0022 [109]: d1898453e8fa3db0 +Block 0022 [110]: 017ce73367ee47ea +Block 0022 [111]: 558eb8c4c3d20b56 +Block 0022 [112]: 969ac56f171863bc +Block 0022 [113]: 0858ecb8b8c6eb6b +Block 0022 [114]: deb137af8f3eda8c +Block 0022 [115]: 0957d06a65ca1dc4 +Block 0022 [116]: 05f09e10f775c81b +Block 0022 [117]: 2b076311329a4de4 +Block 0022 [118]: 756805c001922f19 +Block 0022 [119]: 05362ff8a52ebdba +Block 0022 [120]: 6ea323dd5b100acd +Block 0022 [121]: 28356b4faf87aca5 +Block 0022 [122]: 0dcdf79812e24903 +Block 0022 [123]: 2ad46475db731dfe +Block 0022 [124]: ed69c60c6bd370e2 +Block 0022 [125]: d2278b5b0062c149 +Block 0022 [126]: f4beefe92919c42f +Block 0022 [127]: c74f504d0b914a3b +Block 0023 [ 0]: 9ecdaf0f036d9ce1 +Block 0023 [ 1]: 15bb004c9a72d549 +Block 0023 [ 2]: 98c6ea40c940ce55 +Block 0023 [ 3]: 22ddd937c9c8d11c +Block 0023 [ 4]: 47479edda8ec7d63 +Block 0023 [ 5]: 3170bd3d10b6085e +Block 0023 [ 6]: c4409c14ffbc7e23 +Block 0023 [ 7]: a23c1d3d828c0386 +Block 0023 [ 8]: 9be7bbe3ce098999 +Block 0023 [ 9]: c24d972e14b96d6c +Block 0023 [ 10]: 5cee6a54dd460a3a +Block 0023 [ 11]: a49b4acbe7c13c60 +Block 0023 [ 12]: 3d39dc57c0c1d9d4 +Block 0023 [ 13]: 393a08415acbe137 +Block 0023 [ 14]: 6c12cd1742129218 +Block 0023 [ 15]: 34c456e39a4db7a5 +Block 0023 [ 16]: 77ce8fbc96d845ad +Block 0023 [ 17]: 5edee26d8cd5eca7 +Block 0023 [ 18]: 61ec669dea36a9b2 +Block 0023 [ 19]: 4787a5cc99a772bf +Block 0023 [ 20]: c73394f2ccffbc07 +Block 0023 [ 21]: 671d17c8d052dfed +Block 0023 [ 22]: b1b88ea17fbfd701 +Block 0023 [ 23]: 9959c72ac7eec701 +Block 0023 [ 24]: c3cd2df338951e0f +Block 0023 [ 25]: ddd17a9cde144bbf +Block 0023 [ 26]: a911e79da9825e9d +Block 0023 [ 27]: e0a95e40de7e7382 +Block 0023 [ 28]: cc2dc82e6831f869 +Block 0023 [ 29]: b6e5f24cd89351c5 +Block 0023 [ 30]: 69427de8682af684 +Block 0023 [ 31]: 6de1377357db2537 +Block 0023 [ 32]: e64c80f7e437a546 +Block 0023 [ 33]: 2241320a7b0aa93d +Block 0023 [ 34]: 7d010e32a1d2f256 +Block 0023 [ 35]: 48f7fae3620d0480 +Block 0023 [ 36]: 54031a0fd9d37022 +Block 0023 [ 37]: c983112ebbb5577b +Block 0023 [ 38]: 7247d8d4af455e74 +Block 0023 [ 39]: fa37b1bf19707b2b +Block 0023 [ 40]: 1c058b748007d18f +Block 0023 [ 41]: 2329b9492da173f6 +Block 0023 [ 42]: a8041bb66c9d96ce +Block 0023 [ 43]: bb83baef9acfc540 +Block 0023 [ 44]: 73408477183e2d79 +Block 0023 [ 45]: 3add56150f9d7204 +Block 0023 [ 46]: a5f7f5331c633042 +Block 0023 [ 47]: 9daeca7cf30a5c23 +Block 0023 [ 48]: 2cc58e8b2baa07c3 +Block 0023 [ 49]: e61a53aef76f133a +Block 0023 [ 50]: ebd6b3e48a056905 +Block 0023 [ 51]: b39932f0b836380c +Block 0023 [ 52]: 3e09ce899bff870b +Block 0023 [ 53]: 112e5f19f35c392f +Block 0023 [ 54]: 90748bbcb7404a8c +Block 0023 [ 55]: 27cef22f1eab2918 +Block 0023 [ 56]: 0093c1bff0ae57c3 +Block 0023 [ 57]: 75fb7bc0725e013c +Block 0023 [ 58]: 8c8599b959463f3b +Block 0023 [ 59]: b6542538c6a52c8a +Block 0023 [ 60]: b24a4df10594c149 +Block 0023 [ 61]: 5c7cee7c1cb8c0ab +Block 0023 [ 62]: c340366544c200ed +Block 0023 [ 63]: 4321cb1f4b967b2a +Block 0023 [ 64]: 374c3b926409f144 +Block 0023 [ 65]: 4aaafaae953a4c57 +Block 0023 [ 66]: f6a5da47b793e418 +Block 0023 [ 67]: 99708b9fb00f25d6 +Block 0023 [ 68]: da07362b0cc5dbc0 +Block 0023 [ 69]: 988a57c3161a6c40 +Block 0023 [ 70]: 1d1cc8be2f734650 +Block 0023 [ 71]: a45ad1cae81bd6e2 +Block 0023 [ 72]: 95bca8f0129ec299 +Block 0023 [ 73]: 4ab488175d7722db +Block 0023 [ 74]: 1a7e32485afd1c14 +Block 0023 [ 75]: 489731ed70ac12f5 +Block 0023 [ 76]: f4d27e08c22a40b3 +Block 0023 [ 77]: b5d68acf7a4254e0 +Block 0023 [ 78]: 8a6caec3444e603d +Block 0023 [ 79]: 7c0e44ba09f71c7d +Block 0023 [ 80]: c9b6b103b57878e1 +Block 0023 [ 81]: ebbc7a32b28ab234 +Block 0023 [ 82]: 17219f0386f3711f +Block 0023 [ 83]: 916a5dae24a64bf1 +Block 0023 [ 84]: aa935a0cccf96eae +Block 0023 [ 85]: 1040a92200392b52 +Block 0023 [ 86]: 352255483f46b903 +Block 0023 [ 87]: a978a95cb8cb0690 +Block 0023 [ 88]: 56c1ab16770cbc9b +Block 0023 [ 89]: 10ec2e950f5019a9 +Block 0023 [ 90]: 5e63ede0ae88dd9c +Block 0023 [ 91]: 70edb6a07f8797cf +Block 0023 [ 92]: 380536c55eb0b657 +Block 0023 [ 93]: 99c90414e820bfe8 +Block 0023 [ 94]: 47d46b72322e67c8 +Block 0023 [ 95]: fb848a7235f26a57 +Block 0023 [ 96]: 554aca7cd22b15ac +Block 0023 [ 97]: 379eeafe44ac5c97 +Block 0023 [ 98]: 45bd5bf613ad3fbc +Block 0023 [ 99]: 4c075438f295c44b +Block 0023 [100]: 7a45259b4559b474 +Block 0023 [101]: 92e838e8f0d7514e +Block 0023 [102]: aafdbbc3728f02e5 +Block 0023 [103]: a8e5e2bde478bae6 +Block 0023 [104]: 4c04ee73d4039bab +Block 0023 [105]: 586028282e5a2b3b +Block 0023 [106]: 022ad23278d18381 +Block 0023 [107]: cf51eb4d0d0bee7a +Block 0023 [108]: c7899e6732468800 +Block 0023 [109]: 82ffce02be29df97 +Block 0023 [110]: 6e036a2149410e95 +Block 0023 [111]: e0fbf0b38edbd512 +Block 0023 [112]: 334146973c3d6796 +Block 0023 [113]: 8ee18e6e829696dc +Block 0023 [114]: df103a940c74bbb8 +Block 0023 [115]: 8a46aa1191367d55 +Block 0023 [116]: f6a251ccb3620d10 +Block 0023 [117]: 7d3c88419220f214 +Block 0023 [118]: 26d3efe32bfedbf4 +Block 0023 [119]: 358e3d026b5f1178 +Block 0023 [120]: 32fa00e6c78ead6a +Block 0023 [121]: fcfdf868bc542c1a +Block 0023 [122]: f782e4caddde1d36 +Block 0023 [123]: 063cc660d7e819ca +Block 0023 [124]: 227a62857637cb1f +Block 0023 [125]: 82f3260fc275ab7a +Block 0023 [126]: 5b258ef618e41d5a +Block 0023 [127]: 9fb85be580e013c8 +Block 0024 [ 0]: 4990efe3269d5190 +Block 0024 [ 1]: de2c7f2e0c863a82 +Block 0024 [ 2]: 2fc9b3b341c04b15 +Block 0024 [ 3]: 3cf7381ab954a760 +Block 0024 [ 4]: 3408457092a69446 +Block 0024 [ 5]: 07d5d09002020f66 +Block 0024 [ 6]: 6f91ac20f06809b2 +Block 0024 [ 7]: 7b7a1387adfd44ca +Block 0024 [ 8]: 195bd6087a492267 +Block 0024 [ 9]: fd32ea59e44f93e0 +Block 0024 [ 10]: d1a3ec8e6a5a6f05 +Block 0024 [ 11]: 7f4c56252644fb33 +Block 0024 [ 12]: 8c4222c5464aa757 +Block 0024 [ 13]: c5326c5b79c1a2ba +Block 0024 [ 14]: 69afb22efed068e0 +Block 0024 [ 15]: 2603fd0ad02aaefd +Block 0024 [ 16]: c6edb5b04d0b579b +Block 0024 [ 17]: 9c68f8b1f3174966 +Block 0024 [ 18]: 79cf677075fba1d4 +Block 0024 [ 19]: 06e7cd18bef5a8bb +Block 0024 [ 20]: ccfc328dd4eebf8c +Block 0024 [ 21]: eba236e2136dfb89 +Block 0024 [ 22]: 7a67510261cc7eb1 +Block 0024 [ 23]: 6bd8b5df55f8b189 +Block 0024 [ 24]: 3305f90891829603 +Block 0024 [ 25]: 57e22d3264c1c974 +Block 0024 [ 26]: e918af423b0e7ace +Block 0024 [ 27]: a14c87f217094fe6 +Block 0024 [ 28]: 5e1313148ffaa2f6 +Block 0024 [ 29]: a00b46a3ed740d35 +Block 0024 [ 30]: 6472f8cb7670d61f +Block 0024 [ 31]: 6212299758ed000b +Block 0024 [ 32]: d2c50ca6a7359192 +Block 0024 [ 33]: 4e4d28d7a3810410 +Block 0024 [ 34]: 4238403cbcc1811d +Block 0024 [ 35]: 25b212262b1f6f34 +Block 0024 [ 36]: ef1f75a6346ada54 +Block 0024 [ 37]: 0f525c2ea4c32274 +Block 0024 [ 38]: 6c9395bfdaa1dbcf +Block 0024 [ 39]: c546ecc90cf6e07f +Block 0024 [ 40]: fd5b00b32147080a +Block 0024 [ 41]: 1c334957e7f45b7a +Block 0024 [ 42]: 88746c5e040809f1 +Block 0024 [ 43]: 1ac21097902fe27f +Block 0024 [ 44]: b50743a5490fc1dd +Block 0024 [ 45]: aeb2f2e0a3e6963a +Block 0024 [ 46]: 50e7629dc0fca8d4 +Block 0024 [ 47]: 634eb720976d1003 +Block 0024 [ 48]: cf926f81c7565370 +Block 0024 [ 49]: 04de21ea98c18906 +Block 0024 [ 50]: 09142b802328cfa8 +Block 0024 [ 51]: 152ef632d6c6ae7a +Block 0024 [ 52]: 9648d7f59744787e +Block 0024 [ 53]: 91bd54a13baa8696 +Block 0024 [ 54]: cadc45d3793b4719 +Block 0024 [ 55]: bdf2781f42523f09 +Block 0024 [ 56]: 78d8660f7981b790 +Block 0024 [ 57]: 4eda5ebdf5661493 +Block 0024 [ 58]: c254878496ae6395 +Block 0024 [ 59]: bdb4be227efa75ec +Block 0024 [ 60]: f32b3ef66ddd6a1e +Block 0024 [ 61]: 48ee09f020365f7c +Block 0024 [ 62]: ca415ffea519bff8 +Block 0024 [ 63]: c9cf7b1e7d3c05c2 +Block 0024 [ 64]: 37c77300cea00abe +Block 0024 [ 65]: 36e86532cac039e1 +Block 0024 [ 66]: 7b6e3d9501dcb1cc +Block 0024 [ 67]: 6a0bb5ff356e9afe +Block 0024 [ 68]: b874304d7cb5fc40 +Block 0024 [ 69]: 2dd866d1436d39b3 +Block 0024 [ 70]: dbb43f77cad44c96 +Block 0024 [ 71]: c6b3721f8d6602b1 +Block 0024 [ 72]: c4b3809a4a4f408e +Block 0024 [ 73]: a51c769bdfeaf335 +Block 0024 [ 74]: 41081e8888f060df +Block 0024 [ 75]: 4d2ce53a9c342b5d +Block 0024 [ 76]: 5dad598c2776ba1a +Block 0024 [ 77]: c4775d2b1722a14f +Block 0024 [ 78]: 504200a6ac05d630 +Block 0024 [ 79]: 111b8bafc6c72466 +Block 0024 [ 80]: f5a33557e079957e +Block 0024 [ 81]: 5804085cc0549387 +Block 0024 [ 82]: bdaa7d6a7d1e7d1c +Block 0024 [ 83]: a6b9fad1ceb81824 +Block 0024 [ 84]: 899a505eb3391c27 +Block 0024 [ 85]: b3b40c70b9c66298 +Block 0024 [ 86]: 3eade0f6f5a9a69a +Block 0024 [ 87]: 8248d3340a7e619b +Block 0024 [ 88]: 16992f40e4158081 +Block 0024 [ 89]: 88499feb90e076f9 +Block 0024 [ 90]: d354bea70857875e +Block 0024 [ 91]: 19e861311fd36926 +Block 0024 [ 92]: 6f7790ebb65649b4 +Block 0024 [ 93]: cc7c3b143901e609 +Block 0024 [ 94]: 5cec2c0da25e936b +Block 0024 [ 95]: acd296bbbdeee1e2 +Block 0024 [ 96]: 402648821a389d58 +Block 0024 [ 97]: e890e079b9bd16d7 +Block 0024 [ 98]: 6acd81b06dec0c16 +Block 0024 [ 99]: ea87dab66e6fc421 +Block 0024 [100]: 0f3bbf2dc7c30982 +Block 0024 [101]: 3d1587feca99c0c4 +Block 0024 [102]: e8f6a80acf77a2c9 +Block 0024 [103]: 8814ba98d498427d +Block 0024 [104]: 4a34a60453fb977d +Block 0024 [105]: d04ccdd2f9a3f548 +Block 0024 [106]: 8c34e54ce961698e +Block 0024 [107]: 836c4707f77a4aae +Block 0024 [108]: 7fabdff455eace22 +Block 0024 [109]: 571b7698bdee8f84 +Block 0024 [110]: eb4100011b8ea9c3 +Block 0024 [111]: 40d475bcd627d0d3 +Block 0024 [112]: 32015db9bfea8194 +Block 0024 [113]: 37ef2a82ea82a822 +Block 0024 [114]: fe1032d3b905860d +Block 0024 [115]: a64397eda2c55368 +Block 0024 [116]: 615d50ceaf17c2ad +Block 0024 [117]: 59834237582754bf +Block 0024 [118]: a8c401a6a54999b0 +Block 0024 [119]: 59bb3ab34c05bda7 +Block 0024 [120]: 4e6a17e54f84868a +Block 0024 [121]: f189612ce7bfb6a6 +Block 0024 [122]: f232b4146d455183 +Block 0024 [123]: 298ca1081e693861 +Block 0024 [124]: 4c1982293ae974f1 +Block 0024 [125]: be436e96e2b3315c +Block 0024 [126]: 8c202ac8e574a446 +Block 0024 [127]: a2e7143eac000937 +Block 0025 [ 0]: 83fb6773de7ee2a3 +Block 0025 [ 1]: 2f3f9a6e1097d055 +Block 0025 [ 2]: 4c58fde56056258c +Block 0025 [ 3]: 4800796ee0c17895 +Block 0025 [ 4]: 7b7b6e9b672619b5 +Block 0025 [ 5]: 34f5a9e9f27f1a0b +Block 0025 [ 6]: 98b0e4c973e59b81 +Block 0025 [ 7]: 6d6001fffd3a09e1 +Block 0025 [ 8]: d7eaaebdcaeed771 +Block 0025 [ 9]: e88750c97cc45fbc +Block 0025 [ 10]: 75b10f14afb791a3 +Block 0025 [ 11]: 0f1a1b3808dbfa46 +Block 0025 [ 12]: cc35f51b6c288799 +Block 0025 [ 13]: 2926ff23d9fc1949 +Block 0025 [ 14]: 58254c89114006d6 +Block 0025 [ 15]: 9b899c4474155956 +Block 0025 [ 16]: 9f0470e645231c0b +Block 0025 [ 17]: a8e8d9fd81d99af7 +Block 0025 [ 18]: e8f5cc60fa860462 +Block 0025 [ 19]: fe355997e93e244c +Block 0025 [ 20]: 57452ab41cb95712 +Block 0025 [ 21]: 2b26bc00f6214e40 +Block 0025 [ 22]: 44ef8f293b8f1c11 +Block 0025 [ 23]: 089ae8103f3d4570 +Block 0025 [ 24]: 5d494295b9843491 +Block 0025 [ 25]: f1cb3831ffac7950 +Block 0025 [ 26]: 953d0f93faff8597 +Block 0025 [ 27]: ebd32513d2d9e83d +Block 0025 [ 28]: e00e64064b795a05 +Block 0025 [ 29]: cc1ce85b988b2930 +Block 0025 [ 30]: 31b45b9e5913546a +Block 0025 [ 31]: fbc8663cbc5b3c8a +Block 0025 [ 32]: a0874e3d61998c17 +Block 0025 [ 33]: 2366253e2ce491a5 +Block 0025 [ 34]: 0dfa45c95520aade +Block 0025 [ 35]: cec2ff4872e41c30 +Block 0025 [ 36]: 6321e4ff66dacaa0 +Block 0025 [ 37]: d0a5ec07b94fa10b +Block 0025 [ 38]: ccf37ab4f06dc63c +Block 0025 [ 39]: 56c3a31b8a4df791 +Block 0025 [ 40]: 83fff10db0078edc +Block 0025 [ 41]: 8f1a6a3fad3deee0 +Block 0025 [ 42]: 355f982b93c0f558 +Block 0025 [ 43]: 2a104e98645f490a +Block 0025 [ 44]: 26329d3151f97586 +Block 0025 [ 45]: f237846adf58e843 +Block 0025 [ 46]: d1d0d81185241166 +Block 0025 [ 47]: bd0cd9d7753072f7 +Block 0025 [ 48]: 14d4456cea2d67f9 +Block 0025 [ 49]: b81c2dc3628c7a8c +Block 0025 [ 50]: 8377344995ea8f48 +Block 0025 [ 51]: a5fbdca45d23262e +Block 0025 [ 52]: 5405165af97282a2 +Block 0025 [ 53]: d7d8c5a6ef3d9636 +Block 0025 [ 54]: 7394338a30f9141d +Block 0025 [ 55]: 064f55f35c47c381 +Block 0025 [ 56]: 367133384ae9180c +Block 0025 [ 57]: c74c9847614cfcb5 +Block 0025 [ 58]: 69d72fce07cbfdda +Block 0025 [ 59]: 6290c4b0a2e5e4d7 +Block 0025 [ 60]: d34cf7fb1b36f0e7 +Block 0025 [ 61]: 79107022ff338846 +Block 0025 [ 62]: 59959d367d0afc7c +Block 0025 [ 63]: 2f4345e5dd70a2e0 +Block 0025 [ 64]: aa6cbc0ca3123b15 +Block 0025 [ 65]: 182754d354e32e42 +Block 0025 [ 66]: 42408d91ef9bef4e +Block 0025 [ 67]: 213a0d2a2221598f +Block 0025 [ 68]: 0c4db076adcf874d +Block 0025 [ 69]: f5f16511a505658b +Block 0025 [ 70]: afe3a3731826ea43 +Block 0025 [ 71]: e21e33ce36edcb3a +Block 0025 [ 72]: 5cc73976cd2aaeaa +Block 0025 [ 73]: f275f27ca3e29acf +Block 0025 [ 74]: f3ef40acfe1d2b26 +Block 0025 [ 75]: 0ca134ce6045384d +Block 0025 [ 76]: 19b70338de252080 +Block 0025 [ 77]: 494a7e5b797427f4 +Block 0025 [ 78]: 1e79faba6fe15775 +Block 0025 [ 79]: d5f42e805029c0e3 +Block 0025 [ 80]: 2de1c5e2403fbc13 +Block 0025 [ 81]: 4a29e0cb9a65a3dc +Block 0025 [ 82]: 36c4842e37c2e07d +Block 0025 [ 83]: 026ae795b0a9f8b8 +Block 0025 [ 84]: 28a421d6a6cb2dbf +Block 0025 [ 85]: 95ad6b9ad86aa9ab +Block 0025 [ 86]: 5032fa51cd430007 +Block 0025 [ 87]: f78595ca07627684 +Block 0025 [ 88]: 465d8ed01526d77d +Block 0025 [ 89]: ac72274a02829c93 +Block 0025 [ 90]: 3de7df864a1e4f02 +Block 0025 [ 91]: 7ffa83d36ca1d61f +Block 0025 [ 92]: 15168df4da4775bf +Block 0025 [ 93]: ee9c34ba1a22ea61 +Block 0025 [ 94]: 4e3f3840f0d16db6 +Block 0025 [ 95]: b35fc77b895c3520 +Block 0025 [ 96]: d61bd96d8e1eaf08 +Block 0025 [ 97]: 22e57bbd848a9a73 +Block 0025 [ 98]: b693b10703481d23 +Block 0025 [ 99]: e7ad60adc325637d +Block 0025 [100]: 5fc51fe5584dc47b +Block 0025 [101]: 69fc11a044cb4d63 +Block 0025 [102]: 848d29cf57a45cc5 +Block 0025 [103]: 9e6696565e4584c4 +Block 0025 [104]: b597941cf768d408 +Block 0025 [105]: 6bed7072ef2144c7 +Block 0025 [106]: 776e13b6104dabb2 +Block 0025 [107]: 17666dc6fbe4840e +Block 0025 [108]: 9cf43d0ee9a9e822 +Block 0025 [109]: a1c11bda92e88ebb +Block 0025 [110]: 578bae4e9c1422ab +Block 0025 [111]: 8e0da066b8d902cb +Block 0025 [112]: e0a073edaf4ce1c3 +Block 0025 [113]: 3196d4508872812c +Block 0025 [114]: 7e7556b7c1b17f23 +Block 0025 [115]: d6ac91eee3bb6d46 +Block 0025 [116]: cccf91331656dff0 +Block 0025 [117]: ab87613dd7be1b14 +Block 0025 [118]: 2aad5227e58efc81 +Block 0025 [119]: 5018f9becceee5b0 +Block 0025 [120]: 49fe66a791ae8a46 +Block 0025 [121]: 299180a2768e190e +Block 0025 [122]: 76ae76a2fc1f75c7 +Block 0025 [123]: 7a4df9344eb55360 +Block 0025 [124]: 8e5772c8e118692b +Block 0025 [125]: 8408d3b455eb9437 +Block 0025 [126]: f9c9413266d6934a +Block 0025 [127]: e7eef672fbce6f1c +Block 0026 [ 0]: 1d7f4927cf91b037 +Block 0026 [ 1]: b36f320a28dfa026 +Block 0026 [ 2]: 4ad8b0cf2627ee42 +Block 0026 [ 3]: 0e38890d5df29444 +Block 0026 [ 4]: cf130312e3b781c0 +Block 0026 [ 5]: f27a461c0c52ba67 +Block 0026 [ 6]: 8830659de72797b6 +Block 0026 [ 7]: ec5a1697788f2be5 +Block 0026 [ 8]: 3324bcfa95092292 +Block 0026 [ 9]: 5444e023e975233e +Block 0026 [ 10]: 17f17a88758745a6 +Block 0026 [ 11]: 905851cf4421945c +Block 0026 [ 12]: 425408f96645858a +Block 0026 [ 13]: b68e85073ba4560a +Block 0026 [ 14]: 8eb4e618a957c503 +Block 0026 [ 15]: 305d2389814e00ae +Block 0026 [ 16]: 1613bfd014f3863b +Block 0026 [ 17]: 124258b390774c76 +Block 0026 [ 18]: f54f555e709aed15 +Block 0026 [ 19]: 7851eb99d58f2d46 +Block 0026 [ 20]: 8e09eca1320c689f +Block 0026 [ 21]: aee8d938c18a8c86 +Block 0026 [ 22]: 4afe50ff7d4bee03 +Block 0026 [ 23]: 11bf5c86116564c1 +Block 0026 [ 24]: 2d5f27ffac73811f +Block 0026 [ 25]: 0fa8c081b90eb9b2 +Block 0026 [ 26]: e2ce79be549933e7 +Block 0026 [ 27]: 1ea09ba7396e97e4 +Block 0026 [ 28]: 4b15fefc4863125a +Block 0026 [ 29]: 7758686a57392a75 +Block 0026 [ 30]: 6c43ead08b17d18a +Block 0026 [ 31]: f9d1a4e2bf73bc26 +Block 0026 [ 32]: 7ccef85867766cd1 +Block 0026 [ 33]: 2bb5ded12fe3e02a +Block 0026 [ 34]: bec9fda8bfa42f84 +Block 0026 [ 35]: 478be943487266c6 +Block 0026 [ 36]: 9002b673f9edfd55 +Block 0026 [ 37]: ddf42d90f8a74261 +Block 0026 [ 38]: 20b556c2f2e0e6a3 +Block 0026 [ 39]: d42493e8a60bc244 +Block 0026 [ 40]: 01465bcb695bc90c +Block 0026 [ 41]: 3a7c2d16c3992ad4 +Block 0026 [ 42]: 6308ef7380ab5f06 +Block 0026 [ 43]: 001a0e8c275832fd +Block 0026 [ 44]: e44a6b19e4d42cd8 +Block 0026 [ 45]: 4a2ba8cd72cbb52f +Block 0026 [ 46]: ace3f2f2acdf83fb +Block 0026 [ 47]: 26ac91bbae138132 +Block 0026 [ 48]: 7a2a681a01b40d1f +Block 0026 [ 49]: 7531b75bf6547ded +Block 0026 [ 50]: a3635ecd6aeec9b3 +Block 0026 [ 51]: 41243a17c9b41fe6 +Block 0026 [ 52]: c8d4da0b24b4544b +Block 0026 [ 53]: 3fada7d00f7414b3 +Block 0026 [ 54]: 8010bd0c0fdac063 +Block 0026 [ 55]: 230dbac6bc804ba7 +Block 0026 [ 56]: 70b351bdfd17062c +Block 0026 [ 57]: c40153db32947b71 +Block 0026 [ 58]: 32303a32a5423c24 +Block 0026 [ 59]: cc7b4a7e222623f5 +Block 0026 [ 60]: 0be07177569be4b6 +Block 0026 [ 61]: 09626cfd002e5705 +Block 0026 [ 62]: a2723a44848ddf64 +Block 0026 [ 63]: 226e8e82c0a835c0 +Block 0026 [ 64]: 4b2b3d701a2de1e5 +Block 0026 [ 65]: 7cd8435a86fad908 +Block 0026 [ 66]: 37b6e6c9d066e67f +Block 0026 [ 67]: db0cc96460d11f0b +Block 0026 [ 68]: 9f2dac0a2723c7c3 +Block 0026 [ 69]: 0e57f0560eafb201 +Block 0026 [ 70]: d771d6806fb188d9 +Block 0026 [ 71]: 5929952563b4ed22 +Block 0026 [ 72]: 994276262b7e4ab1 +Block 0026 [ 73]: befac9989fed281f +Block 0026 [ 74]: 16f13e5571e13be3 +Block 0026 [ 75]: 06cd705ada9f5c1c +Block 0026 [ 76]: 76763ad787351b02 +Block 0026 [ 77]: 2511361d83fe6e48 +Block 0026 [ 78]: b17e849b57e3ccd7 +Block 0026 [ 79]: 5b8eaf1c99be1ae0 +Block 0026 [ 80]: b6388ba2df9110d7 +Block 0026 [ 81]: 7f950313727a4b9c +Block 0026 [ 82]: 03dbf52f47e9ab21 +Block 0026 [ 83]: 1665660ce900a15e +Block 0026 [ 84]: 399e52875c07ed05 +Block 0026 [ 85]: 9eebf23eb3158a72 +Block 0026 [ 86]: 39efc5fb6b50e8ee +Block 0026 [ 87]: 02f7af4888f1fe47 +Block 0026 [ 88]: da6f6b90c0824864 +Block 0026 [ 89]: e871096ed23c51c0 +Block 0026 [ 90]: 435550640fd29909 +Block 0026 [ 91]: 9e2000a4691e2c7e +Block 0026 [ 92]: 53b2e98931e022af +Block 0026 [ 93]: 8548b40e0782ef18 +Block 0026 [ 94]: a343286e3be791e9 +Block 0026 [ 95]: d4a4262e32be6ded +Block 0026 [ 96]: d1451f414ea309f6 +Block 0026 [ 97]: 1caa15323232d92d +Block 0026 [ 98]: 7998831dffde384f +Block 0026 [ 99]: 3f6edbdb62446b2e +Block 0026 [100]: ef7cb7f074dc2fbd +Block 0026 [101]: 878afe5b75496afb +Block 0026 [102]: 91ff31fd58fe0def +Block 0026 [103]: c362ee5cd095f0e2 +Block 0026 [104]: d0e01f0cd9c2c496 +Block 0026 [105]: 49ea9bdcf1af8406 +Block 0026 [106]: 82e7e34660e1af7f +Block 0026 [107]: 0418d8471413ebf7 +Block 0026 [108]: 0fc73170d4dd1bc4 +Block 0026 [109]: 09c9249f15bfd20f +Block 0026 [110]: 1e173eb678957dcf +Block 0026 [111]: bf4cbf2f50b1638e +Block 0026 [112]: 9b6b09ffe7ad97b8 +Block 0026 [113]: 333156bf88027c1d +Block 0026 [114]: a24da656f801a65b +Block 0026 [115]: 521e82065aaed63f +Block 0026 [116]: 8a612eac6157b096 +Block 0026 [117]: 2aed99d6d7bbfd85 +Block 0026 [118]: 347cb6498a5f56fb +Block 0026 [119]: dcfa294054e70dbd +Block 0026 [120]: da4b9b4be8d545ee +Block 0026 [121]: b70a983c8de64987 +Block 0026 [122]: cb6a7222c7f95960 +Block 0026 [123]: 3f434acae0d95acf +Block 0026 [124]: 1ef173dee9eb44aa +Block 0026 [125]: 99356ed40eb7f3b8 +Block 0026 [126]: ba6b9c1c50492163 +Block 0026 [127]: e16309f90bcac92f +Block 0027 [ 0]: 439badfadf3479ca +Block 0027 [ 1]: 10f2cab73da23168 +Block 0027 [ 2]: 14ae9e557289684e +Block 0027 [ 3]: 6dad6cd6175b9497 +Block 0027 [ 4]: 102397f5c9c719e0 +Block 0027 [ 5]: a7eec5535492fd55 +Block 0027 [ 6]: 0b07bfcc45032b83 +Block 0027 [ 7]: 44fc1bcecf90e4e9 +Block 0027 [ 8]: eed8c2e02524204f +Block 0027 [ 9]: 935100ae85d08641 +Block 0027 [ 10]: 4aaebb5f361261cf +Block 0027 [ 11]: 1b8d7a9d97940db2 +Block 0027 [ 12]: 4318646c94c73b35 +Block 0027 [ 13]: d6655631500b729d +Block 0027 [ 14]: c2a9b85b96924a8e +Block 0027 [ 15]: 418c589a875653bb +Block 0027 [ 16]: bf082ba5c245765d +Block 0027 [ 17]: ccfc9eda23db1947 +Block 0027 [ 18]: 2de1c5c6f46db28a +Block 0027 [ 19]: 9cd06b50cf2bd2dd +Block 0027 [ 20]: dd962d2da10fc57c +Block 0027 [ 21]: a4b0686c11d81fb1 +Block 0027 [ 22]: bbc792a8c5c45ed4 +Block 0027 [ 23]: ac4483c0b511e762 +Block 0027 [ 24]: 5ad3c417ae5d8871 +Block 0027 [ 25]: 3a19b24b75fa3514 +Block 0027 [ 26]: c521b53027336b12 +Block 0027 [ 27]: d203b85c63c61d3d +Block 0027 [ 28]: c6a2d3ec7903561f +Block 0027 [ 29]: 9f3f4f2f68dab3b1 +Block 0027 [ 30]: b6ed64cc82dd7184 +Block 0027 [ 31]: 66d3d950dae1ea0d +Block 0027 [ 32]: 3302197c3166af1e +Block 0027 [ 33]: 2de9bcdd7e955b18 +Block 0027 [ 34]: 91774354af3f130e +Block 0027 [ 35]: 49fd29c31e5afa37 +Block 0027 [ 36]: cf15127b9889ccff +Block 0027 [ 37]: bf32b130475e7d2b +Block 0027 [ 38]: 8f6baa093c6922c4 +Block 0027 [ 39]: e536f69deb3f39f7 +Block 0027 [ 40]: b3aa896557db63a9 +Block 0027 [ 41]: cd5fadd0b10d9fbd +Block 0027 [ 42]: 1b2b35742385b35c +Block 0027 [ 43]: 968f676a7871062f +Block 0027 [ 44]: a9781975ef83fb7c +Block 0027 [ 45]: 03afc77a1c96d39d +Block 0027 [ 46]: 06e3fc87d2ec14b5 +Block 0027 [ 47]: 9f39adf7aeb1428a +Block 0027 [ 48]: 65792cbead640b35 +Block 0027 [ 49]: 1b01e121b917630e +Block 0027 [ 50]: 8f723e7ce5b7055a +Block 0027 [ 51]: 56e9cd8c13dcc689 +Block 0027 [ 52]: 779dcb4521e9450f +Block 0027 [ 53]: 4f816a3a79510b60 +Block 0027 [ 54]: 940968d0ff51043f +Block 0027 [ 55]: e3eb22ae71285ae3 +Block 0027 [ 56]: 5352d586b008f4b7 +Block 0027 [ 57]: 8968e2c80e34acf6 +Block 0027 [ 58]: 2fe4cbd66f0f62bd +Block 0027 [ 59]: 4412e98455d6b3c4 +Block 0027 [ 60]: 63dc9bd7674922fa +Block 0027 [ 61]: d62b9d372afaa8f8 +Block 0027 [ 62]: 3a3006d8fb94068e +Block 0027 [ 63]: 815e5f34f114968f +Block 0027 [ 64]: 884b99ab2472754c +Block 0027 [ 65]: f1b2eee8980314d2 +Block 0027 [ 66]: afcd0ea9ab782db0 +Block 0027 [ 67]: b9f1099e5dd97c02 +Block 0027 [ 68]: 9d6a1efbaf0cf440 +Block 0027 [ 69]: 11a007aa120f33d5 +Block 0027 [ 70]: 71a3f28332e22030 +Block 0027 [ 71]: 1ce6c4c0557f9c71 +Block 0027 [ 72]: e73571a85fd50173 +Block 0027 [ 73]: b64062eeeff4f8a6 +Block 0027 [ 74]: 1d4cc08c7c2a207b +Block 0027 [ 75]: 0413f787be8d7ca2 +Block 0027 [ 76]: d6287956626cc661 +Block 0027 [ 77]: 3159344b2e846c85 +Block 0027 [ 78]: 43d31539e09f2836 +Block 0027 [ 79]: c2f5b559e744a524 +Block 0027 [ 80]: 36a04346972a8e8d +Block 0027 [ 81]: 2b042a7c4e11eb16 +Block 0027 [ 82]: 2d6f6d59abca49af +Block 0027 [ 83]: c5e53fcc980a48fd +Block 0027 [ 84]: 97e35b537b4026ab +Block 0027 [ 85]: 909f2b09fa4a1cc2 +Block 0027 [ 86]: 62d2991a26be778b +Block 0027 [ 87]: a2425e86eb634fc8 +Block 0027 [ 88]: fb5640a059777a34 +Block 0027 [ 89]: 6a6eadde6ac7d594 +Block 0027 [ 90]: c0dbcd91d345ae09 +Block 0027 [ 91]: bf86ddc82ffd7d46 +Block 0027 [ 92]: ee815de26480a96b +Block 0027 [ 93]: b8ec956a34ee0486 +Block 0027 [ 94]: 07c555d99b043186 +Block 0027 [ 95]: 50a6ccdf83ee32dc +Block 0027 [ 96]: 48c40754eb0e5f57 +Block 0027 [ 97]: 39f05bbdd7b34d53 +Block 0027 [ 98]: 44a0e87f40e81992 +Block 0027 [ 99]: 7b32b1e3c6cb70a8 +Block 0027 [100]: 48c0c2e5a96f4309 +Block 0027 [101]: b0511dbd8b6f12e7 +Block 0027 [102]: 2327388ee4d6a519 +Block 0027 [103]: fcad9620b5f1d221 +Block 0027 [104]: ada988a1f98ae5fb +Block 0027 [105]: 941ab7d039656ff3 +Block 0027 [106]: a76b601d1469fc73 +Block 0027 [107]: 14840c333bd2fef9 +Block 0027 [108]: 9379106ce5adb55d +Block 0027 [109]: cd8e74667be14476 +Block 0027 [110]: f85336be53c43cb4 +Block 0027 [111]: f77eac2a589fae03 +Block 0027 [112]: 5eca210b987e2152 +Block 0027 [113]: 0f4c81d45eec28cc +Block 0027 [114]: a3677c3e83fc85b2 +Block 0027 [115]: ad84372c49345a2c +Block 0027 [116]: c936edbc9678f9d1 +Block 0027 [117]: 108af1465cebeeb2 +Block 0027 [118]: 4c69155540d282ca +Block 0027 [119]: 301cd4b7c6dfbc68 +Block 0027 [120]: 156f18eb609f9765 +Block 0027 [121]: 6e71b4bd0d6080cc +Block 0027 [122]: 3302923e332b9357 +Block 0027 [123]: e6dd3be8a881de18 +Block 0027 [124]: b2b04b33b588c3e6 +Block 0027 [125]: ce90c3fe9a0f4fd8 +Block 0027 [126]: 9028ea580a0f0a34 +Block 0027 [127]: d1201d962a6ef6c4 +Block 0028 [ 0]: a41067023facdbf1 +Block 0028 [ 1]: 42117505215fc851 +Block 0028 [ 2]: 108e80c173bd1c3f +Block 0028 [ 3]: 9141f7051483092c +Block 0028 [ 4]: 88b65a6f33e76738 +Block 0028 [ 5]: 274cc7845b9c6bcf +Block 0028 [ 6]: bda833869a62b8ec +Block 0028 [ 7]: 9baaae5b2628bf1b +Block 0028 [ 8]: 43d0f6acfbd5dd99 +Block 0028 [ 9]: a4ebf0896a3ae6e6 +Block 0028 [ 10]: fb9f2b0ff49710b8 +Block 0028 [ 11]: 7d0d05487d725a95 +Block 0028 [ 12]: 5c6a9fdd3885e820 +Block 0028 [ 13]: 94538a83eab9a2fc +Block 0028 [ 14]: 2e67502e854ccabd +Block 0028 [ 15]: 7f64f88fcce2535d +Block 0028 [ 16]: ed492c4e4992f88f +Block 0028 [ 17]: 9ecd515f9bf644cf +Block 0028 [ 18]: 192662dc782b6033 +Block 0028 [ 19]: c9e27c60336ef812 +Block 0028 [ 20]: f13adf1dba915c6f +Block 0028 [ 21]: e16ae4b064097259 +Block 0028 [ 22]: ba6acd840f6a95b9 +Block 0028 [ 23]: bd28c64416c87497 +Block 0028 [ 24]: a5694c6e1739296c +Block 0028 [ 25]: 2837fe7f1fc557f5 +Block 0028 [ 26]: 08adc15f77d25f7e +Block 0028 [ 27]: e76b6f75fc8c2044 +Block 0028 [ 28]: cf0755893ea4cbd2 +Block 0028 [ 29]: fe6bde1aa534077f +Block 0028 [ 30]: e0e8dca015cdaf13 +Block 0028 [ 31]: 1e12ce621518c367 +Block 0028 [ 32]: a46d5f31d4ad951d +Block 0028 [ 33]: bf9f1f29eec79a2b +Block 0028 [ 34]: 75fb87621dfaca5e +Block 0028 [ 35]: aa99a18fba30b9f4 +Block 0028 [ 36]: f340a2b9afe49e12 +Block 0028 [ 37]: a0c81166fe523ec0 +Block 0028 [ 38]: 18c5679fa18d8dec +Block 0028 [ 39]: 857f448b84cc46a6 +Block 0028 [ 40]: 28cfbe6f6fa9b7a5 +Block 0028 [ 41]: 1ff21c3f36c2108c +Block 0028 [ 42]: 2f66b9fb1363117f +Block 0028 [ 43]: dc0e82d652c2af78 +Block 0028 [ 44]: da14d9d236e1fed8 +Block 0028 [ 45]: 69204ca8ee4a6ed0 +Block 0028 [ 46]: 6ba8d0459653c081 +Block 0028 [ 47]: e98016f805291524 +Block 0028 [ 48]: 18f419584af64630 +Block 0028 [ 49]: 43bc85ffca0777e9 +Block 0028 [ 50]: b580e2fc779e6b2b +Block 0028 [ 51]: 28c19f5fa2ff0cc4 +Block 0028 [ 52]: e442186be0b5bba6 +Block 0028 [ 53]: dee3e42871bf79f1 +Block 0028 [ 54]: 64657b9b60bbe4c8 +Block 0028 [ 55]: 57a9f6c1a5fa724d +Block 0028 [ 56]: ccd48a4a80eeb087 +Block 0028 [ 57]: fb27c006c1b2f679 +Block 0028 [ 58]: 2fb81d57f7ad6cdc +Block 0028 [ 59]: bd3d9dbcd1118622 +Block 0028 [ 60]: 226e915fbad9b815 +Block 0028 [ 61]: 30a8efcbcd761a5c +Block 0028 [ 62]: fd5a51699d07d18e +Block 0028 [ 63]: 60feb45effa98a6f +Block 0028 [ 64]: e389526027b2d2f9 +Block 0028 [ 65]: e9a895742299a978 +Block 0028 [ 66]: 836cce4801d4f3f4 +Block 0028 [ 67]: 63a827f820eb9a56 +Block 0028 [ 68]: e2463a1337fa5ecb +Block 0028 [ 69]: 538e061174fe9d02 +Block 0028 [ 70]: ff3da50f9eacc5b7 +Block 0028 [ 71]: 72ff747a14b4deaf +Block 0028 [ 72]: 562a5e613f9216a6 +Block 0028 [ 73]: 09b455e274ecf7b9 +Block 0028 [ 74]: 4571adb359ffae0f +Block 0028 [ 75]: 77d145773f85eb65 +Block 0028 [ 76]: 653321f0978aa9b0 +Block 0028 [ 77]: d833640bae64a928 +Block 0028 [ 78]: 134c2d009161de97 +Block 0028 [ 79]: 572a9974caf440ce +Block 0028 [ 80]: 6e34acfc2479246b +Block 0028 [ 81]: 94fbf1aecbe288e9 +Block 0028 [ 82]: 8369eb0748dc31dc +Block 0028 [ 83]: 83a3a5121aadb6ba +Block 0028 [ 84]: 264e9a697238aa7b +Block 0028 [ 85]: e6ffe60119c76ed8 +Block 0028 [ 86]: 2c430f7143906fec +Block 0028 [ 87]: 9238a6c9d5f4afba +Block 0028 [ 88]: c00da35614c2881f +Block 0028 [ 89]: dfbc346cc39bf049 +Block 0028 [ 90]: 0656ce19387c8113 +Block 0028 [ 91]: 4a4cde62fb6ff8ab +Block 0028 [ 92]: 6e55b2f1984647e6 +Block 0028 [ 93]: 007cafd08b7aaad7 +Block 0028 [ 94]: 0384f97188460e76 +Block 0028 [ 95]: 4338c2b4b83d2539 +Block 0028 [ 96]: b73322013357363d +Block 0028 [ 97]: 451e6927a0913d00 +Block 0028 [ 98]: 58b2043cdd7c6a0d +Block 0028 [ 99]: 183122cadbe9185f +Block 0028 [100]: 81ee6f18af45d9b6 +Block 0028 [101]: e327593257a949fc +Block 0028 [102]: af66fc72039ece5d +Block 0028 [103]: 64c3f12a6828d7e6 +Block 0028 [104]: 535baf0447dd7dc9 +Block 0028 [105]: ab3685133dcea01c +Block 0028 [106]: 63521d74e4720a83 +Block 0028 [107]: 62fdb26fb8a968cc +Block 0028 [108]: 890dc6bee39e6960 +Block 0028 [109]: b3a588db142d1862 +Block 0028 [110]: d454509c53f9c707 +Block 0028 [111]: cc13b42b0dda6ff1 +Block 0028 [112]: 93b74454d71b4c67 +Block 0028 [113]: 9408f46f656aa155 +Block 0028 [114]: 7916c34481f18bc1 +Block 0028 [115]: adc72713cc045345 +Block 0028 [116]: efc93c7841bdfbb8 +Block 0028 [117]: 72cd273c12380207 +Block 0028 [118]: b52e668f7efbb3fb +Block 0028 [119]: 03bab24694276f9c +Block 0028 [120]: 3c204b2118460028 +Block 0028 [121]: c909683316566d5a +Block 0028 [122]: 5ed142b9097de57e +Block 0028 [123]: 7fde438b177fd13e +Block 0028 [124]: c690af7205e3ccfe +Block 0028 [125]: 8b26df008256dd60 +Block 0028 [126]: 5f029a090522e2f5 +Block 0028 [127]: 88b8989232f47a0d +Block 0029 [ 0]: 313681c3e41acd60 +Block 0029 [ 1]: d91bca0ae66c637a +Block 0029 [ 2]: 04e8251a37da2c17 +Block 0029 [ 3]: 07da61fc730e3511 +Block 0029 [ 4]: 6f9ffac85007ca4d +Block 0029 [ 5]: 3f58445980f06d19 +Block 0029 [ 6]: 09b199b3c76b4124 +Block 0029 [ 7]: 6ec402f46805c58d +Block 0029 [ 8]: d2eace042511a80a +Block 0029 [ 9]: f8da4c2a47e93bd4 +Block 0029 [ 10]: 4953ed5a237778ae +Block 0029 [ 11]: b705e27de76a555b +Block 0029 [ 12]: b0a7712f715a3503 +Block 0029 [ 13]: 2135389da8281211 +Block 0029 [ 14]: 5b599493e2f700f1 +Block 0029 [ 15]: 5a3533a86bc338d6 +Block 0029 [ 16]: d6fb3dd373c3fb84 +Block 0029 [ 17]: 9c4ccc8d1de3d9e7 +Block 0029 [ 18]: 4ea73fc13e1fd243 +Block 0029 [ 19]: b0b41da7ddc2d3a6 +Block 0029 [ 20]: d67556a766650ca3 +Block 0029 [ 21]: 7a87f2feea5c1da9 +Block 0029 [ 22]: ecfc385d0e2cf083 +Block 0029 [ 23]: 45368d1461cd994c +Block 0029 [ 24]: 407868af14ee24fb +Block 0029 [ 25]: a571550c7a1f0a73 +Block 0029 [ 26]: bc1ee9e657c9c105 +Block 0029 [ 27]: de2cc5016e459ee6 +Block 0029 [ 28]: ac85c053069088a0 +Block 0029 [ 29]: bd6aeb9b0ac2ead5 +Block 0029 [ 30]: d82d50fd33a3e8e2 +Block 0029 [ 31]: 307f52bdb3c29795 +Block 0029 [ 32]: 77a59a437b39120e +Block 0029 [ 33]: fce9e3144f78a966 +Block 0029 [ 34]: 3e1cc37711a7e326 +Block 0029 [ 35]: 2c628f1777d983a0 +Block 0029 [ 36]: 77648411897e4a1b +Block 0029 [ 37]: 98ab98c193783931 +Block 0029 [ 38]: ad036d72d5f29806 +Block 0029 [ 39]: 847bd5a73b146f88 +Block 0029 [ 40]: cd354a5bd2ccf5b4 +Block 0029 [ 41]: e806000c105fa663 +Block 0029 [ 42]: e070bb267fcd1243 +Block 0029 [ 43]: 120004ab2f855dfd +Block 0029 [ 44]: b2bbc2f65eabe428 +Block 0029 [ 45]: 4a098eb8a9a91ff3 +Block 0029 [ 46]: 1c00224e70a288a3 +Block 0029 [ 47]: 6d6a3fbd85a2f765 +Block 0029 [ 48]: 86b7c5d758c179a9 +Block 0029 [ 49]: b9418fcf1228990a +Block 0029 [ 50]: f3c6fa47d9a5da91 +Block 0029 [ 51]: afff8e6eb6b0d7d8 +Block 0029 [ 52]: fbe80c00bb485eb6 +Block 0029 [ 53]: 01378709c95d69e3 +Block 0029 [ 54]: 0d2b433f15c611ef +Block 0029 [ 55]: 7981be0be2a9d437 +Block 0029 [ 56]: 0d022dd3b0fef0b9 +Block 0029 [ 57]: 09b6fab3474a2f73 +Block 0029 [ 58]: 0d91c6a6e3cc9ec7 +Block 0029 [ 59]: f87b83735d308ba8 +Block 0029 [ 60]: 54b4dba310bd88f0 +Block 0029 [ 61]: 5ea520e83c20b705 +Block 0029 [ 62]: 59d2670bc502f17f +Block 0029 [ 63]: 721ca4b5908f7718 +Block 0029 [ 64]: ef0e946d1bf3bcb9 +Block 0029 [ 65]: 62fa48ad21c43e0c +Block 0029 [ 66]: 2a04832751467d97 +Block 0029 [ 67]: b2ec95e1d26942a8 +Block 0029 [ 68]: 8327ee8a28c749a1 +Block 0029 [ 69]: a5d8165578262604 +Block 0029 [ 70]: f0ea267b8c26b91c +Block 0029 [ 71]: 084cb7cf5531ef87 +Block 0029 [ 72]: 2732e9aaef147d79 +Block 0029 [ 73]: 1b6381fd914644c4 +Block 0029 [ 74]: 7419b71780d0d784 +Block 0029 [ 75]: f201bac39c320b37 +Block 0029 [ 76]: ce42070184066dd5 +Block 0029 [ 77]: 1df651ec7cf8e733 +Block 0029 [ 78]: ad1d8f667d73481e +Block 0029 [ 79]: 1f78565b46eb434a +Block 0029 [ 80]: 1a3f3009b4522979 +Block 0029 [ 81]: 6cd47ef6d04267d9 +Block 0029 [ 82]: 4a39fd5f469d8cc7 +Block 0029 [ 83]: 65f91813538053bc +Block 0029 [ 84]: a9a31eb605527161 +Block 0029 [ 85]: 2fd1255b5bcd6375 +Block 0029 [ 86]: 3f8542e21d0b690f +Block 0029 [ 87]: 114947f1e9ec2f9d +Block 0029 [ 88]: 4eebd36c8b747ca1 +Block 0029 [ 89]: 6c79dc594ac2b6d2 +Block 0029 [ 90]: 15ec09b5e91b9baa +Block 0029 [ 91]: 6b679f91d2e70b05 +Block 0029 [ 92]: 9044112a597d98ff +Block 0029 [ 93]: cd7356cf331ed49e +Block 0029 [ 94]: 2289fbcca68f8155 +Block 0029 [ 95]: 8e5210925b9bb7ab +Block 0029 [ 96]: 6102352f068f8cf4 +Block 0029 [ 97]: f75c6f5b364bdf6e +Block 0029 [ 98]: 4adb44d199e1b21d +Block 0029 [ 99]: 8572a78f72832a67 +Block 0029 [100]: 8a9be9459af145e7 +Block 0029 [101]: 7bbeb2a6194f8e9f +Block 0029 [102]: 946d6c9ce885afe8 +Block 0029 [103]: 2987514adc28fdef +Block 0029 [104]: d0ce50a68492e30a +Block 0029 [105]: 1dd87ea896a6cfda +Block 0029 [106]: 52018b7afc5d29c8 +Block 0029 [107]: 3f330a5203e6aba8 +Block 0029 [108]: 1ab316917f2550ec +Block 0029 [109]: 6f8eab32629a33bf +Block 0029 [110]: d946f816df91e2a9 +Block 0029 [111]: df0394272a8cf558 +Block 0029 [112]: c16fa502a1922da4 +Block 0029 [113]: 78981886ab7de65a +Block 0029 [114]: afc8ec9eddb17556 +Block 0029 [115]: 6095037aac2aac51 +Block 0029 [116]: be57b59cfec2d1ac +Block 0029 [117]: 32c35f6fb6388eab +Block 0029 [118]: f999903a5ee8f53d +Block 0029 [119]: 3b31837023238e6a +Block 0029 [120]: 7f0aef84e38845aa +Block 0029 [121]: b95f6cc42f15da2b +Block 0029 [122]: a110466efa197c33 +Block 0029 [123]: d672b963a4412d2a +Block 0029 [124]: 5cff9e860875e69e +Block 0029 [125]: e54a688a18a957dc +Block 0029 [126]: 4ea7386eb37b515b +Block 0029 [127]: 832110aef15e3a90 +Block 0030 [ 0]: 408b6edf7b6d76e8 +Block 0030 [ 1]: cdaec40a044edb88 +Block 0030 [ 2]: 67889ab6152afdcb +Block 0030 [ 3]: 9c05e196f92a3324 +Block 0030 [ 4]: 29b2b7b66c085796 +Block 0030 [ 5]: 15cfb2dca4c5ba8e +Block 0030 [ 6]: a6e2210668385b94 +Block 0030 [ 7]: 304e1faa20dde4eb +Block 0030 [ 8]: e020b30a1328a914 +Block 0030 [ 9]: 0bb51200dbae1919 +Block 0030 [ 10]: 1f89827bd0cd2685 +Block 0030 [ 11]: 4cf3c6e4183bb1d8 +Block 0030 [ 12]: 5b5df3a9e149e3e7 +Block 0030 [ 13]: 709b4402dafd008d +Block 0030 [ 14]: db17b2eafdb45f94 +Block 0030 [ 15]: 7d58b94409ca3b26 +Block 0030 [ 16]: 6a7a2a97933ce9f5 +Block 0030 [ 17]: 99c1673a757ca868 +Block 0030 [ 18]: 66be0bde99848db5 +Block 0030 [ 19]: 76778cdc3fd87363 +Block 0030 [ 20]: 8f7ba763e2500708 +Block 0030 [ 21]: 0030035d07ec5fdc +Block 0030 [ 22]: 9aec4aef00b2caf7 +Block 0030 [ 23]: ea91bb0a91fd2fd4 +Block 0030 [ 24]: e855a4fef28c4723 +Block 0030 [ 25]: a8ba555f79797dd8 +Block 0030 [ 26]: dba4f3b6d82436fb +Block 0030 [ 27]: 8e8937633dad67b1 +Block 0030 [ 28]: f3dcb5ff246778ce +Block 0030 [ 29]: 90f60fec9a7fe473 +Block 0030 [ 30]: a8f3330c49c7604f +Block 0030 [ 31]: c206d8fc6e4d656c +Block 0030 [ 32]: 472f2e4653c80e9d +Block 0030 [ 33]: a005dce2b9f47d49 +Block 0030 [ 34]: d211d4ea5cd4b7d6 +Block 0030 [ 35]: fe0f1444120846c6 +Block 0030 [ 36]: fa15fd1def127e14 +Block 0030 [ 37]: ac5dcf2b0a9576e0 +Block 0030 [ 38]: 455f0aa7ccc51e38 +Block 0030 [ 39]: 2359b04ce4ffa824 +Block 0030 [ 40]: e67bcab71417291e +Block 0030 [ 41]: c9842a22e6413101 +Block 0030 [ 42]: 40d66ed0eec1ff05 +Block 0030 [ 43]: e619379508a2380d +Block 0030 [ 44]: ed3128999706b8d4 +Block 0030 [ 45]: daf43ff2b3798f3b +Block 0030 [ 46]: 2297a50f89ea911e +Block 0030 [ 47]: 24974ef6978c6171 +Block 0030 [ 48]: af122d8bc2966070 +Block 0030 [ 49]: 3b1395bede3a62d0 +Block 0030 [ 50]: f2c9c53f8acc34b5 +Block 0030 [ 51]: 09592eed7eca3ba6 +Block 0030 [ 52]: 6265fa73035f278c +Block 0030 [ 53]: 27453b057745b250 +Block 0030 [ 54]: 58e561ff7c846a07 +Block 0030 [ 55]: d703c5f4913bc827 +Block 0030 [ 56]: 36271bffda0486c9 +Block 0030 [ 57]: d2d39c21360fe92e +Block 0030 [ 58]: e672846c80d55aef +Block 0030 [ 59]: 7d105fc325c91c5a +Block 0030 [ 60]: 68f9b57df6b83bff +Block 0030 [ 61]: 2082748779c8daf8 +Block 0030 [ 62]: 5a9c85cdc522417f +Block 0030 [ 63]: e96bcd019b9b486c +Block 0030 [ 64]: 235ee28d5d55e0c3 +Block 0030 [ 65]: eb3a4896469f0ec4 +Block 0030 [ 66]: a9463daca7c68291 +Block 0030 [ 67]: db08678f6153d8c7 +Block 0030 [ 68]: 1ec5fe9d4876f955 +Block 0030 [ 69]: 438d1307299993f2 +Block 0030 [ 70]: b0072c378b6cfb5d +Block 0030 [ 71]: 301ce10babee8f5d +Block 0030 [ 72]: 7c9b9bb3656e2db4 +Block 0030 [ 73]: 2d5b823e615ed753 +Block 0030 [ 74]: 4d673c349f7f8f13 +Block 0030 [ 75]: 50563f67797ec11f +Block 0030 [ 76]: 2685632a636d8aad +Block 0030 [ 77]: f83472de5cbbe1c6 +Block 0030 [ 78]: 0a6afea051cfb234 +Block 0030 [ 79]: eb98b35bf0f22db7 +Block 0030 [ 80]: 33ae1a95abbc098c +Block 0030 [ 81]: e91616e1ee4ef918 +Block 0030 [ 82]: 85716d42d5117cac +Block 0030 [ 83]: 8b0cfd81e670d7fe +Block 0030 [ 84]: c4bcb8dfeab2d5f1 +Block 0030 [ 85]: 8e0919c4bba64c94 +Block 0030 [ 86]: 4975b344cea18ee4 +Block 0030 [ 87]: 113039374ab49733 +Block 0030 [ 88]: f45ac779ae82a794 +Block 0030 [ 89]: dc1997bc3e941b34 +Block 0030 [ 90]: 17e3bdb9964e15a4 +Block 0030 [ 91]: 96ef0d0a598f7fd1 +Block 0030 [ 92]: df40353b051d5733 +Block 0030 [ 93]: e9332d784569c844 +Block 0030 [ 94]: e1d787472d41400a +Block 0030 [ 95]: e2869b0fa1f50af8 +Block 0030 [ 96]: af4af34b650d6926 +Block 0030 [ 97]: cfbcf7752b18c771 +Block 0030 [ 98]: 14887d9431f8c85a +Block 0030 [ 99]: 0cabbcef9a8e83ae +Block 0030 [100]: 62603de80ca6f069 +Block 0030 [101]: 460cce0f55659156 +Block 0030 [102]: 45f9e9b01da609cb +Block 0030 [103]: 957f9ba08dc91aea +Block 0030 [104]: 2716e73926fee4e8 +Block 0030 [105]: 9f30d53562bf353f +Block 0030 [106]: 0c91e8e4bd2ad7d0 +Block 0030 [107]: f31e079c8f7caeee +Block 0030 [108]: 05088ae684266d49 +Block 0030 [109]: b2413829a2145da5 +Block 0030 [110]: e1d9ad663aeb39fa +Block 0030 [111]: 4da017dc0924aa29 +Block 0030 [112]: a349f9eab20ea439 +Block 0030 [113]: 4752d31b48cbae21 +Block 0030 [114]: fbd84024e44caf92 +Block 0030 [115]: ba45887fb5412ff6 +Block 0030 [116]: 8de783c468d6448b +Block 0030 [117]: 7caa49cbd2592562 +Block 0030 [118]: 0cba3416ddd50181 +Block 0030 [119]: f2a52ea38b17cd73 +Block 0030 [120]: 2b627bf5f43c795f +Block 0030 [121]: d4f2048eed46a1cf +Block 0030 [122]: 9869b787c2659a03 +Block 0030 [123]: 291e0afd857d3d1d +Block 0030 [124]: ab227091de0a2ff0 +Block 0030 [125]: 0c09f15ca0e8bd34 +Block 0030 [126]: 6f4f9df1ea2ff4ca +Block 0030 [127]: d30af31b90a27ba7 +Block 0031 [ 0]: 89c7770e0637993f +Block 0031 [ 1]: 07197d828987a604 +Block 0031 [ 2]: 1eb45ba81728e842 +Block 0031 [ 3]: bb5a9840b6356a29 +Block 0031 [ 4]: af7780e7c496d1ff +Block 0031 [ 5]: dc8dccbf1fc8877a +Block 0031 [ 6]: 415d6cd8f543d990 +Block 0031 [ 7]: 4ea854c764c72a91 +Block 0031 [ 8]: 23fa956665955178 +Block 0031 [ 9]: 9a623692c01c8c3b +Block 0031 [ 10]: feb64166768fdbe9 +Block 0031 [ 11]: 4bcc60ef9434362c +Block 0031 [ 12]: 1fe8f1363f2c7b8c +Block 0031 [ 13]: 1f534df306ebb6a1 +Block 0031 [ 14]: ca7cc8fa8a7ccdf6 +Block 0031 [ 15]: cffc2531375c9e14 +Block 0031 [ 16]: 5a2bc32f0685bf45 +Block 0031 [ 17]: 3623f096a638438b +Block 0031 [ 18]: 57f791cf43d44568 +Block 0031 [ 19]: 470709fe0f7cdb14 +Block 0031 [ 20]: ea55cd16896a0b6b +Block 0031 [ 21]: 88bcb41ef6b2b157 +Block 0031 [ 22]: facb052f4d2c0d29 +Block 0031 [ 23]: 0a9b9eee1015ec4c +Block 0031 [ 24]: 13a0ade94e8d5555 +Block 0031 [ 25]: 96d74483bbc65425 +Block 0031 [ 26]: 5c5b3ca4b394be63 +Block 0031 [ 27]: 7ba2bfd959972e5f +Block 0031 [ 28]: b6522c3447665f79 +Block 0031 [ 29]: 64f6d68df4731ab4 +Block 0031 [ 30]: 560814a1051309c3 +Block 0031 [ 31]: 66ddf600fc6df4ee +Block 0031 [ 32]: 9900dc54c58d033f +Block 0031 [ 33]: 47f59e6b327d8e20 +Block 0031 [ 34]: bf33aa2244234bf1 +Block 0031 [ 35]: d3f691ecfe8c299b +Block 0031 [ 36]: 9e873b677f39ab86 +Block 0031 [ 37]: 75280f1c41300133 +Block 0031 [ 38]: 871e6602bb3ffb07 +Block 0031 [ 39]: 2a6319f258314678 +Block 0031 [ 40]: 97c2aaa125822db6 +Block 0031 [ 41]: e7bf880a1c7206ea +Block 0031 [ 42]: 196205598ec8f3b8 +Block 0031 [ 43]: cc6facefe12a1646 +Block 0031 [ 44]: a084acb57b445ceb +Block 0031 [ 45]: 052a7e2f7445bd31 +Block 0031 [ 46]: 7aa75e11161a5c24 +Block 0031 [ 47]: 686b9c4f2f5a23f6 +Block 0031 [ 48]: caa72eb4f8224ccf +Block 0031 [ 49]: a49541af0e3e242f +Block 0031 [ 50]: 3d2466672beea318 +Block 0031 [ 51]: c06207046ee65d5b +Block 0031 [ 52]: fe85635b22b6c656 +Block 0031 [ 53]: 229f18db75c70852 +Block 0031 [ 54]: 7dd9b36113efb72d +Block 0031 [ 55]: def0c1642032db45 +Block 0031 [ 56]: f320411dd1e888cd +Block 0031 [ 57]: 941e400b71a1335a +Block 0031 [ 58]: 67096e11cbc4fd48 +Block 0031 [ 59]: 4da96e1352bfcbfe +Block 0031 [ 60]: 156d67b4034efb2e +Block 0031 [ 61]: 7c3382bc2090a28f +Block 0031 [ 62]: 4bfa37978e24699a +Block 0031 [ 63]: 0bd050e6315619cf +Block 0031 [ 64]: 655205650866af61 +Block 0031 [ 65]: 017af77ec3ade1f6 +Block 0031 [ 66]: 9e9a2de2b181699d +Block 0031 [ 67]: b0146094deb7f12d +Block 0031 [ 68]: a8af88fffce3f712 +Block 0031 [ 69]: b109acbac6a3c08a +Block 0031 [ 70]: f80e22eac1c0e74e +Block 0031 [ 71]: 0ae3ce8462a0c4b5 +Block 0031 [ 72]: b9dd83c924e9009c +Block 0031 [ 73]: 5641c337ad3ec86e +Block 0031 [ 74]: d9f5563f75b4bf20 +Block 0031 [ 75]: bce9dbc659678f09 +Block 0031 [ 76]: 79250dd6a0392f8d +Block 0031 [ 77]: f8bef33608540e87 +Block 0031 [ 78]: d1c55b7b0584153a +Block 0031 [ 79]: 57776b6e818f7892 +Block 0031 [ 80]: c142b628cc6ee052 +Block 0031 [ 81]: e96b4db38bca244e +Block 0031 [ 82]: 556f1f3a16838b79 +Block 0031 [ 83]: bc475f68d72ddd98 +Block 0031 [ 84]: 7052f29f0da9b557 +Block 0031 [ 85]: 7b0cd825716d371b +Block 0031 [ 86]: 39ad7edbd2183ec5 +Block 0031 [ 87]: 84bef8ba060cefee +Block 0031 [ 88]: 812874fe8c3d0e0e +Block 0031 [ 89]: 11221a9493e8000a +Block 0031 [ 90]: ece764a8577a86f5 +Block 0031 [ 91]: a2f854d90a6987e0 +Block 0031 [ 92]: b1ea4324413dee11 +Block 0031 [ 93]: 4d76b35d0630f2ce +Block 0031 [ 94]: 1c14e37978e625c7 +Block 0031 [ 95]: a7a2956659999cfb +Block 0031 [ 96]: 2a1bc299a08be7d5 +Block 0031 [ 97]: 8b1de787db57d8b6 +Block 0031 [ 98]: 84546aabc8dcec8d +Block 0031 [ 99]: 74c55dc4c475fdd6 +Block 0031 [100]: 2fb4398a4f038499 +Block 0031 [101]: b3c6fa84200af9ab +Block 0031 [102]: 6a238dbd35570832 +Block 0031 [103]: 93a6a66d30e78ca7 +Block 0031 [104]: c2cf43cab843ba27 +Block 0031 [105]: 693cd69603e50ea4 +Block 0031 [106]: 6c14b77422c297a3 +Block 0031 [107]: d4fde0d4961b0b2a +Block 0031 [108]: 17f5c37030ca0df1 +Block 0031 [109]: 0a59e439206f2146 +Block 0031 [110]: 893f7ea1fce91480 +Block 0031 [111]: 0e89dfb3c481025f +Block 0031 [112]: d353be1933487620 +Block 0031 [113]: 88281e8286858847 +Block 0031 [114]: 2121b95d14d599b2 +Block 0031 [115]: e8dbf256a428526d +Block 0031 [116]: f7a6a26ab63a5bd4 +Block 0031 [117]: a05b9862052e1a49 +Block 0031 [118]: cf06bdbbda98c3f6 +Block 0031 [119]: 2001d765e3a3df2d +Block 0031 [120]: 33cb41b5981d1d85 +Block 0031 [121]: ffde63f1ee689564 +Block 0031 [122]: d2285236a47f5f22 +Block 0031 [123]: 2137a6082473dd47 +Block 0031 [124]: b350898ce34e6313 +Block 0031 [125]: 0e6a8437f71591eb +Block 0031 [126]: 262f62ad801339fe +Block 0031 [127]: 5e74704b5c91286c +Tag: 87 ae ed d6 51 7a b8 30 cd 97 65 cd 82 31 ab b2 e6 47 a5 de e0 8f 7c 05 e0 2f cb 76 33 35 d0 fd diff --git a/deps/phc-winner-argon2-20190702/kats/argon2i_v16.shasum b/deps/phc-winner-argon2-20190702/kats/argon2i_v16.shasum new file mode 100644 index 000000000..d36ecf6bc --- /dev/null +++ b/deps/phc-winner-argon2-20190702/kats/argon2i_v16.shasum @@ -0,0 +1 @@ +334f03e627afb67b946a530b90d2e11fb2e6abb44df992c0fb3198c7bacf5930 argon2i_v16 diff --git a/deps/phc-winner-argon2-20190702/kats/argon2id b/deps/phc-winner-argon2-20190702/kats/argon2id new file mode 100644 index 000000000..e5cdc6bb4 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/kats/argon2id @@ -0,0 +1,12304 @@ +======================================= +Argon2id version number 19 +======================================= +Memory: 32 KiB, Iterations: 3, Parallelism: 4 lanes, Tag length: 32 bytes +Password[32]: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +Salt[16]: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +Secret[8]: 03 03 03 03 03 03 03 03 +Associated data[12]: 04 04 04 04 04 04 04 04 04 04 04 04 +Pre-hashing digest: 28 89 de 48 7e b4 2a e5 00 c0 00 7e d9 25 2f 10 69 ea de c4 0d 57 65 b4 85 de 6d c2 43 7a 67 b8 54 6a 2f 0a cc 1a 08 82 db 8f cf 74 71 4b 47 2e 94 df 42 1a 5d a1 11 2f fa 11 43 43 70 a1 e9 97 + + After pass 0: +Block 0000 [ 0]: 6b2e09f10671bd43 +Block 0000 [ 1]: f69f5c27918a21be +Block 0000 [ 2]: dea7810ea41290e1 +Block 0000 [ 3]: 6787f7171870f893 +Block 0000 [ 4]: ca5aa8f5067b374c +Block 0000 [ 5]: 44cfcab94f414104 +Block 0000 [ 6]: 52525e831cf8cd52 +Block 0000 [ 7]: 3a1dcb76ae77f701 +Block 0000 [ 8]: db83ddac706d23d2 +Block 0000 [ 9]: ff63a62e68b98fa3 +Block 0000 [ 10]: 41ed55a99544e453 +Block 0000 [ 11]: 2ff6fa0d226c86fd +Block 0000 [ 12]: d7bf6d9a64e8b77b +Block 0000 [ 13]: a91ad24e61bffd45 +Block 0000 [ 14]: 7ebe9eea09adcd6c +Block 0000 [ 15]: e36884638b4c2996 +Block 0000 [ 16]: 5a54f32034697f4f +Block 0000 [ 17]: c885338cc4b929b7 +Block 0000 [ 18]: 51ba0bc044e3824c +Block 0000 [ 19]: ed9f60beee0ef312 +Block 0000 [ 20]: 6b169d498354fc50 +Block 0000 [ 21]: 32558851498c40ab +Block 0000 [ 22]: 8ba7642fbeb45909 +Block 0000 [ 23]: 8f9116af74ac6f46 +Block 0000 [ 24]: 2bff5ab7dbafffc7 +Block 0000 [ 25]: e49180713e66f3b3 +Block 0000 [ 26]: 332fe6daa4470665 +Block 0000 [ 27]: 7020c366c240dcfb +Block 0000 [ 28]: e5d88f78ac3e34dd +Block 0000 [ 29]: c52d58be17414590 +Block 0000 [ 30]: 3352cf25776e1689 +Block 0000 [ 31]: a08e922d19fdd765 +Block 0000 [ 32]: e810be2e50ffb55b +Block 0000 [ 33]: b159f1df83ab1136 +Block 0000 [ 34]: 0bf0fc23087ada59 +Block 0000 [ 35]: 991bfc5546f666a1 +Block 0000 [ 36]: 53a8168331d2e667 +Block 0000 [ 37]: 0a22a7e602c9abf5 +Block 0000 [ 38]: f646df091f9fab89 +Block 0000 [ 39]: 443c5ccb1ce10fc4 +Block 0000 [ 40]: 5fd384c9733ed4db +Block 0000 [ 41]: ce9a8f3699656a0d +Block 0000 [ 42]: cd37f767761c01ce +Block 0000 [ 43]: 2cc83d42946298b7 +Block 0000 [ 44]: 2bf5e7f0cb3dcb42 +Block 0000 [ 45]: e7a9e9eb031220ef +Block 0000 [ 46]: f78ddc5798e9be61 +Block 0000 [ 47]: c1bae043cab313a2 +Block 0000 [ 48]: 20e56ae7aa583904 +Block 0000 [ 49]: 0427402b61da57e0 +Block 0000 [ 50]: 770213016f71783c +Block 0000 [ 51]: 0b27d25052c1318b +Block 0000 [ 52]: d0caa69623b7e3ca +Block 0000 [ 53]: 9d7687e6a4ddce68 +Block 0000 [ 54]: e11ccf69d0f43b9c +Block 0000 [ 55]: 3f5a72caca81768b +Block 0000 [ 56]: e176a61b2e4da20f +Block 0000 [ 57]: 78a1aadbd9034284 +Block 0000 [ 58]: 49c049c7e00f9f59 +Block 0000 [ 59]: 6516f857a388f947 +Block 0000 [ 60]: a20d291c489e2e8b +Block 0000 [ 61]: e458d45b639d473c +Block 0000 [ 62]: 710c8c68ea1a26f7 +Block 0000 [ 63]: b290e665e27ab467 +Block 0000 [ 64]: 5c7633ea3703456b +Block 0000 [ 65]: 97571c02d657ce16 +Block 0000 [ 66]: 7b74cb951bc63514 +Block 0000 [ 67]: 23df75070130eb01 +Block 0000 [ 68]: eaace1e4ef1c8468 +Block 0000 [ 69]: d4dbceb8be3b1453 +Block 0000 [ 70]: 6a9fbba608aef476 +Block 0000 [ 71]: ddde0d99a8064a7a +Block 0000 [ 72]: 441a8cb66f88155b +Block 0000 [ 73]: 4a4c89ff8ea10fb4 +Block 0000 [ 74]: 3150ca9f9aed17cd +Block 0000 [ 75]: 6fc43b923d8ef6bd +Block 0000 [ 76]: 0b052515cb3197ab +Block 0000 [ 77]: 2a7f5d8c9f488664 +Block 0000 [ 78]: 110677ccfae3c81d +Block 0000 [ 79]: 1361f368edc978a2 +Block 0000 [ 80]: 51ad3a92b967d0c9 +Block 0000 [ 81]: 0f2ea496b44e1770 +Block 0000 [ 82]: 6f9c634a373cd5ff +Block 0000 [ 83]: aa21db063b0fb2be +Block 0000 [ 84]: 9ee5aa9033b8f489 +Block 0000 [ 85]: 3f56fd9d86dadea5 +Block 0000 [ 86]: 66f16b9849a00547 +Block 0000 [ 87]: 36171aaaeec11729 +Block 0000 [ 88]: 727119a32839d715 +Block 0000 [ 89]: 6278f4ba2188b967 +Block 0000 [ 90]: 6016719be569d76d +Block 0000 [ 91]: 36ac551e8e4a7bb5 +Block 0000 [ 92]: 06856164afe00095 +Block 0000 [ 93]: b8352672d69e8fd3 +Block 0000 [ 94]: 14926dad97d80627 +Block 0000 [ 95]: 6580259e95e8bd50 +Block 0000 [ 96]: 1932b5ff8287678f +Block 0000 [ 97]: 5d1a6bc6990f5960 +Block 0000 [ 98]: d7c5f4e4c3a7d856 +Block 0000 [ 99]: 88ad4b387d04817c +Block 0000 [100]: 38274590e64966c4 +Block 0000 [101]: 3ff81dc3610d60c6 +Block 0000 [102]: fbdc0c109a21d105 +Block 0000 [103]: bd77872efc5408ab +Block 0000 [104]: 6fa6bf9d96867be7 +Block 0000 [105]: f9cadf98fd4cf9ed +Block 0000 [106]: b23ffef15cbc7050 +Block 0000 [107]: 18aaa665bcc3b0e2 +Block 0000 [108]: 01070129cd4180f2 +Block 0000 [109]: f2514e7444d5cc41 +Block 0000 [110]: 998b45553a602fdd +Block 0000 [111]: 60094a7dc2ea8067 +Block 0000 [112]: faf57e40a119f4cf +Block 0000 [113]: 0b8c446b4b92020e +Block 0000 [114]: 6328254d21dcd105 +Block 0000 [115]: 7d88651de8ae3b6d +Block 0000 [116]: 03b5dcb7d1c28dbb +Block 0000 [117]: a61907655686f033 +Block 0000 [118]: 72831d520ad11387 +Block 0000 [119]: 33c98216d672085a +Block 0000 [120]: 578c5b7e80bf4671 +Block 0000 [121]: 52ddcbcc04e51448 +Block 0000 [122]: 01d951ee5923331b +Block 0000 [123]: d4a4597a1810415c +Block 0000 [124]: 420f07791bc9ecc3 +Block 0000 [125]: 3cd3138619d3f4fa +Block 0000 [126]: 137074e156a0690a +Block 0000 [127]: 8e4dd579ca1c1da0 +Block 0001 [ 0]: f727b5d2f5c54303 +Block 0001 [ 1]: 2fc5a656b980caa6 +Block 0001 [ 2]: 5c08c32e1796ab0e +Block 0001 [ 3]: 4ca1ed895a4692d5 +Block 0001 [ 4]: 68f05910c89460ef +Block 0001 [ 5]: 1ec8ac48623f9981 +Block 0001 [ 6]: 79bbc5c7317644d5 +Block 0001 [ 7]: 0d863b20b80d7266 +Block 0001 [ 8]: 8aa4ed020a3baeb2 +Block 0001 [ 9]: 8f72ae567b348b9d +Block 0001 [ 10]: a1f7a1370c9b7573 +Block 0001 [ 11]: 41d52ec493493843 +Block 0001 [ 12]: 780010b2f82c41e2 +Block 0001 [ 13]: 9227cb89939c4cf1 +Block 0001 [ 14]: 6d47b74940af209f +Block 0001 [ 15]: 22cf0b5f094be138 +Block 0001 [ 16]: eb3e235ec8745428 +Block 0001 [ 17]: fe2c2122d0d5741c +Block 0001 [ 18]: 48ca66bf709ae635 +Block 0001 [ 19]: 15975e305ed93fa3 +Block 0001 [ 20]: d6505e1ef94f37d0 +Block 0001 [ 21]: 0694f39f81e3a524 +Block 0001 [ 22]: 070c243d124b0a45 +Block 0001 [ 23]: b4492e0d58c75f3d +Block 0001 [ 24]: 26cdf6dc18a05336 +Block 0001 [ 25]: a1d074f1742e7363 +Block 0001 [ 26]: 45573fceeb9df977 +Block 0001 [ 27]: dcf4f450214c6422 +Block 0001 [ 28]: be560e719551ec36 +Block 0001 [ 29]: 22047152294cf78f +Block 0001 [ 30]: b1a69d55260c455b +Block 0001 [ 31]: a5b140ee053a67fe +Block 0001 [ 32]: 504074e4519947c8 +Block 0001 [ 33]: 0c956c5016864c1e +Block 0001 [ 34]: 38252f16cd4047f3 +Block 0001 [ 35]: 98c45cddb7290653 +Block 0001 [ 36]: 4e2cb095a3c32d7b +Block 0001 [ 37]: 27bc5bdf70afa578 +Block 0001 [ 38]: ed72b0e3ef683363 +Block 0001 [ 39]: 073f517b2dd80ea8 +Block 0001 [ 40]: 3be98a1a15a06f5f +Block 0001 [ 41]: 45f8a0bb8c3311f9 +Block 0001 [ 42]: 2652050c60058b35 +Block 0001 [ 43]: 220db5da269c42e9 +Block 0001 [ 44]: c9873eca93f9284d +Block 0001 [ 45]: 51e541e20ed3b717 +Block 0001 [ 46]: ab5577167a08dbe0 +Block 0001 [ 47]: dba843bcce1a4f97 +Block 0001 [ 48]: 7522310037167b42 +Block 0001 [ 49]: ae4f7625ac90fe15 +Block 0001 [ 50]: d0e88f7c46c53b68 +Block 0001 [ 51]: 44493d819ccf6116 +Block 0001 [ 52]: fb4a375515aac232 +Block 0001 [ 53]: 4eaf852bb04d832b +Block 0001 [ 54]: e004532fdf1f8a77 +Block 0001 [ 55]: 9e42ab4ede979be6 +Block 0001 [ 56]: eca0e805ad14469d +Block 0001 [ 57]: 2376bdd6b2a4e830 +Block 0001 [ 58]: fd4e52a9d1bbcb1e +Block 0001 [ 59]: 98fe361ab93d4cad +Block 0001 [ 60]: 6eaba863b1306d52 +Block 0001 [ 61]: 3e3eba82e84b50ce +Block 0001 [ 62]: 109393a39574f740 +Block 0001 [ 63]: 71d8dff2a4631238 +Block 0001 [ 64]: 023b3d3a21dbd6bf +Block 0001 [ 65]: 5777a50dbb69bbea +Block 0001 [ 66]: 67d2e2b98a33d217 +Block 0001 [ 67]: 2770484d5df31656 +Block 0001 [ 68]: 44ad2348a99a53e6 +Block 0001 [ 69]: 192bdd10c8741f1c +Block 0001 [ 70]: 26bc650bf48813cf +Block 0001 [ 71]: 00b6212dd45770e3 +Block 0001 [ 72]: d3b303f8d0e40ad7 +Block 0001 [ 73]: 511f3b88d352e54b +Block 0001 [ 74]: d39bc6144ac34aaa +Block 0001 [ 75]: 655c0808fdbd0c47 +Block 0001 [ 76]: d47c00e57c1d9dc4 +Block 0001 [ 77]: 27047a13946a7b07 +Block 0001 [ 78]: ba6afef7bf5c92d9 +Block 0001 [ 79]: 06a21ec0edb3ef37 +Block 0001 [ 80]: 78fad9da3ec74d75 +Block 0001 [ 81]: 2c5ee3cf300d5035 +Block 0001 [ 82]: 48cd34c84833254b +Block 0001 [ 83]: c72859ba124c6410 +Block 0001 [ 84]: 1a95c95581d67a24 +Block 0001 [ 85]: 469ff3df7e307532 +Block 0001 [ 86]: 7f1b94f113685691 +Block 0001 [ 87]: 91302b3fb0dc0f5e +Block 0001 [ 88]: c2307db64d2c4b4f +Block 0001 [ 89]: f2e3aeaea45bf48b +Block 0001 [ 90]: a3a4456787fe1021 +Block 0001 [ 91]: f9d9f56ed79a693e +Block 0001 [ 92]: d499174ccec1aa6a +Block 0001 [ 93]: 9d736ac57aec8096 +Block 0001 [ 94]: 7d02face37b3f3f5 +Block 0001 [ 95]: 26b5b9d2ccf4936b +Block 0001 [ 96]: 91d5c0393d5e4342 +Block 0001 [ 97]: 56594cb140bc3e21 +Block 0001 [ 98]: 35d8e19e19052a57 +Block 0001 [ 99]: 76a3e30c157a2394 +Block 0001 [100]: 3931ad30ac2f1385 +Block 0001 [101]: 7be8a2faaab85a90 +Block 0001 [102]: 02c7a5787f806c64 +Block 0001 [103]: 45b6a0efbe86d4b2 +Block 0001 [104]: deb784749dde8bc7 +Block 0001 [105]: a66bb8858e7500cb +Block 0001 [106]: bd8d508588c76ec4 +Block 0001 [107]: 6cb11235b27459a1 +Block 0001 [108]: 98e417a18c80222a +Block 0001 [109]: 39d142ff0552ddfb +Block 0001 [110]: 743c8580c0b99adb +Block 0001 [111]: f636e439e816b733 +Block 0001 [112]: 93b827603b32c52d +Block 0001 [113]: bba4334422741b32 +Block 0001 [114]: 2f4de2810b3a5cad +Block 0001 [115]: 5d0d8ccf002b95be +Block 0001 [116]: 921acd65ef4dd220 +Block 0001 [117]: 0fb7f4732577649f +Block 0001 [118]: 262d7ab021de8924 +Block 0001 [119]: 29aff84fbb4f249e +Block 0001 [120]: a503d32085ca5f78 +Block 0001 [121]: e244661f87621638 +Block 0001 [122]: 93f2ff03e3997016 +Block 0001 [123]: 69c2d47c210f47e5 +Block 0001 [124]: e782c3726723d164 +Block 0001 [125]: cac6f9d71f31beae +Block 0001 [126]: ed0e35037219abf0 +Block 0001 [127]: c56325d142c23d49 +Block 0002 [ 0]: 37542c2df4c423ff +Block 0002 [ 1]: 6cf1d602626f0fc1 +Block 0002 [ 2]: 449e5a5d622d8883 +Block 0002 [ 3]: 79ec5285f3ba957c +Block 0002 [ 4]: cc62f30b0b412ef0 +Block 0002 [ 5]: b47e35f1c950a027 +Block 0002 [ 6]: c5a5c6ab91729a64 +Block 0002 [ 7]: 020dbf60ec862cd5 +Block 0002 [ 8]: cf41de734d20ea2a +Block 0002 [ 9]: f9deadfe55574976 +Block 0002 [ 10]: ed50e4af98091491 +Block 0002 [ 11]: 500489fa3ba28742 +Block 0002 [ 12]: da566e1b85f51522 +Block 0002 [ 13]: b8f8ef6271893952 +Block 0002 [ 14]: cc1705c220d77c80 +Block 0002 [ 15]: 1e4dcb35323c2b1f +Block 0002 [ 16]: 0454a227bbf5c043 +Block 0002 [ 17]: e8a04d31c4d0918d +Block 0002 [ 18]: 6869e1be1a48b6e8 +Block 0002 [ 19]: 9fc384834694d4a3 +Block 0002 [ 20]: a14a4ff00ef57672 +Block 0002 [ 21]: c1a352faf5ec4bf7 +Block 0002 [ 22]: b5304731b08b2bca +Block 0002 [ 23]: 1524a444b939f583 +Block 0002 [ 24]: dfdfc62e544ee931 +Block 0002 [ 25]: 5b419d64efb6b859 +Block 0002 [ 26]: 1cad24e9741c95a9 +Block 0002 [ 27]: 9f3d3cd6121481be +Block 0002 [ 28]: 2bcf04a2f0a5ab51 +Block 0002 [ 29]: 6ab606ce39530d4e +Block 0002 [ 30]: b3d73d18a2d59067 +Block 0002 [ 31]: 73d5536c83faca70 +Block 0002 [ 32]: 1643a26ee60dd698 +Block 0002 [ 33]: b696edd0dcf041ab +Block 0002 [ 34]: 59374f36716bf5e4 +Block 0002 [ 35]: 15f5b0bc4ef1e83e +Block 0002 [ 36]: 51593489c4070cd7 +Block 0002 [ 37]: 8ea9d72e8ed25933 +Block 0002 [ 38]: ec1cff045b2851da +Block 0002 [ 39]: fc8ca9e07c1e5b94 +Block 0002 [ 40]: a80f56f79969cb47 +Block 0002 [ 41]: bce30dd5ee75b67b +Block 0002 [ 42]: 1b92c884e1fc7dcd +Block 0002 [ 43]: f6cdb641c3499906 +Block 0002 [ 44]: d7a61c7ceda83b95 +Block 0002 [ 45]: ef369d5b2addc65a +Block 0002 [ 46]: 41a37a1593450b26 +Block 0002 [ 47]: d67ee1a0ed052b6f +Block 0002 [ 48]: 790670599857280d +Block 0002 [ 49]: ef09a474d602a71f +Block 0002 [ 50]: 5c848619faeb4345 +Block 0002 [ 51]: 11ed266e34885c8b +Block 0002 [ 52]: 441142a800d7110e +Block 0002 [ 53]: c38c2899b733098d +Block 0002 [ 54]: 28ba4d75aca037e4 +Block 0002 [ 55]: 68090ec72cb7c46b +Block 0002 [ 56]: 760c2760e04a7c2a +Block 0002 [ 57]: 9b97c70acceb8c92 +Block 0002 [ 58]: 5fba5c38b2e15641 +Block 0002 [ 59]: 50f86dd277b866a4 +Block 0002 [ 60]: 8039c1367519c219 +Block 0002 [ 61]: 5e757c150da38ee9 +Block 0002 [ 62]: 07b859d43b600353 +Block 0002 [ 63]: 75c2360defe114f1 +Block 0002 [ 64]: a7759837a37400b7 +Block 0002 [ 65]: ba58e8ee8b8f1c39 +Block 0002 [ 66]: 864efeada86a8473 +Block 0002 [ 67]: 771d733623a03670 +Block 0002 [ 68]: 82ae44a9cec2888c +Block 0002 [ 69]: 39767840d86b49f9 +Block 0002 [ 70]: 862efb1223f3dd57 +Block 0002 [ 71]: 6c0a1554741c61bc +Block 0002 [ 72]: 220c6a98d43773a3 +Block 0002 [ 73]: 666ce3eb68da30ff +Block 0002 [ 74]: 4aabf6192271b063 +Block 0002 [ 75]: b97d63b09305732b +Block 0002 [ 76]: 9c036e99fdc41a86 +Block 0002 [ 77]: 0c9553db473231e8 +Block 0002 [ 78]: d3943f668c0b6c0b +Block 0002 [ 79]: 07cd9bf597d17086 +Block 0002 [ 80]: be683d427fc7bd35 +Block 0002 [ 81]: 278c7dac1544b192 +Block 0002 [ 82]: 251fefb71350aed4 +Block 0002 [ 83]: 85f9242deb8e6dc2 +Block 0002 [ 84]: 6c2d92e5b026defa +Block 0002 [ 85]: 8a6e5a2c0dd4f320 +Block 0002 [ 86]: 9feb2206de02a227 +Block 0002 [ 87]: ebf895ed6bf28049 +Block 0002 [ 88]: 4370fe0c90ded371 +Block 0002 [ 89]: 3e15ac9b74b8bd29 +Block 0002 [ 90]: 6aee88d8288707eb +Block 0002 [ 91]: a2c4a130ef335227 +Block 0002 [ 92]: 49e0065e1e168905 +Block 0002 [ 93]: 7c8f1d39d365f761 +Block 0002 [ 94]: 17f3a79f154e7af3 +Block 0002 [ 95]: 8556abf3d775a8cb +Block 0002 [ 96]: e92cb241d42d215d +Block 0002 [ 97]: e27038d2dc363774 +Block 0002 [ 98]: c698e01379eee779 +Block 0002 [ 99]: 0e9851af7296a899 +Block 0002 [100]: 35796451a0ba1749 +Block 0002 [101]: a699ea7d0e2a1754 +Block 0002 [102]: b16fb729ee40602a +Block 0002 [103]: ae3d2de416b7a411 +Block 0002 [104]: d009f76fb4349a93 +Block 0002 [105]: 82e6e58f5f7af70f +Block 0002 [106]: 16e405c51698662e +Block 0002 [107]: 95f4af34a6330e64 +Block 0002 [108]: 94f7bf613dbaa17f +Block 0002 [109]: 5152a3ff25691dbc +Block 0002 [110]: 5e86235d0c82f951 +Block 0002 [111]: d8ac241b4ceb3803 +Block 0002 [112]: 9244e793ca60a5f3 +Block 0002 [113]: 76dab340096fabbf +Block 0002 [114]: c5adf98472940f8a +Block 0002 [115]: 106b551d058f8f19 +Block 0002 [116]: bb258b750fc215de +Block 0002 [117]: ad7140812d40e929 +Block 0002 [118]: 3ad057869afaed79 +Block 0002 [119]: c254bf68bb31355b +Block 0002 [120]: ac8b17e9691a2c01 +Block 0002 [121]: a0f5d368cc92d6b2 +Block 0002 [122]: 57e474eee518e257 +Block 0002 [123]: 4eb432e176d82c1e +Block 0002 [124]: e8dc2a67bc27044e +Block 0002 [125]: ccca0b36894bae07 +Block 0002 [126]: c50e115a40135881 +Block 0002 [127]: 31ab7e9610be77cb +Block 0003 [ 0]: 033a9a825c0e3375 +Block 0003 [ 1]: ffb04963be6b3b77 +Block 0003 [ 2]: a5cd46d300b6dd82 +Block 0003 [ 3]: ec36c67ff576986c +Block 0003 [ 4]: 437b5a54375ab6c7 +Block 0003 [ 5]: 927811ef085e09c0 +Block 0003 [ 6]: 51c5e874382b475c +Block 0003 [ 7]: 13b5997ee7466630 +Block 0003 [ 8]: 84521039bc284d2f +Block 0003 [ 9]: 34791762f12cdc8c +Block 0003 [ 10]: f82a6cea29c3f956 +Block 0003 [ 11]: cecc35a9a9869d35 +Block 0003 [ 12]: 921553f94b2ad7b1 +Block 0003 [ 13]: bd151a3ae8982435 +Block 0003 [ 14]: e44961547aa6b6e8 +Block 0003 [ 15]: 35791c0b88a53841 +Block 0003 [ 16]: 6c1f506cd6b169f4 +Block 0003 [ 17]: c3d5841e25436bc4 +Block 0003 [ 18]: 9865ad21e2f62b1f +Block 0003 [ 19]: 65447e3aa9771e88 +Block 0003 [ 20]: 1a215926fc24f395 +Block 0003 [ 21]: 511db9dcacc2fde0 +Block 0003 [ 22]: 688e9980afdd513c +Block 0003 [ 23]: 902888d7ee355198 +Block 0003 [ 24]: e1888488338e8264 +Block 0003 [ 25]: 6f8d93269dc9670c +Block 0003 [ 26]: 0ea20bdd457c7ec7 +Block 0003 [ 27]: d6f10dea0ab8fa38 +Block 0003 [ 28]: dd69440b4f6d86bb +Block 0003 [ 29]: f218fbd09c06ff41 +Block 0003 [ 30]: 00fbfd70204fc266 +Block 0003 [ 31]: ab4a93d83956e58b +Block 0003 [ 32]: d7a6b398a589f492 +Block 0003 [ 33]: be8ceac4195f4c7e +Block 0003 [ 34]: e82963ea0389aef3 +Block 0003 [ 35]: 3adba6ba5dfbc70b +Block 0003 [ 36]: 959083b7cabe53dd +Block 0003 [ 37]: f5537e16031a1451 +Block 0003 [ 38]: 70689da6075493cc +Block 0003 [ 39]: 86054b0238ed2f05 +Block 0003 [ 40]: 5a4ae91c92ed9852 +Block 0003 [ 41]: 482499c5469d6a79 +Block 0003 [ 42]: ba459a7de4e0170b +Block 0003 [ 43]: 42009024a1939a39 +Block 0003 [ 44]: ff24fe13344a4ea2 +Block 0003 [ 45]: a9881fa40b1d5c30 +Block 0003 [ 46]: 76fbff24e8820359 +Block 0003 [ 47]: 1e12b2bfee1d5674 +Block 0003 [ 48]: 3973d0650a945227 +Block 0003 [ 49]: 7f5916266bf603ad +Block 0003 [ 50]: 95977d0c7146a89e +Block 0003 [ 51]: db9d6047fbbc11d9 +Block 0003 [ 52]: 165175c973740ccd +Block 0003 [ 53]: 980c7be752aa9399 +Block 0003 [ 54]: 310d0c54051b9783 +Block 0003 [ 55]: 6d66372da35a61d7 +Block 0003 [ 56]: 25512dba862b2c55 +Block 0003 [ 57]: f9519f53a64c2007 +Block 0003 [ 58]: 412c96e8a04d50dc +Block 0003 [ 59]: e267e74a4f486eca +Block 0003 [ 60]: 1692d421119d95f1 +Block 0003 [ 61]: 59acacdf9054a080 +Block 0003 [ 62]: e21e41c233e654dd +Block 0003 [ 63]: 776c9d31c68eeac1 +Block 0003 [ 64]: 469a74646cbff04f +Block 0003 [ 65]: cdc326fbc1217c85 +Block 0003 [ 66]: 9839d2208cf23d14 +Block 0003 [ 67]: 7f8d6f4fdd508aac +Block 0003 [ 68]: ec2c7129c1ede201 +Block 0003 [ 69]: eaa1d41993b894ac +Block 0003 [ 70]: 62a6ff95af57746e +Block 0003 [ 71]: e3cfb9e09b389b62 +Block 0003 [ 72]: e5d8e6b2f5c56087 +Block 0003 [ 73]: fea52606f876dd3d +Block 0003 [ 74]: 09d42ae72aab03ed +Block 0003 [ 75]: 469ca64f7e95bd2f +Block 0003 [ 76]: 03a141e08956df41 +Block 0003 [ 77]: 0c675a6d49a093ce +Block 0003 [ 78]: 904622e9fc3aeeea +Block 0003 [ 79]: 352fa38b9134c932 +Block 0003 [ 80]: 68e940494610d7cb +Block 0003 [ 81]: 37fc53a67dedf748 +Block 0003 [ 82]: fd3a7cd03312fec2 +Block 0003 [ 83]: 5cad438e52ed4347 +Block 0003 [ 84]: 80ebab1679b71b8b +Block 0003 [ 85]: 87497f358d6563f0 +Block 0003 [ 86]: 4a8b3c7f3126291a +Block 0003 [ 87]: d39ab8372acfa450 +Block 0003 [ 88]: db936c859ee7eec1 +Block 0003 [ 89]: d0e3658c3584931b +Block 0003 [ 90]: 70b321e145b7fde0 +Block 0003 [ 91]: 4b378a260b92af14 +Block 0003 [ 92]: 3b0726497f9ec36d +Block 0003 [ 93]: da1ef2a3ae8bed54 +Block 0003 [ 94]: 66d75fc3b087213d +Block 0003 [ 95]: f4c8a72b9d79bf0c +Block 0003 [ 96]: a2b1447f1b6df16d +Block 0003 [ 97]: 7d5a9efbc2dce79b +Block 0003 [ 98]: 62fbf22cf1fc124e +Block 0003 [ 99]: 4242820b9c5e47ef +Block 0003 [100]: 9f10556f00ffe526 +Block 0003 [101]: 6a08ccdc012d3608 +Block 0003 [102]: 9c4f3aefa54c172e +Block 0003 [103]: 04c665a5be09ef37 +Block 0003 [104]: 513f5ecfd230b7a4 +Block 0003 [105]: 9af91bcb5a94e05a +Block 0003 [106]: 67e742dd8815f572 +Block 0003 [107]: 3bb0fc4e2dbc9c6b +Block 0003 [108]: 140a635b9dce287f +Block 0003 [109]: 07f4465d81127d05 +Block 0003 [110]: 689d3f84aa045d3f +Block 0003 [111]: a60b928eeb7c986c +Block 0003 [112]: fd2f18537d468745 +Block 0003 [113]: 0c23e02868032019 +Block 0003 [114]: f68a25333b834b6b +Block 0003 [115]: 8a4ed24e784b3a47 +Block 0003 [116]: 46bf8147421a0572 +Block 0003 [117]: 369fa72d40415b7f +Block 0003 [118]: 6882dabd6a068f34 +Block 0003 [119]: dc8e2cdfe017dbee +Block 0003 [120]: e0f8c59632b31b30 +Block 0003 [121]: 7ce3a83234277cc4 +Block 0003 [122]: 7523755ddae51a70 +Block 0003 [123]: 727cbd57e13e08bb +Block 0003 [124]: 3d25e43aeb8ab15a +Block 0003 [125]: bb434251e358c81e +Block 0003 [126]: ccfcf5ef39898f2f +Block 0003 [127]: 5c7b6af56dc93d90 +Block 0004 [ 0]: 4aad2c9e9615357d +Block 0004 [ 1]: ce6a489393264830 +Block 0004 [ 2]: 44f6dd677120c34c +Block 0004 [ 3]: 9b54b4c637722c0d +Block 0004 [ 4]: 36b59880f89ce66b +Block 0004 [ 5]: f9941dacf99fa3b2 +Block 0004 [ 6]: 0561133fe2413998 +Block 0004 [ 7]: 3624f439f0356886 +Block 0004 [ 8]: 7f69556b861dc791 +Block 0004 [ 9]: 2b2c080682a158f9 +Block 0004 [ 10]: b5cd679b5b98078b +Block 0004 [ 11]: f50bda1f106687ab +Block 0004 [ 12]: 6a7fd322c9d0e356 +Block 0004 [ 13]: c0d57b7d551517f0 +Block 0004 [ 14]: cb0076497b271329 +Block 0004 [ 15]: 1ee3a218ac2e94bb +Block 0004 [ 16]: f81fd9c8ad33ab94 +Block 0004 [ 17]: 06f74124853c642c +Block 0004 [ 18]: af67e59ca12aba8b +Block 0004 [ 19]: c69ab433b4e3f026 +Block 0004 [ 20]: 066b5f97e6f94a14 +Block 0004 [ 21]: a660fc3551a8ccdb +Block 0004 [ 22]: f6e647def8255386 +Block 0004 [ 23]: deeaae8a41569d89 +Block 0004 [ 24]: 502dfea1f3866170 +Block 0004 [ 25]: 0055e5035ee2effd +Block 0004 [ 26]: ea1bc368a36a4989 +Block 0004 [ 27]: d187d3b09c31bd2e +Block 0004 [ 28]: ecc108964a73eea1 +Block 0004 [ 29]: 6f03013c3375bea4 +Block 0004 [ 30]: 4d2b4f01c9a594a1 +Block 0004 [ 31]: 6afa1c3705bceb93 +Block 0004 [ 32]: 29a3def8590e29e2 +Block 0004 [ 33]: 388e0b50d37ca6fb +Block 0004 [ 34]: a9a2be5abc3ae355 +Block 0004 [ 35]: 655154a45cf28d3f +Block 0004 [ 36]: b4bf1f57bcb985a5 +Block 0004 [ 37]: 74ac80093cc72816 +Block 0004 [ 38]: dc10be4b89ecc2c9 +Block 0004 [ 39]: a8f3d3892d18f8c5 +Block 0004 [ 40]: 2a9bedb7783e517e +Block 0004 [ 41]: 8fb2d64cdddb85e2 +Block 0004 [ 42]: c9426c402d69e384 +Block 0004 [ 43]: b4d887a9f0e27244 +Block 0004 [ 44]: 131338affae1913f +Block 0004 [ 45]: bea6e8197ecf2b57 +Block 0004 [ 46]: 2beb9a0a4629ea26 +Block 0004 [ 47]: a0b1321c16b6df16 +Block 0004 [ 48]: 5e803cc0fda654b4 +Block 0004 [ 49]: 51d8ea1da44ff8c8 +Block 0004 [ 50]: 31724ec603231a0f +Block 0004 [ 51]: 11e7d7c7d3f87451 +Block 0004 [ 52]: 73a6efc08a63c816 +Block 0004 [ 53]: 0f5007b3893fde88 +Block 0004 [ 54]: 9639fa7d1f9ba15d +Block 0004 [ 55]: 75857f3fc55b11b3 +Block 0004 [ 56]: e16f7ae209135d5b +Block 0004 [ 57]: 4c9884238bfb53ec +Block 0004 [ 58]: c66cbb76ade05220 +Block 0004 [ 59]: 7060a8642a6358f1 +Block 0004 [ 60]: e1441ddd05e3e94a +Block 0004 [ 61]: 40eb35e6b1fe60a4 +Block 0004 [ 62]: 32db0c582a9a1c4b +Block 0004 [ 63]: 156d62abf13c8d42 +Block 0004 [ 64]: 6386901cfaf4cd5f +Block 0004 [ 65]: d485163ee2894a0a +Block 0004 [ 66]: 5bbd9371b6ddbda8 +Block 0004 [ 67]: 617f0a95d0d1ebad +Block 0004 [ 68]: ddda42edd989a5de +Block 0004 [ 69]: bf6218a5e8a4fc7f +Block 0004 [ 70]: 948c99e73dcef198 +Block 0004 [ 71]: d2dae1cc5189a2ac +Block 0004 [ 72]: 9ab9309c75d14489 +Block 0004 [ 73]: 0096c018c9922cc0 +Block 0004 [ 74]: c55d076c6afdfb36 +Block 0004 [ 75]: 6940a46c5f5f8ff7 +Block 0004 [ 76]: 1f821452ed6805d5 +Block 0004 [ 77]: a5e13572d196c88f +Block 0004 [ 78]: fb84aca56c950808 +Block 0004 [ 79]: db36d78614fdcae1 +Block 0004 [ 80]: f74f05e57df8e0a6 +Block 0004 [ 81]: 4a6cd2d0b706fd77 +Block 0004 [ 82]: 77b1998388a62f9d +Block 0004 [ 83]: 843d8aa68f4738e7 +Block 0004 [ 84]: e50d81d9d86bb937 +Block 0004 [ 85]: b35517d78153e1f0 +Block 0004 [ 86]: 4d6667011dc0f5c9 +Block 0004 [ 87]: bdfbb81b05906373 +Block 0004 [ 88]: ff1c544cb9c55da0 +Block 0004 [ 89]: 7be55700f0926509 +Block 0004 [ 90]: 0a049f631a618979 +Block 0004 [ 91]: e185e5ca1f799f6e +Block 0004 [ 92]: a810f75491b3cfb7 +Block 0004 [ 93]: af77d89abab3e2d8 +Block 0004 [ 94]: c7c7fcf6f7e1fb7e +Block 0004 [ 95]: de4a29cc78702394 +Block 0004 [ 96]: 71e58cf077d6d85d +Block 0004 [ 97]: b73fc4a749b34ead +Block 0004 [ 98]: ffeccad0666cc6af +Block 0004 [ 99]: 69fbdea85dcd455f +Block 0004 [100]: 278f863ba6acabc5 +Block 0004 [101]: e66965a305bc4c40 +Block 0004 [102]: b9423de0dce901b7 +Block 0004 [103]: 15e0c769d840331e +Block 0004 [104]: 928eec9442a6b06f +Block 0004 [105]: db36ba9eca162aa9 +Block 0004 [106]: 11ce79a96c435d1e +Block 0004 [107]: c4950d5470035ce8 +Block 0004 [108]: 1730ef3bde3b5b6a +Block 0004 [109]: ac80f0e3f59a5d5c +Block 0004 [110]: 8ea557f8180c1661 +Block 0004 [111]: 1bf6e898445a963d +Block 0004 [112]: c004558618166516 +Block 0004 [113]: 4fbb7d0b5c4c5f59 +Block 0004 [114]: c81240d4eae498d0 +Block 0004 [115]: a6671d0bcaa177dc +Block 0004 [116]: 1b413c8e690567d0 +Block 0004 [117]: f5f3e1c8221f09e0 +Block 0004 [118]: 9c8f5fec57d0e3c0 +Block 0004 [119]: e343869ffa9b4f43 +Block 0004 [120]: 29dc7ffa4ba5bc92 +Block 0004 [121]: 708cb720e2816ba8 +Block 0004 [122]: 52a1d85807f13c6a +Block 0004 [123]: 561e4a36786d4bef +Block 0004 [124]: 2966f347c17a3914 +Block 0004 [125]: 3dc4aac7982d3f1c +Block 0004 [126]: aae55b9282ac0bb3 +Block 0004 [127]: 0f4767a8e4081496 +Block 0005 [ 0]: a2f1f29ea7aa2805 +Block 0005 [ 1]: d8c3cbc2ebbf0eb4 +Block 0005 [ 2]: a6b62b7344e68672 +Block 0005 [ 3]: e5dad5558824578c +Block 0005 [ 4]: 7f4977662f4a9dcd +Block 0005 [ 5]: 9740712b639051f1 +Block 0005 [ 6]: 76d060bce2adac18 +Block 0005 [ 7]: e00a0d348c440e6c +Block 0005 [ 8]: 3ee6477fdaa4d664 +Block 0005 [ 9]: 64008d83e1dfc177 +Block 0005 [ 10]: 430dc48d1c295406 +Block 0005 [ 11]: 9552e22ed145e6c1 +Block 0005 [ 12]: 57bd17aae86ad663 +Block 0005 [ 13]: 606091bc16a9bba7 +Block 0005 [ 14]: 28194ab3da1ac0a2 +Block 0005 [ 15]: 5e56b17cd078d2f4 +Block 0005 [ 16]: c248a735043acb68 +Block 0005 [ 17]: 42e8f874f7436184 +Block 0005 [ 18]: 376109d627e2c7b5 +Block 0005 [ 19]: e991290d19bfafbe +Block 0005 [ 20]: 2d6674137d9e9a54 +Block 0005 [ 21]: 281d16baf189e1b0 +Block 0005 [ 22]: 2ccf19eeb3111b77 +Block 0005 [ 23]: 6d296a58e66dc49d +Block 0005 [ 24]: c6f697703d9dc1d6 +Block 0005 [ 25]: b05254caf35910c6 +Block 0005 [ 26]: 3c72ab46ee180152 +Block 0005 [ 27]: 213a5becbe4615e1 +Block 0005 [ 28]: 4d84d1ee510b9e93 +Block 0005 [ 29]: 0160bed22edeeb55 +Block 0005 [ 30]: c1433fd0b0655b60 +Block 0005 [ 31]: 32632df221174ebc +Block 0005 [ 32]: 2a2e3e2f009f4034 +Block 0005 [ 33]: 0bbfc3da3267d57b +Block 0005 [ 34]: 0a14a644572cee42 +Block 0005 [ 35]: 7e77789809f9720d +Block 0005 [ 36]: 563ecb03c2c90611 +Block 0005 [ 37]: dbac4b6bbe26ad50 +Block 0005 [ 38]: 6af6d1b08b1e4c18 +Block 0005 [ 39]: 4e33c9a639b36584 +Block 0005 [ 40]: a5ec9a23696f2405 +Block 0005 [ 41]: 54c69b780e8359a4 +Block 0005 [ 42]: 1b6458e286139e45 +Block 0005 [ 43]: 4bb6edeecdc79d8f +Block 0005 [ 44]: 87a0dfbfedb05191 +Block 0005 [ 45]: e5e875ee54c10ac7 +Block 0005 [ 46]: 412b2c305de89dfb +Block 0005 [ 47]: c6968cb2716aee54 +Block 0005 [ 48]: 9c17a0b772b6afa9 +Block 0005 [ 49]: b37a9be1538f0d5c +Block 0005 [ 50]: 3783ecd08d568855 +Block 0005 [ 51]: 66a9730d0497e4a8 +Block 0005 [ 52]: 946f1aa176c96d55 +Block 0005 [ 53]: b932be7315159d78 +Block 0005 [ 54]: 82c9b2f8adf545bd +Block 0005 [ 55]: 939c6ec3e66ab28b +Block 0005 [ 56]: b705f1ba2b442544 +Block 0005 [ 57]: cbfc1c2c0437fe1e +Block 0005 [ 58]: b5d171e06a5b5d94 +Block 0005 [ 59]: b65e7548e4290c0f +Block 0005 [ 60]: f6c904d14c184ba5 +Block 0005 [ 61]: 821801c0227e5b4f +Block 0005 [ 62]: bb008a3cd10a6657 +Block 0005 [ 63]: c8291b37511aba68 +Block 0005 [ 64]: ece5c306e15e7e96 +Block 0005 [ 65]: acee9e6ec3a7d921 +Block 0005 [ 66]: 8d8bebf10b2b4e4a +Block 0005 [ 67]: 409a9c93cf143f39 +Block 0005 [ 68]: 8c4ff0acc0d623a8 +Block 0005 [ 69]: 5ac7f3561a57f8d7 +Block 0005 [ 70]: fe65f00fb63d9dc7 +Block 0005 [ 71]: 01ff21e3cc1f8c6d +Block 0005 [ 72]: 84ffd934b4ebac8d +Block 0005 [ 73]: d21cd538a03232b2 +Block 0005 [ 74]: 781980610b7ec7cc +Block 0005 [ 75]: 2dbdd60528669805 +Block 0005 [ 76]: dc589c07d2a661e0 +Block 0005 [ 77]: 6cdcdafe025e33bd +Block 0005 [ 78]: a6ee8906b4c238df +Block 0005 [ 79]: c7143cca9dfeb415 +Block 0005 [ 80]: aa309e94e2fd2005 +Block 0005 [ 81]: d5bc5fd1818a2a9c +Block 0005 [ 82]: b0bcb4f73a966742 +Block 0005 [ 83]: 691034d3a4ea3d87 +Block 0005 [ 84]: 624b83b2ae0a36de +Block 0005 [ 85]: ccf54a71ef5cea9e +Block 0005 [ 86]: 98bd28052ea1d0f6 +Block 0005 [ 87]: 991501ef48472656 +Block 0005 [ 88]: c1d7473fdfb08370 +Block 0005 [ 89]: 2aa6152966242ae0 +Block 0005 [ 90]: 2d40e50c8215c370 +Block 0005 [ 91]: 56021a10aadab2e1 +Block 0005 [ 92]: 428a2318bda6f282 +Block 0005 [ 93]: c9e69a34fb9adcab +Block 0005 [ 94]: f1268c07cafdd8f1 +Block 0005 [ 95]: fd32e5974bf062eb +Block 0005 [ 96]: 1cdd56ebf5ba0507 +Block 0005 [ 97]: 5e3b11a31da2c99f +Block 0005 [ 98]: e5415a8ecdafc162 +Block 0005 [ 99]: 94a646f31cc04a45 +Block 0005 [100]: dc9b968dee2c9fa4 +Block 0005 [101]: f11bfa8be33bc828 +Block 0005 [102]: 1e2665e7c975664b +Block 0005 [103]: 91e3dd22bf7a1234 +Block 0005 [104]: 5582d2aacadf6df0 +Block 0005 [105]: 849d237cdd44ae40 +Block 0005 [106]: a13b1559d1af395e +Block 0005 [107]: 9cce1d491b39e1c6 +Block 0005 [108]: 70eaf0cc0fabdec7 +Block 0005 [109]: 58afa558c5085ad4 +Block 0005 [110]: 1df4bf8dc0d9fdc7 +Block 0005 [111]: 374ccf1f6c700a11 +Block 0005 [112]: f2359455e8a72dee +Block 0005 [113]: 783b339c402acef2 +Block 0005 [114]: 68db356ec17dd7e5 +Block 0005 [115]: e0a6272e6e7d4674 +Block 0005 [116]: 4378e4ce8e70fdd1 +Block 0005 [117]: fde5aad0d4eabc79 +Block 0005 [118]: fee53869ca65168f +Block 0005 [119]: 0693da99c2db079a +Block 0005 [120]: 634b973c45b8868e +Block 0005 [121]: e92f4f9f9e1bc735 +Block 0005 [122]: b139bd321251d73a +Block 0005 [123]: fdc440e07c89d790 +Block 0005 [124]: c1aa16205718b13e +Block 0005 [125]: 9025eabecbc713a9 +Block 0005 [126]: 3908a16b231be5ed +Block 0005 [127]: f25730b2867d5c06 +Block 0006 [ 0]: 7b857b3d24027d7a +Block 0006 [ 1]: 670e23eb8eddb301 +Block 0006 [ 2]: 98ea5e36eb4479e4 +Block 0006 [ 3]: acd0b9ac97eff6d6 +Block 0006 [ 4]: 2d5d6e6fff1f133e +Block 0006 [ 5]: 3e9c9726b56417fd +Block 0006 [ 6]: 0b2113fa483c195b +Block 0006 [ 7]: 0d7815ec05700375 +Block 0006 [ 8]: c9ce6d95ea5b4118 +Block 0006 [ 9]: 84d2a7f11bb92f51 +Block 0006 [ 10]: ff88f9ad86a45ec7 +Block 0006 [ 11]: daabf03c40b04299 +Block 0006 [ 12]: a36b60cd4f1f18d9 +Block 0006 [ 13]: 5276d5d41107068d +Block 0006 [ 14]: 3c8812f7fae8511a +Block 0006 [ 15]: 00ea06ce780472ef +Block 0006 [ 16]: da887f5b84c9446a +Block 0006 [ 17]: 22963be370b288ac +Block 0006 [ 18]: e28b0a612196ecfb +Block 0006 [ 19]: 3464fdec28ec9b0a +Block 0006 [ 20]: fa6ec6bad95f4402 +Block 0006 [ 21]: 432bef4e4df0f410 +Block 0006 [ 22]: 65a1743f094c0a95 +Block 0006 [ 23]: 6d5fe021a6e4c314 +Block 0006 [ 24]: 063eefd04decef61 +Block 0006 [ 25]: 9ba8d1161a35e920 +Block 0006 [ 26]: c07b0a96bd9d8ad9 +Block 0006 [ 27]: bb3445c95c196591 +Block 0006 [ 28]: 03be97064ca1affa +Block 0006 [ 29]: 2c3516d2305cc315 +Block 0006 [ 30]: 9ee9f1966dba334a +Block 0006 [ 31]: c0084070fe554f10 +Block 0006 [ 32]: 9748b391ae2fab76 +Block 0006 [ 33]: 33126d30ae96ffa3 +Block 0006 [ 34]: 39014f0169e1c26f +Block 0006 [ 35]: bc404f8df7c3b6ac +Block 0006 [ 36]: 6f38d8b40e328fa7 +Block 0006 [ 37]: ea41a3c6af4de161 +Block 0006 [ 38]: 3c6ce1d92d28b6f7 +Block 0006 [ 39]: 0f21c2beb3532f2f +Block 0006 [ 40]: e97e210adf0719ed +Block 0006 [ 41]: 675a5e9cb9db4567 +Block 0006 [ 42]: 31e1a7b269d6b285 +Block 0006 [ 43]: 44ac563ff5e53808 +Block 0006 [ 44]: d0d372a450bc4ada +Block 0006 [ 45]: 56920c3e83187e3f +Block 0006 [ 46]: 6050aeab33d1bc78 +Block 0006 [ 47]: d3531018166aadcb +Block 0006 [ 48]: e17ecc7ab99821d8 +Block 0006 [ 49]: 6d834b4f7339ffb0 +Block 0006 [ 50]: 3204684b11bc5980 +Block 0006 [ 51]: ea1151eabade396e +Block 0006 [ 52]: 6128c25e683d160c +Block 0006 [ 53]: 8c0ef568267bea08 +Block 0006 [ 54]: 03b1bd05ca7e5001 +Block 0006 [ 55]: 38cac78af248a0b9 +Block 0006 [ 56]: 10ffb451715cee6b +Block 0006 [ 57]: ef6d04a4f1ec1d74 +Block 0006 [ 58]: 6a297e69b85cd261 +Block 0006 [ 59]: 2bc18ab7193c4c21 +Block 0006 [ 60]: cb7f4bc462ef08b2 +Block 0006 [ 61]: 4ee107eb89fb137e +Block 0006 [ 62]: be0f603727354ad1 +Block 0006 [ 63]: afd1b9370c0d7968 +Block 0006 [ 64]: 0305d9efc0311865 +Block 0006 [ 65]: 1032112aeaa89455 +Block 0006 [ 66]: ce49fb76a0b83076 +Block 0006 [ 67]: ec6e151b76fa77d8 +Block 0006 [ 68]: 371418d689a2d5a4 +Block 0006 [ 69]: d9c5334e0c47a1cd +Block 0006 [ 70]: 913eaa395a285969 +Block 0006 [ 71]: f08763e057afa76e +Block 0006 [ 72]: 7631cdccff84471b +Block 0006 [ 73]: a342a0f5e6f83766 +Block 0006 [ 74]: 4d695ec17f4bbedb +Block 0006 [ 75]: 0b545b7424550c2a +Block 0006 [ 76]: ee0ed6a60ba12640 +Block 0006 [ 77]: feedf9c1dd874bbb +Block 0006 [ 78]: d98bc0d816cb95a7 +Block 0006 [ 79]: eb0741af1baad547 +Block 0006 [ 80]: 8e93a084a2424ad7 +Block 0006 [ 81]: c3cd385ac22c3c52 +Block 0006 [ 82]: 1c77772d8c2c0027 +Block 0006 [ 83]: 21b2168299524a1b +Block 0006 [ 84]: 9567267e57296be0 +Block 0006 [ 85]: b56c8396a3b091b0 +Block 0006 [ 86]: c7c10a15a74e8571 +Block 0006 [ 87]: ea1c3042c44207d6 +Block 0006 [ 88]: 6742e3b27f35614e +Block 0006 [ 89]: bce288c416a4a1a0 +Block 0006 [ 90]: 65fcd11e00339496 +Block 0006 [ 91]: e67e7eded2b536a1 +Block 0006 [ 92]: 5d098437a8a3ebd4 +Block 0006 [ 93]: 31795fa9106a4bc0 +Block 0006 [ 94]: a7ce44f182090b1b +Block 0006 [ 95]: 751260bb3a27d1aa +Block 0006 [ 96]: 33503caa08511bf0 +Block 0006 [ 97]: 536660418ba83289 +Block 0006 [ 98]: 87b8a807cc5293b5 +Block 0006 [ 99]: 51d441ea07531a62 +Block 0006 [100]: e81ae81332626b23 +Block 0006 [101]: 198f2e7ad0bdde83 +Block 0006 [102]: 6602ecd3435f38fa +Block 0006 [103]: ef4ed5ae8c04a191 +Block 0006 [104]: ad7118965ce19207 +Block 0006 [105]: beceb37944041b29 +Block 0006 [106]: 9950cc0263c218af +Block 0006 [107]: dd901769a63cf8ad +Block 0006 [108]: e937cffb5bcf57da +Block 0006 [109]: 757d31c1038a3efc +Block 0006 [110]: e707bd06b982ec9b +Block 0006 [111]: 344b079fdaefe261 +Block 0006 [112]: c948b487c045297f +Block 0006 [113]: 7c5efd50b6b9fc05 +Block 0006 [114]: 793518d8884351b5 +Block 0006 [115]: 03a220cc3b6b0bac +Block 0006 [116]: 8acaeeb52f5bf9db +Block 0006 [117]: 6b6ca24c516f3630 +Block 0006 [118]: f1f18a0d0dabb238 +Block 0006 [119]: 3b6dd6c80029e41c +Block 0006 [120]: 61e47fac13560b97 +Block 0006 [121]: 40f95b60e3f455b3 +Block 0006 [122]: c5c12caa860093d0 +Block 0006 [123]: d6eebf3713c71294 +Block 0006 [124]: e8771758ded57a2a +Block 0006 [125]: 2ffc02a6788b96fb +Block 0006 [126]: a40be550c4eddc5f +Block 0006 [127]: 81549e4142e1e679 +Block 0007 [ 0]: cbd74b5de20ab9d1 +Block 0007 [ 1]: 069f835c6c371c52 +Block 0007 [ 2]: 549921e520e39b0b +Block 0007 [ 3]: ecafef6e201dd829 +Block 0007 [ 4]: e895078c61997563 +Block 0007 [ 5]: eeee9440731fef0e +Block 0007 [ 6]: e95318ed6834ae3b +Block 0007 [ 7]: 027475fbbf66dcdf +Block 0007 [ 8]: a43a9293b3e38f3b +Block 0007 [ 9]: 1f9915da007f1592 +Block 0007 [ 10]: ae236073ad2102cc +Block 0007 [ 11]: 9e25b23b79285968 +Block 0007 [ 12]: 7b706f1d817899d4 +Block 0007 [ 13]: 84539b7008808bfe +Block 0007 [ 14]: 0950e99c573cedc3 +Block 0007 [ 15]: e66b2657900c9272 +Block 0007 [ 16]: 0b96a42e35afbc8b +Block 0007 [ 17]: d478a0000f487073 +Block 0007 [ 18]: 20ed2e94d9ad0fee +Block 0007 [ 19]: b2c41d52cfd89c96 +Block 0007 [ 20]: 34b98f3bdd359a1b +Block 0007 [ 21]: f4b8f4cd882469b5 +Block 0007 [ 22]: de740288c4dd8814 +Block 0007 [ 23]: bb6c3dcddd7bf5e1 +Block 0007 [ 24]: d4d1dd393a008f68 +Block 0007 [ 25]: 075eff96e269493a +Block 0007 [ 26]: b86e3218edd9bc08 +Block 0007 [ 27]: 42961d0ae2475362 +Block 0007 [ 28]: 36e917be404ad4ae +Block 0007 [ 29]: 7b85718ee0d3a183 +Block 0007 [ 30]: cff2414b88a46e65 +Block 0007 [ 31]: 4d16a9abae20145f +Block 0007 [ 32]: 9af2efcbda4d978b +Block 0007 [ 33]: a298fc0b755813ba +Block 0007 [ 34]: b25ada405da06d1e +Block 0007 [ 35]: fa055c5401c7d4f1 +Block 0007 [ 36]: 5510c526f81544ec +Block 0007 [ 37]: 5220eac16fa61f19 +Block 0007 [ 38]: ca9217915cfebd40 +Block 0007 [ 39]: 21dce31f7e0bbf6e +Block 0007 [ 40]: 735629aba76c5193 +Block 0007 [ 41]: 5650bebd950400f9 +Block 0007 [ 42]: d88244c4ea7e1988 +Block 0007 [ 43]: 978894543c3aced7 +Block 0007 [ 44]: 05ff38136fd6eb33 +Block 0007 [ 45]: b5688908d324bcdf +Block 0007 [ 46]: 2bbab520f88ef570 +Block 0007 [ 47]: 7a7c83601701b57c +Block 0007 [ 48]: 255efc836007b5e6 +Block 0007 [ 49]: 1b30dd3585c9b70b +Block 0007 [ 50]: a8bd72c447522052 +Block 0007 [ 51]: 1403f1e5e5fe134b +Block 0007 [ 52]: ff1216684f23c30b +Block 0007 [ 53]: fcd6579dc09d9f85 +Block 0007 [ 54]: fce3fac568271041 +Block 0007 [ 55]: b12b60ff57582a3f +Block 0007 [ 56]: 1e2dd9bba2500f5b +Block 0007 [ 57]: 9a7de93d03ced58a +Block 0007 [ 58]: 4d3df93e0200e39b +Block 0007 [ 59]: e1788059b82c7370 +Block 0007 [ 60]: 3f7ecc5a406cdd2f +Block 0007 [ 61]: 06349b60a500246a +Block 0007 [ 62]: 4c98b89ece9ff485 +Block 0007 [ 63]: 5bb16f3627484aa5 +Block 0007 [ 64]: 813f6f26460cc402 +Block 0007 [ 65]: 67410f23f96e2365 +Block 0007 [ 66]: 73e92652b073b3b0 +Block 0007 [ 67]: ebff9c4a696d5e98 +Block 0007 [ 68]: 9fb510070498976f +Block 0007 [ 69]: be13bab83c7eec26 +Block 0007 [ 70]: 653e037d01574d3a +Block 0007 [ 71]: e97d4817e3df0f7c +Block 0007 [ 72]: 5d7324090040b36e +Block 0007 [ 73]: bf38fc9dedb9f5f2 +Block 0007 [ 74]: e5c653ec3e6a4793 +Block 0007 [ 75]: 4da77df57c179235 +Block 0007 [ 76]: 2c649e286f0c43ed +Block 0007 [ 77]: be652eadd041075f +Block 0007 [ 78]: 79069677f34cffd3 +Block 0007 [ 79]: 8521077f81ee5286 +Block 0007 [ 80]: 32ffd57924cce5e3 +Block 0007 [ 81]: a08d28a183c2820f +Block 0007 [ 82]: 084ddd57f4e7a4af +Block 0007 [ 83]: f20ece27cf7b3070 +Block 0007 [ 84]: 92765b71341157c3 +Block 0007 [ 85]: fece00bc6540950b +Block 0007 [ 86]: d535974bf65eff54 +Block 0007 [ 87]: 56381f317bfdcbf4 +Block 0007 [ 88]: 99ad3075084c09b3 +Block 0007 [ 89]: e77a51ba4c432c1d +Block 0007 [ 90]: 23414e1a6a2cb731 +Block 0007 [ 91]: 2eb44b11c04487cc +Block 0007 [ 92]: eb7fa79b38d738b9 +Block 0007 [ 93]: 2186fe3f06fe37be +Block 0007 [ 94]: 09d20f838aed21e6 +Block 0007 [ 95]: 20763bae6782ed73 +Block 0007 [ 96]: 7f77e32f99cb82a5 +Block 0007 [ 97]: 54732576ff03cd99 +Block 0007 [ 98]: f24943112b33c21b +Block 0007 [ 99]: ba870e486d3d25fb +Block 0007 [100]: f2f0d442cdee87f6 +Block 0007 [101]: 9967a1189153605a +Block 0007 [102]: 0659c8d86e94106e +Block 0007 [103]: d15c1188dbf88255 +Block 0007 [104]: 49c1b38e89bff99e +Block 0007 [105]: 897a56428d590bea +Block 0007 [106]: 8a69fc0a8d9fdc49 +Block 0007 [107]: 4053e20eedb6240f +Block 0007 [108]: bda7f38ff8060e5b +Block 0007 [109]: 26662d48fec1b428 +Block 0007 [110]: dd1807eb486ca979 +Block 0007 [111]: fbd38679dbda71ce +Block 0007 [112]: 7a003a6a3f9a8337 +Block 0007 [113]: 1b97d4193f09c77c +Block 0007 [114]: 4102e8562e63c88e +Block 0007 [115]: d7113253d81dab54 +Block 0007 [116]: fb4d461dbb0f2503 +Block 0007 [117]: 6ce29c2c44c5bc85 +Block 0007 [118]: ad164eeb092acedc +Block 0007 [119]: 8dcd7d0a350897e6 +Block 0007 [120]: d31c533da647ca96 +Block 0007 [121]: 0fbbd94ef2a850a8 +Block 0007 [122]: 87a1f639157371a0 +Block 0007 [123]: 963a2edc6b8eea2b +Block 0007 [124]: 4d85f73159a7c1d2 +Block 0007 [125]: 521258a9c11cf845 +Block 0007 [126]: b1e156d3aded4403 +Block 0007 [127]: bab4461b92a6d246 +Block 0008 [ 0]: 49810a135d23848d +Block 0008 [ 1]: c5fb6b64acec2f07 +Block 0008 [ 2]: b21039c31baa6a85 +Block 0008 [ 3]: 59ddd031e891f6c1 +Block 0008 [ 4]: fbd02629488b6f03 +Block 0008 [ 5]: 750daf568847dcec +Block 0008 [ 6]: 5a831b03655916bb +Block 0008 [ 7]: 13e56690ccfea95e +Block 0008 [ 8]: 8d0ebc46bbca100f +Block 0008 [ 9]: ea51440b7e612514 +Block 0008 [ 10]: 335baaae9400aaac +Block 0008 [ 11]: b5933841b061ce8a +Block 0008 [ 12]: 19508e7ed81c705a +Block 0008 [ 13]: 1fab466e7a08e521 +Block 0008 [ 14]: 0eb76ec6880aabc5 +Block 0008 [ 15]: 38ede80f16088a3f +Block 0008 [ 16]: 9bd9db78e66ba36c +Block 0008 [ 17]: 59ac330b234f7859 +Block 0008 [ 18]: 5471aae498410f2d +Block 0008 [ 19]: e46c4a537ac489fc +Block 0008 [ 20]: 1e150a4fc119f670 +Block 0008 [ 21]: 1f46297a17317c1b +Block 0008 [ 22]: 77ea0959747eff81 +Block 0008 [ 23]: 49fd0b629bb908a2 +Block 0008 [ 24]: f992e47ff5e9d868 +Block 0008 [ 25]: a3413f49c7c9d95e +Block 0008 [ 26]: cf82992aa2d170b0 +Block 0008 [ 27]: 6c5af6b653da5d23 +Block 0008 [ 28]: db2c84f1046363a5 +Block 0008 [ 29]: 0162677ae885ebbd +Block 0008 [ 30]: 4ad08976d9ac5cd5 +Block 0008 [ 31]: cab94bb197e87fde +Block 0008 [ 32]: b8108a671bd72082 +Block 0008 [ 33]: 0bc24e9246cc32df +Block 0008 [ 34]: b8372308888de12a +Block 0008 [ 35]: a3c9f48c3da21e62 +Block 0008 [ 36]: 4950e962fb134b36 +Block 0008 [ 37]: b2a057b57cbb42f8 +Block 0008 [ 38]: 48d43b3afb165bcf +Block 0008 [ 39]: 437889cf607a9e60 +Block 0008 [ 40]: 06151c357288e43f +Block 0008 [ 41]: dd22524b377abd1f +Block 0008 [ 42]: 2991dc1a5ba6a272 +Block 0008 [ 43]: 6e8462e3c4c4a52e +Block 0008 [ 44]: c29b6c46e28d584e +Block 0008 [ 45]: c42ea1bbbc1b2850 +Block 0008 [ 46]: 7dbaebcb56d11ba8 +Block 0008 [ 47]: 708d3efac76f39a9 +Block 0008 [ 48]: 4a2f95422230c076 +Block 0008 [ 49]: 9a0a954e98315e7b +Block 0008 [ 50]: 5defbf0083498f26 +Block 0008 [ 51]: 52bf33f0e7c85da4 +Block 0008 [ 52]: 59145e8443478adc +Block 0008 [ 53]: 6b19b474dd7f76ba +Block 0008 [ 54]: 3f45c02a6b921241 +Block 0008 [ 55]: 840224b795f8b504 +Block 0008 [ 56]: f0d45196a750b0b0 +Block 0008 [ 57]: 25a127d6701f5652 +Block 0008 [ 58]: ff91a51c1a397e29 +Block 0008 [ 59]: 2dcafc69b2117ecc +Block 0008 [ 60]: 6435dac1235931b5 +Block 0008 [ 61]: 0a4ad316c9bbe7c8 +Block 0008 [ 62]: 859f3b5ce4df8f7d +Block 0008 [ 63]: 2160d3995fc309d1 +Block 0008 [ 64]: f75150bda784be85 +Block 0008 [ 65]: 43209c0f168d6ccd +Block 0008 [ 66]: d722ce6d5236fe8e +Block 0008 [ 67]: 61ab9b1730e0a0f2 +Block 0008 [ 68]: 0dd835d189f07128 +Block 0008 [ 69]: 6262694c58a27366 +Block 0008 [ 70]: 953fcc80a60a385a +Block 0008 [ 71]: d66a9dc26fa4270f +Block 0008 [ 72]: 8c576d5d2bdc352b +Block 0008 [ 73]: 2393381634b054c8 +Block 0008 [ 74]: b7c1d4a34dd6fa51 +Block 0008 [ 75]: 78e43d59bd6ee5c7 +Block 0008 [ 76]: b0d26b781e9db988 +Block 0008 [ 77]: a3d1a106c4bdce54 +Block 0008 [ 78]: 2d0ea43d9f3e1ccb +Block 0008 [ 79]: b5190de85c5ede44 +Block 0008 [ 80]: db944f7005a335dc +Block 0008 [ 81]: 4792f06c1c01aa49 +Block 0008 [ 82]: 447bc88f6aad8315 +Block 0008 [ 83]: 2e0f90160429ba9e +Block 0008 [ 84]: 8d3e34c597304f3b +Block 0008 [ 85]: b074f272830745ca +Block 0008 [ 86]: c57f98d934bfb801 +Block 0008 [ 87]: c4f9f1e0778d1b75 +Block 0008 [ 88]: 7b65c984cd76a09b +Block 0008 [ 89]: 99ab030c32f5c65f +Block 0008 [ 90]: 533ed86b000db977 +Block 0008 [ 91]: fb2e743093cb4a6a +Block 0008 [ 92]: a037ae30c9bbab47 +Block 0008 [ 93]: b79a3d0425bb1fb5 +Block 0008 [ 94]: 8f3bffc4de6c8a1c +Block 0008 [ 95]: 337f68561fca37de +Block 0008 [ 96]: 71e8a7aecc2c8e5b +Block 0008 [ 97]: a069fdd75748f6c2 +Block 0008 [ 98]: d0b72d9d6f35f9ff +Block 0008 [ 99]: c60ddb9972fa9637 +Block 0008 [100]: 67d8d738d603c096 +Block 0008 [101]: c01884c88af7e5eb +Block 0008 [102]: 233ea0fb4074af49 +Block 0008 [103]: fc512d625685a05c +Block 0008 [104]: 825a1ad4f9b32360 +Block 0008 [105]: a8140fbebb3e9f88 +Block 0008 [106]: 2c75b6eb2e0c729d +Block 0008 [107]: 2245291ba5bb71f1 +Block 0008 [108]: 0f8b727153c9dd26 +Block 0008 [109]: 5ffbc2a779f4f875 +Block 0008 [110]: 5403a28def13fdb7 +Block 0008 [111]: e2b550641220e443 +Block 0008 [112]: daab51866915e110 +Block 0008 [113]: 6ef62f9d1561ddd8 +Block 0008 [114]: 07be6b68fffb670e +Block 0008 [115]: 8b2f23c509e7a758 +Block 0008 [116]: d3f2d3974ac24e65 +Block 0008 [117]: d03efadd3456fe74 +Block 0008 [118]: 24e47b1737f64d0b +Block 0008 [119]: 096eacd3c4542623 +Block 0008 [120]: 69004ef3d7635037 +Block 0008 [121]: f58c7cb54f9a7dc0 +Block 0008 [122]: 596f8e75930c52d7 +Block 0008 [123]: 020df1d3b0948128 +Block 0008 [124]: 7c47d5b3983b3c68 +Block 0008 [125]: 052123dc6c678c3f +Block 0008 [126]: 0960000fab5b881a +Block 0008 [127]: d79461cc07c58a09 +Block 0009 [ 0]: 8f10324fec56e694 +Block 0009 [ 1]: d7ed856c90f1792b +Block 0009 [ 2]: 81c93c47655d28e1 +Block 0009 [ 3]: 00f1a9f07340d401 +Block 0009 [ 4]: c1f826207229e1de +Block 0009 [ 5]: f0d4e3753fe51344 +Block 0009 [ 6]: c247c5e6b921fa36 +Block 0009 [ 7]: 533b9c2edadba55c +Block 0009 [ 8]: 9bdbbede3a72fa25 +Block 0009 [ 9]: ce4640f3d00d0efb +Block 0009 [ 10]: a81d8a468d49bda4 +Block 0009 [ 11]: 8b5d127765966b11 +Block 0009 [ 12]: 9e0523bb613da0a8 +Block 0009 [ 13]: 0d384fbafe2fbb48 +Block 0009 [ 14]: 9797872ada1e40e6 +Block 0009 [ 15]: dc4f1ab87690ac0c +Block 0009 [ 16]: df15fe4e883a1279 +Block 0009 [ 17]: 309fe51a46dbacbb +Block 0009 [ 18]: 514715fbb6e3495e +Block 0009 [ 19]: d84f1004b3b0fee1 +Block 0009 [ 20]: 4eedebbcc5229e81 +Block 0009 [ 21]: 6a462f88c59008c8 +Block 0009 [ 22]: f77c6c77c51c98f4 +Block 0009 [ 23]: 33fb105b08c16694 +Block 0009 [ 24]: f99547074a293b3d +Block 0009 [ 25]: 249c163feda9fd8d +Block 0009 [ 26]: dcad1e67251ceb28 +Block 0009 [ 27]: 804887249ad5f39b +Block 0009 [ 28]: 2308ad17da1325e8 +Block 0009 [ 29]: 86597bbcfaa35975 +Block 0009 [ 30]: bd680ac7468b0754 +Block 0009 [ 31]: 342c12b38df254c7 +Block 0009 [ 32]: af68032dd2f83449 +Block 0009 [ 33]: 27bb2dfa39194e08 +Block 0009 [ 34]: 3f59dd7618ff8dc0 +Block 0009 [ 35]: 0107202b45469b55 +Block 0009 [ 36]: c0d5858005acdaeb +Block 0009 [ 37]: 458e2dd418b389ca +Block 0009 [ 38]: 6797aa6e279ff000 +Block 0009 [ 39]: 377d84675641a0b2 +Block 0009 [ 40]: 8ab76786012cf2ca +Block 0009 [ 41]: 682e9edbf126ce86 +Block 0009 [ 42]: 2c8027347b86cdb8 +Block 0009 [ 43]: a6b43bd58d550cc3 +Block 0009 [ 44]: c85e4ed50e2825fd +Block 0009 [ 45]: aa468c840ed8925c +Block 0009 [ 46]: 33dce055f80b3e04 +Block 0009 [ 47]: 5cf91043e6438686 +Block 0009 [ 48]: 7027e073ee1e6a0d +Block 0009 [ 49]: d6523597b0efd084 +Block 0009 [ 50]: 06beff55ac8ad958 +Block 0009 [ 51]: 11a7295f9c49415c +Block 0009 [ 52]: 2d6ad8ebe51699e6 +Block 0009 [ 53]: c669cf5a75cded9c +Block 0009 [ 54]: f9cbe12aaa048c0f +Block 0009 [ 55]: 61f64d7b974376ec +Block 0009 [ 56]: 27ed0511d5d62b2e +Block 0009 [ 57]: d6c99d8a5a63b963 +Block 0009 [ 58]: 6cf61de8bf3b3c34 +Block 0009 [ 59]: 260c0c298313625b +Block 0009 [ 60]: 5f2f13989a4e3ac7 +Block 0009 [ 61]: f6348e4014ced3ea +Block 0009 [ 62]: 8f64770fff6e8e52 +Block 0009 [ 63]: d98d39df837a1d24 +Block 0009 [ 64]: 42cd4f3d324607f9 +Block 0009 [ 65]: 6a05b3eb6bc86b52 +Block 0009 [ 66]: 54ab7895dfd5ef3e +Block 0009 [ 67]: 87ce4c55ce837d03 +Block 0009 [ 68]: 0dd5bf6275289bde +Block 0009 [ 69]: 013249225e8064f1 +Block 0009 [ 70]: 9e3d201d4565f7c8 +Block 0009 [ 71]: 2fdae8c6facce85b +Block 0009 [ 72]: d5bc766cfb5a3a28 +Block 0009 [ 73]: 439960f185fce94a +Block 0009 [ 74]: ece23c957b11e9d5 +Block 0009 [ 75]: f6e0b3533a9f3f95 +Block 0009 [ 76]: a22fc51d008e4bf9 +Block 0009 [ 77]: cb680f02e1990cfa +Block 0009 [ 78]: 185c7bdaa5dcf252 +Block 0009 [ 79]: 453f6e9af5d0f170 +Block 0009 [ 80]: aa5b6c77c3fb3d90 +Block 0009 [ 81]: 93eb8c30d16ffc4d +Block 0009 [ 82]: a39c62ec54134634 +Block 0009 [ 83]: e0a7caafc2db836c +Block 0009 [ 84]: 83875234b21af749 +Block 0009 [ 85]: da643b9c28847b1f +Block 0009 [ 86]: 351aa155caaea342 +Block 0009 [ 87]: 0bcdf67e7b60d68f +Block 0009 [ 88]: dd02d20ca2b455de +Block 0009 [ 89]: d1ff457af51b13e2 +Block 0009 [ 90]: ad85fd80a21341a7 +Block 0009 [ 91]: 49e4c98c7993c631 +Block 0009 [ 92]: 10e271200df6f8dd +Block 0009 [ 93]: 3f2f7eb823487a2f +Block 0009 [ 94]: c5a47081e476ea08 +Block 0009 [ 95]: 8d9ce2305405aa84 +Block 0009 [ 96]: 458a19672aed7d90 +Block 0009 [ 97]: 717e5c2a2b0072a1 +Block 0009 [ 98]: 798ca280ae0916d9 +Block 0009 [ 99]: 5682c3918180e4e3 +Block 0009 [100]: 4415c9d3b81cf579 +Block 0009 [101]: f33257c46ac83ff5 +Block 0009 [102]: d8a0f2223c150a81 +Block 0009 [103]: 754789e94abc1903 +Block 0009 [104]: 2ad6c644cef873b3 +Block 0009 [105]: 89c251b261082328 +Block 0009 [106]: 677d37f1ba1b3057 +Block 0009 [107]: cdd6475b9ad6217d +Block 0009 [108]: 7f4ded50c6fe7f40 +Block 0009 [109]: a4cda2e8d74eaceb +Block 0009 [110]: 904b3a87abc580f1 +Block 0009 [111]: 4e7cbfca207fd75e +Block 0009 [112]: 77bf2f8d2fb3795a +Block 0009 [113]: c688b3b54922e3c2 +Block 0009 [114]: 2ecfaff08f7126c4 +Block 0009 [115]: cc4d3d8658ed74cc +Block 0009 [116]: b89ce6baa994bc9a +Block 0009 [117]: 3730d3da60644764 +Block 0009 [118]: a7a865cceffafce8 +Block 0009 [119]: 1109b27e1103515a +Block 0009 [120]: 1d4c47d0c96e6910 +Block 0009 [121]: 482ffef73d24e21c +Block 0009 [122]: 21c2b643561ae19e +Block 0009 [123]: 1afe123081bf17f6 +Block 0009 [124]: 482515b28e1e40d7 +Block 0009 [125]: 60089b8f8007589c +Block 0009 [126]: 9a36c2163a57af6b +Block 0009 [127]: 2691dac7ff440545 +Block 0010 [ 0]: 4c0cae7a5f3383b2 +Block 0010 [ 1]: 2746eaf25922ad05 +Block 0010 [ 2]: e9e80804d1b3f226 +Block 0010 [ 3]: 59fa228adb1eda14 +Block 0010 [ 4]: e582cbb4f3b9576f +Block 0010 [ 5]: b80c019e0ea7eab8 +Block 0010 [ 6]: a73739cc9db1ad73 +Block 0010 [ 7]: a7b0cd338fa1cf1b +Block 0010 [ 8]: 252c67d72c6ac4a8 +Block 0010 [ 9]: 0c3c0e6781f3eb81 +Block 0010 [ 10]: fe1f102df9f0b806 +Block 0010 [ 11]: b89b9e173019c6cf +Block 0010 [ 12]: c5013011387f50f6 +Block 0010 [ 13]: 2eab89d0488a9a7e +Block 0010 [ 14]: 02ca43db72497e3e +Block 0010 [ 15]: 307203eb009cf75b +Block 0010 [ 16]: 05b01e3aefd4878f +Block 0010 [ 17]: 3612ac74f0d5170a +Block 0010 [ 18]: 8daf36dce9f2e9a7 +Block 0010 [ 19]: 54c3330f25910c57 +Block 0010 [ 20]: f87715fa424a0839 +Block 0010 [ 21]: ad1332fccae47161 +Block 0010 [ 22]: b8a422e2b5582533 +Block 0010 [ 23]: e5befd94beb663cd +Block 0010 [ 24]: 60c4ea23220d90b7 +Block 0010 [ 25]: 901eaf711ce8764e +Block 0010 [ 26]: d6580e9182bd3903 +Block 0010 [ 27]: b65cac8618125e29 +Block 0010 [ 28]: 9ecf0b829ca00680 +Block 0010 [ 29]: 38a8a24b66b897f0 +Block 0010 [ 30]: 484c4c95e098e64a +Block 0010 [ 31]: 1a6ae9168d0447cd +Block 0010 [ 32]: cf313c511f61b901 +Block 0010 [ 33]: 8bae89882d5e7a01 +Block 0010 [ 34]: 656441ea59351b15 +Block 0010 [ 35]: e31514645b38d9a0 +Block 0010 [ 36]: 1d6dadf5597c1815 +Block 0010 [ 37]: 3da76ad8a5c580bb +Block 0010 [ 38]: e5e3c09d8c592f29 +Block 0010 [ 39]: 16f27dddce30cf95 +Block 0010 [ 40]: 79f1bea8070d35a0 +Block 0010 [ 41]: bd7b9a3490b907ad +Block 0010 [ 42]: a07cc139ec3bd656 +Block 0010 [ 43]: 5233b458e20d03f6 +Block 0010 [ 44]: 4acbe33dcfa5c649 +Block 0010 [ 45]: 87d5ad1d40b8b202 +Block 0010 [ 46]: 3976aa47398125c9 +Block 0010 [ 47]: d291614f69de847e +Block 0010 [ 48]: 13a16f5b281fb9d4 +Block 0010 [ 49]: 1c797bc612ca1f82 +Block 0010 [ 50]: f5beae4f224c9321 +Block 0010 [ 51]: 7db0d5ed4c07630d +Block 0010 [ 52]: beb7330445c2ca6d +Block 0010 [ 53]: e731beeb9d467c0b +Block 0010 [ 54]: 1d54feb368611ee7 +Block 0010 [ 55]: 867e42cb54d1de3c +Block 0010 [ 56]: 0cbed3a4b9f2cb06 +Block 0010 [ 57]: 5fd4987bd2232365 +Block 0010 [ 58]: cdb5d06722188f40 +Block 0010 [ 59]: 1874ea0a91f80e61 +Block 0010 [ 60]: a2eee7960b21f392 +Block 0010 [ 61]: 9be712e323a7b2c3 +Block 0010 [ 62]: 34579ed0a814abd8 +Block 0010 [ 63]: f91ecee07025c62c +Block 0010 [ 64]: b1152f25e6c4975e +Block 0010 [ 65]: 5423198f63ac9610 +Block 0010 [ 66]: 2c047a3e33046d0d +Block 0010 [ 67]: e4b7fb2fa554697f +Block 0010 [ 68]: 0a5119fe103e2e42 +Block 0010 [ 69]: 76628fe4b3ddc06e +Block 0010 [ 70]: e25bdee1ab84b29f +Block 0010 [ 71]: b3c66c128c6e172b +Block 0010 [ 72]: 1c1ed217a2064416 +Block 0010 [ 73]: 09c7294bb8a49019 +Block 0010 [ 74]: 50eb01126d9ce564 +Block 0010 [ 75]: 940cc33aa111befd +Block 0010 [ 76]: 3de5ddd735a13811 +Block 0010 [ 77]: 7588285dc6ddede1 +Block 0010 [ 78]: 49346c2f2215fc55 +Block 0010 [ 79]: 48b6752b1b61c33f +Block 0010 [ 80]: e26c26a0794051fe +Block 0010 [ 81]: 31d38c5a3509612d +Block 0010 [ 82]: 6146c61851115d95 +Block 0010 [ 83]: 47e6aabfc5ff3e65 +Block 0010 [ 84]: 3a839fe889b3af91 +Block 0010 [ 85]: ba2d3f73d2136b84 +Block 0010 [ 86]: 16e05e4258596fd5 +Block 0010 [ 87]: f2e9314743ae4056 +Block 0010 [ 88]: 4ed85292abee248a +Block 0010 [ 89]: 4180aadcaeabdba4 +Block 0010 [ 90]: 7243e54a9e5b66a6 +Block 0010 [ 91]: 23fefc955c79e003 +Block 0010 [ 92]: ea06ca4f79b525c8 +Block 0010 [ 93]: a5064ee3381b5ab3 +Block 0010 [ 94]: c4893642bf4855fd +Block 0010 [ 95]: cc7e6a851f510ac8 +Block 0010 [ 96]: 275f83a560de48eb +Block 0010 [ 97]: dadbbca628c47c37 +Block 0010 [ 98]: 43ea6bf21aaa217c +Block 0010 [ 99]: f6671c25326c25e2 +Block 0010 [100]: 9fe3da8da6fd66b1 +Block 0010 [101]: 1035284ec7d5cce8 +Block 0010 [102]: bcb76977f690ebd0 +Block 0010 [103]: 97c1c31326790609 +Block 0010 [104]: 60fe481489c8c7e0 +Block 0010 [105]: af3be98f8809a66e +Block 0010 [106]: 9efe199ec3055305 +Block 0010 [107]: a4178436d0019dc1 +Block 0010 [108]: adbe3754fd2a5efc +Block 0010 [109]: 13ba4c060bf37fa5 +Block 0010 [110]: 966fb1a7c7e3c345 +Block 0010 [111]: 24bc28eacb75fba4 +Block 0010 [112]: 6f3e77e11f50a350 +Block 0010 [113]: f10a1ad34d072b69 +Block 0010 [114]: a5eb7b5284a30af7 +Block 0010 [115]: 452bea2326fc9279 +Block 0010 [116]: 4f2620c07573e27c +Block 0010 [117]: 12ec5c1510264364 +Block 0010 [118]: 1f80f928362f38e2 +Block 0010 [119]: 5f237e27d0f4ecb9 +Block 0010 [120]: a339a5fb171dddbe +Block 0010 [121]: 2bfc05c38f009206 +Block 0010 [122]: b99f8b1cfb89a9fd +Block 0010 [123]: f69ed6324e29ded2 +Block 0010 [124]: e106652bf5c4359c +Block 0010 [125]: 43e7d05dd5d3a025 +Block 0010 [126]: 95abfc33449e7724 +Block 0010 [127]: 48442542e1841324 +Block 0011 [ 0]: 7d75ce5fa7bff5b8 +Block 0011 [ 1]: 7f2e89d0a725ab36 +Block 0011 [ 2]: 2c3c03e9df7c7105 +Block 0011 [ 3]: 74b4814e87507e51 +Block 0011 [ 4]: 05197c1924b2f07e +Block 0011 [ 5]: 7120ecede87fd521 +Block 0011 [ 6]: ad19163b841847fa +Block 0011 [ 7]: 9f763fdab3d9b36b +Block 0011 [ 8]: eb936f33fd7b5ff7 +Block 0011 [ 9]: f120e7f05bb937d1 +Block 0011 [ 10]: b6f7cc7f4fe84750 +Block 0011 [ 11]: dbd7c9d78d20bc0d +Block 0011 [ 12]: 87e06285a63783c9 +Block 0011 [ 13]: 0d5ddbfd00f5ea5b +Block 0011 [ 14]: 7c489013dd470b1b +Block 0011 [ 15]: 83ec59292926733c +Block 0011 [ 16]: ac257f950008cd69 +Block 0011 [ 17]: a2d7ecc111c3a0a9 +Block 0011 [ 18]: 760ba922715999ea +Block 0011 [ 19]: 8f4b4e79229250d8 +Block 0011 [ 20]: 93698a5454d1e5d2 +Block 0011 [ 21]: 356f4c72fdef4c47 +Block 0011 [ 22]: 016317b9a7bab55c +Block 0011 [ 23]: a065ec2988075b38 +Block 0011 [ 24]: 74954845ab8f5e37 +Block 0011 [ 25]: 695fcb3c9b2022ef +Block 0011 [ 26]: b4cefacc655d91b0 +Block 0011 [ 27]: 3102128e494987be +Block 0011 [ 28]: de17e55c8e103800 +Block 0011 [ 29]: 99dcb0473277c31d +Block 0011 [ 30]: 3bf83e1004706630 +Block 0011 [ 31]: 8290bfd936d4b300 +Block 0011 [ 32]: 025b012c50744ed5 +Block 0011 [ 33]: 6434159aecf89ea5 +Block 0011 [ 34]: 5bcd6a922a522af2 +Block 0011 [ 35]: 0a32efa2193ef3c4 +Block 0011 [ 36]: 413e02628d5bba55 +Block 0011 [ 37]: 10e072e4d52b2e8f +Block 0011 [ 38]: 308bbdf27f5c5ec1 +Block 0011 [ 39]: e0231b4d70374d20 +Block 0011 [ 40]: b938efa9c5cb6803 +Block 0011 [ 41]: b6b7f40f63d57ca1 +Block 0011 [ 42]: 1cd0b3715b504879 +Block 0011 [ 43]: 41f040cbbd927796 +Block 0011 [ 44]: b8dd16700e5f1a81 +Block 0011 [ 45]: 86b2df0d5ef0af94 +Block 0011 [ 46]: 37cc4cfbfd2e8337 +Block 0011 [ 47]: 65c41fe7bf004d02 +Block 0011 [ 48]: 1a525ca0ea028384 +Block 0011 [ 49]: 6e32af56d64bae96 +Block 0011 [ 50]: 7c67c0b0cf2354d1 +Block 0011 [ 51]: 9e6557336cad5f50 +Block 0011 [ 52]: 652baadcc1b11edc +Block 0011 [ 53]: ed9a449e0ff3d91e +Block 0011 [ 54]: b7f42bb2d1b8044f +Block 0011 [ 55]: 6e10cd8504194195 +Block 0011 [ 56]: 44324821824d14a3 +Block 0011 [ 57]: 7748f553748cce54 +Block 0011 [ 58]: 3388449102791469 +Block 0011 [ 59]: 525f839f18b87655 +Block 0011 [ 60]: 2239393539b2c86b +Block 0011 [ 61]: e3a316be17ab8107 +Block 0011 [ 62]: a6eddc9b040c199f +Block 0011 [ 63]: 62d1e6c9fb86d8a3 +Block 0011 [ 64]: 46d51d807d430972 +Block 0011 [ 65]: 4105dab993959ac0 +Block 0011 [ 66]: 5ffc090c3a929ead +Block 0011 [ 67]: 96e520ccdf93dfd2 +Block 0011 [ 68]: b6c210605de8d022 +Block 0011 [ 69]: 36f0c76223b2118b +Block 0011 [ 70]: 1ac03a506b84230a +Block 0011 [ 71]: 56702701f4c5a27b +Block 0011 [ 72]: 9a945ff533305f3d +Block 0011 [ 73]: 7cbea0f13d5dbf79 +Block 0011 [ 74]: 82274a2996cde7eb +Block 0011 [ 75]: 2c2d132fb2f58964 +Block 0011 [ 76]: b2b87eca7228d56c +Block 0011 [ 77]: 3a317d54a1d0048b +Block 0011 [ 78]: bf30630cceb13b33 +Block 0011 [ 79]: a4bd496da07527c5 +Block 0011 [ 80]: 16be6e1abab4689a +Block 0011 [ 81]: 870725dc928766c0 +Block 0011 [ 82]: b48e00a90347041a +Block 0011 [ 83]: 6d067251f331ae0c +Block 0011 [ 84]: 8f71090940cfca1d +Block 0011 [ 85]: 8e34c70df30e8c5a +Block 0011 [ 86]: bff713c1bda82f91 +Block 0011 [ 87]: 155d9e44ef0fc0b8 +Block 0011 [ 88]: 9bcec01ffc3698d1 +Block 0011 [ 89]: 3a338a45cf09ac03 +Block 0011 [ 90]: e36cd0e18e526e88 +Block 0011 [ 91]: 15f9626e5c77678f +Block 0011 [ 92]: 957b1847d0c89faf +Block 0011 [ 93]: 4a01a3d9db34519f +Block 0011 [ 94]: a03bdf4dac769213 +Block 0011 [ 95]: f4e37a15121e7c8b +Block 0011 [ 96]: 0374f95ee3ef5a2c +Block 0011 [ 97]: 6c849b52d5534909 +Block 0011 [ 98]: 28ff9c5ff87184d2 +Block 0011 [ 99]: a4223029e0b33123 +Block 0011 [100]: d149a075822d818d +Block 0011 [101]: 0a44cb9a3f0ef28d +Block 0011 [102]: df4da9204f1c039c +Block 0011 [103]: afac39d02c8afb71 +Block 0011 [104]: eee021deffed678d +Block 0011 [105]: d9a05d6d5b4f100d +Block 0011 [106]: 1cc09a57c9758d0d +Block 0011 [107]: 0e7556e329adbf17 +Block 0011 [108]: 13e6e5b2d9c0dd04 +Block 0011 [109]: bd463eb78a6d781f +Block 0011 [110]: a574a71e8b9bb8e0 +Block 0011 [111]: e4c7da41ff696fb5 +Block 0011 [112]: eb5ed56726da5bc6 +Block 0011 [113]: 5c07bbf9cd4f0539 +Block 0011 [114]: 501627fbad7ec4e0 +Block 0011 [115]: 95b770f2c1cb8346 +Block 0011 [116]: 518881e38b2824fb +Block 0011 [117]: b18951d660d4b6a8 +Block 0011 [118]: 90a160786aeb030a +Block 0011 [119]: c410a74193a2e691 +Block 0011 [120]: ef904dddb38d6417 +Block 0011 [121]: 3bbe7862a4fcb3e3 +Block 0011 [122]: c479db89c8121be5 +Block 0011 [123]: 4b36d107268a163c +Block 0011 [124]: e3d1ba33dc695cda +Block 0011 [125]: e81631c9b7968018 +Block 0011 [126]: 253f79b55ca7e1b0 +Block 0011 [127]: fd8e591864884fe2 +Block 0012 [ 0]: 1a0f6b8bd90a8f6b +Block 0012 [ 1]: 3f148e75f890d12e +Block 0012 [ 2]: b0e4ad7278b53c00 +Block 0012 [ 3]: 5f75cd0153783d80 +Block 0012 [ 4]: 4e56a55713194945 +Block 0012 [ 5]: 73de9e24d2add2f8 +Block 0012 [ 6]: 5c2bb2c5c8abb760 +Block 0012 [ 7]: ecceb3494123cdcb +Block 0012 [ 8]: aa6fae9b4396b84e +Block 0012 [ 9]: efde2dcd2b59052c +Block 0012 [ 10]: 2ef556dc87d5253f +Block 0012 [ 11]: a3991d1311a4f9b3 +Block 0012 [ 12]: b7059de7de2bb844 +Block 0012 [ 13]: bf011dca91c7e273 +Block 0012 [ 14]: c2e6134ad765db8b +Block 0012 [ 15]: c1919d11a4b00cb1 +Block 0012 [ 16]: 86523fcc48c8f0f6 +Block 0012 [ 17]: c250fe494cd0cb21 +Block 0012 [ 18]: c399c6549c49e114 +Block 0012 [ 19]: 3a820ca5281b0fff +Block 0012 [ 20]: 8559650005ca9fc7 +Block 0012 [ 21]: 730dd261c68edca1 +Block 0012 [ 22]: 4f28617d9790df64 +Block 0012 [ 23]: 83c104c3c5ea6f97 +Block 0012 [ 24]: 0fa8dd73f8607c76 +Block 0012 [ 25]: 272f75c6177ae094 +Block 0012 [ 26]: ddb498b135aac7a1 +Block 0012 [ 27]: 8c0d78b3e4e48313 +Block 0012 [ 28]: 43d1f1cf0c96233a +Block 0012 [ 29]: c9c9b06a3b555527 +Block 0012 [ 30]: abd3b3725979428f +Block 0012 [ 31]: 8669315d316ad7a3 +Block 0012 [ 32]: 5292d2808a046200 +Block 0012 [ 33]: a63717f5f4a24e37 +Block 0012 [ 34]: 41ba0350e19b3a75 +Block 0012 [ 35]: 43f2101a657de10a +Block 0012 [ 36]: d0095f929c14a82b +Block 0012 [ 37]: ac0883a2214af148 +Block 0012 [ 38]: 2c1fe77ae7fde7cc +Block 0012 [ 39]: 493d2debae0e95e4 +Block 0012 [ 40]: f3c3c98e07ecc949 +Block 0012 [ 41]: b370498229161188 +Block 0012 [ 42]: 70ba98dc3b17b2ea +Block 0012 [ 43]: d8009b297ec52812 +Block 0012 [ 44]: cbe0b026ba0c41a5 +Block 0012 [ 45]: 1d3e537f321cd9b4 +Block 0012 [ 46]: a691dda68fa6a57a +Block 0012 [ 47]: 77d7e2829a6fd056 +Block 0012 [ 48]: c61add89b7e17a03 +Block 0012 [ 49]: 8e61eaab8e9c4898 +Block 0012 [ 50]: 3650b222230bea53 +Block 0012 [ 51]: de129062ae4d78d2 +Block 0012 [ 52]: da20af31bbb90c04 +Block 0012 [ 53]: 4b00bae7eb8dbc7d +Block 0012 [ 54]: ed4567ce76c1d897 +Block 0012 [ 55]: 1e2a7f8a0d959306 +Block 0012 [ 56]: fefb51b8fc4b90db +Block 0012 [ 57]: e0aa1ee1bfca5d5e +Block 0012 [ 58]: 6732b1b2d7b4938b +Block 0012 [ 59]: 340a69cde3609951 +Block 0012 [ 60]: ed09fdea837845c0 +Block 0012 [ 61]: a06202e5db3a827b +Block 0012 [ 62]: cdb5fc28fd93966b +Block 0012 [ 63]: f4db11521a821378 +Block 0012 [ 64]: 0684d55a3b041eed +Block 0012 [ 65]: 41b1618f070e568b +Block 0012 [ 66]: 7c8e0bb4b5dfeab9 +Block 0012 [ 67]: a66bc80228683b6c +Block 0012 [ 68]: 0b28c1b7a888dd1d +Block 0012 [ 69]: c580445de500dcf5 +Block 0012 [ 70]: 93e59092902873da +Block 0012 [ 71]: 7b2fd4c1e522b87d +Block 0012 [ 72]: e4fed98fd79e533c +Block 0012 [ 73]: 496f026546e203a8 +Block 0012 [ 74]: 6d23a500ffb4fb77 +Block 0012 [ 75]: c47216920d8051ee +Block 0012 [ 76]: 31f82579385688b5 +Block 0012 [ 77]: b981e4cbbe00fe6b +Block 0012 [ 78]: 751b005aff1af776 +Block 0012 [ 79]: f3f53e2a82b3dd4d +Block 0012 [ 80]: 59a5b0923b01eeff +Block 0012 [ 81]: eccddd7c199344d1 +Block 0012 [ 82]: 2ca389e5c3dfb601 +Block 0012 [ 83]: c1da5ba037f769b2 +Block 0012 [ 84]: f2254420165887d3 +Block 0012 [ 85]: 9bdd424e42fb8ac9 +Block 0012 [ 86]: 86fb7baf70bbf2fb +Block 0012 [ 87]: 2b2d10e8f3bef9c9 +Block 0012 [ 88]: 2565f40d83456e2e +Block 0012 [ 89]: cffffd2f8773cfff +Block 0012 [ 90]: e2c3da055e49a29d +Block 0012 [ 91]: 69fd03274ac5f972 +Block 0012 [ 92]: 617379ad227cdba7 +Block 0012 [ 93]: 75b8e9a5226d60c0 +Block 0012 [ 94]: c334dc62de54a707 +Block 0012 [ 95]: e10f057ea8ca79d8 +Block 0012 [ 96]: eb7578bcf8f91690 +Block 0012 [ 97]: 425d6867253950a0 +Block 0012 [ 98]: 4adf5f12fe580e80 +Block 0012 [ 99]: 3b150fa0259d5a29 +Block 0012 [100]: 724683f2870b357f +Block 0012 [101]: a70ff766a5dec7f2 +Block 0012 [102]: bb26aac1eca8ad4f +Block 0012 [103]: 2a96bcef60d625bd +Block 0012 [104]: 03d1a4ae39e15fe9 +Block 0012 [105]: 609a20dd739a73a6 +Block 0012 [106]: 6cdc368e10912c82 +Block 0012 [107]: f86603e14f2349dc +Block 0012 [108]: 326c08a9609a812f +Block 0012 [109]: 1236430f64cc8466 +Block 0012 [110]: a5101a852da2b1a6 +Block 0012 [111]: af36da8f2afb00b5 +Block 0012 [112]: c337670fc34ee15b +Block 0012 [113]: ee6de63f856faf8d +Block 0012 [114]: 2c7bfea979dfc827 +Block 0012 [115]: 599f095c9a74bf90 +Block 0012 [116]: c08d305518a79a2e +Block 0012 [117]: aa2b928943937431 +Block 0012 [118]: 49afefc091ee6c9e +Block 0012 [119]: 61dda0dd29a1b55d +Block 0012 [120]: b25ceb200c524ded +Block 0012 [121]: 1f61aeae22d7737b +Block 0012 [122]: 75eb6d9ac881e97a +Block 0012 [123]: b6d4098a91934f5e +Block 0012 [124]: 334052b5ff62e98c +Block 0012 [125]: 9feccb8757580ece +Block 0012 [126]: 5702c6ec61ba797c +Block 0012 [127]: 82b8728b9614e1e6 +Block 0013 [ 0]: eaedddbe8af5aa2d +Block 0013 [ 1]: eaf925271bb772a9 +Block 0013 [ 2]: 2d52d74cf80f7f01 +Block 0013 [ 3]: 2b3dfef3de0f72a3 +Block 0013 [ 4]: b78c1d365ac715ca +Block 0013 [ 5]: ca3be4f4d86ed487 +Block 0013 [ 6]: bde70152fc817d13 +Block 0013 [ 7]: 7849235bcca4fe00 +Block 0013 [ 8]: ff1834255d9b0889 +Block 0013 [ 9]: 473ce32fac80f41d +Block 0013 [ 10]: aea46e05204bde46 +Block 0013 [ 11]: 66652914efed3406 +Block 0013 [ 12]: 3c341756d52915c2 +Block 0013 [ 13]: 2b1ba4fe3b0dc84f +Block 0013 [ 14]: 9937c961d64aeea4 +Block 0013 [ 15]: 27c2ef5ccf7c4d78 +Block 0013 [ 16]: 6a8fb6caad026005 +Block 0013 [ 17]: cba08dd959b1af0c +Block 0013 [ 18]: 75eb392a6e373db0 +Block 0013 [ 19]: fa107b1d60385685 +Block 0013 [ 20]: 64e4cb093dc69ee7 +Block 0013 [ 21]: 86034fe04390fb84 +Block 0013 [ 22]: 2a15637b8bfdb518 +Block 0013 [ 23]: 04262d2c68a9fb36 +Block 0013 [ 24]: 8869385ea5c0cea8 +Block 0013 [ 25]: 7a86c32291c7ff6e +Block 0013 [ 26]: be1e8f1d75cdbf2f +Block 0013 [ 27]: 58ce0de04a34cccd +Block 0013 [ 28]: 6f01e5967938b60c +Block 0013 [ 29]: 3a40f4a0dc93af25 +Block 0013 [ 30]: 88551df24fef2831 +Block 0013 [ 31]: 8654d6f1a3dce07b +Block 0013 [ 32]: baca7a9bf3a39df2 +Block 0013 [ 33]: 1c18fa53b02620f2 +Block 0013 [ 34]: 450203b941e55a6b +Block 0013 [ 35]: bf7c2e108a5de644 +Block 0013 [ 36]: 4417511c93c0dac9 +Block 0013 [ 37]: 24ffae020a5271ec +Block 0013 [ 38]: 69ee3ae4f949cb5e +Block 0013 [ 39]: 6478ca927bbfc07d +Block 0013 [ 40]: d6ce680d1e16842f +Block 0013 [ 41]: b992d6d900efdab2 +Block 0013 [ 42]: 310fe3c85b5d034d +Block 0013 [ 43]: 1c0dbe4c1f8ef62f +Block 0013 [ 44]: a46a74e0b2e9c447 +Block 0013 [ 45]: ad08f0145b3ea23c +Block 0013 [ 46]: 22a925dbe1442573 +Block 0013 [ 47]: aa6a1baef218fcb9 +Block 0013 [ 48]: 60c92121636f3dd4 +Block 0013 [ 49]: afe5802f9891e2bc +Block 0013 [ 50]: 92e099d0d5629dac +Block 0013 [ 51]: a9957aa663b6c719 +Block 0013 [ 52]: a1a95d7da22e9ffd +Block 0013 [ 53]: e715e53f426b0777 +Block 0013 [ 54]: 6e75377d68214b21 +Block 0013 [ 55]: eb04609119f57bf0 +Block 0013 [ 56]: 67889f4c9664d51a +Block 0013 [ 57]: 5411bbc4b8581969 +Block 0013 [ 58]: de2e7ffdabeff744 +Block 0013 [ 59]: 2deef12e5291bd14 +Block 0013 [ 60]: c86a647b52a5741f +Block 0013 [ 61]: 0394fe241338b4a6 +Block 0013 [ 62]: 186f28e9a9ac3ecf +Block 0013 [ 63]: 1d1722559db5565b +Block 0013 [ 64]: 4415f30c59b9d38d +Block 0013 [ 65]: d6269156a21ce3f0 +Block 0013 [ 66]: 92677e2f8134ec2c +Block 0013 [ 67]: c931b7415a95b276 +Block 0013 [ 68]: 716b0900181c27c7 +Block 0013 [ 69]: 0bf16f91499d7cbc +Block 0013 [ 70]: 24bbec0fe3215012 +Block 0013 [ 71]: 01bf2fcb5b05b6fa +Block 0013 [ 72]: a61e758aa17c3052 +Block 0013 [ 73]: 276ba08d67f150e2 +Block 0013 [ 74]: 22458dd5ee4542fa +Block 0013 [ 75]: 15eaa2f726b1deeb +Block 0013 [ 76]: 98754f686e166252 +Block 0013 [ 77]: c6c4887f77c1a9bf +Block 0013 [ 78]: da5651b242cf01fe +Block 0013 [ 79]: a02bd8001bd9d144 +Block 0013 [ 80]: 3e983a05c2b09cb9 +Block 0013 [ 81]: 7ef8ebad3c99e296 +Block 0013 [ 82]: 20370b5f68fe88a6 +Block 0013 [ 83]: 410fc8b8a3d86a66 +Block 0013 [ 84]: 088156fc052f6b47 +Block 0013 [ 85]: 6c708714938d49bb +Block 0013 [ 86]: be01727481ba5050 +Block 0013 [ 87]: ae8304c820f46aae +Block 0013 [ 88]: 27035fb860b61d9b +Block 0013 [ 89]: a1f5a3b7563660c4 +Block 0013 [ 90]: 4979cee149320d6d +Block 0013 [ 91]: 18497836284ca22b +Block 0013 [ 92]: 2878ce670185ee41 +Block 0013 [ 93]: dc8ffb1d7ea3c8df +Block 0013 [ 94]: 39ef70ffdf088fc7 +Block 0013 [ 95]: 0db82c5c234434b4 +Block 0013 [ 96]: aaca65cbabcbcf0f +Block 0013 [ 97]: 9185fb1315bae27e +Block 0013 [ 98]: 9d1c06a4bdd28482 +Block 0013 [ 99]: 9bd183dfb7f54cf4 +Block 0013 [100]: 3a695d353dfe6678 +Block 0013 [101]: f317b70f64f99610 +Block 0013 [102]: 4c1714fdc792a6e7 +Block 0013 [103]: aa3279d8c71e496e +Block 0013 [104]: d116e54970b5bf96 +Block 0013 [105]: bc89a65d590e3ca7 +Block 0013 [106]: eb48ceb2b57199ea +Block 0013 [107]: 2d43919e25c5f31e +Block 0013 [108]: cc035b7aa6c3a661 +Block 0013 [109]: 588a1e634e20470f +Block 0013 [110]: 418fbd6f77c03100 +Block 0013 [111]: 69ee0ffada874b58 +Block 0013 [112]: 754f34b783f15b81 +Block 0013 [113]: 419f3bd6c0eb4125 +Block 0013 [114]: 4251821a6d37d18b +Block 0013 [115]: 7331d86f98b0fc61 +Block 0013 [116]: ea664445edff9a79 +Block 0013 [117]: bdb834e86f0ee159 +Block 0013 [118]: 5cb72085004e82b5 +Block 0013 [119]: f23b2f4fbdcf5630 +Block 0013 [120]: 7a6732b1bd75a364 +Block 0013 [121]: d6e72bf9884e9967 +Block 0013 [122]: ed7718afffa3d73e +Block 0013 [123]: 682a608b55b3b23e +Block 0013 [124]: 1b74eb5bdc16cea1 +Block 0013 [125]: f05f334d68ec7da1 +Block 0013 [126]: 5177e2e0715c6108 +Block 0013 [127]: 766ae72a7c5c3aaa +Block 0014 [ 0]: 5b2550e4dbc7fa18 +Block 0014 [ 1]: 6b354d6d6b10cac7 +Block 0014 [ 2]: 0ca396bc8d3c4b0c +Block 0014 [ 3]: 000380927b45a85c +Block 0014 [ 4]: e7244935d8f887b1 +Block 0014 [ 5]: 200a8bedc1f6f499 +Block 0014 [ 6]: e427956b507ba1d8 +Block 0014 [ 7]: 6a81cda7910edc35 +Block 0014 [ 8]: 0cfe0f81f9f471a8 +Block 0014 [ 9]: 4b63ce3ecfaaf474 +Block 0014 [ 10]: 75e7cf9ad2a4841f +Block 0014 [ 11]: a3ee8e6cc201c825 +Block 0014 [ 12]: 73dafadc861c7df2 +Block 0014 [ 13]: 6be0047a88a0238e +Block 0014 [ 14]: 9f8bb8d87202d10b +Block 0014 [ 15]: 813971bc045d2c3c +Block 0014 [ 16]: 56e8be12b1264a52 +Block 0014 [ 17]: 276607bedf97436d +Block 0014 [ 18]: ac106bf67df98c68 +Block 0014 [ 19]: 14320d22ab2b8bec +Block 0014 [ 20]: e475a0090015d65f +Block 0014 [ 21]: fb3669a47ffda9a2 +Block 0014 [ 22]: fb70122cd1be3d5d +Block 0014 [ 23]: ee01966d661ab3de +Block 0014 [ 24]: 4dd4c509dc6db43e +Block 0014 [ 25]: 1ba046bdee661628 +Block 0014 [ 26]: 759e90552ec1ed7e +Block 0014 [ 27]: df0886efca925c51 +Block 0014 [ 28]: 23e9c7649656d24e +Block 0014 [ 29]: f7238ddfa18b24c2 +Block 0014 [ 30]: a45035e54a7bc958 +Block 0014 [ 31]: 378186a620803ba2 +Block 0014 [ 32]: cea0ebd7326ea234 +Block 0014 [ 33]: 54ebe0504125676b +Block 0014 [ 34]: 8e36f6d9013959c4 +Block 0014 [ 35]: 38cdcf121287b284 +Block 0014 [ 36]: e967d2462682298c +Block 0014 [ 37]: cea743b39e721689 +Block 0014 [ 38]: 64edd2b710dfb750 +Block 0014 [ 39]: 2d08633513a5ad71 +Block 0014 [ 40]: b895ddebbba5fefb +Block 0014 [ 41]: 02a7678001e2d450 +Block 0014 [ 42]: 27ef9e13015d8dec +Block 0014 [ 43]: 7a1eb3493df50849 +Block 0014 [ 44]: fe1303ec8c91a5bb +Block 0014 [ 45]: 1f9bd7cf219083e6 +Block 0014 [ 46]: c6bb9a21589475af +Block 0014 [ 47]: 873a0fc391188d09 +Block 0014 [ 48]: 190e7438692bf635 +Block 0014 [ 49]: 6ec2aa43c5e2bbe3 +Block 0014 [ 50]: 96ef69d3e95556c8 +Block 0014 [ 51]: ba7fdbdd8a70de10 +Block 0014 [ 52]: 4882e9ddcd522412 +Block 0014 [ 53]: f79160e8864da5c0 +Block 0014 [ 54]: c59223402b843174 +Block 0014 [ 55]: 761b74085fb46dc0 +Block 0014 [ 56]: ca3bbd50a8d27333 +Block 0014 [ 57]: 6cfdf0de3135521a +Block 0014 [ 58]: 79f989869f12e370 +Block 0014 [ 59]: 7d32646711d7741c +Block 0014 [ 60]: fa27ea9d16dc3dd9 +Block 0014 [ 61]: c7956b2f34e15b5e +Block 0014 [ 62]: 314442e9edc14f26 +Block 0014 [ 63]: 6218d35af723ed10 +Block 0014 [ 64]: cc31ba85bb2f651b +Block 0014 [ 65]: 8f7da3844d1645f4 +Block 0014 [ 66]: 0fba3bc9e0d62b47 +Block 0014 [ 67]: eb98f7c11eb98b8e +Block 0014 [ 68]: 5cace434044bfb20 +Block 0014 [ 69]: 6fb70bebb1a8a8a9 +Block 0014 [ 70]: 3375536d4cb653c2 +Block 0014 [ 71]: 64a94ec4d81b77f9 +Block 0014 [ 72]: e531b41790e67c68 +Block 0014 [ 73]: 82d347e282201bb8 +Block 0014 [ 74]: 80bc6a0af7bfc60f +Block 0014 [ 75]: f318824f23cfb4eb +Block 0014 [ 76]: 329345055d886557 +Block 0014 [ 77]: b3c2ec627aa4363a +Block 0014 [ 78]: 4962272584497597 +Block 0014 [ 79]: 7692ceb70ff5980f +Block 0014 [ 80]: f319241988a13e94 +Block 0014 [ 81]: eb94732cfdeea4af +Block 0014 [ 82]: fcddd9e2c11c393a +Block 0014 [ 83]: 3d6ac4f492d7df7a +Block 0014 [ 84]: 9d912c5c969aaaf5 +Block 0014 [ 85]: a91136e982c7f4da +Block 0014 [ 86]: 0a7cda3f50f68fd2 +Block 0014 [ 87]: 903eb02643c18396 +Block 0014 [ 88]: a0649fbd5f0b970b +Block 0014 [ 89]: c10eb8ea019f102c +Block 0014 [ 90]: 17c34c7c16665e57 +Block 0014 [ 91]: 27254dd5e6f4709f +Block 0014 [ 92]: 3d7772bc8265a912 +Block 0014 [ 93]: a0172dafb378d99b +Block 0014 [ 94]: 778d8f7d9b515750 +Block 0014 [ 95]: 944406206db979ea +Block 0014 [ 96]: 509d1f46f87cc0a7 +Block 0014 [ 97]: 33f6690915ed2412 +Block 0014 [ 98]: f34179142c23746e +Block 0014 [ 99]: a78c7b1cdc3ce7da +Block 0014 [100]: d640afa9bd498f05 +Block 0014 [101]: bc20596310df8b3c +Block 0014 [102]: 14dafd36a5a4d228 +Block 0014 [103]: e1b0807ba915d237 +Block 0014 [104]: 3a30e6af3668fd21 +Block 0014 [105]: fc4e6de5a31ff542 +Block 0014 [106]: 6c39a88ef296ed5a +Block 0014 [107]: 05e873d69b4438f7 +Block 0014 [108]: fae4b618526422d4 +Block 0014 [109]: 16123e4dd6f2a12e +Block 0014 [110]: e2c4bf1ac9b284e1 +Block 0014 [111]: 2ead3cdbfbe99ed7 +Block 0014 [112]: 6e2d576c0c2ae51b +Block 0014 [113]: 95626ec048beb8a7 +Block 0014 [114]: 328db9b409d90732 +Block 0014 [115]: 31e631764dcd4f5f +Block 0014 [116]: 3bdbf0835a077ce6 +Block 0014 [117]: ab57496d09a6756e +Block 0014 [118]: 6fc0f3ff3af34c5e +Block 0014 [119]: c4eb12c1e9ee0082 +Block 0014 [120]: bdf93172143e9b0e +Block 0014 [121]: 96475254ea6bce21 +Block 0014 [122]: b951bc13b50b8d94 +Block 0014 [123]: c74e588c176a5ac4 +Block 0014 [124]: f50cbab1174678bf +Block 0014 [125]: 9c0ab31431c2ef5d +Block 0014 [126]: 61dbaeec02095a86 +Block 0014 [127]: 26257729719307f2 +Block 0015 [ 0]: bffa5134f891815d +Block 0015 [ 1]: c9d1e86859077437 +Block 0015 [ 2]: 77d57dca52d915e4 +Block 0015 [ 3]: d9c785a6fe75a1c1 +Block 0015 [ 4]: 0b70b72c7f07897d +Block 0015 [ 5]: a3be1edec51134ab +Block 0015 [ 6]: a2c658c0c467bfcb +Block 0015 [ 7]: 0d793e8f6b15d9b8 +Block 0015 [ 8]: 597e8e8b9f5f50bd +Block 0015 [ 9]: a81216501f4f3790 +Block 0015 [ 10]: 5124ccd8eb141ab3 +Block 0015 [ 11]: 2aadc51f9f1db29c +Block 0015 [ 12]: 595d8bfc6ab47015 +Block 0015 [ 13]: c8f2521f504b34c4 +Block 0015 [ 14]: 49920f23c3e00a08 +Block 0015 [ 15]: 8b5e8857dcc09534 +Block 0015 [ 16]: 3446613c42b95a3d +Block 0015 [ 17]: f311d4e2180cddf6 +Block 0015 [ 18]: 330dcbb4036f4c43 +Block 0015 [ 19]: c1abc25872408257 +Block 0015 [ 20]: ea8ca75355745b41 +Block 0015 [ 21]: 3edbc39cabf21ddc +Block 0015 [ 22]: a7453f4b18499b7a +Block 0015 [ 23]: 42508913574e3416 +Block 0015 [ 24]: 7c3c53f6522e1e58 +Block 0015 [ 25]: 4ac931ea5a311b70 +Block 0015 [ 26]: bcf6e7a4a8050c6b +Block 0015 [ 27]: 98c6e929c86f3fa2 +Block 0015 [ 28]: 25451aaace81f7ee +Block 0015 [ 29]: 5313185413450a07 +Block 0015 [ 30]: 69293c347974ba7a +Block 0015 [ 31]: d48883fdfdc19477 +Block 0015 [ 32]: 3a0ce3cc08024172 +Block 0015 [ 33]: 66bd0a95bf2b998a +Block 0015 [ 34]: 8ab3300f23d9abe2 +Block 0015 [ 35]: aaac3dcf691b6fa1 +Block 0015 [ 36]: ef4ac0dd37e0aba3 +Block 0015 [ 37]: 311431df9bb602c5 +Block 0015 [ 38]: 74edd18f5de5bf86 +Block 0015 [ 39]: 4ffd577d73bcbd05 +Block 0015 [ 40]: 214f9d188d2f36d9 +Block 0015 [ 41]: b446680a08db1c7f +Block 0015 [ 42]: 44f50256a68647f4 +Block 0015 [ 43]: 2456dd7fb1a98133 +Block 0015 [ 44]: 5a4f92d4794ac4c3 +Block 0015 [ 45]: f7fd907c3384360d +Block 0015 [ 46]: cb979d6a0dd8436b +Block 0015 [ 47]: 0f7dec5cf75ce956 +Block 0015 [ 48]: bc9227dc2eb2db73 +Block 0015 [ 49]: 94cafc1d1646ed66 +Block 0015 [ 50]: f3a475e8f020b13a +Block 0015 [ 51]: 22b0f1229ae9a821 +Block 0015 [ 52]: 333762086c0d1d63 +Block 0015 [ 53]: 69e584834b611f03 +Block 0015 [ 54]: ccc3dbf7c70523fe +Block 0015 [ 55]: b976aa72c341c6dc +Block 0015 [ 56]: c57a56dce39435e1 +Block 0015 [ 57]: e3ad1c396a6e98d1 +Block 0015 [ 58]: e1eb535fc12f237a +Block 0015 [ 59]: 31b646b18f7a60a7 +Block 0015 [ 60]: 8b5aedc11623526c +Block 0015 [ 61]: 6946cbcf48d09dde +Block 0015 [ 62]: 881b0e743e1f8c04 +Block 0015 [ 63]: 04db0580164c9224 +Block 0015 [ 64]: bd8c78074008c1cf +Block 0015 [ 65]: 662baa93b93e46ad +Block 0015 [ 66]: 3b6e57fee4d1eef2 +Block 0015 [ 67]: ea5709e05b86b1e3 +Block 0015 [ 68]: f6114fe2c56f8a91 +Block 0015 [ 69]: 3e1a3204a2616fa5 +Block 0015 [ 70]: 420210852fdf71ee +Block 0015 [ 71]: 006a843a0c6cc9c6 +Block 0015 [ 72]: 896cddd3e1719215 +Block 0015 [ 73]: 59a6b53c4f06fb52 +Block 0015 [ 74]: b819297575c796ad +Block 0015 [ 75]: 130d7e7b3c82284c +Block 0015 [ 76]: a6e0893c54adda2e +Block 0015 [ 77]: cacdc1057579975e +Block 0015 [ 78]: 8eaaff716864cf5c +Block 0015 [ 79]: 6aa150222002d534 +Block 0015 [ 80]: 2ad6f73b950c9641 +Block 0015 [ 81]: 042b0a08f2daf138 +Block 0015 [ 82]: d77dca90a93ea577 +Block 0015 [ 83]: 1be098db6c2283bb +Block 0015 [ 84]: a8ef13df654b6224 +Block 0015 [ 85]: ac70aaa59942e32e +Block 0015 [ 86]: 049cade3d2bd666a +Block 0015 [ 87]: 6f95a90efbc8f023 +Block 0015 [ 88]: 1ad8afc58cd1852c +Block 0015 [ 89]: c1f8c28aab6c0a2c +Block 0015 [ 90]: 1deb0ff6f03546b6 +Block 0015 [ 91]: 2919e466740b12ec +Block 0015 [ 92]: 6068f5c8e3687356 +Block 0015 [ 93]: 94c6e3c042e0c45b +Block 0015 [ 94]: 299f2690cdc3f2ae +Block 0015 [ 95]: 371e0b2f24c55dd1 +Block 0015 [ 96]: 68b2d5a79a498a9d +Block 0015 [ 97]: f90d22cd6b28fbcb +Block 0015 [ 98]: 0a540f5bb4c626da +Block 0015 [ 99]: 22a7872cc893ccbc +Block 0015 [100]: 3f88c5459cb3d544 +Block 0015 [101]: c4ea6b59c1c6b0a7 +Block 0015 [102]: d4bdb7a882c60a7b +Block 0015 [103]: 6de6f73d38b41093 +Block 0015 [104]: 75eea05cb9d3455f +Block 0015 [105]: e3e2ee7697b87d31 +Block 0015 [106]: a5229ba65fed9c39 +Block 0015 [107]: bae498bf96e2bb0d +Block 0015 [108]: 9929fb2d2d6a097e +Block 0015 [109]: d2dfe8b87b7474d9 +Block 0015 [110]: bf2d786bfa03556b +Block 0015 [111]: 2037ef5875f48234 +Block 0015 [112]: 79fc5cc5dcb41d0d +Block 0015 [113]: 5956deb9a21e81cc +Block 0015 [114]: ee7fb1ac03532faf +Block 0015 [115]: 3c3640a2fc5ccf9f +Block 0015 [116]: 249ae749f07b477e +Block 0015 [117]: 3dfb90c35bae2e4c +Block 0015 [118]: 656a4faf5d4139d0 +Block 0015 [119]: 49d42d1ec6342c7d +Block 0015 [120]: 3a0f3ecf42effdd9 +Block 0015 [121]: 1ee8e527e656374f +Block 0015 [122]: 8d027e114f72d46b +Block 0015 [123]: 16219eeebed66173 +Block 0015 [124]: dbaa98ff73905ee1 +Block 0015 [125]: e1bb04410cc1bc8b +Block 0015 [126]: ca336c250756275f +Block 0015 [127]: 1bfba5b1b19c3f88 +Block 0016 [ 0]: 6010e5a01db5f196 +Block 0016 [ 1]: ef7ac9e4440495c3 +Block 0016 [ 2]: da642ab2564f83df +Block 0016 [ 3]: 422fbcb748ee5d27 +Block 0016 [ 4]: c5b382f0a17717bf +Block 0016 [ 5]: d4425eca0af816fb +Block 0016 [ 6]: e024f3f05918d81a +Block 0016 [ 7]: 53d9fc82bfcc0ff7 +Block 0016 [ 8]: 0d0ffa5876f6e615 +Block 0016 [ 9]: 7fa7188fff681a48 +Block 0016 [ 10]: 28f5d8b757cb69d2 +Block 0016 [ 11]: f59ff3e8dcabb89b +Block 0016 [ 12]: c086251a5ad5708f +Block 0016 [ 13]: 10f5b28138ae33ab +Block 0016 [ 14]: 1273805b77cb7e11 +Block 0016 [ 15]: b3d83b7e6cf2b8d6 +Block 0016 [ 16]: 68b4cab9ec0bb673 +Block 0016 [ 17]: 9db6bb436dc180a3 +Block 0016 [ 18]: f8941e643334bd45 +Block 0016 [ 19]: 60f497755d89255c +Block 0016 [ 20]: 41d7f475a441ec8a +Block 0016 [ 21]: 4d662dce1c1c6cd8 +Block 0016 [ 22]: 6d61fde8d9a5f590 +Block 0016 [ 23]: 949d73cecd9a94af +Block 0016 [ 24]: 2a621fcccc89a379 +Block 0016 [ 25]: e3b9f35f13264c99 +Block 0016 [ 26]: 665090516cab8704 +Block 0016 [ 27]: 54358d6530ea9a16 +Block 0016 [ 28]: 484b3f465d14d230 +Block 0016 [ 29]: 7f14f35e09e986bf +Block 0016 [ 30]: 1f25c14168d491a2 +Block 0016 [ 31]: a86ffa29322d3c60 +Block 0016 [ 32]: 4dbe9a8213819da6 +Block 0016 [ 33]: 79a23c6d9e0b6eab +Block 0016 [ 34]: 030791bdea94c4e9 +Block 0016 [ 35]: a791b204d75e3f3d +Block 0016 [ 36]: 81d8761e8890bcab +Block 0016 [ 37]: 050fe1821d706207 +Block 0016 [ 38]: 18825ead7299224e +Block 0016 [ 39]: 001a96583c7d6f09 +Block 0016 [ 40]: 0001d2e81148000f +Block 0016 [ 41]: 372fc268847321c6 +Block 0016 [ 42]: 9d07aad08cff66f9 +Block 0016 [ 43]: 69ed41995677bedc +Block 0016 [ 44]: 7019349cab952e6d +Block 0016 [ 45]: a5e5b7c45b17ffe5 +Block 0016 [ 46]: 6dac282c45d97b01 +Block 0016 [ 47]: 824ff45d1aa89d6d +Block 0016 [ 48]: 813df0ece26aa83e +Block 0016 [ 49]: 1ab5dd2ab168553c +Block 0016 [ 50]: 1cb81038942c1ea0 +Block 0016 [ 51]: a992785912314770 +Block 0016 [ 52]: 56da8dcd757f3f9c +Block 0016 [ 53]: 6d9a48dc8fb83789 +Block 0016 [ 54]: b08051aeeefb1bd3 +Block 0016 [ 55]: 557f90a417a97732 +Block 0016 [ 56]: df1e927d53570ac2 +Block 0016 [ 57]: 5a61d6997a74e714 +Block 0016 [ 58]: 6d493a2ff2550d90 +Block 0016 [ 59]: ef3747c93347f033 +Block 0016 [ 60]: e4e55b94cfe605f0 +Block 0016 [ 61]: 22d8d26ec147d337 +Block 0016 [ 62]: c81d012c9200276f +Block 0016 [ 63]: 359774aa24a65129 +Block 0016 [ 64]: 9f4b8f9fb5cefffc +Block 0016 [ 65]: 0d933ec3e5e2a12a +Block 0016 [ 66]: 9b91aa03e72879cd +Block 0016 [ 67]: d663e27e00b62076 +Block 0016 [ 68]: f4b8905b594a2974 +Block 0016 [ 69]: e62dfc1510ebcecd +Block 0016 [ 70]: 9c0148ce0ee08434 +Block 0016 [ 71]: 99c1407c889dffab +Block 0016 [ 72]: 9048f4117c0cc6d3 +Block 0016 [ 73]: 98b2b397d668d6e8 +Block 0016 [ 74]: cc063ea8e2f217a9 +Block 0016 [ 75]: 9aaaa458736bd6c1 +Block 0016 [ 76]: 48e7a37c45aff5ba +Block 0016 [ 77]: 8b5e80eb8a66e2b6 +Block 0016 [ 78]: ea967076787d21cf +Block 0016 [ 79]: 4b47a086ab30cf99 +Block 0016 [ 80]: 2a37cf84213864aa +Block 0016 [ 81]: fe9988bd22317576 +Block 0016 [ 82]: 04d3c4a70f6eaa56 +Block 0016 [ 83]: 8121c0c9771de687 +Block 0016 [ 84]: 8e900e643824ff7d +Block 0016 [ 85]: 70b3c663c2497b1a +Block 0016 [ 86]: fc2bc4df54195dcb +Block 0016 [ 87]: ec6a71b75fabcfd4 +Block 0016 [ 88]: 99bb729eb37d40d7 +Block 0016 [ 89]: 6c1cf32dbae62277 +Block 0016 [ 90]: 1dd8a791c33baf55 +Block 0016 [ 91]: 3fcde3086a1bbe80 +Block 0016 [ 92]: afba9f9bbe6fd48e +Block 0016 [ 93]: b2cfce14af04208e +Block 0016 [ 94]: eac8a967896115ec +Block 0016 [ 95]: ea2143acd19ef83a +Block 0016 [ 96]: 701456ec354ba67e +Block 0016 [ 97]: 49d65a46e413858a +Block 0016 [ 98]: 8f07bd7412b0e8f1 +Block 0016 [ 99]: 68a8f4cc7f10eb91 +Block 0016 [100]: 9c01a08f0af1afa5 +Block 0016 [101]: b820f47feba63788 +Block 0016 [102]: 03190ea5d4871819 +Block 0016 [103]: 3b651df26d5cd723 +Block 0016 [104]: 26ca939e5080c15b +Block 0016 [105]: cc70e85496103f56 +Block 0016 [106]: 80ffd1c901698be2 +Block 0016 [107]: 522441509970ea18 +Block 0016 [108]: 1022a4692594b2bd +Block 0016 [109]: 2985962eb8b814b3 +Block 0016 [110]: 264aa5f3c50eaa8b +Block 0016 [111]: eadbbfa147a88690 +Block 0016 [112]: 878ea9e03d8fde59 +Block 0016 [113]: 85ecf7c34da61ad3 +Block 0016 [114]: a2d465943921114e +Block 0016 [115]: 3f515b15670ca854 +Block 0016 [116]: 78682e4a3d933c57 +Block 0016 [117]: 0741db2c00eaf60c +Block 0016 [118]: 14aebc91873c8271 +Block 0016 [119]: bfcb1cf854c7ffef +Block 0016 [120]: 1ff0f28ec53228dc +Block 0016 [121]: 665ded777f9ff07c +Block 0016 [122]: bf3a4430fc18db0d +Block 0016 [123]: 111121717f28e4b0 +Block 0016 [124]: 0a7e2d46fa48c688 +Block 0016 [125]: 1d9111141c20dd7d +Block 0016 [126]: 97dc7f23a15e420d +Block 0016 [127]: 7d0f97200592ac0f +Block 0017 [ 0]: 6c854de359a27b14 +Block 0017 [ 1]: ab170011524b516b +Block 0017 [ 2]: d9ca751dd898771a +Block 0017 [ 3]: 8c4633d5f1018345 +Block 0017 [ 4]: 644e77aaccec2780 +Block 0017 [ 5]: ca368c8fc382be50 +Block 0017 [ 6]: a3750492ea2d3743 +Block 0017 [ 7]: 710724317321ea99 +Block 0017 [ 8]: 506e1f6c741c754b +Block 0017 [ 9]: 0b20985a71e306ce +Block 0017 [ 10]: 6aff8cd2138fb4a4 +Block 0017 [ 11]: c6f99c5928d42e0e +Block 0017 [ 12]: 5474a832d3fec864 +Block 0017 [ 13]: 4e2c6f89c04b4ce3 +Block 0017 [ 14]: 20951424bd88158f +Block 0017 [ 15]: 049ddd7039249b57 +Block 0017 [ 16]: 9d11626ed63e9d75 +Block 0017 [ 17]: 5dcd2c7b8fed81df +Block 0017 [ 18]: 32e63465360993cf +Block 0017 [ 19]: e5291e13dac657ef +Block 0017 [ 20]: 19b49c016d92ef9f +Block 0017 [ 21]: 25c4060f2e5a141b +Block 0017 [ 22]: 01c62152a6855bd0 +Block 0017 [ 23]: 5614450e855dff8e +Block 0017 [ 24]: 3dea2a55b44ed33d +Block 0017 [ 25]: 1e9ee197c2152f09 +Block 0017 [ 26]: 35ed915e6967ed30 +Block 0017 [ 27]: 4653b34c57a70bee +Block 0017 [ 28]: 6d7aef2d7c05145e +Block 0017 [ 29]: 17adee6b3e41fb2a +Block 0017 [ 30]: 8e12058d65ac98d6 +Block 0017 [ 31]: 0046d2058b5368ee +Block 0017 [ 32]: e212e8b2e97a58f0 +Block 0017 [ 33]: 8d36be0c3106f8ba +Block 0017 [ 34]: 48c69e10aa22904d +Block 0017 [ 35]: 8ebd7ca19f445bce +Block 0017 [ 36]: f03a9a76d79f28a1 +Block 0017 [ 37]: 70c4181d29e54c96 +Block 0017 [ 38]: 77a364b32253cf9d +Block 0017 [ 39]: 3391b9f1953c8b37 +Block 0017 [ 40]: aa993339b8e0bfb0 +Block 0017 [ 41]: ec54e0387ad67f2d +Block 0017 [ 42]: 2134419c0745c71b +Block 0017 [ 43]: 793be7c16a647a0f +Block 0017 [ 44]: c69c2aad8535c856 +Block 0017 [ 45]: b39230bf5914c583 +Block 0017 [ 46]: 6a22086fafce953c +Block 0017 [ 47]: 4db7d73d6688a25d +Block 0017 [ 48]: ac9b96d3af4ad9eb +Block 0017 [ 49]: e6a8d0830e5f9a8a +Block 0017 [ 50]: 8ead43f5c86a6c53 +Block 0017 [ 51]: ee14b2ad8035a82e +Block 0017 [ 52]: aedad0d1aeee646a +Block 0017 [ 53]: fd496ca2fa94be9f +Block 0017 [ 54]: 704655cfbf0bb174 +Block 0017 [ 55]: 643542ce119cfce6 +Block 0017 [ 56]: 2756dd234a28b75e +Block 0017 [ 57]: 46774c4f9c4faeef +Block 0017 [ 58]: e880c1a7748827da +Block 0017 [ 59]: 7ed6aa78f60fb5b2 +Block 0017 [ 60]: 996be9d3a1251b76 +Block 0017 [ 61]: def3a7360b6b00e0 +Block 0017 [ 62]: fd47dff4e7918935 +Block 0017 [ 63]: 8e1a79b1ab106b77 +Block 0017 [ 64]: 4bc31eacee4bd340 +Block 0017 [ 65]: 68194d5d5b0de56d +Block 0017 [ 66]: 2386852248a5f801 +Block 0017 [ 67]: 1f5a334f4ccf1a17 +Block 0017 [ 68]: 026e07926322d862 +Block 0017 [ 69]: eb5210fcb5e9bb76 +Block 0017 [ 70]: 491d5a771e931209 +Block 0017 [ 71]: 0711fe3ff0b0102a +Block 0017 [ 72]: 32652a737fa96536 +Block 0017 [ 73]: 1ad92094bb31a0c5 +Block 0017 [ 74]: 2ec5dd2510484a03 +Block 0017 [ 75]: e6602baec448ceea +Block 0017 [ 76]: 6dd6c94678ff2b44 +Block 0017 [ 77]: 6c2145a06e193d1c +Block 0017 [ 78]: 0924fba0cdad5d27 +Block 0017 [ 79]: 29e57377cbe5aef7 +Block 0017 [ 80]: ef001f269aa4ee67 +Block 0017 [ 81]: dbfb6698ab8f3bc7 +Block 0017 [ 82]: 29b3658753624eb5 +Block 0017 [ 83]: e0b1c5dba16f8047 +Block 0017 [ 84]: a13b1b94185ffa59 +Block 0017 [ 85]: abc67b4f1d7f428d +Block 0017 [ 86]: 1a83e1d56da1feaa +Block 0017 [ 87]: c4d6aca2025b742c +Block 0017 [ 88]: f89b51f7fb2ead81 +Block 0017 [ 89]: 7a2c8bdfbad523ba +Block 0017 [ 90]: f146ec07790bdc42 +Block 0017 [ 91]: 18424f72b9b1807c +Block 0017 [ 92]: b348077960d66ab3 +Block 0017 [ 93]: f6e54d7ecbe2bf1d +Block 0017 [ 94]: c6d51695b65c1709 +Block 0017 [ 95]: 18afc845c30ff3b4 +Block 0017 [ 96]: 3ffccd9ef3011b87 +Block 0017 [ 97]: c7bc87390fa969e1 +Block 0017 [ 98]: 34a9bafacf6fa83c +Block 0017 [ 99]: c5e6c743af000704 +Block 0017 [100]: 6af212c30a350c1d +Block 0017 [101]: 88d55b4862fc3d9c +Block 0017 [102]: cc48a109df597048 +Block 0017 [103]: 09ef4343d8c9fc76 +Block 0017 [104]: c6c72a8f20bfc65d +Block 0017 [105]: af5d9436947d2da2 +Block 0017 [106]: 83e806505df923fc +Block 0017 [107]: 4d1b57f48a901f47 +Block 0017 [108]: 3a7224caac737486 +Block 0017 [109]: 9ad46a15a95bd9b9 +Block 0017 [110]: 2c605f1dd6fb13b0 +Block 0017 [111]: 5b58702ada82fb6d +Block 0017 [112]: 56ad71be835153be +Block 0017 [113]: 702a54e878158665 +Block 0017 [114]: bc63b93cb901b390 +Block 0017 [115]: bf5286b83aeacabe +Block 0017 [116]: 2447ce3ac7607e12 +Block 0017 [117]: 18591f38ccec50b0 +Block 0017 [118]: 2f43769546a049c3 +Block 0017 [119]: 875a0634f2bdb29b +Block 0017 [120]: ff423c951924c37f +Block 0017 [121]: f3fdc563e8968307 +Block 0017 [122]: ef523a21adfa27a9 +Block 0017 [123]: 4b97c503e8f1c16a +Block 0017 [124]: 49fbc58c69cf60e3 +Block 0017 [125]: 9d083b9159a3342e +Block 0017 [126]: e6150d9b263368e9 +Block 0017 [127]: 91c8e3518b925665 +Block 0018 [ 0]: 09169bcd34088b6b +Block 0018 [ 1]: 86acc703eeac4a74 +Block 0018 [ 2]: acb4afde4e700884 +Block 0018 [ 3]: f74c9f748888b3d2 +Block 0018 [ 4]: 053604400798d750 +Block 0018 [ 5]: dbfb2e0558912262 +Block 0018 [ 6]: 434957deab5f0be5 +Block 0018 [ 7]: 1d1a36215fab5839 +Block 0018 [ 8]: 2b3c96e646cb7b58 +Block 0018 [ 9]: 5f0c334b5cf5e76d +Block 0018 [ 10]: 25c500806d58bb88 +Block 0018 [ 11]: c363a6a0ea48185a +Block 0018 [ 12]: 72a9ca02fd66fb79 +Block 0018 [ 13]: 3e098c02b5525add +Block 0018 [ 14]: 38abb765bebc5ef9 +Block 0018 [ 15]: c166ffc83198c88e +Block 0018 [ 16]: fb77428692d231d3 +Block 0018 [ 17]: 3539b44b84631eb5 +Block 0018 [ 18]: f4123116001a9a3c +Block 0018 [ 19]: 8939910fa3c492f0 +Block 0018 [ 20]: c9a9f3ca2aa9b956 +Block 0018 [ 21]: 733b09b7c6e375b4 +Block 0018 [ 22]: 4be150262a693b43 +Block 0018 [ 23]: 80c2356af1c3e4e2 +Block 0018 [ 24]: 78f6b4660d1fcbd4 +Block 0018 [ 25]: b5cb5cc48f8ce6d8 +Block 0018 [ 26]: 6163248cf38ee860 +Block 0018 [ 27]: 3149c7c21d9c1bcc +Block 0018 [ 28]: a46dd5ce559b3301 +Block 0018 [ 29]: 82a377709679db16 +Block 0018 [ 30]: df41d3ae50c3e9fa +Block 0018 [ 31]: 20cc71102bcbc203 +Block 0018 [ 32]: 87c7cefcafdd7f1a +Block 0018 [ 33]: 974b1dd1e6abcf25 +Block 0018 [ 34]: 0c957cfeacbba93e +Block 0018 [ 35]: 624b4138281d73cb +Block 0018 [ 36]: 5e5376ec02786a25 +Block 0018 [ 37]: cd87356fed667155 +Block 0018 [ 38]: 22da3a402996ee25 +Block 0018 [ 39]: d61015447f0e6bf2 +Block 0018 [ 40]: 636d57f3d02a806c +Block 0018 [ 41]: 298521b455db8a42 +Block 0018 [ 42]: 863be3dca5457525 +Block 0018 [ 43]: 6a2bc1f83f302d42 +Block 0018 [ 44]: 20fc3e21514b4937 +Block 0018 [ 45]: 9066233a2cdfac93 +Block 0018 [ 46]: 2f7acb4b162ac38c +Block 0018 [ 47]: 1e9e4cc0ff3d03de +Block 0018 [ 48]: 1dd520d008ee3700 +Block 0018 [ 49]: d422d313c724d22e +Block 0018 [ 50]: bd2891bb12d658cb +Block 0018 [ 51]: ee7255f1b11eb395 +Block 0018 [ 52]: 6a5c5a4933ff4d0c +Block 0018 [ 53]: 938ea358a4fcdaa0 +Block 0018 [ 54]: faea433823bec653 +Block 0018 [ 55]: 5a8cbbd843d89aad +Block 0018 [ 56]: 00a4ab591ec20403 +Block 0018 [ 57]: dfef10cd77bb704c +Block 0018 [ 58]: 84fe88c092442226 +Block 0018 [ 59]: e945709daa309822 +Block 0018 [ 60]: 5f5f457b0f044e15 +Block 0018 [ 61]: 0962103719625665 +Block 0018 [ 62]: 392e21509f3e2b85 +Block 0018 [ 63]: 79db0d5e62d4a35f +Block 0018 [ 64]: b1cc4815490b2a15 +Block 0018 [ 65]: 2a27bd31361243ff +Block 0018 [ 66]: 534931fd3119c337 +Block 0018 [ 67]: f2de675fd4477358 +Block 0018 [ 68]: 3ce1d2a9d12283a3 +Block 0018 [ 69]: 3529aeb38b7f494c +Block 0018 [ 70]: 859608bcef46cd68 +Block 0018 [ 71]: 92e002e9919eb521 +Block 0018 [ 72]: e94a244299ef800e +Block 0018 [ 73]: 3b52ecf16f8af708 +Block 0018 [ 74]: 7ba9b8b344d26286 +Block 0018 [ 75]: 65c1c368b537a81b +Block 0018 [ 76]: 0a00be152dce8df4 +Block 0018 [ 77]: 8a5639a940bdce45 +Block 0018 [ 78]: 41767d6c8bf15e7c +Block 0018 [ 79]: 5215d97498dd4741 +Block 0018 [ 80]: c70d80194c256712 +Block 0018 [ 81]: c8f08d28ec7265b5 +Block 0018 [ 82]: 394757f13699ce10 +Block 0018 [ 83]: 00184fc5a16919ba +Block 0018 [ 84]: 4f9a458762b2ff08 +Block 0018 [ 85]: e92b2319026bb801 +Block 0018 [ 86]: 14e47983ebef3da7 +Block 0018 [ 87]: b7afe7d7785d842c +Block 0018 [ 88]: da2999c313f6bebd +Block 0018 [ 89]: dbb0219158918ad4 +Block 0018 [ 90]: 0ff465d811aea3a4 +Block 0018 [ 91]: bb700ac4d2a8934a +Block 0018 [ 92]: 40552366f56fa6e8 +Block 0018 [ 93]: 9bc93fc38182a556 +Block 0018 [ 94]: bec6d8f0f9967bb9 +Block 0018 [ 95]: 6d6a8136627b7a9c +Block 0018 [ 96]: d2662137f57a7c6c +Block 0018 [ 97]: 5bb3b7ddf0963885 +Block 0018 [ 98]: 2e862fc79af5d102 +Block 0018 [ 99]: 2184d2e48441702b +Block 0018 [100]: 06d9bd4aedc4e8d5 +Block 0018 [101]: 4724e53387679683 +Block 0018 [102]: 6aac974179446794 +Block 0018 [103]: d7e60f9c73e24088 +Block 0018 [104]: 9db1ee2eacf97545 +Block 0018 [105]: dbaed3874219a120 +Block 0018 [106]: 76dbbdc4483bde99 +Block 0018 [107]: 39a4b5d1b9d35ec4 +Block 0018 [108]: ba2913d05acbc99d +Block 0018 [109]: 3938947bec18c8d3 +Block 0018 [110]: 7e4d1a1004fc2bf8 +Block 0018 [111]: 19a777b4f19d49f9 +Block 0018 [112]: dcc44d359edf7ba7 +Block 0018 [113]: 187b0ef4c810a9c6 +Block 0018 [114]: b073241a034b70cb +Block 0018 [115]: 4f30b75c95304517 +Block 0018 [116]: d431a15ac9c55e98 +Block 0018 [117]: 97b7e619a567d98e +Block 0018 [118]: 0b86895e716fe184 +Block 0018 [119]: 8f232e76cccd2fec +Block 0018 [120]: fb6b2f0ac4ee2162 +Block 0018 [121]: 35850bcb3c03430b +Block 0018 [122]: 6b7a17b5c64c950f +Block 0018 [123]: 024be1006b69f750 +Block 0018 [124]: 587cb3d3632ce41b +Block 0018 [125]: 44e4206f94a46c91 +Block 0018 [126]: 9d92bd06844fd42e +Block 0018 [127]: 1a362e419ebc0ebf +Block 0019 [ 0]: fb1a18dd9d7050cf +Block 0019 [ 1]: 8003990d8ce31314 +Block 0019 [ 2]: 5a1fe2fd55f52157 +Block 0019 [ 3]: f2c627a6c5b50c9c +Block 0019 [ 4]: 7df91a65f111fc48 +Block 0019 [ 5]: 4373c58ce1b6834d +Block 0019 [ 6]: 7a63036740cfc7e9 +Block 0019 [ 7]: f706a4864759b418 +Block 0019 [ 8]: 93acd66513889d55 +Block 0019 [ 9]: 48854dbcd9a36a91 +Block 0019 [ 10]: dc3409afd0b364d2 +Block 0019 [ 11]: 82d5350cc4216ae5 +Block 0019 [ 12]: 67656d5e97f0d6f3 +Block 0019 [ 13]: 08ffde5c41840d3d +Block 0019 [ 14]: a6e2e49699662cf6 +Block 0019 [ 15]: 1165624c23dc6a59 +Block 0019 [ 16]: 9b257613376b98bb +Block 0019 [ 17]: 5b3b3a9b22f18fc6 +Block 0019 [ 18]: 8e180a717652d9de +Block 0019 [ 19]: ee887439b80d6210 +Block 0019 [ 20]: 7dad12f1ebf23f4a +Block 0019 [ 21]: 8fbcd1a17cfc4382 +Block 0019 [ 22]: 9569665875fc1a39 +Block 0019 [ 23]: 32ef4ca936ecd698 +Block 0019 [ 24]: 6b143f4ff90bc9b8 +Block 0019 [ 25]: 3125e294dc69e551 +Block 0019 [ 26]: 8dfeae4343a1ab97 +Block 0019 [ 27]: 0d515500a7396b53 +Block 0019 [ 28]: f9aff1f427be7093 +Block 0019 [ 29]: 661148ebd0368628 +Block 0019 [ 30]: 405568cdd4f64a35 +Block 0019 [ 31]: 68db03ab59e58d23 +Block 0019 [ 32]: 4852cd76fea75ea2 +Block 0019 [ 33]: ef11900d02739bd6 +Block 0019 [ 34]: e54ac5c2a8fed901 +Block 0019 [ 35]: ebac4ca2e70572af +Block 0019 [ 36]: 11f503055e2f369a +Block 0019 [ 37]: 3cb7ec7a47ece701 +Block 0019 [ 38]: 741ac40ccb35b5f6 +Block 0019 [ 39]: 0988537de00f2f86 +Block 0019 [ 40]: 03c72d2e04a2b7d1 +Block 0019 [ 41]: bcdcf97b2046cf23 +Block 0019 [ 42]: e6abec7d693a2d78 +Block 0019 [ 43]: 17b3a2364d5d591e +Block 0019 [ 44]: 635b0613ef26c2f6 +Block 0019 [ 45]: f2dac357e00b0473 +Block 0019 [ 46]: 7b3f889632f9216f +Block 0019 [ 47]: b276ed10296d8bc0 +Block 0019 [ 48]: ca7bf1ac91f14ae3 +Block 0019 [ 49]: 67f2fbcfac4f0b3e +Block 0019 [ 50]: 3d410c3d2788dfc0 +Block 0019 [ 51]: e82b4e26ed7c2956 +Block 0019 [ 52]: 1b1ebf1749f98ac5 +Block 0019 [ 53]: 7606f41eb6e43647 +Block 0019 [ 54]: 72d8654a0024c77f +Block 0019 [ 55]: e8931c577a41a343 +Block 0019 [ 56]: c87455bf23cf0d7d +Block 0019 [ 57]: fd35a720c62f1148 +Block 0019 [ 58]: 740ba36ec29256dc +Block 0019 [ 59]: 3e58d08b19c34732 +Block 0019 [ 60]: 20b08e2a659869b6 +Block 0019 [ 61]: abf550ee47b890c4 +Block 0019 [ 62]: 6b51a125c9a5b1c8 +Block 0019 [ 63]: 8c2f07fa117246fc +Block 0019 [ 64]: d9dcd942493ffc8b +Block 0019 [ 65]: a67f91a1888767dd +Block 0019 [ 66]: cb0a25f005618897 +Block 0019 [ 67]: fe031e918884083e +Block 0019 [ 68]: b5f2696212d55bf4 +Block 0019 [ 69]: d6f0f120d54a2056 +Block 0019 [ 70]: b8aa60ecefdbf3ea +Block 0019 [ 71]: b1d50e6dba68c17a +Block 0019 [ 72]: ee748a952573ecdb +Block 0019 [ 73]: 9ca785a74983ceae +Block 0019 [ 74]: 44ec1f1bbc910c5e +Block 0019 [ 75]: 0fec54467df78766 +Block 0019 [ 76]: 624b8e56f6d980ec +Block 0019 [ 77]: fa07a5f17f84a623 +Block 0019 [ 78]: cd00a41e8aa5b6ce +Block 0019 [ 79]: 5697364234152d21 +Block 0019 [ 80]: 7b8a32e4f0d1af0d +Block 0019 [ 81]: 5d64cc8f68a0f974 +Block 0019 [ 82]: 7dcb4f15a3b8f121 +Block 0019 [ 83]: 9367b5b9258a325b +Block 0019 [ 84]: 4de4da6d8e0866d9 +Block 0019 [ 85]: c7b3b0f3abc15394 +Block 0019 [ 86]: d33b87d1eed4a337 +Block 0019 [ 87]: b9ed2e72bb6ebea4 +Block 0019 [ 88]: 10572f65d1efbe1f +Block 0019 [ 89]: 9e7a73cc84aba6fb +Block 0019 [ 90]: a53e0e4dda2544d6 +Block 0019 [ 91]: 65c60263116b0f00 +Block 0019 [ 92]: 83c981db596413a1 +Block 0019 [ 93]: cf570ce8ecef3c30 +Block 0019 [ 94]: 2260ce8de0bfabec +Block 0019 [ 95]: 7ad56b5059153188 +Block 0019 [ 96]: 802fe70bfdf0be5c +Block 0019 [ 97]: cacfaf3c2282467d +Block 0019 [ 98]: 8c51a731d976194b +Block 0019 [ 99]: 8ff60d9c20b335b6 +Block 0019 [100]: 7d574bc7d328545a +Block 0019 [101]: aa1c5b56f88145dd +Block 0019 [102]: a488018cf5b62cd4 +Block 0019 [103]: ccd5645cf5740f5a +Block 0019 [104]: 704c1487b8459aa3 +Block 0019 [105]: 01c90b93b0ec25f7 +Block 0019 [106]: 41bd7eb3eb05c641 +Block 0019 [107]: 49c7afa99bb7c26c +Block 0019 [108]: 9d20a21a25836732 +Block 0019 [109]: 463ce6f1868c2f65 +Block 0019 [110]: e4f900a4886c99f0 +Block 0019 [111]: ee60e1befabcb60e +Block 0019 [112]: 0f7b00260ee93605 +Block 0019 [113]: e42b603722eda7d4 +Block 0019 [114]: e7a6276083514d86 +Block 0019 [115]: 02c2b63554903e2c +Block 0019 [116]: 4f859183eddd47dd +Block 0019 [117]: 0f03d0c14a6dc8d6 +Block 0019 [118]: 6dccfeb204bb0ca6 +Block 0019 [119]: b81012e04b46c739 +Block 0019 [120]: 6ae65826188c494f +Block 0019 [121]: 5f1d0ccc8cc57df8 +Block 0019 [122]: 99a54746e5107aaa +Block 0019 [123]: ca505c81f9fa3408 +Block 0019 [124]: c6a0cd042b95a9c7 +Block 0019 [125]: 36249fc5a945bd11 +Block 0019 [126]: bd2b9f7b8007a925 +Block 0019 [127]: bd6acb937aa3d609 +Block 0020 [ 0]: 93e99e1a4d5cafe6 +Block 0020 [ 1]: a72d7a8f6c8bd7b1 +Block 0020 [ 2]: 2e3721ed3f80e3a3 +Block 0020 [ 3]: 67d1c3ab3ca8fb8c +Block 0020 [ 4]: 58473a4fb39b5fc8 +Block 0020 [ 5]: baacddb76a1ec395 +Block 0020 [ 6]: 352536841d5ec4c2 +Block 0020 [ 7]: fcdffbff05cbedc8 +Block 0020 [ 8]: 8d714be4151cd6c6 +Block 0020 [ 9]: dfecaef9c28affba +Block 0020 [ 10]: a7858f9938883a19 +Block 0020 [ 11]: e4c53a0816a41501 +Block 0020 [ 12]: 377d5cf1a6986c84 +Block 0020 [ 13]: a9ac07e1b5a080e9 +Block 0020 [ 14]: ae99f8c51cd373ec +Block 0020 [ 15]: 12384a0487d433fc +Block 0020 [ 16]: 4698f7ce1fa3b1b0 +Block 0020 [ 17]: 97244a2a1f70a34b +Block 0020 [ 18]: 66be91d82e66baed +Block 0020 [ 19]: 50082984074633db +Block 0020 [ 20]: 78790f2200af5109 +Block 0020 [ 21]: 9cdbb17e403ff77d +Block 0020 [ 22]: 6c7093dcf04ec559 +Block 0020 [ 23]: da5a75b7609646c9 +Block 0020 [ 24]: 9891ed3d657a93a2 +Block 0020 [ 25]: 6633e0030e2ccbaa +Block 0020 [ 26]: ac54b0cae8689083 +Block 0020 [ 27]: 5ca70788548dc642 +Block 0020 [ 28]: 4ef57fc92ba214e2 +Block 0020 [ 29]: 63c98636e210fea3 +Block 0020 [ 30]: 30a067f161164299 +Block 0020 [ 31]: 3a90bc7c0aab6dcb +Block 0020 [ 32]: 22d0b830145dd692 +Block 0020 [ 33]: 58eb216edaf79a23 +Block 0020 [ 34]: 761a26319013323c +Block 0020 [ 35]: 3faa99cd9bfa1a7a +Block 0020 [ 36]: 39f41dd6dbd06fa3 +Block 0020 [ 37]: 5afed9b5a2b82ca5 +Block 0020 [ 38]: 9c443f55e47693d1 +Block 0020 [ 39]: a473bda54f0dc5f6 +Block 0020 [ 40]: 1e395aa2ff689e85 +Block 0020 [ 41]: 849554a9fa1f5be3 +Block 0020 [ 42]: 5c4eac11a2154c7a +Block 0020 [ 43]: 20ff6540e40a983e +Block 0020 [ 44]: 3d3d4e80e458026d +Block 0020 [ 45]: 0522d503f1d01502 +Block 0020 [ 46]: 84baad09aa6b20dc +Block 0020 [ 47]: a106f6f61dcf6dbe +Block 0020 [ 48]: d9d379be17e5967a +Block 0020 [ 49]: f185e3a9bb50534f +Block 0020 [ 50]: 3da8b9f6d098a6b8 +Block 0020 [ 51]: 6e6f730ea70d8786 +Block 0020 [ 52]: 81b1e83fe22360b9 +Block 0020 [ 53]: 86dac8a4879d9fb5 +Block 0020 [ 54]: 45af3825912fc730 +Block 0020 [ 55]: f1a9b71aca4f6551 +Block 0020 [ 56]: e1d9b026f0b7938a +Block 0020 [ 57]: 8df5dd6c6294fc4a +Block 0020 [ 58]: 4e80499d795899b6 +Block 0020 [ 59]: 12dfd949141111a5 +Block 0020 [ 60]: 3c9ffe57f82daf39 +Block 0020 [ 61]: 9a7f1c23364f5009 +Block 0020 [ 62]: 186a6ada368e4893 +Block 0020 [ 63]: 0a17d3a733979d36 +Block 0020 [ 64]: 4f5aa0f6fe22c3c2 +Block 0020 [ 65]: 86ec04d35b55a87c +Block 0020 [ 66]: 0a388fa14d9e6216 +Block 0020 [ 67]: a7246e7258fab3d4 +Block 0020 [ 68]: b97873950381dbf3 +Block 0020 [ 69]: a89a63ec31e7cd17 +Block 0020 [ 70]: 974570cf18ddf858 +Block 0020 [ 71]: e69fcff456743df7 +Block 0020 [ 72]: 7270cd2d21b3fe4f +Block 0020 [ 73]: 5dd9c708a90939c9 +Block 0020 [ 74]: 4f0a8e1d1c27911b +Block 0020 [ 75]: f2956630ced19a12 +Block 0020 [ 76]: 8c26559e9f4aeeb3 +Block 0020 [ 77]: 832bd56ed44df813 +Block 0020 [ 78]: a0a56833974fbd01 +Block 0020 [ 79]: 906d7fe71992e65b +Block 0020 [ 80]: d4c217803f3a7716 +Block 0020 [ 81]: dc1a97ad52f78526 +Block 0020 [ 82]: 582c9767fdda19c9 +Block 0020 [ 83]: ce76b52dc1bf15e5 +Block 0020 [ 84]: 0268d969d029150a +Block 0020 [ 85]: 88052230b7458333 +Block 0020 [ 86]: 5e1f7b9ba31b1333 +Block 0020 [ 87]: 8242632c3b0864d5 +Block 0020 [ 88]: 0cd8f1f8f00971ca +Block 0020 [ 89]: bd962d94ea033a5c +Block 0020 [ 90]: d63a1b79c3e6242b +Block 0020 [ 91]: 01a22d486e6b8e9c +Block 0020 [ 92]: a661c99fa0781484 +Block 0020 [ 93]: 1113254c08f73e66 +Block 0020 [ 94]: 6ae7da400d7b7dfa +Block 0020 [ 95]: 6c0b3a4352aae071 +Block 0020 [ 96]: 9b28401625f225a3 +Block 0020 [ 97]: 244431aaaa2ef136 +Block 0020 [ 98]: 6789a61760180eb2 +Block 0020 [ 99]: 2bfb1ebfd7ff7106 +Block 0020 [100]: 1cbce3dbe1abe62a +Block 0020 [101]: 0a6ff21405d9f53a +Block 0020 [102]: ee640dd0cc788bf6 +Block 0020 [103]: ca888e3c4fd1b3c9 +Block 0020 [104]: e8d377e280f8f3f4 +Block 0020 [105]: 523230c4f5a953ef +Block 0020 [106]: abfa551596ebb0b4 +Block 0020 [107]: 2e0410edfcd22b5d +Block 0020 [108]: ef0dbab28d43cbdd +Block 0020 [109]: 2eff15435fab9442 +Block 0020 [110]: 0457c09ddbfedefc +Block 0020 [111]: b80cf1f200f6e482 +Block 0020 [112]: 7fe4d532644492df +Block 0020 [113]: 05bea3f2cbcfb741 +Block 0020 [114]: 72819b801a6ffbe8 +Block 0020 [115]: 71ddf2972b276d32 +Block 0020 [116]: 4ecdc15a724bb226 +Block 0020 [117]: ec507010237304a5 +Block 0020 [118]: 2448b19e22bd07a3 +Block 0020 [119]: 0897f27fd48afee3 +Block 0020 [120]: 4cd72010a43a8c50 +Block 0020 [121]: 75ab73a21d166ef1 +Block 0020 [122]: c339bd901702475f +Block 0020 [123]: 617029f43a64733b +Block 0020 [124]: fefec09ffe51f09b +Block 0020 [125]: d6758bc1df4e59de +Block 0020 [126]: 129f67a4801e5ee8 +Block 0020 [127]: be78463817131abc +Block 0021 [ 0]: e9e21481f3ee3f3a +Block 0021 [ 1]: fed52a84c085c6ed +Block 0021 [ 2]: 709f85b64e624464 +Block 0021 [ 3]: b3505f6446a9c658 +Block 0021 [ 4]: 56e6bbc2de2b8686 +Block 0021 [ 5]: a01832cc4d381458 +Block 0021 [ 6]: 28792d5e35039a14 +Block 0021 [ 7]: b68293379e015981 +Block 0021 [ 8]: d91a438da9e8148f +Block 0021 [ 9]: f284b0068ccbb947 +Block 0021 [ 10]: d82aff158b7ff636 +Block 0021 [ 11]: 62453db3456f56a9 +Block 0021 [ 12]: fb9be58c6e337392 +Block 0021 [ 13]: f15f76741214a579 +Block 0021 [ 14]: 89040978229c8229 +Block 0021 [ 15]: 445a51444b4ed6d2 +Block 0021 [ 16]: 0c2016bcdd4444f8 +Block 0021 [ 17]: cc58c2e1f7a8ef74 +Block 0021 [ 18]: c56685d74767ab8d +Block 0021 [ 19]: 05b0ce7ea4729d75 +Block 0021 [ 20]: c2679824b11d3a7b +Block 0021 [ 21]: e530c3134cb491ec +Block 0021 [ 22]: a1d54a6ff8e08c8c +Block 0021 [ 23]: 3723a2fec2faf94a +Block 0021 [ 24]: 8be73a3427edb4ff +Block 0021 [ 25]: e23b14038a2cdc8d +Block 0021 [ 26]: 23f92fec3c845d10 +Block 0021 [ 27]: 62dc4b7f7fe4baff +Block 0021 [ 28]: dfa4860130a123d8 +Block 0021 [ 29]: 41e6014b50bda4a2 +Block 0021 [ 30]: b742c21808987bc7 +Block 0021 [ 31]: ce3351e6589dfa12 +Block 0021 [ 32]: 1b107becc66f8cc8 +Block 0021 [ 33]: 7c1b0a560d8d31dd +Block 0021 [ 34]: fb90ae2933aa6acd +Block 0021 [ 35]: 240d3e273b67cb83 +Block 0021 [ 36]: ffc9b0b54f41adc7 +Block 0021 [ 37]: ad002fb0bb2adf07 +Block 0021 [ 38]: af1393d8bee411e8 +Block 0021 [ 39]: c19215172044891d +Block 0021 [ 40]: e65121884cf94253 +Block 0021 [ 41]: 2768d775293609b5 +Block 0021 [ 42]: 1fc4a96085da417b +Block 0021 [ 43]: 5b1ea60d366ddb87 +Block 0021 [ 44]: 588eeca5735e0d4d +Block 0021 [ 45]: 13b5eebb92686954 +Block 0021 [ 46]: 0f268f398fa1d4f7 +Block 0021 [ 47]: b2418155a9b0bb20 +Block 0021 [ 48]: 858e8cd90b227b5c +Block 0021 [ 49]: 6edb7199a0bb2d89 +Block 0021 [ 50]: 2d49d5351079c672 +Block 0021 [ 51]: b5c2cd06e4f80951 +Block 0021 [ 52]: 107e74d83f7d4b69 +Block 0021 [ 53]: 4831e86b26067716 +Block 0021 [ 54]: e24aa23186ef628b +Block 0021 [ 55]: 99cd343ea5a67ac0 +Block 0021 [ 56]: ffb7d321efcf243f +Block 0021 [ 57]: 1d6ac055a62ef2fa +Block 0021 [ 58]: 4c87aa50ec37d94e +Block 0021 [ 59]: 08c40682ba554409 +Block 0021 [ 60]: f00e40bf4a8d090a +Block 0021 [ 61]: ad5bf9861e7832c5 +Block 0021 [ 62]: cdf5453220419e2c +Block 0021 [ 63]: 5e035115961ff553 +Block 0021 [ 64]: ac014e59931b1719 +Block 0021 [ 65]: 84d65f93135d21b5 +Block 0021 [ 66]: 2d96485bd6dcf756 +Block 0021 [ 67]: f2cc93cb5dcd9f02 +Block 0021 [ 68]: b6f93e1c657a780e +Block 0021 [ 69]: 5f81025581879599 +Block 0021 [ 70]: 9e3102b71c46f3b8 +Block 0021 [ 71]: 828d1a2f8bc61193 +Block 0021 [ 72]: a461cbeb81445a3b +Block 0021 [ 73]: f2ed387337c2b77a +Block 0021 [ 74]: 3466edf9fd5c7475 +Block 0021 [ 75]: 19015d8ff2e0668e +Block 0021 [ 76]: 1a595c4a11abf791 +Block 0021 [ 77]: b00ca0d08cea35f2 +Block 0021 [ 78]: 86f1738ddd5f5c7f +Block 0021 [ 79]: 98a41e9eac5e201a +Block 0021 [ 80]: 315f0615eace01ec +Block 0021 [ 81]: 67ef04d09e49d1f9 +Block 0021 [ 82]: 7c95edab62fb113c +Block 0021 [ 83]: f258ea5ffde8eeae +Block 0021 [ 84]: 2c0ca0a6f3de727a +Block 0021 [ 85]: adef8be4987599ee +Block 0021 [ 86]: acd4da447f9fb36d +Block 0021 [ 87]: c7442fac27ee58f2 +Block 0021 [ 88]: 63ef62153ec0219f +Block 0021 [ 89]: 5912c663cee52508 +Block 0021 [ 90]: 43b80d1f08e25858 +Block 0021 [ 91]: b11d841a93c9ab57 +Block 0021 [ 92]: 573381ecc2746f28 +Block 0021 [ 93]: da95a423b8aaa3f6 +Block 0021 [ 94]: a74baf9b9b9cd1d6 +Block 0021 [ 95]: d3bdb02257e0ead2 +Block 0021 [ 96]: de9a1d8345598394 +Block 0021 [ 97]: 2c520473e0b78004 +Block 0021 [ 98]: 2b45c427d526d9f7 +Block 0021 [ 99]: 5c42be040a4bcb6d +Block 0021 [100]: 732d0f4b457582cb +Block 0021 [101]: 800260cc6bc9e2b6 +Block 0021 [102]: bfdee932c42edd4a +Block 0021 [103]: ca96276597473186 +Block 0021 [104]: 0f7244fcb34b528e +Block 0021 [105]: 7218c8c434ecdb4c +Block 0021 [106]: 745223365be6f238 +Block 0021 [107]: 2240cdda4143f9d1 +Block 0021 [108]: 683ae21c2e68a835 +Block 0021 [109]: f4d8be8f482bc078 +Block 0021 [110]: aade23a2859475a0 +Block 0021 [111]: 7ef8552d415107b4 +Block 0021 [112]: 50b6f85bde4b95d5 +Block 0021 [113]: 72c68fd8083bdb4b +Block 0021 [114]: 8430408343777d38 +Block 0021 [115]: d531368e35fa0bfc +Block 0021 [116]: b838e6201bccf0ca +Block 0021 [117]: 48c2bfb75a462bd6 +Block 0021 [118]: c33044442c9b393f +Block 0021 [119]: e474e5d7d70d880d +Block 0021 [120]: 4dfe1dc828adec32 +Block 0021 [121]: 3ef49af889009bc3 +Block 0021 [122]: cc2489247a2514e0 +Block 0021 [123]: 646482202c13e4ae +Block 0021 [124]: a49464d18f5e58ba +Block 0021 [125]: d6590167ad99694a +Block 0021 [126]: 41b6882b4cb13285 +Block 0021 [127]: f44b1ce4e610ff1d +Block 0022 [ 0]: 10516fe48bd992d6 +Block 0022 [ 1]: 6e80ad662a5249a0 +Block 0022 [ 2]: 9e4c06f4c020cfd2 +Block 0022 [ 3]: 61c51d3b26043155 +Block 0022 [ 4]: a6e8e47d334b4620 +Block 0022 [ 5]: 7103ec6a7b808730 +Block 0022 [ 6]: ab7207bd00414df1 +Block 0022 [ 7]: fd847b3057de9efa +Block 0022 [ 8]: 2fd0a594818276a8 +Block 0022 [ 9]: 708eee6a6bad30fd +Block 0022 [ 10]: 955bf28de3f535dd +Block 0022 [ 11]: 6d002962ec0c3b62 +Block 0022 [ 12]: ed3789bea8e1cb91 +Block 0022 [ 13]: cec3c50996e4d7a5 +Block 0022 [ 14]: 99a41b50ca1ed0a6 +Block 0022 [ 15]: 160e0ab9a0a4bc11 +Block 0022 [ 16]: 25bdb628732f1036 +Block 0022 [ 17]: f83b95562f875270 +Block 0022 [ 18]: e1161c3e5e33ae07 +Block 0022 [ 19]: e0d2924a83aa3a87 +Block 0022 [ 20]: c17673d548c6b215 +Block 0022 [ 21]: 5157a65c923beb29 +Block 0022 [ 22]: e94d6cbd03cda367 +Block 0022 [ 23]: 35d5aa15e62a946c +Block 0022 [ 24]: ec42ddc3f35fd651 +Block 0022 [ 25]: 1f4467ff293980ea +Block 0022 [ 26]: fd1b51fd8670f1c4 +Block 0022 [ 27]: eb484dd78071a143 +Block 0022 [ 28]: 8ac6e5fc54ab2f6b +Block 0022 [ 29]: 64463e0b03e7b07d +Block 0022 [ 30]: 0640bcfd3d78dc7d +Block 0022 [ 31]: f83e88ee65da93ea +Block 0022 [ 32]: d6df547213734546 +Block 0022 [ 33]: f029efdf2eaada54 +Block 0022 [ 34]: f785a308b8742c3f +Block 0022 [ 35]: ab6fb9b561569ae2 +Block 0022 [ 36]: c1bfad8d27e5b694 +Block 0022 [ 37]: 23bc68913631aa36 +Block 0022 [ 38]: 93f6b948c9fdef23 +Block 0022 [ 39]: 5edbee1a84d1f0a7 +Block 0022 [ 40]: 5bedf33c32a8665a +Block 0022 [ 41]: aa5a5d90dcac3d50 +Block 0022 [ 42]: eafcf9c119242b16 +Block 0022 [ 43]: e0e8518fcbe1abaf +Block 0022 [ 44]: 1cac6136bba6de36 +Block 0022 [ 45]: 9d83d72eec3e7108 +Block 0022 [ 46]: 3ffafb300b518e01 +Block 0022 [ 47]: 6fa4d3a312908d27 +Block 0022 [ 48]: 142c69037840cd39 +Block 0022 [ 49]: 280e1c649ba0260a +Block 0022 [ 50]: 55dc74836fe074df +Block 0022 [ 51]: 9703e674a4721656 +Block 0022 [ 52]: c069c595578ce657 +Block 0022 [ 53]: ac365998563c1143 +Block 0022 [ 54]: c85611d8d5d27e34 +Block 0022 [ 55]: ba4c934267f56ef5 +Block 0022 [ 56]: 103b25f8f428f4ce +Block 0022 [ 57]: e06848354bf96054 +Block 0022 [ 58]: aa5e6ba9c44c7a4b +Block 0022 [ 59]: 978bcbd3eede5e10 +Block 0022 [ 60]: 626d30eac9c66050 +Block 0022 [ 61]: 7479182c697b1ec6 +Block 0022 [ 62]: c1f34e2bdcdb7717 +Block 0022 [ 63]: ab17a27bd9e11520 +Block 0022 [ 64]: df9389a6153b5408 +Block 0022 [ 65]: 46a5ea923a45aabe +Block 0022 [ 66]: b8adeb3d2292be64 +Block 0022 [ 67]: 11e599917a19aee6 +Block 0022 [ 68]: 623ec355fc76dd16 +Block 0022 [ 69]: a51ac58cfe62691b +Block 0022 [ 70]: 2bd1c93b73345e7a +Block 0022 [ 71]: 0616e323173f8d81 +Block 0022 [ 72]: 2c3a81db077e2fba +Block 0022 [ 73]: cc66b376b64785d8 +Block 0022 [ 74]: 200d21fcf32e37ea +Block 0022 [ 75]: 13fef3f2b68463a0 +Block 0022 [ 76]: 28733ed577c7f7a5 +Block 0022 [ 77]: cfb7a1fd8a7da043 +Block 0022 [ 78]: 8502c5188ec6f568 +Block 0022 [ 79]: fff355982c5d5a35 +Block 0022 [ 80]: 3a2c65bd989cd16a +Block 0022 [ 81]: ac5d14d1805f8b4b +Block 0022 [ 82]: 9383626d4a1c5102 +Block 0022 [ 83]: 9803d583927d0984 +Block 0022 [ 84]: 498897d793f168c2 +Block 0022 [ 85]: 10251e23be6ac284 +Block 0022 [ 86]: 87919d5d2320d30d +Block 0022 [ 87]: 2f14689f30ea0eb8 +Block 0022 [ 88]: cb59ab5a48c10a12 +Block 0022 [ 89]: caaa6b45434178ca +Block 0022 [ 90]: ed5eae615338303e +Block 0022 [ 91]: 322586e5fc7a210c +Block 0022 [ 92]: c3bfb2fa7b1d8c70 +Block 0022 [ 93]: ed9cd80167917df4 +Block 0022 [ 94]: 49a1812cfb438ffa +Block 0022 [ 95]: 19f731eb01464eaa +Block 0022 [ 96]: 0369b5bddf4a867f +Block 0022 [ 97]: 7bfdd90aa04766e1 +Block 0022 [ 98]: 06a00edab882cc0c +Block 0022 [ 99]: 26d2c21ae47a0a3e +Block 0022 [100]: 673148ac664b927d +Block 0022 [101]: 5371f1dacb6189ab +Block 0022 [102]: dfd2dd883cf0ebf3 +Block 0022 [103]: 3dd89111bf1405b7 +Block 0022 [104]: 87d8e5833a8a4d8a +Block 0022 [105]: c28cc9f25cc89887 +Block 0022 [106]: 94f708bddbd46d36 +Block 0022 [107]: ba69d4f56b3b6f00 +Block 0022 [108]: 8d2d9679e0e99180 +Block 0022 [109]: 38c61e2d8f3c3a6c +Block 0022 [110]: 42fca3d24f84e642 +Block 0022 [111]: 5d59762e5a3944ff +Block 0022 [112]: 8ccf9047384acd68 +Block 0022 [113]: 6a0bd116f828077a +Block 0022 [114]: e807ea99cb1bc3e1 +Block 0022 [115]: 600c98e9e25fa233 +Block 0022 [116]: bee422c9314529e4 +Block 0022 [117]: 137d1cdcdcb07e6a +Block 0022 [118]: 9064f3eccd37e15e +Block 0022 [119]: 65a371f3bc67a32c +Block 0022 [120]: 8a30ca0e610902a2 +Block 0022 [121]: 7fe6c6b430c1d9a9 +Block 0022 [122]: 23e3a862121bac8e +Block 0022 [123]: 9d11401f5b21ef70 +Block 0022 [124]: 7fe3e8254eb4b904 +Block 0022 [125]: 8fd618e2b06951c9 +Block 0022 [126]: f0f4543eb4268123 +Block 0022 [127]: f82a3b4cbb64e6ff +Block 0023 [ 0]: 51b8f26d399c69bc +Block 0023 [ 1]: c071fa67c98eb6ab +Block 0023 [ 2]: cdab8aaa7131c6c1 +Block 0023 [ 3]: 75492b8715e5cf49 +Block 0023 [ 4]: c5b2b58f9b1a600d +Block 0023 [ 5]: a72ab04580d73772 +Block 0023 [ 6]: a9118d6a68c5b451 +Block 0023 [ 7]: 1a43b68a96e27b34 +Block 0023 [ 8]: bfc42018edd2ad91 +Block 0023 [ 9]: 5d1a6a93d9cd45cc +Block 0023 [ 10]: 3389bc0ca66422ab +Block 0023 [ 11]: d819b30b62996b9b +Block 0023 [ 12]: fca4eee794dcb19a +Block 0023 [ 13]: 824c758dafa29d8e +Block 0023 [ 14]: 96acaefa149817f9 +Block 0023 [ 15]: 554c904f393d2266 +Block 0023 [ 16]: ce8f97770d672269 +Block 0023 [ 17]: 8c643e7b155b1645 +Block 0023 [ 18]: 1e921a6839e64a92 +Block 0023 [ 19]: 82c49b54962e5525 +Block 0023 [ 20]: c805f82c3c20e36d +Block 0023 [ 21]: 69c9422e6d381027 +Block 0023 [ 22]: b04f13b7d1000957 +Block 0023 [ 23]: a307a1a3f4c2b044 +Block 0023 [ 24]: 111d0db7963f011f +Block 0023 [ 25]: 693d84f951fb010b +Block 0023 [ 26]: 38408ba11be93312 +Block 0023 [ 27]: 0f14c006cef1fcb2 +Block 0023 [ 28]: ebe364aeed4b3ec8 +Block 0023 [ 29]: c7712fdf99b74c7d +Block 0023 [ 30]: 01673c55e0bfdd6d +Block 0023 [ 31]: 60d075cd5efcbc0b +Block 0023 [ 32]: 647a26de4adf2227 +Block 0023 [ 33]: 585c686a2b7f32fa +Block 0023 [ 34]: 8cbc3c41b6d6fff3 +Block 0023 [ 35]: 8f101fdaf888b67e +Block 0023 [ 36]: 76df5f51b1d1a638 +Block 0023 [ 37]: f858bcc3c4e06420 +Block 0023 [ 38]: 0f72ef7a092b0a23 +Block 0023 [ 39]: 8bf7b4639413c9bd +Block 0023 [ 40]: 29a6c46f51ebe568 +Block 0023 [ 41]: a40fc18bf17b5490 +Block 0023 [ 42]: 98645e432602caca +Block 0023 [ 43]: 27f6f7eff49ede5e +Block 0023 [ 44]: 822b275c48e9d987 +Block 0023 [ 45]: bd8c451a58146d33 +Block 0023 [ 46]: cbd9150b80ba7822 +Block 0023 [ 47]: 762e616beb4ff189 +Block 0023 [ 48]: b7faabd20293c82d +Block 0023 [ 49]: c0ea5ba064106a91 +Block 0023 [ 50]: fc8d4176e1956aa3 +Block 0023 [ 51]: eef76c2a172e309d +Block 0023 [ 52]: 028b9a0678496439 +Block 0023 [ 53]: 02431190caf3229e +Block 0023 [ 54]: 93f958d07904ba5c +Block 0023 [ 55]: 7f9228bea5b3e7d3 +Block 0023 [ 56]: f7e8a67449b73db5 +Block 0023 [ 57]: e184d8d39ebfd9d7 +Block 0023 [ 58]: 458c260628950d29 +Block 0023 [ 59]: d5d59493f4f3ab49 +Block 0023 [ 60]: 52810f0d895154e6 +Block 0023 [ 61]: 48890c4359d36387 +Block 0023 [ 62]: d9ed391fc01aa28f +Block 0023 [ 63]: 7dc15dfc8848a73e +Block 0023 [ 64]: 0f5e24c089911cf7 +Block 0023 [ 65]: fb2d00b5197c5a9f +Block 0023 [ 66]: a585c2cd2050c293 +Block 0023 [ 67]: 822f77775f03bc9d +Block 0023 [ 68]: da1d24c62e225517 +Block 0023 [ 69]: c19dde644105c3f1 +Block 0023 [ 70]: e73998960ea21e02 +Block 0023 [ 71]: 18b22d33c3a507e1 +Block 0023 [ 72]: 92efaec756b407f2 +Block 0023 [ 73]: 69b5b5b9ac8e6902 +Block 0023 [ 74]: b92f44a99a2ed037 +Block 0023 [ 75]: 55c9ef9deced5f41 +Block 0023 [ 76]: adafa68c9b162398 +Block 0023 [ 77]: c81ddc531fe06ae2 +Block 0023 [ 78]: e04b242b72f95238 +Block 0023 [ 79]: 51c490474495bd78 +Block 0023 [ 80]: fb6f199815333b03 +Block 0023 [ 81]: 7112249b96f1b0e4 +Block 0023 [ 82]: 83231ce5117bcd91 +Block 0023 [ 83]: aa7e1b7fb06c7d1e +Block 0023 [ 84]: 3a2d3d8b02473340 +Block 0023 [ 85]: de732586a74d9314 +Block 0023 [ 86]: 7298cf9215c7f6b1 +Block 0023 [ 87]: 35ce550af4ddbc36 +Block 0023 [ 88]: b3030a9d8df310cc +Block 0023 [ 89]: d49daa0e515db0b6 +Block 0023 [ 90]: a408538a1a3757ce +Block 0023 [ 91]: 03cc331f9ac38ffe +Block 0023 [ 92]: 1fbe448017465116 +Block 0023 [ 93]: 53cc67fc2adf1894 +Block 0023 [ 94]: d16c84dc21a96369 +Block 0023 [ 95]: 45c1d58d1c6635cc +Block 0023 [ 96]: 3e9fdcaeb9ead4a3 +Block 0023 [ 97]: 453f5fbdb21f9e1a +Block 0023 [ 98]: 853b01fa14cffe9e +Block 0023 [ 99]: 429987c05c91ef53 +Block 0023 [100]: a2072cb67ffc5a65 +Block 0023 [101]: 37454a3792e46599 +Block 0023 [102]: 167b3dd6a5c04120 +Block 0023 [103]: 2a1f42086bfca6d1 +Block 0023 [104]: 3e13e3d094a55227 +Block 0023 [105]: 700908d898fd16de +Block 0023 [106]: b4ebced8311a6bbf +Block 0023 [107]: 4190aed4811f39c0 +Block 0023 [108]: 2a58b7961c373ac6 +Block 0023 [109]: e665ef6a1251f3c7 +Block 0023 [110]: d9add80a10d174dd +Block 0023 [111]: 90adc031a2dbf94c +Block 0023 [112]: 699c684665ad5329 +Block 0023 [113]: 872a3b6d8bbef466 +Block 0023 [114]: a20f7b5c18ce00fb +Block 0023 [115]: d07632df9d2f5403 +Block 0023 [116]: 237ac845201a666a +Block 0023 [117]: 04f4008ea14c1e58 +Block 0023 [118]: 67f8329c63fcfc8b +Block 0023 [119]: 1f2483d57a31386c +Block 0023 [120]: 9bc69c6b59e71be3 +Block 0023 [121]: 85f450aba2d1577b +Block 0023 [122]: fcb1312231908bf0 +Block 0023 [123]: 237d458ea94e6b6d +Block 0023 [124]: e49fba5fdf5c3936 +Block 0023 [125]: d2fdeee74597fb69 +Block 0023 [126]: 4928a8d471128e8b +Block 0023 [127]: 1a6082c717abd94c +Block 0024 [ 0]: 5958a22b70bf98ca +Block 0024 [ 1]: 57f117fb171d2dbd +Block 0024 [ 2]: 34312fb32bd1c304 +Block 0024 [ 3]: 8f2cd82a0db46627 +Block 0024 [ 4]: 298399822348198c +Block 0024 [ 5]: 7288500bf16998fe +Block 0024 [ 6]: dd3c003edb9de752 +Block 0024 [ 7]: fba874c3a38ab35b +Block 0024 [ 8]: 3a800e3301af7c15 +Block 0024 [ 9]: c8cccd3056b2e62a +Block 0024 [ 10]: 306cb44417a427f6 +Block 0024 [ 11]: caaf0cb8f35d653d +Block 0024 [ 12]: 4fe793dac54e868f +Block 0024 [ 13]: d52bda7f705b6301 +Block 0024 [ 14]: 82299afb64fb7cf3 +Block 0024 [ 15]: 1dd68220ead6db39 +Block 0024 [ 16]: f89c457e0b441514 +Block 0024 [ 17]: f6ed96b4cc9d62d7 +Block 0024 [ 18]: 9de2a04caa98deca +Block 0024 [ 19]: d0d9a743cdad41f1 +Block 0024 [ 20]: 092684735b3f7ed0 +Block 0024 [ 21]: ba06f39a89ddeac5 +Block 0024 [ 22]: cf5bf8b8feb52f7f +Block 0024 [ 23]: 2a1a3ebfd5664ee5 +Block 0024 [ 24]: 715c4f5c10c7df9b +Block 0024 [ 25]: 17e1625499f291ee +Block 0024 [ 26]: e42bb7eb1c580aca +Block 0024 [ 27]: e15b4ea4978bcf4e +Block 0024 [ 28]: a4ef3f981f368ac3 +Block 0024 [ 29]: dd2be60dc6fa8fe0 +Block 0024 [ 30]: 00bc12eb1460e664 +Block 0024 [ 31]: 6df456cc5c9a8e30 +Block 0024 [ 32]: 81ee03abc1b94e11 +Block 0024 [ 33]: 229eee89fa6765ba +Block 0024 [ 34]: 05c980ceda880f9e +Block 0024 [ 35]: 144fb8a0cbb32810 +Block 0024 [ 36]: 9d15ce141d201e80 +Block 0024 [ 37]: b83ba7e41fc01637 +Block 0024 [ 38]: 37418fc74877b29d +Block 0024 [ 39]: 3f539195743daba2 +Block 0024 [ 40]: 3973112b38cb695b +Block 0024 [ 41]: 690ac2df3a6e866a +Block 0024 [ 42]: b820d3887c305fda +Block 0024 [ 43]: 96398cc15455712e +Block 0024 [ 44]: 302d7154b452879a +Block 0024 [ 45]: 2a068b244898efe1 +Block 0024 [ 46]: c7f92e307cb22ece +Block 0024 [ 47]: 65360372a6062f65 +Block 0024 [ 48]: e1bb18c2e2e801b0 +Block 0024 [ 49]: 917ba27e80909276 +Block 0024 [ 50]: 893817757c7712ee +Block 0024 [ 51]: 1b8f1913ca9115ee +Block 0024 [ 52]: e66dbbc3f5b52329 +Block 0024 [ 53]: 1a3c941cab6e616a +Block 0024 [ 54]: 9c1d4791e9e03dd1 +Block 0024 [ 55]: d0bcd8855fec2860 +Block 0024 [ 56]: f4753fc9d00e3f17 +Block 0024 [ 57]: ee417f71c775107f +Block 0024 [ 58]: e5d134ad67ce823f +Block 0024 [ 59]: 73603420f330dc9b +Block 0024 [ 60]: 16cc64de47137a67 +Block 0024 [ 61]: abd7703e1a9697b4 +Block 0024 [ 62]: 9fe7e2341ea7d03a +Block 0024 [ 63]: 35e71533e92a5003 +Block 0024 [ 64]: 0cfb5d944e248005 +Block 0024 [ 65]: 0de2faf144671ca5 +Block 0024 [ 66]: 57a900216c27fa3c +Block 0024 [ 67]: 856a2968ecb60014 +Block 0024 [ 68]: ad045c92a406d6b6 +Block 0024 [ 69]: 55b8ccc11f289add +Block 0024 [ 70]: 485aa0c406a78646 +Block 0024 [ 71]: 598beecd4819c981 +Block 0024 [ 72]: 3e484b387f29eb7f +Block 0024 [ 73]: 5dffd582a0b86268 +Block 0024 [ 74]: e02bd64109d369c5 +Block 0024 [ 75]: 8ae28641db25300a +Block 0024 [ 76]: 349c098672bcacc1 +Block 0024 [ 77]: e513fedd3a71aa98 +Block 0024 [ 78]: 5b9db396f85b4b5e +Block 0024 [ 79]: c69258b2c8510a52 +Block 0024 [ 80]: 282e375ed617f67b +Block 0024 [ 81]: c7500ba4a34668cd +Block 0024 [ 82]: 096a1dc27f0d1c36 +Block 0024 [ 83]: 542bdf2ef5fab14f +Block 0024 [ 84]: eb7d48d2d0946bfb +Block 0024 [ 85]: 86cc9ba19e5d1b0a +Block 0024 [ 86]: af4ff929a67207a2 +Block 0024 [ 87]: 3b1a65ca42d52005 +Block 0024 [ 88]: 6f30cf327e92c077 +Block 0024 [ 89]: 26a74ed43084c50e +Block 0024 [ 90]: f139cd5c4604a050 +Block 0024 [ 91]: 65d1584ad83cff5d +Block 0024 [ 92]: 465ab84996ad2ad2 +Block 0024 [ 93]: 966ad44cd9213b19 +Block 0024 [ 94]: 3bb32bded3e109f1 +Block 0024 [ 95]: ec424f052913176c +Block 0024 [ 96]: d3f8b90bd9d7a44e +Block 0024 [ 97]: a57c3f3d5f7e3894 +Block 0024 [ 98]: dd295ea31e430456 +Block 0024 [ 99]: fa5d6f3c749c02b2 +Block 0024 [100]: 464ad61952defe18 +Block 0024 [101]: 35e8649acef1722f +Block 0024 [102]: ee5ae50599920a74 +Block 0024 [103]: f3824a188dde4bb6 +Block 0024 [104]: 95af191695fabeb1 +Block 0024 [105]: 303b94514b6547b8 +Block 0024 [106]: 038c732c6e2d8596 +Block 0024 [107]: f759939b268ab594 +Block 0024 [108]: a56dff1812e139bc +Block 0024 [109]: 98b71668f976ce94 +Block 0024 [110]: 6c29893f6b176e92 +Block 0024 [111]: 460d68ff632de327 +Block 0024 [112]: 87e56f61054566d3 +Block 0024 [113]: 5e40442c09947b73 +Block 0024 [114]: 8f55f37db55c1dfa +Block 0024 [115]: d6939ee647a66aea +Block 0024 [116]: ca69515ea441ad2f +Block 0024 [117]: 50ca5d2bdaff963f +Block 0024 [118]: eb78460ef25de562 +Block 0024 [119]: cbc0fd708d5c0dab +Block 0024 [120]: 66f619ea39fddc1f +Block 0024 [121]: d4446cedd28cafbb +Block 0024 [122]: 1777b81c1958776f +Block 0024 [123]: bdcabfc84292b6fe +Block 0024 [124]: 7d940c9fa0dde6bd +Block 0024 [125]: 1c177188c4335364 +Block 0024 [126]: cd9baecf1bb872ef +Block 0024 [127]: fbc047fb9b439a29 +Block 0025 [ 0]: fffb955af57af90b +Block 0025 [ 1]: e4871b8f02f26ecb +Block 0025 [ 2]: b89f59c3a5f723e6 +Block 0025 [ 3]: 6a8a73613f18f0ff +Block 0025 [ 4]: 040d4829377eb6ae +Block 0025 [ 5]: b94070732353e4d1 +Block 0025 [ 6]: fca08ebbbcdce029 +Block 0025 [ 7]: cdd7097aab05e4ab +Block 0025 [ 8]: f75a8252080cef39 +Block 0025 [ 9]: 1e961f4e04b6f7af +Block 0025 [ 10]: 0ce9670791be9695 +Block 0025 [ 11]: da78cba39e099ce9 +Block 0025 [ 12]: 3e636f44b1f40d7f +Block 0025 [ 13]: 6e37649cb5b98488 +Block 0025 [ 14]: 7fbe2099551d03d7 +Block 0025 [ 15]: 4a7a23f6d644562e +Block 0025 [ 16]: c4409c1f9e401137 +Block 0025 [ 17]: a4e562c13b8d87a1 +Block 0025 [ 18]: 1224688a119818cf +Block 0025 [ 19]: eeb1a045a905ea51 +Block 0025 [ 20]: 95a8e3c3ac0353c3 +Block 0025 [ 21]: 54678ef6109a8f3f +Block 0025 [ 22]: 97803b357d69c9b1 +Block 0025 [ 23]: 8e411ea1f50c55ba +Block 0025 [ 24]: 1d48fbcb0f4be52e +Block 0025 [ 25]: 4ea786fff3a71734 +Block 0025 [ 26]: dc2ee88f078ffbe6 +Block 0025 [ 27]: b3d61433d92e6848 +Block 0025 [ 28]: 7ebb5413bb1a23f8 +Block 0025 [ 29]: 338e907d6713761e +Block 0025 [ 30]: 612968dd685c9da2 +Block 0025 [ 31]: 64e5797faad44d22 +Block 0025 [ 32]: b1b4a32066421b11 +Block 0025 [ 33]: 7c110e3f427e61d6 +Block 0025 [ 34]: 6cd462dd0ab4293a +Block 0025 [ 35]: e4c99723248a7290 +Block 0025 [ 36]: eadfc82582c03ea0 +Block 0025 [ 37]: 129612d57eb1dfbb +Block 0025 [ 38]: 6a8862a2b2688716 +Block 0025 [ 39]: abef922090105cff +Block 0025 [ 40]: cf0f91207c4df18a +Block 0025 [ 41]: 4bda9ddc69523982 +Block 0025 [ 42]: 105980383d263220 +Block 0025 [ 43]: c4cafc2fa2a587a3 +Block 0025 [ 44]: bf50382c61e8fe19 +Block 0025 [ 45]: 692c2622e148a03e +Block 0025 [ 46]: 2a6d1d440295bcd0 +Block 0025 [ 47]: d62efe2d0f92e710 +Block 0025 [ 48]: 826da3a890c5e1e2 +Block 0025 [ 49]: 663723f1834287b5 +Block 0025 [ 50]: f46454259bead5fa +Block 0025 [ 51]: 1e1a2680b594fd39 +Block 0025 [ 52]: 52a4a56d81b88b95 +Block 0025 [ 53]: 92748b0473ce8d9f +Block 0025 [ 54]: ee6f171b385e5d19 +Block 0025 [ 55]: aacfdddac7c3f517 +Block 0025 [ 56]: 539a85613e58bf5d +Block 0025 [ 57]: 2b4cf3a7835ff74c +Block 0025 [ 58]: 45483cef811ca2e8 +Block 0025 [ 59]: c6873023ebf4778b +Block 0025 [ 60]: 9e5089ac1526d66f +Block 0025 [ 61]: 5cd34c48f407df18 +Block 0025 [ 62]: 2bac068ca9b03ef4 +Block 0025 [ 63]: 915a96c8e754fd66 +Block 0025 [ 64]: cf074a9cc0a6b214 +Block 0025 [ 65]: fb1fd47a829329e5 +Block 0025 [ 66]: b580c0a7affee031 +Block 0025 [ 67]: b3370d02e6d57513 +Block 0025 [ 68]: c88763d6f3f26905 +Block 0025 [ 69]: 824015be540107e8 +Block 0025 [ 70]: 974852db1cc7cfd9 +Block 0025 [ 71]: c0c548f28c6acdaa +Block 0025 [ 72]: 74c0e45d099d474c +Block 0025 [ 73]: e01c4e0b64b77834 +Block 0025 [ 74]: 0533c14d980c6add +Block 0025 [ 75]: 7931a36cd22d2a8b +Block 0025 [ 76]: 647eed006a3fc885 +Block 0025 [ 77]: 88940919b5005bf1 +Block 0025 [ 78]: 1332011b4b4e24c7 +Block 0025 [ 79]: bd4d710d4b931591 +Block 0025 [ 80]: 3d89c84970ea6107 +Block 0025 [ 81]: b04c056f00571ca2 +Block 0025 [ 82]: d0bd666534c0d44f +Block 0025 [ 83]: 9f1164e75cf94894 +Block 0025 [ 84]: c6c56ddd0f5f4493 +Block 0025 [ 85]: 1ed747a48ee8f87d +Block 0025 [ 86]: 9cac80352e623c0a +Block 0025 [ 87]: cbdea7a2df6bfb4e +Block 0025 [ 88]: 3d6ecb1d982994e9 +Block 0025 [ 89]: d4c792872c764c15 +Block 0025 [ 90]: 79faf69807727613 +Block 0025 [ 91]: 1c405ccc2f32aa26 +Block 0025 [ 92]: e96dc0bfec0ffe37 +Block 0025 [ 93]: 1ddcf2a5a9a12c0c +Block 0025 [ 94]: 3b21043c19368275 +Block 0025 [ 95]: 58c025bc65af4427 +Block 0025 [ 96]: daa87500eb620a38 +Block 0025 [ 97]: 3790f46f2d01a114 +Block 0025 [ 98]: 087569d8c107b1d9 +Block 0025 [ 99]: 10f1119e07b0104a +Block 0025 [100]: 981b39ea26ef6710 +Block 0025 [101]: a40aca9a880d40c2 +Block 0025 [102]: 276ad3400db54205 +Block 0025 [103]: be927efd5bb6802f +Block 0025 [104]: 6b1117aad52e6712 +Block 0025 [105]: e3869b2533e5096b +Block 0025 [106]: 710997b71098645e +Block 0025 [107]: 95dd77a863f9a024 +Block 0025 [108]: 6c76d5d9e63fc207 +Block 0025 [109]: dfcf1703e32fbfa5 +Block 0025 [110]: 2983d700ab45e0a3 +Block 0025 [111]: c841bfe21f9eb608 +Block 0025 [112]: 72d9ff6681ba6a74 +Block 0025 [113]: 711238b8a95c3e82 +Block 0025 [114]: 272454ca5092cf79 +Block 0025 [115]: 5f4bcda7442c1e30 +Block 0025 [116]: b66944c097396096 +Block 0025 [117]: ed46ed6d53e1f5db +Block 0025 [118]: b36d5660ece1b88b +Block 0025 [119]: 88e858ca46e2305e +Block 0025 [120]: 11108330154b20c1 +Block 0025 [121]: ae10945de50396a1 +Block 0025 [122]: 00601fe44af3dc39 +Block 0025 [123]: cded1287f7aa43cd +Block 0025 [124]: 6125ca775f4cfc39 +Block 0025 [125]: 3706dc4eb6d80eb1 +Block 0025 [126]: 5ce8104cd2e618f5 +Block 0025 [127]: 7f16a3db08aab211 +Block 0026 [ 0]: 3b6d558b7fccdd53 +Block 0026 [ 1]: a544c949c207d436 +Block 0026 [ 2]: 4f05ca25a912bec0 +Block 0026 [ 3]: a6b6f42c94bc91f3 +Block 0026 [ 4]: 4c4eb732113ce6fe +Block 0026 [ 5]: 6afec4690e064a81 +Block 0026 [ 6]: a9323369420d2f5b +Block 0026 [ 7]: 96c7bc19f69257a9 +Block 0026 [ 8]: 9d7db71bd4074103 +Block 0026 [ 9]: 88d2a1c41a6ce81a +Block 0026 [ 10]: e40db3394f14b5a5 +Block 0026 [ 11]: a967fefac9d7e8a3 +Block 0026 [ 12]: 2fd7352e854b1206 +Block 0026 [ 13]: be2e6a28eab6128d +Block 0026 [ 14]: a9729098c0f878d9 +Block 0026 [ 15]: 0e1b105835094b57 +Block 0026 [ 16]: f4f8507148d7f0cc +Block 0026 [ 17]: 35847eb6b06e585b +Block 0026 [ 18]: fe0df436b8c4df7c +Block 0026 [ 19]: b54dfc1bddb831e0 +Block 0026 [ 20]: 94264483b7a844c8 +Block 0026 [ 21]: dcb003a6f54fdf81 +Block 0026 [ 22]: ae895c4749947d07 +Block 0026 [ 23]: bed43306a1331e1e +Block 0026 [ 24]: 2a4edc085592e99f +Block 0026 [ 25]: 1d06dca4f7fb434e +Block 0026 [ 26]: e11459b38294321c +Block 0026 [ 27]: 09649d2543a5580d +Block 0026 [ 28]: a5b7173e47b3406c +Block 0026 [ 29]: e7cf3f358b5ab1f1 +Block 0026 [ 30]: 8aff441ef512a931 +Block 0026 [ 31]: 7be19ef04fdc3d2c +Block 0026 [ 32]: c81d7667a07aaa9e +Block 0026 [ 33]: fe4823fbe0bb8a55 +Block 0026 [ 34]: f73b8a0ac6af9b7c +Block 0026 [ 35]: 1ca6b1c30eabb8d3 +Block 0026 [ 36]: b0b4bcc8c37d93d7 +Block 0026 [ 37]: 72469952f139ff3a +Block 0026 [ 38]: d40d54c30124b2ed +Block 0026 [ 39]: d84403e6a4c3e34e +Block 0026 [ 40]: d93aaad4d2527f83 +Block 0026 [ 41]: f1f949a66f3a18d7 +Block 0026 [ 42]: c7d30c69a5f5c6cf +Block 0026 [ 43]: 76ae6fdef0d1071b +Block 0026 [ 44]: ab5c585cdfcb6660 +Block 0026 [ 45]: 75b33764c05e3c1c +Block 0026 [ 46]: 8d2f1ddc99b4d99b +Block 0026 [ 47]: 9132c9b1d5e1e4e3 +Block 0026 [ 48]: 9c95a9501e691354 +Block 0026 [ 49]: a1c0ea6541164f7e +Block 0026 [ 50]: 1a49c52ea7f4184d +Block 0026 [ 51]: f838de5180921654 +Block 0026 [ 52]: f2e2dff13e56428d +Block 0026 [ 53]: 71a8509caea45532 +Block 0026 [ 54]: 4e0da0f5e8cbdb8d +Block 0026 [ 55]: d39178911c31f23d +Block 0026 [ 56]: 4d059db4fe3d169c +Block 0026 [ 57]: 26587aa03357b26c +Block 0026 [ 58]: a47c0cf82a6040d3 +Block 0026 [ 59]: a07bf1b71f367b38 +Block 0026 [ 60]: 2b342ef89c62082b +Block 0026 [ 61]: a3cc586fb2337cab +Block 0026 [ 62]: 7eefd8d0cd7df4c2 +Block 0026 [ 63]: 52afa96dbe082021 +Block 0026 [ 64]: 30f55321f2854f92 +Block 0026 [ 65]: 115d29bd6dece5fd +Block 0026 [ 66]: 1d0f141ad5d8719b +Block 0026 [ 67]: 4afbed23cc14e230 +Block 0026 [ 68]: 30ec5385851eb75f +Block 0026 [ 69]: f942b6889c0db151 +Block 0026 [ 70]: 0ce65f36b9fc6e1e +Block 0026 [ 71]: ac1adbd125d68e79 +Block 0026 [ 72]: b68d2c6c2fbe117a +Block 0026 [ 73]: 4232b02967e3bcbf +Block 0026 [ 74]: 8ef379e8c5e55b42 +Block 0026 [ 75]: d4ed00451596a830 +Block 0026 [ 76]: bd35cd14d571e4d7 +Block 0026 [ 77]: 30bd60dfda09b19e +Block 0026 [ 78]: cdfac1b883b76655 +Block 0026 [ 79]: e3d86b100591fb9d +Block 0026 [ 80]: 59ac24671e7d91af +Block 0026 [ 81]: 1025f27f0920055d +Block 0026 [ 82]: 5c02dce58a113ddb +Block 0026 [ 83]: acea7e212c79dee5 +Block 0026 [ 84]: 23d9b815b356c83b +Block 0026 [ 85]: aaa4b234d49dad9e +Block 0026 [ 86]: 444d0ee609380e75 +Block 0026 [ 87]: 654226c4b8f021d2 +Block 0026 [ 88]: 8a35cd5fd6e1f1ab +Block 0026 [ 89]: 862ed14517163100 +Block 0026 [ 90]: 84c0af64eecbf39c +Block 0026 [ 91]: 7e0e4dda300a5a06 +Block 0026 [ 92]: 3d9c7f8c3f41b725 +Block 0026 [ 93]: a35832a7eed21f0a +Block 0026 [ 94]: 0e6bd91ab1c37748 +Block 0026 [ 95]: 3b3f02996786041a +Block 0026 [ 96]: ca39b69b0189da7b +Block 0026 [ 97]: 85685752f7f2a6ee +Block 0026 [ 98]: 8083b8fef5bce9e7 +Block 0026 [ 99]: a04409fb917324af +Block 0026 [100]: 5149daf90529e164 +Block 0026 [101]: fd670942829b7d61 +Block 0026 [102]: 044c3084bb345c6d +Block 0026 [103]: 7bc15cb8f326fb8d +Block 0026 [104]: 9d5fed35368ce865 +Block 0026 [105]: 032b26359ab11c29 +Block 0026 [106]: dde5da90ee01852e +Block 0026 [107]: dfde2792e941c242 +Block 0026 [108]: 45a07e3678367b66 +Block 0026 [109]: e4edb6bde64b0e64 +Block 0026 [110]: 1286bd9d9c15602e +Block 0026 [111]: 1a6f9332b8991cd6 +Block 0026 [112]: 51462feab66fe436 +Block 0026 [113]: 41b7a2049b1d12aa +Block 0026 [114]: 957d14cf0a3493b5 +Block 0026 [115]: b6babfaffaa0bbd5 +Block 0026 [116]: d0e64434099d290b +Block 0026 [117]: 98fbc6565c59cd02 +Block 0026 [118]: deb0588aea27fbba +Block 0026 [119]: 468f0be17af8d3ff +Block 0026 [120]: 94c95df708a119cc +Block 0026 [121]: 6feeb4e265a0b9c9 +Block 0026 [122]: 60e9bdaed056d95e +Block 0026 [123]: feaee97d93a661b5 +Block 0026 [124]: 1a9af81d81a90039 +Block 0026 [125]: 67d6562cf870264e +Block 0026 [126]: 0879f3db8106fff8 +Block 0026 [127]: c43a9b2adb848626 +Block 0027 [ 0]: e31278b9d98ae491 +Block 0027 [ 1]: d91a581dc45b28ca +Block 0027 [ 2]: e538e13966ffa8f6 +Block 0027 [ 3]: ac33db0c5c683ccf +Block 0027 [ 4]: 0a2cdded2dd669be +Block 0027 [ 5]: 91159d8febc616a2 +Block 0027 [ 6]: 491e41276e638eda +Block 0027 [ 7]: a450647808334031 +Block 0027 [ 8]: a49dc91b02dd152a +Block 0027 [ 9]: a1df5af93a458258 +Block 0027 [ 10]: 460ce6ddd889f093 +Block 0027 [ 11]: 2b83ec3afbce05d7 +Block 0027 [ 12]: 1feb1038e4a41337 +Block 0027 [ 13]: d894f759db4aa187 +Block 0027 [ 14]: 9cd3e83bd2ce2a3c +Block 0027 [ 15]: 122329bec91f22ae +Block 0027 [ 16]: 3164305c06597ed1 +Block 0027 [ 17]: 15ea332d31d63ba0 +Block 0027 [ 18]: 332575da2a0d5a15 +Block 0027 [ 19]: d3a985b92cd0052a +Block 0027 [ 20]: 7a3093d0e4099f67 +Block 0027 [ 21]: ba30f2011e951173 +Block 0027 [ 22]: 4f642efd6120e0a2 +Block 0027 [ 23]: 30da68372ea56477 +Block 0027 [ 24]: a8c50c022cc2621c +Block 0027 [ 25]: 1843c5f366fa233b +Block 0027 [ 26]: 81977f521ced01ed +Block 0027 [ 27]: 8ff95bacc0bf5d46 +Block 0027 [ 28]: 371e8ae93b4429ae +Block 0027 [ 29]: 30b09e60a2275b62 +Block 0027 [ 30]: 421c4df3058f5fc8 +Block 0027 [ 31]: 1d844cdbfc4783e1 +Block 0027 [ 32]: 209fd5f6c6242e1f +Block 0027 [ 33]: e31964f0c87dd5a3 +Block 0027 [ 34]: 0bff3b23315f2228 +Block 0027 [ 35]: 7ee79794c7d9698c +Block 0027 [ 36]: c2078da63d1be25a +Block 0027 [ 37]: 54cfc650dc428f86 +Block 0027 [ 38]: c1170df8c640ac41 +Block 0027 [ 39]: f6374626601c138f +Block 0027 [ 40]: b3305d99f063651f +Block 0027 [ 41]: 5fa3a3b86034d02c +Block 0027 [ 42]: 43d617ee14d7394c +Block 0027 [ 43]: f0b3e3740ecad01a +Block 0027 [ 44]: 1484e54190aaefad +Block 0027 [ 45]: 886306c94039c2e5 +Block 0027 [ 46]: 453f49ff9990d8f4 +Block 0027 [ 47]: a160b0bf87129ee1 +Block 0027 [ 48]: 14b6ebec2855245e +Block 0027 [ 49]: be87ad9bbb8fc5d5 +Block 0027 [ 50]: 4e4f69ba2205542d +Block 0027 [ 51]: eeec95e6f93b691b +Block 0027 [ 52]: 2374eda0b7e30be3 +Block 0027 [ 53]: 4f375a04345486a9 +Block 0027 [ 54]: c16f94d33a670c38 +Block 0027 [ 55]: edce5f8c4a99318a +Block 0027 [ 56]: c7bd4b43701dd32b +Block 0027 [ 57]: c5a828d63f58f1f7 +Block 0027 [ 58]: d9d5ff2b896b3531 +Block 0027 [ 59]: 883a28b0478db04d +Block 0027 [ 60]: 2aa444c3b59378c8 +Block 0027 [ 61]: 8af8d16ebf538d25 +Block 0027 [ 62]: 67a9d02865c2ab42 +Block 0027 [ 63]: 4a6439bdb7311890 +Block 0027 [ 64]: f935e598a1205145 +Block 0027 [ 65]: 8d4ae634d1a9a333 +Block 0027 [ 66]: 05657afa85fe632a +Block 0027 [ 67]: 079e46ed57d012c5 +Block 0027 [ 68]: 03230abf66c1b425 +Block 0027 [ 69]: c54bebb4faccaee9 +Block 0027 [ 70]: 6b28e6219d1019bd +Block 0027 [ 71]: 16d88dd182ed969a +Block 0027 [ 72]: 626866912c3eb137 +Block 0027 [ 73]: 193204f7038cb9ac +Block 0027 [ 74]: 156377647e514c90 +Block 0027 [ 75]: 29f72e6ff7e69cc7 +Block 0027 [ 76]: a6145fd88785d18a +Block 0027 [ 77]: ea5e0c3735fee25c +Block 0027 [ 78]: f2e3c04a7f3d6d3f +Block 0027 [ 79]: 3420eedce88e6a7d +Block 0027 [ 80]: 527cbae723451344 +Block 0027 [ 81]: 01c3b478819839eb +Block 0027 [ 82]: f43ca33dd55c49ec +Block 0027 [ 83]: 84722b68ed9b37a1 +Block 0027 [ 84]: 71aaae11c3523d4e +Block 0027 [ 85]: 0cab426f58a8fbde +Block 0027 [ 86]: 2f5fc56279063dd9 +Block 0027 [ 87]: fd3487c76bdfdfdc +Block 0027 [ 88]: b1fcd893026ef087 +Block 0027 [ 89]: ae175ee5084c0d71 +Block 0027 [ 90]: 1c70e03b18315565 +Block 0027 [ 91]: b4e8b34398ea69aa +Block 0027 [ 92]: 07ae38f296bb69fa +Block 0027 [ 93]: 2faee36940f2aa3c +Block 0027 [ 94]: 1e941b12ecb46c33 +Block 0027 [ 95]: 47f49d65e574cad5 +Block 0027 [ 96]: 0a5724315ec4a324 +Block 0027 [ 97]: 2c4efcb88bcad6a0 +Block 0027 [ 98]: ed6990a06e8bf816 +Block 0027 [ 99]: 6df7b115876ed9fd +Block 0027 [100]: 3c3f84384e37e9e7 +Block 0027 [101]: 4b709add16911961 +Block 0027 [102]: 7082128e781fb92f +Block 0027 [103]: 836d704d595fc0a5 +Block 0027 [104]: 0d9e0264bfabdc41 +Block 0027 [105]: fad2dbb39cf7aad9 +Block 0027 [106]: 6e9a57fb1ce6b7b9 +Block 0027 [107]: 625b2973f4342d84 +Block 0027 [108]: 24aa411e48a6ec83 +Block 0027 [109]: 2cc130bd20f276a2 +Block 0027 [110]: 509f9bd51c0dd4ae +Block 0027 [111]: 63a7c8803249998f +Block 0027 [112]: a384c027387b681e +Block 0027 [113]: 701a14dc10ed445f +Block 0027 [114]: 9b4a9df7cf4cba15 +Block 0027 [115]: aa8620c74110cd2c +Block 0027 [116]: 55fb138ff1bbf400 +Block 0027 [117]: 434796a4f710f9be +Block 0027 [118]: a186f7c79917528c +Block 0027 [119]: 314348a58aa47154 +Block 0027 [120]: 0d274caa7dd6c7bc +Block 0027 [121]: 78dfe448ab422a4c +Block 0027 [122]: ea252bcb1be302c2 +Block 0027 [123]: 11761870538cf90f +Block 0027 [124]: f4aa00a486ac10fa +Block 0027 [125]: ee815be93ebf5894 +Block 0027 [126]: 0aaf12c8aec427b7 +Block 0027 [127]: 7b96d15b1284c04e +Block 0028 [ 0]: 82408712ce17f7a9 +Block 0028 [ 1]: f3e8c6e4c2f3e305 +Block 0028 [ 2]: a1581ca69ca9f63b +Block 0028 [ 3]: 50375c67927594de +Block 0028 [ 4]: 03b078c2c1613ef7 +Block 0028 [ 5]: f25f8649d71d7906 +Block 0028 [ 6]: d404193575b2833d +Block 0028 [ 7]: 0875a307b451cb1b +Block 0028 [ 8]: fea3dc97668368ed +Block 0028 [ 9]: 410ef3337a1a4548 +Block 0028 [ 10]: ec3acd7c9bc49f3c +Block 0028 [ 11]: ea5cbdc2f31e3bb2 +Block 0028 [ 12]: 3a061ca85fa84ea9 +Block 0028 [ 13]: d14f05b512c0e069 +Block 0028 [ 14]: ab58a9b9c9d15251 +Block 0028 [ 15]: 6a04b0b1c6a5c825 +Block 0028 [ 16]: 9ae70846c06f4457 +Block 0028 [ 17]: ee90f2fd9876bd4b +Block 0028 [ 18]: 42507e9f20bfd886 +Block 0028 [ 19]: 311aa207eeee0e0d +Block 0028 [ 20]: 6c9695e4d7e07918 +Block 0028 [ 21]: 011cdbb9ef07be82 +Block 0028 [ 22]: aa0a6e601a7bae7c +Block 0028 [ 23]: a3a986d785723d13 +Block 0028 [ 24]: f09ae3599dc42a45 +Block 0028 [ 25]: dab459b86f3f5ac2 +Block 0028 [ 26]: a54c5e996255ca2c +Block 0028 [ 27]: 3dcb342379aff5fa +Block 0028 [ 28]: 0ba802ee0df38dbe +Block 0028 [ 29]: 19515b83587e110a +Block 0028 [ 30]: a12d0bed5dab0a06 +Block 0028 [ 31]: ac84bf5e3a98b0be +Block 0028 [ 32]: e79e0e2a508e9386 +Block 0028 [ 33]: f1cde8b958b67cf4 +Block 0028 [ 34]: 4a13d79c7f6cb7a0 +Block 0028 [ 35]: 2f300090f464a21c +Block 0028 [ 36]: b6fc86496fc9aec2 +Block 0028 [ 37]: 3dfc35eca793cb7f +Block 0028 [ 38]: d2e1696c9a5a2928 +Block 0028 [ 39]: 7c795e7fffd86289 +Block 0028 [ 40]: 52c0ee95ea6fdd02 +Block 0028 [ 41]: b311d199b6aa9218 +Block 0028 [ 42]: 8d56ba4b30fb07e3 +Block 0028 [ 43]: ce62133b53ec1832 +Block 0028 [ 44]: 058384bef5f3d313 +Block 0028 [ 45]: fc95f2620df24e07 +Block 0028 [ 46]: f431e68bf6a58395 +Block 0028 [ 47]: 85ee8f4c9006b459 +Block 0028 [ 48]: cd5fa5365ae87a42 +Block 0028 [ 49]: 1f2288fd8d5dee5c +Block 0028 [ 50]: cd6374c3e2531ff9 +Block 0028 [ 51]: ba608140ca8b7b5c +Block 0028 [ 52]: 9aff6af649f3f64f +Block 0028 [ 53]: 2303c6e1cc4e2dd0 +Block 0028 [ 54]: ef87ff083178fa81 +Block 0028 [ 55]: 26ea3aad00f9e95f +Block 0028 [ 56]: 2e57136f63ca2fd8 +Block 0028 [ 57]: e61e0f60a1830217 +Block 0028 [ 58]: 0bacb0ed448e2b29 +Block 0028 [ 59]: 0f317990dade48ed +Block 0028 [ 60]: c3e2cb9770557283 +Block 0028 [ 61]: 8f97cbf5fc705c60 +Block 0028 [ 62]: 288061965c9746da +Block 0028 [ 63]: b154d61f4849d1ec +Block 0028 [ 64]: 8e9397a83d213b4e +Block 0028 [ 65]: 3e6ad59c9c4acb0f +Block 0028 [ 66]: 8fcf18a12abee65a +Block 0028 [ 67]: d5388ddf42a6c674 +Block 0028 [ 68]: cda99d9620ef82c6 +Block 0028 [ 69]: a119d3c283ed8468 +Block 0028 [ 70]: 30cdcad011da7a62 +Block 0028 [ 71]: a64f272088e46d39 +Block 0028 [ 72]: e672d69e8780b365 +Block 0028 [ 73]: e13f1c2a7ba72820 +Block 0028 [ 74]: 45343118a2755927 +Block 0028 [ 75]: b1ec327fd0a4ff57 +Block 0028 [ 76]: d1e0af3240192798 +Block 0028 [ 77]: 24ec1776f40433bf +Block 0028 [ 78]: 47d7132f3de6411f +Block 0028 [ 79]: 02d281c561b8ced6 +Block 0028 [ 80]: 2caed014dd19d801 +Block 0028 [ 81]: 6545a1f9c40f7e7c +Block 0028 [ 82]: 88258916728f5bb7 +Block 0028 [ 83]: d97be6e93280df68 +Block 0028 [ 84]: 6a4f41e251970d36 +Block 0028 [ 85]: c284daf1359e41d9 +Block 0028 [ 86]: 1fea88bb5cc85cc7 +Block 0028 [ 87]: f1b628fc85ecf74b +Block 0028 [ 88]: 35060adb5334aa39 +Block 0028 [ 89]: f0da6211239f1269 +Block 0028 [ 90]: f1e5bf17338128c2 +Block 0028 [ 91]: b5db0ef6368d57ce +Block 0028 [ 92]: 0d1481e26bf9adb5 +Block 0028 [ 93]: 8c03a83009478238 +Block 0028 [ 94]: dbaf06e92da90e37 +Block 0028 [ 95]: c69d1544bd0221b4 +Block 0028 [ 96]: 36e0a7c126fb9e05 +Block 0028 [ 97]: 5aa9391a902aaf36 +Block 0028 [ 98]: 77c19e82519e5f61 +Block 0028 [ 99]: 9acdb0dc8e2ad24a +Block 0028 [100]: de2075d90c6af446 +Block 0028 [101]: df405d10e227bd96 +Block 0028 [102]: eecb434ab0e99e4c +Block 0028 [103]: 6f464c7524235641 +Block 0028 [104]: 681e7bb3b3f94a16 +Block 0028 [105]: c814771fb2efa395 +Block 0028 [106]: c0b3c7fa8bec6349 +Block 0028 [107]: bf9dfc97a5f3249d +Block 0028 [108]: 34801d8873481e24 +Block 0028 [109]: 15675a609abee274 +Block 0028 [110]: 02e87c0225da6405 +Block 0028 [111]: d28117b6afe29a54 +Block 0028 [112]: 2c542767ebc86fd3 +Block 0028 [113]: 9114939163ffd3a2 +Block 0028 [114]: 39a0e8876489cce5 +Block 0028 [115]: bbe0cc86440e5373 +Block 0028 [116]: 5c952928c554bc57 +Block 0028 [117]: 34adbba55eccd688 +Block 0028 [118]: 7265edb6c99b1b04 +Block 0028 [119]: 011de91e6ab8b36d +Block 0028 [120]: d7726399cd53e5b3 +Block 0028 [121]: 8baf8b805bed1886 +Block 0028 [122]: c8395bc031b6ccf6 +Block 0028 [123]: 0f71ca7ca368a89e +Block 0028 [124]: a5a1786001895577 +Block 0028 [125]: 709d49b068d06531 +Block 0028 [126]: 0b27ca67ef1d7153 +Block 0028 [127]: 7e427c6463689e90 +Block 0029 [ 0]: ce34cb10538a4488 +Block 0029 [ 1]: 211d7a9991acb9e3 +Block 0029 [ 2]: 75f08e5bb287cf6c +Block 0029 [ 3]: 4eeced3480b5d365 +Block 0029 [ 4]: 6caec38b6e905cd4 +Block 0029 [ 5]: d58d7afd8bcc419d +Block 0029 [ 6]: 28c97c8881b3dd13 +Block 0029 [ 7]: cb7b9b3bfaf46afe +Block 0029 [ 8]: dbc42c4b47931b08 +Block 0029 [ 9]: 805428575a21e671 +Block 0029 [ 10]: 0e64fc553cdc48f2 +Block 0029 [ 11]: bffbd5d1dd48fb3f +Block 0029 [ 12]: 58abded29f1e14b4 +Block 0029 [ 13]: 957d09bfd9417b5e +Block 0029 [ 14]: 757184cd6a80c2ca +Block 0029 [ 15]: fffb01be941b2719 +Block 0029 [ 16]: b1bac4e2e7d85eb2 +Block 0029 [ 17]: 6b6df4ba8b62d354 +Block 0029 [ 18]: 37ab98e92c226ac1 +Block 0029 [ 19]: 8da51813d943ef0e +Block 0029 [ 20]: 7c5ecf9ef55246d8 +Block 0029 [ 21]: afcb74a0b3c74e32 +Block 0029 [ 22]: 9ff7327fb6626ec6 +Block 0029 [ 23]: 6d88801c470a838c +Block 0029 [ 24]: e381a1d478169f61 +Block 0029 [ 25]: c4f6ed8539d52fb6 +Block 0029 [ 26]: 9dd42394f963ec51 +Block 0029 [ 27]: 608e7c79c7e9ebd7 +Block 0029 [ 28]: 635bf787f483f095 +Block 0029 [ 29]: ba3ea37f512a88e1 +Block 0029 [ 30]: d59c8e73f3f6f620 +Block 0029 [ 31]: 0bcab889d84e2297 +Block 0029 [ 32]: eba1a6994b5a806d +Block 0029 [ 33]: e5800b70faf85d82 +Block 0029 [ 34]: 17543408abf86929 +Block 0029 [ 35]: d2742aed91d14b30 +Block 0029 [ 36]: 8d864eb756300f8f +Block 0029 [ 37]: 2602a7f3885d0b00 +Block 0029 [ 38]: 38a96b1f178072af +Block 0029 [ 39]: 99f063fa0e0257b0 +Block 0029 [ 40]: 553e5382a39016b2 +Block 0029 [ 41]: 40e5c09d46bf467c +Block 0029 [ 42]: 151efa072d8c3041 +Block 0029 [ 43]: e6b90bff69fb7364 +Block 0029 [ 44]: 2f3d83591040ef91 +Block 0029 [ 45]: 9a51b0677c6883cd +Block 0029 [ 46]: e954652d3758b685 +Block 0029 [ 47]: efc3b3718b8b9d5e +Block 0029 [ 48]: e3b40fcd501db6b2 +Block 0029 [ 49]: 007b05e3352c4a78 +Block 0029 [ 50]: f66361d2e4399495 +Block 0029 [ 51]: 0e6b2a8c1385c597 +Block 0029 [ 52]: 3d8955a1de9f30e2 +Block 0029 [ 53]: 4eaecd9633dc2db8 +Block 0029 [ 54]: 0b0db104ae05c9e2 +Block 0029 [ 55]: b8d8a61f200d677c +Block 0029 [ 56]: e9b85044e092c51f +Block 0029 [ 57]: 9aa1b914b367bf0c +Block 0029 [ 58]: f87f835683f94dc6 +Block 0029 [ 59]: ea3d166054271b20 +Block 0029 [ 60]: bbb5e4b368a6a76a +Block 0029 [ 61]: 2ebacce22764c387 +Block 0029 [ 62]: eea281c46296adc7 +Block 0029 [ 63]: f6b70768992d4a3f +Block 0029 [ 64]: 008caf1824393415 +Block 0029 [ 65]: 6e1e17e781647ede +Block 0029 [ 66]: 96471c30c4fad451 +Block 0029 [ 67]: dbea40a67071a38d +Block 0029 [ 68]: 6a68c126f7df8502 +Block 0029 [ 69]: 55f3b484495c01f5 +Block 0029 [ 70]: 71f1ceeebaab92ba +Block 0029 [ 71]: aa7d9f1f1d542cd3 +Block 0029 [ 72]: 57a7e002e8148b3f +Block 0029 [ 73]: d066574b2673ec63 +Block 0029 [ 74]: fa064ece3661f27c +Block 0029 [ 75]: 59c0c37896842666 +Block 0029 [ 76]: b9907779bbbfefdd +Block 0029 [ 77]: 3a3c0948985d0305 +Block 0029 [ 78]: 4399ad0a4be323a9 +Block 0029 [ 79]: 016efe5c4529314a +Block 0029 [ 80]: 7345362c79299fbe +Block 0029 [ 81]: 3890e8bd3dc199ed +Block 0029 [ 82]: a9f84b570d9caf19 +Block 0029 [ 83]: 12e79bf3de2f764d +Block 0029 [ 84]: e1279245288ab28c +Block 0029 [ 85]: c042d0f79b5efb78 +Block 0029 [ 86]: 4b595741415f2dd7 +Block 0029 [ 87]: 661557ace1e3bda7 +Block 0029 [ 88]: a4ebbccc3c16fe3e +Block 0029 [ 89]: 97b76196c5c64fb0 +Block 0029 [ 90]: 6ab0d520070ae215 +Block 0029 [ 91]: cf04f4e7f61c6ddd +Block 0029 [ 92]: 39bbdca29baf8767 +Block 0029 [ 93]: 4728cb7d2d918220 +Block 0029 [ 94]: 8cea866afb3619b5 +Block 0029 [ 95]: 983d3c2dd31d6d69 +Block 0029 [ 96]: c16d0d3adc9f83b3 +Block 0029 [ 97]: 9010a83289cfb845 +Block 0029 [ 98]: 65cc7b1c436419ca +Block 0029 [ 99]: a50cf5e64562c1ec +Block 0029 [100]: 0f45ea095a9b45f7 +Block 0029 [101]: 550cc6f9be6b48f6 +Block 0029 [102]: c9a3f23adc2dd645 +Block 0029 [103]: 6ffa2f9d7f00f22b +Block 0029 [104]: 3f491b65d9a190da +Block 0029 [105]: 9da25d64e68ef5c7 +Block 0029 [106]: 4e9c12aeb5b97c2f +Block 0029 [107]: b59116c75353ce2a +Block 0029 [108]: 78bde1417564ec29 +Block 0029 [109]: 6fe1002528bdf6a0 +Block 0029 [110]: a965b63d2265c7f3 +Block 0029 [111]: 3f3222d651afad85 +Block 0029 [112]: 78964a97c84f4574 +Block 0029 [113]: a1f7808dfb3a8d18 +Block 0029 [114]: 53c18846d2abe738 +Block 0029 [115]: c07f6787ec22fff1 +Block 0029 [116]: e0b52b87e0f04cc4 +Block 0029 [117]: 0a67631a61fa149f +Block 0029 [118]: c17063aa02acb80a +Block 0029 [119]: 435f430b7080099d +Block 0029 [120]: 02eda91081cbf64c +Block 0029 [121]: 3a1fef6339dfbeec +Block 0029 [122]: 821837c795d62201 +Block 0029 [123]: f7415295fd0566f8 +Block 0029 [124]: 002af4e7624778e0 +Block 0029 [125]: 44c86de1dba9e648 +Block 0029 [126]: d13799f233f47269 +Block 0029 [127]: 62a153063663a128 +Block 0030 [ 0]: cb74d134bab6af1e +Block 0030 [ 1]: ab9139ca3e85e177 +Block 0030 [ 2]: 9621e7b27594caba +Block 0030 [ 3]: 4a56f22b1f95e350 +Block 0030 [ 4]: 7ba0a9626274b5aa +Block 0030 [ 5]: f1e47cfd11b89c41 +Block 0030 [ 6]: 6e60e2043581457e +Block 0030 [ 7]: b5baadc50e169bd4 +Block 0030 [ 8]: 35d0006692605bcc +Block 0030 [ 9]: 89285fd649487c0f +Block 0030 [ 10]: eed082cc1ca0a043 +Block 0030 [ 11]: 4d9b0cd9d0281f25 +Block 0030 [ 12]: b55bb9d61c0b63e6 +Block 0030 [ 13]: ccfc302b1ab3e413 +Block 0030 [ 14]: f5da9ad788fdf771 +Block 0030 [ 15]: 5869f718f687b0c8 +Block 0030 [ 16]: 4380f6ac31d55bb7 +Block 0030 [ 17]: fd59c18a39161816 +Block 0030 [ 18]: 2c82dd132b577957 +Block 0030 [ 19]: b90e90d65d0218c2 +Block 0030 [ 20]: c7933579f4e7371b +Block 0030 [ 21]: 25738f968c48b489 +Block 0030 [ 22]: 663ea3e6e1060896 +Block 0030 [ 23]: fe99b4410d933510 +Block 0030 [ 24]: 65ca199967fc758b +Block 0030 [ 25]: fc90f25e8372fb67 +Block 0030 [ 26]: fb913979e7f4b1e4 +Block 0030 [ 27]: 864b7e4de3fc5054 +Block 0030 [ 28]: d183f3e8faf284d4 +Block 0030 [ 29]: f5b2909c45867bfd +Block 0030 [ 30]: fa6a2176bbf0d3a7 +Block 0030 [ 31]: 008c78a9bab195cc +Block 0030 [ 32]: bdf9a2cb8d1c3a97 +Block 0030 [ 33]: f84c7c9cbab7d537 +Block 0030 [ 34]: 0bd511cb729e9313 +Block 0030 [ 35]: b4700a2eef01d3d5 +Block 0030 [ 36]: 6e4e3a5dad8e2b39 +Block 0030 [ 37]: 6e4175da89e007e1 +Block 0030 [ 38]: 359996202e7388a9 +Block 0030 [ 39]: 54584a0d03f2c6a8 +Block 0030 [ 40]: e427aee0fcbf2ed2 +Block 0030 [ 41]: a7e40b854431f3e0 +Block 0030 [ 42]: 5bf9228dca48af5e +Block 0030 [ 43]: 94c0ccd190109464 +Block 0030 [ 44]: 7a2df0d59d50f12e +Block 0030 [ 45]: c002ab1a1baed32e +Block 0030 [ 46]: 682d82c9a7884da3 +Block 0030 [ 47]: 9b1487167135ae71 +Block 0030 [ 48]: bf2a8533abb8919d +Block 0030 [ 49]: 26e7c343260a13d7 +Block 0030 [ 50]: 7a362cbe6db84f0a +Block 0030 [ 51]: 7e9d180198969377 +Block 0030 [ 52]: cb69a25076a05638 +Block 0030 [ 53]: dc0e76db9f2f52a3 +Block 0030 [ 54]: ce43a758d54a4f41 +Block 0030 [ 55]: 356825d901de7161 +Block 0030 [ 56]: 315a55a0af60ad63 +Block 0030 [ 57]: 4824c7effdfbd07b +Block 0030 [ 58]: c638523a5383ba1a +Block 0030 [ 59]: 4edc3a0bc3c78832 +Block 0030 [ 60]: 8ac605905eb84c4e +Block 0030 [ 61]: d2900261470e1a67 +Block 0030 [ 62]: 05d65c06e6a24220 +Block 0030 [ 63]: 8435ff377b5ff7e0 +Block 0030 [ 64]: 2bcd4b532b81bdf6 +Block 0030 [ 65]: ec252e030064a0b4 +Block 0030 [ 66]: 524cf8e135a3b747 +Block 0030 [ 67]: 278f7b7951c7e470 +Block 0030 [ 68]: 0f77150c9e415e43 +Block 0030 [ 69]: 99caa3c58f33c0e1 +Block 0030 [ 70]: ce440f899289cc0d +Block 0030 [ 71]: 9e26e5b9a2dfe6c7 +Block 0030 [ 72]: 7e11aa36d81f216a +Block 0030 [ 73]: 79ed978e247bb8a9 +Block 0030 [ 74]: 732b4d5012bbdd26 +Block 0030 [ 75]: e82b506b197611ba +Block 0030 [ 76]: 82ced7eae9605c32 +Block 0030 [ 77]: de31b9ed48fc41c3 +Block 0030 [ 78]: c8bde09405c92a1c +Block 0030 [ 79]: 3e1a29cf3f4a5776 +Block 0030 [ 80]: fd7e85092fc9a5be +Block 0030 [ 81]: f68ed9c8d8bc10b4 +Block 0030 [ 82]: 8db739301e460d8b +Block 0030 [ 83]: 016ee7802d808790 +Block 0030 [ 84]: c7334fbbe7c7617e +Block 0030 [ 85]: bd7cb0187038f41a +Block 0030 [ 86]: cf4f5bb891351075 +Block 0030 [ 87]: 57a50cc2a966e2b3 +Block 0030 [ 88]: 4df30e75df349360 +Block 0030 [ 89]: f6ee30a92abccd66 +Block 0030 [ 90]: 330110ce83d23bc6 +Block 0030 [ 91]: 7a2d87b1916840f9 +Block 0030 [ 92]: 6480fafbacf1bf46 +Block 0030 [ 93]: 8c8df72a73b670f0 +Block 0030 [ 94]: 509f06fe2f62ed7a +Block 0030 [ 95]: 3ca2dacea09e846c +Block 0030 [ 96]: b2c0f93dd6edc763 +Block 0030 [ 97]: f35e434d06f52de1 +Block 0030 [ 98]: 4cd8554a66f8fd3a +Block 0030 [ 99]: 36464d67ffd919cb +Block 0030 [100]: d159b776820b30d5 +Block 0030 [101]: c520a82f0474cd8d +Block 0030 [102]: b86f0ac925d8a02b +Block 0030 [103]: 32078216de9940ee +Block 0030 [104]: e5237ffb6a726a31 +Block 0030 [105]: 5c6d7d3176378cc2 +Block 0030 [106]: 31929784e802d335 +Block 0030 [107]: 70215d61e6fb7cfe +Block 0030 [108]: 29211cace6a7f1d8 +Block 0030 [109]: faeef455cd5b7582 +Block 0030 [110]: fc0a0780010b856b +Block 0030 [111]: fe71632fb6931fcd +Block 0030 [112]: da0efe624942d9fd +Block 0030 [113]: 7ad3b463f50f27cd +Block 0030 [114]: 995014de8f61fbfb +Block 0030 [115]: af5d8a32f37e474d +Block 0030 [116]: 37fb11c2566e3136 +Block 0030 [117]: ca1b55d0775da139 +Block 0030 [118]: 6dcb9acd9f90a0e7 +Block 0030 [119]: 575bea75322eee40 +Block 0030 [120]: 03388524c06fc342 +Block 0030 [121]: b87fba57be6a7d1e +Block 0030 [122]: ece9497a243c32bc +Block 0030 [123]: 5a01f4734f05fbe2 +Block 0030 [124]: fc6e4fa8a0b860b2 +Block 0030 [125]: 7002e3123bfdb5df +Block 0030 [126]: 7804b63c35fbe698 +Block 0030 [127]: c9c8f414df7820cb +Block 0031 [ 0]: b2ad75524c3d2a81 +Block 0031 [ 1]: fab04039a96af6d0 +Block 0031 [ 2]: 8494705bd7a6eaa4 +Block 0031 [ 3]: 814756c584e7272d +Block 0031 [ 4]: 927c5b0c90d75d6b +Block 0031 [ 5]: f888d4ed7afe38a6 +Block 0031 [ 6]: 982046c3b2d45322 +Block 0031 [ 7]: c24ce29090879caa +Block 0031 [ 8]: a4b4eb89764c8d01 +Block 0031 [ 9]: 1f09e9c76fcd765c +Block 0031 [ 10]: 1659b74e12faff66 +Block 0031 [ 11]: bf5b57bc59958c88 +Block 0031 [ 12]: 0eec19264c1d7051 +Block 0031 [ 13]: 1715310a772896f3 +Block 0031 [ 14]: 557e296e0f059142 +Block 0031 [ 15]: ac4535969b81e7d7 +Block 0031 [ 16]: aaba64a3051b10c6 +Block 0031 [ 17]: 13afbdc722284e8a +Block 0031 [ 18]: 5546653a8b26b3df +Block 0031 [ 19]: 8384fe398ed31455 +Block 0031 [ 20]: a2697ab5df6b271e +Block 0031 [ 21]: 8e1d55e24a96e84b +Block 0031 [ 22]: 0e654de47d5a74ee +Block 0031 [ 23]: 4e7ac436b7f97825 +Block 0031 [ 24]: 3591d7151256c14e +Block 0031 [ 25]: 0b6607c547626a3d +Block 0031 [ 26]: 0ea9d4e533da04b7 +Block 0031 [ 27]: b519298b2333dbe0 +Block 0031 [ 28]: c9cb7b614d5c918a +Block 0031 [ 29]: f0a5f1041cab56ae +Block 0031 [ 30]: d1442001904abff9 +Block 0031 [ 31]: b097acb54c2d261b +Block 0031 [ 32]: c1d50486ebb4f4e1 +Block 0031 [ 33]: 6dfb55d658d7e408 +Block 0031 [ 34]: 65182f413c8a6f35 +Block 0031 [ 35]: 4fc028be89308272 +Block 0031 [ 36]: a0c559768bb48b2e +Block 0031 [ 37]: 42770640b289c67f +Block 0031 [ 38]: 8796a70b12d4e4bb +Block 0031 [ 39]: b7f621233f598131 +Block 0031 [ 40]: 2f506feb2e3ec6e6 +Block 0031 [ 41]: de73f26918d7cd59 +Block 0031 [ 42]: dbc7b351f3247b08 +Block 0031 [ 43]: 28ea9c36274ce050 +Block 0031 [ 44]: 2abebad94846282d +Block 0031 [ 45]: 83eb22a616227ead +Block 0031 [ 46]: 342a5e9acca0cf39 +Block 0031 [ 47]: 840ba32a918920d7 +Block 0031 [ 48]: f5aa7f6f0df6e05b +Block 0031 [ 49]: 906884611a46cf58 +Block 0031 [ 50]: e3a046400e2ee967 +Block 0031 [ 51]: 8e76abba13b3814a +Block 0031 [ 52]: 75b5822697cfe363 +Block 0031 [ 53]: c3627120cc9bc843 +Block 0031 [ 54]: 0328e0f870076cc6 +Block 0031 [ 55]: 831f34dbcbdc6961 +Block 0031 [ 56]: ce2d8f9f7aeeef1a +Block 0031 [ 57]: 609845487b08ba98 +Block 0031 [ 58]: 6f726d45e2e3b3a0 +Block 0031 [ 59]: ba0632a27042f031 +Block 0031 [ 60]: 46c959e91f4a5b3f +Block 0031 [ 61]: 583c6d6e3a34d9f9 +Block 0031 [ 62]: befa926623f509d2 +Block 0031 [ 63]: 4a4915a0a0e22615 +Block 0031 [ 64]: 1f2646e77fdc1e4e +Block 0031 [ 65]: 0caa62caf21df1f1 +Block 0031 [ 66]: f311e1d1f8213e5c +Block 0031 [ 67]: ec49f4c725ae6e90 +Block 0031 [ 68]: 9ff8475fddb053ee +Block 0031 [ 69]: 0bb1bd705e94b7b1 +Block 0031 [ 70]: fd35b76f36338f73 +Block 0031 [ 71]: 6474c9a0a5b6c69f +Block 0031 [ 72]: 91921541f2e2291f +Block 0031 [ 73]: 5e2acd572e3fc12e +Block 0031 [ 74]: 9bb771e4e18a755f +Block 0031 [ 75]: 8caf6c26722198cf +Block 0031 [ 76]: 33dbf836dae269d3 +Block 0031 [ 77]: c841bcc4839a9e52 +Block 0031 [ 78]: b15fd0aa30b4a4e4 +Block 0031 [ 79]: b1d063d4fe67e21c +Block 0031 [ 80]: d4a1a03300a6e442 +Block 0031 [ 81]: f81d00de7f973647 +Block 0031 [ 82]: dcd91b2b94d78125 +Block 0031 [ 83]: 76da9792b43e75b8 +Block 0031 [ 84]: a7e3f6568c0a0388 +Block 0031 [ 85]: 566feb89b3d88185 +Block 0031 [ 86]: 8c4d3688f80e91b6 +Block 0031 [ 87]: 8fe53124e6104a2e +Block 0031 [ 88]: da5da5041344dd1b +Block 0031 [ 89]: 721b41ec066d2189 +Block 0031 [ 90]: 074debbac6f9761b +Block 0031 [ 91]: 6a07879fc9bf2ec9 +Block 0031 [ 92]: ccc3e1eb61fad409 +Block 0031 [ 93]: 3be4750e63efdf7b +Block 0031 [ 94]: 013c1f56ea5b8ce9 +Block 0031 [ 95]: 2072659db16979f8 +Block 0031 [ 96]: be5ac68e4277d087 +Block 0031 [ 97]: 65e7fcc9935f7384 +Block 0031 [ 98]: 2af35d2546b9a4b3 +Block 0031 [ 99]: 50d9bc80f125eeef +Block 0031 [100]: 31573ae31f5913b8 +Block 0031 [101]: aa2fe8799d89d353 +Block 0031 [102]: 0dd3e255f4addbe8 +Block 0031 [103]: 48d05bb4cf7721ad +Block 0031 [104]: 0158e051ef3d08cf +Block 0031 [105]: 0a56281c57ad20c4 +Block 0031 [106]: 80396de3b32e46c3 +Block 0031 [107]: 6bcc4e1db72d4e2c +Block 0031 [108]: 1d723a0ad2f4e794 +Block 0031 [109]: 7ff3511be9bcb0eb +Block 0031 [110]: cc6493fcb3730f84 +Block 0031 [111]: 9ecdcbc35ead32f5 +Block 0031 [112]: 426b36f39c969d5b +Block 0031 [113]: 25e66eca6aeed6af +Block 0031 [114]: 94eeb55600b80f69 +Block 0031 [115]: 5e1f278e6ea9b3fe +Block 0031 [116]: 903011fc53d26f6e +Block 0031 [117]: 800522387513c939 +Block 0031 [118]: 25125a6704c6bc7e +Block 0031 [119]: 2fa464d5b41a34fb +Block 0031 [120]: c72f0545be5542a3 +Block 0031 [121]: a10f157445827b48 +Block 0031 [122]: d2d0f854a21a9fb2 +Block 0031 [123]: 35bf180e3e99d207 +Block 0031 [124]: 377fa81666dc7f2b +Block 0031 [125]: 50e586398a9c39c8 +Block 0031 [126]: 6f732732a550924a +Block 0031 [127]: 81f88b28683ea8e5 + + After pass 1: +Block 0000 [ 0]: 3653ec9d01583df9 +Block 0000 [ 1]: 69ef53a72d1e1fd3 +Block 0000 [ 2]: 35635631744ab54f +Block 0000 [ 3]: 599512e96a37ab6e +Block 0000 [ 4]: 11391e9e42d1727c +Block 0000 [ 5]: 68d9d83a0713308b +Block 0000 [ 6]: 444c077ac115bb06 +Block 0000 [ 7]: fa68fa58d2b1fe8c +Block 0000 [ 8]: 8cf2e516a943abc4 +Block 0000 [ 9]: 891ca59c509138e1 +Block 0000 [ 10]: 7291b599e55eef18 +Block 0000 [ 11]: 1cf3e52886b2d9a4 +Block 0000 [ 12]: f3d4f1c26d3bc3a7 +Block 0000 [ 13]: ebc0f159103930fb +Block 0000 [ 14]: 9d0e061ef578e457 +Block 0000 [ 15]: 657a0e383db3614f +Block 0000 [ 16]: 2f1a908810976771 +Block 0000 [ 17]: 2ee9ce495a10b1bf +Block 0000 [ 18]: 0a60ade9f8611f08 +Block 0000 [ 19]: 907562b6de768481 +Block 0000 [ 20]: abbc7c71a02ff51c +Block 0000 [ 21]: 0a4e54f1106b6829 +Block 0000 [ 22]: 19937636107aa126 +Block 0000 [ 23]: 94f317629d1e115e +Block 0000 [ 24]: 01735b70329da1ba +Block 0000 [ 25]: 2da84930050a9c85 +Block 0000 [ 26]: 9f5332bdeed5ddeb +Block 0000 [ 27]: f42fecaeb7c25ba7 +Block 0000 [ 28]: db04f73f19403546 +Block 0000 [ 29]: 50697466fc80a862 +Block 0000 [ 30]: 78e038fe6c14fbb6 +Block 0000 [ 31]: 9b3de1088ce8033b +Block 0000 [ 32]: a63d4e4238b04a7a +Block 0000 [ 33]: 23ebc3adb723f426 +Block 0000 [ 34]: 1e421bae1038fd72 +Block 0000 [ 35]: f32e959bd493074a +Block 0000 [ 36]: 54e7f63fbdb5120c +Block 0000 [ 37]: 5f13118507e32e40 +Block 0000 [ 38]: 8cfd2f530eb342c6 +Block 0000 [ 39]: 42a4662bc122631e +Block 0000 [ 40]: 2f2a42c25eb6b1d0 +Block 0000 [ 41]: c614544be8fd0242 +Block 0000 [ 42]: 8bff294407d8be83 +Block 0000 [ 43]: 379e972199be20d0 +Block 0000 [ 44]: 7cdcb86a483bdb13 +Block 0000 [ 45]: 7a9efb775d45fd5d +Block 0000 [ 46]: 805dde2ff0070620 +Block 0000 [ 47]: 90dd43d77ad18c6f +Block 0000 [ 48]: 7ff0f47c081cd430 +Block 0000 [ 49]: 3b4bc5b40c3a8bb0 +Block 0000 [ 50]: 244fd293bf92f6f0 +Block 0000 [ 51]: 918b5d7d87043317 +Block 0000 [ 52]: 325716b7c7d591ac +Block 0000 [ 53]: 5827e7dc7460861d +Block 0000 [ 54]: 3afde4f1a339ba42 +Block 0000 [ 55]: 113ebacbd3fc27b5 +Block 0000 [ 56]: 7a392c2c66580dd2 +Block 0000 [ 57]: e78dc05db58e9e56 +Block 0000 [ 58]: 2ce081c891f27df0 +Block 0000 [ 59]: 498e7444269edb84 +Block 0000 [ 60]: 30f49d0dff3d19d9 +Block 0000 [ 61]: ebf523ff60b33bdf +Block 0000 [ 62]: 0c526595a91783b3 +Block 0000 [ 63]: bf93e7a4c4ca448a +Block 0000 [ 64]: eccc571eea4e0e3c +Block 0000 [ 65]: 0515ef24beec6eba +Block 0000 [ 66]: d4c7f0191146a785 +Block 0000 [ 67]: 28510792c00ea028 +Block 0000 [ 68]: eabbb492bb8ddc72 +Block 0000 [ 69]: 2b5630d0f66edb76 +Block 0000 [ 70]: c7900d53d49bd11a +Block 0000 [ 71]: a7397a31b873a4ed +Block 0000 [ 72]: a934024c7831ee82 +Block 0000 [ 73]: 99687c5827049c6e +Block 0000 [ 74]: 2463b0944f7afc99 +Block 0000 [ 75]: 127d0cea387336aa +Block 0000 [ 76]: cc47e487d5302850 +Block 0000 [ 77]: d0c679f4fb3f254f +Block 0000 [ 78]: 4de0fe5b2c042730 +Block 0000 [ 79]: 087acaa178249a56 +Block 0000 [ 80]: 716b39281e7f58e8 +Block 0000 [ 81]: 9684bb90ccd593d9 +Block 0000 [ 82]: e19085d10568c895 +Block 0000 [ 83]: bdc586c127426313 +Block 0000 [ 84]: e33ec65fad156adf +Block 0000 [ 85]: bd93ce1323fa699f +Block 0000 [ 86]: 3756176df8374754 +Block 0000 [ 87]: 1091998d92ded6ac +Block 0000 [ 88]: 683e5b4e92cb1ca6 +Block 0000 [ 89]: 778091253835a3eb +Block 0000 [ 90]: 07e28c26450e8693 +Block 0000 [ 91]: 1da773d2e6d92769 +Block 0000 [ 92]: 3989bc2c07ba9834 +Block 0000 [ 93]: 0d93ca091aad8e43 +Block 0000 [ 94]: 37af1ccf9e1cefa3 +Block 0000 [ 95]: 0fd62080ccb4ce31 +Block 0000 [ 96]: 03a1b7f8d0162e46 +Block 0000 [ 97]: 6ac173fb65e1cbbf +Block 0000 [ 98]: 189075a0659f064f +Block 0000 [ 99]: c29a285760117d92 +Block 0000 [100]: 247843ddcddc7890 +Block 0000 [101]: 1be24f8cb903a20a +Block 0000 [102]: 46eb5d3b470786ce +Block 0000 [103]: be56c4d643934ba1 +Block 0000 [104]: 9e651893bc735d5d +Block 0000 [105]: 4f871eaf1f794e49 +Block 0000 [106]: 56273f5a6c3b89f5 +Block 0000 [107]: 02ffd0b92501d42f +Block 0000 [108]: 4a5227dd9f8fa8d1 +Block 0000 [109]: 0a99d3c9b46c7166 +Block 0000 [110]: bb35852244977767 +Block 0000 [111]: 7cb7a53b429942f3 +Block 0000 [112]: 8e33186e83a78946 +Block 0000 [113]: 0f32b608e1669ccc +Block 0000 [114]: 21e1bff9df3954b3 +Block 0000 [115]: 75296cac5717c7cd +Block 0000 [116]: 8872ab5cd801dc1b +Block 0000 [117]: c603b4e7ead82b88 +Block 0000 [118]: 4947f3d801e8b66f +Block 0000 [119]: 5041f62cd217a07c +Block 0000 [120]: 71dfe74776cc6427 +Block 0000 [121]: 88c82a82688ebec4 +Block 0000 [122]: 0653c4287a96288b +Block 0000 [123]: 861f5e03145e80e3 +Block 0000 [124]: 1b6d130eb435f36c +Block 0000 [125]: d7e886df048e697c +Block 0000 [126]: 22b36cb1baeb62cd +Block 0000 [127]: b77f140e91100813 +Block 0001 [ 0]: 81124fce35cc5710 +Block 0001 [ 1]: 43ec50543b0faaac +Block 0001 [ 2]: 6c565d6733116dec +Block 0001 [ 3]: 1759dc023b510979 +Block 0001 [ 4]: 1b5519894c7b2078 +Block 0001 [ 5]: bc4bed6befe8d304 +Block 0001 [ 6]: 178492a875711577 +Block 0001 [ 7]: e1cbb4c720abb332 +Block 0001 [ 8]: 733611dc7bbae615 +Block 0001 [ 9]: 567709079916a34a +Block 0001 [ 10]: 36858b8177a813dc +Block 0001 [ 11]: 0dd1613f2a714398 +Block 0001 [ 12]: c5e7877dfbd1eaae +Block 0001 [ 13]: a315d2540b581798 +Block 0001 [ 14]: f18cfd0db8736089 +Block 0001 [ 15]: e7072ac65ddb839b +Block 0001 [ 16]: 3bed624365a97822 +Block 0001 [ 17]: 304a75bc092ee455 +Block 0001 [ 18]: 32a64b19179742b1 +Block 0001 [ 19]: c82223ccdc54d357 +Block 0001 [ 20]: 1eb47f0156342bbc +Block 0001 [ 21]: b36bebef735e1852 +Block 0001 [ 22]: 7fe800c212f0906c +Block 0001 [ 23]: 579d6218ce6fe61e +Block 0001 [ 24]: d4b3493b26c9f785 +Block 0001 [ 25]: 775ab9715439d3c5 +Block 0001 [ 26]: 2e630456603452e6 +Block 0001 [ 27]: 834cd73b296d494e +Block 0001 [ 28]: 553bbbf94cfff19c +Block 0001 [ 29]: e78310bf508983a6 +Block 0001 [ 30]: a352a63a40dda197 +Block 0001 [ 31]: e9cad1f6ed343b8b +Block 0001 [ 32]: 204d0835f3bf7718 +Block 0001 [ 33]: 47b32e01810c9d29 +Block 0001 [ 34]: c957ec19cd11646a +Block 0001 [ 35]: 255112dd67affbec +Block 0001 [ 36]: 348b305e17163ed5 +Block 0001 [ 37]: 56a926ac34bca1c8 +Block 0001 [ 38]: fa7a6a2922b31af6 +Block 0001 [ 39]: 1bd79c636e0f2a74 +Block 0001 [ 40]: 42519d33f9f14e23 +Block 0001 [ 41]: a85dda53cf3578dc +Block 0001 [ 42]: 304d870f2b18c29a +Block 0001 [ 43]: b892e91867ad87a3 +Block 0001 [ 44]: 0367569c89868574 +Block 0001 [ 45]: c047ce8c1af8ed45 +Block 0001 [ 46]: 7f6b62534d011f4f +Block 0001 [ 47]: 3b8a08ed0cd898bc +Block 0001 [ 48]: 579b179396a0c222 +Block 0001 [ 49]: 60111f485f3242b6 +Block 0001 [ 50]: ef8f04ab050255e2 +Block 0001 [ 51]: 5ca4ce2a56f8a405 +Block 0001 [ 52]: 1d0bc04b788dd5bf +Block 0001 [ 53]: fe0b8ea94c6e44fd +Block 0001 [ 54]: ac51b0ea5463fb69 +Block 0001 [ 55]: b53cc41288485a16 +Block 0001 [ 56]: 3b172d8c9ba1f26c +Block 0001 [ 57]: 755aaeabee7d1ed1 +Block 0001 [ 58]: ae6f57837889a218 +Block 0001 [ 59]: c4b68cf3ba7e9d31 +Block 0001 [ 60]: 785c5926588d66ad +Block 0001 [ 61]: 16ee9e11e724cac2 +Block 0001 [ 62]: 99aa9c0135bbd6c9 +Block 0001 [ 63]: fe66ef3ee8b5e358 +Block 0001 [ 64]: 7f6bd31c05aaea24 +Block 0001 [ 65]: 8c81895933056445 +Block 0001 [ 66]: 05a4b86707aa6002 +Block 0001 [ 67]: 4d096ba83f4475dc +Block 0001 [ 68]: b490dfd82309ef2a +Block 0001 [ 69]: 5a9260540e60db06 +Block 0001 [ 70]: 2474f0859aa0ac72 +Block 0001 [ 71]: 7300eacf9d86d2c1 +Block 0001 [ 72]: 1556af20a3ef8067 +Block 0001 [ 73]: 86c16a21ce83eb70 +Block 0001 [ 74]: 6b5302cadc4572c5 +Block 0001 [ 75]: 9b7922765f0e0354 +Block 0001 [ 76]: e3f2198c12a9712a +Block 0001 [ 77]: bf9819c3f7cc5a86 +Block 0001 [ 78]: afee5f2d3320b0bd +Block 0001 [ 79]: 379115408f928093 +Block 0001 [ 80]: 908219f9bcb28820 +Block 0001 [ 81]: 4665baf819453030 +Block 0001 [ 82]: c90a059a656fc183 +Block 0001 [ 83]: 33c3291622ecdf31 +Block 0001 [ 84]: 775a68f8b3966014 +Block 0001 [ 85]: 53ef801db9388b80 +Block 0001 [ 86]: 81cbda0dfbf65fa1 +Block 0001 [ 87]: fd4ac24b61d3c8d7 +Block 0001 [ 88]: 5e7046798be87806 +Block 0001 [ 89]: aa4e6b8bfcca95fb +Block 0001 [ 90]: a2001d03233b2f0e +Block 0001 [ 91]: 7d538530f96085a0 +Block 0001 [ 92]: d38f62f231f9b52e +Block 0001 [ 93]: 8dc3081a086d9daa +Block 0001 [ 94]: 883c50417dbaf081 +Block 0001 [ 95]: bd002bb540f35485 +Block 0001 [ 96]: cc68837fc25c9a87 +Block 0001 [ 97]: 4ed107bce88e73c1 +Block 0001 [ 98]: e7ff0c41a1e3bc4a +Block 0001 [ 99]: 488b1809f472dc9d +Block 0001 [100]: 35410408ece21800 +Block 0001 [101]: 7b50848a016e79cb +Block 0001 [102]: e985719d6f64a9b2 +Block 0001 [103]: 006df69a7bca976f +Block 0001 [104]: e890b263c7cc5970 +Block 0001 [105]: 35979016181fbbd2 +Block 0001 [106]: e4fff85feadc39b9 +Block 0001 [107]: 87f8a036894442e2 +Block 0001 [108]: 2c4dfff4c9de094a +Block 0001 [109]: 51b8eea696cbde4c +Block 0001 [110]: b8768c7bf0ac6cdb +Block 0001 [111]: 03ade3d5b85bd0de +Block 0001 [112]: 3e34032d46be2e95 +Block 0001 [113]: d552fe73d03a380d +Block 0001 [114]: 610b3c1ec2e06ab6 +Block 0001 [115]: fff69e45577af380 +Block 0001 [116]: cd645a3a107953e7 +Block 0001 [117]: 99edaeb0890c5417 +Block 0001 [118]: ac44c680e31c3d51 +Block 0001 [119]: 9b6a30e934f83dad +Block 0001 [120]: 31b9d0d40d03a80f +Block 0001 [121]: 1dc2ec1683f87714 +Block 0001 [122]: 4e6fd78afefad588 +Block 0001 [123]: 0a7857fe9c9ae15d +Block 0001 [124]: 5a894bc70b57a8f5 +Block 0001 [125]: 82a6248eefbd8c0c +Block 0001 [126]: ac1200ef990a5f7f +Block 0001 [127]: 7e2b809c5e620aca +Block 0002 [ 0]: ab531950d650d8de +Block 0002 [ 1]: afbbd0a8f33b8f3f +Block 0002 [ 2]: eae43ba8d1fada95 +Block 0002 [ 3]: 37a7c613b7bc4b8e +Block 0002 [ 4]: 797c0187f0118661 +Block 0002 [ 5]: e975fc3402de84be +Block 0002 [ 6]: 5f7211c91b7f2f1f +Block 0002 [ 7]: a82fccd7a5c06f12 +Block 0002 [ 8]: 99a47006ee9f1139 +Block 0002 [ 9]: f539ccdbc25a4cc1 +Block 0002 [ 10]: e71e6596f62cdd5a +Block 0002 [ 11]: 451148e009460163 +Block 0002 [ 12]: d9ee486b10b2806e +Block 0002 [ 13]: 33f5d1433c73585e +Block 0002 [ 14]: a8490151cb101d0d +Block 0002 [ 15]: da549e6dd1679df6 +Block 0002 [ 16]: 809e74b211e1b935 +Block 0002 [ 17]: df0bd60e619d438a +Block 0002 [ 18]: a6e4f669e3ef3bd6 +Block 0002 [ 19]: 2dbb7b100306ab24 +Block 0002 [ 20]: 9ec25a6c655e51da +Block 0002 [ 21]: 12c2c6acc71c45ef +Block 0002 [ 22]: 4a3b0beb690d22dc +Block 0002 [ 23]: c4bd5a1b4d874685 +Block 0002 [ 24]: 4eb892c29db734d7 +Block 0002 [ 25]: 682d40abc1e166f4 +Block 0002 [ 26]: 2f78b0124d8e32d7 +Block 0002 [ 27]: 2d2c778215c4ea0c +Block 0002 [ 28]: 6adfd023b9c5f338 +Block 0002 [ 29]: 05db2297aaf11e44 +Block 0002 [ 30]: a0f73a984d9e0238 +Block 0002 [ 31]: 2dd204256a5cb98b +Block 0002 [ 32]: 0ed19af8022fa4c1 +Block 0002 [ 33]: 627728cb1394e70d +Block 0002 [ 34]: 69672f8719e2e5dd +Block 0002 [ 35]: b39ccb2cbead4f2d +Block 0002 [ 36]: b43115927b03a204 +Block 0002 [ 37]: b29801888849ff61 +Block 0002 [ 38]: 2264364d78cf3b02 +Block 0002 [ 39]: f7ba1d0121f6ef7c +Block 0002 [ 40]: fa25d47c97fa15ac +Block 0002 [ 41]: 89d5f89c7be0bb71 +Block 0002 [ 42]: c49cb4541a91cff2 +Block 0002 [ 43]: 874cd8a4985d7834 +Block 0002 [ 44]: c19261e8fcea632c +Block 0002 [ 45]: 5c1502cfccc2fd3f +Block 0002 [ 46]: 2da9a13eda8e52a1 +Block 0002 [ 47]: 02f150e62533f71f +Block 0002 [ 48]: edee37caa7ee96f9 +Block 0002 [ 49]: e4f1a0e7a4b3c668 +Block 0002 [ 50]: fc406148b9820e81 +Block 0002 [ 51]: 61483457659a1799 +Block 0002 [ 52]: 0e1206f1271f31c8 +Block 0002 [ 53]: 3ff4bbc6d461f3ac +Block 0002 [ 54]: 9e90a4737c444a98 +Block 0002 [ 55]: 22842091eb2c29a4 +Block 0002 [ 56]: 1ca1cde6be37047e +Block 0002 [ 57]: f1e25e0707ef49aa +Block 0002 [ 58]: a38d779f21fb8b07 +Block 0002 [ 59]: 74da26b2d7e0d0de +Block 0002 [ 60]: 46940323ba8bef91 +Block 0002 [ 61]: c9847d40fab9bfa0 +Block 0002 [ 62]: a9ccbe9433dbf6b6 +Block 0002 [ 63]: 62d4ee530f84a01e +Block 0002 [ 64]: 5369331cd64476b9 +Block 0002 [ 65]: 71ba63d911ac6a6b +Block 0002 [ 66]: 8cc19167baf65398 +Block 0002 [ 67]: 3fe137a2879f96b4 +Block 0002 [ 68]: 23dfc6dd2b17a041 +Block 0002 [ 69]: fd166bb09127747f +Block 0002 [ 70]: f3af31fbfab8d809 +Block 0002 [ 71]: 1d2ea2a7374e0840 +Block 0002 [ 72]: ac710d268cf4fedf +Block 0002 [ 73]: d6beb900625d1592 +Block 0002 [ 74]: 3b1486fa3ecd52d7 +Block 0002 [ 75]: 5dfd7eb55f80fff5 +Block 0002 [ 76]: c4920a178a657dee +Block 0002 [ 77]: 3063bc7bc258632e +Block 0002 [ 78]: 08c72633ff8367e8 +Block 0002 [ 79]: de6c96890b8211fa +Block 0002 [ 80]: d533e2e5b99f9a89 +Block 0002 [ 81]: 42b6177c238f3592 +Block 0002 [ 82]: 45db675f166d2098 +Block 0002 [ 83]: 1aa0362d889db002 +Block 0002 [ 84]: 5fb5a8a899e7bbcc +Block 0002 [ 85]: ec4a77566773352f +Block 0002 [ 86]: 2809156527466d15 +Block 0002 [ 87]: 2395d97c5e4a147a +Block 0002 [ 88]: b7c8d8a20eb785cf +Block 0002 [ 89]: 55929cfe6fed4017 +Block 0002 [ 90]: 796542310b3a982b +Block 0002 [ 91]: 430a76aedcbd90e8 +Block 0002 [ 92]: 91ca8acd0ac2e067 +Block 0002 [ 93]: 8e50acb8e6952585 +Block 0002 [ 94]: 16df2d074b132b4b +Block 0002 [ 95]: 6ba2c1cefbcd3d32 +Block 0002 [ 96]: 4ca35f90ee6f3c02 +Block 0002 [ 97]: 1f4823f43e7e6f71 +Block 0002 [ 98]: b903b08436d87058 +Block 0002 [ 99]: 38245ec648896e53 +Block 0002 [100]: 14e189a61fd2515a +Block 0002 [101]: ef047f9f62ff6510 +Block 0002 [102]: e72313e49aea7f82 +Block 0002 [103]: 9d9d1757de6992f5 +Block 0002 [104]: ea4e379b2df83c29 +Block 0002 [105]: 4478302ccd041aad +Block 0002 [106]: 4990a52062b9ac3a +Block 0002 [107]: 83a0f64a2dea0624 +Block 0002 [108]: d55acd58d33318fd +Block 0002 [109]: e458ab245697ea63 +Block 0002 [110]: 49d0c9d161371688 +Block 0002 [111]: ea5b74ea5b08df9d +Block 0002 [112]: 1a8c184bdd4c5d10 +Block 0002 [113]: f2f629e6d8394674 +Block 0002 [114]: 220964837a6027fe +Block 0002 [115]: 0bc1a4f85c884971 +Block 0002 [116]: c3f1f53a0ac51dc6 +Block 0002 [117]: 80a8dc394d87d919 +Block 0002 [118]: 6d1280c6a5c91b09 +Block 0002 [119]: eccddb278024b896 +Block 0002 [120]: 52647d0bba74326c +Block 0002 [121]: 7f3932ec89410d41 +Block 0002 [122]: 191c10651d52883e +Block 0002 [123]: 090ec2202a9104ba +Block 0002 [124]: da6067ea0f944450 +Block 0002 [125]: 9c0972bbbc1bf1ae +Block 0002 [126]: 3c76df28bddfe68c +Block 0002 [127]: 0c5f6c7f878eeb0b +Block 0003 [ 0]: 900b4b46200c544c +Block 0003 [ 1]: 615068c6f1fa70ed +Block 0003 [ 2]: 541d13b0280f8175 +Block 0003 [ 3]: 2082941de980cd5a +Block 0003 [ 4]: e8bccb1c26ab9eca +Block 0003 [ 5]: 0eb12abb2cf24ebe +Block 0003 [ 6]: bab6e5aaa8018b20 +Block 0003 [ 7]: 89c0c47763af65c5 +Block 0003 [ 8]: 95a65ab140f1a880 +Block 0003 [ 9]: fa3be1c08532ac8c +Block 0003 [ 10]: abd4a26b5bca2cef +Block 0003 [ 11]: 9508af0ae337fb13 +Block 0003 [ 12]: 13cdb71b243ba1f5 +Block 0003 [ 13]: b8bd7f941f99939b +Block 0003 [ 14]: eedb84a6e3a05437 +Block 0003 [ 15]: ee12d5518952c311 +Block 0003 [ 16]: 8112689e24a4e808 +Block 0003 [ 17]: 7636f3bf1162eacb +Block 0003 [ 18]: a0c0dc2987fd137c +Block 0003 [ 19]: c0ddfb772fca4563 +Block 0003 [ 20]: aae0e0cd7d6ebd31 +Block 0003 [ 21]: b2379a164f186276 +Block 0003 [ 22]: f19ea49023ba40d6 +Block 0003 [ 23]: d105094e90aef0f4 +Block 0003 [ 24]: 7318160321ff1700 +Block 0003 [ 25]: 341d4c2f419d17e0 +Block 0003 [ 26]: 9d0f35e38570b55e +Block 0003 [ 27]: 6bec7aa0ed8e99e2 +Block 0003 [ 28]: c25d45befa00a97f +Block 0003 [ 29]: 88fed968820f8c7a +Block 0003 [ 30]: bd3ba51f94404e43 +Block 0003 [ 31]: 505f67420bf9ff3b +Block 0003 [ 32]: aadc81c468be4ade +Block 0003 [ 33]: d9d04aa55df15541 +Block 0003 [ 34]: a9d4605b808b26ed +Block 0003 [ 35]: 77c0c653d677e5f4 +Block 0003 [ 36]: 66cf4b2c33ba1287 +Block 0003 [ 37]: 2159d8f669619152 +Block 0003 [ 38]: 277494e693e2260c +Block 0003 [ 39]: 6a4efa2a28476fbb +Block 0003 [ 40]: 6d89a658a8eb3a87 +Block 0003 [ 41]: 6643282f4e2e20b7 +Block 0003 [ 42]: 8d73318f6b37ba20 +Block 0003 [ 43]: 7ac12f40ea088cc1 +Block 0003 [ 44]: 039ab18a2301f45e +Block 0003 [ 45]: ee739603d11dd438 +Block 0003 [ 46]: a2d0758ff2bb7b61 +Block 0003 [ 47]: 6f7513923aa239c5 +Block 0003 [ 48]: 479251793a6d48a8 +Block 0003 [ 49]: bbd36f9d5c56e87a +Block 0003 [ 50]: 31f653eaa9248c6c +Block 0003 [ 51]: 59178b13140a219d +Block 0003 [ 52]: f0c95af03d8f1f07 +Block 0003 [ 53]: a0d93bfd437f6a41 +Block 0003 [ 54]: 9921b64737fbc37c +Block 0003 [ 55]: d513001e5cb70077 +Block 0003 [ 56]: e90e86c3875d03f9 +Block 0003 [ 57]: f77c90cb5f773667 +Block 0003 [ 58]: 842c4f09e1d44a70 +Block 0003 [ 59]: 9473717f368e17ef +Block 0003 [ 60]: 2fa7191e160f1367 +Block 0003 [ 61]: 188343023d77c117 +Block 0003 [ 62]: f90ab2a6f3513ddb +Block 0003 [ 63]: ef07e1df547670de +Block 0003 [ 64]: 490a9760f108ceba +Block 0003 [ 65]: e6bba096cca0cc3d +Block 0003 [ 66]: 88afb830cf0d6afc +Block 0003 [ 67]: a24603d655ac3411 +Block 0003 [ 68]: c92928a948c09aaf +Block 0003 [ 69]: 0b235502de082b53 +Block 0003 [ 70]: 68e2d92139a102a1 +Block 0003 [ 71]: db636a19651b1a8f +Block 0003 [ 72]: 55fb8586acbeb7bd +Block 0003 [ 73]: 59ee9cfe10e2852e +Block 0003 [ 74]: 9cfce7017ba9c310 +Block 0003 [ 75]: ce69b85ed419b61d +Block 0003 [ 76]: 8e537f5cd92f07d5 +Block 0003 [ 77]: 0936bcb0af45c502 +Block 0003 [ 78]: addef0747ad3a8b3 +Block 0003 [ 79]: 9f33d7ea62dbaaf0 +Block 0003 [ 80]: cc7c8f4bd3d7277c +Block 0003 [ 81]: 63a72c0deaaeedba +Block 0003 [ 82]: 388eab0b99643af1 +Block 0003 [ 83]: 043e0dbc4e83be89 +Block 0003 [ 84]: 3ff59b09ab580288 +Block 0003 [ 85]: 70e006315ebdd36f +Block 0003 [ 86]: 47539c3896477284 +Block 0003 [ 87]: 0e94787998b6ef6c +Block 0003 [ 88]: be9581f1e03e87c9 +Block 0003 [ 89]: f601b4d2eb8452a9 +Block 0003 [ 90]: d833a7b59bf0ce2e +Block 0003 [ 91]: 636c7c907e257e8c +Block 0003 [ 92]: 9e60534288ef4d3f +Block 0003 [ 93]: 06e24a4afbfe1966 +Block 0003 [ 94]: a583680ac97a5613 +Block 0003 [ 95]: e095788f1dff0b5b +Block 0003 [ 96]: 24dbe8854bbd48d2 +Block 0003 [ 97]: 7319443a645f08f9 +Block 0003 [ 98]: 1cf2b175e298deca +Block 0003 [ 99]: 2d2763dc7e9eda81 +Block 0003 [100]: dc126b0b72b35bf1 +Block 0003 [101]: 93a439b4fd315f79 +Block 0003 [102]: 78d19ab12b8c62e6 +Block 0003 [103]: 6a99a2c98bb11d86 +Block 0003 [104]: 0eb95ec61f83e17d +Block 0003 [105]: 52f93eae017bdcde +Block 0003 [106]: f17fe7695bfab7db +Block 0003 [107]: 383c915348e737f8 +Block 0003 [108]: 7914b38aba5db79c +Block 0003 [109]: d8d1c709cb8f241e +Block 0003 [110]: 294637fa5e5c37ed +Block 0003 [111]: 141f9ef0a4fe5043 +Block 0003 [112]: d8b7cff4b0ee2ad1 +Block 0003 [113]: eecd8ab86cd37c3b +Block 0003 [114]: 687500a2b5b4f93f +Block 0003 [115]: 44d162fe6c806b6e +Block 0003 [116]: 1ec5716982b0455c +Block 0003 [117]: cd14a043b1d36a07 +Block 0003 [118]: 65e6ba21c7bc7a01 +Block 0003 [119]: 75dd70547da224a6 +Block 0003 [120]: 34f11d3e0d8cc470 +Block 0003 [121]: a570799323b61b23 +Block 0003 [122]: b5179a8f90876b2c +Block 0003 [123]: ca8c1f20370d6660 +Block 0003 [124]: b2cc48f3ba63ce4a +Block 0003 [125]: b7d244b86a5bec49 +Block 0003 [126]: 652da4cd7f33df45 +Block 0003 [127]: 428a6992769973ce +Block 0004 [ 0]: 61b02e80b3742763 +Block 0004 [ 1]: 7e4bbe3e73625805 +Block 0004 [ 2]: 9790e6cd9c3c8462 +Block 0004 [ 3]: 1df4ccf80bf227b5 +Block 0004 [ 4]: 4ff867d3cbffcba1 +Block 0004 [ 5]: 95bd5d47bbf4659f +Block 0004 [ 6]: 09a513dbaf9233e3 +Block 0004 [ 7]: f1baabf4d227a53a +Block 0004 [ 8]: e50869ba195d6894 +Block 0004 [ 9]: ff35af7749193c12 +Block 0004 [ 10]: 5e7bc4a2e3ebbe22 +Block 0004 [ 11]: 11b86088eb9621f6 +Block 0004 [ 12]: 86e651a025016040 +Block 0004 [ 13]: 55e06a939610f6a9 +Block 0004 [ 14]: fc2beb0ea89cc482 +Block 0004 [ 15]: c8ad6ac2bae5f83e +Block 0004 [ 16]: 03bc33fff2eb1397 +Block 0004 [ 17]: b5c261acc0f09c2a +Block 0004 [ 18]: 4341b9dbdf7fc906 +Block 0004 [ 19]: 50087675709002b7 +Block 0004 [ 20]: 31b7a5a936823271 +Block 0004 [ 21]: daafcb9b596d616f +Block 0004 [ 22]: 110b5732b99d44e8 +Block 0004 [ 23]: 398968e362e86395 +Block 0004 [ 24]: 504a5d24eaf60bd9 +Block 0004 [ 25]: ac01c13c036ce4ea +Block 0004 [ 26]: 5a78894638c5997d +Block 0004 [ 27]: d036b615e6fad450 +Block 0004 [ 28]: 19590cb7addd10d3 +Block 0004 [ 29]: df16c271a9d2f62f +Block 0004 [ 30]: 77c26a898e5afeb8 +Block 0004 [ 31]: c94fe3300508a570 +Block 0004 [ 32]: 0459cadd307ce63c +Block 0004 [ 33]: a788a865094778af +Block 0004 [ 34]: 87d7fff2870f9b3a +Block 0004 [ 35]: beac32cc09233860 +Block 0004 [ 36]: c742017d94927d64 +Block 0004 [ 37]: 96eb65f7d55dc6b8 +Block 0004 [ 38]: 743f7a221041ffbd +Block 0004 [ 39]: 08770530af9fa225 +Block 0004 [ 40]: a6f3a50f3e197a38 +Block 0004 [ 41]: 412cd2c6a82d7310 +Block 0004 [ 42]: afa426a667e12057 +Block 0004 [ 43]: 5782330a3c19f0b6 +Block 0004 [ 44]: be1c3e6883a0cb0e +Block 0004 [ 45]: 3df0ec64890ea638 +Block 0004 [ 46]: 56288a35cf5aafbf +Block 0004 [ 47]: 55ecfc3aab7211ac +Block 0004 [ 48]: 362fd07efe33163c +Block 0004 [ 49]: 10320ae4802a7e1a +Block 0004 [ 50]: db36f926291f2f23 +Block 0004 [ 51]: bd8ef19f5cb6749a +Block 0004 [ 52]: 362419cdfa58aa47 +Block 0004 [ 53]: 6ccc46d502e8389b +Block 0004 [ 54]: d489a2400b6489ff +Block 0004 [ 55]: 6781ec15707fedbd +Block 0004 [ 56]: b3b2f0f1f23caa08 +Block 0004 [ 57]: 382870e8ab1f2bcb +Block 0004 [ 58]: 00fac8357b77af84 +Block 0004 [ 59]: 1d1bb0ac845b3bb3 +Block 0004 [ 60]: bf88c0aac2057a72 +Block 0004 [ 61]: 5224c313bf757c14 +Block 0004 [ 62]: 9cb8edce4fcd9f3d +Block 0004 [ 63]: ee5b8b3f1b45c6bc +Block 0004 [ 64]: 92941e57904256e2 +Block 0004 [ 65]: 3410ce980b6075cd +Block 0004 [ 66]: 4c2a6351368555d4 +Block 0004 [ 67]: 7192ebc6e89fa9da +Block 0004 [ 68]: ae566e908918769e +Block 0004 [ 69]: 469bdcf0eb62d144 +Block 0004 [ 70]: 7605e6b1f8d0ebe9 +Block 0004 [ 71]: 5ad66be7fc63f10d +Block 0004 [ 72]: 184ae200186ceaba +Block 0004 [ 73]: a2fd668b31a0247e +Block 0004 [ 74]: 6cfa785e22b348f8 +Block 0004 [ 75]: 09b9f880d8d0e434 +Block 0004 [ 76]: 642517279598b38e +Block 0004 [ 77]: cd70e90d7bc4844a +Block 0004 [ 78]: 1cf34c8fbc595a38 +Block 0004 [ 79]: 92d7f6b098188e10 +Block 0004 [ 80]: 9fff24b7d7e875ff +Block 0004 [ 81]: 89fb31a1adecd0ca +Block 0004 [ 82]: 390c984f20f90dd8 +Block 0004 [ 83]: db611b87ccee8357 +Block 0004 [ 84]: d7c03146d2095e03 +Block 0004 [ 85]: 0d673441a5213ee2 +Block 0004 [ 86]: 3bf960e76ad98bf2 +Block 0004 [ 87]: 15ba7ca167b4fc58 +Block 0004 [ 88]: 2f8e1e77cb6059f3 +Block 0004 [ 89]: 230ad60f2c671f48 +Block 0004 [ 90]: c126fbb6f4664282 +Block 0004 [ 91]: bc37cb058c16f1af +Block 0004 [ 92]: 25b5b798646af7b8 +Block 0004 [ 93]: 41660c72b268e9fc +Block 0004 [ 94]: ac7bd5845cdb1ad1 +Block 0004 [ 95]: 9071233c92d8571b +Block 0004 [ 96]: 262c8f321ce0f391 +Block 0004 [ 97]: 3bb8082c589edf4f +Block 0004 [ 98]: 9d995d6561df731c +Block 0004 [ 99]: a68fcc1451a03d2a +Block 0004 [100]: 47ba7944bbd6d890 +Block 0004 [101]: 241167f695259047 +Block 0004 [102]: b3aead0264ffffd1 +Block 0004 [103]: 6c1a163b6c3a5822 +Block 0004 [104]: b03149730b57a7f9 +Block 0004 [105]: e5ba3f27b2107055 +Block 0004 [106]: d2b99238801a8045 +Block 0004 [107]: 4d64f86efc903560 +Block 0004 [108]: 91d8cfea06ed3527 +Block 0004 [109]: d89d6a658d7b6d16 +Block 0004 [110]: 5bdff6f547dd7cf9 +Block 0004 [111]: 68a46fd7b88d76ca +Block 0004 [112]: 7a139992edf32a73 +Block 0004 [113]: d8d8f02739b14a2c +Block 0004 [114]: 4afc51977b857384 +Block 0004 [115]: 593d06a3b1553ab4 +Block 0004 [116]: d21e157f895b9e53 +Block 0004 [117]: c36a81244ef9742a +Block 0004 [118]: acb7d5a719a87b5f +Block 0004 [119]: c81acf2539e71b78 +Block 0004 [120]: cb8b1d5dc9ab6dae +Block 0004 [121]: 40fb035745072ee1 +Block 0004 [122]: 33995806abd29a5b +Block 0004 [123]: 32095e26c80ce6e4 +Block 0004 [124]: 59b15a44c845141d +Block 0004 [125]: bd3f0650de4e7544 +Block 0004 [126]: 9e7a71f80dc928fa +Block 0004 [127]: 15cb1ef5d3503f23 +Block 0005 [ 0]: 2407d195e807548c +Block 0005 [ 1]: ad26e752874ecef7 +Block 0005 [ 2]: 8e956c0210f8a850 +Block 0005 [ 3]: f0823911ea3dc266 +Block 0005 [ 4]: 8ca2efdc25c95c1a +Block 0005 [ 5]: b1b295e6d5938e90 +Block 0005 [ 6]: 61e589e7bc7ee50a +Block 0005 [ 7]: 70f8b036f79e182c +Block 0005 [ 8]: d3b2034f7eb8397e +Block 0005 [ 9]: ed85a59503e729b2 +Block 0005 [ 10]: a59b1e9d7ac407f0 +Block 0005 [ 11]: 18e4697aff4d626e +Block 0005 [ 12]: 48f23c53a192e907 +Block 0005 [ 13]: 0353e7f7a3399bc7 +Block 0005 [ 14]: c20df991d82562c8 +Block 0005 [ 15]: 87e4856a098eff96 +Block 0005 [ 16]: c6609c87275e754e +Block 0005 [ 17]: 648ab718ca0925cf +Block 0005 [ 18]: e8697ef67043a622 +Block 0005 [ 19]: 269e9739151af066 +Block 0005 [ 20]: f770e93308cd4431 +Block 0005 [ 21]: a04fcb290799218f +Block 0005 [ 22]: 59794f1b24bf075b +Block 0005 [ 23]: be22ca6ca634779f +Block 0005 [ 24]: e513bdcc17002a69 +Block 0005 [ 25]: 990138964e16fdab +Block 0005 [ 26]: fcc15a89ed35c704 +Block 0005 [ 27]: 72d582eaac1af2b9 +Block 0005 [ 28]: 967f93d54b867ef4 +Block 0005 [ 29]: 26b2833e0a4acd9f +Block 0005 [ 30]: 879536890775795c +Block 0005 [ 31]: deda9793b9079cbc +Block 0005 [ 32]: 40277ca0d59f9553 +Block 0005 [ 33]: fd363f7c9c4a6785 +Block 0005 [ 34]: f9de8f1d3f2c0e67 +Block 0005 [ 35]: 71369da8fff5907c +Block 0005 [ 36]: bce335eab4d82e69 +Block 0005 [ 37]: 9fc21e6cdd0d1703 +Block 0005 [ 38]: e434cb9db85055b1 +Block 0005 [ 39]: 9d46064ec1920847 +Block 0005 [ 40]: 215478858606f725 +Block 0005 [ 41]: 6f5cebdb2261f718 +Block 0005 [ 42]: 581ec1c91f3d7950 +Block 0005 [ 43]: ec09884a2f860205 +Block 0005 [ 44]: 016e9b7dd3e34056 +Block 0005 [ 45]: ecf6fadac4ec557e +Block 0005 [ 46]: 911fdf83e6dd3f16 +Block 0005 [ 47]: 43e1c6222f494622 +Block 0005 [ 48]: 67ccba4578b4514a +Block 0005 [ 49]: 518530888f2bf6c1 +Block 0005 [ 50]: cab80f10eb75afc7 +Block 0005 [ 51]: c1311903e3e18720 +Block 0005 [ 52]: 24b9703f88280748 +Block 0005 [ 53]: bc46a3e55ea93315 +Block 0005 [ 54]: 2ef89852f18c8127 +Block 0005 [ 55]: af8a0afc790b5578 +Block 0005 [ 56]: 62fb6e62bbc51408 +Block 0005 [ 57]: 867eee397ba52395 +Block 0005 [ 58]: be71ea6f48ab5c12 +Block 0005 [ 59]: 9f69cc05adf942d6 +Block 0005 [ 60]: 83a151c54916331b +Block 0005 [ 61]: 5d3a15c2e8af73f4 +Block 0005 [ 62]: f9f93eb16073140d +Block 0005 [ 63]: 0910cd3454b972f2 +Block 0005 [ 64]: d005e33b360488ce +Block 0005 [ 65]: a736866bbcf4ffca +Block 0005 [ 66]: b28e1240544033f8 +Block 0005 [ 67]: efd0572e93a73dc2 +Block 0005 [ 68]: eca676cca54e0ab7 +Block 0005 [ 69]: 3cee98c6a68f966f +Block 0005 [ 70]: a64b18091a53a60d +Block 0005 [ 71]: a995405e7bae7c46 +Block 0005 [ 72]: 2f78d1dcb0d0b9d1 +Block 0005 [ 73]: 1599269b0c2b7437 +Block 0005 [ 74]: 10aea6df58285014 +Block 0005 [ 75]: eb818d62aef8326c +Block 0005 [ 76]: 2d0dcaf1692efb64 +Block 0005 [ 77]: 5bacab67370fccd0 +Block 0005 [ 78]: 009f834eb54066b0 +Block 0005 [ 79]: 74864cfcea1d792a +Block 0005 [ 80]: 12ac904270b3fc5d +Block 0005 [ 81]: c006df57f8fd380c +Block 0005 [ 82]: 3ef11bbc90a1db48 +Block 0005 [ 83]: 889ef4b880ea6ecb +Block 0005 [ 84]: 4df0d8edb2998f16 +Block 0005 [ 85]: 3244d5eb9c8f6c52 +Block 0005 [ 86]: db58706bfff2bb30 +Block 0005 [ 87]: 8acb6d2afb8d1c9d +Block 0005 [ 88]: 8dd675246a44ed27 +Block 0005 [ 89]: f74402d04b7ec003 +Block 0005 [ 90]: d65b9bad8454198d +Block 0005 [ 91]: 3a797de67bd036be +Block 0005 [ 92]: 276fdd9689e47ba3 +Block 0005 [ 93]: 5f7038a2ab05ed2c +Block 0005 [ 94]: fe99c638c6fd40b7 +Block 0005 [ 95]: e3b66576ea866d69 +Block 0005 [ 96]: 8e71e25e4507d7c7 +Block 0005 [ 97]: 66c0a136a58be7df +Block 0005 [ 98]: ff379f99bf7eff87 +Block 0005 [ 99]: 7efd44f99e27d64e +Block 0005 [100]: 14a4178d8cbceaa0 +Block 0005 [101]: 127f27d7ac910aa2 +Block 0005 [102]: 6d1b02b836d71016 +Block 0005 [103]: 9e3d713b59e00ec2 +Block 0005 [104]: b20d6c08dc20ba5f +Block 0005 [105]: 829c1593f35d8c24 +Block 0005 [106]: dfbc57940e7617f4 +Block 0005 [107]: c9307700a9a945d8 +Block 0005 [108]: e3ffdba608ed4a2b +Block 0005 [109]: e4e0a880030cfd51 +Block 0005 [110]: e82581940a60a73f +Block 0005 [111]: 961f7c02492c8ad0 +Block 0005 [112]: 7b68992d2ec8bfec +Block 0005 [113]: a9ed907126332abe +Block 0005 [114]: 1e9ff58ebb76a6e1 +Block 0005 [115]: 6df86aab244d8840 +Block 0005 [116]: df4e831b85698b17 +Block 0005 [117]: 11207ef7be5bfb12 +Block 0005 [118]: 3f01cfd40c02f939 +Block 0005 [119]: acde7f4b1ef88c4a +Block 0005 [120]: 16ba6e86679b1fc6 +Block 0005 [121]: 0425258ae0bff899 +Block 0005 [122]: dd3f322d634c7ee4 +Block 0005 [123]: facf4e27f9226ef2 +Block 0005 [124]: 5219c0be52c577cb +Block 0005 [125]: 5d75edbd61cfcd91 +Block 0005 [126]: 1e605cef3901869b +Block 0005 [127]: efb73d6caa30c73e +Block 0006 [ 0]: 3ff3a1afd0287ee4 +Block 0006 [ 1]: 8ca4bc3a401187fd +Block 0006 [ 2]: d6deee7adb44fba7 +Block 0006 [ 3]: 8470d1f12ed83a47 +Block 0006 [ 4]: 360da0d7a0ef1a64 +Block 0006 [ 5]: 9445900620a0a602 +Block 0006 [ 6]: 74f4f0bfdfb57627 +Block 0006 [ 7]: a9554312a94fba41 +Block 0006 [ 8]: 440d33dddeb8e7a4 +Block 0006 [ 9]: 1cfeca050ed3777f +Block 0006 [ 10]: 378d6e95e3ba9e2e +Block 0006 [ 11]: c7873bfc22f0b158 +Block 0006 [ 12]: 7615f8f3ea9d5066 +Block 0006 [ 13]: c192d1eace8734c7 +Block 0006 [ 14]: 59001048d79ce77a +Block 0006 [ 15]: 24a85dd3291370d1 +Block 0006 [ 16]: 26015473273796de +Block 0006 [ 17]: 2111331b5d78a152 +Block 0006 [ 18]: 59a673addca8de42 +Block 0006 [ 19]: 01af263b093990d1 +Block 0006 [ 20]: 51164c5ef3541c08 +Block 0006 [ 21]: 1fd97bf87d831222 +Block 0006 [ 22]: 06062501657f1216 +Block 0006 [ 23]: ce7591de5d57b2c6 +Block 0006 [ 24]: 66c5854489d1e428 +Block 0006 [ 25]: 645ef5b210eba0a2 +Block 0006 [ 26]: 1f491e6a4e84ea25 +Block 0006 [ 27]: 7213087c5172a501 +Block 0006 [ 28]: c7b25be9ee141c2b +Block 0006 [ 29]: 9976c16c2781fdba +Block 0006 [ 30]: c29356f98d3db616 +Block 0006 [ 31]: aa386b24200a43dc +Block 0006 [ 32]: fe70bb4bec6b5b41 +Block 0006 [ 33]: 32c2b83189c14540 +Block 0006 [ 34]: a23a4380e66c805b +Block 0006 [ 35]: b8ab5c47ad64932f +Block 0006 [ 36]: 10725e3944caf2cc +Block 0006 [ 37]: f2e966b3dbc19222 +Block 0006 [ 38]: 30e5235f28c74dc7 +Block 0006 [ 39]: b54130ec0ccbec56 +Block 0006 [ 40]: f3625f5da42b7608 +Block 0006 [ 41]: 03ac15b3e4169a49 +Block 0006 [ 42]: 2b6a38cb869b0513 +Block 0006 [ 43]: 2eaeccba916989e2 +Block 0006 [ 44]: 05de41a48fd7b5f3 +Block 0006 [ 45]: 0803930bd83b9dfd +Block 0006 [ 46]: 8f9df1a8fbc17c4f +Block 0006 [ 47]: fec29c915cc85d6f +Block 0006 [ 48]: d59694a63eb621bb +Block 0006 [ 49]: ad0039ddfa6f7c94 +Block 0006 [ 50]: e6c51080e91e2c65 +Block 0006 [ 51]: 9af773fba01cfa91 +Block 0006 [ 52]: d5925d2b89484ba4 +Block 0006 [ 53]: ecf696532e4fdd23 +Block 0006 [ 54]: f0df670517da09bc +Block 0006 [ 55]: ea7e01665a3cf857 +Block 0006 [ 56]: 5bc706445614cb34 +Block 0006 [ 57]: d8c70f6ea4efa21c +Block 0006 [ 58]: 65cece98eb9de6b0 +Block 0006 [ 59]: 034d88bb29152fe2 +Block 0006 [ 60]: 5a87695852af3a27 +Block 0006 [ 61]: c1dc8d2c14ed9a61 +Block 0006 [ 62]: 7085ba9e2f9465e9 +Block 0006 [ 63]: 4f27ca7fc1d5e71b +Block 0006 [ 64]: fb73df4ffb4471c5 +Block 0006 [ 65]: 34ddabe0f1cb85a0 +Block 0006 [ 66]: 722b6f02d3545f03 +Block 0006 [ 67]: 0a58e8a36fddff54 +Block 0006 [ 68]: 2e97d1e015bf2f63 +Block 0006 [ 69]: 776125a3910e5d4f +Block 0006 [ 70]: 729397c1d34cdea8 +Block 0006 [ 71]: 64597d1994f4d652 +Block 0006 [ 72]: d6992e763e6b1840 +Block 0006 [ 73]: 3993b16e66ede21a +Block 0006 [ 74]: a0be3073b4e14898 +Block 0006 [ 75]: f46816ac0e771788 +Block 0006 [ 76]: a46a90f9a7afeccb +Block 0006 [ 77]: fccd118b8fea8bd5 +Block 0006 [ 78]: b54dab5d51abd35b +Block 0006 [ 79]: 547391e2f8849128 +Block 0006 [ 80]: 3419a829cc70d369 +Block 0006 [ 81]: f360b66e6e553ad0 +Block 0006 [ 82]: 4fd56e15625edc4d +Block 0006 [ 83]: c9a47e605b88d954 +Block 0006 [ 84]: 0664eb35ef23db11 +Block 0006 [ 85]: cae0f76f194aa390 +Block 0006 [ 86]: c7dfd32a29944973 +Block 0006 [ 87]: 752bc7b7cf0fcb1b +Block 0006 [ 88]: bfe3dc9327344fcc +Block 0006 [ 89]: 9896372af3cd20ef +Block 0006 [ 90]: 7b4ede0b565b084c +Block 0006 [ 91]: 5b487d697f173dc4 +Block 0006 [ 92]: 1daa7c1f5f228977 +Block 0006 [ 93]: 7a6c2f3b95e1caff +Block 0006 [ 94]: 7f36d68986a0d334 +Block 0006 [ 95]: 200bee502f854de3 +Block 0006 [ 96]: 888eb05b94542d07 +Block 0006 [ 97]: d8351131c91ec207 +Block 0006 [ 98]: 93a9257e9aa1fea1 +Block 0006 [ 99]: e4aa639e529bcd51 +Block 0006 [100]: f399e0dd84eb87d4 +Block 0006 [101]: e30a3a4b710ab0e0 +Block 0006 [102]: 201575d6c8b2cf4c +Block 0006 [103]: 4f2f409fa698e1c6 +Block 0006 [104]: c31d6e53d8ff5c77 +Block 0006 [105]: 2a03c26df00ad954 +Block 0006 [106]: 7bf48d33462027ac +Block 0006 [107]: 69c7a27ac1f42530 +Block 0006 [108]: 5f8655cb9f1caf86 +Block 0006 [109]: c75036252990cd7a +Block 0006 [110]: 836c76f7f654afa3 +Block 0006 [111]: 1f662ad2c72fb72a +Block 0006 [112]: c3193d05baf51ec5 +Block 0006 [113]: be6f4e4e3d55b8f2 +Block 0006 [114]: 6357f734699f9364 +Block 0006 [115]: e010aa2880f76f07 +Block 0006 [116]: c63892677e1ca8d7 +Block 0006 [117]: a97c8af5b70ad709 +Block 0006 [118]: 485e66af8cf92518 +Block 0006 [119]: 3d2554521a20a959 +Block 0006 [120]: ecaad94a70b67b4d +Block 0006 [121]: 28d5edff6ba11007 +Block 0006 [122]: 5203c747cc86bc72 +Block 0006 [123]: 1039392bca8ed32a +Block 0006 [124]: 90e4d2fd2838c6b8 +Block 0006 [125]: 1df342bc30f9e4b3 +Block 0006 [126]: 824417f3d1e2d67a +Block 0006 [127]: 49f96e7286a4e916 +Block 0007 [ 0]: 84354e382811563e +Block 0007 [ 1]: 45743b71925744fc +Block 0007 [ 2]: 3ba51f6da99da397 +Block 0007 [ 3]: e7153d5f0689ff7d +Block 0007 [ 4]: 9a7ea4aa9d5d501c +Block 0007 [ 5]: e602de901d1e0157 +Block 0007 [ 6]: 16809cb4f1197684 +Block 0007 [ 7]: ab2de4cb53458600 +Block 0007 [ 8]: 845c5a7a2bee2d83 +Block 0007 [ 9]: a0745796de1efd92 +Block 0007 [ 10]: 419624f4df71da51 +Block 0007 [ 11]: 76bbe67f53d2c67a +Block 0007 [ 12]: 3539abbbb0b07204 +Block 0007 [ 13]: eb8503675fe3c338 +Block 0007 [ 14]: 1d937c7a62ab6702 +Block 0007 [ 15]: 059a53998e17631f +Block 0007 [ 16]: 6d990f3234b4951a +Block 0007 [ 17]: 4932b85c51c10895 +Block 0007 [ 18]: 0201b22ddd936f3d +Block 0007 [ 19]: a690abdce969b3ff +Block 0007 [ 20]: 07e773ac444aa3af +Block 0007 [ 21]: 6c0eae8430a1ded7 +Block 0007 [ 22]: 5ac933f9d33495c8 +Block 0007 [ 23]: 724fd0a679dbc18e +Block 0007 [ 24]: 8a877920c8ca8eba +Block 0007 [ 25]: 532913359620fe2a +Block 0007 [ 26]: 43722492fb8181c6 +Block 0007 [ 27]: e8ae5979a35787db +Block 0007 [ 28]: b2e7e6fb8f466bb4 +Block 0007 [ 29]: 33647c4c1e55316a +Block 0007 [ 30]: 3d91ecccab5b22e6 +Block 0007 [ 31]: 3184dc8fb3d09ecc +Block 0007 [ 32]: e95ffd2964578bd2 +Block 0007 [ 33]: f794fb50980a42a0 +Block 0007 [ 34]: 028aed107dc68f09 +Block 0007 [ 35]: f4f799b91100aaf2 +Block 0007 [ 36]: b523dd437403fe2e +Block 0007 [ 37]: 0b6a883c2834f238 +Block 0007 [ 38]: 4d1a1e1cf7462f91 +Block 0007 [ 39]: 90467f9adfd369cc +Block 0007 [ 40]: 0737252fe727088d +Block 0007 [ 41]: 036daf3edf06ad86 +Block 0007 [ 42]: 22cea14d595c060b +Block 0007 [ 43]: 313f948ca727d091 +Block 0007 [ 44]: 5699968513387150 +Block 0007 [ 45]: e21ec1b28d52caae +Block 0007 [ 46]: 4f64f523d5fda9a2 +Block 0007 [ 47]: d6d18166064574ee +Block 0007 [ 48]: 783f5c64134a8883 +Block 0007 [ 49]: b29e30cc712b31b9 +Block 0007 [ 50]: 95f12fbfae39c0bf +Block 0007 [ 51]: fda076c8d35ae9fc +Block 0007 [ 52]: b82f473fc8631979 +Block 0007 [ 53]: 4f6970787ac503de +Block 0007 [ 54]: cadff9d6e5647f89 +Block 0007 [ 55]: 4a831039e1f31433 +Block 0007 [ 56]: ade6d8cd941f47ea +Block 0007 [ 57]: f88ae33e5050d752 +Block 0007 [ 58]: 799c3b44d09fd711 +Block 0007 [ 59]: 8e4011e1f5c0bf7f +Block 0007 [ 60]: f3beb9b4b5e9eecc +Block 0007 [ 61]: 463050ab643a76bb +Block 0007 [ 62]: a5ff9886a55515ed +Block 0007 [ 63]: 32d4cc9d0768f0f5 +Block 0007 [ 64]: e5e9367d6dbfb5df +Block 0007 [ 65]: 9bf89cf290ebd025 +Block 0007 [ 66]: b9dc0ca9a6066c11 +Block 0007 [ 67]: d9e6a7a7d1549407 +Block 0007 [ 68]: 708b02a53354d50d +Block 0007 [ 69]: fcd4038bd4ed92e4 +Block 0007 [ 70]: 879afb895a5562ac +Block 0007 [ 71]: f84b300e452230e8 +Block 0007 [ 72]: 1e056e1eb0df87eb +Block 0007 [ 73]: a4f406ae37a5bfb0 +Block 0007 [ 74]: cfd6acf7f684477c +Block 0007 [ 75]: 9a0c3bd9bfa97762 +Block 0007 [ 76]: 7dc2fd0cf9c1698f +Block 0007 [ 77]: 5a6803439aa62d7c +Block 0007 [ 78]: a300c3f035c0a906 +Block 0007 [ 79]: 7d93e3df4d332583 +Block 0007 [ 80]: 9f0a41eb6cf81aa3 +Block 0007 [ 81]: 090d4d5491402f2f +Block 0007 [ 82]: db71454163e4d82f +Block 0007 [ 83]: f280fbe4abd57828 +Block 0007 [ 84]: 7ba860252f9fca17 +Block 0007 [ 85]: 8f97f52ff384b305 +Block 0007 [ 86]: a5ac80ed19180eac +Block 0007 [ 87]: 4271fc976d660442 +Block 0007 [ 88]: 7ffbac72edba0eb4 +Block 0007 [ 89]: 2507d3a8c064829f +Block 0007 [ 90]: ae63553febe76e59 +Block 0007 [ 91]: 5f980ae5b5d227c6 +Block 0007 [ 92]: 6c6e292330408622 +Block 0007 [ 93]: 86ff7aa8e27fe84f +Block 0007 [ 94]: 191145bd78a49426 +Block 0007 [ 95]: 5245342b117c9e22 +Block 0007 [ 96]: 639aa498da7959b9 +Block 0007 [ 97]: a8ab257350cd755b +Block 0007 [ 98]: 2a865d9545a18b9a +Block 0007 [ 99]: 03253d93314b53a9 +Block 0007 [100]: 8253d22ddb5d6bec +Block 0007 [101]: b6e36234dad1aba7 +Block 0007 [102]: 68830cbc1c67cc2b +Block 0007 [103]: 3329e21d4d26fe24 +Block 0007 [104]: c12e237cc006fac7 +Block 0007 [105]: 10cd1052f800660c +Block 0007 [106]: d21a79dfe11e09e1 +Block 0007 [107]: 1e13955a2b50bce6 +Block 0007 [108]: 9f49277660c9eae2 +Block 0007 [109]: 6404ee69235748b8 +Block 0007 [110]: 91fe5838faba8e93 +Block 0007 [111]: 92edcd3e257759b3 +Block 0007 [112]: 7f2b1a31c0f364b0 +Block 0007 [113]: 09f0b9b566fd7e16 +Block 0007 [114]: e36832a08f2aa2af +Block 0007 [115]: 1305d3b423f27290 +Block 0007 [116]: b98b05f6f4ada98e +Block 0007 [117]: fe4b59fea117a0cc +Block 0007 [118]: e32a71359fc93132 +Block 0007 [119]: d623901ca1f81d14 +Block 0007 [120]: 5a81370130e84352 +Block 0007 [121]: b426f6c7233c9577 +Block 0007 [122]: e437e7ab8d1b79dc +Block 0007 [123]: 90588535ecf2e177 +Block 0007 [124]: 915c2947d730404e +Block 0007 [125]: 3afc9bc412d60ec7 +Block 0007 [126]: 52968dd0d114c6fd +Block 0007 [127]: 349bf7ebd16f7787 +Block 0008 [ 0]: a4adfe4d99910cf4 +Block 0008 [ 1]: c351bfb2ad7543fc +Block 0008 [ 2]: ab7df1fb899a8162 +Block 0008 [ 3]: 84a70a38b48d6841 +Block 0008 [ 4]: 8cf53bd5d8be66b2 +Block 0008 [ 5]: fb54f442f6eb52b8 +Block 0008 [ 6]: 88adf1690f5ec2ed +Block 0008 [ 7]: 41380e64b80584c9 +Block 0008 [ 8]: 3d4641ace2233214 +Block 0008 [ 9]: ffa746589d1272b4 +Block 0008 [ 10]: 2725655f6415ce90 +Block 0008 [ 11]: 04be018f0b904cf9 +Block 0008 [ 12]: 5384ff540a51785f +Block 0008 [ 13]: 666d47030ccbde5e +Block 0008 [ 14]: f213da828329e2f0 +Block 0008 [ 15]: 75f9c65103f5f46c +Block 0008 [ 16]: e2ae9c2ee2f4816c +Block 0008 [ 17]: 52e1c215442ecfcf +Block 0008 [ 18]: 9cfb83358ca0ec12 +Block 0008 [ 19]: 8a5b5cc7efc4a9ac +Block 0008 [ 20]: 6a19c286f0a8c950 +Block 0008 [ 21]: 30177985adb92f43 +Block 0008 [ 22]: 20424653cddc8ff3 +Block 0008 [ 23]: 9e4c2cd726e699d5 +Block 0008 [ 24]: 88eee79981120ff7 +Block 0008 [ 25]: f57cb3fe062a3966 +Block 0008 [ 26]: 4aaf82b7910e692d +Block 0008 [ 27]: 1cb38ac0c88552e0 +Block 0008 [ 28]: b79d8c8cd58a1d65 +Block 0008 [ 29]: db54e9d4af253bdd +Block 0008 [ 30]: c1b223dbd47298d9 +Block 0008 [ 31]: 9b3d45d10d3c1d55 +Block 0008 [ 32]: ea124c969e5bc7a9 +Block 0008 [ 33]: 3980294920c96453 +Block 0008 [ 34]: 8f78b5e306f50322 +Block 0008 [ 35]: 4b3d1b73f5c51af2 +Block 0008 [ 36]: d4838a6dbf5a9c58 +Block 0008 [ 37]: 73d5ccd5a3f0051f +Block 0008 [ 38]: bad7923df6b64217 +Block 0008 [ 39]: cbc27176d94d8498 +Block 0008 [ 40]: 1bd98448f65a8b40 +Block 0008 [ 41]: 68046fcd71bdbed8 +Block 0008 [ 42]: 324abd87c40e8445 +Block 0008 [ 43]: 959a955259823db0 +Block 0008 [ 44]: 2048e1d260ea23d2 +Block 0008 [ 45]: 057b0df5e8d5e41a +Block 0008 [ 46]: f258852b6cf19613 +Block 0008 [ 47]: 50062fb8f780806e +Block 0008 [ 48]: 30547b8f4794d029 +Block 0008 [ 49]: 012c05500a35cde0 +Block 0008 [ 50]: 92f444164303e83f +Block 0008 [ 51]: 1672d08bf96d6f0e +Block 0008 [ 52]: f6a0ded2c321e7e4 +Block 0008 [ 53]: 320b4bffaae2630a +Block 0008 [ 54]: 3be9b3af44cef7fa +Block 0008 [ 55]: 4a7e4f662cd9e95c +Block 0008 [ 56]: 5960721992ad56b6 +Block 0008 [ 57]: dcd75636e45c61c1 +Block 0008 [ 58]: aab8dae08205ab21 +Block 0008 [ 59]: ebc5255b469a3007 +Block 0008 [ 60]: 9f3d591c663d9fbf +Block 0008 [ 61]: 3d2c288bcff83b4f +Block 0008 [ 62]: 06cc6f2c6628cdfe +Block 0008 [ 63]: 87550de6e0e963a2 +Block 0008 [ 64]: 23c6f424e3e75f4d +Block 0008 [ 65]: 8b9f92a37e9e0344 +Block 0008 [ 66]: d868b102a5d6b48d +Block 0008 [ 67]: 8447e4e667c0f561 +Block 0008 [ 68]: 3b744353d55d66b4 +Block 0008 [ 69]: 85a405846a2b4b86 +Block 0008 [ 70]: 83608220e4b3e470 +Block 0008 [ 71]: 55ee0e8c99df68e4 +Block 0008 [ 72]: b67848f9d16ec6c7 +Block 0008 [ 73]: 91fa8ec5b14a0193 +Block 0008 [ 74]: 5fb3f547492c3bfe +Block 0008 [ 75]: 99aa6950926c7bbb +Block 0008 [ 76]: 2868d23e0f3ba62c +Block 0008 [ 77]: 54a21971a3e6da83 +Block 0008 [ 78]: a7983f5690608187 +Block 0008 [ 79]: eda562b615edd8d0 +Block 0008 [ 80]: b143f81d4b57824b +Block 0008 [ 81]: 74989288dffa4df4 +Block 0008 [ 82]: 9dc7eb0a82f1d679 +Block 0008 [ 83]: 7fd6bc8054abd40f +Block 0008 [ 84]: 4a48ff43f5bc9a80 +Block 0008 [ 85]: 082ecbf4328c43b2 +Block 0008 [ 86]: 2e62efd01a152b8c +Block 0008 [ 87]: 9af6685e941965cc +Block 0008 [ 88]: 5ea16be4325897b4 +Block 0008 [ 89]: a3e786beb9ecac26 +Block 0008 [ 90]: 46373672e4bcaf5b +Block 0008 [ 91]: 1b37a65c3723de2b +Block 0008 [ 92]: 02d2cbcdf3b176a6 +Block 0008 [ 93]: cf60c07520e43204 +Block 0008 [ 94]: a9dd60666862b745 +Block 0008 [ 95]: d19216d3b85289b2 +Block 0008 [ 96]: a9d0aabe8fb0372c +Block 0008 [ 97]: be4b2f13878b6352 +Block 0008 [ 98]: 34e617f56db7b896 +Block 0008 [ 99]: d4805ff266e25b86 +Block 0008 [100]: 1a5a5256713b4124 +Block 0008 [101]: 86522d688fdd84bd +Block 0008 [102]: 7aa5fd0f76300aa4 +Block 0008 [103]: a8d4aa55e2b89413 +Block 0008 [104]: 0a998b3dc3bf2286 +Block 0008 [105]: 23b251906b5d1e24 +Block 0008 [106]: 21343137b70583fb +Block 0008 [107]: cc7d731a0ce049fb +Block 0008 [108]: d9832268500fba4c +Block 0008 [109]: cd23dae93244b015 +Block 0008 [110]: 97d872af6b818e31 +Block 0008 [111]: 50334b1da8bc7bcc +Block 0008 [112]: 2e490372855964ab +Block 0008 [113]: f982b1ac2b70bcb6 +Block 0008 [114]: d2bc8ddd5b404223 +Block 0008 [115]: 662e20f88734c872 +Block 0008 [116]: 3a803c69c553cc66 +Block 0008 [117]: ee233774c332dfc5 +Block 0008 [118]: e2e869ba8cdc3903 +Block 0008 [119]: e1664fc0d03b347b +Block 0008 [120]: ad772ab8bc1bf39c +Block 0008 [121]: 08dcd88f94d043f1 +Block 0008 [122]: 9fe0e02801d766f7 +Block 0008 [123]: 97308e7df7cfdadf +Block 0008 [124]: 49652ba3d55c20cf +Block 0008 [125]: 90e173da7f1ed0bc +Block 0008 [126]: cf9ed0890c4db7bc +Block 0008 [127]: 7e19886a294ac8db +Block 0009 [ 0]: 09f17821e07e1488 +Block 0009 [ 1]: 0554c6983ae28b5d +Block 0009 [ 2]: 8ee2caa35450bbad +Block 0009 [ 3]: 01c4a311d85f2003 +Block 0009 [ 4]: 47abed6fae824a3a +Block 0009 [ 5]: dab8aa500bb36756 +Block 0009 [ 6]: 3c423358682ce690 +Block 0009 [ 7]: fc56cd8481c94c36 +Block 0009 [ 8]: 9bcd7052c2c57813 +Block 0009 [ 9]: 3176b04677072ef9 +Block 0009 [ 10]: 0e40514b0f205bc4 +Block 0009 [ 11]: 5cfaf5cda95b5e0a +Block 0009 [ 12]: 9178402699e0f83c +Block 0009 [ 13]: 6352ff0713d6ece0 +Block 0009 [ 14]: 5b51c880851011ce +Block 0009 [ 15]: d70b2cbcb65a0f17 +Block 0009 [ 16]: 0bf009b67d4c8d93 +Block 0009 [ 17]: 6b1aafe855552a0a +Block 0009 [ 18]: e5eec0f59e9b4d80 +Block 0009 [ 19]: f90e33441caf7aca +Block 0009 [ 20]: f214ea315a60a5f6 +Block 0009 [ 21]: 0fd7c5216bc8ebed +Block 0009 [ 22]: 9722d73114abecbc +Block 0009 [ 23]: e009b1ef945a8936 +Block 0009 [ 24]: db081479f27340b0 +Block 0009 [ 25]: e2de9dffd79edb4e +Block 0009 [ 26]: 2cc6c9f0fd511465 +Block 0009 [ 27]: 3b5333ee1d8a2224 +Block 0009 [ 28]: 44e8af9a7430f239 +Block 0009 [ 29]: 9750f732ae9076a0 +Block 0009 [ 30]: 36b3884c52b1af6e +Block 0009 [ 31]: e348d29ed7a38013 +Block 0009 [ 32]: 19f6e8d1091eabbf +Block 0009 [ 33]: fb504d067a79ee87 +Block 0009 [ 34]: dc0ba069d7b9931a +Block 0009 [ 35]: 1709287edac154ce +Block 0009 [ 36]: d2617168f799c765 +Block 0009 [ 37]: bee76e43b816db93 +Block 0009 [ 38]: 08220ebdd94c3483 +Block 0009 [ 39]: e4c3aeba402c8638 +Block 0009 [ 40]: d860d8f3168e0eb6 +Block 0009 [ 41]: 8c706849ef5d2401 +Block 0009 [ 42]: 6d4c71aaaf0a530a +Block 0009 [ 43]: 6d1bc6e62a4c7a30 +Block 0009 [ 44]: 726e724258001102 +Block 0009 [ 45]: 380d272cdda1e903 +Block 0009 [ 46]: 9847d7ed2c1c338f +Block 0009 [ 47]: a200ae61c442cc25 +Block 0009 [ 48]: 815db01a7abec286 +Block 0009 [ 49]: fba18c65c3a93858 +Block 0009 [ 50]: fcf116b5e2222869 +Block 0009 [ 51]: 7508f3f16631617c +Block 0009 [ 52]: b52195f06b14bdf0 +Block 0009 [ 53]: 8a06e98b5b5b613a +Block 0009 [ 54]: 49422e71e2234817 +Block 0009 [ 55]: 8de98eea443a260c +Block 0009 [ 56]: 5136fc901d80e8f3 +Block 0009 [ 57]: a8c7dbb57a73b022 +Block 0009 [ 58]: ba64ee6d819d2f3f +Block 0009 [ 59]: 13b3e12f58c43960 +Block 0009 [ 60]: 48192ef6f55be023 +Block 0009 [ 61]: c04ec3cea66c260c +Block 0009 [ 62]: eaf4df200430c2c4 +Block 0009 [ 63]: c1330fc0dda60a8f +Block 0009 [ 64]: e2c7288214e2c0b9 +Block 0009 [ 65]: 45445f674fc36f02 +Block 0009 [ 66]: 399650904d856e33 +Block 0009 [ 67]: 6f521e3ce0776e50 +Block 0009 [ 68]: 90c29418e38f5286 +Block 0009 [ 69]: 33539205795b2e63 +Block 0009 [ 70]: aa12f6a11f38ef2c +Block 0009 [ 71]: 19e8c3ee38fca760 +Block 0009 [ 72]: 9915a4b915d55aef +Block 0009 [ 73]: c9378ab272fc0be3 +Block 0009 [ 74]: 9d6658d8a490556d +Block 0009 [ 75]: 8ac8734763fcf96a +Block 0009 [ 76]: 958fc74e8fe74cb5 +Block 0009 [ 77]: ff88ff2708eaccad +Block 0009 [ 78]: 340b5e67653d2214 +Block 0009 [ 79]: d1518d5a212ed742 +Block 0009 [ 80]: f6035f27a7435d1c +Block 0009 [ 81]: 3df889579023879e +Block 0009 [ 82]: bc2cb961e5e0cd29 +Block 0009 [ 83]: 06844112e407e60b +Block 0009 [ 84]: 598dc02a9a0428b9 +Block 0009 [ 85]: ca1cf5e0d56f7662 +Block 0009 [ 86]: 26db48300084fa3c +Block 0009 [ 87]: 575426242bc7e8a0 +Block 0009 [ 88]: 32982bb40322f4f2 +Block 0009 [ 89]: 8e24407528115daf +Block 0009 [ 90]: 956edfaf67d87ae3 +Block 0009 [ 91]: 1b2f925a514bcc53 +Block 0009 [ 92]: b3355bd8dda18359 +Block 0009 [ 93]: a44ea31b9e7b6365 +Block 0009 [ 94]: 9a31090deb917e2a +Block 0009 [ 95]: 0bacdf86671a9864 +Block 0009 [ 96]: 157ea61ef1e8b98e +Block 0009 [ 97]: a3b2090dcdaed2c6 +Block 0009 [ 98]: 9a894301b2305c71 +Block 0009 [ 99]: e39b034c47a9c2cb +Block 0009 [100]: 19f37631d9364cc9 +Block 0009 [101]: 482137d0abe23a00 +Block 0009 [102]: f74577849b6b85b3 +Block 0009 [103]: d4b3699288d88fbe +Block 0009 [104]: 24e2f75d49900d15 +Block 0009 [105]: d03357e4681ffbe6 +Block 0009 [106]: 3bf863ce22c7b264 +Block 0009 [107]: 09e48b1c12a8e22a +Block 0009 [108]: 5ecedc63d6d4fdae +Block 0009 [109]: d4152d6ad81f7f49 +Block 0009 [110]: ec521ae1d465e34d +Block 0009 [111]: 1cf63c849f966159 +Block 0009 [112]: bbe8f99053e9c272 +Block 0009 [113]: 22c8313fcdf6dd2b +Block 0009 [114]: 5a33b67ef927a384 +Block 0009 [115]: 45eb429e89648b5e +Block 0009 [116]: 6a70eebb130273bb +Block 0009 [117]: 279d1b9a1c92987a +Block 0009 [118]: 8e87f531707bad10 +Block 0009 [119]: e28fb73bc2645dcb +Block 0009 [120]: e101cbcb663ae481 +Block 0009 [121]: e13638603439422f +Block 0009 [122]: 31ab2be0b269b032 +Block 0009 [123]: 94ed21ee47b10cad +Block 0009 [124]: f870cdcc24169da9 +Block 0009 [125]: 36d7d00fdf82170d +Block 0009 [126]: 3803dacdc76a154e +Block 0009 [127]: 977e4fa3ffa1fce6 +Block 0010 [ 0]: 2cd2736a0c31ac9d +Block 0010 [ 1]: dcc65d317a7255b8 +Block 0010 [ 2]: d0b0e18c3e5a8ced +Block 0010 [ 3]: 472d60d4c41fa394 +Block 0010 [ 4]: 6f37e1f6c0e9cfb4 +Block 0010 [ 5]: d5d419fe7c4458a5 +Block 0010 [ 6]: 5fca139c0b7b7e73 +Block 0010 [ 7]: 3580da18ec70231e +Block 0010 [ 8]: d33560fda3ebfb80 +Block 0010 [ 9]: 43ecf3f017da5852 +Block 0010 [ 10]: 42875a570ead27c0 +Block 0010 [ 11]: a34885ed7ee14e47 +Block 0010 [ 12]: 7d6d2f6dcb52a0c2 +Block 0010 [ 13]: 784941bde6ce9680 +Block 0010 [ 14]: caf67a8b7846409b +Block 0010 [ 15]: 0626914ae112efce +Block 0010 [ 16]: aea97d1be487d29c +Block 0010 [ 17]: 74db6aa3ab481fde +Block 0010 [ 18]: b75f913dc34d0736 +Block 0010 [ 19]: 276708b32e055bef +Block 0010 [ 20]: c13113ed4225fdcd +Block 0010 [ 21]: 25f85027d97a3a99 +Block 0010 [ 22]: bde953054d7c7005 +Block 0010 [ 23]: 6efb2749e94eb5f1 +Block 0010 [ 24]: b24b2abb0bd4d463 +Block 0010 [ 25]: 965b9abee3eec977 +Block 0010 [ 26]: 4fc350cecc888839 +Block 0010 [ 27]: d46aed5e86aee3a5 +Block 0010 [ 28]: eeb73b706839f597 +Block 0010 [ 29]: 54e359783ca6afcb +Block 0010 [ 30]: 07981e7399d2a1e4 +Block 0010 [ 31]: 3f6a165af1041a1a +Block 0010 [ 32]: 9211fb454c73bee6 +Block 0010 [ 33]: 54601d385755903a +Block 0010 [ 34]: cbe9cd78be150f78 +Block 0010 [ 35]: 71dd09ef23a29059 +Block 0010 [ 36]: 076ea4fd1ca5e7bf +Block 0010 [ 37]: 878b5d6b4b5e4f24 +Block 0010 [ 38]: 30dbe4a9a1fee881 +Block 0010 [ 39]: eab7308f1f869ef9 +Block 0010 [ 40]: f166aa28a9230046 +Block 0010 [ 41]: e0a76678b27c054e +Block 0010 [ 42]: 4214eb3dbe411aab +Block 0010 [ 43]: 7f1f277a3838c0bb +Block 0010 [ 44]: a1c1fbad31bf29bc +Block 0010 [ 45]: df12890cbd39bb6b +Block 0010 [ 46]: ad1db3698cbb8a59 +Block 0010 [ 47]: 5d19cf1c7323e374 +Block 0010 [ 48]: f027c256ee46d7a9 +Block 0010 [ 49]: 931057e2d0031fc0 +Block 0010 [ 50]: abae826e0949155a +Block 0010 [ 51]: 12b61077f83a110e +Block 0010 [ 52]: a441fb7eb8bded8f +Block 0010 [ 53]: eafca6ccb9ca3b45 +Block 0010 [ 54]: d21d577c96969983 +Block 0010 [ 55]: 84ca9a33efb36cc3 +Block 0010 [ 56]: 4b7aab67b2056e06 +Block 0010 [ 57]: 5f5c3987109e8148 +Block 0010 [ 58]: 5ac22f97baac7ee6 +Block 0010 [ 59]: ccde1c3d416b0a2b +Block 0010 [ 60]: d058c4af79ae2615 +Block 0010 [ 61]: e7cf10480cc90823 +Block 0010 [ 62]: 423f4c0f01616a13 +Block 0010 [ 63]: 5dfbcaf113167b33 +Block 0010 [ 64]: 7246e0389e71b4be +Block 0010 [ 65]: e5ed12c82501482c +Block 0010 [ 66]: b76896f90ab7ca0a +Block 0010 [ 67]: d64da0fa30ddb24f +Block 0010 [ 68]: c576b92ebf881110 +Block 0010 [ 69]: 7f95954959d11974 +Block 0010 [ 70]: 2ab42627d90c8ba2 +Block 0010 [ 71]: 40547841497f36f8 +Block 0010 [ 72]: eb3f2ad272f78ec1 +Block 0010 [ 73]: 22b73352e10f41ae +Block 0010 [ 74]: 90d25ab70e6314c6 +Block 0010 [ 75]: 23a3e76a227e11ba +Block 0010 [ 76]: a29fdd5f72e3706b +Block 0010 [ 77]: 0062d09724e9f921 +Block 0010 [ 78]: ff10f4c4b92fc872 +Block 0010 [ 79]: 6d032244533214f8 +Block 0010 [ 80]: ebaa8e53dbb544e9 +Block 0010 [ 81]: 3dfcfb35ce8415fc +Block 0010 [ 82]: a1db26743136be25 +Block 0010 [ 83]: 08da5ebe546aa00a +Block 0010 [ 84]: 328ff22d9350a5b0 +Block 0010 [ 85]: c90d2a256453e3c7 +Block 0010 [ 86]: c20d55b299a46cc3 +Block 0010 [ 87]: 76f774e1da4ed025 +Block 0010 [ 88]: 9d16640a64b2a68d +Block 0010 [ 89]: 49c4888454b71b63 +Block 0010 [ 90]: 68877f13347ae22a +Block 0010 [ 91]: 6e4c2912cc08f132 +Block 0010 [ 92]: d782009fb171ef5f +Block 0010 [ 93]: 55a323816326dec3 +Block 0010 [ 94]: 49ef50ca0e06e7fb +Block 0010 [ 95]: f121a1f5e771d82a +Block 0010 [ 96]: e1674249ba7eb13f +Block 0010 [ 97]: a4e34d3547a55437 +Block 0010 [ 98]: 1efabf15dd59ca9e +Block 0010 [ 99]: 38035e0f6d953c25 +Block 0010 [100]: 61c54328b018e179 +Block 0010 [101]: 5c8acc1033e41bd7 +Block 0010 [102]: cb0590ec61f7547f +Block 0010 [103]: f16395274831b1d4 +Block 0010 [104]: 2cd896877bc900c9 +Block 0010 [105]: 6e89957d98c368db +Block 0010 [106]: 1bde150709223401 +Block 0010 [107]: f53b7684c366a59a +Block 0010 [108]: 05f7a3c51c6fa561 +Block 0010 [109]: 1c79ecc5c88f4294 +Block 0010 [110]: 43401ccb858beb97 +Block 0010 [111]: b1ff788ac449a9bc +Block 0010 [112]: afc78a2a7b2f8df7 +Block 0010 [113]: 5c4be1d58dcb21d6 +Block 0010 [114]: fbf8923851ea390f +Block 0010 [115]: ad469cac1beb1c25 +Block 0010 [116]: 440f0a4b28b9857c +Block 0010 [117]: 2237d018e37b09cc +Block 0010 [118]: 04e3b98e10c07b8d +Block 0010 [119]: 40cc39ec5451fd13 +Block 0010 [120]: 9ddda8cba4ba5cca +Block 0010 [121]: 1780b1d3fc89c520 +Block 0010 [122]: 41a26a9570784453 +Block 0010 [123]: 294f98302d4dcb1f +Block 0010 [124]: a738b915d18269f7 +Block 0010 [125]: 31ca696d21c1e964 +Block 0010 [126]: 262a41789e59e5e8 +Block 0010 [127]: 6ec7d6dba9d819a1 +Block 0011 [ 0]: 0f6421dd331b68b8 +Block 0011 [ 1]: 9413d7c0380a4d33 +Block 0011 [ 2]: 6b45410505eff308 +Block 0011 [ 3]: a6f16907b9695bb4 +Block 0011 [ 4]: aa1748d117d465d1 +Block 0011 [ 5]: 01f4898f474f9d23 +Block 0011 [ 6]: 75723750b635c9ac +Block 0011 [ 7]: af079cf715419ac9 +Block 0011 [ 8]: aa83ee3d9d07606d +Block 0011 [ 9]: 4747e13ef6d298bf +Block 0011 [ 10]: 20a2ade15d33fc37 +Block 0011 [ 11]: 42e60057b83fb44e +Block 0011 [ 12]: ee98b76ec63deffc +Block 0011 [ 13]: 419e5830efe4e409 +Block 0011 [ 14]: 76b6283fdc169e13 +Block 0011 [ 15]: 46e3a31e70abd7cf +Block 0011 [ 16]: c884f047bad0bf39 +Block 0011 [ 17]: 791c979423d7c3a2 +Block 0011 [ 18]: 9782203d7c5362c1 +Block 0011 [ 19]: 061473dc9597fdb4 +Block 0011 [ 20]: 5b1ea358780aaa6b +Block 0011 [ 21]: d299edc50d5d3e96 +Block 0011 [ 22]: 060bb17f50a3894d +Block 0011 [ 23]: 6310b765febd6abc +Block 0011 [ 24]: 6e1ea1dc10032c2b +Block 0011 [ 25]: 650e5f41f0f2a992 +Block 0011 [ 26]: 86b0974ac30a726e +Block 0011 [ 27]: 8e07f730a4d9fb09 +Block 0011 [ 28]: b298d0f2abc1e051 +Block 0011 [ 29]: 1c97e22a82872845 +Block 0011 [ 30]: 3c7afb67a01d9fbf +Block 0011 [ 31]: f97947fe02896866 +Block 0011 [ 32]: 64ddd9338e040673 +Block 0011 [ 33]: ca32b60af15430d0 +Block 0011 [ 34]: ac82cf7952571c60 +Block 0011 [ 35]: e49b241ed1479725 +Block 0011 [ 36]: 94d8bd284469e7f4 +Block 0011 [ 37]: 3cd12e6ac8f2908d +Block 0011 [ 38]: 86b4b6a7ee8cb8ea +Block 0011 [ 39]: 66ac6958355ce1cd +Block 0011 [ 40]: f0386d92899099d0 +Block 0011 [ 41]: ae778abc76351811 +Block 0011 [ 42]: 1debb933e04038ee +Block 0011 [ 43]: d2c247b52435f51d +Block 0011 [ 44]: f472cc4452e1ba9d +Block 0011 [ 45]: 715d658a7579e3b6 +Block 0011 [ 46]: 3468752ad88c0800 +Block 0011 [ 47]: 5d734fd451962958 +Block 0011 [ 48]: 8f3cae63cc94fbd1 +Block 0011 [ 49]: 0ed93eeb2a695b7f +Block 0011 [ 50]: 538bff2fe68fb26d +Block 0011 [ 51]: 535f13594389cc58 +Block 0011 [ 52]: 016c66a1fa857ada +Block 0011 [ 53]: 8167376a56a3ffe8 +Block 0011 [ 54]: 05d622a6c5d7ccc4 +Block 0011 [ 55]: 99582c4d66b60ec5 +Block 0011 [ 56]: 8eefee640a12d44c +Block 0011 [ 57]: 0d65ce7b71a01dbd +Block 0011 [ 58]: 68c10cdeb6fb7df3 +Block 0011 [ 59]: 427cf7bd7b9d8de3 +Block 0011 [ 60]: 81a91f6e0691e347 +Block 0011 [ 61]: 25bdf7508bdff3eb +Block 0011 [ 62]: 8921ddc40ad9116a +Block 0011 [ 63]: c3b1b8a27d0f423d +Block 0011 [ 64]: ccdbdc89c8597ada +Block 0011 [ 65]: ecb2e8b2e7a8029a +Block 0011 [ 66]: 1bf60102f57e1d60 +Block 0011 [ 67]: c83a409a09df2a59 +Block 0011 [ 68]: 42651a751bd12911 +Block 0011 [ 69]: c61a61ba19ef7d31 +Block 0011 [ 70]: 4350de115dfc549e +Block 0011 [ 71]: 53029cf951569652 +Block 0011 [ 72]: e6596db8f557adc6 +Block 0011 [ 73]: e3e97f2eb8d1f70d +Block 0011 [ 74]: 373826b668131e1d +Block 0011 [ 75]: 741d95fcdb504062 +Block 0011 [ 76]: 2d8f911340f42f6a +Block 0011 [ 77]: 4474f5c71c4bc0fb +Block 0011 [ 78]: b4c4237d4433fb15 +Block 0011 [ 79]: ad8293c1e42fb43f +Block 0011 [ 80]: ed72954da0ad7fdf +Block 0011 [ 81]: e3ae9b0886c8d0b0 +Block 0011 [ 82]: 48d24c36990ec552 +Block 0011 [ 83]: 7f4da5fc0275065d +Block 0011 [ 84]: 2c1b31339565a745 +Block 0011 [ 85]: 616eedeac31c2781 +Block 0011 [ 86]: 6d468bbf6faf2dd9 +Block 0011 [ 87]: 59f69b71c6b459d9 +Block 0011 [ 88]: 783e7a635929d6e9 +Block 0011 [ 89]: 87bb13d51620b4c0 +Block 0011 [ 90]: 861e265d55e3b85e +Block 0011 [ 91]: 237cbd385ffd69a1 +Block 0011 [ 92]: 7babcd805ad96950 +Block 0011 [ 93]: ae71fea660d0fe46 +Block 0011 [ 94]: 6b3810a5232a039c +Block 0011 [ 95]: 2e87a630dae147e3 +Block 0011 [ 96]: 9d0fc975282cc88c +Block 0011 [ 97]: 9c35c8dcb1527fd0 +Block 0011 [ 98]: 99acd6a25ed6832a +Block 0011 [ 99]: f800832e202306bc +Block 0011 [100]: 154425c5c3070b92 +Block 0011 [101]: 033363274ed6b05d +Block 0011 [102]: 848069f7be4fa5c0 +Block 0011 [103]: 5d096e92cb952782 +Block 0011 [104]: a5c9710bff476a41 +Block 0011 [105]: 1ce68073e94d5602 +Block 0011 [106]: 123f120f04020240 +Block 0011 [107]: baf32cb1dfec19c4 +Block 0011 [108]: 1fb86ac5927d03da +Block 0011 [109]: 51c31b1882823de3 +Block 0011 [110]: f576c0710e67d98b +Block 0011 [111]: 4d0c15d414d97441 +Block 0011 [112]: bc5c5ee50ce748b6 +Block 0011 [113]: 6ced2e7f71ae5b2e +Block 0011 [114]: 6f029d91e0b73516 +Block 0011 [115]: 994dbd69f5b63c41 +Block 0011 [116]: ae45ee977791b483 +Block 0011 [117]: d7648f8fa1274743 +Block 0011 [118]: a6ff2d48dc1038f9 +Block 0011 [119]: e0b8353327619fc0 +Block 0011 [120]: ab88d74f0f3fbb52 +Block 0011 [121]: 6405b628531b4e3f +Block 0011 [122]: 8107aad4c2445a1c +Block 0011 [123]: 7af51bc5013db8c3 +Block 0011 [124]: 3b11a69b3cafd3d7 +Block 0011 [125]: 99c8791112918afc +Block 0011 [126]: e40140d75b01ebd2 +Block 0011 [127]: 421f17c323b1999a +Block 0012 [ 0]: 57b45e2155eb09a6 +Block 0012 [ 1]: e4c2f41f5c9422d1 +Block 0012 [ 2]: 805fc558ad63876c +Block 0012 [ 3]: f20bc926472e526a +Block 0012 [ 4]: 9cb136333a7f408b +Block 0012 [ 5]: f56a257cf12bd95a +Block 0012 [ 6]: 73677f0919085ceb +Block 0012 [ 7]: ec308986d1942ad1 +Block 0012 [ 8]: 67797afdca9d0e01 +Block 0012 [ 9]: 3d9eda562601b379 +Block 0012 [ 10]: 05841d4e15c878d8 +Block 0012 [ 11]: 305f2848b06d57ba +Block 0012 [ 12]: caa5f6f7a0a27afd +Block 0012 [ 13]: 62953adc90c85900 +Block 0012 [ 14]: da34c2d07a919662 +Block 0012 [ 15]: f4e763cabfaefb12 +Block 0012 [ 16]: 134b35d39509ea42 +Block 0012 [ 17]: 6bdedb78e7034c61 +Block 0012 [ 18]: 59a488e36bbedcc7 +Block 0012 [ 19]: 4a1e6deab9ba69f6 +Block 0012 [ 20]: 41302fa4cd7d9d2c +Block 0012 [ 21]: c6e1a3e3382aaa5e +Block 0012 [ 22]: 6fb61a14363537ed +Block 0012 [ 23]: d037afec313500fa +Block 0012 [ 24]: be19c63a67ced569 +Block 0012 [ 25]: 7927ca951ae66c45 +Block 0012 [ 26]: 377278d9c42dfce2 +Block 0012 [ 27]: d094448fc4dca475 +Block 0012 [ 28]: 8fe33e63b5464cd7 +Block 0012 [ 29]: 534c6bfd73b1664d +Block 0012 [ 30]: 2349185e29a74d3e +Block 0012 [ 31]: 874af27d7ebfefc3 +Block 0012 [ 32]: f3db4272da3cb08d +Block 0012 [ 33]: 07adcb591bf14309 +Block 0012 [ 34]: 4bdbafae807c3807 +Block 0012 [ 35]: fa27aa7f5667425b +Block 0012 [ 36]: 471d38e55b583a78 +Block 0012 [ 37]: 96f6c0c0a1240588 +Block 0012 [ 38]: 75401db0a1c25736 +Block 0012 [ 39]: 1398216942c7c35c +Block 0012 [ 40]: 5343467b1ae7b457 +Block 0012 [ 41]: fa32b8553f7446c2 +Block 0012 [ 42]: c2c850718c009070 +Block 0012 [ 43]: 366dfd2bc6951ed0 +Block 0012 [ 44]: 5bb3d45dc4af7ae8 +Block 0012 [ 45]: b085e329d6294897 +Block 0012 [ 46]: a95768badd7960f6 +Block 0012 [ 47]: 80413c11bd367b42 +Block 0012 [ 48]: 5a9807a2c57b5fcd +Block 0012 [ 49]: d2a9b8e1d8d0e483 +Block 0012 [ 50]: b0465723a123b002 +Block 0012 [ 51]: 1bcf94c7e694c4fb +Block 0012 [ 52]: 92423c23eb077412 +Block 0012 [ 53]: 3932c2fbba7db8d4 +Block 0012 [ 54]: 5b3bccb0b9cf3829 +Block 0012 [ 55]: b29df488af3b7740 +Block 0012 [ 56]: 0b9538420af6f746 +Block 0012 [ 57]: 4bd159e8c22fceba +Block 0012 [ 58]: 1b772f85b3153005 +Block 0012 [ 59]: dcb156af6d11d4e6 +Block 0012 [ 60]: 58156afd7dc41c29 +Block 0012 [ 61]: 7d3b2509e63033d5 +Block 0012 [ 62]: 6f1c580bb2f3d9b1 +Block 0012 [ 63]: c6c37c1d6eb4daee +Block 0012 [ 64]: cfeb8d6cb8866495 +Block 0012 [ 65]: dd17d3852ed6a6e8 +Block 0012 [ 66]: e41c7e41f538dbe7 +Block 0012 [ 67]: 5768bf57b3a5ed86 +Block 0012 [ 68]: 78046e27e202f6aa +Block 0012 [ 69]: a3e201aefc301b70 +Block 0012 [ 70]: 50a0d5a4a91b8af4 +Block 0012 [ 71]: a5e559a8a6c437d6 +Block 0012 [ 72]: fac6cd8e65d46ff9 +Block 0012 [ 73]: 0d9fa685d3eb2111 +Block 0012 [ 74]: 9623a5bd74bbf9df +Block 0012 [ 75]: cc8c1640de946f03 +Block 0012 [ 76]: 45895a3b3b44202b +Block 0012 [ 77]: fc89b3976c685cdc +Block 0012 [ 78]: cd752649ff454671 +Block 0012 [ 79]: 93772ab678e8e9ca +Block 0012 [ 80]: 298a19530983c336 +Block 0012 [ 81]: de1d36ad501353d6 +Block 0012 [ 82]: dd964f96de8650e4 +Block 0012 [ 83]: 25ae2833905c7023 +Block 0012 [ 84]: 519edf230c5711f2 +Block 0012 [ 85]: 256dc6f35b268020 +Block 0012 [ 86]: 9e3b5315d2df8c07 +Block 0012 [ 87]: a492a2843836e071 +Block 0012 [ 88]: b93bcf95d01975d9 +Block 0012 [ 89]: 48db0c4bc87eff40 +Block 0012 [ 90]: 2d78c22e82fdba57 +Block 0012 [ 91]: 39d7e857cd35e0ce +Block 0012 [ 92]: 41482071123589ac +Block 0012 [ 93]: b8d24d5a6203255f +Block 0012 [ 94]: cb4c0f936f2ae1ac +Block 0012 [ 95]: cc2c6d7046f20ea6 +Block 0012 [ 96]: 611bb8e43b69c470 +Block 0012 [ 97]: cb76f40096c7a527 +Block 0012 [ 98]: 041160b6d87e85b3 +Block 0012 [ 99]: 14a808513a59ddeb +Block 0012 [100]: 3146e51118b5d3f0 +Block 0012 [101]: a4d48814108462aa +Block 0012 [102]: b09a74a839ffd0e3 +Block 0012 [103]: 41887c72e8ecefac +Block 0012 [104]: a39e60aca9f9c1c6 +Block 0012 [105]: 94d3fed99796f4c5 +Block 0012 [106]: 915e01be08a71f60 +Block 0012 [107]: 5bc9a224b7417179 +Block 0012 [108]: 9b5ea49fadf9ea41 +Block 0012 [109]: b5734c9ea85c13c6 +Block 0012 [110]: 3ddc1878140e662e +Block 0012 [111]: 62878bb723c8e92c +Block 0012 [112]: 8d25065038213031 +Block 0012 [113]: c0ce352747559d71 +Block 0012 [114]: af42da990cb5f109 +Block 0012 [115]: 8f0854be4578b5a9 +Block 0012 [116]: 52633445299a0dc7 +Block 0012 [117]: 55b95c2c08739647 +Block 0012 [118]: a514cc136aac3485 +Block 0012 [119]: bed4bd5515c62d15 +Block 0012 [120]: bb4dc5594c8bde63 +Block 0012 [121]: 7088341e9ec16414 +Block 0012 [122]: ac9f56158d64d176 +Block 0012 [123]: 8170c10d3291daa2 +Block 0012 [124]: eb1e1b04ccc6ebc5 +Block 0012 [125]: c691cccb6c298e64 +Block 0012 [126]: 28db423772d9387d +Block 0012 [127]: fd201e0664640880 +Block 0013 [ 0]: 00ec39c939db9894 +Block 0013 [ 1]: 4420dfaadbee3c0b +Block 0013 [ 2]: 22cd108c9c63be9d +Block 0013 [ 3]: 20d0476679e15210 +Block 0013 [ 4]: 2dcee690366bb2c1 +Block 0013 [ 5]: a02c85486eb5afb1 +Block 0013 [ 6]: eb947f30e07f57b8 +Block 0013 [ 7]: 39071f737c63767a +Block 0013 [ 8]: 8c6f6c62ab515304 +Block 0013 [ 9]: 76e6e0129fefa947 +Block 0013 [ 10]: 755233c73eaeca92 +Block 0013 [ 11]: 175b46741a8bbd82 +Block 0013 [ 12]: 701ecdbaafa63a3f +Block 0013 [ 13]: f617280a7cb6df16 +Block 0013 [ 14]: ec2232a64ca32ca7 +Block 0013 [ 15]: 30b4d00845ef206b +Block 0013 [ 16]: ba9401ae6e780dce +Block 0013 [ 17]: 5b3e6e06b9a491af +Block 0013 [ 18]: d4fb8f043100e234 +Block 0013 [ 19]: 57e533e169fea374 +Block 0013 [ 20]: 01161771c7a81f08 +Block 0013 [ 21]: 0eefac8dbffd9218 +Block 0013 [ 22]: f23c581ed1df6a37 +Block 0013 [ 23]: 3553c1f8392e6ea8 +Block 0013 [ 24]: 169ae5c8916d1e80 +Block 0013 [ 25]: f7769df26dfc84a0 +Block 0013 [ 26]: acb68b419526eaec +Block 0013 [ 27]: 1291357db928c5cd +Block 0013 [ 28]: 5b6d8961bd429b19 +Block 0013 [ 29]: 4ff6515925c988fe +Block 0013 [ 30]: fdca8898314dbe4a +Block 0013 [ 31]: fd36e4c1d14ba7ca +Block 0013 [ 32]: 22009a75e3fc39df +Block 0013 [ 33]: dc7fe86e4949f847 +Block 0013 [ 34]: 59ef8d7b9e7ba1cb +Block 0013 [ 35]: eb72886e925b1acb +Block 0013 [ 36]: 5fad5d3c38006489 +Block 0013 [ 37]: 82dba341d15d2d56 +Block 0013 [ 38]: 05905e9e7ba6a663 +Block 0013 [ 39]: 7f3abe8f31b94ff2 +Block 0013 [ 40]: 3856453ab6d5c126 +Block 0013 [ 41]: 09b5552fc65cd05e +Block 0013 [ 42]: 2722b2ff56ee67fd +Block 0013 [ 43]: 44d9b85865a9b868 +Block 0013 [ 44]: 3090dc42cb77ced4 +Block 0013 [ 45]: 7acf325fabaaa4a8 +Block 0013 [ 46]: f61a814966f6c305 +Block 0013 [ 47]: 5f542e6b87babffc +Block 0013 [ 48]: f0425b7d0f75d5f4 +Block 0013 [ 49]: c5cbf2e60208c5f4 +Block 0013 [ 50]: 5b973edabe0361a2 +Block 0013 [ 51]: 7f5fe5324e325ab8 +Block 0013 [ 52]: ccec55217f3b82b4 +Block 0013 [ 53]: d676cba9ec6dd723 +Block 0013 [ 54]: 05da0d6ac5ecc58e +Block 0013 [ 55]: 6d6272bec3a4b8e8 +Block 0013 [ 56]: af31a6e8e6fb4cb9 +Block 0013 [ 57]: 29f435a830199118 +Block 0013 [ 58]: b9fc088f00f87093 +Block 0013 [ 59]: d68752cc88ab7438 +Block 0013 [ 60]: 8a9efac1e54c242d +Block 0013 [ 61]: 0fbfc535af7c20ff +Block 0013 [ 62]: 2cea3ebba917e008 +Block 0013 [ 63]: 55433086e2f6a6f6 +Block 0013 [ 64]: b0df96ad91c9e607 +Block 0013 [ 65]: 2fd6cfe69c5836f6 +Block 0013 [ 66]: 6c67ba628134d091 +Block 0013 [ 67]: fbd246e6c7e42035 +Block 0013 [ 68]: 651f33a83004fc17 +Block 0013 [ 69]: e1cbf99d4ec8b300 +Block 0013 [ 70]: ebd68429770d021a +Block 0013 [ 71]: 4fa7c8d34bb4ee9c +Block 0013 [ 72]: c6931ce85af3d3be +Block 0013 [ 73]: 287d02f736567dfd +Block 0013 [ 74]: 4df9653cd7145f81 +Block 0013 [ 75]: 3c61284f1698bfff +Block 0013 [ 76]: ccd0ea56458bc87d +Block 0013 [ 77]: dc15ea6cb6c7c8b7 +Block 0013 [ 78]: 9502b9bb7e8ca6e1 +Block 0013 [ 79]: 299464cddd3989db +Block 0013 [ 80]: 16dbe8345daf1e54 +Block 0013 [ 81]: 775459707e99df40 +Block 0013 [ 82]: c2b6e5a6cc36de56 +Block 0013 [ 83]: 9469ef94adebd6aa +Block 0013 [ 84]: e35eef9407cda49b +Block 0013 [ 85]: ddd463c60effea37 +Block 0013 [ 86]: c226c4c1033ae080 +Block 0013 [ 87]: a7f4bfd8c2100edb +Block 0013 [ 88]: ea2510b8c5811c62 +Block 0013 [ 89]: dcd044cdbbdfb940 +Block 0013 [ 90]: 938cc1cbfc8b94b7 +Block 0013 [ 91]: 437bc57fa90a3bbb +Block 0013 [ 92]: 7aa81548d40db03a +Block 0013 [ 93]: f8a292046d2fa796 +Block 0013 [ 94]: f2897d6e468bf8f6 +Block 0013 [ 95]: 901e412b7dc65309 +Block 0013 [ 96]: fb4891cd5a32b7db +Block 0013 [ 97]: 1a60255326e37f8a +Block 0013 [ 98]: 59c7a05cf45dc39a +Block 0013 [ 99]: 1b5b8c8670e944ff +Block 0013 [100]: 47145bf58a812d96 +Block 0013 [101]: 26e8ccd5429be8d0 +Block 0013 [102]: 046f3c2096f6bbc4 +Block 0013 [103]: 8482a9a6df7a65e4 +Block 0013 [104]: 50f04dcaf51f2d3d +Block 0013 [105]: 48d5efc4ddb27a70 +Block 0013 [106]: 2cb4d612eef96b21 +Block 0013 [107]: 7d49b448cca8912e +Block 0013 [108]: 129f7b291b96760f +Block 0013 [109]: 0493b40e6e7f3570 +Block 0013 [110]: 098c8184c1d123d0 +Block 0013 [111]: 8e42072653043cc7 +Block 0013 [112]: 6be95bddd1de01b2 +Block 0013 [113]: e06f858fad85516e +Block 0013 [114]: 43ffbff8f1706507 +Block 0013 [115]: eefd484bb56c691b +Block 0013 [116]: 61b105589d9b338c +Block 0013 [117]: 8e990037df282132 +Block 0013 [118]: 9763cc54d2f2cfc4 +Block 0013 [119]: 56e6c9eb670a2adc +Block 0013 [120]: a212057df0c0f6ea +Block 0013 [121]: f98be4183c32d1af +Block 0013 [122]: 478533919d7eaa3c +Block 0013 [123]: af360d62679b4f94 +Block 0013 [124]: a9acbd9a987da35e +Block 0013 [125]: b122a3845a30bf92 +Block 0013 [126]: a2d07821a856e6b2 +Block 0013 [127]: 04f46f78a0683224 +Block 0014 [ 0]: d0a71e6d68c6aecf +Block 0014 [ 1]: befd296e9a6f7bf7 +Block 0014 [ 2]: eb23e47984363429 +Block 0014 [ 3]: 9b4787767e96a598 +Block 0014 [ 4]: 08abd2c594da070c +Block 0014 [ 5]: 24cce834cf67ad28 +Block 0014 [ 6]: 1b09c6978feb2fc9 +Block 0014 [ 7]: ee90c0baca774d1a +Block 0014 [ 8]: 3708f4a4039a19eb +Block 0014 [ 9]: 0d496aa6634c2540 +Block 0014 [ 10]: 6bc152a0b15b3a2b +Block 0014 [ 11]: d10bfad6b4b43f2c +Block 0014 [ 12]: e96e477855119ddc +Block 0014 [ 13]: 1a544b91b3ce7fbc +Block 0014 [ 14]: cafc0eb55c122d6f +Block 0014 [ 15]: 037d2bc2a0f7530a +Block 0014 [ 16]: 95c2dd7aff0844be +Block 0014 [ 17]: 585ab21fe56d6e98 +Block 0014 [ 18]: 5b904ca8d183d28a +Block 0014 [ 19]: a2448fed9c557e8f +Block 0014 [ 20]: bc185e3656899faa +Block 0014 [ 21]: f4c474da33d146bb +Block 0014 [ 22]: 909b452e8713fe6f +Block 0014 [ 23]: cd9d52c628288b86 +Block 0014 [ 24]: 61e30da08cc69ad7 +Block 0014 [ 25]: 05e27f3a2c9cab56 +Block 0014 [ 26]: 4f6ce1ac6e1ae127 +Block 0014 [ 27]: a8f7e36d3e33f1f3 +Block 0014 [ 28]: b71335ed65487cce +Block 0014 [ 29]: 6ab069bebe4243a7 +Block 0014 [ 30]: 619ede30c4ef2624 +Block 0014 [ 31]: 692a41b133b0675f +Block 0014 [ 32]: 00215d331c4ce791 +Block 0014 [ 33]: f80accc7ba9eacd3 +Block 0014 [ 34]: 66c0e64361080502 +Block 0014 [ 35]: 561863112c28976f +Block 0014 [ 36]: 38d087594c680141 +Block 0014 [ 37]: 3fa2c7b0be344d66 +Block 0014 [ 38]: f3f51a71ee9ca468 +Block 0014 [ 39]: 95f467cf50cc8fc3 +Block 0014 [ 40]: d4a888b561d86fb0 +Block 0014 [ 41]: de87bb7e76a0dd0a +Block 0014 [ 42]: 61a14fb5723e3c91 +Block 0014 [ 43]: bfeb22754475e5e8 +Block 0014 [ 44]: f0b89172e3f1bc5b +Block 0014 [ 45]: d98d5b096ea38b76 +Block 0014 [ 46]: b6b790d56ab53d4c +Block 0014 [ 47]: 5ffd1be544675851 +Block 0014 [ 48]: 87b87fa919bd7fa7 +Block 0014 [ 49]: c478617f8f272678 +Block 0014 [ 50]: fb8fe0c3f64a0ccf +Block 0014 [ 51]: 8b551243e6d9382d +Block 0014 [ 52]: e1f38e5d1b03713e +Block 0014 [ 53]: e745fd4b6020c5f6 +Block 0014 [ 54]: 16f084e01fbc7f76 +Block 0014 [ 55]: fb9d312f55c899d4 +Block 0014 [ 56]: 380ceef8173536a8 +Block 0014 [ 57]: ed8d72a941db2c19 +Block 0014 [ 58]: 4002123ba862890e +Block 0014 [ 59]: 8a04fb41a64f5768 +Block 0014 [ 60]: fc1e9a8656875926 +Block 0014 [ 61]: f786b160707ffa14 +Block 0014 [ 62]: 987cf0bd188183ec +Block 0014 [ 63]: dcf2fe8c41728578 +Block 0014 [ 64]: f7e5aca070f4b430 +Block 0014 [ 65]: 96eb8b8b4d8cf4c8 +Block 0014 [ 66]: 866d2f63f3029682 +Block 0014 [ 67]: 2047180121f91c40 +Block 0014 [ 68]: 348ef39663476deb +Block 0014 [ 69]: fac01230e6089aba +Block 0014 [ 70]: 89f17de15e72ebe2 +Block 0014 [ 71]: 36e1d38205fa23f2 +Block 0014 [ 72]: 29faa8623e80e6ae +Block 0014 [ 73]: 76a33f8dc35f3290 +Block 0014 [ 74]: 1937ab138d449122 +Block 0014 [ 75]: e2aa81e221944c31 +Block 0014 [ 76]: fae8a6eab442f6af +Block 0014 [ 77]: 96a75c5ecae96184 +Block 0014 [ 78]: bbba5f15491b96a7 +Block 0014 [ 79]: 3dac0a6277186f87 +Block 0014 [ 80]: 2d026ceb7958bc42 +Block 0014 [ 81]: 2f5fcb9728eb62ce +Block 0014 [ 82]: 555e861c60727892 +Block 0014 [ 83]: 75daea44d6cbaa81 +Block 0014 [ 84]: b24c44f14fc25965 +Block 0014 [ 85]: 857b89408e44d277 +Block 0014 [ 86]: eca4d2d1efa199a3 +Block 0014 [ 87]: 33088d7ed812412e +Block 0014 [ 88]: 0263a5d914d3b296 +Block 0014 [ 89]: 83a093e24510f6f6 +Block 0014 [ 90]: aa67ef4b716938f7 +Block 0014 [ 91]: 6e7b4232ff800496 +Block 0014 [ 92]: 4297489b99c5964b +Block 0014 [ 93]: 9153dd490c532185 +Block 0014 [ 94]: 103733d2498559da +Block 0014 [ 95]: 36fac0d23f9ea533 +Block 0014 [ 96]: d736564ae0dda60d +Block 0014 [ 97]: abed530c0d96db44 +Block 0014 [ 98]: 266962ee099dcd61 +Block 0014 [ 99]: 6f3940d172461d85 +Block 0014 [100]: 731737d40a0b355f +Block 0014 [101]: f72f0c4d4441d25c +Block 0014 [102]: bec49deeb8ef1984 +Block 0014 [103]: d0859ff42db3710e +Block 0014 [104]: 99ff2ce81eb466c5 +Block 0014 [105]: ee5306c14d628890 +Block 0014 [106]: 40ea0b4fd6716f3d +Block 0014 [107]: b7c4ac4c8d4332a9 +Block 0014 [108]: a597ac3013e292c7 +Block 0014 [109]: da6fbb8fcc6b97a1 +Block 0014 [110]: f10c43f6c9e5ccd3 +Block 0014 [111]: 5b47d9496ff528ed +Block 0014 [112]: 91acaa483333c642 +Block 0014 [113]: 1ad7706921b3b8a9 +Block 0014 [114]: d9d2b9b18576072e +Block 0014 [115]: 210a8f3abe9db6b5 +Block 0014 [116]: ca41fc26bb135d0a +Block 0014 [117]: 384e457b4d13f8d8 +Block 0014 [118]: de698e11114e709d +Block 0014 [119]: 816dd5eebeca22c8 +Block 0014 [120]: 239a7c8bb28894fd +Block 0014 [121]: 6aba2b3bed305bdd +Block 0014 [122]: 668ccac32780f6e0 +Block 0014 [123]: 021c76c0b0d47e7f +Block 0014 [124]: 4b5939ee4c221e0f +Block 0014 [125]: e80bcb585f7ccc31 +Block 0014 [126]: 684c34269fa69d57 +Block 0014 [127]: 6051e4b2d171b880 +Block 0015 [ 0]: 923f88bc8b5c3f52 +Block 0015 [ 1]: 578d8d59d1604075 +Block 0015 [ 2]: 8db95b3e67603af3 +Block 0015 [ 3]: aeea5af3a1f5ebe4 +Block 0015 [ 4]: 669c71c88c1b0c60 +Block 0015 [ 5]: 03f5e673d2527562 +Block 0015 [ 6]: b0848a843a9482bb +Block 0015 [ 7]: afbb02cefb95a4d7 +Block 0015 [ 8]: b7e5388eeb15745d +Block 0015 [ 9]: 588e578329ef8f4e +Block 0015 [ 10]: 2caddb62b1e9c5d6 +Block 0015 [ 11]: 3303a6fbc816f592 +Block 0015 [ 12]: 16737e3f4ed44a71 +Block 0015 [ 13]: a8b076096115662b +Block 0015 [ 14]: 16647f89bd24e716 +Block 0015 [ 15]: d0f259b51d08173f +Block 0015 [ 16]: a5927a2b6b3cf0cf +Block 0015 [ 17]: 3dbd0814a2f17812 +Block 0015 [ 18]: b79afd45fff6c5e5 +Block 0015 [ 19]: 03d017c92f2dcf22 +Block 0015 [ 20]: bf6ec040d37e2e9e +Block 0015 [ 21]: a701255712aec166 +Block 0015 [ 22]: a270f973b6012ccc +Block 0015 [ 23]: a1567cbeec8ddabc +Block 0015 [ 24]: d7c5214c306eae0d +Block 0015 [ 25]: aaec001997c49c8a +Block 0015 [ 26]: cbb52fa37bfd7250 +Block 0015 [ 27]: f7995bb6508a5700 +Block 0015 [ 28]: bd8a678f71474623 +Block 0015 [ 29]: 8452544953085607 +Block 0015 [ 30]: ceae2bf6b80a08a0 +Block 0015 [ 31]: fab325a1606b95b7 +Block 0015 [ 32]: c60c406dc5bc8cf0 +Block 0015 [ 33]: d341ebfa38d4f533 +Block 0015 [ 34]: 29952b959eb7a7cf +Block 0015 [ 35]: 2435ccdb02c1647b +Block 0015 [ 36]: d4d48fdfd42fc50c +Block 0015 [ 37]: 33894bd3e7a843a6 +Block 0015 [ 38]: 931856766f61418f +Block 0015 [ 39]: 155b15cb5f31088a +Block 0015 [ 40]: 36e19042006d6ae4 +Block 0015 [ 41]: 26902564c5616d2d +Block 0015 [ 42]: 3d871267705f550e +Block 0015 [ 43]: 468c267fda5c995e +Block 0015 [ 44]: 0419b87d2e3443a1 +Block 0015 [ 45]: b379cb451c29225f +Block 0015 [ 46]: 15e1d708a734946c +Block 0015 [ 47]: 9457cc9185579480 +Block 0015 [ 48]: ab504b97cc71044e +Block 0015 [ 49]: c63d7adb7bda6984 +Block 0015 [ 50]: 630b7c072eb9859a +Block 0015 [ 51]: c242e7abbe745fb5 +Block 0015 [ 52]: 2b33e28cdde69822 +Block 0015 [ 53]: 5790e885c8928ec9 +Block 0015 [ 54]: b9dc2d755ec7ce01 +Block 0015 [ 55]: 163c9515259b0cc0 +Block 0015 [ 56]: 106cc0c8480f9779 +Block 0015 [ 57]: 2ba3947ecac1e765 +Block 0015 [ 58]: 9d447f56b9396f2e +Block 0015 [ 59]: 89f3ce4303d2d00a +Block 0015 [ 60]: 9a078e49f2a8274b +Block 0015 [ 61]: 81387c0c5d7360e0 +Block 0015 [ 62]: 78682bf4c2a1ed78 +Block 0015 [ 63]: f84c95533b6aee11 +Block 0015 [ 64]: 580a5a9f3738e4f8 +Block 0015 [ 65]: c8d7f364e82ad3de +Block 0015 [ 66]: 5875aba510ec2da2 +Block 0015 [ 67]: 88478a8b3b59dcea +Block 0015 [ 68]: 01547ea51866c827 +Block 0015 [ 69]: afc771726e09e872 +Block 0015 [ 70]: f26b84f1b29a9348 +Block 0015 [ 71]: 303d359c7983a4d8 +Block 0015 [ 72]: eed535f30aefb0e3 +Block 0015 [ 73]: b35dac44826075af +Block 0015 [ 74]: 9ca73ef717f6088d +Block 0015 [ 75]: 35cd92ec0fc882ba +Block 0015 [ 76]: f1cf7a2fb713126f +Block 0015 [ 77]: 6969c74bb3141567 +Block 0015 [ 78]: 9d334636658af1df +Block 0015 [ 79]: 6150b2c859b234f3 +Block 0015 [ 80]: d037be4342803988 +Block 0015 [ 81]: f0da5e16bba7397f +Block 0015 [ 82]: 3790c5cdec48ad9b +Block 0015 [ 83]: 93242fd303780d00 +Block 0015 [ 84]: 2fa1418df86105d7 +Block 0015 [ 85]: 0a44dd03fa02f75b +Block 0015 [ 86]: d48a3861b1e3a969 +Block 0015 [ 87]: 65fd27ced6dc8d8a +Block 0015 [ 88]: b8d911426f028ffe +Block 0015 [ 89]: 3cb6290c59a92c01 +Block 0015 [ 90]: df4bef9b8bb44949 +Block 0015 [ 91]: 4e4b57b894398fde +Block 0015 [ 92]: b55bbdb66340f7fd +Block 0015 [ 93]: 97a871f202f9ce22 +Block 0015 [ 94]: 6be3274e3c7061ad +Block 0015 [ 95]: e251e778d2c93834 +Block 0015 [ 96]: 70c4773d57021e1e +Block 0015 [ 97]: 798995170b281ec9 +Block 0015 [ 98]: f52ff5999ad3eb1e +Block 0015 [ 99]: a237d0e96b97782b +Block 0015 [100]: 1b7c02de9a73e9a9 +Block 0015 [101]: 1ee14242dd56c19c +Block 0015 [102]: 2487022c07200707 +Block 0015 [103]: 0921886a5777e70b +Block 0015 [104]: 3f0efb8959d4b9bf +Block 0015 [105]: 84e1a5aa909ff0f3 +Block 0015 [106]: 1ebf8bb3129f68d1 +Block 0015 [107]: f9b9c60235424d48 +Block 0015 [108]: 76a095cb8fbb24db +Block 0015 [109]: 99db66cf266191e9 +Block 0015 [110]: 66c87dc70f5d5ba8 +Block 0015 [111]: f7444d7763b939e1 +Block 0015 [112]: 858d7c9b41041901 +Block 0015 [113]: 1e89ff599a30d4e1 +Block 0015 [114]: f2f8685605d12f90 +Block 0015 [115]: 099ed67176ce729d +Block 0015 [116]: 8173bec3b6783e38 +Block 0015 [117]: db8b13db63f43ee8 +Block 0015 [118]: 4384ccd8d151b2ca +Block 0015 [119]: a29fbce4bd7b522d +Block 0015 [120]: 8c88929d17922135 +Block 0015 [121]: 3165fa6c0833ba1d +Block 0015 [122]: 02d6b259de6986fe +Block 0015 [123]: 488a4f9ac7f2b3e4 +Block 0015 [124]: 066aa29e0239ad1a +Block 0015 [125]: eefaf94deba147e8 +Block 0015 [126]: 81a56974feab366b +Block 0015 [127]: 0cf0d0f0e9684b43 +Block 0016 [ 0]: a58755fd5aba14e1 +Block 0016 [ 1]: 4bba15d271ff7b86 +Block 0016 [ 2]: 2af24b430abe13dd +Block 0016 [ 3]: fdfc62a4a6465f25 +Block 0016 [ 4]: 0110b3c714fa6324 +Block 0016 [ 5]: 44eaab03c972e7c5 +Block 0016 [ 6]: bab5296e3e127f16 +Block 0016 [ 7]: 221dd2a707de8136 +Block 0016 [ 8]: bae66312a437d33c +Block 0016 [ 9]: 41b70180f3c522cc +Block 0016 [ 10]: 01d87bb602992349 +Block 0016 [ 11]: fa9ec46adc863906 +Block 0016 [ 12]: 55236bf04fcec435 +Block 0016 [ 13]: c2b853f237529a47 +Block 0016 [ 14]: b1b2b7599d8d3389 +Block 0016 [ 15]: 50e07c48ec97fafc +Block 0016 [ 16]: efbc4a65ee24334c +Block 0016 [ 17]: e65f79b3c431511f +Block 0016 [ 18]: 83e3c9ff15b0ad16 +Block 0016 [ 19]: ff122406db689e4d +Block 0016 [ 20]: f724e24cd66a82ba +Block 0016 [ 21]: e96fa8228fe49099 +Block 0016 [ 22]: 1ebcf3357fa22834 +Block 0016 [ 23]: 8706c397861d4952 +Block 0016 [ 24]: d7d2622673c4f5fb +Block 0016 [ 25]: acd59a1abf98b00a +Block 0016 [ 26]: a80d7e6af7bcdd24 +Block 0016 [ 27]: 95e87ac9fd9082fc +Block 0016 [ 28]: e0f922992d427fbb +Block 0016 [ 29]: e67de2dece52c91c +Block 0016 [ 30]: 2353af574cc5d73a +Block 0016 [ 31]: 351ea23270c34b97 +Block 0016 [ 32]: a66303a5404984ed +Block 0016 [ 33]: 62502bd41ad3c8ea +Block 0016 [ 34]: bc0818e328e16211 +Block 0016 [ 35]: 1830d7f7a26ad737 +Block 0016 [ 36]: 0e2e1872ef33a31a +Block 0016 [ 37]: e07e2056add9fe1d +Block 0016 [ 38]: cecb5b5225a9d577 +Block 0016 [ 39]: 211cac8b11c45352 +Block 0016 [ 40]: f650fd25271b9c5a +Block 0016 [ 41]: 4a010b0f77e26da8 +Block 0016 [ 42]: 1f6f7df490099b1b +Block 0016 [ 43]: 36022d365802f027 +Block 0016 [ 44]: e35a379738a296e5 +Block 0016 [ 45]: 6491f8b4a212791c +Block 0016 [ 46]: b2d54c7989b5b0c1 +Block 0016 [ 47]: a0a7315c0eb890eb +Block 0016 [ 48]: 940c2febc8456f00 +Block 0016 [ 49]: afe584e0974acadc +Block 0016 [ 50]: 0237152efebb2203 +Block 0016 [ 51]: 519b38e94ad527c9 +Block 0016 [ 52]: 9e499dfc5a979151 +Block 0016 [ 53]: 45cbafa954f7b16f +Block 0016 [ 54]: 71124a4a9b161aee +Block 0016 [ 55]: b380225a3fc8298f +Block 0016 [ 56]: b8515b64f5e35d14 +Block 0016 [ 57]: 82d8b9dbe548ccd5 +Block 0016 [ 58]: 24c4387c54c4d022 +Block 0016 [ 59]: 850905f5110be9e8 +Block 0016 [ 60]: f8c0e31453bcb207 +Block 0016 [ 61]: 8a251ccea3671489 +Block 0016 [ 62]: ae373b1f897efb7f +Block 0016 [ 63]: ac8d3162c76d1c2c +Block 0016 [ 64]: 0d11769e3e5db3f2 +Block 0016 [ 65]: 02b25c0908ce43e4 +Block 0016 [ 66]: e61e2f849cec89d4 +Block 0016 [ 67]: d52c8897b2f3d019 +Block 0016 [ 68]: 75a7a2ae83d80ae6 +Block 0016 [ 69]: 9f18bcbdc9f84991 +Block 0016 [ 70]: e517fce50ccfd1e9 +Block 0016 [ 71]: 980bc68313152f3f +Block 0016 [ 72]: 4eee0692b9465b9d +Block 0016 [ 73]: 3d2e94a50e49e795 +Block 0016 [ 74]: 7943364021b4fea2 +Block 0016 [ 75]: bd284dd3f7ad94c7 +Block 0016 [ 76]: 8221ee08403f3e10 +Block 0016 [ 77]: a40cc63f8c9de094 +Block 0016 [ 78]: 6e6f2f7d80d7d21e +Block 0016 [ 79]: 91c0201f23fd6e6c +Block 0016 [ 80]: 8ed2b314946e622b +Block 0016 [ 81]: dd48c6c2a1d335d4 +Block 0016 [ 82]: 41ee6f41ab208bf2 +Block 0016 [ 83]: 31a77119b6432a9c +Block 0016 [ 84]: 1b2cafacf9b54382 +Block 0016 [ 85]: 5eebbe897674fa7a +Block 0016 [ 86]: b73ac43a8686afc1 +Block 0016 [ 87]: 1f18f754b7db2092 +Block 0016 [ 88]: 186a7e1729c70dd8 +Block 0016 [ 89]: b7bf5151c6cf12bc +Block 0016 [ 90]: a31c2209f7d6c042 +Block 0016 [ 91]: e4db5452b81a01a7 +Block 0016 [ 92]: e73013b5645ff098 +Block 0016 [ 93]: a72bcbd72ec7b4b5 +Block 0016 [ 94]: d210d34e4b8e4532 +Block 0016 [ 95]: 09ee1b5d61bce6c2 +Block 0016 [ 96]: 86b41575fd474119 +Block 0016 [ 97]: 75be5fc8ece614b5 +Block 0016 [ 98]: 96e9e61dee37c9c5 +Block 0016 [ 99]: 994b01e9f1345ba2 +Block 0016 [100]: e80cc816ade968fc +Block 0016 [101]: b6484de03360d188 +Block 0016 [102]: 1b5c090b15e4c7c0 +Block 0016 [103]: 81d0ca62028f558e +Block 0016 [104]: 1b888c6c14f4bad0 +Block 0016 [105]: 7eb7c64e6674cc77 +Block 0016 [106]: 27823d303ac7ab60 +Block 0016 [107]: 9bd5fc1e140bea6a +Block 0016 [108]: d3d5b0ec1bcc3af2 +Block 0016 [109]: a36ec3bae283e8c0 +Block 0016 [110]: a7ff28d89cdd37b1 +Block 0016 [111]: 10177e9779913f70 +Block 0016 [112]: e9cd34aca1c47853 +Block 0016 [113]: cd309025c34ee78c +Block 0016 [114]: 4b8ffe18a3795079 +Block 0016 [115]: 5739338964cdf1b6 +Block 0016 [116]: e12aa70c2d91e4e5 +Block 0016 [117]: 618f77eeb7756c59 +Block 0016 [118]: a2f6ed98f55b12db +Block 0016 [119]: 7b7c4a38542aa6e7 +Block 0016 [120]: 3de134f1ba20445f +Block 0016 [121]: 7e2d2dc86a558720 +Block 0016 [122]: 5d239acb1ace723f +Block 0016 [123]: 57a5a103088725d5 +Block 0016 [124]: 3d4216b97e1d53fd +Block 0016 [125]: 8e2a754bad98d6fa +Block 0016 [126]: a4a1b2c34a1e2235 +Block 0016 [127]: a893790880d4e4af +Block 0017 [ 0]: 6a568b087362d599 +Block 0017 [ 1]: f4d0b004b7cfb215 +Block 0017 [ 2]: 24a403b15457faf9 +Block 0017 [ 3]: 7d6970151918144c +Block 0017 [ 4]: af8a64ff39a95eae +Block 0017 [ 5]: 13595c675e901bbe +Block 0017 [ 6]: c813ac2e1400d481 +Block 0017 [ 7]: 4e2af4e6504acfe0 +Block 0017 [ 8]: d488199a10e3c70e +Block 0017 [ 9]: f0621ceecae39807 +Block 0017 [ 10]: c37349a0628508cb +Block 0017 [ 11]: 00a2ca683ec5d0ff +Block 0017 [ 12]: b3d531564dffb295 +Block 0017 [ 13]: 96707bff9634dffe +Block 0017 [ 14]: bfd49981867297ca +Block 0017 [ 15]: 2795dbda22feda25 +Block 0017 [ 16]: 2a5b8637c6281074 +Block 0017 [ 17]: 18ec37929c342379 +Block 0017 [ 18]: c5e6f284b4821ac9 +Block 0017 [ 19]: 1ece865da7d295ed +Block 0017 [ 20]: e6b4925e308e6c53 +Block 0017 [ 21]: 5fb9738e778c653f +Block 0017 [ 22]: 19c8799cf625c2e6 +Block 0017 [ 23]: 407f2e253c3af503 +Block 0017 [ 24]: c062e4fb2bb75df6 +Block 0017 [ 25]: c9d993dbf3164d9d +Block 0017 [ 26]: d0f246dc1158028c +Block 0017 [ 27]: d1a0f91ccf9fcc7f +Block 0017 [ 28]: e97b91e45fce6044 +Block 0017 [ 29]: 7bc62e06a2248cf4 +Block 0017 [ 30]: c281b558f2f173c7 +Block 0017 [ 31]: 6548c47523b7b599 +Block 0017 [ 32]: c8af3c342b29b9ba +Block 0017 [ 33]: 0ee797539b104687 +Block 0017 [ 34]: 05b4ae0694f8472f +Block 0017 [ 35]: ec28f954ce73d75b +Block 0017 [ 36]: 956f6450c1306ae2 +Block 0017 [ 37]: e724ccd7925f9f45 +Block 0017 [ 38]: 0ed70803fc818da5 +Block 0017 [ 39]: b572f98a6f8a7408 +Block 0017 [ 40]: e93f48a2b46521ca +Block 0017 [ 41]: 0ebdc3c0b4a01fce +Block 0017 [ 42]: 1ec3dc824a30c790 +Block 0017 [ 43]: eee337efed2704ef +Block 0017 [ 44]: e801fa17db118356 +Block 0017 [ 45]: c20c79e85d2d88fa +Block 0017 [ 46]: 53359a3630c47888 +Block 0017 [ 47]: aee440b14a6c2c65 +Block 0017 [ 48]: 7cc5eae37cb7130e +Block 0017 [ 49]: 5641a3381f4bd0b5 +Block 0017 [ 50]: ada41bdbe746d269 +Block 0017 [ 51]: 22c263b7a9cedb8d +Block 0017 [ 52]: ada822e4bb4dfc81 +Block 0017 [ 53]: d91077f9e2b69e6c +Block 0017 [ 54]: 9dda916a85e71ba0 +Block 0017 [ 55]: 34c6398e727921de +Block 0017 [ 56]: 656e3e5b64f11348 +Block 0017 [ 57]: bf722197a87a9e52 +Block 0017 [ 58]: 3412696cf67a0536 +Block 0017 [ 59]: 61afa66a68537b17 +Block 0017 [ 60]: b81c87fc04ae41db +Block 0017 [ 61]: 2006797527ace218 +Block 0017 [ 62]: cdf9ed1a65c5523a +Block 0017 [ 63]: 81bfcdc44b341b2a +Block 0017 [ 64]: f8dfcaa6a6ed8007 +Block 0017 [ 65]: c9780e1c6c00a316 +Block 0017 [ 66]: 39569b0ad9ecf7bb +Block 0017 [ 67]: 369c5f6bf36daf32 +Block 0017 [ 68]: 2ef698ce1aabd3df +Block 0017 [ 69]: 5a3c9c147d106e0c +Block 0017 [ 70]: 6058270a1c6223b2 +Block 0017 [ 71]: 3e8ff7df68b29d00 +Block 0017 [ 72]: 0b2f4f395130e03c +Block 0017 [ 73]: 6ff710b6c6a86c61 +Block 0017 [ 74]: c16f6cc4ad8cfb65 +Block 0017 [ 75]: 759be4c5c0300c9a +Block 0017 [ 76]: dcae568becb44d58 +Block 0017 [ 77]: 4033bfa7607e6be6 +Block 0017 [ 78]: b445e7f3dbdef860 +Block 0017 [ 79]: ed0713c8f7d26751 +Block 0017 [ 80]: c84474035912a985 +Block 0017 [ 81]: 736f9184cdaa51f0 +Block 0017 [ 82]: ca0200924a6c76ba +Block 0017 [ 83]: d2e7fa645197c8e7 +Block 0017 [ 84]: 684cff2a784c969a +Block 0017 [ 85]: a81dbbbd245b5e1d +Block 0017 [ 86]: ed7a637fa3edc4b5 +Block 0017 [ 87]: 5f633a937e8ac431 +Block 0017 [ 88]: d25f821a1705e8f7 +Block 0017 [ 89]: d70c4299eb339515 +Block 0017 [ 90]: eff333ecf0353a1a +Block 0017 [ 91]: f401acd34391980f +Block 0017 [ 92]: 0295ac459f82e8c7 +Block 0017 [ 93]: 8b3ad6255b4780f7 +Block 0017 [ 94]: d2e7679d3ab1059d +Block 0017 [ 95]: 113876dd59c72996 +Block 0017 [ 96]: 17402099db10b612 +Block 0017 [ 97]: 0b01e2395ce384ba +Block 0017 [ 98]: 6bf5bb488801618b +Block 0017 [ 99]: 478b5a50bc3a2c4e +Block 0017 [100]: 0691aed65eefc1cb +Block 0017 [101]: 26ca3fad5466834e +Block 0017 [102]: 13113afc925a6817 +Block 0017 [103]: aa0e3ed28b3748e2 +Block 0017 [104]: b05cab417dac8424 +Block 0017 [105]: 0d6e4d86a0c912f7 +Block 0017 [106]: 9296ffd1c9e73921 +Block 0017 [107]: 1e03c605386af466 +Block 0017 [108]: 91cb867eeda11be3 +Block 0017 [109]: 3f1d5547f2c285c5 +Block 0017 [110]: 5a44678b78e7f616 +Block 0017 [111]: e5c07179aa7f608c +Block 0017 [112]: 083d0125aef8a233 +Block 0017 [113]: 179fd2d54fd4b257 +Block 0017 [114]: 7317cfd85758e269 +Block 0017 [115]: a21a270edc02b12e +Block 0017 [116]: 1a91dea7cd6e3221 +Block 0017 [117]: 55e99b07ffbeb71b +Block 0017 [118]: 5d6602f3d5351f15 +Block 0017 [119]: 1ddeb23652a7e470 +Block 0017 [120]: 41f0237d9948fc2d +Block 0017 [121]: 5ff55d244a864d70 +Block 0017 [122]: 8a6286abb55ce32f +Block 0017 [123]: f43c75e4d707e357 +Block 0017 [124]: 0b4c2b087242ca7c +Block 0017 [125]: 004f4ad50e58ac07 +Block 0017 [126]: 8648d433233bb2f5 +Block 0017 [127]: ee0bb08cd06e652f +Block 0018 [ 0]: 74bf48c25eaede69 +Block 0018 [ 1]: 0400a05f89a28857 +Block 0018 [ 2]: 0ab09e32a93bef73 +Block 0018 [ 3]: 05057d01ce0ef39f +Block 0018 [ 4]: 5c7978beb2277bb5 +Block 0018 [ 5]: a5d253e71f9ccae2 +Block 0018 [ 6]: c1f315aa6f3e9f74 +Block 0018 [ 7]: e72ff5afa533a4d4 +Block 0018 [ 8]: ecb3208c2142c54a +Block 0018 [ 9]: 0e2f949b8ee280ca +Block 0018 [ 10]: 7e3c92a4356588c0 +Block 0018 [ 11]: 9964e66e407bf3df +Block 0018 [ 12]: db714a9185258f27 +Block 0018 [ 13]: e65e22001dc81e32 +Block 0018 [ 14]: 90d8961c9c3756c7 +Block 0018 [ 15]: e2591928d215597e +Block 0018 [ 16]: c73cf20184efb1bc +Block 0018 [ 17]: 4f1a1044384c6f4f +Block 0018 [ 18]: 7e6b458e6fb0da22 +Block 0018 [ 19]: 8643245d817c7fbb +Block 0018 [ 20]: 11fdba7a2f78305b +Block 0018 [ 21]: f83ea63c173e06b1 +Block 0018 [ 22]: 9c7a045abe8c90a8 +Block 0018 [ 23]: b36c2a3626317afa +Block 0018 [ 24]: 3a44cafe43247699 +Block 0018 [ 25]: 0a141875b2a3608e +Block 0018 [ 26]: fcff57382918c295 +Block 0018 [ 27]: 8953eebab5b47e2b +Block 0018 [ 28]: 304750d888f8cf36 +Block 0018 [ 29]: 7eda590b3eecc804 +Block 0018 [ 30]: 65387915616d50d9 +Block 0018 [ 31]: 3227c1b6926315ea +Block 0018 [ 32]: b66da09195679368 +Block 0018 [ 33]: 5d3680c936733dc9 +Block 0018 [ 34]: 787cb30e129ab8bf +Block 0018 [ 35]: d356deaf9969ecd8 +Block 0018 [ 36]: e1cbceb0c6301fec +Block 0018 [ 37]: b65960ffae6c48c7 +Block 0018 [ 38]: 26a3712c2c111301 +Block 0018 [ 39]: 3579927152608c6a +Block 0018 [ 40]: ee4ca14008db9e5a +Block 0018 [ 41]: 012d00b0c4f6d234 +Block 0018 [ 42]: fe0f71ad0c37f2c5 +Block 0018 [ 43]: 63278fe0caa8ae1b +Block 0018 [ 44]: a304e7cadc483280 +Block 0018 [ 45]: f05f6bd6733075d4 +Block 0018 [ 46]: 534f8814741a4e0f +Block 0018 [ 47]: 8c21885188289bbb +Block 0018 [ 48]: d84ae9b0b404d205 +Block 0018 [ 49]: b3bc7c1e0afb6704 +Block 0018 [ 50]: 12c688be5d993b2e +Block 0018 [ 51]: aba988c6fc3bdb09 +Block 0018 [ 52]: 19b70cbd0d319bca +Block 0018 [ 53]: a51c29abe752369f +Block 0018 [ 54]: 4b0c55f1078c21b6 +Block 0018 [ 55]: ec9469aa4c1641e5 +Block 0018 [ 56]: dce1e647f70717c8 +Block 0018 [ 57]: c0887888f6060dd7 +Block 0018 [ 58]: 62af261baa0346ef +Block 0018 [ 59]: 3791ff08130c2ec5 +Block 0018 [ 60]: 40db56c530ff4828 +Block 0018 [ 61]: ad33136573457d2d +Block 0018 [ 62]: 4798cf53b26c7995 +Block 0018 [ 63]: bec038a566ee052f +Block 0018 [ 64]: 28fea35a44a8ad77 +Block 0018 [ 65]: 87922d63a04a7714 +Block 0018 [ 66]: 9fd1568b3961a755 +Block 0018 [ 67]: b814da74cb12e514 +Block 0018 [ 68]: 1e27e85db17b9b89 +Block 0018 [ 69]: 792060548ca6833f +Block 0018 [ 70]: 7f2633d664ef5ae0 +Block 0018 [ 71]: 93141a17f55c38d6 +Block 0018 [ 72]: c425ffa62860b3c4 +Block 0018 [ 73]: 126d931e23550e3a +Block 0018 [ 74]: f564b0e7a0fecec7 +Block 0018 [ 75]: 04fa1b585c310f79 +Block 0018 [ 76]: 61a14482bfc01919 +Block 0018 [ 77]: d63d6673e239bab0 +Block 0018 [ 78]: 98497f450519caf4 +Block 0018 [ 79]: 77a388d80ef61859 +Block 0018 [ 80]: afb4830ccf82147c +Block 0018 [ 81]: 56c5184493808a78 +Block 0018 [ 82]: 61b0745753eb147a +Block 0018 [ 83]: f3dc622060ceeddb +Block 0018 [ 84]: 2c16e6a7f4f85a80 +Block 0018 [ 85]: b5a812a2eaa530ce +Block 0018 [ 86]: 7355aec5721f7c5a +Block 0018 [ 87]: c8ad08d26497df3b +Block 0018 [ 88]: 8e0e0ca4e4e6a84b +Block 0018 [ 89]: 6574239609c73bee +Block 0018 [ 90]: 400d0a8a2958e233 +Block 0018 [ 91]: 0d12d5aaedfa7ee2 +Block 0018 [ 92]: ce01ba6a21f45b55 +Block 0018 [ 93]: 64fc77da92ebace2 +Block 0018 [ 94]: d94e61b2c96c1b88 +Block 0018 [ 95]: 46e4dff70fbb78e0 +Block 0018 [ 96]: 27e6ff694f3a7e44 +Block 0018 [ 97]: ba79e628d78eccdb +Block 0018 [ 98]: d3896748607f61f3 +Block 0018 [ 99]: 854a68e059d889e7 +Block 0018 [100]: 17cec322e53e3376 +Block 0018 [101]: e2a0da69fbe10025 +Block 0018 [102]: 125d98efed8be71b +Block 0018 [103]: 554a109e66331278 +Block 0018 [104]: 5f7d27d772887cf9 +Block 0018 [105]: 06666ff797d87c2b +Block 0018 [106]: 7a5e44a65427fbf1 +Block 0018 [107]: 3fefa1be4c489aaf +Block 0018 [108]: 031406bfb5cfdcf3 +Block 0018 [109]: d26b2c2a6f1a7bbe +Block 0018 [110]: 6fe546818e5f0997 +Block 0018 [111]: 05fbde7911b35967 +Block 0018 [112]: 922377a3eb2369cb +Block 0018 [113]: 754e283ffb70c99e +Block 0018 [114]: 3b7334104b59591c +Block 0018 [115]: cab8aeb7fc317a77 +Block 0018 [116]: f58d70ddb079d0af +Block 0018 [117]: 869d96630428ee86 +Block 0018 [118]: f792876a73b5557b +Block 0018 [119]: d95d44f60a27c85f +Block 0018 [120]: 1ce5feae87c3c213 +Block 0018 [121]: b5a536920eefc202 +Block 0018 [122]: b4b10901d5a76a60 +Block 0018 [123]: 37fec8e389f4692e +Block 0018 [124]: 3a2d7166807e2a10 +Block 0018 [125]: 97b37652df6d8c82 +Block 0018 [126]: c10e61a6454af63f +Block 0018 [127]: 7543572a7389b452 +Block 0019 [ 0]: 722ded4f56a565fb +Block 0019 [ 1]: 66f81b75a79a68f9 +Block 0019 [ 2]: 2ed3e3524e669534 +Block 0019 [ 3]: 3d0249646b4e5ceb +Block 0019 [ 4]: 23702f362b010609 +Block 0019 [ 5]: 66c14af9081b479c +Block 0019 [ 6]: fe76e828c7874bb5 +Block 0019 [ 7]: c9df351081f32a1a +Block 0019 [ 8]: f10f2645d1a94c61 +Block 0019 [ 9]: 8882d7a1ac2ebb6b +Block 0019 [ 10]: 60942a191d37a892 +Block 0019 [ 11]: 5d13500bcaf64c75 +Block 0019 [ 12]: e82b0f549cef7b8c +Block 0019 [ 13]: eaadf7ce53b92191 +Block 0019 [ 14]: 99bcb35755b3e095 +Block 0019 [ 15]: 37d06d28a2bc5920 +Block 0019 [ 16]: 96bfe103e6756fc6 +Block 0019 [ 17]: 9998b5c265a72545 +Block 0019 [ 18]: 2a19f9ad33a764f4 +Block 0019 [ 19]: 1f58324f51536c9d +Block 0019 [ 20]: cc1ed217c0b8fa81 +Block 0019 [ 21]: 8ddea022746359cb +Block 0019 [ 22]: 598c823a015eff37 +Block 0019 [ 23]: b61185018876e8d7 +Block 0019 [ 24]: a2c60b6f3af802e3 +Block 0019 [ 25]: f687430b8a1995e1 +Block 0019 [ 26]: 408885fd6d7e25e8 +Block 0019 [ 27]: b6c64003bb3f1fbf +Block 0019 [ 28]: 5685b41a4d53d6b8 +Block 0019 [ 29]: 4275961a2e03b3bf +Block 0019 [ 30]: ba8c2c7d52ce5eef +Block 0019 [ 31]: 4b7a2193a5a42fb6 +Block 0019 [ 32]: 82ef795089ef1b6b +Block 0019 [ 33]: b92848e62bb47aba +Block 0019 [ 34]: e3ada75122fc94c0 +Block 0019 [ 35]: c0100b3a7a64a3eb +Block 0019 [ 36]: 81a50e5cf971bfdf +Block 0019 [ 37]: 54b58468e7722c0d +Block 0019 [ 38]: 5be0ac9c0bbadf47 +Block 0019 [ 39]: 8bbc079daf10cd6c +Block 0019 [ 40]: c15bcc3683e366df +Block 0019 [ 41]: 8b5e324a9ed3f23f +Block 0019 [ 42]: 4aa03e81d768546d +Block 0019 [ 43]: fea6138015a2067f +Block 0019 [ 44]: 8c551c9fa08bc353 +Block 0019 [ 45]: abc876b122520670 +Block 0019 [ 46]: 2cd7558d5b3be7e0 +Block 0019 [ 47]: ccf6a4b816c33ec8 +Block 0019 [ 48]: baba433c49797864 +Block 0019 [ 49]: 197ede8f7c567203 +Block 0019 [ 50]: fae9d3460ac15df5 +Block 0019 [ 51]: f3adae0f64326ece +Block 0019 [ 52]: 6e528bdb47402901 +Block 0019 [ 53]: 2492762ac597d40a +Block 0019 [ 54]: 6ba4c5c3d5bb98f1 +Block 0019 [ 55]: cd54dbf31e0abbdc +Block 0019 [ 56]: 54a77ea4cd91551f +Block 0019 [ 57]: dbb8c88ac1eaa8c0 +Block 0019 [ 58]: f88ca1ca32f1e921 +Block 0019 [ 59]: 3cf0026636693684 +Block 0019 [ 60]: fe13df5cdc931e0e +Block 0019 [ 61]: 3e568d869926bfc6 +Block 0019 [ 62]: 12b1e4f3b127b510 +Block 0019 [ 63]: 9571189e9fc54658 +Block 0019 [ 64]: d8e0280cc71d7261 +Block 0019 [ 65]: 1414ad7e77dec5b5 +Block 0019 [ 66]: 9d50c531d4e3b1f1 +Block 0019 [ 67]: a837736eb0b178bf +Block 0019 [ 68]: c7c3f7c72c12f553 +Block 0019 [ 69]: 514e9b4b12844d0a +Block 0019 [ 70]: 099df6d12c31f66c +Block 0019 [ 71]: 6c6130e568dae72b +Block 0019 [ 72]: 026ffd1b61ef6c3f +Block 0019 [ 73]: 85efd65d354c2027 +Block 0019 [ 74]: 8d228ab3cc044105 +Block 0019 [ 75]: 3a7e4faeeccb8b06 +Block 0019 [ 76]: e1ead5f1b2a58f7c +Block 0019 [ 77]: 80e45edbc5b44843 +Block 0019 [ 78]: 417757c3dc6e2c89 +Block 0019 [ 79]: c5cef9b96a73f341 +Block 0019 [ 80]: d2d3360debbc854b +Block 0019 [ 81]: ea796d996d79773a +Block 0019 [ 82]: 43b9ec58d25ccb0d +Block 0019 [ 83]: 909a2980fafca057 +Block 0019 [ 84]: 957bbb801c361db5 +Block 0019 [ 85]: ce623364956f8eb1 +Block 0019 [ 86]: a9e1ea98da49fcfb +Block 0019 [ 87]: 084eb35a88326f27 +Block 0019 [ 88]: 80507bdf2e3a52c1 +Block 0019 [ 89]: 65e09bdedcdbfe26 +Block 0019 [ 90]: f9c5e870eab6e090 +Block 0019 [ 91]: 64c80b52255ace7e +Block 0019 [ 92]: cb9a1a29583766a7 +Block 0019 [ 93]: da6dbd5eb460785c +Block 0019 [ 94]: a78ad96bb297cb22 +Block 0019 [ 95]: 56f43ee98185b433 +Block 0019 [ 96]: 0be8bfd2f08db3c4 +Block 0019 [ 97]: 9a7df19eee797962 +Block 0019 [ 98]: b6846d0300b15563 +Block 0019 [ 99]: 2926611424a3c93a +Block 0019 [100]: 4e4bb76824d55a36 +Block 0019 [101]: 6390753096176e1b +Block 0019 [102]: b7fa767b6bfc44fb +Block 0019 [103]: d23a521d68c0cf75 +Block 0019 [104]: 51addd0e823b81ed +Block 0019 [105]: ec0627f8110db6a7 +Block 0019 [106]: db4f2d5cac87bd60 +Block 0019 [107]: 4c3cee848d16c717 +Block 0019 [108]: 7648ac62be70e5be +Block 0019 [109]: f5c6484cb942ac44 +Block 0019 [110]: b43fc27e9e6a4773 +Block 0019 [111]: b82a706ea829cb5b +Block 0019 [112]: 982b0c739e53385d +Block 0019 [113]: 1ebb4a34c10626c0 +Block 0019 [114]: 3e59c0dff3f1ec58 +Block 0019 [115]: 37a5c1a1a05f14ef +Block 0019 [116]: fe04a5fb0a9c8c3d +Block 0019 [117]: 736febc5e56a2aae +Block 0019 [118]: 01c6ae60f536f04c +Block 0019 [119]: 10ac08179e2a0a44 +Block 0019 [120]: 62eda4c56851c55a +Block 0019 [121]: 3655c086ab4dc453 +Block 0019 [122]: 6204a37f1668346b +Block 0019 [123]: d06115aa65a09d31 +Block 0019 [124]: cf4b6b55d0123805 +Block 0019 [125]: f205092073e33b99 +Block 0019 [126]: 33200ae2e1abaa05 +Block 0019 [127]: 44fc4dde9d1ebe43 +Block 0020 [ 0]: 41b07971e71a2e54 +Block 0020 [ 1]: 6f2089d15ada03ee +Block 0020 [ 2]: 6d0330debb1e1bc7 +Block 0020 [ 3]: 9d7ab01519234721 +Block 0020 [ 4]: b7183d6569ecf0b9 +Block 0020 [ 5]: 853a4e3facbc0533 +Block 0020 [ 6]: b06e176fa56954a7 +Block 0020 [ 7]: 27f4c2e2b2be4b39 +Block 0020 [ 8]: 33080d0850a86c1b +Block 0020 [ 9]: 2d8b3a453d3cbb50 +Block 0020 [ 10]: f4147219e8bcd1d4 +Block 0020 [ 11]: 430706f6860388f2 +Block 0020 [ 12]: 51c540fee2514f0d +Block 0020 [ 13]: 8ccdad415ea6ee66 +Block 0020 [ 14]: f520cd207b48edc6 +Block 0020 [ 15]: 87a9d3aba575a7ce +Block 0020 [ 16]: 210f9df0bc9e9108 +Block 0020 [ 17]: ee022c298f3942b6 +Block 0020 [ 18]: 9bc38103277c849c +Block 0020 [ 19]: c75db3f801f64ec0 +Block 0020 [ 20]: 2ae94ab7f9f8942f +Block 0020 [ 21]: a257534ac5235d94 +Block 0020 [ 22]: 188a094687c623a3 +Block 0020 [ 23]: d08168250ca805e3 +Block 0020 [ 24]: f3e4d78cf027612a +Block 0020 [ 25]: 392503cd6ae2f3b0 +Block 0020 [ 26]: 00a1bc98866892b4 +Block 0020 [ 27]: 52d5b875e04684e0 +Block 0020 [ 28]: 10eaadda403ba853 +Block 0020 [ 29]: 31fb34dee9418d93 +Block 0020 [ 30]: 19e4ab017f8d5d32 +Block 0020 [ 31]: 58154f814ce6de3b +Block 0020 [ 32]: 300d30a35d50ff55 +Block 0020 [ 33]: 5bc5a82f48804532 +Block 0020 [ 34]: 1b0f36ce4856deb0 +Block 0020 [ 35]: 825a2dbdb23e6f97 +Block 0020 [ 36]: 77966bdabcdbc0a5 +Block 0020 [ 37]: e4399601c93be292 +Block 0020 [ 38]: d8af3dc1dc33bf15 +Block 0020 [ 39]: 86ef6420ae6283cc +Block 0020 [ 40]: 455268aba83b61f2 +Block 0020 [ 41]: d2c002689ec6cfb7 +Block 0020 [ 42]: 2045ec9ab1b82eaa +Block 0020 [ 43]: f090b6215091285b +Block 0020 [ 44]: db2f72dbec97da20 +Block 0020 [ 45]: ad4d8b2ff8b2135e +Block 0020 [ 46]: a5b25c830e505d23 +Block 0020 [ 47]: a9faa876a6161e58 +Block 0020 [ 48]: 9aacdb2111fa9989 +Block 0020 [ 49]: 6f29852abb002e42 +Block 0020 [ 50]: 147df596b36eb419 +Block 0020 [ 51]: 70059f6668ce6269 +Block 0020 [ 52]: 7636a5a116415e7a +Block 0020 [ 53]: de880241472a104b +Block 0020 [ 54]: bcc7b804ee025dcd +Block 0020 [ 55]: 3b7ecef3fd470a6a +Block 0020 [ 56]: 6139fcff135af1a9 +Block 0020 [ 57]: 703ef43ec763d407 +Block 0020 [ 58]: edfa811c241aaab8 +Block 0020 [ 59]: 4505a1b1377c7490 +Block 0020 [ 60]: 017655ace5ef1544 +Block 0020 [ 61]: e65824ab647d2c63 +Block 0020 [ 62]: bbf0c4e392476d22 +Block 0020 [ 63]: 09222639f2e1b822 +Block 0020 [ 64]: 1b45cf3b00b6cb95 +Block 0020 [ 65]: 4550026be5fa7271 +Block 0020 [ 66]: c06ad1f579d397ea +Block 0020 [ 67]: 64af21038c5e7b8a +Block 0020 [ 68]: 5b20ab16b33f03b9 +Block 0020 [ 69]: e849677673c9f8a8 +Block 0020 [ 70]: 3fe654d05ce1ae5e +Block 0020 [ 71]: 5825aba0671ac6e7 +Block 0020 [ 72]: 426d8a7b658fae5e +Block 0020 [ 73]: 0b7c48925a17445d +Block 0020 [ 74]: cd814a10d3c250a9 +Block 0020 [ 75]: e1b89d7598c24c73 +Block 0020 [ 76]: 8fd426f1e17e74c5 +Block 0020 [ 77]: f5a5ee0f82556b39 +Block 0020 [ 78]: 493624eb4ef93c0e +Block 0020 [ 79]: aea2a200cbc14750 +Block 0020 [ 80]: 808720a7c98fe9ff +Block 0020 [ 81]: 38ef2a776caad830 +Block 0020 [ 82]: 03ebc1bc2b48add4 +Block 0020 [ 83]: e0b48d9257cffc58 +Block 0020 [ 84]: b65a3be5a325716c +Block 0020 [ 85]: 45978217eda2c997 +Block 0020 [ 86]: 733948d9a58f9ae9 +Block 0020 [ 87]: b7b731f51be4173a +Block 0020 [ 88]: 9b28a46c6801aefc +Block 0020 [ 89]: 3e7391b2e7dfcbe4 +Block 0020 [ 90]: 8ea972520400f578 +Block 0020 [ 91]: 91949581521e1e4b +Block 0020 [ 92]: 1d9aab7d0c9209c6 +Block 0020 [ 93]: 9e289a904e90a578 +Block 0020 [ 94]: c580ae13f3a13a7f +Block 0020 [ 95]: 0975acd1f64f31c2 +Block 0020 [ 96]: d880c8480b663a97 +Block 0020 [ 97]: b20a8a30f36969b2 +Block 0020 [ 98]: 494bbd11053ada9d +Block 0020 [ 99]: 6c5976a5348e6cf7 +Block 0020 [100]: 7f6c2e22a6603550 +Block 0020 [101]: a7fa0251004384bb +Block 0020 [102]: a7a22b9632283a45 +Block 0020 [103]: fc0986d873115470 +Block 0020 [104]: 71555418129d0b36 +Block 0020 [105]: 9e00a18a599c1fea +Block 0020 [106]: 6deaac74ca260a50 +Block 0020 [107]: e1c8fe4ef7a9de6d +Block 0020 [108]: 01171cb695ed590d +Block 0020 [109]: 47bb44260c897574 +Block 0020 [110]: 530fc16d6918e1b9 +Block 0020 [111]: e8df2c3b9139fd0b +Block 0020 [112]: 4cb5e096924f0984 +Block 0020 [113]: 027123d359f10fb0 +Block 0020 [114]: 55027b0c9f2435bd +Block 0020 [115]: 272d5f7961436e9c +Block 0020 [116]: e5b9d9a32412556f +Block 0020 [117]: 457880a2978e3c7d +Block 0020 [118]: 035359bb4cc2bf39 +Block 0020 [119]: 106c5417cb96c096 +Block 0020 [120]: 3873b238fbff0942 +Block 0020 [121]: 17ae8af56a1c42e0 +Block 0020 [122]: d1ba5b1140949f1f +Block 0020 [123]: e47d23a41498eb54 +Block 0020 [124]: 0c90f5bafd925619 +Block 0020 [125]: 9ea964113672b524 +Block 0020 [126]: 57728a9955920a13 +Block 0020 [127]: 35977a9645b06609 +Block 0021 [ 0]: 99c90699f26a1583 +Block 0021 [ 1]: d62506b1691ce83e +Block 0021 [ 2]: f95c5d44ea02239c +Block 0021 [ 3]: fcf27c44241cd6c8 +Block 0021 [ 4]: a0d86491c7ceb500 +Block 0021 [ 5]: 4dd10f8ab9541a9f +Block 0021 [ 6]: ae17a91916abe872 +Block 0021 [ 7]: 9d67d7d00fbe0a70 +Block 0021 [ 8]: f1a88d532cd28a63 +Block 0021 [ 9]: 39dd4f50229a82bf +Block 0021 [ 10]: 76a06d0dee8b8ade +Block 0021 [ 11]: 9aef30b84382c629 +Block 0021 [ 12]: 6ac22e4389612006 +Block 0021 [ 13]: d6f9d4d874e6e975 +Block 0021 [ 14]: 93dca20f9d1e625c +Block 0021 [ 15]: 2b264238671a0857 +Block 0021 [ 16]: a0bd56d8e2e3f336 +Block 0021 [ 17]: 9e854d3d7dba0d74 +Block 0021 [ 18]: a1e92df035152bd8 +Block 0021 [ 19]: 99d496cda4159e13 +Block 0021 [ 20]: a774e449e3e60348 +Block 0021 [ 21]: d1ac8ce6802fc4a8 +Block 0021 [ 22]: 97e20ec345140420 +Block 0021 [ 23]: 9f61750cd5ad600c +Block 0021 [ 24]: 7fe30c292f6519a2 +Block 0021 [ 25]: 45b180ba23bd51ec +Block 0021 [ 26]: a21343dd46c044f3 +Block 0021 [ 27]: 7bbb471ba8cff820 +Block 0021 [ 28]: 3ecad47da26e6430 +Block 0021 [ 29]: 61cb0da0292bcba7 +Block 0021 [ 30]: e419902f76899dee +Block 0021 [ 31]: 38525a26a35795dd +Block 0021 [ 32]: fcb9b939e7f343f0 +Block 0021 [ 33]: 6494c6a7a62d017f +Block 0021 [ 34]: d4a8a76c81242c2a +Block 0021 [ 35]: 7a6343b883eca4c3 +Block 0021 [ 36]: 6b52b95e7513d6cf +Block 0021 [ 37]: bce9e80e22a770db +Block 0021 [ 38]: 34996a31fed99173 +Block 0021 [ 39]: d75d7573d84fa88e +Block 0021 [ 40]: cc9e1bac5dad04de +Block 0021 [ 41]: a3b704494d792b36 +Block 0021 [ 42]: 0b0e12bcf6320ed3 +Block 0021 [ 43]: d28103a70d3e3655 +Block 0021 [ 44]: a177e02a07d98275 +Block 0021 [ 45]: 79ea910a8dd1c191 +Block 0021 [ 46]: fb03b764354a515f +Block 0021 [ 47]: 68a2728a2f946b07 +Block 0021 [ 48]: 996e901859fe60c4 +Block 0021 [ 49]: 5527efc44a3296a2 +Block 0021 [ 50]: 5845975faf68289b +Block 0021 [ 51]: 73d6ec705f545c49 +Block 0021 [ 52]: 5fa6778e2931528c +Block 0021 [ 53]: d9b6ddfe8040afd0 +Block 0021 [ 54]: 47a62e52424a7e33 +Block 0021 [ 55]: 47d07505251483e4 +Block 0021 [ 56]: 22ab3a448d5d134f +Block 0021 [ 57]: 4ce926e1a6df0cb8 +Block 0021 [ 58]: 72e00206862d8fa3 +Block 0021 [ 59]: 4b21559bab3f86f9 +Block 0021 [ 60]: 5a980c3b46d2be8e +Block 0021 [ 61]: 2ad9c2bcfe81e3b0 +Block 0021 [ 62]: 3bc624dfc37b8678 +Block 0021 [ 63]: 6d0d890bf0e9383f +Block 0021 [ 64]: 13d4089c25ec8ffe +Block 0021 [ 65]: c6e423ff6deb38d0 +Block 0021 [ 66]: ed6efbb604ad58c3 +Block 0021 [ 67]: efff5f38588ee612 +Block 0021 [ 68]: e3a7dae5a4ed29f1 +Block 0021 [ 69]: 38f2b792dfa1f064 +Block 0021 [ 70]: 94df3e2e745001a8 +Block 0021 [ 71]: 191a9276726070d9 +Block 0021 [ 72]: a510d07a141e7c38 +Block 0021 [ 73]: 5187183f8bb6e37a +Block 0021 [ 74]: a89e8c635f78a474 +Block 0021 [ 75]: ef39d133b7b710bd +Block 0021 [ 76]: ca5d7f377ef97849 +Block 0021 [ 77]: d7fb3c6e198ce5c4 +Block 0021 [ 78]: 16df2cc9d3071253 +Block 0021 [ 79]: 304e49111ea36b61 +Block 0021 [ 80]: 5919cd2abde8b09b +Block 0021 [ 81]: b27c8cb92e63932c +Block 0021 [ 82]: a03cfa230885f078 +Block 0021 [ 83]: 8855f9e6a50e0f00 +Block 0021 [ 84]: 83776b22df33ddf2 +Block 0021 [ 85]: 9275ae6a25ef9eb7 +Block 0021 [ 86]: 77f4f48c8d1fe5aa +Block 0021 [ 87]: 69e9c3ee6a313b91 +Block 0021 [ 88]: 34b2295d5b3cdfcb +Block 0021 [ 89]: 12ff0fd856bf17ec +Block 0021 [ 90]: 587825e8731f7532 +Block 0021 [ 91]: 7dc7d996c3b4dce1 +Block 0021 [ 92]: 5f94801d9ed7653b +Block 0021 [ 93]: 348f649bc8b74dac +Block 0021 [ 94]: dad511c9cd3dcd6c +Block 0021 [ 95]: 0d917c4a0c43537f +Block 0021 [ 96]: 543656e021e84162 +Block 0021 [ 97]: 1b5ad2836aeceb01 +Block 0021 [ 98]: 4ec9892cdf9bfaab +Block 0021 [ 99]: 8d95edf99171f888 +Block 0021 [100]: e184a5d6e42b9a7d +Block 0021 [101]: 23d27bc89de6801d +Block 0021 [102]: 236dc56a8fb5bb28 +Block 0021 [103]: f4e9ad75c9164dfb +Block 0021 [104]: ca92660dd6587d3a +Block 0021 [105]: 2822f9d7244bcc6d +Block 0021 [106]: 48b9cdca7b7159e1 +Block 0021 [107]: 97aa097f37692268 +Block 0021 [108]: 55e71fb044d7240a +Block 0021 [109]: fda7d8cead56d549 +Block 0021 [110]: af1e22ae2acae662 +Block 0021 [111]: 0bcbdf3af40e9c02 +Block 0021 [112]: 36b682b884dd3d7f +Block 0021 [113]: 5d29a9d2d1151a44 +Block 0021 [114]: 854dba4dc22926c5 +Block 0021 [115]: 75bccec357d65282 +Block 0021 [116]: 5fde2a2fd1a4d824 +Block 0021 [117]: ed6998c95c8c6031 +Block 0021 [118]: e42e6570c0ad8465 +Block 0021 [119]: 5363ae9589974f9d +Block 0021 [120]: 40209c1636899495 +Block 0021 [121]: 12f654e59f60f899 +Block 0021 [122]: 823fe8ba8eeb4649 +Block 0021 [123]: aa89425aa56b89b0 +Block 0021 [124]: 1c9a89ffa7aa2e7d +Block 0021 [125]: 0a1444d8cc22176f +Block 0021 [126]: d609a1c4ba94fa64 +Block 0021 [127]: ced53958b80bec2b +Block 0022 [ 0]: 1da00099e66ef42d +Block 0022 [ 1]: 60051fa3148b044e +Block 0022 [ 2]: 5dffa61c0c4dd432 +Block 0022 [ 3]: 18ac1fc7126204a2 +Block 0022 [ 4]: 753c3e883f63ef2f +Block 0022 [ 5]: a06af327af4c353b +Block 0022 [ 6]: 2c7e5aeb619e62cd +Block 0022 [ 7]: 067369e344526c25 +Block 0022 [ 8]: cf2dc2a2129f8283 +Block 0022 [ 9]: 6a7c0f5c06bffe14 +Block 0022 [ 10]: 4dd26b4524d0ea86 +Block 0022 [ 11]: a2e396830d604849 +Block 0022 [ 12]: ef540d936920acf0 +Block 0022 [ 13]: 53ef06d1f724d53a +Block 0022 [ 14]: 54ae1738225434d1 +Block 0022 [ 15]: d1835a92bc86f620 +Block 0022 [ 16]: 2aab6f075442a3cc +Block 0022 [ 17]: 603b2ca9761f8d49 +Block 0022 [ 18]: c6568ac3285d529e +Block 0022 [ 19]: 58fdad7c1b55134e +Block 0022 [ 20]: 90624214e9a57b86 +Block 0022 [ 21]: a6cd63cab7904bfb +Block 0022 [ 22]: 83ad727778cde839 +Block 0022 [ 23]: 9ab8afa2286e842e +Block 0022 [ 24]: edbdb92663550224 +Block 0022 [ 25]: fbd29a092c3e61d4 +Block 0022 [ 26]: c8e6d473fa37ab66 +Block 0022 [ 27]: d673deaa1518e949 +Block 0022 [ 28]: bab2538d9670730a +Block 0022 [ 29]: 8781d6b5b1282389 +Block 0022 [ 30]: 889a278999b787f5 +Block 0022 [ 31]: 5c9130cc500dcff6 +Block 0022 [ 32]: 2aa0f7ccb6d323ce +Block 0022 [ 33]: 98aa0c33857b56ae +Block 0022 [ 34]: dd2d61bed7326a1f +Block 0022 [ 35]: e8ae346eaa70e1b9 +Block 0022 [ 36]: 0ca297ee47dc5c23 +Block 0022 [ 37]: a85828fd8f6a48f1 +Block 0022 [ 38]: 3fada5811a2f45ff +Block 0022 [ 39]: a4a18e6dec23bce2 +Block 0022 [ 40]: 9dde4721c7b04949 +Block 0022 [ 41]: 8fd9ad826dbd0158 +Block 0022 [ 42]: c1ed3966f87f77cc +Block 0022 [ 43]: aa5fc4506ce403a0 +Block 0022 [ 44]: ac4850b5ea87864e +Block 0022 [ 45]: f5735e71c2cb42a4 +Block 0022 [ 46]: 823529430c10d420 +Block 0022 [ 47]: 446df0a78e000e46 +Block 0022 [ 48]: 8771cc750136b8e5 +Block 0022 [ 49]: 2e2628823443a8db +Block 0022 [ 50]: c6a6187323f4cd6b +Block 0022 [ 51]: 265ab59a5990dc4f +Block 0022 [ 52]: b0c3110cdc2358f1 +Block 0022 [ 53]: bcf49b9c3004c09d +Block 0022 [ 54]: 9e83ebc5241caa96 +Block 0022 [ 55]: ef830b3712383b1f +Block 0022 [ 56]: 17f539868f6e9713 +Block 0022 [ 57]: db242d8e258930e1 +Block 0022 [ 58]: 88f6704ee750c93d +Block 0022 [ 59]: 98009f6dfda71343 +Block 0022 [ 60]: 211be7123434fa67 +Block 0022 [ 61]: 06d86941cf2a41d4 +Block 0022 [ 62]: 934e8ed1001c3173 +Block 0022 [ 63]: 5ff02cafaab08125 +Block 0022 [ 64]: 0e9cbe1181a2d948 +Block 0022 [ 65]: d604a87b2427a6d7 +Block 0022 [ 66]: 067b185ccdf74dfe +Block 0022 [ 67]: 52e829ca3ed629ea +Block 0022 [ 68]: 9736d99f80701d87 +Block 0022 [ 69]: 974b0fcce11b2b77 +Block 0022 [ 70]: bd0d279e5421bbb8 +Block 0022 [ 71]: 29ee3bee260e3d67 +Block 0022 [ 72]: ee83a1cb54c014e2 +Block 0022 [ 73]: 2e0108d2ddb29065 +Block 0022 [ 74]: b927a78661625a92 +Block 0022 [ 75]: d320d1edd78cdea1 +Block 0022 [ 76]: 90216cccaa408bcb +Block 0022 [ 77]: a30bf5e18568c173 +Block 0022 [ 78]: c4eeff092463f5bc +Block 0022 [ 79]: 6a02e06c90988918 +Block 0022 [ 80]: 75aa0513c85bee76 +Block 0022 [ 81]: 0d90c10fbfc98f6a +Block 0022 [ 82]: 22b1277d2a8a16f5 +Block 0022 [ 83]: cee277dd005434d8 +Block 0022 [ 84]: 74b9b4123bcd58d4 +Block 0022 [ 85]: 9f595ac2fae9e5d0 +Block 0022 [ 86]: 11abb45b6c9e5e94 +Block 0022 [ 87]: a5b6868faac30a9a +Block 0022 [ 88]: beb8eb90a2d94bdc +Block 0022 [ 89]: 85a2eb37e235c906 +Block 0022 [ 90]: 9812df8e1698ebeb +Block 0022 [ 91]: 80fd679454d57b52 +Block 0022 [ 92]: dedd235f5d241dc2 +Block 0022 [ 93]: 58dc832f313f86c9 +Block 0022 [ 94]: ca49428581158610 +Block 0022 [ 95]: 5592c3992f35b6a0 +Block 0022 [ 96]: e918d5519bc97f48 +Block 0022 [ 97]: dbed179659801803 +Block 0022 [ 98]: f3d1e84ec1682838 +Block 0022 [ 99]: 81d088fb0163ce0c +Block 0022 [100]: 44ab8f0a5f398e60 +Block 0022 [101]: 44d8d113cd76dd7e +Block 0022 [102]: 36bec6685b0e2d9f +Block 0022 [103]: 0eb2d2eac32b9963 +Block 0022 [104]: 4319f79d45e9a910 +Block 0022 [105]: e91892e798e42160 +Block 0022 [106]: fc49ca22cf5ee046 +Block 0022 [107]: ae47cad9b1a1efc0 +Block 0022 [108]: 7a2169fbcb66d15a +Block 0022 [109]: 8f288a3ed7cfb7a4 +Block 0022 [110]: 54c6d694a74d8134 +Block 0022 [111]: eb036b45a1f164cd +Block 0022 [112]: 1c2b92bfca286309 +Block 0022 [113]: d8f1e23b89f1b7fe +Block 0022 [114]: 226ed913a04440a9 +Block 0022 [115]: 820a7e2c62b61278 +Block 0022 [116]: 317c3873e97ad322 +Block 0022 [117]: 5fd5401f349640d4 +Block 0022 [118]: 6c261c7094ca1894 +Block 0022 [119]: 6382563616dde40e +Block 0022 [120]: a38efddd2856ad4e +Block 0022 [121]: 1a69eefa3f5d897c +Block 0022 [122]: d7facfcc348f5df3 +Block 0022 [123]: 774ad01cea97b6a1 +Block 0022 [124]: 310b32b642e47ac4 +Block 0022 [125]: 5cf3f59234fdabd9 +Block 0022 [126]: afcde19d8250f01a +Block 0022 [127]: 73328111c1ff8e50 +Block 0023 [ 0]: faf8e9819ed5bddf +Block 0023 [ 1]: eccb38057063208a +Block 0023 [ 2]: 3adf2ab57c6b8f56 +Block 0023 [ 3]: 7dcf4b78f7bb04b3 +Block 0023 [ 4]: 4d2f1ba17b270c57 +Block 0023 [ 5]: c864e4d4a99505c3 +Block 0023 [ 6]: a982c508981e425a +Block 0023 [ 7]: 84cb024b0c7d338b +Block 0023 [ 8]: 029d5ef435e63d19 +Block 0023 [ 9]: fc3e60863ada3dae +Block 0023 [ 10]: 737600c47f97ce5e +Block 0023 [ 11]: 65217fb0d1dadfca +Block 0023 [ 12]: bedac75aceac13be +Block 0023 [ 13]: 13462535ec401e42 +Block 0023 [ 14]: b90362ff75f3748c +Block 0023 [ 15]: 2f14623975e76b86 +Block 0023 [ 16]: 5da24444ab904020 +Block 0023 [ 17]: cbe1f774a01e2f3b +Block 0023 [ 18]: c5d93ae8ce4b962b +Block 0023 [ 19]: 222078ec418a87f9 +Block 0023 [ 20]: 80eda9084671249c +Block 0023 [ 21]: 407a498fce9f0d04 +Block 0023 [ 22]: d2b0138e498b6e94 +Block 0023 [ 23]: c59c1082ad4b29f6 +Block 0023 [ 24]: 46825537441ee810 +Block 0023 [ 25]: 1042ed08a5bf3469 +Block 0023 [ 26]: 3c0e1d1399319bcc +Block 0023 [ 27]: 123d3ce43366c509 +Block 0023 [ 28]: 00d397e032073e5e +Block 0023 [ 29]: 530fe801dab60de3 +Block 0023 [ 30]: ef7ad81167eb858a +Block 0023 [ 31]: 9492afcc63f9ea32 +Block 0023 [ 32]: bfe0b391b47f7973 +Block 0023 [ 33]: b639f555332b4fe3 +Block 0023 [ 34]: e1129cba1e65010f +Block 0023 [ 35]: e9b83917c8c13e91 +Block 0023 [ 36]: d2670a2b61cacd37 +Block 0023 [ 37]: 4e78ec9b164e5bf1 +Block 0023 [ 38]: 3092b980e27b7a1f +Block 0023 [ 39]: 793e9e597fae61ec +Block 0023 [ 40]: 7dda455f6c75d509 +Block 0023 [ 41]: bec876d0c771025f +Block 0023 [ 42]: b78a89de75325485 +Block 0023 [ 43]: a9f8958f42f33a10 +Block 0023 [ 44]: 0b3447955fb4e758 +Block 0023 [ 45]: 28446ee528e4cd59 +Block 0023 [ 46]: 604e8bd784cd3ba6 +Block 0023 [ 47]: 3c912cc538cca5b3 +Block 0023 [ 48]: 741c792f2c3a4a0b +Block 0023 [ 49]: b4722b59af1a557a +Block 0023 [ 50]: e52547909fcce41c +Block 0023 [ 51]: 68b46f3279fbf078 +Block 0023 [ 52]: 85f8e8bc7cf12bf3 +Block 0023 [ 53]: ad38c4a35d905536 +Block 0023 [ 54]: 063595dad207d323 +Block 0023 [ 55]: f71031a227512f69 +Block 0023 [ 56]: 4ac439cdebafec2d +Block 0023 [ 57]: e078b646b0719629 +Block 0023 [ 58]: 1c4b81ae2e88830d +Block 0023 [ 59]: 79f0d8cdd68f73b6 +Block 0023 [ 60]: a1fafd44511427c7 +Block 0023 [ 61]: 66d93adf43233b03 +Block 0023 [ 62]: 1636143df56e8772 +Block 0023 [ 63]: 5cedadb5f28e2570 +Block 0023 [ 64]: c6ff0ff6a873f2f7 +Block 0023 [ 65]: 199c0fe56105dbd8 +Block 0023 [ 66]: 1d536db41a15e3ec +Block 0023 [ 67]: 2f3c1ccac0000382 +Block 0023 [ 68]: a1f851c2d4b678ff +Block 0023 [ 69]: 0b36f32d125eb826 +Block 0023 [ 70]: 930f979e90e57598 +Block 0023 [ 71]: 12333ed69bef1402 +Block 0023 [ 72]: e687b3b4a3161910 +Block 0023 [ 73]: 12892d2c474af808 +Block 0023 [ 74]: 0a49954cfa818951 +Block 0023 [ 75]: 941d67e1c257e64b +Block 0023 [ 76]: 7e1dab4cc29a7933 +Block 0023 [ 77]: 5680a5c2b4a0093b +Block 0023 [ 78]: 1c8ebc520f63dc7d +Block 0023 [ 79]: 954009640c5cd903 +Block 0023 [ 80]: 55c38777364d760d +Block 0023 [ 81]: ce1a639680c6a023 +Block 0023 [ 82]: 511ee04acd10108e +Block 0023 [ 83]: d1510a9008f09249 +Block 0023 [ 84]: 7b9a19216657b159 +Block 0023 [ 85]: faa8582af2b3db8e +Block 0023 [ 86]: c4061811ead08447 +Block 0023 [ 87]: cad84668ae016d39 +Block 0023 [ 88]: ef3640496cc9588a +Block 0023 [ 89]: ac39f3b0ceb4aa9a +Block 0023 [ 90]: b26a9ecd567574dc +Block 0023 [ 91]: 00998111e686b2c9 +Block 0023 [ 92]: 973a00f3999a3a92 +Block 0023 [ 93]: c161a546f0c3e1b2 +Block 0023 [ 94]: de438b4c09d5854c +Block 0023 [ 95]: 54d7959cb76b95c8 +Block 0023 [ 96]: 55f7e6bcaac2d916 +Block 0023 [ 97]: 2a5de324b05240c4 +Block 0023 [ 98]: 1ac57ed83b36faad +Block 0023 [ 99]: da4099839839045b +Block 0023 [100]: 948131c194fe93e7 +Block 0023 [101]: 25001100a7255b6f +Block 0023 [102]: 7d5e296f2bf89d76 +Block 0023 [103]: 14a719781b1d50c8 +Block 0023 [104]: b5e48bd6f1ae0d9c +Block 0023 [105]: 69fe928c15164672 +Block 0023 [106]: 84aedfb328f02943 +Block 0023 [107]: ef8562e07624e197 +Block 0023 [108]: 5a6c16acadaa34be +Block 0023 [109]: 88867f07c62771b1 +Block 0023 [110]: f64097b47fe933c2 +Block 0023 [111]: 51859b2ba28f5018 +Block 0023 [112]: c96039bb54f111cc +Block 0023 [113]: e1b258bd6911df4e +Block 0023 [114]: 0815493ac5753d45 +Block 0023 [115]: 1f518bdb944073fb +Block 0023 [116]: 5333e99b8fba57ce +Block 0023 [117]: b6f8303b0458a5b4 +Block 0023 [118]: 1aa8b1886f0b33bf +Block 0023 [119]: 2c35ae0c01ff50ef +Block 0023 [120]: 6654fb783d5aa92d +Block 0023 [121]: 1e4340d082bc77c4 +Block 0023 [122]: 69d9b51e51cd50ec +Block 0023 [123]: 4235db7b068113c4 +Block 0023 [124]: fdc2d233d7d7bafa +Block 0023 [125]: a18c7f0cdd7e8890 +Block 0023 [126]: 5b42758a3efe822b +Block 0023 [127]: f4638cf24778606d +Block 0024 [ 0]: eede245f62d6b577 +Block 0024 [ 1]: c6b62ea9fdc6142b +Block 0024 [ 2]: 07a53b2091483089 +Block 0024 [ 3]: 1c93aea4d9a35d62 +Block 0024 [ 4]: c1c60c54c0c0d661 +Block 0024 [ 5]: 332221c32a0d4d91 +Block 0024 [ 6]: f308d5930bec5a1d +Block 0024 [ 7]: c82a96464710a6db +Block 0024 [ 8]: 13baec0de6add849 +Block 0024 [ 9]: b21027d16856a35c +Block 0024 [ 10]: d4120090de5d2acf +Block 0024 [ 11]: d59cf58286fd56b6 +Block 0024 [ 12]: f1eee49bc25f62ea +Block 0024 [ 13]: 80dcd989334316cb +Block 0024 [ 14]: 8fa965baa1026e5e +Block 0024 [ 15]: 23004dfde370bcff +Block 0024 [ 16]: 1bf2b01c7eaea454 +Block 0024 [ 17]: f28c8ba81c2679e2 +Block 0024 [ 18]: 48a7f8e65ea3c438 +Block 0024 [ 19]: 1860f45e52dbdff8 +Block 0024 [ 20]: a6541ed3cfe56f87 +Block 0024 [ 21]: c0c390bf2874899f +Block 0024 [ 22]: 8cda1867dd43bae3 +Block 0024 [ 23]: 7e3737d3238e4828 +Block 0024 [ 24]: 0554841098d2f975 +Block 0024 [ 25]: ba874d0cfbe4b8ab +Block 0024 [ 26]: 3d4ee63595093a5a +Block 0024 [ 27]: 1831ccf9f743da0f +Block 0024 [ 28]: 256415728708fdcf +Block 0024 [ 29]: b89ac656cc195d25 +Block 0024 [ 30]: 762e4d59c63b9928 +Block 0024 [ 31]: 1c8e480bbeca26b1 +Block 0024 [ 32]: 338efb2028c0d276 +Block 0024 [ 33]: 4e65e5221e6c5930 +Block 0024 [ 34]: 7be1b555ee8e1874 +Block 0024 [ 35]: 73de51347a49cc52 +Block 0024 [ 36]: 5151e631e2068475 +Block 0024 [ 37]: cb849b87e9fbb077 +Block 0024 [ 38]: a80d236c4eaad045 +Block 0024 [ 39]: c4743fd9a8ab34f2 +Block 0024 [ 40]: 05086ce35f1883f3 +Block 0024 [ 41]: f0c6c851c57f3f3a +Block 0024 [ 42]: baee7da68afca3f7 +Block 0024 [ 43]: 9df2ab3434594dd8 +Block 0024 [ 44]: 21de27a863a0aff4 +Block 0024 [ 45]: 8c6e79b495631870 +Block 0024 [ 46]: f0040b82d1f897ab +Block 0024 [ 47]: 4997a4b76d71ff0f +Block 0024 [ 48]: 77d45defbcbac7d3 +Block 0024 [ 49]: 4a6d6b54eefd88f3 +Block 0024 [ 50]: a25ebeab65950052 +Block 0024 [ 51]: d1479e6759f85ac8 +Block 0024 [ 52]: 73b34805eb4c7a5d +Block 0024 [ 53]: 1839fb1fa6848c68 +Block 0024 [ 54]: b16fcedc4a4c8c10 +Block 0024 [ 55]: 16742af6d1a4e07f +Block 0024 [ 56]: 38902d0357d9cd3b +Block 0024 [ 57]: e876ace74310956a +Block 0024 [ 58]: 625cc2ce73444d0e +Block 0024 [ 59]: 5f56ff8c51eae272 +Block 0024 [ 60]: 07d4f94ae96c62e9 +Block 0024 [ 61]: 8995abc4d648eb30 +Block 0024 [ 62]: 61a9f3fe748a4f06 +Block 0024 [ 63]: cf61aa691d442796 +Block 0024 [ 64]: 338b61d249f3b5e9 +Block 0024 [ 65]: 717365edf81451f1 +Block 0024 [ 66]: 9a742011e04f375d +Block 0024 [ 67]: 3c0252fe6de830ef +Block 0024 [ 68]: 6899219a79fdc193 +Block 0024 [ 69]: 504a88f79250caa8 +Block 0024 [ 70]: f4e05155f4831a41 +Block 0024 [ 71]: 62fee29baa3057cb +Block 0024 [ 72]: 3390df119145c16c +Block 0024 [ 73]: d906cdd000e605a7 +Block 0024 [ 74]: 325fb08618b04c18 +Block 0024 [ 75]: 2acbe70a78ff91aa +Block 0024 [ 76]: 5c96139edb859139 +Block 0024 [ 77]: 8da58b7f1bd0ac62 +Block 0024 [ 78]: 8e2f4141ed578ad4 +Block 0024 [ 79]: caea07cd0ce4b5bb +Block 0024 [ 80]: a7c2ffdd3516b9e4 +Block 0024 [ 81]: ac43c5e993b9ce14 +Block 0024 [ 82]: 481b6801f8c2063d +Block 0024 [ 83]: 0841d396219513f6 +Block 0024 [ 84]: 3d80af294dfd644d +Block 0024 [ 85]: 1befd999c362b731 +Block 0024 [ 86]: dea7977c821944f3 +Block 0024 [ 87]: 4da1b2e0d258d35d +Block 0024 [ 88]: 23a9c13ca2a0b486 +Block 0024 [ 89]: 7ba4f890dfd2b82c +Block 0024 [ 90]: 27cfe434289ae1c4 +Block 0024 [ 91]: 68ae670da4c955bf +Block 0024 [ 92]: a1c07262a98aeb32 +Block 0024 [ 93]: 2f6b00fabadaac7c +Block 0024 [ 94]: 0b5225ee63dabb02 +Block 0024 [ 95]: 3a6700470ef3e0e2 +Block 0024 [ 96]: c27e4da0a2ee8b4d +Block 0024 [ 97]: 4ce0d0d2911807e5 +Block 0024 [ 98]: 884397c050782809 +Block 0024 [ 99]: 381d7284b47cc0c7 +Block 0024 [100]: 76218d054ed13066 +Block 0024 [101]: 3e55924005389d0e +Block 0024 [102]: 4e4e054ee33ce746 +Block 0024 [103]: bf52a035a9414a25 +Block 0024 [104]: 7aa1b6ccaf1d8994 +Block 0024 [105]: 3dc748c450ed599e +Block 0024 [106]: 8cacad0b108b0f28 +Block 0024 [107]: 1a432b914c8d5210 +Block 0024 [108]: 7d818e692d3f9972 +Block 0024 [109]: edea37c6abb5dfa2 +Block 0024 [110]: cd092a596f8ec84d +Block 0024 [111]: d126fb730532177a +Block 0024 [112]: 3644902afe1a1fb5 +Block 0024 [113]: ab379711a8617714 +Block 0024 [114]: 5cedc841b324d74f +Block 0024 [115]: 7a1923e48401c96b +Block 0024 [116]: 0d13f3c7afedf5ce +Block 0024 [117]: 3a254a12b84e65c2 +Block 0024 [118]: d2b9727614bd0d81 +Block 0024 [119]: 44e2f34c09858189 +Block 0024 [120]: 166b8e0202435648 +Block 0024 [121]: ccabaea87b867ba8 +Block 0024 [122]: 04730c71031c17b0 +Block 0024 [123]: 5dc755d938cb2582 +Block 0024 [124]: a959def8cc5e35b5 +Block 0024 [125]: 0be10f243c731296 +Block 0024 [126]: 0b297eb58896c6b3 +Block 0024 [127]: 7824efd8483d8404 +Block 0025 [ 0]: 889096729509e78f +Block 0025 [ 1]: 26504b43a3100a77 +Block 0025 [ 2]: fbd049c773a1b6ad +Block 0025 [ 3]: eb252d4ae7f1aa63 +Block 0025 [ 4]: f9589a22c2b52a79 +Block 0025 [ 5]: cee8068ebcc7d015 +Block 0025 [ 6]: 21d4347432ee8ffb +Block 0025 [ 7]: 0f47228c6bb465a0 +Block 0025 [ 8]: bdc2c807d0b93a9e +Block 0025 [ 9]: 93b6f9ff6cf28394 +Block 0025 [ 10]: 269f5146a44db948 +Block 0025 [ 11]: 582214ba08e90d6b +Block 0025 [ 12]: a9a68dba1d170a12 +Block 0025 [ 13]: ef85ecbd10051753 +Block 0025 [ 14]: 06851cfd8c42322f +Block 0025 [ 15]: a4d5a440a88d43be +Block 0025 [ 16]: 989dc221ec5b9c58 +Block 0025 [ 17]: 474f59f0f6ff1af4 +Block 0025 [ 18]: 125416e66c19634f +Block 0025 [ 19]: 10215d521ffcd58e +Block 0025 [ 20]: e3f09f59d9104eb3 +Block 0025 [ 21]: 586e10dccc5020b9 +Block 0025 [ 22]: 0a768305fbc81885 +Block 0025 [ 23]: d14874001b4e4e1b +Block 0025 [ 24]: c8547ecfa52d48c7 +Block 0025 [ 25]: ce6b1e03845c17bd +Block 0025 [ 26]: fe11c378c83a2fbe +Block 0025 [ 27]: 8d1d43284d915d96 +Block 0025 [ 28]: 5727fa24758d9ed0 +Block 0025 [ 29]: 5b0b345f44d4f221 +Block 0025 [ 30]: 5c49add60390df39 +Block 0025 [ 31]: d1e23f9755e06462 +Block 0025 [ 32]: 3eb908b7f7ac2f1e +Block 0025 [ 33]: 7a3e86d7ff618c2c +Block 0025 [ 34]: c6b860295828261a +Block 0025 [ 35]: aa89774a7391397f +Block 0025 [ 36]: b3c4c8a8e2d6bce2 +Block 0025 [ 37]: 7ec5d12cd0535cc1 +Block 0025 [ 38]: 921353ef549581ee +Block 0025 [ 39]: bd1222482408e2fd +Block 0025 [ 40]: d4e2ba07d4b4b8cc +Block 0025 [ 41]: bafd05d23599cee3 +Block 0025 [ 42]: de67ee39feea0dc8 +Block 0025 [ 43]: 2b78f8b27eb882b4 +Block 0025 [ 44]: e9b625124d311892 +Block 0025 [ 45]: 98b2752764b4242a +Block 0025 [ 46]: 9362523bc3747c43 +Block 0025 [ 47]: 1c2a20d8c40f7892 +Block 0025 [ 48]: 5dd771a35bc3a0f9 +Block 0025 [ 49]: b08916d994485d92 +Block 0025 [ 50]: 9cc23af3e5b71b77 +Block 0025 [ 51]: fdc1a420cfdbfeeb +Block 0025 [ 52]: 671430b738686c6d +Block 0025 [ 53]: 9e263c7e72dcd4e4 +Block 0025 [ 54]: 808ef8d04feaed7e +Block 0025 [ 55]: 0c3977d862a087b3 +Block 0025 [ 56]: da21711205931d65 +Block 0025 [ 57]: 57e9163e89a92b2d +Block 0025 [ 58]: f6d9b7c75e22884a +Block 0025 [ 59]: 53df53f21c5ea344 +Block 0025 [ 60]: ce09a21b516d77c2 +Block 0025 [ 61]: dc90da4a018d70d5 +Block 0025 [ 62]: 9c2bee3bf5be28f9 +Block 0025 [ 63]: 9b14f3d069e0cc8f +Block 0025 [ 64]: 5dfa874c5de65c73 +Block 0025 [ 65]: 41d8f48bf256f7b5 +Block 0025 [ 66]: 2c54c97b6bdd1922 +Block 0025 [ 67]: 8fdd86c673d73ceb +Block 0025 [ 68]: 2ddcdadc28e483ec +Block 0025 [ 69]: 448999231656a9a2 +Block 0025 [ 70]: c5c6a22e814c20da +Block 0025 [ 71]: fb4b60da77b78d76 +Block 0025 [ 72]: 8d75e91ace57a779 +Block 0025 [ 73]: dce603b830d17e29 +Block 0025 [ 74]: c0fb7a05b851bb35 +Block 0025 [ 75]: bec24336a6634ce4 +Block 0025 [ 76]: b55f22fde59c3c73 +Block 0025 [ 77]: bb8ec536ffb476bc +Block 0025 [ 78]: c0071e75308ba8bb +Block 0025 [ 79]: 0bbf0dd52d5a7851 +Block 0025 [ 80]: 15162c10635898d5 +Block 0025 [ 81]: 0bf8bf14a900705f +Block 0025 [ 82]: 080296ee3c6634a9 +Block 0025 [ 83]: 00b4294bf795c0fa +Block 0025 [ 84]: c54eedcb4aa6b04d +Block 0025 [ 85]: 4dce146af1deee86 +Block 0025 [ 86]: b5756a48df564404 +Block 0025 [ 87]: 3b57c67dab0f2b0d +Block 0025 [ 88]: ea8543a2e6c25c74 +Block 0025 [ 89]: 7e0b4eed8f64f29a +Block 0025 [ 90]: ab6d723b4b394b67 +Block 0025 [ 91]: af40edc026dc2ba1 +Block 0025 [ 92]: 3c29390e269e5370 +Block 0025 [ 93]: 5dd8288dc9b5d1df +Block 0025 [ 94]: 580507dfc21aacfb +Block 0025 [ 95]: 71ded7a2579ce4f7 +Block 0025 [ 96]: 11960be7aaa8b291 +Block 0025 [ 97]: 4c1ad7455e167c48 +Block 0025 [ 98]: ace29f6a0682b5cf +Block 0025 [ 99]: be946a8dc92261e1 +Block 0025 [100]: 222c5dd20af62343 +Block 0025 [101]: a0775badb4aff215 +Block 0025 [102]: 3c9f963838fb6d7e +Block 0025 [103]: 4610d1f8e37983e0 +Block 0025 [104]: dbf7cef0b1205e12 +Block 0025 [105]: 2e9bc9577a01c3d5 +Block 0025 [106]: 4b6af5055b61fa2b +Block 0025 [107]: b34c71830d8049d2 +Block 0025 [108]: 950edfdd91e5039a +Block 0025 [109]: 2d6a84d97cadb803 +Block 0025 [110]: f39c28169a8e3866 +Block 0025 [111]: ec6b338b4691fdc4 +Block 0025 [112]: bdfd62ce06287de0 +Block 0025 [113]: ca64badc1cdd288b +Block 0025 [114]: ddbe34f9611eb577 +Block 0025 [115]: ff863bdd914bec12 +Block 0025 [116]: e10bb8be4463770c +Block 0025 [117]: 6f8f73d44abb7141 +Block 0025 [118]: e4b1d9c741f6a21c +Block 0025 [119]: 1c04f10cdd385724 +Block 0025 [120]: b174b35f63d28944 +Block 0025 [121]: 456e620925bf1183 +Block 0025 [122]: 3e842a5ffbcaff84 +Block 0025 [123]: 5f15a4541e8d31c2 +Block 0025 [124]: 4a1fb9f305052b69 +Block 0025 [125]: dd5a871c34527adf +Block 0025 [126]: 8c9555e9a3e8db72 +Block 0025 [127]: 916f214630c35e17 +Block 0026 [ 0]: 2326110607fb8417 +Block 0026 [ 1]: 21b903b553877ad5 +Block 0026 [ 2]: 7bf33b6460d88269 +Block 0026 [ 3]: bba47143c058e26b +Block 0026 [ 4]: 2afe479df5bc918c +Block 0026 [ 5]: b5c079c195f10ebb +Block 0026 [ 6]: a044c29d531bf3b5 +Block 0026 [ 7]: 56f1163c045bb5fe +Block 0026 [ 8]: b1ce2026934db6a6 +Block 0026 [ 9]: 960e96adf333dca7 +Block 0026 [ 10]: 18bf65450e272e42 +Block 0026 [ 11]: f5a21856543a7b9d +Block 0026 [ 12]: 645ea64c689df21b +Block 0026 [ 13]: e88bf5f0b955b02f +Block 0026 [ 14]: 173079ea4b1f8103 +Block 0026 [ 15]: 3d84f3c858f0ccd3 +Block 0026 [ 16]: 760b040af26a6bf2 +Block 0026 [ 17]: bbfb4c8b40e1d3e6 +Block 0026 [ 18]: 94d0e5dd9242dade +Block 0026 [ 19]: 2e2442678afc3aa3 +Block 0026 [ 20]: 353afcd33f4afa1a +Block 0026 [ 21]: ee4e5d3cee3e4781 +Block 0026 [ 22]: 6da71c25f9f701ce +Block 0026 [ 23]: 22f0b96255b98c5a +Block 0026 [ 24]: acda353def1501a8 +Block 0026 [ 25]: 6e2ab8c1cc80c3c2 +Block 0026 [ 26]: e1346169d7e5b09c +Block 0026 [ 27]: 45c9152befd73b11 +Block 0026 [ 28]: 8c05ab64b0ca9770 +Block 0026 [ 29]: 2de1a8a073329d58 +Block 0026 [ 30]: f8f6cc6e4937aa1b +Block 0026 [ 31]: b393299e7441c42b +Block 0026 [ 32]: 0e1e9127e5d82ca7 +Block 0026 [ 33]: d9e7f884fb9ee6ea +Block 0026 [ 34]: 55d357a28fcf5eea +Block 0026 [ 35]: f576e6e9dec9afd7 +Block 0026 [ 36]: 636f2ad51c9aa17f +Block 0026 [ 37]: 8295f555f60629fa +Block 0026 [ 38]: 221787f92c6c7b8c +Block 0026 [ 39]: ee58f217a2ab0f23 +Block 0026 [ 40]: 8829bc3c625a98e5 +Block 0026 [ 41]: c881d4c765796859 +Block 0026 [ 42]: 1b64a1dc1b25c4c8 +Block 0026 [ 43]: f721e2fe7139e377 +Block 0026 [ 44]: d772ffbaff52e88d +Block 0026 [ 45]: 025700398018d483 +Block 0026 [ 46]: 91e64ffe14eae36f +Block 0026 [ 47]: cc697adbae578f77 +Block 0026 [ 48]: 6f08adbdca0bdcca +Block 0026 [ 49]: 98b466ad258f6b37 +Block 0026 [ 50]: a0f5d3967adf3fca +Block 0026 [ 51]: 7f55d062e14d1007 +Block 0026 [ 52]: 35d6e09308b0911e +Block 0026 [ 53]: 388da57d96f7e6d9 +Block 0026 [ 54]: 1852c831a455e118 +Block 0026 [ 55]: ee9971f15fe61186 +Block 0026 [ 56]: 3d9082f42b74ad35 +Block 0026 [ 57]: a438c3d34632fe2a +Block 0026 [ 58]: b4662befdf3c5ef1 +Block 0026 [ 59]: 48c830419f16033c +Block 0026 [ 60]: d73a1597abfd5bd9 +Block 0026 [ 61]: 92c1097e4689a942 +Block 0026 [ 62]: 23af79f5ad04dfed +Block 0026 [ 63]: 17cfa050f7849186 +Block 0026 [ 64]: 2ddfa8eff84229be +Block 0026 [ 65]: d2497269ae78a31f +Block 0026 [ 66]: aed694da1b5e26c2 +Block 0026 [ 67]: 440119e2e1622879 +Block 0026 [ 68]: c20615b4339db9e5 +Block 0026 [ 69]: 40507bb2ae718a09 +Block 0026 [ 70]: 009544db73aca08f +Block 0026 [ 71]: e3cbc7a0b359738e +Block 0026 [ 72]: 5f5c27f846aae2ab +Block 0026 [ 73]: 90a2ac6ad788b5a7 +Block 0026 [ 74]: 7c62662eebd39cff +Block 0026 [ 75]: 8a74179c8de76ffb +Block 0026 [ 76]: ddc0b6c5d5b098fe +Block 0026 [ 77]: d2ece0d030c8fbb0 +Block 0026 [ 78]: 997b8866ce9776ea +Block 0026 [ 79]: a43e344f370b3a57 +Block 0026 [ 80]: bac0ea91e352be1c +Block 0026 [ 81]: f01b639687e116bc +Block 0026 [ 82]: 960021d6f3a14e28 +Block 0026 [ 83]: 66da0b9f7a6f4578 +Block 0026 [ 84]: cfeabacf62e0980f +Block 0026 [ 85]: 91e586937a842ba8 +Block 0026 [ 86]: 3d1edbdf53bcc328 +Block 0026 [ 87]: fe5db209ef765995 +Block 0026 [ 88]: 09dae8069afa3d9f +Block 0026 [ 89]: 642b6eefcc740e1d +Block 0026 [ 90]: 4e966039b4a33618 +Block 0026 [ 91]: 43a2c47ee03be541 +Block 0026 [ 92]: ef2d8306430732d2 +Block 0026 [ 93]: ba85666f042ac669 +Block 0026 [ 94]: 6feec7335af83185 +Block 0026 [ 95]: fa2030d6bd78c524 +Block 0026 [ 96]: 47f0b74e4cbb7eda +Block 0026 [ 97]: 6da6378c64c7ce1f +Block 0026 [ 98]: 5a9e6857b6a5289c +Block 0026 [ 99]: caade4b95bdfd06f +Block 0026 [100]: a2d84e8435913de6 +Block 0026 [101]: 34cc36e53cb7bcb9 +Block 0026 [102]: 702ea8254a5b7678 +Block 0026 [103]: aca6662a073790b3 +Block 0026 [104]: d3e8062924413a1d +Block 0026 [105]: d35eb40e29a1ab60 +Block 0026 [106]: d7d8dace18d04b73 +Block 0026 [107]: a485fec173de15ed +Block 0026 [108]: 9e985148c2f9e73e +Block 0026 [109]: 1bc9a4156367266f +Block 0026 [110]: 92088b95d082b203 +Block 0026 [111]: 7411e3d921612b6b +Block 0026 [112]: d7a0707c5b8dfffb +Block 0026 [113]: 3a69e8206ac6bab2 +Block 0026 [114]: 681fcdcf147b5797 +Block 0026 [115]: e3f729a959d114f1 +Block 0026 [116]: 1c27652b63160462 +Block 0026 [117]: aa4a57250c8ba710 +Block 0026 [118]: 7749feff623165bd +Block 0026 [119]: c7424c1ba697125e +Block 0026 [120]: c8c9202a695524c7 +Block 0026 [121]: 8557a3857e1ce2ae +Block 0026 [122]: bdd7467b6dcb5b80 +Block 0026 [123]: 818b955fdbe8ea65 +Block 0026 [124]: 5b4cba042cf69bd4 +Block 0026 [125]: 4c5de11255f2c061 +Block 0026 [126]: ef15e5aeca3dbb79 +Block 0026 [127]: 6d08853bd67bf454 +Block 0027 [ 0]: 1b9e0a2a48f03548 +Block 0027 [ 1]: 79d13f7464dfe544 +Block 0027 [ 2]: ae09bc1e24b9eb78 +Block 0027 [ 3]: 5c9dc0dade572ed1 +Block 0027 [ 4]: f5938effd3acac03 +Block 0027 [ 5]: 1c07f12951ab8c4d +Block 0027 [ 6]: 24430282ba5c1d54 +Block 0027 [ 7]: a6b6b6e3ad35b065 +Block 0027 [ 8]: 867d937a7f04fc08 +Block 0027 [ 9]: 530134b0935bab05 +Block 0027 [ 10]: 2ba6e88fbc07b2ae +Block 0027 [ 11]: ba41f5c456dc4700 +Block 0027 [ 12]: adce9ae24bbd8c39 +Block 0027 [ 13]: d2fd86dde81b100c +Block 0027 [ 14]: 7af41baa6ea9a086 +Block 0027 [ 15]: 6eabe51c178df50f +Block 0027 [ 16]: 201e933537af8b09 +Block 0027 [ 17]: d25c2965cb10515d +Block 0027 [ 18]: b1efcc4a704af07d +Block 0027 [ 19]: 8785462fbd5cf444 +Block 0027 [ 20]: b57c06385432db42 +Block 0027 [ 21]: 70dd9f26e498c6a1 +Block 0027 [ 22]: cc22b2a4f0abdd3b +Block 0027 [ 23]: 1194085fcfe927a4 +Block 0027 [ 24]: db74fcdece66f9f4 +Block 0027 [ 25]: 3ccd6b68246b978b +Block 0027 [ 26]: ca025c07ce8350f8 +Block 0027 [ 27]: 5e8982b4a36d138a +Block 0027 [ 28]: bf37b6c0aa764378 +Block 0027 [ 29]: bbfa64d026622763 +Block 0027 [ 30]: 751189774b34475d +Block 0027 [ 31]: 5438b191939688ee +Block 0027 [ 32]: 736af831e42315b8 +Block 0027 [ 33]: e7189b709e88e8d6 +Block 0027 [ 34]: 37eee5970edc1e23 +Block 0027 [ 35]: b80aaf8f94ee1561 +Block 0027 [ 36]: 9141705d6a2c0863 +Block 0027 [ 37]: 10cd015b94f60ac6 +Block 0027 [ 38]: 373292f9c6b9e3d3 +Block 0027 [ 39]: 4906ca8fd4933a34 +Block 0027 [ 40]: 5425ba952f1c2b16 +Block 0027 [ 41]: ba91ab6c019d10b5 +Block 0027 [ 42]: ae1813ab9eb3f165 +Block 0027 [ 43]: 80ce5f31929c977e +Block 0027 [ 44]: 9cb8f3c169cfc2ea +Block 0027 [ 45]: caeafec4696d86fb +Block 0027 [ 46]: b5d1dab3619428b8 +Block 0027 [ 47]: 2dc1b1f6148a1945 +Block 0027 [ 48]: 2b36aa468d722a62 +Block 0027 [ 49]: f89f92967c61807b +Block 0027 [ 50]: 8bb5c07804484e62 +Block 0027 [ 51]: 1f495abf9906b02c +Block 0027 [ 52]: f8d4f663a8db2006 +Block 0027 [ 53]: 37b5730fc4bc7bb8 +Block 0027 [ 54]: 474e85daaa7f8f4c +Block 0027 [ 55]: 103c08f71ca71f7d +Block 0027 [ 56]: f6ee3f551142f93d +Block 0027 [ 57]: df49d32e32813a59 +Block 0027 [ 58]: 7893d42f39de58c1 +Block 0027 [ 59]: 612d282bf0114e57 +Block 0027 [ 60]: 06526d52faa7c46f +Block 0027 [ 61]: ef0a4a21543b4210 +Block 0027 [ 62]: 659aad06a6dac23b +Block 0027 [ 63]: 83349711eaf33ff6 +Block 0027 [ 64]: 2619d9d15a1f40a1 +Block 0027 [ 65]: 0d6e01f3a6780617 +Block 0027 [ 66]: 537b02711650672b +Block 0027 [ 67]: f2f8e6138ef4f708 +Block 0027 [ 68]: c979e70587b593e8 +Block 0027 [ 69]: 598534c232f66a7b +Block 0027 [ 70]: aaa5368ca7adf19e +Block 0027 [ 71]: fbd81073ff635f77 +Block 0027 [ 72]: c511c8fdb4816452 +Block 0027 [ 73]: dabdda9675b10982 +Block 0027 [ 74]: ce6811b03950e826 +Block 0027 [ 75]: fc9eaed22fc499aa +Block 0027 [ 76]: f7ab1b9e96c241f1 +Block 0027 [ 77]: 90f391f585de581d +Block 0027 [ 78]: 3393d992ef6ec67d +Block 0027 [ 79]: dc1542690885d37b +Block 0027 [ 80]: 3b6a43d43bb4a8f1 +Block 0027 [ 81]: 1ccbba638d9ebf11 +Block 0027 [ 82]: 34e474ffaa3ae841 +Block 0027 [ 83]: 10b28634c65339de +Block 0027 [ 84]: 89962338c5ec0536 +Block 0027 [ 85]: 4066ccc9321462bf +Block 0027 [ 86]: 9158b68f05139c91 +Block 0027 [ 87]: eafb568fd6c32965 +Block 0027 [ 88]: 5d0afd995ccf6838 +Block 0027 [ 89]: 5467f717aa461520 +Block 0027 [ 90]: 3f46d011a0aa6852 +Block 0027 [ 91]: 5be8246d25d1e221 +Block 0027 [ 92]: 0411b41ce73cf8d3 +Block 0027 [ 93]: f4603c9d26fdabc5 +Block 0027 [ 94]: 0bea0ce54205b484 +Block 0027 [ 95]: 676106d61b20001a +Block 0027 [ 96]: ae1363d24d05bb51 +Block 0027 [ 97]: b137b076a0bd62c3 +Block 0027 [ 98]: b2a47ba9c55e2008 +Block 0027 [ 99]: cb536401ca240734 +Block 0027 [100]: bc644a7e4db2fbcb +Block 0027 [101]: d4657f37c824c0b1 +Block 0027 [102]: 2e43c799ce19ba2a +Block 0027 [103]: 71f4e39a7105f08c +Block 0027 [104]: cd60684a48c35aae +Block 0027 [105]: 630e5d2c33dd141e +Block 0027 [106]: 644c3710f4e576b8 +Block 0027 [107]: e0a79b23fcecda7e +Block 0027 [108]: ae487ac85808d582 +Block 0027 [109]: 310c4b78ed84735f +Block 0027 [110]: 8869ccf9539f8d29 +Block 0027 [111]: e961d241232d8eb4 +Block 0027 [112]: e08dbd615c20c18b +Block 0027 [113]: d27009a6d7f7383a +Block 0027 [114]: fb086f56179222d1 +Block 0027 [115]: 318b6465bf6f11e6 +Block 0027 [116]: 1096b60a36bc2adc +Block 0027 [117]: 5a19cb04e9138bd5 +Block 0027 [118]: d70194664ef36242 +Block 0027 [119]: 66b5846972e6d4b5 +Block 0027 [120]: a9ed1ab8cf8eda55 +Block 0027 [121]: ac4a13bc160e8dbc +Block 0027 [122]: 36c095d46c0fd19f +Block 0027 [123]: d884e38b9dbee228 +Block 0027 [124]: 19fd4af11f29f87f +Block 0027 [125]: c59730708224a0ad +Block 0027 [126]: ab650e5c4054b735 +Block 0027 [127]: 70f375ab9c7e144e +Block 0028 [ 0]: 97232791402bcb44 +Block 0028 [ 1]: 35f792c0b2f4984b +Block 0028 [ 2]: 3226a2aea0ebf600 +Block 0028 [ 3]: 7fe74755e5f13d9e +Block 0028 [ 4]: f3d5b6f172056b7d +Block 0028 [ 5]: e94896db4a53432b +Block 0028 [ 6]: 45630e66b33caf9d +Block 0028 [ 7]: 5b3b5a0b10aad49b +Block 0028 [ 8]: 309b69543ee4a396 +Block 0028 [ 9]: 7d170df8695dfdc0 +Block 0028 [ 10]: 294542494a30d442 +Block 0028 [ 11]: 3ffe9c43d6b9c1df +Block 0028 [ 12]: db7ef4608692decc +Block 0028 [ 13]: fbc4dca927251720 +Block 0028 [ 14]: 5039450e98f1c2a1 +Block 0028 [ 15]: 8bc1f444fa5731ae +Block 0028 [ 16]: 83d87fd302dfec84 +Block 0028 [ 17]: abbd969ea7fc60db +Block 0028 [ 18]: b4e0305c8e8631dc +Block 0028 [ 19]: da6a912f0b3017cf +Block 0028 [ 20]: 9d0be0c7dad3eac9 +Block 0028 [ 21]: 0b88a014922d1de9 +Block 0028 [ 22]: b543e19840551a05 +Block 0028 [ 23]: 270e6f8a4712c6e4 +Block 0028 [ 24]: e95d6fb939fa034e +Block 0028 [ 25]: e8e03357bebe3443 +Block 0028 [ 26]: b405c25554d5c7b5 +Block 0028 [ 27]: b32ec2395f791b42 +Block 0028 [ 28]: d2813288d84d51f4 +Block 0028 [ 29]: e4f492ae99d62fc9 +Block 0028 [ 30]: e58241d84db85374 +Block 0028 [ 31]: d4270cccafb0d652 +Block 0028 [ 32]: 0f504b2abf3fffdd +Block 0028 [ 33]: 942c9a112e819d77 +Block 0028 [ 34]: cf69b53975cd82ac +Block 0028 [ 35]: cbdcbd422cfdeaae +Block 0028 [ 36]: 04e8634692186628 +Block 0028 [ 37]: 0fc7ca7bc72f1a50 +Block 0028 [ 38]: 35a9f84173bd61bd +Block 0028 [ 39]: 045006fdb2984625 +Block 0028 [ 40]: a66cf861729ba243 +Block 0028 [ 41]: 51b2bae79c014af5 +Block 0028 [ 42]: 51d30a112158b84a +Block 0028 [ 43]: 00bf5e0aac36c45d +Block 0028 [ 44]: 81bf6d928cd7d70a +Block 0028 [ 45]: 6980b3c243c53ab8 +Block 0028 [ 46]: f21ad5f134ad738b +Block 0028 [ 47]: 5e68587e40d67c25 +Block 0028 [ 48]: 1601c62c372c34f7 +Block 0028 [ 49]: ef991ed46d8962bb +Block 0028 [ 50]: c46aaf9aad78363c +Block 0028 [ 51]: ae3d60d0f936b476 +Block 0028 [ 52]: 586497acea9f825f +Block 0028 [ 53]: 1e5e9b93f8e908b4 +Block 0028 [ 54]: 84150a537817bbed +Block 0028 [ 55]: 9c90f15684c67664 +Block 0028 [ 56]: 748bce5e9ace006c +Block 0028 [ 57]: 40806573bfee5c67 +Block 0028 [ 58]: e3733f18a4c45c64 +Block 0028 [ 59]: 57daf992dedd6bd8 +Block 0028 [ 60]: 576e707078a8fdf4 +Block 0028 [ 61]: a666874b98a57c09 +Block 0028 [ 62]: 2f46e59e30aced2e +Block 0028 [ 63]: 227c2fbdab49e93b +Block 0028 [ 64]: 22dc42d4f0c4ff92 +Block 0028 [ 65]: 68d18cd2f1a92b20 +Block 0028 [ 66]: f0901635eb95dfe6 +Block 0028 [ 67]: ebbf5fc8f1c08a24 +Block 0028 [ 68]: 3560e312285ddca2 +Block 0028 [ 69]: 286222d30dd6e292 +Block 0028 [ 70]: 0e38078f4970af1a +Block 0028 [ 71]: a4b5730f656a7f48 +Block 0028 [ 72]: 5490a1f601b9815d +Block 0028 [ 73]: a55db213eb190453 +Block 0028 [ 74]: 31e4ae9fe533b445 +Block 0028 [ 75]: 1785f0289aefae64 +Block 0028 [ 76]: 7335275f1235e537 +Block 0028 [ 77]: 4bbf52e14238737a +Block 0028 [ 78]: 6861fe9ddce61ee8 +Block 0028 [ 79]: e60dadb10ce28e0e +Block 0028 [ 80]: 814f56901266955d +Block 0028 [ 81]: b70226ef0a619175 +Block 0028 [ 82]: 655ee0e452b64755 +Block 0028 [ 83]: 559e78bc00e00d4c +Block 0028 [ 84]: 2d365d7d806b2c66 +Block 0028 [ 85]: a76e099c88382c82 +Block 0028 [ 86]: 7c54f1a662d1b2f0 +Block 0028 [ 87]: f8d6b44f41b1fbde +Block 0028 [ 88]: aec2525faee8e074 +Block 0028 [ 89]: 3ba7df6ba9154052 +Block 0028 [ 90]: 10ab17547d300b4b +Block 0028 [ 91]: 631645cf561c2263 +Block 0028 [ 92]: 38deeb67de925bd6 +Block 0028 [ 93]: 247d70ecaea720a9 +Block 0028 [ 94]: 3942012c3e59cd0a +Block 0028 [ 95]: 79a8e59965f50d74 +Block 0028 [ 96]: ae64ce04808b8731 +Block 0028 [ 97]: a82922e0aef538b3 +Block 0028 [ 98]: 4896dd57583cf5c1 +Block 0028 [ 99]: 1b54a6fe3f0402fe +Block 0028 [100]: a3bbdef1744dedd2 +Block 0028 [101]: 50d7c4ec590c94d8 +Block 0028 [102]: 0412d51b93b7c6fa +Block 0028 [103]: b284143fa99ccfed +Block 0028 [104]: 26afb8dcd15eb953 +Block 0028 [105]: 780412654e5192b6 +Block 0028 [106]: 1b5a25166f37ae89 +Block 0028 [107]: a2fe1bdcc97ff964 +Block 0028 [108]: 0a76accb203f1b96 +Block 0028 [109]: a3776057d2937236 +Block 0028 [110]: 97a41d4001d420ea +Block 0028 [111]: 1983d7acbfe92b00 +Block 0028 [112]: 467fc549919b5a61 +Block 0028 [113]: 102dd46280e147de +Block 0028 [114]: 82fced5a379d04e5 +Block 0028 [115]: 34c59296d5c25fee +Block 0028 [116]: 33984b7359faf528 +Block 0028 [117]: 19644a6bbb96873b +Block 0028 [118]: a8e0d86b9c37af6d +Block 0028 [119]: 26772e3696ef3b35 +Block 0028 [120]: 53441d026ca0b04b +Block 0028 [121]: f6369a5b0acb8901 +Block 0028 [122]: d39b69a195db4abd +Block 0028 [123]: e4ea5c6afc40960f +Block 0028 [124]: 7eb6485d679d4104 +Block 0028 [125]: f8eddbdf128b40cb +Block 0028 [126]: aa922a03672a8939 +Block 0028 [127]: bbfa96187ed10163 +Block 0029 [ 0]: 4404e79fd03776e5 +Block 0029 [ 1]: 808f9962df1ae158 +Block 0029 [ 2]: 5f35ae1b31a76bb2 +Block 0029 [ 3]: 3fc4547a07bf1854 +Block 0029 [ 4]: 488f357d253a1362 +Block 0029 [ 5]: 7d6ab99447468ed2 +Block 0029 [ 6]: e101c05afc23a427 +Block 0029 [ 7]: 54c4ef1b9b855bd3 +Block 0029 [ 8]: a1d03a62e43f8292 +Block 0029 [ 9]: 12b6785de8a09162 +Block 0029 [ 10]: 000aff43ee79c784 +Block 0029 [ 11]: d8a67d7f4a0d5d5d +Block 0029 [ 12]: 974e8d8c31633393 +Block 0029 [ 13]: 0023f6283566393b +Block 0029 [ 14]: 0f8e8e0a9c856b92 +Block 0029 [ 15]: f0e6de7574e8de59 +Block 0029 [ 16]: 1511602535645209 +Block 0029 [ 17]: 4c1ec498b136967f +Block 0029 [ 18]: 6c8f610c2eb03554 +Block 0029 [ 19]: d263fd514948af88 +Block 0029 [ 20]: 202e17af99bb4866 +Block 0029 [ 21]: 9ac97f5b38973aef +Block 0029 [ 22]: cb2fb07f80b1f4c1 +Block 0029 [ 23]: a5fe298d9d72f14e +Block 0029 [ 24]: 0aa60ccb80278f06 +Block 0029 [ 25]: 34445d153a674af2 +Block 0029 [ 26]: a5ae2e22aae768ed +Block 0029 [ 27]: 537de1e920729bd6 +Block 0029 [ 28]: 1801f662131749ca +Block 0029 [ 29]: 97d8767044f9da6a +Block 0029 [ 30]: d29160e91e40ce69 +Block 0029 [ 31]: 1978451d11883970 +Block 0029 [ 32]: d45fa773f4c17640 +Block 0029 [ 33]: df102fe3ad8418fe +Block 0029 [ 34]: 1f4383bb94bfeb5c +Block 0029 [ 35]: f204dd9bf62006e6 +Block 0029 [ 36]: f5e9aa1cc8f2c452 +Block 0029 [ 37]: 68c8e2541b2eb1e1 +Block 0029 [ 38]: bd6a08255d83d623 +Block 0029 [ 39]: 141d4413b7e27035 +Block 0029 [ 40]: 8fc28425f1c6ddc8 +Block 0029 [ 41]: 315763c020ce0df9 +Block 0029 [ 42]: 2ef188655ccd4d54 +Block 0029 [ 43]: 2504ded0510bf310 +Block 0029 [ 44]: e00bb1157c2e8c4f +Block 0029 [ 45]: 05ae8d1643d868c5 +Block 0029 [ 46]: 1fff0638a5999406 +Block 0029 [ 47]: 283b28c741de7e21 +Block 0029 [ 48]: 2c493d2dacdf78d7 +Block 0029 [ 49]: 26ec38c4797ec312 +Block 0029 [ 50]: 0a8fbbb46f9d7121 +Block 0029 [ 51]: 9a46c3b15aa183b4 +Block 0029 [ 52]: 8ed11099f2761e80 +Block 0029 [ 53]: 90dd32bb0a45c3a5 +Block 0029 [ 54]: 34f51968efdca622 +Block 0029 [ 55]: e457943a6bc598f9 +Block 0029 [ 56]: ed880470e5758747 +Block 0029 [ 57]: a85c6ca1aedc0d64 +Block 0029 [ 58]: 520e443c4e066074 +Block 0029 [ 59]: 48b78160b6d911d3 +Block 0029 [ 60]: 2f9656ebb9d37abc +Block 0029 [ 61]: c3d117cc1ab3c489 +Block 0029 [ 62]: 5f997145c2c8ebbf +Block 0029 [ 63]: e12b0fa58ed93dd1 +Block 0029 [ 64]: 4543581fe2f0990a +Block 0029 [ 65]: ce9ec79474f06130 +Block 0029 [ 66]: 13d572daac86fdb1 +Block 0029 [ 67]: ae6cd4b262974a62 +Block 0029 [ 68]: 23497b36a1c78cec +Block 0029 [ 69]: 63b4c4217de59bfc +Block 0029 [ 70]: 3155fe204edc09b1 +Block 0029 [ 71]: fbdf0237d6ac506a +Block 0029 [ 72]: ee79105c9807021e +Block 0029 [ 73]: 6bfb8a1bbb310ef3 +Block 0029 [ 74]: 74622d1cca0ed342 +Block 0029 [ 75]: c539105c9e727e74 +Block 0029 [ 76]: c0a399a42230055c +Block 0029 [ 77]: 203053df632abe24 +Block 0029 [ 78]: 13732ba10ce9e8e0 +Block 0029 [ 79]: 92d8c6a7eb4cba2f +Block 0029 [ 80]: 8827ab8b69c0f7f9 +Block 0029 [ 81]: 88f40ead7dfa7fb2 +Block 0029 [ 82]: 431eccb39d1abf56 +Block 0029 [ 83]: dacff364cb26e27d +Block 0029 [ 84]: 241bc13751a6e283 +Block 0029 [ 85]: 46cb1c43864dc5b8 +Block 0029 [ 86]: 49d69a774a299d69 +Block 0029 [ 87]: 2bff0e7b35995290 +Block 0029 [ 88]: 3a659105b325fb4e +Block 0029 [ 89]: b5bce292f719867c +Block 0029 [ 90]: 80090c29789ca112 +Block 0029 [ 91]: 15a5ca1fa6e2aaea +Block 0029 [ 92]: de25532e31966d8c +Block 0029 [ 93]: f8ffde1a1c637f85 +Block 0029 [ 94]: 9171e29e4280937d +Block 0029 [ 95]: 90b45cfcb848b517 +Block 0029 [ 96]: edfd832a481a152b +Block 0029 [ 97]: f810f6f8064f465f +Block 0029 [ 98]: 39d750ed2039d0bf +Block 0029 [ 99]: fa4a1e1447324c92 +Block 0029 [100]: 824aadeb266b642e +Block 0029 [101]: 9f4c17afc1a606bd +Block 0029 [102]: 09bf69caf3c721d6 +Block 0029 [103]: b25dc5501a7f4814 +Block 0029 [104]: 881d3b32751e2a35 +Block 0029 [105]: a88d79d4c1fba15e +Block 0029 [106]: 4fe4c1bbe47dee02 +Block 0029 [107]: 23bf5f2de21587cd +Block 0029 [108]: df7aa3ce6c9c0a09 +Block 0029 [109]: a02e74446e2657e6 +Block 0029 [110]: cc60e31e33d6c4f6 +Block 0029 [111]: a09f2da2481b0763 +Block 0029 [112]: 0b2b1384f2124f27 +Block 0029 [113]: 89c63ba718168c82 +Block 0029 [114]: 5a61043d96d13192 +Block 0029 [115]: ebb1ce98d35b8f90 +Block 0029 [116]: 9dc50f8e18d13718 +Block 0029 [117]: e7d6c964ead7f9da +Block 0029 [118]: 90b675087a3940b3 +Block 0029 [119]: 5eef50e3c9b68430 +Block 0029 [120]: 62af3a224e6ce28c +Block 0029 [121]: 96984c57b60d4916 +Block 0029 [122]: aba3c89e948b9f92 +Block 0029 [123]: 57544a942bb5af40 +Block 0029 [124]: f66ae56a55153ab6 +Block 0029 [125]: 97309420faef1165 +Block 0029 [126]: a6cb3a785aea74fb +Block 0029 [127]: e1a5f37573462dbe +Block 0030 [ 0]: c4a8fd9627c5a47d +Block 0030 [ 1]: d372d170bd35b961 +Block 0030 [ 2]: 42a1b3a62c1169b2 +Block 0030 [ 3]: 9ab6aa1587d3eddf +Block 0030 [ 4]: f84406b7bd4594e4 +Block 0030 [ 5]: 6ddfeddd2b6bdc53 +Block 0030 [ 6]: 687c4b18ffbf9edd +Block 0030 [ 7]: a15d1e1b71b743d0 +Block 0030 [ 8]: 52730cd446dbd63e +Block 0030 [ 9]: fbbe0a5c53261dca +Block 0030 [ 10]: 33047cce19568e37 +Block 0030 [ 11]: addb511156a7a1af +Block 0030 [ 12]: c5477d82bbf2559a +Block 0030 [ 13]: 70b11daf1aaf02bb +Block 0030 [ 14]: 27251b8da2d89443 +Block 0030 [ 15]: 03b0356e4fd322ed +Block 0030 [ 16]: 9d4406baa010c2a1 +Block 0030 [ 17]: b005a3f65cd63694 +Block 0030 [ 18]: 29d46007f3ee0b7e +Block 0030 [ 19]: 64da2e53786f2126 +Block 0030 [ 20]: fe798fa3c3e26050 +Block 0030 [ 21]: 12a97db444270c96 +Block 0030 [ 22]: 2e0b9d47bf16f5f2 +Block 0030 [ 23]: cdcc69ab3c8ef1f2 +Block 0030 [ 24]: 4741e45445a6678e +Block 0030 [ 25]: 45abf8aebeb6f00a +Block 0030 [ 26]: 226f2f6953ec7ca3 +Block 0030 [ 27]: 13bc983dbcc285ed +Block 0030 [ 28]: 72d40c37c20a02c4 +Block 0030 [ 29]: 4c102717d6d656a9 +Block 0030 [ 30]: 5e79aaa2746e67d8 +Block 0030 [ 31]: 42cc680d6b4afd2b +Block 0030 [ 32]: b9d632fae3cc28d5 +Block 0030 [ 33]: c64d4ab875cb86b6 +Block 0030 [ 34]: 67c11e81b2ba60b4 +Block 0030 [ 35]: 6a6c40d772023a89 +Block 0030 [ 36]: e19dd8badb2e4216 +Block 0030 [ 37]: 53be5e4e20b1a601 +Block 0030 [ 38]: e4fc0a59fa146e1f +Block 0030 [ 39]: 99758907b065fbd5 +Block 0030 [ 40]: a80984191480bba0 +Block 0030 [ 41]: 5025c806e0569a00 +Block 0030 [ 42]: c0a535e23e65470d +Block 0030 [ 43]: e77995c440572a44 +Block 0030 [ 44]: d7c79537a8455c12 +Block 0030 [ 45]: 2b0bcc76eb68b8b8 +Block 0030 [ 46]: 0031fb133528a9ad +Block 0030 [ 47]: ebca5f4fca5a5287 +Block 0030 [ 48]: dba025e2aee7ee4a +Block 0030 [ 49]: de18654fd5a6daec +Block 0030 [ 50]: 68354a5bb40295bb +Block 0030 [ 51]: c7076ac90199a35f +Block 0030 [ 52]: 114405fe1c60af8d +Block 0030 [ 53]: 947ce0c0a8c90790 +Block 0030 [ 54]: 3361310a6fdea716 +Block 0030 [ 55]: 02bb9db176c892e7 +Block 0030 [ 56]: f90d5706fd35e35a +Block 0030 [ 57]: e2156232141eeb9f +Block 0030 [ 58]: 08f4471efa0ff800 +Block 0030 [ 59]: 3974a0f6c247c3bd +Block 0030 [ 60]: fed6515e21fbecea +Block 0030 [ 61]: 30ea20c394760c0c +Block 0030 [ 62]: d87e4d6eddbbb745 +Block 0030 [ 63]: 7b8cccfb2880810b +Block 0030 [ 64]: f1c99e4632e9f1ce +Block 0030 [ 65]: 6948a03ef039d701 +Block 0030 [ 66]: edca546e83989230 +Block 0030 [ 67]: 241d8f3bfa875aa7 +Block 0030 [ 68]: afd7565f7cd31111 +Block 0030 [ 69]: 7e36338afc723b26 +Block 0030 [ 70]: a0a901bf1ef2491d +Block 0030 [ 71]: 9704ec662a6f2274 +Block 0030 [ 72]: 1b9be6bf68a5f7b4 +Block 0030 [ 73]: 001627847aaaee2d +Block 0030 [ 74]: 43161987fbb74519 +Block 0030 [ 75]: dd31369e9bb1335c +Block 0030 [ 76]: 33814586064f1d5f +Block 0030 [ 77]: cc77565fc68364b1 +Block 0030 [ 78]: 89cc92134c98053c +Block 0030 [ 79]: ca22c6467315c0a5 +Block 0030 [ 80]: 49a66c3163bc8199 +Block 0030 [ 81]: 60abfd7551756c62 +Block 0030 [ 82]: 371443ce3e11231c +Block 0030 [ 83]: 49abdd0cc8d76912 +Block 0030 [ 84]: d4cb7475a4aa3404 +Block 0030 [ 85]: 8e824478b5989403 +Block 0030 [ 86]: 3886b07905fd269a +Block 0030 [ 87]: 1f0dc4948652f82a +Block 0030 [ 88]: b62bad9cb5c30a59 +Block 0030 [ 89]: aeae875734cf2887 +Block 0030 [ 90]: 0c986e320f30ee81 +Block 0030 [ 91]: 4b827cd42945a6d9 +Block 0030 [ 92]: e9cb7e75d24e1356 +Block 0030 [ 93]: d6d32db5b7ec3445 +Block 0030 [ 94]: 16aa7c5a5bad7059 +Block 0030 [ 95]: 43d59f33f342c8b5 +Block 0030 [ 96]: 2dcc68bca46025d2 +Block 0030 [ 97]: 429ac7c8ee851217 +Block 0030 [ 98]: 90c904513d9aa7bf +Block 0030 [ 99]: ba350b48edc86579 +Block 0030 [100]: 426a30161f7839d5 +Block 0030 [101]: c25cc2d336a32e58 +Block 0030 [102]: b958cfc711b9f939 +Block 0030 [103]: 1d4229ac7bb5dd8c +Block 0030 [104]: c5e93255ecab4ce0 +Block 0030 [105]: 2b86aa91c6e2e4fa +Block 0030 [106]: 0cc7a6672d285c49 +Block 0030 [107]: c2d7eee9234269e5 +Block 0030 [108]: f0707ce0a1f4d8a8 +Block 0030 [109]: 8378a40dcbfca7a7 +Block 0030 [110]: 1d127ac9de087e9b +Block 0030 [111]: 3fe93574207e1ad1 +Block 0030 [112]: b776f8bb45223858 +Block 0030 [113]: f7c51e3003714e52 +Block 0030 [114]: 3501b4ec55b44791 +Block 0030 [115]: 2bce85a6e98b7159 +Block 0030 [116]: aee18f3255b44e69 +Block 0030 [117]: 3993a16d5f337dd2 +Block 0030 [118]: a79ef642ab3a25f7 +Block 0030 [119]: fd5598a10072459a +Block 0030 [120]: e5a711c5649ed84a +Block 0030 [121]: 87b3640e02241add +Block 0030 [122]: ac919e23ba1fb501 +Block 0030 [123]: 5d44ecc8c2749ba8 +Block 0030 [124]: 8d41f01e81fc287f +Block 0030 [125]: 183a90a82f6b00e8 +Block 0030 [126]: 8620ea87468a36fb +Block 0030 [127]: 8165d72c97466f11 +Block 0031 [ 0]: 575e616d866cded1 +Block 0031 [ 1]: d0c56fd53ebd74ff +Block 0031 [ 2]: 2a86edaf4d858805 +Block 0031 [ 3]: f639bf1987b479e5 +Block 0031 [ 4]: 730a432c62f491c5 +Block 0031 [ 5]: 1202b29b1cda7af8 +Block 0031 [ 6]: ce2dd01e1073741d +Block 0031 [ 7]: 36cb3d0949b5025b +Block 0031 [ 8]: 13e050ab11ea1337 +Block 0031 [ 9]: b4f44504e0be684d +Block 0031 [ 10]: 5c9fc9aebb6d6612 +Block 0031 [ 11]: ea0d448cd81ca4ac +Block 0031 [ 12]: a82b03ccf692d521 +Block 0031 [ 13]: 3d06ef267f0bbe24 +Block 0031 [ 14]: c5f8328a157b9f06 +Block 0031 [ 15]: 20a38ddff1a49442 +Block 0031 [ 16]: 5dcb0b307bf4d126 +Block 0031 [ 17]: c01b94bac0a4e5e9 +Block 0031 [ 18]: 11c3448ab906e24e +Block 0031 [ 19]: 355a0574c7d70dee +Block 0031 [ 20]: 0ea006d78c090c69 +Block 0031 [ 21]: 2ddcc814e8f5ec0c +Block 0031 [ 22]: fff0739c85757a45 +Block 0031 [ 23]: 7ee4982a1bfc4d86 +Block 0031 [ 24]: 3b67e4e2526ff9b7 +Block 0031 [ 25]: d7f70eb9fa227ead +Block 0031 [ 26]: 3544acf4b54868ec +Block 0031 [ 27]: 8bc614f0e28b6a92 +Block 0031 [ 28]: d2a934f539079ac3 +Block 0031 [ 29]: db0f9b2faf6c2b37 +Block 0031 [ 30]: fdcd90fa6b0f84ba +Block 0031 [ 31]: 8d0a2beb899c00fd +Block 0031 [ 32]: dc25a4332c55ea3d +Block 0031 [ 33]: 50881241f8e00f6e +Block 0031 [ 34]: 41cfcce5a5b3880a +Block 0031 [ 35]: 11614daf5026c828 +Block 0031 [ 36]: 3ddd9b304e9728d8 +Block 0031 [ 37]: e818ac2a459b8457 +Block 0031 [ 38]: 5cb8cdc8827cb247 +Block 0031 [ 39]: d5efdbab1707f2e9 +Block 0031 [ 40]: 7c65151a829c07dc +Block 0031 [ 41]: 7f6338d31e6fc39e +Block 0031 [ 42]: 8af2bcf2ed1333c8 +Block 0031 [ 43]: dda0aefa5afd4b09 +Block 0031 [ 44]: 5facf7534d9abe1f +Block 0031 [ 45]: 8ffe5101be9bd433 +Block 0031 [ 46]: 7e1a89924bab3829 +Block 0031 [ 47]: e0661ca19ba8b1bf +Block 0031 [ 48]: a8e58db69a52cdf9 +Block 0031 [ 49]: 2bcd1dd9262df44b +Block 0031 [ 50]: 2f555295c6346155 +Block 0031 [ 51]: 03f489ded473a2fb +Block 0031 [ 52]: f28bc8d4dbc4b7ec +Block 0031 [ 53]: 26d6c84798ffe2e3 +Block 0031 [ 54]: 97fae729b30dd563 +Block 0031 [ 55]: b12635047eb3acee +Block 0031 [ 56]: aff7ba90ab778f21 +Block 0031 [ 57]: 67fe61d236c7c6cf +Block 0031 [ 58]: cbae983adaf97906 +Block 0031 [ 59]: 30e8875063ca7545 +Block 0031 [ 60]: 19bf0a1582f83725 +Block 0031 [ 61]: 4c8341ee3ebf8e31 +Block 0031 [ 62]: a4a540b030e4792b +Block 0031 [ 63]: 138e0472265a2539 +Block 0031 [ 64]: 7fd36c1c40af40ec +Block 0031 [ 65]: 38be5ae88c76e298 +Block 0031 [ 66]: 18c6155b61fdc2a6 +Block 0031 [ 67]: d32f23f583f7b9c0 +Block 0031 [ 68]: 47c87ed6db4f5c38 +Block 0031 [ 69]: 9360da426e7b9ec5 +Block 0031 [ 70]: 471ca3f4eb2c7fd6 +Block 0031 [ 71]: 29ec5e7bc232e2a3 +Block 0031 [ 72]: 7686edcfdfed7037 +Block 0031 [ 73]: c35f7c9ac6b415a3 +Block 0031 [ 74]: fc56d6e6f2c6b330 +Block 0031 [ 75]: 802fb1c790d59658 +Block 0031 [ 76]: 919bf5530ba7c278 +Block 0031 [ 77]: 3a8aa8e56fd3c622 +Block 0031 [ 78]: 7d88cdd1f416e205 +Block 0031 [ 79]: 5e87c9fbc69552fc +Block 0031 [ 80]: e498a967d0ff8ec3 +Block 0031 [ 81]: 7c4349736a7b011b +Block 0031 [ 82]: 12adf2f4f56813de +Block 0031 [ 83]: d39787d17315a62d +Block 0031 [ 84]: 5a8a67341b955b7b +Block 0031 [ 85]: 8b65860241795c97 +Block 0031 [ 86]: 2c23d7d3bb43b2d6 +Block 0031 [ 87]: 43563f6cebd735b9 +Block 0031 [ 88]: 2aac7340a8a95510 +Block 0031 [ 89]: 79d30b598e436c93 +Block 0031 [ 90]: 1ca23b39c9a1f01a +Block 0031 [ 91]: 6d0bbace3cb89348 +Block 0031 [ 92]: 6268a2d39a912f00 +Block 0031 [ 93]: f5e167b29717e9ff +Block 0031 [ 94]: c5adfac7cfb2e07c +Block 0031 [ 95]: fe31b165de131497 +Block 0031 [ 96]: eda3b5f044a5650c +Block 0031 [ 97]: f2ffe58385c2cc7d +Block 0031 [ 98]: c85a79c4a8b5ed65 +Block 0031 [ 99]: a7063351c8c83c32 +Block 0031 [100]: ceafa39d17f8c3d9 +Block 0031 [101]: 341cd82e8aedd1ca +Block 0031 [102]: 0a42ae65f74aaf51 +Block 0031 [103]: e3d41dd612a09b65 +Block 0031 [104]: f3ae25982ef782f8 +Block 0031 [105]: ff109e3fbd5ee836 +Block 0031 [106]: c03d53f10518d1fc +Block 0031 [107]: 14d022a4b677f1be +Block 0031 [108]: 1c130fc69a5e1c06 +Block 0031 [109]: e2b85a1ca95da14c +Block 0031 [110]: 85d97caf315c08ef +Block 0031 [111]: 30029f09eb2e6383 +Block 0031 [112]: 2921e8257b92bcbe +Block 0031 [113]: fb97db2b711a3e60 +Block 0031 [114]: ff464a83e7152778 +Block 0031 [115]: 3b8f587cfef05f26 +Block 0031 [116]: 04d9e75c766c2b45 +Block 0031 [117]: d7bc0ceef1fd32d6 +Block 0031 [118]: 8ae936c2ca91af09 +Block 0031 [119]: d777bdec939101d6 +Block 0031 [120]: d3b1abe83999ee4c +Block 0031 [121]: 6ff4ee863c1ade4b +Block 0031 [122]: 17fa2286d2d5536e +Block 0031 [123]: d16cb8c7377ff3ab +Block 0031 [124]: 4d4b435cea35caa6 +Block 0031 [125]: c582210d99ad1359 +Block 0031 [126]: d087971b36fd6d77 +Block 0031 [127]: a55222a93754c692 + + After pass 2: +Block 0000 [ 0]: 942363968ce597a4 +Block 0000 [ 1]: a22448c0bdad5760 +Block 0000 [ 2]: a5f80662b6fa8748 +Block 0000 [ 3]: a0f9b9ce392f719f +Block 0000 [ 4]: 24771fac2c17fe57 +Block 0000 [ 5]: 6e05b2f1ffe5958f +Block 0000 [ 6]: cc45370bae5b130c +Block 0000 [ 7]: 0461f05eb0d65592 +Block 0000 [ 8]: 2eea1c82a49d6d34 +Block 0000 [ 9]: 12272607e15dfaa6 +Block 0000 [ 10]: 216906860b21749d +Block 0000 [ 11]: 00f651387251d250 +Block 0000 [ 12]: bcd2a5a392a2a43b +Block 0000 [ 13]: 9ee681ed300fdaaa +Block 0000 [ 14]: 318842723fcaae05 +Block 0000 [ 15]: d85a06bed01fb22b +Block 0000 [ 16]: 046350dc9c48ebbc +Block 0000 [ 17]: 647ee04f98fa7866 +Block 0000 [ 18]: 4dbe4ba16bfe120d +Block 0000 [ 19]: b45bca27a0cc788f +Block 0000 [ 20]: 7389557b3110dc12 +Block 0000 [ 21]: f67c7e37ff5ca6ca +Block 0000 [ 22]: 8d537efc16faac0d +Block 0000 [ 23]: 7a1eec8e08032c79 +Block 0000 [ 24]: 18bd8c2566663679 +Block 0000 [ 25]: 37593d71f6d59696 +Block 0000 [ 26]: 5f3d78a4aa578228 +Block 0000 [ 27]: e7cc793ba9a67c95 +Block 0000 [ 28]: 11761062c6beafc8 +Block 0000 [ 29]: 7a83734d47c94656 +Block 0000 [ 30]: 696353b55d34a549 +Block 0000 [ 31]: 0aa08d75ceaa2e4f +Block 0000 [ 32]: 020d1de2ccff07b8 +Block 0000 [ 33]: 3ac26f355b98a77f +Block 0000 [ 34]: 586b7fb7feac8d82 +Block 0000 [ 35]: 93520e3647f3fe9c +Block 0000 [ 36]: 3c40d90c4b43341b +Block 0000 [ 37]: 08d66d2abf80b9f5 +Block 0000 [ 38]: 1449609ac46a56d9 +Block 0000 [ 39]: 3ba305ee8fe112da +Block 0000 [ 40]: 75cb629b14266f70 +Block 0000 [ 41]: a27b5b5bfd1c5714 +Block 0000 [ 42]: 49f36a01e2990b54 +Block 0000 [ 43]: f5931fd9cdc548b0 +Block 0000 [ 44]: 126f15612a2b63ce +Block 0000 [ 45]: 16a3669213a9a111 +Block 0000 [ 46]: 86401a84f8178304 +Block 0000 [ 47]: af79709b402f275c +Block 0000 [ 48]: d8930abf6da1c122 +Block 0000 [ 49]: ce56fbf6ebc01e9f +Block 0000 [ 50]: bd302509949084b3 +Block 0000 [ 51]: 64571e4fbbb3a212 +Block 0000 [ 52]: 56989272fe4320c3 +Block 0000 [ 53]: cb17c879d6d1f781 +Block 0000 [ 54]: d47a5d5f78d8f717 +Block 0000 [ 55]: 7bd868fbb7d3bf87 +Block 0000 [ 56]: 3e06553276dd63fe +Block 0000 [ 57]: 96466ee2d93c3caf +Block 0000 [ 58]: c2795e4533e384ab +Block 0000 [ 59]: 4ecabafa9d24c35e +Block 0000 [ 60]: 3e49dda72dfec548 +Block 0000 [ 61]: d027a1cb462d9ece +Block 0000 [ 62]: c93fe06270637d9d +Block 0000 [ 63]: 9ec49544e821fe72 +Block 0000 [ 64]: 97422029aef16a01 +Block 0000 [ 65]: 509e9e1054482d9d +Block 0000 [ 66]: 4d81c6d9e4fc0b4a +Block 0000 [ 67]: 59d4d46649466f76 +Block 0000 [ 68]: 7cb23f332c9e4b4c +Block 0000 [ 69]: bb795a50d4cd9f67 +Block 0000 [ 70]: 03b3a556f49e6d9f +Block 0000 [ 71]: 46a55683aa7cef1e +Block 0000 [ 72]: c7ede4dc5bc2f8e7 +Block 0000 [ 73]: 9533f8b974ea3cdd +Block 0000 [ 74]: b14b8a6d3399fb80 +Block 0000 [ 75]: 27c6b38badcaaeb8 +Block 0000 [ 76]: d7f483a98d2fa5ef +Block 0000 [ 77]: 4dce2ae80c619079 +Block 0000 [ 78]: 76219242e50e0e96 +Block 0000 [ 79]: a6d693a4c51dae38 +Block 0000 [ 80]: 2dcfbb729b1c3980 +Block 0000 [ 81]: 25f0264a26573a39 +Block 0000 [ 82]: b33a6ef25e1913bb +Block 0000 [ 83]: 7517c5c1acea4bea +Block 0000 [ 84]: 2c4ef6504acd5c35 +Block 0000 [ 85]: 129b9cb8b3cdd94d +Block 0000 [ 86]: dbdd6a53ddf36d6e +Block 0000 [ 87]: 78afa24a3cb6b14b +Block 0000 [ 88]: 53bce6911d203682 +Block 0000 [ 89]: 1a34077b1e8e0eef +Block 0000 [ 90]: ae9e591ae3feb90b +Block 0000 [ 91]: 691a26ef618ecf6d +Block 0000 [ 92]: 8bb8d772358e5b1e +Block 0000 [ 93]: cffd14266ff9bb4d +Block 0000 [ 94]: 3ba46898bd5d5cfe +Block 0000 [ 95]: 77ad33988adec25a +Block 0000 [ 96]: ed3dead883350bea +Block 0000 [ 97]: 5d0a7ac353b24c31 +Block 0000 [ 98]: 6e6ac3e921ba46c9 +Block 0000 [ 99]: bed9e5b4d3899d3f +Block 0000 [100]: 9c0a0d3141428032 +Block 0000 [101]: 4a7f5f1c6292066b +Block 0000 [102]: 8761870ad510760d +Block 0000 [103]: 34938635ae1e4ad2 +Block 0000 [104]: 319eef4153643e18 +Block 0000 [105]: 27c87dfc969ea38d +Block 0000 [106]: 1737ef12f143cf54 +Block 0000 [107]: f815a1261999f96c +Block 0000 [108]: b5a14e371b524464 +Block 0000 [109]: 375979aa1d218a95 +Block 0000 [110]: cc671fe6a831c39d +Block 0000 [111]: 066dfa49ab4e6a24 +Block 0000 [112]: a4e5ab7b49e89ee7 +Block 0000 [113]: 314a326354659a90 +Block 0000 [114]: 6a0b43eff1de6f34 +Block 0000 [115]: 511b2e464fbc1f54 +Block 0000 [116]: 9937ac736a9569bb +Block 0000 [117]: d4259cc337fc3d15 +Block 0000 [118]: 588c20cfd35c4f5a +Block 0000 [119]: 6de3c00c4bc54f53 +Block 0000 [120]: f59c53752dd831a3 +Block 0000 [121]: 0f0d13178cea41b4 +Block 0000 [122]: a2eb999a027b86bf +Block 0000 [123]: e3559fb8e02731a4 +Block 0000 [124]: 8f9d752260ae9a4e +Block 0000 [125]: 29610b46dc6b52d2 +Block 0000 [126]: 42c6958af7594776 +Block 0000 [127]: 3b85740e71d4f71c +Block 0001 [ 0]: 8933e64816bc3c32 +Block 0001 [ 1]: 6b5d511f307c772b +Block 0001 [ 2]: 640e9c6f13125dac +Block 0001 [ 3]: c92724968dd54857 +Block 0001 [ 4]: d01ef9226eea4842 +Block 0001 [ 5]: e4655aa75ade15e7 +Block 0001 [ 6]: d477f48bed63310e +Block 0001 [ 7]: 69446abfe437eed2 +Block 0001 [ 8]: c4d1ea35f24a6f9a +Block 0001 [ 9]: b722107dc9c051e5 +Block 0001 [ 10]: 7750e4d202970704 +Block 0001 [ 11]: 8f8d1225a1bb42b7 +Block 0001 [ 12]: 4815590b75935d30 +Block 0001 [ 13]: 8208be64cc777087 +Block 0001 [ 14]: 73658f6c3af494a8 +Block 0001 [ 15]: 8b45b07ebadf1b2e +Block 0001 [ 16]: f34672d581652805 +Block 0001 [ 17]: 3e3c2ed161e9783c +Block 0001 [ 18]: a96412916e27cc5e +Block 0001 [ 19]: 06c01bf7826e9676 +Block 0001 [ 20]: 9f2f79747ae9907d +Block 0001 [ 21]: 86d22c1e939b23c8 +Block 0001 [ 22]: 860e87de53661ec9 +Block 0001 [ 23]: 1b19dd2913f34830 +Block 0001 [ 24]: c482338b59ef1ceb +Block 0001 [ 25]: eef02a98bb1718f8 +Block 0001 [ 26]: 2a3028c482d0d6b8 +Block 0001 [ 27]: 41a33e0a0ee4ca9d +Block 0001 [ 28]: 9a9456826ba1f74b +Block 0001 [ 29]: dc7a699855869415 +Block 0001 [ 30]: 852d03d25c3c5552 +Block 0001 [ 31]: d2ee86e4fbf9a4e1 +Block 0001 [ 32]: e2a9984de71206b5 +Block 0001 [ 33]: 728a26a15dbe1fb8 +Block 0001 [ 34]: ec818010efee7f6b +Block 0001 [ 35]: f4c8deb3dda7c786 +Block 0001 [ 36]: 6cfb96299a245412 +Block 0001 [ 37]: 7c5d4798b69ca9db +Block 0001 [ 38]: 5117608953ac40a3 +Block 0001 [ 39]: 1ff1030837f3a401 +Block 0001 [ 40]: 0129f0e17cf81a8d +Block 0001 [ 41]: c1f67504af11f24b +Block 0001 [ 42]: 7c9d811e29ef25a8 +Block 0001 [ 43]: 81f677f8e4fb8d59 +Block 0001 [ 44]: 6a40f0cc7a8a67c9 +Block 0001 [ 45]: e364bcdbac9c6792 +Block 0001 [ 46]: 29dad8b26f8cc597 +Block 0001 [ 47]: 1de18f044b5ba657 +Block 0001 [ 48]: 560dcf64c69a6c6a +Block 0001 [ 49]: 6aa1734eeb3f606b +Block 0001 [ 50]: 832b835316929e03 +Block 0001 [ 51]: 515d7e6ed1bf35c7 +Block 0001 [ 52]: 44d6de77335af04b +Block 0001 [ 53]: cf83557f9c2f3136 +Block 0001 [ 54]: 1251e369a95fcbbd +Block 0001 [ 55]: 608ba509ab302690 +Block 0001 [ 56]: 0423987eaafa50ab +Block 0001 [ 57]: d6cc93d3499879ee +Block 0001 [ 58]: 2456b39d82c2cba5 +Block 0001 [ 59]: fb07b4c94e7fa26f +Block 0001 [ 60]: eef2846f701cfa79 +Block 0001 [ 61]: 396ef23e96ed436b +Block 0001 [ 62]: dfa3b158325a5a2b +Block 0001 [ 63]: 8328fe5f61fb1f69 +Block 0001 [ 64]: 67c5143d52a8bfa7 +Block 0001 [ 65]: 19c43cb4735b5a86 +Block 0001 [ 66]: c810ae9fa3aa1c65 +Block 0001 [ 67]: 644eaeb65e569d04 +Block 0001 [ 68]: e10b2172426640c7 +Block 0001 [ 69]: 8082ae7cea9ae7a7 +Block 0001 [ 70]: 4dad45a8e8ddcd81 +Block 0001 [ 71]: dbd1226270739902 +Block 0001 [ 72]: 68635f3be55dd5ce +Block 0001 [ 73]: b457f93d06b180fb +Block 0001 [ 74]: a0d61375996e95f0 +Block 0001 [ 75]: 12a32b840ad8cd18 +Block 0001 [ 76]: 7809824b4aaf59a5 +Block 0001 [ 77]: 606f87eaf9341152 +Block 0001 [ 78]: 1683a54b647f2788 +Block 0001 [ 79]: 8df012b829206704 +Block 0001 [ 80]: bb1e1e560210a4a5 +Block 0001 [ 81]: 085ce09838b355f0 +Block 0001 [ 82]: 1cbe49273e85fb04 +Block 0001 [ 83]: fdcb4b14f445be52 +Block 0001 [ 84]: 1741411a9c533a72 +Block 0001 [ 85]: a7754cc877040650 +Block 0001 [ 86]: 547b7149971b51e6 +Block 0001 [ 87]: 3ca1ecc928d222b5 +Block 0001 [ 88]: 89e6059b31bd2f39 +Block 0001 [ 89]: 5e89a65cfd712b20 +Block 0001 [ 90]: 8631701b830060cc +Block 0001 [ 91]: c26929b72cca2ba2 +Block 0001 [ 92]: 71e0ce4bc264c5bc +Block 0001 [ 93]: dbebf21eab539724 +Block 0001 [ 94]: 7e1172df492bc6ac +Block 0001 [ 95]: 1a5b7631e6107903 +Block 0001 [ 96]: 0b1f56228c4984ee +Block 0001 [ 97]: 9197c0f66deb44a2 +Block 0001 [ 98]: 2f590db75fecbcda +Block 0001 [ 99]: cc5337b5eac68e3c +Block 0001 [100]: 29dde35d7b47d989 +Block 0001 [101]: ef51d99f8cee0410 +Block 0001 [102]: b11819e8450fa788 +Block 0001 [103]: 7ddbf15350186d69 +Block 0001 [104]: 568a1d424a1f63a4 +Block 0001 [105]: 7484d6c5e05e9998 +Block 0001 [106]: 2ac73044bf7528d3 +Block 0001 [107]: 433686c08c23d13f +Block 0001 [108]: 02dfbbff143a2605 +Block 0001 [109]: 9b0b16287f9868ae +Block 0001 [110]: f0f555d7f2b42574 +Block 0001 [111]: 5753eae110f92768 +Block 0001 [112]: 1558a16313a709c0 +Block 0001 [113]: 00e7dd7e011f526b +Block 0001 [114]: 47b62bca94aabcb8 +Block 0001 [115]: c44a080576b41634 +Block 0001 [116]: 51d000afc76f6940 +Block 0001 [117]: e8f146885de969e6 +Block 0001 [118]: 7d755b45c4babd6d +Block 0001 [119]: e8dcb75ff43079d7 +Block 0001 [120]: cd8686c282174b8e +Block 0001 [121]: 0437758a4f2771cb +Block 0001 [122]: 36547a9cf289cecd +Block 0001 [123]: 73eb73f11a143bc1 +Block 0001 [124]: 77a96e30c3bbbe56 +Block 0001 [125]: 3adf14fe652f6b47 +Block 0001 [126]: c39db9672c033a5e +Block 0001 [127]: 5428b1c8e77ae9bd +Block 0002 [ 0]: 27143d2f1efffa3b +Block 0002 [ 1]: 92054d8203ce8b23 +Block 0002 [ 2]: 7adfb7b6bcc72a95 +Block 0002 [ 3]: 2e9b30722a801455 +Block 0002 [ 4]: 07d38bb53dc981b9 +Block 0002 [ 5]: 50aef2f924d4aeec +Block 0002 [ 6]: 63356ab028532887 +Block 0002 [ 7]: 3d81696f259e64e0 +Block 0002 [ 8]: b7687d4458cd64ef +Block 0002 [ 9]: 2bd8d2f76c5905d0 +Block 0002 [ 10]: 79f82c385784f252 +Block 0002 [ 11]: 1c81144344d2b68e +Block 0002 [ 12]: 883d9dc766b4a30c +Block 0002 [ 13]: 611e0378bc6a49c8 +Block 0002 [ 14]: 7a9cad2711172433 +Block 0002 [ 15]: 787c5fb132ea2d0a +Block 0002 [ 16]: d27f3d126ba19edd +Block 0002 [ 17]: 02dde8594c9906eb +Block 0002 [ 18]: 3c6e00c96752f958 +Block 0002 [ 19]: 4fddb42e97f8d0d3 +Block 0002 [ 20]: 3f19d4814968bf82 +Block 0002 [ 21]: e08abaf6f1035dd9 +Block 0002 [ 22]: b80a7e82adf0f85c +Block 0002 [ 23]: 298a9a8108dbf8e9 +Block 0002 [ 24]: 784856c72cf9ac8f +Block 0002 [ 25]: ffaccb829fa5f65c +Block 0002 [ 26]: ed2bf64259ea583f +Block 0002 [ 27]: ffe048699cd2a692 +Block 0002 [ 28]: f564e04d1a8a4252 +Block 0002 [ 29]: 6902f9c761dadfe7 +Block 0002 [ 30]: f3875beb4192b204 +Block 0002 [ 31]: ed38974911bda5e5 +Block 0002 [ 32]: 41e7282b8648818e +Block 0002 [ 33]: 457d44a3523f3b8a +Block 0002 [ 34]: 26140075cd70fb63 +Block 0002 [ 35]: c12aa89584f45da2 +Block 0002 [ 36]: 445c6774b1be85b5 +Block 0002 [ 37]: d82f3fe66a9835de +Block 0002 [ 38]: 272b4c1b006f6458 +Block 0002 [ 39]: e18a80e5de5f8f92 +Block 0002 [ 40]: b279ec48aba4a2cc +Block 0002 [ 41]: 2ef21bdf8fc95896 +Block 0002 [ 42]: f9378d25e10c2b8a +Block 0002 [ 43]: 9d2e6cea6629a6c0 +Block 0002 [ 44]: 2eae57a0d6ba83ad +Block 0002 [ 45]: 2eb4d8a56c8ca748 +Block 0002 [ 46]: ee9ddb4fd7973dad +Block 0002 [ 47]: c4bf57a84c7bf795 +Block 0002 [ 48]: 6c4d217528dbf560 +Block 0002 [ 49]: 7d6f8af4eab0cd59 +Block 0002 [ 50]: 776bd3efb2f3b8fe +Block 0002 [ 51]: 8e0795aba13eb6a6 +Block 0002 [ 52]: dd5aae2ed78391da +Block 0002 [ 53]: d53a11f1b81cfee2 +Block 0002 [ 54]: c344c6012479f24d +Block 0002 [ 55]: f86d097070bba89a +Block 0002 [ 56]: 85403fe0759bd9c0 +Block 0002 [ 57]: 6e351347eced8994 +Block 0002 [ 58]: 170574bf614f349e +Block 0002 [ 59]: 4a7477ce0bc54b02 +Block 0002 [ 60]: 2bec0e0a6e1f375a +Block 0002 [ 61]: 7216226a67c5d6ba +Block 0002 [ 62]: b44cf28046c7a845 +Block 0002 [ 63]: 3f0c4129f395817e +Block 0002 [ 64]: ffc0ff91b9057736 +Block 0002 [ 65]: ab1078ce910f14e2 +Block 0002 [ 66]: b2e8408a2695b35d +Block 0002 [ 67]: 8c1848ddfa66636f +Block 0002 [ 68]: 1faec37f9f1428ba +Block 0002 [ 69]: 19a8ca8cb3592af5 +Block 0002 [ 70]: 8c55e560993ea226 +Block 0002 [ 71]: 2b466f00788d83c3 +Block 0002 [ 72]: 04219396cc82f878 +Block 0002 [ 73]: 644028c105701847 +Block 0002 [ 74]: 71a90499ea6846bf +Block 0002 [ 75]: 1eafc2706c7debdf +Block 0002 [ 76]: 32d47b4a9d6c04f0 +Block 0002 [ 77]: b3e8d611184079c8 +Block 0002 [ 78]: 60c1676692032ccd +Block 0002 [ 79]: 51b6316cf58681da +Block 0002 [ 80]: fdd554b4196037df +Block 0002 [ 81]: 7311347f4036ef59 +Block 0002 [ 82]: 54da8cce51af74bb +Block 0002 [ 83]: 15dc8d1e1fcc4c47 +Block 0002 [ 84]: e1242b600438eb26 +Block 0002 [ 85]: 5e9af3576b040c3a +Block 0002 [ 86]: 9d498016f4513d1f +Block 0002 [ 87]: dc77cdca25c279da +Block 0002 [ 88]: 64b1c3dafd531d4c +Block 0002 [ 89]: daa8b3064bcd92f8 +Block 0002 [ 90]: 18c717b9bd23c6ff +Block 0002 [ 91]: 641efa1283ce1a64 +Block 0002 [ 92]: e812f651876e59d6 +Block 0002 [ 93]: dc93172e4dfdd48d +Block 0002 [ 94]: cb833b72b2363cde +Block 0002 [ 95]: 1e55a82cf0179cb9 +Block 0002 [ 96]: 898d29a991b9d2a1 +Block 0002 [ 97]: f08ac0673cb42432 +Block 0002 [ 98]: c70ab8e1546f0596 +Block 0002 [ 99]: d04126ac1778f91d +Block 0002 [100]: 4d89cc5ac78f54da +Block 0002 [101]: e61701e9ef2fd2ed +Block 0002 [102]: 27a0a559bfed8bc1 +Block 0002 [103]: 8bc653b6f5616da6 +Block 0002 [104]: b25b95c11540f139 +Block 0002 [105]: 935de0b89e2bf3a3 +Block 0002 [106]: c1ca9175889860ae +Block 0002 [107]: bad4d3e6aeef6ab6 +Block 0002 [108]: 8227429a091f7cac +Block 0002 [109]: bdaaa59b9599f80e +Block 0002 [110]: a5e0837fe0c873c4 +Block 0002 [111]: 218d782e87b94143 +Block 0002 [112]: c0697881686f0cbe +Block 0002 [113]: 08708761b2c12a57 +Block 0002 [114]: 990e8e0e2cc49a1a +Block 0002 [115]: 8159be87497fee30 +Block 0002 [116]: 770200c1ce09a3ee +Block 0002 [117]: 46f87161802bf7ae +Block 0002 [118]: 4d8ecc452b78cdb2 +Block 0002 [119]: eb42428ee6d8ebad +Block 0002 [120]: 6791a4843ae97f7e +Block 0002 [121]: 0844f63752143720 +Block 0002 [122]: 6d4ec9812e538900 +Block 0002 [123]: cac8c8d555e27212 +Block 0002 [124]: 50f57f07badc20af +Block 0002 [125]: 6878628488adcd8c +Block 0002 [126]: 456985a0caaca233 +Block 0002 [127]: 69bed6dacc1aecc6 +Block 0003 [ 0]: 4b0e087d223f8e25 +Block 0003 [ 1]: 910b21c025d932ed +Block 0003 [ 2]: 0f6b2e762d91655e +Block 0003 [ 3]: 7c0f520bc631d589 +Block 0003 [ 4]: 9823f0419761c5fe +Block 0003 [ 5]: bb8812442cf4a512 +Block 0003 [ 6]: 2ee03b353b0d5d03 +Block 0003 [ 7]: b73de85aea332935 +Block 0003 [ 8]: 0a633692f8316ba4 +Block 0003 [ 9]: 8b1c009d2c67cc73 +Block 0003 [ 10]: 1ecce5d630554dd9 +Block 0003 [ 11]: 443732d25e36560b +Block 0003 [ 12]: 544796fd126802aa +Block 0003 [ 13]: b04709f729b457ae +Block 0003 [ 14]: fcc5e7a2070bbbff +Block 0003 [ 15]: 1303b873028b16d8 +Block 0003 [ 16]: 8281b07b71a7b53b +Block 0003 [ 17]: ae345eb749a3b061 +Block 0003 [ 18]: f8c3c7d848a57090 +Block 0003 [ 19]: 2bc012ffd8e67259 +Block 0003 [ 20]: daa5f0425df20682 +Block 0003 [ 21]: 633c21a777c64b34 +Block 0003 [ 22]: 760a52c5bd088239 +Block 0003 [ 23]: 680d3b03371886cb +Block 0003 [ 24]: 1ddaff5ab4514179 +Block 0003 [ 25]: 3fc2baa599d33474 +Block 0003 [ 26]: 9331275233ff8127 +Block 0003 [ 27]: 6d8f7b0d99b8b9d6 +Block 0003 [ 28]: f11fdc68569752a4 +Block 0003 [ 29]: 46b1545d247bcdca +Block 0003 [ 30]: 07a9fa589f450696 +Block 0003 [ 31]: f94751714c942d6b +Block 0003 [ 32]: e936d6d0f1a555c1 +Block 0003 [ 33]: 9f23639b50f7b3eb +Block 0003 [ 34]: 77ecd6638ee94110 +Block 0003 [ 35]: 96692e332c8b554f +Block 0003 [ 36]: 5c0d272f724ef7d7 +Block 0003 [ 37]: c1522f5e06bd81a6 +Block 0003 [ 38]: 0b5c007bf5f11d0d +Block 0003 [ 39]: 62c5150317c2cdf5 +Block 0003 [ 40]: c97d944f9acbb3c8 +Block 0003 [ 41]: 9715798f0363471c +Block 0003 [ 42]: 1c1b4fef37aa3c9c +Block 0003 [ 43]: 7a86df1842374201 +Block 0003 [ 44]: 4f47ea46bef1b0da +Block 0003 [ 45]: fd6fa9c86175a7ea +Block 0003 [ 46]: 0f9f9b1230c86278 +Block 0003 [ 47]: 3995b03527037d27 +Block 0003 [ 48]: c263efdc370cdce2 +Block 0003 [ 49]: 84f20badc86c03f8 +Block 0003 [ 50]: 7c1005ec5f211ed6 +Block 0003 [ 51]: f8d06c05e9a72026 +Block 0003 [ 52]: 4aae8636403d1108 +Block 0003 [ 53]: 4546835813223393 +Block 0003 [ 54]: 1c2764d4cd5313cf +Block 0003 [ 55]: 725136f3051ef360 +Block 0003 [ 56]: b4d0034de3d614b0 +Block 0003 [ 57]: 792103a24761ffd4 +Block 0003 [ 58]: 4e38609d0044e97c +Block 0003 [ 59]: 9afa00b1d5dd4333 +Block 0003 [ 60]: 97dd3b7a6fa89f13 +Block 0003 [ 61]: e6092892e8bf751c +Block 0003 [ 62]: 6f55cba23b48301f +Block 0003 [ 63]: f1dccdff20ae0d89 +Block 0003 [ 64]: c3a9a019a2058563 +Block 0003 [ 65]: 765f13d5212bbed6 +Block 0003 [ 66]: be12cda3cad84c16 +Block 0003 [ 67]: ae93875e493e512f +Block 0003 [ 68]: 7ebc4b263a43ffb8 +Block 0003 [ 69]: 437953643dddd941 +Block 0003 [ 70]: 6e505fc1442766f0 +Block 0003 [ 71]: fee308509c0fb33a +Block 0003 [ 72]: 5636969202552bf8 +Block 0003 [ 73]: 27676e0c252b1003 +Block 0003 [ 74]: 186b7418403aa6e5 +Block 0003 [ 75]: 558cfdc97fbd6c3f +Block 0003 [ 76]: 631f97c52eb34738 +Block 0003 [ 77]: 9b3fc9f6107fa759 +Block 0003 [ 78]: cfd95882728d049b +Block 0003 [ 79]: 9c7f58fb99e270f7 +Block 0003 [ 80]: 7e38dc0cca98a684 +Block 0003 [ 81]: 198f7cf761235866 +Block 0003 [ 82]: 5319b61c46bda215 +Block 0003 [ 83]: f8c46a363243225b +Block 0003 [ 84]: d2740b3e180bb236 +Block 0003 [ 85]: 8254e42ad7fe9ca4 +Block 0003 [ 86]: 1d008ab69a2fd975 +Block 0003 [ 87]: b207601e992f963d +Block 0003 [ 88]: 3184eff21f0bfb58 +Block 0003 [ 89]: a9a6ddda5b3d04af +Block 0003 [ 90]: ca7eb6a074c159be +Block 0003 [ 91]: 22a707e28bf36d07 +Block 0003 [ 92]: d2274395db860d0e +Block 0003 [ 93]: 9532e6a03fbe3374 +Block 0003 [ 94]: 722c4483d24e0771 +Block 0003 [ 95]: 09529f5e75d973d7 +Block 0003 [ 96]: e6fde2e300ac1149 +Block 0003 [ 97]: e5ea399e35b56d85 +Block 0003 [ 98]: 76b8fccf34f67e03 +Block 0003 [ 99]: 685031d32e27fe9e +Block 0003 [100]: 21fd6ea20cfc5f82 +Block 0003 [101]: 888bffd8fe0e3b39 +Block 0003 [102]: 20056565ed74a83b +Block 0003 [103]: 86ae5f8cfec26527 +Block 0003 [104]: 045f8635c5deb96b +Block 0003 [105]: bf46419a235d6a27 +Block 0003 [106]: ed55a12bd839eefd +Block 0003 [107]: a46b03852768129f +Block 0003 [108]: e9392a5d93768be7 +Block 0003 [109]: 1755683d48f0c69b +Block 0003 [110]: f06e2709a9cd9675 +Block 0003 [111]: e589e4292cf704b5 +Block 0003 [112]: 6603b685775f4b74 +Block 0003 [113]: 6c64f5abd9163d64 +Block 0003 [114]: 8701c20eb13acd97 +Block 0003 [115]: 9d2f0e480ee351b5 +Block 0003 [116]: 7e2c0a9376088c82 +Block 0003 [117]: 6aa8c72815a770f1 +Block 0003 [118]: 0feb7b00d5113c68 +Block 0003 [119]: 72e79efd4e6f678c +Block 0003 [120]: 9c24b446c6641bd4 +Block 0003 [121]: 92a43699ecc3988f +Block 0003 [122]: 9dd3422d698d52c4 +Block 0003 [123]: 586130e96521c849 +Block 0003 [124]: a3a9e2624c22e9e2 +Block 0003 [125]: 7e982432d8e1761c +Block 0003 [126]: de238c4c31ab9518 +Block 0003 [127]: 9806bfa8d721de9f +Block 0004 [ 0]: db756afb20d0f801 +Block 0004 [ 1]: 52403c4b7098c439 +Block 0004 [ 2]: 060476b1eb46d30b +Block 0004 [ 3]: 28981d0098506ae3 +Block 0004 [ 4]: 0f05c643aa615a21 +Block 0004 [ 5]: cf2cc1388fa6c1d2 +Block 0004 [ 6]: 86fc3b76a8468c99 +Block 0004 [ 7]: a84397030daf6d8a +Block 0004 [ 8]: c650eb82be15bb19 +Block 0004 [ 9]: 253cf6e26b4655a8 +Block 0004 [ 10]: 085677dbf1566016 +Block 0004 [ 11]: 40fe9d75102201a6 +Block 0004 [ 12]: 613a5d61cdeb1b35 +Block 0004 [ 13]: fadad5a34a9cf63b +Block 0004 [ 14]: c3dd954823b55935 +Block 0004 [ 15]: b67522507c43fb2b +Block 0004 [ 16]: 601c060f0e8e6141 +Block 0004 [ 17]: ea466cf84f084dbd +Block 0004 [ 18]: f23820d8c13abd43 +Block 0004 [ 19]: b0e74adb6b084535 +Block 0004 [ 20]: c78e726fcffcbe09 +Block 0004 [ 21]: 398b885ddca727ab +Block 0004 [ 22]: 8e78fcdbf9a66417 +Block 0004 [ 23]: 5dbc6191b2232c06 +Block 0004 [ 24]: d706a14b2fc8ce39 +Block 0004 [ 25]: e4535ac6c8a26ed0 +Block 0004 [ 26]: 3805dfffecd51d9f +Block 0004 [ 27]: b4c63b72deaba3a6 +Block 0004 [ 28]: adb0c3bbb220b8e1 +Block 0004 [ 29]: 830dd01847112438 +Block 0004 [ 30]: c65d1ed36fe0fa0a +Block 0004 [ 31]: 449b624d9f7e4314 +Block 0004 [ 32]: 47856deea66fd6b6 +Block 0004 [ 33]: 336fd6e2c0b459dd +Block 0004 [ 34]: b24c5155dc84165f +Block 0004 [ 35]: 5b2785f6a2715313 +Block 0004 [ 36]: 4e1898ef2bf8c505 +Block 0004 [ 37]: d8b9094a47f656f2 +Block 0004 [ 38]: 12519f417bf4dfa7 +Block 0004 [ 39]: a977d962d47e354f +Block 0004 [ 40]: 691f4e137dbf082e +Block 0004 [ 41]: 5ad29eed2bac7fec +Block 0004 [ 42]: 427572e48fd7644e +Block 0004 [ 43]: 1b8cf180a1c73237 +Block 0004 [ 44]: 1aabf9f1184937da +Block 0004 [ 45]: 891cbda9e37ba68d +Block 0004 [ 46]: 0418daabe2c16169 +Block 0004 [ 47]: 64a7382e19d51973 +Block 0004 [ 48]: 8dbb4ef40e24566f +Block 0004 [ 49]: b11b05b045872fda +Block 0004 [ 50]: f3a6e55d9b5e47ff +Block 0004 [ 51]: b014a28f4444c68d +Block 0004 [ 52]: 36fd09913e88cc14 +Block 0004 [ 53]: 57dd73f3f6d83016 +Block 0004 [ 54]: 4fa25ff086004319 +Block 0004 [ 55]: 935ac3b9db1501e2 +Block 0004 [ 56]: 6e1a4444010c3cb4 +Block 0004 [ 57]: bde290d21f347b04 +Block 0004 [ 58]: 05fd38a4d47f0af6 +Block 0004 [ 59]: a3fbc08baf1fbede +Block 0004 [ 60]: 9595005e75362334 +Block 0004 [ 61]: 0b2ecde0552078e7 +Block 0004 [ 62]: be64f75e7900a732 +Block 0004 [ 63]: dfb4eb288d7eb5e4 +Block 0004 [ 64]: 20b14d8b83924244 +Block 0004 [ 65]: 04868735f30b39cf +Block 0004 [ 66]: c64982adce3c469f +Block 0004 [ 67]: 5b7b474fede2087a +Block 0004 [ 68]: 2c0a1912ad737151 +Block 0004 [ 69]: 1f4b24117b480cd2 +Block 0004 [ 70]: effcecfccbcfff8e +Block 0004 [ 71]: 2b0cb96832d4dc16 +Block 0004 [ 72]: e7fccf6dfa07ecd8 +Block 0004 [ 73]: 953afc6f861b1c94 +Block 0004 [ 74]: 725f8ba6d97ef823 +Block 0004 [ 75]: 5d2c69fd94b7e3d5 +Block 0004 [ 76]: f9fc85d4bd30520b +Block 0004 [ 77]: 54450477c83e21d1 +Block 0004 [ 78]: 2acbb625eda3b2f6 +Block 0004 [ 79]: 65ce6cc83e36847c +Block 0004 [ 80]: 157b6fcc033f9508 +Block 0004 [ 81]: 1e87646b58a7f2ad +Block 0004 [ 82]: 67d06c966e2ec700 +Block 0004 [ 83]: 7bb67c9e07139485 +Block 0004 [ 84]: 3c2a6ffb331055e9 +Block 0004 [ 85]: 3222341a5a4bfaa8 +Block 0004 [ 86]: 925790ae0fa10d1f +Block 0004 [ 87]: f2ef3171c9df4d0e +Block 0004 [ 88]: e3222a1744853453 +Block 0004 [ 89]: cc4a70c90ed4e3d1 +Block 0004 [ 90]: a6acce36d3cbff61 +Block 0004 [ 91]: 7d50ae85b9affa5d +Block 0004 [ 92]: 568200dc03447ed8 +Block 0004 [ 93]: 71ff3b3a01fab487 +Block 0004 [ 94]: 1c985317bb54925c +Block 0004 [ 95]: 05f623542b7f3397 +Block 0004 [ 96]: be9b653e7d14f39b +Block 0004 [ 97]: bf0c1f7dd51c1302 +Block 0004 [ 98]: bf86d9a6345007e9 +Block 0004 [ 99]: b820c3d21badb127 +Block 0004 [100]: 02834afe16035acc +Block 0004 [101]: 7fa95f3e1a84f66d +Block 0004 [102]: 515b912d57908619 +Block 0004 [103]: baa33b5032e8fcd6 +Block 0004 [104]: 7483cbfdef56254c +Block 0004 [105]: 3832871e97423269 +Block 0004 [106]: 72c7246ea679e000 +Block 0004 [107]: c9f8babb13cc69b0 +Block 0004 [108]: fb8757f84e77c30e +Block 0004 [109]: 9fdde5e1bb0e383e +Block 0004 [110]: 1766df9e43c5e58f +Block 0004 [111]: c618e86b1af6da02 +Block 0004 [112]: d7d9c781b3015ab0 +Block 0004 [113]: 51841b0d440e3795 +Block 0004 [114]: 282e5dcc69d5d2ec +Block 0004 [115]: 8cdad5cc0e82a1dc +Block 0004 [116]: e68c2af47545fd32 +Block 0004 [117]: 8350a28d7b542bb9 +Block 0004 [118]: 91372fdbb5b852bb +Block 0004 [119]: ded3484130d33a67 +Block 0004 [120]: f185eaf9a77023b2 +Block 0004 [121]: 26205250ddc11c7f +Block 0004 [122]: 39c3a7fcd987d77e +Block 0004 [123]: 8ff0734fe37406ac +Block 0004 [124]: 776c54ae235ecceb +Block 0004 [125]: 1df84f1a5ef7bc3d +Block 0004 [126]: f02e8b997b65c12f +Block 0004 [127]: d0efa6b02e97ed1d +Block 0005 [ 0]: 97365ec5d5feb9dc +Block 0005 [ 1]: 405a3347fb59461c +Block 0005 [ 2]: f9e0c320e8d154ed +Block 0005 [ 3]: 93d762daab5535f2 +Block 0005 [ 4]: e1279c771bb7ad39 +Block 0005 [ 5]: 2ddd3606c554bc2c +Block 0005 [ 6]: 6450a2130996c4f6 +Block 0005 [ 7]: 885bb49a481d2fe7 +Block 0005 [ 8]: 362b94e89df1c117 +Block 0005 [ 9]: 5ab9b69f2c8ac46c +Block 0005 [ 10]: 40ad27720d57185a +Block 0005 [ 11]: 8d50540d4e6e6d7b +Block 0005 [ 12]: 83a9e4ef385fe9d5 +Block 0005 [ 13]: b9b54d8b8f2984f5 +Block 0005 [ 14]: e1735ae8748ed910 +Block 0005 [ 15]: 0e446a07067a4e8e +Block 0005 [ 16]: c647cabca2bf8f7a +Block 0005 [ 17]: 94b2083ffab378f8 +Block 0005 [ 18]: ac8c8efc5e9ebb71 +Block 0005 [ 19]: a3c091fb4042d4fb +Block 0005 [ 20]: 0d3396a94e8f94e3 +Block 0005 [ 21]: 96d1456fabae1b0b +Block 0005 [ 22]: 26c474009eba6d80 +Block 0005 [ 23]: 5957c46a8e1c0c39 +Block 0005 [ 24]: d5aafbccb10c5642 +Block 0005 [ 25]: 1dd59c0f842f7fca +Block 0005 [ 26]: e3fa2b6c3eeca025 +Block 0005 [ 27]: 67c4520871b2e932 +Block 0005 [ 28]: 5ebd6871c2fc0b59 +Block 0005 [ 29]: 90d2edee6c1d9005 +Block 0005 [ 30]: dad34dbac094b87f +Block 0005 [ 31]: e54438ecb4b24f62 +Block 0005 [ 32]: 6eb10b8511b48f6d +Block 0005 [ 33]: 863ac85b81bb1c2b +Block 0005 [ 34]: 00ec6014392eb5b3 +Block 0005 [ 35]: 20c55c34c775b35b +Block 0005 [ 36]: 6a2efc2c5917a502 +Block 0005 [ 37]: b8cb8a562d9fd683 +Block 0005 [ 38]: f42931a0a29ccba2 +Block 0005 [ 39]: c3964b6d73dd347e +Block 0005 [ 40]: f23949b6fa10adc0 +Block 0005 [ 41]: 19a24ae861a83ccc +Block 0005 [ 42]: 49b34dc230aa14f5 +Block 0005 [ 43]: 277cc5b873776b0e +Block 0005 [ 44]: 6732bd0cbadb9619 +Block 0005 [ 45]: 2be9ae36f860f161 +Block 0005 [ 46]: 61592c3eb719855a +Block 0005 [ 47]: d2b629caba2aebec +Block 0005 [ 48]: 96247c1ae0664282 +Block 0005 [ 49]: 655c7c4537585a3c +Block 0005 [ 50]: 60b569ae13b6c8b1 +Block 0005 [ 51]: f335d545e50a4530 +Block 0005 [ 52]: 0bbbfaf0be722cbf +Block 0005 [ 53]: dfc61e9e557e44e5 +Block 0005 [ 54]: f15ae5152f91946f +Block 0005 [ 55]: 8b10184967e65648 +Block 0005 [ 56]: ee62ab86f357fbf6 +Block 0005 [ 57]: a676cd316f73b00a +Block 0005 [ 58]: e15dd8ae85ef70f7 +Block 0005 [ 59]: 0ed5e6375469b87b +Block 0005 [ 60]: bf4ad0c50a762ab1 +Block 0005 [ 61]: 0895b67633c14add +Block 0005 [ 62]: d4e44141246331d4 +Block 0005 [ 63]: 7bfc4a0d5c60bd78 +Block 0005 [ 64]: c88fee400aba9ca4 +Block 0005 [ 65]: b2bb482d8f37f64b +Block 0005 [ 66]: 8d19eb8ae10bb8e0 +Block 0005 [ 67]: 71647d13b3f2df80 +Block 0005 [ 68]: 330809743e2acd7a +Block 0005 [ 69]: 0b0a6e291fdd4d64 +Block 0005 [ 70]: 6ed960c9c7d0147a +Block 0005 [ 71]: 3d3453b5908f2eaf +Block 0005 [ 72]: 666a42e1953f7783 +Block 0005 [ 73]: 563179451c527b5e +Block 0005 [ 74]: 98de158b342a81a9 +Block 0005 [ 75]: 70ea5bed36f0c27c +Block 0005 [ 76]: c5d48e5c75044ac4 +Block 0005 [ 77]: 131d1cf79497fce4 +Block 0005 [ 78]: 502d4f9d9722d95a +Block 0005 [ 79]: 8cfd3119d03532ba +Block 0005 [ 80]: 847c8fed220b551f +Block 0005 [ 81]: 2de629f67b80ab43 +Block 0005 [ 82]: 366f96d310b73f7a +Block 0005 [ 83]: 882854c6aad02e67 +Block 0005 [ 84]: 655b8de717029a52 +Block 0005 [ 85]: ec848e02d002b2e7 +Block 0005 [ 86]: f468bcae80307e3b +Block 0005 [ 87]: e945840327a82759 +Block 0005 [ 88]: 44a9540fbc154202 +Block 0005 [ 89]: 92ecb8e9953e4b4a +Block 0005 [ 90]: 507abd983ab15f66 +Block 0005 [ 91]: 4b74dd58863117aa +Block 0005 [ 92]: 8f0c16a602e827b6 +Block 0005 [ 93]: 04dabe99055c7911 +Block 0005 [ 94]: 751498662fa26b4c +Block 0005 [ 95]: cab90768d911184e +Block 0005 [ 96]: f788ce69a19245e2 +Block 0005 [ 97]: d82096d5861d09b4 +Block 0005 [ 98]: d5a49556dd1a64a3 +Block 0005 [ 99]: 33c5d1ff3108f1c3 +Block 0005 [100]: 7000ced324095021 +Block 0005 [101]: 9c0b106f237035b0 +Block 0005 [102]: 5b0a824629eefaad +Block 0005 [103]: 9f3a70a53f500991 +Block 0005 [104]: 738807452e3a3632 +Block 0005 [105]: 2ed22603a5665055 +Block 0005 [106]: afe9ee256c051b3f +Block 0005 [107]: ac36d88864dd45fc +Block 0005 [108]: 4fcaa3b6e807e1ce +Block 0005 [109]: c149207930dabc97 +Block 0005 [110]: 2ac814034dc81dfc +Block 0005 [111]: 71edb390a916a67f +Block 0005 [112]: 20cf554180ffe9e0 +Block 0005 [113]: bb54c1d8ea79d355 +Block 0005 [114]: 2eb620e1e1811427 +Block 0005 [115]: 58d664027883cedf +Block 0005 [116]: a8fec49038889919 +Block 0005 [117]: a3bdcbb52bd4b630 +Block 0005 [118]: f6cd25ab758341dd +Block 0005 [119]: ae448eb1a7acb711 +Block 0005 [120]: 5d0d3d360339943f +Block 0005 [121]: 6b9a3ecd474aba3b +Block 0005 [122]: 2c534ae7c2a3b04f +Block 0005 [123]: e892ccac17c6456d +Block 0005 [124]: 7ff808f37169c921 +Block 0005 [125]: b8614be60c9c41bc +Block 0005 [126]: 439810b13ed01e1c +Block 0005 [127]: ca192babb18518cb +Block 0006 [ 0]: 5567c3fe090dd28e +Block 0006 [ 1]: 8d67a7ba019c88dc +Block 0006 [ 2]: 8caff62eff631181 +Block 0006 [ 3]: d72eddba14b5c03d +Block 0006 [ 4]: d7630af139b87bd7 +Block 0006 [ 5]: 750853f41bb331a8 +Block 0006 [ 6]: f8d103c297762291 +Block 0006 [ 7]: 2dae083ec585a586 +Block 0006 [ 8]: 626b2b63d161498a +Block 0006 [ 9]: c81de669dfeb13aa +Block 0006 [ 10]: 9c41b20f9889274c +Block 0006 [ 11]: 5c064dc661bbc6d6 +Block 0006 [ 12]: d8f6cb69aa556f7d +Block 0006 [ 13]: 569c7a1de808caf8 +Block 0006 [ 14]: f212e8fc9864aa7f +Block 0006 [ 15]: 784a66ec8fded6bf +Block 0006 [ 16]: 7b3644d8c7cc6ee2 +Block 0006 [ 17]: 47de720ab8662dc8 +Block 0006 [ 18]: b60758c5f35d33a3 +Block 0006 [ 19]: e82bc4ee11789ccd +Block 0006 [ 20]: b4b14f39ad071939 +Block 0006 [ 21]: cdc572feb64c77f6 +Block 0006 [ 22]: 4f1d233e9d2afb7a +Block 0006 [ 23]: 083f6f09f3589c18 +Block 0006 [ 24]: 91e9bb64b39eedc6 +Block 0006 [ 25]: ff631632c44b9be5 +Block 0006 [ 26]: 5f1d74f19fcf9ebb +Block 0006 [ 27]: c18575702765f410 +Block 0006 [ 28]: cb4c1f6b4b92ae73 +Block 0006 [ 29]: 2c47acff08aa3b6a +Block 0006 [ 30]: 7614e988f5de7f0d +Block 0006 [ 31]: 00aef92bc84ab36c +Block 0006 [ 32]: 8d568e3899bc329d +Block 0006 [ 33]: 93ee0cbb3fa97312 +Block 0006 [ 34]: 13d5658a3a5c3c06 +Block 0006 [ 35]: a19ab4c531fc3f3f +Block 0006 [ 36]: 0339f774914c7335 +Block 0006 [ 37]: 54e78c34c50dd35c +Block 0006 [ 38]: e222bc860018290d +Block 0006 [ 39]: 9c28c86cd7f61b70 +Block 0006 [ 40]: a85380135b847fc1 +Block 0006 [ 41]: 225414a9bdb19b61 +Block 0006 [ 42]: a0fbd39ccb46aa3f +Block 0006 [ 43]: 1ca6eb4988648f69 +Block 0006 [ 44]: 01695df4d0f0409a +Block 0006 [ 45]: d3b450827a33f3a7 +Block 0006 [ 46]: f5bfe4e78dc9b627 +Block 0006 [ 47]: 100ab041786e41d4 +Block 0006 [ 48]: 9d9d415f459fbe98 +Block 0006 [ 49]: 853fd4f2e9a42867 +Block 0006 [ 50]: ea657b6b10faf0d4 +Block 0006 [ 51]: 259e1b12b0f171fa +Block 0006 [ 52]: e8976ec91290563d +Block 0006 [ 53]: 1e412ebf6e0db035 +Block 0006 [ 54]: 849d615c1c6cfca2 +Block 0006 [ 55]: 5c11d9c6ce174cdb +Block 0006 [ 56]: 30b41a0e826fd9c2 +Block 0006 [ 57]: 31d73e96955f1340 +Block 0006 [ 58]: 14f074b7e26e3baa +Block 0006 [ 59]: 8eb1bec37ae581dc +Block 0006 [ 60]: 746facce259c02c9 +Block 0006 [ 61]: 03d1f7778abbe63f +Block 0006 [ 62]: eeff2118997dc86d +Block 0006 [ 63]: 90627027834a05e4 +Block 0006 [ 64]: 4bd0242cc3f044f7 +Block 0006 [ 65]: 519c2452cd1ca543 +Block 0006 [ 66]: e0ae6c47d727d6be +Block 0006 [ 67]: a913d15ae450d102 +Block 0006 [ 68]: 2823ac24a8d8fb6c +Block 0006 [ 69]: e907eb50e28565b1 +Block 0006 [ 70]: be0384795f998c29 +Block 0006 [ 71]: 3e3f5d9c252d4a47 +Block 0006 [ 72]: ed46fba6166a296e +Block 0006 [ 73]: 411e90d0cc8328fa +Block 0006 [ 74]: 332ca370c5b19bed +Block 0006 [ 75]: ac912248b236590e +Block 0006 [ 76]: 3ebd9154aea3189b +Block 0006 [ 77]: f3adf95f07c7edeb +Block 0006 [ 78]: 832321ca2483199f +Block 0006 [ 79]: 4b3578726e6d548e +Block 0006 [ 80]: b00c1ef3d8cbd83a +Block 0006 [ 81]: 7c29df3c99839f71 +Block 0006 [ 82]: 7825fea5c6892b1e +Block 0006 [ 83]: e99043733d5c8d15 +Block 0006 [ 84]: 3caccd923a60f855 +Block 0006 [ 85]: 2a3e154af80bf594 +Block 0006 [ 86]: 6688cc7c4764e11e +Block 0006 [ 87]: fa6ca05d1a601f5e +Block 0006 [ 88]: 04b5e8c105dd4562 +Block 0006 [ 89]: cbac7817e2e863ba +Block 0006 [ 90]: 58cd92a6c13b357e +Block 0006 [ 91]: ce4db34ad1d1bcbe +Block 0006 [ 92]: 68e21a26f2c97d49 +Block 0006 [ 93]: 53e396abb44d6f2c +Block 0006 [ 94]: 5cd31a0480291e4b +Block 0006 [ 95]: c91a9f8b190a4897 +Block 0006 [ 96]: 02ff4635b1f7bd99 +Block 0006 [ 97]: 6cea31788a0a3c45 +Block 0006 [ 98]: f22d5bf22fd3eb77 +Block 0006 [ 99]: 910e7439df3e5050 +Block 0006 [100]: ff94f950ee74b111 +Block 0006 [101]: b05178c84ae6c19f +Block 0006 [102]: eb2a7088c937b565 +Block 0006 [103]: 50d5dd2aea376866 +Block 0006 [104]: 7f629a6dd240c30b +Block 0006 [105]: 08a59c5edfe98396 +Block 0006 [106]: 55b920176a53d4c7 +Block 0006 [107]: 472c966c32a73ab0 +Block 0006 [108]: 6a1bcc98b4f8ed3d +Block 0006 [109]: b721fed948523009 +Block 0006 [110]: a0b34a33f38b99e6 +Block 0006 [111]: e748ba007b3555cd +Block 0006 [112]: e250a1b0cf3d4a97 +Block 0006 [113]: d0bc4b21724a5ef7 +Block 0006 [114]: 7b76eda1a50018cc +Block 0006 [115]: 71e663016941db15 +Block 0006 [116]: 9d11173466ba18c0 +Block 0006 [117]: 897602359be6f8c5 +Block 0006 [118]: 992dc7c6cfe686d7 +Block 0006 [119]: 69ed7655026d535b +Block 0006 [120]: 43619f859b7aa47e +Block 0006 [121]: 6f5f09231bc6deed +Block 0006 [122]: a7417d3014bb3f89 +Block 0006 [123]: cbf7dc5b9be3b6b4 +Block 0006 [124]: 61d700db25e0f849 +Block 0006 [125]: 70873a47587525cf +Block 0006 [126]: 58adc5e65f2ab161 +Block 0006 [127]: 6372caf551890b02 +Block 0007 [ 0]: e5af68ac92e3ce1d +Block 0007 [ 1]: 8ab48a815360139e +Block 0007 [ 2]: 599ee02270046677 +Block 0007 [ 3]: 3115b3b36ec22e74 +Block 0007 [ 4]: 133e5b0cc50ea01e +Block 0007 [ 5]: 66f56e0ec496e469 +Block 0007 [ 6]: 3c1fffec56f01c76 +Block 0007 [ 7]: e43cc0fb2e85690f +Block 0007 [ 8]: 85862c5ce7ac45c4 +Block 0007 [ 9]: 186e2f634a9f3780 +Block 0007 [ 10]: 24ef18172244e1cd +Block 0007 [ 11]: 943f3473b412bd6c +Block 0007 [ 12]: a477e8ba6d59ca13 +Block 0007 [ 13]: 5336924c59df8222 +Block 0007 [ 14]: abb2069e9dc9fb01 +Block 0007 [ 15]: 3d292c01089a9fe9 +Block 0007 [ 16]: 3b5d694eecf98e24 +Block 0007 [ 17]: e92b9a00a8274bf3 +Block 0007 [ 18]: a6d88a75c29b9553 +Block 0007 [ 19]: 9fe8d0d1b63840ce +Block 0007 [ 20]: 41d4833824e399d5 +Block 0007 [ 21]: 2e4556d5479df56b +Block 0007 [ 22]: d7beb6ba52a5e3cf +Block 0007 [ 23]: 60179b8e6b5bd794 +Block 0007 [ 24]: 9f76a53ba039b1c6 +Block 0007 [ 25]: 5ed48af982352227 +Block 0007 [ 26]: d58547fca3fb1f52 +Block 0007 [ 27]: 4ced6a9525b712c4 +Block 0007 [ 28]: f9e3aa78460a304b +Block 0007 [ 29]: b104cf2a586b2933 +Block 0007 [ 30]: 75eb7a8bca1ab23f +Block 0007 [ 31]: 3cdffacf21180e11 +Block 0007 [ 32]: 58d54ba682343f53 +Block 0007 [ 33]: 1ef6dcc2c4f22240 +Block 0007 [ 34]: 4d70211dafb7c9e8 +Block 0007 [ 35]: 2e3401d6c153aeff +Block 0007 [ 36]: a4829109c6b8d4c9 +Block 0007 [ 37]: d450dfd117330fc2 +Block 0007 [ 38]: bf9e6e9530001a66 +Block 0007 [ 39]: 35da1a2fa6ee32ce +Block 0007 [ 40]: f50b3d2a1f42afc6 +Block 0007 [ 41]: fedc5dfd801eb77e +Block 0007 [ 42]: 75bb865d03ea9a33 +Block 0007 [ 43]: 0ce9dfee891b34da +Block 0007 [ 44]: 965b86361b92d34c +Block 0007 [ 45]: 21c534a143787b87 +Block 0007 [ 46]: 872689c786a12d77 +Block 0007 [ 47]: 82c87d77434d10f1 +Block 0007 [ 48]: 31dbd1a3f4dcb526 +Block 0007 [ 49]: 98401b45be41281c +Block 0007 [ 50]: 493b2c530ac904ab +Block 0007 [ 51]: e64002673ddbe2c4 +Block 0007 [ 52]: ffa237b4d9f7c6b1 +Block 0007 [ 53]: f5c89a2d0c692df0 +Block 0007 [ 54]: ceaa1fcc80d1a707 +Block 0007 [ 55]: f0ed73be2d486643 +Block 0007 [ 56]: 2ce9741d5fd0d29a +Block 0007 [ 57]: b45b037a600dd4a8 +Block 0007 [ 58]: b6b867bf58753eba +Block 0007 [ 59]: dd0ba939cdef4048 +Block 0007 [ 60]: 67d73557e89394ab +Block 0007 [ 61]: f74e86f788e87bf0 +Block 0007 [ 62]: d2d266baf5e9202b +Block 0007 [ 63]: 995f928b5e0dc659 +Block 0007 [ 64]: b07a140277d0f7c8 +Block 0007 [ 65]: f05e1ae0444eccc6 +Block 0007 [ 66]: 33b96c500cb1d1b6 +Block 0007 [ 67]: 45136441ee11fd1b +Block 0007 [ 68]: 84c8824ae1e5edc3 +Block 0007 [ 69]: 860ba57d1b23aa52 +Block 0007 [ 70]: c84a54c4c7720146 +Block 0007 [ 71]: 2c35fbedbdace5a3 +Block 0007 [ 72]: ee3471988c8956d5 +Block 0007 [ 73]: c8e562b360fd8beb +Block 0007 [ 74]: 3ce39b5be84dc44f +Block 0007 [ 75]: 8e9a81d4cf5091e7 +Block 0007 [ 76]: 2661b97ce55a2d40 +Block 0007 [ 77]: 40f1554966b6a83a +Block 0007 [ 78]: b6a91f1e82939351 +Block 0007 [ 79]: 1ea224ba61929ccf +Block 0007 [ 80]: 24bbb716c04b5a1d +Block 0007 [ 81]: 3463f2a6a33663ba +Block 0007 [ 82]: 88c8abbed9e2fdf0 +Block 0007 [ 83]: 8124cf569702027c +Block 0007 [ 84]: 72d2441e9ad6a642 +Block 0007 [ 85]: bc4b5dcf6644ede7 +Block 0007 [ 86]: dccb3ae0b36a046c +Block 0007 [ 87]: 6634272be8ced6f9 +Block 0007 [ 88]: 891305818c792103 +Block 0007 [ 89]: f34a4ad0981c2e3d +Block 0007 [ 90]: 14c59749c7a6612d +Block 0007 [ 91]: 03f986b1327f47a6 +Block 0007 [ 92]: 43d9aeba262bce21 +Block 0007 [ 93]: 34f1ac6a86561bab +Block 0007 [ 94]: cdcb3b817cd99bcd +Block 0007 [ 95]: 95643e60b01b6c29 +Block 0007 [ 96]: 461a3563fc0e56f7 +Block 0007 [ 97]: bd3a2d183f293aab +Block 0007 [ 98]: d5789e856dd151bd +Block 0007 [ 99]: 7ed20b41f22451ac +Block 0007 [100]: 49712994024f26bb +Block 0007 [101]: a6d211b07780fd1d +Block 0007 [102]: 4f66c78a2f221653 +Block 0007 [103]: 0bc1dd9aa0830a9e +Block 0007 [104]: 250eeda980c9d642 +Block 0007 [105]: d201c949e6b6e459 +Block 0007 [106]: 576cde4cea26ab80 +Block 0007 [107]: 0bfc56658c0245d4 +Block 0007 [108]: e9f18a507c911fa4 +Block 0007 [109]: 2af0d6ca54f00132 +Block 0007 [110]: 297e9aaabf0d2ffa +Block 0007 [111]: 9f27fcd100c680dc +Block 0007 [112]: 8d39aeff9847b7ee +Block 0007 [113]: c80985dc01487e1e +Block 0007 [114]: f2fa0eb778c7af62 +Block 0007 [115]: f6394cf305a48740 +Block 0007 [116]: 015e6eabbb90e264 +Block 0007 [117]: bab21f929b7aab7e +Block 0007 [118]: dd466aed8166cfb7 +Block 0007 [119]: 4b6cb5dee28bc25b +Block 0007 [120]: 6098a17ecfe1a437 +Block 0007 [121]: b17491387f8bf0c0 +Block 0007 [122]: e8150e053b31d264 +Block 0007 [123]: 9603509225977b3c +Block 0007 [124]: bc8cd3f9c06cad39 +Block 0007 [125]: 3eaa4a01951d171c +Block 0007 [126]: 2ced5b180814e072 +Block 0007 [127]: 0060e85c62d0a2ec +Block 0008 [ 0]: 3bb7ae9e189f4b3f +Block 0008 [ 1]: 4871d3c6722a6c16 +Block 0008 [ 2]: 49d7f564e969f85c +Block 0008 [ 3]: 226bfa8e3fb66cc5 +Block 0008 [ 4]: 815d9f89ac664b79 +Block 0008 [ 5]: 7ca4a873f2e1ddbf +Block 0008 [ 6]: 0b3d92d79b49ee8c +Block 0008 [ 7]: 51c76e7c8fd0fb4f +Block 0008 [ 8]: 878b42e3b329ddb1 +Block 0008 [ 9]: 0c80181f9f2f6526 +Block 0008 [ 10]: 47eb5ddebb1291ff +Block 0008 [ 11]: 1c488d86f2f956a7 +Block 0008 [ 12]: 81063e175c0a41a9 +Block 0008 [ 13]: 78c27945ab3a11d0 +Block 0008 [ 14]: fa89b846df65fa62 +Block 0008 [ 15]: 54c262700a93c68f +Block 0008 [ 16]: b00923d64112c59c +Block 0008 [ 17]: f74e7ffa228ce2f0 +Block 0008 [ 18]: f2cfb80fec37299d +Block 0008 [ 19]: 43c5da6cb3d29e09 +Block 0008 [ 20]: 37c1cc0b0b683be4 +Block 0008 [ 21]: dbe418ef69d874c7 +Block 0008 [ 22]: c3a4dc36b63bdc1b +Block 0008 [ 23]: 4ad7a00fd1e79824 +Block 0008 [ 24]: af828d9bdb440528 +Block 0008 [ 25]: 7d89ae469511193d +Block 0008 [ 26]: f8569a874d5b7dba +Block 0008 [ 27]: e8966f0eff46620d +Block 0008 [ 28]: 221fd7081112bdb9 +Block 0008 [ 29]: 93b8a531f5841506 +Block 0008 [ 30]: 0f91faef8f459fe8 +Block 0008 [ 31]: ca2bd49cc88768f9 +Block 0008 [ 32]: 06e4a1f88407371e +Block 0008 [ 33]: a0658ae49d0e9b23 +Block 0008 [ 34]: 1e4cb8e54cc2324e +Block 0008 [ 35]: 2203d1a291721284 +Block 0008 [ 36]: d770a74079e19623 +Block 0008 [ 37]: 7206051e5574dd29 +Block 0008 [ 38]: cd399fada5c4aaaa +Block 0008 [ 39]: 0cb6960a5fa42edf +Block 0008 [ 40]: 5635ab47d64748d7 +Block 0008 [ 41]: 2bc716b701300050 +Block 0008 [ 42]: cef5872ca6db902e +Block 0008 [ 43]: 7160475a5e5c24b9 +Block 0008 [ 44]: 6f46f4222ed2e9ea +Block 0008 [ 45]: 9654e52ebcf77fc7 +Block 0008 [ 46]: 66ada969429a579c +Block 0008 [ 47]: dd4e6035012a1865 +Block 0008 [ 48]: 4c58b068f5496cd1 +Block 0008 [ 49]: ca46c2e8b1bc480b +Block 0008 [ 50]: b03db2a00420d0e6 +Block 0008 [ 51]: b0104b03cd81c752 +Block 0008 [ 52]: ccb51bf267691516 +Block 0008 [ 53]: 6f1b00350c4eb690 +Block 0008 [ 54]: 7a7d94de4caa1729 +Block 0008 [ 55]: d1e775ab9a27e50c +Block 0008 [ 56]: 2006ab215b5eae17 +Block 0008 [ 57]: 8876c48940376930 +Block 0008 [ 58]: 04f7adad534d0b43 +Block 0008 [ 59]: f36daf3f73b7648d +Block 0008 [ 60]: 11e7f9899d271b42 +Block 0008 [ 61]: 8ac2f8f3de06d2d4 +Block 0008 [ 62]: f258d11c38c78a60 +Block 0008 [ 63]: 0b4ebd059552ee96 +Block 0008 [ 64]: 9231af72054c88a6 +Block 0008 [ 65]: b2d22d56255d6a4c +Block 0008 [ 66]: 208809ca11cf7847 +Block 0008 [ 67]: 8df34a7478f9f5dd +Block 0008 [ 68]: 810e372ab981ce4b +Block 0008 [ 69]: 89c6f38f39971b50 +Block 0008 [ 70]: 900b46092a6eb453 +Block 0008 [ 71]: 63557a31e1c33595 +Block 0008 [ 72]: bb476c42a9874589 +Block 0008 [ 73]: d18c6d27105e48d2 +Block 0008 [ 74]: 67b78021633eb776 +Block 0008 [ 75]: 26a4cc2ec7627975 +Block 0008 [ 76]: 7a41ebe91b61c303 +Block 0008 [ 77]: 8719434029afdeb2 +Block 0008 [ 78]: 5ccc65a3dca58b5e +Block 0008 [ 79]: 151cf064fd68cf19 +Block 0008 [ 80]: 099a4141eaf944c9 +Block 0008 [ 81]: 1a00a7b15177c815 +Block 0008 [ 82]: 9617f3c9d79165e5 +Block 0008 [ 83]: 0633785f3798595f +Block 0008 [ 84]: 82989ddd8ed0cddc +Block 0008 [ 85]: f971723863681e7f +Block 0008 [ 86]: 006885f72ad83a6e +Block 0008 [ 87]: 0eea05ecafdf9994 +Block 0008 [ 88]: 3becdde2c8756f9b +Block 0008 [ 89]: ba5b7af0494782b9 +Block 0008 [ 90]: 8e093c4a112c3c00 +Block 0008 [ 91]: b6c1189d04a1d340 +Block 0008 [ 92]: 4d319e9ab94d3e23 +Block 0008 [ 93]: 6eeaecfc749aa50d +Block 0008 [ 94]: 3ec3286ab90d3c76 +Block 0008 [ 95]: 4d6f7eab345c86ac +Block 0008 [ 96]: 2468ec86927b1207 +Block 0008 [ 97]: c8545e1af6328683 +Block 0008 [ 98]: 18358c7f4c4e0a2f +Block 0008 [ 99]: d5a6d7e7269f1227 +Block 0008 [100]: c8554d835c547ae6 +Block 0008 [101]: 36c2c174e2e5a35b +Block 0008 [102]: acbb1f4892e38b4f +Block 0008 [103]: 841fed21e8a055fe +Block 0008 [104]: 9210713ecb31879c +Block 0008 [105]: 4a94e2cc4ea5c9f5 +Block 0008 [106]: e16adbea83dc65c4 +Block 0008 [107]: d1886e10ac7639b8 +Block 0008 [108]: b7567cc205f8d932 +Block 0008 [109]: 686815e7e302618a +Block 0008 [110]: 52d2241453c9f024 +Block 0008 [111]: 675cd693897661df +Block 0008 [112]: 25da19f17758d75b +Block 0008 [113]: 680c603aeea91871 +Block 0008 [114]: 0422985fee134a01 +Block 0008 [115]: 4876e8adceacc9b1 +Block 0008 [116]: 11d14285f3963391 +Block 0008 [117]: e7d41ef32a1da72e +Block 0008 [118]: e2ed3e4d9b6c04a1 +Block 0008 [119]: 4aabfde7e0b605cf +Block 0008 [120]: 83889bda82352bec +Block 0008 [121]: 137f3bfdce40f1cf +Block 0008 [122]: f5a57480af315e41 +Block 0008 [123]: 215ab203e038df23 +Block 0008 [124]: 1cfd21d6e3ef2735 +Block 0008 [125]: c956265ca56c41e8 +Block 0008 [126]: fc7298a18032efb9 +Block 0008 [127]: 62f5cc7e96f7a920 +Block 0009 [ 0]: 7df42ba8721fe889 +Block 0009 [ 1]: b6111ac624204424 +Block 0009 [ 2]: 486c98ce436fbd12 +Block 0009 [ 3]: 5e04a7f67216dcc6 +Block 0009 [ 4]: 65139d842c4ef511 +Block 0009 [ 5]: 60d706c1b4966e8d +Block 0009 [ 6]: 7a4d779951af65a7 +Block 0009 [ 7]: 80e0677d98c29149 +Block 0009 [ 8]: 515c99c1666d19ff +Block 0009 [ 9]: ec2aeec569c003c8 +Block 0009 [ 10]: 3bf671e9aa667761 +Block 0009 [ 11]: 140f53c675250fdb +Block 0009 [ 12]: 384950521419cf61 +Block 0009 [ 13]: dd96fe61cd894c12 +Block 0009 [ 14]: a54a4ef56712c263 +Block 0009 [ 15]: 686ca4e06fdea640 +Block 0009 [ 16]: c1d579d5fbe3b115 +Block 0009 [ 17]: bb1b7cd496096326 +Block 0009 [ 18]: a1f841ee18949ddd +Block 0009 [ 19]: e2d3370969b910c1 +Block 0009 [ 20]: 36d89c41fe3b46f5 +Block 0009 [ 21]: c63f9856d0426952 +Block 0009 [ 22]: fe27ac9b573089d3 +Block 0009 [ 23]: 6d6260bfd54cf612 +Block 0009 [ 24]: e0f205707d67ffe4 +Block 0009 [ 25]: 6bd588e661ba4e14 +Block 0009 [ 26]: 9bf7be2e77cbf233 +Block 0009 [ 27]: b6f5fdaa0dc4cd84 +Block 0009 [ 28]: 576a8562230ab47c +Block 0009 [ 29]: f4ccb57d9ab736ab +Block 0009 [ 30]: 8b0e76738b5fc872 +Block 0009 [ 31]: f7803b666ec8957a +Block 0009 [ 32]: 3f78fe043e0cfb43 +Block 0009 [ 33]: c913f2699d20c470 +Block 0009 [ 34]: 0ab2e84f3bcf8e09 +Block 0009 [ 35]: f5e7b0abee13f4f1 +Block 0009 [ 36]: cc161bdb34537218 +Block 0009 [ 37]: 7944df80e54a3be5 +Block 0009 [ 38]: 50356cde8f0d4d57 +Block 0009 [ 39]: 82502cbfd481d12e +Block 0009 [ 40]: 3ba30a673984c1ad +Block 0009 [ 41]: 56039a33423c9980 +Block 0009 [ 42]: 0f13c649e5a88821 +Block 0009 [ 43]: dfbbb9d225918f1b +Block 0009 [ 44]: fb8c47279fb810ab +Block 0009 [ 45]: ed67b9d5c4e6646d +Block 0009 [ 46]: 7bb9fea2ec9ddcce +Block 0009 [ 47]: f0daea90ef3b24f6 +Block 0009 [ 48]: 5845fd237b74c7a7 +Block 0009 [ 49]: f45163287bbf8b0a +Block 0009 [ 50]: 163c3282c762765a +Block 0009 [ 51]: c3b1de32025b97d9 +Block 0009 [ 52]: 5974b7e5aa241d3d +Block 0009 [ 53]: 0b8b540ed5bab753 +Block 0009 [ 54]: 6fbe481d7973d25f +Block 0009 [ 55]: 3882cf518bede3f7 +Block 0009 [ 56]: 960cb62d91c9c8f6 +Block 0009 [ 57]: 110dbc0c5ca2aef5 +Block 0009 [ 58]: c1309fbafeb3a68c +Block 0009 [ 59]: 064288ce0deb4656 +Block 0009 [ 60]: b2a7d1d41301758e +Block 0009 [ 61]: af9697b91850edda +Block 0009 [ 62]: 4d24cea246737528 +Block 0009 [ 63]: 784b376cfb2d0ba6 +Block 0009 [ 64]: d1f48e9c5e8af3de +Block 0009 [ 65]: 20eedfb6217c4983 +Block 0009 [ 66]: 7d2f4abd53e7c5b9 +Block 0009 [ 67]: 58f1ece95d65b46e +Block 0009 [ 68]: bc4b428f80c0af7c +Block 0009 [ 69]: 4585bb3525f1e55a +Block 0009 [ 70]: f324251c9d77b113 +Block 0009 [ 71]: 33f191b5173a42eb +Block 0009 [ 72]: 28ebdc374de36598 +Block 0009 [ 73]: 32f3a953382a498b +Block 0009 [ 74]: d35e9c131e3608a7 +Block 0009 [ 75]: f689a7d106420841 +Block 0009 [ 76]: 30995ce163c77fa5 +Block 0009 [ 77]: e8faa3ecf1de154c +Block 0009 [ 78]: 57530aa7a61fc0cc +Block 0009 [ 79]: 35efd5a0d158dcdc +Block 0009 [ 80]: 4e73e2d6aa2ac171 +Block 0009 [ 81]: 15771f08e1ef7fe5 +Block 0009 [ 82]: e66a3071a132f10c +Block 0009 [ 83]: 843e20be6f0785b0 +Block 0009 [ 84]: b07328be06c772eb +Block 0009 [ 85]: f9e991fed1add433 +Block 0009 [ 86]: cc2f21af35d479ca +Block 0009 [ 87]: 8e8419f0ca164d71 +Block 0009 [ 88]: 2cd7dcf212b3abfe +Block 0009 [ 89]: 2d64fac5a0b31d64 +Block 0009 [ 90]: 3ba34d7c079bebb6 +Block 0009 [ 91]: 90f66d7ee104c55f +Block 0009 [ 92]: e1456b346478113d +Block 0009 [ 93]: 0c285835265f3be3 +Block 0009 [ 94]: 7f9309a63daa86b8 +Block 0009 [ 95]: ac44c96a04460a00 +Block 0009 [ 96]: d135bc938ce01955 +Block 0009 [ 97]: 54fc07c195ab1407 +Block 0009 [ 98]: 39274ffa1a180bcd +Block 0009 [ 99]: 49cb9ea57622632f +Block 0009 [100]: b1f6e49b17a8d39f +Block 0009 [101]: 99b4eaef9f2e5908 +Block 0009 [102]: c027417b95f7828f +Block 0009 [103]: d98dfdbb969617a4 +Block 0009 [104]: 86032385ce09b244 +Block 0009 [105]: 786206950707f208 +Block 0009 [106]: d6d6aa444b93e383 +Block 0009 [107]: 6f3d16d5d71e52bc +Block 0009 [108]: ff6886abc5180c26 +Block 0009 [109]: 7ec9e1efd2d57ca5 +Block 0009 [110]: 497ca9c5dc68f98e +Block 0009 [111]: b4b70a21809a2988 +Block 0009 [112]: ddde3f879a1408ec +Block 0009 [113]: 35d73f42f4bee7b3 +Block 0009 [114]: 86bb8179313e38b2 +Block 0009 [115]: fbf1f7eb83326ddd +Block 0009 [116]: 7c362173a3a1d41b +Block 0009 [117]: cb9c8ca6a2c391fb +Block 0009 [118]: 16a3ab8a50ebc7c1 +Block 0009 [119]: b47dbea03b193d60 +Block 0009 [120]: 6e61db495e175da2 +Block 0009 [121]: e2dfec565ea44be2 +Block 0009 [122]: 62b2cd09575b9f1b +Block 0009 [123]: a86f0c012f643b10 +Block 0009 [124]: 4df4c66286c2beb3 +Block 0009 [125]: f92d1ef872a19f93 +Block 0009 [126]: 239813284a14780c +Block 0009 [127]: 2b8b5b9e47737d9b +Block 0010 [ 0]: d49f88dd8c8f6dca +Block 0010 [ 1]: 360d985177d3eb44 +Block 0010 [ 2]: 56e7f795256a450d +Block 0010 [ 3]: 016e1e47163f4bd7 +Block 0010 [ 4]: fcdd1debf16667bc +Block 0010 [ 5]: 4a0f1022f7a85f2c +Block 0010 [ 6]: e251feccd36d554d +Block 0010 [ 7]: d36d92ecc2b785cf +Block 0010 [ 8]: f2e379c0e8fc1248 +Block 0010 [ 9]: c3ba2a1d541d48a2 +Block 0010 [ 10]: f616ffee327e5c77 +Block 0010 [ 11]: 1a66afea7fe7a12f +Block 0010 [ 12]: b49783cdc2c97ff5 +Block 0010 [ 13]: dd9d58b1dee8b006 +Block 0010 [ 14]: 52fdd6bc21a7d42e +Block 0010 [ 15]: 89ee24884725e7dd +Block 0010 [ 16]: 19a9257c35240187 +Block 0010 [ 17]: 8fbefe8e54c3e278 +Block 0010 [ 18]: 546556e542abe8f5 +Block 0010 [ 19]: 336fe46a3902f155 +Block 0010 [ 20]: a2845437c78ec507 +Block 0010 [ 21]: c3fbb5a6fc4a4ddb +Block 0010 [ 22]: 1f2b44c37f824805 +Block 0010 [ 23]: 094c983c04543c5d +Block 0010 [ 24]: fb6b47e6cdce5891 +Block 0010 [ 25]: be5642c616a0c685 +Block 0010 [ 26]: 0db4788cd321d134 +Block 0010 [ 27]: 058a7158a4cca32e +Block 0010 [ 28]: 93fb20628ea97197 +Block 0010 [ 29]: 1a67eefe57587edb +Block 0010 [ 30]: feccbe28169abf9e +Block 0010 [ 31]: f23b74ca80971ba3 +Block 0010 [ 32]: 5c8fdeb0ddef1927 +Block 0010 [ 33]: 259d3c1365429795 +Block 0010 [ 34]: 6bf4940821839897 +Block 0010 [ 35]: ebaa2c513a084143 +Block 0010 [ 36]: 69bcf4a9aca7694f +Block 0010 [ 37]: bfbdda770ce93f75 +Block 0010 [ 38]: 8d444baf0f379a72 +Block 0010 [ 39]: 7ae56503dd3a1bcb +Block 0010 [ 40]: 2b899d8e61c4940f +Block 0010 [ 41]: bd879011317e4fa4 +Block 0010 [ 42]: 27fbc73f925b5004 +Block 0010 [ 43]: 254a67007562e302 +Block 0010 [ 44]: f73bd24b48e0ef31 +Block 0010 [ 45]: 0ddd73fb51ede360 +Block 0010 [ 46]: 1022a4004d4afb08 +Block 0010 [ 47]: a9df352deae2801e +Block 0010 [ 48]: 06006b210dfe4dda +Block 0010 [ 49]: 5c8edeb2290aeb31 +Block 0010 [ 50]: bcd906b29d549f4f +Block 0010 [ 51]: 02a71e9974436135 +Block 0010 [ 52]: d55765d1ec13a881 +Block 0010 [ 53]: 564a87e2a5d3c32c +Block 0010 [ 54]: 78be17f315291f85 +Block 0010 [ 55]: 12c3fe39d3c08b81 +Block 0010 [ 56]: 0f2055677ab1abbd +Block 0010 [ 57]: 19b266cbb045ad88 +Block 0010 [ 58]: 3927c1ec77870400 +Block 0010 [ 59]: 92170da5db938208 +Block 0010 [ 60]: 645e079da5039e12 +Block 0010 [ 61]: f2173bb060d3dcdb +Block 0010 [ 62]: 2c50ac91eed833fb +Block 0010 [ 63]: 3a6c74dd1f99824a +Block 0010 [ 64]: e3b11ae8f06a4f4e +Block 0010 [ 65]: 2f3b265788c439b1 +Block 0010 [ 66]: 352355d6897b041e +Block 0010 [ 67]: da1fecab11ff2979 +Block 0010 [ 68]: 5edb674437a9b9b0 +Block 0010 [ 69]: 05752057c0bb1191 +Block 0010 [ 70]: 480910f6930fde33 +Block 0010 [ 71]: df4e2f47f791170e +Block 0010 [ 72]: b3f1dcf371a00e65 +Block 0010 [ 73]: 726c421348a10f7d +Block 0010 [ 74]: 41233522f097cb65 +Block 0010 [ 75]: 76af4be633a5ceb6 +Block 0010 [ 76]: 53b1493022908c55 +Block 0010 [ 77]: 438211be870d4a48 +Block 0010 [ 78]: 0bdb60cc8666ddc2 +Block 0010 [ 79]: 2dcfc92e4aff5d2d +Block 0010 [ 80]: 279ed9fc4f5c6aa9 +Block 0010 [ 81]: 26dc91dc7bd21318 +Block 0010 [ 82]: 023588e6b690addc +Block 0010 [ 83]: 16e0b899efea3059 +Block 0010 [ 84]: 444c13f234914022 +Block 0010 [ 85]: ed59783c05ac18b2 +Block 0010 [ 86]: bf921c1b5d40b7b7 +Block 0010 [ 87]: 13b6d88fdede6b59 +Block 0010 [ 88]: fdb2cdb9b0928760 +Block 0010 [ 89]: afe345c0aa8f90d1 +Block 0010 [ 90]: 056db68149846e3e +Block 0010 [ 91]: bae26f87d7e35c28 +Block 0010 [ 92]: f1884846cb258f29 +Block 0010 [ 93]: 8afcddda851c8896 +Block 0010 [ 94]: beba967b77f35c8d +Block 0010 [ 95]: 78f26d6f9670cd7f +Block 0010 [ 96]: 6439369632df21fd +Block 0010 [ 97]: 1e1cc5433abf0e2f +Block 0010 [ 98]: cbc9411fda3913ed +Block 0010 [ 99]: 2364eb785d28c211 +Block 0010 [100]: d391a1f40d206429 +Block 0010 [101]: 4db905b5e46aa4bc +Block 0010 [102]: 6023079f7ad4d5b0 +Block 0010 [103]: 8c784b971cfeab58 +Block 0010 [104]: d1522490e5dd6703 +Block 0010 [105]: 6796509ff2b72dd0 +Block 0010 [106]: e858ef632e8b3308 +Block 0010 [107]: d38f1c0d3643f057 +Block 0010 [108]: 8b8477a36603a379 +Block 0010 [109]: 0e8d6b8e97ee02fc +Block 0010 [110]: 4cf6d7daf0cd2036 +Block 0010 [111]: 13f6d2ff8b73a439 +Block 0010 [112]: e40b0130ebe6625c +Block 0010 [113]: b7128faf5839f977 +Block 0010 [114]: 7d6b4a598cfab926 +Block 0010 [115]: d111f97b32f40ac5 +Block 0010 [116]: c2c9cc6270932cd9 +Block 0010 [117]: 67c6151923ea573d +Block 0010 [118]: 9e30aba29249e704 +Block 0010 [119]: d409dd6ed1a5a5cf +Block 0010 [120]: 9be62c106675eba5 +Block 0010 [121]: d01fa6dfa39f78c2 +Block 0010 [122]: e040f5d7d9af83db +Block 0010 [123]: c2091487fc3e0f14 +Block 0010 [124]: ee226530a2f80bdd +Block 0010 [125]: 2109d0f9b7c7fcfd +Block 0010 [126]: 3d48628f535998f3 +Block 0010 [127]: a70033bcbcf46e83 +Block 0011 [ 0]: b66c2134a1f0cd79 +Block 0011 [ 1]: 202885bd2ca49a11 +Block 0011 [ 2]: 2445e4ee7bfecd31 +Block 0011 [ 3]: 5cc3f7f2be3df555 +Block 0011 [ 4]: 514daa6533b7b0c6 +Block 0011 [ 5]: b34debea62c9c8cb +Block 0011 [ 6]: 571514fc3e6fde7c +Block 0011 [ 7]: fca236241d126fe1 +Block 0011 [ 8]: f26bf4187119f8d1 +Block 0011 [ 9]: 0d8ed9d08606e3b6 +Block 0011 [ 10]: a899d6fcf0c58909 +Block 0011 [ 11]: ac5e087dd562c2a1 +Block 0011 [ 12]: 9df83e30ecc1dded +Block 0011 [ 13]: d2567b9e5da4b16e +Block 0011 [ 14]: c735486fb3a67b04 +Block 0011 [ 15]: 35c89d639f469f20 +Block 0011 [ 16]: 9abc02750af5f859 +Block 0011 [ 17]: 82576ed164b7e5dd +Block 0011 [ 18]: b2dc3d5197bc726f +Block 0011 [ 19]: 8a665fd2f6ed15f9 +Block 0011 [ 20]: ea0247aa64bf75b8 +Block 0011 [ 21]: 02c8eeecb3cbabbc +Block 0011 [ 22]: 8de76739bf0b6a2b +Block 0011 [ 23]: 129b74f249187f3e +Block 0011 [ 24]: d89529b9d70d730f +Block 0011 [ 25]: 1c60c20a05d2292d +Block 0011 [ 26]: 5bb763432466d75d +Block 0011 [ 27]: acfea8c8aa0f6859 +Block 0011 [ 28]: e64be8815b20811c +Block 0011 [ 29]: 0b755066138281a5 +Block 0011 [ 30]: 6fbd7306f2136c31 +Block 0011 [ 31]: 1c73a2fdee607efb +Block 0011 [ 32]: d658c0320021835e +Block 0011 [ 33]: 8e6e5c6e2867d5e2 +Block 0011 [ 34]: feab06d1861517a4 +Block 0011 [ 35]: 2f948ed83df46ee2 +Block 0011 [ 36]: af8bcbb827657fd5 +Block 0011 [ 37]: 82e89a681a4eb1e3 +Block 0011 [ 38]: 8544c46336fce186 +Block 0011 [ 39]: 604325005561f515 +Block 0011 [ 40]: cb65d782aa201563 +Block 0011 [ 41]: db31e8f4ba31346b +Block 0011 [ 42]: a882920f87d38613 +Block 0011 [ 43]: 31d7b9eb7e37efcb +Block 0011 [ 44]: 69c119cf8b14de0b +Block 0011 [ 45]: 9e6da3ff2e4fa029 +Block 0011 [ 46]: 009f44d1f5196a70 +Block 0011 [ 47]: 7399a403bbc3528c +Block 0011 [ 48]: c6c3f4e4a86c5e9d +Block 0011 [ 49]: ebdefa9151e4b6c4 +Block 0011 [ 50]: 01f9381e2eec2d7f +Block 0011 [ 51]: 0a4f62720056d84b +Block 0011 [ 52]: f1b5d3943f6a6a36 +Block 0011 [ 53]: cd1cd5c0e4eb1968 +Block 0011 [ 54]: 64edcc8e3d9f041e +Block 0011 [ 55]: 1461c578c39411e7 +Block 0011 [ 56]: 980fa6747c3617ed +Block 0011 [ 57]: 912b11adeeaf3f89 +Block 0011 [ 58]: 44bedf9a5a0b49a9 +Block 0011 [ 59]: 73e8f9a17326ceb4 +Block 0011 [ 60]: 3da6232cd6f4e3d1 +Block 0011 [ 61]: f6bd9062c0a9a0f7 +Block 0011 [ 62]: 742b4fcb7a91ab94 +Block 0011 [ 63]: ad9a328d007c5f99 +Block 0011 [ 64]: 84a388ca8674bc11 +Block 0011 [ 65]: e3f44e84b345d055 +Block 0011 [ 66]: 844c544bb0b9eb92 +Block 0011 [ 67]: e8dfc0e52a0761ae +Block 0011 [ 68]: 26731ccc5a836fd2 +Block 0011 [ 69]: 1e0b377e3315a662 +Block 0011 [ 70]: 391388067845b573 +Block 0011 [ 71]: 3dbc149f246cc13c +Block 0011 [ 72]: a25e2f5cd2ed7edb +Block 0011 [ 73]: df0b0b57a05a4d4e +Block 0011 [ 74]: 27132d8a640ba7b5 +Block 0011 [ 75]: e69181cea76e2cae +Block 0011 [ 76]: 4daaa663f4404681 +Block 0011 [ 77]: 49a8afc952ddcbd2 +Block 0011 [ 78]: 693c5c586cea9fce +Block 0011 [ 79]: f3dc02748c485cb7 +Block 0011 [ 80]: ffe3bc71b550dcd1 +Block 0011 [ 81]: c8f9d3cebc8de1e8 +Block 0011 [ 82]: ad1c3edf36a89697 +Block 0011 [ 83]: 5e89cc9aae4230a6 +Block 0011 [ 84]: eac0ae1626e15120 +Block 0011 [ 85]: 1690d63d60da6ecf +Block 0011 [ 86]: cd6a8d2091ad354b +Block 0011 [ 87]: 89d80dacaca9a6c5 +Block 0011 [ 88]: 218a6801d99baec8 +Block 0011 [ 89]: 9bba7e969afd1280 +Block 0011 [ 90]: 95554c042732942d +Block 0011 [ 91]: f1280331f91dcf91 +Block 0011 [ 92]: 15a800cf6915edcb +Block 0011 [ 93]: f9d41a977057e236 +Block 0011 [ 94]: 92988fb9b5045e1a +Block 0011 [ 95]: 2e76d5e4179de340 +Block 0011 [ 96]: 245aff980f5489f2 +Block 0011 [ 97]: 93a5ca99c887937f +Block 0011 [ 98]: 5abda23787990c23 +Block 0011 [ 99]: 2e30f40479f01957 +Block 0011 [100]: 5d9f127f80dcccb2 +Block 0011 [101]: 732679dbaed99681 +Block 0011 [102]: 41a91b8ffb33f013 +Block 0011 [103]: ca61b392f2d825ad +Block 0011 [104]: 2c2c33ec377b6095 +Block 0011 [105]: a1a188e86aa1e8a4 +Block 0011 [106]: 332b4a653b70442c +Block 0011 [107]: b93cb4970048caf3 +Block 0011 [108]: 2aa4e90db458be01 +Block 0011 [109]: 22f51f6dba083e78 +Block 0011 [110]: 0f65a4027cce4035 +Block 0011 [111]: e462aa5a3a7758af +Block 0011 [112]: b4b0c947df9f5840 +Block 0011 [113]: 1fcaa15e4ad8a448 +Block 0011 [114]: 6427ad1753ef4834 +Block 0011 [115]: 8880f19df4f32d7e +Block 0011 [116]: fe7b7c61fb009823 +Block 0011 [117]: be45b0a066d3b99d +Block 0011 [118]: 13edbd36864553ea +Block 0011 [119]: 56bd3ff3f46a4ad3 +Block 0011 [120]: a94c52ae99da87f2 +Block 0011 [121]: 9e56cea44848fdd4 +Block 0011 [122]: c9a9fa5471582833 +Block 0011 [123]: 5d6e10df4b4a15eb +Block 0011 [124]: 0a33444ac38b9f7d +Block 0011 [125]: 1f19a38690e0c6d0 +Block 0011 [126]: b5604cbe201ba644 +Block 0011 [127]: 044e9c26b9b8b616 +Block 0012 [ 0]: 1521a6fe2a3cbece +Block 0012 [ 1]: a7d81f737de3454e +Block 0012 [ 2]: 1fe9b28e4f948672 +Block 0012 [ 3]: 2a5fa3d7342b35bf +Block 0012 [ 4]: b115d311ab4cd25a +Block 0012 [ 5]: 2d38601cecc89013 +Block 0012 [ 6]: ff433fe8560a7164 +Block 0012 [ 7]: bf7185448ec49c76 +Block 0012 [ 8]: b6ff855b1bd63b0d +Block 0012 [ 9]: b4259325faad52c0 +Block 0012 [ 10]: 1001b5b3752d9b8b +Block 0012 [ 11]: a035e989d9fa78bd +Block 0012 [ 12]: da47171b2d168957 +Block 0012 [ 13]: 283081670260f019 +Block 0012 [ 14]: e0e05c5685c4d96a +Block 0012 [ 15]: 103e296afff49848 +Block 0012 [ 16]: 57dc23c3022b4da2 +Block 0012 [ 17]: 7d7cd99264c05881 +Block 0012 [ 18]: 16c82e8ffb88b24a +Block 0012 [ 19]: 02199a086680f0f7 +Block 0012 [ 20]: 2edd2f82ad7873ef +Block 0012 [ 21]: 14a147da23d0ae31 +Block 0012 [ 22]: 94e3899e23500ffe +Block 0012 [ 23]: 7960ac7264b703fb +Block 0012 [ 24]: c477d8358c227328 +Block 0012 [ 25]: 92d4856648af1644 +Block 0012 [ 26]: eb4d563cb3c888dd +Block 0012 [ 27]: 21828c52d31318ff +Block 0012 [ 28]: 6f0b647c003e5e61 +Block 0012 [ 29]: 93df61e1c563b8d9 +Block 0012 [ 30]: 3e3a6e9a1d36221b +Block 0012 [ 31]: d3bc1703065b4948 +Block 0012 [ 32]: 26e095f3098e2046 +Block 0012 [ 33]: 40ce4bb1796cc0ad +Block 0012 [ 34]: 399bf9686c5f4172 +Block 0012 [ 35]: efab37a5b75401dd +Block 0012 [ 36]: 41f176e4dace1866 +Block 0012 [ 37]: 30398f14205df259 +Block 0012 [ 38]: ea28ab83bcc97663 +Block 0012 [ 39]: 46419c78901bfae2 +Block 0012 [ 40]: 7bb5dc11f1fdf71e +Block 0012 [ 41]: e7a8d22a68619e2f +Block 0012 [ 42]: 3b8598c5e66799c0 +Block 0012 [ 43]: 35ef25baa6522dc4 +Block 0012 [ 44]: 0a8cd7304fbad8fd +Block 0012 [ 45]: b6b77e8381e2b1e3 +Block 0012 [ 46]: 94e8a9260e0318eb +Block 0012 [ 47]: 187fc38067c321bd +Block 0012 [ 48]: 792444f2f5192e33 +Block 0012 [ 49]: 1ae621d7081363c4 +Block 0012 [ 50]: adf8a1e712b76bec +Block 0012 [ 51]: a6c358e41cd69e3a +Block 0012 [ 52]: f9a268fb81ff1a3e +Block 0012 [ 53]: 19e6ad4f49dbe780 +Block 0012 [ 54]: 2870c4d3d70e8415 +Block 0012 [ 55]: d3766936b9513f74 +Block 0012 [ 56]: dceffb34b052d439 +Block 0012 [ 57]: eb3174432a9d0be7 +Block 0012 [ 58]: ccfa40d103153fe6 +Block 0012 [ 59]: 534ebb23424bcb89 +Block 0012 [ 60]: 244091afd20eb5b6 +Block 0012 [ 61]: 9a423392b7f3ed66 +Block 0012 [ 62]: 27738dffe52b48e0 +Block 0012 [ 63]: 44738bbe4dbaaea2 +Block 0012 [ 64]: 126229c01cc19fc6 +Block 0012 [ 65]: b7279c2c19910800 +Block 0012 [ 66]: 14726366b2401939 +Block 0012 [ 67]: 31970a53eb02e7f0 +Block 0012 [ 68]: 78fffed7e5970889 +Block 0012 [ 69]: 6983240bd4fd24bd +Block 0012 [ 70]: 8e6224c568706241 +Block 0012 [ 71]: 7cb66edcc2ba1663 +Block 0012 [ 72]: c2107dc218f05722 +Block 0012 [ 73]: 80afaf9eb0637341 +Block 0012 [ 74]: 409e5654971093e2 +Block 0012 [ 75]: 6f8b0f36a1ed94f9 +Block 0012 [ 76]: 27f581045be8a309 +Block 0012 [ 77]: 67710b4de2a9d74c +Block 0012 [ 78]: ee34520edc8e6c17 +Block 0012 [ 79]: 59d4c363e50fa509 +Block 0012 [ 80]: 8dcc5ab12801cdcb +Block 0012 [ 81]: d8ce48c767ff9f63 +Block 0012 [ 82]: 0ece3e843169e6dd +Block 0012 [ 83]: ca4ac3965825308d +Block 0012 [ 84]: a241fef0307cd5e5 +Block 0012 [ 85]: 35b7fbe5e89252a9 +Block 0012 [ 86]: d1b1a3c397c5a3f7 +Block 0012 [ 87]: c128e35949dc65ee +Block 0012 [ 88]: 3d3527f69e1b4629 +Block 0012 [ 89]: 8f9ea6f3b86a8849 +Block 0012 [ 90]: e91d3a831d1ac20a +Block 0012 [ 91]: 190b39a143752fed +Block 0012 [ 92]: c2a9162e88a085f1 +Block 0012 [ 93]: 83bda5257560eef9 +Block 0012 [ 94]: f424f969d8c05562 +Block 0012 [ 95]: cc28cd4499193be4 +Block 0012 [ 96]: 1bf847eedd7cee4e +Block 0012 [ 97]: d9f5044a5b463833 +Block 0012 [ 98]: 84ac651e312f0432 +Block 0012 [ 99]: 68f5261410bfa67d +Block 0012 [100]: 1a7754c5d4962c35 +Block 0012 [101]: 9bb7c786d4b17660 +Block 0012 [102]: 80b10d80bbc35af6 +Block 0012 [103]: dbc449b22af06364 +Block 0012 [104]: a208fe1fdc561708 +Block 0012 [105]: 58d743f0df17acd1 +Block 0012 [106]: 2ad9b89d389b2577 +Block 0012 [107]: fb0c666799206c63 +Block 0012 [108]: de656171ca8e75c8 +Block 0012 [109]: 0ffb8f41cc0596c7 +Block 0012 [110]: 238eaa9b108e8d10 +Block 0012 [111]: 39973bb952ddbcc0 +Block 0012 [112]: d7f4fbabdc63e190 +Block 0012 [113]: b3d832966453066b +Block 0012 [114]: 339a0be96c03ef8a +Block 0012 [115]: e79366e9be1d4fe2 +Block 0012 [116]: 9b4e4d6f05538c35 +Block 0012 [117]: cef433fc39a11471 +Block 0012 [118]: 595dd5d830434c4f +Block 0012 [119]: b7454a6e8b03848a +Block 0012 [120]: d63ea04a761806c0 +Block 0012 [121]: 173d2a2a5fc3178c +Block 0012 [122]: eaec6276b5a137a7 +Block 0012 [123]: 095b05a6303723b8 +Block 0012 [124]: 94c49de0d9c605e5 +Block 0012 [125]: 2873ee8bf2d4e699 +Block 0012 [126]: 1cde14681dd09f70 +Block 0012 [127]: 68a708e89034c7b3 +Block 0013 [ 0]: 8d167cc15d9b4e8a +Block 0013 [ 1]: 861a89ec67dd708a +Block 0013 [ 2]: b536a27e36288413 +Block 0013 [ 3]: 7b0ada901678953d +Block 0013 [ 4]: 07d12c9abc737f67 +Block 0013 [ 5]: c89adf2ede21b1ad +Block 0013 [ 6]: 594950d5b9d5346b +Block 0013 [ 7]: 2ed48f395600081f +Block 0013 [ 8]: 4f24214c834fe8b7 +Block 0013 [ 9]: 54aa160c0cd977bf +Block 0013 [ 10]: 07370ae67985e0df +Block 0013 [ 11]: a7771205e6facde8 +Block 0013 [ 12]: 7a439605aae13efd +Block 0013 [ 13]: 74c0a731668944a9 +Block 0013 [ 14]: f45cc05ff3acc878 +Block 0013 [ 15]: d238ddd1f8d956d1 +Block 0013 [ 16]: 9d9465e667febb00 +Block 0013 [ 17]: e326ebeea2c77cb1 +Block 0013 [ 18]: 8e00c650856da819 +Block 0013 [ 19]: 584380ef75efc1f1 +Block 0013 [ 20]: 81e10bb7e2a69853 +Block 0013 [ 21]: 41ecfa387c696224 +Block 0013 [ 22]: 68372408a7693477 +Block 0013 [ 23]: 62737f80e951a66e +Block 0013 [ 24]: 44a11e5e2535ea2e +Block 0013 [ 25]: 937b04e3a723122e +Block 0013 [ 26]: 85bcf09f61703332 +Block 0013 [ 27]: b27523bbcc80a5ae +Block 0013 [ 28]: bccde6994ef38d25 +Block 0013 [ 29]: 6e105429a2a107e3 +Block 0013 [ 30]: d84e9c1b2d47135e +Block 0013 [ 31]: 528cfb9a9ff1f423 +Block 0013 [ 32]: c931f1187fefc477 +Block 0013 [ 33]: 11322efa705a8857 +Block 0013 [ 34]: 2ff596d5ff43a189 +Block 0013 [ 35]: 951b4868c0d65755 +Block 0013 [ 36]: 6fa72219d7003b25 +Block 0013 [ 37]: eaaad06e85076fec +Block 0013 [ 38]: 7608dad58553f3a2 +Block 0013 [ 39]: 200e76b7f948c812 +Block 0013 [ 40]: 3d15f2c7d3fce6a2 +Block 0013 [ 41]: d184805422d69913 +Block 0013 [ 42]: 44d6c50290ef4592 +Block 0013 [ 43]: bc31bf15ea1dc2f8 +Block 0013 [ 44]: 29f08b8fca962939 +Block 0013 [ 45]: c62430d5104c6482 +Block 0013 [ 46]: 3c57292c4ce39649 +Block 0013 [ 47]: ffc10dcad32cc41b +Block 0013 [ 48]: dd41f5f46122a206 +Block 0013 [ 49]: 7abc60696111bfbe +Block 0013 [ 50]: aa9886bc1a563464 +Block 0013 [ 51]: 9c057de649695c35 +Block 0013 [ 52]: f712052195155a09 +Block 0013 [ 53]: 91980809bdb97825 +Block 0013 [ 54]: 07bcdeab983ab6ca +Block 0013 [ 55]: 277119a97dbb4a80 +Block 0013 [ 56]: 8ca65b723aeafec2 +Block 0013 [ 57]: ff49c19c4b00e57d +Block 0013 [ 58]: 7f7bc5d343003b9e +Block 0013 [ 59]: 62348f62c00612c6 +Block 0013 [ 60]: 2d762b01998ac125 +Block 0013 [ 61]: 0c240959e10da0cc +Block 0013 [ 62]: 9aba78f773642caf +Block 0013 [ 63]: 129a78baa32e409c +Block 0013 [ 64]: 1d1b48d6c8ba21f5 +Block 0013 [ 65]: f8b15521108a73a2 +Block 0013 [ 66]: 60be83175fcd4908 +Block 0013 [ 67]: bc3ce648b5c35454 +Block 0013 [ 68]: 215dc943e9f120ab +Block 0013 [ 69]: 5f2868bb13088cf5 +Block 0013 [ 70]: 3a73e7d41c02c847 +Block 0013 [ 71]: bcbb0d37b7c38980 +Block 0013 [ 72]: 5b5a5f184f699a50 +Block 0013 [ 73]: 5adc34c4275ed7c9 +Block 0013 [ 74]: a871c5cdd8a1ab2c +Block 0013 [ 75]: 88561e9f2c362be0 +Block 0013 [ 76]: 10244ff1b8d1d56a +Block 0013 [ 77]: a49c34c978e7d103 +Block 0013 [ 78]: 46e8015d871645c2 +Block 0013 [ 79]: f9a15b708c4a5405 +Block 0013 [ 80]: ceaf74f1fd233a55 +Block 0013 [ 81]: f43065e6cd47d568 +Block 0013 [ 82]: afa4bf36adb7eaf9 +Block 0013 [ 83]: 578a68b9edfd4dfd +Block 0013 [ 84]: 7386e803ae1db4e9 +Block 0013 [ 85]: 894c8dfb4cd9e99e +Block 0013 [ 86]: 577d2667cb82bbec +Block 0013 [ 87]: 2c4e1db5a2d177b5 +Block 0013 [ 88]: 0e88639a76844ba1 +Block 0013 [ 89]: 7805203eeff9051d +Block 0013 [ 90]: c5413f00f0b91101 +Block 0013 [ 91]: 5e46c72bbabf4d30 +Block 0013 [ 92]: 166521536d596e63 +Block 0013 [ 93]: ae4ebc3a25bc2ee3 +Block 0013 [ 94]: b6a6ad1a93c69390 +Block 0013 [ 95]: 50e799ffe04d392c +Block 0013 [ 96]: 3799e5290de54a4d +Block 0013 [ 97]: a8a1350877af05cc +Block 0013 [ 98]: 082a6bbe71cbd228 +Block 0013 [ 99]: a23f327a5924959d +Block 0013 [100]: 63305cc5f84f7ad7 +Block 0013 [101]: 60e488a0a896838e +Block 0013 [102]: c9230c3dd009e753 +Block 0013 [103]: 8f5d22bc1cf3bd22 +Block 0013 [104]: 8a3d52eb933b24c2 +Block 0013 [105]: 2ad1125ab1c2d795 +Block 0013 [106]: 922d4810438a44d5 +Block 0013 [107]: c40e43485037b3ad +Block 0013 [108]: 4e1faefdcfd8b6af +Block 0013 [109]: 94cce4010a943fa6 +Block 0013 [110]: 8d1cba48ce5b96bc +Block 0013 [111]: 15d6d33ad7328fd1 +Block 0013 [112]: d9d43c592bb4ea95 +Block 0013 [113]: 318cdfb666ab0cc8 +Block 0013 [114]: 29a76f09f474b27f +Block 0013 [115]: 20c2f46af8f3ab77 +Block 0013 [116]: 11e70eb455d06061 +Block 0013 [117]: b8228af2094f3ef0 +Block 0013 [118]: 6a5668e37110e003 +Block 0013 [119]: 7439532142a76261 +Block 0013 [120]: fde1e2387a515dae +Block 0013 [121]: f4a706d8c81fd2b7 +Block 0013 [122]: 31aaeab172a5b26a +Block 0013 [123]: def4e2002ba919df +Block 0013 [124]: 733a09a01284bb71 +Block 0013 [125]: 185e24ee64af2b43 +Block 0013 [126]: 9bb76ee7896dfdd8 +Block 0013 [127]: 10931278d80e9141 +Block 0014 [ 0]: 74ff9d5c77dec9d4 +Block 0014 [ 1]: 5c43cf4044006ba8 +Block 0014 [ 2]: 0f82682a392e457f +Block 0014 [ 3]: 68a068cdb5d93548 +Block 0014 [ 4]: 2c346f466ae5e7d1 +Block 0014 [ 5]: c6cfc46081912068 +Block 0014 [ 6]: 5e1937c9d4be2fde +Block 0014 [ 7]: 06202be4e8e07d2d +Block 0014 [ 8]: b519876ca35a277c +Block 0014 [ 9]: e90a83fe7aa91f68 +Block 0014 [ 10]: 5a40cbcba1fd98b2 +Block 0014 [ 11]: af80019f52b0fa1f +Block 0014 [ 12]: 884eb3548131a3ce +Block 0014 [ 13]: 7ad391d105237118 +Block 0014 [ 14]: 39e6610113fcfad0 +Block 0014 [ 15]: 07de5d06c76eb406 +Block 0014 [ 16]: 8688b7645a136c23 +Block 0014 [ 17]: 6dcc57f776a9d635 +Block 0014 [ 18]: cb181be1ae3bd3c9 +Block 0014 [ 19]: 6dd5f461a2bb5689 +Block 0014 [ 20]: c72926f7695b359d +Block 0014 [ 21]: 44de6b300a058825 +Block 0014 [ 22]: 974882d513ef95f3 +Block 0014 [ 23]: d15ab03ef6cda7b6 +Block 0014 [ 24]: f229a5561dfced9d +Block 0014 [ 25]: 315dfd5d23f77ab0 +Block 0014 [ 26]: 0f4c630cf7a1eca6 +Block 0014 [ 27]: 9ac5d4b7330b0dc3 +Block 0014 [ 28]: 4f8f5b7351624574 +Block 0014 [ 29]: de862b07a2cc18ba +Block 0014 [ 30]: 14591145d7f607ad +Block 0014 [ 31]: 87fd81764a47690f +Block 0014 [ 32]: 5e10a6935358171d +Block 0014 [ 33]: d9c8e6cd97276274 +Block 0014 [ 34]: 82d006a140133f2b +Block 0014 [ 35]: 340644ad9e6e7b28 +Block 0014 [ 36]: 2263be163aa68eee +Block 0014 [ 37]: e09c4a3f4e5d5bdd +Block 0014 [ 38]: c3345b0ce22aa154 +Block 0014 [ 39]: c8b4ab7e3c472850 +Block 0014 [ 40]: 30ce87661e7b26d4 +Block 0014 [ 41]: 654a95b6605e75d7 +Block 0014 [ 42]: 65e72a3539dd0d69 +Block 0014 [ 43]: 7c5ec1d1e68f4ab8 +Block 0014 [ 44]: c9251e2fd5ced854 +Block 0014 [ 45]: 52a85c5f5eb40c8e +Block 0014 [ 46]: 93bb9274d2da8a35 +Block 0014 [ 47]: 649d8c4a78fc904c +Block 0014 [ 48]: 8d79747667f51c89 +Block 0014 [ 49]: 23c7788205023d76 +Block 0014 [ 50]: 10224bc903e4a2b2 +Block 0014 [ 51]: af5793eca095fb61 +Block 0014 [ 52]: bb659fa94d39b1fa +Block 0014 [ 53]: 94520e9b6eefb936 +Block 0014 [ 54]: b035b95b939dcf3a +Block 0014 [ 55]: bfdeaa96331cce54 +Block 0014 [ 56]: 659dae83a17a437e +Block 0014 [ 57]: 598cbd962aebb606 +Block 0014 [ 58]: 8e43f705504059a1 +Block 0014 [ 59]: 811d0b66f4bf5789 +Block 0014 [ 60]: 3ea3eb13fd65c42d +Block 0014 [ 61]: f3289de2785a60c4 +Block 0014 [ 62]: b296d786e3f06f5d +Block 0014 [ 63]: cfe3c32da650f0d5 +Block 0014 [ 64]: dd0ed6f96a0c0322 +Block 0014 [ 65]: 70cceb6f30048949 +Block 0014 [ 66]: fa8cfe4efbc75cbf +Block 0014 [ 67]: cb7c5b09addd875a +Block 0014 [ 68]: 6483aca29f985f7e +Block 0014 [ 69]: 80b161cba70da102 +Block 0014 [ 70]: 52d76763bfb5065f +Block 0014 [ 71]: 4713c4241809bd0f +Block 0014 [ 72]: 176223d6501bb138 +Block 0014 [ 73]: a0d90adc0a733942 +Block 0014 [ 74]: c444f1cbfe698930 +Block 0014 [ 75]: c362e053f5370d7b +Block 0014 [ 76]: 04795823c3e290f3 +Block 0014 [ 77]: 21fa15483eb82289 +Block 0014 [ 78]: bdee31d1be32c895 +Block 0014 [ 79]: aa20de91077e0361 +Block 0014 [ 80]: 1292f113842e3b2d +Block 0014 [ 81]: 3da9e8e8f35b6370 +Block 0014 [ 82]: 1587c4af6af71ce8 +Block 0014 [ 83]: 027ed030408cc841 +Block 0014 [ 84]: d45f3eb0f7b7f052 +Block 0014 [ 85]: 083e586b7012eb4c +Block 0014 [ 86]: 81759483e9052d0f +Block 0014 [ 87]: 23e2772882e5546c +Block 0014 [ 88]: 1d74a83735a0db58 +Block 0014 [ 89]: 5d935ea8473c6398 +Block 0014 [ 90]: 0b0fd563c775880f +Block 0014 [ 91]: 1218a8d3ba6ae9a4 +Block 0014 [ 92]: d5c911bd9a8640cc +Block 0014 [ 93]: 376494e621d203cd +Block 0014 [ 94]: 8c2c4494b9df3951 +Block 0014 [ 95]: 130978d97331600b +Block 0014 [ 96]: 765194ab231b7bed +Block 0014 [ 97]: b53f722b638245e1 +Block 0014 [ 98]: c6856ff721c9c1ed +Block 0014 [ 99]: 523f867258c71f59 +Block 0014 [100]: d642325da3bd09cb +Block 0014 [101]: 8b366095a9e51ed0 +Block 0014 [102]: 6ece98e19c16ee25 +Block 0014 [103]: 957e4fbfc5b2a2d8 +Block 0014 [104]: a41385404b565c53 +Block 0014 [105]: 26fc269b14a47524 +Block 0014 [106]: 3a4683b556b2f6bd +Block 0014 [107]: 6ccea20da5f82531 +Block 0014 [108]: c3ffc17acf0393c6 +Block 0014 [109]: bf08ac75b90d98e0 +Block 0014 [110]: 5a122193aed55940 +Block 0014 [111]: 084d049330ecadec +Block 0014 [112]: 1706e0a7dcccabb7 +Block 0014 [113]: 000991105c6c8f3d +Block 0014 [114]: c1c69b4ac877565c +Block 0014 [115]: 595a2b07288ab253 +Block 0014 [116]: a8aa03a94753404c +Block 0014 [117]: f809a07b03509229 +Block 0014 [118]: cbc91fdf8b43211e +Block 0014 [119]: 98e2b8994604e2ec +Block 0014 [120]: c4b3d55bc831b4cd +Block 0014 [121]: 3e9c014657b846ae +Block 0014 [122]: e7274ed01235e01e +Block 0014 [123]: c841b3db0f707035 +Block 0014 [124]: fb05ca324bc6dcd2 +Block 0014 [125]: 43188f4c2a383a69 +Block 0014 [126]: 745be1744b87f4d0 +Block 0014 [127]: be5103b3da91537f +Block 0015 [ 0]: 0b1e73a777ee2ef4 +Block 0015 [ 1]: e27b761a060bee9d +Block 0015 [ 2]: d537468cff417c96 +Block 0015 [ 3]: 43ff10be2ed97ac1 +Block 0015 [ 4]: f17596d1bb685e01 +Block 0015 [ 5]: 577cb81c02ade2a1 +Block 0015 [ 6]: 8932ec48abcdd2c2 +Block 0015 [ 7]: cfd3b31d0422a34f +Block 0015 [ 8]: 6bd786099bc0232e +Block 0015 [ 9]: 637418cbc60b7be7 +Block 0015 [ 10]: d4f327b243b4a6b7 +Block 0015 [ 11]: f6d161e009a4fa7e +Block 0015 [ 12]: 00ed2aeb4d221e4b +Block 0015 [ 13]: 677611509c496f06 +Block 0015 [ 14]: a0ce344aeaa2755b +Block 0015 [ 15]: d5afc0b55da2dc8c +Block 0015 [ 16]: cacf20ccd42a49c6 +Block 0015 [ 17]: 44dcbf6eb1d6fa74 +Block 0015 [ 18]: acf25a1ccd4e91d1 +Block 0015 [ 19]: acb38fadd1728e39 +Block 0015 [ 20]: c8a3a11dfb0dd493 +Block 0015 [ 21]: a68cbe6742cd613c +Block 0015 [ 22]: 477497ecfaf2de1a +Block 0015 [ 23]: 836f2083f0746bd9 +Block 0015 [ 24]: 03ebbf00cbfa617e +Block 0015 [ 25]: 6d9e84e99c076053 +Block 0015 [ 26]: 4296c823a4da4a26 +Block 0015 [ 27]: e2dcd3f04aa2616a +Block 0015 [ 28]: 01dc0b71c8fb76be +Block 0015 [ 29]: 60ca19bf120a2f95 +Block 0015 [ 30]: bfeb35484f61d378 +Block 0015 [ 31]: 6bf92228db9a33e8 +Block 0015 [ 32]: 396144e9a551c26a +Block 0015 [ 33]: 2765913f3336e0b2 +Block 0015 [ 34]: 85b9cefe4821e0a2 +Block 0015 [ 35]: 35687f89b0820450 +Block 0015 [ 36]: c5ecb87365bdfcb2 +Block 0015 [ 37]: 6666f725b2ea9dd8 +Block 0015 [ 38]: a2cb973d7c42b0a5 +Block 0015 [ 39]: ebb5253e5c84a52e +Block 0015 [ 40]: 71eff3a4c6e669e6 +Block 0015 [ 41]: 6813a4ef356a43f7 +Block 0015 [ 42]: 7676968dbdd07d6e +Block 0015 [ 43]: d1e5e68bd9d4893f +Block 0015 [ 44]: faf8c89f950a8265 +Block 0015 [ 45]: b97a51d9f801af68 +Block 0015 [ 46]: 9033cfbabc39abe6 +Block 0015 [ 47]: 2b42295a82afd95c +Block 0015 [ 48]: 8756894b48b6a194 +Block 0015 [ 49]: 0b246f0a868a7be3 +Block 0015 [ 50]: 23198a6685fdeac2 +Block 0015 [ 51]: 45a73cc01fdfacdd +Block 0015 [ 52]: 0d7a0e2ebc480c33 +Block 0015 [ 53]: cf4b325e8bab511e +Block 0015 [ 54]: 3eff637988cf0774 +Block 0015 [ 55]: c76b19610482d56c +Block 0015 [ 56]: 8e73b0efde325f6e +Block 0015 [ 57]: 30baa18d52a190f9 +Block 0015 [ 58]: 04bc7cbec3e1296d +Block 0015 [ 59]: 27f1935bf5070068 +Block 0015 [ 60]: d6b815634d4ae1e3 +Block 0015 [ 61]: 83894d0b328a58d6 +Block 0015 [ 62]: a3de5c70b944f94a +Block 0015 [ 63]: 094ee1ace2b659ec +Block 0015 [ 64]: c10fc00408bf8c9c +Block 0015 [ 65]: 9d8ffe4ba77a69d1 +Block 0015 [ 66]: 32a011b4bc285e9e +Block 0015 [ 67]: 8a79607034c38a6b +Block 0015 [ 68]: bd5608f27c6b7742 +Block 0015 [ 69]: 40ea6a827e3722f2 +Block 0015 [ 70]: f5e3a539cd3d7503 +Block 0015 [ 71]: f5b21cff542fd4ce +Block 0015 [ 72]: fe85cad6c8b8ea59 +Block 0015 [ 73]: f2cd28dcea30e15b +Block 0015 [ 74]: f2316ae6f6cef0cf +Block 0015 [ 75]: 4d87f7d71c8dc4d6 +Block 0015 [ 76]: 7dd9488c06f66047 +Block 0015 [ 77]: 16dedd6ee0192839 +Block 0015 [ 78]: 9914849e597348d4 +Block 0015 [ 79]: d43eb9ac42da1e48 +Block 0015 [ 80]: c39efef1ab2785f9 +Block 0015 [ 81]: ad73868ea70052e5 +Block 0015 [ 82]: f3d8083fd9d07e1a +Block 0015 [ 83]: f87a8d342547820b +Block 0015 [ 84]: cb403cea0a57424a +Block 0015 [ 85]: 060dcd9833e6ec1c +Block 0015 [ 86]: b3d75fd35640b405 +Block 0015 [ 87]: 135c300438f94989 +Block 0015 [ 88]: 48d1266ae1d00a17 +Block 0015 [ 89]: c06da4eb674abfbd +Block 0015 [ 90]: ce4421fd18d801e4 +Block 0015 [ 91]: c7a9b0668bdf8c15 +Block 0015 [ 92]: f46bd3cae3612fc0 +Block 0015 [ 93]: a3cbe2c4df6f9392 +Block 0015 [ 94]: 515c3b7d9af607a7 +Block 0015 [ 95]: b01dd0fa390288bb +Block 0015 [ 96]: 9393af62fec2df24 +Block 0015 [ 97]: 422015611463c8ce +Block 0015 [ 98]: af3a8db165bcce2b +Block 0015 [ 99]: 81d31594a3ba8043 +Block 0015 [100]: 3858b6ff51b69612 +Block 0015 [101]: 4647cbf86795a5e0 +Block 0015 [102]: 61c0214fd46752b3 +Block 0015 [103]: dfe53ac91b2bc371 +Block 0015 [104]: 4f82c67ab717dbdd +Block 0015 [105]: c9e3bbe1facd12f3 +Block 0015 [106]: cd2ad18317a7cfd1 +Block 0015 [107]: 6e259d50f4c9e146 +Block 0015 [108]: 74c1f8e97c3c3414 +Block 0015 [109]: 7f61b05064b73433 +Block 0015 [110]: 896499834b24fa2c +Block 0015 [111]: fc607cee2c0c4911 +Block 0015 [112]: dd9e1d6f7c0dca82 +Block 0015 [113]: cfd61ea3a923cb9f +Block 0015 [114]: 27bdfb046533bbf7 +Block 0015 [115]: 68b8b91fc9d5e2bc +Block 0015 [116]: c41f9c3252585ef7 +Block 0015 [117]: 121fc0b83aca80d3 +Block 0015 [118]: 28c99e1fe846c40e +Block 0015 [119]: f5cb391772578157 +Block 0015 [120]: fc057e59876dadc8 +Block 0015 [121]: df615ef69f9d5003 +Block 0015 [122]: c318561811c5b2f8 +Block 0015 [123]: eaf943ad5437bf9c +Block 0015 [124]: 602cfc1d54fb6b87 +Block 0015 [125]: e83566f7d16e8b6e +Block 0015 [126]: c608bee43eda7ccc +Block 0015 [127]: 811a4bfb6e79bb5f +Block 0016 [ 0]: 5aa613f43289c678 +Block 0016 [ 1]: eb1cf650e24f64e4 +Block 0016 [ 2]: d7de8f818eea22a3 +Block 0016 [ 3]: 929f209f685d0a56 +Block 0016 [ 4]: 1d1190318e29cc38 +Block 0016 [ 5]: 643340be7d550134 +Block 0016 [ 6]: d60a19f28325f117 +Block 0016 [ 7]: c28ddf5ac5d01fbc +Block 0016 [ 8]: 4eaa66adb9c0f9f9 +Block 0016 [ 9]: c368ae8857416af0 +Block 0016 [ 10]: 26334597db375712 +Block 0016 [ 11]: 988de515dbe320d5 +Block 0016 [ 12]: 0cd7dd0ccbdb2e97 +Block 0016 [ 13]: 43cac731180562be +Block 0016 [ 14]: eebae2e8c065ccd1 +Block 0016 [ 15]: c4c5b81c55bac77c +Block 0016 [ 16]: 21a360ff74a67369 +Block 0016 [ 17]: c7c681a57877b6fa +Block 0016 [ 18]: 05e6a04af6e587c3 +Block 0016 [ 19]: b8d073cb845684bd +Block 0016 [ 20]: 49f10e47eb5ff574 +Block 0016 [ 21]: 5b4fa94638350588 +Block 0016 [ 22]: 2730010cdfcf27a3 +Block 0016 [ 23]: 7ecae19dffd91500 +Block 0016 [ 24]: 41131fc8f0614eac +Block 0016 [ 25]: 372476265e12ad62 +Block 0016 [ 26]: e3f6d0ffd33e4270 +Block 0016 [ 27]: 2a9748775d87bf7a +Block 0016 [ 28]: d9cb255da617b822 +Block 0016 [ 29]: 59aaeb79c983f697 +Block 0016 [ 30]: 4177b94dacf2d10f +Block 0016 [ 31]: 333b04a58feb4e3d +Block 0016 [ 32]: 14c8ca8825310e99 +Block 0016 [ 33]: c3a4ce660e9c5798 +Block 0016 [ 34]: 001881b7d15216ef +Block 0016 [ 35]: d6de939535180d21 +Block 0016 [ 36]: d265e410d5f506dd +Block 0016 [ 37]: d7e8f17f836ca622 +Block 0016 [ 38]: da4fe4e81cc609cd +Block 0016 [ 39]: 8c95ff4268b77b20 +Block 0016 [ 40]: b564b4648cd5acff +Block 0016 [ 41]: 47809e79e0e48077 +Block 0016 [ 42]: 9d1490dd04b1cc81 +Block 0016 [ 43]: 8efffc9fae826537 +Block 0016 [ 44]: 34aa25d1eb75e78f +Block 0016 [ 45]: 5777189b9ed6025d +Block 0016 [ 46]: 90fd722d4411962f +Block 0016 [ 47]: bc2372752ce8cf84 +Block 0016 [ 48]: 1381285845dd8d69 +Block 0016 [ 49]: 7ce920c4389441d2 +Block 0016 [ 50]: a93d565658f24c2e +Block 0016 [ 51]: 008ccb8a47b9442e +Block 0016 [ 52]: 10f37f8f6e6bc101 +Block 0016 [ 53]: bb972856b12de631 +Block 0016 [ 54]: 4209e28b0e6baf1f +Block 0016 [ 55]: 055ed32244ea5546 +Block 0016 [ 56]: 8c4ff16eb6e336f4 +Block 0016 [ 57]: e6c6bbbe43af4439 +Block 0016 [ 58]: ba0241f2ff155ac7 +Block 0016 [ 59]: c7610b8ede3442e8 +Block 0016 [ 60]: 65ecf5ecc7d7b66d +Block 0016 [ 61]: 1acb0b6fdf2ccc61 +Block 0016 [ 62]: 7bcd0d4f4abad1b5 +Block 0016 [ 63]: 628f518a0e821ecd +Block 0016 [ 64]: e68760a4e903c2b6 +Block 0016 [ 65]: 6afa82a957226547 +Block 0016 [ 66]: dde32db99e588dfd +Block 0016 [ 67]: 7a8fefe578b65cdf +Block 0016 [ 68]: 9b389330d717ed64 +Block 0016 [ 69]: 43bdf11a17170565 +Block 0016 [ 70]: 8202c7f51d57555a +Block 0016 [ 71]: 6774f52f4386d0f9 +Block 0016 [ 72]: 061c87e870cce6cd +Block 0016 [ 73]: 4fb3cbc0e190081c +Block 0016 [ 74]: aea43a9c584b3bd1 +Block 0016 [ 75]: 7814f7a36dbecc04 +Block 0016 [ 76]: 36942f8d18a60829 +Block 0016 [ 77]: 3af6fd6eb129deaf +Block 0016 [ 78]: f6d8cb57312b2f93 +Block 0016 [ 79]: 0d09e153aa59daef +Block 0016 [ 80]: 6694dd3785ad79a2 +Block 0016 [ 81]: f804675b1db096ca +Block 0016 [ 82]: af28c00169838f9a +Block 0016 [ 83]: 7e9f31e2ca03f44d +Block 0016 [ 84]: 0a40a5fea905e6da +Block 0016 [ 85]: ea6e6ad593c9a00a +Block 0016 [ 86]: 60ce67973717f0af +Block 0016 [ 87]: 5119b20ef9174210 +Block 0016 [ 88]: 4ad6e8d2ea685ad4 +Block 0016 [ 89]: f23bea2bb343d013 +Block 0016 [ 90]: 8c18a4ec72902c35 +Block 0016 [ 91]: a5bdc1cbada363a0 +Block 0016 [ 92]: 225d167810799ed8 +Block 0016 [ 93]: 028f905fc8f31809 +Block 0016 [ 94]: 929022764e02b432 +Block 0016 [ 95]: 39cabbd42dbca708 +Block 0016 [ 96]: c622b92e3a1f8a98 +Block 0016 [ 97]: f5411fb0c090febe +Block 0016 [ 98]: 1577aa81965ac648 +Block 0016 [ 99]: 7244612848c73c2f +Block 0016 [100]: 3e2ce65d4f47fa17 +Block 0016 [101]: 3fb2a4d1c9be489e +Block 0016 [102]: 0287f8413494b77d +Block 0016 [103]: 8c5a45a4cf7fd7a6 +Block 0016 [104]: f59eb76ce9ee5824 +Block 0016 [105]: eb2ef1cd6870c0cf +Block 0016 [106]: 8a634c740861120e +Block 0016 [107]: 50fd7f477fadbbba +Block 0016 [108]: 972e3be524189b9d +Block 0016 [109]: fdcc72540a485d9d +Block 0016 [110]: 431ff388b18c20b2 +Block 0016 [111]: 84b14a35e1651e87 +Block 0016 [112]: 049c81788d686bea +Block 0016 [113]: 841227e268589776 +Block 0016 [114]: 1984c047ffeb7202 +Block 0016 [115]: 2debb849661993bc +Block 0016 [116]: 64e24153b0795338 +Block 0016 [117]: 68a8fd2c8eaea8c4 +Block 0016 [118]: 4588aa2a8b4b7e64 +Block 0016 [119]: ffc79b51ee4aa24e +Block 0016 [120]: ee0108716b3720aa +Block 0016 [121]: 815b13553b12bf61 +Block 0016 [122]: ede614d36497d5a6 +Block 0016 [123]: 8ddd0e3f2fe5e85e +Block 0016 [124]: 530dca4f54d31258 +Block 0016 [125]: 61edbf72ee4111ce +Block 0016 [126]: 6f9d762b442949b7 +Block 0016 [127]: 824443969c263569 +Block 0017 [ 0]: c26b5fb7ee819975 +Block 0017 [ 1]: 222cc666ae909d6d +Block 0017 [ 2]: c47520b833dde283 +Block 0017 [ 3]: d8df98adf7c4e9de +Block 0017 [ 4]: e5de16b4d34325af +Block 0017 [ 5]: b00cea65fe6cfe19 +Block 0017 [ 6]: 46db08563e7ea0e1 +Block 0017 [ 7]: a5893dba47999f5f +Block 0017 [ 8]: c085e21bb0da3d0f +Block 0017 [ 9]: 1f172eef8cb80b7f +Block 0017 [ 10]: 6b6f645c2443cc04 +Block 0017 [ 11]: b5686dbe596aab80 +Block 0017 [ 12]: cc34ea0ef0d73359 +Block 0017 [ 13]: 97a568c24dc38146 +Block 0017 [ 14]: 778f6cdeb2dae4d9 +Block 0017 [ 15]: 31f8d50c4456bcf2 +Block 0017 [ 16]: c28a9374fe7ba670 +Block 0017 [ 17]: 7b3a8991f0c13cd0 +Block 0017 [ 18]: 6fa3b1c8458e7844 +Block 0017 [ 19]: ea444aa2832d39a3 +Block 0017 [ 20]: fbc811cc74910198 +Block 0017 [ 21]: 2ba1f1b6c73336d6 +Block 0017 [ 22]: b6ca4186998da588 +Block 0017 [ 23]: adf168017ff13adb +Block 0017 [ 24]: e5a80bad1ce6fd4c +Block 0017 [ 25]: 5a006185c3bf0e46 +Block 0017 [ 26]: c018264d3a3303a3 +Block 0017 [ 27]: 6d4f26be949b0710 +Block 0017 [ 28]: 570663118a4576b5 +Block 0017 [ 29]: cf8c5362ef21623d +Block 0017 [ 30]: 5a58b134066bb910 +Block 0017 [ 31]: dc8a5af3b6d8e51a +Block 0017 [ 32]: c91e14f271afe7c8 +Block 0017 [ 33]: 837d36649ff731f0 +Block 0017 [ 34]: 255f48975a9c1166 +Block 0017 [ 35]: 36b33685679ae942 +Block 0017 [ 36]: b78188f30b332a6e +Block 0017 [ 37]: fbd802b61918aaab +Block 0017 [ 38]: 95a224cf20cabbdf +Block 0017 [ 39]: e4fafe09ac44ceae +Block 0017 [ 40]: 8795c7eb6ce53357 +Block 0017 [ 41]: 9baf142cd14ebc74 +Block 0017 [ 42]: e056de9c637bce60 +Block 0017 [ 43]: 41cb37b4eef494eb +Block 0017 [ 44]: 82e788786c7c4b2d +Block 0017 [ 45]: ba3fade55b845c0a +Block 0017 [ 46]: 61ab9386f6de7b43 +Block 0017 [ 47]: b27f8f4f8801afe5 +Block 0017 [ 48]: e7545b6b407bb4e5 +Block 0017 [ 49]: 1b6b292aebb22e12 +Block 0017 [ 50]: 4ea78d3346c80c00 +Block 0017 [ 51]: e51c4614215b48e3 +Block 0017 [ 52]: 350a5fcfa8096d76 +Block 0017 [ 53]: beb0d442e51228f6 +Block 0017 [ 54]: 2dd148dbc8e4339e +Block 0017 [ 55]: b6f6e6939139ed26 +Block 0017 [ 56]: 55bae151f650b757 +Block 0017 [ 57]: 3ecc387a6897bb4b +Block 0017 [ 58]: 81f3ba27544462df +Block 0017 [ 59]: aa724cba27fb7ada +Block 0017 [ 60]: 49f4c6cd3d1001b7 +Block 0017 [ 61]: 5de8a69be3fc4b01 +Block 0017 [ 62]: e7660de671733a47 +Block 0017 [ 63]: 4c848327b9258030 +Block 0017 [ 64]: e1af30e156752a3e +Block 0017 [ 65]: f888b1b30c51e5c2 +Block 0017 [ 66]: cefd61d444cdb0aa +Block 0017 [ 67]: 1366818eee49b310 +Block 0017 [ 68]: 28ef872bff4aaa9d +Block 0017 [ 69]: 52b64397c2378327 +Block 0017 [ 70]: 72dba4affff12aa3 +Block 0017 [ 71]: 43bd82be33a14f30 +Block 0017 [ 72]: 373da4a41d079ee3 +Block 0017 [ 73]: 70610f826873a4be +Block 0017 [ 74]: efc8a7cefecfc06b +Block 0017 [ 75]: a65c4ddf436da72a +Block 0017 [ 76]: ff4128178e114153 +Block 0017 [ 77]: 933bb6ef1ba8b391 +Block 0017 [ 78]: 24da4f6be714eede +Block 0017 [ 79]: 8476945cdffce2bc +Block 0017 [ 80]: 1060159b32839b9a +Block 0017 [ 81]: 7f3b13732e126432 +Block 0017 [ 82]: 1a67a6f096398f36 +Block 0017 [ 83]: 0050c03fde4ebbf2 +Block 0017 [ 84]: 2e33bfd7b983f684 +Block 0017 [ 85]: 142db665d25ff4f5 +Block 0017 [ 86]: 7be937815c018b34 +Block 0017 [ 87]: 44a52fc1a3a14b11 +Block 0017 [ 88]: 122f8c4bf8af9792 +Block 0017 [ 89]: 7df91926add2170d +Block 0017 [ 90]: 14368020f2506eab +Block 0017 [ 91]: 8d32bfcb10d230bc +Block 0017 [ 92]: 3043ef1eb7d8fc1b +Block 0017 [ 93]: 3ac8946c053bb698 +Block 0017 [ 94]: 20881f9043aea007 +Block 0017 [ 95]: 96f9edafe87ebeef +Block 0017 [ 96]: b258dfed76ad1d36 +Block 0017 [ 97]: 6eff6e88a743b710 +Block 0017 [ 98]: 6fba5b916d6e9901 +Block 0017 [ 99]: aa78a708b02b1617 +Block 0017 [100]: 6acf76f47da59dc5 +Block 0017 [101]: d822d6b28b552d9d +Block 0017 [102]: 07e626d948208797 +Block 0017 [103]: e6155e0219831643 +Block 0017 [104]: 910e0e6785c65ce3 +Block 0017 [105]: a5baf4068d6ba4dc +Block 0017 [106]: 393b2a4e94962d2b +Block 0017 [107]: bf728ee972d385b6 +Block 0017 [108]: 38b80e3235f30a5a +Block 0017 [109]: 396bfe4a2864e7df +Block 0017 [110]: 34111fbf07f6a12e +Block 0017 [111]: 63e095883c1ee1cf +Block 0017 [112]: 59eabda66b1b80f8 +Block 0017 [113]: f014bd7d3796df5a +Block 0017 [114]: 4f1349f9a0845b27 +Block 0017 [115]: cf273ea085e693ee +Block 0017 [116]: 24c5445ef8c8ce4f +Block 0017 [117]: 3f5a67d8f3695ed0 +Block 0017 [118]: 3eecddc14dd84a98 +Block 0017 [119]: bcc6260622f109a7 +Block 0017 [120]: 73c11a320135cbba +Block 0017 [121]: 6ff7603869077601 +Block 0017 [122]: c05b3dc3b45d2d9d +Block 0017 [123]: 641bbf7fccc74c80 +Block 0017 [124]: b9727ef5a77e7fa1 +Block 0017 [125]: 47cdc8eb2d9d4edf +Block 0017 [126]: 29a16a1ecda84ccc +Block 0017 [127]: 63550fc73aec391a +Block 0018 [ 0]: 73a43a37ceeea256 +Block 0018 [ 1]: 0e2035fdf4ef4e88 +Block 0018 [ 2]: 55cf35b8b5a10862 +Block 0018 [ 3]: 64e77a47e8032bc4 +Block 0018 [ 4]: a9576618de3cb90e +Block 0018 [ 5]: b833f7216445c57c +Block 0018 [ 6]: 759f838d4ad4c434 +Block 0018 [ 7]: abb5f81f0725a89b +Block 0018 [ 8]: e3b1552cc9c71c21 +Block 0018 [ 9]: 3d9a2f3d93020b83 +Block 0018 [ 10]: 0e53a0bfb7f81d39 +Block 0018 [ 11]: ae796955deec0480 +Block 0018 [ 12]: 7693d55f8a2e92eb +Block 0018 [ 13]: 991c70ec78caa12a +Block 0018 [ 14]: 4d7eab83941af3d2 +Block 0018 [ 15]: 81326a33ee4182c2 +Block 0018 [ 16]: 06c1b888e42568f6 +Block 0018 [ 17]: d5c51a781034bc9b +Block 0018 [ 18]: 119a5b2752527a89 +Block 0018 [ 19]: 50b5d7b5c7eb7f9b +Block 0018 [ 20]: d8f6e49e832454eb +Block 0018 [ 21]: 9f7e79eb57294218 +Block 0018 [ 22]: 3b5c4a73081250de +Block 0018 [ 23]: d0733808f1314c8c +Block 0018 [ 24]: e63fe566af3cc19d +Block 0018 [ 25]: 2272a3a74553c0c8 +Block 0018 [ 26]: e90c71421873c571 +Block 0018 [ 27]: a9cb61075002ac10 +Block 0018 [ 28]: d8b97ef74f52228b +Block 0018 [ 29]: 9b4eac66fb0f74c1 +Block 0018 [ 30]: b022a4d505f08e11 +Block 0018 [ 31]: 85663ee1ac562468 +Block 0018 [ 32]: e241e44001a29b80 +Block 0018 [ 33]: 592e7308934d23d3 +Block 0018 [ 34]: e731a6b6b0c36f9e +Block 0018 [ 35]: 41493fb1cb8eaa8a +Block 0018 [ 36]: 9dbf21d7ce4bc63f +Block 0018 [ 37]: 5a9234f5bdd75f32 +Block 0018 [ 38]: 5b81afda5c8f5380 +Block 0018 [ 39]: d5a7986b11dff5f0 +Block 0018 [ 40]: 505b095dce538a6e +Block 0018 [ 41]: 8409cedfb662722a +Block 0018 [ 42]: a760af89ad1bd964 +Block 0018 [ 43]: 9ccf16a9261ec931 +Block 0018 [ 44]: dc673b0119a3477f +Block 0018 [ 45]: 1bb7fefe35bd686c +Block 0018 [ 46]: 83d8053357e55423 +Block 0018 [ 47]: 2f537a2d509a82d6 +Block 0018 [ 48]: 33212ec5cb2789c2 +Block 0018 [ 49]: d12d2b59b2261562 +Block 0018 [ 50]: b071f8845b921091 +Block 0018 [ 51]: 9c8ffe0baa746df0 +Block 0018 [ 52]: dbf600f18d293676 +Block 0018 [ 53]: 3ada85d4b8e36c52 +Block 0018 [ 54]: faba10ce3a1e786a +Block 0018 [ 55]: 980f6bc7809fd949 +Block 0018 [ 56]: 604a76d6b5170460 +Block 0018 [ 57]: d91b2079a9fdeaf1 +Block 0018 [ 58]: 2f1f4ec73b007466 +Block 0018 [ 59]: 730c109369577f61 +Block 0018 [ 60]: 66c9a5d237aabd90 +Block 0018 [ 61]: c3621cfd2e1b32d2 +Block 0018 [ 62]: be084ebc2ad00f94 +Block 0018 [ 63]: cf9043e50b81646c +Block 0018 [ 64]: 9275b31fbb6fa821 +Block 0018 [ 65]: 4ae62cefc32f71df +Block 0018 [ 66]: 66221bf21cb89a3f +Block 0018 [ 67]: 58ffbd72ed2a8af9 +Block 0018 [ 68]: b85a6fc928ff7cff +Block 0018 [ 69]: a53d773bd978acde +Block 0018 [ 70]: ed70197136db8b0e +Block 0018 [ 71]: b683e16a459a9666 +Block 0018 [ 72]: f6e9b4d1d0f7c0d2 +Block 0018 [ 73]: a3dd151d4bd18e9e +Block 0018 [ 74]: c88c2079b78e4f1b +Block 0018 [ 75]: d619e95f24b470a7 +Block 0018 [ 76]: 38d915f1c4df1bb3 +Block 0018 [ 77]: 9a52ef525657b9a4 +Block 0018 [ 78]: c3004355d9ea136f +Block 0018 [ 79]: 4f2231eb8ed9c0b5 +Block 0018 [ 80]: cce5f29cfb7e1899 +Block 0018 [ 81]: 6dccea4449b58d06 +Block 0018 [ 82]: 41a0939b714ac5bd +Block 0018 [ 83]: da4c028c51d8bba0 +Block 0018 [ 84]: 1235b86184cd97ce +Block 0018 [ 85]: e0bcb44cc34c9f8a +Block 0018 [ 86]: 2a8e24cc0dd2c27a +Block 0018 [ 87]: cde65c0fa2707b5b +Block 0018 [ 88]: a6d09ebe2b21cf33 +Block 0018 [ 89]: 8626d21d80c62123 +Block 0018 [ 90]: ac3923b1e61979a9 +Block 0018 [ 91]: dd237b455e10839a +Block 0018 [ 92]: d4036773fa739341 +Block 0018 [ 93]: 7a4fb3e21a5fac16 +Block 0018 [ 94]: affec1c8b426dc28 +Block 0018 [ 95]: 8cf50bb8fa9b855d +Block 0018 [ 96]: 0fdc69cd6c830993 +Block 0018 [ 97]: 097a687fdf92aaf9 +Block 0018 [ 98]: 188b0ddccfdd4db9 +Block 0018 [ 99]: 1313002013950cf0 +Block 0018 [100]: 5369119751e8098c +Block 0018 [101]: 03067881a7f54f35 +Block 0018 [102]: 3e75d27737b8145f +Block 0018 [103]: a7c719391c252bbd +Block 0018 [104]: d07640453388401f +Block 0018 [105]: b8647a6324a5229d +Block 0018 [106]: 803bc6e3d4e596d5 +Block 0018 [107]: 11a7ef37af4a42db +Block 0018 [108]: 2b1fe566afb105be +Block 0018 [109]: 37e0b8ae65f50773 +Block 0018 [110]: b2164d7e5c798eba +Block 0018 [111]: de438d75388cf065 +Block 0018 [112]: 13d152df2161c345 +Block 0018 [113]: f5fbef555db63c4e +Block 0018 [114]: 91ae316a4024ff0b +Block 0018 [115]: 067cb50b87d9c64d +Block 0018 [116]: 6d428f1e643cb8cd +Block 0018 [117]: 59974616208dae08 +Block 0018 [118]: 5301b3d1c726cf2e +Block 0018 [119]: 8ed2dd2fc14af4e1 +Block 0018 [120]: 8bfb8ebcfa3fbd57 +Block 0018 [121]: 9211c9360b96b845 +Block 0018 [122]: 51ef8411a5e32f44 +Block 0018 [123]: 1c15a0f64623bb38 +Block 0018 [124]: da59218d786afcd6 +Block 0018 [125]: 6ceed727611ae6d9 +Block 0018 [126]: 68ad4703452f6c84 +Block 0018 [127]: 1435aec09f183fb8 +Block 0019 [ 0]: db7857f2d02de914 +Block 0019 [ 1]: be1d2ca2f8f4075b +Block 0019 [ 2]: 3cacf2b9675c4610 +Block 0019 [ 3]: b87fbbaf79c1c56b +Block 0019 [ 4]: 2be598ef088c38a3 +Block 0019 [ 5]: 7b85cb8efe6326f6 +Block 0019 [ 6]: 07ee0d3a22efc0dd +Block 0019 [ 7]: 2bc9056257f239cf +Block 0019 [ 8]: 4cbcf454a2ab394b +Block 0019 [ 9]: 021316d70a2b01ea +Block 0019 [ 10]: 1c5a2e1c4ef3294c +Block 0019 [ 11]: a5510b60639664fe +Block 0019 [ 12]: a260b09b9f8c9822 +Block 0019 [ 13]: b1152f2ebb303876 +Block 0019 [ 14]: a6c677798fb6cb53 +Block 0019 [ 15]: 8c3e0ce6406f8da1 +Block 0019 [ 16]: cd7a1f62071c8b92 +Block 0019 [ 17]: 921e44594ca4e496 +Block 0019 [ 18]: d571d4ddfc513301 +Block 0019 [ 19]: 27d1849bdc7457ea +Block 0019 [ 20]: 5bbfb2ea78c0fd8d +Block 0019 [ 21]: 4dfe80df57f16197 +Block 0019 [ 22]: d7373d84a238e7c4 +Block 0019 [ 23]: b32dd784b7551e77 +Block 0019 [ 24]: 7755a8fafb9982c0 +Block 0019 [ 25]: 951adac79fec5f93 +Block 0019 [ 26]: 73d8aa9cd3a6c6b9 +Block 0019 [ 27]: 19b34676edb7b671 +Block 0019 [ 28]: 15f74ed11989580c +Block 0019 [ 29]: 3abaaf249c172ce8 +Block 0019 [ 30]: 92180c83d6ae4cac +Block 0019 [ 31]: c7d7991a9072de3f +Block 0019 [ 32]: 01d93f684dede00b +Block 0019 [ 33]: 13aeba95c44ad304 +Block 0019 [ 34]: 74080c28c6a71794 +Block 0019 [ 35]: 11576f82596677c5 +Block 0019 [ 36]: eeda905afd7677b3 +Block 0019 [ 37]: 9b31f5f2dafd2d5c +Block 0019 [ 38]: 1debb34c8287cfe8 +Block 0019 [ 39]: f59cc690e1b67d64 +Block 0019 [ 40]: bf2f8c54adb32bc0 +Block 0019 [ 41]: fb307c505280b40e +Block 0019 [ 42]: d10c03fbc2ece8dc +Block 0019 [ 43]: 47aa1323473fffae +Block 0019 [ 44]: 34a1e267c5bf8b28 +Block 0019 [ 45]: 330076c1b27ac30b +Block 0019 [ 46]: b355799c94a30d3b +Block 0019 [ 47]: 759bc21292cc7209 +Block 0019 [ 48]: 6b9408f24caf17ee +Block 0019 [ 49]: 9961d984925ba515 +Block 0019 [ 50]: 4cfbca8d8ba561af +Block 0019 [ 51]: 47060c3700a13560 +Block 0019 [ 52]: d5e2ca29a0b8c65f +Block 0019 [ 53]: 28c833e35cc6dec0 +Block 0019 [ 54]: 6a262ee512b37c9c +Block 0019 [ 55]: 612cc2c7bbf208a2 +Block 0019 [ 56]: 4ec329d8efe4ed3f +Block 0019 [ 57]: 1cddbd0577186377 +Block 0019 [ 58]: 517c387099bb54ba +Block 0019 [ 59]: 186fa06056a9d5e9 +Block 0019 [ 60]: e35aa42952e22c35 +Block 0019 [ 61]: a2c47f55554aadab +Block 0019 [ 62]: efd55e5dcbf3de9f +Block 0019 [ 63]: 368011c1f565c120 +Block 0019 [ 64]: 99f2d82e3ac72e75 +Block 0019 [ 65]: ca63fee28220696b +Block 0019 [ 66]: 79735e120b709d74 +Block 0019 [ 67]: 0e5a0bcf65320750 +Block 0019 [ 68]: 87d6697d5526af66 +Block 0019 [ 69]: e59c1874a397ed6c +Block 0019 [ 70]: f46542c5f5320deb +Block 0019 [ 71]: 6ab985988050992e +Block 0019 [ 72]: 46ddc8f51e8bdfaa +Block 0019 [ 73]: 0af96f044bb69b5d +Block 0019 [ 74]: bdf2a9eb1cbb60a2 +Block 0019 [ 75]: 427a9e01b056e536 +Block 0019 [ 76]: ba27781cc41cbe82 +Block 0019 [ 77]: acd6fe3b7560d239 +Block 0019 [ 78]: e6942df20c5330a5 +Block 0019 [ 79]: 801fd2c2a27fee79 +Block 0019 [ 80]: 78df49edf83e411a +Block 0019 [ 81]: d0b13589858cd937 +Block 0019 [ 82]: 07e475122d4e1ca9 +Block 0019 [ 83]: a6080a9af8853c8c +Block 0019 [ 84]: 5b0fd38d93c861f0 +Block 0019 [ 85]: 789fa96618507733 +Block 0019 [ 86]: c23044d37fc96600 +Block 0019 [ 87]: f9efa88ccb76e47d +Block 0019 [ 88]: 8c8c5d49a22aebeb +Block 0019 [ 89]: 33d452028ad70cd2 +Block 0019 [ 90]: d1ebb9dac3b1eb18 +Block 0019 [ 91]: 2cacfb9ed2b42519 +Block 0019 [ 92]: 583943507463e237 +Block 0019 [ 93]: e8d35b87bd10da44 +Block 0019 [ 94]: 57a83ae010eaa129 +Block 0019 [ 95]: abd24c860084ab8b +Block 0019 [ 96]: aad60968ff3e72a7 +Block 0019 [ 97]: db6b818b858e0f95 +Block 0019 [ 98]: a236a5f5e6ed5c34 +Block 0019 [ 99]: 9ee495a89806571d +Block 0019 [100]: d5309240aeaa129b +Block 0019 [101]: 0678c6008b7bdfa3 +Block 0019 [102]: 898c9b9a4ecc1135 +Block 0019 [103]: 04c9d151c3936024 +Block 0019 [104]: fe5419eeb8909a79 +Block 0019 [105]: db4cde09a43e55ef +Block 0019 [106]: 03e287f745584c27 +Block 0019 [107]: 4b3e7c901a287e12 +Block 0019 [108]: b0fe9f54ac5d1820 +Block 0019 [109]: 19e9481bfb234548 +Block 0019 [110]: e70140dc32fae16c +Block 0019 [111]: 4907fc614c8e02be +Block 0019 [112]: 432d7fd638580bb0 +Block 0019 [113]: 63214685454ffc72 +Block 0019 [114]: 8607ce6bf48c49a4 +Block 0019 [115]: 2b5fcb115af940dc +Block 0019 [116]: f962622b16c92e01 +Block 0019 [117]: b658504aff081cbd +Block 0019 [118]: 2f3c28ad121165d2 +Block 0019 [119]: e936d9ec4aa94cba +Block 0019 [120]: b293e61ee1d30dd3 +Block 0019 [121]: 002c110dd8033a59 +Block 0019 [122]: eeb3a96e2e3d21ca +Block 0019 [123]: d845813fc15e9aaa +Block 0019 [124]: 92bd97abd662fc28 +Block 0019 [125]: 750f33bbce352254 +Block 0019 [126]: 4ebd7cdf6cf9494c +Block 0019 [127]: 795e82c67139eded +Block 0020 [ 0]: 9294d03a99a22ea2 +Block 0020 [ 1]: bcbe0550584228d4 +Block 0020 [ 2]: 129427d353d8d19b +Block 0020 [ 3]: adf1508aa2cd80e4 +Block 0020 [ 4]: 9828e5b07118f247 +Block 0020 [ 5]: 647a7614912b1565 +Block 0020 [ 6]: d75cecc203293be3 +Block 0020 [ 7]: 3bfa93828245a58e +Block 0020 [ 8]: 3e42f663df86163d +Block 0020 [ 9]: db1e8f2db4fd5f56 +Block 0020 [ 10]: b125c16e117becf8 +Block 0020 [ 11]: 833b41751fa36e5b +Block 0020 [ 12]: 37268fc1e7f53398 +Block 0020 [ 13]: 07675cb6e4d9bb8f +Block 0020 [ 14]: 9600f42ea7df9ed2 +Block 0020 [ 15]: 07c775af5e73d44a +Block 0020 [ 16]: a3e3837421f150d4 +Block 0020 [ 17]: d723ae6724085247 +Block 0020 [ 18]: 4990be7e8e59bc2f +Block 0020 [ 19]: eab56ec270c5406b +Block 0020 [ 20]: 2a637389d65100a1 +Block 0020 [ 21]: 6ea26e1c777c46bf +Block 0020 [ 22]: 4d73b17ca5cbdcad +Block 0020 [ 23]: 6f8633a6620733e8 +Block 0020 [ 24]: 5898847821535a03 +Block 0020 [ 25]: 00240261b3893620 +Block 0020 [ 26]: e78807d720e2ebb6 +Block 0020 [ 27]: cada2395683f15f6 +Block 0020 [ 28]: e5532f20a6a36a89 +Block 0020 [ 29]: 631360de14c68435 +Block 0020 [ 30]: 89af90b96ce933f3 +Block 0020 [ 31]: 4ad6b40a8c905c15 +Block 0020 [ 32]: c70d0b81ef0c42f1 +Block 0020 [ 33]: 20d63097de1d4de7 +Block 0020 [ 34]: ac0400d142902ffe +Block 0020 [ 35]: a610f81e4f689fbb +Block 0020 [ 36]: 654a691945e85e07 +Block 0020 [ 37]: 969fe8ef61a96f68 +Block 0020 [ 38]: dd6fc34852f483fd +Block 0020 [ 39]: 8b71d5372e78ef9a +Block 0020 [ 40]: cfba508a76e196b8 +Block 0020 [ 41]: 6c59d9046bebffb4 +Block 0020 [ 42]: f13099cba8d740ce +Block 0020 [ 43]: eb37028ca5947e71 +Block 0020 [ 44]: d3dbd1e481e68acc +Block 0020 [ 45]: 3e849d5566fc85d8 +Block 0020 [ 46]: 52d830c107762635 +Block 0020 [ 47]: baf382c743e99512 +Block 0020 [ 48]: 6dde1e25fa33d385 +Block 0020 [ 49]: 9221fbbb14a0bf8d +Block 0020 [ 50]: d2cf64a8acd2cbfa +Block 0020 [ 51]: 963ac3fea12bb6ef +Block 0020 [ 52]: fcc8a4d451074c43 +Block 0020 [ 53]: 5f8ffd9acd32770a +Block 0020 [ 54]: 93ade0ae517c1f8b +Block 0020 [ 55]: fe4f24c61406fe19 +Block 0020 [ 56]: 5ac0e7d577b9c4e2 +Block 0020 [ 57]: 1f75439ea80cefc1 +Block 0020 [ 58]: 58cd99e49c0988de +Block 0020 [ 59]: 62a1a9b784d8b18a +Block 0020 [ 60]: 0c176450f8146fc9 +Block 0020 [ 61]: c029579dde36ea3c +Block 0020 [ 62]: a35011efa2d65949 +Block 0020 [ 63]: 2cc8d2701c8aebcc +Block 0020 [ 64]: 7845f2cd112dde51 +Block 0020 [ 65]: f1bae9587bbfa28b +Block 0020 [ 66]: 54496f8e331e1446 +Block 0020 [ 67]: 4d2e4c57635a03e1 +Block 0020 [ 68]: 72103a072560e9bc +Block 0020 [ 69]: c745a628447a5af9 +Block 0020 [ 70]: 91f670902f16dacb +Block 0020 [ 71]: 62d1ca75b9ad91e2 +Block 0020 [ 72]: afc5227e1e44618c +Block 0020 [ 73]: a4fd99486eec9a91 +Block 0020 [ 74]: 8586b7e15415c117 +Block 0020 [ 75]: 1dadb8849f653aa2 +Block 0020 [ 76]: 0339d57b42b089d1 +Block 0020 [ 77]: d78c92f8f9795a06 +Block 0020 [ 78]: 884cfcc0e359526c +Block 0020 [ 79]: 92fa9ce765e41900 +Block 0020 [ 80]: a2d47dc9e631b6d3 +Block 0020 [ 81]: 391b00d07320a9d4 +Block 0020 [ 82]: 3b8d6c8e47756f40 +Block 0020 [ 83]: 9595b80e703f79a5 +Block 0020 [ 84]: c174a3c3ace67621 +Block 0020 [ 85]: e26ea90d8b631563 +Block 0020 [ 86]: d840f747d6ecd7c6 +Block 0020 [ 87]: e6791933345cb262 +Block 0020 [ 88]: 2c8a9090108ce066 +Block 0020 [ 89]: 40144400f1a0c9c6 +Block 0020 [ 90]: c586c2db746bae6a +Block 0020 [ 91]: 3f44a45296c0082f +Block 0020 [ 92]: 4c9b5aedf10ebcbb +Block 0020 [ 93]: 07f801aae09a5075 +Block 0020 [ 94]: 6b0bcdf6993e4798 +Block 0020 [ 95]: 775ba96ebbc4eb20 +Block 0020 [ 96]: 8ba6fcbafbd2e642 +Block 0020 [ 97]: 448a0cf251a78843 +Block 0020 [ 98]: 6d1dd0ebb0de9a55 +Block 0020 [ 99]: b0b75a709ef51af2 +Block 0020 [100]: da09cb3af69ae050 +Block 0020 [101]: 59618274a5cb8a5d +Block 0020 [102]: 39595dbc3386c825 +Block 0020 [103]: 7a3a85e38a8751b7 +Block 0020 [104]: 212b32e2fa3f18ba +Block 0020 [105]: 70e7978eb642c740 +Block 0020 [106]: 145bf98bd9db7579 +Block 0020 [107]: e6cd3e7a38171268 +Block 0020 [108]: 28048150f17004e5 +Block 0020 [109]: 4a084ad678c3c285 +Block 0020 [110]: 14f2417d89dfa4dc +Block 0020 [111]: 31405f3f5922edfb +Block 0020 [112]: b3696b2d430a74d0 +Block 0020 [113]: 24a857990340927f +Block 0020 [114]: cec0c14446ee4bd5 +Block 0020 [115]: 3973f485c6208c36 +Block 0020 [116]: dfb726454a565cdf +Block 0020 [117]: e2afb5ccf8b2fff9 +Block 0020 [118]: 6d10ba676dba16b9 +Block 0020 [119]: 53d268907b9738fd +Block 0020 [120]: 38d4d0c62ea273a9 +Block 0020 [121]: 077fd8691c47430f +Block 0020 [122]: a8d0a3cf26b3e70f +Block 0020 [123]: ca812c92fbd348a9 +Block 0020 [124]: 44481748bc8a4958 +Block 0020 [125]: 433a65429d7fc46f +Block 0020 [126]: a5b3568bfcbaceef +Block 0020 [127]: ca3f2394209c5459 +Block 0021 [ 0]: c9cee1441d5f5eab +Block 0021 [ 1]: 52930f80be51d785 +Block 0021 [ 2]: d9ca1edef07331fa +Block 0021 [ 3]: 5b3585e29a75d026 +Block 0021 [ 4]: bb429c762a3842d4 +Block 0021 [ 5]: ba9162cb2e4a3841 +Block 0021 [ 6]: aaaf69053cad1b02 +Block 0021 [ 7]: 75009de437add431 +Block 0021 [ 8]: 127799b6080ff74e +Block 0021 [ 9]: 0f8b60aadc4f92cd +Block 0021 [ 10]: b42e05642dd12542 +Block 0021 [ 11]: 235523f7fb4904a2 +Block 0021 [ 12]: 1e74a64fd16a30dd +Block 0021 [ 13]: 53c398ac3ae69a51 +Block 0021 [ 14]: be6c14cd42d53a85 +Block 0021 [ 15]: eb766ffac3813cbd +Block 0021 [ 16]: 3ebe536b4fc09b06 +Block 0021 [ 17]: d8ecfbaee3f55493 +Block 0021 [ 18]: b3635f0a71d9c6e3 +Block 0021 [ 19]: 6bba95ce1e1bec06 +Block 0021 [ 20]: 25c3fdd4e94e91c2 +Block 0021 [ 21]: d8c4b4c3ffc73bc2 +Block 0021 [ 22]: 3affdbdc7d5986d4 +Block 0021 [ 23]: 0b550b10e081e257 +Block 0021 [ 24]: 8c19a8f9dcefcbbb +Block 0021 [ 25]: bdeb52643dcbae10 +Block 0021 [ 26]: 07aa196ad4b3a0cf +Block 0021 [ 27]: 342eae16c8c58e7f +Block 0021 [ 28]: 22160b2900a419ff +Block 0021 [ 29]: b385c2b64b3aaad9 +Block 0021 [ 30]: 46eca5a6d39f1dd5 +Block 0021 [ 31]: af5f93e38f53ad14 +Block 0021 [ 32]: ddf78e43a91bf838 +Block 0021 [ 33]: 31489cb54c9612f6 +Block 0021 [ 34]: b55b6627a2a238f0 +Block 0021 [ 35]: 3ba6a3fe33f75e0c +Block 0021 [ 36]: a65e93a773f427b4 +Block 0021 [ 37]: 619b72827915658e +Block 0021 [ 38]: da1b7dafcb6d5810 +Block 0021 [ 39]: 331d8479540385ff +Block 0021 [ 40]: ca7f376ba1cee5fd +Block 0021 [ 41]: da53bb16660e43aa +Block 0021 [ 42]: d132a1801b2a1e36 +Block 0021 [ 43]: 0d8b0985e1dfbae8 +Block 0021 [ 44]: 06a6a8c448731c99 +Block 0021 [ 45]: e883d74d86960172 +Block 0021 [ 46]: 7353308be911a737 +Block 0021 [ 47]: 61b9f5c7f1f2c0d7 +Block 0021 [ 48]: 2dec7ab9f7231caa +Block 0021 [ 49]: 2bce285600143fd9 +Block 0021 [ 50]: 39010c3aeca34306 +Block 0021 [ 51]: d115577f0d727858 +Block 0021 [ 52]: 2a14cf35dba86061 +Block 0021 [ 53]: d7874bb05167b114 +Block 0021 [ 54]: b9037cbd42674941 +Block 0021 [ 55]: c8ae7d2d8a9f1dfb +Block 0021 [ 56]: 40007b2a39fb2388 +Block 0021 [ 57]: 24dd8e28b9f2f95b +Block 0021 [ 58]: 69c38f54dc7d736c +Block 0021 [ 59]: 8e5b642cc1c69c96 +Block 0021 [ 60]: c3a36b2d0869a075 +Block 0021 [ 61]: af9801df2f72627e +Block 0021 [ 62]: 34e29558db1d4cc9 +Block 0021 [ 63]: 4bfad5cab74d4d79 +Block 0021 [ 64]: c6967c9a66a2b9de +Block 0021 [ 65]: ff7ca71448d89f34 +Block 0021 [ 66]: b707949980d581d8 +Block 0021 [ 67]: c23a42309200643b +Block 0021 [ 68]: 765664b4e14d5f21 +Block 0021 [ 69]: 70e9c6872e68a5d4 +Block 0021 [ 70]: 71f3602f8bb547e7 +Block 0021 [ 71]: d3d1c0da3feadf0e +Block 0021 [ 72]: b1a26e7ff9b1f302 +Block 0021 [ 73]: 2fedaa2c8b5162fb +Block 0021 [ 74]: d0424eeff22c0329 +Block 0021 [ 75]: 15ad3cc810e0f5ff +Block 0021 [ 76]: b0fbe0010dc2693c +Block 0021 [ 77]: 8461b38939d3db18 +Block 0021 [ 78]: 11fac6794cee84c9 +Block 0021 [ 79]: 16fc287e9a19e926 +Block 0021 [ 80]: 6ec8980df000fef0 +Block 0021 [ 81]: b75eee5a272a9564 +Block 0021 [ 82]: 3b28e5b52c6bb35b +Block 0021 [ 83]: 78699bb3b652c6eb +Block 0021 [ 84]: 6c41404ab2b098b2 +Block 0021 [ 85]: 3d28235a57851c08 +Block 0021 [ 86]: ea29322b64acd257 +Block 0021 [ 87]: c966e9bcb6a9c8eb +Block 0021 [ 88]: 35c6802a7cce1d18 +Block 0021 [ 89]: f42843fa222dccde +Block 0021 [ 90]: 2aebadee62fc8979 +Block 0021 [ 91]: c475f0875b0a7105 +Block 0021 [ 92]: 7ee5af7c946e09c2 +Block 0021 [ 93]: 37f9b4fea2e215d2 +Block 0021 [ 94]: 3a9de7e350019af4 +Block 0021 [ 95]: 33b7efe13b4b9454 +Block 0021 [ 96]: 39d2d89f04964241 +Block 0021 [ 97]: 14db73f346b5a0c0 +Block 0021 [ 98]: 5bfb2a9cc35360d9 +Block 0021 [ 99]: 729eb1694f7c60aa +Block 0021 [100]: 7117bbfaf1f19d62 +Block 0021 [101]: a3c58fc555bf2ca0 +Block 0021 [102]: 13c1b7c5f1378202 +Block 0021 [103]: 7399c842479a898a +Block 0021 [104]: 9e1f5697bede7ff0 +Block 0021 [105]: 0564149b9c476558 +Block 0021 [106]: 3bc1b90131692b4c +Block 0021 [107]: 1bfccfcf22e3a1cb +Block 0021 [108]: 3da368666200d8ed +Block 0021 [109]: 033e93f46e8d4743 +Block 0021 [110]: 11c36841131b1891 +Block 0021 [111]: d8f96a26a37dc7ab +Block 0021 [112]: f4a1ae508ac48041 +Block 0021 [113]: 6c495e2ef1d1103a +Block 0021 [114]: 58ae115d9d807cce +Block 0021 [115]: 4c82fdf95cbcbcc0 +Block 0021 [116]: 39f51ce1da9b6c3d +Block 0021 [117]: 4205730f6328d09b +Block 0021 [118]: ea4360a7b8c07f77 +Block 0021 [119]: d7d81fb0a057e3ce +Block 0021 [120]: ba8ca586118d56d6 +Block 0021 [121]: 120e233f49d0028d +Block 0021 [122]: cb40ca113e6da130 +Block 0021 [123]: 764c1e104bac5294 +Block 0021 [124]: d56f2844dc2583bb +Block 0021 [125]: 879a3936fc5755b9 +Block 0021 [126]: 70acbe6e098056cb +Block 0021 [127]: 7afca87ff2b79b00 +Block 0022 [ 0]: bc7d82733ef71b9c +Block 0022 [ 1]: 1394cb4e08693d8a +Block 0022 [ 2]: 18efd91732233110 +Block 0022 [ 3]: b20b21aef6a3926f +Block 0022 [ 4]: 3592daf273bc0c49 +Block 0022 [ 5]: 33d46dc9f07a46e4 +Block 0022 [ 6]: 73d1fb77948b06eb +Block 0022 [ 7]: 8a63f8dfbb800d0a +Block 0022 [ 8]: b86fdf7d3f73ff2c +Block 0022 [ 9]: 3bc6f91dde8086a3 +Block 0022 [ 10]: c8e447a640139dfa +Block 0022 [ 11]: 2297e787b750829d +Block 0022 [ 12]: f128b83545fa0a12 +Block 0022 [ 13]: cb1b9787fdb730d7 +Block 0022 [ 14]: 6627c9718a8bc950 +Block 0022 [ 15]: 8e9e75b67ebc26cf +Block 0022 [ 16]: 317809a1ecf9fd10 +Block 0022 [ 17]: 0b948f6d198e306c +Block 0022 [ 18]: 43830167f0277d31 +Block 0022 [ 19]: acefad5b0faba0ba +Block 0022 [ 20]: 883907843665ddd3 +Block 0022 [ 21]: 6c7ba74784193ecc +Block 0022 [ 22]: 221ab9d2f05a09ac +Block 0022 [ 23]: 706261e61b707c75 +Block 0022 [ 24]: 0a3ab628c11d07f4 +Block 0022 [ 25]: 71c1113dde1d533f +Block 0022 [ 26]: 4a35095412392314 +Block 0022 [ 27]: 6924221e002e1078 +Block 0022 [ 28]: fdd4f0e2b1570056 +Block 0022 [ 29]: 2b9d802e0bc07966 +Block 0022 [ 30]: f489dd59e2a6d0ea +Block 0022 [ 31]: a1388929da27122a +Block 0022 [ 32]: 46e85b9ad9e8cce8 +Block 0022 [ 33]: 749fb8d43225808b +Block 0022 [ 34]: e6153f61998e80d5 +Block 0022 [ 35]: f469291ceb31747b +Block 0022 [ 36]: d2919925b4c5071b +Block 0022 [ 37]: ae3fc5256ebda2a8 +Block 0022 [ 38]: 6f6679fc8264c35c +Block 0022 [ 39]: 3d7dad770a274f01 +Block 0022 [ 40]: 379bcf2fd1e137c2 +Block 0022 [ 41]: e32a82c804274e00 +Block 0022 [ 42]: e0de77e0762f4f07 +Block 0022 [ 43]: 4d57ae811094fa42 +Block 0022 [ 44]: 7552dcd84eed2528 +Block 0022 [ 45]: 22a0822ada306970 +Block 0022 [ 46]: e7296732d4e69866 +Block 0022 [ 47]: a20ec5bacb74fb8d +Block 0022 [ 48]: 6786cf2ad5572d0a +Block 0022 [ 49]: f2549f26dce94274 +Block 0022 [ 50]: ce524392221e9ce9 +Block 0022 [ 51]: fb222ef56a02c3f1 +Block 0022 [ 52]: ce29627b2c55b120 +Block 0022 [ 53]: b00fc98e487d33bc +Block 0022 [ 54]: ba9a1a9236ebcb8d +Block 0022 [ 55]: 96d87fce20966dfe +Block 0022 [ 56]: 5719501da01a5fb4 +Block 0022 [ 57]: 1bef1c286a9f357b +Block 0022 [ 58]: a472acbd08f7d091 +Block 0022 [ 59]: dfb4ab50795f5a56 +Block 0022 [ 60]: 175c667d2966d000 +Block 0022 [ 61]: d1535a2fa23c2dfc +Block 0022 [ 62]: 0276066c52933b9b +Block 0022 [ 63]: a789683dd9e8cc16 +Block 0022 [ 64]: 3ea422cc751cad5d +Block 0022 [ 65]: 357842eb4fd985e8 +Block 0022 [ 66]: cd55f90fc562d75c +Block 0022 [ 67]: 38109086d68f4095 +Block 0022 [ 68]: 70b6bd256c6daedc +Block 0022 [ 69]: 5a350e041de1919c +Block 0022 [ 70]: a536eaa4af68d2fe +Block 0022 [ 71]: 3077af0c5eed3c22 +Block 0022 [ 72]: 3123f4d9aad3b3ba +Block 0022 [ 73]: 9fb0ff34bfaa2270 +Block 0022 [ 74]: b658b0cd00d5802f +Block 0022 [ 75]: 97b2e143fd7c3c5c +Block 0022 [ 76]: 88dee4acf47e5419 +Block 0022 [ 77]: b826a726db361361 +Block 0022 [ 78]: 7b671285d2803d20 +Block 0022 [ 79]: b671334ae4049a01 +Block 0022 [ 80]: b5d4701309738c4d +Block 0022 [ 81]: eec51b2dd9ca1524 +Block 0022 [ 82]: 8ea2e7cbe7849f38 +Block 0022 [ 83]: 6b654a5540635dc2 +Block 0022 [ 84]: 3d4295e4d19615ac +Block 0022 [ 85]: eb5e5915a0642148 +Block 0022 [ 86]: f893ec41ab06137c +Block 0022 [ 87]: bad2cf30b8bb3273 +Block 0022 [ 88]: 6352142d0b470b26 +Block 0022 [ 89]: 5467740c7733e65a +Block 0022 [ 90]: a6bbbae22894b638 +Block 0022 [ 91]: 2a35ebb87114b880 +Block 0022 [ 92]: d989e7a00d5ec8e9 +Block 0022 [ 93]: af7b8a32afdb6885 +Block 0022 [ 94]: 4efcdde6bc2d75f5 +Block 0022 [ 95]: 7f8f41d919eced9a +Block 0022 [ 96]: 4787f909f8dc245d +Block 0022 [ 97]: d40d8d2b70c01d96 +Block 0022 [ 98]: c7adee6cc4517d3a +Block 0022 [ 99]: 92ed4ee8f5b01a49 +Block 0022 [100]: c01843707b5b5c7e +Block 0022 [101]: d32ae3a801bae8e4 +Block 0022 [102]: 7803de6e9eeea070 +Block 0022 [103]: f8529b389c8e28e6 +Block 0022 [104]: 040625e29005b5be +Block 0022 [105]: 624d205de5ae4dec +Block 0022 [106]: 78a524f7d7e34d89 +Block 0022 [107]: 9186f14434d72086 +Block 0022 [108]: e50b8c43f0ad97df +Block 0022 [109]: c7023c88b8797c5f +Block 0022 [110]: 280a5ce52b4dbdc0 +Block 0022 [111]: a1508547bfb3aa05 +Block 0022 [112]: 82e67edf8fd56984 +Block 0022 [113]: 0fe3f32b800eeb47 +Block 0022 [114]: 4951bd7622ad0d9a +Block 0022 [115]: 070fc7de56bb23af +Block 0022 [116]: 88d09d9a518a0377 +Block 0022 [117]: b7607d77aec85aa6 +Block 0022 [118]: 6ca70a4b33e651b9 +Block 0022 [119]: cecd51f1d0e710fb +Block 0022 [120]: ee38237e293e8f11 +Block 0022 [121]: 6c568b3fcf1d17a3 +Block 0022 [122]: b792e4c460d81205 +Block 0022 [123]: 7c2468923361bf6f +Block 0022 [124]: 09953de49fdbc9ac +Block 0022 [125]: b985b06398326895 +Block 0022 [126]: ac8e2c083ba0e907 +Block 0022 [127]: b289adef24fcb269 +Block 0023 [ 0]: f887a0362d97bbe5 +Block 0023 [ 1]: bc39eae32801eb35 +Block 0023 [ 2]: b5a675c89e71c050 +Block 0023 [ 3]: ac732ed0c2509276 +Block 0023 [ 4]: 5b53d3ce4dd394fe +Block 0023 [ 5]: 31b0557388dedb15 +Block 0023 [ 6]: 3cf538f405228614 +Block 0023 [ 7]: 940b0e9c63cb21da +Block 0023 [ 8]: 73e8facbd92099bd +Block 0023 [ 9]: 2432843309adcd8f +Block 0023 [ 10]: b31c4d7d1699ec2f +Block 0023 [ 11]: af05004ebd7f9d33 +Block 0023 [ 12]: 9db5a872e714329e +Block 0023 [ 13]: 91ea75883b762e4a +Block 0023 [ 14]: f38638108dabdd90 +Block 0023 [ 15]: 26861e1cd975cd97 +Block 0023 [ 16]: 05715021862d5b3a +Block 0023 [ 17]: 8882e5dc0d315aed +Block 0023 [ 18]: 4e420d6af5cba865 +Block 0023 [ 19]: 2dbbabb447434fe8 +Block 0023 [ 20]: 4fb80c868a970369 +Block 0023 [ 21]: 04d0a9abb8a0f861 +Block 0023 [ 22]: 6b2501fafcc000e9 +Block 0023 [ 23]: 201b740e3be2dac6 +Block 0023 [ 24]: 185afa423a4fb1b5 +Block 0023 [ 25]: 53afaec388322182 +Block 0023 [ 26]: 0c2814b50d6e577e +Block 0023 [ 27]: 26b4946dfa2d52d9 +Block 0023 [ 28]: 1f1b128b10855cb4 +Block 0023 [ 29]: 132c09b9061898f2 +Block 0023 [ 30]: 471c578b8492a910 +Block 0023 [ 31]: b258bbd42e271fd7 +Block 0023 [ 32]: 93f8cb887270d643 +Block 0023 [ 33]: e42960f495f58326 +Block 0023 [ 34]: c6d908e361617ce2 +Block 0023 [ 35]: b8cdb4bdda047621 +Block 0023 [ 36]: 3a8286ee5cef4d67 +Block 0023 [ 37]: 49f526689fcd933a +Block 0023 [ 38]: 55d05b37b4a6d448 +Block 0023 [ 39]: 22ca23986b8c5204 +Block 0023 [ 40]: 9f685412374be015 +Block 0023 [ 41]: 6f0ba8b6e35e70ab +Block 0023 [ 42]: fe318f443beb5657 +Block 0023 [ 43]: 6a705817f928cc9d +Block 0023 [ 44]: 00bd93bc3e34ff51 +Block 0023 [ 45]: c99dd7521242e14c +Block 0023 [ 46]: f9253088dea37570 +Block 0023 [ 47]: 1e2d13deb310f931 +Block 0023 [ 48]: 19c2c371e1f661a9 +Block 0023 [ 49]: 7a06fd0f6d70a89c +Block 0023 [ 50]: 4587e9d4990f201c +Block 0023 [ 51]: 2ca4ab657130bbe7 +Block 0023 [ 52]: dee5ca875175476d +Block 0023 [ 53]: 78420fa068dbccca +Block 0023 [ 54]: 826f3deed3c1b6a0 +Block 0023 [ 55]: e7e50e4cfe7647db +Block 0023 [ 56]: affaeaf92cb991a2 +Block 0023 [ 57]: 49625c0a8611bec8 +Block 0023 [ 58]: b58dcfd9919c942a +Block 0023 [ 59]: 6077cbec91448280 +Block 0023 [ 60]: fbb108e9bf221d99 +Block 0023 [ 61]: 5b51277c1bb05b10 +Block 0023 [ 62]: 636343b6a796fba4 +Block 0023 [ 63]: ef13787e68ae51b8 +Block 0023 [ 64]: ee5b8487cb5693c8 +Block 0023 [ 65]: 7c28f2ce84a277dc +Block 0023 [ 66]: 26d883051560b97f +Block 0023 [ 67]: a89a03bedc2cdcb6 +Block 0023 [ 68]: 301f3a02f1b052ea +Block 0023 [ 69]: 9184eebcb7de3579 +Block 0023 [ 70]: 19ce01730fc35b1e +Block 0023 [ 71]: 15802e8ab6283689 +Block 0023 [ 72]: 9aa02a56f7c5d4e2 +Block 0023 [ 73]: 68d84ecf84d7072e +Block 0023 [ 74]: fde125e9672c9d76 +Block 0023 [ 75]: 9bb65a3334c84bce +Block 0023 [ 76]: 166cf59fdeaf06e9 +Block 0023 [ 77]: 28ecda6662343772 +Block 0023 [ 78]: c8899d575e4b40ad +Block 0023 [ 79]: 8db3dd5266989dc4 +Block 0023 [ 80]: 2d5d7afab6ae495d +Block 0023 [ 81]: 3e57e86bf7615941 +Block 0023 [ 82]: 7abd5fafae678d60 +Block 0023 [ 83]: 8c7d5e8c79bc0b95 +Block 0023 [ 84]: 1bf47b24e046db46 +Block 0023 [ 85]: 0366b4dbb095fc65 +Block 0023 [ 86]: a9403c73e1b574ff +Block 0023 [ 87]: 77fab0f60a5df650 +Block 0023 [ 88]: cc7ba3e9add465cf +Block 0023 [ 89]: b1feaef54d44d684 +Block 0023 [ 90]: 70c59b46799527d1 +Block 0023 [ 91]: 532b0ebc0afad373 +Block 0023 [ 92]: d04a620645a05717 +Block 0023 [ 93]: d7eb5dd9e3cdfdc6 +Block 0023 [ 94]: 1fa15db4d90e9643 +Block 0023 [ 95]: 150689421f9c19e5 +Block 0023 [ 96]: e8776793ccc305ac +Block 0023 [ 97]: 4720c416da67d942 +Block 0023 [ 98]: e0295389706e7198 +Block 0023 [ 99]: 61ddae9836604da5 +Block 0023 [100]: 0efa90593f7d286d +Block 0023 [101]: 5f470d10224b43db +Block 0023 [102]: 8cdb8a1c385b1ab5 +Block 0023 [103]: f65982042e0a4a53 +Block 0023 [104]: 5b914b8a3a09cca3 +Block 0023 [105]: 87d96b0eb194aae3 +Block 0023 [106]: 4b01105d03b0431f +Block 0023 [107]: b05129a7d4de80e1 +Block 0023 [108]: fa485ef8d1ea275a +Block 0023 [109]: 619da5c52438dc97 +Block 0023 [110]: 3ddd40726265c8fb +Block 0023 [111]: 9145517022fa85e0 +Block 0023 [112]: cd491181f5af124b +Block 0023 [113]: cf6a59f7420de634 +Block 0023 [114]: cb3249abde961732 +Block 0023 [115]: db33911f535c7f10 +Block 0023 [116]: 0b1c13597b7662f4 +Block 0023 [117]: ec9cdcbb4a807d87 +Block 0023 [118]: df7248a43cb72d02 +Block 0023 [119]: f97318ca3b133c5c +Block 0023 [120]: ac640dc6b2c51f82 +Block 0023 [121]: 2dbfb7a7aefcaa9b +Block 0023 [122]: d96e33495832ee13 +Block 0023 [123]: eb2b11dca1b85b4d +Block 0023 [124]: 0f1fa072f4eb94f1 +Block 0023 [125]: 795f7ad648403ed8 +Block 0023 [126]: c39a5565f68468df +Block 0023 [127]: 9b5911137e833734 +Block 0024 [ 0]: 19544ae260a1fe89 +Block 0024 [ 1]: a90b484bf81248d3 +Block 0024 [ 2]: 3aa17c66521420be +Block 0024 [ 3]: 6c997d1851d26765 +Block 0024 [ 4]: c58a7ea82170ab8b +Block 0024 [ 5]: 9ea19a31d951f70f +Block 0024 [ 6]: 5c0d564309159517 +Block 0024 [ 7]: b58da24d46ace1d0 +Block 0024 [ 8]: d5c1217fa46ae430 +Block 0024 [ 9]: f304ab6d7e537669 +Block 0024 [ 10]: aeea1b75e3507989 +Block 0024 [ 11]: 5eec96bd59daae4c +Block 0024 [ 12]: 1faacc7160416a4f +Block 0024 [ 13]: 28298c25197a9fea +Block 0024 [ 14]: 86944857f501fde4 +Block 0024 [ 15]: dc99890d787159b1 +Block 0024 [ 16]: 00abf614fa34bee2 +Block 0024 [ 17]: 8e9a6dbc73768e97 +Block 0024 [ 18]: 67c946912bf3035f +Block 0024 [ 19]: ec802a2fbbbc4854 +Block 0024 [ 20]: 837f827386a46736 +Block 0024 [ 21]: 9e0043e3ca1aa1d2 +Block 0024 [ 22]: 589f0de39b42db52 +Block 0024 [ 23]: 71f125e96c2e1d7c +Block 0024 [ 24]: bb410c18015520a9 +Block 0024 [ 25]: 46f6d90e6a2c94ed +Block 0024 [ 26]: 425626f90495ed2a +Block 0024 [ 27]: 8560f25c13bf5d47 +Block 0024 [ 28]: 5cad47824a048dba +Block 0024 [ 29]: f76db517190747c5 +Block 0024 [ 30]: c2afcae5d789b38d +Block 0024 [ 31]: 3aa9073bbee11840 +Block 0024 [ 32]: 692f0d7b53aeb157 +Block 0024 [ 33]: e589327308612979 +Block 0024 [ 34]: e2e90881ef58cd84 +Block 0024 [ 35]: 710422fdfc67897b +Block 0024 [ 36]: d2ddcfd2206b8463 +Block 0024 [ 37]: 86ce852d6197f6e1 +Block 0024 [ 38]: e3562daafb454d13 +Block 0024 [ 39]: 3183eec11eb00f1a +Block 0024 [ 40]: 59e474969a554c65 +Block 0024 [ 41]: 0047f774fd077fc8 +Block 0024 [ 42]: 1652bbe0098b386a +Block 0024 [ 43]: a3bc06c2c6f6b033 +Block 0024 [ 44]: 626a0b0174685989 +Block 0024 [ 45]: 7a0713a7d2284f17 +Block 0024 [ 46]: db7e15fe42c8e495 +Block 0024 [ 47]: a8e7232dc2034778 +Block 0024 [ 48]: d9edd376cb77b4c8 +Block 0024 [ 49]: 46a60d186591f2a8 +Block 0024 [ 50]: befd4ae47857cf74 +Block 0024 [ 51]: 34ef4d23f15d6ad2 +Block 0024 [ 52]: cb1890237eb064cf +Block 0024 [ 53]: 647d271993d6799f +Block 0024 [ 54]: a166dc6b15384277 +Block 0024 [ 55]: 24b2c02c08b4493c +Block 0024 [ 56]: 48f180b05feb6757 +Block 0024 [ 57]: 750330054f5166b7 +Block 0024 [ 58]: e791c9cf836a894b +Block 0024 [ 59]: 350c62af591a89b1 +Block 0024 [ 60]: 8068c97e650a680b +Block 0024 [ 61]: 602e5d7ec3090f9f +Block 0024 [ 62]: 5d895adb104bbfdb +Block 0024 [ 63]: 4969f86f4ed6ee1f +Block 0024 [ 64]: 2ade07ec3ae6b981 +Block 0024 [ 65]: 219647c06ad79029 +Block 0024 [ 66]: dfd39cd6e3477b99 +Block 0024 [ 67]: ef7aa5a0098cf293 +Block 0024 [ 68]: c051e96271121718 +Block 0024 [ 69]: 8c9ce5b1dea5759d +Block 0024 [ 70]: fdea1017a321e726 +Block 0024 [ 71]: 7512c935f90ed960 +Block 0024 [ 72]: b8d8d75db8272af7 +Block 0024 [ 73]: 1f14c26126a3e03a +Block 0024 [ 74]: d12a32abf2203212 +Block 0024 [ 75]: bc8807f4672f7316 +Block 0024 [ 76]: 653f65788dbe664d +Block 0024 [ 77]: fdc38532e373de3a +Block 0024 [ 78]: 8604aa43d188008e +Block 0024 [ 79]: f769e2f202d04174 +Block 0024 [ 80]: 4f033ec36a5422ab +Block 0024 [ 81]: 6b4f439714a27419 +Block 0024 [ 82]: 0e63fd9261f6eac4 +Block 0024 [ 83]: 398a388cabf5af9a +Block 0024 [ 84]: 3075d5227839e900 +Block 0024 [ 85]: d87769ccc8b9b72a +Block 0024 [ 86]: cef1dd87cddcb9d7 +Block 0024 [ 87]: 602486b18d8b3b6f +Block 0024 [ 88]: 095bc7aa54e363a8 +Block 0024 [ 89]: 869b52eee9661873 +Block 0024 [ 90]: 41efeea963d375f1 +Block 0024 [ 91]: f39ddd993bc819f1 +Block 0024 [ 92]: 732cd74c9521f132 +Block 0024 [ 93]: 42bd27be85ff5f7d +Block 0024 [ 94]: b84b542491097234 +Block 0024 [ 95]: 6e728e49d0c13956 +Block 0024 [ 96]: a0560af5f85a9640 +Block 0024 [ 97]: cb9e4f7c029b4388 +Block 0024 [ 98]: b31c47b6c7db14fe +Block 0024 [ 99]: e22c5792d48ae63b +Block 0024 [100]: e21fd21ac5af8e63 +Block 0024 [101]: 5fd33dcb458b29dc +Block 0024 [102]: bd284c0e68f994d6 +Block 0024 [103]: d5bf807f4b9cecd9 +Block 0024 [104]: 8f42b5d58b200307 +Block 0024 [105]: 2280b5e6d94f43e2 +Block 0024 [106]: 19e9b92a0f0c54e2 +Block 0024 [107]: 55e67859224bea91 +Block 0024 [108]: 8f5d82f0d4e29050 +Block 0024 [109]: 4d500153a41c5faa +Block 0024 [110]: 3dc5aa1f24e10a18 +Block 0024 [111]: c64497a88ab19e13 +Block 0024 [112]: ee171eff18a2e8eb +Block 0024 [113]: 8a2bdd1af95429af +Block 0024 [114]: 5bed3c8488f49a43 +Block 0024 [115]: 9c11cba1d6d29d63 +Block 0024 [116]: fd2ef7237161c78b +Block 0024 [117]: fe83e69bdaea394c +Block 0024 [118]: f4eddd0618cb4d93 +Block 0024 [119]: 8deb5cb8b9536492 +Block 0024 [120]: b6de734754f92f1c +Block 0024 [121]: e3ae9642edd9edb8 +Block 0024 [122]: 71a85b6a1bb7e4e8 +Block 0024 [123]: 9464bb6dfd50f897 +Block 0024 [124]: db5e7e8b0d3d21dd +Block 0024 [125]: 4d2defa4a0d165f7 +Block 0024 [126]: 59664f6fa7f0d2ca +Block 0024 [127]: 8b6bb9688d145794 +Block 0025 [ 0]: c320877b761ba145 +Block 0025 [ 1]: b4a070fa931b59cc +Block 0025 [ 2]: 55f0dae9ab8959c6 +Block 0025 [ 3]: 48963ab3a5a3ab38 +Block 0025 [ 4]: 59c647c2fd70c35d +Block 0025 [ 5]: a24c7b50ceb02a78 +Block 0025 [ 6]: 6bbb53aeb0e275fb +Block 0025 [ 7]: 0bca6bfb5cf30d40 +Block 0025 [ 8]: fe50a6541bee00b9 +Block 0025 [ 9]: a200dbab13260ed0 +Block 0025 [ 10]: fb7e0640663aa3d5 +Block 0025 [ 11]: ad5b65eb577ab28a +Block 0025 [ 12]: c42e17a46768d25b +Block 0025 [ 13]: c0f25775be4bde1b +Block 0025 [ 14]: a03f4ab570eb0864 +Block 0025 [ 15]: b876833a9029276f +Block 0025 [ 16]: bf9341b678c791bb +Block 0025 [ 17]: cda314edc730979c +Block 0025 [ 18]: 37e2272bd5e77953 +Block 0025 [ 19]: 2d1737c17a79ac4a +Block 0025 [ 20]: 19588d0cd12717fb +Block 0025 [ 21]: 3fb22e5d6d00a14d +Block 0025 [ 22]: b8b180c8b64598a7 +Block 0025 [ 23]: c62a52b1873fa546 +Block 0025 [ 24]: d13f17fd366423aa +Block 0025 [ 25]: f7ca73a416f130d7 +Block 0025 [ 26]: 97c6de62108ea500 +Block 0025 [ 27]: 7c8a275dc4b0527c +Block 0025 [ 28]: 22e257327c9bd81a +Block 0025 [ 29]: 1005107b639db935 +Block 0025 [ 30]: 56ccf5386e0a797e +Block 0025 [ 31]: c434dbd212be0379 +Block 0025 [ 32]: c5e828156b2b1724 +Block 0025 [ 33]: d149d5eef4038aae +Block 0025 [ 34]: f20dc40228486a09 +Block 0025 [ 35]: c23b6038712599fb +Block 0025 [ 36]: c084fafb50e196be +Block 0025 [ 37]: 8401889d76da39c0 +Block 0025 [ 38]: 1bf4be3a8eb6580c +Block 0025 [ 39]: 50613c74ba8b2c36 +Block 0025 [ 40]: 0c5d8e3387b53b46 +Block 0025 [ 41]: b5496f10e08319bd +Block 0025 [ 42]: 4d0b58b1b36a5a04 +Block 0025 [ 43]: f26cfd5a23651288 +Block 0025 [ 44]: 511fae11df2b925c +Block 0025 [ 45]: 2a584bc4560e6b06 +Block 0025 [ 46]: 2f0d04783ef0ae17 +Block 0025 [ 47]: 61b2862af0e16017 +Block 0025 [ 48]: 393c0a2cb70ed4d4 +Block 0025 [ 49]: 70b771d466036515 +Block 0025 [ 50]: f702840aa7265d51 +Block 0025 [ 51]: e7be7ec6074b425a +Block 0025 [ 52]: 0fb8dff33cee9f39 +Block 0025 [ 53]: 4b4ce08a3d4a0165 +Block 0025 [ 54]: 802f78c379876de2 +Block 0025 [ 55]: 0e2793e42daeca5c +Block 0025 [ 56]: d4abf5fab9b4995e +Block 0025 [ 57]: 82ebf71518037bef +Block 0025 [ 58]: 3ce0728aa4758e65 +Block 0025 [ 59]: bb3b390fc4ba0cb2 +Block 0025 [ 60]: 42839bb443791583 +Block 0025 [ 61]: 2cfb87bc983e7870 +Block 0025 [ 62]: f42330724740380d +Block 0025 [ 63]: 98f4628dac1e99bc +Block 0025 [ 64]: c4c9c879c60adc22 +Block 0025 [ 65]: 3eead01a59e0b172 +Block 0025 [ 66]: 66b0b83a428296bb +Block 0025 [ 67]: 2dfc02e721a693a6 +Block 0025 [ 68]: ab9b6351ebc16419 +Block 0025 [ 69]: 6d0b84af8fc9cc0c +Block 0025 [ 70]: bd78dc4faf96665b +Block 0025 [ 71]: 366e84d6687882e7 +Block 0025 [ 72]: 6e4be22e1794d368 +Block 0025 [ 73]: ef83a9f950487282 +Block 0025 [ 74]: efd690a7c965908c +Block 0025 [ 75]: 81aa5bb0ba86005c +Block 0025 [ 76]: 7fb6b179052765ed +Block 0025 [ 77]: f7740714636229c5 +Block 0025 [ 78]: 594bab77f4fc97bb +Block 0025 [ 79]: 9c532bc00614dc28 +Block 0025 [ 80]: 74259d5f871c69e7 +Block 0025 [ 81]: ade983a76defaa4e +Block 0025 [ 82]: 3929c168c2ae7ec2 +Block 0025 [ 83]: 46da67711bb8a797 +Block 0025 [ 84]: 9e4d6605e5865868 +Block 0025 [ 85]: 03f54e2a451ae7d1 +Block 0025 [ 86]: bfa46927418df17e +Block 0025 [ 87]: d46bee7f24a285b2 +Block 0025 [ 88]: d8cb8e1968495eaa +Block 0025 [ 89]: 0cd0dc3525ba10c7 +Block 0025 [ 90]: baca910a7552ead2 +Block 0025 [ 91]: 0f8d9cc7b91e3a23 +Block 0025 [ 92]: fb724d1bfe345f18 +Block 0025 [ 93]: e8a17fc3a88a79c8 +Block 0025 [ 94]: de1c975f49d11ea4 +Block 0025 [ 95]: 83932ec2bb6f4ce7 +Block 0025 [ 96]: d36001488800d278 +Block 0025 [ 97]: 2acc2e4f98349965 +Block 0025 [ 98]: ade89929772b2233 +Block 0025 [ 99]: 71b0bf3568125f41 +Block 0025 [100]: fc9b1cce8dacff6a +Block 0025 [101]: 3dd2ded9dc844bda +Block 0025 [102]: d430deac04e9f487 +Block 0025 [103]: 27651351fec68a87 +Block 0025 [104]: 3e0284bc16405c08 +Block 0025 [105]: 49a51c86dce8dd94 +Block 0025 [106]: 37c724beed957310 +Block 0025 [107]: 2b434cbd05e98b33 +Block 0025 [108]: 3d8a05458c115608 +Block 0025 [109]: 40a3068e604b61db +Block 0025 [110]: b5c7a77e038abc55 +Block 0025 [111]: 253c5666950181ab +Block 0025 [112]: 96daf52bd1165717 +Block 0025 [113]: 2adc2ddae4b5ff82 +Block 0025 [114]: a3df6a379964cb33 +Block 0025 [115]: 07437f2749ead995 +Block 0025 [116]: 696d5df46fe37235 +Block 0025 [117]: 39ac9b4253bc8c74 +Block 0025 [118]: 1f4d4f88f980a8f5 +Block 0025 [119]: 4f8c0a082057e21d +Block 0025 [120]: e137d8667c968404 +Block 0025 [121]: f4a5e049476831a3 +Block 0025 [122]: 01c28ffd0c6afa51 +Block 0025 [123]: edb93ba57f459a65 +Block 0025 [124]: 91c72c2b3df105f5 +Block 0025 [125]: e5082ab282eb7758 +Block 0025 [126]: dc10549b836c0675 +Block 0025 [127]: 8a6fd560181ca34a +Block 0026 [ 0]: 7787e1b17f8b7213 +Block 0026 [ 1]: 38b0ed15bcfd0d2b +Block 0026 [ 2]: a2e51631d461450d +Block 0026 [ 3]: 0d43a20398da0d83 +Block 0026 [ 4]: 66bd336361cbe7ea +Block 0026 [ 5]: 9b1b590e17ed1971 +Block 0026 [ 6]: e0ed8e7f87628cba +Block 0026 [ 7]: 3709e578ed58d044 +Block 0026 [ 8]: 6f3c9df36aed3800 +Block 0026 [ 9]: 6f7a33ee11f88d24 +Block 0026 [ 10]: aed550ae646f153b +Block 0026 [ 11]: 36457ca90d54a60a +Block 0026 [ 12]: 7d06b80d22b9a481 +Block 0026 [ 13]: 6b4733c01744613d +Block 0026 [ 14]: 7c17d3703fd46741 +Block 0026 [ 15]: 04ae98470050c642 +Block 0026 [ 16]: a5a19388adf1e43e +Block 0026 [ 17]: fbc2a2dc038db68f +Block 0026 [ 18]: c4bdd4abd293f1b0 +Block 0026 [ 19]: 5d2331ad37f0bbe8 +Block 0026 [ 20]: effca955c329ca97 +Block 0026 [ 21]: 2a1a32ef4ca5397b +Block 0026 [ 22]: aa8f102b0737879e +Block 0026 [ 23]: 0a4af7962c2815b8 +Block 0026 [ 24]: e2902b18ce3342e7 +Block 0026 [ 25]: 44e98690c16d907d +Block 0026 [ 26]: 717ecd63fb9bc693 +Block 0026 [ 27]: 1a7c4a0985a0070e +Block 0026 [ 28]: dae416e8736f2537 +Block 0026 [ 29]: 6a608b0ea85cf02e +Block 0026 [ 30]: efc4102444c22c9d +Block 0026 [ 31]: e731ea0b9f46e701 +Block 0026 [ 32]: 60ae50f08358b083 +Block 0026 [ 33]: cac388635b6cfd3e +Block 0026 [ 34]: 95c96e422e666b00 +Block 0026 [ 35]: 27e360107749d81c +Block 0026 [ 36]: b5324834762b6f59 +Block 0026 [ 37]: 6063ebe9a361f5e6 +Block 0026 [ 38]: 7cd3ca1c59dc2cf5 +Block 0026 [ 39]: dcd32c6af49be138 +Block 0026 [ 40]: 1114a79b8559972e +Block 0026 [ 41]: d754b3285bfbe7c8 +Block 0026 [ 42]: 65a05b0cbbaba55a +Block 0026 [ 43]: 0a345bdf50bf9271 +Block 0026 [ 44]: 4f8fca8cf71ecc35 +Block 0026 [ 45]: 9af421d42dd3e2fd +Block 0026 [ 46]: 790a2c830694f95e +Block 0026 [ 47]: 13277aca6f47c0ca +Block 0026 [ 48]: faf7b46c0635c300 +Block 0026 [ 49]: 9bb87d21df5ce055 +Block 0026 [ 50]: 9ea3ccf7593f4223 +Block 0026 [ 51]: 972196d81877e016 +Block 0026 [ 52]: ee24e2390712cef0 +Block 0026 [ 53]: 0d5ba8f740c8635a +Block 0026 [ 54]: 9cbe5eed690355fa +Block 0026 [ 55]: 9ae45b8ba88a7ee8 +Block 0026 [ 56]: cbc74d17ca2e2120 +Block 0026 [ 57]: f1dbff2e0a0a963a +Block 0026 [ 58]: 898dceb936985d35 +Block 0026 [ 59]: 68399cc0fb5b4f5b +Block 0026 [ 60]: 6b339f4dd21ee52b +Block 0026 [ 61]: 1ccb60bbece0b314 +Block 0026 [ 62]: 67ef77abb1f679e3 +Block 0026 [ 63]: 725403dfdfea6766 +Block 0026 [ 64]: ceea6a9482466593 +Block 0026 [ 65]: 0f6fe2bf8ebd08aa +Block 0026 [ 66]: 4c93f88b4040ce00 +Block 0026 [ 67]: 461c420c864292d2 +Block 0026 [ 68]: 005fffeac6bf989d +Block 0026 [ 69]: 8e57dc0cd187b0a8 +Block 0026 [ 70]: 40e56f7495b3245d +Block 0026 [ 71]: fc30919451bff2dd +Block 0026 [ 72]: e6bc501d0d5f6627 +Block 0026 [ 73]: 06302090b6c9a247 +Block 0026 [ 74]: 8108bbb6f845954c +Block 0026 [ 75]: a46a02be4fd8109b +Block 0026 [ 76]: 18449b4910984976 +Block 0026 [ 77]: 627d1da56c93283f +Block 0026 [ 78]: 3ea2709034683c54 +Block 0026 [ 79]: aa66780464acc060 +Block 0026 [ 80]: 3799a4195532e48a +Block 0026 [ 81]: 2be57e5e6d2574dd +Block 0026 [ 82]: 6b175c17210e5f83 +Block 0026 [ 83]: 36d9322e01b4d188 +Block 0026 [ 84]: 8903c58d72114572 +Block 0026 [ 85]: eb12c42494273c25 +Block 0026 [ 86]: 2ff9cf1cba192da0 +Block 0026 [ 87]: ece184354ffaca0f +Block 0026 [ 88]: 8be22a1b176220f4 +Block 0026 [ 89]: f389e6c2a34d6f02 +Block 0026 [ 90]: 5eb639bbfcac89e3 +Block 0026 [ 91]: ee4954ff1088d75f +Block 0026 [ 92]: 40fc9ea79cb8ea53 +Block 0026 [ 93]: 37031bf3a0da4c68 +Block 0026 [ 94]: a3d7d6b500f23ea1 +Block 0026 [ 95]: 0e25050f11b8c6e2 +Block 0026 [ 96]: 1dcfef79189cd6ea +Block 0026 [ 97]: d55c64e2688a9387 +Block 0026 [ 98]: 854f67dff13be8dc +Block 0026 [ 99]: 73d776ccda670f31 +Block 0026 [100]: 733597e56ce06e48 +Block 0026 [101]: b1ba59f9fdd19824 +Block 0026 [102]: 505cb5283934f36f +Block 0026 [103]: 76a4a4e76280bd43 +Block 0026 [104]: 82762a9747778007 +Block 0026 [105]: 0b8e9ba737a69853 +Block 0026 [106]: 07eb4517abf8f59e +Block 0026 [107]: 6cfa132c67ddaf9f +Block 0026 [108]: dc82c73163acec84 +Block 0026 [109]: 8d2b9b17c3ec0528 +Block 0026 [110]: 39af2ae695f99141 +Block 0026 [111]: 19a879e403ee3f71 +Block 0026 [112]: b7b713bc8c58b905 +Block 0026 [113]: 8837db614637ff11 +Block 0026 [114]: 72420905a2ba9df5 +Block 0026 [115]: 8b4a379f3e156cd9 +Block 0026 [116]: 399fc6bbc18599a3 +Block 0026 [117]: cd9f7dacec38c90f +Block 0026 [118]: 1e50976d023819ca +Block 0026 [119]: 702eea7106b1ee55 +Block 0026 [120]: e822fcb19d6bddf8 +Block 0026 [121]: 9c1d0a694f21ef4b +Block 0026 [122]: 81edbcb110767596 +Block 0026 [123]: 68177967dab9ea1c +Block 0026 [124]: e63bb5189aaefafd +Block 0026 [125]: 07b85177bdec787e +Block 0026 [126]: 82e90e729283b121 +Block 0026 [127]: 5c38fc13b16fadd7 +Block 0027 [ 0]: 12930e6a057db3dc +Block 0027 [ 1]: d36a092bdc01e5e2 +Block 0027 [ 2]: 9f38ab342482fe49 +Block 0027 [ 3]: f974fc7ba1aa4fa8 +Block 0027 [ 4]: a92ee342c95f0c16 +Block 0027 [ 5]: 5fa4cd78ef7c546e +Block 0027 [ 6]: 7530efe11190c6cf +Block 0027 [ 7]: 7dc4e9115082c64a +Block 0027 [ 8]: 7e50a5c226d14b92 +Block 0027 [ 9]: c10c38aedbde3476 +Block 0027 [ 10]: 63a10362c500407c +Block 0027 [ 11]: 38d06cebed582370 +Block 0027 [ 12]: a6d17e59dd8d79e1 +Block 0027 [ 13]: 3f560be8c3116feb +Block 0027 [ 14]: f1a98624843f0e06 +Block 0027 [ 15]: 5b605da6ea36cb76 +Block 0027 [ 16]: 0a998d1b462b9636 +Block 0027 [ 17]: 20c9bc32a8fb2c68 +Block 0027 [ 18]: 6b033a31a9d38e4d +Block 0027 [ 19]: 71e616a3e9371928 +Block 0027 [ 20]: fb93b58238f371bc +Block 0027 [ 21]: 19c3c8b589136419 +Block 0027 [ 22]: b58736bab4e0456d +Block 0027 [ 23]: a26647abf0d6ecbd +Block 0027 [ 24]: ebbf19504cbf5844 +Block 0027 [ 25]: 4c5efff112625110 +Block 0027 [ 26]: 59dc758ebdb3f7db +Block 0027 [ 27]: b37f98da7ebec9f1 +Block 0027 [ 28]: cfd2e95dda6b5110 +Block 0027 [ 29]: f1f99e59b552c90b +Block 0027 [ 30]: e47fc3a80048984b +Block 0027 [ 31]: a91ae33cac719918 +Block 0027 [ 32]: 13183079f3445bb9 +Block 0027 [ 33]: b11458d8655b5d1e +Block 0027 [ 34]: 344e18738fc9a152 +Block 0027 [ 35]: 4b5e13937faa8d66 +Block 0027 [ 36]: bef80972ec679c98 +Block 0027 [ 37]: 03e5e4f7b3a6f1f1 +Block 0027 [ 38]: ea70f0fddee3e6d9 +Block 0027 [ 39]: 146fb2c49fdf235f +Block 0027 [ 40]: 6047ed94889fcd7a +Block 0027 [ 41]: 4ca5532aa52131f0 +Block 0027 [ 42]: cbb5b45a4c542dca +Block 0027 [ 43]: e653642f7a991cee +Block 0027 [ 44]: 02df1b6bcd671363 +Block 0027 [ 45]: bfccfd002b010fc1 +Block 0027 [ 46]: 932095f8fcb37e53 +Block 0027 [ 47]: 35e614f689c05f47 +Block 0027 [ 48]: 1b74807f55e0b06a +Block 0027 [ 49]: 4eb2f12dba075a46 +Block 0027 [ 50]: f0982642ef5559ac +Block 0027 [ 51]: 3422bc053329d35f +Block 0027 [ 52]: 8e431bb2418f2552 +Block 0027 [ 53]: bfac86b81ed9ae9a +Block 0027 [ 54]: cacc8aa08da0e75b +Block 0027 [ 55]: ee31b0c8eb4204b5 +Block 0027 [ 56]: cbdbcfd30e0cba0f +Block 0027 [ 57]: 671d0b0c3726efc9 +Block 0027 [ 58]: b0c4ab8d5906da13 +Block 0027 [ 59]: e5b95a70fa01a0eb +Block 0027 [ 60]: a1d1f26bfd9f3577 +Block 0027 [ 61]: 359023a672a6a5f0 +Block 0027 [ 62]: 370ddd312a434fb5 +Block 0027 [ 63]: 74da84c2881a3683 +Block 0027 [ 64]: d6828e4ba965222d +Block 0027 [ 65]: 595dc11dad7f9a30 +Block 0027 [ 66]: 73068b819a5e5aee +Block 0027 [ 67]: 15369ddd1a6d970c +Block 0027 [ 68]: 3f462c04b0b7a365 +Block 0027 [ 69]: 917e1403575f4ab6 +Block 0027 [ 70]: 2273d2ffdcbf1d12 +Block 0027 [ 71]: ddd0ba35d1168aa3 +Block 0027 [ 72]: 75cbb653840a4cbf +Block 0027 [ 73]: a6c8c0c60b0d8586 +Block 0027 [ 74]: eff7b12a4d557ec8 +Block 0027 [ 75]: 120404a563f5833a +Block 0027 [ 76]: 0126fd04246359fc +Block 0027 [ 77]: 7b062c25b5f01e0e +Block 0027 [ 78]: d77425a03db505f5 +Block 0027 [ 79]: 0f3cb0da8c62a3c1 +Block 0027 [ 80]: 36e521a3f8ee260e +Block 0027 [ 81]: 6daabf1b23d415e9 +Block 0027 [ 82]: 351544dc1bc2ade2 +Block 0027 [ 83]: 73a2f4cbf0c61a71 +Block 0027 [ 84]: 9b85fb6bf47e113b +Block 0027 [ 85]: 1069d94fb273a533 +Block 0027 [ 86]: ce9b89a370984d0a +Block 0027 [ 87]: 6450d2025404e384 +Block 0027 [ 88]: fb7a4386879734bc +Block 0027 [ 89]: e46fd6fd1275c166 +Block 0027 [ 90]: ee016a4cac3d0cee +Block 0027 [ 91]: fffc68927242f65b +Block 0027 [ 92]: 0a1887efbe2788b7 +Block 0027 [ 93]: 1b58841d77287271 +Block 0027 [ 94]: d152260d9308572b +Block 0027 [ 95]: ece6f963e3ebbbc5 +Block 0027 [ 96]: e7223810f5627ce1 +Block 0027 [ 97]: 1b3981f28853088f +Block 0027 [ 98]: 65c286c9e8dcfbd0 +Block 0027 [ 99]: 1ee47c556fbc9547 +Block 0027 [100]: 6143d92f2a00e43e +Block 0027 [101]: 0910c819d3fbd6c5 +Block 0027 [102]: 83a6c3c6178941aa +Block 0027 [103]: fdcae49032578ab3 +Block 0027 [104]: d401f44c9ce96675 +Block 0027 [105]: 38f7ee360016ae89 +Block 0027 [106]: dce9785998cd7e5a +Block 0027 [107]: 1d62c2e64198819b +Block 0027 [108]: de11552f926a3154 +Block 0027 [109]: 70c03577942da684 +Block 0027 [110]: bbd8b1f50967abcf +Block 0027 [111]: dbc8c3667580889f +Block 0027 [112]: 8149d1c48a57948e +Block 0027 [113]: 61f5496ee9cfbbd2 +Block 0027 [114]: 4ac6319d2de8dc93 +Block 0027 [115]: 27c3d16c6b798aba +Block 0027 [116]: c88e4c2f6f071746 +Block 0027 [117]: edcd89159e9013ce +Block 0027 [118]: 8e2e169861431d0d +Block 0027 [119]: 5edebc7fcf5da7bc +Block 0027 [120]: 382bbc7274d680db +Block 0027 [121]: 00b6ff6e1d75dc45 +Block 0027 [122]: a76a9eed4900a8d1 +Block 0027 [123]: 7f484b5d28c8a586 +Block 0027 [124]: 295b53fe63506698 +Block 0027 [125]: 558a174b4e127e0e +Block 0027 [126]: 684094fc58d7e254 +Block 0027 [127]: dbe06eb544f1906e +Block 0028 [ 0]: ddb78852644e4fb9 +Block 0028 [ 1]: 8157ed8a8df838d8 +Block 0028 [ 2]: 368f13a1b3a19b11 +Block 0028 [ 3]: d4f19f1eb6e95356 +Block 0028 [ 4]: 1e1b78d80bf53bd4 +Block 0028 [ 5]: 4fdb694933b6c774 +Block 0028 [ 6]: 6ddfca93b71e9a0f +Block 0028 [ 7]: a57c49965a92a2ab +Block 0028 [ 8]: 4fcc400c2b8db1d1 +Block 0028 [ 9]: 64cc43e293565b56 +Block 0028 [ 10]: 4b45a5f1b8517500 +Block 0028 [ 11]: 11e2bab5266c6f45 +Block 0028 [ 12]: 86beeced6cae59b9 +Block 0028 [ 13]: 45dffb5c4715fe45 +Block 0028 [ 14]: 2c9591fd02b19e55 +Block 0028 [ 15]: dab8017fe48f8420 +Block 0028 [ 16]: 25c31011171393eb +Block 0028 [ 17]: 5cbd5c588c21d872 +Block 0028 [ 18]: 316d50b90b137b97 +Block 0028 [ 19]: 5924c498b1765b2f +Block 0028 [ 20]: 2a0f743760ccc424 +Block 0028 [ 21]: 30f97a465a2b737b +Block 0028 [ 22]: 4646d157fecaceb8 +Block 0028 [ 23]: e5f9e8a4c6f1115c +Block 0028 [ 24]: 1766f2e20c969a26 +Block 0028 [ 25]: 6c2e97942c33c4e5 +Block 0028 [ 26]: 7424f24156e95a3f +Block 0028 [ 27]: 872bbb2e45e22ce5 +Block 0028 [ 28]: 5c11165dd1a85e90 +Block 0028 [ 29]: 34dceb5459d0114d +Block 0028 [ 30]: a1f187f262b4e88c +Block 0028 [ 31]: 9e1ca88530d2b53c +Block 0028 [ 32]: fc6a2ecbab308670 +Block 0028 [ 33]: 3fd7c88081e86c28 +Block 0028 [ 34]: f38d8bd2f6673049 +Block 0028 [ 35]: d5d9f983810b9631 +Block 0028 [ 36]: b22bb71dc25daa1a +Block 0028 [ 37]: fbe85a9b293b63c4 +Block 0028 [ 38]: 1b267938f53b24be +Block 0028 [ 39]: 646356bba6645a62 +Block 0028 [ 40]: 08c4f441c8b9e50c +Block 0028 [ 41]: ac2a12479f405658 +Block 0028 [ 42]: 2154f7818668aaba +Block 0028 [ 43]: 5020654424e00306 +Block 0028 [ 44]: f69468f9c6058b91 +Block 0028 [ 45]: edb043fd6c771c66 +Block 0028 [ 46]: 1287182ed24b66af +Block 0028 [ 47]: 5fa6715eb508cb2f +Block 0028 [ 48]: 7f2e3eebc7622dd2 +Block 0028 [ 49]: 4872d48ca3d3044a +Block 0028 [ 50]: 9afe8b801d70981e +Block 0028 [ 51]: 37dc872e96e1fa5e +Block 0028 [ 52]: 065674818a30fb71 +Block 0028 [ 53]: f15637fc6066ab39 +Block 0028 [ 54]: dd012664e2e963fc +Block 0028 [ 55]: 11f468e6f8ead720 +Block 0028 [ 56]: 0d4bf81380f5f7b7 +Block 0028 [ 57]: bf387f5347f51a2b +Block 0028 [ 58]: 80830d570d6be9fa +Block 0028 [ 59]: 0fbdf32510ef4109 +Block 0028 [ 60]: 865abaf1fad7c7c6 +Block 0028 [ 61]: 5f8a61d65fbcff4e +Block 0028 [ 62]: ca1e5596912d75b7 +Block 0028 [ 63]: 7b12b1246fbb312a +Block 0028 [ 64]: 216f63fbd7cee1ad +Block 0028 [ 65]: 3304bd0ad61aa327 +Block 0028 [ 66]: 7b406a15e6a554dd +Block 0028 [ 67]: 4b861fd7abc69337 +Block 0028 [ 68]: cd61bc81c3a5710a +Block 0028 [ 69]: bacf74038200ade1 +Block 0028 [ 70]: 2eb50854ecb1b89c +Block 0028 [ 71]: 6ce4f13fcd047978 +Block 0028 [ 72]: 1ffd893cf06817b1 +Block 0028 [ 73]: 019e6cdd343ba3b5 +Block 0028 [ 74]: 6ad77b96e6cb27f7 +Block 0028 [ 75]: fd0447e79123f630 +Block 0028 [ 76]: 60c59aa378c9d746 +Block 0028 [ 77]: b7047b78dcdda7f6 +Block 0028 [ 78]: 1675c7d66cb47094 +Block 0028 [ 79]: ca5eefb7cb436aee +Block 0028 [ 80]: a4207e30dd8f6abe +Block 0028 [ 81]: cd3d5e1bc0851543 +Block 0028 [ 82]: 59df14e5a994447b +Block 0028 [ 83]: 6212bdad1c5236ba +Block 0028 [ 84]: 50f2b2aa5d88720e +Block 0028 [ 85]: 7e957c908b1fe13f +Block 0028 [ 86]: 8faccec71ce74717 +Block 0028 [ 87]: 694c00d349687830 +Block 0028 [ 88]: 2c4704f4942761f9 +Block 0028 [ 89]: 2b7f14df7894d243 +Block 0028 [ 90]: e6690e21770bdbd8 +Block 0028 [ 91]: c5f1b5c597c611d4 +Block 0028 [ 92]: 695bfbb7c5b6d205 +Block 0028 [ 93]: 7f4dd31a22323b21 +Block 0028 [ 94]: 1c82e4fe143a3a87 +Block 0028 [ 95]: 3d67e3a318ec260f +Block 0028 [ 96]: 0e1d2cf60450d635 +Block 0028 [ 97]: 2616a3ea45b9fe98 +Block 0028 [ 98]: fc913a01b60d4ef4 +Block 0028 [ 99]: dce48585f1e70b80 +Block 0028 [100]: 86ca2b0246017f0e +Block 0028 [101]: 603a6902077571cd +Block 0028 [102]: 10dc341e0cfd16f1 +Block 0028 [103]: e541553b8d4335c9 +Block 0028 [104]: 66d981c8d54ab580 +Block 0028 [105]: bf4d8514c40adadc +Block 0028 [106]: 10d48b8199c6b610 +Block 0028 [107]: b5bc74240320de57 +Block 0028 [108]: af7668ece2e84c7e +Block 0028 [109]: e3130bb9f194f006 +Block 0028 [110]: ac94f63610240c95 +Block 0028 [111]: a57c35e5bc18208a +Block 0028 [112]: e1e559ad43561660 +Block 0028 [113]: 9e0396432e4fb2b0 +Block 0028 [114]: d9eecd132cf253e7 +Block 0028 [115]: 5c6c1e86338d3843 +Block 0028 [116]: 4a0f9767c564c7fd +Block 0028 [117]: 451ad2c0b4837694 +Block 0028 [118]: b919b729cdf423bc +Block 0028 [119]: 38166219dae5e549 +Block 0028 [120]: d80cee45d4cec8d6 +Block 0028 [121]: b29d77b88e5d7043 +Block 0028 [122]: d3a30d963e19f957 +Block 0028 [123]: 97dabe16dde3eb61 +Block 0028 [124]: baf0424359c13ff1 +Block 0028 [125]: fc25e968e22146eb +Block 0028 [126]: 8aba818396994000 +Block 0028 [127]: c48f6fdace29cf9d +Block 0029 [ 0]: 225b64c780f39256 +Block 0029 [ 1]: 5147dc905e69a0db +Block 0029 [ 2]: 4c7942255ca27d88 +Block 0029 [ 3]: 8229b91388cfb1ae +Block 0029 [ 4]: 77e41def90535d0b +Block 0029 [ 5]: 60e9faecef01a27c +Block 0029 [ 6]: 588f421dc2ceaeec +Block 0029 [ 7]: abdd9949472c2af1 +Block 0029 [ 8]: a2b25cd56b4a8e35 +Block 0029 [ 9]: c7a089f905ef9af7 +Block 0029 [ 10]: 984e0141b144c4ac +Block 0029 [ 11]: e7e81071cf5a3a28 +Block 0029 [ 12]: e1877aa5c8515358 +Block 0029 [ 13]: e2b44eec3f348c9d +Block 0029 [ 14]: 2c656eabc4c92995 +Block 0029 [ 15]: 7a4b4b7e40cd548d +Block 0029 [ 16]: a3256ff7e5eb7769 +Block 0029 [ 17]: dd83e20dbf429f74 +Block 0029 [ 18]: 70a48f575e6f5d04 +Block 0029 [ 19]: 4127e6148d99f6ca +Block 0029 [ 20]: 472d9760ec55f6c2 +Block 0029 [ 21]: 4a13aa3a38cbd14e +Block 0029 [ 22]: 45203b263388ba70 +Block 0029 [ 23]: 20cc48efc33f1c47 +Block 0029 [ 24]: d37ae14d8c380707 +Block 0029 [ 25]: 5d88011d318a9eb1 +Block 0029 [ 26]: 5a7bcd8ae96845a8 +Block 0029 [ 27]: 82fb579f8cae5f10 +Block 0029 [ 28]: e0b5c3cd5c716035 +Block 0029 [ 29]: b23baef06e65d007 +Block 0029 [ 30]: e74730eecf9fe525 +Block 0029 [ 31]: a58d022815708b41 +Block 0029 [ 32]: ad2f92a14bd509e1 +Block 0029 [ 33]: 4c263e4d0ba9f61f +Block 0029 [ 34]: ef945be10969cf1d +Block 0029 [ 35]: 26238bd507503c18 +Block 0029 [ 36]: 10edc88eae06b7f1 +Block 0029 [ 37]: aa77af94ae98a96a +Block 0029 [ 38]: f5b6f7f01849769f +Block 0029 [ 39]: 018464b91abc2a1c +Block 0029 [ 40]: 09bb750f89cf9c2c +Block 0029 [ 41]: bdf625a05c80e043 +Block 0029 [ 42]: 004149c8ac887102 +Block 0029 [ 43]: a32bff9a62c2a7e3 +Block 0029 [ 44]: b1db20ddbe124fad +Block 0029 [ 45]: 1e55616eb04c3f84 +Block 0029 [ 46]: 56f964e84266f7e8 +Block 0029 [ 47]: 372a6c740da9c762 +Block 0029 [ 48]: 2604cb4e6455c382 +Block 0029 [ 49]: 3959bcce8d32b584 +Block 0029 [ 50]: 20c4a1dce4e44856 +Block 0029 [ 51]: e872e71fdd213d98 +Block 0029 [ 52]: ff576355fbe1ce1f +Block 0029 [ 53]: 168d7d1478765f35 +Block 0029 [ 54]: ef0928a5c3c145a1 +Block 0029 [ 55]: d293b5b27b7e72ec +Block 0029 [ 56]: e5dc2424b6f8b604 +Block 0029 [ 57]: f2983bcacecf4aa1 +Block 0029 [ 58]: 456d60bc3fee9203 +Block 0029 [ 59]: 1fc3a7781da2242c +Block 0029 [ 60]: a2c160c30dba2e35 +Block 0029 [ 61]: 82ed201b0e1caa9b +Block 0029 [ 62]: 06cf39b3dfc2f9f8 +Block 0029 [ 63]: 094b0feafb722040 +Block 0029 [ 64]: 8d98b7132e79384a +Block 0029 [ 65]: bd1f6dcf9268e96c +Block 0029 [ 66]: 65794241aa1db26a +Block 0029 [ 67]: 6ba30654dd5508d7 +Block 0029 [ 68]: 38e2cecc5ef5b3c3 +Block 0029 [ 69]: c0caeedd012543b1 +Block 0029 [ 70]: 97d124d6b9231255 +Block 0029 [ 71]: 924a3eabe40ed3c2 +Block 0029 [ 72]: bef4ffe2aa528ad5 +Block 0029 [ 73]: 7459989ae48c7456 +Block 0029 [ 74]: 15af22c8d046ed3d +Block 0029 [ 75]: b9a7b35b20e04a44 +Block 0029 [ 76]: a9fa2b538f6fdc91 +Block 0029 [ 77]: 627e222380b163a6 +Block 0029 [ 78]: 750e4474b3fedbc4 +Block 0029 [ 79]: fd8f06d128d7122d +Block 0029 [ 80]: dcca40c3aad30d42 +Block 0029 [ 81]: c9e560e59aff9e68 +Block 0029 [ 82]: af44daa4c21961fd +Block 0029 [ 83]: 68d956313ca4ee2a +Block 0029 [ 84]: 559f4802f58cab76 +Block 0029 [ 85]: de4b232ebdb885e9 +Block 0029 [ 86]: da18676f9822e90e +Block 0029 [ 87]: c7faa08eac54f0e9 +Block 0029 [ 88]: 7bbee29f3ae924d6 +Block 0029 [ 89]: b31156de74c31bdd +Block 0029 [ 90]: dd612ef379062a16 +Block 0029 [ 91]: b9a6fa7267d37107 +Block 0029 [ 92]: 978f2e1b5d57ef40 +Block 0029 [ 93]: 1257fa63203fa38c +Block 0029 [ 94]: b45bff452b049baf +Block 0029 [ 95]: 2b052d00e1cfdbff +Block 0029 [ 96]: 10a504192a1ca782 +Block 0029 [ 97]: 422b6d5a607e0f53 +Block 0029 [ 98]: 994b4ab3f3455574 +Block 0029 [ 99]: f404410879ee0682 +Block 0029 [100]: d24490a97ed582df +Block 0029 [101]: bf58aa9a14b30fb6 +Block 0029 [102]: ab05a7e1e0869b08 +Block 0029 [103]: 7438c7a055aabd68 +Block 0029 [104]: e6b4f489e314de4a +Block 0029 [105]: e367879a4a2ab4e2 +Block 0029 [106]: 932b68f955ae8e57 +Block 0029 [107]: 9349bc1c55f6f161 +Block 0029 [108]: 9c06b3701e4698ba +Block 0029 [109]: 380d6750f198b3a8 +Block 0029 [110]: 5c9f51e2bb2a361e +Block 0029 [111]: f01e94b44e75a07f +Block 0029 [112]: 51c80affa2375a90 +Block 0029 [113]: 7b759d95208f711c +Block 0029 [114]: a77b52fcc15720c0 +Block 0029 [115]: d30091a259eb7f97 +Block 0029 [116]: 559a223d0ac376f1 +Block 0029 [117]: 7f6859520b5d60ff +Block 0029 [118]: 3134e71b8672b420 +Block 0029 [119]: f36a26683f6c70f1 +Block 0029 [120]: 8e884ac595a80e59 +Block 0029 [121]: f1bd754af2d86f17 +Block 0029 [122]: 2dbe0b4c1021e2c6 +Block 0029 [123]: bcf728a6ed7761e2 +Block 0029 [124]: f5848563661b7e5f +Block 0029 [125]: 92bb5c63faae7980 +Block 0029 [126]: 5085c2ab6ec27a8d +Block 0029 [127]: d149a43c8cf72c8e +Block 0030 [ 0]: f7b3915b5d795911 +Block 0030 [ 1]: 6d4650cabf59a5cd +Block 0030 [ 2]: 029120b97e43b2d5 +Block 0030 [ 3]: e786cadd86d3dd06 +Block 0030 [ 4]: f6950a4bcd2ab3de +Block 0030 [ 5]: a6dbc2bc0254abdc +Block 0030 [ 6]: b00616f4dd9e6f91 +Block 0030 [ 7]: ddbdcf163e532e9d +Block 0030 [ 8]: eef8ba582ed02591 +Block 0030 [ 9]: 9ae7f79060ab2642 +Block 0030 [ 10]: 7781023d613e84b0 +Block 0030 [ 11]: 9950b8da56ed918a +Block 0030 [ 12]: 14327600d58edc95 +Block 0030 [ 13]: 25eefe4b4e9dca67 +Block 0030 [ 14]: 7c1e048e6ad65e96 +Block 0030 [ 15]: 4355b2bf89b78bde +Block 0030 [ 16]: 902b3d09bbc68c14 +Block 0030 [ 17]: 3fbeea70676782db +Block 0030 [ 18]: bc9b363de9aab773 +Block 0030 [ 19]: 6f636ac7a5600379 +Block 0030 [ 20]: 07d1d0f408cbb928 +Block 0030 [ 21]: 2cf99690cd52a6c4 +Block 0030 [ 22]: ed547993fa52bf98 +Block 0030 [ 23]: f2a63153b4adf41d +Block 0030 [ 24]: 5185c3b0c39c3b2f +Block 0030 [ 25]: a0a83717bfed6aee +Block 0030 [ 26]: 8cb03a53f0475da6 +Block 0030 [ 27]: 80dae49c5af616ed +Block 0030 [ 28]: 4b3402af281e060b +Block 0030 [ 29]: a94d8af4e395da7a +Block 0030 [ 30]: 11deecee4671f9ad +Block 0030 [ 31]: 365a38641405b0ba +Block 0030 [ 32]: a5102f86395d3699 +Block 0030 [ 33]: 461c09efa6e93ef1 +Block 0030 [ 34]: e45d8eede2db61d3 +Block 0030 [ 35]: e2b1c9e863fb2219 +Block 0030 [ 36]: 742d101cca54f303 +Block 0030 [ 37]: 100668962e6d6721 +Block 0030 [ 38]: 7fdb9ee7c8e721bb +Block 0030 [ 39]: 4f628199abab6233 +Block 0030 [ 40]: e174091ad6b99767 +Block 0030 [ 41]: 7abd35fcbb0b48f7 +Block 0030 [ 42]: af92e9ef5cd4585c +Block 0030 [ 43]: 26d4a48f93f87bc3 +Block 0030 [ 44]: 1e66402195c79874 +Block 0030 [ 45]: 558b6146fe4ed7cf +Block 0030 [ 46]: 1ff7e9f8c9241ab0 +Block 0030 [ 47]: bd94bee9062f44b3 +Block 0030 [ 48]: 93468af3821a9124 +Block 0030 [ 49]: 77be11517873c6da +Block 0030 [ 50]: ebf6a732f56ee38d +Block 0030 [ 51]: 8ab2665e5f16ce08 +Block 0030 [ 52]: 9e0c5672a77d425a +Block 0030 [ 53]: ccac47c85570221b +Block 0030 [ 54]: ba072ec00b35f6e1 +Block 0030 [ 55]: e2a9b77a273ed38e +Block 0030 [ 56]: 01e6d7f004980390 +Block 0030 [ 57]: 94aeef81a472125b +Block 0030 [ 58]: e623ce55ea9d2032 +Block 0030 [ 59]: 511db694687283ca +Block 0030 [ 60]: 6042414f19f4e2d9 +Block 0030 [ 61]: 622142095d269bf8 +Block 0030 [ 62]: ea39bdbd152c17e2 +Block 0030 [ 63]: ee70e17e9b9cd618 +Block 0030 [ 64]: 819eacf187136971 +Block 0030 [ 65]: abdd3aea4a6fc239 +Block 0030 [ 66]: fdbc3148fbc4b4a2 +Block 0030 [ 67]: aa5fa1241d9bcd8b +Block 0030 [ 68]: 8c74b7bb21e39c8e +Block 0030 [ 69]: 9b41e6764ef9c3b5 +Block 0030 [ 70]: d6df0e067e697f53 +Block 0030 [ 71]: 21def006cbc46fd3 +Block 0030 [ 72]: 42001961e18394fc +Block 0030 [ 73]: 78f9eb324a136de0 +Block 0030 [ 74]: 07659bd985720b63 +Block 0030 [ 75]: 5b3090c256c8624e +Block 0030 [ 76]: f8e77a5f9188017a +Block 0030 [ 77]: dde950f5c8aebd6c +Block 0030 [ 78]: 9ec2bd7d0dd13bd4 +Block 0030 [ 79]: f055ecc5524dec99 +Block 0030 [ 80]: 454c290ecf753728 +Block 0030 [ 81]: f1077cae3c387789 +Block 0030 [ 82]: e58f4e8e70ea5d33 +Block 0030 [ 83]: a9cf7b5b92cdc5c5 +Block 0030 [ 84]: abbe97dc3a615361 +Block 0030 [ 85]: 101c5e27366532d6 +Block 0030 [ 86]: 2a5b85b9cc569c7f +Block 0030 [ 87]: d5415ec260957678 +Block 0030 [ 88]: 6f148b5e1ee726ab +Block 0030 [ 89]: 3e83ac5b68c27c1e +Block 0030 [ 90]: caf9feedae1d27fd +Block 0030 [ 91]: f386d285ebd0f0d7 +Block 0030 [ 92]: 931684e917211689 +Block 0030 [ 93]: 0dd6cfb9b9d794a9 +Block 0030 [ 94]: edf6589e6eaaffef +Block 0030 [ 95]: a6778256939a1e88 +Block 0030 [ 96]: 7b4e279e4456a902 +Block 0030 [ 97]: e86fb8cf00b9c11c +Block 0030 [ 98]: 3abe1cb80e77dbc7 +Block 0030 [ 99]: 804a5a863239744b +Block 0030 [100]: 0ff09f689b9155cf +Block 0030 [101]: 7e35cd3b02dce640 +Block 0030 [102]: 2bacf335b1976e89 +Block 0030 [103]: 8233ef17131bcce6 +Block 0030 [104]: aaa2ec0b9d1fa066 +Block 0030 [105]: ec9a0aa1be68200d +Block 0030 [106]: 90716606866689c6 +Block 0030 [107]: 4d76da6c80d13d62 +Block 0030 [108]: f8a464f45e6f2003 +Block 0030 [109]: f5b00f8b927fd15f +Block 0030 [110]: 3304bcbc42a900be +Block 0030 [111]: a097ee36d01a0e12 +Block 0030 [112]: 85759ff3b8dab8a2 +Block 0030 [113]: d0d2dd58bd000a59 +Block 0030 [114]: bdd16ffb771df25c +Block 0030 [115]: 3b7f17d65e21bcbc +Block 0030 [116]: a8db992d9372a410 +Block 0030 [117]: cc57b4adaa4c9451 +Block 0030 [118]: 45075ac086aa5d4a +Block 0030 [119]: 597367349e9a2e79 +Block 0030 [120]: 2696d9e2cddad3f6 +Block 0030 [121]: aa76a82770ea0cd7 +Block 0030 [122]: 22b00c94404e8392 +Block 0030 [123]: f1e2d0a68f50b3c5 +Block 0030 [124]: 47fc2760188717f2 +Block 0030 [125]: eea23f3a62cbc15e +Block 0030 [126]: 9777733407a94e0b +Block 0030 [127]: 10e2bcf209ac3c93 +Block 0031 [ 0]: ba2551a378c910e2 +Block 0031 [ 1]: a2a4b5ae9f029037 +Block 0031 [ 2]: fbcb00039788e99c +Block 0031 [ 3]: 3d51678e868d16f2 +Block 0031 [ 4]: eccd26287b0b4b8c +Block 0031 [ 5]: d125b4a30ae07da8 +Block 0031 [ 6]: bdc4f0f2711802cc +Block 0031 [ 7]: ec04266df056401e +Block 0031 [ 8]: b676b85760e7e3aa +Block 0031 [ 9]: 34d7afd67018978d +Block 0031 [ 10]: 72f33357e0a3d0d5 +Block 0031 [ 11]: 5953e85b40b1db60 +Block 0031 [ 12]: 9f60e209dcffd146 +Block 0031 [ 13]: ebf4ae0739a7190c +Block 0031 [ 14]: e786bde349ffa078 +Block 0031 [ 15]: 45f2e51c23815e96 +Block 0031 [ 16]: 6db7c74b5c15185d +Block 0031 [ 17]: 64c6cfba2c5c8db0 +Block 0031 [ 18]: b3825f9409265373 +Block 0031 [ 19]: dfe0cbda0725f952 +Block 0031 [ 20]: fd0c2b34aeb78b75 +Block 0031 [ 21]: ce8a795131a4905d +Block 0031 [ 22]: b05f59cbde1b730c +Block 0031 [ 23]: bc9f44070df95cad +Block 0031 [ 24]: 8b04c461747caca8 +Block 0031 [ 25]: 24ab937d9e282f53 +Block 0031 [ 26]: b73a19bef82cb8a3 +Block 0031 [ 27]: 9685f40b24ca7f3b +Block 0031 [ 28]: cdca3329cc0cd294 +Block 0031 [ 29]: d2bfcd5eba17fd63 +Block 0031 [ 30]: cb91a04e00308585 +Block 0031 [ 31]: b4d1cdfe27f9f1b9 +Block 0031 [ 32]: 3a179be974a2a00f +Block 0031 [ 33]: 9adf724e4a740c28 +Block 0031 [ 34]: 08ee5f4f7d8b7a4d +Block 0031 [ 35]: 5798d8357833307a +Block 0031 [ 36]: 1c10594518a0094e +Block 0031 [ 37]: d6bf9b976f3007b7 +Block 0031 [ 38]: c971f67f6f5f69d8 +Block 0031 [ 39]: f71ef932e83d37c6 +Block 0031 [ 40]: ed96d8d9ae4aa39a +Block 0031 [ 41]: e2b9b38b144f690b +Block 0031 [ 42]: cadf4da1e346adb8 +Block 0031 [ 43]: 9df212ccd4768f96 +Block 0031 [ 44]: e0beb6841adf50bb +Block 0031 [ 45]: f568bce2d32ac0ff +Block 0031 [ 46]: 094cba4a582410b1 +Block 0031 [ 47]: 0bc73e23027ae171 +Block 0031 [ 48]: df30cb7f6c304933 +Block 0031 [ 49]: e5c9de323c73aeaa +Block 0031 [ 50]: 7309a5a4d46d2400 +Block 0031 [ 51]: 87577abd3a5847f6 +Block 0031 [ 52]: f34e46c0adbc27cc +Block 0031 [ 53]: 8fbc9c9ecef4712c +Block 0031 [ 54]: bb236365dab5f0f9 +Block 0031 [ 55]: e883770727b59df2 +Block 0031 [ 56]: 24a2400329decffe +Block 0031 [ 57]: 72ed72838f62bd8b +Block 0031 [ 58]: 2ff20a50b9edaf02 +Block 0031 [ 59]: c49a571662434a4c +Block 0031 [ 60]: 7c9ad60d62c4b1bf +Block 0031 [ 61]: 51875a75e552ada6 +Block 0031 [ 62]: 3a32f8ab24e7c732 +Block 0031 [ 63]: c340f6a12b945d83 +Block 0031 [ 64]: f3504c15c9f162f3 +Block 0031 [ 65]: d9daa82ba3ba8977 +Block 0031 [ 66]: 54dba94ce2ec870d +Block 0031 [ 67]: 68331ed60a1d5037 +Block 0031 [ 68]: 3a0a89f98e28d0ed +Block 0031 [ 69]: d11a497c98dd7363 +Block 0031 [ 70]: 4fb9ba15f43a8737 +Block 0031 [ 71]: fab603bffcad233c +Block 0031 [ 72]: 24cdf04cc2b5eead +Block 0031 [ 73]: e8b572d365f625c5 +Block 0031 [ 74]: 257ec3762e4f6da8 +Block 0031 [ 75]: b81b255403c274fe +Block 0031 [ 76]: 926ff7a24d12bae5 +Block 0031 [ 77]: 2cd251efd351ffde +Block 0031 [ 78]: c31eef31e805f738 +Block 0031 [ 79]: dc62d5543b95daab +Block 0031 [ 80]: bd9e0bfe62400899 +Block 0031 [ 81]: a1cc9f496b9c829c +Block 0031 [ 82]: b2043c89cf626b77 +Block 0031 [ 83]: f64141cb97fee59a +Block 0031 [ 84]: dd1df4f4706c011f +Block 0031 [ 85]: 16df9a3054c8c96f +Block 0031 [ 86]: 3a63828fe124a3fe +Block 0031 [ 87]: c1452b04bdd1c318 +Block 0031 [ 88]: e20e6c50c7dd975a +Block 0031 [ 89]: 39c1a21562c5b7f3 +Block 0031 [ 90]: e6843aefccf4dfbc +Block 0031 [ 91]: 1aa4dfa03bc5a0e1 +Block 0031 [ 92]: 8922b48b6a4d7d7f +Block 0031 [ 93]: 9e574f8825317718 +Block 0031 [ 94]: dbcb8c6c40d31bda +Block 0031 [ 95]: 909c4929f0d98608 +Block 0031 [ 96]: f42329ae93383145 +Block 0031 [ 97]: 4677e44aa39abf60 +Block 0031 [ 98]: 9c9ffdbb0d6b608f +Block 0031 [ 99]: 108a41fe19860021 +Block 0031 [100]: 1a9bfb05d9e8ec88 +Block 0031 [101]: 1c4ad68f5d425047 +Block 0031 [102]: e7b1051a96ec60dd +Block 0031 [103]: fda74634f0acc4cf +Block 0031 [104]: fe56b2bcd5bdf3e7 +Block 0031 [105]: 5a1e699aecbc292d +Block 0031 [106]: bcceb2f10ab70062 +Block 0031 [107]: 2a800d4cbc728faa +Block 0031 [108]: c588289811f8e84a +Block 0031 [109]: ec40fab8651154f3 +Block 0031 [110]: 16b0936827dff2f4 +Block 0031 [111]: 26c7e63292ff15db +Block 0031 [112]: 93e056413e2e0b56 +Block 0031 [113]: 200d76516fd463c6 +Block 0031 [114]: 101af0e2b9f88293 +Block 0031 [115]: 48427c1c972109bd +Block 0031 [116]: 0c0c3a0ea1e847aa +Block 0031 [117]: d045ad28fceda383 +Block 0031 [118]: 54418ca0530783a4 +Block 0031 [119]: 11bcd435d2dcea04 +Block 0031 [120]: 0e7c42682b68b097 +Block 0031 [121]: 8a597b4d94ebef39 +Block 0031 [122]: e3cf70f8cc329f05 +Block 0031 [123]: a60a793d19a77883 +Block 0031 [124]: d723359b485f509b +Block 0031 [125]: cb78824f42375111 +Block 0031 [126]: 35bc8cc6e83b1875 +Block 0031 [127]: 0b012846a40f346a +Tag: 0d 64 0d f5 8d 78 76 6c 08 c0 37 a3 4a 8b 53 c9 d0 1e f0 45 2d 75 b6 5e b5 25 20 e9 6b 01 e6 59 diff --git a/deps/phc-winner-argon2-20190702/kats/argon2id.shasum b/deps/phc-winner-argon2-20190702/kats/argon2id.shasum new file mode 100644 index 000000000..54755af41 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/kats/argon2id.shasum @@ -0,0 +1 @@ +ba05643e504fc5778dda99e2d9f42ebe7d22ebb3923cc719fd591b1b14a8d28d argon2id diff --git a/deps/phc-winner-argon2-20190702/kats/argon2id_v16 b/deps/phc-winner-argon2-20190702/kats/argon2id_v16 new file mode 100644 index 000000000..05ea2b315 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/kats/argon2id_v16 @@ -0,0 +1,12304 @@ +======================================= +Argon2id version number 16 +======================================= +Memory: 32 KiB, Iterations: 3, Parallelism: 4 lanes, Tag length: 32 bytes +Password[32]: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 +Salt[16]: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 +Secret[8]: 03 03 03 03 03 03 03 03 +Associated data[12]: 04 04 04 04 04 04 04 04 04 04 04 04 +Pre-hashing digest: 70 65 ab 9c 82 b5 f0 e8 71 28 c7 84 7a 02 1d 1e 59 aa 16 66 6f c8 b4 ef ac a3 86 3f bf d6 5e 0e 8b a6 f6 09 eb bc 9b 60 e2 78 22 c8 24 b7 50 6f b9 f9 5b e9 0e e5 84 2a ac 6e d6 b7 da 67 30 44 + + After pass 0: +Block 0000 [ 0]: b7bb842644fb909e +Block 0000 [ 1]: 92e351e160803c45 +Block 0000 [ 2]: a9c24b300afd7b10 +Block 0000 [ 3]: 182cf4233ee44cab +Block 0000 [ 4]: 7a683cbc2906379b +Block 0000 [ 5]: 137aafb620c6c117 +Block 0000 [ 6]: dd9b43b0486b7c7d +Block 0000 [ 7]: 92e2f6c74a74a3e1 +Block 0000 [ 8]: aff35a4302c3fa3b +Block 0000 [ 9]: d76b047857f6f390 +Block 0000 [ 10]: 564f0363488ee83d +Block 0000 [ 11]: ec358c2dfd0bd18a +Block 0000 [ 12]: 42257160ad69eb83 +Block 0000 [ 13]: 147a568114a9c596 +Block 0000 [ 14]: d5db25b5740efc84 +Block 0000 [ 15]: ab0eb206883645d3 +Block 0000 [ 16]: 6e64467db82d4fb5 +Block 0000 [ 17]: 651ed1e53f297dc8 +Block 0000 [ 18]: 9ccbad51593abaf5 +Block 0000 [ 19]: 01b5546e1177ee58 +Block 0000 [ 20]: 3d26eaa9524ea4cd +Block 0000 [ 21]: a722e88f9651424c +Block 0000 [ 22]: be078be7e13a8978 +Block 0000 [ 23]: 23be5ef0c66109a4 +Block 0000 [ 24]: eec08b3431a67aac +Block 0000 [ 25]: 20b7e59878714c02 +Block 0000 [ 26]: 7b508a53c69a8118 +Block 0000 [ 27]: f2dd15049b78f666 +Block 0000 [ 28]: 5ab1d2113edc5ccb +Block 0000 [ 29]: 6e7aeeabf3241f19 +Block 0000 [ 30]: 64d84116592594e5 +Block 0000 [ 31]: 44cd928f35735d7b +Block 0000 [ 32]: 80c1c80000870823 +Block 0000 [ 33]: 86971eb2fd4f3ea1 +Block 0000 [ 34]: ebe240672e818b64 +Block 0000 [ 35]: cc50a5172a798ec1 +Block 0000 [ 36]: e214795d6bdfae01 +Block 0000 [ 37]: 34dbbd4f0ce743bf +Block 0000 [ 38]: 5f6d7fc0d14a42ee +Block 0000 [ 39]: 6c27bde0a4ad06fe +Block 0000 [ 40]: a225c3d053439aaf +Block 0000 [ 41]: 0611f32af47fd4ce +Block 0000 [ 42]: d36dd06bd1c0e42a +Block 0000 [ 43]: 53e31d06d89c4a89 +Block 0000 [ 44]: 4277658b3a5f2d44 +Block 0000 [ 45]: 5fa68495fa98f654 +Block 0000 [ 46]: 8cd4c77eb8f00cbd +Block 0000 [ 47]: 4e27f32130c34f99 +Block 0000 [ 48]: 4ffe69553622b576 +Block 0000 [ 49]: 0d3d7cfe462e2320 +Block 0000 [ 50]: b49324bce6b5ad1d +Block 0000 [ 51]: 260756703f023635 +Block 0000 [ 52]: 075d11855cd036ee +Block 0000 [ 53]: 091d19705c2756c7 +Block 0000 [ 54]: a19671b274bba372 +Block 0000 [ 55]: fc31225731e966d1 +Block 0000 [ 56]: 0a815245c504bc91 +Block 0000 [ 57]: 28f97817e690971c +Block 0000 [ 58]: 1f0ec3c0944cbfb8 +Block 0000 [ 59]: c962eee584d3c73b +Block 0000 [ 60]: 67f9d5c835378007 +Block 0000 [ 61]: 009b9cb5bea18286 +Block 0000 [ 62]: 32030ee639fbc966 +Block 0000 [ 63]: 97e2f25a2a1f20d2 +Block 0000 [ 64]: 6f1d7029455bcd55 +Block 0000 [ 65]: fd9a2926cf439cc5 +Block 0000 [ 66]: d1dbc75a7185af29 +Block 0000 [ 67]: 7fa8a98ec6a29827 +Block 0000 [ 68]: a3866a840b3965a4 +Block 0000 [ 69]: 29fca433e0e6ef44 +Block 0000 [ 70]: a593ade0db8f7ec9 +Block 0000 [ 71]: 2adaac3102271ace +Block 0000 [ 72]: fce7ff27e5e58473 +Block 0000 [ 73]: bf8142dd4ecbcb09 +Block 0000 [ 74]: fedc7c9f228859f6 +Block 0000 [ 75]: 0aabb19220a4f3ad +Block 0000 [ 76]: 22fc0ef92d52ce3c +Block 0000 [ 77]: 2f6f3cbca11dd133 +Block 0000 [ 78]: dbeab62bcbdcdadd +Block 0000 [ 79]: 3a3b61f68b3ce981 +Block 0000 [ 80]: 8d282775d4af2f1d +Block 0000 [ 81]: e059e025f4bb11b6 +Block 0000 [ 82]: b459e07a4d1332cf +Block 0000 [ 83]: ff670c951d4088ef +Block 0000 [ 84]: 5f02a137760cd098 +Block 0000 [ 85]: 028d44dfbfcbf8d5 +Block 0000 [ 86]: 87c733e1437000d9 +Block 0000 [ 87]: bd10e034a941e140 +Block 0000 [ 88]: d6720d6b9fc190f5 +Block 0000 [ 89]: acc2a8fba56df010 +Block 0000 [ 90]: a4d4ed3a2e2c9756 +Block 0000 [ 91]: 61c59c4afe1108e8 +Block 0000 [ 92]: 835bded44ae46619 +Block 0000 [ 93]: 7604a9417fbcb100 +Block 0000 [ 94]: 7b6b82b2b4d5bd03 +Block 0000 [ 95]: d5d332c71a0796a4 +Block 0000 [ 96]: 6ea1beba2fc89505 +Block 0000 [ 97]: bc9a6d44b6fb35d5 +Block 0000 [ 98]: ef5f34e62a190c89 +Block 0000 [ 99]: 9225f838b53a9ff5 +Block 0000 [100]: 32cf867e4da92862 +Block 0000 [101]: 2d44b91e42b6f427 +Block 0000 [102]: b440105f96b5aa28 +Block 0000 [103]: 6dc7ad77ea4436d8 +Block 0000 [104]: 66b875b7fe6a9311 +Block 0000 [105]: 9e2fab0c24b0d64f +Block 0000 [106]: 0b1dd725737b7f3b +Block 0000 [107]: 94ef03eb08cc55ef +Block 0000 [108]: 1ed223c9a1336e80 +Block 0000 [109]: 2cf999095e0d6221 +Block 0000 [110]: 39013cd6edf14711 +Block 0000 [111]: 904707a0a83add60 +Block 0000 [112]: e7033770da7cc6b9 +Block 0000 [113]: fb8b1159e1f3f8a1 +Block 0000 [114]: 92193aa808ad5cce +Block 0000 [115]: 867817b80eecfae7 +Block 0000 [116]: c5e66800c996653e +Block 0000 [117]: 58af09ad292272a7 +Block 0000 [118]: 04a55bd2fbc01564 +Block 0000 [119]: a311c88b41d523a9 +Block 0000 [120]: 2b9a9aff6bf7709d +Block 0000 [121]: 31e30127149627d8 +Block 0000 [122]: 5740a54a7b639f73 +Block 0000 [123]: 9703586c49fb0606 +Block 0000 [124]: 70390e67afe1b8dc +Block 0000 [125]: 0f325c6d3360d2f2 +Block 0000 [126]: e6a8d366efa0e311 +Block 0000 [127]: 991d1c2356575c44 +Block 0001 [ 0]: 4989449a68e198d1 +Block 0001 [ 1]: aac7c71d1ea9fb8a +Block 0001 [ 2]: bffe61b60a3415e7 +Block 0001 [ 3]: 22ace2760745f322 +Block 0001 [ 4]: 98e9bdf579ce947d +Block 0001 [ 5]: 579ac1aa9816b6b7 +Block 0001 [ 6]: facaffddebb6af72 +Block 0001 [ 7]: 32e2f6d192fb854c +Block 0001 [ 8]: af32a447f0be2e29 +Block 0001 [ 9]: a1814c09ff4f0884 +Block 0001 [ 10]: f8e4fe08bf29e1cb +Block 0001 [ 11]: 031661363b5d1c11 +Block 0001 [ 12]: 30ffeecd88ae1eba +Block 0001 [ 13]: bdf0af5a211ac806 +Block 0001 [ 14]: 768dc6f50b127a9f +Block 0001 [ 15]: 542257ab5e538f55 +Block 0001 [ 16]: 6732a2223c18f7fa +Block 0001 [ 17]: 55a9d185f27f23dc +Block 0001 [ 18]: 7183c9cd634bba75 +Block 0001 [ 19]: 8a19eea90e714ab9 +Block 0001 [ 20]: ae1bb8c05dd6f11a +Block 0001 [ 21]: 5fa3d9764c1ddaec +Block 0001 [ 22]: 6e6e2e5aab3ccf55 +Block 0001 [ 23]: cb837d78aa562983 +Block 0001 [ 24]: a04bb4ec37dc3d98 +Block 0001 [ 25]: cc1aee40aaeca6f3 +Block 0001 [ 26]: 894e1a07105ae34d +Block 0001 [ 27]: 095f5f736684f22e +Block 0001 [ 28]: b61b098dec5b1bcb +Block 0001 [ 29]: 2f6f0a7aac3e7d7d +Block 0001 [ 30]: 7cca77be88fb9ac8 +Block 0001 [ 31]: 4ed7ac1f943ba626 +Block 0001 [ 32]: 99b65c01eff31eae +Block 0001 [ 33]: b6318dcbde5ff590 +Block 0001 [ 34]: 8b796acde72309e5 +Block 0001 [ 35]: 499cf47baeadf720 +Block 0001 [ 36]: a32218dbd7d5adcc +Block 0001 [ 37]: 7949d40904da59ce +Block 0001 [ 38]: 09661301016e59ab +Block 0001 [ 39]: 70f26a07ffdb712e +Block 0001 [ 40]: e6c82c6406165b80 +Block 0001 [ 41]: 814e816ac9f9a2b4 +Block 0001 [ 42]: 496d86e303148ed4 +Block 0001 [ 43]: d1e4bbdbfa7d3a5e +Block 0001 [ 44]: 47b20d59c80de303 +Block 0001 [ 45]: cedbb73656945872 +Block 0001 [ 46]: 51008402396799b4 +Block 0001 [ 47]: c6b40630f55c127d +Block 0001 [ 48]: f5c33a25f18f5414 +Block 0001 [ 49]: 9c5e5cbcea9ea36e +Block 0001 [ 50]: 91b8dde2229043c6 +Block 0001 [ 51]: 09a3758ac8c98c10 +Block 0001 [ 52]: cb01be64d49c0ae9 +Block 0001 [ 53]: 35d0314dcd303998 +Block 0001 [ 54]: ebe659e766b0e53c +Block 0001 [ 55]: 7072ca398c13bc0f +Block 0001 [ 56]: 9bcafff66942d0b0 +Block 0001 [ 57]: 08817355cd91cbed +Block 0001 [ 58]: 899593aaf6da849c +Block 0001 [ 59]: 4030562b4eed8597 +Block 0001 [ 60]: 1484266e897f6914 +Block 0001 [ 61]: 16fd5ec0071832cf +Block 0001 [ 62]: 4ed582a91d56f940 +Block 0001 [ 63]: 36abb39293cf4bf0 +Block 0001 [ 64]: 5d7484473e5d8a04 +Block 0001 [ 65]: bbcf74106083eba3 +Block 0001 [ 66]: 560b914df76246d9 +Block 0001 [ 67]: af464c1fea2ca5ca +Block 0001 [ 68]: 216867dc0b9b7c90 +Block 0001 [ 69]: 96d67e8f0f693365 +Block 0001 [ 70]: 2739b94e414cdafc +Block 0001 [ 71]: c6b8dc19ead4928c +Block 0001 [ 72]: 7a9fe9cbc3f72e77 +Block 0001 [ 73]: c827d1f0528a71bd +Block 0001 [ 74]: fdc8d9d91b2e451e +Block 0001 [ 75]: 4766a4895d720dad +Block 0001 [ 76]: 906df9428d4b5a64 +Block 0001 [ 77]: 8f66bb2ff99ab56c +Block 0001 [ 78]: b24995e98def0601 +Block 0001 [ 79]: 23f1c3730a825da3 +Block 0001 [ 80]: 0e10371ce089e1a0 +Block 0001 [ 81]: 02819025568c858f +Block 0001 [ 82]: 83b7d7de6bc785f9 +Block 0001 [ 83]: 53dfc6036dc2e85f +Block 0001 [ 84]: 376a29d0e3df59fd +Block 0001 [ 85]: d2e0a4b79b2f8da0 +Block 0001 [ 86]: f628d7114cc3c0a2 +Block 0001 [ 87]: 488c816bb711e8c8 +Block 0001 [ 88]: ab068042a90b22e1 +Block 0001 [ 89]: cceebdeec3145b3d +Block 0001 [ 90]: e21c35cefde7c532 +Block 0001 [ 91]: e14779df3245336c +Block 0001 [ 92]: c03a6a5512faec48 +Block 0001 [ 93]: ba1076e5b5741fe7 +Block 0001 [ 94]: 0f9f26e7faba7e68 +Block 0001 [ 95]: 0e3aa048e46652ee +Block 0001 [ 96]: 2c2bfe5250cd7d69 +Block 0001 [ 97]: da2d90c03212c196 +Block 0001 [ 98]: ef221053390bf8f5 +Block 0001 [ 99]: bbee8da4bd00eb83 +Block 0001 [100]: 72988cedc04a7404 +Block 0001 [101]: bf9247326f867410 +Block 0001 [102]: 69bc52fe67110ad1 +Block 0001 [103]: 0a0139a6c2871ef2 +Block 0001 [104]: bf19681a29325ec9 +Block 0001 [105]: d2ed912dd05cf74d +Block 0001 [106]: 971c8d36dc2cb154 +Block 0001 [107]: 4b3b44a4b160b82c +Block 0001 [108]: 511a2c743551fb28 +Block 0001 [109]: 4b653e1a1439f5f6 +Block 0001 [110]: ce08f68913b83d02 +Block 0001 [111]: eb214b52ece94ac3 +Block 0001 [112]: 8e11f305344a105f +Block 0001 [113]: 39246a558de64f47 +Block 0001 [114]: 950849228224ea14 +Block 0001 [115]: 07bc212b67e22525 +Block 0001 [116]: b1e0e7c9963f2a2f +Block 0001 [117]: 116bc563c9208ff8 +Block 0001 [118]: 6565ad2b648c3a7c +Block 0001 [119]: 6f09b6666053c99b +Block 0001 [120]: 62f49638f17f3b56 +Block 0001 [121]: ec838fec0902fff1 +Block 0001 [122]: 46ed99217ecbaa8d +Block 0001 [123]: 9edebaa010e017da +Block 0001 [124]: 139a0bef21d0f3aa +Block 0001 [125]: 1ef7b4576ff34afe +Block 0001 [126]: 3a4464ac6e7f071a +Block 0001 [127]: 30171c4c18317182 +Block 0002 [ 0]: 24c21ae335819e56 +Block 0002 [ 1]: 601d30c94d2e382a +Block 0002 [ 2]: e5412235e4a6c8ec +Block 0002 [ 3]: dd62751df8e64482 +Block 0002 [ 4]: 10b820d4a82f6a30 +Block 0002 [ 5]: 7114921b2c7b4f68 +Block 0002 [ 6]: fd6d583479fe9e50 +Block 0002 [ 7]: 08dd2365f0ea39e5 +Block 0002 [ 8]: 0b47040470279f87 +Block 0002 [ 9]: 60c2e2004d640023 +Block 0002 [ 10]: a3f666b591d2d5cc +Block 0002 [ 11]: f599e8dae9cf4c17 +Block 0002 [ 12]: bb231e2ac9813744 +Block 0002 [ 13]: efa35e61e2d89b82 +Block 0002 [ 14]: 9f8b8c91cee90678 +Block 0002 [ 15]: 28830b6c98df40f4 +Block 0002 [ 16]: 77612a6d00de8081 +Block 0002 [ 17]: efe02ae6acb10b34 +Block 0002 [ 18]: 6b4f29bebacd7be1 +Block 0002 [ 19]: 158325aff1916099 +Block 0002 [ 20]: 56f939cf16094218 +Block 0002 [ 21]: 7a4f363b4a6b2b34 +Block 0002 [ 22]: f3549b12cf9766d7 +Block 0002 [ 23]: 47ff03692dd05813 +Block 0002 [ 24]: 67ed1e764a840d37 +Block 0002 [ 25]: c0246ce5119f7ddc +Block 0002 [ 26]: 368ce2d96d5aec4b +Block 0002 [ 27]: 1c54267ac4f601ba +Block 0002 [ 28]: a3f06cfd58dbb222 +Block 0002 [ 29]: 577e96a10fe791c7 +Block 0002 [ 30]: d2dcf043c789b0c6 +Block 0002 [ 31]: ccb46504b140cf69 +Block 0002 [ 32]: 299bbf17b285382f +Block 0002 [ 33]: bb0227b4333e65f6 +Block 0002 [ 34]: 0a70c61fdc8038bc +Block 0002 [ 35]: 76c1158a301e3f46 +Block 0002 [ 36]: 89dfb9dad24976c8 +Block 0002 [ 37]: b44434f360e7d14a +Block 0002 [ 38]: d770b3764a8feaa8 +Block 0002 [ 39]: 76f949e55d5a89cd +Block 0002 [ 40]: 1c36e36f410b1630 +Block 0002 [ 41]: f28727a81f389b82 +Block 0002 [ 42]: 910014a75422a2c8 +Block 0002 [ 43]: 707a170ed1cca0b8 +Block 0002 [ 44]: dc2a3f8429661e83 +Block 0002 [ 45]: 115acbc62e271ece +Block 0002 [ 46]: 8cf57a93bb3461df +Block 0002 [ 47]: ee2c1130ccdb726b +Block 0002 [ 48]: cb7ddc22591e441b +Block 0002 [ 49]: 474d91327a32a5cc +Block 0002 [ 50]: 7daed6758b6a410a +Block 0002 [ 51]: c53600dea10f0106 +Block 0002 [ 52]: c2c3f543492143f2 +Block 0002 [ 53]: 50dbd7c5f7c49d67 +Block 0002 [ 54]: 19e198b23b48f41a +Block 0002 [ 55]: 721a24a2f1a040af +Block 0002 [ 56]: 87a1f26f63415ae7 +Block 0002 [ 57]: 1fe92d42e285a0d0 +Block 0002 [ 58]: bdff0f31c7ac33ae +Block 0002 [ 59]: 34818607ca6bf098 +Block 0002 [ 60]: 246e9c6d966abab4 +Block 0002 [ 61]: 00df3f61d9d1c40e +Block 0002 [ 62]: dcdbf723ef8f59bb +Block 0002 [ 63]: 4ba7740f25cb55cf +Block 0002 [ 64]: 36979f0554bed212 +Block 0002 [ 65]: 68f80c30266ec1bf +Block 0002 [ 66]: 267c7fde426025be +Block 0002 [ 67]: ba8045963d719af1 +Block 0002 [ 68]: 38bbbccf8baaeb66 +Block 0002 [ 69]: 3065e858181b0fb8 +Block 0002 [ 70]: 6baa55f49cb0568d +Block 0002 [ 71]: 9ebcbac2f77f5358 +Block 0002 [ 72]: 077fcaab8f11c30b +Block 0002 [ 73]: c704229ec6fec90b +Block 0002 [ 74]: 55f41bb14942a8a0 +Block 0002 [ 75]: 897d3baedb5ed2b5 +Block 0002 [ 76]: 49f246b7168f9dc8 +Block 0002 [ 77]: 8c96ba1b9b4c41a2 +Block 0002 [ 78]: 41bdc5587984225c +Block 0002 [ 79]: 61e336c165a40f81 +Block 0002 [ 80]: bdea7a574e497f98 +Block 0002 [ 81]: 19f5f36af4648b25 +Block 0002 [ 82]: 8f6875a054a82387 +Block 0002 [ 83]: ed5168ce782b0640 +Block 0002 [ 84]: 45b8c6e6e2e76f7d +Block 0002 [ 85]: c1f52f9df2eca9c8 +Block 0002 [ 86]: 02267b3230f0aaab +Block 0002 [ 87]: c69417603e967088 +Block 0002 [ 88]: 99a511f031fa15d3 +Block 0002 [ 89]: 6db8d498977fc845 +Block 0002 [ 90]: ee30da815f04b60f +Block 0002 [ 91]: 1e084eb4933d7b77 +Block 0002 [ 92]: 293593e3c2716d5e +Block 0002 [ 93]: f8c1a970668fddfd +Block 0002 [ 94]: 3521b3d01777ed06 +Block 0002 [ 95]: f052856c2f8802b2 +Block 0002 [ 96]: 4f8f389ab16c382d +Block 0002 [ 97]: 562718613169889c +Block 0002 [ 98]: ffde08ea100c3153 +Block 0002 [ 99]: 611599a690a3277b +Block 0002 [100]: 552079197b4336f5 +Block 0002 [101]: da82d17e1de8c79c +Block 0002 [102]: 4115b237c53c1f83 +Block 0002 [103]: d708eb0e30b42883 +Block 0002 [104]: b0b18a3eea85d88e +Block 0002 [105]: 43ec3c16b2adc1c2 +Block 0002 [106]: 6de6378febe403ec +Block 0002 [107]: 555c763388342eb2 +Block 0002 [108]: 7a41c6af4cb6b129 +Block 0002 [109]: 8927fff2d7af49c3 +Block 0002 [110]: 047412244022377f +Block 0002 [111]: c009518d28032a28 +Block 0002 [112]: df79a603af8c3c94 +Block 0002 [113]: 1347dab66dadd37a +Block 0002 [114]: 5db0afec1448b60e +Block 0002 [115]: bf5528101823da52 +Block 0002 [116]: e12eae4521d48cdc +Block 0002 [117]: 34375ad9b2971a0c +Block 0002 [118]: f48f86a00ace3b40 +Block 0002 [119]: 370b5bfab63d4f28 +Block 0002 [120]: efce287ee0351954 +Block 0002 [121]: 044a9c406b2bb32b +Block 0002 [122]: ed4e010c9b545cd5 +Block 0002 [123]: 9b396320258b99c7 +Block 0002 [124]: e21cdcb067b0d15a +Block 0002 [125]: 30377005aba2b601 +Block 0002 [126]: fa5dc1b9e10ff4d8 +Block 0002 [127]: de315986d0882d3a +Block 0003 [ 0]: 3a621db3273f359a +Block 0003 [ 1]: 4047196c41f1524b +Block 0003 [ 2]: fa2688b40792a1f9 +Block 0003 [ 3]: 3154d37f7c22c796 +Block 0003 [ 4]: 45ca5d1e973b4a0a +Block 0003 [ 5]: 3d2ee4ccd078c494 +Block 0003 [ 6]: 582c73563edbc927 +Block 0003 [ 7]: 3cc861617fad4a2e +Block 0003 [ 8]: 3cdfd91759faf401 +Block 0003 [ 9]: e78963e4abc16439 +Block 0003 [ 10]: 62bd98693f37e328 +Block 0003 [ 11]: cb080db0922c5f84 +Block 0003 [ 12]: 53af8fec0501215a +Block 0003 [ 13]: 9c3880f8091d0f71 +Block 0003 [ 14]: c91b6905e177bb6d +Block 0003 [ 15]: c360a6d7a963824e +Block 0003 [ 16]: 3e0d3af059637a63 +Block 0003 [ 17]: 249895f95d98a0d4 +Block 0003 [ 18]: 348907f710637f06 +Block 0003 [ 19]: ed70cec52cb8c4c4 +Block 0003 [ 20]: 6b26125834bf9762 +Block 0003 [ 21]: c510d89c728f8e15 +Block 0003 [ 22]: 4fee6316b7220507 +Block 0003 [ 23]: 873169071c7554b2 +Block 0003 [ 24]: f0c6b431aea72a4e +Block 0003 [ 25]: 2d43d09e4bffa899 +Block 0003 [ 26]: 7e57d491232aa95b +Block 0003 [ 27]: 8ad078fecf493153 +Block 0003 [ 28]: 6044c0465cf0f980 +Block 0003 [ 29]: 8b593cf1a747c5a4 +Block 0003 [ 30]: ee73b6e055d1ef6e +Block 0003 [ 31]: 8e33bbd1d69b8fa2 +Block 0003 [ 32]: 8fc4730708924366 +Block 0003 [ 33]: 36ee3e79986b1ef9 +Block 0003 [ 34]: 4c230230865b00f0 +Block 0003 [ 35]: fb9cf11da328be01 +Block 0003 [ 36]: 61d1df1a2c5cc787 +Block 0003 [ 37]: 82a0892fe171649e +Block 0003 [ 38]: 2436e9c8cc05b23e +Block 0003 [ 39]: f5f386f91bd7ee43 +Block 0003 [ 40]: b9bb843e5edc7f18 +Block 0003 [ 41]: 746c6f332e610545 +Block 0003 [ 42]: 1417f4efb16df4dc +Block 0003 [ 43]: 3388a6155da804e4 +Block 0003 [ 44]: d15ea1b0c45a05e3 +Block 0003 [ 45]: 761b17ebf05a866d +Block 0003 [ 46]: 9eb91984c3894226 +Block 0003 [ 47]: d23e58b95ff8c101 +Block 0003 [ 48]: 0011ab7a454d971f +Block 0003 [ 49]: a8887ef7321ee7fd +Block 0003 [ 50]: 6840484cfa171c0e +Block 0003 [ 51]: 24a6a3a8e9bc9e74 +Block 0003 [ 52]: b4589a254e2ac698 +Block 0003 [ 53]: 60284a0ed564491b +Block 0003 [ 54]: 6bf793dac7365ff0 +Block 0003 [ 55]: 55a84bfa60e541e5 +Block 0003 [ 56]: fc4931e0181bb6bd +Block 0003 [ 57]: 80989348d3e35790 +Block 0003 [ 58]: 2360aff3fe62e608 +Block 0003 [ 59]: bef9c4109d0b6bd7 +Block 0003 [ 60]: 7cbfc6aaef0fe537 +Block 0003 [ 61]: 74d89e72401f06ba +Block 0003 [ 62]: 82724458b4f710ea +Block 0003 [ 63]: e6153debefc9115d +Block 0003 [ 64]: bb00e792996e8e34 +Block 0003 [ 65]: 000f4177bff067dd +Block 0003 [ 66]: 715a9c5f425b7e42 +Block 0003 [ 67]: cb03ec5a383cf32e +Block 0003 [ 68]: f95a8953f7c868df +Block 0003 [ 69]: 63380b9e43cc443b +Block 0003 [ 70]: 6221768cf16abbce +Block 0003 [ 71]: d5dd916210f3923c +Block 0003 [ 72]: 8656553bbae2f7ce +Block 0003 [ 73]: b8604a325957eca7 +Block 0003 [ 74]: 9a33dbdce26ac7b1 +Block 0003 [ 75]: b41660e1a955da10 +Block 0003 [ 76]: 6f0ade62f0f845f2 +Block 0003 [ 77]: 2386c997551e5c5d +Block 0003 [ 78]: c6438a3931843bb5 +Block 0003 [ 79]: 0085de6ae7761d5e +Block 0003 [ 80]: a78c57d5fb2e7a91 +Block 0003 [ 81]: 7b4978bb4bb67319 +Block 0003 [ 82]: 3e8ca77fae7674dd +Block 0003 [ 83]: b26cfd2ffc983aaf +Block 0003 [ 84]: 6484e38c994fbd3b +Block 0003 [ 85]: 605770b4251f184b +Block 0003 [ 86]: e57180c11d5c30be +Block 0003 [ 87]: 011f2cc3f5bbbd2e +Block 0003 [ 88]: a640d723650e4980 +Block 0003 [ 89]: 288cf3cc99b8dccb +Block 0003 [ 90]: 31cef0a30021cc02 +Block 0003 [ 91]: 798234c5e2b7b865 +Block 0003 [ 92]: ac978dae820ea3d2 +Block 0003 [ 93]: 3af8966c1a02e6e6 +Block 0003 [ 94]: 9ccacba3bb710f28 +Block 0003 [ 95]: 62cb957608e3675a +Block 0003 [ 96]: a6446ccd9f64cfaf +Block 0003 [ 97]: 678d6a43ec4a5dab +Block 0003 [ 98]: 11bbf8c5b3fec1a6 +Block 0003 [ 99]: d51b0480b7c23f63 +Block 0003 [100]: 248f7cf55bf3871b +Block 0003 [101]: d2b6d85f3ae823cd +Block 0003 [102]: c64d167b352c09d4 +Block 0003 [103]: 0d55701832cb81f9 +Block 0003 [104]: 7227e11818addfd4 +Block 0003 [105]: 3078f8d1789c36dd +Block 0003 [106]: ad6f540f4e7db26f +Block 0003 [107]: baae6f778b35844d +Block 0003 [108]: b3b72e41abb9bd23 +Block 0003 [109]: b71d94a62dff1edb +Block 0003 [110]: 7a7ff9eaa271ddd0 +Block 0003 [111]: f826f99201bef179 +Block 0003 [112]: f9b09d1af4b07f1d +Block 0003 [113]: caeb03e5651d778c +Block 0003 [114]: 61d2f77e5ae93537 +Block 0003 [115]: 50786f03f2ecb739 +Block 0003 [116]: d975d339277d68c4 +Block 0003 [117]: 20e243be79a74394 +Block 0003 [118]: 514b73cdf5af9ccb +Block 0003 [119]: 72afe6bf8cbcfe05 +Block 0003 [120]: 06cbfcd153da2144 +Block 0003 [121]: 2d8c338bca6ab827 +Block 0003 [122]: ded3d3e9e3570eff +Block 0003 [123]: 95c1b00841b97c6c +Block 0003 [124]: bba5191e9b0d02d1 +Block 0003 [125]: ba4cc2f9551a2a3b +Block 0003 [126]: 635acd7e64497561 +Block 0003 [127]: aa10e683c112f660 +Block 0004 [ 0]: ee25b842dd1028d0 +Block 0004 [ 1]: 2ed715595f506b40 +Block 0004 [ 2]: 947fac8e22ca7f24 +Block 0004 [ 3]: 09ab93ff09e5e62e +Block 0004 [ 4]: a14d8c61a2f55832 +Block 0004 [ 5]: ce88af1e27d4ca5f +Block 0004 [ 6]: 8e3f281228c34fcc +Block 0004 [ 7]: 4f2f6319e15de25a +Block 0004 [ 8]: 86d2f5b3ce0497e3 +Block 0004 [ 9]: 4721f61cb78a1095 +Block 0004 [ 10]: c30f671aaa85b620 +Block 0004 [ 11]: 95f215c9b0aae3ab +Block 0004 [ 12]: 432f59b01fc61738 +Block 0004 [ 13]: e823ad7b415f84e6 +Block 0004 [ 14]: 7d6a9539afd8ef81 +Block 0004 [ 15]: 1057b188ac56165e +Block 0004 [ 16]: 60ccf5b1bc26c7be +Block 0004 [ 17]: 4d5167cbea8b8396 +Block 0004 [ 18]: 22973aa3683a0f6d +Block 0004 [ 19]: a8174c08193c8958 +Block 0004 [ 20]: 86cf239cf1874206 +Block 0004 [ 21]: c3caa54bd46d745f +Block 0004 [ 22]: b4d09a1cce238f94 +Block 0004 [ 23]: 071d45abf0a9a213 +Block 0004 [ 24]: 30223c62e113cde1 +Block 0004 [ 25]: e189297945a1827b +Block 0004 [ 26]: 0f7aa0e721ac38ef +Block 0004 [ 27]: 988d5d24022c4815 +Block 0004 [ 28]: 37c3795c3f8b89ef +Block 0004 [ 29]: 5a04aeda9f3bb282 +Block 0004 [ 30]: 3fe3a1c2dc39757c +Block 0004 [ 31]: f6bc623989c520e7 +Block 0004 [ 32]: 75c7ecc00cdf5fa6 +Block 0004 [ 33]: 3eea4e42b17c6ca9 +Block 0004 [ 34]: e8f5859c23a09def +Block 0004 [ 35]: 3aa61eb3e0026c4c +Block 0004 [ 36]: bd28de51a7d8f724 +Block 0004 [ 37]: b033d2aa2f841ef5 +Block 0004 [ 38]: 3200146d502d3e9d +Block 0004 [ 39]: de45254e8a677f08 +Block 0004 [ 40]: 5166cbf9383d36ad +Block 0004 [ 41]: fc6d0d8ad27c2730 +Block 0004 [ 42]: f777750b38d200c7 +Block 0004 [ 43]: e36447ba9506c06a +Block 0004 [ 44]: c59c6174109c5d14 +Block 0004 [ 45]: 029d17478e2ac687 +Block 0004 [ 46]: 47e20f6875c23553 +Block 0004 [ 47]: 7d21abcc6ef487a7 +Block 0004 [ 48]: 1cc21cead2b0900d +Block 0004 [ 49]: 521067f187e0f84f +Block 0004 [ 50]: 12f4f40b0988bce9 +Block 0004 [ 51]: 93ada3888ff5d5be +Block 0004 [ 52]: 6b06ff16afa7880b +Block 0004 [ 53]: 7e25b21e917fe499 +Block 0004 [ 54]: 4723a49985b8bfd2 +Block 0004 [ 55]: b5af89f623fb6ef4 +Block 0004 [ 56]: 4c3cb4cc19ab2299 +Block 0004 [ 57]: 8c3343eb7237df51 +Block 0004 [ 58]: c73074b58962f9a1 +Block 0004 [ 59]: 2391b6786e026957 +Block 0004 [ 60]: b65e63b2a65058ad +Block 0004 [ 61]: 9ceb8f638fad4c04 +Block 0004 [ 62]: 440c10dc66a7d19b +Block 0004 [ 63]: 8869ce3907567f9d +Block 0004 [ 64]: ef88a87436c5471b +Block 0004 [ 65]: 17c0a7d91fe78c12 +Block 0004 [ 66]: 417925054fa70397 +Block 0004 [ 67]: 8227d9460cafec86 +Block 0004 [ 68]: e459824688b10895 +Block 0004 [ 69]: e1e7b4f26aedffd1 +Block 0004 [ 70]: 6a26857c2a751c4c +Block 0004 [ 71]: fa532c478e7109fb +Block 0004 [ 72]: eaa69731f00e3797 +Block 0004 [ 73]: ede32dada031de42 +Block 0004 [ 74]: 7e078ac0aa12e932 +Block 0004 [ 75]: 5ebd149479dd59d6 +Block 0004 [ 76]: b4abda1136d84a77 +Block 0004 [ 77]: 19309276689f520a +Block 0004 [ 78]: 1151e9ff304bd0c2 +Block 0004 [ 79]: 09013f55742b99e9 +Block 0004 [ 80]: 70ccb323acdc21f8 +Block 0004 [ 81]: 47e6e19c7f159c79 +Block 0004 [ 82]: 856125cbb7f1560a +Block 0004 [ 83]: 94d9e08696ce69bd +Block 0004 [ 84]: 3df82baf27432f08 +Block 0004 [ 85]: 040765d9c32066c7 +Block 0004 [ 86]: 6638d7601a10ad98 +Block 0004 [ 87]: 94806fe5c853291d +Block 0004 [ 88]: 29249caa73578203 +Block 0004 [ 89]: 33ded5cabacf4386 +Block 0004 [ 90]: a4541fbd8b572b8c +Block 0004 [ 91]: c0c35b42df4b4753 +Block 0004 [ 92]: bad2b200390209c0 +Block 0004 [ 93]: 02a30010cce3c7e6 +Block 0004 [ 94]: 6597c0199fab753b +Block 0004 [ 95]: e5a658e801d90560 +Block 0004 [ 96]: b6cf3d60fe336766 +Block 0004 [ 97]: 4c9d67ce99148e41 +Block 0004 [ 98]: 13c3de54535784be +Block 0004 [ 99]: b85504983a5b7eeb +Block 0004 [100]: 6fafec81d9c04432 +Block 0004 [101]: a98fecab58f016e9 +Block 0004 [102]: 5c02119bf6068de1 +Block 0004 [103]: 0a41f857c077ddf5 +Block 0004 [104]: 3d4616ba64b92389 +Block 0004 [105]: ecb0d2bbdf882091 +Block 0004 [106]: ba1839c9c25219b1 +Block 0004 [107]: 27f560c257eee4ac +Block 0004 [108]: 93419274e76aed92 +Block 0004 [109]: 22ebb8365e049b12 +Block 0004 [110]: 3cb9c4e2d09ce774 +Block 0004 [111]: 45d6d6270525382f +Block 0004 [112]: 45c94644cc18e44e +Block 0004 [113]: 4c0fa7900f09b1fb +Block 0004 [114]: 9625c4a32bad4cc6 +Block 0004 [115]: badc03a1437ac0b0 +Block 0004 [116]: ed0c7eff9275830b +Block 0004 [117]: 69df81fb157d1bcb +Block 0004 [118]: b8bf266ddade37ee +Block 0004 [119]: 7db1d92a4ad082c0 +Block 0004 [120]: cc023380f5dc9df6 +Block 0004 [121]: b882628f9e80fb8e +Block 0004 [122]: da2acdf9a6fceb5e +Block 0004 [123]: d94f7f3fd42195d8 +Block 0004 [124]: 220a0b123697729f +Block 0004 [125]: 341dfea1ad6775b6 +Block 0004 [126]: 8aa9b49d00a41903 +Block 0004 [127]: bf3069c13296c94d +Block 0005 [ 0]: 8391a22525ac3129 +Block 0005 [ 1]: 2182bd7744cc7dcd +Block 0005 [ 2]: f4ca6a851736d626 +Block 0005 [ 3]: 84dd65d9ab943166 +Block 0005 [ 4]: e8e94d6cad517204 +Block 0005 [ 5]: 47c6f8e3d4d65b1c +Block 0005 [ 6]: bcf41f0cd8b65235 +Block 0005 [ 7]: de9625fb97faf26e +Block 0005 [ 8]: 9fd27f84ef4d3f76 +Block 0005 [ 9]: 9b4a643a6ff1b646 +Block 0005 [ 10]: 16addf741451ddbc +Block 0005 [ 11]: f8d7025745a12b1d +Block 0005 [ 12]: 8f6d75b3b17b278d +Block 0005 [ 13]: a469173ba8a5a3a9 +Block 0005 [ 14]: 85cb66a59564b901 +Block 0005 [ 15]: db2396a9310fc6eb +Block 0005 [ 16]: 53f9ae5d6180de0c +Block 0005 [ 17]: 17cfe30a3b903a1b +Block 0005 [ 18]: bb7ee3aa20b8ecb1 +Block 0005 [ 19]: 9b195332c7aadcfb +Block 0005 [ 20]: 16ff8c53dd2b5a29 +Block 0005 [ 21]: 3960274b38939f87 +Block 0005 [ 22]: 0c8c0bdd86aec0f0 +Block 0005 [ 23]: 091dbf94b5caa021 +Block 0005 [ 24]: ea0513282b1c6255 +Block 0005 [ 25]: 09ac386212407947 +Block 0005 [ 26]: 49f2cae638f284bb +Block 0005 [ 27]: 952b85e4556639f9 +Block 0005 [ 28]: ead8b8898ad0008a +Block 0005 [ 29]: a417d718d505d3ef +Block 0005 [ 30]: c9c71e3b1bef1728 +Block 0005 [ 31]: 63ba210eaedb878f +Block 0005 [ 32]: dbb902a61a4a0d6f +Block 0005 [ 33]: 6b93ab239e25d3ad +Block 0005 [ 34]: b9129537cb026700 +Block 0005 [ 35]: bd91b9a32e77e588 +Block 0005 [ 36]: 02bc137c047026d8 +Block 0005 [ 37]: 5e45723770933ec3 +Block 0005 [ 38]: 62f2b3d63d5ee519 +Block 0005 [ 39]: 35ee95ac9c58ebb8 +Block 0005 [ 40]: ad5734706fca0a0e +Block 0005 [ 41]: b86bbbfc96117bec +Block 0005 [ 42]: 3bc87262733b7282 +Block 0005 [ 43]: 68ebc4cbeb9cec24 +Block 0005 [ 44]: 92ed87b13532d74f +Block 0005 [ 45]: 9a46327d7172032c +Block 0005 [ 46]: c7c96af35b519031 +Block 0005 [ 47]: af4f0c07f9b2189d +Block 0005 [ 48]: 62a0c50c5a81915c +Block 0005 [ 49]: c76619e60b2d6f57 +Block 0005 [ 50]: 8a408ebb2d8e6aa2 +Block 0005 [ 51]: 463dedfed695fb54 +Block 0005 [ 52]: 88ba683a691878c6 +Block 0005 [ 53]: fede06e5c3bba35d +Block 0005 [ 54]: 233bf8dd96537fcd +Block 0005 [ 55]: 206f746116d7f2fe +Block 0005 [ 56]: 5271fbcfcaaae79e +Block 0005 [ 57]: acd38e85d5866021 +Block 0005 [ 58]: f9288fc3bfac49e6 +Block 0005 [ 59]: 79152b6b2eba8650 +Block 0005 [ 60]: 59a68943df8275e3 +Block 0005 [ 61]: 353694a518fdc5f8 +Block 0005 [ 62]: f8f0c9633cdc7981 +Block 0005 [ 63]: fb863297e68449db +Block 0005 [ 64]: ed977fcc8d1753ee +Block 0005 [ 65]: 812a3620c5954450 +Block 0005 [ 66]: e0387dabb56ef298 +Block 0005 [ 67]: 8009724bfa5dc0a7 +Block 0005 [ 68]: eee72aba6a6981bd +Block 0005 [ 69]: d6c66556c7982a51 +Block 0005 [ 70]: 1dbeb7ef05b9af0a +Block 0005 [ 71]: 3ac6cb726b5c73a8 +Block 0005 [ 72]: 2fab5ab0cc5997cf +Block 0005 [ 73]: 01006d1c447bb1e4 +Block 0005 [ 74]: 9479fcd0179a3dda +Block 0005 [ 75]: e43035ac067168c9 +Block 0005 [ 76]: 0e85b3d737226573 +Block 0005 [ 77]: b837e5a0e5a53abd +Block 0005 [ 78]: fe771479539c1c89 +Block 0005 [ 79]: 4eddd82075211cf6 +Block 0005 [ 80]: 3c6bb423e7ae496e +Block 0005 [ 81]: 531fb5cf7a66ab9a +Block 0005 [ 82]: 7f0c1e54ce41f6a9 +Block 0005 [ 83]: e44c93d2903de35e +Block 0005 [ 84]: e283572bb36042c3 +Block 0005 [ 85]: 48e05314b53e3a1d +Block 0005 [ 86]: c70ae3facad90bd8 +Block 0005 [ 87]: f7eb9795516c8aea +Block 0005 [ 88]: a9d51ea53fb7924f +Block 0005 [ 89]: a57400f858ed1a7b +Block 0005 [ 90]: ae17e7e53c36bdfb +Block 0005 [ 91]: 2be1ebc515e4c8ac +Block 0005 [ 92]: c6a75341f60ffa74 +Block 0005 [ 93]: 7fc9ae81f5cc2d1e +Block 0005 [ 94]: a9649bda41f37a2e +Block 0005 [ 95]: 3064212b87faf4a0 +Block 0005 [ 96]: 36ed3a9ed060e28f +Block 0005 [ 97]: cc3270a31fe515ca +Block 0005 [ 98]: 007183ca10e9e347 +Block 0005 [ 99]: ebab95c5a38ca512 +Block 0005 [100]: 616f7791bf38526a +Block 0005 [101]: 09cd415bc99fe122 +Block 0005 [102]: 0d91db2b5019ab35 +Block 0005 [103]: 0af30e6c4d5df4fe +Block 0005 [104]: d70f046467e13eb1 +Block 0005 [105]: 400d8ffbaedafe7e +Block 0005 [106]: 1f1f784f3160475f +Block 0005 [107]: 06ab9a4525d06e64 +Block 0005 [108]: 94742662a6e3cf77 +Block 0005 [109]: fc8c036aae7ccdbc +Block 0005 [110]: b56943232f6f229f +Block 0005 [111]: 3097ca2857f1c581 +Block 0005 [112]: da13102ef8466c04 +Block 0005 [113]: 191606c8d1d9841b +Block 0005 [114]: da7eb6f5863dd3ec +Block 0005 [115]: 1c5b95b054389563 +Block 0005 [116]: 26e0c33221d98a92 +Block 0005 [117]: 89a4f59ce9c97e71 +Block 0005 [118]: b809de06baa73578 +Block 0005 [119]: 6928a344f6bdcb28 +Block 0005 [120]: f998ade4988f120a +Block 0005 [121]: 0a6a9628d3dc7d99 +Block 0005 [122]: db07326bfcb54303 +Block 0005 [123]: 90c6cc27b5a77e17 +Block 0005 [124]: a7681add7323eca3 +Block 0005 [125]: a51c7ba17966d7e5 +Block 0005 [126]: 14a6283d83fabc6d +Block 0005 [127]: 584b27da48ba5899 +Block 0006 [ 0]: 2a64800c5487eab2 +Block 0006 [ 1]: 0bbe7d78e8791b55 +Block 0006 [ 2]: e6a143d1ab8b7b33 +Block 0006 [ 3]: ce93fb3c45c7443e +Block 0006 [ 4]: 10bfc25e34411ee8 +Block 0006 [ 5]: 2d5786d8bf589d5d +Block 0006 [ 6]: 1f8aeedd5b310f90 +Block 0006 [ 7]: 9ddbae1650fd61cd +Block 0006 [ 8]: 2fcf25ecaa72b648 +Block 0006 [ 9]: 4605e3f83638bc92 +Block 0006 [ 10]: 63fc5a831158a3c8 +Block 0006 [ 11]: 9431f1ed7556ece6 +Block 0006 [ 12]: a90f7eaafbac597f +Block 0006 [ 13]: f419db68c98b63af +Block 0006 [ 14]: 16a63bda59843e82 +Block 0006 [ 15]: 4a81a3dc88c84a66 +Block 0006 [ 16]: 90218025c0709f55 +Block 0006 [ 17]: a3f055b0a64e7826 +Block 0006 [ 18]: 8a814617fed0de21 +Block 0006 [ 19]: b32bdca9f00f7ae9 +Block 0006 [ 20]: 95aa9d629f4ed584 +Block 0006 [ 21]: 975350c26848cc2a +Block 0006 [ 22]: 3466b4991d492d30 +Block 0006 [ 23]: b5a3be561cde3612 +Block 0006 [ 24]: 7756124275a76154 +Block 0006 [ 25]: 49fa854f823ba873 +Block 0006 [ 26]: 4a2e0caa9712712e +Block 0006 [ 27]: 4cc6115574357b8f +Block 0006 [ 28]: 726dd8a92ff4733c +Block 0006 [ 29]: 687da442592f16a0 +Block 0006 [ 30]: 465daa3b6227c2f0 +Block 0006 [ 31]: 70345f239134961f +Block 0006 [ 32]: 93e4d66cf4241219 +Block 0006 [ 33]: f5aa4517e4562711 +Block 0006 [ 34]: 4444b64467a42d3b +Block 0006 [ 35]: 60b1f0ee9c363d65 +Block 0006 [ 36]: 7fa2479e123a67bf +Block 0006 [ 37]: bdeccba4bd322330 +Block 0006 [ 38]: 9cddff99f7042194 +Block 0006 [ 39]: 1255bfb92429d58e +Block 0006 [ 40]: 973a6877ecba92e1 +Block 0006 [ 41]: d22760276a21f9e6 +Block 0006 [ 42]: e3cbb4fb39655c00 +Block 0006 [ 43]: 6e1d33fbaca85766 +Block 0006 [ 44]: 9a800276744f8d6a +Block 0006 [ 45]: 8d0438d86a3f81db +Block 0006 [ 46]: ccdf247b55ccbd75 +Block 0006 [ 47]: aad33246518c0867 +Block 0006 [ 48]: d973e214a5dc1cf0 +Block 0006 [ 49]: 2c91065b5ab54743 +Block 0006 [ 50]: 091087b3e2a08216 +Block 0006 [ 51]: 30791badfa9890a5 +Block 0006 [ 52]: 62313b92c720912d +Block 0006 [ 53]: 7088235adf696700 +Block 0006 [ 54]: 52f03c4478e57e2e +Block 0006 [ 55]: 674263a7cc168cd3 +Block 0006 [ 56]: 450cab3338ebcafe +Block 0006 [ 57]: 1c86fcc8b6e9d2e7 +Block 0006 [ 58]: 9a3a7830220d6438 +Block 0006 [ 59]: 549e8d6e9749ece1 +Block 0006 [ 60]: 88ea236eed27143e +Block 0006 [ 61]: 3c0655d2f401e316 +Block 0006 [ 62]: cbc8a061330b6c63 +Block 0006 [ 63]: ce24d3dfe441fbce +Block 0006 [ 64]: 3506770825bb2ff8 +Block 0006 [ 65]: e6b01a6305481a92 +Block 0006 [ 66]: 20588369cbb512ad +Block 0006 [ 67]: 2213a5633d8e0647 +Block 0006 [ 68]: 9bb32b48673b5798 +Block 0006 [ 69]: ea2fb93e9b591ecb +Block 0006 [ 70]: 00b19e24edf72a78 +Block 0006 [ 71]: 6a3d3d8108e22084 +Block 0006 [ 72]: b725028aed7ae3c3 +Block 0006 [ 73]: bc3369b7f2b43268 +Block 0006 [ 74]: 59c97d54baba82c4 +Block 0006 [ 75]: 0fe70407db1d2ba8 +Block 0006 [ 76]: cedfed90946c12ea +Block 0006 [ 77]: e8b302ab9870454b +Block 0006 [ 78]: 9425e2a143c7796b +Block 0006 [ 79]: d3c73764a8ba8779 +Block 0006 [ 80]: 1abb5199656d79c2 +Block 0006 [ 81]: abe611198bf39091 +Block 0006 [ 82]: ea770a7acf0f8dff +Block 0006 [ 83]: 31939c4a98849740 +Block 0006 [ 84]: 336d0dfecd7680e4 +Block 0006 [ 85]: 89fc6ca46752584d +Block 0006 [ 86]: 9fcee800a2106f67 +Block 0006 [ 87]: 7cf89434037d523f +Block 0006 [ 88]: 1f3e0d1299972f00 +Block 0006 [ 89]: 06e93a81e91c6e20 +Block 0006 [ 90]: d2c72df7d0b4ab95 +Block 0006 [ 91]: b110bdcf9a586775 +Block 0006 [ 92]: 813dadde4b30fa89 +Block 0006 [ 93]: db80f76e630d57cb +Block 0006 [ 94]: 602148fcb776b5ee +Block 0006 [ 95]: f1de2acbe6ff5cc5 +Block 0006 [ 96]: 5cf779b56f544cbe +Block 0006 [ 97]: 517edbe4f764fa33 +Block 0006 [ 98]: 3b5962d26315a1c1 +Block 0006 [ 99]: 15132f4f65ed2b57 +Block 0006 [100]: 2cafb09101715abb +Block 0006 [101]: 24dc4c76915eb435 +Block 0006 [102]: 1cde78f968f5010b +Block 0006 [103]: 4a75e687c0e5addb +Block 0006 [104]: 2f4a7597b54a2108 +Block 0006 [105]: 92e11114a0a5b310 +Block 0006 [106]: 4081de32dda7c0c4 +Block 0006 [107]: 9a7eaefebd1be3a1 +Block 0006 [108]: e13f144ac34f24f8 +Block 0006 [109]: dfb987c2a58a6a77 +Block 0006 [110]: ac923f395dad20e9 +Block 0006 [111]: 5fe73860f784ff60 +Block 0006 [112]: 073a06f8b4645382 +Block 0006 [113]: d21dd239689f7774 +Block 0006 [114]: adbed6f36c5dc450 +Block 0006 [115]: 09fe2f54e53f957c +Block 0006 [116]: 03f20be6777b28c8 +Block 0006 [117]: 2ac305f861ae2328 +Block 0006 [118]: 010adf7244a13818 +Block 0006 [119]: f05617a0eddcdef9 +Block 0006 [120]: 176ec1e4b3ae2bc9 +Block 0006 [121]: 49711ed542b61a0c +Block 0006 [122]: 6ff51b60fbe95318 +Block 0006 [123]: ffbe244c9716d1f4 +Block 0006 [124]: ca3bc1d5d9a3fbde +Block 0006 [125]: 9e2baedc2994282d +Block 0006 [126]: f6904d88ad361783 +Block 0006 [127]: 4d18f37dff245cc9 +Block 0007 [ 0]: 08608d905459ab8f +Block 0007 [ 1]: 1511828c58cb7034 +Block 0007 [ 2]: f86b4d6c64eca18e +Block 0007 [ 3]: 910dfd16115bfb3d +Block 0007 [ 4]: ca995462cd7af35e +Block 0007 [ 5]: b534a28406293927 +Block 0007 [ 6]: 1f68b528fa0c341f +Block 0007 [ 7]: b71403d04beb1023 +Block 0007 [ 8]: 21d143863c913455 +Block 0007 [ 9]: 397b158ee9f2145a +Block 0007 [ 10]: 47c50637ac89043d +Block 0007 [ 11]: 24aafe85e6a98baa +Block 0007 [ 12]: f1c5bfb9f0edeba9 +Block 0007 [ 13]: 1c39dfe2091acdb7 +Block 0007 [ 14]: 1f98012686c7998b +Block 0007 [ 15]: e573b35664f125a2 +Block 0007 [ 16]: 41ce6387c3e14737 +Block 0007 [ 17]: ce201b6c25da8642 +Block 0007 [ 18]: 9c9485712de6749e +Block 0007 [ 19]: 4d3a0bf96ca9ca6f +Block 0007 [ 20]: cd4fa04baa256fa7 +Block 0007 [ 21]: 6cd2937c55e5014e +Block 0007 [ 22]: cb8094a12bc4c1f1 +Block 0007 [ 23]: 7fc7ab4a85360e65 +Block 0007 [ 24]: 15abc9339bd24b42 +Block 0007 [ 25]: db40bb117871eeb9 +Block 0007 [ 26]: 018b1e3d8797c114 +Block 0007 [ 27]: 443d81d72040af1f +Block 0007 [ 28]: 72839cad763233e5 +Block 0007 [ 29]: 36d144ac4578ff44 +Block 0007 [ 30]: 63550c21a7bb87ce +Block 0007 [ 31]: 11a2bf477a1047d7 +Block 0007 [ 32]: 62b98316a7cab0ed +Block 0007 [ 33]: ef19b4e1fa47ba2a +Block 0007 [ 34]: 8e4f5c797d9f4a5e +Block 0007 [ 35]: fb00bb2ba50c8e4a +Block 0007 [ 36]: 01d2a7386d887c79 +Block 0007 [ 37]: 038dc5d5b2c8f5bc +Block 0007 [ 38]: 7a209db9e4f51364 +Block 0007 [ 39]: ba2a35dba5398ca7 +Block 0007 [ 40]: 6cba5fff356d9204 +Block 0007 [ 41]: c436134c5ebd356c +Block 0007 [ 42]: 1f6d8f881c02f0c8 +Block 0007 [ 43]: 79f9578b66208cba +Block 0007 [ 44]: 883185e36262f210 +Block 0007 [ 45]: 38176e84f5759211 +Block 0007 [ 46]: 8b43fd09a06fd161 +Block 0007 [ 47]: 6b9f93a341204534 +Block 0007 [ 48]: 4864822e6186c325 +Block 0007 [ 49]: bbd10df9fbc66070 +Block 0007 [ 50]: f0a23fc17d85b8f3 +Block 0007 [ 51]: be609b77f183932b +Block 0007 [ 52]: 6299e15b8a2b4009 +Block 0007 [ 53]: d1df320b1814ecce +Block 0007 [ 54]: f88f9bc47a139371 +Block 0007 [ 55]: c6a533a5162809c7 +Block 0007 [ 56]: 22681af809918410 +Block 0007 [ 57]: 9f3fd2b6df45c0f6 +Block 0007 [ 58]: 3788af79005ce204 +Block 0007 [ 59]: 2551096b7e3e19c6 +Block 0007 [ 60]: e235c16d902a1fd6 +Block 0007 [ 61]: 0ba2daf3304459cd +Block 0007 [ 62]: 9e89013d8084f438 +Block 0007 [ 63]: 0ebd56ba7c464c74 +Block 0007 [ 64]: d941bf430957620a +Block 0007 [ 65]: d199fa7b0fc1fd73 +Block 0007 [ 66]: eb12abb0b8c3b518 +Block 0007 [ 67]: 79d00813cd6fa842 +Block 0007 [ 68]: a3b5710cae3cdb38 +Block 0007 [ 69]: 97e08b6907ef3aed +Block 0007 [ 70]: 10aa67cb010f8b7e +Block 0007 [ 71]: 006c99f1d172a5b8 +Block 0007 [ 72]: e8eedd0b54d5912a +Block 0007 [ 73]: d3ad4a66fc9bc685 +Block 0007 [ 74]: 04250ff0ff18d510 +Block 0007 [ 75]: 28aa693c71ea9463 +Block 0007 [ 76]: 01cad69143959494 +Block 0007 [ 77]: 0fe7efd57c37f1e5 +Block 0007 [ 78]: 220ee298dd71cc97 +Block 0007 [ 79]: f1ad80c0364ebea2 +Block 0007 [ 80]: b28b619e39a54e73 +Block 0007 [ 81]: f352f9ec4e3cf0c9 +Block 0007 [ 82]: 8be9b61e4ef0ae13 +Block 0007 [ 83]: 17958922c5e6a5ec +Block 0007 [ 84]: 3e950262449ea946 +Block 0007 [ 85]: a589af9c99c64ee1 +Block 0007 [ 86]: cfd47d0f5355f4bd +Block 0007 [ 87]: ea12164e719b9492 +Block 0007 [ 88]: 8ee249d8f1768e78 +Block 0007 [ 89]: 466bb597b18b234e +Block 0007 [ 90]: 42755351f0e5e364 +Block 0007 [ 91]: 77ca28c93d5e2d74 +Block 0007 [ 92]: 15518e8fdb4168fb +Block 0007 [ 93]: 7553eb89b7f7532c +Block 0007 [ 94]: 1aa86b8147238d58 +Block 0007 [ 95]: 1840fe7056c6aacc +Block 0007 [ 96]: 7f66b3a3d933cf77 +Block 0007 [ 97]: 91af6df904b8463d +Block 0007 [ 98]: 425c11f6d2454abc +Block 0007 [ 99]: 7de0228d7120af37 +Block 0007 [100]: a550e3769a171d93 +Block 0007 [101]: cb3c95affdf18fbd +Block 0007 [102]: 16771c9dcce5c43c +Block 0007 [103]: 137a85b35f26d6ee +Block 0007 [104]: 29f6df8f1d328a22 +Block 0007 [105]: 16356bd0f965c768 +Block 0007 [106]: c4c7d7f62b45b3f2 +Block 0007 [107]: 4145056ff2a545a6 +Block 0007 [108]: ff890a907437fdbf +Block 0007 [109]: 963f6c2a400ffa0a +Block 0007 [110]: 7ba3c82d26272ae7 +Block 0007 [111]: c670f2ad133b47b6 +Block 0007 [112]: 72b9358c18abf37f +Block 0007 [113]: 163ab2fffb5913ce +Block 0007 [114]: f19f2924afcf23c9 +Block 0007 [115]: 3a538ddf827a8f98 +Block 0007 [116]: 5e3d8b7b6b6c2dfe +Block 0007 [117]: ced14853d3425a5c +Block 0007 [118]: 644d427a8a85255c +Block 0007 [119]: 82b35f11e9d4e812 +Block 0007 [120]: 1a48a1724f09fbcc +Block 0007 [121]: 97bed0697f72c04a +Block 0007 [122]: b186b43c326a39a5 +Block 0007 [123]: ddf61b0a584c18e5 +Block 0007 [124]: dfee01b0cf4b1d1c +Block 0007 [125]: 657a9eb97cc78f0f +Block 0007 [126]: 73578c46ea1e8957 +Block 0007 [127]: 49f86e12151ef106 +Block 0008 [ 0]: 946f4172e48f45bc +Block 0008 [ 1]: 4fd6a390d54f945a +Block 0008 [ 2]: 8865c95f19e75cee +Block 0008 [ 3]: 12b699dae0b3ddd3 +Block 0008 [ 4]: ddd01143c698c3f2 +Block 0008 [ 5]: f35fc1ca1e31aca2 +Block 0008 [ 6]: 754e1f2cd4478969 +Block 0008 [ 7]: 685b4614b0e6c929 +Block 0008 [ 8]: e9bb122d275abae4 +Block 0008 [ 9]: 722dcbe15fe893e1 +Block 0008 [ 10]: 023d47887e8f9080 +Block 0008 [ 11]: 580112892d2b59d2 +Block 0008 [ 12]: 453e419fb2ae1043 +Block 0008 [ 13]: e5df64f679b21648 +Block 0008 [ 14]: 19af9f0e31b485dc +Block 0008 [ 15]: 056c9b976642c3b3 +Block 0008 [ 16]: df670b491825f243 +Block 0008 [ 17]: a5b9b53a9d497b95 +Block 0008 [ 18]: 93b566c5fed67bbc +Block 0008 [ 19]: 06163c7c0221eb12 +Block 0008 [ 20]: f7814aecb5ca06ed +Block 0008 [ 21]: 7dbf805ff7f9b301 +Block 0008 [ 22]: ebee1eb85c3c7e40 +Block 0008 [ 23]: a8c47e069b866088 +Block 0008 [ 24]: cc2880bf6f2f0e96 +Block 0008 [ 25]: f2cf558ee4c8dcaf +Block 0008 [ 26]: 8ce788341bbd111a +Block 0008 [ 27]: 7f2f058fb26c87bf +Block 0008 [ 28]: 12a14abafb6f4f38 +Block 0008 [ 29]: 48c255f582c25422 +Block 0008 [ 30]: 94dc2052aeac3a6f +Block 0008 [ 31]: dc2055d354763c6e +Block 0008 [ 32]: 4baa321da5cf5e9a +Block 0008 [ 33]: a661864923404713 +Block 0008 [ 34]: 1ebe736b08681b33 +Block 0008 [ 35]: d83e4d40de6eb189 +Block 0008 [ 36]: a266bf404b5d5c24 +Block 0008 [ 37]: 2fa6f24d6e092634 +Block 0008 [ 38]: acba046ce6646f82 +Block 0008 [ 39]: 1199b380d3e3f4e7 +Block 0008 [ 40]: 3154f06582957cbb +Block 0008 [ 41]: 3a0377b1ab9b4fc4 +Block 0008 [ 42]: 8dc110da76e9a284 +Block 0008 [ 43]: dd5e35a105c5946f +Block 0008 [ 44]: 9cb0ca79e28f3eaf +Block 0008 [ 45]: 283c6a6c3eb90ebd +Block 0008 [ 46]: 31f66b0292bcc039 +Block 0008 [ 47]: d41696b4fd10cfa8 +Block 0008 [ 48]: 00fe0d0c621b8f20 +Block 0008 [ 49]: 4becb6cc90553656 +Block 0008 [ 50]: d1b39d40b8f41f66 +Block 0008 [ 51]: f53bd48378d17266 +Block 0008 [ 52]: f6aa1c7e25b26c41 +Block 0008 [ 53]: 919e55fbae1380c8 +Block 0008 [ 54]: 5c3b125145acb6a6 +Block 0008 [ 55]: 7ab641db973f7140 +Block 0008 [ 56]: 8915b982cab617cd +Block 0008 [ 57]: d5a724abf6557eed +Block 0008 [ 58]: 42a99fa8123c786c +Block 0008 [ 59]: be5eaa49caf3160e +Block 0008 [ 60]: b374f4875813075f +Block 0008 [ 61]: 6a36ea7dfd371bb9 +Block 0008 [ 62]: 30eb208b42bd275e +Block 0008 [ 63]: 0443c2562a8b5f4e +Block 0008 [ 64]: 4a92f155246fc7e4 +Block 0008 [ 65]: 51333423de414931 +Block 0008 [ 66]: 93690a0e6bc3f988 +Block 0008 [ 67]: bbded4c9c730092a +Block 0008 [ 68]: 6a77514e8f4c6880 +Block 0008 [ 69]: ba63ec70fd3c2990 +Block 0008 [ 70]: 30107af2e79e0701 +Block 0008 [ 71]: 9e950d669014bfd3 +Block 0008 [ 72]: a7e7a792cd861334 +Block 0008 [ 73]: fd06832f385545af +Block 0008 [ 74]: 157fe306e5bef4e5 +Block 0008 [ 75]: 85b14138dc2c7322 +Block 0008 [ 76]: 194556fde93950d1 +Block 0008 [ 77]: ce5fc7d07a7bd136 +Block 0008 [ 78]: 8ee3180753b18551 +Block 0008 [ 79]: 948111f20c9e8750 +Block 0008 [ 80]: 850b46a1dba94e1a +Block 0008 [ 81]: d09e265fbf143a5e +Block 0008 [ 82]: e656195021c81e6c +Block 0008 [ 83]: b086545044b0fa3c +Block 0008 [ 84]: c8ebf0e1123a77e4 +Block 0008 [ 85]: bec9fc82189da93a +Block 0008 [ 86]: 4c8e0ef40119f4b8 +Block 0008 [ 87]: 04b99d99695a5a90 +Block 0008 [ 88]: dbdc22a5e4670bb0 +Block 0008 [ 89]: 55998f7982da27d7 +Block 0008 [ 90]: 39d7e7207e08e692 +Block 0008 [ 91]: 23897adcf2de8b18 +Block 0008 [ 92]: 8cc4c0cb5139bf2d +Block 0008 [ 93]: 2fda1e43e2fd09f3 +Block 0008 [ 94]: 9b079a6c80332e62 +Block 0008 [ 95]: a5e3689bb46ada0c +Block 0008 [ 96]: ab0283b1669ed18f +Block 0008 [ 97]: c41a2cfc00bb7e7b +Block 0008 [ 98]: 67513e080d26eaae +Block 0008 [ 99]: 722eb41b16a72fc0 +Block 0008 [100]: cb7323c1e23ddf5e +Block 0008 [101]: 1cd886fb9ec9ae72 +Block 0008 [102]: 91ba26c41e5524e8 +Block 0008 [103]: 7962eea4c76742bb +Block 0008 [104]: c99d15b6866d9227 +Block 0008 [105]: 4d653a74e6460512 +Block 0008 [106]: 4bc6875015fb2e86 +Block 0008 [107]: 9a002b9f8363c254 +Block 0008 [108]: 63fc83030f07c2b3 +Block 0008 [109]: cbccdb9b7a520112 +Block 0008 [110]: 9a309ce71918c835 +Block 0008 [111]: 1ad52732f060dd9b +Block 0008 [112]: f8a23f1db24f6873 +Block 0008 [113]: 589d7da3d7a98965 +Block 0008 [114]: 688ac7a334d9b1f8 +Block 0008 [115]: 32273c7cb982809f +Block 0008 [116]: 1092db0c6e60e72d +Block 0008 [117]: fdfcce143a3a4316 +Block 0008 [118]: 7f57fde95e5fe647 +Block 0008 [119]: c32cc72f104f110e +Block 0008 [120]: b586a6c4bef3aeda +Block 0008 [121]: 51fd5b6b873c9d93 +Block 0008 [122]: 98bdb34ea394faff +Block 0008 [123]: f203ac855a3cf9b0 +Block 0008 [124]: 1ed469c0614791eb +Block 0008 [125]: 9c66a82bdb1086a8 +Block 0008 [126]: d5fce0f666b9fbf4 +Block 0008 [127]: b5240fccb0474593 +Block 0009 [ 0]: f71d7ac1b31d0c03 +Block 0009 [ 1]: 36fa1fc6951a7721 +Block 0009 [ 2]: b07b4cbe51b81815 +Block 0009 [ 3]: aa592611faa7919f +Block 0009 [ 4]: e9ffefb063d7fb93 +Block 0009 [ 5]: 64d095d28ffd4ce5 +Block 0009 [ 6]: 426b82d6b296bdd4 +Block 0009 [ 7]: 36f597f7872bbcad +Block 0009 [ 8]: 8c67a5d17176ca0a +Block 0009 [ 9]: 009c72d087e528a1 +Block 0009 [ 10]: 45c5258429ffa95c +Block 0009 [ 11]: 041138902f445757 +Block 0009 [ 12]: e5df17e7b58ad6f5 +Block 0009 [ 13]: f77248f48fdf93f7 +Block 0009 [ 14]: 2ccd21f49fdbf5f3 +Block 0009 [ 15]: 868eb9581ad8bf6a +Block 0009 [ 16]: 7d9886dd8b20f0a5 +Block 0009 [ 17]: f1ba13572e7ce9ce +Block 0009 [ 18]: f948533dd4c66c0a +Block 0009 [ 19]: 57beec10df13ae28 +Block 0009 [ 20]: 6814a2ab7a2333bd +Block 0009 [ 21]: c8a582737a34001f +Block 0009 [ 22]: baf3cd295d2b578a +Block 0009 [ 23]: ff97f37cb11c3bb6 +Block 0009 [ 24]: ff7086083e75499f +Block 0009 [ 25]: 98a45ac01d889f68 +Block 0009 [ 26]: 00c4213dcebd6abb +Block 0009 [ 27]: 224554dbd2866552 +Block 0009 [ 28]: 84172c50092aecc2 +Block 0009 [ 29]: 0e7cc7829edd193d +Block 0009 [ 30]: ffbd59d32a3e1ccd +Block 0009 [ 31]: 3fea118182ed825d +Block 0009 [ 32]: b177558628cb6ff0 +Block 0009 [ 33]: ce032e12a93a2858 +Block 0009 [ 34]: 9a80ee26047468c1 +Block 0009 [ 35]: 9558d50a7013d04b +Block 0009 [ 36]: 7d03afab6ba77a9f +Block 0009 [ 37]: 0571cb3f95cb4f8e +Block 0009 [ 38]: 3efadf43d1515bbd +Block 0009 [ 39]: d295f20ebaea1299 +Block 0009 [ 40]: d952805bfc5f5522 +Block 0009 [ 41]: 8456b9125f950b3b +Block 0009 [ 42]: caeba582f5b9cfad +Block 0009 [ 43]: 8cf13134eff66040 +Block 0009 [ 44]: d3a4f52954197a2c +Block 0009 [ 45]: a812afdce439ff9e +Block 0009 [ 46]: 2aa4e9f9b348c5c3 +Block 0009 [ 47]: 1705ece947e35bab +Block 0009 [ 48]: 7f7397aa223f771b +Block 0009 [ 49]: fce2f4b15034ab54 +Block 0009 [ 50]: b1d69da4139bdbd8 +Block 0009 [ 51]: f67e6b188989fbe8 +Block 0009 [ 52]: d125a99b2095a29d +Block 0009 [ 53]: 9d6e470ec6c25b36 +Block 0009 [ 54]: 593b160d49e18c79 +Block 0009 [ 55]: ed6025de9776525e +Block 0009 [ 56]: 5ac3eee54aae2a66 +Block 0009 [ 57]: 5a1638b2cbdada77 +Block 0009 [ 58]: 156cd95ddfad2d28 +Block 0009 [ 59]: d204813e7b31cb39 +Block 0009 [ 60]: d4103b3f53448bed +Block 0009 [ 61]: 0c9995ac4f2738a2 +Block 0009 [ 62]: d2594d28f9c96d9c +Block 0009 [ 63]: 5bc9e9ea7845875f +Block 0009 [ 64]: 09c43be218bf86cc +Block 0009 [ 65]: c27f3f6dc8e0c8cc +Block 0009 [ 66]: c66918b7a291eb26 +Block 0009 [ 67]: b2a8f2f585ec2dae +Block 0009 [ 68]: 823f44a98b3a53df +Block 0009 [ 69]: 4d341334a6a465af +Block 0009 [ 70]: 75bee2f35122ae8e +Block 0009 [ 71]: 06f62f8c153e04ba +Block 0009 [ 72]: 802b3ff14a2babcd +Block 0009 [ 73]: 3323648a36eae7aa +Block 0009 [ 74]: 94b9cd482286815b +Block 0009 [ 75]: 67a61292a4e88710 +Block 0009 [ 76]: 8b9931e1b76cc41e +Block 0009 [ 77]: cf8d25db33f394aa +Block 0009 [ 78]: aafd87d7ef762aa9 +Block 0009 [ 79]: 3185333e28669e62 +Block 0009 [ 80]: b4ea67c36b38149c +Block 0009 [ 81]: e0a1000041058445 +Block 0009 [ 82]: 1362ecd144a7e52c +Block 0009 [ 83]: 049dfe5437183e02 +Block 0009 [ 84]: eb6e27e92a174754 +Block 0009 [ 85]: 595fbc74a2ef367f +Block 0009 [ 86]: 9a72a7c3f1ee3e84 +Block 0009 [ 87]: e9a6bcecc3f22d81 +Block 0009 [ 88]: 9347bcd9fdf576c5 +Block 0009 [ 89]: 1f7c38ff13ef70a7 +Block 0009 [ 90]: 2d274d7abcafd26c +Block 0009 [ 91]: 447ca88566a2e3f8 +Block 0009 [ 92]: 4e5711ab025a6c83 +Block 0009 [ 93]: 9aaf73a660580ec6 +Block 0009 [ 94]: d1ebf9c02c730018 +Block 0009 [ 95]: 29c443177aa901ec +Block 0009 [ 96]: 16c3dfdb779b9b0d +Block 0009 [ 97]: ee249c54b6696abb +Block 0009 [ 98]: 69547342e8b883c8 +Block 0009 [ 99]: bd8bd8373c27cbac +Block 0009 [100]: 04fc66d6d9746631 +Block 0009 [101]: fb13da4119808ae9 +Block 0009 [102]: 8bc9611f01757e03 +Block 0009 [103]: ec43bd9892f5a8f1 +Block 0009 [104]: b613e812c583a1e5 +Block 0009 [105]: 286cf5d1233abbdf +Block 0009 [106]: 18fcc7aea4a0bd0c +Block 0009 [107]: 373ce49dd8d1f90d +Block 0009 [108]: d55e507149c98c70 +Block 0009 [109]: 742ee9093356cbe0 +Block 0009 [110]: c4e5b39c1d5bad53 +Block 0009 [111]: 8c9982400af91fcf +Block 0009 [112]: e09dcaace809588a +Block 0009 [113]: aeff10b1b2894146 +Block 0009 [114]: 726fceb7fbc3f85e +Block 0009 [115]: 31d37b1028d0ae76 +Block 0009 [116]: 1275fc397d70d627 +Block 0009 [117]: c67f66396627ace7 +Block 0009 [118]: 7f90a6cdf3bdfdce +Block 0009 [119]: 0b76c955b3916250 +Block 0009 [120]: 29204a35ad80e350 +Block 0009 [121]: 11c718719db93a70 +Block 0009 [122]: 26538a9df69b4dfc +Block 0009 [123]: 476356b8a4742fc4 +Block 0009 [124]: 17c1abfa8181bb99 +Block 0009 [125]: 3a4c58a598605a4a +Block 0009 [126]: d04b9c190601d94c +Block 0009 [127]: 4955d571b6b302b8 +Block 0010 [ 0]: b993c1bd5f7029d0 +Block 0010 [ 1]: b335e227fdf8ef5f +Block 0010 [ 2]: 9237fba47420f671 +Block 0010 [ 3]: a126898dbeec57ed +Block 0010 [ 4]: 4bca4ce84aa86b25 +Block 0010 [ 5]: c038226b443c4b80 +Block 0010 [ 6]: 6f53e9bec75433a4 +Block 0010 [ 7]: c501a2f82d230b2e +Block 0010 [ 8]: e20cbbc1cdbb3fde +Block 0010 [ 9]: 7e74310ac3390e93 +Block 0010 [ 10]: 607d4856e41e6770 +Block 0010 [ 11]: 0d873576fe594cb9 +Block 0010 [ 12]: 466a5cc0b9dcb10b +Block 0010 [ 13]: 5ac4ae018e1244b6 +Block 0010 [ 14]: 6f5ea0c731cb993f +Block 0010 [ 15]: 8ae0464499a1a18b +Block 0010 [ 16]: 5786d33860ddc6aa +Block 0010 [ 17]: fbc2a7fee48c5262 +Block 0010 [ 18]: df7df9334ecc008b +Block 0010 [ 19]: 3c12389cf675c070 +Block 0010 [ 20]: 63b680dd695239e1 +Block 0010 [ 21]: 82b6b20c15633ecd +Block 0010 [ 22]: 72a8465d6fec39ae +Block 0010 [ 23]: a2e32e750d9d73d5 +Block 0010 [ 24]: bd50d62e43faed3c +Block 0010 [ 25]: d24d65fa3b7b739e +Block 0010 [ 26]: 7a13fff894085e72 +Block 0010 [ 27]: e78d115cfbe3e775 +Block 0010 [ 28]: 4ddccccaccf56fd4 +Block 0010 [ 29]: 5d4630d9d429597d +Block 0010 [ 30]: aff631f79f7cd167 +Block 0010 [ 31]: 61123ce2e2e19e76 +Block 0010 [ 32]: c493743bc954fc27 +Block 0010 [ 33]: 0cda5a79ca021b0b +Block 0010 [ 34]: f471cf3d3f0732da +Block 0010 [ 35]: aa21229ac8b02a9f +Block 0010 [ 36]: c5d1681941b6c405 +Block 0010 [ 37]: 7c4cde8e970cf13d +Block 0010 [ 38]: d9b7771cee19b845 +Block 0010 [ 39]: 2e4fc10fff00cd49 +Block 0010 [ 40]: 33ed5782df2e21ea +Block 0010 [ 41]: 93dcf1fd021b2823 +Block 0010 [ 42]: c40e0f1eedd64802 +Block 0010 [ 43]: 864794e39416a59d +Block 0010 [ 44]: e3b59bbb7918d16b +Block 0010 [ 45]: 0835a0d6bd7c4736 +Block 0010 [ 46]: cb3a4d7a2c7258d6 +Block 0010 [ 47]: d1d7a03d5b4a3e40 +Block 0010 [ 48]: 0085b98ff324f040 +Block 0010 [ 49]: 8d90ef0683b47f76 +Block 0010 [ 50]: babed82c6e950da3 +Block 0010 [ 51]: a521d85c113afa18 +Block 0010 [ 52]: e894e2a0970c9369 +Block 0010 [ 53]: cce9bdabfeb53b33 +Block 0010 [ 54]: 082a4efdfe16a2d1 +Block 0010 [ 55]: f8051ce466344f8d +Block 0010 [ 56]: ea14a2998800d044 +Block 0010 [ 57]: dda2b7fac4d942fd +Block 0010 [ 58]: 30eb10a454538f7c +Block 0010 [ 59]: c774e4c9906a7024 +Block 0010 [ 60]: 54f054ebfc467c29 +Block 0010 [ 61]: 8bf568d3a3c5fd99 +Block 0010 [ 62]: 7b399a300a0b9cc5 +Block 0010 [ 63]: 3ab29955ed1ac168 +Block 0010 [ 64]: 442c5ac818b0487f +Block 0010 [ 65]: 1b0763e5c951a8c7 +Block 0010 [ 66]: 1d9be376de427fc1 +Block 0010 [ 67]: de496feb7dc80268 +Block 0010 [ 68]: e62a4cdfa2bafa48 +Block 0010 [ 69]: da8322a3ed887c0b +Block 0010 [ 70]: 85a1645342749fbf +Block 0010 [ 71]: 7ce2a7496bc24cf6 +Block 0010 [ 72]: 6e8921ed63828c7f +Block 0010 [ 73]: 8237828d04979c41 +Block 0010 [ 74]: a80bc40b91f7d49a +Block 0010 [ 75]: 6e6a295d6e35b945 +Block 0010 [ 76]: 89e7346006fa765a +Block 0010 [ 77]: 669c918f21489879 +Block 0010 [ 78]: 8920540f8131241f +Block 0010 [ 79]: 4945d49ed827838b +Block 0010 [ 80]: 332e127fabb53df8 +Block 0010 [ 81]: 7d21956c64b39744 +Block 0010 [ 82]: 5773e3c42b68bfa4 +Block 0010 [ 83]: 18e24882ca88acb9 +Block 0010 [ 84]: 9daf7d7818505288 +Block 0010 [ 85]: a082a00e4cafa716 +Block 0010 [ 86]: 26d4a2d3df30febb +Block 0010 [ 87]: 9580317f69598ad6 +Block 0010 [ 88]: 7484c89ffe4b2eef +Block 0010 [ 89]: b8617bf6a8e210ad +Block 0010 [ 90]: 730e1d6b1b3526d5 +Block 0010 [ 91]: 07288bde84d4c8e3 +Block 0010 [ 92]: 9f5268a294e2adfc +Block 0010 [ 93]: 661bcbe84714c7c2 +Block 0010 [ 94]: 374431dc30ad551a +Block 0010 [ 95]: 77b23b931fe980e6 +Block 0010 [ 96]: 7c88f25c1256f646 +Block 0010 [ 97]: 59e2afc7421061dc +Block 0010 [ 98]: 05134ad1fd1939ce +Block 0010 [ 99]: d699e236278af73c +Block 0010 [100]: e3bce3ca0ad1bd89 +Block 0010 [101]: cab0b5500d334a45 +Block 0010 [102]: 39d1b45c25ccb8df +Block 0010 [103]: a3821ced65f2f532 +Block 0010 [104]: 41cf244e80d20bb3 +Block 0010 [105]: 9593af67ca6b8665 +Block 0010 [106]: c1f9e1e46f96689f +Block 0010 [107]: b6bdef4c8c84e74f +Block 0010 [108]: 94d40f31eaaa2e44 +Block 0010 [109]: bbec161350126a1a +Block 0010 [110]: 60b54428ddd5b5fe +Block 0010 [111]: 1d2a926c9ede4276 +Block 0010 [112]: d095c896f08970e5 +Block 0010 [113]: 0b8903eed5e169c7 +Block 0010 [114]: 28c8e70eae29763a +Block 0010 [115]: f1b2260d6d41e7ee +Block 0010 [116]: 126762a86c807865 +Block 0010 [117]: eaf3b1bd561d8a6c +Block 0010 [118]: cf6ac32eded6a9c1 +Block 0010 [119]: f039b2bcefc45b52 +Block 0010 [120]: c93b02aa4366b822 +Block 0010 [121]: f68b6515d2589d6c +Block 0010 [122]: 230c8155563a5498 +Block 0010 [123]: 229abab769c2c232 +Block 0010 [124]: b7bab4bf507dd51c +Block 0010 [125]: 865b9289dbb02d72 +Block 0010 [126]: 8a3ffe783605f32b +Block 0010 [127]: 1edb7add047109a5 +Block 0011 [ 0]: 5fe2c3629fa3ee83 +Block 0011 [ 1]: b3d2beefbabce8ac +Block 0011 [ 2]: 72942fa98eec830c +Block 0011 [ 3]: 227ad56dfb1dfcbb +Block 0011 [ 4]: 64c0845d046c046b +Block 0011 [ 5]: 3f2c34f5b626488b +Block 0011 [ 6]: 4ebce1ad53d2f691 +Block 0011 [ 7]: aa5e798ff6600903 +Block 0011 [ 8]: c882e71490d159ee +Block 0011 [ 9]: 139b21b383b533b6 +Block 0011 [ 10]: 413204981bd82a87 +Block 0011 [ 11]: 36f87f9bddf156b0 +Block 0011 [ 12]: 22ea88710821972c +Block 0011 [ 13]: e8be47cfb4f1bde8 +Block 0011 [ 14]: b8b556041f484f9c +Block 0011 [ 15]: 66e82cc41de0d401 +Block 0011 [ 16]: bca8191ac28313bc +Block 0011 [ 17]: abb7463754f598bc +Block 0011 [ 18]: 5d7a40b1f8394347 +Block 0011 [ 19]: 927a3616b1c69ade +Block 0011 [ 20]: 476045d4c050649e +Block 0011 [ 21]: f8e3b38bd6919cd5 +Block 0011 [ 22]: 54e3eda0ad5ef065 +Block 0011 [ 23]: cf1f60f880e92a70 +Block 0011 [ 24]: 77ce0b66240f6bb3 +Block 0011 [ 25]: 5fccfa14a0aac40f +Block 0011 [ 26]: e92b36364de83bc2 +Block 0011 [ 27]: 2fac24203b29d455 +Block 0011 [ 28]: 1f59b91c3e8ce701 +Block 0011 [ 29]: f6325db0e6cf5db7 +Block 0011 [ 30]: cde857254c0d8753 +Block 0011 [ 31]: 270efe3a4d4383cf +Block 0011 [ 32]: 6fa171ad462e1d5f +Block 0011 [ 33]: 7f898ecf3127d9de +Block 0011 [ 34]: 395ff0b219c6fd34 +Block 0011 [ 35]: 8ce0d1368c66870e +Block 0011 [ 36]: 04e5aa8dd7049358 +Block 0011 [ 37]: 1c93fd6ce65f1517 +Block 0011 [ 38]: 7a4c941e71b3e0a7 +Block 0011 [ 39]: c6cf012a56968ade +Block 0011 [ 40]: e2f74e80ee223964 +Block 0011 [ 41]: d29e097677b886b3 +Block 0011 [ 42]: af5dd662ba49095b +Block 0011 [ 43]: 6978e6c06707d66c +Block 0011 [ 44]: b465f5b5226979d4 +Block 0011 [ 45]: 94fdf590ea8fff6e +Block 0011 [ 46]: fc00f5336bb3a35d +Block 0011 [ 47]: f1a63dd0547ac7d0 +Block 0011 [ 48]: 0b63794ae2fd4f9a +Block 0011 [ 49]: b5686907a46a9428 +Block 0011 [ 50]: e59fe5615f29bf23 +Block 0011 [ 51]: 33fafa9d750c4cc9 +Block 0011 [ 52]: 4fa3df448e6effbc +Block 0011 [ 53]: d8fd1d31e7daf2ef +Block 0011 [ 54]: 22eebb769680e792 +Block 0011 [ 55]: e812f157611f5675 +Block 0011 [ 56]: 93fedfe6bd369c49 +Block 0011 [ 57]: 59dc7eeb904773dd +Block 0011 [ 58]: a4b40ad32d554888 +Block 0011 [ 59]: 744d37f36abb0092 +Block 0011 [ 60]: 059214737176c6ba +Block 0011 [ 61]: 1a700fa9557eef5f +Block 0011 [ 62]: eca56e2d91882ba4 +Block 0011 [ 63]: 14f42776e4cf5381 +Block 0011 [ 64]: 44756fc06ec6c65c +Block 0011 [ 65]: 2fe700f9173ba95c +Block 0011 [ 66]: 1e0107f5209a8329 +Block 0011 [ 67]: b4c0f8a00d972eee +Block 0011 [ 68]: f180516da3569255 +Block 0011 [ 69]: ff000c7df6506db2 +Block 0011 [ 70]: c6771d7e25863436 +Block 0011 [ 71]: aae7b9969ec5b78d +Block 0011 [ 72]: bec55327abb230ce +Block 0011 [ 73]: b8a95311da085eef +Block 0011 [ 74]: 80a76344e94d37a6 +Block 0011 [ 75]: e7322b491ae64268 +Block 0011 [ 76]: 60b731f8b9bce8f5 +Block 0011 [ 77]: dcb8a5456a58e1b4 +Block 0011 [ 78]: f3c5081fd8222c9a +Block 0011 [ 79]: c821603c76a0a1a1 +Block 0011 [ 80]: 4246de6a30129f61 +Block 0011 [ 81]: a86b679c621e62bd +Block 0011 [ 82]: 2e726675015a9f66 +Block 0011 [ 83]: 6397c3c8d8b1a8ef +Block 0011 [ 84]: 8f7e51fdd1484e23 +Block 0011 [ 85]: 6fa5dce93186cdcd +Block 0011 [ 86]: ddca57f16e3ceea5 +Block 0011 [ 87]: 6c7c6df39e7f1011 +Block 0011 [ 88]: a4e2f226b52098e8 +Block 0011 [ 89]: 9559cebee47939c3 +Block 0011 [ 90]: b0c9f32b08a3ab5a +Block 0011 [ 91]: eea0d795a627fd1a +Block 0011 [ 92]: 448fc1ead715ad85 +Block 0011 [ 93]: d19610358c85ac0c +Block 0011 [ 94]: 62ee1eed08cb519c +Block 0011 [ 95]: 787ed35781df088b +Block 0011 [ 96]: 4f79006cc037761e +Block 0011 [ 97]: 4bc68ec57b36a9f7 +Block 0011 [ 98]: 9e74541e84cfa14e +Block 0011 [ 99]: 06d86aafd803d99b +Block 0011 [100]: 6e3eca30777d4653 +Block 0011 [101]: 69d1b2810057a1de +Block 0011 [102]: 2231841468d29508 +Block 0011 [103]: 6b30141f71aac157 +Block 0011 [104]: dbbf724568091549 +Block 0011 [105]: d8a9c58e4d894d80 +Block 0011 [106]: 43ff74eb372afdc5 +Block 0011 [107]: f42c4e3a8ac0c408 +Block 0011 [108]: b7c05437c026add9 +Block 0011 [109]: b31f94ec29d359f2 +Block 0011 [110]: 5e288d4c73af4bdb +Block 0011 [111]: 756a80665001aed3 +Block 0011 [112]: 736d66df99a2be76 +Block 0011 [113]: a606c036d92fcffe +Block 0011 [114]: cb37bd31ede4471a +Block 0011 [115]: ba27d12d88a27fe0 +Block 0011 [116]: 2f5873817e1c35de +Block 0011 [117]: 84e8bcb44320ef4f +Block 0011 [118]: b855efc385514b4b +Block 0011 [119]: 1c2fb55a05c6d53f +Block 0011 [120]: 64969aa359025900 +Block 0011 [121]: 1fae4a4302afbc5d +Block 0011 [122]: 82681cfa3cf9ceb7 +Block 0011 [123]: 60d5c0017e77004b +Block 0011 [124]: 5d6b52231aa6c2fc +Block 0011 [125]: 590d6387fc05be07 +Block 0011 [126]: 5ab275846b663589 +Block 0011 [127]: 6d63a6652c9780d1 +Block 0012 [ 0]: 5eb35b81bd053cc0 +Block 0012 [ 1]: 7641c90975633b66 +Block 0012 [ 2]: f8a2d4bd05fea682 +Block 0012 [ 3]: dbf53b206e11489c +Block 0012 [ 4]: c243472fca0f1d05 +Block 0012 [ 5]: f246293a97b52cd9 +Block 0012 [ 6]: 222860d28a78faee +Block 0012 [ 7]: aff4e84133704f8d +Block 0012 [ 8]: 0085dd170896441d +Block 0012 [ 9]: 6dd0efebc63d9a57 +Block 0012 [ 10]: 42fc1383e469732c +Block 0012 [ 11]: 20ec25037814bdbb +Block 0012 [ 12]: b8c240862f80a62d +Block 0012 [ 13]: af389ee2c0de45e3 +Block 0012 [ 14]: 9ede39da388711c5 +Block 0012 [ 15]: c988c927980074c4 +Block 0012 [ 16]: 42742d6879986b1a +Block 0012 [ 17]: 1cd69a0069e8b6d6 +Block 0012 [ 18]: c089f385e42a7554 +Block 0012 [ 19]: 93cd82acbefbe235 +Block 0012 [ 20]: 5d4d15930067eb4d +Block 0012 [ 21]: a0f32413740ccd14 +Block 0012 [ 22]: e8d285495c219573 +Block 0012 [ 23]: 6767ce984f856d11 +Block 0012 [ 24]: 6157243bb3276f9e +Block 0012 [ 25]: fe40efcb6d208003 +Block 0012 [ 26]: b089203e8d0bbe9e +Block 0012 [ 27]: 352ed22a2abeed77 +Block 0012 [ 28]: 9a283ee0cb62412f +Block 0012 [ 29]: af670ea81a83f914 +Block 0012 [ 30]: 8110d525c2cbf453 +Block 0012 [ 31]: 1fef517c56f77b24 +Block 0012 [ 32]: d4446f905d7f1e5c +Block 0012 [ 33]: 977e658395321308 +Block 0012 [ 34]: 3001f86c9432b412 +Block 0012 [ 35]: 062b559150d175b8 +Block 0012 [ 36]: 8d24f46cbd21f974 +Block 0012 [ 37]: 911a79204b56fd9b +Block 0012 [ 38]: 36d534094c932cd2 +Block 0012 [ 39]: c52abffaf521c660 +Block 0012 [ 40]: 01e338e319177a5a +Block 0012 [ 41]: bbfe5ed4bf00aca5 +Block 0012 [ 42]: c782e6aeb0a43c30 +Block 0012 [ 43]: b027e3d82037f5cc +Block 0012 [ 44]: 64a4103b744e4e94 +Block 0012 [ 45]: 9670a86aeb267168 +Block 0012 [ 46]: 6d82ef7ebc12d747 +Block 0012 [ 47]: c0ce445100e0814b +Block 0012 [ 48]: 3ebd68e5b7f8c349 +Block 0012 [ 49]: 62a4cd03600e4f0f +Block 0012 [ 50]: ed30bd78b1885ff0 +Block 0012 [ 51]: 0fd66bdd36d98a98 +Block 0012 [ 52]: 03abfc600e92f6c3 +Block 0012 [ 53]: c9696dbd2e2eba13 +Block 0012 [ 54]: cc14dc0fe7d114cc +Block 0012 [ 55]: e8ea18a97e82d90c +Block 0012 [ 56]: 0424e0fe0044c042 +Block 0012 [ 57]: ffae154a49dd9d01 +Block 0012 [ 58]: 6658a1ed74f08a8b +Block 0012 [ 59]: 248914e8d4de3743 +Block 0012 [ 60]: 23b1a8a054fc2dc9 +Block 0012 [ 61]: 54bb6b0f239a1202 +Block 0012 [ 62]: b26d8545b0b8d431 +Block 0012 [ 63]: 41029e4ba502397a +Block 0012 [ 64]: 421e06ec5441bcb2 +Block 0012 [ 65]: 1ba5b0ee439d2d63 +Block 0012 [ 66]: 2da3a807f3ff4323 +Block 0012 [ 67]: 2742b4c66c62189d +Block 0012 [ 68]: bd9d25027fc2314a +Block 0012 [ 69]: 66d3b6f9cbb56538 +Block 0012 [ 70]: d33c241653c83fe5 +Block 0012 [ 71]: 7ae3528f6e512592 +Block 0012 [ 72]: ef5a0296a28a43fd +Block 0012 [ 73]: a0edb71f2487989b +Block 0012 [ 74]: a4cb2cec23ed537c +Block 0012 [ 75]: b5f488772baa93eb +Block 0012 [ 76]: 49ca7fa7da5fdf94 +Block 0012 [ 77]: 888430579906b669 +Block 0012 [ 78]: c19fcbbe58ec7891 +Block 0012 [ 79]: aa6d5dfa8e7cb53e +Block 0012 [ 80]: 0615bb3755e4ddbb +Block 0012 [ 81]: 6a7f71b5130eab08 +Block 0012 [ 82]: 0ea866119ff0f0ea +Block 0012 [ 83]: 97830e7c4f50687b +Block 0012 [ 84]: 4bcb4a4a73359185 +Block 0012 [ 85]: 0f1ca64127e1448c +Block 0012 [ 86]: 2d16448bcc734e2f +Block 0012 [ 87]: 9ff24758d2990ee0 +Block 0012 [ 88]: 7cc84dfc8b738b71 +Block 0012 [ 89]: 9aa3f9947fb1f62d +Block 0012 [ 90]: 09354a98af66a3fe +Block 0012 [ 91]: 612103bfbda63484 +Block 0012 [ 92]: ab307f9b9f62e01b +Block 0012 [ 93]: ed837a895bb8b2d6 +Block 0012 [ 94]: 141d971b389f1d29 +Block 0012 [ 95]: bbba4eea3e13b193 +Block 0012 [ 96]: e3532479251d0b57 +Block 0012 [ 97]: 2c32b548cb6bf2ed +Block 0012 [ 98]: ed5ee29a68174778 +Block 0012 [ 99]: aa55d7b0274f0e31 +Block 0012 [100]: e4b5d717ba725392 +Block 0012 [101]: de42cbaad6431d7e +Block 0012 [102]: 860180f00221947b +Block 0012 [103]: 78472da3db1201a5 +Block 0012 [104]: b52ac1918c4c2ed7 +Block 0012 [105]: 17391fc4569e555c +Block 0012 [106]: 499819cf76e30f9b +Block 0012 [107]: a675cac605905f75 +Block 0012 [108]: 6a665ec6d7126dce +Block 0012 [109]: 4f94b37966787280 +Block 0012 [110]: de10b2867e5dbe38 +Block 0012 [111]: 832cbd205f28a0ea +Block 0012 [112]: 44e056fd2e9b0082 +Block 0012 [113]: 81855caf3d872ca9 +Block 0012 [114]: 54fe1974935fd3b9 +Block 0012 [115]: 68c029edb1ee47be +Block 0012 [116]: 0c79bbc7e8ac560f +Block 0012 [117]: 2656c97869498c44 +Block 0012 [118]: 58ca9f1682a82cff +Block 0012 [119]: 35232b69467d0037 +Block 0012 [120]: 7d4e47ee2c0cca0b +Block 0012 [121]: 808132432378c13c +Block 0012 [122]: 6fe35ab35928b42c +Block 0012 [123]: e5b761f541a98818 +Block 0012 [124]: debb7cca4239ab7d +Block 0012 [125]: d2c77542f359d6f4 +Block 0012 [126]: 6dee7cf3e7094763 +Block 0012 [127]: 412d341f4db85305 +Block 0013 [ 0]: c70920a92cb26ed9 +Block 0013 [ 1]: d9d1a305c3c4ab20 +Block 0013 [ 2]: 5e105d030521a722 +Block 0013 [ 3]: b699dcfc017a8eed +Block 0013 [ 4]: f186fb821a424d24 +Block 0013 [ 5]: 3cbdc486daf92b0b +Block 0013 [ 6]: 73ead930b6005763 +Block 0013 [ 7]: 369651d278a36f82 +Block 0013 [ 8]: 6b321d4426764d6d +Block 0013 [ 9]: 65359c09f4aa9130 +Block 0013 [ 10]: bac29a7788b63d81 +Block 0013 [ 11]: 6141dc0be16d635d +Block 0013 [ 12]: d71fe34cdb32c062 +Block 0013 [ 13]: 783373adad773100 +Block 0013 [ 14]: 623a786f866c4040 +Block 0013 [ 15]: f36347067043d854 +Block 0013 [ 16]: 30caf9b9782c9dfb +Block 0013 [ 17]: 61ca4437a6c3fde3 +Block 0013 [ 18]: f7187ef60eab8508 +Block 0013 [ 19]: 65246f0526f71516 +Block 0013 [ 20]: 7d487059b075eb12 +Block 0013 [ 21]: 5188536efc815a54 +Block 0013 [ 22]: 2d5101c366b1f784 +Block 0013 [ 23]: dcdb485cb186f0cd +Block 0013 [ 24]: 3252c1a7fd162804 +Block 0013 [ 25]: 433de6dac35f9057 +Block 0013 [ 26]: f95f0f0b42c73d69 +Block 0013 [ 27]: 67f3b675462b1dda +Block 0013 [ 28]: d39c71d2476e87ea +Block 0013 [ 29]: f652d879ced55160 +Block 0013 [ 30]: dde336e862764fdf +Block 0013 [ 31]: 6088281a6f50fbda +Block 0013 [ 32]: b852cf8a0737bd37 +Block 0013 [ 33]: 6263a7ac759c6f6f +Block 0013 [ 34]: 07eacff726a0e0c2 +Block 0013 [ 35]: c88b010fea77e722 +Block 0013 [ 36]: 957d644af7a1d16e +Block 0013 [ 37]: e14ff78741afe828 +Block 0013 [ 38]: a327f71f969be502 +Block 0013 [ 39]: 7de49f4e170813f4 +Block 0013 [ 40]: e2d814b3994b3fca +Block 0013 [ 41]: 1908fb9c157569bb +Block 0013 [ 42]: 976111c502a0f245 +Block 0013 [ 43]: 89cf1accc7dbfd36 +Block 0013 [ 44]: fc3de0f3e74f5c88 +Block 0013 [ 45]: 8a2959b9ecaaf303 +Block 0013 [ 46]: b933b20c6cc38c3b +Block 0013 [ 47]: 821d84298c43a930 +Block 0013 [ 48]: 3fff1ee1832c4e0a +Block 0013 [ 49]: d0f56311037d5f41 +Block 0013 [ 50]: 371028f135ed5c9e +Block 0013 [ 51]: 05d816f92a122587 +Block 0013 [ 52]: 95f0eb6798d608e7 +Block 0013 [ 53]: 80c91b584f0b03fc +Block 0013 [ 54]: 44d1a6ae6e195f06 +Block 0013 [ 55]: ce1a69c88ccfde9e +Block 0013 [ 56]: 55e6aa8a5921a608 +Block 0013 [ 57]: a9d857bfc24a2e17 +Block 0013 [ 58]: a4ab20a453ef665c +Block 0013 [ 59]: b9ea6bada03f6b71 +Block 0013 [ 60]: 093918f0708179c8 +Block 0013 [ 61]: 57224c2518e38f9d +Block 0013 [ 62]: 546a6137c5c52378 +Block 0013 [ 63]: cdab2811db1a5e0c +Block 0013 [ 64]: f69c38c0b38d90d3 +Block 0013 [ 65]: b6917c99e10d6f0a +Block 0013 [ 66]: f692ef24bd348ce5 +Block 0013 [ 67]: c0e6070792830b70 +Block 0013 [ 68]: 60cae1d8de0a398d +Block 0013 [ 69]: 3bcc56d30a556965 +Block 0013 [ 70]: c0f29dfeb7b5e34a +Block 0013 [ 71]: 2704f9c770be92bc +Block 0013 [ 72]: 00b3a71eacbebfab +Block 0013 [ 73]: 5b92d32543716583 +Block 0013 [ 74]: 7e24bb60453c2970 +Block 0013 [ 75]: 2df67c4143260c92 +Block 0013 [ 76]: c5fde8273c0137f7 +Block 0013 [ 77]: b0a7848eac665513 +Block 0013 [ 78]: 4ccb4516a016c07d +Block 0013 [ 79]: 60c02bf8de4f1bc3 +Block 0013 [ 80]: e8e6b622b3d9bfbb +Block 0013 [ 81]: 379e0403b68c16ca +Block 0013 [ 82]: f0971a9a29bc1c8b +Block 0013 [ 83]: b86253946474734d +Block 0013 [ 84]: f1abbc26aca6f49a +Block 0013 [ 85]: c1b54462f1ac893e +Block 0013 [ 86]: 5d524385f72433bb +Block 0013 [ 87]: 44453f44df1d2608 +Block 0013 [ 88]: a17c13e65c78dc86 +Block 0013 [ 89]: d920daf0f8abf0fa +Block 0013 [ 90]: 24d05fcfb4261ea7 +Block 0013 [ 91]: fe57e1c7dbd46e45 +Block 0013 [ 92]: e0cf1d36c1482a53 +Block 0013 [ 93]: 0099360275359288 +Block 0013 [ 94]: 875df94b517090c8 +Block 0013 [ 95]: 771125540ad7b6e0 +Block 0013 [ 96]: 658769481c9f2d91 +Block 0013 [ 97]: 8e96e8797fc2b335 +Block 0013 [ 98]: c117f6b6519475c6 +Block 0013 [ 99]: 30b95e0e37f7f933 +Block 0013 [100]: 55e73cb5fa5b4735 +Block 0013 [101]: 7ea0b7d4a9b76057 +Block 0013 [102]: 878a1c10e2d6523e +Block 0013 [103]: d675de48042f30fe +Block 0013 [104]: 17f3d868f1c5e8a3 +Block 0013 [105]: 3d341616c62ce828 +Block 0013 [106]: 268acb2a936b4cc3 +Block 0013 [107]: d1bf24d7d14d8894 +Block 0013 [108]: 75e5104aa5274d8f +Block 0013 [109]: fa23bc856604f803 +Block 0013 [110]: 79c3a14ed5cec597 +Block 0013 [111]: eaf01ffc019b86bd +Block 0013 [112]: 4b2f2e5888831da1 +Block 0013 [113]: 8097cfa74319e9a6 +Block 0013 [114]: d9d2a50cdda6e52c +Block 0013 [115]: 39f7e9e70a8fc338 +Block 0013 [116]: 00a53fba2c35f3d6 +Block 0013 [117]: 8c93edd0ff109ca1 +Block 0013 [118]: f6075da5089f6509 +Block 0013 [119]: bf06e904ef71e7b2 +Block 0013 [120]: c7052c3a08ac9384 +Block 0013 [121]: a283f90913024a36 +Block 0013 [122]: d1097e4b32547ab2 +Block 0013 [123]: 14f15ce9846360cf +Block 0013 [124]: e896c41d236001a5 +Block 0013 [125]: 28834b042100ffff +Block 0013 [126]: cd4684cbb6e07746 +Block 0013 [127]: 9e9e5138ae2447c6 +Block 0014 [ 0]: 464fe499fd4bc54a +Block 0014 [ 1]: 01ca27117a522b27 +Block 0014 [ 2]: cefb91b50a87ec01 +Block 0014 [ 3]: 0bd05a9a7af64404 +Block 0014 [ 4]: 41514da378231234 +Block 0014 [ 5]: cc3c841b4962d7e6 +Block 0014 [ 6]: 59d32fdfa0f1799c +Block 0014 [ 7]: 27cad6e8edad4f2c +Block 0014 [ 8]: 594398209f4b2930 +Block 0014 [ 9]: f6c5854c48e52087 +Block 0014 [ 10]: 29d68e913c165052 +Block 0014 [ 11]: ce2fb5ab0f259e1f +Block 0014 [ 12]: 3ba0c01b6b7786d1 +Block 0014 [ 13]: 3c00b361c52adae1 +Block 0014 [ 14]: 3a86e3364e49fa6e +Block 0014 [ 15]: db551315c92412f7 +Block 0014 [ 16]: 528d22685ecbe099 +Block 0014 [ 17]: 0771dc1de2c966bf +Block 0014 [ 18]: b144f684b0e297cb +Block 0014 [ 19]: a23b7edda45b4e67 +Block 0014 [ 20]: 67fb1a46a13ad6ea +Block 0014 [ 21]: 9f1dd5edf2d9eb38 +Block 0014 [ 22]: bb2cafbb4897b681 +Block 0014 [ 23]: 0cb4c83cd099415e +Block 0014 [ 24]: da038126b8389fca +Block 0014 [ 25]: ce8f9af6da253e4f +Block 0014 [ 26]: 92f710c97b9f1a93 +Block 0014 [ 27]: 4d8a396ead1f1b3f +Block 0014 [ 28]: 926c1378e72539b1 +Block 0014 [ 29]: 46534e08a849cc26 +Block 0014 [ 30]: c990cb8c547e8a1e +Block 0014 [ 31]: 88b8edf87ece7489 +Block 0014 [ 32]: 4e69a49536b34b2e +Block 0014 [ 33]: f565f19fed18634a +Block 0014 [ 34]: 267d9281fcfafcd7 +Block 0014 [ 35]: 150c54e6e1e509f1 +Block 0014 [ 36]: 04b62fc3c290d9cf +Block 0014 [ 37]: 03e5edb36f774565 +Block 0014 [ 38]: 6fdca22c7481ed92 +Block 0014 [ 39]: 2d2be57e0ae66e0b +Block 0014 [ 40]: 42865d66ac66c1b3 +Block 0014 [ 41]: f843b00c30d7c44f +Block 0014 [ 42]: 5e412a9e2d78a1cc +Block 0014 [ 43]: cf217c5b54fdabec +Block 0014 [ 44]: d6d5c47336e51500 +Block 0014 [ 45]: 2e99184e7e141c40 +Block 0014 [ 46]: 8aa25d6a64b77d55 +Block 0014 [ 47]: d61047ee538eb859 +Block 0014 [ 48]: 37e959cef2486752 +Block 0014 [ 49]: 9d9b9432b971d5c8 +Block 0014 [ 50]: de1dfe11560c27c2 +Block 0014 [ 51]: 7463c62e208d9a50 +Block 0014 [ 52]: 1a271dcd0843ecdd +Block 0014 [ 53]: a4b6a899d90b4216 +Block 0014 [ 54]: 5aa12825aba07285 +Block 0014 [ 55]: e4c55247c2be17ac +Block 0014 [ 56]: d2f98ffbef59c5d1 +Block 0014 [ 57]: b06dec47496fe53b +Block 0014 [ 58]: 97c77c0aebd0fe77 +Block 0014 [ 59]: d428ee00d7ffb69a +Block 0014 [ 60]: 994609d7fdf59129 +Block 0014 [ 61]: 44ddec16911fa14e +Block 0014 [ 62]: 6bac7e6b73a99555 +Block 0014 [ 63]: b9cd8040e25ab661 +Block 0014 [ 64]: a910eb8e41cf223f +Block 0014 [ 65]: 722fd0baa5b77c73 +Block 0014 [ 66]: 0b44f42d90da09fa +Block 0014 [ 67]: deb45959e84b5f57 +Block 0014 [ 68]: 80b9388d473ff3f3 +Block 0014 [ 69]: 2e30383755ef7114 +Block 0014 [ 70]: 7b2169c31fe6f39a +Block 0014 [ 71]: 9e7583bfcde8e7b6 +Block 0014 [ 72]: dcf529aff86152bb +Block 0014 [ 73]: 31451434cedfaeac +Block 0014 [ 74]: 88d86ffc5ba97e6f +Block 0014 [ 75]: 78335f8de49f182b +Block 0014 [ 76]: 9048a85e52e84c34 +Block 0014 [ 77]: cdfa26b74260f3f2 +Block 0014 [ 78]: 68328318c0cd0702 +Block 0014 [ 79]: cedbff36e47cae15 +Block 0014 [ 80]: 21ff51c6aed6d794 +Block 0014 [ 81]: dd8e212e2e46c0f6 +Block 0014 [ 82]: 9485c1a009bd5e98 +Block 0014 [ 83]: 9479bd87f489267d +Block 0014 [ 84]: 36d19db1b3894049 +Block 0014 [ 85]: 17625eaad7eb635f +Block 0014 [ 86]: 08afd5df602241e2 +Block 0014 [ 87]: d12f716d01def27a +Block 0014 [ 88]: e10451a6441ecd00 +Block 0014 [ 89]: 81b2ccdc64736c07 +Block 0014 [ 90]: 07bb4d968b09b954 +Block 0014 [ 91]: 442e179652c03202 +Block 0014 [ 92]: 2663dfd4ed026986 +Block 0014 [ 93]: 21dcbad0d595f34c +Block 0014 [ 94]: f290c650c607c61e +Block 0014 [ 95]: 0558c655f8baacb2 +Block 0014 [ 96]: 76880b01adcce90f +Block 0014 [ 97]: 4f9060d2c6065d59 +Block 0014 [ 98]: c11f4eb991497926 +Block 0014 [ 99]: df91c784b49cfa8a +Block 0014 [100]: b28e4591441e80d5 +Block 0014 [101]: 6210f99cc16bf292 +Block 0014 [102]: 3773ca1ff7918a52 +Block 0014 [103]: bdaad928b768f9e9 +Block 0014 [104]: 8ca72c318c9e4eaa +Block 0014 [105]: 93d6a168756cc4df +Block 0014 [106]: 531c0f8459e00218 +Block 0014 [107]: 24cd1b413c399ac8 +Block 0014 [108]: 85d74155ca0afbc3 +Block 0014 [109]: e31c316e7a391faa +Block 0014 [110]: 53e9550145a43efa +Block 0014 [111]: 0efaf72fee17caf8 +Block 0014 [112]: 6e53a1b3b4451058 +Block 0014 [113]: 326429769306e1cd +Block 0014 [114]: 5f28af8f91b9094b +Block 0014 [115]: 86ec80f642192573 +Block 0014 [116]: 743c986ada4f4279 +Block 0014 [117]: 4672258b7ac2db20 +Block 0014 [118]: cd4c5ef34f20f7bd +Block 0014 [119]: c633106a5ff76cca +Block 0014 [120]: e15b5f635bba35ed +Block 0014 [121]: ed2563411ee74df7 +Block 0014 [122]: 33641bd5355327d8 +Block 0014 [123]: 2417d1d6977cbbdf +Block 0014 [124]: 4a84eca8fbd6b23a +Block 0014 [125]: aa8c5732a97e917e +Block 0014 [126]: 70e8d8c96fbcaf79 +Block 0014 [127]: 018888d29ee05f5a +Block 0015 [ 0]: 603ea679f1f7f248 +Block 0015 [ 1]: 51a571c385f5ae35 +Block 0015 [ 2]: 7c3362cd969131c5 +Block 0015 [ 3]: dfb8c198f2780d3e +Block 0015 [ 4]: c1e8e34f1518a415 +Block 0015 [ 5]: 828f73908e5ff6bc +Block 0015 [ 6]: 168506eaeae05625 +Block 0015 [ 7]: 9443dbd5a6a34152 +Block 0015 [ 8]: b1fc6687b6c1f551 +Block 0015 [ 9]: a943dfaeb6b48116 +Block 0015 [ 10]: ebf2b2633b70f35e +Block 0015 [ 11]: 33da4887c873fff2 +Block 0015 [ 12]: 07ea6837a6474d37 +Block 0015 [ 13]: 3160ebf9f74f9ddf +Block 0015 [ 14]: 9d84df5f33ca9058 +Block 0015 [ 15]: 2fb11cddd7f966f6 +Block 0015 [ 16]: 3368e81e0b610af2 +Block 0015 [ 17]: 58a7f918c416cc7e +Block 0015 [ 18]: 8edb15b8658b1678 +Block 0015 [ 19]: 923c66271573e83c +Block 0015 [ 20]: 71368b07cb9ec2bb +Block 0015 [ 21]: abae2356cd9054ca +Block 0015 [ 22]: ec213efd5a710eed +Block 0015 [ 23]: 029899dfc5d97961 +Block 0015 [ 24]: 83c20d46709f4846 +Block 0015 [ 25]: bcf0c30d35ed67f1 +Block 0015 [ 26]: 476549a704059ff9 +Block 0015 [ 27]: a36d09d17ca38288 +Block 0015 [ 28]: 2bbdd13b236e6f77 +Block 0015 [ 29]: 3cf08ae267be5c1c +Block 0015 [ 30]: 7ad9e9f695a7d8f6 +Block 0015 [ 31]: a5218e662af06188 +Block 0015 [ 32]: fef135b2545f0c23 +Block 0015 [ 33]: fdc6c6552ae5abd6 +Block 0015 [ 34]: e214be48ab403d6e +Block 0015 [ 35]: 0aea253269b32b8a +Block 0015 [ 36]: d0fcdf7a175c3065 +Block 0015 [ 37]: 16c08c1a401ac22c +Block 0015 [ 38]: b6ebf9a47b78ae82 +Block 0015 [ 39]: 40c0d3a431d427cb +Block 0015 [ 40]: 1d2df60774b7516c +Block 0015 [ 41]: 970c0594bf1713ce +Block 0015 [ 42]: caacc697b1a924fb +Block 0015 [ 43]: b0fb0798fc30f008 +Block 0015 [ 44]: 5d479f4719cda2bf +Block 0015 [ 45]: 8817e1456a05ea6f +Block 0015 [ 46]: ef0efd291b92072a +Block 0015 [ 47]: 3a780a8cebe24df0 +Block 0015 [ 48]: 0a0f36708d009961 +Block 0015 [ 49]: e84fd081785e063e +Block 0015 [ 50]: 3aebd3af46afc993 +Block 0015 [ 51]: 9790053e206326e7 +Block 0015 [ 52]: a6698e15adffe4d7 +Block 0015 [ 53]: 17fc42f0ab69daf6 +Block 0015 [ 54]: 13e801bb0cb130ac +Block 0015 [ 55]: 74c7936ec777b871 +Block 0015 [ 56]: a0790fdfd41c239c +Block 0015 [ 57]: d74c250b3121d152 +Block 0015 [ 58]: 281f4425d101ad0b +Block 0015 [ 59]: 0be22b3281ad2682 +Block 0015 [ 60]: 7e58fdb0fe4341c5 +Block 0015 [ 61]: 7f0583da9709897f +Block 0015 [ 62]: 681fe8e0ca6b1695 +Block 0015 [ 63]: 4c82c9b2df29eb43 +Block 0015 [ 64]: 39bfdc09e2a0cd2c +Block 0015 [ 65]: 26a802e658b08bef +Block 0015 [ 66]: ae718a50c8b36a6a +Block 0015 [ 67]: 91dfcdc079f34a1a +Block 0015 [ 68]: 022fdcd482307022 +Block 0015 [ 69]: a01e00a7edbac6fb +Block 0015 [ 70]: f733e881c118aa60 +Block 0015 [ 71]: c3e9f578ceb4e304 +Block 0015 [ 72]: c2f9ab41fc414115 +Block 0015 [ 73]: 0be7e099471776f7 +Block 0015 [ 74]: a9cf9956c86573e6 +Block 0015 [ 75]: 3f578a80a849cff9 +Block 0015 [ 76]: c7e3fc9e98f31471 +Block 0015 [ 77]: 42aecfc7b1de9948 +Block 0015 [ 78]: 1d57c7a1272b411d +Block 0015 [ 79]: 35fa53c2bd8b60ae +Block 0015 [ 80]: 36946b2539dda39c +Block 0015 [ 81]: fe67152e6cbe4982 +Block 0015 [ 82]: aad7c71ee4ccb815 +Block 0015 [ 83]: a6bf82bbd66eb497 +Block 0015 [ 84]: e98a7e8ea4f112cb +Block 0015 [ 85]: 3b9739ac57c554bf +Block 0015 [ 86]: 7d42c2c864dfc6d7 +Block 0015 [ 87]: eec7b548af5dd60d +Block 0015 [ 88]: 3cf9455dabe479ed +Block 0015 [ 89]: eb13c9385b4acca1 +Block 0015 [ 90]: 6a117a05a0e1bb28 +Block 0015 [ 91]: 37ed6e0757e5f90f +Block 0015 [ 92]: c65e56b9dab724ab +Block 0015 [ 93]: feb99f41fe526cb1 +Block 0015 [ 94]: f786c4f5cf059e0c +Block 0015 [ 95]: 71db252a2f4b9ed2 +Block 0015 [ 96]: 229d49ab07869a0a +Block 0015 [ 97]: c32662ec9787492d +Block 0015 [ 98]: 5357479f687d9fc1 +Block 0015 [ 99]: a1a909546c0e6b00 +Block 0015 [100]: 8ea67c98294f92ed +Block 0015 [101]: d22dfd0daa54e93f +Block 0015 [102]: da3491c6459dec56 +Block 0015 [103]: ec8c7390216ea15a +Block 0015 [104]: fc9e949d441d1a4e +Block 0015 [105]: 02e380d6957e504b +Block 0015 [106]: 0bd1228a3012bb24 +Block 0015 [107]: 2f50cf0174c5d7d0 +Block 0015 [108]: adb8c69342185bee +Block 0015 [109]: a77cda66bf9982b9 +Block 0015 [110]: 50157252fe6fc4ef +Block 0015 [111]: 89ce6579014b9c4c +Block 0015 [112]: 937b1f6a3e284633 +Block 0015 [113]: d2b1a673d7435110 +Block 0015 [114]: 062c9baf56a8b934 +Block 0015 [115]: ac7dddf61f0ffdd9 +Block 0015 [116]: c6a368e433f4f7c9 +Block 0015 [117]: 5cc234b0de9285ba +Block 0015 [118]: 5d4b8ac62c3ca1a2 +Block 0015 [119]: 5c401334236bd30e +Block 0015 [120]: a8970643f53adef3 +Block 0015 [121]: 7e4d52a2c6d13a4d +Block 0015 [122]: d96227253b2326ea +Block 0015 [123]: e53d4d32bc256c93 +Block 0015 [124]: c9f1dd4e0ec95dd6 +Block 0015 [125]: bb16f7f16252f690 +Block 0015 [126]: ed270d162b295110 +Block 0015 [127]: 902f2b9becfc2a4b +Block 0016 [ 0]: f836c8867716a95d +Block 0016 [ 1]: 5a4bbaa6cf32467f +Block 0016 [ 2]: 647e9aa3fc560638 +Block 0016 [ 3]: ba25f0998ebcfa33 +Block 0016 [ 4]: 900f4408aabd1bb7 +Block 0016 [ 5]: 8bd32329f62d4b10 +Block 0016 [ 6]: ac707aabf76ce122 +Block 0016 [ 7]: d4db0063a2957e5d +Block 0016 [ 8]: a94142b9a40be515 +Block 0016 [ 9]: 263b51c8382d8587 +Block 0016 [ 10]: bf9465acb39eb20c +Block 0016 [ 11]: 20d8fdd516335d90 +Block 0016 [ 12]: bc8151d59a7bae83 +Block 0016 [ 13]: 7b95f1c93208ea74 +Block 0016 [ 14]: 30bb2707ae422542 +Block 0016 [ 15]: cbddfc342ebe96b4 +Block 0016 [ 16]: 246f4b3b6937b59e +Block 0016 [ 17]: 4ba7cc438bb1386f +Block 0016 [ 18]: bc1fd9fb6fe3f6f8 +Block 0016 [ 19]: dae17cb442f9b24c +Block 0016 [ 20]: 3b3fc8c27189c245 +Block 0016 [ 21]: d4d7d0899e9ea324 +Block 0016 [ 22]: 3ce0fb5494ba0170 +Block 0016 [ 23]: 82e5dc4f44e8b47e +Block 0016 [ 24]: a9aee19dce0afb3d +Block 0016 [ 25]: 4b9285c7ff0e0ce8 +Block 0016 [ 26]: 28238fd7e0c3ec24 +Block 0016 [ 27]: 5caeaca234324edc +Block 0016 [ 28]: f584af325ebfffa6 +Block 0016 [ 29]: 045bc01a53084a77 +Block 0016 [ 30]: e109164036727cdf +Block 0016 [ 31]: 1d70d0b4c938b25d +Block 0016 [ 32]: c0743c96c42f74ad +Block 0016 [ 33]: 5a8a03c8f46b9403 +Block 0016 [ 34]: 2238c6a81150dd4d +Block 0016 [ 35]: 1839e472eeeb8e5d +Block 0016 [ 36]: 32d4283b30cbe865 +Block 0016 [ 37]: a542972b4e3753fe +Block 0016 [ 38]: 3f3aad5eea35871f +Block 0016 [ 39]: 29ba28eacaa5c78e +Block 0016 [ 40]: ae006eae0c91ad2c +Block 0016 [ 41]: 8f914e0a5325134e +Block 0016 [ 42]: 545d1e53d212ff70 +Block 0016 [ 43]: e1bb1b4a69250da0 +Block 0016 [ 44]: 9598c702643d6912 +Block 0016 [ 45]: 3120a69431919925 +Block 0016 [ 46]: 267c164eb862ef68 +Block 0016 [ 47]: 58ec801c08b2a209 +Block 0016 [ 48]: 8434d9c58bb0c83c +Block 0016 [ 49]: c355b1a66654f11f +Block 0016 [ 50]: ecaf01bf6b020fb2 +Block 0016 [ 51]: 2f80a7d1262946fb +Block 0016 [ 52]: f2bbfcc21cf454ca +Block 0016 [ 53]: 166391329b9a3d9f +Block 0016 [ 54]: 89b5d0f35ee79a41 +Block 0016 [ 55]: d82ae0163df57fed +Block 0016 [ 56]: 87e2107fe01defcd +Block 0016 [ 57]: 308626494e60a17f +Block 0016 [ 58]: 938403add94b7b0b +Block 0016 [ 59]: 552911a95afc65bd +Block 0016 [ 60]: cfe25f13b0e9ac9a +Block 0016 [ 61]: fc4b24701453d163 +Block 0016 [ 62]: 8227318e53a02d82 +Block 0016 [ 63]: 21e3868e59d26094 +Block 0016 [ 64]: 406a7c293dd09893 +Block 0016 [ 65]: 8fab59fa2babd787 +Block 0016 [ 66]: 5c9da0afeeb011dc +Block 0016 [ 67]: d7fead76e8beefed +Block 0016 [ 68]: 91a3c3d0314379df +Block 0016 [ 69]: d4996fd2cb307612 +Block 0016 [ 70]: 479c9afc5fd7df83 +Block 0016 [ 71]: 91f712370a2b2e50 +Block 0016 [ 72]: ce62c61596018526 +Block 0016 [ 73]: 337f114ee290c307 +Block 0016 [ 74]: 8ae21a80e12d0b54 +Block 0016 [ 75]: 378f97ecf04ec20b +Block 0016 [ 76]: 32b60ae20ad4e0dd +Block 0016 [ 77]: 770a606fcf9e97a3 +Block 0016 [ 78]: b60142050eb6279f +Block 0016 [ 79]: 575da5e303a30734 +Block 0016 [ 80]: 20582e58e2aa8014 +Block 0016 [ 81]: 3e4ad6ba61641b82 +Block 0016 [ 82]: d180814d2fd1e616 +Block 0016 [ 83]: 2500b543e8d9348f +Block 0016 [ 84]: 7c26490c272be0fa +Block 0016 [ 85]: ef7bbb8de2331053 +Block 0016 [ 86]: a9577d5498ccd0f4 +Block 0016 [ 87]: 59969085678603a8 +Block 0016 [ 88]: 9eae26d422a33fc8 +Block 0016 [ 89]: 9c64d10a63f57074 +Block 0016 [ 90]: f347be4d488db2ed +Block 0016 [ 91]: 8d5b6cb28b5a19b0 +Block 0016 [ 92]: d86e4e6383dd2e6d +Block 0016 [ 93]: f2d2668b62b1a509 +Block 0016 [ 94]: 9d07c6329537bbf3 +Block 0016 [ 95]: 5143198e6c6043dd +Block 0016 [ 96]: f10ae67a04a6a65d +Block 0016 [ 97]: bbd5b7bdd2d537c2 +Block 0016 [ 98]: 013697d11cc0a779 +Block 0016 [ 99]: 3a55d5f35217ee01 +Block 0016 [100]: ebee5db9b8b39ba4 +Block 0016 [101]: efd5091112d5b476 +Block 0016 [102]: 0fd56e730bb61cc7 +Block 0016 [103]: cca6e754652c9753 +Block 0016 [104]: fdc7de8f402e9c30 +Block 0016 [105]: 215147cf5757c82f +Block 0016 [106]: 22b0d7672b12e4a7 +Block 0016 [107]: 6e32440373ff7d8f +Block 0016 [108]: 46ff737e2ecc4655 +Block 0016 [109]: 31dcd39c1348711d +Block 0016 [110]: 19fd948d367828d5 +Block 0016 [111]: 81211b6835204ac8 +Block 0016 [112]: 654a8be36e225e7f +Block 0016 [113]: b544dbdc7cfe4f25 +Block 0016 [114]: 48cfaad52a6df0dc +Block 0016 [115]: 350f7225a0f0a998 +Block 0016 [116]: f24baaeedfc1a089 +Block 0016 [117]: c360f609af476cba +Block 0016 [118]: c63c26deff4fc434 +Block 0016 [119]: 1be928444f947c27 +Block 0016 [120]: 18f278838397f4f3 +Block 0016 [121]: 9db306ee0e37be90 +Block 0016 [122]: e952905cfad5f42b +Block 0016 [123]: e6fd94188892b180 +Block 0016 [124]: caaa7624da0c7804 +Block 0016 [125]: ba7f688ce75ab500 +Block 0016 [126]: 3f3617b538632d14 +Block 0016 [127]: 55d601b6e6b0a93e +Block 0017 [ 0]: d3809e57fd122a36 +Block 0017 [ 1]: 27018400b40b6bd4 +Block 0017 [ 2]: 2eb5b349cda48fdb +Block 0017 [ 3]: 8c521093b5689d2d +Block 0017 [ 4]: 757bdf1deedda6d3 +Block 0017 [ 5]: dc07883fdadd0cd2 +Block 0017 [ 6]: fe371ca4088efdc6 +Block 0017 [ 7]: 7c87450f671ae946 +Block 0017 [ 8]: 183f7c12e15e0f1d +Block 0017 [ 9]: 679c5df134ee1f53 +Block 0017 [ 10]: 58e3679afa64e3ba +Block 0017 [ 11]: f3e42838526fee18 +Block 0017 [ 12]: 908f66c2693ffab4 +Block 0017 [ 13]: b1ef6cf1bd798b84 +Block 0017 [ 14]: 3ec433347fefcbe5 +Block 0017 [ 15]: 6e77dbbe5e3e2b98 +Block 0017 [ 16]: 5825a9a768529f5e +Block 0017 [ 17]: 0e78d85f0e84b2d8 +Block 0017 [ 18]: b25e77fe4055bc58 +Block 0017 [ 19]: 5fa90a623f667c03 +Block 0017 [ 20]: 2d328a4e5bb76f56 +Block 0017 [ 21]: d9363cc3f91a4305 +Block 0017 [ 22]: 1f4b73633fd449a1 +Block 0017 [ 23]: 6e9e53a5ef87c14a +Block 0017 [ 24]: c5c0e550d61c051f +Block 0017 [ 25]: 5a26d972eaf76bfb +Block 0017 [ 26]: fbcbc4188c8c046e +Block 0017 [ 27]: bc90cd94be174eb5 +Block 0017 [ 28]: b80cc0e6f43bf47f +Block 0017 [ 29]: f197c2cb917ea7f8 +Block 0017 [ 30]: 6c71dfd84ef19721 +Block 0017 [ 31]: 4d6fdb854dd626bc +Block 0017 [ 32]: b8da64ba92e8a4af +Block 0017 [ 33]: d0514211c433cc99 +Block 0017 [ 34]: aa3f38f68bf6d132 +Block 0017 [ 35]: 9f1b318a2966cd09 +Block 0017 [ 36]: 498ecaf3121f536c +Block 0017 [ 37]: cc993fe794ecb670 +Block 0017 [ 38]: 07a9140fe68437ee +Block 0017 [ 39]: 159cbe19720fbd1a +Block 0017 [ 40]: 4d295994454b9205 +Block 0017 [ 41]: 4a6e4ae9c6294094 +Block 0017 [ 42]: e0f8cd2e5c659727 +Block 0017 [ 43]: e6c3f289a5793bfd +Block 0017 [ 44]: 15c797a37a8a8ea1 +Block 0017 [ 45]: dc808110ff558d6a +Block 0017 [ 46]: 1a5b59df6789e4cd +Block 0017 [ 47]: 4f634c7faa765d12 +Block 0017 [ 48]: 0d401f0b8d3fa3a2 +Block 0017 [ 49]: 1ba8bccb5137d6b2 +Block 0017 [ 50]: 6e925344599411bd +Block 0017 [ 51]: 7cb832ff5effa69c +Block 0017 [ 52]: d7631ef9410c81ac +Block 0017 [ 53]: adb5e7c5a9e5ee14 +Block 0017 [ 54]: d2263024d7dca964 +Block 0017 [ 55]: 4b4771c86ab28b85 +Block 0017 [ 56]: 79a09d79ca354333 +Block 0017 [ 57]: 6f3f5d45545ad500 +Block 0017 [ 58]: c8396ed371075a63 +Block 0017 [ 59]: e33a3b847439afff +Block 0017 [ 60]: 067a10405ad20ab2 +Block 0017 [ 61]: 518f07d02ad01a53 +Block 0017 [ 62]: 6d7efef33c97a6f0 +Block 0017 [ 63]: 20a0c2de6dd3c691 +Block 0017 [ 64]: 111bf03e43199f49 +Block 0017 [ 65]: 2ccc61157376219e +Block 0017 [ 66]: 3e941c50ec51a496 +Block 0017 [ 67]: 1dc0c5b8298d1bba +Block 0017 [ 68]: 8926cf9eee3716a0 +Block 0017 [ 69]: 589269c4ec6a13d7 +Block 0017 [ 70]: e3fad0bae9c71b1b +Block 0017 [ 71]: 6788c55d89db279a +Block 0017 [ 72]: 8f9a6cb1ae837299 +Block 0017 [ 73]: 9b417ea21f94c675 +Block 0017 [ 74]: 60516ddded254e8f +Block 0017 [ 75]: 708da0a62da471bc +Block 0017 [ 76]: 23be51f1da5fa6c2 +Block 0017 [ 77]: 3d654b78d4365097 +Block 0017 [ 78]: e0c50ebdd1ee10b5 +Block 0017 [ 79]: 4b1e8568fd44fbc2 +Block 0017 [ 80]: fdeaf05a29c509e3 +Block 0017 [ 81]: e9b00163c325096c +Block 0017 [ 82]: a00e565603383ded +Block 0017 [ 83]: 162eba41653cdfcb +Block 0017 [ 84]: 885280cb80784958 +Block 0017 [ 85]: 7523c5fb2d9f4739 +Block 0017 [ 86]: da3b098695b8aed7 +Block 0017 [ 87]: ee65585c4ce64e55 +Block 0017 [ 88]: 21c5babe35daba71 +Block 0017 [ 89]: a790750bee4b4361 +Block 0017 [ 90]: 5abbcf4a40653f30 +Block 0017 [ 91]: bcbe524de12b23db +Block 0017 [ 92]: b65696da967ba08d +Block 0017 [ 93]: e243e42d5f8dce1e +Block 0017 [ 94]: 5b8c7410ae02faaa +Block 0017 [ 95]: 3e03cb2c5c85496e +Block 0017 [ 96]: ea598cb74e12061b +Block 0017 [ 97]: adcfe1fce7ae1c3e +Block 0017 [ 98]: 728aaffcdc65b0e3 +Block 0017 [ 99]: 4d8d42d7f2b5465d +Block 0017 [100]: c70bf4211b94781f +Block 0017 [101]: 0bd066da9fa67568 +Block 0017 [102]: 27106a16e99c3820 +Block 0017 [103]: ae0758d6242923cb +Block 0017 [104]: b407bdd5f28c05a1 +Block 0017 [105]: f6d90560bcb6318e +Block 0017 [106]: 4c5210db01183f45 +Block 0017 [107]: cd9ee9c94df96e76 +Block 0017 [108]: e67355c9eef04f59 +Block 0017 [109]: 9ccf945294bcc3e4 +Block 0017 [110]: 922bc6af265ca962 +Block 0017 [111]: 2079e039460ec203 +Block 0017 [112]: a0e5bc615fc9ec33 +Block 0017 [113]: ffc3b98b6ed99d2f +Block 0017 [114]: 1072f708aea08b8e +Block 0017 [115]: a403be88ef0551e8 +Block 0017 [116]: 4f15c6100dcff2e6 +Block 0017 [117]: 4c03d3981f3b97bd +Block 0017 [118]: a46b77a99582507a +Block 0017 [119]: e221b79479ff67a8 +Block 0017 [120]: e4608ec676d5c1f7 +Block 0017 [121]: 8b6aebe9d18e5ead +Block 0017 [122]: 68ce6934678c18e1 +Block 0017 [123]: 6a6c0394eb8364f3 +Block 0017 [124]: 698108ae1f0af293 +Block 0017 [125]: 6fa0f6019a3a26cb +Block 0017 [126]: b868100fd8592784 +Block 0017 [127]: 6e58d5bbcc595213 +Block 0018 [ 0]: 57cebef82247f856 +Block 0018 [ 1]: 5e1f658f847d7865 +Block 0018 [ 2]: a7c6fe3ce6328555 +Block 0018 [ 3]: 631a4d11151e3705 +Block 0018 [ 4]: 6d284d4539081116 +Block 0018 [ 5]: 20d3a3ddd286d249 +Block 0018 [ 6]: fec04211ce617a63 +Block 0018 [ 7]: 7ee644759f4ebabc +Block 0018 [ 8]: 77562a61df6192e6 +Block 0018 [ 9]: f265d9297cf6614e +Block 0018 [ 10]: b2e83323b0fc0b58 +Block 0018 [ 11]: eccdb2ba777b86e1 +Block 0018 [ 12]: 5beae34fb3a6464c +Block 0018 [ 13]: b84166f5573d083c +Block 0018 [ 14]: 1fcda2af39c04119 +Block 0018 [ 15]: b8f70b179be17b47 +Block 0018 [ 16]: f3d8e53e6acc4177 +Block 0018 [ 17]: 19b95a946fed4e76 +Block 0018 [ 18]: ba2a8da965fc652f +Block 0018 [ 19]: b6701b63b3c4fc96 +Block 0018 [ 20]: 8c0b9123f5c11b4c +Block 0018 [ 21]: a0eb8910a8bd6d94 +Block 0018 [ 22]: 93aa541f6111cc04 +Block 0018 [ 23]: b3bec4a835858bf4 +Block 0018 [ 24]: 6e9ffdead30aa373 +Block 0018 [ 25]: dddd7ebaf76ea68f +Block 0018 [ 26]: 700692576d8960c3 +Block 0018 [ 27]: 45dcd0e76ce97c06 +Block 0018 [ 28]: 21b4ecad0175b5e4 +Block 0018 [ 29]: af4ed71c398c3ee2 +Block 0018 [ 30]: 80150398b797ce1e +Block 0018 [ 31]: 2daad86a706f4a4f +Block 0018 [ 32]: 420910e6608e98b7 +Block 0018 [ 33]: 4b29efc147979616 +Block 0018 [ 34]: 4f07907f12fa57dd +Block 0018 [ 35]: 2a81c8fc27ce4f90 +Block 0018 [ 36]: 529b811ba96962c4 +Block 0018 [ 37]: f2fc49e09b7af4b2 +Block 0018 [ 38]: a3bb2de56f665a4b +Block 0018 [ 39]: 3e514d87d7a29f21 +Block 0018 [ 40]: ec6b790cb0e59612 +Block 0018 [ 41]: 3bb1e91e151a466f +Block 0018 [ 42]: b73d5669c1d8216e +Block 0018 [ 43]: 7921ef01b7a4a93c +Block 0018 [ 44]: c8f6a995b360a712 +Block 0018 [ 45]: c34c6643843bd1a8 +Block 0018 [ 46]: 2b38febb4cd8f83f +Block 0018 [ 47]: dc4aa5ba31eff726 +Block 0018 [ 48]: df14215ffed3c376 +Block 0018 [ 49]: 9b5dbf6414a9f1d2 +Block 0018 [ 50]: c29eff069950104d +Block 0018 [ 51]: 2d6338ef7fba9bdb +Block 0018 [ 52]: 9cc4a960bb018ab8 +Block 0018 [ 53]: c0a5e0d3abbf0f8a +Block 0018 [ 54]: 09286cd24df88a53 +Block 0018 [ 55]: 134e6e53b4a1bf27 +Block 0018 [ 56]: 3d13daee8f39f022 +Block 0018 [ 57]: 6f1948c976a77be1 +Block 0018 [ 58]: d87832289e19e4ba +Block 0018 [ 59]: 7911cc3b53031ecd +Block 0018 [ 60]: b039845d8fdabb03 +Block 0018 [ 61]: 653addad2bacb75b +Block 0018 [ 62]: f65b51e7d8cad424 +Block 0018 [ 63]: 1f1d8139580c42cb +Block 0018 [ 64]: 5df05979b549dc5a +Block 0018 [ 65]: b20119fa66364ed9 +Block 0018 [ 66]: c97d32c279b9e2a1 +Block 0018 [ 67]: a918cf46e6737eae +Block 0018 [ 68]: ff21a9765032ef71 +Block 0018 [ 69]: 770f9f55a1e0200e +Block 0018 [ 70]: 480640feb18878ee +Block 0018 [ 71]: 0b77e9233263a358 +Block 0018 [ 72]: 0ccd9e0ebb663e1e +Block 0018 [ 73]: ced6ad184df7f058 +Block 0018 [ 74]: a925f1a938c57899 +Block 0018 [ 75]: 488da2f7160d6b2a +Block 0018 [ 76]: 65ff5349e555c646 +Block 0018 [ 77]: 956a1540757fe764 +Block 0018 [ 78]: 3377c61981a12707 +Block 0018 [ 79]: 6eda3ab6e5e5eef8 +Block 0018 [ 80]: ff28308032454454 +Block 0018 [ 81]: 894ebc48430bf23a +Block 0018 [ 82]: f972de40f6a522ca +Block 0018 [ 83]: 7f49a08de82f7586 +Block 0018 [ 84]: 0a9019c61f419e5f +Block 0018 [ 85]: bb6373eef70f6d9b +Block 0018 [ 86]: f998096fc62599be +Block 0018 [ 87]: 881633292e2bb822 +Block 0018 [ 88]: a8930b1906414588 +Block 0018 [ 89]: 05adc6acd9fa9c3b +Block 0018 [ 90]: 2037174e25917500 +Block 0018 [ 91]: fafe025db1dce058 +Block 0018 [ 92]: f29f8690945d2c1b +Block 0018 [ 93]: b574e9a567c92aab +Block 0018 [ 94]: f41f39ce02847751 +Block 0018 [ 95]: d330c19a9157fdbe +Block 0018 [ 96]: f188b654ff3cd095 +Block 0018 [ 97]: ecf62aaa970134db +Block 0018 [ 98]: df0e5a2106bf3d9d +Block 0018 [ 99]: f270149014f17360 +Block 0018 [100]: be18751373df5e3f +Block 0018 [101]: e170117374a725b7 +Block 0018 [102]: c6bc16281586428d +Block 0018 [103]: c8807c5440d9bbd3 +Block 0018 [104]: 6bb82e0b5d4c2e0d +Block 0018 [105]: 970ede93e5e27ac5 +Block 0018 [106]: b5ea53ff534622ac +Block 0018 [107]: 9e31a90a85f46a62 +Block 0018 [108]: 5f4ef09dcbb5efab +Block 0018 [109]: 23395b9e4a40f367 +Block 0018 [110]: 72d21b94738593e4 +Block 0018 [111]: a670eedbeefa24a9 +Block 0018 [112]: 17b433b9fff934b3 +Block 0018 [113]: 9e32a1bcfedc24f5 +Block 0018 [114]: 8c7f89b2615962f2 +Block 0018 [115]: ff57e2e77b2b0b9e +Block 0018 [116]: 4600f965f407f74c +Block 0018 [117]: 08d3a4358c03a513 +Block 0018 [118]: cfae58aad32697f8 +Block 0018 [119]: 885eff2ac7f41837 +Block 0018 [120]: 8102758546e1a4e4 +Block 0018 [121]: 08b04d9a0ea9a613 +Block 0018 [122]: c256b07aa6468a27 +Block 0018 [123]: e4b64c775459a54c +Block 0018 [124]: 473bb3721002e35b +Block 0018 [125]: 473153000fa4c19b +Block 0018 [126]: 89f0318e36108337 +Block 0018 [127]: 922f0bccba570e30 +Block 0019 [ 0]: c5ad90619dfd5e40 +Block 0019 [ 1]: c7a17173d9d7fb02 +Block 0019 [ 2]: f53d0f0a42ee0a9a +Block 0019 [ 3]: 0b7c95192969e642 +Block 0019 [ 4]: 4ec957e5121f3f42 +Block 0019 [ 5]: cfcd0f545351d53b +Block 0019 [ 6]: 6c34a64d935b4658 +Block 0019 [ 7]: b1c1c307e575bddb +Block 0019 [ 8]: 6c4416051314ab4e +Block 0019 [ 9]: eaccc46dd8f286ac +Block 0019 [ 10]: 62a0006c7175dfc9 +Block 0019 [ 11]: 4adca8b27b853e25 +Block 0019 [ 12]: 86a7d4cb588b926f +Block 0019 [ 13]: a6e880192be9c7be +Block 0019 [ 14]: f0c0fb7163e2b077 +Block 0019 [ 15]: 9fbbd47dbd1ba544 +Block 0019 [ 16]: 6c7004e5e7299324 +Block 0019 [ 17]: 25fd6d2fe2c989ef +Block 0019 [ 18]: 66d6f0c88cb197be +Block 0019 [ 19]: c68bd38566a7889a +Block 0019 [ 20]: 6b59f19ea29b979a +Block 0019 [ 21]: 556774aadc3ca297 +Block 0019 [ 22]: 9ca1c21e961ce72a +Block 0019 [ 23]: f9f2543958ee6de0 +Block 0019 [ 24]: 00374860910b1734 +Block 0019 [ 25]: 9ff6c7f7fdc33655 +Block 0019 [ 26]: ae7d2f154985cc00 +Block 0019 [ 27]: 92a2c2482f099495 +Block 0019 [ 28]: 7738918b896f3d10 +Block 0019 [ 29]: 08e8c151ef9737ec +Block 0019 [ 30]: b8afe6375af2c425 +Block 0019 [ 31]: d7e6532c1ced5359 +Block 0019 [ 32]: 7be417b2d69cc776 +Block 0019 [ 33]: 2f6fbad042b2f4db +Block 0019 [ 34]: 5140dbe6e03c861f +Block 0019 [ 35]: f22d890534c7d2ec +Block 0019 [ 36]: 258963384931adcf +Block 0019 [ 37]: 436cf5639400c61d +Block 0019 [ 38]: e5a63ecdd892893c +Block 0019 [ 39]: 142303f752328d3c +Block 0019 [ 40]: b84d6cce42f3d817 +Block 0019 [ 41]: 652494812170e1d6 +Block 0019 [ 42]: 0b2b77f9cee1fdf6 +Block 0019 [ 43]: c0ecd695297e1d8a +Block 0019 [ 44]: 0fb2e95fd2501d97 +Block 0019 [ 45]: 17c31477c069de81 +Block 0019 [ 46]: e6a0304b074a6eb3 +Block 0019 [ 47]: 26b214308f38795c +Block 0019 [ 48]: 833065117a06860b +Block 0019 [ 49]: d232939089b96074 +Block 0019 [ 50]: 0ee7847f85b38318 +Block 0019 [ 51]: 5fb81785945027f5 +Block 0019 [ 52]: 66ee79d0649c1686 +Block 0019 [ 53]: 3168d562f60ce6eb +Block 0019 [ 54]: bc250a9b52bf4b79 +Block 0019 [ 55]: 1146b33494baaf3e +Block 0019 [ 56]: 5af799d7e5e5dc5d +Block 0019 [ 57]: 89fa4d5028946c9f +Block 0019 [ 58]: 4fd1a798e66663dd +Block 0019 [ 59]: 664c5598e474d6af +Block 0019 [ 60]: 4a1e655f90de3a52 +Block 0019 [ 61]: 65583cea2fe72c1b +Block 0019 [ 62]: 31e99d437b588dea +Block 0019 [ 63]: 810131ed2e8b9e65 +Block 0019 [ 64]: 57140b352a98809c +Block 0019 [ 65]: 3481662f102896d2 +Block 0019 [ 66]: d9c307711dd70af6 +Block 0019 [ 67]: 0fc4ac1b83b21810 +Block 0019 [ 68]: 2dae24938d937d66 +Block 0019 [ 69]: 2db9258eaa41d588 +Block 0019 [ 70]: adfd9117017aea52 +Block 0019 [ 71]: 0aebc8a663734e63 +Block 0019 [ 72]: 3396cb042fa4b880 +Block 0019 [ 73]: d4cb797e806a037d +Block 0019 [ 74]: a0f73b8e65666fc3 +Block 0019 [ 75]: 5f7bce07ca7a1a9c +Block 0019 [ 76]: 2e4629b685833c46 +Block 0019 [ 77]: 0a3ee3fee444ba36 +Block 0019 [ 78]: 3969024563655ce5 +Block 0019 [ 79]: c0a5abd78ef0340c +Block 0019 [ 80]: 0b5519a847a09112 +Block 0019 [ 81]: 96b6762e8665b8a0 +Block 0019 [ 82]: 843e8b1b4dd4a82b +Block 0019 [ 83]: c1232100906be7e6 +Block 0019 [ 84]: b58edd29906a9027 +Block 0019 [ 85]: 8b68b6b6d36b9834 +Block 0019 [ 86]: a7233e790cc6d3f8 +Block 0019 [ 87]: aa5355f0929c4e25 +Block 0019 [ 88]: a7bf6e2e15ab5153 +Block 0019 [ 89]: 8e67f62642cf57f4 +Block 0019 [ 90]: 27a5776e9a7b75a1 +Block 0019 [ 91]: 2b224c1e181b69ff +Block 0019 [ 92]: 0b8b8c0abcd1d13e +Block 0019 [ 93]: fab9b35bb3eab270 +Block 0019 [ 94]: ce9dbe7e3a0a52dc +Block 0019 [ 95]: e1e8f7f3190b8e1e +Block 0019 [ 96]: 886847dd5ed1f8e7 +Block 0019 [ 97]: fa6d5fe42cfb394a +Block 0019 [ 98]: e2eb739c588d8234 +Block 0019 [ 99]: ac2065febf36ce11 +Block 0019 [100]: b3cb7ccab2ffd914 +Block 0019 [101]: dd8092f3fff7970d +Block 0019 [102]: c8dae2e160cab03a +Block 0019 [103]: 37f22b36dfebf4db +Block 0019 [104]: 065bbc14bb0bacf0 +Block 0019 [105]: 83a1d51c798c6087 +Block 0019 [106]: a03604d715375f8a +Block 0019 [107]: e923aa07e8ab2f05 +Block 0019 [108]: 6c0ad55a7926bc90 +Block 0019 [109]: b9b36ec828ffdfb8 +Block 0019 [110]: de0ef5c4811b2689 +Block 0019 [111]: 5c4552c66dfb0c17 +Block 0019 [112]: 8a73ff2d0e32ed9e +Block 0019 [113]: 6c23835f0b616d34 +Block 0019 [114]: 449cb97303cf1125 +Block 0019 [115]: 7e2b8fcd2ddd9aeb +Block 0019 [116]: 247dece373dc3697 +Block 0019 [117]: bb2f3c2b502ceba2 +Block 0019 [118]: 0c0d8f96dde7434d +Block 0019 [119]: 774ef5d4a277649d +Block 0019 [120]: 7504d6f1d03c0af2 +Block 0019 [121]: 05c154722007b939 +Block 0019 [122]: 355b5642800985f3 +Block 0019 [123]: c96e5fd5893fa7d4 +Block 0019 [124]: 6972429b8fcf426a +Block 0019 [125]: 0ff43afbf9106cf4 +Block 0019 [126]: d76130589a9529b8 +Block 0019 [127]: ff105728dbed9657 +Block 0020 [ 0]: e97e984c9a0a4680 +Block 0020 [ 1]: 42695651c0c21502 +Block 0020 [ 2]: 688550ecf3b8a149 +Block 0020 [ 3]: 54d395b8b07ec587 +Block 0020 [ 4]: ddf6a33155b38ed7 +Block 0020 [ 5]: 3b1f998dda326511 +Block 0020 [ 6]: 7f97ac3d9a2bbf9b +Block 0020 [ 7]: a27b1b7ac6676309 +Block 0020 [ 8]: 485aece5fc3cd6a3 +Block 0020 [ 9]: 49bf335ba618a23a +Block 0020 [ 10]: 8a88e9e925d5183b +Block 0020 [ 11]: 2f7d04ac18ea96ab +Block 0020 [ 12]: 6a9f50381a60ab92 +Block 0020 [ 13]: ba7df623a93121ae +Block 0020 [ 14]: f3f273bc52a41207 +Block 0020 [ 15]: 36b4e08e05652348 +Block 0020 [ 16]: f88c278ea3981491 +Block 0020 [ 17]: 22a34c75759f0912 +Block 0020 [ 18]: 1e6462a023e62bbb +Block 0020 [ 19]: 0577a4f764f2a20b +Block 0020 [ 20]: a1efd6253ade82bb +Block 0020 [ 21]: 81dbf5c8455a8524 +Block 0020 [ 22]: 1bae23a8beada114 +Block 0020 [ 23]: 188c9816116da639 +Block 0020 [ 24]: 05bd99543f3907fb +Block 0020 [ 25]: b1b890cd005ccfa8 +Block 0020 [ 26]: 1f83e83507988f54 +Block 0020 [ 27]: 0b9692c75b1a65d2 +Block 0020 [ 28]: 9b7d295ace6adcfd +Block 0020 [ 29]: af01c0de42d753a0 +Block 0020 [ 30]: 3fe167f7dc207394 +Block 0020 [ 31]: 0a4e33a76c72e144 +Block 0020 [ 32]: 79a74d89cd804e34 +Block 0020 [ 33]: 9237f7a0ae9a4d0e +Block 0020 [ 34]: 0d160320f7c748f2 +Block 0020 [ 35]: 209870f6869b388a +Block 0020 [ 36]: 786b9215ade0ed30 +Block 0020 [ 37]: 418d4c6b3f042ebe +Block 0020 [ 38]: 831a0ba554ad8bf7 +Block 0020 [ 39]: 28e14dc0cc08c931 +Block 0020 [ 40]: a6a161729c772dff +Block 0020 [ 41]: f3324db122373805 +Block 0020 [ 42]: af4e084231220ba4 +Block 0020 [ 43]: 96e990b23fb09510 +Block 0020 [ 44]: bc6a4abca65e47f4 +Block 0020 [ 45]: f12789b5a6b25fbd +Block 0020 [ 46]: f800e966b67d385b +Block 0020 [ 47]: 173ed5f3e710b749 +Block 0020 [ 48]: 03d4dd0e15fc509a +Block 0020 [ 49]: f6cc9939e80900e6 +Block 0020 [ 50]: 93c884512d37d9a2 +Block 0020 [ 51]: ad4dafb167dfe39c +Block 0020 [ 52]: 08881f5c9431990b +Block 0020 [ 53]: d7ee8ce6cb74ebb6 +Block 0020 [ 54]: e264efef38081687 +Block 0020 [ 55]: cf420221c00d899c +Block 0020 [ 56]: 3df9cb9efa6deb77 +Block 0020 [ 57]: 65536cc67d0ad05a +Block 0020 [ 58]: 3fba9e1952e19b67 +Block 0020 [ 59]: f1a1f331ef40d048 +Block 0020 [ 60]: 04fa0694742fee2c +Block 0020 [ 61]: 32bd2eb3c55e5ae0 +Block 0020 [ 62]: a9c7205ffb68b28f +Block 0020 [ 63]: 658112db2feabc85 +Block 0020 [ 64]: 2cf847284d0921b3 +Block 0020 [ 65]: 2e539b5f05a65789 +Block 0020 [ 66]: 9f74bfde4246094a +Block 0020 [ 67]: 21f71cec771a994f +Block 0020 [ 68]: 502671b3198d83ad +Block 0020 [ 69]: 38f91177744c228c +Block 0020 [ 70]: 63b43e2ef56b5e7b +Block 0020 [ 71]: 7765db54b31c5521 +Block 0020 [ 72]: 981336e740ce20f6 +Block 0020 [ 73]: 7c3b4ce651e9fb5b +Block 0020 [ 74]: 0401d7d8cc9a42a3 +Block 0020 [ 75]: 714b58a1a936c453 +Block 0020 [ 76]: 49bc384451c5bf0a +Block 0020 [ 77]: 028894e2178d6e0c +Block 0020 [ 78]: 5496f8c54b09dc58 +Block 0020 [ 79]: e6eb176a966a4632 +Block 0020 [ 80]: 5fd3242e6c512e2e +Block 0020 [ 81]: be012a4516b19ecd +Block 0020 [ 82]: 5a029ae5b0ba77fc +Block 0020 [ 83]: 6bdf22f7170b33cd +Block 0020 [ 84]: 72d7181008703761 +Block 0020 [ 85]: 71a0a89e374da324 +Block 0020 [ 86]: a3029e6857c84d5d +Block 0020 [ 87]: be4e2d573ab4a5af +Block 0020 [ 88]: c7d6f811e2e1a452 +Block 0020 [ 89]: 544ff9d9df359257 +Block 0020 [ 90]: 88a253dee5cffe09 +Block 0020 [ 91]: fd218a89570ea21b +Block 0020 [ 92]: 3562bca5d5463c5c +Block 0020 [ 93]: a8e3e455e840e5d3 +Block 0020 [ 94]: 8b5b33b3f605dea4 +Block 0020 [ 95]: 54927c551ce7109a +Block 0020 [ 96]: d9edbc7e8ed262ea +Block 0020 [ 97]: 13ba2da8af1586e0 +Block 0020 [ 98]: 7e7b4839ec9c9d15 +Block 0020 [ 99]: c7a7f365046242e5 +Block 0020 [100]: c0a02a96e116e7a9 +Block 0020 [101]: c4294c90c5b60aab +Block 0020 [102]: de88e0255c80e8bd +Block 0020 [103]: dda0a1b50a84f594 +Block 0020 [104]: 32abd57a4a3d8fa1 +Block 0020 [105]: 6a3b6003128b7e4b +Block 0020 [106]: 2e75d71ec1f459ea +Block 0020 [107]: d8b3d56bb6370ce8 +Block 0020 [108]: a6e50c3c3fdeedcf +Block 0020 [109]: 615fe054b22c3f57 +Block 0020 [110]: d187b0d5e9a82f07 +Block 0020 [111]: 0b661aecd8b6acfd +Block 0020 [112]: ae5739a352aefc0b +Block 0020 [113]: a19b37d3f4358fab +Block 0020 [114]: ec3f64064528e5ca +Block 0020 [115]: 871eee2897672b5d +Block 0020 [116]: 13723605168a4370 +Block 0020 [117]: 09f3b1ce20ee4693 +Block 0020 [118]: cf07035c40670104 +Block 0020 [119]: f940f27353d6bce9 +Block 0020 [120]: 7bca9f2599febfce +Block 0020 [121]: 46a694fb7c23db99 +Block 0020 [122]: d7d065950f1fbd4b +Block 0020 [123]: cbe415b30043b7c9 +Block 0020 [124]: 1ec55ec99495a768 +Block 0020 [125]: 296f6c6f5078b47d +Block 0020 [126]: cdc04d1f06b9f4cb +Block 0020 [127]: abc7a9f4595d035c +Block 0021 [ 0]: f91e15dddb3b51ec +Block 0021 [ 1]: ee5c3d4169c6340e +Block 0021 [ 2]: ffbb26bf19a1114e +Block 0021 [ 3]: 07051d000ee6fdc8 +Block 0021 [ 4]: 1abe4b454438ac8e +Block 0021 [ 5]: 7248966a2670c010 +Block 0021 [ 6]: b7b5def30b008c50 +Block 0021 [ 7]: f9b852777fcdf0cb +Block 0021 [ 8]: 33883d34b6746279 +Block 0021 [ 9]: 8ed5aed9f146bbbc +Block 0021 [ 10]: b185ef5eeb6b7c93 +Block 0021 [ 11]: deab3ab480df25e2 +Block 0021 [ 12]: 54c50a10ef514a95 +Block 0021 [ 13]: b22a360cd6e84781 +Block 0021 [ 14]: ccd176f2fd328583 +Block 0021 [ 15]: 0c6197874a4c1899 +Block 0021 [ 16]: d7baf5b0d78951d9 +Block 0021 [ 17]: 4f0bcf25c024e4c9 +Block 0021 [ 18]: 37ce212b48d1dc8c +Block 0021 [ 19]: 1406aa351a3956ec +Block 0021 [ 20]: af53d87e3d339f12 +Block 0021 [ 21]: 4099481b37dd2332 +Block 0021 [ 22]: 99705cd0ace2b2e5 +Block 0021 [ 23]: a7b4ccf587f655a4 +Block 0021 [ 24]: 4fc2ea4c8dacd3f0 +Block 0021 [ 25]: 5f3edbe69906aea8 +Block 0021 [ 26]: e3ce2749b7e3501a +Block 0021 [ 27]: 6df82def0953f475 +Block 0021 [ 28]: 29a3b1a8d54cd7eb +Block 0021 [ 29]: 238fd775eb58ce16 +Block 0021 [ 30]: f4428dd2aa26f05d +Block 0021 [ 31]: 5f5f090f6985661e +Block 0021 [ 32]: 3c11b73b96af5348 +Block 0021 [ 33]: 4803704f02a187d7 +Block 0021 [ 34]: 5fee6cd368efb42a +Block 0021 [ 35]: c11e6dc965fa6f04 +Block 0021 [ 36]: b4ea2de0b9c26784 +Block 0021 [ 37]: 89353cfb63665713 +Block 0021 [ 38]: ef0888efce116445 +Block 0021 [ 39]: fb04167ad5f72e1f +Block 0021 [ 40]: 3c5ed288e8f05a1d +Block 0021 [ 41]: 624547a17957b850 +Block 0021 [ 42]: 04732141a8ccba36 +Block 0021 [ 43]: 2685fb50ec390be3 +Block 0021 [ 44]: b02549b55b50976f +Block 0021 [ 45]: fa4fdce5517c2a24 +Block 0021 [ 46]: f11439e0775486f2 +Block 0021 [ 47]: 56c79606aba98cd0 +Block 0021 [ 48]: ed0641ad608278c0 +Block 0021 [ 49]: 514624364ea4b59f +Block 0021 [ 50]: 7fd4817bc3eeba5b +Block 0021 [ 51]: a8ee1d20b2d7d0b5 +Block 0021 [ 52]: ae596aa5f3dc543c +Block 0021 [ 53]: b799fbc080499d82 +Block 0021 [ 54]: ed54f1d15d90f8eb +Block 0021 [ 55]: 1a31da56664a72cc +Block 0021 [ 56]: 12da9d1c9cf10ddb +Block 0021 [ 57]: 2f4913b380d74a10 +Block 0021 [ 58]: 8ba9185c45a65ba3 +Block 0021 [ 59]: da683bf7f2029425 +Block 0021 [ 60]: 559fbf449c0da608 +Block 0021 [ 61]: 7dcd27cf098ba795 +Block 0021 [ 62]: 3ddd05c0df1cab14 +Block 0021 [ 63]: 83fd62730a702ce3 +Block 0021 [ 64]: 15a6c578f742d175 +Block 0021 [ 65]: 016f807d1ab2e6c3 +Block 0021 [ 66]: 61dbe68679f42a35 +Block 0021 [ 67]: 34098d8930ef469b +Block 0021 [ 68]: 6e4f258a5c1c061c +Block 0021 [ 69]: 94b80e2098f6de46 +Block 0021 [ 70]: f75eb09315ac2b17 +Block 0021 [ 71]: dcd61677a8230fb3 +Block 0021 [ 72]: aba074f342936c30 +Block 0021 [ 73]: ef82cb98e5b62732 +Block 0021 [ 74]: 92e2a728a9cf67a9 +Block 0021 [ 75]: a63711b57bf4c895 +Block 0021 [ 76]: ca84f36a5aed6490 +Block 0021 [ 77]: fac131451564800d +Block 0021 [ 78]: db9274384c879da5 +Block 0021 [ 79]: b8103c7a0b1e2280 +Block 0021 [ 80]: 475816e960b808f9 +Block 0021 [ 81]: 022248d13db87cb1 +Block 0021 [ 82]: a93f6128a0e9ec01 +Block 0021 [ 83]: e968dd4874743f07 +Block 0021 [ 84]: 31da295f50067bb4 +Block 0021 [ 85]: fac3e0d7554a109e +Block 0021 [ 86]: e9e77599410d4626 +Block 0021 [ 87]: 018184166eab6fba +Block 0021 [ 88]: 230e3e6976d1929f +Block 0021 [ 89]: 8038f6ce937203dc +Block 0021 [ 90]: feae676d6efd362b +Block 0021 [ 91]: eb9e5d2e229876af +Block 0021 [ 92]: ffb1be82fa0129d3 +Block 0021 [ 93]: a9861a02c73e3766 +Block 0021 [ 94]: 4705e2143470ea47 +Block 0021 [ 95]: d35816871f69c4ff +Block 0021 [ 96]: 74f13edfb6f9f2fd +Block 0021 [ 97]: 5856910ab5e781c9 +Block 0021 [ 98]: 3ceb888953da86b9 +Block 0021 [ 99]: 0ab510d037c87b43 +Block 0021 [100]: 138c27555c6626b4 +Block 0021 [101]: 3c131e8b21e1d1a7 +Block 0021 [102]: dcf5a6b3fb5e6966 +Block 0021 [103]: 0559f144bd001f36 +Block 0021 [104]: 3018a36d9ad1ecd4 +Block 0021 [105]: 31e3c99700980d11 +Block 0021 [106]: 1d189ab56c882f89 +Block 0021 [107]: ac93920aa320911e +Block 0021 [108]: 680b39dadc4c977f +Block 0021 [109]: 7072e9abbc6eec02 +Block 0021 [110]: 1136fc6624a8283d +Block 0021 [111]: d1cafe5cb563a9f2 +Block 0021 [112]: cb42169a90e18f42 +Block 0021 [113]: ef07f6cc1da57b09 +Block 0021 [114]: 186c57d289ca3d25 +Block 0021 [115]: 168f8783db16497f +Block 0021 [116]: eb5d26010ccc0661 +Block 0021 [117]: 7dfc4b2061132276 +Block 0021 [118]: 318fa486a5e55435 +Block 0021 [119]: 4f081059273cff64 +Block 0021 [120]: 8e2f8e9f645fe5c5 +Block 0021 [121]: b0f117bf26cac7a6 +Block 0021 [122]: a7cc624a25420744 +Block 0021 [123]: 5996f6f569411c8d +Block 0021 [124]: d1fe256f06785230 +Block 0021 [125]: 6a5c4fd0332f388a +Block 0021 [126]: 671310faa364b89a +Block 0021 [127]: ae23fc2ee74b6a2e +Block 0022 [ 0]: fd0d5fe6e4463eb9 +Block 0022 [ 1]: 45c83ce9563fa053 +Block 0022 [ 2]: d727b2657ba26cdc +Block 0022 [ 3]: 8c6aa3c945e80ead +Block 0022 [ 4]: e97f7f5e8c5999b1 +Block 0022 [ 5]: 4aa3da0ced32965b +Block 0022 [ 6]: 060ddad87e312da8 +Block 0022 [ 7]: 240061d56cfae2ae +Block 0022 [ 8]: 762ab59bcd9861af +Block 0022 [ 9]: 83c44976e648170e +Block 0022 [ 10]: 7c72093e5af38945 +Block 0022 [ 11]: 502321f2bc7210d8 +Block 0022 [ 12]: 5c48ba68baea259d +Block 0022 [ 13]: bf10399b4ceb7350 +Block 0022 [ 14]: c01e2a7ea191f992 +Block 0022 [ 15]: 65d8e06801e875fd +Block 0022 [ 16]: dd58879fa6c6beca +Block 0022 [ 17]: e759e40819e1c2ee +Block 0022 [ 18]: 0cb2744881da40ad +Block 0022 [ 19]: ec193df705eb9ce1 +Block 0022 [ 20]: 64f0b30e24639350 +Block 0022 [ 21]: 383d137d52aa756d +Block 0022 [ 22]: c7508534f947fe85 +Block 0022 [ 23]: 8d1c55b6a2c65b4b +Block 0022 [ 24]: 817d5358205f8c7f +Block 0022 [ 25]: 3e7dcc1e2d0ad5d2 +Block 0022 [ 26]: 3806b0590ebc33d0 +Block 0022 [ 27]: 4b7410df24c582fc +Block 0022 [ 28]: ef8eb90023866f1b +Block 0022 [ 29]: 16d5e2706b950dbf +Block 0022 [ 30]: 6eab6cfa739f915c +Block 0022 [ 31]: b739804c9bc88231 +Block 0022 [ 32]: 92306a3666206f77 +Block 0022 [ 33]: 18551d1e9274bc10 +Block 0022 [ 34]: 62d127a51fa91e89 +Block 0022 [ 35]: f64fce4c0035ee41 +Block 0022 [ 36]: 008856cec7508d20 +Block 0022 [ 37]: 742b2b65beb517f5 +Block 0022 [ 38]: 71b98ea6f9a17f89 +Block 0022 [ 39]: 7ca177831758d428 +Block 0022 [ 40]: b4063a44e0c5c0f4 +Block 0022 [ 41]: bfff91cfe779f7a0 +Block 0022 [ 42]: 561c77eb787158ad +Block 0022 [ 43]: c6511c6cdc7d5c92 +Block 0022 [ 44]: 1a4ef74ddd5319f5 +Block 0022 [ 45]: 4e3a92e3669e405c +Block 0022 [ 46]: 99699ce6bada48e9 +Block 0022 [ 47]: 673ab31ec7a3cef4 +Block 0022 [ 48]: 321c4e8a6b736843 +Block 0022 [ 49]: 6937b8bf90276a67 +Block 0022 [ 50]: 9e5e5c323a841df2 +Block 0022 [ 51]: 7543434ac4a6f31d +Block 0022 [ 52]: 8a4fadf7ad9b08b0 +Block 0022 [ 53]: e6e169443491062c +Block 0022 [ 54]: 1dc490d3fd26094c +Block 0022 [ 55]: f2548a4d64cee2e9 +Block 0022 [ 56]: 80de1a7ca870fd3e +Block 0022 [ 57]: 59d42a990f21e43c +Block 0022 [ 58]: 1c71ffde3c1c610e +Block 0022 [ 59]: eaacdba19e48f030 +Block 0022 [ 60]: 2b3529474cf24ffb +Block 0022 [ 61]: e6a4d2aaf27c0f19 +Block 0022 [ 62]: 18e558a5a4fd3e88 +Block 0022 [ 63]: dd61e9dc8af7b78e +Block 0022 [ 64]: 1cceaeba3e18faa6 +Block 0022 [ 65]: c8403af754002891 +Block 0022 [ 66]: 9877ab739868aeaf +Block 0022 [ 67]: 337f8dc58d7c3769 +Block 0022 [ 68]: cc7a204b0b743765 +Block 0022 [ 69]: 72c89f06c66f5f5f +Block 0022 [ 70]: 4e40dff46b027e59 +Block 0022 [ 71]: 9719284ab7e5a198 +Block 0022 [ 72]: c6fd4d54a74793d7 +Block 0022 [ 73]: 13cfcefd75aacc2b +Block 0022 [ 74]: f4def331cc0c787d +Block 0022 [ 75]: 440d0ad4ad9d17b0 +Block 0022 [ 76]: fbded143712b01c0 +Block 0022 [ 77]: 0a4b41e4e7e441a2 +Block 0022 [ 78]: 344938acef21e9c8 +Block 0022 [ 79]: 8eb1bf62f25c514e +Block 0022 [ 80]: c4522c100a390623 +Block 0022 [ 81]: 2f9c189f55588477 +Block 0022 [ 82]: 2d09452db6b0a890 +Block 0022 [ 83]: 06e3609424bda06d +Block 0022 [ 84]: f1d375b04a8be629 +Block 0022 [ 85]: c156f32f41541ab4 +Block 0022 [ 86]: 0258f1c58671feda +Block 0022 [ 87]: 4b97162ad3411aeb +Block 0022 [ 88]: 62b252050436a943 +Block 0022 [ 89]: ca82902a3725daa3 +Block 0022 [ 90]: 259a316a3ddf2da2 +Block 0022 [ 91]: 959a008ad357c995 +Block 0022 [ 92]: 9b738b6b170453a3 +Block 0022 [ 93]: 1cc4c1f4a499b0e9 +Block 0022 [ 94]: 6675ddd817df816d +Block 0022 [ 95]: 6b6454ef7dc27dd0 +Block 0022 [ 96]: e41db01be78437f1 +Block 0022 [ 97]: 45978d6fee9df995 +Block 0022 [ 98]: 50291ef2c016d553 +Block 0022 [ 99]: 3bcacbec1fead10f +Block 0022 [100]: 58007e967ebe5d2a +Block 0022 [101]: 4a38aeef5991445c +Block 0022 [102]: d11bb156aad884b9 +Block 0022 [103]: cdf7aa50f549b11c +Block 0022 [104]: e00f671baa7d6614 +Block 0022 [105]: 3d63468b5f660350 +Block 0022 [106]: 8ca6a1aafda8586c +Block 0022 [107]: eb5fe9a0beec3ba6 +Block 0022 [108]: 8a8dfa227db49a88 +Block 0022 [109]: 123379b9e95f344a +Block 0022 [110]: fc90400b40cae726 +Block 0022 [111]: a8372e72fae29434 +Block 0022 [112]: 30e7ed83a43bc676 +Block 0022 [113]: 24b0b45b9e9295d1 +Block 0022 [114]: 1064b0ba66872a1a +Block 0022 [115]: 016f81848aac5da0 +Block 0022 [116]: 70010ce2cc015342 +Block 0022 [117]: 0cb94916bdd2c824 +Block 0022 [118]: 84f7f072795efdaa +Block 0022 [119]: ae02558711928c7e +Block 0022 [120]: ce1412eaa5f5e0aa +Block 0022 [121]: a48e1cc58caae3d3 +Block 0022 [122]: fa202b0d1f05dc84 +Block 0022 [123]: 8d47e4b2d0870c63 +Block 0022 [124]: 47f21005485aa20e +Block 0022 [125]: 97af7fca33748f3d +Block 0022 [126]: 465983ece771eef3 +Block 0022 [127]: 14ec860030ff375e +Block 0023 [ 0]: 6f210fe216a3512c +Block 0023 [ 1]: 386cee177ac993a4 +Block 0023 [ 2]: 49bd76ebf083db21 +Block 0023 [ 3]: 1215eb06184503da +Block 0023 [ 4]: 49f3e037ad08fb69 +Block 0023 [ 5]: 564544fefa7fe65c +Block 0023 [ 6]: b21298e5160968ec +Block 0023 [ 7]: a786e653fdc46e4a +Block 0023 [ 8]: f209b1eaf8ea1a45 +Block 0023 [ 9]: 19b76bc48434ff35 +Block 0023 [ 10]: 2c12edbd7079ce66 +Block 0023 [ 11]: 664e44229e14ed62 +Block 0023 [ 12]: bb50a711aecd4206 +Block 0023 [ 13]: 4f9a0c9f37757465 +Block 0023 [ 14]: f5059360bcec58ae +Block 0023 [ 15]: 6033b3f8943691c3 +Block 0023 [ 16]: 317bee308f9535fd +Block 0023 [ 17]: c8d8ef6cc0e20a42 +Block 0023 [ 18]: 45ad5b2bab1aff18 +Block 0023 [ 19]: 36accf772101e38c +Block 0023 [ 20]: 3e0f5b1c20b1bb60 +Block 0023 [ 21]: 5ed93c2d23e2cdd5 +Block 0023 [ 22]: 090c5583d65eb905 +Block 0023 [ 23]: ed85a9a130d4bc94 +Block 0023 [ 24]: 7cb9a06ca5fcca44 +Block 0023 [ 25]: f20a018628cec16d +Block 0023 [ 26]: b33762850d0020d0 +Block 0023 [ 27]: 89c6f1adabcad35a +Block 0023 [ 28]: c9b2fa8540aea613 +Block 0023 [ 29]: b0cad3cccc014204 +Block 0023 [ 30]: fefd95b1dc5bd64f +Block 0023 [ 31]: 9ea654d3e93f1d5c +Block 0023 [ 32]: 3be47c28bba7bf4d +Block 0023 [ 33]: 914bf4bc99537ff9 +Block 0023 [ 34]: e72d69aa549754a8 +Block 0023 [ 35]: 159b7e1c6a4947f6 +Block 0023 [ 36]: 7b6467463a0d70fb +Block 0023 [ 37]: d21aabe90be5a3af +Block 0023 [ 38]: 0d0f5cdcb0e3c7bc +Block 0023 [ 39]: d768d5aa9aeefdb3 +Block 0023 [ 40]: b32ee41f0365e839 +Block 0023 [ 41]: 73a927ae2ea373cd +Block 0023 [ 42]: ba1522fe3f400fe5 +Block 0023 [ 43]: 79488e5d595ff114 +Block 0023 [ 44]: a0dda12acb33e1f5 +Block 0023 [ 45]: d72e4dcef04d8449 +Block 0023 [ 46]: 3b3597920b77fadd +Block 0023 [ 47]: 9a537d5d1e0f93a9 +Block 0023 [ 48]: d64b12633f104e41 +Block 0023 [ 49]: 15b77de207900141 +Block 0023 [ 50]: 67d09cbd6ff6244c +Block 0023 [ 51]: 9f57287b704d96f2 +Block 0023 [ 52]: 7cac8a39c31aaeb0 +Block 0023 [ 53]: c19e4ada63e422c1 +Block 0023 [ 54]: d967b2aca7b30b24 +Block 0023 [ 55]: 4ce1e7848cfada9c +Block 0023 [ 56]: fffee85be7b18870 +Block 0023 [ 57]: 53a89fc1aa515131 +Block 0023 [ 58]: 144547ad34b63494 +Block 0023 [ 59]: 9da4e4628b19b6af +Block 0023 [ 60]: 647a68eaa3008b91 +Block 0023 [ 61]: 011b88ec013bef9d +Block 0023 [ 62]: 3132eafeabbdbae3 +Block 0023 [ 63]: 5b9dc02adda74b1b +Block 0023 [ 64]: 0bfc5e6055737ffd +Block 0023 [ 65]: 79dfe16a4a331f60 +Block 0023 [ 66]: e62d717d47fa1f54 +Block 0023 [ 67]: 5f68e4b38ba5ac85 +Block 0023 [ 68]: 2739094dc8306afa +Block 0023 [ 69]: f438221f45366a87 +Block 0023 [ 70]: aa2c60c6b544d641 +Block 0023 [ 71]: f5210c6369a0ea40 +Block 0023 [ 72]: 63450f97178b6fea +Block 0023 [ 73]: 1e84ddb1d5d39662 +Block 0023 [ 74]: 1d562cdfeb699bde +Block 0023 [ 75]: 1f1640bc5f7f3b7c +Block 0023 [ 76]: fb9c4fd39e52de2b +Block 0023 [ 77]: 982dfc06061900ef +Block 0023 [ 78]: e3683cd9ad6c3506 +Block 0023 [ 79]: f58197aa96b567e8 +Block 0023 [ 80]: 166f8f63b0b5544b +Block 0023 [ 81]: 15acc79dcfd350b5 +Block 0023 [ 82]: 04d81c7adfc06c8b +Block 0023 [ 83]: cc1aa55ae4714aa5 +Block 0023 [ 84]: 1adf79595b037147 +Block 0023 [ 85]: 80182d8e6626ec1a +Block 0023 [ 86]: dcca7cd67b36f1d4 +Block 0023 [ 87]: 956c021ecf0004c2 +Block 0023 [ 88]: be4644c7b2abf40e +Block 0023 [ 89]: 5052284ea5c9cbfd +Block 0023 [ 90]: 2b98113bb7cfa963 +Block 0023 [ 91]: 95ccc61b0c97d568 +Block 0023 [ 92]: def94c38764899e4 +Block 0023 [ 93]: 661f98ae30046991 +Block 0023 [ 94]: d5f7cb256077ee95 +Block 0023 [ 95]: f18d4c7e877b2ed6 +Block 0023 [ 96]: e9f45ead3383c0fe +Block 0023 [ 97]: f9ad0574a3390523 +Block 0023 [ 98]: 23ff3b411095754b +Block 0023 [ 99]: 5272d0a3733568f5 +Block 0023 [100]: 57514c47b994f41a +Block 0023 [101]: f887dc7638fe516d +Block 0023 [102]: 63eac3154753f392 +Block 0023 [103]: 870c5cd60a22e090 +Block 0023 [104]: 3e03fba18c9cf510 +Block 0023 [105]: 82b3e1766e2b4fd4 +Block 0023 [106]: 2f328027ee47edbc +Block 0023 [107]: b848509d94957f5a +Block 0023 [108]: 1ce36525b23e18c8 +Block 0023 [109]: 8dc9806873cfcdc6 +Block 0023 [110]: f8104fce855b73a7 +Block 0023 [111]: 2ab1006d7d216b5b +Block 0023 [112]: 759d5c0fbad338e7 +Block 0023 [113]: d701785324bde3cc +Block 0023 [114]: e8a9f5a0f3ee07ef +Block 0023 [115]: 508b2a5f7bccb887 +Block 0023 [116]: 10c1764cf106251e +Block 0023 [117]: 0aaaef13d29c993f +Block 0023 [118]: 3bba7fa3b579643f +Block 0023 [119]: 80ab232f73189d56 +Block 0023 [120]: 397cb8a63dea3e0c +Block 0023 [121]: 3f42d5bc48fb92d6 +Block 0023 [122]: 811a23b4e2622e92 +Block 0023 [123]: 940f776c7ce48d13 +Block 0023 [124]: e6fc34563a84c17b +Block 0023 [125]: c1bbe67ee7f4e9b7 +Block 0023 [126]: 2f82722c13d7231d +Block 0023 [127]: 3432cd292161ed18 +Block 0024 [ 0]: eddf447b2d99795d +Block 0024 [ 1]: f61c77799f2cdf40 +Block 0024 [ 2]: e28436e1ceaa784a +Block 0024 [ 3]: fcf4e94439a4d452 +Block 0024 [ 4]: 59bd07ad0230777c +Block 0024 [ 5]: 2fa46f9955e19408 +Block 0024 [ 6]: 1dd1577be731eb19 +Block 0024 [ 7]: f6de459101fd739a +Block 0024 [ 8]: 1e804a7ed486f185 +Block 0024 [ 9]: cbbdf6514607376f +Block 0024 [ 10]: 01d56e7417f13081 +Block 0024 [ 11]: 897b5f91b941f660 +Block 0024 [ 12]: 8af0d7ea758c00fd +Block 0024 [ 13]: f0cf6e790ddf7761 +Block 0024 [ 14]: 3e2c532714e5038f +Block 0024 [ 15]: e6f882c03d7cf6dc +Block 0024 [ 16]: cf547b6801a01f9d +Block 0024 [ 17]: 12ae95bbda085530 +Block 0024 [ 18]: df01d1be5bbbaf21 +Block 0024 [ 19]: 968c5616afa5b119 +Block 0024 [ 20]: b7d192ebfe911df9 +Block 0024 [ 21]: ebe5a10764df10d0 +Block 0024 [ 22]: ff723e49b4afe96f +Block 0024 [ 23]: 13176fcffc8a0847 +Block 0024 [ 24]: be8ba44311abe23d +Block 0024 [ 25]: a629337958920760 +Block 0024 [ 26]: bffde970d04070ad +Block 0024 [ 27]: d5a0a926331eca17 +Block 0024 [ 28]: 846c9178100ed813 +Block 0024 [ 29]: 853d3d58c58b6e7a +Block 0024 [ 30]: 25ada3b57eacb250 +Block 0024 [ 31]: 8af5791678f8c074 +Block 0024 [ 32]: 300720a2acff0dc2 +Block 0024 [ 33]: 7e314768bfab2fc5 +Block 0024 [ 34]: e74d5a2c5e533222 +Block 0024 [ 35]: b252ddeddceab59c +Block 0024 [ 36]: 4ab8e05633797c9d +Block 0024 [ 37]: 6a29e9db5618a8a6 +Block 0024 [ 38]: adbeafb95c1275a9 +Block 0024 [ 39]: b56750cb22ea0567 +Block 0024 [ 40]: 6993e457678b21cc +Block 0024 [ 41]: f7856e2c511dc311 +Block 0024 [ 42]: fe5deac34863c661 +Block 0024 [ 43]: 88fff230d20d378a +Block 0024 [ 44]: 5b6ea59f9fd09360 +Block 0024 [ 45]: 6c4d35d69bdf7074 +Block 0024 [ 46]: 33580293fccd086b +Block 0024 [ 47]: f2e9ac8d2dee6bc6 +Block 0024 [ 48]: 6f6cf4ad82fee9b5 +Block 0024 [ 49]: 23ee0fdc617b3371 +Block 0024 [ 50]: 72977b49dd5fca77 +Block 0024 [ 51]: 078a29609707ed86 +Block 0024 [ 52]: 1e845ec6fcf9c4de +Block 0024 [ 53]: d4a1726c95c2aaa7 +Block 0024 [ 54]: ae506ede75e7f045 +Block 0024 [ 55]: 9190f1966395a9c6 +Block 0024 [ 56]: dbe7fcbbc526a184 +Block 0024 [ 57]: 586d5c3aeacd5226 +Block 0024 [ 58]: 8dd269404c21d3ff +Block 0024 [ 59]: 751301d17ef82189 +Block 0024 [ 60]: 2402993470e97de7 +Block 0024 [ 61]: cd51ad3dbb4c82c8 +Block 0024 [ 62]: 1daaaa3c21724b8c +Block 0024 [ 63]: b5db8cf3570d6ef0 +Block 0024 [ 64]: 0805b730d8f5d05c +Block 0024 [ 65]: d5a3ea8f5af2c8a6 +Block 0024 [ 66]: d9cc8848e10d4454 +Block 0024 [ 67]: ddf5e1979b9f92e2 +Block 0024 [ 68]: e4803ed4852c4d01 +Block 0024 [ 69]: ba880da04eef76a3 +Block 0024 [ 70]: 5d09daab04b87464 +Block 0024 [ 71]: c7d4f0c9549daa28 +Block 0024 [ 72]: ddbf43d719d53d4f +Block 0024 [ 73]: 6183763c5124b98b +Block 0024 [ 74]: d7ab532519584b50 +Block 0024 [ 75]: b0118b2eb9ef7eeb +Block 0024 [ 76]: 95c105df44141ee0 +Block 0024 [ 77]: 49b86cc9e5725918 +Block 0024 [ 78]: 79b784b0e19e0b33 +Block 0024 [ 79]: ed2979473ac724b6 +Block 0024 [ 80]: ad9f1b4a8c7e911c +Block 0024 [ 81]: 090389b737090273 +Block 0024 [ 82]: 511aae0be50fbf75 +Block 0024 [ 83]: 17716e9bd857569a +Block 0024 [ 84]: 31ac183381af8091 +Block 0024 [ 85]: e9e2884a1dce54cb +Block 0024 [ 86]: f382872d696cbc17 +Block 0024 [ 87]: b189af8cf1ab4cda +Block 0024 [ 88]: 8004a6a570d4442c +Block 0024 [ 89]: 5ba22dff2b0fa063 +Block 0024 [ 90]: 3f7eb430c756173b +Block 0024 [ 91]: 3a5fde8ae23af414 +Block 0024 [ 92]: 65198d9cc3245bd9 +Block 0024 [ 93]: 6b98f194dd3f6cb1 +Block 0024 [ 94]: 870bab4461fee657 +Block 0024 [ 95]: ae5c9422a34d026b +Block 0024 [ 96]: 91fc1fa9414a8b35 +Block 0024 [ 97]: 621f9c8eb0c7576a +Block 0024 [ 98]: 3d0a760827b710a7 +Block 0024 [ 99]: 8049a9ea4814f2a7 +Block 0024 [100]: cb242cd27cfb7aaf +Block 0024 [101]: 9900ad26b5ef0f3f +Block 0024 [102]: 4e6bec2d38ea9a6e +Block 0024 [103]: e887522bb791be19 +Block 0024 [104]: d54f9af1c2b5bc9b +Block 0024 [105]: 794fb8d07ba2c552 +Block 0024 [106]: b04274ed8f5dd494 +Block 0024 [107]: d71bf4bf9a0c5c17 +Block 0024 [108]: 63ace587142a3f25 +Block 0024 [109]: c18c02ae52a2c624 +Block 0024 [110]: 1671b09e592f3356 +Block 0024 [111]: 667d5a337850c037 +Block 0024 [112]: 63ed9adb5ff40317 +Block 0024 [113]: 09761522bdd824cd +Block 0024 [114]: c9f5ceeeb0acce0d +Block 0024 [115]: f372bebae8903146 +Block 0024 [116]: 6c9eda686ff955b6 +Block 0024 [117]: c908b03d9a7ef4dd +Block 0024 [118]: 27a1fb4ad5462cfe +Block 0024 [119]: 65adea8ae2a3691c +Block 0024 [120]: d2f8455998158ff1 +Block 0024 [121]: 4e8d8cff4287451d +Block 0024 [122]: 373a40bd398b3b56 +Block 0024 [123]: 00d65a5e941cf620 +Block 0024 [124]: 1d372b94a5e9724e +Block 0024 [125]: fd18b7bdefd3cc85 +Block 0024 [126]: b73020928acc6ec7 +Block 0024 [127]: 5866a79c2f9b9ec2 +Block 0025 [ 0]: 2c8561d11345bbcb +Block 0025 [ 1]: ce6b125eaa1ab9cd +Block 0025 [ 2]: ef91bc08ad2244e5 +Block 0025 [ 3]: ec81f10048ac717e +Block 0025 [ 4]: a9affd940d74bf39 +Block 0025 [ 5]: cd98cc9c5393538f +Block 0025 [ 6]: 1b7c025eeb86399c +Block 0025 [ 7]: 4440b32b87d747c0 +Block 0025 [ 8]: c0054024c9250c55 +Block 0025 [ 9]: f03d35557436b20c +Block 0025 [ 10]: 764f39d7dd1f043e +Block 0025 [ 11]: 17ac1f78e9f775b1 +Block 0025 [ 12]: 62d840c226d25a5a +Block 0025 [ 13]: d5ef4813fe759d16 +Block 0025 [ 14]: f3baaaedccdeb3f9 +Block 0025 [ 15]: c0feebdc9ba007b3 +Block 0025 [ 16]: 2df4f2102dc70b1f +Block 0025 [ 17]: e14ea24eb589dcbf +Block 0025 [ 18]: 14be7f23ca6820fd +Block 0025 [ 19]: 4c9de98e69afbcd2 +Block 0025 [ 20]: f20fedd341647ed0 +Block 0025 [ 21]: e70fcbb02c9f4f79 +Block 0025 [ 22]: 7f59100d250af8cd +Block 0025 [ 23]: c76e62d635d909c0 +Block 0025 [ 24]: eab76215f68d0071 +Block 0025 [ 25]: 9fa18ffe8b564ddc +Block 0025 [ 26]: 40df692eaa9bee66 +Block 0025 [ 27]: b3a82daf41021a13 +Block 0025 [ 28]: 4199c651a6bd5120 +Block 0025 [ 29]: 89a07dd41b1161fd +Block 0025 [ 30]: 0f47fe85a659fa91 +Block 0025 [ 31]: 040a9d9ee85cfd1e +Block 0025 [ 32]: 92234c7a2bf25570 +Block 0025 [ 33]: b9675da57984dcb4 +Block 0025 [ 34]: d8bf2ee4b5bb9c8d +Block 0025 [ 35]: 32fcffbf779a3384 +Block 0025 [ 36]: 81f8caec0275cb10 +Block 0025 [ 37]: e756b8355cc18d9f +Block 0025 [ 38]: 210c41a46917854e +Block 0025 [ 39]: bbe7ae313f50b74d +Block 0025 [ 40]: 5a0e6077c90b80f3 +Block 0025 [ 41]: 20cbcf55a59f0ae9 +Block 0025 [ 42]: 1a9bf5275e23f6ae +Block 0025 [ 43]: b60aba0334ebd328 +Block 0025 [ 44]: 6232098b300f34c2 +Block 0025 [ 45]: 8b1262163e3ecbe9 +Block 0025 [ 46]: 9450850dc44e0827 +Block 0025 [ 47]: 800f5c08eb0de9be +Block 0025 [ 48]: e02529340ab3491e +Block 0025 [ 49]: 14448f2f13e3eac8 +Block 0025 [ 50]: ca3a090b7fa5fd5c +Block 0025 [ 51]: 2e2855e54d1e7d4d +Block 0025 [ 52]: d80732c77d3b75db +Block 0025 [ 53]: af59db9a16d1295a +Block 0025 [ 54]: db8a6b5029f7e1d0 +Block 0025 [ 55]: cb24634059acee01 +Block 0025 [ 56]: 80d3b1a96dccb73a +Block 0025 [ 57]: d674a0056f0f898b +Block 0025 [ 58]: 7d4e4dc314a7973f +Block 0025 [ 59]: d330792bac28cf76 +Block 0025 [ 60]: adddec91b6a078fe +Block 0025 [ 61]: 9f897bcb1daa95b8 +Block 0025 [ 62]: c5d47c497ba05724 +Block 0025 [ 63]: 36bd497fe0ee75e5 +Block 0025 [ 64]: e41394607adf5f0b +Block 0025 [ 65]: ee10a8850916afa0 +Block 0025 [ 66]: 440a2c96a32b150f +Block 0025 [ 67]: 11a62fe43c209a7d +Block 0025 [ 68]: 2483e11426e0bfbd +Block 0025 [ 69]: 24bbbcbbb3d29f48 +Block 0025 [ 70]: d4922b4a42b77a9b +Block 0025 [ 71]: bd8f38e3a1cbca43 +Block 0025 [ 72]: 5a944ab4975ffc86 +Block 0025 [ 73]: 0a94006a12ca9108 +Block 0025 [ 74]: 2d049664d5293f21 +Block 0025 [ 75]: de2d183b83723606 +Block 0025 [ 76]: 908ce9b248b632fe +Block 0025 [ 77]: 4d2399cbea6d11eb +Block 0025 [ 78]: d3a61307f6d2e71b +Block 0025 [ 79]: d78ff693a340c1b9 +Block 0025 [ 80]: e2b7dedc3bfe183e +Block 0025 [ 81]: f7f9130cf2bc302f +Block 0025 [ 82]: 7ec60ab2f056dddf +Block 0025 [ 83]: 9eb37b7bf5425ae8 +Block 0025 [ 84]: 4c9d4276d205539c +Block 0025 [ 85]: 8b0c8fbabf1d8e4c +Block 0025 [ 86]: 52c844a54b3c0d74 +Block 0025 [ 87]: 85082ba1b87e8697 +Block 0025 [ 88]: fde7046900f73003 +Block 0025 [ 89]: 2885d7326f19e580 +Block 0025 [ 90]: 629e3906763fa72e +Block 0025 [ 91]: 8155ef418fa73ed0 +Block 0025 [ 92]: 9702b7e6c0917c24 +Block 0025 [ 93]: ccbb8af78a30c364 +Block 0025 [ 94]: 3c06039ccc5c1250 +Block 0025 [ 95]: b21fb045ad23a550 +Block 0025 [ 96]: efc77389136204d2 +Block 0025 [ 97]: 4c8fc177b55d223f +Block 0025 [ 98]: 6d303bee7329d236 +Block 0025 [ 99]: 347855b3983e06cf +Block 0025 [100]: 96475c0602f7ab59 +Block 0025 [101]: 0eff8ef338e4c7b4 +Block 0025 [102]: a8358c0ef351209f +Block 0025 [103]: 6400fc24e1bf0846 +Block 0025 [104]: e5893beeb36900c7 +Block 0025 [105]: 8a5c06564967d92a +Block 0025 [106]: f4481f247efaff02 +Block 0025 [107]: 69f0148dbc2507e4 +Block 0025 [108]: 7b19b02cfbd82ab0 +Block 0025 [109]: 4469137a30358b3b +Block 0025 [110]: b1a01da0f55b563f +Block 0025 [111]: b899bcd1494fe3e4 +Block 0025 [112]: e995344bcb8a69cb +Block 0025 [113]: 4862fb4389d31d3a +Block 0025 [114]: cdd82bd88a77097b +Block 0025 [115]: d906fcd88852d153 +Block 0025 [116]: e73aee160b2f9f77 +Block 0025 [117]: 2cf4ab8864284ead +Block 0025 [118]: 94983532f5b9e9d0 +Block 0025 [119]: 8902bb6ab139c3b4 +Block 0025 [120]: d965e225233846ca +Block 0025 [121]: 0febb5dde12e73e6 +Block 0025 [122]: 5dcf41f7ac767e41 +Block 0025 [123]: abe3a933299c8864 +Block 0025 [124]: d52527ce42a74ef7 +Block 0025 [125]: 81a8bf9a14401ee2 +Block 0025 [126]: 5780722f3c56e71a +Block 0025 [127]: 1b5b439ac8fce429 +Block 0026 [ 0]: ae548c9772346e38 +Block 0026 [ 1]: 4fa526f2904c3366 +Block 0026 [ 2]: 9a8e9ea747daadca +Block 0026 [ 3]: 46973c0cd183d6ad +Block 0026 [ 4]: ce6a0e48d6f080dd +Block 0026 [ 5]: 5327d1f0c37edf5a +Block 0026 [ 6]: 5fe636ad749684f6 +Block 0026 [ 7]: 3b569db4a5edbfcf +Block 0026 [ 8]: 90a8b454e4cf3ed7 +Block 0026 [ 9]: 7cdc08367e3e2b71 +Block 0026 [ 10]: dda1e07bca57c639 +Block 0026 [ 11]: 72135942b792af04 +Block 0026 [ 12]: f5d3dbcfb527f94c +Block 0026 [ 13]: 5d53092f61d8b459 +Block 0026 [ 14]: 047f8cf54161ed96 +Block 0026 [ 15]: 28de041eca46827e +Block 0026 [ 16]: 9e852eb5ea2e9fc9 +Block 0026 [ 17]: b7bc6bfbdf8d9473 +Block 0026 [ 18]: 2327a4982d9b8658 +Block 0026 [ 19]: de0448dedc439638 +Block 0026 [ 20]: 934fe5cc76d058dc +Block 0026 [ 21]: 7dd47c7d0611bd3c +Block 0026 [ 22]: ff6491f77d6c374f +Block 0026 [ 23]: 6f2ee705e23e1a62 +Block 0026 [ 24]: d95c95a7c376023f +Block 0026 [ 25]: ebb90bcb0d9a2e1a +Block 0026 [ 26]: 3598ae7c8025d27e +Block 0026 [ 27]: 3acf5e34e2a22c29 +Block 0026 [ 28]: eaa7b06e760fdf0d +Block 0026 [ 29]: c48e161cc6f08026 +Block 0026 [ 30]: dc2f743f8d9ef409 +Block 0026 [ 31]: 66c36a950778d2ef +Block 0026 [ 32]: d9d698a90de3fcc9 +Block 0026 [ 33]: dfaaa9c45957f231 +Block 0026 [ 34]: fa96f793b50fb045 +Block 0026 [ 35]: d12152c0bb31e67e +Block 0026 [ 36]: a9cbe26a967a23e8 +Block 0026 [ 37]: a483b2137eba42a7 +Block 0026 [ 38]: 678e8942ca66a847 +Block 0026 [ 39]: b6c8df9f4f648309 +Block 0026 [ 40]: 85be6df849950f62 +Block 0026 [ 41]: 4a9b1e4f16d00056 +Block 0026 [ 42]: fbf726756de4f7cd +Block 0026 [ 43]: f5f74eee063e34b7 +Block 0026 [ 44]: 52c1dcab8bcb3aa6 +Block 0026 [ 45]: 11fa37fea38d4b35 +Block 0026 [ 46]: a22979225556a561 +Block 0026 [ 47]: 7b6cdcaf026a134f +Block 0026 [ 48]: 02215c77ffb8ba6f +Block 0026 [ 49]: 24c28f63fb82bbcc +Block 0026 [ 50]: 6641a2d247b276ca +Block 0026 [ 51]: 463e403d21ed000f +Block 0026 [ 52]: e1d1c18d038ac211 +Block 0026 [ 53]: b74b95388ef69417 +Block 0026 [ 54]: 5de1e73a34c312c0 +Block 0026 [ 55]: 919719bbabaa83dd +Block 0026 [ 56]: 65b50e27ffe6a184 +Block 0026 [ 57]: 51dac09fb50c02d1 +Block 0026 [ 58]: 2a9815328a8815c2 +Block 0026 [ 59]: ffc7ea217c6861d0 +Block 0026 [ 60]: e020534e9bcd9d60 +Block 0026 [ 61]: fc3b710fa977051a +Block 0026 [ 62]: c8d68adcf4dc7857 +Block 0026 [ 63]: 55d86434ab763b69 +Block 0026 [ 64]: 6fa6c5d1d43e9faa +Block 0026 [ 65]: 2ec426b514999842 +Block 0026 [ 66]: 5884ee9d8bf1835a +Block 0026 [ 67]: 05ef086605a8ef52 +Block 0026 [ 68]: 6a9d4ee140146fca +Block 0026 [ 69]: d6a60aedc3bc7081 +Block 0026 [ 70]: 04b0a19c5451e4f7 +Block 0026 [ 71]: 0ea33ec34ba6b2de +Block 0026 [ 72]: ae420c0fee6ac2b4 +Block 0026 [ 73]: 3fee59ec7d4b26f0 +Block 0026 [ 74]: cfe1ebb530f09ee3 +Block 0026 [ 75]: 45c85970af8da75e +Block 0026 [ 76]: feb044354d937fc6 +Block 0026 [ 77]: 75fa91e6d156063c +Block 0026 [ 78]: f0479b4d513cf9e7 +Block 0026 [ 79]: f8cdc62687425767 +Block 0026 [ 80]: f73dfe8ab5567ae2 +Block 0026 [ 81]: 85c68e4020055359 +Block 0026 [ 82]: 91ed030700606540 +Block 0026 [ 83]: 7f59b1cc08cdd6de +Block 0026 [ 84]: 6503c24c1f5b5c90 +Block 0026 [ 85]: cee0c563eb591403 +Block 0026 [ 86]: a303bfa7eb1b3032 +Block 0026 [ 87]: 99ad670a2df52aae +Block 0026 [ 88]: 5ec0d7924bc8bcfa +Block 0026 [ 89]: f15dc0086097353e +Block 0026 [ 90]: 2aebc4f955613c0b +Block 0026 [ 91]: 5ca9833074c616e9 +Block 0026 [ 92]: 0c833254e30c2f41 +Block 0026 [ 93]: 9b1036a798694f12 +Block 0026 [ 94]: 0baf65d1f2a96312 +Block 0026 [ 95]: d67aad555f4881a6 +Block 0026 [ 96]: 99363147a71a98a9 +Block 0026 [ 97]: b18ba165a3222f8e +Block 0026 [ 98]: 4d6a118499101f4b +Block 0026 [ 99]: 77adecd01727a763 +Block 0026 [100]: 9d9155117157c8b5 +Block 0026 [101]: 9334b2f46d38d90e +Block 0026 [102]: 033648fbf89c6a27 +Block 0026 [103]: 6c96ba978dd3f8c0 +Block 0026 [104]: 91127e21031763c7 +Block 0026 [105]: 7f45dd941d58c054 +Block 0026 [106]: 0c1f22840b808997 +Block 0026 [107]: 9a9c45cb2f25b945 +Block 0026 [108]: 95f018d01ddb615f +Block 0026 [109]: b4a4286739862bdd +Block 0026 [110]: 12b248b330903c22 +Block 0026 [111]: 97867ec381bfee1d +Block 0026 [112]: a3370bd49b04d2ca +Block 0026 [113]: 8ab03ff18952afc9 +Block 0026 [114]: 81c74f0e0e9f3e18 +Block 0026 [115]: 9baa92ecb9564b1d +Block 0026 [116]: 707f7364a07d053e +Block 0026 [117]: b781cb02fb407b4d +Block 0026 [118]: cbef3f8e31dd48f4 +Block 0026 [119]: d3c7cdf145f5d28b +Block 0026 [120]: 24c9538782719f61 +Block 0026 [121]: 6e01e7f44c899af6 +Block 0026 [122]: ba51a4e8a6f5c5c1 +Block 0026 [123]: 42b49d032c5116f7 +Block 0026 [124]: 22c17a60e3321c7f +Block 0026 [125]: 6891d19c5ea28025 +Block 0026 [126]: 2a2c4cf8b6b67af8 +Block 0026 [127]: 89fdbf5492ff1c7f +Block 0027 [ 0]: ac48f5e7f46f4fc7 +Block 0027 [ 1]: 111bfa2387fe89c8 +Block 0027 [ 2]: a6c13eb1f00dcd99 +Block 0027 [ 3]: fb5add8b9675f2ad +Block 0027 [ 4]: 947336bbc2c39d5f +Block 0027 [ 5]: 79170081b46d1552 +Block 0027 [ 6]: faeebc5d66735e64 +Block 0027 [ 7]: d157ef9d8d14e44d +Block 0027 [ 8]: e1108af73d0163a7 +Block 0027 [ 9]: 4dbbd37910f1d938 +Block 0027 [ 10]: 80e8c0cfe5358976 +Block 0027 [ 11]: a3764edca50cfea2 +Block 0027 [ 12]: 3ad83939c168f63d +Block 0027 [ 13]: e3d3799c94fc7059 +Block 0027 [ 14]: 10206472c79f89e5 +Block 0027 [ 15]: a9d5ef9a59a886c6 +Block 0027 [ 16]: 88133d2608d75bfe +Block 0027 [ 17]: d08bc087021ec134 +Block 0027 [ 18]: 7a4a97baf35864f6 +Block 0027 [ 19]: b9e73155448e7298 +Block 0027 [ 20]: a275b2e3bb59940c +Block 0027 [ 21]: d26622791d1b2e81 +Block 0027 [ 22]: da05dba481c66703 +Block 0027 [ 23]: 8633f6b013f0583d +Block 0027 [ 24]: ce34bddc5869a81b +Block 0027 [ 25]: 0da213a70c07c86a +Block 0027 [ 26]: 388e524b02744481 +Block 0027 [ 27]: 08a5c9ca9689ff59 +Block 0027 [ 28]: 9821e14ebc900143 +Block 0027 [ 29]: cfa50a6b406ff2e2 +Block 0027 [ 30]: 1a53259a976999ae +Block 0027 [ 31]: 897f319a5c192ce7 +Block 0027 [ 32]: 74f531c163c3f191 +Block 0027 [ 33]: 0c5f7df2dde9b276 +Block 0027 [ 34]: 3ab217cf1fc819db +Block 0027 [ 35]: bc2c75715c05513d +Block 0027 [ 36]: 45a36d781eba43bd +Block 0027 [ 37]: bee1fe714b21e563 +Block 0027 [ 38]: e6479e8fab9dc871 +Block 0027 [ 39]: 0e1ae1d2ac24ae18 +Block 0027 [ 40]: 32baba742e8b9c07 +Block 0027 [ 41]: 9c5d49921197e424 +Block 0027 [ 42]: 94df5e61cac42a41 +Block 0027 [ 43]: db7a15804336237c +Block 0027 [ 44]: cbebc89ec1ae1ea3 +Block 0027 [ 45]: 2df7c9e2fcd66a2b +Block 0027 [ 46]: addfa745e2f0b541 +Block 0027 [ 47]: 60d4ee32d06bff3c +Block 0027 [ 48]: c0a1d3ff568071a7 +Block 0027 [ 49]: 68ced550e0fe7d47 +Block 0027 [ 50]: 3e06864703d2343a +Block 0027 [ 51]: d4e22f553815e7e5 +Block 0027 [ 52]: 257066f1cd8a6b09 +Block 0027 [ 53]: 8f1b8af2f45309ee +Block 0027 [ 54]: 5b0b4b45373d7762 +Block 0027 [ 55]: b55556164e87c922 +Block 0027 [ 56]: b4855a07acff4d93 +Block 0027 [ 57]: f14c1f32e16d6632 +Block 0027 [ 58]: 5cc4fc4c46151abc +Block 0027 [ 59]: bee51a57eb866845 +Block 0027 [ 60]: f8882d4179c8ba00 +Block 0027 [ 61]: f4668d69538eb68a +Block 0027 [ 62]: 83e8c1cc3aa26049 +Block 0027 [ 63]: 88fb20ca9c98fb62 +Block 0027 [ 64]: f2c3e5d04b183fe9 +Block 0027 [ 65]: 81bd1bc05a4f33a5 +Block 0027 [ 66]: 87f468bfc53c09b3 +Block 0027 [ 67]: d086962547462880 +Block 0027 [ 68]: 5f8c35242d9984c9 +Block 0027 [ 69]: e98e3bdff1298505 +Block 0027 [ 70]: 8eb0beddde71346f +Block 0027 [ 71]: 51338a7e4f3d297b +Block 0027 [ 72]: 472b3c3d565087b9 +Block 0027 [ 73]: 46eb999bac7333a6 +Block 0027 [ 74]: 62443cbed1cadc8a +Block 0027 [ 75]: 26b71b069331c7dc +Block 0027 [ 76]: ad2a45d57cbc6a55 +Block 0027 [ 77]: fd55b1459e4123ca +Block 0027 [ 78]: 823c12d897da595e +Block 0027 [ 79]: 84d4986bafc471e6 +Block 0027 [ 80]: 66a05a4298ca3345 +Block 0027 [ 81]: 7a37fcdfea6adb51 +Block 0027 [ 82]: 56bc9ff1d5f7b168 +Block 0027 [ 83]: db14aae988498545 +Block 0027 [ 84]: 66d40028cd079b41 +Block 0027 [ 85]: 05c66fa63c2fc32d +Block 0027 [ 86]: b49425bd113a373c +Block 0027 [ 87]: ee8be4598a806743 +Block 0027 [ 88]: b83f1835026b9428 +Block 0027 [ 89]: 0b73aec123c56947 +Block 0027 [ 90]: 9a8b473b45918be7 +Block 0027 [ 91]: 93658a783b0883d1 +Block 0027 [ 92]: 1410b26a183a87f1 +Block 0027 [ 93]: 927f2f28732ea0b9 +Block 0027 [ 94]: e921bc3435bf0ac7 +Block 0027 [ 95]: ae24686894148506 +Block 0027 [ 96]: 13bd6039622f0fd5 +Block 0027 [ 97]: c91481340d2e127a +Block 0027 [ 98]: eea71ccc0b4a481a +Block 0027 [ 99]: 0bca32d3fdc77f24 +Block 0027 [100]: 1039e2ff86cb7d80 +Block 0027 [101]: b8eb26ad8ac50063 +Block 0027 [102]: ba25c859c968fcdd +Block 0027 [103]: b1602a88979ec508 +Block 0027 [104]: 99d39c292843e6e9 +Block 0027 [105]: 69c41a0141112cb2 +Block 0027 [106]: 17ff8363cca7f3a2 +Block 0027 [107]: d18ede26963ab3fe +Block 0027 [108]: 14b7b1e93d8b5a3f +Block 0027 [109]: 11191c6bac847bbe +Block 0027 [110]: 6ae81e2647196e86 +Block 0027 [111]: c21472f1a15dbd0f +Block 0027 [112]: 72eef955654aaca2 +Block 0027 [113]: b270a62ad0597a99 +Block 0027 [114]: 984cbc12b08ef54f +Block 0027 [115]: a5315c5bfdfe25c3 +Block 0027 [116]: 5f76937e43898671 +Block 0027 [117]: 7364633ab3970ce5 +Block 0027 [118]: 4f374b7d7f8a1b0a +Block 0027 [119]: 190506b0bb55d642 +Block 0027 [120]: eae14ea2387914da +Block 0027 [121]: 0dc68aced754b64c +Block 0027 [122]: 075bd13c980f8d5d +Block 0027 [123]: c409e3f292bd7f17 +Block 0027 [124]: 693248d680ad014b +Block 0027 [125]: 0e3b9002bf420a1e +Block 0027 [126]: 7ce6516b1b1fbf1f +Block 0027 [127]: 4c4e29ee31589c05 +Block 0028 [ 0]: b8e62f53d2ce1494 +Block 0028 [ 1]: 4716437de3cb4939 +Block 0028 [ 2]: e743de1560497632 +Block 0028 [ 3]: 4aef44990a0ce04e +Block 0028 [ 4]: 789495cb8eb2e15c +Block 0028 [ 5]: 2f4c1a5e7daeab2f +Block 0028 [ 6]: 6d5dec3557836315 +Block 0028 [ 7]: 7d4122e1a18253a5 +Block 0028 [ 8]: 2fd87fc3fad80e4f +Block 0028 [ 9]: 560b67a39b7c6946 +Block 0028 [ 10]: fb71469993b02a5d +Block 0028 [ 11]: b843138e008b7e8b +Block 0028 [ 12]: 752d820480fa2a86 +Block 0028 [ 13]: 436b4bbfb932c72b +Block 0028 [ 14]: fb01a61c5836da08 +Block 0028 [ 15]: db034cda046b6127 +Block 0028 [ 16]: 94e8d49a336311cd +Block 0028 [ 17]: 85525bd6d9b150ac +Block 0028 [ 18]: e281ba6b1984ffae +Block 0028 [ 19]: 341cd2cf27ed0fbe +Block 0028 [ 20]: 255fb900f9ee2a57 +Block 0028 [ 21]: 3d2ca7c55efd98b6 +Block 0028 [ 22]: e1bc705a1a4e5936 +Block 0028 [ 23]: 743d8a0984645c1e +Block 0028 [ 24]: d2a25ac5b7a0ae02 +Block 0028 [ 25]: 8464596d961c2fec +Block 0028 [ 26]: 56ccfff6f3f24d1e +Block 0028 [ 27]: 22e2f8934e984ff3 +Block 0028 [ 28]: 81d80069716afabf +Block 0028 [ 29]: 00bda8f056cac233 +Block 0028 [ 30]: facaf2ef615a11b3 +Block 0028 [ 31]: 16220aea7c2361cb +Block 0028 [ 32]: 7a98c8ac8b212c86 +Block 0028 [ 33]: be2046ffd6d4f005 +Block 0028 [ 34]: 4d3a8bfadb8130a6 +Block 0028 [ 35]: e69d29b66fa2840e +Block 0028 [ 36]: 82e6a4458387ec9c +Block 0028 [ 37]: e2fd832d31bc7e24 +Block 0028 [ 38]: 734a2b7a8215dc6f +Block 0028 [ 39]: 3318314708cd9804 +Block 0028 [ 40]: e3ef4eebaa2b3437 +Block 0028 [ 41]: 264b0dbfd42251dc +Block 0028 [ 42]: 666aa0a1091a9f29 +Block 0028 [ 43]: c0dc13ba6d3e4215 +Block 0028 [ 44]: f2d6adf01f5535c2 +Block 0028 [ 45]: 79889c421015c458 +Block 0028 [ 46]: 9f037ee45505e117 +Block 0028 [ 47]: 6e710fbc8eb69ec8 +Block 0028 [ 48]: 2a2c67c6b94577fa +Block 0028 [ 49]: 7076c829b540fcaa +Block 0028 [ 50]: d6a0e63df1de5e75 +Block 0028 [ 51]: 6b915128089dfa26 +Block 0028 [ 52]: 24a738c1369229d6 +Block 0028 [ 53]: 38b6a31386518342 +Block 0028 [ 54]: 2504a90ba6da1fb8 +Block 0028 [ 55]: 3aaca316b13bd802 +Block 0028 [ 56]: d4ded71c362c675a +Block 0028 [ 57]: d279da15ea3260a8 +Block 0028 [ 58]: 622877b73a43e0bc +Block 0028 [ 59]: ed8fdde4c02d0c1f +Block 0028 [ 60]: 9f65a667b53b1f5b +Block 0028 [ 61]: 054434ff440c6b0f +Block 0028 [ 62]: 521510fe15be4238 +Block 0028 [ 63]: 09d1cb3dbbfab3d2 +Block 0028 [ 64]: 60c405bae52b27bb +Block 0028 [ 65]: 4b8430f61f53bffb +Block 0028 [ 66]: ddea9aa360566f0b +Block 0028 [ 67]: 9e4b0cdf140e2d2d +Block 0028 [ 68]: eeb7e866539ca7b8 +Block 0028 [ 69]: 2305d2ec0c38569e +Block 0028 [ 70]: ba3c174f1af83f49 +Block 0028 [ 71]: cf1716cd5dbff726 +Block 0028 [ 72]: c69d9b4bb6156859 +Block 0028 [ 73]: e3fcef7fc8facb83 +Block 0028 [ 74]: b9c49c1058079ee0 +Block 0028 [ 75]: be2238660af66738 +Block 0028 [ 76]: 29e7854ac183dc60 +Block 0028 [ 77]: b093d02735b183c7 +Block 0028 [ 78]: 0d97fe09adb193b0 +Block 0028 [ 79]: 8d4d0e8859e01b2a +Block 0028 [ 80]: 1c09ca06b9d70f7a +Block 0028 [ 81]: 03efd2a5e5867887 +Block 0028 [ 82]: a33148a972381c6d +Block 0028 [ 83]: c5028b2c7cf9d4cd +Block 0028 [ 84]: 8b891e1df0374009 +Block 0028 [ 85]: fdaedfb6277b0c64 +Block 0028 [ 86]: 01f362abbe4b7d66 +Block 0028 [ 87]: 1593ceb38675eb7a +Block 0028 [ 88]: 4851adf7198e4466 +Block 0028 [ 89]: 9723e4ff1426733f +Block 0028 [ 90]: 2d6f41236ebaeb0d +Block 0028 [ 91]: acbf9afa3d54103c +Block 0028 [ 92]: 089f3f91047ae09c +Block 0028 [ 93]: e20fd7da3b7332c5 +Block 0028 [ 94]: 8c3d70105a8261fc +Block 0028 [ 95]: 5234c9bc7fb63220 +Block 0028 [ 96]: 9c483af4900f0f6f +Block 0028 [ 97]: 9cd23f8cdbc29189 +Block 0028 [ 98]: 0d20be4fe1b12641 +Block 0028 [ 99]: 247545f7ebc6b9c5 +Block 0028 [100]: 59d21e2223d7b032 +Block 0028 [101]: 5fddedd3de444155 +Block 0028 [102]: 57c23649004c94a0 +Block 0028 [103]: 47f8c185c7daa78e +Block 0028 [104]: 7a436d32bb4ea254 +Block 0028 [105]: 1ea2b132562f308f +Block 0028 [106]: 1df0c44ae53da0c1 +Block 0028 [107]: 5d94631c278430df +Block 0028 [108]: 223f090e4799308e +Block 0028 [109]: c34b01200a5f0902 +Block 0028 [110]: 28988167ff0bcfd9 +Block 0028 [111]: ca3efac91e41e25f +Block 0028 [112]: d24655cf3dd291cd +Block 0028 [113]: a89f8a7709cf0cc7 +Block 0028 [114]: 77207aee3ce2d692 +Block 0028 [115]: 15447a4d13aee4f0 +Block 0028 [116]: 4eeb873ecdee4dee +Block 0028 [117]: 22fe4e3a6e49ac5d +Block 0028 [118]: b3589967e475ff68 +Block 0028 [119]: 82b89afabfa951b1 +Block 0028 [120]: 507f14e7277ca935 +Block 0028 [121]: 8fc0cdbca8b10d5a +Block 0028 [122]: 468f7431d1d35d51 +Block 0028 [123]: 0d1db698bf4056f7 +Block 0028 [124]: d48ceb4a52d6c49e +Block 0028 [125]: 4bb84640eada6d78 +Block 0028 [126]: e8436d8fac0e9480 +Block 0028 [127]: 26861997b678a434 +Block 0029 [ 0]: dc0dc7d0a82c999a +Block 0029 [ 1]: 0e7cd16d2f440e38 +Block 0029 [ 2]: 9f26fad50ff36536 +Block 0029 [ 3]: cea8f4c5df334ab7 +Block 0029 [ 4]: f300d6980ad722ff +Block 0029 [ 5]: 8eb946655f1d9632 +Block 0029 [ 6]: 0b922b678d8cadbf +Block 0029 [ 7]: ed47f3a695e54f8a +Block 0029 [ 8]: a04f84304cf89f71 +Block 0029 [ 9]: 8ce09bb046ec0a8c +Block 0029 [ 10]: 9d6490006c2a5257 +Block 0029 [ 11]: b3199e810bcfbb88 +Block 0029 [ 12]: 0e207156c4f218a0 +Block 0029 [ 13]: a6398c4e9dbcea21 +Block 0029 [ 14]: c1b9e1a00b8a739f +Block 0029 [ 15]: c526710d98b6bf9b +Block 0029 [ 16]: 456b74b8105ae58b +Block 0029 [ 17]: 1627450bd0fba708 +Block 0029 [ 18]: 41857be6b6848579 +Block 0029 [ 19]: 5233421198274bae +Block 0029 [ 20]: 4b2bd848cd0384c0 +Block 0029 [ 21]: 06e3d552d3f4bb55 +Block 0029 [ 22]: 775fb045ea301961 +Block 0029 [ 23]: b8a46779d7f319f2 +Block 0029 [ 24]: a1727300e2873c49 +Block 0029 [ 25]: 2b547509b7138ebb +Block 0029 [ 26]: dbdcef5e8a67474f +Block 0029 [ 27]: a441df44126436be +Block 0029 [ 28]: 16402d492197daed +Block 0029 [ 29]: 77279d37d3daef7b +Block 0029 [ 30]: 4c6f50e750e0efea +Block 0029 [ 31]: 69a69d2e077902b0 +Block 0029 [ 32]: bee3b81216877446 +Block 0029 [ 33]: 9255f02e02972175 +Block 0029 [ 34]: 7d47b932a7bdc11e +Block 0029 [ 35]: 9b6d5923af072c99 +Block 0029 [ 36]: 0a3819ce8e9f49ed +Block 0029 [ 37]: 98ed9e938b421644 +Block 0029 [ 38]: d1cffdb408dc5063 +Block 0029 [ 39]: 2e615c6fbd0b9642 +Block 0029 [ 40]: ba63184fc76368e8 +Block 0029 [ 41]: 903af699e71bfe3a +Block 0029 [ 42]: 73218c8b59c6af76 +Block 0029 [ 43]: 0fa0e272f3735d96 +Block 0029 [ 44]: 2a287ece60d08fa8 +Block 0029 [ 45]: 4d5475661899e55f +Block 0029 [ 46]: 69d8074c9d0f42ad +Block 0029 [ 47]: 30eebd523eb0754e +Block 0029 [ 48]: b53f283d7752fc7d +Block 0029 [ 49]: 5dea1409e6111e21 +Block 0029 [ 50]: dcd6aba8a5dfe8c6 +Block 0029 [ 51]: ea3657c1e57689fe +Block 0029 [ 52]: d46407d5713004ee +Block 0029 [ 53]: 7cdd19952ee13591 +Block 0029 [ 54]: 38f3d88b0ae422c5 +Block 0029 [ 55]: e7da12227354c586 +Block 0029 [ 56]: 113440ada1f5e39e +Block 0029 [ 57]: 8ccb809fafc63799 +Block 0029 [ 58]: bfd3985569626cf8 +Block 0029 [ 59]: 7ad94e3e7b06e8e8 +Block 0029 [ 60]: 6b444ae566e62a4f +Block 0029 [ 61]: ed7960eada1d2774 +Block 0029 [ 62]: b0bdc355d05782ef +Block 0029 [ 63]: 6e25edee7de6f5e8 +Block 0029 [ 64]: 9d0e81797df63c41 +Block 0029 [ 65]: 693a3bc26573c32a +Block 0029 [ 66]: e7229482ee70c324 +Block 0029 [ 67]: edf62e67ad4eaa5a +Block 0029 [ 68]: bbb26d77c48c9954 +Block 0029 [ 69]: 870f2d918efb8fdc +Block 0029 [ 70]: 422a46134ec8d22c +Block 0029 [ 71]: 35644114b3f8fc04 +Block 0029 [ 72]: 3532571a5c119a3a +Block 0029 [ 73]: aa8b114087670213 +Block 0029 [ 74]: 6006a9a76ab59c06 +Block 0029 [ 75]: 255230fdb77abea5 +Block 0029 [ 76]: bb50b303992eb4bd +Block 0029 [ 77]: 502b81a9140cc5e8 +Block 0029 [ 78]: d1f6edb3918526e5 +Block 0029 [ 79]: 3d729e074a33c655 +Block 0029 [ 80]: 297a725b9b3dafe2 +Block 0029 [ 81]: 8a436bdf75e0799f +Block 0029 [ 82]: f32829e3052dd6e7 +Block 0029 [ 83]: e8020c256d086133 +Block 0029 [ 84]: 3e868bd1c14c4a35 +Block 0029 [ 85]: 510fa73c666a05cf +Block 0029 [ 86]: 2de06be3807cfa46 +Block 0029 [ 87]: 1131a6fc025f90f0 +Block 0029 [ 88]: d948da793fcf0195 +Block 0029 [ 89]: f59ea5fff22c69f3 +Block 0029 [ 90]: 8a8b281df8a1573b +Block 0029 [ 91]: aa614b1304208961 +Block 0029 [ 92]: 4b791a952fc31b04 +Block 0029 [ 93]: 9653dc5b85510b5a +Block 0029 [ 94]: 8391634e659159dc +Block 0029 [ 95]: 6b090f8a6b59c4cd +Block 0029 [ 96]: 04c73c62fb1a121a +Block 0029 [ 97]: 186e3e22f6df5d01 +Block 0029 [ 98]: 775987313eba92bd +Block 0029 [ 99]: b150a5063cd54416 +Block 0029 [100]: a898b872c4290dc0 +Block 0029 [101]: 2dec9c175eaa421e +Block 0029 [102]: f2349cc83080779d +Block 0029 [103]: 7b8a3330d6cc6828 +Block 0029 [104]: 57a82d270e0d0a83 +Block 0029 [105]: f7c09940f35b45e2 +Block 0029 [106]: 395dca91740b4d8f +Block 0029 [107]: dc452d4bb0ff7b49 +Block 0029 [108]: c928d4f1f5feae04 +Block 0029 [109]: 29a21f9c67cb6c67 +Block 0029 [110]: c7192e442ca9c08c +Block 0029 [111]: 86846d3ffae5176f +Block 0029 [112]: 466454ea82069d53 +Block 0029 [113]: 7cbb9ec68b6f3b37 +Block 0029 [114]: 1a3483f87e349bce +Block 0029 [115]: 72735395b8866f07 +Block 0029 [116]: b7845e72f6a6c391 +Block 0029 [117]: d3cd149c07e70ed4 +Block 0029 [118]: 70152f3ba32dadef +Block 0029 [119]: 9b2fc8cf00a302e9 +Block 0029 [120]: a6f923e577c940bd +Block 0029 [121]: 958c7b390683bf99 +Block 0029 [122]: 6835bc14651b0d68 +Block 0029 [123]: 4af56df7bc755c90 +Block 0029 [124]: 1d299f11bef26d4a +Block 0029 [125]: 3c33f78a4e2c7041 +Block 0029 [126]: 1e7aa5bfab2de5f6 +Block 0029 [127]: a1cfbf5cc9690a29 +Block 0030 [ 0]: 56403ff10624a725 +Block 0030 [ 1]: cb21b53aeebf1911 +Block 0030 [ 2]: 6a4b03dec8d7576a +Block 0030 [ 3]: 0a959378af94d9a2 +Block 0030 [ 4]: 76740a8361f993da +Block 0030 [ 5]: f7ec77e7d0a9c2e3 +Block 0030 [ 6]: 930548e31bf90bb6 +Block 0030 [ 7]: 33e8969a8fefb02a +Block 0030 [ 8]: b80b5bdea558ae41 +Block 0030 [ 9]: 7afcf57879a14ff7 +Block 0030 [ 10]: e9a58a4d57c0b159 +Block 0030 [ 11]: b46f819f25300f6d +Block 0030 [ 12]: 73a8dd3fec3d706b +Block 0030 [ 13]: 8df47cfad884b6b8 +Block 0030 [ 14]: db32b4826baff56d +Block 0030 [ 15]: 93fca71b86463568 +Block 0030 [ 16]: 958fb17a99858dc9 +Block 0030 [ 17]: bf8b9deaae690142 +Block 0030 [ 18]: 5d69921ae34a496c +Block 0030 [ 19]: cd9430b2765c1a00 +Block 0030 [ 20]: 3cc3eac00ab30b27 +Block 0030 [ 21]: 784c9d59ff888702 +Block 0030 [ 22]: 5ebfde2ffc5e8612 +Block 0030 [ 23]: fa94037530fc9117 +Block 0030 [ 24]: f1aad571330e6f2d +Block 0030 [ 25]: 12242a0143d83d9a +Block 0030 [ 26]: 067f6bae76476b1f +Block 0030 [ 27]: ab1e017f3b96cf7b +Block 0030 [ 28]: b07114c3fc1b52c3 +Block 0030 [ 29]: d395f25bf240f4cd +Block 0030 [ 30]: 2c4f65c1a5891610 +Block 0030 [ 31]: fd8971a418f37a17 +Block 0030 [ 32]: 59b41782840c6382 +Block 0030 [ 33]: a4609b7937256a85 +Block 0030 [ 34]: 4060a0ad26047191 +Block 0030 [ 35]: d6bb43e24964ce71 +Block 0030 [ 36]: 070744845b3e8c27 +Block 0030 [ 37]: 8a3aced5135b61d5 +Block 0030 [ 38]: 2d361d2aa3d973f6 +Block 0030 [ 39]: f8b7b6450c897249 +Block 0030 [ 40]: c21c5d01c2061db5 +Block 0030 [ 41]: 708ee32963504c80 +Block 0030 [ 42]: e0526f18fa7286fa +Block 0030 [ 43]: 452c1cc6bd2a3df8 +Block 0030 [ 44]: e7ee8913d0dcbe12 +Block 0030 [ 45]: 0d20f9888247400c +Block 0030 [ 46]: c57bb303384000c1 +Block 0030 [ 47]: 8bdbdfd39f23cafd +Block 0030 [ 48]: d3d2db36d3f0bfe9 +Block 0030 [ 49]: 57842c57448b4d21 +Block 0030 [ 50]: 67cccfdc58e9425e +Block 0030 [ 51]: 0a77bcda03f8e7ab +Block 0030 [ 52]: 08162d72f21cd178 +Block 0030 [ 53]: d862f85ef1aad708 +Block 0030 [ 54]: 33a2c7c7302cf000 +Block 0030 [ 55]: 733964f2f7d11f3a +Block 0030 [ 56]: f500fc23d8b85449 +Block 0030 [ 57]: 61de1eb634e3fd8d +Block 0030 [ 58]: fcb8381a3c9cd9b6 +Block 0030 [ 59]: 7017a157f66d15f1 +Block 0030 [ 60]: c64e8b189a954811 +Block 0030 [ 61]: 9ba76d687b94adaf +Block 0030 [ 62]: a6b272e5d92188b8 +Block 0030 [ 63]: 6841fdc815be462f +Block 0030 [ 64]: 1b53ca5fe4da04f9 +Block 0030 [ 65]: d140a9681de7f793 +Block 0030 [ 66]: 2864833625fb709b +Block 0030 [ 67]: 466e842a1e25b9d1 +Block 0030 [ 68]: 6b18539a0e8f361b +Block 0030 [ 69]: bfb3f75745f472ce +Block 0030 [ 70]: 57c2b7c84c8ec029 +Block 0030 [ 71]: 07e8170512cda2eb +Block 0030 [ 72]: 5eb697918e0df23d +Block 0030 [ 73]: a452ae051564b908 +Block 0030 [ 74]: 6de6f313b67d0582 +Block 0030 [ 75]: 134f87167e7c40b2 +Block 0030 [ 76]: eccecc2fe1055b86 +Block 0030 [ 77]: a4ca7026209e9bb1 +Block 0030 [ 78]: 7552964676a78b35 +Block 0030 [ 79]: 7a61cf6633e2fbeb +Block 0030 [ 80]: 784b00f1cbb29afe +Block 0030 [ 81]: 9fcdddd078b1e257 +Block 0030 [ 82]: 00e101054f707c03 +Block 0030 [ 83]: db5adaf60bf2e437 +Block 0030 [ 84]: ef81ffd1dfef4efe +Block 0030 [ 85]: 67485ac05e54166b +Block 0030 [ 86]: f9f051d395efb2ef +Block 0030 [ 87]: 4771eeb1bca6abc0 +Block 0030 [ 88]: 25ed681a049a8932 +Block 0030 [ 89]: 85aa643b1e215974 +Block 0030 [ 90]: b95ce7df5509a035 +Block 0030 [ 91]: dd7ee5ec984e80f7 +Block 0030 [ 92]: b5082241623dec7e +Block 0030 [ 93]: 360e2f0aa5094574 +Block 0030 [ 94]: ecb1e918ba947537 +Block 0030 [ 95]: 4b39a59cf5a4724c +Block 0030 [ 96]: 2c2e27bc2a4aa6cb +Block 0030 [ 97]: daba908b41132d44 +Block 0030 [ 98]: c67199b898cf8033 +Block 0030 [ 99]: 9ea02120498927e8 +Block 0030 [100]: 6f05fdbc9fa3d5b2 +Block 0030 [101]: bb4b7047cfb8b9b5 +Block 0030 [102]: dc3841c0c91928f8 +Block 0030 [103]: 5ecc900dfacc478a +Block 0030 [104]: eb131107b102b5ed +Block 0030 [105]: ef986a212c71b150 +Block 0030 [106]: 8c0346f529d89ff8 +Block 0030 [107]: 15a3dbebdffac0ef +Block 0030 [108]: 23b8ff1afadba569 +Block 0030 [109]: cec9a5bcfeb89a9d +Block 0030 [110]: dfa3a9eab4e56646 +Block 0030 [111]: 6f249dbe4936c946 +Block 0030 [112]: 7cd49a60875ff3b8 +Block 0030 [113]: 456f7d13c3c46c7d +Block 0030 [114]: 06f3cd65d03cb442 +Block 0030 [115]: 2304f587a79164fb +Block 0030 [116]: fa9507f37257dd34 +Block 0030 [117]: e436215a2968e923 +Block 0030 [118]: fadb5d64c644c1f0 +Block 0030 [119]: 6586ddb3ac4ec704 +Block 0030 [120]: c259fb75e774f567 +Block 0030 [121]: 9c6f25ac91097ef7 +Block 0030 [122]: 53a3aa7b117fd8d2 +Block 0030 [123]: a222c5dbfcea5b17 +Block 0030 [124]: f5c7264e4298f7dd +Block 0030 [125]: e42b8aab71526f4c +Block 0030 [126]: 36a06cedca259e6e +Block 0030 [127]: 7d4c74d40f6cf9b1 +Block 0031 [ 0]: 23096d324bc688ac +Block 0031 [ 1]: aaaf0d73fe233abf +Block 0031 [ 2]: 45deb0feb5cfe89f +Block 0031 [ 3]: e75e8591c13fa1c1 +Block 0031 [ 4]: 58fc4134fad92e02 +Block 0031 [ 5]: 5db26a376b615c02 +Block 0031 [ 6]: da053b431ef56ee5 +Block 0031 [ 7]: 6441eaa8d6f4b63b +Block 0031 [ 8]: e505203c43439709 +Block 0031 [ 9]: 6cc836cf5a1d4dd4 +Block 0031 [ 10]: 035f77a001795210 +Block 0031 [ 11]: f7d84a712a0be8c6 +Block 0031 [ 12]: 6374683fe43aafb2 +Block 0031 [ 13]: 79b63ad8b92922bc +Block 0031 [ 14]: c406f248eabf2717 +Block 0031 [ 15]: 575a5c692ab42804 +Block 0031 [ 16]: c6d10060a1cd2621 +Block 0031 [ 17]: 92da1e6618e11b43 +Block 0031 [ 18]: b523f610826573ec +Block 0031 [ 19]: 91647f861a1b738d +Block 0031 [ 20]: 53b2d479aecaeac9 +Block 0031 [ 21]: d718fdfb5f58610d +Block 0031 [ 22]: 093838aa5ff089da +Block 0031 [ 23]: 38372e3db58bffd4 +Block 0031 [ 24]: 8d378223cde74bd9 +Block 0031 [ 25]: b88babf6be9b7885 +Block 0031 [ 26]: 37798d42f3b741e5 +Block 0031 [ 27]: 617dd90119c8ed1e +Block 0031 [ 28]: f16f7f20516e2a35 +Block 0031 [ 29]: c93603426642baa6 +Block 0031 [ 30]: 146abacd69d959f5 +Block 0031 [ 31]: c4247f51d67c6cbd +Block 0031 [ 32]: c0510ff3c43f68a4 +Block 0031 [ 33]: d52b68f374ae3d9a +Block 0031 [ 34]: e5939a3a19bd722d +Block 0031 [ 35]: d5290857364573f0 +Block 0031 [ 36]: 17aa070d61e5c302 +Block 0031 [ 37]: 1f37f8771382a8b5 +Block 0031 [ 38]: 9732439f2585d52c +Block 0031 [ 39]: cb0ff8ecf1a64368 +Block 0031 [ 40]: 6b3aa8cb0652f1d3 +Block 0031 [ 41]: bc79601df3ef67fd +Block 0031 [ 42]: 21a77f1daa776047 +Block 0031 [ 43]: 60f67b8268745ff7 +Block 0031 [ 44]: 6461989778c5c365 +Block 0031 [ 45]: f66c239e51ace489 +Block 0031 [ 46]: 1f4215447e8b95c5 +Block 0031 [ 47]: fda49d068c4cca64 +Block 0031 [ 48]: b82ecf8e54b7be06 +Block 0031 [ 49]: ca622a0f405ecce9 +Block 0031 [ 50]: 486f841dff09d069 +Block 0031 [ 51]: 630e220de62c44b8 +Block 0031 [ 52]: dcd5e3d43775f5c0 +Block 0031 [ 53]: f51e1db1beb85f5d +Block 0031 [ 54]: 9bebcb6211ea1418 +Block 0031 [ 55]: 27c12b98ab0cde15 +Block 0031 [ 56]: 577c8483cefbe03a +Block 0031 [ 57]: f18162e7dfe1fa28 +Block 0031 [ 58]: 4550ae5a14910ef5 +Block 0031 [ 59]: 68c17796c3e18462 +Block 0031 [ 60]: ce3f1bc4d8ca6ea0 +Block 0031 [ 61]: 0a7f6c8713171bf4 +Block 0031 [ 62]: 49db8e353dbc6c63 +Block 0031 [ 63]: 3c1b03bcbf973b61 +Block 0031 [ 64]: 50b73b5a2be2d01a +Block 0031 [ 65]: cad103e62cd424b7 +Block 0031 [ 66]: b63bb94a03e96b94 +Block 0031 [ 67]: 3dce33f43571b63b +Block 0031 [ 68]: 8991efdcd68b1881 +Block 0031 [ 69]: 7991bec920dc2513 +Block 0031 [ 70]: 543bd896a0aec32a +Block 0031 [ 71]: 31975407e35ffbda +Block 0031 [ 72]: 91bf1882d9f04f82 +Block 0031 [ 73]: 915b49ba75abd738 +Block 0031 [ 74]: c14e94a2903fb3dd +Block 0031 [ 75]: 8dd6532f78147d7f +Block 0031 [ 76]: 0451fc2ab0afb3fb +Block 0031 [ 77]: cca805260a94a9f1 +Block 0031 [ 78]: 9d2e561caf0bfae7 +Block 0031 [ 79]: cb48e4c034cb2f70 +Block 0031 [ 80]: e6296174922c963e +Block 0031 [ 81]: bc32fcbb313624c7 +Block 0031 [ 82]: 75c4a636f8acf6cb +Block 0031 [ 83]: 4ad9dd3db09f06c8 +Block 0031 [ 84]: 50edd6878814ca57 +Block 0031 [ 85]: 5bfe1ff263a3ae46 +Block 0031 [ 86]: 68ee772f72f6c8b2 +Block 0031 [ 87]: 9735d4d4522038cb +Block 0031 [ 88]: 6c8b146a8e5bd46e +Block 0031 [ 89]: 786f50b346deed51 +Block 0031 [ 90]: 01b34a7881702460 +Block 0031 [ 91]: 062f20d6acb3e8df +Block 0031 [ 92]: 906c1d926d2fd7ca +Block 0031 [ 93]: e1101e03b5f2f535 +Block 0031 [ 94]: 489144da468edbe4 +Block 0031 [ 95]: 7c69834cb26f3591 +Block 0031 [ 96]: fe71ee9f1eda2fa8 +Block 0031 [ 97]: f686a8a9f320c81d +Block 0031 [ 98]: 0f36ac84e3b1ab3a +Block 0031 [ 99]: 62c84899bff9c8ea +Block 0031 [100]: ab6c693fd5812652 +Block 0031 [101]: 2490c249e4bdc896 +Block 0031 [102]: 90165b9d7707d15d +Block 0031 [103]: 602089074e333b10 +Block 0031 [104]: cfeeb42b75b826f2 +Block 0031 [105]: 25df5eb36f0fcbe6 +Block 0031 [106]: 6c610a78e7e2c121 +Block 0031 [107]: ba9ef75c8b1ab051 +Block 0031 [108]: 751580ae24ffafff +Block 0031 [109]: 796d75c2626f151e +Block 0031 [110]: 51a674f9cd60f453 +Block 0031 [111]: 4092b7a9db825e4b +Block 0031 [112]: 03b892952b3a6783 +Block 0031 [113]: 984f1224c15e46d3 +Block 0031 [114]: 577f3987e96bc50a +Block 0031 [115]: 48c651195cc2f54a +Block 0031 [116]: a188e49cafffb66b +Block 0031 [117]: de2fe79179d0d038 +Block 0031 [118]: 752817094fda94c8 +Block 0031 [119]: ee7fc1aebfdf6676 +Block 0031 [120]: 9ef3229e4a43bc12 +Block 0031 [121]: 4ed60db4a70c9ebc +Block 0031 [122]: ca210a90d1e7b1d5 +Block 0031 [123]: e4ac7e478e4c5742 +Block 0031 [124]: e6495ff396d8363d +Block 0031 [125]: 6ff03b334458fbbe +Block 0031 [126]: 9837e423a5dfa741 +Block 0031 [127]: 047d44015a325363 + + After pass 1: +Block 0000 [ 0]: e3fb2e268f900f66 +Block 0000 [ 1]: 7439378a0a6639f2 +Block 0000 [ 2]: c20177f77b9e57f7 +Block 0000 [ 3]: 62d1c2f3b177e775 +Block 0000 [ 4]: 010b430eca211c55 +Block 0000 [ 5]: 581f6b73beb358a2 +Block 0000 [ 6]: de4531f2d3e9e765 +Block 0000 [ 7]: 354d361204880bc4 +Block 0000 [ 8]: 60f45d3ec3e81426 +Block 0000 [ 9]: 59d1b09beef4315c +Block 0000 [ 10]: 4c32367f94014002 +Block 0000 [ 11]: c62f23749953a777 +Block 0000 [ 12]: 96ba213b1c87add4 +Block 0000 [ 13]: 9d4a8c5f9f9979bf +Block 0000 [ 14]: ceba387fd3bf3ce8 +Block 0000 [ 15]: dcb091e26fdcb1fe +Block 0000 [ 16]: 40c140ea86068435 +Block 0000 [ 17]: 6da8a0c2a2c9f431 +Block 0000 [ 18]: 354901ef32128b87 +Block 0000 [ 19]: d46f9eb89dad9f84 +Block 0000 [ 20]: 1fcc3f60149dc112 +Block 0000 [ 21]: 2a341f1c1dc3af46 +Block 0000 [ 22]: 22659f2bfd353eeb +Block 0000 [ 23]: 4d6d28963f38a164 +Block 0000 [ 24]: df5d69f9d0b40c13 +Block 0000 [ 25]: 89abf69974dd6c09 +Block 0000 [ 26]: a46625c20113d827 +Block 0000 [ 27]: 6f65f7f4457eea4b +Block 0000 [ 28]: 4a2166aeb2c13701 +Block 0000 [ 29]: cc33af554ce1f9d5 +Block 0000 [ 30]: 2af8f0a4ab422f82 +Block 0000 [ 31]: 1471f3986be1318e +Block 0000 [ 32]: c189f6ad217e1902 +Block 0000 [ 33]: a4025f02c6f24e1b +Block 0000 [ 34]: 000270894020bf40 +Block 0000 [ 35]: ac654c608f7f6b1a +Block 0000 [ 36]: e890c2c953eb6cff +Block 0000 [ 37]: f70fd27b375d00c9 +Block 0000 [ 38]: f818fd8309282f55 +Block 0000 [ 39]: 0f82560ec9db8484 +Block 0000 [ 40]: 2fadca952c97e08d +Block 0000 [ 41]: 560503e18158235b +Block 0000 [ 42]: 8f75cedfa48eae2c +Block 0000 [ 43]: b0c0ba0f37f28d8c +Block 0000 [ 44]: 0ab11a787093b7c8 +Block 0000 [ 45]: 4ae894919c99adfd +Block 0000 [ 46]: b9438539887c129e +Block 0000 [ 47]: 652052807b9b929e +Block 0000 [ 48]: 1030a36998d8fc43 +Block 0000 [ 49]: 0d78648b147fc3fb +Block 0000 [ 50]: a3935a0d4d807f6b +Block 0000 [ 51]: 18322a1a3359986f +Block 0000 [ 52]: 39a4740b865a74d9 +Block 0000 [ 53]: efa0e864a84dbda3 +Block 0000 [ 54]: e2f7ea75d1373e2f +Block 0000 [ 55]: 52f49da5261114b3 +Block 0000 [ 56]: 6a9f76e97f268ed1 +Block 0000 [ 57]: 43b853a2d338a8a0 +Block 0000 [ 58]: e1ae6a0bd807180b +Block 0000 [ 59]: 01040029cc767661 +Block 0000 [ 60]: 5e58e78ee50a1767 +Block 0000 [ 61]: 57ec24216fc63ed8 +Block 0000 [ 62]: 80a49c3f22fdd85d +Block 0000 [ 63]: d5d0e4eead2e4ef1 +Block 0000 [ 64]: d90cd2dea871320e +Block 0000 [ 65]: 4898d8ab95cc1eac +Block 0000 [ 66]: b2526ee0ecd1b7c3 +Block 0000 [ 67]: 3f1304f97e40d1fd +Block 0000 [ 68]: 4fe7f903ccd50fc7 +Block 0000 [ 69]: b09f1e4534a2b086 +Block 0000 [ 70]: 15b2d783fef56d65 +Block 0000 [ 71]: 623b233f45b78357 +Block 0000 [ 72]: 222b8328857cbbf3 +Block 0000 [ 73]: 9e8b591e3ddc674b +Block 0000 [ 74]: 9d5f9c1175d3cfac +Block 0000 [ 75]: cdfed2479475ff0f +Block 0000 [ 76]: 578303162fa2fd68 +Block 0000 [ 77]: abdff1e5a90040df +Block 0000 [ 78]: 8bdf145f562c9439 +Block 0000 [ 79]: 6fdd6ee3687d0755 +Block 0000 [ 80]: e79896384171ce2c +Block 0000 [ 81]: 5fe7b604f2342731 +Block 0000 [ 82]: ce9aaeb79e334ae3 +Block 0000 [ 83]: ff7393ad8d8452ab +Block 0000 [ 84]: 1340d485daddd017 +Block 0000 [ 85]: 9f5e61eb20c73f56 +Block 0000 [ 86]: 12708fe8ee89f971 +Block 0000 [ 87]: 83e57ca3b90fd30d +Block 0000 [ 88]: 57bd5a009e893c1a +Block 0000 [ 89]: e8a2427f400a6b68 +Block 0000 [ 90]: 1864104374f0922c +Block 0000 [ 91]: 3a07637c208d2efe +Block 0000 [ 92]: 621a846dcbfb1ced +Block 0000 [ 93]: 533f537dd33899fb +Block 0000 [ 94]: 56054d47bd2bf2bc +Block 0000 [ 95]: bd5da1e233daecba +Block 0000 [ 96]: c828f6e61986518c +Block 0000 [ 97]: f776e421d7691707 +Block 0000 [ 98]: dd4d1701c47721a0 +Block 0000 [ 99]: ef2a67d69b2090a4 +Block 0000 [100]: 0e48ac99d7796b67 +Block 0000 [101]: 6f35548fd9821251 +Block 0000 [102]: e360107576a231e4 +Block 0000 [103]: 85b6afa7a07e8f2e +Block 0000 [104]: 80df552826894974 +Block 0000 [105]: 85fb118f9f9acbca +Block 0000 [106]: f9e6526764ae5abc +Block 0000 [107]: 3166d902c90b73ab +Block 0000 [108]: 2db764f075d97191 +Block 0000 [109]: 91bb8e6002bcdd69 +Block 0000 [110]: 3b4bd48482fc18a0 +Block 0000 [111]: 1964e27d7b517411 +Block 0000 [112]: 04bce2ee1a2ae0fb +Block 0000 [113]: c8b55cdb33615758 +Block 0000 [114]: 5571d3cf275d9e9a +Block 0000 [115]: eb7dc587cf0ba5c3 +Block 0000 [116]: f42371866a0ba059 +Block 0000 [117]: a0096158492b1118 +Block 0000 [118]: d5fbd8925fbca58a +Block 0000 [119]: bc448b96f2f5d0f8 +Block 0000 [120]: 017a72102e722138 +Block 0000 [121]: 8eef302392d4e786 +Block 0000 [122]: 8ecde5ec0f48c234 +Block 0000 [123]: 8484b051cf5d7390 +Block 0000 [124]: 341edf1f8ce7f000 +Block 0000 [125]: 20997c56a8c10e85 +Block 0000 [126]: 23b51c14aa856b3e +Block 0000 [127]: 46e559dac5ea41be +Block 0001 [ 0]: 1d46a5b2e77de72b +Block 0001 [ 1]: ee043289f4d0831d +Block 0001 [ 2]: 1a413147f5e3b9f7 +Block 0001 [ 3]: 137f3aef8602d2f1 +Block 0001 [ 4]: d454d1ffa74dc5fb +Block 0001 [ 5]: 828cda6b79135058 +Block 0001 [ 6]: 278f3ea96a5cd853 +Block 0001 [ 7]: afdb583dd84a8191 +Block 0001 [ 8]: 1642eb90bbf75ac2 +Block 0001 [ 9]: 3b841aa72f245bda +Block 0001 [ 10]: f3b6ce618684abd1 +Block 0001 [ 11]: d9111cea61e82f2c +Block 0001 [ 12]: b00bc3cfc9f3e0ec +Block 0001 [ 13]: 13e0841f678146d0 +Block 0001 [ 14]: 87344022a6314341 +Block 0001 [ 15]: 16ebe5bbda788f2c +Block 0001 [ 16]: f31897fc7711373d +Block 0001 [ 17]: 95646b8a01c39e6d +Block 0001 [ 18]: 9978b1566a604df2 +Block 0001 [ 19]: 28e3b9275aa1cb95 +Block 0001 [ 20]: fbe7b8cd882db34e +Block 0001 [ 21]: 68db9956b0687fd5 +Block 0001 [ 22]: e3a130ad0550deb5 +Block 0001 [ 23]: 48816eecc8abd94a +Block 0001 [ 24]: 7d6fc00b6ba0c2bf +Block 0001 [ 25]: 2f4472d95cf686fe +Block 0001 [ 26]: 327f0b645db59ab9 +Block 0001 [ 27]: 829296ca1a22fc08 +Block 0001 [ 28]: 0f0a79cdf903f2e8 +Block 0001 [ 29]: 6c332ecad39a87bd +Block 0001 [ 30]: 1e260f565f5989b7 +Block 0001 [ 31]: d5a1473dbe2d0aa2 +Block 0001 [ 32]: 096a921679ba2dd1 +Block 0001 [ 33]: 7619e7d77c9d01bb +Block 0001 [ 34]: 3b56411b799de6e2 +Block 0001 [ 35]: c949efaa5d0a4df2 +Block 0001 [ 36]: e53adb20842f3ca6 +Block 0001 [ 37]: 136521fd46a4acb8 +Block 0001 [ 38]: 8197cfc0a1fcf52f +Block 0001 [ 39]: 311a717a05a453f1 +Block 0001 [ 40]: f1fefcc0c061303e +Block 0001 [ 41]: f847097f596a3f8e +Block 0001 [ 42]: f194b08886ac3cad +Block 0001 [ 43]: a9246165ca378831 +Block 0001 [ 44]: 8ac25ee4ae34f610 +Block 0001 [ 45]: 33df3ba56469a9ea +Block 0001 [ 46]: 9eee7810a9d70864 +Block 0001 [ 47]: 6c75b1e152236a92 +Block 0001 [ 48]: 752235f00bb5c903 +Block 0001 [ 49]: f164925c2a7be36c +Block 0001 [ 50]: 2da1e30108fc8fb4 +Block 0001 [ 51]: 6c3771e335d6017a +Block 0001 [ 52]: cf4b88a58975d2be +Block 0001 [ 53]: a88c5459281f39b1 +Block 0001 [ 54]: 60905f0a77168ee8 +Block 0001 [ 55]: f94282bf2a421210 +Block 0001 [ 56]: fc76fc1fc2f01720 +Block 0001 [ 57]: 6da2751d9852faed +Block 0001 [ 58]: 986d26816864de3d +Block 0001 [ 59]: c553f05019d4a321 +Block 0001 [ 60]: 68c6e60d0a99ebf5 +Block 0001 [ 61]: 57b8d0f980f32975 +Block 0001 [ 62]: dcf1a931b0a4d91a +Block 0001 [ 63]: b524327c5a6cba95 +Block 0001 [ 64]: 0177bc3461dae88d +Block 0001 [ 65]: 06334cd19b2360ff +Block 0001 [ 66]: b4c95ce9ae0a4f33 +Block 0001 [ 67]: d7db629a31078d2d +Block 0001 [ 68]: 7d5508fc240cfafa +Block 0001 [ 69]: f1ac892f9fca325b +Block 0001 [ 70]: 4ac67ba91de337bb +Block 0001 [ 71]: b585e1542b744ef2 +Block 0001 [ 72]: a5ec9f043faa061b +Block 0001 [ 73]: 9f14c405dcc67e3d +Block 0001 [ 74]: fc1a0455604f4d26 +Block 0001 [ 75]: 6e47c36365efe9dc +Block 0001 [ 76]: 72c7224932bb6a4c +Block 0001 [ 77]: 88cccd6e1051059c +Block 0001 [ 78]: a2af3bfda6893035 +Block 0001 [ 79]: e2661142356aa6df +Block 0001 [ 80]: 7fc859e8fb9fc4c5 +Block 0001 [ 81]: e01830977c1c69cd +Block 0001 [ 82]: bdc1fbb0acfc8c68 +Block 0001 [ 83]: c4de467177585060 +Block 0001 [ 84]: fb0eb9f25baeaa8d +Block 0001 [ 85]: 5543c3b2d23a6aaf +Block 0001 [ 86]: fc5364f361affef3 +Block 0001 [ 87]: 2661b6ec9e3e81df +Block 0001 [ 88]: 159eb8a3dbaa5544 +Block 0001 [ 89]: 832e5850eff81dc6 +Block 0001 [ 90]: dfb275dfc14906d6 +Block 0001 [ 91]: 5750dd06ccfc208d +Block 0001 [ 92]: 9d11f0f4f89bdf02 +Block 0001 [ 93]: 01e7694ed5472b3f +Block 0001 [ 94]: 4324d37e2bfbf8e5 +Block 0001 [ 95]: 8521c6316b93ac44 +Block 0001 [ 96]: 98dc479af8e8a9f2 +Block 0001 [ 97]: d2f8f5aad51138b3 +Block 0001 [ 98]: 58726306640d6589 +Block 0001 [ 99]: 5c4ecb3b0d6b62ec +Block 0001 [100]: 8945f8442b28eb03 +Block 0001 [101]: 524b58de58beaaa5 +Block 0001 [102]: 9c56af0137be0cbf +Block 0001 [103]: ef5fbe2d37f124fe +Block 0001 [104]: d6e3bc8059623ca4 +Block 0001 [105]: b0de22803b1601f5 +Block 0001 [106]: 5c315b2b993bb075 +Block 0001 [107]: b384762e9a33032d +Block 0001 [108]: 0ef7659cc86a507c +Block 0001 [109]: 3955126c3bd9622f +Block 0001 [110]: 135f29240906f1f4 +Block 0001 [111]: 5075234a142090cd +Block 0001 [112]: 8a8be6391efa19fc +Block 0001 [113]: a7a10c3e7ff74a32 +Block 0001 [114]: 5c2627796eff60c7 +Block 0001 [115]: 821550147aa89280 +Block 0001 [116]: be80b9eb6aabadea +Block 0001 [117]: 798d50a096ea77ab +Block 0001 [118]: dcce0f3961cfb9a3 +Block 0001 [119]: 0acc89da98f8679a +Block 0001 [120]: 57f813a9c5319e77 +Block 0001 [121]: f59343cd09f18438 +Block 0001 [122]: 027826810b9e9474 +Block 0001 [123]: b0b30ee45fc4a37c +Block 0001 [124]: 67634e6f8a5f6fc5 +Block 0001 [125]: 78d288209655dfea +Block 0001 [126]: 5def1a47dc8ca912 +Block 0001 [127]: cb8baddc01104603 +Block 0002 [ 0]: b4f32766fc2fb715 +Block 0002 [ 1]: b4be7123402136f7 +Block 0002 [ 2]: 76c140b72f75b567 +Block 0002 [ 3]: 3ddae7ab29a3f6b0 +Block 0002 [ 4]: da2ef6fd1cb4794a +Block 0002 [ 5]: 07df94d5ee2a521d +Block 0002 [ 6]: f25b5953f3000e6a +Block 0002 [ 7]: dbbee6dfb89a14b2 +Block 0002 [ 8]: 0b8316e5ed48a90b +Block 0002 [ 9]: 1581355e70cc9236 +Block 0002 [ 10]: afbd73fed4169592 +Block 0002 [ 11]: 9ff78789ddd91d69 +Block 0002 [ 12]: 96c564bc213dfe7d +Block 0002 [ 13]: 112d0463dc156aee +Block 0002 [ 14]: 6527a1ad0c92b02e +Block 0002 [ 15]: ad9c72af7b646823 +Block 0002 [ 16]: 5ea4b9e339b1d704 +Block 0002 [ 17]: 3979e9bea09cd602 +Block 0002 [ 18]: 4723715624125911 +Block 0002 [ 19]: b5df880742867f2e +Block 0002 [ 20]: c108f080d30b96ae +Block 0002 [ 21]: a8561bf92ae22acb +Block 0002 [ 22]: 6f308a25cb4f44d0 +Block 0002 [ 23]: 49210f1bf5f858c5 +Block 0002 [ 24]: 103369041f7680e8 +Block 0002 [ 25]: 25d0b08974d86a6b +Block 0002 [ 26]: 7bbf1e22d47e3d65 +Block 0002 [ 27]: 05fe020bbba43726 +Block 0002 [ 28]: 93e03d5983cef0e7 +Block 0002 [ 29]: 114d01ffcecdeb5b +Block 0002 [ 30]: f919d06131c10a1e +Block 0002 [ 31]: a22840ab2762cbc3 +Block 0002 [ 32]: 097d11bec1f7cbc6 +Block 0002 [ 33]: d52cecc28a335714 +Block 0002 [ 34]: 63122b395c488511 +Block 0002 [ 35]: 64472a45b661ef38 +Block 0002 [ 36]: ea07ed5de91005d4 +Block 0002 [ 37]: 33c0d9c1cc815745 +Block 0002 [ 38]: 0b2e7b3981120872 +Block 0002 [ 39]: 732b2581fd570e0f +Block 0002 [ 40]: c8695bf549790cb4 +Block 0002 [ 41]: 8df10d022cd4fd88 +Block 0002 [ 42]: 995ff789a7cb6b50 +Block 0002 [ 43]: 70cf63fd75857b7a +Block 0002 [ 44]: 4f555cef13ca0d28 +Block 0002 [ 45]: 17d3047d6d033515 +Block 0002 [ 46]: 6c5ae23de1db47ac +Block 0002 [ 47]: 625eb5cc235887a0 +Block 0002 [ 48]: 73af705d95f9cf8d +Block 0002 [ 49]: 1ac7e7701ba27dca +Block 0002 [ 50]: c4843a320e7b9fc6 +Block 0002 [ 51]: 3f25a42a594fa429 +Block 0002 [ 52]: 55f42396f1bf059c +Block 0002 [ 53]: 0e8cd0250b6d8625 +Block 0002 [ 54]: 0f2258ea9f4861cf +Block 0002 [ 55]: 681355aa8627bdb8 +Block 0002 [ 56]: ad29e95503aa1771 +Block 0002 [ 57]: 94a9f6879c452369 +Block 0002 [ 58]: 149cb980146efa30 +Block 0002 [ 59]: 602a44afe93a9f5f +Block 0002 [ 60]: fd14465f4f512e10 +Block 0002 [ 61]: 3413ec3ca9fdb30b +Block 0002 [ 62]: 8427afaf7ab98367 +Block 0002 [ 63]: 434e9e4d896635f2 +Block 0002 [ 64]: e4eb02c319e2ead2 +Block 0002 [ 65]: 448e0fafa49c93ff +Block 0002 [ 66]: 8726e904d7e8f0f6 +Block 0002 [ 67]: 73ae51697f0ab4f8 +Block 0002 [ 68]: 5142c819e36f773e +Block 0002 [ 69]: 7f5a2d32df8d53a1 +Block 0002 [ 70]: cc2846c871a2889c +Block 0002 [ 71]: 6e2b8567fea69da2 +Block 0002 [ 72]: 91100438361d9622 +Block 0002 [ 73]: 4cb71cf58ceaf767 +Block 0002 [ 74]: fe8a9955a43595eb +Block 0002 [ 75]: b97e39ed024a43c8 +Block 0002 [ 76]: 4d6414f34e9caffa +Block 0002 [ 77]: 5b5bed31c60830e3 +Block 0002 [ 78]: cf165fb09f73fb04 +Block 0002 [ 79]: 17abd5f9f889a471 +Block 0002 [ 80]: c6f73bf10ba51c54 +Block 0002 [ 81]: 65da4391f68a8e02 +Block 0002 [ 82]: 67bf0346f3d53a10 +Block 0002 [ 83]: 77f940e9eb97d2d4 +Block 0002 [ 84]: 605974ad27989635 +Block 0002 [ 85]: 21b0ec7eaedf7a33 +Block 0002 [ 86]: 88eb7335366fb318 +Block 0002 [ 87]: b73c625a6339d2b3 +Block 0002 [ 88]: 5c8dc992d77e8e90 +Block 0002 [ 89]: d50c7a303def9f09 +Block 0002 [ 90]: 1b199eb77a37ac69 +Block 0002 [ 91]: 31b378bdafeeb51a +Block 0002 [ 92]: 2023a7c7e4f019d6 +Block 0002 [ 93]: cd3b1c43efd5849b +Block 0002 [ 94]: f021ebf3bfa3b6c6 +Block 0002 [ 95]: 83626e46f7f59e0d +Block 0002 [ 96]: f883913b9ae4b67a +Block 0002 [ 97]: 10327dd93721f1cd +Block 0002 [ 98]: 16921c8fa5cefadc +Block 0002 [ 99]: 6e26e0a2bbdcbc3e +Block 0002 [100]: 725dfa6d9c0bc5b5 +Block 0002 [101]: 1b650e997b82bcd8 +Block 0002 [102]: 968189d7fb58b109 +Block 0002 [103]: e2f3a2b6dddf70f4 +Block 0002 [104]: 05417319b93fbce2 +Block 0002 [105]: 715b3caa09ba64a4 +Block 0002 [106]: 5ad3b9ea8304a1ff +Block 0002 [107]: da2ab3d41e9ad55c +Block 0002 [108]: 14a0134d456f6a5e +Block 0002 [109]: aa1a634770dd5c11 +Block 0002 [110]: 49affc08d9c2903b +Block 0002 [111]: 48b0f1a6ae6b2d1d +Block 0002 [112]: 768313caff151bef +Block 0002 [113]: ecbc63fec84ea4ca +Block 0002 [114]: b4577151fb984765 +Block 0002 [115]: d2d1985874cb658d +Block 0002 [116]: bc43a0591a20cd5f +Block 0002 [117]: 592a7265947f118d +Block 0002 [118]: 0993d95f533614b8 +Block 0002 [119]: d8fb1f2db0ba6cf1 +Block 0002 [120]: 1e272a1ceb9723d2 +Block 0002 [121]: 7e8d79d8729e9b85 +Block 0002 [122]: 11a54d8443ef30ef +Block 0002 [123]: 13ebd278cf6408d0 +Block 0002 [124]: 0cb0c6f9c1c0e050 +Block 0002 [125]: 79a3979f69f9b011 +Block 0002 [126]: d9766dc5dc6a6d28 +Block 0002 [127]: 5dff30db21f8d34b +Block 0003 [ 0]: 5c0e8eb2ac341116 +Block 0003 [ 1]: d6cbfe9db820a7e5 +Block 0003 [ 2]: 88492690bb5b492f +Block 0003 [ 3]: 575b925dbc5bdd67 +Block 0003 [ 4]: ae23b16af730b3fb +Block 0003 [ 5]: 4061245bdf3d1d82 +Block 0003 [ 6]: bfe1c0711a35e1fb +Block 0003 [ 7]: 7c9e1bef0badaa6f +Block 0003 [ 8]: 88577520aff0bb2f +Block 0003 [ 9]: 7acf6df13b05aac3 +Block 0003 [ 10]: 623a024f7e05b7fe +Block 0003 [ 11]: 34df9986d84cba1a +Block 0003 [ 12]: 5891c7d8f9ad674a +Block 0003 [ 13]: 32bb68644f3f58c7 +Block 0003 [ 14]: 193a98d182752695 +Block 0003 [ 15]: 7348c6bb53017adb +Block 0003 [ 16]: a88c1149dda47535 +Block 0003 [ 17]: 809e8ecfc2c5cd1c +Block 0003 [ 18]: 7d1aeb5921a12730 +Block 0003 [ 19]: 088ff3b306bc7c7f +Block 0003 [ 20]: 61528227a0238c93 +Block 0003 [ 21]: 70cfaec7557e33b7 +Block 0003 [ 22]: f6b2d0f57f22ad1e +Block 0003 [ 23]: 788ad5922ecef9eb +Block 0003 [ 24]: 33cbd46c228be5d4 +Block 0003 [ 25]: a93f311e2b4b75c9 +Block 0003 [ 26]: 484459669692d78c +Block 0003 [ 27]: 541c85a4417d9430 +Block 0003 [ 28]: 72d61a7a6b6d38bd +Block 0003 [ 29]: e0361f44eda3b596 +Block 0003 [ 30]: 692540b77b35ebef +Block 0003 [ 31]: 76b1bf917b94fa09 +Block 0003 [ 32]: eb5172026b59e31c +Block 0003 [ 33]: b76d44dd4831053e +Block 0003 [ 34]: d7c26331cb64f3ba +Block 0003 [ 35]: d95df2282cb8145c +Block 0003 [ 36]: 2c762e95be0804b2 +Block 0003 [ 37]: 3b88edbe0e2d4479 +Block 0003 [ 38]: ed5d75dc5a5c0c96 +Block 0003 [ 39]: 8ddcccf638269fa1 +Block 0003 [ 40]: ef30ba9ec1903bcd +Block 0003 [ 41]: 7889f9abfdc37681 +Block 0003 [ 42]: 2b5df0abfa9b20f0 +Block 0003 [ 43]: a4e7f0b03ca55b8f +Block 0003 [ 44]: 68ee4e5ed9fe7b3f +Block 0003 [ 45]: ff112f684abee477 +Block 0003 [ 46]: 92b431d39e2a5763 +Block 0003 [ 47]: e8e36d6f8ee809c1 +Block 0003 [ 48]: d0237005b70919ef +Block 0003 [ 49]: 9957f98730d4b330 +Block 0003 [ 50]: 8d18db3c306a60ef +Block 0003 [ 51]: 6d2162fb5f2a8aac +Block 0003 [ 52]: 78993074cf0cb196 +Block 0003 [ 53]: 6d78ef0d260570da +Block 0003 [ 54]: c90be290f0c0db9a +Block 0003 [ 55]: e48d40d1222f1f75 +Block 0003 [ 56]: f1b0f25d7bae9f64 +Block 0003 [ 57]: b1d85163880e9e9c +Block 0003 [ 58]: 248f2f66c9bd3bf4 +Block 0003 [ 59]: 2db350fc6b31ff01 +Block 0003 [ 60]: 72c42963f8f7b1a3 +Block 0003 [ 61]: ce4692fb8577a860 +Block 0003 [ 62]: e8acb2712ccc1ac1 +Block 0003 [ 63]: e9e0055b9eb7d5b0 +Block 0003 [ 64]: c542863e636709ff +Block 0003 [ 65]: 208b57f939fa9149 +Block 0003 [ 66]: eeaecbacd2d723f3 +Block 0003 [ 67]: 2dd1762f5f3a4599 +Block 0003 [ 68]: a0b5bd72118eff35 +Block 0003 [ 69]: 87872e604d5acaf7 +Block 0003 [ 70]: 9d8df3f9ac5fac10 +Block 0003 [ 71]: 38ab8f0728f28d9f +Block 0003 [ 72]: bb869f5c8685f822 +Block 0003 [ 73]: 3cc84bfa15771927 +Block 0003 [ 74]: b33d955eb5058f87 +Block 0003 [ 75]: 50c5a14edb21eda3 +Block 0003 [ 76]: d0f8e0798baa0b9e +Block 0003 [ 77]: ffc370f5bce3ae00 +Block 0003 [ 78]: c7c8d7aeff8c896a +Block 0003 [ 79]: afc9c0f4d2bf5a7e +Block 0003 [ 80]: 180a72ef88468cb6 +Block 0003 [ 81]: 325d27bcb46aad62 +Block 0003 [ 82]: 6eae39a4e3d0412c +Block 0003 [ 83]: 7563b8c1117a5e34 +Block 0003 [ 84]: 3256ecedd245c3b6 +Block 0003 [ 85]: b9dad1a682af2e64 +Block 0003 [ 86]: 3be5053f516bd861 +Block 0003 [ 87]: 8f5580350b1f1212 +Block 0003 [ 88]: 3a5ccfa24b2ebe57 +Block 0003 [ 89]: 8fb6a522f6840c70 +Block 0003 [ 90]: 5f489838feb925d6 +Block 0003 [ 91]: ebf8889f46a7b1c3 +Block 0003 [ 92]: 7af558e63b7fdad4 +Block 0003 [ 93]: cb28e374292c5329 +Block 0003 [ 94]: 3e4d57c7c3c5138b +Block 0003 [ 95]: 3fb472e35ef05d18 +Block 0003 [ 96]: 4cc10388414f7b2e +Block 0003 [ 97]: 8d8911921bd3a077 +Block 0003 [ 98]: 8d8e0f8cabe24271 +Block 0003 [ 99]: 321a7ed80bacd083 +Block 0003 [100]: 08b6e452b7cb9101 +Block 0003 [101]: bf7529ac1a982911 +Block 0003 [102]: 189ec2106b3b9e2f +Block 0003 [103]: 4548441cb8bb8c67 +Block 0003 [104]: b64d0428974aefac +Block 0003 [105]: 4cac530a3a32b006 +Block 0003 [106]: 5d423e10b4b3083c +Block 0003 [107]: 2e1761749687ae73 +Block 0003 [108]: 340f9d62fb353269 +Block 0003 [109]: d3e4357d05a5b5b7 +Block 0003 [110]: 3ee8e727877f459a +Block 0003 [111]: 86ee8a747f8c4c60 +Block 0003 [112]: c47587b82dc2ce57 +Block 0003 [113]: 59a52a6228b02fe8 +Block 0003 [114]: 6cdd8f8ef8169bd6 +Block 0003 [115]: 532e68c714326200 +Block 0003 [116]: 622f1cf40a3a2cb9 +Block 0003 [117]: 2bae9b42f187e06f +Block 0003 [118]: 8cd5bfae2e4c553a +Block 0003 [119]: c50e498ca51b5a5b +Block 0003 [120]: 1a41b794933f4cc5 +Block 0003 [121]: 5689b19baedfdedb +Block 0003 [122]: cef70989efd8920e +Block 0003 [123]: ceca1ea83d0b60ba +Block 0003 [124]: a86ddf3979f92931 +Block 0003 [125]: a130cfdb97e45d2e +Block 0003 [126]: 214bcbaec54c3ac9 +Block 0003 [127]: 2ae65944689850ef +Block 0004 [ 0]: 68763d8f4dc6b797 +Block 0004 [ 1]: c35b04acb749b220 +Block 0004 [ 2]: 9e008e900fa39b5a +Block 0004 [ 3]: ffdbb9dfa13daf2c +Block 0004 [ 4]: 0f832d5d8848af84 +Block 0004 [ 5]: 3aa712fbe5be6260 +Block 0004 [ 6]: 910492358708f68a +Block 0004 [ 7]: e70d0f634aab150b +Block 0004 [ 8]: e54b338756626586 +Block 0004 [ 9]: cb975f4aa84cd76c +Block 0004 [ 10]: 4c5b052fc9500259 +Block 0004 [ 11]: 9ee8907736c84f2a +Block 0004 [ 12]: 5467359eceb669f0 +Block 0004 [ 13]: dddc583bd4fcc220 +Block 0004 [ 14]: 57c8fa73553d00fd +Block 0004 [ 15]: 7fb1e689663cd50d +Block 0004 [ 16]: 3338faf00a97252b +Block 0004 [ 17]: d5cfae162045a520 +Block 0004 [ 18]: 4b4b806e2a0fe0cd +Block 0004 [ 19]: fd3174851ec2d025 +Block 0004 [ 20]: 7a178853679f3cbc +Block 0004 [ 21]: 6ddad1a999b5fd67 +Block 0004 [ 22]: 99954bf164561cd6 +Block 0004 [ 23]: af17c5929f3ca759 +Block 0004 [ 24]: f181b23304e08f50 +Block 0004 [ 25]: 7f8f7622fd244742 +Block 0004 [ 26]: f14caa940328b8ef +Block 0004 [ 27]: ad856d81e450d0ba +Block 0004 [ 28]: fb922822ca811607 +Block 0004 [ 29]: c358b3e22f333870 +Block 0004 [ 30]: 6e24412ddd113d83 +Block 0004 [ 31]: cca88416017d9909 +Block 0004 [ 32]: 187412167e28c809 +Block 0004 [ 33]: 682ffb02ef727f6b +Block 0004 [ 34]: 47611191fa734e0a +Block 0004 [ 35]: fd3bd5309b064b17 +Block 0004 [ 36]: 4195c7523172d21c +Block 0004 [ 37]: 423a276c971cc93d +Block 0004 [ 38]: bc792a0f02a63fe0 +Block 0004 [ 39]: 527c3b8788e27a62 +Block 0004 [ 40]: 239da2b419083b40 +Block 0004 [ 41]: 072907b2d91069cc +Block 0004 [ 42]: 724ade176929ac75 +Block 0004 [ 43]: 5edc7e2fed571ec0 +Block 0004 [ 44]: fe0a60d8ea3ad1d9 +Block 0004 [ 45]: 57320b55e6fe925a +Block 0004 [ 46]: 8caf29ab89416bb8 +Block 0004 [ 47]: 764bead9160af40e +Block 0004 [ 48]: 3ea1e124b3b51bbd +Block 0004 [ 49]: a609833ebfbeb514 +Block 0004 [ 50]: 620da2d8d4f48d94 +Block 0004 [ 51]: 384a58568455b659 +Block 0004 [ 52]: b8080a5acf01e30b +Block 0004 [ 53]: c86519dab9e33c81 +Block 0004 [ 54]: 4d7235e7cb324477 +Block 0004 [ 55]: afff27bf710bc021 +Block 0004 [ 56]: a3efa9413cbe4f06 +Block 0004 [ 57]: 51e5da49f2d11d10 +Block 0004 [ 58]: 8192b313dff9a6d6 +Block 0004 [ 59]: cc85033019cfb146 +Block 0004 [ 60]: 9a80cf8c4b64c6af +Block 0004 [ 61]: 87a3b9ab1bbe8222 +Block 0004 [ 62]: 6f9f7f808cb3a616 +Block 0004 [ 63]: 5397b40781320e51 +Block 0004 [ 64]: a274c7a9d7565533 +Block 0004 [ 65]: 366db58498da3ad9 +Block 0004 [ 66]: d6984fc1d3dd4abf +Block 0004 [ 67]: 07b70e89b0368f17 +Block 0004 [ 68]: e4dbd66550f2f540 +Block 0004 [ 69]: 5c26abe1ca1e6d6b +Block 0004 [ 70]: 3194d9d33fef1fcf +Block 0004 [ 71]: 1df384259125c83d +Block 0004 [ 72]: d4b8d2eab54bb74e +Block 0004 [ 73]: 6f177beaa794fd94 +Block 0004 [ 74]: 858bfefff34c9703 +Block 0004 [ 75]: a610fe0abb020ddf +Block 0004 [ 76]: 0d605f849ce756eb +Block 0004 [ 77]: e9e3eb0aab42f6a8 +Block 0004 [ 78]: d8cd6f9dd7d1e9c1 +Block 0004 [ 79]: 33570318a05f6a3a +Block 0004 [ 80]: c62f3a7c4675f109 +Block 0004 [ 81]: c0e5c409e7ed3601 +Block 0004 [ 82]: 67d5d3f564f4dcb3 +Block 0004 [ 83]: 8bc802ac83110e66 +Block 0004 [ 84]: b11a610332acecfd +Block 0004 [ 85]: b898c9697bbab146 +Block 0004 [ 86]: b2ebcc2537b600d2 +Block 0004 [ 87]: 4a1860d084ad41ef +Block 0004 [ 88]: 4dbee3a9b3a59057 +Block 0004 [ 89]: b5eec319f63e48e5 +Block 0004 [ 90]: 1ba03fedd1e5988e +Block 0004 [ 91]: b876ab6ed1290b26 +Block 0004 [ 92]: 41910fdd76e03a6e +Block 0004 [ 93]: 9dd560edb3b7fc36 +Block 0004 [ 94]: 40a4b579c8c2757a +Block 0004 [ 95]: e32220051bb6714b +Block 0004 [ 96]: f9e4dbf9770bf1de +Block 0004 [ 97]: a054ed0072a59a4e +Block 0004 [ 98]: 52073e12ecb338da +Block 0004 [ 99]: 410d9b0385df6bf5 +Block 0004 [100]: 4f25338e8af6d101 +Block 0004 [101]: 3027043a4b4d617f +Block 0004 [102]: 022269273a4cc7cc +Block 0004 [103]: 5f86ce2a1aa00a74 +Block 0004 [104]: e14370945c586ef8 +Block 0004 [105]: bcb1fbf3fa607acd +Block 0004 [106]: 170b991401a249a7 +Block 0004 [107]: 834ab77e65d7e23a +Block 0004 [108]: 3f4d81e34b8d43c8 +Block 0004 [109]: df4afb352b1f524f +Block 0004 [110]: a34a706b25eb7856 +Block 0004 [111]: 3e05113600a02864 +Block 0004 [112]: 365e6d8f7f1f4a31 +Block 0004 [113]: 9606eee8204e5272 +Block 0004 [114]: 68d8d969b28fb0c2 +Block 0004 [115]: 1a9eb8715cd6e9b7 +Block 0004 [116]: 185eff4ddb1caae7 +Block 0004 [117]: 3117894ffc3ae59b +Block 0004 [118]: fe3026e14f87ecfe +Block 0004 [119]: 10c7a423fe7a65d5 +Block 0004 [120]: 755e21fe87353390 +Block 0004 [121]: 9aaddb3f131f925b +Block 0004 [122]: 9e7c0ccff3b00927 +Block 0004 [123]: 0ec0b338915b28f7 +Block 0004 [124]: ef3c96c7857be687 +Block 0004 [125]: 1da7a673eb189fc4 +Block 0004 [126]: ca663b09033a76b2 +Block 0004 [127]: af7a04a40a5669b0 +Block 0005 [ 0]: c79f4392922276a5 +Block 0005 [ 1]: a7253a2ca884d327 +Block 0005 [ 2]: 7769226ce18835a5 +Block 0005 [ 3]: ef64f75207d7a252 +Block 0005 [ 4]: 1f0991dd322affcf +Block 0005 [ 5]: 898493c297e98333 +Block 0005 [ 6]: d0e9e2f2b5868767 +Block 0005 [ 7]: 85892737b8197939 +Block 0005 [ 8]: 895c9e23adf70a30 +Block 0005 [ 9]: 22884227ac287b79 +Block 0005 [ 10]: 25a5984034fb6bd4 +Block 0005 [ 11]: b4b07194a249522b +Block 0005 [ 12]: 89da853c03c31e14 +Block 0005 [ 13]: 15a7a78cf6416ebd +Block 0005 [ 14]: 3a8c41f24d324c76 +Block 0005 [ 15]: 09b9a07581e53c67 +Block 0005 [ 16]: 55727b44460f1587 +Block 0005 [ 17]: be8ab83014f30c2b +Block 0005 [ 18]: d9cd66f01251b7ab +Block 0005 [ 19]: 0461e20365959dbf +Block 0005 [ 20]: 241084d60bf65bcc +Block 0005 [ 21]: e75c5a65ee3d4eff +Block 0005 [ 22]: e9f6084efb8ecff1 +Block 0005 [ 23]: 085c72bdd1bcd079 +Block 0005 [ 24]: c549f8fc232e2c28 +Block 0005 [ 25]: 9063e1d7ee8cfcb5 +Block 0005 [ 26]: aadf049b59766f22 +Block 0005 [ 27]: cfaf89321f6518ae +Block 0005 [ 28]: cce38daaa1867f33 +Block 0005 [ 29]: 03d7036bef580c0d +Block 0005 [ 30]: 508c0c9ea2a798fb +Block 0005 [ 31]: b01529d286e93d65 +Block 0005 [ 32]: 4cfe9506c06bc256 +Block 0005 [ 33]: 498ee5c7db7d3807 +Block 0005 [ 34]: cee012266c0edead +Block 0005 [ 35]: 2d3191fb61c9a30a +Block 0005 [ 36]: 483dd47bae7d85af +Block 0005 [ 37]: fb1b86b513e3f3ef +Block 0005 [ 38]: f643356d32817575 +Block 0005 [ 39]: 8c8f5065f019d85b +Block 0005 [ 40]: f85db49390c3d299 +Block 0005 [ 41]: 44907a02d33986ca +Block 0005 [ 42]: 28181cfdf6531de1 +Block 0005 [ 43]: a5663011f4aa85e4 +Block 0005 [ 44]: 08b43bcf0a4969b1 +Block 0005 [ 45]: af80cab64d8993a6 +Block 0005 [ 46]: c213202a03c9bd91 +Block 0005 [ 47]: 2a250caf5ac630b1 +Block 0005 [ 48]: c44cba4ba3cb48f7 +Block 0005 [ 49]: 433ad275fccbbdea +Block 0005 [ 50]: 0a663ebe1d740d6a +Block 0005 [ 51]: 9ec6d6bb7b72c222 +Block 0005 [ 52]: cc9ffe088f352287 +Block 0005 [ 53]: c98e5332fcfb0673 +Block 0005 [ 54]: b4236c49582216c7 +Block 0005 [ 55]: c4ed9ee4a7981541 +Block 0005 [ 56]: b2c45cfe65ab2eaf +Block 0005 [ 57]: 59c96abdfd1407b9 +Block 0005 [ 58]: 7ff11a8f764220d5 +Block 0005 [ 59]: 157c7ff6478bde5d +Block 0005 [ 60]: 98c24690d8f30515 +Block 0005 [ 61]: d6d37a82b506a60e +Block 0005 [ 62]: c522a84da212bc98 +Block 0005 [ 63]: 997f388966e7baa4 +Block 0005 [ 64]: c1c9995da3c387aa +Block 0005 [ 65]: 34fe68e44dc522d0 +Block 0005 [ 66]: 1ab418a3576ee0bc +Block 0005 [ 67]: 7061a489d80cf327 +Block 0005 [ 68]: 1305e4fa6caf1ed2 +Block 0005 [ 69]: b2b45190832ec6f4 +Block 0005 [ 70]: 779b0dcf42ee74ff +Block 0005 [ 71]: c2476ddfa33ada3a +Block 0005 [ 72]: c761829994837032 +Block 0005 [ 73]: d9a5ca71039fd50f +Block 0005 [ 74]: fea0745a0379c2ce +Block 0005 [ 75]: 51af17867d02c11d +Block 0005 [ 76]: 9294a53dfd591bd7 +Block 0005 [ 77]: d667cdaab8f5e3bb +Block 0005 [ 78]: f5ea5fe6aefb5f53 +Block 0005 [ 79]: 5d459d2c30fcc6d1 +Block 0005 [ 80]: 33e69f05e4d8d74f +Block 0005 [ 81]: 70c1b4348dee2873 +Block 0005 [ 82]: 95ba9ff1042c12d4 +Block 0005 [ 83]: 432b08a428b58915 +Block 0005 [ 84]: cccba8edde21f947 +Block 0005 [ 85]: 55d8ad6ab53fa0b4 +Block 0005 [ 86]: bb5120a1a45b5a62 +Block 0005 [ 87]: f0e50743f06c14d2 +Block 0005 [ 88]: b53a15f7cad3bd0e +Block 0005 [ 89]: e6832b49d6199846 +Block 0005 [ 90]: a857a8dec81b60be +Block 0005 [ 91]: 7581c0148642dd49 +Block 0005 [ 92]: 2389a4431ef7b450 +Block 0005 [ 93]: 59ce3937b5323f22 +Block 0005 [ 94]: f865028678e00b6b +Block 0005 [ 95]: 3da9f4dc5683e6c2 +Block 0005 [ 96]: ffaf9831c6329c1f +Block 0005 [ 97]: abc13a6ab1f09987 +Block 0005 [ 98]: 4f0fc5bcfc2a695e +Block 0005 [ 99]: 02e416ddee499f04 +Block 0005 [100]: cce92bc13079d077 +Block 0005 [101]: 10eb05f19080143e +Block 0005 [102]: 8b5a265b5fb50b0a +Block 0005 [103]: bc0632a8d5b9f9bf +Block 0005 [104]: a06a19d109966629 +Block 0005 [105]: ca993df44d412034 +Block 0005 [106]: 53cdd2e1e2ec5765 +Block 0005 [107]: 39e4f9f131761ca3 +Block 0005 [108]: 989b04fb1a9f90ab +Block 0005 [109]: 48831eff4e20554e +Block 0005 [110]: 4a2f93cae239783d +Block 0005 [111]: bc27a7e3199c806c +Block 0005 [112]: 8e195628a423d227 +Block 0005 [113]: 96de54e58d7f5c3e +Block 0005 [114]: 4ceede7688f7cc59 +Block 0005 [115]: 55c85913b9c14ec4 +Block 0005 [116]: f2ec832ba525d2d6 +Block 0005 [117]: 8f1edd91a8c7d1a8 +Block 0005 [118]: d7b17c40419c28ff +Block 0005 [119]: b17bc3c7508c5c1d +Block 0005 [120]: 64f123c8c38b2123 +Block 0005 [121]: efcec0aa0694a403 +Block 0005 [122]: 4257a1f86f7525c5 +Block 0005 [123]: 5c0b23bd01538eff +Block 0005 [124]: c548b0ee675348a5 +Block 0005 [125]: acd324367e84b36d +Block 0005 [126]: 4594b480fe27d287 +Block 0005 [127]: 19723de0e11f6a79 +Block 0006 [ 0]: a579aa0c6f3d472b +Block 0006 [ 1]: c086d8015e821720 +Block 0006 [ 2]: b0aff8baf2c7a915 +Block 0006 [ 3]: b1a52a27f2a6f5bb +Block 0006 [ 4]: f7a8ba507512affd +Block 0006 [ 5]: 189943ac17f52f74 +Block 0006 [ 6]: 09b050a91a7865f9 +Block 0006 [ 7]: fad3bba5cdc75e8f +Block 0006 [ 8]: a27db619efa13e78 +Block 0006 [ 9]: d7721c064ba824f2 +Block 0006 [ 10]: 9fdd5929958052be +Block 0006 [ 11]: cf2e2fe2c371b18b +Block 0006 [ 12]: 2131a496ffe7297d +Block 0006 [ 13]: 200b9a107faaa7c6 +Block 0006 [ 14]: 4dd6326851f612cd +Block 0006 [ 15]: e6f69fb0fa79e2d1 +Block 0006 [ 16]: 5666dbc6001c374e +Block 0006 [ 17]: fb1170afe5bba42e +Block 0006 [ 18]: e54d768d5140ed79 +Block 0006 [ 19]: bd4cb0de13f5c9e6 +Block 0006 [ 20]: f03b2b449f970a60 +Block 0006 [ 21]: 0da341fe0e6d9a69 +Block 0006 [ 22]: d43cbecae54f2c9c +Block 0006 [ 23]: 18e027f5b1014028 +Block 0006 [ 24]: ed27e494d9ca89d4 +Block 0006 [ 25]: 641298a39d1729e5 +Block 0006 [ 26]: 378a0e8c21129585 +Block 0006 [ 27]: c289147b34edc8f6 +Block 0006 [ 28]: 101ffb96b6ecbf60 +Block 0006 [ 29]: b3672dd20ce9fedf +Block 0006 [ 30]: 966dd9d9747a53f5 +Block 0006 [ 31]: f788ba6aa3e750fc +Block 0006 [ 32]: 87481cafc604ab49 +Block 0006 [ 33]: 4c64a15cd56861dc +Block 0006 [ 34]: 571e41e24bbcf5a6 +Block 0006 [ 35]: 5cdaf199d6c2d284 +Block 0006 [ 36]: 5d324f03722535e3 +Block 0006 [ 37]: 8456661dc13f04c4 +Block 0006 [ 38]: f5f533a3a90f6591 +Block 0006 [ 39]: 2eeb195c30fd5223 +Block 0006 [ 40]: 2761630d222c4be3 +Block 0006 [ 41]: 4b25e08ea39d2694 +Block 0006 [ 42]: 94c885e05b6311ec +Block 0006 [ 43]: 0fbd250920340527 +Block 0006 [ 44]: 6d4ed073c6c82daf +Block 0006 [ 45]: a814caf69863bff7 +Block 0006 [ 46]: 357950ed6e3db084 +Block 0006 [ 47]: 7f5b7f5f9713ab4b +Block 0006 [ 48]: f687be5cd8c6a2c3 +Block 0006 [ 49]: de98a4e2947adde6 +Block 0006 [ 50]: eae6cc68785d7a42 +Block 0006 [ 51]: 90f99300beaaea42 +Block 0006 [ 52]: 85aaed99d15ae2ef +Block 0006 [ 53]: 14ea09b591ddc64f +Block 0006 [ 54]: 82caced71a210d49 +Block 0006 [ 55]: 4a5544de2a5c2ae4 +Block 0006 [ 56]: 2b923417fd0e61a0 +Block 0006 [ 57]: 634358024288709d +Block 0006 [ 58]: 5051199e0c43bc67 +Block 0006 [ 59]: 4797c2f7d6181283 +Block 0006 [ 60]: 3cd2cab46f2be6b5 +Block 0006 [ 61]: 3a286986ea78b194 +Block 0006 [ 62]: 368e222bc11aae07 +Block 0006 [ 63]: 53d09dcde580dea8 +Block 0006 [ 64]: e789b54396eae809 +Block 0006 [ 65]: 5e58f4d02f90e164 +Block 0006 [ 66]: 3db837b465c72d91 +Block 0006 [ 67]: 3c93731de2b96f9f +Block 0006 [ 68]: 461bceda725dc09c +Block 0006 [ 69]: 605ae454b60ff23c +Block 0006 [ 70]: 9f6a7a55a20ce329 +Block 0006 [ 71]: afb30dfbb337a2e0 +Block 0006 [ 72]: 9a998168eb24849d +Block 0006 [ 73]: ae602889800db9c2 +Block 0006 [ 74]: a454c61c98327969 +Block 0006 [ 75]: 43b2763fda7e3d88 +Block 0006 [ 76]: 930a27bde3230189 +Block 0006 [ 77]: d146c0ee73488a3e +Block 0006 [ 78]: 160ca96d9bfbed68 +Block 0006 [ 79]: 73293ed851a68617 +Block 0006 [ 80]: a36a4af5095d53a7 +Block 0006 [ 81]: 4a884b706ee970fc +Block 0006 [ 82]: d3109874f0af31b3 +Block 0006 [ 83]: f62579e6a2dc3ce6 +Block 0006 [ 84]: 8d8796ad737a807a +Block 0006 [ 85]: 16077474eac18b07 +Block 0006 [ 86]: cfb80495e3fc3968 +Block 0006 [ 87]: dd93a9afb9c29429 +Block 0006 [ 88]: 29d61ca2814efa90 +Block 0006 [ 89]: 1261d10c14bf5fce +Block 0006 [ 90]: 9c86148ae36de74e +Block 0006 [ 91]: 0a2cc430be322e03 +Block 0006 [ 92]: fc9e07eedd148823 +Block 0006 [ 93]: 4bf350d0a4134d0e +Block 0006 [ 94]: 04e0631b64ecb7a2 +Block 0006 [ 95]: 43613e7ed6f1abff +Block 0006 [ 96]: 0f40979016e9c14b +Block 0006 [ 97]: 5815db6affdde07d +Block 0006 [ 98]: 3a304f5e227a8db5 +Block 0006 [ 99]: 9cf57fa62861ff03 +Block 0006 [100]: 5cb225c33209c40f +Block 0006 [101]: 2e391fe6ac391667 +Block 0006 [102]: 4518d90f949029ca +Block 0006 [103]: 6812eeafd26ea2aa +Block 0006 [104]: 1740c3c6ac78a991 +Block 0006 [105]: 207fbbab00cfa9ea +Block 0006 [106]: 23b41c5538b54596 +Block 0006 [107]: 5c1a9846f3319d0a +Block 0006 [108]: ed0078df05ce5e78 +Block 0006 [109]: 1324436b2d341a1d +Block 0006 [110]: 9f2b021f23a9d7cb +Block 0006 [111]: 6062d1f1d78311ca +Block 0006 [112]: 46509742c9200b71 +Block 0006 [113]: ece3943c9e12eef0 +Block 0006 [114]: c73efbf60644e765 +Block 0006 [115]: 014a3dc6d06c6401 +Block 0006 [116]: 4b829e9135631a97 +Block 0006 [117]: ac9f2ff9fbaa7f91 +Block 0006 [118]: 6c6511c442badeac +Block 0006 [119]: 29c3cb582054dd11 +Block 0006 [120]: 11b0047447e6156a +Block 0006 [121]: 05a9c4e4a5c6c429 +Block 0006 [122]: 018f420c32088be5 +Block 0006 [123]: f9cab0a6bff629ba +Block 0006 [124]: c3fbfc7ef9137714 +Block 0006 [125]: bc21a904c77e3ee3 +Block 0006 [126]: 809708782db7e0df +Block 0006 [127]: 718ca5bb3325a712 +Block 0007 [ 0]: 679e5aa8bdb71148 +Block 0007 [ 1]: e52a4af98006d3af +Block 0007 [ 2]: 9bde8ffbf95a10e8 +Block 0007 [ 3]: 59ee657ba4c106ad +Block 0007 [ 4]: 7276d2be25b70db9 +Block 0007 [ 5]: 8cc316c6089731d3 +Block 0007 [ 6]: 0f8657ba3ed3ae33 +Block 0007 [ 7]: 2f46e993af8d552b +Block 0007 [ 8]: a6a692d0a552f72d +Block 0007 [ 9]: 6e44096c463f5d2e +Block 0007 [ 10]: c344ea724ec74d4c +Block 0007 [ 11]: 690720809067447f +Block 0007 [ 12]: ae98d2977e34d409 +Block 0007 [ 13]: aab2ad8df1555bd4 +Block 0007 [ 14]: 8eb9ca41b2b45cff +Block 0007 [ 15]: 050599bf6f9ccf7b +Block 0007 [ 16]: b6b088c1acdd99e0 +Block 0007 [ 17]: 2f90e028fe32dcb2 +Block 0007 [ 18]: b8306c79f804adef +Block 0007 [ 19]: a3e24a843b7ca29a +Block 0007 [ 20]: 0b8e77e3832ef3c8 +Block 0007 [ 21]: d637788f5e8dd05c +Block 0007 [ 22]: 2ebb94462d5113c5 +Block 0007 [ 23]: c66e4a37b8ad1814 +Block 0007 [ 24]: 65e4545e584a515e +Block 0007 [ 25]: 8ca0b4eccf78c6d3 +Block 0007 [ 26]: febdbf5fc5eac3d4 +Block 0007 [ 27]: 8562b8d8f97d89a8 +Block 0007 [ 28]: 0005ba229d50fba0 +Block 0007 [ 29]: 6cdfedeca2fd1dc2 +Block 0007 [ 30]: 2e4d347e29c5126f +Block 0007 [ 31]: 92886832b01eed2a +Block 0007 [ 32]: b7f9dc7507a4e172 +Block 0007 [ 33]: 59728e465793e7a3 +Block 0007 [ 34]: eb3dbcf6094b9240 +Block 0007 [ 35]: 97b821b7f00e8629 +Block 0007 [ 36]: 54923f9a30b4e08c +Block 0007 [ 37]: 86a192f6a1e2112e +Block 0007 [ 38]: dc45560679db5c56 +Block 0007 [ 39]: 45413880bccb1603 +Block 0007 [ 40]: 7e1f09b1bc5d1ae8 +Block 0007 [ 41]: 6096cc8b8fe59162 +Block 0007 [ 42]: 9ffae29e2299b8b6 +Block 0007 [ 43]: b5bc95f2788c9e85 +Block 0007 [ 44]: 3e190ccc066ef8df +Block 0007 [ 45]: d93486140d5ee3f1 +Block 0007 [ 46]: 2ac3e607c8b1d7c9 +Block 0007 [ 47]: 24bad7515f760446 +Block 0007 [ 48]: 04e2792a896c3f85 +Block 0007 [ 49]: b47d1828a1f93e00 +Block 0007 [ 50]: 386850552302bcc2 +Block 0007 [ 51]: 3fd81ce12de631cd +Block 0007 [ 52]: 3b22930854f81ab5 +Block 0007 [ 53]: f501fbe750c61790 +Block 0007 [ 54]: 4d9005cae80c1b24 +Block 0007 [ 55]: efc1ae5de289ac33 +Block 0007 [ 56]: cfd69c8680e56308 +Block 0007 [ 57]: b2d5960ef58f360d +Block 0007 [ 58]: b147affb8c0bbbeb +Block 0007 [ 59]: 8a735b6080032cf6 +Block 0007 [ 60]: 194422f951c47d81 +Block 0007 [ 61]: 80751ac2883c7a4a +Block 0007 [ 62]: b002aeda5c86b283 +Block 0007 [ 63]: 96638bab02ddb989 +Block 0007 [ 64]: 0ef4e1e6322f788c +Block 0007 [ 65]: a29ada7d72130b46 +Block 0007 [ 66]: 77808fc4013a706f +Block 0007 [ 67]: 3acdb0967aecedd2 +Block 0007 [ 68]: 266a5df400a52d45 +Block 0007 [ 69]: 8aae40a11f5e48dd +Block 0007 [ 70]: d18744d894a4fd1d +Block 0007 [ 71]: e33f5cf0e01fc6de +Block 0007 [ 72]: 20748919e3d7e65e +Block 0007 [ 73]: 4041301accc810ce +Block 0007 [ 74]: 030e795d4b993886 +Block 0007 [ 75]: b1d47145d7c960ec +Block 0007 [ 76]: 853e8a6cd32c30a7 +Block 0007 [ 77]: d292da728306fab9 +Block 0007 [ 78]: ed372918abebcb2e +Block 0007 [ 79]: 1b88c15b2df4c942 +Block 0007 [ 80]: 081124b00d8ae4b4 +Block 0007 [ 81]: 43ba0fa1c38abc22 +Block 0007 [ 82]: 1561283a9709be85 +Block 0007 [ 83]: dc611021b8c8a9a7 +Block 0007 [ 84]: a81f1a2099efa89d +Block 0007 [ 85]: 4f85a4a88026f842 +Block 0007 [ 86]: d623064c9fa5e490 +Block 0007 [ 87]: a2c7668d9858c9c4 +Block 0007 [ 88]: 29e292811318c3d6 +Block 0007 [ 89]: 2b3b2a810a5df6a7 +Block 0007 [ 90]: 1b64f6c64c8a59bc +Block 0007 [ 91]: 977cbe40ed8cec43 +Block 0007 [ 92]: e31fcc085f38d53d +Block 0007 [ 93]: 8dacbd1659aa5d75 +Block 0007 [ 94]: db7be4515fae98c8 +Block 0007 [ 95]: 0e09711fddfd8a93 +Block 0007 [ 96]: 1c5e2497f8f99c08 +Block 0007 [ 97]: 14939a9fe8eeab78 +Block 0007 [ 98]: 16c9e45e8d4980b4 +Block 0007 [ 99]: 8ca0e091985666a7 +Block 0007 [100]: 40fc23e58c19d0f3 +Block 0007 [101]: 629724e6f7b62068 +Block 0007 [102]: 4408d2e716e924a5 +Block 0007 [103]: 92783fff1ffb2acc +Block 0007 [104]: a4b31f42c0b49ce3 +Block 0007 [105]: 2e79a2eb24310368 +Block 0007 [106]: 18944b2c88b72f51 +Block 0007 [107]: 64edf93e2f552fe5 +Block 0007 [108]: 71adf42caa82f448 +Block 0007 [109]: 9eca8ad4193ffb57 +Block 0007 [110]: 24b96774da15ca98 +Block 0007 [111]: 24e33d65fafaa4c7 +Block 0007 [112]: a7778267896812a4 +Block 0007 [113]: 818644acf15c0f9b +Block 0007 [114]: 6a23c1b96974dbf9 +Block 0007 [115]: 1a0b06a6608dccd8 +Block 0007 [116]: 74c08a50ef521a62 +Block 0007 [117]: 69c228cd79693adc +Block 0007 [118]: cfed8d7c69622e4b +Block 0007 [119]: e3dea674e760140f +Block 0007 [120]: 65dae947d1ea893d +Block 0007 [121]: 9851ca478cbe9e9f +Block 0007 [122]: f249edf6a015a470 +Block 0007 [123]: 45130f054a2a4e29 +Block 0007 [124]: 78c9c8039a51b9d1 +Block 0007 [125]: abb83061e831180a +Block 0007 [126]: 1e7449084d6645f0 +Block 0007 [127]: 9515bc4201360828 +Block 0008 [ 0]: d612868adf2be803 +Block 0008 [ 1]: cfadcc4be9960938 +Block 0008 [ 2]: 8a6e53600b22fe5d +Block 0008 [ 3]: 940f606aa08d0978 +Block 0008 [ 4]: a75de52bf3ae5864 +Block 0008 [ 5]: df442c83c925988a +Block 0008 [ 6]: 011e6fe8140509cb +Block 0008 [ 7]: 29440fa1ce9bfb2c +Block 0008 [ 8]: 0bf70af269753b37 +Block 0008 [ 9]: aec81a2b9dd57a05 +Block 0008 [ 10]: e923ae5f3cccfa82 +Block 0008 [ 11]: 089509caeb6454df +Block 0008 [ 12]: b2816034783a877b +Block 0008 [ 13]: 067e43081088354b +Block 0008 [ 14]: de1fcdc9ae795382 +Block 0008 [ 15]: a89e60140948d636 +Block 0008 [ 16]: 37d60ed78adc0155 +Block 0008 [ 17]: 00052b4747a78d14 +Block 0008 [ 18]: 847a306b7847724f +Block 0008 [ 19]: 3b9618df7794b366 +Block 0008 [ 20]: 75146dcfcbe1ef44 +Block 0008 [ 21]: ebdf91041a31624a +Block 0008 [ 22]: b7aaa244076549af +Block 0008 [ 23]: 95d3c561896e5c28 +Block 0008 [ 24]: 25b0a3359ad1d016 +Block 0008 [ 25]: 402e9816f5390dfc +Block 0008 [ 26]: b2c169f382b15d8e +Block 0008 [ 27]: 5e0fdc4d5d1612f1 +Block 0008 [ 28]: d8d5df2ca9ebf712 +Block 0008 [ 29]: cc215dfcbcf9b770 +Block 0008 [ 30]: 8514fc780bdfcde7 +Block 0008 [ 31]: 0c50b022e82144b9 +Block 0008 [ 32]: 5ef663b5e0fbbb26 +Block 0008 [ 33]: 5e49adb486b18df1 +Block 0008 [ 34]: 2b1c1c29dc240f7b +Block 0008 [ 35]: e214e55d4e685822 +Block 0008 [ 36]: 3083cc17110d4f82 +Block 0008 [ 37]: 753666ba11662ec3 +Block 0008 [ 38]: 1e3910d2e6ce1865 +Block 0008 [ 39]: 97264a9ffca56797 +Block 0008 [ 40]: 37dc35846509817b +Block 0008 [ 41]: 2fe851c388035963 +Block 0008 [ 42]: fbec63882e44a721 +Block 0008 [ 43]: caa997de14a10a02 +Block 0008 [ 44]: 91654566db990d85 +Block 0008 [ 45]: e66261d038c7cfd5 +Block 0008 [ 46]: 9d9528279755927e +Block 0008 [ 47]: f0656ba33f251801 +Block 0008 [ 48]: e678422625446138 +Block 0008 [ 49]: 96836ea927d354fb +Block 0008 [ 50]: d20bb54a0a4d2aff +Block 0008 [ 51]: 6f97b5db80f2ea76 +Block 0008 [ 52]: 0ce72591ed30245e +Block 0008 [ 53]: baeb8eae606fa8db +Block 0008 [ 54]: 904731f491268647 +Block 0008 [ 55]: 31dab2253f1536f2 +Block 0008 [ 56]: e2b55e214e264441 +Block 0008 [ 57]: ee95fc0ecab6d1c3 +Block 0008 [ 58]: f774d2422e8b994d +Block 0008 [ 59]: fc88a999c4c8a0e3 +Block 0008 [ 60]: ffec6c149c7b427d +Block 0008 [ 61]: f6e51ed622a2a404 +Block 0008 [ 62]: aa819f8fdf3a958a +Block 0008 [ 63]: d0bb4e5ed627ea69 +Block 0008 [ 64]: b4caf41d477be373 +Block 0008 [ 65]: c038ef1d14571811 +Block 0008 [ 66]: 5704f751069ef5c4 +Block 0008 [ 67]: 4e7d469a2b2906f0 +Block 0008 [ 68]: 6aebc5c3c6bb95ce +Block 0008 [ 69]: 07f82299037a65aa +Block 0008 [ 70]: d1a145cc12979796 +Block 0008 [ 71]: 7f005b1a0f789208 +Block 0008 [ 72]: d9fcf1ff4ddb4ee6 +Block 0008 [ 73]: b2af7d93b0bad697 +Block 0008 [ 74]: dd83b72b38f9fe4c +Block 0008 [ 75]: e3ef160315685757 +Block 0008 [ 76]: 11bb09b41d219cc1 +Block 0008 [ 77]: 6ab0fe2b24116968 +Block 0008 [ 78]: 0269d9d391b55937 +Block 0008 [ 79]: a47bf48a84c1a1af +Block 0008 [ 80]: c151934dd17851da +Block 0008 [ 81]: 28bfa5b23c63aacf +Block 0008 [ 82]: d3b26f606f9a13f3 +Block 0008 [ 83]: 4220b1ba4f653965 +Block 0008 [ 84]: af0ea18acf4b14a2 +Block 0008 [ 85]: 0a90b45dbcaf578c +Block 0008 [ 86]: 801cd8073692870c +Block 0008 [ 87]: 9ad5d654b02497a2 +Block 0008 [ 88]: 07e72f75fce4df71 +Block 0008 [ 89]: 00e4d4a54752e61d +Block 0008 [ 90]: 9c8895477b9162b2 +Block 0008 [ 91]: 1944bf577facafe6 +Block 0008 [ 92]: 2d02b70de5b04770 +Block 0008 [ 93]: 3c412182dbb85c17 +Block 0008 [ 94]: dc7f7011983e1dc4 +Block 0008 [ 95]: 2302a2015b57e359 +Block 0008 [ 96]: 83d9dd6fdad21b11 +Block 0008 [ 97]: 77b45f920c4bb8e2 +Block 0008 [ 98]: 80080b2c8d7780c0 +Block 0008 [ 99]: a9912a4771a82866 +Block 0008 [100]: ac1ada4b6da0456d +Block 0008 [101]: 0658745593b304e6 +Block 0008 [102]: 92b03ac114e5fe68 +Block 0008 [103]: a82b5eb91e9ccfd1 +Block 0008 [104]: f2374d1a660d4063 +Block 0008 [105]: 057c5713519cd9c7 +Block 0008 [106]: 5c4e596261ed929d +Block 0008 [107]: 2177c5a8322cccea +Block 0008 [108]: 1e78ddef6bfa16b5 +Block 0008 [109]: d6d0c5e8ad21dba7 +Block 0008 [110]: 3c6bf2bf4b6bb17d +Block 0008 [111]: 1a403df00f872d84 +Block 0008 [112]: e335758e00e7b5f9 +Block 0008 [113]: 0451e19983c182fe +Block 0008 [114]: d4f463b36d4b82df +Block 0008 [115]: ade54bf28baf7fcc +Block 0008 [116]: 19187ba45ba81b07 +Block 0008 [117]: 3ae1a97b3547e1aa +Block 0008 [118]: 279eb8108c2c7c64 +Block 0008 [119]: 06fa325c5342f8ed +Block 0008 [120]: 9966212e31b37911 +Block 0008 [121]: 1d9ed6b6f63f37e5 +Block 0008 [122]: 9978feff7fc82305 +Block 0008 [123]: 365c4624ef40dcab +Block 0008 [124]: 4bfaa74a2040ec68 +Block 0008 [125]: 6f833682c02a1557 +Block 0008 [126]: 60bf6db28614e2a4 +Block 0008 [127]: a0197e1101aaf452 +Block 0009 [ 0]: 125e7be23f9e2ae1 +Block 0009 [ 1]: 2dcf9e588ed34492 +Block 0009 [ 2]: dfdf0d708569f1a6 +Block 0009 [ 3]: d77f32b42b708d36 +Block 0009 [ 4]: 39312541fea455d5 +Block 0009 [ 5]: c89d0097d6fd04df +Block 0009 [ 6]: c6472c07ea14897c +Block 0009 [ 7]: 8327ca84204733a4 +Block 0009 [ 8]: f641bd8b6287310f +Block 0009 [ 9]: 1dcb8588aceb1b07 +Block 0009 [ 10]: 9651afb7ccffb052 +Block 0009 [ 11]: 3d3b291ea2ea6980 +Block 0009 [ 12]: 30a22195a702c490 +Block 0009 [ 13]: a6c7624a0c702031 +Block 0009 [ 14]: 315b0b5a03664357 +Block 0009 [ 15]: 39195128217b4b65 +Block 0009 [ 16]: 0f1bdb60cee30e1d +Block 0009 [ 17]: 4770e0438fabf04b +Block 0009 [ 18]: 07157794fcedc106 +Block 0009 [ 19]: 2822a230fedd1687 +Block 0009 [ 20]: d496741d207ab651 +Block 0009 [ 21]: 5fc8ebcc49e1454f +Block 0009 [ 22]: bb37c289793ff950 +Block 0009 [ 23]: a76dad3a5aa92cc9 +Block 0009 [ 24]: eed1c1f29d84c0ce +Block 0009 [ 25]: 635eb6e9dccb1a80 +Block 0009 [ 26]: c98604090fce7bff +Block 0009 [ 27]: 510fb045776b5356 +Block 0009 [ 28]: 8365b2db92ae9754 +Block 0009 [ 29]: f4586c23569b182e +Block 0009 [ 30]: 21315b52057b3ce7 +Block 0009 [ 31]: 90fe05d38503aea6 +Block 0009 [ 32]: 464d22ee86afa981 +Block 0009 [ 33]: d47dafe23a351752 +Block 0009 [ 34]: 71fec7c68e0a5dcf +Block 0009 [ 35]: 0bb36472e5739015 +Block 0009 [ 36]: 131f692e1c0acc56 +Block 0009 [ 37]: 73fd04a2086c8019 +Block 0009 [ 38]: 0e4908b3c94e8804 +Block 0009 [ 39]: 8048d6398b615965 +Block 0009 [ 40]: 2b89ac9aa1266744 +Block 0009 [ 41]: 1518d4a0ecd512dc +Block 0009 [ 42]: 604926c415520f1e +Block 0009 [ 43]: cb40f5c76d04dc9c +Block 0009 [ 44]: d6949d19afbab75e +Block 0009 [ 45]: a747e5b0858042f8 +Block 0009 [ 46]: 954282663fa679c9 +Block 0009 [ 47]: 1d04afb228acb029 +Block 0009 [ 48]: 2f4a1b0fc1bc470f +Block 0009 [ 49]: 267680f7f260a7ff +Block 0009 [ 50]: 411fbc5bb703f140 +Block 0009 [ 51]: bbecaa9a4b82896a +Block 0009 [ 52]: a6e3704961a41f31 +Block 0009 [ 53]: bd98c5c49517a749 +Block 0009 [ 54]: e6cb85d82369a3b9 +Block 0009 [ 55]: 69ba7c14225446b2 +Block 0009 [ 56]: fbf4a6a5eddcff1d +Block 0009 [ 57]: 41838c9bceb91e05 +Block 0009 [ 58]: b6474fb523ddbc62 +Block 0009 [ 59]: b715ba6ba33f0865 +Block 0009 [ 60]: aa4a68df42f44cdc +Block 0009 [ 61]: 2335e406b1c939b2 +Block 0009 [ 62]: 87883da03f5c0db8 +Block 0009 [ 63]: 5ec1b07fbc6aa2cc +Block 0009 [ 64]: c1854b3649373eef +Block 0009 [ 65]: 2c2de0c02c401a2f +Block 0009 [ 66]: 5131d3ba29a37386 +Block 0009 [ 67]: 362306b98176e59d +Block 0009 [ 68]: 3e0e950c86020ddd +Block 0009 [ 69]: 5f04586af32cfd6d +Block 0009 [ 70]: d667c126d71adacb +Block 0009 [ 71]: dee8b5c518f125b0 +Block 0009 [ 72]: 5a46d25441f985f1 +Block 0009 [ 73]: 5211e3c653809142 +Block 0009 [ 74]: 856ad42591bf52e4 +Block 0009 [ 75]: 41bea57d8612affe +Block 0009 [ 76]: b1b5f95510720687 +Block 0009 [ 77]: 346ceb0bbb618336 +Block 0009 [ 78]: e85af44a94adf434 +Block 0009 [ 79]: 3ea25ef8070fc019 +Block 0009 [ 80]: bdcee6ac0eb4fb02 +Block 0009 [ 81]: 73874f00a8de263b +Block 0009 [ 82]: c93632643699d45d +Block 0009 [ 83]: fde27892dc08d5dd +Block 0009 [ 84]: 289f26ea163aa0c1 +Block 0009 [ 85]: 3584be4e9437b93f +Block 0009 [ 86]: 834990ca8bd21dd5 +Block 0009 [ 87]: 369f2fed26bd92bd +Block 0009 [ 88]: dcc1434bfb54747d +Block 0009 [ 89]: 381849ce1dad2ccf +Block 0009 [ 90]: daa863935ed2c6d5 +Block 0009 [ 91]: bd40cf4c84e93cd4 +Block 0009 [ 92]: 05f9a3dc63c2556b +Block 0009 [ 93]: 240d5ee74a78afa3 +Block 0009 [ 94]: 62410111fa5baa41 +Block 0009 [ 95]: 17478960fcad0d45 +Block 0009 [ 96]: 3ca87435e9d056c3 +Block 0009 [ 97]: e44fdd8c185102b2 +Block 0009 [ 98]: ffe99cb0769d8875 +Block 0009 [ 99]: 86030c14d82dcf62 +Block 0009 [100]: 8cafeeb18e2a8c0a +Block 0009 [101]: d6c34798b443f4c3 +Block 0009 [102]: 2c744cd44d7d9699 +Block 0009 [103]: 9496d6df24516281 +Block 0009 [104]: 8d2389d16d1a2219 +Block 0009 [105]: 37ccfa20bb9b4d03 +Block 0009 [106]: 349448539bace7cf +Block 0009 [107]: 11c5dce1acc8f8d6 +Block 0009 [108]: 393f9cb72aa6fcca +Block 0009 [109]: f6fab4f88677c049 +Block 0009 [110]: 8ea980189bbd81c1 +Block 0009 [111]: 5933bbc1c4935c8f +Block 0009 [112]: bf544ba618f1e3aa +Block 0009 [113]: 6ecf8ab649253235 +Block 0009 [114]: f3d9299efd50d9f2 +Block 0009 [115]: acf6c3053c7f71fe +Block 0009 [116]: 985bdc30cc7b3a1e +Block 0009 [117]: 2c6fa017544c2f8a +Block 0009 [118]: 3873d757ebdf92ef +Block 0009 [119]: f50c701f870493b5 +Block 0009 [120]: 154a8ade495cd5f9 +Block 0009 [121]: a44c8210a1194465 +Block 0009 [122]: 372c54dca2cd833b +Block 0009 [123]: 4e21a61415e2e767 +Block 0009 [124]: 081706a771aed571 +Block 0009 [125]: 44f4da88dc2a3ccc +Block 0009 [126]: caa2180bab53cbd2 +Block 0009 [127]: d19f36217137e69d +Block 0010 [ 0]: 50f129c8314b1dd2 +Block 0010 [ 1]: f1faf24252b5ce03 +Block 0010 [ 2]: fd846116d2778287 +Block 0010 [ 3]: e172de82b6a5dd78 +Block 0010 [ 4]: 8511807345a45e26 +Block 0010 [ 5]: e2765515697dfe71 +Block 0010 [ 6]: 0011ec204248c60e +Block 0010 [ 7]: d2da550b83c17296 +Block 0010 [ 8]: a3cde273a1015bd8 +Block 0010 [ 9]: f16021f0e048fc2b +Block 0010 [ 10]: 2bfd6df1b3474b63 +Block 0010 [ 11]: e44905e2946d56e2 +Block 0010 [ 12]: f0c73e131fb1ca92 +Block 0010 [ 13]: c475c70e8fee063f +Block 0010 [ 14]: 1656f9ca27728999 +Block 0010 [ 15]: c1e395aa563f0bf4 +Block 0010 [ 16]: 18710644253867db +Block 0010 [ 17]: 7281e128ff73c012 +Block 0010 [ 18]: 17ce526cf0f21f1d +Block 0010 [ 19]: d273ebb95002216e +Block 0010 [ 20]: 440c93c6690146c6 +Block 0010 [ 21]: 7e72aab8480f9c9a +Block 0010 [ 22]: 76e632e3b3a3a1a3 +Block 0010 [ 23]: 03afa7847fbfb8af +Block 0010 [ 24]: f676d56ad1793b27 +Block 0010 [ 25]: a09d705d9e2da6a1 +Block 0010 [ 26]: 1d5d9f3397c5583d +Block 0010 [ 27]: 38d36e89deb44a7f +Block 0010 [ 28]: 87532c117619729d +Block 0010 [ 29]: b4fe29f51a9981bd +Block 0010 [ 30]: d534cbcf713073f8 +Block 0010 [ 31]: fec16e1d25805876 +Block 0010 [ 32]: 60dce345c4ecc2fc +Block 0010 [ 33]: 5dc5e0be360e32ca +Block 0010 [ 34]: 5ed0afb1d650acdc +Block 0010 [ 35]: 33c1a3ba91199c17 +Block 0010 [ 36]: 7b85af6946855eea +Block 0010 [ 37]: 4bf8f4ef629acb53 +Block 0010 [ 38]: 641454e004536e75 +Block 0010 [ 39]: e9598a67bb9e010d +Block 0010 [ 40]: 1ae66b61ba9f5fef +Block 0010 [ 41]: 8b5689f5690af5ad +Block 0010 [ 42]: c1ebe39324b7ad10 +Block 0010 [ 43]: 8d8f1a6801c2fcee +Block 0010 [ 44]: d0353ed7e27aa209 +Block 0010 [ 45]: 408cb141d33c282a +Block 0010 [ 46]: 3cec0ba738981253 +Block 0010 [ 47]: 12836a28882cec64 +Block 0010 [ 48]: 55ab2da84afa1e73 +Block 0010 [ 49]: e012d8cbba55e196 +Block 0010 [ 50]: 225e87dd4ba15450 +Block 0010 [ 51]: 97f5b2554a53497a +Block 0010 [ 52]: 858392bd86337c0c +Block 0010 [ 53]: 1e9d8ec565431484 +Block 0010 [ 54]: be25bb549fc5ad96 +Block 0010 [ 55]: 8cae37b6260f400f +Block 0010 [ 56]: 2fa1da62403ff22b +Block 0010 [ 57]: 73ef3777277c6deb +Block 0010 [ 58]: 47ffd701d6a542c1 +Block 0010 [ 59]: d21c8613fc4ad450 +Block 0010 [ 60]: 741808629149aa29 +Block 0010 [ 61]: 0dee7475344afc27 +Block 0010 [ 62]: 69f162864b0d0ba8 +Block 0010 [ 63]: e723d4414dc01d9a +Block 0010 [ 64]: 1348ee9b939a06aa +Block 0010 [ 65]: 0cd2fa596564c17b +Block 0010 [ 66]: 1e529efd0d986c9d +Block 0010 [ 67]: b2b66e0e074ceade +Block 0010 [ 68]: 2d92a419c4c8b2f6 +Block 0010 [ 69]: eb7f325a95c509b4 +Block 0010 [ 70]: 3e20722bdf51270f +Block 0010 [ 71]: cfb337b8069800dd +Block 0010 [ 72]: c2e783ed1deac4f7 +Block 0010 [ 73]: 820ca55e6f468a61 +Block 0010 [ 74]: e51d88ed7abbd53f +Block 0010 [ 75]: 0110137ae06a717c +Block 0010 [ 76]: e416efaaf88fa43f +Block 0010 [ 77]: d76b9191eb39cf1e +Block 0010 [ 78]: ff49071437550b9c +Block 0010 [ 79]: 10dd148cc497ef63 +Block 0010 [ 80]: a70022eda2cf3692 +Block 0010 [ 81]: cdbdaea580ee59ff +Block 0010 [ 82]: 0f393ef6ea262c86 +Block 0010 [ 83]: f7d2feedf24469e1 +Block 0010 [ 84]: ac673c848c7c11f0 +Block 0010 [ 85]: e2c6354b76edff69 +Block 0010 [ 86]: 9f3dab5a88e0cb1b +Block 0010 [ 87]: 4609b3ae383b07d1 +Block 0010 [ 88]: 452daef051d9f3d6 +Block 0010 [ 89]: 7a5f2288dd741e6c +Block 0010 [ 90]: d455d1c591fa4c41 +Block 0010 [ 91]: 5a6f3fc8998258ef +Block 0010 [ 92]: 9bf8f2287a507cb0 +Block 0010 [ 93]: fb689cdc1a0e2ec6 +Block 0010 [ 94]: 272c0ea1d13bed54 +Block 0010 [ 95]: 05efb5ef98d49b9c +Block 0010 [ 96]: 264f51dd7bc348d1 +Block 0010 [ 97]: eb7b7b016051f0c3 +Block 0010 [ 98]: d3b72adf5543f07b +Block 0010 [ 99]: 73ee82f261419fb2 +Block 0010 [100]: 00c085c84a773a67 +Block 0010 [101]: bf55023775668108 +Block 0010 [102]: 3f30efe65be484b0 +Block 0010 [103]: 0aaa470843840516 +Block 0010 [104]: aea27105281c4c68 +Block 0010 [105]: d42cbbc0b5c316dd +Block 0010 [106]: 5df8a9f6551e5787 +Block 0010 [107]: 5cd2d2ede1052bd1 +Block 0010 [108]: 8223be1c3f2a91f4 +Block 0010 [109]: d54cc5cb370bd398 +Block 0010 [110]: 86ec22bbbba3940b +Block 0010 [111]: 0db251349f6a3137 +Block 0010 [112]: 3c7977d6b2c09e56 +Block 0010 [113]: 18ac0e2c26a7153b +Block 0010 [114]: ffc869a4015c94e6 +Block 0010 [115]: cae6a67f644893ab +Block 0010 [116]: 3ce008df44afc6e8 +Block 0010 [117]: 470862fa2a90614b +Block 0010 [118]: 07aeeb964afbdd88 +Block 0010 [119]: efc86a0ca279152c +Block 0010 [120]: 92a22900f73b72d4 +Block 0010 [121]: ee34e6f5e7f5e239 +Block 0010 [122]: b6f97e0f206095cd +Block 0010 [123]: 05e6087e10ee7492 +Block 0010 [124]: 44a92d7be34a8939 +Block 0010 [125]: 142bf79b42ded951 +Block 0010 [126]: 28c3115e72f22ac2 +Block 0010 [127]: 3ea771b69e0e20c8 +Block 0011 [ 0]: 67512d1435cecef5 +Block 0011 [ 1]: 7b3853dbd933132a +Block 0011 [ 2]: 04edbbc01b9db0c7 +Block 0011 [ 3]: 530b98198518d7f8 +Block 0011 [ 4]: be9dc30940a7f1c1 +Block 0011 [ 5]: 51a3c35cc4e653ed +Block 0011 [ 6]: 48b8b2a91f5ab89b +Block 0011 [ 7]: 34aa887df6ebc1d6 +Block 0011 [ 8]: 92808ce9522cd897 +Block 0011 [ 9]: 624554ca78ddf7c6 +Block 0011 [ 10]: d8d17dd8cf835d2e +Block 0011 [ 11]: d0f2fe94951e9b56 +Block 0011 [ 12]: 143aa6711edf3fc5 +Block 0011 [ 13]: 07f2c6da0bd5af83 +Block 0011 [ 14]: 4e2e8b6acaea8714 +Block 0011 [ 15]: 7b0af574d5bd3bc2 +Block 0011 [ 16]: 9c8143772912448d +Block 0011 [ 17]: 613bfb2f7aefae51 +Block 0011 [ 18]: e80c8ce117a18814 +Block 0011 [ 19]: 575113a5a2211a01 +Block 0011 [ 20]: 6f3b49506671f35c +Block 0011 [ 21]: ec1c2d06d6697205 +Block 0011 [ 22]: bae45b9236962eed +Block 0011 [ 23]: 3627b2e939003bab +Block 0011 [ 24]: 21774e1f96ad4838 +Block 0011 [ 25]: 2f800b944b7f6e57 +Block 0011 [ 26]: f0f2ff9fa1e034ca +Block 0011 [ 27]: 568079414c1f5a64 +Block 0011 [ 28]: e0baa5b7614e4eb5 +Block 0011 [ 29]: efa7e51a03dd0222 +Block 0011 [ 30]: 5c50c5b5b5c5d9a1 +Block 0011 [ 31]: e954ba4be27d866d +Block 0011 [ 32]: e57766953b5f9969 +Block 0011 [ 33]: ecb7768b12667cbf +Block 0011 [ 34]: 4301f0b613246862 +Block 0011 [ 35]: d93ffef1cb456260 +Block 0011 [ 36]: 0766ad3114adbb26 +Block 0011 [ 37]: 74eb304b074faa52 +Block 0011 [ 38]: d27a3c9fbafd5b4b +Block 0011 [ 39]: e0ef96f6ed891ad1 +Block 0011 [ 40]: 48f176fa99f985bb +Block 0011 [ 41]: 1974187aeee6d69f +Block 0011 [ 42]: 1ebd104a6633296d +Block 0011 [ 43]: 7ee2a80d355fd18c +Block 0011 [ 44]: 54a44e3c90c36dc6 +Block 0011 [ 45]: 9b0e66f2251bbb4c +Block 0011 [ 46]: 40f28eb7dda899b2 +Block 0011 [ 47]: 2ae0fa589b6250e1 +Block 0011 [ 48]: cd597aa36c476ce6 +Block 0011 [ 49]: 2eeb9ab504f496e0 +Block 0011 [ 50]: feec00a7be156598 +Block 0011 [ 51]: 30f53c1d18968187 +Block 0011 [ 52]: 6f9bafc19dcc2d61 +Block 0011 [ 53]: 73dc2454808cae11 +Block 0011 [ 54]: dcfd7e7fbedaacef +Block 0011 [ 55]: 4202bfb9dad21ea0 +Block 0011 [ 56]: 79c44999c00cba6f +Block 0011 [ 57]: 602afb4925164920 +Block 0011 [ 58]: 0d08bb98820069e0 +Block 0011 [ 59]: 38181becacb9e937 +Block 0011 [ 60]: db1e2b378e2d2a64 +Block 0011 [ 61]: 6adf3645089751a7 +Block 0011 [ 62]: c63fd2836c831717 +Block 0011 [ 63]: 65e2f35fbe50b14d +Block 0011 [ 64]: 891eaf8bdf76f675 +Block 0011 [ 65]: d941b71fe6f89a8e +Block 0011 [ 66]: 9d58bc95cd06559d +Block 0011 [ 67]: 6dc168dd4383a7d8 +Block 0011 [ 68]: f4b6cad30a873798 +Block 0011 [ 69]: 9a0e5c1331340531 +Block 0011 [ 70]: 083a83268a0330d0 +Block 0011 [ 71]: 8bd4149399bc73c8 +Block 0011 [ 72]: 8864a769ea615522 +Block 0011 [ 73]: 5784251b23d40f2c +Block 0011 [ 74]: b130e47a99eb64bc +Block 0011 [ 75]: da0ef3e1b92c46d5 +Block 0011 [ 76]: 531761fde0a4d6f2 +Block 0011 [ 77]: 2856066cd9d39c8e +Block 0011 [ 78]: 26d416107a1ef8ea +Block 0011 [ 79]: eba3079322eb430b +Block 0011 [ 80]: 9f6777c77a534d6b +Block 0011 [ 81]: bb626be70b4118c2 +Block 0011 [ 82]: b61ba058ea11eb53 +Block 0011 [ 83]: 382829f1d82aeae2 +Block 0011 [ 84]: 59cdae0ac56c6a78 +Block 0011 [ 85]: c7f42b8d265831bb +Block 0011 [ 86]: e013aaa66cf03cfb +Block 0011 [ 87]: f278b94057371dac +Block 0011 [ 88]: b26876fc500fa63e +Block 0011 [ 89]: 86527c99624a20ef +Block 0011 [ 90]: 73d7f4bd8683351e +Block 0011 [ 91]: 8354b399f12c0892 +Block 0011 [ 92]: 303d51dc0f77aef1 +Block 0011 [ 93]: eb114cf73af14329 +Block 0011 [ 94]: 74267d913db759de +Block 0011 [ 95]: 4fec949ebb3a3a64 +Block 0011 [ 96]: 15c00518ee4adf4e +Block 0011 [ 97]: 1d8cf07d6edde475 +Block 0011 [ 98]: e954c8785b16eb02 +Block 0011 [ 99]: 18074db3522c065d +Block 0011 [100]: 9b1b13cad5b57149 +Block 0011 [101]: 67ac13cad09e6cf7 +Block 0011 [102]: 61c268324fc61790 +Block 0011 [103]: f917ea42c1d4aae8 +Block 0011 [104]: 4afd468a75a15d75 +Block 0011 [105]: d45f3f38a34cb34c +Block 0011 [106]: 042cd7de25fd793e +Block 0011 [107]: 72fd02ada9fd644c +Block 0011 [108]: 46bbf9e498748729 +Block 0011 [109]: c45d10a65df0705d +Block 0011 [110]: 7d1f38b2568fd31e +Block 0011 [111]: 4e5eeab86f171c9c +Block 0011 [112]: e4191d1be8010499 +Block 0011 [113]: b7e7d91669716bfd +Block 0011 [114]: a84d284ad0514913 +Block 0011 [115]: de2454e3bb127b5c +Block 0011 [116]: 5593b362d34e3236 +Block 0011 [117]: 3a97eddc885470b8 +Block 0011 [118]: d49f0989505a3e20 +Block 0011 [119]: a49c29255d2ff768 +Block 0011 [120]: 36229ee8d46ded5d +Block 0011 [121]: befd8c33cbd6a7cf +Block 0011 [122]: 54d6daeb3ae7f016 +Block 0011 [123]: 2dd97a531e383ad2 +Block 0011 [124]: 7c86ce3b32d61ef6 +Block 0011 [125]: c6febd2bdbc678b9 +Block 0011 [126]: 7e4d8df7e7698f3c +Block 0011 [127]: 876051736f645364 +Block 0012 [ 0]: 0c9c55c8c1620b64 +Block 0012 [ 1]: 60b4c465dea9fd66 +Block 0012 [ 2]: 80c4d91289e2cea1 +Block 0012 [ 3]: b3c19eb8f6a03464 +Block 0012 [ 4]: 3b5b05dc4d420ced +Block 0012 [ 5]: 89e95d39facd3e56 +Block 0012 [ 6]: d0fe580b20f54961 +Block 0012 [ 7]: 9dfd776ddc178519 +Block 0012 [ 8]: 43601291ac36ceb8 +Block 0012 [ 9]: fc448a430a414e43 +Block 0012 [ 10]: 6cfc44fc6bafb7d7 +Block 0012 [ 11]: cd74be8ef63bb036 +Block 0012 [ 12]: a92d857c51adb1cd +Block 0012 [ 13]: d784ad0dfe421f93 +Block 0012 [ 14]: d0d6f388f86e6275 +Block 0012 [ 15]: 2fccfe5542011b8f +Block 0012 [ 16]: 830f41df00cb8562 +Block 0012 [ 17]: 976279793f5baea7 +Block 0012 [ 18]: 67a85e07df4f61fb +Block 0012 [ 19]: eea4a6c342ab9d54 +Block 0012 [ 20]: 148054c90a308c58 +Block 0012 [ 21]: 922b40f7d90153b2 +Block 0012 [ 22]: 7c562e744deeae9e +Block 0012 [ 23]: a5d4d940c2efb1ca +Block 0012 [ 24]: 00bbe2405465d5f2 +Block 0012 [ 25]: 3768c36968e26558 +Block 0012 [ 26]: bb52349064085d3e +Block 0012 [ 27]: 90e8687c09aa2434 +Block 0012 [ 28]: f21c0ec2f9965d13 +Block 0012 [ 29]: f8e377812defeda9 +Block 0012 [ 30]: 3f90e96ef79c7b2d +Block 0012 [ 31]: 452f07cd905ed4b6 +Block 0012 [ 32]: 807f5b0ef43b1da5 +Block 0012 [ 33]: afc8923951d0d506 +Block 0012 [ 34]: 7a1f5bc2c3ef6c85 +Block 0012 [ 35]: 767992930b29dccb +Block 0012 [ 36]: ecf316593a3da03e +Block 0012 [ 37]: 49c984f3f324e369 +Block 0012 [ 38]: e8216f5411b321af +Block 0012 [ 39]: 55789c3b8e15c9b2 +Block 0012 [ 40]: 4aea9d0280102cac +Block 0012 [ 41]: f4b3419d7c1f3f32 +Block 0012 [ 42]: 390aee0ac1556c0f +Block 0012 [ 43]: 8cdf8035335a8cd3 +Block 0012 [ 44]: d7997f4c4defb85a +Block 0012 [ 45]: 3f6131d71978435b +Block 0012 [ 46]: 30e1589f1892c546 +Block 0012 [ 47]: 7ccc22fc004e262b +Block 0012 [ 48]: 3b9215cdd270937f +Block 0012 [ 49]: 738a9ba2b1780540 +Block 0012 [ 50]: 35661290e6c6e77a +Block 0012 [ 51]: c03a8402fa536118 +Block 0012 [ 52]: 06c68549dad7e79c +Block 0012 [ 53]: 4ea85ff21f91688a +Block 0012 [ 54]: 59b6c557566d8806 +Block 0012 [ 55]: 40e5d7c4370d7591 +Block 0012 [ 56]: ae1fffaab705275e +Block 0012 [ 57]: 311a8f16b107444d +Block 0012 [ 58]: e5218d5c0bcbd99a +Block 0012 [ 59]: d186ea05ba56676f +Block 0012 [ 60]: 834789ab82021d40 +Block 0012 [ 61]: 7df30c5e52929b05 +Block 0012 [ 62]: e8207858eb71f698 +Block 0012 [ 63]: 1d58bde3a5edc66b +Block 0012 [ 64]: ceb2be18efa776bb +Block 0012 [ 65]: e835d65827147cbe +Block 0012 [ 66]: 6a2f35bdd998fd14 +Block 0012 [ 67]: 9d40dd80a0faeae7 +Block 0012 [ 68]: e538055c4776c3ac +Block 0012 [ 69]: 5d1742a4d04bc17f +Block 0012 [ 70]: 163deb8613e852b3 +Block 0012 [ 71]: 15d2f3f0737d3bc7 +Block 0012 [ 72]: 2f5a3cdc39a7b986 +Block 0012 [ 73]: 2326e3dab7239771 +Block 0012 [ 74]: e72036e822906a5c +Block 0012 [ 75]: c5a549423bee0d90 +Block 0012 [ 76]: 902eb12ae0f8d17f +Block 0012 [ 77]: 25bb071a5a78682c +Block 0012 [ 78]: 454ada6ff7c65c8d +Block 0012 [ 79]: 8492e6db1f105910 +Block 0012 [ 80]: 0277193e9f99c46f +Block 0012 [ 81]: fa22603432d42324 +Block 0012 [ 82]: 8a83b69bc46f979c +Block 0012 [ 83]: a520140a955e36e4 +Block 0012 [ 84]: b1433fe02f4a349e +Block 0012 [ 85]: aa1113f8aae73b93 +Block 0012 [ 86]: d488ad30309c8498 +Block 0012 [ 87]: 0aec428b70ef549a +Block 0012 [ 88]: 93170079c6ab05e5 +Block 0012 [ 89]: e8f49d763907ca5a +Block 0012 [ 90]: 457e13af2923e613 +Block 0012 [ 91]: 6fa78b78b42065ef +Block 0012 [ 92]: 9338260a24b8d082 +Block 0012 [ 93]: a0b96f8e1511c315 +Block 0012 [ 94]: a513b98c6efdf8fa +Block 0012 [ 95]: 1b85f765892bcbc3 +Block 0012 [ 96]: ad139621f5e39c91 +Block 0012 [ 97]: 2d402ba231db9ef5 +Block 0012 [ 98]: b4deb002cc235b5e +Block 0012 [ 99]: 9f0d0a1a3ed3483a +Block 0012 [100]: 21d90ab3bd5a3701 +Block 0012 [101]: 586ab5d2732fb68b +Block 0012 [102]: 01af6c32fb19d96d +Block 0012 [103]: fbd622c0016b31db +Block 0012 [104]: 3d4b5bc64a1d3339 +Block 0012 [105]: f1e8dfb0e0e91615 +Block 0012 [106]: 0f8843aadd79799d +Block 0012 [107]: a79a41fa433b098e +Block 0012 [108]: c5fedee1f6b6efcb +Block 0012 [109]: ccf42653de5fded8 +Block 0012 [110]: bdeda18634357c04 +Block 0012 [111]: 9528f3f925aa6429 +Block 0012 [112]: 82d67bfd27bd3925 +Block 0012 [113]: 3a3abffe6da6bfd1 +Block 0012 [114]: c07698673bd83a29 +Block 0012 [115]: bb0b238da2a7505c +Block 0012 [116]: 7e0526fc80fb6f31 +Block 0012 [117]: f495215c56b1848f +Block 0012 [118]: 3bcf9ea980c04c60 +Block 0012 [119]: 4450f7ac179026f5 +Block 0012 [120]: 0fa713d584b0a2fe +Block 0012 [121]: a89d1b4ce7960428 +Block 0012 [122]: dd7afc7858234e35 +Block 0012 [123]: 8ff4307248170757 +Block 0012 [124]: 4eb19cae24707b6f +Block 0012 [125]: 44c60d71ffa74cb8 +Block 0012 [126]: 0c9c8a53e0cd54da +Block 0012 [127]: a734adb6b6a5601f +Block 0013 [ 0]: 8275ecaccc771ae4 +Block 0013 [ 1]: 712b01e69497cdf0 +Block 0013 [ 2]: 9301d483ae27c7fb +Block 0013 [ 3]: fab6f5ae8d80d6e2 +Block 0013 [ 4]: 1235754d7932aa8b +Block 0013 [ 5]: a65db531a30872df +Block 0013 [ 6]: 19241353a5c8f96b +Block 0013 [ 7]: 1c7b9a24517300ed +Block 0013 [ 8]: 6abeebaa06ff012c +Block 0013 [ 9]: f7cbcf3ee950e0f2 +Block 0013 [ 10]: 3192592d817f7b66 +Block 0013 [ 11]: 1753f87f59ea11c4 +Block 0013 [ 12]: 1fee77a9b4337ed8 +Block 0013 [ 13]: c57c6ca745154184 +Block 0013 [ 14]: f820b945f1e9848a +Block 0013 [ 15]: 2ce9b26044524919 +Block 0013 [ 16]: a40929146cea1a84 +Block 0013 [ 17]: e2687b7dea13e4dd +Block 0013 [ 18]: e7e5f533dc5348aa +Block 0013 [ 19]: b58852ce4757e67c +Block 0013 [ 20]: fc907be6692563c0 +Block 0013 [ 21]: 3900c482ae9f91a5 +Block 0013 [ 22]: 5e295867887dcb10 +Block 0013 [ 23]: 654906b021548d4c +Block 0013 [ 24]: 9f4d7100ad4a0312 +Block 0013 [ 25]: b429941b74aca665 +Block 0013 [ 26]: 24302c7eef140f1b +Block 0013 [ 27]: b2bb1998988469b9 +Block 0013 [ 28]: aef2456f2a23f536 +Block 0013 [ 29]: 9fe997b9e5f076df +Block 0013 [ 30]: 964e88a1b7455124 +Block 0013 [ 31]: 48cbd6d14f3570cd +Block 0013 [ 32]: 01393d0b6b8dfed3 +Block 0013 [ 33]: 1ede0fc24adb8a29 +Block 0013 [ 34]: b8698c7cbd4fef3b +Block 0013 [ 35]: d0cd560c48061859 +Block 0013 [ 36]: 38eabed90236c69c +Block 0013 [ 37]: 867fb49f0e401a6b +Block 0013 [ 38]: ac87846cb0a5255e +Block 0013 [ 39]: 38c89d68e6b27e7f +Block 0013 [ 40]: 15ddcc3b0d8f4e59 +Block 0013 [ 41]: 7e5cd39650a9b8fd +Block 0013 [ 42]: 037597aed87bc45f +Block 0013 [ 43]: 8d7729fcbfeeb3a8 +Block 0013 [ 44]: caa354f01d65dc58 +Block 0013 [ 45]: c8957f052aa6a2e8 +Block 0013 [ 46]: 41c0210c578d283f +Block 0013 [ 47]: 83241ee0a1d76e67 +Block 0013 [ 48]: dbd133c3b5071d9b +Block 0013 [ 49]: 3a82af1f045c7285 +Block 0013 [ 50]: cfb78c8781164562 +Block 0013 [ 51]: a2f06254dc93d0c1 +Block 0013 [ 52]: e9cc73236c17b29f +Block 0013 [ 53]: 068bf08bba7082b0 +Block 0013 [ 54]: 5602462888861686 +Block 0013 [ 55]: 9be6367d1bc248e8 +Block 0013 [ 56]: 224ec458cc53339f +Block 0013 [ 57]: cdd7f95f932daeb7 +Block 0013 [ 58]: 5b128a412967f6ae +Block 0013 [ 59]: f9b3ed0a3cf99ce3 +Block 0013 [ 60]: bbd741a9ecbebf82 +Block 0013 [ 61]: 79c4e0435f9b7bb1 +Block 0013 [ 62]: 2b692de61c9e122a +Block 0013 [ 63]: cf7bdf8929ff7d59 +Block 0013 [ 64]: 422af9f6beedd316 +Block 0013 [ 65]: 83fdd9968655f57e +Block 0013 [ 66]: 2984ca92c54934e6 +Block 0013 [ 67]: aa0a628463151601 +Block 0013 [ 68]: c9adc7e102d4e926 +Block 0013 [ 69]: f01036ed1cb180e2 +Block 0013 [ 70]: 49e6b538ffd429b0 +Block 0013 [ 71]: b034ead8223c890f +Block 0013 [ 72]: 7ff44edfd6d170e9 +Block 0013 [ 73]: 7a41e3fcb64f759a +Block 0013 [ 74]: 27c8457a4e19fc28 +Block 0013 [ 75]: 1ae95273cda41b9b +Block 0013 [ 76]: fd793d32c7886449 +Block 0013 [ 77]: 0dbd25cc3a9ba9bf +Block 0013 [ 78]: 7bc222a6d2cc88c2 +Block 0013 [ 79]: fcb5b217e43bf8a2 +Block 0013 [ 80]: 22185604488f3d51 +Block 0013 [ 81]: ffd19371c12ee9df +Block 0013 [ 82]: adb9635e61703b6a +Block 0013 [ 83]: aad4fc87c38c44dc +Block 0013 [ 84]: 8a5de034bf8bcb91 +Block 0013 [ 85]: 4873cf7a56632be6 +Block 0013 [ 86]: 640ad84374233383 +Block 0013 [ 87]: 4a78c06e4d724966 +Block 0013 [ 88]: f9af0f5f824ce1ac +Block 0013 [ 89]: 5cd8b424e7987fb2 +Block 0013 [ 90]: 63a749f3340a966f +Block 0013 [ 91]: 3be590e829a06c9d +Block 0013 [ 92]: 673669b53e42dfe0 +Block 0013 [ 93]: 4e13df1d4e996c1d +Block 0013 [ 94]: a75e97ca20914ac7 +Block 0013 [ 95]: 06a3ce6a1baa5937 +Block 0013 [ 96]: 8aef6dcf730b9d73 +Block 0013 [ 97]: 24c7e0759a8d4c95 +Block 0013 [ 98]: 9caf4fd316f89fc1 +Block 0013 [ 99]: 0a3319bc486637f3 +Block 0013 [100]: a0fea48059b4450e +Block 0013 [101]: c77f3111142a13c2 +Block 0013 [102]: f0e6031c0805f946 +Block 0013 [103]: 132dc730e7f7a4ac +Block 0013 [104]: a629264d94905d3a +Block 0013 [105]: fadc414873129baa +Block 0013 [106]: 86517cdce724b24d +Block 0013 [107]: 16a1b02cd6e750be +Block 0013 [108]: 04289a27673f1549 +Block 0013 [109]: b8701a1caf37ac45 +Block 0013 [110]: efc66529c438bcce +Block 0013 [111]: a3c68f26e26dde3e +Block 0013 [112]: 56f23362b31847df +Block 0013 [113]: 9d7e4e342eaf8a46 +Block 0013 [114]: a13cff8866f5ef49 +Block 0013 [115]: bf9964d57fe229ee +Block 0013 [116]: 3740b695ae269e6e +Block 0013 [117]: ba792fe8b9716c43 +Block 0013 [118]: 30f784e82dd0ab70 +Block 0013 [119]: e4f57cc08fa17da7 +Block 0013 [120]: 3d71b796968fa33f +Block 0013 [121]: 2dca46842308f3ec +Block 0013 [122]: 47db0499dfa0d745 +Block 0013 [123]: 195e3c1253ad056e +Block 0013 [124]: fbb2fe6b8b8d6721 +Block 0013 [125]: 971cb37328f7faec +Block 0013 [126]: c8bd887da9b96df4 +Block 0013 [127]: bc7f954a8dd53168 +Block 0014 [ 0]: 6b65de3737ca07f1 +Block 0014 [ 1]: a38cfa10cc2fc974 +Block 0014 [ 2]: e5198f5c31a8e3bf +Block 0014 [ 3]: 698e33db1e1ae03f +Block 0014 [ 4]: 14aea1e3f7b1bd88 +Block 0014 [ 5]: 23c7733a20c49535 +Block 0014 [ 6]: 708851504763e011 +Block 0014 [ 7]: 76d0191e1a308c7d +Block 0014 [ 8]: f221c44adbd9b02b +Block 0014 [ 9]: 45aa8795ece63642 +Block 0014 [ 10]: fd36d6c27b71b0bd +Block 0014 [ 11]: 0466e55299276cb5 +Block 0014 [ 12]: 725c41544c13d899 +Block 0014 [ 13]: f39ff57f5cd5f7f6 +Block 0014 [ 14]: f75b827542bb8030 +Block 0014 [ 15]: 8da5061bcb6a1352 +Block 0014 [ 16]: a108e3b625bdbbcf +Block 0014 [ 17]: eac50e88be6d72a8 +Block 0014 [ 18]: 52d7194dd03336c7 +Block 0014 [ 19]: 56025dc3f3ad86d9 +Block 0014 [ 20]: d7eb51a996fbcba4 +Block 0014 [ 21]: 3d590b82bab819bb +Block 0014 [ 22]: 1b6c96df6bf886f7 +Block 0014 [ 23]: ac25d4e6becf60d8 +Block 0014 [ 24]: 4af59e5a68c7a59e +Block 0014 [ 25]: fb1b4dfa899c0105 +Block 0014 [ 26]: 633e645801856648 +Block 0014 [ 27]: fa8ddeec6a823001 +Block 0014 [ 28]: a93a5e82198f77dd +Block 0014 [ 29]: 7ae453b0348fc6b2 +Block 0014 [ 30]: b6ebc8deda885562 +Block 0014 [ 31]: 72b3e8c629996c84 +Block 0014 [ 32]: 1317aeba03e2ad29 +Block 0014 [ 33]: 5234e64535c737c1 +Block 0014 [ 34]: 3b1fd79ba314ab07 +Block 0014 [ 35]: 9590c7b6fb1ea91b +Block 0014 [ 36]: 213f6ce02e02ad0d +Block 0014 [ 37]: 335b424cc634d4df +Block 0014 [ 38]: 34c1735174d44758 +Block 0014 [ 39]: ce9dfe46f52eebea +Block 0014 [ 40]: 6d6258ac61b821ab +Block 0014 [ 41]: 622d8e13ca29ed5c +Block 0014 [ 42]: b14226e2f8fad082 +Block 0014 [ 43]: a93cb7beed7dde9e +Block 0014 [ 44]: a65734f842749fc1 +Block 0014 [ 45]: ab77788d3cf8f1ce +Block 0014 [ 46]: f52b8d0ebafeda0f +Block 0014 [ 47]: 1127e07be84bfd23 +Block 0014 [ 48]: 18686c88d0eb20ee +Block 0014 [ 49]: 40dc4902a0305d3d +Block 0014 [ 50]: 632b9eec4405efec +Block 0014 [ 51]: 4702de3a2aae239c +Block 0014 [ 52]: e48306bb379a9526 +Block 0014 [ 53]: a6ffe75f5fb984fb +Block 0014 [ 54]: 729613e8c57feda1 +Block 0014 [ 55]: 12db6c406f5109a1 +Block 0014 [ 56]: 82802a8a7d811b58 +Block 0014 [ 57]: 3d4608d23971ec28 +Block 0014 [ 58]: ddebf41cb589e3d0 +Block 0014 [ 59]: a42eeb040b316ab4 +Block 0014 [ 60]: 3d4c8ddcdc91e2aa +Block 0014 [ 61]: 5dfc6656546c3b7b +Block 0014 [ 62]: 9d3044336e86a500 +Block 0014 [ 63]: 28b157087b452bd4 +Block 0014 [ 64]: d1070174c8a7a390 +Block 0014 [ 65]: 2cdffe736e143896 +Block 0014 [ 66]: e6ce15c80ba25385 +Block 0014 [ 67]: 417c84a7716d6e88 +Block 0014 [ 68]: f23a783da3ee4d2d +Block 0014 [ 69]: f537e7ce5c1c0c39 +Block 0014 [ 70]: f46211b54393895e +Block 0014 [ 71]: 8c1ff4607c78b5ff +Block 0014 [ 72]: 7a21a28042361b41 +Block 0014 [ 73]: d9d58f1b9ecc30de +Block 0014 [ 74]: 9a14fdb7b925ca4e +Block 0014 [ 75]: d6f7e86f1f500aa7 +Block 0014 [ 76]: c67fcb17f8ea4dd5 +Block 0014 [ 77]: 5f8d1c92691b14f1 +Block 0014 [ 78]: 104380e8c6d970cc +Block 0014 [ 79]: 7e353764f8c4619e +Block 0014 [ 80]: 030a672223596dcf +Block 0014 [ 81]: 6a78a93e7ebb6a14 +Block 0014 [ 82]: ca4c3cd24c3241d4 +Block 0014 [ 83]: ffb2874333097bf1 +Block 0014 [ 84]: 05316d934e1b5aab +Block 0014 [ 85]: 6ea2923030b2957b +Block 0014 [ 86]: 58be8db0cfb34d06 +Block 0014 [ 87]: 817cd34fcb68b398 +Block 0014 [ 88]: 6d25bb5ce9050af7 +Block 0014 [ 89]: 4f9fafe3d7836fc6 +Block 0014 [ 90]: 6b7a93aa1cbda794 +Block 0014 [ 91]: 12ae5bba84ff7fd9 +Block 0014 [ 92]: 1218cc6230a5eb3b +Block 0014 [ 93]: 4bbe6b14f7016cef +Block 0014 [ 94]: 712c225c222af1ed +Block 0014 [ 95]: eb274453bb34e6b7 +Block 0014 [ 96]: 5281165a73e35393 +Block 0014 [ 97]: a94e6d7fa4fa9d4b +Block 0014 [ 98]: cdac43d087fbf972 +Block 0014 [ 99]: c355f65033fff80c +Block 0014 [100]: 468d2835f99af1df +Block 0014 [101]: 97e10c620d78e48e +Block 0014 [102]: 4f7b455aa232f45a +Block 0014 [103]: 5642a41b8ba9ee5b +Block 0014 [104]: faab295a130f9450 +Block 0014 [105]: 354f050566475e75 +Block 0014 [106]: 1c147cc5765a61a5 +Block 0014 [107]: 546efd3bc03ae530 +Block 0014 [108]: 60d4770b9f8a3f15 +Block 0014 [109]: 4255516387bcc8cf +Block 0014 [110]: a2790cee31f12d9e +Block 0014 [111]: a61eb9ad582e94f2 +Block 0014 [112]: 2eef0642ebdb8b8e +Block 0014 [113]: 0dc8d04ae9e3a9c6 +Block 0014 [114]: b7d4a52e7df1cb7a +Block 0014 [115]: cb0cd12cbd577028 +Block 0014 [116]: fe77a376f1b80f27 +Block 0014 [117]: 55278752a92407f0 +Block 0014 [118]: 9d0c1acd148e5559 +Block 0014 [119]: 340d1b249a9f55e5 +Block 0014 [120]: e6b7fe56fb8beb34 +Block 0014 [121]: bfd595920d4c4730 +Block 0014 [122]: 53b698d6f41e0cdd +Block 0014 [123]: 25fd2b8c6fe7f60a +Block 0014 [124]: fcea31c1417d4d81 +Block 0014 [125]: 24d019132ba89b33 +Block 0014 [126]: 2c948d81f3196e46 +Block 0014 [127]: 5c9666b2e5bc5342 +Block 0015 [ 0]: b7a4c2b9a0491aa5 +Block 0015 [ 1]: d574fd14cfdceaa2 +Block 0015 [ 2]: 161e82ce52847ee9 +Block 0015 [ 3]: 87235a1ff06b32e3 +Block 0015 [ 4]: 25a15747451e13fb +Block 0015 [ 5]: 6fa0f15caf9a7b92 +Block 0015 [ 6]: bca7275912ca1bbe +Block 0015 [ 7]: 007874cae255dc7a +Block 0015 [ 8]: 1c2fc30cbbe3d6b0 +Block 0015 [ 9]: 037bf8fc3ccc60cf +Block 0015 [ 10]: c632e67a7898f97f +Block 0015 [ 11]: 1dbb324de0847142 +Block 0015 [ 12]: a22b1b5771e2fbc8 +Block 0015 [ 13]: 951e518ea73e1b70 +Block 0015 [ 14]: f65e911962b66a90 +Block 0015 [ 15]: 50ea5c8c71cc78c9 +Block 0015 [ 16]: 070b252030059571 +Block 0015 [ 17]: da2472f16b32c9d1 +Block 0015 [ 18]: ac991222ab1c212a +Block 0015 [ 19]: d201f392decf93bf +Block 0015 [ 20]: e4110edc7738c123 +Block 0015 [ 21]: 36c2faaffb2119a0 +Block 0015 [ 22]: d1243bf8984c942a +Block 0015 [ 23]: 380d70ebee5c486b +Block 0015 [ 24]: 4095da46a98e2e18 +Block 0015 [ 25]: f2d74db9726fcf0a +Block 0015 [ 26]: 48a1e0775c37687c +Block 0015 [ 27]: cb8f3d9e25f552f1 +Block 0015 [ 28]: 0595754dcb15d8c2 +Block 0015 [ 29]: c2bfae8c0074c656 +Block 0015 [ 30]: ce3a27a49064fd5e +Block 0015 [ 31]: bd9badeb87e71305 +Block 0015 [ 32]: 1332e5808a07898f +Block 0015 [ 33]: 447fc211923c7aae +Block 0015 [ 34]: 1b59d811f5a4174a +Block 0015 [ 35]: 9d77b466014e9c29 +Block 0015 [ 36]: abeeb15d32d4f5b0 +Block 0015 [ 37]: ed14c5bef6f13c5c +Block 0015 [ 38]: aebe3967f70094b2 +Block 0015 [ 39]: 5f9ed7861a69e3bd +Block 0015 [ 40]: b322fb95fae25c6b +Block 0015 [ 41]: 0590b396ab8b5077 +Block 0015 [ 42]: b9321d42b1b1a985 +Block 0015 [ 43]: f35f227bd94dd2f4 +Block 0015 [ 44]: caec578bdf1f9b9d +Block 0015 [ 45]: 25e0ba5c01a2c4bc +Block 0015 [ 46]: fc07695214589266 +Block 0015 [ 47]: 54503ba957c594ea +Block 0015 [ 48]: eaabac32c678ccad +Block 0015 [ 49]: 21175b4197624e82 +Block 0015 [ 50]: 0cebeb3aa5f3bbcb +Block 0015 [ 51]: c008177cfbfb0d60 +Block 0015 [ 52]: 2f801d1502ff2f12 +Block 0015 [ 53]: 7fcd684c565db3f6 +Block 0015 [ 54]: 62ff2ec38af1cafd +Block 0015 [ 55]: 914667196dd9d450 +Block 0015 [ 56]: 972932ff5be835e9 +Block 0015 [ 57]: 23a8368787a7335c +Block 0015 [ 58]: b2cae148e1b122c0 +Block 0015 [ 59]: 199b383227c05f08 +Block 0015 [ 60]: 1cb16ee897019269 +Block 0015 [ 61]: 510e0d439341c00d +Block 0015 [ 62]: 35cf3ac76d96edb3 +Block 0015 [ 63]: d940abb75cfa43cd +Block 0015 [ 64]: 3c4b3944ab11c757 +Block 0015 [ 65]: 4d9ccb418c25ad94 +Block 0015 [ 66]: 91c86a252e663075 +Block 0015 [ 67]: cb49238e4e128b91 +Block 0015 [ 68]: 6f11423978bed4e7 +Block 0015 [ 69]: 753573f75865542c +Block 0015 [ 70]: 650c04ea734b4449 +Block 0015 [ 71]: 880ebf2c16710b74 +Block 0015 [ 72]: 05fc3180f4138190 +Block 0015 [ 73]: ed721684f7dceb37 +Block 0015 [ 74]: e31f19710f7b0fe4 +Block 0015 [ 75]: 0463bb78656fae47 +Block 0015 [ 76]: 074f9a2583ca00e9 +Block 0015 [ 77]: 2f13e8db7be5969a +Block 0015 [ 78]: 9b5b5730a2f128b3 +Block 0015 [ 79]: f7cd36dc5c92e817 +Block 0015 [ 80]: f820cd395a7a86ae +Block 0015 [ 81]: 123f8d7cf1618e07 +Block 0015 [ 82]: 152f4e50e44750c7 +Block 0015 [ 83]: ad4c70516d41bab9 +Block 0015 [ 84]: 8bcb61e869a0807e +Block 0015 [ 85]: 9755cf2f6719e65f +Block 0015 [ 86]: c2c6ba4f970cb4ef +Block 0015 [ 87]: 457911ad86c1abc6 +Block 0015 [ 88]: 578a53b51ce1efcd +Block 0015 [ 89]: f6320caff8a0504b +Block 0015 [ 90]: 83ca5981239afa37 +Block 0015 [ 91]: 70c661c67ab92780 +Block 0015 [ 92]: 10bcfbdac8f01e97 +Block 0015 [ 93]: 94bdbd2609891909 +Block 0015 [ 94]: 1bb65f7b193d8c2f +Block 0015 [ 95]: f31366a301363c4f +Block 0015 [ 96]: 99fec0db195ee485 +Block 0015 [ 97]: ed4bc8f8d3ba4536 +Block 0015 [ 98]: 0a70086003a26263 +Block 0015 [ 99]: 345032952fe4effc +Block 0015 [100]: 2bb2e1a44c1f1326 +Block 0015 [101]: 21a33eddbefcbc66 +Block 0015 [102]: bb19b421edb329fa +Block 0015 [103]: 543c1de6fe03d61f +Block 0015 [104]: 8aed84a2fecd94d6 +Block 0015 [105]: b35b89557851b663 +Block 0015 [106]: f6a7be0e250ef42f +Block 0015 [107]: 3a290088a027faf7 +Block 0015 [108]: bce61f09e1310a04 +Block 0015 [109]: 0333886001acdb36 +Block 0015 [110]: 9d74d89762647905 +Block 0015 [111]: f49619828e0119bf +Block 0015 [112]: b7e584f437a3b086 +Block 0015 [113]: 252e2d8ecd0bd16d +Block 0015 [114]: 53ee0c9765660436 +Block 0015 [115]: 91f68f6a9a1b0bdb +Block 0015 [116]: c632c4e10c36b1b6 +Block 0015 [117]: 33145dd6a602a6b0 +Block 0015 [118]: 2d587480bdb222a3 +Block 0015 [119]: f0fd639a4880f0c3 +Block 0015 [120]: 211d17b5b475ef02 +Block 0015 [121]: f1fcfd14a52db0f6 +Block 0015 [122]: 064389ed71e2ef25 +Block 0015 [123]: c2acdfbb258af29a +Block 0015 [124]: dc814aa34930fc48 +Block 0015 [125]: 30ba919b66d5ddf3 +Block 0015 [126]: 1b3834a139ab499a +Block 0015 [127]: d5e674d6693bcd45 +Block 0016 [ 0]: 8f53985b3a68410e +Block 0016 [ 1]: f55650961898842f +Block 0016 [ 2]: 037efaa1cd23a098 +Block 0016 [ 3]: 3a31cf1b76c2758c +Block 0016 [ 4]: f4199b180eac0136 +Block 0016 [ 5]: 300b003da6fcbaf8 +Block 0016 [ 6]: f609345ed3053222 +Block 0016 [ 7]: 62b9a7bf80c4dd81 +Block 0016 [ 8]: 04f7fb1c97f94a19 +Block 0016 [ 9]: 20b4c7dcec025e7c +Block 0016 [ 10]: 86823ef3e716e64a +Block 0016 [ 11]: cc7b74f62ba0184b +Block 0016 [ 12]: b9346d50cf2e7038 +Block 0016 [ 13]: 49d8cc875f611ddf +Block 0016 [ 14]: 47e3d6bca96310b2 +Block 0016 [ 15]: 2b648844a3fc609a +Block 0016 [ 16]: d4324fd7f2bc2e0b +Block 0016 [ 17]: 9362f80e1d3fdc2b +Block 0016 [ 18]: 49225d97af47012d +Block 0016 [ 19]: 8035ab307fb284dd +Block 0016 [ 20]: 177fe4ed6ed816b5 +Block 0016 [ 21]: 91c26e2152032480 +Block 0016 [ 22]: 30604656e18cc814 +Block 0016 [ 23]: 70437cfb1f32fb43 +Block 0016 [ 24]: d1036df63cc6eee4 +Block 0016 [ 25]: 5dee0b34fa2c7707 +Block 0016 [ 26]: da74b65827b46a81 +Block 0016 [ 27]: 84e911553294f034 +Block 0016 [ 28]: d279a6a1e4904a83 +Block 0016 [ 29]: 8688e6979c347b06 +Block 0016 [ 30]: 740f20573f3de341 +Block 0016 [ 31]: d81c19459351f118 +Block 0016 [ 32]: 8f3262e1b89a27fd +Block 0016 [ 33]: efbef386858e969a +Block 0016 [ 34]: 48d49036dd2a63cc +Block 0016 [ 35]: 51a53f1cd99c239d +Block 0016 [ 36]: 69f02d56b69b080c +Block 0016 [ 37]: b58cdc35836d7e6a +Block 0016 [ 38]: b64765b6745af0db +Block 0016 [ 39]: d0cffdc5cd0ddd71 +Block 0016 [ 40]: d026cf29b9eadaec +Block 0016 [ 41]: 190259edbc0e09fb +Block 0016 [ 42]: fea21cb0734e621f +Block 0016 [ 43]: 3b8c48529162eca2 +Block 0016 [ 44]: 53ec43dd984b9ad2 +Block 0016 [ 45]: 7274f4839297fcc2 +Block 0016 [ 46]: 14d7275914f4a84c +Block 0016 [ 47]: cdff249b4bae7c12 +Block 0016 [ 48]: b32a9a4b48d6f22f +Block 0016 [ 49]: 0320bd7e7f48b4f4 +Block 0016 [ 50]: 42be9ca3da80c6fa +Block 0016 [ 51]: 358bd7e3eb8fada9 +Block 0016 [ 52]: dfe1dbbfca140598 +Block 0016 [ 53]: 1b4db106a75053c1 +Block 0016 [ 54]: 0b91f05e6625f711 +Block 0016 [ 55]: 1001ad2ee30a9d82 +Block 0016 [ 56]: 740b036b5748bea0 +Block 0016 [ 57]: 3168f06e761fb765 +Block 0016 [ 58]: 71d10306a2fe7973 +Block 0016 [ 59]: 1faa34f320f87936 +Block 0016 [ 60]: d91db435304a17a5 +Block 0016 [ 61]: 30430ec5d6f3ad2a +Block 0016 [ 62]: cb197690414e41b6 +Block 0016 [ 63]: f6779e44ae25c2d7 +Block 0016 [ 64]: 6b94597b50f594af +Block 0016 [ 65]: 075a280984aed80a +Block 0016 [ 66]: d54a50a999345ae3 +Block 0016 [ 67]: 2caab9d8cfd6d3e2 +Block 0016 [ 68]: 7851c907c69feb69 +Block 0016 [ 69]: 5ca2e8965cd0c96c +Block 0016 [ 70]: 28ab1227b13da504 +Block 0016 [ 71]: 686f14d57531b14b +Block 0016 [ 72]: 3b5a11c818a1ec14 +Block 0016 [ 73]: 5a4f6b4be61809aa +Block 0016 [ 74]: ce900ccf21eededc +Block 0016 [ 75]: d0d2187be91e67a5 +Block 0016 [ 76]: a92d1b14da7b0101 +Block 0016 [ 77]: 71d2ac9a9bfc3eab +Block 0016 [ 78]: 3c7857f37e5fbd14 +Block 0016 [ 79]: 1c64281a444f792f +Block 0016 [ 80]: b999c6b9f7738096 +Block 0016 [ 81]: db1e1182630f00f6 +Block 0016 [ 82]: 0807b0bd2f37fa78 +Block 0016 [ 83]: e9f307ad3c4e8b74 +Block 0016 [ 84]: 79c841933e70c1da +Block 0016 [ 85]: cb663333c394a92a +Block 0016 [ 86]: 13c6ab3371e87b02 +Block 0016 [ 87]: 047fa349cd71f72e +Block 0016 [ 88]: 6fd668ad1c07ee9d +Block 0016 [ 89]: 890e7546afcd50f3 +Block 0016 [ 90]: 8fd5e4eb7d62ece7 +Block 0016 [ 91]: fe3efd3fba7302ed +Block 0016 [ 92]: d0dd2f8d2a385e85 +Block 0016 [ 93]: 5b6271669fae3e0a +Block 0016 [ 94]: d83477ae521cb0cd +Block 0016 [ 95]: 032ea7a424669708 +Block 0016 [ 96]: a74455ce63af6f96 +Block 0016 [ 97]: f622454de29f608b +Block 0016 [ 98]: 237f28a1d7382575 +Block 0016 [ 99]: f38e224b5ab4c811 +Block 0016 [100]: 2e28cbd870f74ad5 +Block 0016 [101]: 9b02a754a53eea78 +Block 0016 [102]: 64ef1fa6609e77de +Block 0016 [103]: a9a49c283d2b79eb +Block 0016 [104]: 628ff70e0dcb9620 +Block 0016 [105]: e5eab5e455302769 +Block 0016 [106]: be2ead710a9b85f7 +Block 0016 [107]: 4139690693c5d1de +Block 0016 [108]: cb79d6351ff25123 +Block 0016 [109]: 766767dd95ef924a +Block 0016 [110]: 7a57e4a083f964f3 +Block 0016 [111]: f5a7eff23abff0e6 +Block 0016 [112]: fa62e8e8b38623f9 +Block 0016 [113]: aa3edb47ecdc0377 +Block 0016 [114]: cfcf56fd674a3d2d +Block 0016 [115]: 3cdd8c5d983a1bb4 +Block 0016 [116]: fb6f6bceb5db5b26 +Block 0016 [117]: 89fd727b53ec9e75 +Block 0016 [118]: 97600bafacfb83ef +Block 0016 [119]: 8b094ea63455850c +Block 0016 [120]: 4ba706a569460f60 +Block 0016 [121]: f3f4781fabbc676f +Block 0016 [122]: 5c5e73cc56d1ce93 +Block 0016 [123]: 2ea6a7856cc27120 +Block 0016 [124]: 9cb33d05ffd27f28 +Block 0016 [125]: 79796b487462562e +Block 0016 [126]: 30c5bd9655219145 +Block 0016 [127]: b994aa85d73dd810 +Block 0017 [ 0]: 25af99c7dd2c4372 +Block 0017 [ 1]: 9737394118f299bb +Block 0017 [ 2]: d2de9ee44efcd374 +Block 0017 [ 3]: fc03033c2fdc08f0 +Block 0017 [ 4]: 3f880894b78aed28 +Block 0017 [ 5]: 6c8a9e4ef84e12eb +Block 0017 [ 6]: bbfda7a204c749ae +Block 0017 [ 7]: 5bd6718dc48c323b +Block 0017 [ 8]: b90c762a037aeae9 +Block 0017 [ 9]: 649d8a54f608176c +Block 0017 [ 10]: 786afe00b006a485 +Block 0017 [ 11]: e37a432bc2cc9822 +Block 0017 [ 12]: de19379656716c29 +Block 0017 [ 13]: fcf6fbc0df6c2616 +Block 0017 [ 14]: a5707ebe5c43ce27 +Block 0017 [ 15]: 0022eb27e8a28351 +Block 0017 [ 16]: 8eba1f29bb9649e9 +Block 0017 [ 17]: a14ede529e77c948 +Block 0017 [ 18]: 679d0fd464f5a7c1 +Block 0017 [ 19]: 1d5e242fe07d4499 +Block 0017 [ 20]: e5d9ecb94d96426f +Block 0017 [ 21]: b55c342da4c92a45 +Block 0017 [ 22]: 46f6ffbe914fa536 +Block 0017 [ 23]: 8831b50a46c6b9fa +Block 0017 [ 24]: 98d34ad0e739e4d9 +Block 0017 [ 25]: 34c995923bd2c3c1 +Block 0017 [ 26]: 42cf969aab5942c1 +Block 0017 [ 27]: c9b437a842d875b3 +Block 0017 [ 28]: 5925675213537e33 +Block 0017 [ 29]: d46c58bc487a34f6 +Block 0017 [ 30]: 806a4619dbfc03dd +Block 0017 [ 31]: b45295959812bcec +Block 0017 [ 32]: aebc1f1371e2fc47 +Block 0017 [ 33]: f09f1a1c3121e7cd +Block 0017 [ 34]: 4d1d9a11dcae8b67 +Block 0017 [ 35]: f38a9759bc5d17c6 +Block 0017 [ 36]: 2e20740f5524dae3 +Block 0017 [ 37]: 40f1d3e4f71041db +Block 0017 [ 38]: 844a27fd35e7da66 +Block 0017 [ 39]: b4b854cae05e9e9a +Block 0017 [ 40]: 5e6964c38ac50871 +Block 0017 [ 41]: 3c18498deb7d982e +Block 0017 [ 42]: 647c7a8c145356a1 +Block 0017 [ 43]: d737b5773a76b636 +Block 0017 [ 44]: 48037c19a592c44d +Block 0017 [ 45]: acc24bb4b271d775 +Block 0017 [ 46]: 393897168ab1a9e2 +Block 0017 [ 47]: 06f964d7bea429f1 +Block 0017 [ 48]: bf04c3f8df53259d +Block 0017 [ 49]: 3149fc5f1f43994e +Block 0017 [ 50]: 063319bf41479907 +Block 0017 [ 51]: 1854281df4864ba9 +Block 0017 [ 52]: 92edcdb4c263a03d +Block 0017 [ 53]: d780b3bd4caae765 +Block 0017 [ 54]: 02b5d0ebf0cda39d +Block 0017 [ 55]: a0f5a5211ca3bd07 +Block 0017 [ 56]: 5636022ed78cfd97 +Block 0017 [ 57]: 1cce86221184e63a +Block 0017 [ 58]: 6a012fa4ac7d9313 +Block 0017 [ 59]: 93f395e140a8fbe4 +Block 0017 [ 60]: 985ecc071322bcf3 +Block 0017 [ 61]: 1ea42f6dec2fc89e +Block 0017 [ 62]: 3ec7da55e6f3650b +Block 0017 [ 63]: 1617261e0b1e885f +Block 0017 [ 64]: 27ce65eca8e2c7ec +Block 0017 [ 65]: 5e989683b826cca5 +Block 0017 [ 66]: 1095accf790c67e6 +Block 0017 [ 67]: 092884b7e068124e +Block 0017 [ 68]: 3a9e2a925ea19187 +Block 0017 [ 69]: c6962ab8187140c5 +Block 0017 [ 70]: 9edd8afc314c0744 +Block 0017 [ 71]: cd9cea440f39fa0b +Block 0017 [ 72]: adc2e65d1d5f4612 +Block 0017 [ 73]: 8d271b9d779bd3c1 +Block 0017 [ 74]: 8d98f39f07ed40d5 +Block 0017 [ 75]: 9a350daa5e1185bc +Block 0017 [ 76]: a50155990d517040 +Block 0017 [ 77]: 9737cb03db154e43 +Block 0017 [ 78]: 5b62dbdb43a7ae36 +Block 0017 [ 79]: 718dcab45caefd1d +Block 0017 [ 80]: 198ce38e06e84855 +Block 0017 [ 81]: a334190d64a3c358 +Block 0017 [ 82]: 9324456d4c2eebc5 +Block 0017 [ 83]: ac6677767b0e8589 +Block 0017 [ 84]: 99fcdac332ca73cb +Block 0017 [ 85]: ccc87d5cbd040dd9 +Block 0017 [ 86]: 7ba741ad5e014fdc +Block 0017 [ 87]: 04b98a5dbb9858d3 +Block 0017 [ 88]: 48f83e1d55782a3e +Block 0017 [ 89]: 7fdc976538a9605d +Block 0017 [ 90]: 34696b986f3276a1 +Block 0017 [ 91]: d2e5952e0e8c1513 +Block 0017 [ 92]: d3d6f03d384bff58 +Block 0017 [ 93]: ea50faff9497e736 +Block 0017 [ 94]: 923567f0b71393cb +Block 0017 [ 95]: 999b7be894d806fa +Block 0017 [ 96]: bff84f0b93f93adb +Block 0017 [ 97]: 36550f9621d9e1d2 +Block 0017 [ 98]: 98b3bd27313db1ee +Block 0017 [ 99]: a0fd0d843f1d9c2a +Block 0017 [100]: c2af36b6ac1bff35 +Block 0017 [101]: cf1f5dd60b32741c +Block 0017 [102]: a73467edf0046e40 +Block 0017 [103]: bc88e01dc0b3ead3 +Block 0017 [104]: 76c60f22353f13da +Block 0017 [105]: b4426004fec916fc +Block 0017 [106]: 515940091ded755a +Block 0017 [107]: e2e1105fc6ce1c1f +Block 0017 [108]: b97b4018796ee38b +Block 0017 [109]: a24f467b8b444546 +Block 0017 [110]: 82ae89263b2f72b9 +Block 0017 [111]: c88e67246622bf95 +Block 0017 [112]: df50ff12b0d1b15b +Block 0017 [113]: 51bbb2e9a6005550 +Block 0017 [114]: 91cb844ea94a3792 +Block 0017 [115]: bbc07e5ad7e82009 +Block 0017 [116]: 60c62d377e5be69a +Block 0017 [117]: 4c56a5431c2b3e76 +Block 0017 [118]: 193324e72943dc20 +Block 0017 [119]: 25441dced351b789 +Block 0017 [120]: 040d53f6f1512c9d +Block 0017 [121]: 130e48953283e7d1 +Block 0017 [122]: 2d326e978ff8130a +Block 0017 [123]: 2000c765fc63f72f +Block 0017 [124]: ccd4bc7dbd218e40 +Block 0017 [125]: 163c65d57d0ec8d8 +Block 0017 [126]: 4ec3e83cf091cb11 +Block 0017 [127]: d0c37c0476196abf +Block 0018 [ 0]: cc16b40ad5747e4e +Block 0018 [ 1]: fc9cea26229979aa +Block 0018 [ 2]: 71c2ce72e2969701 +Block 0018 [ 3]: 791cbfcbc3dcbeac +Block 0018 [ 4]: 9f87de4eb6bd1c78 +Block 0018 [ 5]: b2299523780f6e83 +Block 0018 [ 6]: 3cab22b2571bb002 +Block 0018 [ 7]: e84bc808526ba1c4 +Block 0018 [ 8]: 1e6da5a620d1763a +Block 0018 [ 9]: d43041a9052354e7 +Block 0018 [ 10]: 2adfd5010c727d11 +Block 0018 [ 11]: 07d408bc985c47fc +Block 0018 [ 12]: cb0735fa154efb20 +Block 0018 [ 13]: 5d9cd38a29c6c593 +Block 0018 [ 14]: e6acfe5ea8e9d8de +Block 0018 [ 15]: 93fbaf947ed59bc3 +Block 0018 [ 16]: 8bcd692f1b47b6a6 +Block 0018 [ 17]: 9f1234cb7653eb74 +Block 0018 [ 18]: cb83ea20a50f3f7e +Block 0018 [ 19]: 00f9c746d11f2227 +Block 0018 [ 20]: f7402e994a250230 +Block 0018 [ 21]: 982c78f9d63107c2 +Block 0018 [ 22]: a34d035c8788a81e +Block 0018 [ 23]: fe5e3d1993d4e860 +Block 0018 [ 24]: 1ebf3aef0c6b10bf +Block 0018 [ 25]: f28b8fff6ccc27a4 +Block 0018 [ 26]: d2b59050aff341c5 +Block 0018 [ 27]: 5a820ee8a39572fe +Block 0018 [ 28]: 6f963e89e1c54e52 +Block 0018 [ 29]: fc1b178e6b97e4ac +Block 0018 [ 30]: 7e9a9c313e4efb8a +Block 0018 [ 31]: 9d471890801a8ab3 +Block 0018 [ 32]: 5f7e0de0ae64c1db +Block 0018 [ 33]: 1ec697d242aa51f5 +Block 0018 [ 34]: 7b8e0b9d219a2029 +Block 0018 [ 35]: 8d08d76f52bdaa6e +Block 0018 [ 36]: 66b0c4a5cc40d799 +Block 0018 [ 37]: 942c84e05d97fffa +Block 0018 [ 38]: bbb862ba00327b6d +Block 0018 [ 39]: bef2092925db17f5 +Block 0018 [ 40]: 4e31cd9dfdbae400 +Block 0018 [ 41]: 46e528452ba8856e +Block 0018 [ 42]: 35d3f0910e752f79 +Block 0018 [ 43]: 8e47a91e5c44463f +Block 0018 [ 44]: 96a6455e5072b431 +Block 0018 [ 45]: 8b64f956cd48dc1b +Block 0018 [ 46]: 12e0ddef27aafdfe +Block 0018 [ 47]: 82da7ffbc3218c92 +Block 0018 [ 48]: 23390a781bd0644c +Block 0018 [ 49]: 52e2ed3f08f461c6 +Block 0018 [ 50]: 97d91cd63f28c587 +Block 0018 [ 51]: bc6a807a9e196641 +Block 0018 [ 52]: c357ff64c15aa403 +Block 0018 [ 53]: e6f47d41087b1758 +Block 0018 [ 54]: 7fd24e9a098fe9ea +Block 0018 [ 55]: eb58ad3c5f2ddb88 +Block 0018 [ 56]: d886a29c6469e51e +Block 0018 [ 57]: ae13ef46d94ca5dd +Block 0018 [ 58]: f0227a75ed41f619 +Block 0018 [ 59]: f726ec8a5fb32899 +Block 0018 [ 60]: c2cb9cb1c7d6b1dc +Block 0018 [ 61]: 94e5e8d5c146ccd1 +Block 0018 [ 62]: a0914d9445df8d98 +Block 0018 [ 63]: baf4a01d25ce6f40 +Block 0018 [ 64]: 972694d1ba5d3873 +Block 0018 [ 65]: 28f525a4ae211560 +Block 0018 [ 66]: a60d9477eae5e7b6 +Block 0018 [ 67]: cedfb2bd66a74fea +Block 0018 [ 68]: cf2a8795c497b516 +Block 0018 [ 69]: e311460034b81676 +Block 0018 [ 70]: 6101999febaa6a08 +Block 0018 [ 71]: 0f414973e6b7ddd4 +Block 0018 [ 72]: 26eddd7b3b23e908 +Block 0018 [ 73]: 814c7d4f61874c5d +Block 0018 [ 74]: 066f27c905b2af02 +Block 0018 [ 75]: 6af0b152e8bf5b4a +Block 0018 [ 76]: 2b83b61d77577710 +Block 0018 [ 77]: 772757c567f0994e +Block 0018 [ 78]: 889bac540251180e +Block 0018 [ 79]: 5390db775c6a30a1 +Block 0018 [ 80]: f0601f43f63551b8 +Block 0018 [ 81]: 0fe587bca1b1370e +Block 0018 [ 82]: be51925e9397cb1f +Block 0018 [ 83]: 684159088b026646 +Block 0018 [ 84]: 83947593200cc262 +Block 0018 [ 85]: 6cff3fef11aaf653 +Block 0018 [ 86]: a0a529421d6a0530 +Block 0018 [ 87]: fc223917e2488077 +Block 0018 [ 88]: e920da644e7d73cd +Block 0018 [ 89]: 8d7df56be3c7fcd0 +Block 0018 [ 90]: 572aaa5457003a1f +Block 0018 [ 91]: a7f3c24f4ccbf913 +Block 0018 [ 92]: 62eb3807aa42d76d +Block 0018 [ 93]: 74d20a064449b36c +Block 0018 [ 94]: 7f3d004af82674eb +Block 0018 [ 95]: e7aa407b9f2eaffe +Block 0018 [ 96]: 05bde0b72833ede7 +Block 0018 [ 97]: 9a529018d06b1a9c +Block 0018 [ 98]: f0556a4f08155dab +Block 0018 [ 99]: 0317465138ab2d53 +Block 0018 [100]: f7fc8b6426c8adbd +Block 0018 [101]: 08769ef8a31b39a0 +Block 0018 [102]: 80b95e7ed0f363e5 +Block 0018 [103]: 1d2325b8911f1fd3 +Block 0018 [104]: fedeb4b73b6da294 +Block 0018 [105]: 7c9d104827324f47 +Block 0018 [106]: 9d9c711b4934c8c8 +Block 0018 [107]: 9092d112bd03fb13 +Block 0018 [108]: 01d8fe13c4484a3a +Block 0018 [109]: dd422ca0ce650b57 +Block 0018 [110]: 144c0dfb1afcc139 +Block 0018 [111]: 1c7b4586ca53a390 +Block 0018 [112]: 6c29fc6c25d93b1e +Block 0018 [113]: 1922cf3c0eb0eae1 +Block 0018 [114]: 692a594c53cbfe12 +Block 0018 [115]: a17a0f7581201eea +Block 0018 [116]: 8e3a0fab7f26a4a7 +Block 0018 [117]: 6e81606212a24250 +Block 0018 [118]: 46f94f333f1b0c80 +Block 0018 [119]: 8fb29cf58b02f7dc +Block 0018 [120]: 751c4d607d662b1f +Block 0018 [121]: 011b138878fd82f2 +Block 0018 [122]: ca6cda756a32627e +Block 0018 [123]: 18c16dd1426c836e +Block 0018 [124]: 1553aab1ec673729 +Block 0018 [125]: 05277de65fa287a5 +Block 0018 [126]: 7c4752344b98dbfa +Block 0018 [127]: ca946d048696b8d2 +Block 0019 [ 0]: f1e7830fd25fae5c +Block 0019 [ 1]: e722f627ee827cc2 +Block 0019 [ 2]: dbdda4176637645f +Block 0019 [ 3]: fed075b832e6d60d +Block 0019 [ 4]: 31b4a8232cf0f6d1 +Block 0019 [ 5]: 995419324435bafe +Block 0019 [ 6]: 7f034194b003a341 +Block 0019 [ 7]: e32c00e524f3b869 +Block 0019 [ 8]: 9221dd1d02dd673c +Block 0019 [ 9]: 1fe96cc1a3e8b14a +Block 0019 [ 10]: e13fd9248af85745 +Block 0019 [ 11]: 6f6abd3d84d25afd +Block 0019 [ 12]: 6b53d7b291973d82 +Block 0019 [ 13]: dfd270032800df30 +Block 0019 [ 14]: 51b8b57c7af83dc3 +Block 0019 [ 15]: f1a2060eff3d4026 +Block 0019 [ 16]: f04338a9d4813cb5 +Block 0019 [ 17]: 8dab994cf44555a1 +Block 0019 [ 18]: 0016c2f1d822e72b +Block 0019 [ 19]: 03611fcb09c2844a +Block 0019 [ 20]: 47931e1325d7bfa2 +Block 0019 [ 21]: 6e2435a2f5877a18 +Block 0019 [ 22]: 17a14f7a04c53a6c +Block 0019 [ 23]: e2b9ac28f13fdb09 +Block 0019 [ 24]: b02fbc04a68ef177 +Block 0019 [ 25]: b68dbee4c144f618 +Block 0019 [ 26]: 0b1bb54e3a825b1f +Block 0019 [ 27]: 5e8cb76f0a913e10 +Block 0019 [ 28]: 520a35dbde052eec +Block 0019 [ 29]: 7e5f3cdec8f738f0 +Block 0019 [ 30]: f0f3b74b494d30da +Block 0019 [ 31]: 6da6d4492f5d5fd6 +Block 0019 [ 32]: 4569a5b7c1000bc4 +Block 0019 [ 33]: 6a98b609ae531d7f +Block 0019 [ 34]: 5f3a721f2348256e +Block 0019 [ 35]: 174e5479fb6e0de4 +Block 0019 [ 36]: 3f6b47e56470492d +Block 0019 [ 37]: 5e1f6f163f69b6be +Block 0019 [ 38]: f6e998276b3b2e4c +Block 0019 [ 39]: bcfa0808cd732980 +Block 0019 [ 40]: 41664d9e8bd9ab30 +Block 0019 [ 41]: a88910d2af9784fe +Block 0019 [ 42]: 0e58fd96c2b966dd +Block 0019 [ 43]: 0975037f9bebef17 +Block 0019 [ 44]: fe17294a640aaf22 +Block 0019 [ 45]: d82e4987ba7c5899 +Block 0019 [ 46]: 4f5875e05025ed65 +Block 0019 [ 47]: f47b5bc7d131c365 +Block 0019 [ 48]: 88949148f6381880 +Block 0019 [ 49]: 49790168c570dbc6 +Block 0019 [ 50]: 91179f41bc61d381 +Block 0019 [ 51]: 964e6647b2240b9d +Block 0019 [ 52]: 469a2ca044a46f99 +Block 0019 [ 53]: 775719640dd3ea02 +Block 0019 [ 54]: c326dd47988e09e8 +Block 0019 [ 55]: 4b89a1a069646be5 +Block 0019 [ 56]: dbdc5efe88ee654f +Block 0019 [ 57]: a591fe65df404742 +Block 0019 [ 58]: e9e4ed0c20f77666 +Block 0019 [ 59]: 914d772c94508d51 +Block 0019 [ 60]: 73799663310c1cf8 +Block 0019 [ 61]: 004529e670391934 +Block 0019 [ 62]: 96298c287e11af1f +Block 0019 [ 63]: 4764493038171a0c +Block 0019 [ 64]: 99ae7d71ebaf7e2d +Block 0019 [ 65]: d64eb6712f31477c +Block 0019 [ 66]: 33006d2453c52a29 +Block 0019 [ 67]: f456ea4e8dffa076 +Block 0019 [ 68]: f02b73dab38ddb48 +Block 0019 [ 69]: 89a4f3e96b085ec1 +Block 0019 [ 70]: 09fb004b8f42a6f7 +Block 0019 [ 71]: d021ef6317f882d8 +Block 0019 [ 72]: 290f3c3c926f7b1c +Block 0019 [ 73]: dabdfda18f650705 +Block 0019 [ 74]: 08a5e3a99446a79f +Block 0019 [ 75]: 53f8f9da1dddbd37 +Block 0019 [ 76]: d74f4c4c9a5f1e24 +Block 0019 [ 77]: 873af7345e779b6e +Block 0019 [ 78]: e5700386448f5d64 +Block 0019 [ 79]: 8c8bf0c2e92f6e8c +Block 0019 [ 80]: a61cc56c8cb40a09 +Block 0019 [ 81]: 8ab9deff5491f6cc +Block 0019 [ 82]: 8d90f91fdb55411f +Block 0019 [ 83]: 42f1723a12eacd4a +Block 0019 [ 84]: 62ea21253514ef3e +Block 0019 [ 85]: 8be3a6b87b767626 +Block 0019 [ 86]: e53f23ab3302fab7 +Block 0019 [ 87]: 8d7406f24d644e37 +Block 0019 [ 88]: 11eb7eeae417a83c +Block 0019 [ 89]: 9378ff2094390edd +Block 0019 [ 90]: 0cab6e06dea4e6d7 +Block 0019 [ 91]: e1a91d302fcb830b +Block 0019 [ 92]: 05a8b103c49b749e +Block 0019 [ 93]: b835a812caa13495 +Block 0019 [ 94]: 9e4a7d6008dc0d07 +Block 0019 [ 95]: 18d0fa5ba8e5d485 +Block 0019 [ 96]: 9e9398529ce75aca +Block 0019 [ 97]: 17057081a418bacf +Block 0019 [ 98]: 4e0f27d1838154bd +Block 0019 [ 99]: 8d44877ca2051aa8 +Block 0019 [100]: 0a4cd6358d00bf87 +Block 0019 [101]: 7c0bff02bb67c59c +Block 0019 [102]: aa3fa4ef9b5dd781 +Block 0019 [103]: 97a50d863ffc53d9 +Block 0019 [104]: 7eb0b749989ef4eb +Block 0019 [105]: 42f2c7f29e17413c +Block 0019 [106]: 645d879ee4b51f59 +Block 0019 [107]: c762cc190f4efb3f +Block 0019 [108]: 770003ec55c205d9 +Block 0019 [109]: 42846df1c4848f87 +Block 0019 [110]: 624ea1aba2a7b90e +Block 0019 [111]: 381df621938f285d +Block 0019 [112]: a46b93b0ffca4de9 +Block 0019 [113]: dceffbeebcd085c6 +Block 0019 [114]: a64c1f001498c383 +Block 0019 [115]: 6a5b51a09044452e +Block 0019 [116]: 198bcaa970ec0793 +Block 0019 [117]: 4927e17271e075e9 +Block 0019 [118]: 655157bfc11bc960 +Block 0019 [119]: 5820ba92b019f490 +Block 0019 [120]: a6404d587984349d +Block 0019 [121]: a3b6baa1ee83ff71 +Block 0019 [122]: 01bd468653db5771 +Block 0019 [123]: 41bb6a30fd950b20 +Block 0019 [124]: cbebc0f2d3027bbe +Block 0019 [125]: b1ba5e6e7fa4566e +Block 0019 [126]: c18c520e0cd81007 +Block 0019 [127]: 59769107732ed252 +Block 0020 [ 0]: f7a02540719722b2 +Block 0020 [ 1]: 793647276c046ccd +Block 0020 [ 2]: a14522df2ec9b017 +Block 0020 [ 3]: 40410f02a5eec424 +Block 0020 [ 4]: 20d579f606b8ed32 +Block 0020 [ 5]: 48f51282fca74fa4 +Block 0020 [ 6]: a39c1f758e17b6c9 +Block 0020 [ 7]: 23439532dad82587 +Block 0020 [ 8]: 56140cf3ddec83cc +Block 0020 [ 9]: 8103508d26c631c0 +Block 0020 [ 10]: da9965e5fcfb1f83 +Block 0020 [ 11]: e25790b322b33fad +Block 0020 [ 12]: b1abd7a58bb1d66e +Block 0020 [ 13]: b7758cdd576e14ac +Block 0020 [ 14]: 5bc5572e7650aac5 +Block 0020 [ 15]: bc6293a4d42190da +Block 0020 [ 16]: bbd6b2a25f3eb6f1 +Block 0020 [ 17]: 6eb99b410f0e9b09 +Block 0020 [ 18]: e6801c5d1e4c07a5 +Block 0020 [ 19]: 6e4e0a6c98f91237 +Block 0020 [ 20]: acdc7d2e237f9c58 +Block 0020 [ 21]: d0b6bd85fe772acb +Block 0020 [ 22]: 3af46184aab0899b +Block 0020 [ 23]: d64a30d79a2a8656 +Block 0020 [ 24]: 6bb8c7cc6580c8a8 +Block 0020 [ 25]: 9dba817881a14fc5 +Block 0020 [ 26]: 11b2964245a99f2f +Block 0020 [ 27]: b05f003f2c62dbb9 +Block 0020 [ 28]: 8efc3f9e00d0742c +Block 0020 [ 29]: eef2abfa36296b80 +Block 0020 [ 30]: 33f504553ee7aefb +Block 0020 [ 31]: e515f172cbc15f96 +Block 0020 [ 32]: f1b5332ce18d2068 +Block 0020 [ 33]: 629f71da3729dd4c +Block 0020 [ 34]: ca8740743450e9e4 +Block 0020 [ 35]: cd2a84fe1e4beadc +Block 0020 [ 36]: 337e086b0da43f8d +Block 0020 [ 37]: af09ba250c1835d1 +Block 0020 [ 38]: c726a7ae8cd2b9cc +Block 0020 [ 39]: a6d6197a3b32d1a5 +Block 0020 [ 40]: 7c59469d97032861 +Block 0020 [ 41]: 18870f3f29d0ff6c +Block 0020 [ 42]: e223d42a40f6fc86 +Block 0020 [ 43]: 2b097cab1e3e202b +Block 0020 [ 44]: 1067b29eac4bf9ef +Block 0020 [ 45]: a17d4321bd1ffc44 +Block 0020 [ 46]: 28bd1bc360800b69 +Block 0020 [ 47]: efbd0b5a815fab67 +Block 0020 [ 48]: dfb2c5c83c089ade +Block 0020 [ 49]: 1d72cee46ff73a07 +Block 0020 [ 50]: e65150c76a3b93ad +Block 0020 [ 51]: 01463480b6e07432 +Block 0020 [ 52]: dbb11d4d1ab842a5 +Block 0020 [ 53]: 1aa01282303809a1 +Block 0020 [ 54]: 0407d2b151f26a2e +Block 0020 [ 55]: bda5259c36ffe4e2 +Block 0020 [ 56]: 5ba64524226b17b0 +Block 0020 [ 57]: 14ebbabdc5c1081b +Block 0020 [ 58]: 8e28b79933734dcc +Block 0020 [ 59]: b1912c7bb67162da +Block 0020 [ 60]: 2246ca2915c0b57c +Block 0020 [ 61]: 44ca8e8b31882e92 +Block 0020 [ 62]: 153b19cca0f2e70f +Block 0020 [ 63]: 36c1a2b1fdbafed1 +Block 0020 [ 64]: 80b5d29d62621bd0 +Block 0020 [ 65]: 2f6b6a4977d304b0 +Block 0020 [ 66]: 8b4745ab709f83b6 +Block 0020 [ 67]: 79b5a11fba60e3ac +Block 0020 [ 68]: 5f5a066b534ccdb4 +Block 0020 [ 69]: b0a5387823264e55 +Block 0020 [ 70]: 4a8dc8d0b937aef0 +Block 0020 [ 71]: 64fe1e285c9a489b +Block 0020 [ 72]: 7e9ebfdfd7b3b128 +Block 0020 [ 73]: 3830d2dcfa33d585 +Block 0020 [ 74]: 95ddc376097e5fed +Block 0020 [ 75]: da61f020a5bd1ec0 +Block 0020 [ 76]: 58261f1a2ec1ec2a +Block 0020 [ 77]: d9d5d2badbc4b092 +Block 0020 [ 78]: 21fad4988a0d3b1a +Block 0020 [ 79]: 2515690a13cdf56a +Block 0020 [ 80]: fe9dae3553a4b5f8 +Block 0020 [ 81]: 01017f26017236f0 +Block 0020 [ 82]: e53fee225d251aa4 +Block 0020 [ 83]: 97a9dc2f4b919e45 +Block 0020 [ 84]: aba7bb7807dac22e +Block 0020 [ 85]: 8396a7f53ed6fe73 +Block 0020 [ 86]: d59d2a7855619f38 +Block 0020 [ 87]: 19e81207e1990d14 +Block 0020 [ 88]: 6af6cb67ba215ab1 +Block 0020 [ 89]: a0bd23fd1394eb2c +Block 0020 [ 90]: b8fd28ac5847a3a3 +Block 0020 [ 91]: d06e21a15fd9a785 +Block 0020 [ 92]: cbb84febca6dbed1 +Block 0020 [ 93]: ac1a9ca2f04ecc67 +Block 0020 [ 94]: c3265cfa6411f43a +Block 0020 [ 95]: 1f967f21c14b7864 +Block 0020 [ 96]: 463514566c30d67f +Block 0020 [ 97]: 9ab54cf19f8332b9 +Block 0020 [ 98]: 752ef52670d62f4f +Block 0020 [ 99]: 94c30bbb67d74756 +Block 0020 [100]: 9da7e0413f23ef7a +Block 0020 [101]: 5b14c9078edcea1c +Block 0020 [102]: f1fc1cf31932181a +Block 0020 [103]: a58aedabd43ed327 +Block 0020 [104]: 0df7f94de81d72f1 +Block 0020 [105]: 7605dd82b1ba6494 +Block 0020 [106]: b4990feceae9fdd4 +Block 0020 [107]: b111dccb67f5c7bb +Block 0020 [108]: b8fea154255b39ca +Block 0020 [109]: f89e4f433d96c7ee +Block 0020 [110]: 5b29c9419b89452f +Block 0020 [111]: d847da18c88976f3 +Block 0020 [112]: 39256fb09713f686 +Block 0020 [113]: dac4ef8fba50a8e2 +Block 0020 [114]: 661120873a7a18fd +Block 0020 [115]: 093892e68c1baf73 +Block 0020 [116]: 480b98fe82c235af +Block 0020 [117]: 59a4a56b2f12be74 +Block 0020 [118]: ed31ee49a5ada172 +Block 0020 [119]: 56785be3b6f96319 +Block 0020 [120]: f18290424c5a7936 +Block 0020 [121]: fa7ac39ca22d0d14 +Block 0020 [122]: 65c55663ec05b2dc +Block 0020 [123]: 2aea00dee01a3d80 +Block 0020 [124]: 655e16c05e192f42 +Block 0020 [125]: eff65a062d00ffe3 +Block 0020 [126]: f54f1777a25e8532 +Block 0020 [127]: 27cbbe27f5e27d94 +Block 0021 [ 0]: bfd6eab6c93af588 +Block 0021 [ 1]: ad7bf667d74382bf +Block 0021 [ 2]: 195c9027fa5471a6 +Block 0021 [ 3]: e46b052225d48ff4 +Block 0021 [ 4]: bdecfecafa6a38bc +Block 0021 [ 5]: e83caa5b213c1e8b +Block 0021 [ 6]: f7702d25f2b78730 +Block 0021 [ 7]: cc3925d4a5576071 +Block 0021 [ 8]: 45bc491d19dee84f +Block 0021 [ 9]: f9e0f6aa40ea1e2a +Block 0021 [ 10]: dfddefe2f3dffedb +Block 0021 [ 11]: 51a67880957d41b5 +Block 0021 [ 12]: b5e4c52bb847719f +Block 0021 [ 13]: c3d3d442d7d04b01 +Block 0021 [ 14]: 41b24a8baab2743c +Block 0021 [ 15]: 9b24d52938f52dff +Block 0021 [ 16]: 905f1e4aa19f311f +Block 0021 [ 17]: c218f0877c51e7ec +Block 0021 [ 18]: 349e76744f0adfe1 +Block 0021 [ 19]: ddb86c3804bf7e1a +Block 0021 [ 20]: 13ec9499abbe7937 +Block 0021 [ 21]: d1d469ae5ad012d7 +Block 0021 [ 22]: d7dd5edd9095df07 +Block 0021 [ 23]: 0216b1a8773bdfaf +Block 0021 [ 24]: 9f00d6e95b2d9ec8 +Block 0021 [ 25]: 177ff8139aaf8ddc +Block 0021 [ 26]: 91ab06e0ea538b7f +Block 0021 [ 27]: c8ee413463c95948 +Block 0021 [ 28]: b380238800f34bb7 +Block 0021 [ 29]: c348baeacae00aee +Block 0021 [ 30]: a29035c81c82cc3c +Block 0021 [ 31]: 5aa027cec856d613 +Block 0021 [ 32]: 7f1c40b8ca270064 +Block 0021 [ 33]: c1da08eb9998bc13 +Block 0021 [ 34]: d96369fba84991a5 +Block 0021 [ 35]: fd429c5bc5a47b9f +Block 0021 [ 36]: 2cb3b03b63293434 +Block 0021 [ 37]: fc16874d8a7048fd +Block 0021 [ 38]: 315165d7372d919b +Block 0021 [ 39]: e61b47c3fbb0f3e9 +Block 0021 [ 40]: c06be41275be05df +Block 0021 [ 41]: b6b0bcc0385226a8 +Block 0021 [ 42]: a0901451e99dd6c6 +Block 0021 [ 43]: 461b409bcf5e456b +Block 0021 [ 44]: f71d25ab1f2a9be4 +Block 0021 [ 45]: 305ee7a1da0bb5bd +Block 0021 [ 46]: 86de5e6c7154859d +Block 0021 [ 47]: 13153d375530110d +Block 0021 [ 48]: 36caf631256e646a +Block 0021 [ 49]: f3ee304459b4c7d8 +Block 0021 [ 50]: da5d4e8f60c5caf6 +Block 0021 [ 51]: f12e4872f6a309a5 +Block 0021 [ 52]: 5071f661e0c41de0 +Block 0021 [ 53]: 0e722f9d6c262798 +Block 0021 [ 54]: 0843991f14584c74 +Block 0021 [ 55]: f9396f94941f43a8 +Block 0021 [ 56]: 20b21b680df90975 +Block 0021 [ 57]: 5218eaa41848907c +Block 0021 [ 58]: 948a98480c904dbb +Block 0021 [ 59]: 8bbdc9bea2f2bb35 +Block 0021 [ 60]: de07b3bf633a6f7f +Block 0021 [ 61]: d3441a0e8a43ba32 +Block 0021 [ 62]: 0930cd161608ed60 +Block 0021 [ 63]: 82eac0f3f0cb4d93 +Block 0021 [ 64]: 5d2554e80c592f61 +Block 0021 [ 65]: 0b4d795191a1a0cc +Block 0021 [ 66]: 47781616e393a9f6 +Block 0021 [ 67]: 0141f3281f27b0b5 +Block 0021 [ 68]: 85f3409041a14ae0 +Block 0021 [ 69]: 5cef02eed4234029 +Block 0021 [ 70]: 20dd9d63eb26cd01 +Block 0021 [ 71]: 9d7d0a521a7af92a +Block 0021 [ 72]: d8d3e1c076a87892 +Block 0021 [ 73]: b90f777ec24e7ac0 +Block 0021 [ 74]: 9ea20e84c909e4fb +Block 0021 [ 75]: ebfd11b636e7c0c3 +Block 0021 [ 76]: 5869c138199cd51c +Block 0021 [ 77]: 82636d9abb871ac6 +Block 0021 [ 78]: f29d20bd5bdb4e69 +Block 0021 [ 79]: 23d4511db11567a9 +Block 0021 [ 80]: 3d835bc54cef8608 +Block 0021 [ 81]: 04969d7cab622099 +Block 0021 [ 82]: 3618a47cdc52b86f +Block 0021 [ 83]: 8bb7e5f00f82a717 +Block 0021 [ 84]: 78b6b0fbadb81833 +Block 0021 [ 85]: 8cea7501cda689cb +Block 0021 [ 86]: 4bdae18a70a17cc9 +Block 0021 [ 87]: 6c43ff3639b50017 +Block 0021 [ 88]: 120c5e735bdb9cac +Block 0021 [ 89]: d3c5af830d2f8a22 +Block 0021 [ 90]: 416d45e8451b7ec9 +Block 0021 [ 91]: 08e5a871de90d1a5 +Block 0021 [ 92]: e5bd017839cd86cb +Block 0021 [ 93]: 60cbd3a0f5574267 +Block 0021 [ 94]: b2311da13916fbf0 +Block 0021 [ 95]: f649c4268b3b1004 +Block 0021 [ 96]: da07e07655c4ea3e +Block 0021 [ 97]: 9b81ceea2d8cc09b +Block 0021 [ 98]: 76c82448b661e9a5 +Block 0021 [ 99]: e1600857cac5f82e +Block 0021 [100]: c276019df0aff223 +Block 0021 [101]: c4159c82ce1759c9 +Block 0021 [102]: a8819419a1ca07b5 +Block 0021 [103]: d936c69fca5ebcff +Block 0021 [104]: 5a321197a10f2110 +Block 0021 [105]: 43ecd6f6263d6a9e +Block 0021 [106]: 171147256f82baf2 +Block 0021 [107]: 408889d9a2e0ce35 +Block 0021 [108]: 4db62bb985872235 +Block 0021 [109]: 639fe3ec59c94969 +Block 0021 [110]: df52168a89a2c597 +Block 0021 [111]: cb2feded0a29878d +Block 0021 [112]: 459d214c60703bcb +Block 0021 [113]: 552d28886db5aea0 +Block 0021 [114]: 04b39edf3c3928ba +Block 0021 [115]: 8d1e04bd3620fbfd +Block 0021 [116]: 214cc46309c47dd3 +Block 0021 [117]: bb5da5d2925b3f41 +Block 0021 [118]: 3d71d050b5ae430b +Block 0021 [119]: 147073d48eaebf82 +Block 0021 [120]: 1f14584e6ab6c89f +Block 0021 [121]: 96133f813ee480ae +Block 0021 [122]: 1f360d067304e68b +Block 0021 [123]: eca5c02b7cc59bae +Block 0021 [124]: 3f6d2990b6b2f4c6 +Block 0021 [125]: b17f55e33484f2a0 +Block 0021 [126]: 8326c91f7d817407 +Block 0021 [127]: e2887aca53b66b78 +Block 0022 [ 0]: e6aebae353209478 +Block 0022 [ 1]: 73f7093c56dc1ace +Block 0022 [ 2]: cbb17f35cc2d94f0 +Block 0022 [ 3]: 207b71cc74eb4a3a +Block 0022 [ 4]: a835377b1188a381 +Block 0022 [ 5]: dea6f51eeef750e6 +Block 0022 [ 6]: 96e3f6731120ffcb +Block 0022 [ 7]: efb291d841331342 +Block 0022 [ 8]: 661fcf2917e4c7df +Block 0022 [ 9]: a2ea63a6d1bc87d5 +Block 0022 [ 10]: dce3646661bc277e +Block 0022 [ 11]: 08b4db396e39172e +Block 0022 [ 12]: 3fd3b7ed0c8f9372 +Block 0022 [ 13]: 64f933a9aa9e2c45 +Block 0022 [ 14]: f57c3b1213b0e55b +Block 0022 [ 15]: bda13485c5e6a7aa +Block 0022 [ 16]: 895a50a3e2cd9749 +Block 0022 [ 17]: 0d28357ed7a4e5b7 +Block 0022 [ 18]: fa0a4eb2ac0f950d +Block 0022 [ 19]: 020e6223653e46fd +Block 0022 [ 20]: 41ee467849f3fc13 +Block 0022 [ 21]: 2ddd403329149463 +Block 0022 [ 22]: a295bed7816b6d78 +Block 0022 [ 23]: 1af232ba23cacd51 +Block 0022 [ 24]: a32afd0f1aa57733 +Block 0022 [ 25]: c1a0195cf8bfddec +Block 0022 [ 26]: b690f9cad66ed79b +Block 0022 [ 27]: ff0dc5cb227a5d18 +Block 0022 [ 28]: f977e52d62c8c680 +Block 0022 [ 29]: a9d48b790e4e3317 +Block 0022 [ 30]: a95cb5c1da25321d +Block 0022 [ 31]: c87cf4f39475eb74 +Block 0022 [ 32]: 4cc4b06a7072c566 +Block 0022 [ 33]: 7d418a41060b64ab +Block 0022 [ 34]: a35688c3121bc461 +Block 0022 [ 35]: eda3ac1ec9757af2 +Block 0022 [ 36]: fcc499f57f65c6f0 +Block 0022 [ 37]: 7063f182bf81de29 +Block 0022 [ 38]: b052c0a286dfa31d +Block 0022 [ 39]: 6de768033d343d50 +Block 0022 [ 40]: f7126aeccef9949b +Block 0022 [ 41]: 54ac140aeb7edc36 +Block 0022 [ 42]: 681e9a2cd77288a0 +Block 0022 [ 43]: 152105f3f58885fa +Block 0022 [ 44]: 0bad8acdee14f1dd +Block 0022 [ 45]: 17ddc6ff0cdc9027 +Block 0022 [ 46]: 3960712a29f04ddf +Block 0022 [ 47]: 31a59c5ea6f5ef04 +Block 0022 [ 48]: dbdf5706690f3369 +Block 0022 [ 49]: 605e544a914b48b0 +Block 0022 [ 50]: f8b5076b859268d9 +Block 0022 [ 51]: eaa1cb07b39eb746 +Block 0022 [ 52]: 6ea36d5c167e6090 +Block 0022 [ 53]: 1e9177d5d1227f5a +Block 0022 [ 54]: 13288139d616d58e +Block 0022 [ 55]: 44d89de91c0094f2 +Block 0022 [ 56]: e1d4e392f90bed20 +Block 0022 [ 57]: cb4ca95eb02c10cb +Block 0022 [ 58]: cea536c5ef0e83e9 +Block 0022 [ 59]: 411e652988782c19 +Block 0022 [ 60]: c901bec92b3aae2f +Block 0022 [ 61]: b99853310b82da18 +Block 0022 [ 62]: b49ca7bd55c047e3 +Block 0022 [ 63]: 67a86fc6b6316c66 +Block 0022 [ 64]: b0c36eedbe865583 +Block 0022 [ 65]: 6e6f2a1e8c25bf4a +Block 0022 [ 66]: 6b12221dcfec802b +Block 0022 [ 67]: c8f78e123c452cd3 +Block 0022 [ 68]: 67ba9bd6eeb72d98 +Block 0022 [ 69]: 78dada521d580f88 +Block 0022 [ 70]: 6e75b4b8cb56e190 +Block 0022 [ 71]: 52e12f9b94421ae2 +Block 0022 [ 72]: 26d286f2cc846f83 +Block 0022 [ 73]: 2357111ee979aa38 +Block 0022 [ 74]: 2b432dd9af72cd33 +Block 0022 [ 75]: 9c6ece8d30cf1391 +Block 0022 [ 76]: 4d9a922090731d77 +Block 0022 [ 77]: 34aa94b5f4b1e909 +Block 0022 [ 78]: 029ede7220b86663 +Block 0022 [ 79]: 032e7cf13bd08994 +Block 0022 [ 80]: c957dfd60e828645 +Block 0022 [ 81]: 82f0c77773249e7d +Block 0022 [ 82]: e8a4e1ef01948e77 +Block 0022 [ 83]: 3af1103eb60fcfba +Block 0022 [ 84]: d1e5148298f8ff80 +Block 0022 [ 85]: d04723f7ddde5770 +Block 0022 [ 86]: 9cfd844a33052a27 +Block 0022 [ 87]: 3c7901823cce023c +Block 0022 [ 88]: 5325fd52717f59f1 +Block 0022 [ 89]: df61355f6a9a0aef +Block 0022 [ 90]: 3ea37bffd497f8b5 +Block 0022 [ 91]: 3bbad908578892a3 +Block 0022 [ 92]: 049747b87164eeff +Block 0022 [ 93]: 1828cb6db435ec53 +Block 0022 [ 94]: 4c96ec4e154bb840 +Block 0022 [ 95]: 7303f1a3e5392122 +Block 0022 [ 96]: 5264e0842f256c9f +Block 0022 [ 97]: 9bd3752d4828dc4f +Block 0022 [ 98]: 69b307e7e956af8f +Block 0022 [ 99]: 7d5d5d6813bcee75 +Block 0022 [100]: a3a17f8d2aad5d30 +Block 0022 [101]: ea39fb0a88e7cd07 +Block 0022 [102]: cc4430d5ed7000cc +Block 0022 [103]: c664d64c236bcc4f +Block 0022 [104]: c475595c8ab3ec47 +Block 0022 [105]: 6c9cc890702453db +Block 0022 [106]: 323e596761bc223e +Block 0022 [107]: f11210530c7260f6 +Block 0022 [108]: 2442847da422d9bb +Block 0022 [109]: f42ba4d9043843f2 +Block 0022 [110]: 934892245c31ba35 +Block 0022 [111]: 4ed499734276ef4c +Block 0022 [112]: 5e5e5543390e5683 +Block 0022 [113]: ffab89c5036c4b53 +Block 0022 [114]: ad1021520de84f65 +Block 0022 [115]: b4ccf7022b5d8288 +Block 0022 [116]: 5c586acc6ea27398 +Block 0022 [117]: d5446287a9a13644 +Block 0022 [118]: 6a06a8f31064a550 +Block 0022 [119]: f6a1c23a9314ba58 +Block 0022 [120]: 7b48abb370998f31 +Block 0022 [121]: 03a1b00f23c8a0d1 +Block 0022 [122]: 1743a200b4b64a2b +Block 0022 [123]: 3abcfaa93432c7b8 +Block 0022 [124]: d120c946b3c79489 +Block 0022 [125]: e29e9017dba0f398 +Block 0022 [126]: 4e1d6694af3c32f4 +Block 0022 [127]: 8e810ad3516f24b2 +Block 0023 [ 0]: 56c432170f2350e5 +Block 0023 [ 1]: 09db8b18388cb582 +Block 0023 [ 2]: 2eafa8786064ffe0 +Block 0023 [ 3]: 1141a78f575e12b4 +Block 0023 [ 4]: 26f04196b7234286 +Block 0023 [ 5]: 5dd6537d4851feb5 +Block 0023 [ 6]: c583ed23a795fe4c +Block 0023 [ 7]: 6368c86ccb8d83d5 +Block 0023 [ 8]: fb7b278ee8366750 +Block 0023 [ 9]: cac13b3bd11c9f83 +Block 0023 [ 10]: dd2c59c38a8c2011 +Block 0023 [ 11]: 26145ddd34cf879b +Block 0023 [ 12]: e62a5c5aadb86abb +Block 0023 [ 13]: 38d268fa1e7df6b3 +Block 0023 [ 14]: 8126b9192e3557c6 +Block 0023 [ 15]: 027ea8e6cce918f3 +Block 0023 [ 16]: e2b722e572bac272 +Block 0023 [ 17]: 5f8d26dad7112659 +Block 0023 [ 18]: edc60e812ddcd7ae +Block 0023 [ 19]: c072593563543ddf +Block 0023 [ 20]: 340063081ae79b39 +Block 0023 [ 21]: 6232714e9e32cf6c +Block 0023 [ 22]: 05066590c3c27c81 +Block 0023 [ 23]: d76f4d930392174a +Block 0023 [ 24]: 0068bf676811bb4b +Block 0023 [ 25]: 1f69480b3055af3f +Block 0023 [ 26]: 1643fc248280c10e +Block 0023 [ 27]: 589a6e562b4f32b2 +Block 0023 [ 28]: 7463dc6fc808f4a2 +Block 0023 [ 29]: 8fdcf4ef08a01295 +Block 0023 [ 30]: 1dc6d09c09e5778e +Block 0023 [ 31]: bfb449c78123c47f +Block 0023 [ 32]: 5a5513c27bc4dfa5 +Block 0023 [ 33]: b12582f5860a7211 +Block 0023 [ 34]: 4b6eb353c9d6db6d +Block 0023 [ 35]: e073bb08023d543d +Block 0023 [ 36]: 302cf4a9a92dabc0 +Block 0023 [ 37]: 5eed7cd8055d637a +Block 0023 [ 38]: 2c2d45738b604d2b +Block 0023 [ 39]: 21c4a193ffd0bded +Block 0023 [ 40]: 526f7e03af98d7cc +Block 0023 [ 41]: bc42211893504613 +Block 0023 [ 42]: 629c9782a6c51994 +Block 0023 [ 43]: c807b62f77a64154 +Block 0023 [ 44]: 7db0caa237f90623 +Block 0023 [ 45]: e4e31f5a1f573bdf +Block 0023 [ 46]: 22145e4b3d1bdf3f +Block 0023 [ 47]: c92877319bb7f189 +Block 0023 [ 48]: d6d0953f49d547f5 +Block 0023 [ 49]: eb948a13d7bc979a +Block 0023 [ 50]: fdd2ab73cc437323 +Block 0023 [ 51]: 221e8102a15e5083 +Block 0023 [ 52]: 6a5f1d9c0ccc6187 +Block 0023 [ 53]: e05665f2bc8ac301 +Block 0023 [ 54]: c88e6f5a59ebe911 +Block 0023 [ 55]: 3bb8dc1b633e72c2 +Block 0023 [ 56]: bde7b8b01205c612 +Block 0023 [ 57]: dd524b90844f7ba1 +Block 0023 [ 58]: af22ac3d14da5c59 +Block 0023 [ 59]: 788c8edcab69224e +Block 0023 [ 60]: 22842e87b2c24640 +Block 0023 [ 61]: a7b74dbad49f1372 +Block 0023 [ 62]: 25cc466c7add69f0 +Block 0023 [ 63]: c43262f642817169 +Block 0023 [ 64]: 0261f94d0723ef00 +Block 0023 [ 65]: 45284f8434b96e32 +Block 0023 [ 66]: f2768808b5945e24 +Block 0023 [ 67]: 41bae50aad6b6004 +Block 0023 [ 68]: 699000306ac34f2c +Block 0023 [ 69]: 1a9ba2af157bec9b +Block 0023 [ 70]: a15f1015af21ae84 +Block 0023 [ 71]: a2170eae6ca7bcb2 +Block 0023 [ 72]: a300fb755441f126 +Block 0023 [ 73]: 605825ac585f01eb +Block 0023 [ 74]: 932fe9bcad3e6079 +Block 0023 [ 75]: 7333f0b0da8ebdb8 +Block 0023 [ 76]: 8b0609b3c74b0edd +Block 0023 [ 77]: 69c76359d05b6145 +Block 0023 [ 78]: 7673d116e0ea1fb5 +Block 0023 [ 79]: 9014432d5e138eed +Block 0023 [ 80]: 250a2478d5e3f8fb +Block 0023 [ 81]: 42cba2e0fcbee17c +Block 0023 [ 82]: c8458235c5da47a2 +Block 0023 [ 83]: dfff25a5ba1fc6c9 +Block 0023 [ 84]: 92703172255bb700 +Block 0023 [ 85]: e88c4cd1910b5970 +Block 0023 [ 86]: bf49d0c32b5817c0 +Block 0023 [ 87]: a34efec5c482d20e +Block 0023 [ 88]: 08da80ad9449951f +Block 0023 [ 89]: ea848364740c829b +Block 0023 [ 90]: 851bf1c0f5ef6823 +Block 0023 [ 91]: 1100dae7f77fbb50 +Block 0023 [ 92]: 84b5dea318af2953 +Block 0023 [ 93]: d1642d506dbe74f9 +Block 0023 [ 94]: 853cee1e33c1c7ea +Block 0023 [ 95]: a9cf960261092974 +Block 0023 [ 96]: ba9e6115e04834f5 +Block 0023 [ 97]: 4e50532738f12659 +Block 0023 [ 98]: 052f606345e1ff96 +Block 0023 [ 99]: 29e56a5493554852 +Block 0023 [100]: 0a19df56263743bd +Block 0023 [101]: c424aa2d2486bde2 +Block 0023 [102]: 716e469f3592cb31 +Block 0023 [103]: c185624c1b8100e3 +Block 0023 [104]: 3fa3d101c5d5d337 +Block 0023 [105]: c3ed572269f1a21a +Block 0023 [106]: 5dcbbb1c55a6c46e +Block 0023 [107]: fafdd0b079d1e17e +Block 0023 [108]: 59ae6c87e343ebc8 +Block 0023 [109]: f56b124af7fdaae3 +Block 0023 [110]: a6142fc6bc7ded24 +Block 0023 [111]: 5281bfd0a97ee90e +Block 0023 [112]: fa4c9312ae8fea59 +Block 0023 [113]: 7220d85ddf5189d5 +Block 0023 [114]: fd43bac28e5fc21d +Block 0023 [115]: 14f7b1cc68901e54 +Block 0023 [116]: edbb0d51fa8eaec6 +Block 0023 [117]: b0ddf87a9ab31b2f +Block 0023 [118]: b224e3f04051574b +Block 0023 [119]: 635ea2f0116832c0 +Block 0023 [120]: 2f401e4abc05157c +Block 0023 [121]: 97b35ceeab754f7d +Block 0023 [122]: 1516a371e7bce932 +Block 0023 [123]: 8bb0ae9a2479fb3a +Block 0023 [124]: a4bc96317fcdb39a +Block 0023 [125]: 99990935644f7cab +Block 0023 [126]: 803015feda571015 +Block 0023 [127]: bf6f10ca00fa56a9 +Block 0024 [ 0]: bf4583539793038a +Block 0024 [ 1]: a17c89373c8ce1e5 +Block 0024 [ 2]: ce3c740ff9fc039f +Block 0024 [ 3]: 0fcd6129f8693784 +Block 0024 [ 4]: 2b91dea6ff4f7d7d +Block 0024 [ 5]: de737e6b686d3e94 +Block 0024 [ 6]: 18f8502cf6bf3292 +Block 0024 [ 7]: c509b7c2f0c6b80f +Block 0024 [ 8]: 3798e4457863c1c7 +Block 0024 [ 9]: 83a45a83121a14db +Block 0024 [ 10]: 27ad4af2107c034a +Block 0024 [ 11]: 5e270c568a5b643d +Block 0024 [ 12]: ab71bd7d07387c74 +Block 0024 [ 13]: 397c6c11039e74e6 +Block 0024 [ 14]: 9ec8188c1c345aad +Block 0024 [ 15]: eb475b8ef473c9a5 +Block 0024 [ 16]: 063b4373964fcac8 +Block 0024 [ 17]: 56a19139acc3e00a +Block 0024 [ 18]: 5c6c0962cce29939 +Block 0024 [ 19]: c30c330fcf7f2ce9 +Block 0024 [ 20]: c34d6b95046e5d85 +Block 0024 [ 21]: 2be11b238ee6440f +Block 0024 [ 22]: 1a5c6d4f08682679 +Block 0024 [ 23]: a932cb224913a6a0 +Block 0024 [ 24]: c3017b46720b70d5 +Block 0024 [ 25]: 321ba2d126fa85b4 +Block 0024 [ 26]: 8b8a46577b354b9b +Block 0024 [ 27]: 960d623c0fcf928b +Block 0024 [ 28]: 425dc11904ef5d13 +Block 0024 [ 29]: 0bdf7c53e9d6bee5 +Block 0024 [ 30]: c516bc641e4b1f1d +Block 0024 [ 31]: 25f662caf0d04b3d +Block 0024 [ 32]: 5b5591788337116d +Block 0024 [ 33]: 1bb6a3bb7d5d719f +Block 0024 [ 34]: 4f4eac6f99213a41 +Block 0024 [ 35]: 6110dccb11538dab +Block 0024 [ 36]: fe3a9bcf6bae2aeb +Block 0024 [ 37]: 0e4eeb46d2241e19 +Block 0024 [ 38]: 5430d892c2402540 +Block 0024 [ 39]: 7300cf1e7395132c +Block 0024 [ 40]: 9eef4a35f6a3434b +Block 0024 [ 41]: 5de169249ac21ed4 +Block 0024 [ 42]: dd5bcbfb73fbac29 +Block 0024 [ 43]: 9a519a7819957bb5 +Block 0024 [ 44]: 43a764312cc8eb3c +Block 0024 [ 45]: 90415d896ca55079 +Block 0024 [ 46]: 9c164d7287a565a2 +Block 0024 [ 47]: 772a76696f95564c +Block 0024 [ 48]: 8b7ce044b06ecd47 +Block 0024 [ 49]: f06ef02dad18d78e +Block 0024 [ 50]: 0bc55e7139bb155a +Block 0024 [ 51]: 10b453718a9a703b +Block 0024 [ 52]: 86142a57693f45d2 +Block 0024 [ 53]: 6aef05ae9239a7cc +Block 0024 [ 54]: 64a39acbeb568504 +Block 0024 [ 55]: 7ff67b699718e578 +Block 0024 [ 56]: cd937dff7a44924b +Block 0024 [ 57]: 898fb355fdfeb447 +Block 0024 [ 58]: b8e6d5c6c740496a +Block 0024 [ 59]: e94a587019efa9e7 +Block 0024 [ 60]: b4ab7648fbeaa80a +Block 0024 [ 61]: 06ffb6590f1a5d03 +Block 0024 [ 62]: 3c5471d0243bf38c +Block 0024 [ 63]: a69751062e586e77 +Block 0024 [ 64]: 15fd3817247a48d4 +Block 0024 [ 65]: cf28aba007081d83 +Block 0024 [ 66]: f945831954967149 +Block 0024 [ 67]: 69fbe1a2a75f20d5 +Block 0024 [ 68]: 4e99a17284e7b791 +Block 0024 [ 69]: cf192f2db04ea91c +Block 0024 [ 70]: 052810ee50fe71b7 +Block 0024 [ 71]: 8a2545a5e11b3b73 +Block 0024 [ 72]: c95cf992b14eeb3f +Block 0024 [ 73]: b9c6c0d5db9b389a +Block 0024 [ 74]: d6a69487f68b0a3f +Block 0024 [ 75]: 6627c4401d399868 +Block 0024 [ 76]: dbecbe752ef44c3f +Block 0024 [ 77]: 56107ba6bba3b5e6 +Block 0024 [ 78]: 1efa55d9357e3c36 +Block 0024 [ 79]: 75c196453b59d5d8 +Block 0024 [ 80]: 075c84f5c4220859 +Block 0024 [ 81]: 1ee5ed8b313d643c +Block 0024 [ 82]: a317ba82d759163f +Block 0024 [ 83]: 35cd189af03482ec +Block 0024 [ 84]: ac634c2f4243c07e +Block 0024 [ 85]: 79d3939c35b5089c +Block 0024 [ 86]: b710ad495a2cbb68 +Block 0024 [ 87]: 369aaf0dff97c5ba +Block 0024 [ 88]: cc006a1073be4438 +Block 0024 [ 89]: 572432551b3263c3 +Block 0024 [ 90]: f4f77e3d2bcd718e +Block 0024 [ 91]: ef501a909b51cded +Block 0024 [ 92]: 3976ade1b6c3aba2 +Block 0024 [ 93]: 2edb1dbaa3bf1291 +Block 0024 [ 94]: 4049b2246d256e2c +Block 0024 [ 95]: 61ecd1c32040d453 +Block 0024 [ 96]: 95b0d49df09785e3 +Block 0024 [ 97]: 11a5fc067b184817 +Block 0024 [ 98]: e61a1c43133192b5 +Block 0024 [ 99]: 98d2b7f72d011248 +Block 0024 [100]: b7cb87305e2c2d6c +Block 0024 [101]: 3ecd32c1442f0ba0 +Block 0024 [102]: 4b2b29d933d1a0ba +Block 0024 [103]: 082d6c40ec561561 +Block 0024 [104]: d0367dcd61953e5d +Block 0024 [105]: 5f5fdc6102d5f068 +Block 0024 [106]: 03f9d3ad8a170315 +Block 0024 [107]: 1190264775912229 +Block 0024 [108]: c05460add736d870 +Block 0024 [109]: 25549b26ee5ff9f9 +Block 0024 [110]: 813ace59e299a68d +Block 0024 [111]: 6e37401ff41cf522 +Block 0024 [112]: 147bc89d451108eb +Block 0024 [113]: 0d7cda879c204b37 +Block 0024 [114]: 123e210727972bd8 +Block 0024 [115]: 6d883176b8208687 +Block 0024 [116]: 8e357a934b760e90 +Block 0024 [117]: db5d53313dca142a +Block 0024 [118]: 75e330f8c2124699 +Block 0024 [119]: 4a19313f121fca58 +Block 0024 [120]: 7ff60a770158fa90 +Block 0024 [121]: 3c0a19b1a1f5d2b5 +Block 0024 [122]: 652f82db23b0a84d +Block 0024 [123]: 97c8cc772d1a046a +Block 0024 [124]: 3d344d83dd1222f2 +Block 0024 [125]: 36b1311e5f306e76 +Block 0024 [126]: 4d0e2efe680dac8a +Block 0024 [127]: 04f7d812aa2eaeaa +Block 0025 [ 0]: c02432f28c2417d3 +Block 0025 [ 1]: df87602337c3a6f9 +Block 0025 [ 2]: 5110847f56262cec +Block 0025 [ 3]: 667874afa6398847 +Block 0025 [ 4]: fce31cfadf459e4d +Block 0025 [ 5]: 66f6b0e60c20429f +Block 0025 [ 6]: 46e276fafd0f6fa8 +Block 0025 [ 7]: f18d5cea31632fd7 +Block 0025 [ 8]: 2c35e2d80febaebe +Block 0025 [ 9]: b715f95b99a138dd +Block 0025 [ 10]: e3ce6ad753f97bb7 +Block 0025 [ 11]: 0b1c03d9e3055dd5 +Block 0025 [ 12]: c81cfc50ea63ed16 +Block 0025 [ 13]: 0f0efa659cc7a0d5 +Block 0025 [ 14]: 1f22de1b208d8902 +Block 0025 [ 15]: 7a54fe2921bb3c5b +Block 0025 [ 16]: 459491d187d5d127 +Block 0025 [ 17]: 57835c920fa586de +Block 0025 [ 18]: a0e9bdbdbc618028 +Block 0025 [ 19]: 8690ca28ab9eb4dc +Block 0025 [ 20]: d2b3717338e9dab5 +Block 0025 [ 21]: 5517d82ff815a3d4 +Block 0025 [ 22]: 61d2473ffb17c7d8 +Block 0025 [ 23]: e17a2341eb0c6cd6 +Block 0025 [ 24]: 739a0048cc303c17 +Block 0025 [ 25]: a4851011974f86eb +Block 0025 [ 26]: 8ae3ad2f3ffa111c +Block 0025 [ 27]: e8af30509554ec6d +Block 0025 [ 28]: c57fbf894b4fd6c0 +Block 0025 [ 29]: b95b55c2cb11472a +Block 0025 [ 30]: 6f008cc63addd4ff +Block 0025 [ 31]: 1dc3088cea2a1b22 +Block 0025 [ 32]: 84633af6989cf352 +Block 0025 [ 33]: 17a125e0c3b5c2c1 +Block 0025 [ 34]: 4def7ed3f310945a +Block 0025 [ 35]: 2d4ce7d225767a3b +Block 0025 [ 36]: b0d6d5d58b2a27bc +Block 0025 [ 37]: 417f22c60aa21e5e +Block 0025 [ 38]: fc956d2285a9df13 +Block 0025 [ 39]: b8b540b099f63f9c +Block 0025 [ 40]: 16b8b55c4bc899c9 +Block 0025 [ 41]: 55d749c549a67d03 +Block 0025 [ 42]: 06de19aade179b34 +Block 0025 [ 43]: f61325120460b6d1 +Block 0025 [ 44]: 2a435584cc068deb +Block 0025 [ 45]: 4cda20238b6d5ad3 +Block 0025 [ 46]: b9737adb88b005db +Block 0025 [ 47]: 4508c56a58d8ae5e +Block 0025 [ 48]: 0482d6af7fbea373 +Block 0025 [ 49]: 6585dfa97dd12063 +Block 0025 [ 50]: f93072a78e60443c +Block 0025 [ 51]: 9f3b8e80ceb2be48 +Block 0025 [ 52]: ac3dca4c9351e194 +Block 0025 [ 53]: e7f631ef15301c18 +Block 0025 [ 54]: 68728ff86e8a4194 +Block 0025 [ 55]: f03ff7621a6d5870 +Block 0025 [ 56]: 3accf9ea2059eecc +Block 0025 [ 57]: 7a40cf8588638006 +Block 0025 [ 58]: 350f2d401ea54bb1 +Block 0025 [ 59]: ca51085f93522a79 +Block 0025 [ 60]: 5f399b01bac94b46 +Block 0025 [ 61]: 9e368d5a39e1fb12 +Block 0025 [ 62]: bb2416c37abcc1b3 +Block 0025 [ 63]: 19dc1cd6f4a76c4b +Block 0025 [ 64]: fbd4a85f08b0b9e1 +Block 0025 [ 65]: 19e05bf1c8e5908d +Block 0025 [ 66]: a3580dba7331f036 +Block 0025 [ 67]: e5e1f78a4ba3c135 +Block 0025 [ 68]: df3942721112d8fc +Block 0025 [ 69]: 9f6d750b6aad4e32 +Block 0025 [ 70]: ef21ed902d825a07 +Block 0025 [ 71]: 02229fc7704f4ce6 +Block 0025 [ 72]: cc9f877c1a7fbb28 +Block 0025 [ 73]: 585758a87439684a +Block 0025 [ 74]: d683487687b26588 +Block 0025 [ 75]: 557a58c22b055c6b +Block 0025 [ 76]: a2fc0615b68bd40d +Block 0025 [ 77]: 87359f418f519671 +Block 0025 [ 78]: 0fc028f7e8906d85 +Block 0025 [ 79]: bb95f948e6dfcdcf +Block 0025 [ 80]: 6965ad87b5767d38 +Block 0025 [ 81]: 2d8901cf61c109a4 +Block 0025 [ 82]: c70396ce64fca092 +Block 0025 [ 83]: d8fe94a458caa96a +Block 0025 [ 84]: 2eb3aa977607b5da +Block 0025 [ 85]: 46a0d02635179182 +Block 0025 [ 86]: 4e4a181bb6863f9c +Block 0025 [ 87]: 83e9577ebf6541b7 +Block 0025 [ 88]: 6ad5847b07e2d7e4 +Block 0025 [ 89]: e72aba6841351302 +Block 0025 [ 90]: 71430efde4cc5e33 +Block 0025 [ 91]: 7929e91d90beb2d3 +Block 0025 [ 92]: bd32d8a056d5015a +Block 0025 [ 93]: 151c1a43811166be +Block 0025 [ 94]: 375388f1993cc412 +Block 0025 [ 95]: 7d2bf3945ffa18a3 +Block 0025 [ 96]: b14ba53feffbd4aa +Block 0025 [ 97]: 1247e167acbfcb9a +Block 0025 [ 98]: 0681b2a261a84b3e +Block 0025 [ 99]: e442452a213a150f +Block 0025 [100]: a6b905c8a0123984 +Block 0025 [101]: c100981f0d06b5c4 +Block 0025 [102]: 8bfd02fe184df9fb +Block 0025 [103]: ddde8aeba5183593 +Block 0025 [104]: 32db716a84582a8a +Block 0025 [105]: ac355eedc7f49408 +Block 0025 [106]: 3da2b0d8519c1b15 +Block 0025 [107]: dac49f353fddaa69 +Block 0025 [108]: bd7f699cff3533a3 +Block 0025 [109]: 00b566b84c3484ee +Block 0025 [110]: c17836603b52c2bd +Block 0025 [111]: 0ccb3ebedcc8521d +Block 0025 [112]: 5d6354d205c2f95b +Block 0025 [113]: a0739f76d327a0ae +Block 0025 [114]: 87f95a702c784a57 +Block 0025 [115]: 3cbb3370f55e43ea +Block 0025 [116]: 73c8a4fab081f398 +Block 0025 [117]: e396f8aa17ac238a +Block 0025 [118]: b1d821c495c15e82 +Block 0025 [119]: 14a010fec47a0821 +Block 0025 [120]: 7bac85187b17ee2f +Block 0025 [121]: 747e057340c77098 +Block 0025 [122]: 063a1073e710e631 +Block 0025 [123]: 50486c906b695b0e +Block 0025 [124]: 0c21d4640f2ebf12 +Block 0025 [125]: 56c75fbca558ff8f +Block 0025 [126]: ed1f21c46ca001a2 +Block 0025 [127]: 0655ca00aa6cf206 +Block 0026 [ 0]: f494004f57652dfb +Block 0026 [ 1]: bc7e125318991a1b +Block 0026 [ 2]: e0bca0c2987576a7 +Block 0026 [ 3]: b50d0ad8d594113a +Block 0026 [ 4]: 008b0507da0f62da +Block 0026 [ 5]: 1e2005c9d8a76b37 +Block 0026 [ 6]: d87490552095e57a +Block 0026 [ 7]: 1d0c4a322d90cf92 +Block 0026 [ 8]: 7f7e3e3b8f23b544 +Block 0026 [ 9]: a53ea6aee892f339 +Block 0026 [ 10]: c0db804430533d72 +Block 0026 [ 11]: ef53afbe282d23bf +Block 0026 [ 12]: a14a274b4211571c +Block 0026 [ 13]: e92d574a0220dc63 +Block 0026 [ 14]: d8e73b91c7451253 +Block 0026 [ 15]: cf66dab9ed5f2d0d +Block 0026 [ 16]: fcf7f593af1ed8b5 +Block 0026 [ 17]: fe08b6e491f27c07 +Block 0026 [ 18]: 3735fb0c10e76f9d +Block 0026 [ 19]: 1e1cd603e9e24d57 +Block 0026 [ 20]: f213036e8ae6d3d1 +Block 0026 [ 21]: 203d48f8758f733b +Block 0026 [ 22]: c60391b6f63feb61 +Block 0026 [ 23]: dfb7479caaa34a7a +Block 0026 [ 24]: 4905e186a30eb530 +Block 0026 [ 25]: c381ad611910a956 +Block 0026 [ 26]: 9cd4cdf8fcbf4f55 +Block 0026 [ 27]: 7c5391a58a474b18 +Block 0026 [ 28]: 10f8ddbc2b08af01 +Block 0026 [ 29]: 5c58a04b90dd99c4 +Block 0026 [ 30]: b54eb06dd4f3b121 +Block 0026 [ 31]: 52c10afe187e6003 +Block 0026 [ 32]: 0a456b9ce2a1aa7f +Block 0026 [ 33]: fca647d9bbfd8a6a +Block 0026 [ 34]: ed1828078039d0c5 +Block 0026 [ 35]: d8acca3425d069d2 +Block 0026 [ 36]: 8d63e69d7caaa236 +Block 0026 [ 37]: 3f435d73b7c96834 +Block 0026 [ 38]: b8e18b5f7a57c987 +Block 0026 [ 39]: ae572beb041f8112 +Block 0026 [ 40]: 62f2f9c8e8eb29ba +Block 0026 [ 41]: 4884560ebf91effe +Block 0026 [ 42]: 06fc59f34d083054 +Block 0026 [ 43]: bea4929f625e12ef +Block 0026 [ 44]: d7f563446d7a99f3 +Block 0026 [ 45]: 991b0cb2578290fb +Block 0026 [ 46]: 37ffd37e3981ceb6 +Block 0026 [ 47]: 409c1563471126d4 +Block 0026 [ 48]: da9781a2c63abf64 +Block 0026 [ 49]: 0137c07fdbbcc294 +Block 0026 [ 50]: a8820a87393425ad +Block 0026 [ 51]: c81a5d873fe20ba4 +Block 0026 [ 52]: 94ced49aed91e7a7 +Block 0026 [ 53]: 017404af79573a0b +Block 0026 [ 54]: cc9e2a7c25237895 +Block 0026 [ 55]: 12b48ebd3118e19b +Block 0026 [ 56]: 9fc306d0849cd11d +Block 0026 [ 57]: 3d336e0e4429ca67 +Block 0026 [ 58]: aff7b98ac4959a06 +Block 0026 [ 59]: fd6785fd204e650d +Block 0026 [ 60]: d493f601d16a4f5f +Block 0026 [ 61]: 610f4837f2db6f9b +Block 0026 [ 62]: b82085a6fd0ece16 +Block 0026 [ 63]: e8ea02d44b708977 +Block 0026 [ 64]: 428531978f14951a +Block 0026 [ 65]: 9507b6cca5306aa4 +Block 0026 [ 66]: f857f06106ad3bee +Block 0026 [ 67]: 55944ea007f7863b +Block 0026 [ 68]: 67f2e7babb7a331f +Block 0026 [ 69]: 0252b8482b88acce +Block 0026 [ 70]: db6a01e15738a091 +Block 0026 [ 71]: 1b04caba54505b61 +Block 0026 [ 72]: b0e0f8fb29a8479c +Block 0026 [ 73]: aa670af602c88243 +Block 0026 [ 74]: bace61d13223063d +Block 0026 [ 75]: fa19f9fa8261fc1d +Block 0026 [ 76]: f6761126d8b2e7b9 +Block 0026 [ 77]: 0f210f240f996092 +Block 0026 [ 78]: e6fad1e1ece1bf4e +Block 0026 [ 79]: 16dcef2a0c6338ea +Block 0026 [ 80]: 30ecd57a88f7a7a0 +Block 0026 [ 81]: 0e4c0c7cd4f24d0c +Block 0026 [ 82]: aaa080d230cff24a +Block 0026 [ 83]: 6dea8082160fbbe6 +Block 0026 [ 84]: 9ff45a0bcb4e0713 +Block 0026 [ 85]: 0b1e282a7d2b3a90 +Block 0026 [ 86]: f27f08967fb050fc +Block 0026 [ 87]: 0151762582ff58d0 +Block 0026 [ 88]: 974e23cb4f05ba88 +Block 0026 [ 89]: 0a4a783b22dcf61d +Block 0026 [ 90]: 45e31764f17f08f9 +Block 0026 [ 91]: 86f9f88e402bff39 +Block 0026 [ 92]: 2ea75c01660b1fab +Block 0026 [ 93]: f1bf9d413751c414 +Block 0026 [ 94]: f2e7e9c1b77090d2 +Block 0026 [ 95]: 71130e18edf585b1 +Block 0026 [ 96]: 6bc7fa4a4f49b58d +Block 0026 [ 97]: 1a04dbebef1d435e +Block 0026 [ 98]: be6c4fb73bbae267 +Block 0026 [ 99]: 32d9b418f26ca8c9 +Block 0026 [100]: f370c6ec416fea29 +Block 0026 [101]: c87d56d2cfd5c25e +Block 0026 [102]: b556a8dff75b4350 +Block 0026 [103]: 6cf4866f115bc1ba +Block 0026 [104]: a5ea80b67d3eb546 +Block 0026 [105]: 32408068477f9617 +Block 0026 [106]: 53ed9037f0ab6c6e +Block 0026 [107]: 551c462f6733f83e +Block 0026 [108]: 13d45815ff2fd652 +Block 0026 [109]: ec1a210c404d6357 +Block 0026 [110]: 4b5b3c04beb5bd39 +Block 0026 [111]: 43b1945dd83a0494 +Block 0026 [112]: 850af53380605933 +Block 0026 [113]: 8b6bd0fec9d3b815 +Block 0026 [114]: 66c9634a5e8c9fb5 +Block 0026 [115]: 446198f1911917a3 +Block 0026 [116]: 0611350c10b0d1f7 +Block 0026 [117]: 3a7bcd48a10a0605 +Block 0026 [118]: ef1451b6313c81dc +Block 0026 [119]: a7aedb9836bce03c +Block 0026 [120]: 59649ed78381cfd3 +Block 0026 [121]: f9e660ad51495ee1 +Block 0026 [122]: 3d614c33fb37cfe8 +Block 0026 [123]: e28e1e9046aa5e92 +Block 0026 [124]: 9e3cc15ddcaf388f +Block 0026 [125]: 298db70bfacfcecc +Block 0026 [126]: 561e51e85006f3e2 +Block 0026 [127]: 002328b2a64d32de +Block 0027 [ 0]: 6a36e474ffc79b28 +Block 0027 [ 1]: 23d140862dbcc4b2 +Block 0027 [ 2]: 93463b5d7c02a877 +Block 0027 [ 3]: b7e8766c02109d51 +Block 0027 [ 4]: 7415cf4fddc0f993 +Block 0027 [ 5]: 7b769c8a60707898 +Block 0027 [ 6]: 06506a25457a2e6b +Block 0027 [ 7]: a65e8cdc5e651394 +Block 0027 [ 8]: 7da1e70686b4a92b +Block 0027 [ 9]: b17edc4e65c4c678 +Block 0027 [ 10]: bec581f37d2834fb +Block 0027 [ 11]: 082185c8ae0b588f +Block 0027 [ 12]: 23916c8338f8e07e +Block 0027 [ 13]: a99a11467da9428c +Block 0027 [ 14]: a111edfe969ec9bc +Block 0027 [ 15]: d0a76e461410f68a +Block 0027 [ 16]: e37f0624904ef553 +Block 0027 [ 17]: 1088077172f1161a +Block 0027 [ 18]: b376e4c161878402 +Block 0027 [ 19]: d4121c48e0c06c13 +Block 0027 [ 20]: 96fc4febca9c3457 +Block 0027 [ 21]: 25686c76fd01241b +Block 0027 [ 22]: e4f8119ac946d1be +Block 0027 [ 23]: d751327cd43388c3 +Block 0027 [ 24]: a91b144c324f497d +Block 0027 [ 25]: bd2ea57c9df15ca4 +Block 0027 [ 26]: 4e737444370dd320 +Block 0027 [ 27]: faafe5c1916300d9 +Block 0027 [ 28]: 2ab42667cbfc6b89 +Block 0027 [ 29]: afb23472890580d3 +Block 0027 [ 30]: 9713478003ef4a7c +Block 0027 [ 31]: ff9423eabb33c603 +Block 0027 [ 32]: 3d821a656ae4161e +Block 0027 [ 33]: 6db448e9dc48798a +Block 0027 [ 34]: 9669bc7908d86520 +Block 0027 [ 35]: 59828038647baa96 +Block 0027 [ 36]: c403678a1b89ac4b +Block 0027 [ 37]: d3b58972a9491d6f +Block 0027 [ 38]: 99169151602ed624 +Block 0027 [ 39]: c1d2702f140f997d +Block 0027 [ 40]: caf644fd739cd0ab +Block 0027 [ 41]: be2632b181d35323 +Block 0027 [ 42]: 8230428a04d6b83f +Block 0027 [ 43]: dbda70b473488888 +Block 0027 [ 44]: 2686f0b232aba4b3 +Block 0027 [ 45]: 9f7c2482dba52baf +Block 0027 [ 46]: e1ccb89ae28e33bc +Block 0027 [ 47]: d0ea305527865a20 +Block 0027 [ 48]: 4273f862776fb381 +Block 0027 [ 49]: 5138176b7f8b1a41 +Block 0027 [ 50]: 741205d181d13544 +Block 0027 [ 51]: ecfcb8ee67b67e55 +Block 0027 [ 52]: 1533882648e638bc +Block 0027 [ 53]: 03518b85a85d0338 +Block 0027 [ 54]: 431d11df78672d82 +Block 0027 [ 55]: 75b2b7116f34ecd9 +Block 0027 [ 56]: 9b51ce7a4981f2a0 +Block 0027 [ 57]: 7a5ada2b2f45fe13 +Block 0027 [ 58]: 10cd88ba6d9f0f20 +Block 0027 [ 59]: 49fb947141ac117b +Block 0027 [ 60]: 2094194379412634 +Block 0027 [ 61]: 1e9a4382d1ca8191 +Block 0027 [ 62]: 457cabdfeb42ccd6 +Block 0027 [ 63]: ad924df310f759a7 +Block 0027 [ 64]: 3e7d1fdc291df527 +Block 0027 [ 65]: b8cacac133a45f3d +Block 0027 [ 66]: 037581754bfd253c +Block 0027 [ 67]: ca53c63794ee1736 +Block 0027 [ 68]: 714981936dd5487c +Block 0027 [ 69]: bf620ebbc920a960 +Block 0027 [ 70]: 835eebf18d80d70b +Block 0027 [ 71]: 174364bafd7c500f +Block 0027 [ 72]: 52e32e79e987e339 +Block 0027 [ 73]: ea2ee4ae5c85f9b7 +Block 0027 [ 74]: 9082578fc32e5522 +Block 0027 [ 75]: 49e1f8e5fec29c66 +Block 0027 [ 76]: bc22280c92dc8017 +Block 0027 [ 77]: 4651bc598c0d68a2 +Block 0027 [ 78]: 9f7f11d764f462b0 +Block 0027 [ 79]: bbf0fdc8d0ed58cb +Block 0027 [ 80]: d21fde1da96d257f +Block 0027 [ 81]: b92685188bd54f18 +Block 0027 [ 82]: 24795ac1884dff14 +Block 0027 [ 83]: e4cf58770c7a3eb7 +Block 0027 [ 84]: 32524079585dc4be +Block 0027 [ 85]: 8d312885fca8e395 +Block 0027 [ 86]: 235d50fc5fb93f7c +Block 0027 [ 87]: 9f7ebfa431d9c8f1 +Block 0027 [ 88]: b36af9bb14781ae2 +Block 0027 [ 89]: 86026a8db22332b0 +Block 0027 [ 90]: 08585886343fc383 +Block 0027 [ 91]: 9c6e402057a0aaf2 +Block 0027 [ 92]: 5defa125fd09ed1b +Block 0027 [ 93]: 5ce30d50933c40f8 +Block 0027 [ 94]: 6b1e678501b2c9d4 +Block 0027 [ 95]: 8725a68615e4d34f +Block 0027 [ 96]: 8c5cdfb8d3795da0 +Block 0027 [ 97]: 5a75edcd8c6d26ab +Block 0027 [ 98]: 88bbf5bd5f9321a0 +Block 0027 [ 99]: d01b8e4553dacfcc +Block 0027 [100]: 6d44604ed05684e3 +Block 0027 [101]: c1d9efbf51f08c0f +Block 0027 [102]: d32861a79d3d3591 +Block 0027 [103]: 0f5e0fdfe060ad48 +Block 0027 [104]: 1aa10c6249e9c203 +Block 0027 [105]: 034b3cd30d6f47db +Block 0027 [106]: 7bbbfa8311733087 +Block 0027 [107]: 218f81120456f524 +Block 0027 [108]: d7068a533876beca +Block 0027 [109]: 903b66e838ceb3a8 +Block 0027 [110]: 30b1296695f436b2 +Block 0027 [111]: c96450f5b09229e7 +Block 0027 [112]: 279d31b6dd521c73 +Block 0027 [113]: c49dd63f87db05e5 +Block 0027 [114]: 4f4183be215209e7 +Block 0027 [115]: 0618248e89512325 +Block 0027 [116]: 1630e2f1fb6f8c9d +Block 0027 [117]: cffa863752fdff8b +Block 0027 [118]: 277bb464fe923265 +Block 0027 [119]: b69f98e413055782 +Block 0027 [120]: be757ac9e2b1afe9 +Block 0027 [121]: 1d505a0e9d9d71f8 +Block 0027 [122]: 851fecc06495f5d8 +Block 0027 [123]: f7130c2a62201dec +Block 0027 [124]: f3a890c658c9a653 +Block 0027 [125]: 913ae2dd0b1b4348 +Block 0027 [126]: dcf627b503666a13 +Block 0027 [127]: 03c2439ffb970ee6 +Block 0028 [ 0]: ca58222c0335fad4 +Block 0028 [ 1]: 9c72e23adf9c0d86 +Block 0028 [ 2]: 1b6707cf48c561d1 +Block 0028 [ 3]: 2b6cda976b746358 +Block 0028 [ 4]: d7a615afa3f55997 +Block 0028 [ 5]: 013fa2f590c128bc +Block 0028 [ 6]: 4cd3353543de39e0 +Block 0028 [ 7]: 61abbc1a37e87eed +Block 0028 [ 8]: 5cb0f9c53b2cfc8e +Block 0028 [ 9]: 86a2c36cadd9f0dd +Block 0028 [ 10]: 238f6eec4bce7605 +Block 0028 [ 11]: cf1d0ef7179792bc +Block 0028 [ 12]: 1df1c207447534c9 +Block 0028 [ 13]: 4201704843e7c5c9 +Block 0028 [ 14]: 9626a9eb6fe0ebc9 +Block 0028 [ 15]: 86e48febc40a64ed +Block 0028 [ 16]: a20402933b241b8a +Block 0028 [ 17]: 6f9031d281bac12b +Block 0028 [ 18]: f45a47b2853694ba +Block 0028 [ 19]: 917a448aef9f4195 +Block 0028 [ 20]: e046f6a5473fb03f +Block 0028 [ 21]: 479b43fc599c24ec +Block 0028 [ 22]: 0abbaa3b84d91c79 +Block 0028 [ 23]: df37b61116fe98d5 +Block 0028 [ 24]: 519ebd6232590101 +Block 0028 [ 25]: 783c4a632e6a81a8 +Block 0028 [ 26]: df754093dd079428 +Block 0028 [ 27]: faa49281ccc74f7f +Block 0028 [ 28]: afe16685c78a1dd6 +Block 0028 [ 29]: 051c80fb6fa24c14 +Block 0028 [ 30]: 08072ecbb0e8f1e0 +Block 0028 [ 31]: 499ac14bf47b5a27 +Block 0028 [ 32]: 5d421f66de4c0e98 +Block 0028 [ 33]: 077ce2dc6718cb84 +Block 0028 [ 34]: f48ab05c57970f5c +Block 0028 [ 35]: 6075db6f8cdd475d +Block 0028 [ 36]: 7c6a41c738738787 +Block 0028 [ 37]: c5f5a1740f2fb839 +Block 0028 [ 38]: 08bc03d5f44201ec +Block 0028 [ 39]: 199605d142f2b604 +Block 0028 [ 40]: 01c3c9f476c868ba +Block 0028 [ 41]: faf406aee9364a54 +Block 0028 [ 42]: 619f3f52adacd452 +Block 0028 [ 43]: 0ecebc2f592ab9c7 +Block 0028 [ 44]: 1d96a7c554184a37 +Block 0028 [ 45]: fda76281db32047b +Block 0028 [ 46]: 269961a043864803 +Block 0028 [ 47]: e40a3252cb410e50 +Block 0028 [ 48]: d5c5b3ac3d004a7a +Block 0028 [ 49]: f47f6d2f7aefe242 +Block 0028 [ 50]: acf22ef8b04c3b2c +Block 0028 [ 51]: 5075c6cab2c6f889 +Block 0028 [ 52]: 0f660a376a8d2aa0 +Block 0028 [ 53]: 34a32efc55b524a6 +Block 0028 [ 54]: 7ff61a76b03cb19e +Block 0028 [ 55]: f74c34ccf42e4b1f +Block 0028 [ 56]: 16f872636b8352b5 +Block 0028 [ 57]: 3201a2c20a72ca41 +Block 0028 [ 58]: c28509cb9041444e +Block 0028 [ 59]: f36347f3390a1e11 +Block 0028 [ 60]: ab7c16ee3e5803a5 +Block 0028 [ 61]: 0de99e30139c5009 +Block 0028 [ 62]: 6d17d8c75edb2365 +Block 0028 [ 63]: cfb612cdaf8f4af7 +Block 0028 [ 64]: f4df991c468e2438 +Block 0028 [ 65]: 2899f895e46033fc +Block 0028 [ 66]: 75ad9f046f559763 +Block 0028 [ 67]: cbec52939ec63cda +Block 0028 [ 68]: c7a89aea82d11cfd +Block 0028 [ 69]: b01c19568317176c +Block 0028 [ 70]: 0d6c0a5b0484270d +Block 0028 [ 71]: 9bb0780452840077 +Block 0028 [ 72]: 3f2c4a2039120ffc +Block 0028 [ 73]: 987360f6050272c0 +Block 0028 [ 74]: 801dfe8bb2f2679e +Block 0028 [ 75]: 220a91558f9fb887 +Block 0028 [ 76]: f9412b28325f93fe +Block 0028 [ 77]: bd02fcadc4e5ba2b +Block 0028 [ 78]: 0db3de28db8c9ac9 +Block 0028 [ 79]: 368f26c4652a64dd +Block 0028 [ 80]: d6c337bf5f03ac89 +Block 0028 [ 81]: 4c714a4305e3aab9 +Block 0028 [ 82]: e6af815ca778f926 +Block 0028 [ 83]: e1859b016348fdbc +Block 0028 [ 84]: b8f5b3c3c49c4cf3 +Block 0028 [ 85]: 670773281ca0da2a +Block 0028 [ 86]: 920d99d5e17eeb64 +Block 0028 [ 87]: 3a864dcfa57eb353 +Block 0028 [ 88]: 0d1b7223e949754f +Block 0028 [ 89]: 0bfc2f27302028c6 +Block 0028 [ 90]: ebca4178f60078f8 +Block 0028 [ 91]: 4ccc4d65bbdc0bed +Block 0028 [ 92]: 8e5363eb76fb3293 +Block 0028 [ 93]: 093c5e82b6095b67 +Block 0028 [ 94]: d0068768e1bdec5b +Block 0028 [ 95]: 0a00c488260db6d5 +Block 0028 [ 96]: 7f7d0d7ac47a81ee +Block 0028 [ 97]: 3ae04e17dd01c279 +Block 0028 [ 98]: f8e6ac29f780be7f +Block 0028 [ 99]: 19c50b7052ac4f44 +Block 0028 [100]: 5303f461feccb497 +Block 0028 [101]: 1854a6ec35aee128 +Block 0028 [102]: db1b041a1ee7a79d +Block 0028 [103]: 7e81f884f7a0a6fc +Block 0028 [104]: bf9bb929bcb9e874 +Block 0028 [105]: 336e80069f3dedd2 +Block 0028 [106]: 035b55ca20c76598 +Block 0028 [107]: b293f79a77cda448 +Block 0028 [108]: 9a763760c91b6714 +Block 0028 [109]: 13302f9a51a34c5a +Block 0028 [110]: 6b2eb8d6aa3b5277 +Block 0028 [111]: bf17d582179db4ce +Block 0028 [112]: 6357d1d0595e0b06 +Block 0028 [113]: 0ea204e3887f1b12 +Block 0028 [114]: ab106f68ffe98952 +Block 0028 [115]: edccf1f4a537c038 +Block 0028 [116]: 4dd30ae007433edb +Block 0028 [117]: 70bf808ff6ed6e4e +Block 0028 [118]: 1bc10a2d27b5e5fc +Block 0028 [119]: cc9bafd348bf29df +Block 0028 [120]: 4958087b121642b4 +Block 0028 [121]: 8ffec5b4c6f60cc5 +Block 0028 [122]: 6d94d7276ac67cee +Block 0028 [123]: 4a878a121591ea5c +Block 0028 [124]: e5ae3c3689f8ab9f +Block 0028 [125]: 779480dd69065bb8 +Block 0028 [126]: be6df4df52c18560 +Block 0028 [127]: 6f1fb1a9cf64874f +Block 0029 [ 0]: 0207741c8146dfa3 +Block 0029 [ 1]: 406a47b4c1e4b7cf +Block 0029 [ 2]: ab350bd11dae3ab1 +Block 0029 [ 3]: b5fcdce3f5af5c51 +Block 0029 [ 4]: 03b1acacafc20140 +Block 0029 [ 5]: 2a425cee09634812 +Block 0029 [ 6]: e552ee3615a33f43 +Block 0029 [ 7]: 5befe9ff059e7bfb +Block 0029 [ 8]: 6794a847fab871cc +Block 0029 [ 9]: 8ff9bbbcffb980a5 +Block 0029 [ 10]: 7cb0bc045830ef7b +Block 0029 [ 11]: 859d5d5109ac4f06 +Block 0029 [ 12]: e8250fd2cc3dcdef +Block 0029 [ 13]: c3a134684c9dd60e +Block 0029 [ 14]: 227e5b09f927b571 +Block 0029 [ 15]: 68c856cec2a47082 +Block 0029 [ 16]: fce4acd1eb9c2fd6 +Block 0029 [ 17]: 1874384733f72647 +Block 0029 [ 18]: 0bb44bf1fef26640 +Block 0029 [ 19]: b6b304e2fa351043 +Block 0029 [ 20]: 751d92d62903ef35 +Block 0029 [ 21]: e78b53c855c5c602 +Block 0029 [ 22]: 0812dcb3268b6d78 +Block 0029 [ 23]: bc792d9a692eafd5 +Block 0029 [ 24]: 33b96da127e9ce75 +Block 0029 [ 25]: 70e99f06a02da8be +Block 0029 [ 26]: a53adf7c364dc22c +Block 0029 [ 27]: e141512a24b1f401 +Block 0029 [ 28]: cd3ca1c7a59cd510 +Block 0029 [ 29]: 0bd3b7d6078e4eed +Block 0029 [ 30]: ab7c6554f4c11436 +Block 0029 [ 31]: 89914cb1067af8ee +Block 0029 [ 32]: c75b936a76746c31 +Block 0029 [ 33]: 024785728db3a789 +Block 0029 [ 34]: 9e58b0afbfdfeb19 +Block 0029 [ 35]: 373f25548779c51f +Block 0029 [ 36]: 543724293d0d8c2d +Block 0029 [ 37]: 62aeaa9b19808110 +Block 0029 [ 38]: 93f21989d783801c +Block 0029 [ 39]: 775dffbce376deb4 +Block 0029 [ 40]: 6f426ae9af1c783e +Block 0029 [ 41]: 48bf94b9dbd7ee4b +Block 0029 [ 42]: f094f91d25ee627d +Block 0029 [ 43]: 9a827b7dc6e0896d +Block 0029 [ 44]: 7910f54893fa8fc3 +Block 0029 [ 45]: 37b30dc28c6049bc +Block 0029 [ 46]: 29ef9da058cb5b84 +Block 0029 [ 47]: 5c403d77779566e1 +Block 0029 [ 48]: 4f409c72a1e0fdec +Block 0029 [ 49]: ae587790d92a03af +Block 0029 [ 50]: 69e0a91db119465e +Block 0029 [ 51]: 0ee30615e5df5ecc +Block 0029 [ 52]: 3dca48a0c98120d6 +Block 0029 [ 53]: 77e254ca3afb9f84 +Block 0029 [ 54]: 7bc434ae14f6f06c +Block 0029 [ 55]: 9775face0be26982 +Block 0029 [ 56]: 6d2f36d11088d913 +Block 0029 [ 57]: 4aa3cc0bff9a1e5c +Block 0029 [ 58]: 005d8f72e50124cf +Block 0029 [ 59]: d76cbf27873f19e3 +Block 0029 [ 60]: 0d4f957d7949663e +Block 0029 [ 61]: 14f198a3447b7039 +Block 0029 [ 62]: 0622617d5f71b2d4 +Block 0029 [ 63]: 8abb43cfcbca2586 +Block 0029 [ 64]: 478b55022fdb873e +Block 0029 [ 65]: 24cd75b9b9e06db9 +Block 0029 [ 66]: 49acbda91ffaa950 +Block 0029 [ 67]: 15c03d8770ed999d +Block 0029 [ 68]: 17a0e368a53308b3 +Block 0029 [ 69]: 4f61904cdaf364f3 +Block 0029 [ 70]: 92db2822da9abc66 +Block 0029 [ 71]: b89ef67c8cd09463 +Block 0029 [ 72]: fdf5ce73da75a752 +Block 0029 [ 73]: 715da75d29a11d0c +Block 0029 [ 74]: 1c4a97738457a7c0 +Block 0029 [ 75]: 01cda83c3413395e +Block 0029 [ 76]: 4a621ae732bad57a +Block 0029 [ 77]: 41f23ad22e523495 +Block 0029 [ 78]: dc7098ac146ea569 +Block 0029 [ 79]: a2cf720400e39c0c +Block 0029 [ 80]: 09aa559ce750a2c7 +Block 0029 [ 81]: 5a44bd0df4be581e +Block 0029 [ 82]: 8a77c840fcaabe6b +Block 0029 [ 83]: bbe29d575a3978ef +Block 0029 [ 84]: 790f91e76c826d67 +Block 0029 [ 85]: c2bceae4dd73f8ba +Block 0029 [ 86]: 683088167d2926ba +Block 0029 [ 87]: 49957770e745d01d +Block 0029 [ 88]: 17b96ee43d3a76c5 +Block 0029 [ 89]: 43328a4e158c81cf +Block 0029 [ 90]: e76baf7b9aef84a3 +Block 0029 [ 91]: d4c264c8a6994714 +Block 0029 [ 92]: 8ee8e576bebec7bf +Block 0029 [ 93]: 6411980b914b9662 +Block 0029 [ 94]: 745acc8565779744 +Block 0029 [ 95]: 30ce9cf530824795 +Block 0029 [ 96]: b78a1629bb41a6d6 +Block 0029 [ 97]: 67ad7c8dc3e08d91 +Block 0029 [ 98]: c0146364b77acb3c +Block 0029 [ 99]: 75bbe8fafef1de11 +Block 0029 [100]: 795f2830cecab6eb +Block 0029 [101]: 3ac583d316cf3a15 +Block 0029 [102]: 9d0b885e2fbcf626 +Block 0029 [103]: c91bea4d5cdd103d +Block 0029 [104]: d9d5df2d889b62cb +Block 0029 [105]: aa660e50a1c8ca3b +Block 0029 [106]: 83ad208abfb4a5db +Block 0029 [107]: 0c41929e4aac98a6 +Block 0029 [108]: 732c3d845a3dd9ad +Block 0029 [109]: 5d90d1e6b10da9ba +Block 0029 [110]: 7f5899546758538e +Block 0029 [111]: 81035b8ef4ccb393 +Block 0029 [112]: 3bce5002a0e42a9e +Block 0029 [113]: 49728c1521571871 +Block 0029 [114]: 2dde86b7d59ec9f6 +Block 0029 [115]: 982676db6df43385 +Block 0029 [116]: 5cba52ad4c42077a +Block 0029 [117]: 0172b3408cbe8d23 +Block 0029 [118]: 3f410a84fb1722f6 +Block 0029 [119]: 85bdb25c8eceda0e +Block 0029 [120]: 4ff1c2d46a2b487b +Block 0029 [121]: 9fe47fbe9734d275 +Block 0029 [122]: 4b396e3adbd6abcc +Block 0029 [123]: 4f2dd219ae0a599d +Block 0029 [124]: bf73abc3293e108c +Block 0029 [125]: 158517dd7f973123 +Block 0029 [126]: 9d70f00766295708 +Block 0029 [127]: 67ad678c811a378e +Block 0030 [ 0]: 1f9e38f15c0b4acf +Block 0030 [ 1]: f0e0a264cd839857 +Block 0030 [ 2]: 50bc35d79237b54e +Block 0030 [ 3]: 3857d320bcefd875 +Block 0030 [ 4]: 2d1318855b016e6c +Block 0030 [ 5]: 967241dbadfdb565 +Block 0030 [ 6]: 800753ca23565b99 +Block 0030 [ 7]: fee608d250770302 +Block 0030 [ 8]: 7dddd4f29e607658 +Block 0030 [ 9]: 819a24edf268fcb2 +Block 0030 [ 10]: 6880a1d3d9812700 +Block 0030 [ 11]: 57d3fc07966300b6 +Block 0030 [ 12]: 8f946b77f29001d7 +Block 0030 [ 13]: bb0abfac9eb9dda3 +Block 0030 [ 14]: 34839f915d84aa17 +Block 0030 [ 15]: 30688be9d1e7e726 +Block 0030 [ 16]: 6b1f946cf0e14b98 +Block 0030 [ 17]: 0b5de2f45696efef +Block 0030 [ 18]: 6fb9961aa06875b7 +Block 0030 [ 19]: 7bc7176c8c9874e2 +Block 0030 [ 20]: 840507101c0c10ec +Block 0030 [ 21]: 8f9fcb5775408171 +Block 0030 [ 22]: b7f561bf6420bf4b +Block 0030 [ 23]: 408d65ea6ace1994 +Block 0030 [ 24]: 72b7b6ad2a8710e1 +Block 0030 [ 25]: b959adeff619c82d +Block 0030 [ 26]: 7b8858d87a632c81 +Block 0030 [ 27]: c8b936af201270e6 +Block 0030 [ 28]: cfe54bccb6a654a6 +Block 0030 [ 29]: 907e9744d4483668 +Block 0030 [ 30]: 8d3199d677ba43d4 +Block 0030 [ 31]: 257ce84b68bad3f2 +Block 0030 [ 32]: c824aa1982671945 +Block 0030 [ 33]: e2e9dd16e403e398 +Block 0030 [ 34]: 1daa88aeb3675d8d +Block 0030 [ 35]: 9c8265c6f92c91e9 +Block 0030 [ 36]: 95e78fae8367fd87 +Block 0030 [ 37]: 68dd4415761ad758 +Block 0030 [ 38]: 1eb7f341ac811efb +Block 0030 [ 39]: a777790a8ef0ba3e +Block 0030 [ 40]: 237e7e319e1876da +Block 0030 [ 41]: 10d59f907a261f1a +Block 0030 [ 42]: 5f6993574dacb849 +Block 0030 [ 43]: 4aafd981472ab898 +Block 0030 [ 44]: 7a39e6aa861f86e4 +Block 0030 [ 45]: de79f33874b17af6 +Block 0030 [ 46]: 5ae77d3ff4d97e32 +Block 0030 [ 47]: bfb9a79eac24988b +Block 0030 [ 48]: cd4b0f3306bc2285 +Block 0030 [ 49]: 79587c4db17ce2d5 +Block 0030 [ 50]: df3c2a26a81def00 +Block 0030 [ 51]: f91aa04a4584fb96 +Block 0030 [ 52]: 319293679662fb6e +Block 0030 [ 53]: 2cf5cb1c39d7e349 +Block 0030 [ 54]: d8c7d314fde62100 +Block 0030 [ 55]: d49acb9f84ddeee0 +Block 0030 [ 56]: b308ba9300dac74d +Block 0030 [ 57]: 56ec31602722bdd4 +Block 0030 [ 58]: 5d31ea5dfd133be3 +Block 0030 [ 59]: 61dfe7872e811d02 +Block 0030 [ 60]: 1a82dbdb52cd4ea4 +Block 0030 [ 61]: 599ddbd51c7386bf +Block 0030 [ 62]: 4186c201a09ea371 +Block 0030 [ 63]: cf5c3bfef67e4229 +Block 0030 [ 64]: d8dcbf137d92f555 +Block 0030 [ 65]: 83e7b079d384deba +Block 0030 [ 66]: 5c92cecdadee4f1f +Block 0030 [ 67]: 02bb23eda398826e +Block 0030 [ 68]: 9f1eaaf0ab692fdd +Block 0030 [ 69]: 3e762c6854d3d4b4 +Block 0030 [ 70]: 3d9920cae2bc168e +Block 0030 [ 71]: 03730d8cf69a8947 +Block 0030 [ 72]: 57e3e8be34628ccf +Block 0030 [ 73]: dc8cc84b253302fa +Block 0030 [ 74]: f34b5dd75cf375ab +Block 0030 [ 75]: eb39e41a160e9bd5 +Block 0030 [ 76]: 19cb451eeae042ac +Block 0030 [ 77]: 31ba85ddb8a465bd +Block 0030 [ 78]: 86493a0e610f4c97 +Block 0030 [ 79]: 2f3a02b6f7c68509 +Block 0030 [ 80]: 5accf78953cbe2f6 +Block 0030 [ 81]: 1a5b00f4a378d40c +Block 0030 [ 82]: d21871f9f4a302dc +Block 0030 [ 83]: 366e91b6368ce852 +Block 0030 [ 84]: 871f4b10870f96b3 +Block 0030 [ 85]: ca76bcbeb17e4388 +Block 0030 [ 86]: 4a9a238334ed233d +Block 0030 [ 87]: d548e679c135e3ec +Block 0030 [ 88]: 14caee6503e8b5c7 +Block 0030 [ 89]: c313e7bdbf043aae +Block 0030 [ 90]: 2ea1a9cb349a2e18 +Block 0030 [ 91]: a66ff32802eee268 +Block 0030 [ 92]: 4f74c552992434ad +Block 0030 [ 93]: 1fb689ea6ebf5016 +Block 0030 [ 94]: c61a5622a5650bdb +Block 0030 [ 95]: bf3f5fa2876962ad +Block 0030 [ 96]: 4a35ba57808f1408 +Block 0030 [ 97]: b9cc98fb701693e8 +Block 0030 [ 98]: 4f0191eeaa9c9104 +Block 0030 [ 99]: fd94c892d297bc01 +Block 0030 [100]: ee5b3c3aec2fc3e6 +Block 0030 [101]: 944c5da066f03024 +Block 0030 [102]: 49bc29ef54fa14c6 +Block 0030 [103]: 103dab1249b26ed0 +Block 0030 [104]: fa3f5194e6aa4932 +Block 0030 [105]: bd5a531ed38fe96e +Block 0030 [106]: 32eb829d00e9e523 +Block 0030 [107]: cd00296881ca0348 +Block 0030 [108]: fa39b8a99f7ab372 +Block 0030 [109]: 614cc3127e419850 +Block 0030 [110]: edeb6ab484faf67f +Block 0030 [111]: 02c355973c574d1d +Block 0030 [112]: 198b58c82f416d64 +Block 0030 [113]: d332fa14092a550a +Block 0030 [114]: bc2317ef3bdb5e88 +Block 0030 [115]: 31bc87b1ed42e2a9 +Block 0030 [116]: a8dd6cdbbb306d5f +Block 0030 [117]: b5c2153c6e5cc25e +Block 0030 [118]: 8aa4063415e7c7ef +Block 0030 [119]: d11033bd5e3cb501 +Block 0030 [120]: d9910a22a988ffee +Block 0030 [121]: c54b0e343365f143 +Block 0030 [122]: b6bac0a513cb7c38 +Block 0030 [123]: 8a797f119a8fa477 +Block 0030 [124]: 8a9fdb5f6f892ef3 +Block 0030 [125]: d4abea5cf9bb068a +Block 0030 [126]: 81388ea4ad703fd7 +Block 0030 [127]: 00ad23051eb6accc +Block 0031 [ 0]: c214853efbb75de4 +Block 0031 [ 1]: aad6885569088f52 +Block 0031 [ 2]: d86f98b36790f5b8 +Block 0031 [ 3]: e77655a17cbb7f4c +Block 0031 [ 4]: 0ecb507ed5dc329a +Block 0031 [ 5]: 5ed932eb7a74d4fa +Block 0031 [ 6]: 4585ba06399f2072 +Block 0031 [ 7]: 1ed9ff754566cca5 +Block 0031 [ 8]: 32a32d4a331b0087 +Block 0031 [ 9]: a3ca9ccdb628ef78 +Block 0031 [ 10]: 7306560670f1d0c2 +Block 0031 [ 11]: d4a872959695ec2c +Block 0031 [ 12]: 80eb229e4932edff +Block 0031 [ 13]: d101308963991194 +Block 0031 [ 14]: 73085ee7d8211718 +Block 0031 [ 15]: 161e14bd7afc6265 +Block 0031 [ 16]: 66bfe3b7b09efea6 +Block 0031 [ 17]: 7c9e052377cc0d52 +Block 0031 [ 18]: 14265c7dc1f5df42 +Block 0031 [ 19]: d4b6f6fb6358f6f6 +Block 0031 [ 20]: 881eb8e86ab22017 +Block 0031 [ 21]: 118f820d2363c8c9 +Block 0031 [ 22]: aff520d67dd66e3b +Block 0031 [ 23]: 29aec74c592a814a +Block 0031 [ 24]: 0ed40fccb5f07c87 +Block 0031 [ 25]: 51941c3d5c31379c +Block 0031 [ 26]: f7cbf86cac7c6434 +Block 0031 [ 27]: f61fa7f0e2b3cbc8 +Block 0031 [ 28]: 9f5e9f66cf4114ad +Block 0031 [ 29]: 0652344032753e1b +Block 0031 [ 30]: fef2a3ea3dfcf379 +Block 0031 [ 31]: a6fea6258e518ebc +Block 0031 [ 32]: 856a99f86c7e762d +Block 0031 [ 33]: 42e85fcd24e8b41e +Block 0031 [ 34]: 148d9e623e851dea +Block 0031 [ 35]: e76f445a76772983 +Block 0031 [ 36]: 361241968174001f +Block 0031 [ 37]: 83b64baebf5a4908 +Block 0031 [ 38]: d3373289c148463a +Block 0031 [ 39]: 639a1909b1574a93 +Block 0031 [ 40]: 1756d9dec3da6a64 +Block 0031 [ 41]: 7a2bf952a65a0da7 +Block 0031 [ 42]: 25e97e5cc04b243b +Block 0031 [ 43]: bb33ad4b697daeed +Block 0031 [ 44]: cd751a3f5385f8e1 +Block 0031 [ 45]: 9ce29b4e243aa4c9 +Block 0031 [ 46]: 98f94b6f1479af37 +Block 0031 [ 47]: 8bcfa0eb52e00b18 +Block 0031 [ 48]: afbf5c00f6b6342a +Block 0031 [ 49]: d754c66aed0d0132 +Block 0031 [ 50]: d5e4093177c9e92d +Block 0031 [ 51]: 61bab57ba23847d3 +Block 0031 [ 52]: 1fc3b0cfce64bb77 +Block 0031 [ 53]: 0f98a6bc191d3213 +Block 0031 [ 54]: 7e609553847c0e6f +Block 0031 [ 55]: 361304bb6138aac0 +Block 0031 [ 56]: 878872e076fc08aa +Block 0031 [ 57]: 6c153b5fd7d11503 +Block 0031 [ 58]: 06b4f4ad17802f4d +Block 0031 [ 59]: 6d77ff7b0f34ee7c +Block 0031 [ 60]: 670dd85ba6194fca +Block 0031 [ 61]: 5671b23c77e3d057 +Block 0031 [ 62]: 35119e2f853fbc9d +Block 0031 [ 63]: def753f2a7ef264a +Block 0031 [ 64]: e85bdbe442ed3f43 +Block 0031 [ 65]: f4fc248a745d8f9c +Block 0031 [ 66]: 9ba20fdd79e80b8c +Block 0031 [ 67]: b6d9f5945f9a664d +Block 0031 [ 68]: 20fbd28b785e0329 +Block 0031 [ 69]: f85e52ac3767b3f5 +Block 0031 [ 70]: 2b1eb317ddab4fa8 +Block 0031 [ 71]: 93cfe1a3f0d85bf0 +Block 0031 [ 72]: d58de87c9917fb35 +Block 0031 [ 73]: b6d7bcd756819f50 +Block 0031 [ 74]: 8de20a6619d151d8 +Block 0031 [ 75]: 87bd14b028d9216c +Block 0031 [ 76]: 15a2eba464d56e8f +Block 0031 [ 77]: 2465311173907873 +Block 0031 [ 78]: eb9c61925e7c58b3 +Block 0031 [ 79]: 0ed7cbeb1492c923 +Block 0031 [ 80]: 77a798a571f4450a +Block 0031 [ 81]: 482b893c546ff4a6 +Block 0031 [ 82]: 39ac176fb2b483db +Block 0031 [ 83]: 32437a31965a733c +Block 0031 [ 84]: be933e433f586338 +Block 0031 [ 85]: 40f25a7ed2c5120c +Block 0031 [ 86]: 49d2f77c6aff30fc +Block 0031 [ 87]: a1ad34b9bf94bf07 +Block 0031 [ 88]: a77f1a70cdb0dd06 +Block 0031 [ 89]: 106afffa50facc31 +Block 0031 [ 90]: ba8826e4219dc476 +Block 0031 [ 91]: e02982181e0870ee +Block 0031 [ 92]: 8480c3aae6e896aa +Block 0031 [ 93]: 297f2c7a272a8b2f +Block 0031 [ 94]: c5036bb595909a84 +Block 0031 [ 95]: a08327fabb4d3fb8 +Block 0031 [ 96]: 53f22cc5481afc88 +Block 0031 [ 97]: f067dcc8b804378f +Block 0031 [ 98]: 17894a8680e925b3 +Block 0031 [ 99]: 6078d7556d2fcdfc +Block 0031 [100]: 2a83f75567f6b751 +Block 0031 [101]: 80fb55cfa65a6155 +Block 0031 [102]: db56da1e25853d68 +Block 0031 [103]: f211137a22a34c75 +Block 0031 [104]: ceeea03f75fa41c6 +Block 0031 [105]: a56305173372f075 +Block 0031 [106]: 13bcf10f6f52c543 +Block 0031 [107]: 8cce231f5c882992 +Block 0031 [108]: 2dd59abd3326b1d0 +Block 0031 [109]: bf2adce673d93e75 +Block 0031 [110]: aff796ec3520ea12 +Block 0031 [111]: ed4a55e41b122765 +Block 0031 [112]: 51e63bc4199c4fc4 +Block 0031 [113]: 64631c52d2bbe92a +Block 0031 [114]: e30d2cbd6fc1fb0e +Block 0031 [115]: 6b67d0c31a71f6d8 +Block 0031 [116]: 53093eabfb3a0e16 +Block 0031 [117]: 4cdd35a55bd56663 +Block 0031 [118]: bb4297a99e734daf +Block 0031 [119]: 0d5dd07557b2d5c7 +Block 0031 [120]: fb351e6ce72b7a37 +Block 0031 [121]: 06f324ad64676de7 +Block 0031 [122]: c18903237861cf21 +Block 0031 [123]: 1672989332c783ea +Block 0031 [124]: 4a14c84a31058542 +Block 0031 [125]: 25c544df9faab7be +Block 0031 [126]: 4627ff2abce83845 +Block 0031 [127]: 6316fd56c69344f1 + + After pass 2: +Block 0000 [ 0]: d2bfbbc5538d0691 +Block 0000 [ 1]: fdd30b9eda25954b +Block 0000 [ 2]: 3acab43f4e2d35bd +Block 0000 [ 3]: 6a7098a3676964bd +Block 0000 [ 4]: bea6794f73dc88ec +Block 0000 [ 5]: 837d3ad2b07a12c9 +Block 0000 [ 6]: 3e2421fcf8eda94e +Block 0000 [ 7]: 3ca9a53c07522ccd +Block 0000 [ 8]: 863e66bbd66c6273 +Block 0000 [ 9]: 17ae74a98b994202 +Block 0000 [ 10]: 4ff8af313326b54b +Block 0000 [ 11]: a12468f5a7ae468d +Block 0000 [ 12]: fa69e7a7bac72caa +Block 0000 [ 13]: 5cdc71c04b8b8306 +Block 0000 [ 14]: 85b8eafdbb7f9d3d +Block 0000 [ 15]: c3a68f3de40b258a +Block 0000 [ 16]: f10227d4f1d7f387 +Block 0000 [ 17]: 68983d628ad03716 +Block 0000 [ 18]: 59041153fb987a38 +Block 0000 [ 19]: a2e96838b1930c0c +Block 0000 [ 20]: f775642275053088 +Block 0000 [ 21]: 3dd0a9996c16b353 +Block 0000 [ 22]: 30de7ea84550d566 +Block 0000 [ 23]: 52ff98bec2f102e3 +Block 0000 [ 24]: d7bf180f18129d8c +Block 0000 [ 25]: 0b20025f9425bdd8 +Block 0000 [ 26]: 34c4cf7f7094b7f4 +Block 0000 [ 27]: 04d626f3b9f4296b +Block 0000 [ 28]: 3c327a1aeab45c96 +Block 0000 [ 29]: faf97a90c9cee32f +Block 0000 [ 30]: c79d3bc514100ac0 +Block 0000 [ 31]: 478d91a10654e435 +Block 0000 [ 32]: 3a251ea52e5265b0 +Block 0000 [ 33]: c2d308d9c012c0b7 +Block 0000 [ 34]: 6f12cd0ba5e43e8e +Block 0000 [ 35]: c60725db674efc2f +Block 0000 [ 36]: 84b934ebec83b87a +Block 0000 [ 37]: d1f2a34706cac386 +Block 0000 [ 38]: 85cf00381149b292 +Block 0000 [ 39]: f2d45baf330d70fa +Block 0000 [ 40]: 949ac580ffdee39f +Block 0000 [ 41]: 939d7c5244ce5026 +Block 0000 [ 42]: 62604d407db2dc10 +Block 0000 [ 43]: c561714c5baca244 +Block 0000 [ 44]: d793e68d21b8d785 +Block 0000 [ 45]: 9218155894eb4668 +Block 0000 [ 46]: a6d83e86dd08b536 +Block 0000 [ 47]: b12166b5fbf2622b +Block 0000 [ 48]: 087fc2807f6b0240 +Block 0000 [ 49]: a953331bf25793c6 +Block 0000 [ 50]: 395e56f54f367d58 +Block 0000 [ 51]: 71844b0ad60a4348 +Block 0000 [ 52]: bff48acffc4f1d86 +Block 0000 [ 53]: 08207d54623b8eff +Block 0000 [ 54]: d7976065b56b168b +Block 0000 [ 55]: 7a0a7f11ededbe27 +Block 0000 [ 56]: 5feed8c252d86bb0 +Block 0000 [ 57]: 9890890cfa9ac4dd +Block 0000 [ 58]: 4bccf79dae011a67 +Block 0000 [ 59]: 2cdc7e852e3325aa +Block 0000 [ 60]: 4b3f2056e3d09a17 +Block 0000 [ 61]: 3e3c49a5be718d8f +Block 0000 [ 62]: f3eeeabf2e588a37 +Block 0000 [ 63]: 1d163fbaea85c51e +Block 0000 [ 64]: 4e870740a63bfebe +Block 0000 [ 65]: fdea2486efd299f9 +Block 0000 [ 66]: 63c4c7642195538d +Block 0000 [ 67]: 6aa09c2a021a7e39 +Block 0000 [ 68]: 383de7f9fd0477e9 +Block 0000 [ 69]: a96d36027d5d40fa +Block 0000 [ 70]: 0c3389062b014fce +Block 0000 [ 71]: c114edae155883af +Block 0000 [ 72]: d34997d5da0d7faf +Block 0000 [ 73]: bb1a90429091d672 +Block 0000 [ 74]: f10646dc7472f874 +Block 0000 [ 75]: 799bad35f1b4b596 +Block 0000 [ 76]: 59b72d2dc1ec8265 +Block 0000 [ 77]: f862830aa16be38e +Block 0000 [ 78]: 87d27855b30d2e10 +Block 0000 [ 79]: 1b83b64e975578fb +Block 0000 [ 80]: 10b85998fc9683cb +Block 0000 [ 81]: 9e77d6fd752f56e4 +Block 0000 [ 82]: 0abae223a92a3866 +Block 0000 [ 83]: 50115aa654949866 +Block 0000 [ 84]: c7fce8bf28b52b61 +Block 0000 [ 85]: 7eab21dc322adcc7 +Block 0000 [ 86]: 385bf7b817b855a6 +Block 0000 [ 87]: 89a96d45fab99e0b +Block 0000 [ 88]: a4d612ec2b949d99 +Block 0000 [ 89]: 485ab81e2aa987c1 +Block 0000 [ 90]: fb668789e6a7cdb4 +Block 0000 [ 91]: 382820855bb0f925 +Block 0000 [ 92]: 4aefec40e2182c2e +Block 0000 [ 93]: d0bbfd373964563b +Block 0000 [ 94]: 522f590a62b06af5 +Block 0000 [ 95]: 4673911857dee9d0 +Block 0000 [ 96]: 60b473dcc47e9f98 +Block 0000 [ 97]: 58e120f49b52a745 +Block 0000 [ 98]: 1ef5e595d1f45259 +Block 0000 [ 99]: b864a94f27e6dced +Block 0000 [100]: 74a270f2b6b8048d +Block 0000 [101]: 79d8ba2427c45f6f +Block 0000 [102]: 43d10923485a498c +Block 0000 [103]: ae95c732560cf5a7 +Block 0000 [104]: eee43f84fb4f00c8 +Block 0000 [105]: 4f2c7238bed818d3 +Block 0000 [106]: 3021c423f992eea9 +Block 0000 [107]: 40e6a0f228776314 +Block 0000 [108]: f57ddf4d9227d927 +Block 0000 [109]: 67c9b4dd17f940f8 +Block 0000 [110]: 9e79fc2dfd0c3458 +Block 0000 [111]: 17f629e2d71e0631 +Block 0000 [112]: bf50ffc05622f1a1 +Block 0000 [113]: f722cd6173d05451 +Block 0000 [114]: aa7dd6a9bdb8fde7 +Block 0000 [115]: 96e948a8fffdad2b +Block 0000 [116]: 39fdd84328ad4a48 +Block 0000 [117]: 9ac11eda284697b2 +Block 0000 [118]: cd6a816bc4ef9279 +Block 0000 [119]: 7a9b9ff5570151d7 +Block 0000 [120]: 989fb3eccde11a2c +Block 0000 [121]: 42d0105e6df28303 +Block 0000 [122]: 385308a61f36a6b7 +Block 0000 [123]: d5d3b82a09e03e4e +Block 0000 [124]: 4eb69b6b8bdb50dc +Block 0000 [125]: b0bc8a268c477342 +Block 0000 [126]: d227cc6b292c97f3 +Block 0000 [127]: 5c14f1f815132a2d +Block 0001 [ 0]: 75c183401903f625 +Block 0001 [ 1]: 8c20fa12abcbce89 +Block 0001 [ 2]: a5ead7a57718ec5e +Block 0001 [ 3]: 18c5a981135c282c +Block 0001 [ 4]: 0590129aad6e72cf +Block 0001 [ 5]: e3dd77e6a4aac515 +Block 0001 [ 6]: 31521cb6071f820f +Block 0001 [ 7]: 172736e02c9cf05e +Block 0001 [ 8]: 7634b8f8e1fc0ce9 +Block 0001 [ 9]: e6812a3bc4ebf23d +Block 0001 [ 10]: 98e977becd8b7a7c +Block 0001 [ 11]: e65ec3b60b1db8e4 +Block 0001 [ 12]: 4f6113dafc47d70a +Block 0001 [ 13]: c85682ce4422cad9 +Block 0001 [ 14]: b32004f710920375 +Block 0001 [ 15]: 694cc7f9f95731e3 +Block 0001 [ 16]: 605bb861fc60749f +Block 0001 [ 17]: 72cec74a23d1eff0 +Block 0001 [ 18]: 6eac4f1a2540da41 +Block 0001 [ 19]: 5430aa5aa99cb80d +Block 0001 [ 20]: 8544c56488bb9e2d +Block 0001 [ 21]: 06a7423f86b8d125 +Block 0001 [ 22]: c7b7d5dd29a07e96 +Block 0001 [ 23]: ff83461fd40e9e74 +Block 0001 [ 24]: 9b4d52a073fb9d5c +Block 0001 [ 25]: 7415a3510a0a6a00 +Block 0001 [ 26]: 317d09aaf7cb9ba8 +Block 0001 [ 27]: cc2cfaf8b506d014 +Block 0001 [ 28]: b337c6e47c9d799e +Block 0001 [ 29]: ab67888b9e46f720 +Block 0001 [ 30]: 2affc2a33c986c0c +Block 0001 [ 31]: b2842aebb3e5d1e4 +Block 0001 [ 32]: b275965d992ff5fc +Block 0001 [ 33]: c39ddc5e9c6e04eb +Block 0001 [ 34]: 191f7cc2b3b8d5cb +Block 0001 [ 35]: 72937670bd7fb9d7 +Block 0001 [ 36]: 0645f6e8e81e617f +Block 0001 [ 37]: ef0c4ca70bf25f7a +Block 0001 [ 38]: a23a4bae4d1ef4ab +Block 0001 [ 39]: e4fead0ff40a9c42 +Block 0001 [ 40]: e3635b74da13fe52 +Block 0001 [ 41]: 149997696a79efdf +Block 0001 [ 42]: b4894283887470d6 +Block 0001 [ 43]: 5e8d46c852abb1fa +Block 0001 [ 44]: a820e4585c0fe1d5 +Block 0001 [ 45]: c3a70d7cd439a327 +Block 0001 [ 46]: 30744765900a5610 +Block 0001 [ 47]: 28ddbf796851f228 +Block 0001 [ 48]: f2581f003f82cfb1 +Block 0001 [ 49]: 0439eb009462786f +Block 0001 [ 50]: 15a35e8df68cff6b +Block 0001 [ 51]: ec8be6cf6684a129 +Block 0001 [ 52]: ad3f4e12a3154e8e +Block 0001 [ 53]: 5916f409d829443e +Block 0001 [ 54]: 8800db5cbfcb15a5 +Block 0001 [ 55]: 8d9e9349289e03dd +Block 0001 [ 56]: 19c47c8106c8577b +Block 0001 [ 57]: f88a37de8eeefed1 +Block 0001 [ 58]: 5eeed049b2ecec0e +Block 0001 [ 59]: b112cd4c54df3ac3 +Block 0001 [ 60]: 4ad2ec8a421490c4 +Block 0001 [ 61]: 9bc263ce61103790 +Block 0001 [ 62]: 4a730d5c30feecd0 +Block 0001 [ 63]: ffa189cc98d79651 +Block 0001 [ 64]: a40b5c0eae44d459 +Block 0001 [ 65]: 7045a68bdce9cb5d +Block 0001 [ 66]: 8f97e54a007d71e2 +Block 0001 [ 67]: ef560075b9d613a0 +Block 0001 [ 68]: a7fc257eb171bfd3 +Block 0001 [ 69]: 4c7082a1a4a5e593 +Block 0001 [ 70]: 500cfcccd795a009 +Block 0001 [ 71]: 80c8f60d8c9f8e30 +Block 0001 [ 72]: 08632801eff5e6ce +Block 0001 [ 73]: 67fbc4d781a5be67 +Block 0001 [ 74]: 7b7d12f4c1a69cfb +Block 0001 [ 75]: 0499393e9a0537b1 +Block 0001 [ 76]: 2646f7e44f09270e +Block 0001 [ 77]: 60ac80d07ac36ca2 +Block 0001 [ 78]: dcc8a040ab3e73f8 +Block 0001 [ 79]: fc12d44434965551 +Block 0001 [ 80]: 8b440689c5dedb15 +Block 0001 [ 81]: a7eae4713960017b +Block 0001 [ 82]: 35c85d575a40d8c5 +Block 0001 [ 83]: 25af4b3b414fea51 +Block 0001 [ 84]: 1cb81be8f18c4966 +Block 0001 [ 85]: 7e03a303fcedc7ce +Block 0001 [ 86]: cf6b0505c1cfd2ec +Block 0001 [ 87]: deaede9a78815a4f +Block 0001 [ 88]: 474545fe9136db82 +Block 0001 [ 89]: ae09452c35b774f6 +Block 0001 [ 90]: 9bbae009dde20ac9 +Block 0001 [ 91]: 935f97a69a6c68a3 +Block 0001 [ 92]: f92ba79f50fc101b +Block 0001 [ 93]: 12ec6069ff1d8542 +Block 0001 [ 94]: 27aa206ebdc64128 +Block 0001 [ 95]: 7e52fad9fc5791d2 +Block 0001 [ 96]: 10d211741d67c7a3 +Block 0001 [ 97]: c79233c1a34adef8 +Block 0001 [ 98]: 19059f2fb6098d55 +Block 0001 [ 99]: e51de33609f86618 +Block 0001 [100]: 2bc0bb88fef64262 +Block 0001 [101]: fa91ada28a84aebe +Block 0001 [102]: 6e02b86736cbf953 +Block 0001 [103]: cd3728d7d6bf9e98 +Block 0001 [104]: 7760845d9d81c2c3 +Block 0001 [105]: 8417879b22777f17 +Block 0001 [106]: cf881e44da6f7662 +Block 0001 [107]: 33e24c6ff1d99839 +Block 0001 [108]: 185cef30e7a37acf +Block 0001 [109]: 161026f1104186da +Block 0001 [110]: 73b72796317bed2d +Block 0001 [111]: 3562d0ff6ee7d268 +Block 0001 [112]: 872a7c67cc9a61bf +Block 0001 [113]: 79c4f22bebdf7b73 +Block 0001 [114]: f7a70fe4b9aeda09 +Block 0001 [115]: df9bceaeb3963845 +Block 0001 [116]: a5a655151f09c222 +Block 0001 [117]: febca01a48f68e1d +Block 0001 [118]: 2c3c859e18149bf3 +Block 0001 [119]: 8839f7dde56b0943 +Block 0001 [120]: a22a95c95645fd5e +Block 0001 [121]: 04d0cd5246f75ac2 +Block 0001 [122]: 965d0c6431059fe9 +Block 0001 [123]: 14e4627253a6c318 +Block 0001 [124]: 39f51177a99f2c70 +Block 0001 [125]: 78df225cea3e8413 +Block 0001 [126]: b486dbb11b49885a +Block 0001 [127]: e4b1362f7ec62876 +Block 0002 [ 0]: be82e39fb23497af +Block 0002 [ 1]: 97f7fc0dc8fa8561 +Block 0002 [ 2]: d305b88dd051b91a +Block 0002 [ 3]: bd8f0dfd151eae83 +Block 0002 [ 4]: 910b545ff2334fcd +Block 0002 [ 5]: 1ef0ece59fef86cd +Block 0002 [ 6]: fe5c03cd20349ba7 +Block 0002 [ 7]: d9782292d3ef95bf +Block 0002 [ 8]: 9d746018ea870fcd +Block 0002 [ 9]: 34db528ff7ce54bf +Block 0002 [ 10]: f301b4da637a91e2 +Block 0002 [ 11]: a1a2d26757179a10 +Block 0002 [ 12]: 02351e156a86d35d +Block 0002 [ 13]: 63143aa712192240 +Block 0002 [ 14]: 7a3ceffdd1a79ee8 +Block 0002 [ 15]: c40088234a6042d6 +Block 0002 [ 16]: eed93e9a2e88a2c7 +Block 0002 [ 17]: b0e0f7875f672d69 +Block 0002 [ 18]: 521f9a10146a7e31 +Block 0002 [ 19]: 39619c7eb1066700 +Block 0002 [ 20]: 5f6312b67651ecb5 +Block 0002 [ 21]: c0ed573071f12360 +Block 0002 [ 22]: eda1d8347de4efbc +Block 0002 [ 23]: 7e0819f293535c13 +Block 0002 [ 24]: ed47b829b1fc489b +Block 0002 [ 25]: 6c95dfd9a580c85b +Block 0002 [ 26]: 6ceb4e97a15ed8a0 +Block 0002 [ 27]: ef840f725146143c +Block 0002 [ 28]: b15bbf822cce3e84 +Block 0002 [ 29]: 72796b2867a1622f +Block 0002 [ 30]: 11d049b8c0e82587 +Block 0002 [ 31]: a4880ed5d4e8824a +Block 0002 [ 32]: 0cdc193f278373f9 +Block 0002 [ 33]: 9b1478114f594a80 +Block 0002 [ 34]: d0e03f2b6994e2b4 +Block 0002 [ 35]: 98b62f2de4e831e1 +Block 0002 [ 36]: 0416c2fdef1a17d6 +Block 0002 [ 37]: 10ad0d51eddd36df +Block 0002 [ 38]: be9b727601c88728 +Block 0002 [ 39]: 3a496f65a2a23980 +Block 0002 [ 40]: cb85f05f72d57364 +Block 0002 [ 41]: bf32c58ac37e31f3 +Block 0002 [ 42]: 7555f66129a05a3c +Block 0002 [ 43]: b09de73b8833d762 +Block 0002 [ 44]: 3aaddc025bc9c5f5 +Block 0002 [ 45]: d51d9b50e7ac1e10 +Block 0002 [ 46]: 72de8083b651b259 +Block 0002 [ 47]: 135411c956b1e691 +Block 0002 [ 48]: ca0aff548d7682d7 +Block 0002 [ 49]: f44b3e4210ba5898 +Block 0002 [ 50]: c691066bf3747eed +Block 0002 [ 51]: c1f9682454c740c5 +Block 0002 [ 52]: ad58f9792291cee0 +Block 0002 [ 53]: d592f5dbe2102500 +Block 0002 [ 54]: 635c299efb84bf42 +Block 0002 [ 55]: 8b80fa8e61d49dd9 +Block 0002 [ 56]: 87235af2e76b8301 +Block 0002 [ 57]: 8b1eb45875d5856a +Block 0002 [ 58]: 0f9b910c3a4fbdb0 +Block 0002 [ 59]: 4993f4819ce98005 +Block 0002 [ 60]: 1105c2cb4c3b7598 +Block 0002 [ 61]: f3b9a1cd3a053dde +Block 0002 [ 62]: e8af8b90c4a83b69 +Block 0002 [ 63]: 286800e9dd5ac648 +Block 0002 [ 64]: 425e495348603270 +Block 0002 [ 65]: 6b733fe715d77c47 +Block 0002 [ 66]: 53904c6dd1292c20 +Block 0002 [ 67]: a9f9a28c965ab818 +Block 0002 [ 68]: c59a31de2f00853a +Block 0002 [ 69]: afe438e57a6e0844 +Block 0002 [ 70]: bba45d22fb183db2 +Block 0002 [ 71]: b70d940e09e1b81d +Block 0002 [ 72]: 045016066a260fd1 +Block 0002 [ 73]: c77660f79caf487a +Block 0002 [ 74]: 19c598233c14b842 +Block 0002 [ 75]: c3058798c27f4e3f +Block 0002 [ 76]: 934c5db22edcef4a +Block 0002 [ 77]: 19d43250721ba51c +Block 0002 [ 78]: e517cfdcc01e129b +Block 0002 [ 79]: 168875877be5927f +Block 0002 [ 80]: d843abd7e0fdc1b3 +Block 0002 [ 81]: d55ac5e832bb21b3 +Block 0002 [ 82]: ac5c89e63cbe234b +Block 0002 [ 83]: 8a85ec876d0bf705 +Block 0002 [ 84]: 9ee8e11fe4759a5b +Block 0002 [ 85]: 968e7afa1b7420c2 +Block 0002 [ 86]: 6cdf8ac8a603bd9b +Block 0002 [ 87]: 023675d7ec048d55 +Block 0002 [ 88]: 06d17b5a31b1c518 +Block 0002 [ 89]: 2c47c4b74b5f2cf5 +Block 0002 [ 90]: 7191cd7ca21b8ab1 +Block 0002 [ 91]: 25dc32663c7b2174 +Block 0002 [ 92]: 28ec825eb4e3ea38 +Block 0002 [ 93]: 60740a51a33ef788 +Block 0002 [ 94]: c7cceed83266a33b +Block 0002 [ 95]: d84585bcd9baa1bb +Block 0002 [ 96]: 9b6f18b525e9b0d4 +Block 0002 [ 97]: eb54d4b34f780348 +Block 0002 [ 98]: 662009e73ec50ab8 +Block 0002 [ 99]: d1c22cb358cd3261 +Block 0002 [100]: 483f9163b91902b3 +Block 0002 [101]: a419d6e4fc164133 +Block 0002 [102]: 18a5cfa5516933a1 +Block 0002 [103]: 9429b99ee10a2064 +Block 0002 [104]: fb78da9d8ceeec6f +Block 0002 [105]: 9c9e8aef683443b3 +Block 0002 [106]: 4534b4fcba3f2646 +Block 0002 [107]: 0a1cf98c003e2e8f +Block 0002 [108]: 9f6f4800073ad33a +Block 0002 [109]: 22b728fc57a6609d +Block 0002 [110]: e298905fb4d0b68e +Block 0002 [111]: 2bcbdd9a1ce46c9d +Block 0002 [112]: 5c75108e7d6a55b9 +Block 0002 [113]: b605bd1023de8977 +Block 0002 [114]: 1c193d35b61e7d0c +Block 0002 [115]: f48c8741a50be2b2 +Block 0002 [116]: dde78777f41702fe +Block 0002 [117]: aa9668ae6a9b8ee6 +Block 0002 [118]: a4b91d2d5900c5e2 +Block 0002 [119]: b23f93527a5f6abf +Block 0002 [120]: 251cc8db145b7f60 +Block 0002 [121]: 42ffa58f6cae0c6b +Block 0002 [122]: e864e1c5256dd80d +Block 0002 [123]: 2253ebfd92490935 +Block 0002 [124]: 6409cf57bdbd6c68 +Block 0002 [125]: dfec737ab6849a31 +Block 0002 [126]: 894da96427deb540 +Block 0002 [127]: 4acc8d0d859fc71c +Block 0003 [ 0]: 7393659e41c0ffe8 +Block 0003 [ 1]: 2d1775dbb249bb5b +Block 0003 [ 2]: fae4f88f3e535a8b +Block 0003 [ 3]: de1631dcfbbb9157 +Block 0003 [ 4]: 7164b6d1e33a61dc +Block 0003 [ 5]: eb95a004610f2626 +Block 0003 [ 6]: 3ad93611b1c94541 +Block 0003 [ 7]: e7a453ce861ab3ba +Block 0003 [ 8]: 78adac795c376400 +Block 0003 [ 9]: 1afb8e1de9db5a87 +Block 0003 [ 10]: ce384f6674dd212a +Block 0003 [ 11]: 25c4c7c3d3efcb1d +Block 0003 [ 12]: aca174b4ef51cafc +Block 0003 [ 13]: eb1a3eee15c3169c +Block 0003 [ 14]: f85ce6304143c718 +Block 0003 [ 15]: 25cc4e07845bc0d3 +Block 0003 [ 16]: faf52d0c41d56a98 +Block 0003 [ 17]: da5600f13157ef01 +Block 0003 [ 18]: 96acfebd55f2437c +Block 0003 [ 19]: c214c0eb8a6bf5a7 +Block 0003 [ 20]: a8129fd25e9c4a6e +Block 0003 [ 21]: 9f9f490ee4c80129 +Block 0003 [ 22]: dd48fcad213f4121 +Block 0003 [ 23]: a48ea8e66dd84ac8 +Block 0003 [ 24]: 613cde171f240f13 +Block 0003 [ 25]: eace1402be0ad779 +Block 0003 [ 26]: b9d7bdbb30fcf1c8 +Block 0003 [ 27]: 4f135f12be01b425 +Block 0003 [ 28]: 4930fec1d4366e0b +Block 0003 [ 29]: fca833d55bf82ed9 +Block 0003 [ 30]: f2dcd795c9e1e354 +Block 0003 [ 31]: dab4e97ae334a48a +Block 0003 [ 32]: 05facd2a746f4fd7 +Block 0003 [ 33]: b7f5e73d82ede13e +Block 0003 [ 34]: 185a66e8575ac003 +Block 0003 [ 35]: 07c8314d75afa258 +Block 0003 [ 36]: 4b6de5582fbbba66 +Block 0003 [ 37]: 5e6e62eb4ecf1374 +Block 0003 [ 38]: ed59e2b8a754522b +Block 0003 [ 39]: 0cd50f2d238c80a3 +Block 0003 [ 40]: df8eb0346cb94c20 +Block 0003 [ 41]: ff3946e557683c77 +Block 0003 [ 42]: b08b188c5f361337 +Block 0003 [ 43]: 7c2e03108321abf4 +Block 0003 [ 44]: 78c17e33bccec828 +Block 0003 [ 45]: 9882c1219c8d702e +Block 0003 [ 46]: 791761d3870e074f +Block 0003 [ 47]: f2138d034225e07c +Block 0003 [ 48]: 522611a94c109b36 +Block 0003 [ 49]: a20e833c25511dfb +Block 0003 [ 50]: 20e9d9679ea1f760 +Block 0003 [ 51]: b4e3243f0559be69 +Block 0003 [ 52]: 8ec633381fa03a91 +Block 0003 [ 53]: d0cb963269d9698c +Block 0003 [ 54]: fedda033ed8a18a8 +Block 0003 [ 55]: a819c67dcaadb66f +Block 0003 [ 56]: 44319f03fb5dd547 +Block 0003 [ 57]: 754c3e6431751894 +Block 0003 [ 58]: 315467ad4cf190ef +Block 0003 [ 59]: f52ee658a9283a3f +Block 0003 [ 60]: 1ededd0b2ccf557a +Block 0003 [ 61]: 1ecc17875870bf83 +Block 0003 [ 62]: 3f14d3fa1b096cf7 +Block 0003 [ 63]: 4cd38f22d0117ce3 +Block 0003 [ 64]: 47ea92a6ee45f08a +Block 0003 [ 65]: cb1940e42c6993d1 +Block 0003 [ 66]: e6e77ade51a89648 +Block 0003 [ 67]: f577683fa0969dbe +Block 0003 [ 68]: 965466637e9bc32d +Block 0003 [ 69]: 94cb31ff56d5b9c2 +Block 0003 [ 70]: f766a40cdc318679 +Block 0003 [ 71]: 6ad738e65fb2615f +Block 0003 [ 72]: 27a15f49b513b95a +Block 0003 [ 73]: b7c75e1f6085abe1 +Block 0003 [ 74]: 12fb477a2785ab14 +Block 0003 [ 75]: 9592b64a56f72842 +Block 0003 [ 76]: 4400ce28a39a9a75 +Block 0003 [ 77]: 1058b921154e6887 +Block 0003 [ 78]: 901341cb4ef8df1d +Block 0003 [ 79]: 36c23f497125a204 +Block 0003 [ 80]: 9aa0d67ece136823 +Block 0003 [ 81]: 0bed05e22536d381 +Block 0003 [ 82]: de549c999d8e0c63 +Block 0003 [ 83]: 3f17aa1b293c9cf0 +Block 0003 [ 84]: d919d0de04950d58 +Block 0003 [ 85]: 75348400ea415bb8 +Block 0003 [ 86]: 4ccf124c6cfe712b +Block 0003 [ 87]: 39a8740c2720429c +Block 0003 [ 88]: f7698dfaa19b150b +Block 0003 [ 89]: 2b42bd8bc337db2f +Block 0003 [ 90]: 2aaf1982d64484d3 +Block 0003 [ 91]: 3aabe630047c593e +Block 0003 [ 92]: 2fe47f5bb56c5cf2 +Block 0003 [ 93]: cb2d883048b2c4d1 +Block 0003 [ 94]: 41c02dd86a8df448 +Block 0003 [ 95]: d28a5aed127310dc +Block 0003 [ 96]: 16b60a8c47c04a66 +Block 0003 [ 97]: 4665b179132f2186 +Block 0003 [ 98]: 0efe17af99cb9ae1 +Block 0003 [ 99]: df33778d909f84cc +Block 0003 [100]: 5f19ba2c8fa06a0e +Block 0003 [101]: 48fbe0f6122c7253 +Block 0003 [102]: 679cf02d3c42d7c7 +Block 0003 [103]: e4024bf993b5a1d5 +Block 0003 [104]: eaf6463430c49079 +Block 0003 [105]: 86b0f0afa95d3c5e +Block 0003 [106]: e955a61581d56a29 +Block 0003 [107]: 182f40b411056af3 +Block 0003 [108]: 965323563f02b1fe +Block 0003 [109]: 993f4c4f6f92df68 +Block 0003 [110]: 8cfe329259529560 +Block 0003 [111]: 253df070391de9fd +Block 0003 [112]: db2af946400e36dc +Block 0003 [113]: ae825c6ff52dd23b +Block 0003 [114]: c3108ee25e43b626 +Block 0003 [115]: bf02a0a2695652ce +Block 0003 [116]: 2f4d2e01345f8f8c +Block 0003 [117]: 4beb38ab3ad7a2cf +Block 0003 [118]: a927049b5e4d0367 +Block 0003 [119]: 684ff1b489531348 +Block 0003 [120]: 91deb2abe6282716 +Block 0003 [121]: 06a5d16d172ec748 +Block 0003 [122]: 74c6aec814cf0609 +Block 0003 [123]: 1245c8dd2e3be804 +Block 0003 [124]: bc1743e961ba8a2f +Block 0003 [125]: 1b43aa6d4214f09b +Block 0003 [126]: 67b87e4761320e77 +Block 0003 [127]: 15e55998edb32dcd +Block 0004 [ 0]: dc8e74b7fc590eaa +Block 0004 [ 1]: 9d6314b244b500ff +Block 0004 [ 2]: 3350958e5e7f2b09 +Block 0004 [ 3]: ec09ff4db1a6b148 +Block 0004 [ 4]: 9c3f7e2c451e9233 +Block 0004 [ 5]: e59dfa53f9aa9188 +Block 0004 [ 6]: 285cbdae58d70fdc +Block 0004 [ 7]: 9d9b7785a055f7c2 +Block 0004 [ 8]: e3f8faf32897907d +Block 0004 [ 9]: b5ca165b816256ad +Block 0004 [ 10]: c05851fad1b32958 +Block 0004 [ 11]: 52f6fe7a373b24e9 +Block 0004 [ 12]: b24bc961f3fe4019 +Block 0004 [ 13]: 02ffc3b077c07b95 +Block 0004 [ 14]: 3aaeb8c90ffff3a1 +Block 0004 [ 15]: 85fea4be84a3de96 +Block 0004 [ 16]: bd4b0eb6ae514a34 +Block 0004 [ 17]: cf1c358c1d01ce4d +Block 0004 [ 18]: 8c3bdde108df5c56 +Block 0004 [ 19]: 72aece74925a81ad +Block 0004 [ 20]: 5a08715b69113bef +Block 0004 [ 21]: 5c9474489416b531 +Block 0004 [ 22]: 2f0cb5a734c055c3 +Block 0004 [ 23]: b1087159c2f1e1c5 +Block 0004 [ 24]: b80d724159604e3b +Block 0004 [ 25]: 1b5d0f02f6fbddf7 +Block 0004 [ 26]: 8c5eeb140196e051 +Block 0004 [ 27]: 32b225f300b2b693 +Block 0004 [ 28]: 8cd5de71ce325031 +Block 0004 [ 29]: 9a7c5ffccf16b550 +Block 0004 [ 30]: c2b81918ce952de3 +Block 0004 [ 31]: a4e55a59535fa36f +Block 0004 [ 32]: 7f59e3befceb12f4 +Block 0004 [ 33]: 55e8178cedb51f45 +Block 0004 [ 34]: f0b04ee9e6643981 +Block 0004 [ 35]: e256ef0b24da2c69 +Block 0004 [ 36]: 4d1a151fcb27b6a5 +Block 0004 [ 37]: 699a3c78f1675517 +Block 0004 [ 38]: ced57d99187b60e6 +Block 0004 [ 39]: c108cdade276da75 +Block 0004 [ 40]: 99e0eaa3da5c44c2 +Block 0004 [ 41]: dfea1825e0d9a17b +Block 0004 [ 42]: 2cc613916948ea30 +Block 0004 [ 43]: cd819de0ca0212c2 +Block 0004 [ 44]: fac7dccc3e730827 +Block 0004 [ 45]: 105a03d54648fdd8 +Block 0004 [ 46]: 34312385ca673f6a +Block 0004 [ 47]: d0f822d27923ac11 +Block 0004 [ 48]: 100a29a4b1408466 +Block 0004 [ 49]: d6becda85ba0f5fe +Block 0004 [ 50]: 8ad493d4dfffb17d +Block 0004 [ 51]: 8cd3d3573d0bb163 +Block 0004 [ 52]: 43f071e93ad72fb9 +Block 0004 [ 53]: c87652edd33c7917 +Block 0004 [ 54]: 4e29ba26e813d81e +Block 0004 [ 55]: 3bcb08574e586c9a +Block 0004 [ 56]: c297461ec3887f17 +Block 0004 [ 57]: be25299cbbff60eb +Block 0004 [ 58]: 66a8d2171828e4ce +Block 0004 [ 59]: 4118a5209f57988f +Block 0004 [ 60]: b0babff16e382e50 +Block 0004 [ 61]: a0066510d52ada48 +Block 0004 [ 62]: 296ba2db305371b6 +Block 0004 [ 63]: 9f13dac104319d84 +Block 0004 [ 64]: 969cf4839e19a635 +Block 0004 [ 65]: c159007a9e201a66 +Block 0004 [ 66]: e1afcbef7896ecf3 +Block 0004 [ 67]: dce56985c9e55b74 +Block 0004 [ 68]: 06d217e23765ecd6 +Block 0004 [ 69]: 2e107a4e6b1b4855 +Block 0004 [ 70]: 4c56777504e10d30 +Block 0004 [ 71]: 835d33900ba6804b +Block 0004 [ 72]: 16f1261f30e2d4d7 +Block 0004 [ 73]: a0db1f831faa49c7 +Block 0004 [ 74]: 687f791433d3cfd4 +Block 0004 [ 75]: 2b8c8b5a1136b296 +Block 0004 [ 76]: 8b9f1fb39ff29266 +Block 0004 [ 77]: ead12a5b8be281cd +Block 0004 [ 78]: 542a14b6c7b4ca64 +Block 0004 [ 79]: 2ed2d673ff068df7 +Block 0004 [ 80]: 0834c45ece6ad1bd +Block 0004 [ 81]: 728d7efe5d32bad9 +Block 0004 [ 82]: 2b12522c55cffe6e +Block 0004 [ 83]: 3e485f8c32faec76 +Block 0004 [ 84]: 4495227ae0c7151e +Block 0004 [ 85]: 18ac2111c500173c +Block 0004 [ 86]: c305c7e0121db98a +Block 0004 [ 87]: dcedeacc5289d43f +Block 0004 [ 88]: ad0f3edf645cca7d +Block 0004 [ 89]: 7caf7e1cf8a716e5 +Block 0004 [ 90]: e7d28d7d683c41ef +Block 0004 [ 91]: a56b8c0c1a11a92a +Block 0004 [ 92]: b03d46bf8064efe4 +Block 0004 [ 93]: a707cf2d4b81db6f +Block 0004 [ 94]: 5780f483897f5950 +Block 0004 [ 95]: 0ecc14064af2288c +Block 0004 [ 96]: 01097e9ccdd30b9a +Block 0004 [ 97]: 0eda1ee216c84a6d +Block 0004 [ 98]: 537dfc124945de42 +Block 0004 [ 99]: 50517fc114230cac +Block 0004 [100]: 3c6ebe9d7aad9989 +Block 0004 [101]: 0c2f35ef9416183b +Block 0004 [102]: 1f6c86dd8a94640e +Block 0004 [103]: c70c2ce465657a97 +Block 0004 [104]: 047034fbcbcb9b29 +Block 0004 [105]: a1699cfb300ed9db +Block 0004 [106]: 3a6210af581ed116 +Block 0004 [107]: cd1bda027a3d3045 +Block 0004 [108]: 57a5caa0bc28e603 +Block 0004 [109]: 32d5e2ea8b30f6bb +Block 0004 [110]: 9ad895e8ab659736 +Block 0004 [111]: bdd2d25a6ddd70b5 +Block 0004 [112]: b24a12932881d44a +Block 0004 [113]: c02b01e7e74d263d +Block 0004 [114]: aaacd49e4471777c +Block 0004 [115]: 3d52fbae820ec99f +Block 0004 [116]: 916c93831f33935d +Block 0004 [117]: 9c8d5cec1a46aa63 +Block 0004 [118]: ddd4ac54f2291697 +Block 0004 [119]: 6f4468d2424dac96 +Block 0004 [120]: 15b42e0be06acd4e +Block 0004 [121]: 211f17f267cfb716 +Block 0004 [122]: 5094ed716457b202 +Block 0004 [123]: f633d3cf02f40fde +Block 0004 [124]: d4db8368201c498f +Block 0004 [125]: 2db510d98cfaff60 +Block 0004 [126]: b1e33c1b76f95a64 +Block 0004 [127]: df8c2031f482ac8f +Block 0005 [ 0]: 428f586174d3c70b +Block 0005 [ 1]: 8db491dcdebe8485 +Block 0005 [ 2]: 118abae9acec1292 +Block 0005 [ 3]: 0e078f30b1e631f4 +Block 0005 [ 4]: bdfac1c0ea61bb7a +Block 0005 [ 5]: 697bd8973c293700 +Block 0005 [ 6]: 3126ab7646837303 +Block 0005 [ 7]: f92297c907a1996d +Block 0005 [ 8]: 47d61a1d7f4d3325 +Block 0005 [ 9]: 34233a1540aecf67 +Block 0005 [ 10]: 0a46392ba9adc825 +Block 0005 [ 11]: 3d9bd182387ecbf1 +Block 0005 [ 12]: e156dd80f34c7a8c +Block 0005 [ 13]: be9123cc6bc7fe0d +Block 0005 [ 14]: 0672be8310b5b19f +Block 0005 [ 15]: 70e659fa9801eeee +Block 0005 [ 16]: 232dccf29d64f5bd +Block 0005 [ 17]: 92f3d4d13c5f3b43 +Block 0005 [ 18]: e992d055e8cac1f3 +Block 0005 [ 19]: 0525a4986101fba6 +Block 0005 [ 20]: c52ce6dfaaea5448 +Block 0005 [ 21]: ea9bbba9f06706c4 +Block 0005 [ 22]: 3f1b980a74b5d42a +Block 0005 [ 23]: 0a4c3eb9029ef23e +Block 0005 [ 24]: a1854f7401a80884 +Block 0005 [ 25]: 4dad34808194c21e +Block 0005 [ 26]: 1e02a809c838b8c7 +Block 0005 [ 27]: 8eef8cc8b2777486 +Block 0005 [ 28]: 9d1e414a0e247885 +Block 0005 [ 29]: b173e9f80513765a +Block 0005 [ 30]: 76d7e21bb9103ace +Block 0005 [ 31]: fc7db715558ae917 +Block 0005 [ 32]: fb2e166463f57ee9 +Block 0005 [ 33]: 9221afc54f4005ef +Block 0005 [ 34]: 45b88b3514280e3d +Block 0005 [ 35]: b7397620e64fa244 +Block 0005 [ 36]: 6a0fa21bce415918 +Block 0005 [ 37]: d7372a31d4f8d3d5 +Block 0005 [ 38]: b62a1edd3096653b +Block 0005 [ 39]: 3f6cad5032a7538f +Block 0005 [ 40]: 40862cb2bb527ab2 +Block 0005 [ 41]: d8fcabf1cf4a8c22 +Block 0005 [ 42]: 28cb352287c31ba9 +Block 0005 [ 43]: aa329a2b67718671 +Block 0005 [ 44]: fed28d465bb389d3 +Block 0005 [ 45]: 93155bf5106507fa +Block 0005 [ 46]: cdec2bffbabf3f51 +Block 0005 [ 47]: 194b17b5ccf2a0bd +Block 0005 [ 48]: 86ea4fc726fe1946 +Block 0005 [ 49]: 8eede1e171f208ea +Block 0005 [ 50]: dd0ef14e7ddbc0a9 +Block 0005 [ 51]: 22defa92554be18b +Block 0005 [ 52]: 71b1af77aca1137f +Block 0005 [ 53]: b901b61fbd2ee55a +Block 0005 [ 54]: 6eac949e49159e58 +Block 0005 [ 55]: cbe686bfe37766bb +Block 0005 [ 56]: 96f7755a97b83d81 +Block 0005 [ 57]: b3b3373331f8c909 +Block 0005 [ 58]: a8fd4a446f764b7b +Block 0005 [ 59]: 30ecc25bc5774ac5 +Block 0005 [ 60]: 3de797f5cddfbc8c +Block 0005 [ 61]: a467fa0dad2e8e9d +Block 0005 [ 62]: e6dedb97fec747f0 +Block 0005 [ 63]: 6d864b261ffbe29e +Block 0005 [ 64]: 5a20a290b71a73d2 +Block 0005 [ 65]: 4145c2e9c234a5d8 +Block 0005 [ 66]: da79eb6adc2cc4cd +Block 0005 [ 67]: 8d1209074f3917ac +Block 0005 [ 68]: 163d2ce278187e4c +Block 0005 [ 69]: 1cf8c5edfa5ee4da +Block 0005 [ 70]: 620b0a9e1056fcf2 +Block 0005 [ 71]: c2f976ead38341b2 +Block 0005 [ 72]: 2bff264920fce04e +Block 0005 [ 73]: d06343c6d8401fc2 +Block 0005 [ 74]: bfb9fcefa4bb830b +Block 0005 [ 75]: 2d6d546963be975c +Block 0005 [ 76]: 25866cb74e5e4fde +Block 0005 [ 77]: bb3b80728adbb3b8 +Block 0005 [ 78]: 59ffb3a2616f42d9 +Block 0005 [ 79]: 143f6b0612d48202 +Block 0005 [ 80]: dc7fe0f81b2728e7 +Block 0005 [ 81]: 1af6257676192ce4 +Block 0005 [ 82]: 362bc9ab7b4301d2 +Block 0005 [ 83]: b3b27a39ff1b93e2 +Block 0005 [ 84]: 6853a6bf9df6d437 +Block 0005 [ 85]: 27bfa4abf07b49b8 +Block 0005 [ 86]: bf1ecbb4aee2b6fd +Block 0005 [ 87]: 86aca973a86481c4 +Block 0005 [ 88]: 69b6116ecde430f5 +Block 0005 [ 89]: 39e413ab45810fb8 +Block 0005 [ 90]: dd6eea0068811533 +Block 0005 [ 91]: 77645481ca5b3fe1 +Block 0005 [ 92]: 0cd1fd5313e15278 +Block 0005 [ 93]: e6bfdc226276693a +Block 0005 [ 94]: 55421022e9411209 +Block 0005 [ 95]: 55e67f4cdf743c0c +Block 0005 [ 96]: e50ed02e64d454b4 +Block 0005 [ 97]: 0126f30b4983d907 +Block 0005 [ 98]: 53bcd1d00e93215a +Block 0005 [ 99]: 85b504f6ad323e91 +Block 0005 [100]: 6814f10585b91d90 +Block 0005 [101]: 45081065e5591a36 +Block 0005 [102]: 77f70317db7f7de1 +Block 0005 [103]: 57e18ad0cd094219 +Block 0005 [104]: 9b7a484a8a308720 +Block 0005 [105]: 46e1e3b2b52790db +Block 0005 [106]: 305905b73c2cb62e +Block 0005 [107]: cbcc69dc0a0c42f6 +Block 0005 [108]: d7eb3e010ce9bee9 +Block 0005 [109]: f1a6cf342bcdfea8 +Block 0005 [110]: b1618f5b9a9a98f8 +Block 0005 [111]: 8d8d779b3ce5835d +Block 0005 [112]: 9ca21c957973116d +Block 0005 [113]: 64083f3d9d18e4f8 +Block 0005 [114]: 6195ee7bb3ba04e3 +Block 0005 [115]: 97185e5d48380d48 +Block 0005 [116]: 82dbd9fc9e4c0e03 +Block 0005 [117]: e3913fe95965d557 +Block 0005 [118]: e2fa70aef1efe193 +Block 0005 [119]: d336389f1cbb77c0 +Block 0005 [120]: 559a7ab0def81cc1 +Block 0005 [121]: 870601ae9f31df12 +Block 0005 [122]: b045c7c5a43625c2 +Block 0005 [123]: cbdaaeb4c2565c6b +Block 0005 [124]: f83296cfab58be99 +Block 0005 [125]: d637b31caae3b66f +Block 0005 [126]: 9a3a611bb0de8640 +Block 0005 [127]: 958fe6c02727c98a +Block 0006 [ 0]: 13a5f2096ff5ca1f +Block 0006 [ 1]: 1b2f72026e4eb528 +Block 0006 [ 2]: eaa2ba7ac954db30 +Block 0006 [ 3]: b54ba8519e44db4a +Block 0006 [ 4]: c061311fd57a2eab +Block 0006 [ 5]: 83c9d06aa3983ca8 +Block 0006 [ 6]: b0c1008b6073ec65 +Block 0006 [ 7]: eba730c138748909 +Block 0006 [ 8]: b5d15ad429bfbd5a +Block 0006 [ 9]: da277ab755811426 +Block 0006 [ 10]: 65f8da290ecb3661 +Block 0006 [ 11]: fc9a09aeae2cec69 +Block 0006 [ 12]: 002f075123624389 +Block 0006 [ 13]: 5bd0d62a670fb3c8 +Block 0006 [ 14]: a5b1b4c10248f86d +Block 0006 [ 15]: 46dc458c8af1bc5b +Block 0006 [ 16]: b0109567fc2bb44d +Block 0006 [ 17]: 062cc29395ed989b +Block 0006 [ 18]: 908c3833f51a7a8c +Block 0006 [ 19]: 7c8baba41c73d5c8 +Block 0006 [ 20]: a884c98ecfa827f7 +Block 0006 [ 21]: 864b233581cebf3b +Block 0006 [ 22]: a69dc39ed76df5b1 +Block 0006 [ 23]: d287fd37bd184b4b +Block 0006 [ 24]: adcb508656f50a1d +Block 0006 [ 25]: 8345f93a185de052 +Block 0006 [ 26]: 32ee921a5af33f77 +Block 0006 [ 27]: d10349bb3f1a2e60 +Block 0006 [ 28]: 326d8e10ed711927 +Block 0006 [ 29]: f1ea40baf2e29205 +Block 0006 [ 30]: 5ddee886519f975b +Block 0006 [ 31]: 3e00b776de23dbf9 +Block 0006 [ 32]: 09b0fc2bcbc5ca5e +Block 0006 [ 33]: 6c9f8382caaf682b +Block 0006 [ 34]: bbce5e8d97ca0f8a +Block 0006 [ 35]: 94c9eea4942822ac +Block 0006 [ 36]: 09ed551735403790 +Block 0006 [ 37]: f7f7836b8a450424 +Block 0006 [ 38]: e7cc18315c9d0cc3 +Block 0006 [ 39]: e6ad27351c122000 +Block 0006 [ 40]: 60400244ed421285 +Block 0006 [ 41]: c803b2797ce9ead5 +Block 0006 [ 42]: 4fb1724c2afde396 +Block 0006 [ 43]: 62e51ea923c226b8 +Block 0006 [ 44]: c10866f10d269f8e +Block 0006 [ 45]: a291622995a7e4b9 +Block 0006 [ 46]: d457804368b2b68a +Block 0006 [ 47]: fd6bab4757e691bc +Block 0006 [ 48]: bb79b0ae54383df4 +Block 0006 [ 49]: 8775ea6bde327a09 +Block 0006 [ 50]: 0054bbfcce82e402 +Block 0006 [ 51]: 7ec75affa73a4918 +Block 0006 [ 52]: 7a01e09e750bea45 +Block 0006 [ 53]: 1da549e65e8991e6 +Block 0006 [ 54]: 65fff25852256be3 +Block 0006 [ 55]: 6054391646456bac +Block 0006 [ 56]: 75f3b5c0f96b5e33 +Block 0006 [ 57]: 89eebe6001f1afb0 +Block 0006 [ 58]: 98806a81763232bd +Block 0006 [ 59]: 77e23908d1632741 +Block 0006 [ 60]: 0898a711d56a4778 +Block 0006 [ 61]: 154939153173d960 +Block 0006 [ 62]: 279cf70d61ba82e0 +Block 0006 [ 63]: b90121d04bec0415 +Block 0006 [ 64]: 264b25de48cb8bfa +Block 0006 [ 65]: f82c5a6b2a60cde6 +Block 0006 [ 66]: 19d22e2cc1202e8e +Block 0006 [ 67]: fd2af76930971bfb +Block 0006 [ 68]: 1216b5c315238061 +Block 0006 [ 69]: c2e74ba6d227f392 +Block 0006 [ 70]: a9ec024ab42ed537 +Block 0006 [ 71]: aa8a6bcb77dd838a +Block 0006 [ 72]: dcc302dbc34f005d +Block 0006 [ 73]: 0f8b425a61ffee95 +Block 0006 [ 74]: 119c8ec42b470039 +Block 0006 [ 75]: 1e9df7d4fcd392c7 +Block 0006 [ 76]: 58efd0e8e7894f85 +Block 0006 [ 77]: 28bf582abcef94fd +Block 0006 [ 78]: f73f1167a97ff861 +Block 0006 [ 79]: 346d766e03a2ed71 +Block 0006 [ 80]: fc398b655ef68204 +Block 0006 [ 81]: 70e49a4e1c35da2a +Block 0006 [ 82]: 7c88d9a7e02dd08d +Block 0006 [ 83]: 1a242872c6c6501f +Block 0006 [ 84]: 45a6d35f0a769228 +Block 0006 [ 85]: 6ac75dc596984efe +Block 0006 [ 86]: 08a8c6acf1dbd35a +Block 0006 [ 87]: a7c96972f71393b7 +Block 0006 [ 88]: fcde534c13fb4f3a +Block 0006 [ 89]: 6e7791d3dca43b7b +Block 0006 [ 90]: b7e7e7149e54e311 +Block 0006 [ 91]: ae36663b75583d74 +Block 0006 [ 92]: ca29be960080870e +Block 0006 [ 93]: e9ae573efeba7733 +Block 0006 [ 94]: 7666da38d0256d63 +Block 0006 [ 95]: fc8fecc855b22f83 +Block 0006 [ 96]: 17aeb02e5bfd3870 +Block 0006 [ 97]: 523a873983a5fef4 +Block 0006 [ 98]: c517c29248c433ca +Block 0006 [ 99]: 9291190aa889242c +Block 0006 [100]: 5c165c8747de1f4d +Block 0006 [101]: 97e6a8ecc76b2408 +Block 0006 [102]: 0d661557f80eff9d +Block 0006 [103]: 11ff8003a5af2667 +Block 0006 [104]: adbd07f681b3df22 +Block 0006 [105]: 4696fd460dd67114 +Block 0006 [106]: a00ad52b70e15631 +Block 0006 [107]: 1c14750d3d9b138c +Block 0006 [108]: e89f1af55e6919ae +Block 0006 [109]: f3a07ba7492c8b43 +Block 0006 [110]: 6c6a30cf18f5b9a0 +Block 0006 [111]: 112f356d18dce24b +Block 0006 [112]: 90c160c1efaca7ff +Block 0006 [113]: 38a100656072b8ca +Block 0006 [114]: b6d618191ddbe1a1 +Block 0006 [115]: 953791eb67e3e8a4 +Block 0006 [116]: 064ed438e27e27ce +Block 0006 [117]: 513b1cec646ad039 +Block 0006 [118]: 4cbc5de8ec45b103 +Block 0006 [119]: 46905804d90bda25 +Block 0006 [120]: 9949ec8277cf3959 +Block 0006 [121]: 7581ae0071b4de6e +Block 0006 [122]: 4f266c522e844d11 +Block 0006 [123]: cd96ce921dd487e3 +Block 0006 [124]: 3abc3c9a1d0cbee1 +Block 0006 [125]: 666c8582319d34ea +Block 0006 [126]: 0e72bbb45584bf7d +Block 0006 [127]: 2e1c1e750188d265 +Block 0007 [ 0]: 3d6a0d353a582cc3 +Block 0007 [ 1]: 725b5cb52fdcc804 +Block 0007 [ 2]: 0d637aabd89a5f42 +Block 0007 [ 3]: cdd0faf2f954793d +Block 0007 [ 4]: a8a226bdfe9b303b +Block 0007 [ 5]: 5bb2904a4ffd77b0 +Block 0007 [ 6]: a6ff9e1e69e08a3b +Block 0007 [ 7]: 4d765e9f5a455668 +Block 0007 [ 8]: d8f5b730f9e01cb7 +Block 0007 [ 9]: ffc5170716649d8e +Block 0007 [ 10]: cbca0d385f668bb3 +Block 0007 [ 11]: 23124a2f75853cc6 +Block 0007 [ 12]: c266ba9d28147cc0 +Block 0007 [ 13]: 3433fdda5ee50401 +Block 0007 [ 14]: 83b14f2bb79849cc +Block 0007 [ 15]: 4e47b754dd755a6a +Block 0007 [ 16]: 0711503b0e364de1 +Block 0007 [ 17]: 96b399210d06c4bd +Block 0007 [ 18]: e7a0c87f6ce24190 +Block 0007 [ 19]: 952db034322194f7 +Block 0007 [ 20]: bf826ab367d69924 +Block 0007 [ 21]: ca7a0e451f0baedf +Block 0007 [ 22]: bc199a271346d96d +Block 0007 [ 23]: a89504ec33d58563 +Block 0007 [ 24]: 650fe1dd47c229ac +Block 0007 [ 25]: c8b248c48aab400f +Block 0007 [ 26]: 9c79799cb6d7b11e +Block 0007 [ 27]: ca00306b9e70a62f +Block 0007 [ 28]: 7a9afb832313f70d +Block 0007 [ 29]: 7699ea3c8b6d93f3 +Block 0007 [ 30]: 2081b3b9830ada40 +Block 0007 [ 31]: 84dfbb20400b7794 +Block 0007 [ 32]: 09711874dcde8f25 +Block 0007 [ 33]: 2146eefadd811802 +Block 0007 [ 34]: 38ed72bcae48eb1e +Block 0007 [ 35]: 1c780fddf3718799 +Block 0007 [ 36]: ec20a679b1ba8e16 +Block 0007 [ 37]: e2e3779e19f633a5 +Block 0007 [ 38]: 85b74c1f84fceede +Block 0007 [ 39]: 9982bbd5ae9822b6 +Block 0007 [ 40]: 4724c09a0f3a9eb3 +Block 0007 [ 41]: cc4b6ee011d10bf9 +Block 0007 [ 42]: 9c1d3294f23d0f61 +Block 0007 [ 43]: 2c7fbde5e6d9f1ef +Block 0007 [ 44]: 4cb326c5aeb97687 +Block 0007 [ 45]: 5ee9a98967f03584 +Block 0007 [ 46]: 54e070d3f4868d43 +Block 0007 [ 47]: fbed90f1e791fe2b +Block 0007 [ 48]: 5372b297fc080bb2 +Block 0007 [ 49]: f1eea4e6e651fa54 +Block 0007 [ 50]: 18e19f83b3845e8b +Block 0007 [ 51]: 982061488bf2c91e +Block 0007 [ 52]: 000f915b600b1bbf +Block 0007 [ 53]: 551754f75f24f4e2 +Block 0007 [ 54]: 9cb0d725abb977f2 +Block 0007 [ 55]: e41c7bc36ac799d2 +Block 0007 [ 56]: 83d055c7db8eb6a9 +Block 0007 [ 57]: 990206c62219daa6 +Block 0007 [ 58]: 6de34850e119e11f +Block 0007 [ 59]: 5e463ed17b7fec81 +Block 0007 [ 60]: 112ea7aefee3a408 +Block 0007 [ 61]: e0aa67218af846e5 +Block 0007 [ 62]: b85f6a690c0ddb39 +Block 0007 [ 63]: c1934b1adb438156 +Block 0007 [ 64]: c7d07d9d5667e378 +Block 0007 [ 65]: 210e4d69ecfb89e5 +Block 0007 [ 66]: ea7d450766f1afdc +Block 0007 [ 67]: 2f18fda4327f7130 +Block 0007 [ 68]: f3d7c1cc7034f9de +Block 0007 [ 69]: d83b6b3e29f818db +Block 0007 [ 70]: de251265d93d6b4e +Block 0007 [ 71]: bfe371f18fdaf889 +Block 0007 [ 72]: dfe78a1ad4ecd33d +Block 0007 [ 73]: 70bfbe20c89fe34b +Block 0007 [ 74]: dd52d0f45682a779 +Block 0007 [ 75]: fcbbb05bfcb94a23 +Block 0007 [ 76]: b872ebe1c252cf63 +Block 0007 [ 77]: 314c2bdb319a7747 +Block 0007 [ 78]: a966ac152070955b +Block 0007 [ 79]: bf909e5d43b0772b +Block 0007 [ 80]: d3d47c8e0514d23d +Block 0007 [ 81]: 94118497f2ab005e +Block 0007 [ 82]: 1911d0a7cf5af514 +Block 0007 [ 83]: b4a8a52ace59fe3d +Block 0007 [ 84]: 36c35f2fae28046a +Block 0007 [ 85]: 9efc57f45f906003 +Block 0007 [ 86]: 440f5c79192c80b4 +Block 0007 [ 87]: 647e0eb35cdd560f +Block 0007 [ 88]: 34fe5ab26c3ea8b3 +Block 0007 [ 89]: 945b70c653f76a84 +Block 0007 [ 90]: 67cd6bc8159d6ff9 +Block 0007 [ 91]: 2dc4f192345b95ec +Block 0007 [ 92]: f124ffb3359123ab +Block 0007 [ 93]: c4f88c028b3cd129 +Block 0007 [ 94]: a345e2bb55778fe4 +Block 0007 [ 95]: 691f7549a345d348 +Block 0007 [ 96]: 04486d82573ae921 +Block 0007 [ 97]: 98d3114ddc02a162 +Block 0007 [ 98]: 519bdca611bbeaa9 +Block 0007 [ 99]: 8791fba88b020099 +Block 0007 [100]: d514acbe5dfec5bb +Block 0007 [101]: e45d4389e86c7450 +Block 0007 [102]: 3a71f5aa2eb5cd8d +Block 0007 [103]: 80fdc6c491fea6c6 +Block 0007 [104]: b92d709cda9c22e5 +Block 0007 [105]: 59f0a6d67ae30bc3 +Block 0007 [106]: 563e24db351fec9c +Block 0007 [107]: 89319bc5b615c8e2 +Block 0007 [108]: cd24702c8f2b2a4b +Block 0007 [109]: f847342241040fc2 +Block 0007 [110]: fd5471a0f656059c +Block 0007 [111]: 2540eda8a41f5dc7 +Block 0007 [112]: 0938197b41f26a6e +Block 0007 [113]: 74bf1b4f4185530e +Block 0007 [114]: 0e9b724c2ead5c00 +Block 0007 [115]: 5dde068018d59b63 +Block 0007 [116]: 7d2300969b112ade +Block 0007 [117]: d143931a829a962e +Block 0007 [118]: 1130f16e830f47c1 +Block 0007 [119]: 4ca052b7c85637b6 +Block 0007 [120]: 9994f892e4ff0b39 +Block 0007 [121]: 5364a7ef273f73b1 +Block 0007 [122]: 4f17e1310ef3231a +Block 0007 [123]: 7f8a901ea990cf27 +Block 0007 [124]: 45c55fb656b02173 +Block 0007 [125]: 3a1ea5407b7fea45 +Block 0007 [126]: 002bf87dee768e57 +Block 0007 [127]: 2dc7651b0c5583f8 +Block 0008 [ 0]: 742f8fb520ae6daa +Block 0008 [ 1]: fce446d5bc718358 +Block 0008 [ 2]: a93b373872a69d36 +Block 0008 [ 3]: 13e5c9bc2e6affd2 +Block 0008 [ 4]: cc282d9f8703553b +Block 0008 [ 5]: 820575275919b5d9 +Block 0008 [ 6]: 817ea5478b0effd6 +Block 0008 [ 7]: f9881c280744754d +Block 0008 [ 8]: 7fb7b8fc7a1eb8ef +Block 0008 [ 9]: ffd4b707f3d45de2 +Block 0008 [ 10]: dd84ae76abbf5764 +Block 0008 [ 11]: a1021bea15349ebc +Block 0008 [ 12]: dc085965b90ef943 +Block 0008 [ 13]: 31e5c560a7d7b77b +Block 0008 [ 14]: be032148a0c07c8f +Block 0008 [ 15]: a753419700cfc665 +Block 0008 [ 16]: 6ebe31a9f4254abf +Block 0008 [ 17]: 55b9f7db14c8244e +Block 0008 [ 18]: 1a8b2e3ccf030e92 +Block 0008 [ 19]: 82636fca802840dd +Block 0008 [ 20]: f732a1969e172b06 +Block 0008 [ 21]: edd93cf252c26f25 +Block 0008 [ 22]: ac3ad0bbcdd482eb +Block 0008 [ 23]: d75ff2eaa53fd962 +Block 0008 [ 24]: 9c07e2e7b31a5b8e +Block 0008 [ 25]: addda03cda46d7cc +Block 0008 [ 26]: a5bf703a5fb91a4c +Block 0008 [ 27]: 741f1336aec16ba8 +Block 0008 [ 28]: 10182d82ff473a9c +Block 0008 [ 29]: 347fb75292f43be2 +Block 0008 [ 30]: 847b9eb98c312b36 +Block 0008 [ 31]: 33bc3ec0ad10331b +Block 0008 [ 32]: 15b2caf7cb5410db +Block 0008 [ 33]: 0c3550be731282e4 +Block 0008 [ 34]: 5a397cc26fff99fa +Block 0008 [ 35]: b17c5d6e4fd1ede4 +Block 0008 [ 36]: db2fa43068790f57 +Block 0008 [ 37]: 3269f58b18995887 +Block 0008 [ 38]: f47603af7a10d897 +Block 0008 [ 39]: f6d4a7472cf56197 +Block 0008 [ 40]: ef0d98db05c2bbcd +Block 0008 [ 41]: ce3f14c41600ff4b +Block 0008 [ 42]: 32f4c504313caf7d +Block 0008 [ 43]: f3b880db5af93e8f +Block 0008 [ 44]: 0fe500aa73c7088f +Block 0008 [ 45]: aee6e34e64b6cb6e +Block 0008 [ 46]: 3a05bef736d336dc +Block 0008 [ 47]: 6e853605e75f7183 +Block 0008 [ 48]: 206236c8094ebac1 +Block 0008 [ 49]: b35b4b3d8c5fb4ea +Block 0008 [ 50]: 28ecc628dc848c7d +Block 0008 [ 51]: 735c7631822806f4 +Block 0008 [ 52]: 31bb983646cd47f0 +Block 0008 [ 53]: 4bd96277dc02af9e +Block 0008 [ 54]: 70c3b35fda965c73 +Block 0008 [ 55]: 413eefd5bcafb495 +Block 0008 [ 56]: a1f06d3c4204d355 +Block 0008 [ 57]: f2b35ed34d3659ce +Block 0008 [ 58]: 5dbdb39ab57a8787 +Block 0008 [ 59]: d03c3ec335d9a228 +Block 0008 [ 60]: 5e440fcc902494ef +Block 0008 [ 61]: eeae54479b9f6253 +Block 0008 [ 62]: 12b636e97e88b26c +Block 0008 [ 63]: e392640ef6fbfccb +Block 0008 [ 64]: 439779f19e28aed4 +Block 0008 [ 65]: 8586ae7521b5f693 +Block 0008 [ 66]: 4c9c7e32a95bf1a6 +Block 0008 [ 67]: 7bd2f4eb39dd3020 +Block 0008 [ 68]: 486c6934408bedca +Block 0008 [ 69]: 99c8621fd54e9641 +Block 0008 [ 70]: ab95e5111f8a859a +Block 0008 [ 71]: 16c72004f220c79d +Block 0008 [ 72]: deef568d8f11d1ae +Block 0008 [ 73]: 3866577767167f84 +Block 0008 [ 74]: 448c4025a5b6b8c2 +Block 0008 [ 75]: 2601576f5e73029f +Block 0008 [ 76]: 48979d9e18c40aaa +Block 0008 [ 77]: f63696d7e72f4ab2 +Block 0008 [ 78]: e1be44739c6330cb +Block 0008 [ 79]: fcefc4f07881bedc +Block 0008 [ 80]: cb7bcf5fe34c782a +Block 0008 [ 81]: e536242d66e2b5e4 +Block 0008 [ 82]: d52c6c430151e02a +Block 0008 [ 83]: d67a851128f1af4b +Block 0008 [ 84]: 5c40071ed9fbe92d +Block 0008 [ 85]: ffea71996bb4f5c5 +Block 0008 [ 86]: daf4bdc1e45dcfdd +Block 0008 [ 87]: 91d04cfa46997480 +Block 0008 [ 88]: 3055156993a62fe4 +Block 0008 [ 89]: bbc1e67dfdb0f4cd +Block 0008 [ 90]: 39309ec35c7b4b49 +Block 0008 [ 91]: 303f31e117d00073 +Block 0008 [ 92]: 21a92f25e01fb7a0 +Block 0008 [ 93]: 0e0bc2d80d2f294e +Block 0008 [ 94]: 5ddf007474aec619 +Block 0008 [ 95]: 2cb4833140dbb020 +Block 0008 [ 96]: f7cc731050f4146b +Block 0008 [ 97]: d9c3005ec7fc26ac +Block 0008 [ 98]: 608d03d6c052d7e9 +Block 0008 [ 99]: 9dbe4bdff7dd483b +Block 0008 [100]: a735b1afee8074a6 +Block 0008 [101]: d85adbf0d4c585fe +Block 0008 [102]: 3d83720b804a263a +Block 0008 [103]: a9ad69e57cedb183 +Block 0008 [104]: a7d39c61c07eeb38 +Block 0008 [105]: c99c6f286d7b9431 +Block 0008 [106]: b8285a86d03c906b +Block 0008 [107]: df798910bc041924 +Block 0008 [108]: 8c49386589f299a7 +Block 0008 [109]: 45fe92757bf6d8d6 +Block 0008 [110]: 7dba0018b478baee +Block 0008 [111]: 56cf5f3f45a78ace +Block 0008 [112]: 1916dd1b710c89b8 +Block 0008 [113]: b02351109870d936 +Block 0008 [114]: e8ff79a2bd9e3d5d +Block 0008 [115]: d710953fc470a700 +Block 0008 [116]: 9cb71e374ecf8e65 +Block 0008 [117]: 6e95efbaafa1d7ca +Block 0008 [118]: 1d594725c8808490 +Block 0008 [119]: 792ca14862c298f8 +Block 0008 [120]: afa12fb82ecc5ec2 +Block 0008 [121]: ff7287be94d8ab12 +Block 0008 [122]: e36b81492fc2888e +Block 0008 [123]: c30a09066d63a87d +Block 0008 [124]: 6adde8f5e302d407 +Block 0008 [125]: a3d37dcc63d0ce1a +Block 0008 [126]: 5e5a76b9feac9179 +Block 0008 [127]: 38a72e7f58178079 +Block 0009 [ 0]: b0a3780fd2bdce93 +Block 0009 [ 1]: 27e7d325927ac969 +Block 0009 [ 2]: 2f2083aae423aaf9 +Block 0009 [ 3]: b4a06fe202ad3cac +Block 0009 [ 4]: 445f1088b3dc4aa1 +Block 0009 [ 5]: 13857c469c62aedb +Block 0009 [ 6]: afc29cfad94924af +Block 0009 [ 7]: face093366f984d4 +Block 0009 [ 8]: af941754039f0f69 +Block 0009 [ 9]: be3cf961d04b269b +Block 0009 [ 10]: 3570b906c3d08907 +Block 0009 [ 11]: bd2e3cd3bc2820a6 +Block 0009 [ 12]: a4211b9697d1882e +Block 0009 [ 13]: 304cbd04ac5ea0f1 +Block 0009 [ 14]: bc8a44351a93bf06 +Block 0009 [ 15]: dc35dce20205f20e +Block 0009 [ 16]: 27f87fc01a720476 +Block 0009 [ 17]: a7bf7924b4c9514d +Block 0009 [ 18]: 5711917da46d37d5 +Block 0009 [ 19]: 2b7871339e862ec0 +Block 0009 [ 20]: 37d5663947745563 +Block 0009 [ 21]: df99f88b5ad39469 +Block 0009 [ 22]: b8e2f35e53a7cec0 +Block 0009 [ 23]: 564180fd607bb368 +Block 0009 [ 24]: 8cad6f3858da8350 +Block 0009 [ 25]: fb611a961ad95aa5 +Block 0009 [ 26]: 98ef6ba355876428 +Block 0009 [ 27]: 1b32903fac102ee3 +Block 0009 [ 28]: 427ccb260b1e7f48 +Block 0009 [ 29]: 735c3b2404a42461 +Block 0009 [ 30]: 5bed75723136a22b +Block 0009 [ 31]: e962f930dc954571 +Block 0009 [ 32]: d4a907ed721dbd79 +Block 0009 [ 33]: 955bbdda37b3f34a +Block 0009 [ 34]: 8f1fdd908a91bda4 +Block 0009 [ 35]: 7b79831f7e8b8113 +Block 0009 [ 36]: 26a8e6613b3b2b49 +Block 0009 [ 37]: 180e1ee55b199460 +Block 0009 [ 38]: 1ca571295ae0ed7e +Block 0009 [ 39]: 3f5b7ca096599301 +Block 0009 [ 40]: e61f938973523bb8 +Block 0009 [ 41]: 87c36e5e521488f4 +Block 0009 [ 42]: d8d539b4d237e833 +Block 0009 [ 43]: 1ab7390b90a1a274 +Block 0009 [ 44]: bc917b2175e58dcb +Block 0009 [ 45]: a7d934862209853f +Block 0009 [ 46]: 637ca59d567b62e5 +Block 0009 [ 47]: fff021798cdf5193 +Block 0009 [ 48]: 9b19eb391a8ee238 +Block 0009 [ 49]: c11508809ecefdab +Block 0009 [ 50]: 4c86f3d3e42c58f9 +Block 0009 [ 51]: 40310029f5ea5939 +Block 0009 [ 52]: 17b721213f596d4e +Block 0009 [ 53]: 98c4d80ebebd4bd7 +Block 0009 [ 54]: c0a31eddf6a9d7d6 +Block 0009 [ 55]: a1fb4f66485fc6e2 +Block 0009 [ 56]: f11382f56acc85c5 +Block 0009 [ 57]: fa0b75b0a88d10e9 +Block 0009 [ 58]: 12ce42a670ce1fd0 +Block 0009 [ 59]: 76b4da0cef87cc68 +Block 0009 [ 60]: a8d6a4c9e8be9f7a +Block 0009 [ 61]: b907271a2a031157 +Block 0009 [ 62]: 199befa19191d2e4 +Block 0009 [ 63]: b0e40c9c1d56081b +Block 0009 [ 64]: 01e145b266f8de0b +Block 0009 [ 65]: e34b15fa79fa49d7 +Block 0009 [ 66]: 97fd6b6f65bb237e +Block 0009 [ 67]: d406737c4ba4e39e +Block 0009 [ 68]: ca55f8a35aba2d71 +Block 0009 [ 69]: be75c5e31dae69dd +Block 0009 [ 70]: e2f19bb804e76643 +Block 0009 [ 71]: 84c93f1a2d5406de +Block 0009 [ 72]: 71de7e8ea38acc40 +Block 0009 [ 73]: 6045de83dcd55a75 +Block 0009 [ 74]: 5fbb843a3027bc35 +Block 0009 [ 75]: 6a048e3c908d32d2 +Block 0009 [ 76]: e1786cec571f1b02 +Block 0009 [ 77]: b8017677e14f52ad +Block 0009 [ 78]: a9c1c3f396beb68a +Block 0009 [ 79]: 2dee5c5474e27a16 +Block 0009 [ 80]: a33ddec78c2791a2 +Block 0009 [ 81]: c3993ab011a8c326 +Block 0009 [ 82]: 0156139d60d9ef8f +Block 0009 [ 83]: b043451f90b79435 +Block 0009 [ 84]: fe0a7ab213f5c1ba +Block 0009 [ 85]: c938c6c891be1a10 +Block 0009 [ 86]: a622051332acc0d8 +Block 0009 [ 87]: 296927a8758884f9 +Block 0009 [ 88]: 56fd6a2eed0d9492 +Block 0009 [ 89]: 6a015aa7cfef1131 +Block 0009 [ 90]: a6b617e5eec737a2 +Block 0009 [ 91]: 513fc9c9cffdb081 +Block 0009 [ 92]: 735c5b12ec075d55 +Block 0009 [ 93]: 154db0572a26a799 +Block 0009 [ 94]: b52849ae516cbaa0 +Block 0009 [ 95]: 499bf311c6d637c2 +Block 0009 [ 96]: 7cc8a466ca999627 +Block 0009 [ 97]: c0c51ac7a40c09a8 +Block 0009 [ 98]: cc4a21f7d98856df +Block 0009 [ 99]: 2708b57c1aa732d9 +Block 0009 [100]: 288c8a7fa02d1c03 +Block 0009 [101]: bc0a22b5efb71cf7 +Block 0009 [102]: 3deb5b3417c4b18d +Block 0009 [103]: d51bc37c379fa6f5 +Block 0009 [104]: f514be36ce5779a1 +Block 0009 [105]: ea0e5b5b10e84798 +Block 0009 [106]: 79a473516c9e06bc +Block 0009 [107]: d40ede4f6f342260 +Block 0009 [108]: 7377637414121f62 +Block 0009 [109]: 9c494885f3873660 +Block 0009 [110]: 838cb9b3336aa24b +Block 0009 [111]: fa47362cdc574e05 +Block 0009 [112]: a5839dcd7114bd83 +Block 0009 [113]: 78a13f2beb6f9156 +Block 0009 [114]: 288375a664188f4f +Block 0009 [115]: 753c63ed46a2e9fe +Block 0009 [116]: 370dff8650c5b045 +Block 0009 [117]: 7aae6f1745618d97 +Block 0009 [118]: f43c9b5dcfee3f5a +Block 0009 [119]: b0680fd9491ad64c +Block 0009 [120]: 1141e3c369745435 +Block 0009 [121]: 85ca43583cf136a8 +Block 0009 [122]: bc81e26caa3450b8 +Block 0009 [123]: 45ab7b12ba8fa62d +Block 0009 [124]: 1ab06a8decb95464 +Block 0009 [125]: 02ea3e5285e64651 +Block 0009 [126]: 5bf0abfdda4580fd +Block 0009 [127]: 725f7b6cff77c6e0 +Block 0010 [ 0]: 03ddd0d5570954ca +Block 0010 [ 1]: ef3531bd3c791152 +Block 0010 [ 2]: 151dece8403c0d9d +Block 0010 [ 3]: da83b8a08211a3a1 +Block 0010 [ 4]: 74ce6090bbcddce1 +Block 0010 [ 5]: ca859424072c4c37 +Block 0010 [ 6]: 2a28b30cff906536 +Block 0010 [ 7]: eb19f039a6e709c2 +Block 0010 [ 8]: a8d51731be7af8e7 +Block 0010 [ 9]: f7b20930fb8c9e2f +Block 0010 [ 10]: 5817466b12638a27 +Block 0010 [ 11]: 9a148456eddfcfc6 +Block 0010 [ 12]: 809e57c067c64830 +Block 0010 [ 13]: f52a48b3b0a49652 +Block 0010 [ 14]: 46486dbab9e4f52e +Block 0010 [ 15]: d19cfd34073da96c +Block 0010 [ 16]: ae6c8f849700c5fa +Block 0010 [ 17]: bb26de83dc309ddd +Block 0010 [ 18]: 3621501f29e43d7e +Block 0010 [ 19]: 6d49650cb2caf71f +Block 0010 [ 20]: ff570032488b153e +Block 0010 [ 21]: 5f357afb9e6e2a54 +Block 0010 [ 22]: 645e38d8d1b39400 +Block 0010 [ 23]: 0741788f71b54260 +Block 0010 [ 24]: 0cee6a102d995f2d +Block 0010 [ 25]: 2a85c57a64e631e3 +Block 0010 [ 26]: 59f7db1d77c01f84 +Block 0010 [ 27]: 0c8e05b7b0b36d8f +Block 0010 [ 28]: a2e84e8433aef9d8 +Block 0010 [ 29]: 6ffcb0a98564a770 +Block 0010 [ 30]: 304677fa27561674 +Block 0010 [ 31]: cc9189fa4d49edc2 +Block 0010 [ 32]: e8f54aafcc8f43a3 +Block 0010 [ 33]: 46586c9b98c09a8c +Block 0010 [ 34]: 4d35918e1e54a1e3 +Block 0010 [ 35]: 21e45b306f3096b3 +Block 0010 [ 36]: 1efe6f135e4ded82 +Block 0010 [ 37]: ff0fe64bb2ce07d4 +Block 0010 [ 38]: 6ed2ce4f40dfdc7d +Block 0010 [ 39]: 77afc5bf75181a5b +Block 0010 [ 40]: ccd042f31c5ee238 +Block 0010 [ 41]: 52340d666cb68e95 +Block 0010 [ 42]: 97ab16d262602b70 +Block 0010 [ 43]: 1f39fd2aa184e1ed +Block 0010 [ 44]: c7702a1d4d12e238 +Block 0010 [ 45]: 84ceb8d458e0e33d +Block 0010 [ 46]: 9272dae6375d93c3 +Block 0010 [ 47]: d30477baec2da838 +Block 0010 [ 48]: 31bcea37afdc96bc +Block 0010 [ 49]: b6d44bf5e49542e8 +Block 0010 [ 50]: 11f9e05081bc0e28 +Block 0010 [ 51]: c6bb99b0a771061d +Block 0010 [ 52]: e1786981536369f7 +Block 0010 [ 53]: 28e61922e0e07d08 +Block 0010 [ 54]: ff3334fbd1246f0e +Block 0010 [ 55]: 902b19655419b125 +Block 0010 [ 56]: fa397b7ac7afe542 +Block 0010 [ 57]: 1d20f5e5297b3f68 +Block 0010 [ 58]: 7ad196c294115559 +Block 0010 [ 59]: e2df32ba888e23be +Block 0010 [ 60]: d61a690ecabc6747 +Block 0010 [ 61]: f70414d921fec4d8 +Block 0010 [ 62]: 87232a2ce7e819d2 +Block 0010 [ 63]: 48986188e833df7f +Block 0010 [ 64]: 6b691c31cc8cd991 +Block 0010 [ 65]: 3f6ecf0445fc11b4 +Block 0010 [ 66]: e3cf3c583bc686a2 +Block 0010 [ 67]: 4ba77f30caaeddd6 +Block 0010 [ 68]: 120abdd4f3be4414 +Block 0010 [ 69]: 135f1c23fb5fb6f0 +Block 0010 [ 70]: 523ec1b7a2c0dbbc +Block 0010 [ 71]: 68f0591525973d04 +Block 0010 [ 72]: 8dfbef7be78d85a8 +Block 0010 [ 73]: b6914a36a85c30d0 +Block 0010 [ 74]: e543aaa0bf3022fa +Block 0010 [ 75]: cd6a0586a48cbcbd +Block 0010 [ 76]: ecd093c52b48bb8f +Block 0010 [ 77]: 1fb1b6154d0885e9 +Block 0010 [ 78]: 9373b1fddfcd7095 +Block 0010 [ 79]: 839d266721445ca9 +Block 0010 [ 80]: 9eb08685427956ac +Block 0010 [ 81]: 0e67e850943c8234 +Block 0010 [ 82]: 48b1bfefc669f248 +Block 0010 [ 83]: 9ac301131fd1c8c9 +Block 0010 [ 84]: a24208585c03e11e +Block 0010 [ 85]: 3690d7a5278eeb32 +Block 0010 [ 86]: 6b0e1a590041722b +Block 0010 [ 87]: d716ae87093492fe +Block 0010 [ 88]: ed72bf36d55e6044 +Block 0010 [ 89]: eb728fd156a92044 +Block 0010 [ 90]: 73b4ba90f53fed19 +Block 0010 [ 91]: 12775011afcf408c +Block 0010 [ 92]: 4fdf59cac70fe25c +Block 0010 [ 93]: 686695291bcf42a5 +Block 0010 [ 94]: b6830f00eec798ae +Block 0010 [ 95]: 360858c0dcc89f12 +Block 0010 [ 96]: f8e4d23cd8dfe213 +Block 0010 [ 97]: 9c0e60bc54133096 +Block 0010 [ 98]: 4527904c9616d116 +Block 0010 [ 99]: 9c6c29121236d5f8 +Block 0010 [100]: 895f1da7f88403c5 +Block 0010 [101]: 66a84eb06f5d9f70 +Block 0010 [102]: d8c40c8c0fa58c6b +Block 0010 [103]: 1e3334879f0a2c95 +Block 0010 [104]: f5c5e477fce27587 +Block 0010 [105]: 8bf3ccd456124f33 +Block 0010 [106]: 35062f97ca508398 +Block 0010 [107]: 99f2ef47178939f3 +Block 0010 [108]: 25bec767a4353792 +Block 0010 [109]: 65cb0390af523f96 +Block 0010 [110]: f304b1bc4a25b07d +Block 0010 [111]: 38f3a810a5a125b7 +Block 0010 [112]: 550cfb4edbbd1860 +Block 0010 [113]: 1ae72d2f286bb73e +Block 0010 [114]: bdaf0575414d4b9f +Block 0010 [115]: c6c7935c63c31fe8 +Block 0010 [116]: e95b74dd288e34b2 +Block 0010 [117]: b1903cce17b3d187 +Block 0010 [118]: 0146aa1f3ad8af94 +Block 0010 [119]: e5dd909b6501de5f +Block 0010 [120]: 29b549c6418ca13e +Block 0010 [121]: 783588f7cb9812d2 +Block 0010 [122]: 12ebda418bc5d4a6 +Block 0010 [123]: 1c45f811c53c0cfa +Block 0010 [124]: e839adeabc081579 +Block 0010 [125]: c675e569e3e8c008 +Block 0010 [126]: f2fe4a325fbb0afb +Block 0010 [127]: 968e549856139bcf +Block 0011 [ 0]: 4c49fef7ac59b00f +Block 0011 [ 1]: 0b77e546680ba26c +Block 0011 [ 2]: 50f92c0489854697 +Block 0011 [ 3]: 9017915d63b7939f +Block 0011 [ 4]: fa05ffa87d836044 +Block 0011 [ 5]: e3f79adbb7a7a520 +Block 0011 [ 6]: 72daaff6c8d382f8 +Block 0011 [ 7]: e82c1da0c1930016 +Block 0011 [ 8]: 7cd9c05a7d016194 +Block 0011 [ 9]: 4cb21d45b7ccd0e9 +Block 0011 [ 10]: 15ca0a31b3e48180 +Block 0011 [ 11]: 8044760aaec86f6d +Block 0011 [ 12]: b6f642412cf27a8f +Block 0011 [ 13]: 9b60769987b2563c +Block 0011 [ 14]: e0ce63cb590a4ea2 +Block 0011 [ 15]: 94678a3461c13a0c +Block 0011 [ 16]: 84f191a8225d0e4c +Block 0011 [ 17]: 217d697f39654936 +Block 0011 [ 18]: f46ace239ca24436 +Block 0011 [ 19]: 04bdb1e1c224687a +Block 0011 [ 20]: c8246b5f41051cd0 +Block 0011 [ 21]: 816447ddbb3ac9c7 +Block 0011 [ 22]: d758792a4a7137e0 +Block 0011 [ 23]: e682f6f30d1d433b +Block 0011 [ 24]: 0858a63103128803 +Block 0011 [ 25]: 025739918a0a3f53 +Block 0011 [ 26]: a510d28ff33d16ee +Block 0011 [ 27]: 948f5fab13544be2 +Block 0011 [ 28]: 1a4309dbf409b687 +Block 0011 [ 29]: 8038e07e5565f2cd +Block 0011 [ 30]: c5b37d07e8ae12fc +Block 0011 [ 31]: 598afd83af3da73c +Block 0011 [ 32]: 7474f32deaab1535 +Block 0011 [ 33]: e48f764af2a6abcf +Block 0011 [ 34]: f5d7003e1d44ed2f +Block 0011 [ 35]: d724ef97ce8f28ef +Block 0011 [ 36]: 99c664b60d84b037 +Block 0011 [ 37]: e9fde5a58781af6e +Block 0011 [ 38]: b99837a91be9cb19 +Block 0011 [ 39]: 59f96c210e2fa6ac +Block 0011 [ 40]: ccc66eb3fa30a338 +Block 0011 [ 41]: b5c869fd62a7280e +Block 0011 [ 42]: 6e8aa1928d7dc215 +Block 0011 [ 43]: beee10b5278d8d87 +Block 0011 [ 44]: 6b5ed4ed79ed72c5 +Block 0011 [ 45]: 47f7b8798b2f68de +Block 0011 [ 46]: 543a7a6285c3dcc4 +Block 0011 [ 47]: e9d0f798b6d71392 +Block 0011 [ 48]: 46cfa43dbc22d22e +Block 0011 [ 49]: 1819aa20872a5242 +Block 0011 [ 50]: 14722a59b4bb23ff +Block 0011 [ 51]: cfd15dbf15de67cd +Block 0011 [ 52]: 5bff70426ec0d586 +Block 0011 [ 53]: 17cd19e555bac43a +Block 0011 [ 54]: 97d488c659d779da +Block 0011 [ 55]: 27b7a222c598758a +Block 0011 [ 56]: ccd1f8510e13d811 +Block 0011 [ 57]: 08a1336acf0b984a +Block 0011 [ 58]: 7068b21fb1f0d2c7 +Block 0011 [ 59]: 607953cb347f3495 +Block 0011 [ 60]: 1c8d465a07eaa402 +Block 0011 [ 61]: c66d8322c4b00513 +Block 0011 [ 62]: 277e0b3f25be599e +Block 0011 [ 63]: 181e765d17794631 +Block 0011 [ 64]: 915ed3d2877de1f3 +Block 0011 [ 65]: 692a313bbce47822 +Block 0011 [ 66]: b9023d0e3880e18c +Block 0011 [ 67]: 509fd562b469d027 +Block 0011 [ 68]: 2ee478a22da3b588 +Block 0011 [ 69]: fbb7f63122cf790b +Block 0011 [ 70]: ec7efcaba6205527 +Block 0011 [ 71]: b845a0646f3556de +Block 0011 [ 72]: 8bb8eacb976ff0ac +Block 0011 [ 73]: 8c4770b357cae7bb +Block 0011 [ 74]: e7ff1eb9e162b3c4 +Block 0011 [ 75]: 36bcc0ae6999e027 +Block 0011 [ 76]: d11efd1e6572021c +Block 0011 [ 77]: 86ff42cd01884655 +Block 0011 [ 78]: 4223544c88424dfe +Block 0011 [ 79]: 4b365a978fee311e +Block 0011 [ 80]: b12364feb3504070 +Block 0011 [ 81]: df25ceac79a9d96f +Block 0011 [ 82]: 17f4bca97d018e65 +Block 0011 [ 83]: 7246f6585ffb01e3 +Block 0011 [ 84]: a8b42a787c6b6022 +Block 0011 [ 85]: f2a78097b0b0680c +Block 0011 [ 86]: 752878d2782c7fe6 +Block 0011 [ 87]: 9c207d3c31347e90 +Block 0011 [ 88]: 80414cc28ab2a4ea +Block 0011 [ 89]: 939a5979926400f5 +Block 0011 [ 90]: 33ced62c0cf8eadd +Block 0011 [ 91]: e2641df66b2f2e14 +Block 0011 [ 92]: 343c1775a9713f11 +Block 0011 [ 93]: 15cc16374ac1ba54 +Block 0011 [ 94]: fd70d352bf97784f +Block 0011 [ 95]: 0b37018eeed56443 +Block 0011 [ 96]: 27628b3623c0d7d8 +Block 0011 [ 97]: 9313a39ec83b1ef8 +Block 0011 [ 98]: eba1b0a86789a078 +Block 0011 [ 99]: 549000caea6c2a19 +Block 0011 [100]: 246b8e1f709b1997 +Block 0011 [101]: b2499fdf4eff52d3 +Block 0011 [102]: 5b75d183d56dea28 +Block 0011 [103]: 853e211fa80b47f5 +Block 0011 [104]: 1e394452303cc7e8 +Block 0011 [105]: 8dbc8f821b10491b +Block 0011 [106]: e079ff1750b59d87 +Block 0011 [107]: a2d95011a7cf7c4a +Block 0011 [108]: 2f6d3ec06872984e +Block 0011 [109]: 3dc900a76fddb83b +Block 0011 [110]: fc3b3e3ea263f6bd +Block 0011 [111]: bf125c404f604562 +Block 0011 [112]: f79194f3adfd9393 +Block 0011 [113]: 2411362a7fe1ea6b +Block 0011 [114]: 22ba895c0df4f85d +Block 0011 [115]: c323d609ebc0c49c +Block 0011 [116]: 6f463a3c99faa919 +Block 0011 [117]: 84a00b8d7d5c20f5 +Block 0011 [118]: de2a24e2fb01945e +Block 0011 [119]: c14cc040ea714c20 +Block 0011 [120]: 84d876ac2e6173dd +Block 0011 [121]: 1cbe9815d0686423 +Block 0011 [122]: 0ab7fd6174e1bd51 +Block 0011 [123]: 76723d2beaaaf60f +Block 0011 [124]: e325ac3fb53fd90e +Block 0011 [125]: d773e4e19cc5b1ba +Block 0011 [126]: 2606fe90ceae82c1 +Block 0011 [127]: 228177ea8ed3ae89 +Block 0012 [ 0]: 1aa1f692b06591fe +Block 0012 [ 1]: 4ff66d69e7f3dd1c +Block 0012 [ 2]: 22c65efa4de36bf5 +Block 0012 [ 3]: a23b7f7edc05f69b +Block 0012 [ 4]: 02b0d70fa75a03c1 +Block 0012 [ 5]: 91a77e9c3938b41b +Block 0012 [ 6]: 01cd41809dded109 +Block 0012 [ 7]: f53382e6636f33de +Block 0012 [ 8]: 6d7f6a41e3560432 +Block 0012 [ 9]: d3beb64a595da5ab +Block 0012 [ 10]: 99dbe85c7dbf4eb3 +Block 0012 [ 11]: ac35273dd506ae67 +Block 0012 [ 12]: 76cc23ae6fe61472 +Block 0012 [ 13]: ac8f7d015d195a2c +Block 0012 [ 14]: c16e060450d1c5eb +Block 0012 [ 15]: 35a65ce2284ad0bb +Block 0012 [ 16]: 75389162f3327070 +Block 0012 [ 17]: e4a3379341461be6 +Block 0012 [ 18]: 734e3e9b0686dd0f +Block 0012 [ 19]: a2a2e80d0cf4dfaa +Block 0012 [ 20]: c6b14a60cfe360eb +Block 0012 [ 21]: 5f8d57f1d33c0144 +Block 0012 [ 22]: 5a7e396a6af6843d +Block 0012 [ 23]: 6d7a624d09556dfc +Block 0012 [ 24]: 4c175bf98ecd2b49 +Block 0012 [ 25]: d5297a8f57909d9d +Block 0012 [ 26]: a28975f58c2c59c9 +Block 0012 [ 27]: 3d8ee5d5caf9a91f +Block 0012 [ 28]: 430284948e2f06a8 +Block 0012 [ 29]: bc43c1cc56889cc5 +Block 0012 [ 30]: 97e712988e3a8b65 +Block 0012 [ 31]: a765e883df64b236 +Block 0012 [ 32]: 80dd97974d89bb83 +Block 0012 [ 33]: edcd7d4ab1718307 +Block 0012 [ 34]: 4c4cb5a8b9572ba2 +Block 0012 [ 35]: d7cc67bfc5484140 +Block 0012 [ 36]: 412863409d76bc0f +Block 0012 [ 37]: 8578c23a7d2742d3 +Block 0012 [ 38]: d6ba907e11fdaf70 +Block 0012 [ 39]: e41fdecb460897e3 +Block 0012 [ 40]: 550ebdb79d17f607 +Block 0012 [ 41]: 97a58453deb8a8ef +Block 0012 [ 42]: 237fc5519b9df07e +Block 0012 [ 43]: 357f19eedd0671f3 +Block 0012 [ 44]: b4b36cff5d679fda +Block 0012 [ 45]: bbc57b82f19ec6b0 +Block 0012 [ 46]: 9bb37ab02ce546be +Block 0012 [ 47]: 5f287acb1eaf68fc +Block 0012 [ 48]: 91107640cc7d0324 +Block 0012 [ 49]: a581af8774b2d68c +Block 0012 [ 50]: a73ce0d9e372c914 +Block 0012 [ 51]: 1fad2663947a6aa4 +Block 0012 [ 52]: 76bf7c2bef22fd78 +Block 0012 [ 53]: 2509b1a0ea1dd03f +Block 0012 [ 54]: 8a821d14ef35edbd +Block 0012 [ 55]: de48bc86661813ad +Block 0012 [ 56]: 2d12a49f8604079c +Block 0012 [ 57]: 6a841f234644afe3 +Block 0012 [ 58]: d2483a08b415b399 +Block 0012 [ 59]: 27fc874f14e55938 +Block 0012 [ 60]: 5d065817f04bf0fb +Block 0012 [ 61]: c21d5ee69cb65292 +Block 0012 [ 62]: 220b745cd78a8810 +Block 0012 [ 63]: c195af564cee2365 +Block 0012 [ 64]: 44f41833b93c1409 +Block 0012 [ 65]: ee9bf5e3123d0ab1 +Block 0012 [ 66]: 1194671b1341d19c +Block 0012 [ 67]: 9f26c3e94e234394 +Block 0012 [ 68]: d4eef2a61a8b6d4e +Block 0012 [ 69]: 0ac0b767072c4bf0 +Block 0012 [ 70]: 49ba7457a25f77f9 +Block 0012 [ 71]: 061dcba9406ff132 +Block 0012 [ 72]: f606b0e4b069928b +Block 0012 [ 73]: 3969b0cb47226af0 +Block 0012 [ 74]: 0aecdd23eab0f972 +Block 0012 [ 75]: e6a58eac70e044e8 +Block 0012 [ 76]: 270102338cb46cf6 +Block 0012 [ 77]: 22aeeac757cf607f +Block 0012 [ 78]: 1f228e34a8200d4d +Block 0012 [ 79]: 5e17277e4c10da0c +Block 0012 [ 80]: 5c88ae3dd3ea5417 +Block 0012 [ 81]: aad3d6b90c9a5620 +Block 0012 [ 82]: 1a5b3da07620b085 +Block 0012 [ 83]: c2b0ef4813ca090f +Block 0012 [ 84]: e7da9456205e044e +Block 0012 [ 85]: 96603c1683fb8124 +Block 0012 [ 86]: 25964d0131ece98e +Block 0012 [ 87]: 6692fa3c89ba0117 +Block 0012 [ 88]: bbcd1c40386e9fe1 +Block 0012 [ 89]: 8f96217bf8888393 +Block 0012 [ 90]: caf344b6650d2a8a +Block 0012 [ 91]: f3a842ccd3049b9d +Block 0012 [ 92]: 91e8af127f1ac37c +Block 0012 [ 93]: 60545d67f008014f +Block 0012 [ 94]: 610241b298102ec2 +Block 0012 [ 95]: 2fee36def2bcff5b +Block 0012 [ 96]: 96fd68d0e794897e +Block 0012 [ 97]: d208840dabc9d601 +Block 0012 [ 98]: e779e8f69cea5961 +Block 0012 [ 99]: a269dc901338443f +Block 0012 [100]: 0e87928cf416e99d +Block 0012 [101]: 8703d89cf0d3c7dc +Block 0012 [102]: 04def1cf5bef1ed9 +Block 0012 [103]: 13a87535ed94991c +Block 0012 [104]: b18452f74892b6aa +Block 0012 [105]: 4566d6996833aae0 +Block 0012 [106]: 9d2abd6fbcaceaae +Block 0012 [107]: 87517fc9e8b71e10 +Block 0012 [108]: 7846bada74ea3e86 +Block 0012 [109]: 832ce5b17274725a +Block 0012 [110]: 02d2923df96b12ce +Block 0012 [111]: fdfe0934a666c96d +Block 0012 [112]: 298bd9e467374d73 +Block 0012 [113]: 8db6e9c331b259b7 +Block 0012 [114]: b078a0eed2399812 +Block 0012 [115]: f7bba7f1bc418e5a +Block 0012 [116]: a95ac6d79c0221e4 +Block 0012 [117]: 73a71076b1880da2 +Block 0012 [118]: 5adf0a09f1bb7192 +Block 0012 [119]: 2fb1f63708d9b8ae +Block 0012 [120]: 0133e7c0e200a44b +Block 0012 [121]: f0c57cf2307571bb +Block 0012 [122]: fe8091f400d827e8 +Block 0012 [123]: a59343d47427e4ee +Block 0012 [124]: 31a936eed5ba7aa1 +Block 0012 [125]: e02ae76007527fc7 +Block 0012 [126]: 920785762df5bb3b +Block 0012 [127]: 578d1590559f9bdf +Block 0013 [ 0]: f9c15bd16c03239a +Block 0013 [ 1]: 85c0830339123a93 +Block 0013 [ 2]: afdec9a3430ee91a +Block 0013 [ 3]: 3aacac9cc4d9ed29 +Block 0013 [ 4]: 73278ef5208157fa +Block 0013 [ 5]: 1bc7ef529b5106c7 +Block 0013 [ 6]: 3309f9a85af31610 +Block 0013 [ 7]: 22bd82aad0437be0 +Block 0013 [ 8]: 332b11e289b2c3ca +Block 0013 [ 9]: 3b7efd6c480aab26 +Block 0013 [ 10]: 417f05eb1907725d +Block 0013 [ 11]: 24aed9811501da12 +Block 0013 [ 12]: fa537149a94750ba +Block 0013 [ 13]: 204a652aefa4e11d +Block 0013 [ 14]: 0bc3743c3b55dd7c +Block 0013 [ 15]: 49d71f9813bff428 +Block 0013 [ 16]: 27ef1ffa06e74a46 +Block 0013 [ 17]: 6abc24120f0c5b51 +Block 0013 [ 18]: 6cb123ac54b47ba4 +Block 0013 [ 19]: ae6a1e638e9ff6c0 +Block 0013 [ 20]: c12e5f4396f2b198 +Block 0013 [ 21]: 44549a8d343ab2bf +Block 0013 [ 22]: 49d5c59cc5ad6279 +Block 0013 [ 23]: b150f0724fc9b595 +Block 0013 [ 24]: f6e668a1af287f10 +Block 0013 [ 25]: 978c9313f02db8ff +Block 0013 [ 26]: 44789c797bed7560 +Block 0013 [ 27]: 1a96a5cf8d93929a +Block 0013 [ 28]: 9e8be9f3e5d17933 +Block 0013 [ 29]: 2eaf1e47ac0301c0 +Block 0013 [ 30]: a0e9fd0333d0fdf8 +Block 0013 [ 31]: 6a1f57508f7cf676 +Block 0013 [ 32]: 5f8d891ef567e252 +Block 0013 [ 33]: 1c24d2d0405e9bea +Block 0013 [ 34]: f1cf892b940462b4 +Block 0013 [ 35]: c43a6a871f5bdf30 +Block 0013 [ 36]: 7ca36bd207fda755 +Block 0013 [ 37]: 637d10dc44ee9657 +Block 0013 [ 38]: 6c3ba081af2c0c7a +Block 0013 [ 39]: a06156952886a451 +Block 0013 [ 40]: af5b9ae79550be4f +Block 0013 [ 41]: cfe7e3f7553433fc +Block 0013 [ 42]: 663cf8c55395264d +Block 0013 [ 43]: df7d30f272a46648 +Block 0013 [ 44]: 52565c59a983e2fd +Block 0013 [ 45]: 498707d1fb7a34e6 +Block 0013 [ 46]: 07a0757f9c76308a +Block 0013 [ 47]: 94e5798cef5748ca +Block 0013 [ 48]: 29c7689628e47c77 +Block 0013 [ 49]: 666547f5e5fbeaa0 +Block 0013 [ 50]: 49fe73222e065ab8 +Block 0013 [ 51]: 90d3cb7aece83cd9 +Block 0013 [ 52]: 234c16b21152d734 +Block 0013 [ 53]: 4e0f90f6a27d7d22 +Block 0013 [ 54]: 1a05d1a632b40370 +Block 0013 [ 55]: 985c7083435a8efb +Block 0013 [ 56]: 3962e05f618794cd +Block 0013 [ 57]: 734869661b5fad03 +Block 0013 [ 58]: 2f1d7666c26ef446 +Block 0013 [ 59]: bfb1ae896e4e66d6 +Block 0013 [ 60]: 5a3de7e5a0109719 +Block 0013 [ 61]: 626e36b1d0227c80 +Block 0013 [ 62]: 56c6109f4ffcd0fb +Block 0013 [ 63]: b90afc0a10791c1b +Block 0013 [ 64]: cdf40c151d47cbcf +Block 0013 [ 65]: 5212985d06f9803b +Block 0013 [ 66]: 86cce1587e82760c +Block 0013 [ 67]: 0f59e40dd4a7ec7e +Block 0013 [ 68]: eafc94430abe1f46 +Block 0013 [ 69]: d36c0e649d807ce2 +Block 0013 [ 70]: 57359cb98984b375 +Block 0013 [ 71]: 9f88333017ca8db6 +Block 0013 [ 72]: 1ef21abda65283b1 +Block 0013 [ 73]: 5b0b594338cb86ad +Block 0013 [ 74]: fc731c46858c4ad1 +Block 0013 [ 75]: f64b50653b123e97 +Block 0013 [ 76]: 4149e7bd3a8470dc +Block 0013 [ 77]: 810e51e831465239 +Block 0013 [ 78]: f223087791f47a5d +Block 0013 [ 79]: 6c375e1931df8730 +Block 0013 [ 80]: 0100dbd0e057cc2e +Block 0013 [ 81]: f70f8d61903f1969 +Block 0013 [ 82]: 08fc0da85e396251 +Block 0013 [ 83]: 2a538b02ae7d725c +Block 0013 [ 84]: b931a0cd7ad0af88 +Block 0013 [ 85]: e1bd9d0b2f53a9d7 +Block 0013 [ 86]: 76a341bc4aa349d0 +Block 0013 [ 87]: a529fce1c81e5153 +Block 0013 [ 88]: 63ef9d0b98124056 +Block 0013 [ 89]: c373059cdc3572c7 +Block 0013 [ 90]: 01fb3a4f4ce7b133 +Block 0013 [ 91]: 9c66c972692b09ad +Block 0013 [ 92]: c53255d410600bc6 +Block 0013 [ 93]: 14b9732a02daf5b6 +Block 0013 [ 94]: 396145830be7495f +Block 0013 [ 95]: 3187b2c21159f8d5 +Block 0013 [ 96]: a4e6df14aab4e467 +Block 0013 [ 97]: bc6c30500b613487 +Block 0013 [ 98]: e425c128f3fc06ad +Block 0013 [ 99]: 00545969fecdecc5 +Block 0013 [100]: 16a6082af5d25051 +Block 0013 [101]: 7b85adbd0a0b6781 +Block 0013 [102]: dc26cbeaaef7e3dd +Block 0013 [103]: 336a70650266e766 +Block 0013 [104]: 32ed681b360c3949 +Block 0013 [105]: dc6e83279d1061ab +Block 0013 [106]: f91da0a8b878c95d +Block 0013 [107]: 0beded6e5fcf6e23 +Block 0013 [108]: 0a262ed8436feb78 +Block 0013 [109]: a5b40f4468eed7a7 +Block 0013 [110]: b847a08fdd793947 +Block 0013 [111]: aedc1a4f95a80dbe +Block 0013 [112]: 321990b100f7c3e1 +Block 0013 [113]: c4d432cfbfb9ab49 +Block 0013 [114]: 7c1170d1453c684f +Block 0013 [115]: a77231522e4e7dce +Block 0013 [116]: e550d48f25611525 +Block 0013 [117]: e15fa2d871cb0666 +Block 0013 [118]: 625f0384c0dc09b9 +Block 0013 [119]: b5250d90664a29a1 +Block 0013 [120]: 3aa32adb69a6345f +Block 0013 [121]: 02fdae236288d0c7 +Block 0013 [122]: 7a760f94c41fb1f0 +Block 0013 [123]: 271282628e3fa3cd +Block 0013 [124]: c8131439d46a63e2 +Block 0013 [125]: 7afecdfd7821b924 +Block 0013 [126]: ee89bbe949c8804a +Block 0013 [127]: 7d15b9bc5a9241cb +Block 0014 [ 0]: a5fdb0379a2f67d1 +Block 0014 [ 1]: 4beccebadf13863c +Block 0014 [ 2]: 320d12b68b90e6be +Block 0014 [ 3]: 13b641fd6d1efddf +Block 0014 [ 4]: 5b64455f318e2dda +Block 0014 [ 5]: eb13edb9301764b7 +Block 0014 [ 6]: 7fb8e26f439e07cf +Block 0014 [ 7]: aad045eb983f729d +Block 0014 [ 8]: 7591d32caace7a43 +Block 0014 [ 9]: 8cb56fd7d3a1dcaa +Block 0014 [ 10]: 2cee1c68916a5758 +Block 0014 [ 11]: f72675fd1db957ca +Block 0014 [ 12]: 8f50f81824c9d070 +Block 0014 [ 13]: 5c4a051906547aaa +Block 0014 [ 14]: abde12eff8d4accd +Block 0014 [ 15]: 4a3cd15a48309dd6 +Block 0014 [ 16]: b69f970728e49140 +Block 0014 [ 17]: 1e1d9f854d8f75e5 +Block 0014 [ 18]: 8f13af133409471f +Block 0014 [ 19]: b7bbe727c90d9940 +Block 0014 [ 20]: 084a0defba13b012 +Block 0014 [ 21]: 078a024f9a13985c +Block 0014 [ 22]: 4c4c857f1f41f895 +Block 0014 [ 23]: 65bf4adab2fef170 +Block 0014 [ 24]: 61043bcf823addea +Block 0014 [ 25]: 01624a2a8889b77c +Block 0014 [ 26]: 5d513fe269c69198 +Block 0014 [ 27]: 16ce6daefe16dff8 +Block 0014 [ 28]: ae432bdac36c8a33 +Block 0014 [ 29]: c1de50c14bff375b +Block 0014 [ 30]: 57ee0d43ca409b6d +Block 0014 [ 31]: 001b5c41bc8a142e +Block 0014 [ 32]: 05cb8870e0b6086a +Block 0014 [ 33]: 5e7fa65b44b5a0c1 +Block 0014 [ 34]: 9c0c022e7c44739b +Block 0014 [ 35]: 8afde623afa779b4 +Block 0014 [ 36]: aa62668c188c901f +Block 0014 [ 37]: 4a0ad8711f40d437 +Block 0014 [ 38]: 227f69c54bf24cc2 +Block 0014 [ 39]: 9f8adbbe51dba14e +Block 0014 [ 40]: db44d83fa3b1d22e +Block 0014 [ 41]: c0f52cfbf369e5e0 +Block 0014 [ 42]: 8afd0b618bbf57b6 +Block 0014 [ 43]: 7ce708b422a4d051 +Block 0014 [ 44]: 9d47e802dc2a20a6 +Block 0014 [ 45]: c1f9652d8aee4eb0 +Block 0014 [ 46]: e862b0f9b6ab04c5 +Block 0014 [ 47]: 7cbdcb786d9c09de +Block 0014 [ 48]: 9a6cb37bddf2994d +Block 0014 [ 49]: 066ba841fa982410 +Block 0014 [ 50]: b4834a5707446e93 +Block 0014 [ 51]: cbfd37b56b781d90 +Block 0014 [ 52]: 296422ed06aaf2fe +Block 0014 [ 53]: b7977369fb47dd7f +Block 0014 [ 54]: 4503cd512f4f4028 +Block 0014 [ 55]: b44be03eac8f1fe1 +Block 0014 [ 56]: de3e3843100887d5 +Block 0014 [ 57]: 841cde4ce1d478c1 +Block 0014 [ 58]: ef725829892bcf5b +Block 0014 [ 59]: 8c4711ae368a72f5 +Block 0014 [ 60]: 53f0c71e38996687 +Block 0014 [ 61]: 41343b02dd8918e0 +Block 0014 [ 62]: 163283289fc722c9 +Block 0014 [ 63]: 01f2edede3c311e2 +Block 0014 [ 64]: 3fee9f2a8e2a8b0f +Block 0014 [ 65]: eaddca9f92035fa7 +Block 0014 [ 66]: c2a5277a46b3d9a8 +Block 0014 [ 67]: 634d95c58a63f283 +Block 0014 [ 68]: c47f081c88252fa2 +Block 0014 [ 69]: 904598e94495e0f5 +Block 0014 [ 70]: de689c2cfdc93c35 +Block 0014 [ 71]: bc058f656bef83a3 +Block 0014 [ 72]: 277c81509b3a6492 +Block 0014 [ 73]: bfecc6ad2847e452 +Block 0014 [ 74]: ee9cd7661778e71d +Block 0014 [ 75]: 7269eeab79003bf8 +Block 0014 [ 76]: ed88284a12b40d91 +Block 0014 [ 77]: 38a44ea62830a48c +Block 0014 [ 78]: 50d4aeb04809ea4e +Block 0014 [ 79]: b6d1b62b6b61937c +Block 0014 [ 80]: e8fbd7a0a6a9cea2 +Block 0014 [ 81]: 6958ff333ec80f17 +Block 0014 [ 82]: e894f15fb0abbab4 +Block 0014 [ 83]: cfbc02b2b06f8570 +Block 0014 [ 84]: 16cbaf773bf6e396 +Block 0014 [ 85]: 433bf2178262bf74 +Block 0014 [ 86]: 4df3a7ddabcebe8d +Block 0014 [ 87]: e92be4c401ccfa93 +Block 0014 [ 88]: d240cb8553fddff1 +Block 0014 [ 89]: 6396abb129c242a8 +Block 0014 [ 90]: 6e5a0ebf21156ff2 +Block 0014 [ 91]: 18b1d13bc9a30466 +Block 0014 [ 92]: 6368abbcdf6200b7 +Block 0014 [ 93]: 06e4d85eeae027dd +Block 0014 [ 94]: 74f3b09e191a8044 +Block 0014 [ 95]: a268ac0b727fe78b +Block 0014 [ 96]: 99f122b534e05fff +Block 0014 [ 97]: a860f26176823324 +Block 0014 [ 98]: ba7001ec057bdb68 +Block 0014 [ 99]: 63939774ca16cfc2 +Block 0014 [100]: bde7382f581de0de +Block 0014 [101]: 5225abbd7ca6bca8 +Block 0014 [102]: 88bfeda187528739 +Block 0014 [103]: ce9cb2a4d37873b7 +Block 0014 [104]: c85e0d170a16c786 +Block 0014 [105]: 705da215f97650da +Block 0014 [106]: 2538d74c16c8b6f6 +Block 0014 [107]: 3874bbcf85fe90ee +Block 0014 [108]: b91302b8f95e7800 +Block 0014 [109]: 85e59179b9bf2022 +Block 0014 [110]: e9773eafb420456f +Block 0014 [111]: a47f001781f19c2b +Block 0014 [112]: 46454b1b9811a851 +Block 0014 [113]: b622271e1e2346d1 +Block 0014 [114]: 215a5b75946f1355 +Block 0014 [115]: 0587f9fc3a3c2852 +Block 0014 [116]: 822ac16b0b07c3f2 +Block 0014 [117]: 363d4a260faa6131 +Block 0014 [118]: da569af084477b41 +Block 0014 [119]: fc7f20711ba4bf93 +Block 0014 [120]: 03255c99b59bd605 +Block 0014 [121]: 7dad82e9edae62bb +Block 0014 [122]: 71c0d73ea0908b90 +Block 0014 [123]: a34100e60a9ffbcb +Block 0014 [124]: edf05e0466f0e9cc +Block 0014 [125]: 6074b7aadb934a82 +Block 0014 [126]: 0a43a6e248912fd5 +Block 0014 [127]: 721d743314b6c59e +Block 0015 [ 0]: 6d40e87b8bbde68f +Block 0015 [ 1]: 5b90b02701c6ac80 +Block 0015 [ 2]: ce69aea584dac7a8 +Block 0015 [ 3]: 36cdd095ff0ff8d1 +Block 0015 [ 4]: de2ebcab7a438efc +Block 0015 [ 5]: 63e8709d10ecc3ac +Block 0015 [ 6]: 55cb9a18dab1d954 +Block 0015 [ 7]: 1507cff847848c71 +Block 0015 [ 8]: 1ccb861fbfc73c93 +Block 0015 [ 9]: 8c602a61b71e21dc +Block 0015 [ 10]: cfa87e439e758061 +Block 0015 [ 11]: bec7416cd772e599 +Block 0015 [ 12]: d7c68f196290b1cf +Block 0015 [ 13]: b3096ac4559e59d0 +Block 0015 [ 14]: 0ad10c64be9f9fbb +Block 0015 [ 15]: 8d59cc7c21f19fcf +Block 0015 [ 16]: e91efaa013a95b96 +Block 0015 [ 17]: 9a03aa23ee3ba180 +Block 0015 [ 18]: eb32afc653478bff +Block 0015 [ 19]: a993fc583751e9cb +Block 0015 [ 20]: e3b0246060a99012 +Block 0015 [ 21]: f96ac45a92c850ba +Block 0015 [ 22]: 548f1ff503119696 +Block 0015 [ 23]: 4479e6768506cdf5 +Block 0015 [ 24]: adcb44b753d48a61 +Block 0015 [ 25]: 97502483be77491b +Block 0015 [ 26]: 71fdbdd6b3769957 +Block 0015 [ 27]: f29fc96be6293883 +Block 0015 [ 28]: e7174c1b6cc33adf +Block 0015 [ 29]: c184b1c64ff3b2db +Block 0015 [ 30]: a08aa1da589ab43d +Block 0015 [ 31]: 97e85b9d3047be3e +Block 0015 [ 32]: 96929ff762408129 +Block 0015 [ 33]: aa8fa4af6720c65e +Block 0015 [ 34]: 5173b01272e389e1 +Block 0015 [ 35]: 97f40c7a887f7c65 +Block 0015 [ 36]: 07a2c0b90d5fbb9f +Block 0015 [ 37]: 0b4a888385bf6feb +Block 0015 [ 38]: 55c595b5297af0c0 +Block 0015 [ 39]: 534de9d4148ff660 +Block 0015 [ 40]: e1b2bd3e60767725 +Block 0015 [ 41]: e18662d315858833 +Block 0015 [ 42]: 4f39b642a465e587 +Block 0015 [ 43]: 9e7becfafea3a026 +Block 0015 [ 44]: 16bf66c4ce23a1d1 +Block 0015 [ 45]: 20d5eaa56dd0741b +Block 0015 [ 46]: f8389306df16ba8d +Block 0015 [ 47]: ca21d3ab3d5d9710 +Block 0015 [ 48]: d05e1b82cde9a7ee +Block 0015 [ 49]: 1b331a7ba4cbc44f +Block 0015 [ 50]: 3ab05714733e107b +Block 0015 [ 51]: 1ba0f22a6cacdccf +Block 0015 [ 52]: bef4345f3257cbab +Block 0015 [ 53]: dba354b6d105240e +Block 0015 [ 54]: 14860ea4ea9fa764 +Block 0015 [ 55]: c786947cbd54ba7e +Block 0015 [ 56]: c10a16322b02197f +Block 0015 [ 57]: a75e04a69f57a273 +Block 0015 [ 58]: 6a3d360f5d12a0e0 +Block 0015 [ 59]: 2d900aa01b4f1bc6 +Block 0015 [ 60]: 8e0b3af575027d01 +Block 0015 [ 61]: bebb2efa06d1b9b1 +Block 0015 [ 62]: 5041ec43eb8490ad +Block 0015 [ 63]: 02a0af26ec1cc245 +Block 0015 [ 64]: 315bd384780fb7dc +Block 0015 [ 65]: a6b78138e78ebca5 +Block 0015 [ 66]: e1e841cc673c6f59 +Block 0015 [ 67]: 92a63873ca308d4b +Block 0015 [ 68]: c475e47bc9375047 +Block 0015 [ 69]: 55a415c1b2a64d2d +Block 0015 [ 70]: bd814528ff874150 +Block 0015 [ 71]: a22ce025019fe9b9 +Block 0015 [ 72]: c07a7d13cc18bc6d +Block 0015 [ 73]: a42d2eedd8795c17 +Block 0015 [ 74]: 5944b7401cb892bb +Block 0015 [ 75]: 06b693ce393f7a31 +Block 0015 [ 76]: 30a523f276e03f66 +Block 0015 [ 77]: cc4cc7da45cb0629 +Block 0015 [ 78]: eb8a9cfac1608630 +Block 0015 [ 79]: c6827ec6db8fc29e +Block 0015 [ 80]: 72db1dde804b4e38 +Block 0015 [ 81]: 1d571faed8775322 +Block 0015 [ 82]: db5d406859784a76 +Block 0015 [ 83]: a5cc6c320631d459 +Block 0015 [ 84]: bc1b71dc3dc99f3d +Block 0015 [ 85]: 2316181ceed14d5c +Block 0015 [ 86]: 163d4f8beef254bc +Block 0015 [ 87]: d995b178a01e876c +Block 0015 [ 88]: b1f98f1d674c1514 +Block 0015 [ 89]: 7720ff1b73b9351e +Block 0015 [ 90]: ebedc7cd44c49577 +Block 0015 [ 91]: 8ed0d18c9c651634 +Block 0015 [ 92]: 7607fbdd198df036 +Block 0015 [ 93]: bbd9fd5b855b09f2 +Block 0015 [ 94]: 2b22bd2c4b0b39a7 +Block 0015 [ 95]: ba01fa0a17a1c7d7 +Block 0015 [ 96]: a26884728102cc54 +Block 0015 [ 97]: 984b67908d3a81ff +Block 0015 [ 98]: c7f618616a70b82a +Block 0015 [ 99]: 12084588cfa8b58b +Block 0015 [100]: e092eb391447359d +Block 0015 [101]: 3fc930be1935e61e +Block 0015 [102]: b26307005d1da4bc +Block 0015 [103]: 3c8b67e192736c4f +Block 0015 [104]: d630223907f9e1e7 +Block 0015 [105]: 5374c6efe2b8eb09 +Block 0015 [106]: 97acf57cd17738ce +Block 0015 [107]: 8170ce0222a7d000 +Block 0015 [108]: f70f5759aa53c360 +Block 0015 [109]: 60d7f3dec8f2ed62 +Block 0015 [110]: 789ae05a72878fac +Block 0015 [111]: 8d0afe37a8a13c61 +Block 0015 [112]: 1be773bd9b02f826 +Block 0015 [113]: d8858dceedd7e08d +Block 0015 [114]: 091aefbac72d8dad +Block 0015 [115]: 715b0c3d6bf488d9 +Block 0015 [116]: 11a401aeea39c245 +Block 0015 [117]: c71592475b7e2423 +Block 0015 [118]: e31b245bd5db158e +Block 0015 [119]: 1cdc0a528374eb3d +Block 0015 [120]: 75430ad2bebc3613 +Block 0015 [121]: 4df59d2626d82756 +Block 0015 [122]: 9b1226ce1e040731 +Block 0015 [123]: 33c1eb07bb17933b +Block 0015 [124]: c1c1837f4169196e +Block 0015 [125]: 474ff21ff2f94dbc +Block 0015 [126]: 851a9566610580c4 +Block 0015 [127]: 51ec2fcccdf48948 +Block 0016 [ 0]: 40173703c87730b2 +Block 0016 [ 1]: 467d38684f4c1c2a +Block 0016 [ 2]: 544062a527017b3e +Block 0016 [ 3]: 6f0706930c3c8ab0 +Block 0016 [ 4]: dc88053cfb45150b +Block 0016 [ 5]: 03884a54d2a29367 +Block 0016 [ 6]: 7a469b12d499697b +Block 0016 [ 7]: d54e0c405db9c12d +Block 0016 [ 8]: d6596bb2c7fbcb83 +Block 0016 [ 9]: e8ee63ceed57b956 +Block 0016 [ 10]: 3e510ed4a0c6aa29 +Block 0016 [ 11]: 782c2218330cbe22 +Block 0016 [ 12]: 95cb34607c5c6b15 +Block 0016 [ 13]: c3c9fb56dc22953b +Block 0016 [ 14]: 31f210a4cbcb2e4e +Block 0016 [ 15]: fb774215bd05f2fc +Block 0016 [ 16]: 1dce685944aa421c +Block 0016 [ 17]: 4455d28ad719716b +Block 0016 [ 18]: a8457a7fa7886bb8 +Block 0016 [ 19]: 798797d430101d64 +Block 0016 [ 20]: 7e5fee56cb31897c +Block 0016 [ 21]: 78580647125afa2a +Block 0016 [ 22]: f1bb1314ec84446b +Block 0016 [ 23]: b3fe6f51468c2893 +Block 0016 [ 24]: d1d4bdbe33707ead +Block 0016 [ 25]: bc6c03983cd4c708 +Block 0016 [ 26]: 57d747066891bb95 +Block 0016 [ 27]: bb4e9045fc3cb5ea +Block 0016 [ 28]: 614d2cf35a1f5655 +Block 0016 [ 29]: 04ae5d12ec440130 +Block 0016 [ 30]: 7d4f84adf2e6cb85 +Block 0016 [ 31]: 3a17a1a6cea939b1 +Block 0016 [ 32]: d2d6c3d261ac8e68 +Block 0016 [ 33]: cabd3dee2829e407 +Block 0016 [ 34]: 266220332527521c +Block 0016 [ 35]: 9551806567a27ff0 +Block 0016 [ 36]: d225b25411c7e2b6 +Block 0016 [ 37]: b259687bc0bd2f67 +Block 0016 [ 38]: 04845596cd58d81c +Block 0016 [ 39]: 4b0ad9bd79c5d18f +Block 0016 [ 40]: d902866ba26a936a +Block 0016 [ 41]: 404b11de86b46f03 +Block 0016 [ 42]: bd61fb21e5e12b7b +Block 0016 [ 43]: 6b1d2f923b434ab1 +Block 0016 [ 44]: 52c2dea3f21f8a13 +Block 0016 [ 45]: 140eebf3b69ee5bb +Block 0016 [ 46]: dd70de78b3c18b81 +Block 0016 [ 47]: ae7a74172565ac79 +Block 0016 [ 48]: 0dbad089af3e5104 +Block 0016 [ 49]: 8216ff935f515ebd +Block 0016 [ 50]: 1daa44a8acbd2140 +Block 0016 [ 51]: 9e5d3a46a80d13c9 +Block 0016 [ 52]: 8bb8019be2408232 +Block 0016 [ 53]: ffd311c5ea02f66f +Block 0016 [ 54]: 155ce4e0b5ed7634 +Block 0016 [ 55]: b5eaee0502427f59 +Block 0016 [ 56]: 7f426fa00393b3a1 +Block 0016 [ 57]: e13553aba4647bf1 +Block 0016 [ 58]: 93d7bf7dbbbf3ae9 +Block 0016 [ 59]: e69d740f7b2dad2d +Block 0016 [ 60]: 344d4eda5a81b335 +Block 0016 [ 61]: df65fb114c75b1be +Block 0016 [ 62]: 1990683f992d7c47 +Block 0016 [ 63]: 21073b4cbd089892 +Block 0016 [ 64]: 2dcb4d5b039d877d +Block 0016 [ 65]: c29429c9541f38a7 +Block 0016 [ 66]: 7f80e51bc2fe8e28 +Block 0016 [ 67]: f54f4cd646199cac +Block 0016 [ 68]: 85b2a1246ab1163b +Block 0016 [ 69]: daf60fc6375d3ad0 +Block 0016 [ 70]: 57e42e8d98f42fa0 +Block 0016 [ 71]: 0fb9391186b290ee +Block 0016 [ 72]: 959b7e51136817d1 +Block 0016 [ 73]: 5217b619c2d274c8 +Block 0016 [ 74]: b7c6978fc62db8c1 +Block 0016 [ 75]: 4554cc5aedf4af57 +Block 0016 [ 76]: 904db36c16602741 +Block 0016 [ 77]: 0abe05da8a2cb8e6 +Block 0016 [ 78]: 045614eb1b418847 +Block 0016 [ 79]: 32ae1dd042f49d68 +Block 0016 [ 80]: 99972d932984c765 +Block 0016 [ 81]: 4f469863eed3aa0a +Block 0016 [ 82]: ebc14e989ec8a561 +Block 0016 [ 83]: d8e7b72f71320e9f +Block 0016 [ 84]: 1c608b5af0726e22 +Block 0016 [ 85]: bbb551c4d1a9c4aa +Block 0016 [ 86]: acaef7a072fbfa03 +Block 0016 [ 87]: 20c4a900f3892aea +Block 0016 [ 88]: 4b161fcd5b15c8e6 +Block 0016 [ 89]: 426665ce2c0eeffe +Block 0016 [ 90]: 761fc26cafc86c26 +Block 0016 [ 91]: 8797c94e662ea9cc +Block 0016 [ 92]: 7bebc3c35e97780a +Block 0016 [ 93]: a579cfea019fe5d8 +Block 0016 [ 94]: 263bc7f813fa3bb9 +Block 0016 [ 95]: 45ef8c26eec2f7bb +Block 0016 [ 96]: 8a1e6d34c4cc77e8 +Block 0016 [ 97]: 27867f3613e4151d +Block 0016 [ 98]: c7db41cc0f06e783 +Block 0016 [ 99]: b4d76f059af6a433 +Block 0016 [100]: 40ee3aae849418c4 +Block 0016 [101]: 4bd4fc211c3a5c11 +Block 0016 [102]: 7da2668816494939 +Block 0016 [103]: 9e181a446642e6b7 +Block 0016 [104]: 8bda7cc03635fed7 +Block 0016 [105]: f816837b21b1806a +Block 0016 [106]: b30434f84336b715 +Block 0016 [107]: aaf97b333edca150 +Block 0016 [108]: 389485ffaad002cf +Block 0016 [109]: 8cbbfcd6ee186d33 +Block 0016 [110]: 3157b6dc9703b052 +Block 0016 [111]: 8b61c9bb15a97ad1 +Block 0016 [112]: 541844a6ef92801b +Block 0016 [113]: cd602e55c4497811 +Block 0016 [114]: 9ffd4436922d562c +Block 0016 [115]: f6a1f699a4599a18 +Block 0016 [116]: 01f4899e74a1d96c +Block 0016 [117]: 2ec1db479e5068a8 +Block 0016 [118]: bb0aa1fd26e19701 +Block 0016 [119]: 9b0786b32e156f06 +Block 0016 [120]: 5c30b07b934b48b7 +Block 0016 [121]: 3fd71c69e216b478 +Block 0016 [122]: 2e3d1d9b8b50f1f5 +Block 0016 [123]: 3f08a23d0830d1fd +Block 0016 [124]: b0499ad41f985e8d +Block 0016 [125]: ff70aeb3c2042aa6 +Block 0016 [126]: 4f79c964d3b38194 +Block 0016 [127]: 5f6535da90f53fb0 +Block 0017 [ 0]: 86dbf93ac3f80ebb +Block 0017 [ 1]: 2e0f2348ef2a155f +Block 0017 [ 2]: 0c4bb02597d00e8f +Block 0017 [ 3]: c6c302f463f13815 +Block 0017 [ 4]: e3ded630c721ae3b +Block 0017 [ 5]: 7c6410264643d2bf +Block 0017 [ 6]: c8e6e7102a26eb72 +Block 0017 [ 7]: 1915981300f3e25a +Block 0017 [ 8]: 8124aee938f2e8e7 +Block 0017 [ 9]: e971f39f0f644121 +Block 0017 [ 10]: 59b43310ff96f407 +Block 0017 [ 11]: 286319e85551fca5 +Block 0017 [ 12]: 74f4b2e706b20793 +Block 0017 [ 13]: 4ef0995dbff8d698 +Block 0017 [ 14]: 672a0541cf6e284b +Block 0017 [ 15]: dc96b4f476e7dee4 +Block 0017 [ 16]: 04a3cab22b85ff42 +Block 0017 [ 17]: ff0686a07cdca700 +Block 0017 [ 18]: 270bcda7065b6f36 +Block 0017 [ 19]: 8c5aed656f5257f8 +Block 0017 [ 20]: 2c694af32afaa420 +Block 0017 [ 21]: b7efae2361fd9dca +Block 0017 [ 22]: a527d0442a27a2ca +Block 0017 [ 23]: 159bf5aec6801f9c +Block 0017 [ 24]: 2fe99d0a7a7a6295 +Block 0017 [ 25]: ee6b6bbc10147795 +Block 0017 [ 26]: e8084f19550df76e +Block 0017 [ 27]: 63f3006ee592f0f3 +Block 0017 [ 28]: 6e7e7dd76106ea8c +Block 0017 [ 29]: 1488f210ed13602c +Block 0017 [ 30]: 5e9ff9270b0f5998 +Block 0017 [ 31]: ecbe1b3dbc8fc452 +Block 0017 [ 32]: cfd00abc7288fe28 +Block 0017 [ 33]: c460d10f01afe872 +Block 0017 [ 34]: 310843ff07177aed +Block 0017 [ 35]: ad4250b39e5a3502 +Block 0017 [ 36]: 656b54c454d2799b +Block 0017 [ 37]: 283ad8ce0753a41a +Block 0017 [ 38]: 8e69119059c57e58 +Block 0017 [ 39]: e8f339918afcf668 +Block 0017 [ 40]: 7172af6f36048460 +Block 0017 [ 41]: b1c6dcbb9bddc1e5 +Block 0017 [ 42]: ca25138560e0fd17 +Block 0017 [ 43]: c9187f543edfda65 +Block 0017 [ 44]: a20f9c88217536ab +Block 0017 [ 45]: e79d7d866f58d1b2 +Block 0017 [ 46]: 60039cdb76c295bc +Block 0017 [ 47]: 7fc953ce20b4af5f +Block 0017 [ 48]: 9eddbaa0058e131e +Block 0017 [ 49]: 5358296bd7a8f481 +Block 0017 [ 50]: a294668fd156d187 +Block 0017 [ 51]: 4e1423f5dc8827b6 +Block 0017 [ 52]: 0fed19a28e94d868 +Block 0017 [ 53]: 0c146f0ea97c2112 +Block 0017 [ 54]: 2923e8273ea54165 +Block 0017 [ 55]: c3e4cc115c57262d +Block 0017 [ 56]: b56a6e6f678fee68 +Block 0017 [ 57]: f3fae0ae2f09963d +Block 0017 [ 58]: eee2522b29737f05 +Block 0017 [ 59]: a207b298ef42b43d +Block 0017 [ 60]: 11a8f66bd4e22116 +Block 0017 [ 61]: 1c779bd8fa6bc463 +Block 0017 [ 62]: 6ed3d931275742d8 +Block 0017 [ 63]: 1acccf1c25c8574c +Block 0017 [ 64]: ea218800c030bd5c +Block 0017 [ 65]: b281e866406d231f +Block 0017 [ 66]: 0a94d7e48cd315b2 +Block 0017 [ 67]: afad93e2c88678bf +Block 0017 [ 68]: a4162b1541509f99 +Block 0017 [ 69]: d175f3bfe10cd670 +Block 0017 [ 70]: cba9fc2d548a01ae +Block 0017 [ 71]: e75e284c1c1a6083 +Block 0017 [ 72]: 2e4de0030e96358b +Block 0017 [ 73]: 714abf82a6e46c19 +Block 0017 [ 74]: 85ad2cfc6a8c7494 +Block 0017 [ 75]: d0ec0ff6a6e67854 +Block 0017 [ 76]: 257716a22e9cd988 +Block 0017 [ 77]: d72bb2bbc1694cdc +Block 0017 [ 78]: 7d2f54f06ed5f7bf +Block 0017 [ 79]: 7b02bb7cff05c815 +Block 0017 [ 80]: 493ca9570cdc1295 +Block 0017 [ 81]: 5fe4695940b889f5 +Block 0017 [ 82]: e42a80ea4be3cf58 +Block 0017 [ 83]: acba6f12179237a0 +Block 0017 [ 84]: 54046ed072a24683 +Block 0017 [ 85]: 1cf396162f7fe889 +Block 0017 [ 86]: 5c38a95c20a92398 +Block 0017 [ 87]: 0e26d36d6da00deb +Block 0017 [ 88]: 23f81145834c1082 +Block 0017 [ 89]: 5acae8767d95deca +Block 0017 [ 90]: a9d31c468300ddfe +Block 0017 [ 91]: d9b88af5c50cce46 +Block 0017 [ 92]: 37fa64e447e04020 +Block 0017 [ 93]: 2f7e076fc6dfd078 +Block 0017 [ 94]: b3cec9629d0deb36 +Block 0017 [ 95]: cc32bd7f4e7e9863 +Block 0017 [ 96]: b9aa3faa53bb0446 +Block 0017 [ 97]: 164ec64fcf81b584 +Block 0017 [ 98]: 34db7b26f3adca23 +Block 0017 [ 99]: 60196d64d2557550 +Block 0017 [100]: 5961b2f87d8ca589 +Block 0017 [101]: 1dfde0a6c0ccfbac +Block 0017 [102]: 2021c1740985d1a2 +Block 0017 [103]: 68b03224a5176ed4 +Block 0017 [104]: 36f11e2333501345 +Block 0017 [105]: 8e3f0518cf21c19c +Block 0017 [106]: 099a9f02563790b4 +Block 0017 [107]: f362f11b2efa6862 +Block 0017 [108]: 8ca6c4c97cc05f21 +Block 0017 [109]: 7c4a03dac87e4a9a +Block 0017 [110]: 3d401182bfae8e61 +Block 0017 [111]: 7ea885226fbbca06 +Block 0017 [112]: c3ed29c1b310b105 +Block 0017 [113]: 226e574ad2807ca2 +Block 0017 [114]: 56a513a2e353b82b +Block 0017 [115]: 9892fb94743ef93d +Block 0017 [116]: 24d14208ba945517 +Block 0017 [117]: 4fa0137b08a9a442 +Block 0017 [118]: 7dd70ce2ff2d0d57 +Block 0017 [119]: 6c19e2a32da81b67 +Block 0017 [120]: 0bcbb994195db761 +Block 0017 [121]: e34a4009f6bf3310 +Block 0017 [122]: b6575c391e05249a +Block 0017 [123]: ae0e26a5eeb66912 +Block 0017 [124]: 0bb87ddc0deb2b72 +Block 0017 [125]: 3be928c16a8d0b6b +Block 0017 [126]: 652748f115f4e754 +Block 0017 [127]: d0e359ef4d4f00af +Block 0018 [ 0]: 2aa5674fd1d8b40d +Block 0018 [ 1]: dbb9a569c03adf3c +Block 0018 [ 2]: 602a4a56802fb8ac +Block 0018 [ 3]: a9cefa9a07a02258 +Block 0018 [ 4]: 0983afffb71d58c1 +Block 0018 [ 5]: 4b64d1fb17618ef1 +Block 0018 [ 6]: 749a26d465aa0dd7 +Block 0018 [ 7]: 4a49a8308965e8c5 +Block 0018 [ 8]: 138fa766f93ea8c2 +Block 0018 [ 9]: 425c687587361644 +Block 0018 [ 10]: 7a1f4d575267c8f2 +Block 0018 [ 11]: 08c1c26e0511b1fb +Block 0018 [ 12]: 058b385ba386aebf +Block 0018 [ 13]: 2c65bfef8e4ee46a +Block 0018 [ 14]: d1f832ad7b80f7fa +Block 0018 [ 15]: 336ff88cc3d6951a +Block 0018 [ 16]: 7816362d30a559d4 +Block 0018 [ 17]: beabe02fbc7ae8a7 +Block 0018 [ 18]: c81e862255ea507e +Block 0018 [ 19]: c691eb61b2454b13 +Block 0018 [ 20]: bbda0810c15390f5 +Block 0018 [ 21]: d5f89bdfe8dcbea3 +Block 0018 [ 22]: 8ba98c6aca3f7890 +Block 0018 [ 23]: 4f8195b2abf68b50 +Block 0018 [ 24]: f244d7e00977c5b8 +Block 0018 [ 25]: 52d3e3893693be21 +Block 0018 [ 26]: d6ac75864a0a4b09 +Block 0018 [ 27]: 31737d76eeec0dac +Block 0018 [ 28]: 4343172dd2a3ed5f +Block 0018 [ 29]: a441605208364aa5 +Block 0018 [ 30]: 3f8e47e2b7bce73d +Block 0018 [ 31]: d6359b6b2f9e2a3c +Block 0018 [ 32]: 3b2561edb34f5eed +Block 0018 [ 33]: ccdd079b16d4c46e +Block 0018 [ 34]: fe2c16a3fbdeea17 +Block 0018 [ 35]: c8daa941845adf98 +Block 0018 [ 36]: ef7869ec52a59512 +Block 0018 [ 37]: e26ff84a493d7c7e +Block 0018 [ 38]: 9c0caa9fcc3df665 +Block 0018 [ 39]: 6c5281eaa7710399 +Block 0018 [ 40]: d0cda1785aa88e4e +Block 0018 [ 41]: a31d1beb969b45dc +Block 0018 [ 42]: 12afc4a7accbd8a2 +Block 0018 [ 43]: 56469fb7998e6378 +Block 0018 [ 44]: 01386c5908479b8b +Block 0018 [ 45]: 687415ab506cbc68 +Block 0018 [ 46]: 9d563191292a4dce +Block 0018 [ 47]: 7e1c8c7260b9c1e4 +Block 0018 [ 48]: 20a3a6d3018ab012 +Block 0018 [ 49]: 3bced6b3c5b1ed84 +Block 0018 [ 50]: aa8dcefad634e58b +Block 0018 [ 51]: 161ddb6e3d7d69f4 +Block 0018 [ 52]: 7039fa10ea0bbff0 +Block 0018 [ 53]: 32723d06737af10a +Block 0018 [ 54]: e84317749f1191e4 +Block 0018 [ 55]: 18c17d76251cd254 +Block 0018 [ 56]: e7bbacff780165c9 +Block 0018 [ 57]: a63258d3e9173063 +Block 0018 [ 58]: 9d845b2cdad3ae6c +Block 0018 [ 59]: 80863609a8080239 +Block 0018 [ 60]: aeb0108c57b35b0c +Block 0018 [ 61]: c3a6d8bfefbb126b +Block 0018 [ 62]: f9f3331294e28d63 +Block 0018 [ 63]: fff56675d44f84f4 +Block 0018 [ 64]: 2736d955ba5d90ba +Block 0018 [ 65]: 644358fe1ab9760e +Block 0018 [ 66]: 9ff9e6feaa53f66c +Block 0018 [ 67]: 9696bc3da3b68444 +Block 0018 [ 68]: 1367438ef5ff3c7e +Block 0018 [ 69]: 4845f05a87410ac9 +Block 0018 [ 70]: bec2379c4ee5d144 +Block 0018 [ 71]: 03de245819472430 +Block 0018 [ 72]: 1db9b5a009b81841 +Block 0018 [ 73]: c25196560bf2d51b +Block 0018 [ 74]: 0425d7bc03de37d5 +Block 0018 [ 75]: ed46c9003fe5cb7a +Block 0018 [ 76]: e1b1f09579ebf515 +Block 0018 [ 77]: 2e7c57b4160cf29b +Block 0018 [ 78]: f0304fe252d819e4 +Block 0018 [ 79]: 371a020d72b7d98f +Block 0018 [ 80]: 36e9b0cf530d0498 +Block 0018 [ 81]: 317ef0425f37e93a +Block 0018 [ 82]: 45c467bcd49da881 +Block 0018 [ 83]: 0e21ff32aec0927b +Block 0018 [ 84]: 8883c2b4291f6b51 +Block 0018 [ 85]: 708b49a444fe2ece +Block 0018 [ 86]: 8a8c752afa03aee1 +Block 0018 [ 87]: 9dafb4fcc13de535 +Block 0018 [ 88]: 8d7a457d16d7f49f +Block 0018 [ 89]: d3513c7f9cad018b +Block 0018 [ 90]: 03144dd828027e10 +Block 0018 [ 91]: c07fad863376caa3 +Block 0018 [ 92]: 8500f36e4cee0ceb +Block 0018 [ 93]: c597ca6cb805cbd2 +Block 0018 [ 94]: c05fb437b61b48da +Block 0018 [ 95]: 35145b4938a63b8c +Block 0018 [ 96]: 8bf9ebddcd0b7fb5 +Block 0018 [ 97]: d6668784244b88c5 +Block 0018 [ 98]: 45731fd06dfa60d4 +Block 0018 [ 99]: 7bf4cd52329f58f1 +Block 0018 [100]: 94afb89c3a052416 +Block 0018 [101]: e49c7c68d4c95176 +Block 0018 [102]: 0d046d2ae897f269 +Block 0018 [103]: 734d9e676f1d0600 +Block 0018 [104]: edb5c8933b81f706 +Block 0018 [105]: 9cdeadfc91f1ff95 +Block 0018 [106]: 33020a25481ff5f7 +Block 0018 [107]: 7afa457afdac3306 +Block 0018 [108]: 9122d216bc3de7c8 +Block 0018 [109]: e14dba25e7e091d8 +Block 0018 [110]: 62be3b4921bae56d +Block 0018 [111]: 45d8c7083076ca76 +Block 0018 [112]: 1b689948b01eeda1 +Block 0018 [113]: 4cefb70309c448fa +Block 0018 [114]: 6cdf7eb1412871a4 +Block 0018 [115]: 42cf57fdbd83ac27 +Block 0018 [116]: a566c79afba194e8 +Block 0018 [117]: c9918575e10df83a +Block 0018 [118]: a078bd2b5a6a3c9f +Block 0018 [119]: dc319fc197b36ae7 +Block 0018 [120]: 23d759be6893d7a4 +Block 0018 [121]: f8a1237465ab3c9b +Block 0018 [122]: cd47410ab3c90d76 +Block 0018 [123]: c3bfee20feb23cfb +Block 0018 [124]: b2f1f976ea8568d5 +Block 0018 [125]: e65206d65f01a1ae +Block 0018 [126]: 1b8f1facf8bb69eb +Block 0018 [127]: 44e81cb05a43dab5 +Block 0019 [ 0]: aa3e76015aa2c41a +Block 0019 [ 1]: cb622c70b808c1d5 +Block 0019 [ 2]: a0146068353cd441 +Block 0019 [ 3]: 7ccebe1e3e2e35d1 +Block 0019 [ 4]: b5fea95156ff6d79 +Block 0019 [ 5]: 77ef49a16920b5eb +Block 0019 [ 6]: c4774d26e217a901 +Block 0019 [ 7]: 1edca7593da10df0 +Block 0019 [ 8]: cb9d48e8bae900c9 +Block 0019 [ 9]: efaa7c38141f0935 +Block 0019 [ 10]: 2c24a8490894b89d +Block 0019 [ 11]: ef59dde9dc3f69e1 +Block 0019 [ 12]: 3e479bcc6807b6a2 +Block 0019 [ 13]: 1db94891d8de2438 +Block 0019 [ 14]: a9db4d224f6ab5ad +Block 0019 [ 15]: 616c6a1d422efe6c +Block 0019 [ 16]: adf176d6d1263636 +Block 0019 [ 17]: d82b220f874f7265 +Block 0019 [ 18]: c59dd97d04e43007 +Block 0019 [ 19]: 9a3b357237af7443 +Block 0019 [ 20]: 4a2c70a326668106 +Block 0019 [ 21]: 755df7a100e7f66c +Block 0019 [ 22]: d48f9b0e6440cfc9 +Block 0019 [ 23]: ca32b8caf8c8944b +Block 0019 [ 24]: fdb2e9c116686001 +Block 0019 [ 25]: 0b5bb6b191036570 +Block 0019 [ 26]: f5f2990e2ef67cc0 +Block 0019 [ 27]: c98661687f4685be +Block 0019 [ 28]: 65f6a375c3c611f8 +Block 0019 [ 29]: ef2e760822c6a47f +Block 0019 [ 30]: 225d6aa089d5268e +Block 0019 [ 31]: 62da55277aee1563 +Block 0019 [ 32]: 712dd1bec61a04a7 +Block 0019 [ 33]: 244be57459f4c76a +Block 0019 [ 34]: d32a36bff368c5d5 +Block 0019 [ 35]: 08047c20c35ee571 +Block 0019 [ 36]: 26e8068fc6b13eb5 +Block 0019 [ 37]: 56e005fd57f4b712 +Block 0019 [ 38]: 36f4d5514b4ad0cf +Block 0019 [ 39]: 577c56d82ce0f024 +Block 0019 [ 40]: a171c394367b6da2 +Block 0019 [ 41]: 32f8fa87524fe061 +Block 0019 [ 42]: 6612dd6bb411827d +Block 0019 [ 43]: e9c9229a1250942f +Block 0019 [ 44]: bdc28bc191e037e8 +Block 0019 [ 45]: 0c6451a576636faf +Block 0019 [ 46]: 9f168206eadcff9c +Block 0019 [ 47]: 83f94a286e1c1435 +Block 0019 [ 48]: 0c41dfcd624a9c7a +Block 0019 [ 49]: 7022a05fa7a76790 +Block 0019 [ 50]: ccc35774262e5cda +Block 0019 [ 51]: 375aae3a3cf6f07e +Block 0019 [ 52]: b73940411e1738cf +Block 0019 [ 53]: 2a5409d288e38616 +Block 0019 [ 54]: 07073fa0e861eb3c +Block 0019 [ 55]: 79469b12451cca2a +Block 0019 [ 56]: 723ebd6cb8093e12 +Block 0019 [ 57]: 363987806bd00b0f +Block 0019 [ 58]: 3cb6f8ba09c2ea95 +Block 0019 [ 59]: 520d977ef770e9db +Block 0019 [ 60]: 7778cc317565971b +Block 0019 [ 61]: bec212c43afb3adf +Block 0019 [ 62]: b666996aafbe2dbc +Block 0019 [ 63]: c9cb8e75500c38f2 +Block 0019 [ 64]: 8b5d717f1e733849 +Block 0019 [ 65]: cb94b06d182747c5 +Block 0019 [ 66]: a2fae8841d54f52f +Block 0019 [ 67]: db0e02a7c115504d +Block 0019 [ 68]: adfbdfac5438167d +Block 0019 [ 69]: f67d10aeb9d0b51b +Block 0019 [ 70]: 7b8cab32096b0baf +Block 0019 [ 71]: de09aecb032a0c31 +Block 0019 [ 72]: 509b16c99b879ae6 +Block 0019 [ 73]: f7641ecd12a66179 +Block 0019 [ 74]: 007ad1724fc84331 +Block 0019 [ 75]: efa6210dbe8c0764 +Block 0019 [ 76]: 37dc83be6aac171b +Block 0019 [ 77]: c96e4eea37d1e6eb +Block 0019 [ 78]: ddb040a43cf90b33 +Block 0019 [ 79]: 39b0cc39afba6089 +Block 0019 [ 80]: 9aa9caa334b61342 +Block 0019 [ 81]: 44b19b55c2903530 +Block 0019 [ 82]: 9217a7b8f7abbe7d +Block 0019 [ 83]: da0435f0e5f65479 +Block 0019 [ 84]: b4ea8b8f6fe9d01e +Block 0019 [ 85]: 6c6742cb6ae2d8fe +Block 0019 [ 86]: a8a1d0d317252abc +Block 0019 [ 87]: dbeb783190ce2842 +Block 0019 [ 88]: 6ab03dde0b190483 +Block 0019 [ 89]: 0ae262c79049e94c +Block 0019 [ 90]: 25e7abd3f3dc40d4 +Block 0019 [ 91]: 74ae75be5862d6ae +Block 0019 [ 92]: afba143705d3d17a +Block 0019 [ 93]: c0cb1d6a6cb6c7a5 +Block 0019 [ 94]: a7b59fb95d48c653 +Block 0019 [ 95]: 98bc8c61739f4de6 +Block 0019 [ 96]: 2d6848e5e862916c +Block 0019 [ 97]: d2e937fe621b933a +Block 0019 [ 98]: 52c035cade29df96 +Block 0019 [ 99]: 1a4598813b293978 +Block 0019 [100]: 1944c56096b3446a +Block 0019 [101]: 31d1d01ad95e0d41 +Block 0019 [102]: 929ed4acca116441 +Block 0019 [103]: d0f85d36d6357c63 +Block 0019 [104]: aa51d03fc905cf82 +Block 0019 [105]: 025aa197fe483a3d +Block 0019 [106]: 197c68bea90d901b +Block 0019 [107]: b9d621593657d1f7 +Block 0019 [108]: 57bef2332db7c6ef +Block 0019 [109]: a4b4fcb041fd73dc +Block 0019 [110]: ec3ba04676096512 +Block 0019 [111]: f0c29a9d37c08914 +Block 0019 [112]: 4d9d261e314064db +Block 0019 [113]: dc2314df89a11580 +Block 0019 [114]: a201d18ed2904ccc +Block 0019 [115]: 6d1eee9f8733e9ac +Block 0019 [116]: 52e03b595ab01453 +Block 0019 [117]: 2e185ddcae94e78e +Block 0019 [118]: a122c80cb676b5b2 +Block 0019 [119]: 7b094927f1ab7fd5 +Block 0019 [120]: e24f8e8700242727 +Block 0019 [121]: e547f9fbe6f25da0 +Block 0019 [122]: 1c032a1b7d889bd8 +Block 0019 [123]: f0065170035b78e0 +Block 0019 [124]: 9970454dd33cf256 +Block 0019 [125]: 857946d277b97210 +Block 0019 [126]: fc16e28cd750816e +Block 0019 [127]: 06f8ff690d41929d +Block 0020 [ 0]: 8a4f9db0ee84b35e +Block 0020 [ 1]: 05d43e724283fb22 +Block 0020 [ 2]: 1752db12ef2183eb +Block 0020 [ 3]: 178453f8a1f0e320 +Block 0020 [ 4]: ca2301d94bc879ae +Block 0020 [ 5]: bde50c8b0c995430 +Block 0020 [ 6]: 67161b155639636f +Block 0020 [ 7]: 85af2571c91c953c +Block 0020 [ 8]: d6233a7eae67bbb8 +Block 0020 [ 9]: ff9f6a7dd83865eb +Block 0020 [ 10]: cf3f19501b2b1097 +Block 0020 [ 11]: 36db51d1b9e6f85a +Block 0020 [ 12]: 5c5942dc39207d28 +Block 0020 [ 13]: 2b5a9939d050b99d +Block 0020 [ 14]: 8890b2c4de332010 +Block 0020 [ 15]: 2bffc5b880155776 +Block 0020 [ 16]: 9d689be3ee578244 +Block 0020 [ 17]: af66f1e4f8b45f62 +Block 0020 [ 18]: d1d0b72827268a6d +Block 0020 [ 19]: 7b4f96b5b5bb2ee7 +Block 0020 [ 20]: 34164e19532e3ff3 +Block 0020 [ 21]: 3b293d5ba9a9aa36 +Block 0020 [ 22]: 9a1d322d31de3ede +Block 0020 [ 23]: 209a2e31f28fbf4a +Block 0020 [ 24]: e96333b0e0307d67 +Block 0020 [ 25]: 74db7c84dbfb42b2 +Block 0020 [ 26]: 6a832659109cbeb6 +Block 0020 [ 27]: 40a88c9e7583cc27 +Block 0020 [ 28]: 2fb7884dc5dd65ec +Block 0020 [ 29]: 8622638205cd2f99 +Block 0020 [ 30]: 6f064114ced1864a +Block 0020 [ 31]: bc3837c3a04e9a7b +Block 0020 [ 32]: 3e8d79081e8567fb +Block 0020 [ 33]: f56eabf9f0595e78 +Block 0020 [ 34]: 8eed403a3c788b53 +Block 0020 [ 35]: 1378bf4dc47dfe48 +Block 0020 [ 36]: 084c595b8c3c4284 +Block 0020 [ 37]: 3b5361f50ffb9eaa +Block 0020 [ 38]: 8bce8704343749f9 +Block 0020 [ 39]: f1211e16a9112f82 +Block 0020 [ 40]: bd238d55c13f2400 +Block 0020 [ 41]: 34220ff220961874 +Block 0020 [ 42]: 8897e83d67d144c6 +Block 0020 [ 43]: 2db5b922527b964e +Block 0020 [ 44]: b52197589d437094 +Block 0020 [ 45]: 6a48ba9a9fa154de +Block 0020 [ 46]: e98bb88fd0e4dab7 +Block 0020 [ 47]: 2f84a701d1a03033 +Block 0020 [ 48]: fc772aae41afde53 +Block 0020 [ 49]: 636bb52ba1d4d9f4 +Block 0020 [ 50]: faec1cea1cc46a10 +Block 0020 [ 51]: 94d08005cfc3c287 +Block 0020 [ 52]: 9830390c9a830a8c +Block 0020 [ 53]: 1c8f499329eaf4d1 +Block 0020 [ 54]: 6853cf0db3311b76 +Block 0020 [ 55]: 83e79a680245e207 +Block 0020 [ 56]: 7cec49064e8bf50b +Block 0020 [ 57]: 4fd24b05836c01c4 +Block 0020 [ 58]: 905e99c68a4c100e +Block 0020 [ 59]: 4f9a89f3d7ac4e0b +Block 0020 [ 60]: c9c39471299e1ddb +Block 0020 [ 61]: e39efaf3b38813a4 +Block 0020 [ 62]: 286b4375813a437d +Block 0020 [ 63]: 98e5b9910e3934df +Block 0020 [ 64]: d521ed1fe8a87969 +Block 0020 [ 65]: db08009d9e929343 +Block 0020 [ 66]: a0c34ebe01219a67 +Block 0020 [ 67]: e0ce735c0009e0c1 +Block 0020 [ 68]: 4fb4716c4dbb61f8 +Block 0020 [ 69]: e59f27e642628964 +Block 0020 [ 70]: fff59eb4c7b5702c +Block 0020 [ 71]: 2a775ff254d62e30 +Block 0020 [ 72]: 0a081787e9771e82 +Block 0020 [ 73]: ec7dea5310431b84 +Block 0020 [ 74]: 2c490281ca5de0f6 +Block 0020 [ 75]: eead3e14ea1923fd +Block 0020 [ 76]: 3b833ad12c010798 +Block 0020 [ 77]: 363edc3e25c47661 +Block 0020 [ 78]: af78f9f2aec5fe6a +Block 0020 [ 79]: 31d902a64cbcb466 +Block 0020 [ 80]: f5c4812963178782 +Block 0020 [ 81]: 2922c5fc0ea4c6b8 +Block 0020 [ 82]: 31b289a43161a3e8 +Block 0020 [ 83]: ed8f261a426e4652 +Block 0020 [ 84]: e813c7f4b1ea1bd1 +Block 0020 [ 85]: 0760441a91fd6595 +Block 0020 [ 86]: 6584645ae348b4f0 +Block 0020 [ 87]: 087309d7d5028f81 +Block 0020 [ 88]: 68d7600f7a6987a9 +Block 0020 [ 89]: 2b3846321beb118c +Block 0020 [ 90]: 4f1633a0d3637086 +Block 0020 [ 91]: d3b8197641b70961 +Block 0020 [ 92]: 79e34df4822e23e3 +Block 0020 [ 93]: 1561ec3cb8df22a0 +Block 0020 [ 94]: 2caa46601b15c5a8 +Block 0020 [ 95]: efd91677fe9784df +Block 0020 [ 96]: 985faa6923818318 +Block 0020 [ 97]: 49c18986b6c3be49 +Block 0020 [ 98]: 7f60e94fb8ca654a +Block 0020 [ 99]: 9aa81a1c69b89835 +Block 0020 [100]: 804a4a140e6de1b3 +Block 0020 [101]: ad5e3b1de8e2fa89 +Block 0020 [102]: 9317892f7ff6495f +Block 0020 [103]: aedbce513941eb7e +Block 0020 [104]: bae93efd21fe2a00 +Block 0020 [105]: e8fd2f13cd90ddf5 +Block 0020 [106]: ca82b1623bfd32e2 +Block 0020 [107]: 45a3aa2da3795165 +Block 0020 [108]: 842eb4e38880bf30 +Block 0020 [109]: 94da58ed78612959 +Block 0020 [110]: 2b68ef59ef8d144c +Block 0020 [111]: 3a815560012d789a +Block 0020 [112]: cbf6b1e9b5757616 +Block 0020 [113]: 856022efc7259d65 +Block 0020 [114]: 1d546cfb010ccea0 +Block 0020 [115]: ead677ea82cde8c4 +Block 0020 [116]: c68f1c9ce7d502c8 +Block 0020 [117]: 01430c313a4da7de +Block 0020 [118]: d9bd21f426a60b45 +Block 0020 [119]: 367f365d76791fb5 +Block 0020 [120]: 450c3a5d659df17c +Block 0020 [121]: e4936ada9bf3874c +Block 0020 [122]: c022ef04e11cc79d +Block 0020 [123]: b8b492f9bd65b623 +Block 0020 [124]: bff3f85f55177ad6 +Block 0020 [125]: b5b12c22a577cc39 +Block 0020 [126]: f474903b19473bea +Block 0020 [127]: d79a7d13279e3b09 +Block 0021 [ 0]: 6a690d82f7468dd3 +Block 0021 [ 1]: 12441ba391c9594e +Block 0021 [ 2]: 8c5f0f5a0d1addfc +Block 0021 [ 3]: c889abe6f4d8422a +Block 0021 [ 4]: 5d763273270fbef6 +Block 0021 [ 5]: 4348880c55930785 +Block 0021 [ 6]: e620148dd4f6f217 +Block 0021 [ 7]: 3e029951e0b571b4 +Block 0021 [ 8]: 357a0d9da17a4feb +Block 0021 [ 9]: 0e50f4a16dfeff0c +Block 0021 [ 10]: 95d4a46a7f81baac +Block 0021 [ 11]: 539843f5fcfd02cd +Block 0021 [ 12]: 9d178b8212b0ff45 +Block 0021 [ 13]: 2a2f470cb36c100b +Block 0021 [ 14]: bf41303e9261b48e +Block 0021 [ 15]: 9b0862b229b83b6d +Block 0021 [ 16]: cc89cb6361314e2e +Block 0021 [ 17]: 268c35415ce6dc52 +Block 0021 [ 18]: a3a3f427c540d392 +Block 0021 [ 19]: 6bf8e2ed1915f860 +Block 0021 [ 20]: d71b137449672e9b +Block 0021 [ 21]: 629232b8316eb560 +Block 0021 [ 22]: 015105d3bd65ee42 +Block 0021 [ 23]: 7899ec0fb94c6aec +Block 0021 [ 24]: 87452e4e58a4db50 +Block 0021 [ 25]: 9eab92117f5864cc +Block 0021 [ 26]: c9b4aae2326ae591 +Block 0021 [ 27]: beb6cb972da0771c +Block 0021 [ 28]: ef51efd15eb76fdb +Block 0021 [ 29]: be1a9ed66325f1c8 +Block 0021 [ 30]: f9eb1c4a361d6a0b +Block 0021 [ 31]: f33919c3dbbd7564 +Block 0021 [ 32]: 09f88bba37d76cc5 +Block 0021 [ 33]: 626fab6de3cfcec7 +Block 0021 [ 34]: 1a641fe5d8c5f7dd +Block 0021 [ 35]: 16aafd5de0731c78 +Block 0021 [ 36]: e3c0c662199c1ca2 +Block 0021 [ 37]: 54d0766c3a0a5f59 +Block 0021 [ 38]: c13b58b4f9e87258 +Block 0021 [ 39]: ab4de1d30836c3c0 +Block 0021 [ 40]: 5d4af2bffc26448c +Block 0021 [ 41]: 6cbf772c8406ff83 +Block 0021 [ 42]: 2494f8048435f921 +Block 0021 [ 43]: b844fc339f0496b0 +Block 0021 [ 44]: 957800ddd4aa408e +Block 0021 [ 45]: 998fc5084c314ceb +Block 0021 [ 46]: 2eb014c15ff6239d +Block 0021 [ 47]: 6a779f0437c473bb +Block 0021 [ 48]: 1d68b14e7bf75d98 +Block 0021 [ 49]: c96192d0a155afa7 +Block 0021 [ 50]: ed980b6f7430035d +Block 0021 [ 51]: a282ae6ceae976e1 +Block 0021 [ 52]: 627d105e74b5809a +Block 0021 [ 53]: ef2583d01983d3e9 +Block 0021 [ 54]: 19702f856f10b49c +Block 0021 [ 55]: 878565afd439cff8 +Block 0021 [ 56]: 41e300a0e2ea091f +Block 0021 [ 57]: 813d4ae9df7ff99b +Block 0021 [ 58]: 876ed9836644b255 +Block 0021 [ 59]: e6f3cf1e523c47a2 +Block 0021 [ 60]: 5b3b6a50ddbe365a +Block 0021 [ 61]: a78355f9b796b48e +Block 0021 [ 62]: cee13fa63c34d91d +Block 0021 [ 63]: 3ad04395adaaa626 +Block 0021 [ 64]: 25f04f6fea52fad8 +Block 0021 [ 65]: b949d6ad6bd07455 +Block 0021 [ 66]: eace6d725bdd90e7 +Block 0021 [ 67]: 28ec322421ed16da +Block 0021 [ 68]: 53ef5acdcde08591 +Block 0021 [ 69]: 1731904e94e47535 +Block 0021 [ 70]: f905f30eaee0f5a4 +Block 0021 [ 71]: bf030f5796084fdb +Block 0021 [ 72]: 2727e18c596bcc5d +Block 0021 [ 73]: b41e211383e74c1c +Block 0021 [ 74]: ca7ac3560b209561 +Block 0021 [ 75]: c72caf41204b2f30 +Block 0021 [ 76]: 01c8ea4f3814837e +Block 0021 [ 77]: 6a6c6b41f86cd210 +Block 0021 [ 78]: 04666cea6797c53e +Block 0021 [ 79]: 31493ece7f7f369b +Block 0021 [ 80]: b54719467f58b743 +Block 0021 [ 81]: c994b462ca9e76fb +Block 0021 [ 82]: bca2b0d3356d6258 +Block 0021 [ 83]: 8ca7953de9bbcdff +Block 0021 [ 84]: 535469dd17595f7d +Block 0021 [ 85]: 923db89190ec8649 +Block 0021 [ 86]: 6a47a104d6085a31 +Block 0021 [ 87]: 99521adc90e0fb2e +Block 0021 [ 88]: 4f41ef6bb830f393 +Block 0021 [ 89]: 2eccdea43764c42c +Block 0021 [ 90]: 987fe3497b80df32 +Block 0021 [ 91]: b0efcf6157cbcf0b +Block 0021 [ 92]: 26e0b03471338ae5 +Block 0021 [ 93]: cf4ad2adf62522c4 +Block 0021 [ 94]: 4cb838ff8a040a42 +Block 0021 [ 95]: 437c3d04c884bb15 +Block 0021 [ 96]: 5b14b20bc5801714 +Block 0021 [ 97]: 56dba0d047b9059b +Block 0021 [ 98]: d69d5fa49a586a3a +Block 0021 [ 99]: 2d920c3b7cdbe2ee +Block 0021 [100]: a25b45eac0504268 +Block 0021 [101]: fefa93f49a07f52b +Block 0021 [102]: 6b800421cddbaceb +Block 0021 [103]: 8f4aa7cc052749cc +Block 0021 [104]: 91b8112dc322d756 +Block 0021 [105]: a693ecaab66dbce0 +Block 0021 [106]: 876ccc4f6a1e06ef +Block 0021 [107]: f1dceba8e8d281c8 +Block 0021 [108]: 9db34590d552f669 +Block 0021 [109]: c652413cce887046 +Block 0021 [110]: 3591284cc5019dd5 +Block 0021 [111]: 557c5ca2a73593f6 +Block 0021 [112]: 1ad1bbd2cdedd482 +Block 0021 [113]: 4a4411ef6795ebc6 +Block 0021 [114]: b3572af2889f1c36 +Block 0021 [115]: f68259a9ba57696d +Block 0021 [116]: c9343fffa8f8a568 +Block 0021 [117]: 2f7041694cec2149 +Block 0021 [118]: 7a0447037cc831ab +Block 0021 [119]: 51e939824bd21330 +Block 0021 [120]: fc74c47626ca3908 +Block 0021 [121]: bab7851bd8ed2716 +Block 0021 [122]: a159f8ec28517b61 +Block 0021 [123]: 7536651c332d5abe +Block 0021 [124]: 68913e0a98eed0fc +Block 0021 [125]: 0edcf5e40acaf20c +Block 0021 [126]: 3b248d434ed7bb55 +Block 0021 [127]: 39ab89f9d8b926b3 +Block 0022 [ 0]: 3f70cc0f9d47707f +Block 0022 [ 1]: f5eb80c359ef2a51 +Block 0022 [ 2]: d453f69f134da7de +Block 0022 [ 3]: 138b7cc85bb57594 +Block 0022 [ 4]: 74f9c1207bb6b4dd +Block 0022 [ 5]: 219a6ab1c89b4f55 +Block 0022 [ 6]: 8a494ac72680d673 +Block 0022 [ 7]: 267fc49b20bebc87 +Block 0022 [ 8]: e487c1458e1d57bb +Block 0022 [ 9]: ce2365f353681c6e +Block 0022 [ 10]: ead7a9af5856b905 +Block 0022 [ 11]: 686e9296790d47c4 +Block 0022 [ 12]: 262aa1e0a3aee9b8 +Block 0022 [ 13]: cf02b3e2b36c552f +Block 0022 [ 14]: cc89498295a3a56e +Block 0022 [ 15]: 59c0818ddb29c3b7 +Block 0022 [ 16]: 290e0e36ae0adb71 +Block 0022 [ 17]: 2b26f87ae8afd6d1 +Block 0022 [ 18]: 7eaf767983ed9a23 +Block 0022 [ 19]: 7d20d84ac0016375 +Block 0022 [ 20]: 8571c62882e1e05f +Block 0022 [ 21]: b02d4e3a32d7eb0f +Block 0022 [ 22]: 508db8ec23e8b660 +Block 0022 [ 23]: eb378e5c40b3c8f1 +Block 0022 [ 24]: 83cbba05d754b665 +Block 0022 [ 25]: d9d4c05f4f0318fa +Block 0022 [ 26]: f9c09b3d86d7f325 +Block 0022 [ 27]: fda56c3e88644d3d +Block 0022 [ 28]: 2c2aa62da14575bf +Block 0022 [ 29]: 6c64f927b3ab75ab +Block 0022 [ 30]: 935b4ee8b0eb2f84 +Block 0022 [ 31]: 8755b9ac7888c891 +Block 0022 [ 32]: 328982a5c3491d4b +Block 0022 [ 33]: 0f46472e28c9f157 +Block 0022 [ 34]: d4141d926cea8a31 +Block 0022 [ 35]: b83228a2302af08a +Block 0022 [ 36]: 85c24d6f72bca71a +Block 0022 [ 37]: b4abb81f797317be +Block 0022 [ 38]: d56c5d7910890829 +Block 0022 [ 39]: 80ec5e7003e1dcbe +Block 0022 [ 40]: 86f0590758cd27da +Block 0022 [ 41]: 4ef24b838af6cdf7 +Block 0022 [ 42]: 67e357a7beef393b +Block 0022 [ 43]: 63d780ac9193bd51 +Block 0022 [ 44]: 64bb5e3aa4e4e0a9 +Block 0022 [ 45]: a94f3197abecf10d +Block 0022 [ 46]: 63f34c088c47b6d6 +Block 0022 [ 47]: 9ddbf939d19d4778 +Block 0022 [ 48]: 5d08f10b95522795 +Block 0022 [ 49]: 78bba3c480deabdd +Block 0022 [ 50]: 8d59286c50ed63bc +Block 0022 [ 51]: 11e2e05af4e98a96 +Block 0022 [ 52]: 6c47d628f6bf8ae5 +Block 0022 [ 53]: 2a06375e05b36cc1 +Block 0022 [ 54]: 9dbca78d1d334ba4 +Block 0022 [ 55]: a1216d5e2ae50cf6 +Block 0022 [ 56]: a150c2b93d4afb34 +Block 0022 [ 57]: a2b13a50cd072fa1 +Block 0022 [ 58]: 7c03a9ea46b3e1be +Block 0022 [ 59]: 9a682f9b2c8a0ba5 +Block 0022 [ 60]: 836dd7bd4d152995 +Block 0022 [ 61]: f0176675ec8230f1 +Block 0022 [ 62]: 0481fd3ccc6daa78 +Block 0022 [ 63]: e3325ec7d894b781 +Block 0022 [ 64]: ea394932d67081f5 +Block 0022 [ 65]: 8e7c52d335e12e3b +Block 0022 [ 66]: fce337de40f0d41e +Block 0022 [ 67]: 58cffb116a73341c +Block 0022 [ 68]: c0296ad8d2c01ccc +Block 0022 [ 69]: 76d5795c8820068d +Block 0022 [ 70]: 1a29ad20fa1ab458 +Block 0022 [ 71]: 8619693bda7f0872 +Block 0022 [ 72]: 6b8b27f92588f5f9 +Block 0022 [ 73]: 5e76c336d09dc18b +Block 0022 [ 74]: c699fdcb6eecfc23 +Block 0022 [ 75]: b31ed01e22cb487f +Block 0022 [ 76]: 1496f91f13ec269a +Block 0022 [ 77]: d4090509dd4158e6 +Block 0022 [ 78]: 4a947a520f8810f6 +Block 0022 [ 79]: 065468219f73ab5a +Block 0022 [ 80]: 8a4b1ed17cae3bbb +Block 0022 [ 81]: c30a06c4a34d2887 +Block 0022 [ 82]: 5cddc373dbfc1593 +Block 0022 [ 83]: 04335ba1b963f666 +Block 0022 [ 84]: 85a31f5f5fa3e7eb +Block 0022 [ 85]: 232179a977e19047 +Block 0022 [ 86]: 26563ede801a4d94 +Block 0022 [ 87]: 4a7e1940462900f0 +Block 0022 [ 88]: b1e2be20bbf016c3 +Block 0022 [ 89]: 7db114728eee3040 +Block 0022 [ 90]: 4f182d12273166ae +Block 0022 [ 91]: 9c4aa74c698762ba +Block 0022 [ 92]: 03a3e790226c9265 +Block 0022 [ 93]: a31d876f8c84340a +Block 0022 [ 94]: ef732cbaa920286f +Block 0022 [ 95]: 3326b587e57c8933 +Block 0022 [ 96]: c1dcf40199a259d5 +Block 0022 [ 97]: 22b54da552e17174 +Block 0022 [ 98]: 54287619d13f4838 +Block 0022 [ 99]: ea44ee02ed3e4aec +Block 0022 [100]: e60d7f85f5abb1ee +Block 0022 [101]: 8b1a51a4211a7969 +Block 0022 [102]: 49c9292a1953bf9c +Block 0022 [103]: 202dc80570086a4b +Block 0022 [104]: 2dd572ef067f560a +Block 0022 [105]: 2ddebe7bd2a703ca +Block 0022 [106]: 289c61cdfd6966fb +Block 0022 [107]: 7156699a693063c1 +Block 0022 [108]: 244c502031ccd19f +Block 0022 [109]: a9436c05d1a5e0ba +Block 0022 [110]: 2ed5fbeafdd3128a +Block 0022 [111]: 27c4f3005c6ffa0c +Block 0022 [112]: b399e9c1b48ee737 +Block 0022 [113]: 26cf4190bd859535 +Block 0022 [114]: a97fa3395a24ead9 +Block 0022 [115]: 73032b5c7a73a24b +Block 0022 [116]: 3c6c63e68aa5e799 +Block 0022 [117]: 56d6fea9e6aee17e +Block 0022 [118]: 46487a212a0f03fd +Block 0022 [119]: 4108a5270f3d45e5 +Block 0022 [120]: 78808b44d4deb7b0 +Block 0022 [121]: a49cd7a2e771bec7 +Block 0022 [122]: c899d135f9a20151 +Block 0022 [123]: 397d1afb157e933d +Block 0022 [124]: b3e792595d5c92ab +Block 0022 [125]: 154fb67a3c72b825 +Block 0022 [126]: 7ef6c5601737fa2e +Block 0022 [127]: e876f8e91ea54fa3 +Block 0023 [ 0]: 341a79fe5b82da3b +Block 0023 [ 1]: 737f57840604464b +Block 0023 [ 2]: 1a7b402397450013 +Block 0023 [ 3]: 17424bc7740881d5 +Block 0023 [ 4]: 99730f5b1c4f162a +Block 0023 [ 5]: 1849c57fadf5c376 +Block 0023 [ 6]: bef6a16b254402fe +Block 0023 [ 7]: e446a0a7fe1b37d1 +Block 0023 [ 8]: e1c2dbb6e612b1c9 +Block 0023 [ 9]: 8d87fc8c05d17a91 +Block 0023 [ 10]: 0069fc8e5ec68712 +Block 0023 [ 11]: 03fe37e380527614 +Block 0023 [ 12]: d36a5d4153e36e01 +Block 0023 [ 13]: bcb47d6da610431e +Block 0023 [ 14]: 270f257c2355afd3 +Block 0023 [ 15]: 5ed5f32159550325 +Block 0023 [ 16]: f3d03d86e0697368 +Block 0023 [ 17]: 0e783d159193f647 +Block 0023 [ 18]: 10f1d60920b8df4b +Block 0023 [ 19]: aaaf13f7120fd26f +Block 0023 [ 20]: 4679458b37b0215b +Block 0023 [ 21]: 496624fd48549689 +Block 0023 [ 22]: b243733c6fae67a7 +Block 0023 [ 23]: bb53c16aca1dfdfb +Block 0023 [ 24]: 379a6e5c7b368ef2 +Block 0023 [ 25]: ab9a4ec2322b323e +Block 0023 [ 26]: ee320748a309795f +Block 0023 [ 27]: 08569d46951e5bcc +Block 0023 [ 28]: ec8ceeb84b74514d +Block 0023 [ 29]: 1f85bb224087633e +Block 0023 [ 30]: f28be6d460e221d0 +Block 0023 [ 31]: f661e32cb2e0cd48 +Block 0023 [ 32]: a89f51d1a649a311 +Block 0023 [ 33]: 91c15b946457231a +Block 0023 [ 34]: b3390d3c66d4fc3b +Block 0023 [ 35]: 6e3fe811c4117e98 +Block 0023 [ 36]: 647ae653447f7977 +Block 0023 [ 37]: 3e8451f63f8865fd +Block 0023 [ 38]: f8a6651886f512a4 +Block 0023 [ 39]: 7cf42922459c66c7 +Block 0023 [ 40]: 2577e967f9fda293 +Block 0023 [ 41]: 1389c8f92c268e06 +Block 0023 [ 42]: 5a35ff4199747016 +Block 0023 [ 43]: fc650deae93a7c1b +Block 0023 [ 44]: fcb7794763bf77db +Block 0023 [ 45]: e362533b122524f5 +Block 0023 [ 46]: 1ba9b1e64359b4f5 +Block 0023 [ 47]: 08b09e872e6e1dd9 +Block 0023 [ 48]: 4ee537f0830845cd +Block 0023 [ 49]: 5ce572b3f8832e90 +Block 0023 [ 50]: 1b725b41ecf6d0ad +Block 0023 [ 51]: aa647b27f5cc9c5b +Block 0023 [ 52]: 00a6b24dd3f367b6 +Block 0023 [ 53]: 7f68dbe2f046d0f9 +Block 0023 [ 54]: ce097da84f7194b7 +Block 0023 [ 55]: 58fea62c150d7901 +Block 0023 [ 56]: ef9a9a7cf0c9191a +Block 0023 [ 57]: 6fe8d189a04a105c +Block 0023 [ 58]: 420faab0945c162c +Block 0023 [ 59]: dfd6be3b647140af +Block 0023 [ 60]: dfb409380364365d +Block 0023 [ 61]: 36eeda04b5cfdee0 +Block 0023 [ 62]: 6326723b899f1ef1 +Block 0023 [ 63]: 6531688ea7ab1170 +Block 0023 [ 64]: 299fa844bd5b04de +Block 0023 [ 65]: 4a87c4d2dce5e89e +Block 0023 [ 66]: 8d85a67f07ba1ede +Block 0023 [ 67]: 30b6847d1025c641 +Block 0023 [ 68]: 4726562dd7a8d04e +Block 0023 [ 69]: 9c8829a7b56bf050 +Block 0023 [ 70]: 3f33335a10a6daa8 +Block 0023 [ 71]: ccb3b31d4131d58f +Block 0023 [ 72]: b715752217405e47 +Block 0023 [ 73]: 564adbc6c513bc0f +Block 0023 [ 74]: 5c755447a6582099 +Block 0023 [ 75]: 50987d33c2e8f403 +Block 0023 [ 76]: d370b629305d847f +Block 0023 [ 77]: 46c6ec2f63d39994 +Block 0023 [ 78]: e9e849a1a94b1417 +Block 0023 [ 79]: d5f7a7f69abc45d4 +Block 0023 [ 80]: 720953293ba3a6dc +Block 0023 [ 81]: 2e5a953a29ddae35 +Block 0023 [ 82]: 9389fb9b09621872 +Block 0023 [ 83]: 73fade635fe140b6 +Block 0023 [ 84]: 38bf4c3bce807b6a +Block 0023 [ 85]: 1ace5da62d54f17a +Block 0023 [ 86]: 1c80837442bb0b1f +Block 0023 [ 87]: 881ae1746297229b +Block 0023 [ 88]: f51d9dda7b6c623f +Block 0023 [ 89]: dec061d609ecb1da +Block 0023 [ 90]: 8bf9510cca4c204d +Block 0023 [ 91]: de8a16e97b4584f1 +Block 0023 [ 92]: d206442c8ac16e38 +Block 0023 [ 93]: c3c90cd9562e7732 +Block 0023 [ 94]: 01730c66e6a1026a +Block 0023 [ 95]: 929fffc02cfdbc95 +Block 0023 [ 96]: 1cc815084b846e70 +Block 0023 [ 97]: 4c93d56a06565b60 +Block 0023 [ 98]: 2224244f540ba2fb +Block 0023 [ 99]: 83560821e355eeaa +Block 0023 [100]: db0be31347b60ecc +Block 0023 [101]: cd1f9f68387bd646 +Block 0023 [102]: 86d24034913edc25 +Block 0023 [103]: f905de2d30889d35 +Block 0023 [104]: 87535a21323953b9 +Block 0023 [105]: 2366a1cb51f43ee7 +Block 0023 [106]: 704cc3e5fd36f427 +Block 0023 [107]: 7d59c38fdef90ccb +Block 0023 [108]: d68a4a721796fa30 +Block 0023 [109]: d333366213fa9686 +Block 0023 [110]: 5bdc922f53fc6ef9 +Block 0023 [111]: 07b301b7fece3102 +Block 0023 [112]: 90cc5ec9d6cae00f +Block 0023 [113]: 3c33243c58de4a81 +Block 0023 [114]: 69914a6327b42592 +Block 0023 [115]: aedb75ec336b0c83 +Block 0023 [116]: 0377d738f40b3b8a +Block 0023 [117]: a3b9cbf2d4c2d6bd +Block 0023 [118]: 8509d769b336d9a3 +Block 0023 [119]: f2ea16490855230e +Block 0023 [120]: 8a15faf44b0b37ed +Block 0023 [121]: d617ff1c420f1c63 +Block 0023 [122]: 543394d6ea952471 +Block 0023 [123]: 35409c8245a7c8dd +Block 0023 [124]: dd130b326c99b2f8 +Block 0023 [125]: 7b7d105a04932402 +Block 0023 [126]: ca6d2056cb49b043 +Block 0023 [127]: d1f6d11b9290e397 +Block 0024 [ 0]: e3b8be3b800bcac1 +Block 0024 [ 1]: 93592dd02f819503 +Block 0024 [ 2]: ec4973a83723ef80 +Block 0024 [ 3]: 477e80d3b8f24a0a +Block 0024 [ 4]: 34e1f886f9c40f36 +Block 0024 [ 5]: 6e4119b94c6aa498 +Block 0024 [ 6]: fd2c62ab5381b13b +Block 0024 [ 7]: ee123c46d80957ee +Block 0024 [ 8]: ed542b69841c3346 +Block 0024 [ 9]: cdebc6e16a3882c1 +Block 0024 [ 10]: a7306cb070193039 +Block 0024 [ 11]: ae674fdc1d730617 +Block 0024 [ 12]: 9ee6543905547df4 +Block 0024 [ 13]: cc0536cbba16bb9c +Block 0024 [ 14]: ac44f47060312756 +Block 0024 [ 15]: e48e593dce67bce0 +Block 0024 [ 16]: f5aff4db2366797c +Block 0024 [ 17]: eca2b65e0cd03f09 +Block 0024 [ 18]: a3fd2e7240d51d98 +Block 0024 [ 19]: bfbf1d554e80c436 +Block 0024 [ 20]: 2890165f5f8cbedc +Block 0024 [ 21]: b0637c303f1d1ac1 +Block 0024 [ 22]: dc15a716f869bee5 +Block 0024 [ 23]: c34be8e074b39c6f +Block 0024 [ 24]: 967f16eda9ee64fd +Block 0024 [ 25]: 14107a44211f4d4d +Block 0024 [ 26]: 18b413ce6910aac4 +Block 0024 [ 27]: 5604192a5b6eeecc +Block 0024 [ 28]: 6db3a8bf11a19c45 +Block 0024 [ 29]: 9be52589cd36b4f5 +Block 0024 [ 30]: 4ef35179c27e46f8 +Block 0024 [ 31]: 382e57343eb30442 +Block 0024 [ 32]: 7f9e80c90761e3c0 +Block 0024 [ 33]: f749d138d96e88e4 +Block 0024 [ 34]: d9f68571c4dd5c13 +Block 0024 [ 35]: 43939a9e9e5f7c88 +Block 0024 [ 36]: 1c29e903415c8bf9 +Block 0024 [ 37]: d89a7c5852bc1e1c +Block 0024 [ 38]: ae6caf5be4a605bf +Block 0024 [ 39]: 2d782b9acaf95fb3 +Block 0024 [ 40]: 797f01c34397e617 +Block 0024 [ 41]: 5fd2da21bf24713a +Block 0024 [ 42]: 5526c76a245b34c4 +Block 0024 [ 43]: bfc80ada0d455aa0 +Block 0024 [ 44]: 1793f4cd9103f76a +Block 0024 [ 45]: e8de97a775e1d0cd +Block 0024 [ 46]: df8a6cfa31192f7a +Block 0024 [ 47]: 640f146840f26415 +Block 0024 [ 48]: 4cbd3dd98219dcfe +Block 0024 [ 49]: 6ce1c9f112bec860 +Block 0024 [ 50]: ffbbc563a583b1d3 +Block 0024 [ 51]: 76c086ebfefb2b79 +Block 0024 [ 52]: 6758f6e588490093 +Block 0024 [ 53]: c5f82f0a9dd56b63 +Block 0024 [ 54]: 7530873426b32f4c +Block 0024 [ 55]: 22557a08fccfd756 +Block 0024 [ 56]: 585b5b8b59796d0a +Block 0024 [ 57]: b5ec994837d36005 +Block 0024 [ 58]: bed35897ce06d10a +Block 0024 [ 59]: 82e686ebd526b229 +Block 0024 [ 60]: d83388e341f49a52 +Block 0024 [ 61]: f44ff88f95a27c3d +Block 0024 [ 62]: 988230b216a9823e +Block 0024 [ 63]: 656518e36a1ece8a +Block 0024 [ 64]: 7942fe98ed267352 +Block 0024 [ 65]: 648ede8d1e5e7bda +Block 0024 [ 66]: 76ea13fb53c8b584 +Block 0024 [ 67]: 56387f677a110819 +Block 0024 [ 68]: 16ed666f4094cb45 +Block 0024 [ 69]: fe5a06c15b8aeec4 +Block 0024 [ 70]: 78773a1540aaa4e3 +Block 0024 [ 71]: f908d3a514f12aea +Block 0024 [ 72]: 7947a0a5e3de5695 +Block 0024 [ 73]: 6bf577dffd32e561 +Block 0024 [ 74]: ace24c27c6a31b3d +Block 0024 [ 75]: a98b813be7cc842d +Block 0024 [ 76]: ca9114e79885df7f +Block 0024 [ 77]: 05fa517bd6dd57a6 +Block 0024 [ 78]: b0ea1c66a2e97b8e +Block 0024 [ 79]: 17c7fc5ce92bcb6d +Block 0024 [ 80]: 7e9b1dc6ccbfc17e +Block 0024 [ 81]: 25c3624824af53ed +Block 0024 [ 82]: c1c82c49130c3477 +Block 0024 [ 83]: e1ecceb5ababf159 +Block 0024 [ 84]: 976f387136d4f7ce +Block 0024 [ 85]: 8b9999d864a74c63 +Block 0024 [ 86]: 215d99ed05fff16e +Block 0024 [ 87]: f4a5452133dd542f +Block 0024 [ 88]: 0da71140658ff706 +Block 0024 [ 89]: 47da481f4574299d +Block 0024 [ 90]: 63299064bb401eb2 +Block 0024 [ 91]: af13d9a8d97b37bb +Block 0024 [ 92]: 08359e9b80b0118c +Block 0024 [ 93]: 049e21cfaef9cbe7 +Block 0024 [ 94]: c12cb6dcf3e8de01 +Block 0024 [ 95]: 8bf57b075242998f +Block 0024 [ 96]: 88323e969cdaa1f2 +Block 0024 [ 97]: cdecc8f395cfadec +Block 0024 [ 98]: 03b15b330a376778 +Block 0024 [ 99]: 0099436d96a2cdef +Block 0024 [100]: b3a65c86f37ac4dd +Block 0024 [101]: 4949c9b0289557c8 +Block 0024 [102]: 8929e420dc60f1f0 +Block 0024 [103]: 7a8237af7d558536 +Block 0024 [104]: b2a234a509915dbf +Block 0024 [105]: 964803f63860414f +Block 0024 [106]: af7b6f0ab6aea78f +Block 0024 [107]: 87b040d11ef2b48e +Block 0024 [108]: 9a8d4e6c6209fee7 +Block 0024 [109]: 31363e0694cbe147 +Block 0024 [110]: a01753b413c3432b +Block 0024 [111]: e5ad598e657a3527 +Block 0024 [112]: 2bfbe1bccad1592b +Block 0024 [113]: eab4792c6dfcdb98 +Block 0024 [114]: 5bf3e2632baf57a0 +Block 0024 [115]: 24c47826d1b60b11 +Block 0024 [116]: 0fa3922337708149 +Block 0024 [117]: 23878fd8b3ee440a +Block 0024 [118]: e0da3fbaeb9b754f +Block 0024 [119]: 4c5845d295c8e130 +Block 0024 [120]: f9842cfb0519a77a +Block 0024 [121]: e78c8fc24df07468 +Block 0024 [122]: 22001bb20a856f72 +Block 0024 [123]: 21531c03ff79630c +Block 0024 [124]: e7c926c13079eb3d +Block 0024 [125]: 6ad556444199ea80 +Block 0024 [126]: 64da7b572b36f7ba +Block 0024 [127]: 799b25b56cf24c84 +Block 0025 [ 0]: a8ef4430ce39f78a +Block 0025 [ 1]: 6fa7bb074ca2d4c7 +Block 0025 [ 2]: c4328dc4903e2627 +Block 0025 [ 3]: 847f8a36c562ff2e +Block 0025 [ 4]: 8913562d5c4b41e0 +Block 0025 [ 5]: 1b8e8af880881f23 +Block 0025 [ 6]: e91da3d1a6f519eb +Block 0025 [ 7]: 8fae99cad26c52ed +Block 0025 [ 8]: afda62e3aabf1e6c +Block 0025 [ 9]: e7cfd7eb417b3c8b +Block 0025 [ 10]: ecc1f7be89deb6d3 +Block 0025 [ 11]: b9052fd2dee04394 +Block 0025 [ 12]: 097fc19d990754ba +Block 0025 [ 13]: 536dd6266bf8815d +Block 0025 [ 14]: 747d495d55abc42f +Block 0025 [ 15]: a2e5f741c0b61771 +Block 0025 [ 16]: b80db43d2e40ae7c +Block 0025 [ 17]: 17305d07336bd733 +Block 0025 [ 18]: 6b529470ae8322fa +Block 0025 [ 19]: 0499d8272f0b85df +Block 0025 [ 20]: 19d9e45c2cb59cb9 +Block 0025 [ 21]: 4bf3107858c7e5b4 +Block 0025 [ 22]: ae33fde859a9b807 +Block 0025 [ 23]: 1c2dc7ecfb7ac28e +Block 0025 [ 24]: f21b5a8f3d7a3939 +Block 0025 [ 25]: 4a4bf57af3ce07cc +Block 0025 [ 26]: 95095f2c45d29962 +Block 0025 [ 27]: eee227d0f71de589 +Block 0025 [ 28]: 4ed1dc11850b66f1 +Block 0025 [ 29]: 3b8e9ddf6115245e +Block 0025 [ 30]: 1cbce81b5582ce8b +Block 0025 [ 31]: c30c4b8efdac0046 +Block 0025 [ 32]: 340982707f9dff0d +Block 0025 [ 33]: d15a167fe9ce9b08 +Block 0025 [ 34]: bd66426cae072cff +Block 0025 [ 35]: 11045f18ef7e373e +Block 0025 [ 36]: a1c1d0dcb20dfb02 +Block 0025 [ 37]: bb2af69b82d672b0 +Block 0025 [ 38]: e9d38c0d0bb65923 +Block 0025 [ 39]: 74d87059aaeb21f5 +Block 0025 [ 40]: 46089bb77c69d9e0 +Block 0025 [ 41]: af2dc5813fc7be50 +Block 0025 [ 42]: b505c464526df042 +Block 0025 [ 43]: 5ebc52a55f0715b3 +Block 0025 [ 44]: e63b00f5cc681706 +Block 0025 [ 45]: 41200c17d4c5265b +Block 0025 [ 46]: 0571bb4eca0aa328 +Block 0025 [ 47]: d2c5967dee2efc65 +Block 0025 [ 48]: 386bf2ba93237452 +Block 0025 [ 49]: d9b495ea3d71c7ed +Block 0025 [ 50]: 6e9bcaac915ff914 +Block 0025 [ 51]: 61dcf57024b361e2 +Block 0025 [ 52]: dd1e6418cdfc55a1 +Block 0025 [ 53]: 89d6563948e8028a +Block 0025 [ 54]: 673410cb2802bb3c +Block 0025 [ 55]: fd72e7854b71fd95 +Block 0025 [ 56]: 9a62e33b6f8a2a6a +Block 0025 [ 57]: ea483d20be77a4d8 +Block 0025 [ 58]: beda36420dfed7d0 +Block 0025 [ 59]: ef739e227fdf5046 +Block 0025 [ 60]: 5f2ebac6da228070 +Block 0025 [ 61]: 1bd1dffbf8beeb5c +Block 0025 [ 62]: 2f82cba84b8c0705 +Block 0025 [ 63]: f0957223c4607115 +Block 0025 [ 64]: 9f205d55d2aa9dd4 +Block 0025 [ 65]: b35017d46c64b5ec +Block 0025 [ 66]: d1ebf1a5e25de936 +Block 0025 [ 67]: d9c3c72742de426f +Block 0025 [ 68]: 9a77f8612a8a9f7a +Block 0025 [ 69]: 22bbf7b831db85c3 +Block 0025 [ 70]: 915062521a86f132 +Block 0025 [ 71]: 66c1475a3005072a +Block 0025 [ 72]: 00876915bef9f5e8 +Block 0025 [ 73]: 49ec0d879061e52d +Block 0025 [ 74]: f1a9210a92a1ccf9 +Block 0025 [ 75]: a7a3aabec9a4c3fa +Block 0025 [ 76]: e5e1c5b6d2c89a59 +Block 0025 [ 77]: ecc3fffe9377b75c +Block 0025 [ 78]: e15d4dd0f77cae1a +Block 0025 [ 79]: 3ef1b0c90ea4140b +Block 0025 [ 80]: e7a1376406821cee +Block 0025 [ 81]: 3b9144b3a581e276 +Block 0025 [ 82]: cd78379531214835 +Block 0025 [ 83]: 18d8e611f3f4ca46 +Block 0025 [ 84]: efd481c945c81d76 +Block 0025 [ 85]: a0bec8b6bb02a64d +Block 0025 [ 86]: 8ed05673c1118581 +Block 0025 [ 87]: 24f2beac33e9b6f8 +Block 0025 [ 88]: 5b2869a7bbdea0b8 +Block 0025 [ 89]: 5691e816f20c7ff0 +Block 0025 [ 90]: 09b8f7c1c58bf06c +Block 0025 [ 91]: c22a0bebc36d1fe9 +Block 0025 [ 92]: 4a0f9fc41555f088 +Block 0025 [ 93]: e3a799377e1b4777 +Block 0025 [ 94]: 6c3968386d5bce8c +Block 0025 [ 95]: 5ff3108fab500908 +Block 0025 [ 96]: da7854699b50de6c +Block 0025 [ 97]: 0295929d4ff59ac2 +Block 0025 [ 98]: d7b85abf5f2f4db9 +Block 0025 [ 99]: f2f75a4a63347bc5 +Block 0025 [100]: 6644ecc4740d59e5 +Block 0025 [101]: 0700c3f8b34de41f +Block 0025 [102]: af122995d2173d4d +Block 0025 [103]: cabc6eea684c9dbf +Block 0025 [104]: 20fd25dcd332dac2 +Block 0025 [105]: a9a2c7f99cf8cab9 +Block 0025 [106]: 864c959115f406cf +Block 0025 [107]: bf96bf5323e7e5b0 +Block 0025 [108]: 01cd62dc9bb2b117 +Block 0025 [109]: ec0ddf4f05b7fe6f +Block 0025 [110]: 680b3f5dcd452651 +Block 0025 [111]: 1faa09f3557444f3 +Block 0025 [112]: 98ec5e21f49b8e57 +Block 0025 [113]: daf8ee24b8828f71 +Block 0025 [114]: 91d33ed62cd107f8 +Block 0025 [115]: 89413d1bca853d5f +Block 0025 [116]: 7fe807f969f415da +Block 0025 [117]: 67ff5407c0860624 +Block 0025 [118]: 603854576ed4f781 +Block 0025 [119]: 084738ed1f18ed62 +Block 0025 [120]: 4cdb0fae06091770 +Block 0025 [121]: b13f8bc9797ddfeb +Block 0025 [122]: 648ad341f0dca94e +Block 0025 [123]: 025348dce7ae008f +Block 0025 [124]: 048e0a463a7b8a32 +Block 0025 [125]: e1b2eeac660e780d +Block 0025 [126]: 29bac16444505a88 +Block 0025 [127]: 9cad798306f54409 +Block 0026 [ 0]: a67f2049ad6c8451 +Block 0026 [ 1]: 6e6ca1cdc41485a8 +Block 0026 [ 2]: f2ffabecd30ed9d4 +Block 0026 [ 3]: 2263bf9f96df54e5 +Block 0026 [ 4]: 5386c833d7affc6a +Block 0026 [ 5]: 9f2819f0b7f5da6b +Block 0026 [ 6]: 65221d900ac47a45 +Block 0026 [ 7]: c7a3388a192158c1 +Block 0026 [ 8]: ce3be92338e06123 +Block 0026 [ 9]: 9bc7d6a02266ff38 +Block 0026 [ 10]: a824f917c04f5b96 +Block 0026 [ 11]: ec600cae3f2419f8 +Block 0026 [ 12]: 5785857a85f7e6be +Block 0026 [ 13]: 2e6cf6e1adede0fb +Block 0026 [ 14]: 16947d46c61d02ec +Block 0026 [ 15]: ffb48b54c6461849 +Block 0026 [ 16]: 4e659132540c5954 +Block 0026 [ 17]: 39cd765cee548ebe +Block 0026 [ 18]: 65e2e928a5cbd062 +Block 0026 [ 19]: 61873257661cf542 +Block 0026 [ 20]: d3aff3680f7d74b4 +Block 0026 [ 21]: dd25b1e683c70efb +Block 0026 [ 22]: 918025d8585aaee4 +Block 0026 [ 23]: 5040001fcf34ed39 +Block 0026 [ 24]: 74156aeebd1d3057 +Block 0026 [ 25]: c4eb8075341fb9d7 +Block 0026 [ 26]: d4ae888603d85575 +Block 0026 [ 27]: 824c2294af9b2e43 +Block 0026 [ 28]: d40db17dee052e79 +Block 0026 [ 29]: c353b38b05fd93aa +Block 0026 [ 30]: fedc31fea04b7b57 +Block 0026 [ 31]: 7c62e359b5b346d5 +Block 0026 [ 32]: 529de169b8a883c2 +Block 0026 [ 33]: 3baa40cee0aafec8 +Block 0026 [ 34]: 39ea5c0da6ba803d +Block 0026 [ 35]: bb3600ed674e82db +Block 0026 [ 36]: e2cf7d3add431cd5 +Block 0026 [ 37]: 9919ac737f8e7bc1 +Block 0026 [ 38]: b1d621265207cd1b +Block 0026 [ 39]: 4124e55329618316 +Block 0026 [ 40]: 61ac39e893aa0b4a +Block 0026 [ 41]: b8828b7b916fcfd7 +Block 0026 [ 42]: 7717ca4b91f592d2 +Block 0026 [ 43]: b2d649a81b6b7715 +Block 0026 [ 44]: 94032e1f27dae77f +Block 0026 [ 45]: 91fc6ccebf3f3727 +Block 0026 [ 46]: 17cc1d27fd35298d +Block 0026 [ 47]: 484c55fc986929c6 +Block 0026 [ 48]: 262a103a08656541 +Block 0026 [ 49]: 9e528fb6c569622f +Block 0026 [ 50]: 85113abbb2977739 +Block 0026 [ 51]: c45cce441cad58db +Block 0026 [ 52]: e66de3dec4f1f53a +Block 0026 [ 53]: 6fe886047cac3746 +Block 0026 [ 54]: 37b647878b1d9d70 +Block 0026 [ 55]: 840d12b0ff087ec5 +Block 0026 [ 56]: 680aa2b9b0de658b +Block 0026 [ 57]: 35bdc3fe5b7c8413 +Block 0026 [ 58]: bba849ea8dd68a2b +Block 0026 [ 59]: e50508fec44716dc +Block 0026 [ 60]: e8218181df949251 +Block 0026 [ 61]: 76e583bfa8271ce1 +Block 0026 [ 62]: 093db4a24e8cf97f +Block 0026 [ 63]: a3198d72deba4ab1 +Block 0026 [ 64]: 8e70151c79a58a09 +Block 0026 [ 65]: 30b18f4b2a4ecc94 +Block 0026 [ 66]: efa939e486237d53 +Block 0026 [ 67]: 5a99de81200bd461 +Block 0026 [ 68]: 97c93faec22773f4 +Block 0026 [ 69]: 50cd83b3d81daef6 +Block 0026 [ 70]: a57f1cbc408a1472 +Block 0026 [ 71]: 601a83fbac217aa0 +Block 0026 [ 72]: ba61684f998db8ed +Block 0026 [ 73]: abf945da6e04b78a +Block 0026 [ 74]: 3f7f6a30a912e6fc +Block 0026 [ 75]: b5806b3204395493 +Block 0026 [ 76]: 4fbc9dc04d820d79 +Block 0026 [ 77]: ac843e3617426127 +Block 0026 [ 78]: c4a23662780b450f +Block 0026 [ 79]: b3add9936ecd3efa +Block 0026 [ 80]: 0e7adbdb1e97716f +Block 0026 [ 81]: 4855a05753a3d609 +Block 0026 [ 82]: 4a79a50f60147383 +Block 0026 [ 83]: 1a7bb1d968713322 +Block 0026 [ 84]: 560185cf7cea9af8 +Block 0026 [ 85]: 8090ae23b839fa7a +Block 0026 [ 86]: f0ef32dd60b80f4a +Block 0026 [ 87]: 75666acf1191bfac +Block 0026 [ 88]: 89122f4a6be676ed +Block 0026 [ 89]: 51c9082f91e7c815 +Block 0026 [ 90]: f57321fbf06bb01b +Block 0026 [ 91]: bf6b35695e671824 +Block 0026 [ 92]: 810270fa31267c02 +Block 0026 [ 93]: bb6d14fa78db2fd6 +Block 0026 [ 94]: 8d77c423bf297093 +Block 0026 [ 95]: f47f40b94b651b87 +Block 0026 [ 96]: ffdc7270f5ea0a0a +Block 0026 [ 97]: 110c0bed7cf02935 +Block 0026 [ 98]: 6e72a6f7e64ec1ff +Block 0026 [ 99]: 510f409d179fc3eb +Block 0026 [100]: b131bf1bf65cce12 +Block 0026 [101]: bb21fb13b27c3bd5 +Block 0026 [102]: 41148e2468bc2ea4 +Block 0026 [103]: bec352301ce4ce35 +Block 0026 [104]: d1d6655ab3dc54d1 +Block 0026 [105]: 03ebde5d7509564a +Block 0026 [106]: 8736b53e50d9254e +Block 0026 [107]: eef07ba85662fac2 +Block 0026 [108]: 866367405df3c14e +Block 0026 [109]: f4c6921e10ae40d1 +Block 0026 [110]: f84d745575f4a722 +Block 0026 [111]: 6139c48c50a9dc75 +Block 0026 [112]: 0034350a8573a8a8 +Block 0026 [113]: bd742a2290d519ad +Block 0026 [114]: 8fbf243347c92440 +Block 0026 [115]: cb51c42b54feeb1d +Block 0026 [116]: 360d009cf96e8411 +Block 0026 [117]: 4f4c61ebd49df995 +Block 0026 [118]: 0df6e047c17cb02d +Block 0026 [119]: 1875132489e84ff8 +Block 0026 [120]: 9db14fbd90640f6c +Block 0026 [121]: 4205a87bd2e27264 +Block 0026 [122]: 97da6c37e0d0f086 +Block 0026 [123]: a40bb2955b338f38 +Block 0026 [124]: ac3b50aa28c42530 +Block 0026 [125]: fc3b33ed20b81ce7 +Block 0026 [126]: 0915c6d398e25625 +Block 0026 [127]: 2e2c95a63d272437 +Block 0027 [ 0]: a94b04457a7eea5b +Block 0027 [ 1]: 3b934d4b2c4b05c1 +Block 0027 [ 2]: d36de4f08ea8241f +Block 0027 [ 3]: d8c5da183e55c800 +Block 0027 [ 4]: 798d0be96ebe4eb0 +Block 0027 [ 5]: 95b7010a3bc7d10f +Block 0027 [ 6]: 429979b7a221f329 +Block 0027 [ 7]: 2acf807b7fe97dad +Block 0027 [ 8]: a7b7429c53e9c732 +Block 0027 [ 9]: 207b679886cf1607 +Block 0027 [ 10]: 35d80c2f1ecbc709 +Block 0027 [ 11]: 7a6743313b489e3e +Block 0027 [ 12]: 450bca7213e37f0d +Block 0027 [ 13]: d204c3e3ca441327 +Block 0027 [ 14]: f0adec4a62fa0918 +Block 0027 [ 15]: 918063531c8dbfa3 +Block 0027 [ 16]: 6e3a5609838a4ba7 +Block 0027 [ 17]: 84b10132be6f1f21 +Block 0027 [ 18]: 1d7a65cf768de949 +Block 0027 [ 19]: 555bc5f7c86496e3 +Block 0027 [ 20]: b49806057b337c6a +Block 0027 [ 21]: 7568eeaada8f8866 +Block 0027 [ 22]: 2717ed3bc8dde632 +Block 0027 [ 23]: 0b277febfd999965 +Block 0027 [ 24]: 12c2942997f2b48b +Block 0027 [ 25]: bcc4355219c0f24d +Block 0027 [ 26]: e7be1d8cb552523b +Block 0027 [ 27]: 9175509980ac3f08 +Block 0027 [ 28]: 6e1453b6da39bbbb +Block 0027 [ 29]: a37b17231c4f1320 +Block 0027 [ 30]: a0a27e1f5bbb568b +Block 0027 [ 31]: da16ebc183e301a8 +Block 0027 [ 32]: b3c5c67da682c941 +Block 0027 [ 33]: 37dcdbd103c514d6 +Block 0027 [ 34]: 16ff2d29bfc64bfa +Block 0027 [ 35]: 4096c799e802154c +Block 0027 [ 36]: 59904ba66cc60d64 +Block 0027 [ 37]: 15a424885273edb0 +Block 0027 [ 38]: 1c3234b12ca31ca9 +Block 0027 [ 39]: bd6504e7e8cb0543 +Block 0027 [ 40]: 97d013f5f12883d6 +Block 0027 [ 41]: 206948310527b357 +Block 0027 [ 42]: aa674b50be674618 +Block 0027 [ 43]: f0a5f596fc0e3232 +Block 0027 [ 44]: 920409279bc2fc9c +Block 0027 [ 45]: 2ccf474d09d9aa0e +Block 0027 [ 46]: 6a8c7bdb7eb64efb +Block 0027 [ 47]: a756b71f41c37f8b +Block 0027 [ 48]: a5117f53be324b6b +Block 0027 [ 49]: 4171a67afcd26d32 +Block 0027 [ 50]: 21a3a9aaad777353 +Block 0027 [ 51]: 3755a858ffa57c1d +Block 0027 [ 52]: afc42a6207e4b2dd +Block 0027 [ 53]: aff8522b5f5d74a5 +Block 0027 [ 54]: ba69a2ef4f409d0d +Block 0027 [ 55]: b2b0b92ab9f12a08 +Block 0027 [ 56]: 21eb93c595416b78 +Block 0027 [ 57]: a3432a64639e980e +Block 0027 [ 58]: 8aa4d52c1d5aab1c +Block 0027 [ 59]: aab10fb875b1e745 +Block 0027 [ 60]: 187b116769a3ec3f +Block 0027 [ 61]: bdc6ce91397361cb +Block 0027 [ 62]: 2af6bcc7c50e4dd6 +Block 0027 [ 63]: baa220accd7571f4 +Block 0027 [ 64]: 67bf2a70cfa75599 +Block 0027 [ 65]: 12c82e4f98bf4d0b +Block 0027 [ 66]: af71e967c1cc8df4 +Block 0027 [ 67]: f4206f65d9b7c473 +Block 0027 [ 68]: 8bc2092c48b31cde +Block 0027 [ 69]: e65ddd646bb2c19d +Block 0027 [ 70]: 50103a958fb49166 +Block 0027 [ 71]: 83b31b086cae24e6 +Block 0027 [ 72]: 5473c5ef931bfc84 +Block 0027 [ 73]: 1792f55944917f79 +Block 0027 [ 74]: b29afd1445e3f3da +Block 0027 [ 75]: 71e5ed744d9305d0 +Block 0027 [ 76]: 531d8b48dac7c1b5 +Block 0027 [ 77]: 6182e94a6d8e8c99 +Block 0027 [ 78]: 8ec7ccbcf3425332 +Block 0027 [ 79]: 8a8b0b42cdb32c0b +Block 0027 [ 80]: c954b01ae022a01b +Block 0027 [ 81]: ebb1bcd82007bb85 +Block 0027 [ 82]: 73258bca7db6c40b +Block 0027 [ 83]: 0e9b383bc02dc5fb +Block 0027 [ 84]: 9e59c6692cfec4c1 +Block 0027 [ 85]: e290fea01fd49775 +Block 0027 [ 86]: 923e9787df7984d7 +Block 0027 [ 87]: d1ea99210d949bc6 +Block 0027 [ 88]: 2c50effbf9b56f5e +Block 0027 [ 89]: 6e587a90ffdd68e1 +Block 0027 [ 90]: 87343959fce072eb +Block 0027 [ 91]: 11f3166951d1ca97 +Block 0027 [ 92]: 77c0e15bce984be2 +Block 0027 [ 93]: 1bc4e230071347d9 +Block 0027 [ 94]: 02c821b44f0e8ff5 +Block 0027 [ 95]: 332b6548f6127d3b +Block 0027 [ 96]: f4385541e6afbce1 +Block 0027 [ 97]: f72f5977b5c5c6ed +Block 0027 [ 98]: 2932386da331a141 +Block 0027 [ 99]: 8bef50405d899e47 +Block 0027 [100]: 497f6baa584fa6f9 +Block 0027 [101]: 540629cf431edb97 +Block 0027 [102]: 86c980507916f687 +Block 0027 [103]: 74449f7ba5e33318 +Block 0027 [104]: 8f97362cd57e0c7e +Block 0027 [105]: a960d461bb2d1840 +Block 0027 [106]: 9f4b252316d9eb51 +Block 0027 [107]: 7c3623df2d051b80 +Block 0027 [108]: 195db846daca6692 +Block 0027 [109]: 54d546f2b2f6d64f +Block 0027 [110]: 5a59d33f102ea788 +Block 0027 [111]: 8464766e62720d0f +Block 0027 [112]: 13ca8b80ec64e90a +Block 0027 [113]: 6d0463cb48d4c035 +Block 0027 [114]: 7341120a83334b45 +Block 0027 [115]: 3124dd6543338087 +Block 0027 [116]: e5b444665d7e7853 +Block 0027 [117]: 7ff3f1e5c61bc6f7 +Block 0027 [118]: 139e7af02f838f97 +Block 0027 [119]: 11c5d0670f45901f +Block 0027 [120]: 0438e6b6dcc28c34 +Block 0027 [121]: 3d55b635792ea59a +Block 0027 [122]: 9c2161a0ae2eaa67 +Block 0027 [123]: 27b1456aa822bfdd +Block 0027 [124]: 235c3e9fc5839c4d +Block 0027 [125]: 4994a10b355fc603 +Block 0027 [126]: 9dab69bbda9885dc +Block 0027 [127]: 85868e2f304840ac +Block 0028 [ 0]: ff442bbaec0ee8f2 +Block 0028 [ 1]: 397f0ac19369cbb3 +Block 0028 [ 2]: 5dd4e0f3c854a4c2 +Block 0028 [ 3]: c0e9fb62003e329a +Block 0028 [ 4]: 3966e8fa89276742 +Block 0028 [ 5]: 1dfaa18a331d0a14 +Block 0028 [ 6]: e60263a328c6b785 +Block 0028 [ 7]: 0ccde2de16d1e234 +Block 0028 [ 8]: fa1212c9101ac939 +Block 0028 [ 9]: d312a0ca719acb8f +Block 0028 [ 10]: d505268bcce72092 +Block 0028 [ 11]: bef86b8938654712 +Block 0028 [ 12]: f9390b6b536a6e28 +Block 0028 [ 13]: 73203397a11a9ddd +Block 0028 [ 14]: 10714c45564394d8 +Block 0028 [ 15]: c48a3f6f54b5c280 +Block 0028 [ 16]: 9bf38e51f6bb8d8b +Block 0028 [ 17]: 40b6c835892e9da5 +Block 0028 [ 18]: 40a35a05db774cf5 +Block 0028 [ 19]: f583ac8c5f9a8da0 +Block 0028 [ 20]: 210fbd1e5f784271 +Block 0028 [ 21]: 281c7be77ab1715a +Block 0028 [ 22]: 4ecdc7b648a5f4a5 +Block 0028 [ 23]: 3ac0587b9fa149f2 +Block 0028 [ 24]: a83fd6762492a590 +Block 0028 [ 25]: 46276e3adefa023e +Block 0028 [ 26]: 3062f71a0b5b4db5 +Block 0028 [ 27]: 84677cc6dbdd3349 +Block 0028 [ 28]: 6a0193f318f262c2 +Block 0028 [ 29]: 85d971f7bd2ec8cd +Block 0028 [ 30]: 5e68bdf696e1caa5 +Block 0028 [ 31]: ab98223d0341c285 +Block 0028 [ 32]: cc1f28d587841e1d +Block 0028 [ 33]: 4ae6c7d78d556bbb +Block 0028 [ 34]: 1545d67077aaa97d +Block 0028 [ 35]: 6d57554ad0404144 +Block 0028 [ 36]: 3ffd7708b53f09ca +Block 0028 [ 37]: 752ac75ed9699a94 +Block 0028 [ 38]: 2b6f9e2bddd506a5 +Block 0028 [ 39]: 2e321132e9ee175e +Block 0028 [ 40]: 47e2496c8a2d1acb +Block 0028 [ 41]: 131f351bbb209db8 +Block 0028 [ 42]: bf2711d86386f027 +Block 0028 [ 43]: d9ab2f3fc427bd6c +Block 0028 [ 44]: 7395c8a0ec3bb0bf +Block 0028 [ 45]: 9b19f55f5a1d9d0b +Block 0028 [ 46]: 4c4e28b31fe9efb7 +Block 0028 [ 47]: 766aaaf6d8e58ccf +Block 0028 [ 48]: 93d602cc6df95547 +Block 0028 [ 49]: 7e7e2d6242c92532 +Block 0028 [ 50]: 2c7aa2e34ee337aa +Block 0028 [ 51]: 191e910507ff58b6 +Block 0028 [ 52]: acca633ff55014da +Block 0028 [ 53]: 616a8c612b51f84e +Block 0028 [ 54]: d99ac9561c46bb1e +Block 0028 [ 55]: afa50925b3566378 +Block 0028 [ 56]: ff89aecada6379ef +Block 0028 [ 57]: 391c1fb4b920d1c7 +Block 0028 [ 58]: 8747bfa2ff324d12 +Block 0028 [ 59]: 5d94c03b2f8cdec8 +Block 0028 [ 60]: 770a3a05a35e362a +Block 0028 [ 61]: 6cb772bc4ec41ab1 +Block 0028 [ 62]: 0f2fdc055326e8ff +Block 0028 [ 63]: 3a3b11af14ab1e63 +Block 0028 [ 64]: 129d79776bd33219 +Block 0028 [ 65]: b0506f0d0c919e36 +Block 0028 [ 66]: e7bd117a660adeb6 +Block 0028 [ 67]: d52239a183fb01aa +Block 0028 [ 68]: 95ac54ca7f4f6bc8 +Block 0028 [ 69]: 5939379f77d8b3ac +Block 0028 [ 70]: 9bb720708cf0f6d7 +Block 0028 [ 71]: 7f1d34ae76d402b3 +Block 0028 [ 72]: 6131f850ff18bade +Block 0028 [ 73]: 913ca32a0b48d34c +Block 0028 [ 74]: f34c46ff0482e064 +Block 0028 [ 75]: f155996fe258d6e3 +Block 0028 [ 76]: a49b7f75efc8d9e2 +Block 0028 [ 77]: 7e9214452d5ee55a +Block 0028 [ 78]: 4d85e8f92b2a44d5 +Block 0028 [ 79]: c67caf477cc36edd +Block 0028 [ 80]: 1a6567ad2f3daf1a +Block 0028 [ 81]: d77d2ca3f37ceebb +Block 0028 [ 82]: 6288ae549a89055b +Block 0028 [ 83]: 4a312a353b646a62 +Block 0028 [ 84]: cd5a4b9c1d058e51 +Block 0028 [ 85]: fba7578feeb5a716 +Block 0028 [ 86]: b088c6cf681457e5 +Block 0028 [ 87]: 0077380f016bda71 +Block 0028 [ 88]: 8020ddaf0bcebea8 +Block 0028 [ 89]: 9a2b154741d54daa +Block 0028 [ 90]: 1afaa7054fbe8d96 +Block 0028 [ 91]: 369d42bdf4fa66a3 +Block 0028 [ 92]: 65015d7c318f5744 +Block 0028 [ 93]: f05df78b62c00b95 +Block 0028 [ 94]: dc35b5addb87f3df +Block 0028 [ 95]: 71200e2738215b49 +Block 0028 [ 96]: 516f9ee82c4bffe0 +Block 0028 [ 97]: 786d6486ac6b32de +Block 0028 [ 98]: 3fb790dcf1083d03 +Block 0028 [ 99]: bc1d23cf4407874a +Block 0028 [100]: 5c571426ac41afe6 +Block 0028 [101]: fc65a8a0efe11ef7 +Block 0028 [102]: 3fbe1cd81cb6a3ff +Block 0028 [103]: 8ced051324b69348 +Block 0028 [104]: c30adc965eb97c7f +Block 0028 [105]: 95833707bd2b9d35 +Block 0028 [106]: ec607ffa194d628d +Block 0028 [107]: 82d8039297f79a59 +Block 0028 [108]: 9be590f65f2bfe7e +Block 0028 [109]: 6ea8bc541ef1a809 +Block 0028 [110]: 468e8a5028e309ea +Block 0028 [111]: 066d539b5cb3fc45 +Block 0028 [112]: b122605c2994f6a4 +Block 0028 [113]: e0b0a4293d357abe +Block 0028 [114]: c298743cb1546c15 +Block 0028 [115]: d12112a3bbba462e +Block 0028 [116]: 25f23407d14bf00b +Block 0028 [117]: fffa4e098bd9fca5 +Block 0028 [118]: 536c67c6b18b611a +Block 0028 [119]: dd4446f13b0cdefe +Block 0028 [120]: c35483e17e62402c +Block 0028 [121]: 2b376940537bd1f1 +Block 0028 [122]: 79f526535649257d +Block 0028 [123]: 07fab5dcdf990636 +Block 0028 [124]: d7cd70af1e091a6f +Block 0028 [125]: 1ce601ca8e8f6ff3 +Block 0028 [126]: 38660d0a553e5df2 +Block 0028 [127]: b785a3accdab6680 +Block 0029 [ 0]: 8faf4b0ab37bb4cd +Block 0029 [ 1]: 3d1c1f7d3ae8182f +Block 0029 [ 2]: df466b571761c0c9 +Block 0029 [ 3]: 2d07bc62e41c89d7 +Block 0029 [ 4]: a09dd4ea9e230e19 +Block 0029 [ 5]: 809522a586d0c419 +Block 0029 [ 6]: e680b196e8046fc5 +Block 0029 [ 7]: eaa13b4649e0c0cb +Block 0029 [ 8]: 2d3d06aa5b8edb28 +Block 0029 [ 9]: 7865ed89e33159be +Block 0029 [ 10]: 485224fbeea22d0f +Block 0029 [ 11]: a65a5f6540b240ca +Block 0029 [ 12]: 348125cd96e1f785 +Block 0029 [ 13]: aeeb91f724f6ec50 +Block 0029 [ 14]: 3f90ece311348fb9 +Block 0029 [ 15]: 0e46859f10cd1b23 +Block 0029 [ 16]: 3d8b6edd19045b53 +Block 0029 [ 17]: b6031066c4cba9da +Block 0029 [ 18]: 0dc8d49a7a957e8a +Block 0029 [ 19]: 6d1d8f8bbd92de25 +Block 0029 [ 20]: 853872816754a44d +Block 0029 [ 21]: d53c1cd854971f4d +Block 0029 [ 22]: d966f16ded474f1b +Block 0029 [ 23]: 45ce0b544d3e9b88 +Block 0029 [ 24]: 4c3a7aa58d405831 +Block 0029 [ 25]: 7e63d3e7065f17ae +Block 0029 [ 26]: 93372f660d53d0a7 +Block 0029 [ 27]: 4800a50d86bbe06d +Block 0029 [ 28]: 966a7de30936c0cc +Block 0029 [ 29]: 089a6729adb5db54 +Block 0029 [ 30]: 21f00018ba694b98 +Block 0029 [ 31]: c5c5612e86e9b676 +Block 0029 [ 32]: 30fda4daea44cdf0 +Block 0029 [ 33]: 884216b9e14f830f +Block 0029 [ 34]: f24d8260cb07fd49 +Block 0029 [ 35]: 0cc3a891ed3fd8ea +Block 0029 [ 36]: e02856a4a91db08f +Block 0029 [ 37]: ae2c54f2ccf5dc1b +Block 0029 [ 38]: 9e7ef199c3e37221 +Block 0029 [ 39]: e1cb74d4be169e03 +Block 0029 [ 40]: 51110481733e33eb +Block 0029 [ 41]: 64b33cc98342c30a +Block 0029 [ 42]: 50f64610177d09f6 +Block 0029 [ 43]: 49012867e90a48a3 +Block 0029 [ 44]: 55ea2c40bb9c7f20 +Block 0029 [ 45]: fa784ee9cbfb8d9f +Block 0029 [ 46]: bb1e86d607452f97 +Block 0029 [ 47]: da191adeae7a36c9 +Block 0029 [ 48]: c1f8675f0c312429 +Block 0029 [ 49]: 3b7517f906d8f8f3 +Block 0029 [ 50]: 71f698893dd93e57 +Block 0029 [ 51]: 239bab7f2539d70f +Block 0029 [ 52]: 3dbe941ce0653527 +Block 0029 [ 53]: 29938a8b81850f5c +Block 0029 [ 54]: bfb1c6cf4fce7c51 +Block 0029 [ 55]: b706d0ee9f81ad1e +Block 0029 [ 56]: 7d017ae67cc847d1 +Block 0029 [ 57]: 552b93624984511c +Block 0029 [ 58]: 867243a9d6d82053 +Block 0029 [ 59]: 456c49a67ef9036f +Block 0029 [ 60]: 0f6f4ca58cb23d3f +Block 0029 [ 61]: bd24cf3c5418ca87 +Block 0029 [ 62]: 7be8c1d1dc24f928 +Block 0029 [ 63]: 0ca043330b7e539e +Block 0029 [ 64]: b3ba1f6453f7bcd5 +Block 0029 [ 65]: ca549545a3d2ec8e +Block 0029 [ 66]: fcadea90e41cc1b8 +Block 0029 [ 67]: 602c84cfa6b20f66 +Block 0029 [ 68]: 5cdfbc4ae7c2c6b1 +Block 0029 [ 69]: 31f589f75d3749ef +Block 0029 [ 70]: 3e6e3d004ad60714 +Block 0029 [ 71]: 2dae53f27b8158ef +Block 0029 [ 72]: fd1e3b5a70d52eae +Block 0029 [ 73]: 6371016489f99170 +Block 0029 [ 74]: a6b8c488806d37c6 +Block 0029 [ 75]: 8831329cde00a7a7 +Block 0029 [ 76]: b36df29447c12794 +Block 0029 [ 77]: 852a80858f9d101f +Block 0029 [ 78]: 3c84dcfdecd46fff +Block 0029 [ 79]: 5b7dac0a8ffdd58a +Block 0029 [ 80]: d9dbe926eeb4fa23 +Block 0029 [ 81]: 7e6830e42b1ecaf0 +Block 0029 [ 82]: b40dbaa69df1e15b +Block 0029 [ 83]: 7f7d8f4fb9120fda +Block 0029 [ 84]: 26ed970120722676 +Block 0029 [ 85]: b4ec448d3b153327 +Block 0029 [ 86]: 75a0b7d6ceffa3d4 +Block 0029 [ 87]: efe467bc3841c69e +Block 0029 [ 88]: c0d4ffcf904aaa7e +Block 0029 [ 89]: e6bcb7717fc24d72 +Block 0029 [ 90]: ca0ebcf7b8f9fa08 +Block 0029 [ 91]: b082f39ade7a1219 +Block 0029 [ 92]: e23169e8f33a0b67 +Block 0029 [ 93]: b17ac3ff204b5cce +Block 0029 [ 94]: f4d05e9fa168d522 +Block 0029 [ 95]: b88db25f2938a3ab +Block 0029 [ 96]: 9c8ad5c2a2fecb89 +Block 0029 [ 97]: b642e3e932b49b6e +Block 0029 [ 98]: d52639e55f40db15 +Block 0029 [ 99]: ca80042bf923e26a +Block 0029 [100]: a451014b26a16f1e +Block 0029 [101]: 43dcc2aacc9c99da +Block 0029 [102]: d5496dfeb81f585b +Block 0029 [103]: d402ccce0025ff31 +Block 0029 [104]: b5dbb5516ddad03e +Block 0029 [105]: 27e1f84c7fd2e9a0 +Block 0029 [106]: 628bd072e84442c5 +Block 0029 [107]: b1b9154a8224f4be +Block 0029 [108]: 6bfdae5812e1c6f8 +Block 0029 [109]: 2fcae504e8132505 +Block 0029 [110]: 756911bf961d510e +Block 0029 [111]: 13e9e2d50966b88a +Block 0029 [112]: e6f6e771ba4662a5 +Block 0029 [113]: 869c3193f5686117 +Block 0029 [114]: 71e2fe403f536bf0 +Block 0029 [115]: 2c24c13eeafd203b +Block 0029 [116]: bc359aa26301f725 +Block 0029 [117]: 9a24bbad0f96c694 +Block 0029 [118]: ae363466f27f1397 +Block 0029 [119]: c835914f46bb961c +Block 0029 [120]: a32ebda4688b2687 +Block 0029 [121]: 6def7ad00976a80d +Block 0029 [122]: ec5057a1e29664ed +Block 0029 [123]: cb565f55f678f418 +Block 0029 [124]: 5908463419437b6d +Block 0029 [125]: 3f809409ee15556e +Block 0029 [126]: 6d2dbca4380dc585 +Block 0029 [127]: d08c46fc3a6806db +Block 0030 [ 0]: 2673e74f55281e8d +Block 0030 [ 1]: 6fe90eb7457da8ae +Block 0030 [ 2]: 540e4b56d72a5f0b +Block 0030 [ 3]: b7a76d0edc47aeea +Block 0030 [ 4]: 024292cf39046e35 +Block 0030 [ 5]: 30f439895732b133 +Block 0030 [ 6]: e61425415048bb34 +Block 0030 [ 7]: 609d4114a8c13fb7 +Block 0030 [ 8]: acafdbf6dfc05f2e +Block 0030 [ 9]: 1a2ae59a9c37f819 +Block 0030 [ 10]: c15aca088d429d16 +Block 0030 [ 11]: be74600a4a873ed0 +Block 0030 [ 12]: efd585ebe4080021 +Block 0030 [ 13]: b97042c53760080e +Block 0030 [ 14]: 74752a5c6626fbdf +Block 0030 [ 15]: 8dd34e1e8ac34303 +Block 0030 [ 16]: 6028d90d9c077f4b +Block 0030 [ 17]: 9fb5e7dda12ca4c4 +Block 0030 [ 18]: 2deecea6e979e693 +Block 0030 [ 19]: 54137a747abb3e6e +Block 0030 [ 20]: 8525896cc37fefc9 +Block 0030 [ 21]: 22819e91948ebe28 +Block 0030 [ 22]: 0c84b4ca88859926 +Block 0030 [ 23]: 7b1873fb531b24ae +Block 0030 [ 24]: a31ebd1169530f49 +Block 0030 [ 25]: 7cfe17083df06b3f +Block 0030 [ 26]: fb57eaec825a6b16 +Block 0030 [ 27]: 790885f4e350d418 +Block 0030 [ 28]: 7c9f69ffc0968483 +Block 0030 [ 29]: c27370a8319f0158 +Block 0030 [ 30]: 5a3f9b209a6e9c3c +Block 0030 [ 31]: 0de0b424b3927314 +Block 0030 [ 32]: 54398b47ec9fe8d3 +Block 0030 [ 33]: 103736f4a647d8fb +Block 0030 [ 34]: 2404fa93a1700ff0 +Block 0030 [ 35]: c57374a224da2b3c +Block 0030 [ 36]: e5cf61193ed5de57 +Block 0030 [ 37]: 5ab77e854c810cb9 +Block 0030 [ 38]: d8311483179c4a3c +Block 0030 [ 39]: 1a20963c1b6c2597 +Block 0030 [ 40]: faa542e8b73255b7 +Block 0030 [ 41]: 848f2ca099a33368 +Block 0030 [ 42]: 5510cd734cb3bc9f +Block 0030 [ 43]: 4a929bf87c2820c4 +Block 0030 [ 44]: 681ae77edf7bf1de +Block 0030 [ 45]: 6fae639ea38d29a2 +Block 0030 [ 46]: 616bacb8339d0cf7 +Block 0030 [ 47]: dbcb34373a210bed +Block 0030 [ 48]: 8032a3c8da22217f +Block 0030 [ 49]: 30701adaded4ce5b +Block 0030 [ 50]: a30850d70ad550db +Block 0030 [ 51]: cf3b45972d568ef6 +Block 0030 [ 52]: 78c85c49a224b205 +Block 0030 [ 53]: 5bc633598ccfbde3 +Block 0030 [ 54]: de6b2f772f1a0234 +Block 0030 [ 55]: 201b55b767e9b86b +Block 0030 [ 56]: 823a989a1765c637 +Block 0030 [ 57]: 2579a1ed7cd1e2ad +Block 0030 [ 58]: 03bfc58ff6722fb1 +Block 0030 [ 59]: a503f8fa679b0ad4 +Block 0030 [ 60]: 1b57b1af8e2f45a4 +Block 0030 [ 61]: 57fc7f7bcac0cacf +Block 0030 [ 62]: 7d1affd4927b5b9f +Block 0030 [ 63]: 901f27aaaf0b1abe +Block 0030 [ 64]: 5d8dcf10f365ec31 +Block 0030 [ 65]: 882189aefb46d03a +Block 0030 [ 66]: 2fe1601dbac7830f +Block 0030 [ 67]: 98b84984fd00714c +Block 0030 [ 68]: ae6d2f6efec14c11 +Block 0030 [ 69]: c9152a3abe0d1be6 +Block 0030 [ 70]: 77b7885fefb60ee8 +Block 0030 [ 71]: d3c839e65271a2fd +Block 0030 [ 72]: 295928eb632c919a +Block 0030 [ 73]: 28b2e3a4380ff380 +Block 0030 [ 74]: 979270a7e813d4ba +Block 0030 [ 75]: d9c31f525b9c8fe9 +Block 0030 [ 76]: c0d9d5975ad775b7 +Block 0030 [ 77]: 4bd3e7e7e29840b7 +Block 0030 [ 78]: e3bc3d0cfb465fd0 +Block 0030 [ 79]: 357557042ae99c1e +Block 0030 [ 80]: fbf15a3094fd1f91 +Block 0030 [ 81]: d1309d082bff6e72 +Block 0030 [ 82]: 88bac06cb9b4c7d3 +Block 0030 [ 83]: 7ddaeea4af589570 +Block 0030 [ 84]: 97558e43d7835daf +Block 0030 [ 85]: 0f317701853adbff +Block 0030 [ 86]: 9a7c0f2797b184b7 +Block 0030 [ 87]: 7e3bfe618a2ba655 +Block 0030 [ 88]: ace633529d25fab6 +Block 0030 [ 89]: e99211ba3fa2be8c +Block 0030 [ 90]: 867f7095ef7954b2 +Block 0030 [ 91]: 0fe750442983240e +Block 0030 [ 92]: 0f5253b35adc5e65 +Block 0030 [ 93]: f30a0002010b999c +Block 0030 [ 94]: c6154cda1a9af668 +Block 0030 [ 95]: c80c8afb80ed36dc +Block 0030 [ 96]: 273c700a3c4c50ec +Block 0030 [ 97]: 05f63b79716502f5 +Block 0030 [ 98]: a73664fb04fa538e +Block 0030 [ 99]: 341d1c9dc62af038 +Block 0030 [100]: 797a07a3c99fbf9d +Block 0030 [101]: 2775348e9153e991 +Block 0030 [102]: ec3239e82e480c18 +Block 0030 [103]: 3f14bf2f3a5f1137 +Block 0030 [104]: 3f797d11b5b2fa57 +Block 0030 [105]: e619c6d404875fc1 +Block 0030 [106]: 7fd919b61ce76c11 +Block 0030 [107]: 4fb5d42ca0d8d9b4 +Block 0030 [108]: 0839522fcda3518d +Block 0030 [109]: 48bebcc9957a352a +Block 0030 [110]: d856936973f9cd43 +Block 0030 [111]: ef65350eb285905e +Block 0030 [112]: 5ca32ecda2095ead +Block 0030 [113]: 395ebd8fd16af2b0 +Block 0030 [114]: 65257cb1dce18e85 +Block 0030 [115]: ae3b5c17f308d983 +Block 0030 [116]: f6b14bfd5d90c66b +Block 0030 [117]: 828b08f8a6ee1cd6 +Block 0030 [118]: af1a44ade6f2027b +Block 0030 [119]: 4918b320ae98582b +Block 0030 [120]: 15fc93c969d70364 +Block 0030 [121]: 1cc032eb533bf386 +Block 0030 [122]: 2c58b2dc22266e02 +Block 0030 [123]: e422db8d513b6687 +Block 0030 [124]: f437358d28f6d6f3 +Block 0030 [125]: 409139bd1af4c65a +Block 0030 [126]: 4e52aaa331e8b9a5 +Block 0030 [127]: 8c88340b9e5efd30 +Block 0031 [ 0]: 56b541595dcc6fb1 +Block 0031 [ 1]: 607ad882fb51aefb +Block 0031 [ 2]: 14debd64740fb455 +Block 0031 [ 3]: 26a1486601ba4014 +Block 0031 [ 4]: 6e226704fadf9b3a +Block 0031 [ 5]: 7071e97c033eecf0 +Block 0031 [ 6]: a48434d1a82936d2 +Block 0031 [ 7]: 447c72527f72e3e3 +Block 0031 [ 8]: 1348b0bc1c9707ba +Block 0031 [ 9]: eace622a944fabbe +Block 0031 [ 10]: 353ed00f73ca5d9e +Block 0031 [ 11]: a144765ce7ed48fa +Block 0031 [ 12]: 646405d2ec92b8d7 +Block 0031 [ 13]: c1373d2221f79859 +Block 0031 [ 14]: e934197d55225eaa +Block 0031 [ 15]: 80ba317a25065d33 +Block 0031 [ 16]: 33697268b6033e42 +Block 0031 [ 17]: e92077cb22a36918 +Block 0031 [ 18]: 1809cf4caffa039d +Block 0031 [ 19]: f83303c5920dfcc5 +Block 0031 [ 20]: f736cbeefc9ce798 +Block 0031 [ 21]: 3b54d82b41b098e0 +Block 0031 [ 22]: 335107c0a6b0c3d1 +Block 0031 [ 23]: 7a4df775b24a3cd6 +Block 0031 [ 24]: 25f851e8f3bd76d3 +Block 0031 [ 25]: b9d70e49f5750a56 +Block 0031 [ 26]: ae86aeb12f2305d7 +Block 0031 [ 27]: 12d00c57605652d8 +Block 0031 [ 28]: 44b7e9c35a83480a +Block 0031 [ 29]: 35cf1a769379beea +Block 0031 [ 30]: 0e3a103e7f95bb7e +Block 0031 [ 31]: 17023e6b0b5d90b8 +Block 0031 [ 32]: 2460dfb3f3d65760 +Block 0031 [ 33]: 1835e0a086678329 +Block 0031 [ 34]: 15e390201680a99f +Block 0031 [ 35]: e754ce9be5f9cd0c +Block 0031 [ 36]: b5cb81de27f762b5 +Block 0031 [ 37]: 738a4e685c3e6133 +Block 0031 [ 38]: bae8a4bbffd88861 +Block 0031 [ 39]: 38adfc6c4f01cace +Block 0031 [ 40]: ff79ca79d67eb124 +Block 0031 [ 41]: a4865b7a5ec5e9cb +Block 0031 [ 42]: fc64a20ca7eaa3f1 +Block 0031 [ 43]: 8eb112bdcab799a4 +Block 0031 [ 44]: 96764171a7ac544b +Block 0031 [ 45]: f0a6e23ac5949f6c +Block 0031 [ 46]: 79eae6371346533b +Block 0031 [ 47]: e4d4efb218c6aa83 +Block 0031 [ 48]: 2104d0468931261a +Block 0031 [ 49]: 4247e67e1ace7390 +Block 0031 [ 50]: 45d7d7a54dabbd76 +Block 0031 [ 51]: 4fd1267dffc9b30e +Block 0031 [ 52]: 69d51e78aa8db238 +Block 0031 [ 53]: 4329981502b3079a +Block 0031 [ 54]: a730594950e72400 +Block 0031 [ 55]: 3092c8aebb21060d +Block 0031 [ 56]: d5b8b21a483df5f7 +Block 0031 [ 57]: 6d38f87b8f847e91 +Block 0031 [ 58]: 7a258124daedb431 +Block 0031 [ 59]: 93a907049ee66c94 +Block 0031 [ 60]: 494b9730d1836f3c +Block 0031 [ 61]: 9114899e4a54157c +Block 0031 [ 62]: 44f5b117a277c5d1 +Block 0031 [ 63]: ddbb3504c7504716 +Block 0031 [ 64]: 44a033f4e223796c +Block 0031 [ 65]: 15cb2a4b270cef17 +Block 0031 [ 66]: 04b33e557ed91752 +Block 0031 [ 67]: e19d95ce702d48ca +Block 0031 [ 68]: 562375617142ee07 +Block 0031 [ 69]: 5a3bd82c7c20573f +Block 0031 [ 70]: 226cc32237617958 +Block 0031 [ 71]: f9e57d96d95d4758 +Block 0031 [ 72]: f2a9a8735160284d +Block 0031 [ 73]: ab7f9feb2455068f +Block 0031 [ 74]: c8a8382e34dc0830 +Block 0031 [ 75]: 8408be4da2bfdb2f +Block 0031 [ 76]: 6b917886a8e3169a +Block 0031 [ 77]: 739213ba742858f5 +Block 0031 [ 78]: ea55bddc54068058 +Block 0031 [ 79]: b5cb8166dd28d3a4 +Block 0031 [ 80]: a3aa143acf025806 +Block 0031 [ 81]: 3b2ee2b11caeea07 +Block 0031 [ 82]: 30d6c892ab7437e7 +Block 0031 [ 83]: 3ff9e26a35996936 +Block 0031 [ 84]: be4e56b1184d4dce +Block 0031 [ 85]: b6b0e4754d83366c +Block 0031 [ 86]: 2588d4680fcffa21 +Block 0031 [ 87]: 328dba1abda66139 +Block 0031 [ 88]: d4af6ec06461e8b2 +Block 0031 [ 89]: d123dea841375fe7 +Block 0031 [ 90]: e6492ccb67b26dd4 +Block 0031 [ 91]: 0906e849a240d13b +Block 0031 [ 92]: 0572c95c7c1d8032 +Block 0031 [ 93]: 4292844af9422a9e +Block 0031 [ 94]: aa719cd495649d5a +Block 0031 [ 95]: 718dd218c44e6a0b +Block 0031 [ 96]: fd114114a3789893 +Block 0031 [ 97]: 8c809ab7f96a4627 +Block 0031 [ 98]: 32c05157969648d3 +Block 0031 [ 99]: 76157a8d56ae11c6 +Block 0031 [100]: ca3d325fbf391e9a +Block 0031 [101]: 3af3fd2c41d20c1c +Block 0031 [102]: f903178e5dc9820b +Block 0031 [103]: 4f4d44b8f166f14b +Block 0031 [104]: 4a95f1cea33d5d91 +Block 0031 [105]: 23070893e589cbf9 +Block 0031 [106]: 4d25eed14ef764d4 +Block 0031 [107]: 0f3c464dbdf7cd1d +Block 0031 [108]: 8e3fef7b872504a5 +Block 0031 [109]: 113fe6e452255e08 +Block 0031 [110]: e9ec8f20a1e13b2a +Block 0031 [111]: 5b6ae06cea1b26d8 +Block 0031 [112]: b644922c1917bc5c +Block 0031 [113]: 1c760a6042dae15e +Block 0031 [114]: d5faba8f84e17a16 +Block 0031 [115]: 5401a69a243aa03e +Block 0031 [116]: 11ec3f83197a79e4 +Block 0031 [117]: 10cd56b78d507a76 +Block 0031 [118]: 4635cae680355717 +Block 0031 [119]: 2686da0dc5e13c02 +Block 0031 [120]: c9587e5ee5d0ed17 +Block 0031 [121]: cdb806b4f535e84a +Block 0031 [122]: 1e58ef0ea43a972f +Block 0031 [123]: 7af03e7afd1ff2e4 +Block 0031 [124]: 7f9f6d7b2f0da6f5 +Block 0031 [125]: 9f01140fa64778e6 +Block 0031 [126]: 3e66dc822c734438 +Block 0031 [127]: b3e7ac8ca5ed6ed9 +Tag: b6 46 15 f0 77 89 b6 6b 64 5b 67 ee 9e d3 b3 77 ae 35 0b 6b fc bb 0f c9 51 41 ea 8f 32 26 13 c0 diff --git a/deps/phc-winner-argon2-20190702/kats/argon2id_v16.shasum b/deps/phc-winner-argon2-20190702/kats/argon2id_v16.shasum new file mode 100644 index 000000000..33f1f4010 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/kats/argon2id_v16.shasum @@ -0,0 +1 @@ +680774be1d3ad2e74bbc56ee715dd6eb97a58279bf22edc57d00e840ca1ae469 argon2id_v16 diff --git a/deps/phc-winner-argon2-20190702/kats/check-sums.ps1 b/deps/phc-winner-argon2-20190702/kats/check-sums.ps1 new file mode 100644 index 000000000..36307bd7f --- /dev/null +++ b/deps/phc-winner-argon2-20190702/kats/check-sums.ps1 @@ -0,0 +1,42 @@ +Set-Variable tempfile -option Constant -value "tempfile" + +function hash($path) { + $fullPath = Resolve-Path $path + $hash = new-object -TypeName System.Security.Cryptography.SHA256CryptoServiceProvider + + $contents = [IO.File]::ReadAllText($fullPath) -replace "`r`n?", "`n" + # create UTF-8 encoding without signature + $utf8 = New-Object System.Text.UTF8Encoding $false + # write the text back + [IO.File]::WriteAllText($tempfile, $contents, $utf8) + + $file = [System.IO.File]::Open($tempfile,[System.IO.Filemode]::Open, [System.IO.FileAccess]::Read) + $result = [System.BitConverter]::ToString($hash.ComputeHash($file)) + $file.Dispose() + + if (Test-Path $tempfile) { + Remove-Item $tempfile + } + + return $result +} + +function main() { + $files = $(Get-ChildItem * | Where-Object { $_.Name -match '^[a-z2]*(_v)?[0-9]*$' } | select -ExpandProperty name) + + foreach ($file in $files) { + $new = $(hash $file).replace("-","") + $new = $new.ToLower() + + $old=$(Get-Content $file".shasum") + $old = $old.Substring(0, $old.IndexOf(" ")) + + if ($new -eq $old) { + Write-Host $file "`tOK" + } else { + Write-Host $file "`tERROR" + } + } +} + +main diff --git a/deps/phc-winner-argon2-20190702/kats/check-sums.sh b/deps/phc-winner-argon2-20190702/kats/check-sums.sh new file mode 100644 index 000000000..b297a162e --- /dev/null +++ b/deps/phc-winner-argon2-20190702/kats/check-sums.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +for file in `ls | grep '^[a-z2]*\(_v\)\?[0-9]*$' | xargs` +do + new=`shasum -a 256 $file` + old=`cat $file.shasum` + if [ "$new" = "$old" ] + then + echo $file "\t" OK + else + echo $file "\t" ERROR + fi +done diff --git a/deps/phc-winner-argon2-20190702/kats/test.ps1 b/deps/phc-winner-argon2-20190702/kats/test.ps1 new file mode 100644 index 000000000..d5db5b6ba --- /dev/null +++ b/deps/phc-winner-argon2-20190702/kats/test.ps1 @@ -0,0 +1,50 @@ +$ErrorActionPreference = "Stop" + +Set-Variable tempfile -option Constant -value "tempfile" + +function CompareFiles($f1, $f2, $i) { + $f1_content = $(Get-Content $f1) + $f2_content = $(Get-Content $f2) + + if (Compare-Object $f1_content $f2_content) { + Write-Host -NoNewline "ERROR" + exit $i + } else { + Write-Host -NoNewline "OK" + } +} + +function main() { + $i = 0 + foreach ($opt in @("Ref", "Opt")) { + Write-Output "$opt" + + foreach ($version in @(16, 19)) { + foreach ($type in @("i", "d", "id")) { + $i++ + + if ("Ref" -eq $opt) { + vs2015\build\Argon2RefGenKAT.exe $type $version > $tempfile + } else { + vs2015\build\Argon2OptGenKAT.exe $type $version > $tempfile + } + + if (19 -eq $version) { + $kats = "kats\argon2" + $type + } else { + $kats = "kats\argon2" + $type + "_v" + $version + } + + Write-Host -NoNewline "Argon2$type v=$version : " + CompareFiles $tempfile $kats $i + Write-Output "" + } + } + } + + if (Test-Path $tempfile) { + Remove-Item $tempfile + } +} + +main diff --git a/deps/phc-winner-argon2-20190702/kats/test.sh b/deps/phc-winner-argon2-20190702/kats/test.sh new file mode 100644 index 000000000..b32097546 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/kats/test.sh @@ -0,0 +1,49 @@ +#!/bin/sh + +for opttest in "" "OPTTEST=1" +do + if [ "" = "$opttest" ] + then + printf "Default build\n" + else + printf "Force OPTTEST=1\n" + fi + + make genkat $opttest > /dev/null + if [ $? -ne 0 ] + then + exit $? + fi + + i=0 + for version in 16 19 + do + for type in i d id + do + i=$(($i+1)) + + printf "argon2$type v=$version: " + + if [ 19 -eq $version ] + then + kats="kats/argon2"$type + else + kats="kats/argon2"$type"_v"$version + fi + + ./genkat $type $version > tmp + if diff tmp $kats + then + printf "OK" + else + printf "ERROR" + exit $i + fi + printf "\n" + done + done +done + +rm -f tmp + +exit 0 diff --git a/deps/phc-winner-argon2-20190702/libargon2.pc.in b/deps/phc-winner-argon2-20190702/libargon2.pc.in new file mode 100644 index 000000000..718532497 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/libargon2.pc.in @@ -0,0 +1,18 @@ +# libargon2 info for pkg-config +## Template for downstream installers: +## - replace @UPSTREAM_VER@ with current version, e.g. '20160406' +## - replace @HOST_MULTIARCH@ with target arch lib, e.g. 'lib', 'lib/x86_64-linux-gnu' or 'lib64' +## - replace @PREFIX@ with install path, e.g. '/usr', '/usr/local', '/usr/pkg' +## - replace @INCLUDE@ with incluse path, e.g. 'include' or 'include/argon2' + +prefix=@PREFIX@ +exec_prefix=${prefix} +libdir=${prefix}/@HOST_MULTIARCH@ +includedir=${prefix}/@INCLUDE@ + +Name: libargon2 +Description: Development libraries for libargon2 +Version: @UPSTREAM_VER@ +Libs: -L${libdir} -largon2 @EXTRA_LIBS@ +Cflags: -I${includedir} +URL: https://github.com/P-H-C/phc-winner-argon2 diff --git a/deps/phc-winner-argon2-20190702/man/argon2.1 b/deps/phc-winner-argon2-20190702/man/argon2.1 new file mode 100644 index 000000000..77c0f0777 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/man/argon2.1 @@ -0,0 +1,57 @@ +.TH ARGON2 "1" "April 2016" "argon2 " "User Commands" + +.SH NAME +argon2 \- generate argon2 hashes + +.SH SYNOPSIS +.B argon2 salt +.RB [ OPTIONS ] + +.SH DESCRIPTION +Generate Argon2 hashes from the command line. + +The supplied salt (the first argument to the command) must be at least +8 octets in length, and the password is supplied on standard input. + +By default, this uses Argon2i variant (where memory access is +independent of secret data) which is the preferred one for password +hashing and password-based key derivation. + +.SH OPTIONS +.TP +.B \-h +Display tool usage +.TP +.B \-d +Use Argon2d instead of Argon2i (Argon2i is the default) +.TP +.B \-id +Use Argon2id instead of Argon2i (Argon2i is the default) +.TP +.BI \-t " N" +Sets the number of iterations to N (default = 3) +.TP +.BI \-m " N" +Sets the memory usage of 2^N KiB (default = 12) +.TP +.BI \-p " N" +Sets parallelism to N threads (default = 1) +.TP +.BI \-l " N" +Sets hash output length to N bytes (default = 32) +.TP +.B \-e +Output only encoded hash +.TP +.B \-r +Output only the raw bytes of the hash +.TP +.B \-v (10|13) +Argon2 version (defaults to the most recent version, currently 13) + +.SH COPYRIGHT +This manpage was written by \fBDaniel Kahn Gillmor\fR for the Debian +distribution (but may be used by others). It is released, like the +rest of this Argon2 implementation, under a dual license. You may use this work +under the terms of a Creative Commons CC0 1.0 License/Waiver or the Apache +Public License 2.0, at your option. diff --git a/deps/phc-winner-argon2-20190702/src/argon2.c b/deps/phc-winner-argon2-20190702/src/argon2.c new file mode 100644 index 000000000..795b429e7 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/src/argon2.c @@ -0,0 +1,452 @@ +/* + * Argon2 reference source code package - reference C implementations + * + * Copyright 2015 + * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves + * + * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of + * these licenses can be found at: + * + * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + * + * You should have received a copy of both of these licenses along with this + * software. If not, they may be obtained at the above URLs. + */ + +#include +#include +#include + +#include "argon2.h" +#include "encoding.h" +#include "core.h" + +const char *argon2_type2string(argon2_type type, int uppercase) { + switch (type) { + case Argon2_d: + return uppercase ? "Argon2d" : "argon2d"; + case Argon2_i: + return uppercase ? "Argon2i" : "argon2i"; + case Argon2_id: + return uppercase ? "Argon2id" : "argon2id"; + } + + return NULL; +} + +int argon2_ctx(argon2_context *context, argon2_type type) { + /* 1. Validate all inputs */ + int result = validate_inputs(context); + uint32_t memory_blocks, segment_length; + argon2_instance_t instance; + + if (ARGON2_OK != result) { + return result; + } + + if (Argon2_d != type && Argon2_i != type && Argon2_id != type) { + return ARGON2_INCORRECT_TYPE; + } + + /* 2. Align memory size */ + /* Minimum memory_blocks = 8L blocks, where L is the number of lanes */ + memory_blocks = context->m_cost; + + if (memory_blocks < 2 * ARGON2_SYNC_POINTS * context->lanes) { + memory_blocks = 2 * ARGON2_SYNC_POINTS * context->lanes; + } + + segment_length = memory_blocks / (context->lanes * ARGON2_SYNC_POINTS); + /* Ensure that all segments have equal length */ + memory_blocks = segment_length * (context->lanes * ARGON2_SYNC_POINTS); + + instance.version = context->version; + instance.memory = NULL; + instance.passes = context->t_cost; + instance.memory_blocks = memory_blocks; + instance.segment_length = segment_length; + instance.lane_length = segment_length * ARGON2_SYNC_POINTS; + instance.lanes = context->lanes; + instance.threads = context->threads; + instance.type = type; + + if (instance.threads > instance.lanes) { + instance.threads = instance.lanes; + } + + /* 3. Initialization: Hashing inputs, allocating memory, filling first + * blocks + */ + result = initialize(&instance, context); + + if (ARGON2_OK != result) { + return result; + } + + /* 4. Filling memory */ + result = fill_memory_blocks(&instance); + + if (ARGON2_OK != result) { + return result; + } + /* 5. Finalization */ + finalize(context, &instance); + + return ARGON2_OK; +} + +int argon2_hash(const uint32_t t_cost, const uint32_t m_cost, + const uint32_t parallelism, const void *pwd, + const size_t pwdlen, const void *salt, const size_t saltlen, + void *hash, const size_t hashlen, char *encoded, + const size_t encodedlen, argon2_type type, + const uint32_t version){ + + argon2_context context; + int result; + uint8_t *out; + + if (pwdlen > ARGON2_MAX_PWD_LENGTH) { + return ARGON2_PWD_TOO_LONG; + } + + if (saltlen > ARGON2_MAX_SALT_LENGTH) { + return ARGON2_SALT_TOO_LONG; + } + + if (hashlen > ARGON2_MAX_OUTLEN) { + return ARGON2_OUTPUT_TOO_LONG; + } + + if (hashlen < ARGON2_MIN_OUTLEN) { + return ARGON2_OUTPUT_TOO_SHORT; + } + + out = malloc(hashlen); + if (!out) { + return ARGON2_MEMORY_ALLOCATION_ERROR; + } + + context.out = (uint8_t *)out; + context.outlen = (uint32_t)hashlen; + context.pwd = CONST_CAST(uint8_t *)pwd; + context.pwdlen = (uint32_t)pwdlen; + context.salt = CONST_CAST(uint8_t *)salt; + context.saltlen = (uint32_t)saltlen; + context.secret = NULL; + context.secretlen = 0; + context.ad = NULL; + context.adlen = 0; + context.t_cost = t_cost; + context.m_cost = m_cost; + context.lanes = parallelism; + context.threads = parallelism; + context.allocate_cbk = NULL; + context.free_cbk = NULL; + context.flags = ARGON2_DEFAULT_FLAGS; + context.version = version; + + result = argon2_ctx(&context, type); + + if (result != ARGON2_OK) { + clear_internal_memory(out, hashlen); + free(out); + return result; + } + + /* if raw hash requested, write it */ + if (hash) { + memcpy(hash, out, hashlen); + } + + /* if encoding requested, write it */ + if (encoded && encodedlen) { + if (encode_string(encoded, encodedlen, &context, type) != ARGON2_OK) { + clear_internal_memory(out, hashlen); /* wipe buffers if error */ + clear_internal_memory(encoded, encodedlen); + free(out); + return ARGON2_ENCODING_FAIL; + } + } + clear_internal_memory(out, hashlen); + free(out); + + return ARGON2_OK; +} + +int argon2i_hash_encoded(const uint32_t t_cost, const uint32_t m_cost, + const uint32_t parallelism, const void *pwd, + const size_t pwdlen, const void *salt, + const size_t saltlen, const size_t hashlen, + char *encoded, const size_t encodedlen) { + + return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen, + NULL, hashlen, encoded, encodedlen, Argon2_i, + ARGON2_VERSION_NUMBER); +} + +int argon2i_hash_raw(const uint32_t t_cost, const uint32_t m_cost, + const uint32_t parallelism, const void *pwd, + const size_t pwdlen, const void *salt, + const size_t saltlen, void *hash, const size_t hashlen) { + + return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen, + hash, hashlen, NULL, 0, Argon2_i, ARGON2_VERSION_NUMBER); +} + +int argon2d_hash_encoded(const uint32_t t_cost, const uint32_t m_cost, + const uint32_t parallelism, const void *pwd, + const size_t pwdlen, const void *salt, + const size_t saltlen, const size_t hashlen, + char *encoded, const size_t encodedlen) { + + return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen, + NULL, hashlen, encoded, encodedlen, Argon2_d, + ARGON2_VERSION_NUMBER); +} + +int argon2d_hash_raw(const uint32_t t_cost, const uint32_t m_cost, + const uint32_t parallelism, const void *pwd, + const size_t pwdlen, const void *salt, + const size_t saltlen, void *hash, const size_t hashlen) { + + return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen, + hash, hashlen, NULL, 0, Argon2_d, ARGON2_VERSION_NUMBER); +} + +int argon2id_hash_encoded(const uint32_t t_cost, const uint32_t m_cost, + const uint32_t parallelism, const void *pwd, + const size_t pwdlen, const void *salt, + const size_t saltlen, const size_t hashlen, + char *encoded, const size_t encodedlen) { + + return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen, + NULL, hashlen, encoded, encodedlen, Argon2_id, + ARGON2_VERSION_NUMBER); +} + +int argon2id_hash_raw(const uint32_t t_cost, const uint32_t m_cost, + const uint32_t parallelism, const void *pwd, + const size_t pwdlen, const void *salt, + const size_t saltlen, void *hash, const size_t hashlen) { + return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen, + hash, hashlen, NULL, 0, Argon2_id, + ARGON2_VERSION_NUMBER); +} + +static int argon2_compare(const uint8_t *b1, const uint8_t *b2, size_t len) { + size_t i; + uint8_t d = 0U; + + for (i = 0U; i < len; i++) { + d |= b1[i] ^ b2[i]; + } + return (int)((1 & ((d - 1) >> 8)) - 1); +} + +int argon2_verify(const char *encoded, const void *pwd, const size_t pwdlen, + argon2_type type) { + + argon2_context ctx; + uint8_t *desired_result = NULL; + + int ret = ARGON2_OK; + + size_t encoded_len; + uint32_t max_field_len; + + if (pwdlen > ARGON2_MAX_PWD_LENGTH) { + return ARGON2_PWD_TOO_LONG; + } + + if (encoded == NULL) { + return ARGON2_DECODING_FAIL; + } + + encoded_len = strlen(encoded); + if (encoded_len > UINT32_MAX) { + return ARGON2_DECODING_FAIL; + } + + /* No field can be longer than the encoded length */ + max_field_len = (uint32_t)encoded_len; + + ctx.saltlen = max_field_len; + ctx.outlen = max_field_len; + + ctx.salt = malloc(ctx.saltlen); + ctx.out = malloc(ctx.outlen); + if (!ctx.salt || !ctx.out) { + ret = ARGON2_MEMORY_ALLOCATION_ERROR; + goto fail; + } + + ctx.pwd = (uint8_t *)pwd; + ctx.pwdlen = (uint32_t)pwdlen; + + ret = decode_string(&ctx, encoded, type); + if (ret != ARGON2_OK) { + goto fail; + } + + /* Set aside the desired result, and get a new buffer. */ + desired_result = ctx.out; + ctx.out = malloc(ctx.outlen); + if (!ctx.out) { + ret = ARGON2_MEMORY_ALLOCATION_ERROR; + goto fail; + } + + ret = argon2_verify_ctx(&ctx, (char *)desired_result, type); + if (ret != ARGON2_OK) { + goto fail; + } + +fail: + free(ctx.salt); + free(ctx.out); + free(desired_result); + + return ret; +} + +int argon2i_verify(const char *encoded, const void *pwd, const size_t pwdlen) { + + return argon2_verify(encoded, pwd, pwdlen, Argon2_i); +} + +int argon2d_verify(const char *encoded, const void *pwd, const size_t pwdlen) { + + return argon2_verify(encoded, pwd, pwdlen, Argon2_d); +} + +int argon2id_verify(const char *encoded, const void *pwd, const size_t pwdlen) { + + return argon2_verify(encoded, pwd, pwdlen, Argon2_id); +} + +int argon2d_ctx(argon2_context *context) { + return argon2_ctx(context, Argon2_d); +} + +int argon2i_ctx(argon2_context *context) { + return argon2_ctx(context, Argon2_i); +} + +int argon2id_ctx(argon2_context *context) { + return argon2_ctx(context, Argon2_id); +} + +int argon2_verify_ctx(argon2_context *context, const char *hash, + argon2_type type) { + int ret = argon2_ctx(context, type); + if (ret != ARGON2_OK) { + return ret; + } + + if (argon2_compare((uint8_t *)hash, context->out, context->outlen)) { + return ARGON2_VERIFY_MISMATCH; + } + + return ARGON2_OK; +} + +int argon2d_verify_ctx(argon2_context *context, const char *hash) { + return argon2_verify_ctx(context, hash, Argon2_d); +} + +int argon2i_verify_ctx(argon2_context *context, const char *hash) { + return argon2_verify_ctx(context, hash, Argon2_i); +} + +int argon2id_verify_ctx(argon2_context *context, const char *hash) { + return argon2_verify_ctx(context, hash, Argon2_id); +} + +const char *argon2_error_message(int error_code) { + switch (error_code) { + case ARGON2_OK: + return "OK"; + case ARGON2_OUTPUT_PTR_NULL: + return "Output pointer is NULL"; + case ARGON2_OUTPUT_TOO_SHORT: + return "Output is too short"; + case ARGON2_OUTPUT_TOO_LONG: + return "Output is too long"; + case ARGON2_PWD_TOO_SHORT: + return "Password is too short"; + case ARGON2_PWD_TOO_LONG: + return "Password is too long"; + case ARGON2_SALT_TOO_SHORT: + return "Salt is too short"; + case ARGON2_SALT_TOO_LONG: + return "Salt is too long"; + case ARGON2_AD_TOO_SHORT: + return "Associated data is too short"; + case ARGON2_AD_TOO_LONG: + return "Associated data is too long"; + case ARGON2_SECRET_TOO_SHORT: + return "Secret is too short"; + case ARGON2_SECRET_TOO_LONG: + return "Secret is too long"; + case ARGON2_TIME_TOO_SMALL: + return "Time cost is too small"; + case ARGON2_TIME_TOO_LARGE: + return "Time cost is too large"; + case ARGON2_MEMORY_TOO_LITTLE: + return "Memory cost is too small"; + case ARGON2_MEMORY_TOO_MUCH: + return "Memory cost is too large"; + case ARGON2_LANES_TOO_FEW: + return "Too few lanes"; + case ARGON2_LANES_TOO_MANY: + return "Too many lanes"; + case ARGON2_PWD_PTR_MISMATCH: + return "Password pointer is NULL, but password length is not 0"; + case ARGON2_SALT_PTR_MISMATCH: + return "Salt pointer is NULL, but salt length is not 0"; + case ARGON2_SECRET_PTR_MISMATCH: + return "Secret pointer is NULL, but secret length is not 0"; + case ARGON2_AD_PTR_MISMATCH: + return "Associated data pointer is NULL, but ad length is not 0"; + case ARGON2_MEMORY_ALLOCATION_ERROR: + return "Memory allocation error"; + case ARGON2_FREE_MEMORY_CBK_NULL: + return "The free memory callback is NULL"; + case ARGON2_ALLOCATE_MEMORY_CBK_NULL: + return "The allocate memory callback is NULL"; + case ARGON2_INCORRECT_PARAMETER: + return "Argon2_Context context is NULL"; + case ARGON2_INCORRECT_TYPE: + return "There is no such version of Argon2"; + case ARGON2_OUT_PTR_MISMATCH: + return "Output pointer mismatch"; + case ARGON2_THREADS_TOO_FEW: + return "Not enough threads"; + case ARGON2_THREADS_TOO_MANY: + return "Too many threads"; + case ARGON2_MISSING_ARGS: + return "Missing arguments"; + case ARGON2_ENCODING_FAIL: + return "Encoding failed"; + case ARGON2_DECODING_FAIL: + return "Decoding failed"; + case ARGON2_THREAD_FAIL: + return "Threading failure"; + case ARGON2_DECODING_LENGTH_FAIL: + return "Some of encoded parameters are too long or too short"; + case ARGON2_VERIFY_MISMATCH: + return "The password does not match the supplied hash"; + default: + return "Unknown error code"; + } +} + +size_t argon2_encodedlen(uint32_t t_cost, uint32_t m_cost, uint32_t parallelism, + uint32_t saltlen, uint32_t hashlen, argon2_type type) { + return strlen("$$v=$m=,t=,p=$$") + strlen(argon2_type2string(type, 0)) + + numlen(t_cost) + numlen(m_cost) + numlen(parallelism) + + b64len(saltlen) + b64len(hashlen) + numlen(ARGON2_VERSION_NUMBER) + 1; +} diff --git a/deps/phc-winner-argon2-20190702/src/bench.c b/deps/phc-winner-argon2-20190702/src/bench.c new file mode 100644 index 000000000..20a22869d --- /dev/null +++ b/deps/phc-winner-argon2-20190702/src/bench.c @@ -0,0 +1,111 @@ +/* + * Argon2 reference source code package - reference C implementations + * + * Copyright 2015 + * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves + * + * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of + * these licenses can be found at: + * + * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + * + * You should have received a copy of both of these licenses along with this + * software. If not, they may be obtained at the above URLs. + */ + +#include +#include +#include +#include +#include +#ifdef _MSC_VER +#include +#endif + +#include "argon2.h" + +static uint64_t rdtsc(void) { +#ifdef _MSC_VER + return __rdtsc(); +#else +#if defined(__amd64__) || defined(__x86_64__) + uint64_t rax, rdx; + __asm__ __volatile__("rdtsc" : "=a"(rax), "=d"(rdx) : :); + return (rdx << 32) | rax; +#elif defined(__i386__) || defined(__i386) || defined(__X86__) + uint64_t rax; + __asm__ __volatile__("rdtsc" : "=A"(rax) : :); + return rax; +#else +#error "Not implemented!" +#endif +#endif +} + +/* + * Benchmarks Argon2 with salt length 16, password length 16, t_cost 3, + and different m_cost and threads + */ +static void benchmark() { +#define BENCH_OUTLEN 16 +#define BENCH_INLEN 16 + const uint32_t inlen = BENCH_INLEN; + const unsigned outlen = BENCH_OUTLEN; + unsigned char out[BENCH_OUTLEN]; + unsigned char pwd_array[BENCH_INLEN]; + unsigned char salt_array[BENCH_INLEN]; +#undef BENCH_INLEN +#undef BENCH_OUTLEN + + uint32_t t_cost = 3; + uint32_t m_cost; + uint32_t thread_test[4] = {1, 2, 4, 8}; + argon2_type types[3] = {Argon2_i, Argon2_d, Argon2_id}; + + memset(pwd_array, 0, inlen); + memset(salt_array, 1, inlen); + + for (m_cost = (uint32_t)1 << 10; m_cost <= (uint32_t)1 << 22; m_cost *= 2) { + unsigned i; + for (i = 0; i < 4; ++i) { + double run_time = 0; + uint32_t thread_n = thread_test[i]; + + unsigned j; + for (j = 0; j < 3; ++j) { + clock_t start_time, stop_time; + uint64_t start_cycles, stop_cycles; + uint64_t delta; + double mcycles; + + argon2_type type = types[j]; + start_time = clock(); + start_cycles = rdtsc(); + + argon2_hash(t_cost, m_cost, thread_n, pwd_array, inlen, + salt_array, inlen, out, outlen, NULL, 0, type, + ARGON2_VERSION_NUMBER); + + stop_cycles = rdtsc(); + stop_time = clock(); + + delta = (stop_cycles - start_cycles) / (m_cost); + mcycles = (double)(stop_cycles - start_cycles) / (1UL << 20); + run_time += ((double)stop_time - start_time) / (CLOCKS_PER_SEC); + + printf("%s %d iterations %d MiB %d threads: %2.2f cpb %2.2f " + "Mcycles \n", argon2_type2string(type, 1), t_cost, + m_cost >> 10, thread_n, (float)delta / 1024, mcycles); + } + + printf("%2.4f seconds\n\n", run_time); + } + } +} + +int main() { + benchmark(); + return ARGON2_OK; +} diff --git a/deps/phc-winner-argon2-20190702/src/blake2/blake2-impl.h b/deps/phc-winner-argon2-20190702/src/blake2/blake2-impl.h new file mode 100644 index 000000000..241f0beb3 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/src/blake2/blake2-impl.h @@ -0,0 +1,156 @@ +/* + * Argon2 reference source code package - reference C implementations + * + * Copyright 2015 + * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves + * + * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of + * these licenses can be found at: + * + * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + * + * You should have received a copy of both of these licenses along with this + * software. If not, they may be obtained at the above URLs. + */ + +#ifndef PORTABLE_BLAKE2_IMPL_H +#define PORTABLE_BLAKE2_IMPL_H + +#include +#include + +#if defined(_MSC_VER) +#define BLAKE2_INLINE __inline +#elif defined(__GNUC__) || defined(__clang__) +#define BLAKE2_INLINE __inline__ +#else +#define BLAKE2_INLINE +#endif + +/* Argon2 Team - Begin Code */ +/* + Not an exhaustive list, but should cover the majority of modern platforms + Additionally, the code will always be correct---this is only a performance + tweak. +*/ +#if (defined(__BYTE_ORDER__) && \ + (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)) || \ + defined(__LITTLE_ENDIAN__) || defined(__ARMEL__) || defined(__MIPSEL__) || \ + defined(__AARCH64EL__) || defined(__amd64__) || defined(__i386__) || \ + defined(_M_IX86) || defined(_M_X64) || defined(_M_AMD64) || \ + defined(_M_ARM) +#define NATIVE_LITTLE_ENDIAN +#endif +/* Argon2 Team - End Code */ + +static BLAKE2_INLINE uint32_t load32(const void *src) { +#if defined(NATIVE_LITTLE_ENDIAN) + uint32_t w; + memcpy(&w, src, sizeof w); + return w; +#else + const uint8_t *p = (const uint8_t *)src; + uint32_t w = *p++; + w |= (uint32_t)(*p++) << 8; + w |= (uint32_t)(*p++) << 16; + w |= (uint32_t)(*p++) << 24; + return w; +#endif +} + +static BLAKE2_INLINE uint64_t load64(const void *src) { +#if defined(NATIVE_LITTLE_ENDIAN) + uint64_t w; + memcpy(&w, src, sizeof w); + return w; +#else + const uint8_t *p = (const uint8_t *)src; + uint64_t w = *p++; + w |= (uint64_t)(*p++) << 8; + w |= (uint64_t)(*p++) << 16; + w |= (uint64_t)(*p++) << 24; + w |= (uint64_t)(*p++) << 32; + w |= (uint64_t)(*p++) << 40; + w |= (uint64_t)(*p++) << 48; + w |= (uint64_t)(*p++) << 56; + return w; +#endif +} + +static BLAKE2_INLINE void store32(void *dst, uint32_t w) { +#if defined(NATIVE_LITTLE_ENDIAN) + memcpy(dst, &w, sizeof w); +#else + uint8_t *p = (uint8_t *)dst; + *p++ = (uint8_t)w; + w >>= 8; + *p++ = (uint8_t)w; + w >>= 8; + *p++ = (uint8_t)w; + w >>= 8; + *p++ = (uint8_t)w; +#endif +} + +static BLAKE2_INLINE void store64(void *dst, uint64_t w) { +#if defined(NATIVE_LITTLE_ENDIAN) + memcpy(dst, &w, sizeof w); +#else + uint8_t *p = (uint8_t *)dst; + *p++ = (uint8_t)w; + w >>= 8; + *p++ = (uint8_t)w; + w >>= 8; + *p++ = (uint8_t)w; + w >>= 8; + *p++ = (uint8_t)w; + w >>= 8; + *p++ = (uint8_t)w; + w >>= 8; + *p++ = (uint8_t)w; + w >>= 8; + *p++ = (uint8_t)w; + w >>= 8; + *p++ = (uint8_t)w; +#endif +} + +static BLAKE2_INLINE uint64_t load48(const void *src) { + const uint8_t *p = (const uint8_t *)src; + uint64_t w = *p++; + w |= (uint64_t)(*p++) << 8; + w |= (uint64_t)(*p++) << 16; + w |= (uint64_t)(*p++) << 24; + w |= (uint64_t)(*p++) << 32; + w |= (uint64_t)(*p++) << 40; + return w; +} + +static BLAKE2_INLINE void store48(void *dst, uint64_t w) { + uint8_t *p = (uint8_t *)dst; + *p++ = (uint8_t)w; + w >>= 8; + *p++ = (uint8_t)w; + w >>= 8; + *p++ = (uint8_t)w; + w >>= 8; + *p++ = (uint8_t)w; + w >>= 8; + *p++ = (uint8_t)w; + w >>= 8; + *p++ = (uint8_t)w; +} + +static BLAKE2_INLINE uint32_t rotr32(const uint32_t w, const unsigned c) { + return (w >> c) | (w << (32 - c)); +} + +static BLAKE2_INLINE uint64_t rotr64(const uint64_t w, const unsigned c) { + return (w >> c) | (w << (64 - c)); +} + +void clear_internal_memory(void *v, size_t n); + +#endif diff --git a/deps/phc-winner-argon2-20190702/src/blake2/blake2.h b/deps/phc-winner-argon2-20190702/src/blake2/blake2.h new file mode 100644 index 000000000..57276a776 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/src/blake2/blake2.h @@ -0,0 +1,89 @@ +/* + * Argon2 reference source code package - reference C implementations + * + * Copyright 2015 + * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves + * + * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of + * these licenses can be found at: + * + * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + * + * You should have received a copy of both of these licenses along with this + * software. If not, they may be obtained at the above URLs. + */ + +#ifndef PORTABLE_BLAKE2_H +#define PORTABLE_BLAKE2_H + +#include + +#if defined(__cplusplus) +extern "C" { +#endif + +enum blake2b_constant { + BLAKE2B_BLOCKBYTES = 128, + BLAKE2B_OUTBYTES = 64, + BLAKE2B_KEYBYTES = 64, + BLAKE2B_SALTBYTES = 16, + BLAKE2B_PERSONALBYTES = 16 +}; + +#pragma pack(push, 1) +typedef struct __blake2b_param { + uint8_t digest_length; /* 1 */ + uint8_t key_length; /* 2 */ + uint8_t fanout; /* 3 */ + uint8_t depth; /* 4 */ + uint32_t leaf_length; /* 8 */ + uint64_t node_offset; /* 16 */ + uint8_t node_depth; /* 17 */ + uint8_t inner_length; /* 18 */ + uint8_t reserved[14]; /* 32 */ + uint8_t salt[BLAKE2B_SALTBYTES]; /* 48 */ + uint8_t personal[BLAKE2B_PERSONALBYTES]; /* 64 */ +} blake2b_param; +#pragma pack(pop) + +typedef struct __blake2b_state { + uint64_t h[8]; + uint64_t t[2]; + uint64_t f[2]; + uint8_t buf[BLAKE2B_BLOCKBYTES]; + unsigned buflen; + unsigned outlen; + uint8_t last_node; +} blake2b_state; + +/* Ensure param structs have not been wrongly padded */ +/* Poor man's static_assert */ +enum { + blake2_size_check_0 = 1 / !!(CHAR_BIT == 8), + blake2_size_check_2 = + 1 / !!(sizeof(blake2b_param) == sizeof(uint64_t) * CHAR_BIT) +}; + +/* Streaming API */ +ARGON2_LOCAL int blake2b_init(blake2b_state *S, size_t outlen); +ARGON2_LOCAL int blake2b_init_key(blake2b_state *S, size_t outlen, const void *key, + size_t keylen); +ARGON2_LOCAL int blake2b_init_param(blake2b_state *S, const blake2b_param *P); +ARGON2_LOCAL int blake2b_update(blake2b_state *S, const void *in, size_t inlen); +ARGON2_LOCAL int blake2b_final(blake2b_state *S, void *out, size_t outlen); + +/* Simple API */ +ARGON2_LOCAL int blake2b(void *out, size_t outlen, const void *in, size_t inlen, + const void *key, size_t keylen); + +/* Argon2 Team - Begin Code */ +ARGON2_LOCAL int blake2b_long(void *out, size_t outlen, const void *in, size_t inlen); +/* Argon2 Team - End Code */ + +#if defined(__cplusplus) +} +#endif + +#endif diff --git a/deps/phc-winner-argon2-20190702/src/blake2/blake2b.c b/deps/phc-winner-argon2-20190702/src/blake2/blake2b.c new file mode 100644 index 000000000..ca05df598 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/src/blake2/blake2b.c @@ -0,0 +1,390 @@ +/* + * Argon2 reference source code package - reference C implementations + * + * Copyright 2015 + * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves + * + * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of + * these licenses can be found at: + * + * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + * + * You should have received a copy of both of these licenses along with this + * software. If not, they may be obtained at the above URLs. + */ + +#include +#include +#include + +#include "blake2.h" +#include "blake2-impl.h" + +static const uint64_t blake2b_IV[8] = { + UINT64_C(0x6a09e667f3bcc908), UINT64_C(0xbb67ae8584caa73b), + UINT64_C(0x3c6ef372fe94f82b), UINT64_C(0xa54ff53a5f1d36f1), + UINT64_C(0x510e527fade682d1), UINT64_C(0x9b05688c2b3e6c1f), + UINT64_C(0x1f83d9abfb41bd6b), UINT64_C(0x5be0cd19137e2179)}; + +static const unsigned int blake2b_sigma[12][16] = { + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, + {14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3}, + {11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4}, + {7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8}, + {9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13}, + {2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9}, + {12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11}, + {13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10}, + {6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5}, + {10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0}, + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, + {14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3}, +}; + +static BLAKE2_INLINE void blake2b_set_lastnode(blake2b_state *S) { + S->f[1] = (uint64_t)-1; +} + +static BLAKE2_INLINE void blake2b_set_lastblock(blake2b_state *S) { + if (S->last_node) { + blake2b_set_lastnode(S); + } + S->f[0] = (uint64_t)-1; +} + +static BLAKE2_INLINE void blake2b_increment_counter(blake2b_state *S, + uint64_t inc) { + S->t[0] += inc; + S->t[1] += (S->t[0] < inc); +} + +static BLAKE2_INLINE void blake2b_invalidate_state(blake2b_state *S) { + clear_internal_memory(S, sizeof(*S)); /* wipe */ + blake2b_set_lastblock(S); /* invalidate for further use */ +} + +static BLAKE2_INLINE void blake2b_init0(blake2b_state *S) { + memset(S, 0, sizeof(*S)); + memcpy(S->h, blake2b_IV, sizeof(S->h)); +} + +int blake2b_init_param(blake2b_state *S, const blake2b_param *P) { + const unsigned char *p = (const unsigned char *)P; + unsigned int i; + + if (NULL == P || NULL == S) { + return -1; + } + + blake2b_init0(S); + /* IV XOR Parameter Block */ + for (i = 0; i < 8; ++i) { + S->h[i] ^= load64(&p[i * sizeof(S->h[i])]); + } + S->outlen = P->digest_length; + return 0; +} + +/* Sequential blake2b initialization */ +int blake2b_init(blake2b_state *S, size_t outlen) { + blake2b_param P; + + if (S == NULL) { + return -1; + } + + if ((outlen == 0) || (outlen > BLAKE2B_OUTBYTES)) { + blake2b_invalidate_state(S); + return -1; + } + + /* Setup Parameter Block for unkeyed BLAKE2 */ + P.digest_length = (uint8_t)outlen; + P.key_length = 0; + P.fanout = 1; + P.depth = 1; + P.leaf_length = 0; + P.node_offset = 0; + P.node_depth = 0; + P.inner_length = 0; + memset(P.reserved, 0, sizeof(P.reserved)); + memset(P.salt, 0, sizeof(P.salt)); + memset(P.personal, 0, sizeof(P.personal)); + + return blake2b_init_param(S, &P); +} + +int blake2b_init_key(blake2b_state *S, size_t outlen, const void *key, + size_t keylen) { + blake2b_param P; + + if (S == NULL) { + return -1; + } + + if ((outlen == 0) || (outlen > BLAKE2B_OUTBYTES)) { + blake2b_invalidate_state(S); + return -1; + } + + if ((key == 0) || (keylen == 0) || (keylen > BLAKE2B_KEYBYTES)) { + blake2b_invalidate_state(S); + return -1; + } + + /* Setup Parameter Block for keyed BLAKE2 */ + P.digest_length = (uint8_t)outlen; + P.key_length = (uint8_t)keylen; + P.fanout = 1; + P.depth = 1; + P.leaf_length = 0; + P.node_offset = 0; + P.node_depth = 0; + P.inner_length = 0; + memset(P.reserved, 0, sizeof(P.reserved)); + memset(P.salt, 0, sizeof(P.salt)); + memset(P.personal, 0, sizeof(P.personal)); + + if (blake2b_init_param(S, &P) < 0) { + blake2b_invalidate_state(S); + return -1; + } + + { + uint8_t block[BLAKE2B_BLOCKBYTES]; + memset(block, 0, BLAKE2B_BLOCKBYTES); + memcpy(block, key, keylen); + blake2b_update(S, block, BLAKE2B_BLOCKBYTES); + /* Burn the key from stack */ + clear_internal_memory(block, BLAKE2B_BLOCKBYTES); + } + return 0; +} + +static void blake2b_compress(blake2b_state *S, const uint8_t *block) { + uint64_t m[16]; + uint64_t v[16]; + unsigned int i, r; + + for (i = 0; i < 16; ++i) { + m[i] = load64(block + i * sizeof(m[i])); + } + + for (i = 0; i < 8; ++i) { + v[i] = S->h[i]; + } + + v[8] = blake2b_IV[0]; + v[9] = blake2b_IV[1]; + v[10] = blake2b_IV[2]; + v[11] = blake2b_IV[3]; + v[12] = blake2b_IV[4] ^ S->t[0]; + v[13] = blake2b_IV[5] ^ S->t[1]; + v[14] = blake2b_IV[6] ^ S->f[0]; + v[15] = blake2b_IV[7] ^ S->f[1]; + +#define G(r, i, a, b, c, d) \ + do { \ + a = a + b + m[blake2b_sigma[r][2 * i + 0]]; \ + d = rotr64(d ^ a, 32); \ + c = c + d; \ + b = rotr64(b ^ c, 24); \ + a = a + b + m[blake2b_sigma[r][2 * i + 1]]; \ + d = rotr64(d ^ a, 16); \ + c = c + d; \ + b = rotr64(b ^ c, 63); \ + } while ((void)0, 0) + +#define ROUND(r) \ + do { \ + G(r, 0, v[0], v[4], v[8], v[12]); \ + G(r, 1, v[1], v[5], v[9], v[13]); \ + G(r, 2, v[2], v[6], v[10], v[14]); \ + G(r, 3, v[3], v[7], v[11], v[15]); \ + G(r, 4, v[0], v[5], v[10], v[15]); \ + G(r, 5, v[1], v[6], v[11], v[12]); \ + G(r, 6, v[2], v[7], v[8], v[13]); \ + G(r, 7, v[3], v[4], v[9], v[14]); \ + } while ((void)0, 0) + + for (r = 0; r < 12; ++r) { + ROUND(r); + } + + for (i = 0; i < 8; ++i) { + S->h[i] = S->h[i] ^ v[i] ^ v[i + 8]; + } + +#undef G +#undef ROUND +} + +int blake2b_update(blake2b_state *S, const void *in, size_t inlen) { + const uint8_t *pin = (const uint8_t *)in; + + if (inlen == 0) { + return 0; + } + + /* Sanity check */ + if (S == NULL || in == NULL) { + return -1; + } + + /* Is this a reused state? */ + if (S->f[0] != 0) { + return -1; + } + + if (S->buflen + inlen > BLAKE2B_BLOCKBYTES) { + /* Complete current block */ + size_t left = S->buflen; + size_t fill = BLAKE2B_BLOCKBYTES - left; + memcpy(&S->buf[left], pin, fill); + blake2b_increment_counter(S, BLAKE2B_BLOCKBYTES); + blake2b_compress(S, S->buf); + S->buflen = 0; + inlen -= fill; + pin += fill; + /* Avoid buffer copies when possible */ + while (inlen > BLAKE2B_BLOCKBYTES) { + blake2b_increment_counter(S, BLAKE2B_BLOCKBYTES); + blake2b_compress(S, pin); + inlen -= BLAKE2B_BLOCKBYTES; + pin += BLAKE2B_BLOCKBYTES; + } + } + memcpy(&S->buf[S->buflen], pin, inlen); + S->buflen += (unsigned int)inlen; + return 0; +} + +int blake2b_final(blake2b_state *S, void *out, size_t outlen) { + uint8_t buffer[BLAKE2B_OUTBYTES] = {0}; + unsigned int i; + + /* Sanity checks */ + if (S == NULL || out == NULL || outlen < S->outlen) { + return -1; + } + + /* Is this a reused state? */ + if (S->f[0] != 0) { + return -1; + } + + blake2b_increment_counter(S, S->buflen); + blake2b_set_lastblock(S); + memset(&S->buf[S->buflen], 0, BLAKE2B_BLOCKBYTES - S->buflen); /* Padding */ + blake2b_compress(S, S->buf); + + for (i = 0; i < 8; ++i) { /* Output full hash to temp buffer */ + store64(buffer + sizeof(S->h[i]) * i, S->h[i]); + } + + memcpy(out, buffer, S->outlen); + clear_internal_memory(buffer, sizeof(buffer)); + clear_internal_memory(S->buf, sizeof(S->buf)); + clear_internal_memory(S->h, sizeof(S->h)); + return 0; +} + +int blake2b(void *out, size_t outlen, const void *in, size_t inlen, + const void *key, size_t keylen) { + blake2b_state S; + int ret = -1; + + /* Verify parameters */ + if (NULL == in && inlen > 0) { + goto fail; + } + + if (NULL == out || outlen == 0 || outlen > BLAKE2B_OUTBYTES) { + goto fail; + } + + if ((NULL == key && keylen > 0) || keylen > BLAKE2B_KEYBYTES) { + goto fail; + } + + if (keylen > 0) { + if (blake2b_init_key(&S, outlen, key, keylen) < 0) { + goto fail; + } + } else { + if (blake2b_init(&S, outlen) < 0) { + goto fail; + } + } + + if (blake2b_update(&S, in, inlen) < 0) { + goto fail; + } + ret = blake2b_final(&S, out, outlen); + +fail: + clear_internal_memory(&S, sizeof(S)); + return ret; +} + +/* Argon2 Team - Begin Code */ +int blake2b_long(void *pout, size_t outlen, const void *in, size_t inlen) { + uint8_t *out = (uint8_t *)pout; + blake2b_state blake_state; + uint8_t outlen_bytes[sizeof(uint32_t)] = {0}; + int ret = -1; + + if (outlen > UINT32_MAX) { + goto fail; + } + + /* Ensure little-endian byte order! */ + store32(outlen_bytes, (uint32_t)outlen); + +#define TRY(statement) \ + do { \ + ret = statement; \ + if (ret < 0) { \ + goto fail; \ + } \ + } while ((void)0, 0) + + if (outlen <= BLAKE2B_OUTBYTES) { + TRY(blake2b_init(&blake_state, outlen)); + TRY(blake2b_update(&blake_state, outlen_bytes, sizeof(outlen_bytes))); + TRY(blake2b_update(&blake_state, in, inlen)); + TRY(blake2b_final(&blake_state, out, outlen)); + } else { + uint32_t toproduce; + uint8_t out_buffer[BLAKE2B_OUTBYTES]; + uint8_t in_buffer[BLAKE2B_OUTBYTES]; + TRY(blake2b_init(&blake_state, BLAKE2B_OUTBYTES)); + TRY(blake2b_update(&blake_state, outlen_bytes, sizeof(outlen_bytes))); + TRY(blake2b_update(&blake_state, in, inlen)); + TRY(blake2b_final(&blake_state, out_buffer, BLAKE2B_OUTBYTES)); + memcpy(out, out_buffer, BLAKE2B_OUTBYTES / 2); + out += BLAKE2B_OUTBYTES / 2; + toproduce = (uint32_t)outlen - BLAKE2B_OUTBYTES / 2; + + while (toproduce > BLAKE2B_OUTBYTES) { + memcpy(in_buffer, out_buffer, BLAKE2B_OUTBYTES); + TRY(blake2b(out_buffer, BLAKE2B_OUTBYTES, in_buffer, + BLAKE2B_OUTBYTES, NULL, 0)); + memcpy(out, out_buffer, BLAKE2B_OUTBYTES / 2); + out += BLAKE2B_OUTBYTES / 2; + toproduce -= BLAKE2B_OUTBYTES / 2; + } + + memcpy(in_buffer, out_buffer, BLAKE2B_OUTBYTES); + TRY(blake2b(out_buffer, toproduce, in_buffer, BLAKE2B_OUTBYTES, NULL, + 0)); + memcpy(out, out_buffer, toproduce); + } +fail: + clear_internal_memory(&blake_state, sizeof(blake_state)); + return ret; +#undef TRY +} +/* Argon2 Team - End Code */ diff --git a/deps/phc-winner-argon2-20190702/src/blake2/blamka-round-opt.h b/deps/phc-winner-argon2-20190702/src/blake2/blamka-round-opt.h new file mode 100644 index 000000000..2c8942e31 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/src/blake2/blamka-round-opt.h @@ -0,0 +1,471 @@ +/* + * Argon2 reference source code package - reference C implementations + * + * Copyright 2015 + * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves + * + * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of + * these licenses can be found at: + * + * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + * + * You should have received a copy of both of these licenses along with this + * software. If not, they may be obtained at the above URLs. + */ + +#ifndef BLAKE_ROUND_MKA_OPT_H +#define BLAKE_ROUND_MKA_OPT_H + +#include "blake2-impl.h" + +#include +#if defined(__SSSE3__) +#include /* for _mm_shuffle_epi8 and _mm_alignr_epi8 */ +#endif + +#if defined(__XOP__) && (defined(__GNUC__) || defined(__clang__)) +#include +#endif + +#if !defined(__AVX512F__) +#if !defined(__AVX2__) +#if !defined(__XOP__) +#if defined(__SSSE3__) +#define r16 \ + (_mm_setr_epi8(2, 3, 4, 5, 6, 7, 0, 1, 10, 11, 12, 13, 14, 15, 8, 9)) +#define r24 \ + (_mm_setr_epi8(3, 4, 5, 6, 7, 0, 1, 2, 11, 12, 13, 14, 15, 8, 9, 10)) +#define _mm_roti_epi64(x, c) \ + (-(c) == 32) \ + ? _mm_shuffle_epi32((x), _MM_SHUFFLE(2, 3, 0, 1)) \ + : (-(c) == 24) \ + ? _mm_shuffle_epi8((x), r24) \ + : (-(c) == 16) \ + ? _mm_shuffle_epi8((x), r16) \ + : (-(c) == 63) \ + ? _mm_xor_si128(_mm_srli_epi64((x), -(c)), \ + _mm_add_epi64((x), (x))) \ + : _mm_xor_si128(_mm_srli_epi64((x), -(c)), \ + _mm_slli_epi64((x), 64 - (-(c)))) +#else /* defined(__SSE2__) */ +#define _mm_roti_epi64(r, c) \ + _mm_xor_si128(_mm_srli_epi64((r), -(c)), _mm_slli_epi64((r), 64 - (-(c)))) +#endif +#else +#endif + +static BLAKE2_INLINE __m128i fBlaMka(__m128i x, __m128i y) { + const __m128i z = _mm_mul_epu32(x, y); + return _mm_add_epi64(_mm_add_epi64(x, y), _mm_add_epi64(z, z)); +} + +#define G1(A0, B0, C0, D0, A1, B1, C1, D1) \ + do { \ + A0 = fBlaMka(A0, B0); \ + A1 = fBlaMka(A1, B1); \ + \ + D0 = _mm_xor_si128(D0, A0); \ + D1 = _mm_xor_si128(D1, A1); \ + \ + D0 = _mm_roti_epi64(D0, -32); \ + D1 = _mm_roti_epi64(D1, -32); \ + \ + C0 = fBlaMka(C0, D0); \ + C1 = fBlaMka(C1, D1); \ + \ + B0 = _mm_xor_si128(B0, C0); \ + B1 = _mm_xor_si128(B1, C1); \ + \ + B0 = _mm_roti_epi64(B0, -24); \ + B1 = _mm_roti_epi64(B1, -24); \ + } while ((void)0, 0) + +#define G2(A0, B0, C0, D0, A1, B1, C1, D1) \ + do { \ + A0 = fBlaMka(A0, B0); \ + A1 = fBlaMka(A1, B1); \ + \ + D0 = _mm_xor_si128(D0, A0); \ + D1 = _mm_xor_si128(D1, A1); \ + \ + D0 = _mm_roti_epi64(D0, -16); \ + D1 = _mm_roti_epi64(D1, -16); \ + \ + C0 = fBlaMka(C0, D0); \ + C1 = fBlaMka(C1, D1); \ + \ + B0 = _mm_xor_si128(B0, C0); \ + B1 = _mm_xor_si128(B1, C1); \ + \ + B0 = _mm_roti_epi64(B0, -63); \ + B1 = _mm_roti_epi64(B1, -63); \ + } while ((void)0, 0) + +#if defined(__SSSE3__) +#define DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \ + do { \ + __m128i t0 = _mm_alignr_epi8(B1, B0, 8); \ + __m128i t1 = _mm_alignr_epi8(B0, B1, 8); \ + B0 = t0; \ + B1 = t1; \ + \ + t0 = C0; \ + C0 = C1; \ + C1 = t0; \ + \ + t0 = _mm_alignr_epi8(D1, D0, 8); \ + t1 = _mm_alignr_epi8(D0, D1, 8); \ + D0 = t1; \ + D1 = t0; \ + } while ((void)0, 0) + +#define UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \ + do { \ + __m128i t0 = _mm_alignr_epi8(B0, B1, 8); \ + __m128i t1 = _mm_alignr_epi8(B1, B0, 8); \ + B0 = t0; \ + B1 = t1; \ + \ + t0 = C0; \ + C0 = C1; \ + C1 = t0; \ + \ + t0 = _mm_alignr_epi8(D0, D1, 8); \ + t1 = _mm_alignr_epi8(D1, D0, 8); \ + D0 = t1; \ + D1 = t0; \ + } while ((void)0, 0) +#else /* SSE2 */ +#define DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \ + do { \ + __m128i t0 = D0; \ + __m128i t1 = B0; \ + D0 = C0; \ + C0 = C1; \ + C1 = D0; \ + D0 = _mm_unpackhi_epi64(D1, _mm_unpacklo_epi64(t0, t0)); \ + D1 = _mm_unpackhi_epi64(t0, _mm_unpacklo_epi64(D1, D1)); \ + B0 = _mm_unpackhi_epi64(B0, _mm_unpacklo_epi64(B1, B1)); \ + B1 = _mm_unpackhi_epi64(B1, _mm_unpacklo_epi64(t1, t1)); \ + } while ((void)0, 0) + +#define UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \ + do { \ + __m128i t0, t1; \ + t0 = C0; \ + C0 = C1; \ + C1 = t0; \ + t0 = B0; \ + t1 = D0; \ + B0 = _mm_unpackhi_epi64(B1, _mm_unpacklo_epi64(B0, B0)); \ + B1 = _mm_unpackhi_epi64(t0, _mm_unpacklo_epi64(B1, B1)); \ + D0 = _mm_unpackhi_epi64(D0, _mm_unpacklo_epi64(D1, D1)); \ + D1 = _mm_unpackhi_epi64(D1, _mm_unpacklo_epi64(t1, t1)); \ + } while ((void)0, 0) +#endif + +#define BLAKE2_ROUND(A0, A1, B0, B1, C0, C1, D0, D1) \ + do { \ + G1(A0, B0, C0, D0, A1, B1, C1, D1); \ + G2(A0, B0, C0, D0, A1, B1, C1, D1); \ + \ + DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \ + \ + G1(A0, B0, C0, D0, A1, B1, C1, D1); \ + G2(A0, B0, C0, D0, A1, B1, C1, D1); \ + \ + UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \ + } while ((void)0, 0) +#else /* __AVX2__ */ + +#include + +#define rotr32(x) _mm256_shuffle_epi32(x, _MM_SHUFFLE(2, 3, 0, 1)) +#define rotr24(x) _mm256_shuffle_epi8(x, _mm256_setr_epi8(3, 4, 5, 6, 7, 0, 1, 2, 11, 12, 13, 14, 15, 8, 9, 10, 3, 4, 5, 6, 7, 0, 1, 2, 11, 12, 13, 14, 15, 8, 9, 10)) +#define rotr16(x) _mm256_shuffle_epi8(x, _mm256_setr_epi8(2, 3, 4, 5, 6, 7, 0, 1, 10, 11, 12, 13, 14, 15, 8, 9, 2, 3, 4, 5, 6, 7, 0, 1, 10, 11, 12, 13, 14, 15, 8, 9)) +#define rotr63(x) _mm256_xor_si256(_mm256_srli_epi64((x), 63), _mm256_add_epi64((x), (x))) + +#define G1_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ + do { \ + __m256i ml = _mm256_mul_epu32(A0, B0); \ + ml = _mm256_add_epi64(ml, ml); \ + A0 = _mm256_add_epi64(A0, _mm256_add_epi64(B0, ml)); \ + D0 = _mm256_xor_si256(D0, A0); \ + D0 = rotr32(D0); \ + \ + ml = _mm256_mul_epu32(C0, D0); \ + ml = _mm256_add_epi64(ml, ml); \ + C0 = _mm256_add_epi64(C0, _mm256_add_epi64(D0, ml)); \ + \ + B0 = _mm256_xor_si256(B0, C0); \ + B0 = rotr24(B0); \ + \ + ml = _mm256_mul_epu32(A1, B1); \ + ml = _mm256_add_epi64(ml, ml); \ + A1 = _mm256_add_epi64(A1, _mm256_add_epi64(B1, ml)); \ + D1 = _mm256_xor_si256(D1, A1); \ + D1 = rotr32(D1); \ + \ + ml = _mm256_mul_epu32(C1, D1); \ + ml = _mm256_add_epi64(ml, ml); \ + C1 = _mm256_add_epi64(C1, _mm256_add_epi64(D1, ml)); \ + \ + B1 = _mm256_xor_si256(B1, C1); \ + B1 = rotr24(B1); \ + } while((void)0, 0); + +#define G2_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ + do { \ + __m256i ml = _mm256_mul_epu32(A0, B0); \ + ml = _mm256_add_epi64(ml, ml); \ + A0 = _mm256_add_epi64(A0, _mm256_add_epi64(B0, ml)); \ + D0 = _mm256_xor_si256(D0, A0); \ + D0 = rotr16(D0); \ + \ + ml = _mm256_mul_epu32(C0, D0); \ + ml = _mm256_add_epi64(ml, ml); \ + C0 = _mm256_add_epi64(C0, _mm256_add_epi64(D0, ml)); \ + B0 = _mm256_xor_si256(B0, C0); \ + B0 = rotr63(B0); \ + \ + ml = _mm256_mul_epu32(A1, B1); \ + ml = _mm256_add_epi64(ml, ml); \ + A1 = _mm256_add_epi64(A1, _mm256_add_epi64(B1, ml)); \ + D1 = _mm256_xor_si256(D1, A1); \ + D1 = rotr16(D1); \ + \ + ml = _mm256_mul_epu32(C1, D1); \ + ml = _mm256_add_epi64(ml, ml); \ + C1 = _mm256_add_epi64(C1, _mm256_add_epi64(D1, ml)); \ + B1 = _mm256_xor_si256(B1, C1); \ + B1 = rotr63(B1); \ + } while((void)0, 0); + +#define DIAGONALIZE_1(A0, B0, C0, D0, A1, B1, C1, D1) \ + do { \ + B0 = _mm256_permute4x64_epi64(B0, _MM_SHUFFLE(0, 3, 2, 1)); \ + C0 = _mm256_permute4x64_epi64(C0, _MM_SHUFFLE(1, 0, 3, 2)); \ + D0 = _mm256_permute4x64_epi64(D0, _MM_SHUFFLE(2, 1, 0, 3)); \ + \ + B1 = _mm256_permute4x64_epi64(B1, _MM_SHUFFLE(0, 3, 2, 1)); \ + C1 = _mm256_permute4x64_epi64(C1, _MM_SHUFFLE(1, 0, 3, 2)); \ + D1 = _mm256_permute4x64_epi64(D1, _MM_SHUFFLE(2, 1, 0, 3)); \ + } while((void)0, 0); + +#define DIAGONALIZE_2(A0, A1, B0, B1, C0, C1, D0, D1) \ + do { \ + __m256i tmp1 = _mm256_blend_epi32(B0, B1, 0xCC); \ + __m256i tmp2 = _mm256_blend_epi32(B0, B1, 0x33); \ + B1 = _mm256_permute4x64_epi64(tmp1, _MM_SHUFFLE(2,3,0,1)); \ + B0 = _mm256_permute4x64_epi64(tmp2, _MM_SHUFFLE(2,3,0,1)); \ + \ + tmp1 = C0; \ + C0 = C1; \ + C1 = tmp1; \ + \ + tmp1 = _mm256_blend_epi32(D0, D1, 0xCC); \ + tmp2 = _mm256_blend_epi32(D0, D1, 0x33); \ + D0 = _mm256_permute4x64_epi64(tmp1, _MM_SHUFFLE(2,3,0,1)); \ + D1 = _mm256_permute4x64_epi64(tmp2, _MM_SHUFFLE(2,3,0,1)); \ + } while(0); + +#define UNDIAGONALIZE_1(A0, B0, C0, D0, A1, B1, C1, D1) \ + do { \ + B0 = _mm256_permute4x64_epi64(B0, _MM_SHUFFLE(2, 1, 0, 3)); \ + C0 = _mm256_permute4x64_epi64(C0, _MM_SHUFFLE(1, 0, 3, 2)); \ + D0 = _mm256_permute4x64_epi64(D0, _MM_SHUFFLE(0, 3, 2, 1)); \ + \ + B1 = _mm256_permute4x64_epi64(B1, _MM_SHUFFLE(2, 1, 0, 3)); \ + C1 = _mm256_permute4x64_epi64(C1, _MM_SHUFFLE(1, 0, 3, 2)); \ + D1 = _mm256_permute4x64_epi64(D1, _MM_SHUFFLE(0, 3, 2, 1)); \ + } while((void)0, 0); + +#define UNDIAGONALIZE_2(A0, A1, B0, B1, C0, C1, D0, D1) \ + do { \ + __m256i tmp1 = _mm256_blend_epi32(B0, B1, 0xCC); \ + __m256i tmp2 = _mm256_blend_epi32(B0, B1, 0x33); \ + B0 = _mm256_permute4x64_epi64(tmp1, _MM_SHUFFLE(2,3,0,1)); \ + B1 = _mm256_permute4x64_epi64(tmp2, _MM_SHUFFLE(2,3,0,1)); \ + \ + tmp1 = C0; \ + C0 = C1; \ + C1 = tmp1; \ + \ + tmp1 = _mm256_blend_epi32(D0, D1, 0x33); \ + tmp2 = _mm256_blend_epi32(D0, D1, 0xCC); \ + D0 = _mm256_permute4x64_epi64(tmp1, _MM_SHUFFLE(2,3,0,1)); \ + D1 = _mm256_permute4x64_epi64(tmp2, _MM_SHUFFLE(2,3,0,1)); \ + } while((void)0, 0); + +#define BLAKE2_ROUND_1(A0, A1, B0, B1, C0, C1, D0, D1) \ + do{ \ + G1_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ + G2_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ + \ + DIAGONALIZE_1(A0, B0, C0, D0, A1, B1, C1, D1) \ + \ + G1_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ + G2_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ + \ + UNDIAGONALIZE_1(A0, B0, C0, D0, A1, B1, C1, D1) \ + } while((void)0, 0); + +#define BLAKE2_ROUND_2(A0, A1, B0, B1, C0, C1, D0, D1) \ + do{ \ + G1_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ + G2_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ + \ + DIAGONALIZE_2(A0, A1, B0, B1, C0, C1, D0, D1) \ + \ + G1_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ + G2_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ + \ + UNDIAGONALIZE_2(A0, A1, B0, B1, C0, C1, D0, D1) \ + } while((void)0, 0); + +#endif /* __AVX2__ */ + +#else /* __AVX512F__ */ + +#include + +#define ror64(x, n) _mm512_ror_epi64((x), (n)) + +static __m512i muladd(__m512i x, __m512i y) +{ + __m512i z = _mm512_mul_epu32(x, y); + return _mm512_add_epi64(_mm512_add_epi64(x, y), _mm512_add_epi64(z, z)); +} + +#define G1(A0, B0, C0, D0, A1, B1, C1, D1) \ + do { \ + A0 = muladd(A0, B0); \ + A1 = muladd(A1, B1); \ +\ + D0 = _mm512_xor_si512(D0, A0); \ + D1 = _mm512_xor_si512(D1, A1); \ +\ + D0 = ror64(D0, 32); \ + D1 = ror64(D1, 32); \ +\ + C0 = muladd(C0, D0); \ + C1 = muladd(C1, D1); \ +\ + B0 = _mm512_xor_si512(B0, C0); \ + B1 = _mm512_xor_si512(B1, C1); \ +\ + B0 = ror64(B0, 24); \ + B1 = ror64(B1, 24); \ + } while ((void)0, 0) + +#define G2(A0, B0, C0, D0, A1, B1, C1, D1) \ + do { \ + A0 = muladd(A0, B0); \ + A1 = muladd(A1, B1); \ +\ + D0 = _mm512_xor_si512(D0, A0); \ + D1 = _mm512_xor_si512(D1, A1); \ +\ + D0 = ror64(D0, 16); \ + D1 = ror64(D1, 16); \ +\ + C0 = muladd(C0, D0); \ + C1 = muladd(C1, D1); \ +\ + B0 = _mm512_xor_si512(B0, C0); \ + B1 = _mm512_xor_si512(B1, C1); \ +\ + B0 = ror64(B0, 63); \ + B1 = ror64(B1, 63); \ + } while ((void)0, 0) + +#define DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \ + do { \ + B0 = _mm512_permutex_epi64(B0, _MM_SHUFFLE(0, 3, 2, 1)); \ + B1 = _mm512_permutex_epi64(B1, _MM_SHUFFLE(0, 3, 2, 1)); \ +\ + C0 = _mm512_permutex_epi64(C0, _MM_SHUFFLE(1, 0, 3, 2)); \ + C1 = _mm512_permutex_epi64(C1, _MM_SHUFFLE(1, 0, 3, 2)); \ +\ + D0 = _mm512_permutex_epi64(D0, _MM_SHUFFLE(2, 1, 0, 3)); \ + D1 = _mm512_permutex_epi64(D1, _MM_SHUFFLE(2, 1, 0, 3)); \ + } while ((void)0, 0) + +#define UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \ + do { \ + B0 = _mm512_permutex_epi64(B0, _MM_SHUFFLE(2, 1, 0, 3)); \ + B1 = _mm512_permutex_epi64(B1, _MM_SHUFFLE(2, 1, 0, 3)); \ +\ + C0 = _mm512_permutex_epi64(C0, _MM_SHUFFLE(1, 0, 3, 2)); \ + C1 = _mm512_permutex_epi64(C1, _MM_SHUFFLE(1, 0, 3, 2)); \ +\ + D0 = _mm512_permutex_epi64(D0, _MM_SHUFFLE(0, 3, 2, 1)); \ + D1 = _mm512_permutex_epi64(D1, _MM_SHUFFLE(0, 3, 2, 1)); \ + } while ((void)0, 0) + +#define BLAKE2_ROUND(A0, B0, C0, D0, A1, B1, C1, D1) \ + do { \ + G1(A0, B0, C0, D0, A1, B1, C1, D1); \ + G2(A0, B0, C0, D0, A1, B1, C1, D1); \ +\ + DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \ +\ + G1(A0, B0, C0, D0, A1, B1, C1, D1); \ + G2(A0, B0, C0, D0, A1, B1, C1, D1); \ +\ + UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \ + } while ((void)0, 0) + +#define SWAP_HALVES(A0, A1) \ + do { \ + __m512i t0, t1; \ + t0 = _mm512_shuffle_i64x2(A0, A1, _MM_SHUFFLE(1, 0, 1, 0)); \ + t1 = _mm512_shuffle_i64x2(A0, A1, _MM_SHUFFLE(3, 2, 3, 2)); \ + A0 = t0; \ + A1 = t1; \ + } while((void)0, 0) + +#define SWAP_QUARTERS(A0, A1) \ + do { \ + SWAP_HALVES(A0, A1); \ + A0 = _mm512_permutexvar_epi64(_mm512_setr_epi64(0, 1, 4, 5, 2, 3, 6, 7), A0); \ + A1 = _mm512_permutexvar_epi64(_mm512_setr_epi64(0, 1, 4, 5, 2, 3, 6, 7), A1); \ + } while((void)0, 0) + +#define UNSWAP_QUARTERS(A0, A1) \ + do { \ + A0 = _mm512_permutexvar_epi64(_mm512_setr_epi64(0, 1, 4, 5, 2, 3, 6, 7), A0); \ + A1 = _mm512_permutexvar_epi64(_mm512_setr_epi64(0, 1, 4, 5, 2, 3, 6, 7), A1); \ + SWAP_HALVES(A0, A1); \ + } while((void)0, 0) + +#define BLAKE2_ROUND_1(A0, C0, B0, D0, A1, C1, B1, D1) \ + do { \ + SWAP_HALVES(A0, B0); \ + SWAP_HALVES(C0, D0); \ + SWAP_HALVES(A1, B1); \ + SWAP_HALVES(C1, D1); \ + BLAKE2_ROUND(A0, B0, C0, D0, A1, B1, C1, D1); \ + SWAP_HALVES(A0, B0); \ + SWAP_HALVES(C0, D0); \ + SWAP_HALVES(A1, B1); \ + SWAP_HALVES(C1, D1); \ + } while ((void)0, 0) + +#define BLAKE2_ROUND_2(A0, A1, B0, B1, C0, C1, D0, D1) \ + do { \ + SWAP_QUARTERS(A0, A1); \ + SWAP_QUARTERS(B0, B1); \ + SWAP_QUARTERS(C0, C1); \ + SWAP_QUARTERS(D0, D1); \ + BLAKE2_ROUND(A0, B0, C0, D0, A1, B1, C1, D1); \ + UNSWAP_QUARTERS(A0, A1); \ + UNSWAP_QUARTERS(B0, B1); \ + UNSWAP_QUARTERS(C0, C1); \ + UNSWAP_QUARTERS(D0, D1); \ + } while ((void)0, 0) + +#endif /* __AVX512F__ */ +#endif /* BLAKE_ROUND_MKA_OPT_H */ diff --git a/deps/phc-winner-argon2-20190702/src/blake2/blamka-round-ref.h b/deps/phc-winner-argon2-20190702/src/blake2/blamka-round-ref.h new file mode 100644 index 000000000..b8f2cf471 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/src/blake2/blamka-round-ref.h @@ -0,0 +1,56 @@ +/* + * Argon2 reference source code package - reference C implementations + * + * Copyright 2015 + * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves + * + * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of + * these licenses can be found at: + * + * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + * + * You should have received a copy of both of these licenses along with this + * software. If not, they may be obtained at the above URLs. + */ + +#ifndef BLAKE_ROUND_MKA_H +#define BLAKE_ROUND_MKA_H + +#include "blake2.h" +#include "blake2-impl.h" + +/* designed by the Lyra PHC team */ +static BLAKE2_INLINE uint64_t fBlaMka(uint64_t x, uint64_t y) { + const uint64_t m = UINT64_C(0xFFFFFFFF); + const uint64_t xy = (x & m) * (y & m); + return x + y + 2 * xy; +} + +#define G(a, b, c, d) \ + do { \ + a = fBlaMka(a, b); \ + d = rotr64(d ^ a, 32); \ + c = fBlaMka(c, d); \ + b = rotr64(b ^ c, 24); \ + a = fBlaMka(a, b); \ + d = rotr64(d ^ a, 16); \ + c = fBlaMka(c, d); \ + b = rotr64(b ^ c, 63); \ + } while ((void)0, 0) + +#define BLAKE2_ROUND_NOMSG(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, \ + v12, v13, v14, v15) \ + do { \ + G(v0, v4, v8, v12); \ + G(v1, v5, v9, v13); \ + G(v2, v6, v10, v14); \ + G(v3, v7, v11, v15); \ + G(v0, v5, v10, v15); \ + G(v1, v6, v11, v12); \ + G(v2, v7, v8, v13); \ + G(v3, v4, v9, v14); \ + } while ((void)0, 0) + +#endif diff --git a/deps/phc-winner-argon2-20190702/src/core.c b/deps/phc-winner-argon2-20190702/src/core.c new file mode 100644 index 000000000..65f053769 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/src/core.c @@ -0,0 +1,648 @@ +/* + * Argon2 reference source code package - reference C implementations + * + * Copyright 2015 + * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves + * + * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of + * these licenses can be found at: + * + * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + * + * You should have received a copy of both of these licenses along with this + * software. If not, they may be obtained at the above URLs. + */ + +/*For memory wiping*/ +#ifdef _MSC_VER +#include +#include /* For SecureZeroMemory */ +#endif +#if defined __STDC_LIB_EXT1__ +#define __STDC_WANT_LIB_EXT1__ 1 +#endif +#define VC_GE_2005(version) (version >= 1400) + +/* for explicit_bzero() on glibc */ +#define _DEFAULT_SOURCE + +#include +#include +#include + +#include "core.h" +#include "thread.h" +#include "blake2/blake2.h" +#include "blake2/blake2-impl.h" + +#ifdef GENKAT +#include "genkat.h" +#endif + +#if defined(__clang__) +#if __has_attribute(optnone) +#define NOT_OPTIMIZED __attribute__((optnone)) +#endif +#elif defined(__GNUC__) +#define GCC_VERSION \ + (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) +#if GCC_VERSION >= 40400 +#define NOT_OPTIMIZED __attribute__((optimize("O0"))) +#endif +#endif +#ifndef NOT_OPTIMIZED +#define NOT_OPTIMIZED +#endif + +/***************Instance and Position constructors**********/ +void init_block_value(block *b, uint8_t in) { memset(b->v, in, sizeof(b->v)); } + +void copy_block(block *dst, const block *src) { + memcpy(dst->v, src->v, sizeof(uint64_t) * ARGON2_QWORDS_IN_BLOCK); +} + +void xor_block(block *dst, const block *src) { + int i; + for (i = 0; i < ARGON2_QWORDS_IN_BLOCK; ++i) { + dst->v[i] ^= src->v[i]; + } +} + +static void load_block(block *dst, const void *input) { + unsigned i; + for (i = 0; i < ARGON2_QWORDS_IN_BLOCK; ++i) { + dst->v[i] = load64((const uint8_t *)input + i * sizeof(dst->v[i])); + } +} + +static void store_block(void *output, const block *src) { + unsigned i; + for (i = 0; i < ARGON2_QWORDS_IN_BLOCK; ++i) { + store64((uint8_t *)output + i * sizeof(src->v[i]), src->v[i]); + } +} + +/***************Memory functions*****************/ + +int allocate_memory(const argon2_context *context, uint8_t **memory, + size_t num, size_t size) { + size_t memory_size = num*size; + if (memory == NULL) { + return ARGON2_MEMORY_ALLOCATION_ERROR; + } + + /* 1. Check for multiplication overflow */ + if (size != 0 && memory_size / size != num) { + return ARGON2_MEMORY_ALLOCATION_ERROR; + } + + /* 2. Try to allocate with appropriate allocator */ + if (context->allocate_cbk) { + (context->allocate_cbk)(memory, memory_size); + } else { + *memory = malloc(memory_size); + } + + if (*memory == NULL) { + return ARGON2_MEMORY_ALLOCATION_ERROR; + } + + return ARGON2_OK; +} + +void free_memory(const argon2_context *context, uint8_t *memory, + size_t num, size_t size) { + size_t memory_size = num*size; + clear_internal_memory(memory, memory_size); + if (context->free_cbk) { + (context->free_cbk)(memory, memory_size); + } else { + free(memory); + } +} + +#if defined(__OpenBSD__) +#define HAVE_EXPLICIT_BZERO 1 +#elif defined(__GLIBC__) && defined(__GLIBC_PREREQ) +#if __GLIBC_PREREQ(2,25) +#define HAVE_EXPLICIT_BZERO 1 +#endif +#endif + +void NOT_OPTIMIZED secure_wipe_memory(void *v, size_t n) { +#if defined(_MSC_VER) && VC_GE_2005(_MSC_VER) + SecureZeroMemory(v, n); +#elif defined memset_s + memset_s(v, n, 0, n); +#elif defined(HAVE_EXPLICIT_BZERO) + explicit_bzero(v, n); +#else + static void *(*const volatile memset_sec)(void *, int, size_t) = &memset; + memset_sec(v, 0, n); +#endif +} + +/* Memory clear flag defaults to true. */ +int FLAG_clear_internal_memory = 1; +void clear_internal_memory(void *v, size_t n) { + if (FLAG_clear_internal_memory && v) { + secure_wipe_memory(v, n); + } +} + +void finalize(const argon2_context *context, argon2_instance_t *instance) { + if (context != NULL && instance != NULL) { + block blockhash; + uint32_t l; + + copy_block(&blockhash, instance->memory + instance->lane_length - 1); + + /* XOR the last blocks */ + for (l = 1; l < instance->lanes; ++l) { + uint32_t last_block_in_lane = + l * instance->lane_length + (instance->lane_length - 1); + xor_block(&blockhash, instance->memory + last_block_in_lane); + } + + /* Hash the result */ + { + uint8_t blockhash_bytes[ARGON2_BLOCK_SIZE]; + store_block(blockhash_bytes, &blockhash); + blake2b_long(context->out, context->outlen, blockhash_bytes, + ARGON2_BLOCK_SIZE); + /* clear blockhash and blockhash_bytes */ + clear_internal_memory(blockhash.v, ARGON2_BLOCK_SIZE); + clear_internal_memory(blockhash_bytes, ARGON2_BLOCK_SIZE); + } + +#ifdef GENKAT + print_tag(context->out, context->outlen); +#endif + + free_memory(context, (uint8_t *)instance->memory, + instance->memory_blocks, sizeof(block)); + } +} + +uint32_t index_alpha(const argon2_instance_t *instance, + const argon2_position_t *position, uint32_t pseudo_rand, + int same_lane) { + /* + * Pass 0: + * This lane : all already finished segments plus already constructed + * blocks in this segment + * Other lanes : all already finished segments + * Pass 1+: + * This lane : (SYNC_POINTS - 1) last segments plus already constructed + * blocks in this segment + * Other lanes : (SYNC_POINTS - 1) last segments + */ + uint32_t reference_area_size; + uint64_t relative_position; + uint32_t start_position, absolute_position; + + if (0 == position->pass) { + /* First pass */ + if (0 == position->slice) { + /* First slice */ + reference_area_size = + position->index - 1; /* all but the previous */ + } else { + if (same_lane) { + /* The same lane => add current segment */ + reference_area_size = + position->slice * instance->segment_length + + position->index - 1; + } else { + reference_area_size = + position->slice * instance->segment_length + + ((position->index == 0) ? (-1) : 0); + } + } + } else { + /* Second pass */ + if (same_lane) { + reference_area_size = instance->lane_length - + instance->segment_length + position->index - + 1; + } else { + reference_area_size = instance->lane_length - + instance->segment_length + + ((position->index == 0) ? (-1) : 0); + } + } + + /* 1.2.4. Mapping pseudo_rand to 0.. and produce + * relative position */ + relative_position = pseudo_rand; + relative_position = relative_position * relative_position >> 32; + relative_position = reference_area_size - 1 - + (reference_area_size * relative_position >> 32); + + /* 1.2.5 Computing starting position */ + start_position = 0; + + if (0 != position->pass) { + start_position = (position->slice == ARGON2_SYNC_POINTS - 1) + ? 0 + : (position->slice + 1) * instance->segment_length; + } + + /* 1.2.6. Computing absolute position */ + absolute_position = (start_position + relative_position) % + instance->lane_length; /* absolute position */ + return absolute_position; +} + +/* Single-threaded version for p=1 case */ +static int fill_memory_blocks_st(argon2_instance_t *instance) { + uint32_t r, s, l; + + for (r = 0; r < instance->passes; ++r) { + for (s = 0; s < ARGON2_SYNC_POINTS; ++s) { + for (l = 0; l < instance->lanes; ++l) { + argon2_position_t position = {r, l, (uint8_t)s, 0}; + fill_segment(instance, position); + } + } +#ifdef GENKAT + internal_kat(instance, r); /* Print all memory blocks */ +#endif + } + return ARGON2_OK; +} + +#if !defined(ARGON2_NO_THREADS) + +#ifdef _WIN32 +static unsigned __stdcall fill_segment_thr(void *thread_data) +#else +static void *fill_segment_thr(void *thread_data) +#endif +{ + argon2_thread_data *my_data = thread_data; + fill_segment(my_data->instance_ptr, my_data->pos); + argon2_thread_exit(); + return 0; +} + +/* Multi-threaded version for p > 1 case */ +static int fill_memory_blocks_mt(argon2_instance_t *instance) { + uint32_t r, s; + argon2_thread_handle_t *thread = NULL; + argon2_thread_data *thr_data = NULL; + int rc = ARGON2_OK; + + /* 1. Allocating space for threads */ + thread = calloc(instance->lanes, sizeof(argon2_thread_handle_t)); + if (thread == NULL) { + rc = ARGON2_MEMORY_ALLOCATION_ERROR; + goto fail; + } + + thr_data = calloc(instance->lanes, sizeof(argon2_thread_data)); + if (thr_data == NULL) { + rc = ARGON2_MEMORY_ALLOCATION_ERROR; + goto fail; + } + + for (r = 0; r < instance->passes; ++r) { + for (s = 0; s < ARGON2_SYNC_POINTS; ++s) { + uint32_t l, ll; + + /* 2. Calling threads */ + for (l = 0; l < instance->lanes; ++l) { + argon2_position_t position; + + /* 2.1 Join a thread if limit is exceeded */ + if (l >= instance->threads) { + if (argon2_thread_join(thread[l - instance->threads])) { + rc = ARGON2_THREAD_FAIL; + goto fail; + } + } + + /* 2.2 Create thread */ + position.pass = r; + position.lane = l; + position.slice = (uint8_t)s; + position.index = 0; + thr_data[l].instance_ptr = + instance; /* preparing the thread input */ + memcpy(&(thr_data[l].pos), &position, + sizeof(argon2_position_t)); + if (argon2_thread_create(&thread[l], &fill_segment_thr, + (void *)&thr_data[l])) { + /* Wait for already running threads */ + for (ll = 0; ll < l; ++ll) + argon2_thread_join(thread[ll]); + rc = ARGON2_THREAD_FAIL; + goto fail; + } + + /* fill_segment(instance, position); */ + /*Non-thread equivalent of the lines above */ + } + + /* 3. Joining remaining threads */ + for (l = instance->lanes - instance->threads; l < instance->lanes; + ++l) { + if (argon2_thread_join(thread[l])) { + rc = ARGON2_THREAD_FAIL; + goto fail; + } + } + } + +#ifdef GENKAT + internal_kat(instance, r); /* Print all memory blocks */ +#endif + } + +fail: + if (thread != NULL) { + free(thread); + } + if (thr_data != NULL) { + free(thr_data); + } + return rc; +} + +#endif /* ARGON2_NO_THREADS */ + +int fill_memory_blocks(argon2_instance_t *instance) { + if (instance == NULL || instance->lanes == 0) { + return ARGON2_INCORRECT_PARAMETER; + } +#if defined(ARGON2_NO_THREADS) + return fill_memory_blocks_st(instance); +#else + return instance->threads == 1 ? + fill_memory_blocks_st(instance) : fill_memory_blocks_mt(instance); +#endif +} + +int validate_inputs(const argon2_context *context) { + if (NULL == context) { + return ARGON2_INCORRECT_PARAMETER; + } + + if (NULL == context->out) { + return ARGON2_OUTPUT_PTR_NULL; + } + + /* Validate output length */ + if (ARGON2_MIN_OUTLEN > context->outlen) { + return ARGON2_OUTPUT_TOO_SHORT; + } + + if (ARGON2_MAX_OUTLEN < context->outlen) { + return ARGON2_OUTPUT_TOO_LONG; + } + + /* Validate password (required param) */ + if (NULL == context->pwd) { + if (0 != context->pwdlen) { + return ARGON2_PWD_PTR_MISMATCH; + } + } + + if (ARGON2_MIN_PWD_LENGTH > context->pwdlen) { + return ARGON2_PWD_TOO_SHORT; + } + + if (ARGON2_MAX_PWD_LENGTH < context->pwdlen) { + return ARGON2_PWD_TOO_LONG; + } + + /* Validate salt (required param) */ + if (NULL == context->salt) { + if (0 != context->saltlen) { + return ARGON2_SALT_PTR_MISMATCH; + } + } + + if (ARGON2_MIN_SALT_LENGTH > context->saltlen) { + return ARGON2_SALT_TOO_SHORT; + } + + if (ARGON2_MAX_SALT_LENGTH < context->saltlen) { + return ARGON2_SALT_TOO_LONG; + } + + /* Validate secret (optional param) */ + if (NULL == context->secret) { + if (0 != context->secretlen) { + return ARGON2_SECRET_PTR_MISMATCH; + } + } else { + if (ARGON2_MIN_SECRET > context->secretlen) { + return ARGON2_SECRET_TOO_SHORT; + } + if (ARGON2_MAX_SECRET < context->secretlen) { + return ARGON2_SECRET_TOO_LONG; + } + } + + /* Validate associated data (optional param) */ + if (NULL == context->ad) { + if (0 != context->adlen) { + return ARGON2_AD_PTR_MISMATCH; + } + } else { + if (ARGON2_MIN_AD_LENGTH > context->adlen) { + return ARGON2_AD_TOO_SHORT; + } + if (ARGON2_MAX_AD_LENGTH < context->adlen) { + return ARGON2_AD_TOO_LONG; + } + } + + /* Validate memory cost */ + if (ARGON2_MIN_MEMORY > context->m_cost) { + return ARGON2_MEMORY_TOO_LITTLE; + } + + if (ARGON2_MAX_MEMORY < context->m_cost) { + return ARGON2_MEMORY_TOO_MUCH; + } + + if (context->m_cost < 8 * context->lanes) { + return ARGON2_MEMORY_TOO_LITTLE; + } + + /* Validate time cost */ + if (ARGON2_MIN_TIME > context->t_cost) { + return ARGON2_TIME_TOO_SMALL; + } + + if (ARGON2_MAX_TIME < context->t_cost) { + return ARGON2_TIME_TOO_LARGE; + } + + /* Validate lanes */ + if (ARGON2_MIN_LANES > context->lanes) { + return ARGON2_LANES_TOO_FEW; + } + + if (ARGON2_MAX_LANES < context->lanes) { + return ARGON2_LANES_TOO_MANY; + } + + /* Validate threads */ + if (ARGON2_MIN_THREADS > context->threads) { + return ARGON2_THREADS_TOO_FEW; + } + + if (ARGON2_MAX_THREADS < context->threads) { + return ARGON2_THREADS_TOO_MANY; + } + + if (NULL != context->allocate_cbk && NULL == context->free_cbk) { + return ARGON2_FREE_MEMORY_CBK_NULL; + } + + if (NULL == context->allocate_cbk && NULL != context->free_cbk) { + return ARGON2_ALLOCATE_MEMORY_CBK_NULL; + } + + return ARGON2_OK; +} + +void fill_first_blocks(uint8_t *blockhash, const argon2_instance_t *instance) { + uint32_t l; + /* Make the first and second block in each lane as G(H0||0||i) or + G(H0||1||i) */ + uint8_t blockhash_bytes[ARGON2_BLOCK_SIZE]; + for (l = 0; l < instance->lanes; ++l) { + + store32(blockhash + ARGON2_PREHASH_DIGEST_LENGTH, 0); + store32(blockhash + ARGON2_PREHASH_DIGEST_LENGTH + 4, l); + blake2b_long(blockhash_bytes, ARGON2_BLOCK_SIZE, blockhash, + ARGON2_PREHASH_SEED_LENGTH); + load_block(&instance->memory[l * instance->lane_length + 0], + blockhash_bytes); + + store32(blockhash + ARGON2_PREHASH_DIGEST_LENGTH, 1); + blake2b_long(blockhash_bytes, ARGON2_BLOCK_SIZE, blockhash, + ARGON2_PREHASH_SEED_LENGTH); + load_block(&instance->memory[l * instance->lane_length + 1], + blockhash_bytes); + } + clear_internal_memory(blockhash_bytes, ARGON2_BLOCK_SIZE); +} + +void initial_hash(uint8_t *blockhash, argon2_context *context, + argon2_type type) { + blake2b_state BlakeHash; + uint8_t value[sizeof(uint32_t)]; + + if (NULL == context || NULL == blockhash) { + return; + } + + blake2b_init(&BlakeHash, ARGON2_PREHASH_DIGEST_LENGTH); + + store32(&value, context->lanes); + blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); + + store32(&value, context->outlen); + blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); + + store32(&value, context->m_cost); + blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); + + store32(&value, context->t_cost); + blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); + + store32(&value, context->version); + blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); + + store32(&value, (uint32_t)type); + blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); + + store32(&value, context->pwdlen); + blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); + + if (context->pwd != NULL) { + blake2b_update(&BlakeHash, (const uint8_t *)context->pwd, + context->pwdlen); + + if (context->flags & ARGON2_FLAG_CLEAR_PASSWORD) { + secure_wipe_memory(context->pwd, context->pwdlen); + context->pwdlen = 0; + } + } + + store32(&value, context->saltlen); + blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); + + if (context->salt != NULL) { + blake2b_update(&BlakeHash, (const uint8_t *)context->salt, + context->saltlen); + } + + store32(&value, context->secretlen); + blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); + + if (context->secret != NULL) { + blake2b_update(&BlakeHash, (const uint8_t *)context->secret, + context->secretlen); + + if (context->flags & ARGON2_FLAG_CLEAR_SECRET) { + secure_wipe_memory(context->secret, context->secretlen); + context->secretlen = 0; + } + } + + store32(&value, context->adlen); + blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); + + if (context->ad != NULL) { + blake2b_update(&BlakeHash, (const uint8_t *)context->ad, + context->adlen); + } + + blake2b_final(&BlakeHash, blockhash, ARGON2_PREHASH_DIGEST_LENGTH); +} + +int initialize(argon2_instance_t *instance, argon2_context *context) { + uint8_t blockhash[ARGON2_PREHASH_SEED_LENGTH]; + int result = ARGON2_OK; + + if (instance == NULL || context == NULL) + return ARGON2_INCORRECT_PARAMETER; + instance->context_ptr = context; + + /* 1. Memory allocation */ + result = allocate_memory(context, (uint8_t **)&(instance->memory), + instance->memory_blocks, sizeof(block)); + if (result != ARGON2_OK) { + return result; + } + + /* 2. Initial hashing */ + /* H_0 + 8 extra bytes to produce the first blocks */ + /* uint8_t blockhash[ARGON2_PREHASH_SEED_LENGTH]; */ + /* Hashing all inputs */ + initial_hash(blockhash, context, instance->type); + /* Zeroing 8 extra bytes */ + clear_internal_memory(blockhash + ARGON2_PREHASH_DIGEST_LENGTH, + ARGON2_PREHASH_SEED_LENGTH - + ARGON2_PREHASH_DIGEST_LENGTH); + +#ifdef GENKAT + initial_kat(blockhash, context, instance->type); +#endif + + /* 3. Creating first blocks, we always have at least two blocks in a slice + */ + fill_first_blocks(blockhash, instance); + /* Clearing the hash */ + clear_internal_memory(blockhash, ARGON2_PREHASH_SEED_LENGTH); + + return ARGON2_OK; +} diff --git a/deps/phc-winner-argon2-20190702/src/core.h b/deps/phc-winner-argon2-20190702/src/core.h new file mode 100644 index 000000000..78000ba9e --- /dev/null +++ b/deps/phc-winner-argon2-20190702/src/core.h @@ -0,0 +1,228 @@ +/* + * Argon2 reference source code package - reference C implementations + * + * Copyright 2015 + * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves + * + * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of + * these licenses can be found at: + * + * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + * + * You should have received a copy of both of these licenses along with this + * software. If not, they may be obtained at the above URLs. + */ + +#ifndef ARGON2_CORE_H +#define ARGON2_CORE_H + +#include "argon2.h" + +#define CONST_CAST(x) (x)(uintptr_t) + +/**********************Argon2 internal constants*******************************/ + +enum argon2_core_constants { + /* Memory block size in bytes */ + ARGON2_BLOCK_SIZE = 1024, + ARGON2_QWORDS_IN_BLOCK = ARGON2_BLOCK_SIZE / 8, + ARGON2_OWORDS_IN_BLOCK = ARGON2_BLOCK_SIZE / 16, + ARGON2_HWORDS_IN_BLOCK = ARGON2_BLOCK_SIZE / 32, + ARGON2_512BIT_WORDS_IN_BLOCK = ARGON2_BLOCK_SIZE / 64, + + /* Number of pseudo-random values generated by one call to Blake in Argon2i + to + generate reference block positions */ + ARGON2_ADDRESSES_IN_BLOCK = 128, + + /* Pre-hashing digest length and its extension*/ + ARGON2_PREHASH_DIGEST_LENGTH = 64, + ARGON2_PREHASH_SEED_LENGTH = 72 +}; + +/*************************Argon2 internal data types***********************/ + +/* + * Structure for the (1KB) memory block implemented as 128 64-bit words. + * Memory blocks can be copied, XORed. Internal words can be accessed by [] (no + * bounds checking). + */ +typedef struct block_ { uint64_t v[ARGON2_QWORDS_IN_BLOCK]; } block; + +/*****************Functions that work with the block******************/ + +/* Initialize each byte of the block with @in */ +void init_block_value(block *b, uint8_t in); + +/* Copy block @src to block @dst */ +void copy_block(block *dst, const block *src); + +/* XOR @src onto @dst bytewise */ +void xor_block(block *dst, const block *src); + +/* + * Argon2 instance: memory pointer, number of passes, amount of memory, type, + * and derived values. + * Used to evaluate the number and location of blocks to construct in each + * thread + */ +typedef struct Argon2_instance_t { + block *memory; /* Memory pointer */ + uint32_t version; + uint32_t passes; /* Number of passes */ + uint32_t memory_blocks; /* Number of blocks in memory */ + uint32_t segment_length; + uint32_t lane_length; + uint32_t lanes; + uint32_t threads; + argon2_type type; + int print_internals; /* whether to print the memory blocks */ + argon2_context *context_ptr; /* points back to original context */ +} argon2_instance_t; + +/* + * Argon2 position: where we construct the block right now. Used to distribute + * work between threads. + */ +typedef struct Argon2_position_t { + uint32_t pass; + uint32_t lane; + uint8_t slice; + uint32_t index; +} argon2_position_t; + +/*Struct that holds the inputs for thread handling FillSegment*/ +typedef struct Argon2_thread_data { + argon2_instance_t *instance_ptr; + argon2_position_t pos; +} argon2_thread_data; + +/*************************Argon2 core functions********************************/ + +/* Allocates memory to the given pointer, uses the appropriate allocator as + * specified in the context. Total allocated memory is num*size. + * @param context argon2_context which specifies the allocator + * @param memory pointer to the pointer to the memory + * @param size the size in bytes for each element to be allocated + * @param num the number of elements to be allocated + * @return ARGON2_OK if @memory is a valid pointer and memory is allocated + */ +int allocate_memory(const argon2_context *context, uint8_t **memory, + size_t num, size_t size); + +/* + * Frees memory at the given pointer, uses the appropriate deallocator as + * specified in the context. Also cleans the memory using clear_internal_memory. + * @param context argon2_context which specifies the deallocator + * @param memory pointer to buffer to be freed + * @param size the size in bytes for each element to be deallocated + * @param num the number of elements to be deallocated + */ +void free_memory(const argon2_context *context, uint8_t *memory, + size_t num, size_t size); + +/* Function that securely cleans the memory. This ignores any flags set + * regarding clearing memory. Usually one just calls clear_internal_memory. + * @param mem Pointer to the memory + * @param s Memory size in bytes + */ +void secure_wipe_memory(void *v, size_t n); + +/* Function that securely clears the memory if FLAG_clear_internal_memory is + * set. If the flag isn't set, this function does nothing. + * @param mem Pointer to the memory + * @param s Memory size in bytes + */ +void clear_internal_memory(void *v, size_t n); + +/* + * Computes absolute position of reference block in the lane following a skewed + * distribution and using a pseudo-random value as input + * @param instance Pointer to the current instance + * @param position Pointer to the current position + * @param pseudo_rand 32-bit pseudo-random value used to determine the position + * @param same_lane Indicates if the block will be taken from the current lane. + * If so we can reference the current segment + * @pre All pointers must be valid + */ +uint32_t index_alpha(const argon2_instance_t *instance, + const argon2_position_t *position, uint32_t pseudo_rand, + int same_lane); + +/* + * Function that validates all inputs against predefined restrictions and return + * an error code + * @param context Pointer to current Argon2 context + * @return ARGON2_OK if everything is all right, otherwise one of error codes + * (all defined in + */ +int validate_inputs(const argon2_context *context); + +/* + * Hashes all the inputs into @a blockhash[PREHASH_DIGEST_LENGTH], clears + * password and secret if needed + * @param context Pointer to the Argon2 internal structure containing memory + * pointer, and parameters for time and space requirements. + * @param blockhash Buffer for pre-hashing digest + * @param type Argon2 type + * @pre @a blockhash must have at least @a PREHASH_DIGEST_LENGTH bytes + * allocated + */ +void initial_hash(uint8_t *blockhash, argon2_context *context, + argon2_type type); + +/* + * Function creates first 2 blocks per lane + * @param instance Pointer to the current instance + * @param blockhash Pointer to the pre-hashing digest + * @pre blockhash must point to @a PREHASH_SEED_LENGTH allocated values + */ +void fill_first_blocks(uint8_t *blockhash, const argon2_instance_t *instance); + +/* + * Function allocates memory, hashes the inputs with Blake, and creates first + * two blocks. Returns the pointer to the main memory with 2 blocks per lane + * initialized + * @param context Pointer to the Argon2 internal structure containing memory + * pointer, and parameters for time and space requirements. + * @param instance Current Argon2 instance + * @return Zero if successful, -1 if memory failed to allocate. @context->state + * will be modified if successful. + */ +int initialize(argon2_instance_t *instance, argon2_context *context); + +/* + * XORing the last block of each lane, hashing it, making the tag. Deallocates + * the memory. + * @param context Pointer to current Argon2 context (use only the out parameters + * from it) + * @param instance Pointer to current instance of Argon2 + * @pre instance->state must point to necessary amount of memory + * @pre context->out must point to outlen bytes of memory + * @pre if context->free_cbk is not NULL, it should point to a function that + * deallocates memory + */ +void finalize(const argon2_context *context, argon2_instance_t *instance); + +/* + * Function that fills the segment using previous segments also from other + * threads + * @param context current context + * @param instance Pointer to the current instance + * @param position Current position + * @pre all block pointers must be valid + */ +void fill_segment(const argon2_instance_t *instance, + argon2_position_t position); + +/* + * Function that fills the entire memory t_cost times based on the first two + * blocks in each lane + * @param instance Pointer to the current instance + * @return ARGON2_OK if successful, @context->state + */ +int fill_memory_blocks(argon2_instance_t *instance); + +#endif diff --git a/deps/phc-winner-argon2-20190702/src/encoding.c b/deps/phc-winner-argon2-20190702/src/encoding.c new file mode 100644 index 000000000..12cfda4d0 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/src/encoding.c @@ -0,0 +1,463 @@ +/* + * Argon2 reference source code package - reference C implementations + * + * Copyright 2015 + * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves + * + * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of + * these licenses can be found at: + * + * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + * + * You should have received a copy of both of these licenses along with this + * software. If not, they may be obtained at the above URLs. + */ + +#include +#include +#include +#include +#include "encoding.h" +#include "core.h" + +/* + * Example code for a decoder and encoder of "hash strings", with Argon2 + * parameters. + * + * This code comprises three sections: + * + * -- The first section contains generic Base64 encoding and decoding + * functions. It is conceptually applicable to any hash function + * implementation that uses Base64 to encode and decode parameters, + * salts and outputs. It could be made into a library, provided that + * the relevant functions are made public (non-static) and be given + * reasonable names to avoid collisions with other functions. + * + * -- The second section is specific to Argon2. It encodes and decodes + * the parameters, salts and outputs. It does not compute the hash + * itself. + * + * The code was originally written by Thomas Pornin , + * to whom comments and remarks may be sent. It is released under what + * should amount to Public Domain or its closest equivalent; the + * following mantra is supposed to incarnate that fact with all the + * proper legal rituals: + * + * --------------------------------------------------------------------- + * This file is provided under the terms of Creative Commons CC0 1.0 + * Public Domain Dedication. To the extent possible under law, the + * author (Thomas Pornin) has waived all copyright and related or + * neighboring rights to this file. This work is published from: Canada. + * --------------------------------------------------------------------- + * + * Copyright (c) 2015 Thomas Pornin + */ + +/* ==================================================================== */ +/* + * Common code; could be shared between different hash functions. + * + * Note: the Base64 functions below assume that uppercase letters (resp. + * lowercase letters) have consecutive numerical codes, that fit on 8 + * bits. All modern systems use ASCII-compatible charsets, where these + * properties are true. If you are stuck with a dinosaur of a system + * that still defaults to EBCDIC then you already have much bigger + * interoperability issues to deal with. + */ + +/* + * Some macros for constant-time comparisons. These work over values in + * the 0..255 range. Returned value is 0x00 on "false", 0xFF on "true". + */ +#define EQ(x, y) ((((0U - ((unsigned)(x) ^ (unsigned)(y))) >> 8) & 0xFF) ^ 0xFF) +#define GT(x, y) ((((unsigned)(y) - (unsigned)(x)) >> 8) & 0xFF) +#define GE(x, y) (GT(y, x) ^ 0xFF) +#define LT(x, y) GT(y, x) +#define LE(x, y) GE(y, x) + +/* + * Convert value x (0..63) to corresponding Base64 character. + */ +static int b64_byte_to_char(unsigned x) { + return (LT(x, 26) & (x + 'A')) | + (GE(x, 26) & LT(x, 52) & (x + ('a' - 26))) | + (GE(x, 52) & LT(x, 62) & (x + ('0' - 52))) | (EQ(x, 62) & '+') | + (EQ(x, 63) & '/'); +} + +/* + * Convert character c to the corresponding 6-bit value. If character c + * is not a Base64 character, then 0xFF (255) is returned. + */ +static unsigned b64_char_to_byte(int c) { + unsigned x; + + x = (GE(c, 'A') & LE(c, 'Z') & (c - 'A')) | + (GE(c, 'a') & LE(c, 'z') & (c - ('a' - 26))) | + (GE(c, '0') & LE(c, '9') & (c - ('0' - 52))) | (EQ(c, '+') & 62) | + (EQ(c, '/') & 63); + return x | (EQ(x, 0) & (EQ(c, 'A') ^ 0xFF)); +} + +/* + * Convert some bytes to Base64. 'dst_len' is the length (in characters) + * of the output buffer 'dst'; if that buffer is not large enough to + * receive the result (including the terminating 0), then (size_t)-1 + * is returned. Otherwise, the zero-terminated Base64 string is written + * in the buffer, and the output length (counted WITHOUT the terminating + * zero) is returned. + */ +static size_t to_base64(char *dst, size_t dst_len, const void *src, + size_t src_len) { + size_t olen; + const unsigned char *buf; + unsigned acc, acc_len; + + olen = (src_len / 3) << 2; + switch (src_len % 3) { + case 2: + olen++; + /* fall through */ + case 1: + olen += 2; + break; + } + if (dst_len <= olen) { + return (size_t)-1; + } + acc = 0; + acc_len = 0; + buf = (const unsigned char *)src; + while (src_len-- > 0) { + acc = (acc << 8) + (*buf++); + acc_len += 8; + while (acc_len >= 6) { + acc_len -= 6; + *dst++ = (char)b64_byte_to_char((acc >> acc_len) & 0x3F); + } + } + if (acc_len > 0) { + *dst++ = (char)b64_byte_to_char((acc << (6 - acc_len)) & 0x3F); + } + *dst++ = 0; + return olen; +} + +/* + * Decode Base64 chars into bytes. The '*dst_len' value must initially + * contain the length of the output buffer '*dst'; when the decoding + * ends, the actual number of decoded bytes is written back in + * '*dst_len'. + * + * Decoding stops when a non-Base64 character is encountered, or when + * the output buffer capacity is exceeded. If an error occurred (output + * buffer is too small, invalid last characters leading to unprocessed + * buffered bits), then NULL is returned; otherwise, the returned value + * points to the first non-Base64 character in the source stream, which + * may be the terminating zero. + */ +static const char *from_base64(void *dst, size_t *dst_len, const char *src) { + size_t len; + unsigned char *buf; + unsigned acc, acc_len; + + buf = (unsigned char *)dst; + len = 0; + acc = 0; + acc_len = 0; + for (;;) { + unsigned d; + + d = b64_char_to_byte(*src); + if (d == 0xFF) { + break; + } + src++; + acc = (acc << 6) + d; + acc_len += 6; + if (acc_len >= 8) { + acc_len -= 8; + if ((len++) >= *dst_len) { + return NULL; + } + *buf++ = (acc >> acc_len) & 0xFF; + } + } + + /* + * If the input length is equal to 1 modulo 4 (which is + * invalid), then there will remain 6 unprocessed bits; + * otherwise, only 0, 2 or 4 bits are buffered. The buffered + * bits must also all be zero. + */ + if (acc_len > 4 || (acc & (((unsigned)1 << acc_len) - 1)) != 0) { + return NULL; + } + *dst_len = len; + return src; +} + +/* + * Decode decimal integer from 'str'; the value is written in '*v'. + * Returned value is a pointer to the next non-decimal character in the + * string. If there is no digit at all, or the value encoding is not + * minimal (extra leading zeros), or the value does not fit in an + * 'unsigned long', then NULL is returned. + */ +static const char *decode_decimal(const char *str, unsigned long *v) { + const char *orig; + unsigned long acc; + + acc = 0; + for (orig = str;; str++) { + int c; + + c = *str; + if (c < '0' || c > '9') { + break; + } + c -= '0'; + if (acc > (ULONG_MAX / 10)) { + return NULL; + } + acc *= 10; + if ((unsigned long)c > (ULONG_MAX - acc)) { + return NULL; + } + acc += (unsigned long)c; + } + if (str == orig || (*orig == '0' && str != (orig + 1))) { + return NULL; + } + *v = acc; + return str; +} + +/* ==================================================================== */ +/* + * Code specific to Argon2. + * + * The code below applies the following format: + * + * $argon2[$v=]$m=,t=,p=$$ + * + * where is either 'd', 'id', or 'i', is a decimal integer (positive, + * fits in an 'unsigned long'), and is Base64-encoded data (no '=' padding + * characters, no newline or whitespace). + * + * The last two binary chunks (encoded in Base64) are, in that order, + * the salt and the output. Both are required. The binary salt length and the + * output length must be in the allowed ranges defined in argon2.h. + * + * The ctx struct must contain buffers large enough to hold the salt and pwd + * when it is fed into decode_string. + */ + +int decode_string(argon2_context *ctx, const char *str, argon2_type type) { + +/* check for prefix */ +#define CC(prefix) \ + do { \ + size_t cc_len = strlen(prefix); \ + if (strncmp(str, prefix, cc_len) != 0) { \ + return ARGON2_DECODING_FAIL; \ + } \ + str += cc_len; \ + } while ((void)0, 0) + +/* optional prefix checking with supplied code */ +#define CC_opt(prefix, code) \ + do { \ + size_t cc_len = strlen(prefix); \ + if (strncmp(str, prefix, cc_len) == 0) { \ + str += cc_len; \ + { code; } \ + } \ + } while ((void)0, 0) + +/* Decoding prefix into decimal */ +#define DECIMAL(x) \ + do { \ + unsigned long dec_x; \ + str = decode_decimal(str, &dec_x); \ + if (str == NULL) { \ + return ARGON2_DECODING_FAIL; \ + } \ + (x) = dec_x; \ + } while ((void)0, 0) + + +/* Decoding prefix into uint32_t decimal */ +#define DECIMAL_U32(x) \ + do { \ + unsigned long dec_x; \ + str = decode_decimal(str, &dec_x); \ + if (str == NULL || dec_x > UINT32_MAX) { \ + return ARGON2_DECODING_FAIL; \ + } \ + (x) = (uint32_t)dec_x; \ + } while ((void)0, 0) + + +/* Decoding base64 into a binary buffer */ +#define BIN(buf, max_len, len) \ + do { \ + size_t bin_len = (max_len); \ + str = from_base64(buf, &bin_len, str); \ + if (str == NULL || bin_len > UINT32_MAX) { \ + return ARGON2_DECODING_FAIL; \ + } \ + (len) = (uint32_t)bin_len; \ + } while ((void)0, 0) + + size_t maxsaltlen = ctx->saltlen; + size_t maxoutlen = ctx->outlen; + int validation_result; + const char* type_string; + + /* We should start with the argon2_type we are using */ + type_string = argon2_type2string(type, 0); + if (!type_string) { + return ARGON2_INCORRECT_TYPE; + } + + CC("$"); + CC(type_string); + + /* Reading the version number if the default is suppressed */ + ctx->version = ARGON2_VERSION_10; + CC_opt("$v=", DECIMAL_U32(ctx->version)); + + CC("$m="); + DECIMAL_U32(ctx->m_cost); + CC(",t="); + DECIMAL_U32(ctx->t_cost); + CC(",p="); + DECIMAL_U32(ctx->lanes); + ctx->threads = ctx->lanes; + + CC("$"); + BIN(ctx->salt, maxsaltlen, ctx->saltlen); + CC("$"); + BIN(ctx->out, maxoutlen, ctx->outlen); + + /* The rest of the fields get the default values */ + ctx->secret = NULL; + ctx->secretlen = 0; + ctx->ad = NULL; + ctx->adlen = 0; + ctx->allocate_cbk = NULL; + ctx->free_cbk = NULL; + ctx->flags = ARGON2_DEFAULT_FLAGS; + + /* On return, must have valid context */ + validation_result = validate_inputs(ctx); + if (validation_result != ARGON2_OK) { + return validation_result; + } + + /* Can't have any additional characters */ + if (*str == 0) { + return ARGON2_OK; + } else { + return ARGON2_DECODING_FAIL; + } +#undef CC +#undef CC_opt +#undef DECIMAL +#undef BIN +} + +int encode_string(char *dst, size_t dst_len, argon2_context *ctx, + argon2_type type) { +#define SS(str) \ + do { \ + size_t pp_len = strlen(str); \ + if (pp_len >= dst_len) { \ + return ARGON2_ENCODING_FAIL; \ + } \ + memcpy(dst, str, pp_len + 1); \ + dst += pp_len; \ + dst_len -= pp_len; \ + } while ((void)0, 0) + +#define SX(x) \ + do { \ + char tmp[30]; \ + sprintf(tmp, "%lu", (unsigned long)(x)); \ + SS(tmp); \ + } while ((void)0, 0) + +#define SB(buf, len) \ + do { \ + size_t sb_len = to_base64(dst, dst_len, buf, len); \ + if (sb_len == (size_t)-1) { \ + return ARGON2_ENCODING_FAIL; \ + } \ + dst += sb_len; \ + dst_len -= sb_len; \ + } while ((void)0, 0) + + const char* type_string = argon2_type2string(type, 0); + int validation_result = validate_inputs(ctx); + + if (!type_string) { + return ARGON2_ENCODING_FAIL; + } + + if (validation_result != ARGON2_OK) { + return validation_result; + } + + + SS("$"); + SS(type_string); + + SS("$v="); + SX(ctx->version); + + SS("$m="); + SX(ctx->m_cost); + SS(",t="); + SX(ctx->t_cost); + SS(",p="); + SX(ctx->lanes); + + SS("$"); + SB(ctx->salt, ctx->saltlen); + + SS("$"); + SB(ctx->out, ctx->outlen); + return ARGON2_OK; + +#undef SS +#undef SX +#undef SB +} + +size_t b64len(uint32_t len) { + size_t olen = ((size_t)len / 3) << 2; + + switch (len % 3) { + case 2: + olen++; + /* fall through */ + case 1: + olen += 2; + break; + } + + return olen; +} + +size_t numlen(uint32_t num) { + size_t len = 1; + while (num >= 10) { + ++len; + num = num / 10; + } + return len; +} + diff --git a/deps/phc-winner-argon2-20190702/src/encoding.h b/deps/phc-winner-argon2-20190702/src/encoding.h new file mode 100644 index 000000000..7e83ec928 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/src/encoding.h @@ -0,0 +1,57 @@ +/* + * Argon2 reference source code package - reference C implementations + * + * Copyright 2015 + * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves + * + * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of + * these licenses can be found at: + * + * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + * + * You should have received a copy of both of these licenses along with this + * software. If not, they may be obtained at the above URLs. + */ + +#ifndef ENCODING_H +#define ENCODING_H +#include "argon2.h" + +#define ARGON2_MAX_DECODED_LANES UINT32_C(255) +#define ARGON2_MIN_DECODED_SALT_LEN UINT32_C(8) +#define ARGON2_MIN_DECODED_OUT_LEN UINT32_C(12) + +/* +* encode an Argon2 hash string into the provided buffer. 'dst_len' +* contains the size, in characters, of the 'dst' buffer; if 'dst_len' +* is less than the number of required characters (including the +* terminating 0), then this function returns ARGON2_ENCODING_ERROR. +* +* on success, ARGON2_OK is returned. +*/ +int encode_string(char *dst, size_t dst_len, argon2_context *ctx, + argon2_type type); + +/* +* Decodes an Argon2 hash string into the provided structure 'ctx'. +* The only fields that must be set prior to this call are ctx.saltlen and +* ctx.outlen (which must be the maximal salt and out length values that are +* allowed), ctx.salt and ctx.out (which must be buffers of the specified +* length), and ctx.pwd and ctx.pwdlen which must hold a valid password. +* +* Invalid input string causes an error. On success, the ctx is valid and all +* fields have been initialized. +* +* Returned value is ARGON2_OK on success, other ARGON2_ codes on error. +*/ +int decode_string(argon2_context *ctx, const char *str, argon2_type type); + +/* Returns the length of the encoded byte stream with length len */ +size_t b64len(uint32_t len); + +/* Returns the length of the encoded number num */ +size_t numlen(uint32_t num); + +#endif diff --git a/deps/phc-winner-argon2-20190702/src/genkat.c b/deps/phc-winner-argon2-20190702/src/genkat.c new file mode 100644 index 000000000..8db9036f7 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/src/genkat.c @@ -0,0 +1,207 @@ +/* + * Argon2 reference source code package - reference C implementations + * + * Copyright 2015 + * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves + * + * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of + * these licenses can be found at: + * + * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + * + * You should have received a copy of both of these licenses along with this + * software. If not, they may be obtained at the above URLs. + */ + +#include +#include +#include +#include "argon2.h" +#include "core.h" + +void initial_kat(const uint8_t *blockhash, const argon2_context *context, + argon2_type type) { + unsigned i; + + if (blockhash != NULL && context != NULL) { + printf("=======================================\n"); + + printf("%s version number %d\n", argon2_type2string(type, 1), + context->version); + + printf("=======================================\n"); + + + printf("Memory: %u KiB, Iterations: %u, Parallelism: %u lanes, Tag " + "length: %u bytes\n", + context->m_cost, context->t_cost, context->lanes, + context->outlen); + + printf("Password[%u]: ", context->pwdlen); + + if (context->flags & ARGON2_FLAG_CLEAR_PASSWORD) { + printf("CLEARED\n"); + } else { + for (i = 0; i < context->pwdlen; ++i) { + printf("%2.2x ", ((unsigned char *)context->pwd)[i]); + } + + printf("\n"); + } + + printf("Salt[%u]: ", context->saltlen); + + for (i = 0; i < context->saltlen; ++i) { + printf("%2.2x ", ((unsigned char *)context->salt)[i]); + } + + printf("\n"); + + printf("Secret[%u]: ", context->secretlen); + + if (context->flags & ARGON2_FLAG_CLEAR_SECRET) { + printf("CLEARED\n"); + } else { + for (i = 0; i < context->secretlen; ++i) { + printf("%2.2x ", ((unsigned char *)context->secret)[i]); + } + + printf("\n"); + } + + printf("Associated data[%u]: ", context->adlen); + + for (i = 0; i < context->adlen; ++i) { + printf("%2.2x ", ((unsigned char *)context->ad)[i]); + } + + printf("\n"); + + printf("Pre-hashing digest: "); + + for (i = 0; i < ARGON2_PREHASH_DIGEST_LENGTH; ++i) { + printf("%2.2x ", ((unsigned char *)blockhash)[i]); + } + + printf("\n"); + } +} + +void print_tag(const void *out, uint32_t outlen) { + unsigned i; + if (out != NULL) { + printf("Tag: "); + + for (i = 0; i < outlen; ++i) { + printf("%2.2x ", ((uint8_t *)out)[i]); + } + + printf("\n"); + } +} + +void internal_kat(const argon2_instance_t *instance, uint32_t pass) { + + if (instance != NULL) { + uint32_t i, j; + printf("\n After pass %u:\n", pass); + + for (i = 0; i < instance->memory_blocks; ++i) { + uint32_t how_many_words = + (instance->memory_blocks > ARGON2_QWORDS_IN_BLOCK) + ? 1 + : ARGON2_QWORDS_IN_BLOCK; + + for (j = 0; j < how_many_words; ++j) + printf("Block %.4u [%3u]: %016llx\n", i, j, + (unsigned long long)instance->memory[i].v[j]); + } + } +} + +static void fatal(const char *error) { + fprintf(stderr, "Error: %s\n", error); + exit(1); +} + +static void generate_testvectors(argon2_type type, const uint32_t version) { +#define TEST_OUTLEN 32 +#define TEST_PWDLEN 32 +#define TEST_SALTLEN 16 +#define TEST_SECRETLEN 8 +#define TEST_ADLEN 12 + argon2_context context; + + unsigned char out[TEST_OUTLEN]; + unsigned char pwd[TEST_PWDLEN]; + unsigned char salt[TEST_SALTLEN]; + unsigned char secret[TEST_SECRETLEN]; + unsigned char ad[TEST_ADLEN]; + const allocate_fptr myown_allocator = NULL; + const deallocate_fptr myown_deallocator = NULL; + + unsigned t_cost = 3; + unsigned m_cost = 32; + unsigned lanes = 4; + + memset(pwd, 1, TEST_OUTLEN); + memset(salt, 2, TEST_SALTLEN); + memset(secret, 3, TEST_SECRETLEN); + memset(ad, 4, TEST_ADLEN); + + context.out = out; + context.outlen = TEST_OUTLEN; + context.version = version; + context.pwd = pwd; + context.pwdlen = TEST_PWDLEN; + context.salt = salt; + context.saltlen = TEST_SALTLEN; + context.secret = secret; + context.secretlen = TEST_SECRETLEN; + context.ad = ad; + context.adlen = TEST_ADLEN; + context.t_cost = t_cost; + context.m_cost = m_cost; + context.lanes = lanes; + context.threads = lanes; + context.allocate_cbk = myown_allocator; + context.free_cbk = myown_deallocator; + context.flags = ARGON2_DEFAULT_FLAGS; + +#undef TEST_OUTLEN +#undef TEST_PWDLEN +#undef TEST_SALTLEN +#undef TEST_SECRETLEN +#undef TEST_ADLEN + + argon2_ctx(&context, type); +} + +int main(int argc, char *argv[]) { + /* Get and check Argon2 type */ + const char *type_str = (argc > 1) ? argv[1] : "i"; + argon2_type type = Argon2_i; + uint32_t version = ARGON2_VERSION_NUMBER; + if (!strcmp(type_str, "d")) { + type = Argon2_d; + } else if (!strcmp(type_str, "i")) { + type = Argon2_i; + } else if (!strcmp(type_str, "id")) { + type = Argon2_id; + } else { + fatal("wrong Argon2 type"); + } + + /* Get and check Argon2 version number */ + if (argc > 2) { + version = strtoul(argv[2], NULL, 10); + } + if (ARGON2_VERSION_10 != version && ARGON2_VERSION_NUMBER != version) { + fatal("wrong Argon2 version number"); + } + + generate_testvectors(type, version); + return ARGON2_OK; +} diff --git a/deps/phc-winner-argon2-20190702/src/genkat.h b/deps/phc-winner-argon2-20190702/src/genkat.h new file mode 100644 index 000000000..057263015 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/src/genkat.h @@ -0,0 +1,51 @@ +/* + * Argon2 reference source code package - reference C implementations + * + * Copyright 2015 + * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves + * + * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of + * these licenses can be found at: + * + * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + * + * You should have received a copy of both of these licenses along with this + * software. If not, they may be obtained at the above URLs. + */ + +#ifndef ARGON2_KAT_H +#define ARGON2_KAT_H + +#include "core.h" + +/* + * Initial KAT function that prints the inputs to the file + * @param blockhash Array that contains pre-hashing digest + * @param context Holds inputs + * @param type Argon2 type + * @pre blockhash must point to INPUT_INITIAL_HASH_LENGTH bytes + * @pre context member pointers must point to allocated memory of size according + * to the length values + */ +void initial_kat(const uint8_t *blockhash, const argon2_context *context, + argon2_type type); + +/* + * Function that prints the output tag + * @param out output array pointer + * @param outlen digest length + * @pre out must point to @a outlen bytes + **/ +void print_tag(const void *out, uint32_t outlen); + +/* + * Function that prints the internal state at given moment + * @param instance pointer to the current instance + * @param pass current pass number + * @pre instance must have necessary memory allocated + **/ +void internal_kat(const argon2_instance_t *instance, uint32_t pass); + +#endif diff --git a/deps/phc-winner-argon2-20190702/src/opt.c b/deps/phc-winner-argon2-20190702/src/opt.c new file mode 100644 index 000000000..f6c20528e --- /dev/null +++ b/deps/phc-winner-argon2-20190702/src/opt.c @@ -0,0 +1,283 @@ +/* + * Argon2 reference source code package - reference C implementations + * + * Copyright 2015 + * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves + * + * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of + * these licenses can be found at: + * + * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + * + * You should have received a copy of both of these licenses along with this + * software. If not, they may be obtained at the above URLs. + */ + +#include +#include +#include + +#include "argon2.h" +#include "core.h" + +#include "blake2/blake2.h" +#include "blake2/blamka-round-opt.h" + +/* + * Function fills a new memory block and optionally XORs the old block over the new one. + * Memory must be initialized. + * @param state Pointer to the just produced block. Content will be updated(!) + * @param ref_block Pointer to the reference block + * @param next_block Pointer to the block to be XORed over. May coincide with @ref_block + * @param with_xor Whether to XOR into the new block (1) or just overwrite (0) + * @pre all block pointers must be valid + */ +#if defined(__AVX512F__) +static void fill_block(__m512i *state, const block *ref_block, + block *next_block, int with_xor) { + __m512i block_XY[ARGON2_512BIT_WORDS_IN_BLOCK]; + unsigned int i; + + if (with_xor) { + for (i = 0; i < ARGON2_512BIT_WORDS_IN_BLOCK; i++) { + state[i] = _mm512_xor_si512( + state[i], _mm512_loadu_si512((const __m512i *)ref_block->v + i)); + block_XY[i] = _mm512_xor_si512( + state[i], _mm512_loadu_si512((const __m512i *)next_block->v + i)); + } + } else { + for (i = 0; i < ARGON2_512BIT_WORDS_IN_BLOCK; i++) { + block_XY[i] = state[i] = _mm512_xor_si512( + state[i], _mm512_loadu_si512((const __m512i *)ref_block->v + i)); + } + } + + for (i = 0; i < 2; ++i) { + BLAKE2_ROUND_1( + state[8 * i + 0], state[8 * i + 1], state[8 * i + 2], state[8 * i + 3], + state[8 * i + 4], state[8 * i + 5], state[8 * i + 6], state[8 * i + 7]); + } + + for (i = 0; i < 2; ++i) { + BLAKE2_ROUND_2( + state[2 * 0 + i], state[2 * 1 + i], state[2 * 2 + i], state[2 * 3 + i], + state[2 * 4 + i], state[2 * 5 + i], state[2 * 6 + i], state[2 * 7 + i]); + } + + for (i = 0; i < ARGON2_512BIT_WORDS_IN_BLOCK; i++) { + state[i] = _mm512_xor_si512(state[i], block_XY[i]); + _mm512_storeu_si512((__m512i *)next_block->v + i, state[i]); + } +} +#elif defined(__AVX2__) +static void fill_block(__m256i *state, const block *ref_block, + block *next_block, int with_xor) { + __m256i block_XY[ARGON2_HWORDS_IN_BLOCK]; + unsigned int i; + + if (with_xor) { + for (i = 0; i < ARGON2_HWORDS_IN_BLOCK; i++) { + state[i] = _mm256_xor_si256( + state[i], _mm256_loadu_si256((const __m256i *)ref_block->v + i)); + block_XY[i] = _mm256_xor_si256( + state[i], _mm256_loadu_si256((const __m256i *)next_block->v + i)); + } + } else { + for (i = 0; i < ARGON2_HWORDS_IN_BLOCK; i++) { + block_XY[i] = state[i] = _mm256_xor_si256( + state[i], _mm256_loadu_si256((const __m256i *)ref_block->v + i)); + } + } + + for (i = 0; i < 4; ++i) { + BLAKE2_ROUND_1(state[8 * i + 0], state[8 * i + 4], state[8 * i + 1], state[8 * i + 5], + state[8 * i + 2], state[8 * i + 6], state[8 * i + 3], state[8 * i + 7]); + } + + for (i = 0; i < 4; ++i) { + BLAKE2_ROUND_2(state[ 0 + i], state[ 4 + i], state[ 8 + i], state[12 + i], + state[16 + i], state[20 + i], state[24 + i], state[28 + i]); + } + + for (i = 0; i < ARGON2_HWORDS_IN_BLOCK; i++) { + state[i] = _mm256_xor_si256(state[i], block_XY[i]); + _mm256_storeu_si256((__m256i *)next_block->v + i, state[i]); + } +} +#else +static void fill_block(__m128i *state, const block *ref_block, + block *next_block, int with_xor) { + __m128i block_XY[ARGON2_OWORDS_IN_BLOCK]; + unsigned int i; + + if (with_xor) { + for (i = 0; i < ARGON2_OWORDS_IN_BLOCK; i++) { + state[i] = _mm_xor_si128( + state[i], _mm_loadu_si128((const __m128i *)ref_block->v + i)); + block_XY[i] = _mm_xor_si128( + state[i], _mm_loadu_si128((const __m128i *)next_block->v + i)); + } + } else { + for (i = 0; i < ARGON2_OWORDS_IN_BLOCK; i++) { + block_XY[i] = state[i] = _mm_xor_si128( + state[i], _mm_loadu_si128((const __m128i *)ref_block->v + i)); + } + } + + for (i = 0; i < 8; ++i) { + BLAKE2_ROUND(state[8 * i + 0], state[8 * i + 1], state[8 * i + 2], + state[8 * i + 3], state[8 * i + 4], state[8 * i + 5], + state[8 * i + 6], state[8 * i + 7]); + } + + for (i = 0; i < 8; ++i) { + BLAKE2_ROUND(state[8 * 0 + i], state[8 * 1 + i], state[8 * 2 + i], + state[8 * 3 + i], state[8 * 4 + i], state[8 * 5 + i], + state[8 * 6 + i], state[8 * 7 + i]); + } + + for (i = 0; i < ARGON2_OWORDS_IN_BLOCK; i++) { + state[i] = _mm_xor_si128(state[i], block_XY[i]); + _mm_storeu_si128((__m128i *)next_block->v + i, state[i]); + } +} +#endif + +static void next_addresses(block *address_block, block *input_block) { + /*Temporary zero-initialized blocks*/ +#if defined(__AVX512F__) + __m512i zero_block[ARGON2_512BIT_WORDS_IN_BLOCK]; + __m512i zero2_block[ARGON2_512BIT_WORDS_IN_BLOCK]; +#elif defined(__AVX2__) + __m256i zero_block[ARGON2_HWORDS_IN_BLOCK]; + __m256i zero2_block[ARGON2_HWORDS_IN_BLOCK]; +#else + __m128i zero_block[ARGON2_OWORDS_IN_BLOCK]; + __m128i zero2_block[ARGON2_OWORDS_IN_BLOCK]; +#endif + + memset(zero_block, 0, sizeof(zero_block)); + memset(zero2_block, 0, sizeof(zero2_block)); + + /*Increasing index counter*/ + input_block->v[6]++; + + /*First iteration of G*/ + fill_block(zero_block, input_block, address_block, 0); + + /*Second iteration of G*/ + fill_block(zero2_block, address_block, address_block, 0); +} + +void fill_segment(const argon2_instance_t *instance, + argon2_position_t position) { + block *ref_block = NULL, *curr_block = NULL; + block address_block, input_block; + uint64_t pseudo_rand, ref_index, ref_lane; + uint32_t prev_offset, curr_offset; + uint32_t starting_index, i; +#if defined(__AVX512F__) + __m512i state[ARGON2_512BIT_WORDS_IN_BLOCK]; +#elif defined(__AVX2__) + __m256i state[ARGON2_HWORDS_IN_BLOCK]; +#else + __m128i state[ARGON2_OWORDS_IN_BLOCK]; +#endif + int data_independent_addressing; + + if (instance == NULL) { + return; + } + + data_independent_addressing = + (instance->type == Argon2_i) || + (instance->type == Argon2_id && (position.pass == 0) && + (position.slice < ARGON2_SYNC_POINTS / 2)); + + if (data_independent_addressing) { + init_block_value(&input_block, 0); + + input_block.v[0] = position.pass; + input_block.v[1] = position.lane; + input_block.v[2] = position.slice; + input_block.v[3] = instance->memory_blocks; + input_block.v[4] = instance->passes; + input_block.v[5] = instance->type; + } + + starting_index = 0; + + if ((0 == position.pass) && (0 == position.slice)) { + starting_index = 2; /* we have already generated the first two blocks */ + + /* Don't forget to generate the first block of addresses: */ + if (data_independent_addressing) { + next_addresses(&address_block, &input_block); + } + } + + /* Offset of the current block */ + curr_offset = position.lane * instance->lane_length + + position.slice * instance->segment_length + starting_index; + + if (0 == curr_offset % instance->lane_length) { + /* Last block in this lane */ + prev_offset = curr_offset + instance->lane_length - 1; + } else { + /* Previous block */ + prev_offset = curr_offset - 1; + } + + memcpy(state, ((instance->memory + prev_offset)->v), ARGON2_BLOCK_SIZE); + + for (i = starting_index; i < instance->segment_length; + ++i, ++curr_offset, ++prev_offset) { + /*1.1 Rotating prev_offset if needed */ + if (curr_offset % instance->lane_length == 1) { + prev_offset = curr_offset - 1; + } + + /* 1.2 Computing the index of the reference block */ + /* 1.2.1 Taking pseudo-random value from the previous block */ + if (data_independent_addressing) { + if (i % ARGON2_ADDRESSES_IN_BLOCK == 0) { + next_addresses(&address_block, &input_block); + } + pseudo_rand = address_block.v[i % ARGON2_ADDRESSES_IN_BLOCK]; + } else { + pseudo_rand = instance->memory[prev_offset].v[0]; + } + + /* 1.2.2 Computing the lane of the reference block */ + ref_lane = ((pseudo_rand >> 32)) % instance->lanes; + + if ((position.pass == 0) && (position.slice == 0)) { + /* Can not reference other lanes yet */ + ref_lane = position.lane; + } + + /* 1.2.3 Computing the number of possible reference block within the + * lane. + */ + position.index = i; + ref_index = index_alpha(instance, &position, pseudo_rand & 0xFFFFFFFF, + ref_lane == position.lane); + + /* 2 Creating a new block */ + ref_block = + instance->memory + instance->lane_length * ref_lane + ref_index; + curr_block = instance->memory + curr_offset; + if (ARGON2_VERSION_10 == instance->version) { + /* version 1.2.1 and earlier: overwrite, not XOR */ + fill_block(state, ref_block, curr_block, 0); + } else { + if(0 == position.pass) { + fill_block(state, ref_block, curr_block, 0); + } else { + fill_block(state, ref_block, curr_block, 1); + } + } + } +} diff --git a/deps/phc-winner-argon2-20190702/src/ref.c b/deps/phc-winner-argon2-20190702/src/ref.c new file mode 100644 index 000000000..ad1cf461f --- /dev/null +++ b/deps/phc-winner-argon2-20190702/src/ref.c @@ -0,0 +1,194 @@ +/* + * Argon2 reference source code package - reference C implementations + * + * Copyright 2015 + * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves + * + * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of + * these licenses can be found at: + * + * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + * + * You should have received a copy of both of these licenses along with this + * software. If not, they may be obtained at the above URLs. + */ + +#include +#include +#include + +#include "argon2.h" +#include "core.h" + +#include "blake2/blamka-round-ref.h" +#include "blake2/blake2-impl.h" +#include "blake2/blake2.h" + + +/* + * Function fills a new memory block and optionally XORs the old block over the new one. + * @next_block must be initialized. + * @param prev_block Pointer to the previous block + * @param ref_block Pointer to the reference block + * @param next_block Pointer to the block to be constructed + * @param with_xor Whether to XOR into the new block (1) or just overwrite (0) + * @pre all block pointers must be valid + */ +static void fill_block(const block *prev_block, const block *ref_block, + block *next_block, int with_xor) { + block blockR, block_tmp; + unsigned i; + + copy_block(&blockR, ref_block); + xor_block(&blockR, prev_block); + copy_block(&block_tmp, &blockR); + /* Now blockR = ref_block + prev_block and block_tmp = ref_block + prev_block */ + if (with_xor) { + /* Saving the next block contents for XOR over: */ + xor_block(&block_tmp, next_block); + /* Now blockR = ref_block + prev_block and + block_tmp = ref_block + prev_block + next_block */ + } + + /* Apply Blake2 on columns of 64-bit words: (0,1,...,15) , then + (16,17,..31)... finally (112,113,...127) */ + for (i = 0; i < 8; ++i) { + BLAKE2_ROUND_NOMSG( + blockR.v[16 * i], blockR.v[16 * i + 1], blockR.v[16 * i + 2], + blockR.v[16 * i + 3], blockR.v[16 * i + 4], blockR.v[16 * i + 5], + blockR.v[16 * i + 6], blockR.v[16 * i + 7], blockR.v[16 * i + 8], + blockR.v[16 * i + 9], blockR.v[16 * i + 10], blockR.v[16 * i + 11], + blockR.v[16 * i + 12], blockR.v[16 * i + 13], blockR.v[16 * i + 14], + blockR.v[16 * i + 15]); + } + + /* Apply Blake2 on rows of 64-bit words: (0,1,16,17,...112,113), then + (2,3,18,19,...,114,115).. finally (14,15,30,31,...,126,127) */ + for (i = 0; i < 8; i++) { + BLAKE2_ROUND_NOMSG( + blockR.v[2 * i], blockR.v[2 * i + 1], blockR.v[2 * i + 16], + blockR.v[2 * i + 17], blockR.v[2 * i + 32], blockR.v[2 * i + 33], + blockR.v[2 * i + 48], blockR.v[2 * i + 49], blockR.v[2 * i + 64], + blockR.v[2 * i + 65], blockR.v[2 * i + 80], blockR.v[2 * i + 81], + blockR.v[2 * i + 96], blockR.v[2 * i + 97], blockR.v[2 * i + 112], + blockR.v[2 * i + 113]); + } + + copy_block(next_block, &block_tmp); + xor_block(next_block, &blockR); +} + +static void next_addresses(block *address_block, block *input_block, + const block *zero_block) { + input_block->v[6]++; + fill_block(zero_block, input_block, address_block, 0); + fill_block(zero_block, address_block, address_block, 0); +} + +void fill_segment(const argon2_instance_t *instance, + argon2_position_t position) { + block *ref_block = NULL, *curr_block = NULL; + block address_block, input_block, zero_block; + uint64_t pseudo_rand, ref_index, ref_lane; + uint32_t prev_offset, curr_offset; + uint32_t starting_index; + uint32_t i; + int data_independent_addressing; + + if (instance == NULL) { + return; + } + + data_independent_addressing = + (instance->type == Argon2_i) || + (instance->type == Argon2_id && (position.pass == 0) && + (position.slice < ARGON2_SYNC_POINTS / 2)); + + if (data_independent_addressing) { + init_block_value(&zero_block, 0); + init_block_value(&input_block, 0); + + input_block.v[0] = position.pass; + input_block.v[1] = position.lane; + input_block.v[2] = position.slice; + input_block.v[3] = instance->memory_blocks; + input_block.v[4] = instance->passes; + input_block.v[5] = instance->type; + } + + starting_index = 0; + + if ((0 == position.pass) && (0 == position.slice)) { + starting_index = 2; /* we have already generated the first two blocks */ + + /* Don't forget to generate the first block of addresses: */ + if (data_independent_addressing) { + next_addresses(&address_block, &input_block, &zero_block); + } + } + + /* Offset of the current block */ + curr_offset = position.lane * instance->lane_length + + position.slice * instance->segment_length + starting_index; + + if (0 == curr_offset % instance->lane_length) { + /* Last block in this lane */ + prev_offset = curr_offset + instance->lane_length - 1; + } else { + /* Previous block */ + prev_offset = curr_offset - 1; + } + + for (i = starting_index; i < instance->segment_length; + ++i, ++curr_offset, ++prev_offset) { + /*1.1 Rotating prev_offset if needed */ + if (curr_offset % instance->lane_length == 1) { + prev_offset = curr_offset - 1; + } + + /* 1.2 Computing the index of the reference block */ + /* 1.2.1 Taking pseudo-random value from the previous block */ + if (data_independent_addressing) { + if (i % ARGON2_ADDRESSES_IN_BLOCK == 0) { + next_addresses(&address_block, &input_block, &zero_block); + } + pseudo_rand = address_block.v[i % ARGON2_ADDRESSES_IN_BLOCK]; + } else { + pseudo_rand = instance->memory[prev_offset].v[0]; + } + + /* 1.2.2 Computing the lane of the reference block */ + ref_lane = ((pseudo_rand >> 32)) % instance->lanes; + + if ((position.pass == 0) && (position.slice == 0)) { + /* Can not reference other lanes yet */ + ref_lane = position.lane; + } + + /* 1.2.3 Computing the number of possible reference block within the + * lane. + */ + position.index = i; + ref_index = index_alpha(instance, &position, pseudo_rand & 0xFFFFFFFF, + ref_lane == position.lane); + + /* 2 Creating a new block */ + ref_block = + instance->memory + instance->lane_length * ref_lane + ref_index; + curr_block = instance->memory + curr_offset; + if (ARGON2_VERSION_10 == instance->version) { + /* version 1.2.1 and earlier: overwrite, not XOR */ + fill_block(instance->memory + prev_offset, ref_block, curr_block, 0); + } else { + if(0 == position.pass) { + fill_block(instance->memory + prev_offset, ref_block, + curr_block, 0); + } else { + fill_block(instance->memory + prev_offset, ref_block, + curr_block, 1); + } + } + } +} diff --git a/deps/phc-winner-argon2-20190702/src/run.c b/deps/phc-winner-argon2-20190702/src/run.c new file mode 100644 index 000000000..b21b9d7fa --- /dev/null +++ b/deps/phc-winner-argon2-20190702/src/run.c @@ -0,0 +1,337 @@ +/* + * Argon2 reference source code package - reference C implementations + * + * Copyright 2015 + * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves + * + * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of + * these licenses can be found at: + * + * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + * + * You should have received a copy of both of these licenses along with this + * software. If not, they may be obtained at the above URLs. + */ + +#define _GNU_SOURCE 1 + +#include +#include +#include +#include +#include + +#include "argon2.h" +#include "core.h" + +#define T_COST_DEF 3 +#define LOG_M_COST_DEF 12 /* 2^12 = 4 MiB */ +#define LANES_DEF 1 +#define THREADS_DEF 1 +#define OUTLEN_DEF 32 +#define MAX_PASS_LEN 128 + +#define UNUSED_PARAMETER(x) (void)(x) + +static void usage(const char *cmd) { + printf("Usage: %s [-h] salt [-i|-d|-id] [-t iterations] " + "[-m log2(memory in KiB) | -k memory in KiB] [-p parallelism] " + "[-l hash length] [-e|-r] [-v (10|13)]\n", + cmd); + printf("\tPassword is read from stdin\n"); + printf("Parameters:\n"); + printf("\tsalt\t\tThe salt to use, at least 8 characters\n"); + printf("\t-i\t\tUse Argon2i (this is the default)\n"); + printf("\t-d\t\tUse Argon2d instead of Argon2i\n"); + printf("\t-id\t\tUse Argon2id instead of Argon2i\n"); + printf("\t-t N\t\tSets the number of iterations to N (default = %d)\n", + T_COST_DEF); + printf("\t-m N\t\tSets the memory usage of 2^N KiB (default %d)\n", + LOG_M_COST_DEF); + printf("\t-k N\t\tSets the memory usage of N KiB (default %d)\n", + 1 << LOG_M_COST_DEF); + printf("\t-p N\t\tSets parallelism to N threads (default %d)\n", + THREADS_DEF); + printf("\t-l N\t\tSets hash output length to N bytes (default %d)\n", + OUTLEN_DEF); + printf("\t-e\t\tOutput only encoded hash\n"); + printf("\t-r\t\tOutput only the raw bytes of the hash\n"); + printf("\t-v (10|13)\tArgon2 version (defaults to the most recent version, currently %x)\n", + ARGON2_VERSION_NUMBER); + printf("\t-h\t\tPrint %s usage\n", cmd); +} + +static void fatal(const char *error) { + fprintf(stderr, "Error: %s\n", error); + exit(1); +} + +static void print_hex(uint8_t *bytes, size_t bytes_len) { + size_t i; + for (i = 0; i < bytes_len; ++i) { + printf("%02x", bytes[i]); + } + printf("\n"); +} + +/* +Runs Argon2 with certain inputs and parameters, inputs not cleared. Prints the +Base64-encoded hash string +@out output array with at least 32 bytes allocated +@pwd NULL-terminated string, presumably from argv[] +@salt salt array +@t_cost number of iterations +@m_cost amount of requested memory in KB +@lanes amount of requested parallelism +@threads actual parallelism +@type Argon2 type we want to run +@encoded_only display only the encoded hash +@raw_only display only the hexadecimal of the hash +@version Argon2 version +*/ +static void run(uint32_t outlen, char *pwd, size_t pwdlen, char *salt, uint32_t t_cost, + uint32_t m_cost, uint32_t lanes, uint32_t threads, + argon2_type type, int encoded_only, int raw_only, uint32_t version) { + clock_t start_time, stop_time; + size_t saltlen, encodedlen; + int result; + unsigned char * out = NULL; + char * encoded = NULL; + + start_time = clock(); + + if (!pwd) { + fatal("password missing"); + } + + if (!salt) { + clear_internal_memory(pwd, pwdlen); + fatal("salt missing"); + } + + saltlen = strlen(salt); + if(UINT32_MAX < saltlen) { + fatal("salt is too long"); + } + + UNUSED_PARAMETER(lanes); + + out = malloc(outlen + 1); + if (!out) { + clear_internal_memory(pwd, pwdlen); + fatal("could not allocate memory for output"); + } + + encodedlen = argon2_encodedlen(t_cost, m_cost, lanes, (uint32_t)saltlen, outlen, type); + encoded = malloc(encodedlen + 1); + if (!encoded) { + clear_internal_memory(pwd, pwdlen); + fatal("could not allocate memory for hash"); + } + + result = argon2_hash(t_cost, m_cost, threads, pwd, pwdlen, salt, saltlen, + out, outlen, encoded, encodedlen, type, + version); + if (result != ARGON2_OK) + fatal(argon2_error_message(result)); + + stop_time = clock(); + + if (encoded_only) + puts(encoded); + + if (raw_only) + print_hex(out, outlen); + + if (encoded_only || raw_only) { + free(out); + free(encoded); + return; + } + + printf("Hash:\t\t"); + print_hex(out, outlen); + free(out); + + printf("Encoded:\t%s\n", encoded); + + printf("%2.3f seconds\n", + ((double)stop_time - start_time) / (CLOCKS_PER_SEC)); + + result = argon2_verify(encoded, pwd, pwdlen, type); + if (result != ARGON2_OK) + fatal(argon2_error_message(result)); + printf("Verification ok\n"); + free(encoded); +} + +int main(int argc, char *argv[]) { + uint32_t outlen = OUTLEN_DEF; + uint32_t m_cost = 1 << LOG_M_COST_DEF; + uint32_t t_cost = T_COST_DEF; + uint32_t lanes = LANES_DEF; + uint32_t threads = THREADS_DEF; + argon2_type type = Argon2_i; /* Argon2i is the default type */ + int types_specified = 0; + int m_cost_specified = 0; + int encoded_only = 0; + int raw_only = 0; + uint32_t version = ARGON2_VERSION_NUMBER; + int i; + size_t pwdlen; + char pwd[MAX_PASS_LEN], *salt; + + if (argc < 2) { + usage(argv[0]); + return ARGON2_MISSING_ARGS; + } else if (argc >= 2 && strcmp(argv[1], "-h") == 0) { + usage(argv[0]); + return 1; + } + + /* get password from stdin */ + pwdlen = fread(pwd, 1, sizeof pwd, stdin); + if(pwdlen < 1) { + fatal("no password read"); + } + if(pwdlen == MAX_PASS_LEN) { + fatal("Provided password longer than supported in command line utility"); + } + + salt = argv[1]; + + /* parse options */ + for (i = 2; i < argc; i++) { + const char *a = argv[i]; + unsigned long input = 0; + if (!strcmp(a, "-h")) { + usage(argv[0]); + return 1; + } else if (!strcmp(a, "-m")) { + if (m_cost_specified) { + fatal("-m or -k can only be used once"); + } + m_cost_specified = 1; + if (i < argc - 1) { + i++; + input = strtoul(argv[i], NULL, 10); + if (input == 0 || input == ULONG_MAX || + input > ARGON2_MAX_MEMORY_BITS) { + fatal("bad numeric input for -m"); + } + m_cost = ARGON2_MIN(UINT64_C(1) << input, UINT32_C(0xFFFFFFFF)); + if (m_cost > ARGON2_MAX_MEMORY) { + fatal("m_cost overflow"); + } + continue; + } else { + fatal("missing -m argument"); + } + } else if (!strcmp(a, "-k")) { + if (m_cost_specified) { + fatal("-m or -k can only be used once"); + } + m_cost_specified = 1; + if (i < argc - 1) { + i++; + input = strtoul(argv[i], NULL, 10); + if (input == 0 || input == ULONG_MAX) { + fatal("bad numeric input for -k"); + } + m_cost = ARGON2_MIN(input, UINT32_C(0xFFFFFFFF)); + if (m_cost > ARGON2_MAX_MEMORY) { + fatal("m_cost overflow"); + } + continue; + } else { + fatal("missing -k argument"); + } + } else if (!strcmp(a, "-t")) { + if (i < argc - 1) { + i++; + input = strtoul(argv[i], NULL, 10); + if (input == 0 || input == ULONG_MAX || + input > ARGON2_MAX_TIME) { + fatal("bad numeric input for -t"); + } + t_cost = input; + continue; + } else { + fatal("missing -t argument"); + } + } else if (!strcmp(a, "-p")) { + if (i < argc - 1) { + i++; + input = strtoul(argv[i], NULL, 10); + if (input == 0 || input == ULONG_MAX || + input > ARGON2_MAX_THREADS || input > ARGON2_MAX_LANES) { + fatal("bad numeric input for -p"); + } + threads = input; + lanes = threads; + continue; + } else { + fatal("missing -p argument"); + } + } else if (!strcmp(a, "-l")) { + if (i < argc - 1) { + i++; + input = strtoul(argv[i], NULL, 10); + outlen = input; + continue; + } else { + fatal("missing -l argument"); + } + } else if (!strcmp(a, "-i")) { + type = Argon2_i; + ++types_specified; + } else if (!strcmp(a, "-d")) { + type = Argon2_d; + ++types_specified; + } else if (!strcmp(a, "-id")) { + type = Argon2_id; + ++types_specified; + } else if (!strcmp(a, "-e")) { + encoded_only = 1; + } else if (!strcmp(a, "-r")) { + raw_only = 1; + } else if (!strcmp(a, "-v")) { + if (i < argc - 1) { + i++; + if (!strcmp(argv[i], "10")) { + version = ARGON2_VERSION_10; + } else if (!strcmp(argv[i], "13")) { + version = ARGON2_VERSION_13; + } else { + fatal("invalid Argon2 version"); + } + } else { + fatal("missing -v argument"); + } + } else { + fatal("unknown argument"); + } + } + + if (types_specified > 1) { + fatal("cannot specify multiple Argon2 types"); + } + + if(encoded_only && raw_only) + fatal("cannot provide both -e and -r"); + + if(!encoded_only && !raw_only) { + printf("Type:\t\t%s\n", argon2_type2string(type, 1)); + printf("Iterations:\t%u\n", t_cost); + printf("Memory:\t\t%u KiB\n", m_cost); + printf("Parallelism:\t%u\n", lanes); + } + + run(outlen, pwd, pwdlen, salt, t_cost, m_cost, lanes, threads, type, + encoded_only, raw_only, version); + + return ARGON2_OK; +} + diff --git a/deps/phc-winner-argon2-20190702/src/test.c b/deps/phc-winner-argon2-20190702/src/test.c new file mode 100644 index 000000000..3180cbd13 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/src/test.c @@ -0,0 +1,289 @@ +/* + * Argon2 reference source code package - reference C implementations + * + * Copyright 2015 + * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves + * + * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of + * these licenses can be found at: + * + * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + * + * You should have received a copy of both of these licenses along with this + * software. If not, they may be obtained at the above URLs. + */ + +#include +#include +#include +#include +#include +#include + +#include "argon2.h" + +#define OUT_LEN 32 +#define ENCODED_LEN 108 + +/* Test harness will assert: + * argon2_hash() returns ARGON2_OK + * HEX output matches expected + * encoded output matches expected + * argon2_verify() correctly verifies value + */ + +void hashtest(uint32_t version, uint32_t t, uint32_t m, uint32_t p, char *pwd, + char *salt, char *hexref, char *mcfref, argon2_type type) { + unsigned char out[OUT_LEN]; + unsigned char hex_out[OUT_LEN * 2 + 4]; + char encoded[ENCODED_LEN]; + int ret, i; + + printf("Hash test: $v=%d t=%d, m=%d, p=%d, pass=%s, salt=%s: ", version, + t, m, p, pwd, salt); + + ret = argon2_hash(t, 1 << m, p, pwd, strlen(pwd), salt, strlen(salt), out, + OUT_LEN, encoded, ENCODED_LEN, type, version); + assert(ret == ARGON2_OK); + + for (i = 0; i < OUT_LEN; ++i) + sprintf((char *)(hex_out + i * 2), "%02x", out[i]); + assert(memcmp(hex_out, hexref, OUT_LEN * 2) == 0); + + if (ARGON2_VERSION_NUMBER == version) { + assert(memcmp(encoded, mcfref, strlen(mcfref)) == 0); + } + + ret = argon2_verify(encoded, pwd, strlen(pwd), type); + assert(ret == ARGON2_OK); + ret = argon2_verify(mcfref, pwd, strlen(pwd), type); + assert(ret == ARGON2_OK); + + printf("PASS\n"); +} + +int main() { + int ret; + unsigned char out[OUT_LEN]; + char const *msg; + int version; + + version = ARGON2_VERSION_10; + printf("Test Argon2i version number: %02x\n", version); + + /* Multiple test cases for various input values */ + hashtest(version, 2, 16, 1, "password", "somesalt", + "f6c4db4a54e2a370627aff3db6176b94a2a209a62c8e36152711802f7b30c694", + "$argon2i$m=65536,t=2,p=1$c29tZXNhbHQ" + "$9sTbSlTio3Biev89thdrlKKiCaYsjjYVJxGAL3swxpQ", Argon2_i); +#ifdef TEST_LARGE_RAM + hashtest(version, 2, 20, 1, "password", "somesalt", + "9690ec55d28d3ed32562f2e73ea62b02b018757643a2ae6e79528459de8106e9", + "$argon2i$m=1048576,t=2,p=1$c29tZXNhbHQ" + "$lpDsVdKNPtMlYvLnPqYrArAYdXZDoq5ueVKEWd6BBuk", Argon2_i); +#endif + hashtest(version, 2, 18, 1, "password", "somesalt", + "3e689aaa3d28a77cf2bc72a51ac53166761751182f1ee292e3f677a7da4c2467", + "$argon2i$m=262144,t=2,p=1$c29tZXNhbHQ" + "$Pmiaqj0op3zyvHKlGsUxZnYXURgvHuKS4/Z3p9pMJGc", Argon2_i); + hashtest(version, 2, 8, 1, "password", "somesalt", + "fd4dd83d762c49bdeaf57c47bdcd0c2f1babf863fdeb490df63ede9975fccf06", + "$argon2i$m=256,t=2,p=1$c29tZXNhbHQ" + "$/U3YPXYsSb3q9XxHvc0MLxur+GP960kN9j7emXX8zwY", Argon2_i); + hashtest(version, 2, 8, 2, "password", "somesalt", + "b6c11560a6a9d61eac706b79a2f97d68b4463aa3ad87e00c07e2b01e90c564fb", + "$argon2i$m=256,t=2,p=2$c29tZXNhbHQ" + "$tsEVYKap1h6scGt5ovl9aLRGOqOth+AMB+KwHpDFZPs", Argon2_i); + hashtest(version, 1, 16, 1, "password", "somesalt", + "81630552b8f3b1f48cdb1992c4c678643d490b2b5eb4ff6c4b3438b5621724b2", + "$argon2i$m=65536,t=1,p=1$c29tZXNhbHQ" + "$gWMFUrjzsfSM2xmSxMZ4ZD1JCytetP9sSzQ4tWIXJLI", Argon2_i); + hashtest(version, 4, 16, 1, "password", "somesalt", + "f212f01615e6eb5d74734dc3ef40ade2d51d052468d8c69440a3a1f2c1c2847b", + "$argon2i$m=65536,t=4,p=1$c29tZXNhbHQ" + "$8hLwFhXm6110c03D70Ct4tUdBSRo2MaUQKOh8sHChHs", Argon2_i); + hashtest(version, 2, 16, 1, "differentpassword", "somesalt", + "e9c902074b6754531a3a0be519e5baf404b30ce69b3f01ac3bf21229960109a3", + "$argon2i$m=65536,t=2,p=1$c29tZXNhbHQ" + "$6ckCB0tnVFMaOgvlGeW69ASzDOabPwGsO/ISKZYBCaM", Argon2_i); + hashtest(version, 2, 16, 1, "password", "diffsalt", + "79a103b90fe8aef8570cb31fc8b22259778916f8336b7bdac3892569d4f1c497", + "$argon2i$m=65536,t=2,p=1$ZGlmZnNhbHQ" + "$eaEDuQ/orvhXDLMfyLIiWXeJFvgza3vaw4kladTxxJc", Argon2_i); + + /* Error state tests */ + + /* Handle an invalid encoding correctly (it is missing a $) */ + ret = argon2_verify("$argon2i$m=65536,t=2,p=1c29tZXNhbHQ" + "$9sTbSlTio3Biev89thdrlKKiCaYsjjYVJxGAL3swxpQ", + "password", strlen("password"), Argon2_i); + assert(ret == ARGON2_DECODING_FAIL); + printf("Recognise an invalid encoding: PASS\n"); + + /* Handle an invalid encoding correctly (it is missing a $) */ + ret = argon2_verify("$argon2i$m=65536,t=2,p=1$c29tZXNhbHQ" + "9sTbSlTio3Biev89thdrlKKiCaYsjjYVJxGAL3swxpQ", + "password", strlen("password"), Argon2_i); + assert(ret == ARGON2_DECODING_FAIL); + printf("Recognise an invalid encoding: PASS\n"); + + /* Handle an invalid encoding correctly (salt is too short) */ + ret = argon2_verify("$argon2i$m=65536,t=2,p=1$" + "$9sTbSlTio3Biev89thdrlKKiCaYsjjYVJxGAL3swxpQ", + "password", strlen("password"), Argon2_i); + assert(ret == ARGON2_SALT_TOO_SHORT); + printf("Recognise an invalid salt in encoding: PASS\n"); + + /* Handle an mismatching hash (the encoded password is "passwore") */ + ret = argon2_verify("$argon2i$m=65536,t=2,p=1$c29tZXNhbHQ" + "$b2G3seW+uPzerwQQC+/E1K50CLLO7YXy0JRcaTuswRo", + "password", strlen("password"), Argon2_i); + assert(ret == ARGON2_VERIFY_MISMATCH); + printf("Verify with mismatched password: PASS\n"); + + msg = argon2_error_message(ARGON2_DECODING_FAIL); + assert(strcmp(msg, "Decoding failed") == 0); + printf("Decode an error message: PASS\n"); + + printf("\n"); + + version = ARGON2_VERSION_NUMBER; + printf("Test Argon2i version number: %02x\n", version); + + /* Multiple test cases for various input values */ + hashtest(version, 2, 16, 1, "password", "somesalt", + "c1628832147d9720c5bd1cfd61367078729f6dfb6f8fea9ff98158e0d7816ed0", + "$argon2i$v=19$m=65536,t=2,p=1$c29tZXNhbHQ" + "$wWKIMhR9lyDFvRz9YTZweHKfbftvj+qf+YFY4NeBbtA", Argon2_i); +#ifdef TEST_LARGE_RAM + hashtest(version, 2, 20, 1, "password", "somesalt", + "d1587aca0922c3b5d6a83edab31bee3c4ebaef342ed6127a55d19b2351ad1f41", + "$argon2i$v=19$m=1048576,t=2,p=1$c29tZXNhbHQ" + "$0Vh6ygkiw7XWqD7asxvuPE667zQu1hJ6VdGbI1GtH0E", Argon2_i); +#endif + hashtest(version, 2, 18, 1, "password", "somesalt", + "296dbae80b807cdceaad44ae741b506f14db0959267b183b118f9b24229bc7cb", + "$argon2i$v=19$m=262144,t=2,p=1$c29tZXNhbHQ" + "$KW266AuAfNzqrUSudBtQbxTbCVkmexg7EY+bJCKbx8s", Argon2_i); + hashtest(version, 2, 8, 1, "password", "somesalt", + "89e9029f4637b295beb027056a7336c414fadd43f6b208645281cb214a56452f", + "$argon2i$v=19$m=256,t=2,p=1$c29tZXNhbHQ" + "$iekCn0Y3spW+sCcFanM2xBT63UP2sghkUoHLIUpWRS8", Argon2_i); + hashtest(version, 2, 8, 2, "password", "somesalt", + "4ff5ce2769a1d7f4c8a491df09d41a9fbe90e5eb02155a13e4c01e20cd4eab61", + "$argon2i$v=19$m=256,t=2,p=2$c29tZXNhbHQ" + "$T/XOJ2mh1/TIpJHfCdQan76Q5esCFVoT5MAeIM1Oq2E", Argon2_i); + hashtest(version, 1, 16, 1, "password", "somesalt", + "d168075c4d985e13ebeae560cf8b94c3b5d8a16c51916b6f4ac2da3ac11bbecf", + "$argon2i$v=19$m=65536,t=1,p=1$c29tZXNhbHQ" + "$0WgHXE2YXhPr6uVgz4uUw7XYoWxRkWtvSsLaOsEbvs8", Argon2_i); + hashtest(version, 4, 16, 1, "password", "somesalt", + "aaa953d58af3706ce3df1aefd4a64a84e31d7f54175231f1285259f88174ce5b", + "$argon2i$v=19$m=65536,t=4,p=1$c29tZXNhbHQ" + "$qqlT1YrzcGzj3xrv1KZKhOMdf1QXUjHxKFJZ+IF0zls", Argon2_i); + hashtest(version, 2, 16, 1, "differentpassword", "somesalt", + "14ae8da01afea8700c2358dcef7c5358d9021282bd88663a4562f59fb74d22ee", + "$argon2i$v=19$m=65536,t=2,p=1$c29tZXNhbHQ" + "$FK6NoBr+qHAMI1jc73xTWNkCEoK9iGY6RWL1n7dNIu4", Argon2_i); + hashtest(version, 2, 16, 1, "password", "diffsalt", + "b0357cccfbef91f3860b0dba447b2348cbefecadaf990abfe9cc40726c521271", + "$argon2i$v=19$m=65536,t=2,p=1$ZGlmZnNhbHQ" + "$sDV8zPvvkfOGCw26RHsjSMvv7K2vmQq/6cxAcmxSEnE", Argon2_i); + + + /* Error state tests */ + + /* Handle an invalid encoding correctly (it is missing a $) */ + ret = argon2_verify("$argon2i$v=19$m=65536,t=2,p=1c29tZXNhbHQ" + "$wWKIMhR9lyDFvRz9YTZweHKfbftvj+qf+YFY4NeBbtA", + "password", strlen("password"), Argon2_i); + assert(ret == ARGON2_DECODING_FAIL); + printf("Recognise an invalid encoding: PASS\n"); + + /* Handle an invalid encoding correctly (it is missing a $) */ + ret = argon2_verify("$argon2i$v=19$m=65536,t=2,p=1$c29tZXNhbHQ" + "wWKIMhR9lyDFvRz9YTZweHKfbftvj+qf+YFY4NeBbtA", + "password", strlen("password"), Argon2_i); + assert(ret == ARGON2_DECODING_FAIL); + printf("Recognise an invalid encoding: PASS\n"); + + /* Handle an invalid encoding correctly (salt is too short) */ + ret = argon2_verify("$argon2i$v=19$m=65536,t=2,p=1$" + "$9sTbSlTio3Biev89thdrlKKiCaYsjjYVJxGAL3swxpQ", + "password", strlen("password"), Argon2_i); + assert(ret == ARGON2_SALT_TOO_SHORT); + printf("Recognise an invalid salt in encoding: PASS\n"); + + /* Handle an mismatching hash (the encoded password is "passwore") */ + ret = argon2_verify("$argon2i$v=19$m=65536,t=2,p=1$c29tZXNhbHQ" + "$8iIuixkI73Js3G1uMbezQXD0b8LG4SXGsOwoQkdAQIM", + "password", strlen("password"), Argon2_i); + assert(ret == ARGON2_VERIFY_MISMATCH); + printf("Verify with mismatched password: PASS\n"); + + msg = argon2_error_message(ARGON2_DECODING_FAIL); + assert(strcmp(msg, "Decoding failed") == 0); + printf("Decode an error message: PASS\n\n"); + + printf("Test Argon2id version number: %02x\n", version); + + /* Multiple test cases for various input values */ + hashtest(version, 2, 16, 1, "password", "somesalt", + "09316115d5cf24ed5a15a31a3ba326e5cf32edc24702987c02b6566f61913cf7", + "$argon2id$v=19$m=65536,t=2,p=1$c29tZXNhbHQ" + "$CTFhFdXPJO1aFaMaO6Mm5c8y7cJHAph8ArZWb2GRPPc", Argon2_id); + hashtest(version, 2, 18, 1, "password", "somesalt", + "78fe1ec91fb3aa5657d72e710854e4c3d9b9198c742f9616c2f085bed95b2e8c", + "$argon2id$v=19$m=262144,t=2,p=1$c29tZXNhbHQ" + "$eP4eyR+zqlZX1y5xCFTkw9m5GYx0L5YWwvCFvtlbLow", Argon2_id); + hashtest(version, 2, 8, 1, "password", "somesalt", + "9dfeb910e80bad0311fee20f9c0e2b12c17987b4cac90c2ef54d5b3021c68bfe", + "$argon2id$v=19$m=256,t=2,p=1$c29tZXNhbHQ" + "$nf65EOgLrQMR/uIPnA4rEsF5h7TKyQwu9U1bMCHGi/4", Argon2_id); + hashtest(version, 2, 8, 2, "password", "somesalt", + "6d093c501fd5999645e0ea3bf620d7b8be7fd2db59c20d9fff9539da2bf57037", + "$argon2id$v=19$m=256,t=2,p=2$c29tZXNhbHQ" + "$bQk8UB/VmZZF4Oo79iDXuL5/0ttZwg2f/5U52iv1cDc", Argon2_id); + hashtest(version, 1, 16, 1, "password", "somesalt", + "f6a5adc1ba723dddef9b5ac1d464e180fcd9dffc9d1cbf76cca2fed795d9ca98", + "$argon2id$v=19$m=65536,t=1,p=1$c29tZXNhbHQ" + "$9qWtwbpyPd3vm1rB1GThgPzZ3/ydHL92zKL+15XZypg", Argon2_id); + hashtest(version, 4, 16, 1, "password", "somesalt", + "9025d48e68ef7395cca9079da4c4ec3affb3c8911fe4f86d1a2520856f63172c", + "$argon2id$v=19$m=65536,t=4,p=1$c29tZXNhbHQ" + "$kCXUjmjvc5XMqQedpMTsOv+zyJEf5PhtGiUghW9jFyw", Argon2_id); + hashtest(version, 2, 16, 1, "differentpassword", "somesalt", + "0b84d652cf6b0c4beaef0dfe278ba6a80df6696281d7e0d2891b817d8c458fde", + "$argon2id$v=19$m=65536,t=2,p=1$c29tZXNhbHQ" + "$C4TWUs9rDEvq7w3+J4umqA32aWKB1+DSiRuBfYxFj94", Argon2_id); + hashtest(version, 2, 16, 1, "password", "diffsalt", + "bdf32b05ccc42eb15d58fd19b1f856b113da1e9a5874fdcc544308565aa8141c", + "$argon2id$v=19$m=65536,t=2,p=1$ZGlmZnNhbHQ" + "$vfMrBczELrFdWP0ZsfhWsRPaHppYdP3MVEMIVlqoFBw", Argon2_id); + + /* Common error state tests */ + + printf("\n"); + printf("Common error state tests\n"); + + ret = argon2_hash(2, 1, 1, "password", strlen("password"), + "diffsalt", strlen("diffsalt"), + out, OUT_LEN, NULL, 0, Argon2_id, version); + assert(ret == ARGON2_MEMORY_TOO_LITTLE); + printf("Fail on invalid memory: PASS\n"); + + ret = argon2_hash(2, 1 << 12, 1, NULL, strlen("password"), + "diffsalt", strlen("diffsalt"), + out, OUT_LEN, NULL, 0, Argon2_id, version); + assert(ret == ARGON2_PWD_PTR_MISMATCH); + printf("Fail on invalid null pointer: PASS\n"); + + ret = argon2_hash(2, 1 << 12, 1, "password", strlen("password"), "s", 1, + out, OUT_LEN, NULL, 0, Argon2_id, version); + assert(ret == ARGON2_SALT_TOO_SHORT); + printf("Fail on salt too short: PASS\n"); + + return 0; +} diff --git a/deps/phc-winner-argon2-20190702/src/thread.c b/deps/phc-winner-argon2-20190702/src/thread.c new file mode 100644 index 000000000..e099a00d2 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/src/thread.c @@ -0,0 +1,57 @@ +/* + * Argon2 reference source code package - reference C implementations + * + * Copyright 2015 + * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves + * + * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of + * these licenses can be found at: + * + * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + * + * You should have received a copy of both of these licenses along with this + * software. If not, they may be obtained at the above URLs. + */ + +#if !defined(ARGON2_NO_THREADS) + +#include "thread.h" +#if defined(_WIN32) +#include +#endif + +int argon2_thread_create(argon2_thread_handle_t *handle, + argon2_thread_func_t func, void *args) { + if (NULL == handle || func == NULL) { + return -1; + } +#if defined(_WIN32) + *handle = _beginthreadex(NULL, 0, func, args, 0, NULL); + return *handle != 0 ? 0 : -1; +#else + return pthread_create(handle, NULL, func, args); +#endif +} + +int argon2_thread_join(argon2_thread_handle_t handle) { +#if defined(_WIN32) + if (WaitForSingleObject((HANDLE)handle, INFINITE) == WAIT_OBJECT_0) { + return CloseHandle((HANDLE)handle) != 0 ? 0 : -1; + } + return -1; +#else + return pthread_join(handle, NULL); +#endif +} + +void argon2_thread_exit(void) { +#if defined(_WIN32) + _endthreadex(0); +#else + pthread_exit(NULL); +#endif +} + +#endif /* ARGON2_NO_THREADS */ diff --git a/deps/phc-winner-argon2-20190702/src/thread.h b/deps/phc-winner-argon2-20190702/src/thread.h new file mode 100644 index 000000000..49d88367b --- /dev/null +++ b/deps/phc-winner-argon2-20190702/src/thread.h @@ -0,0 +1,67 @@ +/* + * Argon2 reference source code package - reference C implementations + * + * Copyright 2015 + * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves + * + * You may use this work under the terms of a Creative Commons CC0 1.0 + * License/Waiver or the Apache Public License 2.0, at your option. The terms of + * these licenses can be found at: + * + * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 + * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 + * + * You should have received a copy of both of these licenses along with this + * software. If not, they may be obtained at the above URLs. + */ + +#ifndef ARGON2_THREAD_H +#define ARGON2_THREAD_H + +#if !defined(ARGON2_NO_THREADS) + +/* + Here we implement an abstraction layer for the simpĺe requirements + of the Argon2 code. We only require 3 primitives---thread creation, + joining, and termination---so full emulation of the pthreads API + is unwarranted. Currently we wrap pthreads and Win32 threads. + + The API defines 2 types: the function pointer type, + argon2_thread_func_t, + and the type of the thread handle---argon2_thread_handle_t. +*/ +#if defined(_WIN32) +#include +typedef unsigned(__stdcall *argon2_thread_func_t)(void *); +typedef uintptr_t argon2_thread_handle_t; +#else +#include +typedef void *(*argon2_thread_func_t)(void *); +typedef pthread_t argon2_thread_handle_t; +#endif + +/* Creates a thread + * @param handle pointer to a thread handle, which is the output of this + * function. Must not be NULL. + * @param func A function pointer for the thread's entry point. Must not be + * NULL. + * @param args Pointer that is passed as an argument to @func. May be NULL. + * @return 0 if @handle and @func are valid pointers and a thread is successfully + * created. + */ +int argon2_thread_create(argon2_thread_handle_t *handle, + argon2_thread_func_t func, void *args); + +/* Waits for a thread to terminate + * @param handle Handle to a thread created with argon2_thread_create. + * @return 0 if @handle is a valid handle, and joining completed successfully. +*/ +int argon2_thread_join(argon2_thread_handle_t handle); + +/* Terminate the current thread. Must be run inside a thread created by + * argon2_thread_create. +*/ +void argon2_thread_exit(void); + +#endif /* ARGON2_NO_THREADS */ +#endif diff --git a/deps/phc-winner-argon2-20190702/vs2015/Argon2Opt/Argon2Opt.vcxproj b/deps/phc-winner-argon2-20190702/vs2015/Argon2Opt/Argon2Opt.vcxproj new file mode 100644 index 000000000..357b4bd2b --- /dev/null +++ b/deps/phc-winner-argon2-20190702/vs2015/Argon2Opt/Argon2Opt.vcxproj @@ -0,0 +1,231 @@ + + + + + Debug + Win32 + + + ReleaseStatic + Win32 + + + ReleaseStatic + x64 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {CAA75C57-998C-494E-B8A5-5894EF0FC528} + Argon2Opt + 8.1 + + + + + v100 + + + $(DefaultPlatformToolset) + + + Application + true + MultiByte + + + Application + false + true + MultiByte + + + Application + false + true + MultiByte + + + Application + true + MultiByte + + + Application + false + true + MultiByte + + + Application + false + true + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + + Level3 + Disabled + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + + + Level3 + Disabled + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreaded + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreaded + + + true + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/deps/phc-winner-argon2-20190702/vs2015/Argon2Opt/Argon2Opt.vcxproj.filters b/deps/phc-winner-argon2-20190702/vs2015/Argon2Opt/Argon2Opt.vcxproj.filters new file mode 100644 index 000000000..536602bde --- /dev/null +++ b/deps/phc-winner-argon2-20190702/vs2015/Argon2Opt/Argon2Opt.vcxproj.filters @@ -0,0 +1,69 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/deps/phc-winner-argon2-20190702/vs2015/Argon2OptBench/Argon2OptBench.vcxproj b/deps/phc-winner-argon2-20190702/vs2015/Argon2OptBench/Argon2OptBench.vcxproj new file mode 100644 index 000000000..e5ba5b3a8 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/vs2015/Argon2OptBench/Argon2OptBench.vcxproj @@ -0,0 +1,231 @@ + + + + + Debug + Win32 + + + ReleaseStatic + Win32 + + + ReleaseStatic + x64 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {B3A0FB44-0C1C-4EC3-B155-8B39371F8EE4} + Argon2OptBench + 8.1 + + + + + v100 + + + $(DefaultPlatformToolset) + + + Application + true + MultiByte + + + Application + false + true + MultiByte + + + Application + false + true + MultiByte + + + Application + true + MultiByte + + + Application + false + true + MultiByte + + + Application + false + true + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + + Level3 + Disabled + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + + + Level3 + Disabled + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreaded + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreaded + + + true + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/deps/phc-winner-argon2-20190702/vs2015/Argon2OptBench/Argon2OptBench.vcxproj.filters b/deps/phc-winner-argon2-20190702/vs2015/Argon2OptBench/Argon2OptBench.vcxproj.filters new file mode 100644 index 000000000..0cc0d957b --- /dev/null +++ b/deps/phc-winner-argon2-20190702/vs2015/Argon2OptBench/Argon2OptBench.vcxproj.filters @@ -0,0 +1,69 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/deps/phc-winner-argon2-20190702/vs2015/Argon2OptDll/Argon2OptDll.vcxproj b/deps/phc-winner-argon2-20190702/vs2015/Argon2OptDll/Argon2OptDll.vcxproj new file mode 100644 index 000000000..71eb33d06 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/vs2015/Argon2OptDll/Argon2OptDll.vcxproj @@ -0,0 +1,230 @@ + + + + + Debug + Win32 + + + ReleaseStatic + Win32 + + + ReleaseStatic + x64 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {3A898DD8-ACAE-4269-ADFE-EB7260D71583} + Argon2OptDll + 8.1 + + + + + v100 + + + $(DefaultPlatformToolset) + + + DynamicLibrary + true + MultiByte + + + DynamicLibrary + false + true + MultiByte + + + DynamicLibrary + false + true + MultiByte + + + DynamicLibrary + true + MultiByte + + + DynamicLibrary + false + true + MultiByte + + + DynamicLibrary + false + true + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + + Level3 + Disabled + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + + + Level3 + Disabled + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreaded + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreaded + + + true + true + true + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/deps/phc-winner-argon2-20190702/vs2015/Argon2OptDll/Argon2OptDll.vcxproj.filters b/deps/phc-winner-argon2-20190702/vs2015/Argon2OptDll/Argon2OptDll.vcxproj.filters new file mode 100644 index 000000000..c7a778817 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/vs2015/Argon2OptDll/Argon2OptDll.vcxproj.filters @@ -0,0 +1,66 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + diff --git a/deps/phc-winner-argon2-20190702/vs2015/Argon2OptGenKAT/Argon2OptGenKAT.vcxproj b/deps/phc-winner-argon2-20190702/vs2015/Argon2OptGenKAT/Argon2OptGenKAT.vcxproj new file mode 100644 index 000000000..44c97d157 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/vs2015/Argon2OptGenKAT/Argon2OptGenKAT.vcxproj @@ -0,0 +1,244 @@ + + + + + Debug + Win32 + + + ReleaseStatic + Win32 + + + ReleaseStatic + x64 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {DBBAAAE6-4560-4D11-8280-30A6650A82EF} + Argon2OptGenKAT + 8.1 + + + + + v100 + + + $(DefaultPlatformToolset) + + + Application + true + MultiByte + + + Application + false + true + MultiByte + + + Application + false + true + MultiByte + + + Application + true + MultiByte + + + Application + false + true + MultiByte + + + Application + false + true + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + + Level3 + Disabled + true + _CRT_SECURE_NO_WARNINGS;GENKAT;%(PreprocessorDefinitions) + + + + + + + Level3 + Disabled + true + _CRT_SECURE_NO_WARNINGS;GENKAT;%(PreprocessorDefinitions) + + + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;GENKAT;%(PreprocessorDefinitions) + + + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;GENKAT;%(PreprocessorDefinitions) + + + MultiThreaded + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;GENKAT;%(PreprocessorDefinitions) + + + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;GENKAT;%(PreprocessorDefinitions) + + + MultiThreaded + + + true + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/deps/phc-winner-argon2-20190702/vs2015/Argon2OptGenKAT/Argon2OptGenKAT.vcxproj.filters b/deps/phc-winner-argon2-20190702/vs2015/Argon2OptGenKAT/Argon2OptGenKAT.vcxproj.filters new file mode 100644 index 000000000..ff8595575 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/vs2015/Argon2OptGenKAT/Argon2OptGenKAT.vcxproj.filters @@ -0,0 +1,72 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/deps/phc-winner-argon2-20190702/vs2015/Argon2OptTestCI/Argon2OptTestCI.vcxproj b/deps/phc-winner-argon2-20190702/vs2015/Argon2OptTestCI/Argon2OptTestCI.vcxproj new file mode 100644 index 000000000..43cab0a1e --- /dev/null +++ b/deps/phc-winner-argon2-20190702/vs2015/Argon2OptTestCI/Argon2OptTestCI.vcxproj @@ -0,0 +1,235 @@ + + + + + Debug + Win32 + + + ReleaseStatic + Win32 + + + ReleaseStatic + x64 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {12956597-5E42-433A-93F3-D4EFF50AA207} + Argon2 + 8.1 + Argon2OptTestCI + + + + + v100 + + + $(DefaultPlatformToolset) + + + Application + true + MultiByte + + + Application + false + true + MultiByte + + + Application + false + true + MultiByte + + + Application + true + MultiByte + + + Application + false + true + MultiByte + + + Application + false + true + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + + + $(SolutionDir)include;$(IncludePath) + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + + + $(SolutionDir)include;$(IncludePath) + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + + + $(SolutionDir)include;$(IncludePath) + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + + + $(SolutionDir)include;$(IncludePath) + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + + + $(SolutionDir)include;$(IncludePath) + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + + + $(SolutionDir)include;$(IncludePath) + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + + + + Level3 + Disabled + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + + + Level3 + Disabled + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreaded + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreaded + + + true + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/deps/phc-winner-argon2-20190702/vs2015/Argon2OptTestCI/Argon2OptTestCI.vcxproj.filters b/deps/phc-winner-argon2-20190702/vs2015/Argon2OptTestCI/Argon2OptTestCI.vcxproj.filters new file mode 100644 index 000000000..bcd4dabc4 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/vs2015/Argon2OptTestCI/Argon2OptTestCI.vcxproj.filters @@ -0,0 +1,69 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/deps/phc-winner-argon2-20190702/vs2015/Argon2Ref/Argon2Ref.vcxproj b/deps/phc-winner-argon2-20190702/vs2015/Argon2Ref/Argon2Ref.vcxproj new file mode 100644 index 000000000..a25cd2322 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/vs2015/Argon2Ref/Argon2Ref.vcxproj @@ -0,0 +1,243 @@ + + + + + Debug + Win32 + + + ReleaseStatic + Win32 + + + ReleaseStatic + x64 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2} + Argon2Ref + 8.1 + + + + + v100 + + + $(DefaultPlatformToolset) + + + Application + true + MultiByte + + + Application + false + true + MultiByte + + + Application + false + true + MultiByte + + + Application + true + MultiByte + + + Application + false + true + MultiByte + + + Application + false + true + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + + Level3 + Disabled + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + ProgramDatabase + + + true + + + + + Level3 + Disabled + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + ProgramDatabase + + + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + ProgramDatabase + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreaded + ProgramDatabase + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + ProgramDatabase + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreaded + ProgramDatabase + + + true + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/deps/phc-winner-argon2-20190702/vs2015/Argon2Ref/Argon2Ref.vcxproj.filters b/deps/phc-winner-argon2-20190702/vs2015/Argon2Ref/Argon2Ref.vcxproj.filters new file mode 100644 index 000000000..379cf2e49 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/vs2015/Argon2Ref/Argon2Ref.vcxproj.filters @@ -0,0 +1,69 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/deps/phc-winner-argon2-20190702/vs2015/Argon2RefBench/Argon2RefBench.vcxproj b/deps/phc-winner-argon2-20190702/vs2015/Argon2RefBench/Argon2RefBench.vcxproj new file mode 100644 index 000000000..0106eb71d --- /dev/null +++ b/deps/phc-winner-argon2-20190702/vs2015/Argon2RefBench/Argon2RefBench.vcxproj @@ -0,0 +1,231 @@ + + + + + Debug + Win32 + + + ReleaseStatic + Win32 + + + ReleaseStatic + x64 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {99203F6A-6E8C-42FC-8C7C-C07E8913D539} + Argon2RefBench + 8.1 + + + + + v100 + + + $(DefaultPlatformToolset) + + + Application + true + MultiByte + + + Application + false + true + MultiByte + + + Application + false + true + MultiByte + + + Application + true + MultiByte + + + Application + false + true + MultiByte + + + Application + false + true + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + + Level3 + Disabled + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + + + Level3 + Disabled + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreaded + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreaded + + + true + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/deps/phc-winner-argon2-20190702/vs2015/Argon2RefBench/Argon2RefBench.vcxproj.filters b/deps/phc-winner-argon2-20190702/vs2015/Argon2RefBench/Argon2RefBench.vcxproj.filters new file mode 100644 index 000000000..222279aa5 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/vs2015/Argon2RefBench/Argon2RefBench.vcxproj.filters @@ -0,0 +1,69 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/deps/phc-winner-argon2-20190702/vs2015/Argon2RefDll/Argon2RefDll.vcxproj b/deps/phc-winner-argon2-20190702/vs2015/Argon2RefDll/Argon2RefDll.vcxproj new file mode 100644 index 000000000..623aaaccc --- /dev/null +++ b/deps/phc-winner-argon2-20190702/vs2015/Argon2RefDll/Argon2RefDll.vcxproj @@ -0,0 +1,230 @@ + + + + + Debug + Win32 + + + ReleaseStatic + Win32 + + + ReleaseStatic + x64 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {19D911A1-533C-4475-B313-F372481A35D4} + Argon2RefDll + 8.1 + + + + + v100 + + + $(DefaultPlatformToolset) + + + DynamicLibrary + true + MultiByte + + + DynamicLibrary + false + true + MultiByte + + + DynamicLibrary + false + true + MultiByte + + + DynamicLibrary + true + MultiByte + + + DynamicLibrary + false + true + MultiByte + + + DynamicLibrary + false + true + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + + Level3 + Disabled + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + + + Level3 + Disabled + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreaded + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreaded + + + true + true + true + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/deps/phc-winner-argon2-20190702/vs2015/Argon2RefDll/Argon2RefDll.vcxproj.filters b/deps/phc-winner-argon2-20190702/vs2015/Argon2RefDll/Argon2RefDll.vcxproj.filters new file mode 100644 index 000000000..ad43f914b --- /dev/null +++ b/deps/phc-winner-argon2-20190702/vs2015/Argon2RefDll/Argon2RefDll.vcxproj.filters @@ -0,0 +1,66 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + diff --git a/deps/phc-winner-argon2-20190702/vs2015/Argon2RefGenKAT/Argon2RefGenKAT.vcxproj b/deps/phc-winner-argon2-20190702/vs2015/Argon2RefGenKAT/Argon2RefGenKAT.vcxproj new file mode 100644 index 000000000..f59143958 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/vs2015/Argon2RefGenKAT/Argon2RefGenKAT.vcxproj @@ -0,0 +1,232 @@ + + + + + Debug + Win32 + + + ReleaseStatic + Win32 + + + ReleaseStatic + x64 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {71921B4C-A795-4A37-95A3-99D600E01211} + Argon2RefGenKAT + 8.1 + + + + + v100 + + + $(DefaultPlatformToolset) + + + Application + true + MultiByte + + + Application + false + true + MultiByte + + + Application + false + true + MultiByte + + + Application + true + MultiByte + + + Application + false + true + MultiByte + + + Application + false + true + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + $(SolutionDir)include;$(IncludePath) + + + + Level3 + Disabled + true + _CRT_SECURE_NO_WARNINGS;GENKAT;%(PreprocessorDefinitions) + + + + + Level3 + Disabled + true + _CRT_SECURE_NO_WARNINGS;GENKAT;%(PreprocessorDefinitions) + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;GENKAT;%(PreprocessorDefinitions) + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;GENKAT;%(PreprocessorDefinitions) + MultiThreaded + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;GENKAT;%(PreprocessorDefinitions) + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;GENKAT;%(PreprocessorDefinitions) + MultiThreaded + + + true + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/deps/phc-winner-argon2-20190702/vs2015/Argon2RefGenKAT/Argon2RefGenKAT.vcxproj.filters b/deps/phc-winner-argon2-20190702/vs2015/Argon2RefGenKAT/Argon2RefGenKAT.vcxproj.filters new file mode 100644 index 000000000..8490c8a9a --- /dev/null +++ b/deps/phc-winner-argon2-20190702/vs2015/Argon2RefGenKAT/Argon2RefGenKAT.vcxproj.filters @@ -0,0 +1,72 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/deps/phc-winner-argon2-20190702/vs2015/Argon2RefTestCI/Argon2RefTestCI.vcxproj b/deps/phc-winner-argon2-20190702/vs2015/Argon2RefTestCI/Argon2RefTestCI.vcxproj new file mode 100644 index 000000000..9e9fa0809 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/vs2015/Argon2RefTestCI/Argon2RefTestCI.vcxproj @@ -0,0 +1,231 @@ + + + + + Debug + Win32 + + + ReleaseStatic + Win32 + + + ReleaseStatic + x64 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {8A1F7F84-34AF-4DB2-9D58-D4823DFE79E9} + Argon2RefTestCI + 8.1 + + + + + v100 + + + $(DefaultPlatformToolset) + + + Application + true + MultiByte + + + Application + false + true + MultiByte + + + Application + false + true + MultiByte + + + Application + true + MultiByte + + + Application + false + true + MultiByte + + + Application + false + true + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + + + $(SolutionDir)include;$(IncludePath) + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + + + $(SolutionDir)include;$(IncludePath) + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + + + $(SolutionDir)include;$(IncludePath) + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + + + $(SolutionDir)include;$(IncludePath) + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + + + $(SolutionDir)include;$(IncludePath) + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + + + $(SolutionDir)include;$(IncludePath) + $(SolutionDir)vs2015\build\ + $(SolutionDir)vs2015\build\$(ProjectName)\ + + + + Level3 + Disabled + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + + + Level3 + Disabled + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreaded + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + true + true + true + + + + + Level3 + MaxSpeed + true + true + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreaded + + + true + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/deps/phc-winner-argon2-20190702/vs2015/Argon2RefTestCI/Argon2RefTestCI.vcxproj.filters b/deps/phc-winner-argon2-20190702/vs2015/Argon2RefTestCI/Argon2RefTestCI.vcxproj.filters new file mode 100644 index 000000000..32bca82c5 --- /dev/null +++ b/deps/phc-winner-argon2-20190702/vs2015/Argon2RefTestCI/Argon2RefTestCI.vcxproj.filters @@ -0,0 +1,69 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/src/bridges/bridge_argon2id_reference.c b/src/bridges/bridge_argon2id_reference.c new file mode 100644 index 000000000..5483950c9 --- /dev/null +++ b/src/bridges/bridge_argon2id_reference.c @@ -0,0 +1,299 @@ +/** + * Author......: See docs/credits.txt + * License.....: MIT + */ + +#include "common.h" +#include "types.h" +#include "bridges.h" +#include "memory.h" + +// argon2 reference + +#undef _DEFAULT_SOURCE + +#include "argon2.c" +#include "core.c" +#include "blake2/blake2b.c" +#include "opt.c" + +// good: we can use this multiplier do reduce copy overhead to increase the guessing speed, +// bad: but we also increase the password candidate batch size. +// slow hashes which make use of this bridge probably are used with smaller wordlists, +// and therefore it's easier for hashcat to parallelize if this multiplier is low. +// in the end, it's a trade-off. + +#define N_ACCEL 8 + +typedef struct +{ + // input + + u32 pw_buf[64]; + u32 pw_len; + + // output + + u32 h[64]; + +} argon2_reference_tmp_t; + +typedef struct +{ + u32 salt_buf[64]; + u32 salt_len; + + u32 digest_buf[64]; + u32 digest_len; + + u32 m; + u32 t; + u32 p; + +} argon2_t; + +typedef struct +{ + // template + + char unit_info_buf[1024]; + int unit_info_len; + + u64 workitem_count; + size_t workitem_size; + + // implementation specific + + void *memory; + +} unit_t; + +typedef struct +{ + unit_t *units_buf; + int units_cnt; + +} bridge_argon2id_t; + +static bool units_init (bridge_argon2id_t *bridge_argon2id) +{ + #if defined (_WIN) + + SYSTEM_INFO sysinfo; + + GetSystemInfo (&sysinfo); + + int num_devices = sysinfo.dwNumberOfProcessors; + + #else + + int num_devices = sysconf (_SC_NPROCESSORS_ONLN); + + #endif + + // this works really good for me, I think is because of register pressure on SIMD enabled code + num_devices /= 2; + + // this is just a wild guess, but memory bus will probably bottleneck if we + // have too many cores using it. we set some upper limit which is not ideal, but good enough for now. + //num_devices = MIN (num_devices, 8); + + unit_t *units_buf = (unit_t *) hccalloc (num_devices, sizeof (unit_t)); + + int units_cnt = 0; + + for (int i = 0; i < num_devices; i++) + { + unit_t *unit_buf = &units_buf[i]; + + unit_buf->unit_info_len = snprintf (unit_buf->unit_info_buf, sizeof (unit_buf->unit_info_buf) - 1, + "%s", + "Argon2 reference implementation + tunings"); + + unit_buf->unit_info_buf[unit_buf->unit_info_len] = 0; + + unit_buf->workitem_count = N_ACCEL; + + units_cnt++; + } + + bridge_argon2id->units_buf = units_buf; + bridge_argon2id->units_cnt = units_cnt; + + return true; +} + +static void units_term (bridge_argon2id_t *bridge_argon2id) +{ + if (bridge_argon2id->units_buf) + { + hcfree (bridge_argon2id->units_buf); + } +} + +void *platform_init () +{ + // bridge_argon2id_t will be our platform context + + bridge_argon2id_t *bridge_argon2id = (bridge_argon2id_t *) hcmalloc (sizeof (bridge_argon2id_t)); + + if (units_init (bridge_argon2id) == false) + { + hcfree (bridge_argon2id); + + return NULL; + } + + return bridge_argon2id; +} + +void platform_term (void *platform_context) +{ + bridge_argon2id_t *bridge_argon2id = platform_context; + + if (bridge_argon2id) + { + units_term (bridge_argon2id); + + hcfree (bridge_argon2id); + } +} + +int get_unit_count (void *platform_context) +{ + bridge_argon2id_t *bridge_argon2id = platform_context; + + return bridge_argon2id->units_cnt; +} + +// we support units of mixed speed, that's why the workitem count is unit specific + +int get_workitem_count (void *platform_context, const int unit_idx) +{ + bridge_argon2id_t *bridge_argon2id = platform_context; + + unit_t *unit_buf = &bridge_argon2id->units_buf[unit_idx]; + + return unit_buf->workitem_count; +} + +char *get_unit_info (void *platform_context, const int unit_idx) +{ + bridge_argon2id_t *bridge_argon2id = platform_context; + + unit_t *unit_buf = &bridge_argon2id->units_buf[unit_idx]; + + return unit_buf->unit_info_buf; +} + +bool salt_prepare (void *platform_context, MAYBE_UNUSED hashconfig_t *hashconfig, MAYBE_UNUSED hashes_t *hashes) +{ + // we can use self-test hash as base + + argon2_t *argon2_st = (argon2_t *) hashes->st_esalts_buf; + + size_t largest_m = argon2_st->m; + + // from here regular hashes + + argon2_t *argon2 = (argon2_t *) hashes->esalts_buf; + + for (u32 salt_idx = 0; salt_idx < hashes->salts_cnt; salt_idx++, argon2++) + { + if (argon2->m > largest_m) largest_m = argon2->m; + } + + bridge_argon2id_t *bridge_argon2id = platform_context; + + for (int unit_idx = 0; unit_idx < bridge_argon2id->units_cnt; unit_idx++) + { + unit_t *unit_buf = &bridge_argon2id->units_buf[unit_idx]; + + unit_buf->memory = hcmalloc_aligned ((largest_m * 1024), 32); // because AVX2 + } + + return true; +} + +void salt_destroy (void *platform_context, MAYBE_UNUSED hashconfig_t *hashconfig, MAYBE_UNUSED hashes_t *hashes) +{ + bridge_argon2id_t *bridge_argon2id = platform_context; + + for (int unit_idx = 0; unit_idx < bridge_argon2id->units_cnt; unit_idx++) + { + unit_t *unit_buf = &bridge_argon2id->units_buf[unit_idx]; + + hcfree_aligned (unit_buf->memory); + } +} + +bool launch_loop (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_param_t *device_param, MAYBE_UNUSED hashconfig_t *hashconfig, MAYBE_UNUSED hashes_t *hashes, MAYBE_UNUSED const u32 salt_pos, MAYBE_UNUSED const u64 pws_cnt) +{ + bridge_argon2id_t *bridge_argon2id = platform_context; + + const int unit_idx = device_param->bridge_link_device; + + unit_t *unit_buf = &bridge_argon2id->units_buf[unit_idx]; + + argon2_t *esalts_buf = (argon2_t *) hashes->esalts_buf; + + argon2_t *argon2id = &esalts_buf[salt_pos]; + + argon2_reference_tmp_t *argon2_reference_tmp = (argon2_reference_tmp_t *) device_param->h_tmps; + + argon2_context context; + + context.out = (uint8_t *) NULL; + context.outlen = (uint32_t) 0; + context.pwd = (uint8_t *) NULL; + context.pwdlen = (uint32_t) 0; + context.salt = (uint8_t *) argon2id->salt_buf; + context.saltlen = (uint32_t) argon2id->salt_len; + context.secret = NULL; + context.secretlen = 0; + context.ad = NULL; + context.adlen = 0; + context.t_cost = argon2id->t; + context.m_cost = argon2id->m; + context.lanes = argon2id->p; + context.threads = 1; + context.allocate_cbk = NULL; + context.free_cbk = NULL; + context.flags = ARGON2_DEFAULT_FLAGS; + context.version = ARGON2_VERSION_NUMBER; + context.memory = unit_buf->memory; + + for (u64 i = 0; i < pws_cnt; i++) + { + context.out = (uint8_t *) argon2_reference_tmp->h; + context.outlen = (uint32_t) argon2id->digest_len; + context.pwd = (uint8_t *) argon2_reference_tmp->pw_buf; + context.pwdlen = (uint32_t) argon2_reference_tmp->pw_len; + + argon2_ctx (&context, Argon2_id); + + argon2_reference_tmp++; + } + + return true; +} + +void bridge_init (bridge_ctx_t *bridge_ctx) +{ + bridge_ctx->bridge_context_size = BRIDGE_CONTEXT_SIZE_CURRENT; + bridge_ctx->bridge_interface_version = BRIDGE_INTERFACE_VERSION_CURRENT; + + bridge_ctx->platform_init = platform_init; + bridge_ctx->platform_term = platform_term; + bridge_ctx->get_unit_count = get_unit_count; + bridge_ctx->get_unit_info = get_unit_info; + bridge_ctx->get_workitem_count = get_workitem_count; + bridge_ctx->thread_init = BRIDGE_DEFAULT; + bridge_ctx->thread_term = BRIDGE_DEFAULT; + bridge_ctx->salt_prepare = salt_prepare; + bridge_ctx->salt_destroy = salt_destroy; + bridge_ctx->launch_loop = launch_loop; + bridge_ctx->launch_loop2 = BRIDGE_DEFAULT; + bridge_ctx->st_update_hash = BRIDGE_DEFAULT; + bridge_ctx->st_update_pass = BRIDGE_DEFAULT; +} diff --git a/src/bridges/bridge_argon2id_reference.mk b/src/bridges/bridge_argon2id_reference.mk new file mode 100644 index 000000000..50ca3bf7f --- /dev/null +++ b/src/bridges/bridge_argon2id_reference.mk @@ -0,0 +1,14 @@ + +ARGON2_REFERENCE := deps/phc-winner-argon2-20190702 + +ifeq ($(MAKECMDGOALS),binaries) +ARGON2_REFERENCE_CFLAGS := -I$(ARGON2_REFERENCE)/_hashcat/ -mavx2 +else +ARGON2_REFERENCE_CFLAGS := -I$(ARGON2_REFERENCE)/_hashcat/ -march=native +endif + +bridges/bridge_argon2id_reference.so: src/bridges/bridge_argon2id_reference.c obj/combined.LINUX.a + $(CC_LINUX) $(CCFLAGS) $(CFLAGS_CROSS_LINUX) $^ -o $@ $(LFLAGS_CROSS_LINUX) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(ARGON2_REFERENCE_CFLAGS) + +bridges/bridge_argon2id_reference.dll: src/bridges/bridge_argon2id_reference.c obj/combined.WIN.a + $(CC_WIN) $(CCFLAGS) $(CFLAGS_CROSS_WIN) $^ -o $@ $(LFLAGS_CROSS_WIN) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(ARGON2_REFERENCE_CFLAGS) diff --git a/src/modules/module_70000.c b/src/modules/module_70000.c new file mode 100644 index 000000000..5eea2b228 --- /dev/null +++ b/src/modules/module_70000.c @@ -0,0 +1,326 @@ +/** + * Author......: See docs/credits.txt + * License.....: MIT + */ + +#include "common.h" +#include "types.h" +#include "modules.h" +#include "bitops.h" +#include "convert.h" +#include "shared.h" + +static const u32 ATTACK_EXEC = ATTACK_EXEC_OUTSIDE_KERNEL; +static const u32 DGST_POS0 = 0; +static const u32 DGST_POS1 = 1; +static const u32 DGST_POS2 = 2; +static const u32 DGST_POS3 = 3; +static const u32 DGST_SIZE = DGST_SIZE_4_4; +static const u32 HASH_CATEGORY = HASH_CATEGORY_RAW_HASH; +static const char *HASH_NAME = "argon2id [Bridged: reference implementation + tunings]"; +static const u64 KERN_TYPE = 70000; +static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE; +static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE + | OPTS_TYPE_PT_GENERATE_LE + | OPTS_TYPE_NATIVE_THREADS + | OPTS_TYPE_MP_MULTI_DISABLE; +static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; +static const u64 BRIDGE_TYPE = BRIDGE_TYPE_MATCH_TUNINGS // optional - improves performance + | BRIDGE_TYPE_LAUNCH_LOOP; +static const char *BRIDGE_NAME = "argon2id_reference"; +static const char *ST_PASS = "hashcat"; +static const char *ST_HASH = "$argon2id$v=19$m=4096,t=3,p=1$FoIjFnZlM2JSJWYXUgMFAw$eYKMzhbW8uyT1LLtKRdRcJj2CQeRrdr2pKv/Y71YbAQ"; + +u32 module_attack_exec (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ATTACK_EXEC; } +u32 module_dgst_pos0 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS0; } +u32 module_dgst_pos1 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS1; } +u32 module_dgst_pos2 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS2; } +u32 module_dgst_pos3 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS3; } +u32 module_dgst_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_SIZE; } +u32 module_hash_category (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return HASH_CATEGORY; } +const char *module_hash_name (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return HASH_NAME; } +u64 module_kern_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return KERN_TYPE; } +u32 module_opti_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return OPTI_TYPE; } +u64 module_opts_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return OPTS_TYPE; } +u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return SALT_TYPE; } +const char *module_st_hash (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_HASH; } +const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_PASS; } +const char *module_bridge_name (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return BRIDGE_NAME; } +u64 module_bridge_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return BRIDGE_TYPE; } + +typedef struct +{ + // input + + u32 pw_buf[64]; + u32 pw_len; + + // output + + u32 h[64]; + +} argon2_reference_tmp_t; + +typedef struct +{ + u32 salt_buf[64]; + u32 salt_len; + + u32 digest_buf[64]; + u32 digest_len; + + u32 m; + u32 t; + u32 p; + +} argon2_t; + +static const char *SIGNATURE_ARGON2ID= "$argon2id$"; + +u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u64 esalt_size = (const u64) sizeof (argon2_t); + + return esalt_size; +} + +u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u64 tmp_size = (const u64) sizeof (argon2_reference_tmp_t); + + return tmp_size; +} + +int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len) +{ + u32 *digest = (u32 *) digest_buf; + + argon2_t *argon2id = (argon2_t *) esalt_buf; + + hc_token_t token; + + memset (&token, 0, sizeof (hc_token_t)); + + token.token_cnt = 7; + + token.signatures_cnt = 1; + token.signatures_buf[0] = SIGNATURE_ARGON2ID; + + token.len[0] = 10; + token.attr[0] = TOKEN_ATTR_FIXED_LENGTH + | TOKEN_ATTR_VERIFY_SIGNATURE; + + token.len[1] = 4; + token.sep[1] = '$'; + token.attr[1] = TOKEN_ATTR_FIXED_LENGTH; + + token.len_min[2] = 3; + token.len_max[2] = 12; + token.sep[2] = ','; // our tokenizer shines here + token.attr[2] = TOKEN_ATTR_VERIFY_LENGTH; + + token.len_min[3] = 3; + token.len_max[3] = 5; + token.sep[3] = ','; // ... and here + token.attr[3] = TOKEN_ATTR_VERIFY_LENGTH; + + token.len_min[4] = 3; + token.len_max[4] = 5; + token.sep[4] = '$'; + token.attr[4] = TOKEN_ATTR_VERIFY_LENGTH; + + token.len_min[5] = ((SALT_MIN * 8) / 6) + 0; + token.len_max[5] = ((SALT_MAX * 8) / 6) + 3; + token.sep[5] = '$'; + token.attr[5] = TOKEN_ATTR_VERIFY_LENGTH + | TOKEN_ATTR_VERIFY_BASE64A; + + token.len_min[6] = ((SALT_MIN * 8) / 6) + 0; + token.len_max[6] = ((SALT_MAX * 8) / 6) + 3; + token.sep[6] = '$'; + token.attr[6] = TOKEN_ATTR_VERIFY_LENGTH + | TOKEN_ATTR_VERIFY_BASE64A; + + const int rc_tokenizer = input_tokenizer ((const u8 *) line_buf, line_len, &token); + + if (rc_tokenizer != PARSER_OK) return (rc_tokenizer); + + // version + + const int version_len = token.len[1]; + const u8 *version_pos = token.buf[1]; + + if (version_len != 4) return (PARSER_HASH_VALUE); + + if (memcmp (version_pos, "v=19", 4)) return (PARSER_HASH_VALUE); + + // argon2id config + + const u8 *m_pos = token.buf[2]; + const u8 *t_pos = token.buf[3]; + const u8 *p_pos = token.buf[4]; + + argon2id->m = hc_strtoul ((const char *) m_pos + 2, NULL, 10); + argon2id->t = hc_strtoul ((const char *) t_pos + 2, NULL, 10); + argon2id->p = hc_strtoul ((const char *) p_pos + 2, NULL, 10); + + if (argon2id->m < 1) return (PARSER_HASH_VALUE); + if (argon2id->t < 1) return (PARSER_HASH_VALUE); + if (argon2id->p < 1) return (PARSER_HASH_VALUE); + + // salt + + const int salt_len = token.len[5]; + const u8 *salt_pos = token.buf[5]; + + argon2id->salt_len = base64_decode (base64_to_int, (const u8 *) salt_pos, salt_len, (u8 *) argon2id->salt_buf); + + // digest + + const int digest_len = token.len[6]; + const u8 *digest_pos = token.buf[6]; + + argon2id->digest_len = base64_decode (base64_to_int, (const u8 *) digest_pos, digest_len, (u8 *) argon2id->digest_buf); + + // comparison digest + + digest[0] = argon2id->digest_buf[0]; + digest[1] = argon2id->digest_buf[1]; + digest[2] = argon2id->digest_buf[2]; + digest[3] = argon2id->digest_buf[3]; + + // fake salt, we just need to make this unique + + salt->salt_buf[0] = digest[0]; + salt->salt_buf[1] = digest[1]; + salt->salt_buf[2] = digest[2]; + salt->salt_buf[3] = digest[3]; + salt->salt_buf[4] = argon2id->m; + salt->salt_buf[5] = argon2id->t; + salt->salt_buf[6] = argon2id->p; + salt->salt_buf[7] = 0; + + salt->salt_len = 32; + salt->salt_iter = 1; + + return (PARSER_OK); +} + +int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const void *digest_buf, MAYBE_UNUSED const salt_t *salt, MAYBE_UNUSED const void *esalt_buf, MAYBE_UNUSED const void *hook_salt_buf, MAYBE_UNUSED const hashinfo_t *hash_info, char *line_buf, MAYBE_UNUSED const int line_size) +{ + // const u32 *digest = (const u32 *) digest_buf; + + const argon2_t *argon2 = (const argon2_t *) esalt_buf; + + // salt + + char base64_salt[512] = { 0 }; + + int len1 = base64_encode (int_to_base64, (const u8 *) argon2->salt_buf, argon2->salt_len, (u8 *) base64_salt); + + for (int i = len1 - 1; i >=0; i--) if (base64_salt[i] == '=') base64_salt[i] = 0; + + // digest + + char base64_digest[512] = { 0 }; + + int len2 = base64_encode (int_to_base64, (const u8 *) argon2->digest_buf, argon2->digest_len, (u8 *) base64_digest); + + for (int i = len2 - 1; i >=0; i--) if (base64_digest[i] == '=') base64_digest[i] = 0; + + // out + + u8 *out_buf = (u8 *) line_buf; + + const int out_len = snprintf ((char *) out_buf, line_size, "%sv=19$m=%d,t=%d,p=%d$%s$%s", + SIGNATURE_ARGON2ID, + argon2->m, + argon2->t, + argon2->p, + base64_salt, + base64_digest); + + return out_len; +} + +void module_init (module_ctx_t *module_ctx) +{ + module_ctx->module_context_size = MODULE_CONTEXT_SIZE_CURRENT; + module_ctx->module_interface_version = MODULE_INTERFACE_VERSION_CURRENT; + + module_ctx->module_attack_exec = module_attack_exec; + module_ctx->module_benchmark_esalt = MODULE_DEFAULT; + module_ctx->module_benchmark_hook_salt = MODULE_DEFAULT; + module_ctx->module_benchmark_mask = MODULE_DEFAULT; + module_ctx->module_benchmark_charset = MODULE_DEFAULT; + module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = module_bridge_name; + module_ctx->module_bridge_type = module_bridge_type; + module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; + module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; + module_ctx->module_deprecated_notice = MODULE_DEFAULT; + module_ctx->module_dgst_pos0 = module_dgst_pos0; + module_ctx->module_dgst_pos1 = module_dgst_pos1; + module_ctx->module_dgst_pos2 = module_dgst_pos2; + module_ctx->module_dgst_pos3 = module_dgst_pos3; + module_ctx->module_dgst_size = module_dgst_size; + module_ctx->module_dictstat_disable = MODULE_DEFAULT; + module_ctx->module_esalt_size = module_esalt_size; + module_ctx->module_extra_buffer_size = MODULE_DEFAULT; + module_ctx->module_extra_tmp_size = MODULE_DEFAULT; + module_ctx->module_extra_tuningdb_block = MODULE_DEFAULT; + module_ctx->module_forced_outfile_format = MODULE_DEFAULT; + module_ctx->module_hash_binary_count = MODULE_DEFAULT; + module_ctx->module_hash_binary_parse = MODULE_DEFAULT; + module_ctx->module_hash_binary_save = MODULE_DEFAULT; + module_ctx->module_hash_decode_postprocess = MODULE_DEFAULT; + module_ctx->module_hash_decode_potfile = MODULE_DEFAULT; + module_ctx->module_hash_decode_zero_hash = MODULE_DEFAULT; + module_ctx->module_hash_decode = module_hash_decode; + module_ctx->module_hash_encode_status = MODULE_DEFAULT; + module_ctx->module_hash_encode_potfile = MODULE_DEFAULT; + module_ctx->module_hash_encode = module_hash_encode; + module_ctx->module_hash_init_selftest = MODULE_DEFAULT; + module_ctx->module_hash_mode = MODULE_DEFAULT; + module_ctx->module_hash_category = module_hash_category; + module_ctx->module_hash_name = module_hash_name; + module_ctx->module_hashes_count_min = MODULE_DEFAULT; + module_ctx->module_hashes_count_max = MODULE_DEFAULT; + module_ctx->module_hlfmt_disable = MODULE_DEFAULT; + module_ctx->module_hook_extra_param_size = MODULE_DEFAULT; + module_ctx->module_hook_extra_param_init = MODULE_DEFAULT; + module_ctx->module_hook_extra_param_term = MODULE_DEFAULT; + module_ctx->module_hook12 = MODULE_DEFAULT; + module_ctx->module_hook23 = MODULE_DEFAULT; + module_ctx->module_hook_salt_size = MODULE_DEFAULT; + module_ctx->module_hook_size = MODULE_DEFAULT; + module_ctx->module_jit_build_options = MODULE_DEFAULT; + module_ctx->module_jit_cache_disable = MODULE_DEFAULT; + module_ctx->module_kernel_accel_max = MODULE_DEFAULT; + module_ctx->module_kernel_accel_min = MODULE_DEFAULT; + module_ctx->module_kernel_loops_max = MODULE_DEFAULT; + module_ctx->module_kernel_loops_min = MODULE_DEFAULT; + module_ctx->module_kernel_threads_max = MODULE_DEFAULT; + module_ctx->module_kernel_threads_min = MODULE_DEFAULT; + module_ctx->module_kern_type = module_kern_type; + module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; + module_ctx->module_opti_type = module_opti_type; + module_ctx->module_opts_type = module_opts_type; + module_ctx->module_outfile_check_disable = MODULE_DEFAULT; + module_ctx->module_outfile_check_nocomp = MODULE_DEFAULT; + module_ctx->module_potfile_custom_check = MODULE_DEFAULT; + module_ctx->module_potfile_disable = MODULE_DEFAULT; + module_ctx->module_potfile_keep_all_hashes = MODULE_DEFAULT; + module_ctx->module_pwdump_column = MODULE_DEFAULT; + module_ctx->module_pw_max = MODULE_DEFAULT; + module_ctx->module_pw_min = MODULE_DEFAULT; + module_ctx->module_salt_max = MODULE_DEFAULT; + module_ctx->module_salt_min = MODULE_DEFAULT; + module_ctx->module_salt_type = module_salt_type; + module_ctx->module_separator = MODULE_DEFAULT; + module_ctx->module_st_hash = module_st_hash; + module_ctx->module_st_pass = module_st_pass; + module_ctx->module_tmp_size = module_tmp_size; + module_ctx->module_unstable_warning = MODULE_DEFAULT; + module_ctx->module_warmup_disable = MODULE_DEFAULT; +} diff --git a/tools/test_modules/m70000.pm b/tools/test_modules/m70000.pm new file mode 100644 index 000000000..4b44334ac --- /dev/null +++ b/tools/test_modules/m70000.pm @@ -0,0 +1,76 @@ +#!/usr/bin/env perl + +## +## Author......: See docs/credits.txt +## License.....: MIT +## + +use strict; +use warnings; + +use MIME::Base64 qw (decode_base64 encode_base64); +use Crypt::Argon2 qw (argon2_raw); + +sub module_constraints { [[0, 256], [32, 32], [-1, -1], [-1, -1], [-1, -1]] } + +sub module_generate_hash +{ + my $word = shift; + my $salt = shift; + my $m = shift // 4096; + my $t = shift // 3; + my $p = shift // 1; + my $len = shift // random_number (1, 2) * 16; + + my $salt_bin = pack ("H*", $salt); + + my $digest_bin = argon2_raw ('argon2id', $word, $salt_bin, $t, $m . "k", $p, $len); + + my $salt_base64 = encode_base64 ($salt_bin, ""); $salt_base64 =~ s/=+$//; + my $digest_base64 = encode_base64 ($digest_bin, ""); $digest_base64 =~ s/=+$//; + + my $hash = sprintf ('$argon2id$v=19$m=%d,t=%d,p=%d$%s$%s', $m, $t, $p, $salt_base64, $digest_base64); + + return $hash; +} + +sub module_verify_hash +{ + my $line = shift; + + my $idx = index ($line, ':'); + + return unless $idx >= 0; + + my $hash = substr ($line, 0, $idx); + my $word = substr ($line, $idx + 1); + + return unless substr ($hash, 0, 10) eq '$argon2id$'; + + my (undef, $signature, $version, $config, $salt, $digest) = split '\$', $hash; + + return unless defined $signature; + return unless defined $version; + return unless defined $config; + return unless defined $salt; + return unless defined $digest; + + my ($m_config, $t_config, $p_config) = split ("\,", $config); + + return unless ($version eq "v=19"); + + my $m = (split ("=", $m_config))[1]; + my $t = (split ("=", $t_config))[1]; + my $p = (split ("=", $p_config))[1]; + + $salt = decode_base64 ($salt); + $digest = decode_base64 ($digest); + + my $word_packed = pack_if_HEX_notation ($word); + + my $new_hash = module_generate_hash ($word_packed, unpack ("H*", $salt), $m, $t, $p, length ($digest)); + + return ($new_hash, $word); +} + +1; From 70825ebac45efa85fc0b1da9f10d96591fe7da18 Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Fri, 30 May 2025 21:57:05 +0200 Subject: [PATCH 22/95] Added sse2neon to fix compile errors on macOS for custom hashcat codes on phc-winner-argon2 --- .../_hashcat/blake2/blamka-round-opt.h | 5 + deps/sse2neon/.ci/check-format.sh | 12 + deps/sse2neon/.ci/common.sh | 18 + deps/sse2neon/.ci/cross-check.sh | 22 + deps/sse2neon/.ci/cross-tool.sh | 26 + deps/sse2neon/.clang-format | 22 + deps/sse2neon/.gitattributes | 4 + deps/sse2neon/.github/CODEOWNERS | 5 + deps/sse2neon/.github/workflows/main.yml | 127 + deps/sse2neon/.gitignore | 10 + deps/sse2neon/CONTRIBUTING.md | 462 + deps/sse2neon/LICENSE | 21 + deps/sse2neon/Makefile | 93 + deps/sse2neon/README.md | 300 + deps/sse2neon/sse2neon.h | 9447 ++++++++++++ deps/sse2neon/sse2neon.sln | 37 + deps/sse2neon/sse2neon.vcxproj | 217 + deps/sse2neon/sse2neon.vcxproj.filters | 45 + deps/sse2neon/tests/README.md | 29 + deps/sse2neon/tests/binding.cpp | 35 + deps/sse2neon/tests/binding.h | 19 + deps/sse2neon/tests/common.cpp | 414 + deps/sse2neon/tests/common.h | 527 + deps/sse2neon/tests/impl.cpp | 11883 ++++++++++++++++ deps/sse2neon/tests/impl.h | 572 + deps/sse2neon/tests/main.cpp | 39 + docs/changes.txt | 1 + docs/license_libs/SSE2NEON_LICENSE.txt | 21 + src/Makefile | 9 + 29 files changed, 24422 insertions(+) create mode 100755 deps/sse2neon/.ci/check-format.sh create mode 100644 deps/sse2neon/.ci/common.sh create mode 100755 deps/sse2neon/.ci/cross-check.sh create mode 100755 deps/sse2neon/.ci/cross-tool.sh create mode 100644 deps/sse2neon/.clang-format create mode 100644 deps/sse2neon/.gitattributes create mode 100644 deps/sse2neon/.github/CODEOWNERS create mode 100644 deps/sse2neon/.github/workflows/main.yml create mode 100644 deps/sse2neon/.gitignore create mode 100644 deps/sse2neon/CONTRIBUTING.md create mode 100644 deps/sse2neon/LICENSE create mode 100644 deps/sse2neon/Makefile create mode 100644 deps/sse2neon/README.md create mode 100644 deps/sse2neon/sse2neon.h create mode 100644 deps/sse2neon/sse2neon.sln create mode 100644 deps/sse2neon/sse2neon.vcxproj create mode 100644 deps/sse2neon/sse2neon.vcxproj.filters create mode 100644 deps/sse2neon/tests/README.md create mode 100644 deps/sse2neon/tests/binding.cpp create mode 100644 deps/sse2neon/tests/binding.h create mode 100644 deps/sse2neon/tests/common.cpp create mode 100644 deps/sse2neon/tests/common.h create mode 100644 deps/sse2neon/tests/impl.cpp create mode 100644 deps/sse2neon/tests/impl.h create mode 100644 deps/sse2neon/tests/main.cpp create mode 100644 docs/license_libs/SSE2NEON_LICENSE.txt diff --git a/deps/phc-winner-argon2-20190702/_hashcat/blake2/blamka-round-opt.h b/deps/phc-winner-argon2-20190702/_hashcat/blake2/blamka-round-opt.h index 2c8942e31..37a9e7eb2 100644 --- a/deps/phc-winner-argon2-20190702/_hashcat/blake2/blamka-round-opt.h +++ b/deps/phc-winner-argon2-20190702/_hashcat/blake2/blamka-round-opt.h @@ -20,7 +20,12 @@ #include "blake2-impl.h" +#if defined(__x86_64__) || defined(_M_X64) || defined(__i386__) || defined(_M_IX86) #include +#elif defined(__aarch64__) +#include +#endif + #if defined(__SSSE3__) #include /* for _mm_shuffle_epi8 and _mm_alignr_epi8 */ #endif diff --git a/deps/sse2neon/.ci/check-format.sh b/deps/sse2neon/.ci/check-format.sh new file mode 100755 index 000000000..de8aa178a --- /dev/null +++ b/deps/sse2neon/.ci/check-format.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash + +. .ci/common.sh + +set -x + +for file in ${SOURCES}; +do + clang-format-18 ${file} > expected-format + diff -u -p --label="${file}" --label="expected coding style" ${file} expected-format +done +exit $(clang-format-18 --output-replacements-xml ${SOURCES} | egrep -c "") diff --git a/deps/sse2neon/.ci/common.sh b/deps/sse2neon/.ci/common.sh new file mode 100644 index 000000000..e71682583 --- /dev/null +++ b/deps/sse2neon/.ci/common.sh @@ -0,0 +1,18 @@ +GCC_REL=14.2.rel1 +ARM_MIRROR=https://github.com/DLTcollab/toolchain-arm/raw/main + +SOURCES=$(find $(git rev-parse --show-toplevel) | egrep "\.(cpp|h)\$" | egrep -v "arm-gnu-toolchain-${GCC_REL}-x86_64-aarch64-none-linux-gnu|arm-gnu-toolchain-${GCC_REL}-x86_64-arm-none-linux-gnueabihf") + +# Expect host is Linux/x86_64 +check_platform() +{ + MACHINE_TYPE=`uname -m` + if [ ${MACHINE_TYPE} != 'x86_64' ]; then + exit + fi + + OS_TYPE=`uname -s` + if [ ${OS_TYPE} != 'Linux' ]; then + exit + fi +} diff --git a/deps/sse2neon/.ci/cross-check.sh b/deps/sse2neon/.ci/cross-check.sh new file mode 100755 index 000000000..c0f9fb849 --- /dev/null +++ b/deps/sse2neon/.ci/cross-check.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +. .ci/common.sh + +check_platform + +# Clang/LLVM is natively a cross-compiler. +# TODO: Do cross-compilation using Clang +# https://clang.llvm.org/docs/CrossCompilation.html +if [ $(printenv CXX | grep clang) ]; then + exit +fi + +set -x + +make clean +export PATH=arm-gnu-toolchain-${GCC_REL}-x86_64-aarch64-none-linux-gnu/bin:$PATH +make CROSS_COMPILE=aarch64-none-linux-gnu- check || exit 1 # ARMv8-A + +make clean +export PATH=arm-gnu-toolchain-${GCC_REL}-x86_64-arm-none-linux-gnueabihf/bin:$PATH +make CROSS_COMPILE=arm-none-linux-gnueabihf- check || exit 1 # ARMv7-A diff --git a/deps/sse2neon/.ci/cross-tool.sh b/deps/sse2neon/.ci/cross-tool.sh new file mode 100755 index 000000000..c2013cb4d --- /dev/null +++ b/deps/sse2neon/.ci/cross-tool.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +. .ci/common.sh + +check_platform + +sudo apt-get update -q -y +sudo apt-get install -q -y qemu-user + +# Clang/LLVM is natively a cross-compiler, meaning that one set of programs +# can compile to all targets by setting the -target option. +if [ $(printenv CXX | grep clang) ]; then + exit +fi + +set -x + +sudo apt-get install -y curl xz-utils + +curl -L \ + ${ARM_MIRROR}/arm-gnu-toolchain-${GCC_REL}-x86_64-arm-none-linux-gnueabihf.tar.xz \ + | tar -Jx || exit 1 + +curl -L \ + ${ARM_MIRROR}/arm-gnu-toolchain-${GCC_REL}-x86_64-aarch64-none-linux-gnu.tar.xz \ + | tar -Jx || exit 1 diff --git a/deps/sse2neon/.clang-format b/deps/sse2neon/.clang-format new file mode 100644 index 000000000..828c2be41 --- /dev/null +++ b/deps/sse2neon/.clang-format @@ -0,0 +1,22 @@ +BasedOnStyle: Chromium +Language: Cpp +MaxEmptyLinesToKeep: 3 +IndentCaseLabels: false +AllowShortIfStatementsOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +DerivePointerAlignment: false +PointerAlignment: Right +SpaceAfterCStyleCast: true +TabWidth: 4 +UseTab: Never +IndentWidth: 4 +BreakBeforeBraces: Linux +AccessModifierOffset: -4 +ForEachMacros: + - SET_FOREACH + - RB_FOREACH +AlignEscapedNewlines: Left +AttributeMacros: + - FORCE_INLINE + - ALIGN_STRUCT diff --git a/deps/sse2neon/.gitattributes b/deps/sse2neon/.gitattributes new file mode 100644 index 000000000..90767749d --- /dev/null +++ b/deps/sse2neon/.gitattributes @@ -0,0 +1,4 @@ +*.md text=auto +LICENSE text=auto + +sse2neon.h -text linguist-language=c diff --git a/deps/sse2neon/.github/CODEOWNERS b/deps/sse2neon/.github/CODEOWNERS new file mode 100644 index 000000000..e836a849c --- /dev/null +++ b/deps/sse2neon/.github/CODEOWNERS @@ -0,0 +1,5 @@ +# Lines starting with '#' are comments. +# More details are here: https://help.github.com/articles/about-codeowners/ + +# Global codeowners: +* @jserv @howjmay diff --git a/deps/sse2neon/.github/workflows/main.yml b/deps/sse2neon/.github/workflows/main.yml new file mode 100644 index 000000000..4ee284b26 --- /dev/null +++ b/deps/sse2neon/.github/workflows/main.yml @@ -0,0 +1,127 @@ +name: GitHub Actions + +on: [push, pull_request] + +jobs: + host-x86: + runs-on: ubuntu-24.04 + strategy: + matrix: + arch: [x86_64] + cxx_compiler: [g++, clang++] + steps: + - name: checkout code + uses: actions/checkout@v4 + - name: build artifact + env: + CXX: ${{ matrix.cxx_compiler }} + run: | + sh .ci/cross-tool.sh + make check + sh .ci/cross-check.sh + + host-win: + runs-on: windows-2022 + strategy: + matrix: + arch: + - x86_64 + - armv7 + - aarch64 + env: + LLVM_MINGW_URL: https://github.com/mstorsjo/llvm-mingw/releases/download/20241217/llvm-mingw-20241217-msvcrt-x86_64.zip + defaults: + run: + shell: bash + steps: + - name: unpack llvm-mingw + run: | + curl -L -O $LLVM_MINGW_URL + unzip -q llvm-mingw-*.zip + rm llvm-mingw-*.zip + mv llvm-mingw-* "$HOME/llvm-mingw" + echo "$HOME/llvm-mingw/bin" >> $GITHUB_PATH + - name: checkout code + uses: actions/checkout@v4 + - name: build artifact + env: + CXX: ${{ matrix.arch }}-w64-mingw32-clang++ + run: mingw32-make processor=${{ matrix.arch }} + - name: run tests + if: matrix.arch == 'x86_64' + run: mingw32-make check + + host-arm: + runs-on: ubuntu-24.04 + strategy: + matrix: + arch_with_features: [ + {arch: armv7, feature: none, arch_cflags: none}, + {arch: aarch64, feature: none, arch_cflags: none}, + {arch: aarch64, feature: crypto+crc, arch_cflags: none}, + {arch: armv7, feature: none, arch_cflags: '-mcpu=cortex-a32 -mfpu=neon-fp-armv8'} + ] + cxx_compiler: [g++, clang++-15] + steps: + - name: checkout code + uses: actions/checkout@v4 + - name: build artifact + # The Github Action for non-x86 CPU + # https://github.com/uraimo/run-on-arch-action + uses: uraimo/run-on-arch-action@v2 + with: + arch: ${{ matrix.arch_with_features.arch }} + distro: ubuntu22.04 + # Speed up builds by storing container images in a GitHub package registry. + githubToken: ${{ github.token }} + env: | + CXX: ${{ matrix.cxx_compiler }} + ARCH_CFLAGS: ${{ matrix.arch_with_features.arch_cflags }} + install: | + apt-get update -q -y + apt-get install -q -y gcc "${{ matrix.cxx_compiler }}" make + run: | + make FEATURE=${{ matrix.arch_with_features.feature }} check + + host-win-msvc: + runs-on: windows-2022 + steps: + - name: checkout code + uses: actions/checkout@v4 + + - name: add msbuild to PATH + uses: microsoft/setup-msbuild@v2 + + - name: build artifact + run: msbuild sse2neon.vcxproj -t:rebuild -property:Configuration=Release -property:Platform=ARM64 + + - name: upload artifact + uses: actions/upload-artifact@master + with: + name: msvc-arm64-artifact + path: ARM64 + + test-win-msvc: + runs-on: ubuntu-24.04 + container: linaro/wine-arm64 + needs: host-win-msvc + steps: + - name: download artifact + uses: actions/download-artifact@master + with: + name: msvc-arm64-artifact + + - name: Run tests + run: wine-arm64 cmd.exe /c 'Release\sse2neon.exe' + + + coding-style: + runs-on: ubuntu-24.04 + steps: + - name: checkout code + uses: actions/checkout@v4 + - name: style check + run: | + sudo apt-get install -q -y clang-format-18 + sh .ci/check-format.sh + shell: bash diff --git a/deps/sse2neon/.gitignore b/deps/sse2neon/.gitignore new file mode 100644 index 000000000..e8b0dfb31 --- /dev/null +++ b/deps/sse2neon/.gitignore @@ -0,0 +1,10 @@ +*.exe +*.o +*.gch +tests/*.d +tests/main +gcc-arm-* +.vs/ +Debug/ +Release/ +*.vcxproj.user diff --git a/deps/sse2neon/CONTRIBUTING.md b/deps/sse2neon/CONTRIBUTING.md new file mode 100644 index 000000000..60afe860c --- /dev/null +++ b/deps/sse2neon/CONTRIBUTING.md @@ -0,0 +1,462 @@ +# Contributing to SSE2NEON + +:+1::tada: First off, thanks for taking the time to contribute! :tada::+1: + +The following is a set of guidelines for contributing to [SSE2NEON](https://github.com/DLTcollab/sse2neon), +hosted on GitHub. These are mostly guidelines, not rules. Use your best +judgment, and feel free to propose changes to this document in a pull request. + +## Issues + +This project uses GitHub Issues to track ongoing development, discuss project plans, and keep track of bugs. Be sure to search for existing issues before you create another one. + +Visit our [Issues page on GitHub](https://github.com/DLTcollab/sse2neon/issues) to search and submit. + +## Add New Intrinsic + +The new intrinsic conversion should be added in the `sse2neon.h` file, +and it should be placed in the correct classification with the alphabetical order. +The classification can be referenced from [Intel Intrinsics Guide](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html). + +Classification: `SSE`, `SSE2`, `SSE3`, `SSSE3`, `SSE4.1`, `SSE4.2` + +## Coding Convention + +We welcome all contributions from corporate, acaddemic and individual developers. However, there are a number of fundamental ground rules that you must adhere to in order to participate. These rules are outlined as follows: +* All code must adhere to the existing C coding style (see below). While we are somewhat flexible in basic style, you will adhere to what is currently in place. Uncommented, complicated algorithmic constructs will be rejected. +* All external pull requests must contain sufficient documentation in the pull request comments in order to be accepted. + +Software requirement: [clang-format](https://clang.llvm.org/docs/ClangFormat.html) version 18 or later. + +Use the command `$ clang-format -i *.[ch]` to enforce a consistent coding style. + +## Naming Conventions + +There are some general rules. +* Names with leading and trailing underscores are reserved for system purposes, and most systems use them for names that the user should not have to know. +* Function, typedef, and variable names, as well as struct, union, and enum tag names should be in lower case. +* Many function-like macros are in all CAPS. +* Avoid names that differ only in case, like `foo` and `Foo`. Similarly, avoid `foobar` and `foo_bar`. The potential for confusion is considerable. +* Similarly, avoid names that look like each other. On many terminals and printers, `l`, `1` and `I` look quite similar. A variable named `l` is particularly bad because it looks so much like the constant `1`. + +In general, global names (including enums) should have a common prefix (`SSE2NEON_` for macros and enum constants; `_sse2neon_` for functions) identifying the module that they belong with. Globals may alternatively be grouped in a global structure. Typedeffed names often have `_t` appended to their name. + +Avoid using names that might conflict with other names used in standard libraries. There may be more library code included in some systems than you need. Your program could also be extended in the future. + +## Coding Style for Modern C + +This coding style is a variation of the K&R style. Some general principles: honor tradition, but accept progress; be consistent; +embrace the latest C standards; embrace modern compilers, their static analysis +capabilities and sanitizers. + +### Indentation + +Use 4 spaces rather than tabs. + +### Line length + +All lines should generally be within 80 characters. Wrap long lines. +There are some good reasons behind this: +* It forces the developer to write more succinct code; +* Humans are better at processing information in smaller quantity portions; +* It helps users of vi/vim (and potentially other editors) who use vertical splits. + +### Comments + +Multi-line comments shall have the opening and closing characters +in a separate line, with the lines containing the content prefixed by a space +and the `*` characters for alignment, e.g., +```c +/* + * This is a multi-line comment. + */ + +/* One line comment. */ +``` + +Use multi-line comments for more elaborative descriptions or before more +significant logical block of code. + +Single-line comments shall be written in C89 style: +```c + return (uintptr_t) val; /* return a bitfield */ +``` + +Leave two spaces between the statement and the inline comment. + +### Spacing and brackets + +Use one space after the conditional or loop keyword, no spaces around +their brackets, and one space before the opening curly bracket. + +Functions (their declarations or calls), `sizeof` operator or similar +macros shall not have a space after their name/keyword or around the +brackets, e.g., +```c +unsigned total_len = offsetof(obj_t, items[n]); +unsigned obj_len = sizeof(obj_t); +``` + +Use brackets to avoid ambiguity and with operators such as `sizeof`, +but otherwise avoid redundant or excessive brackets. + +### Variable names and declarations + +- Use descriptive names for global variables and short names for locals. +Find the right balance between descriptive and succinct. + +- Use [snakecase](https://en.wikipedia.org/wiki/Snake_case). +Do not use "camelcase". + +- Do not use Hungarian notation or other unnecessary prefixing or suffixing. + +- Use the following spacing for pointers: +```c +const char *name; /* const pointer; '*' with the name and space before it */ +conf_t * const cfg; /* pointer to a const data; spaces around 'const' */ +const uint8_t * const charmap; /* const pointer and const data */ +const void * restrict key; /* const pointer which does not alias */ +``` + +### Type definitions + +Declarations shall be on the same line, e.g., +```c +typedef void (*dir_iter_t)(void *, const char *, struct dirent *); +``` + +_Typedef_ structures rather than pointers. Note that structures can be kept +opaque if they are not dereferenced outside the translation unit where they +are defined. Pointers can be _typedefed_ only if there is a very compelling +reason. + +New types may be suffixed with `_t`. Structure name, when used within the +translation unit, may be omitted, e.g.: + +```c +typedef struct { + unsigned if_index; + unsigned addr_len; + addr_t next_hop; +} route_info_t; +``` + +### Initialization + +Embrace C99 structure initialization where reasonable, e.g., +```c +static const crypto_ops_t openssl_ops = { + .create = openssl_crypto_create, + .destroy = openssl_crypto_destroy, + .encrypt = openssl_crypto_encrypt, + .decrypt = openssl_crypto_decrypt, + .hmac = openssl_crypto_hmac, +}; +``` + +Embrace C99 array initialization, especially for the state machines, e.g., +```c +static const uint8_t tcp_fsm[TCP_NSTATES][2][TCPFC_COUNT] = { + [TCPS_CLOSED] = { + [FLOW_FORW] = { + /* Handshake (1): initial SYN. */ + [TCPFC_SYN] = TCPS_SYN_SENT, + }, + }, + ... +} +``` + +### Control structures + +Try to make the control flow easy to follow. Avoid long convoluted logic +expressions; try to split them where possible (into inline functions, +separate if-statements, etc). + +The control structure keyword and the expression in the brackets should be +separated by a single space. The opening curly bracket shall be in the +same line, also separated by a single space. Example: + +```c + for (;;) { + obj = get_first(); + while ((obj = get_next(obj))) { + ... + } + if (done) + break; + } +``` + +Do not add inner spaces around the brackets. There should be one space after +the semicolon when `for` has expressions: +```c + for (unsigned i = 0; i < __arraycount(items); i++) { + ... + } +``` + +#### Avoid unnecessary nesting levels + +Avoid: +```c +int inspect(obj_t *obj) +{ + if (cond) { + ... + /* long code block */ + ... + return 0; + } + return -1; +} +``` + +Consider: +```c +int inspect(obj_t *obj) +{ + if (!cond) + return -1; + + ... + return 0; +} +``` + +However, do not make logic more convoluted. + +### `if` statements + +Curly brackets and spacing follow the K&R style: +```c + if (a == b) { + .. + } else if (a < b) { + ... + } else { + ... + } +``` + +Simple and succinct one-line if-statements may omit curly brackets: +```c + if (!valid) + return -1; +``` + +However, do prefer curly brackets with multi-line or more complex statements. +If one branch uses curly brackets, then all other branches shall use the +curly brackets too. + +Wrap long conditions to the if-statement indentation adding extra 4 spaces: +```c + if (some_long_expression && + another_expression) { + ... + } +``` + +#### Avoid redundant `else` + +Avoid: +```c + if (flag & F_FEATURE_X) { + ... + return 0; + } else { + return -1; + } +``` + +Consider: +```c + if (flag & F_FEATURE_X) { + ... + return 0; + } + return -1; +``` + +### `switch` statements + +Switch statements should have the `case` blocks at the same indentation +level, e.g.: +```c + switch (expr) { + case A: + ... + break; + case B: + /* fallthrough */ + case C: + ... + break; + } +``` + +If the case block does not break, then it is strongly recommended to add a +comment containing "fallthrough" to indicate it. Modern compilers can also +be configured to require such comment (see gcc `-Wimplicit-fallthrough`). + +### Function definitions + +The opening and closing curly brackets shall also be in the separate lines (K&R style). + +```c +ssize_t hex_write(FILE *stream, const void *buf, size_t len) +{ + ... +} +``` + +Do not use old style K&R style C definitions. + +### Object abstraction + +Objects are often "simulated" by the C programmers with a `struct` and +its "public API". To enforce the information hiding principle, it is a +good idea to define the structure in the source file (translation unit) +and provide only the _declaration_ in the header. For example, `obj.c`: + +```c +#include "obj.h" + +struct obj { + int value; +} + +obj_t *obj_create(void) +{ + return calloc(1, sizeof(obj_t)); +} + +void obj_destroy(obj_t *obj) +{ + free(obj); +} +``` + +With an example `obj.h`: +```c +#ifndef _OBJ_H_ +#define _OBJ_H_ + +typedef struct obj; + +obj_t *obj_create(void); +void obj_destroy(obj_t *); + +#endif +``` + +Such structuring will prevent direct access of the `obj_t` members outside +the `obj.c` source file. The implementation (of such "class" or "module") +may be large and abstracted within separate source files. In such case, +consider separating structures and "methods" into separate headers (think of +different visibility), for example `obj_impl.h` (private) and `obj.h` (public). + +Consider `crypto_impl.h`: +```c +#ifndef _CRYPTO_IMPL_H_ +#define _CRYPTO_IMPL_H_ + +#if !defined(__CRYPTO_PRIVATE) +#error "only to be used by the crypto modules" +#endif + +#include "crypto.h" + +typedef struct crypto { + crypto_cipher_t cipher; + void *key; + size_t key_len; + ... +} +... + +#endif +``` + +And `crypto.h` (public API): + +```c +#ifndef _CRYPTO_H_ +#define _CRYPTO_H_ + +typedef struct crypto crypto_t; + +crypto_t *crypto_create(crypto_cipher_t); +void crypto_destroy(crypto_t *); +... + +#endif +``` + +### Use reasonable types + +Use `unsigned` for general iterators; use `size_t` for general sizes; use +`ssize_t` to return a size which may include an error. Of course, consider +possible overflows. + +Avoid using `uint8_t` or `uint16_t` or other sub-word types for general +iterators and similar cases, unless programming for micro-controllers or +other constrained environments. + +C has rather peculiar _type promotion rules_ and unnecessary use of sub-word +types might contribute to a bug once in a while. + +### Embrace portability + +#### Byte-order + +Do not assume x86 or little-endian architecture. Use endian conversion +functions for operating the on-disk and on-the-wire structures or other +cases where it is appropriate. + +#### Types + +- Do not assume a particular 32-bit vs 64-bit architecture, e.g., do not +assume the size of `long` or `unsigned long`. Use `int64_t` or `uint64_t` +for the 8-byte integers. + +- Do not assume `char` is signed; for example, on Arm it is unsigned. + +- Use C99 macros for constant prefixes or formatting of the fixed-width +types. + +Use: +```c +#define SOME_CONSTANT (UINT64_C(1) << 48) +printf("val %" PRIu64 "\n", SOME_CONSTANT); +``` + +Do not use: +```c +#define SOME_CONSTANT (1ULL << 48) +printf("val %lld\n", SOME_CONSTANT); +``` + +#### Avoid unaligned access + +Do not assume unaligned access is safe. It is not safe on Arm, POWER, +and various other architectures. Moreover, even on x86 unaligned access +is slower. + +#### Avoid extreme portability + +Unless programming for micro-controllers or exotic CPU architectures, +focus on the common denominator of the modern CPU architectures, avoiding +the very maximum portability which can make the code unnecessarily cumbersome. + +Some examples: +- It is fair to assume `sizeof(int) == 4` since it is the case on all modern +mainstream architectures. PDP-11 era is long gone. +- Using `1U` instead of `UINT32_C(1)` or `(uint32_t) 1` is also fine. +- It is fair to assume that `NULL` is matching `(uintptr_t) 0` and it is fair +to `memset()` structures with zero. Non-zero `NULL` is for retro computing. + +## References +- [Linux kernel coding style](https://www.kernel.org/doc/html/latest/process/coding-style.html) +- 1999, Brian W. Kernighan and Rob Pike, The Practice of Programming, Addison–Wesley. +- 1993, Bill Shannon, [C Style and Coding Standards for SunOS](https://devnull-cz.github.io/unix-linux-prog-in-c/cstyle.ms.pdf) diff --git a/deps/sse2neon/LICENSE b/deps/sse2neon/LICENSE new file mode 100644 index 000000000..edc36de51 --- /dev/null +++ b/deps/sse2neon/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2015-2025 SSE2NEON Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/deps/sse2neon/Makefile b/deps/sse2neon/Makefile new file mode 100644 index 000000000..0a80e68d2 --- /dev/null +++ b/deps/sse2neon/Makefile @@ -0,0 +1,93 @@ +ifndef CC +override CC = gcc +endif + +ifndef CXX +override CXX = g++ +endif + +ifndef CROSS_COMPILE + processor := $(shell uname -m) +else # CROSS_COMPILE was set + CC = $(CROSS_COMPILE)gcc + CXX = $(CROSS_COMPILE)g++ + CXXFLAGS += -static + LDFLAGS += -static + check_arm := $(shell echo | $(CROSS_COMPILE)cpp -dM - | grep " __ARM_ARCH " | cut -c20-) + ifeq ($(check_arm),8) + processor = aarch64 + else ifeq ($(check_arm),7) # detect ARMv7-A only + processor = arm + else + $(error Unsupported cross-compiler) + endif +endif + +EXEC_WRAPPER = +ifdef CROSS_COMPILE +EXEC_WRAPPER = qemu-$(processor) +endif + +# Follow platform-specific configurations +ARCH_CFLAGS ?= +ARCH_CFLAGS_IS_SET = +ifeq ($(ARCH_CFLAGS),) + ARCH_CFLAGS_IS_SET = true +endif +ifeq ($(ARCH_CFLAGS),none) + ARCH_CFLAGS_IS_SET = true +endif +ifdef ARCH_CFLAGS_IS_SET + ifeq ($(processor),$(filter $(processor),aarch64 arm64)) + override ARCH_CFLAGS := -march=armv8-a+fp+simd + else ifeq ($(processor),$(filter $(processor),i386 x86_64)) + override ARCH_CFLAGS := -maes -mpclmul -mssse3 -msse4.2 + else ifeq ($(processor),$(filter $(processor),arm armv7 armv7l)) + override ARCH_CFLAGS := -mfpu=neon + else + $(error Unsupported architecture) + endif +endif + +FEATURE ?= +ifneq ($(FEATURE),) +ifneq ($(FEATURE),none) +COMMA:= , +ARCH_CFLAGS := $(ARCH_CFLAGS)+$(subst $(COMMA),+,$(FEATURE)) +endif +endif + +CXXFLAGS += -Wall -Wcast-qual -Wconversion -I. $(ARCH_CFLAGS) -std=gnu++14 +LDFLAGS += -lm +OBJS = \ + tests/binding.o \ + tests/common.o \ + tests/impl.o \ + tests/main.o +deps := $(OBJS:%.o=%.o.d) + +.SUFFIXES: .o .cpp +.cpp.o: + $(CXX) -o $@ $(CXXFLAGS) -c -MMD -MF $@.d $< + +EXEC = tests/main + +$(EXEC): $(OBJS) + $(CXX) $(LDFLAGS) -o $@ $^ + +check: tests/main +ifeq ($(processor),$(filter $(processor),aarch64 arm64 arm armv7l)) + $(CC) $(ARCH_CFLAGS) -c sse2neon.h +endif + $(EXEC_WRAPPER) $^ + +indent: + @echo "Formatting files with clang-format.." + @if ! hash clang-format-18; then echo "clang-format-18 is required to indent"; fi + clang-format-18 -i sse2neon.h tests/*.cpp tests/*.h + +.PHONY: clean check format +clean: + $(RM) $(OBJS) $(EXEC) $(deps) sse2neon.h.gch + +-include $(deps) diff --git a/deps/sse2neon/README.md b/deps/sse2neon/README.md new file mode 100644 index 000000000..cf6a38275 --- /dev/null +++ b/deps/sse2neon/README.md @@ -0,0 +1,300 @@ +# sse2neon +![GitHub Actions](https://github.com/DLTcollab/sse2neon/workflows/GitHub%20Actions/badge.svg) + +A C/C++ header file that converts Intel SSE intrinsics to Arm/Aarch64 NEON intrinsics. + +## Introduction + +`sse2neon` is a translator of Intel SSE (Streaming SIMD Extensions) intrinsics +to [Arm NEON](https://developer.arm.com/architectures/instruction-sets/simd-isas/neon), +shortening the time needed to get an Arm working program that then can be used to +extract profiles and to identify hot paths in the code. +The header file `sse2neon.h` contains several of the functions provided by Intel +intrinsic headers such as ``, only implemented with NEON-based counterparts +to produce the exact semantics of the intrinsics. + +## Mapping and Coverage + +Header file | Extension | +---|---| +`` | MMX | +`` | SSE | +`` | SSE2 | +`` | SSE3 | +`` | SSSE3 | +`` | SSE4.1 | +`` | SSE4.2 | +`` | AES | + +`sse2neon` aims to support SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2 and AES extension. + +In order to deliver NEON-equivalent intrinsics for all SSE intrinsics used widely, +please be aware that some SSE intrinsics exist a direct mapping with a concrete +NEON-equivalent intrinsic. Others, unfortunately, lack a 1:1 mapping, meaning that +their equivalents are built utilizing a number of NEON intrinsics. + +For example, SSE intrinsic `_mm_loadu_si128` has a direct NEON mapping (`vld1q_s32`), +but SSE intrinsic `_mm_maddubs_epi16` has to be implemented with 13+ NEON instructions. + +### Floating-point compatibility + +Some conversions require several NEON intrinsics, which may produce inconsistent results +compared to their SSE counterparts due to differences in the arithmetic rules of IEEE-754. + +Taking a possible conversion of `_mm_rsqrt_ps` as example: + +```c +__m128 _mm_rsqrt_ps(__m128 in) +{ + float32x4_t out = vrsqrteq_f32(vreinterpretq_f32_m128(in)); + + out = vmulq_f32( + out, vrsqrtsq_f32(vmulq_f32(vreinterpretq_f32_m128(in), out), out)); + + return vreinterpretq_m128_f32(out); +} +``` + +The `_mm_rsqrt_ps` conversion will produce NaN if a source value is `0.0` (first INF for the +reciprocal square root of `0.0`, then INF * `0.0` using `vmulq_f32`). In contrast, +the SSE counterpart produces INF if a source value is `0.0`. +As a result, additional treatments should be applied to ensure consistency between the conversion and its SSE counterpart. + +## Requirement + +Developers are advised to utilize sse2neon.h with GCC version 10 or higher, or Clang version 11 or higher. While sse2neon.h might be compatible with earlier versions, certain vector operation errors have been identified in those versions. For further details, refer to the discussion in issue [#622](https://github.com/DLTcollab/sse2neon/issues/622). + +## Usage + +- Put the file `sse2neon.h` in to your source code directory. + +- Locate the following SSE header files included in the code: +```C +#include +#include +``` + {p,t,s,n,w}mmintrin.h could be replaceable as well. + +- Replace them with: +```C +#include "sse2neon.h" +``` +- If you target Windows Arm64EC, pass `/D_DISABLE_SOFTINTRIN_=1` to MSVC or add `#define _DISABLE_SOFTINTRIN_ 1` in before `#include` any Windows header files to disable implicit inclusion of SSE header files. +- Explicitly specify platform-specific options to gcc/clang compilers. + * On ARMv8-A 64-bit targets, you should specify the following compiler option: (Remove `crypto` and/or `crc` if your architecture does not support cryptographic and/or CRC32 extensions) + ```shell + -march=armv8-a+fp+simd+crypto+crc + ``` + * On ARMv8-A 32-bit targets, you should specify the following compiler option: + ```shell + -mfpu=neon-fp-armv8 + ``` + * On ARMv7-A targets, you need to append the following compiler option: + ```shell + -mfpu=neon + ``` + +## Compile-time Configurations + +Though floating-point operations in NEON use the IEEE single-precision format, NEON does not fully comply to the IEEE standard when inputs or results are denormal or NaN values for minimizing power consumption as well as maximizing performance. +Considering the balance between correctness and performance, `sse2neon` recognizes the following compile-time configurations: +* `SSE2NEON_PRECISE_MINMAX`: Enable precise implementation of `_mm_min_{ps,pd}` and `_mm_max_{ps,pd}`. If you need consistent results such as handling with NaN values, enable it. +* `SSE2NEON_PRECISE_DIV`: Enable precise implementation of `_mm_rcp_ps` and `_mm_div_ps` by additional Netwon-Raphson iteration for accuracy. +* `SSE2NEON_PRECISE_SQRT`: Enable precise implementation of `_mm_sqrt_ps` and `_mm_rsqrt_ps` by additional Netwon-Raphson iteration for accuracy. +* `SSE2NEON_PRECISE_DP`: Enable precise implementation of `_mm_dp_pd`. When the conditional bit is not set, the corresponding multiplication would not be executed. +* `SSE2NEON_SUPPRESS_WARNINGS`: Set this macro to disable the warning which is emitted by default when optimizations are enabled. + +The above are turned off by default, and you should define the corresponding macro(s) as `1` before including `sse2neon.h` if you need the precise implementations. + +## Run Built-in Test Suite + +`sse2neon` provides a unified interface for developing test cases. These test +cases are located in `tests` directory, and the input data is specified at +runtime. Use the following commands to perform test cases: +```shell +$ make check +``` + +For running check with enabling features, you can use assign the features with `FEATURE` command. +If `none` is assigned, then the command will be the same as simply calling `make check`. +The following command enable `crypto` and `crc` features in the tests. +``` +$ make FEATURE=crypto+crc check +``` + +For running check on certain CPU, setting the mode of FPU, etc., +you can also assign the desired options with `ARCH_CFLAGS` command. +If `none` is assigned, the command acts as same as calling `make check`. +For instance, to run tests on Cortex-A53 with enabling ARM VFPv4 extension and NEON: +``` +$ make ARCH_CFLAGS="-mcpu=cortex-a53 -mfpu=neon-vfpv4" check +``` + +### Running tests on hosts other than ARM platform + +For running tests on hosts other than ARM platform, +you can specify GNU toolchain for cross compilation with `CROSS_COMPILE` command. +[QEMU](https://www.qemu.org/) should be installed in advance. + +For ARMv8-A running in 64-bit mode type: +```shell +$ make CROSS_COMPILE=aarch64-linux-gnu- check # ARMv8-A +``` + +For ARMv7-A type: +```shell +$ make CROSS_COMPILE=arm-linux-gnueabihf- check # ARMv7-A +``` + +For ARMv8-A running in 32-bit mode (A32 instruction set) type: +```shell +$ make \ + CROSS_COMPILE=arm-linux-gnueabihf- \ + ARCH_CFLAGS="-mcpu=cortex-a32 -mfpu=neon-fp-armv8" \ + check +``` + +Check the details via [Test Suite for SSE2NEON](tests/README.md). + +### Optimization + +The SSE2NEON project is designed with performance-sensitive scenarios in mind, and as such, optimization options (e.g. `O1`, `O2`) can lead to misbehavior under specific circumstances. For example, frequent changes to the rounding mode or repeated calls to `_MM_SET_DENORMALS_ZERO_MODE()` may introduce unintended behavior. + +Enforcing no optimizations for specific intrinsics could solve these boundary cases but may negatively impact general performance. Therefore, we have decided to prioritize performance and shift the responsibility for handling such edge cases to developers. + +It is important to be aware of these potential pitfalls when enabling optimizations and ensure that your code accounts for these scenarios if necessary. + + +## Adoptions +Here is a partial list of open source projects that have adopted `sse2neon` for Arm/Aarch64 support. +* [Aaru Data Preservation Suite](https://www.aaru.app/) is a fully-featured software package to preserve all storage media from the very old to the cutting edge, as well as to give detailed information about any supported image file (whether from Aaru or not) and to extract the files from those images. +* [aether-game-utils](https://github.com/johnhues/aether-game-utils) is a collection of cross platform utilities for quickly creating small game prototypes in C++. +* [ALE](https://github.com/sc932/ALE), aka Assembly Likelihood Evaluation, is a tool for evaluating accuracy of assemblies without the need of a reference genome. +* [AnchorWave](https://github.com/baoxingsong/AnchorWave), Anchored Wavefront Alignment, identifies collinear regions via conserved anchors (full-length CDS and full-length exon have been implemented currently) and breaks collinear regions into shorter fragments, i.e., anchor and inter-anchor intervals. +* [ATAK-CIV](https://github.com/deptofdefense/AndroidTacticalAssaultKit-CIV), Android Tactical Assault Kit for Civilian Use, is the official geospatial-temporal and situational awareness tool used by the US Government. +* [Apache Doris](https://doris.apache.org/) is a Massively Parallel Processing (MPP) based interactive SQL data warehousing for reporting and analysis. +* [Apache Impala](https://impala.apache.org/) is a lightning-fast, distributed SQL queries for petabytes of data stored in Apache Hadoop clusters. +* [Apache Kudu](https://kudu.apache.org/) completes Hadoop's storage layer to enable fast analytics on fast data. +* [apollo](https://github.com/ApolloAuto/apollo) is a high performance, flexible architecture which accelerates the development of Autonomous Vehicles. +* [ares](https://github.com/ares-emulator/ares) is a cross-platform, open source, multi-system emulator, focusing on accuracy and preservation. +* [ART](https://github.com/dinosaure/art) is an implementation in OCaml of [Adaptive Radix Tree](https://db.in.tum.de/~leis/papers/ART.pdf) (ART). +* [Async](https://github.com/romange/async) is a set of c++ primitives that allows efficient and rapid development in C++17 on GNU/Linux systems. +* [avec](https://github.com/unevens/avec) is a little library for using SIMD instructions on both x86 and Arm. +* [BEAGLE](https://github.com/beagle-dev/beagle-lib) is a high-performance library that can perform the core calculations at the heart of most Bayesian and Maximum Likelihood phylogenetics packages. +* [BitMagic](https://github.com/tlk00/BitMagic) implements compressed bit-vectors and containers (vectors) based on ideas of bit-slicing transform and Rank-Select compression, offering sets of method to architect your applications to use HPC techniques to save memory (thus be able to fit more data in one compute unit) and improve storage and traffic patterns when storing data vectors and models in files or object stores. +* [bipartite\_motif\_finder](https://github.com/soedinglab/bipartite_motif_finder) as known as BMF (Bipartite Motif Finder) is an open source tool for finding co-occurences of sequence motifs in genomic sequences. +* [Blender](https://www.blender.org/) is the free and open source 3D creation suite, supporting the entirety of the 3D pipeline. +* [Boo](https://github.com/AxioDL/boo) is a cross-platform windowing and event manager similar to SDL or SFML, with additional 3D rendering functionality. +* [Brickworks](https://github.com/sdangelo/brickworks) is a music DSP toolkit that supplies with the fundamental building blocks for creating and enhancing audio engines on any platform. +* [CARTA](https://github.com/CARTAvis/carta-backend) is a new visualization tool designed for viewing radio astronomy images in CASA, FITS, MIRIAD, and HDF5 formats (using the IDIA custom schema for HDF5). +* [Catcoon](https://github.com/i-evi/catcoon) is a [feedforward neural network](https://en.wikipedia.org/wiki/Feedforward_neural_network) implementation in C. +* [compute-runtime](https://github.com/intel/compute-runtime), the Intel Graphics Compute Runtime for oneAPI Level Zero and OpenCL Driver, provides compute API support (Level Zero, OpenCL) for Intel graphics hardware architectures (HD Graphics, Xe). +* [contour](https://github.com/contour-terminal/contour) is a modern and actually fast virtual terminal emulator. +* [Cog](https://github.com/losnoco/Cog) is a free and open source audio player for macOS. +* [dab-cmdline](https://github.com/JvanKatwijk/dab-cmdline) provides entries for the functionality to handle Digital audio broadcasting (DAB)/DAB+ through some simple calls. +* [DISTRHO](https://distrho.sourceforge.io/) is an open-source project for Cross-Platform Audio Plugins. +* [Dragonfly](https://github.com/dragonflydb/dragonfly) is a modern in-memory datastore, fully compatible with Redis and Memcached APIs. +* [EDGE](https://github.com/3dfxdev/EDGE) is an advanced OpenGL source port spawned from the DOOM engine, with focus on easy development and expansion for modders and end-users. +* [Embree](https://github.com/embree/embree) is a collection of high-performance ray tracing kernels. Its target users are graphics application engineers who want to improve the performance of their photo-realistic rendering application by leveraging Embree's performance-optimized ray tracing kernels. +* [emp-tool](https://github.com/emp-toolkit/emp-tool) aims to provide a benchmark for secure computation and allowing other researchers to experiment and extend. +* [Exudyn](https://github.com/jgerstmayr/EXUDYN) is a C++ based Python library for efficient simulation of flexible multibody dynamics systems. +* [FoundationDB](https://www.foundationdb.org) is a distributed database designed to handle large volumes of structured data across clusters of commodity servers. +* [fsrc](https://github.com/elsamuko/fsrc) is capable of searching large codebases for text snippets. +* [GDAL](https://gdal.org) is a translator library for raster and vector geospatial data formats that comes with a variety of useful command line utilities for data translation and processing. +* [gmmlib](https://github.com/intel/gmmlib) is the Intel Graphics Memory Management Library that provides device specific and buffer management for the Intel Graphics Compute Runtime for OpenCL and the Intel Media Driver for VAAPI. +* [HISE](https://github.com/christophhart/HISE) is a cross-platform open source audio application for building virtual instruments, emphasizing on sampling, but includes some basic synthesis features for making hybrid instruments as well as audio effects. +* [iqtree2](https://github.com/iqtree/iqtree2) is an efficient and versatile stochastic implementation to infer phylogenetic trees by maximum likelihood. +* [indelPost](https://github.com/stjude/indelPost) is a Python library for indel processing via realignment and read-based phasing to resolve alignment ambiguities. +* [IResearch](https://github.com/iresearch-toolkit/iresearch) is a cross-platform, high-performance document oriented search engine library written entirely in C++ with the focus on a pluggability of different ranking/similarity models. +* [Kraken](https://github.com/Wabi-Studios/Kraken) is a 3D animation platform redefining animation composition, collaborative workflows, simulation engines, skeletal rigging systems, and look development from storyboard to final render. +* [kram](https://github.com/alecazam/kram) is a wrapper to several popular encoders to and from PNG/[KTX](https://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/) files with [LDR/HDR and BC/ASTC/ETC2](https://developer.arm.com/solutions/graphics-and-gaming/developer-guides/learn-the-basics/adaptive-scalable-texture-compression/single-page). +* [Krita](https://invent.kde.org/graphics/krita) is a cross-platform application that offers an end-to-end solution for creating digital art files from scratch built on the KDE and Qt frameworks. +* [libCML](https://github.com/belosthomas/libCML) is a SLAM library and scientific tool, which include a novel fast thread-safe graph map implementation. +* [libhdfs3](https://github.com/ClickHouse/libhdfs3) is implemented based on native Hadoop RPC protocol and Hadoop Distributed File System (HDFS), a highly fault-tolerant distributed fs, data transfer protocol. +* [libpostal](https://github.com/openvenues/libpostal) is a C library for parsing/normalizing street addresses around the world using statistical NLP and open data. +* [libscapi](https://github.com/cryptobiu/libscapi) stands for the "Secure Computation API", providing reliable, efficient, and highly flexible cryptographic infrastructure. +* [libstreamvbyte](https://github.com/wst24365888/libstreamvbyte) is a C++ implementation of [StreamVByte](https://arxiv.org/abs/1709.08990). +* [libmatoya](https://github.com/matoya/libmatoya) is a cross-platform application development library, providing various features such as common cryptography tasks. +* [Loosejaw](https://github.com/TheHolyDiver/Loosejaw) provides deep hybrid CPU/GPU digital signal processing. +* [Madronalib](https://github.com/madronalabs/madronalib) enables efficient audio DSP on SIMD processors with readable and brief C++ code. +* [minimap2](https://github.com/lh3/minimap2) is a versatile sequence alignment program that aligns DNA or mRNA sequences against a large reference database. +* [mixed-fem](https://github.com/tytrusty/mixed-fem) is an open source reference implementation of Mixed Variational Finite Elements for Implicit Simulation of Deformables. +* [MMseqs2](https://github.com/soedinglab/MMseqs2) (Many-against-Many sequence searching) is a software suite to search and cluster huge protein and nucleotide sequence sets. +* [MRIcroGL](https://github.com/rordenlab/MRIcroGL) is a cross-platform tool for viewing NIfTI, DICOM, MGH, MHD, NRRD, AFNI format medical images. +* [N2](https://github.com/oddconcepts/n2o) is an approximate nearest neighborhoods algorithm library written in C++, providing a much faster search speed than other implementations when modeling large dataset. +* [nanors](https://github.com/sleepybishop/nanors) is a tiny, performant implementation of [Reed-Solomon codes](https://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction), capable of reaching multi-gigabit speeds on a single core. +* [niimath](https://github.com/rordenlab/niimath) is a general image calculator with superior performance. +* [NVIDIA GameWorks](https://developer.nvidia.com/gameworks-source-github) has been already used in a lot of games. These repositories are public on GitHub. +* [Nx Meta Platform Open Source Components](https://github.com/networkoptix/nx_open) are used to build all Powered-by-Nx products including Nx Witness Video Management System (VMS). +* [ofxNDI](https://github.com/leadedge/ofxNDI) is an [openFrameworks](https://openframeworks.cc/) addon to allow sending and receiving images over a network using the [NewTek](https://en.wikipedia.org/wiki/NewTek) Network Device Protocol. +* [OGRE](https://github.com/OGRECave/ogre) is a scene-oriented, flexible 3D engine written in C++ designed to make it easier and more intuitive for developers to produce games and demos utilising 3D hardware. +* [Olive](https://github.com/olive-editor/olive) is a free non-linear video editor for Windows, macOS, and Linux. +* [OpenColorIO](https://github.com/AcademySoftwareFoundation/OpenColorIO) a complete color management solution geared towards motion picture production with an emphasis on visual effects and computer animation. +* [OpenXRay](https://github.com/OpenXRay/xray-16) is an improved version of the X-Ray engine, used in world famous S.T.A.L.K.E.R. game series by GSC Game World. +* [parallel-n64](https://github.com/libretro/parallel-n64) is an optimized/rewritten Nintendo 64 emulator made specifically for [Libretro](https://www.libretro.com/). +* [Pathfinder C++](https://github.com/floppyhammer/pathfinder-cpp) is a fast, practical, GPU-based rasterizer for fonts and vector graphics using Vulkan and C++. +* [PFFFT](https://github.com/marton78/pffft) does 1D Fast Fourier Transforms, of single precision real and complex vectors. +* [pixaccess](https://github.com/oliverue/pixaccess) provides the abstractions for integer and float bitmaps, pixels, and aliased (nearest neighbor) and anti-aliased (bi-linearly interpolated) pixel access. +* [PlutoSDR Firmware](https://github.com/seanstone/plutosdr-fw) is the customized firmware for the [PlutoSDR](https://wiki.analog.com/university/tools/pluto) that can be used to introduce fundamentals of Software Defined Radio (SDR) or Radio Frequency (RF) or Communications as advanced topics in electrical engineering in a self or instructor lead setting. +* [PowerToys](https://github.com/microsoft/PowerToys) is a set of utilities for power users to tune and streamline their Windows experience for greater productivity. +* [Pygame](https://www.pygame.org) is cross-platform and designed to make it easy to write multimedia software, such as games, in Python. +* [R:RandomFieldsUtils](https://cran.r-project.org/web/packages/RandomFieldsUtils) provides various utilities might be used in spatial statistics and elsewhere. (CRAN) +* [RAxML](https://github.com/stamatak/standard-RAxML) is tool for Phylogenetic Analysis and Post-Analysis of Large Phylogenies. +* [ReHLDS](https://github.com/gennadykataev/rehlds) is fully compatible with latest Half-Life Dedicated Server (HLDS) with a lot of defects and (potential) bugs fixed. +* [rkcommon](https://github.com/ospray/rkcommon) represents a common set of C++ infrastructure and CMake utilities used by various components of [Intel oneAPI Rendering Toolkit](https://www.intel.com/content/www/us/en/developer/tools/oneapi/rendering-toolkit.html). +* [RPCS3](https://github.com/RPCS3/rpcs3) is the world's first free and open-source PlayStation 3 emulator/debugger, written in C++. +* [simd\_utils](https://github.com/JishinMaster/simd_utils) is a header-only library implementing common mathematical functions using SIMD intrinsics. +* [Sire](https://github.com/OpenBioSim/sire) is a molecular modelling framework that provides extensive functionality to manipulate representations of biomolecular systems. +* [SMhasher](https://github.com/rurban/smhasher) provides comprehensive Hash function quality and speed tests. +* [SNN++](https://github.com/ianmkim/snnpp) implements a single layer non linear Spiking Neural Network for images classification and generation. +* [Spack](https://github.com/spack/spack) is a multi-platform package manager that builds and installs multiple versions and configurations of software. +* [SRA](https://github.com/ncbi/sra-tools) is a collection of tools and libraries for using data in the [INSDC Sequence Read Archives](https://www.ncbi.nlm.nih.gov/sra/docs/). +* [srsLTE](https://github.com/srsLTE/srsLTE) is an open source SDR LTE software suite. +* [SSW](https://github.com/mengyao/Complete-Striped-Smith-Waterman-Library) is a fast implementation of the [Smith-Waterman algorithm](https://en.wikipedia.org/wiki/Smith%E2%80%93Waterman_algorithm), which uses the SIMD instructions to parallelize the algorithm at the instruction level. +* [Surge](https://github.com/surge-synthesizer/surge) is an open source digital synthesizer. +* [The Forge](https://github.com/ConfettiFX/The-Forge) is a cross-platform rendering framework, providing building blocks to write your own game engine. +* [Typesense](https://github.com/typesense/typesense) is a fast, typo-tolerant search engine for building delightful search experiences. +* [Vcpkg](https://github.com/microsoft/vcpkg) is a C++ Library Manager for Windows, Linux, and macOS. +* [VelocyPack](https://github.com/arangodb/velocypack) is a fast and compact format for serialization and storage. +* [VOLK](https://github.com/gnuradio/volk), Vector-Optimized Library of Kernel, is a sub-project of [GNU Radio](https://www.gnuradio.org/). +* [Vowpal Wabbit](https://github.com/VowpalWabbit/vowpal_wabbit) is a machine learning system which pushes the frontier of machine learning with techniques such as online, hashing, allreduce, reductions, learning2search, active, and interactive learning. +* [Winter](https://github.com/rosenthj/Winter) is the top rated chess engine from Switzerland and has competed at top invite only computer chess events. +* [XEVE](https://github.com/mpeg5/xeve) (eXtra-fast Essential Video Encoder) is an open sourced and fast MPEG-5 EVC encoder. +* [XMRig](https://github.com/xmrig/xmrig) is an open source CPU miner for [Monero](https://web.getmonero.org/) cryptocurrency. +* [xsimd](https://github.com/xtensor-stack/xsimd) provides a unified means for using SIMD intrinsics and parallelized, optimized mathematical functions. +* [YACL](https://github.com/secretflow/yasl) is a C++ library contains modules and utilities which [SecretFlow](https://github.com/secretflow) code depends on. + +## Related Projects +* [SIMDe](https://github.com/simd-everywhere/simde): fast and portable implementations of SIMD + intrinsics on hardware which doesn't natively support them, such as calling SSE functions on ARM. +* [CatBoost's sse2neon](https://github.com/catboost/catboost/blob/master/library/cpp/sse/sse2neon.h) +* [ARM\_NEON\_2\_x86\_SSE](https://github.com/intel/ARM_NEON_2_x86_SSE) +* [AvxToNeon](https://github.com/kunpengcompute/AvxToNeon) +* [sse2rvv](https://github.com/FeddrickAquino/sse2rvv): C header file that converts Intel SSE intrinsics to RISC-V Vector intrinsic. +* [sse2msa](https://github.com/i-evi/sse2msa): A C/C++ header file that converts Intel SSE intrinsics to MIPS/MIPS64 MSA intrinsics. +* [sse2zig](https://github.com/aqrit/sse2zig): Intel SSE intrinsics mapped to [Zig](https://ziglang.org/) vector extensions. +* [POWER/PowerPC support for GCC](https://github.com/gcc-mirror/gcc/blob/master/gcc/config/rs6000) contains a series of headers simplifying porting x86\_64 code that makes explicit use of Intel intrinsics to powerpc64le (pure little-endian mode that has been introduced with the [POWER8](https://en.wikipedia.org/wiki/POWER8)). + - implementation: [xmmintrin.h](https://github.com/gcc-mirror/gcc/blob/master/gcc/config/rs6000/xmmintrin.h), [emmintrin.h](https://github.com/gcc-mirror/gcc/blob/master/gcc/config/rs6000/emmintrin.h), [pmmintrin.h](https://github.com/gcc-mirror/gcc/blob/master/gcc/config/rs6000/pmmintrin.h), [tmmintrin.h](https://github.com/gcc-mirror/gcc/blob/master/gcc/config/rs6000/tmmintrin.h), [smmintrin.h](https://github.com/gcc-mirror/gcc/blob/master/gcc/config/rs6000/smmintrin.h) + +## Reference +* [Intel Intrinsics Guide](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html) +* [Microsoft: x86 intrinsics list](https://learn.microsoft.com/en-us/cpp/intrinsics/x86-intrinsics-list) +* [Arm Neon Intrinsics Reference](https://developer.arm.com/architectures/instruction-sets/simd-isas/neon/intrinsics) +* [Neon Programmer's Guide for Armv8-A](https://developer.arm.com/architectures/instruction-sets/simd-isas/neon/neon-programmers-guide-for-armv8-a) +* [NEON Programmer's Guide](https://static.docs.arm.com/den0018/a/DEN0018A_neon_programmers_guide_en.pdf) +* [qemu/target/i386/ops\_sse.h](https://github.com/qemu/qemu/blob/master/target/i386/ops_sse.h): Comprehensive SSE instruction emulation in C. Ideal for semantic checks. +* [Porting Takua Renderer to 64-bit ARM- Part 1](https://blog.yiningkarlli.com/2021/05/porting-takua-to-arm-pt1.html) +* [Porting Takua Renderer to 64-bit ARM- Part 2](https://blog.yiningkarlli.com/2021/07/porting-takua-to-arm-pt2.html) +* [Comparing SIMD on x86-64 and arm64](https://blog.yiningkarlli.com/2021/09/neon-vs-sse.html) +* [Port with SSE2Neon and SIMDe](https://developer.arm.com/documentation/102581/0200/Port-with-SSE2Neon-and-SIMDe) +* [Genomics: Optimizing the BWA aligner for Arm Servers](https://community.arm.com/arm-community-blogs/b/high-performance-computing-blog/posts/optimizing-genomics-and-the-bwa-aligner-for-arm-servers) +* [Bit twiddling with Arm Neon: beating SSE movemasks, counting bits and more](https://community.arm.com/arm-community-blogs/b/infrastructure-solutions-blog/posts/porting-x86-vector-bitmask-optimizations-to-arm-neon) +* [C/C++ on Graviton](https://github.com/aws/aws-graviton-getting-started/blob/main/c-c%2B%2B.md) +* [C/C++ on NVIDIA Grace](https://nvidia.github.io/grace-cpu-benchmarking-guide/developer/languages/c-c++.html) +* [Tune graphics-intensive games for Apple silicon](https://developer.apple.com/games/pathway/) +* [Benchmarking and Testing of Qualcomm Snapdragon System-on-Chip for JPL Space Applications and Missions](https://ieeexplore.ieee.org/abstract/document/9843518) +* [Spotlight: Petrobras Speeds Up Linear Solvers for Reservoir Simulation Using NVIDIA Grace CPU](https://developer.nvidia.com/blog/spotlight-petrobras-accelerates-linear-solvers-for-reservoir-simulation-using-nvidia-grace-cpu/) + +## Licensing + +`sse2neon` is freely redistributable under the MIT License. diff --git a/deps/sse2neon/sse2neon.h b/deps/sse2neon/sse2neon.h new file mode 100644 index 000000000..67728aac4 --- /dev/null +++ b/deps/sse2neon/sse2neon.h @@ -0,0 +1,9447 @@ +#ifndef SSE2NEON_H +#define SSE2NEON_H + +/* + * sse2neon is freely redistributable under the MIT License. + * + * Copyright (c) 2015-2024 SSE2NEON Contributors. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +// This header file provides a simple API translation layer +// between SSE intrinsics to their corresponding Arm/Aarch64 NEON versions +// +// Contributors to this work are: +// John W. Ratcliff +// Brandon Rowlett +// Ken Fast +// Eric van Beurden +// Alexander Potylitsin +// Hasindu Gamaarachchi +// Jim Huang +// Mark Cheng +// Malcolm James MacLeod +// Devin Hussey (easyaspi314) +// Sebastian Pop +// Developer Ecosystem Engineering +// Danila Kutenin +// François Turban (JishinMaster) +// Pei-Hsuan Hung +// Yang-Hao Yuan +// Syoyo Fujita +// Brecht Van Lommel +// Jonathan Hue +// Cuda Chen +// Aymen Qader +// Anthony Roberts +// Sean Luchen + +/* Tunable configurations */ + +/* Enable precise implementation of math operations + * This would slow down the computation a bit, but gives consistent result with + * x86 SSE. (e.g. would solve a hole or NaN pixel in the rendering result) + */ +/* _mm_min|max_ps|ss|pd|sd */ +#ifndef SSE2NEON_PRECISE_MINMAX +#define SSE2NEON_PRECISE_MINMAX (0) +#endif +/* _mm_rcp_ps */ +#ifndef SSE2NEON_PRECISE_DIV +#define SSE2NEON_PRECISE_DIV (0) +#endif +/* _mm_sqrt_ps and _mm_rsqrt_ps */ +#ifndef SSE2NEON_PRECISE_SQRT +#define SSE2NEON_PRECISE_SQRT (0) +#endif +/* _mm_dp_pd */ +#ifndef SSE2NEON_PRECISE_DP +#define SSE2NEON_PRECISE_DP (0) +#endif + +/* Enable inclusion of windows.h on MSVC platforms + * This makes _mm_clflush functional on windows, as there is no builtin. + */ +#ifndef SSE2NEON_INCLUDE_WINDOWS_H +#define SSE2NEON_INCLUDE_WINDOWS_H (0) +#endif + +/* compiler specific definitions */ +#if defined(__GNUC__) || defined(__clang__) +#pragma push_macro("FORCE_INLINE") +#pragma push_macro("ALIGN_STRUCT") +#define FORCE_INLINE static inline __attribute__((always_inline)) +#define ALIGN_STRUCT(x) __attribute__((aligned(x))) +#define _sse2neon_likely(x) __builtin_expect(!!(x), 1) +#define _sse2neon_unlikely(x) __builtin_expect(!!(x), 0) +#elif defined(_MSC_VER) +#if _MSVC_TRADITIONAL +#error Using the traditional MSVC preprocessor is not supported! Use /Zc:preprocessor instead. +#endif +#ifndef FORCE_INLINE +#define FORCE_INLINE static inline +#endif +#ifndef ALIGN_STRUCT +#define ALIGN_STRUCT(x) __declspec(align(x)) +#endif +#define _sse2neon_likely(x) (x) +#define _sse2neon_unlikely(x) (x) +#else +#pragma message("Macro name collisions may happen with unsupported compilers.") +#endif + +#if !defined(__clang__) && defined(__GNUC__) && __GNUC__ < 10 +#warning "GCC versions earlier than 10 are not supported." +#endif + +#if defined(__OPTIMIZE__) && !defined(SSE2NEON_SUPPRESS_WARNINGS) +#warning \ + "Report any potential compiler optimization issues when using SSE2NEON. See the 'Optimization' section at https://github.com/DLTcollab/sse2neon." +#endif + +/* C language does not allow initializing a variable with a function call. */ +#ifdef __cplusplus +#define _sse2neon_const static const +#else +#define _sse2neon_const const +#endif + +#include +#include +#include +#include + +FORCE_INLINE double sse2neon_recast_u64_f64(uint64_t val) +{ + double tmp; + memcpy(&tmp, &val, sizeof(uint64_t)); + return tmp; +} +FORCE_INLINE int64_t sse2neon_recast_f64_s64(double val) +{ + int64_t tmp; + memcpy(&tmp, &val, sizeof(uint64_t)); + return tmp; +} + +#if defined(_WIN32) && !defined(__MINGW32__) +/* Definitions for _mm_{malloc,free} are provided by from MSVC. */ +#define SSE2NEON_ALLOC_DEFINED +#endif + +/* If using MSVC */ +#ifdef _MSC_VER +#if defined(_M_ARM64EC) +#define _DISABLE_SOFTINTRIN_ 1 +#endif +#include +#if SSE2NEON_INCLUDE_WINDOWS_H +#include +#include +#endif + +#if !defined(__cplusplus) +#error SSE2NEON only supports C++ compilation with this compiler +#endif + +#ifdef SSE2NEON_ALLOC_DEFINED +#include +#endif + +#if (defined(_M_AMD64) || defined(__x86_64__)) || \ + (defined(_M_ARM64) || defined(_M_ARM64EC) || defined(__arm64__)) +#define SSE2NEON_HAS_BITSCAN64 +#endif +#endif + +#if defined(__GNUC__) || defined(__clang__) +#define _sse2neon_define0(type, s, body) \ + __extension__({ \ + type _a = (s); \ + body \ + }) +#define _sse2neon_define1(type, s, body) \ + __extension__({ \ + type _a = (s); \ + body \ + }) +#define _sse2neon_define2(type, a, b, body) \ + __extension__({ \ + type _a = (a), _b = (b); \ + body \ + }) +#define _sse2neon_return(ret) (ret) +#else +#define _sse2neon_define0(type, a, body) [=](type _a) { body }(a) +#define _sse2neon_define1(type, a, body) [](type _a) { body }(a) +#define _sse2neon_define2(type, a, b, body) \ + [](type _a, type _b) { body }((a), (b)) +#define _sse2neon_return(ret) return ret +#endif + +#define _sse2neon_init(...) \ + { \ + __VA_ARGS__ \ + } + +/* Compiler barrier */ +#if defined(_MSC_VER) && !defined(__clang__) +#define SSE2NEON_BARRIER() _ReadWriteBarrier() +#else +#define SSE2NEON_BARRIER() \ + do { \ + __asm__ __volatile__("" ::: "memory"); \ + (void) 0; \ + } while (0) +#endif + +/* Memory barriers + * __atomic_thread_fence does not include a compiler barrier; instead, + * the barrier is part of __atomic_load/__atomic_store's "volatile-like" + * semantics. + */ +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) +#include +#endif + +FORCE_INLINE void _sse2neon_smp_mb(void) +{ + SSE2NEON_BARRIER(); +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \ + !defined(__STDC_NO_ATOMICS__) + atomic_thread_fence(memory_order_seq_cst); +#elif defined(__GNUC__) || defined(__clang__) + __atomic_thread_fence(__ATOMIC_SEQ_CST); +#else /* MSVC */ + __dmb(_ARM64_BARRIER_ISH); +#endif +} + +/* Architecture-specific build options */ +/* FIXME: #pragma GCC push_options is only available on GCC */ +#if defined(__GNUC__) +#if defined(__arm__) && __ARM_ARCH == 7 +/* According to ARM C Language Extensions Architecture specification, + * __ARM_NEON is defined to a value indicating the Advanced SIMD (NEON) + * architecture supported. + */ +#if !defined(__ARM_NEON) || !defined(__ARM_NEON__) +#error "You must enable NEON instructions (e.g. -mfpu=neon) to use SSE2NEON." +#endif +#if !defined(__clang__) +#pragma GCC push_options +#pragma GCC target("fpu=neon") +#endif +#elif defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) +#if !defined(__clang__) && !defined(_MSC_VER) +#pragma GCC push_options +#pragma GCC target("+simd") +#endif +#elif __ARM_ARCH == 8 +#if !defined(__ARM_NEON) || !defined(__ARM_NEON__) +#error \ + "You must enable NEON instructions (e.g. -mfpu=neon-fp-armv8) to use SSE2NEON." +#endif +#if !defined(__clang__) && !defined(_MSC_VER) +#pragma GCC push_options +#endif +#else +#error \ + "Unsupported target. Must be either ARMv7-A+NEON or ARMv8-A \ +(you could try setting target explicitly with -march or -mcpu)" +#endif +#endif + +#include +#if (!defined(__aarch64__) && !defined(_M_ARM64) && !defined(_M_ARM64EC)) && \ + (__ARM_ARCH == 8) +#if defined __has_include && __has_include() +#include +#endif +#endif + +/* Apple Silicon cache lines are double of what is commonly used by Intel, AMD + * and other Arm microarchitectures use. + * From sysctl -a on Apple M1: + * hw.cachelinesize: 128 + */ +#if defined(__APPLE__) && (defined(__aarch64__) || defined(__arm64__)) +#define SSE2NEON_CACHELINE_SIZE 128 +#else +#define SSE2NEON_CACHELINE_SIZE 64 +#endif + +/* Rounding functions require either Aarch64 instructions or libm fallback */ +#if !defined(__aarch64__) && !defined(_M_ARM64) && !defined(_M_ARM64EC) +#include +#endif + +/* On ARMv7, some registers, such as PMUSERENR and PMCCNTR, are read-only + * or even not accessible in user mode. + * To write or access to these registers in user mode, + * we have to perform syscall instead. + */ +#if !defined(__aarch64__) && !defined(_M_ARM64) && !defined(_M_ARM64EC) +#include +#endif + +/* "__has_builtin" can be used to query support for built-in functions + * provided by gcc/clang and other compilers that support it. + */ +#ifndef __has_builtin /* GCC prior to 10 or non-clang compilers */ +/* Compatibility with gcc <= 9 */ +#if defined(__GNUC__) && (__GNUC__ <= 9) +#define __has_builtin(x) HAS##x +#define HAS__builtin_popcount 1 +#define HAS__builtin_popcountll 1 + +// __builtin_shuffle introduced in GCC 4.7.0 +#if (__GNUC__ >= 5) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) +#define HAS__builtin_shuffle 1 +#else +#define HAS__builtin_shuffle 0 +#endif + +#define HAS__builtin_shufflevector 0 +#define HAS__builtin_nontemporal_store 0 +#else +#define __has_builtin(x) 0 +#endif +#endif + +/** + * MACRO for shuffle parameter for _mm_shuffle_ps(). + * Argument fp3 is a digit[0123] that represents the fp from argument "b" + * of mm_shuffle_ps that will be placed in fp3 of result. fp2 is the same + * for fp2 in result. fp1 is a digit[0123] that represents the fp from + * argument "a" of mm_shuffle_ps that will be places in fp1 of result. + * fp0 is the same for fp0 of result. + */ +#define _MM_SHUFFLE(fp3, fp2, fp1, fp0) \ + (((fp3) << 6) | ((fp2) << 4) | ((fp1) << 2) | ((fp0))) + +/** + * MACRO for shuffle parameter for _mm_shuffle_pd(). + * Argument fp1 is a digit[01] that represents the fp from argument "b" + * of mm_shuffle_pd that will be placed in fp1 of result. + * fp0 is a digit[01] that represents the fp from argument "a" of mm_shuffle_pd + * that will be placed in fp0 of result. + */ +#define _MM_SHUFFLE2(fp1, fp0) (((fp1) << 1) | (fp0)) + +#if __has_builtin(__builtin_shufflevector) +#define _sse2neon_shuffle(type, a, b, ...) \ + __builtin_shufflevector(a, b, __VA_ARGS__) +#elif __has_builtin(__builtin_shuffle) +#define _sse2neon_shuffle(type, a, b, ...) \ + __extension__({ \ + type tmp = {__VA_ARGS__}; \ + __builtin_shuffle(a, b, tmp); \ + }) +#endif + +#ifdef _sse2neon_shuffle +#define vshuffle_s16(a, b, ...) _sse2neon_shuffle(int16x4_t, a, b, __VA_ARGS__) +#define vshuffleq_s16(a, b, ...) _sse2neon_shuffle(int16x8_t, a, b, __VA_ARGS__) +#define vshuffle_s32(a, b, ...) _sse2neon_shuffle(int32x2_t, a, b, __VA_ARGS__) +#define vshuffleq_s32(a, b, ...) _sse2neon_shuffle(int32x4_t, a, b, __VA_ARGS__) +#define vshuffle_s64(a, b, ...) _sse2neon_shuffle(int64x1_t, a, b, __VA_ARGS__) +#define vshuffleq_s64(a, b, ...) _sse2neon_shuffle(int64x2_t, a, b, __VA_ARGS__) +#endif + +/* Rounding mode macros. */ +#define _MM_FROUND_TO_NEAREST_INT 0x00 +#define _MM_FROUND_TO_NEG_INF 0x01 +#define _MM_FROUND_TO_POS_INF 0x02 +#define _MM_FROUND_TO_ZERO 0x03 +#define _MM_FROUND_CUR_DIRECTION 0x04 +#define _MM_FROUND_NO_EXC 0x08 +#define _MM_FROUND_RAISE_EXC 0x00 +#define _MM_FROUND_NINT (_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_RAISE_EXC) +#define _MM_FROUND_FLOOR (_MM_FROUND_TO_NEG_INF | _MM_FROUND_RAISE_EXC) +#define _MM_FROUND_CEIL (_MM_FROUND_TO_POS_INF | _MM_FROUND_RAISE_EXC) +#define _MM_FROUND_TRUNC (_MM_FROUND_TO_ZERO | _MM_FROUND_RAISE_EXC) +#define _MM_FROUND_RINT (_MM_FROUND_CUR_DIRECTION | _MM_FROUND_RAISE_EXC) +#define _MM_FROUND_NEARBYINT (_MM_FROUND_CUR_DIRECTION | _MM_FROUND_NO_EXC) +#define _MM_ROUND_NEAREST 0x0000 +#define _MM_ROUND_DOWN 0x2000 +#define _MM_ROUND_UP 0x4000 +#define _MM_ROUND_TOWARD_ZERO 0x6000 +/* Flush zero mode macros. */ +#define _MM_FLUSH_ZERO_MASK 0x8000 +#define _MM_FLUSH_ZERO_ON 0x8000 +#define _MM_FLUSH_ZERO_OFF 0x0000 +/* Denormals are zeros mode macros. */ +#define _MM_DENORMALS_ZERO_MASK 0x0040 +#define _MM_DENORMALS_ZERO_ON 0x0040 +#define _MM_DENORMALS_ZERO_OFF 0x0000 + +/* indicate immediate constant argument in a given range */ +#define __constrange(a, b) const + +/* A few intrinsics accept traditional data types like ints or floats, but + * most operate on data types that are specific to SSE. + * If a vector type ends in d, it contains doubles, and if it does not have + * a suffix, it contains floats. An integer vector type can contain any type + * of integer, from chars to shorts to unsigned long longs. + */ +typedef int64x1_t __m64; +typedef float32x4_t __m128; /* 128-bit vector containing 4 floats */ +// On ARM 32-bit architecture, the float64x2_t is not supported. +// The data type __m128d should be represented in a different way for related +// intrinsic conversion. +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) +typedef float64x2_t __m128d; /* 128-bit vector containing 2 doubles */ +#else +typedef float32x4_t __m128d; +#endif +typedef int64x2_t __m128i; /* 128-bit vector containing integers */ + +// Some intrinsics operate on unaligned data types. +typedef int16_t ALIGN_STRUCT(1) unaligned_int16_t; +typedef int32_t ALIGN_STRUCT(1) unaligned_int32_t; +typedef int64_t ALIGN_STRUCT(1) unaligned_int64_t; + +// __int64 is defined in the Intrinsics Guide which maps to different datatype +// in different data model +#if !(defined(_WIN32) || defined(_WIN64) || defined(__int64)) +#if (defined(__x86_64__) || defined(__i386__)) +#define __int64 long long +#else +#define __int64 int64_t +#endif +#endif + +/* type-safe casting between types */ + +#define vreinterpretq_m128_f16(x) vreinterpretq_f32_f16(x) +#define vreinterpretq_m128_f32(x) (x) +#define vreinterpretq_m128_f64(x) vreinterpretq_f32_f64(x) + +#define vreinterpretq_m128_u8(x) vreinterpretq_f32_u8(x) +#define vreinterpretq_m128_u16(x) vreinterpretq_f32_u16(x) +#define vreinterpretq_m128_u32(x) vreinterpretq_f32_u32(x) +#define vreinterpretq_m128_u64(x) vreinterpretq_f32_u64(x) + +#define vreinterpretq_m128_s8(x) vreinterpretq_f32_s8(x) +#define vreinterpretq_m128_s16(x) vreinterpretq_f32_s16(x) +#define vreinterpretq_m128_s32(x) vreinterpretq_f32_s32(x) +#define vreinterpretq_m128_s64(x) vreinterpretq_f32_s64(x) + +#define vreinterpretq_f16_m128(x) vreinterpretq_f16_f32(x) +#define vreinterpretq_f32_m128(x) (x) +#define vreinterpretq_f64_m128(x) vreinterpretq_f64_f32(x) + +#define vreinterpretq_u8_m128(x) vreinterpretq_u8_f32(x) +#define vreinterpretq_u16_m128(x) vreinterpretq_u16_f32(x) +#define vreinterpretq_u32_m128(x) vreinterpretq_u32_f32(x) +#define vreinterpretq_u64_m128(x) vreinterpretq_u64_f32(x) + +#define vreinterpretq_s8_m128(x) vreinterpretq_s8_f32(x) +#define vreinterpretq_s16_m128(x) vreinterpretq_s16_f32(x) +#define vreinterpretq_s32_m128(x) vreinterpretq_s32_f32(x) +#define vreinterpretq_s64_m128(x) vreinterpretq_s64_f32(x) + +#define vreinterpretq_m128i_s8(x) vreinterpretq_s64_s8(x) +#define vreinterpretq_m128i_s16(x) vreinterpretq_s64_s16(x) +#define vreinterpretq_m128i_s32(x) vreinterpretq_s64_s32(x) +#define vreinterpretq_m128i_s64(x) (x) + +#define vreinterpretq_m128i_u8(x) vreinterpretq_s64_u8(x) +#define vreinterpretq_m128i_u16(x) vreinterpretq_s64_u16(x) +#define vreinterpretq_m128i_u32(x) vreinterpretq_s64_u32(x) +#define vreinterpretq_m128i_u64(x) vreinterpretq_s64_u64(x) + +#define vreinterpretq_f32_m128i(x) vreinterpretq_f32_s64(x) +#define vreinterpretq_f64_m128i(x) vreinterpretq_f64_s64(x) + +#define vreinterpretq_s8_m128i(x) vreinterpretq_s8_s64(x) +#define vreinterpretq_s16_m128i(x) vreinterpretq_s16_s64(x) +#define vreinterpretq_s32_m128i(x) vreinterpretq_s32_s64(x) +#define vreinterpretq_s64_m128i(x) (x) + +#define vreinterpretq_u8_m128i(x) vreinterpretq_u8_s64(x) +#define vreinterpretq_u16_m128i(x) vreinterpretq_u16_s64(x) +#define vreinterpretq_u32_m128i(x) vreinterpretq_u32_s64(x) +#define vreinterpretq_u64_m128i(x) vreinterpretq_u64_s64(x) + +#define vreinterpret_m64_s8(x) vreinterpret_s64_s8(x) +#define vreinterpret_m64_s16(x) vreinterpret_s64_s16(x) +#define vreinterpret_m64_s32(x) vreinterpret_s64_s32(x) +#define vreinterpret_m64_s64(x) (x) + +#define vreinterpret_m64_u8(x) vreinterpret_s64_u8(x) +#define vreinterpret_m64_u16(x) vreinterpret_s64_u16(x) +#define vreinterpret_m64_u32(x) vreinterpret_s64_u32(x) +#define vreinterpret_m64_u64(x) vreinterpret_s64_u64(x) + +#define vreinterpret_m64_f16(x) vreinterpret_s64_f16(x) +#define vreinterpret_m64_f32(x) vreinterpret_s64_f32(x) +#define vreinterpret_m64_f64(x) vreinterpret_s64_f64(x) + +#define vreinterpret_u8_m64(x) vreinterpret_u8_s64(x) +#define vreinterpret_u16_m64(x) vreinterpret_u16_s64(x) +#define vreinterpret_u32_m64(x) vreinterpret_u32_s64(x) +#define vreinterpret_u64_m64(x) vreinterpret_u64_s64(x) + +#define vreinterpret_s8_m64(x) vreinterpret_s8_s64(x) +#define vreinterpret_s16_m64(x) vreinterpret_s16_s64(x) +#define vreinterpret_s32_m64(x) vreinterpret_s32_s64(x) +#define vreinterpret_s64_m64(x) (x) + +#define vreinterpret_f32_m64(x) vreinterpret_f32_s64(x) + +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) +#define vreinterpretq_m128d_s32(x) vreinterpretq_f64_s32(x) +#define vreinterpretq_m128d_s64(x) vreinterpretq_f64_s64(x) + +#define vreinterpretq_m128d_u64(x) vreinterpretq_f64_u64(x) + +#define vreinterpretq_m128d_f32(x) vreinterpretq_f64_f32(x) +#define vreinterpretq_m128d_f64(x) (x) + +#define vreinterpretq_s64_m128d(x) vreinterpretq_s64_f64(x) + +#define vreinterpretq_u32_m128d(x) vreinterpretq_u32_f64(x) +#define vreinterpretq_u64_m128d(x) vreinterpretq_u64_f64(x) + +#define vreinterpretq_f64_m128d(x) (x) +#define vreinterpretq_f32_m128d(x) vreinterpretq_f32_f64(x) +#else +#define vreinterpretq_m128d_s32(x) vreinterpretq_f32_s32(x) +#define vreinterpretq_m128d_s64(x) vreinterpretq_f32_s64(x) + +#define vreinterpretq_m128d_u32(x) vreinterpretq_f32_u32(x) +#define vreinterpretq_m128d_u64(x) vreinterpretq_f32_u64(x) + +#define vreinterpretq_m128d_f32(x) (x) + +#define vreinterpretq_s64_m128d(x) vreinterpretq_s64_f32(x) + +#define vreinterpretq_u32_m128d(x) vreinterpretq_u32_f32(x) +#define vreinterpretq_u64_m128d(x) vreinterpretq_u64_f32(x) + +#define vreinterpretq_f32_m128d(x) (x) +#endif + +// A struct is defined in this header file called 'SIMDVec' which can be used +// by applications which attempt to access the contents of an __m128 struct +// directly. It is important to note that accessing the __m128 struct directly +// is bad coding practice by Microsoft: @see: +// https://learn.microsoft.com/en-us/cpp/cpp/m128 +// +// However, some legacy source code may try to access the contents of an __m128 +// struct directly so the developer can use the SIMDVec as an alias for it. Any +// casting must be done manually by the developer, as you cannot cast or +// otherwise alias the base NEON data type for intrinsic operations. +// +// union intended to allow direct access to an __m128 variable using the names +// that the MSVC compiler provides. This union should really only be used when +// trying to access the members of the vector as integer values. GCC/clang +// allow native access to the float members through a simple array access +// operator (in C since 4.6, in C++ since 4.8). +// +// Ideally direct accesses to SIMD vectors should not be used since it can cause +// a performance hit. If it really is needed however, the original __m128 +// variable can be aliased with a pointer to this union and used to access +// individual components. The use of this union should be hidden behind a macro +// that is used throughout the codebase to access the members instead of always +// declaring this type of variable. +typedef union ALIGN_STRUCT(16) SIMDVec { + float m128_f32[4]; // as floats - DON'T USE. Added for convenience. + int8_t m128_i8[16]; // as signed 8-bit integers. + int16_t m128_i16[8]; // as signed 16-bit integers. + int32_t m128_i32[4]; // as signed 32-bit integers. + int64_t m128_i64[2]; // as signed 64-bit integers. + uint8_t m128_u8[16]; // as unsigned 8-bit integers. + uint16_t m128_u16[8]; // as unsigned 16-bit integers. + uint32_t m128_u32[4]; // as unsigned 32-bit integers. + uint64_t m128_u64[2]; // as unsigned 64-bit integers. +} SIMDVec; + +// casting using SIMDVec +#define vreinterpretq_nth_u64_m128i(x, n) (((SIMDVec *) &x)->m128_u64[n]) +#define vreinterpretq_nth_u32_m128i(x, n) (((SIMDVec *) &x)->m128_u32[n]) +#define vreinterpretq_nth_u8_m128i(x, n) (((SIMDVec *) &x)->m128_u8[n]) + +/* SSE macros */ +#define _MM_GET_FLUSH_ZERO_MODE _sse2neon_mm_get_flush_zero_mode +#define _MM_SET_FLUSH_ZERO_MODE _sse2neon_mm_set_flush_zero_mode +#define _MM_GET_DENORMALS_ZERO_MODE _sse2neon_mm_get_denormals_zero_mode +#define _MM_SET_DENORMALS_ZERO_MODE _sse2neon_mm_set_denormals_zero_mode + +// Function declaration +// SSE +FORCE_INLINE unsigned int _MM_GET_ROUNDING_MODE(void); +FORCE_INLINE __m128 _mm_move_ss(__m128, __m128); +FORCE_INLINE __m128 _mm_or_ps(__m128, __m128); +FORCE_INLINE __m128 _mm_set_ps1(float); +FORCE_INLINE __m128 _mm_setzero_ps(void); +// SSE2 +FORCE_INLINE __m128i _mm_and_si128(__m128i, __m128i); +FORCE_INLINE __m128i _mm_castps_si128(__m128); +FORCE_INLINE __m128i _mm_cmpeq_epi32(__m128i, __m128i); +FORCE_INLINE __m128i _mm_cvtps_epi32(__m128); +FORCE_INLINE __m128d _mm_move_sd(__m128d, __m128d); +FORCE_INLINE __m128i _mm_or_si128(__m128i, __m128i); +FORCE_INLINE __m128i _mm_set_epi32(int, int, int, int); +FORCE_INLINE __m128i _mm_set_epi64x(int64_t, int64_t); +FORCE_INLINE __m128d _mm_set_pd(double, double); +FORCE_INLINE __m128i _mm_set1_epi32(int); +FORCE_INLINE __m128i _mm_setzero_si128(void); +// SSE4.1 +FORCE_INLINE __m128d _mm_ceil_pd(__m128d); +FORCE_INLINE __m128 _mm_ceil_ps(__m128); +FORCE_INLINE __m128d _mm_floor_pd(__m128d); +FORCE_INLINE __m128 _mm_floor_ps(__m128); +FORCE_INLINE __m128d _mm_round_pd(__m128d, int); +FORCE_INLINE __m128 _mm_round_ps(__m128, int); +// SSE4.2 +FORCE_INLINE uint32_t _mm_crc32_u8(uint32_t, uint8_t); + +/* Backwards compatibility for compilers with lack of specific type support */ + +// Older gcc does not define vld1q_u8_x4 type +#if defined(__GNUC__) && !defined(__clang__) && \ + ((__GNUC__ <= 13 && defined(__arm__)) || \ + (__GNUC__ == 10 && __GNUC_MINOR__ < 3 && defined(__aarch64__)) || \ + (__GNUC__ <= 9 && defined(__aarch64__))) +FORCE_INLINE uint8x16x4_t _sse2neon_vld1q_u8_x4(const uint8_t *p) +{ + uint8x16x4_t ret; + ret.val[0] = vld1q_u8(p + 0); + ret.val[1] = vld1q_u8(p + 16); + ret.val[2] = vld1q_u8(p + 32); + ret.val[3] = vld1q_u8(p + 48); + return ret; +} +#else +// Wraps vld1q_u8_x4 +FORCE_INLINE uint8x16x4_t _sse2neon_vld1q_u8_x4(const uint8_t *p) +{ + return vld1q_u8_x4(p); +} +#endif + +#if !defined(__aarch64__) && !defined(_M_ARM64) && !defined(_M_ARM64EC) +/* emulate vaddv u8 variant */ +FORCE_INLINE uint8_t _sse2neon_vaddv_u8(uint8x8_t v8) +{ + const uint64x1_t v1 = vpaddl_u32(vpaddl_u16(vpaddl_u8(v8))); + return vget_lane_u8(vreinterpret_u8_u64(v1), 0); +} +#else +// Wraps vaddv_u8 +FORCE_INLINE uint8_t _sse2neon_vaddv_u8(uint8x8_t v8) +{ + return vaddv_u8(v8); +} +#endif + +#if !defined(__aarch64__) && !defined(_M_ARM64) && !defined(_M_ARM64EC) +/* emulate vaddvq u8 variant */ +FORCE_INLINE uint8_t _sse2neon_vaddvq_u8(uint8x16_t a) +{ + uint8x8_t tmp = vpadd_u8(vget_low_u8(a), vget_high_u8(a)); + uint8_t res = 0; + for (int i = 0; i < 8; ++i) + res += tmp[i]; + return res; +} +#else +// Wraps vaddvq_u8 +FORCE_INLINE uint8_t _sse2neon_vaddvq_u8(uint8x16_t a) +{ + return vaddvq_u8(a); +} +#endif + +#if !defined(__aarch64__) && !defined(_M_ARM64) && !defined(_M_ARM64EC) +/* emulate vaddvq u16 variant */ +FORCE_INLINE uint16_t _sse2neon_vaddvq_u16(uint16x8_t a) +{ + uint32x4_t m = vpaddlq_u16(a); + uint64x2_t n = vpaddlq_u32(m); + uint64x1_t o = vget_low_u64(n) + vget_high_u64(n); + + return vget_lane_u32((uint32x2_t) o, 0); +} +#else +// Wraps vaddvq_u16 +FORCE_INLINE uint16_t _sse2neon_vaddvq_u16(uint16x8_t a) +{ + return vaddvq_u16(a); +} +#endif + +/* Function Naming Conventions + * The naming convention of SSE intrinsics is straightforward. A generic SSE + * intrinsic function is given as follows: + * _mm__ + * + * The parts of this format are given as follows: + * 1. describes the operation performed by the intrinsic + * 2. identifies the data type of the function's primary arguments + * + * This last part, , is a little complicated. It identifies the + * content of the input values, and can be set to any of the following values: + * + ps - vectors contain floats (ps stands for packed single-precision) + * + pd - vectors contain doubles (pd stands for packed double-precision) + * + epi8/epi16/epi32/epi64 - vectors contain 8-bit/16-bit/32-bit/64-bit + * signed integers + * + epu8/epu16/epu32/epu64 - vectors contain 8-bit/16-bit/32-bit/64-bit + * unsigned integers + * + si128 - unspecified 128-bit vector or 256-bit vector + * + m128/m128i/m128d - identifies input vector types when they are different + * than the type of the returned vector + * + * For example, _mm_setzero_ps. The _mm implies that the function returns + * a 128-bit vector. The _ps at the end implies that the argument vectors + * contain floats. + * + * A complete example: Byte Shuffle - pshufb (_mm_shuffle_epi8) + * // Set packed 16-bit integers. 128 bits, 8 short, per 16 bits + * __m128i v_in = _mm_setr_epi16(1, 2, 3, 4, 5, 6, 7, 8); + * // Set packed 8-bit integers + * // 128 bits, 16 chars, per 8 bits + * __m128i v_perm = _mm_setr_epi8(1, 0, 2, 3, 8, 9, 10, 11, + * 4, 5, 12, 13, 6, 7, 14, 15); + * // Shuffle packed 8-bit integers + * __m128i v_out = _mm_shuffle_epi8(v_in, v_perm); // pshufb + */ + +/* Constants for use with _mm_prefetch. */ +#if defined(_M_ARM64EC) +/* winnt.h already defines these constants as macros, so undefine them first. */ +#undef _MM_HINT_NTA +#undef _MM_HINT_T0 +#undef _MM_HINT_T1 +#undef _MM_HINT_T2 +#endif +enum _mm_hint { + _MM_HINT_NTA = 0, /* load data to L1 and L2 cache, mark it as NTA */ + _MM_HINT_T0 = 1, /* load data to L1 and L2 cache */ + _MM_HINT_T1 = 2, /* load data to L2 cache only */ + _MM_HINT_T2 = 3, /* load data to L2 cache only, mark it as NTA */ +}; + +// The bit field mapping to the FPCR(floating-point control register) +typedef struct { + uint16_t res0; + uint8_t res1 : 6; + uint8_t bit22 : 1; + uint8_t bit23 : 1; + uint8_t bit24 : 1; + uint8_t res2 : 7; +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + uint32_t res3; +#endif +} fpcr_bitfield; + +// Takes the upper 64 bits of a and places it in the low end of the result +// Takes the lower 64 bits of b and places it into the high end of the result. +FORCE_INLINE __m128 _mm_shuffle_ps_1032(__m128 a, __m128 b) +{ + float32x2_t a32 = vget_high_f32(vreinterpretq_f32_m128(a)); + float32x2_t b10 = vget_low_f32(vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_f32(vcombine_f32(a32, b10)); +} + +// takes the lower two 32-bit values from a and swaps them and places in high +// end of result takes the higher two 32 bit values from b and swaps them and +// places in low end of result. +FORCE_INLINE __m128 _mm_shuffle_ps_2301(__m128 a, __m128 b) +{ + float32x2_t a01 = vrev64_f32(vget_low_f32(vreinterpretq_f32_m128(a))); + float32x2_t b23 = vrev64_f32(vget_high_f32(vreinterpretq_f32_m128(b))); + return vreinterpretq_m128_f32(vcombine_f32(a01, b23)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_0321(__m128 a, __m128 b) +{ + float32x2_t a21 = vget_high_f32( + vextq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a), 3)); + float32x2_t b03 = vget_low_f32( + vextq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b), 3)); + return vreinterpretq_m128_f32(vcombine_f32(a21, b03)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_2103(__m128 a, __m128 b) +{ + float32x2_t a03 = vget_low_f32( + vextq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a), 3)); + float32x2_t b21 = vget_high_f32( + vextq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b), 3)); + return vreinterpretq_m128_f32(vcombine_f32(a03, b21)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_1010(__m128 a, __m128 b) +{ + float32x2_t a10 = vget_low_f32(vreinterpretq_f32_m128(a)); + float32x2_t b10 = vget_low_f32(vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_f32(vcombine_f32(a10, b10)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_1001(__m128 a, __m128 b) +{ + float32x2_t a01 = vrev64_f32(vget_low_f32(vreinterpretq_f32_m128(a))); + float32x2_t b10 = vget_low_f32(vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_f32(vcombine_f32(a01, b10)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_0101(__m128 a, __m128 b) +{ + float32x2_t a01 = vrev64_f32(vget_low_f32(vreinterpretq_f32_m128(a))); + float32x2_t b01 = vrev64_f32(vget_low_f32(vreinterpretq_f32_m128(b))); + return vreinterpretq_m128_f32(vcombine_f32(a01, b01)); +} + +// keeps the low 64 bits of b in the low and puts the high 64 bits of a in the +// high +FORCE_INLINE __m128 _mm_shuffle_ps_3210(__m128 a, __m128 b) +{ + float32x2_t a10 = vget_low_f32(vreinterpretq_f32_m128(a)); + float32x2_t b32 = vget_high_f32(vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_f32(vcombine_f32(a10, b32)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_0011(__m128 a, __m128 b) +{ + float32x2_t a11 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(a)), 1); + float32x2_t b00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 0); + return vreinterpretq_m128_f32(vcombine_f32(a11, b00)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_0022(__m128 a, __m128 b) +{ + float32x2_t a22 = + vdup_lane_f32(vget_high_f32(vreinterpretq_f32_m128(a)), 0); + float32x2_t b00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 0); + return vreinterpretq_m128_f32(vcombine_f32(a22, b00)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_2200(__m128 a, __m128 b) +{ + float32x2_t a00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(a)), 0); + float32x2_t b22 = + vdup_lane_f32(vget_high_f32(vreinterpretq_f32_m128(b)), 0); + return vreinterpretq_m128_f32(vcombine_f32(a00, b22)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_3202(__m128 a, __m128 b) +{ + float32_t a0 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); + float32x2_t a22 = + vdup_lane_f32(vget_high_f32(vreinterpretq_f32_m128(a)), 0); + float32x2_t a02 = vset_lane_f32(a0, a22, 1); /* TODO: use vzip ?*/ + float32x2_t b32 = vget_high_f32(vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_f32(vcombine_f32(a02, b32)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_1133(__m128 a, __m128 b) +{ + float32x2_t a33 = + vdup_lane_f32(vget_high_f32(vreinterpretq_f32_m128(a)), 1); + float32x2_t b11 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 1); + return vreinterpretq_m128_f32(vcombine_f32(a33, b11)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_2010(__m128 a, __m128 b) +{ + float32x2_t a10 = vget_low_f32(vreinterpretq_f32_m128(a)); + float32_t b2 = vgetq_lane_f32(vreinterpretq_f32_m128(b), 2); + float32x2_t b00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 0); + float32x2_t b20 = vset_lane_f32(b2, b00, 1); + return vreinterpretq_m128_f32(vcombine_f32(a10, b20)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_2001(__m128 a, __m128 b) +{ + float32x2_t a01 = vrev64_f32(vget_low_f32(vreinterpretq_f32_m128(a))); + float32_t b2 = vgetq_lane_f32(b, 2); + float32x2_t b00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 0); + float32x2_t b20 = vset_lane_f32(b2, b00, 1); + return vreinterpretq_m128_f32(vcombine_f32(a01, b20)); +} + +FORCE_INLINE __m128 _mm_shuffle_ps_2032(__m128 a, __m128 b) +{ + float32x2_t a32 = vget_high_f32(vreinterpretq_f32_m128(a)); + float32_t b2 = vgetq_lane_f32(b, 2); + float32x2_t b00 = vdup_lane_f32(vget_low_f32(vreinterpretq_f32_m128(b)), 0); + float32x2_t b20 = vset_lane_f32(b2, b00, 1); + return vreinterpretq_m128_f32(vcombine_f32(a32, b20)); +} + +// For MSVC, we check only if it is ARM64, as every single ARM64 processor +// supported by WoA has crypto extensions. If this changes in the future, +// this can be verified via the runtime-only method of: +// IsProcessorFeaturePresent(PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE) +#if ((defined(_M_ARM64) || defined(_M_ARM64EC)) && !defined(__clang__)) || \ + (defined(__ARM_FEATURE_CRYPTO) && \ + (defined(__aarch64__) || __has_builtin(__builtin_arm_crypto_vmullp64))) +// Wraps vmull_p64 +FORCE_INLINE uint64x2_t _sse2neon_vmull_p64(uint64x1_t _a, uint64x1_t _b) +{ + poly64_t a = vget_lane_p64(vreinterpret_p64_u64(_a), 0); + poly64_t b = vget_lane_p64(vreinterpret_p64_u64(_b), 0); +#if defined(_MSC_VER) && !defined(__clang__) + __n64 a1 = {a}, b1 = {b}; + return vreinterpretq_u64_p128(vmull_p64(a1, b1)); +#else + return vreinterpretq_u64_p128(vmull_p64(a, b)); +#endif +} +#else // ARMv7 polyfill +// ARMv7/some A64 lacks vmull_p64, but it has vmull_p8. +// +// vmull_p8 calculates 8 8-bit->16-bit polynomial multiplies, but we need a +// 64-bit->128-bit polynomial multiply. +// +// It needs some work and is somewhat slow, but it is still faster than all +// known scalar methods. +// +// Algorithm adapted to C from +// https://www.workofard.com/2017/07/ghash-for-low-end-cores/, which is adapted +// from "Fast Software Polynomial Multiplication on ARM Processors Using the +// NEON Engine" by Danilo Camara, Conrado Gouvea, Julio Lopez and Ricardo Dahab +// (https://hal.inria.fr/hal-01506572) +static uint64x2_t _sse2neon_vmull_p64(uint64x1_t _a, uint64x1_t _b) +{ + poly8x8_t a = vreinterpret_p8_u64(_a); + poly8x8_t b = vreinterpret_p8_u64(_b); + + // Masks + uint8x16_t k48_32 = vcombine_u8(vcreate_u8(0x0000ffffffffffff), + vcreate_u8(0x00000000ffffffff)); + uint8x16_t k16_00 = vcombine_u8(vcreate_u8(0x000000000000ffff), + vcreate_u8(0x0000000000000000)); + + // Do the multiplies, rotating with vext to get all combinations + uint8x16_t d = vreinterpretq_u8_p16(vmull_p8(a, b)); // D = A0 * B0 + uint8x16_t e = + vreinterpretq_u8_p16(vmull_p8(a, vext_p8(b, b, 1))); // E = A0 * B1 + uint8x16_t f = + vreinterpretq_u8_p16(vmull_p8(vext_p8(a, a, 1), b)); // F = A1 * B0 + uint8x16_t g = + vreinterpretq_u8_p16(vmull_p8(a, vext_p8(b, b, 2))); // G = A0 * B2 + uint8x16_t h = + vreinterpretq_u8_p16(vmull_p8(vext_p8(a, a, 2), b)); // H = A2 * B0 + uint8x16_t i = + vreinterpretq_u8_p16(vmull_p8(a, vext_p8(b, b, 3))); // I = A0 * B3 + uint8x16_t j = + vreinterpretq_u8_p16(vmull_p8(vext_p8(a, a, 3), b)); // J = A3 * B0 + uint8x16_t k = + vreinterpretq_u8_p16(vmull_p8(a, vext_p8(b, b, 4))); // L = A0 * B4 + + // Add cross products + uint8x16_t l = veorq_u8(e, f); // L = E + F + uint8x16_t m = veorq_u8(g, h); // M = G + H + uint8x16_t n = veorq_u8(i, j); // N = I + J + + // Interleave. Using vzip1 and vzip2 prevents Clang from emitting TBL + // instructions. +#if defined(__aarch64__) + uint8x16_t lm_p0 = vreinterpretq_u8_u64( + vzip1q_u64(vreinterpretq_u64_u8(l), vreinterpretq_u64_u8(m))); + uint8x16_t lm_p1 = vreinterpretq_u8_u64( + vzip2q_u64(vreinterpretq_u64_u8(l), vreinterpretq_u64_u8(m))); + uint8x16_t nk_p0 = vreinterpretq_u8_u64( + vzip1q_u64(vreinterpretq_u64_u8(n), vreinterpretq_u64_u8(k))); + uint8x16_t nk_p1 = vreinterpretq_u8_u64( + vzip2q_u64(vreinterpretq_u64_u8(n), vreinterpretq_u64_u8(k))); +#else + uint8x16_t lm_p0 = vcombine_u8(vget_low_u8(l), vget_low_u8(m)); + uint8x16_t lm_p1 = vcombine_u8(vget_high_u8(l), vget_high_u8(m)); + uint8x16_t nk_p0 = vcombine_u8(vget_low_u8(n), vget_low_u8(k)); + uint8x16_t nk_p1 = vcombine_u8(vget_high_u8(n), vget_high_u8(k)); +#endif + // t0 = (L) (P0 + P1) << 8 + // t1 = (M) (P2 + P3) << 16 + uint8x16_t t0t1_tmp = veorq_u8(lm_p0, lm_p1); + uint8x16_t t0t1_h = vandq_u8(lm_p1, k48_32); + uint8x16_t t0t1_l = veorq_u8(t0t1_tmp, t0t1_h); + + // t2 = (N) (P4 + P5) << 24 + // t3 = (K) (P6 + P7) << 32 + uint8x16_t t2t3_tmp = veorq_u8(nk_p0, nk_p1); + uint8x16_t t2t3_h = vandq_u8(nk_p1, k16_00); + uint8x16_t t2t3_l = veorq_u8(t2t3_tmp, t2t3_h); + + // De-interleave +#if defined(__aarch64__) + uint8x16_t t0 = vreinterpretq_u8_u64( + vuzp1q_u64(vreinterpretq_u64_u8(t0t1_l), vreinterpretq_u64_u8(t0t1_h))); + uint8x16_t t1 = vreinterpretq_u8_u64( + vuzp2q_u64(vreinterpretq_u64_u8(t0t1_l), vreinterpretq_u64_u8(t0t1_h))); + uint8x16_t t2 = vreinterpretq_u8_u64( + vuzp1q_u64(vreinterpretq_u64_u8(t2t3_l), vreinterpretq_u64_u8(t2t3_h))); + uint8x16_t t3 = vreinterpretq_u8_u64( + vuzp2q_u64(vreinterpretq_u64_u8(t2t3_l), vreinterpretq_u64_u8(t2t3_h))); +#else + uint8x16_t t1 = vcombine_u8(vget_high_u8(t0t1_l), vget_high_u8(t0t1_h)); + uint8x16_t t0 = vcombine_u8(vget_low_u8(t0t1_l), vget_low_u8(t0t1_h)); + uint8x16_t t3 = vcombine_u8(vget_high_u8(t2t3_l), vget_high_u8(t2t3_h)); + uint8x16_t t2 = vcombine_u8(vget_low_u8(t2t3_l), vget_low_u8(t2t3_h)); +#endif + // Shift the cross products + uint8x16_t t0_shift = vextq_u8(t0, t0, 15); // t0 << 8 + uint8x16_t t1_shift = vextq_u8(t1, t1, 14); // t1 << 16 + uint8x16_t t2_shift = vextq_u8(t2, t2, 13); // t2 << 24 + uint8x16_t t3_shift = vextq_u8(t3, t3, 12); // t3 << 32 + + // Accumulate the products + uint8x16_t cross1 = veorq_u8(t0_shift, t1_shift); + uint8x16_t cross2 = veorq_u8(t2_shift, t3_shift); + uint8x16_t mix = veorq_u8(d, cross1); + uint8x16_t r = veorq_u8(mix, cross2); + return vreinterpretq_u64_u8(r); +} +#endif // ARMv7 polyfill + +// C equivalent: +// __m128i _mm_shuffle_epi32_default(__m128i a, +// __constrange(0, 255) int imm) { +// __m128i ret; +// ret[0] = a[(imm) & 0x3]; ret[1] = a[((imm) >> 2) & 0x3]; +// ret[2] = a[((imm) >> 4) & 0x03]; ret[3] = a[((imm) >> 6) & 0x03]; +// return ret; +// } +#define _mm_shuffle_epi32_default(a, imm) \ + vreinterpretq_m128i_s32(vsetq_lane_s32( \ + vgetq_lane_s32(vreinterpretq_s32_m128i(a), ((imm) >> 6) & 0x3), \ + vsetq_lane_s32( \ + vgetq_lane_s32(vreinterpretq_s32_m128i(a), ((imm) >> 4) & 0x3), \ + vsetq_lane_s32(vgetq_lane_s32(vreinterpretq_s32_m128i(a), \ + ((imm) >> 2) & 0x3), \ + vmovq_n_s32(vgetq_lane_s32( \ + vreinterpretq_s32_m128i(a), (imm) & (0x3))), \ + 1), \ + 2), \ + 3)) + +// Takes the upper 64 bits of a and places it in the low end of the result +// Takes the lower 64 bits of a and places it into the high end of the result. +FORCE_INLINE __m128i _mm_shuffle_epi_1032(__m128i a) +{ + int32x2_t a32 = vget_high_s32(vreinterpretq_s32_m128i(a)); + int32x2_t a10 = vget_low_s32(vreinterpretq_s32_m128i(a)); + return vreinterpretq_m128i_s32(vcombine_s32(a32, a10)); +} + +// takes the lower two 32-bit values from a and swaps them and places in low end +// of result takes the higher two 32 bit values from a and swaps them and places +// in high end of result. +FORCE_INLINE __m128i _mm_shuffle_epi_2301(__m128i a) +{ + int32x2_t a01 = vrev64_s32(vget_low_s32(vreinterpretq_s32_m128i(a))); + int32x2_t a23 = vrev64_s32(vget_high_s32(vreinterpretq_s32_m128i(a))); + return vreinterpretq_m128i_s32(vcombine_s32(a01, a23)); +} + +// rotates the least significant 32 bits into the most significant 32 bits, and +// shifts the rest down +FORCE_INLINE __m128i _mm_shuffle_epi_0321(__m128i a) +{ + return vreinterpretq_m128i_s32( + vextq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(a), 1)); +} + +// rotates the most significant 32 bits into the least significant 32 bits, and +// shifts the rest up +FORCE_INLINE __m128i _mm_shuffle_epi_2103(__m128i a) +{ + return vreinterpretq_m128i_s32( + vextq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(a), 3)); +} + +// gets the lower 64 bits of a, and places it in the upper 64 bits +// gets the lower 64 bits of a and places it in the lower 64 bits +FORCE_INLINE __m128i _mm_shuffle_epi_1010(__m128i a) +{ + int32x2_t a10 = vget_low_s32(vreinterpretq_s32_m128i(a)); + return vreinterpretq_m128i_s32(vcombine_s32(a10, a10)); +} + +// gets the lower 64 bits of a, swaps the 0 and 1 elements, and places it in the +// lower 64 bits gets the lower 64 bits of a, and places it in the upper 64 bits +FORCE_INLINE __m128i _mm_shuffle_epi_1001(__m128i a) +{ + int32x2_t a01 = vrev64_s32(vget_low_s32(vreinterpretq_s32_m128i(a))); + int32x2_t a10 = vget_low_s32(vreinterpretq_s32_m128i(a)); + return vreinterpretq_m128i_s32(vcombine_s32(a01, a10)); +} + +// gets the lower 64 bits of a, swaps the 0 and 1 elements and places it in the +// upper 64 bits gets the lower 64 bits of a, swaps the 0 and 1 elements, and +// places it in the lower 64 bits +FORCE_INLINE __m128i _mm_shuffle_epi_0101(__m128i a) +{ + int32x2_t a01 = vrev64_s32(vget_low_s32(vreinterpretq_s32_m128i(a))); + return vreinterpretq_m128i_s32(vcombine_s32(a01, a01)); +} + +FORCE_INLINE __m128i _mm_shuffle_epi_2211(__m128i a) +{ + int32x2_t a11 = vdup_lane_s32(vget_low_s32(vreinterpretq_s32_m128i(a)), 1); + int32x2_t a22 = vdup_lane_s32(vget_high_s32(vreinterpretq_s32_m128i(a)), 0); + return vreinterpretq_m128i_s32(vcombine_s32(a11, a22)); +} + +FORCE_INLINE __m128i _mm_shuffle_epi_0122(__m128i a) +{ + int32x2_t a22 = vdup_lane_s32(vget_high_s32(vreinterpretq_s32_m128i(a)), 0); + int32x2_t a01 = vrev64_s32(vget_low_s32(vreinterpretq_s32_m128i(a))); + return vreinterpretq_m128i_s32(vcombine_s32(a22, a01)); +} + +FORCE_INLINE __m128i _mm_shuffle_epi_3332(__m128i a) +{ + int32x2_t a32 = vget_high_s32(vreinterpretq_s32_m128i(a)); + int32x2_t a33 = vdup_lane_s32(vget_high_s32(vreinterpretq_s32_m128i(a)), 1); + return vreinterpretq_m128i_s32(vcombine_s32(a32, a33)); +} + +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) +#define _mm_shuffle_epi32_splat(a, imm) \ + vreinterpretq_m128i_s32(vdupq_laneq_s32(vreinterpretq_s32_m128i(a), (imm))) +#else +#define _mm_shuffle_epi32_splat(a, imm) \ + vreinterpretq_m128i_s32( \ + vdupq_n_s32(vgetq_lane_s32(vreinterpretq_s32_m128i(a), (imm)))) +#endif + +// NEON does not support a general purpose permute intrinsic. +// Shuffle single-precision (32-bit) floating-point elements in a using the +// control in imm8, and store the results in dst. +// +// C equivalent: +// __m128 _mm_shuffle_ps_default(__m128 a, __m128 b, +// __constrange(0, 255) int imm) { +// __m128 ret; +// ret[0] = a[(imm) & 0x3]; ret[1] = a[((imm) >> 2) & 0x3]; +// ret[2] = b[((imm) >> 4) & 0x03]; ret[3] = b[((imm) >> 6) & 0x03]; +// return ret; +// } +// +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shuffle_ps +#define _mm_shuffle_ps_default(a, b, imm) \ + vreinterpretq_m128_f32(vsetq_lane_f32( \ + vgetq_lane_f32(vreinterpretq_f32_m128(b), ((imm) >> 6) & 0x3), \ + vsetq_lane_f32( \ + vgetq_lane_f32(vreinterpretq_f32_m128(b), ((imm) >> 4) & 0x3), \ + vsetq_lane_f32( \ + vgetq_lane_f32(vreinterpretq_f32_m128(a), ((imm) >> 2) & 0x3), \ + vmovq_n_f32( \ + vgetq_lane_f32(vreinterpretq_f32_m128(a), (imm) & (0x3))), \ + 1), \ + 2), \ + 3)) + +// Shuffle 16-bit integers in the low 64 bits of a using the control in imm8. +// Store the results in the low 64 bits of dst, with the high 64 bits being +// copied from a to dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shufflelo_epi16 +#define _mm_shufflelo_epi16_function(a, imm) \ + _sse2neon_define1( \ + __m128i, a, int16x8_t ret = vreinterpretq_s16_m128i(_a); \ + int16x4_t lowBits = vget_low_s16(ret); \ + ret = vsetq_lane_s16(vget_lane_s16(lowBits, (imm) & (0x3)), ret, 0); \ + ret = vsetq_lane_s16(vget_lane_s16(lowBits, ((imm) >> 2) & 0x3), ret, \ + 1); \ + ret = vsetq_lane_s16(vget_lane_s16(lowBits, ((imm) >> 4) & 0x3), ret, \ + 2); \ + ret = vsetq_lane_s16(vget_lane_s16(lowBits, ((imm) >> 6) & 0x3), ret, \ + 3); \ + _sse2neon_return(vreinterpretq_m128i_s16(ret));) + +// Shuffle 16-bit integers in the high 64 bits of a using the control in imm8. +// Store the results in the high 64 bits of dst, with the low 64 bits being +// copied from a to dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shufflehi_epi16 +#define _mm_shufflehi_epi16_function(a, imm) \ + _sse2neon_define1( \ + __m128i, a, int16x8_t ret = vreinterpretq_s16_m128i(_a); \ + int16x4_t highBits = vget_high_s16(ret); \ + ret = vsetq_lane_s16(vget_lane_s16(highBits, (imm) & (0x3)), ret, 4); \ + ret = vsetq_lane_s16(vget_lane_s16(highBits, ((imm) >> 2) & 0x3), ret, \ + 5); \ + ret = vsetq_lane_s16(vget_lane_s16(highBits, ((imm) >> 4) & 0x3), ret, \ + 6); \ + ret = vsetq_lane_s16(vget_lane_s16(highBits, ((imm) >> 6) & 0x3), ret, \ + 7); \ + _sse2neon_return(vreinterpretq_m128i_s16(ret));) + +/* MMX */ + +//_mm_empty is a no-op on arm +FORCE_INLINE void _mm_empty(void) {} + +/* SSE */ + +// Add packed single-precision (32-bit) floating-point elements in a and b, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_ps +FORCE_INLINE __m128 _mm_add_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_f32( + vaddq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Add the lower single-precision (32-bit) floating-point element in a and b, +// store the result in the lower element of dst, and copy the upper 3 packed +// elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_ss +FORCE_INLINE __m128 _mm_add_ss(__m128 a, __m128 b) +{ + float32_t b0 = vgetq_lane_f32(vreinterpretq_f32_m128(b), 0); + float32x4_t value = vsetq_lane_f32(b0, vdupq_n_f32(0), 0); + // the upper values in the result must be the remnants of . + return vreinterpretq_m128_f32(vaddq_f32(a, value)); +} + +// Compute the bitwise AND of packed single-precision (32-bit) floating-point +// elements in a and b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_and_ps +FORCE_INLINE __m128 _mm_and_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_s32( + vandq_s32(vreinterpretq_s32_m128(a), vreinterpretq_s32_m128(b))); +} + +// Compute the bitwise NOT of packed single-precision (32-bit) floating-point +// elements in a and then AND with b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_andnot_ps +FORCE_INLINE __m128 _mm_andnot_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_s32( + vbicq_s32(vreinterpretq_s32_m128(b), + vreinterpretq_s32_m128(a))); // *NOTE* argument swap +} + +// Average packed unsigned 16-bit integers in a and b, and store the results in +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_avg_pu16 +FORCE_INLINE __m64 _mm_avg_pu16(__m64 a, __m64 b) +{ + return vreinterpret_m64_u16( + vrhadd_u16(vreinterpret_u16_m64(a), vreinterpret_u16_m64(b))); +} + +// Average packed unsigned 8-bit integers in a and b, and store the results in +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_avg_pu8 +FORCE_INLINE __m64 _mm_avg_pu8(__m64 a, __m64 b) +{ + return vreinterpret_m64_u8( + vrhadd_u8(vreinterpret_u8_m64(a), vreinterpret_u8_m64(b))); +} + +// Compare packed single-precision (32-bit) floating-point elements in a and b +// for equality, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpeq_ps +FORCE_INLINE __m128 _mm_cmpeq_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32( + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Compare the lower single-precision (32-bit) floating-point elements in a and +// b for equality, store the result in the lower element of dst, and copy the +// upper 3 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpeq_ss +FORCE_INLINE __m128 _mm_cmpeq_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpeq_ps(a, b)); +} + +// Compare packed single-precision (32-bit) floating-point elements in a and b +// for greater-than-or-equal, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpge_ps +FORCE_INLINE __m128 _mm_cmpge_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32( + vcgeq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Compare the lower single-precision (32-bit) floating-point elements in a and +// b for greater-than-or-equal, store the result in the lower element of dst, +// and copy the upper 3 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpge_ss +FORCE_INLINE __m128 _mm_cmpge_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpge_ps(a, b)); +} + +// Compare packed single-precision (32-bit) floating-point elements in a and b +// for greater-than, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpgt_ps +FORCE_INLINE __m128 _mm_cmpgt_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32( + vcgtq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Compare the lower single-precision (32-bit) floating-point elements in a and +// b for greater-than, store the result in the lower element of dst, and copy +// the upper 3 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpgt_ss +FORCE_INLINE __m128 _mm_cmpgt_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpgt_ps(a, b)); +} + +// Compare packed single-precision (32-bit) floating-point elements in a and b +// for less-than-or-equal, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmple_ps +FORCE_INLINE __m128 _mm_cmple_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32( + vcleq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Compare the lower single-precision (32-bit) floating-point elements in a and +// b for less-than-or-equal, store the result in the lower element of dst, and +// copy the upper 3 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmple_ss +FORCE_INLINE __m128 _mm_cmple_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmple_ps(a, b)); +} + +// Compare packed single-precision (32-bit) floating-point elements in a and b +// for less-than, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmplt_ps +FORCE_INLINE __m128 _mm_cmplt_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32( + vcltq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Compare the lower single-precision (32-bit) floating-point elements in a and +// b for less-than, store the result in the lower element of dst, and copy the +// upper 3 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmplt_ss +FORCE_INLINE __m128 _mm_cmplt_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmplt_ps(a, b)); +} + +// Compare packed single-precision (32-bit) floating-point elements in a and b +// for not-equal, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpneq_ps +FORCE_INLINE __m128 _mm_cmpneq_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32(vmvnq_u32( + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)))); +} + +// Compare the lower single-precision (32-bit) floating-point elements in a and +// b for not-equal, store the result in the lower element of dst, and copy the +// upper 3 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpneq_ss +FORCE_INLINE __m128 _mm_cmpneq_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpneq_ps(a, b)); +} + +// Compare packed single-precision (32-bit) floating-point elements in a and b +// for not-greater-than-or-equal, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnge_ps +FORCE_INLINE __m128 _mm_cmpnge_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32(vmvnq_u32( + vcgeq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)))); +} + +// Compare the lower single-precision (32-bit) floating-point elements in a and +// b for not-greater-than-or-equal, store the result in the lower element of +// dst, and copy the upper 3 packed elements from a to the upper elements of +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnge_ss +FORCE_INLINE __m128 _mm_cmpnge_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpnge_ps(a, b)); +} + +// Compare packed single-precision (32-bit) floating-point elements in a and b +// for not-greater-than, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpngt_ps +FORCE_INLINE __m128 _mm_cmpngt_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32(vmvnq_u32( + vcgtq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)))); +} + +// Compare the lower single-precision (32-bit) floating-point elements in a and +// b for not-greater-than, store the result in the lower element of dst, and +// copy the upper 3 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpngt_ss +FORCE_INLINE __m128 _mm_cmpngt_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpngt_ps(a, b)); +} + +// Compare packed single-precision (32-bit) floating-point elements in a and b +// for not-less-than-or-equal, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnle_ps +FORCE_INLINE __m128 _mm_cmpnle_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32(vmvnq_u32( + vcleq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)))); +} + +// Compare the lower single-precision (32-bit) floating-point elements in a and +// b for not-less-than-or-equal, store the result in the lower element of dst, +// and copy the upper 3 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnle_ss +FORCE_INLINE __m128 _mm_cmpnle_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpnle_ps(a, b)); +} + +// Compare packed single-precision (32-bit) floating-point elements in a and b +// for not-less-than, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnlt_ps +FORCE_INLINE __m128 _mm_cmpnlt_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_u32(vmvnq_u32( + vcltq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)))); +} + +// Compare the lower single-precision (32-bit) floating-point elements in a and +// b for not-less-than, store the result in the lower element of dst, and copy +// the upper 3 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnlt_ss +FORCE_INLINE __m128 _mm_cmpnlt_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpnlt_ps(a, b)); +} + +// Compare packed single-precision (32-bit) floating-point elements in a and b +// to see if neither is NaN, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpord_ps +// +// See also: +// http://stackoverflow.com/questions/8627331/what-does-ordered-unordered-comparison-mean +// http://stackoverflow.com/questions/29349621/neon-isnanval-intrinsics +FORCE_INLINE __m128 _mm_cmpord_ps(__m128 a, __m128 b) +{ + // Note: NEON does not have ordered compare builtin + // Need to compare a eq a and b eq b to check for NaN + // Do AND of results to get final + uint32x4_t ceqaa = + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a)); + uint32x4_t ceqbb = + vceqq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_u32(vandq_u32(ceqaa, ceqbb)); +} + +// Compare the lower single-precision (32-bit) floating-point elements in a and +// b to see if neither is NaN, store the result in the lower element of dst, and +// copy the upper 3 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpord_ss +FORCE_INLINE __m128 _mm_cmpord_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpord_ps(a, b)); +} + +// Compare packed single-precision (32-bit) floating-point elements in a and b +// to see if either is NaN, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpunord_ps +FORCE_INLINE __m128 _mm_cmpunord_ps(__m128 a, __m128 b) +{ + uint32x4_t f32a = + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a)); + uint32x4_t f32b = + vceqq_f32(vreinterpretq_f32_m128(b), vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_u32(vmvnq_u32(vandq_u32(f32a, f32b))); +} + +// Compare the lower single-precision (32-bit) floating-point elements in a and +// b to see if either is NaN, store the result in the lower element of dst, and +// copy the upper 3 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpunord_ss +FORCE_INLINE __m128 _mm_cmpunord_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_cmpunord_ps(a, b)); +} + +// Compare the lower single-precision (32-bit) floating-point element in a and b +// for equality, and return the boolean result (0 or 1). +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comieq_ss +FORCE_INLINE int _mm_comieq_ss(__m128 a, __m128 b) +{ + uint32x4_t a_eq_b = + vceqq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)); + return vgetq_lane_u32(a_eq_b, 0) & 0x1; +} + +// Compare the lower single-precision (32-bit) floating-point element in a and b +// for greater-than-or-equal, and return the boolean result (0 or 1). +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comige_ss +FORCE_INLINE int _mm_comige_ss(__m128 a, __m128 b) +{ + uint32x4_t a_ge_b = + vcgeq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)); + return vgetq_lane_u32(a_ge_b, 0) & 0x1; +} + +// Compare the lower single-precision (32-bit) floating-point element in a and b +// for greater-than, and return the boolean result (0 or 1). +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comigt_ss +FORCE_INLINE int _mm_comigt_ss(__m128 a, __m128 b) +{ + uint32x4_t a_gt_b = + vcgtq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)); + return vgetq_lane_u32(a_gt_b, 0) & 0x1; +} + +// Compare the lower single-precision (32-bit) floating-point element in a and b +// for less-than-or-equal, and return the boolean result (0 or 1). +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comile_ss +FORCE_INLINE int _mm_comile_ss(__m128 a, __m128 b) +{ + uint32x4_t a_le_b = + vcleq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)); + return vgetq_lane_u32(a_le_b, 0) & 0x1; +} + +// Compare the lower single-precision (32-bit) floating-point element in a and b +// for less-than, and return the boolean result (0 or 1). +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comilt_ss +FORCE_INLINE int _mm_comilt_ss(__m128 a, __m128 b) +{ + uint32x4_t a_lt_b = + vcltq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b)); + return vgetq_lane_u32(a_lt_b, 0) & 0x1; +} + +// Compare the lower single-precision (32-bit) floating-point element in a and b +// for not-equal, and return the boolean result (0 or 1). +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comineq_ss +FORCE_INLINE int _mm_comineq_ss(__m128 a, __m128 b) +{ + return !_mm_comieq_ss(a, b); +} + +// Convert packed signed 32-bit integers in b to packed single-precision +// (32-bit) floating-point elements, store the results in the lower 2 elements +// of dst, and copy the upper 2 packed elements from a to the upper elements of +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvt_pi2ps +FORCE_INLINE __m128 _mm_cvt_pi2ps(__m128 a, __m64 b) +{ + return vreinterpretq_m128_f32( + vcombine_f32(vcvt_f32_s32(vreinterpret_s32_m64(b)), + vget_high_f32(vreinterpretq_f32_m128(a)))); +} + +// Convert packed single-precision (32-bit) floating-point elements in a to +// packed 32-bit integers, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvt_ps2pi +FORCE_INLINE __m64 _mm_cvt_ps2pi(__m128 a) +{ +#if (defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC)) || \ + defined(__ARM_FEATURE_DIRECTED_ROUNDING) + return vreinterpret_m64_s32( + vget_low_s32(vcvtnq_s32_f32(vrndiq_f32(vreinterpretq_f32_m128(a))))); +#else + return vreinterpret_m64_s32(vcvt_s32_f32(vget_low_f32( + vreinterpretq_f32_m128(_mm_round_ps(a, _MM_FROUND_CUR_DIRECTION))))); +#endif +} + +// Convert the signed 32-bit integer b to a single-precision (32-bit) +// floating-point element, store the result in the lower element of dst, and +// copy the upper 3 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvt_si2ss +FORCE_INLINE __m128 _mm_cvt_si2ss(__m128 a, int b) +{ + return vreinterpretq_m128_f32( + vsetq_lane_f32((float) b, vreinterpretq_f32_m128(a), 0)); +} + +// Convert the lower single-precision (32-bit) floating-point element in a to a +// 32-bit integer, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvt_ss2si +FORCE_INLINE int _mm_cvt_ss2si(__m128 a) +{ +#if (defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC)) || \ + defined(__ARM_FEATURE_DIRECTED_ROUNDING) + return vgetq_lane_s32(vcvtnq_s32_f32(vrndiq_f32(vreinterpretq_f32_m128(a))), + 0); +#else + float32_t data = vgetq_lane_f32( + vreinterpretq_f32_m128(_mm_round_ps(a, _MM_FROUND_CUR_DIRECTION)), 0); + return (int32_t) data; +#endif +} + +// Convert packed 16-bit integers in a to packed single-precision (32-bit) +// floating-point elements, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpi16_ps +FORCE_INLINE __m128 _mm_cvtpi16_ps(__m64 a) +{ + return vreinterpretq_m128_f32( + vcvtq_f32_s32(vmovl_s16(vreinterpret_s16_m64(a)))); +} + +// Convert packed 32-bit integers in b to packed single-precision (32-bit) +// floating-point elements, store the results in the lower 2 elements of dst, +// and copy the upper 2 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpi32_ps +FORCE_INLINE __m128 _mm_cvtpi32_ps(__m128 a, __m64 b) +{ + return vreinterpretq_m128_f32( + vcombine_f32(vcvt_f32_s32(vreinterpret_s32_m64(b)), + vget_high_f32(vreinterpretq_f32_m128(a)))); +} + +// Convert packed signed 32-bit integers in a to packed single-precision +// (32-bit) floating-point elements, store the results in the lower 2 elements +// of dst, then convert the packed signed 32-bit integers in b to +// single-precision (32-bit) floating-point element, and store the results in +// the upper 2 elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpi32x2_ps +FORCE_INLINE __m128 _mm_cvtpi32x2_ps(__m64 a, __m64 b) +{ + return vreinterpretq_m128_f32(vcvtq_f32_s32( + vcombine_s32(vreinterpret_s32_m64(a), vreinterpret_s32_m64(b)))); +} + +// Convert the lower packed 8-bit integers in a to packed single-precision +// (32-bit) floating-point elements, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpi8_ps +FORCE_INLINE __m128 _mm_cvtpi8_ps(__m64 a) +{ + return vreinterpretq_m128_f32(vcvtq_f32_s32( + vmovl_s16(vget_low_s16(vmovl_s8(vreinterpret_s8_m64(a)))))); +} + +// Convert packed single-precision (32-bit) floating-point elements in a to +// packed 16-bit integers, and store the results in dst. Note: this intrinsic +// will generate 0x7FFF, rather than 0x8000, for input values between 0x7FFF and +// 0x7FFFFFFF. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtps_pi16 +FORCE_INLINE __m64 _mm_cvtps_pi16(__m128 a) +{ + return vreinterpret_m64_s16( + vqmovn_s32(vreinterpretq_s32_m128i(_mm_cvtps_epi32(a)))); +} + +// Convert packed single-precision (32-bit) floating-point elements in a to +// packed 32-bit integers, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtps_pi32 +#define _mm_cvtps_pi32(a) _mm_cvt_ps2pi(a) + +// Convert packed single-precision (32-bit) floating-point elements in a to +// packed 8-bit integers, and store the results in lower 4 elements of dst. +// Note: this intrinsic will generate 0x7F, rather than 0x80, for input values +// between 0x7F and 0x7FFFFFFF. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtps_pi8 +FORCE_INLINE __m64 _mm_cvtps_pi8(__m128 a) +{ + return vreinterpret_m64_s8(vqmovn_s16( + vcombine_s16(vreinterpret_s16_m64(_mm_cvtps_pi16(a)), vdup_n_s16(0)))); +} + +// Convert packed unsigned 16-bit integers in a to packed single-precision +// (32-bit) floating-point elements, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpu16_ps +FORCE_INLINE __m128 _mm_cvtpu16_ps(__m64 a) +{ + return vreinterpretq_m128_f32( + vcvtq_f32_u32(vmovl_u16(vreinterpret_u16_m64(a)))); +} + +// Convert the lower packed unsigned 8-bit integers in a to packed +// single-precision (32-bit) floating-point elements, and store the results in +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpu8_ps +FORCE_INLINE __m128 _mm_cvtpu8_ps(__m64 a) +{ + return vreinterpretq_m128_f32(vcvtq_f32_u32( + vmovl_u16(vget_low_u16(vmovl_u8(vreinterpret_u8_m64(a)))))); +} + +// Convert the signed 32-bit integer b to a single-precision (32-bit) +// floating-point element, store the result in the lower element of dst, and +// copy the upper 3 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi32_ss +#define _mm_cvtsi32_ss(a, b) _mm_cvt_si2ss(a, b) + +// Convert the signed 64-bit integer b to a single-precision (32-bit) +// floating-point element, store the result in the lower element of dst, and +// copy the upper 3 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi64_ss +FORCE_INLINE __m128 _mm_cvtsi64_ss(__m128 a, int64_t b) +{ + return vreinterpretq_m128_f32( + vsetq_lane_f32((float) b, vreinterpretq_f32_m128(a), 0)); +} + +// Copy the lower single-precision (32-bit) floating-point element of a to dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtss_f32 +FORCE_INLINE float _mm_cvtss_f32(__m128 a) +{ + return vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); +} + +// Convert the lower single-precision (32-bit) floating-point element in a to a +// 32-bit integer, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtss_si32 +#define _mm_cvtss_si32(a) _mm_cvt_ss2si(a) + +// Convert the lower single-precision (32-bit) floating-point element in a to a +// 64-bit integer, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtss_si64 +FORCE_INLINE int64_t _mm_cvtss_si64(__m128 a) +{ +#if (defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC)) || \ + defined(__ARM_FEATURE_DIRECTED_ROUNDING) + return (int64_t) vgetq_lane_f32(vrndiq_f32(vreinterpretq_f32_m128(a)), 0); +#else + float32_t data = vgetq_lane_f32( + vreinterpretq_f32_m128(_mm_round_ps(a, _MM_FROUND_CUR_DIRECTION)), 0); + return (int64_t) data; +#endif +} + +// Convert packed single-precision (32-bit) floating-point elements in a to +// packed 32-bit integers with truncation, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtt_ps2pi +FORCE_INLINE __m64 _mm_cvtt_ps2pi(__m128 a) +{ + return vreinterpret_m64_s32( + vget_low_s32(vcvtq_s32_f32(vreinterpretq_f32_m128(a)))); +} + +// Convert the lower single-precision (32-bit) floating-point element in a to a +// 32-bit integer with truncation, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtt_ss2si +FORCE_INLINE int _mm_cvtt_ss2si(__m128 a) +{ + return vgetq_lane_s32(vcvtq_s32_f32(vreinterpretq_f32_m128(a)), 0); +} + +// Convert packed single-precision (32-bit) floating-point elements in a to +// packed 32-bit integers with truncation, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttps_pi32 +#define _mm_cvttps_pi32(a) _mm_cvtt_ps2pi(a) + +// Convert the lower single-precision (32-bit) floating-point element in a to a +// 32-bit integer with truncation, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttss_si32 +#define _mm_cvttss_si32(a) _mm_cvtt_ss2si(a) + +// Convert the lower single-precision (32-bit) floating-point element in a to a +// 64-bit integer with truncation, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttss_si64 +FORCE_INLINE int64_t _mm_cvttss_si64(__m128 a) +{ + return (int64_t) vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); +} + +// Divide packed single-precision (32-bit) floating-point elements in a by +// packed elements in b, and store the results in dst. +// Due to ARMv7-A NEON's lack of a precise division intrinsic, we implement +// division by multiplying a by b's reciprocal before using the Newton-Raphson +// method to approximate the results. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_div_ps +FORCE_INLINE __m128 _mm_div_ps(__m128 a, __m128 b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128_f32( + vdivq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +#else + float32x4_t recip = vrecpeq_f32(vreinterpretq_f32_m128(b)); + recip = vmulq_f32(recip, vrecpsq_f32(recip, vreinterpretq_f32_m128(b))); + // Additional Netwon-Raphson iteration for accuracy + recip = vmulq_f32(recip, vrecpsq_f32(recip, vreinterpretq_f32_m128(b))); + return vreinterpretq_m128_f32(vmulq_f32(vreinterpretq_f32_m128(a), recip)); +#endif +} + +// Divide the lower single-precision (32-bit) floating-point element in a by the +// lower single-precision (32-bit) floating-point element in b, store the result +// in the lower element of dst, and copy the upper 3 packed elements from a to +// the upper elements of dst. +// Warning: ARMv7-A does not produce the same result compared to Intel and not +// IEEE-compliant. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_div_ss +FORCE_INLINE __m128 _mm_div_ss(__m128 a, __m128 b) +{ + float32_t value = + vgetq_lane_f32(vreinterpretq_f32_m128(_mm_div_ps(a, b)), 0); + return vreinterpretq_m128_f32( + vsetq_lane_f32(value, vreinterpretq_f32_m128(a), 0)); +} + +// Extract a 16-bit integer from a, selected with imm8, and store the result in +// the lower element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_extract_pi16 +#define _mm_extract_pi16(a, imm) \ + (int32_t) vget_lane_u16(vreinterpret_u16_m64(a), (imm)) + +// Free aligned memory that was allocated with _mm_malloc. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_free +#if !defined(SSE2NEON_ALLOC_DEFINED) +FORCE_INLINE void _mm_free(void *addr) +{ +#if defined(_WIN32) + _aligned_free(addr); +#else + free(addr); +#endif +} +#endif + +FORCE_INLINE uint64_t _sse2neon_get_fpcr(void) +{ + uint64_t value; +#if defined(_MSC_VER) && !defined(__clang__) + value = _ReadStatusReg(ARM64_FPCR); +#else + __asm__ __volatile__("mrs %0, FPCR" : "=r"(value)); /* read */ +#endif + return value; +} + +FORCE_INLINE void _sse2neon_set_fpcr(uint64_t value) +{ +#if defined(_MSC_VER) && !defined(__clang__) + _WriteStatusReg(ARM64_FPCR, value); +#else + __asm__ __volatile__("msr FPCR, %0" ::"r"(value)); /* write */ +#endif +} + +// Macro: Get the flush zero bits from the MXCSR control and status register. +// The flush zero may contain any of the following flags: _MM_FLUSH_ZERO_ON or +// _MM_FLUSH_ZERO_OFF +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_MM_GET_FLUSH_ZERO_MODE +FORCE_INLINE unsigned int _sse2neon_mm_get_flush_zero_mode(void) +{ + union { + fpcr_bitfield field; +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + uint64_t value; +#else + uint32_t value; +#endif + } r; + +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + r.value = _sse2neon_get_fpcr(); +#else + __asm__ __volatile__("vmrs %0, FPSCR" : "=r"(r.value)); /* read */ +#endif + + return r.field.bit24 ? _MM_FLUSH_ZERO_ON : _MM_FLUSH_ZERO_OFF; +} + +// Macro: Get the rounding mode bits from the MXCSR control and status register. +// The rounding mode may contain any of the following flags: _MM_ROUND_NEAREST, +// _MM_ROUND_DOWN, _MM_ROUND_UP, _MM_ROUND_TOWARD_ZERO +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_MM_GET_ROUNDING_MODE +FORCE_INLINE unsigned int _MM_GET_ROUNDING_MODE(void) +{ + switch (fegetround()) { + case FE_TONEAREST: + return _MM_ROUND_NEAREST; + case FE_DOWNWARD: + return _MM_ROUND_DOWN; + case FE_UPWARD: + return _MM_ROUND_UP; + case FE_TOWARDZERO: + return _MM_ROUND_TOWARD_ZERO; + default: + // fegetround() must return _MM_ROUND_NEAREST, _MM_ROUND_DOWN, + // _MM_ROUND_UP, _MM_ROUND_TOWARD_ZERO on success. all the other error + // cases we treat them as FE_TOWARDZERO (truncate). + return _MM_ROUND_TOWARD_ZERO; + } +} + +// Copy a to dst, and insert the 16-bit integer i into dst at the location +// specified by imm8. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_insert_pi16 +#define _mm_insert_pi16(a, b, imm) \ + vreinterpret_m64_s16(vset_lane_s16((b), vreinterpret_s16_m64(a), (imm))) + +// Load 128-bits (composed of 4 packed single-precision (32-bit) floating-point +// elements) from memory into dst. mem_addr must be aligned on a 16-byte +// boundary or a general-protection exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load_ps +FORCE_INLINE __m128 _mm_load_ps(const float *p) +{ + return vreinterpretq_m128_f32(vld1q_f32(p)); +} + +// Load a single-precision (32-bit) floating-point element from memory into all +// elements of dst. +// +// dst[31:0] := MEM[mem_addr+31:mem_addr] +// dst[63:32] := MEM[mem_addr+31:mem_addr] +// dst[95:64] := MEM[mem_addr+31:mem_addr] +// dst[127:96] := MEM[mem_addr+31:mem_addr] +// +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load_ps1 +#define _mm_load_ps1 _mm_load1_ps + +// Load a single-precision (32-bit) floating-point element from memory into the +// lower of dst, and zero the upper 3 elements. mem_addr does not need to be +// aligned on any particular boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load_ss +FORCE_INLINE __m128 _mm_load_ss(const float *p) +{ + return vreinterpretq_m128_f32(vsetq_lane_f32(*p, vdupq_n_f32(0), 0)); +} + +// Load a single-precision (32-bit) floating-point element from memory into all +// elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load1_ps +FORCE_INLINE __m128 _mm_load1_ps(const float *p) +{ + return vreinterpretq_m128_f32(vld1q_dup_f32(p)); +} + +// Load 2 single-precision (32-bit) floating-point elements from memory into the +// upper 2 elements of dst, and copy the lower 2 elements from a to dst. +// mem_addr does not need to be aligned on any particular boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadh_pi +FORCE_INLINE __m128 _mm_loadh_pi(__m128 a, __m64 const *p) +{ + return vreinterpretq_m128_f32( + vcombine_f32(vget_low_f32(a), vld1_f32((const float32_t *) p))); +} + +// Load 2 single-precision (32-bit) floating-point elements from memory into the +// lower 2 elements of dst, and copy the upper 2 elements from a to dst. +// mem_addr does not need to be aligned on any particular boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadl_pi +FORCE_INLINE __m128 _mm_loadl_pi(__m128 a, __m64 const *p) +{ + return vreinterpretq_m128_f32( + vcombine_f32(vld1_f32((const float32_t *) p), vget_high_f32(a))); +} + +// Load 4 single-precision (32-bit) floating-point elements from memory into dst +// in reverse order. mem_addr must be aligned on a 16-byte boundary or a +// general-protection exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadr_ps +FORCE_INLINE __m128 _mm_loadr_ps(const float *p) +{ + float32x4_t v = vrev64q_f32(vld1q_f32(p)); + return vreinterpretq_m128_f32(vextq_f32(v, v, 2)); +} + +// Load 128-bits (composed of 4 packed single-precision (32-bit) floating-point +// elements) from memory into dst. mem_addr does not need to be aligned on any +// particular boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadu_ps +FORCE_INLINE __m128 _mm_loadu_ps(const float *p) +{ + // for neon, alignment doesn't matter, so _mm_load_ps and _mm_loadu_ps are + // equivalent for neon + return vreinterpretq_m128_f32(vld1q_f32(p)); +} + +// Load unaligned 16-bit integer from memory into the first element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadu_si16 +FORCE_INLINE __m128i _mm_loadu_si16(const void *p) +{ + return vreinterpretq_m128i_s16( + vsetq_lane_s16(*(const unaligned_int16_t *) p, vdupq_n_s16(0), 0)); +} + +// Load unaligned 64-bit integer from memory into the first element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadu_si64 +FORCE_INLINE __m128i _mm_loadu_si64(const void *p) +{ + return vreinterpretq_m128i_s64( + vsetq_lane_s64(*(const unaligned_int64_t *) p, vdupq_n_s64(0), 0)); +} + +// Allocate size bytes of memory, aligned to the alignment specified in align, +// and return a pointer to the allocated memory. _mm_free should be used to free +// memory that is allocated with _mm_malloc. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_malloc +#if !defined(SSE2NEON_ALLOC_DEFINED) +FORCE_INLINE void *_mm_malloc(size_t size, size_t align) +{ +#if defined(_WIN32) + return _aligned_malloc(size, align); +#else + void *ptr; + if (align == 1) + return malloc(size); + if (align == 2 || (sizeof(void *) == 8 && align == 4)) + align = sizeof(void *); + if (!posix_memalign(&ptr, align, size)) + return ptr; + return NULL; +#endif +} +#endif + +// Conditionally store 8-bit integer elements from a into memory using mask +// (elements are not stored when the highest bit is not set in the corresponding +// element) and a non-temporal memory hint. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskmove_si64 +FORCE_INLINE void _mm_maskmove_si64(__m64 a, __m64 mask, char *mem_addr) +{ + int8x8_t shr_mask = vshr_n_s8(vreinterpret_s8_m64(mask), 7); + __m128 b = _mm_load_ps((const float *) mem_addr); + int8x8_t masked = + vbsl_s8(vreinterpret_u8_s8(shr_mask), vreinterpret_s8_m64(a), + vreinterpret_s8_u64(vget_low_u64(vreinterpretq_u64_m128(b)))); + vst1_s8((int8_t *) mem_addr, masked); +} + +// Conditionally store 8-bit integer elements from a into memory using mask +// (elements are not stored when the highest bit is not set in the corresponding +// element) and a non-temporal memory hint. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_maskmovq +#define _m_maskmovq(a, mask, mem_addr) _mm_maskmove_si64(a, mask, mem_addr) + +// Compare packed signed 16-bit integers in a and b, and store packed maximum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_pi16 +FORCE_INLINE __m64 _mm_max_pi16(__m64 a, __m64 b) +{ + return vreinterpret_m64_s16( + vmax_s16(vreinterpret_s16_m64(a), vreinterpret_s16_m64(b))); +} + +// Compare packed single-precision (32-bit) floating-point elements in a and b, +// and store packed maximum values in dst. dst does not follow the IEEE Standard +// for Floating-Point Arithmetic (IEEE 754) maximum value when inputs are NaN or +// signed-zero values. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_ps +FORCE_INLINE __m128 _mm_max_ps(__m128 a, __m128 b) +{ +#if SSE2NEON_PRECISE_MINMAX + float32x4_t _a = vreinterpretq_f32_m128(a); + float32x4_t _b = vreinterpretq_f32_m128(b); + return vreinterpretq_m128_f32(vbslq_f32(vcgtq_f32(_a, _b), _a, _b)); +#else + return vreinterpretq_m128_f32( + vmaxq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +#endif +} + +// Compare packed unsigned 8-bit integers in a and b, and store packed maximum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_pu8 +FORCE_INLINE __m64 _mm_max_pu8(__m64 a, __m64 b) +{ + return vreinterpret_m64_u8( + vmax_u8(vreinterpret_u8_m64(a), vreinterpret_u8_m64(b))); +} + +// Compare the lower single-precision (32-bit) floating-point elements in a and +// b, store the maximum value in the lower element of dst, and copy the upper 3 +// packed elements from a to the upper element of dst. dst does not follow the +// IEEE Standard for Floating-Point Arithmetic (IEEE 754) maximum value when +// inputs are NaN or signed-zero values. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_ss +FORCE_INLINE __m128 _mm_max_ss(__m128 a, __m128 b) +{ + float32_t value = vgetq_lane_f32(_mm_max_ps(a, b), 0); + return vreinterpretq_m128_f32( + vsetq_lane_f32(value, vreinterpretq_f32_m128(a), 0)); +} + +// Compare packed signed 16-bit integers in a and b, and store packed minimum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_pi16 +FORCE_INLINE __m64 _mm_min_pi16(__m64 a, __m64 b) +{ + return vreinterpret_m64_s16( + vmin_s16(vreinterpret_s16_m64(a), vreinterpret_s16_m64(b))); +} + +// Compare packed single-precision (32-bit) floating-point elements in a and b, +// and store packed minimum values in dst. dst does not follow the IEEE Standard +// for Floating-Point Arithmetic (IEEE 754) minimum value when inputs are NaN or +// signed-zero values. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_ps +FORCE_INLINE __m128 _mm_min_ps(__m128 a, __m128 b) +{ +#if SSE2NEON_PRECISE_MINMAX + float32x4_t _a = vreinterpretq_f32_m128(a); + float32x4_t _b = vreinterpretq_f32_m128(b); + return vreinterpretq_m128_f32(vbslq_f32(vcltq_f32(_a, _b), _a, _b)); +#else + return vreinterpretq_m128_f32( + vminq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +#endif +} + +// Compare packed unsigned 8-bit integers in a and b, and store packed minimum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_pu8 +FORCE_INLINE __m64 _mm_min_pu8(__m64 a, __m64 b) +{ + return vreinterpret_m64_u8( + vmin_u8(vreinterpret_u8_m64(a), vreinterpret_u8_m64(b))); +} + +// Compare the lower single-precision (32-bit) floating-point elements in a and +// b, store the minimum value in the lower element of dst, and copy the upper 3 +// packed elements from a to the upper element of dst. dst does not follow the +// IEEE Standard for Floating-Point Arithmetic (IEEE 754) minimum value when +// inputs are NaN or signed-zero values. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_ss +FORCE_INLINE __m128 _mm_min_ss(__m128 a, __m128 b) +{ + float32_t value = vgetq_lane_f32(_mm_min_ps(a, b), 0); + return vreinterpretq_m128_f32( + vsetq_lane_f32(value, vreinterpretq_f32_m128(a), 0)); +} + +// Move the lower single-precision (32-bit) floating-point element from b to the +// lower element of dst, and copy the upper 3 packed elements from a to the +// upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_move_ss +FORCE_INLINE __m128 _mm_move_ss(__m128 a, __m128 b) +{ + return vreinterpretq_m128_f32( + vsetq_lane_f32(vgetq_lane_f32(vreinterpretq_f32_m128(b), 0), + vreinterpretq_f32_m128(a), 0)); +} + +// Move the upper 2 single-precision (32-bit) floating-point elements from b to +// the lower 2 elements of dst, and copy the upper 2 elements from a to the +// upper 2 elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movehl_ps +FORCE_INLINE __m128 _mm_movehl_ps(__m128 a, __m128 b) +{ +#if defined(aarch64__) + return vreinterpretq_m128_u64( + vzip2q_u64(vreinterpretq_u64_m128(b), vreinterpretq_u64_m128(a))); +#else + float32x2_t a32 = vget_high_f32(vreinterpretq_f32_m128(a)); + float32x2_t b32 = vget_high_f32(vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_f32(vcombine_f32(b32, a32)); +#endif +} + +// Move the lower 2 single-precision (32-bit) floating-point elements from b to +// the upper 2 elements of dst, and copy the lower 2 elements from a to the +// lower 2 elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movelh_ps +FORCE_INLINE __m128 _mm_movelh_ps(__m128 __A, __m128 __B) +{ + float32x2_t a10 = vget_low_f32(vreinterpretq_f32_m128(__A)); + float32x2_t b10 = vget_low_f32(vreinterpretq_f32_m128(__B)); + return vreinterpretq_m128_f32(vcombine_f32(a10, b10)); +} + +// Create mask from the most significant bit of each 8-bit element in a, and +// store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movemask_pi8 +FORCE_INLINE int _mm_movemask_pi8(__m64 a) +{ + uint8x8_t input = vreinterpret_u8_m64(a); +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + static const int8_t shift[8] = {0, 1, 2, 3, 4, 5, 6, 7}; + uint8x8_t tmp = vshr_n_u8(input, 7); + return vaddv_u8(vshl_u8(tmp, vld1_s8(shift))); +#else + // Refer the implementation of `_mm_movemask_epi8` + uint16x4_t high_bits = vreinterpret_u16_u8(vshr_n_u8(input, 7)); + uint32x2_t paired16 = + vreinterpret_u32_u16(vsra_n_u16(high_bits, high_bits, 7)); + uint8x8_t paired32 = + vreinterpret_u8_u32(vsra_n_u32(paired16, paired16, 14)); + return vget_lane_u8(paired32, 0) | ((int) vget_lane_u8(paired32, 4) << 4); +#endif +} + +// Set each bit of mask dst based on the most significant bit of the +// corresponding packed single-precision (32-bit) floating-point element in a. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movemask_ps +FORCE_INLINE int _mm_movemask_ps(__m128 a) +{ + uint32x4_t input = vreinterpretq_u32_m128(a); +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + static const int32_t shift[4] = {0, 1, 2, 3}; + uint32x4_t tmp = vshrq_n_u32(input, 31); + return vaddvq_u32(vshlq_u32(tmp, vld1q_s32(shift))); +#else + // Uses the exact same method as _mm_movemask_epi8, see that for details. + // Shift out everything but the sign bits with a 32-bit unsigned shift + // right. + uint64x2_t high_bits = vreinterpretq_u64_u32(vshrq_n_u32(input, 31)); + // Merge the two pairs together with a 64-bit unsigned shift right + add. + uint8x16_t paired = + vreinterpretq_u8_u64(vsraq_n_u64(high_bits, high_bits, 31)); + // Extract the result. + return vgetq_lane_u8(paired, 0) | (vgetq_lane_u8(paired, 8) << 2); +#endif +} + +// Multiply packed single-precision (32-bit) floating-point elements in a and b, +// and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mul_ps +FORCE_INLINE __m128 _mm_mul_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_f32( + vmulq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Multiply the lower single-precision (32-bit) floating-point element in a and +// b, store the result in the lower element of dst, and copy the upper 3 packed +// elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mul_ss +FORCE_INLINE __m128 _mm_mul_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_mul_ps(a, b)); +} + +// Multiply the packed unsigned 16-bit integers in a and b, producing +// intermediate 32-bit integers, and store the high 16 bits of the intermediate +// integers in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mulhi_pu16 +FORCE_INLINE __m64 _mm_mulhi_pu16(__m64 a, __m64 b) +{ + return vreinterpret_m64_u16(vshrn_n_u32( + vmull_u16(vreinterpret_u16_m64(a), vreinterpret_u16_m64(b)), 16)); +} + +// Compute the bitwise OR of packed single-precision (32-bit) floating-point +// elements in a and b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_or_ps +FORCE_INLINE __m128 _mm_or_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_s32( + vorrq_s32(vreinterpretq_s32_m128(a), vreinterpretq_s32_m128(b))); +} + +// Average packed unsigned 8-bit integers in a and b, and store the results in +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pavgb +#define _m_pavgb(a, b) _mm_avg_pu8(a, b) + +// Average packed unsigned 16-bit integers in a and b, and store the results in +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pavgw +#define _m_pavgw(a, b) _mm_avg_pu16(a, b) + +// Extract a 16-bit integer from a, selected with imm8, and store the result in +// the lower element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pextrw +#define _m_pextrw(a, imm) _mm_extract_pi16(a, imm) + +// Copy a to dst, and insert the 16-bit integer i into dst at the location +// specified by imm8. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=m_pinsrw +#define _m_pinsrw(a, i, imm) _mm_insert_pi16(a, i, imm) + +// Compare packed signed 16-bit integers in a and b, and store packed maximum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pmaxsw +#define _m_pmaxsw(a, b) _mm_max_pi16(a, b) + +// Compare packed unsigned 8-bit integers in a and b, and store packed maximum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pmaxub +#define _m_pmaxub(a, b) _mm_max_pu8(a, b) + +// Compare packed signed 16-bit integers in a and b, and store packed minimum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pminsw +#define _m_pminsw(a, b) _mm_min_pi16(a, b) + +// Compare packed unsigned 8-bit integers in a and b, and store packed minimum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pminub +#define _m_pminub(a, b) _mm_min_pu8(a, b) + +// Create mask from the most significant bit of each 8-bit element in a, and +// store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pmovmskb +#define _m_pmovmskb(a) _mm_movemask_pi8(a) + +// Multiply the packed unsigned 16-bit integers in a and b, producing +// intermediate 32-bit integers, and store the high 16 bits of the intermediate +// integers in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pmulhuw +#define _m_pmulhuw(a, b) _mm_mulhi_pu16(a, b) + +// Fetch the line of data from memory that contains address p to a location in +// the cache hierarchy specified by the locality hint i. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_prefetch +FORCE_INLINE void _mm_prefetch(char const *p, int i) +{ + (void) i; +#if defined(_MSC_VER) && !defined(__clang__) + switch (i) { + case _MM_HINT_NTA: + __prefetch2(p, 1); + break; + case _MM_HINT_T0: + __prefetch2(p, 0); + break; + case _MM_HINT_T1: + __prefetch2(p, 2); + break; + case _MM_HINT_T2: + __prefetch2(p, 4); + break; + } +#else + switch (i) { + case _MM_HINT_NTA: + __builtin_prefetch(p, 0, 0); + break; + case _MM_HINT_T0: + __builtin_prefetch(p, 0, 3); + break; + case _MM_HINT_T1: + __builtin_prefetch(p, 0, 2); + break; + case _MM_HINT_T2: + __builtin_prefetch(p, 0, 1); + break; + } +#endif +} + +// Compute the absolute differences of packed unsigned 8-bit integers in a and +// b, then horizontally sum each consecutive 8 differences to produce four +// unsigned 16-bit integers, and pack these unsigned 16-bit integers in the low +// 16 bits of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=m_psadbw +#define _m_psadbw(a, b) _mm_sad_pu8(a, b) + +// Shuffle 16-bit integers in a using the control in imm8, and store the results +// in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_m_pshufw +#define _m_pshufw(a, imm) _mm_shuffle_pi16(a, imm) + +// Compute the approximate reciprocal of packed single-precision (32-bit) +// floating-point elements in a, and store the results in dst. The maximum +// relative error for this approximation is less than 1.5*2^-12. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_rcp_ps +FORCE_INLINE __m128 _mm_rcp_ps(__m128 in) +{ + float32x4_t recip = vrecpeq_f32(vreinterpretq_f32_m128(in)); + recip = vmulq_f32(recip, vrecpsq_f32(recip, vreinterpretq_f32_m128(in))); +#if SSE2NEON_PRECISE_DIV + // Additional Netwon-Raphson iteration for accuracy + recip = vmulq_f32(recip, vrecpsq_f32(recip, vreinterpretq_f32_m128(in))); +#endif + return vreinterpretq_m128_f32(recip); +} + +// Compute the approximate reciprocal of the lower single-precision (32-bit) +// floating-point element in a, store the result in the lower element of dst, +// and copy the upper 3 packed elements from a to the upper elements of dst. The +// maximum relative error for this approximation is less than 1.5*2^-12. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_rcp_ss +FORCE_INLINE __m128 _mm_rcp_ss(__m128 a) +{ + return _mm_move_ss(a, _mm_rcp_ps(a)); +} + +// Compute the approximate reciprocal square root of packed single-precision +// (32-bit) floating-point elements in a, and store the results in dst. The +// maximum relative error for this approximation is less than 1.5*2^-12. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_rsqrt_ps +FORCE_INLINE __m128 _mm_rsqrt_ps(__m128 in) +{ + float32x4_t out = vrsqrteq_f32(vreinterpretq_f32_m128(in)); + + // Generate masks for detecting whether input has any 0.0f/-0.0f + // (which becomes positive/negative infinity by IEEE-754 arithmetic rules). + const uint32x4_t pos_inf = vdupq_n_u32(0x7F800000); + const uint32x4_t neg_inf = vdupq_n_u32(0xFF800000); + const uint32x4_t has_pos_zero = + vceqq_u32(pos_inf, vreinterpretq_u32_f32(out)); + const uint32x4_t has_neg_zero = + vceqq_u32(neg_inf, vreinterpretq_u32_f32(out)); + + out = vmulq_f32( + out, vrsqrtsq_f32(vmulq_f32(vreinterpretq_f32_m128(in), out), out)); +#if SSE2NEON_PRECISE_SQRT + // Additional Netwon-Raphson iteration for accuracy + out = vmulq_f32( + out, vrsqrtsq_f32(vmulq_f32(vreinterpretq_f32_m128(in), out), out)); +#endif + + // Set output vector element to infinity/negative-infinity if + // the corresponding input vector element is 0.0f/-0.0f. + out = vbslq_f32(has_pos_zero, (float32x4_t) pos_inf, out); + out = vbslq_f32(has_neg_zero, (float32x4_t) neg_inf, out); + + return vreinterpretq_m128_f32(out); +} + +// Compute the approximate reciprocal square root of the lower single-precision +// (32-bit) floating-point element in a, store the result in the lower element +// of dst, and copy the upper 3 packed elements from a to the upper elements of +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_rsqrt_ss +FORCE_INLINE __m128 _mm_rsqrt_ss(__m128 in) +{ + return vsetq_lane_f32(vgetq_lane_f32(_mm_rsqrt_ps(in), 0), in, 0); +} + +// Compute the absolute differences of packed unsigned 8-bit integers in a and +// b, then horizontally sum each consecutive 8 differences to produce four +// unsigned 16-bit integers, and pack these unsigned 16-bit integers in the low +// 16 bits of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sad_pu8 +FORCE_INLINE __m64 _mm_sad_pu8(__m64 a, __m64 b) +{ + uint64x1_t t = vpaddl_u32(vpaddl_u16( + vpaddl_u8(vabd_u8(vreinterpret_u8_m64(a), vreinterpret_u8_m64(b))))); + return vreinterpret_m64_u16( + vset_lane_u16((uint16_t) vget_lane_u64(t, 0), vdup_n_u16(0), 0)); +} + +// Macro: Set the flush zero bits of the MXCSR control and status register to +// the value in unsigned 32-bit integer a. The flush zero may contain any of the +// following flags: _MM_FLUSH_ZERO_ON or _MM_FLUSH_ZERO_OFF +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_MM_SET_FLUSH_ZERO_MODE +FORCE_INLINE void _sse2neon_mm_set_flush_zero_mode(unsigned int flag) +{ + // AArch32 Advanced SIMD arithmetic always uses the Flush-to-zero setting, + // regardless of the value of the FZ bit. + union { + fpcr_bitfield field; +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + uint64_t value; +#else + uint32_t value; +#endif + } r; + +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + r.value = _sse2neon_get_fpcr(); +#else + __asm__ __volatile__("vmrs %0, FPSCR" : "=r"(r.value)); /* read */ +#endif + + r.field.bit24 = (flag & _MM_FLUSH_ZERO_MASK) == _MM_FLUSH_ZERO_ON; + +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + _sse2neon_set_fpcr(r.value); +#else + __asm__ __volatile__("vmsr FPSCR, %0" ::"r"(r)); /* write */ +#endif +} + +// Set packed single-precision (32-bit) floating-point elements in dst with the +// supplied values. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_ps +FORCE_INLINE __m128 _mm_set_ps(float w, float z, float y, float x) +{ + float ALIGN_STRUCT(16) data[4] = {x, y, z, w}; + return vreinterpretq_m128_f32(vld1q_f32(data)); +} + +// Broadcast single-precision (32-bit) floating-point value a to all elements of +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_ps1 +FORCE_INLINE __m128 _mm_set_ps1(float _w) +{ + return vreinterpretq_m128_f32(vdupq_n_f32(_w)); +} + +// Macro: Set the rounding mode bits of the MXCSR control and status register to +// the value in unsigned 32-bit integer a. The rounding mode may contain any of +// the following flags: _MM_ROUND_NEAREST, _MM_ROUND_DOWN, _MM_ROUND_UP, +// _MM_ROUND_TOWARD_ZERO +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_MM_SET_ROUNDING_MODE +FORCE_INLINE void _MM_SET_ROUNDING_MODE(int rounding) +{ + switch (rounding) { + case _MM_ROUND_NEAREST: + rounding = FE_TONEAREST; + break; + case _MM_ROUND_DOWN: + rounding = FE_DOWNWARD; + break; + case _MM_ROUND_UP: + rounding = FE_UPWARD; + break; + case _MM_ROUND_TOWARD_ZERO: + rounding = FE_TOWARDZERO; + break; + default: + // rounding must be _MM_ROUND_NEAREST, _MM_ROUND_DOWN, _MM_ROUND_UP, + // _MM_ROUND_TOWARD_ZERO. all the other invalid values we treat them as + // FE_TOWARDZERO (truncate). + rounding = FE_TOWARDZERO; + } + fesetround(rounding); +} + +// Copy single-precision (32-bit) floating-point element a to the lower element +// of dst, and zero the upper 3 elements. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_ss +FORCE_INLINE __m128 _mm_set_ss(float a) +{ + return vreinterpretq_m128_f32(vsetq_lane_f32(a, vdupq_n_f32(0), 0)); +} + +// Broadcast single-precision (32-bit) floating-point value a to all elements of +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set1_ps +FORCE_INLINE __m128 _mm_set1_ps(float _w) +{ + return vreinterpretq_m128_f32(vdupq_n_f32(_w)); +} + +// Set the MXCSR control and status register with the value in unsigned 32-bit +// integer a. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setcsr +// FIXME: _mm_setcsr() implementation supports changing the rounding mode only. +FORCE_INLINE void _mm_setcsr(unsigned int a) +{ + _MM_SET_ROUNDING_MODE(a); +} + +// Get the unsigned 32-bit value of the MXCSR control and status register. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_getcsr +// FIXME: _mm_getcsr() implementation supports reading the rounding mode only. +FORCE_INLINE unsigned int _mm_getcsr(void) +{ + return _MM_GET_ROUNDING_MODE(); +} + +// Set packed single-precision (32-bit) floating-point elements in dst with the +// supplied values in reverse order. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setr_ps +FORCE_INLINE __m128 _mm_setr_ps(float w, float z, float y, float x) +{ + float ALIGN_STRUCT(16) data[4] = {w, z, y, x}; + return vreinterpretq_m128_f32(vld1q_f32(data)); +} + +// Return vector of type __m128 with all elements set to zero. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setzero_ps +FORCE_INLINE __m128 _mm_setzero_ps(void) +{ + return vreinterpretq_m128_f32(vdupq_n_f32(0)); +} + +// Shuffle 16-bit integers in a using the control in imm8, and store the results +// in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shuffle_pi16 +#ifdef _sse2neon_shuffle +#define _mm_shuffle_pi16(a, imm) \ + vreinterpret_m64_s16(vshuffle_s16( \ + vreinterpret_s16_m64(a), vreinterpret_s16_m64(a), ((imm) & 0x3), \ + (((imm) >> 2) & 0x3), (((imm) >> 4) & 0x3), (((imm) >> 6) & 0x3))) +#else +#define _mm_shuffle_pi16(a, imm) \ + _sse2neon_define1( \ + __m64, a, int16x4_t ret; \ + ret = vmov_n_s16( \ + vget_lane_s16(vreinterpret_s16_m64(_a), (imm) & (0x3))); \ + ret = vset_lane_s16( \ + vget_lane_s16(vreinterpret_s16_m64(_a), ((imm) >> 2) & 0x3), ret, \ + 1); \ + ret = vset_lane_s16( \ + vget_lane_s16(vreinterpret_s16_m64(_a), ((imm) >> 4) & 0x3), ret, \ + 2); \ + ret = vset_lane_s16( \ + vget_lane_s16(vreinterpret_s16_m64(_a), ((imm) >> 6) & 0x3), ret, \ + 3); \ + _sse2neon_return(vreinterpret_m64_s16(ret));) +#endif + +// Perform a serializing operation on all store-to-memory instructions that were +// issued prior to this instruction. Guarantees that every store instruction +// that precedes, in program order, is globally visible before any store +// instruction which follows the fence in program order. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sfence +FORCE_INLINE void _mm_sfence(void) +{ + _sse2neon_smp_mb(); +} + +// Perform a serializing operation on all load-from-memory and store-to-memory +// instructions that were issued prior to this instruction. Guarantees that +// every memory access that precedes, in program order, the memory fence +// instruction is globally visible before any memory instruction which follows +// the fence in program order. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mfence +FORCE_INLINE void _mm_mfence(void) +{ + _sse2neon_smp_mb(); +} + +// Perform a serializing operation on all load-from-memory instructions that +// were issued prior to this instruction. Guarantees that every load instruction +// that precedes, in program order, is globally visible before any load +// instruction which follows the fence in program order. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_lfence +FORCE_INLINE void _mm_lfence(void) +{ + _sse2neon_smp_mb(); +} + +// FORCE_INLINE __m128 _mm_shuffle_ps(__m128 a, __m128 b, __constrange(0,255) +// int imm) +#ifdef _sse2neon_shuffle +#define _mm_shuffle_ps(a, b, imm) \ + __extension__({ \ + float32x4_t _input1 = vreinterpretq_f32_m128(a); \ + float32x4_t _input2 = vreinterpretq_f32_m128(b); \ + float32x4_t _shuf = \ + vshuffleq_s32(_input1, _input2, (imm) & (0x3), ((imm) >> 2) & 0x3, \ + (((imm) >> 4) & 0x3) + 4, (((imm) >> 6) & 0x3) + 4); \ + vreinterpretq_m128_f32(_shuf); \ + }) +#else // generic +#define _mm_shuffle_ps(a, b, imm) \ + _sse2neon_define2( \ + __m128, a, b, __m128 ret; switch (imm) { \ + case _MM_SHUFFLE(1, 0, 3, 2): \ + ret = _mm_shuffle_ps_1032(_a, _b); \ + break; \ + case _MM_SHUFFLE(2, 3, 0, 1): \ + ret = _mm_shuffle_ps_2301(_a, _b); \ + break; \ + case _MM_SHUFFLE(0, 3, 2, 1): \ + ret = _mm_shuffle_ps_0321(_a, _b); \ + break; \ + case _MM_SHUFFLE(2, 1, 0, 3): \ + ret = _mm_shuffle_ps_2103(_a, _b); \ + break; \ + case _MM_SHUFFLE(1, 0, 1, 0): \ + ret = _mm_movelh_ps(_a, _b); \ + break; \ + case _MM_SHUFFLE(1, 0, 0, 1): \ + ret = _mm_shuffle_ps_1001(_a, _b); \ + break; \ + case _MM_SHUFFLE(0, 1, 0, 1): \ + ret = _mm_shuffle_ps_0101(_a, _b); \ + break; \ + case _MM_SHUFFLE(3, 2, 1, 0): \ + ret = _mm_shuffle_ps_3210(_a, _b); \ + break; \ + case _MM_SHUFFLE(0, 0, 1, 1): \ + ret = _mm_shuffle_ps_0011(_a, _b); \ + break; \ + case _MM_SHUFFLE(0, 0, 2, 2): \ + ret = _mm_shuffle_ps_0022(_a, _b); \ + break; \ + case _MM_SHUFFLE(2, 2, 0, 0): \ + ret = _mm_shuffle_ps_2200(_a, _b); \ + break; \ + case _MM_SHUFFLE(3, 2, 0, 2): \ + ret = _mm_shuffle_ps_3202(_a, _b); \ + break; \ + case _MM_SHUFFLE(3, 2, 3, 2): \ + ret = _mm_movehl_ps(_b, _a); \ + break; \ + case _MM_SHUFFLE(1, 1, 3, 3): \ + ret = _mm_shuffle_ps_1133(_a, _b); \ + break; \ + case _MM_SHUFFLE(2, 0, 1, 0): \ + ret = _mm_shuffle_ps_2010(_a, _b); \ + break; \ + case _MM_SHUFFLE(2, 0, 0, 1): \ + ret = _mm_shuffle_ps_2001(_a, _b); \ + break; \ + case _MM_SHUFFLE(2, 0, 3, 2): \ + ret = _mm_shuffle_ps_2032(_a, _b); \ + break; \ + default: \ + ret = _mm_shuffle_ps_default(_a, _b, (imm)); \ + break; \ + } _sse2neon_return(ret);) +#endif + +// Compute the square root of packed single-precision (32-bit) floating-point +// elements in a, and store the results in dst. +// Due to ARMv7-A NEON's lack of a precise square root intrinsic, we implement +// square root by multiplying input in with its reciprocal square root before +// using the Newton-Raphson method to approximate the results. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sqrt_ps +FORCE_INLINE __m128 _mm_sqrt_ps(__m128 in) +{ +#if (defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC)) && \ + !SSE2NEON_PRECISE_SQRT + return vreinterpretq_m128_f32(vsqrtq_f32(vreinterpretq_f32_m128(in))); +#else + float32x4_t recip = vrsqrteq_f32(vreinterpretq_f32_m128(in)); + + // Test for vrsqrteq_f32(0) -> positive infinity case. + // Change to zero, so that s * 1/sqrt(s) result is zero too. + const uint32x4_t pos_inf = vdupq_n_u32(0x7F800000); + const uint32x4_t div_by_zero = + vceqq_u32(pos_inf, vreinterpretq_u32_f32(recip)); + recip = vreinterpretq_f32_u32( + vandq_u32(vmvnq_u32(div_by_zero), vreinterpretq_u32_f32(recip))); + + recip = vmulq_f32( + vrsqrtsq_f32(vmulq_f32(recip, recip), vreinterpretq_f32_m128(in)), + recip); + // Additional Netwon-Raphson iteration for accuracy + recip = vmulq_f32( + vrsqrtsq_f32(vmulq_f32(recip, recip), vreinterpretq_f32_m128(in)), + recip); + + // sqrt(s) = s * 1/sqrt(s) + return vreinterpretq_m128_f32(vmulq_f32(vreinterpretq_f32_m128(in), recip)); +#endif +} + +// Compute the square root of the lower single-precision (32-bit) floating-point +// element in a, store the result in the lower element of dst, and copy the +// upper 3 packed elements from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sqrt_ss +FORCE_INLINE __m128 _mm_sqrt_ss(__m128 in) +{ + float32_t value = + vgetq_lane_f32(vreinterpretq_f32_m128(_mm_sqrt_ps(in)), 0); + return vreinterpretq_m128_f32( + vsetq_lane_f32(value, vreinterpretq_f32_m128(in), 0)); +} + +// Store 128-bits (composed of 4 packed single-precision (32-bit) floating-point +// elements) from a into memory. mem_addr must be aligned on a 16-byte boundary +// or a general-protection exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_store_ps +FORCE_INLINE void _mm_store_ps(float *p, __m128 a) +{ + vst1q_f32(p, vreinterpretq_f32_m128(a)); +} + +// Store the lower single-precision (32-bit) floating-point element from a into +// 4 contiguous elements in memory. mem_addr must be aligned on a 16-byte +// boundary or a general-protection exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_store_ps1 +FORCE_INLINE void _mm_store_ps1(float *p, __m128 a) +{ + float32_t a0 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); + vst1q_f32(p, vdupq_n_f32(a0)); +} + +// Store the lower single-precision (32-bit) floating-point element from a into +// memory. mem_addr does not need to be aligned on any particular boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_store_ss +FORCE_INLINE void _mm_store_ss(float *p, __m128 a) +{ + vst1q_lane_f32(p, vreinterpretq_f32_m128(a), 0); +} + +// Store the lower single-precision (32-bit) floating-point element from a into +// 4 contiguous elements in memory. mem_addr must be aligned on a 16-byte +// boundary or a general-protection exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_store1_ps +#define _mm_store1_ps _mm_store_ps1 + +// Store the upper 2 single-precision (32-bit) floating-point elements from a +// into memory. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeh_pi +FORCE_INLINE void _mm_storeh_pi(__m64 *p, __m128 a) +{ + *p = vreinterpret_m64_f32(vget_high_f32(a)); +} + +// Store the lower 2 single-precision (32-bit) floating-point elements from a +// into memory. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storel_pi +FORCE_INLINE void _mm_storel_pi(__m64 *p, __m128 a) +{ + *p = vreinterpret_m64_f32(vget_low_f32(a)); +} + +// Store 4 single-precision (32-bit) floating-point elements from a into memory +// in reverse order. mem_addr must be aligned on a 16-byte boundary or a +// general-protection exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storer_ps +FORCE_INLINE void _mm_storer_ps(float *p, __m128 a) +{ + float32x4_t tmp = vrev64q_f32(vreinterpretq_f32_m128(a)); + float32x4_t rev = vextq_f32(tmp, tmp, 2); + vst1q_f32(p, rev); +} + +// Store 128-bits (composed of 4 packed single-precision (32-bit) floating-point +// elements) from a into memory. mem_addr does not need to be aligned on any +// particular boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeu_ps +FORCE_INLINE void _mm_storeu_ps(float *p, __m128 a) +{ + vst1q_f32(p, vreinterpretq_f32_m128(a)); +} + +// Stores 16-bits of integer data a at the address p. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeu_si16 +FORCE_INLINE void _mm_storeu_si16(void *p, __m128i a) +{ + vst1q_lane_s16((int16_t *) p, vreinterpretq_s16_m128i(a), 0); +} + +// Stores 64-bits of integer data a at the address p. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeu_si64 +FORCE_INLINE void _mm_storeu_si64(void *p, __m128i a) +{ + vst1q_lane_s64((int64_t *) p, vreinterpretq_s64_m128i(a), 0); +} + +// Store 64-bits of integer data from a into memory using a non-temporal memory +// hint. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_stream_pi +FORCE_INLINE void _mm_stream_pi(__m64 *p, __m64 a) +{ + vst1_s64((int64_t *) p, vreinterpret_s64_m64(a)); +} + +// Store 128-bits (composed of 4 packed single-precision (32-bit) floating- +// point elements) from a into memory using a non-temporal memory hint. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_stream_ps +FORCE_INLINE void _mm_stream_ps(float *p, __m128 a) +{ +#if __has_builtin(__builtin_nontemporal_store) + __builtin_nontemporal_store(a, (float32x4_t *) p); +#else + vst1q_f32(p, vreinterpretq_f32_m128(a)); +#endif +} + +// Subtract packed single-precision (32-bit) floating-point elements in b from +// packed single-precision (32-bit) floating-point elements in a, and store the +// results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_ps +FORCE_INLINE __m128 _mm_sub_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_f32( + vsubq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +} + +// Subtract the lower single-precision (32-bit) floating-point element in b from +// the lower single-precision (32-bit) floating-point element in a, store the +// result in the lower element of dst, and copy the upper 3 packed elements from +// a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_ss +FORCE_INLINE __m128 _mm_sub_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_sub_ps(a, b)); +} + +// Macro: Transpose the 4x4 matrix formed by the 4 rows of single-precision +// (32-bit) floating-point elements in row0, row1, row2, and row3, and store the +// transposed matrix in these vectors (row0 now contains column 0, etc.). +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=MM_TRANSPOSE4_PS +#define _MM_TRANSPOSE4_PS(row0, row1, row2, row3) \ + do { \ + float32x4x2_t ROW01 = vtrnq_f32(row0, row1); \ + float32x4x2_t ROW23 = vtrnq_f32(row2, row3); \ + row0 = vcombine_f32(vget_low_f32(ROW01.val[0]), \ + vget_low_f32(ROW23.val[0])); \ + row1 = vcombine_f32(vget_low_f32(ROW01.val[1]), \ + vget_low_f32(ROW23.val[1])); \ + row2 = vcombine_f32(vget_high_f32(ROW01.val[0]), \ + vget_high_f32(ROW23.val[0])); \ + row3 = vcombine_f32(vget_high_f32(ROW01.val[1]), \ + vget_high_f32(ROW23.val[1])); \ + } while (0) + +// according to the documentation, these intrinsics behave the same as the +// non-'u' versions. We'll just alias them here. +#define _mm_ucomieq_ss _mm_comieq_ss +#define _mm_ucomige_ss _mm_comige_ss +#define _mm_ucomigt_ss _mm_comigt_ss +#define _mm_ucomile_ss _mm_comile_ss +#define _mm_ucomilt_ss _mm_comilt_ss +#define _mm_ucomineq_ss _mm_comineq_ss + +// Return vector of type __m128i with undefined elements. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=mm_undefined_si128 +FORCE_INLINE __m128i _mm_undefined_si128(void) +{ +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wuninitialized" +#endif + __m128i a; +#if defined(_MSC_VER) + a = _mm_setzero_si128(); +#endif + return a; +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic pop +#endif +} + +// Return vector of type __m128 with undefined elements. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_undefined_ps +FORCE_INLINE __m128 _mm_undefined_ps(void) +{ +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wuninitialized" +#endif + __m128 a; +#if defined(_MSC_VER) + a = _mm_setzero_ps(); +#endif + return a; +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic pop +#endif +} + +// Unpack and interleave single-precision (32-bit) floating-point elements from +// the high half a and b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpackhi_ps +FORCE_INLINE __m128 _mm_unpackhi_ps(__m128 a, __m128 b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128_f32( + vzip2q_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +#else + float32x2_t a1 = vget_high_f32(vreinterpretq_f32_m128(a)); + float32x2_t b1 = vget_high_f32(vreinterpretq_f32_m128(b)); + float32x2x2_t result = vzip_f32(a1, b1); + return vreinterpretq_m128_f32(vcombine_f32(result.val[0], result.val[1])); +#endif +} + +// Unpack and interleave single-precision (32-bit) floating-point elements from +// the low half of a and b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpacklo_ps +FORCE_INLINE __m128 _mm_unpacklo_ps(__m128 a, __m128 b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128_f32( + vzip1q_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +#else + float32x2_t a1 = vget_low_f32(vreinterpretq_f32_m128(a)); + float32x2_t b1 = vget_low_f32(vreinterpretq_f32_m128(b)); + float32x2x2_t result = vzip_f32(a1, b1); + return vreinterpretq_m128_f32(vcombine_f32(result.val[0], result.val[1])); +#endif +} + +// Compute the bitwise XOR of packed single-precision (32-bit) floating-point +// elements in a and b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_xor_ps +FORCE_INLINE __m128 _mm_xor_ps(__m128 a, __m128 b) +{ + return vreinterpretq_m128_s32( + veorq_s32(vreinterpretq_s32_m128(a), vreinterpretq_s32_m128(b))); +} + +/* SSE2 */ + +// Add packed 16-bit integers in a and b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_epi16 +FORCE_INLINE __m128i _mm_add_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vaddq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Add packed 32-bit integers in a and b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_epi32 +FORCE_INLINE __m128i _mm_add_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vaddq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Add packed 64-bit integers in a and b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_epi64 +FORCE_INLINE __m128i _mm_add_epi64(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s64( + vaddq_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b))); +} + +// Add packed 8-bit integers in a and b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_epi8 +FORCE_INLINE __m128i _mm_add_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s8( + vaddq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Add packed double-precision (64-bit) floating-point elements in a and b, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_pd +FORCE_INLINE __m128d _mm_add_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_f64( + vaddq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + double c[2]; + c[0] = a0 + b0; + c[1] = a1 + b1; + return vld1q_f32((float32_t *) c); +#endif +} + +// Add the lower double-precision (64-bit) floating-point element in a and b, +// store the result in the lower element of dst, and copy the upper element from +// a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_sd +FORCE_INLINE __m128d _mm_add_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return _mm_move_sd(a, _mm_add_pd(a, b)); +#else + double a0, a1, b0; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + a1 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double c[2]; + c[0] = a0 + b0; + c[1] = a1; + return vld1q_f32((float32_t *) c); +#endif +} + +// Add 64-bit integers a and b, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_add_si64 +FORCE_INLINE __m64 _mm_add_si64(__m64 a, __m64 b) +{ + return vreinterpret_m64_s64( + vadd_s64(vreinterpret_s64_m64(a), vreinterpret_s64_m64(b))); +} + +// Add packed signed 16-bit integers in a and b using saturation, and store the +// results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_adds_epi16 +FORCE_INLINE __m128i _mm_adds_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vqaddq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Add packed signed 8-bit integers in a and b using saturation, and store the +// results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_adds_epi8 +FORCE_INLINE __m128i _mm_adds_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s8( + vqaddq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Add packed unsigned 16-bit integers in a and b using saturation, and store +// the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_adds_epu16 +FORCE_INLINE __m128i _mm_adds_epu16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vqaddq_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b))); +} + +// Add packed unsigned 8-bit integers in a and b using saturation, and store the +// results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_adds_epu8 +FORCE_INLINE __m128i _mm_adds_epu8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vqaddq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b))); +} + +// Compute the bitwise AND of packed double-precision (64-bit) floating-point +// elements in a and b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_and_pd +FORCE_INLINE __m128d _mm_and_pd(__m128d a, __m128d b) +{ + return vreinterpretq_m128d_s64( + vandq_s64(vreinterpretq_s64_m128d(a), vreinterpretq_s64_m128d(b))); +} + +// Compute the bitwise AND of 128 bits (representing integer data) in a and b, +// and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_and_si128 +FORCE_INLINE __m128i _mm_and_si128(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vandq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Compute the bitwise NOT of packed double-precision (64-bit) floating-point +// elements in a and then AND with b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_andnot_pd +FORCE_INLINE __m128d _mm_andnot_pd(__m128d a, __m128d b) +{ + // *NOTE* argument swap + return vreinterpretq_m128d_s64( + vbicq_s64(vreinterpretq_s64_m128d(b), vreinterpretq_s64_m128d(a))); +} + +// Compute the bitwise NOT of 128 bits (representing integer data) in a and then +// AND with b, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_andnot_si128 +FORCE_INLINE __m128i _mm_andnot_si128(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vbicq_s32(vreinterpretq_s32_m128i(b), + vreinterpretq_s32_m128i(a))); // *NOTE* argument swap +} + +// Average packed unsigned 16-bit integers in a and b, and store the results in +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_avg_epu16 +FORCE_INLINE __m128i _mm_avg_epu16(__m128i a, __m128i b) +{ + return (__m128i) vrhaddq_u16(vreinterpretq_u16_m128i(a), + vreinterpretq_u16_m128i(b)); +} + +// Average packed unsigned 8-bit integers in a and b, and store the results in +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_avg_epu8 +FORCE_INLINE __m128i _mm_avg_epu8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vrhaddq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b))); +} + +// Shift a left by imm8 bytes while shifting in zeros, and store the results in +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_bslli_si128 +#define _mm_bslli_si128(a, imm) _mm_slli_si128(a, imm) + +// Shift a right by imm8 bytes while shifting in zeros, and store the results in +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_bsrli_si128 +#define _mm_bsrli_si128(a, imm) _mm_srli_si128(a, imm) + +// Cast vector of type __m128d to type __m128. This intrinsic is only used for +// compilation and does not generate any instructions, thus it has zero latency. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_castpd_ps +FORCE_INLINE __m128 _mm_castpd_ps(__m128d a) +{ + return vreinterpretq_m128_s64(vreinterpretq_s64_m128d(a)); +} + +// Cast vector of type __m128d to type __m128i. This intrinsic is only used for +// compilation and does not generate any instructions, thus it has zero latency. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_castpd_si128 +FORCE_INLINE __m128i _mm_castpd_si128(__m128d a) +{ + return vreinterpretq_m128i_s64(vreinterpretq_s64_m128d(a)); +} + +// Cast vector of type __m128 to type __m128d. This intrinsic is only used for +// compilation and does not generate any instructions, thus it has zero latency. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_castps_pd +FORCE_INLINE __m128d _mm_castps_pd(__m128 a) +{ + return vreinterpretq_m128d_s32(vreinterpretq_s32_m128(a)); +} + +// Cast vector of type __m128 to type __m128i. This intrinsic is only used for +// compilation and does not generate any instructions, thus it has zero latency. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_castps_si128 +FORCE_INLINE __m128i _mm_castps_si128(__m128 a) +{ + return vreinterpretq_m128i_s32(vreinterpretq_s32_m128(a)); +} + +// Cast vector of type __m128i to type __m128d. This intrinsic is only used for +// compilation and does not generate any instructions, thus it has zero latency. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_castsi128_pd +FORCE_INLINE __m128d _mm_castsi128_pd(__m128i a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_f64(vreinterpretq_f64_m128i(a)); +#else + return vreinterpretq_m128d_f32(vreinterpretq_f32_m128i(a)); +#endif +} + +// Cast vector of type __m128i to type __m128. This intrinsic is only used for +// compilation and does not generate any instructions, thus it has zero latency. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_castsi128_ps +FORCE_INLINE __m128 _mm_castsi128_ps(__m128i a) +{ + return vreinterpretq_m128_s32(vreinterpretq_s32_m128i(a)); +} + +// Invalidate and flush the cache line that contains p from all levels of the +// cache hierarchy. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_clflush +#if defined(__APPLE__) +#include +#endif +FORCE_INLINE void _mm_clflush(void const *p) +{ + (void) p; + + /* sys_icache_invalidate is supported since macOS 10.5. + * However, it does not work on non-jailbroken iOS devices, although the + * compilation is successful. + */ +#if defined(__APPLE__) + sys_icache_invalidate((void *) (uintptr_t) p, SSE2NEON_CACHELINE_SIZE); +#elif defined(__GNUC__) || defined(__clang__) + uintptr_t ptr = (uintptr_t) p; + __builtin___clear_cache((char *) ptr, + (char *) ptr + SSE2NEON_CACHELINE_SIZE); +#elif (_MSC_VER) && SSE2NEON_INCLUDE_WINDOWS_H + FlushInstructionCache(GetCurrentProcess(), p, SSE2NEON_CACHELINE_SIZE); +#endif +} + +// Compare packed 16-bit integers in a and b for equality, and store the results +// in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpeq_epi16 +FORCE_INLINE __m128i _mm_cmpeq_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vceqq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Compare packed 32-bit integers in a and b for equality, and store the results +// in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpeq_epi32 +FORCE_INLINE __m128i _mm_cmpeq_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u32( + vceqq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Compare packed 8-bit integers in a and b for equality, and store the results +// in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpeq_epi8 +FORCE_INLINE __m128i _mm_cmpeq_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vceqq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Compare packed double-precision (64-bit) floating-point elements in a and b +// for equality, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpeq_pd +FORCE_INLINE __m128d _mm_cmpeq_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_u64( + vceqq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#else + // (a == b) -> (a_lo == b_lo) && (a_hi == b_hi) + uint32x4_t cmp = + vceqq_u32(vreinterpretq_u32_m128d(a), vreinterpretq_u32_m128d(b)); + uint32x4_t swapped = vrev64q_u32(cmp); + return vreinterpretq_m128d_u32(vandq_u32(cmp, swapped)); +#endif +} + +// Compare the lower double-precision (64-bit) floating-point elements in a and +// b for equality, store the result in the lower element of dst, and copy the +// upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpeq_sd +FORCE_INLINE __m128d _mm_cmpeq_sd(__m128d a, __m128d b) +{ + return _mm_move_sd(a, _mm_cmpeq_pd(a, b)); +} + +// Compare packed double-precision (64-bit) floating-point elements in a and b +// for greater-than-or-equal, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpge_pd +FORCE_INLINE __m128d _mm_cmpge_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_u64( + vcgeq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + uint64_t d[2]; + d[0] = a0 >= b0 ? ~UINT64_C(0) : UINT64_C(0); + d[1] = a1 >= b1 ? ~UINT64_C(0) : UINT64_C(0); + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare the lower double-precision (64-bit) floating-point elements in a and +// b for greater-than-or-equal, store the result in the lower element of dst, +// and copy the upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpge_sd +FORCE_INLINE __m128d _mm_cmpge_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return _mm_move_sd(a, _mm_cmpge_pd(a, b)); +#else + // expand "_mm_cmpge_pd()" to reduce unnecessary operations + double a0, b0; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + uint64_t a1 = vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1); + b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + uint64_t d[2]; + d[0] = a0 >= b0 ? ~UINT64_C(0) : UINT64_C(0); + d[1] = a1; + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare packed signed 16-bit integers in a and b for greater-than, and store +// the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpgt_epi16 +FORCE_INLINE __m128i _mm_cmpgt_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vcgtq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Compare packed signed 32-bit integers in a and b for greater-than, and store +// the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpgt_epi32 +FORCE_INLINE __m128i _mm_cmpgt_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u32( + vcgtq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Compare packed signed 8-bit integers in a and b for greater-than, and store +// the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpgt_epi8 +FORCE_INLINE __m128i _mm_cmpgt_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vcgtq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Compare packed double-precision (64-bit) floating-point elements in a and b +// for greater-than, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpgt_pd +FORCE_INLINE __m128d _mm_cmpgt_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_u64( + vcgtq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + uint64_t d[2]; + d[0] = a0 > b0 ? ~UINT64_C(0) : UINT64_C(0); + d[1] = a1 > b1 ? ~UINT64_C(0) : UINT64_C(0); + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare the lower double-precision (64-bit) floating-point elements in a and +// b for greater-than, store the result in the lower element of dst, and copy +// the upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpgt_sd +FORCE_INLINE __m128d _mm_cmpgt_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return _mm_move_sd(a, _mm_cmpgt_pd(a, b)); +#else + // expand "_mm_cmpge_pd()" to reduce unnecessary operations + double a0, b0; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + uint64_t a1 = vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1); + b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + uint64_t d[2]; + d[0] = a0 > b0 ? ~UINT64_C(0) : UINT64_C(0); + d[1] = a1; + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare packed double-precision (64-bit) floating-point elements in a and b +// for less-than-or-equal, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmple_pd +FORCE_INLINE __m128d _mm_cmple_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_u64( + vcleq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + uint64_t d[2]; + d[0] = a0 <= b0 ? ~UINT64_C(0) : UINT64_C(0); + d[1] = a1 <= b1 ? ~UINT64_C(0) : UINT64_C(0); + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare the lower double-precision (64-bit) floating-point elements in a and +// b for less-than-or-equal, store the result in the lower element of dst, and +// copy the upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmple_sd +FORCE_INLINE __m128d _mm_cmple_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return _mm_move_sd(a, _mm_cmple_pd(a, b)); +#else + // expand "_mm_cmpge_pd()" to reduce unnecessary operations + double a0, b0; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + uint64_t a1 = vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1); + b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + uint64_t d[2]; + d[0] = a0 <= b0 ? ~UINT64_C(0) : UINT64_C(0); + d[1] = a1; + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare packed signed 16-bit integers in a and b for less-than, and store the +// results in dst. Note: This intrinsic emits the pcmpgtw instruction with the +// order of the operands switched. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmplt_epi16 +FORCE_INLINE __m128i _mm_cmplt_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vcltq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Compare packed signed 32-bit integers in a and b for less-than, and store the +// results in dst. Note: This intrinsic emits the pcmpgtd instruction with the +// order of the operands switched. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmplt_epi32 +FORCE_INLINE __m128i _mm_cmplt_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u32( + vcltq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Compare packed signed 8-bit integers in a and b for less-than, and store the +// results in dst. Note: This intrinsic emits the pcmpgtb instruction with the +// order of the operands switched. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmplt_epi8 +FORCE_INLINE __m128i _mm_cmplt_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vcltq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Compare packed double-precision (64-bit) floating-point elements in a and b +// for less-than, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmplt_pd +FORCE_INLINE __m128d _mm_cmplt_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_u64( + vcltq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + uint64_t d[2]; + d[0] = a0 < b0 ? ~UINT64_C(0) : UINT64_C(0); + d[1] = a1 < b1 ? ~UINT64_C(0) : UINT64_C(0); + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare the lower double-precision (64-bit) floating-point elements in a and +// b for less-than, store the result in the lower element of dst, and copy the +// upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmplt_sd +FORCE_INLINE __m128d _mm_cmplt_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return _mm_move_sd(a, _mm_cmplt_pd(a, b)); +#else + double a0, b0; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + uint64_t a1 = vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1); + b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + uint64_t d[2]; + d[0] = a0 < b0 ? ~UINT64_C(0) : UINT64_C(0); + d[1] = a1; + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare packed double-precision (64-bit) floating-point elements in a and b +// for not-equal, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpneq_pd +FORCE_INLINE __m128d _mm_cmpneq_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_s32(vmvnq_s32(vreinterpretq_s32_u64( + vceqq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))))); +#else + // (a == b) -> (a_lo == b_lo) && (a_hi == b_hi) + uint32x4_t cmp = + vceqq_u32(vreinterpretq_u32_m128d(a), vreinterpretq_u32_m128d(b)); + uint32x4_t swapped = vrev64q_u32(cmp); + return vreinterpretq_m128d_u32(vmvnq_u32(vandq_u32(cmp, swapped))); +#endif +} + +// Compare the lower double-precision (64-bit) floating-point elements in a and +// b for not-equal, store the result in the lower element of dst, and copy the +// upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpneq_sd +FORCE_INLINE __m128d _mm_cmpneq_sd(__m128d a, __m128d b) +{ + return _mm_move_sd(a, _mm_cmpneq_pd(a, b)); +} + +// Compare packed double-precision (64-bit) floating-point elements in a and b +// for not-greater-than-or-equal, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnge_pd +FORCE_INLINE __m128d _mm_cmpnge_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_u64(veorq_u64( + vcgeq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b)), + vdupq_n_u64(UINT64_MAX))); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + uint64_t d[2]; + d[0] = !(a0 >= b0) ? ~UINT64_C(0) : UINT64_C(0); + d[1] = !(a1 >= b1) ? ~UINT64_C(0) : UINT64_C(0); + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare the lower double-precision (64-bit) floating-point elements in a and +// b for not-greater-than-or-equal, store the result in the lower element of +// dst, and copy the upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnge_sd +FORCE_INLINE __m128d _mm_cmpnge_sd(__m128d a, __m128d b) +{ + return _mm_move_sd(a, _mm_cmpnge_pd(a, b)); +} + +// Compare packed double-precision (64-bit) floating-point elements in a and b +// for not-greater-than, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_cmpngt_pd +FORCE_INLINE __m128d _mm_cmpngt_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_u64(veorq_u64( + vcgtq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b)), + vdupq_n_u64(UINT64_MAX))); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + uint64_t d[2]; + d[0] = !(a0 > b0) ? ~UINT64_C(0) : UINT64_C(0); + d[1] = !(a1 > b1) ? ~UINT64_C(0) : UINT64_C(0); + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare the lower double-precision (64-bit) floating-point elements in a and +// b for not-greater-than, store the result in the lower element of dst, and +// copy the upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpngt_sd +FORCE_INLINE __m128d _mm_cmpngt_sd(__m128d a, __m128d b) +{ + return _mm_move_sd(a, _mm_cmpngt_pd(a, b)); +} + +// Compare packed double-precision (64-bit) floating-point elements in a and b +// for not-less-than-or-equal, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnle_pd +FORCE_INLINE __m128d _mm_cmpnle_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_u64(veorq_u64( + vcleq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b)), + vdupq_n_u64(UINT64_MAX))); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + uint64_t d[2]; + d[0] = !(a0 <= b0) ? ~UINT64_C(0) : UINT64_C(0); + d[1] = !(a1 <= b1) ? ~UINT64_C(0) : UINT64_C(0); + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare the lower double-precision (64-bit) floating-point elements in a and +// b for not-less-than-or-equal, store the result in the lower element of dst, +// and copy the upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnle_sd +FORCE_INLINE __m128d _mm_cmpnle_sd(__m128d a, __m128d b) +{ + return _mm_move_sd(a, _mm_cmpnle_pd(a, b)); +} + +// Compare packed double-precision (64-bit) floating-point elements in a and b +// for not-less-than, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnlt_pd +FORCE_INLINE __m128d _mm_cmpnlt_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_u64(veorq_u64( + vcltq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b)), + vdupq_n_u64(UINT64_MAX))); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + uint64_t d[2]; + d[0] = !(a0 < b0) ? ~UINT64_C(0) : UINT64_C(0); + d[1] = !(a1 < b1) ? ~UINT64_C(0) : UINT64_C(0); + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare the lower double-precision (64-bit) floating-point elements in a and +// b for not-less-than, store the result in the lower element of dst, and copy +// the upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpnlt_sd +FORCE_INLINE __m128d _mm_cmpnlt_sd(__m128d a, __m128d b) +{ + return _mm_move_sd(a, _mm_cmpnlt_pd(a, b)); +} + +// Compare packed double-precision (64-bit) floating-point elements in a and b +// to see if neither is NaN, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpord_pd +FORCE_INLINE __m128d _mm_cmpord_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + // Excluding NaNs, any two floating point numbers can be compared. + uint64x2_t not_nan_a = + vceqq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(a)); + uint64x2_t not_nan_b = + vceqq_f64(vreinterpretq_f64_m128d(b), vreinterpretq_f64_m128d(b)); + return vreinterpretq_m128d_u64(vandq_u64(not_nan_a, not_nan_b)); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + uint64_t d[2]; + d[0] = (a0 == a0 && b0 == b0) ? ~UINT64_C(0) : UINT64_C(0); + d[1] = (a1 == a1 && b1 == b1) ? ~UINT64_C(0) : UINT64_C(0); + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare the lower double-precision (64-bit) floating-point elements in a and +// b to see if neither is NaN, store the result in the lower element of dst, and +// copy the upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpord_sd +FORCE_INLINE __m128d _mm_cmpord_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return _mm_move_sd(a, _mm_cmpord_pd(a, b)); +#else + double a0, b0; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + uint64_t a1 = vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1); + b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + uint64_t d[2]; + d[0] = (a0 == a0 && b0 == b0) ? ~UINT64_C(0) : UINT64_C(0); + d[1] = a1; + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare packed double-precision (64-bit) floating-point elements in a and b +// to see if either is NaN, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpunord_pd +FORCE_INLINE __m128d _mm_cmpunord_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + // Two NaNs are not equal in comparison operation. + uint64x2_t not_nan_a = + vceqq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(a)); + uint64x2_t not_nan_b = + vceqq_f64(vreinterpretq_f64_m128d(b), vreinterpretq_f64_m128d(b)); + return vreinterpretq_m128d_s32( + vmvnq_s32(vreinterpretq_s32_u64(vandq_u64(not_nan_a, not_nan_b)))); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + uint64_t d[2]; + d[0] = (a0 == a0 && b0 == b0) ? UINT64_C(0) : ~UINT64_C(0); + d[1] = (a1 == a1 && b1 == b1) ? UINT64_C(0) : ~UINT64_C(0); + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare the lower double-precision (64-bit) floating-point elements in a and +// b to see if either is NaN, store the result in the lower element of dst, and +// copy the upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpunord_sd +FORCE_INLINE __m128d _mm_cmpunord_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return _mm_move_sd(a, _mm_cmpunord_pd(a, b)); +#else + double a0, b0; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + uint64_t a1 = vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1); + b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + uint64_t d[2]; + d[0] = (a0 == a0 && b0 == b0) ? UINT64_C(0) : ~UINT64_C(0); + d[1] = a1; + + return vreinterpretq_m128d_u64(vld1q_u64(d)); +#endif +} + +// Compare the lower double-precision (64-bit) floating-point element in a and b +// for greater-than-or-equal, and return the boolean result (0 or 1). +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comige_sd +FORCE_INLINE int _mm_comige_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vgetq_lane_u64(vcgeq_f64(a, b), 0) & 0x1; +#else + double a0, b0; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + return a0 >= b0; +#endif +} + +// Compare the lower double-precision (64-bit) floating-point element in a and b +// for greater-than, and return the boolean result (0 or 1). +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comigt_sd +FORCE_INLINE int _mm_comigt_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vgetq_lane_u64(vcgtq_f64(a, b), 0) & 0x1; +#else + double a0, b0; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + + return a0 > b0; +#endif +} + +// Compare the lower double-precision (64-bit) floating-point element in a and b +// for less-than-or-equal, and return the boolean result (0 or 1). +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comile_sd +FORCE_INLINE int _mm_comile_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vgetq_lane_u64(vcleq_f64(a, b), 0) & 0x1; +#else + double a0, b0; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + + return a0 <= b0; +#endif +} + +// Compare the lower double-precision (64-bit) floating-point element in a and b +// for less-than, and return the boolean result (0 or 1). +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comilt_sd +FORCE_INLINE int _mm_comilt_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vgetq_lane_u64(vcltq_f64(a, b), 0) & 0x1; +#else + double a0, b0; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + + return a0 < b0; +#endif +} + +// Compare the lower double-precision (64-bit) floating-point element in a and b +// for equality, and return the boolean result (0 or 1). +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comieq_sd +FORCE_INLINE int _mm_comieq_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vgetq_lane_u64(vceqq_f64(a, b), 0) & 0x1; +#else + uint32x4_t a_not_nan = + vceqq_u32(vreinterpretq_u32_m128d(a), vreinterpretq_u32_m128d(a)); + uint32x4_t b_not_nan = + vceqq_u32(vreinterpretq_u32_m128d(b), vreinterpretq_u32_m128d(b)); + uint32x4_t a_and_b_not_nan = vandq_u32(a_not_nan, b_not_nan); + uint32x4_t a_eq_b = + vceqq_u32(vreinterpretq_u32_m128d(a), vreinterpretq_u32_m128d(b)); + uint64x2_t and_results = vandq_u64(vreinterpretq_u64_u32(a_and_b_not_nan), + vreinterpretq_u64_u32(a_eq_b)); + return vgetq_lane_u64(and_results, 0) & 0x1; +#endif +} + +// Compare the lower double-precision (64-bit) floating-point element in a and b +// for not-equal, and return the boolean result (0 or 1). +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_comineq_sd +FORCE_INLINE int _mm_comineq_sd(__m128d a, __m128d b) +{ + return !_mm_comieq_sd(a, b); +} + +// Convert packed signed 32-bit integers in a to packed double-precision +// (64-bit) floating-point elements, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi32_pd +FORCE_INLINE __m128d _mm_cvtepi32_pd(__m128i a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_f64( + vcvtq_f64_s64(vmovl_s32(vget_low_s32(vreinterpretq_s32_m128i(a))))); +#else + double a0 = (double) vgetq_lane_s32(vreinterpretq_s32_m128i(a), 0); + double a1 = (double) vgetq_lane_s32(vreinterpretq_s32_m128i(a), 1); + return _mm_set_pd(a1, a0); +#endif +} + +// Convert packed signed 32-bit integers in a to packed single-precision +// (32-bit) floating-point elements, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi32_ps +FORCE_INLINE __m128 _mm_cvtepi32_ps(__m128i a) +{ + return vreinterpretq_m128_f32(vcvtq_f32_s32(vreinterpretq_s32_m128i(a))); +} + +// Convert packed double-precision (64-bit) floating-point elements in a to +// packed 32-bit integers, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpd_epi32 +FORCE_INLINE __m128i _mm_cvtpd_epi32(__m128d a) +{ +// vrnd32xq_f64 not supported on clang +#if defined(__ARM_FEATURE_FRINT) && !defined(__clang__) + float64x2_t rounded = vrnd32xq_f64(vreinterpretq_f64_m128d(a)); + int64x2_t integers = vcvtq_s64_f64(rounded); + return vreinterpretq_m128i_s32( + vcombine_s32(vmovn_s64(integers), vdup_n_s32(0))); +#else + __m128d rnd = _mm_round_pd(a, _MM_FROUND_CUR_DIRECTION); + double d0, d1; + d0 = sse2neon_recast_u64_f64( + vgetq_lane_u64(vreinterpretq_u64_m128d(rnd), 0)); + d1 = sse2neon_recast_u64_f64( + vgetq_lane_u64(vreinterpretq_u64_m128d(rnd), 1)); + return _mm_set_epi32(0, 0, (int32_t) d1, (int32_t) d0); +#endif +} + +// Convert packed double-precision (64-bit) floating-point elements in a to +// packed 32-bit integers, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpd_pi32 +FORCE_INLINE __m64 _mm_cvtpd_pi32(__m128d a) +{ + __m128d rnd = _mm_round_pd(a, _MM_FROUND_CUR_DIRECTION); + double d0, d1; + d0 = sse2neon_recast_u64_f64( + vgetq_lane_u64(vreinterpretq_u64_m128d(rnd), 0)); + d1 = sse2neon_recast_u64_f64( + vgetq_lane_u64(vreinterpretq_u64_m128d(rnd), 1)); + int32_t ALIGN_STRUCT(16) data[2] = {(int32_t) d0, (int32_t) d1}; + return vreinterpret_m64_s32(vld1_s32(data)); +} + +// Convert packed double-precision (64-bit) floating-point elements in a to +// packed single-precision (32-bit) floating-point elements, and store the +// results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpd_ps +FORCE_INLINE __m128 _mm_cvtpd_ps(__m128d a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + float32x2_t tmp = vcvt_f32_f64(vreinterpretq_f64_m128d(a)); + return vreinterpretq_m128_f32(vcombine_f32(tmp, vdup_n_f32(0))); +#else + double a0, a1; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + a1 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + return _mm_set_ps(0, 0, (float) a1, (float) a0); +#endif +} + +// Convert packed signed 32-bit integers in a to packed double-precision +// (64-bit) floating-point elements, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtpi32_pd +FORCE_INLINE __m128d _mm_cvtpi32_pd(__m64 a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_f64( + vcvtq_f64_s64(vmovl_s32(vreinterpret_s32_m64(a)))); +#else + double a0 = (double) vget_lane_s32(vreinterpret_s32_m64(a), 0); + double a1 = (double) vget_lane_s32(vreinterpret_s32_m64(a), 1); + return _mm_set_pd(a1, a0); +#endif +} + +// Convert packed single-precision (32-bit) floating-point elements in a to +// packed 32-bit integers, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtps_epi32 +// *NOTE*. The default rounding mode on SSE is 'round to even', which ARMv7-A +// does not support! It is supported on ARMv8-A however. +FORCE_INLINE __m128i _mm_cvtps_epi32(__m128 a) +{ +#if defined(__ARM_FEATURE_FRINT) + return vreinterpretq_m128i_s32(vcvtq_s32_f32(vrnd32xq_f32(a))); +#elif (defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC)) || \ + defined(__ARM_FEATURE_DIRECTED_ROUNDING) + switch (_MM_GET_ROUNDING_MODE()) { + case _MM_ROUND_NEAREST: + return vreinterpretq_m128i_s32(vcvtnq_s32_f32(a)); + case _MM_ROUND_DOWN: + return vreinterpretq_m128i_s32(vcvtmq_s32_f32(a)); + case _MM_ROUND_UP: + return vreinterpretq_m128i_s32(vcvtpq_s32_f32(a)); + default: // _MM_ROUND_TOWARD_ZERO + return vreinterpretq_m128i_s32(vcvtq_s32_f32(a)); + } +#else + float *f = (float *) &a; + switch (_MM_GET_ROUNDING_MODE()) { + case _MM_ROUND_NEAREST: { + uint32x4_t signmask = vdupq_n_u32(0x80000000); + float32x4_t half = vbslq_f32(signmask, vreinterpretq_f32_m128(a), + vdupq_n_f32(0.5f)); /* +/- 0.5 */ + int32x4_t r_normal = vcvtq_s32_f32(vaddq_f32( + vreinterpretq_f32_m128(a), half)); /* round to integer: [a + 0.5]*/ + int32x4_t r_trunc = vcvtq_s32_f32( + vreinterpretq_f32_m128(a)); /* truncate to integer: [a] */ + int32x4_t plusone = vreinterpretq_s32_u32(vshrq_n_u32( + vreinterpretq_u32_s32(vnegq_s32(r_trunc)), 31)); /* 1 or 0 */ + int32x4_t r_even = vbicq_s32(vaddq_s32(r_trunc, plusone), + vdupq_n_s32(1)); /* ([a] + {0,1}) & ~1 */ + float32x4_t delta = vsubq_f32( + vreinterpretq_f32_m128(a), + vcvtq_f32_s32(r_trunc)); /* compute delta: delta = (a - [a]) */ + uint32x4_t is_delta_half = + vceqq_f32(delta, half); /* delta == +/- 0.5 */ + return vreinterpretq_m128i_s32( + vbslq_s32(is_delta_half, r_even, r_normal)); + } + case _MM_ROUND_DOWN: + return _mm_set_epi32(floorf(f[3]), floorf(f[2]), floorf(f[1]), + floorf(f[0])); + case _MM_ROUND_UP: + return _mm_set_epi32(ceilf(f[3]), ceilf(f[2]), ceilf(f[1]), + ceilf(f[0])); + default: // _MM_ROUND_TOWARD_ZERO + return _mm_set_epi32((int32_t) f[3], (int32_t) f[2], (int32_t) f[1], + (int32_t) f[0]); + } +#endif +} + +// Convert packed single-precision (32-bit) floating-point elements in a to +// packed double-precision (64-bit) floating-point elements, and store the +// results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtps_pd +FORCE_INLINE __m128d _mm_cvtps_pd(__m128 a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_f64( + vcvt_f64_f32(vget_low_f32(vreinterpretq_f32_m128(a)))); +#else + double a0 = (double) vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); + double a1 = (double) vgetq_lane_f32(vreinterpretq_f32_m128(a), 1); + return _mm_set_pd(a1, a0); +#endif +} + +// Copy the lower double-precision (64-bit) floating-point element of a to dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsd_f64 +FORCE_INLINE double _mm_cvtsd_f64(__m128d a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return (double) vgetq_lane_f64(vreinterpretq_f64_m128d(a), 0); +#else + double _a = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + return _a; +#endif +} + +// Convert the lower double-precision (64-bit) floating-point element in a to a +// 32-bit integer, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsd_si32 +FORCE_INLINE int32_t _mm_cvtsd_si32(__m128d a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return (int32_t) vgetq_lane_f64(vrndiq_f64(vreinterpretq_f64_m128d(a)), 0); +#else + __m128d rnd = _mm_round_pd(a, _MM_FROUND_CUR_DIRECTION); + double ret = sse2neon_recast_u64_f64( + vgetq_lane_u64(vreinterpretq_u64_m128d(rnd), 0)); + return (int32_t) ret; +#endif +} + +// Convert the lower double-precision (64-bit) floating-point element in a to a +// 64-bit integer, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsd_si64 +FORCE_INLINE int64_t _mm_cvtsd_si64(__m128d a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return (int64_t) vgetq_lane_f64(vrndiq_f64(vreinterpretq_f64_m128d(a)), 0); +#else + __m128d rnd = _mm_round_pd(a, _MM_FROUND_CUR_DIRECTION); + double ret = sse2neon_recast_u64_f64( + vgetq_lane_u64(vreinterpretq_u64_m128d(rnd), 0)); + return (int64_t) ret; +#endif +} + +// Convert the lower double-precision (64-bit) floating-point element in a to a +// 64-bit integer, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsd_si64x +#define _mm_cvtsd_si64x _mm_cvtsd_si64 + +// Convert the lower double-precision (64-bit) floating-point element in b to a +// single-precision (32-bit) floating-point element, store the result in the +// lower element of dst, and copy the upper 3 packed elements from a to the +// upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsd_ss +FORCE_INLINE __m128 _mm_cvtsd_ss(__m128 a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128_f32(vsetq_lane_f32( + vget_lane_f32(vcvt_f32_f64(vreinterpretq_f64_m128d(b)), 0), + vreinterpretq_f32_m128(a), 0)); +#else + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + return vreinterpretq_m128_f32( + vsetq_lane_f32((float) b0, vreinterpretq_f32_m128(a), 0)); +#endif +} + +// Copy the lower 32-bit integer in a to dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi128_si32 +FORCE_INLINE int _mm_cvtsi128_si32(__m128i a) +{ + return vgetq_lane_s32(vreinterpretq_s32_m128i(a), 0); +} + +// Copy the lower 64-bit integer in a to dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi128_si64 +FORCE_INLINE int64_t _mm_cvtsi128_si64(__m128i a) +{ + return vgetq_lane_s64(vreinterpretq_s64_m128i(a), 0); +} + +// Copy the lower 64-bit integer in a to dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi128_si64x +#define _mm_cvtsi128_si64x(a) _mm_cvtsi128_si64(a) + +// Convert the signed 32-bit integer b to a double-precision (64-bit) +// floating-point element, store the result in the lower element of dst, and +// copy the upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi32_sd +FORCE_INLINE __m128d _mm_cvtsi32_sd(__m128d a, int32_t b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_f64( + vsetq_lane_f64((double) b, vreinterpretq_f64_m128d(a), 0)); +#else + int64_t _b = sse2neon_recast_f64_s64((double) b); + return vreinterpretq_m128d_s64( + vsetq_lane_s64(_b, vreinterpretq_s64_m128d(a), 0)); +#endif +} + +// Copy the lower 64-bit integer in a to dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi128_si64x +#define _mm_cvtsi128_si64x(a) _mm_cvtsi128_si64(a) + +// Copy 32-bit integer a to the lower elements of dst, and zero the upper +// elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi32_si128 +FORCE_INLINE __m128i _mm_cvtsi32_si128(int a) +{ + return vreinterpretq_m128i_s32(vsetq_lane_s32(a, vdupq_n_s32(0), 0)); +} + +// Convert the signed 64-bit integer b to a double-precision (64-bit) +// floating-point element, store the result in the lower element of dst, and +// copy the upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi64_sd +FORCE_INLINE __m128d _mm_cvtsi64_sd(__m128d a, int64_t b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_f64( + vsetq_lane_f64((double) b, vreinterpretq_f64_m128d(a), 0)); +#else + int64_t _b = sse2neon_recast_f64_s64((double) b); + return vreinterpretq_m128d_s64( + vsetq_lane_s64(_b, vreinterpretq_s64_m128d(a), 0)); +#endif +} + +// Copy 64-bit integer a to the lower element of dst, and zero the upper +// element. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi64_si128 +FORCE_INLINE __m128i _mm_cvtsi64_si128(int64_t a) +{ + return vreinterpretq_m128i_s64(vsetq_lane_s64(a, vdupq_n_s64(0), 0)); +} + +// Copy 64-bit integer a to the lower element of dst, and zero the upper +// element. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi64x_si128 +#define _mm_cvtsi64x_si128(a) _mm_cvtsi64_si128(a) + +// Convert the signed 64-bit integer b to a double-precision (64-bit) +// floating-point element, store the result in the lower element of dst, and +// copy the upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi64x_sd +#define _mm_cvtsi64x_sd(a, b) _mm_cvtsi64_sd(a, b) + +// Convert the lower single-precision (32-bit) floating-point element in b to a +// double-precision (64-bit) floating-point element, store the result in the +// lower element of dst, and copy the upper element from a to the upper element +// of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtss_sd +FORCE_INLINE __m128d _mm_cvtss_sd(__m128d a, __m128 b) +{ + double d = (double) vgetq_lane_f32(vreinterpretq_f32_m128(b), 0); +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_f64( + vsetq_lane_f64(d, vreinterpretq_f64_m128d(a), 0)); +#else + return vreinterpretq_m128d_s64(vsetq_lane_s64( + sse2neon_recast_f64_s64(d), vreinterpretq_s64_m128d(a), 0)); +#endif +} + +// Convert packed double-precision (64-bit) floating-point elements in a to +// packed 32-bit integers with truncation, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttpd_epi32 +FORCE_INLINE __m128i _mm_cvttpd_epi32(__m128d a) +{ + double a0, a1; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + a1 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + return _mm_set_epi32(0, 0, (int32_t) a1, (int32_t) a0); +} + +// Convert packed double-precision (64-bit) floating-point elements in a to +// packed 32-bit integers with truncation, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttpd_pi32 +FORCE_INLINE __m64 _mm_cvttpd_pi32(__m128d a) +{ + double a0, a1; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + a1 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + int32_t ALIGN_STRUCT(16) data[2] = {(int32_t) a0, (int32_t) a1}; + return vreinterpret_m64_s32(vld1_s32(data)); +} + +// Convert packed single-precision (32-bit) floating-point elements in a to +// packed 32-bit integers with truncation, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttps_epi32 +FORCE_INLINE __m128i _mm_cvttps_epi32(__m128 a) +{ + return vreinterpretq_m128i_s32(vcvtq_s32_f32(vreinterpretq_f32_m128(a))); +} + +// Convert the lower double-precision (64-bit) floating-point element in a to a +// 32-bit integer with truncation, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttsd_si32 +FORCE_INLINE int32_t _mm_cvttsd_si32(__m128d a) +{ + double _a = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + return (int32_t) _a; +} + +// Convert the lower double-precision (64-bit) floating-point element in a to a +// 64-bit integer with truncation, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttsd_si64 +FORCE_INLINE int64_t _mm_cvttsd_si64(__m128d a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vgetq_lane_s64(vcvtq_s64_f64(vreinterpretq_f64_m128d(a)), 0); +#else + double _a = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + return (int64_t) _a; +#endif +} + +// Convert the lower double-precision (64-bit) floating-point element in a to a +// 64-bit integer with truncation, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvttsd_si64x +#define _mm_cvttsd_si64x(a) _mm_cvttsd_si64(a) + +// Divide packed double-precision (64-bit) floating-point elements in a by +// packed elements in b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_div_pd +FORCE_INLINE __m128d _mm_div_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_f64( + vdivq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + double c[2]; + c[0] = a0 / b0; + c[1] = a1 / b1; + return vld1q_f32((float32_t *) c); +#endif +} + +// Divide the lower double-precision (64-bit) floating-point element in a by the +// lower double-precision (64-bit) floating-point element in b, store the result +// in the lower element of dst, and copy the upper element from a to the upper +// element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_div_sd +FORCE_INLINE __m128d _mm_div_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + float64x2_t tmp = + vdivq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b)); + return vreinterpretq_m128d_f64( + vsetq_lane_f64(vgetq_lane_f64(vreinterpretq_f64_m128d(a), 1), tmp, 1)); +#else + return _mm_move_sd(a, _mm_div_pd(a, b)); +#endif +} + +// Extract a 16-bit integer from a, selected with imm8, and store the result in +// the lower element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_extract_epi16 +// FORCE_INLINE int _mm_extract_epi16(__m128i a, __constrange(0,8) int imm) +#define _mm_extract_epi16(a, imm) \ + vgetq_lane_u16(vreinterpretq_u16_m128i(a), (imm)) + +// Copy a to dst, and insert the 16-bit integer i into dst at the location +// specified by imm8. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_insert_epi16 +// FORCE_INLINE __m128i _mm_insert_epi16(__m128i a, int b, +// __constrange(0,8) int imm) +#define _mm_insert_epi16(a, b, imm) \ + vreinterpretq_m128i_s16( \ + vsetq_lane_s16((b), vreinterpretq_s16_m128i(a), (imm))) + +// Load 128-bits (composed of 2 packed double-precision (64-bit) floating-point +// elements) from memory into dst. mem_addr must be aligned on a 16-byte +// boundary or a general-protection exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load_pd +FORCE_INLINE __m128d _mm_load_pd(const double *p) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_f64(vld1q_f64(p)); +#else + const float *fp = (const float *) p; + float ALIGN_STRUCT(16) data[4] = {fp[0], fp[1], fp[2], fp[3]}; + return vreinterpretq_m128d_f32(vld1q_f32(data)); +#endif +} + +// Load a double-precision (64-bit) floating-point element from memory into both +// elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load_pd1 +#define _mm_load_pd1 _mm_load1_pd + +// Load a double-precision (64-bit) floating-point element from memory into the +// lower of dst, and zero the upper element. mem_addr does not need to be +// aligned on any particular boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load_sd +FORCE_INLINE __m128d _mm_load_sd(const double *p) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_f64(vsetq_lane_f64(*p, vdupq_n_f64(0), 0)); +#else + const float *fp = (const float *) p; + float ALIGN_STRUCT(16) data[4] = {fp[0], fp[1], 0, 0}; + return vreinterpretq_m128d_f32(vld1q_f32(data)); +#endif +} + +// Load 128-bits of integer data from memory into dst. mem_addr must be aligned +// on a 16-byte boundary or a general-protection exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load_si128 +FORCE_INLINE __m128i _mm_load_si128(const __m128i *p) +{ + return vreinterpretq_m128i_s32(vld1q_s32((const int32_t *) p)); +} + +// Load a double-precision (64-bit) floating-point element from memory into both +// elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_load1_pd +FORCE_INLINE __m128d _mm_load1_pd(const double *p) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_f64(vld1q_dup_f64(p)); +#else + return vreinterpretq_m128d_s64(vdupq_n_s64(*(const int64_t *) p)); +#endif +} + +// Load a double-precision (64-bit) floating-point element from memory into the +// upper element of dst, and copy the lower element from a to dst. mem_addr does +// not need to be aligned on any particular boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadh_pd +FORCE_INLINE __m128d _mm_loadh_pd(__m128d a, const double *p) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_f64( + vcombine_f64(vget_low_f64(vreinterpretq_f64_m128d(a)), vld1_f64(p))); +#else + return vreinterpretq_m128d_f32(vcombine_f32( + vget_low_f32(vreinterpretq_f32_m128d(a)), vld1_f32((const float *) p))); +#endif +} + +// Load 64-bit integer from memory into the first element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadl_epi64 +FORCE_INLINE __m128i _mm_loadl_epi64(__m128i const *p) +{ + /* Load the lower 64 bits of the value pointed to by p into the + * lower 64 bits of the result, zeroing the upper 64 bits of the result. + */ + return vreinterpretq_m128i_s32( + vcombine_s32(vld1_s32((int32_t const *) p), vcreate_s32(0))); +} + +// Load a double-precision (64-bit) floating-point element from memory into the +// lower element of dst, and copy the upper element from a to dst. mem_addr does +// not need to be aligned on any particular boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadl_pd +FORCE_INLINE __m128d _mm_loadl_pd(__m128d a, const double *p) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_f64( + vcombine_f64(vld1_f64(p), vget_high_f64(vreinterpretq_f64_m128d(a)))); +#else + return vreinterpretq_m128d_f32( + vcombine_f32(vld1_f32((const float *) p), + vget_high_f32(vreinterpretq_f32_m128d(a)))); +#endif +} + +// Load 2 double-precision (64-bit) floating-point elements from memory into dst +// in reverse order. mem_addr must be aligned on a 16-byte boundary or a +// general-protection exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadr_pd +FORCE_INLINE __m128d _mm_loadr_pd(const double *p) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + float64x2_t v = vld1q_f64(p); + return vreinterpretq_m128d_f64(vextq_f64(v, v, 1)); +#else + int64x2_t v = vld1q_s64((const int64_t *) p); + return vreinterpretq_m128d_s64(vextq_s64(v, v, 1)); +#endif +} + +// Loads two double-precision from unaligned memory, floating-point values. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadu_pd +FORCE_INLINE __m128d _mm_loadu_pd(const double *p) +{ + return _mm_load_pd(p); +} + +// Load 128-bits of integer data from memory into dst. mem_addr does not need to +// be aligned on any particular boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadu_si128 +FORCE_INLINE __m128i _mm_loadu_si128(const __m128i *p) +{ + return vreinterpretq_m128i_s32(vld1q_s32((const unaligned_int32_t *) p)); +} + +// Load unaligned 32-bit integer from memory into the first element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadu_si32 +FORCE_INLINE __m128i _mm_loadu_si32(const void *p) +{ + return vreinterpretq_m128i_s32( + vsetq_lane_s32(*(const unaligned_int32_t *) p, vdupq_n_s32(0), 0)); +} + +// Multiply packed signed 16-bit integers in a and b, producing intermediate +// signed 32-bit integers. Horizontally add adjacent pairs of intermediate +// 32-bit integers, and pack the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_madd_epi16 +FORCE_INLINE __m128i _mm_madd_epi16(__m128i a, __m128i b) +{ + int32x4_t low = vmull_s16(vget_low_s16(vreinterpretq_s16_m128i(a)), + vget_low_s16(vreinterpretq_s16_m128i(b))); +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + int32x4_t high = + vmull_high_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b)); + + return vreinterpretq_m128i_s32(vpaddq_s32(low, high)); +#else + int32x4_t high = vmull_s16(vget_high_s16(vreinterpretq_s16_m128i(a)), + vget_high_s16(vreinterpretq_s16_m128i(b))); + + int32x2_t low_sum = vpadd_s32(vget_low_s32(low), vget_high_s32(low)); + int32x2_t high_sum = vpadd_s32(vget_low_s32(high), vget_high_s32(high)); + + return vreinterpretq_m128i_s32(vcombine_s32(low_sum, high_sum)); +#endif +} + +// Conditionally store 8-bit integer elements from a into memory using mask +// (elements are not stored when the highest bit is not set in the corresponding +// element) and a non-temporal memory hint. mem_addr does not need to be aligned +// on any particular boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskmoveu_si128 +FORCE_INLINE void _mm_maskmoveu_si128(__m128i a, __m128i mask, char *mem_addr) +{ + int8x16_t shr_mask = vshrq_n_s8(vreinterpretq_s8_m128i(mask), 7); + __m128 b = _mm_load_ps((const float *) mem_addr); + int8x16_t masked = + vbslq_s8(vreinterpretq_u8_s8(shr_mask), vreinterpretq_s8_m128i(a), + vreinterpretq_s8_m128(b)); + vst1q_s8((int8_t *) mem_addr, masked); +} + +// Compare packed signed 16-bit integers in a and b, and store packed maximum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_epi16 +FORCE_INLINE __m128i _mm_max_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vmaxq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Compare packed unsigned 8-bit integers in a and b, and store packed maximum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_epu8 +FORCE_INLINE __m128i _mm_max_epu8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vmaxq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b))); +} + +// Compare packed double-precision (64-bit) floating-point elements in a and b, +// and store packed maximum values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_pd +FORCE_INLINE __m128d _mm_max_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) +#if SSE2NEON_PRECISE_MINMAX + float64x2_t _a = vreinterpretq_f64_m128d(a); + float64x2_t _b = vreinterpretq_f64_m128d(b); + return vreinterpretq_m128d_f64(vbslq_f64(vcgtq_f64(_a, _b), _a, _b)); +#else + return vreinterpretq_m128d_f64( + vmaxq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#endif +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + int64_t d[2]; + d[0] = a0 > b0 ? sse2neon_recast_f64_s64(a0) : sse2neon_recast_f64_s64(b0); + d[1] = a1 > b1 ? sse2neon_recast_f64_s64(a1) : sse2neon_recast_f64_s64(b1); + + return vreinterpretq_m128d_s64(vld1q_s64(d)); +#endif +} + +// Compare the lower double-precision (64-bit) floating-point elements in a and +// b, store the maximum value in the lower element of dst, and copy the upper +// element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_sd +FORCE_INLINE __m128d _mm_max_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return _mm_move_sd(a, _mm_max_pd(a, b)); +#else + double a0, a1, b0; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + a1 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double c[2] = {a0 > b0 ? a0 : b0, a1}; + return vreinterpretq_m128d_f32(vld1q_f32((float32_t *) c)); +#endif +} + +// Compare packed signed 16-bit integers in a and b, and store packed minimum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_epi16 +FORCE_INLINE __m128i _mm_min_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vminq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Compare packed unsigned 8-bit integers in a and b, and store packed minimum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_epu8 +FORCE_INLINE __m128i _mm_min_epu8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vminq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b))); +} + +// Compare packed double-precision (64-bit) floating-point elements in a and b, +// and store packed minimum values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_pd +FORCE_INLINE __m128d _mm_min_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) +#if SSE2NEON_PRECISE_MINMAX + float64x2_t _a = vreinterpretq_f64_m128d(a); + float64x2_t _b = vreinterpretq_f64_m128d(b); + return vreinterpretq_m128d_f64(vbslq_f64(vcltq_f64(_a, _b), _a, _b)); +#else + return vreinterpretq_m128d_f64( + vminq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#endif +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + int64_t d[2]; + d[0] = a0 < b0 ? sse2neon_recast_f64_s64(a0) : sse2neon_recast_f64_s64(b0); + d[1] = a1 < b1 ? sse2neon_recast_f64_s64(a1) : sse2neon_recast_f64_s64(b1); + return vreinterpretq_m128d_s64(vld1q_s64(d)); +#endif +} + +// Compare the lower double-precision (64-bit) floating-point elements in a and +// b, store the minimum value in the lower element of dst, and copy the upper +// element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_sd +FORCE_INLINE __m128d _mm_min_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return _mm_move_sd(a, _mm_min_pd(a, b)); +#else + double a0, a1, b0; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + a1 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + b0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double c[2] = {a0 < b0 ? a0 : b0, a1}; + return vreinterpretq_m128d_f32(vld1q_f32((float32_t *) c)); +#endif +} + +// Copy the lower 64-bit integer in a to the lower element of dst, and zero the +// upper element. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_move_epi64 +FORCE_INLINE __m128i _mm_move_epi64(__m128i a) +{ + return vreinterpretq_m128i_s64( + vsetq_lane_s64(0, vreinterpretq_s64_m128i(a), 1)); +} + +// Move the lower double-precision (64-bit) floating-point element from b to the +// lower element of dst, and copy the upper element from a to the upper element +// of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_move_sd +FORCE_INLINE __m128d _mm_move_sd(__m128d a, __m128d b) +{ + return vreinterpretq_m128d_f32( + vcombine_f32(vget_low_f32(vreinterpretq_f32_m128d(b)), + vget_high_f32(vreinterpretq_f32_m128d(a)))); +} + +// Create mask from the most significant bit of each 8-bit element in a, and +// store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movemask_epi8 +FORCE_INLINE int _mm_movemask_epi8(__m128i a) +{ + // Use increasingly wide shifts+adds to collect the sign bits + // together. + // Since the widening shifts would be rather confusing to follow in little + // endian, everything will be illustrated in big endian order instead. This + // has a different result - the bits would actually be reversed on a big + // endian machine. + + // Starting input (only half the elements are shown): + // 89 ff 1d c0 00 10 99 33 + uint8x16_t input = vreinterpretq_u8_m128i(a); + + // Shift out everything but the sign bits with an unsigned shift right. + // + // Bytes of the vector:: + // 89 ff 1d c0 00 10 99 33 + // \ \ \ \ \ \ \ \ high_bits = (uint16x4_t)(input >> 7) + // | | | | | | | | + // 01 01 00 01 00 00 01 00 + // + // Bits of first important lane(s): + // 10001001 (89) + // \______ + // | + // 00000001 (01) + uint16x8_t high_bits = vreinterpretq_u16_u8(vshrq_n_u8(input, 7)); + + // Merge the even lanes together with a 16-bit unsigned shift right + add. + // 'xx' represents garbage data which will be ignored in the final result. + // In the important bytes, the add functions like a binary OR. + // + // 01 01 00 01 00 00 01 00 + // \_ | \_ | \_ | \_ | paired16 = (uint32x4_t)(input + (input >> 7)) + // \| \| \| \| + // xx 03 xx 01 xx 00 xx 02 + // + // 00000001 00000001 (01 01) + // \_______ | + // \| + // xxxxxxxx xxxxxx11 (xx 03) + uint32x4_t paired16 = + vreinterpretq_u32_u16(vsraq_n_u16(high_bits, high_bits, 7)); + + // Repeat with a wider 32-bit shift + add. + // xx 03 xx 01 xx 00 xx 02 + // \____ | \____ | paired32 = (uint64x1_t)(paired16 + (paired16 >> + // 14)) + // \| \| + // xx xx xx 0d xx xx xx 02 + // + // 00000011 00000001 (03 01) + // \\_____ || + // '----.\|| + // xxxxxxxx xxxx1101 (xx 0d) + uint64x2_t paired32 = + vreinterpretq_u64_u32(vsraq_n_u32(paired16, paired16, 14)); + + // Last, an even wider 64-bit shift + add to get our result in the low 8 bit + // lanes. xx xx xx 0d xx xx xx 02 + // \_________ | paired64 = (uint8x8_t)(paired32 + (paired32 >> + // 28)) + // \| + // xx xx xx xx xx xx xx d2 + // + // 00001101 00000010 (0d 02) + // \ \___ | | + // '---. \| | + // xxxxxxxx 11010010 (xx d2) + uint8x16_t paired64 = + vreinterpretq_u8_u64(vsraq_n_u64(paired32, paired32, 28)); + + // Extract the low 8 bits from each 64-bit lane with 2 8-bit extracts. + // xx xx xx xx xx xx xx d2 + // || return paired64[0] + // d2 + // Note: Little endian would return the correct value 4b (01001011) instead. + return vgetq_lane_u8(paired64, 0) | ((int) vgetq_lane_u8(paired64, 8) << 8); +} + +// Set each bit of mask dst based on the most significant bit of the +// corresponding packed double-precision (64-bit) floating-point element in a. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movemask_pd +FORCE_INLINE int _mm_movemask_pd(__m128d a) +{ + uint64x2_t input = vreinterpretq_u64_m128d(a); + uint64x2_t high_bits = vshrq_n_u64(input, 63); + return (int) (vgetq_lane_u64(high_bits, 0) | + (vgetq_lane_u64(high_bits, 1) << 1)); +} + +// Copy the lower 64-bit integer in a to dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movepi64_pi64 +FORCE_INLINE __m64 _mm_movepi64_pi64(__m128i a) +{ + return vreinterpret_m64_s64(vget_low_s64(vreinterpretq_s64_m128i(a))); +} + +// Copy the 64-bit integer a to the lower element of dst, and zero the upper +// element. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movpi64_epi64 +FORCE_INLINE __m128i _mm_movpi64_epi64(__m64 a) +{ + return vreinterpretq_m128i_s64( + vcombine_s64(vreinterpret_s64_m64(a), vdup_n_s64(0))); +} + +// Multiply the low unsigned 32-bit integers from each packed 64-bit element in +// a and b, and store the unsigned 64-bit results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mul_epu32 +FORCE_INLINE __m128i _mm_mul_epu32(__m128i a, __m128i b) +{ + // vmull_u32 upcasts instead of masking, so we downcast. + uint32x2_t a_lo = vmovn_u64(vreinterpretq_u64_m128i(a)); + uint32x2_t b_lo = vmovn_u64(vreinterpretq_u64_m128i(b)); + return vreinterpretq_m128i_u64(vmull_u32(a_lo, b_lo)); +} + +// Multiply packed double-precision (64-bit) floating-point elements in a and b, +// and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mul_pd +FORCE_INLINE __m128d _mm_mul_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_f64( + vmulq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + double c[2]; + c[0] = a0 * b0; + c[1] = a1 * b1; + return vld1q_f32((float32_t *) c); +#endif +} + +// Multiply the lower double-precision (64-bit) floating-point element in a and +// b, store the result in the lower element of dst, and copy the upper element +// from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=mm_mul_sd +FORCE_INLINE __m128d _mm_mul_sd(__m128d a, __m128d b) +{ + return _mm_move_sd(a, _mm_mul_pd(a, b)); +} + +// Multiply the low unsigned 32-bit integers from a and b, and store the +// unsigned 64-bit result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mul_su32 +FORCE_INLINE __m64 _mm_mul_su32(__m64 a, __m64 b) +{ + return vreinterpret_m64_u64(vget_low_u64( + vmull_u32(vreinterpret_u32_m64(a), vreinterpret_u32_m64(b)))); +} + +// Multiply the packed signed 16-bit integers in a and b, producing intermediate +// 32-bit integers, and store the high 16 bits of the intermediate integers in +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mulhi_epi16 +FORCE_INLINE __m128i _mm_mulhi_epi16(__m128i a, __m128i b) +{ + /* FIXME: issue with large values because of result saturation */ + // int16x8_t ret = vqdmulhq_s16(vreinterpretq_s16_m128i(a), + // vreinterpretq_s16_m128i(b)); /* =2*a*b */ return + // vreinterpretq_m128i_s16(vshrq_n_s16(ret, 1)); + int16x4_t a3210 = vget_low_s16(vreinterpretq_s16_m128i(a)); + int16x4_t b3210 = vget_low_s16(vreinterpretq_s16_m128i(b)); + int32x4_t ab3210 = vmull_s16(a3210, b3210); /* 3333222211110000 */ + int16x4_t a7654 = vget_high_s16(vreinterpretq_s16_m128i(a)); + int16x4_t b7654 = vget_high_s16(vreinterpretq_s16_m128i(b)); + int32x4_t ab7654 = vmull_s16(a7654, b7654); /* 7777666655554444 */ + uint16x8x2_t r = + vuzpq_u16(vreinterpretq_u16_s32(ab3210), vreinterpretq_u16_s32(ab7654)); + return vreinterpretq_m128i_u16(r.val[1]); +} + +// Multiply the packed unsigned 16-bit integers in a and b, producing +// intermediate 32-bit integers, and store the high 16 bits of the intermediate +// integers in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mulhi_epu16 +FORCE_INLINE __m128i _mm_mulhi_epu16(__m128i a, __m128i b) +{ + uint16x4_t a3210 = vget_low_u16(vreinterpretq_u16_m128i(a)); + uint16x4_t b3210 = vget_low_u16(vreinterpretq_u16_m128i(b)); + uint32x4_t ab3210 = vmull_u16(a3210, b3210); +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + uint32x4_t ab7654 = + vmull_high_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b)); + uint16x8_t r = vuzp2q_u16(vreinterpretq_u16_u32(ab3210), + vreinterpretq_u16_u32(ab7654)); + return vreinterpretq_m128i_u16(r); +#else + uint16x4_t a7654 = vget_high_u16(vreinterpretq_u16_m128i(a)); + uint16x4_t b7654 = vget_high_u16(vreinterpretq_u16_m128i(b)); + uint32x4_t ab7654 = vmull_u16(a7654, b7654); + uint16x8x2_t r = + vuzpq_u16(vreinterpretq_u16_u32(ab3210), vreinterpretq_u16_u32(ab7654)); + return vreinterpretq_m128i_u16(r.val[1]); +#endif +} + +// Multiply the packed 16-bit integers in a and b, producing intermediate 32-bit +// integers, and store the low 16 bits of the intermediate integers in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mullo_epi16 +FORCE_INLINE __m128i _mm_mullo_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vmulq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Compute the bitwise OR of packed double-precision (64-bit) floating-point +// elements in a and b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=mm_or_pd +FORCE_INLINE __m128d _mm_or_pd(__m128d a, __m128d b) +{ + return vreinterpretq_m128d_s64( + vorrq_s64(vreinterpretq_s64_m128d(a), vreinterpretq_s64_m128d(b))); +} + +// Compute the bitwise OR of 128 bits (representing integer data) in a and b, +// and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_or_si128 +FORCE_INLINE __m128i _mm_or_si128(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vorrq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Convert packed signed 16-bit integers from a and b to packed 8-bit integers +// using signed saturation, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_packs_epi16 +FORCE_INLINE __m128i _mm_packs_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s8( + vcombine_s8(vqmovn_s16(vreinterpretq_s16_m128i(a)), + vqmovn_s16(vreinterpretq_s16_m128i(b)))); +} + +// Convert packed signed 32-bit integers from a and b to packed 16-bit integers +// using signed saturation, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_packs_epi32 +FORCE_INLINE __m128i _mm_packs_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vcombine_s16(vqmovn_s32(vreinterpretq_s32_m128i(a)), + vqmovn_s32(vreinterpretq_s32_m128i(b)))); +} + +// Convert packed signed 16-bit integers from a and b to packed 8-bit integers +// using unsigned saturation, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_packus_epi16 +FORCE_INLINE __m128i _mm_packus_epi16(const __m128i a, const __m128i b) +{ + return vreinterpretq_m128i_u8( + vcombine_u8(vqmovun_s16(vreinterpretq_s16_m128i(a)), + vqmovun_s16(vreinterpretq_s16_m128i(b)))); +} + +// Pause the processor. This is typically used in spin-wait loops and depending +// on the x86 processor typical values are in the 40-100 cycle range. The +// 'yield' instruction isn't a good fit because it's effectively a nop on most +// Arm cores. Experience with several databases has shown has shown an 'isb' is +// a reasonable approximation. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_pause +FORCE_INLINE void _mm_pause(void) +{ +#if defined(_MSC_VER) && !defined(__clang__) + __isb(_ARM64_BARRIER_SY); +#else + __asm__ __volatile__("isb\n"); +#endif +} + +// Compute the absolute differences of packed unsigned 8-bit integers in a and +// b, then horizontally sum each consecutive 8 differences to produce two +// unsigned 16-bit integers, and pack these unsigned 16-bit integers in the low +// 16 bits of 64-bit elements in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sad_epu8 +FORCE_INLINE __m128i _mm_sad_epu8(__m128i a, __m128i b) +{ + uint16x8_t t = vpaddlq_u8(vabdq_u8((uint8x16_t) a, (uint8x16_t) b)); + return vreinterpretq_m128i_u64(vpaddlq_u32(vpaddlq_u16(t))); +} + +// Set packed 16-bit integers in dst with the supplied values. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_epi16 +FORCE_INLINE __m128i _mm_set_epi16(short i7, + short i6, + short i5, + short i4, + short i3, + short i2, + short i1, + short i0) +{ + int16_t ALIGN_STRUCT(16) data[8] = {i0, i1, i2, i3, i4, i5, i6, i7}; + return vreinterpretq_m128i_s16(vld1q_s16(data)); +} + +// Set packed 32-bit integers in dst with the supplied values. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_epi32 +FORCE_INLINE __m128i _mm_set_epi32(int i3, int i2, int i1, int i0) +{ + int32_t ALIGN_STRUCT(16) data[4] = {i0, i1, i2, i3}; + return vreinterpretq_m128i_s32(vld1q_s32(data)); +} + +// Set packed 64-bit integers in dst with the supplied values. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_epi64 +FORCE_INLINE __m128i _mm_set_epi64(__m64 i1, __m64 i2) +{ + return _mm_set_epi64x(vget_lane_s64(i1, 0), vget_lane_s64(i2, 0)); +} + +// Set packed 64-bit integers in dst with the supplied values. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_epi64x +FORCE_INLINE __m128i _mm_set_epi64x(int64_t i1, int64_t i2) +{ + return vreinterpretq_m128i_s64( + vcombine_s64(vcreate_s64(i2), vcreate_s64(i1))); +} + +// Set packed 8-bit integers in dst with the supplied values. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_epi8 +FORCE_INLINE __m128i _mm_set_epi8(signed char b15, + signed char b14, + signed char b13, + signed char b12, + signed char b11, + signed char b10, + signed char b9, + signed char b8, + signed char b7, + signed char b6, + signed char b5, + signed char b4, + signed char b3, + signed char b2, + signed char b1, + signed char b0) +{ + int8_t ALIGN_STRUCT(16) data[16] = { + (int8_t) b0, (int8_t) b1, (int8_t) b2, (int8_t) b3, + (int8_t) b4, (int8_t) b5, (int8_t) b6, (int8_t) b7, + (int8_t) b8, (int8_t) b9, (int8_t) b10, (int8_t) b11, + (int8_t) b12, (int8_t) b13, (int8_t) b14, (int8_t) b15}; + return (__m128i) vld1q_s8(data); +} + +// Set packed double-precision (64-bit) floating-point elements in dst with the +// supplied values. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_pd +FORCE_INLINE __m128d _mm_set_pd(double e1, double e0) +{ + double ALIGN_STRUCT(16) data[2] = {e0, e1}; +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_f64(vld1q_f64((float64_t *) data)); +#else + return vreinterpretq_m128d_f32(vld1q_f32((float32_t *) data)); +#endif +} + +// Broadcast double-precision (64-bit) floating-point value a to all elements of +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_pd1 +#define _mm_set_pd1 _mm_set1_pd + +// Copy double-precision (64-bit) floating-point element a to the lower element +// of dst, and zero the upper element. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set_sd +FORCE_INLINE __m128d _mm_set_sd(double a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_f64(vsetq_lane_f64(a, vdupq_n_f64(0), 0)); +#else + return _mm_set_pd(0, a); +#endif +} + +// Broadcast 16-bit integer a to all elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set1_epi16 +FORCE_INLINE __m128i _mm_set1_epi16(short w) +{ + return vreinterpretq_m128i_s16(vdupq_n_s16(w)); +} + +// Broadcast 32-bit integer a to all elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set1_epi32 +FORCE_INLINE __m128i _mm_set1_epi32(int _i) +{ + return vreinterpretq_m128i_s32(vdupq_n_s32(_i)); +} + +// Broadcast 64-bit integer a to all elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set1_epi64 +FORCE_INLINE __m128i _mm_set1_epi64(__m64 _i) +{ + return vreinterpretq_m128i_s64(vdupq_lane_s64(_i, 0)); +} + +// Broadcast 64-bit integer a to all elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set1_epi64x +FORCE_INLINE __m128i _mm_set1_epi64x(int64_t _i) +{ + return vreinterpretq_m128i_s64(vdupq_n_s64(_i)); +} + +// Broadcast 8-bit integer a to all elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set1_epi8 +FORCE_INLINE __m128i _mm_set1_epi8(signed char w) +{ + return vreinterpretq_m128i_s8(vdupq_n_s8(w)); +} + +// Broadcast double-precision (64-bit) floating-point value a to all elements of +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_set1_pd +FORCE_INLINE __m128d _mm_set1_pd(double d) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_f64(vdupq_n_f64(d)); +#else + int64_t _d = sse2neon_recast_f64_s64(d); + return vreinterpretq_m128d_s64(vdupq_n_s64(_d)); +#endif +} + +// Set packed 16-bit integers in dst with the supplied values in reverse order. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setr_epi16 +FORCE_INLINE __m128i _mm_setr_epi16(short w0, + short w1, + short w2, + short w3, + short w4, + short w5, + short w6, + short w7) +{ + int16_t ALIGN_STRUCT(16) data[8] = {w0, w1, w2, w3, w4, w5, w6, w7}; + return vreinterpretq_m128i_s16(vld1q_s16((int16_t *) data)); +} + +// Set packed 32-bit integers in dst with the supplied values in reverse order. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setr_epi32 +FORCE_INLINE __m128i _mm_setr_epi32(int i3, int i2, int i1, int i0) +{ + int32_t ALIGN_STRUCT(16) data[4] = {i3, i2, i1, i0}; + return vreinterpretq_m128i_s32(vld1q_s32(data)); +} + +// Set packed 64-bit integers in dst with the supplied values in reverse order. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setr_epi64 +FORCE_INLINE __m128i _mm_setr_epi64(__m64 e1, __m64 e0) +{ + return vreinterpretq_m128i_s64(vcombine_s64(e1, e0)); +} + +// Set packed 8-bit integers in dst with the supplied values in reverse order. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setr_epi8 +FORCE_INLINE __m128i _mm_setr_epi8(signed char b0, + signed char b1, + signed char b2, + signed char b3, + signed char b4, + signed char b5, + signed char b6, + signed char b7, + signed char b8, + signed char b9, + signed char b10, + signed char b11, + signed char b12, + signed char b13, + signed char b14, + signed char b15) +{ + int8_t ALIGN_STRUCT(16) data[16] = { + (int8_t) b0, (int8_t) b1, (int8_t) b2, (int8_t) b3, + (int8_t) b4, (int8_t) b5, (int8_t) b6, (int8_t) b7, + (int8_t) b8, (int8_t) b9, (int8_t) b10, (int8_t) b11, + (int8_t) b12, (int8_t) b13, (int8_t) b14, (int8_t) b15}; + return (__m128i) vld1q_s8(data); +} + +// Set packed double-precision (64-bit) floating-point elements in dst with the +// supplied values in reverse order. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setr_pd +FORCE_INLINE __m128d _mm_setr_pd(double e1, double e0) +{ + return _mm_set_pd(e0, e1); +} + +// Return vector of type __m128d with all elements set to zero. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setzero_pd +FORCE_INLINE __m128d _mm_setzero_pd(void) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_f64(vdupq_n_f64(0)); +#else + return vreinterpretq_m128d_f32(vdupq_n_f32(0)); +#endif +} + +// Return vector of type __m128i with all elements set to zero. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setzero_si128 +FORCE_INLINE __m128i _mm_setzero_si128(void) +{ + return vreinterpretq_m128i_s32(vdupq_n_s32(0)); +} + +// Shuffle 32-bit integers in a using the control in imm8, and store the results +// in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shuffle_epi32 +// FORCE_INLINE __m128i _mm_shuffle_epi32(__m128i a, +// __constrange(0,255) int imm) +#if defined(_sse2neon_shuffle) +#define _mm_shuffle_epi32(a, imm) \ + __extension__({ \ + int32x4_t _input = vreinterpretq_s32_m128i(a); \ + int32x4_t _shuf = \ + vshuffleq_s32(_input, _input, (imm) & (0x3), ((imm) >> 2) & 0x3, \ + ((imm) >> 4) & 0x3, ((imm) >> 6) & 0x3); \ + vreinterpretq_m128i_s32(_shuf); \ + }) +#else // generic +#define _mm_shuffle_epi32(a, imm) \ + _sse2neon_define1( \ + __m128i, a, __m128i ret; switch (imm) { \ + case _MM_SHUFFLE(1, 0, 3, 2): \ + ret = _mm_shuffle_epi_1032(_a); \ + break; \ + case _MM_SHUFFLE(2, 3, 0, 1): \ + ret = _mm_shuffle_epi_2301(_a); \ + break; \ + case _MM_SHUFFLE(0, 3, 2, 1): \ + ret = _mm_shuffle_epi_0321(_a); \ + break; \ + case _MM_SHUFFLE(2, 1, 0, 3): \ + ret = _mm_shuffle_epi_2103(_a); \ + break; \ + case _MM_SHUFFLE(1, 0, 1, 0): \ + ret = _mm_shuffle_epi_1010(_a); \ + break; \ + case _MM_SHUFFLE(1, 0, 0, 1): \ + ret = _mm_shuffle_epi_1001(_a); \ + break; \ + case _MM_SHUFFLE(0, 1, 0, 1): \ + ret = _mm_shuffle_epi_0101(_a); \ + break; \ + case _MM_SHUFFLE(2, 2, 1, 1): \ + ret = _mm_shuffle_epi_2211(_a); \ + break; \ + case _MM_SHUFFLE(0, 1, 2, 2): \ + ret = _mm_shuffle_epi_0122(_a); \ + break; \ + case _MM_SHUFFLE(3, 3, 3, 2): \ + ret = _mm_shuffle_epi_3332(_a); \ + break; \ + case _MM_SHUFFLE(0, 0, 0, 0): \ + ret = _mm_shuffle_epi32_splat(_a, 0); \ + break; \ + case _MM_SHUFFLE(1, 1, 1, 1): \ + ret = _mm_shuffle_epi32_splat(_a, 1); \ + break; \ + case _MM_SHUFFLE(2, 2, 2, 2): \ + ret = _mm_shuffle_epi32_splat(_a, 2); \ + break; \ + case _MM_SHUFFLE(3, 3, 3, 3): \ + ret = _mm_shuffle_epi32_splat(_a, 3); \ + break; \ + default: \ + ret = _mm_shuffle_epi32_default(_a, (imm)); \ + break; \ + } _sse2neon_return(ret);) +#endif + +// Shuffle double-precision (64-bit) floating-point elements using the control +// in imm8, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shuffle_pd +#ifdef _sse2neon_shuffle +#define _mm_shuffle_pd(a, b, imm8) \ + vreinterpretq_m128d_s64( \ + vshuffleq_s64(vreinterpretq_s64_m128d(a), vreinterpretq_s64_m128d(b), \ + (imm8) & 0x1, (((imm8) & 0x2) >> 1) + 2)) +#else +#define _mm_shuffle_pd(a, b, imm8) \ + _mm_castsi128_pd(_mm_set_epi64x( \ + vgetq_lane_s64(vreinterpretq_s64_m128d(b), ((imm8) & 0x2) >> 1), \ + vgetq_lane_s64(vreinterpretq_s64_m128d(a), (imm8) & 0x1))) +#endif + +// FORCE_INLINE __m128i _mm_shufflehi_epi16(__m128i a, +// __constrange(0,255) int imm) +#if defined(_sse2neon_shuffle) +#define _mm_shufflehi_epi16(a, imm) \ + __extension__({ \ + int16x8_t _input = vreinterpretq_s16_m128i(a); \ + int16x8_t _shuf = \ + vshuffleq_s16(_input, _input, 0, 1, 2, 3, ((imm) & (0x3)) + 4, \ + (((imm) >> 2) & 0x3) + 4, (((imm) >> 4) & 0x3) + 4, \ + (((imm) >> 6) & 0x3) + 4); \ + vreinterpretq_m128i_s16(_shuf); \ + }) +#else // generic +#define _mm_shufflehi_epi16(a, imm) _mm_shufflehi_epi16_function((a), (imm)) +#endif + +// FORCE_INLINE __m128i _mm_shufflelo_epi16(__m128i a, +// __constrange(0,255) int imm) +#if defined(_sse2neon_shuffle) +#define _mm_shufflelo_epi16(a, imm) \ + __extension__({ \ + int16x8_t _input = vreinterpretq_s16_m128i(a); \ + int16x8_t _shuf = vshuffleq_s16( \ + _input, _input, ((imm) & (0x3)), (((imm) >> 2) & 0x3), \ + (((imm) >> 4) & 0x3), (((imm) >> 6) & 0x3), 4, 5, 6, 7); \ + vreinterpretq_m128i_s16(_shuf); \ + }) +#else // generic +#define _mm_shufflelo_epi16(a, imm) _mm_shufflelo_epi16_function((a), (imm)) +#endif + +// Shift packed 16-bit integers in a left by count while shifting in zeros, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sll_epi16 +FORCE_INLINE __m128i _mm_sll_epi16(__m128i a, __m128i count) +{ + uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); + if (_sse2neon_unlikely(c & ~15)) + return _mm_setzero_si128(); + + int16x8_t vc = vdupq_n_s16((int16_t) c); + return vreinterpretq_m128i_s16(vshlq_s16(vreinterpretq_s16_m128i(a), vc)); +} + +// Shift packed 32-bit integers in a left by count while shifting in zeros, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sll_epi32 +FORCE_INLINE __m128i _mm_sll_epi32(__m128i a, __m128i count) +{ + uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); + if (_sse2neon_unlikely(c & ~31)) + return _mm_setzero_si128(); + + int32x4_t vc = vdupq_n_s32((int32_t) c); + return vreinterpretq_m128i_s32(vshlq_s32(vreinterpretq_s32_m128i(a), vc)); +} + +// Shift packed 64-bit integers in a left by count while shifting in zeros, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sll_epi64 +FORCE_INLINE __m128i _mm_sll_epi64(__m128i a, __m128i count) +{ + uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); + if (_sse2neon_unlikely(c & ~63)) + return _mm_setzero_si128(); + + int64x2_t vc = vdupq_n_s64((int64_t) c); + return vreinterpretq_m128i_s64(vshlq_s64(vreinterpretq_s64_m128i(a), vc)); +} + +// Shift packed 16-bit integers in a left by imm8 while shifting in zeros, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_slli_epi16 +FORCE_INLINE __m128i _mm_slli_epi16(__m128i a, int imm) +{ + if (_sse2neon_unlikely(imm & ~15)) + return _mm_setzero_si128(); + return vreinterpretq_m128i_s16( + vshlq_s16(vreinterpretq_s16_m128i(a), vdupq_n_s16((int16_t) imm))); +} + +// Shift packed 32-bit integers in a left by imm8 while shifting in zeros, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_slli_epi32 +FORCE_INLINE __m128i _mm_slli_epi32(__m128i a, int imm) +{ + if (_sse2neon_unlikely(imm & ~31)) + return _mm_setzero_si128(); + return vreinterpretq_m128i_s32( + vshlq_s32(vreinterpretq_s32_m128i(a), vdupq_n_s32(imm))); +} + +// Shift packed 64-bit integers in a left by imm8 while shifting in zeros, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_slli_epi64 +FORCE_INLINE __m128i _mm_slli_epi64(__m128i a, int imm) +{ + if (_sse2neon_unlikely(imm & ~63)) + return _mm_setzero_si128(); + return vreinterpretq_m128i_s64( + vshlq_s64(vreinterpretq_s64_m128i(a), vdupq_n_s64(imm))); +} + +// Shift a left by imm8 bytes while shifting in zeros, and store the results in +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_slli_si128 +#define _mm_slli_si128(a, imm) \ + _sse2neon_define1( \ + __m128i, a, int8x16_t ret; \ + if (_sse2neon_unlikely((imm) == 0)) ret = vreinterpretq_s8_m128i(_a); \ + else if (_sse2neon_unlikely((imm) & ~15)) ret = vdupq_n_s8(0); \ + else ret = vextq_s8(vdupq_n_s8(0), vreinterpretq_s8_m128i(_a), \ + (((imm) <= 0 || (imm) > 15) ? 0 : (16 - (imm)))); \ + _sse2neon_return(vreinterpretq_m128i_s8(ret));) + +// Compute the square root of packed double-precision (64-bit) floating-point +// elements in a, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sqrt_pd +FORCE_INLINE __m128d _mm_sqrt_pd(__m128d a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_f64(vsqrtq_f64(vreinterpretq_f64_m128d(a))); +#else + double a0, a1; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + a1 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double _a0 = sqrt(a0); + double _a1 = sqrt(a1); + return _mm_set_pd(_a1, _a0); +#endif +} + +// Compute the square root of the lower double-precision (64-bit) floating-point +// element in b, store the result in the lower element of dst, and copy the +// upper element from a to the upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sqrt_sd +FORCE_INLINE __m128d _mm_sqrt_sd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return _mm_move_sd(a, _mm_sqrt_pd(b)); +#else + double _a, _b; + _a = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + _b = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + return _mm_set_pd(_a, sqrt(_b)); +#endif +} + +// Shift packed 16-bit integers in a right by count while shifting in sign bits, +// and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sra_epi16 +FORCE_INLINE __m128i _mm_sra_epi16(__m128i a, __m128i count) +{ + int64_t c = vgetq_lane_s64(count, 0); + if (_sse2neon_unlikely(c & ~15)) + return _mm_cmplt_epi16(a, _mm_setzero_si128()); + return vreinterpretq_m128i_s16( + vshlq_s16((int16x8_t) a, vdupq_n_s16((int16_t) -c))); +} + +// Shift packed 32-bit integers in a right by count while shifting in sign bits, +// and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sra_epi32 +FORCE_INLINE __m128i _mm_sra_epi32(__m128i a, __m128i count) +{ + int64_t c = vgetq_lane_s64(count, 0); + if (_sse2neon_unlikely(c & ~31)) + return _mm_cmplt_epi32(a, _mm_setzero_si128()); + return vreinterpretq_m128i_s32( + vshlq_s32((int32x4_t) a, vdupq_n_s32((int) -c))); +} + +// Shift packed 16-bit integers in a right by imm8 while shifting in sign +// bits, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srai_epi16 +FORCE_INLINE __m128i _mm_srai_epi16(__m128i a, int imm) +{ + const int16_t count = (imm & ~15) ? 15 : (int16_t) imm; + return (__m128i) vshlq_s16((int16x8_t) a, vdupq_n_s16(-count)); +} + +// Shift packed 32-bit integers in a right by imm8 while shifting in sign bits, +// and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srai_epi32 +// FORCE_INLINE __m128i _mm_srai_epi32(__m128i a, __constrange(0,255) int imm) +#define _mm_srai_epi32(a, imm) \ + _sse2neon_define0( \ + __m128i, a, __m128i ret; if (_sse2neon_unlikely((imm) == 0)) { \ + ret = _a; \ + } else if (_sse2neon_likely(0 < (imm) && (imm) < 32)) { \ + ret = vreinterpretq_m128i_s32( \ + vshlq_s32(vreinterpretq_s32_m128i(_a), vdupq_n_s32(-(imm)))); \ + } else { \ + ret = vreinterpretq_m128i_s32( \ + vshrq_n_s32(vreinterpretq_s32_m128i(_a), 31)); \ + } _sse2neon_return(ret);) + +// Shift packed 16-bit integers in a right by count while shifting in zeros, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srl_epi16 +FORCE_INLINE __m128i _mm_srl_epi16(__m128i a, __m128i count) +{ + uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); + if (_sse2neon_unlikely(c & ~15)) + return _mm_setzero_si128(); + + int16x8_t vc = vdupq_n_s16(-(int16_t) c); + return vreinterpretq_m128i_u16(vshlq_u16(vreinterpretq_u16_m128i(a), vc)); +} + +// Shift packed 32-bit integers in a right by count while shifting in zeros, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srl_epi32 +FORCE_INLINE __m128i _mm_srl_epi32(__m128i a, __m128i count) +{ + uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); + if (_sse2neon_unlikely(c & ~31)) + return _mm_setzero_si128(); + + int32x4_t vc = vdupq_n_s32(-(int32_t) c); + return vreinterpretq_m128i_u32(vshlq_u32(vreinterpretq_u32_m128i(a), vc)); +} + +// Shift packed 64-bit integers in a right by count while shifting in zeros, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srl_epi64 +FORCE_INLINE __m128i _mm_srl_epi64(__m128i a, __m128i count) +{ + uint64_t c = vreinterpretq_nth_u64_m128i(count, 0); + if (_sse2neon_unlikely(c & ~63)) + return _mm_setzero_si128(); + + int64x2_t vc = vdupq_n_s64(-(int64_t) c); + return vreinterpretq_m128i_u64(vshlq_u64(vreinterpretq_u64_m128i(a), vc)); +} + +// Shift packed 16-bit integers in a right by imm8 while shifting in zeros, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srli_epi16 +#define _mm_srli_epi16(a, imm) \ + _sse2neon_define0( \ + __m128i, a, __m128i ret; if (_sse2neon_unlikely((imm) & ~15)) { \ + ret = _mm_setzero_si128(); \ + } else { \ + ret = vreinterpretq_m128i_u16(vshlq_u16( \ + vreinterpretq_u16_m128i(_a), vdupq_n_s16((int16_t) - (imm)))); \ + } _sse2neon_return(ret);) + +// Shift packed 32-bit integers in a right by imm8 while shifting in zeros, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srli_epi32 +// FORCE_INLINE __m128i _mm_srli_epi32(__m128i a, __constrange(0,255) int imm) +#define _mm_srli_epi32(a, imm) \ + _sse2neon_define0( \ + __m128i, a, __m128i ret; if (_sse2neon_unlikely((imm) & ~31)) { \ + ret = _mm_setzero_si128(); \ + } else { \ + ret = vreinterpretq_m128i_u32( \ + vshlq_u32(vreinterpretq_u32_m128i(_a), vdupq_n_s32(-(imm)))); \ + } _sse2neon_return(ret);) + +// Shift packed 64-bit integers in a right by imm8 while shifting in zeros, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srli_epi64 +#define _mm_srli_epi64(a, imm) \ + _sse2neon_define0( \ + __m128i, a, __m128i ret; if (_sse2neon_unlikely((imm) & ~63)) { \ + ret = _mm_setzero_si128(); \ + } else { \ + ret = vreinterpretq_m128i_u64( \ + vshlq_u64(vreinterpretq_u64_m128i(_a), vdupq_n_s64(-(imm)))); \ + } _sse2neon_return(ret);) + +// Shift a right by imm8 bytes while shifting in zeros, and store the results in +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srli_si128 +#define _mm_srli_si128(a, imm) \ + _sse2neon_define1( \ + __m128i, a, int8x16_t ret; \ + if (_sse2neon_unlikely((imm) & ~15)) ret = vdupq_n_s8(0); \ + else ret = vextq_s8(vreinterpretq_s8_m128i(_a), vdupq_n_s8(0), \ + ((imm) > 15 ? 0 : (imm))); \ + _sse2neon_return(vreinterpretq_m128i_s8(ret));) + +// Store 128-bits (composed of 2 packed double-precision (64-bit) floating-point +// elements) from a into memory. mem_addr must be aligned on a 16-byte boundary +// or a general-protection exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_store_pd +FORCE_INLINE void _mm_store_pd(double *mem_addr, __m128d a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + vst1q_f64((float64_t *) mem_addr, vreinterpretq_f64_m128d(a)); +#else + vst1q_f32((float32_t *) mem_addr, vreinterpretq_f32_m128d(a)); +#endif +} + +// Store the lower double-precision (64-bit) floating-point element from a into +// 2 contiguous elements in memory. mem_addr must be aligned on a 16-byte +// boundary or a general-protection exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_store_pd1 +FORCE_INLINE void _mm_store_pd1(double *mem_addr, __m128d a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + float64x1_t a_low = vget_low_f64(vreinterpretq_f64_m128d(a)); + vst1q_f64((float64_t *) mem_addr, + vreinterpretq_f64_m128d(vcombine_f64(a_low, a_low))); +#else + float32x2_t a_low = vget_low_f32(vreinterpretq_f32_m128d(a)); + vst1q_f32((float32_t *) mem_addr, + vreinterpretq_f32_m128d(vcombine_f32(a_low, a_low))); +#endif +} + +// Store the lower double-precision (64-bit) floating-point element from a into +// memory. mem_addr does not need to be aligned on any particular boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=mm_store_sd +FORCE_INLINE void _mm_store_sd(double *mem_addr, __m128d a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + vst1_f64((float64_t *) mem_addr, vget_low_f64(vreinterpretq_f64_m128d(a))); +#else + vst1_u64((uint64_t *) mem_addr, vget_low_u64(vreinterpretq_u64_m128d(a))); +#endif +} + +// Store 128-bits of integer data from a into memory. mem_addr must be aligned +// on a 16-byte boundary or a general-protection exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_store_si128 +FORCE_INLINE void _mm_store_si128(__m128i *p, __m128i a) +{ + vst1q_s32((int32_t *) p, vreinterpretq_s32_m128i(a)); +} + +// Store the lower double-precision (64-bit) floating-point element from a into +// 2 contiguous elements in memory. mem_addr must be aligned on a 16-byte +// boundary or a general-protection exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#expand=9,526,5601&text=_mm_store1_pd +#define _mm_store1_pd _mm_store_pd1 + +// Store the upper double-precision (64-bit) floating-point element from a into +// memory. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeh_pd +FORCE_INLINE void _mm_storeh_pd(double *mem_addr, __m128d a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + vst1_f64((float64_t *) mem_addr, vget_high_f64(vreinterpretq_f64_m128d(a))); +#else + vst1_f32((float32_t *) mem_addr, vget_high_f32(vreinterpretq_f32_m128d(a))); +#endif +} + +// Store 64-bit integer from the first element of a into memory. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storel_epi64 +FORCE_INLINE void _mm_storel_epi64(__m128i *a, __m128i b) +{ + vst1_u64((uint64_t *) a, vget_low_u64(vreinterpretq_u64_m128i(b))); +} + +// Store the lower double-precision (64-bit) floating-point element from a into +// memory. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storel_pd +FORCE_INLINE void _mm_storel_pd(double *mem_addr, __m128d a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + vst1_f64((float64_t *) mem_addr, vget_low_f64(vreinterpretq_f64_m128d(a))); +#else + vst1_f32((float32_t *) mem_addr, vget_low_f32(vreinterpretq_f32_m128d(a))); +#endif +} + +// Store 2 double-precision (64-bit) floating-point elements from a into memory +// in reverse order. mem_addr must be aligned on a 16-byte boundary or a +// general-protection exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storer_pd +FORCE_INLINE void _mm_storer_pd(double *mem_addr, __m128d a) +{ + float32x4_t f = vreinterpretq_f32_m128d(a); + _mm_store_pd(mem_addr, vreinterpretq_m128d_f32(vextq_f32(f, f, 2))); +} + +// Store 128-bits (composed of 2 packed double-precision (64-bit) floating-point +// elements) from a into memory. mem_addr does not need to be aligned on any +// particular boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeu_pd +FORCE_INLINE void _mm_storeu_pd(double *mem_addr, __m128d a) +{ + _mm_store_pd(mem_addr, a); +} + +// Store 128-bits of integer data from a into memory. mem_addr does not need to +// be aligned on any particular boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeu_si128 +FORCE_INLINE void _mm_storeu_si128(__m128i *p, __m128i a) +{ + vst1q_s32((int32_t *) p, vreinterpretq_s32_m128i(a)); +} + +// Store 32-bit integer from the first element of a into memory. mem_addr does +// not need to be aligned on any particular boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeu_si32 +FORCE_INLINE void _mm_storeu_si32(void *p, __m128i a) +{ + vst1q_lane_s32((int32_t *) p, vreinterpretq_s32_m128i(a), 0); +} + +// Store 128-bits (composed of 2 packed double-precision (64-bit) floating-point +// elements) from a into memory using a non-temporal memory hint. mem_addr must +// be aligned on a 16-byte boundary or a general-protection exception may be +// generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_stream_pd +FORCE_INLINE void _mm_stream_pd(double *p, __m128d a) +{ +#if __has_builtin(__builtin_nontemporal_store) + __builtin_nontemporal_store(a, (__m128d *) p); +#elif defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + vst1q_f64(p, vreinterpretq_f64_m128d(a)); +#else + vst1q_s64((int64_t *) p, vreinterpretq_s64_m128d(a)); +#endif +} + +// Store 128-bits of integer data from a into memory using a non-temporal memory +// hint. mem_addr must be aligned on a 16-byte boundary or a general-protection +// exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_stream_si128 +FORCE_INLINE void _mm_stream_si128(__m128i *p, __m128i a) +{ +#if __has_builtin(__builtin_nontemporal_store) + __builtin_nontemporal_store(a, p); +#else + vst1q_s64((int64_t *) p, vreinterpretq_s64_m128i(a)); +#endif +} + +// Store 32-bit integer a into memory using a non-temporal hint to minimize +// cache pollution. If the cache line containing address mem_addr is already in +// the cache, the cache will be updated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_stream_si32 +FORCE_INLINE void _mm_stream_si32(int *p, int a) +{ + vst1q_lane_s32((int32_t *) p, vdupq_n_s32(a), 0); +} + +// Store 64-bit integer a into memory using a non-temporal hint to minimize +// cache pollution. If the cache line containing address mem_addr is already in +// the cache, the cache will be updated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_stream_si64 +FORCE_INLINE void _mm_stream_si64(__int64 *p, __int64 a) +{ + vst1_s64((int64_t *) p, vdup_n_s64((int64_t) a)); +} + +// Subtract packed 16-bit integers in b from packed 16-bit integers in a, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_epi16 +FORCE_INLINE __m128i _mm_sub_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vsubq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Subtract packed 32-bit integers in b from packed 32-bit integers in a, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_epi32 +FORCE_INLINE __m128i _mm_sub_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vsubq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Subtract packed 64-bit integers in b from packed 64-bit integers in a, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_epi64 +FORCE_INLINE __m128i _mm_sub_epi64(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s64( + vsubq_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b))); +} + +// Subtract packed 8-bit integers in b from packed 8-bit integers in a, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_epi8 +FORCE_INLINE __m128i _mm_sub_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s8( + vsubq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Subtract packed double-precision (64-bit) floating-point elements in b from +// packed double-precision (64-bit) floating-point elements in a, and store the +// results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=mm_sub_pd +FORCE_INLINE __m128d _mm_sub_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_f64( + vsubq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + double c[2]; + c[0] = a0 - b0; + c[1] = a1 - b1; + return vld1q_f32((float32_t *) c); +#endif +} + +// Subtract the lower double-precision (64-bit) floating-point element in b from +// the lower double-precision (64-bit) floating-point element in a, store the +// result in the lower element of dst, and copy the upper element from a to the +// upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_sd +FORCE_INLINE __m128d _mm_sub_sd(__m128d a, __m128d b) +{ + return _mm_move_sd(a, _mm_sub_pd(a, b)); +} + +// Subtract 64-bit integer b from 64-bit integer a, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sub_si64 +FORCE_INLINE __m64 _mm_sub_si64(__m64 a, __m64 b) +{ + return vreinterpret_m64_s64( + vsub_s64(vreinterpret_s64_m64(a), vreinterpret_s64_m64(b))); +} + +// Subtract packed signed 16-bit integers in b from packed 16-bit integers in a +// using saturation, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_subs_epi16 +FORCE_INLINE __m128i _mm_subs_epi16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s16( + vqsubq_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +} + +// Subtract packed signed 8-bit integers in b from packed 8-bit integers in a +// using saturation, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_subs_epi8 +FORCE_INLINE __m128i _mm_subs_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s8( + vqsubq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Subtract packed unsigned 16-bit integers in b from packed unsigned 16-bit +// integers in a using saturation, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_subs_epu16 +FORCE_INLINE __m128i _mm_subs_epu16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vqsubq_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b))); +} + +// Subtract packed unsigned 8-bit integers in b from packed unsigned 8-bit +// integers in a using saturation, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_subs_epu8 +FORCE_INLINE __m128i _mm_subs_epu8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8( + vqsubq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b))); +} + +#define _mm_ucomieq_sd _mm_comieq_sd +#define _mm_ucomige_sd _mm_comige_sd +#define _mm_ucomigt_sd _mm_comigt_sd +#define _mm_ucomile_sd _mm_comile_sd +#define _mm_ucomilt_sd _mm_comilt_sd +#define _mm_ucomineq_sd _mm_comineq_sd + +// Return vector of type __m128d with undefined elements. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_undefined_pd +FORCE_INLINE __m128d _mm_undefined_pd(void) +{ +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wuninitialized" +#endif + __m128d a; +#if defined(_MSC_VER) && !defined(__clang__) + a = _mm_setzero_pd(); +#endif + return a; +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic pop +#endif +} + +// Unpack and interleave 16-bit integers from the high half of a and b, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpackhi_epi16 +FORCE_INLINE __m128i _mm_unpackhi_epi16(__m128i a, __m128i b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128i_s16( + vzip2q_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +#else + int16x4_t a1 = vget_high_s16(vreinterpretq_s16_m128i(a)); + int16x4_t b1 = vget_high_s16(vreinterpretq_s16_m128i(b)); + int16x4x2_t result = vzip_s16(a1, b1); + return vreinterpretq_m128i_s16(vcombine_s16(result.val[0], result.val[1])); +#endif +} + +// Unpack and interleave 32-bit integers from the high half of a and b, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpackhi_epi32 +FORCE_INLINE __m128i _mm_unpackhi_epi32(__m128i a, __m128i b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128i_s32( + vzip2q_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +#else + int32x2_t a1 = vget_high_s32(vreinterpretq_s32_m128i(a)); + int32x2_t b1 = vget_high_s32(vreinterpretq_s32_m128i(b)); + int32x2x2_t result = vzip_s32(a1, b1); + return vreinterpretq_m128i_s32(vcombine_s32(result.val[0], result.val[1])); +#endif +} + +// Unpack and interleave 64-bit integers from the high half of a and b, and +// store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpackhi_epi64 +FORCE_INLINE __m128i _mm_unpackhi_epi64(__m128i a, __m128i b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128i_s64( + vzip2q_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b))); +#else + int64x1_t a_h = vget_high_s64(vreinterpretq_s64_m128i(a)); + int64x1_t b_h = vget_high_s64(vreinterpretq_s64_m128i(b)); + return vreinterpretq_m128i_s64(vcombine_s64(a_h, b_h)); +#endif +} + +// Unpack and interleave 8-bit integers from the high half of a and b, and store +// the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpackhi_epi8 +FORCE_INLINE __m128i _mm_unpackhi_epi8(__m128i a, __m128i b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128i_s8( + vzip2q_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +#else + int8x8_t a1 = + vreinterpret_s8_s16(vget_high_s16(vreinterpretq_s16_m128i(a))); + int8x8_t b1 = + vreinterpret_s8_s16(vget_high_s16(vreinterpretq_s16_m128i(b))); + int8x8x2_t result = vzip_s8(a1, b1); + return vreinterpretq_m128i_s8(vcombine_s8(result.val[0], result.val[1])); +#endif +} + +// Unpack and interleave double-precision (64-bit) floating-point elements from +// the high half of a and b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpackhi_pd +FORCE_INLINE __m128d _mm_unpackhi_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_f64( + vzip2q_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#else + return vreinterpretq_m128d_s64( + vcombine_s64(vget_high_s64(vreinterpretq_s64_m128d(a)), + vget_high_s64(vreinterpretq_s64_m128d(b)))); +#endif +} + +// Unpack and interleave 16-bit integers from the low half of a and b, and store +// the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpacklo_epi16 +FORCE_INLINE __m128i _mm_unpacklo_epi16(__m128i a, __m128i b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128i_s16( + vzip1q_s16(vreinterpretq_s16_m128i(a), vreinterpretq_s16_m128i(b))); +#else + int16x4_t a1 = vget_low_s16(vreinterpretq_s16_m128i(a)); + int16x4_t b1 = vget_low_s16(vreinterpretq_s16_m128i(b)); + int16x4x2_t result = vzip_s16(a1, b1); + return vreinterpretq_m128i_s16(vcombine_s16(result.val[0], result.val[1])); +#endif +} + +// Unpack and interleave 32-bit integers from the low half of a and b, and store +// the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpacklo_epi32 +FORCE_INLINE __m128i _mm_unpacklo_epi32(__m128i a, __m128i b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128i_s32( + vzip1q_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +#else + int32x2_t a1 = vget_low_s32(vreinterpretq_s32_m128i(a)); + int32x2_t b1 = vget_low_s32(vreinterpretq_s32_m128i(b)); + int32x2x2_t result = vzip_s32(a1, b1); + return vreinterpretq_m128i_s32(vcombine_s32(result.val[0], result.val[1])); +#endif +} + +// Unpack and interleave 64-bit integers from the low half of a and b, and store +// the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpacklo_epi64 +FORCE_INLINE __m128i _mm_unpacklo_epi64(__m128i a, __m128i b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128i_s64( + vzip1q_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b))); +#else + int64x1_t a_l = vget_low_s64(vreinterpretq_s64_m128i(a)); + int64x1_t b_l = vget_low_s64(vreinterpretq_s64_m128i(b)); + return vreinterpretq_m128i_s64(vcombine_s64(a_l, b_l)); +#endif +} + +// Unpack and interleave 8-bit integers from the low half of a and b, and store +// the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpacklo_epi8 +FORCE_INLINE __m128i _mm_unpacklo_epi8(__m128i a, __m128i b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128i_s8( + vzip1q_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +#else + int8x8_t a1 = vreinterpret_s8_s16(vget_low_s16(vreinterpretq_s16_m128i(a))); + int8x8_t b1 = vreinterpret_s8_s16(vget_low_s16(vreinterpretq_s16_m128i(b))); + int8x8x2_t result = vzip_s8(a1, b1); + return vreinterpretq_m128i_s8(vcombine_s8(result.val[0], result.val[1])); +#endif +} + +// Unpack and interleave double-precision (64-bit) floating-point elements from +// the low half of a and b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpacklo_pd +FORCE_INLINE __m128d _mm_unpacklo_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_f64( + vzip1q_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#else + return vreinterpretq_m128d_s64( + vcombine_s64(vget_low_s64(vreinterpretq_s64_m128d(a)), + vget_low_s64(vreinterpretq_s64_m128d(b)))); +#endif +} + +// Compute the bitwise XOR of packed double-precision (64-bit) floating-point +// elements in a and b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_xor_pd +FORCE_INLINE __m128d _mm_xor_pd(__m128d a, __m128d b) +{ + return vreinterpretq_m128d_s64( + veorq_s64(vreinterpretq_s64_m128d(a), vreinterpretq_s64_m128d(b))); +} + +// Compute the bitwise XOR of 128 bits (representing integer data) in a and b, +// and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_xor_si128 +FORCE_INLINE __m128i _mm_xor_si128(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + veorq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +/* SSE3 */ + +// Alternatively add and subtract packed double-precision (64-bit) +// floating-point elements in a to/from packed elements in b, and store the +// results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_addsub_pd +FORCE_INLINE __m128d _mm_addsub_pd(__m128d a, __m128d b) +{ + _sse2neon_const __m128d mask = _mm_set_pd(1.0f, -1.0f); +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_f64(vfmaq_f64(vreinterpretq_f64_m128d(a), + vreinterpretq_f64_m128d(b), + vreinterpretq_f64_m128d(mask))); +#else + return _mm_add_pd(_mm_mul_pd(b, mask), a); +#endif +} + +// Alternatively add and subtract packed single-precision (32-bit) +// floating-point elements in a to/from packed elements in b, and store the +// results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=addsub_ps +FORCE_INLINE __m128 _mm_addsub_ps(__m128 a, __m128 b) +{ + _sse2neon_const __m128 mask = _mm_setr_ps(-1.0f, 1.0f, -1.0f, 1.0f); +#if (defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC)) || \ + defined(__ARM_FEATURE_FMA) /* VFPv4+ */ + return vreinterpretq_m128_f32(vfmaq_f32(vreinterpretq_f32_m128(a), + vreinterpretq_f32_m128(mask), + vreinterpretq_f32_m128(b))); +#else + return _mm_add_ps(_mm_mul_ps(b, mask), a); +#endif +} + +// Horizontally add adjacent pairs of double-precision (64-bit) floating-point +// elements in a and b, and pack the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadd_pd +FORCE_INLINE __m128d _mm_hadd_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_f64( + vpaddq_f64(vreinterpretq_f64_m128d(a), vreinterpretq_f64_m128d(b))); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + double c[] = {a0 + a1, b0 + b1}; + return vreinterpretq_m128d_u64(vld1q_u64((uint64_t *) c)); +#endif +} + +// Horizontally add adjacent pairs of single-precision (32-bit) floating-point +// elements in a and b, and pack the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadd_ps +FORCE_INLINE __m128 _mm_hadd_ps(__m128 a, __m128 b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128_f32( + vpaddq_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(b))); +#else + float32x2_t a10 = vget_low_f32(vreinterpretq_f32_m128(a)); + float32x2_t a32 = vget_high_f32(vreinterpretq_f32_m128(a)); + float32x2_t b10 = vget_low_f32(vreinterpretq_f32_m128(b)); + float32x2_t b32 = vget_high_f32(vreinterpretq_f32_m128(b)); + return vreinterpretq_m128_f32( + vcombine_f32(vpadd_f32(a10, a32), vpadd_f32(b10, b32))); +#endif +} + +// Horizontally subtract adjacent pairs of double-precision (64-bit) +// floating-point elements in a and b, and pack the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hsub_pd +FORCE_INLINE __m128d _mm_hsub_pd(__m128d a, __m128d b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + float64x2_t _a = vreinterpretq_f64_m128d(a); + float64x2_t _b = vreinterpretq_f64_m128d(b); + return vreinterpretq_m128d_f64( + vsubq_f64(vuzp1q_f64(_a, _b), vuzp2q_f64(_a, _b))); +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + double c[] = {a0 - a1, b0 - b1}; + return vreinterpretq_m128d_u64(vld1q_u64((uint64_t *) c)); +#endif +} + +// Horizontally subtract adjacent pairs of single-precision (32-bit) +// floating-point elements in a and b, and pack the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hsub_ps +FORCE_INLINE __m128 _mm_hsub_ps(__m128 _a, __m128 _b) +{ + float32x4_t a = vreinterpretq_f32_m128(_a); + float32x4_t b = vreinterpretq_f32_m128(_b); +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128_f32( + vsubq_f32(vuzp1q_f32(a, b), vuzp2q_f32(a, b))); +#else + float32x4x2_t c = vuzpq_f32(a, b); + return vreinterpretq_m128_f32(vsubq_f32(c.val[0], c.val[1])); +#endif +} + +// Load 128-bits of integer data from unaligned memory into dst. This intrinsic +// may perform better than _mm_loadu_si128 when the data crosses a cache line +// boundary. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_lddqu_si128 +#define _mm_lddqu_si128 _mm_loadu_si128 + +// Load a double-precision (64-bit) floating-point element from memory into both +// elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loaddup_pd +#define _mm_loaddup_pd _mm_load1_pd + +// Duplicate the low double-precision (64-bit) floating-point element from a, +// and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movedup_pd +FORCE_INLINE __m128d _mm_movedup_pd(__m128d a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_f64( + vdupq_laneq_f64(vreinterpretq_f64_m128d(a), 0)); +#else + return vreinterpretq_m128d_u64( + vdupq_n_u64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0))); +#endif +} + +// Duplicate odd-indexed single-precision (32-bit) floating-point elements +// from a, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movehdup_ps +FORCE_INLINE __m128 _mm_movehdup_ps(__m128 a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128_f32( + vtrn2q_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a))); +#elif defined(_sse2neon_shuffle) + return vreinterpretq_m128_f32(vshuffleq_s32( + vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a), 1, 1, 3, 3)); +#else + float32_t a1 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 1); + float32_t a3 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 3); + float ALIGN_STRUCT(16) data[4] = {a1, a1, a3, a3}; + return vreinterpretq_m128_f32(vld1q_f32(data)); +#endif +} + +// Duplicate even-indexed single-precision (32-bit) floating-point elements +// from a, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_moveldup_ps +FORCE_INLINE __m128 _mm_moveldup_ps(__m128 a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128_f32( + vtrn1q_f32(vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a))); +#elif defined(_sse2neon_shuffle) + return vreinterpretq_m128_f32(vshuffleq_s32( + vreinterpretq_f32_m128(a), vreinterpretq_f32_m128(a), 0, 0, 2, 2)); +#else + float32_t a0 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 0); + float32_t a2 = vgetq_lane_f32(vreinterpretq_f32_m128(a), 2); + float ALIGN_STRUCT(16) data[4] = {a0, a0, a2, a2}; + return vreinterpretq_m128_f32(vld1q_f32(data)); +#endif +} + +/* SSSE3 */ + +// Compute the absolute value of packed signed 16-bit integers in a, and store +// the unsigned results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_abs_epi16 +FORCE_INLINE __m128i _mm_abs_epi16(__m128i a) +{ + return vreinterpretq_m128i_s16(vabsq_s16(vreinterpretq_s16_m128i(a))); +} + +// Compute the absolute value of packed signed 32-bit integers in a, and store +// the unsigned results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_abs_epi32 +FORCE_INLINE __m128i _mm_abs_epi32(__m128i a) +{ + return vreinterpretq_m128i_s32(vabsq_s32(vreinterpretq_s32_m128i(a))); +} + +// Compute the absolute value of packed signed 8-bit integers in a, and store +// the unsigned results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_abs_epi8 +FORCE_INLINE __m128i _mm_abs_epi8(__m128i a) +{ + return vreinterpretq_m128i_s8(vabsq_s8(vreinterpretq_s8_m128i(a))); +} + +// Compute the absolute value of packed signed 16-bit integers in a, and store +// the unsigned results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_abs_pi16 +FORCE_INLINE __m64 _mm_abs_pi16(__m64 a) +{ + return vreinterpret_m64_s16(vabs_s16(vreinterpret_s16_m64(a))); +} + +// Compute the absolute value of packed signed 32-bit integers in a, and store +// the unsigned results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_abs_pi32 +FORCE_INLINE __m64 _mm_abs_pi32(__m64 a) +{ + return vreinterpret_m64_s32(vabs_s32(vreinterpret_s32_m64(a))); +} + +// Compute the absolute value of packed signed 8-bit integers in a, and store +// the unsigned results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_abs_pi8 +FORCE_INLINE __m64 _mm_abs_pi8(__m64 a) +{ + return vreinterpret_m64_s8(vabs_s8(vreinterpret_s8_m64(a))); +} + +// Concatenate 16-byte blocks in a and b into a 32-byte temporary result, shift +// the result right by imm8 bytes, and store the low 16 bytes in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_alignr_epi8 +#if defined(__GNUC__) && !defined(__clang__) +#define _mm_alignr_epi8(a, b, imm) \ + __extension__({ \ + uint8x16_t _a = vreinterpretq_u8_m128i(a); \ + uint8x16_t _b = vreinterpretq_u8_m128i(b); \ + __m128i ret; \ + if (_sse2neon_unlikely((imm) & ~31)) \ + ret = vreinterpretq_m128i_u8(vdupq_n_u8(0)); \ + else if ((imm) >= 16) \ + ret = _mm_srli_si128(a, (imm) >= 16 ? (imm) - 16 : 0); \ + else \ + ret = vreinterpretq_m128i_u8( \ + vextq_u8(_b, _a, (imm) < 16 ? (imm) : 0)); \ + ret; \ + }) + +#else +#define _mm_alignr_epi8(a, b, imm) \ + _sse2neon_define2( \ + __m128i, a, b, uint8x16_t __a = vreinterpretq_u8_m128i(_a); \ + uint8x16_t __b = vreinterpretq_u8_m128i(_b); __m128i ret; \ + if (_sse2neon_unlikely((imm) & ~31)) ret = \ + vreinterpretq_m128i_u8(vdupq_n_u8(0)); \ + else if ((imm) >= 16) ret = \ + _mm_srli_si128(_a, (imm) >= 16 ? (imm) - 16 : 0); \ + else ret = vreinterpretq_m128i_u8( \ + vextq_u8(__b, __a, (imm) < 16 ? (imm) : 0)); \ + _sse2neon_return(ret);) + +#endif + +// Concatenate 8-byte blocks in a and b into a 16-byte temporary result, shift +// the result right by imm8 bytes, and store the low 8 bytes in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_alignr_pi8 +#define _mm_alignr_pi8(a, b, imm) \ + _sse2neon_define2( \ + __m64, a, b, __m64 ret; if (_sse2neon_unlikely((imm) >= 16)) { \ + ret = vreinterpret_m64_s8(vdup_n_s8(0)); \ + } else { \ + uint8x8_t tmp_low; \ + uint8x8_t tmp_high; \ + if ((imm) >= 8) { \ + const int idx = (imm) - 8; \ + tmp_low = vreinterpret_u8_m64(_a); \ + tmp_high = vdup_n_u8(0); \ + ret = vreinterpret_m64_u8(vext_u8(tmp_low, tmp_high, idx)); \ + } else { \ + const int idx = (imm); \ + tmp_low = vreinterpret_u8_m64(_b); \ + tmp_high = vreinterpret_u8_m64(_a); \ + ret = vreinterpret_m64_u8(vext_u8(tmp_low, tmp_high, idx)); \ + } \ + } _sse2neon_return(ret);) + +// Horizontally add adjacent pairs of 16-bit integers in a and b, and pack the +// signed 16-bit results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadd_epi16 +FORCE_INLINE __m128i _mm_hadd_epi16(__m128i _a, __m128i _b) +{ + int16x8_t a = vreinterpretq_s16_m128i(_a); + int16x8_t b = vreinterpretq_s16_m128i(_b); +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128i_s16(vpaddq_s16(a, b)); +#else + return vreinterpretq_m128i_s16( + vcombine_s16(vpadd_s16(vget_low_s16(a), vget_high_s16(a)), + vpadd_s16(vget_low_s16(b), vget_high_s16(b)))); +#endif +} + +// Horizontally add adjacent pairs of 32-bit integers in a and b, and pack the +// signed 32-bit results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadd_epi32 +FORCE_INLINE __m128i _mm_hadd_epi32(__m128i _a, __m128i _b) +{ + int32x4_t a = vreinterpretq_s32_m128i(_a); + int32x4_t b = vreinterpretq_s32_m128i(_b); +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128i_s32(vpaddq_s32(a, b)); +#else + return vreinterpretq_m128i_s32( + vcombine_s32(vpadd_s32(vget_low_s32(a), vget_high_s32(a)), + vpadd_s32(vget_low_s32(b), vget_high_s32(b)))); +#endif +} + +// Horizontally add adjacent pairs of 16-bit integers in a and b, and pack the +// signed 16-bit results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadd_pi16 +FORCE_INLINE __m64 _mm_hadd_pi16(__m64 a, __m64 b) +{ + return vreinterpret_m64_s16( + vpadd_s16(vreinterpret_s16_m64(a), vreinterpret_s16_m64(b))); +} + +// Horizontally add adjacent pairs of 32-bit integers in a and b, and pack the +// signed 32-bit results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadd_pi32 +FORCE_INLINE __m64 _mm_hadd_pi32(__m64 a, __m64 b) +{ + return vreinterpret_m64_s32( + vpadd_s32(vreinterpret_s32_m64(a), vreinterpret_s32_m64(b))); +} + +// Horizontally add adjacent pairs of signed 16-bit integers in a and b using +// saturation, and pack the signed 16-bit results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadds_epi16 +FORCE_INLINE __m128i _mm_hadds_epi16(__m128i _a, __m128i _b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + int16x8_t a = vreinterpretq_s16_m128i(_a); + int16x8_t b = vreinterpretq_s16_m128i(_b); + return vreinterpretq_s64_s16( + vqaddq_s16(vuzp1q_s16(a, b), vuzp2q_s16(a, b))); +#else + int32x4_t a = vreinterpretq_s32_m128i(_a); + int32x4_t b = vreinterpretq_s32_m128i(_b); + // Interleave using vshrn/vmovn + // [a0|a2|a4|a6|b0|b2|b4|b6] + // [a1|a3|a5|a7|b1|b3|b5|b7] + int16x8_t ab0246 = vcombine_s16(vmovn_s32(a), vmovn_s32(b)); + int16x8_t ab1357 = vcombine_s16(vshrn_n_s32(a, 16), vshrn_n_s32(b, 16)); + // Saturated add + return vreinterpretq_m128i_s16(vqaddq_s16(ab0246, ab1357)); +#endif +} + +// Horizontally add adjacent pairs of signed 16-bit integers in a and b using +// saturation, and pack the signed 16-bit results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hadds_pi16 +FORCE_INLINE __m64 _mm_hadds_pi16(__m64 _a, __m64 _b) +{ + int16x4_t a = vreinterpret_s16_m64(_a); + int16x4_t b = vreinterpret_s16_m64(_b); +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpret_s64_s16(vqadd_s16(vuzp1_s16(a, b), vuzp2_s16(a, b))); +#else + int16x4x2_t res = vuzp_s16(a, b); + return vreinterpret_s64_s16(vqadd_s16(res.val[0], res.val[1])); +#endif +} + +// Horizontally subtract adjacent pairs of 16-bit integers in a and b, and pack +// the signed 16-bit results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hsub_epi16 +FORCE_INLINE __m128i _mm_hsub_epi16(__m128i _a, __m128i _b) +{ + int16x8_t a = vreinterpretq_s16_m128i(_a); + int16x8_t b = vreinterpretq_s16_m128i(_b); +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128i_s16( + vsubq_s16(vuzp1q_s16(a, b), vuzp2q_s16(a, b))); +#else + int16x8x2_t c = vuzpq_s16(a, b); + return vreinterpretq_m128i_s16(vsubq_s16(c.val[0], c.val[1])); +#endif +} + +// Horizontally subtract adjacent pairs of 32-bit integers in a and b, and pack +// the signed 32-bit results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hsub_epi32 +FORCE_INLINE __m128i _mm_hsub_epi32(__m128i _a, __m128i _b) +{ + int32x4_t a = vreinterpretq_s32_m128i(_a); + int32x4_t b = vreinterpretq_s32_m128i(_b); +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128i_s32( + vsubq_s32(vuzp1q_s32(a, b), vuzp2q_s32(a, b))); +#else + int32x4x2_t c = vuzpq_s32(a, b); + return vreinterpretq_m128i_s32(vsubq_s32(c.val[0], c.val[1])); +#endif +} + +// Horizontally subtract adjacent pairs of 16-bit integers in a and b, and pack +// the signed 16-bit results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hsub_pi16 +FORCE_INLINE __m64 _mm_hsub_pi16(__m64 _a, __m64 _b) +{ + int16x4_t a = vreinterpret_s16_m64(_a); + int16x4_t b = vreinterpret_s16_m64(_b); +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpret_m64_s16(vsub_s16(vuzp1_s16(a, b), vuzp2_s16(a, b))); +#else + int16x4x2_t c = vuzp_s16(a, b); + return vreinterpret_m64_s16(vsub_s16(c.val[0], c.val[1])); +#endif +} + +// Horizontally subtract adjacent pairs of 32-bit integers in a and b, and pack +// the signed 32-bit results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=mm_hsub_pi32 +FORCE_INLINE __m64 _mm_hsub_pi32(__m64 _a, __m64 _b) +{ + int32x2_t a = vreinterpret_s32_m64(_a); + int32x2_t b = vreinterpret_s32_m64(_b); +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpret_m64_s32(vsub_s32(vuzp1_s32(a, b), vuzp2_s32(a, b))); +#else + int32x2x2_t c = vuzp_s32(a, b); + return vreinterpret_m64_s32(vsub_s32(c.val[0], c.val[1])); +#endif +} + +// Horizontally subtract adjacent pairs of signed 16-bit integers in a and b +// using saturation, and pack the signed 16-bit results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hsubs_epi16 +FORCE_INLINE __m128i _mm_hsubs_epi16(__m128i _a, __m128i _b) +{ + int16x8_t a = vreinterpretq_s16_m128i(_a); + int16x8_t b = vreinterpretq_s16_m128i(_b); +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128i_s16( + vqsubq_s16(vuzp1q_s16(a, b), vuzp2q_s16(a, b))); +#else + int16x8x2_t c = vuzpq_s16(a, b); + return vreinterpretq_m128i_s16(vqsubq_s16(c.val[0], c.val[1])); +#endif +} + +// Horizontally subtract adjacent pairs of signed 16-bit integers in a and b +// using saturation, and pack the signed 16-bit results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_hsubs_pi16 +FORCE_INLINE __m64 _mm_hsubs_pi16(__m64 _a, __m64 _b) +{ + int16x4_t a = vreinterpret_s16_m64(_a); + int16x4_t b = vreinterpret_s16_m64(_b); +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpret_m64_s16(vqsub_s16(vuzp1_s16(a, b), vuzp2_s16(a, b))); +#else + int16x4x2_t c = vuzp_s16(a, b); + return vreinterpret_m64_s16(vqsub_s16(c.val[0], c.val[1])); +#endif +} + +// Vertically multiply each unsigned 8-bit integer from a with the corresponding +// signed 8-bit integer from b, producing intermediate signed 16-bit integers. +// Horizontally add adjacent pairs of intermediate signed 16-bit integers, +// and pack the saturated results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maddubs_epi16 +FORCE_INLINE __m128i _mm_maddubs_epi16(__m128i _a, __m128i _b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + uint8x16_t a = vreinterpretq_u8_m128i(_a); + int8x16_t b = vreinterpretq_s8_m128i(_b); + int16x8_t tl = vmulq_s16(vreinterpretq_s16_u16(vmovl_u8(vget_low_u8(a))), + vmovl_s8(vget_low_s8(b))); + int16x8_t th = vmulq_s16(vreinterpretq_s16_u16(vmovl_u8(vget_high_u8(a))), + vmovl_s8(vget_high_s8(b))); + return vreinterpretq_m128i_s16( + vqaddq_s16(vuzp1q_s16(tl, th), vuzp2q_s16(tl, th))); +#else + // This would be much simpler if x86 would choose to zero extend OR sign + // extend, not both. This could probably be optimized better. + uint16x8_t a = vreinterpretq_u16_m128i(_a); + int16x8_t b = vreinterpretq_s16_m128i(_b); + + // Zero extend a + int16x8_t a_odd = vreinterpretq_s16_u16(vshrq_n_u16(a, 8)); + int16x8_t a_even = vreinterpretq_s16_u16(vbicq_u16(a, vdupq_n_u16(0xff00))); + + // Sign extend by shifting left then shifting right. + int16x8_t b_even = vshrq_n_s16(vshlq_n_s16(b, 8), 8); + int16x8_t b_odd = vshrq_n_s16(b, 8); + + // multiply + int16x8_t prod1 = vmulq_s16(a_even, b_even); + int16x8_t prod2 = vmulq_s16(a_odd, b_odd); + + // saturated add + return vreinterpretq_m128i_s16(vqaddq_s16(prod1, prod2)); +#endif +} + +// Vertically multiply each unsigned 8-bit integer from a with the corresponding +// signed 8-bit integer from b, producing intermediate signed 16-bit integers. +// Horizontally add adjacent pairs of intermediate signed 16-bit integers, and +// pack the saturated results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maddubs_pi16 +FORCE_INLINE __m64 _mm_maddubs_pi16(__m64 _a, __m64 _b) +{ + uint16x4_t a = vreinterpret_u16_m64(_a); + int16x4_t b = vreinterpret_s16_m64(_b); + + // Zero extend a + int16x4_t a_odd = vreinterpret_s16_u16(vshr_n_u16(a, 8)); + int16x4_t a_even = vreinterpret_s16_u16(vand_u16(a, vdup_n_u16(0xff))); + + // Sign extend by shifting left then shifting right. + int16x4_t b_even = vshr_n_s16(vshl_n_s16(b, 8), 8); + int16x4_t b_odd = vshr_n_s16(b, 8); + + // multiply + int16x4_t prod1 = vmul_s16(a_even, b_even); + int16x4_t prod2 = vmul_s16(a_odd, b_odd); + + // saturated add + return vreinterpret_m64_s16(vqadd_s16(prod1, prod2)); +} + +// Multiply packed signed 16-bit integers in a and b, producing intermediate +// signed 32-bit integers. Shift right by 15 bits while rounding up, and store +// the packed 16-bit integers in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mulhrs_epi16 +FORCE_INLINE __m128i _mm_mulhrs_epi16(__m128i a, __m128i b) +{ + // Has issues due to saturation + // return vreinterpretq_m128i_s16(vqrdmulhq_s16(a, b)); + + // Multiply + int32x4_t mul_lo = vmull_s16(vget_low_s16(vreinterpretq_s16_m128i(a)), + vget_low_s16(vreinterpretq_s16_m128i(b))); + int32x4_t mul_hi = vmull_s16(vget_high_s16(vreinterpretq_s16_m128i(a)), + vget_high_s16(vreinterpretq_s16_m128i(b))); + + // Rounding narrowing shift right + // narrow = (int16_t)((mul + 16384) >> 15); + int16x4_t narrow_lo = vrshrn_n_s32(mul_lo, 15); + int16x4_t narrow_hi = vrshrn_n_s32(mul_hi, 15); + + // Join together + return vreinterpretq_m128i_s16(vcombine_s16(narrow_lo, narrow_hi)); +} + +// Multiply packed signed 16-bit integers in a and b, producing intermediate +// signed 32-bit integers. Truncate each intermediate integer to the 18 most +// significant bits, round by adding 1, and store bits [16:1] to dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mulhrs_pi16 +FORCE_INLINE __m64 _mm_mulhrs_pi16(__m64 a, __m64 b) +{ + int32x4_t mul_extend = + vmull_s16((vreinterpret_s16_m64(a)), (vreinterpret_s16_m64(b))); + + // Rounding narrowing shift right + return vreinterpret_m64_s16(vrshrn_n_s32(mul_extend, 15)); +} + +// Shuffle packed 8-bit integers in a according to shuffle control mask in the +// corresponding 8-bit element of b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shuffle_epi8 +FORCE_INLINE __m128i _mm_shuffle_epi8(__m128i a, __m128i b) +{ + int8x16_t tbl = vreinterpretq_s8_m128i(a); // input a + uint8x16_t idx = vreinterpretq_u8_m128i(b); // input b + uint8x16_t idx_masked = + vandq_u8(idx, vdupq_n_u8(0x8F)); // avoid using meaningless bits +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128i_s8(vqtbl1q_s8(tbl, idx_masked)); +#elif defined(__GNUC__) + int8x16_t ret; + // %e and %f represent the even and odd D registers + // respectively. + __asm__ __volatile__( + "vtbl.8 %e[ret], {%e[tbl], %f[tbl]}, %e[idx]\n" + "vtbl.8 %f[ret], {%e[tbl], %f[tbl]}, %f[idx]\n" + : [ret] "=&w"(ret) + : [tbl] "w"(tbl), [idx] "w"(idx_masked)); + return vreinterpretq_m128i_s8(ret); +#else + // use this line if testing on aarch64 + int8x8x2_t a_split = {vget_low_s8(tbl), vget_high_s8(tbl)}; + return vreinterpretq_m128i_s8( + vcombine_s8(vtbl2_s8(a_split, vget_low_u8(idx_masked)), + vtbl2_s8(a_split, vget_high_u8(idx_masked)))); +#endif +} + +// Shuffle packed 8-bit integers in a according to shuffle control mask in the +// corresponding 8-bit element of b, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_shuffle_pi8 +FORCE_INLINE __m64 _mm_shuffle_pi8(__m64 a, __m64 b) +{ + const int8x8_t controlMask = + vand_s8(vreinterpret_s8_m64(b), vdup_n_s8((int8_t) (0x1 << 7 | 0x07))); + int8x8_t res = vtbl1_s8(vreinterpret_s8_m64(a), controlMask); + return vreinterpret_m64_s8(res); +} + +// Negate packed 16-bit integers in a when the corresponding signed +// 16-bit integer in b is negative, and store the results in dst. +// Element in dst are zeroed out when the corresponding element +// in b is zero. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sign_epi16 +FORCE_INLINE __m128i _mm_sign_epi16(__m128i _a, __m128i _b) +{ + int16x8_t a = vreinterpretq_s16_m128i(_a); + int16x8_t b = vreinterpretq_s16_m128i(_b); + + // signed shift right: faster than vclt + // (b < 0) ? 0xFFFF : 0 + uint16x8_t ltMask = vreinterpretq_u16_s16(vshrq_n_s16(b, 15)); + // (b == 0) ? 0xFFFF : 0 +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + int16x8_t zeroMask = vreinterpretq_s16_u16(vceqzq_s16(b)); +#else + int16x8_t zeroMask = vreinterpretq_s16_u16(vceqq_s16(b, vdupq_n_s16(0))); +#endif + + // bitwise select either a or negative 'a' (vnegq_s16(a) equals to negative + // 'a') based on ltMask + int16x8_t masked = vbslq_s16(ltMask, vnegq_s16(a), a); + // res = masked & (~zeroMask) + int16x8_t res = vbicq_s16(masked, zeroMask); + return vreinterpretq_m128i_s16(res); +} + +// Negate packed 32-bit integers in a when the corresponding signed +// 32-bit integer in b is negative, and store the results in dst. +// Element in dst are zeroed out when the corresponding element +// in b is zero. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sign_epi32 +FORCE_INLINE __m128i _mm_sign_epi32(__m128i _a, __m128i _b) +{ + int32x4_t a = vreinterpretq_s32_m128i(_a); + int32x4_t b = vreinterpretq_s32_m128i(_b); + + // signed shift right: faster than vclt + // (b < 0) ? 0xFFFFFFFF : 0 + uint32x4_t ltMask = vreinterpretq_u32_s32(vshrq_n_s32(b, 31)); + + // (b == 0) ? 0xFFFFFFFF : 0 +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + int32x4_t zeroMask = vreinterpretq_s32_u32(vceqzq_s32(b)); +#else + int32x4_t zeroMask = vreinterpretq_s32_u32(vceqq_s32(b, vdupq_n_s32(0))); +#endif + + // bitwise select either a or negative 'a' (vnegq_s32(a) equals to negative + // 'a') based on ltMask + int32x4_t masked = vbslq_s32(ltMask, vnegq_s32(a), a); + // res = masked & (~zeroMask) + int32x4_t res = vbicq_s32(masked, zeroMask); + return vreinterpretq_m128i_s32(res); +} + +// Negate packed 8-bit integers in a when the corresponding signed +// 8-bit integer in b is negative, and store the results in dst. +// Element in dst are zeroed out when the corresponding element +// in b is zero. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sign_epi8 +FORCE_INLINE __m128i _mm_sign_epi8(__m128i _a, __m128i _b) +{ + int8x16_t a = vreinterpretq_s8_m128i(_a); + int8x16_t b = vreinterpretq_s8_m128i(_b); + + // signed shift right: faster than vclt + // (b < 0) ? 0xFF : 0 + uint8x16_t ltMask = vreinterpretq_u8_s8(vshrq_n_s8(b, 7)); + + // (b == 0) ? 0xFF : 0 +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + int8x16_t zeroMask = vreinterpretq_s8_u8(vceqzq_s8(b)); +#else + int8x16_t zeroMask = vreinterpretq_s8_u8(vceqq_s8(b, vdupq_n_s8(0))); +#endif + + // bitwise select either a or negative 'a' (vnegq_s8(a) return negative 'a') + // based on ltMask + int8x16_t masked = vbslq_s8(ltMask, vnegq_s8(a), a); + // res = masked & (~zeroMask) + int8x16_t res = vbicq_s8(masked, zeroMask); + + return vreinterpretq_m128i_s8(res); +} + +// Negate packed 16-bit integers in a when the corresponding signed 16-bit +// integer in b is negative, and store the results in dst. Element in dst are +// zeroed out when the corresponding element in b is zero. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sign_pi16 +FORCE_INLINE __m64 _mm_sign_pi16(__m64 _a, __m64 _b) +{ + int16x4_t a = vreinterpret_s16_m64(_a); + int16x4_t b = vreinterpret_s16_m64(_b); + + // signed shift right: faster than vclt + // (b < 0) ? 0xFFFF : 0 + uint16x4_t ltMask = vreinterpret_u16_s16(vshr_n_s16(b, 15)); + + // (b == 0) ? 0xFFFF : 0 +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + int16x4_t zeroMask = vreinterpret_s16_u16(vceqz_s16(b)); +#else + int16x4_t zeroMask = vreinterpret_s16_u16(vceq_s16(b, vdup_n_s16(0))); +#endif + + // bitwise select either a or negative 'a' (vneg_s16(a) return negative 'a') + // based on ltMask + int16x4_t masked = vbsl_s16(ltMask, vneg_s16(a), a); + // res = masked & (~zeroMask) + int16x4_t res = vbic_s16(masked, zeroMask); + + return vreinterpret_m64_s16(res); +} + +// Negate packed 32-bit integers in a when the corresponding signed 32-bit +// integer in b is negative, and store the results in dst. Element in dst are +// zeroed out when the corresponding element in b is zero. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sign_pi32 +FORCE_INLINE __m64 _mm_sign_pi32(__m64 _a, __m64 _b) +{ + int32x2_t a = vreinterpret_s32_m64(_a); + int32x2_t b = vreinterpret_s32_m64(_b); + + // signed shift right: faster than vclt + // (b < 0) ? 0xFFFFFFFF : 0 + uint32x2_t ltMask = vreinterpret_u32_s32(vshr_n_s32(b, 31)); + + // (b == 0) ? 0xFFFFFFFF : 0 +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + int32x2_t zeroMask = vreinterpret_s32_u32(vceqz_s32(b)); +#else + int32x2_t zeroMask = vreinterpret_s32_u32(vceq_s32(b, vdup_n_s32(0))); +#endif + + // bitwise select either a or negative 'a' (vneg_s32(a) return negative 'a') + // based on ltMask + int32x2_t masked = vbsl_s32(ltMask, vneg_s32(a), a); + // res = masked & (~zeroMask) + int32x2_t res = vbic_s32(masked, zeroMask); + + return vreinterpret_m64_s32(res); +} + +// Negate packed 8-bit integers in a when the corresponding signed 8-bit integer +// in b is negative, and store the results in dst. Element in dst are zeroed out +// when the corresponding element in b is zero. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sign_pi8 +FORCE_INLINE __m64 _mm_sign_pi8(__m64 _a, __m64 _b) +{ + int8x8_t a = vreinterpret_s8_m64(_a); + int8x8_t b = vreinterpret_s8_m64(_b); + + // signed shift right: faster than vclt + // (b < 0) ? 0xFF : 0 + uint8x8_t ltMask = vreinterpret_u8_s8(vshr_n_s8(b, 7)); + + // (b == 0) ? 0xFF : 0 +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + int8x8_t zeroMask = vreinterpret_s8_u8(vceqz_s8(b)); +#else + int8x8_t zeroMask = vreinterpret_s8_u8(vceq_s8(b, vdup_n_s8(0))); +#endif + + // bitwise select either a or negative 'a' (vneg_s8(a) return negative 'a') + // based on ltMask + int8x8_t masked = vbsl_s8(ltMask, vneg_s8(a), a); + // res = masked & (~zeroMask) + int8x8_t res = vbic_s8(masked, zeroMask); + + return vreinterpret_m64_s8(res); +} + +/* SSE4.1 */ + +// Blend packed 16-bit integers from a and b using control mask imm8, and store +// the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_blend_epi16 +// FORCE_INLINE __m128i _mm_blend_epi16(__m128i a, __m128i b, +// __constrange(0,255) int imm) +#define _mm_blend_epi16(a, b, imm) \ + _sse2neon_define2( \ + __m128i, a, b, \ + const uint16_t _mask[8] = \ + _sse2neon_init(((imm) & (1 << 0)) ? (uint16_t) - 1 : 0x0, \ + ((imm) & (1 << 1)) ? (uint16_t) - 1 : 0x0, \ + ((imm) & (1 << 2)) ? (uint16_t) - 1 : 0x0, \ + ((imm) & (1 << 3)) ? (uint16_t) - 1 : 0x0, \ + ((imm) & (1 << 4)) ? (uint16_t) - 1 : 0x0, \ + ((imm) & (1 << 5)) ? (uint16_t) - 1 : 0x0, \ + ((imm) & (1 << 6)) ? (uint16_t) - 1 : 0x0, \ + ((imm) & (1 << 7)) ? (uint16_t) - 1 : 0x0); \ + uint16x8_t _mask_vec = vld1q_u16(_mask); \ + uint16x8_t __a = vreinterpretq_u16_m128i(_a); \ + uint16x8_t __b = vreinterpretq_u16_m128i(_b); _sse2neon_return( \ + vreinterpretq_m128i_u16(vbslq_u16(_mask_vec, __b, __a)));) + +// Blend packed double-precision (64-bit) floating-point elements from a and b +// using control mask imm8, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_blend_pd +#define _mm_blend_pd(a, b, imm) \ + _sse2neon_define2( \ + __m128d, a, b, \ + const uint64_t _mask[2] = \ + _sse2neon_init(((imm) & (1 << 0)) ? ~UINT64_C(0) : UINT64_C(0), \ + ((imm) & (1 << 1)) ? ~UINT64_C(0) : UINT64_C(0)); \ + uint64x2_t _mask_vec = vld1q_u64(_mask); \ + uint64x2_t __a = vreinterpretq_u64_m128d(_a); \ + uint64x2_t __b = vreinterpretq_u64_m128d(_b); _sse2neon_return( \ + vreinterpretq_m128d_u64(vbslq_u64(_mask_vec, __b, __a)));) + +// Blend packed single-precision (32-bit) floating-point elements from a and b +// using mask, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_blend_ps +FORCE_INLINE __m128 _mm_blend_ps(__m128 _a, __m128 _b, const char imm8) +{ + const uint32_t ALIGN_STRUCT(16) data[4] = { + (imm8 & (1 << 0)) ? UINT32_MAX : 0, (imm8 & (1 << 1)) ? UINT32_MAX : 0, + (imm8 & (1 << 2)) ? UINT32_MAX : 0, (imm8 & (1 << 3)) ? UINT32_MAX : 0}; + uint32x4_t mask = vld1q_u32(data); + float32x4_t a = vreinterpretq_f32_m128(_a); + float32x4_t b = vreinterpretq_f32_m128(_b); + return vreinterpretq_m128_f32(vbslq_f32(mask, b, a)); +} + +// Blend packed 8-bit integers from a and b using mask, and store the results in +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_blendv_epi8 +FORCE_INLINE __m128i _mm_blendv_epi8(__m128i _a, __m128i _b, __m128i _mask) +{ + // Use a signed shift right to create a mask with the sign bit + uint8x16_t mask = + vreinterpretq_u8_s8(vshrq_n_s8(vreinterpretq_s8_m128i(_mask), 7)); + uint8x16_t a = vreinterpretq_u8_m128i(_a); + uint8x16_t b = vreinterpretq_u8_m128i(_b); + return vreinterpretq_m128i_u8(vbslq_u8(mask, b, a)); +} + +// Blend packed double-precision (64-bit) floating-point elements from a and b +// using mask, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_blendv_pd +FORCE_INLINE __m128d _mm_blendv_pd(__m128d _a, __m128d _b, __m128d _mask) +{ + uint64x2_t mask = + vreinterpretq_u64_s64(vshrq_n_s64(vreinterpretq_s64_m128d(_mask), 63)); +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + float64x2_t a = vreinterpretq_f64_m128d(_a); + float64x2_t b = vreinterpretq_f64_m128d(_b); + return vreinterpretq_m128d_f64(vbslq_f64(mask, b, a)); +#else + uint64x2_t a = vreinterpretq_u64_m128d(_a); + uint64x2_t b = vreinterpretq_u64_m128d(_b); + return vreinterpretq_m128d_u64(vbslq_u64(mask, b, a)); +#endif +} + +// Blend packed single-precision (32-bit) floating-point elements from a and b +// using mask, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_blendv_ps +FORCE_INLINE __m128 _mm_blendv_ps(__m128 _a, __m128 _b, __m128 _mask) +{ + // Use a signed shift right to create a mask with the sign bit + uint32x4_t mask = + vreinterpretq_u32_s32(vshrq_n_s32(vreinterpretq_s32_m128(_mask), 31)); + float32x4_t a = vreinterpretq_f32_m128(_a); + float32x4_t b = vreinterpretq_f32_m128(_b); + return vreinterpretq_m128_f32(vbslq_f32(mask, b, a)); +} + +// Round the packed double-precision (64-bit) floating-point elements in a up +// to an integer value, and store the results as packed double-precision +// floating-point elements in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_ceil_pd +FORCE_INLINE __m128d _mm_ceil_pd(__m128d a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_f64(vrndpq_f64(vreinterpretq_f64_m128d(a))); +#else + double a0, a1; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + a1 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + return _mm_set_pd(ceil(a1), ceil(a0)); +#endif +} + +// Round the packed single-precision (32-bit) floating-point elements in a up to +// an integer value, and store the results as packed single-precision +// floating-point elements in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_ceil_ps +FORCE_INLINE __m128 _mm_ceil_ps(__m128 a) +{ +#if (defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC)) || \ + defined(__ARM_FEATURE_DIRECTED_ROUNDING) + return vreinterpretq_m128_f32(vrndpq_f32(vreinterpretq_f32_m128(a))); +#else + float *f = (float *) &a; + return _mm_set_ps(ceilf(f[3]), ceilf(f[2]), ceilf(f[1]), ceilf(f[0])); +#endif +} + +// Round the lower double-precision (64-bit) floating-point element in b up to +// an integer value, store the result as a double-precision floating-point +// element in the lower element of dst, and copy the upper element from a to the +// upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_ceil_sd +FORCE_INLINE __m128d _mm_ceil_sd(__m128d a, __m128d b) +{ + return _mm_move_sd(a, _mm_ceil_pd(b)); +} + +// Round the lower single-precision (32-bit) floating-point element in b up to +// an integer value, store the result as a single-precision floating-point +// element in the lower element of dst, and copy the upper 3 packed elements +// from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_ceil_ss +FORCE_INLINE __m128 _mm_ceil_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_ceil_ps(b)); +} + +// Compare packed 64-bit integers in a and b for equality, and store the results +// in dst +FORCE_INLINE __m128i _mm_cmpeq_epi64(__m128i a, __m128i b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128i_u64( + vceqq_u64(vreinterpretq_u64_m128i(a), vreinterpretq_u64_m128i(b))); +#else + // ARMv7 lacks vceqq_u64 + // (a == b) -> (a_lo == b_lo) && (a_hi == b_hi) + uint32x4_t cmp = + vceqq_u32(vreinterpretq_u32_m128i(a), vreinterpretq_u32_m128i(b)); + uint32x4_t swapped = vrev64q_u32(cmp); + return vreinterpretq_m128i_u32(vandq_u32(cmp, swapped)); +#endif +} + +// Sign extend packed 16-bit integers in a to packed 32-bit integers, and store +// the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi16_epi32 +FORCE_INLINE __m128i _mm_cvtepi16_epi32(__m128i a) +{ + return vreinterpretq_m128i_s32( + vmovl_s16(vget_low_s16(vreinterpretq_s16_m128i(a)))); +} + +// Sign extend packed 16-bit integers in a to packed 64-bit integers, and store +// the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi16_epi64 +FORCE_INLINE __m128i _mm_cvtepi16_epi64(__m128i a) +{ + int16x8_t s16x8 = vreinterpretq_s16_m128i(a); /* xxxx xxxx xxxx 0B0A */ + int32x4_t s32x4 = vmovl_s16(vget_low_s16(s16x8)); /* 000x 000x 000B 000A */ + int64x2_t s64x2 = vmovl_s32(vget_low_s32(s32x4)); /* 0000 000B 0000 000A */ + return vreinterpretq_m128i_s64(s64x2); +} + +// Sign extend packed 32-bit integers in a to packed 64-bit integers, and store +// the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi32_epi64 +FORCE_INLINE __m128i _mm_cvtepi32_epi64(__m128i a) +{ + return vreinterpretq_m128i_s64( + vmovl_s32(vget_low_s32(vreinterpretq_s32_m128i(a)))); +} + +// Sign extend packed 8-bit integers in a to packed 16-bit integers, and store +// the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi8_epi16 +FORCE_INLINE __m128i _mm_cvtepi8_epi16(__m128i a) +{ + int8x16_t s8x16 = vreinterpretq_s8_m128i(a); /* xxxx xxxx xxxx DCBA */ + int16x8_t s16x8 = vmovl_s8(vget_low_s8(s8x16)); /* 0x0x 0x0x 0D0C 0B0A */ + return vreinterpretq_m128i_s16(s16x8); +} + +// Sign extend packed 8-bit integers in a to packed 32-bit integers, and store +// the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi8_epi32 +FORCE_INLINE __m128i _mm_cvtepi8_epi32(__m128i a) +{ + int8x16_t s8x16 = vreinterpretq_s8_m128i(a); /* xxxx xxxx xxxx DCBA */ + int16x8_t s16x8 = vmovl_s8(vget_low_s8(s8x16)); /* 0x0x 0x0x 0D0C 0B0A */ + int32x4_t s32x4 = vmovl_s16(vget_low_s16(s16x8)); /* 000D 000C 000B 000A */ + return vreinterpretq_m128i_s32(s32x4); +} + +// Sign extend packed 8-bit integers in the low 8 bytes of a to packed 64-bit +// integers, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepi8_epi64 +FORCE_INLINE __m128i _mm_cvtepi8_epi64(__m128i a) +{ + int8x16_t s8x16 = vreinterpretq_s8_m128i(a); /* xxxx xxxx xxxx xxBA */ + int16x8_t s16x8 = vmovl_s8(vget_low_s8(s8x16)); /* 0x0x 0x0x 0x0x 0B0A */ + int32x4_t s32x4 = vmovl_s16(vget_low_s16(s16x8)); /* 000x 000x 000B 000A */ + int64x2_t s64x2 = vmovl_s32(vget_low_s32(s32x4)); /* 0000 000B 0000 000A */ + return vreinterpretq_m128i_s64(s64x2); +} + +// Zero extend packed unsigned 16-bit integers in a to packed 32-bit integers, +// and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepu16_epi32 +FORCE_INLINE __m128i _mm_cvtepu16_epi32(__m128i a) +{ + return vreinterpretq_m128i_u32( + vmovl_u16(vget_low_u16(vreinterpretq_u16_m128i(a)))); +} + +// Zero extend packed unsigned 16-bit integers in a to packed 64-bit integers, +// and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepu16_epi64 +FORCE_INLINE __m128i _mm_cvtepu16_epi64(__m128i a) +{ + uint16x8_t u16x8 = vreinterpretq_u16_m128i(a); /* xxxx xxxx xxxx 0B0A */ + uint32x4_t u32x4 = vmovl_u16(vget_low_u16(u16x8)); /* 000x 000x 000B 000A */ + uint64x2_t u64x2 = vmovl_u32(vget_low_u32(u32x4)); /* 0000 000B 0000 000A */ + return vreinterpretq_m128i_u64(u64x2); +} + +// Zero extend packed unsigned 32-bit integers in a to packed 64-bit integers, +// and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepu32_epi64 +FORCE_INLINE __m128i _mm_cvtepu32_epi64(__m128i a) +{ + return vreinterpretq_m128i_u64( + vmovl_u32(vget_low_u32(vreinterpretq_u32_m128i(a)))); +} + +// Zero extend packed unsigned 8-bit integers in a to packed 16-bit integers, +// and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepu8_epi16 +FORCE_INLINE __m128i _mm_cvtepu8_epi16(__m128i a) +{ + uint8x16_t u8x16 = vreinterpretq_u8_m128i(a); /* xxxx xxxx HGFE DCBA */ + uint16x8_t u16x8 = vmovl_u8(vget_low_u8(u8x16)); /* 0H0G 0F0E 0D0C 0B0A */ + return vreinterpretq_m128i_u16(u16x8); +} + +// Zero extend packed unsigned 8-bit integers in a to packed 32-bit integers, +// and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepu8_epi32 +FORCE_INLINE __m128i _mm_cvtepu8_epi32(__m128i a) +{ + uint8x16_t u8x16 = vreinterpretq_u8_m128i(a); /* xxxx xxxx xxxx DCBA */ + uint16x8_t u16x8 = vmovl_u8(vget_low_u8(u8x16)); /* 0x0x 0x0x 0D0C 0B0A */ + uint32x4_t u32x4 = vmovl_u16(vget_low_u16(u16x8)); /* 000D 000C 000B 000A */ + return vreinterpretq_m128i_u32(u32x4); +} + +// Zero extend packed unsigned 8-bit integers in the low 8 bytes of a to packed +// 64-bit integers, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtepu8_epi64 +FORCE_INLINE __m128i _mm_cvtepu8_epi64(__m128i a) +{ + uint8x16_t u8x16 = vreinterpretq_u8_m128i(a); /* xxxx xxxx xxxx xxBA */ + uint16x8_t u16x8 = vmovl_u8(vget_low_u8(u8x16)); /* 0x0x 0x0x 0x0x 0B0A */ + uint32x4_t u32x4 = vmovl_u16(vget_low_u16(u16x8)); /* 000x 000x 000B 000A */ + uint64x2_t u64x2 = vmovl_u32(vget_low_u32(u32x4)); /* 0000 000B 0000 000A */ + return vreinterpretq_m128i_u64(u64x2); +} + +// Conditionally multiply the packed double-precision (64-bit) floating-point +// elements in a and b using the high 4 bits in imm8, sum the four products, and +// conditionally store the sum in dst using the low 4 bits of imm8. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_dp_pd +FORCE_INLINE __m128d _mm_dp_pd(__m128d a, __m128d b, const int imm) +{ + // Generate mask value from constant immediate bit value + const int64_t bit0Mask = imm & 0x01 ? UINT64_MAX : 0; + const int64_t bit1Mask = imm & 0x02 ? UINT64_MAX : 0; +#if !SSE2NEON_PRECISE_DP + const int64_t bit4Mask = imm & 0x10 ? UINT64_MAX : 0; + const int64_t bit5Mask = imm & 0x20 ? UINT64_MAX : 0; +#endif + // Conditional multiplication +#if !SSE2NEON_PRECISE_DP + __m128d mul = _mm_mul_pd(a, b); + const __m128d mulMask = + _mm_castsi128_pd(_mm_set_epi64x(bit5Mask, bit4Mask)); + __m128d tmp = _mm_and_pd(mul, mulMask); +#else +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + double d0 = (imm & 0x10) ? vgetq_lane_f64(vreinterpretq_f64_m128d(a), 0) * + vgetq_lane_f64(vreinterpretq_f64_m128d(b), 0) + : 0; + double d1 = (imm & 0x20) ? vgetq_lane_f64(vreinterpretq_f64_m128d(a), 1) * + vgetq_lane_f64(vreinterpretq_f64_m128d(b), 1) + : 0; +#else + double a0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + double a1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + double b0 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 0)); + double b1 = + sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(b), 1)); + double d0 = (imm & 0x10) ? a0 * b0 : 0; + double d1 = (imm & 0x20) ? a1 * b1 : 0; +#endif + __m128d tmp = _mm_set_pd(d1, d0); +#endif + // Sum the products +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + double sum = vpaddd_f64(vreinterpretq_f64_m128d(tmp)); +#else + double _tmp0 = sse2neon_recast_u64_f64( + vgetq_lane_u64(vreinterpretq_u64_m128d(tmp), 0)); + double _tmp1 = sse2neon_recast_u64_f64( + vgetq_lane_u64(vreinterpretq_u64_m128d(tmp), 1)); + double sum = _tmp0 + _tmp1; +#endif + // Conditionally store the sum + const __m128d sumMask = + _mm_castsi128_pd(_mm_set_epi64x(bit1Mask, bit0Mask)); + __m128d res = _mm_and_pd(_mm_set_pd1(sum), sumMask); + return res; +} + +// Conditionally multiply the packed single-precision (32-bit) floating-point +// elements in a and b using the high 4 bits in imm8, sum the four products, +// and conditionally store the sum in dst using the low 4 bits of imm. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_dp_ps +FORCE_INLINE __m128 _mm_dp_ps(__m128 a, __m128 b, const int imm) +{ + float32x4_t elementwise_prod = _mm_mul_ps(a, b); + +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + /* shortcuts */ + if (imm == 0xFF) { + return _mm_set1_ps(vaddvq_f32(elementwise_prod)); + } + + if ((imm & 0x0F) == 0x0F) { + if (!(imm & (1 << 4))) + elementwise_prod = vsetq_lane_f32(0.0f, elementwise_prod, 0); + if (!(imm & (1 << 5))) + elementwise_prod = vsetq_lane_f32(0.0f, elementwise_prod, 1); + if (!(imm & (1 << 6))) + elementwise_prod = vsetq_lane_f32(0.0f, elementwise_prod, 2); + if (!(imm & (1 << 7))) + elementwise_prod = vsetq_lane_f32(0.0f, elementwise_prod, 3); + + return _mm_set1_ps(vaddvq_f32(elementwise_prod)); + } +#endif + + float s = 0.0f; + + if (imm & (1 << 4)) + s += vgetq_lane_f32(elementwise_prod, 0); + if (imm & (1 << 5)) + s += vgetq_lane_f32(elementwise_prod, 1); + if (imm & (1 << 6)) + s += vgetq_lane_f32(elementwise_prod, 2); + if (imm & (1 << 7)) + s += vgetq_lane_f32(elementwise_prod, 3); + + const float32_t res[4] = { + (imm & 0x1) ? s : 0.0f, + (imm & 0x2) ? s : 0.0f, + (imm & 0x4) ? s : 0.0f, + (imm & 0x8) ? s : 0.0f, + }; + return vreinterpretq_m128_f32(vld1q_f32(res)); +} + +// Extract a 32-bit integer from a, selected with imm8, and store the result in +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_extract_epi32 +// FORCE_INLINE int _mm_extract_epi32(__m128i a, __constrange(0,4) int imm) +#define _mm_extract_epi32(a, imm) \ + vgetq_lane_s32(vreinterpretq_s32_m128i(a), (imm)) + +// Extract a 64-bit integer from a, selected with imm8, and store the result in +// dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_extract_epi64 +// FORCE_INLINE __int64 _mm_extract_epi64(__m128i a, __constrange(0,2) int imm) +#define _mm_extract_epi64(a, imm) \ + vgetq_lane_s64(vreinterpretq_s64_m128i(a), (imm)) + +// Extract an 8-bit integer from a, selected with imm8, and store the result in +// the lower element of dst. FORCE_INLINE int _mm_extract_epi8(__m128i a, +// __constrange(0,16) int imm) +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_extract_epi8 +#define _mm_extract_epi8(a, imm) vgetq_lane_u8(vreinterpretq_u8_m128i(a), (imm)) + +// Extracts the selected single-precision (32-bit) floating-point from a. +// FORCE_INLINE int _mm_extract_ps(__m128 a, __constrange(0,4) int imm) +#define _mm_extract_ps(a, imm) vgetq_lane_s32(vreinterpretq_s32_m128(a), (imm)) + +// Round the packed double-precision (64-bit) floating-point elements in a down +// to an integer value, and store the results as packed double-precision +// floating-point elements in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_floor_pd +FORCE_INLINE __m128d _mm_floor_pd(__m128d a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128d_f64(vrndmq_f64(vreinterpretq_f64_m128d(a))); +#else + double a0, a1; + a0 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 0)); + a1 = sse2neon_recast_u64_f64(vgetq_lane_u64(vreinterpretq_u64_m128d(a), 1)); + return _mm_set_pd(floor(a1), floor(a0)); +#endif +} + +// Round the packed single-precision (32-bit) floating-point elements in a down +// to an integer value, and store the results as packed single-precision +// floating-point elements in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_floor_ps +FORCE_INLINE __m128 _mm_floor_ps(__m128 a) +{ +#if (defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC)) || \ + defined(__ARM_FEATURE_DIRECTED_ROUNDING) + return vreinterpretq_m128_f32(vrndmq_f32(vreinterpretq_f32_m128(a))); +#else + float *f = (float *) &a; + return _mm_set_ps(floorf(f[3]), floorf(f[2]), floorf(f[1]), floorf(f[0])); +#endif +} + +// Round the lower double-precision (64-bit) floating-point element in b down to +// an integer value, store the result as a double-precision floating-point +// element in the lower element of dst, and copy the upper element from a to the +// upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_floor_sd +FORCE_INLINE __m128d _mm_floor_sd(__m128d a, __m128d b) +{ + return _mm_move_sd(a, _mm_floor_pd(b)); +} + +// Round the lower single-precision (32-bit) floating-point element in b down to +// an integer value, store the result as a single-precision floating-point +// element in the lower element of dst, and copy the upper 3 packed elements +// from a to the upper elements of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_floor_ss +FORCE_INLINE __m128 _mm_floor_ss(__m128 a, __m128 b) +{ + return _mm_move_ss(a, _mm_floor_ps(b)); +} + +// Copy a to dst, and insert the 32-bit integer i into dst at the location +// specified by imm8. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_insert_epi32 +// FORCE_INLINE __m128i _mm_insert_epi32(__m128i a, int b, +// __constrange(0,4) int imm) +#define _mm_insert_epi32(a, b, imm) \ + vreinterpretq_m128i_s32( \ + vsetq_lane_s32((b), vreinterpretq_s32_m128i(a), (imm))) + +// Copy a to dst, and insert the 64-bit integer i into dst at the location +// specified by imm8. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_insert_epi64 +// FORCE_INLINE __m128i _mm_insert_epi64(__m128i a, __int64 b, +// __constrange(0,2) int imm) +#define _mm_insert_epi64(a, b, imm) \ + vreinterpretq_m128i_s64( \ + vsetq_lane_s64((b), vreinterpretq_s64_m128i(a), (imm))) + +// Copy a to dst, and insert the lower 8-bit integer from i into dst at the +// location specified by imm8. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_insert_epi8 +// FORCE_INLINE __m128i _mm_insert_epi8(__m128i a, int b, +// __constrange(0,16) int imm) +#define _mm_insert_epi8(a, b, imm) \ + vreinterpretq_m128i_s8(vsetq_lane_s8((b), vreinterpretq_s8_m128i(a), (imm))) + +// Copy a to tmp, then insert a single-precision (32-bit) floating-point +// element from b into tmp using the control in imm8. Store tmp to dst using +// the mask in imm8 (elements are zeroed out when the corresponding bit is set). +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=insert_ps +#define _mm_insert_ps(a, b, imm8) \ + _sse2neon_define2( \ + __m128, a, b, \ + float32x4_t tmp1 = \ + vsetq_lane_f32(vgetq_lane_f32(_b, ((imm8) >> 6) & 0x3), \ + vreinterpretq_f32_m128(_a), 0); \ + float32x4_t tmp2 = \ + vsetq_lane_f32(vgetq_lane_f32(tmp1, 0), \ + vreinterpretq_f32_m128(_a), (((imm8) >> 4) & 0x3)); \ + const uint32_t data[4] = \ + _sse2neon_init(((imm8) & (1 << 0)) ? UINT32_MAX : 0, \ + ((imm8) & (1 << 1)) ? UINT32_MAX : 0, \ + ((imm8) & (1 << 2)) ? UINT32_MAX : 0, \ + ((imm8) & (1 << 3)) ? UINT32_MAX : 0); \ + uint32x4_t mask = vld1q_u32(data); \ + float32x4_t all_zeros = vdupq_n_f32(0); \ + \ + _sse2neon_return(vreinterpretq_m128_f32( \ + vbslq_f32(mask, all_zeros, vreinterpretq_f32_m128(tmp2))));) + +// Compare packed signed 32-bit integers in a and b, and store packed maximum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_epi32 +FORCE_INLINE __m128i _mm_max_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vmaxq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Compare packed signed 8-bit integers in a and b, and store packed maximum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_epi8 +FORCE_INLINE __m128i _mm_max_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s8( + vmaxq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Compare packed unsigned 16-bit integers in a and b, and store packed maximum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_epu16 +FORCE_INLINE __m128i _mm_max_epu16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vmaxq_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b))); +} + +// Compare packed unsigned 32-bit integers in a and b, and store packed maximum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_epu32 +FORCE_INLINE __m128i _mm_max_epu32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u32( + vmaxq_u32(vreinterpretq_u32_m128i(a), vreinterpretq_u32_m128i(b))); +} + +// Compare packed signed 32-bit integers in a and b, and store packed minimum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_epi32 +FORCE_INLINE __m128i _mm_min_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vminq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Compare packed signed 8-bit integers in a and b, and store packed minimum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_epi8 +FORCE_INLINE __m128i _mm_min_epi8(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s8( + vminq_s8(vreinterpretq_s8_m128i(a), vreinterpretq_s8_m128i(b))); +} + +// Compare packed unsigned 16-bit integers in a and b, and store packed minimum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_min_epu16 +FORCE_INLINE __m128i _mm_min_epu16(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vminq_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b))); +} + +// Compare packed unsigned 32-bit integers in a and b, and store packed minimum +// values in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_max_epu32 +FORCE_INLINE __m128i _mm_min_epu32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u32( + vminq_u32(vreinterpretq_u32_m128i(a), vreinterpretq_u32_m128i(b))); +} + +// Horizontally compute the minimum amongst the packed unsigned 16-bit integers +// in a, store the minimum and index in dst, and zero the remaining bits in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_minpos_epu16 +FORCE_INLINE __m128i _mm_minpos_epu16(__m128i a) +{ + __m128i dst; + uint16_t min, idx = 0; +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + // Find the minimum value + min = vminvq_u16(vreinterpretq_u16_m128i(a)); + + // Get the index of the minimum value + static const uint16_t idxv[] = {0, 1, 2, 3, 4, 5, 6, 7}; + uint16x8_t minv = vdupq_n_u16(min); + uint16x8_t cmeq = vceqq_u16(minv, vreinterpretq_u16_m128i(a)); + idx = vminvq_u16(vornq_u16(vld1q_u16(idxv), cmeq)); +#else + // Find the minimum value + __m64 tmp; + tmp = vreinterpret_m64_u16( + vmin_u16(vget_low_u16(vreinterpretq_u16_m128i(a)), + vget_high_u16(vreinterpretq_u16_m128i(a)))); + tmp = vreinterpret_m64_u16( + vpmin_u16(vreinterpret_u16_m64(tmp), vreinterpret_u16_m64(tmp))); + tmp = vreinterpret_m64_u16( + vpmin_u16(vreinterpret_u16_m64(tmp), vreinterpret_u16_m64(tmp))); + min = vget_lane_u16(vreinterpret_u16_m64(tmp), 0); + // Get the index of the minimum value + int i; + for (i = 0; i < 8; i++) { + if (min == vgetq_lane_u16(vreinterpretq_u16_m128i(a), 0)) { + idx = (uint16_t) i; + break; + } + a = _mm_srli_si128(a, 2); + } +#endif + // Generate result + dst = _mm_setzero_si128(); + dst = vreinterpretq_m128i_u16( + vsetq_lane_u16(min, vreinterpretq_u16_m128i(dst), 0)); + dst = vreinterpretq_m128i_u16( + vsetq_lane_u16(idx, vreinterpretq_u16_m128i(dst), 1)); + return dst; +} + +// Compute the sum of absolute differences (SADs) of quadruplets of unsigned +// 8-bit integers in a compared to those in b, and store the 16-bit results in +// dst. Eight SADs are performed using one quadruplet from b and eight +// quadruplets from a. One quadruplet is selected from b starting at on the +// offset specified in imm8. Eight quadruplets are formed from sequential 8-bit +// integers selected from a starting at the offset specified in imm8. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mpsadbw_epu8 +FORCE_INLINE __m128i _mm_mpsadbw_epu8(__m128i a, __m128i b, const int imm) +{ + uint8x16_t _a, _b; + + switch (imm & 0x4) { + case 0: + // do nothing + _a = vreinterpretq_u8_m128i(a); + break; + case 4: + _a = vreinterpretq_u8_u32(vextq_u32(vreinterpretq_u32_m128i(a), + vreinterpretq_u32_m128i(a), 1)); + break; + default: +#if defined(__GNUC__) || defined(__clang__) + __builtin_unreachable(); +#elif defined(_MSC_VER) + __assume(0); +#endif + break; + } + + switch (imm & 0x3) { + case 0: + _b = vreinterpretq_u8_u32( + vdupq_n_u32(vgetq_lane_u32(vreinterpretq_u32_m128i(b), 0))); + break; + case 1: + _b = vreinterpretq_u8_u32( + vdupq_n_u32(vgetq_lane_u32(vreinterpretq_u32_m128i(b), 1))); + break; + case 2: + _b = vreinterpretq_u8_u32( + vdupq_n_u32(vgetq_lane_u32(vreinterpretq_u32_m128i(b), 2))); + break; + case 3: + _b = vreinterpretq_u8_u32( + vdupq_n_u32(vgetq_lane_u32(vreinterpretq_u32_m128i(b), 3))); + break; + default: +#if defined(__GNUC__) || defined(__clang__) + __builtin_unreachable(); +#elif defined(_MSC_VER) + __assume(0); +#endif + break; + } + + int16x8_t c04, c15, c26, c37; + uint8x8_t low_b = vget_low_u8(_b); + c04 = vreinterpretq_s16_u16(vabdl_u8(vget_low_u8(_a), low_b)); + uint8x16_t _a_1 = vextq_u8(_a, _a, 1); + c15 = vreinterpretq_s16_u16(vabdl_u8(vget_low_u8(_a_1), low_b)); + uint8x16_t _a_2 = vextq_u8(_a, _a, 2); + c26 = vreinterpretq_s16_u16(vabdl_u8(vget_low_u8(_a_2), low_b)); + uint8x16_t _a_3 = vextq_u8(_a, _a, 3); + c37 = vreinterpretq_s16_u16(vabdl_u8(vget_low_u8(_a_3), low_b)); +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + // |0|4|2|6| + c04 = vpaddq_s16(c04, c26); + // |1|5|3|7| + c15 = vpaddq_s16(c15, c37); + + int32x4_t trn1_c = + vtrn1q_s32(vreinterpretq_s32_s16(c04), vreinterpretq_s32_s16(c15)); + int32x4_t trn2_c = + vtrn2q_s32(vreinterpretq_s32_s16(c04), vreinterpretq_s32_s16(c15)); + return vreinterpretq_m128i_s16(vpaddq_s16(vreinterpretq_s16_s32(trn1_c), + vreinterpretq_s16_s32(trn2_c))); +#else + int16x4_t c01, c23, c45, c67; + c01 = vpadd_s16(vget_low_s16(c04), vget_low_s16(c15)); + c23 = vpadd_s16(vget_low_s16(c26), vget_low_s16(c37)); + c45 = vpadd_s16(vget_high_s16(c04), vget_high_s16(c15)); + c67 = vpadd_s16(vget_high_s16(c26), vget_high_s16(c37)); + + return vreinterpretq_m128i_s16( + vcombine_s16(vpadd_s16(c01, c23), vpadd_s16(c45, c67))); +#endif +} + +// Multiply the low signed 32-bit integers from each packed 64-bit element in +// a and b, and store the signed 64-bit results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mul_epi32 +FORCE_INLINE __m128i _mm_mul_epi32(__m128i a, __m128i b) +{ + // vmull_s32 upcasts instead of masking, so we downcast. + int32x2_t a_lo = vmovn_s64(vreinterpretq_s64_m128i(a)); + int32x2_t b_lo = vmovn_s64(vreinterpretq_s64_m128i(b)); + return vreinterpretq_m128i_s64(vmull_s32(a_lo, b_lo)); +} + +// Multiply the packed 32-bit integers in a and b, producing intermediate 64-bit +// integers, and store the low 32 bits of the intermediate integers in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mullo_epi32 +FORCE_INLINE __m128i _mm_mullo_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_s32( + vmulq_s32(vreinterpretq_s32_m128i(a), vreinterpretq_s32_m128i(b))); +} + +// Convert packed signed 32-bit integers from a and b to packed 16-bit integers +// using unsigned saturation, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_packus_epi32 +FORCE_INLINE __m128i _mm_packus_epi32(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u16( + vcombine_u16(vqmovun_s32(vreinterpretq_s32_m128i(a)), + vqmovun_s32(vreinterpretq_s32_m128i(b)))); +} + +// Round the packed double-precision (64-bit) floating-point elements in a using +// the rounding parameter, and store the results as packed double-precision +// floating-point elements in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_round_pd +FORCE_INLINE __m128d _mm_round_pd(__m128d a, int rounding) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + switch (rounding) { + case (_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC): + return vreinterpretq_m128d_f64(vrndnq_f64(vreinterpretq_f64_m128d(a))); + case (_MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC): + return _mm_floor_pd(a); + case (_MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC): + return _mm_ceil_pd(a); + case (_MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC): + return vreinterpretq_m128d_f64(vrndq_f64(vreinterpretq_f64_m128d(a))); + default: //_MM_FROUND_CUR_DIRECTION + return vreinterpretq_m128d_f64(vrndiq_f64(vreinterpretq_f64_m128d(a))); + } +#else + double *v_double = (double *) &a; + + if (rounding == (_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC) || + (rounding == _MM_FROUND_CUR_DIRECTION && + _MM_GET_ROUNDING_MODE() == _MM_ROUND_NEAREST)) { + double res[2], tmp; + for (int i = 0; i < 2; i++) { + tmp = (v_double[i] < 0) ? -v_double[i] : v_double[i]; + double roundDown = floor(tmp); // Round down value + double roundUp = ceil(tmp); // Round up value + double diffDown = tmp - roundDown; + double diffUp = roundUp - tmp; + if (diffDown < diffUp) { + /* If it's closer to the round down value, then use it */ + res[i] = roundDown; + } else if (diffDown > diffUp) { + /* If it's closer to the round up value, then use it */ + res[i] = roundUp; + } else { + /* If it's equidistant between round up and round down value, + * pick the one which is an even number */ + double half = roundDown / 2; + if (half != floor(half)) { + /* If the round down value is odd, return the round up value + */ + res[i] = roundUp; + } else { + /* If the round up value is odd, return the round down value + */ + res[i] = roundDown; + } + } + res[i] = (v_double[i] < 0) ? -res[i] : res[i]; + } + return _mm_set_pd(res[1], res[0]); + } else if (rounding == (_MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC) || + (rounding == _MM_FROUND_CUR_DIRECTION && + _MM_GET_ROUNDING_MODE() == _MM_ROUND_DOWN)) { + return _mm_floor_pd(a); + } else if (rounding == (_MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC) || + (rounding == _MM_FROUND_CUR_DIRECTION && + _MM_GET_ROUNDING_MODE() == _MM_ROUND_UP)) { + return _mm_ceil_pd(a); + } + return _mm_set_pd(v_double[1] > 0 ? floor(v_double[1]) : ceil(v_double[1]), + v_double[0] > 0 ? floor(v_double[0]) : ceil(v_double[0])); +#endif +} + +// Round the packed single-precision (32-bit) floating-point elements in a using +// the rounding parameter, and store the results as packed single-precision +// floating-point elements in dst. +// software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_round_ps +FORCE_INLINE __m128 _mm_round_ps(__m128 a, int rounding) +{ +#if (defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC)) || \ + defined(__ARM_FEATURE_DIRECTED_ROUNDING) + switch (rounding) { + case (_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC): + return vreinterpretq_m128_f32(vrndnq_f32(vreinterpretq_f32_m128(a))); + case (_MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC): + return _mm_floor_ps(a); + case (_MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC): + return _mm_ceil_ps(a); + case (_MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC): + return vreinterpretq_m128_f32(vrndq_f32(vreinterpretq_f32_m128(a))); + default: //_MM_FROUND_CUR_DIRECTION + return vreinterpretq_m128_f32(vrndiq_f32(vreinterpretq_f32_m128(a))); + } +#else + float *v_float = (float *) &a; + + if (rounding == (_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC) || + (rounding == _MM_FROUND_CUR_DIRECTION && + _MM_GET_ROUNDING_MODE() == _MM_ROUND_NEAREST)) { + uint32x4_t signmask = vdupq_n_u32(0x80000000); + float32x4_t half = vbslq_f32(signmask, vreinterpretq_f32_m128(a), + vdupq_n_f32(0.5f)); /* +/- 0.5 */ + int32x4_t r_normal = vcvtq_s32_f32(vaddq_f32( + vreinterpretq_f32_m128(a), half)); /* round to integer: [a + 0.5]*/ + int32x4_t r_trunc = vcvtq_s32_f32( + vreinterpretq_f32_m128(a)); /* truncate to integer: [a] */ + int32x4_t plusone = vreinterpretq_s32_u32(vshrq_n_u32( + vreinterpretq_u32_s32(vnegq_s32(r_trunc)), 31)); /* 1 or 0 */ + int32x4_t r_even = vbicq_s32(vaddq_s32(r_trunc, plusone), + vdupq_n_s32(1)); /* ([a] + {0,1}) & ~1 */ + float32x4_t delta = vsubq_f32( + vreinterpretq_f32_m128(a), + vcvtq_f32_s32(r_trunc)); /* compute delta: delta = (a - [a]) */ + uint32x4_t is_delta_half = + vceqq_f32(delta, half); /* delta == +/- 0.5 */ + return vreinterpretq_m128_f32( + vcvtq_f32_s32(vbslq_s32(is_delta_half, r_even, r_normal))); + } else if (rounding == (_MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC) || + (rounding == _MM_FROUND_CUR_DIRECTION && + _MM_GET_ROUNDING_MODE() == _MM_ROUND_DOWN)) { + return _mm_floor_ps(a); + } else if (rounding == (_MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC) || + (rounding == _MM_FROUND_CUR_DIRECTION && + _MM_GET_ROUNDING_MODE() == _MM_ROUND_UP)) { + return _mm_ceil_ps(a); + } + return _mm_set_ps(v_float[3] > 0 ? floorf(v_float[3]) : ceilf(v_float[3]), + v_float[2] > 0 ? floorf(v_float[2]) : ceilf(v_float[2]), + v_float[1] > 0 ? floorf(v_float[1]) : ceilf(v_float[1]), + v_float[0] > 0 ? floorf(v_float[0]) : ceilf(v_float[0])); +#endif +} + +// Round the lower double-precision (64-bit) floating-point element in b using +// the rounding parameter, store the result as a double-precision floating-point +// element in the lower element of dst, and copy the upper element from a to the +// upper element of dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_round_sd +FORCE_INLINE __m128d _mm_round_sd(__m128d a, __m128d b, int rounding) +{ + return _mm_move_sd(a, _mm_round_pd(b, rounding)); +} + +// Round the lower single-precision (32-bit) floating-point element in b using +// the rounding parameter, store the result as a single-precision floating-point +// element in the lower element of dst, and copy the upper 3 packed elements +// from a to the upper elements of dst. Rounding is done according to the +// rounding[3:0] parameter, which can be one of: +// (_MM_FROUND_TO_NEAREST_INT |_MM_FROUND_NO_EXC) // round to nearest, and +// suppress exceptions +// (_MM_FROUND_TO_NEG_INF |_MM_FROUND_NO_EXC) // round down, and +// suppress exceptions +// (_MM_FROUND_TO_POS_INF |_MM_FROUND_NO_EXC) // round up, and suppress +// exceptions +// (_MM_FROUND_TO_ZERO |_MM_FROUND_NO_EXC) // truncate, and suppress +// exceptions _MM_FROUND_CUR_DIRECTION // use MXCSR.RC; see +// _MM_SET_ROUNDING_MODE +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_round_ss +FORCE_INLINE __m128 _mm_round_ss(__m128 a, __m128 b, int rounding) +{ + return _mm_move_ss(a, _mm_round_ps(b, rounding)); +} + +// Load 128-bits of integer data from memory into dst using a non-temporal +// memory hint. mem_addr must be aligned on a 16-byte boundary or a +// general-protection exception may be generated. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_stream_load_si128 +FORCE_INLINE __m128i _mm_stream_load_si128(__m128i *p) +{ +#if __has_builtin(__builtin_nontemporal_store) + return __builtin_nontemporal_load(p); +#else + return vreinterpretq_m128i_s64(vld1q_s64((int64_t *) p)); +#endif +} + +// Compute the bitwise NOT of a and then AND with a 128-bit vector containing +// all 1's, and return 1 if the result is zero, otherwise return 0. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_test_all_ones +FORCE_INLINE int _mm_test_all_ones(__m128i a) +{ + return (uint64_t) (vgetq_lane_s64(a, 0) & vgetq_lane_s64(a, 1)) == + ~(uint64_t) 0; +} + +// Compute the bitwise AND of 128 bits (representing integer data) in a and +// mask, and return 1 if the result is zero, otherwise return 0. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_test_all_zeros +FORCE_INLINE int _mm_test_all_zeros(__m128i a, __m128i mask) +{ + int64x2_t a_and_mask = + vandq_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(mask)); + return !(vgetq_lane_s64(a_and_mask, 0) | vgetq_lane_s64(a_and_mask, 1)); +} + +// Compute the bitwise AND of 128 bits (representing integer data) in a and +// mask, and set ZF to 1 if the result is zero, otherwise set ZF to 0. Compute +// the bitwise NOT of a and then AND with mask, and set CF to 1 if the result is +// zero, otherwise set CF to 0. Return 1 if both the ZF and CF values are zero, +// otherwise return 0. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=mm_test_mix_ones_zero +// Note: Argument names may be wrong in the Intel intrinsics guide. +FORCE_INLINE int _mm_test_mix_ones_zeros(__m128i a, __m128i mask) +{ + uint64x2_t v = vreinterpretq_u64_m128i(a); + uint64x2_t m = vreinterpretq_u64_m128i(mask); + + // find ones (set-bits) and zeros (clear-bits) under clip mask + uint64x2_t ones = vandq_u64(m, v); + uint64x2_t zeros = vbicq_u64(m, v); + + // If both 128-bit variables are populated (non-zero) then return 1. + // For comparison purposes, first compact each var down to 32-bits. + uint32x2_t reduced = vpmax_u32(vqmovn_u64(ones), vqmovn_u64(zeros)); + + // if folding minimum is non-zero then both vars must be non-zero + return (vget_lane_u32(vpmin_u32(reduced, reduced), 0) != 0); +} + +// Compute the bitwise AND of 128 bits (representing integer data) in a and b, +// and set ZF to 1 if the result is zero, otherwise set ZF to 0. Compute the +// bitwise NOT of a and then AND with b, and set CF to 1 if the result is zero, +// otherwise set CF to 0. Return the CF value. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_testc_si128 +FORCE_INLINE int _mm_testc_si128(__m128i a, __m128i b) +{ + int64x2_t s64_vec = + vbicq_s64(vreinterpretq_s64_m128i(b), vreinterpretq_s64_m128i(a)); + return !(vgetq_lane_s64(s64_vec, 0) | vgetq_lane_s64(s64_vec, 1)); +} + +// Compute the bitwise AND of 128 bits (representing integer data) in a and b, +// and set ZF to 1 if the result is zero, otherwise set ZF to 0. Compute the +// bitwise NOT of a and then AND with b, and set CF to 1 if the result is zero, +// otherwise set CF to 0. Return 1 if both the ZF and CF values are zero, +// otherwise return 0. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_testnzc_si128 +#define _mm_testnzc_si128(a, b) _mm_test_mix_ones_zeros(a, b) + +// Compute the bitwise AND of 128 bits (representing integer data) in a and b, +// and set ZF to 1 if the result is zero, otherwise set ZF to 0. Compute the +// bitwise NOT of a and then AND with b, and set CF to 1 if the result is zero, +// otherwise set CF to 0. Return the ZF value. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_testz_si128 +FORCE_INLINE int _mm_testz_si128(__m128i a, __m128i b) +{ + int64x2_t s64_vec = + vandq_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b)); + return !(vgetq_lane_s64(s64_vec, 0) | vgetq_lane_s64(s64_vec, 1)); +} + +/* SSE4.2 */ + +static const uint16_t ALIGN_STRUCT(16) _sse2neon_cmpestr_mask16b[8] = { + 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, +}; +static const uint8_t ALIGN_STRUCT(16) _sse2neon_cmpestr_mask8b[16] = { + 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, + 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, +}; + +/* specify the source data format */ +#define _SIDD_UBYTE_OPS 0x00 /* unsigned 8-bit characters */ +#define _SIDD_UWORD_OPS 0x01 /* unsigned 16-bit characters */ +#define _SIDD_SBYTE_OPS 0x02 /* signed 8-bit characters */ +#define _SIDD_SWORD_OPS 0x03 /* signed 16-bit characters */ + +/* specify the comparison operation */ +#define _SIDD_CMP_EQUAL_ANY 0x00 /* compare equal any: strchr */ +#define _SIDD_CMP_RANGES 0x04 /* compare ranges */ +#define _SIDD_CMP_EQUAL_EACH 0x08 /* compare equal each: strcmp */ +#define _SIDD_CMP_EQUAL_ORDERED 0x0C /* compare equal ordered */ + +/* specify the polarity */ +#define _SIDD_POSITIVE_POLARITY 0x00 +#define _SIDD_MASKED_POSITIVE_POLARITY 0x20 +#define _SIDD_NEGATIVE_POLARITY 0x10 /* negate results */ +#define _SIDD_MASKED_NEGATIVE_POLARITY \ + 0x30 /* negate results only before end of string */ + +/* specify the output selection in _mm_cmpXstri */ +#define _SIDD_LEAST_SIGNIFICANT 0x00 +#define _SIDD_MOST_SIGNIFICANT 0x40 + +/* specify the output selection in _mm_cmpXstrm */ +#define _SIDD_BIT_MASK 0x00 +#define _SIDD_UNIT_MASK 0x40 + +/* Pattern Matching for C macros. + * https://github.com/pfultz2/Cloak/wiki/C-Preprocessor-tricks,-tips,-and-idioms + */ + +/* catenate */ +#define SSE2NEON_PRIMITIVE_CAT(a, ...) a##__VA_ARGS__ +#define SSE2NEON_CAT(a, b) SSE2NEON_PRIMITIVE_CAT(a, b) + +#define SSE2NEON_IIF(c) SSE2NEON_PRIMITIVE_CAT(SSE2NEON_IIF_, c) +/* run the 2nd parameter */ +#define SSE2NEON_IIF_0(t, ...) __VA_ARGS__ +/* run the 1st parameter */ +#define SSE2NEON_IIF_1(t, ...) t + +#define SSE2NEON_COMPL(b) SSE2NEON_PRIMITIVE_CAT(SSE2NEON_COMPL_, b) +#define SSE2NEON_COMPL_0 1 +#define SSE2NEON_COMPL_1 0 + +#define SSE2NEON_DEC(x) SSE2NEON_PRIMITIVE_CAT(SSE2NEON_DEC_, x) +#define SSE2NEON_DEC_1 0 +#define SSE2NEON_DEC_2 1 +#define SSE2NEON_DEC_3 2 +#define SSE2NEON_DEC_4 3 +#define SSE2NEON_DEC_5 4 +#define SSE2NEON_DEC_6 5 +#define SSE2NEON_DEC_7 6 +#define SSE2NEON_DEC_8 7 +#define SSE2NEON_DEC_9 8 +#define SSE2NEON_DEC_10 9 +#define SSE2NEON_DEC_11 10 +#define SSE2NEON_DEC_12 11 +#define SSE2NEON_DEC_13 12 +#define SSE2NEON_DEC_14 13 +#define SSE2NEON_DEC_15 14 +#define SSE2NEON_DEC_16 15 + +/* detection */ +#define SSE2NEON_CHECK_N(x, n, ...) n +#define SSE2NEON_CHECK(...) SSE2NEON_CHECK_N(__VA_ARGS__, 0, ) +#define SSE2NEON_PROBE(x) x, 1, + +#define SSE2NEON_NOT(x) SSE2NEON_CHECK(SSE2NEON_PRIMITIVE_CAT(SSE2NEON_NOT_, x)) +#define SSE2NEON_NOT_0 SSE2NEON_PROBE(~) + +#define SSE2NEON_BOOL(x) SSE2NEON_COMPL(SSE2NEON_NOT(x)) +#define SSE2NEON_IF(c) SSE2NEON_IIF(SSE2NEON_BOOL(c)) + +#define SSE2NEON_EAT(...) +#define SSE2NEON_EXPAND(...) __VA_ARGS__ +#define SSE2NEON_WHEN(c) SSE2NEON_IF(c)(SSE2NEON_EXPAND, SSE2NEON_EAT) + +/* recursion */ +/* deferred expression */ +#define SSE2NEON_EMPTY() +#define SSE2NEON_DEFER(id) id SSE2NEON_EMPTY() +#define SSE2NEON_OBSTRUCT(...) __VA_ARGS__ SSE2NEON_DEFER(SSE2NEON_EMPTY)() +#define SSE2NEON_EXPAND(...) __VA_ARGS__ + +#define SSE2NEON_EVAL(...) \ + SSE2NEON_EVAL1(SSE2NEON_EVAL1(SSE2NEON_EVAL1(__VA_ARGS__))) +#define SSE2NEON_EVAL1(...) \ + SSE2NEON_EVAL2(SSE2NEON_EVAL2(SSE2NEON_EVAL2(__VA_ARGS__))) +#define SSE2NEON_EVAL2(...) \ + SSE2NEON_EVAL3(SSE2NEON_EVAL3(SSE2NEON_EVAL3(__VA_ARGS__))) +#define SSE2NEON_EVAL3(...) __VA_ARGS__ + +#define SSE2NEON_REPEAT(count, macro, ...) \ + SSE2NEON_WHEN(count) \ + (SSE2NEON_OBSTRUCT(SSE2NEON_REPEAT_INDIRECT)()( \ + SSE2NEON_DEC(count), macro, \ + __VA_ARGS__) SSE2NEON_OBSTRUCT(macro)(SSE2NEON_DEC(count), \ + __VA_ARGS__)) +#define SSE2NEON_REPEAT_INDIRECT() SSE2NEON_REPEAT + +#define SSE2NEON_SIZE_OF_byte 8 +#define SSE2NEON_NUMBER_OF_LANES_byte 16 +#define SSE2NEON_SIZE_OF_word 16 +#define SSE2NEON_NUMBER_OF_LANES_word 8 + +#define SSE2NEON_COMPARE_EQUAL_THEN_FILL_LANE(i, type) \ + mtx[i] = vreinterpretq_m128i_##type(vceqq_##type( \ + vdupq_n_##type(vgetq_lane_##type(vreinterpretq_##type##_m128i(b), i)), \ + vreinterpretq_##type##_m128i(a))); + +#define SSE2NEON_FILL_LANE(i, type) \ + vec_b[i] = \ + vdupq_n_##type(vgetq_lane_##type(vreinterpretq_##type##_m128i(b), i)); + +#define PCMPSTR_RANGES(a, b, mtx, data_type_prefix, type_prefix, size, \ + number_of_lanes, byte_or_word) \ + do { \ + SSE2NEON_CAT( \ + data_type_prefix, \ + SSE2NEON_CAT(size, \ + SSE2NEON_CAT(x, SSE2NEON_CAT(number_of_lanes, _t)))) \ + vec_b[number_of_lanes]; \ + __m128i mask = SSE2NEON_IIF(byte_or_word)( \ + vreinterpretq_m128i_u16(vdupq_n_u16(0xff)), \ + vreinterpretq_m128i_u32(vdupq_n_u32(0xffff))); \ + SSE2NEON_EVAL(SSE2NEON_REPEAT(number_of_lanes, SSE2NEON_FILL_LANE, \ + SSE2NEON_CAT(type_prefix, size))) \ + for (int i = 0; i < number_of_lanes; i++) { \ + mtx[i] = SSE2NEON_CAT(vreinterpretq_m128i_u, \ + size)(SSE2NEON_CAT(vbslq_u, size)( \ + SSE2NEON_CAT(vreinterpretq_u, \ + SSE2NEON_CAT(size, _m128i))(mask), \ + SSE2NEON_CAT(vcgeq_, SSE2NEON_CAT(type_prefix, size))( \ + vec_b[i], \ + SSE2NEON_CAT( \ + vreinterpretq_, \ + SSE2NEON_CAT(type_prefix, \ + SSE2NEON_CAT(size, _m128i(a))))), \ + SSE2NEON_CAT(vcleq_, SSE2NEON_CAT(type_prefix, size))( \ + vec_b[i], \ + SSE2NEON_CAT( \ + vreinterpretq_, \ + SSE2NEON_CAT(type_prefix, \ + SSE2NEON_CAT(size, _m128i(a))))))); \ + } \ + } while (0) + +#define PCMPSTR_EQ(a, b, mtx, size, number_of_lanes) \ + do { \ + SSE2NEON_EVAL(SSE2NEON_REPEAT(number_of_lanes, \ + SSE2NEON_COMPARE_EQUAL_THEN_FILL_LANE, \ + SSE2NEON_CAT(u, size))) \ + } while (0) + +#define SSE2NEON_CMP_EQUAL_ANY_IMPL(type) \ + static uint16_t _sse2neon_cmp_##type##_equal_any(__m128i a, int la, \ + __m128i b, int lb) \ + { \ + __m128i mtx[16]; \ + PCMPSTR_EQ(a, b, mtx, SSE2NEON_CAT(SSE2NEON_SIZE_OF_, type), \ + SSE2NEON_CAT(SSE2NEON_NUMBER_OF_LANES_, type)); \ + return SSE2NEON_CAT( \ + _sse2neon_aggregate_equal_any_, \ + SSE2NEON_CAT( \ + SSE2NEON_CAT(SSE2NEON_SIZE_OF_, type), \ + SSE2NEON_CAT(x, SSE2NEON_CAT(SSE2NEON_NUMBER_OF_LANES_, \ + type))))(la, lb, mtx); \ + } + +#define SSE2NEON_CMP_RANGES_IMPL(type, data_type, us, byte_or_word) \ + static uint16_t _sse2neon_cmp_##us##type##_ranges(__m128i a, int la, \ + __m128i b, int lb) \ + { \ + __m128i mtx[16]; \ + PCMPSTR_RANGES( \ + a, b, mtx, data_type, us, SSE2NEON_CAT(SSE2NEON_SIZE_OF_, type), \ + SSE2NEON_CAT(SSE2NEON_NUMBER_OF_LANES_, type), byte_or_word); \ + return SSE2NEON_CAT( \ + _sse2neon_aggregate_ranges_, \ + SSE2NEON_CAT( \ + SSE2NEON_CAT(SSE2NEON_SIZE_OF_, type), \ + SSE2NEON_CAT(x, SSE2NEON_CAT(SSE2NEON_NUMBER_OF_LANES_, \ + type))))(la, lb, mtx); \ + } + +#define SSE2NEON_CMP_EQUAL_ORDERED_IMPL(type) \ + static uint16_t _sse2neon_cmp_##type##_equal_ordered(__m128i a, int la, \ + __m128i b, int lb) \ + { \ + __m128i mtx[16]; \ + PCMPSTR_EQ(a, b, mtx, SSE2NEON_CAT(SSE2NEON_SIZE_OF_, type), \ + SSE2NEON_CAT(SSE2NEON_NUMBER_OF_LANES_, type)); \ + return SSE2NEON_CAT( \ + _sse2neon_aggregate_equal_ordered_, \ + SSE2NEON_CAT( \ + SSE2NEON_CAT(SSE2NEON_SIZE_OF_, type), \ + SSE2NEON_CAT(x, \ + SSE2NEON_CAT(SSE2NEON_NUMBER_OF_LANES_, type))))( \ + SSE2NEON_CAT(SSE2NEON_NUMBER_OF_LANES_, type), la, lb, mtx); \ + } + +static uint16_t _sse2neon_aggregate_equal_any_8x16(int la, + int lb, + __m128i mtx[16]) +{ + uint16_t res = 0; + int m = (1 << la) - 1; + uint8x8_t vec_mask = vld1_u8(_sse2neon_cmpestr_mask8b); + uint8x8_t t_lo = vtst_u8(vdup_n_u8((uint8_t) (m & 0xff)), vec_mask); + uint8x8_t t_hi = vtst_u8(vdup_n_u8((uint8_t) (m >> 8)), vec_mask); + uint8x16_t vec = vcombine_u8(t_lo, t_hi); + for (int j = 0; j < lb; j++) { + mtx[j] = vreinterpretq_m128i_u8( + vandq_u8(vec, vreinterpretq_u8_m128i(mtx[j]))); + mtx[j] = vreinterpretq_m128i_u8( + vshrq_n_u8(vreinterpretq_u8_m128i(mtx[j]), 7)); + uint16_t tmp = + _sse2neon_vaddvq_u8(vreinterpretq_u8_m128i(mtx[j])) ? 1 : 0; + res |= (tmp << j); + } + return res; +} + +static uint16_t _sse2neon_aggregate_equal_any_16x8(int la, + int lb, + __m128i mtx[16]) +{ + uint16_t res = 0; + uint16_t m = (uint16_t) (1 << la) - 1; + uint16x8_t vec = + vtstq_u16(vdupq_n_u16(m), vld1q_u16(_sse2neon_cmpestr_mask16b)); + for (int j = 0; j < lb; j++) { + mtx[j] = vreinterpretq_m128i_u16( + vandq_u16(vec, vreinterpretq_u16_m128i(mtx[j]))); + mtx[j] = vreinterpretq_m128i_u16( + vshrq_n_u16(vreinterpretq_u16_m128i(mtx[j]), 15)); + uint16_t tmp = + _sse2neon_vaddvq_u16(vreinterpretq_u16_m128i(mtx[j])) ? 1 : 0; + res |= (tmp << j); + } + return res; +} + +/* clang-format off */ +#define SSE2NEON_GENERATE_CMP_EQUAL_ANY(prefix) \ + prefix##IMPL(byte) \ + prefix##IMPL(word) +/* clang-format on */ + +SSE2NEON_GENERATE_CMP_EQUAL_ANY(SSE2NEON_CMP_EQUAL_ANY_) + +static uint16_t _sse2neon_aggregate_ranges_16x8(int la, int lb, __m128i mtx[16]) +{ + uint16_t res = 0; + uint16_t m = (uint16_t) (1 << la) - 1; + uint16x8_t vec = + vtstq_u16(vdupq_n_u16(m), vld1q_u16(_sse2neon_cmpestr_mask16b)); + for (int j = 0; j < lb; j++) { + mtx[j] = vreinterpretq_m128i_u16( + vandq_u16(vec, vreinterpretq_u16_m128i(mtx[j]))); + mtx[j] = vreinterpretq_m128i_u16( + vshrq_n_u16(vreinterpretq_u16_m128i(mtx[j]), 15)); + __m128i tmp = vreinterpretq_m128i_u32( + vshrq_n_u32(vreinterpretq_u32_m128i(mtx[j]), 16)); + uint32x4_t vec_res = vandq_u32(vreinterpretq_u32_m128i(mtx[j]), + vreinterpretq_u32_m128i(tmp)); +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + uint16_t t = vaddvq_u32(vec_res) ? 1 : 0; +#else + uint64x2_t sumh = vpaddlq_u32(vec_res); + uint16_t t = vgetq_lane_u64(sumh, 0) + vgetq_lane_u64(sumh, 1); +#endif + res |= (t << j); + } + return res; +} + +static uint16_t _sse2neon_aggregate_ranges_8x16(int la, int lb, __m128i mtx[16]) +{ + uint16_t res = 0; + uint16_t m = (uint16_t) ((1 << la) - 1); + uint8x8_t vec_mask = vld1_u8(_sse2neon_cmpestr_mask8b); + uint8x8_t t_lo = vtst_u8(vdup_n_u8((uint8_t) (m & 0xff)), vec_mask); + uint8x8_t t_hi = vtst_u8(vdup_n_u8((uint8_t) (m >> 8)), vec_mask); + uint8x16_t vec = vcombine_u8(t_lo, t_hi); + for (int j = 0; j < lb; j++) { + mtx[j] = vreinterpretq_m128i_u8( + vandq_u8(vec, vreinterpretq_u8_m128i(mtx[j]))); + mtx[j] = vreinterpretq_m128i_u8( + vshrq_n_u8(vreinterpretq_u8_m128i(mtx[j]), 7)); + __m128i tmp = vreinterpretq_m128i_u16( + vshrq_n_u16(vreinterpretq_u16_m128i(mtx[j]), 8)); + uint16x8_t vec_res = vandq_u16(vreinterpretq_u16_m128i(mtx[j]), + vreinterpretq_u16_m128i(tmp)); + uint16_t t = _sse2neon_vaddvq_u16(vec_res) ? 1 : 0; + res |= (t << j); + } + return res; +} + +#define SSE2NEON_CMP_RANGES_IS_BYTE 1 +#define SSE2NEON_CMP_RANGES_IS_WORD 0 + +/* clang-format off */ +#define SSE2NEON_GENERATE_CMP_RANGES(prefix) \ + prefix##IMPL(byte, uint, u, prefix##IS_BYTE) \ + prefix##IMPL(byte, int, s, prefix##IS_BYTE) \ + prefix##IMPL(word, uint, u, prefix##IS_WORD) \ + prefix##IMPL(word, int, s, prefix##IS_WORD) +/* clang-format on */ + +SSE2NEON_GENERATE_CMP_RANGES(SSE2NEON_CMP_RANGES_) + +#undef SSE2NEON_CMP_RANGES_IS_BYTE +#undef SSE2NEON_CMP_RANGES_IS_WORD + +static uint16_t _sse2neon_cmp_byte_equal_each(__m128i a, + int la, + __m128i b, + int lb) +{ + uint8x16_t mtx = + vceqq_u8(vreinterpretq_u8_m128i(a), vreinterpretq_u8_m128i(b)); + uint16_t m0 = (la < lb) ? 0 : (uint16_t) ((1 << la) - (1 << lb)); + uint16_t m1 = (uint16_t) (0x10000 - (1 << la)); + uint16_t tb = (uint16_t) (0x10000 - (1 << lb)); + uint8x8_t vec_mask, vec0_lo, vec0_hi, vec1_lo, vec1_hi; + uint8x8_t tmp_lo, tmp_hi, res_lo, res_hi; + vec_mask = vld1_u8(_sse2neon_cmpestr_mask8b); + vec0_lo = vtst_u8(vdup_n_u8((uint8_t) m0), vec_mask); + vec0_hi = vtst_u8(vdup_n_u8((uint8_t) (m0 >> 8)), vec_mask); + vec1_lo = vtst_u8(vdup_n_u8((uint8_t) m1), vec_mask); + vec1_hi = vtst_u8(vdup_n_u8((uint8_t) (m1 >> 8)), vec_mask); + tmp_lo = vtst_u8(vdup_n_u8((uint8_t) tb), vec_mask); + tmp_hi = vtst_u8(vdup_n_u8((uint8_t) (tb >> 8)), vec_mask); + + res_lo = vbsl_u8(vec0_lo, vdup_n_u8(0), vget_low_u8(mtx)); + res_hi = vbsl_u8(vec0_hi, vdup_n_u8(0), vget_high_u8(mtx)); + res_lo = vbsl_u8(vec1_lo, tmp_lo, res_lo); + res_hi = vbsl_u8(vec1_hi, tmp_hi, res_hi); + res_lo = vand_u8(res_lo, vec_mask); + res_hi = vand_u8(res_hi, vec_mask); + + return _sse2neon_vaddv_u8(res_lo) + + (uint16_t) (_sse2neon_vaddv_u8(res_hi) << 8); +} + +static uint16_t _sse2neon_cmp_word_equal_each(__m128i a, + int la, + __m128i b, + int lb) +{ + uint16x8_t mtx = + vceqq_u16(vreinterpretq_u16_m128i(a), vreinterpretq_u16_m128i(b)); + uint16_t m0 = (uint16_t) ((la < lb) ? 0 : ((1 << la) - (1 << lb))); + uint16_t m1 = (uint16_t) (0x100 - (1 << la)); + uint16_t tb = (uint16_t) (0x100 - (1 << lb)); + uint16x8_t vec_mask = vld1q_u16(_sse2neon_cmpestr_mask16b); + uint16x8_t vec0 = vtstq_u16(vdupq_n_u16(m0), vec_mask); + uint16x8_t vec1 = vtstq_u16(vdupq_n_u16(m1), vec_mask); + uint16x8_t tmp = vtstq_u16(vdupq_n_u16(tb), vec_mask); + mtx = vbslq_u16(vec0, vdupq_n_u16(0), mtx); + mtx = vbslq_u16(vec1, tmp, mtx); + mtx = vandq_u16(mtx, vec_mask); + return _sse2neon_vaddvq_u16(mtx); +} + +#define SSE2NEON_AGGREGATE_EQUAL_ORDER_IS_UBYTE 1 +#define SSE2NEON_AGGREGATE_EQUAL_ORDER_IS_UWORD 0 + +#define SSE2NEON_AGGREGATE_EQUAL_ORDER_IMPL(size, number_of_lanes, data_type) \ + static uint16_t \ + _sse2neon_aggregate_equal_ordered_##size##x##number_of_lanes( \ + int bound, int la, int lb, __m128i mtx[16]) \ + { \ + uint16_t res = 0; \ + uint16_t m1 = \ + (uint16_t) (SSE2NEON_IIF(data_type)(0x10000, 0x100) - (1 << la)); \ + uint##size##x8_t vec_mask = SSE2NEON_IIF(data_type)( \ + vld1_u##size(_sse2neon_cmpestr_mask##size##b), \ + vld1q_u##size(_sse2neon_cmpestr_mask##size##b)); \ + uint##size##x##number_of_lanes##_t vec1 = SSE2NEON_IIF(data_type)( \ + vcombine_u##size( \ + vtst_u##size(vdup_n_u##size((uint##size##_t) m1), vec_mask), \ + vtst_u##size(vdup_n_u##size((uint##size##_t)(m1 >> 8)), \ + vec_mask)), \ + vtstq_u##size(vdupq_n_u##size((uint##size##_t) m1), vec_mask)); \ + uint##size##x##number_of_lanes##_t vec_minusone = vdupq_n_u##size(-1); \ + uint##size##x##number_of_lanes##_t vec_zero = vdupq_n_u##size(0); \ + for (int j = 0; j < lb; j++) { \ + mtx[j] = vreinterpretq_m128i_u##size(vbslq_u##size( \ + vec1, vec_minusone, vreinterpretq_u##size##_m128i(mtx[j]))); \ + } \ + for (int j = lb; j < bound; j++) { \ + mtx[j] = vreinterpretq_m128i_u##size( \ + vbslq_u##size(vec1, vec_minusone, vec_zero)); \ + } \ + unsigned SSE2NEON_IIF(data_type)(char, short) *ptr = \ + (unsigned SSE2NEON_IIF(data_type)(char, short) *) mtx; \ + for (int i = 0; i < bound; i++) { \ + int val = 1; \ + for (int j = 0, k = i; j < bound - i && k < bound; j++, k++) \ + val &= ptr[k * bound + j]; \ + res += (uint16_t) (val << i); \ + } \ + return res; \ + } + +/* clang-format off */ +#define SSE2NEON_GENERATE_AGGREGATE_EQUAL_ORDER(prefix) \ + prefix##IMPL(8, 16, prefix##IS_UBYTE) \ + prefix##IMPL(16, 8, prefix##IS_UWORD) +/* clang-format on */ + +SSE2NEON_GENERATE_AGGREGATE_EQUAL_ORDER(SSE2NEON_AGGREGATE_EQUAL_ORDER_) + +#undef SSE2NEON_AGGREGATE_EQUAL_ORDER_IS_UBYTE +#undef SSE2NEON_AGGREGATE_EQUAL_ORDER_IS_UWORD + +/* clang-format off */ +#define SSE2NEON_GENERATE_CMP_EQUAL_ORDERED(prefix) \ + prefix##IMPL(byte) \ + prefix##IMPL(word) +/* clang-format on */ + +SSE2NEON_GENERATE_CMP_EQUAL_ORDERED(SSE2NEON_CMP_EQUAL_ORDERED_) + +#define SSE2NEON_CMPESTR_LIST \ + _(CMP_UBYTE_EQUAL_ANY, cmp_byte_equal_any) \ + _(CMP_UWORD_EQUAL_ANY, cmp_word_equal_any) \ + _(CMP_SBYTE_EQUAL_ANY, cmp_byte_equal_any) \ + _(CMP_SWORD_EQUAL_ANY, cmp_word_equal_any) \ + _(CMP_UBYTE_RANGES, cmp_ubyte_ranges) \ + _(CMP_UWORD_RANGES, cmp_uword_ranges) \ + _(CMP_SBYTE_RANGES, cmp_sbyte_ranges) \ + _(CMP_SWORD_RANGES, cmp_sword_ranges) \ + _(CMP_UBYTE_EQUAL_EACH, cmp_byte_equal_each) \ + _(CMP_UWORD_EQUAL_EACH, cmp_word_equal_each) \ + _(CMP_SBYTE_EQUAL_EACH, cmp_byte_equal_each) \ + _(CMP_SWORD_EQUAL_EACH, cmp_word_equal_each) \ + _(CMP_UBYTE_EQUAL_ORDERED, cmp_byte_equal_ordered) \ + _(CMP_UWORD_EQUAL_ORDERED, cmp_word_equal_ordered) \ + _(CMP_SBYTE_EQUAL_ORDERED, cmp_byte_equal_ordered) \ + _(CMP_SWORD_EQUAL_ORDERED, cmp_word_equal_ordered) + +enum { +#define _(name, func_suffix) name, + SSE2NEON_CMPESTR_LIST +#undef _ +}; +typedef uint16_t (*cmpestr_func_t)(__m128i a, int la, __m128i b, int lb); +static cmpestr_func_t _sse2neon_cmpfunc_table[] = { +#define _(name, func_suffix) _sse2neon_##func_suffix, + SSE2NEON_CMPESTR_LIST +#undef _ +}; + +FORCE_INLINE uint16_t _sse2neon_sido_negative(int res, + int lb, + int imm8, + int bound) +{ + switch (imm8 & 0x30) { + case _SIDD_NEGATIVE_POLARITY: + res ^= 0xffffffff; + break; + case _SIDD_MASKED_NEGATIVE_POLARITY: + res ^= (1 << lb) - 1; + break; + default: + break; + } + + return (uint16_t) (res & ((bound == 8) ? 0xFF : 0xFFFF)); +} + +FORCE_INLINE int _sse2neon_clz(unsigned int x) +{ +#if defined(_MSC_VER) && !defined(__clang__) + unsigned long cnt = 0; + if (_BitScanReverse(&cnt, x)) + return 31 - cnt; + return 32; +#else + return x != 0 ? __builtin_clz(x) : 32; +#endif +} + +FORCE_INLINE int _sse2neon_ctz(unsigned int x) +{ +#if defined(_MSC_VER) && !defined(__clang__) + unsigned long cnt = 0; + if (_BitScanForward(&cnt, x)) + return cnt; + return 32; +#else + return x != 0 ? __builtin_ctz(x) : 32; +#endif +} + +FORCE_INLINE int _sse2neon_ctzll(unsigned long long x) +{ +#ifdef _MSC_VER + unsigned long cnt; +#if defined(SSE2NEON_HAS_BITSCAN64) + if (_BitScanForward64(&cnt, x)) + return (int) (cnt); +#else + if (_BitScanForward(&cnt, (unsigned long) (x))) + return (int) cnt; + if (_BitScanForward(&cnt, (unsigned long) (x >> 32))) + return (int) (cnt + 32); +#endif /* SSE2NEON_HAS_BITSCAN64 */ + return 64; +#else /* assume GNU compatible compilers */ + return x != 0 ? __builtin_ctzll(x) : 64; +#endif +} + +#define SSE2NEON_MIN(x, y) (x) < (y) ? (x) : (y) + +#define SSE2NEON_CMPSTR_SET_UPPER(var, imm) \ + const int var = ((imm) & 0x01) ? 8 : 16 + +#define SSE2NEON_CMPESTRX_LEN_PAIR(a, b, la, lb) \ + int tmp1 = la ^ (la >> 31); \ + la = tmp1 - (la >> 31); \ + int tmp2 = lb ^ (lb >> 31); \ + lb = tmp2 - (lb >> 31); \ + la = SSE2NEON_MIN(la, bound); \ + lb = SSE2NEON_MIN(lb, bound) + +// Compare all pairs of character in string a and b, +// then aggregate the result. +// As the only difference of PCMPESTR* and PCMPISTR* is the way to calculate the +// length of string, we use SSE2NEON_CMP{I,E}STRX_GET_LEN to get the length of +// string a and b. +#define SSE2NEON_COMP_AGG(a, b, la, lb, imm8, IE) \ + SSE2NEON_CMPSTR_SET_UPPER(bound, imm8); \ + SSE2NEON_##IE##_LEN_PAIR(a, b, la, lb); \ + uint16_t r2 = (_sse2neon_cmpfunc_table[(imm8) & 0x0f])(a, la, b, lb); \ + r2 = _sse2neon_sido_negative(r2, lb, imm8, bound) + +#define SSE2NEON_CMPSTR_GENERATE_INDEX(r2, bound, imm8) \ + return (r2 == 0) ? bound \ + : (((imm8) & 0x40) ? (31 - _sse2neon_clz(r2)) \ + : _sse2neon_ctz(r2)) + +#define SSE2NEON_CMPSTR_GENERATE_MASK(dst) \ + __m128i dst = vreinterpretq_m128i_u8(vdupq_n_u8(0)); \ + if ((imm8) & 0x40) { \ + if (bound == 8) { \ + uint16x8_t tmp = vtstq_u16(vdupq_n_u16(r2), \ + vld1q_u16(_sse2neon_cmpestr_mask16b)); \ + dst = vreinterpretq_m128i_u16(vbslq_u16( \ + tmp, vdupq_n_u16(-1), vreinterpretq_u16_m128i(dst))); \ + } else { \ + uint8x16_t vec_r2 = vcombine_u8(vdup_n_u8((uint8_t) r2), \ + vdup_n_u8((uint8_t) (r2 >> 8))); \ + uint8x16_t tmp = \ + vtstq_u8(vec_r2, vld1q_u8(_sse2neon_cmpestr_mask8b)); \ + dst = vreinterpretq_m128i_u8( \ + vbslq_u8(tmp, vdupq_n_u8(-1), vreinterpretq_u8_m128i(dst))); \ + } \ + } else { \ + if (bound == 16) { \ + dst = vreinterpretq_m128i_u16( \ + vsetq_lane_u16(r2 & 0xffff, vreinterpretq_u16_m128i(dst), 0)); \ + } else { \ + dst = vreinterpretq_m128i_u8(vsetq_lane_u8( \ + (uint8_t) (r2 & 0xff), vreinterpretq_u8_m128i(dst), 0)); \ + } \ + } \ + return dst + +// Compare packed strings in a and b with lengths la and lb using the control +// in imm8, and returns 1 if b did not contain a null character and the +// resulting mask was zero, and 0 otherwise. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpestra +FORCE_INLINE int _mm_cmpestra(__m128i a, + int la, + __m128i b, + int lb, + const int imm8) +{ + int lb_cpy = lb; + SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPESTRX); + return !r2 & (lb_cpy > bound); +} + +// Compare packed strings in a and b with lengths la and lb using the control in +// imm8, and returns 1 if the resulting mask was non-zero, and 0 otherwise. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpestrc +FORCE_INLINE int _mm_cmpestrc(__m128i a, + int la, + __m128i b, + int lb, + const int imm8) +{ + SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPESTRX); + return r2 != 0; +} + +// Compare packed strings in a and b with lengths la and lb using the control +// in imm8, and store the generated index in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpestri +FORCE_INLINE int _mm_cmpestri(__m128i a, + int la, + __m128i b, + int lb, + const int imm8) +{ + SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPESTRX); + SSE2NEON_CMPSTR_GENERATE_INDEX(r2, bound, imm8); +} + +// Compare packed strings in a and b with lengths la and lb using the control +// in imm8, and store the generated mask in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpestrm +FORCE_INLINE __m128i +_mm_cmpestrm(__m128i a, int la, __m128i b, int lb, const int imm8) +{ + SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPESTRX); + SSE2NEON_CMPSTR_GENERATE_MASK(dst); +} + +// Compare packed strings in a and b with lengths la and lb using the control in +// imm8, and returns bit 0 of the resulting bit mask. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpestro +FORCE_INLINE int _mm_cmpestro(__m128i a, + int la, + __m128i b, + int lb, + const int imm8) +{ + SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPESTRX); + return r2 & 1; +} + +// Compare packed strings in a and b with lengths la and lb using the control in +// imm8, and returns 1 if any character in a was null, and 0 otherwise. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpestrs +FORCE_INLINE int _mm_cmpestrs(__m128i a, + int la, + __m128i b, + int lb, + const int imm8) +{ + (void) a; + (void) b; + (void) lb; + SSE2NEON_CMPSTR_SET_UPPER(bound, imm8); + return la <= (bound - 1); +} + +// Compare packed strings in a and b with lengths la and lb using the control in +// imm8, and returns 1 if any character in b was null, and 0 otherwise. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpestrz +FORCE_INLINE int _mm_cmpestrz(__m128i a, + int la, + __m128i b, + int lb, + const int imm8) +{ + (void) a; + (void) b; + (void) la; + SSE2NEON_CMPSTR_SET_UPPER(bound, imm8); + return lb <= (bound - 1); +} + +#define SSE2NEON_CMPISTRX_LENGTH(str, len, imm8) \ + do { \ + if ((imm8) & 0x01) { \ + uint16x8_t equal_mask_##str = \ + vceqq_u16(vreinterpretq_u16_m128i(str), vdupq_n_u16(0)); \ + uint8x8_t res_##str = vshrn_n_u16(equal_mask_##str, 4); \ + uint64_t matches_##str = \ + vget_lane_u64(vreinterpret_u64_u8(res_##str), 0); \ + len = _sse2neon_ctzll(matches_##str) >> 3; \ + } else { \ + uint16x8_t equal_mask_##str = vreinterpretq_u16_u8( \ + vceqq_u8(vreinterpretq_u8_m128i(str), vdupq_n_u8(0))); \ + uint8x8_t res_##str = vshrn_n_u16(equal_mask_##str, 4); \ + uint64_t matches_##str = \ + vget_lane_u64(vreinterpret_u64_u8(res_##str), 0); \ + len = _sse2neon_ctzll(matches_##str) >> 2; \ + } \ + } while (0) + +#define SSE2NEON_CMPISTRX_LEN_PAIR(a, b, la, lb) \ + int la, lb; \ + do { \ + SSE2NEON_CMPISTRX_LENGTH(a, la, imm8); \ + SSE2NEON_CMPISTRX_LENGTH(b, lb, imm8); \ + } while (0) + +// Compare packed strings with implicit lengths in a and b using the control in +// imm8, and returns 1 if b did not contain a null character and the resulting +// mask was zero, and 0 otherwise. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpistra +FORCE_INLINE int _mm_cmpistra(__m128i a, __m128i b, const int imm8) +{ + SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPISTRX); + return !r2 & (lb >= bound); +} + +// Compare packed strings with implicit lengths in a and b using the control in +// imm8, and returns 1 if the resulting mask was non-zero, and 0 otherwise. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpistrc +FORCE_INLINE int _mm_cmpistrc(__m128i a, __m128i b, const int imm8) +{ + SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPISTRX); + return r2 != 0; +} + +// Compare packed strings with implicit lengths in a and b using the control in +// imm8, and store the generated index in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpistri +FORCE_INLINE int _mm_cmpistri(__m128i a, __m128i b, const int imm8) +{ + SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPISTRX); + SSE2NEON_CMPSTR_GENERATE_INDEX(r2, bound, imm8); +} + +// Compare packed strings with implicit lengths in a and b using the control in +// imm8, and store the generated mask in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpistrm +FORCE_INLINE __m128i _mm_cmpistrm(__m128i a, __m128i b, const int imm8) +{ + SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPISTRX); + SSE2NEON_CMPSTR_GENERATE_MASK(dst); +} + +// Compare packed strings with implicit lengths in a and b using the control in +// imm8, and returns bit 0 of the resulting bit mask. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpistro +FORCE_INLINE int _mm_cmpistro(__m128i a, __m128i b, const int imm8) +{ + SSE2NEON_COMP_AGG(a, b, la, lb, imm8, CMPISTRX); + return r2 & 1; +} + +// Compare packed strings with implicit lengths in a and b using the control in +// imm8, and returns 1 if any character in a was null, and 0 otherwise. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpistrs +FORCE_INLINE int _mm_cmpistrs(__m128i a, __m128i b, const int imm8) +{ + (void) b; + SSE2NEON_CMPSTR_SET_UPPER(bound, imm8); + int la; + SSE2NEON_CMPISTRX_LENGTH(a, la, imm8); + return la <= (bound - 1); +} + +// Compare packed strings with implicit lengths in a and b using the control in +// imm8, and returns 1 if any character in b was null, and 0 otherwise. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cmpistrz +FORCE_INLINE int _mm_cmpistrz(__m128i a, __m128i b, const int imm8) +{ + (void) a; + SSE2NEON_CMPSTR_SET_UPPER(bound, imm8); + int lb; + SSE2NEON_CMPISTRX_LENGTH(b, lb, imm8); + return lb <= (bound - 1); +} + +// Compares the 2 signed 64-bit integers in a and the 2 signed 64-bit integers +// in b for greater than. +FORCE_INLINE __m128i _mm_cmpgt_epi64(__m128i a, __m128i b) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + return vreinterpretq_m128i_u64( + vcgtq_s64(vreinterpretq_s64_m128i(a), vreinterpretq_s64_m128i(b))); +#else + return vreinterpretq_m128i_s64(vshrq_n_s64( + vqsubq_s64(vreinterpretq_s64_m128i(b), vreinterpretq_s64_m128i(a)), + 63)); +#endif +} + +// Starting with the initial value in crc, accumulates a CRC32 value for +// unsigned 16-bit integer v, and stores the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_crc32_u16 +FORCE_INLINE uint32_t _mm_crc32_u16(uint32_t crc, uint16_t v) +{ +#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) + __asm__ __volatile__("crc32ch %w[c], %w[c], %w[v]\n\t" + : [c] "+r"(crc) + : [v] "r"(v)); +#elif ((__ARM_ARCH == 8) && defined(__ARM_FEATURE_CRC32)) || \ + ((defined(_M_ARM64) || defined(_M_ARM64EC)) && !defined(__clang__)) + crc = __crc32ch(crc, v); +#else + crc = _mm_crc32_u8(crc, (uint8_t) (v & 0xff)); + crc = _mm_crc32_u8(crc, (uint8_t) ((v >> 8) & 0xff)); +#endif + return crc; +} + +// Starting with the initial value in crc, accumulates a CRC32 value for +// unsigned 32-bit integer v, and stores the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_crc32_u32 +FORCE_INLINE uint32_t _mm_crc32_u32(uint32_t crc, uint32_t v) +{ +#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) + __asm__ __volatile__("crc32cw %w[c], %w[c], %w[v]\n\t" + : [c] "+r"(crc) + : [v] "r"(v)); +#elif ((__ARM_ARCH == 8) && defined(__ARM_FEATURE_CRC32)) || \ + ((defined(_M_ARM64) || defined(_M_ARM64EC)) && !defined(__clang__)) + crc = __crc32cw(crc, v); +#else + crc = _mm_crc32_u16(crc, (uint16_t) (v & 0xffff)); + crc = _mm_crc32_u16(crc, (uint16_t) ((v >> 16) & 0xffff)); +#endif + return crc; +} + +// Starting with the initial value in crc, accumulates a CRC32 value for +// unsigned 64-bit integer v, and stores the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_crc32_u64 +FORCE_INLINE uint64_t _mm_crc32_u64(uint64_t crc, uint64_t v) +{ +#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) + __asm__ __volatile__("crc32cx %w[c], %w[c], %x[v]\n\t" + : [c] "+r"(crc) + : [v] "r"(v)); +#elif ((defined(_M_ARM64) || defined(_M_ARM64EC)) && !defined(__clang__)) + crc = __crc32cd((uint32_t) crc, v); +#else + crc = _mm_crc32_u32((uint32_t) (crc), (uint32_t) (v & 0xffffffff)); + crc = _mm_crc32_u32((uint32_t) (crc), (uint32_t) ((v >> 32) & 0xffffffff)); +#endif + return crc; +} + +// Starting with the initial value in crc, accumulates a CRC32 value for +// unsigned 8-bit integer v, and stores the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_crc32_u8 +FORCE_INLINE uint32_t _mm_crc32_u8(uint32_t crc, uint8_t v) +{ +#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) + __asm__ __volatile__("crc32cb %w[c], %w[c], %w[v]\n\t" + : [c] "+r"(crc) + : [v] "r"(v)); +#elif ((__ARM_ARCH == 8) && defined(__ARM_FEATURE_CRC32)) || \ + ((defined(_M_ARM64) || defined(_M_ARM64EC)) && !defined(__clang__)) + crc = __crc32cb(crc, v); +#else + crc ^= v; +#if defined(__ARM_FEATURE_CRYPTO) + // Adapted from: https://mary.rs/lab/crc32/ + // Barrent reduction + uint64x2_t orig = + vcombine_u64(vcreate_u64((uint64_t) (crc) << 24), vcreate_u64(0x0)); + uint64x2_t tmp = orig; + + // Polynomial P(x) of CRC32C + uint64_t p = 0x105EC76F1; + // Barrett Reduction (in bit-reflected form) constant mu_{64} = \lfloor + // 2^{64} / P(x) \rfloor = 0x11f91caf6 + uint64_t mu = 0x1dea713f1; + + // Multiply by mu_{64} + tmp = _sse2neon_vmull_p64(vget_low_u64(tmp), vcreate_u64(mu)); + // Divide by 2^{64} (mask away the unnecessary bits) + tmp = + vandq_u64(tmp, vcombine_u64(vcreate_u64(0xFFFFFFFF), vcreate_u64(0x0))); + // Multiply by P(x) (shifted left by 1 for alignment reasons) + tmp = _sse2neon_vmull_p64(vget_low_u64(tmp), vcreate_u64(p)); + // Subtract original from result + tmp = veorq_u64(tmp, orig); + + // Extract the 'lower' (in bit-reflected sense) 32 bits + crc = vgetq_lane_u32(vreinterpretq_u32_u64(tmp), 1); +#else // Fall back to the generic table lookup approach + // Adapted from: https://create.stephan-brumme.com/crc32/ + // Apply half-byte comparison algorithm for the best ratio between + // performance and lookup table. + + // The lookup table just needs to store every 16th entry + // of the standard look-up table. + static const uint32_t crc32_half_byte_tbl[] = { + 0x00000000, 0x105ec76f, 0x20bd8ede, 0x30e349b1, 0x417b1dbc, 0x5125dad3, + 0x61c69362, 0x7198540d, 0x82f63b78, 0x92a8fc17, 0xa24bb5a6, 0xb21572c9, + 0xc38d26c4, 0xd3d3e1ab, 0xe330a81a, 0xf36e6f75, + }; + + crc = (crc >> 4) ^ crc32_half_byte_tbl[crc & 0x0F]; + crc = (crc >> 4) ^ crc32_half_byte_tbl[crc & 0x0F]; +#endif +#endif + return crc; +} + +/* AES */ + +#if !defined(__ARM_FEATURE_CRYPTO) && \ + ((!defined(_M_ARM64) && !defined(_M_ARM64EC)) || defined(__clang__)) +/* clang-format off */ +#define SSE2NEON_AES_SBOX(w) \ + { \ + w(0x63), w(0x7c), w(0x77), w(0x7b), w(0xf2), w(0x6b), w(0x6f), \ + w(0xc5), w(0x30), w(0x01), w(0x67), w(0x2b), w(0xfe), w(0xd7), \ + w(0xab), w(0x76), w(0xca), w(0x82), w(0xc9), w(0x7d), w(0xfa), \ + w(0x59), w(0x47), w(0xf0), w(0xad), w(0xd4), w(0xa2), w(0xaf), \ + w(0x9c), w(0xa4), w(0x72), w(0xc0), w(0xb7), w(0xfd), w(0x93), \ + w(0x26), w(0x36), w(0x3f), w(0xf7), w(0xcc), w(0x34), w(0xa5), \ + w(0xe5), w(0xf1), w(0x71), w(0xd8), w(0x31), w(0x15), w(0x04), \ + w(0xc7), w(0x23), w(0xc3), w(0x18), w(0x96), w(0x05), w(0x9a), \ + w(0x07), w(0x12), w(0x80), w(0xe2), w(0xeb), w(0x27), w(0xb2), \ + w(0x75), w(0x09), w(0x83), w(0x2c), w(0x1a), w(0x1b), w(0x6e), \ + w(0x5a), w(0xa0), w(0x52), w(0x3b), w(0xd6), w(0xb3), w(0x29), \ + w(0xe3), w(0x2f), w(0x84), w(0x53), w(0xd1), w(0x00), w(0xed), \ + w(0x20), w(0xfc), w(0xb1), w(0x5b), w(0x6a), w(0xcb), w(0xbe), \ + w(0x39), w(0x4a), w(0x4c), w(0x58), w(0xcf), w(0xd0), w(0xef), \ + w(0xaa), w(0xfb), w(0x43), w(0x4d), w(0x33), w(0x85), w(0x45), \ + w(0xf9), w(0x02), w(0x7f), w(0x50), w(0x3c), w(0x9f), w(0xa8), \ + w(0x51), w(0xa3), w(0x40), w(0x8f), w(0x92), w(0x9d), w(0x38), \ + w(0xf5), w(0xbc), w(0xb6), w(0xda), w(0x21), w(0x10), w(0xff), \ + w(0xf3), w(0xd2), w(0xcd), w(0x0c), w(0x13), w(0xec), w(0x5f), \ + w(0x97), w(0x44), w(0x17), w(0xc4), w(0xa7), w(0x7e), w(0x3d), \ + w(0x64), w(0x5d), w(0x19), w(0x73), w(0x60), w(0x81), w(0x4f), \ + w(0xdc), w(0x22), w(0x2a), w(0x90), w(0x88), w(0x46), w(0xee), \ + w(0xb8), w(0x14), w(0xde), w(0x5e), w(0x0b), w(0xdb), w(0xe0), \ + w(0x32), w(0x3a), w(0x0a), w(0x49), w(0x06), w(0x24), w(0x5c), \ + w(0xc2), w(0xd3), w(0xac), w(0x62), w(0x91), w(0x95), w(0xe4), \ + w(0x79), w(0xe7), w(0xc8), w(0x37), w(0x6d), w(0x8d), w(0xd5), \ + w(0x4e), w(0xa9), w(0x6c), w(0x56), w(0xf4), w(0xea), w(0x65), \ + w(0x7a), w(0xae), w(0x08), w(0xba), w(0x78), w(0x25), w(0x2e), \ + w(0x1c), w(0xa6), w(0xb4), w(0xc6), w(0xe8), w(0xdd), w(0x74), \ + w(0x1f), w(0x4b), w(0xbd), w(0x8b), w(0x8a), w(0x70), w(0x3e), \ + w(0xb5), w(0x66), w(0x48), w(0x03), w(0xf6), w(0x0e), w(0x61), \ + w(0x35), w(0x57), w(0xb9), w(0x86), w(0xc1), w(0x1d), w(0x9e), \ + w(0xe1), w(0xf8), w(0x98), w(0x11), w(0x69), w(0xd9), w(0x8e), \ + w(0x94), w(0x9b), w(0x1e), w(0x87), w(0xe9), w(0xce), w(0x55), \ + w(0x28), w(0xdf), w(0x8c), w(0xa1), w(0x89), w(0x0d), w(0xbf), \ + w(0xe6), w(0x42), w(0x68), w(0x41), w(0x99), w(0x2d), w(0x0f), \ + w(0xb0), w(0x54), w(0xbb), w(0x16) \ + } +#define SSE2NEON_AES_RSBOX(w) \ + { \ + w(0x52), w(0x09), w(0x6a), w(0xd5), w(0x30), w(0x36), w(0xa5), \ + w(0x38), w(0xbf), w(0x40), w(0xa3), w(0x9e), w(0x81), w(0xf3), \ + w(0xd7), w(0xfb), w(0x7c), w(0xe3), w(0x39), w(0x82), w(0x9b), \ + w(0x2f), w(0xff), w(0x87), w(0x34), w(0x8e), w(0x43), w(0x44), \ + w(0xc4), w(0xde), w(0xe9), w(0xcb), w(0x54), w(0x7b), w(0x94), \ + w(0x32), w(0xa6), w(0xc2), w(0x23), w(0x3d), w(0xee), w(0x4c), \ + w(0x95), w(0x0b), w(0x42), w(0xfa), w(0xc3), w(0x4e), w(0x08), \ + w(0x2e), w(0xa1), w(0x66), w(0x28), w(0xd9), w(0x24), w(0xb2), \ + w(0x76), w(0x5b), w(0xa2), w(0x49), w(0x6d), w(0x8b), w(0xd1), \ + w(0x25), w(0x72), w(0xf8), w(0xf6), w(0x64), w(0x86), w(0x68), \ + w(0x98), w(0x16), w(0xd4), w(0xa4), w(0x5c), w(0xcc), w(0x5d), \ + w(0x65), w(0xb6), w(0x92), w(0x6c), w(0x70), w(0x48), w(0x50), \ + w(0xfd), w(0xed), w(0xb9), w(0xda), w(0x5e), w(0x15), w(0x46), \ + w(0x57), w(0xa7), w(0x8d), w(0x9d), w(0x84), w(0x90), w(0xd8), \ + w(0xab), w(0x00), w(0x8c), w(0xbc), w(0xd3), w(0x0a), w(0xf7), \ + w(0xe4), w(0x58), w(0x05), w(0xb8), w(0xb3), w(0x45), w(0x06), \ + w(0xd0), w(0x2c), w(0x1e), w(0x8f), w(0xca), w(0x3f), w(0x0f), \ + w(0x02), w(0xc1), w(0xaf), w(0xbd), w(0x03), w(0x01), w(0x13), \ + w(0x8a), w(0x6b), w(0x3a), w(0x91), w(0x11), w(0x41), w(0x4f), \ + w(0x67), w(0xdc), w(0xea), w(0x97), w(0xf2), w(0xcf), w(0xce), \ + w(0xf0), w(0xb4), w(0xe6), w(0x73), w(0x96), w(0xac), w(0x74), \ + w(0x22), w(0xe7), w(0xad), w(0x35), w(0x85), w(0xe2), w(0xf9), \ + w(0x37), w(0xe8), w(0x1c), w(0x75), w(0xdf), w(0x6e), w(0x47), \ + w(0xf1), w(0x1a), w(0x71), w(0x1d), w(0x29), w(0xc5), w(0x89), \ + w(0x6f), w(0xb7), w(0x62), w(0x0e), w(0xaa), w(0x18), w(0xbe), \ + w(0x1b), w(0xfc), w(0x56), w(0x3e), w(0x4b), w(0xc6), w(0xd2), \ + w(0x79), w(0x20), w(0x9a), w(0xdb), w(0xc0), w(0xfe), w(0x78), \ + w(0xcd), w(0x5a), w(0xf4), w(0x1f), w(0xdd), w(0xa8), w(0x33), \ + w(0x88), w(0x07), w(0xc7), w(0x31), w(0xb1), w(0x12), w(0x10), \ + w(0x59), w(0x27), w(0x80), w(0xec), w(0x5f), w(0x60), w(0x51), \ + w(0x7f), w(0xa9), w(0x19), w(0xb5), w(0x4a), w(0x0d), w(0x2d), \ + w(0xe5), w(0x7a), w(0x9f), w(0x93), w(0xc9), w(0x9c), w(0xef), \ + w(0xa0), w(0xe0), w(0x3b), w(0x4d), w(0xae), w(0x2a), w(0xf5), \ + w(0xb0), w(0xc8), w(0xeb), w(0xbb), w(0x3c), w(0x83), w(0x53), \ + w(0x99), w(0x61), w(0x17), w(0x2b), w(0x04), w(0x7e), w(0xba), \ + w(0x77), w(0xd6), w(0x26), w(0xe1), w(0x69), w(0x14), w(0x63), \ + w(0x55), w(0x21), w(0x0c), w(0x7d) \ + } +/* clang-format on */ + +/* X Macro trick. See https://en.wikipedia.org/wiki/X_Macro */ +#define SSE2NEON_AES_H0(x) (x) +static const uint8_t _sse2neon_sbox[256] = SSE2NEON_AES_SBOX(SSE2NEON_AES_H0); +static const uint8_t _sse2neon_rsbox[256] = SSE2NEON_AES_RSBOX(SSE2NEON_AES_H0); +#undef SSE2NEON_AES_H0 + +/* x_time function and matrix multiply function */ +#if !defined(__aarch64__) +#define SSE2NEON_XT(x) (((x) << 1) ^ ((((x) >> 7) & 1) * 0x1b)) +#define SSE2NEON_MULTIPLY(x, y) \ + (((y & 1) * x) ^ ((y >> 1 & 1) * SSE2NEON_XT(x)) ^ \ + ((y >> 2 & 1) * SSE2NEON_XT(SSE2NEON_XT(x))) ^ \ + ((y >> 3 & 1) * SSE2NEON_XT(SSE2NEON_XT(SSE2NEON_XT(x)))) ^ \ + ((y >> 4 & 1) * SSE2NEON_XT(SSE2NEON_XT(SSE2NEON_XT(SSE2NEON_XT(x)))))) +#endif + +// In the absence of crypto extensions, implement aesenc using regular NEON +// intrinsics instead. See: +// https://www.workofard.com/2017/01/accelerated-aes-for-the-arm64-linux-kernel/ +// https://www.workofard.com/2017/07/ghash-for-low-end-cores/ and +// for more information. +FORCE_INLINE __m128i _mm_aesenc_si128(__m128i a, __m128i RoundKey) +{ +#if defined(__aarch64__) + static const uint8_t shift_rows[] = { + 0x0, 0x5, 0xa, 0xf, 0x4, 0x9, 0xe, 0x3, + 0x8, 0xd, 0x2, 0x7, 0xc, 0x1, 0x6, 0xb, + }; + static const uint8_t ror32by8[] = { + 0x1, 0x2, 0x3, 0x0, 0x5, 0x6, 0x7, 0x4, + 0x9, 0xa, 0xb, 0x8, 0xd, 0xe, 0xf, 0xc, + }; + + uint8x16_t v; + uint8x16_t w = vreinterpretq_u8_m128i(a); + + /* shift rows */ + w = vqtbl1q_u8(w, vld1q_u8(shift_rows)); + + /* sub bytes */ + // Here, we separate the whole 256-bytes table into 4 64-bytes tables, and + // look up each of the table. After each lookup, we load the next table + // which locates at the next 64-bytes. In the meantime, the index in the + // table would be smaller than it was, so the index parameters of + // `vqtbx4q_u8()` need to be added the same constant as the loaded tables. + v = vqtbl4q_u8(_sse2neon_vld1q_u8_x4(_sse2neon_sbox), w); + // 'w-0x40' equals to 'vsubq_u8(w, vdupq_n_u8(0x40))' + v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0x40), w - 0x40); + v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0x80), w - 0x80); + v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0xc0), w - 0xc0); + + /* mix columns */ + w = (v << 1) ^ (uint8x16_t) (((int8x16_t) v >> 7) & 0x1b); + w ^= (uint8x16_t) vrev32q_u16((uint16x8_t) v); + w ^= vqtbl1q_u8(v ^ w, vld1q_u8(ror32by8)); + + /* add round key */ + return vreinterpretq_m128i_u8(w) ^ RoundKey; + +#else /* ARMv7-A implementation for a table-based AES */ +#define SSE2NEON_AES_B2W(b0, b1, b2, b3) \ + (((uint32_t) (b3) << 24) | ((uint32_t) (b2) << 16) | \ + ((uint32_t) (b1) << 8) | (uint32_t) (b0)) +// multiplying 'x' by 2 in GF(2^8) +#define SSE2NEON_AES_F2(x) ((x << 1) ^ (((x >> 7) & 1) * 0x011b /* WPOLY */)) +// multiplying 'x' by 3 in GF(2^8) +#define SSE2NEON_AES_F3(x) (SSE2NEON_AES_F2(x) ^ x) +#define SSE2NEON_AES_U0(p) \ + SSE2NEON_AES_B2W(SSE2NEON_AES_F2(p), p, p, SSE2NEON_AES_F3(p)) +#define SSE2NEON_AES_U1(p) \ + SSE2NEON_AES_B2W(SSE2NEON_AES_F3(p), SSE2NEON_AES_F2(p), p, p) +#define SSE2NEON_AES_U2(p) \ + SSE2NEON_AES_B2W(p, SSE2NEON_AES_F3(p), SSE2NEON_AES_F2(p), p) +#define SSE2NEON_AES_U3(p) \ + SSE2NEON_AES_B2W(p, p, SSE2NEON_AES_F3(p), SSE2NEON_AES_F2(p)) + + // this generates a table containing every possible permutation of + // shift_rows() and sub_bytes() with mix_columns(). + static const uint32_t ALIGN_STRUCT(16) aes_table[4][256] = { + SSE2NEON_AES_SBOX(SSE2NEON_AES_U0), + SSE2NEON_AES_SBOX(SSE2NEON_AES_U1), + SSE2NEON_AES_SBOX(SSE2NEON_AES_U2), + SSE2NEON_AES_SBOX(SSE2NEON_AES_U3), + }; +#undef SSE2NEON_AES_B2W +#undef SSE2NEON_AES_F2 +#undef SSE2NEON_AES_F3 +#undef SSE2NEON_AES_U0 +#undef SSE2NEON_AES_U1 +#undef SSE2NEON_AES_U2 +#undef SSE2NEON_AES_U3 + + uint32_t x0 = _mm_cvtsi128_si32(a); // get a[31:0] + uint32_t x1 = + _mm_cvtsi128_si32(_mm_shuffle_epi32(a, 0x55)); // get a[63:32] + uint32_t x2 = + _mm_cvtsi128_si32(_mm_shuffle_epi32(a, 0xAA)); // get a[95:64] + uint32_t x3 = + _mm_cvtsi128_si32(_mm_shuffle_epi32(a, 0xFF)); // get a[127:96] + + // finish the modulo addition step in mix_columns() + __m128i out = _mm_set_epi32( + (aes_table[0][x3 & 0xff] ^ aes_table[1][(x0 >> 8) & 0xff] ^ + aes_table[2][(x1 >> 16) & 0xff] ^ aes_table[3][x2 >> 24]), + (aes_table[0][x2 & 0xff] ^ aes_table[1][(x3 >> 8) & 0xff] ^ + aes_table[2][(x0 >> 16) & 0xff] ^ aes_table[3][x1 >> 24]), + (aes_table[0][x1 & 0xff] ^ aes_table[1][(x2 >> 8) & 0xff] ^ + aes_table[2][(x3 >> 16) & 0xff] ^ aes_table[3][x0 >> 24]), + (aes_table[0][x0 & 0xff] ^ aes_table[1][(x1 >> 8) & 0xff] ^ + aes_table[2][(x2 >> 16) & 0xff] ^ aes_table[3][x3 >> 24])); + + return _mm_xor_si128(out, RoundKey); +#endif +} + +// Perform one round of an AES decryption flow on data (state) in a using the +// round key in RoundKey, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesdec_si128 +FORCE_INLINE __m128i _mm_aesdec_si128(__m128i a, __m128i RoundKey) +{ +#if defined(__aarch64__) + static const uint8_t inv_shift_rows[] = { + 0x0, 0xd, 0xa, 0x7, 0x4, 0x1, 0xe, 0xb, + 0x8, 0x5, 0x2, 0xf, 0xc, 0x9, 0x6, 0x3, + }; + static const uint8_t ror32by8[] = { + 0x1, 0x2, 0x3, 0x0, 0x5, 0x6, 0x7, 0x4, + 0x9, 0xa, 0xb, 0x8, 0xd, 0xe, 0xf, 0xc, + }; + + uint8x16_t v; + uint8x16_t w = vreinterpretq_u8_m128i(a); + + // inverse shift rows + w = vqtbl1q_u8(w, vld1q_u8(inv_shift_rows)); + + // inverse sub bytes + v = vqtbl4q_u8(_sse2neon_vld1q_u8_x4(_sse2neon_rsbox), w); + v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_rsbox + 0x40), w - 0x40); + v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_rsbox + 0x80), w - 0x80); + v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_rsbox + 0xc0), w - 0xc0); + + // inverse mix columns + // multiplying 'v' by 4 in GF(2^8) + w = (v << 1) ^ (uint8x16_t) (((int8x16_t) v >> 7) & 0x1b); + w = (w << 1) ^ (uint8x16_t) (((int8x16_t) w >> 7) & 0x1b); + v ^= w; + v ^= (uint8x16_t) vrev32q_u16((uint16x8_t) w); + + w = (v << 1) ^ (uint8x16_t) (((int8x16_t) v >> 7) & + 0x1b); // multiplying 'v' by 2 in GF(2^8) + w ^= (uint8x16_t) vrev32q_u16((uint16x8_t) v); + w ^= vqtbl1q_u8(v ^ w, vld1q_u8(ror32by8)); + + // add round key + return vreinterpretq_m128i_u8(w) ^ RoundKey; + +#else /* ARMv7-A NEON implementation */ + /* FIXME: optimized for NEON */ + uint8_t i, e, f, g, h, v[4][4]; + uint8_t *_a = (uint8_t *) &a; + for (i = 0; i < 16; ++i) { + v[((i / 4) + (i % 4)) % 4][i % 4] = _sse2neon_rsbox[_a[i]]; + } + + // inverse mix columns + for (i = 0; i < 4; ++i) { + e = v[i][0]; + f = v[i][1]; + g = v[i][2]; + h = v[i][3]; + + v[i][0] = SSE2NEON_MULTIPLY(e, 0x0e) ^ SSE2NEON_MULTIPLY(f, 0x0b) ^ + SSE2NEON_MULTIPLY(g, 0x0d) ^ SSE2NEON_MULTIPLY(h, 0x09); + v[i][1] = SSE2NEON_MULTIPLY(e, 0x09) ^ SSE2NEON_MULTIPLY(f, 0x0e) ^ + SSE2NEON_MULTIPLY(g, 0x0b) ^ SSE2NEON_MULTIPLY(h, 0x0d); + v[i][2] = SSE2NEON_MULTIPLY(e, 0x0d) ^ SSE2NEON_MULTIPLY(f, 0x09) ^ + SSE2NEON_MULTIPLY(g, 0x0e) ^ SSE2NEON_MULTIPLY(h, 0x0b); + v[i][3] = SSE2NEON_MULTIPLY(e, 0x0b) ^ SSE2NEON_MULTIPLY(f, 0x0d) ^ + SSE2NEON_MULTIPLY(g, 0x09) ^ SSE2NEON_MULTIPLY(h, 0x0e); + } + + return _mm_xor_si128(vreinterpretq_m128i_u8(vld1q_u8((uint8_t *) v)), + RoundKey); +#endif +} + +// Perform the last round of an AES encryption flow on data (state) in a using +// the round key in RoundKey, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesenclast_si128 +FORCE_INLINE __m128i _mm_aesenclast_si128(__m128i a, __m128i RoundKey) +{ +#if defined(__aarch64__) + static const uint8_t shift_rows[] = { + 0x0, 0x5, 0xa, 0xf, 0x4, 0x9, 0xe, 0x3, + 0x8, 0xd, 0x2, 0x7, 0xc, 0x1, 0x6, 0xb, + }; + + uint8x16_t v; + uint8x16_t w = vreinterpretq_u8_m128i(a); + + // shift rows + w = vqtbl1q_u8(w, vld1q_u8(shift_rows)); + + // sub bytes + v = vqtbl4q_u8(_sse2neon_vld1q_u8_x4(_sse2neon_sbox), w); + v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0x40), w - 0x40); + v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0x80), w - 0x80); + v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0xc0), w - 0xc0); + + // add round key + return vreinterpretq_m128i_u8(v) ^ RoundKey; + +#else /* ARMv7-A implementation */ + uint8_t v[16] = { + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 0)], + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 5)], + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 10)], + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 15)], + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 4)], + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 9)], + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 14)], + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 3)], + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 8)], + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 13)], + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 2)], + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 7)], + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 12)], + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 1)], + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 6)], + _sse2neon_sbox[vgetq_lane_u8(vreinterpretq_u8_m128i(a), 11)], + }; + + return _mm_xor_si128(vreinterpretq_m128i_u8(vld1q_u8(v)), RoundKey); +#endif +} + +// Perform the last round of an AES decryption flow on data (state) in a using +// the round key in RoundKey, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesdeclast_si128 +FORCE_INLINE __m128i _mm_aesdeclast_si128(__m128i a, __m128i RoundKey) +{ +#if defined(__aarch64__) + static const uint8_t inv_shift_rows[] = { + 0x0, 0xd, 0xa, 0x7, 0x4, 0x1, 0xe, 0xb, + 0x8, 0x5, 0x2, 0xf, 0xc, 0x9, 0x6, 0x3, + }; + + uint8x16_t v; + uint8x16_t w = vreinterpretq_u8_m128i(a); + + // inverse shift rows + w = vqtbl1q_u8(w, vld1q_u8(inv_shift_rows)); + + // inverse sub bytes + v = vqtbl4q_u8(_sse2neon_vld1q_u8_x4(_sse2neon_rsbox), w); + v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_rsbox + 0x40), w - 0x40); + v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_rsbox + 0x80), w - 0x80); + v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_rsbox + 0xc0), w - 0xc0); + + // add round key + return vreinterpretq_m128i_u8(v) ^ RoundKey; + +#else /* ARMv7-A NEON implementation */ + /* FIXME: optimized for NEON */ + uint8_t v[4][4]; + uint8_t *_a = (uint8_t *) &a; + for (int i = 0; i < 16; ++i) { + v[((i / 4) + (i % 4)) % 4][i % 4] = _sse2neon_rsbox[_a[i]]; + } + + return _mm_xor_si128(vreinterpretq_m128i_u8(vld1q_u8((uint8_t *) v)), + RoundKey); +#endif +} + +// Perform the InvMixColumns transformation on a and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesimc_si128 +FORCE_INLINE __m128i _mm_aesimc_si128(__m128i a) +{ +#if defined(__aarch64__) + static const uint8_t ror32by8[] = { + 0x1, 0x2, 0x3, 0x0, 0x5, 0x6, 0x7, 0x4, + 0x9, 0xa, 0xb, 0x8, 0xd, 0xe, 0xf, 0xc, + }; + uint8x16_t v = vreinterpretq_u8_m128i(a); + uint8x16_t w; + + // multiplying 'v' by 4 in GF(2^8) + w = (v << 1) ^ (uint8x16_t) (((int8x16_t) v >> 7) & 0x1b); + w = (w << 1) ^ (uint8x16_t) (((int8x16_t) w >> 7) & 0x1b); + v ^= w; + v ^= (uint8x16_t) vrev32q_u16((uint16x8_t) w); + + // multiplying 'v' by 2 in GF(2^8) + w = (v << 1) ^ (uint8x16_t) (((int8x16_t) v >> 7) & 0x1b); + w ^= (uint8x16_t) vrev32q_u16((uint16x8_t) v); + w ^= vqtbl1q_u8(v ^ w, vld1q_u8(ror32by8)); + return vreinterpretq_m128i_u8(w); + +#else /* ARMv7-A NEON implementation */ + uint8_t i, e, f, g, h, v[4][4]; + vst1q_u8((uint8_t *) v, vreinterpretq_u8_m128i(a)); + for (i = 0; i < 4; ++i) { + e = v[i][0]; + f = v[i][1]; + g = v[i][2]; + h = v[i][3]; + + v[i][0] = SSE2NEON_MULTIPLY(e, 0x0e) ^ SSE2NEON_MULTIPLY(f, 0x0b) ^ + SSE2NEON_MULTIPLY(g, 0x0d) ^ SSE2NEON_MULTIPLY(h, 0x09); + v[i][1] = SSE2NEON_MULTIPLY(e, 0x09) ^ SSE2NEON_MULTIPLY(f, 0x0e) ^ + SSE2NEON_MULTIPLY(g, 0x0b) ^ SSE2NEON_MULTIPLY(h, 0x0d); + v[i][2] = SSE2NEON_MULTIPLY(e, 0x0d) ^ SSE2NEON_MULTIPLY(f, 0x09) ^ + SSE2NEON_MULTIPLY(g, 0x0e) ^ SSE2NEON_MULTIPLY(h, 0x0b); + v[i][3] = SSE2NEON_MULTIPLY(e, 0x0b) ^ SSE2NEON_MULTIPLY(f, 0x0d) ^ + SSE2NEON_MULTIPLY(g, 0x09) ^ SSE2NEON_MULTIPLY(h, 0x0e); + } + + return vreinterpretq_m128i_u8(vld1q_u8((uint8_t *) v)); +#endif +} + +// Assist in expanding the AES cipher key by computing steps towards generating +// a round key for encryption cipher using data from a and an 8-bit round +// constant specified in imm8, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aeskeygenassist_si128 +// +// Emits the Advanced Encryption Standard (AES) instruction aeskeygenassist. +// This instruction generates a round key for AES encryption. See +// https://kazakov.life/2017/11/01/cryptocurrency-mining-on-ios-devices/ +// for details. +FORCE_INLINE __m128i _mm_aeskeygenassist_si128(__m128i a, const int rcon) +{ +#if defined(__aarch64__) + uint8x16_t _a = vreinterpretq_u8_m128i(a); + uint8x16_t v = vqtbl4q_u8(_sse2neon_vld1q_u8_x4(_sse2neon_sbox), _a); + v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0x40), _a - 0x40); + v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0x80), _a - 0x80); + v = vqtbx4q_u8(v, _sse2neon_vld1q_u8_x4(_sse2neon_sbox + 0xc0), _a - 0xc0); + + uint32x4_t v_u32 = vreinterpretq_u32_u8(v); + uint32x4_t ror_v = vorrq_u32(vshrq_n_u32(v_u32, 8), vshlq_n_u32(v_u32, 24)); + uint32x4_t ror_xor_v = veorq_u32(ror_v, vdupq_n_u32(rcon)); + + return vreinterpretq_m128i_u32(vtrn2q_u32(v_u32, ror_xor_v)); + +#else /* ARMv7-A NEON implementation */ + uint32_t X1 = _mm_cvtsi128_si32(_mm_shuffle_epi32(a, 0x55)); + uint32_t X3 = _mm_cvtsi128_si32(_mm_shuffle_epi32(a, 0xFF)); + for (int i = 0; i < 4; ++i) { + ((uint8_t *) &X1)[i] = _sse2neon_sbox[((uint8_t *) &X1)[i]]; + ((uint8_t *) &X3)[i] = _sse2neon_sbox[((uint8_t *) &X3)[i]]; + } + return _mm_set_epi32(((X3 >> 8) | (X3 << 24)) ^ rcon, X3, + ((X1 >> 8) | (X1 << 24)) ^ rcon, X1); +#endif +} +#undef SSE2NEON_AES_SBOX +#undef SSE2NEON_AES_RSBOX + +#if defined(__aarch64__) +#undef SSE2NEON_XT +#undef SSE2NEON_MULTIPLY +#endif + +#else /* __ARM_FEATURE_CRYPTO */ +// Implements equivalent of 'aesenc' by combining AESE (with an empty key) and +// AESMC and then manually applying the real key as an xor operation. This +// unfortunately means an additional xor op; the compiler should be able to +// optimize this away for repeated calls however. See +// https://blog.michaelbrase.com/2018/05/08/emulating-x86-aes-intrinsics-on-armv8-a +// for more details. +FORCE_INLINE __m128i _mm_aesenc_si128(__m128i a, __m128i b) +{ + return vreinterpretq_m128i_u8(veorq_u8( + vaesmcq_u8(vaeseq_u8(vreinterpretq_u8_m128i(a), vdupq_n_u8(0))), + vreinterpretq_u8_m128i(b))); +} + +// Perform one round of an AES decryption flow on data (state) in a using the +// round key in RoundKey, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesdec_si128 +FORCE_INLINE __m128i _mm_aesdec_si128(__m128i a, __m128i RoundKey) +{ + return vreinterpretq_m128i_u8(veorq_u8( + vaesimcq_u8(vaesdq_u8(vreinterpretq_u8_m128i(a), vdupq_n_u8(0))), + vreinterpretq_u8_m128i(RoundKey))); +} + +// Perform the last round of an AES encryption flow on data (state) in a using +// the round key in RoundKey, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesenclast_si128 +FORCE_INLINE __m128i _mm_aesenclast_si128(__m128i a, __m128i RoundKey) +{ + return _mm_xor_si128(vreinterpretq_m128i_u8(vaeseq_u8( + vreinterpretq_u8_m128i(a), vdupq_n_u8(0))), + RoundKey); +} + +// Perform the last round of an AES decryption flow on data (state) in a using +// the round key in RoundKey, and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesdeclast_si128 +FORCE_INLINE __m128i _mm_aesdeclast_si128(__m128i a, __m128i RoundKey) +{ + return vreinterpretq_m128i_u8( + veorq_u8(vaesdq_u8(vreinterpretq_u8_m128i(a), vdupq_n_u8(0)), + vreinterpretq_u8_m128i(RoundKey))); +} + +// Perform the InvMixColumns transformation on a and store the result in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aesimc_si128 +FORCE_INLINE __m128i _mm_aesimc_si128(__m128i a) +{ + return vreinterpretq_m128i_u8(vaesimcq_u8(vreinterpretq_u8_m128i(a))); +} + +// Assist in expanding the AES cipher key by computing steps towards generating +// a round key for encryption cipher using data from a and an 8-bit round +// constant specified in imm8, and store the result in dst." +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_aeskeygenassist_si128 +FORCE_INLINE __m128i _mm_aeskeygenassist_si128(__m128i a, const int rcon) +{ + // AESE does ShiftRows and SubBytes on A + uint8x16_t u8 = vaeseq_u8(vreinterpretq_u8_m128i(a), vdupq_n_u8(0)); + +#if !defined(_MSC_VER) || defined(__clang__) + uint8x16_t dest = { + // Undo ShiftRows step from AESE and extract X1 and X3 + u8[0x4], u8[0x1], u8[0xE], u8[0xB], // SubBytes(X1) + u8[0x1], u8[0xE], u8[0xB], u8[0x4], // ROT(SubBytes(X1)) + u8[0xC], u8[0x9], u8[0x6], u8[0x3], // SubBytes(X3) + u8[0x9], u8[0x6], u8[0x3], u8[0xC], // ROT(SubBytes(X3)) + }; + uint32x4_t r = {0, (unsigned) rcon, 0, (unsigned) rcon}; + return vreinterpretq_m128i_u8(dest) ^ vreinterpretq_m128i_u32(r); +#else + // We have to do this hack because MSVC is strictly adhering to the CPP + // standard, in particular C++03 8.5.1 sub-section 15, which states that + // unions must be initialized by their first member type. + + // As per the Windows ARM64 ABI, it is always little endian, so this works + __n128 dest{ + ((uint64_t) u8.n128_u8[0x4] << 0) | ((uint64_t) u8.n128_u8[0x1] << 8) | + ((uint64_t) u8.n128_u8[0xE] << 16) | + ((uint64_t) u8.n128_u8[0xB] << 24) | + ((uint64_t) u8.n128_u8[0x1] << 32) | + ((uint64_t) u8.n128_u8[0xE] << 40) | + ((uint64_t) u8.n128_u8[0xB] << 48) | + ((uint64_t) u8.n128_u8[0x4] << 56), + ((uint64_t) u8.n128_u8[0xC] << 0) | ((uint64_t) u8.n128_u8[0x9] << 8) | + ((uint64_t) u8.n128_u8[0x6] << 16) | + ((uint64_t) u8.n128_u8[0x3] << 24) | + ((uint64_t) u8.n128_u8[0x9] << 32) | + ((uint64_t) u8.n128_u8[0x6] << 40) | + ((uint64_t) u8.n128_u8[0x3] << 48) | + ((uint64_t) u8.n128_u8[0xC] << 56)}; + + dest.n128_u32[1] = dest.n128_u32[1] ^ rcon; + dest.n128_u32[3] = dest.n128_u32[3] ^ rcon; + + return dest; +#endif +} +#endif + +/* Others */ + +// Perform a carry-less multiplication of two 64-bit integers, selected from a +// and b according to imm8, and store the results in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_clmulepi64_si128 +FORCE_INLINE __m128i _mm_clmulepi64_si128(__m128i _a, __m128i _b, const int imm) +{ + uint64x2_t a = vreinterpretq_u64_m128i(_a); + uint64x2_t b = vreinterpretq_u64_m128i(_b); + switch (imm & 0x11) { + case 0x00: + return vreinterpretq_m128i_u64( + _sse2neon_vmull_p64(vget_low_u64(a), vget_low_u64(b))); + case 0x01: + return vreinterpretq_m128i_u64( + _sse2neon_vmull_p64(vget_high_u64(a), vget_low_u64(b))); + case 0x10: + return vreinterpretq_m128i_u64( + _sse2neon_vmull_p64(vget_low_u64(a), vget_high_u64(b))); + case 0x11: + return vreinterpretq_m128i_u64( + _sse2neon_vmull_p64(vget_high_u64(a), vget_high_u64(b))); + default: + abort(); + } +} + +FORCE_INLINE unsigned int _sse2neon_mm_get_denormals_zero_mode(void) +{ + union { + fpcr_bitfield field; +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + uint64_t value; +#else + uint32_t value; +#endif + } r; + +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + r.value = _sse2neon_get_fpcr(); +#else + __asm__ __volatile__("vmrs %0, FPSCR" : "=r"(r.value)); /* read */ +#endif + + return r.field.bit24 ? _MM_DENORMALS_ZERO_ON : _MM_DENORMALS_ZERO_OFF; +} + +// Count the number of bits set to 1 in unsigned 32-bit integer a, and +// return that count in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_popcnt_u32 +FORCE_INLINE int _mm_popcnt_u32(unsigned int a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) +#if __has_builtin(__builtin_popcount) + return __builtin_popcount(a); +#elif defined(_MSC_VER) + return _CountOneBits(a); +#else + return (int) vaddlv_u8(vcnt_u8(vcreate_u8((uint64_t) a))); +#endif +#else + uint32_t count = 0; + uint8x8_t input_val, count8x8_val; + uint16x4_t count16x4_val; + uint32x2_t count32x2_val; + + input_val = vld1_u8((uint8_t *) &a); + count8x8_val = vcnt_u8(input_val); + count16x4_val = vpaddl_u8(count8x8_val); + count32x2_val = vpaddl_u16(count16x4_val); + + vst1_u32(&count, count32x2_val); + return count; +#endif +} + +// Count the number of bits set to 1 in unsigned 64-bit integer a, and +// return that count in dst. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_popcnt_u64 +FORCE_INLINE int64_t _mm_popcnt_u64(uint64_t a) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) +#if __has_builtin(__builtin_popcountll) + return __builtin_popcountll(a); +#elif defined(_MSC_VER) + return _CountOneBits64(a); +#else + return (int64_t) vaddlv_u8(vcnt_u8(vcreate_u8(a))); +#endif +#else + uint64_t count = 0; + uint8x8_t input_val, count8x8_val; + uint16x4_t count16x4_val; + uint32x2_t count32x2_val; + uint64x1_t count64x1_val; + + input_val = vld1_u8((uint8_t *) &a); + count8x8_val = vcnt_u8(input_val); + count16x4_val = vpaddl_u8(count8x8_val); + count32x2_val = vpaddl_u16(count16x4_val); + count64x1_val = vpaddl_u32(count32x2_val); + vst1_u64(&count, count64x1_val); + return count; +#endif +} + +FORCE_INLINE void _sse2neon_mm_set_denormals_zero_mode(unsigned int flag) +{ + // AArch32 Advanced SIMD arithmetic always uses the Flush-to-zero setting, + // regardless of the value of the FZ bit. + union { + fpcr_bitfield field; +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + uint64_t value; +#else + uint32_t value; +#endif + } r; + +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + r.value = _sse2neon_get_fpcr(); +#else + __asm__ __volatile__("vmrs %0, FPSCR" : "=r"(r.value)); /* read */ +#endif + + r.field.bit24 = (flag & _MM_DENORMALS_ZERO_MASK) == _MM_DENORMALS_ZERO_ON; + +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + _sse2neon_set_fpcr(r.value); +#else + __asm__ __volatile__("vmsr FPSCR, %0" ::"r"(r)); /* write */ +#endif +} + +// Return the current 64-bit value of the processor's time-stamp counter. +// https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=rdtsc +FORCE_INLINE uint64_t _rdtsc(void) +{ +#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) + uint64_t val; + + /* According to ARM DDI 0487F.c, from Armv8.0 to Armv8.5 inclusive, the + * system counter is at least 56 bits wide; from Armv8.6, the counter + * must be 64 bits wide. So the system counter could be less than 64 + * bits wide and it is attributed with the flag 'cap_user_time_short' + * is true. + */ +#if defined(_MSC_VER) && !defined(__clang__) + val = _ReadStatusReg(ARM64_SYSREG(3, 3, 14, 0, 2)); +#else + __asm__ __volatile__("mrs %0, cntvct_el0" : "=r"(val)); +#endif + + return val; +#else + uint32_t pmccntr, pmuseren, pmcntenset; + // Read the user mode Performance Monitoring Unit (PMU) + // User Enable Register (PMUSERENR) access permissions. + __asm__ __volatile__("mrc p15, 0, %0, c9, c14, 0" : "=r"(pmuseren)); + if (pmuseren & 1) { // Allows reading PMUSERENR for user mode code. + __asm__ __volatile__("mrc p15, 0, %0, c9, c12, 1" : "=r"(pmcntenset)); + if (pmcntenset & 0x80000000UL) { // Is it counting? + __asm__ __volatile__("mrc p15, 0, %0, c9, c13, 0" : "=r"(pmccntr)); + // The counter is set up to count every 64th cycle + return (uint64_t) (pmccntr) << 6; + } + } + + // Fallback to syscall as we can't enable PMUSERENR in user mode. + struct timeval tv; + gettimeofday(&tv, NULL); + return (uint64_t) (tv.tv_sec) * 1000000 + tv.tv_usec; +#endif +} + +#if defined(__GNUC__) || defined(__clang__) +#pragma pop_macro("ALIGN_STRUCT") +#pragma pop_macro("FORCE_INLINE") +#endif + +#if defined(__GNUC__) && !defined(__clang__) +#pragma GCC pop_options +#endif + +#endif diff --git a/deps/sse2neon/sse2neon.sln b/deps/sse2neon/sse2neon.sln new file mode 100644 index 000000000..28582e3dc --- /dev/null +++ b/deps/sse2neon/sse2neon.sln @@ -0,0 +1,37 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.3.32901.215 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sse2neon", "sse2neon.vcxproj", "{341BF194-865B-4DA6-8120-93173498E774}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|ARM = Debug|ARM + Debug|ARM64 = Debug|ARM64 + Debug|ARM64EC = Debug|ARM64EC + Release|ARM = Release|ARM + Release|ARM64 = Release|ARM64 + Release|ARM64EC = Release|ARM64EC + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {341BF194-865B-4DA6-8120-93173498E774}.Debug|ARM.ActiveCfg = Debug|ARM + {341BF194-865B-4DA6-8120-93173498E774}.Debug|ARM.Build.0 = Debug|ARM + {341BF194-865B-4DA6-8120-93173498E774}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {341BF194-865B-4DA6-8120-93173498E774}.Debug|ARM64.Build.0 = Debug|ARM64 + {341BF194-865B-4DA6-8120-93173498E774}.Debug|ARM64EC.ActiveCfg = Debug|ARM64EC + {341BF194-865B-4DA6-8120-93173498E774}.Debug|ARM64EC.Build.0 = Debug|ARM64EC + {341BF194-865B-4DA6-8120-93173498E774}.Release|ARM.ActiveCfg = Release|ARM + {341BF194-865B-4DA6-8120-93173498E774}.Release|ARM.Build.0 = Release|ARM + {341BF194-865B-4DA6-8120-93173498E774}.Release|ARM64.ActiveCfg = Release|ARM64 + {341BF194-865B-4DA6-8120-93173498E774}.Release|ARM64.Build.0 = Release|ARM64 + {341BF194-865B-4DA6-8120-93173498E774}.Release|ARM64EC.ActiveCfg = Release|ARM64EC + {341BF194-865B-4DA6-8120-93173498E774}.Release|ARM64EC.Build.0 = Release|ARM64EC + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {D503B299-AA05-4E05-A8D9-37C8D229ACB1} + EndGlobalSection +EndGlobal diff --git a/deps/sse2neon/sse2neon.vcxproj b/deps/sse2neon/sse2neon.vcxproj new file mode 100644 index 000000000..5397174e4 --- /dev/null +++ b/deps/sse2neon/sse2neon.vcxproj @@ -0,0 +1,217 @@ + + + + + Debug + ARM + + + Debug + ARM64 + + + Debug + ARM64EC + + + Release + ARM + + + Release + ARM64 + + + Release + ARM64EC + + + + 16.0 + Win32Proj + {341bf194-865b-4da6-8120-93173498e774} + sse2neon + 10.0 + + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + Application + true + v143 + Unicode + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + Application + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + + + Level3 + true + __i386__;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + .;%(AdditionalIncludeDirectories) + + + Console + true + + + + + Level3 + true + true + true + __i386__;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + .;%(AdditionalIncludeDirectories) + + + Console + true + true + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + .;%(AdditionalIncludeDirectories) + /Zc:preprocessor + true + + + Console + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + .;%(AdditionalIncludeDirectories) + /Zc:preprocessor + true + stdcpp20 + false + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + .;%(AdditionalIncludeDirectories) + /Zc:preprocessor %(AdditionalOptions) + + + Console + true + true + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + .;%(AdditionalIncludeDirectories) + /Zc:preprocessor %(AdditionalOptions) + false + + + Console + true + true + true + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/deps/sse2neon/sse2neon.vcxproj.filters b/deps/sse2neon/sse2neon.vcxproj.filters new file mode 100644 index 000000000..e4f5e0454 --- /dev/null +++ b/deps/sse2neon/sse2neon.vcxproj.filters @@ -0,0 +1,45 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/deps/sse2neon/tests/README.md b/deps/sse2neon/tests/README.md new file mode 100644 index 000000000..b345b0857 --- /dev/null +++ b/deps/sse2neon/tests/README.md @@ -0,0 +1,29 @@ +# Test Suite for SSE2NEON + +:warning: **Warning: The test suite is based on the little-endian architecture.** + +## Add More Test Items +Once the conversion is implemented, the test can be added with the following steps: + +* File `tests/impl.h` + + Add the intrinsic under `INTRIN_LIST` macro. The naming convention + should be `mm_xxx`. + Place it in the correct classification with the alphabetical order. + The classification can be referenced from [Intel Intrinsics Guide](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html). + +* File `tests/impl.cpp` + ```c + result_t test_mm_xxx() + { + // The C implementation + ... + + // The Neon implementation + ret = _mm_xxx(); + + // Compare the result of two implementations and return either + // TEST_SUCCESS, TEST_FAIL, or TEST_UNIMPL + ... + } + ``` diff --git a/deps/sse2neon/tests/binding.cpp b/deps/sse2neon/tests/binding.cpp new file mode 100644 index 000000000..ca1bb57fe --- /dev/null +++ b/deps/sse2neon/tests/binding.cpp @@ -0,0 +1,35 @@ +#include "binding.h" + +#include +#include + +namespace SSE2NEON +{ +void *platformAlignedAlloc(size_t size) +{ + void *address; +#if defined(_WIN32) + address = _aligned_malloc(size, 16); + if (!address) { +#else + int ret = posix_memalign(&address, 16, size); + if (ret != 0) { +#endif + fprintf(stderr, "Error at File %s line number %d\n", __FILE__, + __LINE__); + exit(EXIT_FAILURE); + } + return address; +} + +void platformAlignedFree(void *ptr) +{ +#if defined(_WIN32) + _aligned_free(ptr); +#else + free(ptr); +#endif +} + + +} // namespace SSE2NEON diff --git a/deps/sse2neon/tests/binding.h b/deps/sse2neon/tests/binding.h new file mode 100644 index 000000000..64a9fa506 --- /dev/null +++ b/deps/sse2neon/tests/binding.h @@ -0,0 +1,19 @@ +#ifndef SSE2NEONBINDING_H +#define SSE2NEONBINDING_H + +#include + +// The SSE2NEON unit tests run both within our own internal project +// as well as within the open source framework. +// This header file is used to abstract any distinctions between +// those two build environments. +// +// Initially, this is for how 16 byte aligned memory is allocated +namespace SSE2NEON +{ +void *platformAlignedAlloc(size_t size); +void platformAlignedFree(void *ptr); + +} // namespace SSE2NEON + +#endif diff --git a/deps/sse2neon/tests/common.cpp b/deps/sse2neon/tests/common.cpp new file mode 100644 index 000000000..f1427aca1 --- /dev/null +++ b/deps/sse2neon/tests/common.cpp @@ -0,0 +1,414 @@ +#include "common.h" +#include +#include + +namespace SSE2NEON +{ +int32_t NaN = ~0; +int64_t NaN64 = ~0; + +result_t validateInt64(__m128i a, int64_t i0, int64_t i1) +{ + const int64_t *t = (const int64_t *) &a; + ASSERT_RETURN(t[0] == i0); + ASSERT_RETURN(t[1] == i1); + return TEST_SUCCESS; +} + +result_t validateInt64(__m64 a, int64_t i0) +{ + const int64_t *t = (const int64_t *) &a; + ASSERT_RETURN(t[0] == i0); + return TEST_SUCCESS; +} + +result_t validateUInt64(__m128i a, uint64_t u0, uint64_t u1) +{ + const uint64_t *t = (const uint64_t *) &a; + ASSERT_RETURN(t[0] == u0); + ASSERT_RETURN(t[1] == u1); + return TEST_SUCCESS; +} + +result_t validateUInt64(__m64 a, uint64_t u0) +{ + const uint64_t *t = (const uint64_t *) &a; + ASSERT_RETURN(t[0] == u0); + return TEST_SUCCESS; +} + +result_t validateInt32(__m128i a, + int32_t i0, + int32_t i1, + int32_t i2, + int32_t i3) +{ + const int32_t *t = (const int32_t *) &a; + ASSERT_RETURN(t[0] == i0); + ASSERT_RETURN(t[1] == i1); + ASSERT_RETURN(t[2] == i2); + ASSERT_RETURN(t[3] == i3); + return TEST_SUCCESS; +} + +result_t validateUInt32(__m128i a, + uint32_t u0, + uint32_t u1, + uint32_t u2, + uint32_t u3) +{ + const uint32_t *t = (const uint32_t *) &a; + ASSERT_RETURN(t[0] == u0); + ASSERT_RETURN(t[1] == u1); + ASSERT_RETURN(t[2] == u2); + ASSERT_RETURN(t[3] == u3); + return TEST_SUCCESS; +} + +result_t validateUInt32(__m64 a, uint32_t u0, uint32_t u1) +{ + const uint32_t *t = (const uint32_t *) &a; + ASSERT_RETURN(t[0] == u0); + ASSERT_RETURN(t[1] == u1); + return TEST_SUCCESS; +} + +result_t validateInt16(__m128i a, + int16_t i0, + int16_t i1, + int16_t i2, + int16_t i3, + int16_t i4, + int16_t i5, + int16_t i6, + int16_t i7) +{ + const int16_t *t = (const int16_t *) &a; + ASSERT_RETURN(t[0] == i0); + ASSERT_RETURN(t[1] == i1); + ASSERT_RETURN(t[2] == i2); + ASSERT_RETURN(t[3] == i3); + ASSERT_RETURN(t[4] == i4); + ASSERT_RETURN(t[5] == i5); + ASSERT_RETURN(t[6] == i6); + ASSERT_RETURN(t[7] == i7); + return TEST_SUCCESS; +} + +result_t validateInt16(__m64 a, int16_t i0, int16_t i1, int16_t i2, int16_t i3) +{ + const int16_t *t = (const int16_t *) &a; + ASSERT_RETURN(t[0] == i0); + ASSERT_RETURN(t[1] == i1); + ASSERT_RETURN(t[2] == i2); + ASSERT_RETURN(t[3] == i3); + return TEST_SUCCESS; +} + +result_t validateUInt16(__m128i a, + uint16_t u0, + uint16_t u1, + uint16_t u2, + uint16_t u3, + uint16_t u4, + uint16_t u5, + uint16_t u6, + uint16_t u7) +{ + const uint16_t *t = (const uint16_t *) &a; + ASSERT_RETURN(t[0] == u0); + ASSERT_RETURN(t[1] == u1); + ASSERT_RETURN(t[2] == u2); + ASSERT_RETURN(t[3] == u3); + ASSERT_RETURN(t[4] == u4); + ASSERT_RETURN(t[5] == u5); + ASSERT_RETURN(t[6] == u6); + ASSERT_RETURN(t[7] == u7); + return TEST_SUCCESS; +} + +result_t validateInt32(__m64 a, int32_t u0, int32_t u1) +{ + const int32_t *t = (const int32_t *) &a; + ASSERT_RETURN(t[0] == u0); + ASSERT_RETURN(t[1] == u1); + return TEST_SUCCESS; +} + +result_t validateUInt16(__m64 a, + uint16_t u0, + uint16_t u1, + uint16_t u2, + uint16_t u3) +{ + const uint16_t *t = (const uint16_t *) &a; + ASSERT_RETURN(t[0] == u0); + ASSERT_RETURN(t[1] == u1); + ASSERT_RETURN(t[2] == u2); + ASSERT_RETURN(t[3] == u3); + return TEST_SUCCESS; +} + +result_t validateInt8(__m128i a, + int8_t i0, + int8_t i1, + int8_t i2, + int8_t i3, + int8_t i4, + int8_t i5, + int8_t i6, + int8_t i7, + int8_t i8, + int8_t i9, + int8_t i10, + int8_t i11, + int8_t i12, + int8_t i13, + int8_t i14, + int8_t i15) +{ + const int8_t *t = (const int8_t *) &a; + ASSERT_RETURN(t[0] == i0); + ASSERT_RETURN(t[1] == i1); + ASSERT_RETURN(t[2] == i2); + ASSERT_RETURN(t[3] == i3); + ASSERT_RETURN(t[4] == i4); + ASSERT_RETURN(t[5] == i5); + ASSERT_RETURN(t[6] == i6); + ASSERT_RETURN(t[7] == i7); + ASSERT_RETURN(t[8] == i8); + ASSERT_RETURN(t[9] == i9); + ASSERT_RETURN(t[10] == i10); + ASSERT_RETURN(t[11] == i11); + ASSERT_RETURN(t[12] == i12); + ASSERT_RETURN(t[13] == i13); + ASSERT_RETURN(t[14] == i14); + ASSERT_RETURN(t[15] == i15); + return TEST_SUCCESS; +} + +result_t validateInt8(__m64 a, + int8_t i0, + int8_t i1, + int8_t i2, + int8_t i3, + int8_t i4, + int8_t i5, + int8_t i6, + int8_t i7) +{ + const int8_t *t = (const int8_t *) &a; + ASSERT_RETURN(t[0] == i0); + ASSERT_RETURN(t[1] == i1); + ASSERT_RETURN(t[2] == i2); + ASSERT_RETURN(t[3] == i3); + ASSERT_RETURN(t[4] == i4); + ASSERT_RETURN(t[5] == i5); + ASSERT_RETURN(t[6] == i6); + ASSERT_RETURN(t[7] == i7); + return TEST_SUCCESS; +} + +result_t validateUInt8(__m128i a, + uint8_t u0, + uint8_t u1, + uint8_t u2, + uint8_t u3, + uint8_t u4, + uint8_t u5, + uint8_t u6, + uint8_t u7, + uint8_t u8, + uint8_t u9, + uint8_t u10, + uint8_t u11, + uint8_t u12, + uint8_t u13, + uint8_t u14, + uint8_t u15) +{ + const uint8_t *t = (const uint8_t *) &a; + ASSERT_RETURN(t[0] == u0); + ASSERT_RETURN(t[1] == u1); + ASSERT_RETURN(t[2] == u2); + ASSERT_RETURN(t[3] == u3); + ASSERT_RETURN(t[4] == u4); + ASSERT_RETURN(t[5] == u5); + ASSERT_RETURN(t[6] == u6); + ASSERT_RETURN(t[7] == u7); + ASSERT_RETURN(t[8] == u8); + ASSERT_RETURN(t[9] == u9); + ASSERT_RETURN(t[10] == u10); + ASSERT_RETURN(t[11] == u11); + ASSERT_RETURN(t[12] == u12); + ASSERT_RETURN(t[13] == u13); + ASSERT_RETURN(t[14] == u14); + ASSERT_RETURN(t[15] == u15); + return TEST_SUCCESS; +} + +result_t validateUInt8(__m64 a, + uint8_t u0, + uint8_t u1, + uint8_t u2, + uint8_t u3, + uint8_t u4, + uint8_t u5, + uint8_t u6, + uint8_t u7) +{ + const uint8_t *t = (const uint8_t *) &a; + ASSERT_RETURN(t[0] == u0); + ASSERT_RETURN(t[1] == u1); + ASSERT_RETURN(t[2] == u2); + ASSERT_RETURN(t[3] == u3); + ASSERT_RETURN(t[4] == u4); + ASSERT_RETURN(t[5] == u5); + ASSERT_RETURN(t[6] == u6); + ASSERT_RETURN(t[7] == u7); + return TEST_SUCCESS; +} + +result_t validateSingleFloatPair(float a, float b) +{ + const uint32_t *ua = (const uint32_t *) &a; + const uint32_t *ub = (const uint32_t *) &b; + // We do an integer (binary) compare rather than a + // floating point compare to take NaNs and infinities + // into account as well. + return (*ua) == (*ub) ? TEST_SUCCESS : TEST_FAIL; +} + +result_t validateSingleDoublePair(double a, double b) +{ + const uint64_t *ua = (const uint64_t *) &a; + const uint64_t *ub = (const uint64_t *) &b; + // We do an integer (binary) compare rather than a + // floating point compare to take NaNs and infinities + // into account as well. + + if (std::isnan(a) && std::isnan(b)) { + return TEST_SUCCESS; + } + + return (*ua) == (*ub) ? TEST_SUCCESS : TEST_FAIL; +} + +result_t validateFloat(__m128 a, float f0, float f1, float f2, float f3) +{ + const float *t = (const float *) &a; + ASSERT_RETURN(validateSingleFloatPair(t[0], f0)); + ASSERT_RETURN(validateSingleFloatPair(t[1], f1)); + ASSERT_RETURN(validateSingleFloatPair(t[2], f2)); + ASSERT_RETURN(validateSingleFloatPair(t[3], f3)); + return TEST_SUCCESS; +} + +result_t validateFloatEpsilon(__m128 a, + float f0, + float f1, + float f2, + float f3, + float epsilon) +{ + const float *t = (const float *) &a; + float df0 = fabsf(t[0] - f0); + float df1 = fabsf(t[1] - f1); + float df2 = fabsf(t[2] - f2); + float df3 = fabsf(t[3] - f3); + + // Due to floating-point error, subtracting floating-point number with NaN + // and zero value usually produces erroneous result. Therefore, we directly + // define the difference of two floating-point numbers to zero if both + // numbers are NaN or zero. + if ((std::isnan(t[0]) && std::isnan(f0)) || (t[0] == 0 && f0 == 0)) { + df0 = 0; + } + + if ((std::isnan(t[1]) && std::isnan(f1)) || (t[1] == 0 && f1 == 0)) { + df1 = 0; + } + + if ((std::isnan(t[2]) && std::isnan(f2)) || (t[2] == 0 && f2 == 0)) { + df2 = 0; + } + + if ((std::isnan(t[3]) && std::isnan(f3)) || (t[3] == 0 && f3 == 0)) { + df3 = 0; + } + + ASSERT_RETURN(df0 < epsilon); + ASSERT_RETURN(df1 < epsilon); + ASSERT_RETURN(df2 < epsilon); + ASSERT_RETURN(df3 < epsilon); + return TEST_SUCCESS; +} + +result_t validateFloatError(__m128 a, + float f0, + float f1, + float f2, + float f3, + float err) +{ + const float *t = (const float *) &a; + float df0 = fabsf((t[0] - f0) / f0); + float df1 = fabsf((t[1] - f1) / f1); + float df2 = fabsf((t[2] - f2) / f2); + float df3 = fabsf((t[3] - f3) / f3); + + if ((std::isnan(t[0]) && std::isnan(f0)) || (t[0] == 0 && f0 == 0) || + (std::isinf(t[0]) && std::isinf(f0))) { + df0 = 0; + } + + if ((std::isnan(t[1]) && std::isnan(f1)) || (t[1] == 0 && f1 == 0) || + (std::isinf(t[1]) && std::isinf(f1))) { + df1 = 0; + } + + if ((std::isnan(t[2]) && std::isnan(f2)) || (t[2] == 0 && f2 == 0) || + (std::isinf(t[2]) && std::isinf(f2))) { + df2 = 0; + } + + if ((std::isnan(t[3]) && std::isnan(f3)) || (t[3] == 0 && f3 == 0) || + (std::isinf(t[3]) && std::isinf(f3))) { + df3 = 0; + } + + ASSERT_RETURN(df0 < err); + ASSERT_RETURN(df1 < err); + ASSERT_RETURN(df2 < err); + ASSERT_RETURN(df3 < err); + return TEST_SUCCESS; +} + +result_t validateDouble(__m128d a, double d0, double d1) +{ + const double *t = (const double *) &a; + ASSERT_RETURN(validateSingleDoublePair(t[0], d0)); + ASSERT_RETURN(validateSingleDoublePair(t[1], d1)); + return TEST_SUCCESS; +} + +result_t validateFloatError(__m128d a, double d0, double d1, double err) +{ + const double *t = (const double *) &a; + double td0 = fabs((t[0] - d0) / d0); + double td1 = fabs((t[1] - d1) / d1); + + if (std::isnan(t[0]) && std::isnan(d0)) { + td0 = 0; + } + + if (std::isnan(t[1]) && std::isnan(d1)) { + td1 = 0; + } + + ASSERT_RETURN(td0 < err); + ASSERT_RETURN(td1 < err); + return TEST_SUCCESS; +} + +} // namespace SSE2NEON diff --git a/deps/sse2neon/tests/common.h b/deps/sse2neon/tests/common.h new file mode 100644 index 000000000..74d6dea21 --- /dev/null +++ b/deps/sse2neon/tests/common.h @@ -0,0 +1,527 @@ +#ifndef SSE2NEONCOMMON_H +#define SSE2NEONCOMMON_H +#include +#if (defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC)) || \ + defined(__arm__) +#include "sse2neon.h" +#elif defined(__x86_64__) || defined(__i386__) +#include +#include +#include +#include +#include +#include + +// __int64 is defined in the Intrinsics Guide which maps to different datatype +// in different data model +#if !(defined(_WIN32) || defined(_WIN64) || defined(__int64)) +#if (defined(__x86_64__) || defined(__i386__)) +#define __int64 long long +#else +#define __int64 int64_t +#endif +#endif + +#if defined(__GNUC__) || defined(__clang__) +#pragma push_macro("ALIGN_STRUCT") +#define ALIGN_STRUCT(x) __attribute__((aligned(x))) +#else +#define ALIGN_STRUCT(x) __declspec(align(x)) +#endif + +typedef union ALIGN_STRUCT(16) SIMDVec { + float m128_f32[4]; // as floats - DON'T USE. Added for convenience. + int8_t m128_i8[16]; // as signed 8-bit integers. + int16_t m128_i16[8]; // as signed 16-bit integers. + int32_t m128_i32[4]; // as signed 32-bit integers. + int64_t m128_i64[2]; // as signed 64-bit integers. + uint8_t m128_u8[16]; // as unsigned 8-bit integers. + uint16_t m128_u16[8]; // as unsigned 16-bit integers. + uint32_t m128_u32[4]; // as unsigned 32-bit integers. + uint64_t m128_u64[2]; // as unsigned 64-bit integers. +} SIMDVec; + +#if defined(__GNUC__) || defined(__clang__) +#pragma pop_macro("ALIGN_STRUCT") +#endif + +/* Tunable testing configuration for precise testing */ +/* _mm_min|max_ps|ss|pd|sd */ +#ifndef SSE2NEON_PRECISE_MINMAX +#define SSE2NEON_PRECISE_MINMAX (0) +#endif +#endif + +#define ASSERT_RETURN(x) \ + if (!(x)) \ + return TEST_FAIL; + +namespace SSE2NEON +{ +enum result_t { + TEST_SUCCESS = 1, + TEST_FAIL = 0, + TEST_UNIMPL = -1, +}; +extern int32_t NaN; +extern int64_t NaN64; + +#if defined(__GNUC__) && !defined(__clang__) +#pragma push_macro("OPTNONE") +#define OPTNONE __attribute__((optimize("O0"))) +#elif defined(__clang__) +#pragma push_macro("OPTNONE") +#define OPTNONE __attribute__((optnone)) +#else +#define OPTNONE +#endif + +#include +static inline double sse2neon_tool_recast_f64(uint64_t u64) +{ + double f64; + memcpy(&f64, &u64, sizeof(uint64_t)); + return f64; +} +static inline int64_t sse2neon_tool_recast_i64(double f64) +{ + int64_t i64; + memcpy(&i64, &f64, sizeof(int64_t)); + return i64; +} +static inline float sse2neon_tool_recast_f32(uint32_t u32) +{ + float f32; + memcpy(&f32, &u32, sizeof(uint32_t)); + return f32; +} +static inline float sse2neon_tool_recast_f32(int32_t i32) +{ + float f32; + memcpy(&f32, &i32, sizeof(int32_t)); + return f32; +} +#define ALL_BIT_1_32 sse2neon_tool_recast_f32(UINT32_MAX) +#define ALL_BIT_1_64 sse2neon_tool_recast_f64(UINT64_MAX) + +template +result_t validate128(T a, T b) +{ + const int32_t *t1 = (const int32_t *) &a; + const int32_t *t2 = (const int32_t *) &b; + + ASSERT_RETURN(t1[0] == t2[0]); + ASSERT_RETURN(t1[1] == t2[1]); + ASSERT_RETURN(t1[2] == t2[2]); + ASSERT_RETURN(t1[3] == t2[3]); + return TEST_SUCCESS; +} +result_t validateInt64(__m128i a, int64_t i0, int64_t i1); +result_t validateInt64(__m64 a, int64_t i0); +result_t validateUInt64(__m128i a, uint64_t u0, uint64_t u1); +result_t validateUInt64(__m64 a, uint64_t u0); +result_t validateInt32(__m128i a, + int32_t i0, + int32_t i1, + int32_t i2, + int32_t i3); +result_t validateUInt32(__m128i a, + uint32_t u0, + uint32_t u1, + uint32_t u2, + uint32_t u3); +result_t validateUInt32(__m64 a, uint32_t u0, uint32_t u1); +result_t validateInt32(__m64 a, int32_t u0, int32_t u1); +result_t validateInt16(__m128i a, + int16_t i0, + int16_t i1, + int16_t i2, + int16_t i3, + int16_t i4, + int16_t i5, + int16_t i6, + int16_t i7); +result_t validateInt16(__m64 a, int16_t i0, int16_t i1, int16_t i2, int16_t i3); +result_t validateUInt16(__m128i a, + uint16_t u0, + uint16_t u1, + uint16_t u2, + uint16_t u3, + uint16_t u4, + uint16_t u5, + uint16_t u6, + uint16_t u7); +result_t validateUInt16(__m64 a, + uint16_t u0, + uint16_t u1, + uint16_t u2, + uint16_t u3); +result_t validateInt8(__m128i a, + int8_t i0, + int8_t i1, + int8_t i2, + int8_t i3, + int8_t i4, + int8_t i5, + int8_t i6, + int8_t i7, + int8_t i8, + int8_t i9, + int8_t i10, + int8_t i11, + int8_t i12, + int8_t i13, + int8_t i14, + int8_t i15); +result_t validateInt8(__m64 a, + int8_t i0, + int8_t i1, + int8_t i2, + int8_t i3, + int8_t i4, + int8_t i5, + int8_t i6, + int8_t i7); +result_t validateUInt8(__m128i a, + uint8_t u0, + uint8_t u1, + uint8_t u2, + uint8_t u3, + uint8_t u4, + uint8_t u5, + uint8_t u6, + uint8_t u7, + uint8_t u8, + uint8_t u9, + uint8_t u10, + uint8_t u11, + uint8_t u12, + uint8_t u13, + uint8_t u14, + uint8_t u15); +result_t validateUInt8(__m64 a, + uint8_t u0, + uint8_t u1, + uint8_t u2, + uint8_t u3, + uint8_t u4, + uint8_t u5, + uint8_t u6, + uint8_t u7); +result_t validateSingleFloatPair(float a, float b); +result_t validateSingleDoublePair(double a, double b); +result_t validateFloat(__m128 a, float f0, float f1, float f2, float f3); +result_t validateFloatEpsilon(__m128 a, + float f0, + float f1, + float f2, + float f3, + float epsilon); +result_t validateFloatError(__m128 a, + float f0, + float f1, + float f2, + float f3, + float err); +result_t validateDouble(__m128d a, double d0, double d1); +result_t validateFloatError(__m128d a, double d0, double d1, double err); + +#define VALIDATE_INT8_M128(A, B) \ + validateInt8(A, B[0], B[1], B[2], B[3], B[4], B[5], B[6], B[7], B[8], \ + B[9], B[10], B[11], B[12], B[13], B[14], B[15]) +#define VALIDATE_UINT8_M128(A, B) \ + validateUInt8(A, B[0], B[1], B[2], B[3], B[4], B[5], B[6], B[7], B[8], \ + B[9], B[10], B[11], B[12], B[13], B[14], B[15]) +#define VALIDATE_INT16_M128(A, B) \ + validateInt16(A, B[0], B[1], B[2], B[3], B[4], B[5], B[6], B[7]) +#define VALIDATE_UINT16_M128(A, B) \ + validateUInt16(A, B[0], B[1], B[2], B[3], B[4], B[5], B[6], B[7]) +#define VALIDATE_INT32_M128(A, B) validateInt32(A, B[0], B[1], B[2], B[3]) +#define VALIDATE_UINT32_M128(A, B) validateUInt32(A, B[0], B[1], B[2], B[3]) + +#define VALIDATE_INT8_M64(A, B) \ + validateInt8(A, B[0], B[1], B[2], B[3], B[4], B[5], B[6], B[7]) +#define VALIDATE_UINT8_M64(A, B) \ + validateUInt8(A, B[0], B[1], B[2], B[3], B[4], B[5], B[6], B[7]) +#define VALIDATE_INT16_M64(A, B) validateInt16(A, B[0], B[1], B[2], B[3]) +#define VALIDATE_UINT16_M64(A, B) validateUInt16(A, B[0], B[1], B[2], B[3]) +#define VALIDATE_INT32_M64(A, B) validateInt32(A, B[0], B[1]) +#define VALIDATE_UINT32_M64(A, B) validateUInt32(A, B[0], B[1]) +#define CHECK_RESULT(EXP) \ + if (EXP != TEST_SUCCESS) { \ + return TEST_FAIL; \ + } +#define IMM_2_ITER \ + TEST_IMPL(0) \ + TEST_IMPL(1) +#define IMM_4_ITER \ + IMM_2_ITER \ + TEST_IMPL(2) \ + TEST_IMPL(3) +#define IMM_8_ITER \ + IMM_4_ITER \ + TEST_IMPL(4) \ + TEST_IMPL(5) \ + TEST_IMPL(6) \ + TEST_IMPL(7) +#define IMM_16_ITER \ + IMM_8_ITER \ + TEST_IMPL(8) \ + TEST_IMPL(9) \ + TEST_IMPL(10) \ + TEST_IMPL(11) \ + TEST_IMPL(12) \ + TEST_IMPL(13) \ + TEST_IMPL(14) \ + TEST_IMPL(15) +#define IMM_32_ITER \ + IMM_16_ITER \ + TEST_IMPL(16) \ + TEST_IMPL(17) \ + TEST_IMPL(18) \ + TEST_IMPL(19) \ + TEST_IMPL(20) \ + TEST_IMPL(21) \ + TEST_IMPL(22) \ + TEST_IMPL(23) \ + TEST_IMPL(24) \ + TEST_IMPL(25) \ + TEST_IMPL(26) \ + TEST_IMPL(27) \ + TEST_IMPL(28) \ + TEST_IMPL(29) \ + TEST_IMPL(30) \ + TEST_IMPL(31) +#define IMM_64_ITER \ + IMM_32_ITER \ + TEST_IMPL(32) \ + TEST_IMPL(33) \ + TEST_IMPL(34) \ + TEST_IMPL(35) \ + TEST_IMPL(36) \ + TEST_IMPL(37) \ + TEST_IMPL(38) \ + TEST_IMPL(39) \ + TEST_IMPL(40) \ + TEST_IMPL(41) \ + TEST_IMPL(42) \ + TEST_IMPL(43) \ + TEST_IMPL(44) \ + TEST_IMPL(45) \ + TEST_IMPL(46) \ + TEST_IMPL(47) \ + TEST_IMPL(48) \ + TEST_IMPL(49) \ + TEST_IMPL(50) \ + TEST_IMPL(51) \ + TEST_IMPL(52) \ + TEST_IMPL(53) \ + TEST_IMPL(54) \ + TEST_IMPL(55) \ + TEST_IMPL(56) \ + TEST_IMPL(57) \ + TEST_IMPL(58) \ + TEST_IMPL(59) \ + TEST_IMPL(60) \ + TEST_IMPL(61) \ + TEST_IMPL(62) \ + TEST_IMPL(63) +#define IMM_128_ITER \ + IMM_64_ITER \ + TEST_IMPL(64) \ + TEST_IMPL(65) \ + TEST_IMPL(66) \ + TEST_IMPL(67) \ + TEST_IMPL(68) \ + TEST_IMPL(69) \ + TEST_IMPL(70) \ + TEST_IMPL(71) \ + TEST_IMPL(72) \ + TEST_IMPL(73) \ + TEST_IMPL(74) \ + TEST_IMPL(75) \ + TEST_IMPL(76) \ + TEST_IMPL(77) \ + TEST_IMPL(78) \ + TEST_IMPL(79) \ + TEST_IMPL(80) \ + TEST_IMPL(81) \ + TEST_IMPL(82) \ + TEST_IMPL(83) \ + TEST_IMPL(84) \ + TEST_IMPL(85) \ + TEST_IMPL(86) \ + TEST_IMPL(87) \ + TEST_IMPL(88) \ + TEST_IMPL(89) \ + TEST_IMPL(90) \ + TEST_IMPL(91) \ + TEST_IMPL(92) \ + TEST_IMPL(93) \ + TEST_IMPL(94) \ + TEST_IMPL(95) \ + TEST_IMPL(96) \ + TEST_IMPL(97) \ + TEST_IMPL(98) \ + TEST_IMPL(99) \ + TEST_IMPL(100) \ + TEST_IMPL(101) \ + TEST_IMPL(102) \ + TEST_IMPL(103) \ + TEST_IMPL(104) \ + TEST_IMPL(105) \ + TEST_IMPL(106) \ + TEST_IMPL(107) \ + TEST_IMPL(108) \ + TEST_IMPL(109) \ + TEST_IMPL(110) \ + TEST_IMPL(111) \ + TEST_IMPL(112) \ + TEST_IMPL(113) \ + TEST_IMPL(114) \ + TEST_IMPL(115) \ + TEST_IMPL(116) \ + TEST_IMPL(117) \ + TEST_IMPL(118) \ + TEST_IMPL(119) \ + TEST_IMPL(120) \ + TEST_IMPL(121) \ + TEST_IMPL(122) \ + TEST_IMPL(123) \ + TEST_IMPL(124) \ + TEST_IMPL(125) \ + TEST_IMPL(126) \ + TEST_IMPL(127) +#define IMM_256_ITER \ + IMM_128_ITER \ + TEST_IMPL(128) \ + TEST_IMPL(129) \ + TEST_IMPL(130) \ + TEST_IMPL(131) \ + TEST_IMPL(132) \ + TEST_IMPL(133) \ + TEST_IMPL(134) \ + TEST_IMPL(135) \ + TEST_IMPL(136) \ + TEST_IMPL(137) \ + TEST_IMPL(138) \ + TEST_IMPL(139) \ + TEST_IMPL(140) \ + TEST_IMPL(141) \ + TEST_IMPL(142) \ + TEST_IMPL(143) \ + TEST_IMPL(144) \ + TEST_IMPL(145) \ + TEST_IMPL(146) \ + TEST_IMPL(147) \ + TEST_IMPL(148) \ + TEST_IMPL(149) \ + TEST_IMPL(150) \ + TEST_IMPL(151) \ + TEST_IMPL(152) \ + TEST_IMPL(153) \ + TEST_IMPL(154) \ + TEST_IMPL(155) \ + TEST_IMPL(156) \ + TEST_IMPL(157) \ + TEST_IMPL(158) \ + TEST_IMPL(159) \ + TEST_IMPL(160) \ + TEST_IMPL(161) \ + TEST_IMPL(162) \ + TEST_IMPL(163) \ + TEST_IMPL(164) \ + TEST_IMPL(165) \ + TEST_IMPL(166) \ + TEST_IMPL(167) \ + TEST_IMPL(168) \ + TEST_IMPL(169) \ + TEST_IMPL(170) \ + TEST_IMPL(171) \ + TEST_IMPL(172) \ + TEST_IMPL(173) \ + TEST_IMPL(174) \ + TEST_IMPL(175) \ + TEST_IMPL(176) \ + TEST_IMPL(177) \ + TEST_IMPL(178) \ + TEST_IMPL(179) \ + TEST_IMPL(180) \ + TEST_IMPL(181) \ + TEST_IMPL(182) \ + TEST_IMPL(183) \ + TEST_IMPL(184) \ + TEST_IMPL(185) \ + TEST_IMPL(186) \ + TEST_IMPL(187) \ + TEST_IMPL(188) \ + TEST_IMPL(189) \ + TEST_IMPL(190) \ + TEST_IMPL(191) \ + TEST_IMPL(192) \ + TEST_IMPL(193) \ + TEST_IMPL(194) \ + TEST_IMPL(195) \ + TEST_IMPL(196) \ + TEST_IMPL(197) \ + TEST_IMPL(198) \ + TEST_IMPL(199) \ + TEST_IMPL(200) \ + TEST_IMPL(201) \ + TEST_IMPL(202) \ + TEST_IMPL(203) \ + TEST_IMPL(204) \ + TEST_IMPL(205) \ + TEST_IMPL(206) \ + TEST_IMPL(207) \ + TEST_IMPL(208) \ + TEST_IMPL(209) \ + TEST_IMPL(210) \ + TEST_IMPL(211) \ + TEST_IMPL(212) \ + TEST_IMPL(213) \ + TEST_IMPL(214) \ + TEST_IMPL(215) \ + TEST_IMPL(216) \ + TEST_IMPL(217) \ + TEST_IMPL(218) \ + TEST_IMPL(219) \ + TEST_IMPL(220) \ + TEST_IMPL(221) \ + TEST_IMPL(222) \ + TEST_IMPL(223) \ + TEST_IMPL(224) \ + TEST_IMPL(225) \ + TEST_IMPL(226) \ + TEST_IMPL(227) \ + TEST_IMPL(228) \ + TEST_IMPL(229) \ + TEST_IMPL(230) \ + TEST_IMPL(231) \ + TEST_IMPL(232) \ + TEST_IMPL(233) \ + TEST_IMPL(234) \ + TEST_IMPL(235) \ + TEST_IMPL(236) \ + TEST_IMPL(237) \ + TEST_IMPL(238) \ + TEST_IMPL(239) \ + TEST_IMPL(240) \ + TEST_IMPL(241) \ + TEST_IMPL(242) \ + TEST_IMPL(243) \ + TEST_IMPL(244) \ + TEST_IMPL(245) \ + TEST_IMPL(246) \ + TEST_IMPL(247) \ + TEST_IMPL(248) \ + TEST_IMPL(249) \ + TEST_IMPL(250) \ + TEST_IMPL(251) \ + TEST_IMPL(252) \ + TEST_IMPL(253) \ + TEST_IMPL(254) \ + TEST_IMPL(255) +} // namespace SSE2NEON + +#endif diff --git a/deps/sse2neon/tests/impl.cpp b/deps/sse2neon/tests/impl.cpp new file mode 100644 index 000000000..3140b5aa4 --- /dev/null +++ b/deps/sse2neon/tests/impl.cpp @@ -0,0 +1,11883 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "binding.h" +#include "impl.h" + +// Try 10,000 random floating point values for each test we run +#define MAX_TEST_VALUE 10000 + +/* Pattern Matching for C macros. + * https://github.com/pfultz2/Cloak/wiki/C-Preprocessor-tricks,-tips,-and-idioms + */ + +/* catenate */ +#define PRIMITIVE_CAT(a, ...) a##__VA_ARGS__ + +#define IIF(c) PRIMITIVE_CAT(IIF_, c) +/* run the 2nd parameter */ +#define IIF_0(t, ...) __VA_ARGS__ +/* run the 1st parameter */ +#define IIF_1(t, ...) t + +// Some intrinsics operate on unaligned data types. +#if defined(__GNUC__) || defined(__clang__) +#define ALIGN_STRUCT(x) __attribute__((aligned(x))) +#elif defined(_MSC_VER) +#ifndef ALIGN_STRUCT +#define ALIGN_STRUCT(x) __declspec(align(x)) +#endif +#endif + +typedef int16_t ALIGN_STRUCT(1) unaligned_int16_t; +typedef int32_t ALIGN_STRUCT(1) unaligned_int32_t; +typedef int64_t ALIGN_STRUCT(1) unaligned_int64_t; + +// This program a set of unit tests to ensure that each SSE call provide the +// output we expect. If this fires an assert, then something didn't match up. +// +// Functions with "test_" prefix will be called in runSingleTest. +namespace SSE2NEON +{ +// Forward declaration +class SSE2NEONTestImpl : public SSE2NEONTest +{ +public: + SSE2NEONTestImpl(void); + result_t loadTestFloatPointers(uint32_t i); + result_t loadTestIntPointers(uint32_t i); + result_t runSingleTest(InstructionTest test, uint32_t i); + + float *mTestFloatPointer1; + float *mTestFloatPointer2; + int32_t *mTestIntPointer1; + int32_t *mTestIntPointer2; + float mTestFloats[MAX_TEST_VALUE]; + int32_t mTestInts[MAX_TEST_VALUE]; + int8_t mTestUnalignedInts[32] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + }; + + virtual ~SSE2NEONTestImpl(void) + { + platformAlignedFree(mTestFloatPointer1); + platformAlignedFree(mTestFloatPointer2); + platformAlignedFree(mTestIntPointer1); + platformAlignedFree(mTestIntPointer2); + } + virtual void release(void) { delete this; } + virtual result_t runTest(InstructionTest test) + { + result_t ret = TEST_SUCCESS; + + // Test a whole bunch of values + for (uint32_t i = 0; i < (MAX_TEST_VALUE - 8); i++) { + ret = loadTestFloatPointers(i); // Load some random float values + if (ret == TEST_FAIL) + break; // load test float failed?? + ret = loadTestIntPointers(i); // load some random int values + if (ret == TEST_FAIL) + break; // load test float failed?? + // If we are testing the reciprocal, then invert the input data + // (easier for debugging) + if (test == it_mm_rcp_ps) { + mTestFloatPointer1[0] = 1.0f / mTestFloatPointer1[0]; + mTestFloatPointer1[1] = 1.0f / mTestFloatPointer1[1]; + mTestFloatPointer1[2] = 1.0f / mTestFloatPointer1[2]; + mTestFloatPointer1[3] = 1.0f / mTestFloatPointer1[3]; + } + if (test == it_mm_rcp_ps || test == it_mm_rcp_ss || + test == it_mm_rsqrt_ps || test == it_mm_rsqrt_ss) { + if ((rand() & 3) == 0) { + uint32_t r1 = rand() & 3; + uint32_t r2 = rand() & 3; + uint32_t r3 = rand() & 3; + uint32_t r4 = rand() & 3; + uint32_t r5 = rand() & 3; + uint32_t r6 = rand() & 3; + uint32_t r7 = rand() & 3; + uint32_t r8 = rand() & 3; + mTestFloatPointer1[r1] = 0.0f; + mTestFloatPointer1[r2] = 0.0f; + mTestFloatPointer1[r3] = 0.0f; + mTestFloatPointer1[r4] = 0.0f; + mTestFloatPointer1[r5] = -0.0f; + mTestFloatPointer1[r6] = -0.0f; + mTestFloatPointer1[r7] = -0.0f; + mTestFloatPointer1[r8] = -0.0f; + } + } + if (test == it_mm_cmpge_ps || test == it_mm_cmpge_ss || + test == it_mm_cmple_ps || test == it_mm_cmple_ss || + test == it_mm_cmpeq_ps || test == it_mm_cmpeq_ss) { + // Make sure at least one value is the same. + mTestFloatPointer1[3] = mTestFloatPointer2[3]; + } + + if (test == it_mm_cmpord_ps || test == it_mm_cmpord_ss || + test == it_mm_cmpunord_ps || test == it_mm_cmpunord_ss || + test == it_mm_cmpeq_ps || test == it_mm_cmpeq_ss || + test == it_mm_cmpge_ps || test == it_mm_cmpge_ss || + test == it_mm_cmpgt_ps || test == it_mm_cmpgt_ss || + test == it_mm_cmple_ps || test == it_mm_cmple_ss || + test == it_mm_cmplt_ps || test == it_mm_cmplt_ss || + test == it_mm_cmpneq_ps || test == it_mm_cmpneq_ss || + test == it_mm_cmpnge_ps || test == it_mm_cmpnge_ss || + test == it_mm_cmpngt_ps || test == it_mm_cmpngt_ss || + test == it_mm_cmpnle_ps || test == it_mm_cmpnle_ss || + test == it_mm_cmpnlt_ps || test == it_mm_cmpnlt_ss || + test == it_mm_comieq_ss || test == it_mm_ucomieq_ss || + test == it_mm_comige_ss || test == it_mm_ucomige_ss || + test == it_mm_comigt_ss || test == it_mm_ucomigt_ss || + test == it_mm_comile_ss || test == it_mm_ucomile_ss || + test == it_mm_comilt_ss || test == it_mm_ucomilt_ss || + test == it_mm_comineq_ss || test == it_mm_ucomineq_ss) { + // Make sure the NaN values are included in the testing + // one out of four times. + if ((rand() & 3) == 0) { + uint32_t r1 = rand() & 3; + uint32_t r2 = rand() & 3; + mTestFloatPointer1[r1] = nanf(""); + mTestFloatPointer2[r2] = nanf(""); + } + } + + if (test == it_mm_cmpord_pd || test == it_mm_cmpord_sd || + test == it_mm_cmpunord_pd || test == it_mm_cmpunord_sd || + test == it_mm_cmpeq_pd || test == it_mm_cmpeq_sd || + test == it_mm_cmpge_pd || test == it_mm_cmpge_sd || + test == it_mm_cmpgt_pd || test == it_mm_cmpgt_sd || + test == it_mm_cmple_pd || test == it_mm_cmple_sd || + test == it_mm_cmplt_pd || test == it_mm_cmplt_sd || + test == it_mm_cmpneq_pd || test == it_mm_cmpneq_sd || + test == it_mm_cmpnge_pd || test == it_mm_cmpnge_sd || + test == it_mm_cmpngt_pd || test == it_mm_cmpngt_sd || + test == it_mm_cmpnle_pd || test == it_mm_cmpnle_sd || + test == it_mm_cmpnlt_pd || test == it_mm_cmpnlt_sd || + test == it_mm_comieq_sd || test == it_mm_ucomieq_sd || + test == it_mm_comige_sd || test == it_mm_ucomige_sd || + test == it_mm_comigt_sd || test == it_mm_ucomigt_sd || + test == it_mm_comile_sd || test == it_mm_ucomile_sd || + test == it_mm_comilt_sd || test == it_mm_ucomilt_sd || + test == it_mm_comineq_sd || test == it_mm_ucomineq_sd) { + // Make sure the NaN values are included in the testing + // one out of four times. + if ((rand() & 3) == 0) { + // FIXME: + // The argument "0xFFFFFFFFFFFF" is a tricky workaround to + // set the NaN value for doubles. The code is not intuitive + // and should be fixed in the future. + uint32_t r1 = ((rand() & 1) << 1) + 1; + uint32_t r2 = ((rand() & 1) << 1) + 1; + mTestFloatPointer1[r1] = nanf("0xFFFFFFFFFFFF"); + mTestFloatPointer2[r2] = nanf("0xFFFFFFFFFFFF"); + } + } + + if (test == it_mm_max_pd || test == it_mm_max_sd || + test == it_mm_min_pd || test == it_mm_min_sd) { + // Make sure the positive/negative inifinity values are included + // in the testing one out of four times. + if ((rand() & 3) == 0) { + uint32_t r1 = ((rand() & 1) << 1) + 1; + uint32_t r2 = ((rand() & 1) << 1) + 1; + uint32_t r3 = ((rand() & 1) << 1) + 1; + uint32_t r4 = ((rand() & 1) << 1) + 1; + mTestFloatPointer1[r1] = INFINITY; + mTestFloatPointer2[r2] = INFINITY; + mTestFloatPointer1[r3] = -INFINITY; + mTestFloatPointer1[r4] = -INFINITY; + } + } + +#if SSE2NEON_PRECISE_MINMAX + if (test == it_mm_max_ps || test == it_mm_max_ss || + test == it_mm_min_ps || test == it_mm_min_ss) { + // Make sure the NaN values are included in the testing + // one out of four times. + if ((rand() & 3) == 0) { + uint32_t r1 = rand() & 3; + uint32_t r2 = rand() & 3; + mTestFloatPointer1[r1] = nanf(""); + mTestFloatPointer2[r2] = nanf(""); + } + } + + if (test == it_mm_max_pd || test == it_mm_max_sd || + test == it_mm_min_pd || test == it_mm_min_sd) { + // Make sure the NaN values are included in the testing + // one out of four times. + if ((rand() & 3) == 0) { + // FIXME: + // The argument "0xFFFFFFFFFFFF" is a tricky workaround to + // set the NaN value for doubles. The code is not intuitive + // and should be fixed in the future. + uint32_t r1 = ((rand() & 1) << 1) + 1; + uint32_t r2 = ((rand() & 1) << 1) + 1; + mTestFloatPointer1[r1] = nanf("0xFFFFFFFFFFFF"); + mTestFloatPointer2[r2] = nanf("0xFFFFFFFFFFFF"); + } + } +#endif + + // one out of every random 64 times or so, mix up the test floats to + // contain some integer values + if ((rand() & 63) == 0) { + uint32_t option = rand() & 3; + switch (option) { + // All integers.. + case 0: + mTestFloatPointer1[0] = float(mTestIntPointer1[0]); + mTestFloatPointer1[1] = float(mTestIntPointer1[1]); + mTestFloatPointer1[2] = float(mTestIntPointer1[2]); + mTestFloatPointer1[3] = float(mTestIntPointer1[3]); + + mTestFloatPointer2[0] = float(mTestIntPointer2[0]); + mTestFloatPointer2[1] = float(mTestIntPointer2[1]); + mTestFloatPointer2[2] = float(mTestIntPointer2[2]); + mTestFloatPointer2[3] = float(mTestIntPointer2[3]); + + break; + case 1: { + uint32_t index = rand() & 3; + mTestFloatPointer1[index] = float(mTestIntPointer1[index]); + index = rand() & 3; + mTestFloatPointer2[index] = float(mTestIntPointer2[index]); + } break; + case 2: { + uint32_t index1 = rand() & 3; + uint32_t index2 = rand() & 3; + mTestFloatPointer1[index1] = + float(mTestIntPointer1[index1]); + mTestFloatPointer1[index2] = + float(mTestIntPointer1[index2]); + index1 = rand() & 3; + index2 = rand() & 3; + mTestFloatPointer1[index1] = + float(mTestIntPointer1[index1]); + mTestFloatPointer1[index2] = + float(mTestIntPointer1[index2]); + } break; + case 3: + mTestFloatPointer1[0] = float(mTestIntPointer1[0]); + mTestFloatPointer1[1] = float(mTestIntPointer1[1]); + mTestFloatPointer1[2] = float(mTestIntPointer1[2]); + mTestFloatPointer1[3] = float(mTestIntPointer1[3]); + break; + } + if ((rand() & 3) == 0) { // one out of 4 times, make halves + for (uint32_t j = 0; j < 4; j++) { + mTestFloatPointer1[j] *= 0.5f; + mTestFloatPointer2[j] *= 0.5f; + } + } + } + + ret = runSingleTest(test, i); + if (ret == TEST_FAIL) // the test failed... + { + // Set a breakpoint here if you want to step through the failure + // case in the debugger + ret = runSingleTest(test, i); + break; + } + } + return ret; + } +}; + +const char *instructionString[] = { +#define _(x) #x, + INTRIN_LIST +#undef _ +}; + +// Produce rounding which is the same as SSE instructions with _MM_ROUND_NEAREST +// rounding mode +static inline float bankersRounding(float val) +{ + if (val < 0) + return -bankersRounding(-val); + + float ret; + float roundDown = floorf(val); // Round down value + float roundUp = ceilf(val); // Round up value + float diffDown = val - roundDown; + float diffUp = roundUp - val; + + if (diffDown < diffUp) { + /* If it's closer to the round down value, then use it */ + ret = roundDown; + } else if (diffDown > diffUp) { + /* If it's closer to the round up value, then use it */ + ret = roundUp; + } else { + /* If it's equidistant between round up and round down value, pick the + * one which is an even number */ + float half = roundDown / 2; + if (half != floorf(half)) { + /* If the round down value is odd, return the round up value */ + ret = roundUp; + } else { + /* If the round up value is odd, return the round down value */ + ret = roundDown; + } + } + return ret; +} + +static inline double bankersRounding(double val) +{ + if (val < 0) + return -bankersRounding(-val); + + double ret; + double roundDown = floor(val); // Round down value + double roundUp = ceil(val); // Round up value + double diffDown = val - roundDown; + double diffUp = roundUp - val; + + if (diffDown < diffUp) { + /* If it's closer to the round down value, then use it */ + ret = roundDown; + } else if (diffDown > diffUp) { + /* If it's closer to the round up value, then use it */ + ret = roundUp; + } else { + /* If it's equidistant between round up and round down value, pick the + * one which is an even number */ + double half = roundDown / 2; + if (half != floor(half)) { + /* If the round down value is odd, return the round up value */ + ret = roundUp; + } else { + /* If the round up value is odd, return the round down value */ + ret = roundDown; + } + } + return ret; +} + +// SplitMix64 PRNG by Sebastiano Vigna, see: +// +static uint64_t state; // the state of SplitMix64 PRNG +const double TWOPOWER64 = pow(2, 64); + +#define SSE2NEON_INIT_RNG(seed) \ + do { \ + state = seed; \ + } while (0) + +static double next() +{ + uint64_t z = (state += 0x9e3779b97f4a7c15); + z = (z ^ (z >> 30)) * 0xbf58476d1ce4e5b9; + z = (z ^ (z >> 27)) * 0x94d049bb133111eb; + return (double) (z ^ (z >> 31)); +} + +static float ranf() +{ + return (float) (next() / TWOPOWER64); +} + +static float ranf(float low, float high) +{ + return ranf() * (high - low) + low; +} + +// Enable the tests which are using the macro of another tests +result_t test_mm_slli_si128(const SSE2NEONTestImpl &impl, uint32_t iter); +result_t test_mm_srli_si128(const SSE2NEONTestImpl &impl, uint32_t iter); +result_t test_mm_shuffle_pi16(const SSE2NEONTestImpl &impl, uint32_t iter); + +// This function is not called from "runSingleTest", but for other intrinsic +// tests that might need to call "_mm_set_epi32". +__m128i do_mm_set_epi32(int32_t x, int32_t y, int32_t z, int32_t w) +{ + __m128i a = _mm_set_epi32(x, y, z, w); + validateInt32(a, w, z, y, x); + return a; +} + +// This function is not called from "runSingleTest", but for other intrinsic +// tests that might need to load __m64 data. +template +__m64 load_m64(const T *p) +{ + return *((const __m64 *) p); +} + +// This function is not called from "runSingleTest", but for other intrinsic +// tests that might need to call "_mm_load_ps". +template +__m128 load_m128(const T *p) +{ + return _mm_loadu_ps((const float *) p); +} + +// This function is not called from "runSingleTest", but for other intrinsic +// tests that might need to call "_mm_load_ps". +template +__m128i load_m128i(const T *p) +{ + __m128 a = _mm_loadu_ps((const float *) p); + __m128i ia = _mm_castps_si128(a); + return ia; +} + +// This function is not called from "runSingleTest", but for other intrinsic +// tests that might need to call "_mm_load_pd". +template +__m128d load_m128d(const T *p) +{ + return _mm_loadu_pd((const double *) p); +} + +// This function is not called from "runSingleTest", but for other intrinsic +// tests that might need to call "_mm_store_ps". +result_t do_mm_store_ps(float *p, float x, float y, float z, float w) +{ + __m128 a = _mm_set_ps(x, y, z, w); + _mm_store_ps(p, a); + ASSERT_RETURN(p[0] == w); + ASSERT_RETURN(p[1] == z); + ASSERT_RETURN(p[2] == y); + ASSERT_RETURN(p[3] == x); + return TEST_SUCCESS; +} + +// This function is not called from "runSingleTest", but for other intrinsic +// tests that might need to call "_mm_store_ps". +result_t do_mm_store_ps(int32_t *p, int32_t x, int32_t y, int32_t z, int32_t w) +{ + __m128i a = _mm_set_epi32(x, y, z, w); + _mm_store_ps((float *) p, _mm_castsi128_ps(a)); + ASSERT_RETURN(p[0] == w); + ASSERT_RETURN(p[1] == z); + ASSERT_RETURN(p[2] == y); + ASSERT_RETURN(p[3] == x); + return TEST_SUCCESS; +} + +float cmp_noNaN(float a, float b) +{ + return (!isnan(a) && !isnan(b)) ? ALL_BIT_1_32 : 0.0f; +} + +double cmp_noNaN(double a, double b) +{ + return (!isnan(a) && !isnan(b)) ? ALL_BIT_1_64 : 0.0f; +} + +float cmp_hasNaN(float a, float b) +{ + return (isnan(a) || isnan(b)) ? ALL_BIT_1_32 : 0.0f; +} + +double cmp_hasNaN(double a, double b) +{ + return (isnan(a) || isnan(b)) ? ALL_BIT_1_64 : 0.0f; +} + +int32_t comilt_ss(float a, float b) +{ + if (isnan(a) || isnan(b)) + return 0; + return (a < b); +} + +int32_t comigt_ss(float a, float b) +{ + if (isnan(a) || isnan(b)) + return 0; + return (a > b); +} + +int32_t comile_ss(float a, float b) +{ + if (isnan(a) || isnan(b)) + return 0; + return (a <= b); +} + +int32_t comige_ss(float a, float b) +{ + if (isnan(a) || isnan(b)) + return 0; + return (a >= b); +} + +int32_t comieq_ss(float a, float b) +{ + if (isnan(a) || isnan(b)) + return 0; + return (a == b); +} + +int32_t comineq_ss(float a, float b) +{ + if (isnan(a) || isnan(b)) + return 1; + return (a != b); +} + +static inline int16_t saturate_i16(int32_t a) +{ + if (a > INT16_MAX) + return INT16_MAX; + if (a < INT16_MIN) + return INT16_MIN; + return (int16_t) a; +} + +static inline uint16_t saturate_u16(uint32_t a) +{ + if (a > UINT16_MAX) + return UINT16_MAX; + return (uint16_t) a; +} + +uint32_t canonical_crc32_u8(uint32_t crc, uint8_t v) +{ + crc ^= v; + for (int bit = 0; bit < 8; bit++) { + if (crc & 1) + crc = (crc >> 1) ^ UINT32_C(0x82f63b78); + else + crc = (crc >> 1); + } + return crc; +} + +uint32_t canonical_crc32_u16(uint32_t crc, uint16_t v) +{ + crc = canonical_crc32_u8(crc, (uint8_t) (v & 0xff)); + crc = canonical_crc32_u8(crc, (uint8_t) ((v >> 8) & 0xff)); + return crc; +} + +uint32_t canonical_crc32_u32(uint32_t crc, uint32_t v) +{ + crc = canonical_crc32_u16(crc, (uint16_t) (v & 0xffff)); + crc = canonical_crc32_u16(crc, (uint16_t) (v >> 16) & 0xffff); + return crc; +} + +uint64_t canonical_crc32_u64(uint64_t crc, uint64_t v) +{ + crc = canonical_crc32_u32((uint32_t) (crc), (uint32_t) (v & 0xffffffff)); + crc = canonical_crc32_u32((uint32_t) (crc), + (uint32_t) ((v >> 32) & 0xffffffff)); + return crc; +} + +static const uint8_t crypto_aes_sbox[256] = { + 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, + 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, + 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, + 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, + 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, + 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, + 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, + 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, + 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, + 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, + 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, + 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, + 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, + 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, + 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, + 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, + 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, + 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, + 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, + 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, + 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, + 0xb0, 0x54, 0xbb, 0x16, +}; + +static const uint8_t crypto_aes_rsbox[256] = { + 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, + 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, + 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, + 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, + 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, + 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, + 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, + 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, + 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, + 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, + 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, + 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, + 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, + 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, + 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, + 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, + 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, + 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, + 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, + 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, + 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, + 0x55, 0x21, 0x0c, 0x7d, +}; + +// XT is x_time function that muliplies 'x' by 2 in GF(2^8) +#define XT(x) (((x) << 1) ^ ((((x) >> 7) & 1) * 0x1b)) + +inline __m128i aesenc_128_reference(__m128i a, __m128i b) +{ + uint8_t i, t, u, v[4][4]; + for (i = 0; i < 16; ++i) { + v[((i / 4) + 4 - (i % 4)) % 4][i % 4] = + crypto_aes_sbox[((SIMDVec *) &a)->m128_u8[i]]; + } + for (i = 0; i < 4; ++i) { + t = v[i][0]; + u = v[i][0] ^ v[i][1] ^ v[i][2] ^ v[i][3]; + v[i][0] ^= u ^ XT(v[i][0] ^ v[i][1]); + v[i][1] ^= u ^ XT(v[i][1] ^ v[i][2]); + v[i][2] ^= u ^ XT(v[i][2] ^ v[i][3]); + v[i][3] ^= u ^ XT(v[i][3] ^ t); + } + + for (i = 0; i < 16; ++i) { + ((SIMDVec *) &a)->m128_u8[i] = + v[i / 4][i % 4] ^ ((SIMDVec *) &b)->m128_u8[i]; + } + + return a; +} + +#define MULTIPLY(x, y) \ + (((y & 1) * x) ^ ((y >> 1 & 1) * XT(x)) ^ ((y >> 2 & 1) * XT(XT(x))) ^ \ + ((y >> 3 & 1) * XT(XT(XT(x)))) ^ ((y >> 4 & 1) * XT(XT(XT(XT(x)))))) + +inline __m128i aesdec_128_reference(__m128i a, __m128i b) +{ + uint8_t i, e, f, g, h, v[4][4]; + for (i = 0; i < 16; ++i) { + v[((i / 4) + (i % 4)) % 4][i % 4] = + crypto_aes_rsbox[((SIMDVec *) &a)->m128_u8[i]]; + } + + for (i = 0; i < 4; ++i) { + e = v[i][0]; + f = v[i][1]; + g = v[i][2]; + h = v[i][3]; + + v[i][0] = (uint8_t) (MULTIPLY(e, 0x0e) ^ MULTIPLY(f, 0x0b) ^ + MULTIPLY(g, 0x0d) ^ MULTIPLY(h, 0x09)); + v[i][1] = (uint8_t) (MULTIPLY(e, 0x09) ^ MULTIPLY(f, 0x0e) ^ + MULTIPLY(g, 0x0b) ^ MULTIPLY(h, 0x0d)); + v[i][2] = (uint8_t) (MULTIPLY(e, 0x0d) ^ MULTIPLY(f, 0x09) ^ + MULTIPLY(g, 0x0e) ^ MULTIPLY(h, 0x0b)); + v[i][3] = (uint8_t) (MULTIPLY(e, 0x0b) ^ MULTIPLY(f, 0x0d) ^ + MULTIPLY(g, 0x09) ^ MULTIPLY(h, 0x0e)); + } + + for (i = 0; i < 16; ++i) { + ((SIMDVec *) &a)->m128_u8[i] = + v[i / 4][i % 4] ^ ((SIMDVec *) &b)->m128_u8[i]; + } + return a; +} + +inline __m128i aesenclast_128_reference(__m128i s, __m128i rk) +{ + uint8_t i, v[4][4]; + for (i = 0; i < 16; ++i) + v[((i / 4) + 4 - (i % 4)) % 4][i % 4] = + crypto_aes_sbox[((SIMDVec *) &s)->m128_u8[i]]; + for (i = 0; i < 16; ++i) + ((SIMDVec *) &s)->m128_u8[i] = + v[i / 4][i % 4] ^ ((SIMDVec *) &rk)->m128_u8[i]; + return s; +} + +// Rotates right (circular right shift) value by "amount" positions +static inline uint32_t rotr(uint32_t value, uint32_t amount) +{ + return (value >> amount) | (value << ((32 - amount) & 31)); +} + +static inline uint64_t MUL(uint32_t a, uint32_t b) +{ + return (uint64_t) a * (uint64_t) b; +} + +// From BearSSL. Performs a 32-bit->64-bit carryless/polynomial +// long multiply. +// +// This implementation was chosen because it is reasonably fast +// without a lookup table or branching. +// +// This does it by splitting up the bits in a way that they +// would not carry, then combine them together with xor (a +// carryless add). +// +// https://www.bearssl.org/gitweb/?p=BearSSL;a=blob;f=src/hash/ghash_ctmul.c;h=3623202;hb=5f045c7#l164 +static uint64_t clmul_32(uint32_t x, uint32_t y) +{ + uint32_t x0, x1, x2, x3; + uint32_t y0, y1, y2, y3; + uint64_t z0, z1, z2, z3; + + x0 = x & (uint32_t) 0x11111111; + x1 = x & (uint32_t) 0x22222222; + x2 = x & (uint32_t) 0x44444444; + x3 = x & (uint32_t) 0x88888888; + y0 = y & (uint32_t) 0x11111111; + y1 = y & (uint32_t) 0x22222222; + y2 = y & (uint32_t) 0x44444444; + y3 = y & (uint32_t) 0x88888888; + z0 = MUL(x0, y0) ^ MUL(x1, y3) ^ MUL(x2, y2) ^ MUL(x3, y1); + z1 = MUL(x0, y1) ^ MUL(x1, y0) ^ MUL(x2, y3) ^ MUL(x3, y2); + z2 = MUL(x0, y2) ^ MUL(x1, y1) ^ MUL(x2, y0) ^ MUL(x3, y3); + z3 = MUL(x0, y3) ^ MUL(x1, y2) ^ MUL(x2, y1) ^ MUL(x3, y0); + z0 &= (uint64_t) 0x1111111111111111; + z1 &= (uint64_t) 0x2222222222222222; + z2 &= (uint64_t) 0x4444444444444444; + z3 &= (uint64_t) 0x8888888888888888; + return z0 | z1 | z2 | z3; +} + +// Performs a 64x64->128-bit carryless/polynomial long +// multiply, using the above routine to calculate the +// subproducts needed for the full-size multiply. +// +// This uses the Karatsuba algorithm. +// +// Normally, the Karatsuba algorithm isn't beneficial +// until very large numbers due to carry tracking and +// multiplication being relatively cheap. +// +// However, we have no carries and multiplication is +// definitely not cheap, so the Karatsuba algorithm is +// a low cost and easy optimization. +// +// https://en.m.wikipedia.org/wiki/Karatsuba_algorithm +// +// Note that addition and subtraction are both +// performed with xor, since all operations are +// carryless. +// +// The comments represent the actual mathematical +// operations being performed (instead of the bitwise +// operations) and to reflect the linked Wikipedia article. +static std::pair clmul_64(uint64_t x, uint64_t y) +{ + // B = 2 + // m = 32 + // x = (x1 * B^m) + x0 + uint32_t x0 = (uint32_t) (x & 0xffffffff); + uint32_t x1 = (uint32_t) (x >> 32); + // y = (y1 * B^m) + y0 + uint32_t y0 = (uint32_t) (y & 0xffffffff); + uint32_t y1 = (uint32_t) (y >> 32); + + // z0 = x0 * y0 + uint64_t z0 = clmul_32(x0, y0); + // z2 = x1 * y1 + uint64_t z2 = clmul_32(x1, y1); + // z1 = (x0 + x1) * (y0 + y1) - z0 - z2 + uint64_t z1 = clmul_32(x0 ^ x1, y0 ^ y1) ^ z0 ^ z2; + + // xy = z0 + (z1 * B^m) + (z2 * B^2m) + // note: z1 is split between the low and high halves + uint64_t xy0 = z0 ^ (z1 << 32); + uint64_t xy1 = z2 ^ (z1 >> 32); + + return std::make_pair(xy0, xy1); +} + +/* MMX */ +result_t test_mm_empty(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + return TEST_SUCCESS; +} + +/* SSE */ +result_t test_mm_add_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + float dx = _a[0] + _b[0]; + float dy = _a[1] + _b[1]; + float dz = _a[2] + _b[2]; + float dw = _a[3] + _b[3]; + + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + __m128 c = _mm_add_ps(a, b); + return validateFloat(c, dx, dy, dz, dw); +} + +result_t test_mm_add_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer1; + + float f0 = _a[0] + _b[0]; + float f1 = _a[1]; + float f2 = _a[2]; + float f3 = _a[3]; + + __m128 a = _mm_load_ps(_a); + __m128 b = _mm_load_ps(_b); + __m128 c = _mm_add_ss(a, b); + + return validateFloat(c, f0, f1, f2, f3); +} + +result_t test_mm_and_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + __m128 c = _mm_and_ps(a, b); + // now for the assertion... + const uint32_t *ia = (const uint32_t *) &a; + const uint32_t *ib = (const uint32_t *) &b; + uint32_t r[4]; + r[0] = ia[0] & ib[0]; + r[1] = ia[1] & ib[1]; + r[2] = ia[2] & ib[2]; + r[3] = ia[3] & ib[3]; + __m128i ret = do_mm_set_epi32(r[3], r[2], r[1], r[0]); + result_t res = VALIDATE_INT32_M128(_mm_castps_si128(c), r); + if (res) { + res = VALIDATE_INT32_M128(ret, r); + } + return res; +} + +// r0 := ~a0 & b0 +// r1 := ~a1 & b1 +// r2 := ~a2 & b2 +// r3 := ~a3 & b3 +result_t test_mm_andnot_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + __m128 c = _mm_andnot_ps(a, b); + // now for the assertion... + const uint32_t *ia = (const uint32_t *) &a; + const uint32_t *ib = (const uint32_t *) &b; + uint32_t r[4]; + r[0] = ~ia[0] & ib[0]; + r[1] = ~ia[1] & ib[1]; + r[2] = ~ia[2] & ib[2]; + r[3] = ~ia[3] & ib[3]; + __m128i ret = do_mm_set_epi32(r[3], r[2], r[1], r[0]); + result_t res = TEST_FAIL; + res = VALIDATE_INT32_M128(_mm_castps_si128(c), r); + if (res) { + res = VALIDATE_INT32_M128(ret, r); + } + return res; +} + +result_t test_mm_avg_pu16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint16_t *_a = (const uint16_t *) impl.mTestIntPointer1; + const uint16_t *_b = (const uint16_t *) impl.mTestIntPointer2; + uint16_t d[4]; + d[0] = (uint16_t) ((_a[0] + _b[0] + 1) >> 1); + d[1] = (uint16_t) ((_a[1] + _b[1] + 1) >> 1); + d[2] = (uint16_t) ((_a[2] + _b[2] + 1) >> 1); + d[3] = (uint16_t) ((_a[3] + _b[3] + 1) >> 1); + + __m64 a = load_m64(_a); + __m64 b = load_m64(_b); + __m64 c = _mm_avg_pu16(a, b); + + return VALIDATE_UINT16_M64(c, d); +} + +result_t test_mm_avg_pu8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint8_t *_a = (const uint8_t *) impl.mTestIntPointer1; + const uint8_t *_b = (const uint8_t *) impl.mTestIntPointer2; + uint8_t d[8]; + d[0] = (uint8_t) ((_a[0] + _b[0] + 1) >> 1); + d[1] = (uint8_t) ((_a[1] + _b[1] + 1) >> 1); + d[2] = (uint8_t) ((_a[2] + _b[2] + 1) >> 1); + d[3] = (uint8_t) ((_a[3] + _b[3] + 1) >> 1); + d[4] = (uint8_t) ((_a[4] + _b[4] + 1) >> 1); + d[5] = (uint8_t) ((_a[5] + _b[5] + 1) >> 1); + d[6] = (uint8_t) ((_a[6] + _b[6] + 1) >> 1); + d[7] = (uint8_t) ((_a[7] + _b[7] + 1) >> 1); + + __m64 a = load_m64(_a); + __m64 b = load_m64(_b); + __m64 c = _mm_avg_pu8(a, b); + + return VALIDATE_UINT8_M64(c, d); +} + +result_t test_mm_cmpeq_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + int32_t result[4]; + result[0] = _a[0] == _b[0] ? -1 : 0; + result[1] = _a[1] == _b[1] ? -1 : 0; + result[2] = _a[2] == _b[2] ? -1 : 0; + result[3] = _a[3] == _b[3] ? -1 : 0; + + __m128 ret = _mm_cmpeq_ps(a, b); + __m128i iret = _mm_castps_si128(ret); + return VALIDATE_INT32_M128(iret, result); +} + +result_t test_mm_cmpeq_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + float result[4]; + result[0] = _a[0] == _b[0] ? ALL_BIT_1_32 : 0; + result[1] = _a[1]; + result[2] = _a[2]; + result[3] = _a[3]; + + __m128 ret = _mm_cmpeq_ss(a, b); + return validateFloat(ret, result[0], result[1], result[2], result[3]); +} + +result_t test_mm_cmpge_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + int32_t result[4]; + result[0] = _a[0] >= _b[0] ? -1 : 0; + result[1] = _a[1] >= _b[1] ? -1 : 0; + result[2] = _a[2] >= _b[2] ? -1 : 0; + result[3] = _a[3] >= _b[3] ? -1 : 0; + + __m128 ret = _mm_cmpge_ps(a, b); + __m128i iret = _mm_castps_si128(ret); + return VALIDATE_INT32_M128(iret, result); +} + +result_t test_mm_cmpge_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + float result[4]; + result[0] = _a[0] >= _b[0] ? ALL_BIT_1_32 : 0; + result[1] = _a[1]; + result[2] = _a[2]; + result[3] = _a[3]; + + __m128 ret = _mm_cmpge_ss(a, b); + return validateFloat(ret, result[0], result[1], result[2], result[3]); +} + +result_t test_mm_cmpgt_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + int32_t result[4]; + result[0] = _a[0] > _b[0] ? -1 : 0; + result[1] = _a[1] > _b[1] ? -1 : 0; + result[2] = _a[2] > _b[2] ? -1 : 0; + result[3] = _a[3] > _b[3] ? -1 : 0; + + __m128 ret = _mm_cmpgt_ps(a, b); + __m128i iret = _mm_castps_si128(ret); + return VALIDATE_INT32_M128(iret, result); +} + +result_t test_mm_cmpgt_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + float result[4]; + result[0] = _a[0] > _b[0] ? ALL_BIT_1_32 : 0; + result[1] = _a[1]; + result[2] = _a[2]; + result[3] = _a[3]; + + __m128 ret = _mm_cmpgt_ss(a, b); + return validateFloat(ret, result[0], result[1], result[2], result[3]); +} + +result_t test_mm_cmple_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + int32_t result[4]; + result[0] = _a[0] <= _b[0] ? -1 : 0; + result[1] = _a[1] <= _b[1] ? -1 : 0; + result[2] = _a[2] <= _b[2] ? -1 : 0; + result[3] = _a[3] <= _b[3] ? -1 : 0; + + __m128 ret = _mm_cmple_ps(a, b); + __m128i iret = _mm_castps_si128(ret); + return VALIDATE_INT32_M128(iret, result); +} + +result_t test_mm_cmple_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + float result[4]; + result[0] = _a[0] <= _b[0] ? ALL_BIT_1_32 : 0; + result[1] = _a[1]; + result[2] = _a[2]; + result[3] = _a[3]; + + __m128 ret = _mm_cmple_ss(a, b); + return validateFloat(ret, result[0], result[1], result[2], result[3]); +} + +result_t test_mm_cmplt_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + int32_t result[4]; + result[0] = _a[0] < _b[0] ? -1 : 0; + result[1] = _a[1] < _b[1] ? -1 : 0; + result[2] = _a[2] < _b[2] ? -1 : 0; + result[3] = _a[3] < _b[3] ? -1 : 0; + + __m128 ret = _mm_cmplt_ps(a, b); + __m128i iret = _mm_castps_si128(ret); + return VALIDATE_INT32_M128(iret, result); +} + +result_t test_mm_cmplt_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + float result[4]; + result[0] = _a[0] < _b[0] ? ALL_BIT_1_32 : 0; + result[1] = _a[1]; + result[2] = _a[2]; + result[3] = _a[3]; + + __m128 ret = _mm_cmplt_ss(a, b); + return validateFloat(ret, result[0], result[1], result[2], result[3]); +} + +result_t test_mm_cmpneq_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + int32_t result[4]; + result[0] = _a[0] != _b[0] ? -1 : 0; + result[1] = _a[1] != _b[1] ? -1 : 0; + result[2] = _a[2] != _b[2] ? -1 : 0; + result[3] = _a[3] != _b[3] ? -1 : 0; + + __m128 ret = _mm_cmpneq_ps(a, b); + __m128i iret = _mm_castps_si128(ret); + return VALIDATE_INT32_M128(iret, result); +} + +result_t test_mm_cmpneq_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + float result[4]; + result[0] = _a[0] != _b[0] ? ALL_BIT_1_32 : 0; + result[1] = _a[1]; + result[2] = _a[2]; + result[3] = _a[3]; + + __m128 ret = _mm_cmpneq_ss(a, b); + return validateFloat(ret, result[0], result[1], result[2], result[3]); +} + +result_t test_mm_cmpnge_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + float result[4]; + result[0] = !(_a[0] >= _b[0]) ? ALL_BIT_1_32 : 0; + result[1] = !(_a[1] >= _b[1]) ? ALL_BIT_1_32 : 0; + result[2] = !(_a[2] >= _b[2]) ? ALL_BIT_1_32 : 0; + result[3] = !(_a[3] >= _b[3]) ? ALL_BIT_1_32 : 0; + + __m128 ret = _mm_cmpnge_ps(a, b); + return validateFloat(ret, result[0], result[1], result[2], result[3]); +} + +result_t test_mm_cmpnge_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + float result[4]; + result[0] = !(_a[0] >= _b[0]) ? ALL_BIT_1_32 : 0; + result[1] = _a[1]; + result[2] = _a[2]; + result[3] = _a[3]; + + __m128 ret = _mm_cmpnge_ss(a, b); + return validateFloat(ret, result[0], result[1], result[2], result[3]); +} + +result_t test_mm_cmpngt_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + float result[4]; + result[0] = !(_a[0] > _b[0]) ? ALL_BIT_1_32 : 0; + result[1] = !(_a[1] > _b[1]) ? ALL_BIT_1_32 : 0; + result[2] = !(_a[2] > _b[2]) ? ALL_BIT_1_32 : 0; + result[3] = !(_a[3] > _b[3]) ? ALL_BIT_1_32 : 0; + + __m128 ret = _mm_cmpngt_ps(a, b); + return validateFloat(ret, result[0], result[1], result[2], result[3]); +} + +result_t test_mm_cmpngt_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + float result[4]; + result[0] = !(_a[0] > _b[0]) ? ALL_BIT_1_32 : 0; + result[1] = _a[1]; + result[2] = _a[2]; + result[3] = _a[3]; + + __m128 ret = _mm_cmpngt_ss(a, b); + return validateFloat(ret, result[0], result[1], result[2], result[3]); +} + +result_t test_mm_cmpnle_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + float result[4]; + result[0] = !(_a[0] <= _b[0]) ? ALL_BIT_1_32 : 0; + result[1] = !(_a[1] <= _b[1]) ? ALL_BIT_1_32 : 0; + result[2] = !(_a[2] <= _b[2]) ? ALL_BIT_1_32 : 0; + result[3] = !(_a[3] <= _b[3]) ? ALL_BIT_1_32 : 0; + + __m128 ret = _mm_cmpnle_ps(a, b); + return validateFloat(ret, result[0], result[1], result[2], result[3]); +} + +result_t test_mm_cmpnle_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + float result[4]; + result[0] = !(_a[0] <= _b[0]) ? ALL_BIT_1_32 : 0; + result[1] = _a[1]; + result[2] = _a[2]; + result[3] = _a[3]; + + __m128 ret = _mm_cmpnle_ss(a, b); + return validateFloat(ret, result[0], result[1], result[2], result[3]); +} + +result_t test_mm_cmpnlt_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + float result[4]; + result[0] = !(_a[0] < _b[0]) ? ALL_BIT_1_32 : 0; + result[1] = !(_a[1] < _b[1]) ? ALL_BIT_1_32 : 0; + result[2] = !(_a[2] < _b[2]) ? ALL_BIT_1_32 : 0; + result[3] = !(_a[3] < _b[3]) ? ALL_BIT_1_32 : 0; + + __m128 ret = _mm_cmpnlt_ps(a, b); + return validateFloat(ret, result[0], result[1], result[2], result[3]); +} + +result_t test_mm_cmpnlt_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + float result[4]; + result[0] = !(_a[0] < _b[0]) ? ALL_BIT_1_32 : 0; + result[1] = _a[1]; + result[2] = _a[2]; + result[3] = _a[3]; + + __m128 ret = _mm_cmpnlt_ss(a, b); + return validateFloat(ret, result[0], result[1], result[2], result[3]); +} + +result_t test_mm_cmpord_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + float result[4]; + + for (uint32_t i = 0; i < 4; i++) { + result[i] = cmp_noNaN(_a[i], _b[i]); + } + + __m128 ret = _mm_cmpord_ps(a, b); + + return validateFloat(ret, result[0], result[1], result[2], result[3]); +} + +result_t test_mm_cmpord_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + float result[4]; + result[0] = cmp_noNaN(_a[0], _b[0]); + result[1] = _a[1]; + result[2] = _a[2]; + result[3] = _a[3]; + + __m128 ret = _mm_cmpord_ss(a, b); + + return validateFloat(ret, result[0], result[1], result[2], result[3]); +} + +result_t test_mm_cmpunord_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + float result[4]; + + for (uint32_t i = 0; i < 4; i++) { + result[i] = cmp_hasNaN(_a[i], _b[i]); + } + + __m128 ret = _mm_cmpunord_ps(a, b); + + return validateFloat(ret, result[0], result[1], result[2], result[3]); +} + +result_t test_mm_cmpunord_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + float result[4]; + result[0] = cmp_hasNaN(_a[0], _b[0]); + result[1] = _a[1]; + result[2] = _a[2]; + result[3] = _a[3]; + + __m128 ret = _mm_cmpunord_ss(a, b); + + return validateFloat(ret, result[0], result[1], result[2], result[3]); +} + +result_t test_mm_comieq_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + // FIXME: + // The GCC does not implement _mm_comieq_ss correctly. + // See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98612 for more + // information. +#if defined(__GNUC__) && !defined(__clang__) + return TEST_UNIMPL; +#else + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + int32_t result = comieq_ss(_a[0], _b[0]); + int32_t ret = _mm_comieq_ss(a, b); + + return result == ret ? TEST_SUCCESS : TEST_FAIL; +#endif +} + +result_t test_mm_comige_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + int32_t result = comige_ss(_a[0], _b[0]); + int32_t ret = _mm_comige_ss(a, b); + + return result == ret ? TEST_SUCCESS : TEST_FAIL; +} + +result_t test_mm_comigt_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + int32_t result = comigt_ss(_a[0], _b[0]); + int32_t ret = _mm_comigt_ss(a, b); + + return result == ret ? TEST_SUCCESS : TEST_FAIL; +} + +result_t test_mm_comile_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + // FIXME: + // The GCC does not implement _mm_comile_ss correctly. + // See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98612 for more + // information. +#if defined(__GNUC__) && !defined(__clang__) + return TEST_UNIMPL; +#else + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + int32_t result = comile_ss(_a[0], _b[0]); + int32_t ret = _mm_comile_ss(a, b); + + return result == ret ? TEST_SUCCESS : TEST_FAIL; +#endif +} + +result_t test_mm_comilt_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + // FIXME: + // The GCC does not implement _mm_comilt_ss correctly. + // See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98612 for more + // information. +#if defined(__GNUC__) && !defined(__clang__) + return TEST_UNIMPL; +#else + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + int32_t result = comilt_ss(_a[0], _b[0]); + + int32_t ret = _mm_comilt_ss(a, b); + + return result == ret ? TEST_SUCCESS : TEST_FAIL; +#endif +} + +result_t test_mm_comineq_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + // FIXME: + // The GCC does not implement _mm_comineq_ss correctly. + // See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98612 for more + // information. +#if defined(__GNUC__) && !defined(__clang__) + return TEST_UNIMPL; +#else + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + int32_t result = comineq_ss(_a[0], _b[0]); + int32_t ret = _mm_comineq_ss(a, b); + + return result == ret ? TEST_SUCCESS : TEST_FAIL; +#endif +} + +result_t test_mm_cvt_pi2ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const int32_t *_b = impl.mTestIntPointer2; + + float dx = (float) _b[0]; + float dy = (float) _b[1]; + float dz = _a[2]; + float dw = _a[3]; + + __m128 a = load_m128(_a); + __m64 b = load_m64(_b); + __m128 c = _mm_cvt_pi2ps(a, b); + + return validateFloat(c, dx, dy, dz, dw); +} + +result_t test_mm_cvt_ps2pi(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + int32_t d[2]; + + for (int idx = 0; idx < 2; idx++) { + switch (iter & 0x3) { + case 0: + _MM_SET_ROUNDING_MODE(_MM_ROUND_NEAREST); + d[idx] = (int32_t) (bankersRounding(_a[idx])); + break; + case 1: + _MM_SET_ROUNDING_MODE(_MM_ROUND_DOWN); + d[idx] = (int32_t) (floorf(_a[idx])); + break; + case 2: + _MM_SET_ROUNDING_MODE(_MM_ROUND_UP); + d[idx] = (int32_t) (ceilf(_a[idx])); + break; + case 3: + _MM_SET_ROUNDING_MODE(_MM_ROUND_TOWARD_ZERO); + d[idx] = (int32_t) (_a[idx]); + break; + } + } + + __m128 a = load_m128(_a); + __m64 ret = _mm_cvt_ps2pi(a); + + return VALIDATE_INT32_M64(ret, d); +} + +result_t test_mm_cvt_si2ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const int32_t b = *impl.mTestIntPointer2; + + float dx = (float) b; + float dy = _a[1]; + float dz = _a[2]; + float dw = _a[3]; + + __m128 a = load_m128(_a); + __m128 c = _mm_cvt_si2ss(a, b); + + return validateFloat(c, dx, dy, dz, dw); +} + +result_t test_mm_cvt_ss2si(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + int32_t d0; + + switch (iter & 0x3) { + case 0: + _MM_SET_ROUNDING_MODE(_MM_ROUND_NEAREST); + d0 = (int32_t) (bankersRounding(_a[0])); + break; + case 1: + _MM_SET_ROUNDING_MODE(_MM_ROUND_DOWN); + d0 = (int32_t) (floorf(_a[0])); + break; + case 2: + _MM_SET_ROUNDING_MODE(_MM_ROUND_UP); + d0 = (int32_t) (ceilf(_a[0])); + break; + case 3: + _MM_SET_ROUNDING_MODE(_MM_ROUND_TOWARD_ZERO); + d0 = (int32_t) (_a[0]); + break; + } + + __m128 a = load_m128(_a); + int32_t ret = _mm_cvt_ss2si(a); + return ret == d0 ? TEST_SUCCESS : TEST_FAIL; +} + +result_t test_mm_cvtpi16_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + + float dx = (float) _a[0]; + float dy = (float) _a[1]; + float dz = (float) _a[2]; + float dw = (float) _a[3]; + + __m64 a = load_m64(_a); + __m128 c = _mm_cvtpi16_ps(a); + + return validateFloat(c, dx, dy, dz, dw); +} + +result_t test_mm_cvtpi32_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const int32_t *_b = (const int32_t *) impl.mTestIntPointer2; + + float dx = (float) _b[0]; + float dy = (float) _b[1]; + float dz = _a[2]; + float dw = _a[3]; + + __m128 a = load_m128(_a); + __m64 b = load_m64(_b); + __m128 c = _mm_cvtpi32_ps(a, b); + + return validateFloat(c, dx, dy, dz, dw); +} + +result_t test_mm_cvtpi32x2_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + const int32_t *_b = (const int32_t *) impl.mTestIntPointer2; + + float dx = (float) _a[0]; + float dy = (float) _a[1]; + float dz = (float) _b[0]; + float dw = (float) _b[1]; + + __m64 a = load_m64(_a); + __m64 b = load_m64(_b); + __m128 c = _mm_cvtpi32x2_ps(a, b); + + return validateFloat(c, dx, dy, dz, dw); +} + +result_t test_mm_cvtpi8_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + + float dx = (float) _a[0]; + float dy = (float) _a[1]; + float dz = (float) _a[2]; + float dw = (float) _a[3]; + + __m64 a = load_m64(_a); + __m128 c = _mm_cvtpi8_ps(a); + + return validateFloat(c, dx, dy, dz, dw); +} + +result_t test_mm_cvtps_pi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + int16_t rnd[4]; + + for (int i = 0; i < 4; i++) { + if ((float) INT16_MAX <= _a[i] && _a[i] <= (float) INT32_MAX) { + rnd[i] = INT16_MAX; + } else if (INT16_MIN < _a[i] && _a[i] < INT16_MAX) { + switch (iter & 0x3) { + case 0: + _MM_SET_ROUNDING_MODE(_MM_ROUND_NEAREST); + rnd[i] = (int16_t) bankersRounding(_a[i]); + break; + case 1: + _MM_SET_ROUNDING_MODE(_MM_ROUND_DOWN); + rnd[i] = (int16_t) floorf(_a[i]); + break; + case 2: + _MM_SET_ROUNDING_MODE(_MM_ROUND_UP); + rnd[i] = (int16_t) ceilf(_a[i]); + break; + case 3: + _MM_SET_ROUNDING_MODE(_MM_ROUND_TOWARD_ZERO); + rnd[i] = (int16_t) _a[i]; + break; + } + } else { + rnd[i] = INT16_MIN; + } + } + + __m128 a = load_m128(_a); + __m64 ret = _mm_cvtps_pi16(a); + return VALIDATE_INT16_M64(ret, rnd); +} + +result_t test_mm_cvtps_pi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + int32_t d[2] = {}; + + switch (iter & 0x3) { + case 0: + _MM_SET_ROUNDING_MODE(_MM_ROUND_NEAREST); + d[0] = (int32_t) bankersRounding(_a[0]); + d[1] = (int32_t) bankersRounding(_a[1]); + break; + case 1: + _MM_SET_ROUNDING_MODE(_MM_ROUND_DOWN); + d[0] = (int32_t) floorf(_a[0]); + d[1] = (int32_t) floorf(_a[1]); + break; + case 2: + _MM_SET_ROUNDING_MODE(_MM_ROUND_UP); + d[0] = (int32_t) ceilf(_a[0]); + d[1] = (int32_t) ceilf(_a[1]); + break; + case 3: + _MM_SET_ROUNDING_MODE(_MM_ROUND_TOWARD_ZERO); + d[0] = (int32_t) _a[0]; + d[1] = (int32_t) _a[1]; + break; + } + + __m128 a = load_m128(_a); + __m64 ret = _mm_cvtps_pi32(a); + + return VALIDATE_INT32_M64(ret, d); +} + +result_t test_mm_cvtps_pi8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + int8_t rnd[8] = {}; + + for (int i = 0; i < 4; i++) { + if ((float) INT8_MAX <= _a[i] && _a[i] <= (float) INT32_MAX) { + rnd[i] = INT8_MAX; + } else if (INT8_MIN < _a[i] && _a[i] < INT8_MAX) { + switch (iter & 0x3) { + case 0: + _MM_SET_ROUNDING_MODE(_MM_ROUND_NEAREST); + rnd[i] = (int8_t) bankersRounding(_a[i]); + break; + case 1: + _MM_SET_ROUNDING_MODE(_MM_ROUND_DOWN); + rnd[i] = (int8_t) floorf(_a[i]); + break; + case 2: + _MM_SET_ROUNDING_MODE(_MM_ROUND_UP); + rnd[i] = (int8_t) ceilf(_a[i]); + break; + case 3: + _MM_SET_ROUNDING_MODE(_MM_ROUND_TOWARD_ZERO); + rnd[i] = (int8_t) _a[i]; + break; + } + } else { + rnd[i] = INT8_MIN; + } + } + + __m128 a = load_m128(_a); + __m64 ret = _mm_cvtps_pi8(a); + return VALIDATE_INT8_M64(ret, rnd); +} + +result_t test_mm_cvtpu16_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint16_t *_a = (const uint16_t *) impl.mTestIntPointer1; + + float dx = (float) _a[0]; + float dy = (float) _a[1]; + float dz = (float) _a[2]; + float dw = (float) _a[3]; + + __m64 a = load_m64(_a); + __m128 c = _mm_cvtpu16_ps(a); + + return validateFloat(c, dx, dy, dz, dw); +} + +result_t test_mm_cvtpu8_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint8_t *_a = (const uint8_t *) impl.mTestIntPointer1; + + float dx = (float) _a[0]; + float dy = (float) _a[1]; + float dz = (float) _a[2]; + float dw = (float) _a[3]; + + __m64 a = load_m64(_a); + __m128 c = _mm_cvtpu8_ps(a); + + return validateFloat(c, dx, dy, dz, dw); +} + +result_t test_mm_cvtsi32_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const int32_t b = *impl.mTestIntPointer2; + + float dx = (float) b; + float dy = _a[1]; + float dz = _a[2]; + float dw = _a[3]; + + __m128 a = load_m128(_a); + __m128 c = _mm_cvtsi32_ss(a, b); + + return validateFloat(c, dx, dy, dz, dw); +} + +result_t test_mm_cvtsi64_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const int64_t b = *(int64_t *) impl.mTestIntPointer2; + + float dx = (float) b; + float dy = _a[1]; + float dz = _a[2]; + float dw = _a[3]; + + __m128 a = load_m128(_a); + __m128 c = _mm_cvtsi64_ss(a, b); + + return validateFloat(c, dx, dy, dz, dw); +} + +result_t test_mm_cvtss_f32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + + float f = _a[0]; + + __m128 a = load_m128(_a); + float c = _mm_cvtss_f32(a); + + return f == c ? TEST_SUCCESS : TEST_FAIL; +} + +result_t test_mm_cvtss_si32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + + int32_t d0 = 0; + switch (iter & 0x3) { + case 0: + _MM_SET_ROUNDING_MODE(_MM_ROUND_NEAREST); + d0 = (int32_t) (bankersRounding(_a[0])); + break; + case 1: + _MM_SET_ROUNDING_MODE(_MM_ROUND_DOWN); + d0 = (int32_t) (floorf(_a[0])); + break; + case 2: + _MM_SET_ROUNDING_MODE(_MM_ROUND_UP); + d0 = (int32_t) (ceilf(_a[0])); + break; + case 3: + _MM_SET_ROUNDING_MODE(_MM_ROUND_TOWARD_ZERO); + d0 = (int32_t) (_a[0]); + break; + } + + __m128 a = load_m128(_a); + int32_t ret = _mm_cvtss_si32(a); + + return ret == d0 ? TEST_SUCCESS : TEST_FAIL; +} + +result_t test_mm_cvtss_si64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + + int64_t d0 = 0; + switch (iter & 0x3) { + case 0: + _MM_SET_ROUNDING_MODE(_MM_ROUND_NEAREST); + d0 = (int64_t) (bankersRounding(_a[0])); + break; + case 1: + _MM_SET_ROUNDING_MODE(_MM_ROUND_DOWN); + d0 = (int64_t) (floorf(_a[0])); + break; + case 2: + _MM_SET_ROUNDING_MODE(_MM_ROUND_UP); + d0 = (int64_t) (ceilf(_a[0])); + break; + case 3: + _MM_SET_ROUNDING_MODE(_MM_ROUND_TOWARD_ZERO); + d0 = (int64_t) (_a[0]); + break; + } + + __m128 a = load_m128(_a); + int64_t ret = _mm_cvtss_si64(a); + + return ret == d0 ? TEST_SUCCESS : TEST_FAIL; +} + +result_t test_mm_cvtt_ps2pi(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + int32_t d[2]; + + d[0] = (int32_t) _a[0]; + d[1] = (int32_t) _a[1]; + + __m128 a = load_m128(_a); + __m64 ret = _mm_cvtt_ps2pi(a); + + return VALIDATE_INT32_M64(ret, d); +} + +result_t test_mm_cvtt_ss2si(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + + __m128 a = load_m128(_a); + int ret = _mm_cvtt_ss2si(a); + + return ret == (int32_t) _a[0] ? TEST_SUCCESS : TEST_FAIL; +} + +result_t test_mm_cvttps_pi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + int32_t d[2]; + + d[0] = (int32_t) _a[0]; + d[1] = (int32_t) _a[1]; + + __m128 a = load_m128(_a); + __m64 ret = _mm_cvttps_pi32(a); + + return VALIDATE_INT32_M64(ret, d); +} + +result_t test_mm_cvttss_si32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + + __m128 a = load_m128(_a); + int ret = _mm_cvttss_si32(a); + + return ret == (int32_t) _a[0] ? TEST_SUCCESS : TEST_FAIL; +} + +result_t test_mm_cvttss_si64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + + __m128 a = load_m128(_a); + int64_t ret = _mm_cvttss_si64(a); + + return ret == (int64_t) _a[0] ? TEST_SUCCESS : TEST_FAIL; +} + +result_t test_mm_div_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + float f0 = _a[0] / _b[0]; + float f1 = _a[1] / _b[1]; + float f2 = _a[2] / _b[2]; + float f3 = _a[3] / _b[3]; + + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + __m128 c = _mm_div_ps(a, b); + +#if defined(__arm__) && !defined(__aarch64__) && !defined(_M_ARM64) + // The implementation of "_mm_div_ps()" on ARM 32bit doesn't use "DIV" + // instruction directly, instead it uses "FRECPE" instruction to approximate + // it. Therefore, the precision is not as small as other architecture + return validateFloatError(c, f0, f1, f2, f3, 0.00001f); +#else + return validateFloat(c, f0, f1, f2, f3); +#endif +} + +result_t test_mm_div_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + + float d0 = _a[0] / _b[0]; + float d1 = _a[1]; + float d2 = _a[2]; + float d3 = _a[3]; + + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + __m128 c = _mm_div_ss(a, b); + +#if defined(__arm__) && !defined(__aarch64__) && !defined(_M_ARM64) + // The implementation of "_mm_div_ps()" on ARM 32bit doesn't use "DIV" + // instruction directly, instead it uses "FRECPE" instruction to approximate + // it. Therefore, the precision is not as small as other architecture + return validateFloatError(c, d0, d1, d2, d3, 0.00001f); +#else + return validateFloat(c, d0, d1, d2, d3); +#endif +} + +result_t test_mm_extract_pi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + // FIXME GCC has bug on "_mm_extract_pi16" intrinsics. We will enable this + // test when GCC fix this bug. + // see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98495 for more + // information +#if defined(__clang__) || defined(_MSC_VER) + uint64_t *_a = (uint64_t *) impl.mTestIntPointer1; + const int idx = iter & 0x3; + + __m64 a = load_m64(_a); + int c; + switch (idx) { + case 0: + c = _mm_extract_pi16(a, 0); + break; + case 1: + c = _mm_extract_pi16(a, 1); + break; + case 2: + c = _mm_extract_pi16(a, 2); + break; + case 3: + c = _mm_extract_pi16(a, 3); + break; + } + + ASSERT_RETURN((uint64_t) c == ((*_a >> (idx * 16)) & 0xFFFF)); + ASSERT_RETURN(0 == ((uint64_t) c & 0xFFFF0000)); + return TEST_SUCCESS; +#else + return TEST_UNIMPL; +#endif +} + +result_t test_mm_malloc(const SSE2NEONTestImpl &impl, uint32_t iter); +result_t test_mm_free(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + /* We verify _mm_malloc first, and there is no need to check _mm_free . */ + return test_mm_malloc(impl, iter); +} + +result_t test_mm_get_flush_zero_mode(const SSE2NEONTestImpl &impl, + uint32_t iter) +{ + int res_flush_zero_on, res_flush_zero_off; + _MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON); + res_flush_zero_on = _MM_GET_FLUSH_ZERO_MODE() == _MM_FLUSH_ZERO_ON; + _MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_OFF); + res_flush_zero_off = _MM_GET_FLUSH_ZERO_MODE() == _MM_FLUSH_ZERO_OFF; + + return (res_flush_zero_on && res_flush_zero_off) ? TEST_SUCCESS : TEST_FAIL; +} + +result_t test_mm_get_rounding_mode(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + int res_toward_zero, res_to_neg_inf, res_to_pos_inf, res_nearest; + _MM_SET_ROUNDING_MODE(_MM_ROUND_TOWARD_ZERO); + res_toward_zero = _MM_GET_ROUNDING_MODE() == _MM_ROUND_TOWARD_ZERO ? 1 : 0; + _MM_SET_ROUNDING_MODE(_MM_ROUND_DOWN); + res_to_neg_inf = _MM_GET_ROUNDING_MODE() == _MM_ROUND_DOWN ? 1 : 0; + _MM_SET_ROUNDING_MODE(_MM_ROUND_UP); + res_to_pos_inf = _MM_GET_ROUNDING_MODE() == _MM_ROUND_UP ? 1 : 0; + _MM_SET_ROUNDING_MODE(_MM_ROUND_NEAREST); + res_nearest = _MM_GET_ROUNDING_MODE() == _MM_ROUND_NEAREST ? 1 : 0; + + if (res_toward_zero && res_to_neg_inf && res_to_pos_inf && res_nearest) { + return TEST_SUCCESS; + } else { + return TEST_FAIL; + } +} + +result_t test_mm_getcsr(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + // store original csr value for post test restoring + unsigned int originalCsr = _mm_getcsr(); + + unsigned int roundings[] = {_MM_ROUND_TOWARD_ZERO, _MM_ROUND_DOWN, + _MM_ROUND_UP, _MM_ROUND_NEAREST}; + for (size_t i = 0; i < sizeof(roundings) / sizeof(roundings[0]); i++) { + _mm_setcsr(_mm_getcsr() | roundings[i]); + if ((_mm_getcsr() & roundings[i]) != roundings[i]) { + return TEST_FAIL; + } + } + + // restore original csr value for remaining tests + _mm_setcsr(originalCsr); + + return TEST_SUCCESS; +} + +result_t test_mm_insert_pi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t insert = (int16_t) impl.mTestInts[iter]; + __m64 a; + __m64 b; + +#define TEST_IMPL(IDX) \ + int16_t d##IDX[4]; \ + for (int i = 0; i < 4; i++) { \ + d##IDX[i] = _a[i]; \ + } \ + d##IDX[IDX] = insert; \ + \ + a = load_m64(_a); \ + b = _mm_insert_pi16(a, insert, IDX); \ + CHECK_RESULT(VALIDATE_INT16_M64(b, d##IDX)) + + IMM_4_ITER +#undef TEST_IMPL + return TEST_SUCCESS; +} + +result_t test_mm_load_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *addr = impl.mTestFloatPointer1; + + __m128 ret = _mm_load_ps(addr); + + return validateFloat(ret, addr[0], addr[1], addr[2], addr[3]); +} + +result_t test_mm_load_ps1(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *addr = impl.mTestFloatPointer1; + + __m128 ret = _mm_load_ps1(addr); + + return validateFloat(ret, addr[0], addr[0], addr[0], addr[0]); +} + +result_t test_mm_load_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *addr = impl.mTestFloatPointer1; + + __m128 ret = _mm_load_ss(addr); + + return validateFloat(ret, addr[0], 0, 0, 0); +} + +result_t test_mm_load1_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *p = impl.mTestFloatPointer1; + __m128 a = _mm_load1_ps(p); + return validateFloat(a, p[0], p[0], p[0], p[0]); +} + +result_t test_mm_loadh_pi(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *p1 = impl.mTestFloatPointer1; + const float *p2 = impl.mTestFloatPointer2; + const __m64 *b = (const __m64 *) p2; + __m128 a = _mm_load_ps(p1); + __m128 c = _mm_loadh_pi(a, b); + + return validateFloat(c, p1[0], p1[1], p2[0], p2[1]); +} + +result_t test_mm_loadl_pi(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *p1 = impl.mTestFloatPointer1; + const float *p2 = impl.mTestFloatPointer2; + __m128 a = _mm_load_ps(p1); + const __m64 *b = (const __m64 *) p2; + __m128 c = _mm_loadl_pi(a, b); + + return validateFloat(c, p2[0], p2[1], p1[2], p1[3]); +} + +result_t test_mm_loadr_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *addr = impl.mTestFloatPointer1; + + __m128 ret = _mm_loadr_ps(addr); + + return validateFloat(ret, addr[3], addr[2], addr[1], addr[0]); +} + +result_t test_mm_loadu_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *addr = impl.mTestFloatPointer1; + + __m128 ret = _mm_loadu_ps(addr); + + return validateFloat(ret, addr[0], addr[1], addr[2], addr[3]); +} + +result_t test_mm_loadu_si16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + // The GCC version before 11 does not implement intrinsic function + // _mm_loadu_si16. Check https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95483 + // for more information. +#if (defined(__GNUC__) && !defined(__clang__)) && (__GNUC__ <= 10) + return TEST_UNIMPL; +#else + const unaligned_int16_t *addr = + (const unaligned_int16_t *) (impl.mTestUnalignedInts + 1); + + __m128i ret = _mm_loadu_si16((const void *) addr); + + return validateInt16(ret, addr[0], 0, 0, 0, 0, 0, 0, 0); +#endif +} + +result_t test_mm_loadu_si64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + // Versions of GCC prior to 9 do not implement intrinsic function + // _mm_loadu_si64. Check https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78782 + // for more information. +#if (defined(__GNUC__) && !defined(__clang__)) && (__GNUC__ < 9) + return TEST_UNIMPL; +#else + const unaligned_int64_t *addr = + (const unaligned_int64_t *) (impl.mTestUnalignedInts + 1); + + __m128i ret = _mm_loadu_si64((const void *) addr); + + return validateInt64(ret, addr[0], 0); +#endif +} + +result_t test_mm_malloc(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const size_t *a = (const size_t *) impl.mTestIntPointer1; + const size_t *b = (const size_t *) impl.mTestIntPointer2; + size_t size = *a % (1024 * 16) + 1; + size_t align = 2 << (*b % 5); + + void *p = _mm_malloc(size, align); + if (!p) + return TEST_FAIL; + result_t res = (((uintptr_t) p % align) == 0) ? TEST_SUCCESS : TEST_FAIL; + _mm_free(p); + return res; +} + +result_t test_mm_maskmove_si64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint8_t *_a = (const uint8_t *) impl.mTestIntPointer1; + const uint8_t *_mask = (const uint8_t *) impl.mTestIntPointer2; + char mem_addr[16]; + + const __m64 *a = (const __m64 *) _a; + const __m64 *mask = (const __m64 *) _mask; + _mm_maskmove_si64(*a, *mask, (char *) mem_addr); + + for (int i = 0; i < 8; i++) { + if (_mask[i] >> 7) { + ASSERT_RETURN(_a[i] == (uint8_t) mem_addr[i]); + } + } + + return TEST_SUCCESS; +} + +result_t test_m_maskmovq(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + return test_mm_maskmove_si64(impl, iter); +} + +result_t test_mm_max_pi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer2; + int16_t c[4]; + + c[0] = _a[0] > _b[0] ? _a[0] : _b[0]; + c[1] = _a[1] > _b[1] ? _a[1] : _b[1]; + c[2] = _a[2] > _b[2] ? _a[2] : _b[2]; + c[3] = _a[3] > _b[3] ? _a[3] : _b[3]; + + __m64 a = load_m64(_a); + __m64 b = load_m64(_b); + __m64 ret = _mm_max_pi16(a, b); + return VALIDATE_INT16_M64(ret, c); +} + +result_t test_mm_max_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + float c[4]; + + c[0] = _a[0] > _b[0] ? _a[0] : _b[0]; + c[1] = _a[1] > _b[1] ? _a[1] : _b[1]; + c[2] = _a[2] > _b[2] ? _a[2] : _b[2]; + c[3] = _a[3] > _b[3] ? _a[3] : _b[3]; + + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + __m128 ret = _mm_max_ps(a, b); + return validateFloat(ret, c[0], c[1], c[2], c[3]); +} + +result_t test_mm_max_pu8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint8_t *_a = (const uint8_t *) impl.mTestIntPointer1; + const uint8_t *_b = (const uint8_t *) impl.mTestIntPointer2; + uint8_t c[8]; + + c[0] = _a[0] > _b[0] ? _a[0] : _b[0]; + c[1] = _a[1] > _b[1] ? _a[1] : _b[1]; + c[2] = _a[2] > _b[2] ? _a[2] : _b[2]; + c[3] = _a[3] > _b[3] ? _a[3] : _b[3]; + c[4] = _a[4] > _b[4] ? _a[4] : _b[4]; + c[5] = _a[5] > _b[5] ? _a[5] : _b[5]; + c[6] = _a[6] > _b[6] ? _a[6] : _b[6]; + c[7] = _a[7] > _b[7] ? _a[7] : _b[7]; + + __m64 a = load_m64(_a); + __m64 b = load_m64(_b); + __m64 ret = _mm_max_pu8(a, b); + return VALIDATE_UINT8_M64(ret, c); +} + +result_t test_mm_max_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer1; + + float f0 = _a[0] > _b[0] ? _a[0] : _b[0]; + float f1 = _a[1]; + float f2 = _a[2]; + float f3 = _a[3]; + + __m128 a = _mm_load_ps(_a); + __m128 b = _mm_load_ps(_b); + __m128 c = _mm_max_ss(a, b); + + return validateFloat(c, f0, f1, f2, f3); +} + +result_t test_mm_min_pi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer2; + int16_t c[4]; + + c[0] = _a[0] < _b[0] ? _a[0] : _b[0]; + c[1] = _a[1] < _b[1] ? _a[1] : _b[1]; + c[2] = _a[2] < _b[2] ? _a[2] : _b[2]; + c[3] = _a[3] < _b[3] ? _a[3] : _b[3]; + + __m64 a = load_m64(_a); + __m64 b = load_m64(_b); + __m64 ret = _mm_min_pi16(a, b); + return VALIDATE_INT16_M64(ret, c); +} + +result_t test_mm_min_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + float c[4]; + + c[0] = _a[0] < _b[0] ? _a[0] : _b[0]; + c[1] = _a[1] < _b[1] ? _a[1] : _b[1]; + c[2] = _a[2] < _b[2] ? _a[2] : _b[2]; + c[3] = _a[3] < _b[3] ? _a[3] : _b[3]; + + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + __m128 ret = _mm_min_ps(a, b); + return validateFloat(ret, c[0], c[1], c[2], c[3]); +} + +result_t test_mm_min_pu8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint8_t *_a = (const uint8_t *) impl.mTestIntPointer1; + const uint8_t *_b = (const uint8_t *) impl.mTestIntPointer2; + uint8_t c[8]; + + c[0] = _a[0] < _b[0] ? _a[0] : _b[0]; + c[1] = _a[1] < _b[1] ? _a[1] : _b[1]; + c[2] = _a[2] < _b[2] ? _a[2] : _b[2]; + c[3] = _a[3] < _b[3] ? _a[3] : _b[3]; + c[4] = _a[4] < _b[4] ? _a[4] : _b[4]; + c[5] = _a[5] < _b[5] ? _a[5] : _b[5]; + c[6] = _a[6] < _b[6] ? _a[6] : _b[6]; + c[7] = _a[7] < _b[7] ? _a[7] : _b[7]; + + __m64 a = load_m64(_a); + __m64 b = load_m64(_b); + __m64 ret = _mm_min_pu8(a, b); + return VALIDATE_UINT8_M64(ret, c); +} + +result_t test_mm_min_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + float c; + + c = _a[0] < _b[0] ? _a[0] : _b[0]; + + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + __m128 ret = _mm_min_ss(a, b); + + return validateFloat(ret, c, _a[1], _a[2], _a[3]); +} + +result_t test_mm_move_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + + float result[4]; + result[0] = _b[0]; + result[1] = _a[1]; + result[2] = _a[2]; + result[3] = _a[3]; + + __m128 ret = _mm_move_ss(a, b); + return validateFloat(ret, result[0], result[1], result[2], result[3]); +} + +result_t test_mm_movehl_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + + float f0 = _b[2]; + float f1 = _b[3]; + float f2 = _a[2]; + float f3 = _a[3]; + + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + __m128 ret = _mm_movehl_ps(a, b); + + return validateFloat(ret, f0, f1, f2, f3); +} + +result_t test_mm_movelh_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + + float f0 = _a[0]; + float f1 = _a[1]; + float f2 = _b[0]; + float f3 = _b[1]; + + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + __m128 ret = _mm_movelh_ps(a, b); + + return validateFloat(ret, f0, f1, f2, f3); +} + +result_t test_mm_movemask_pi8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint8_t *_a = (const uint8_t *) impl.mTestIntPointer1; + unsigned int _c = 0; + for (int i = 0; i < 8; i++) { + if (_a[i] & 0x80) { + _c |= (1 << i); + } + } + + const __m64 *a = (const __m64 *) _a; + int c = _mm_movemask_pi8(*a); + + ASSERT_RETURN((unsigned int) c == _c); + return TEST_SUCCESS; +} + +result_t test_mm_movemask_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *p = impl.mTestFloatPointer1; + int ret = 0; + + const uint32_t *ip = (const uint32_t *) p; + if (ip[0] & 0x80000000) { + ret |= 1; + } + if (ip[1] & 0x80000000) { + ret |= 2; + } + if (ip[2] & 0x80000000) { + ret |= 4; + } + if (ip[3] & 0x80000000) { + ret |= 8; + } + __m128 a = load_m128(p); + int val = _mm_movemask_ps(a); + return val == ret ? TEST_SUCCESS : TEST_FAIL; +} + +result_t test_mm_mul_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + float dx = _a[0] * _b[0]; + float dy = _a[1] * _b[1]; + float dz = _a[2] * _b[2]; + float dw = _a[3] * _b[3]; + + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + __m128 c = _mm_mul_ps(a, b); + return validateFloat(c, dx, dy, dz, dw); +} + +result_t test_mm_mul_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + + float dx = _a[0] * _b[0]; + float dy = _a[1]; + float dz = _a[2]; + float dw = _a[3]; + + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + __m128 c = _mm_mul_ss(a, b); + return validateFloat(c, dx, dy, dz, dw); +} + +result_t test_mm_mulhi_pu16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint16_t *_a = (const uint16_t *) impl.mTestIntPointer1; + const uint16_t *_b = (const uint16_t *) impl.mTestIntPointer2; + uint16_t d[4]; + for (uint32_t i = 0; i < 4; i++) { + uint32_t m = (uint32_t) _a[i] * (uint32_t) _b[i]; + d[i] = (uint16_t) (m >> 16); + } + + __m64 a = load_m64(_a); + __m64 b = load_m64(_b); + __m64 c = _mm_mulhi_pu16(a, b); + return VALIDATE_UINT16_M64(c, d); +} + +result_t test_mm_or_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + __m128 c = _mm_or_ps(a, b); + // now for the assertion... + const uint32_t *ia = (const uint32_t *) &a; + const uint32_t *ib = (const uint32_t *) &b; + uint32_t r[4]; + r[0] = ia[0] | ib[0]; + r[1] = ia[1] | ib[1]; + r[2] = ia[2] | ib[2]; + r[3] = ia[3] | ib[3]; + __m128i ret = do_mm_set_epi32(r[3], r[2], r[1], r[0]); + result_t res = VALIDATE_INT32_M128(_mm_castps_si128(c), r); + if (res) { + res = VALIDATE_INT32_M128(ret, r); + } + + return res; +} + +result_t test_m_pavgb(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + return test_mm_avg_pu8(impl, iter); +} + +result_t test_m_pavgw(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + return test_mm_avg_pu16(impl, iter); +} + +result_t test_m_pextrw(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + return test_mm_extract_pi16(impl, iter); +} + +result_t test_m_pinsrw(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + return test_mm_insert_pi16(impl, iter); +} + +result_t test_m_pmaxsw(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + return test_mm_max_pi16(impl, iter); +} + +result_t test_m_pmaxub(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + return test_mm_max_pu8(impl, iter); +} + +result_t test_m_pminsw(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + return test_mm_min_pi16(impl, iter); +} + +result_t test_m_pminub(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + return test_mm_min_pu8(impl, iter); +} + +result_t test_m_pmovmskb(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + return test_mm_movemask_pi8(impl, iter); +} + +result_t test_m_pmulhuw(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + return test_mm_mulhi_pu16(impl, iter); +} + +result_t test_mm_prefetch(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + typedef struct { + __m128 a; + float r[4]; + } prefetch_test_t; + prefetch_test_t test_vec[8] = { + { + _mm_set_ps(-0.1f, 0.2f, 0.3f, 0.4f), + {0.4f, 0.3f, 0.2f, -0.1f}, + }, + { + _mm_set_ps(0.5f, 0.6f, -0.7f, -0.8f), + {-0.8f, -0.7f, 0.6f, 0.5f}, + }, + { + _mm_set_ps(0.9f, 0.10f, -0.11f, 0.12f), + {0.12f, -0.11f, 0.10f, 0.9f}, + }, + { + _mm_set_ps(-1.1f, -2.1f, -3.1f, -4.1f), + {-4.1f, -3.1f, -2.1f, -1.1f}, + }, + { + _mm_set_ps(100.0f, -110.0f, 120.0f, -130.0f), + {-130.0f, 120.0f, -110.0f, 100.0f}, + }, + { + _mm_set_ps(200.5f, 210.5f, -220.5f, 230.5f), + {995.74f, -93.04f, 144.03f, 902.50f}, + }, + { + _mm_set_ps(10.11f, -11.12f, -12.13f, 13.14f), + {13.14f, -12.13f, -11.12f, 10.11f}, + }, + { + _mm_set_ps(10.1f, -20.2f, 30.3f, 40.4f), + {40.4f, 30.3f, -20.2f, 10.1f}, + }, + }; + + for (size_t i = 0; i < (sizeof(test_vec) / (sizeof(test_vec[0]))); i++) { + _mm_prefetch(((const char *) &test_vec[i].a), _MM_HINT_T0); + _mm_prefetch(((const char *) &test_vec[i].a), _MM_HINT_T1); + _mm_prefetch(((const char *) &test_vec[i].a), _MM_HINT_T2); + _mm_prefetch(((const char *) &test_vec[i].a), _MM_HINT_NTA); + } + + return TEST_SUCCESS; +} + +result_t test_m_psadbw(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint8_t *_a = (const uint8_t *) impl.mTestIntPointer1; + const uint8_t *_b = (const uint8_t *) impl.mTestIntPointer2; + uint16_t d = 0; + for (int i = 0; i < 8; i++) { + d += (uint16_t) abs(_a[i] - _b[i]); + } + + __m64 a = load_m64(_a); + __m64 b = load_m64(_b); + __m64 c = _m_psadbw(a, b); + return validateUInt16(c, d, 0, 0, 0); +} + +result_t test_m_pshufw(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + return test_mm_shuffle_pi16(impl, iter); +} + +result_t test_mm_rcp_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + float dx = 1.0f / _a[0]; + float dy = 1.0f / _a[1]; + float dz = 1.0f / _a[2]; + float dw = 1.0f / _a[3]; + + __m128 a = load_m128(_a); + __m128 c = _mm_rcp_ps(a); + return validateFloatError(c, dx, dy, dz, dw, 0.001f); +} + +result_t test_mm_rcp_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + + float dx = 1.0f / _a[0]; + float dy = _a[1]; + float dz = _a[2]; + float dw = _a[3]; + __m128 a = load_m128(_a); + __m128 c = _mm_rcp_ss(a); + return validateFloatError(c, dx, dy, dz, dw, 0.001f); +} + +result_t test_mm_rsqrt_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = (const float *) impl.mTestFloatPointer1; + + float f0 = 1 / sqrtf(_a[0]); + float f1 = 1 / sqrtf(_a[1]); + float f2 = 1 / sqrtf(_a[2]); + float f3 = 1 / sqrtf(_a[3]); + + __m128 a = load_m128(_a); + __m128 c = _mm_rsqrt_ps(a); + + // Here, we ensure the error rate of "_mm_rsqrt_ps()" is under 0.1% compared + // to the C implementation. + return validateFloatError(c, f0, f1, f2, f3, 0.001f); +} + +result_t test_mm_rsqrt_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = (const float *) impl.mTestFloatPointer1; + + float f0 = 1 / sqrtf(_a[0]); + float f1 = _a[1]; + float f2 = _a[2]; + float f3 = _a[3]; + + __m128 a = load_m128(_a); + __m128 c = _mm_rsqrt_ss(a); + + // Here, we ensure the error rate of "_mm_rsqrt_ps()" is under 0.1% compared + // to the C implementation. + return validateFloatError(c, f0, f1, f2, f3, 0.001f); +} + +result_t test_mm_sad_pu8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint8_t *_a = (const uint8_t *) impl.mTestIntPointer1; + const uint8_t *_b = (const uint8_t *) impl.mTestIntPointer2; + uint16_t d = 0; + for (int i = 0; i < 8; i++) { + d += (uint16_t) abs(_a[i] - _b[i]); + } + + __m64 a = load_m64(_a); + __m64 b = load_m64(_b); + __m64 c = _mm_sad_pu8(a, b); + return validateUInt16(c, d, 0, 0, 0); +} + +result_t test_mm_set_flush_zero_mode(const SSE2NEONTestImpl &impl, + uint32_t iter) +{ + // TODO: + // After the behavior of denormal number and flush zero mode is fully + // investigated, the testing would be added. + return TEST_UNIMPL; +} + +result_t test_mm_set_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + float x = impl.mTestFloats[iter]; + float y = impl.mTestFloats[iter + 1]; + float z = impl.mTestFloats[iter + 2]; + float w = impl.mTestFloats[iter + 3]; + __m128 a = _mm_set_ps(x, y, z, w); + return validateFloat(a, w, z, y, x); +} + +result_t test_mm_set_ps1(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + float a = impl.mTestFloats[iter]; + + __m128 ret = _mm_set_ps1(a); + + return validateFloat(ret, a, a, a, a); +} + +OPTNONE result_t test_mm_set_rounding_mode(const SSE2NEONTestImpl &impl, + uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + result_t res_toward_zero, res_to_neg_inf, res_to_pos_inf, res_nearest; + + __m128 a = load_m128(_a); + __m128 b = _mm_setzero_ps(), c = _mm_setzero_ps(); + + _MM_SET_ROUNDING_MODE(_MM_ROUND_TOWARD_ZERO); + b = _mm_round_ps(a, _MM_FROUND_CUR_DIRECTION); + c = _mm_round_ps(a, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); + res_toward_zero = validate128(c, b); + + _MM_SET_ROUNDING_MODE(_MM_ROUND_DOWN); + b = _mm_round_ps(a, _MM_FROUND_CUR_DIRECTION); + c = _mm_round_ps(a, _MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC); + res_to_neg_inf = validate128(c, b); + + _MM_SET_ROUNDING_MODE(_MM_ROUND_UP); + b = _mm_round_ps(a, _MM_FROUND_CUR_DIRECTION); + c = _mm_round_ps(a, _MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC); + res_to_pos_inf = validate128(c, b); + + _MM_SET_ROUNDING_MODE(_MM_ROUND_NEAREST); + b = _mm_round_ps(a, _MM_FROUND_CUR_DIRECTION); + c = _mm_round_ps(a, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + res_nearest = validate128(c, b); + + if (res_toward_zero == TEST_SUCCESS && res_to_neg_inf == TEST_SUCCESS && + res_to_pos_inf == TEST_SUCCESS && res_nearest == TEST_SUCCESS) { + return TEST_SUCCESS; + } else { + return TEST_FAIL; + } +} + +result_t test_mm_set_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + float a = impl.mTestFloats[iter]; + __m128 c = _mm_set_ss(a); + return validateFloat(c, a, 0, 0, 0); +} + +result_t test_mm_set1_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + float w = impl.mTestFloats[iter]; + __m128 a = _mm_set1_ps(w); + return validateFloat(a, w, w, w, w); +} + +result_t test_mm_setcsr(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + return test_mm_set_rounding_mode(impl, iter); +} + +result_t test_mm_setr_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + float x = impl.mTestFloats[iter]; + float y = impl.mTestFloats[iter + 1]; + float z = impl.mTestFloats[iter + 2]; + float w = impl.mTestFloats[iter + 3]; + + __m128 ret = _mm_setr_ps(w, z, y, x); + + return validateFloat(ret, w, z, y, x); +} + +result_t test_mm_setzero_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + __m128 a = _mm_setzero_ps(); + return validateFloat(a, 0, 0, 0, 0); +} + +result_t test_mm_sfence(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + /* FIXME: Assume that memory barriers always function as intended. */ + return TEST_SUCCESS; +} + +result_t test_mm_shuffle_pi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ +#if (__GNUC__ == 8) || (__GNUC__ == 9 && __GNUC_MINOR__ == 2) +#error Using older gcc versions can lead to an operand mismatch error. This issue affects all versions prior to gcc 10. +#else + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + __m64 a; + __m64 d; + int16_t _d[4]; +#define TEST_IMPL(IDX) \ + a = load_m64(_a); \ + d = _mm_shuffle_pi16(a, IDX); \ + \ + _d[0] = _a[IDX & 0x3]; \ + _d[1] = _a[(IDX >> 2) & 0x3]; \ + _d[2] = _a[(IDX >> 4) & 0x3]; \ + _d[3] = _a[(IDX >> 6) & 0x3]; \ + if (VALIDATE_INT16_M64(d, _d) != TEST_SUCCESS) { \ + return TEST_FAIL; \ + } + + IMM_256_ITER +#undef TEST_IMPL + return TEST_SUCCESS; +#endif +} + +// Note, NEON does not have a general purpose shuffled command like SSE. +// When invoking this method, there is special code for a number of the most +// common shuffle permutations +result_t test_mm_shuffle_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + result_t isValid = TEST_SUCCESS; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + // Test many permutations of the shuffle operation, including all + // permutations which have an optimized/customized implementation + __m128 ret; + ret = _mm_shuffle_ps(a, b, _MM_SHUFFLE(0, 1, 2, 3)); + if (!validateFloat(ret, _a[3], _a[2], _b[1], _b[0])) { + isValid = TEST_FAIL; + } + ret = _mm_shuffle_ps(a, b, _MM_SHUFFLE(3, 2, 1, 0)); + if (!validateFloat(ret, _a[0], _a[1], _b[2], _b[3])) { + isValid = TEST_FAIL; + } + ret = _mm_shuffle_ps(a, b, _MM_SHUFFLE(0, 0, 1, 1)); + if (!validateFloat(ret, _a[1], _a[1], _b[0], _b[0])) { + isValid = TEST_FAIL; + } + ret = _mm_shuffle_ps(a, b, _MM_SHUFFLE(3, 1, 0, 2)); + if (!validateFloat(ret, _a[2], _a[0], _b[1], _b[3])) { + isValid = TEST_FAIL; + } + ret = _mm_shuffle_ps(a, b, _MM_SHUFFLE(1, 0, 3, 2)); + if (!validateFloat(ret, _a[2], _a[3], _b[0], _b[1])) { + isValid = TEST_FAIL; + } + ret = _mm_shuffle_ps(a, b, _MM_SHUFFLE(2, 3, 0, 1)); + if (!validateFloat(ret, _a[1], _a[0], _b[3], _b[2])) { + isValid = TEST_FAIL; + } + ret = _mm_shuffle_ps(a, b, _MM_SHUFFLE(0, 0, 2, 2)); + if (!validateFloat(ret, _a[2], _a[2], _b[0], _b[0])) { + isValid = TEST_FAIL; + } + ret = _mm_shuffle_ps(a, b, _MM_SHUFFLE(2, 2, 0, 0)); + if (!validateFloat(ret, _a[0], _a[0], _b[2], _b[2])) { + isValid = TEST_FAIL; + } + ret = _mm_shuffle_ps(a, b, _MM_SHUFFLE(3, 2, 0, 2)); + if (!validateFloat(ret, _a[2], _a[0], _b[2], _b[3])) { + isValid = TEST_FAIL; + } + ret = _mm_shuffle_ps(a, b, _MM_SHUFFLE(1, 1, 3, 3)); + if (!validateFloat(ret, _a[3], _a[3], _b[1], _b[1])) { + isValid = TEST_FAIL; + } + ret = _mm_shuffle_ps(a, b, _MM_SHUFFLE(2, 0, 1, 0)); + if (!validateFloat(ret, _a[0], _a[1], _b[0], _b[2])) { + isValid = TEST_FAIL; + } + ret = _mm_shuffle_ps(a, b, _MM_SHUFFLE(2, 0, 0, 1)); + if (!validateFloat(ret, _a[1], _a[0], _b[0], _b[2])) { + isValid = TEST_FAIL; + } + ret = _mm_shuffle_ps(a, b, _MM_SHUFFLE(2, 0, 3, 2)); + if (!validateFloat(ret, _a[2], _a[3], _b[0], _b[2])) { + isValid = TEST_FAIL; + } + + return isValid; +} + +result_t test_mm_sqrt_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = (const float *) impl.mTestFloatPointer1; + + float f0 = sqrtf(_a[0]); + float f1 = sqrtf(_a[1]); + float f2 = sqrtf(_a[2]); + float f3 = sqrtf(_a[3]); + + __m128 a = load_m128(_a); + __m128 c = _mm_sqrt_ps(a); + +#if defined(__arm__) && !defined(__arm64__) && !defined(_M_ARM64) + // Here, we ensure the error rate of "_mm_sqrt_ps()" ARMv7-A implementation + // is under 10^-4% compared to the C implementation. + return validateFloatError(c, f0, f1, f2, f3, 0.0001f); +#else + // Here, we ensure the error rate of "_mm_sqrt_ps()" is under 10^-6% + // compared to the C implementation. + return validateFloatError(c, f0, f1, f2, f3, 0.000001f); +#endif +} + +result_t test_mm_sqrt_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = (const float *) impl.mTestFloatPointer1; + + float f0 = sqrtf(_a[0]); + float f1 = _a[1]; + float f2 = _a[2]; + float f3 = _a[3]; + + __m128 a = load_m128(_a); + __m128 c = _mm_sqrt_ss(a); + +#if defined(__arm__) && !defined(__arm64__) && !defined(_M_ARM64) + // Here, we ensure the error rate of "_mm_sqrt_ps()" ARMv7-A implementation + // is under 10^-4% compared to the C implementation. + return validateFloatError(c, f0, f1, f2, f3, 0.0001f); +#else + // Here, we ensure the error rate of "_mm_sqrt_ps()" is under 10^-6% + // compared to the C implementation. + return validateFloatError(c, f0, f1, f2, f3, 0.000001f); +#endif +} + +result_t test_mm_store_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + int32_t *p = impl.mTestIntPointer1; + int32_t x = impl.mTestInts[iter]; + int32_t y = impl.mTestInts[iter + 1]; + int32_t z = impl.mTestInts[iter + 2]; + int32_t w = impl.mTestInts[iter + 3]; + __m128i a = _mm_set_epi32(x, y, z, w); + _mm_store_ps((float *) p, _mm_castsi128_ps(a)); + ASSERT_RETURN(p[0] == w); + ASSERT_RETURN(p[1] == z); + ASSERT_RETURN(p[2] == y); + ASSERT_RETURN(p[3] == x); + return TEST_SUCCESS; +} + +result_t test_mm_store_ps1(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + float *p = impl.mTestFloatPointer1; + float d[4]; + + __m128 a = load_m128(p); + _mm_store_ps1(d, a); + + ASSERT_RETURN(d[0] == *p); + ASSERT_RETURN(d[1] == *p); + ASSERT_RETURN(d[2] == *p); + ASSERT_RETURN(d[3] == *p); + return TEST_SUCCESS; +} + +result_t test_mm_store_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + float x = impl.mTestFloats[iter]; + float p[4]; + + __m128 a = _mm_set_ss(x); + _mm_store_ss(p, a); + ASSERT_RETURN(p[0] == x); + return TEST_SUCCESS; +} + +result_t test_mm_store1_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + float *p = impl.mTestFloatPointer1; + float d[4]; + + __m128 a = load_m128(p); + _mm_store1_ps(d, a); + + ASSERT_RETURN(d[0] == *p); + ASSERT_RETURN(d[1] == *p); + ASSERT_RETURN(d[2] == *p); + ASSERT_RETURN(d[3] == *p); + return TEST_SUCCESS; +} + +result_t test_mm_storeh_pi(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *p = impl.mTestFloatPointer1; + float d[4] = {1.0f, 2.0f, 3.0f, 4.0f}; + __m128 a = _mm_load_ps(p); + __m64 *b = (__m64 *) d; + + _mm_storeh_pi(b, a); + ASSERT_RETURN(d[0] == p[2]); + ASSERT_RETURN(d[1] == p[3]); + ASSERT_RETURN(d[2] == 3.0f); + ASSERT_RETURN(d[3] == 4.0f); + return TEST_SUCCESS; +} + +result_t test_mm_storel_pi(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *p = impl.mTestFloatPointer1; + float d[4] = {1.0f, 2.0f, 3.0f, 4.0f}; + __m128 a = _mm_load_ps(p); + __m64 *b = (__m64 *) d; + + _mm_storel_pi(b, a); + ASSERT_RETURN(d[0] == p[0]); + ASSERT_RETURN(d[1] == p[1]); + ASSERT_RETURN(d[2] == 3.0f); + ASSERT_RETURN(d[3] == 4.0f); + return TEST_SUCCESS; +} + +result_t test_mm_storer_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + float *p = impl.mTestFloatPointer1; + float d[4]; + + __m128 a = load_m128(p); + _mm_storer_ps(d, a); + + ASSERT_RETURN(d[0] == p[3]); + ASSERT_RETURN(d[1] == p[2]); + ASSERT_RETURN(d[2] == p[1]); + ASSERT_RETURN(d[3] == p[0]); + return TEST_SUCCESS; +} + +result_t test_mm_storeu_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + float *_a = impl.mTestFloatPointer1; + float f[4]; + __m128 a = _mm_load_ps(_a); + + _mm_storeu_ps(f, a); + return validateFloat(a, f[0], f[1], f[2], f[3]); +} + +result_t test_mm_storeu_si16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + // The GCC version before 11 does not implement intrinsic function + // _mm_storeu_si16. Check https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95483 + // for more information. +#if (defined(__GNUC__) && !defined(__clang__)) && (__GNUC__ <= 10) + return TEST_UNIMPL; +#else + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + __m128i b = _mm_setzero_si128(); + __m128i a = load_m128i(_a); + _mm_storeu_si16(&b, a); + int16_t *_b = (int16_t *) &b; + int16_t *_c = (int16_t *) &a; + return validateInt16(b, _c[0], _b[1], _b[2], _b[3], _b[4], _b[5], _b[6], + _b[7]); +#endif +} + +result_t test_mm_storeu_si64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + // Versions of GCC prior to 9 do not implement intrinsic function + // _mm_storeu_si64. Check https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87558 + // for more information. +#if (defined(__GNUC__) && !defined(__clang__)) && (__GNUC__ < 9) + return TEST_UNIMPL; +#else + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + __m128i b = _mm_setzero_si128(); + __m128i a = load_m128i(_a); + _mm_storeu_si64(&b, a); + int64_t *_b = (int64_t *) &b; + int64_t *_c = (int64_t *) &a; + return validateInt64(b, _c[0], _b[1]); +#endif +} + +result_t test_mm_stream_pi(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int64_t *_a = (const int64_t *) impl.mTestIntPointer1; + __m64 a = load_m64(_a); + __m64 p; + + _mm_stream_pi(&p, a); + return validateInt64(p, _a[0]); +} + +result_t test_mm_stream_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + __m128 a = load_m128(_a); + alignas(16) float p[4]; + + _mm_stream_ps(p, a); + ASSERT_RETURN(p[0] == _a[0]); + ASSERT_RETURN(p[1] == _a[1]); + ASSERT_RETURN(p[2] == _a[2]); + ASSERT_RETURN(p[3] == _a[3]); + return TEST_SUCCESS; +} + +result_t test_mm_sub_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + float dx = _a[0] - _b[0]; + float dy = _a[1] - _b[1]; + float dz = _a[2] - _b[2]; + float dw = _a[3] - _b[3]; + + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + __m128 c = _mm_sub_ps(a, b); + return validateFloat(c, dx, dy, dz, dw); +} + +result_t test_mm_sub_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + float dx = _a[0] - _b[0]; + float dy = _a[1]; + float dz = _a[2]; + float dw = _a[3]; + + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + __m128 c = _mm_sub_ss(a, b); + return validateFloat(c, dx, dy, dz, dw); +} + +result_t test_mm_ucomieq_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + // _mm_ucomieq_ss is equal to _mm_comieq_ss + return test_mm_comieq_ss(impl, iter); +} + +result_t test_mm_ucomige_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + // _mm_ucomige_ss is equal to _mm_comige_ss + return test_mm_comige_ss(impl, iter); +} + +result_t test_mm_ucomigt_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + // _mm_ucomigt_ss is equal to _mm_comigt_ss + return test_mm_comigt_ss(impl, iter); +} + +result_t test_mm_ucomile_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + // _mm_ucomile_ss is equal to _mm_comile_ss + return test_mm_comile_ss(impl, iter); +} + +result_t test_mm_ucomilt_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + // _mm_ucomilt_ss is equal to _mm_comilt_ss + return test_mm_comilt_ss(impl, iter); +} + +result_t test_mm_ucomineq_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + // _mm_ucomineq_ss is equal to _mm_comineq_ss + return test_mm_comineq_ss(impl, iter); +} + +result_t test_mm_undefined_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + __m128 a = _mm_undefined_ps(); + a = _mm_xor_ps(a, a); + return validateFloat(a, 0, 0, 0, 0); +} + +result_t test_mm_unpackhi_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + float *_a = impl.mTestFloatPointer1; + float *_b = impl.mTestFloatPointer1; + + float f0 = _a[2]; + float f1 = _b[2]; + float f2 = _a[3]; + float f3 = _b[3]; + + __m128 a = _mm_load_ps(_a); + __m128 b = _mm_load_ps(_b); + __m128 c = _mm_unpackhi_ps(a, b); + return validateFloat(c, f0, f1, f2, f3); +} + +result_t test_mm_unpacklo_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + float *_a = impl.mTestFloatPointer1; + float *_b = impl.mTestFloatPointer1; + + float f0 = _a[0]; + float f1 = _b[0]; + float f2 = _a[1]; + float f3 = _b[1]; + + __m128 a = _mm_load_ps(_a); + __m128 b = _mm_load_ps(_b); + __m128 c = _mm_unpacklo_ps(a, b); + + return validateFloat(c, f0, f1, f2, f3); +} + +result_t test_mm_xor_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = (const int32_t *) impl.mTestFloatPointer1; + const int32_t *_b = (const int32_t *) impl.mTestFloatPointer2; + float d0 = sse2neon_tool_recast_f32(_a[0] ^ _b[0]); + float d1 = sse2neon_tool_recast_f32(_a[1] ^ _b[1]); + float d2 = sse2neon_tool_recast_f32(_a[2] ^ _b[2]); + float d3 = sse2neon_tool_recast_f32(_a[3] ^ _b[3]); + + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + __m128 c = _mm_xor_ps(a, b); + + return validateFloat(c, d0, d1, d2, d3); +} + +/* SSE2 */ +result_t test_mm_add_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer2; + + int16_t d[8]; + d[0] = _a[0] + _b[0]; + d[1] = _a[1] + _b[1]; + d[2] = _a[2] + _b[2]; + d[3] = _a[3] + _b[3]; + d[4] = _a[4] + _b[4]; + d[5] = _a[5] + _b[5]; + d[6] = _a[6] + _b[6]; + d[7] = _a[7] + _b[7]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_add_epi16(a, b); + + return VALIDATE_INT16_M128(c, d); +} + +result_t test_mm_add_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = impl.mTestIntPointer1; + const int32_t *_b = impl.mTestIntPointer2; + int32_t d[4]; + d[0] = _a[0] + _b[0]; + d[1] = _a[1] + _b[1]; + d[2] = _a[2] + _b[2]; + d[3] = _a[3] + _b[3]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_add_epi32(a, b); + return VALIDATE_INT32_M128(c, d); +} + +result_t test_mm_add_epi64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int64_t *_a = (const int64_t *) impl.mTestIntPointer1; + const int64_t *_b = (const int64_t *) impl.mTestIntPointer2; + + int64_t d0 = _a[0] + _b[0]; + int64_t d1 = _a[1] + _b[1]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_add_epi64(a, b); + + return validateInt64(c, d0, d1); +} + +result_t test_mm_add_epi8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + const int8_t *_b = (const int8_t *) impl.mTestIntPointer2; + int8_t d[16]; + d[0] = _a[0] + _b[0]; + d[1] = _a[1] + _b[1]; + d[2] = _a[2] + _b[2]; + d[3] = _a[3] + _b[3]; + d[4] = _a[4] + _b[4]; + d[5] = _a[5] + _b[5]; + d[6] = _a[6] + _b[6]; + d[7] = _a[7] + _b[7]; + d[8] = _a[8] + _b[8]; + d[9] = _a[9] + _b[9]; + d[10] = _a[10] + _b[10]; + d[11] = _a[11] + _b[11]; + d[12] = _a[12] + _b[12]; + d[13] = _a[13] + _b[13]; + d[14] = _a[14] + _b[14]; + d[15] = _a[15] + _b[15]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_add_epi8(a, b); + return VALIDATE_INT8_M128(c, d); +} + +result_t test_mm_add_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + double d0 = _a[0] + _b[0]; + double d1 = _a[1] + _b[1]; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_add_pd(a, b); + return validateDouble(c, d0, d1); +} + +result_t test_mm_add_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + double d0 = _a[0] + _b[0]; + double d1 = _a[1]; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_add_sd(a, b); + return validateDouble(c, d0, d1); +} + +result_t test_mm_add_si64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int64_t *_a = (const int64_t *) impl.mTestIntPointer1; + const int64_t *_b = (const int64_t *) impl.mTestIntPointer2; + + int64_t d0 = _a[0] + _b[0]; + + __m64 a = load_m64(_a); + __m64 b = load_m64(_b); + __m64 c = _mm_add_si64(a, b); + + return validateInt64(c, d0); +} + +result_t test_mm_adds_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer2; + int16_t d[8]; + d[0] = saturate_i16((int32_t) _a[0] + (int32_t) _b[0]); + d[1] = saturate_i16((int32_t) _a[1] + (int32_t) _b[1]); + d[2] = saturate_i16((int32_t) _a[2] + (int32_t) _b[2]); + d[3] = saturate_i16((int32_t) _a[3] + (int32_t) _b[3]); + d[4] = saturate_i16((int32_t) _a[4] + (int32_t) _b[4]); + d[5] = saturate_i16((int32_t) _a[5] + (int32_t) _b[5]); + d[6] = saturate_i16((int32_t) _a[6] + (int32_t) _b[6]); + d[7] = saturate_i16((int32_t) _a[7] + (int32_t) _b[7]); + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + + __m128i c = _mm_adds_epi16(a, b); + return VALIDATE_INT16_M128(c, d); +} + +result_t test_mm_adds_epi8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + const int8_t *_b = (const int8_t *) impl.mTestIntPointer2; + + int16_t d[16]; + for (int i = 0; i < 16; i++) { + d[i] = (int16_t) _a[i] + (int16_t) _b[i]; + if (d[i] > 127) + d[i] = 127; + if (d[i] < -128) + d[i] = -128; + } + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_adds_epi8(a, b); + + return VALIDATE_INT8_M128(c, (int8_t) d); +} + +result_t test_mm_adds_epu16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint16_t *_a = (const uint16_t *) impl.mTestIntPointer1; + const uint16_t *_b = (const uint16_t *) impl.mTestIntPointer2; + + uint16_t d[8]; + d[0] = saturate_u16((uint32_t) _a[0] + (uint32_t) _b[0]); + d[1] = saturate_u16((uint32_t) _a[1] + (uint32_t) _b[1]); + d[2] = saturate_u16((uint32_t) _a[2] + (uint32_t) _b[2]); + d[3] = saturate_u16((uint32_t) _a[3] + (uint32_t) _b[3]); + d[4] = saturate_u16((uint32_t) _a[4] + (uint32_t) _b[4]); + d[5] = saturate_u16((uint32_t) _a[5] + (uint32_t) _b[5]); + d[6] = saturate_u16((uint32_t) _a[6] + (uint32_t) _b[6]); + d[7] = saturate_u16((uint32_t) _a[7] + (uint32_t) _b[7]); + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_adds_epu16(a, b); + + return VALIDATE_INT16_M128(c, d); +} + +result_t test_mm_adds_epu8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + const int8_t *_b = (const int8_t *) impl.mTestIntPointer2; + uint8_t d[16]; + d[0] = (uint8_t) _a[0] + (uint8_t) _b[0]; + if (d[0] < (uint8_t) _a[0]) + d[0] = 255; + d[1] = (uint8_t) _a[1] + (uint8_t) _b[1]; + if (d[1] < (uint8_t) _a[1]) + d[1] = 255; + d[2] = (uint8_t) _a[2] + (uint8_t) _b[2]; + if (d[2] < (uint8_t) _a[2]) + d[2] = 255; + d[3] = (uint8_t) _a[3] + (uint8_t) _b[3]; + if (d[3] < (uint8_t) _a[3]) + d[3] = 255; + d[4] = (uint8_t) _a[4] + (uint8_t) _b[4]; + if (d[4] < (uint8_t) _a[4]) + d[4] = 255; + d[5] = (uint8_t) _a[5] + (uint8_t) _b[5]; + if (d[5] < (uint8_t) _a[5]) + d[5] = 255; + d[6] = (uint8_t) _a[6] + (uint8_t) _b[6]; + if (d[6] < (uint8_t) _a[6]) + d[6] = 255; + d[7] = (uint8_t) _a[7] + (uint8_t) _b[7]; + if (d[7] < (uint8_t) _a[7]) + d[7] = 255; + d[8] = (uint8_t) _a[8] + (uint8_t) _b[8]; + if (d[8] < (uint8_t) _a[8]) + d[8] = 255; + d[9] = (uint8_t) _a[9] + (uint8_t) _b[9]; + if (d[9] < (uint8_t) _a[9]) + d[9] = 255; + d[10] = (uint8_t) _a[10] + (uint8_t) _b[10]; + if (d[10] < (uint8_t) _a[10]) + d[10] = 255; + d[11] = (uint8_t) _a[11] + (uint8_t) _b[11]; + if (d[11] < (uint8_t) _a[11]) + d[11] = 255; + d[12] = (uint8_t) _a[12] + (uint8_t) _b[12]; + if (d[12] < (uint8_t) _a[12]) + d[12] = 255; + d[13] = (uint8_t) _a[13] + (uint8_t) _b[13]; + if (d[13] < (uint8_t) _a[13]) + d[13] = 255; + d[14] = (uint8_t) _a[14] + (uint8_t) _b[14]; + if (d[14] < (uint8_t) _a[14]) + d[14] = 255; + d[15] = (uint8_t) _a[15] + (uint8_t) _b[15]; + if (d[15] < (uint8_t) _a[15]) + d[15] = 255; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_adds_epu8(a, b); + return VALIDATE_INT8_M128(c, d); +} + +result_t test_mm_and_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int64_t *_a = (const int64_t *) impl.mTestFloatPointer1; + const int64_t *_b = (const int64_t *) impl.mTestFloatPointer2; + double d0 = sse2neon_tool_recast_f64(_a[0] & _b[0]); + double d1 = sse2neon_tool_recast_f64(_a[1] & _b[1]); + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_and_pd(a, b); + + return validateDouble(c, d0, d1); +} + +result_t test_mm_and_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = impl.mTestIntPointer1; + const int32_t *_b = impl.mTestIntPointer2; + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128 fc = _mm_and_ps(_mm_castsi128_ps(a), _mm_castsi128_ps(b)); + __m128i c = _mm_castps_si128(fc); + // now for the assertion... + const uint32_t *ia = (const uint32_t *) &a; + const uint32_t *ib = (const uint32_t *) &b; + uint32_t r[4]; + r[0] = ia[0] & ib[0]; + r[1] = ia[1] & ib[1]; + r[2] = ia[2] & ib[2]; + r[3] = ia[3] & ib[3]; + __m128i ret = do_mm_set_epi32(r[3], r[2], r[1], r[0]); + result_t res = VALIDATE_INT32_M128(c, r); + if (res) { + res = VALIDATE_INT32_M128(ret, r); + } + return res; +} + +result_t test_mm_andnot_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_andnot_pd(a, b); + + // Take AND operation a complement of 'a' and 'b'. Bitwise operations are + // not allowed on float/double datatype, so 'a' and 'b' are calculated in + // uint64_t datatype. + const uint64_t *ia = (const uint64_t *) &a; + const uint64_t *ib = (const uint64_t *) &b; + uint64_t r0 = ~ia[0] & ib[0]; + uint64_t r1 = ~ia[1] & ib[1]; + return validateUInt64(_mm_castpd_si128(c), r0, r1); +} + +result_t test_mm_andnot_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = impl.mTestIntPointer1; + const int32_t *_b = impl.mTestIntPointer2; + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128 fc = _mm_andnot_ps(_mm_castsi128_ps(a), _mm_castsi128_ps(b)); + __m128i c = _mm_castps_si128(fc); + // now for the assertion... + const uint32_t *ia = (const uint32_t *) &a; + const uint32_t *ib = (const uint32_t *) &b; + uint32_t r[4]; + r[0] = ~ia[0] & ib[0]; + r[1] = ~ia[1] & ib[1]; + r[2] = ~ia[2] & ib[2]; + r[3] = ~ia[3] & ib[3]; + __m128i ret = do_mm_set_epi32(r[3], r[2], r[1], r[0]); + result_t res = TEST_SUCCESS; + res = VALIDATE_INT32_M128(c, r); + if (res) { + res = VALIDATE_INT32_M128(ret, r); + } + return res; +} + +result_t test_mm_avg_epu16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint16_t *_a = (const uint16_t *) impl.mTestIntPointer1; + const uint16_t *_b = (const uint16_t *) impl.mTestIntPointer2; + uint16_t d[8]; + d[0] = (uint16_t) ((_a[0] + _b[0] + 1) >> 1); + d[1] = (uint16_t) ((_a[1] + _b[1] + 1) >> 1); + d[2] = (uint16_t) ((_a[2] + _b[2] + 1) >> 1); + d[3] = (uint16_t) ((_a[3] + _b[3] + 1) >> 1); + d[4] = (uint16_t) ((_a[4] + _b[4] + 1) >> 1); + d[5] = (uint16_t) ((_a[5] + _b[5] + 1) >> 1); + d[6] = (uint16_t) ((_a[6] + _b[6] + 1) >> 1); + d[7] = (uint16_t) ((_a[7] + _b[7] + 1) >> 1); + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_avg_epu16(a, b); + return VALIDATE_UINT16_M128(c, d); +} + +result_t test_mm_avg_epu8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint8_t *_a = (const uint8_t *) impl.mTestIntPointer1; + const uint8_t *_b = (const uint8_t *) impl.mTestIntPointer2; + uint8_t d[16]; + d[0] = (uint8_t) ((_a[0] + _b[0] + 1) >> 1); + d[1] = (uint8_t) ((_a[1] + _b[1] + 1) >> 1); + d[2] = (uint8_t) ((_a[2] + _b[2] + 1) >> 1); + d[3] = (uint8_t) ((_a[3] + _b[3] + 1) >> 1); + d[4] = (uint8_t) ((_a[4] + _b[4] + 1) >> 1); + d[5] = (uint8_t) ((_a[5] + _b[5] + 1) >> 1); + d[6] = (uint8_t) ((_a[6] + _b[6] + 1) >> 1); + d[7] = (uint8_t) ((_a[7] + _b[7] + 1) >> 1); + d[8] = (uint8_t) ((_a[8] + _b[8] + 1) >> 1); + d[9] = (uint8_t) ((_a[9] + _b[9] + 1) >> 1); + d[10] = (uint8_t) ((_a[10] + _b[10] + 1) >> 1); + d[11] = (uint8_t) ((_a[11] + _b[11] + 1) >> 1); + d[12] = (uint8_t) ((_a[12] + _b[12] + 1) >> 1); + d[13] = (uint8_t) ((_a[13] + _b[13] + 1) >> 1); + d[14] = (uint8_t) ((_a[14] + _b[14] + 1) >> 1); + d[15] = (uint8_t) ((_a[15] + _b[15] + 1) >> 1); + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_avg_epu8(a, b); + return VALIDATE_UINT8_M128(c, d); +} + +result_t test_mm_bslli_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + return test_mm_slli_si128(impl, iter); +} + +result_t test_mm_bsrli_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + return test_mm_srli_si128(impl, iter); +} + +result_t test_mm_castpd_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const __m128d a = load_m128d(_a); + const __m128 _c = load_m128(_a); + + __m128 r = _mm_castpd_ps(a); + + return validate128(r, _c); +} + +result_t test_mm_castpd_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const __m128d a = load_m128d(_a); + const __m128i *_c = (const __m128i *) _a; + + __m128i r = _mm_castpd_si128(a); + + return validate128(r, *_c); +} + +result_t test_mm_castps_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const __m128 a = load_m128(_a); + const __m128d *_c = (const __m128d *) _a; + + __m128d r = _mm_castps_pd(a); + + return validate128(r, *_c); +} + +result_t test_mm_castps_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + + const __m128i *_c = (const __m128i *) _a; + + const __m128 a = load_m128(_a); + __m128i r = _mm_castps_si128(a); + + return validate128(r, *_c); +} + +result_t test_mm_castsi128_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = impl.mTestIntPointer1; + + const __m128d *_c = (const __m128d *) _a; + + const __m128i a = load_m128i(_a); + __m128d r = _mm_castsi128_pd(a); + + return validate128(r, *_c); +} + +result_t test_mm_castsi128_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = impl.mTestIntPointer1; + + const __m128 *_c = (const __m128 *) _a; + + const __m128i a = load_m128i(_a); + __m128 r = _mm_castsi128_ps(a); + + return validate128(r, *_c); +} + +result_t test_mm_clflush(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + /* FIXME: Assume that we have portable mechanisms to flush cache. */ + return TEST_SUCCESS; +} + +result_t test_mm_cmpeq_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer2; + int16_t d[8]; + d[0] = (_a[0] == _b[0]) ? ~UINT16_C(0) : 0x0; + d[1] = (_a[1] == _b[1]) ? ~UINT16_C(0) : 0x0; + d[2] = (_a[2] == _b[2]) ? ~UINT16_C(0) : 0x0; + d[3] = (_a[3] == _b[3]) ? ~UINT16_C(0) : 0x0; + d[4] = (_a[4] == _b[4]) ? ~UINT16_C(0) : 0x0; + d[5] = (_a[5] == _b[5]) ? ~UINT16_C(0) : 0x0; + d[6] = (_a[6] == _b[6]) ? ~UINT16_C(0) : 0x0; + d[7] = (_a[7] == _b[7]) ? ~UINT16_C(0) : 0x0; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_cmpeq_epi16(a, b); + return VALIDATE_INT16_M128(c, d); +} + +result_t test_mm_cmpeq_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = impl.mTestIntPointer1; + const int32_t *_b = impl.mTestIntPointer2; + + int32_t d[4]; + d[0] = (_a[0] == _b[0]) ? ~UINT32_C(0) : 0x0; + d[1] = (_a[1] == _b[1]) ? ~UINT32_C(0) : 0x0; + d[2] = (_a[2] == _b[2]) ? ~UINT32_C(0) : 0x0; + d[3] = (_a[3] == _b[3]) ? ~UINT32_C(0) : 0x0; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_cmpeq_epi32(a, b); + + return VALIDATE_INT32_M128(c, d); +} + +result_t test_mm_cmpeq_epi8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + const int8_t *_b = (const int8_t *) impl.mTestIntPointer2; + int8_t d[16]; + d[0] = (_a[0] == _b[0]) ? ~UINT8_C(0) : 0x00; + d[1] = (_a[1] == _b[1]) ? ~UINT8_C(0) : 0x00; + d[2] = (_a[2] == _b[2]) ? ~UINT8_C(0) : 0x00; + d[3] = (_a[3] == _b[3]) ? ~UINT8_C(0) : 0x00; + d[4] = (_a[4] == _b[4]) ? ~UINT8_C(0) : 0x00; + d[5] = (_a[5] == _b[5]) ? ~UINT8_C(0) : 0x00; + d[6] = (_a[6] == _b[6]) ? ~UINT8_C(0) : 0x00; + d[7] = (_a[7] == _b[7]) ? ~UINT8_C(0) : 0x00; + d[8] = (_a[8] == _b[8]) ? ~UINT8_C(0) : 0x00; + d[9] = (_a[9] == _b[9]) ? ~UINT8_C(0) : 0x00; + d[10] = (_a[10] == _b[10]) ? ~UINT8_C(0) : 0x00; + d[11] = (_a[11] == _b[11]) ? ~UINT8_C(0) : 0x00; + d[12] = (_a[12] == _b[12]) ? ~UINT8_C(0) : 0x00; + d[13] = (_a[13] == _b[13]) ? ~UINT8_C(0) : 0x00; + d[14] = (_a[14] == _b[14]) ? ~UINT8_C(0) : 0x00; + d[15] = (_a[15] == _b[15]) ? ~UINT8_C(0) : 0x00; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_cmpeq_epi8(a, b); + return VALIDATE_INT8_M128(c, d); +} + +result_t test_mm_cmpeq_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + double d0 = (_a[0] == _b[0]) ? sse2neon_tool_recast_f64(UINT64_MAX) : 0; + double d1 = (_a[1] == _b[1]) ? sse2neon_tool_recast_f64(UINT64_MAX) : 0; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_cmpeq_pd(a, b); + return validateDouble(c, d0, d1); +} + +result_t test_mm_cmpeq_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + double d0 = (_a[0] == _b[0]) ? ALL_BIT_1_64 : 0; + double d1 = _a[1]; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_cmpeq_sd(a, b); + + return validateDouble(c, d0, d1); +} + +result_t test_mm_cmpge_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + double d0 = (_a[0] >= _b[0]) ? ALL_BIT_1_64 : 0; + double d1 = (_a[1] >= _b[1]) ? ALL_BIT_1_64 : 0; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_cmpge_pd(a, b); + + return validateDouble(c, d0, d1); +} + +result_t test_mm_cmpge_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + double *_a = (double *) impl.mTestFloatPointer1; + double *_b = (double *) impl.mTestFloatPointer2; + double d0 = (_a[0] >= _b[0]) ? ALL_BIT_1_64 : 0; + double d1 = _a[1]; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_cmpge_sd(a, b); + + return validateDouble(c, d0, d1); +} + +result_t test_mm_cmpgt_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer2; + uint16_t d[8]; + d[0] = _a[0] > _b[0] ? ~UINT16_C(0) : 0; + d[1] = _a[1] > _b[1] ? ~UINT16_C(0) : 0; + d[2] = _a[2] > _b[2] ? ~UINT16_C(0) : 0; + d[3] = _a[3] > _b[3] ? ~UINT16_C(0) : 0; + d[4] = _a[4] > _b[4] ? ~UINT16_C(0) : 0; + d[5] = _a[5] > _b[5] ? ~UINT16_C(0) : 0; + d[6] = _a[6] > _b[6] ? ~UINT16_C(0) : 0; + d[7] = _a[7] > _b[7] ? ~UINT16_C(0) : 0; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_cmpgt_epi16(a, b); + + return VALIDATE_INT16_M128(c, d); +} + +result_t test_mm_cmpgt_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = impl.mTestIntPointer1; + const int32_t *_b = impl.mTestIntPointer2; + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + + int32_t result[4]; + + result[0] = _a[0] > _b[0] ? -1 : 0; + result[1] = _a[1] > _b[1] ? -1 : 0; + result[2] = _a[2] > _b[2] ? -1 : 0; + result[3] = _a[3] > _b[3] ? -1 : 0; + + __m128i iret = _mm_cmpgt_epi32(a, b); + return VALIDATE_INT32_M128(iret, result); +} + +result_t test_mm_cmpgt_epi8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + const int8_t *_b = (const int8_t *) impl.mTestIntPointer2; + int8_t d[16]; + d[0] = (_a[0] > _b[0]) ? ~UINT8_C(0) : 0x00; + d[1] = (_a[1] > _b[1]) ? ~UINT8_C(0) : 0x00; + d[2] = (_a[2] > _b[2]) ? ~UINT8_C(0) : 0x00; + d[3] = (_a[3] > _b[3]) ? ~UINT8_C(0) : 0x00; + d[4] = (_a[4] > _b[4]) ? ~UINT8_C(0) : 0x00; + d[5] = (_a[5] > _b[5]) ? ~UINT8_C(0) : 0x00; + d[6] = (_a[6] > _b[6]) ? ~UINT8_C(0) : 0x00; + d[7] = (_a[7] > _b[7]) ? ~UINT8_C(0) : 0x00; + d[8] = (_a[8] > _b[8]) ? ~UINT8_C(0) : 0x00; + d[9] = (_a[9] > _b[9]) ? ~UINT8_C(0) : 0x00; + d[10] = (_a[10] > _b[10]) ? ~UINT8_C(0) : 0x00; + d[11] = (_a[11] > _b[11]) ? ~UINT8_C(0) : 0x00; + d[12] = (_a[12] > _b[12]) ? ~UINT8_C(0) : 0x00; + d[13] = (_a[13] > _b[13]) ? ~UINT8_C(0) : 0x00; + d[14] = (_a[14] > _b[14]) ? ~UINT8_C(0) : 0x00; + d[15] = (_a[15] > _b[15]) ? ~UINT8_C(0) : 0x00; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_cmpgt_epi8(a, b); + return VALIDATE_INT8_M128(c, d); +} + +result_t test_mm_cmpgt_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + double d0 = (_a[0] > _b[0]) ? ALL_BIT_1_64 : 0; + double d1 = (_a[1] > _b[1]) ? ALL_BIT_1_64 : 0; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_cmpgt_pd(a, b); + + return validateDouble(c, d0, d1); +} + +result_t test_mm_cmpgt_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + double *_a = (double *) impl.mTestFloatPointer1; + double *_b = (double *) impl.mTestFloatPointer2; + double d0 = (_a[0] > _b[0]) ? ALL_BIT_1_64 : 0; + double d1 = _a[1]; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_cmpgt_sd(a, b); + + return validateDouble(c, d0, d1); +} + +result_t test_mm_cmple_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + double d0 = (_a[0] <= _b[0]) ? ALL_BIT_1_64 : 0; + double d1 = (_a[1] <= _b[1]) ? ALL_BIT_1_64 : 0; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_cmple_pd(a, b); + + return validateDouble(c, d0, d1); +} + +result_t test_mm_cmple_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + double *_a = (double *) impl.mTestFloatPointer1; + double *_b = (double *) impl.mTestFloatPointer2; + double d0 = (_a[0] <= _b[0]) ? ALL_BIT_1_64 : 0; + double d1 = _a[1]; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_cmple_sd(a, b); + + return validateDouble(c, d0, d1); +} + +result_t test_mm_cmplt_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer2; + uint16_t d[8]; + d[0] = _a[0] < _b[0] ? ~UINT16_C(0) : 0; + d[1] = _a[1] < _b[1] ? ~UINT16_C(0) : 0; + d[2] = _a[2] < _b[2] ? ~UINT16_C(0) : 0; + d[3] = _a[3] < _b[3] ? ~UINT16_C(0) : 0; + d[4] = _a[4] < _b[4] ? ~UINT16_C(0) : 0; + d[5] = _a[5] < _b[5] ? ~UINT16_C(0) : 0; + d[6] = _a[6] < _b[6] ? ~UINT16_C(0) : 0; + d[7] = _a[7] < _b[7] ? ~UINT16_C(0) : 0; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_cmplt_epi16(a, b); + + return VALIDATE_UINT16_M128(c, d); +} + +result_t test_mm_cmplt_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = impl.mTestIntPointer1; + const int32_t *_b = impl.mTestIntPointer2; + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + + int32_t result[4]; + result[0] = _a[0] < _b[0] ? -1 : 0; + result[1] = _a[1] < _b[1] ? -1 : 0; + result[2] = _a[2] < _b[2] ? -1 : 0; + result[3] = _a[3] < _b[3] ? -1 : 0; + + __m128i iret = _mm_cmplt_epi32(a, b); + return VALIDATE_INT32_M128(iret, result); +} + +result_t test_mm_cmplt_epi8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + const int8_t *_b = (const int8_t *) impl.mTestIntPointer2; + int8_t d[16]; + d[0] = (_a[0] < _b[0]) ? ~UINT8_C(0) : 0x00; + d[1] = (_a[1] < _b[1]) ? ~UINT8_C(0) : 0x00; + d[2] = (_a[2] < _b[2]) ? ~UINT8_C(0) : 0x00; + d[3] = (_a[3] < _b[3]) ? ~UINT8_C(0) : 0x00; + d[4] = (_a[4] < _b[4]) ? ~UINT8_C(0) : 0x00; + d[5] = (_a[5] < _b[5]) ? ~UINT8_C(0) : 0x00; + d[6] = (_a[6] < _b[6]) ? ~UINT8_C(0) : 0x00; + d[7] = (_a[7] < _b[7]) ? ~UINT8_C(0) : 0x00; + d[8] = (_a[8] < _b[8]) ? ~UINT8_C(0) : 0x00; + d[9] = (_a[9] < _b[9]) ? ~UINT8_C(0) : 0x00; + d[10] = (_a[10] < _b[10]) ? ~UINT8_C(0) : 0x00; + d[11] = (_a[11] < _b[11]) ? ~UINT8_C(0) : 0x00; + d[12] = (_a[12] < _b[12]) ? ~UINT8_C(0) : 0x00; + d[13] = (_a[13] < _b[13]) ? ~UINT8_C(0) : 0x00; + d[14] = (_a[14] < _b[14]) ? ~UINT8_C(0) : 0x00; + d[15] = (_a[15] < _b[15]) ? ~UINT8_C(0) : 0x00; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_cmplt_epi8(a, b); + return VALIDATE_INT8_M128(c, d); +} + +result_t test_mm_cmplt_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + double d0 = (_a[0] < _b[0]) ? ALL_BIT_1_64 : UINT64_C(0); + double d1 = (_a[1] < _b[1]) ? ALL_BIT_1_64 : UINT64_C(0); + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_cmplt_pd(a, b); + + return validateDouble(c, d0, d1); +} + +result_t test_mm_cmplt_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + double *_a = (double *) impl.mTestFloatPointer1; + double *_b = (double *) impl.mTestFloatPointer2; + double d0 = (_a[0] < _b[0]) ? ALL_BIT_1_64 : 0; + double d1 = _a[1]; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_cmplt_sd(a, b); + + return validateDouble(c, d0, d1); +} + +result_t test_mm_cmpneq_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + double d0 = (_a[0] != _b[0]) ? ALL_BIT_1_64 : UINT64_C(0); + double d1 = (_a[1] != _b[1]) ? ALL_BIT_1_64 : UINT64_C(0); + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_cmpneq_pd(a, b); + + return validateDouble(c, d0, d1); +} + +result_t test_mm_cmpneq_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + double *_a = (double *) impl.mTestFloatPointer1; + double *_b = (double *) impl.mTestFloatPointer2; + double d0 = (_a[0] != _b[0]) ? ALL_BIT_1_64 : UINT64_C(0); + double d1 = _a[1]; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_cmpneq_sd(a, b); + + return validateDouble(c, d0, d1); +} + +result_t test_mm_cmpnge_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + double d0 = !(_a[0] >= _b[0]) ? ALL_BIT_1_64 : 0; + double d1 = !(_a[1] >= _b[1]) ? ALL_BIT_1_64 : 0; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_cmpnge_pd(a, b); + + return validateDouble(c, d0, d1); +} + +result_t test_mm_cmpnge_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + double *_a = (double *) impl.mTestFloatPointer1; + double *_b = (double *) impl.mTestFloatPointer2; + double d0 = !(_a[0] >= _b[0]) ? ALL_BIT_1_64 : 0; + double d1 = _a[1]; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_cmpnge_sd(a, b); + + return validateDouble(c, d0, d1); +} + +result_t test_mm_cmpngt_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + double d0 = !(_a[0] > _b[0]) ? ALL_BIT_1_64 : 0; + double d1 = !(_a[1] > _b[1]) ? ALL_BIT_1_64 : 0; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_cmpngt_pd(a, b); + + return validateDouble(c, d0, d1); +} + +result_t test_mm_cmpngt_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + double *_a = (double *) impl.mTestFloatPointer1; + double *_b = (double *) impl.mTestFloatPointer2; + double d0 = !(_a[0] > _b[0]) ? ALL_BIT_1_64 : 0; + double d1 = _a[1]; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_cmpngt_sd(a, b); + + return validateDouble(c, d0, d1); +} + +result_t test_mm_cmpnle_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + double d0 = !(_a[0] <= _b[0]) ? ALL_BIT_1_64 : 0; + double d1 = !(_a[1] <= _b[1]) ? ALL_BIT_1_64 : 0; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_cmpnle_pd(a, b); + + return validateDouble(c, d0, d1); +} + +result_t test_mm_cmpnle_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + double *_a = (double *) impl.mTestFloatPointer1; + double *_b = (double *) impl.mTestFloatPointer2; + double d0 = !(_a[0] <= _b[0]) ? ALL_BIT_1_64 : 0; + double d1 = _a[1]; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_cmpnle_sd(a, b); + + return validateDouble(c, d0, d1); +} + +result_t test_mm_cmpnlt_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + double d0 = !(_a[0] < _b[0]) ? ALL_BIT_1_64 : 0; + double d1 = !(_a[1] < _b[1]) ? ALL_BIT_1_64 : 0; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_cmpnlt_pd(a, b); + + return validateDouble(c, d0, d1); +} + +result_t test_mm_cmpnlt_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + double *_a = (double *) impl.mTestFloatPointer1; + double *_b = (double *) impl.mTestFloatPointer2; + double d0 = !(_a[0] < _b[0]) ? ALL_BIT_1_64 : 0; + double d1 = _a[1]; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_cmpnlt_sd(a, b); + + return validateDouble(c, d0, d1); +} + +result_t test_mm_cmpord_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + __m128d a = _mm_load_pd(_a); + __m128d b = _mm_load_pd(_b); + + double result[2]; + + for (uint32_t i = 0; i < 2; i++) { + result[i] = cmp_noNaN(_a[i], _b[i]); + } + + __m128d ret = _mm_cmpord_pd(a, b); + + return validateDouble(ret, result[0], result[1]); +} + +result_t test_mm_cmpord_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + __m128d a = _mm_load_pd(_a); + __m128d b = _mm_load_pd(_b); + + double c0 = cmp_noNaN(_a[0], _b[0]); + double c1 = _a[1]; + + __m128d ret = _mm_cmpord_sd(a, b); + return validateDouble(ret, c0, c1); +} + +result_t test_mm_cmpunord_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + __m128d a = _mm_load_pd(_a); + __m128d b = _mm_load_pd(_b); + + double result[2]; + result[0] = cmp_hasNaN(_a[0], _b[0]); + result[1] = cmp_hasNaN(_a[1], _b[1]); + + __m128d ret = _mm_cmpunord_pd(a, b); + return validateDouble(ret, result[0], result[1]); +} + +result_t test_mm_cmpunord_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + double *_a = (double *) impl.mTestFloatPointer1; + double *_b = (double *) impl.mTestFloatPointer2; + __m128d a = _mm_load_pd(_a); + __m128d b = _mm_load_pd(_b); + + double result[2]; + result[0] = cmp_hasNaN(_a[0], _b[0]); + result[1] = _a[1]; + + __m128d ret = _mm_cmpunord_sd(a, b); + return validateDouble(ret, result[0], result[1]); +} + +result_t test_mm_comieq_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + // FIXME: + // The GCC does not implement _mm_comieq_sd correctly. + // See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98612 for more + // information. +#if defined(__GNUC__) && !defined(__clang__) + return TEST_UNIMPL; +#else + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + int32_t _c = (_a[0] == _b[0]) ? 1 : 0; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + int32_t c = _mm_comieq_sd(a, b); + + ASSERT_RETURN(c == _c); + return TEST_SUCCESS; +#endif +} + +result_t test_mm_comige_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + int32_t _c = (_a[0] >= _b[0]) ? 1 : 0; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + int32_t c = _mm_comige_sd(a, b); + + ASSERT_RETURN(c == _c); + return TEST_SUCCESS; +} + +result_t test_mm_comigt_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + int32_t _c = (_a[0] > _b[0]) ? 1 : 0; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + int32_t c = _mm_comigt_sd(a, b); + + ASSERT_RETURN(c == _c); + return TEST_SUCCESS; +} + +result_t test_mm_comile_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + // FIXME: + // The GCC does not implement _mm_comile_sd correctly. + // See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98612 for more + // information. +#if defined(__GNUC__) && !defined(__clang__) + return TEST_UNIMPL; +#else + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + int32_t _c = (_a[0] <= _b[0]) ? 1 : 0; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + int32_t c = _mm_comile_sd(a, b); + + ASSERT_RETURN(c == _c); + return TEST_SUCCESS; +#endif +} + +result_t test_mm_comilt_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + // FIXME: + // The GCC does not implement _mm_comilt_sd correctly. + // See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98612 for more + // information. +#if defined(__GNUC__) && !defined(__clang__) + return TEST_UNIMPL; +#else + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + int32_t _c = (_a[0] < _b[0]) ? 1 : 0; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + int32_t c = _mm_comilt_sd(a, b); + + ASSERT_RETURN(c == _c); + return TEST_SUCCESS; +#endif +} + +result_t test_mm_comineq_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + // FIXME: + // The GCC does not implement _mm_comineq_sd correctly. + // See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98612 for more + // information. +#if defined(__GNUC__) && !defined(__clang__) + return TEST_UNIMPL; +#else + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + int32_t _c = (_a[0] != _b[0]) ? 1 : 0; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + int32_t c = _mm_comineq_sd(a, b); + + ASSERT_RETURN(c == _c); + return TEST_SUCCESS; +#endif +} + +result_t test_mm_cvtepi32_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = impl.mTestIntPointer1; + __m128i a = load_m128i(_a); + double trun[2] = {(double) _a[0], (double) _a[1]}; + + __m128d ret = _mm_cvtepi32_pd(a); + return validateDouble(ret, trun[0], trun[1]); +} + +result_t test_mm_cvtepi32_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = impl.mTestIntPointer1; + __m128i a = load_m128i(_a); + float trun[4]; + for (uint32_t i = 0; i < 4; i++) { + trun[i] = (float) _a[i]; + } + + __m128 ret = _mm_cvtepi32_ps(a); + return validateFloat(ret, trun[0], trun[1], trun[2], trun[3]); +} + +OPTNONE result_t test_mm_cvtpd_epi32(const SSE2NEONTestImpl &impl, + uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + int32_t d[2] = {}; + + switch (iter & 0x3) { + case 0: + _MM_SET_ROUNDING_MODE(_MM_ROUND_NEAREST); + d[0] = (int32_t) (bankersRounding(_a[0])); + d[1] = (int32_t) (bankersRounding(_a[1])); + break; + case 1: + _MM_SET_ROUNDING_MODE(_MM_ROUND_DOWN); + d[0] = (int32_t) (floor(_a[0])); + d[1] = (int32_t) (floor(_a[1])); + break; + case 2: + _MM_SET_ROUNDING_MODE(_MM_ROUND_UP); + d[0] = (int32_t) (ceil(_a[0])); + d[1] = (int32_t) (ceil(_a[1])); + break; + case 3: + _MM_SET_ROUNDING_MODE(_MM_ROUND_TOWARD_ZERO); + d[0] = (int32_t) (_a[0]); + d[1] = (int32_t) (_a[1]); + break; + } + +#if defined(__ARM_FEATURE_FRINT) && !defined(__clang__) + /* Floats that cannot fit into 32-bits should instead return + * indefinite integer value (INT32_MIN). This behaviour is + * currently only emulated when using the round-to-integral + * instructions. */ + for (int i = 0; i < 2; i++) { + if (_a[i] > (float) INT32_MAX || _a[i] < (float) INT32_MIN) + d[i] = INT32_MIN; + } +#endif + + __m128d a = load_m128d(_a); + __m128i ret = _mm_cvtpd_epi32(a); + + return validateInt32(ret, d[0], d[1], 0, 0); +} + +OPTNONE result_t test_mm_cvtpd_pi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + int32_t d[2] = {}; + + switch (iter & 0x3) { + case 0: + _MM_SET_ROUNDING_MODE(_MM_ROUND_NEAREST); + d[0] = (int32_t) (bankersRounding(_a[0])); + d[1] = (int32_t) (bankersRounding(_a[1])); + break; + case 1: + _MM_SET_ROUNDING_MODE(_MM_ROUND_DOWN); + d[0] = (int32_t) (floor(_a[0])); + d[1] = (int32_t) (floor(_a[1])); + break; + case 2: + _MM_SET_ROUNDING_MODE(_MM_ROUND_UP); + d[0] = (int32_t) (ceil(_a[0])); + d[1] = (int32_t) (ceil(_a[1])); + break; + case 3: + _MM_SET_ROUNDING_MODE(_MM_ROUND_TOWARD_ZERO); + d[0] = (int32_t) (_a[0]); + d[1] = (int32_t) (_a[1]); + break; + } + + __m128d a = load_m128d(_a); + __m64 ret = _mm_cvtpd_pi32(a); + + return VALIDATE_INT32_M64(ret, d); +} + +result_t test_mm_cvtpd_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + float f0 = (float) _a[0]; + float f1 = (float) _a[1]; + const __m128d a = load_m128d(_a); + + __m128 r = _mm_cvtpd_ps(a); + + return validateFloat(r, f0, f1, 0, 0); +} + +result_t test_mm_cvtpi32_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = impl.mTestIntPointer1; + __m64 a = load_m64(_a); + + double trun[2] = {(double) _a[0], (double) _a[1]}; + + __m128d ret = _mm_cvtpi32_pd(a); + + return validateDouble(ret, trun[0], trun[1]); +} + +result_t test_mm_cvtps_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + __m128 a = load_m128(_a); + int32_t d[4]; + switch (iter & 0x3) { + case 0: + _MM_SET_ROUNDING_MODE(_MM_ROUND_NEAREST); + for (uint32_t i = 0; i < 4; i++) { + d[i] = (int32_t) (bankersRounding(_a[i])); + } + break; + case 1: + _MM_SET_ROUNDING_MODE(_MM_ROUND_DOWN); + for (uint32_t i = 0; i < 4; i++) { + d[i] = (int32_t) (floorf(_a[i])); + } + break; + case 2: + _MM_SET_ROUNDING_MODE(_MM_ROUND_UP); + for (uint32_t i = 0; i < 4; i++) { + d[i] = (int32_t) (ceilf(_a[i])); + } + break; + case 3: + _MM_SET_ROUNDING_MODE(_MM_ROUND_TOWARD_ZERO); + for (uint32_t i = 0; i < 4; i++) { + d[i] = (int32_t) (_a[i]); + } + break; + } + + __m128i ret = _mm_cvtps_epi32(a); + return VALIDATE_INT32_M128(ret, d); +} + +result_t test_mm_cvtps_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + double d0 = (double) _a[0]; + double d1 = (double) _a[1]; + const __m128 a = load_m128(_a); + + __m128d r = _mm_cvtps_pd(a); + + return validateDouble(r, d0, d1); +} + +result_t test_mm_cvtsd_f64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + + double d = _a[0]; + + const __m128d *a = (const __m128d *) _a; + double r = _mm_cvtsd_f64(*a); + + return r == d ? TEST_SUCCESS : TEST_FAIL; +} + +result_t test_mm_cvtsd_si32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + int32_t d; + + switch (iter & 0x3) { + case 0: + _MM_SET_ROUNDING_MODE(_MM_ROUND_NEAREST); + d = (int32_t) (bankersRounding(_a[0])); + break; + case 1: + _MM_SET_ROUNDING_MODE(_MM_ROUND_DOWN); + d = (int32_t) (floor(_a[0])); + break; + case 2: + _MM_SET_ROUNDING_MODE(_MM_ROUND_UP); + d = (int32_t) (ceil(_a[0])); + break; + case 3: + _MM_SET_ROUNDING_MODE(_MM_ROUND_TOWARD_ZERO); + d = (int32_t) (_a[0]); + break; + } + + __m128d a = load_m128d(_a); + int32_t ret = _mm_cvtsd_si32(a); + + return ret == d ? TEST_SUCCESS : TEST_FAIL; +} + +result_t test_mm_cvtsd_si64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + int64_t d = 0; + + switch (iter & 0x3) { + case 0: + _MM_SET_ROUNDING_MODE(_MM_ROUND_NEAREST); + d = (int64_t) (bankersRounding(_a[0])); + break; + case 1: + _MM_SET_ROUNDING_MODE(_MM_ROUND_DOWN); + d = (int64_t) (floor(_a[0])); + break; + case 2: + _MM_SET_ROUNDING_MODE(_MM_ROUND_UP); + d = (int64_t) (ceil(_a[0])); + break; + case 3: + _MM_SET_ROUNDING_MODE(_MM_ROUND_TOWARD_ZERO); + d = (int64_t) (_a[0]); + break; + } + + __m128d a = load_m128d(_a); + int64_t ret = _mm_cvtsd_si64(a); + + return ret == d ? TEST_SUCCESS : TEST_FAIL; +} + +result_t test_mm_cvtsd_si64x(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + return test_mm_cvtsd_si64(impl, iter); +} + +result_t test_mm_cvtsd_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + + float f0 = (float) _b[0]; + float f1 = (float) _a[1]; + float f2 = (float) _a[2]; + float f3 = (float) _a[3]; + + __m128 a = load_m128(_a); + __m128d b = load_m128d(_b); + __m128 c = _mm_cvtsd_ss(a, b); + + return validateFloat(c, f0, f1, f2, f3); +} + +result_t test_mm_cvtsi128_si32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + + int32_t d = _a[0]; + + __m128i a = load_m128i(_a); + int c = _mm_cvtsi128_si32(a); + + return d == c ? TEST_SUCCESS : TEST_FAIL; +} + +result_t test_mm_cvtsi128_si64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int64_t *_a = (const int64_t *) impl.mTestIntPointer1; + + int64_t d = _a[0]; + + __m128i a = load_m128i(_a); + int64_t c = _mm_cvtsi128_si64(a); + + return d == c ? TEST_SUCCESS : TEST_FAIL; +} + +result_t test_mm_cvtsi128_si64x(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + return test_mm_cvtsi128_si64(impl, iter); +} + +result_t test_mm_cvtsi32_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const int32_t b = (const int32_t) impl.mTestInts[iter]; + + __m128d a = load_m128d(_a); + __m128d c = _mm_cvtsi32_sd(a, b); + + return validateDouble(c, b, _a[1]); +} + +result_t test_mm_cvtsi32_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + + int32_t d = _a[0]; + + __m128i c = _mm_cvtsi32_si128(*_a); + + return validateInt32(c, d, 0, 0, 0); +} + +result_t test_mm_cvtsi64_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const int64_t b = (const int64_t) impl.mTestInts[iter]; + + __m128d a = load_m128d(_a); + __m128d c = _mm_cvtsi64_sd(a, b); + + return validateDouble(c, (double) b, _a[1]); +} + +result_t test_mm_cvtsi64_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int64_t *_a = (const int64_t *) impl.mTestIntPointer1; + + int64_t d = _a[0]; + + __m128i c = _mm_cvtsi64_si128(*_a); + + return validateInt64(c, d, 0); +} + +result_t test_mm_cvtsi64x_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + return test_mm_cvtsi64_sd(impl, iter); +} + +result_t test_mm_cvtsi64x_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + return test_mm_cvtsi64_si128(impl, iter); +} + +result_t test_mm_cvtss_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + double d0 = double(_b[0]); + double d1 = _a[1]; + + __m128d a = load_m128d(_a); + __m128 b = load_m128(_b); + __m128d c = _mm_cvtss_sd(a, b); + return validateDouble(c, d0, d1); +} + +result_t test_mm_cvttpd_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + + __m128d a = load_m128d(_a); + int32_t d0 = (int32_t) (_a[0]); + int32_t d1 = (int32_t) (_a[1]); + + __m128i ret = _mm_cvttpd_epi32(a); + return validateInt32(ret, d0, d1, 0, 0); +} + +OPTNONE result_t test_mm_cvttpd_pi32(const SSE2NEONTestImpl &impl, + uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + + __m128d a = load_m128d(_a); + int32_t d0 = (int32_t) (_a[0]); + int32_t d1 = (int32_t) (_a[1]); + + __m64 ret = _mm_cvttpd_pi32(a); + return validateInt32(ret, d0, d1); +} + +result_t test_mm_cvttps_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + __m128 a = load_m128(_a); + int32_t trun[4]; + for (uint32_t i = 0; i < 4; i++) { + trun[i] = (int32_t) _a[i]; + } + + __m128i ret = _mm_cvttps_epi32(a); + return VALIDATE_INT32_M128(ret, trun); +} + +result_t test_mm_cvttsd_si32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + + __m128d a = _mm_load_sd(_a); + int32_t ret = _mm_cvttsd_si32(a); + + return ret == (int32_t) _a[0] ? TEST_SUCCESS : TEST_FAIL; +} + +result_t test_mm_cvttsd_si64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + + __m128d a = _mm_load_sd(_a); + int64_t ret = _mm_cvttsd_si64(a); + + return ret == (int64_t) _a[0] ? TEST_SUCCESS : TEST_FAIL; +} + +result_t test_mm_cvttsd_si64x(const SSE2NEONTestImpl &impl, uint32_t iter) +{ +#if defined(__clang__) + // The intrinsic _mm_cvttsd_si64x() does not exist in Clang + return TEST_UNIMPL; +#else + const double *_a = (const double *) impl.mTestFloatPointer1; + + __m128d a = _mm_load_sd(_a); + int64_t ret = _mm_cvttsd_si64x(a); + + return ret == (int64_t) _a[0] ? TEST_SUCCESS : TEST_FAIL; +#endif +} + +result_t test_mm_div_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + double d0 = 0.0, d1 = 0.0; + + if (_b[0] != 0.0) + d0 = _a[0] / _b[0]; + if (_b[1] != 0.0) + d1 = _a[1] / _b[1]; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_div_pd(a, b); + return validateDouble(c, d0, d1); +} + +result_t test_mm_div_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + + double d0 = _a[0] / _b[0]; + double d1 = _a[1]; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + + __m128d c = _mm_div_sd(a, b); + + return validateDouble(c, d0, d1); +} + +result_t test_mm_extract_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + uint16_t *_a = (uint16_t *) impl.mTestIntPointer1; + const int idx = iter & 0x7; + __m128i a = load_m128i(_a); + int c = 0; + switch (idx) { + case 0: + c = _mm_extract_epi16(a, 0); + break; + case 1: + c = _mm_extract_epi16(a, 1); + break; + case 2: + c = _mm_extract_epi16(a, 2); + break; + case 3: + c = _mm_extract_epi16(a, 3); + break; + case 4: + c = _mm_extract_epi16(a, 4); + break; + case 5: + c = _mm_extract_epi16(a, 5); + break; + case 6: + c = _mm_extract_epi16(a, 6); + break; + case 7: + c = _mm_extract_epi16(a, 7); + break; + } + + ASSERT_RETURN(c == *(_a + idx)); + return TEST_SUCCESS; +} + +result_t test_mm_insert_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t insert = (int16_t) *impl.mTestIntPointer2; + +#define TEST_IMPL(IDX) \ + int16_t d##IDX[8]; \ + for (int i = 0; i < 8; i++) { \ + d##IDX[i] = _a[i]; \ + } \ + d##IDX[IDX] = insert; \ + \ + __m128i a##IDX = load_m128i(_a); \ + __m128i b##IDX = _mm_insert_epi16(a##IDX, insert, IDX); \ + CHECK_RESULT(VALIDATE_INT16_M128(b##IDX, d##IDX)) + + IMM_8_ITER +#undef TEST_IMPL + + return TEST_SUCCESS; +} + +result_t test_mm_lfence(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + /* FIXME: Assume that memory barriers always function as intended. */ + return TEST_SUCCESS; +} + +result_t test_mm_load_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *p = (const double *) impl.mTestFloatPointer1; + __m128d a = _mm_load_pd(p); + return validateDouble(a, p[0], p[1]); +} + +result_t test_mm_load_pd1(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *p = (const double *) impl.mTestFloatPointer1; + __m128d a = _mm_load_pd1(p); + return validateDouble(a, p[0], p[0]); +} + +result_t test_mm_load_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *p = (const double *) impl.mTestFloatPointer1; + __m128d a = _mm_load_sd(p); + return validateDouble(a, p[0], 0); +} + +result_t test_mm_load_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *addr = impl.mTestIntPointer1; + + __m128i ret = _mm_load_si128((const __m128i *) addr); + + return VALIDATE_INT32_M128(ret, addr); +} + +result_t test_mm_load1_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *addr = (const double *) impl.mTestFloatPointer1; + + __m128d ret = _mm_load1_pd(addr); + + return validateDouble(ret, addr[0], addr[0]); +} + +result_t test_mm_loadh_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *addr = (const double *) impl.mTestFloatPointer2; + + __m128d a = load_m128d(_a); + __m128d ret = _mm_loadh_pd(a, addr); + + return validateDouble(ret, _a[0], addr[0]); +} + +result_t test_mm_loadl_epi64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int64_t *addr = (const int64_t *) impl.mTestIntPointer1; + + __m128i ret = _mm_loadl_epi64((const __m128i *) addr); + + return validateInt64(ret, addr[0], 0); +} + +result_t test_mm_loadl_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *addr = (const double *) impl.mTestFloatPointer2; + + __m128d a = load_m128d(_a); + __m128d ret = _mm_loadl_pd(a, addr); + + return validateDouble(ret, addr[0], _a[1]); +} + +result_t test_mm_loadr_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *addr = (const double *) impl.mTestFloatPointer1; + + __m128d ret = _mm_loadr_pd(addr); + + return validateDouble(ret, addr[1], addr[0]); +} + +result_t test_mm_loadu_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *p = (const double *) impl.mTestFloatPointer1; + __m128d a = _mm_loadu_pd(p); + return validateDouble(a, p[0], p[1]); +} + +result_t test_mm_loadu_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const unaligned_int32_t *_a = + (const unaligned_int32_t *) (impl.mTestUnalignedInts + 1); + __m128i c = _mm_loadu_si128((const __m128i *) _a); + return VALIDATE_INT32_M128(c, _a); +} + +result_t test_mm_loadu_si32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + // The GCC version before 11 does not implement intrinsic function + // _mm_loadu_si32. Check https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95483 + // for more information. +#if (defined(__GNUC__) && !defined(__clang__)) && (__GNUC__ <= 10) + return TEST_UNIMPL; +#else + const unaligned_int32_t *addr = + (const unaligned_int32_t *) (impl.mTestUnalignedInts + 1); + + __m128i ret = _mm_loadu_si32((const void *) addr); + + return validateInt32(ret, addr[0], 0, 0, 0); +#endif +} + +result_t test_mm_madd_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer2; + int32_t d0 = (int32_t) _a[0] * _b[0]; + int32_t d1 = (int32_t) _a[1] * _b[1]; + int32_t d2 = (int32_t) _a[2] * _b[2]; + int32_t d3 = (int32_t) _a[3] * _b[3]; + int32_t d4 = (int32_t) _a[4] * _b[4]; + int32_t d5 = (int32_t) _a[5] * _b[5]; + int32_t d6 = (int32_t) _a[6] * _b[6]; + int32_t d7 = (int32_t) _a[7] * _b[7]; + + int32_t e[4]; + e[0] = d0 + d1; + e[1] = d2 + d3; + e[2] = d4 + d5; + e[3] = d6 + d7; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_madd_epi16(a, b); + return VALIDATE_INT32_M128(c, e); +} + +result_t test_mm_maskmoveu_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint8_t *_a = (const uint8_t *) impl.mTestIntPointer1; + const uint8_t *_mask = (const uint8_t *) impl.mTestIntPointer2; + char mem_addr[16]; + + __m128i a = load_m128i(_a); + __m128i mask = load_m128i(_mask); + _mm_maskmoveu_si128(a, mask, mem_addr); + + for (int i = 0; i < 16; i++) { + if (_mask[i] >> 7) { + ASSERT_RETURN(_a[i] == (uint8_t) mem_addr[i]); + } + } + + return TEST_SUCCESS; +} + +result_t test_mm_max_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ +#if (__GNUC__ == 8) || (__GNUC__ == 9 && __GNUC_MINOR__ == 2) +#error Using older gcc versions can lead to an operand mismatch error. This issue affects all versions prior to gcc 10. +#else + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer2; + int16_t d[8]; + d[0] = _a[0] > _b[0] ? _a[0] : _b[0]; + d[1] = _a[1] > _b[1] ? _a[1] : _b[1]; + d[2] = _a[2] > _b[2] ? _a[2] : _b[2]; + d[3] = _a[3] > _b[3] ? _a[3] : _b[3]; + d[4] = _a[4] > _b[4] ? _a[4] : _b[4]; + d[5] = _a[5] > _b[5] ? _a[5] : _b[5]; + d[6] = _a[6] > _b[6] ? _a[6] : _b[6]; + d[7] = _a[7] > _b[7] ? _a[7] : _b[7]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + + __m128i c = _mm_max_epi16(a, b); + return VALIDATE_INT16_M128(c, d); +#endif +} + +result_t test_mm_max_epu8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ +#if (__GNUC__ == 8) || (__GNUC__ == 9 && __GNUC_MINOR__ == 2) +#error Using older gcc versions can lead to an operand mismatch error. This issue affects all versions prior to gcc 10. +#else + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + const int8_t *_b = (const int8_t *) impl.mTestIntPointer2; + uint8_t d[16]; + d[0] = ((uint8_t) _a[0] > (uint8_t) _b[0]) ? ((uint8_t) _a[0]) + : ((uint8_t) _b[0]); + d[1] = ((uint8_t) _a[1] > (uint8_t) _b[1]) ? ((uint8_t) _a[1]) + : ((uint8_t) _b[1]); + d[2] = ((uint8_t) _a[2] > (uint8_t) _b[2]) ? ((uint8_t) _a[2]) + : ((uint8_t) _b[2]); + d[3] = ((uint8_t) _a[3] > (uint8_t) _b[3]) ? ((uint8_t) _a[3]) + : ((uint8_t) _b[3]); + d[4] = ((uint8_t) _a[4] > (uint8_t) _b[4]) ? ((uint8_t) _a[4]) + : ((uint8_t) _b[4]); + d[5] = ((uint8_t) _a[5] > (uint8_t) _b[5]) ? ((uint8_t) _a[5]) + : ((uint8_t) _b[5]); + d[6] = ((uint8_t) _a[6] > (uint8_t) _b[6]) ? ((uint8_t) _a[6]) + : ((uint8_t) _b[6]); + d[7] = ((uint8_t) _a[7] > (uint8_t) _b[7]) ? ((uint8_t) _a[7]) + : ((uint8_t) _b[7]); + d[8] = ((uint8_t) _a[8] > (uint8_t) _b[8]) ? ((uint8_t) _a[8]) + : ((uint8_t) _b[8]); + d[9] = ((uint8_t) _a[9] > (uint8_t) _b[9]) ? ((uint8_t) _a[9]) + : ((uint8_t) _b[9]); + d[10] = ((uint8_t) _a[10] > (uint8_t) _b[10]) ? ((uint8_t) _a[10]) + : ((uint8_t) _b[10]); + d[11] = ((uint8_t) _a[11] > (uint8_t) _b[11]) ? ((uint8_t) _a[11]) + : ((uint8_t) _b[11]); + d[12] = ((uint8_t) _a[12] > (uint8_t) _b[12]) ? ((uint8_t) _a[12]) + : ((uint8_t) _b[12]); + d[13] = ((uint8_t) _a[13] > (uint8_t) _b[13]) ? ((uint8_t) _a[13]) + : ((uint8_t) _b[13]); + d[14] = ((uint8_t) _a[14] > (uint8_t) _b[14]) ? ((uint8_t) _a[14]) + : ((uint8_t) _b[14]); + d[15] = ((uint8_t) _a[15] > (uint8_t) _b[15]) ? ((uint8_t) _a[15]) + : ((uint8_t) _b[15]); + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_max_epu8(a, b); + return VALIDATE_INT8_M128(c, d); +#endif +} + +result_t test_mm_max_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + + double f0 = _a[0] > _b[0] ? _a[0] : _b[0]; + double f1 = _a[1] > _b[1] ? _a[1] : _b[1]; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_max_pd(a, b); + + return validateDouble(c, f0, f1); +} + +result_t test_mm_max_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + double d0 = _a[0] > _b[0] ? _a[0] : _b[0]; + double d1 = _a[1]; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_max_sd(a, b); + + return validateDouble(c, d0, d1); +} + +result_t test_mm_mfence(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + /* FIXME: Assume that memory barriers always function as intended. */ + return TEST_SUCCESS; +} + +result_t test_mm_min_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer2; + int16_t d[8]; + d[0] = _a[0] < _b[0] ? _a[0] : _b[0]; + d[1] = _a[1] < _b[1] ? _a[1] : _b[1]; + d[2] = _a[2] < _b[2] ? _a[2] : _b[2]; + d[3] = _a[3] < _b[3] ? _a[3] : _b[3]; + d[4] = _a[4] < _b[4] ? _a[4] : _b[4]; + d[5] = _a[5] < _b[5] ? _a[5] : _b[5]; + d[6] = _a[6] < _b[6] ? _a[6] : _b[6]; + d[7] = _a[7] < _b[7] ? _a[7] : _b[7]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_min_epi16(a, b); + return VALIDATE_INT16_M128(c, d); +} + +result_t test_mm_min_epu8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + const int8_t *_b = (const int8_t *) impl.mTestIntPointer2; + uint8_t d[16]; + d[0] = + ((uint8_t) _a[0] < (uint8_t) _b[0]) ? (uint8_t) _a[0] : (uint8_t) _b[0]; + d[1] = + ((uint8_t) _a[1] < (uint8_t) _b[1]) ? (uint8_t) _a[1] : (uint8_t) _b[1]; + d[2] = + ((uint8_t) _a[2] < (uint8_t) _b[2]) ? (uint8_t) _a[2] : (uint8_t) _b[2]; + d[3] = + ((uint8_t) _a[3] < (uint8_t) _b[3]) ? (uint8_t) _a[3] : (uint8_t) _b[3]; + d[4] = + ((uint8_t) _a[4] < (uint8_t) _b[4]) ? (uint8_t) _a[4] : (uint8_t) _b[4]; + d[5] = + ((uint8_t) _a[5] < (uint8_t) _b[5]) ? (uint8_t) _a[5] : (uint8_t) _b[5]; + d[6] = + ((uint8_t) _a[6] < (uint8_t) _b[6]) ? (uint8_t) _a[6] : (uint8_t) _b[6]; + d[7] = + ((uint8_t) _a[7] < (uint8_t) _b[7]) ? (uint8_t) _a[7] : (uint8_t) _b[7]; + d[8] = + ((uint8_t) _a[8] < (uint8_t) _b[8]) ? (uint8_t) _a[8] : (uint8_t) _b[8]; + d[9] = + ((uint8_t) _a[9] < (uint8_t) _b[9]) ? (uint8_t) _a[9] : (uint8_t) _b[9]; + d[10] = ((uint8_t) _a[10] < (uint8_t) _b[10]) ? (uint8_t) _a[10] + : (uint8_t) _b[10]; + d[11] = ((uint8_t) _a[11] < (uint8_t) _b[11]) ? (uint8_t) _a[11] + : (uint8_t) _b[11]; + d[12] = ((uint8_t) _a[12] < (uint8_t) _b[12]) ? (uint8_t) _a[12] + : (uint8_t) _b[12]; + d[13] = ((uint8_t) _a[13] < (uint8_t) _b[13]) ? (uint8_t) _a[13] + : (uint8_t) _b[13]; + d[14] = ((uint8_t) _a[14] < (uint8_t) _b[14]) ? (uint8_t) _a[14] + : (uint8_t) _b[14]; + d[15] = ((uint8_t) _a[15] < (uint8_t) _b[15]) ? (uint8_t) _a[15] + : (uint8_t) _b[15]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_min_epu8(a, b); + return VALIDATE_INT8_M128(c, d); +} + +result_t test_mm_min_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + double f0 = _a[0] < _b[0] ? _a[0] : _b[0]; + double f1 = _a[1] < _b[1] ? _a[1] : _b[1]; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + + __m128d c = _mm_min_pd(a, b); + return validateDouble(c, f0, f1); +} + +result_t test_mm_min_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + double d0 = _a[0] < _b[0] ? _a[0] : _b[0]; + double d1 = _a[1]; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_min_sd(a, b); + + return validateDouble(c, d0, d1); +} + +result_t test_mm_move_epi64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int64_t *_a = (const int64_t *) impl.mTestIntPointer1; + + int64_t d0 = _a[0]; + int64_t d1 = 0; + + __m128i a = load_m128i(_a); + __m128i c = _mm_move_epi64(a); + + return validateInt64(c, d0, d1); +} + +result_t test_mm_move_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + + double result[2]; + result[0] = _b[0]; + result[1] = _a[1]; + + __m128d ret = _mm_move_sd(a, b); + return validateDouble(ret, result[0], result[1]); +} + +result_t test_mm_movemask_epi8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = impl.mTestIntPointer1; + __m128i a = load_m128i(_a); + + const uint8_t *ip = (const uint8_t *) _a; + int ret = 0; + uint32_t mask = 1; + for (uint32_t i = 0; i < 16; i++) { + if (ip[i] & 0x80) { + ret |= mask; + } + mask = mask << 1; + } + int test = _mm_movemask_epi8(a); + ASSERT_RETURN(test == ret); + return TEST_SUCCESS; +} + +result_t test_mm_movemask_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + int _c = 0; + _c |= (int) (((*(const uint64_t *) _a) >> 63) & 0x1); + _c |= (((*(const uint64_t *) (_a + 1)) >> 62) & 0x2); + + __m128d a = load_m128d(_a); + int c = _mm_movemask_pd(a); + + ASSERT_RETURN(c == _c); + return TEST_SUCCESS; +} + +result_t test_mm_movepi64_pi64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int64_t *_a = (const int64_t *) impl.mTestIntPointer1; + + int64_t d0 = _a[0]; + + __m128i a = load_m128i(_a); + __m64 c = _mm_movepi64_pi64(a); + + return validateInt64(c, d0); +} + +result_t test_mm_movpi64_epi64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int64_t *_a = (const int64_t *) impl.mTestIntPointer1; + + int64_t d0 = _a[0]; + + __m64 a = load_m64(_a); + __m128i c = _mm_movpi64_epi64(a); + + return validateInt64(c, d0, 0); +} + +result_t test_mm_mul_epu32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint32_t *_a = (const uint32_t *) impl.mTestIntPointer1; + const uint32_t *_b = (const uint32_t *) impl.mTestIntPointer2; + uint64_t dx = (uint64_t) (_a[0]) * (uint64_t) (_b[0]); + uint64_t dy = (uint64_t) (_a[2]) * (uint64_t) (_b[2]); + + __m128i a = _mm_loadu_si128((const __m128i *) _a); + __m128i b = _mm_loadu_si128((const __m128i *) _b); + __m128i r = _mm_mul_epu32(a, b); + return validateUInt64(r, dx, dy); +} + +result_t test_mm_mul_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + double d0 = _a[0] * _b[0]; + double d1 = _a[1] * _b[1]; + + __m128d a = _mm_load_pd(_a); + __m128d b = _mm_load_pd(_b); + __m128d c = _mm_mul_pd(a, b); + return validateDouble(c, d0, d1); +} + +result_t test_mm_mul_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + double dx = _a[0] * _b[0]; + double dy = _a[1]; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_mul_sd(a, b); + return validateDouble(c, dx, dy); +} + +result_t test_mm_mul_su32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint32_t *_a = (const uint32_t *) impl.mTestIntPointer1; + const uint32_t *_b = (const uint32_t *) impl.mTestIntPointer2; + + uint64_t u = (uint64_t) (_a[0]) * (uint64_t) (_b[0]); + + __m64 a = load_m64(_a); + __m64 b = load_m64(_b); + __m64 r = _mm_mul_su32(a, b); + + return validateUInt64(r, u); +} + +result_t test_mm_mulhi_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer2; + int16_t d[8]; + for (uint32_t i = 0; i < 8; i++) { + int32_t m = (int32_t) _a[i] * (int32_t) _b[i]; + d[i] = (int16_t) (m >> 16); + } + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_mulhi_epi16(a, b); + return VALIDATE_INT16_M128(c, d); +} + +result_t test_mm_mulhi_epu16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint16_t *_a = (const uint16_t *) impl.mTestIntPointer1; + const uint16_t *_b = (const uint16_t *) impl.mTestIntPointer2; + uint16_t d[8]; + for (uint32_t i = 0; i < 8; i++) { + uint32_t m = (uint32_t) _a[i] * (uint32_t) _b[i]; + d[i] = (uint16_t) (m >> 16); + } + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_mulhi_epu16(a, b); + return VALIDATE_INT16_M128(c, d); +} + +result_t test_mm_mullo_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer2; + int16_t d[8]; + d[0] = _a[0] * _b[0]; + d[1] = _a[1] * _b[1]; + d[2] = _a[2] * _b[2]; + d[3] = _a[3] * _b[3]; + d[4] = _a[4] * _b[4]; + d[5] = _a[5] * _b[5]; + d[6] = _a[6] * _b[6]; + d[7] = _a[7] * _b[7]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_mullo_epi16(a, b); + return VALIDATE_INT16_M128(c, d); +} + +result_t test_mm_or_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int64_t *_a = (const int64_t *) impl.mTestFloatPointer1; + const int64_t *_b = (const int64_t *) impl.mTestFloatPointer2; + double d0 = sse2neon_tool_recast_f64(_a[0] | _b[0]); + double d1 = sse2neon_tool_recast_f64(_a[1] | _b[1]); + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_or_pd(a, b); + + return validateDouble(c, d0, d1); +} + +result_t test_mm_or_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = impl.mTestIntPointer1; + const int32_t *_b = impl.mTestIntPointer2; + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128 fc = _mm_or_ps(_mm_castsi128_ps(a), _mm_castsi128_ps(b)); + __m128i c = _mm_castps_si128(fc); + // now for the assertion... + const uint32_t *ia = (const uint32_t *) &a; + const uint32_t *ib = (const uint32_t *) &b; + uint32_t r[4]; + r[0] = ia[0] | ib[0]; + r[1] = ia[1] | ib[1]; + r[2] = ia[2] | ib[2]; + r[3] = ia[3] | ib[3]; + __m128i ret = do_mm_set_epi32(r[3], r[2], r[1], r[0]); + result_t res = VALIDATE_INT32_M128(c, r); + if (res) { + res = VALIDATE_INT32_M128(ret, r); + } + return res; +} + +result_t test_mm_packs_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + int8_t max = INT8_MAX; + int8_t min = INT8_MIN; + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer2; + + int8_t d[16]; + for (int i = 0; i < 8; i++) { + if (_a[i] > max) + d[i] = max; + else if (_a[i] < min) + d[i] = min; + else + d[i] = (int8_t) _a[i]; + } + for (int i = 0; i < 8; i++) { + if (_b[i] > max) + d[i + 8] = max; + else if (_b[i] < min) + d[i + 8] = min; + else + d[i + 8] = (int8_t) _b[i]; + } + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_packs_epi16(a, b); + + return VALIDATE_INT8_M128(c, d); +} + +result_t test_mm_packs_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + int16_t max = INT16_MAX; + int16_t min = INT16_MIN; + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + const int32_t *_b = (const int32_t *) impl.mTestIntPointer2; + + int16_t d[8]; + for (int i = 0; i < 4; i++) { + if (_a[i] > max) + d[i] = max; + else if (_a[i] < min) + d[i] = min; + else + d[i] = (int16_t) _a[i]; + } + for (int i = 0; i < 4; i++) { + if (_b[i] > max) + d[i + 4] = max; + else if (_b[i] < min) + d[i + 4] = min; + else + d[i + 4] = (int16_t) _b[i]; + } + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_packs_epi32(a, b); + + return VALIDATE_INT16_M128(c, d); +} + +result_t test_mm_packus_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + uint8_t max = UINT8_MAX; + uint8_t min = 0; + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer2; + + uint8_t d[16]; + for (int i = 0; i < 8; i++) { + if (_a[i] > (int16_t) max) + d[i] = max; + else if (_a[i] < (int16_t) min) + d[i] = min; + else + d[i] = (uint8_t) _a[i]; + } + for (int i = 0; i < 8; i++) { + if (_b[i] > (int16_t) max) + d[i + 8] = max; + else if (_b[i] < (int16_t) min) + d[i + 8] = min; + else + d[i + 8] = (uint8_t) _b[i]; + } + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_packus_epi16(a, b); + + return VALIDATE_UINT8_M128(c, d); +} + +result_t test_mm_pause(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + _mm_pause(); + return TEST_SUCCESS; +} + +result_t test_mm_sad_epu8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint8_t *_a = (const uint8_t *) impl.mTestIntPointer1; + const uint8_t *_b = (const uint8_t *) impl.mTestIntPointer2; + uint16_t d0 = 0; + uint16_t d1 = 0; + for (int i = 0; i < 8; i++) { + d0 += (uint16_t) abs(_a[i] - _b[i]); + } + for (int i = 8; i < 16; i++) { + d1 += (uint16_t) abs(_a[i] - _b[i]); + } + + const __m128i a = load_m128i(_a); + const __m128i b = load_m128i(_b); + __m128i c = _mm_sad_epu8(a, b); + return validateUInt16(c, d0, 0, 0, 0, d1, 0, 0, 0); +} + +result_t test_mm_set_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + int16_t d[8]; + d[0] = _a[0]; + d[1] = _a[1]; + d[2] = _a[2]; + d[3] = _a[3]; + d[4] = _a[4]; + d[5] = _a[5]; + d[6] = _a[6]; + d[7] = _a[7]; + + __m128i c = _mm_set_epi16(d[7], d[6], d[5], d[4], d[3], d[2], d[1], d[0]); + return VALIDATE_INT16_M128(c, d); +} + +result_t test_mm_set_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + int32_t d[4]; + d[3] = impl.mTestInts[iter]; + d[2] = impl.mTestInts[iter + 1]; + d[1] = impl.mTestInts[iter + 2]; + d[0] = impl.mTestInts[iter + 3]; + __m128i a = _mm_set_epi32(d[3], d[2], d[1], d[0]); + return VALIDATE_INT32_M128(a, d); +} + +result_t test_mm_set_epi64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int64_t *_a = (const int64_t *) impl.mTestIntPointer1; + + __m128i ret = _mm_set_epi64(load_m64(&_a[1]), load_m64(&_a[0])); + + return validateInt64(ret, _a[0], _a[1]); +} + +result_t test_mm_set_epi64x(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int64_t *_a = (const int64_t *) impl.mTestIntPointer1; + + __m128i ret = _mm_set_epi64x(_a[1], _a[0]); + + return validateInt64(ret, _a[0], _a[1]); +} + +result_t test_mm_set_epi8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + int8_t d[16]; + d[0] = _a[0]; + d[1] = _a[1]; + d[2] = _a[2]; + d[3] = _a[3]; + d[4] = _a[4]; + d[5] = _a[5]; + d[6] = _a[6]; + d[7] = _a[7]; + d[8] = _a[8]; + d[9] = _a[9]; + d[10] = _a[10]; + d[11] = _a[11]; + d[12] = _a[12]; + d[13] = _a[13]; + d[14] = _a[14]; + d[15] = _a[15]; + + __m128i c = + _mm_set_epi8(d[15], d[14], d[13], d[12], d[11], d[10], d[9], d[8], d[7], + d[6], d[5], d[4], d[3], d[2], d[1], d[0]); + return VALIDATE_INT8_M128(c, d); +} + +result_t test_mm_set_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *p = (const double *) impl.mTestFloatPointer1; + double x = p[0]; + double y = p[1]; + __m128d a = _mm_set_pd(x, y); + return validateDouble(a, y, x); +} + +result_t test_mm_set_pd1(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double _a = impl.mTestFloats[iter]; + + __m128d a = _mm_set_pd1(_a); + + return validateDouble(a, _a, _a); +} + +result_t test_mm_set_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + + double f0 = _a[0]; + double f1 = 0.0; + + __m128d a = _mm_set_sd(_a[0]); + return validateDouble(a, f0, f1); +} + +result_t test_mm_set1_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + int16_t d0 = _a[0]; + + __m128i c = _mm_set1_epi16(d0); + return validateInt16(c, d0, d0, d0, d0, d0, d0, d0, d0); +} + +result_t test_mm_set1_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + int32_t x = impl.mTestInts[iter]; + __m128i a = _mm_set1_epi32(x); + return validateInt32(a, x, x, x, x); +} + +result_t test_mm_set1_epi64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int64_t *_a = (const int64_t *) impl.mTestIntPointer1; + + __m128i ret = _mm_set1_epi64(load_m64(&_a[0])); + + return validateInt64(ret, _a[0], _a[0]); +} + +result_t test_mm_set1_epi64x(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int64_t *_a = (const int64_t *) impl.mTestIntPointer1; + + __m128i ret = _mm_set1_epi64x(_a[0]); + + return validateInt64(ret, _a[0], _a[0]); +} + +result_t test_mm_set1_epi8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + int8_t d0 = _a[0]; + __m128i c = _mm_set1_epi8(d0); + return validateInt8(c, d0, d0, d0, d0, d0, d0, d0, d0, d0, d0, d0, d0, d0, + d0, d0, d0); +} + +result_t test_mm_set1_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + double d0 = _a[0]; + __m128d c = _mm_set1_pd(d0); + return validateDouble(c, d0, d0); +} + +result_t test_mm_setr_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + + __m128i c = + _mm_setr_epi16(_a[0], _a[1], _a[2], _a[3], _a[4], _a[5], _a[6], _a[7]); + + return VALIDATE_INT16_M128(c, _a); +} + +result_t test_mm_setr_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + __m128i c = _mm_setr_epi32(_a[0], _a[1], _a[2], _a[3]); + return VALIDATE_INT32_M128(c, _a); +} + +result_t test_mm_setr_epi64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int64_t *_a = (const int64_t *) impl.mTestIntPointer1; + __m128i c = _mm_setr_epi64(load_m64(&_a[0]), load_m64(&_a[1])); + return validateInt64(c, _a[0], _a[1]); +} + +result_t test_mm_setr_epi8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + + __m128i c = _mm_setr_epi8(_a[0], _a[1], _a[2], _a[3], _a[4], _a[5], _a[6], + _a[7], _a[8], _a[9], _a[10], _a[11], _a[12], + _a[13], _a[14], _a[15]); + + return VALIDATE_INT8_M128(c, _a); +} + +result_t test_mm_setr_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *p = (const double *) impl.mTestFloatPointer1; + + double x = p[0]; + double y = p[1]; + + __m128d a = _mm_setr_pd(x, y); + + return validateDouble(a, x, y); +} + +result_t test_mm_setzero_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + __m128d a = _mm_setzero_pd(); + return validateDouble(a, 0, 0); +} + +result_t test_mm_setzero_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + __m128i a = _mm_setzero_si128(); + return validateInt32(a, 0, 0, 0, 0); +} + +result_t test_mm_shuffle_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ +#if (__GNUC__ == 8) || (__GNUC__ == 9 && __GNUC_MINOR__ == 2) +#error Using older gcc versions can lead to an operand mismatch error. This issue affects all versions prior to gcc 10. +#else + const int32_t *_a = impl.mTestIntPointer1; + __m128i a, c; + int32_t _d[4]; + +#define TEST_IMPL(IDX) \ + _d[0] = _a[((IDX) & 0x3)]; \ + _d[1] = _a[((IDX >> 2) & 0x3)]; \ + _d[2] = _a[((IDX >> 4) & 0x3)]; \ + _d[3] = _a[((IDX >> 6) & 0x3)]; \ + \ + a = load_m128i(_a); \ + c = _mm_shuffle_epi32(a, IDX); \ + CHECK_RESULT(VALIDATE_INT32_M128(c, _d)) + + IMM_256_ITER +#undef TEST_IMPL + return TEST_SUCCESS; +#endif +} + +result_t test_mm_shuffle_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + __m128d a, b, c; + +#define TEST_IMPL(IDX) \ + a = load_m128d(_a); \ + b = load_m128d(_b); \ + c = _mm_shuffle_pd(a, b, IDX); \ + \ + double d0##IDX = _a[IDX & 0x1]; \ + double d1##IDX = _b[(IDX & 0x2) >> 1]; \ + CHECK_RESULT(validateDouble(c, d0##IDX, d1##IDX)) + + IMM_4_ITER +#undef TEST_IMPL + return TEST_SUCCESS; +} + +result_t test_mm_shufflehi_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ +#if (__GNUC__ == 8) || (__GNUC__ == 9 && __GNUC_MINOR__ == 2) +#error Using older gcc versions can lead to an operand mismatch error. This issue affects all versions prior to gcc 10. +#else + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + __m128i a, c; + + int16_t _d[8]; +#define TEST_IMPL(IDX) \ + _d[0] = _a[0]; \ + _d[1] = _a[1]; \ + _d[2] = _a[2]; \ + _d[3] = _a[3]; \ + _d[4] = (int16_t) (((const int64_t *) _a)[1] >> ((IDX & 0x3) * 16)); \ + _d[5] = \ + (int16_t) (((const int64_t *) _a)[1] >> (((IDX >> 2) & 0x3) * 16)); \ + _d[6] = \ + (int16_t) (((const int64_t *) _a)[1] >> (((IDX >> 4) & 0x3) * 16)); \ + _d[7] = \ + (int16_t) (((const int64_t *) _a)[1] >> (((IDX >> 6) & 0x3) * 16)); \ + \ + a = load_m128i(_a); \ + c = _mm_shufflehi_epi16(a, IDX); \ + \ + CHECK_RESULT(VALIDATE_INT16_M128(c, _d)) + + IMM_256_ITER +#undef TEST_IMPL + return TEST_SUCCESS; +#endif +} + +result_t test_mm_shufflelo_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ +#if (__GNUC__ == 8) || (__GNUC__ == 9 && __GNUC_MINOR__ == 2) +#error Using older gcc versions can lead to an operand mismatch error. This issue affects all versions prior to gcc 10. +#else + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + __m128i a, c; + int16_t _d[8]; + +#define TEST_IMPL(IDX) \ + _d[0] = (int16_t) (((const int64_t *) _a)[0] >> ((IDX & 0x3) * 16)); \ + _d[1] = \ + (int16_t) (((const int64_t *) _a)[0] >> (((IDX >> 2) & 0x3) * 16)); \ + _d[2] = \ + (int16_t) (((const int64_t *) _a)[0] >> (((IDX >> 4) & 0x3) * 16)); \ + _d[3] = \ + (int16_t) (((const int64_t *) _a)[0] >> (((IDX >> 6) & 0x3) * 16)); \ + _d[4] = _a[4]; \ + _d[5] = _a[5]; \ + _d[6] = _a[6]; \ + _d[7] = _a[7]; \ + \ + a = load_m128i(_a); \ + c = _mm_shufflelo_epi16(a, IDX); \ + \ + CHECK_RESULT(VALIDATE_INT16_M128(c, _d)) + + IMM_256_ITER +#undef TEST_IMPL + return TEST_SUCCESS; +#endif +} + +result_t test_mm_sll_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + __m128i a, b, c; + uint8_t idx; +#define TEST_IMPL(IDX) \ + uint16_t d##IDX[8]; \ + idx = IDX; \ + d##IDX[0] = (idx > 15) ? 0 : (uint16_t) (_a[0] << idx); \ + d##IDX[1] = (idx > 15) ? 0 : (uint16_t) (_a[1] << idx); \ + d##IDX[2] = (idx > 15) ? 0 : (uint16_t) (_a[2] << idx); \ + d##IDX[3] = (idx > 15) ? 0 : (uint16_t) (_a[3] << idx); \ + d##IDX[4] = (idx > 15) ? 0 : (uint16_t) (_a[4] << idx); \ + d##IDX[5] = (idx > 15) ? 0 : (uint16_t) (_a[5] << idx); \ + d##IDX[6] = (idx > 15) ? 0 : (uint16_t) (_a[6] << idx); \ + d##IDX[7] = (idx > 15) ? 0 : (uint16_t) (_a[7] << idx); \ + \ + a = load_m128i(_a); \ + b = _mm_set1_epi64x(IDX); \ + c = _mm_sll_epi16(a, b); \ + CHECK_RESULT(VALIDATE_INT16_M128(c, d##IDX)) + + IMM_64_ITER +#undef TEST_IMPL + + return TEST_SUCCESS; +} + +result_t test_mm_sll_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + __m128i a, b, c; + uint8_t idx; + +#define TEST_IMPL(IDX) \ + uint32_t d##IDX[4]; \ + idx = IDX; \ + d##IDX[0] = (idx > 31) ? 0 : _a[0] << idx; \ + d##IDX[1] = (idx > 31) ? 0 : _a[1] << idx; \ + d##IDX[2] = (idx > 31) ? 0 : _a[2] << idx; \ + d##IDX[3] = (idx > 31) ? 0 : _a[3] << idx; \ + \ + a = load_m128i(_a); \ + b = _mm_set1_epi64x(IDX); \ + c = _mm_sll_epi32(a, b); \ + CHECK_RESULT(VALIDATE_INT32_M128(c, d##IDX)) + + IMM_64_ITER +#undef TEST_IMPL + return TEST_SUCCESS; +} + +result_t test_mm_sll_epi64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int64_t *_a = (const int64_t *) impl.mTestIntPointer1; + __m128i a, b, c; + +#define TEST_IMPL(IDX) \ + uint64_t d0##IDX = (IDX & ~63) ? 0 : _a[0] << IDX; \ + uint64_t d1##IDX = (IDX & ~63) ? 0 : _a[1] << IDX; \ + \ + a = load_m128i(_a); \ + b = _mm_set1_epi64x(IDX); \ + c = _mm_sll_epi64(a, b); \ + \ + CHECK_RESULT(validateInt64(c, d0##IDX, d1##IDX)) + + IMM_64_ITER +#undef TEST_IMPL + return TEST_SUCCESS; +} + +result_t test_mm_slli_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + __m128i a, c; + uint8_t idx; +#define TEST_IMPL(IDX) \ + int16_t d##IDX[8]; \ + idx = IDX; \ + d##IDX[0] = (idx > 15) ? 0 : _a[0] << idx; \ + d##IDX[1] = (idx > 15) ? 0 : _a[1] << idx; \ + d##IDX[2] = (idx > 15) ? 0 : _a[2] << idx; \ + d##IDX[3] = (idx > 15) ? 0 : _a[3] << idx; \ + d##IDX[4] = (idx > 15) ? 0 : _a[4] << idx; \ + d##IDX[5] = (idx > 15) ? 0 : _a[5] << idx; \ + d##IDX[6] = (idx > 15) ? 0 : _a[6] << idx; \ + d##IDX[7] = (idx > 15) ? 0 : _a[7] << idx; \ + \ + a = load_m128i(_a); \ + c = _mm_slli_epi16(a, IDX); \ + CHECK_RESULT(VALIDATE_INT16_M128(c, d##IDX)) + + IMM_64_ITER +#undef TEST_IMPL + return TEST_SUCCESS; +} + +result_t test_mm_slli_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; +#if defined(__clang__) + // Clang compiler does not allow the second argument of _mm_slli_epi32() to + // be greater than 31. + const int count = (int) (iter % 33 - 1); // range: -1 ~ 31 +#else + const int count = (int) (iter % 34 - 1); // range: -1 ~ 32 +#endif + + int32_t d[4]; + d[0] = (count & ~31) ? 0 : _a[0] << count; + d[1] = (count & ~31) ? 0 : _a[1] << count; + d[2] = (count & ~31) ? 0 : _a[2] << count; + d[3] = (count & ~31) ? 0 : _a[3] << count; + + __m128i a = load_m128i(_a); + __m128i c = _mm_slli_epi32(a, count); + return VALIDATE_INT32_M128(c, d); +} + +result_t test_mm_slli_epi64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int64_t *_a = (const int64_t *) impl.mTestIntPointer1; +#if defined(__clang__) + // Clang compiler does not allow the second argument of "_mm_slli_epi64()" + // to be greater than 63. + const int count = (int) (iter % 65 - 1); // range: -1 ~ 63 +#else + const int count = (int) (iter % 66 - 1); // range: -1 ~ 64 +#endif + int64_t d0 = (count & ~63) ? 0 : _a[0] << count; + int64_t d1 = (count & ~63) ? 0 : _a[1] << count; + + __m128i a = load_m128i(_a); + __m128i c = _mm_slli_epi64(a, count); + return validateInt64(c, d0, d1); +} + +result_t test_mm_slli_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = impl.mTestIntPointer1; + + int8_t d[16]; + int count = (iter % 5) << 2; + for (int i = 0; i < 16; i++) { + if (i < count) + d[i] = 0; + else + d[i] = ((const int8_t *) _a)[i - count]; + } + + __m128i a = load_m128i(_a); + __m128i ret = _mm_setzero_si128(); + switch (iter % 5) { + case 0: + ret = _mm_slli_si128(a, 0); + break; + case 1: + ret = _mm_slli_si128(a, 4); + break; + case 2: + ret = _mm_slli_si128(a, 8); + break; + case 3: + ret = _mm_slli_si128(a, 12); + break; + case 4: + ret = _mm_slli_si128(a, 16); + break; + } + + return VALIDATE_INT8_M128(ret, d); +} + +result_t test_mm_sqrt_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + + double f0 = sqrt(_a[0]); + double f1 = sqrt(_a[1]); + + __m128d a = load_m128d(_a); + __m128d c = _mm_sqrt_pd(a); + + return validateFloatError(c, f0, f1, 1.0e-15); +} + +result_t test_mm_sqrt_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + + double f0 = sqrt(_b[0]); + double f1 = _a[1]; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_sqrt_sd(a, b); + + return validateFloatError(c, f0, f1, 1.0e-15); +} + +result_t test_mm_sra_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int64_t count = (int64_t) (iter % 18 - 1); // range: -1 ~ 16 + + int16_t d[8]; + d[0] = (count & ~15) ? (_a[0] < 0 ? ~UINT16_C(0) : 0) : (_a[0] >> count); + d[1] = (count & ~15) ? (_a[1] < 0 ? ~UINT16_C(0) : 0) : (_a[1] >> count); + d[2] = (count & ~15) ? (_a[2] < 0 ? ~UINT16_C(0) : 0) : (_a[2] >> count); + d[3] = (count & ~15) ? (_a[3] < 0 ? ~UINT16_C(0) : 0) : (_a[3] >> count); + d[4] = (count & ~15) ? (_a[4] < 0 ? ~UINT16_C(0) : 0) : (_a[4] >> count); + d[5] = (count & ~15) ? (_a[5] < 0 ? ~UINT16_C(0) : 0) : (_a[5] >> count); + d[6] = (count & ~15) ? (_a[6] < 0 ? ~UINT16_C(0) : 0) : (_a[6] >> count); + d[7] = (count & ~15) ? (_a[7] < 0 ? ~UINT16_C(0) : 0) : (_a[7] >> count); + + __m128i a = _mm_load_si128((const __m128i *) _a); + __m128i b = _mm_set1_epi64x(count); + __m128i c = _mm_sra_epi16(a, b); + + return VALIDATE_INT16_M128(c, d); +} + +result_t test_mm_sra_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + const int64_t count = (int64_t) (iter % 34 - 1); // range: -1 ~ 32 + + int32_t d[4]; + d[0] = (count & ~31) ? (_a[0] < 0 ? ~UINT32_C(0) : 0) : _a[0] >> count; + d[1] = (count & ~31) ? (_a[1] < 0 ? ~UINT32_C(0) : 0) : _a[1] >> count; + d[2] = (count & ~31) ? (_a[2] < 0 ? ~UINT32_C(0) : 0) : _a[2] >> count; + d[3] = (count & ~31) ? (_a[3] < 0 ? ~UINT32_C(0) : 0) : _a[3] >> count; + + __m128i a = _mm_load_si128((const __m128i *) _a); + __m128i b = _mm_set1_epi64x(count); + __m128i c = _mm_sra_epi32(a, b); + + return VALIDATE_INT32_M128(c, d); +} + +result_t test_mm_srai_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int32_t b = (int32_t) (iter % 18 - 1); // range: -1 ~ 16 + int16_t d[8]; + int count = (b & ~15) ? 15 : b; + + for (int i = 0; i < 8; i++) { + d[i] = _a[i] >> count; + } + + __m128i a = _mm_load_si128((const __m128i *) _a); + __m128i c = _mm_srai_epi16(a, b); + + return VALIDATE_INT16_M128(c, d); +} + +result_t test_mm_srai_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + const int32_t b = (int32_t) (iter % 34 - 1); // range: -1 ~ 32 + + int32_t d[4]; + int count = (b & ~31) ? 31 : b; + for (int i = 0; i < 4; i++) { + d[i] = _a[i] >> count; + } + + __m128i a = _mm_load_si128((const __m128i *) _a); + __m128i c = _mm_srai_epi32(a, b); + + return VALIDATE_INT32_M128(c, d); +} + +result_t test_mm_srl_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int64_t count = (int64_t) (iter % 18 - 1); // range: -1 ~ 16 + + uint16_t d[8]; + d[0] = (count & ~15) ? 0 : (uint16_t) (_a[0]) >> count; + d[1] = (count & ~15) ? 0 : (uint16_t) (_a[1]) >> count; + d[2] = (count & ~15) ? 0 : (uint16_t) (_a[2]) >> count; + d[3] = (count & ~15) ? 0 : (uint16_t) (_a[3]) >> count; + d[4] = (count & ~15) ? 0 : (uint16_t) (_a[4]) >> count; + d[5] = (count & ~15) ? 0 : (uint16_t) (_a[5]) >> count; + d[6] = (count & ~15) ? 0 : (uint16_t) (_a[6]) >> count; + d[7] = (count & ~15) ? 0 : (uint16_t) (_a[7]) >> count; + + __m128i a = load_m128i(_a); + __m128i b = _mm_set1_epi64x(count); + __m128i c = _mm_srl_epi16(a, b); + + return VALIDATE_INT16_M128(c, d); +} + +result_t test_mm_srl_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + const int64_t count = (int64_t) (iter % 34 - 1); // range: -1 ~ 32 + + uint32_t d[4]; + d[0] = (count & ~31) ? 0 : (uint32_t) (_a[0]) >> count; + d[1] = (count & ~31) ? 0 : (uint32_t) (_a[1]) >> count; + d[2] = (count & ~31) ? 0 : (uint32_t) (_a[2]) >> count; + d[3] = (count & ~31) ? 0 : (uint32_t) (_a[3]) >> count; + + __m128i a = load_m128i(_a); + __m128i b = _mm_set1_epi64x(count); + __m128i c = _mm_srl_epi32(a, b); + + return VALIDATE_INT32_M128(c, d); +} + +result_t test_mm_srl_epi64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int64_t *_a = (const int64_t *) impl.mTestIntPointer1; + const int64_t count = (int64_t) (iter % 66 - 1); // range: -1 ~ 64 + + uint64_t d0 = (count & ~63) ? 0 : (uint64_t) (_a[0]) >> count; + uint64_t d1 = (count & ~63) ? 0 : (uint64_t) (_a[1]) >> count; + + __m128i a = load_m128i(_a); + __m128i b = _mm_set1_epi64x(count); + __m128i c = _mm_srl_epi64(a, b); + + return validateInt64(c, d0, d1); +} + +result_t test_mm_srli_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint16_t *_a = (const uint16_t *) impl.mTestIntPointer1; + const int count = (int) (iter % 18 - 1); // range: -1 ~ 16 + + int16_t d[8]; + d[0] = count & (~15) ? 0 : (int16_t) (_a[0] >> count); + d[1] = count & (~15) ? 0 : (int16_t) (_a[1] >> count); + d[2] = count & (~15) ? 0 : (int16_t) (_a[2] >> count); + d[3] = count & (~15) ? 0 : (int16_t) (_a[3] >> count); + d[4] = count & (~15) ? 0 : (int16_t) (_a[4] >> count); + d[5] = count & (~15) ? 0 : (int16_t) (_a[5] >> count); + d[6] = count & (~15) ? 0 : (int16_t) (_a[6] >> count); + d[7] = count & (~15) ? 0 : (int16_t) (_a[7] >> count); + + __m128i a = load_m128i(_a); + __m128i c = _mm_srli_epi16(a, count); + + return VALIDATE_INT16_M128(c, d); +} + +result_t test_mm_srli_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint32_t *_a = (const uint32_t *) impl.mTestIntPointer1; + const int count = (int) (iter % 34 - 1); // range: -1 ~ 32 + + int32_t d[4]; + d[0] = count & (~31) ? 0 : (int32_t) (_a[0] >> count); + d[1] = count & (~31) ? 0 : (int32_t) (_a[1] >> count); + d[2] = count & (~31) ? 0 : (int32_t) (_a[2] >> count); + d[3] = count & (~31) ? 0 : (int32_t) (_a[3] >> count); + + __m128i a = load_m128i(_a); + __m128i c = _mm_srli_epi32(a, count); + + return VALIDATE_INT32_M128(c, d); +} + +result_t test_mm_srli_epi64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int64_t *_a = (const int64_t *) impl.mTestIntPointer1; + const int count = (int) (iter % 66 - 1); // range: -1 ~ 64 + + int64_t d0 = count & (~63) ? 0 : (uint64_t) (_a[0]) >> count; + int64_t d1 = count & (~63) ? 0 : (uint64_t) (_a[1]) >> count; + + __m128i a = load_m128i(_a); + __m128i c = _mm_srli_epi64(a, count); + + return validateInt64(c, d0, d1); +} + +result_t test_mm_srli_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + const int count = (iter % 5) << 2; + + int8_t d[16]; + for (int i = 0; i < 16; i++) { + if (i >= (16 - count)) + d[i] = 0; + else + d[i] = _a[i + count]; + } + + __m128i a = load_m128i(_a); + __m128i ret = _mm_setzero_si128(); + switch (iter % 5) { + case 0: + ret = _mm_srli_si128(a, 0); + break; + case 1: + ret = _mm_srli_si128(a, 4); + break; + case 2: + ret = _mm_srli_si128(a, 8); + break; + case 3: + ret = _mm_srli_si128(a, 12); + break; + case 4: + ret = _mm_srli_si128(a, 16); + break; + } + + return VALIDATE_INT8_M128(ret, d); +} + +result_t test_mm_store_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + double *p = (double *) impl.mTestFloatPointer1; + double x = impl.mTestFloats[iter + 4]; + double y = impl.mTestFloats[iter + 6]; + + __m128d a = _mm_set_pd(x, y); + _mm_store_pd(p, a); + ASSERT_RETURN(p[0] == y); + ASSERT_RETURN(p[1] == x); + return TEST_SUCCESS; +} + +result_t test_mm_store_pd1(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + double *p = (double *) impl.mTestFloatPointer1; + double _a[2] = {(double) impl.mTestFloats[iter], + (double) impl.mTestFloats[iter + 1]}; + + __m128d a = load_m128d(_a); + _mm_store_pd1(p, a); + ASSERT_RETURN(p[0] == impl.mTestFloats[iter]); + ASSERT_RETURN(p[1] == impl.mTestFloats[iter]); + return TEST_SUCCESS; +} + +result_t test_mm_store_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + double *p = (double *) impl.mTestFloatPointer1; + double _a[2] = {(double) impl.mTestFloats[iter], + (double) impl.mTestFloats[iter + 1]}; + + __m128d a = load_m128d(_a); + _mm_store_sd(p, a); + ASSERT_RETURN(p[0] == impl.mTestFloats[iter]); + return TEST_SUCCESS; +} + +result_t test_mm_store_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + alignas(16) int32_t p[4]; + + __m128i a = load_m128i(_a); + _mm_store_si128((__m128i *) p, a); + + return VALIDATE_INT32_M128(a, p); +} + +result_t test_mm_store1_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + return test_mm_store_pd1(impl, iter); +} + +result_t test_mm_storeh_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + double *p = (double *) impl.mTestFloatPointer1; + double mem; + + __m128d a = load_m128d(p); + _mm_storeh_pd(&mem, a); + + ASSERT_RETURN(mem == p[1]); + return TEST_SUCCESS; +} + +result_t test_mm_storel_epi64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + int64_t *p = (int64_t *) impl.mTestIntPointer1; + __m128i mem; + + __m128i a = load_m128i(p); + _mm_storel_epi64(&mem, a); + + ASSERT_RETURN(((SIMDVec *) &mem)->m128_u64[0] == (uint64_t) p[0]); + return TEST_SUCCESS; +} + +result_t test_mm_storel_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + double *p = (double *) impl.mTestFloatPointer1; + double mem; + + __m128d a = load_m128d(p); + _mm_storel_pd(&mem, a); + + ASSERT_RETURN(mem == p[0]); + return TEST_SUCCESS; +} + +result_t test_mm_storer_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + double *p = (double *) impl.mTestFloatPointer1; + double mem[2]; + + __m128d a = load_m128d(p); + _mm_storer_pd(mem, a); + + __m128d res = load_m128d(mem); + return validateDouble(res, p[1], p[0]); +} + +result_t test_mm_storeu_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + double *p = (double *) impl.mTestFloatPointer1; + double x = impl.mTestFloats[iter + 4]; + double y = impl.mTestFloats[iter + 6]; + + __m128d a = _mm_set_pd(x, y); + _mm_storeu_pd(p, a); + ASSERT_RETURN(p[0] == y); + ASSERT_RETURN(p[1] == x); + return TEST_SUCCESS; +} + +result_t test_mm_storeu_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + __m128i b; + __m128i a = load_m128i(_a); + _mm_storeu_si128(&b, a); + int32_t *_b = (int32_t *) &b; + return VALIDATE_INT32_M128(a, _b); +} + +result_t test_mm_storeu_si32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + // The GCC version before 11 does not implement intrinsic function + // _mm_storeu_si32. Check https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95483 + // for more information. +#if (defined(__GNUC__) && !defined(__clang__)) && (__GNUC__ <= 10) + return TEST_UNIMPL; +#else + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + __m128i b = _mm_setzero_si128(); + __m128i a = load_m128i(_a); + _mm_storeu_si32(&b, a); + int32_t *_b = (int32_t *) &b; + return validateInt32(b, _a[0], _b[1], _b[2], _b[3]); +#endif +} + +result_t test_mm_stream_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + double p[2]; + + __m128d a = load_m128d(_a); + _mm_stream_pd(p, a); + + return validateDouble(a, p[0], p[1]); +} + +result_t test_mm_stream_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + alignas(16) int32_t p[4]; + + __m128i a = load_m128i(_a); + _mm_stream_si128((__m128i *) p, a); + + return VALIDATE_INT32_M128(a, p); +} + +result_t test_mm_stream_si32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t a = (const int32_t) impl.mTestInts[iter]; + int32_t p; + + _mm_stream_si32(&p, a); + + ASSERT_RETURN(a == p) + return TEST_SUCCESS; +} + +result_t test_mm_stream_si64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int64_t a = (const int64_t) impl.mTestInts[iter]; + __int64 p[1]; + _mm_stream_si64(p, a); + ASSERT_RETURN(p[0] == a); + return TEST_SUCCESS; +} + +result_t test_mm_sub_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer2; + int16_t d[8]; + d[0] = _a[0] - _b[0]; + d[1] = _a[1] - _b[1]; + d[2] = _a[2] - _b[2]; + d[3] = _a[3] - _b[3]; + d[4] = _a[4] - _b[4]; + d[5] = _a[5] - _b[5]; + d[6] = _a[6] - _b[6]; + d[7] = _a[7] - _b[7]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_sub_epi16(a, b); + return VALIDATE_INT16_M128(c, d); +} + +result_t test_mm_sub_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = impl.mTestIntPointer1; + const int32_t *_b = impl.mTestIntPointer2; + int32_t d[4]; + d[0] = _a[0] - _b[0]; + d[1] = _a[1] - _b[1]; + d[2] = _a[2] - _b[2]; + d[3] = _a[3] - _b[3]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_sub_epi32(a, b); + return VALIDATE_INT32_M128(c, d); +} + +result_t test_mm_sub_epi64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int64_t *_a = (int64_t *) impl.mTestIntPointer1; + const int64_t *_b = (int64_t *) impl.mTestIntPointer2; + int64_t d0 = _a[0] - _b[0]; + int64_t d1 = _a[1] - _b[1]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_sub_epi64(a, b); + return validateInt64(c, d0, d1); +} + +result_t test_mm_sub_epi8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + const int8_t *_b = (const int8_t *) impl.mTestIntPointer2; + int8_t d[16]; + d[0] = _a[0] - _b[0]; + d[1] = _a[1] - _b[1]; + d[2] = _a[2] - _b[2]; + d[3] = _a[3] - _b[3]; + d[4] = _a[4] - _b[4]; + d[5] = _a[5] - _b[5]; + d[6] = _a[6] - _b[6]; + d[7] = _a[7] - _b[7]; + d[8] = _a[8] - _b[8]; + d[9] = _a[9] - _b[9]; + d[10] = _a[10] - _b[10]; + d[11] = _a[11] - _b[11]; + d[12] = _a[12] - _b[12]; + d[13] = _a[13] - _b[13]; + d[14] = _a[14] - _b[14]; + d[15] = _a[15] - _b[15]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_sub_epi8(a, b); + return VALIDATE_INT8_M128(c, d); +} + +result_t test_mm_sub_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + double d0 = _a[0] - _b[0]; + double d1 = _a[1] - _b[1]; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_sub_pd(a, b); + return validateDouble(c, d0, d1); +} + +result_t test_mm_sub_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + double d0 = _a[0] - _b[0]; + double d1 = _a[1]; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_sub_sd(a, b); + return validateDouble(c, d0, d1); +} + +result_t test_mm_sub_si64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int64_t *_a = (const int64_t *) impl.mTestIntPointer1; + const int64_t *_b = (const int64_t *) impl.mTestIntPointer2; + + int64_t d = _a[0] - _b[0]; + + __m64 a = load_m64(_a); + __m64 b = load_m64(_b); + __m64 c = _mm_sub_si64(a, b); + + return validateInt64(c, d); +} + +result_t test_mm_subs_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer2; + + int16_t d[8]; + for (int i = 0; i < 8; i++) { + d[i] = saturate_i16((int32_t) _a[i] - (int32_t) _b[i]); + } + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_subs_epi16(a, b); + + return VALIDATE_INT16_M128(c, d); +} + +result_t test_mm_subs_epi8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + int16_t max = 127; + int16_t min = -128; + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + const int8_t *_b = (const int8_t *) impl.mTestIntPointer2; + + int8_t d[16]; + for (int i = 0; i < 16; i++) { + int16_t res = (int16_t) _a[i] - (int16_t) _b[i]; + if (res > max) + d[i] = (int8_t) max; + else if (res < min) + d[i] = (int8_t) min; + else + d[i] = (int8_t) res; + } + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_subs_epi8(a, b); + + return VALIDATE_INT8_M128(c, d); +} + +result_t test_mm_subs_epu16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer2; + uint16_t d[8]; + d[0] = (uint16_t) _a[0] - (uint16_t) _b[0]; + if (d[0] > (uint16_t) _a[0]) + d[0] = 0; + d[1] = (uint16_t) _a[1] - (uint16_t) _b[1]; + if (d[1] > (uint16_t) _a[1]) + d[1] = 0; + d[2] = (uint16_t) _a[2] - (uint16_t) _b[2]; + if (d[2] > (uint16_t) _a[2]) + d[2] = 0; + d[3] = (uint16_t) _a[3] - (uint16_t) _b[3]; + if (d[3] > (uint16_t) _a[3]) + d[3] = 0; + d[4] = (uint16_t) _a[4] - (uint16_t) _b[4]; + if (d[4] > (uint16_t) _a[4]) + d[4] = 0; + d[5] = (uint16_t) _a[5] - (uint16_t) _b[5]; + if (d[5] > (uint16_t) _a[5]) + d[5] = 0; + d[6] = (uint16_t) _a[6] - (uint16_t) _b[6]; + if (d[6] > (uint16_t) _a[6]) + d[6] = 0; + d[7] = (uint16_t) _a[7] - (uint16_t) _b[7]; + if (d[7] > (uint16_t) _a[7]) + d[7] = 0; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + + __m128i c = _mm_subs_epu16(a, b); + return VALIDATE_INT16_M128(c, d); +} + +result_t test_mm_subs_epu8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + const int8_t *_b = (const int8_t *) impl.mTestIntPointer2; + uint8_t d[16]; + d[0] = (uint8_t) _a[0] - (uint8_t) _b[0]; + if (d[0] > (uint8_t) _a[0]) + d[0] = 0; + d[1] = (uint8_t) _a[1] - (uint8_t) _b[1]; + if (d[1] > (uint8_t) _a[1]) + d[1] = 0; + d[2] = (uint8_t) _a[2] - (uint8_t) _b[2]; + if (d[2] > (uint8_t) _a[2]) + d[2] = 0; + d[3] = (uint8_t) _a[3] - (uint8_t) _b[3]; + if (d[3] > (uint8_t) _a[3]) + d[3] = 0; + d[4] = (uint8_t) _a[4] - (uint8_t) _b[4]; + if (d[4] > (uint8_t) _a[4]) + d[4] = 0; + d[5] = (uint8_t) _a[5] - (uint8_t) _b[5]; + if (d[5] > (uint8_t) _a[5]) + d[5] = 0; + d[6] = (uint8_t) _a[6] - (uint8_t) _b[6]; + if (d[6] > (uint8_t) _a[6]) + d[6] = 0; + d[7] = (uint8_t) _a[7] - (uint8_t) _b[7]; + if (d[7] > (uint8_t) _a[7]) + d[7] = 0; + d[8] = (uint8_t) _a[8] - (uint8_t) _b[8]; + if (d[8] > (uint8_t) _a[8]) + d[8] = 0; + d[9] = (uint8_t) _a[9] - (uint8_t) _b[9]; + if (d[9] > (uint8_t) _a[9]) + d[9] = 0; + d[10] = (uint8_t) _a[10] - (uint8_t) _b[10]; + if (d[10] > (uint8_t) _a[10]) + d[10] = 0; + d[11] = (uint8_t) _a[11] - (uint8_t) _b[11]; + if (d[11] > (uint8_t) _a[11]) + d[11] = 0; + d[12] = (uint8_t) _a[12] - (uint8_t) _b[12]; + if (d[12] > (uint8_t) _a[12]) + d[12] = 0; + d[13] = (uint8_t) _a[13] - (uint8_t) _b[13]; + if (d[13] > (uint8_t) _a[13]) + d[13] = 0; + d[14] = (uint8_t) _a[14] - (uint8_t) _b[14]; + if (d[14] > (uint8_t) _a[14]) + d[14] = 0; + d[15] = (uint8_t) _a[15] - (uint8_t) _b[15]; + if (d[15] > (uint8_t) _a[15]) + d[15] = 0; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_subs_epu8(a, b); + return VALIDATE_INT8_M128(c, d); +} + +result_t test_mm_ucomieq_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + return test_mm_comieq_sd(impl, iter); +} + +result_t test_mm_ucomige_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + return test_mm_comige_sd(impl, iter); +} + +result_t test_mm_ucomigt_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + return test_mm_comigt_sd(impl, iter); +} + +result_t test_mm_ucomile_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + return test_mm_comile_sd(impl, iter); +} + +result_t test_mm_ucomilt_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + return test_mm_comilt_sd(impl, iter); +} + +result_t test_mm_ucomineq_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + return test_mm_comineq_sd(impl, iter); +} + +result_t test_mm_undefined_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + __m128d a = _mm_undefined_pd(); + a = _mm_xor_pd(a, a); + return validateDouble(a, 0, 0); +} + +result_t test_mm_undefined_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + __m128i a = _mm_undefined_si128(); + a = _mm_xor_si128(a, a); + return validateInt64(a, 0, 0); +} + +result_t test_mm_unpackhi_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer2; + + int16_t d[8]; + d[0] = _a[4]; + d[1] = _b[4]; + d[2] = _a[5]; + d[3] = _b[5]; + d[4] = _a[6]; + d[5] = _b[6]; + d[6] = _a[7]; + d[7] = _b[7]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i ret = _mm_unpackhi_epi16(a, b); + + return VALIDATE_INT16_M128(ret, d); +} + +result_t test_mm_unpackhi_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + const int32_t *_b = (const int32_t *) impl.mTestIntPointer2; + + int32_t d[4]; + d[0] = _a[2]; + d[1] = _b[2]; + d[2] = _a[3]; + d[3] = _b[3]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i ret = _mm_unpackhi_epi32(a, b); + + return VALIDATE_INT32_M128(ret, d); +} + +result_t test_mm_unpackhi_epi64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int64_t *_a = (const int64_t *) impl.mTestIntPointer1; + const int64_t *_b = (const int64_t *) impl.mTestIntPointer2; + + int64_t i0 = _a[1]; + int64_t i1 = _b[1]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i ret = _mm_unpackhi_epi64(a, b); + + return validateInt64(ret, i0, i1); +} + +result_t test_mm_unpackhi_epi8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + const int8_t *_b = (const int8_t *) impl.mTestIntPointer2; + + int8_t d[16]; + d[0] = _a[8]; + d[1] = _b[8]; + d[2] = _a[9]; + d[3] = _b[9]; + d[4] = _a[10]; + d[5] = _b[10]; + d[6] = _a[11]; + d[7] = _b[11]; + d[8] = _a[12]; + d[9] = _b[12]; + d[10] = _a[13]; + d[11] = _b[13]; + d[12] = _a[14]; + d[13] = _b[14]; + d[14] = _a[15]; + d[15] = _b[15]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i ret = _mm_unpackhi_epi8(a, b); + + return VALIDATE_INT8_M128(ret, d); +} + +result_t test_mm_unpackhi_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d ret = _mm_unpackhi_pd(a, b); + + return validateDouble(ret, _a[1], _b[1]); +} + +result_t test_mm_unpacklo_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer2; + + int16_t d[8]; + d[0] = _a[0]; + d[1] = _b[0]; + d[2] = _a[1]; + d[3] = _b[1]; + d[4] = _a[2]; + d[5] = _b[2]; + d[6] = _a[3]; + d[7] = _b[3]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i ret = _mm_unpacklo_epi16(a, b); + + return VALIDATE_INT16_M128(ret, d); +} + +result_t test_mm_unpacklo_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + const int32_t *_b = (const int32_t *) impl.mTestIntPointer2; + + int32_t d[4]; + d[0] = _a[0]; + d[1] = _b[0]; + d[2] = _a[1]; + d[3] = _b[1]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i ret = _mm_unpacklo_epi32(a, b); + + return VALIDATE_INT32_M128(ret, d); +} + +result_t test_mm_unpacklo_epi64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int64_t *_a = (const int64_t *) impl.mTestIntPointer1; + const int64_t *_b = (const int64_t *) impl.mTestIntPointer2; + + int64_t i0 = _a[0]; + int64_t i1 = _b[0]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i ret = _mm_unpacklo_epi64(a, b); + + return validateInt64(ret, i0, i1); +} + +result_t test_mm_unpacklo_epi8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + const int8_t *_b = (const int8_t *) impl.mTestIntPointer2; + + int8_t d[16]; + d[0] = _a[0]; + d[1] = _b[0]; + d[2] = _a[1]; + d[3] = _b[1]; + d[4] = _a[2]; + d[5] = _b[2]; + d[6] = _a[3]; + d[7] = _b[3]; + d[8] = _a[4]; + d[9] = _b[4]; + d[10] = _a[5]; + d[11] = _b[5]; + d[12] = _a[6]; + d[13] = _b[6]; + d[14] = _a[7]; + d[15] = _b[7]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i ret = _mm_unpacklo_epi8(a, b); + + return VALIDATE_INT8_M128(ret, d); +} + +result_t test_mm_unpacklo_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d ret = _mm_unpacklo_pd(a, b); + + return validateDouble(ret, _a[0], _b[0]); +} + +result_t test_mm_xor_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int64_t *_a = (const int64_t *) impl.mTestFloatPointer1; + const int64_t *_b = (const int64_t *) impl.mTestFloatPointer2; + double d0 = sse2neon_tool_recast_f64(_a[0] ^ _b[0]); + double d1 = sse2neon_tool_recast_f64(_a[1] ^ _b[1]); + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_xor_pd(a, b); + + return validateDouble(c, d0, d1); +} + +result_t test_mm_xor_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int64_t *_a = (const int64_t *) impl.mTestIntPointer1; + const int64_t *_b = (const int64_t *) impl.mTestIntPointer2; + + int64_t d0 = _a[0] ^ _b[0]; + int64_t d1 = _a[1] ^ _b[1]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_xor_si128(a, b); + + return validateInt64(c, d0, d1); +} + +/* SSE3 */ +result_t test_mm_addsub_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + + double d0 = _a[0] - _b[0]; + double d1 = _a[1] + _b[1]; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_addsub_pd(a, b); + + return validateDouble(c, d0, d1); +} + +result_t test_mm_addsub_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + // FIXME: The rounding mode would affect the testing result on ARM platform. + _MM_SET_ROUNDING_MODE(_MM_ROUND_NEAREST); + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + + float f0 = _a[0] - _b[0]; + float f1 = _a[1] + _b[1]; + float f2 = _a[2] - _b[2]; + float f3 = _a[3] + _b[3]; + + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + __m128 c = _mm_addsub_ps(a, b); + + return validateFloat(c, f0, f1, f2, f3); +} + +result_t test_mm_hadd_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + + double f0 = _a[0] + _a[1]; + double f1 = _b[0] + _b[1]; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_hadd_pd(a, b); + + return validateDouble(c, f0, f1); +} + +result_t test_mm_hadd_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + // FIXME: The rounding mode would affect the testing result on ARM platform. + _MM_SET_ROUNDING_MODE(_MM_ROUND_NEAREST); + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + + float f0 = _a[0] + _a[1]; + float f1 = _a[2] + _a[3]; + float f2 = _b[0] + _b[1]; + float f3 = _b[2] + _b[3]; + + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + __m128 c = _mm_hadd_ps(a, b); + + return validateFloat(c, f0, f1, f2, f3); +} + +result_t test_mm_hsub_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + + double f0 = _a[0] - _a[1]; + double f1 = _b[0] - _b[1]; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d c = _mm_hsub_pd(a, b); + + return validateDouble(c, f0, f1); +} + +result_t test_mm_hsub_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + // FIXME: The rounding mode would affect the testing result on ARM platform. + _MM_SET_ROUNDING_MODE(_MM_ROUND_NEAREST); + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + + float f0 = _a[0] - _a[1]; + float f1 = _a[2] - _a[3]; + float f2 = _b[0] - _b[1]; + float f3 = _b[2] - _b[3]; + + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + __m128 c = _mm_hsub_ps(a, b); + + return validateFloat(c, f0, f1, f2, f3); +} + +result_t test_mm_lddqu_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + return test_mm_loadu_si128(impl, iter); +} + +result_t test_mm_loaddup_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *addr = (const double *) impl.mTestFloatPointer1; + + __m128d ret = _mm_loaddup_pd(addr); + + return validateDouble(ret, addr[0], addr[0]); +} + +result_t test_mm_movedup_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *p = (const double *) impl.mTestFloatPointer1; + __m128d a = load_m128d(p); + __m128d b = _mm_movedup_pd(a); + + return validateDouble(b, p[0], p[0]); +} + +result_t test_mm_movehdup_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *p = impl.mTestFloatPointer1; + __m128 a = load_m128(p); + return validateFloat(_mm_movehdup_ps(a), p[1], p[1], p[3], p[3]); +} + +result_t test_mm_moveldup_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *p = impl.mTestFloatPointer1; + __m128 a = load_m128(p); + return validateFloat(_mm_moveldup_ps(a), p[0], p[0], p[2], p[2]); +} + +/* SSSE3 */ +result_t test_mm_abs_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + __m128i a = load_m128i(_a); + __m128i c = _mm_abs_epi16(a); + + uint16_t d[8]; + d[0] = (_a[0] < 0) ? -_a[0] : _a[0]; + d[1] = (_a[1] < 0) ? -_a[1] : _a[1]; + d[2] = (_a[2] < 0) ? -_a[2] : _a[2]; + d[3] = (_a[3] < 0) ? -_a[3] : _a[3]; + d[4] = (_a[4] < 0) ? -_a[4] : _a[4]; + d[5] = (_a[5] < 0) ? -_a[5] : _a[5]; + d[6] = (_a[6] < 0) ? -_a[6] : _a[6]; + d[7] = (_a[7] < 0) ? -_a[7] : _a[7]; + + return VALIDATE_UINT16_M128(c, d); +} + +result_t test_mm_abs_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + __m128i a = load_m128i(_a); + __m128i c = _mm_abs_epi32(a); + + uint32_t d[4]; + d[0] = (_a[0] < 0) ? -_a[0] : _a[0]; + d[1] = (_a[1] < 0) ? -_a[1] : _a[1]; + d[2] = (_a[2] < 0) ? -_a[2] : _a[2]; + d[3] = (_a[3] < 0) ? -_a[3] : _a[3]; + + return VALIDATE_UINT32_M128(c, d); +} + +result_t test_mm_abs_epi8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + __m128i a = load_m128i(_a); + __m128i c = _mm_abs_epi8(a); + + uint8_t d[16]; + for (int i = 0; i < 16; i++) { + d[i] = (_a[i] < 0) ? -_a[i] : _a[i]; + } + + return VALIDATE_UINT8_M128(c, d); +} + +result_t test_mm_abs_pi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + __m64 a = load_m64(_a); + __m64 c = _mm_abs_pi16(a); + + uint16_t d[4]; + d[0] = (_a[0] < 0) ? -_a[0] : _a[0]; + d[1] = (_a[1] < 0) ? -_a[1] : _a[1]; + d[2] = (_a[2] < 0) ? -_a[2] : _a[2]; + d[3] = (_a[3] < 0) ? -_a[3] : _a[3]; + + return VALIDATE_UINT16_M64(c, d); +} + +result_t test_mm_abs_pi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + __m64 a = load_m64(_a); + __m64 c = _mm_abs_pi32(a); + + uint32_t d[2]; + d[0] = (_a[0] < 0) ? -_a[0] : _a[0]; + d[1] = (_a[1] < 0) ? -_a[1] : _a[1]; + + return VALIDATE_UINT32_M64(c, d); +} + +result_t test_mm_abs_pi8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + __m64 a = load_m64(_a); + __m64 c = _mm_abs_pi8(a); + + uint8_t d[8]; + d[0] = (_a[0] < 0) ? -_a[0] : _a[0]; + d[1] = (_a[1] < 0) ? -_a[1] : _a[1]; + d[2] = (_a[2] < 0) ? -_a[2] : _a[2]; + d[3] = (_a[3] < 0) ? -_a[3] : _a[3]; + d[4] = (_a[4] < 0) ? -_a[4] : _a[4]; + d[5] = (_a[5] < 0) ? -_a[5] : _a[5]; + d[6] = (_a[6] < 0) ? -_a[6] : _a[6]; + d[7] = (_a[7] < 0) ? -_a[7] : _a[7]; + + return VALIDATE_UINT8_M64(c, d); +} + +result_t test_mm_alignr_epi8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ +#if defined(__clang__) + return TEST_UNIMPL; +#else + const uint8_t *_a = (const uint8_t *) impl.mTestIntPointer1; + const uint8_t *_b = (const uint8_t *) impl.mTestIntPointer2; + unsigned int shift = (iter % 5) << 3; + uint8_t d[32]; + + if (shift >= 32) { + memset((void *) d, 0, sizeof(d)); + } else { + memcpy((void *) d, (const void *) _b, 16); + memcpy((void *) (d + 16), (const void *) _a, 16); + // shifting + for (size_t x = 0; x < sizeof(d); x++) { + if (x + shift >= sizeof(d)) + d[x] = 0; + else + d[x] = d[x + shift]; + } + } + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i ret = _mm_setzero_si128(); + switch (iter % 5) { + case 0: + ret = _mm_alignr_epi8(a, b, 0); + break; + case 1: + ret = _mm_alignr_epi8(a, b, 8); + break; + case 2: + ret = _mm_alignr_epi8(a, b, 16); + break; + case 3: + ret = _mm_alignr_epi8(a, b, 24); + break; + case 4: + ret = _mm_alignr_epi8(a, b, 32); + break; + } + + return VALIDATE_UINT8_M128(ret, d); +#endif +} + +result_t test_mm_alignr_pi8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ +#if defined(__clang__) + return TEST_UNIMPL; +#else + const uint8_t *_a = (const uint8_t *) impl.mTestIntPointer1; + const uint8_t *_b = (const uint8_t *) impl.mTestIntPointer2; + unsigned int shift = (iter % 3) << 3; + uint8_t d[16]; + + if (shift >= 16) { + memset((void *) d, 0, sizeof(d)); + } else { + memcpy((void *) d, (const void *) _b, 8); + memcpy((void *) (d + 8), (const void *) _a, 8); + // shifting + for (size_t x = 0; x < sizeof(d); x++) { + if (x + shift >= sizeof(d)) + d[x] = 0; + else + d[x] = d[x + shift]; + } + } + + __m64 a = load_m64(_a); + __m64 b = load_m64(_b); + uint8_t zeros[] = {0, 0, 0, 0, 0, 0, 0, 0}; + __m64 ret = load_m64(zeros); + switch (iter % 3) { + case 0: + ret = _mm_alignr_pi8(a, b, 0); + break; + case 1: + ret = _mm_alignr_pi8(a, b, 8); + break; + case 2: + ret = _mm_alignr_pi8(a, b, 16); + break; + } + + return VALIDATE_UINT8_M64(ret, d); +#endif +} + +result_t test_mm_hadd_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer2; + int16_t d[8]; + d[0] = _a[0] + _a[1]; + d[1] = _a[2] + _a[3]; + d[2] = _a[4] + _a[5]; + d[3] = _a[6] + _a[7]; + d[4] = _b[0] + _b[1]; + d[5] = _b[2] + _b[3]; + d[6] = _b[4] + _b[5]; + d[7] = _b[6] + _b[7]; + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i ret = _mm_hadd_epi16(a, b); + return VALIDATE_INT16_M128(ret, d); +} + +result_t test_mm_hadd_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + const int32_t *_b = (const int32_t *) impl.mTestIntPointer2; + int32_t d[4]; + d[0] = _a[0] + _a[1]; + d[1] = _a[2] + _a[3]; + d[2] = _b[0] + _b[1]; + d[3] = _b[2] + _b[3]; + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i ret = _mm_hadd_epi32(a, b); + return VALIDATE_INT32_M128(ret, d); +} + +result_t test_mm_hadd_pi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer2; + int16_t d[4]; + d[0] = _a[0] + _a[1]; + d[1] = _a[2] + _a[3]; + d[2] = _b[0] + _b[1]; + d[3] = _b[2] + _b[3]; + __m64 a = load_m64(_a); + __m64 b = load_m64(_b); + __m64 ret = _mm_hadd_pi16(a, b); + return VALIDATE_INT16_M64(ret, d); +} + +result_t test_mm_hadd_pi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + const int32_t *_b = (const int32_t *) impl.mTestIntPointer2; + int32_t d[2]; + d[0] = _a[0] + _a[1]; + d[1] = _b[0] + _b[1]; + __m64 a = load_m64(_a); + __m64 b = load_m64(_b); + __m64 ret = _mm_hadd_pi32(a, b); + return VALIDATE_INT32_M64(ret, d); +} + +result_t test_mm_hadds_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer1; + + int16_t d16[8]; + int32_t d32[8]; + d32[0] = (int32_t) _a[0] + (int32_t) _a[1]; + d32[1] = (int32_t) _a[2] + (int32_t) _a[3]; + d32[2] = (int32_t) _a[4] + (int32_t) _a[5]; + d32[3] = (int32_t) _a[6] + (int32_t) _a[7]; + d32[4] = (int32_t) _b[0] + (int32_t) _b[1]; + d32[5] = (int32_t) _b[2] + (int32_t) _b[3]; + d32[6] = (int32_t) _b[4] + (int32_t) _b[5]; + d32[7] = (int32_t) _b[6] + (int32_t) _b[7]; + for (int i = 0; i < 8; i++) { + if (d32[i] > (int32_t) INT16_MAX) + d16[i] = INT16_MAX; + else if (d32[i] < (int32_t) INT16_MIN) + d16[i] = INT16_MIN; + else + d16[i] = (int16_t) d32[i]; + } + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_hadds_epi16(a, b); + + return VALIDATE_INT16_M128(c, d16); +} + +result_t test_mm_hadds_pi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer1; + + int16_t d16[8]; + int32_t d32[8]; + d32[0] = (int32_t) _a[0] + (int32_t) _a[1]; + d32[1] = (int32_t) _a[2] + (int32_t) _a[3]; + d32[2] = (int32_t) _b[0] + (int32_t) _b[1]; + d32[3] = (int32_t) _b[2] + (int32_t) _b[3]; + for (int i = 0; i < 8; i++) { + if (d32[i] > (int32_t) INT16_MAX) + d16[i] = INT16_MAX; + else if (d32[i] < (int32_t) INT16_MIN) + d16[i] = INT16_MIN; + else + d16[i] = (int16_t) d32[i]; + } + + __m64 a = load_m64(_a); + __m64 b = load_m64(_b); + __m64 c = _mm_hadds_pi16(a, b); + + return VALIDATE_INT16_M64(c, d16); +} + +result_t test_mm_hsub_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer1; + + int16_t d[8]; + d[0] = _a[0] - _a[1]; + d[1] = _a[2] - _a[3]; + d[2] = _a[4] - _a[5]; + d[3] = _a[6] - _a[7]; + d[4] = _b[0] - _b[1]; + d[5] = _b[2] - _b[3]; + d[6] = _b[4] - _b[5]; + d[7] = _b[6] - _b[7]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_hsub_epi16(a, b); + + return VALIDATE_INT16_M128(c, d); +} + +result_t test_mm_hsub_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = impl.mTestIntPointer1; + const int32_t *_b = impl.mTestIntPointer1; + + int32_t d[4]; + d[0] = _a[0] - _a[1]; + d[1] = _a[2] - _a[3]; + d[2] = _b[0] - _b[1]; + d[3] = _b[2] - _b[3]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_hsub_epi32(a, b); + + return VALIDATE_INT32_M128(c, d); +} + +result_t test_mm_hsub_pi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer2; + + int16_t d[4]; + d[0] = _a[0] - _a[1]; + d[1] = _a[2] - _a[3]; + d[2] = _b[0] - _b[1]; + d[3] = _b[2] - _b[3]; + __m64 a = load_m64(_a); + __m64 b = load_m64(_b); + __m64 c = _mm_hsub_pi16(a, b); + + return VALIDATE_INT16_M64(c, d); +} + +result_t test_mm_hsub_pi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = impl.mTestIntPointer1; + const int32_t *_b = impl.mTestIntPointer2; + + int32_t d[2]; + d[0] = _a[0] - _a[1]; + d[1] = _b[0] - _b[1]; + + __m64 a = load_m64(_a); + __m64 b = load_m64(_b); + __m64 c = _mm_hsub_pi32(a, b); + + return VALIDATE_INT32_M64(c, d); +} + +result_t test_mm_hsubs_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer1; + + int16_t d16[8]; + d16[0] = saturate_i16((int32_t) _a[0] - (int32_t) _a[1]); + d16[1] = saturate_i16((int32_t) _a[2] - (int32_t) _a[3]); + d16[2] = saturate_i16((int32_t) _a[4] - (int32_t) _a[5]); + d16[3] = saturate_i16((int32_t) _a[6] - (int32_t) _a[7]); + d16[4] = saturate_i16((int32_t) _b[0] - (int32_t) _b[1]); + d16[5] = saturate_i16((int32_t) _b[2] - (int32_t) _b[3]); + d16[6] = saturate_i16((int32_t) _b[4] - (int32_t) _b[5]); + d16[7] = saturate_i16((int32_t) _b[6] - (int32_t) _b[7]); + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_hsubs_epi16(a, b); + + return VALIDATE_INT16_M128(c, d16); +} + +result_t test_mm_hsubs_pi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer1; + + int16_t _d[4]; + _d[0] = saturate_i16((int32_t) _a[0] - (int32_t) _a[1]); + _d[1] = saturate_i16((int32_t) _a[2] - (int32_t) _a[3]); + _d[2] = saturate_i16((int32_t) _b[0] - (int32_t) _b[1]); + _d[3] = saturate_i16((int32_t) _b[2] - (int32_t) _b[3]); + + __m64 a = load_m64(_a); + __m64 b = load_m64(_b); + __m64 c = _mm_hsubs_pi16(a, b); + + return VALIDATE_INT16_M64(c, _d); +} + +result_t test_mm_maddubs_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint8_t *_a = (const uint8_t *) impl.mTestIntPointer1; + const int8_t *_b = (const int8_t *) impl.mTestIntPointer2; + int32_t d0 = (int32_t) (_a[0] * _b[0]); + int32_t d1 = (int32_t) (_a[1] * _b[1]); + int32_t d2 = (int32_t) (_a[2] * _b[2]); + int32_t d3 = (int32_t) (_a[3] * _b[3]); + int32_t d4 = (int32_t) (_a[4] * _b[4]); + int32_t d5 = (int32_t) (_a[5] * _b[5]); + int32_t d6 = (int32_t) (_a[6] * _b[6]); + int32_t d7 = (int32_t) (_a[7] * _b[7]); + int32_t d8 = (int32_t) (_a[8] * _b[8]); + int32_t d9 = (int32_t) (_a[9] * _b[9]); + int32_t d10 = (int32_t) (_a[10] * _b[10]); + int32_t d11 = (int32_t) (_a[11] * _b[11]); + int32_t d12 = (int32_t) (_a[12] * _b[12]); + int32_t d13 = (int32_t) (_a[13] * _b[13]); + int32_t d14 = (int32_t) (_a[14] * _b[14]); + int32_t d15 = (int32_t) (_a[15] * _b[15]); + + int16_t e[8]; + e[0] = saturate_i16(d0 + d1); + e[1] = saturate_i16(d2 + d3); + e[2] = saturate_i16(d4 + d5); + e[3] = saturate_i16(d6 + d7); + e[4] = saturate_i16(d8 + d9); + e[5] = saturate_i16(d10 + d11); + e[6] = saturate_i16(d12 + d13); + e[7] = saturate_i16(d14 + d15); + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_maddubs_epi16(a, b); + return VALIDATE_INT16_M128(c, e); +} + +result_t test_mm_maddubs_pi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint8_t *_a = (const uint8_t *) impl.mTestIntPointer1; + const int8_t *_b = (const int8_t *) impl.mTestIntPointer2; + int16_t d0 = (int16_t) (_a[0] * _b[0]); + int16_t d1 = (int16_t) (_a[1] * _b[1]); + int16_t d2 = (int16_t) (_a[2] * _b[2]); + int16_t d3 = (int16_t) (_a[3] * _b[3]); + int16_t d4 = (int16_t) (_a[4] * _b[4]); + int16_t d5 = (int16_t) (_a[5] * _b[5]); + int16_t d6 = (int16_t) (_a[6] * _b[6]); + int16_t d7 = (int16_t) (_a[7] * _b[7]); + + int16_t e[4]; + e[0] = saturate_i16(d0 + d1); + e[1] = saturate_i16(d2 + d3); + e[2] = saturate_i16(d4 + d5); + e[3] = saturate_i16(d6 + d7); + + __m64 a = load_m64(_a); + __m64 b = load_m64(_b); + __m64 c = _mm_maddubs_pi16(a, b); + + return VALIDATE_INT16_M64(c, e); +} + +result_t test_mm_mulhrs_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer2; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + int16_t _c[8]; + for (int i = 0; i < 8; i++) { + _c[i] = (int16_t) ((((((int32_t) _a[i] * (int32_t) _b[i]) >> 14) + 1) & + 0x1FFFE) >> + 1); + } + __m128i c = _mm_mulhrs_epi16(a, b); + + return VALIDATE_INT16_M128(c, _c); +} + +result_t test_mm_mulhrs_pi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer2; + + __m64 a = load_m64(_a); + __m64 b = load_m64(_b); + int16_t _c[4]; + for (int i = 0; i < 4; i++) { + _c[i] = (int16_t) ((((((int32_t) _a[i] * (int32_t) _b[i]) >> 14) + 1) & + 0x1FFFE) >> + 1); + } + __m64 c = _mm_mulhrs_pi16(a, b); + + return VALIDATE_INT16_M64(c, _c); +} + +result_t test_mm_shuffle_epi8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + const int8_t *_b = (const int8_t *) impl.mTestIntPointer2; + int8_t dst[16]; + + for (int i = 0; i < 16; i++) { + if (_b[i] & 0x80) { + dst[i] = 0; + } else { + dst[i] = _a[_b[i] & 0x0F]; + } + } + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i ret = _mm_shuffle_epi8(a, b); + + return VALIDATE_INT8_M128(ret, dst); +} + +result_t test_mm_shuffle_pi8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + const int8_t *_b = (const int8_t *) impl.mTestIntPointer2; + int8_t dst[8]; + + for (int i = 0; i < 8; i++) { + if (_b[i] & 0x80) { + dst[i] = 0; + } else { + dst[i] = _a[_b[i] & 0x07]; + } + } + + __m64 a = load_m64(_a); + __m64 b = load_m64(_b); + __m64 ret = _mm_shuffle_pi8(a, b); + + return VALIDATE_INT8_M64(ret, dst); +} + +result_t test_mm_sign_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer2; + + int16_t d[8]; + for (int i = 0; i < 8; i++) { + if (_b[i] < 0) { + d[i] = -_a[i]; + } else if (_b[i] == 0) { + d[i] = 0; + } else { + d[i] = _a[i]; + } + } + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_sign_epi16(a, b); + + return VALIDATE_INT16_M128(c, d); +} + +result_t test_mm_sign_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + const int32_t *_b = (const int32_t *) impl.mTestIntPointer2; + + int32_t d[4]; + for (int i = 0; i < 4; i++) { + if (_b[i] < 0) { + d[i] = -_a[i]; + } else if (_b[i] == 0) { + d[i] = 0; + } else { + d[i] = _a[i]; + } + } + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_sign_epi32(a, b); + + return VALIDATE_INT32_M128(c, d); +} + +result_t test_mm_sign_epi8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + const int8_t *_b = (const int8_t *) impl.mTestIntPointer2; + + int8_t d[16]; + for (int i = 0; i < 16; i++) { + if (_b[i] < 0) { + d[i] = -_a[i]; + } else if (_b[i] == 0) { + d[i] = 0; + } else { + d[i] = _a[i]; + } + } + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_sign_epi8(a, b); + + return VALIDATE_INT8_M128(c, d); +} + +result_t test_mm_sign_pi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer2; + + int16_t d[4]; + for (int i = 0; i < 4; i++) { + if (_b[i] < 0) { + d[i] = -_a[i]; + } else if (_b[i] == 0) { + d[i] = 0; + } else { + d[i] = _a[i]; + } + } + + __m64 a = load_m64(_a); + __m64 b = load_m64(_b); + __m64 c = _mm_sign_pi16(a, b); + + return VALIDATE_INT16_M64(c, d); +} + +result_t test_mm_sign_pi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + const int32_t *_b = (const int32_t *) impl.mTestIntPointer2; + + int32_t d[2]; + for (int i = 0; i < 2; i++) { + if (_b[i] < 0) { + d[i] = -_a[i]; + } else if (_b[i] == 0) { + d[i] = 0; + } else { + d[i] = _a[i]; + } + } + + __m64 a = load_m64(_a); + __m64 b = load_m64(_b); + __m64 c = _mm_sign_pi32(a, b); + + return VALIDATE_INT32_M64(c, d); +} + +result_t test_mm_sign_pi8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + const int8_t *_b = (const int8_t *) impl.mTestIntPointer2; + + int8_t d[8]; + for (int i = 0; i < 8; i++) { + if (_b[i] < 0) { + d[i] = -_a[i]; + } else if (_b[i] == 0) { + d[i] = 0; + } else { + d[i] = _a[i]; + } + } + + __m64 a = load_m64(_a); + __m64 b = load_m64(_b); + __m64 c = _mm_sign_pi8(a, b); + + return VALIDATE_INT8_M64(c, d); +} + +/* SSE4.1 */ +result_t test_mm_blend_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + const int16_t *_b = (const int16_t *) impl.mTestIntPointer2; + int16_t _c[8]; + __m128i a, b, c; + +#define TEST_IMPL(IDX) \ + for (int j = 0; j < 8; j++) { \ + if ((IDX >> j) & 0x1) { \ + _c[j] = _b[j]; \ + } else { \ + _c[j] = _a[j]; \ + } \ + } \ + a = load_m128i(_a); \ + b = load_m128i(_b); \ + c = _mm_blend_epi16(a, b, IDX); \ + CHECK_RESULT(VALIDATE_INT16_M128(c, _c)); + + IMM_256_ITER +#undef TEST_IMPL + return TEST_SUCCESS; +} + +result_t test_mm_blend_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + __m128d a, b, c; + +#define TEST_IMPL(IDX) \ + double _c##IDX[2]; \ + for (int j = 0; j < 2; j++) { \ + if ((IDX >> j) & 0x1) { \ + _c##IDX[j] = _b[j]; \ + } else { \ + _c##IDX[j] = _a[j]; \ + } \ + } \ + \ + a = load_m128d(_a); \ + b = load_m128d(_b); \ + c = _mm_blend_pd(a, b, IDX); \ + CHECK_RESULT(validateDouble(c, _c##IDX[0], _c##IDX[1])) + + IMM_4_ITER +#undef TEST_IMPL + return TEST_SUCCESS; +} + +result_t test_mm_blend_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + __m128 c; + + // gcc and clang can't compile call to _mm_blend_ps with 3rd argument as + // integer type due 4 bit size limitation. +#define TEST_IMPL(IDX) \ + float _c##IDX[4]; \ + for (int i = 0; i < 4; i++) { \ + if (IDX & (1 << i)) { \ + _c##IDX[i] = _b[i]; \ + } else { \ + _c##IDX[i] = _a[i]; \ + } \ + } \ + \ + c = _mm_blend_ps(a, b, IDX); \ + CHECK_RESULT( \ + validateFloat(c, _c##IDX[0], _c##IDX[1], _c##IDX[2], _c##IDX[3])) + + IMM_4_ITER +#undef TEST_IMPL + return TEST_SUCCESS; +} + +result_t test_mm_blendv_epi8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + const int8_t *_b = (const int8_t *) impl.mTestIntPointer2; + const int8_t _mask[16] = {(const int8_t) impl.mTestInts[iter], + (const int8_t) impl.mTestInts[iter + 1], + (const int8_t) impl.mTestInts[iter + 2], + (const int8_t) impl.mTestInts[iter + 3], + (const int8_t) impl.mTestInts[iter + 4], + (const int8_t) impl.mTestInts[iter + 5], + (const int8_t) impl.mTestInts[iter + 6], + (const int8_t) impl.mTestInts[iter + 7]}; + + int8_t _c[16]; + for (int i = 0; i < 16; i++) { + if (_mask[i] >> 7) { + _c[i] = _b[i]; + } else { + _c[i] = _a[i]; + } + } + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i mask = load_m128i(_mask); + __m128i c = _mm_blendv_epi8(a, b, mask); + + return VALIDATE_INT8_M128(c, _c); +} + +result_t test_mm_blendv_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + const double _mask[] = {(double) impl.mTestFloats[iter], + (double) impl.mTestFloats[iter + 1]}; + + double _c[2]; + for (int i = 0; i < 2; i++) { + // signed shift right would return a result which is either all 1's from + // negative numbers or all 0's from positive numbers + int64_t m = sse2neon_tool_recast_i64(_mask[i]); + if (m >> 63) { + _c[i] = _b[i]; + } else { + _c[i] = _a[i]; + } + } + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d mask = load_m128d(_mask); + + __m128d c = _mm_blendv_pd(a, b, mask); + + return validateDouble(c, _c[0], _c[1]); +} + +result_t test_mm_blendv_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + const float _mask[] = {impl.mTestFloats[iter], impl.mTestFloats[iter + 1], + impl.mTestFloats[iter + 2], + impl.mTestFloats[iter + 3]}; + + float _c[4]; + for (int i = 0; i < 4; i++) { + // signed shift right would return a result which is either all 1's from + // negative numbers or all 0's from positive numbers + if ((*(const int32_t *) (_mask + i)) >> 31) { + _c[i] = _b[i]; + } else { + _c[i] = _a[i]; + } + } + + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + __m128 mask = load_m128(_mask); + + __m128 c = _mm_blendv_ps(a, b, mask); + + return validateFloat(c, _c[0], _c[1], _c[2], _c[3]); +} + +result_t test_mm_ceil_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + + double dx = ceil(_a[0]); + double dy = ceil(_a[1]); + + __m128d a = load_m128d(_a); + __m128d ret = _mm_ceil_pd(a); + + return validateDouble(ret, dx, dy); +} + +result_t test_mm_ceil_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + float dx = ceilf(_a[0]); + float dy = ceilf(_a[1]); + float dz = ceilf(_a[2]); + float dw = ceilf(_a[3]); + + __m128 a = _mm_load_ps(_a); + __m128 c = _mm_ceil_ps(a); + return validateFloat(c, dx, dy, dz, dw); +} + +result_t test_mm_ceil_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + + double dx = ceil(_b[0]); + double dy = _a[1]; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d ret = _mm_ceil_sd(a, b); + + return validateDouble(ret, dx, dy); +} + +result_t test_mm_ceil_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer1; + + float f0 = ceilf(_b[0]); + + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + __m128 c = _mm_ceil_ss(a, b); + + return validateFloat(c, f0, _a[1], _a[2], _a[3]); +} + +result_t test_mm_cmpeq_epi64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int64_t *_a = (const int64_t *) impl.mTestIntPointer1; + const int64_t *_b = (const int64_t *) impl.mTestIntPointer2; + int64_t d0 = (_a[0] == _b[0]) ? 0xffffffffffffffff : 0x0; + int64_t d1 = (_a[1] == _b[1]) ? 0xffffffffffffffff : 0x0; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_cmpeq_epi64(a, b); + return validateInt64(c, d0, d1); +} + +result_t test_mm_cvtepi16_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + + int32_t d[4]; + d[0] = (int32_t) _a[0]; + d[1] = (int32_t) _a[1]; + d[2] = (int32_t) _a[2]; + d[3] = (int32_t) _a[3]; + + __m128i a = load_m128i(_a); + __m128i ret = _mm_cvtepi16_epi32(a); + + return VALIDATE_INT32_M128(ret, d); +} + +result_t test_mm_cvtepi16_epi64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + + int64_t i0 = (int64_t) _a[0]; + int64_t i1 = (int64_t) _a[1]; + + __m128i a = load_m128i(_a); + __m128i ret = _mm_cvtepi16_epi64(a); + + return validateInt64(ret, i0, i1); +} + +result_t test_mm_cvtepi32_epi64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + + int64_t i0 = (int64_t) _a[0]; + int64_t i1 = (int64_t) _a[1]; + + __m128i a = load_m128i(_a); + __m128i ret = _mm_cvtepi32_epi64(a); + + return validateInt64(ret, i0, i1); +} + +result_t test_mm_cvtepi8_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + + int16_t d[8]; + d[0] = (int16_t) _a[0]; + d[1] = (int16_t) _a[1]; + d[2] = (int16_t) _a[2]; + d[3] = (int16_t) _a[3]; + d[4] = (int16_t) _a[4]; + d[5] = (int16_t) _a[5]; + d[6] = (int16_t) _a[6]; + d[7] = (int16_t) _a[7]; + + __m128i a = load_m128i(_a); + __m128i ret = _mm_cvtepi8_epi16(a); + + return VALIDATE_INT16_M128(ret, d); +} + +result_t test_mm_cvtepi8_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + + int32_t d[4]; + d[0] = (int32_t) _a[0]; + d[1] = (int32_t) _a[1]; + d[2] = (int32_t) _a[2]; + d[3] = (int32_t) _a[3]; + + __m128i a = load_m128i(_a); + __m128i ret = _mm_cvtepi8_epi32(a); + + return VALIDATE_INT32_M128(ret, d); +} + +result_t test_mm_cvtepi8_epi64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + + int64_t i0 = (int64_t) _a[0]; + int64_t i1 = (int64_t) _a[1]; + + __m128i a = load_m128i(_a); + __m128i ret = _mm_cvtepi8_epi64(a); + + return validateInt64(ret, i0, i1); +} + +result_t test_mm_cvtepu16_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint16_t *_a = (const uint16_t *) impl.mTestIntPointer1; + + int32_t d[4]; + d[0] = (int32_t) _a[0]; + d[1] = (int32_t) _a[1]; + d[2] = (int32_t) _a[2]; + d[3] = (int32_t) _a[3]; + + __m128i a = load_m128i(_a); + __m128i ret = _mm_cvtepu16_epi32(a); + + return VALIDATE_INT32_M128(ret, d); +} + +result_t test_mm_cvtepu16_epi64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint16_t *_a = (const uint16_t *) impl.mTestIntPointer1; + + int64_t i0 = (int64_t) _a[0]; + int64_t i1 = (int64_t) _a[1]; + + __m128i a = load_m128i(_a); + __m128i ret = _mm_cvtepu16_epi64(a); + + return validateInt64(ret, i0, i1); +} + +result_t test_mm_cvtepu32_epi64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint32_t *_a = (const uint32_t *) impl.mTestIntPointer1; + + int64_t i0 = (int64_t) _a[0]; + int64_t i1 = (int64_t) _a[1]; + + __m128i a = load_m128i(_a); + __m128i ret = _mm_cvtepu32_epi64(a); + + return validateInt64(ret, i0, i1); +} + +result_t test_mm_cvtepu8_epi16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint8_t *_a = (const uint8_t *) impl.mTestIntPointer1; + + int16_t d[8]; + d[0] = (int16_t) _a[0]; + d[1] = (int16_t) _a[1]; + d[2] = (int16_t) _a[2]; + d[3] = (int16_t) _a[3]; + d[4] = (int16_t) _a[4]; + d[5] = (int16_t) _a[5]; + d[6] = (int16_t) _a[6]; + d[7] = (int16_t) _a[7]; + + __m128i a = load_m128i(_a); + __m128i ret = _mm_cvtepu8_epi16(a); + + return VALIDATE_INT16_M128(ret, d); +} + +result_t test_mm_cvtepu8_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint8_t *_a = (const uint8_t *) impl.mTestIntPointer1; + + int32_t d[4]; + d[0] = (int32_t) _a[0]; + d[1] = (int32_t) _a[1]; + d[2] = (int32_t) _a[2]; + d[3] = (int32_t) _a[3]; + + __m128i a = load_m128i(_a); + __m128i ret = _mm_cvtepu8_epi32(a); + + return VALIDATE_INT32_M128(ret, d); +} + +result_t test_mm_cvtepu8_epi64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint8_t *_a = (const uint8_t *) impl.mTestIntPointer1; + + int64_t i0 = (int64_t) _a[0]; + int64_t i1 = (int64_t) _a[1]; + + __m128i a = load_m128i(_a); + __m128i ret = _mm_cvtepu8_epi64(a); + + return validateInt64(ret, i0, i1); +} + +#define MM_DP_PD_TEST_CASE_WITH(imm8) \ + do { \ + const double _a[] = {impl.mTestFloatPointer1[0], \ + impl.mTestFloatPointer1[1]}; \ + const double _b[] = {impl.mTestFloatPointer2[0], \ + impl.mTestFloatPointer2[1]}; \ + const int imm = imm8; \ + double d[2] = {0}; \ + double sum = 0; \ + for (size_t i = 0; i < 2; i++) \ + sum += ((imm) & (1 << (i + 4))) ? _a[i] * _b[i] : 0; \ + for (size_t i = 0; i < 2; i++) \ + d[i] = (imm & (1 << i)) ? sum : 0; \ + __m128d a = load_m128d(_a); \ + __m128d b = load_m128d(_b); \ + __m128d ret = _mm_dp_pd(a, b, imm); \ + if (validateDouble(ret, d[0], d[1]) != TEST_SUCCESS) \ + return TEST_FAIL; \ + } while (0) + +#define GENERATE_MM_DP_PD_TEST_CASES \ + MM_DP_PD_TEST_CASE_WITH(0xF0); \ + MM_DP_PD_TEST_CASE_WITH(0xF1); \ + MM_DP_PD_TEST_CASE_WITH(0xF2); \ + MM_DP_PD_TEST_CASE_WITH(0xFF); \ + MM_DP_PD_TEST_CASE_WITH(0x10); \ + MM_DP_PD_TEST_CASE_WITH(0x11); \ + MM_DP_PD_TEST_CASE_WITH(0x12); \ + MM_DP_PD_TEST_CASE_WITH(0x13); \ + MM_DP_PD_TEST_CASE_WITH(0x00); \ + MM_DP_PD_TEST_CASE_WITH(0x01); \ + MM_DP_PD_TEST_CASE_WITH(0x02); \ + MM_DP_PD_TEST_CASE_WITH(0x03); \ + MM_DP_PD_TEST_CASE_WITH(0x20); \ + MM_DP_PD_TEST_CASE_WITH(0x21); \ + MM_DP_PD_TEST_CASE_WITH(0x22); \ + MM_DP_PD_TEST_CASE_WITH(0x23); + +OPTNONE result_t test_mm_dp_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + GENERATE_MM_DP_PD_TEST_CASES + return TEST_SUCCESS; +} + +#define MM_DP_PS_TEST_CASE_WITH(IMM) \ + do { \ + const float *_a = impl.mTestFloatPointer1; \ + const float *_b = impl.mTestFloatPointer2; \ + const int imm = IMM; \ + __m128 a = load_m128(_a); \ + __m128 b = load_m128(_b); \ + __m128 out = _mm_dp_ps(a, b, imm); \ + float r[4]; /* the reference */ \ + float sum = 0; \ + for (size_t i = 0; i < 4; i++) \ + sum += ((imm) & (1 << (i + 4))) ? _a[i] * _b[i] : 0; \ + for (size_t i = 0; i < 4; i++) \ + r[i] = (imm & (1 << i)) ? sum : 0; \ + /* the epsilon has to be large enough, otherwise test suite fails. */ \ + if (validateFloatEpsilon(out, r[0], r[1], r[2], r[3], 2050.0f) != \ + TEST_SUCCESS) \ + return TEST_FAIL; \ + } while (0) + +#define GENERATE_MM_DP_PS_TEST_CASES \ + MM_DP_PS_TEST_CASE_WITH(0xFF); \ + MM_DP_PS_TEST_CASE_WITH(0x7F); \ + MM_DP_PS_TEST_CASE_WITH(0x9F); \ + MM_DP_PS_TEST_CASE_WITH(0x2F); \ + MM_DP_PS_TEST_CASE_WITH(0x0F); \ + MM_DP_PS_TEST_CASE_WITH(0x23); \ + MM_DP_PS_TEST_CASE_WITH(0xB5); + +OPTNONE result_t test_mm_dp_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + GENERATE_MM_DP_PS_TEST_CASES + return TEST_SUCCESS; +} + +result_t test_mm_extract_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + int32_t *_a = (int32_t *) impl.mTestIntPointer1; + __m128i a = load_m128i(_a); + int c; + +#define TEST_IMPL(IDX) \ + c = _mm_extract_epi32(a, IDX); \ + ASSERT_RETURN(c == *(_a + IDX)); + + IMM_4_ITER +#undef TEST_IMPL + return TEST_SUCCESS; +} + +result_t test_mm_extract_epi64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + int64_t *_a = (int64_t *) impl.mTestIntPointer1; + __m128i a = load_m128i(_a); + __int64 c; + +#define TEST_IMPL(IDX) \ + c = _mm_extract_epi64(a, IDX); \ + ASSERT_RETURN(c == *(_a + IDX)); + + IMM_2_ITER +#undef TEST_IMPL + return TEST_SUCCESS; +} + +result_t test_mm_extract_epi8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + uint8_t *_a = (uint8_t *) impl.mTestIntPointer1; + __m128i a = load_m128i(_a); + int c; + +#define TEST_IMPL(IDX) \ + c = _mm_extract_epi8(a, IDX); \ + ASSERT_RETURN(c == *(_a + IDX)); + + IMM_8_ITER +#undef TEST_IMPL + return TEST_SUCCESS; +} + +result_t test_mm_extract_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = (const float *) impl.mTestFloatPointer1; + + __m128 a = _mm_load_ps(_a); + int32_t c; + +#define TEST_IMPL(IDX) \ + c = _mm_extract_ps(a, IDX); \ + ASSERT_RETURN(c == *(const int32_t *) (_a + IDX)); + + IMM_4_ITER +#undef TEST_IMPL + return TEST_SUCCESS; +} + +result_t test_mm_floor_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + + double dx = floor(_a[0]); + double dy = floor(_a[1]); + + __m128d a = load_m128d(_a); + __m128d ret = _mm_floor_pd(a); + + return validateDouble(ret, dx, dy); +} + +result_t test_mm_floor_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + float dx = floorf(_a[0]); + float dy = floorf(_a[1]); + float dz = floorf(_a[2]); + float dw = floorf(_a[3]); + + __m128 a = load_m128(_a); + __m128 c = _mm_floor_ps(a); + return validateFloat(c, dx, dy, dz, dw); +} + +result_t test_mm_floor_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (const double *) impl.mTestFloatPointer1; + const double *_b = (const double *) impl.mTestFloatPointer2; + + double dx = floor(_b[0]); + double dy = _a[1]; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + __m128d ret = _mm_floor_sd(a, b); + + return validateDouble(ret, dx, dy); +} + +result_t test_mm_floor_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer1; + + float f0 = floorf(_b[0]); + + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + __m128 c = _mm_floor_ss(a, b); + + return validateFloat(c, f0, _a[1], _a[2], _a[3]); +} + +result_t test_mm_insert_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + const int32_t insert = (int32_t) *impl.mTestIntPointer2; + __m128i a, b; + +#define TEST_IMPL(IDX) \ + int32_t d##IDX[4]; \ + for (int i = 0; i < 4; i++) { \ + d##IDX[i] = _a[i]; \ + } \ + d##IDX[IDX] = insert; \ + \ + a = load_m128i(_a); \ + b = _mm_insert_epi32(a, (int) insert, IDX); \ + CHECK_RESULT(VALIDATE_INT32_M128(b, d##IDX)); + + IMM_4_ITER +#undef TEST_IMPL + return TEST_SUCCESS; +} + +result_t test_mm_insert_epi64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int64_t *_a = (const int64_t *) impl.mTestIntPointer1; + int64_t insert = (int64_t) *impl.mTestIntPointer2; + + __m128i a, b; + int64_t d[2]; +#define TEST_IMPL(IDX) \ + d[0] = _a[0]; \ + d[1] = _a[1]; \ + d[IDX] = insert; \ + a = load_m128i(_a); \ + b = _mm_insert_epi64(a, insert, IDX); \ + CHECK_RESULT(validateInt64(b, d[0], d[1])); + + IMM_2_ITER +#undef TEST_IMPL + return TEST_SUCCESS; +} + +result_t test_mm_insert_epi8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + const int8_t insert = (int8_t) *impl.mTestIntPointer2; + __m128i a, b; + int8_t d[16]; + +#define TEST_IMPL(IDX) \ + for (int i = 0; i < 16; i++) { \ + d[i] = _a[i]; \ + } \ + d[IDX] = insert; \ + a = load_m128i(_a); \ + b = _mm_insert_epi8(a, insert, IDX); \ + CHECK_RESULT(VALIDATE_INT8_M128(b, d)); + + IMM_16_ITER +#undef TEST_IMPL + return TEST_SUCCESS; +} + +result_t test_mm_insert_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + + __m128 a, b, c; +#define TEST_IMPL(IDX) \ + float d##IDX[4] = {_a[0], _a[1], _a[2], _a[3]}; \ + d##IDX[(IDX >> 4) & 0x3] = _b[(IDX >> 6) & 0x3]; \ + \ + for (int j = 0; j < 4; j++) { \ + if (IDX & (1 << j)) { \ + d##IDX[j] = 0; \ + } \ + } \ + \ + a = _mm_load_ps(_a); \ + b = _mm_load_ps(_b); \ + c = _mm_insert_ps(a, b, IDX); \ + CHECK_RESULT(validateFloat(c, d##IDX[0], d##IDX[1], d##IDX[2], d##IDX[3])); + + IMM_256_ITER +#undef TEST_IMPL + return TEST_SUCCESS; +} + +result_t test_mm_max_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + const int32_t *_b = (const int32_t *) impl.mTestIntPointer2; + + int32_t d[4]; + d[0] = _a[0] > _b[0] ? _a[0] : _b[0]; + d[1] = _a[1] > _b[1] ? _a[1] : _b[1]; + d[2] = _a[2] > _b[2] ? _a[2] : _b[2]; + d[3] = _a[3] > _b[3] ? _a[3] : _b[3]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_max_epi32(a, b); + + return VALIDATE_INT32_M128(c, d); +} + +result_t test_mm_max_epi8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + const int8_t *_b = (const int8_t *) impl.mTestIntPointer2; + int8_t d[16]; + d[0] = _a[0] > _b[0] ? _a[0] : _b[0]; + d[1] = _a[1] > _b[1] ? _a[1] : _b[1]; + d[2] = _a[2] > _b[2] ? _a[2] : _b[2]; + d[3] = _a[3] > _b[3] ? _a[3] : _b[3]; + d[4] = _a[4] > _b[4] ? _a[4] : _b[4]; + d[5] = _a[5] > _b[5] ? _a[5] : _b[5]; + d[6] = _a[6] > _b[6] ? _a[6] : _b[6]; + d[7] = _a[7] > _b[7] ? _a[7] : _b[7]; + d[8] = _a[8] > _b[8] ? _a[8] : _b[8]; + d[9] = _a[9] > _b[9] ? _a[9] : _b[9]; + d[10] = _a[10] > _b[10] ? _a[10] : _b[10]; + d[11] = _a[11] > _b[11] ? _a[11] : _b[11]; + d[12] = _a[12] > _b[12] ? _a[12] : _b[12]; + d[13] = _a[13] > _b[13] ? _a[13] : _b[13]; + d[14] = _a[14] > _b[14] ? _a[14] : _b[14]; + d[15] = _a[15] > _b[15] ? _a[15] : _b[15]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + + __m128i c = _mm_max_epi8(a, b); + return VALIDATE_INT8_M128(c, d); +} + +result_t test_mm_max_epu16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint16_t *_a = (const uint16_t *) impl.mTestIntPointer1; + const uint16_t *_b = (const uint16_t *) impl.mTestIntPointer2; + + uint16_t d[8]; + d[0] = _a[0] > _b[0] ? _a[0] : _b[0]; + d[1] = _a[1] > _b[1] ? _a[1] : _b[1]; + d[2] = _a[2] > _b[2] ? _a[2] : _b[2]; + d[3] = _a[3] > _b[3] ? _a[3] : _b[3]; + d[4] = _a[4] > _b[4] ? _a[4] : _b[4]; + d[5] = _a[5] > _b[5] ? _a[5] : _b[5]; + d[6] = _a[6] > _b[6] ? _a[6] : _b[6]; + d[7] = _a[7] > _b[7] ? _a[7] : _b[7]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_max_epu16(a, b); + + return VALIDATE_UINT16_M128(c, d); +} + +result_t test_mm_max_epu32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint32_t *_a = (const uint32_t *) impl.mTestIntPointer1; + const uint32_t *_b = (const uint32_t *) impl.mTestIntPointer2; + + uint32_t d[4]; + d[0] = _a[0] > _b[0] ? _a[0] : _b[0]; + d[1] = _a[1] > _b[1] ? _a[1] : _b[1]; + d[2] = _a[2] > _b[2] ? _a[2] : _b[2]; + d[3] = _a[3] > _b[3] ? _a[3] : _b[3]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_max_epu32(a, b); + + return VALIDATE_UINT32_M128(c, d); +} + +result_t test_mm_min_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + const int32_t *_b = (const int32_t *) impl.mTestIntPointer2; + + int32_t d[4]; + d[0] = _a[0] < _b[0] ? _a[0] : _b[0]; + d[1] = _a[1] < _b[1] ? _a[1] : _b[1]; + d[2] = _a[2] < _b[2] ? _a[2] : _b[2]; + d[3] = _a[3] < _b[3] ? _a[3] : _b[3]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_min_epi32(a, b); + + return VALIDATE_INT32_M128(c, d); +} + +result_t test_mm_min_epi8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int8_t *_a = (const int8_t *) impl.mTestIntPointer1; + const int8_t *_b = (const int8_t *) impl.mTestIntPointer2; + + int8_t d[16]; + d[0] = _a[0] < _b[0] ? _a[0] : _b[0]; + d[1] = _a[1] < _b[1] ? _a[1] : _b[1]; + d[2] = _a[2] < _b[2] ? _a[2] : _b[2]; + d[3] = _a[3] < _b[3] ? _a[3] : _b[3]; + d[4] = _a[4] < _b[4] ? _a[4] : _b[4]; + d[5] = _a[5] < _b[5] ? _a[5] : _b[5]; + d[6] = _a[6] < _b[6] ? _a[6] : _b[6]; + d[7] = _a[7] < _b[7] ? _a[7] : _b[7]; + d[8] = _a[8] < _b[8] ? _a[8] : _b[8]; + d[9] = _a[9] < _b[9] ? _a[9] : _b[9]; + d[10] = _a[10] < _b[10] ? _a[10] : _b[10]; + d[11] = _a[11] < _b[11] ? _a[11] : _b[11]; + d[12] = _a[12] < _b[12] ? _a[12] : _b[12]; + d[13] = _a[13] < _b[13] ? _a[13] : _b[13]; + d[14] = _a[14] < _b[14] ? _a[14] : _b[14]; + d[15] = _a[15] < _b[15] ? _a[15] : _b[15]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + + __m128i c = _mm_min_epi8(a, b); + return VALIDATE_INT8_M128(c, d); +} + +result_t test_mm_min_epu16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint16_t *_a = (const uint16_t *) impl.mTestIntPointer1; + const uint16_t *_b = (const uint16_t *) impl.mTestIntPointer2; + + uint16_t d[8]; + d[0] = _a[0] < _b[0] ? _a[0] : _b[0]; + d[1] = _a[1] < _b[1] ? _a[1] : _b[1]; + d[2] = _a[2] < _b[2] ? _a[2] : _b[2]; + d[3] = _a[3] < _b[3] ? _a[3] : _b[3]; + d[4] = _a[4] < _b[4] ? _a[4] : _b[4]; + d[5] = _a[5] < _b[5] ? _a[5] : _b[5]; + d[6] = _a[6] < _b[6] ? _a[6] : _b[6]; + d[7] = _a[7] < _b[7] ? _a[7] : _b[7]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_min_epu16(a, b); + + return VALIDATE_UINT16_M128(c, d); +} + +result_t test_mm_min_epu32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint32_t *_a = (const uint32_t *) impl.mTestIntPointer1; + const uint32_t *_b = (const uint32_t *) impl.mTestIntPointer2; + + uint32_t d[4]; + d[0] = _a[0] < _b[0] ? _a[0] : _b[0]; + d[1] = _a[1] < _b[1] ? _a[1] : _b[1]; + d[2] = _a[2] < _b[2] ? _a[2] : _b[2]; + d[3] = _a[3] < _b[3] ? _a[3] : _b[3]; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_min_epu32(a, b); + + return VALIDATE_UINT32_M128(c, d); +} + +result_t test_mm_minpos_epu16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int16_t *_a = (const int16_t *) impl.mTestIntPointer1; + uint16_t index = 0, min = (uint16_t) _a[0]; + for (int i = 0; i < 8; i++) { + if ((uint16_t) _a[i] < min) { + index = (uint16_t) i; + min = (uint16_t) _a[i]; + } + } + + uint16_t d[8] = {min, index, 0, 0, 0, 0, 0, 0}; + + __m128i a = load_m128i(_a); + __m128i ret = _mm_minpos_epu16(a); + return VALIDATE_UINT16_M128(ret, d); +} + +result_t test_mm_mpsadbw_epu8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint8_t *_a = (const uint8_t *) impl.mTestIntPointer1; + const uint8_t *_b = (const uint8_t *) impl.mTestIntPointer2; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c; +#define TEST_IMPL(IDX) \ + uint8_t a_offset##IDX = ((IDX >> 2) & 0x1) * 4; \ + uint8_t b_offset##IDX = (IDX & 0x3) * 4; \ + \ + uint16_t d##IDX[8] = {}; \ + for (int i = 0; i < 8; i++) { \ + for (int j = 0; j < 4; j++) { \ + d##IDX[i] += (uint16_t) abs(_a[(a_offset##IDX + i) + j] - \ + _b[b_offset##IDX + j]); \ + } \ + } \ + c = _mm_mpsadbw_epu8(a, b, IDX); \ + CHECK_RESULT(VALIDATE_UINT16_M128(c, d##IDX)); + + IMM_8_ITER +#undef TEST_IMPL + return TEST_SUCCESS; +} + +result_t test_mm_mul_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + const int32_t *_b = (const int32_t *) impl.mTestIntPointer2; + + int64_t dx = (int64_t) (_a[0]) * (int64_t) (_b[0]); + int64_t dy = (int64_t) (_a[2]) * (int64_t) (_b[2]); + + __m128i a = _mm_loadu_si128((const __m128i *) _a); + __m128i b = _mm_loadu_si128((const __m128i *) _b); + __m128i r = _mm_mul_epi32(a, b); + + return validateInt64(r, dx, dy); +} + +result_t test_mm_mullo_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = impl.mTestIntPointer1; + const int32_t *_b = impl.mTestIntPointer2; + int32_t d[4]; + + for (int i = 0; i < 4; i++) { + d[i] = (int32_t) ((int64_t) _a[i] * (int64_t) _b[i]); + } + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_mullo_epi32(a, b); + return VALIDATE_INT32_M128(c, d); +} + +result_t test_mm_packus_epi32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + uint16_t max = UINT16_MAX; + uint16_t min = 0; + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + const int32_t *_b = (const int32_t *) impl.mTestIntPointer2; + + uint16_t d[8]; + for (int i = 0; i < 4; i++) { + if (_a[i] > (int32_t) max) + d[i] = max; + else if (_a[i] < (int32_t) min) + d[i] = min; + else + d[i] = (uint16_t) _a[i]; + } + for (int i = 0; i < 4; i++) { + if (_b[i] > (int32_t) max) + d[i + 4] = max; + else if (_b[i] < (int32_t) min) + d[i + 4] = min; + else + d[i + 4] = (uint16_t) _b[i]; + } + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i c = _mm_packus_epi32(a, b); + + return VALIDATE_UINT16_M128(c, d); +} + +OPTNONE result_t test_mm_round_pd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (double *) impl.mTestFloatPointer1; + double d[2] = {}; + __m128d ret; + + __m128d a = load_m128d(_a); + switch (iter & 0x7) { + case 0: + d[0] = bankersRounding(_a[0]); + d[1] = bankersRounding(_a[1]); + + ret = _mm_round_pd(a, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + break; + case 1: + d[0] = floor(_a[0]); + d[1] = floor(_a[1]); + + ret = _mm_round_pd(a, _MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC); + break; + case 2: + d[0] = ceil(_a[0]); + d[1] = ceil(_a[1]); + + ret = _mm_round_pd(a, _MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC); + break; + case 3: + d[0] = _a[0] > 0 ? floor(_a[0]) : ceil(_a[0]); + d[1] = _a[1] > 0 ? floor(_a[1]) : ceil(_a[1]); + + ret = _mm_round_pd(a, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); + break; + case 4: + d[0] = bankersRounding(_a[0]); + d[1] = bankersRounding(_a[1]); + + _MM_SET_ROUNDING_MODE(_MM_ROUND_NEAREST); + ret = _mm_round_pd(a, _MM_FROUND_CUR_DIRECTION); + break; + case 5: + d[0] = floor(_a[0]); + d[1] = floor(_a[1]); + + _MM_SET_ROUNDING_MODE(_MM_ROUND_DOWN); + ret = _mm_round_pd(a, _MM_FROUND_CUR_DIRECTION); + break; + case 6: + d[0] = ceil(_a[0]); + d[1] = ceil(_a[1]); + + _MM_SET_ROUNDING_MODE(_MM_ROUND_UP); + ret = _mm_round_pd(a, _MM_FROUND_CUR_DIRECTION); + break; + case 7: + d[0] = _a[0] > 0 ? floor(_a[0]) : ceil(_a[0]); + d[1] = _a[1] > 0 ? floor(_a[1]) : ceil(_a[1]); + + _MM_SET_ROUNDING_MODE(_MM_ROUND_TOWARD_ZERO); + ret = _mm_round_pd(a, _MM_FROUND_CUR_DIRECTION); + break; + } + + return validateDouble(ret, d[0], d[1]); +} + +OPTNONE result_t test_mm_round_ps(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + float f[4] = {}; + __m128 ret; + + __m128 a = load_m128(_a); + switch (iter & 0x7) { + case 0: + f[0] = bankersRounding(_a[0]); + f[1] = bankersRounding(_a[1]); + f[2] = bankersRounding(_a[2]); + f[3] = bankersRounding(_a[3]); + + ret = _mm_round_ps(a, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + break; + case 1: + f[0] = floorf(_a[0]); + f[1] = floorf(_a[1]); + f[2] = floorf(_a[2]); + f[3] = floorf(_a[3]); + + ret = _mm_round_ps(a, _MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC); + break; + case 2: + f[0] = ceilf(_a[0]); + f[1] = ceilf(_a[1]); + f[2] = ceilf(_a[2]); + f[3] = ceilf(_a[3]); + + ret = _mm_round_ps(a, _MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC); + break; + case 3: + f[0] = _a[0] > 0 ? floorf(_a[0]) : ceilf(_a[0]); + f[1] = _a[1] > 0 ? floorf(_a[1]) : ceilf(_a[1]); + f[2] = _a[2] > 0 ? floorf(_a[2]) : ceilf(_a[2]); + f[3] = _a[3] > 0 ? floorf(_a[3]) : ceilf(_a[3]); + + ret = _mm_round_ps(a, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); + break; + case 4: + f[0] = bankersRounding(_a[0]); + f[1] = bankersRounding(_a[1]); + f[2] = bankersRounding(_a[2]); + f[3] = bankersRounding(_a[3]); + + _MM_SET_ROUNDING_MODE(_MM_ROUND_NEAREST); + ret = _mm_round_ps(a, _MM_FROUND_CUR_DIRECTION); + break; + case 5: + f[0] = floorf(_a[0]); + f[1] = floorf(_a[1]); + f[2] = floorf(_a[2]); + f[3] = floorf(_a[3]); + + _MM_SET_ROUNDING_MODE(_MM_ROUND_DOWN); + ret = _mm_round_ps(a, _MM_FROUND_CUR_DIRECTION); + break; + case 6: + f[0] = ceilf(_a[0]); + f[1] = ceilf(_a[1]); + f[2] = ceilf(_a[2]); + f[3] = ceilf(_a[3]); + + _MM_SET_ROUNDING_MODE(_MM_ROUND_UP); + ret = _mm_round_ps(a, _MM_FROUND_CUR_DIRECTION); + break; + case 7: + f[0] = _a[0] > 0 ? floorf(_a[0]) : ceilf(_a[0]); + f[1] = _a[1] > 0 ? floorf(_a[1]) : ceilf(_a[1]); + f[2] = _a[2] > 0 ? floorf(_a[2]) : ceilf(_a[2]); + f[3] = _a[3] > 0 ? floorf(_a[3]) : ceilf(_a[3]); + + _MM_SET_ROUNDING_MODE(_MM_ROUND_TOWARD_ZERO); + ret = _mm_round_ps(a, _MM_FROUND_CUR_DIRECTION); + break; + } + + return validateFloat(ret, f[0], f[1], f[2], f[3]); +} + +result_t test_mm_round_sd(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const double *_a = (double *) impl.mTestFloatPointer1; + const double *_b = (double *) impl.mTestFloatPointer2; + double d[2] = {}; + __m128d ret; + + __m128d a = load_m128d(_a); + __m128d b = load_m128d(_b); + d[1] = _a[1]; + switch (iter & 0x7) { + case 0: + d[0] = bankersRounding(_b[0]); + + ret = _mm_round_sd(a, b, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + break; + case 1: + d[0] = floor(_b[0]); + + ret = _mm_round_sd(a, b, _MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC); + break; + case 2: + d[0] = ceil(_b[0]); + + ret = _mm_round_sd(a, b, _MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC); + break; + case 3: + d[0] = _b[0] > 0 ? floor(_b[0]) : ceil(_b[0]); + + ret = _mm_round_sd(a, b, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); + break; + case 4: + d[0] = bankersRounding(_b[0]); + + _MM_SET_ROUNDING_MODE(_MM_ROUND_NEAREST); + ret = _mm_round_sd(a, b, _MM_FROUND_CUR_DIRECTION); + break; + case 5: + d[0] = floor(_b[0]); + + _MM_SET_ROUNDING_MODE(_MM_ROUND_DOWN); + ret = _mm_round_sd(a, b, _MM_FROUND_CUR_DIRECTION); + break; + case 6: + d[0] = ceil(_b[0]); + + _MM_SET_ROUNDING_MODE(_MM_ROUND_UP); + ret = _mm_round_sd(a, b, _MM_FROUND_CUR_DIRECTION); + break; + case 7: + d[0] = _b[0] > 0 ? floor(_b[0]) : ceil(_b[0]); + + _MM_SET_ROUNDING_MODE(_MM_ROUND_TOWARD_ZERO); + ret = _mm_round_sd(a, b, _MM_FROUND_CUR_DIRECTION); + break; + } + + return validateDouble(ret, d[0], d[1]); +} + +result_t test_mm_round_ss(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const float *_a = impl.mTestFloatPointer1; + const float *_b = impl.mTestFloatPointer2; + float f[4]; + __m128 ret; + + __m128 a = load_m128(_a); + __m128 b = load_m128(_b); + switch (iter & 0x7) { + case 0: + f[0] = bankersRounding(_b[0]); + + ret = _mm_round_ss(a, b, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + break; + case 1: + f[0] = floorf(_b[0]); + + ret = _mm_round_ss(a, b, _MM_FROUND_TO_NEG_INF | _MM_FROUND_NO_EXC); + break; + case 2: + f[0] = ceilf(_b[0]); + + ret = _mm_round_ss(a, b, _MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC); + break; + case 3: + f[0] = _b[0] > 0 ? floorf(_b[0]) : ceilf(_b[0]); + + ret = _mm_round_ss(a, b, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC); + break; + case 4: + f[0] = bankersRounding(_b[0]); + + _MM_SET_ROUNDING_MODE(_MM_ROUND_NEAREST); + ret = _mm_round_ss(a, b, _MM_FROUND_CUR_DIRECTION); + break; + case 5: + f[0] = floorf(_b[0]); + + _MM_SET_ROUNDING_MODE(_MM_ROUND_DOWN); + ret = _mm_round_ss(a, b, _MM_FROUND_CUR_DIRECTION); + break; + case 6: + f[0] = ceilf(_b[0]); + + _MM_SET_ROUNDING_MODE(_MM_ROUND_UP); + ret = _mm_round_ss(a, b, _MM_FROUND_CUR_DIRECTION); + break; + case 7: + f[0] = _b[0] > 0 ? floorf(_b[0]) : ceilf(_b[0]); + + _MM_SET_ROUNDING_MODE(_MM_ROUND_TOWARD_ZERO); + ret = _mm_round_ss(a, b, _MM_FROUND_CUR_DIRECTION); + break; + } + f[1] = _a[1]; + f[2] = _a[2]; + f[3] = _a[3]; + + + return validateFloat(ret, f[0], f[1], f[2], f[3]); +} + +result_t test_mm_stream_load_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + int32_t *addr = impl.mTestIntPointer1; + + __m128i ret = _mm_stream_load_si128((__m128i *) addr); + + return VALIDATE_INT32_M128(ret, addr); +} + +result_t test_mm_test_all_ones(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + __m128i a = load_m128i(_a); + + int32_t d0 = ~_a[0] & (~(uint32_t) 0); + int32_t d1 = ~_a[1] & (~(uint32_t) 0); + int32_t d2 = ~_a[2] & (~(uint32_t) 0); + int32_t d3 = ~_a[3] & (~(uint32_t) 0); + int32_t result = ((d0 | d1 | d2 | d3) == 0) ? 1 : 0; + + int32_t ret = _mm_test_all_ones(a); + + return result == ret ? TEST_SUCCESS : TEST_FAIL; +} + +result_t test_mm_test_all_zeros(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + const int32_t *_mask = (const int32_t *) impl.mTestIntPointer2; + __m128i a = load_m128i(_a); + __m128i mask = load_m128i(_mask); + + int32_t d0 = _a[0] & _mask[0]; + int32_t d1 = _a[1] & _mask[1]; + int32_t d2 = _a[2] & _mask[2]; + int32_t d3 = _a[3] & _mask[3]; + int32_t result = ((d0 | d1 | d2 | d3) == 0) ? 1 : 0; + + int32_t ret = _mm_test_all_zeros(a, mask); + + return result == ret ? TEST_SUCCESS : TEST_FAIL; +} + +result_t test_mm_test_mix_ones_zeros(const SSE2NEONTestImpl &impl, + uint32_t iter) +{ + const int32_t *_a = (const int32_t *) impl.mTestIntPointer1; + const int32_t *_mask = (const int32_t *) impl.mTestIntPointer2; + __m128i a = load_m128i(_a); + __m128i mask = load_m128i(_mask); + + int32_t ZF = 1; + int32_t CF = 1; + for (int i = 0; i < 4; i++) { + ZF &= ((_a[i] & _mask[i]) == 0); + CF &= ((~_a[i] & _mask[i]) == 0); + } + int32_t result = (ZF == 0 && CF == 0); + + int32_t ret = _mm_test_mix_ones_zeros(a, mask); + return result == ret ? TEST_SUCCESS : TEST_FAIL; +} + +result_t test_mm_testc_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = impl.mTestIntPointer1; + const int32_t *_b = impl.mTestIntPointer2; + __m128i a = _mm_load_si128((const __m128i *) _a); + __m128i b = _mm_load_si128((const __m128i *) _b); + int testc = 1; + for (int i = 0; i < 2; i++) { + if ((~(((SIMDVec *) &a)->m128_u64[i]) & + ((SIMDVec *) &b)->m128_u64[i])) { + testc = 0; + break; + } + } + return _mm_testc_si128(a, b) == testc ? TEST_SUCCESS : TEST_FAIL; +} + +result_t test_mm_testnzc_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + return test_mm_test_mix_ones_zeros(impl, iter); +} + +result_t test_mm_testz_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *_a = impl.mTestIntPointer1; + const int32_t *_b = impl.mTestIntPointer2; + __m128i a = _mm_load_si128((const __m128i *) _a); + __m128i b = _mm_load_si128((const __m128i *) _b); + int testz = 1; + for (int i = 0; i < 2; i++) { + if ((((SIMDVec *) &a)->m128_u64[i] & ((SIMDVec *) &b)->m128_u64[i])) { + testz = 0; + break; + } + } + return _mm_testz_si128(a, b) == testz ? TEST_SUCCESS : TEST_FAIL; +} + +/* SSE4.2 */ +#define IS_CMPESTRI 1 + +#define DEF_ENUM_MM_CMPESTRX_VARIANT(c, ...) c, + +#define EVAL_MM_CMPESTRX_TEST_CASE(c, type, data_type, im, IM) \ + do { \ + data_type *a = test_mm_##im##_##type##_data[c].a, \ + *b = test_mm_##im##_##type##_data[c].b; \ + int la = test_mm_##im##_##type##_data[c].la, \ + lb = test_mm_##im##_##type##_data[c].lb; \ + const int imm8 = IMM_##c; \ + IIF(IM) \ + (int expect = test_mm_##im##_##type##_data[c].expect, \ + data_type *expect = test_mm_##im##_##type##_data[c].expect); \ + __m128i ma, mb; \ + memcpy(&ma, a, sizeof(ma)); \ + memcpy(&mb, b, sizeof(mb)); \ + IIF(IM) \ + (int res = _mm_##im(ma, la, mb, lb, imm8), \ + __m128i res = _mm_##im(ma, la, mb, lb, imm8)); \ + if (IIF(IM)(res != expect, memcmp(expect, &res, sizeof(__m128i)))) \ + return TEST_FAIL; \ + } while (0); + +#define ENUM_MM_CMPESTRX_TEST_CASES(type, type_lower, data_type, func, FUNC, \ + IM) \ + enum { MM_##FUNC##_##type##_TEST_CASES(DEF_ENUM_MM_CMPESTRX_VARIANT) }; \ + MM_##FUNC##_##type##_TEST_CASES(EVAL_MM_CMPESTRX_TEST_CASE, type_lower, \ + data_type, func, IM) + +#define IMM_UBYTE_EACH_LEAST \ + (_SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_LEAST_SIGNIFICANT) +#define IMM_UBYTE_EACH_LEAST_NEGATIVE \ + (_SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_LEAST_SIGNIFICANT | \ + _SIDD_NEGATIVE_POLARITY) +#define IMM_UBYTE_EACH_LEAST_MASKED_NEGATIVE \ + (_SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_LEAST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) +#define IMM_UBYTE_EACH_MOST \ + (_SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_MOST_SIGNIFICANT) +#define IMM_UBYTE_EACH_MOST_NEGATIVE \ + (_SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_MOST_SIGNIFICANT | \ + _SIDD_NEGATIVE_POLARITY) +#define IMM_UBYTE_EACH_MOST_MASKED_NEGATIVE \ + (_SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_MOST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) +#define IMM_UBYTE_ANY_LEAST \ + (_SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_LEAST_SIGNIFICANT) +#define IMM_UBYTE_ANY_LEAST_NEGATIVE \ + (_SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_LEAST_SIGNIFICANT | \ + _SIDD_NEGATIVE_POLARITY) +#define IMM_UBYTE_ANY_LEAST_MASKED_NEGATIVE \ + (_SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_LEAST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) +#define IMM_UBYTE_ANY_MOST \ + (_SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_MOST_SIGNIFICANT) +#define IMM_UBYTE_ANY_MOST_NEGATIVE \ + (_SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_MOST_SIGNIFICANT | \ + _SIDD_NEGATIVE_POLARITY) +#define IMM_UBYTE_ANY_MOST_MASKED_NEGATIVE \ + (_SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_MOST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) +#define IMM_UBYTE_RANGES_LEAST \ + (_SIDD_UBYTE_OPS | _SIDD_CMP_RANGES | _SIDD_LEAST_SIGNIFICANT) +#define IMM_UBYTE_RANGES_MOST \ + (_SIDD_UBYTE_OPS | _SIDD_CMP_RANGES | _SIDD_MOST_SIGNIFICANT) +#define IMM_UBYTE_RANGES_LEAST_NEGATIVE \ + (_SIDD_UBYTE_OPS | _SIDD_CMP_RANGES | _SIDD_LEAST_SIGNIFICANT | \ + _SIDD_NEGATIVE_POLARITY) +#define IMM_UBYTE_RANGES_MOST_NEGATIVE \ + (_SIDD_UBYTE_OPS | _SIDD_CMP_RANGES | _SIDD_MOST_SIGNIFICANT | \ + _SIDD_NEGATIVE_POLARITY) +#define IMM_UBYTE_RANGES_LEAST_MASKED_NEGATIVE \ + (_SIDD_UBYTE_OPS | _SIDD_CMP_RANGES | _SIDD_LEAST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) +#define IMM_UBYTE_RANGES_MOST_MASKED_NEGATIVE \ + (_SIDD_UBYTE_OPS | _SIDD_CMP_RANGES | _SIDD_MOST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) +#define IMM_UBYTE_ORDERED_LEAST \ + (_SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_ORDERED | _SIDD_LEAST_SIGNIFICANT) +#define IMM_UBYTE_ORDERED_LEAST_NEGATIVE \ + (_SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_ORDERED | _SIDD_LEAST_SIGNIFICANT | \ + _SIDD_NEGATIVE_POLARITY) +#define IMM_UBYTE_ORDERED_MOST \ + (_SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_ORDERED | _SIDD_MOST_SIGNIFICANT) +#define IMM_UBYTE_ORDERED_MOST_NEGATIVE \ + (_SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_ORDERED | _SIDD_MOST_SIGNIFICANT | \ + _SIDD_NEGATIVE_POLARITY) +#define IMM_UBYTE_ORDERED_MOST_MASKED_NEGATIVE \ + (_SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_ORDERED | _SIDD_MOST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) + +#define IMM_SBYTE_EACH_LEAST \ + (_SIDD_SBYTE_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_LEAST_SIGNIFICANT) +#define IMM_SBYTE_EACH_LEAST_NEGATIVE \ + (_SIDD_SBYTE_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_LEAST_SIGNIFICANT | \ + _SIDD_NEGATIVE_POLARITY) +#define IMM_SBYTE_EACH_LEAST_MASKED_NEGATIVE \ + (_SIDD_SBYTE_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_LEAST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) +#define IMM_SBYTE_EACH_MOST \ + (_SIDD_SBYTE_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_MOST_SIGNIFICANT) +#define IMM_SBYTE_EACH_MOST_NEGATIVE \ + (_SIDD_SBYTE_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_MOST_SIGNIFICANT | \ + _SIDD_NEGATIVE_POLARITY) +#define IMM_SBYTE_EACH_MOST_MASKED_NEGATIVE \ + (_SIDD_SBYTE_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_MOST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) +#define IMM_SBYTE_ANY_LEAST \ + (_SIDD_SBYTE_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_LEAST_SIGNIFICANT) +#define IMM_SBYTE_ANY_LEAST_NEGATIVE \ + (_SIDD_SBYTE_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_LEAST_SIGNIFICANT | \ + _SIDD_NEGATIVE_POLARITY) +#define IMM_SBYTE_ANY_MOST \ + (_SIDD_SBYTE_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_MOST_SIGNIFICANT) +#define IMM_SBYTE_ANY_MOST_MASKED_NEGATIVE \ + (_SIDD_SBYTE_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_LEAST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) +#define IMM_SBYTE_RANGES_LEAST \ + (_SIDD_SBYTE_OPS | _SIDD_CMP_RANGES | _SIDD_LEAST_SIGNIFICANT) +#define IMM_SBYTE_RANGES_LEAST_NEGATIVE \ + (_SIDD_SBYTE_OPS | _SIDD_CMP_RANGES | _SIDD_LEAST_SIGNIFICANT | \ + _SIDD_NEGATIVE_POLARITY) +#define IMM_SBYTE_RANGES_LEAST_MASKED_NEGATIVE \ + (_SIDD_SBYTE_OPS | _SIDD_CMP_RANGES | _SIDD_LEAST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) +#define IMM_SBYTE_RANGES_MOST \ + (_SIDD_SBYTE_OPS | _SIDD_CMP_RANGES | _SIDD_MOST_SIGNIFICANT) +#define IMM_SBYTE_RANGES_MOST_NEGATIVE \ + (_SIDD_SBYTE_OPS | _SIDD_CMP_RANGES | _SIDD_MOST_SIGNIFICANT | \ + _SIDD_NEGATIVE_POLARITY) +#define IMM_SBYTE_RANGES_MOST_MASKED_NEGATIVE \ + (_SIDD_SBYTE_OPS | _SIDD_CMP_RANGES | _SIDD_MOST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) +#define IMM_SBYTE_ORDERED_LEAST \ + (_SIDD_SBYTE_OPS | _SIDD_CMP_EQUAL_ORDERED | _SIDD_LEAST_SIGNIFICANT) +#define IMM_SBYTE_ORDERED_LEAST_NEGATIVE \ + (_SIDD_SBYTE_OPS | _SIDD_CMP_EQUAL_ORDERED | _SIDD_LEAST_SIGNIFICANT | \ + _SIDD_NEGATIVE_POLARITY) +#define IMM_SBYTE_ORDERED_LEAST_MASKED_NEGATIVE \ + (_SIDD_SBYTE_OPS | _SIDD_CMP_EQUAL_ORDERED | _SIDD_LEAST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) +#define IMM_SBYTE_ORDERED_MOST_NEGATIVE \ + (_SIDD_SBYTE_OPS | _SIDD_CMP_EQUAL_ORDERED | _SIDD_MOST_SIGNIFICANT | \ + _SIDD_NEGATIVE_POLARITY) +#define IMM_SBYTE_ORDERED_MOST \ + (_SIDD_SBYTE_OPS | _SIDD_CMP_EQUAL_ORDERED | _SIDD_MOST_SIGNIFICANT) +#define IMM_SBYTE_ORDERED_MOST_MASKED_NEGATIVE \ + (_SIDD_SBYTE_OPS | _SIDD_CMP_EQUAL_ORDERED | _SIDD_MOST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) + +#define IMM_UWORD_RANGES_LEAST \ + (_SIDD_UWORD_OPS | _SIDD_CMP_RANGES | _SIDD_LEAST_SIGNIFICANT) +#define IMM_UWORD_RANGES_LEAST_NEGATIVE \ + (_SIDD_UWORD_OPS | _SIDD_CMP_RANGES | _SIDD_LEAST_SIGNIFICANT | \ + _SIDD_NEGATIVE_POLARITY) +#define IMM_UWORD_RANGES_LEAST_MASKED_NEGATIVE \ + (_SIDD_UWORD_OPS | _SIDD_CMP_RANGES | _SIDD_LEAST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) +#define IMM_UWORD_RANGES_MOST \ + (_SIDD_UWORD_OPS | _SIDD_CMP_RANGES | _SIDD_MOST_SIGNIFICANT) +#define IMM_UWORD_RANGES_MOST_NEGATIVE \ + (_SIDD_UWORD_OPS | _SIDD_CMP_RANGES | _SIDD_MOST_SIGNIFICANT | \ + _SIDD_NEGATIVE_POLARITY) +#define IMM_UWORD_RANGES_MOST_MASKED_NEGATIVE \ + (_SIDD_UWORD_OPS | _SIDD_CMP_RANGES | _SIDD_MOST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) +#define IMM_UWORD_EACH_LEAST \ + (_SIDD_UWORD_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_LEAST_SIGNIFICANT) +#define IMM_UWORD_EACH_MOST \ + (_SIDD_UWORD_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_MOST_SIGNIFICANT) +#define IMM_UWORD_EACH_LEAST_NEGATIVE \ + (_SIDD_UWORD_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_LEAST_SIGNIFICANT | \ + _SIDD_NEGATIVE_POLARITY) +#define IMM_UWORD_EACH_LEAST_MASKED_NEGATIVE \ + (_SIDD_UWORD_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_LEAST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) +#define IMM_UWORD_EACH_MOST_MASKED_NEGATIVE \ + (_SIDD_UWORD_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_MOST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) +#define IMM_UWORD_ANY_LEAST \ + (_SIDD_UWORD_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_LEAST_SIGNIFICANT) +#define IMM_UWORD_ANY_MOST \ + (_SIDD_UWORD_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_MOST_SIGNIFICANT) +#define IMM_UWORD_ANY_MOST_NEGATIVE \ + (_SIDD_UWORD_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_MOST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) +#define IMM_UWORD_ANY_LEAST_NEGATIVE \ + (_SIDD_UWORD_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_LEAST_SIGNIFICANT | \ + _SIDD_NEGATIVE_POLARITY) +#define IMM_UWORD_ANY_LEAST_MASKED_NEGATIVE \ + (_SIDD_UWORD_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_LEAST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) +#define IMM_UWORD_ORDERED_LEAST \ + (_SIDD_UWORD_OPS | _SIDD_CMP_EQUAL_ORDERED | _SIDD_LEAST_SIGNIFICANT) +#define IMM_UWORD_ORDERED_LEAST_NEGATIVE \ + (_SIDD_UWORD_OPS | _SIDD_CMP_EQUAL_ORDERED | _SIDD_LEAST_SIGNIFICANT | \ + _SIDD_NEGATIVE_POLARITY) +#define IMM_UWORD_ORDERED_LEAST_MASKED_NEGATIVE \ + (_SIDD_UWORD_OPS | _SIDD_CMP_EQUAL_ORDERED | _SIDD_LEAST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) +#define IMM_UWORD_ORDERED_MOST \ + (_SIDD_UWORD_OPS | _SIDD_CMP_EQUAL_ORDERED | _SIDD_MOST_SIGNIFICANT) +#define IMM_UWORD_ORDERED_MOST_NEGATIVE \ + (_SIDD_UWORD_OPS | _SIDD_CMP_EQUAL_ORDERED | _SIDD_MOST_SIGNIFICANT | \ + _SIDD_NEGATIVE_POLARITY) +#define IMM_UWORD_ORDERED_MOST_MASKED_NEGATIVE \ + (_SIDD_UWORD_OPS | _SIDD_CMP_EQUAL_ORDERED | _SIDD_MOST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) + +#define IMM_SWORD_RANGES_LEAST \ + (_SIDD_SWORD_OPS | _SIDD_CMP_RANGES | _SIDD_LEAST_SIGNIFICANT) +#define IMM_SWORD_RANGES_MOST \ + (_SIDD_SWORD_OPS | _SIDD_CMP_RANGES | _SIDD_MOST_SIGNIFICANT) +#define IMM_SWORD_RANGES_LEAST_NEGATIVE \ + (_SIDD_SWORD_OPS | _SIDD_CMP_RANGES | _SIDD_LEAST_SIGNIFICANT | \ + _SIDD_NEGATIVE_POLARITY) +#define IMM_SWORD_RANGES_LEAST_MASKED_NEGATIVE \ + (_SIDD_SWORD_OPS | _SIDD_CMP_RANGES | _SIDD_LEAST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) +#define IMM_SWORD_RANGES_MOST_MASKED_NEGATIVE \ + (_SIDD_SWORD_OPS | _SIDD_CMP_RANGES | _SIDD_MOST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) +#define IMM_SWORD_EACH_LEAST \ + (_SIDD_SWORD_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_LEAST_SIGNIFICANT) +#define IMM_SWORD_EACH_MOST \ + (_SIDD_SWORD_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_MOST_SIGNIFICANT) +#define IMM_SWORD_EACH_LEAST_NEGATIVE \ + (_SIDD_SWORD_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_LEAST_SIGNIFICANT | \ + _SIDD_NEGATIVE_POLARITY) +#define IMM_SWORD_EACH_LEAST_MASKED_NEGATIVE \ + (_SIDD_SWORD_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_LEAST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) +#define IMM_SWORD_EACH_MOST_NEGATIVE \ + (_SIDD_SWORD_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_MOST_SIGNIFICANT | \ + _SIDD_NEGATIVE_POLARITY) +#define IMM_SWORD_EACH_MOST_MASKED_NEGATIVE \ + (_SIDD_SWORD_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_MOST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) +#define IMM_SWORD_ANY_LEAST \ + (_SIDD_SWORD_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_LEAST_SIGNIFICANT) +#define IMM_SWORD_ANY_LEAST_NEGATIVE \ + (_SIDD_SWORD_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_LEAST_SIGNIFICANT) +#define IMM_SWORD_ANY_LEAST_MASKED_NEGATIVE \ + (_SIDD_SWORD_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_LEAST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) +#define IMM_SWORD_ANY_MOST \ + (_SIDD_SWORD_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_MOST_SIGNIFICANT) +#define IMM_SWORD_ANY_MOST_NEGATIVE \ + (_SIDD_SWORD_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_MOST_SIGNIFICANT | \ + _SIDD_NEGATIVE_POLARITY) +#define IMM_SWORD_ANY_MOST_MASKED_NEGATIVE \ + (_SIDD_SWORD_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_MOST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) +#define IMM_SWORD_ANY_MOST_MASKED_NEGATIVE \ + (_SIDD_SWORD_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_MOST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) +#define IMM_SWORD_ORDERED_LEAST \ + (_SIDD_SWORD_OPS | _SIDD_CMP_EQUAL_ORDERED | _SIDD_LEAST_SIGNIFICANT) +#define IMM_SWORD_ORDERED_LEAST_NEGATIVE \ + (_SIDD_SWORD_OPS | _SIDD_CMP_EQUAL_ORDERED | _SIDD_LEAST_SIGNIFICANT | \ + _SIDD_NEGATIVE_POLARITY) +#define IMM_SWORD_ORDERED_LEAST_MASKED_NEGATIVE \ + (_SIDD_SWORD_OPS | _SIDD_CMP_EQUAL_ORDERED | _SIDD_LEAST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) +#define IMM_SWORD_ORDERED_MOST \ + (_SIDD_SWORD_OPS | _SIDD_CMP_EQUAL_ORDERED | _SIDD_MOST_SIGNIFICANT) +#define IMM_SWORD_ORDERED_MOST_MASKED_NEGATIVE \ + (_SIDD_SWORD_OPS | _SIDD_CMP_EQUAL_ORDERED | _SIDD_MOST_SIGNIFICANT | \ + _SIDD_MASKED_NEGATIVE_POLARITY) + +typedef struct { + uint8_t a[16], b[16]; + int la, lb; + const int imm8; + int expect; +} test_mm_cmpestri_ubyte_data_t; +typedef struct { + int8_t a[16], b[16]; + int la, lb; + const int imm8; + int expect; +} test_mm_cmpestri_sbyte_data_t; +typedef struct { + uint16_t a[8], b[8]; + int la, lb; + const int imm8; + int expect; +} test_mm_cmpestri_uword_data_t; +typedef struct { + int16_t a[8], b[8]; + int la, lb; + const int imm8; + int expect; +} test_mm_cmpestri_sword_data_t; + +#define TEST_MM_CMPESTRA_UBYTE_DATA_LEN 3 +static test_mm_cmpestri_ubyte_data_t + test_mm_cmpestra_ubyte_data[TEST_MM_CMPESTRA_UBYTE_DATA_LEN] = { + {{20, 10, 33, 56, 78}, + {20, 10, 34, 98, 127, 20, 10, 32, 20, 10, 32, 11, 3, 20, 10, 31}, + 3, + 17, + IMM_UBYTE_ORDERED_MOST, + 1}, + {{20, 127, 0, 45, 77, 1, 34, 43, 109}, + {2, 127, 0, 54, 6, 43, 12, 110, 100}, + 9, + 20, + IMM_UBYTE_EACH_LEAST_NEGATIVE, + 0}, + {{22, 33, 90, 1}, + {22, 33, 90, 1, 1, 5, 4, 7, 98, 34, 1, 12, 13, 14, 15, 16}, + 4, + 11, + IMM_UBYTE_ANY_LEAST_MASKED_NEGATIVE, + 0}, +}; + +#define TEST_MM_CMPESTRA_SBYTE_DATA_LEN 3 +static test_mm_cmpestri_sbyte_data_t + test_mm_cmpestra_sbyte_data[TEST_MM_CMPESTRA_SBYTE_DATA_LEN] = { + {{45, -94, 38, -11, 84, -123, -43, -49, 25, -55, -121, -6, 57, 108, -55, + 69}, + {-26, -61, -21, -96, 48, -112, 95, -56, 29, -55, -121, -6, 57, 108, + -55, 69}, + 23, + 28, + IMM_SBYTE_RANGES_LEAST, + 0}, + {{-12, 8}, + {-12, 7, -12, 8, -13, 45, -12, 8}, + 2, + 8, + IMM_SBYTE_ORDERED_MOST_NEGATIVE, + 0}, + {{-100, -127, 56, 78, 21, -1, 9, 127, 45}, + {100, 126, 30, 65, 87, 54, 80, 81, -98, -101, 90, 1, 5, 60, -77, -65}, + 10, + 20, + IMM_SBYTE_ANY_LEAST, + 1}, +}; + +#define TEST_MM_CMPESTRA_UWORD_DATA_LEN 3 +static test_mm_cmpestri_uword_data_t + test_mm_cmpestra_uword_data[TEST_MM_CMPESTRA_UWORD_DATA_LEN] = { + {{10000, 20000, 30000, 40000, 50000}, + {40001, 50002, 10000, 20000, 30000, 40000, 50000}, + 5, + 10, + IMM_UWORD_ORDERED_LEAST, + 0}, + {{1001, 9487, 9487, 8000}, + {1001, 1002, 1003, 8709, 100, 1, 1000, 999}, + 4, + 6, + IMM_UWORD_RANGES_LEAST_MASKED_NEGATIVE, + 0}, + {{12, 21, 0, 45, 88, 10001, 10002, 65535}, + {22, 13, 3, 54, 888, 10003, 10000, 65530}, + 13, + 13, + IMM_UWORD_EACH_MOST, + 1}, +}; + +#define TEST_MM_CMPESTRA_SWORD_DATA_LEN 3 +static test_mm_cmpestri_sword_data_t + test_mm_cmpestra_sword_data[TEST_MM_CMPESTRA_SWORD_DATA_LEN] = { + {{-100, -80, -5, -1, 10, 1000}, + {-100, -99, -80, -2, 11, 789, 889, 999}, + 6, + 12, + IMM_SWORD_RANGES_LEAST_NEGATIVE, + 1}, + {{-30000, -90, -32766, 1200, 5}, + {-30001, 21, 10000, 1201, 888}, + 5, + 5, + IMM_SWORD_EACH_MOST, + 0}, + {{2001, -1928}, + {2000, 1928, 3000, 2289, 4000, 111, 2002, -1928}, + 2, + 9, + IMM_SWORD_ANY_LEAST_MASKED_NEGATIVE, + 0}, +}; + + +#define MM_CMPESTRA_UBYTE_TEST_CASES(_, ...) \ + _(UBYTE_ORDERED_MOST, __VA_ARGS__) \ + _(UBYTE_EACH_LEAST_NEGATIVE, __VA_ARGS__) \ + _(UBYTE_ANY_LEAST_MASKED_NEGATIVE, __VA_ARGS__) + +#define MM_CMPESTRA_SBYTE_TEST_CASES(_, ...) \ + _(SBYTE_RANGES_LEAST, __VA_ARGS__) \ + _(SBYTE_ORDERED_MOST_NEGATIVE, __VA_ARGS__) \ + _(SBYTE_ANY_LEAST, __VA_ARGS__) + +#define MM_CMPESTRA_UWORD_TEST_CASES(_, ...) \ + _(UWORD_ORDERED_LEAST, __VA_ARGS__) \ + _(UWORD_RANGES_LEAST_MASKED_NEGATIVE, __VA_ARGS__) \ + _(UWORD_EACH_MOST, __VA_ARGS__) + +#define MM_CMPESTRA_SWORD_TEST_CASES(_, ...) \ + _(SWORD_RANGES_LEAST_NEGATIVE, __VA_ARGS__) \ + _(SWORD_EACH_MOST, __VA_ARGS__) \ + _(SWORD_ANY_LEAST_MASKED_NEGATIVE, __VA_ARGS__) + +#define GENERATE_MM_CMPESTRA_TEST_CASES \ + ENUM_MM_CMPESTRX_TEST_CASES(UBYTE, ubyte, uint8_t, cmpestra, CMPESTRA, \ + IS_CMPESTRI) \ + ENUM_MM_CMPESTRX_TEST_CASES(SBYTE, sbyte, int8_t, cmpestra, CMPESTRA, \ + IS_CMPESTRI) \ + ENUM_MM_CMPESTRX_TEST_CASES(UWORD, uword, uint16_t, cmpestra, CMPESTRA, \ + IS_CMPESTRI) \ + ENUM_MM_CMPESTRX_TEST_CASES(SWORD, sword, int16_t, cmpestra, CMPESTRA, \ + IS_CMPESTRI) + +result_t test_mm_cmpestra(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + GENERATE_MM_CMPESTRA_TEST_CASES + return TEST_SUCCESS; +} + +#define TEST_MM_CMPESTRC_UBYTE_DATA_LEN 4 +static test_mm_cmpestri_ubyte_data_t + test_mm_cmpestrc_ubyte_data[TEST_MM_CMPESTRC_UBYTE_DATA_LEN] = { + {{66, 3, 3, 65}, + {66, 3, 3, 65, 67, 2, 2, 67, 56, 11, 1, 23, 66, 3, 3, 65}, + 4, + 16, + IMM_UBYTE_ORDERED_MOST_MASKED_NEGATIVE, + 1}, + {{1, 11, 2, 22, 3, 33, 4, 44, 5, 55, 6, 66, 7, 77, 8, 88}, + {2, 22, 3, 23, 5, 66, 255, 43, 6, 66, 7, 77, 9, 99, 10, 100}, + 16, + 16, + IMM_UBYTE_EACH_MOST, + 0}, + {{36, 72, 108}, {12, 24, 48, 96, 77, 84}, 3, 6, IMM_UBYTE_ANY_LEAST, 0}, + {{12, 24, 36, 48}, + {11, 49, 50, 56, 77, 15, 10}, + 4, + 7, + IMM_UBYTE_RANGES_LEAST_NEGATIVE, + 1}, +}; + +#define TEST_MM_CMPESTRC_SBYTE_DATA_LEN 4 +static test_mm_cmpestri_sbyte_data_t + test_mm_cmpestrc_sbyte_data[TEST_MM_CMPESTRC_SBYTE_DATA_LEN] = { + {{-22, -30, 40, 45}, + {-31, -32, 46, 77}, + 4, + 4, + IMM_SBYTE_RANGES_MOST, + 0}, + {{-12, -7, 33, 100, 12}, + {-12, -7, 33, 100, 11, -11, -7, 33, 100, 12}, + 5, + 10, + IMM_SBYTE_ORDERED_MOST_MASKED_NEGATIVE, + 1}, + {{1, 2, 3, 4, 5, -1, -2, -3, -4, -5}, + {1, 2, 3, 4, 5, -1, -2, -3, -5}, + 10, + 9, + IMM_SBYTE_ANY_MOST_MASKED_NEGATIVE, + 0}, + {{101, -128, -88, -76, 89, 109, 44, -12, -45, -100, 22, 1, 91}, + {102, -120, 88, -76, 98, 107, 33, 12, 45, -100, 22, 10, 19}, + 13, + 13, + IMM_SBYTE_EACH_MOST, + 1}, +}; + +#define TEST_MM_CMPESTRC_UWORD_DATA_LEN 4 +static test_mm_cmpestri_uword_data_t + test_mm_cmpestrc_uword_data[TEST_MM_CMPESTRC_UWORD_DATA_LEN] = { + {{1000, 2000, 4000, 8000, 16000}, + {40001, 1000, 2000, 40000, 8000, 16000}, + 5, + 6, + IMM_UWORD_ORDERED_LEAST_NEGATIVE, + 1}, + {{1111, 1212}, + {1110, 1213, 1110, 1214, 1100, 1220, 1000, 1233}, + 2, + 8, + IMM_UWORD_RANGES_MOST, + 0}, + {{10000, 9000, 8000, 7000, 6000, 5000, 4000, 3000}, + {9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000}, + 13, + 13, + IMM_UWORD_EACH_LEAST_MASKED_NEGATIVE, + 1}, + {{12}, {11, 13, 14, 15, 10}, 1, 5, IMM_UWORD_ANY_MOST, 0}, +}; + +#define TEST_MM_CMPESTRC_SWORD_DATA_LEN 4 +static test_mm_cmpestri_sword_data_t + test_mm_cmpestrc_sword_data[TEST_MM_CMPESTRC_SWORD_DATA_LEN] = { + {{-100, -90, -80, -66, 1}, + {-101, -102, -1000, 2, 67, 10000}, + 5, + 6, + IMM_SWORD_RANGES_LEAST, + 0}, + {{12, 13, -700, 888, 44, -987, 19}, + {12, 13, -700, 888, 44, -987, 19}, + 7, + 7, + IMM_SWORD_EACH_MOST_NEGATIVE, + 0}, + {{2001, -1992, 1995, 10007, 2000}, + {2000, 1928, 3000, 9822, 5000, 1111, 2002, -1928}, + 5, + 9, + IMM_SWORD_ANY_LEAST_NEGATIVE, + 1}, + {{13, -26, 39}, + {12, -25, 33, 13, -26, 39}, + 3, + 6, + IMM_SWORD_ORDERED_MOST, + 1}, +}; + + +#define MM_CMPESTRC_UBYTE_TEST_CASES(_, ...) \ + _(UBYTE_ORDERED_MOST_MASKED_NEGATIVE, __VA_ARGS__) \ + _(UBYTE_EACH_MOST, __VA_ARGS__) \ + _(UBYTE_ANY_LEAST, __VA_ARGS__) \ + _(UBYTE_RANGES_LEAST_NEGATIVE, __VA_ARGS__) + +#define MM_CMPESTRC_SBYTE_TEST_CASES(_, ...) \ + _(SBYTE_RANGES_MOST, __VA_ARGS__) \ + _(SBYTE_ORDERED_MOST_MASKED_NEGATIVE, __VA_ARGS__) \ + _(SBYTE_ANY_MOST_MASKED_NEGATIVE, __VA_ARGS__) \ + _(SBYTE_EACH_MOST, __VA_ARGS__) + +#define MM_CMPESTRC_UWORD_TEST_CASES(_, ...) \ + _(UWORD_ORDERED_LEAST_NEGATIVE, __VA_ARGS__) \ + _(UWORD_RANGES_MOST, __VA_ARGS__) \ + _(UWORD_EACH_LEAST_MASKED_NEGATIVE, __VA_ARGS__) \ + _(UWORD_ANY_MOST, __VA_ARGS__) + +#define MM_CMPESTRC_SWORD_TEST_CASES(_, ...) \ + _(SWORD_RANGES_LEAST, __VA_ARGS__) \ + _(SWORD_EACH_MOST_NEGATIVE, __VA_ARGS__) \ + _(SWORD_ANY_LEAST_NEGATIVE, __VA_ARGS__) \ + _(SWORD_ORDERED_MOST, __VA_ARGS__) + +#define GENERATE_MM_CMPESTRC_TEST_CASES \ + ENUM_MM_CMPESTRX_TEST_CASES(UBYTE, ubyte, uint8_t, cmpestrc, CMPESTRC, \ + IS_CMPESTRI) \ + ENUM_MM_CMPESTRX_TEST_CASES(SBYTE, sbyte, int8_t, cmpestrc, CMPESTRC, \ + IS_CMPESTRI) \ + ENUM_MM_CMPESTRX_TEST_CASES(UWORD, uword, uint16_t, cmpestrc, CMPESTRC, \ + IS_CMPESTRI) \ + ENUM_MM_CMPESTRX_TEST_CASES(SWORD, sword, int16_t, cmpestrc, CMPESTRC, \ + IS_CMPESTRI) + +result_t test_mm_cmpestrc(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + GENERATE_MM_CMPESTRC_TEST_CASES + return TEST_SUCCESS; +} + +#define TEST_MM_CMPESTRI_UBYTE_DATA_LEN 4 +static test_mm_cmpestri_ubyte_data_t + test_mm_cmpestri_ubyte_data[TEST_MM_CMPESTRI_UBYTE_DATA_LEN] = { + {{23, 89, 255, 0, 90, 45, 67, 12, 1, 56, 200, 141, 3, 4, 2, 76}, + {32, 89, 255, 128, 9, 54, 78, 12, 1, 56, 100, 41, 42, 68, 32, 5}, + 16, + 16, + IMM_UBYTE_ANY_LEAST_NEGATIVE, + 0}, + {{0, 83, 112, 12, 221, 54, 76, 83, 112, 10}, + {0, 83, 112, 83, 122, 45, 67, 83, 112, 9}, + 10, + 10, + IMM_UBYTE_EACH_LEAST, + 0}, + {{34, 78, 12}, + {56, 100, 11, 67, 35, 79, 67, 255, 0, 43, 121, 234, 225, 91, 31, 23}, + 3, + 16, + IMM_UBYTE_RANGES_LEAST, + 0}, + {{13, 10, 9, 32, 105, 103, 110, 111, 114, 101, 32, 116, 104, 105, 115, + 32}, + {83, 112, 108, 105, 116, 32, 13, 10, 9, 32, 108, 105, 110, 101, 32, + 32}, + 3, + 15, + IMM_UBYTE_ORDERED_LEAST, + 6}, +}; + +#define TEST_MM_CMPESTRI_SBYTE_DATA_LEN 4 +static test_mm_cmpestri_sbyte_data_t + test_mm_cmpestri_sbyte_data[TEST_MM_CMPESTRI_SBYTE_DATA_LEN] = { + {{-12, -1, 90, -128, 43, 6, 87, 127}, + {-1, -1, 9, -127, 126, 6, 78, 23}, + 8, + 8, + IMM_SBYTE_EACH_LEAST, + 1}, + {{34, 67, -90, 33, 123, -100, 43, 56}, + {43, 76, -90, 44, 20, -100, 54, 56}, + 8, + 8, + IMM_SBYTE_ANY_LEAST, + 0}, + {{-43, 67, 89}, + {-44, -54, -30, -128, 127, 34, 10, -62}, + 3, + 7, + IMM_SBYTE_RANGES_LEAST, + 2}, + {{90, 34, -32, 0, 5}, + {19, 34, -32, 90, 34, -32, 45, 0, 5, 90, 34, -32, 0, 5, 19, 87}, + 3, + 16, + IMM_SBYTE_ORDERED_LEAST, + 3}, +}; + +#define TEST_MM_CMPESTRI_UWORD_DATA_LEN 4 +static test_mm_cmpestri_uword_data_t + test_mm_cmpestri_uword_data[TEST_MM_CMPESTRI_UWORD_DATA_LEN] = { + {{45, 65535, 0, 87, 1000, 10, 45, 26}, + {65534, 0, 0, 78, 1000, 10, 32, 26}, + 8, + 8, + IMM_UWORD_EACH_LEAST, + 2}, + {{45, 23, 10, 54, 88, 10000, 20000, 100}, + {544, 10000, 20000, 1, 0, 2897, 2330, 2892}, + 8, + 8, + IMM_UWORD_ANY_LEAST, + 1}, + {{10000, 15000}, + {12, 45, 67, 899, 10001, 32, 15001, 15000}, + 2, + 8, + IMM_UWORD_RANGES_LEAST, + 4}, + {{0, 1, 54, 89, 100}, + {101, 102, 65535, 0, 1, 54, 89, 100}, + 5, + 8, + IMM_UWORD_ORDERED_LEAST, + 3}, +}; + +#define TEST_MM_CMPESTRI_SWORD_DATA_LEN 4 +static test_mm_cmpestri_sword_data_t + test_mm_cmpestri_sword_data[TEST_MM_CMPESTRI_SWORD_DATA_LEN] = { + {{13, 6, 5, 4, 3, 2, 1, 3}, + {-7, 16, 5, 4, -1, 6, 1, 3}, + 10, + 10, + IMM_SWORD_RANGES_MOST, + 7}, + {{13, 6, 5, 4, 3, 2, 1, 3}, + {-7, 16, 5, 4, -1, 6, 1, 3}, + 8, + 8, + IMM_SWORD_EACH_LEAST, + 2}, + {{-32768, 90, 455, 67, -1000, -10000, 21, 12}, + {-7, 61, 455, 67, -32768, 32767, 11, 888}, + 8, + 8, + IMM_SWORD_ANY_LEAST, + 2}, + {{-12, -56}, + {-7, 16, 555, 554, -12, 61, -16, 3}, + 2, + 8, + IMM_SWORD_ORDERED_LEAST, + 8}, +}; + +#define MM_CMPESTRI_UBYTE_TEST_CASES(_, ...) \ + _(UBYTE_ANY_LEAST_NEGATIVE, __VA_ARGS__) \ + _(UBYTE_EACH_LEAST, __VA_ARGS__) \ + _(UBYTE_RANGES_LEAST, __VA_ARGS__) \ + _(UBYTE_ORDERED_LEAST, __VA_ARGS__) + +#define MM_CMPESTRI_SBYTE_TEST_CASES(_, ...) \ + _(SBYTE_EACH_LEAST, __VA_ARGS__) \ + _(SBYTE_ANY_LEAST, __VA_ARGS__) \ + _(SBYTE_RANGES_LEAST, __VA_ARGS__) \ + _(SBYTE_ORDERED_LEAST, __VA_ARGS__) + +#define MM_CMPESTRI_UWORD_TEST_CASES(_, ...) \ + _(UWORD_EACH_LEAST, __VA_ARGS__) \ + _(UWORD_ANY_LEAST, __VA_ARGS__) \ + _(UWORD_RANGES_LEAST, __VA_ARGS__) \ + _(UWORD_ORDERED_LEAST, __VA_ARGS__) + +#define MM_CMPESTRI_SWORD_TEST_CASES(_, ...) \ + _(SWORD_RANGES_MOST, __VA_ARGS__) \ + _(SWORD_EACH_LEAST, __VA_ARGS__) \ + _(SWORD_ANY_LEAST, __VA_ARGS__) \ + _(SWORD_ORDERED_LEAST, __VA_ARGS__) + +#define GENERATE_MM_CMPESTRI_TEST_CASES \ + ENUM_MM_CMPESTRX_TEST_CASES(UBYTE, ubyte, uint8_t, cmpestri, CMPESTRI, \ + IS_CMPESTRI) \ + ENUM_MM_CMPESTRX_TEST_CASES(SBYTE, sbyte, int8_t, cmpestri, CMPESTRI, \ + IS_CMPESTRI) \ + ENUM_MM_CMPESTRX_TEST_CASES(UWORD, uword, uint16_t, cmpestri, CMPESTRI, \ + IS_CMPESTRI) \ + ENUM_MM_CMPESTRX_TEST_CASES(SWORD, sword, int16_t, cmpestri, CMPESTRI, \ + IS_CMPESTRI) + +result_t test_mm_cmpestri(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + GENERATE_MM_CMPESTRI_TEST_CASES + return TEST_SUCCESS; +} + +#define IS_CMPESTRM 0 + +typedef struct { + uint8_t a[16], b[16]; + int la, lb; + const int imm8; + uint8_t expect[16]; +} test_mm_cmpestrm_ubyte_data_t; +typedef struct { + int8_t a[16], b[16]; + int la, lb; + const int imm8; + int8_t expect[16]; +} test_mm_cmpestrm_sbyte_data_t; +typedef struct { + uint16_t a[8], b[8]; + int la, lb; + const int imm8; + uint16_t expect[8]; +} test_mm_cmpestrm_uword_data_t; +typedef struct { + int16_t a[8], b[8]; + int la, lb; + const int imm8; + int16_t expect[8]; +} test_mm_cmpestrm_sword_data_t; + +#define IMM_UBYTE_EACH_UNIT \ + (_SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_UNIT_MASK) +#define IMM_UBYTE_EACH_UNIT_NEGATIVE \ + (_SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_UNIT_MASK | \ + _SIDD_NEGATIVE_POLARITY) +#define IMM_UBYTE_ANY_UNIT \ + (_SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_UNIT_MASK) +#define IMM_UBYTE_ANY_BIT \ + (_SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_BIT_MASK) +#define IMM_UBYTE_RANGES_UNIT \ + (_SIDD_UBYTE_OPS | _SIDD_CMP_RANGES | _SIDD_UNIT_MASK) +#define IMM_UBYTE_ORDERED_UNIT \ + (_SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_ORDERED | _SIDD_UNIT_MASK) + +#define IMM_SBYTE_EACH_UNIT \ + (_SIDD_SBYTE_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_UNIT_MASK) +#define IMM_SBYTE_EACH_BIT_MASKED_NEGATIVE \ + (_SIDD_SBYTE_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_BIT_MASK | \ + _SIDD_MASKED_NEGATIVE_POLARITY) +#define IMM_SBYTE_ANY_UNIT \ + (_SIDD_SBYTE_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_UNIT_MASK) +#define IMM_SBYTE_ANY_UNIT_MASKED_NEGATIVE \ + (_SIDD_SBYTE_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_UNIT_MASK | \ + _SIDD_MASKED_NEGATIVE_POLARITY) +#define IMM_SBYTE_RANGES_UNIT \ + (_SIDD_SBYTE_OPS | _SIDD_CMP_RANGES | _SIDD_UNIT_MASK) +#define IMM_SBYTE_ORDERED_UNIT \ + (_SIDD_SBYTE_OPS | _SIDD_CMP_EQUAL_ORDERED | _SIDD_UNIT_MASK) + +#define IMM_UWORD_RANGES_UNIT \ + (_SIDD_UWORD_OPS | _SIDD_CMP_RANGES | _SIDD_UNIT_MASK) +#define IMM_UWORD_EACH_UNIT \ + (_SIDD_UWORD_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_UNIT_MASK) +#define IMM_UWORD_ANY_UNIT \ + (_SIDD_UWORD_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_UNIT_MASK) +#define IMM_UWORD_ANY_BIT \ + (_SIDD_UWORD_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_BIT_MASK) +#define IMM_UWORD_ORDERED_UNIT \ + (_SIDD_UWORD_OPS | _SIDD_CMP_EQUAL_ORDERED | _SIDD_UNIT_MASK) +#define IMM_UWORD_ORDERED_UNIT_NEGATIVE \ + (_SIDD_UWORD_OPS | _SIDD_CMP_EQUAL_ORDERED | _SIDD_UNIT_MASK | \ + _SIDD_NEGATIVE_POLARITY) + +#define IMM_SWORD_RANGES_UNIT \ + (_SIDD_SWORD_OPS | _SIDD_CMP_RANGES | _SIDD_UNIT_MASK) +#define IMM_SWORD_RANGES_BIT \ + (_SIDD_SWORD_OPS | _SIDD_CMP_RANGES | _SIDD_BIT_MASK) +#define IMM_SWORD_EACH_UNIT \ + (_SIDD_SWORD_OPS | _SIDD_CMP_EQUAL_EACH | _SIDD_UNIT_MASK) +#define IMM_SWORD_ANY_UNIT \ + (_SIDD_SWORD_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_UNIT_MASK) +#define IMM_SWORD_ORDERED_UNIT \ + (_SIDD_SWORD_OPS | _SIDD_CMP_EQUAL_ORDERED | _SIDD_UNIT_MASK) + +#define TEST_MM_CMPESTRM_UBYTE_DATA_LEN 4 +static test_mm_cmpestrm_ubyte_data_t + test_mm_cmpestrm_ubyte_data[TEST_MM_CMPESTRM_UBYTE_DATA_LEN] = { + {{85, 115, 101, 70, 108, 97, 116, 65, 115, 115, 101, 109, 98, 108, 101, + 114}, + {85, 115, 105, 110, 103, 65, 110, 65, 115, 115, 101, 109, 98, 108, 101, + 114}, + 16, + 16, + IMM_UBYTE_EACH_UNIT_NEGATIVE, + {0, 0, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + {{97, 101, 105, 111, 117, 121}, + {89, 111, 117, 32, 68, 114, 105, 118, 101, 32, 77, 101, 32, 77, 97, + 100}, + 6, + 16, + IMM_UBYTE_ANY_UNIT, + {0, 255, 255, 0, 0, 0, 255, 0, 255, 0, 0, 255, 0, 0, 255, 0}}, + {{97, 122, 65, 90}, + {73, 39, 109, 32, 104, 101, 114, 101, 32, 98, 101, 99, 97, 117, 115, + 101}, + 4, + 16, + IMM_UBYTE_RANGES_UNIT, + {255, 0, 255, 0, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, + 255}}, + {{87, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {87, 104, 101, 110, 87, 101, 87, 105, 108, 108, 66, 101, 87, 101, 100, + 33}, + 2, + 16, + IMM_UBYTE_ORDERED_UNIT, + {0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0}}, +}; + +#define TEST_MM_CMPESTRM_SBYTE_DATA_LEN 4 +static test_mm_cmpestrm_sbyte_data_t + test_mm_cmpestrm_sbyte_data[TEST_MM_CMPESTRM_SBYTE_DATA_LEN] = { + {{-127, -127, 34, 88, 0, 1, -1, 78, 90, 9, 23, 34, 3, -128, 127, 0}, + {0, -127, 34, 88, 12, 43, -128, 78, 8, 9, 43, 32, 7, 126, 115, 0}, + 16, + 16, + IMM_SBYTE_EACH_UNIT, + {0, -1, -1, -1, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, 0, -1}}, + {{0, 32, 7, 115, -128, 44, 33}, + {0, -127, 34, 88, 12, 43, -128, 78, 8, 9, 43, 32, 7, 126, 115, 0}, + 7, + 10, + IMM_SBYTE_ANY_UNIT_MASKED_NEGATIVE, + {0, -1, -1, -1, -1, -1, 0, -1, -1, -1, 0, 0, 0, 0, 0, 0}}, + {{-128, -80, -90, 10, 33}, + {-126, -93, -80, -77, -56, -23, -10, -1, 0, 3, 10, 12, 13, 33, 34, 56}, + 5, + 16, + IMM_SBYTE_RANGES_UNIT, + {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0}}, + {{104, 9, -12}, + {0, 0, 87, 104, 9, -12, 89, -117, 9, 10, -11, 87, -114, 104, 9, -61}, + 3, + 16, + IMM_SBYTE_ORDERED_UNIT, + {0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +}; + +#define TEST_MM_CMPESTRM_UWORD_DATA_LEN 4 +static test_mm_cmpestrm_uword_data_t + test_mm_cmpestrm_uword_data[TEST_MM_CMPESTRM_UWORD_DATA_LEN] = { + {{1, 5, 13, 19, 22}, + {12, 60000, 5, 1, 100, 1000, 34, 20}, + 5, + 8, + IMM_UWORD_RANGES_UNIT, + {0, 0, 65535, 65535, 0, 0, 0, 0}}, + {{65535, 12, 7, 9876, 3456, 12345, 10, 98}, + {65535, 0, 10, 9876, 3456, 0, 13, 32}, + 8, + 8, + IMM_UWORD_EACH_UNIT, + {65535, 0, 0, 65535, 65535, 0, 0, 0}}, + {{100, 0}, + {12345, 6766, 234, 0, 1, 34, 89, 100}, + 2, + 8, + IMM_UWORD_ANY_BIT, + {136, 0, 0, 0, 0, 0, 0, 0}}, + {{123, 67, 890}, + {123, 67, 890, 8900, 4, 0, 123, 67}, + 3, + 8, + IMM_UWORD_ORDERED_UNIT, + {65535, 0, 0, 0, 0, 0, 65535, 0}}, +}; + +#define TEST_MM_CMPESTRM_SWORD_DATA_LEN 4 +static test_mm_cmpestrm_sword_data_t + test_mm_cmpestrm_sword_data[TEST_MM_CMPESTRM_SWORD_DATA_LEN] = { + {{13, 6, 5, 4, 3, 2, 1, 3}, + {-7, 16, 5, 4, -1, 6, 1, 3}, + 10, + 10, + IMM_SWORD_RANGES_UNIT, + {0, 0, 0, 0, 0, 0, -1, -1}}, + {{85, 115, 101, 70, 108, 97, 116, 65}, + {85, 115, 105, 110, 103, 65, 110, 65}, + 8, + 8, + IMM_SWORD_EACH_UNIT, + {-1, -1, 0, 0, 0, 0, 0, -1}}, + {{-32768, 10000, 10, -13}, + {-32767, 32767, -32768, 90, 0, -13, 23, 45}, + 4, + 8, + IMM_SWORD_ANY_UNIT, + {0, 0, -1, 0, 0, -1, 0, 0}}, + {{10, 20, -10, 60}, + {0, 0, 0, 10, 20, -10, 60, 10}, + 4, + 8, + IMM_SWORD_ORDERED_UNIT, + {0, 0, 0, -1, 0, 0, 0, -1}}, +}; + +#define MM_CMPESTRM_UBYTE_TEST_CASES(_, ...) \ + _(UBYTE_EACH_UNIT_NEGATIVE, __VA_ARGS__) \ + _(UBYTE_ANY_UNIT, __VA_ARGS__) \ + _(UBYTE_RANGES_UNIT, __VA_ARGS__) \ + _(UBYTE_ORDERED_UNIT, __VA_ARGS__) + +#define MM_CMPESTRM_SBYTE_TEST_CASES(_, ...) \ + _(SBYTE_EACH_UNIT, __VA_ARGS__) \ + _(SBYTE_ANY_UNIT_MASKED_NEGATIVE, __VA_ARGS__) \ + _(SBYTE_RANGES_UNIT, __VA_ARGS__) \ + _(SBYTE_ORDERED_UNIT, __VA_ARGS__) + +#define MM_CMPESTRM_UWORD_TEST_CASES(_, ...) \ + _(UWORD_RANGES_UNIT, __VA_ARGS__) \ + _(UWORD_EACH_UNIT, __VA_ARGS__) \ + _(UWORD_ANY_BIT, __VA_ARGS__) \ + _(UWORD_ORDERED_UNIT, __VA_ARGS__) + +#define MM_CMPESTRM_SWORD_TEST_CASES(_, ...) \ + _(SWORD_RANGES_UNIT, __VA_ARGS__) \ + _(SWORD_EACH_UNIT, __VA_ARGS__) \ + _(SWORD_ANY_UNIT, __VA_ARGS__) \ + _(SWORD_ORDERED_UNIT, __VA_ARGS__) + +#define GENERATE_MM_CMPESTRM_TEST_CASES \ + ENUM_MM_CMPESTRX_TEST_CASES(UBYTE, ubyte, uint8_t, cmpestrm, CMPESTRM, \ + IS_CMPESTRM) \ + ENUM_MM_CMPESTRX_TEST_CASES(SBYTE, sbyte, int8_t, cmpestrm, CMPESTRM, \ + IS_CMPESTRM) \ + ENUM_MM_CMPESTRX_TEST_CASES(UWORD, uword, uint16_t, cmpestrm, CMPESTRM, \ + IS_CMPESTRM) \ + ENUM_MM_CMPESTRX_TEST_CASES(SWORD, sword, int16_t, cmpestrm, CMPESTRM, \ + IS_CMPESTRM) + +result_t test_mm_cmpestrm(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + GENERATE_MM_CMPESTRM_TEST_CASES + return TEST_SUCCESS; +} + +#undef IS_CMPESTRM + +#define TEST_MM_CMPESTRO_UBYTE_DATA_LEN 4 +static test_mm_cmpestri_ubyte_data_t + test_mm_cmpestro_ubyte_data[TEST_MM_CMPESTRO_UBYTE_DATA_LEN] = { + {{56, 78, 255, 1, 9}, + {56, 78, 43, 255, 1, 6, 9}, + 5, + 7, + IMM_UBYTE_ANY_MOST_NEGATIVE, + 0}, + {{33, 44, 100, 24, 3, 89, 127, 254, 33, 45, 250}, + {33, 44, 100, 22, 3, 98, 125, 254, 33, 4, 243}, + 11, + 11, + IMM_UBYTE_EACH_LEAST_MASKED_NEGATIVE, + 0}, + {{34, 27, 18, 9}, {}, 4, 16, IMM_UBYTE_RANGES_LEAST_MASKED_NEGATIVE, 1}, + {{3, 18, 216}, + {3, 18, 222, 3, 17, 216, 3, 18, 216}, + 3, + 9, + IMM_UBYTE_ORDERED_LEAST_NEGATIVE, + 1}, +}; + +#define TEST_MM_CMPESTRO_SBYTE_DATA_LEN 4 +static test_mm_cmpestri_sbyte_data_t + test_mm_cmpestro_sbyte_data[TEST_MM_CMPESTRO_SBYTE_DATA_LEN] = { + {{23, -23, 24, -24, 25, -25, 26, -26, 27, -27, 28, -28, -29, 29, 30, + 31}, + {24, -23, 25, -24, 25, -25, 26, -26, 27, -27, 28, -28, -29, 29, 30, + 31}, + 16, + 16, + IMM_SBYTE_EACH_MOST_NEGATIVE, + 1}, + {{34, 33, 67, 72, -90, 127, 33, -128, 123, -90, -100, 34, 43, 15, 56, + 3}, + {3, 14, 15, 65, 90, -127, 100, 100}, + 16, + 8, + IMM_SBYTE_ANY_MOST, + 1}, + {{-13, 0, 34}, + {-12, -11, 1, 12, 56, 57, 3, 2, -17}, + 6, + 9, + IMM_SBYTE_RANGES_MOST_MASKED_NEGATIVE, + 0}, + {{1, 2, 3, 4, 5, 6, 7, 8}, + {-1, -2, -3, -4, -5, -6, -7, -8, 1, 2, 3, 4, 5, 6, 7, 8}, + 8, + 16, + IMM_SBYTE_ORDERED_MOST, + 0}, +}; + +#define TEST_MM_CMPESTRO_UWORD_DATA_LEN 4 +static test_mm_cmpestri_uword_data_t + test_mm_cmpestro_uword_data[TEST_MM_CMPESTRO_UWORD_DATA_LEN] = { + {{0, 0, 0, 4, 4, 4, 8, 8}, + {0, 0, 0, 3, 3, 16653, 3333, 222}, + 8, + 8, + IMM_UWORD_EACH_MOST_MASKED_NEGATIVE, + 0}, + {{12, 666, 9456, 10000, 32, 444, 57, 0}, + {11, 777, 9999, 32767, 23}, + 8, + 5, + IMM_UWORD_ANY_LEAST_MASKED_NEGATIVE, + 1}, + {{23, 32, 45, 67}, + {10022, 23, 32, 44, 66, 67, 12, 22}, + 4, + 8, + IMM_UWORD_RANGES_LEAST_NEGATIVE, + 1}, + {{222, 45, 8989}, + {221, 222, 45, 8989, 222, 45, 8989}, + 3, + 7, + IMM_UWORD_ORDERED_MOST, + 0}, +}; + +#define TEST_MM_CMPESTRO_SWORD_DATA_LEN 4 +static test_mm_cmpestri_sword_data_t + test_mm_cmpestro_sword_data[TEST_MM_CMPESTRO_SWORD_DATA_LEN] = { + {{-9999, -9487, -5000, -4433, -3000, -2999, -2000, -1087}, + {-32767, -30000, -4998}, + 100, + 3, + IMM_SWORD_RANGES_MOST_MASKED_NEGATIVE, + 1}, + {{-30, 89, 7777}, + {-30, 89, 7777}, + 3, + 3, + IMM_SWORD_EACH_MOST_MASKED_NEGATIVE, + 0}, + {{8, 9, -100, 1000, -5000, -32000, 32000, 7}, + {29999, 32001, 5, 555}, + 8, + 4, + IMM_SWORD_ANY_MOST_MASKED_NEGATIVE, + 1}, + {{-1, 56, -888, 9000, -23, 12, -1, -1}, + {-1, 56, -888, 9000, -23, 12, -1, -1}, + 8, + 8, + IMM_SWORD_ORDERED_MOST_MASKED_NEGATIVE, + 0}, +}; + +#define MM_CMPESTRO_UBYTE_TEST_CASES(_, ...) \ + _(UBYTE_ANY_MOST_NEGATIVE, __VA_ARGS__) \ + _(UBYTE_EACH_LEAST_MASKED_NEGATIVE, __VA_ARGS__) \ + _(UBYTE_RANGES_LEAST_MASKED_NEGATIVE, __VA_ARGS__) \ + _(UBYTE_ORDERED_LEAST_NEGATIVE, __VA_ARGS__) + +#define MM_CMPESTRO_SBYTE_TEST_CASES(_, ...) \ + _(SBYTE_EACH_MOST_NEGATIVE, __VA_ARGS__) \ + _(SBYTE_ANY_MOST, __VA_ARGS__) \ + _(SBYTE_RANGES_MOST_MASKED_NEGATIVE, __VA_ARGS__) \ + _(SBYTE_ORDERED_MOST, __VA_ARGS__) + +#define MM_CMPESTRO_UWORD_TEST_CASES(_, ...) \ + _(UWORD_EACH_MOST_MASKED_NEGATIVE, __VA_ARGS__) \ + _(UWORD_ANY_LEAST_MASKED_NEGATIVE, __VA_ARGS__) \ + _(UWORD_RANGES_LEAST_NEGATIVE, __VA_ARGS__) \ + _(UWORD_ORDERED_MOST, __VA_ARGS__) + +#define MM_CMPESTRO_SWORD_TEST_CASES(_, ...) \ + _(SWORD_RANGES_MOST_MASKED_NEGATIVE, __VA_ARGS__) \ + _(SWORD_EACH_MOST_MASKED_NEGATIVE, __VA_ARGS__) \ + _(SWORD_ANY_MOST_MASKED_NEGATIVE, __VA_ARGS__) \ + _(SWORD_ORDERED_MOST_MASKED_NEGATIVE, __VA_ARGS__) + +#define GENERATE_MM_CMPESTRO_TEST_CASES \ + ENUM_MM_CMPESTRX_TEST_CASES(UBYTE, ubyte, uint8_t, cmpestro, CMPESTRO, \ + IS_CMPESTRI) \ + ENUM_MM_CMPESTRX_TEST_CASES(SBYTE, sbyte, int8_t, cmpestro, CMPESTRO, \ + IS_CMPESTRI) \ + ENUM_MM_CMPESTRX_TEST_CASES(UWORD, uword, uint16_t, cmpestro, CMPESTRO, \ + IS_CMPESTRI) \ + ENUM_MM_CMPESTRX_TEST_CASES(SWORD, sword, int16_t, cmpestro, CMPESTRO, \ + IS_CMPESTRI) + +result_t test_mm_cmpestro(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + GENERATE_MM_CMPESTRO_TEST_CASES + return TEST_SUCCESS; +} + +#define TEST_MM_CMPESTRS_UBYTE_DATA_LEN 2 +static test_mm_cmpestri_ubyte_data_t + test_mm_cmpestrs_ubyte_data[TEST_MM_CMPESTRS_UBYTE_DATA_LEN] = { + {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}, + {0}, + 16, + 0, + IMM_UBYTE_ANY_MOST, + 0}, + {{1, 2, 3}, {1, 2, 3}, 3, 8, IMM_UBYTE_RANGES_MOST, 1}, +}; + +#define TEST_MM_CMPESTRS_SBYTE_DATA_LEN 2 +static test_mm_cmpestri_sbyte_data_t + test_mm_cmpestrs_sbyte_data[TEST_MM_CMPESTRS_SBYTE_DATA_LEN] = { + {{-1, -2, -3, -4, -100, 100, 1, 2, 3, 4}, + {-90, -80, 111, 67, 88}, + 10, + 5, + IMM_SBYTE_EACH_LEAST_MASKED_NEGATIVE, + 1}, + {{99, 100, 101, -99, -100, -101, 56, 7}, + {-128, -126, 100, 127}, + 23, + 4, + IMM_SBYTE_ORDERED_LEAST_MASKED_NEGATIVE, + 0}, +}; + +#define TEST_MM_CMPESTRS_UWORD_DATA_LEN 2 +static test_mm_cmpestri_uword_data_t + test_mm_cmpestrs_uword_data[TEST_MM_CMPESTRS_UWORD_DATA_LEN] = { + {{1}, + {90, 65535, 63355, 12, 8, 5, 34, 10000}, + 100, + 7, + IMM_UWORD_ANY_MOST_NEGATIVE, + 0}, + {{}, {0}, 0, 28, IMM_UWORD_RANGES_MOST_MASKED_NEGATIVE, 1}, +}; + +#define TEST_MM_CMPESTRS_SWORD_DATA_LEN 2 +static test_mm_cmpestri_sword_data_t + test_mm_cmpestrs_sword_data[TEST_MM_CMPESTRS_SWORD_DATA_LEN] = { + {{-30000, 2897, 1111, -4455}, + {30, 40, 500, 6000, 20, -10, -789, -29999}, + 4, + 8, + IMM_SWORD_ORDERED_LEAST_MASKED_NEGATIVE, + 1}, + {{34, 56, 789, 1024, 2048, 4096, 8192, -16384}, + {3, 9, -27, 81, -216, 1011}, + 9, + 6, + IMM_SWORD_EACH_LEAST_NEGATIVE, + 0}, +}; + +#define MM_CMPESTRS_UBYTE_TEST_CASES(_, ...) \ + _(UBYTE_ANY_MOST, __VA_ARGS__) \ + _(UBYTE_RANGES_MOST, __VA_ARGS__) + +#define MM_CMPESTRS_SBYTE_TEST_CASES(_, ...) \ + _(SBYTE_EACH_LEAST_MASKED_NEGATIVE, __VA_ARGS__) \ + _(SBYTE_ORDERED_LEAST_MASKED_NEGATIVE, __VA_ARGS__) + +#define MM_CMPESTRS_UWORD_TEST_CASES(_, ...) \ + _(UWORD_ANY_MOST_NEGATIVE, __VA_ARGS__) \ + _(UWORD_RANGES_MOST_MASKED_NEGATIVE, __VA_ARGS__) + +#define MM_CMPESTRS_SWORD_TEST_CASES(_, ...) \ + _(SWORD_ANY_LEAST_MASKED_NEGATIVE, __VA_ARGS__) \ + _(SWORD_EACH_LEAST_NEGATIVE, __VA_ARGS__) + +#define GENERATE_MM_CMPESTRS_TEST_CASES \ + ENUM_MM_CMPESTRX_TEST_CASES(UBYTE, ubyte, uint8_t, cmpestrs, CMPESTRS, \ + IS_CMPESTRI) \ + ENUM_MM_CMPESTRX_TEST_CASES(SBYTE, sbyte, int8_t, cmpestrs, CMPESTRS, \ + IS_CMPESTRI) \ + ENUM_MM_CMPESTRX_TEST_CASES(UWORD, uword, uint16_t, cmpestrs, CMPESTRS, \ + IS_CMPESTRI) \ + ENUM_MM_CMPESTRX_TEST_CASES(SWORD, sword, int16_t, cmpestrs, CMPESTRS, \ + IS_CMPESTRI) + +result_t test_mm_cmpestrs(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + GENERATE_MM_CMPESTRS_TEST_CASES + return TEST_SUCCESS; +} + +#define TEST_MM_CMPESTRZ_UBYTE_DATA_LEN 2 +static test_mm_cmpestri_ubyte_data_t + test_mm_cmpestrz_ubyte_data[TEST_MM_CMPESTRZ_UBYTE_DATA_LEN] = { + {{0, 1, 2, 3, 4, 5, 6, 7}, + {12, 67, 0, 3}, + 8, + 4, + IMM_UBYTE_ANY_MOST_MASKED_NEGATIVE, + 1}, + {{255, 0, 127, 88}, + {1, 2, 4, 8, 16, 32, 64, 128, 254, 233, 209, 41, 66, 77, 90, 100}, + 4, + 16, + IMM_UBYTE_RANGES_MOST_MASKED_NEGATIVE, + 0}, +}; + +#define TEST_MM_CMPESTRZ_SBYTE_DATA_LEN 2 +static test_mm_cmpestri_sbyte_data_t + test_mm_cmpestrz_sbyte_data[TEST_MM_CMPESTRZ_SBYTE_DATA_LEN] = { + {{}, {-90, -80, 111, 67, 88}, 0, 18, IMM_SBYTE_EACH_LEAST_NEGATIVE, 0}, + {{9, 10, 10, -99, -100, -101, 56, 76}, + {-127, 127, -100, -120, 13, 108, 1, -66, -34, 89, -89, 123, 22, -19, + -8}, + 7, + 15, + IMM_SBYTE_ORDERED_LEAST_NEGATIVE, + 1}, +}; + +#define TEST_MM_CMPESTRZ_UWORD_DATA_LEN 2 +static test_mm_cmpestri_uword_data_t + test_mm_cmpestrz_uword_data[TEST_MM_CMPESTRZ_UWORD_DATA_LEN] = { + {{1}, + {9000, 33333, 63333, 120, 8, 55, 34, 100}, + 100, + 7, + IMM_UWORD_ANY_LEAST_NEGATIVE, + 1}, + {{1, 2, 3}, + {1, 10000, 65535, 8964, 9487, 32, 451, 666}, + 3, + 8, + IMM_UWORD_RANGES_MOST_NEGATIVE, + 0}, +}; + +#define TEST_MM_CMPESTRZ_SWORD_DATA_LEN 2 +static test_mm_cmpestri_sword_data_t + test_mm_cmpestrz_sword_data[TEST_MM_CMPESTRZ_SWORD_DATA_LEN] = { + {{30000, 28997, 11111, 4455}, + {30, 40, 500, 6000, 20, -10, -789, -29999}, + 4, + 8, + IMM_SWORD_ORDERED_LEAST_MASKED_NEGATIVE, + 0}, + {{789, 1024, 2048, 4096, 8192}, + {-3, 9, -27, 18, -217, 10111, 22222}, + 5, + 7, + IMM_SWORD_EACH_LEAST_MASKED_NEGATIVE, + 1}, +}; + +#define MM_CMPESTRZ_UBYTE_TEST_CASES(_, ...) \ + _(UBYTE_ANY_MOST, __VA_ARGS__) \ + _(UBYTE_RANGES_MOST, __VA_ARGS__) + +#define MM_CMPESTRZ_SBYTE_TEST_CASES(_, ...) \ + _(SBYTE_EACH_LEAST_NEGATIVE, __VA_ARGS__) \ + _(SBYTE_ORDERED_LEAST_NEGATIVE, __VA_ARGS__) + +#define MM_CMPESTRZ_UWORD_TEST_CASES(_, ...) \ + _(UWORD_ANY_LEAST_NEGATIVE, __VA_ARGS__) \ + _(UWORD_RANGES_MOST_NEGATIVE, __VA_ARGS__) + +#define MM_CMPESTRZ_SWORD_TEST_CASES(_, ...) \ + _(SWORD_ANY_LEAST_MASKED_NEGATIVE, __VA_ARGS__) \ + _(SWORD_EACH_LEAST_MASKED_NEGATIVE, __VA_ARGS__) + +#define GENERATE_MM_CMPESTRZ_TEST_CASES \ + ENUM_MM_CMPESTRX_TEST_CASES(UBYTE, ubyte, uint8_t, cmpestrz, CMPESTRZ, \ + IS_CMPESTRI) \ + ENUM_MM_CMPESTRX_TEST_CASES(SBYTE, sbyte, int8_t, cmpestrz, CMPESTRZ, \ + IS_CMPESTRI) \ + ENUM_MM_CMPESTRX_TEST_CASES(UWORD, uword, uint16_t, cmpestrz, CMPESTRZ, \ + IS_CMPESTRI) \ + ENUM_MM_CMPESTRX_TEST_CASES(SWORD, sword, int16_t, cmpestrz, CMPESTRZ, \ + IS_CMPESTRI) + +result_t test_mm_cmpestrz(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + GENERATE_MM_CMPESTRZ_TEST_CASES + return TEST_SUCCESS; +} + +#undef IS_CMPESTRI + +result_t test_mm_cmpgt_epi64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int64_t *_a = (const int64_t *) impl.mTestIntPointer1; + const int64_t *_b = (const int64_t *) impl.mTestIntPointer2; + + int64_t result[2]; + result[0] = _a[0] > _b[0] ? -1 : 0; + result[1] = _a[1] > _b[1] ? -1 : 0; + + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + __m128i iret = _mm_cmpgt_epi64(a, b); + + return validateInt64(iret, result[0], result[1]); +} + +#define IS_CMPISTRI 1 + +#define DEF_ENUM_MM_CMPISTRX_VARIANT(c, ...) c, + +#define EVAL_MM_CMPISTRX_TEST_CASE(c, type, data_type, im, IM) \ + do { \ + data_type *a = test_mm_##im##_##type##_data[c].a, \ + *b = test_mm_##im##_##type##_data[c].b; \ + const int imm8 = IMM_##c; \ + IIF(IM) \ + (int expect = test_mm_##im##_##type##_data[c].expect, \ + data_type *expect = test_mm_##im##_##type##_data[c].expect); \ + __m128i ma, mb; \ + memcpy(&ma, a, sizeof(ma)); \ + memcpy(&mb, b, sizeof(mb)); \ + IIF(IM) \ + (int res = _mm_##im(ma, mb, imm8), \ + __m128i res = _mm_##im(ma, mb, imm8)); \ + if (IIF(IM)(res != expect, memcmp(expect, &res, sizeof(__m128i)))) \ + return TEST_FAIL; \ + } while (0); + +#define ENUM_MM_CMPISTRX_TEST_CASES(type, type_lower, data_type, func, FUNC, \ + IM) \ + enum { MM_##FUNC##_##type##_TEST_CASES(DEF_ENUM_MM_CMPISTRX_VARIANT) }; \ + MM_##FUNC##_##type##_TEST_CASES(EVAL_MM_CMPISTRX_TEST_CASE, type_lower, \ + data_type, func, IM) + +typedef struct { + uint8_t a[16], b[16]; + const int imm8; + int expect; +} test_mm_cmpistri_ubyte_data_t; +typedef struct { + int8_t a[16], b[16]; + const int imm8; + int expect; +} test_mm_cmpistri_sbyte_data_t; +typedef struct { + uint16_t a[8], b[8]; + const int imm8; + int expect; +} test_mm_cmpistri_uword_data_t; +typedef struct { + int16_t a[8], b[8]; + const int imm8; + int expect; +} test_mm_cmpistri_sword_data_t; + +#define TEST_MM_CMPISTRA_UBYTE_DATA_LEN 4 +static test_mm_cmpistri_ubyte_data_t + test_mm_cmpistra_ubyte_data[TEST_MM_CMPISTRA_UBYTE_DATA_LEN] = { + {{10, 11, 12, 13, 14, 15, 16, 17, 18, 9, 20, 98, 97, 96, 95, 127}, + {1, 2, 3, 4, 5, 6, 7, 8, 99, 100, 101, 102, 103, 104, 105, 106}, + IMM_UBYTE_ANY_LEAST, + 1}, + {{1, 22, 33, 44, 5, 66, 7, 88, 9, 10, 111, 0}, + {2, 23, 34, 21, 6, 65, 8, 84, 99, 100, 11, 112, 123, 14, 15, 6}, + IMM_UBYTE_EACH_LEAST, + 1}, + {{5, 15, 25, 35, 45, 55, 65, 75, 0}, + {4, 6, 14, 16, 24, 26, 34, 36, 44, 46, 54, 56, 74, 76}, + IMM_UBYTE_RANGES_LEAST, + 0}, + {{4, 14, 64, 84, 0}, + {4, 14, 64, 84, 0, 4, 14, 65, 84, 0, 4, 14, 64, 84, 0, 1}, + IMM_UBYTE_ORDERED_MOST_NEGATIVE, + 0}, +}; + +#define TEST_MM_CMPISTRA_SBYTE_DATA_LEN 4 +static test_mm_cmpistri_sbyte_data_t + test_mm_cmpistra_sbyte_data[TEST_MM_CMPISTRA_SBYTE_DATA_LEN] = { + {{-11, -13, -43, -50, 66, 77, 87, 98, -128, 127, 126, 99, 1, 2, 3, -5}, + {-12, -13, -43, -56, 66, 78, 88, 98, -125, 127, 120, 9, 100, 22, 54, + -10}, + IMM_SBYTE_EACH_LEAST, + 0}, + {{10, 11, 100, -90, 0}, + {8, 9, 10, 11, 0, 8, 9, 10, -90, 0}, + IMM_SBYTE_ANY_LEAST_NEGATIVE, + 0}, + {{-90, -60, -34, -25, 34, 56, 70, 79, 0}, + {-100, -59, -35, -24, -101, 33, 57, 69, 80, 81, -128, 100, 101, 102, + -101, -102}, + IMM_SBYTE_RANGES_LEAST, + 1}, + {{1, 1, 1, 1, -1, -1, -1, -1, -10, 10, -10, 10, 44, -44, 44, -44}, + {1, 1, -1, 1, -1, -1, -1, -1, -10, 10, -10, 10, 44, -44, 44, -44}, + IMM_SBYTE_ORDERED_LEAST, + 1}, +}; + +#define TEST_MM_CMPISTRA_UWORD_DATA_LEN 4 +static test_mm_cmpistri_uword_data_t + test_mm_cmpistra_uword_data[TEST_MM_CMPISTRA_UWORD_DATA_LEN] = { + {{88, 888, 8888, 31888, 10888, 18088, 10880, 28888}, + {888, 88, 8888, 32000, 10888, 18000, 10888, 28888}, + IMM_UWORD_EACH_LEAST_NEGATIVE, + 0}, + {{3, 4, 555, 6666, 7777, 888, 9, 100}, + {1, 2, 333, 4444, 5555, 666, 7, 8}, + IMM_UWORD_ANY_LEAST, + 1}, + {{1000, 2000, 2002, 3000, 3002, 4000, 5000, 5999}, + {999, 2001, 3001, 4001, 4002, 4999, 6000, 6001}, + IMM_UWORD_RANGES_LEAST, + 1}, + {{55, 66, 77, 888, 0}, + {55, 66, 77, 888, 0, 33, 2, 10000}, + IMM_UWORD_ORDERED_LEAST, + 0}, +}; + +#define TEST_MM_CMPISTRA_SWORD_DATA_LEN 4 +static test_mm_cmpistri_sword_data_t + test_mm_cmpistra_sword_data[TEST_MM_CMPISTRA_SWORD_DATA_LEN] = { + {{-32000, -28000, 0}, + {-32001, -29999, -28001, -28000, -27999, -26000, -32768}, + IMM_SWORD_RANGES_LEAST_MASKED_NEGATIVE, + 0}, + {{-12, -11, -10, -9, -8, -7, 90, 1000}, + {-13, -10, 9, -8, -7, 1000, 1000, 90}, + IMM_SWORD_EACH_LEAST, + 1}, + {{33, 44, 787, 23, 0}, + {32, 43, 788, 0, 32, 0, 43, 0}, + IMM_SWORD_ANY_LEAST, + 0}, + {{18, 78, 999, -56, 0}, + {18, 78, 999, 56, 18, 78, 999, 4}, + IMM_SWORD_ORDERED_LEAST, + 1}, +}; + +#define MM_CMPISTRA_UBYTE_TEST_CASES(_, ...) \ + _(UBYTE_ANY_LEAST, __VA_ARGS__) \ + _(UBYTE_EACH_LEAST, __VA_ARGS__) \ + _(UBYTE_RANGES_LEAST, __VA_ARGS__) \ + _(UBYTE_ORDERED_MOST_NEGATIVE, __VA_ARGS__) + +#define MM_CMPISTRA_SBYTE_TEST_CASES(_, ...) \ + _(SBYTE_EACH_LEAST, __VA_ARGS__) \ + _(SBYTE_ANY_LEAST_NEGATIVE, __VA_ARGS__) \ + _(SBYTE_RANGES_LEAST, __VA_ARGS__) \ + _(SBYTE_ORDERED_LEAST, __VA_ARGS__) + +#define MM_CMPISTRA_UWORD_TEST_CASES(_, ...) \ + _(UWORD_EACH_LEAST_NEGATIVE, __VA_ARGS__) \ + _(UWORD_ANY_LEAST, __VA_ARGS__) \ + _(UWORD_RANGES_LEAST, __VA_ARGS__) \ + _(UWORD_ORDERED_LEAST, __VA_ARGS__) + +#define MM_CMPISTRA_SWORD_TEST_CASES(_, ...) \ + _(SWORD_RANGES_LEAST_MASKED_NEGATIVE, __VA_ARGS__) \ + _(SWORD_EACH_LEAST, __VA_ARGS__) \ + _(SWORD_ANY_LEAST, __VA_ARGS__) \ + _(SWORD_ORDERED_LEAST, __VA_ARGS__) + +#define GENERATE_MM_CMPISTRA_TEST_CASES \ + ENUM_MM_CMPISTRX_TEST_CASES(UBYTE, ubyte, uint8_t, cmpistra, CMPISTRA, \ + IS_CMPISTRI) \ + ENUM_MM_CMPISTRX_TEST_CASES(SBYTE, sbyte, int8_t, cmpistra, CMPISTRA, \ + IS_CMPISTRI) \ + ENUM_MM_CMPISTRX_TEST_CASES(UWORD, uword, uint16_t, cmpistra, CMPISTRA, \ + IS_CMPISTRI) \ + ENUM_MM_CMPISTRX_TEST_CASES(SWORD, sword, int16_t, cmpistra, CMPISTRA, \ + IS_CMPISTRI) + +result_t test_mm_cmpistra(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + GENERATE_MM_CMPISTRA_TEST_CASES + return TEST_SUCCESS; +} + +#define TEST_MM_CMPISTRC_UBYTE_DATA_LEN 4 +static test_mm_cmpistri_ubyte_data_t + test_mm_cmpistrc_ubyte_data[TEST_MM_CMPISTRC_UBYTE_DATA_LEN] = { + {{89, 64, 88, 23, 11, 109, 34, 55, 0}, + {2, 64, 87, 32, 1, 110, 43, 66, 0}, + IMM_UBYTE_ANY_LEAST, + 1}, + {{99, 67, 2, 127, 125, 3, 24, 77, 32, 68, 96, 74, 70, 110, 111, 5}, + {98, 88, 67, 125, 111, 4, 56, 88, 33, 69, 99, 79, 123, 11, 10, 6}, + IMM_UBYTE_EACH_LEAST, + 0}, + {{2, 3, 74, 78, 81, 83, 85, 87, 89, 90, 0}, + {86, 90, 74, 85, 87, 81, 2, 3, 3, 3, 75, 76, 77, 78, 82, 85}, + IMM_UBYTE_RANGES_MOST_NEGATIVE, + 0}, + {{45, 67, 8, 9, 0}, + {67, 45, 67, 8, 9, 45, 67, 8, 9, 45, 67, 8, 9, 45, 67, 8}, + IMM_UBYTE_ORDERED_LEAST, + 1}, +}; + +#define TEST_MM_CMPISTRC_SBYTE_DATA_LEN 4 +static test_mm_cmpistri_sbyte_data_t + test_mm_cmpistrc_sbyte_data[TEST_MM_CMPISTRC_SBYTE_DATA_LEN] = { + {{35, -35, 67, -66, 34, 55, 12, -100, 34, -34, 66, -67, 52, 100, 127, + -128}, + {35, -35, 67, -66, 0, 55, 12, -100, 0, -34, 66, -67, 0, 100, 127, + -128}, + IMM_SBYTE_EACH_MOST_MASKED_NEGATIVE, + 0}, + {{-119, 112, 105, 104, 0}, + {119, -112, 105, -104, 104, -34, 112, -119, 0}, + IMM_SBYTE_ANY_LEAST, + 1}, + {{-79, -69, -40, -35, 34, 45, 67, 88, 0}, + {1, 2, 3, 4, 5, 6, 7, 8, 0}, + IMM_SBYTE_RANGES_LEAST, + 0}, + {{22, -109, 123, 115, -12, 0}, + {22, -109, 12, 115, 22, -109, 123, 115, -12, 0}, + IMM_SBYTE_ORDERED_LEAST, + 1}, +}; + +#define TEST_MM_CMPISTRC_UWORD_DATA_LEN 4 +static test_mm_cmpistri_uword_data_t + test_mm_cmpistrc_uword_data[TEST_MM_CMPISTRC_UWORD_DATA_LEN] = { + {{23, 45, 67, 89, 102, 121, 23, 45}, + {23, 45, 67, 89, 102, 121, 23, 44}, + IMM_UWORD_EACH_LEAST, + 1}, + {{1, 11, 55, 75}, {13, 14, 56, 77, 0}, IMM_UWORD_ANY_LEAST, 0}, + {{1, 9, 11, 19, 21, 29, 91, 99}, + {10, 29, 30, 40, 50, 60, 70, 80}, + IMM_UWORD_RANGES_LEAST, + 1}, + {{3, 4, 5, 0}, + {0, 3, 4, 5, 3, 4, 5, 0}, + IMM_UWORD_ORDERED_LEAST_MASKED_NEGATIVE, + 0}, +}; + +#define TEST_MM_CMPISTRC_SWORD_DATA_LEN 4 +static test_mm_cmpistri_sword_data_t + test_mm_cmpistrc_sword_data[TEST_MM_CMPISTRC_SWORD_DATA_LEN] = { + {{-78, -56, 1000, 1002}, + {-79, -55, -12, -13, 999, 1003, -80, 10000}, + IMM_SWORD_RANGES_LEAST, + 0}, + {{45, 32767, -30000, 2345, -23450, 0}, + {45, 32767, -30000, 2346, -23456, 0, 45, 333}, + IMM_SWORD_EACH_LEAST, + 1}, + {{-10000, -20000, -30000, 10000, 20000, 30000, 0}, + {10000, 20000, 30000, -10000, -20000, 20000, -30000, 12}, + IMM_SWORD_ANY_MOST_NEGATIVE, + 1}, + {{1, 2, -3, -55, -666, -7777, 8888}, + {2, -3, -55, -666, -7777, 8888, 1}, + IMM_SWORD_ORDERED_LEAST, + 0}, +}; + +#define MM_CMPISTRC_UBYTE_TEST_CASES(_, ...) \ + _(UBYTE_ANY_LEAST, __VA_ARGS__) \ + _(UBYTE_EACH_LEAST, __VA_ARGS__) \ + _(UBYTE_RANGES_MOST_NEGATIVE, __VA_ARGS__) \ + _(UBYTE_ORDERED_LEAST, __VA_ARGS__) + +#define MM_CMPISTRC_SBYTE_TEST_CASES(_, ...) \ + _(SBYTE_EACH_MOST_MASKED_NEGATIVE, __VA_ARGS__) \ + _(SBYTE_ANY_LEAST, __VA_ARGS__) \ + _(SBYTE_RANGES_LEAST, __VA_ARGS__) \ + _(SBYTE_ORDERED_LEAST, __VA_ARGS__) + +#define MM_CMPISTRC_UWORD_TEST_CASES(_, ...) \ + _(UWORD_EACH_LEAST, __VA_ARGS__) \ + _(UWORD_ANY_LEAST, __VA_ARGS__) \ + _(UWORD_RANGES_LEAST, __VA_ARGS__) \ + _(UWORD_ORDERED_LEAST_MASKED_NEGATIVE, __VA_ARGS__) + +#define MM_CMPISTRC_SWORD_TEST_CASES(_, ...) \ + _(SWORD_RANGES_LEAST, __VA_ARGS__) \ + _(SWORD_EACH_LEAST, __VA_ARGS__) \ + _(SWORD_ANY_MOST_NEGATIVE, __VA_ARGS__) \ + _(SWORD_ORDERED_LEAST, __VA_ARGS__) + +#define GENERATE_MM_CMPISTRC_TEST_CASES \ + ENUM_MM_CMPISTRX_TEST_CASES(UBYTE, ubyte, uint8_t, cmpistrc, CMPISTRC, \ + IS_CMPISTRI) \ + ENUM_MM_CMPISTRX_TEST_CASES(SBYTE, sbyte, int8_t, cmpistrc, CMPISTRC, \ + IS_CMPISTRI) \ + ENUM_MM_CMPISTRX_TEST_CASES(UWORD, uword, uint16_t, cmpistrc, CMPISTRC, \ + IS_CMPISTRI) \ + ENUM_MM_CMPISTRX_TEST_CASES(SWORD, sword, int16_t, cmpistrc, CMPISTRC, \ + IS_CMPISTRI) + +result_t test_mm_cmpistrc(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + GENERATE_MM_CMPISTRC_TEST_CASES + return TEST_SUCCESS; +} + +#define TEST_MM_CMPISTRI_UBYTE_DATA_LEN 4 +static test_mm_cmpistri_ubyte_data_t + test_mm_cmpistri_ubyte_data[TEST_MM_CMPISTRI_UBYTE_DATA_LEN] = { + {{104, 117, 110, 116, 114, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {33, 64, 35, 36, 37, 94, 38, 42, 40, 41, 91, 93, 58, 59, 60, 62}, + IMM_UBYTE_ANY_LEAST, + 16}, + {{4, 5, 6, 7, 8, 111, 34, 21, 0, 0, 0, 0, 0, 0, 0, 0}, + {5, 6, 7, 8, 8, 111, 43, 12, 0, 0, 0, 0, 0, 0, 0, 0}, + IMM_UBYTE_EACH_MOST_MASKED_NEGATIVE, + 15}, + {{65, 90, 97, 122, 48, 57, 0}, + {47, 46, 43, 44, 42, 43, 45, 41, 40, 123, 124, 125, 126, 127, 1, 2}, + IMM_UBYTE_RANGES_LEAST, + 16}, + {{111, 222, 22, 0}, + {33, 44, 55, 66, 77, 88, 99, 111, 222, 22, 11, 0}, + IMM_UBYTE_ORDERED_LEAST, + 7}, +}; + +#define TEST_MM_CMPISTRI_SBYTE_DATA_LEN 4 +static test_mm_cmpistri_sbyte_data_t + test_mm_cmpistri_sbyte_data[TEST_MM_CMPISTRI_SBYTE_DATA_LEN] = { + {{1, 2, 3, 4, 5, -99, -128, -100, -1, 49, 0}, + {2, 3, 3, 4, 5, -100, -128, -99, 1, 44, 0}, + IMM_SBYTE_EACH_LEAST, + 2}, + {{99, 100, 23, -90, 0}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 99, 100, 23, -90, -90, 100}, + IMM_SBYTE_ANY_LEAST, + 10}, + {{-10, -2, 89, 97, 0}, + {-11, -12, -3, 1, 97, 0}, + IMM_SBYTE_RANGES_LEAST_NEGATIVE, + 0}, + {{-10, -90, -22, 30, 87, 127, 0}, {0}, IMM_SBYTE_ORDERED_LEAST, 16}, +}; + +#define TEST_MM_CMPISTRI_UWORD_DATA_LEN 4 +static test_mm_cmpistri_uword_data_t + test_mm_cmpistri_uword_data[TEST_MM_CMPISTRI_UWORD_DATA_LEN] = { + {{38767, 99, 1234, 65535, 2222, 1, 34456, 11}, + {38768, 999, 1235, 4444, 2222, 1, 34456, 12}, + IMM_UWORD_EACH_LEAST, + 4}, + {{22222, 33333, 44444, 55555, 6000, 600, 60, 6}, + {0}, + IMM_UWORD_ANY_LEAST, + 8}, + {{34, 777, 1000, 1004, 0}, + {33, 32, 889, 1003, 0}, + IMM_UWORD_RANGES_LEAST, + 3}, + {{44, 555, 44, 0}, + {44, 555, 44, 555, 44, 555, 44, 0}, + IMM_UWORD_ORDERED_MOST_NEGATIVE, + 7}, +}; + +#define TEST_MM_CMPISTRI_SWORD_DATA_LEN 4 +static test_mm_cmpistri_sword_data_t + test_mm_cmpistri_sword_data[TEST_MM_CMPISTRI_SWORD_DATA_LEN] = { + {{-1, -5, 10, 30, 40, 0}, + {13, -2, 7, 80, 11, 0}, + IMM_SWORD_RANGES_LEAST, + 0}, + {{-12, 12, 6666, 777, 0}, + {11, 12, 6666, 777, 0}, + IMM_SWORD_EACH_LEAST, + 1}, + {{23, 22, 33, 567, 9999, 12345, 0}, + {23, 22, 23, 22, 23, 22, 23, 12222}, + IMM_SWORD_ANY_MOST, + 6}, + {{12, -234, -567, 8888, 0}, + {13, -234, -567, 8888, 12, -234, -567, 8889}, + IMM_SWORD_ORDERED_LEAST, + 8}, +}; + +#define MM_CMPISTRI_UBYTE_TEST_CASES(_, ...) \ + _(UBYTE_ANY_LEAST, __VA_ARGS__) \ + _(UBYTE_EACH_MOST_MASKED_NEGATIVE, __VA_ARGS__) \ + _(UBYTE_RANGES_LEAST, __VA_ARGS__) \ + _(UBYTE_ORDERED_LEAST, __VA_ARGS__) + +#define MM_CMPISTRI_SBYTE_TEST_CASES(_, ...) \ + _(SBYTE_EACH_LEAST, __VA_ARGS__) \ + _(SBYTE_ANY_LEAST, __VA_ARGS__) \ + _(SBYTE_RANGES_LEAST_NEGATIVE, __VA_ARGS__) \ + _(SBYTE_ORDERED_LEAST, __VA_ARGS__) + +#define MM_CMPISTRI_UWORD_TEST_CASES(_, ...) \ + _(UWORD_EACH_LEAST, __VA_ARGS__) \ + _(UWORD_ANY_LEAST, __VA_ARGS__) \ + _(UWORD_RANGES_LEAST, __VA_ARGS__) \ + _(UWORD_ORDERED_MOST_NEGATIVE, __VA_ARGS__) + +#define MM_CMPISTRI_SWORD_TEST_CASES(_, ...) \ + _(SWORD_RANGES_LEAST, __VA_ARGS__) \ + _(SWORD_EACH_LEAST, __VA_ARGS__) \ + _(SWORD_ANY_MOST, __VA_ARGS__) \ + _(SWORD_ORDERED_LEAST, __VA_ARGS__) + +#define GENERATE_MM_CMPISTRI_TEST_CASES \ + ENUM_MM_CMPISTRX_TEST_CASES(UBYTE, ubyte, uint8_t, cmpistri, CMPISTRI, \ + IS_CMPISTRI) \ + ENUM_MM_CMPISTRX_TEST_CASES(SBYTE, sbyte, int8_t, cmpistri, CMPISTRI, \ + IS_CMPISTRI) \ + ENUM_MM_CMPISTRX_TEST_CASES(UWORD, uword, uint16_t, cmpistri, CMPISTRI, \ + IS_CMPISTRI) \ + ENUM_MM_CMPISTRX_TEST_CASES(SWORD, sword, int16_t, cmpistri, CMPISTRI, \ + IS_CMPISTRI) + +result_t test_mm_cmpistri(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + GENERATE_MM_CMPISTRI_TEST_CASES + return TEST_SUCCESS; +} + +#define IS_CMPISTRM 0 + +typedef struct { + uint8_t a[16], b[16]; + const int imm8; + uint8_t expect[16]; +} test_mm_cmpistrm_ubyte_data_t; +typedef struct { + int8_t a[16], b[16]; + const int imm8; + int8_t expect[16]; +} test_mm_cmpistrm_sbyte_data_t; +typedef struct { + uint16_t a[8], b[8]; + const int imm8; + uint16_t expect[8]; +} test_mm_cmpistrm_uword_data_t; +typedef struct { + int16_t a[8], b[8]; + const int imm8; + int16_t expect[8]; +} test_mm_cmpistrm_sword_data_t; + +#define TEST_MM_CMPISTRM_UBYTE_DATA_LEN 4 +static test_mm_cmpistrm_ubyte_data_t + test_mm_cmpistrm_ubyte_data[TEST_MM_CMPISTRM_UBYTE_DATA_LEN] = { + {{88, 89, 90, 91, 92, 93, 0}, + {78, 88, 99, 127, 92, 93, 0}, + IMM_UBYTE_EACH_UNIT, + {0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255}}, + {{30, 41, 52, 63, 74, 85, 0}, + {30, 42, 51, 63, 74, 85, 0}, + IMM_UBYTE_ANY_BIT, + {57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + {{34, 32, 21, 16, 7, 0}, + {34, 33, 32, 31, 30, 29, 10, 6, 0}, + IMM_UBYTE_RANGES_UNIT, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + {{33, 21, 123, 89, 76, 56, 0}, + {33, 21, 124, 33, 21, 123, 89, 76, 56, 33, 21, 123, 89, 76, 56, 22}, + IMM_UBYTE_ORDERED_UNIT, + {0, 0, 0, 255, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0}}, +}; + +#define TEST_MM_CMPISTRM_SBYTE_DATA_LEN 4 +static test_mm_cmpistrm_sbyte_data_t + test_mm_cmpistrm_sbyte_data[TEST_MM_CMPISTRM_SBYTE_DATA_LEN] = { + {{-11, -90, -128, 127, 66, 45, 23, 32, 99, 10, 0}, + {-10, -90, -124, 33, 66, 45, 23, 22, 99, 100, 0}, + IMM_SBYTE_EACH_BIT_MASKED_NEGATIVE, + {-115, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + {{13, 14, 55, 1, 32, 100, 101, 102, 103, 97, 23, 21, 45, 54, 55, 56}, + {22, 109, 87, 45, 1, 103, 22, 102, 43, 87, 78, 56, 65, 55, 44, 33}, + IMM_SBYTE_ANY_UNIT, + {0, 0, 0, -1, -1, -1, 0, -1, 0, 0, 0, -1, 0, -1, 0, 0}}, + {{-31, -28, -9, 10, 45, 67, 88, 0}, + {-30, -32, -33, -44, 93, 44, 9, 89, 0}, + IMM_SBYTE_RANGES_UNIT, + {-1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + {{34, -10, 78, -99, -100, 100, 0}, + {34, 123, 88, 4, 34, -10, 78, -99, -100, 100, 34, -10, 78, -99, -100, + -100}, + IMM_SBYTE_ORDERED_UNIT, + {0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, +}; + +#define TEST_MM_CMPISTRM_UWORD_DATA_LEN 4 +static test_mm_cmpistrm_uword_data_t + test_mm_cmpistrm_uword_data[TEST_MM_CMPISTRM_UWORD_DATA_LEN] = { + {{1024, 2048, 4096, 5000, 0}, + {1023, 1000, 2047, 1596, 5566, 5666, 4477, 9487}, + IMM_UWORD_RANGES_UNIT, + {0, 0, 65535, 65535, 0, 0, 65535, 0}}, + {{1, 2, 345, 7788, 10000, 0}, + {2, 1, 345, 7788, 10000, 0}, + IMM_UWORD_EACH_UNIT, + {0, 0, 65535, 65535, 65535, 65535, 65535, 65535}}, + {{100, 0}, + {12345, 6766, 234, 0, 1, 34, 89, 100}, + IMM_UWORD_ANY_UNIT, + {0, 0, 0, 0, 0, 0, 0, 0}}, + {{34, 122, 9000, 0}, + {34, 122, 9000, 34, 122, 9000, 34, 122}, + IMM_UWORD_ORDERED_UNIT_NEGATIVE, + {0, 65535, 65535, 0, 65535, 65535, 0, 65535}}, +}; + +#define TEST_MM_CMPISTRM_SWORD_DATA_LEN 4 +static test_mm_cmpistrm_sword_data_t + test_mm_cmpistrm_sword_data[TEST_MM_CMPISTRM_SWORD_DATA_LEN] = { + {{-39, -10, 17, 89, 998, 1000, 1234, 4566}, + {-40, -52, -39, -29, 100, 1024, 4565, 4600}, + IMM_SWORD_RANGES_BIT, + {0, 0, -1, -1, 0, 0, -1, 0}}, + {{345, -1900, -10000, -30000, 50, 6789, 0}, + {103, -1901, -10000, 32767, 50, 6780, 0}, + IMM_SWORD_EACH_UNIT, + {0, 0, -1, 0, -1, 0, -1, -1}}, + {{677, 10001, 1001, 23, 0}, + {345, 677, 10001, 1003, 1001, 32, 23, 677}, + IMM_SWORD_ANY_UNIT, + {0, -1, -1, 0, -1, 0, -1, -1}}, + {{1024, -2288, 3752, -4096, 0}, + {1024, 1024, -2288, 3752, -4096, 1024, -2288, 3752}, + IMM_SWORD_ORDERED_UNIT, + {0, -1, 0, 0, 0, -1, 0, 0}}, +}; + +#define MM_CMPISTRM_UBYTE_TEST_CASES(_, ...) \ + _(UBYTE_EACH_UNIT, __VA_ARGS__) \ + _(UBYTE_ANY_BIT, __VA_ARGS__) \ + _(UBYTE_RANGES_UNIT, __VA_ARGS__) \ + _(UBYTE_ORDERED_UNIT, __VA_ARGS__) + +#define MM_CMPISTRM_SBYTE_TEST_CASES(_, ...) \ + _(SBYTE_EACH_BIT_MASKED_NEGATIVE, __VA_ARGS__) \ + _(SBYTE_ANY_UNIT, __VA_ARGS__) \ + _(SBYTE_RANGES_UNIT, __VA_ARGS__) \ + _(SBYTE_ORDERED_UNIT, __VA_ARGS__) + +#define MM_CMPISTRM_UWORD_TEST_CASES(_, ...) \ + _(UWORD_RANGES_UNIT, __VA_ARGS__) \ + _(UWORD_EACH_UNIT, __VA_ARGS__) \ + _(UWORD_ANY_UNIT, __VA_ARGS__) \ + _(UWORD_ORDERED_UNIT_NEGATIVE, __VA_ARGS__) + +#define MM_CMPISTRM_SWORD_TEST_CASES(_, ...) \ + _(SWORD_RANGES_UNIT, __VA_ARGS__) \ + _(SWORD_EACH_UNIT, __VA_ARGS__) \ + _(SWORD_ANY_UNIT, __VA_ARGS__) \ + _(SWORD_ORDERED_UNIT, __VA_ARGS__) + +#define GENERATE_MM_CMPISTRM_TEST_CASES \ + ENUM_MM_CMPISTRX_TEST_CASES(UBYTE, ubyte, uint8_t, cmpistrm, CMPISTRM, \ + IS_CMPISTRM) \ + ENUM_MM_CMPISTRX_TEST_CASES(SBYTE, sbyte, int8_t, cmpistrm, CMPISTRM, \ + IS_CMPISTRM) \ + ENUM_MM_CMPISTRX_TEST_CASES(UWORD, uword, uint16_t, cmpistrm, CMPISTRM, \ + IS_CMPISTRM) \ + ENUM_MM_CMPISTRX_TEST_CASES(SWORD, sword, int16_t, cmpistrm, CMPISTRM, \ + IS_CMPISTRM) + +result_t test_mm_cmpistrm(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + GENERATE_MM_CMPISTRM_TEST_CASES + return TEST_SUCCESS; +} + +#undef IS_CMPISTRM + +#define TEST_MM_CMPISTRO_UBYTE_DATA_LEN 4 +static test_mm_cmpistri_ubyte_data_t + test_mm_cmpistro_ubyte_data[TEST_MM_CMPISTRO_UBYTE_DATA_LEN] = { + {{3, 4, 5, 0}, {5, 5, 5, 4, 3, 0}, IMM_UBYTE_ANY_LEAST, 1}, + {{23, 127, 88, 3, 45, 6, 7, 2, 0}, + {32, 127, 87, 2, 44, 32, 1, 2, 0}, + IMM_UBYTE_EACH_MOST_NEGATIVE, + 1}, + {{3, 4, 55, 56, 0}, + {2, 3, 4, 5, 43, 54, 55, 56, 0}, + IMM_UBYTE_RANGES_LEAST, + 0}, + {{55, 66, 77, 11, 23, 0}, + {55, 55, 66, 77, 11, 23, 55, 66, 77, 11, 23, 33, 123, 18, 0}, + IMM_UBYTE_ORDERED_LEAST, + 0}, +}; + +#define TEST_MM_CMPISTRO_SBYTE_DATA_LEN 4 +static test_mm_cmpistri_sbyte_data_t + test_mm_cmpistro_sbyte_data[TEST_MM_CMPISTRO_SBYTE_DATA_LEN] = { + {{33, -33, 23, -32, -1, -1, 23, 46, 78, 34, 54, 100, 90, 91, 92, 101}, + {32, 33, 23, -33, -2, -3, 23, 46, -78, 43, 56, 10, 9, 91, 90, 126}, + IMM_SBYTE_EACH_LEAST, + 0}, + {{-1, -2, -3, -4, -5, -6, -7, -8, 87, 86, 85, 84, 83, 82, 81, 80}, + {87, 79, 0}, + IMM_SBYTE_ANY_LEAST, + 1}, + {{3, 4, 2, 0}, + {3, 3, 4, 5, 6, 2, 0}, + IMM_SBYTE_RANGES_MOST_NEGATIVE, + 0}, + {{23, 66, 1, 13, 17, 1, 13, 17, 0}, + {23, 66, 1, 13, 17, 1, 13, 17, 32, 23, 66, 1, 13, 17, 1, 13}, + IMM_SBYTE_ORDERED_LEAST, + 1}, +}; + +#define TEST_MM_CMPISTRO_UWORD_DATA_LEN 4 +static test_mm_cmpistri_uword_data_t + test_mm_cmpistro_uword_data[TEST_MM_CMPISTRO_UWORD_DATA_LEN] = { + {{3333, 4444, 10000, 20000, 40000, 50000, 65535, 0}, + {3332, 4443, 10000, 20001, 40000, 50000, 65534, 0}, + IMM_UWORD_EACH_LEAST, + 0}, + {{1, 2, 333, 4444, 55555, 7777, 23, 347}, + {4444, 7777, 55555, 23, 347, 2, 1, 0}, + IMM_UWORD_ANY_LEAST, + 1}, + {{356, 380, 320, 456, 0}, + {455, 379, 333, 319, 300, 299, 0}, + IMM_UWORD_RANGES_LEAST, + 1}, + {{3, 1001, 235, 0}, + {3, 1001, 235, 0, 3, 1001, 235, 0}, + IMM_UWORD_ORDERED_MOST_MASKED_NEGATIVE, + 0}, +}; + +#define TEST_MM_CMPISTRO_SWORD_DATA_LEN 4 +static test_mm_cmpistri_sword_data_t + test_mm_cmpistro_sword_data[TEST_MM_CMPISTRO_SWORD_DATA_LEN] = { + {{-10, -5, -100, -90, 45, 56, 1000, 1009}, + {54, -1, -5, -6, 1001, 10001, 1009, 1009}, + IMM_SWORD_RANGES_LEAST, + 1}, + {{456, -32768, 32767, 13, 0}, + {455, -32768, 32767, 31, 0}, + IMM_SWORD_EACH_LEAST, + 0}, + {{23, 46, -44, 32000, 0}, + {23, 66, -44, 678, 32000, 0}, + IMM_SWORD_ANY_MOST_MASKED_NEGATIVE, + 0}, + {{-7900, -101, -34, 666, 345, 0}, + {-7900, -101, -34, 666, 345, -7900, -191, -34}, + IMM_SWORD_ORDERED_LEAST, + 1}, +}; + +#define MM_CMPISTRO_UBYTE_TEST_CASES(_, ...) \ + _(UBYTE_ANY_LEAST, __VA_ARGS__) \ + _(UBYTE_EACH_MOST_NEGATIVE, __VA_ARGS__) \ + _(UBYTE_RANGES_LEAST, __VA_ARGS__) \ + _(UBYTE_ORDERED_LEAST, __VA_ARGS__) + +#define MM_CMPISTRO_SBYTE_TEST_CASES(_, ...) \ + _(SBYTE_EACH_LEAST, __VA_ARGS__) \ + _(SBYTE_ANY_LEAST, __VA_ARGS__) \ + _(SBYTE_RANGES_MOST_NEGATIVE, __VA_ARGS__) \ + _(SBYTE_ORDERED_LEAST, __VA_ARGS__) + +#define MM_CMPISTRO_UWORD_TEST_CASES(_, ...) \ + _(UWORD_EACH_LEAST, __VA_ARGS__) \ + _(UWORD_ANY_LEAST, __VA_ARGS__) \ + _(UWORD_RANGES_LEAST, __VA_ARGS__) \ + _(UWORD_ORDERED_MOST_MASKED_NEGATIVE, __VA_ARGS__) + +#define MM_CMPISTRO_SWORD_TEST_CASES(_, ...) \ + _(SWORD_RANGES_LEAST, __VA_ARGS__) \ + _(SWORD_EACH_LEAST, __VA_ARGS__) \ + _(SWORD_ANY_MOST_MASKED_NEGATIVE, __VA_ARGS__) \ + _(SWORD_ORDERED_LEAST, __VA_ARGS__) + +#define GENERATE_MM_CMPISTRO_TEST_CASES \ + ENUM_MM_CMPISTRX_TEST_CASES(UBYTE, ubyte, uint8_t, cmpistro, CMPISTRO, \ + IS_CMPISTRI) \ + ENUM_MM_CMPISTRX_TEST_CASES(SBYTE, sbyte, int8_t, cmpistro, CMPISTRO, \ + IS_CMPISTRI) \ + ENUM_MM_CMPISTRX_TEST_CASES(UWORD, uword, uint16_t, cmpistro, CMPISTRO, \ + IS_CMPISTRI) \ + ENUM_MM_CMPISTRX_TEST_CASES(SWORD, sword, int16_t, cmpistro, CMPISTRO, \ + IS_CMPISTRI) + +result_t test_mm_cmpistro(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + GENERATE_MM_CMPISTRO_TEST_CASES + return TEST_SUCCESS; +} + +#define TEST_MM_CMPISTRS_UBYTE_DATA_LEN 4 +static test_mm_cmpistri_ubyte_data_t + test_mm_cmpistrs_ubyte_data[TEST_MM_CMPISTRS_UBYTE_DATA_LEN] = { + {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}, + {1, 2, 3, 4, 5, 0}, + IMM_UBYTE_ANY_LEAST, + 0}, + {{127, 126, 125, 124, 0}, + {127, 1, 34, 43, 54, 0}, + IMM_UBYTE_EACH_LEAST, + 1}, + {{127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127}, + {56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 0}, + IMM_UBYTE_RANGES_LEAST, + 0}, + {{33, 44, 55, 78, 99, 100, 101, 102, 0}, + {0}, + IMM_UBYTE_ORDERED_LEAST, + 1}, +}; + +#define TEST_MM_CMPISTRS_SBYTE_DATA_LEN 4 +static test_mm_cmpistri_sbyte_data_t + test_mm_cmpistrs_sbyte_data[TEST_MM_CMPISTRS_SBYTE_DATA_LEN] = { + {{100, 99, 98, 97, -67, -4, -5, -6, -7, -1, -2, -3, -128, -128, -128, + -128}, + {0}, + IMM_SBYTE_EACH_LEAST, + 0}, + {{-128, -128, -128, -128, 127, 127, 127, 127, -128, -128, -128, -128, + 127, 127, 127, 127}, + {-1, -2, -11, -98, -12, 0}, + IMM_SBYTE_ANY_LEAST, + 0}, + {{0, 1, 2, 3, 4, 5, -6, -7}, + {0, 1, 2, 3, 4, 5, 6, 7}, + IMM_SBYTE_RANGES_LEAST, + 1}, + {{0, 1, 0, -1, 0, -2, 0, 0, -3, 4, 0, 0, 5, 6, 7, 8}, + {0}, + IMM_SBYTE_ORDERED_LEAST, + 1}, +}; + +#define TEST_MM_CMPISTRS_UWORD_DATA_LEN 4 +static test_mm_cmpistri_uword_data_t + test_mm_cmpistrs_uword_data[TEST_MM_CMPISTRS_UWORD_DATA_LEN] = { + {{0, 1, 2, 3, 65535, 0, 0, 0}, + {9, 8, 7, 6, 5, 4, 3, 2}, + IMM_UWORD_EACH_LEAST, + 1}, + {{4, 567, 65535, 32, 34, 0}, {0}, IMM_UWORD_ANY_LEAST, 1}, + {{65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535}, + {1, 2, 3, 4, 900, 7890, 6767, 0}, + IMM_UWORD_RANGES_LEAST, + 0}, + {{1, 2, 3, 4, 5, 6, 7, 8}, {1, 2, 3, 4, 0}, IMM_UWORD_ORDERED_LEAST, 0}, +}; + +#define TEST_MM_CMPISTRS_SWORD_DATA_LEN 4 +static test_mm_cmpistri_sword_data_t + test_mm_cmpistrs_sword_data[TEST_MM_CMPISTRS_SWORD_DATA_LEN] = { + {{-32768, -32768, -32768, -32768, -32768, -32768, -32768, -3276}, + {34, 45, 6, 7, 9, 8, 7, 6}, + IMM_SWORD_RANGES_LEAST, + 0}, + {{1000, 2000, 4000, 8000, 16000, 32000, 32767, 0}, + {3, 4, 56, 23, 0}, + IMM_SWORD_EACH_LEAST, + 1}, + {{0, 1, 3, 4, -32768, 9, 0, 1}, + {56, 47, 43, 999, 1111, 0}, + IMM_SWORD_ANY_LEAST, + 1}, + {{1111, 1212, 831, 2345, 32767, 32767, -32768, 32767}, + {0}, + IMM_SWORD_ORDERED_LEAST, + 0}, +}; + +#define MM_CMPISTRS_UBYTE_TEST_CASES(_, ...) \ + _(UBYTE_ANY_LEAST, __VA_ARGS__) \ + _(UBYTE_EACH_LEAST, __VA_ARGS__) \ + _(UBYTE_RANGES_LEAST, __VA_ARGS__) \ + _(UBYTE_ORDERED_LEAST, __VA_ARGS__) + +#define MM_CMPISTRS_SBYTE_TEST_CASES(_, ...) \ + _(SBYTE_EACH_LEAST, __VA_ARGS__) \ + _(SBYTE_ANY_LEAST, __VA_ARGS__) \ + _(SBYTE_RANGES_LEAST, __VA_ARGS__) \ + _(SBYTE_ORDERED_LEAST, __VA_ARGS__) + +#define MM_CMPISTRS_UWORD_TEST_CASES(_, ...) \ + _(UWORD_EACH_LEAST, __VA_ARGS__) \ + _(UWORD_ANY_LEAST, __VA_ARGS__) \ + _(UWORD_RANGES_LEAST, __VA_ARGS__) \ + _(UWORD_ORDERED_LEAST, __VA_ARGS__) + +#define MM_CMPISTRS_SWORD_TEST_CASES(_, ...) \ + _(SWORD_RANGES_LEAST, __VA_ARGS__) \ + _(SWORD_EACH_LEAST, __VA_ARGS__) \ + _(SWORD_ANY_LEAST, __VA_ARGS__) \ + _(SWORD_ORDERED_LEAST, __VA_ARGS__) + +#define GENERATE_MM_CMPISTRS_TEST_CASES \ + ENUM_MM_CMPISTRX_TEST_CASES(UBYTE, ubyte, uint8_t, cmpistrs, CMPISTRS, \ + IS_CMPISTRI) \ + ENUM_MM_CMPISTRX_TEST_CASES(SBYTE, sbyte, int8_t, cmpistrs, CMPISTRS, \ + IS_CMPISTRI) \ + ENUM_MM_CMPISTRX_TEST_CASES(UWORD, uword, uint16_t, cmpistrs, CMPISTRS, \ + IS_CMPISTRI) \ + ENUM_MM_CMPISTRX_TEST_CASES(SWORD, sword, int16_t, cmpistrs, CMPISTRS, \ + IS_CMPISTRI) + +result_t test_mm_cmpistrs(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + GENERATE_MM_CMPISTRS_TEST_CASES + return TEST_SUCCESS; +} + +#define TEST_MM_CMPISTRZ_UBYTE_DATA_LEN 4 +static test_mm_cmpistri_ubyte_data_t + test_mm_cmpistrz_ubyte_data[TEST_MM_CMPISTRZ_UBYTE_DATA_LEN] = { + {{0}, + {255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255}, + IMM_UBYTE_ANY_LEAST, + 0}, + {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}, + {1, 1, 1, 1, 2, 2, 2, 2, 4, 5, 6, 7, 89, 89, 89, 89}, + IMM_UBYTE_EACH_LEAST, + 0}, + {{1, 2, 3, 4, 0}, {}, IMM_UBYTE_RANGES_LEAST, 1}, + {{127, 126, 125, 124, 124, 0}, + {100, 101, 123, 100, 111, 122, 0}, + IMM_UBYTE_ORDERED_LEAST, + 1}, +}; + +#define TEST_MM_CMPISTRZ_SBYTE_DATA_LEN 4 +static test_mm_cmpistri_sbyte_data_t + test_mm_cmpistrz_sbyte_data[TEST_MM_CMPISTRZ_SBYTE_DATA_LEN] = { + {{127, 126, 99, -100, 0}, + {-128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128}, + IMM_SBYTE_EACH_LEAST, + 0}, + {{120, 66, 54, 0}, {3, 4, 5, -99, -6, 0}, IMM_SBYTE_ANY_LEAST, 1}, + {{0}, + {127, 127, 127, 127, 126, 126, 126, 126, -127, -127, -127, -127, -1, + -1, -1, -1}, + IMM_SBYTE_RANGES_LEAST, + 0}, + {{12, 3, 4, 5, 6, 7, 8, 0}, + {-1, -2, -3, -4, -6, 75, 0}, + IMM_SBYTE_ORDERED_LEAST, + 1}, +}; + +#define TEST_MM_CMPISTRZ_UWORD_DATA_LEN 4 +static test_mm_cmpistri_uword_data_t + test_mm_cmpistrz_uword_data[TEST_MM_CMPISTRZ_UWORD_DATA_LEN] = { + {{10000, 20000, 50000, 40000, 0}, + {65535, 65533, 60000, 60000, 50000, 123, 1, 2}, + IMM_UWORD_EACH_LEAST, + 0}, + {{0}, + {65528, 65529, 65530, 65531, 65532, 65533, 65534, 65535}, + IMM_UWORD_ANY_LEAST, + 0}, + {{3, 333, 3333, 33333, 0}, {0}, IMM_UWORD_RANGES_LEAST, 1}, + {{123, 456, 7, 890, 0}, + {123, 456, 7, 900, 0}, + IMM_UWORD_ORDERED_LEAST, + 1}, +}; + +#define TEST_MM_CMPISTRZ_SWORD_DATA_LEN 4 +static test_mm_cmpistri_sword_data_t + test_mm_cmpistrz_sword_data[TEST_MM_CMPISTRZ_SWORD_DATA_LEN] = { + {{2, 22, 222, 2222, 22222, -2222, -222, -22}, + {-32768, 32767, -32767, 32766, -32766, 32765, -32768, 32767}, + IMM_SWORD_RANGES_LEAST, + 0}, + {{345, 10000, -10000, -30000, 0}, + {1, 2, 3, 4, 5, 6, 7, 0}, + IMM_SWORD_EACH_LEAST, + 1}, + {{}, {0}, IMM_SWORD_ANY_LEAST, 1}, + {{1, 2, -789, -1, -90, 0}, + {1, 10, 100, 1000, 10000, -10000, -1000, 1000}, + IMM_SWORD_ORDERED_LEAST, + 0}, +}; + +#define MM_CMPISTRZ_UBYTE_TEST_CASES(_, ...) \ + _(UBYTE_ANY_LEAST, __VA_ARGS__) \ + _(UBYTE_EACH_LEAST, __VA_ARGS__) \ + _(UBYTE_RANGES_LEAST, __VA_ARGS__) \ + _(UBYTE_ORDERED_LEAST, __VA_ARGS__) + +#define MM_CMPISTRZ_SBYTE_TEST_CASES(_, ...) \ + _(SBYTE_EACH_LEAST, __VA_ARGS__) \ + _(SBYTE_ANY_LEAST, __VA_ARGS__) \ + _(SBYTE_RANGES_LEAST, __VA_ARGS__) \ + _(SBYTE_ORDERED_LEAST, __VA_ARGS__) + +#define MM_CMPISTRZ_UWORD_TEST_CASES(_, ...) \ + _(UWORD_EACH_LEAST, __VA_ARGS__) \ + _(UWORD_ANY_LEAST, __VA_ARGS__) \ + _(UWORD_RANGES_LEAST, __VA_ARGS__) \ + _(UWORD_ORDERED_LEAST, __VA_ARGS__) + +#define MM_CMPISTRZ_SWORD_TEST_CASES(_, ...) \ + _(SWORD_RANGES_LEAST, __VA_ARGS__) \ + _(SWORD_EACH_LEAST, __VA_ARGS__) \ + _(SWORD_ANY_LEAST, __VA_ARGS__) \ + _(SWORD_ORDERED_LEAST, __VA_ARGS__) + +#define GENERATE_MM_CMPISTRZ_TEST_CASES \ + ENUM_MM_CMPISTRX_TEST_CASES(UBYTE, ubyte, uint8_t, cmpistrz, CMPISTRZ, \ + IS_CMPISTRI) \ + ENUM_MM_CMPISTRX_TEST_CASES(SBYTE, sbyte, int8_t, cmpistrz, CMPISTRZ, \ + IS_CMPISTRI) \ + ENUM_MM_CMPISTRX_TEST_CASES(UWORD, uword, uint16_t, cmpistrz, CMPISTRZ, \ + IS_CMPISTRI) \ + ENUM_MM_CMPISTRX_TEST_CASES(SWORD, sword, int16_t, cmpistrz, CMPISTRZ, \ + IS_CMPISTRI) + +result_t test_mm_cmpistrz(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + GENERATE_MM_CMPISTRZ_TEST_CASES + return TEST_SUCCESS; +} + +result_t test_mm_crc32_u16(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + uint32_t crc = *(const uint32_t *) impl.mTestIntPointer1; + uint16_t v = (uint16_t) iter; + uint32_t result = _mm_crc32_u16(crc, v); + ASSERT_RETURN(result == canonical_crc32_u16(crc, v)); + return TEST_SUCCESS; +} + +result_t test_mm_crc32_u32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + uint32_t crc = *(const uint32_t *) impl.mTestIntPointer1; + uint32_t v = *(const uint32_t *) impl.mTestIntPointer2; + uint32_t result = _mm_crc32_u32(crc, v); + ASSERT_RETURN(result == canonical_crc32_u32(crc, v)); + return TEST_SUCCESS; +} + +result_t test_mm_crc32_u64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + uint64_t crc = *(const uint64_t *) impl.mTestIntPointer1; + uint64_t v = *(const uint64_t *) impl.mTestIntPointer2; + uint64_t result = _mm_crc32_u64(crc, v); + ASSERT_RETURN(result == canonical_crc32_u64(crc, v)); + return TEST_SUCCESS; +} + +result_t test_mm_crc32_u8(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + uint32_t crc = *(const uint32_t *) impl.mTestIntPointer1; + uint8_t v = (uint8_t) iter; + uint32_t result = _mm_crc32_u8(crc, v); + ASSERT_RETURN(result == canonical_crc32_u8(crc, v)); + return TEST_SUCCESS; +} + +/* AES */ +result_t test_mm_aesenc_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *a = (int32_t *) impl.mTestIntPointer1; + const int32_t *b = (int32_t *) impl.mTestIntPointer2; + __m128i data = _mm_loadu_si128((const __m128i *) a); + __m128i rk = _mm_loadu_si128((const __m128i *) b); + + __m128i resultReference = aesenc_128_reference(data, rk); + __m128i resultIntrinsic = _mm_aesenc_si128(data, rk); + + return validate128(resultReference, resultIntrinsic); +} + +result_t test_mm_aesdec_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *a = (int32_t *) impl.mTestIntPointer1; + const int32_t *b = (int32_t *) impl.mTestIntPointer2; + __m128i data = _mm_loadu_si128((const __m128i *) a); + __m128i rk = _mm_loadu_si128((const __m128i *) b); + + __m128i resultReference = aesdec_128_reference(data, rk); + __m128i resultIntrinsic = _mm_aesdec_si128(data, rk); + + return validate128(resultReference, resultIntrinsic); +} + +result_t test_mm_aesenclast_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const int32_t *a = (const int32_t *) impl.mTestIntPointer1; + const int32_t *b = (const int32_t *) impl.mTestIntPointer2; + __m128i data = _mm_loadu_si128((const __m128i *) a); + __m128i rk = _mm_loadu_si128((const __m128i *) b); + + __m128i resultReference = aesenclast_128_reference(data, rk); + __m128i resultIntrinsic = _mm_aesenclast_si128(data, rk); + + return validate128(resultReference, resultIntrinsic); +} + +result_t test_mm_aesdeclast_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint8_t *a = (uint8_t *) impl.mTestIntPointer1; + const uint8_t *rk = (uint8_t *) impl.mTestIntPointer2; + __m128i _a = _mm_loadu_si128((const __m128i *) a); + __m128i _rk = _mm_loadu_si128((const __m128i *) rk); + uint8_t c[16] = {}; + + uint8_t v[4][4]; + for (int i = 0; i < 16; ++i) { + v[((i / 4) + (i % 4)) % 4][i % 4] = crypto_aes_rsbox[a[i]]; + } + for (int i = 0; i < 16; ++i) { + c[i] = v[i / 4][i % 4] ^ rk[i]; + } + + __m128i result_reference = _mm_loadu_si128((const __m128i *) c); + __m128i result_intrinsic = _mm_aesdeclast_si128(_a, _rk); + + return validate128(result_reference, result_intrinsic); +} + +result_t test_mm_aesimc_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint8_t *a = (uint8_t *) impl.mTestIntPointer1; + __m128i _a = _mm_loadu_si128((const __m128i *) a); + + uint8_t e, f, g, h, v[4][4]; + for (int i = 0; i < 16; ++i) { + ((uint8_t *) v)[i] = a[i]; + } + for (int i = 0; i < 4; ++i) { + e = v[i][0]; + f = v[i][1]; + g = v[i][2]; + h = v[i][3]; + + v[i][0] = (uint8_t) (MULTIPLY(e, 0x0e) ^ MULTIPLY(f, 0x0b) ^ + MULTIPLY(g, 0x0d) ^ MULTIPLY(h, 0x09)); + v[i][1] = (uint8_t) (MULTIPLY(e, 0x09) ^ MULTIPLY(f, 0x0e) ^ + MULTIPLY(g, 0x0b) ^ MULTIPLY(h, 0x0d)); + v[i][2] = (uint8_t) (MULTIPLY(e, 0x0d) ^ MULTIPLY(f, 0x09) ^ + MULTIPLY(g, 0x0e) ^ MULTIPLY(h, 0x0b)); + v[i][3] = (uint8_t) (MULTIPLY(e, 0x0b) ^ MULTIPLY(f, 0x0d) ^ + MULTIPLY(g, 0x09) ^ MULTIPLY(h, 0x0e)); + } + + __m128i result_reference = _mm_loadu_si128((const __m128i *) v); + __m128i result_intrinsic = _mm_aesimc_si128(_a); + + return validate128(result_reference, result_intrinsic); +} + +static inline uint32_t sub_word(uint32_t in) +{ + return (crypto_aes_sbox[(in >> 24) & 0xff] << 24) | + (crypto_aes_sbox[(in >> 16) & 0xff] << 16) | + (crypto_aes_sbox[(in >> 8) & 0xff] << 8) | + (crypto_aes_sbox[in & 0xff]); +} + +// FIXME: improve the test case for AES-256 key expansion. +// Reference: +// https://github.com/randombit/botan/blob/master/src/lib/block/aes/aes_ni/aes_ni.cpp +result_t test_mm_aeskeygenassist_si128(const SSE2NEONTestImpl &impl, + uint32_t iter) +{ + const uint32_t *a = (uint32_t *) impl.mTestIntPointer1; + __m128i data = load_m128i(a); + uint32_t sub_x1 = sub_word(a[1]); + uint32_t sub_x3 = sub_word(a[3]); + __m128i result_reference; + __m128i result_intrinsic; +#define TEST_IMPL(IDX) \ + uint32_t res##IDX[4] = { \ + sub_x1, \ + rotr(sub_x1, 8) ^ IDX, \ + sub_x3, \ + rotr(sub_x3, 8) ^ IDX, \ + }; \ + result_reference = load_m128i(res##IDX); \ + result_intrinsic = _mm_aeskeygenassist_si128(data, IDX); \ + CHECK_RESULT(validate128(result_reference, result_intrinsic)); + + IMM_256_ITER +#undef TEST_IMPL + return TEST_SUCCESS; +} + +/* Others */ +result_t test_mm_clmulepi64_si128(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint64_t *_a = (const uint64_t *) impl.mTestIntPointer1; + const uint64_t *_b = (const uint64_t *) impl.mTestIntPointer2; + __m128i a = load_m128i(_a); + __m128i b = load_m128i(_b); + auto result = clmul_64(_a[0], _b[0]); + if (!validateUInt64(_mm_clmulepi64_si128(a, b, 0x00), result.first, + result.second)) + return TEST_FAIL; + result = clmul_64(_a[1], _b[0]); + if (!validateUInt64(_mm_clmulepi64_si128(a, b, 0x01), result.first, + result.second)) + return TEST_FAIL; + result = clmul_64(_a[0], _b[1]); + if (!validateUInt64(_mm_clmulepi64_si128(a, b, 0x10), result.first, + result.second)) + return TEST_FAIL; + result = clmul_64(_a[1], _b[1]); + if (!validateUInt64(_mm_clmulepi64_si128(a, b, 0x11), result.first, + result.second)) + return TEST_FAIL; + return TEST_SUCCESS; +} + +result_t test_mm_get_denormals_zero_mode(const SSE2NEONTestImpl &impl, + uint32_t iter) +{ + int res_denormals_zero_on, res_denormals_zero_off; + + _MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON); + res_denormals_zero_on = + _MM_GET_DENORMALS_ZERO_MODE() == _MM_DENORMALS_ZERO_ON; + + _MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_OFF); + res_denormals_zero_off = + _MM_GET_DENORMALS_ZERO_MODE() == _MM_DENORMALS_ZERO_OFF; + + return (res_denormals_zero_on && res_denormals_zero_off) ? TEST_SUCCESS + : TEST_FAIL; +} + +static int popcnt_reference(uint64_t a) +{ + int count = 0; + while (a != 0) { + count += a & 1; + a >>= 1; + } + return count; +} + +result_t test_mm_popcnt_u32(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint64_t *a = (const uint64_t *) impl.mTestIntPointer1; + ASSERT_RETURN(popcnt_reference((uint32_t) a[0]) == + _mm_popcnt_u32((unsigned int) a[0])); + return TEST_SUCCESS; +} + +result_t test_mm_popcnt_u64(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + const uint64_t *a = (const uint64_t *) impl.mTestIntPointer1; + ASSERT_RETURN(popcnt_reference(a[0]) == _mm_popcnt_u64(a[0])); + return TEST_SUCCESS; +} + +OPTNONE result_t test_mm_set_denormals_zero_mode(const SSE2NEONTestImpl &impl, + uint32_t iter) +{ + result_t res_set_denormals_zero_on, res_set_denormals_zero_off; + float factor = 2; + float denormal = FLT_MIN / factor; + float denormals[4] = {denormal, denormal, denormal, denormal}; + float factors[4] = {factor, factor, factor, factor}; + __m128 ret = _mm_setzero_ps(); + + _MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON); + ret = _mm_mul_ps(load_m128(denormals), load_m128(factors)); + res_set_denormals_zero_on = validateFloat(ret, 0, 0, 0, 0); + + _MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_OFF); + ret = _mm_mul_ps(load_m128(denormals), load_m128(factors)); +#if defined(__arm__) + // AArch32 Advanced SIMD arithmetic always uses the Flush-to-zero setting, + // regardless of the value of the FZ bit. + res_set_denormals_zero_off = validateFloat(ret, 0, 0, 0, 0); +#else + res_set_denormals_zero_off = + validateFloat(ret, FLT_MIN, FLT_MIN, FLT_MIN, FLT_MIN); +#endif + + if (res_set_denormals_zero_on == TEST_FAIL || + res_set_denormals_zero_off == TEST_FAIL) + return TEST_FAIL; + return TEST_SUCCESS; +} + +result_t test_rdtsc(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + uint64_t start = _rdtsc(); + for (int i = 0; i < 100000; i++) { +#if defined(_MSC_VER) + _ReadWriteBarrier(); +#else + __asm__ __volatile__("" ::: "memory"); +#endif + } + uint64_t end = _rdtsc(); + return end > start ? TEST_SUCCESS : TEST_FAIL; +} + +SSE2NEONTestImpl::SSE2NEONTestImpl(void) +{ + mTestFloatPointer1 = (float *) platformAlignedAlloc(sizeof(__m128)); + mTestFloatPointer2 = (float *) platformAlignedAlloc(sizeof(__m128)); + mTestIntPointer1 = (int32_t *) platformAlignedAlloc(sizeof(__m128i)); + mTestIntPointer2 = (int32_t *) platformAlignedAlloc(sizeof(__m128i)); + SSE2NEON_INIT_RNG(123456); + for (uint32_t i = 0; i < MAX_TEST_VALUE; i++) { + mTestFloats[i] = ranf(-100000, 100000); + mTestInts[i] = (int32_t) ranf(-100000, 100000); + } +} + +// Dummy function to match the case label in runSingleTest. +result_t test_last(const SSE2NEONTestImpl &impl, uint32_t iter) +{ + return TEST_SUCCESS; +} + +result_t SSE2NEONTestImpl::loadTestFloatPointers(uint32_t i) +{ + result_t ret = + do_mm_store_ps(mTestFloatPointer1, mTestFloats[i], mTestFloats[i + 1], + mTestFloats[i + 2], mTestFloats[i + 3]); + if (ret == TEST_SUCCESS) { + ret = do_mm_store_ps(mTestFloatPointer2, mTestFloats[i + 4], + mTestFloats[i + 5], mTestFloats[i + 6], + mTestFloats[i + 7]); + } + return ret; +} + +result_t SSE2NEONTestImpl::loadTestIntPointers(uint32_t i) +{ + result_t ret = + do_mm_store_ps(mTestIntPointer1, mTestInts[i], mTestInts[i + 1], + mTestInts[i + 2], mTestInts[i + 3]); + if (ret == TEST_SUCCESS) { + ret = + do_mm_store_ps(mTestIntPointer2, mTestInts[i + 4], mTestInts[i + 5], + mTestInts[i + 6], mTestInts[i + 7]); + } + + return ret; +} + +result_t SSE2NEONTestImpl::runSingleTest(InstructionTest test, uint32_t i) +{ + result_t ret = TEST_SUCCESS; + + switch (test) { +#define _(x) \ + case it_##x: \ + ret = test_##x(*this, i); \ + break; + INTRIN_LIST +#undef _ + } + + return ret; +} + +SSE2NEONTest *SSE2NEONTest::create(void) +{ + SSE2NEONTestImpl *st = new SSE2NEONTestImpl; + return static_cast(st); +} + +} // namespace SSE2NEON diff --git a/deps/sse2neon/tests/impl.h b/deps/sse2neon/tests/impl.h new file mode 100644 index 000000000..5cc5a6f8c --- /dev/null +++ b/deps/sse2neon/tests/impl.h @@ -0,0 +1,572 @@ +#ifndef SSE2NEONTEST_H +#define SSE2NEONTEST_H + +#include "common.h" + +#define INTRIN_LIST \ + /* MMX */ \ + _(mm_empty) \ + /* SSE */ \ + _(mm_add_ps) \ + _(mm_add_ss) \ + _(mm_and_ps) \ + _(mm_andnot_ps) \ + _(mm_avg_pu16) \ + _(mm_avg_pu8) \ + _(mm_cmpeq_ps) \ + _(mm_cmpeq_ss) \ + _(mm_cmpge_ps) \ + _(mm_cmpge_ss) \ + _(mm_cmpgt_ps) \ + _(mm_cmpgt_ss) \ + _(mm_cmple_ps) \ + _(mm_cmple_ss) \ + _(mm_cmplt_ps) \ + _(mm_cmplt_ss) \ + _(mm_cmpneq_ps) \ + _(mm_cmpneq_ss) \ + _(mm_cmpnge_ps) \ + _(mm_cmpnge_ss) \ + _(mm_cmpngt_ps) \ + _(mm_cmpngt_ss) \ + _(mm_cmpnle_ps) \ + _(mm_cmpnle_ss) \ + _(mm_cmpnlt_ps) \ + _(mm_cmpnlt_ss) \ + _(mm_cmpord_ps) \ + _(mm_cmpord_ss) \ + _(mm_cmpunord_ps) \ + _(mm_cmpunord_ss) \ + _(mm_comieq_ss) \ + _(mm_comige_ss) \ + _(mm_comigt_ss) \ + _(mm_comile_ss) \ + _(mm_comilt_ss) \ + _(mm_comineq_ss) \ + _(mm_cvt_pi2ps) \ + _(mm_cvt_ps2pi) \ + _(mm_cvt_si2ss) \ + _(mm_cvt_ss2si) \ + _(mm_cvtpi16_ps) \ + _(mm_cvtpi32_ps) \ + _(mm_cvtpi32x2_ps) \ + _(mm_cvtpi8_ps) \ + _(mm_cvtps_pi16) \ + _(mm_cvtps_pi32) \ + _(mm_cvtps_pi8) \ + _(mm_cvtpu16_ps) \ + _(mm_cvtpu8_ps) \ + _(mm_cvtsi32_ss) \ + _(mm_cvtsi64_ss) \ + _(mm_cvtss_f32) \ + _(mm_cvtss_si32) \ + _(mm_cvtss_si64) \ + _(mm_cvtt_ps2pi) \ + _(mm_cvtt_ss2si) \ + _(mm_cvttps_pi32) \ + _(mm_cvttss_si32) \ + _(mm_cvttss_si64) \ + _(mm_div_ps) \ + _(mm_div_ss) \ + _(mm_extract_pi16) \ + _(mm_free) \ + _(mm_get_flush_zero_mode) \ + _(mm_get_rounding_mode) \ + _(mm_getcsr) \ + _(mm_insert_pi16) \ + _(mm_load_ps) \ + _(mm_load_ps1) \ + _(mm_load_ss) \ + _(mm_load1_ps) \ + _(mm_loadh_pi) \ + _(mm_loadl_pi) \ + _(mm_loadr_ps) \ + _(mm_loadu_ps) \ + _(mm_loadu_si16) \ + _(mm_loadu_si64) \ + _(mm_malloc) \ + _(mm_maskmove_si64) \ + _(m_maskmovq) \ + _(mm_max_pi16) \ + _(mm_max_ps) \ + _(mm_max_pu8) \ + _(mm_max_ss) \ + _(mm_min_pi16) \ + _(mm_min_ps) \ + _(mm_min_pu8) \ + _(mm_min_ss) \ + _(mm_move_ss) \ + _(mm_movehl_ps) \ + _(mm_movelh_ps) \ + _(mm_movemask_pi8) \ + _(mm_movemask_ps) \ + _(mm_mul_ps) \ + _(mm_mul_ss) \ + _(mm_mulhi_pu16) \ + _(mm_or_ps) \ + _(m_pavgb) \ + _(m_pavgw) \ + _(m_pextrw) \ + _(m_pinsrw) \ + _(m_pmaxsw) \ + _(m_pmaxub) \ + _(m_pminsw) \ + _(m_pminub) \ + _(m_pmovmskb) \ + _(m_pmulhuw) \ + _(mm_prefetch) \ + _(m_psadbw) \ + _(m_pshufw) \ + _(mm_rcp_ps) \ + _(mm_rcp_ss) \ + _(mm_rsqrt_ps) \ + _(mm_rsqrt_ss) \ + _(mm_sad_pu8) \ + _(mm_set_flush_zero_mode) \ + _(mm_set_ps) \ + _(mm_set_ps1) \ + _(mm_set_rounding_mode) \ + _(mm_set_ss) \ + _(mm_set1_ps) \ + _(mm_setcsr) \ + _(mm_setr_ps) \ + _(mm_setzero_ps) \ + _(mm_sfence) \ + _(mm_shuffle_pi16) \ + _(mm_shuffle_ps) \ + _(mm_sqrt_ps) \ + _(mm_sqrt_ss) \ + _(mm_store_ps) \ + _(mm_store_ps1) \ + _(mm_store_ss) \ + _(mm_store1_ps) \ + _(mm_storeh_pi) \ + _(mm_storel_pi) \ + _(mm_storer_ps) \ + _(mm_storeu_ps) \ + _(mm_storeu_si16) \ + _(mm_storeu_si64) \ + _(mm_stream_pi) \ + _(mm_stream_ps) \ + _(mm_sub_ps) \ + _(mm_sub_ss) \ + _(mm_ucomieq_ss) \ + _(mm_ucomige_ss) \ + _(mm_ucomigt_ss) \ + _(mm_ucomile_ss) \ + _(mm_ucomilt_ss) \ + _(mm_ucomineq_ss) \ + _(mm_undefined_ps) \ + _(mm_unpackhi_ps) \ + _(mm_unpacklo_ps) \ + _(mm_xor_ps) \ + /* SSE2 */ \ + _(mm_add_epi16) \ + _(mm_add_epi32) \ + _(mm_add_epi64) \ + _(mm_add_epi8) \ + _(mm_add_pd) \ + _(mm_add_sd) \ + _(mm_add_si64) \ + _(mm_adds_epi16) \ + _(mm_adds_epi8) \ + _(mm_adds_epu16) \ + _(mm_adds_epu8) \ + _(mm_and_pd) \ + _(mm_and_si128) \ + _(mm_andnot_pd) \ + _(mm_andnot_si128) \ + _(mm_avg_epu16) \ + _(mm_avg_epu8) \ + _(mm_bslli_si128) \ + _(mm_bsrli_si128) \ + _(mm_castpd_ps) \ + _(mm_castpd_si128) \ + _(mm_castps_pd) \ + _(mm_castps_si128) \ + _(mm_castsi128_pd) \ + _(mm_castsi128_ps) \ + _(mm_clflush) \ + _(mm_cmpeq_epi16) \ + _(mm_cmpeq_epi32) \ + _(mm_cmpeq_epi8) \ + _(mm_cmpeq_pd) \ + _(mm_cmpeq_sd) \ + _(mm_cmpge_pd) \ + _(mm_cmpge_sd) \ + _(mm_cmpgt_epi16) \ + _(mm_cmpgt_epi32) \ + _(mm_cmpgt_epi8) \ + _(mm_cmpgt_pd) \ + _(mm_cmpgt_sd) \ + _(mm_cmple_pd) \ + _(mm_cmple_sd) \ + _(mm_cmplt_epi16) \ + _(mm_cmplt_epi32) \ + _(mm_cmplt_epi8) \ + _(mm_cmplt_pd) \ + _(mm_cmplt_sd) \ + _(mm_cmpneq_pd) \ + _(mm_cmpneq_sd) \ + _(mm_cmpnge_pd) \ + _(mm_cmpnge_sd) \ + _(mm_cmpngt_pd) \ + _(mm_cmpngt_sd) \ + _(mm_cmpnle_pd) \ + _(mm_cmpnle_sd) \ + _(mm_cmpnlt_pd) \ + _(mm_cmpnlt_sd) \ + _(mm_cmpord_pd) \ + _(mm_cmpord_sd) \ + _(mm_cmpunord_pd) \ + _(mm_cmpunord_sd) \ + _(mm_comieq_sd) \ + _(mm_comige_sd) \ + _(mm_comigt_sd) \ + _(mm_comile_sd) \ + _(mm_comilt_sd) \ + _(mm_comineq_sd) \ + _(mm_cvtepi32_pd) \ + _(mm_cvtepi32_ps) \ + _(mm_cvtpd_epi32) \ + _(mm_cvtpd_pi32) \ + _(mm_cvtpd_ps) \ + _(mm_cvtpi32_pd) \ + _(mm_cvtps_epi32) \ + _(mm_cvtps_pd) \ + _(mm_cvtsd_f64) \ + _(mm_cvtsd_si32) \ + _(mm_cvtsd_si64) \ + _(mm_cvtsd_si64x) \ + _(mm_cvtsd_ss) \ + _(mm_cvtsi128_si32) \ + _(mm_cvtsi128_si64) \ + _(mm_cvtsi128_si64x) \ + _(mm_cvtsi32_sd) \ + _(mm_cvtsi32_si128) \ + _(mm_cvtsi64_sd) \ + _(mm_cvtsi64_si128) \ + _(mm_cvtsi64x_sd) \ + _(mm_cvtsi64x_si128) \ + _(mm_cvtss_sd) \ + _(mm_cvttpd_epi32) \ + _(mm_cvttpd_pi32) \ + _(mm_cvttps_epi32) \ + _(mm_cvttsd_si32) \ + _(mm_cvttsd_si64) \ + _(mm_cvttsd_si64x) \ + _(mm_div_pd) \ + _(mm_div_sd) \ + _(mm_extract_epi16) \ + _(mm_insert_epi16) \ + _(mm_lfence) \ + _(mm_load_pd) \ + _(mm_load_pd1) \ + _(mm_load_sd) \ + _(mm_load_si128) \ + _(mm_load1_pd) \ + _(mm_loadh_pd) \ + _(mm_loadl_epi64) \ + _(mm_loadl_pd) \ + _(mm_loadr_pd) \ + _(mm_loadu_pd) \ + _(mm_loadu_si128) \ + _(mm_loadu_si32) \ + _(mm_madd_epi16) \ + _(mm_maskmoveu_si128) \ + _(mm_max_epi16) \ + _(mm_max_epu8) \ + _(mm_max_pd) \ + _(mm_max_sd) \ + _(mm_mfence) \ + _(mm_min_epi16) \ + _(mm_min_epu8) \ + _(mm_min_pd) \ + _(mm_min_sd) \ + _(mm_move_epi64) \ + _(mm_move_sd) \ + _(mm_movemask_epi8) \ + _(mm_movemask_pd) \ + _(mm_movepi64_pi64) \ + _(mm_movpi64_epi64) \ + _(mm_mul_epu32) \ + _(mm_mul_pd) \ + _(mm_mul_sd) \ + _(mm_mul_su32) \ + _(mm_mulhi_epi16) \ + _(mm_mulhi_epu16) \ + _(mm_mullo_epi16) \ + _(mm_or_pd) \ + _(mm_or_si128) \ + _(mm_packs_epi16) \ + _(mm_packs_epi32) \ + _(mm_packus_epi16) \ + _(mm_pause) \ + _(mm_sad_epu8) \ + _(mm_set_epi16) \ + _(mm_set_epi32) \ + _(mm_set_epi64) \ + _(mm_set_epi64x) \ + _(mm_set_epi8) \ + _(mm_set_pd) \ + _(mm_set_pd1) \ + _(mm_set_sd) \ + _(mm_set1_epi16) \ + _(mm_set1_epi32) \ + _(mm_set1_epi64) \ + _(mm_set1_epi64x) \ + _(mm_set1_epi8) \ + _(mm_set1_pd) \ + _(mm_setr_epi16) \ + _(mm_setr_epi32) \ + _(mm_setr_epi64) \ + _(mm_setr_epi8) \ + _(mm_setr_pd) \ + _(mm_setzero_pd) \ + _(mm_setzero_si128) \ + _(mm_shuffle_epi32) \ + _(mm_shuffle_pd) \ + _(mm_shufflehi_epi16) \ + _(mm_shufflelo_epi16) \ + _(mm_sll_epi16) \ + _(mm_sll_epi32) \ + _(mm_sll_epi64) \ + _(mm_slli_epi16) \ + _(mm_slli_epi32) \ + _(mm_slli_epi64) \ + _(mm_slli_si128) \ + _(mm_sqrt_pd) \ + _(mm_sqrt_sd) \ + _(mm_sra_epi16) \ + _(mm_sra_epi32) \ + _(mm_srai_epi16) \ + _(mm_srai_epi32) \ + _(mm_srl_epi16) \ + _(mm_srl_epi32) \ + _(mm_srl_epi64) \ + _(mm_srli_epi16) \ + _(mm_srli_epi32) \ + _(mm_srli_epi64) \ + _(mm_srli_si128) \ + _(mm_store_pd) \ + _(mm_store_pd1) \ + _(mm_store_sd) \ + _(mm_store_si128) \ + _(mm_store1_pd) \ + _(mm_storeh_pd) \ + _(mm_storel_epi64) \ + _(mm_storel_pd) \ + _(mm_storer_pd) \ + _(mm_storeu_pd) \ + _(mm_storeu_si128) \ + _(mm_storeu_si32) \ + _(mm_stream_pd) \ + _(mm_stream_si128) \ + _(mm_stream_si32) \ + _(mm_stream_si64) \ + _(mm_sub_epi16) \ + _(mm_sub_epi32) \ + _(mm_sub_epi64) \ + _(mm_sub_epi8) \ + _(mm_sub_pd) \ + _(mm_sub_sd) \ + _(mm_sub_si64) \ + _(mm_subs_epi16) \ + _(mm_subs_epi8) \ + _(mm_subs_epu16) \ + _(mm_subs_epu8) \ + _(mm_ucomieq_sd) \ + _(mm_ucomige_sd) \ + _(mm_ucomigt_sd) \ + _(mm_ucomile_sd) \ + _(mm_ucomilt_sd) \ + _(mm_ucomineq_sd) \ + _(mm_undefined_pd) \ + _(mm_undefined_si128) \ + _(mm_unpackhi_epi16) \ + _(mm_unpackhi_epi32) \ + _(mm_unpackhi_epi64) \ + _(mm_unpackhi_epi8) \ + _(mm_unpackhi_pd) \ + _(mm_unpacklo_epi16) \ + _(mm_unpacklo_epi32) \ + _(mm_unpacklo_epi64) \ + _(mm_unpacklo_epi8) \ + _(mm_unpacklo_pd) \ + _(mm_xor_pd) \ + _(mm_xor_si128) \ + /* SSE3 */ \ + _(mm_addsub_pd) \ + _(mm_addsub_ps) \ + _(mm_hadd_pd) \ + _(mm_hadd_ps) \ + _(mm_hsub_pd) \ + _(mm_hsub_ps) \ + _(mm_lddqu_si128) \ + _(mm_loaddup_pd) \ + _(mm_movedup_pd) \ + _(mm_movehdup_ps) \ + _(mm_moveldup_ps) \ + /* SSSE3 */ \ + _(mm_abs_epi16) \ + _(mm_abs_epi32) \ + _(mm_abs_epi8) \ + _(mm_abs_pi16) \ + _(mm_abs_pi32) \ + _(mm_abs_pi8) \ + _(mm_alignr_epi8) \ + _(mm_alignr_pi8) \ + _(mm_hadd_epi16) \ + _(mm_hadd_epi32) \ + _(mm_hadd_pi16) \ + _(mm_hadd_pi32) \ + _(mm_hadds_epi16) \ + _(mm_hadds_pi16) \ + _(mm_hsub_epi16) \ + _(mm_hsub_epi32) \ + _(mm_hsub_pi16) \ + _(mm_hsub_pi32) \ + _(mm_hsubs_epi16) \ + _(mm_hsubs_pi16) \ + _(mm_maddubs_epi16) \ + _(mm_maddubs_pi16) \ + _(mm_mulhrs_epi16) \ + _(mm_mulhrs_pi16) \ + _(mm_shuffle_epi8) \ + _(mm_shuffle_pi8) \ + _(mm_sign_epi16) \ + _(mm_sign_epi32) \ + _(mm_sign_epi8) \ + _(mm_sign_pi16) \ + _(mm_sign_pi32) \ + _(mm_sign_pi8) \ + /* SSE4.1 */ \ + _(mm_blend_epi16) \ + _(mm_blend_pd) \ + _(mm_blend_ps) \ + _(mm_blendv_epi8) \ + _(mm_blendv_pd) \ + _(mm_blendv_ps) \ + _(mm_ceil_pd) \ + _(mm_ceil_ps) \ + _(mm_ceil_sd) \ + _(mm_ceil_ss) \ + _(mm_cmpeq_epi64) \ + _(mm_cvtepi16_epi32) \ + _(mm_cvtepi16_epi64) \ + _(mm_cvtepi32_epi64) \ + _(mm_cvtepi8_epi16) \ + _(mm_cvtepi8_epi32) \ + _(mm_cvtepi8_epi64) \ + _(mm_cvtepu16_epi32) \ + _(mm_cvtepu16_epi64) \ + _(mm_cvtepu32_epi64) \ + _(mm_cvtepu8_epi16) \ + _(mm_cvtepu8_epi32) \ + _(mm_cvtepu8_epi64) \ + _(mm_dp_pd) \ + _(mm_dp_ps) \ + _(mm_extract_epi32) \ + _(mm_extract_epi64) \ + _(mm_extract_epi8) \ + _(mm_extract_ps) \ + _(mm_floor_pd) \ + _(mm_floor_ps) \ + _(mm_floor_sd) \ + _(mm_floor_ss) \ + _(mm_insert_epi32) \ + _(mm_insert_epi64) \ + _(mm_insert_epi8) \ + _(mm_insert_ps) \ + _(mm_max_epi32) \ + _(mm_max_epi8) \ + _(mm_max_epu16) \ + _(mm_max_epu32) \ + _(mm_min_epi32) \ + _(mm_min_epi8) \ + _(mm_min_epu16) \ + _(mm_min_epu32) \ + _(mm_minpos_epu16) \ + _(mm_mpsadbw_epu8) \ + _(mm_mul_epi32) \ + _(mm_mullo_epi32) \ + _(mm_packus_epi32) \ + _(mm_round_pd) \ + _(mm_round_ps) \ + _(mm_round_sd) \ + _(mm_round_ss) \ + _(mm_stream_load_si128) \ + _(mm_test_all_ones) \ + _(mm_test_all_zeros) \ + _(mm_test_mix_ones_zeros) \ + _(mm_testc_si128) \ + _(mm_testnzc_si128) \ + _(mm_testz_si128) \ + /* SSE4.2 */ \ + _(mm_cmpestra) \ + _(mm_cmpestrc) \ + _(mm_cmpestri) \ + _(mm_cmpestrm) \ + _(mm_cmpestro) \ + _(mm_cmpestrs) \ + _(mm_cmpestrz) \ + _(mm_cmpgt_epi64) \ + _(mm_cmpistra) \ + _(mm_cmpistrc) \ + _(mm_cmpistri) \ + _(mm_cmpistrm) \ + _(mm_cmpistro) \ + _(mm_cmpistrs) \ + _(mm_cmpistrz) \ + _(mm_crc32_u16) \ + _(mm_crc32_u32) \ + _(mm_crc32_u64) \ + _(mm_crc32_u8) \ + /* AES */ \ + _(mm_aesenc_si128) \ + _(mm_aesdec_si128) \ + _(mm_aesenclast_si128) \ + _(mm_aesdeclast_si128) \ + _(mm_aesimc_si128) \ + _(mm_aeskeygenassist_si128) \ + /* Others */ \ + _(mm_clmulepi64_si128) \ + _(mm_get_denormals_zero_mode) \ + _(mm_popcnt_u32) \ + _(mm_popcnt_u64) \ + _(mm_set_denormals_zero_mode) \ + _(rdtsc) \ + _(last) /* This indicates the end of macros */ + +namespace SSE2NEON +{ +// The way unit tests are implemented is that 10,000 random floating point and +// integer vec4 numbers are generated as sample data. +// +// A short C implementation of every intrinsic is implemented and compared to +// the actual expected results from the corresponding SSE intrinsic against all +// of the 10,000 randomized input vectors. When running on ARM, then the results +// are compared to the NEON approximate version. +extern const char *instructionString[]; +enum InstructionTest { +#define _(x) it_##x, + INTRIN_LIST +#undef _ +}; + +class SSE2NEONTest +{ +public: + static SSE2NEONTest *create(void); // create the test. + + // Run test of this instruction; + // Passed: TEST_SUCCESS (1) + // Failed: TEST_FAIL (0) + // Unimplemented: TEST_UNIMPL (-1) + virtual result_t runTest(InstructionTest test) = 0; + virtual void release(void) = 0; +}; + +} // namespace SSE2NEON + +#endif diff --git a/deps/sse2neon/tests/main.cpp b/deps/sse2neon/tests/main.cpp new file mode 100644 index 000000000..844353e08 --- /dev/null +++ b/deps/sse2neon/tests/main.cpp @@ -0,0 +1,39 @@ +#include +#include +#include "impl.h" + +int main(int /*argc*/, const char ** /*argv*/) +{ + SSE2NEON::SSE2NEONTest *test = SSE2NEON::SSE2NEONTest::create(); + uint32_t passCount = 0; + uint32_t failedCount = 0; + uint32_t ignoreCount = 0; + for (uint32_t i = 0; i < SSE2NEON::it_last; i++) { + SSE2NEON::InstructionTest it = SSE2NEON::InstructionTest(i); + SSE2NEON::result_t ret = test->runTest(it); + // If the test fails, we will run it again so we can step into the + // debugger and figure out why! + if (ret == SSE2NEON::TEST_FAIL) { + printf("Test %-30s failed\n", SSE2NEON::instructionString[it]); + failedCount++; + } else if (ret == SSE2NEON::TEST_UNIMPL) { + printf("Test %-30s skipped\n", SSE2NEON::instructionString[it]); + ignoreCount++; + } else { + printf("Test %-30s passed\n", SSE2NEON::instructionString[it]); + passCount++; + } + } + test->release(); + printf( + "SSE2NEONTest Complete!\n" + "Passed: %d\n" + "Failed: %d\n" + "Ignored: %d\n" + "Coverage rate: %.2f%%\n", + passCount, failedCount, ignoreCount, + (float) passCount / (float) (passCount + failedCount + ignoreCount) * + 100); + + return failedCount ? -1 : 0; +} diff --git a/docs/changes.txt b/docs/changes.txt index 8521d5591..7ba71069e 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -119,6 +119,7 @@ - Apple Driver: Updated requirements to use Apple OpenCL API to macOS 13.0 - use - Backend Checks: Describe workaround in error message when detecting more than 64 backend devices - Brain: Added sanity check and corresponding error message for invalid --brain-port values +- Dependencies: Added sse2neon v1.8.0 (commit 658eeac) - Dependencies: Updated LZMA SDK to 24.09 - Dependencies: Updated unrar source to 6.2.7 - Dependencies: Updated xxHash to 0.8.3 (commit 50f4226) diff --git a/docs/license_libs/SSE2NEON_LICENSE.txt b/docs/license_libs/SSE2NEON_LICENSE.txt new file mode 100644 index 000000000..edc36de51 --- /dev/null +++ b/docs/license_libs/SSE2NEON_LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2015-2025 SSE2NEON Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/src/Makefile b/src/Makefile index fe28aff62..0036af1ea 100644 --- a/src/Makefile +++ b/src/Makefile @@ -149,6 +149,8 @@ DEPS_UNRAR_PATH := $(LIBRARY_DEV_ROOT_FOLDER) endif endif +DEPS_SSE2NEON := deps/sse2neon + ## ## Filenames for library and frontend ## @@ -361,6 +363,8 @@ LFLAGS_NATIVE += -lpthread LFLAGS_NATIVE += -liconv ifeq ($(IS_APPLE_SILICON),1) +CFLAGS_NATIVE += -DSSE2NEON_SUPPRESS_WARNINGS +CFLAGS_NATIVE += -I$(DEPS_SSE2NEON) CFLAGS_NATIVE += -arch arm64 CFLAGS_NATIVE += -arch x86_64 ifeq ($(SHARED),1) @@ -820,6 +824,11 @@ CFLAGS_LZMA_WIN += -Wno-misleading-indentation CFLAGS_UNRAR_WIN += -Wno-misleading-indentation CFLAGS_UNRAR_WIN += -Wno-class-memaccess + +ifeq ($(IS_APPLE_SILICON),1) +CFLAGS_CROSS_LINUX += -DSSE2NEON_SUPPRESS_WARNINGS +CFLAGS_CROSS_LINUX += -I$(DEPS_SSE2NEON) +endif endif ## From c56199f06b51c5a5f187f62147b5700994e747fd Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Sat, 31 May 2025 08:59:18 +0200 Subject: [PATCH 23/95] Fix bridge_argon2id_reference.mk to compile on MSYS --- .github/workflows/build.yml | 2 ++ src/Makefile | 9 ++++---- src/bridges/bridge_argon2id_reference.mk | 26 +++++++++++++++++++----- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ee10dea2e..7caa5ac47 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -25,6 +25,7 @@ on: - 'OpenCL/**.cl' - 'include/**.h' - 'src/**.c' + - 'src/**.mk' - 'tools/**' - '**/Makefile' - '.github/workflows/build.yml' @@ -36,6 +37,7 @@ on: - 'OpenCL/**.cl' - 'include/**.h' - 'src/**.c' + - 'src/**.mk' - 'tools/**' - '**/Makefile' - '.github/workflows/build.yml' diff --git a/src/Makefile b/src/Makefile index fe28aff62..917f78126 100644 --- a/src/Makefile +++ b/src/Makefile @@ -748,10 +748,10 @@ $(BRIDGES_DISABLE): ; ifeq ($(SHARED),1) bridges/bridge_%.$(BRIDGE_SUFFIX): src/bridges/bridge_%.c $(HASHCAT_LIBRARY) - $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) -march=native + $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) else bridges/bridge_%.$(BRIDGE_SUFFIX): src/bridges/bridge_%.c obj/combined.NATIVE.a - $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) -march=native + $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) endif BRIDGES_LIB := $(patsubst src/bridges/bridge_%.c, bridges/bridge_%.$(BRIDGE_SUFFIX), $(BRIDGES_SRC)) @@ -877,11 +877,10 @@ bridges_linux: $(BRIDGES_LIB_LINUX) bridges_win: $(BRIDGES_LIB_WIN) bridges/bridge_%.so: src/bridges/bridge_%.c obj/combined.LINUX.a - $(CC_LINUX) $(CCFLAGS) $(CFLAGS_CROSS_LINUX) $^ -o $@ $(LFLAGS_CROSS_LINUX) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) -march=native + $(CC_LINUX) $(CCFLAGS) $(CFLAGS_CROSS_LINUX) $^ -o $@ $(LFLAGS_CROSS_LINUX) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) bridges/bridge_%.dll: src/bridges/bridge_%.c obj/combined.WIN.a - $(CC_WIN) $(CCFLAGS) $(CFLAGS_CROSS_WIN) $^ -o $@ $(LFLAGS_CROSS_WIN) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) -march=native - + $(CC_WIN) $(CCFLAGS) $(CFLAGS_CROSS_WIN) $^ -o $@ $(LFLAGS_CROSS_WIN) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) ## ## cross compiled hashcat diff --git a/src/bridges/bridge_argon2id_reference.mk b/src/bridges/bridge_argon2id_reference.mk index 50ca3bf7f..1ce6051ee 100644 --- a/src/bridges/bridge_argon2id_reference.mk +++ b/src/bridges/bridge_argon2id_reference.mk @@ -1,14 +1,30 @@ ARGON2_REFERENCE := deps/phc-winner-argon2-20190702 +ARGON2_REFERENCE_CFLAGS := -I$(ARGON2_REFERENCE)/_hashcat/ ifeq ($(MAKECMDGOALS),binaries) -ARGON2_REFERENCE_CFLAGS := -I$(ARGON2_REFERENCE)/_hashcat/ -mavx2 +ARGON2_REFERENCE_CFLAGS += -mavx2 else -ARGON2_REFERENCE_CFLAGS := -I$(ARGON2_REFERENCE)/_hashcat/ -march=native +ifeq ($(UNAME),Darwin) +ifeq ($(IS_APPLE_SILICON),0) +ARGON2_REFERENCE_CFLAGS += -mavx2 +endif +else +ARGON2_REFERENCE_CFLAGS += -march=native +endif endif +ifeq ($(MAKECMDGOALS),binaries) bridges/bridge_argon2id_reference.so: src/bridges/bridge_argon2id_reference.c obj/combined.LINUX.a - $(CC_LINUX) $(CCFLAGS) $(CFLAGS_CROSS_LINUX) $^ -o $@ $(LFLAGS_CROSS_LINUX) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(ARGON2_REFERENCE_CFLAGS) - + $(CC_LINUX) $(CCFLAGS) $(CFLAGS_CROSS_LINUX) $^ -o $@ $(LFLAGS_CROSS_LINUX) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(ARGON2_REFERENCE_CFLAGS) bridges/bridge_argon2id_reference.dll: src/bridges/bridge_argon2id_reference.c obj/combined.WIN.a - $(CC_WIN) $(CCFLAGS) $(CFLAGS_CROSS_WIN) $^ -o $@ $(LFLAGS_CROSS_WIN) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(ARGON2_REFERENCE_CFLAGS) + $(CC_WIN) $(CCFLAGS) $(CFLAGS_CROSS_WIN) $^ -o $@ $(LFLAGS_CROSS_WIN) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(ARGON2_REFERENCE_CFLAGS) +else +ifeq ($(SHARED),1) +bridges/bridge_argon2id_reference.$(BRIDGE_SUFFIX): src/bridges/bridge_argon2id_reference.c $(HASHCAT_LIBRARY) + $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(ARGON2_REFERENCE_CFLAGS) +else +bridges/bridge_argon2id_reference.$(BRIDGE_SUFFIX): src/bridges/bridge_argon2id_reference.c obj/combined.NATIVE.a + $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(ARGON2_REFERENCE_CFLAGS) +endif +endif From a2a994147518133c9494e575dff307d2cd7d30a9 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Sat, 31 May 2025 12:24:44 +0200 Subject: [PATCH 24/95] The Assimilation Bridge (Scrypt-Jane GPU-CPU hybrid plugin -m 70100) --- OpenCL/m70100-pure.cl | 206 ++++++++ deps/scrypt-jane-master/README.md | 163 ++++++ deps/scrypt-jane-master/_hashcat/macos.patch | 87 ++++ deps/scrypt-jane-master/code/scrypt-conf.h | 28 ++ .../code/scrypt-jane-chacha.h | 162 ++++++ .../code/scrypt-jane-hash.h | 48 ++ .../code/scrypt-jane-hash_blake256.h | 177 +++++++ .../code/scrypt-jane-hash_blake512.h | 181 +++++++ .../code/scrypt-jane-hash_keccak.h | 168 +++++++ .../code/scrypt-jane-hash_sha256.h | 135 +++++ .../code/scrypt-jane-hash_sha512.h | 152 ++++++ .../code/scrypt-jane-hash_skein512.h | 188 +++++++ .../code/scrypt-jane-mix_chacha-avx.h | 368 ++++++++++++++ .../code/scrypt-jane-mix_chacha-sse2.h | 363 ++++++++++++++ .../code/scrypt-jane-mix_chacha-ssse3.h | 376 ++++++++++++++ .../code/scrypt-jane-mix_chacha-xop.h | 315 ++++++++++++ .../code/scrypt-jane-mix_chacha.h | 69 +++ .../code/scrypt-jane-mix_salsa-avx.h | 381 ++++++++++++++ .../code/scrypt-jane-mix_salsa-sse2.h | 443 +++++++++++++++++ .../code/scrypt-jane-mix_salsa-xop.h | 317 ++++++++++++ .../code/scrypt-jane-mix_salsa.h | 70 +++ .../code/scrypt-jane-mix_salsa64-avx.h | 367 ++++++++++++++ .../code/scrypt-jane-mix_salsa64-avx2.h | 221 +++++++++ .../code/scrypt-jane-mix_salsa64-sse2.h | 449 +++++++++++++++++ .../code/scrypt-jane-mix_salsa64-ssse3.h | 399 +++++++++++++++ .../code/scrypt-jane-mix_salsa64-xop.h | 335 +++++++++++++ .../code/scrypt-jane-mix_salsa64.h | 41 ++ .../code/scrypt-jane-pbkdf2.h | 112 +++++ .../code/scrypt-jane-portable-x86.h | 469 ++++++++++++++++++ .../code/scrypt-jane-portable.h | 307 ++++++++++++ .../code/scrypt-jane-romix-basic.h | 74 +++ .../code/scrypt-jane-romix-template.h | 122 +++++ .../code/scrypt-jane-romix.h | 27 + .../code/scrypt-jane-salsa.h | 134 +++++ .../code/scrypt-jane-salsa64.h | 183 +++++++ .../code/scrypt-jane-test-vectors.h | 261 ++++++++++ deps/scrypt-jane-master/example.c | 13 + deps/scrypt-jane-master/scrypt-jane-speed.c | 121 +++++ deps/scrypt-jane-master/scrypt-jane-test.c | 12 + deps/scrypt-jane-master/scrypt-jane.c | 182 +++++++ deps/scrypt-jane-master/scrypt-jane.h | 27 + deps/scrypt-jane-master/test-speed.sh | 38 ++ deps/scrypt-jane-master/test.sh | 44 ++ src/bridges/bridge_scrypt_jane.c | 292 +++++++++++ src/bridges/bridge_scrypt_jane.mk | 30 ++ src/modules/module_70100.c | 298 +++++++++++ tools/test_modules/m70100.pm | 90 ++++ 47 files changed, 9045 insertions(+) create mode 100644 OpenCL/m70100-pure.cl create mode 100644 deps/scrypt-jane-master/README.md create mode 100644 deps/scrypt-jane-master/_hashcat/macos.patch create mode 100644 deps/scrypt-jane-master/code/scrypt-conf.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-chacha.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-hash.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-hash_blake256.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-hash_blake512.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-hash_keccak.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-hash_sha256.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-hash_sha512.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-hash_skein512.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-mix_chacha-avx.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-mix_chacha-sse2.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-mix_chacha-ssse3.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-mix_chacha-xop.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-mix_chacha.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-mix_salsa-avx.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-mix_salsa-sse2.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-mix_salsa-xop.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-mix_salsa.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-mix_salsa64-avx.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-mix_salsa64-avx2.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-mix_salsa64-sse2.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-mix_salsa64-ssse3.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-mix_salsa64-xop.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-mix_salsa64.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-pbkdf2.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-portable-x86.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-portable.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-romix-basic.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-romix-template.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-romix.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-salsa.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-salsa64.h create mode 100644 deps/scrypt-jane-master/code/scrypt-jane-test-vectors.h create mode 100644 deps/scrypt-jane-master/example.c create mode 100644 deps/scrypt-jane-master/scrypt-jane-speed.c create mode 100644 deps/scrypt-jane-master/scrypt-jane-test.c create mode 100644 deps/scrypt-jane-master/scrypt-jane.c create mode 100644 deps/scrypt-jane-master/scrypt-jane.h create mode 100644 deps/scrypt-jane-master/test-speed.sh create mode 100644 deps/scrypt-jane-master/test.sh create mode 100644 src/bridges/bridge_scrypt_jane.c create mode 100644 src/bridges/bridge_scrypt_jane.mk create mode 100644 src/modules/module_70100.c create mode 100644 tools/test_modules/m70100.pm diff --git a/OpenCL/m70100-pure.cl b/OpenCL/m70100-pure.cl new file mode 100644 index 000000000..8fc213b98 --- /dev/null +++ b/OpenCL/m70100-pure.cl @@ -0,0 +1,206 @@ +/** + * Author......: See docs/credits.txt + * License.....: MIT + */ + +#ifdef KERNEL_STATIC +#include M2S(INCLUDE_PATH/inc_vendor.h) +#include M2S(INCLUDE_PATH/inc_types.h) +#include M2S(INCLUDE_PATH/inc_platform.cl) +#include M2S(INCLUDE_PATH/inc_common.cl) +#include M2S(INCLUDE_PATH/inc_hash_sha256.cl) +#endif + +#define COMPARE_S M2S(INCLUDE_PATH/inc_comp_single.cl) +#define COMPARE_M M2S(INCLUDE_PATH/inc_comp_multi.cl) + +#define SCRYPT_R_MAX 16 +#define SCRYPT_P_MAX 16 + +#define SCRYPT_TMP_SIZE (128ULL * SCRYPT_R_MAX * SCRYPT_P_MAX) +#define SCRYPT_TMP_SIZE4 (SCRYPT_TMP_SIZE / 4) + +typedef struct +{ + u32 P[SCRYPT_TMP_SIZE4]; + +} scrypt_tmp_t; + +typedef struct +{ + u32 salt_buf[64]; + u32 salt_len; + + u32 digest_buf[64]; + u32 digest_len; + + u32 N; + u32 r; + u32 p; + +} scrypt_t; + +KERNEL_FQ void m70100_init (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, scrypt_t)) +{ + /** + * base + */ + + const u64 gid = get_global_id (0); + + if (gid >= GID_CNT) return; + + sha256_hmac_ctx_t sha256_hmac_ctx; + + sha256_hmac_init_global_swap (&sha256_hmac_ctx, pws[gid].i, pws[gid].pw_len); + + sha256_hmac_update_global_swap (&sha256_hmac_ctx, esalt_bufs[DIGESTS_OFFSET_HOST].salt_buf, esalt_bufs[DIGESTS_OFFSET_HOST].salt_len); + + u32 r = esalt_bufs[DIGESTS_OFFSET_HOST].r; + u32 p = esalt_bufs[DIGESTS_OFFSET_HOST].p; + + u32 chunk_bytes = 64 * r * 2; + + u32 x_bytes = chunk_bytes * p; + + for (u32 i = 0, j = 0, k = 1; i < x_bytes; i += 32, j += 8, k += 1) + { + sha256_hmac_ctx_t sha256_hmac_ctx2 = sha256_hmac_ctx; + + u32 w0[4]; + u32 w1[4]; + u32 w2[4]; + u32 w3[4]; + + w0[0] = k; + w0[1] = 0; + w0[2] = 0; + w0[3] = 0; + w1[0] = 0; + w1[1] = 0; + w1[2] = 0; + w1[3] = 0; + w2[0] = 0; + w2[1] = 0; + w2[2] = 0; + w2[3] = 0; + w3[0] = 0; + w3[1] = 0; + w3[2] = 0; + w3[3] = 0; + + sha256_hmac_update_64 (&sha256_hmac_ctx2, w0, w1, w2, w3, 4); + + sha256_hmac_final (&sha256_hmac_ctx2); + + u32 digest[8]; + + digest[0] = sha256_hmac_ctx2.opad.h[0]; + digest[1] = sha256_hmac_ctx2.opad.h[1]; + digest[2] = sha256_hmac_ctx2.opad.h[2]; + digest[3] = sha256_hmac_ctx2.opad.h[3]; + digest[4] = sha256_hmac_ctx2.opad.h[4]; + digest[5] = sha256_hmac_ctx2.opad.h[5]; + digest[6] = sha256_hmac_ctx2.opad.h[6]; + digest[7] = sha256_hmac_ctx2.opad.h[7]; + + tmps[gid].P[j + 0] = hc_swap32_S (digest[0]); + tmps[gid].P[j + 1] = hc_swap32_S (digest[1]); + tmps[gid].P[j + 2] = hc_swap32_S (digest[2]); + tmps[gid].P[j + 3] = hc_swap32_S (digest[3]); + tmps[gid].P[j + 4] = hc_swap32_S (digest[4]); + tmps[gid].P[j + 5] = hc_swap32_S (digest[5]); + tmps[gid].P[j + 6] = hc_swap32_S (digest[6]); + tmps[gid].P[j + 7] = hc_swap32_S (digest[7]); + } +} + +KERNEL_FQ void m70100_loop (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, scrypt_t)) +{ +} + +KERNEL_FQ void m70100_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, scrypt_t)) +{ + /** + * base + */ + + const u64 gid = get_global_id (0); + const u64 lid = get_local_id (0); + + if (gid >= GID_CNT) return; + + /** + * 2nd pbkdf2, creates B + */ + + u32 w0[4]; + u32 w1[4]; + u32 w2[4]; + u32 w3[4]; + + sha256_hmac_ctx_t ctx; + + sha256_hmac_init_global_swap (&ctx, pws[gid].i, pws[gid].pw_len); + + u32 r = esalt_bufs[DIGESTS_OFFSET_HOST].r; + u32 p = esalt_bufs[DIGESTS_OFFSET_HOST].p; + + u32 chunk_bytes = 64 * r * 2; + + u32 x_bytes = chunk_bytes * p; + + for (u32 i = 0, j = 0; i < x_bytes; i += 64, j += 16) + { + w0[0] = hc_swap32_S (tmps[gid].P[j + 0]); + w0[1] = hc_swap32_S (tmps[gid].P[j + 1]); + w0[2] = hc_swap32_S (tmps[gid].P[j + 2]); + w0[3] = hc_swap32_S (tmps[gid].P[j + 3]); + w1[0] = hc_swap32_S (tmps[gid].P[j + 4]); + w1[1] = hc_swap32_S (tmps[gid].P[j + 5]); + w1[2] = hc_swap32_S (tmps[gid].P[j + 6]); + w1[3] = hc_swap32_S (tmps[gid].P[j + 7]); + w2[0] = hc_swap32_S (tmps[gid].P[j + 8]); + w2[1] = hc_swap32_S (tmps[gid].P[j + 9]); + w2[2] = hc_swap32_S (tmps[gid].P[j + 10]); + w2[3] = hc_swap32_S (tmps[gid].P[j + 11]); + w3[0] = hc_swap32_S (tmps[gid].P[j + 12]); + w3[1] = hc_swap32_S (tmps[gid].P[j + 13]); + w3[2] = hc_swap32_S (tmps[gid].P[j + 14]); + w3[3] = hc_swap32_S (tmps[gid].P[j + 15]); + + sha256_hmac_update_64 (&ctx, w0, w1, w2, w3, 64); + } + + w0[0] = 1; + w0[1] = 0; + w0[2] = 0; + w0[3] = 0; + w1[0] = 0; + w1[1] = 0; + w1[2] = 0; + w1[3] = 0; + w2[0] = 0; + w2[1] = 0; + w2[2] = 0; + w2[3] = 0; + w3[0] = 0; + w3[1] = 0; + w3[2] = 0; + w3[3] = 0; + + sha256_hmac_update_64 (&ctx, w0, w1, w2, w3, 4); + + sha256_hmac_final (&ctx); + + const u32 r0 = hc_swap32_S (ctx.opad.h[DGST_R0]); + const u32 r1 = hc_swap32_S (ctx.opad.h[DGST_R1]); + const u32 r2 = hc_swap32_S (ctx.opad.h[DGST_R2]); + const u32 r3 = hc_swap32_S (ctx.opad.h[DGST_R3]); + + #define il_pos 0 + + #ifdef KERNEL_STATIC + #include COMPARE_M + #endif +} diff --git a/deps/scrypt-jane-master/README.md b/deps/scrypt-jane-master/README.md new file mode 100644 index 000000000..9585a0ca3 --- /dev/null +++ b/deps/scrypt-jane-master/README.md @@ -0,0 +1,163 @@ +This project provides a performant, flexible implementations of Colin Percival's [scrypt](http://www.tarsnap.com/scrypt.html). + +# Features + +## Modular Design + +The code uses a modular (compile, not runtime) layout to allow new mixing & hash functions to be added easily. The base components (HMAC, PBKDF2, and scrypt) are static and will immediately work with any conforming mix or hash function. + +## Supported Mix Functions + +* [Salsa20/8](http://cr.yp.to/salsa20.html) +* [ChaCha20/8](http://cr.yp.to/chacha.html) +* [Salsa6420/8]() + +I am not actually aware of any other candidates for a decent mix function. Salsa20/8 was nearly perfect, but its successor, ChaCha20/8, has better diffusion and is thus stronger, is potentially faster given advanced SIMD support (byte level shuffles, or a 32bit rotate), and is slightly cleaner to implement given that it requires no pre/post processing of data for SIMD implementations. + +64-byte blocks are no longer assumed! Salsa6420/8 is a 'proof of concept' 64-bit version of Salsa20/8 with a 128 byte block, and rotation constants chosen to allow 32-bit word shuffles instead of rotations for two of the rotations which put it on par with ChaCha in terms of SSE implementation shortcuts. + +## Supported Hash Functions + +* SHA256/512 +* [BLAKE256/512](https://www.131002.net/blake/) +* [Skein512](http://www.skein-hash.info/) +* [Keccak256/512](http://keccak.noekeon.org/) (SHA-3) + +Hash function implementations, unlike mix functions, are not optimized. The PBKDF2 computations are relatively minor in the scrypt algorithm, so including CPU specific versions, or vastly unrolling loops, would serve little purpose while bloating the code, both source and binary, and making it more confusing to implement correctly. + +Most (now only two!) of the SHA-3 candidates fall in to the "annoying to read/implement" category and have not been included yet. This will of course be moot once ~~BLAKE is chosen as SHA-3~~ Keccak is chosen as SHA-3. Well shit. + +## CPU Adaptation + +The mixing function specialization is selected at runtime based on what the CPU supports (well, x86/x86-64 for now, but theoretically any). On platforms where this is not needed, e.g. where packages are usually compiled from source, it can also select the most suitable implementation at compile time, cutting down on binary size. + +For those who are familiar with the scrypt spec, the code specializes at the ROMix level, allowing all copy, and xor calls to be inlined efficiently. ***Update***: This is actually not as important as I switched from specializing at the mix() level and letting the compiler somewhat inefficiently inline block_copy and block_xor to specializing at ChunkMix(), where they can be inlined properly. I thought about specializing at ROMix(), but it would increase the complexity per mix function even more and would not present many more opportunities than what is generated by the compiler presently. + +MSVC uses SSE intrinsics as opposed to inline assembly for the mix functions to allow the compiler to fully inline properly. Also, Visual Studio is not smart enough to allow inline assembly in 64-bit code. + +## Self Testing + +On first use, scrypt() runs a small series of tests to make sure the hash function, mix functions, and scrypt() itself, are generating correct results. It will exit() (or call a user defined fatal error function) should any of these tests fail. + +Test vectors for individual mix and hash functions are generated from reference implementations. The only "official" test vectors for the full scrypt() are for SHA256 + Salsa20/8 of course; other combinations are generated from this code (once it works with all reference test vectors) and subject to change if any implementation errors are discovered. + +# Performance (on an E5200 2.5GHZ) + +Benchmarks are run _without_ allocating memory, i.e. allocating enough memory before the trials are run. Different allocators can have different costs and non-deterministic effects, which is not the point of comparing implementations. The only hash function compared will be SHA-256 to be comparable to Colin's reference implementation, and the hash function will generally be a fraction of a percent of noise in the overall result. + +Three different scrypt settings are tested (the last two are from the scrypt paper): + +* 'High Volume': N=4096, r=8, p=1, 4mb memory +* 'Interactive': N=16384, r=8, p=1, 16mb memory +* 'Non-Interactive': N=1048576, r=8, p=1, 1gb memory + +__Note__: Benchmark settings are adjusted based on the underlying block size to keep memory usage consistent with default scrypt. This means Salsa64 has r=4 due to having a 128 byte block size. A 256 byte block size would have r=2, 512 byte block would have r=1, etc. Additionally, this means Salsa6420/8 is doing half the rounds/byte of default scrypt, but has 64 bit word mixing vs 32 bit, and thus does somewhat less overall mixing. Salsa6420/~10-12 would be needed to maintain equivalent overall mixing. + +Cycle counts are in millions of cycles. All versions compiled with gcc 4.6.3, -O3. Sorted from fastest to slowest. + +Scaling refers to how much more expensive 'Non-Interactive' is to compute than 'High Volume', normalized to "ideal" scaling (256x difficulty). Under 100% means it becomes easier to process as N grows, over 100% means it becomes more difficult to process as N grows. + + + + + + + + + + + + + + + + + +
ImplemenationAlgoHigh VolumeInteractiveNon-InteractiveScaling
scrypt-jane SSSE3 64bitSalsa6420/8 18.2m 75.6m5120.0m110.0%
scrypt-jane SSSE3 64bitChaCha20/8 19.6m 79.6m5296.7m105.6%
scrypt-jane SSSE3 32bitChaCha20/8 19.8m 80.3m5346.1m105.5%
scrypt-jane SSE2 64bit Salsa6420/8 19.8m 82.1m5529.2m109.1%
scrypt-jane SSE2 64bit Salsa20/8 22.1m 89.7m5938.8m105.0%
scrypt-jane SSE2 32bit Salsa20/8 22.3m 90.6m6011.0m105.3%
scrypt-jane SSE2 64bit ChaCha20/8 23.9m 96.8m6399.7m104.6%
scrypt-jane SSE2 32bit ChaCha20/8 24.2m 98.3m6500.7m104.9%
*Reference SSE2 64bit* Salsa20/8 32.9m135.2m8881.6m105.5%
*Reference SSE2 32bit* Salsa20/8 33.0m134.4m8885.2m105.2%
+ +* scrypt-jane Salsa6420/8-SSSE3 is ~1.80x faster than reference Salsa20/8-SSE2 for High Volume, but drops to 1.73x faster for 'Non-Interactive' instead of remaining constant +* scrypt-jane ChaCha20/8-SSSE3 is ~1.67x faster than reference Salsa20/8-SSE2 +* scrypt-jane Salsa20/8-SSE2 is ~1.48x faster than reference Salsa20/8-SSE2 + +# Performance (on a slightly noisy E3-1270 3.4GHZ) + +All versions compiled with gcc 4.4.7, -O3. Sorted from fastest to slowest. + + + + + + + + + + + + + + + + + + + + + + +
ImplemenationAlgoHigh VolumeInteractiveNon-InteractiveScaling
scrypt-jane AVX 64bit Salsa6420/8 11.8m 52.5m3848.6m127.4%
scrypt-jane SSSE3 64bit Salsa6420/8 13.3m 57.9m4176.6m122.7%
scrypt-jane SSE2 64bit Salsa6420/8 14.2m 61.1m4382.4m120.6%
scrypt-jane AVX 64bit ChaCha20/8 18.0m 77.4m5396.8m117.1%
scrypt-jane AVX 32bit ChaCha20/8 18.3m 82.1m5421.8m115.7%
scrypt-jane SSSE3 64bit ChaCha20/8 19.0m 81.3m5600.7m115.1%
scrypt-jane AVX 64bit Salsa20/8 19.0m 81.2m5610.6m115.3%
scrypt-jane AVX 32bit Salsa20/8 19.0m 81.3m5621.6m115.6%
scrypt-jane SSSE3 32bit ChaCha20/8 19.1m 81.8m5621.6m115.0%
scrypt-jane SSE2 64bit Salsa20/8 19.5m 83.8m5772.9m115.6%
scrypt-jane SSE2 32bit Salsa20/8 19.6m 84.0m5793.9m115.5%
*Reference SSE2/AVX 64bit* Salsa20/8 21.5m 90.4m6147.1m111.7%
*Reference SSE2/AVX 32bit* Salsa20/8 22.3m 94.0m6267.7m110.0%
scrypt-jane SSE2 64bit ChaCha20/8 23.1m 97.7m6670.0m112.8%
scrypt-jane SSE2 32bit ChaCha20/8 23.3m 98.4m6728.7m112.8%
*Reference SSE2 64bit* Salsa20/8 30.4m125.6m8139.4m104.6%
*Reference SSE2 32bit* Salsa20/8 30.0m124.5m8469.3m110.3%
+ +* scrypt-jane Salsa6420/8-AVX is 1.60x - 1.82x faster than reference Salsa20/8-SSE2/AVX +* scrypt-jane ChaCha20/8-AVX is 1.13x - 1.19x faster than reference Salsa20/8-SSE2/AVX +* scrypt-jane Salsa20/8-AVX is 1.09x - 1.13x faster than reference Salsa20/8-SSE2/AVX + + +# Building + + [gcc,icc,clang] scrypt-jane.c -O3 -[m32,m64] -DSCRYPT_MIX -DSCRYPT_HASH -c + +where SCRYPT_MIX is one of + +* SCRYPT_SALSA +* SCRYPT_SALSA64 (no optimized 32-bit implementation) +* SCRYPT_CHACHA + +and SCRYPT_HASH is one of + +* SCRYPT_SHA256 +* SCRYPT_SHA512 +* SCRYPT_BLAKE256 +* SCRYPT_BLAKE512 +* SCRYPT_SKEIN512 +* SCRYPT_KECCAK256 +* SCRYPT_KECCAK512 + +e.g. + + gcc scrypt-jane.c -O3 -DSCRYPT_CHACHA -DSCRYPT_BLAKE512 -c + gcc example.c scrypt-jane.o -o example + +clang *may* need "-no-integrated-as" as some? versions don't support ".intel_syntax" + +# Using + + #include "scrypt-jane.h" + + scrypt(password, password_len, salt, salt_len, Nfactor, pfactor, rfactor, out, want_bytes); + +## scrypt parameters + +* Nfactor: Increases CPU & Memory Hardness +* rfactor: Increases Memory Hardness +* pfactor: Increases CPU Hardness + +In scrypt terms + +* N = (1 << (Nfactor + 1)), which controls how many times to mix each chunk, and how many temporary chunks are used. Increasing N increases both CPU time and memory used. +* r = (1 << rfactor), which controls how many blocks are in a chunk (i.e., 2 * r blocks are in a chunk). Increasing r increases how much memory is used. +* p = (1 << pfactor), which controls how many passes to perform over the set of N chunks. Increasing p increases CPU time used. + +I chose to use the log2 of each parameter as it is the common way to communicate settings (e.g. 2^20, not 1048576). + +# License + +Public Domain, or MIT \ No newline at end of file diff --git a/deps/scrypt-jane-master/_hashcat/macos.patch b/deps/scrypt-jane-master/_hashcat/macos.patch new file mode 100644 index 000000000..6966a7b5f --- /dev/null +++ b/deps/scrypt-jane-master/_hashcat/macos.patch @@ -0,0 +1,87 @@ +diff --git a/code/scrypt-jane-portable-x86.h b/code/scrypt-jane-portable-x86.h +index 396a7bd..e7858cd 100644 +--- a/code/scrypt-jane-portable-x86.h ++++ b/code/scrypt-jane-portable-x86.h +@@ -459,4 +459,11 @@ get_top_cpuflag_desc(size_t flag) { + #endif + #endif + +-#endif /* defined(CPU_X86) || defined(CPU_X86_64) */ +\ No newline at end of file ++#else ++ ++static size_t ++detect_cpu(void) { ++ return 0; ++} ++ ++#endif /* defined(CPU_X86) || defined(CPU_X86_64) */ +diff --git a/code/scrypt-jane-portable.h b/code/scrypt-jane-portable.h +index e83e314..26690ed 100644 +--- a/code/scrypt-jane-portable.h ++++ b/code/scrypt-jane-portable.h +@@ -92,7 +92,7 @@ + #define STDCALL __stdcall + #undef NAKED + #define NAKED __declspec(naked) +- #define ALIGN(n) __declspec(align(n)) ++ #define JANE_ALIGN(n) __declspec(align(n)) + #endif + #if defined(__ICC) + #define COMPILER_INTEL +@@ -136,7 +136,7 @@ + #define CDECL __attribute__((cdecl)) + #undef STDCALL + #define STDCALL __attribute__((stdcall)) +- #define ALIGN(n) __attribute__((aligned(n))) ++ #define JANE_ALIGN(n) __attribute__((aligned(n))) + #include + #endif + #if defined(__MINGW32__) || defined(__MINGW64__) +diff --git a/code/scrypt-jane-romix-basic.h b/code/scrypt-jane-romix-basic.h +index 57ba649..ddae500 100644 +--- a/code/scrypt-jane-romix-basic.h ++++ b/code/scrypt-jane-romix-basic.h +@@ -35,9 +35,9 @@ scrypt_test_mix_instance(chunkmixfn mixfn, blockfixfn prefn, blockfixfn postfn, + /* r = 2, (2 * r) = 4 blocks in a chunk, 4 * SCRYPT_BLOCK_WORDS total */ + const uint32_t r = 2, blocks = 2 * r, words = blocks * SCRYPT_BLOCK_WORDS; + #if (defined(X86ASM_AVX2) || defined(X86_64ASM_AVX2) || defined(X86_INTRINSIC_AVX2)) +- scrypt_mix_word_t ALIGN(32) chunk[2][4 * SCRYPT_BLOCK_WORDS], v; ++ scrypt_mix_word_t JANE_ALIGN(32) chunk[2][4 * SCRYPT_BLOCK_WORDS], v; + #else +- scrypt_mix_word_t ALIGN(16) chunk[2][4 * SCRYPT_BLOCK_WORDS], v; ++ scrypt_mix_word_t JANE_ALIGN(16) chunk[2][4 * SCRYPT_BLOCK_WORDS], v; + #endif + uint8_t final[16]; + size_t i; +diff --git a/code/scrypt-jane-romix-template.h b/code/scrypt-jane-romix-template.h +index 6bbda62..77c0114 100644 +--- a/code/scrypt-jane-romix-template.h ++++ b/code/scrypt-jane-romix-template.h +@@ -20,9 +20,9 @@ + static void asm_calling_convention + SCRYPT_CHUNKMIX_FN(scrypt_mix_word_t *Bout/*[chunkWords]*/, scrypt_mix_word_t *Bin/*[chunkWords]*/, scrypt_mix_word_t *Bxor/*[chunkWords]*/, uint32_t r) { + #if (defined(X86ASM_AVX2) || defined(X86_64ASM_AVX2) || defined(X86_INTRINSIC_AVX2)) +- scrypt_mix_word_t ALIGN(32) X[SCRYPT_BLOCK_WORDS], *block; ++ scrypt_mix_word_t JANE_ALIGN(32) X[SCRYPT_BLOCK_WORDS], *block; + #else +- scrypt_mix_word_t ALIGN(16) X[SCRYPT_BLOCK_WORDS], *block; ++ scrypt_mix_word_t JANE_ALIGN(16) X[SCRYPT_BLOCK_WORDS], *block; + #endif + uint32_t i, j, blocksPerChunk = r * 2, half = 0; + +diff --git a/test.sh b/test.sh +old mode 100644 +new mode 100755 +index dc3d032..13be9eb +--- a/test.sh ++++ b/test.sh +@@ -2,7 +2,7 @@ + + test() { + sleep 0.25 # mingw is stupid and will occasionally not have permission to overwrite scrypt_test +- gcc scrypt-jane-test.c -O3 -DSCRYPT_$1 -DSCRYPT_$2 $3 -o scrypt_test 2>/dev/null ++ gcc scrypt-jane-test.c -O3 -DSCRYPT_$1 -DSCRYPT_$2 $3 -o scrypt_test #2>/dev/null + local RC=$? + if [ $RC -ne 0 ]; then + echo "$1/$2: failed to compile " diff --git a/deps/scrypt-jane-master/code/scrypt-conf.h b/deps/scrypt-jane-master/code/scrypt-conf.h new file mode 100644 index 000000000..46685a518 --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-conf.h @@ -0,0 +1,28 @@ +/* + pick the best algo at runtime or compile time? + ---------------------------------------------- + SCRYPT_CHOOSE_COMPILETIME (gcc only!) + SCRYPT_CHOOSE_RUNTIME +*/ +#define SCRYPT_CHOOSE_RUNTIME + + +/* + hash function to use + ------------------------------- + SCRYPT_BLAKE256 + SCRYPT_BLAKE512 + SCRYPT_SHA256 + SCRYPT_SHA512 + SCRYPT_SKEIN512 +*/ +//#define SCRYPT_SHA256 + + +/* + block mixer to use + ----------------------------- + SCRYPT_CHACHA + SCRYPT_SALSA +*/ +//#define SCRYPT_SALSA diff --git a/deps/scrypt-jane-master/code/scrypt-jane-chacha.h b/deps/scrypt-jane-master/code/scrypt-jane-chacha.h new file mode 100644 index 000000000..54234576e --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-chacha.h @@ -0,0 +1,162 @@ +#define SCRYPT_MIX_BASE "ChaCha20/8" + +typedef uint32_t scrypt_mix_word_t; + +#define SCRYPT_WORDTO8_LE U32TO8_LE +#define SCRYPT_WORD_ENDIAN_SWAP U32_SWAP + +#define SCRYPT_BLOCK_BYTES 64 +#define SCRYPT_BLOCK_WORDS (SCRYPT_BLOCK_BYTES / sizeof(scrypt_mix_word_t)) + +/* must have these here in case block bytes is ever != 64 */ +#include "scrypt-jane-romix-basic.h" + +#include "scrypt-jane-mix_chacha-xop.h" +#include "scrypt-jane-mix_chacha-avx.h" +#include "scrypt-jane-mix_chacha-ssse3.h" +#include "scrypt-jane-mix_chacha-sse2.h" +#include "scrypt-jane-mix_chacha.h" + +#if defined(SCRYPT_CHACHA_XOP) + #define SCRYPT_CHUNKMIX_FN scrypt_ChunkMix_xop + #define SCRYPT_ROMIX_FN scrypt_ROMix_xop + #define SCRYPT_MIX_FN chacha_core_xop + #define SCRYPT_ROMIX_TANGLE_FN scrypt_romix_nop + #define SCRYPT_ROMIX_UNTANGLE_FN scrypt_romix_nop + #include "scrypt-jane-romix-template.h" +#endif + +#if defined(SCRYPT_CHACHA_AVX) + #define SCRYPT_CHUNKMIX_FN scrypt_ChunkMix_avx + #define SCRYPT_ROMIX_FN scrypt_ROMix_avx + #define SCRYPT_MIX_FN chacha_core_avx + #define SCRYPT_ROMIX_TANGLE_FN scrypt_romix_nop + #define SCRYPT_ROMIX_UNTANGLE_FN scrypt_romix_nop + #include "scrypt-jane-romix-template.h" +#endif + +#if defined(SCRYPT_CHACHA_SSSE3) + #define SCRYPT_CHUNKMIX_FN scrypt_ChunkMix_ssse3 + #define SCRYPT_ROMIX_FN scrypt_ROMix_ssse3 + #define SCRYPT_MIX_FN chacha_core_ssse3 + #define SCRYPT_ROMIX_TANGLE_FN scrypt_romix_nop + #define SCRYPT_ROMIX_UNTANGLE_FN scrypt_romix_nop + #include "scrypt-jane-romix-template.h" +#endif + +#if defined(SCRYPT_CHACHA_SSE2) + #define SCRYPT_CHUNKMIX_FN scrypt_ChunkMix_sse2 + #define SCRYPT_ROMIX_FN scrypt_ROMix_sse2 + #define SCRYPT_MIX_FN chacha_core_sse2 + #define SCRYPT_ROMIX_TANGLE_FN scrypt_romix_nop + #define SCRYPT_ROMIX_UNTANGLE_FN scrypt_romix_nop + #include "scrypt-jane-romix-template.h" +#endif + +/* cpu agnostic */ +#define SCRYPT_ROMIX_FN scrypt_ROMix_basic +#define SCRYPT_MIX_FN chacha_core_basic +#define SCRYPT_ROMIX_TANGLE_FN scrypt_romix_convert_endian +#define SCRYPT_ROMIX_UNTANGLE_FN scrypt_romix_convert_endian +#include "scrypt-jane-romix-template.h" + +#if !defined(SCRYPT_CHOOSE_COMPILETIME) +static scrypt_ROMixfn +scrypt_getROMix(void) { + size_t cpuflags = detect_cpu(); + +#if defined(SCRYPT_CHACHA_XOP) + if (cpuflags & cpu_xop) + return scrypt_ROMix_xop; + else +#endif + +#if defined(SCRYPT_CHACHA_AVX) + if (cpuflags & cpu_avx) + return scrypt_ROMix_avx; + else +#endif + +#if defined(SCRYPT_CHACHA_SSSE3) + if (cpuflags & cpu_ssse3) + return scrypt_ROMix_ssse3; + else +#endif + +#if defined(SCRYPT_CHACHA_SSE2) + if (cpuflags & cpu_sse2) + return scrypt_ROMix_sse2; + else +#endif + + return scrypt_ROMix_basic; +} +#endif + + +#if defined(SCRYPT_TEST_SPEED) +static size_t +available_implementations(void) { + size_t cpuflags = detect_cpu(); + size_t flags = 0; + +#if defined(SCRYPT_CHACHA_XOP) + if (cpuflags & cpu_xop) + flags |= cpu_xop; +#endif + +#if defined(SCRYPT_CHACHA_AVX) + if (cpuflags & cpu_avx) + flags |= cpu_avx; +#endif + +#if defined(SCRYPT_CHACHA_SSSE3) + if (cpuflags & cpu_ssse3) + flags |= cpu_ssse3; +#endif + +#if defined(SCRYPT_CHACHA_SSE2) + if (cpuflags & cpu_sse2) + flags |= cpu_sse2; +#endif + + return flags; +} +#endif + +static int +scrypt_test_mix(void) { + static const uint8_t expected[16] = { + 0x48,0x2b,0x2d,0xb8,0xa1,0x33,0x22,0x73,0xcd,0x16,0xc4,0xb4,0xb0,0x7f,0xb1,0x8a, + }; + + int ret = 1; + size_t cpuflags = detect_cpu(); + +#if defined(SCRYPT_CHACHA_XOP) + if (cpuflags & cpu_xop) + ret &= scrypt_test_mix_instance(scrypt_ChunkMix_xop, scrypt_romix_nop, scrypt_romix_nop, expected); +#endif + +#if defined(SCRYPT_CHACHA_AVX) + if (cpuflags & cpu_avx) + ret &= scrypt_test_mix_instance(scrypt_ChunkMix_avx, scrypt_romix_nop, scrypt_romix_nop, expected); +#endif + +#if defined(SCRYPT_CHACHA_SSSE3) + if (cpuflags & cpu_ssse3) + ret &= scrypt_test_mix_instance(scrypt_ChunkMix_ssse3, scrypt_romix_nop, scrypt_romix_nop, expected); +#endif + +#if defined(SCRYPT_CHACHA_SSE2) + if (cpuflags & cpu_sse2) + ret &= scrypt_test_mix_instance(scrypt_ChunkMix_sse2, scrypt_romix_nop, scrypt_romix_nop, expected); +#endif + +#if defined(SCRYPT_CHACHA_BASIC) + ret &= scrypt_test_mix_instance(scrypt_ChunkMix_basic, scrypt_romix_convert_endian, scrypt_romix_convert_endian, expected); +#endif + + return ret; +} + diff --git a/deps/scrypt-jane-master/code/scrypt-jane-hash.h b/deps/scrypt-jane-master/code/scrypt-jane-hash.h new file mode 100644 index 000000000..e72781485 --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-hash.h @@ -0,0 +1,48 @@ +#if defined(SCRYPT_BLAKE512) +#include "scrypt-jane-hash_blake512.h" +#elif defined(SCRYPT_BLAKE256) +#include "scrypt-jane-hash_blake256.h" +#elif defined(SCRYPT_SHA512) +#include "scrypt-jane-hash_sha512.h" +#elif defined(SCRYPT_SHA256) +#include "scrypt-jane-hash_sha256.h" +#elif defined(SCRYPT_SKEIN512) +#include "scrypt-jane-hash_skein512.h" +#elif defined(SCRYPT_KECCAK512) || defined(SCRYPT_KECCAK256) +#include "scrypt-jane-hash_keccak.h" +#else + #define SCRYPT_HASH "ERROR" + #define SCRYPT_HASH_BLOCK_SIZE 64 + #define SCRYPT_HASH_DIGEST_SIZE 64 + typedef struct scrypt_hash_state_t { size_t dummy; } scrypt_hash_state; + typedef uint8_t scrypt_hash_digest[SCRYPT_HASH_DIGEST_SIZE]; + static void scrypt_hash_init(scrypt_hash_state *S) {} + static void scrypt_hash_update(scrypt_hash_state *S, const uint8_t *in, size_t inlen) {} + static void scrypt_hash_finish(scrypt_hash_state *S, uint8_t *hash) {} + static const uint8_t scrypt_test_hash_expected[SCRYPT_HASH_DIGEST_SIZE] = {0}; + #error must define a hash function! +#endif + +#include "scrypt-jane-pbkdf2.h" + +#define SCRYPT_TEST_HASH_LEN 257 /* (2 * largest block size) + 1 */ + +static int +scrypt_test_hash(void) { + scrypt_hash_state st; + scrypt_hash_digest hash, final; + uint8_t msg[SCRYPT_TEST_HASH_LEN]; + size_t i; + + for (i = 0; i < SCRYPT_TEST_HASH_LEN; i++) + msg[i] = (uint8_t)i; + + scrypt_hash_init(&st); + for (i = 0; i < SCRYPT_TEST_HASH_LEN + 1; i++) { + scrypt_hash(hash, msg, i); + scrypt_hash_update(&st, hash, sizeof(hash)); + } + scrypt_hash_finish(&st, final); + return scrypt_verify(final, scrypt_test_hash_expected, SCRYPT_HASH_DIGEST_SIZE); +} + diff --git a/deps/scrypt-jane-master/code/scrypt-jane-hash_blake256.h b/deps/scrypt-jane-master/code/scrypt-jane-hash_blake256.h new file mode 100644 index 000000000..4690b1144 --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-hash_blake256.h @@ -0,0 +1,177 @@ +#define SCRYPT_HASH "BLAKE-256" +#define SCRYPT_HASH_BLOCK_SIZE 64 +#define SCRYPT_HASH_DIGEST_SIZE 32 + +typedef uint8_t scrypt_hash_digest[SCRYPT_HASH_DIGEST_SIZE]; + +const uint8_t blake256_sigma[] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15, + 14,10, 4, 8, 9,15,13, 6, 1,12, 0, 2,11, 7, 5, 3, + 11, 8,12, 0, 5, 2,15,13,10,14, 3, 6, 7, 1, 9, 4, + 7, 9, 3, 1,13,12,11,14, 2, 6, 5,10, 4, 0,15, 8, + 9, 0, 5, 7, 2, 4,10,15,14, 1,11,12, 6, 8, 3,13, + 2,12, 6,10, 0,11, 8, 3, 4,13, 7, 5,15,14, 1, 9, + 12, 5, 1,15,14,13, 4,10, 0, 7, 6, 3, 9, 2, 8,11, + 13,11, 7,14,12, 1, 3, 9, 5, 0,15, 4, 8, 6, 2,10, + 6,15,14, 9,11, 3, 0, 8,12, 2,13, 7, 1, 4,10, 5, + 10, 2, 8, 4, 7, 6, 1, 5,15,11, 9,14, 3,12,13 ,0, +}; + +const uint32_t blake256_constants[16] = { + 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344,0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89, + 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917 +}; + +typedef struct scrypt_hash_state_t { + uint32_t H[8], T[2]; + uint32_t leftover; + uint8_t buffer[SCRYPT_HASH_BLOCK_SIZE]; +} scrypt_hash_state; + +static void +blake256_blocks(scrypt_hash_state *S, const uint8_t *in, size_t blocks) { + const uint8_t *sigma, *sigma_end = blake256_sigma + (10 * 16); + uint32_t m[16], v[16], h[8], t[2]; + uint32_t i; + + for (i = 0; i < 8; i++) h[i] = S->H[i]; + for (i = 0; i < 2; i++) t[i] = S->T[i]; + + while (blocks--) { + t[0] += 512; + t[1] += (t[0] < 512) ? 1 : 0; + + for (i = 0; i < 8; i++) v[i ] = h[i]; + for (i = 0; i < 4; i++) v[i + 8] = blake256_constants[i]; + for (i = 0; i < 2; i++) v[i + 12] = blake256_constants[i+4] ^ t[0]; + for (i = 0; i < 2; i++) v[i + 14] = blake256_constants[i+6] ^ t[1]; + + for (i = 0; i < 16; i++) m[i] = U8TO32_BE(&in[i * 4]); + in += 64; + + #define G(a,b,c,d,e) \ + v[a] += (m[sigma[e+0]] ^ blake256_constants[sigma[e+1]]) + v[b]; \ + v[d] = ROTR32(v[d] ^ v[a],16); \ + v[c] += v[d]; \ + v[b] = ROTR32(v[b] ^ v[c],12); \ + v[a] += (m[sigma[e+1]] ^ blake256_constants[sigma[e+0]]) + v[b]; \ + v[d] = ROTR32(v[d] ^ v[a], 8); \ + v[c] += v[d]; \ + v[b] = ROTR32(v[b] ^ v[c], 7); + + for (i = 0, sigma = blake256_sigma; i < 14; i++) { + G(0, 4, 8,12, 0); + G(1, 5, 9,13, 2); + G(2, 6,10,14, 4); + G(3, 7,11,15, 6); + + G(0, 5,10,15, 8); + G(1, 6,11,12,10); + G(2, 7, 8,13,12); + G(3, 4, 9,14,14); + + sigma += 16; + if (sigma == sigma_end) + sigma = blake256_sigma; + } + + #undef G + + for (i = 0; i < 8; i++) h[i] ^= (v[i] ^ v[i + 8]); + } + + for (i = 0; i < 8; i++) S->H[i] = h[i]; + for (i = 0; i < 2; i++) S->T[i] = t[i]; +} + +static void +scrypt_hash_init(scrypt_hash_state *S) { + S->H[0] = 0x6a09e667ULL; + S->H[1] = 0xbb67ae85ULL; + S->H[2] = 0x3c6ef372ULL; + S->H[3] = 0xa54ff53aULL; + S->H[4] = 0x510e527fULL; + S->H[5] = 0x9b05688cULL; + S->H[6] = 0x1f83d9abULL; + S->H[7] = 0x5be0cd19ULL; + S->T[0] = 0; + S->T[1] = 0; + S->leftover = 0; +} + +static void +scrypt_hash_update(scrypt_hash_state *S, const uint8_t *in, size_t inlen) { + size_t blocks, want; + + /* handle the previous data */ + if (S->leftover) { + want = (SCRYPT_HASH_BLOCK_SIZE - S->leftover); + want = (want < inlen) ? want : inlen; + memcpy(S->buffer + S->leftover, in, want); + S->leftover += (uint32_t)want; + if (S->leftover < SCRYPT_HASH_BLOCK_SIZE) + return; + in += want; + inlen -= want; + blake256_blocks(S, S->buffer, 1); + } + + /* handle the current data */ + blocks = (inlen & ~(SCRYPT_HASH_BLOCK_SIZE - 1)); + S->leftover = (uint32_t)(inlen - blocks); + if (blocks) { + blake256_blocks(S, in, blocks / SCRYPT_HASH_BLOCK_SIZE); + in += blocks; + } + + /* handle leftover data */ + if (S->leftover) + memcpy(S->buffer, in, S->leftover); +} + +static void +scrypt_hash_finish(scrypt_hash_state *S, uint8_t *hash) { + uint32_t th, tl, bits; + + bits = (S->leftover << 3); + tl = S->T[0] + bits; + th = S->T[1]; + if (S->leftover == 0) { + S->T[0] = (uint32_t)0 - (uint32_t)512; + S->T[1] = (uint32_t)0 - (uint32_t)1; + } else if (S->T[0] == 0) { + S->T[0] = ((uint32_t)0 - (uint32_t)512) + bits; + S->T[1] = S->T[1] - 1; + } else { + S->T[0] -= (512 - bits); + } + + S->buffer[S->leftover] = 0x80; + if (S->leftover <= 55) { + memset(S->buffer + S->leftover + 1, 0, 55 - S->leftover); + } else { + memset(S->buffer + S->leftover + 1, 0, 63 - S->leftover); + blake256_blocks(S, S->buffer, 1); + S->T[0] = (uint32_t)0 - (uint32_t)512; + S->T[1] = (uint32_t)0 - (uint32_t)1; + memset(S->buffer, 0, 56); + } + S->buffer[55] |= 1; + U32TO8_BE(S->buffer + 56, th); + U32TO8_BE(S->buffer + 60, tl); + blake256_blocks(S, S->buffer, 1); + + U32TO8_BE(&hash[ 0], S->H[0]); + U32TO8_BE(&hash[ 4], S->H[1]); + U32TO8_BE(&hash[ 8], S->H[2]); + U32TO8_BE(&hash[12], S->H[3]); + U32TO8_BE(&hash[16], S->H[4]); + U32TO8_BE(&hash[20], S->H[5]); + U32TO8_BE(&hash[24], S->H[6]); + U32TO8_BE(&hash[28], S->H[7]); +} + +static const uint8_t scrypt_test_hash_expected[SCRYPT_HASH_DIGEST_SIZE] = { + 0xcc,0xa9,0x1e,0xa9,0x20,0x97,0x37,0x40,0x17,0xc0,0xa0,0x52,0x87,0xfc,0x08,0x20, + 0x40,0xf5,0x81,0x86,0x62,0x75,0x78,0xb2,0x79,0xce,0xde,0x27,0x3c,0x7f,0x85,0xd8, +}; diff --git a/deps/scrypt-jane-master/code/scrypt-jane-hash_blake512.h b/deps/scrypt-jane-master/code/scrypt-jane-hash_blake512.h new file mode 100644 index 000000000..ea2a583de --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-hash_blake512.h @@ -0,0 +1,181 @@ +#define SCRYPT_HASH "BLAKE-512" +#define SCRYPT_HASH_BLOCK_SIZE 128 +#define SCRYPT_HASH_DIGEST_SIZE 64 + +typedef uint8_t scrypt_hash_digest[SCRYPT_HASH_DIGEST_SIZE]; + +const uint8_t blake512_sigma[] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15, + 14,10, 4, 8, 9,15,13, 6, 1,12, 0, 2,11, 7, 5, 3, + 11, 8,12, 0, 5, 2,15,13,10,14, 3, 6, 7, 1, 9, 4, + 7, 9, 3, 1,13,12,11,14, 2, 6, 5,10, 4, 0,15, 8, + 9, 0, 5, 7, 2, 4,10,15,14, 1,11,12, 6, 8, 3,13, + 2,12, 6,10, 0,11, 8, 3, 4,13, 7, 5,15,14, 1, 9, + 12, 5, 1,15,14,13, 4,10, 0, 7, 6, 3, 9, 2, 8,11, + 13,11, 7,14,12, 1, 3, 9, 5, 0,15, 4, 8, 6, 2,10, + 6,15,14, 9,11, 3, 0, 8,12, 2,13, 7, 1, 4,10, 5, + 10, 2, 8, 4, 7, 6, 1, 5,15,11, 9,14, 3,12,13 ,0, +}; + +const uint64_t blake512_constants[16] = { + 0x243f6a8885a308d3ULL, 0x13198a2e03707344ULL, 0xa4093822299f31d0ULL, 0x082efa98ec4e6c89ULL, + 0x452821e638d01377ULL, 0xbe5466cf34e90c6cULL, 0xc0ac29b7c97c50ddULL, 0x3f84d5b5b5470917ULL, + 0x9216d5d98979fb1bULL, 0xd1310ba698dfb5acULL, 0x2ffd72dbd01adfb7ULL, 0xb8e1afed6a267e96ULL, + 0xba7c9045f12c7f99ULL, 0x24a19947b3916cf7ULL, 0x0801f2e2858efc16ULL, 0x636920d871574e69ULL +}; + +typedef struct scrypt_hash_state_t { + uint64_t H[8], T[2]; + uint32_t leftover; + uint8_t buffer[SCRYPT_HASH_BLOCK_SIZE]; +} scrypt_hash_state; + +static void +blake512_blocks(scrypt_hash_state *S, const uint8_t *in, size_t blocks) { + const uint8_t *sigma, *sigma_end = blake512_sigma + (10 * 16); + uint64_t m[16], v[16], h[8], t[2]; + uint32_t i; + + for (i = 0; i < 8; i++) h[i] = S->H[i]; + for (i = 0; i < 2; i++) t[i] = S->T[i]; + + while (blocks--) { + t[0] += 1024; + t[1] += (t[0] < 1024) ? 1 : 0; + + for (i = 0; i < 8; i++) v[i ] = h[i]; + for (i = 0; i < 4; i++) v[i + 8] = blake512_constants[i]; + for (i = 0; i < 2; i++) v[i + 12] = blake512_constants[i+4] ^ t[0]; + for (i = 0; i < 2; i++) v[i + 14] = blake512_constants[i+6] ^ t[1]; + + for (i = 0; i < 16; i++) m[i] = U8TO64_BE(&in[i * 8]); + in += 128; + + #define G(a,b,c,d,e) \ + v[a] += (m[sigma[e+0]] ^ blake512_constants[sigma[e+1]]) + v[b]; \ + v[d] = ROTR64(v[d] ^ v[a],32); \ + v[c] += v[d]; \ + v[b] = ROTR64(v[b] ^ v[c],25); \ + v[a] += (m[sigma[e+1]] ^ blake512_constants[sigma[e+0]]) + v[b]; \ + v[d] = ROTR64(v[d] ^ v[a],16); \ + v[c] += v[d]; \ + v[b] = ROTR64(v[b] ^ v[c],11); + + for (i = 0, sigma = blake512_sigma; i < 16; i++) { + G(0, 4, 8,12, 0); + G(1, 5, 9,13, 2); + G(2, 6,10,14, 4); + G(3, 7,11,15, 6); + G(0, 5,10,15, 8); + G(1, 6,11,12,10); + G(2, 7, 8,13,12); + G(3, 4, 9,14,14); + + sigma += 16; + if (sigma == sigma_end) + sigma = blake512_sigma; + } + + #undef G + + for (i = 0; i < 8; i++) h[i] ^= (v[i] ^ v[i + 8]); + } + + for (i = 0; i < 8; i++) S->H[i] = h[i]; + for (i = 0; i < 2; i++) S->T[i] = t[i]; +} + +static void +scrypt_hash_init(scrypt_hash_state *S) { + S->H[0] = 0x6a09e667f3bcc908ULL; + S->H[1] = 0xbb67ae8584caa73bULL; + S->H[2] = 0x3c6ef372fe94f82bULL; + S->H[3] = 0xa54ff53a5f1d36f1ULL; + S->H[4] = 0x510e527fade682d1ULL; + S->H[5] = 0x9b05688c2b3e6c1fULL; + S->H[6] = 0x1f83d9abfb41bd6bULL; + S->H[7] = 0x5be0cd19137e2179ULL; + S->T[0] = 0; + S->T[1] = 0; + S->leftover = 0; +} + +static void +scrypt_hash_update(scrypt_hash_state *S, const uint8_t *in, size_t inlen) { + size_t blocks, want; + + /* handle the previous data */ + if (S->leftover) { + want = (SCRYPT_HASH_BLOCK_SIZE - S->leftover); + want = (want < inlen) ? want : inlen; + memcpy(S->buffer + S->leftover, in, want); + S->leftover += (uint32_t)want; + if (S->leftover < SCRYPT_HASH_BLOCK_SIZE) + return; + in += want; + inlen -= want; + blake512_blocks(S, S->buffer, 1); + } + + /* handle the current data */ + blocks = (inlen & ~(SCRYPT_HASH_BLOCK_SIZE - 1)); + S->leftover = (uint32_t)(inlen - blocks); + if (blocks) { + blake512_blocks(S, in, blocks / SCRYPT_HASH_BLOCK_SIZE); + in += blocks; + } + + /* handle leftover data */ + if (S->leftover) + memcpy(S->buffer, in, S->leftover); +} + +static void +scrypt_hash_finish(scrypt_hash_state *S, uint8_t *hash) { + uint64_t th, tl; + size_t bits; + + bits = (S->leftover << 3); + tl = S->T[0] + bits; + th = S->T[1]; + if (S->leftover == 0) { + S->T[0] = (uint64_t)0 - (uint64_t)1024; + S->T[1] = (uint64_t)0 - (uint64_t)1; + } else if (S->T[0] == 0) { + S->T[0] = ((uint64_t)0 - (uint64_t)1024) + bits; + S->T[1] = S->T[1] - 1; + } else { + S->T[0] -= (1024 - bits); + } + + S->buffer[S->leftover] = 0x80; + if (S->leftover <= 111) { + memset(S->buffer + S->leftover + 1, 0, 111 - S->leftover); + } else { + memset(S->buffer + S->leftover + 1, 0, 127 - S->leftover); + blake512_blocks(S, S->buffer, 1); + S->T[0] = (uint64_t)0 - (uint64_t)1024; + S->T[1] = (uint64_t)0 - (uint64_t)1; + memset(S->buffer, 0, 112); + } + S->buffer[111] |= 1; + U64TO8_BE(S->buffer + 112, th); + U64TO8_BE(S->buffer + 120, tl); + blake512_blocks(S, S->buffer, 1); + + U64TO8_BE(&hash[ 0], S->H[0]); + U64TO8_BE(&hash[ 8], S->H[1]); + U64TO8_BE(&hash[16], S->H[2]); + U64TO8_BE(&hash[24], S->H[3]); + U64TO8_BE(&hash[32], S->H[4]); + U64TO8_BE(&hash[40], S->H[5]); + U64TO8_BE(&hash[48], S->H[6]); + U64TO8_BE(&hash[56], S->H[7]); +} + +static const uint8_t scrypt_test_hash_expected[SCRYPT_HASH_DIGEST_SIZE] = { + 0x2f,0x9d,0x5b,0xbe,0x24,0x0d,0x63,0xd3,0xa0,0xac,0x4f,0xd3,0x01,0xc0,0x23,0x6f, + 0x6d,0xdf,0x6e,0xfb,0x60,0x6f,0xa0,0x74,0xdf,0x9f,0x25,0x65,0xb6,0x11,0x0a,0x83, + 0x23,0x96,0xba,0x91,0x68,0x4b,0x85,0x15,0x13,0x54,0xba,0x19,0xf3,0x2c,0x5a,0x4a, + 0x1f,0x78,0x31,0x02,0xc9,0x1e,0x56,0xc4,0x54,0xca,0xf9,0x8f,0x2c,0x7f,0x85,0xac +}; diff --git a/deps/scrypt-jane-master/code/scrypt-jane-hash_keccak.h b/deps/scrypt-jane-master/code/scrypt-jane-hash_keccak.h new file mode 100644 index 000000000..7ed55747a --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-hash_keccak.h @@ -0,0 +1,168 @@ +#if defined(SCRYPT_KECCAK256) + #define SCRYPT_HASH "Keccak-256" + #define SCRYPT_HASH_DIGEST_SIZE 32 +#else + #define SCRYPT_HASH "Keccak-512" + #define SCRYPT_HASH_DIGEST_SIZE 64 +#endif +#define SCRYPT_KECCAK_F 1600 +#define SCRYPT_KECCAK_C (SCRYPT_HASH_DIGEST_SIZE * 8 * 2) /* 256=512, 512=1024 */ +#define SCRYPT_KECCAK_R (SCRYPT_KECCAK_F - SCRYPT_KECCAK_C) /* 256=1088, 512=576 */ +#define SCRYPT_HASH_BLOCK_SIZE (SCRYPT_KECCAK_R / 8) + +typedef uint8_t scrypt_hash_digest[SCRYPT_HASH_DIGEST_SIZE]; + +typedef struct scrypt_hash_state_t { + uint64_t state[SCRYPT_KECCAK_F / 64]; + uint32_t leftover; + uint8_t buffer[SCRYPT_HASH_BLOCK_SIZE]; +} scrypt_hash_state; + +static const uint64_t keccak_round_constants[24] = { + 0x0000000000000001ull, 0x0000000000008082ull, + 0x800000000000808aull, 0x8000000080008000ull, + 0x000000000000808bull, 0x0000000080000001ull, + 0x8000000080008081ull, 0x8000000000008009ull, + 0x000000000000008aull, 0x0000000000000088ull, + 0x0000000080008009ull, 0x000000008000000aull, + 0x000000008000808bull, 0x800000000000008bull, + 0x8000000000008089ull, 0x8000000000008003ull, + 0x8000000000008002ull, 0x8000000000000080ull, + 0x000000000000800aull, 0x800000008000000aull, + 0x8000000080008081ull, 0x8000000000008080ull, + 0x0000000080000001ull, 0x8000000080008008ull +}; + +static void +keccak_block(scrypt_hash_state *S, const uint8_t *in) { + size_t i; + uint64_t *s = S->state, t[5], u[5], v, w; + + /* absorb input */ + for (i = 0; i < SCRYPT_HASH_BLOCK_SIZE / 8; i++, in += 8) + s[i] ^= U8TO64_LE(in); + + for (i = 0; i < 24; i++) { + /* theta: c = a[0,i] ^ a[1,i] ^ .. a[4,i] */ + t[0] = s[0] ^ s[5] ^ s[10] ^ s[15] ^ s[20]; + t[1] = s[1] ^ s[6] ^ s[11] ^ s[16] ^ s[21]; + t[2] = s[2] ^ s[7] ^ s[12] ^ s[17] ^ s[22]; + t[3] = s[3] ^ s[8] ^ s[13] ^ s[18] ^ s[23]; + t[4] = s[4] ^ s[9] ^ s[14] ^ s[19] ^ s[24]; + + /* theta: d[i] = c[i+4] ^ rotl(c[i+1],1) */ + u[0] = t[4] ^ ROTL64(t[1], 1); + u[1] = t[0] ^ ROTL64(t[2], 1); + u[2] = t[1] ^ ROTL64(t[3], 1); + u[3] = t[2] ^ ROTL64(t[4], 1); + u[4] = t[3] ^ ROTL64(t[0], 1); + + /* theta: a[0,i], a[1,i], .. a[4,i] ^= d[i] */ + s[0] ^= u[0]; s[5] ^= u[0]; s[10] ^= u[0]; s[15] ^= u[0]; s[20] ^= u[0]; + s[1] ^= u[1]; s[6] ^= u[1]; s[11] ^= u[1]; s[16] ^= u[1]; s[21] ^= u[1]; + s[2] ^= u[2]; s[7] ^= u[2]; s[12] ^= u[2]; s[17] ^= u[2]; s[22] ^= u[2]; + s[3] ^= u[3]; s[8] ^= u[3]; s[13] ^= u[3]; s[18] ^= u[3]; s[23] ^= u[3]; + s[4] ^= u[4]; s[9] ^= u[4]; s[14] ^= u[4]; s[19] ^= u[4]; s[24] ^= u[4]; + + /* rho pi: b[..] = rotl(a[..], ..) */ + v = s[ 1]; + s[ 1] = ROTL64(s[ 6], 44); + s[ 6] = ROTL64(s[ 9], 20); + s[ 9] = ROTL64(s[22], 61); + s[22] = ROTL64(s[14], 39); + s[14] = ROTL64(s[20], 18); + s[20] = ROTL64(s[ 2], 62); + s[ 2] = ROTL64(s[12], 43); + s[12] = ROTL64(s[13], 25); + s[13] = ROTL64(s[19], 8); + s[19] = ROTL64(s[23], 56); + s[23] = ROTL64(s[15], 41); + s[15] = ROTL64(s[ 4], 27); + s[ 4] = ROTL64(s[24], 14); + s[24] = ROTL64(s[21], 2); + s[21] = ROTL64(s[ 8], 55); + s[ 8] = ROTL64(s[16], 45); + s[16] = ROTL64(s[ 5], 36); + s[ 5] = ROTL64(s[ 3], 28); + s[ 3] = ROTL64(s[18], 21); + s[18] = ROTL64(s[17], 15); + s[17] = ROTL64(s[11], 10); + s[11] = ROTL64(s[ 7], 6); + s[ 7] = ROTL64(s[10], 3); + s[10] = ROTL64( v, 1); + + /* chi: a[i,j] ^= ~b[i,j+1] & b[i,j+2] */ + v = s[ 0]; w = s[ 1]; s[ 0] ^= (~w) & s[ 2]; s[ 1] ^= (~s[ 2]) & s[ 3]; s[ 2] ^= (~s[ 3]) & s[ 4]; s[ 3] ^= (~s[ 4]) & v; s[ 4] ^= (~v) & w; + v = s[ 5]; w = s[ 6]; s[ 5] ^= (~w) & s[ 7]; s[ 6] ^= (~s[ 7]) & s[ 8]; s[ 7] ^= (~s[ 8]) & s[ 9]; s[ 8] ^= (~s[ 9]) & v; s[ 9] ^= (~v) & w; + v = s[10]; w = s[11]; s[10] ^= (~w) & s[12]; s[11] ^= (~s[12]) & s[13]; s[12] ^= (~s[13]) & s[14]; s[13] ^= (~s[14]) & v; s[14] ^= (~v) & w; + v = s[15]; w = s[16]; s[15] ^= (~w) & s[17]; s[16] ^= (~s[17]) & s[18]; s[17] ^= (~s[18]) & s[19]; s[18] ^= (~s[19]) & v; s[19] ^= (~v) & w; + v = s[20]; w = s[21]; s[20] ^= (~w) & s[22]; s[21] ^= (~s[22]) & s[23]; s[22] ^= (~s[23]) & s[24]; s[23] ^= (~s[24]) & v; s[24] ^= (~v) & w; + + /* iota: a[0,0] ^= round constant */ + s[0] ^= keccak_round_constants[i]; + } +} + +static void +scrypt_hash_init(scrypt_hash_state *S) { + memset(S, 0, sizeof(*S)); +} + +static void +scrypt_hash_update(scrypt_hash_state *S, const uint8_t *in, size_t inlen) { + size_t want; + + /* handle the previous data */ + if (S->leftover) { + want = (SCRYPT_HASH_BLOCK_SIZE - S->leftover); + want = (want < inlen) ? want : inlen; + memcpy(S->buffer + S->leftover, in, want); + S->leftover += (uint32_t)want; + if (S->leftover < SCRYPT_HASH_BLOCK_SIZE) + return; + in += want; + inlen -= want; + keccak_block(S, S->buffer); + } + + /* handle the current data */ + while (inlen >= SCRYPT_HASH_BLOCK_SIZE) { + keccak_block(S, in); + in += SCRYPT_HASH_BLOCK_SIZE; + inlen -= SCRYPT_HASH_BLOCK_SIZE; + } + + /* handle leftover data */ + S->leftover = (uint32_t)inlen; + if (S->leftover) + memcpy(S->buffer, in, S->leftover); +} + +static void +scrypt_hash_finish(scrypt_hash_state *S, uint8_t *hash) { + size_t i; + + S->buffer[S->leftover] = 0x01; + memset(S->buffer + (S->leftover + 1), 0, SCRYPT_HASH_BLOCK_SIZE - (S->leftover + 1)); + S->buffer[SCRYPT_HASH_BLOCK_SIZE - 1] |= 0x80; + keccak_block(S, S->buffer); + + for (i = 0; i < SCRYPT_HASH_DIGEST_SIZE; i += 8) { + U64TO8_LE(&hash[i], S->state[i / 8]); + } +} + +#if defined(SCRYPT_KECCAK256) +static const uint8_t scrypt_test_hash_expected[SCRYPT_HASH_DIGEST_SIZE] = { + 0x26,0xb7,0x10,0xb3,0x66,0xb1,0xd1,0xb1,0x25,0xfc,0x3e,0xe3,0x1e,0x33,0x1d,0x19, + 0x94,0xaa,0x63,0x7a,0xd5,0x77,0x29,0xb4,0x27,0xe9,0xe0,0xf4,0x19,0xba,0x68,0xea, +}; +#else +static const uint8_t scrypt_test_hash_expected[SCRYPT_HASH_DIGEST_SIZE] = { + 0x17,0xc7,0x8c,0xa0,0xd9,0x08,0x1d,0xba,0x8a,0xc8,0x3e,0x07,0x90,0xda,0x91,0x88, + 0x25,0xbd,0xd3,0xf8,0x78,0x4a,0x8d,0x5e,0xe4,0x96,0x9c,0x01,0xf3,0xeb,0xdc,0x12, + 0xea,0x35,0x57,0xba,0x94,0xb8,0xe9,0xb9,0x27,0x45,0x0a,0x48,0x5c,0x3d,0x69,0xf0, + 0xdb,0x22,0x38,0xb5,0x52,0x22,0x29,0xea,0x7a,0xb2,0xe6,0x07,0xaa,0x37,0x4d,0xe6, +}; +#endif + diff --git a/deps/scrypt-jane-master/code/scrypt-jane-hash_sha256.h b/deps/scrypt-jane-master/code/scrypt-jane-hash_sha256.h new file mode 100644 index 000000000..d06d3e1bb --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-hash_sha256.h @@ -0,0 +1,135 @@ +#define SCRYPT_HASH "SHA-2-256" +#define SCRYPT_HASH_BLOCK_SIZE 64 +#define SCRYPT_HASH_DIGEST_SIZE 32 + +typedef uint8_t scrypt_hash_digest[SCRYPT_HASH_DIGEST_SIZE]; + +typedef struct scrypt_hash_state_t { + uint32_t H[8]; + uint64_t T; + uint32_t leftover; + uint8_t buffer[SCRYPT_HASH_BLOCK_SIZE]; +} scrypt_hash_state; + +static const uint32_t sha256_constants[64] = { + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 +}; + +#define Ch(x,y,z) (z ^ (x & (y ^ z))) +#define Maj(x,y,z) (((x | y) & z) | (x & y)) +#define S0(x) (ROTR32(x, 2) ^ ROTR32(x, 13) ^ ROTR32(x, 22)) +#define S1(x) (ROTR32(x, 6) ^ ROTR32(x, 11) ^ ROTR32(x, 25)) +#define G0(x) (ROTR32(x, 7) ^ ROTR32(x, 18) ^ (x >> 3)) +#define G1(x) (ROTR32(x, 17) ^ ROTR32(x, 19) ^ (x >> 10)) +#define W0(in,i) (U8TO32_BE(&in[i * 4])) +#define W1(i) (G1(w[i - 2]) + w[i - 7] + G0(w[i - 15]) + w[i - 16]) +#define STEP(i) \ + t1 = S0(r[0]) + Maj(r[0], r[1], r[2]); \ + t0 = r[7] + S1(r[4]) + Ch(r[4], r[5], r[6]) + sha256_constants[i] + w[i]; \ + r[7] = r[6]; \ + r[6] = r[5]; \ + r[5] = r[4]; \ + r[4] = r[3] + t0; \ + r[3] = r[2]; \ + r[2] = r[1]; \ + r[1] = r[0]; \ + r[0] = t0 + t1; + +static void +sha256_blocks(scrypt_hash_state *S, const uint8_t *in, size_t blocks) { + uint32_t r[8], w[64], t0, t1; + size_t i; + + for (i = 0; i < 8; i++) r[i] = S->H[i]; + + while (blocks--) { + for (i = 0; i < 16; i++) { w[i] = W0(in, i); } + for (i = 16; i < 64; i++) { w[i] = W1(i); } + for (i = 0; i < 64; i++) { STEP(i); } + for (i = 0; i < 8; i++) { r[i] += S->H[i]; S->H[i] = r[i]; } + S->T += SCRYPT_HASH_BLOCK_SIZE * 8; + in += SCRYPT_HASH_BLOCK_SIZE; + } +} + +static void +scrypt_hash_init(scrypt_hash_state *S) { + S->H[0] = 0x6a09e667; + S->H[1] = 0xbb67ae85; + S->H[2] = 0x3c6ef372; + S->H[3] = 0xa54ff53a; + S->H[4] = 0x510e527f; + S->H[5] = 0x9b05688c; + S->H[6] = 0x1f83d9ab; + S->H[7] = 0x5be0cd19; + S->T = 0; + S->leftover = 0; +} + +static void +scrypt_hash_update(scrypt_hash_state *S, const uint8_t *in, size_t inlen) { + size_t blocks, want; + + /* handle the previous data */ + if (S->leftover) { + want = (SCRYPT_HASH_BLOCK_SIZE - S->leftover); + want = (want < inlen) ? want : inlen; + memcpy(S->buffer + S->leftover, in, want); + S->leftover += (uint32_t)want; + if (S->leftover < SCRYPT_HASH_BLOCK_SIZE) + return; + in += want; + inlen -= want; + sha256_blocks(S, S->buffer, 1); + } + + /* handle the current data */ + blocks = (inlen & ~(SCRYPT_HASH_BLOCK_SIZE - 1)); + S->leftover = (uint32_t)(inlen - blocks); + if (blocks) { + sha256_blocks(S, in, blocks / SCRYPT_HASH_BLOCK_SIZE); + in += blocks; + } + + /* handle leftover data */ + if (S->leftover) + memcpy(S->buffer, in, S->leftover); +} + +static void +scrypt_hash_finish(scrypt_hash_state *S, uint8_t *hash) { + uint64_t t = S->T + (S->leftover * 8); + + S->buffer[S->leftover] = 0x80; + if (S->leftover <= 55) { + memset(S->buffer + S->leftover + 1, 0, 55 - S->leftover); + } else { + memset(S->buffer + S->leftover + 1, 0, 63 - S->leftover); + sha256_blocks(S, S->buffer, 1); + memset(S->buffer, 0, 56); + } + + U64TO8_BE(S->buffer + 56, t); + sha256_blocks(S, S->buffer, 1); + + U32TO8_BE(&hash[ 0], S->H[0]); + U32TO8_BE(&hash[ 4], S->H[1]); + U32TO8_BE(&hash[ 8], S->H[2]); + U32TO8_BE(&hash[12], S->H[3]); + U32TO8_BE(&hash[16], S->H[4]); + U32TO8_BE(&hash[20], S->H[5]); + U32TO8_BE(&hash[24], S->H[6]); + U32TO8_BE(&hash[28], S->H[7]); +} + +static const uint8_t scrypt_test_hash_expected[SCRYPT_HASH_DIGEST_SIZE] = { + 0xee,0x36,0xae,0xa6,0x65,0xf0,0x28,0x7d,0xc9,0xde,0xd8,0xad,0x48,0x33,0x7d,0xbf, + 0xcb,0xc0,0x48,0xfa,0x5f,0x92,0xfd,0x0a,0x95,0x6f,0x34,0x8e,0x8c,0x1e,0x73,0xad, +}; diff --git a/deps/scrypt-jane-master/code/scrypt-jane-hash_sha512.h b/deps/scrypt-jane-master/code/scrypt-jane-hash_sha512.h new file mode 100644 index 000000000..3e3997d00 --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-hash_sha512.h @@ -0,0 +1,152 @@ +#define SCRYPT_HASH "SHA-2-512" +#define SCRYPT_HASH_BLOCK_SIZE 128 +#define SCRYPT_HASH_DIGEST_SIZE 64 + +typedef uint8_t scrypt_hash_digest[SCRYPT_HASH_DIGEST_SIZE]; + +typedef struct scrypt_hash_state_t { + uint64_t H[8]; + uint64_t T[2]; + uint32_t leftover; + uint8_t buffer[SCRYPT_HASH_BLOCK_SIZE]; +} scrypt_hash_state; + +static const uint64_t sha512_constants[80] = { + 0x428a2f98d728ae22ull, 0x7137449123ef65cdull, 0xb5c0fbcfec4d3b2full, 0xe9b5dba58189dbbcull, + 0x3956c25bf348b538ull, 0x59f111f1b605d019ull, 0x923f82a4af194f9bull, 0xab1c5ed5da6d8118ull, + 0xd807aa98a3030242ull, 0x12835b0145706fbeull, 0x243185be4ee4b28cull, 0x550c7dc3d5ffb4e2ull, + 0x72be5d74f27b896full, 0x80deb1fe3b1696b1ull, 0x9bdc06a725c71235ull, 0xc19bf174cf692694ull, + 0xe49b69c19ef14ad2ull, 0xefbe4786384f25e3ull, 0x0fc19dc68b8cd5b5ull, 0x240ca1cc77ac9c65ull, + 0x2de92c6f592b0275ull, 0x4a7484aa6ea6e483ull, 0x5cb0a9dcbd41fbd4ull, 0x76f988da831153b5ull, + 0x983e5152ee66dfabull, 0xa831c66d2db43210ull, 0xb00327c898fb213full, 0xbf597fc7beef0ee4ull, + 0xc6e00bf33da88fc2ull, 0xd5a79147930aa725ull, 0x06ca6351e003826full, 0x142929670a0e6e70ull, + 0x27b70a8546d22ffcull, 0x2e1b21385c26c926ull, 0x4d2c6dfc5ac42aedull, 0x53380d139d95b3dfull, + 0x650a73548baf63deull, 0x766a0abb3c77b2a8ull, 0x81c2c92e47edaee6ull, 0x92722c851482353bull, + 0xa2bfe8a14cf10364ull, 0xa81a664bbc423001ull, 0xc24b8b70d0f89791ull, 0xc76c51a30654be30ull, + 0xd192e819d6ef5218ull, 0xd69906245565a910ull, 0xf40e35855771202aull, 0x106aa07032bbd1b8ull, + 0x19a4c116b8d2d0c8ull, 0x1e376c085141ab53ull, 0x2748774cdf8eeb99ull, 0x34b0bcb5e19b48a8ull, + 0x391c0cb3c5c95a63ull, 0x4ed8aa4ae3418acbull, 0x5b9cca4f7763e373ull, 0x682e6ff3d6b2b8a3ull, + 0x748f82ee5defb2fcull, 0x78a5636f43172f60ull, 0x84c87814a1f0ab72ull, 0x8cc702081a6439ecull, + 0x90befffa23631e28ull, 0xa4506cebde82bde9ull, 0xbef9a3f7b2c67915ull, 0xc67178f2e372532bull, + 0xca273eceea26619cull, 0xd186b8c721c0c207ull, 0xeada7dd6cde0eb1eull, 0xf57d4f7fee6ed178ull, + 0x06f067aa72176fbaull, 0x0a637dc5a2c898a6ull, 0x113f9804bef90daeull, 0x1b710b35131c471bull, + 0x28db77f523047d84ull, 0x32caab7b40c72493ull, 0x3c9ebe0a15c9bebcull, 0x431d67c49c100d4cull, + 0x4cc5d4becb3e42b6ull, 0x597f299cfc657e2aull, 0x5fcb6fab3ad6faecull, 0x6c44198c4a475817ull +}; + +#define Ch(x,y,z) (z ^ (x & (y ^ z))) +#define Maj(x,y,z) (((x | y) & z) | (x & y)) +#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39)) +#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41)) +#define G0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ (x >> 7)) +#define G1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ (x >> 6)) +#define W0(in,i) (U8TO64_BE(&in[i * 8])) +#define W1(i) (G1(w[i - 2]) + w[i - 7] + G0(w[i - 15]) + w[i - 16]) +#define STEP(i) \ + t1 = S0(r[0]) + Maj(r[0], r[1], r[2]); \ + t0 = r[7] + S1(r[4]) + Ch(r[4], r[5], r[6]) + sha512_constants[i] + w[i]; \ + r[7] = r[6]; \ + r[6] = r[5]; \ + r[5] = r[4]; \ + r[4] = r[3] + t0; \ + r[3] = r[2]; \ + r[2] = r[1]; \ + r[1] = r[0]; \ + r[0] = t0 + t1; + +static void +sha512_blocks(scrypt_hash_state *S, const uint8_t *in, size_t blocks) { + uint64_t r[8], w[80], t0, t1; + size_t i; + + for (i = 0; i < 8; i++) r[i] = S->H[i]; + + while (blocks--) { + for (i = 0; i < 16; i++) { w[i] = W0(in, i); } + for (i = 16; i < 80; i++) { w[i] = W1(i); } + for (i = 0; i < 80; i++) { STEP(i); } + for (i = 0; i < 8; i++) { r[i] += S->H[i]; S->H[i] = r[i]; } + S->T[0] += SCRYPT_HASH_BLOCK_SIZE * 8; + S->T[1] += (!S->T[0]) ? 1 : 0; + in += SCRYPT_HASH_BLOCK_SIZE; + } +} + +static void +scrypt_hash_init(scrypt_hash_state *S) { + S->H[0] = 0x6a09e667f3bcc908ull; + S->H[1] = 0xbb67ae8584caa73bull; + S->H[2] = 0x3c6ef372fe94f82bull; + S->H[3] = 0xa54ff53a5f1d36f1ull; + S->H[4] = 0x510e527fade682d1ull; + S->H[5] = 0x9b05688c2b3e6c1full; + S->H[6] = 0x1f83d9abfb41bd6bull; + S->H[7] = 0x5be0cd19137e2179ull; + S->T[0] = 0; + S->T[1] = 0; + S->leftover = 0; +} + +static void +scrypt_hash_update(scrypt_hash_state *S, const uint8_t *in, size_t inlen) { + size_t blocks, want; + + /* handle the previous data */ + if (S->leftover) { + want = (SCRYPT_HASH_BLOCK_SIZE - S->leftover); + want = (want < inlen) ? want : inlen; + memcpy(S->buffer + S->leftover, in, want); + S->leftover += (uint32_t)want; + if (S->leftover < SCRYPT_HASH_BLOCK_SIZE) + return; + in += want; + inlen -= want; + sha512_blocks(S, S->buffer, 1); + } + + /* handle the current data */ + blocks = (inlen & ~(SCRYPT_HASH_BLOCK_SIZE - 1)); + S->leftover = (uint32_t)(inlen - blocks); + if (blocks) { + sha512_blocks(S, in, blocks / SCRYPT_HASH_BLOCK_SIZE); + in += blocks; + } + + /* handle leftover data */ + if (S->leftover) + memcpy(S->buffer, in, S->leftover); +} + +static void +scrypt_hash_finish(scrypt_hash_state *S, uint8_t *hash) { + uint64_t t0 = S->T[0] + (S->leftover * 8), t1 = S->T[1]; + + S->buffer[S->leftover] = 0x80; + if (S->leftover <= 111) { + memset(S->buffer + S->leftover + 1, 0, 111 - S->leftover); + } else { + memset(S->buffer + S->leftover + 1, 0, 127 - S->leftover); + sha512_blocks(S, S->buffer, 1); + memset(S->buffer, 0, 112); + } + + U64TO8_BE(S->buffer + 112, t1); + U64TO8_BE(S->buffer + 120, t0); + sha512_blocks(S, S->buffer, 1); + + U64TO8_BE(&hash[ 0], S->H[0]); + U64TO8_BE(&hash[ 8], S->H[1]); + U64TO8_BE(&hash[16], S->H[2]); + U64TO8_BE(&hash[24], S->H[3]); + U64TO8_BE(&hash[32], S->H[4]); + U64TO8_BE(&hash[40], S->H[5]); + U64TO8_BE(&hash[48], S->H[6]); + U64TO8_BE(&hash[56], S->H[7]); +} + +static const uint8_t scrypt_test_hash_expected[SCRYPT_HASH_DIGEST_SIZE] = { + 0xba,0xc3,0x80,0x2b,0x24,0x56,0x95,0x1f,0x19,0x7c,0xa2,0xd3,0x72,0x7c,0x9a,0x4d, + 0x1d,0x50,0x3a,0xa9,0x12,0x27,0xd8,0xe1,0xbe,0x76,0x53,0x87,0x5a,0x1e,0x82,0xec, + 0xc8,0xe1,0x6b,0x87,0xd0,0xb5,0x25,0x7e,0xe8,0x1e,0xd7,0x58,0xc6,0x2d,0xc2,0x9c, + 0x06,0x31,0x8f,0x5b,0x57,0x8e,0x76,0xba,0xd5,0xf6,0xec,0xfe,0x85,0x1f,0x34,0x0c, +}; diff --git a/deps/scrypt-jane-master/code/scrypt-jane-hash_skein512.h b/deps/scrypt-jane-master/code/scrypt-jane-hash_skein512.h new file mode 100644 index 000000000..736d893de --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-hash_skein512.h @@ -0,0 +1,188 @@ +#define SCRYPT_HASH "Skein-512" +#define SCRYPT_HASH_BLOCK_SIZE 64 +#define SCRYPT_HASH_DIGEST_SIZE 64 + +typedef uint8_t scrypt_hash_digest[SCRYPT_HASH_DIGEST_SIZE]; + +typedef struct scrypt_hash_state_t { + uint64_t X[8], T[2]; + uint32_t leftover; + uint8_t buffer[SCRYPT_HASH_BLOCK_SIZE]; +} scrypt_hash_state; + +#include + +static void +skein512_blocks(scrypt_hash_state *S, const uint8_t *in, size_t blocks, size_t add) { + uint64_t X[8], key[8], Xt[9+18], T[3+1]; + size_t r; + + while (blocks--) { + T[0] = S->T[0] + add; + T[1] = S->T[1]; + T[2] = T[0] ^ T[1]; + key[0] = U8TO64_LE(in + 0); Xt[0] = S->X[0]; X[0] = key[0] + Xt[0]; + key[1] = U8TO64_LE(in + 8); Xt[1] = S->X[1]; X[1] = key[1] + Xt[1]; + key[2] = U8TO64_LE(in + 16); Xt[2] = S->X[2]; X[2] = key[2] + Xt[2]; + key[3] = U8TO64_LE(in + 24); Xt[3] = S->X[3]; X[3] = key[3] + Xt[3]; + key[4] = U8TO64_LE(in + 32); Xt[4] = S->X[4]; X[4] = key[4] + Xt[4]; + key[5] = U8TO64_LE(in + 40); Xt[5] = S->X[5]; X[5] = key[5] + Xt[5] + T[0]; + key[6] = U8TO64_LE(in + 48); Xt[6] = S->X[6]; X[6] = key[6] + Xt[6] + T[1]; + key[7] = U8TO64_LE(in + 56); Xt[7] = S->X[7]; X[7] = key[7] + Xt[7]; + Xt[8] = 0x1BD11BDAA9FC1A22ull ^ Xt[0] ^ Xt[1] ^ Xt[2] ^ Xt[3] ^ Xt[4] ^ Xt[5] ^ Xt[6] ^ Xt[7]; + in += SCRYPT_HASH_BLOCK_SIZE; + + for (r = 0; r < 18; r++) + Xt[r + 9] = Xt[r + 0]; + + for (r = 0; r < 18; r += 2) { + X[0] += X[1]; X[1] = ROTL64(X[1], 46) ^ X[0]; + X[2] += X[3]; X[3] = ROTL64(X[3], 36) ^ X[2]; + X[4] += X[5]; X[5] = ROTL64(X[5], 19) ^ X[4]; + X[6] += X[7]; X[7] = ROTL64(X[7], 37) ^ X[6]; + X[2] += X[1]; X[1] = ROTL64(X[1], 33) ^ X[2]; + X[0] += X[3]; X[3] = ROTL64(X[3], 42) ^ X[0]; + X[6] += X[5]; X[5] = ROTL64(X[5], 14) ^ X[6]; + X[4] += X[7]; X[7] = ROTL64(X[7], 27) ^ X[4]; + X[4] += X[1]; X[1] = ROTL64(X[1], 17) ^ X[4]; + X[6] += X[3]; X[3] = ROTL64(X[3], 49) ^ X[6]; + X[0] += X[5]; X[5] = ROTL64(X[5], 36) ^ X[0]; + X[2] += X[7]; X[7] = ROTL64(X[7], 39) ^ X[2]; + X[6] += X[1]; X[1] = ROTL64(X[1], 44) ^ X[6]; + X[4] += X[3]; X[3] = ROTL64(X[3], 56) ^ X[4]; + X[2] += X[5]; X[5] = ROTL64(X[5], 54) ^ X[2]; + X[0] += X[7]; X[7] = ROTL64(X[7], 9) ^ X[0]; + + X[0] += Xt[r + 1]; + X[1] += Xt[r + 2]; + X[2] += Xt[r + 3]; + X[3] += Xt[r + 4]; + X[4] += Xt[r + 5]; + X[5] += Xt[r + 6] + T[1]; + X[6] += Xt[r + 7] + T[2]; + X[7] += Xt[r + 8] + r + 1; + + T[3] = T[0]; + T[0] = T[1]; + T[1] = T[2]; + T[2] = T[3]; + + X[0] += X[1]; X[1] = ROTL64(X[1], 39) ^ X[0]; + X[2] += X[3]; X[3] = ROTL64(X[3], 30) ^ X[2]; + X[4] += X[5]; X[5] = ROTL64(X[5], 34) ^ X[4]; + X[6] += X[7]; X[7] = ROTL64(X[7], 24) ^ X[6]; + X[2] += X[1]; X[1] = ROTL64(X[1], 13) ^ X[2]; + X[0] += X[3]; X[3] = ROTL64(X[3], 17) ^ X[0]; + X[6] += X[5]; X[5] = ROTL64(X[5], 10) ^ X[6]; + X[4] += X[7]; X[7] = ROTL64(X[7], 50) ^ X[4]; + X[4] += X[1]; X[1] = ROTL64(X[1], 25) ^ X[4]; + X[6] += X[3]; X[3] = ROTL64(X[3], 29) ^ X[6]; + X[0] += X[5]; X[5] = ROTL64(X[5], 39) ^ X[0]; + X[2] += X[7]; X[7] = ROTL64(X[7], 43) ^ X[2]; + X[6] += X[1]; X[1] = ROTL64(X[1], 8) ^ X[6]; + X[4] += X[3]; X[3] = ROTL64(X[3], 22) ^ X[4]; + X[2] += X[5]; X[5] = ROTL64(X[5], 56) ^ X[2]; + X[0] += X[7]; X[7] = ROTL64(X[7], 35) ^ X[0]; + + X[0] += Xt[r + 2]; + X[1] += Xt[r + 3]; + X[2] += Xt[r + 4]; + X[3] += Xt[r + 5]; + X[4] += Xt[r + 6]; + X[5] += Xt[r + 7] + T[1]; + X[6] += Xt[r + 8] + T[2]; + X[7] += Xt[r + 9] + r + 2; + + T[3] = T[0]; + T[0] = T[1]; + T[1] = T[2]; + T[2] = T[3]; + } + + S->X[0] = key[0] ^ X[0]; + S->X[1] = key[1] ^ X[1]; + S->X[2] = key[2] ^ X[2]; + S->X[3] = key[3] ^ X[3]; + S->X[4] = key[4] ^ X[4]; + S->X[5] = key[5] ^ X[5]; + S->X[6] = key[6] ^ X[6]; + S->X[7] = key[7] ^ X[7]; + + S->T[0] = T[0]; + S->T[1] = T[1] & ~0x4000000000000000ull; + } +} + +static void +scrypt_hash_init(scrypt_hash_state *S) { + S->X[0] = 0x4903ADFF749C51CEull; + S->X[1] = 0x0D95DE399746DF03ull; + S->X[2] = 0x8FD1934127C79BCEull; + S->X[3] = 0x9A255629FF352CB1ull; + S->X[4] = 0x5DB62599DF6CA7B0ull; + S->X[5] = 0xEABE394CA9D5C3F4ull; + S->X[6] = 0x991112C71A75B523ull; + S->X[7] = 0xAE18A40B660FCC33ull; + S->T[0] = 0x0000000000000000ull; + S->T[1] = 0x7000000000000000ull; + S->leftover = 0; +} + +static void +scrypt_hash_update(scrypt_hash_state *S, const uint8_t *in, size_t inlen) { + size_t blocks, want; + + /* skein processes the final <=64 bytes raw, so we can only update if there are at least 64+1 bytes available */ + if ((S->leftover + inlen) > SCRYPT_HASH_BLOCK_SIZE) { + /* handle the previous data, we know there is enough for at least one block */ + if (S->leftover) { + want = (SCRYPT_HASH_BLOCK_SIZE - S->leftover); + memcpy(S->buffer + S->leftover, in, want); + in += want; + inlen -= want; + S->leftover = 0; + skein512_blocks(S, S->buffer, 1, SCRYPT_HASH_BLOCK_SIZE); + } + + /* handle the current data if there's more than one block */ + if (inlen > SCRYPT_HASH_BLOCK_SIZE) { + blocks = ((inlen - 1) & ~(SCRYPT_HASH_BLOCK_SIZE - 1)); + skein512_blocks(S, in, blocks / SCRYPT_HASH_BLOCK_SIZE, SCRYPT_HASH_BLOCK_SIZE); + inlen -= blocks; + in += blocks; + } + } + + /* handle leftover data */ + memcpy(S->buffer + S->leftover, in, inlen); + S->leftover += inlen; +} + +static void +scrypt_hash_finish(scrypt_hash_state *S, uint8_t *hash) { + memset(S->buffer + S->leftover, 0, SCRYPT_HASH_BLOCK_SIZE - S->leftover); + S->T[1] |= 0x8000000000000000ull; + skein512_blocks(S, S->buffer, 1, S->leftover); + + memset(S->buffer, 0, SCRYPT_HASH_BLOCK_SIZE); + S->T[0] = 0; + S->T[1] = 0xff00000000000000ull; + skein512_blocks(S, S->buffer, 1, 8); + + U64TO8_LE(&hash[ 0], S->X[0]); + U64TO8_LE(&hash[ 8], S->X[1]); + U64TO8_LE(&hash[16], S->X[2]); + U64TO8_LE(&hash[24], S->X[3]); + U64TO8_LE(&hash[32], S->X[4]); + U64TO8_LE(&hash[40], S->X[5]); + U64TO8_LE(&hash[48], S->X[6]); + U64TO8_LE(&hash[56], S->X[7]); +} + + +static const uint8_t scrypt_test_hash_expected[SCRYPT_HASH_DIGEST_SIZE] = { + 0x4d,0x52,0x29,0xff,0x10,0xbc,0xd2,0x62,0xd1,0x61,0x83,0xc8,0xe6,0xf0,0x83,0xc4, + 0x9f,0xf5,0x6a,0x42,0x75,0x2a,0x26,0x4e,0xf0,0x28,0x72,0x28,0x47,0xe8,0x23,0xdf, + 0x1e,0x64,0xf1,0x51,0x38,0x35,0x9d,0xc2,0x83,0xfc,0x35,0x4e,0xc0,0x52,0x5f,0x41, + 0x6a,0x0b,0x7d,0xf5,0xce,0x98,0xde,0x6f,0x36,0xd8,0x51,0x15,0x78,0x78,0x93,0x67, +}; diff --git a/deps/scrypt-jane-master/code/scrypt-jane-mix_chacha-avx.h b/deps/scrypt-jane-master/code/scrypt-jane-mix_chacha-avx.h new file mode 100644 index 000000000..ddd3ee119 --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-mix_chacha-avx.h @@ -0,0 +1,368 @@ +/* x86 */ +#if defined(X86ASM_AVX) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_CHACHA_INCLUDED)) && !defined(CPU_X86_FORCE_INTRINSICS) + +#define SCRYPT_CHACHA_AVX + +asm_naked_fn_proto(void, scrypt_ChunkMix_avx)(uint32_t *Bout/*[chunkBytes]*/, uint32_t *Bin/*[chunkBytes]*/, uint32_t *Bxor/*[chunkBytes]*/, uint32_t r) +asm_naked_fn(scrypt_ChunkMix_avx) + a1(push ebx) + a1(push edi) + a1(push esi) + a1(push ebp) + a2(mov ebp,esp) + a2(mov edi,[ebp+20]) + a2(mov esi,[ebp+24]) + a2(mov eax,[ebp+28]) + a2(mov ebx,[ebp+32]) + a2(sub esp,64) + a2(and esp,~63) + a2(lea edx,[ebx*2]) + a2(shl edx,6) + a2(lea ecx,[edx-64]) + a2(and eax, eax) + a2(mov ebx, 0x01000302) + a2(vmovd xmm4, ebx) + a2(mov ebx, 0x05040706) + a2(vmovd xmm0, ebx) + a2(mov ebx, 0x09080b0a) + a2(vmovd xmm1, ebx) + a2(mov ebx, 0x0d0c0f0e) + a2(vmovd xmm2, ebx) + a2(mov ebx, 0x02010003) + a2(vmovd xmm5, ebx) + a2(mov ebx, 0x06050407) + a2(vmovd xmm3, ebx) + a2(mov ebx, 0x0a09080b) + a2(vmovd xmm6, ebx) + a2(mov ebx, 0x0e0d0c0f) + a2(vmovd xmm7, ebx) + a3(vpunpckldq xmm4, xmm4, xmm0) + a3(vpunpckldq xmm5, xmm5, xmm3) + a3(vpunpckldq xmm1, xmm1, xmm2) + a3(vpunpckldq xmm6, xmm6, xmm7) + a3(vpunpcklqdq xmm4, xmm4, xmm1) + a3(vpunpcklqdq xmm5, xmm5, xmm6) + a2(vmovdqa xmm0,[ecx+esi+0]) + a2(vmovdqa xmm1,[ecx+esi+16]) + a2(vmovdqa xmm2,[ecx+esi+32]) + a2(vmovdqa xmm3,[ecx+esi+48]) + aj(jz scrypt_ChunkMix_avx_no_xor1) + a3(vpxor xmm0,xmm0,[ecx+eax+0]) + a3(vpxor xmm1,xmm1,[ecx+eax+16]) + a3(vpxor xmm2,xmm2,[ecx+eax+32]) + a3(vpxor xmm3,xmm3,[ecx+eax+48]) + a1(scrypt_ChunkMix_avx_no_xor1:) + a2(xor ecx,ecx) + a2(xor ebx,ebx) + a1(scrypt_ChunkMix_avx_loop:) + a2(and eax, eax) + a3(vpxor xmm0,xmm0,[esi+ecx+0]) + a3(vpxor xmm1,xmm1,[esi+ecx+16]) + a3(vpxor xmm2,xmm2,[esi+ecx+32]) + a3(vpxor xmm3,xmm3,[esi+ecx+48]) + aj(jz scrypt_ChunkMix_avx_no_xor2) + a3(vpxor xmm0,xmm0,[eax+ecx+0]) + a3(vpxor xmm1,xmm1,[eax+ecx+16]) + a3(vpxor xmm2,xmm2,[eax+ecx+32]) + a3(vpxor xmm3,xmm3,[eax+ecx+48]) + a1(scrypt_ChunkMix_avx_no_xor2:) + a2(vmovdqa [esp+0],xmm0) + a2(vmovdqa [esp+16],xmm1) + a2(vmovdqa [esp+32],xmm2) + a2(vmovdqa [esp+48],xmm3) + a2(mov eax,8) + a1(scrypt_chacha_avx_loop: ) + a3(vpaddd xmm0,xmm0,xmm1) + a3(vpxor xmm3,xmm3,xmm0) + a3(vpshufb xmm3,xmm3,xmm4) + a3(vpaddd xmm2,xmm2,xmm3) + a3(vpxor xmm1,xmm1,xmm2) + a3(vpsrld xmm6,xmm1,20) + a3(vpslld xmm1,xmm1,12) + a3(vpxor xmm1,xmm1,xmm6) + a3(vpaddd xmm0,xmm0,xmm1) + a3(vpxor xmm3,xmm3,xmm0) + a3(vpshufb xmm3,xmm3,xmm5) + a3(vpshufd xmm0,xmm0,0x93) + a3(vpaddd xmm2,xmm2,xmm3) + a3(vpshufd xmm3,xmm3,0x4e) + a3(vpxor xmm1,xmm1,xmm2) + a3(vpshufd xmm2,xmm2,0x39) + a3(vpsrld xmm6,xmm1,25) + a3(vpslld xmm1,xmm1,7) + a3(vpxor xmm1,xmm1,xmm6) + a3(vpaddd xmm0,xmm0,xmm1) + a3(vpxor xmm3,xmm3,xmm0) + a3(vpshufb xmm3,xmm3,xmm4) + a3(vpaddd xmm2,xmm2,xmm3) + a3(vpxor xmm1,xmm1,xmm2) + a3(vpsrld xmm6,xmm1,20) + a3(vpslld xmm1,xmm1,12) + a3(vpxor xmm1,xmm1,xmm6) + a3(vpaddd xmm0,xmm0,xmm1) + a3(vpxor xmm3,xmm3,xmm0) + a3(vpshufb xmm3,xmm3,xmm5) + a3(vpshufd xmm0,xmm0,0x39) + a3(vpaddd xmm2,xmm2,xmm3) + a3(vpshufd xmm3,xmm3,0x4e) + a3(vpxor xmm1,xmm1,xmm2) + a3(vpshufd xmm2,xmm2,0x93) + a3(vpsrld xmm6,xmm1,25) + a3(vpslld xmm1,xmm1,7) + a3(vpxor xmm1,xmm1,xmm6) + a2(sub eax,2) + aj(ja scrypt_chacha_avx_loop) + a3(vpaddd xmm0,xmm0,[esp+0]) + a3(vpaddd xmm1,xmm1,[esp+16]) + a3(vpaddd xmm2,xmm2,[esp+32]) + a3(vpaddd xmm3,xmm3,[esp+48]) + a2(lea eax,[ebx+ecx]) + a2(xor ebx,edx) + a2(and eax,~0x7f) + a2(add ecx,64) + a2(shr eax,1) + a2(add eax, edi) + a2(cmp ecx,edx) + a2(vmovdqa [eax+0],xmm0) + a2(vmovdqa [eax+16],xmm1) + a2(vmovdqa [eax+32],xmm2) + a2(vmovdqa [eax+48],xmm3) + a2(mov eax,[ebp+28]) + aj(jne scrypt_ChunkMix_avx_loop) + a2(mov esp,ebp) + a1(pop ebp) + a1(pop esi) + a1(pop edi) + a1(pop ebx) + aret(16) +asm_naked_fn_end(scrypt_ChunkMix_avx) + +#endif + + + +/* x64 */ +#if defined(X86_64ASM_AVX) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_CHACHA_INCLUDED)) && !defined(CPU_X86_FORCE_INTRINSICS) + +#define SCRYPT_CHACHA_AVX + +asm_naked_fn_proto(void, scrypt_ChunkMix_avx)(uint32_t *Bout/*[chunkBytes]*/, uint32_t *Bin/*[chunkBytes]*/, uint32_t *Bxor/*[chunkBytes]*/, uint32_t r) +asm_naked_fn(scrypt_ChunkMix_avx) + a2(lea rcx,[ecx*2]) /* zero extend uint32_t by using ecx, win64 can leave garbage in the top half */ + a2(shl rcx,6) + a2(lea r9,[rcx-64]) + a2(lea rax,[rsi+r9]) + a2(lea r9,[rdx+r9]) + a2(and rdx, rdx) + a2(vmovdqa xmm0,[rax+0]) + a2(vmovdqa xmm1,[rax+16]) + a2(vmovdqa xmm2,[rax+32]) + a2(vmovdqa xmm3,[rax+48]) + a2(mov r8, 0x0504070601000302) + a2(mov rax, 0x0d0c0f0e09080b0a) + a2(movd xmm4, r8) + a2(movd xmm6, rax) + a2(mov r8, 0x0605040702010003) + a2(mov rax, 0x0e0d0c0f0a09080b) + a2(movd xmm5, r8) + a2(movd xmm7, rax) + a3(vpunpcklqdq xmm4, xmm4, xmm6) + a3(vpunpcklqdq xmm5, xmm5, xmm7) + aj(jz scrypt_ChunkMix_avx_no_xor1) + a3(vpxor xmm0,xmm0,[r9+0]) + a3(vpxor xmm1,xmm1,[r9+16]) + a3(vpxor xmm2,xmm2,[r9+32]) + a3(vpxor xmm3,xmm3,[r9+48]) + a1(scrypt_ChunkMix_avx_no_xor1:) + a2(xor r8,r8) + a2(xor r9,r9) + a1(scrypt_ChunkMix_avx_loop:) + a2(and rdx, rdx) + a3(vpxor xmm0,xmm0,[rsi+r9+0]) + a3(vpxor xmm1,xmm1,[rsi+r9+16]) + a3(vpxor xmm2,xmm2,[rsi+r9+32]) + a3(vpxor xmm3,xmm3,[rsi+r9+48]) + aj(jz scrypt_ChunkMix_avx_no_xor2) + a3(vpxor xmm0,xmm0,[rdx+r9+0]) + a3(vpxor xmm1,xmm1,[rdx+r9+16]) + a3(vpxor xmm2,xmm2,[rdx+r9+32]) + a3(vpxor xmm3,xmm3,[rdx+r9+48]) + a1(scrypt_ChunkMix_avx_no_xor2:) + a2(vmovdqa xmm8,xmm0) + a2(vmovdqa xmm9,xmm1) + a2(vmovdqa xmm10,xmm2) + a2(vmovdqa xmm11,xmm3) + a2(mov rax,8) + a1(scrypt_chacha_avx_loop: ) + a3(vpaddd xmm0,xmm0,xmm1) + a3(vpxor xmm3,xmm3,xmm0) + a3(vpshufb xmm3,xmm3,xmm4) + a3(vpaddd xmm2,xmm2,xmm3) + a3(vpxor xmm1,xmm1,xmm2) + a3(vpsrld xmm12,xmm1,20) + a3(vpslld xmm1,xmm1,12) + a3(vpxor xmm1,xmm1,xmm12) + a3(vpaddd xmm0,xmm0,xmm1) + a3(vpxor xmm3,xmm3,xmm0) + a3(vpshufb xmm3,xmm3,xmm5) + a3(vpshufd xmm0,xmm0,0x93) + a3(vpaddd xmm2,xmm2,xmm3) + a3(vpshufd xmm3,xmm3,0x4e) + a3(vpxor xmm1,xmm1,xmm2) + a3(vpshufd xmm2,xmm2,0x39) + a3(vpsrld xmm12,xmm1,25) + a3(vpslld xmm1,xmm1,7) + a3(vpxor xmm1,xmm1,xmm12) + a3(vpaddd xmm0,xmm0,xmm1) + a3(vpxor xmm3,xmm3,xmm0) + a3(vpshufb xmm3,xmm3,xmm4) + a3(vpaddd xmm2,xmm2,xmm3) + a3(vpxor xmm1,xmm1,xmm2) + a3(vpsrld xmm12,xmm1,20) + a3(vpslld xmm1,xmm1,12) + a3(vpxor xmm1,xmm1,xmm12) + a3(vpaddd xmm0,xmm0,xmm1) + a3(vpxor xmm3,xmm3,xmm0) + a3(vpshufb xmm3,xmm3,xmm5) + a3(vpshufd xmm0,xmm0,0x39) + a3(vpaddd xmm2,xmm2,xmm3) + a3(vpshufd xmm3,xmm3,0x4e) + a3(vpxor xmm1,xmm1,xmm2) + a3(vpshufd xmm2,xmm2,0x93) + a3(vpsrld xmm12,xmm1,25) + a3(vpslld xmm1,xmm1,7) + a3(vpxor xmm1,xmm1,xmm12) + a2(sub rax,2) + aj(ja scrypt_chacha_avx_loop) + a3(vpaddd xmm0,xmm0,xmm8) + a3(vpaddd xmm1,xmm1,xmm9) + a3(vpaddd xmm2,xmm2,xmm10) + a3(vpaddd xmm3,xmm3,xmm11) + a2(lea rax,[r8+r9]) + a2(xor r8,rcx) + a2(and rax,~0x7f) + a2(add r9,64) + a2(shr rax,1) + a2(add rax, rdi) + a2(cmp r9,rcx) + a2(vmovdqa [rax+0],xmm0) + a2(vmovdqa [rax+16],xmm1) + a2(vmovdqa [rax+32],xmm2) + a2(vmovdqa [rax+48],xmm3) + aj(jne scrypt_ChunkMix_avx_loop) + a1(ret) +asm_naked_fn_end(scrypt_ChunkMix_avx) + +#endif + + +/* intrinsic */ +#if defined(X86_INTRINSIC_AVX) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_CHACHA_INCLUDED)) + +#define SCRYPT_CHACHA_AVX + +static void asm_calling_convention NOINLINE +scrypt_ChunkMix_avx(uint32_t *Bout/*[chunkBytes]*/, uint32_t *Bin/*[chunkBytes]*/, uint32_t *Bxor/*[chunkBytes]*/, uint32_t r) { + uint32_t i, blocksPerChunk = r * 2, half = 0; + xmmi *xmmp,x0,x1,x2,x3,x6,t0,t1,t2,t3; + const xmmi x4 = *(xmmi *)&ssse3_rotl16_32bit, x5 = *(xmmi *)&ssse3_rotl8_32bit; + size_t rounds; + + /* 1: X = B_{2r - 1} */ + xmmp = (xmmi *)scrypt_block(Bin, blocksPerChunk - 1); + x0 = xmmp[0]; + x1 = xmmp[1]; + x2 = xmmp[2]; + x3 = xmmp[3]; + + if (Bxor) { + xmmp = (xmmi *)scrypt_block(Bxor, blocksPerChunk - 1); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + } + + /* 2: for i = 0 to 2r - 1 do */ + for (i = 0; i < blocksPerChunk; i++, half ^= r) { + /* 3: X = H(X ^ B_i) */ + xmmp = (xmmi *)scrypt_block(Bin, i); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + + if (Bxor) { + xmmp = (xmmi *)scrypt_block(Bxor, i); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + } + + t0 = x0; + t1 = x1; + t2 = x2; + t3 = x3; + + for (rounds = 8; rounds; rounds -= 2) { + x0 = _mm_add_epi32(x0, x1); + x3 = _mm_xor_si128(x3, x0); + x3 = _mm_shuffle_epi8(x3, x4); + x2 = _mm_add_epi32(x2, x3); + x1 = _mm_xor_si128(x1, x2); + x6 = x1; + x1 = _mm_or_si128(_mm_slli_epi32(x1, 12), _mm_srli_epi32(x6, 20)); + x0 = _mm_add_epi32(x0, x1); + x3 = _mm_xor_si128(x3, x0); + x3 = _mm_shuffle_epi8(x3, x5); + x0 = _mm_shuffle_epi32(x0, 0x93); + x2 = _mm_add_epi32(x2, x3); + x3 = _mm_shuffle_epi32(x3, 0x4e); + x1 = _mm_xor_si128(x1, x2); + x2 = _mm_shuffle_epi32(x2, 0x39); + x6 = x1; + x1 = _mm_or_si128(_mm_slli_epi32(x1, 7), _mm_srli_epi32(x6, 25)); + x0 = _mm_add_epi32(x0, x1); + x3 = _mm_xor_si128(x3, x0); + x3 = _mm_shuffle_epi8(x3, x4); + x2 = _mm_add_epi32(x2, x3); + x1 = _mm_xor_si128(x1, x2); + x6 = x1; + x1 = _mm_or_si128(_mm_slli_epi32(x1, 12), _mm_srli_epi32(x6, 20)); + x0 = _mm_add_epi32(x0, x1); + x3 = _mm_xor_si128(x3, x0); + x3 = _mm_shuffle_epi8(x3, x5); + x0 = _mm_shuffle_epi32(x0, 0x39); + x2 = _mm_add_epi32(x2, x3); + x3 = _mm_shuffle_epi32(x3, 0x4e); + x1 = _mm_xor_si128(x1, x2); + x2 = _mm_shuffle_epi32(x2, 0x93); + x6 = x1; + x1 = _mm_or_si128(_mm_slli_epi32(x1, 7), _mm_srli_epi32(x6, 25)); + } + + x0 = _mm_add_epi32(x0, t0); + x1 = _mm_add_epi32(x1, t1); + x2 = _mm_add_epi32(x2, t2); + x3 = _mm_add_epi32(x3, t3); + + /* 4: Y_i = X */ + /* 6: B'[0..r-1] = Y_even */ + /* 6: B'[r..2r-1] = Y_odd */ + xmmp = (xmmi *)scrypt_block(Bout, (i / 2) + half); + xmmp[0] = x0; + xmmp[1] = x1; + xmmp[2] = x2; + xmmp[3] = x3; + } +} + +#endif + +#if defined(SCRYPT_CHACHA_AVX) + #undef SCRYPT_MIX + #define SCRYPT_MIX "ChaCha/8-AVX" + #undef SCRYPT_CHACHA_INCLUDED + #define SCRYPT_CHACHA_INCLUDED +#endif diff --git a/deps/scrypt-jane-master/code/scrypt-jane-mix_chacha-sse2.h b/deps/scrypt-jane-master/code/scrypt-jane-mix_chacha-sse2.h new file mode 100644 index 000000000..a8c2197ac --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-mix_chacha-sse2.h @@ -0,0 +1,363 @@ +/* x86 */ +#if defined(X86ASM_SSE2) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_CHACHA_INCLUDED)) && !defined(CPU_X86_FORCE_INTRINSICS) + +#define SCRYPT_CHACHA_SSE2 + +asm_naked_fn_proto(void, scrypt_ChunkMix_sse2)(uint32_t *Bout/*[chunkBytes]*/, uint32_t *Bin/*[chunkBytes]*/, uint32_t *Bxor/*[chunkBytes]*/, uint32_t r) +asm_naked_fn(scrypt_ChunkMix_sse2) + a1(push ebx) + a1(push edi) + a1(push esi) + a1(push ebp) + a2(mov ebp,esp) + a2(mov edi,[ebp+20]) + a2(mov esi,[ebp+24]) + a2(mov eax,[ebp+28]) + a2(mov ebx,[ebp+32]) + a2(sub esp,16) + a2(and esp,~15) + a2(lea edx,[ebx*2]) + a2(shl edx,6) + a2(lea ecx,[edx-64]) + a2(and eax, eax) + a2(movdqa xmm0,[ecx+esi+0]) + a2(movdqa xmm1,[ecx+esi+16]) + a2(movdqa xmm2,[ecx+esi+32]) + a2(movdqa xmm3,[ecx+esi+48]) + aj(jz scrypt_ChunkMix_sse2_no_xor1) + a2(pxor xmm0,[ecx+eax+0]) + a2(pxor xmm1,[ecx+eax+16]) + a2(pxor xmm2,[ecx+eax+32]) + a2(pxor xmm3,[ecx+eax+48]) + a1(scrypt_ChunkMix_sse2_no_xor1:) + a2(xor ecx,ecx) + a2(xor ebx,ebx) + a1(scrypt_ChunkMix_sse2_loop:) + a2(and eax, eax) + a2(pxor xmm0,[esi+ecx+0]) + a2(pxor xmm1,[esi+ecx+16]) + a2(pxor xmm2,[esi+ecx+32]) + a2(pxor xmm3,[esi+ecx+48]) + aj(jz scrypt_ChunkMix_sse2_no_xor2) + a2(pxor xmm0,[eax+ecx+0]) + a2(pxor xmm1,[eax+ecx+16]) + a2(pxor xmm2,[eax+ecx+32]) + a2(pxor xmm3,[eax+ecx+48]) + a1(scrypt_ChunkMix_sse2_no_xor2:) + a2(movdqa [esp+0],xmm0) + a2(movdqa xmm4,xmm1) + a2(movdqa xmm5,xmm2) + a2(movdqa xmm7,xmm3) + a2(mov eax,8) + a1(scrypt_chacha_sse2_loop: ) + a2(paddd xmm0,xmm1) + a2(pxor xmm3,xmm0) + a3(pshuflw xmm3,xmm3,0xb1) + a3(pshufhw xmm3,xmm3,0xb1) + a2(paddd xmm2,xmm3) + a2(pxor xmm1,xmm2) + a2(movdqa xmm6,xmm1) + a2(pslld xmm1,12) + a2(psrld xmm6,20) + a2(pxor xmm1,xmm6) + a2(paddd xmm0,xmm1) + a2(pxor xmm3,xmm0) + a2(movdqa xmm6,xmm3) + a2(pslld xmm3,8) + a2(psrld xmm6,24) + a2(pxor xmm3,xmm6) + a3(pshufd xmm0,xmm0,0x93) + a2(paddd xmm2,xmm3) + a3(pshufd xmm3,xmm3,0x4e) + a2(pxor xmm1,xmm2) + a3(pshufd xmm2,xmm2,0x39) + a2(movdqa xmm6,xmm1) + a2(pslld xmm1,7) + a2(psrld xmm6,25) + a2(pxor xmm1,xmm6) + a2(sub eax,2) + a2(paddd xmm0,xmm1) + a2(pxor xmm3,xmm0) + a3(pshuflw xmm3,xmm3,0xb1) + a3(pshufhw xmm3,xmm3,0xb1) + a2(paddd xmm2,xmm3) + a2(pxor xmm1,xmm2) + a2(movdqa xmm6,xmm1) + a2(pslld xmm1,12) + a2(psrld xmm6,20) + a2(pxor xmm1,xmm6) + a2(paddd xmm0,xmm1) + a2(pxor xmm3,xmm0) + a2(movdqa xmm6,xmm3) + a2(pslld xmm3,8) + a2(psrld xmm6,24) + a2(pxor xmm3,xmm6) + a3(pshufd xmm0,xmm0,0x39) + a2(paddd xmm2,xmm3) + a3(pshufd xmm3,xmm3,0x4e) + a2(pxor xmm1,xmm2) + a3(pshufd xmm2,xmm2,0x93) + a2(movdqa xmm6,xmm1) + a2(pslld xmm1,7) + a2(psrld xmm6,25) + a2(pxor xmm1,xmm6) + aj(ja scrypt_chacha_sse2_loop) + a2(paddd xmm0,[esp+0]) + a2(paddd xmm1,xmm4) + a2(paddd xmm2,xmm5) + a2(paddd xmm3,xmm7) + a2(lea eax,[ebx+ecx]) + a2(xor ebx,edx) + a2(and eax,~0x7f) + a2(add ecx,64) + a2(shr eax,1) + a2(add eax, edi) + a2(cmp ecx,edx) + a2(movdqa [eax+0],xmm0) + a2(movdqa [eax+16],xmm1) + a2(movdqa [eax+32],xmm2) + a2(movdqa [eax+48],xmm3) + a2(mov eax,[ebp+28]) + aj(jne scrypt_ChunkMix_sse2_loop) + a2(mov esp,ebp) + a1(pop ebp) + a1(pop esi) + a1(pop edi) + a1(pop ebx) + aret(16) +asm_naked_fn_end(scrypt_ChunkMix_sse2) + +#endif + + + +/* x64 */ +#if defined(X86_64ASM_SSE2) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_CHACHA_INCLUDED)) && !defined(CPU_X86_FORCE_INTRINSICS) + +#define SCRYPT_CHACHA_SSE2 + +asm_naked_fn_proto(void, scrypt_ChunkMix_sse2)(uint32_t *Bout/*[chunkBytes]*/, uint32_t *Bin/*[chunkBytes]*/, uint32_t *Bxor/*[chunkBytes]*/, uint32_t r) +asm_naked_fn(scrypt_ChunkMix_sse2) + a2(lea rcx,[ecx*2]) /* zero extend uint32_t by using ecx, win64 can leave garbage in the top half */ + a2(shl rcx,6) + a2(lea r9,[rcx-64]) + a2(lea rax,[rsi+r9]) + a2(lea r9,[rdx+r9]) + a2(and rdx, rdx) + a2(movdqa xmm0,[rax+0]) + a2(movdqa xmm1,[rax+16]) + a2(movdqa xmm2,[rax+32]) + a2(movdqa xmm3,[rax+48]) + aj(jz scrypt_ChunkMix_sse2_no_xor1) + a2(pxor xmm0,[r9+0]) + a2(pxor xmm1,[r9+16]) + a2(pxor xmm2,[r9+32]) + a2(pxor xmm3,[r9+48]) + a1(scrypt_ChunkMix_sse2_no_xor1:) + a2(xor r9,r9) + a2(xor r8,r8) + a1(scrypt_ChunkMix_sse2_loop:) + a2(and rdx, rdx) + a2(pxor xmm0,[rsi+r9+0]) + a2(pxor xmm1,[rsi+r9+16]) + a2(pxor xmm2,[rsi+r9+32]) + a2(pxor xmm3,[rsi+r9+48]) + aj(jz scrypt_ChunkMix_sse2_no_xor2) + a2(pxor xmm0,[rdx+r9+0]) + a2(pxor xmm1,[rdx+r9+16]) + a2(pxor xmm2,[rdx+r9+32]) + a2(pxor xmm3,[rdx+r9+48]) + a1(scrypt_ChunkMix_sse2_no_xor2:) + a2(movdqa xmm8,xmm0) + a2(movdqa xmm9,xmm1) + a2(movdqa xmm10,xmm2) + a2(movdqa xmm11,xmm3) + a2(mov rax,8) + a1(scrypt_chacha_sse2_loop: ) + a2(paddd xmm0,xmm1) + a2(pxor xmm3,xmm0) + a3(pshuflw xmm3,xmm3,0xb1) + a3(pshufhw xmm3,xmm3,0xb1) + a2(paddd xmm2,xmm3) + a2(pxor xmm1,xmm2) + a2(movdqa xmm6,xmm1) + a2(pslld xmm1,12) + a2(psrld xmm6,20) + a2(pxor xmm1,xmm6) + a2(paddd xmm0,xmm1) + a2(pxor xmm3,xmm0) + a2(movdqa xmm6,xmm3) + a2(pslld xmm3,8) + a2(psrld xmm6,24) + a2(pxor xmm3,xmm6) + a3(pshufd xmm0,xmm0,0x93) + a2(paddd xmm2,xmm3) + a3(pshufd xmm3,xmm3,0x4e) + a2(pxor xmm1,xmm2) + a3(pshufd xmm2,xmm2,0x39) + a2(movdqa xmm6,xmm1) + a2(pslld xmm1,7) + a2(psrld xmm6,25) + a2(pxor xmm1,xmm6) + a2(sub rax,2) + a2(paddd xmm0,xmm1) + a2(pxor xmm3,xmm0) + a3(pshuflw xmm3,xmm3,0xb1) + a3(pshufhw xmm3,xmm3,0xb1) + a2(paddd xmm2,xmm3) + a2(pxor xmm1,xmm2) + a2(movdqa xmm6,xmm1) + a2(pslld xmm1,12) + a2(psrld xmm6,20) + a2(pxor xmm1,xmm6) + a2(paddd xmm0,xmm1) + a2(pxor xmm3,xmm0) + a2(movdqa xmm6,xmm3) + a2(pslld xmm3,8) + a2(psrld xmm6,24) + a2(pxor xmm3,xmm6) + a3(pshufd xmm0,xmm0,0x39) + a2(paddd xmm2,xmm3) + a3(pshufd xmm3,xmm3,0x4e) + a2(pxor xmm1,xmm2) + a3(pshufd xmm2,xmm2,0x93) + a2(movdqa xmm6,xmm1) + a2(pslld xmm1,7) + a2(psrld xmm6,25) + a2(pxor xmm1,xmm6) + aj(ja scrypt_chacha_sse2_loop) + a2(paddd xmm0,xmm8) + a2(paddd xmm1,xmm9) + a2(paddd xmm2,xmm10) + a2(paddd xmm3,xmm11) + a2(lea rax,[r8+r9]) + a2(xor r8,rcx) + a2(and rax,~0x7f) + a2(add r9,64) + a2(shr rax,1) + a2(add rax, rdi) + a2(cmp r9,rcx) + a2(movdqa [rax+0],xmm0) + a2(movdqa [rax+16],xmm1) + a2(movdqa [rax+32],xmm2) + a2(movdqa [rax+48],xmm3) + aj(jne scrypt_ChunkMix_sse2_loop) + a1(ret) +asm_naked_fn_end(scrypt_ChunkMix_sse2) + +#endif + + +/* intrinsic */ +#if defined(X86_INTRINSIC_SSE2) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_CHACHA_INCLUDED)) + +#define SCRYPT_CHACHA_SSE2 + +static void NOINLINE asm_calling_convention +scrypt_ChunkMix_sse2(uint32_t *Bout/*[chunkBytes]*/, uint32_t *Bin/*[chunkBytes]*/, uint32_t *Bxor/*[chunkBytes]*/, uint32_t r) { + uint32_t i, blocksPerChunk = r * 2, half = 0; + xmmi *xmmp,x0,x1,x2,x3,x4,t0,t1,t2,t3; + size_t rounds; + + /* 1: X = B_{2r - 1} */ + xmmp = (xmmi *)scrypt_block(Bin, blocksPerChunk - 1); + x0 = xmmp[0]; + x1 = xmmp[1]; + x2 = xmmp[2]; + x3 = xmmp[3]; + + if (Bxor) { + xmmp = (xmmi *)scrypt_block(Bxor, blocksPerChunk - 1); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + } + + /* 2: for i = 0 to 2r - 1 do */ + for (i = 0; i < blocksPerChunk; i++, half ^= r) { + /* 3: X = H(X ^ B_i) */ + xmmp = (xmmi *)scrypt_block(Bin, i); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + + if (Bxor) { + xmmp = (xmmi *)scrypt_block(Bxor, i); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + } + + t0 = x0; + t1 = x1; + t2 = x2; + t3 = x3; + + for (rounds = 8; rounds; rounds -= 2) { + x0 = _mm_add_epi32(x0, x1); + x3 = _mm_xor_si128(x3, x0); + x4 = x3; + x3 = _mm_shufflehi_epi16(_mm_shufflelo_epi16(x3, 0xb1), 0xb1); + x2 = _mm_add_epi32(x2, x3); + x1 = _mm_xor_si128(x1, x2); + x4 = x1; + x1 = _mm_or_si128(_mm_slli_epi32(x1, 12), _mm_srli_epi32(x4, 20)); + x0 = _mm_add_epi32(x0, x1); + x3 = _mm_xor_si128(x3, x0); + x4 = x3; + x3 = _mm_or_si128(_mm_slli_epi32(x3, 8), _mm_srli_epi32(x4, 24)); + x0 = _mm_shuffle_epi32(x0, 0x93); + x2 = _mm_add_epi32(x2, x3); + x3 = _mm_shuffle_epi32(x3, 0x4e); + x1 = _mm_xor_si128(x1, x2); + x2 = _mm_shuffle_epi32(x2, 0x39); + x4 = x1; + x1 = _mm_or_si128(_mm_slli_epi32(x1, 7), _mm_srli_epi32(x4, 25)); + x0 = _mm_add_epi32(x0, x1); + x3 = _mm_xor_si128(x3, x0); + x4 = x3; + x3 = _mm_shufflehi_epi16(_mm_shufflelo_epi16(x3, 0xb1), 0xb1); + x2 = _mm_add_epi32(x2, x3); + x1 = _mm_xor_si128(x1, x2); + x4 = x1; + x1 = _mm_or_si128(_mm_slli_epi32(x1, 12), _mm_srli_epi32(x4, 20)); + x0 = _mm_add_epi32(x0, x1); + x3 = _mm_xor_si128(x3, x0); + x4 = x3; + x3 = _mm_or_si128(_mm_slli_epi32(x3, 8), _mm_srli_epi32(x4, 24)); + x0 = _mm_shuffle_epi32(x0, 0x39); + x2 = _mm_add_epi32(x2, x3); + x3 = _mm_shuffle_epi32(x3, 0x4e); + x1 = _mm_xor_si128(x1, x2); + x2 = _mm_shuffle_epi32(x2, 0x93); + x4 = x1; + x1 = _mm_or_si128(_mm_slli_epi32(x1, 7), _mm_srli_epi32(x4, 25)); + } + + x0 = _mm_add_epi32(x0, t0); + x1 = _mm_add_epi32(x1, t1); + x2 = _mm_add_epi32(x2, t2); + x3 = _mm_add_epi32(x3, t3); + + /* 4: Y_i = X */ + /* 6: B'[0..r-1] = Y_even */ + /* 6: B'[r..2r-1] = Y_odd */ + xmmp = (xmmi *)scrypt_block(Bout, (i / 2) + half); + xmmp[0] = x0; + xmmp[1] = x1; + xmmp[2] = x2; + xmmp[3] = x3; + } +} + +#endif + +#if defined(SCRYPT_CHACHA_SSE2) + #undef SCRYPT_MIX + #define SCRYPT_MIX "ChaCha/8-SSE2" + #undef SCRYPT_CHACHA_INCLUDED + #define SCRYPT_CHACHA_INCLUDED +#endif diff --git a/deps/scrypt-jane-master/code/scrypt-jane-mix_chacha-ssse3.h b/deps/scrypt-jane-master/code/scrypt-jane-mix_chacha-ssse3.h new file mode 100644 index 000000000..894312e60 --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-mix_chacha-ssse3.h @@ -0,0 +1,376 @@ +/* x86 */ +#if defined(X86ASM_SSSE3) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_CHACHA_INCLUDED)) && !defined(CPU_X86_FORCE_INTRINSICS) + +#define SCRYPT_CHACHA_SSSE3 + +asm_naked_fn_proto(void, scrypt_ChunkMix_ssse3)(uint32_t *Bout/*[chunkBytes]*/, uint32_t *Bin/*[chunkBytes]*/, uint32_t *Bxor/*[chunkBytes]*/, uint32_t r) +asm_naked_fn(scrypt_ChunkMix_ssse3) + a1(push ebx) + a1(push edi) + a1(push esi) + a1(push ebp) + a2(mov ebp,esp) + a2(mov edi,[ebp+20]) + a2(mov esi,[ebp+24]) + a2(mov eax,[ebp+28]) + a2(mov ebx,[ebp+32]) + a2(sub esp,64) + a2(and esp,~63) + a2(lea edx,[ebx*2]) + a2(shl edx,6) + a2(lea ecx,[edx-64]) + a2(and eax, eax) + a2(mov ebx, 0x01000302) + a2(movd xmm4, ebx) + a2(mov ebx, 0x05040706) + a2(movd xmm0, ebx) + a2(mov ebx, 0x09080b0a) + a2(movd xmm1, ebx) + a2(mov ebx, 0x0d0c0f0e) + a2(movd xmm2, ebx) + a2(mov ebx, 0x02010003) + a2(movd xmm5, ebx) + a2(mov ebx, 0x06050407) + a2(movd xmm3, ebx) + a2(mov ebx, 0x0a09080b) + a2(movd xmm6, ebx) + a2(mov ebx, 0x0e0d0c0f) + a2(movd xmm7, ebx) + a2(punpckldq xmm4, xmm0) + a2(punpckldq xmm5, xmm3) + a2(punpckldq xmm1, xmm2) + a2(punpckldq xmm6, xmm7) + a2(punpcklqdq xmm4, xmm1) + a2(punpcklqdq xmm5, xmm6) + a2(movdqa xmm0,[ecx+esi+0]) + a2(movdqa xmm1,[ecx+esi+16]) + a2(movdqa xmm2,[ecx+esi+32]) + a2(movdqa xmm3,[ecx+esi+48]) + aj(jz scrypt_ChunkMix_ssse3_no_xor1) + a2(pxor xmm0,[ecx+eax+0]) + a2(pxor xmm1,[ecx+eax+16]) + a2(pxor xmm2,[ecx+eax+32]) + a2(pxor xmm3,[ecx+eax+48]) + a1(scrypt_ChunkMix_ssse3_no_xor1:) + a2(xor ecx,ecx) + a2(xor ebx,ebx) + a1(scrypt_ChunkMix_ssse3_loop:) + a2(and eax, eax) + a2(pxor xmm0,[esi+ecx+0]) + a2(pxor xmm1,[esi+ecx+16]) + a2(pxor xmm2,[esi+ecx+32]) + a2(pxor xmm3,[esi+ecx+48]) + aj(jz scrypt_ChunkMix_ssse3_no_xor2) + a2(pxor xmm0,[eax+ecx+0]) + a2(pxor xmm1,[eax+ecx+16]) + a2(pxor xmm2,[eax+ecx+32]) + a2(pxor xmm3,[eax+ecx+48]) + a1(scrypt_ChunkMix_ssse3_no_xor2:) + a2(movdqa [esp+0],xmm0) + a2(movdqa [esp+16],xmm1) + a2(movdqa [esp+32],xmm2) + a2(movdqa xmm7,xmm3) + a2(mov eax,8) + a1(scrypt_chacha_ssse3_loop: ) + a2(paddd xmm0,xmm1) + a2(pxor xmm3,xmm0) + a2(pshufb xmm3,xmm4) + a2(paddd xmm2,xmm3) + a2(pxor xmm1,xmm2) + a2(movdqa xmm6,xmm1) + a2(pslld xmm1,12) + a2(psrld xmm6,20) + a2(pxor xmm1,xmm6) + a2(paddd xmm0,xmm1) + a2(pxor xmm3,xmm0) + a2(pshufb xmm3,xmm5) + a3(pshufd xmm0,xmm0,0x93) + a2(paddd xmm2,xmm3) + a3(pshufd xmm3,xmm3,0x4e) + a2(pxor xmm1,xmm2) + a3(pshufd xmm2,xmm2,0x39) + a2(movdqa xmm6,xmm1) + a2(pslld xmm1,7) + a2(psrld xmm6,25) + a2(pxor xmm1,xmm6) + a2(sub eax,2) + a2(paddd xmm0,xmm1) + a2(pxor xmm3,xmm0) + a2(pshufb xmm3,xmm4) + a2(paddd xmm2,xmm3) + a2(pxor xmm1,xmm2) + a2(movdqa xmm6,xmm1) + a2(pslld xmm1,12) + a2(psrld xmm6,20) + a2(pxor xmm1,xmm6) + a2(paddd xmm0,xmm1) + a2(pxor xmm3,xmm0) + a2(pshufb xmm3,xmm5) + a3(pshufd xmm0,xmm0,0x39) + a2(paddd xmm2,xmm3) + a3(pshufd xmm3,xmm3,0x4e) + a2(pxor xmm1,xmm2) + a3(pshufd xmm2,xmm2,0x93) + a2(movdqa xmm6,xmm1) + a2(pslld xmm1,7) + a2(psrld xmm6,25) + a2(pxor xmm1,xmm6) + aj(ja scrypt_chacha_ssse3_loop) + a2(paddd xmm0,[esp+0]) + a2(paddd xmm1,[esp+16]) + a2(paddd xmm2,[esp+32]) + a2(paddd xmm3,xmm7) + a2(lea eax,[ebx+ecx]) + a2(xor ebx,edx) + a2(and eax,~0x7f) + a2(add ecx,64) + a2(shr eax,1) + a2(add eax, edi) + a2(cmp ecx,edx) + a2(movdqa [eax+0],xmm0) + a2(movdqa [eax+16],xmm1) + a2(movdqa [eax+32],xmm2) + a2(movdqa [eax+48],xmm3) + a2(mov eax,[ebp+28]) + aj(jne scrypt_ChunkMix_ssse3_loop) + a2(mov esp,ebp) + a1(pop ebp) + a1(pop esi) + a1(pop edi) + a1(pop ebx) + aret(16) +asm_naked_fn_end(scrypt_ChunkMix_ssse3) + +#endif + + + +/* x64 */ +#if defined(X86_64ASM_SSSE3) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_CHACHA_INCLUDED)) && !defined(CPU_X86_FORCE_INTRINSICS) + +#define SCRYPT_CHACHA_SSSE3 + +asm_naked_fn_proto(void, scrypt_ChunkMix_ssse3)(uint32_t *Bout/*[chunkBytes]*/, uint32_t *Bin/*[chunkBytes]*/, uint32_t *Bxor/*[chunkBytes]*/, uint32_t r) +asm_naked_fn(scrypt_ChunkMix_ssse3) + a2(lea rcx,[ecx*2]) /* zero extend uint32_t by using ecx, win64 can leave garbage in the top half */ + a2(shl rcx,6) + a2(lea r9,[rcx-64]) + a2(lea rax,[rsi+r9]) + a2(lea r9,[rdx+r9]) + a2(and rdx, rdx) + a2(movdqa xmm0,[rax+0]) + a2(movdqa xmm1,[rax+16]) + a2(movdqa xmm2,[rax+32]) + a2(movdqa xmm3,[rax+48]) + a2(mov r8, 0x0504070601000302) + a2(mov rax, 0x0d0c0f0e09080b0a) + a2(movd xmm4, r8) + a2(movd xmm6, rax) + a2(mov r8, 0x0605040702010003) + a2(mov rax, 0x0e0d0c0f0a09080b) + a2(movd xmm5, r8) + a2(movd xmm7, rax) + a2(punpcklqdq xmm4, xmm6) + a2(punpcklqdq xmm5, xmm7) + aj(jz scrypt_ChunkMix_ssse3_no_xor1) + a2(pxor xmm0,[r9+0]) + a2(pxor xmm1,[r9+16]) + a2(pxor xmm2,[r9+32]) + a2(pxor xmm3,[r9+48]) + a1(scrypt_ChunkMix_ssse3_no_xor1:) + a2(xor r8,r8) + a2(xor r9,r9) + a1(scrypt_ChunkMix_ssse3_loop:) + a2(and rdx, rdx) + a2(pxor xmm0,[rsi+r9+0]) + a2(pxor xmm1,[rsi+r9+16]) + a2(pxor xmm2,[rsi+r9+32]) + a2(pxor xmm3,[rsi+r9+48]) + aj(jz scrypt_ChunkMix_ssse3_no_xor2) + a2(pxor xmm0,[rdx+r9+0]) + a2(pxor xmm1,[rdx+r9+16]) + a2(pxor xmm2,[rdx+r9+32]) + a2(pxor xmm3,[rdx+r9+48]) + a1(scrypt_ChunkMix_ssse3_no_xor2:) + a2(movdqa xmm8,xmm0) + a2(movdqa xmm9,xmm1) + a2(movdqa xmm10,xmm2) + a2(movdqa xmm11,xmm3) + a2(mov rax,8) + a1(scrypt_chacha_ssse3_loop: ) + a2(paddd xmm0,xmm1) + a2(pxor xmm3,xmm0) + a2(pshufb xmm3,xmm4) + a2(paddd xmm2,xmm3) + a2(pxor xmm1,xmm2) + a2(movdqa xmm12,xmm1) + a2(pslld xmm1,12) + a2(psrld xmm12,20) + a2(pxor xmm1,xmm12) + a2(paddd xmm0,xmm1) + a2(pxor xmm3,xmm0) + a2(pshufb xmm3,xmm5) + a3(pshufd xmm0,xmm0,0x93) + a2(paddd xmm2,xmm3) + a3(pshufd xmm3,xmm3,0x4e) + a2(pxor xmm1,xmm2) + a3(pshufd xmm2,xmm2,0x39) + a2(movdqa xmm12,xmm1) + a2(pslld xmm1,7) + a2(psrld xmm12,25) + a2(pxor xmm1,xmm12) + a2(sub rax,2) + a2(paddd xmm0,xmm1) + a2(pxor xmm3,xmm0) + a2(pshufb xmm3,xmm4) + a2(paddd xmm2,xmm3) + a2(pxor xmm1,xmm2) + a2(movdqa xmm12,xmm1) + a2(pslld xmm1,12) + a2(psrld xmm12,20) + a2(pxor xmm1,xmm12) + a2(paddd xmm0,xmm1) + a2(pxor xmm3,xmm0) + a2(pshufb xmm3,xmm5) + a3(pshufd xmm0,xmm0,0x39) + a2(paddd xmm2,xmm3) + a3(pshufd xmm3,xmm3,0x4e) + a2(pxor xmm1,xmm2) + a3(pshufd xmm2,xmm2,0x93) + a2(movdqa xmm12,xmm1) + a2(pslld xmm1,7) + a2(psrld xmm12,25) + a2(pxor xmm1,xmm12) + aj(ja scrypt_chacha_ssse3_loop) + a2(paddd xmm0,xmm8) + a2(paddd xmm1,xmm9) + a2(paddd xmm2,xmm10) + a2(paddd xmm3,xmm11) + a2(lea rax,[r8+r9]) + a2(xor r8,rcx) + a2(and rax,~0x7f) + a2(add r9,64) + a2(shr rax,1) + a2(add rax, rdi) + a2(cmp r9,rcx) + a2(movdqa [rax+0],xmm0) + a2(movdqa [rax+16],xmm1) + a2(movdqa [rax+32],xmm2) + a2(movdqa [rax+48],xmm3) + aj(jne scrypt_ChunkMix_ssse3_loop) + a1(ret) +asm_naked_fn_end(scrypt_ChunkMix_ssse3) + +#endif + + +/* intrinsic */ +#if defined(X86_INTRINSIC_SSSE3) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_CHACHA_INCLUDED)) + +#define SCRYPT_CHACHA_SSSE3 + +static void NOINLINE asm_calling_convention +scrypt_ChunkMix_ssse3(uint32_t *Bout/*[chunkBytes]*/, uint32_t *Bin/*[chunkBytes]*/, uint32_t *Bxor/*[chunkBytes]*/, uint32_t r) { + uint32_t i, blocksPerChunk = r * 2, half = 0; + xmmi *xmmp,x0,x1,x2,x3,x6,t0,t1,t2,t3; + const xmmi x4 = *(xmmi *)&ssse3_rotl16_32bit, x5 = *(xmmi *)&ssse3_rotl8_32bit; + size_t rounds; + + /* 1: X = B_{2r - 1} */ + xmmp = (xmmi *)scrypt_block(Bin, blocksPerChunk - 1); + x0 = xmmp[0]; + x1 = xmmp[1]; + x2 = xmmp[2]; + x3 = xmmp[3]; + + if (Bxor) { + xmmp = (xmmi *)scrypt_block(Bxor, blocksPerChunk - 1); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + } + + /* 2: for i = 0 to 2r - 1 do */ + for (i = 0; i < blocksPerChunk; i++, half ^= r) { + /* 3: X = H(X ^ B_i) */ + xmmp = (xmmi *)scrypt_block(Bin, i); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + + if (Bxor) { + xmmp = (xmmi *)scrypt_block(Bxor, i); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + } + + t0 = x0; + t1 = x1; + t2 = x2; + t3 = x3; + + for (rounds = 8; rounds; rounds -= 2) { + x0 = _mm_add_epi32(x0, x1); + x3 = _mm_xor_si128(x3, x0); + x3 = _mm_shuffle_epi8(x3, x4); + x2 = _mm_add_epi32(x2, x3); + x1 = _mm_xor_si128(x1, x2); + x6 = x1; + x1 = _mm_or_si128(_mm_slli_epi32(x1, 12), _mm_srli_epi32(x6, 20)); + x0 = _mm_add_epi32(x0, x1); + x3 = _mm_xor_si128(x3, x0); + x3 = _mm_shuffle_epi8(x3, x5); + x0 = _mm_shuffle_epi32(x0, 0x93); + x2 = _mm_add_epi32(x2, x3); + x3 = _mm_shuffle_epi32(x3, 0x4e); + x1 = _mm_xor_si128(x1, x2); + x2 = _mm_shuffle_epi32(x2, 0x39); + x6 = x1; + x1 = _mm_or_si128(_mm_slli_epi32(x1, 7), _mm_srli_epi32(x6, 25)); + x0 = _mm_add_epi32(x0, x1); + x3 = _mm_xor_si128(x3, x0); + x3 = _mm_shuffle_epi8(x3, x4); + x2 = _mm_add_epi32(x2, x3); + x1 = _mm_xor_si128(x1, x2); + x6 = x1; + x1 = _mm_or_si128(_mm_slli_epi32(x1, 12), _mm_srli_epi32(x6, 20)); + x0 = _mm_add_epi32(x0, x1); + x3 = _mm_xor_si128(x3, x0); + x3 = _mm_shuffle_epi8(x3, x5); + x0 = _mm_shuffle_epi32(x0, 0x39); + x2 = _mm_add_epi32(x2, x3); + x3 = _mm_shuffle_epi32(x3, 0x4e); + x1 = _mm_xor_si128(x1, x2); + x2 = _mm_shuffle_epi32(x2, 0x93); + x6 = x1; + x1 = _mm_or_si128(_mm_slli_epi32(x1, 7), _mm_srli_epi32(x6, 25)); + } + + x0 = _mm_add_epi32(x0, t0); + x1 = _mm_add_epi32(x1, t1); + x2 = _mm_add_epi32(x2, t2); + x3 = _mm_add_epi32(x3, t3); + + /* 4: Y_i = X */ + /* 6: B'[0..r-1] = Y_even */ + /* 6: B'[r..2r-1] = Y_odd */ + xmmp = (xmmi *)scrypt_block(Bout, (i / 2) + half); + xmmp[0] = x0; + xmmp[1] = x1; + xmmp[2] = x2; + xmmp[3] = x3; + } +} + +#endif + +#if defined(SCRYPT_CHACHA_SSSE3) + #undef SCRYPT_MIX + #define SCRYPT_MIX "ChaCha/8-SSSE3" + #undef SCRYPT_CHACHA_INCLUDED + #define SCRYPT_CHACHA_INCLUDED +#endif diff --git a/deps/scrypt-jane-master/code/scrypt-jane-mix_chacha-xop.h b/deps/scrypt-jane-master/code/scrypt-jane-mix_chacha-xop.h new file mode 100644 index 000000000..4c25d887e --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-mix_chacha-xop.h @@ -0,0 +1,315 @@ +/* x86 */ +#if defined(X86ASM_XOP) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_CHACHA_INCLUDED)) && !defined(CPU_X86_FORCE_INTRINSICS) + +#define SCRYPT_CHACHA_XOP + +asm_naked_fn_proto(void, scrypt_ChunkMix_xop)(uint32_t *Bout/*[chunkBytes]*/, uint32_t *Bin/*[chunkBytes]*/, uint32_t *Bxor/*[chunkBytes]*/, uint32_t r) +asm_naked_fn(scrypt_ChunkMix_xop) + a1(push ebx) + a1(push edi) + a1(push esi) + a1(push ebp) + a2(mov ebp,esp) + a2(mov edi,[ebp+20]) + a2(mov esi,[ebp+24]) + a2(mov eax,[ebp+28]) + a2(mov ebx,[ebp+32]) + a2(sub esp,64) + a2(and esp,~63) + a2(lea edx,[ebx*2]) + a2(shl edx,6) + a2(lea ecx,[edx-64]) + a2(and eax, eax) + a2(vmovdqa xmm0,[ecx+esi+0]) + a2(vmovdqa xmm1,[ecx+esi+16]) + a2(vmovdqa xmm2,[ecx+esi+32]) + a2(vmovdqa xmm3,[ecx+esi+48]) + aj(jz scrypt_ChunkMix_xop_no_xor1) + a3(vpxor xmm0,xmm0,[ecx+eax+0]) + a3(vpxor xmm1,xmm1,[ecx+eax+16]) + a3(vpxor xmm2,xmm2,[ecx+eax+32]) + a3(vpxor xmm3,xmm3,[ecx+eax+48]) + a1(scrypt_ChunkMix_xop_no_xor1:) + a2(xor ecx,ecx) + a2(xor ebx,ebx) + a1(scrypt_ChunkMix_xop_loop:) + a2(and eax, eax) + a3(vpxor xmm0,xmm0,[esi+ecx+0]) + a3(vpxor xmm1,xmm1,[esi+ecx+16]) + a3(vpxor xmm2,xmm2,[esi+ecx+32]) + a3(vpxor xmm3,xmm3,[esi+ecx+48]) + aj(jz scrypt_ChunkMix_xop_no_xor2) + a3(vpxor xmm0,xmm0,[eax+ecx+0]) + a3(vpxor xmm1,xmm1,[eax+ecx+16]) + a3(vpxor xmm2,xmm2,[eax+ecx+32]) + a3(vpxor xmm3,xmm3,[eax+ecx+48]) + a1(scrypt_ChunkMix_xop_no_xor2:) + a2(vmovdqa xmm4,xmm0) + a2(vmovdqa xmm5,xmm1) + a2(vmovdqa xmm6,xmm2) + a2(vmovdqa xmm7,xmm3) + a2(mov eax,8) + a1(scrypt_chacha_xop_loop: ) + a3(vpaddd xmm0,xmm0,xmm1) + a3(vpxor xmm3,xmm3,xmm0) + a3(vprotd xmm3,xmm3,16) + a3(vpaddd xmm2,xmm2,xmm3) + a3(vpxor xmm1,xmm1,xmm2) + a3(vprotd xmm1,xmm1,12) + a3(vpaddd xmm0,xmm0,xmm1) + a3(vpxor xmm3,xmm3,xmm0) + a3(vprotd xmm3,xmm3,8) + a3(vpaddd xmm2,xmm2,xmm3) + a3(vpshufd xmm0,xmm0,0x93) + a3(vpxor xmm1,xmm1,xmm2) + a3(vprotd xmm1,xmm1,7) + a3(vpshufd xmm3,xmm3,0x4e) + a3(vpaddd xmm0,xmm0,xmm1) + a3(vpshufd xmm2,xmm2,0x39) + a3(vpxor xmm3,xmm3,xmm0) + a3(vprotd xmm3,xmm3,16) + a3(vpaddd xmm2,xmm2,xmm3) + a3(vpxor xmm1,xmm1,xmm2) + a3(vprotd xmm1,xmm1,12) + a3(vpaddd xmm0,xmm0,xmm1) + a3(vpxor xmm3,xmm3,xmm0) + a3(vprotd xmm3,xmm3,8) + a3(vpaddd xmm2,xmm2,xmm3) + a3(vpxor xmm1,xmm1,xmm2) + a3(vpshufd xmm0,xmm0,0x39) + a3(vprotd xmm1,xmm1,7) + a3(pshufd xmm3,xmm3,0x4e) + a3(pshufd xmm2,xmm2,0x93) + a2(sub eax,2) + aj(ja scrypt_chacha_xop_loop) + a3(vpaddd xmm0,xmm0,xmm4) + a3(vpaddd xmm1,xmm1,xmm5) + a3(vpaddd xmm2,xmm2,xmm6) + a3(vpaddd xmm3,xmm3,xmm7) + a2(lea eax,[ebx+ecx]) + a2(xor ebx,edx) + a2(and eax,~0x7f) + a2(add ecx,64) + a2(shr eax,1) + a2(add eax, edi) + a2(cmp ecx,edx) + a2(vmovdqa [eax+0],xmm0) + a2(vmovdqa [eax+16],xmm1) + a2(vmovdqa [eax+32],xmm2) + a2(vmovdqa [eax+48],xmm3) + a2(mov eax,[ebp+28]) + aj(jne scrypt_ChunkMix_xop_loop) + a2(mov esp,ebp) + a1(pop ebp) + a1(pop esi) + a1(pop edi) + a1(pop ebx) + aret(16) +asm_naked_fn_end(scrypt_ChunkMix_xop) + +#endif + + + +/* x64 */ +#if defined(X86_64ASM_XOP) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_CHACHA_INCLUDED)) && !defined(CPU_X86_FORCE_INTRINSICS) + +#define SCRYPT_CHACHA_XOP + +asm_naked_fn_proto(void, scrypt_ChunkMix_xop)(uint32_t *Bout/*[chunkBytes]*/, uint32_t *Bin/*[chunkBytes]*/, uint32_t *Bxor/*[chunkBytes]*/, uint32_t r) +asm_naked_fn(scrypt_ChunkMix_xop) + a2(lea rcx,[ecx*2]) /* zero extend uint32_t by using ecx, win64 can leave garbage in the top half */ + a2(shl rcx,6) + a2(lea r9,[rcx-64]) + a2(lea rax,[rsi+r9]) + a2(lea r9,[rdx+r9]) + a2(and rdx, rdx) + a2(vmovdqa xmm0,[rax+0]) + a2(vmovdqa xmm1,[rax+16]) + a2(vmovdqa xmm2,[rax+32]) + a2(vmovdqa xmm3,[rax+48]) + aj(jz scrypt_ChunkMix_xop_no_xor1) + a3(vpxor xmm0,xmm0,[r9+0]) + a3(vpxor xmm1,xmm1,[r9+16]) + a3(vpxor xmm2,xmm2,[r9+32]) + a3(vpxor xmm3,xmm3,[r9+48]) + a1(scrypt_ChunkMix_xop_no_xor1:) + a2(xor r8,r8) + a2(xor r9,r9) + a1(scrypt_ChunkMix_xop_loop:) + a2(and rdx, rdx) + a3(vpxor xmm0,xmm0,[rsi+r9+0]) + a3(vpxor xmm1,xmm1,[rsi+r9+16]) + a3(vpxor xmm2,xmm2,[rsi+r9+32]) + a3(vpxor xmm3,xmm3,[rsi+r9+48]) + aj(jz scrypt_ChunkMix_xop_no_xor2) + a3(vpxor xmm0,xmm0,[rdx+r9+0]) + a3(vpxor xmm1,xmm1,[rdx+r9+16]) + a3(vpxor xmm2,xmm2,[rdx+r9+32]) + a3(vpxor xmm3,xmm3,[rdx+r9+48]) + a1(scrypt_ChunkMix_xop_no_xor2:) + a2(vmovdqa xmm4,xmm0) + a2(vmovdqa xmm5,xmm1) + a2(vmovdqa xmm6,xmm2) + a2(vmovdqa xmm7,xmm3) + a2(mov rax,8) + a1(scrypt_chacha_xop_loop: ) + a3(vpaddd xmm0,xmm0,xmm1) + a3(vpxor xmm3,xmm3,xmm0) + a3(vprotd xmm3,xmm3,16) + a3(vpaddd xmm2,xmm2,xmm3) + a3(vpxor xmm1,xmm1,xmm2) + a3(vprotd xmm1,xmm1,12) + a3(vpaddd xmm0,xmm0,xmm1) + a3(vpxor xmm3,xmm3,xmm0) + a3(vprotd xmm3,xmm3,8) + a3(vpaddd xmm2,xmm2,xmm3) + a3(vpshufd xmm0,xmm0,0x93) + a3(vpxor xmm1,xmm1,xmm2) + a3(vprotd xmm1,xmm1,7) + a3(vpshufd xmm3,xmm3,0x4e) + a3(vpaddd xmm0,xmm0,xmm1) + a3(vpshufd xmm2,xmm2,0x39) + a3(vpxor xmm3,xmm3,xmm0) + a3(vprotd xmm3,xmm3,16) + a3(vpaddd xmm2,xmm2,xmm3) + a3(vpxor xmm1,xmm1,xmm2) + a3(vprotd xmm1,xmm1,12) + a3(vpaddd xmm0,xmm0,xmm1) + a3(vpxor xmm3,xmm3,xmm0) + a3(vprotd xmm3,xmm3,8) + a3(vpaddd xmm2,xmm2,xmm3) + a3(vpxor xmm1,xmm1,xmm2) + a3(vpshufd xmm0,xmm0,0x39) + a3(vprotd xmm1,xmm1,7) + a3(pshufd xmm3,xmm3,0x4e) + a3(pshufd xmm2,xmm2,0x93) + a2(sub rax,2) + aj(ja scrypt_chacha_xop_loop) + a3(vpaddd xmm0,xmm0,xmm4) + a3(vpaddd xmm1,xmm1,xmm5) + a3(vpaddd xmm2,xmm2,xmm6) + a3(vpaddd xmm3,xmm3,xmm7) + a2(lea rax,[r8+r9]) + a2(xor r8,rcx) + a2(and rax,~0x7f) + a2(add r9,64) + a2(shr rax,1) + a2(add rax, rdi) + a2(cmp r9,rcx) + a2(vmovdqa [rax+0],xmm0) + a2(vmovdqa [rax+16],xmm1) + a2(vmovdqa [rax+32],xmm2) + a2(vmovdqa [rax+48],xmm3) + aj(jne scrypt_ChunkMix_xop_loop) + a1(ret) +asm_naked_fn_end(scrypt_ChunkMix_xop) + +#endif + + +/* intrinsic */ +#if defined(X86_INTRINSIC_XOP) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_CHACHA_INCLUDED)) + +#define SCRYPT_CHACHA_XOP + +static void asm_calling_convention NOINLINE +scrypt_ChunkMix_xop(uint32_t *Bout/*[chunkBytes]*/, uint32_t *Bin/*[chunkBytes]*/, uint32_t *Bxor/*[chunkBytes]*/, uint32_t r) { + uint32_t i, blocksPerChunk = r * 2, half = 0; + xmmi *xmmp,x0,x1,x2,x3,x6,t0,t1,t2,t3; + size_t rounds; + + /* 1: X = B_{2r - 1} */ + xmmp = (xmmi *)scrypt_block(Bin, blocksPerChunk - 1); + x0 = xmmp[0]; + x1 = xmmp[1]; + x2 = xmmp[2]; + x3 = xmmp[3]; + + if (Bxor) { + xmmp = (xmmi *)scrypt_block(Bxor, blocksPerChunk - 1); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + } + + /* 2: for i = 0 to 2r - 1 do */ + for (i = 0; i < blocksPerChunk; i++, half ^= r) { + /* 3: X = H(X ^ B_i) */ + xmmp = (xmmi *)scrypt_block(Bin, i); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + + if (Bxor) { + xmmp = (xmmi *)scrypt_block(Bxor, i); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + } + + t0 = x0; + t1 = x1; + t2 = x2; + t3 = x3; + + for (rounds = 8; rounds; rounds -= 2) { + x0 = _mm_add_epi32(x0, x1); + x3 = _mm_xor_si128(x3, x0); + x3 = _mm_roti_epi32(x3, 16); + x2 = _mm_add_epi32(x2, x3); + x1 = _mm_xor_si128(x1, x2); + x1 = _mm_roti_epi32(x1, 12); + x0 = _mm_add_epi32(x0, x1); + x3 = _mm_xor_si128(x3, x0); + x3 = _mm_roti_epi32(x3, 8); + x2 = _mm_add_epi32(x2, x3); + x0 = _mm_shuffle_epi32(x0, 0x93); + x1 = _mm_xor_si128(x1, x2); + x1 = _mm_roti_epi32(x1, 7); + x3 = _mm_shuffle_epi32(x3, 0x4e); + x0 = _mm_add_epi32(x0, x1); + x2 = _mm_shuffle_epi32(x2, 0x39); + x3 = _mm_xor_si128(x3, x0); + x3 = _mm_roti_epi32(x3, 16); + x2 = _mm_add_epi32(x2, x3); + x1 = _mm_xor_si128(x1, x2); + x1 = _mm_roti_epi32(x1, 12); + x0 = _mm_add_epi32(x0, x1); + x3 = _mm_xor_si128(x3, x0); + x3 = _mm_roti_epi32(x3, 8); + x2 = _mm_add_epi32(x2, x3); + x1 = _mm_xor_si128(x1, x2); + x0 = _mm_shuffle_epi32(x0, 0x39); + x1 = _mm_roti_epi32(x1, 7); + x3 = _mm_shuffle_epi32(x3, 0x4e); + x2 = _mm_shuffle_epi32(x2, 0x93); + } + + x0 = _mm_add_epi32(x0, t0); + x1 = _mm_add_epi32(x1, t1); + x2 = _mm_add_epi32(x2, t2); + x3 = _mm_add_epi32(x3, t3); + + /* 4: Y_i = X */ + /* 6: B'[0..r-1] = Y_even */ + /* 6: B'[r..2r-1] = Y_odd */ + xmmp = (xmmi *)scrypt_block(Bout, (i / 2) + half); + xmmp[0] = x0; + xmmp[1] = x1; + xmmp[2] = x2; + xmmp[3] = x3; + } +} + +#endif + +#if defined(SCRYPT_CHACHA_XOP) + #undef SCRYPT_MIX + #define SCRYPT_MIX "ChaCha/8-XOP" + #undef SCRYPT_CHACHA_INCLUDED + #define SCRYPT_CHACHA_INCLUDED +#endif diff --git a/deps/scrypt-jane-master/code/scrypt-jane-mix_chacha.h b/deps/scrypt-jane-master/code/scrypt-jane-mix_chacha.h new file mode 100644 index 000000000..85ee9c1ce --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-mix_chacha.h @@ -0,0 +1,69 @@ +#if !defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_CHACHA_INCLUDED) + +#undef SCRYPT_MIX +#define SCRYPT_MIX "ChaCha20/8 Ref" + +#undef SCRYPT_CHACHA_INCLUDED +#define SCRYPT_CHACHA_INCLUDED +#define SCRYPT_CHACHA_BASIC + +static void +chacha_core_basic(uint32_t state[16]) { + size_t rounds = 8; + uint32_t x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,t; + + x0 = state[0]; + x1 = state[1]; + x2 = state[2]; + x3 = state[3]; + x4 = state[4]; + x5 = state[5]; + x6 = state[6]; + x7 = state[7]; + x8 = state[8]; + x9 = state[9]; + x10 = state[10]; + x11 = state[11]; + x12 = state[12]; + x13 = state[13]; + x14 = state[14]; + x15 = state[15]; + + #define quarter(a,b,c,d) \ + a += b; t = d^a; d = ROTL32(t,16); \ + c += d; t = b^c; b = ROTL32(t,12); \ + a += b; t = d^a; d = ROTL32(t, 8); \ + c += d; t = b^c; b = ROTL32(t, 7); + + for (; rounds; rounds -= 2) { + quarter( x0, x4, x8,x12) + quarter( x1, x5, x9,x13) + quarter( x2, x6,x10,x14) + quarter( x3, x7,x11,x15) + quarter( x0, x5,x10,x15) + quarter( x1, x6,x11,x12) + quarter( x2, x7, x8,x13) + quarter( x3, x4, x9,x14) + } + + state[0] += x0; + state[1] += x1; + state[2] += x2; + state[3] += x3; + state[4] += x4; + state[5] += x5; + state[6] += x6; + state[7] += x7; + state[8] += x8; + state[9] += x9; + state[10] += x10; + state[11] += x11; + state[12] += x12; + state[13] += x13; + state[14] += x14; + state[15] += x15; + + #undef quarter +} + +#endif \ No newline at end of file diff --git a/deps/scrypt-jane-master/code/scrypt-jane-mix_salsa-avx.h b/deps/scrypt-jane-master/code/scrypt-jane-mix_salsa-avx.h new file mode 100644 index 000000000..259fae468 --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-mix_salsa-avx.h @@ -0,0 +1,381 @@ +/* x86 */ +#if defined(X86ASM_AVX) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_SALSA_INCLUDED)) && !defined(CPU_X86_FORCE_INTRINSICS) + +#define SCRYPT_SALSA_AVX + +asm_naked_fn_proto(void, scrypt_ChunkMix_avx)(uint32_t *Bout/*[chunkBytes]*/, uint32_t *Bin/*[chunkBytes]*/, uint32_t *Bxor/*[chunkBytes]*/, uint32_t r) +asm_naked_fn(scrypt_ChunkMix_avx) + a1(push ebx) + a1(push edi) + a1(push esi) + a1(push ebp) + a2(mov ebp,esp) + a2(mov edi,[ebp+20]) + a2(mov esi,[ebp+24]) + a2(mov eax,[ebp+28]) + a2(mov ebx,[ebp+32]) + a2(sub esp,32) + a2(and esp,~63) + a2(lea edx,[ebx*2]) + a2(shl edx,6) + a2(lea ecx,[edx-64]) + a2(and eax, eax) + a2(movdqa xmm0,[ecx+esi+0]) + a2(movdqa xmm1,[ecx+esi+16]) + a2(movdqa xmm2,[ecx+esi+32]) + a2(movdqa xmm3,[ecx+esi+48]) + aj(jz scrypt_ChunkMix_avx_no_xor1) + a3(vpxor xmm0,xmm0,[ecx+eax+0]) + a3(vpxor xmm1,xmm1,[ecx+eax+16]) + a3(vpxor xmm2,xmm2,[ecx+eax+32]) + a3(vpxor xmm3,xmm3,[ecx+eax+48]) + a1(scrypt_ChunkMix_avx_no_xor1:) + a2(xor ecx,ecx) + a2(xor ebx,ebx) + a1(scrypt_ChunkMix_avx_loop:) + a2(and eax, eax) + a3(vpxor xmm0,xmm0,[esi+ecx+0]) + a3(vpxor xmm1,xmm1,[esi+ecx+16]) + a3(vpxor xmm2,xmm2,[esi+ecx+32]) + a3(vpxor xmm3,xmm3,[esi+ecx+48]) + aj(jz scrypt_ChunkMix_avx_no_xor2) + a3(vpxor xmm0,xmm0,[eax+ecx+0]) + a3(vpxor xmm1,xmm1,[eax+ecx+16]) + a3(vpxor xmm2,xmm2,[eax+ecx+32]) + a3(vpxor xmm3,xmm3,[eax+ecx+48]) + a1(scrypt_ChunkMix_avx_no_xor2:) + a2(vmovdqa [esp+0],xmm0) + a2(vmovdqa [esp+16],xmm1) + a2(vmovdqa xmm6,xmm2) + a2(vmovdqa xmm7,xmm3) + a2(mov eax,8) + a1(scrypt_salsa_avx_loop: ) + a3(vpaddd xmm4, xmm1, xmm0) + a3(vpsrld xmm5, xmm4, 25) + a3(vpslld xmm4, xmm4, 7) + a3(vpxor xmm3, xmm3, xmm5) + a3(vpxor xmm3, xmm3, xmm4) + a3(vpaddd xmm4, xmm0, xmm3) + a3(vpsrld xmm5, xmm4, 23) + a3(vpslld xmm4, xmm4, 9) + a3(vpxor xmm2, xmm2, xmm5) + a3(vpxor xmm2, xmm2, xmm4) + a3(vpaddd xmm4, xmm3, xmm2) + a3(vpsrld xmm5, xmm4, 19) + a3(vpslld xmm4, xmm4, 13) + a3(vpxor xmm1, xmm1, xmm5) + a3(vpshufd xmm3, xmm3, 0x93) + a3(vpxor xmm1, xmm1, xmm4) + a3(vpaddd xmm4, xmm2, xmm1) + a3(vpsrld xmm5, xmm4, 14) + a3(vpslld xmm4, xmm4, 18) + a3(vpxor xmm0, xmm0, xmm5) + a3(vpshufd xmm2, xmm2, 0x4e) + a3(vpxor xmm0, xmm0, xmm4) + a3(vpaddd xmm4, xmm3, xmm0) + a3(vpshufd xmm1, xmm1, 0x39) + a3(vpsrld xmm5, xmm4, 25) + a3(vpslld xmm4, xmm4, 7) + a3(vpxor xmm1, xmm1, xmm5) + a3(vpxor xmm1, xmm1, xmm4) + a3(vpaddd xmm4, xmm0, xmm1) + a3(vpsrld xmm5, xmm4, 23) + a3(vpslld xmm4, xmm4, 9) + a3(vpxor xmm2, xmm2, xmm5) + a3(vpxor xmm2, xmm2, xmm4) + a3(vpaddd xmm4, xmm1, xmm2) + a3(vpsrld xmm5, xmm4, 19) + a3(vpslld xmm4, xmm4, 13) + a3(vpxor xmm3, xmm3, xmm5) + a3(vpshufd xmm1, xmm1, 0x93) + a3(vpxor xmm3, xmm3, xmm4) + a3(vpaddd xmm4, xmm2, xmm3) + a3(vpsrld xmm5, xmm4, 14) + a3(vpslld xmm4, xmm4, 18) + a3(vpxor xmm0, xmm0, xmm5) + a3(vpshufd xmm2, xmm2, 0x4e) + a3(vpxor xmm0, xmm0, xmm4) + a3(vpshufd xmm3, xmm3, 0x39) + a2(sub eax, 2) + aj(ja scrypt_salsa_avx_loop) + a3(vpaddd xmm0,xmm0,[esp+0]) + a3(vpaddd xmm1,xmm1,[esp+16]) + a3(vpaddd xmm2,xmm2,xmm6) + a3(vpaddd xmm3,xmm3,xmm7) + a2(lea eax,[ebx+ecx]) + a2(xor ebx,edx) + a2(and eax,~0x7f) + a2(add ecx,64) + a2(shr eax,1) + a2(add eax, edi) + a2(cmp ecx,edx) + a2(vmovdqa [eax+0],xmm0) + a2(vmovdqa [eax+16],xmm1) + a2(vmovdqa [eax+32],xmm2) + a2(vmovdqa [eax+48],xmm3) + a2(mov eax,[ebp+28]) + aj(jne scrypt_ChunkMix_avx_loop) + a2(mov esp,ebp) + a1(pop ebp) + a1(pop esi) + a1(pop edi) + a1(pop ebx) + aret(16) +asm_naked_fn_end(scrypt_ChunkMix_avx) + +#endif + + + +/* x64 */ +#if defined(X86_64ASM_AVX) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_SALSA_INCLUDED)) && !defined(CPU_X86_FORCE_INTRINSICS) + +#define SCRYPT_SALSA_AVX + +asm_naked_fn_proto(void, scrypt_ChunkMix_avx)(uint32_t *Bout/*[chunkBytes]*/, uint32_t *Bin/*[chunkBytes]*/, uint32_t *Bxor/*[chunkBytes]*/, uint32_t r) +asm_naked_fn(scrypt_ChunkMix_avx) + a2(lea rcx,[ecx*2]) /* zero extend uint32_t by using ecx, win64 can leave garbage in the top half */ + a2(shl rcx,6) + a2(lea r9,[rcx-64]) + a2(lea rax,[rsi+r9]) + a2(lea r9,[rdx+r9]) + a2(and rdx, rdx) + a2(vmovdqa xmm0,[rax+0]) + a2(vmovdqa xmm1,[rax+16]) + a2(vmovdqa xmm2,[rax+32]) + a2(vmovdqa xmm3,[rax+48]) + aj(jz scrypt_ChunkMix_avx_no_xor1) + a3(vpxor xmm0,xmm0,[r9+0]) + a3(vpxor xmm1,xmm1,[r9+16]) + a3(vpxor xmm2,xmm2,[r9+32]) + a3(vpxor xmm3,xmm3,[r9+48]) + a1(scrypt_ChunkMix_avx_no_xor1:) + a2(xor r9,r9) + a2(xor r8,r8) + a1(scrypt_ChunkMix_avx_loop:) + a2(and rdx, rdx) + a3(vpxor xmm0,xmm0,[rsi+r9+0]) + a3(vpxor xmm1,xmm1,[rsi+r9+16]) + a3(vpxor xmm2,xmm2,[rsi+r9+32]) + a3(vpxor xmm3,xmm3,[rsi+r9+48]) + aj(jz scrypt_ChunkMix_avx_no_xor2) + a3(vpxor xmm0,xmm0,[rdx+r9+0]) + a3(vpxor xmm1,xmm1,[rdx+r9+16]) + a3(vpxor xmm2,xmm2,[rdx+r9+32]) + a3(vpxor xmm3,xmm3,[rdx+r9+48]) + a1(scrypt_ChunkMix_avx_no_xor2:) + a2(vmovdqa xmm8,xmm0) + a2(vmovdqa xmm9,xmm1) + a2(vmovdqa xmm10,xmm2) + a2(vmovdqa xmm11,xmm3) + a2(mov rax,8) + a1(scrypt_salsa_avx_loop: ) + a3(vpaddd xmm4, xmm1, xmm0) + a3(vpsrld xmm5, xmm4, 25) + a3(vpslld xmm4, xmm4, 7) + a3(vpxor xmm3, xmm3, xmm5) + a3(vpxor xmm3, xmm3, xmm4) + a3(vpaddd xmm4, xmm0, xmm3) + a3(vpsrld xmm5, xmm4, 23) + a3(vpslld xmm4, xmm4, 9) + a3(vpxor xmm2, xmm2, xmm5) + a3(vpxor xmm2, xmm2, xmm4) + a3(vpaddd xmm4, xmm3, xmm2) + a3(vpsrld xmm5, xmm4, 19) + a3(vpslld xmm4, xmm4, 13) + a3(vpxor xmm1, xmm1, xmm5) + a3(vpshufd xmm3, xmm3, 0x93) + a3(vpxor xmm1, xmm1, xmm4) + a3(vpaddd xmm4, xmm2, xmm1) + a3(vpsrld xmm5, xmm4, 14) + a3(vpslld xmm4, xmm4, 18) + a3(vpxor xmm0, xmm0, xmm5) + a3(vpshufd xmm2, xmm2, 0x4e) + a3(vpxor xmm0, xmm0, xmm4) + a3(vpaddd xmm4, xmm3, xmm0) + a3(vpshufd xmm1, xmm1, 0x39) + a3(vpsrld xmm5, xmm4, 25) + a3(vpslld xmm4, xmm4, 7) + a3(vpxor xmm1, xmm1, xmm5) + a3(vpxor xmm1, xmm1, xmm4) + a3(vpaddd xmm4, xmm0, xmm1) + a3(vpsrld xmm5, xmm4, 23) + a3(vpslld xmm4, xmm4, 9) + a3(vpxor xmm2, xmm2, xmm5) + a3(vpxor xmm2, xmm2, xmm4) + a3(vpaddd xmm4, xmm1, xmm2) + a3(vpsrld xmm5, xmm4, 19) + a3(vpslld xmm4, xmm4, 13) + a3(vpxor xmm3, xmm3, xmm5) + a3(vpshufd xmm1, xmm1, 0x93) + a3(vpxor xmm3, xmm3, xmm4) + a3(vpaddd xmm4, xmm2, xmm3) + a3(vpsrld xmm5, xmm4, 14) + a3(vpslld xmm4, xmm4, 18) + a3(vpxor xmm0, xmm0, xmm5) + a3(vpshufd xmm2, xmm2, 0x4e) + a3(vpxor xmm0, xmm0, xmm4) + a3(vpshufd xmm3, xmm3, 0x39) + a2(sub rax, 2) + aj(ja scrypt_salsa_avx_loop) + a3(vpaddd xmm0,xmm0,xmm8) + a3(vpaddd xmm1,xmm1,xmm9) + a3(vpaddd xmm2,xmm2,xmm10) + a3(vpaddd xmm3,xmm3,xmm11) + a2(lea rax,[r8+r9]) + a2(xor r8,rcx) + a2(and rax,~0x7f) + a2(add r9,64) + a2(shr rax,1) + a2(add rax, rdi) + a2(cmp r9,rcx) + a2(vmovdqa [rax+0],xmm0) + a2(vmovdqa [rax+16],xmm1) + a2(vmovdqa [rax+32],xmm2) + a2(vmovdqa [rax+48],xmm3) + aj(jne scrypt_ChunkMix_avx_loop) + a1(ret) +asm_naked_fn_end(scrypt_ChunkMix_avx) + +#endif + + +/* intrinsic */ +#if defined(X86_INTRINSIC_AVX) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_SALSA_INCLUDED)) + +#define SCRYPT_SALSA_AVX + +static void asm_calling_convention NOINLINE +scrypt_ChunkMix_avx(uint32_t *Bout/*[chunkBytes]*/, uint32_t *Bin/*[chunkBytes]*/, uint32_t *Bxor/*[chunkBytes]*/, uint32_t r) { + uint32_t i, blocksPerChunk = r * 2, half = 0; + xmmi *xmmp,x0,x1,x2,x3,x4,x5,t0,t1,t2,t3; + size_t rounds; + + /* 1: X = B_{2r - 1} */ + xmmp = (xmmi *)scrypt_block(Bin, blocksPerChunk - 1); + x0 = xmmp[0]; + x1 = xmmp[1]; + x2 = xmmp[2]; + x3 = xmmp[3]; + + if (Bxor) { + xmmp = (xmmi *)scrypt_block(Bxor, blocksPerChunk - 1); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + } + + /* 2: for i = 0 to 2r - 1 do */ + for (i = 0; i < blocksPerChunk; i++, half ^= r) { + /* 3: X = H(X ^ B_i) */ + xmmp = (xmmi *)scrypt_block(Bin, i); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + + if (Bxor) { + xmmp = (xmmi *)scrypt_block(Bxor, i); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + } + + t0 = x0; + t1 = x1; + t2 = x2; + t3 = x3; + + for (rounds = 8; rounds; rounds -= 2) { + x4 = x1; + x4 = _mm_add_epi32(x4, x0); + x5 = x4; + x4 = _mm_slli_epi32(x4, 7); + x5 = _mm_srli_epi32(x5, 25); + x3 = _mm_xor_si128(x3, x4); + x4 = x0; + x3 = _mm_xor_si128(x3, x5); + x4 = _mm_add_epi32(x4, x3); + x5 = x4; + x4 = _mm_slli_epi32(x4, 9); + x5 = _mm_srli_epi32(x5, 23); + x2 = _mm_xor_si128(x2, x4); + x4 = x3; + x2 = _mm_xor_si128(x2, x5); + x3 = _mm_shuffle_epi32(x3, 0x93); + x4 = _mm_add_epi32(x4, x2); + x5 = x4; + x4 = _mm_slli_epi32(x4, 13); + x5 = _mm_srli_epi32(x5, 19); + x1 = _mm_xor_si128(x1, x4); + x4 = x2; + x1 = _mm_xor_si128(x1, x5); + x2 = _mm_shuffle_epi32(x2, 0x4e); + x4 = _mm_add_epi32(x4, x1); + x5 = x4; + x4 = _mm_slli_epi32(x4, 18); + x5 = _mm_srli_epi32(x5, 14); + x0 = _mm_xor_si128(x0, x4); + x4 = x3; + x0 = _mm_xor_si128(x0, x5); + x1 = _mm_shuffle_epi32(x1, 0x39); + x4 = _mm_add_epi32(x4, x0); + x5 = x4; + x4 = _mm_slli_epi32(x4, 7); + x5 = _mm_srli_epi32(x5, 25); + x1 = _mm_xor_si128(x1, x4); + x4 = x0; + x1 = _mm_xor_si128(x1, x5); + x4 = _mm_add_epi32(x4, x1); + x5 = x4; + x4 = _mm_slli_epi32(x4, 9); + x5 = _mm_srli_epi32(x5, 23); + x2 = _mm_xor_si128(x2, x4); + x4 = x1; + x2 = _mm_xor_si128(x2, x5); + x1 = _mm_shuffle_epi32(x1, 0x93); + x4 = _mm_add_epi32(x4, x2); + x5 = x4; + x4 = _mm_slli_epi32(x4, 13); + x5 = _mm_srli_epi32(x5, 19); + x3 = _mm_xor_si128(x3, x4); + x4 = x2; + x3 = _mm_xor_si128(x3, x5); + x2 = _mm_shuffle_epi32(x2, 0x4e); + x4 = _mm_add_epi32(x4, x3); + x5 = x4; + x4 = _mm_slli_epi32(x4, 18); + x5 = _mm_srli_epi32(x5, 14); + x0 = _mm_xor_si128(x0, x4); + x3 = _mm_shuffle_epi32(x3, 0x39); + x0 = _mm_xor_si128(x0, x5); + } + + x0 = _mm_add_epi32(x0, t0); + x1 = _mm_add_epi32(x1, t1); + x2 = _mm_add_epi32(x2, t2); + x3 = _mm_add_epi32(x3, t3); + + /* 4: Y_i = X */ + /* 6: B'[0..r-1] = Y_even */ + /* 6: B'[r..2r-1] = Y_odd */ + xmmp = (xmmi *)scrypt_block(Bout, (i / 2) + half); + xmmp[0] = x0; + xmmp[1] = x1; + xmmp[2] = x2; + xmmp[3] = x3; + } +} + +#endif + +#if defined(SCRYPT_SALSA_AVX) + /* uses salsa_core_tangle_sse2 */ + + #undef SCRYPT_MIX + #define SCRYPT_MIX "Salsa/8-AVX" + #undef SCRYPT_SALSA_INCLUDED + #define SCRYPT_SALSA_INCLUDED +#endif diff --git a/deps/scrypt-jane-master/code/scrypt-jane-mix_salsa-sse2.h b/deps/scrypt-jane-master/code/scrypt-jane-mix_salsa-sse2.h new file mode 100644 index 000000000..d7ef969ca --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-mix_salsa-sse2.h @@ -0,0 +1,443 @@ +/* x86 */ +#if defined(X86ASM_SSE2) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_SALSA_INCLUDED)) && !defined(CPU_X86_FORCE_INTRINSICS) + +#define SCRYPT_SALSA_SSE2 + +asm_naked_fn_proto(void, scrypt_ChunkMix_sse2)(uint32_t *Bout/*[chunkBytes]*/, uint32_t *Bin/*[chunkBytes]*/, uint32_t *Bxor/*[chunkBytes]*/, uint32_t r) +asm_naked_fn(scrypt_ChunkMix_sse2) + a1(push ebx) + a1(push edi) + a1(push esi) + a1(push ebp) + a2(mov ebp,esp) + a2(mov edi,[ebp+20]) + a2(mov esi,[ebp+24]) + a2(mov eax,[ebp+28]) + a2(mov ebx,[ebp+32]) + a2(sub esp,32) + a2(and esp,~63) + a2(lea edx,[ebx*2]) + a2(shl edx,6) + a2(lea ecx,[edx-64]) + a2(and eax, eax) + a2(movdqa xmm0,[ecx+esi+0]) + a2(movdqa xmm1,[ecx+esi+16]) + a2(movdqa xmm2,[ecx+esi+32]) + a2(movdqa xmm3,[ecx+esi+48]) + aj(jz scrypt_ChunkMix_sse2_no_xor1) + a2(pxor xmm0,[ecx+eax+0]) + a2(pxor xmm1,[ecx+eax+16]) + a2(pxor xmm2,[ecx+eax+32]) + a2(pxor xmm3,[ecx+eax+48]) + a1(scrypt_ChunkMix_sse2_no_xor1:) + a2(xor ecx,ecx) + a2(xor ebx,ebx) + a1(scrypt_ChunkMix_sse2_loop:) + a2(and eax, eax) + a2(pxor xmm0,[esi+ecx+0]) + a2(pxor xmm1,[esi+ecx+16]) + a2(pxor xmm2,[esi+ecx+32]) + a2(pxor xmm3,[esi+ecx+48]) + aj(jz scrypt_ChunkMix_sse2_no_xor2) + a2(pxor xmm0,[eax+ecx+0]) + a2(pxor xmm1,[eax+ecx+16]) + a2(pxor xmm2,[eax+ecx+32]) + a2(pxor xmm3,[eax+ecx+48]) + a1(scrypt_ChunkMix_sse2_no_xor2:) + a2(movdqa [esp+0],xmm0) + a2(movdqa [esp+16],xmm1) + a2(movdqa xmm6,xmm2) + a2(movdqa xmm7,xmm3) + a2(mov eax,8) + a1(scrypt_salsa_sse2_loop: ) + a2(movdqa xmm4, xmm1) + a2(paddd xmm4, xmm0) + a2(movdqa xmm5, xmm4) + a2(pslld xmm4, 7) + a2(psrld xmm5, 25) + a2(pxor xmm3, xmm4) + a2(movdqa xmm4, xmm0) + a2(pxor xmm3, xmm5) + a2(paddd xmm4, xmm3) + a2(movdqa xmm5, xmm4) + a2(pslld xmm4, 9) + a2(psrld xmm5, 23) + a2(pxor xmm2, xmm4) + a2(movdqa xmm4, xmm3) + a2(pxor xmm2, xmm5) + a3(pshufd xmm3, xmm3, 0x93) + a2(paddd xmm4, xmm2) + a2(movdqa xmm5, xmm4) + a2(pslld xmm4, 13) + a2(psrld xmm5, 19) + a2(pxor xmm1, xmm4) + a2(movdqa xmm4, xmm2) + a2(pxor xmm1, xmm5) + a3(pshufd xmm2, xmm2, 0x4e) + a2(paddd xmm4, xmm1) + a2(movdqa xmm5, xmm4) + a2(pslld xmm4, 18) + a2(psrld xmm5, 14) + a2(pxor xmm0, xmm4) + a2(movdqa xmm4, xmm3) + a2(pxor xmm0, xmm5) + a3(pshufd xmm1, xmm1, 0x39) + a2(paddd xmm4, xmm0) + a2(movdqa xmm5, xmm4) + a2(pslld xmm4, 7) + a2(psrld xmm5, 25) + a2(pxor xmm1, xmm4) + a2(movdqa xmm4, xmm0) + a2(pxor xmm1, xmm5) + a2(paddd xmm4, xmm1) + a2(movdqa xmm5, xmm4) + a2(pslld xmm4, 9) + a2(psrld xmm5, 23) + a2(pxor xmm2, xmm4) + a2(movdqa xmm4, xmm1) + a2(pxor xmm2, xmm5) + a3(pshufd xmm1, xmm1, 0x93) + a2(paddd xmm4, xmm2) + a2(movdqa xmm5, xmm4) + a2(pslld xmm4, 13) + a2(psrld xmm5, 19) + a2(pxor xmm3, xmm4) + a2(movdqa xmm4, xmm2) + a2(pxor xmm3, xmm5) + a3(pshufd xmm2, xmm2, 0x4e) + a2(paddd xmm4, xmm3) + a2(sub eax, 2) + a2(movdqa xmm5, xmm4) + a2(pslld xmm4, 18) + a2(psrld xmm5, 14) + a2(pxor xmm0, xmm4) + a3(pshufd xmm3, xmm3, 0x39) + a2(pxor xmm0, xmm5) + aj(ja scrypt_salsa_sse2_loop) + a2(paddd xmm0,[esp+0]) + a2(paddd xmm1,[esp+16]) + a2(paddd xmm2,xmm6) + a2(paddd xmm3,xmm7) + a2(lea eax,[ebx+ecx]) + a2(xor ebx,edx) + a2(and eax,~0x7f) + a2(add ecx,64) + a2(shr eax,1) + a2(add eax, edi) + a2(cmp ecx,edx) + a2(movdqa [eax+0],xmm0) + a2(movdqa [eax+16],xmm1) + a2(movdqa [eax+32],xmm2) + a2(movdqa [eax+48],xmm3) + a2(mov eax,[ebp+28]) + aj(jne scrypt_ChunkMix_sse2_loop) + a2(mov esp,ebp) + a1(pop ebp) + a1(pop esi) + a1(pop edi) + a1(pop ebx) + aret(16) +asm_naked_fn_end(scrypt_ChunkMix_sse2) + +#endif + + + +/* x64 */ +#if defined(X86_64ASM_SSE2) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_SALSA_INCLUDED)) && !defined(CPU_X86_FORCE_INTRINSICS) + +#define SCRYPT_SALSA_SSE2 + +asm_naked_fn_proto(void, scrypt_ChunkMix_sse2)(uint32_t *Bout/*[chunkBytes]*/, uint32_t *Bin/*[chunkBytes]*/, uint32_t *Bxor/*[chunkBytes]*/, uint32_t r) +asm_naked_fn(scrypt_ChunkMix_sse2) + a2(lea rcx,[ecx*2]) /* zero extend uint32_t by using ecx, win64 can leave garbage in the top half */ + a2(shl rcx,6) + a2(lea r9,[rcx-64]) + a2(lea rax,[rsi+r9]) + a2(lea r9,[rdx+r9]) + a2(and rdx, rdx) + a2(movdqa xmm0,[rax+0]) + a2(movdqa xmm1,[rax+16]) + a2(movdqa xmm2,[rax+32]) + a2(movdqa xmm3,[rax+48]) + aj(jz scrypt_ChunkMix_sse2_no_xor1) + a2(pxor xmm0,[r9+0]) + a2(pxor xmm1,[r9+16]) + a2(pxor xmm2,[r9+32]) + a2(pxor xmm3,[r9+48]) + a1(scrypt_ChunkMix_sse2_no_xor1:) + a2(xor r9,r9) + a2(xor r8,r8) + a1(scrypt_ChunkMix_sse2_loop:) + a2(and rdx, rdx) + a2(pxor xmm0,[rsi+r9+0]) + a2(pxor xmm1,[rsi+r9+16]) + a2(pxor xmm2,[rsi+r9+32]) + a2(pxor xmm3,[rsi+r9+48]) + aj(jz scrypt_ChunkMix_sse2_no_xor2) + a2(pxor xmm0,[rdx+r9+0]) + a2(pxor xmm1,[rdx+r9+16]) + a2(pxor xmm2,[rdx+r9+32]) + a2(pxor xmm3,[rdx+r9+48]) + a1(scrypt_ChunkMix_sse2_no_xor2:) + a2(movdqa xmm8,xmm0) + a2(movdqa xmm9,xmm1) + a2(movdqa xmm10,xmm2) + a2(movdqa xmm11,xmm3) + a2(mov rax,8) + a1(scrypt_salsa_sse2_loop: ) + a2(movdqa xmm4, xmm1) + a2(paddd xmm4, xmm0) + a2(movdqa xmm5, xmm4) + a2(pslld xmm4, 7) + a2(psrld xmm5, 25) + a2(pxor xmm3, xmm4) + a2(movdqa xmm4, xmm0) + a2(pxor xmm3, xmm5) + a2(paddd xmm4, xmm3) + a2(movdqa xmm5, xmm4) + a2(pslld xmm4, 9) + a2(psrld xmm5, 23) + a2(pxor xmm2, xmm4) + a2(movdqa xmm4, xmm3) + a2(pxor xmm2, xmm5) + a3(pshufd xmm3, xmm3, 0x93) + a2(paddd xmm4, xmm2) + a2(movdqa xmm5, xmm4) + a2(pslld xmm4, 13) + a2(psrld xmm5, 19) + a2(pxor xmm1, xmm4) + a2(movdqa xmm4, xmm2) + a2(pxor xmm1, xmm5) + a3(pshufd xmm2, xmm2, 0x4e) + a2(paddd xmm4, xmm1) + a2(movdqa xmm5, xmm4) + a2(pslld xmm4, 18) + a2(psrld xmm5, 14) + a2(pxor xmm0, xmm4) + a2(movdqa xmm4, xmm3) + a2(pxor xmm0, xmm5) + a3(pshufd xmm1, xmm1, 0x39) + a2(paddd xmm4, xmm0) + a2(movdqa xmm5, xmm4) + a2(pslld xmm4, 7) + a2(psrld xmm5, 25) + a2(pxor xmm1, xmm4) + a2(movdqa xmm4, xmm0) + a2(pxor xmm1, xmm5) + a2(paddd xmm4, xmm1) + a2(movdqa xmm5, xmm4) + a2(pslld xmm4, 9) + a2(psrld xmm5, 23) + a2(pxor xmm2, xmm4) + a2(movdqa xmm4, xmm1) + a2(pxor xmm2, xmm5) + a3(pshufd xmm1, xmm1, 0x93) + a2(paddd xmm4, xmm2) + a2(movdqa xmm5, xmm4) + a2(pslld xmm4, 13) + a2(psrld xmm5, 19) + a2(pxor xmm3, xmm4) + a2(movdqa xmm4, xmm2) + a2(pxor xmm3, xmm5) + a3(pshufd xmm2, xmm2, 0x4e) + a2(paddd xmm4, xmm3) + a2(sub rax, 2) + a2(movdqa xmm5, xmm4) + a2(pslld xmm4, 18) + a2(psrld xmm5, 14) + a2(pxor xmm0, xmm4) + a3(pshufd xmm3, xmm3, 0x39) + a2(pxor xmm0, xmm5) + aj(ja scrypt_salsa_sse2_loop) + a2(paddd xmm0,xmm8) + a2(paddd xmm1,xmm9) + a2(paddd xmm2,xmm10) + a2(paddd xmm3,xmm11) + a2(lea rax,[r8+r9]) + a2(xor r8,rcx) + a2(and rax,~0x7f) + a2(add r9,64) + a2(shr rax,1) + a2(add rax, rdi) + a2(cmp r9,rcx) + a2(movdqa [rax+0],xmm0) + a2(movdqa [rax+16],xmm1) + a2(movdqa [rax+32],xmm2) + a2(movdqa [rax+48],xmm3) + aj(jne scrypt_ChunkMix_sse2_loop) + a1(ret) +asm_naked_fn_end(scrypt_ChunkMix_sse2) + +#endif + + +/* intrinsic */ +#if defined(X86_INTRINSIC_SSE2) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_SALSA_INCLUDED)) + +#define SCRYPT_SALSA_SSE2 + +static void NOINLINE asm_calling_convention +scrypt_ChunkMix_sse2(uint32_t *Bout/*[chunkBytes]*/, uint32_t *Bin/*[chunkBytes]*/, uint32_t *Bxor/*[chunkBytes]*/, uint32_t r) { + uint32_t i, blocksPerChunk = r * 2, half = 0; + xmmi *xmmp,x0,x1,x2,x3,x4,x5,t0,t1,t2,t3; + size_t rounds; + + /* 1: X = B_{2r - 1} */ + xmmp = (xmmi *)scrypt_block(Bin, blocksPerChunk - 1); + x0 = xmmp[0]; + x1 = xmmp[1]; + x2 = xmmp[2]; + x3 = xmmp[3]; + + if (Bxor) { + xmmp = (xmmi *)scrypt_block(Bxor, blocksPerChunk - 1); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + } + + /* 2: for i = 0 to 2r - 1 do */ + for (i = 0; i < blocksPerChunk; i++, half ^= r) { + /* 3: X = H(X ^ B_i) */ + xmmp = (xmmi *)scrypt_block(Bin, i); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + + if (Bxor) { + xmmp = (xmmi *)scrypt_block(Bxor, i); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + } + + t0 = x0; + t1 = x1; + t2 = x2; + t3 = x3; + + for (rounds = 8; rounds; rounds -= 2) { + x4 = x1; + x4 = _mm_add_epi32(x4, x0); + x5 = x4; + x4 = _mm_slli_epi32(x4, 7); + x5 = _mm_srli_epi32(x5, 25); + x3 = _mm_xor_si128(x3, x4); + x4 = x0; + x3 = _mm_xor_si128(x3, x5); + x4 = _mm_add_epi32(x4, x3); + x5 = x4; + x4 = _mm_slli_epi32(x4, 9); + x5 = _mm_srli_epi32(x5, 23); + x2 = _mm_xor_si128(x2, x4); + x4 = x3; + x2 = _mm_xor_si128(x2, x5); + x3 = _mm_shuffle_epi32(x3, 0x93); + x4 = _mm_add_epi32(x4, x2); + x5 = x4; + x4 = _mm_slli_epi32(x4, 13); + x5 = _mm_srli_epi32(x5, 19); + x1 = _mm_xor_si128(x1, x4); + x4 = x2; + x1 = _mm_xor_si128(x1, x5); + x2 = _mm_shuffle_epi32(x2, 0x4e); + x4 = _mm_add_epi32(x4, x1); + x5 = x4; + x4 = _mm_slli_epi32(x4, 18); + x5 = _mm_srli_epi32(x5, 14); + x0 = _mm_xor_si128(x0, x4); + x4 = x3; + x0 = _mm_xor_si128(x0, x5); + x1 = _mm_shuffle_epi32(x1, 0x39); + x4 = _mm_add_epi32(x4, x0); + x5 = x4; + x4 = _mm_slli_epi32(x4, 7); + x5 = _mm_srli_epi32(x5, 25); + x1 = _mm_xor_si128(x1, x4); + x4 = x0; + x1 = _mm_xor_si128(x1, x5); + x4 = _mm_add_epi32(x4, x1); + x5 = x4; + x4 = _mm_slli_epi32(x4, 9); + x5 = _mm_srli_epi32(x5, 23); + x2 = _mm_xor_si128(x2, x4); + x4 = x1; + x2 = _mm_xor_si128(x2, x5); + x1 = _mm_shuffle_epi32(x1, 0x93); + x4 = _mm_add_epi32(x4, x2); + x5 = x4; + x4 = _mm_slli_epi32(x4, 13); + x5 = _mm_srli_epi32(x5, 19); + x3 = _mm_xor_si128(x3, x4); + x4 = x2; + x3 = _mm_xor_si128(x3, x5); + x2 = _mm_shuffle_epi32(x2, 0x4e); + x4 = _mm_add_epi32(x4, x3); + x5 = x4; + x4 = _mm_slli_epi32(x4, 18); + x5 = _mm_srli_epi32(x5, 14); + x0 = _mm_xor_si128(x0, x4); + x3 = _mm_shuffle_epi32(x3, 0x39); + x0 = _mm_xor_si128(x0, x5); + } + + x0 = _mm_add_epi32(x0, t0); + x1 = _mm_add_epi32(x1, t1); + x2 = _mm_add_epi32(x2, t2); + x3 = _mm_add_epi32(x3, t3); + + /* 4: Y_i = X */ + /* 6: B'[0..r-1] = Y_even */ + /* 6: B'[r..2r-1] = Y_odd */ + xmmp = (xmmi *)scrypt_block(Bout, (i / 2) + half); + xmmp[0] = x0; + xmmp[1] = x1; + xmmp[2] = x2; + xmmp[3] = x3; + } +} + +#endif + +#if defined(SCRYPT_SALSA_SSE2) + #undef SCRYPT_MIX + #define SCRYPT_MIX "Salsa/8-SSE2" + #undef SCRYPT_SALSA_INCLUDED + #define SCRYPT_SALSA_INCLUDED +#endif + +/* used by avx,etc as well */ +#if defined(SCRYPT_SALSA_INCLUDED) + /* + Default layout: + 0 1 2 3 + 4 5 6 7 + 8 9 10 11 + 12 13 14 15 + + SSE2 layout: + 0 5 10 15 + 12 1 6 11 + 8 13 2 7 + 4 9 14 3 + */ + + static void asm_calling_convention + salsa_core_tangle_sse2(uint32_t *blocks, size_t count) { + uint32_t t; + while (count--) { + t = blocks[1]; blocks[1] = blocks[5]; blocks[5] = t; + t = blocks[2]; blocks[2] = blocks[10]; blocks[10] = t; + t = blocks[3]; blocks[3] = blocks[15]; blocks[15] = t; + t = blocks[4]; blocks[4] = blocks[12]; blocks[12] = t; + t = blocks[7]; blocks[7] = blocks[11]; blocks[11] = t; + t = blocks[9]; blocks[9] = blocks[13]; blocks[13] = t; + blocks += 16; + } + } +#endif + diff --git a/deps/scrypt-jane-master/code/scrypt-jane-mix_salsa-xop.h b/deps/scrypt-jane-master/code/scrypt-jane-mix_salsa-xop.h new file mode 100644 index 000000000..1d014d2ac --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-mix_salsa-xop.h @@ -0,0 +1,317 @@ +/* x86 */ +#if defined(X86ASM_XOP) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_SALSA_INCLUDED)) && !defined(CPU_X86_FORCE_INTRINSICS) + +#define SCRYPT_SALSA_XOP + +asm_naked_fn_proto(void, scrypt_ChunkMix_xop)(uint32_t *Bout/*[chunkBytes]*/, uint32_t *Bin/*[chunkBytes]*/, uint32_t *Bxor/*[chunkBytes]*/, uint32_t r) +asm_naked_fn(scrypt_ChunkMix_xop) + a1(push ebx) + a1(push edi) + a1(push esi) + a1(push ebp) + a2(mov ebp,esp) + a2(mov edi,[ebp+20]) + a2(mov esi,[ebp+24]) + a2(mov eax,[ebp+28]) + a2(mov ebx,[ebp+32]) + a2(sub esp,32) + a2(and esp,~63) + a2(lea edx,[ebx*2]) + a2(shl edx,6) + a2(lea ecx,[edx-64]) + a2(and eax, eax) + a2(movdqa xmm0,[ecx+esi+0]) + a2(movdqa xmm1,[ecx+esi+16]) + a2(movdqa xmm2,[ecx+esi+32]) + a2(movdqa xmm3,[ecx+esi+48]) + aj(jz scrypt_ChunkMix_xop_no_xor1) + a3(vpxor xmm0,xmm0,[ecx+eax+0]) + a3(vpxor xmm1,xmm1,[ecx+eax+16]) + a3(vpxor xmm2,xmm2,[ecx+eax+32]) + a3(vpxor xmm3,xmm3,[ecx+eax+48]) + a1(scrypt_ChunkMix_xop_no_xor1:) + a2(xor ecx,ecx) + a2(xor ebx,ebx) + a1(scrypt_ChunkMix_xop_loop:) + a2(and eax, eax) + a3(vpxor xmm0,xmm0,[esi+ecx+0]) + a3(vpxor xmm1,xmm1,[esi+ecx+16]) + a3(vpxor xmm2,xmm2,[esi+ecx+32]) + a3(vpxor xmm3,xmm3,[esi+ecx+48]) + aj(jz scrypt_ChunkMix_xop_no_xor2) + a3(vpxor xmm0,xmm0,[eax+ecx+0]) + a3(vpxor xmm1,xmm1,[eax+ecx+16]) + a3(vpxor xmm2,xmm2,[eax+ecx+32]) + a3(vpxor xmm3,xmm3,[eax+ecx+48]) + a1(scrypt_ChunkMix_xop_no_xor2:) + a2(vmovdqa [esp+0],xmm0) + a2(vmovdqa [esp+16],xmm1) + a2(vmovdqa xmm6,xmm2) + a2(vmovdqa xmm7,xmm3) + a2(mov eax,8) + a1(scrypt_salsa_xop_loop: ) + a3(vpaddd xmm4, xmm1, xmm0) + a3(vprotd xmm4, xmm4, 7) + a3(vpxor xmm3, xmm3, xmm4) + a3(vpaddd xmm4, xmm0, xmm3) + a3(vprotd xmm4, xmm4, 9) + a3(vpxor xmm2, xmm2, xmm4) + a3(vpaddd xmm4, xmm3, xmm2) + a3(vprotd xmm4, xmm4, 13) + a3(vpxor xmm1, xmm1, xmm4) + a3(vpaddd xmm4, xmm2, xmm1) + a3(pshufd xmm3, xmm3, 0x93) + a3(vprotd xmm4, xmm4, 18) + a3(pshufd xmm2, xmm2, 0x4e) + a3(vpxor xmm0, xmm0, xmm4) + a3(pshufd xmm1, xmm1, 0x39) + a3(vpaddd xmm4, xmm3, xmm0) + a3(vprotd xmm4, xmm4, 7) + a3(vpxor xmm1, xmm1, xmm4) + a3(vpaddd xmm4, xmm0, xmm1) + a3(vprotd xmm4, xmm4, 9) + a3(vpxor xmm2, xmm2, xmm4) + a3(vpaddd xmm4, xmm1, xmm2) + a3(vprotd xmm4, xmm4, 13) + a3(vpxor xmm3, xmm3, xmm4) + a3(pshufd xmm1, xmm1, 0x93) + a3(vpaddd xmm4, xmm2, xmm3) + a3(pshufd xmm2, xmm2, 0x4e) + a3(vprotd xmm4, xmm4, 18) + a3(pshufd xmm3, xmm3, 0x39) + a3(vpxor xmm0, xmm0, xmm4) + a2(sub eax, 2) + aj(ja scrypt_salsa_xop_loop) + a3(vpaddd xmm0,xmm0,[esp+0]) + a3(vpaddd xmm1,xmm1,[esp+16]) + a3(vpaddd xmm2,xmm2,xmm6) + a3(vpaddd xmm3,xmm3,xmm7) + a2(lea eax,[ebx+ecx]) + a2(xor ebx,edx) + a2(and eax,~0x7f) + a2(add ecx,64) + a2(shr eax,1) + a2(add eax, edi) + a2(cmp ecx,edx) + a2(vmovdqa [eax+0],xmm0) + a2(vmovdqa [eax+16],xmm1) + a2(vmovdqa [eax+32],xmm2) + a2(vmovdqa [eax+48],xmm3) + a2(mov eax,[ebp+28]) + aj(jne scrypt_ChunkMix_xop_loop) + a2(mov esp,ebp) + a1(pop ebp) + a1(pop esi) + a1(pop edi) + a1(pop ebx) + aret(16) +asm_naked_fn_end(scrypt_ChunkMix_xop) + +#endif + + + +/* x64 */ +#if defined(X86_64ASM_XOP) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_SALSA_INCLUDED)) && !defined(CPU_X86_FORCE_INTRINSICS) + +#define SCRYPT_SALSA_XOP + +asm_naked_fn_proto(void, scrypt_ChunkMix_xop)(uint32_t *Bout/*[chunkBytes]*/, uint32_t *Bin/*[chunkBytes]*/, uint32_t *Bxor/*[chunkBytes]*/, uint32_t r) +asm_naked_fn(scrypt_ChunkMix_xop) + a2(lea rcx,[ecx*2]) /* zero extend uint32_t by using ecx, win64 can leave garbage in the top half */ + a2(shl rcx,6) + a2(lea r9,[rcx-64]) + a2(lea rax,[rsi+r9]) + a2(lea r9,[rdx+r9]) + a2(and rdx, rdx) + a2(vmovdqa xmm0,[rax+0]) + a2(vmovdqa xmm1,[rax+16]) + a2(vmovdqa xmm2,[rax+32]) + a2(vmovdqa xmm3,[rax+48]) + aj(jz scrypt_ChunkMix_xop_no_xor1) + a3(vpxor xmm0,xmm0,[r9+0]) + a3(vpxor xmm1,xmm1,[r9+16]) + a3(vpxor xmm2,xmm2,[r9+32]) + a3(vpxor xmm3,xmm3,[r9+48]) + a1(scrypt_ChunkMix_xop_no_xor1:) + a2(xor r9,r9) + a2(xor r8,r8) + a1(scrypt_ChunkMix_xop_loop:) + a2(and rdx, rdx) + a3(vpxor xmm0,xmm0,[rsi+r9+0]) + a3(vpxor xmm1,xmm1,[rsi+r9+16]) + a3(vpxor xmm2,xmm2,[rsi+r9+32]) + a3(vpxor xmm3,xmm3,[rsi+r9+48]) + aj(jz scrypt_ChunkMix_xop_no_xor2) + a3(vpxor xmm0,xmm0,[rdx+r9+0]) + a3(vpxor xmm1,xmm1,[rdx+r9+16]) + a3(vpxor xmm2,xmm2,[rdx+r9+32]) + a3(vpxor xmm3,xmm3,[rdx+r9+48]) + a1(scrypt_ChunkMix_xop_no_xor2:) + a2(vmovdqa xmm8,xmm0) + a2(vmovdqa xmm9,xmm1) + a2(vmovdqa xmm10,xmm2) + a2(vmovdqa xmm11,xmm3) + a2(mov rax,8) + a1(scrypt_salsa_xop_loop: ) + a3(vpaddd xmm4, xmm1, xmm0) + a3(vprotd xmm4, xmm4, 7) + a3(vpxor xmm3, xmm3, xmm4) + a3(vpaddd xmm4, xmm0, xmm3) + a3(vprotd xmm4, xmm4, 9) + a3(vpxor xmm2, xmm2, xmm4) + a3(vpaddd xmm4, xmm3, xmm2) + a3(vprotd xmm4, xmm4, 13) + a3(vpxor xmm1, xmm1, xmm4) + a3(vpaddd xmm4, xmm2, xmm1) + a3(pshufd xmm3, xmm3, 0x93) + a3(vprotd xmm4, xmm4, 18) + a3(pshufd xmm2, xmm2, 0x4e) + a3(vpxor xmm0, xmm0, xmm4) + a3(pshufd xmm1, xmm1, 0x39) + a3(vpaddd xmm4, xmm3, xmm0) + a3(vprotd xmm4, xmm4, 7) + a3(vpxor xmm1, xmm1, xmm4) + a3(vpaddd xmm4, xmm0, xmm1) + a3(vprotd xmm4, xmm4, 9) + a3(vpxor xmm2, xmm2, xmm4) + a3(vpaddd xmm4, xmm1, xmm2) + a3(vprotd xmm4, xmm4, 13) + a3(vpxor xmm3, xmm3, xmm4) + a3(pshufd xmm1, xmm1, 0x93) + a3(vpaddd xmm4, xmm2, xmm3) + a3(pshufd xmm2, xmm2, 0x4e) + a3(vprotd xmm4, xmm4, 18) + a3(pshufd xmm3, xmm3, 0x39) + a3(vpxor xmm0, xmm0, xmm4) + a2(sub rax, 2) + aj(ja scrypt_salsa_xop_loop) + a3(vpaddd xmm0,xmm0,xmm8) + a3(vpaddd xmm1,xmm1,xmm9) + a3(vpaddd xmm2,xmm2,xmm10) + a3(vpaddd xmm3,xmm3,xmm11) + a2(lea rax,[r8+r9]) + a2(xor r8,rcx) + a2(and rax,~0x7f) + a2(add r9,64) + a2(shr rax,1) + a2(add rax, rdi) + a2(cmp r9,rcx) + a2(vmovdqa [rax+0],xmm0) + a2(vmovdqa [rax+16],xmm1) + a2(vmovdqa [rax+32],xmm2) + a2(vmovdqa [rax+48],xmm3) + aj(jne scrypt_ChunkMix_xop_loop) + a1(ret) +asm_naked_fn_end(scrypt_ChunkMix_xop) + +#endif + + +/* intrinsic */ +#if defined(X86_INTRINSIC_XOP) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_SALSA_INCLUDED)) + +#define SCRYPT_SALSA_XOP + +static void asm_calling_convention NOINLINE +scrypt_ChunkMix_xop(uint32_t *Bout/*[chunkBytes]*/, uint32_t *Bin/*[chunkBytes]*/, uint32_t *Bxor/*[chunkBytes]*/, uint32_t r) { + uint32_t i, blocksPerChunk = r * 2, half = 0; + xmmi *xmmp,x0,x1,x2,x3,x4,x5,t0,t1,t2,t3; + size_t rounds; + + /* 1: X = B_{2r - 1} */ + xmmp = (xmmi *)scrypt_block(Bin, blocksPerChunk - 1); + x0 = xmmp[0]; + x1 = xmmp[1]; + x2 = xmmp[2]; + x3 = xmmp[3]; + + if (Bxor) { + xmmp = (xmmi *)scrypt_block(Bxor, blocksPerChunk - 1); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + } + + /* 2: for i = 0 to 2r - 1 do */ + for (i = 0; i < blocksPerChunk; i++, half ^= r) { + /* 3: X = H(X ^ B_i) */ + xmmp = (xmmi *)scrypt_block(Bin, i); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + + if (Bxor) { + xmmp = (xmmi *)scrypt_block(Bxor, i); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + } + + t0 = x0; + t1 = x1; + t2 = x2; + t3 = x3; + + for (rounds = 8; rounds; rounds -= 2) { + x4 = _mm_add_epi32(x1, x0); + x4 = _mm_roti_epi32(x4, 7); + x3 = _mm_xor_si128(x3, x4); + x4 = _mm_add_epi32(x0, x3); + x4 = _mm_roti_epi32(x4, 9); + x2 = _mm_xor_si128(x2, x4); + x4 = _mm_add_epi32(x3, x2); + x4 = _mm_roti_epi32(x4, 13); + x1 = _mm_xor_si128(x1, x4); + x4 = _mm_add_epi32(x2, x1); + x4 = _mm_roti_epi32(x4, 18); + x0 = _mm_xor_si128(x0, x4); + x3 = _mm_shuffle_epi32(x3, 0x93); + x2 = _mm_shuffle_epi32(x2, 0x4e); + x1 = _mm_shuffle_epi32(x1, 0x39); + x4 = _mm_add_epi32(x3, x0); + x4 = _mm_roti_epi32(x4, 7); + x1 = _mm_xor_si128(x1, x4); + x4 = _mm_add_epi32(x0, x1); + x4 = _mm_roti_epi32(x4, 9); + x2 = _mm_xor_si128(x2, x4); + x4 = _mm_add_epi32(x1, x2); + x4 = _mm_roti_epi32(x4, 13); + x3 = _mm_xor_si128(x3, x4); + x4 = _mm_add_epi32(x2, x3); + x4 = _mm_roti_epi32(x4, 18); + x0 = _mm_xor_si128(x0, x4); + x1 = _mm_shuffle_epi32(x1, 0x93); + x2 = _mm_shuffle_epi32(x2, 0x4e); + x3 = _mm_shuffle_epi32(x3, 0x39); + } + + x0 = _mm_add_epi32(x0, t0); + x1 = _mm_add_epi32(x1, t1); + x2 = _mm_add_epi32(x2, t2); + x3 = _mm_add_epi32(x3, t3); + + /* 4: Y_i = X */ + /* 6: B'[0..r-1] = Y_even */ + /* 6: B'[r..2r-1] = Y_odd */ + xmmp = (xmmi *)scrypt_block(Bout, (i / 2) + half); + xmmp[0] = x0; + xmmp[1] = x1; + xmmp[2] = x2; + xmmp[3] = x3; + } +} + +#endif + +#if defined(SCRYPT_SALSA_XOP) + /* uses salsa_core_tangle_sse2 */ + + #undef SCRYPT_MIX + #define SCRYPT_MIX "Salsa/8-XOP" + #undef SCRYPT_SALSA_INCLUDED + #define SCRYPT_SALSA_INCLUDED +#endif diff --git a/deps/scrypt-jane-master/code/scrypt-jane-mix_salsa.h b/deps/scrypt-jane-master/code/scrypt-jane-mix_salsa.h new file mode 100644 index 000000000..33f334094 --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-mix_salsa.h @@ -0,0 +1,70 @@ +#if !defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_SALSA_INCLUDED) + +#undef SCRYPT_MIX +#define SCRYPT_MIX "Salsa20/8 Ref" + +#undef SCRYPT_SALSA_INCLUDED +#define SCRYPT_SALSA_INCLUDED +#define SCRYPT_SALSA_BASIC + +static void +salsa_core_basic(uint32_t state[16]) { + size_t rounds = 8; + uint32_t x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,t; + + x0 = state[0]; + x1 = state[1]; + x2 = state[2]; + x3 = state[3]; + x4 = state[4]; + x5 = state[5]; + x6 = state[6]; + x7 = state[7]; + x8 = state[8]; + x9 = state[9]; + x10 = state[10]; + x11 = state[11]; + x12 = state[12]; + x13 = state[13]; + x14 = state[14]; + x15 = state[15]; + + #define quarter(a,b,c,d) \ + t = a+d; t = ROTL32(t, 7); b ^= t; \ + t = b+a; t = ROTL32(t, 9); c ^= t; \ + t = c+b; t = ROTL32(t, 13); d ^= t; \ + t = d+c; t = ROTL32(t, 18); a ^= t; \ + + for (; rounds; rounds -= 2) { + quarter( x0, x4, x8,x12) + quarter( x5, x9,x13, x1) + quarter(x10,x14, x2, x6) + quarter(x15, x3, x7,x11) + quarter( x0, x1, x2, x3) + quarter( x5, x6, x7, x4) + quarter(x10,x11, x8, x9) + quarter(x15,x12,x13,x14) + } + + state[0] += x0; + state[1] += x1; + state[2] += x2; + state[3] += x3; + state[4] += x4; + state[5] += x5; + state[6] += x6; + state[7] += x7; + state[8] += x8; + state[9] += x9; + state[10] += x10; + state[11] += x11; + state[12] += x12; + state[13] += x13; + state[14] += x14; + state[15] += x15; + + #undef quarter +} + +#endif + diff --git a/deps/scrypt-jane-master/code/scrypt-jane-mix_salsa64-avx.h b/deps/scrypt-jane-master/code/scrypt-jane-mix_salsa64-avx.h new file mode 100644 index 000000000..c6e41dc37 --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-mix_salsa64-avx.h @@ -0,0 +1,367 @@ +/* x64 */ +#if defined(X86_64ASM_AVX) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_SALSA64_INCLUDED)) && !defined(CPU_X86_FORCE_INTRINSICS) + +#define SCRYPT_SALSA64_AVX + +asm_naked_fn_proto(void, scrypt_ChunkMix_avx)(uint64_t *Bout/*[chunkBytes]*/, uint64_t *Bin/*[chunkBytes]*/, uint64_t *Bxor/*[chunkBytes]*/, uint32_t r) +asm_naked_fn(scrypt_ChunkMix_avx) + a1(push rbp) + a2(mov rbp, rsp) + a2(and rsp, ~63) + a2(sub rsp, 128) + a2(lea rcx,[ecx*2]) /* zero extend uint32_t by using ecx, win64 can leave garbage in the top half */ + a2(shl rcx,7) + a2(lea r9,[rcx-128]) + a2(lea rax,[rsi+r9]) + a2(lea r9,[rdx+r9]) + a2(and rdx, rdx) + a2(vmovdqa xmm0,[rax+0]) + a2(vmovdqa xmm1,[rax+16]) + a2(vmovdqa xmm2,[rax+32]) + a2(vmovdqa xmm3,[rax+48]) + a2(vmovdqa xmm4,[rax+64]) + a2(vmovdqa xmm5,[rax+80]) + a2(vmovdqa xmm6,[rax+96]) + a2(vmovdqa xmm7,[rax+112]) + aj(jz scrypt_ChunkMix_avx_no_xor1) + a3(vpxor xmm0,xmm0,[r9+0]) + a3(vpxor xmm1,xmm1,[r9+16]) + a3(vpxor xmm2,xmm2,[r9+32]) + a3(vpxor xmm3,xmm3,[r9+48]) + a3(vpxor xmm4,xmm4,[r9+64]) + a3(vpxor xmm5,xmm5,[r9+80]) + a3(vpxor xmm6,xmm6,[r9+96]) + a3(vpxor xmm7,xmm7,[r9+112]) + a1(scrypt_ChunkMix_avx_no_xor1:) + a2(xor r9,r9) + a2(xor r8,r8) + a1(scrypt_ChunkMix_avx_loop:) + a2(and rdx, rdx) + a3(vpxor xmm0,xmm0,[rsi+r9+0]) + a3(vpxor xmm1,xmm1,[rsi+r9+16]) + a3(vpxor xmm2,xmm2,[rsi+r9+32]) + a3(vpxor xmm3,xmm3,[rsi+r9+48]) + a3(vpxor xmm4,xmm4,[rsi+r9+64]) + a3(vpxor xmm5,xmm5,[rsi+r9+80]) + a3(vpxor xmm6,xmm6,[rsi+r9+96]) + a3(vpxor xmm7,xmm7,[rsi+r9+112]) + aj(jz scrypt_ChunkMix_avx_no_xor2) + a3(vpxor xmm0,xmm0,[rdx+r9+0]) + a3(vpxor xmm1,xmm1,[rdx+r9+16]) + a3(vpxor xmm2,xmm2,[rdx+r9+32]) + a3(vpxor xmm3,xmm3,[rdx+r9+48]) + a3(vpxor xmm4,xmm4,[rdx+r9+64]) + a3(vpxor xmm5,xmm5,[rdx+r9+80]) + a3(vpxor xmm6,xmm6,[rdx+r9+96]) + a3(vpxor xmm7,xmm7,[rdx+r9+112]) + a1(scrypt_ChunkMix_avx_no_xor2:) + a2(vmovdqa [rsp+0],xmm0) + a2(vmovdqa [rsp+16],xmm1) + a2(vmovdqa [rsp+32],xmm2) + a2(vmovdqa [rsp+48],xmm3) + a2(vmovdqa [rsp+64],xmm4) + a2(vmovdqa [rsp+80],xmm5) + a2(vmovdqa [rsp+96],xmm6) + a2(vmovdqa [rsp+112],xmm7) + a2(mov rax,8) + a1(scrypt_salsa64_avx_loop: ) + a3(vpaddq xmm8, xmm0, xmm2) + a3(vpaddq xmm9, xmm1, xmm3) + a3(vpshufd xmm8, xmm8, 0xb1) + a3(vpshufd xmm9, xmm9, 0xb1) + a3(vpxor xmm6, xmm6, xmm8) + a3(vpxor xmm7, xmm7, xmm9) + a3(vpaddq xmm10, xmm0, xmm6) + a3(vpaddq xmm11, xmm1, xmm7) + a3(vpsrlq xmm8, xmm10, 51) + a3(vpsrlq xmm9, xmm11, 51) + a3(vpsllq xmm10, xmm10, 13) + a3(vpsllq xmm11, xmm11, 13) + a3(vpxor xmm4, xmm4, xmm8) + a3(vpxor xmm5, xmm5, xmm9) + a3(vpxor xmm4, xmm4, xmm10) + a3(vpxor xmm5, xmm5, xmm11) + a3(vpaddq xmm8, xmm6, xmm4) + a3(vpaddq xmm9, xmm7, xmm5) + a3(vpsrlq xmm10, xmm8, 25) + a3(vpsrlq xmm11, xmm9, 25) + a3(vpsllq xmm8, xmm8, 39) + a3(vpsllq xmm9, xmm9, 39) + a3(vpxor xmm2, xmm2, xmm10) + a3(vpxor xmm3, xmm3, xmm11) + a3(vpxor xmm2, xmm2, xmm8) + a3(vpxor xmm3, xmm3, xmm9) + a3(vpaddq xmm10, xmm4, xmm2) + a3(vpaddq xmm11, xmm5, xmm3) + a3(vpshufd xmm10, xmm10, 0xb1) + a3(vpshufd xmm11, xmm11, 0xb1) + a3(vpxor xmm0, xmm0, xmm10) + a3(vpxor xmm1, xmm1, xmm11) + a2(vmovdqa xmm8, xmm2) + a2(vmovdqa xmm9, xmm3) + a4(vpalignr xmm2, xmm6, xmm7, 8) + a4(vpalignr xmm3, xmm7, xmm6, 8) + a4(vpalignr xmm6, xmm9, xmm8, 8) + a4(vpalignr xmm7, xmm8, xmm9, 8) + a3(vpaddq xmm10, xmm0, xmm2) + a3(vpaddq xmm11, xmm1, xmm3) + a3(vpshufd xmm10, xmm10, 0xb1) + a3(vpshufd xmm11, xmm11, 0xb1) + a3(vpxor xmm6, xmm6, xmm10) + a3(vpxor xmm7, xmm7, xmm11) + a3(vpaddq xmm8, xmm0, xmm6) + a3(vpaddq xmm9, xmm1, xmm7) + a3(vpsrlq xmm10, xmm8, 51) + a3(vpsrlq xmm11, xmm9, 51) + a3(vpsllq xmm8, xmm8, 13) + a3(vpsllq xmm9, xmm9, 13) + a3(vpxor xmm5, xmm5, xmm10) + a3(vpxor xmm4, xmm4, xmm11) + a3(vpxor xmm5, xmm5, xmm8) + a3(vpxor xmm4, xmm4, xmm9) + a3(vpaddq xmm10, xmm6, xmm5) + a3(vpaddq xmm11, xmm7, xmm4) + a3(vpsrlq xmm8, xmm10, 25) + a3(vpsrlq xmm9, xmm11, 25) + a3(vpsllq xmm10, xmm10, 39) + a3(vpsllq xmm11, xmm11, 39) + a3(vpxor xmm2, xmm2, xmm8) + a3(vpxor xmm3, xmm3, xmm9) + a3(vpxor xmm2, xmm2, xmm10) + a3(vpxor xmm3, xmm3, xmm11) + a3(vpaddq xmm8, xmm5, xmm2) + a3(vpaddq xmm9, xmm4, xmm3) + a3(vpshufd xmm8, xmm8, 0xb1) + a3(vpshufd xmm9, xmm9, 0xb1) + a3(vpxor xmm0, xmm0, xmm8) + a3(vpxor xmm1, xmm1, xmm9) + a2(vmovdqa xmm10, xmm2) + a2(vmovdqa xmm11, xmm3) + a4(vpalignr xmm2, xmm6, xmm7, 8) + a4(vpalignr xmm3, xmm7, xmm6, 8) + a4(vpalignr xmm6, xmm11, xmm10, 8) + a4(vpalignr xmm7, xmm10, xmm11, 8) + a2(sub rax, 2) + aj(ja scrypt_salsa64_avx_loop) + a3(vpaddq xmm0,xmm0,[rsp+0]) + a3(vpaddq xmm1,xmm1,[rsp+16]) + a3(vpaddq xmm2,xmm2,[rsp+32]) + a3(vpaddq xmm3,xmm3,[rsp+48]) + a3(vpaddq xmm4,xmm4,[rsp+64]) + a3(vpaddq xmm5,xmm5,[rsp+80]) + a3(vpaddq xmm6,xmm6,[rsp+96]) + a3(vpaddq xmm7,xmm7,[rsp+112]) + a2(lea rax,[r8+r9]) + a2(xor r8,rcx) + a2(and rax,~0xff) + a2(add r9,128) + a2(shr rax,1) + a2(add rax, rdi) + a2(cmp r9,rcx) + a2(vmovdqa [rax+0],xmm0) + a2(vmovdqa [rax+16],xmm1) + a2(vmovdqa [rax+32],xmm2) + a2(vmovdqa [rax+48],xmm3) + a2(vmovdqa [rax+64],xmm4) + a2(vmovdqa [rax+80],xmm5) + a2(vmovdqa [rax+96],xmm6) + a2(vmovdqa [rax+112],xmm7) + aj(jne scrypt_ChunkMix_avx_loop) + a2(mov rsp, rbp) + a1(pop rbp) + a1(ret) +asm_naked_fn_end(scrypt_ChunkMix_avx) + +#endif + + +/* intrinsic */ +#if defined(X86_INTRINSIC_AVX) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_SALSA64_INCLUDED)) + +#define SCRYPT_SALSA64_AVX + +static void asm_calling_convention +scrypt_ChunkMix_avx(uint64_t *Bout/*[chunkBytes]*/, uint64_t *Bin/*[chunkBytes]*/, uint64_t *Bxor/*[chunkBytes]*/, uint32_t r) { + uint32_t i, blocksPerChunk = r * 2, half = 0; + xmmi *xmmp,x0,x1,x2,x3,x4,x5,x6,x7,t0,t1,t2,t3,t4,t5,t6,t7,z0,z1,z2,z3; + size_t rounds; + + /* 1: X = B_{2r - 1} */ + xmmp = (xmmi *)scrypt_block(Bin, blocksPerChunk - 1); + x0 = xmmp[0]; + x1 = xmmp[1]; + x2 = xmmp[2]; + x3 = xmmp[3]; + x4 = xmmp[4]; + x5 = xmmp[5]; + x6 = xmmp[6]; + x7 = xmmp[7]; + + if (Bxor) { + xmmp = (xmmi *)scrypt_block(Bxor, blocksPerChunk - 1); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + x4 = _mm_xor_si128(x4, xmmp[4]); + x5 = _mm_xor_si128(x5, xmmp[5]); + x6 = _mm_xor_si128(x6, xmmp[6]); + x7 = _mm_xor_si128(x7, xmmp[7]); + } + + /* 2: for i = 0 to 2r - 1 do */ + for (i = 0; i < blocksPerChunk; i++, half ^= r) { + /* 3: X = H(X ^ B_i) */ + xmmp = (xmmi *)scrypt_block(Bin, i); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + x4 = _mm_xor_si128(x4, xmmp[4]); + x5 = _mm_xor_si128(x5, xmmp[5]); + x6 = _mm_xor_si128(x6, xmmp[6]); + x7 = _mm_xor_si128(x7, xmmp[7]); + + if (Bxor) { + xmmp = (xmmi *)scrypt_block(Bxor, i); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + x4 = _mm_xor_si128(x4, xmmp[4]); + x5 = _mm_xor_si128(x5, xmmp[5]); + x6 = _mm_xor_si128(x6, xmmp[6]); + x7 = _mm_xor_si128(x7, xmmp[7]); + } + + t0 = x0; + t1 = x1; + t2 = x2; + t3 = x3; + t4 = x4; + t5 = x5; + t6 = x6; + t7 = x7; + + for (rounds = 8; rounds; rounds -= 2) { + z0 = _mm_add_epi64(x0, x2); + z1 = _mm_add_epi64(x1, x3); + z0 = _mm_shuffle_epi32(z0, _MM_SHUFFLE(2,3,0,1)); + z1 = _mm_shuffle_epi32(z1, _MM_SHUFFLE(2,3,0,1)); + x6 = _mm_xor_si128(x6, z0); + x7 = _mm_xor_si128(x7, z1); + + z0 = _mm_add_epi64(x6, x0); + z1 = _mm_add_epi64(x7, x1); + z2 = _mm_srli_epi64(z0, 64-13); + z3 = _mm_srli_epi64(z1, 64-13); + z0 = _mm_slli_epi64(z0, 13); + z1 = _mm_slli_epi64(z1, 13); + x4 = _mm_xor_si128(x4, z2); + x5 = _mm_xor_si128(x5, z3); + x4 = _mm_xor_si128(x4, z0); + x5 = _mm_xor_si128(x5, z1); + + z0 = _mm_add_epi64(x4, x6); + z1 = _mm_add_epi64(x5, x7); + z2 = _mm_srli_epi64(z0, 64-39); + z3 = _mm_srli_epi64(z1, 64-39); + z0 = _mm_slli_epi64(z0, 39); + z1 = _mm_slli_epi64(z1, 39); + x2 = _mm_xor_si128(x2, z2); + x3 = _mm_xor_si128(x3, z3); + x2 = _mm_xor_si128(x2, z0); + x3 = _mm_xor_si128(x3, z1); + + z0 = _mm_add_epi64(x2, x4); + z1 = _mm_add_epi64(x3, x5); + z0 = _mm_shuffle_epi32(z0, _MM_SHUFFLE(2,3,0,1)); + z1 = _mm_shuffle_epi32(z1, _MM_SHUFFLE(2,3,0,1)); + x0 = _mm_xor_si128(x0, z0); + x1 = _mm_xor_si128(x1, z1); + + z0 = x2; + z1 = x3; + x2 = _mm_alignr_epi8(x6, x7, 8); + x3 = _mm_alignr_epi8(x7, x6, 8); + x6 = _mm_alignr_epi8(z1, z0, 8); + x7 = _mm_alignr_epi8(z0, z1, 8); + + z0 = _mm_add_epi64(x0, x2); + z1 = _mm_add_epi64(x1, x3); + z0 = _mm_shuffle_epi32(z0, _MM_SHUFFLE(2,3,0,1)); + z1 = _mm_shuffle_epi32(z1, _MM_SHUFFLE(2,3,0,1)); + x6 = _mm_xor_si128(x6, z0); + x7 = _mm_xor_si128(x7, z1); + + z0 = _mm_add_epi64(x6, x0); + z1 = _mm_add_epi64(x7, x1); + z2 = _mm_srli_epi64(z0, 64-13); + z3 = _mm_srli_epi64(z1, 64-13); + z0 = _mm_slli_epi64(z0, 13); + z1 = _mm_slli_epi64(z1, 13); + x5 = _mm_xor_si128(x5, z2); + x4 = _mm_xor_si128(x4, z3); + x5 = _mm_xor_si128(x5, z0); + x4 = _mm_xor_si128(x4, z1); + + z0 = _mm_add_epi64(x5, x6); + z1 = _mm_add_epi64(x4, x7); + z2 = _mm_srli_epi64(z0, 64-39); + z3 = _mm_srli_epi64(z1, 64-39); + z0 = _mm_slli_epi64(z0, 39); + z1 = _mm_slli_epi64(z1, 39); + x2 = _mm_xor_si128(x2, z2); + x3 = _mm_xor_si128(x3, z3); + x2 = _mm_xor_si128(x2, z0); + x3 = _mm_xor_si128(x3, z1); + + z0 = _mm_add_epi64(x2, x5); + z1 = _mm_add_epi64(x3, x4); + z0 = _mm_shuffle_epi32(z0, _MM_SHUFFLE(2,3,0,1)); + z1 = _mm_shuffle_epi32(z1, _MM_SHUFFLE(2,3,0,1)); + x0 = _mm_xor_si128(x0, z0); + x1 = _mm_xor_si128(x1, z1); + + z0 = x2; + z1 = x3; + x2 = _mm_alignr_epi8(x6, x7, 8); + x3 = _mm_alignr_epi8(x7, x6, 8); + x6 = _mm_alignr_epi8(z1, z0, 8); + x7 = _mm_alignr_epi8(z0, z1, 8); + } + + x0 = _mm_add_epi64(x0, t0); + x1 = _mm_add_epi64(x1, t1); + x2 = _mm_add_epi64(x2, t2); + x3 = _mm_add_epi64(x3, t3); + x4 = _mm_add_epi64(x4, t4); + x5 = _mm_add_epi64(x5, t5); + x6 = _mm_add_epi64(x6, t6); + x7 = _mm_add_epi64(x7, t7); + + /* 4: Y_i = X */ + /* 6: B'[0..r-1] = Y_even */ + /* 6: B'[r..2r-1] = Y_odd */ + xmmp = (xmmi *)scrypt_block(Bout, (i / 2) + half); + xmmp[0] = x0; + xmmp[1] = x1; + xmmp[2] = x2; + xmmp[3] = x3; + xmmp[4] = x4; + xmmp[5] = x5; + xmmp[6] = x6; + xmmp[7] = x7; + } +} + +#endif + +#if defined(SCRYPT_SALSA64_AVX) + /* uses salsa64_core_tangle_sse2 */ + + #undef SCRYPT_MIX + #define SCRYPT_MIX "Salsa64/8-AVX" + #undef SCRYPT_SALSA64_INCLUDED + #define SCRYPT_SALSA64_INCLUDED +#endif diff --git a/deps/scrypt-jane-master/code/scrypt-jane-mix_salsa64-avx2.h b/deps/scrypt-jane-master/code/scrypt-jane-mix_salsa64-avx2.h new file mode 100644 index 000000000..a42e808b2 --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-mix_salsa64-avx2.h @@ -0,0 +1,221 @@ +/* x64 */ +#if defined(X86_64ASM_AVX2) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_SALSA64_INCLUDED)) && !defined(CPU_X86_FORCE_INTRINSICS) + +#define SCRYPT_SALSA64_AVX2 + +asm_naked_fn_proto(void, scrypt_ChunkMix_avx2)(uint64_t *Bout/*[chunkBytes]*/, uint64_t *Bin/*[chunkBytes]*/, uint64_t *Bxor/*[chunkBytes]*/, uint32_t r) +asm_naked_fn(scrypt_ChunkMix_avx2) + a2(lea rcx,[ecx*2]) /* zero extend uint32_t by using ecx, win64 can leave garbage in the top half */ + a2(shl rcx,7) + a2(lea r9,[rcx-128]) + a2(lea rax,[rsi+r9]) + a2(lea r9,[rdx+r9]) + a2(and rdx, rdx) + a2(vmovdqa ymm0,[rax+0]) + a2(vmovdqa ymm1,[rax+32]) + a2(vmovdqa ymm2,[rax+64]) + a2(vmovdqa ymm3,[rax+96]) + aj(jz scrypt_ChunkMix_avx2_no_xor1) + a3(vpxor ymm0,ymm0,[r9+0]) + a3(vpxor ymm1,ymm1,[r9+32]) + a3(vpxor ymm2,ymm2,[r9+64]) + a3(vpxor ymm3,ymm3,[r9+96]) + a1(scrypt_ChunkMix_avx2_no_xor1:) + a2(xor r9,r9) + a2(xor r8,r8) + a1(scrypt_ChunkMix_avx2_loop:) + a2(and rdx, rdx) + a3(vpxor ymm0,ymm0,[rsi+r9+0]) + a3(vpxor ymm1,ymm1,[rsi+r9+32]) + a3(vpxor ymm2,ymm2,[rsi+r9+64]) + a3(vpxor ymm3,ymm3,[rsi+r9+96]) + aj(jz scrypt_ChunkMix_avx2_no_xor2) + a3(vpxor ymm0,ymm0,[rdx+r9+0]) + a3(vpxor ymm1,ymm1,[rdx+r9+32]) + a3(vpxor ymm2,ymm2,[rdx+r9+64]) + a3(vpxor ymm3,ymm3,[rdx+r9+96]) + a1(scrypt_ChunkMix_avx2_no_xor2:) + a2(vmovdqa ymm6,ymm0) + a2(vmovdqa ymm7,ymm1) + a2(vmovdqa ymm8,ymm2) + a2(vmovdqa ymm9,ymm3) + a2(mov rax,4) + a1(scrypt_salsa64_avx2_loop: ) + a3(vpaddq ymm4, ymm1, ymm0) + a3(vpshufd ymm4, ymm4, 0xb1) + a3(vpxor ymm3, ymm3, ymm4) + a3(vpaddq ymm4, ymm0, ymm3) + a3(vpsrlq ymm5, ymm4, 51) + a3(vpxor ymm2, ymm2, ymm5) + a3(vpsllq ymm4, ymm4, 13) + a3(vpxor ymm2, ymm2, ymm4) + a3(vpaddq ymm4, ymm3, ymm2) + a3(vpsrlq ymm5, ymm4, 25) + a3(vpxor ymm1, ymm1, ymm5) + a3(vpsllq ymm4, ymm4, 39) + a3(vpxor ymm1, ymm1, ymm4) + a3(vpaddq ymm4, ymm2, ymm1) + a3(vpshufd ymm4, ymm4, 0xb1) + a3(vpermq ymm1, ymm1, 0x39) + a3(vpermq ymm10, ymm2, 0x4e) + a3(vpxor ymm0, ymm0, ymm4) + a3(vpermq ymm3, ymm3, 0x93) + a3(vpaddq ymm4, ymm3, ymm0) + a3(vpshufd ymm4, ymm4, 0xb1) + a3(vpxor ymm1, ymm1, ymm4) + a3(vpaddq ymm4, ymm0, ymm1) + a3(vpsrlq ymm5, ymm4, 51) + a3(vpxor ymm10, ymm10, ymm5) + a3(vpsllq ymm4, ymm4, 13) + a3(vpxor ymm10, ymm10, ymm4) + a3(vpaddq ymm4, ymm1, ymm10) + a3(vpsrlq ymm5, ymm4, 25) + a3(vpxor ymm3, ymm3, ymm5) + a3(vpsllq ymm4, ymm4, 39) + a3(vpermq ymm1, ymm1, 0x93) + a3(vpxor ymm3, ymm3, ymm4) + a3(vpermq ymm2, ymm10, 0x4e) + a3(vpaddq ymm4, ymm10, ymm3) + a3(vpshufd ymm4, ymm4, 0xb1) + a3(vpermq ymm3, ymm3, 0x39) + a3(vpxor ymm0, ymm0, ymm4) + a1(dec rax) + aj(jnz scrypt_salsa64_avx2_loop) + a3(vpaddq ymm0,ymm0,ymm6) + a3(vpaddq ymm1,ymm1,ymm7) + a3(vpaddq ymm2,ymm2,ymm8) + a3(vpaddq ymm3,ymm3,ymm9) + a2(lea rax,[r8+r9]) + a2(xor r8,rcx) + a2(and rax,~0xff) + a2(add r9,128) + a2(shr rax,1) + a2(add rax, rdi) + a2(cmp r9,rcx) + a2(vmovdqa [rax+0],ymm0) + a2(vmovdqa [rax+32],ymm1) + a2(vmovdqa [rax+64],ymm2) + a2(vmovdqa [rax+96],ymm3) + aj(jne scrypt_ChunkMix_avx2_loop) + a1(vzeroupper) + a1(ret) +asm_naked_fn_end(scrypt_ChunkMix_avx2) + +#endif + + +/* intrinsic */ +#if defined(X86_INTRINSIC_AVX2) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_SALSA64_INCLUDED)) + +#define SCRYPT_SALSA64_AVX2 + +static void asm_calling_convention +scrypt_ChunkMix_avx2(uint64_t *Bout/*[chunkBytes]*/, uint64_t *Bin/*[chunkBytes]*/, uint64_t *Bxor/*[chunkBytes]*/, uint32_t r) { + uint32_t i, blocksPerChunk = r * 2, half = 0; + ymmi *ymmp,y0,y1,y2,y3,t0,t1,t2,t3,z0,z1; + size_t rounds; + + /* 1: X = B_{2r - 1} */ + ymmp = (ymmi *)scrypt_block(Bin, blocksPerChunk - 1); + y0 = ymmp[0]; + y1 = ymmp[1]; + y2 = ymmp[2]; + y3 = ymmp[3]; + + if (Bxor) { + ymmp = (ymmi *)scrypt_block(Bxor, blocksPerChunk - 1); + y0 = _mm256_xor_si256(y0, ymmp[0]); + y1 = _mm256_xor_si256(y1, ymmp[1]); + y2 = _mm256_xor_si256(y2, ymmp[2]); + y3 = _mm256_xor_si256(y3, ymmp[3]); + } + + /* 2: for i = 0 to 2r - 1 do */ + for (i = 0; i < blocksPerChunk; i++, half ^= r) { + /* 3: X = H(X ^ B_i) */ + ymmp = (ymmi *)scrypt_block(Bin, i); + y0 = _mm256_xor_si256(y0, ymmp[0]); + y1 = _mm256_xor_si256(y1, ymmp[1]); + y2 = _mm256_xor_si256(y2, ymmp[2]); + y3 = _mm256_xor_si256(y3, ymmp[3]); + + if (Bxor) { + ymmp = (ymmi *)scrypt_block(Bxor, i); + y0 = _mm256_xor_si256(y0, ymmp[0]); + y1 = _mm256_xor_si256(y1, ymmp[1]); + y2 = _mm256_xor_si256(y2, ymmp[2]); + y3 = _mm256_xor_si256(y3, ymmp[3]); + } + + t0 = y0; + t1 = y1; + t2 = y2; + t3 = y3; + + for (rounds = 8; rounds; rounds -= 2) { + z0 = _mm256_add_epi64(y0, y1); + z0 = _mm256_shuffle_epi32(z0, _MM_SHUFFLE(2,3,0,1)); + y3 = _mm256_xor_si256(y3, z0); + z0 = _mm256_add_epi64(y3, y0); + z1 = _mm256_srli_epi64(z0, 64-13); + y2 = _mm256_xor_si256(y2, z1); + z0 = _mm256_slli_epi64(z0, 13); + y2 = _mm256_xor_si256(y2, z0); + z0 = _mm256_add_epi64(y2, y3); + z1 = _mm256_srli_epi64(z0, 64-39); + y1 = _mm256_xor_si256(y1, z1); + z0 = _mm256_slli_epi64(z0, 39); + y1 = _mm256_xor_si256(y1, z0); + y1 = _mm256_permute4x64_epi64(y1, _MM_SHUFFLE(0,3,2,1)); + y2 = _mm256_permute4x64_epi64(y2, _MM_SHUFFLE(1,0,3,2)); + y3 = _mm256_permute4x64_epi64(y3, _MM_SHUFFLE(2,1,0,3)); + z0 = _mm256_add_epi64(y1, y2); + z0 = _mm256_shuffle_epi32(z0, _MM_SHUFFLE(2,3,0,1)); + y0 = _mm256_xor_si256(y0, z0); + z0 = _mm256_add_epi64(y0, y3); + z0 = _mm256_shuffle_epi32(z0, _MM_SHUFFLE(2,3,0,1)); + y1 = _mm256_xor_si256(y1, z0); + z0 = _mm256_add_epi64(y1, y0); + z1 = _mm256_srli_epi64(z0, 64-13); + y2 = _mm256_xor_si256(y2, z1); + z0 = _mm256_slli_epi64(z0, 13); + y2 = _mm256_xor_si256(y2, z0); + z0 = _mm256_add_epi64(y2, y1); + z1 = _mm256_srli_epi64(z0, 64-39); + y3 = _mm256_xor_si256(y3, z1); + z0 = _mm256_slli_epi64(z0, 39); + y3 = _mm256_xor_si256(y3, z0); + z0 = _mm256_add_epi64(y3, y2); + z0 = _mm256_shuffle_epi32(z0, _MM_SHUFFLE(2,3,0,1)); + y0 = _mm256_xor_si256(y0, z0); + y1 = _mm256_permute4x64_epi64(y1, _MM_SHUFFLE(2,1,0,3)); + y2 = _mm256_permute4x64_epi64(y2, _MM_SHUFFLE(1,0,3,2)); + y3 = _mm256_permute4x64_epi64(y3, _MM_SHUFFLE(0,3,2,1)); + } + + y0 = _mm256_add_epi64(y0, t0); + y1 = _mm256_add_epi64(y1, t1); + y2 = _mm256_add_epi64(y2, t2); + y3 = _mm256_add_epi64(y3, t3); + + /* 4: Y_i = X */ + /* 6: B'[0..r-1] = Y_even */ + /* 6: B'[r..2r-1] = Y_odd */ + ymmp = (ymmi *)scrypt_block(Bout, (i / 2) + half); + ymmp[0] = y0; + ymmp[1] = y1; + ymmp[2] = y2; + ymmp[3] = y3; + } +} + +#endif + +#if defined(SCRYPT_SALSA64_AVX2) + /* uses salsa64_core_tangle_sse2 */ + + #undef SCRYPT_MIX + #define SCRYPT_MIX "Salsa64/8-AVX2" + #undef SCRYPT_SALSA64_INCLUDED + #define SCRYPT_SALSA64_INCLUDED +#endif diff --git a/deps/scrypt-jane-master/code/scrypt-jane-mix_salsa64-sse2.h b/deps/scrypt-jane-master/code/scrypt-jane-mix_salsa64-sse2.h new file mode 100644 index 000000000..971d98a35 --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-mix_salsa64-sse2.h @@ -0,0 +1,449 @@ +/* x64 */ +#if defined(X86_64ASM_SSE2) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_SALSA64_INCLUDED)) && !defined(CPU_X86_FORCE_INTRINSICS) + +#define SCRYPT_SALSA64_SSE2 + +asm_naked_fn_proto(void, scrypt_ChunkMix_sse2)(uint64_t *Bout/*[chunkBytes]*/, uint64_t *Bin/*[chunkBytes]*/, uint64_t *Bxor/*[chunkBytes]*/, uint32_t r) +asm_naked_fn(scrypt_ChunkMix_sse2) + a1(push rbp) + a2(mov rbp, rsp) + a2(and rsp, ~63) + a2(sub rsp, 128) + a2(lea rcx,[ecx*2]) /* zero extend uint32_t by using ecx, win64 can leave garbage in the top half */ + a2(shl rcx,7) + a2(lea r9,[rcx-128]) + a2(lea rax,[rsi+r9]) + a2(lea r9,[rdx+r9]) + a2(and rdx, rdx) + a2(movdqa xmm0,[rax+0]) + a2(movdqa xmm1,[rax+16]) + a2(movdqa xmm2,[rax+32]) + a2(movdqa xmm3,[rax+48]) + a2(movdqa xmm4,[rax+64]) + a2(movdqa xmm5,[rax+80]) + a2(movdqa xmm6,[rax+96]) + a2(movdqa xmm7,[rax+112]) + aj(jz scrypt_ChunkMix_sse2_no_xor1) + a2(pxor xmm0,[r9+0]) + a2(pxor xmm1,[r9+16]) + a2(pxor xmm2,[r9+32]) + a2(pxor xmm3,[r9+48]) + a2(pxor xmm4,[r9+64]) + a2(pxor xmm5,[r9+80]) + a2(pxor xmm6,[r9+96]) + a2(pxor xmm7,[r9+112]) + a1(scrypt_ChunkMix_sse2_no_xor1:) + a2(xor r9,r9) + a2(xor r8,r8) + a1(scrypt_ChunkMix_sse2_loop:) + a2(and rdx, rdx) + a2(pxor xmm0,[rsi+r9+0]) + a2(pxor xmm1,[rsi+r9+16]) + a2(pxor xmm2,[rsi+r9+32]) + a2(pxor xmm3,[rsi+r9+48]) + a2(pxor xmm4,[rsi+r9+64]) + a2(pxor xmm5,[rsi+r9+80]) + a2(pxor xmm6,[rsi+r9+96]) + a2(pxor xmm7,[rsi+r9+112]) + aj(jz scrypt_ChunkMix_sse2_no_xor2) + a2(pxor xmm0,[rdx+r9+0]) + a2(pxor xmm1,[rdx+r9+16]) + a2(pxor xmm2,[rdx+r9+32]) + a2(pxor xmm3,[rdx+r9+48]) + a2(pxor xmm4,[rdx+r9+64]) + a2(pxor xmm5,[rdx+r9+80]) + a2(pxor xmm6,[rdx+r9+96]) + a2(pxor xmm7,[rdx+r9+112]) + a1(scrypt_ChunkMix_sse2_no_xor2:) + a2(movdqa [rsp+0],xmm0) + a2(movdqa [rsp+16],xmm1) + a2(movdqa [rsp+32],xmm2) + a2(movdqa [rsp+48],xmm3) + a2(movdqa [rsp+64],xmm4) + a2(movdqa [rsp+80],xmm5) + a2(movdqa [rsp+96],xmm6) + a2(movdqa [rsp+112],xmm7) + a2(mov rax,8) + a1(scrypt_salsa64_sse2_loop: ) + a2(movdqa xmm8, xmm0) + a2(movdqa xmm9, xmm1) + a2(paddq xmm8, xmm2) + a2(paddq xmm9, xmm3) + a3(pshufd xmm8, xmm8, 0xb1) + a3(pshufd xmm9, xmm9, 0xb1) + a2(pxor xmm6, xmm8) + a2(pxor xmm7, xmm9) + a2(movdqa xmm10, xmm0) + a2(movdqa xmm11, xmm1) + a2(paddq xmm10, xmm6) + a2(paddq xmm11, xmm7) + a2(movdqa xmm8, xmm10) + a2(movdqa xmm9, xmm11) + a2(psrlq xmm10, 51) + a2(psrlq xmm11, 51) + a2(psllq xmm8, 13) + a2(psllq xmm9, 13) + a2(pxor xmm4, xmm10) + a2(pxor xmm5, xmm11) + a2(pxor xmm4, xmm8) + a2(pxor xmm5, xmm9) + a2(movdqa xmm10, xmm6) + a2(movdqa xmm11, xmm7) + a2(paddq xmm10, xmm4) + a2(paddq xmm11, xmm5) + a2(movdqa xmm8, xmm10) + a2(movdqa xmm9, xmm11) + a2(psrlq xmm10, 25) + a2(psrlq xmm11, 25) + a2(psllq xmm8, 39) + a2(psllq xmm9, 39) + a2(pxor xmm2, xmm10) + a2(pxor xmm3, xmm11) + a2(pxor xmm2, xmm8) + a2(pxor xmm3, xmm9) + a2(movdqa xmm8, xmm4) + a2(movdqa xmm9, xmm5) + a2(paddq xmm8, xmm2) + a2(paddq xmm9, xmm3) + a3(pshufd xmm8, xmm8, 0xb1) + a3(pshufd xmm9, xmm9, 0xb1) + a2(pxor xmm0, xmm8) + a2(pxor xmm1, xmm9) + a2(movdqa xmm8, xmm2) + a2(movdqa xmm9, xmm3) + a2(movdqa xmm10, xmm6) + a2(movdqa xmm11, xmm7) + a2(movdqa xmm2, xmm7) + a2(movdqa xmm3, xmm6) + a2(punpcklqdq xmm10, xmm6) + a2(punpcklqdq xmm11, xmm7) + a2(movdqa xmm6, xmm8) + a2(movdqa xmm7, xmm9) + a2(punpcklqdq xmm9, xmm9) + a2(punpcklqdq xmm8, xmm8) + a2(punpckhqdq xmm2, xmm10) + a2(punpckhqdq xmm3, xmm11) + a2(punpckhqdq xmm6, xmm9) + a2(punpckhqdq xmm7, xmm8) + a2(sub rax, 2) + a2(movdqa xmm8, xmm0) + a2(movdqa xmm9, xmm1) + a2(paddq xmm8, xmm2) + a2(paddq xmm9, xmm3) + a3(pshufd xmm8, xmm8, 0xb1) + a3(pshufd xmm9, xmm9, 0xb1) + a2(pxor xmm6, xmm8) + a2(pxor xmm7, xmm9) + a2(movdqa xmm10, xmm0) + a2(movdqa xmm11, xmm1) + a2(paddq xmm10, xmm6) + a2(paddq xmm11, xmm7) + a2(movdqa xmm8, xmm10) + a2(movdqa xmm9, xmm11) + a2(psrlq xmm10, 51) + a2(psrlq xmm11, 51) + a2(psllq xmm8, 13) + a2(psllq xmm9, 13) + a2(pxor xmm5, xmm10) + a2(pxor xmm4, xmm11) + a2(pxor xmm5, xmm8) + a2(pxor xmm4, xmm9) + a2(movdqa xmm10, xmm6) + a2(movdqa xmm11, xmm7) + a2(paddq xmm10, xmm5) + a2(paddq xmm11, xmm4) + a2(movdqa xmm8, xmm10) + a2(movdqa xmm9, xmm11) + a2(psrlq xmm10, 25) + a2(psrlq xmm11, 25) + a2(psllq xmm8, 39) + a2(psllq xmm9, 39) + a2(pxor xmm2, xmm10) + a2(pxor xmm3, xmm11) + a2(pxor xmm2, xmm8) + a2(pxor xmm3, xmm9) + a2(movdqa xmm8, xmm5) + a2(movdqa xmm9, xmm4) + a2(paddq xmm8, xmm2) + a2(paddq xmm9, xmm3) + a3(pshufd xmm8, xmm8, 0xb1) + a3(pshufd xmm9, xmm9, 0xb1) + a2(pxor xmm0, xmm8) + a2(pxor xmm1, xmm9) + a2(movdqa xmm8, xmm2) + a2(movdqa xmm9, xmm3) + a2(movdqa xmm10, xmm6) + a2(movdqa xmm11, xmm7) + a2(movdqa xmm2, xmm7) + a2(movdqa xmm3, xmm6) + a2(punpcklqdq xmm10, xmm6) + a2(punpcklqdq xmm11, xmm7) + a2(movdqa xmm6, xmm8) + a2(movdqa xmm7, xmm9) + a2(punpcklqdq xmm9, xmm9) + a2(punpcklqdq xmm8, xmm8) + a2(punpckhqdq xmm2, xmm10) + a2(punpckhqdq xmm3, xmm11) + a2(punpckhqdq xmm6, xmm9) + a2(punpckhqdq xmm7, xmm8) + aj(ja scrypt_salsa64_sse2_loop) + a2(paddq xmm0,[rsp+0]) + a2(paddq xmm1,[rsp+16]) + a2(paddq xmm2,[rsp+32]) + a2(paddq xmm3,[rsp+48]) + a2(paddq xmm4,[rsp+64]) + a2(paddq xmm5,[rsp+80]) + a2(paddq xmm6,[rsp+96]) + a2(paddq xmm7,[rsp+112]) + a2(lea rax,[r8+r9]) + a2(xor r8,rcx) + a2(and rax,~0xff) + a2(add r9,128) + a2(shr rax,1) + a2(add rax, rdi) + a2(cmp r9,rcx) + a2(movdqa [rax+0],xmm0) + a2(movdqa [rax+16],xmm1) + a2(movdqa [rax+32],xmm2) + a2(movdqa [rax+48],xmm3) + a2(movdqa [rax+64],xmm4) + a2(movdqa [rax+80],xmm5) + a2(movdqa [rax+96],xmm6) + a2(movdqa [rax+112],xmm7) + aj(jne scrypt_ChunkMix_sse2_loop) + a2(mov rsp, rbp) + a1(pop rbp) + a1(ret) +asm_naked_fn_end(scrypt_ChunkMix_sse2) + +#endif + + +/* intrinsic */ +#if defined(X86_INTRINSIC_SSE2) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_SALSA64_INCLUDED)) + +#define SCRYPT_SALSA64_SSE2 + +static void asm_calling_convention +scrypt_ChunkMix_sse2(uint64_t *Bout/*[chunkBytes]*/, uint64_t *Bin/*[chunkBytes]*/, uint64_t *Bxor/*[chunkBytes]*/, uint32_t r) { + uint32_t i, blocksPerChunk = r * 2, half = 0; + xmmi *xmmp,x0,x1,x2,x3,x4,x5,x6,x7,t0,t1,t2,t3,t4,t5,t6,t7,z0,z1,z2,z3; + size_t rounds; + + /* 1: X = B_{2r - 1} */ + xmmp = (xmmi *)scrypt_block(Bin, blocksPerChunk - 1); + x0 = xmmp[0]; + x1 = xmmp[1]; + x2 = xmmp[2]; + x3 = xmmp[3]; + x4 = xmmp[4]; + x5 = xmmp[5]; + x6 = xmmp[6]; + x7 = xmmp[7]; + + if (Bxor) { + xmmp = (xmmi *)scrypt_block(Bxor, blocksPerChunk - 1); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + x4 = _mm_xor_si128(x4, xmmp[4]); + x5 = _mm_xor_si128(x5, xmmp[5]); + x6 = _mm_xor_si128(x6, xmmp[6]); + x7 = _mm_xor_si128(x7, xmmp[7]); + } + + /* 2: for i = 0 to 2r - 1 do */ + for (i = 0; i < blocksPerChunk; i++, half ^= r) { + /* 3: X = H(X ^ B_i) */ + xmmp = (xmmi *)scrypt_block(Bin, i); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + x4 = _mm_xor_si128(x4, xmmp[4]); + x5 = _mm_xor_si128(x5, xmmp[5]); + x6 = _mm_xor_si128(x6, xmmp[6]); + x7 = _mm_xor_si128(x7, xmmp[7]); + + if (Bxor) { + xmmp = (xmmi *)scrypt_block(Bxor, i); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + x4 = _mm_xor_si128(x4, xmmp[4]); + x5 = _mm_xor_si128(x5, xmmp[5]); + x6 = _mm_xor_si128(x6, xmmp[6]); + x7 = _mm_xor_si128(x7, xmmp[7]); + } + + t0 = x0; + t1 = x1; + t2 = x2; + t3 = x3; + t4 = x4; + t5 = x5; + t6 = x6; + t7 = x7; + + for (rounds = 8; rounds; rounds -= 2) { + z0 = _mm_add_epi64(x0, x2); + z1 = _mm_add_epi64(x1, x3); + z0 = _mm_shuffle_epi32(z0, _MM_SHUFFLE(2,3,0,1)); + z1 = _mm_shuffle_epi32(z1, _MM_SHUFFLE(2,3,0,1)); + x6 = _mm_xor_si128(x6, z0); + x7 = _mm_xor_si128(x7, z1); + + z0 = _mm_add_epi64(x6, x0); + z1 = _mm_add_epi64(x7, x1); + z2 = _mm_srli_epi64(z0, 64-13); + z3 = _mm_srli_epi64(z1, 64-13); + z0 = _mm_slli_epi64(z0, 13); + z1 = _mm_slli_epi64(z1, 13); + x4 = _mm_xor_si128(x4, z2); + x5 = _mm_xor_si128(x5, z3); + x4 = _mm_xor_si128(x4, z0); + x5 = _mm_xor_si128(x5, z1); + + z0 = _mm_add_epi64(x4, x6); + z1 = _mm_add_epi64(x5, x7); + z2 = _mm_srli_epi64(z0, 64-39); + z3 = _mm_srli_epi64(z1, 64-39); + z0 = _mm_slli_epi64(z0, 39); + z1 = _mm_slli_epi64(z1, 39); + x2 = _mm_xor_si128(x2, z2); + x3 = _mm_xor_si128(x3, z3); + x2 = _mm_xor_si128(x2, z0); + x3 = _mm_xor_si128(x3, z1); + + z0 = _mm_add_epi64(x2, x4); + z1 = _mm_add_epi64(x3, x5); + z0 = _mm_shuffle_epi32(z0, _MM_SHUFFLE(2,3,0,1)); + z1 = _mm_shuffle_epi32(z1, _MM_SHUFFLE(2,3,0,1)); + x0 = _mm_xor_si128(x0, z0); + x1 = _mm_xor_si128(x1, z1); + + z0 = x4; + z1 = x5; + z2 = x2; + z3 = x3; + x4 = z1; + x5 = z0; + x2 = _mm_unpackhi_epi64(x7, _mm_unpacklo_epi64(x6, x6)); + x3 = _mm_unpackhi_epi64(x6, _mm_unpacklo_epi64(x7, x7)); + x6 = _mm_unpackhi_epi64(z2, _mm_unpacklo_epi64(z3, z3)); + x7 = _mm_unpackhi_epi64(z3, _mm_unpacklo_epi64(z2, z2)); + + z0 = _mm_add_epi64(x0, x2); + z1 = _mm_add_epi64(x1, x3); + z0 = _mm_shuffle_epi32(z0, _MM_SHUFFLE(2,3,0,1)); + z1 = _mm_shuffle_epi32(z1, _MM_SHUFFLE(2,3,0,1)); + x6 = _mm_xor_si128(x6, z0); + x7 = _mm_xor_si128(x7, z1); + + z0 = _mm_add_epi64(x6, x0); + z1 = _mm_add_epi64(x7, x1); + z2 = _mm_srli_epi64(z0, 64-13); + z3 = _mm_srli_epi64(z1, 64-13); + z0 = _mm_slli_epi64(z0, 13); + z1 = _mm_slli_epi64(z1, 13); + x4 = _mm_xor_si128(x4, z2); + x5 = _mm_xor_si128(x5, z3); + x4 = _mm_xor_si128(x4, z0); + x5 = _mm_xor_si128(x5, z1); + + z0 = _mm_add_epi64(x4, x6); + z1 = _mm_add_epi64(x5, x7); + z2 = _mm_srli_epi64(z0, 64-39); + z3 = _mm_srli_epi64(z1, 64-39); + z0 = _mm_slli_epi64(z0, 39); + z1 = _mm_slli_epi64(z1, 39); + x2 = _mm_xor_si128(x2, z2); + x3 = _mm_xor_si128(x3, z3); + x2 = _mm_xor_si128(x2, z0); + x3 = _mm_xor_si128(x3, z1); + + z0 = _mm_add_epi64(x2, x4); + z1 = _mm_add_epi64(x3, x5); + z0 = _mm_shuffle_epi32(z0, _MM_SHUFFLE(2,3,0,1)); + z1 = _mm_shuffle_epi32(z1, _MM_SHUFFLE(2,3,0,1)); + x0 = _mm_xor_si128(x0, z0); + x1 = _mm_xor_si128(x1, z1); + + z0 = x4; + z1 = x5; + z2 = x2; + z3 = x3; + x4 = z1; + x5 = z0; + x2 = _mm_unpackhi_epi64(x7, _mm_unpacklo_epi64(x6, x6)); + x3 = _mm_unpackhi_epi64(x6, _mm_unpacklo_epi64(x7, x7)); + x6 = _mm_unpackhi_epi64(z2, _mm_unpacklo_epi64(z3, z3)); + x7 = _mm_unpackhi_epi64(z3, _mm_unpacklo_epi64(z2, z2)); + } + + x0 = _mm_add_epi64(x0, t0); + x1 = _mm_add_epi64(x1, t1); + x2 = _mm_add_epi64(x2, t2); + x3 = _mm_add_epi64(x3, t3); + x4 = _mm_add_epi64(x4, t4); + x5 = _mm_add_epi64(x5, t5); + x6 = _mm_add_epi64(x6, t6); + x7 = _mm_add_epi64(x7, t7); + + /* 4: Y_i = X */ + /* 6: B'[0..r-1] = Y_even */ + /* 6: B'[r..2r-1] = Y_odd */ + xmmp = (xmmi *)scrypt_block(Bout, (i / 2) + half); + xmmp[0] = x0; + xmmp[1] = x1; + xmmp[2] = x2; + xmmp[3] = x3; + xmmp[4] = x4; + xmmp[5] = x5; + xmmp[6] = x6; + xmmp[7] = x7; + } +} + +#endif + +#if defined(SCRYPT_SALSA64_SSE2) + #undef SCRYPT_MIX + #define SCRYPT_MIX "Salsa64/8-SSE2" + #undef SCRYPT_SALSA64_INCLUDED + #define SCRYPT_SALSA64_INCLUDED +#endif + +/* sse3/avx use this as well */ +#if defined(SCRYPT_SALSA64_INCLUDED) + /* + Default layout: + 0 1 2 3 + 4 5 6 7 + 8 9 10 11 + 12 13 14 15 + + SSE2 layout: + 0 5 10 15 + 12 1 6 11 + 8 13 2 7 + 4 9 14 3 + */ + + + static void asm_calling_convention + salsa64_core_tangle_sse2(uint64_t *blocks, size_t count) { + uint64_t t; + while (count--) { + t = blocks[1]; blocks[1] = blocks[5]; blocks[5] = t; + t = blocks[2]; blocks[2] = blocks[10]; blocks[10] = t; + t = blocks[3]; blocks[3] = blocks[15]; blocks[15] = t; + t = blocks[4]; blocks[4] = blocks[12]; blocks[12] = t; + t = blocks[7]; blocks[7] = blocks[11]; blocks[11] = t; + t = blocks[9]; blocks[9] = blocks[13]; blocks[13] = t; + blocks += 16; + } + } +#endif \ No newline at end of file diff --git a/deps/scrypt-jane-master/code/scrypt-jane-mix_salsa64-ssse3.h b/deps/scrypt-jane-master/code/scrypt-jane-mix_salsa64-ssse3.h new file mode 100644 index 000000000..d18412835 --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-mix_salsa64-ssse3.h @@ -0,0 +1,399 @@ +/* x64 */ +#if defined(X86_64ASM_SSSE3) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_SALSA64_INCLUDED)) && !defined(CPU_X86_FORCE_INTRINSICS) + +#define SCRYPT_SALSA64_SSSE3 + +asm_naked_fn_proto(void, scrypt_ChunkMix_ssse3)(uint64_t *Bout/*[chunkBytes]*/, uint64_t *Bin/*[chunkBytes]*/, uint64_t *Bxor/*[chunkBytes]*/, uint32_t r) +asm_naked_fn(scrypt_ChunkMix_ssse3) + a1(push rbp) + a2(mov rbp, rsp) + a2(and rsp, ~63) + a2(sub rsp, 128) + a2(lea rcx,[ecx*2]) /* zero extend uint32_t by using ecx, win64 can leave garbage in the top half */ + a2(shl rcx,7) + a2(lea r9,[rcx-128]) + a2(lea rax,[rsi+r9]) + a2(lea r9,[rdx+r9]) + a2(and rdx, rdx) + a2(movdqa xmm0,[rax+0]) + a2(movdqa xmm1,[rax+16]) + a2(movdqa xmm2,[rax+32]) + a2(movdqa xmm3,[rax+48]) + a2(movdqa xmm4,[rax+64]) + a2(movdqa xmm5,[rax+80]) + a2(movdqa xmm6,[rax+96]) + a2(movdqa xmm7,[rax+112]) + aj(jz scrypt_ChunkMix_ssse3_no_xor1) + a2(pxor xmm0,[r9+0]) + a2(pxor xmm1,[r9+16]) + a2(pxor xmm2,[r9+32]) + a2(pxor xmm3,[r9+48]) + a2(pxor xmm4,[r9+64]) + a2(pxor xmm5,[r9+80]) + a2(pxor xmm6,[r9+96]) + a2(pxor xmm7,[r9+112]) + a1(scrypt_ChunkMix_ssse3_no_xor1:) + a2(xor r9,r9) + a2(xor r8,r8) + a1(scrypt_ChunkMix_ssse3_loop:) + a2(and rdx, rdx) + a2(pxor xmm0,[rsi+r9+0]) + a2(pxor xmm1,[rsi+r9+16]) + a2(pxor xmm2,[rsi+r9+32]) + a2(pxor xmm3,[rsi+r9+48]) + a2(pxor xmm4,[rsi+r9+64]) + a2(pxor xmm5,[rsi+r9+80]) + a2(pxor xmm6,[rsi+r9+96]) + a2(pxor xmm7,[rsi+r9+112]) + aj(jz scrypt_ChunkMix_ssse3_no_xor2) + a2(pxor xmm0,[rdx+r9+0]) + a2(pxor xmm1,[rdx+r9+16]) + a2(pxor xmm2,[rdx+r9+32]) + a2(pxor xmm3,[rdx+r9+48]) + a2(pxor xmm4,[rdx+r9+64]) + a2(pxor xmm5,[rdx+r9+80]) + a2(pxor xmm6,[rdx+r9+96]) + a2(pxor xmm7,[rdx+r9+112]) + a1(scrypt_ChunkMix_ssse3_no_xor2:) + a2(movdqa [rsp+0],xmm0) + a2(movdqa [rsp+16],xmm1) + a2(movdqa [rsp+32],xmm2) + a2(movdqa [rsp+48],xmm3) + a2(movdqa [rsp+64],xmm4) + a2(movdqa [rsp+80],xmm5) + a2(movdqa [rsp+96],xmm6) + a2(movdqa [rsp+112],xmm7) + a2(mov rax,8) + a1(scrypt_salsa64_ssse3_loop: ) + a2(movdqa xmm8, xmm0) + a2(movdqa xmm9, xmm1) + a2(paddq xmm8, xmm2) + a2(paddq xmm9, xmm3) + a3(pshufd xmm8, xmm8, 0xb1) + a3(pshufd xmm9, xmm9, 0xb1) + a2(pxor xmm6, xmm8) + a2(pxor xmm7, xmm9) + a2(movdqa xmm10, xmm0) + a2(movdqa xmm11, xmm1) + a2(paddq xmm10, xmm6) + a2(paddq xmm11, xmm7) + a2(movdqa xmm8, xmm10) + a2(movdqa xmm9, xmm11) + a2(psrlq xmm10, 51) + a2(psrlq xmm11, 51) + a2(psllq xmm8, 13) + a2(psllq xmm9, 13) + a2(pxor xmm4, xmm10) + a2(pxor xmm5, xmm11) + a2(pxor xmm4, xmm8) + a2(pxor xmm5, xmm9) + a2(movdqa xmm10, xmm6) + a2(movdqa xmm11, xmm7) + a2(paddq xmm10, xmm4) + a2(paddq xmm11, xmm5) + a2(movdqa xmm8, xmm10) + a2(movdqa xmm9, xmm11) + a2(psrlq xmm10, 25) + a2(psrlq xmm11, 25) + a2(psllq xmm8, 39) + a2(psllq xmm9, 39) + a2(pxor xmm2, xmm10) + a2(pxor xmm3, xmm11) + a2(pxor xmm2, xmm8) + a2(pxor xmm3, xmm9) + a2(movdqa xmm8, xmm4) + a2(movdqa xmm9, xmm5) + a2(paddq xmm8, xmm2) + a2(paddq xmm9, xmm3) + a3(pshufd xmm8, xmm8, 0xb1) + a3(pshufd xmm9, xmm9, 0xb1) + a2(pxor xmm0, xmm8) + a2(pxor xmm1, xmm9) + a2(movdqa xmm10, xmm2) + a2(movdqa xmm11, xmm3) + a2(movdqa xmm2, xmm6) + a2(movdqa xmm3, xmm7) + a3(palignr xmm2, xmm7, 8) + a3(palignr xmm3, xmm6, 8) + a2(movdqa xmm6, xmm11) + a2(movdqa xmm7, xmm10) + a3(palignr xmm6, xmm10, 8) + a3(palignr xmm7, xmm11, 8) + a2(sub rax, 2) + a2(movdqa xmm8, xmm0) + a2(movdqa xmm9, xmm1) + a2(paddq xmm8, xmm2) + a2(paddq xmm9, xmm3) + a3(pshufd xmm8, xmm8, 0xb1) + a3(pshufd xmm9, xmm9, 0xb1) + a2(pxor xmm6, xmm8) + a2(pxor xmm7, xmm9) + a2(movdqa xmm10, xmm0) + a2(movdqa xmm11, xmm1) + a2(paddq xmm10, xmm6) + a2(paddq xmm11, xmm7) + a2(movdqa xmm8, xmm10) + a2(movdqa xmm9, xmm11) + a2(psrlq xmm10, 51) + a2(psrlq xmm11, 51) + a2(psllq xmm8, 13) + a2(psllq xmm9, 13) + a2(pxor xmm5, xmm10) + a2(pxor xmm4, xmm11) + a2(pxor xmm5, xmm8) + a2(pxor xmm4, xmm9) + a2(movdqa xmm10, xmm6) + a2(movdqa xmm11, xmm7) + a2(paddq xmm10, xmm5) + a2(paddq xmm11, xmm4) + a2(movdqa xmm8, xmm10) + a2(movdqa xmm9, xmm11) + a2(psrlq xmm10, 25) + a2(psrlq xmm11, 25) + a2(psllq xmm8, 39) + a2(psllq xmm9, 39) + a2(pxor xmm2, xmm10) + a2(pxor xmm3, xmm11) + a2(pxor xmm2, xmm8) + a2(pxor xmm3, xmm9) + a2(movdqa xmm8, xmm5) + a2(movdqa xmm9, xmm4) + a2(paddq xmm8, xmm2) + a2(paddq xmm9, xmm3) + a3(pshufd xmm8, xmm8, 0xb1) + a3(pshufd xmm9, xmm9, 0xb1) + a2(pxor xmm0, xmm8) + a2(pxor xmm1, xmm9) + a2(movdqa xmm10, xmm2) + a2(movdqa xmm11, xmm3) + a2(movdqa xmm2, xmm6) + a2(movdqa xmm3, xmm7) + a3(palignr xmm2, xmm7, 8) + a3(palignr xmm3, xmm6, 8) + a2(movdqa xmm6, xmm11) + a2(movdqa xmm7, xmm10) + a3(palignr xmm6, xmm10, 8) + a3(palignr xmm7, xmm11, 8) + aj(ja scrypt_salsa64_ssse3_loop) + a2(paddq xmm0,[rsp+0]) + a2(paddq xmm1,[rsp+16]) + a2(paddq xmm2,[rsp+32]) + a2(paddq xmm3,[rsp+48]) + a2(paddq xmm4,[rsp+64]) + a2(paddq xmm5,[rsp+80]) + a2(paddq xmm6,[rsp+96]) + a2(paddq xmm7,[rsp+112]) + a2(lea rax,[r8+r9]) + a2(xor r8,rcx) + a2(and rax,~0xff) + a2(add r9,128) + a2(shr rax,1) + a2(add rax, rdi) + a2(cmp r9,rcx) + a2(movdqa [rax+0],xmm0) + a2(movdqa [rax+16],xmm1) + a2(movdqa [rax+32],xmm2) + a2(movdqa [rax+48],xmm3) + a2(movdqa [rax+64],xmm4) + a2(movdqa [rax+80],xmm5) + a2(movdqa [rax+96],xmm6) + a2(movdqa [rax+112],xmm7) + aj(jne scrypt_ChunkMix_ssse3_loop) + a2(mov rsp, rbp) + a1(pop rbp) + a1(ret) +asm_naked_fn_end(scrypt_ChunkMix_ssse3) + +#endif + + +/* intrinsic */ +#if defined(X86_INTRINSIC_SSSE3) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_SALSA64_INCLUDED)) + +#define SCRYPT_SALSA64_SSSE3 + +static void asm_calling_convention +scrypt_ChunkMix_ssse3(uint64_t *Bout/*[chunkBytes]*/, uint64_t *Bin/*[chunkBytes]*/, uint64_t *Bxor/*[chunkBytes]*/, uint32_t r) { + uint32_t i, blocksPerChunk = r * 2, half = 0; + xmmi *xmmp,x0,x1,x2,x3,x4,x5,x6,x7,t0,t1,t2,t3,t4,t5,t6,t7,z0,z1,z2,z3; + size_t rounds; + + /* 1: X = B_{2r - 1} */ + xmmp = (xmmi *)scrypt_block(Bin, blocksPerChunk - 1); + x0 = xmmp[0]; + x1 = xmmp[1]; + x2 = xmmp[2]; + x3 = xmmp[3]; + x4 = xmmp[4]; + x5 = xmmp[5]; + x6 = xmmp[6]; + x7 = xmmp[7]; + + if (Bxor) { + xmmp = (xmmi *)scrypt_block(Bxor, blocksPerChunk - 1); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + x4 = _mm_xor_si128(x4, xmmp[4]); + x5 = _mm_xor_si128(x5, xmmp[5]); + x6 = _mm_xor_si128(x6, xmmp[6]); + x7 = _mm_xor_si128(x7, xmmp[7]); + } + + /* 2: for i = 0 to 2r - 1 do */ + for (i = 0; i < blocksPerChunk; i++, half ^= r) { + /* 3: X = H(X ^ B_i) */ + xmmp = (xmmi *)scrypt_block(Bin, i); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + x4 = _mm_xor_si128(x4, xmmp[4]); + x5 = _mm_xor_si128(x5, xmmp[5]); + x6 = _mm_xor_si128(x6, xmmp[6]); + x7 = _mm_xor_si128(x7, xmmp[7]); + + if (Bxor) { + xmmp = (xmmi *)scrypt_block(Bxor, i); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + x4 = _mm_xor_si128(x4, xmmp[4]); + x5 = _mm_xor_si128(x5, xmmp[5]); + x6 = _mm_xor_si128(x6, xmmp[6]); + x7 = _mm_xor_si128(x7, xmmp[7]); + } + + t0 = x0; + t1 = x1; + t2 = x2; + t3 = x3; + t4 = x4; + t5 = x5; + t6 = x6; + t7 = x7; + + for (rounds = 8; rounds; rounds -= 2) { + z0 = _mm_add_epi64(x0, x2); + z1 = _mm_add_epi64(x1, x3); + z0 = _mm_shuffle_epi32(z0, _MM_SHUFFLE(2,3,0,1)); + z1 = _mm_shuffle_epi32(z1, _MM_SHUFFLE(2,3,0,1)); + x6 = _mm_xor_si128(x6, z0); + x7 = _mm_xor_si128(x7, z1); + + z0 = _mm_add_epi64(x6, x0); + z1 = _mm_add_epi64(x7, x1); + z2 = _mm_srli_epi64(z0, 64-13); + z3 = _mm_srli_epi64(z1, 64-13); + z0 = _mm_slli_epi64(z0, 13); + z1 = _mm_slli_epi64(z1, 13); + x4 = _mm_xor_si128(x4, z2); + x5 = _mm_xor_si128(x5, z3); + x4 = _mm_xor_si128(x4, z0); + x5 = _mm_xor_si128(x5, z1); + + z0 = _mm_add_epi64(x4, x6); + z1 = _mm_add_epi64(x5, x7); + z2 = _mm_srli_epi64(z0, 64-39); + z3 = _mm_srli_epi64(z1, 64-39); + z0 = _mm_slli_epi64(z0, 39); + z1 = _mm_slli_epi64(z1, 39); + x2 = _mm_xor_si128(x2, z2); + x3 = _mm_xor_si128(x3, z3); + x2 = _mm_xor_si128(x2, z0); + x3 = _mm_xor_si128(x3, z1); + + z0 = _mm_add_epi64(x2, x4); + z1 = _mm_add_epi64(x3, x5); + z0 = _mm_shuffle_epi32(z0, _MM_SHUFFLE(2,3,0,1)); + z1 = _mm_shuffle_epi32(z1, _MM_SHUFFLE(2,3,0,1)); + x0 = _mm_xor_si128(x0, z0); + x1 = _mm_xor_si128(x1, z1); + + z0 = x2; + z1 = x3; + x2 = _mm_alignr_epi8(x6, x7, 8); + x3 = _mm_alignr_epi8(x7, x6, 8); + x6 = _mm_alignr_epi8(z1, z0, 8); + x7 = _mm_alignr_epi8(z0, z1, 8); + + z0 = _mm_add_epi64(x0, x2); + z1 = _mm_add_epi64(x1, x3); + z0 = _mm_shuffle_epi32(z0, _MM_SHUFFLE(2,3,0,1)); + z1 = _mm_shuffle_epi32(z1, _MM_SHUFFLE(2,3,0,1)); + x6 = _mm_xor_si128(x6, z0); + x7 = _mm_xor_si128(x7, z1); + + z0 = _mm_add_epi64(x6, x0); + z1 = _mm_add_epi64(x7, x1); + z2 = _mm_srli_epi64(z0, 64-13); + z3 = _mm_srli_epi64(z1, 64-13); + z0 = _mm_slli_epi64(z0, 13); + z1 = _mm_slli_epi64(z1, 13); + x5 = _mm_xor_si128(x5, z2); + x4 = _mm_xor_si128(x4, z3); + x5 = _mm_xor_si128(x5, z0); + x4 = _mm_xor_si128(x4, z1); + + z0 = _mm_add_epi64(x5, x6); + z1 = _mm_add_epi64(x4, x7); + z2 = _mm_srli_epi64(z0, 64-39); + z3 = _mm_srli_epi64(z1, 64-39); + z0 = _mm_slli_epi64(z0, 39); + z1 = _mm_slli_epi64(z1, 39); + x2 = _mm_xor_si128(x2, z2); + x3 = _mm_xor_si128(x3, z3); + x2 = _mm_xor_si128(x2, z0); + x3 = _mm_xor_si128(x3, z1); + + z0 = _mm_add_epi64(x2, x5); + z1 = _mm_add_epi64(x3, x4); + z0 = _mm_shuffle_epi32(z0, _MM_SHUFFLE(2,3,0,1)); + z1 = _mm_shuffle_epi32(z1, _MM_SHUFFLE(2,3,0,1)); + x0 = _mm_xor_si128(x0, z0); + x1 = _mm_xor_si128(x1, z1); + + z0 = x2; + z1 = x3; + x2 = _mm_alignr_epi8(x6, x7, 8); + x3 = _mm_alignr_epi8(x7, x6, 8); + x6 = _mm_alignr_epi8(z1, z0, 8); + x7 = _mm_alignr_epi8(z0, z1, 8); + } + + x0 = _mm_add_epi64(x0, t0); + x1 = _mm_add_epi64(x1, t1); + x2 = _mm_add_epi64(x2, t2); + x3 = _mm_add_epi64(x3, t3); + x4 = _mm_add_epi64(x4, t4); + x5 = _mm_add_epi64(x5, t5); + x6 = _mm_add_epi64(x6, t6); + x7 = _mm_add_epi64(x7, t7); + + /* 4: Y_i = X */ + /* 6: B'[0..r-1] = Y_even */ + /* 6: B'[r..2r-1] = Y_odd */ + xmmp = (xmmi *)scrypt_block(Bout, (i / 2) + half); + xmmp[0] = x0; + xmmp[1] = x1; + xmmp[2] = x2; + xmmp[3] = x3; + xmmp[4] = x4; + xmmp[5] = x5; + xmmp[6] = x6; + xmmp[7] = x7; + } +} + +#endif + +#if defined(SCRYPT_SALSA64_SSSE3) + /* uses salsa64_core_tangle_sse2 */ + + #undef SCRYPT_MIX + #define SCRYPT_MIX "Salsa64/8-SSSE3" + #undef SCRYPT_SALSA64_INCLUDED + #define SCRYPT_SALSA64_INCLUDED +#endif diff --git a/deps/scrypt-jane-master/code/scrypt-jane-mix_salsa64-xop.h b/deps/scrypt-jane-master/code/scrypt-jane-mix_salsa64-xop.h new file mode 100644 index 000000000..d51d1121d --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-mix_salsa64-xop.h @@ -0,0 +1,335 @@ +/* x64 */ +#if defined(X86_64ASM_XOP) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_SALSA64_INCLUDED)) && !defined(CPU_X86_FORCE_INTRINSICS) + +#define SCRYPT_SALSA64_XOP + +asm_naked_fn_proto(void, scrypt_ChunkMix_xop)(uint64_t *Bout/*[chunkBytes]*/, uint64_t *Bin/*[chunkBytes]*/, uint64_t *Bxor/*[chunkBytes]*/, uint32_t r) +asm_naked_fn(scrypt_ChunkMix_xop) + a1(push rbp) + a2(mov rbp, rsp) + a2(and rsp, ~63) + a2(sub rsp, 128) + a2(lea rcx,[ecx*2]) /* zero extend uint32_t by using ecx, win64 can leave garbage in the top half */ + a2(shl rcx,7) + a2(lea r9,[rcx-128]) + a2(lea rax,[rsi+r9]) + a2(lea r9,[rdx+r9]) + a2(and rdx, rdx) + a2(vmovdqa xmm0,[rax+0]) + a2(vmovdqa xmm1,[rax+16]) + a2(vmovdqa xmm2,[rax+32]) + a2(vmovdqa xmm3,[rax+48]) + a2(vmovdqa xmm4,[rax+64]) + a2(vmovdqa xmm5,[rax+80]) + a2(vmovdqa xmm6,[rax+96]) + a2(vmovdqa xmm7,[rax+112]) + aj(jz scrypt_ChunkMix_xop_no_xor1) + a3(vpxor xmm0,xmm0,[r9+0]) + a3(vpxor xmm1,xmm1,[r9+16]) + a3(vpxor xmm2,xmm2,[r9+32]) + a3(vpxor xmm3,xmm3,[r9+48]) + a3(vpxor xmm4,xmm4,[r9+64]) + a3(vpxor xmm5,xmm5,[r9+80]) + a3(vpxor xmm6,xmm6,[r9+96]) + a3(vpxor xmm7,xmm7,[r9+112]) + a1(scrypt_ChunkMix_xop_no_xor1:) + a2(xor r9,r9) + a2(xor r8,r8) + a1(scrypt_ChunkMix_xop_loop:) + a2(and rdx, rdx) + a3(vpxor xmm0,xmm0,[rsi+r9+0]) + a3(vpxor xmm1,xmm1,[rsi+r9+16]) + a3(vpxor xmm2,xmm2,[rsi+r9+32]) + a3(vpxor xmm3,xmm3,[rsi+r9+48]) + a3(vpxor xmm4,xmm4,[rsi+r9+64]) + a3(vpxor xmm5,xmm5,[rsi+r9+80]) + a3(vpxor xmm6,xmm6,[rsi+r9+96]) + a3(vpxor xmm7,xmm7,[rsi+r9+112]) + aj(jz scrypt_ChunkMix_xop_no_xor2) + a3(vpxor xmm0,xmm0,[rdx+r9+0]) + a3(vpxor xmm1,xmm1,[rdx+r9+16]) + a3(vpxor xmm2,xmm2,[rdx+r9+32]) + a3(vpxor xmm3,xmm3,[rdx+r9+48]) + a3(vpxor xmm4,xmm4,[rdx+r9+64]) + a3(vpxor xmm5,xmm5,[rdx+r9+80]) + a3(vpxor xmm6,xmm6,[rdx+r9+96]) + a3(vpxor xmm7,xmm7,[rdx+r9+112]) + a1(scrypt_ChunkMix_xop_no_xor2:) + a2(vmovdqa [rsp+0],xmm0) + a2(vmovdqa [rsp+16],xmm1) + a2(vmovdqa [rsp+32],xmm2) + a2(vmovdqa [rsp+48],xmm3) + a2(vmovdqa [rsp+64],xmm4) + a2(vmovdqa [rsp+80],xmm5) + a2(vmovdqa [rsp+96],xmm6) + a2(vmovdqa [rsp+112],xmm7) + a2(mov rax,8) + a1(scrypt_salsa64_xop_loop: ) + a3(vpaddq xmm8, xmm0, xmm2) + a3(vpaddq xmm9, xmm1, xmm3) + a3(vpshufd xmm8, xmm8, 0xb1) + a3(vpshufd xmm9, xmm9, 0xb1) + a3(vpxor xmm6, xmm6, xmm8) + a3(vpxor xmm7, xmm7, xmm9) + a3(vpaddq xmm10, xmm0, xmm6) + a3(vpaddq xmm11, xmm1, xmm7) + a3(vprotq xmm10, xmm10, 13) + a3(vprotq xmm11, xmm11, 13) + a3(vpxor xmm4, xmm4, xmm10) + a3(vpxor xmm5, xmm5, xmm11) + a3(vpaddq xmm8, xmm6, xmm4) + a3(vpaddq xmm9, xmm7, xmm5) + a3(vprotq xmm8, xmm8, 39) + a3(vprotq xmm9, xmm9, 39) + a3(vpxor xmm2, xmm2, xmm8) + a3(vpxor xmm3, xmm3, xmm9) + a3(vpaddq xmm10, xmm4, xmm2) + a3(vpaddq xmm11, xmm5, xmm3) + a3(vpshufd xmm10, xmm10, 0xb1) + a3(vpshufd xmm11, xmm11, 0xb1) + a3(vpxor xmm0, xmm0, xmm10) + a3(vpxor xmm1, xmm1, xmm11) + a2(vmovdqa xmm8, xmm2) + a2(vmovdqa xmm9, xmm3) + a4(vpalignr xmm2, xmm6, xmm7, 8) + a4(vpalignr xmm3, xmm7, xmm6, 8) + a4(vpalignr xmm6, xmm9, xmm8, 8) + a4(vpalignr xmm7, xmm8, xmm9, 8) + a3(vpaddq xmm10, xmm0, xmm2) + a3(vpaddq xmm11, xmm1, xmm3) + a3(vpshufd xmm10, xmm10, 0xb1) + a3(vpshufd xmm11, xmm11, 0xb1) + a3(vpxor xmm6, xmm6, xmm10) + a3(vpxor xmm7, xmm7, xmm11) + a3(vpaddq xmm8, xmm0, xmm6) + a3(vpaddq xmm9, xmm1, xmm7) + a3(vprotq xmm8, xmm8, 13) + a3(vprotq xmm9, xmm9, 13) + a3(vpxor xmm5, xmm5, xmm8) + a3(vpxor xmm4, xmm4, xmm9) + a3(vpaddq xmm10, xmm6, xmm5) + a3(vpaddq xmm11, xmm7, xmm4) + a3(vprotq xmm10, xmm10, 39) + a3(vprotq xmm11, xmm11, 39) + a3(vpxor xmm2, xmm2, xmm10) + a3(vpxor xmm3, xmm3, xmm11) + a3(vpaddq xmm8, xmm5, xmm2) + a3(vpaddq xmm9, xmm4, xmm3) + a3(vpshufd xmm8, xmm8, 0xb1) + a3(vpshufd xmm9, xmm9, 0xb1) + a3(vpxor xmm0, xmm0, xmm8) + a3(vpxor xmm1, xmm1, xmm9) + a2(vmovdqa xmm10, xmm2) + a2(vmovdqa xmm11, xmm3) + a4(vpalignr xmm2, xmm6, xmm7, 8) + a4(vpalignr xmm3, xmm7, xmm6, 8) + a4(vpalignr xmm6, xmm11, xmm10, 8) + a4(vpalignr xmm7, xmm10, xmm11, 8) + a2(sub rax, 2) + aj(ja scrypt_salsa64_xop_loop) + a3(vpaddq xmm0,xmm0,[rsp+0]) + a3(vpaddq xmm1,xmm1,[rsp+16]) + a3(vpaddq xmm2,xmm2,[rsp+32]) + a3(vpaddq xmm3,xmm3,[rsp+48]) + a3(vpaddq xmm4,xmm4,[rsp+64]) + a3(vpaddq xmm5,xmm5,[rsp+80]) + a3(vpaddq xmm6,xmm6,[rsp+96]) + a3(vpaddq xmm7,xmm7,[rsp+112]) + a2(lea rax,[r8+r9]) + a2(xor r8,rcx) + a2(and rax,~0xff) + a2(add r9,128) + a2(shr rax,1) + a2(add rax, rdi) + a2(cmp r9,rcx) + a2(vmovdqa [rax+0],xmm0) + a2(vmovdqa [rax+16],xmm1) + a2(vmovdqa [rax+32],xmm2) + a2(vmovdqa [rax+48],xmm3) + a2(vmovdqa [rax+64],xmm4) + a2(vmovdqa [rax+80],xmm5) + a2(vmovdqa [rax+96],xmm6) + a2(vmovdqa [rax+112],xmm7) + aj(jne scrypt_ChunkMix_xop_loop) + a2(mov rsp, rbp) + a1(pop rbp) + a1(ret) +asm_naked_fn_end(scrypt_ChunkMix_xop) + +#endif + + +/* intrinsic */ +#if defined(X86_INTRINSIC_XOP) && (!defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_SALSA64_INCLUDED)) + +#define SCRYPT_SALSA64_XOP + +static void asm_calling_convention +scrypt_ChunkMix_xop(uint64_t *Bout/*[chunkBytes]*/, uint64_t *Bin/*[chunkBytes]*/, uint64_t *Bxor/*[chunkBytes]*/, uint32_t r) { + uint32_t i, blocksPerChunk = r * 2, half = 0; + xmmi *xmmp,x0,x1,x2,x3,x4,x5,x6,x7,t0,t1,t2,t3,t4,t5,t6,t7,z0,z1,z2,z3; + size_t rounds; + + /* 1: X = B_{2r - 1} */ + xmmp = (xmmi *)scrypt_block(Bin, blocksPerChunk - 1); + x0 = xmmp[0]; + x1 = xmmp[1]; + x2 = xmmp[2]; + x3 = xmmp[3]; + x4 = xmmp[4]; + x5 = xmmp[5]; + x6 = xmmp[6]; + x7 = xmmp[7]; + + if (Bxor) { + xmmp = (xmmi *)scrypt_block(Bxor, blocksPerChunk - 1); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + x4 = _mm_xor_si128(x4, xmmp[4]); + x5 = _mm_xor_si128(x5, xmmp[5]); + x6 = _mm_xor_si128(x6, xmmp[6]); + x7 = _mm_xor_si128(x7, xmmp[7]); + } + + /* 2: for i = 0 to 2r - 1 do */ + for (i = 0; i < blocksPerChunk; i++, half ^= r) { + /* 3: X = H(X ^ B_i) */ + xmmp = (xmmi *)scrypt_block(Bin, i); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + x4 = _mm_xor_si128(x4, xmmp[4]); + x5 = _mm_xor_si128(x5, xmmp[5]); + x6 = _mm_xor_si128(x6, xmmp[6]); + x7 = _mm_xor_si128(x7, xmmp[7]); + + if (Bxor) { + xmmp = (xmmi *)scrypt_block(Bxor, i); + x0 = _mm_xor_si128(x0, xmmp[0]); + x1 = _mm_xor_si128(x1, xmmp[1]); + x2 = _mm_xor_si128(x2, xmmp[2]); + x3 = _mm_xor_si128(x3, xmmp[3]); + x4 = _mm_xor_si128(x4, xmmp[4]); + x5 = _mm_xor_si128(x5, xmmp[5]); + x6 = _mm_xor_si128(x6, xmmp[6]); + x7 = _mm_xor_si128(x7, xmmp[7]); + } + + t0 = x0; + t1 = x1; + t2 = x2; + t3 = x3; + t4 = x4; + t5 = x5; + t6 = x6; + t7 = x7; + + for (rounds = 8; rounds; rounds -= 2) { + z0 = _mm_add_epi64(x0, x2); + z1 = _mm_add_epi64(x1, x3); + z0 = _mm_shuffle_epi32(z0, _MM_SHUFFLE(2,3,0,1)); + z1 = _mm_shuffle_epi32(z1, _MM_SHUFFLE(2,3,0,1)); + x6 = _mm_xor_si128(x6, z0); + x7 = _mm_xor_si128(x7, z1); + + z0 = _mm_add_epi64(x6, x0); + z1 = _mm_add_epi64(x7, x1); + z0 = _mm_roti_epi64(z0, 13); + z1 = _mm_roti_epi64(z1, 13); + x4 = _mm_xor_si128(x4, z0); + x5 = _mm_xor_si128(x5, z1); + + z0 = _mm_add_epi64(x4, x6); + z1 = _mm_add_epi64(x5, x7); + z0 = _mm_roti_epi64(z0, 39); + z1 = _mm_roti_epi64(z1, 39); + x2 = _mm_xor_si128(x2, z0); + x3 = _mm_xor_si128(x3, z1); + + z0 = _mm_add_epi64(x2, x4); + z1 = _mm_add_epi64(x3, x5); + z0 = _mm_shuffle_epi32(z0, _MM_SHUFFLE(2,3,0,1)); + z1 = _mm_shuffle_epi32(z1, _MM_SHUFFLE(2,3,0,1)); + x0 = _mm_xor_si128(x0, z0); + x1 = _mm_xor_si128(x1, z1); + + z0 = x2; + z1 = x3; + x2 = _mm_alignr_epi8(x6, x7, 8); + x3 = _mm_alignr_epi8(x7, x6, 8); + x6 = _mm_alignr_epi8(z1, z0, 8); + x7 = _mm_alignr_epi8(z0, z1, 8); + + z0 = _mm_add_epi64(x0, x2); + z1 = _mm_add_epi64(x1, x3); + z0 = _mm_shuffle_epi32(z0, _MM_SHUFFLE(2,3,0,1)); + z1 = _mm_shuffle_epi32(z1, _MM_SHUFFLE(2,3,0,1)); + x6 = _mm_xor_si128(x6, z0); + x7 = _mm_xor_si128(x7, z1); + + z0 = _mm_add_epi64(x6, x0); + z1 = _mm_add_epi64(x7, x1); + z0 = _mm_roti_epi64(z0, 13); + z1 = _mm_roti_epi64(z1, 13); + x5 = _mm_xor_si128(x5, z0); + x4 = _mm_xor_si128(x4, z1); + + z0 = _mm_add_epi64(x5, x6); + z1 = _mm_add_epi64(x4, x7); + z0 = _mm_roti_epi64(z0, 39); + z1 = _mm_roti_epi64(z1, 39); + x2 = _mm_xor_si128(x2, z0); + x3 = _mm_xor_si128(x3, z1); + + z0 = _mm_add_epi64(x2, x5); + z1 = _mm_add_epi64(x3, x4); + z0 = _mm_shuffle_epi32(z0, _MM_SHUFFLE(2,3,0,1)); + z1 = _mm_shuffle_epi32(z1, _MM_SHUFFLE(2,3,0,1)); + x0 = _mm_xor_si128(x0, z0); + x1 = _mm_xor_si128(x1, z1); + + z0 = x2; + z1 = x3; + x2 = _mm_alignr_epi8(x6, x7, 8); + x3 = _mm_alignr_epi8(x7, x6, 8); + x6 = _mm_alignr_epi8(z1, z0, 8); + x7 = _mm_alignr_epi8(z0, z1, 8); + } + + x0 = _mm_add_epi64(x0, t0); + x1 = _mm_add_epi64(x1, t1); + x2 = _mm_add_epi64(x2, t2); + x3 = _mm_add_epi64(x3, t3); + x4 = _mm_add_epi64(x4, t4); + x5 = _mm_add_epi64(x5, t5); + x6 = _mm_add_epi64(x6, t6); + x7 = _mm_add_epi64(x7, t7); + + /* 4: Y_i = X */ + /* 6: B'[0..r-1] = Y_even */ + /* 6: B'[r..2r-1] = Y_odd */ + xmmp = (xmmi *)scrypt_block(Bout, (i / 2) + half); + xmmp[0] = x0; + xmmp[1] = x1; + xmmp[2] = x2; + xmmp[3] = x3; + xmmp[4] = x4; + xmmp[5] = x5; + xmmp[6] = x6; + xmmp[7] = x7; + } +} + +#endif + +#if defined(SCRYPT_SALSA64_XOP) + /* uses salsa64_core_tangle_sse2 */ + + #undef SCRYPT_MIX + #define SCRYPT_MIX "Salsa64/8-XOP" + #undef SCRYPT_SALSA64_INCLUDED + #define SCRYPT_SALSA64_INCLUDED +#endif diff --git a/deps/scrypt-jane-master/code/scrypt-jane-mix_salsa64.h b/deps/scrypt-jane-master/code/scrypt-jane-mix_salsa64.h new file mode 100644 index 000000000..2aec04f33 --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-mix_salsa64.h @@ -0,0 +1,41 @@ +#if !defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_SALSA64_INCLUDED) + +#undef SCRYPT_MIX +#define SCRYPT_MIX "Salsa64/8 Ref" + +#undef SCRYPT_SALSA64_INCLUDED +#define SCRYPT_SALSA64_INCLUDED +#define SCRYPT_SALSA64_BASIC + +static void +salsa64_core_basic(uint64_t state[16]) { + const size_t rounds = 8; + uint64_t v[16], t; + size_t i; + + for (i = 0; i < 16; i++) v[i] = state[i]; + + #define G(a,b,c,d) \ + t = v[a]+v[d]; t = ROTL64(t, 32); v[b] ^= t; \ + t = v[b]+v[a]; t = ROTL64(t, 13); v[c] ^= t; \ + t = v[c]+v[b]; t = ROTL64(t, 39); v[d] ^= t; \ + t = v[d]+v[c]; t = ROTL64(t, 32); v[a] ^= t; \ + + for (i = 0; i < rounds; i += 2) { + G( 0, 4, 8,12); + G( 5, 9,13, 1); + G(10,14, 2, 6); + G(15, 3, 7,11); + G( 0, 1, 2, 3); + G( 5, 6, 7, 4); + G(10,11, 8, 9); + G(15,12,13,14); + } + + for (i = 0; i < 16; i++) state[i] += v[i]; + + #undef G +} + +#endif + diff --git a/deps/scrypt-jane-master/code/scrypt-jane-pbkdf2.h b/deps/scrypt-jane-master/code/scrypt-jane-pbkdf2.h new file mode 100644 index 000000000..711e3d633 --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-pbkdf2.h @@ -0,0 +1,112 @@ +typedef struct scrypt_hmac_state_t { + scrypt_hash_state inner, outer; +} scrypt_hmac_state; + + +static void +scrypt_hash(scrypt_hash_digest hash, const uint8_t *m, size_t mlen) { + scrypt_hash_state st; + scrypt_hash_init(&st); + scrypt_hash_update(&st, m, mlen); + scrypt_hash_finish(&st, hash); +} + +/* hmac */ +static void +scrypt_hmac_init(scrypt_hmac_state *st, const uint8_t *key, size_t keylen) { + uint8_t pad[SCRYPT_HASH_BLOCK_SIZE] = {0}; + size_t i; + + scrypt_hash_init(&st->inner); + scrypt_hash_init(&st->outer); + + if (keylen <= SCRYPT_HASH_BLOCK_SIZE) { + /* use the key directly if it's <= blocksize bytes */ + memcpy(pad, key, keylen); + } else { + /* if it's > blocksize bytes, hash it */ + scrypt_hash(pad, key, keylen); + } + + /* inner = (key ^ 0x36) */ + /* h(inner || ...) */ + for (i = 0; i < SCRYPT_HASH_BLOCK_SIZE; i++) + pad[i] ^= 0x36; + scrypt_hash_update(&st->inner, pad, SCRYPT_HASH_BLOCK_SIZE); + + /* outer = (key ^ 0x5c) */ + /* h(outer || ...) */ + for (i = 0; i < SCRYPT_HASH_BLOCK_SIZE; i++) + pad[i] ^= (0x5c ^ 0x36); + scrypt_hash_update(&st->outer, pad, SCRYPT_HASH_BLOCK_SIZE); + + scrypt_ensure_zero(pad, sizeof(pad)); +} + +static void +scrypt_hmac_update(scrypt_hmac_state *st, const uint8_t *m, size_t mlen) { + /* h(inner || m...) */ + scrypt_hash_update(&st->inner, m, mlen); +} + +static void +scrypt_hmac_finish(scrypt_hmac_state *st, scrypt_hash_digest mac) { + /* h(inner || m) */ + scrypt_hash_digest innerhash; + scrypt_hash_finish(&st->inner, innerhash); + + /* h(outer || h(inner || m)) */ + scrypt_hash_update(&st->outer, innerhash, sizeof(innerhash)); + scrypt_hash_finish(&st->outer, mac); + + scrypt_ensure_zero(st, sizeof(*st)); +} + +static void +scrypt_pbkdf2(const uint8_t *password, size_t password_len, const uint8_t *salt, size_t salt_len, uint64_t N, uint8_t *out, size_t bytes) { + scrypt_hmac_state hmac_pw, hmac_pw_salt, work; + scrypt_hash_digest ti, u; + uint8_t be[4]; + uint32_t i, j, blocks; + uint64_t c; + + /* bytes must be <= (0xffffffff - (SCRYPT_HASH_DIGEST_SIZE - 1)), which they will always be under scrypt */ + + /* hmac(password, ...) */ + scrypt_hmac_init(&hmac_pw, password, password_len); + + /* hmac(password, salt...) */ + hmac_pw_salt = hmac_pw; + scrypt_hmac_update(&hmac_pw_salt, salt, salt_len); + + blocks = ((uint32_t)bytes + (SCRYPT_HASH_DIGEST_SIZE - 1)) / SCRYPT_HASH_DIGEST_SIZE; + for (i = 1; i <= blocks; i++) { + /* U1 = hmac(password, salt || be(i)) */ + U32TO8_BE(be, i); + work = hmac_pw_salt; + scrypt_hmac_update(&work, be, 4); + scrypt_hmac_finish(&work, ti); + memcpy(u, ti, sizeof(u)); + + /* T[i] = U1 ^ U2 ^ U3... */ + for (c = 0; c < N - 1; c++) { + /* UX = hmac(password, U{X-1}) */ + work = hmac_pw; + scrypt_hmac_update(&work, u, SCRYPT_HASH_DIGEST_SIZE); + scrypt_hmac_finish(&work, u); + + /* T[i] ^= UX */ + for (j = 0; j < sizeof(u); j++) + ti[j] ^= u[j]; + } + + memcpy(out, ti, (bytes > SCRYPT_HASH_DIGEST_SIZE) ? SCRYPT_HASH_DIGEST_SIZE : bytes); + out += SCRYPT_HASH_DIGEST_SIZE; + bytes -= SCRYPT_HASH_DIGEST_SIZE; + } + + scrypt_ensure_zero(ti, sizeof(ti)); + scrypt_ensure_zero(u, sizeof(u)); + scrypt_ensure_zero(&hmac_pw, sizeof(hmac_pw)); + scrypt_ensure_zero(&hmac_pw_salt, sizeof(hmac_pw_salt)); +} diff --git a/deps/scrypt-jane-master/code/scrypt-jane-portable-x86.h b/deps/scrypt-jane-master/code/scrypt-jane-portable-x86.h new file mode 100644 index 000000000..7c1209087 --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-portable-x86.h @@ -0,0 +1,469 @@ +#if defined(CPU_X86) && (defined(COMPILER_MSVC) || defined(COMPILER_GCC)) + #define X86ASM + + /* gcc 2.95 royally screws up stack alignments on variables */ + #if ((defined(COMPILER_MSVC) && (COMPILER_MSVC >= COMPILER_MSVC_VS6PP)) || (defined(COMPILER_GCC) && (COMPILER_GCC >= 30000))) + #define X86ASM_SSE + #define X86ASM_SSE2 + #endif + #if ((defined(COMPILER_MSVC) && (COMPILER_MSVC >= COMPILER_MSVC_VS2005)) || (defined(COMPILER_GCC) && (COMPILER_GCC >= 40102))) + #define X86ASM_SSSE3 + #endif + #if ((defined(COMPILER_MSVC) && (COMPILER_MSVC >= COMPILER_MSVC_VS2010SP1)) || (defined(COMPILER_GCC) && (COMPILER_GCC >= 40400))) + #define X86ASM_AVX + #define X86ASM_XOP + #endif + #if ((defined(COMPILER_MSVC) && (COMPILER_MSVC >= COMPILER_MSVC_VS2012)) || (defined(COMPILER_GCC) && (COMPILER_GCC >= 40700))) + #define X86ASM_AVX2 + #endif +#endif + +#if defined(CPU_X86_64) && defined(COMPILER_GCC) + #define X86_64ASM + #define X86_64ASM_SSE2 + #if (COMPILER_GCC >= 40102) + #define X86_64ASM_SSSE3 + #endif + #if (COMPILER_GCC >= 40400) + #define X86_64ASM_AVX + #define X86_64ASM_XOP + #endif + #if (COMPILER_GCC >= 40700) + #define X86_64ASM_AVX2 + #endif +#endif + +#if defined(COMPILER_MSVC) && (defined(CPU_X86_FORCE_INTRINSICS) || defined(CPU_X86_64)) + #define X86_INTRINSIC + #if defined(CPU_X86_64) || defined(X86ASM_SSE) + #define X86_INTRINSIC_SSE + #endif + #if defined(CPU_X86_64) || defined(X86ASM_SSE2) + #define X86_INTRINSIC_SSE2 + #endif + #if (COMPILER_MSVC >= COMPILER_MSVC_VS2005) + #define X86_INTRINSIC_SSSE3 + #endif + #if (COMPILER_MSVC >= COMPILER_MSVC_VS2010SP1) + #define X86_INTRINSIC_AVX + #define X86_INTRINSIC_XOP + #endif + #if (COMPILER_MSVC >= COMPILER_MSVC_VS2012) + #define X86_INTRINSIC_AVX2 + #endif +#endif + +#if defined(COMPILER_GCC) && defined(CPU_X86_FORCE_INTRINSICS) + #define X86_INTRINSIC + #if defined(__SSE__) + #define X86_INTRINSIC_SSE + #endif + #if defined(__SSE2__) + #define X86_INTRINSIC_SSE2 + #endif + #if defined(__SSSE3__) + #define X86_INTRINSIC_SSSE3 + #endif + #if defined(__AVX__) + #define X86_INTRINSIC_AVX + #endif + #if defined(__XOP__) + #define X86_INTRINSIC_XOP + #endif + #if defined(__AVX2__) + #define X86_INTRINSIC_AVX2 + #endif +#endif + +/* only use simd on windows (or SSE2 on gcc)! */ +#if defined(CPU_X86_FORCE_INTRINSICS) || defined(X86_INTRINSIC) + #if defined(X86_INTRINSIC_SSE) + #include + #include + typedef __m64 qmm; + typedef __m128 xmm; + typedef __m128d xmmd; + #endif + #if defined(X86_INTRINSIC_SSE2) + #include + typedef __m128i xmmi; + #endif + #if defined(X86_INTRINSIC_SSSE3) + #include + #endif + #if defined(X86_INTRINSIC_AVX) + #include + #endif + #if defined(X86_INTRINSIC_XOP) + #if defined(COMPILER_MSVC) + #include + #else + #include + #endif + #endif + #if defined(X86_INTRINSIC_AVX2) + typedef __m256i ymmi; + #endif +#endif + +#if defined(X86_INTRINSIC_SSE2) + typedef union packedelem8_t { + uint8_t u[16]; + xmmi v; + } packedelem8; + + typedef union packedelem32_t { + uint32_t u[4]; + xmmi v; + } packedelem32; + + typedef union packedelem64_t { + uint64_t u[2]; + xmmi v; + } packedelem64; +#else + typedef union packedelem8_t { + uint8_t u[16]; + uint32_t dw[4]; + } packedelem8; + + typedef union packedelem32_t { + uint32_t u[4]; + uint8_t b[16]; + } packedelem32; + + typedef union packedelem64_t { + uint64_t u[2]; + uint8_t b[16]; + } packedelem64; +#endif + +#if defined(X86_INTRINSIC_SSSE3) + static const packedelem8 ALIGN(16) ssse3_rotl16_32bit = {{2,3,0,1,6,7,4,5,10,11,8,9,14,15,12,13}}; + static const packedelem8 ALIGN(16) ssse3_rotl8_32bit = {{3,0,1,2,7,4,5,6,11,8,9,10,15,12,13,14}}; +#endif + +/* + x86 inline asm for gcc/msvc. usage: + + asm_naked_fn_proto(return_type, name) (type parm1, type parm2..) + asm_naked_fn(name) + a1(..) + a2(.., ..) + a3(.., .., ..) + 64bit OR 0 paramters: a1(ret) + 32bit AND n parameters: aret(4n), eg aret(16) for 4 parameters + asm_naked_fn_end(name) +*/ + +#if defined(X86ASM) || defined(X86_64ASM) + +#if defined(COMPILER_MSVC) + #pragma warning(disable : 4731) /* frame pointer modified by inline assembly */ + #define a1(x) __asm {x} + #define a2(x, y) __asm {x, y} + #define a3(x, y, z) __asm {x, y, z} + #define a4(x, y, z, w) __asm {x, y, z, w} + #define aj(x) __asm {x} + #define asm_align8 a1(ALIGN 8) + #define asm_align16 a1(ALIGN 16) + + #define asm_calling_convention STDCALL + #define aret(n) a1(ret n) + #define asm_naked_fn_proto(type, fn) static NAKED type asm_calling_convention fn + #define asm_naked_fn(fn) { + #define asm_naked_fn_end(fn) } +#elif defined(COMPILER_GCC) + #define GNU_AS1(x) #x ";\n" + #define GNU_AS2(x, y) #x ", " #y ";\n" + #define GNU_AS3(x, y, z) #x ", " #y ", " #z ";\n" + #define GNU_AS4(x, y, z, w) #x ", " #y ", " #z ", " #w ";\n" + #define GNU_ASFN(x) "\n_" #x ":\n" #x ":\n" + #define GNU_ASJ(x) ".att_syntax prefix\n" #x "\n.intel_syntax noprefix\n" + + #define a1(x) GNU_AS1(x) + #define a2(x, y) GNU_AS2(x, y) + #define a3(x, y, z) GNU_AS3(x, y, z) + #define a4(x, y, z, w) GNU_AS4(x, y, z, w) + #define aj(x) GNU_ASJ(x) + #define asm_align8 ".p2align 3,,7" + #define asm_align16 ".p2align 4,,15" + + #if defined(OS_WINDOWS) + #define asm_calling_convention CDECL + #define aret(n) a1(ret) + + #if defined(X86_64ASM) + #define asm_naked_fn(fn) ; __asm__ ( \ + ".text\n" \ + asm_align16 GNU_ASFN(fn) \ + "subq $136, %rsp;" \ + "movdqa %xmm6, 0(%rsp);" \ + "movdqa %xmm7, 16(%rsp);" \ + "movdqa %xmm8, 32(%rsp);" \ + "movdqa %xmm9, 48(%rsp);" \ + "movdqa %xmm10, 64(%rsp);" \ + "movdqa %xmm11, 80(%rsp);" \ + "movdqa %xmm12, 96(%rsp);" \ + "movq %rdi, 112(%rsp);" \ + "movq %rsi, 120(%rsp);" \ + "movq %rcx, %rdi;" \ + "movq %rdx, %rsi;" \ + "movq %r8, %rdx;" \ + "movq %r9, %rcx;" \ + "call 1f;" \ + "movdqa 0(%rsp), %xmm6;" \ + "movdqa 16(%rsp), %xmm7;" \ + "movdqa 32(%rsp), %xmm8;" \ + "movdqa 48(%rsp), %xmm9;" \ + "movdqa 64(%rsp), %xmm10;" \ + "movdqa 80(%rsp), %xmm11;" \ + "movdqa 96(%rsp), %xmm12;" \ + "movq 112(%rsp), %rdi;" \ + "movq 120(%rsp), %rsi;" \ + "addq $136, %rsp;" \ + "ret;" \ + ".intel_syntax noprefix;" \ + ".p2align 4,,15;" \ + "1:;" + #else + #define asm_naked_fn(fn) ; __asm__ (".intel_syntax noprefix;\n.text\n" asm_align16 GNU_ASFN(fn) + #endif + #else + #define asm_calling_convention STDCALL + #define aret(n) a1(ret n) + #define asm_naked_fn(fn) ; __asm__ (".intel_syntax noprefix;\n.text\n" asm_align16 GNU_ASFN(fn) + #endif + + #define asm_naked_fn_proto(type, fn) extern type asm_calling_convention fn + #define asm_naked_fn_end(fn) ".att_syntax prefix;\n" ); + + #define asm_gcc() __asm__ __volatile__(".intel_syntax noprefix;\n" + #define asm_gcc_parms() ".att_syntax prefix;" + #define asm_gcc_trashed() __asm__ __volatile__("" ::: + #define asm_gcc_end() ); +#else + need x86 asm +#endif + +#endif /* X86ASM || X86_64ASM */ + + +#if defined(CPU_X86) || defined(CPU_X86_64) + +typedef enum cpu_flags_x86_t { + cpu_mmx = 1 << 0, + cpu_sse = 1 << 1, + cpu_sse2 = 1 << 2, + cpu_sse3 = 1 << 3, + cpu_ssse3 = 1 << 4, + cpu_sse4_1 = 1 << 5, + cpu_sse4_2 = 1 << 6, + cpu_avx = 1 << 7, + cpu_xop = 1 << 8, + cpu_avx2 = 1 << 9 +} cpu_flags_x86; + +typedef enum cpu_vendors_x86_t { + cpu_nobody, + cpu_intel, + cpu_amd +} cpu_vendors_x86; + +typedef struct x86_regs_t { + uint32_t eax, ebx, ecx, edx; +} x86_regs; + +#if defined(X86ASM) +asm_naked_fn_proto(int, has_cpuid)(void) +asm_naked_fn(has_cpuid) + a1(pushfd) + a1(pop eax) + a2(mov ecx, eax) + a2(xor eax, 0x200000) + a1(push eax) + a1(popfd) + a1(pushfd) + a1(pop eax) + a2(xor eax, ecx) + a2(shr eax, 21) + a2(and eax, 1) + a1(push ecx) + a1(popfd) + a1(ret) +asm_naked_fn_end(has_cpuid) +#endif /* X86ASM */ + + +static void NOINLINE +get_cpuid(x86_regs *regs, uint32_t flags) { +#if defined(COMPILER_MSVC) + __cpuid((int *)regs, (int)flags); +#else + #if defined(CPU_X86_64) + #define cpuid_bx rbx + #else + #define cpuid_bx ebx + #endif + + asm_gcc() + a1(push cpuid_bx) + a2(xor ecx, ecx) + a1(cpuid) + a2(mov [%1 + 0], eax) + a2(mov [%1 + 4], ebx) + a2(mov [%1 + 8], ecx) + a2(mov [%1 + 12], edx) + a1(pop cpuid_bx) + asm_gcc_parms() : "+a"(flags) : "S"(regs) : "%ecx", "%edx", "cc" + asm_gcc_end() +#endif +} + +#if defined(X86ASM_AVX) || defined(X86_64ASM_AVX) +static uint64_t NOINLINE +get_xgetbv(uint32_t flags) { +#if defined(COMPILER_MSVC) + return _xgetbv(flags); +#else + uint32_t lo, hi; + asm_gcc() + a1(xgetbv) + asm_gcc_parms() : "+c"(flags), "=a" (lo), "=d" (hi) + asm_gcc_end() + return ((uint64_t)lo | ((uint64_t)hi << 32)); +#endif +} +#endif // AVX support + +#if defined(SCRYPT_TEST_SPEED) +size_t cpu_detect_mask = (size_t)-1; +#endif + +static size_t +detect_cpu(void) { + union { uint8_t s[12]; uint32_t i[3]; } vendor_string; + cpu_vendors_x86 vendor = cpu_nobody; + x86_regs regs; + uint32_t max_level, max_ext_level; + size_t cpu_flags = 0; +#if defined(X86ASM_AVX) || defined(X86_64ASM_AVX) + uint64_t xgetbv_flags; +#endif + +#if defined(CPU_X86) + if (!has_cpuid()) + return cpu_flags; +#endif + + get_cpuid(®s, 0); + max_level = regs.eax; + vendor_string.i[0] = regs.ebx; + vendor_string.i[1] = regs.edx; + vendor_string.i[2] = regs.ecx; + + if (scrypt_verify(vendor_string.s, (const uint8_t *)"GenuineIntel", 12)) + vendor = cpu_intel; + else if (scrypt_verify(vendor_string.s, (const uint8_t *)"AuthenticAMD", 12)) + vendor = cpu_amd; + + if (max_level & 0x00000500) { + /* "Intel P5 pre-B0" */ + cpu_flags |= cpu_mmx; + return cpu_flags; + } + + if (max_level < 1) + return cpu_flags; + + get_cpuid(®s, 1); +#if defined(X86ASM_AVX) || defined(X86_64ASM_AVX) + /* xsave/xrestore */ + if (regs.ecx & (1 << 27)) { + xgetbv_flags = get_xgetbv(0); + if ((regs.ecx & (1 << 28)) && (xgetbv_flags & 0x6)) cpu_flags |= cpu_avx; + } +#endif + if (regs.ecx & (1 << 20)) cpu_flags |= cpu_sse4_2; + if (regs.ecx & (1 << 19)) cpu_flags |= cpu_sse4_2; + if (regs.ecx & (1 << 9)) cpu_flags |= cpu_ssse3; + if (regs.ecx & (1 )) cpu_flags |= cpu_sse3; + if (regs.edx & (1 << 26)) cpu_flags |= cpu_sse2; + if (regs.edx & (1 << 25)) cpu_flags |= cpu_sse; + if (regs.edx & (1 << 23)) cpu_flags |= cpu_mmx; + + if (cpu_flags & cpu_avx) { + if (max_level >= 7) { + get_cpuid(®s, 7); + if (regs.ebx & (1 << 5)) cpu_flags |= cpu_avx2; + } + + get_cpuid(®s, 0x80000000); + max_ext_level = regs.eax; + if (max_ext_level >= 0x80000001) { + get_cpuid(®s, 0x80000001); + if (regs.ecx & (1 << 11)) cpu_flags |= cpu_xop; + } + } + + +#if defined(SCRYPT_TEST_SPEED) + cpu_flags &= cpu_detect_mask; +#endif + + return cpu_flags; +} + +#if defined(SCRYPT_TEST_SPEED) +static const char * +get_top_cpuflag_desc(size_t flag) { + if (flag & cpu_avx2) return "AVX2"; + else if (flag & cpu_xop) return "XOP"; + else if (flag & cpu_avx) return "AVX"; + else if (flag & cpu_sse4_2) return "SSE4.2"; + else if (flag & cpu_sse4_1) return "SSE4.1"; + else if (flag & cpu_ssse3) return "SSSE3"; + else if (flag & cpu_sse2) return "SSE2"; + else if (flag & cpu_sse) return "SSE"; + else if (flag & cpu_mmx) return "MMX"; + else return "Basic"; +} +#endif + +/* enable the highest system-wide option */ +#if defined(SCRYPT_CHOOSE_COMPILETIME) + #if !defined(__AVX2__) + #undef X86_64ASM_AVX2 + #undef X86ASM_AVX2 + #undef X86_INTRINSIC_AVX2 + #endif + #if !defined(__XOP__) + #undef X86_64ASM_XOP + #undef X86ASM_XOP + #undef X86_INTRINSIC_XOP + #endif + #if !defined(__AVX__) + #undef X86_64ASM_AVX + #undef X86ASM_AVX + #undef X86_INTRINSIC_AVX + #endif + #if !defined(__SSSE3__) + #undef X86_64ASM_SSSE3 + #undef X86ASM_SSSE3 + #undef X86_INTRINSIC_SSSE3 + #endif + #if !defined(__SSE2__) + #undef X86_64ASM_SSE2 + #undef X86ASM_SSE2 + #undef X86_INTRINSIC_SSE2 + #endif +#endif + +#else + +static size_t +detect_cpu(void) { + return 0; +} + +#endif /* defined(CPU_X86) || defined(CPU_X86_64) */ \ No newline at end of file diff --git a/deps/scrypt-jane-master/code/scrypt-jane-portable.h b/deps/scrypt-jane-master/code/scrypt-jane-portable.h new file mode 100644 index 000000000..29095a10f --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-portable.h @@ -0,0 +1,307 @@ +/* determine os */ +#if defined(_WIN32) || defined(_WIN64) || defined(__TOS_WIN__) || defined(__WINDOWS__) + #include + #include + #define OS_WINDOWS +#elif defined(sun) || defined(__sun) || defined(__SVR4) || defined(__svr4__) + #include + #include + #include + + #define OS_SOLARIS +#else + #include + #include + #include /* need this to define BSD */ + #include + #include + + #define OS_NIX + #if defined(__linux__) + #include + #define OS_LINUX + #elif defined(BSD) + #define OS_BSD + + #if defined(MACOS_X) || (defined(__APPLE__) & defined(__MACH__)) + #define OS_OSX + #elif defined(macintosh) || defined(Macintosh) + #define OS_MAC + #elif defined(__OpenBSD__) + #define OS_OPENBSD + #endif + #endif +#endif + + +/* determine compiler */ +#if defined(_MSC_VER) + #define COMPILER_MSVC_VS6 120000000 + #define COMPILER_MSVC_VS6PP 121000000 + #define COMPILER_MSVC_VS2002 130000000 + #define COMPILER_MSVC_VS2003 131000000 + #define COMPILER_MSVC_VS2005 140050727 + #define COMPILER_MSVC_VS2008 150000000 + #define COMPILER_MSVC_VS2008SP1 150030729 + #define COMPILER_MSVC_VS2010 160000000 + #define COMPILER_MSVC_VS2010SP1 160040219 + #define COMPILER_MSVC_VS2012RC 170000000 + #define COMPILER_MSVC_VS2012 170050727 + + #if _MSC_FULL_VER > 100000000 + #define COMPILER_MSVC (_MSC_FULL_VER) + #else + #define COMPILER_MSVC (_MSC_FULL_VER * 10) + #endif + + #if ((_MSC_VER == 1200) && defined(_mm_free)) + #undef COMPILER_MSVC + #define COMPILER_MSVC COMPILER_MSVC_VS6PP + #endif + + #pragma warning(disable : 4127) /* conditional expression is constant */ + #pragma warning(disable : 4100) /* unreferenced formal parameter */ + + #define _CRT_SECURE_NO_WARNINGS + #include + #include /* _rotl */ + #include + + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned int uint32_t; + typedef signed int int32_t; + typedef unsigned __int64 uint64_t; + typedef signed __int64 int64_t; + + #define ROTL32(a,b) _rotl(a,b) + #define ROTR32(a,b) _rotr(a,b) + #define ROTL64(a,b) _rotl64(a,b) + #define ROTR64(a,b) _rotr64(a,b) + #undef NOINLINE + #define NOINLINE __declspec(noinline) + #undef NORETURN + #define NORETURN + #undef INLINE + #define INLINE __forceinline + #undef FASTCALL + #define FASTCALL __fastcall + #undef CDECL + #define CDECL __cdecl + #undef STDCALL + #define STDCALL __stdcall + #undef NAKED + #define NAKED __declspec(naked) + #define JANE_ALIGN(n) __declspec(align(n)) +#endif +#if defined(__ICC) + #define COMPILER_INTEL +#endif +#if defined(__GNUC__) + #if (__GNUC__ >= 3) + #define COMPILER_GCC_PATCHLEVEL __GNUC_PATCHLEVEL__ + #else + #define COMPILER_GCC_PATCHLEVEL 0 + #endif + #define COMPILER_GCC (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + COMPILER_GCC_PATCHLEVEL) + #define ROTL32(a,b) (((a) << (b)) | ((a) >> (32 - b))) + #define ROTR32(a,b) (((a) >> (b)) | ((a) << (32 - b))) + #define ROTL64(a,b) (((a) << (b)) | ((a) >> (64 - b))) + #define ROTR64(a,b) (((a) >> (b)) | ((a) << (64 - b))) + #undef NOINLINE + #if (COMPILER_GCC >= 30000) + #define NOINLINE __attribute__((noinline)) + #else + #define NOINLINE + #endif + #undef NORETURN + #if (COMPILER_GCC >= 30000) + #define NORETURN __attribute__((noreturn)) + #else + #define NORETURN + #endif + #undef INLINE + #if (COMPILER_GCC >= 30000) + #define INLINE __attribute__((always_inline)) + #else + #define INLINE inline + #endif + #undef FASTCALL + #if (COMPILER_GCC >= 30400) + #define FASTCALL __attribute__((fastcall)) + #else + #define FASTCALL + #endif + #undef CDECL + #define CDECL __attribute__((cdecl)) + #undef STDCALL + #define STDCALL __attribute__((stdcall)) + #define JANE_ALIGN(n) __attribute__((aligned(n))) + #include +#endif +#if defined(__MINGW32__) || defined(__MINGW64__) + #define COMPILER_MINGW +#endif +#if defined(__PATHCC__) + #define COMPILER_PATHCC +#endif + +#define OPTIONAL_INLINE +#if defined(OPTIONAL_INLINE) + #undef OPTIONAL_INLINE + #define OPTIONAL_INLINE INLINE +#else + #define OPTIONAL_INLINE +#endif + +#define CRYPTO_FN NOINLINE STDCALL + +/* determine cpu */ +#if defined(__amd64__) || defined(__amd64) || defined(__x86_64__ ) || defined(_M_X64) + #define CPU_X86_64 +#elif defined(__i586__) || defined(__i686__) || (defined(_M_IX86) && (_M_IX86 >= 500)) + #define CPU_X86 500 +#elif defined(__i486__) || (defined(_M_IX86) && (_M_IX86 >= 400)) + #define CPU_X86 400 +#elif defined(__i386__) || (defined(_M_IX86) && (_M_IX86 >= 300)) || defined(__X86__) || defined(_X86_) || defined(__I86__) + #define CPU_X86 300 +#elif defined(__ia64__) || defined(_IA64) || defined(__IA64__) || defined(_M_IA64) || defined(__ia64) + #define CPU_IA64 +#endif + +#if defined(__sparc__) || defined(__sparc) || defined(__sparcv9) + #define CPU_SPARC + #if defined(__sparcv9) + #define CPU_SPARC64 + #endif +#endif + +#if defined(CPU_X86_64) || defined(CPU_IA64) || defined(CPU_SPARC64) || defined(__64BIT__) || defined(__LP64__) || defined(_LP64) || (defined(_MIPS_SZLONG) && (_MIPS_SZLONG == 64)) + #define CPU_64BITS + #undef FASTCALL + #define FASTCALL + #undef CDECL + #define CDECL + #undef STDCALL + #define STDCALL +#endif + +#if defined(powerpc) || defined(__PPC__) || defined(__ppc__) || defined(_ARCH_PPC) || defined(__powerpc__) || defined(__powerpc) || defined(POWERPC) || defined(_M_PPC) + #define CPU_PPC + #if defined(_ARCH_PWR7) + #define CPU_POWER7 + #elif defined(__64BIT__) + #define CPU_PPC64 + #else + #define CPU_PPC32 + #endif +#endif + +#if defined(__hppa__) || defined(__hppa) + #define CPU_HPPA +#endif + +#if defined(__alpha__) || defined(__alpha) || defined(_M_ALPHA) + #define CPU_ALPHA +#endif + +/* endian */ + +#if ((defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN) && (__BYTE_ORDER == __LITTLE_ENDIAN)) || \ + (defined(BYTE_ORDER) && defined(LITTLE_ENDIAN) && (BYTE_ORDER == LITTLE_ENDIAN)) || \ + (defined(CPU_X86) || defined(CPU_X86_64)) || \ + (defined(vax) || defined(MIPSEL) || defined(_MIPSEL))) +#define CPU_LE +#elif ((defined(__BYTE_ORDER) && defined(__BIG_ENDIAN) && (__BYTE_ORDER == __BIG_ENDIAN)) || \ + (defined(BYTE_ORDER) && defined(BIG_ENDIAN) && (BYTE_ORDER == BIG_ENDIAN)) || \ + (defined(CPU_SPARC) || defined(CPU_PPC) || defined(mc68000) || defined(sel)) || defined(_MIPSEB)) +#define CPU_BE +#else + /* unknown endian! */ +#endif + + +#define U8TO32_BE(p) \ + (((uint32_t)((p)[0]) << 24) | ((uint32_t)((p)[1]) << 16) | \ + ((uint32_t)((p)[2]) << 8) | ((uint32_t)((p)[3]) )) + +#define U8TO32_LE(p) \ + (((uint32_t)((p)[0]) ) | ((uint32_t)((p)[1]) << 8) | \ + ((uint32_t)((p)[2]) << 16) | ((uint32_t)((p)[3]) << 24)) + +#define U32TO8_BE(p, v) \ + (p)[0] = (uint8_t)((v) >> 24); (p)[1] = (uint8_t)((v) >> 16); \ + (p)[2] = (uint8_t)((v) >> 8); (p)[3] = (uint8_t)((v) ); + +#define U32TO8_LE(p, v) \ + (p)[0] = (uint8_t)((v) ); (p)[1] = (uint8_t)((v) >> 8); \ + (p)[2] = (uint8_t)((v) >> 16); (p)[3] = (uint8_t)((v) >> 24); + +#define U8TO64_BE(p) \ + (((uint64_t)U8TO32_BE(p) << 32) | (uint64_t)U8TO32_BE((p) + 4)) + +#define U8TO64_LE(p) \ + (((uint64_t)U8TO32_LE(p)) | ((uint64_t)U8TO32_LE((p) + 4) << 32)) + +#define U64TO8_BE(p, v) \ + U32TO8_BE((p), (uint32_t)((v) >> 32)); \ + U32TO8_BE((p) + 4, (uint32_t)((v) )); + +#define U64TO8_LE(p, v) \ + U32TO8_LE((p), (uint32_t)((v) )); \ + U32TO8_LE((p) + 4, (uint32_t)((v) >> 32)); + +#define U32_SWAP(v) { \ + (v) = (((v) << 8) & 0xFF00FF00 ) | (((v) >> 8) & 0xFF00FF ); \ + (v) = ((v) << 16) | ((v) >> 16); \ +} + +#define U64_SWAP(v) { \ + (v) = (((v) << 8) & 0xFF00FF00FF00FF00ull ) | (((v) >> 8) & 0x00FF00FF00FF00FFull ); \ + (v) = (((v) << 16) & 0xFFFF0000FFFF0000ull ) | (((v) >> 16) & 0x0000FFFF0000FFFFull ); \ + (v) = ((v) << 32) | ((v) >> 32); \ +} + +static int +scrypt_verify(const uint8_t *x, const uint8_t *y, size_t len) { + uint32_t differentbits = 0; + while (len--) + differentbits |= (*x++ ^ *y++); + return (1 & ((differentbits - 1) >> 8)); +} + +static void +scrypt_ensure_zero(void *p, size_t len) { +#if ((defined(CPU_X86) || defined(CPU_X86_64)) && defined(COMPILER_MSVC)) + __stosb((unsigned char *)p, 0, len); +#elif (defined(CPU_X86) && defined(COMPILER_GCC)) + __asm__ __volatile__( + "pushl %%edi;\n" + "pushl %%ecx;\n" + "rep stosb;\n" + "popl %%ecx;\n" + "popl %%edi;\n" + :: "a"(0), "D"(p), "c"(len) : "cc", "memory" + ); +#elif (defined(CPU_X86_64) && defined(COMPILER_GCC)) + __asm__ __volatile__( + "pushq %%rdi;\n" + "pushq %%rcx;\n" + "rep stosb;\n" + "popq %%rcx;\n" + "popq %%rdi;\n" + :: "a"(0), "D"(p), "c"(len) : "cc", "memory" + ); +#else + volatile uint8_t *b = (volatile uint8_t *)p; + size_t i; + for (i = 0; i < len; i++) + b[i] = 0; +#endif +} + +#include "scrypt-jane-portable-x86.h" + +#if !defined(asm_calling_convention) +#define asm_calling_convention +#endif diff --git a/deps/scrypt-jane-master/code/scrypt-jane-romix-basic.h b/deps/scrypt-jane-master/code/scrypt-jane-romix-basic.h new file mode 100644 index 000000000..16b59095d --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-romix-basic.h @@ -0,0 +1,74 @@ +#if !defined(SCRYPT_CHOOSE_COMPILETIME) +/* function type returned by scrypt_getROMix, used with cpu detection */ +typedef void (FASTCALL *scrypt_ROMixfn)(scrypt_mix_word_t *X/*[chunkWords]*/, scrypt_mix_word_t *Y/*[chunkWords]*/, scrypt_mix_word_t *V/*[chunkWords * N]*/, uint32_t N, uint32_t r); +#endif + +/* romix pre/post nop function */ +static void asm_calling_convention +scrypt_romix_nop(scrypt_mix_word_t *blocks, size_t nblocks) { + (void)blocks; (void)nblocks; +} + +/* romix pre/post endian conversion function */ +static void asm_calling_convention +scrypt_romix_convert_endian(scrypt_mix_word_t *blocks, size_t nblocks) { +#if !defined(CPU_LE) + static const union { uint8_t b[2]; uint16_t w; } endian_test = {{1,0}}; + size_t i; + if (endian_test.w == 0x100) { + nblocks *= SCRYPT_BLOCK_WORDS; + for (i = 0; i < nblocks; i++) { + SCRYPT_WORD_ENDIAN_SWAP(blocks[i]); + } + } +#else + (void)blocks; (void)nblocks; +#endif +} + +/* chunkmix test function */ +typedef void (asm_calling_convention *chunkmixfn)(scrypt_mix_word_t *Bout/*[chunkWords]*/, scrypt_mix_word_t *Bin/*[chunkWords]*/, scrypt_mix_word_t *Bxor/*[chunkWords]*/, uint32_t r); +typedef void (asm_calling_convention *blockfixfn)(scrypt_mix_word_t *blocks, size_t nblocks); + +static int +scrypt_test_mix_instance(chunkmixfn mixfn, blockfixfn prefn, blockfixfn postfn, const uint8_t expected[16]) { + /* r = 2, (2 * r) = 4 blocks in a chunk, 4 * SCRYPT_BLOCK_WORDS total */ + const uint32_t r = 2, blocks = 2 * r, words = blocks * SCRYPT_BLOCK_WORDS; +#if (defined(X86ASM_AVX2) || defined(X86_64ASM_AVX2) || defined(X86_INTRINSIC_AVX2)) + scrypt_mix_word_t JANE_ALIGN(32) chunk[2][4 * SCRYPT_BLOCK_WORDS], v; +#else + scrypt_mix_word_t JANE_ALIGN(16) chunk[2][4 * SCRYPT_BLOCK_WORDS], v; +#endif + uint8_t final[16]; + size_t i; + + for (i = 0; i < words; i++) { + v = (scrypt_mix_word_t)i; + v = (v << 8) | v; + v = (v << 16) | v; + chunk[0][i] = v; + } + + prefn(chunk[0], blocks); + mixfn(chunk[1], chunk[0], NULL, r); + postfn(chunk[1], blocks); + + /* grab the last 16 bytes of the final block */ + for (i = 0; i < 16; i += sizeof(scrypt_mix_word_t)) { + SCRYPT_WORDTO8_LE(final + i, chunk[1][words - (16 / sizeof(scrypt_mix_word_t)) + (i / sizeof(scrypt_mix_word_t))]); + } + + return scrypt_verify(expected, final, 16); +} + +/* returns a pointer to item i, where item is len scrypt_mix_word_t's long */ +static scrypt_mix_word_t * +scrypt_item(scrypt_mix_word_t *base, scrypt_mix_word_t i, scrypt_mix_word_t len) { + return base + (i * len); +} + +/* returns a pointer to block i */ +static scrypt_mix_word_t * +scrypt_block(scrypt_mix_word_t *base, scrypt_mix_word_t i) { + return base + (i * SCRYPT_BLOCK_WORDS); +} diff --git a/deps/scrypt-jane-master/code/scrypt-jane-romix-template.h b/deps/scrypt-jane-master/code/scrypt-jane-romix-template.h new file mode 100644 index 000000000..77c0114f4 --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-romix-template.h @@ -0,0 +1,122 @@ +#if !defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_HAVE_ROMIX) + +#if defined(SCRYPT_CHOOSE_COMPILETIME) +#undef SCRYPT_ROMIX_FN +#define SCRYPT_ROMIX_FN scrypt_ROMix +#endif + +#undef SCRYPT_HAVE_ROMIX +#define SCRYPT_HAVE_ROMIX + +#if !defined(SCRYPT_CHUNKMIX_FN) + +#define SCRYPT_CHUNKMIX_FN scrypt_ChunkMix_basic + +/* + Bout = ChunkMix(Bin) + + 2*r: number of blocks in the chunk +*/ +static void asm_calling_convention +SCRYPT_CHUNKMIX_FN(scrypt_mix_word_t *Bout/*[chunkWords]*/, scrypt_mix_word_t *Bin/*[chunkWords]*/, scrypt_mix_word_t *Bxor/*[chunkWords]*/, uint32_t r) { +#if (defined(X86ASM_AVX2) || defined(X86_64ASM_AVX2) || defined(X86_INTRINSIC_AVX2)) + scrypt_mix_word_t JANE_ALIGN(32) X[SCRYPT_BLOCK_WORDS], *block; +#else + scrypt_mix_word_t JANE_ALIGN(16) X[SCRYPT_BLOCK_WORDS], *block; +#endif + uint32_t i, j, blocksPerChunk = r * 2, half = 0; + + /* 1: X = B_{2r - 1} */ + block = scrypt_block(Bin, blocksPerChunk - 1); + for (i = 0; i < SCRYPT_BLOCK_WORDS; i++) + X[i] = block[i]; + + if (Bxor) { + block = scrypt_block(Bxor, blocksPerChunk - 1); + for (i = 0; i < SCRYPT_BLOCK_WORDS; i++) + X[i] ^= block[i]; + } + + /* 2: for i = 0 to 2r - 1 do */ + for (i = 0; i < blocksPerChunk; i++, half ^= r) { + /* 3: X = H(X ^ B_i) */ + block = scrypt_block(Bin, i); + for (j = 0; j < SCRYPT_BLOCK_WORDS; j++) + X[j] ^= block[j]; + + if (Bxor) { + block = scrypt_block(Bxor, i); + for (j = 0; j < SCRYPT_BLOCK_WORDS; j++) + X[j] ^= block[j]; + } + SCRYPT_MIX_FN(X); + + /* 4: Y_i = X */ + /* 6: B'[0..r-1] = Y_even */ + /* 6: B'[r..2r-1] = Y_odd */ + block = scrypt_block(Bout, (i / 2) + half); + for (j = 0; j < SCRYPT_BLOCK_WORDS; j++) + block[j] = X[j]; + } +} +#endif + +/* + X = ROMix(X) + + X: chunk to mix + Y: scratch chunk + N: number of rounds + V[N]: array of chunks to randomly index in to + 2*r: number of blocks in a chunk +*/ + +static void NOINLINE FASTCALL +SCRYPT_ROMIX_FN(scrypt_mix_word_t *X/*[chunkWords]*/, scrypt_mix_word_t *Y/*[chunkWords]*/, scrypt_mix_word_t *V/*[N * chunkWords]*/, uint32_t N, uint32_t r) { + uint32_t i, j, chunkWords = (uint32_t)(SCRYPT_BLOCK_WORDS * r * 2); + scrypt_mix_word_t *block = V; + + SCRYPT_ROMIX_TANGLE_FN(X, r * 2); + + /* 1: X = B */ + /* implicit */ + + /* 2: for i = 0 to N - 1 do */ + memcpy(block, X, chunkWords * sizeof(scrypt_mix_word_t)); + for (i = 0; i < N - 1; i++, block += chunkWords) { + /* 3: V_i = X */ + /* 4: X = H(X) */ + SCRYPT_CHUNKMIX_FN(block + chunkWords, block, NULL, r); + } + SCRYPT_CHUNKMIX_FN(X, block, NULL, r); + + /* 6: for i = 0 to N - 1 do */ + for (i = 0; i < N; i += 2) { + /* 7: j = Integerify(X) % N */ + j = X[chunkWords - SCRYPT_BLOCK_WORDS] & (N - 1); + + /* 8: X = H(Y ^ V_j) */ + SCRYPT_CHUNKMIX_FN(Y, X, scrypt_item(V, j, chunkWords), r); + + /* 7: j = Integerify(Y) % N */ + j = Y[chunkWords - SCRYPT_BLOCK_WORDS] & (N - 1); + + /* 8: X = H(Y ^ V_j) */ + SCRYPT_CHUNKMIX_FN(X, Y, scrypt_item(V, j, chunkWords), r); + } + + /* 10: B' = X */ + /* implicit */ + + SCRYPT_ROMIX_UNTANGLE_FN(X, r * 2); +} + +#endif /* !defined(SCRYPT_CHOOSE_COMPILETIME) || !defined(SCRYPT_HAVE_ROMIX) */ + + +#undef SCRYPT_CHUNKMIX_FN +#undef SCRYPT_ROMIX_FN +#undef SCRYPT_MIX_FN +#undef SCRYPT_ROMIX_TANGLE_FN +#undef SCRYPT_ROMIX_UNTANGLE_FN + diff --git a/deps/scrypt-jane-master/code/scrypt-jane-romix.h b/deps/scrypt-jane-master/code/scrypt-jane-romix.h new file mode 100644 index 000000000..84cf61201 --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-romix.h @@ -0,0 +1,27 @@ +#if defined(SCRYPT_CHACHA) +#include "scrypt-jane-chacha.h" +#elif defined(SCRYPT_SALSA) +#include "scrypt-jane-salsa.h" +#elif defined(SCRYPT_SALSA64) +#include "scrypt-jane-salsa64.h" +#else + #define SCRYPT_MIX_BASE "ERROR" + typedef uint32_t scrypt_mix_word_t; + #define SCRYPT_WORDTO8_LE U32TO8_LE + #define SCRYPT_WORD_ENDIAN_SWAP U32_SWAP + #define SCRYPT_BLOCK_BYTES 64 + #define SCRYPT_BLOCK_WORDS (SCRYPT_BLOCK_BYTES / sizeof(scrypt_mix_word_t)) + #if !defined(SCRYPT_CHOOSE_COMPILETIME) + static void FASTCALL scrypt_ROMix_error(scrypt_mix_word_t *X/*[chunkWords]*/, scrypt_mix_word_t *Y/*[chunkWords]*/, scrypt_mix_word_t *V/*[chunkWords * N]*/, uint32_t N, uint32_t r) {} + static scrypt_ROMixfn scrypt_getROMix(void) { return scrypt_ROMix_error; } + #else + static void FASTCALL scrypt_ROMix(scrypt_mix_word_t *X, scrypt_mix_word_t *Y, scrypt_mix_word_t *V, uint32_t N, uint32_t r) {} + #endif + static int scrypt_test_mix(void) { return 0; } + #error must define a mix function! +#endif + +#if !defined(SCRYPT_CHOOSE_COMPILETIME) +#undef SCRYPT_MIX +#define SCRYPT_MIX SCRYPT_MIX_BASE +#endif diff --git a/deps/scrypt-jane-master/code/scrypt-jane-salsa.h b/deps/scrypt-jane-master/code/scrypt-jane-salsa.h new file mode 100644 index 000000000..df0a3e0c0 --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-salsa.h @@ -0,0 +1,134 @@ +#define SCRYPT_MIX_BASE "Salsa20/8" + +typedef uint32_t scrypt_mix_word_t; + +#define SCRYPT_WORDTO8_LE U32TO8_LE +#define SCRYPT_WORD_ENDIAN_SWAP U32_SWAP + +#define SCRYPT_BLOCK_BYTES 64 +#define SCRYPT_BLOCK_WORDS (SCRYPT_BLOCK_BYTES / sizeof(scrypt_mix_word_t)) + +/* must have these here in case block bytes is ever != 64 */ +#include "scrypt-jane-romix-basic.h" + +#include "scrypt-jane-mix_salsa-xop.h" +#include "scrypt-jane-mix_salsa-avx.h" +#include "scrypt-jane-mix_salsa-sse2.h" +#include "scrypt-jane-mix_salsa.h" + +#if defined(SCRYPT_SALSA_XOP) + #define SCRYPT_CHUNKMIX_FN scrypt_ChunkMix_xop + #define SCRYPT_ROMIX_FN scrypt_ROMix_xop + #define SCRYPT_ROMIX_TANGLE_FN salsa_core_tangle_sse2 + #define SCRYPT_ROMIX_UNTANGLE_FN salsa_core_tangle_sse2 + #include "scrypt-jane-romix-template.h" +#endif + +#if defined(SCRYPT_SALSA_AVX) + #define SCRYPT_CHUNKMIX_FN scrypt_ChunkMix_avx + #define SCRYPT_ROMIX_FN scrypt_ROMix_avx + #define SCRYPT_ROMIX_TANGLE_FN salsa_core_tangle_sse2 + #define SCRYPT_ROMIX_UNTANGLE_FN salsa_core_tangle_sse2 + #include "scrypt-jane-romix-template.h" +#endif + +#if defined(SCRYPT_SALSA_SSE2) + #define SCRYPT_CHUNKMIX_FN scrypt_ChunkMix_sse2 + #define SCRYPT_ROMIX_FN scrypt_ROMix_sse2 + #define SCRYPT_MIX_FN salsa_core_sse2 + #define SCRYPT_ROMIX_TANGLE_FN salsa_core_tangle_sse2 + #define SCRYPT_ROMIX_UNTANGLE_FN salsa_core_tangle_sse2 + #include "scrypt-jane-romix-template.h" +#endif + +/* cpu agnostic */ +#define SCRYPT_ROMIX_FN scrypt_ROMix_basic +#define SCRYPT_MIX_FN salsa_core_basic +#define SCRYPT_ROMIX_TANGLE_FN scrypt_romix_convert_endian +#define SCRYPT_ROMIX_UNTANGLE_FN scrypt_romix_convert_endian +#include "scrypt-jane-romix-template.h" + +#if !defined(SCRYPT_CHOOSE_COMPILETIME) +static scrypt_ROMixfn +scrypt_getROMix(void) { + size_t cpuflags = detect_cpu(); + +#if defined(SCRYPT_SALSA_XOP) + if (cpuflags & cpu_xop) + return scrypt_ROMix_xop; + else +#endif + +#if defined(SCRYPT_SALSA_AVX) + if (cpuflags & cpu_avx) + return scrypt_ROMix_avx; + else +#endif + +#if defined(SCRYPT_SALSA_SSE2) + if (cpuflags & cpu_sse2) + return scrypt_ROMix_sse2; + else +#endif + + return scrypt_ROMix_basic; +} +#endif + + +#if defined(SCRYPT_TEST_SPEED) +static size_t +available_implementations(void) { + size_t cpuflags = detect_cpu(); + size_t flags = 0; + +#if defined(SCRYPT_SALSA_XOP) + if (cpuflags & cpu_xop) + flags |= cpu_xop; +#endif + +#if defined(SCRYPT_SALSA_AVX) + if (cpuflags & cpu_avx) + flags |= cpu_avx; +#endif + +#if defined(SCRYPT_SALSA_SSE2) + if (cpuflags & cpu_sse2) + flags |= cpu_sse2; +#endif + + return flags; +} +#endif + + +static int +scrypt_test_mix(void) { + static const uint8_t expected[16] = { + 0x41,0x1f,0x2e,0xa3,0xab,0xa3,0x1a,0x34,0x87,0x1d,0x8a,0x1c,0x76,0xa0,0x27,0x66, + }; + + int ret = 1; + size_t cpuflags = detect_cpu(); + +#if defined(SCRYPT_SALSA_XOP) + if (cpuflags & cpu_xop) + ret &= scrypt_test_mix_instance(scrypt_ChunkMix_xop, salsa_core_tangle_sse2, salsa_core_tangle_sse2, expected); +#endif + +#if defined(SCRYPT_SALSA_AVX) + if (cpuflags & cpu_avx) + ret &= scrypt_test_mix_instance(scrypt_ChunkMix_avx, salsa_core_tangle_sse2, salsa_core_tangle_sse2, expected); +#endif + +#if defined(SCRYPT_SALSA_SSE2) + if (cpuflags & cpu_sse2) + ret &= scrypt_test_mix_instance(scrypt_ChunkMix_sse2, salsa_core_tangle_sse2, salsa_core_tangle_sse2, expected); +#endif + +#if defined(SCRYPT_SALSA_BASIC) + ret &= scrypt_test_mix_instance(scrypt_ChunkMix_basic, scrypt_romix_convert_endian, scrypt_romix_convert_endian, expected); +#endif + + return ret; +} diff --git a/deps/scrypt-jane-master/code/scrypt-jane-salsa64.h b/deps/scrypt-jane-master/code/scrypt-jane-salsa64.h new file mode 100644 index 000000000..96b781360 --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-salsa64.h @@ -0,0 +1,183 @@ +#define SCRYPT_MIX_BASE "Salsa64/8" + +typedef uint64_t scrypt_mix_word_t; + +#define SCRYPT_WORDTO8_LE U64TO8_LE +#define SCRYPT_WORD_ENDIAN_SWAP U64_SWAP + +#define SCRYPT_BLOCK_BYTES 128 +#define SCRYPT_BLOCK_WORDS (SCRYPT_BLOCK_BYTES / sizeof(scrypt_mix_word_t)) + +/* must have these here in case block bytes is ever != 64 */ +#include "scrypt-jane-romix-basic.h" + +#include "scrypt-jane-mix_salsa64-avx2.h" +#include "scrypt-jane-mix_salsa64-xop.h" +#include "scrypt-jane-mix_salsa64-avx.h" +#include "scrypt-jane-mix_salsa64-ssse3.h" +#include "scrypt-jane-mix_salsa64-sse2.h" +#include "scrypt-jane-mix_salsa64.h" + +#if defined(SCRYPT_SALSA64_AVX2) + #define SCRYPT_CHUNKMIX_FN scrypt_ChunkMix_avx2 + #define SCRYPT_ROMIX_FN scrypt_ROMix_avx2 + #define SCRYPT_ROMIX_TANGLE_FN salsa64_core_tangle_sse2 + #define SCRYPT_ROMIX_UNTANGLE_FN salsa64_core_tangle_sse2 + #include "scrypt-jane-romix-template.h" +#endif + +#if defined(SCRYPT_SALSA64_XOP) + #define SCRYPT_CHUNKMIX_FN scrypt_ChunkMix_xop + #define SCRYPT_ROMIX_FN scrypt_ROMix_xop + #define SCRYPT_ROMIX_TANGLE_FN salsa64_core_tangle_sse2 + #define SCRYPT_ROMIX_UNTANGLE_FN salsa64_core_tangle_sse2 + #include "scrypt-jane-romix-template.h" +#endif + +#if defined(SCRYPT_SALSA64_AVX) + #define SCRYPT_CHUNKMIX_FN scrypt_ChunkMix_avx + #define SCRYPT_ROMIX_FN scrypt_ROMix_avx + #define SCRYPT_ROMIX_TANGLE_FN salsa64_core_tangle_sse2 + #define SCRYPT_ROMIX_UNTANGLE_FN salsa64_core_tangle_sse2 + #include "scrypt-jane-romix-template.h" +#endif + +#if defined(SCRYPT_SALSA64_SSSE3) + #define SCRYPT_CHUNKMIX_FN scrypt_ChunkMix_ssse3 + #define SCRYPT_ROMIX_FN scrypt_ROMix_ssse3 + #define SCRYPT_ROMIX_TANGLE_FN salsa64_core_tangle_sse2 + #define SCRYPT_ROMIX_UNTANGLE_FN salsa64_core_tangle_sse2 + #include "scrypt-jane-romix-template.h" +#endif + +#if defined(SCRYPT_SALSA64_SSE2) + #define SCRYPT_CHUNKMIX_FN scrypt_ChunkMix_sse2 + #define SCRYPT_ROMIX_FN scrypt_ROMix_sse2 + #define SCRYPT_ROMIX_TANGLE_FN salsa64_core_tangle_sse2 + #define SCRYPT_ROMIX_UNTANGLE_FN salsa64_core_tangle_sse2 + #include "scrypt-jane-romix-template.h" +#endif + +/* cpu agnostic */ +#define SCRYPT_ROMIX_FN scrypt_ROMix_basic +#define SCRYPT_MIX_FN salsa64_core_basic +#define SCRYPT_ROMIX_TANGLE_FN scrypt_romix_convert_endian +#define SCRYPT_ROMIX_UNTANGLE_FN scrypt_romix_convert_endian +#include "scrypt-jane-romix-template.h" + +#if !defined(SCRYPT_CHOOSE_COMPILETIME) +static scrypt_ROMixfn +scrypt_getROMix(void) { + size_t cpuflags = detect_cpu(); + +#if defined(SCRYPT_SALSA64_AVX2) + if (cpuflags & cpu_avx2) + return scrypt_ROMix_avx2; + else +#endif + +#if defined(SCRYPT_SALSA64_XOP) + if (cpuflags & cpu_xop) + return scrypt_ROMix_xop; + else +#endif + +#if defined(SCRYPT_SALSA64_AVX) + if (cpuflags & cpu_avx) + return scrypt_ROMix_avx; + else +#endif + +#if defined(SCRYPT_SALSA64_SSSE3) + if (cpuflags & cpu_ssse3) + return scrypt_ROMix_ssse3; + else +#endif + +#if defined(SCRYPT_SALSA64_SSE2) + if (cpuflags & cpu_sse2) + return scrypt_ROMix_sse2; + else +#endif + + return scrypt_ROMix_basic; +} +#endif + + +#if defined(SCRYPT_TEST_SPEED) +static size_t +available_implementations(void) { + size_t cpuflags = detect_cpu(); + size_t flags = 0; + +#if defined(SCRYPT_SALSA64_AVX2) + if (cpuflags & cpu_avx2) + flags |= cpu_avx2; +#endif + +#if defined(SCRYPT_SALSA64_XOP) + if (cpuflags & cpu_xop) + flags |= cpu_xop; +#endif + +#if defined(SCRYPT_SALSA64_AVX) + if (cpuflags & cpu_avx) + flags |= cpu_avx; +#endif + +#if defined(SCRYPT_SALSA64_SSSE3) + if (cpuflags & cpu_ssse3) + flags |= cpu_ssse3; +#endif + +#if defined(SCRYPT_SALSA64_SSE2) + if (cpuflags & cpu_sse2) + flags |= cpu_sse2; +#endif + + return flags; +} +#endif + +static int +scrypt_test_mix(void) { + static const uint8_t expected[16] = { + 0xf8,0x92,0x9b,0xf8,0xcc,0x1d,0xce,0x2e,0x13,0x82,0xac,0x96,0xb2,0x6c,0xee,0x2c, + }; + + int ret = 1; + size_t cpuflags = detect_cpu(); + +#if defined(SCRYPT_SALSA64_AVX2) + if (cpuflags & cpu_avx2) + ret &= scrypt_test_mix_instance(scrypt_ChunkMix_avx2, salsa64_core_tangle_sse2, salsa64_core_tangle_sse2, expected); +#endif + +#if defined(SCRYPT_SALSA64_XOP) + if (cpuflags & cpu_xop) + ret &= scrypt_test_mix_instance(scrypt_ChunkMix_xop, salsa64_core_tangle_sse2, salsa64_core_tangle_sse2, expected); +#endif + +#if defined(SCRYPT_SALSA64_AVX) + if (cpuflags & cpu_avx) + ret &= scrypt_test_mix_instance(scrypt_ChunkMix_avx, salsa64_core_tangle_sse2, salsa64_core_tangle_sse2, expected); +#endif + +#if defined(SCRYPT_SALSA64_SSSE3) + if (cpuflags & cpu_ssse3) + ret &= scrypt_test_mix_instance(scrypt_ChunkMix_ssse3, salsa64_core_tangle_sse2, salsa64_core_tangle_sse2, expected); +#endif + +#if defined(SCRYPT_SALSA64_SSE2) + if (cpuflags & cpu_sse2) + ret &= scrypt_test_mix_instance(scrypt_ChunkMix_sse2, salsa64_core_tangle_sse2, salsa64_core_tangle_sse2, expected); +#endif + +#if defined(SCRYPT_SALSA64_BASIC) + ret &= scrypt_test_mix_instance(scrypt_ChunkMix_basic, scrypt_romix_convert_endian, scrypt_romix_convert_endian, expected); +#endif + + return ret; +} + diff --git a/deps/scrypt-jane-master/code/scrypt-jane-test-vectors.h b/deps/scrypt-jane-master/code/scrypt-jane-test-vectors.h new file mode 100644 index 000000000..72a727634 --- /dev/null +++ b/deps/scrypt-jane-master/code/scrypt-jane-test-vectors.h @@ -0,0 +1,261 @@ +typedef struct scrypt_test_setting_t { + const char *pw, *salt; + uint8_t Nfactor, rfactor, pfactor; +} scrypt_test_setting; + +static const scrypt_test_setting post_settings[] = { + {"", "", 3, 0, 0}, + {"password", "NaCl", 9, 3, 4}, + {0, 0, 0, 0, 0} +}; + +#if defined(SCRYPT_SHA256) + #if defined(SCRYPT_SALSA) + /* sha256 + salsa20/8, the only 'official' test vectors! */ + static const uint8_t post_vectors[][64] = { + {0x77,0xd6,0x57,0x62,0x38,0x65,0x7b,0x20,0x3b,0x19,0xca,0x42,0xc1,0x8a,0x04,0x97, + 0xf1,0x6b,0x48,0x44,0xe3,0x07,0x4a,0xe8,0xdf,0xdf,0xfa,0x3f,0xed,0xe2,0x14,0x42, + 0xfc,0xd0,0x06,0x9d,0xed,0x09,0x48,0xf8,0x32,0x6a,0x75,0x3a,0x0f,0xc8,0x1f,0x17, + 0xe8,0xd3,0xe0,0xfb,0x2e,0x0d,0x36,0x28,0xcf,0x35,0xe2,0x0c,0x38,0xd1,0x89,0x06}, + {0xfd,0xba,0xbe,0x1c,0x9d,0x34,0x72,0x00,0x78,0x56,0xe7,0x19,0x0d,0x01,0xe9,0xfe, + 0x7c,0x6a,0xd7,0xcb,0xc8,0x23,0x78,0x30,0xe7,0x73,0x76,0x63,0x4b,0x37,0x31,0x62, + 0x2e,0xaf,0x30,0xd9,0x2e,0x22,0xa3,0x88,0x6f,0xf1,0x09,0x27,0x9d,0x98,0x30,0xda, + 0xc7,0x27,0xaf,0xb9,0x4a,0x83,0xee,0x6d,0x83,0x60,0xcb,0xdf,0xa2,0xcc,0x06,0x40} + }; + #elif defined(SCRYPT_CHACHA) + static const uint8_t post_vectors[][64] = { + {0xef,0x8f,0x44,0x8f,0xc3,0xef,0x78,0x13,0xb2,0x26,0xa7,0x2a,0x40,0xa1,0x98,0x7f, + 0xc8,0x7f,0x0d,0x5f,0x40,0x66,0xa2,0x05,0x07,0x4f,0xc7,0xac,0x3b,0x47,0x07,0x0c, + 0xf5,0x20,0x46,0x76,0x20,0x7b,0xee,0x51,0x6d,0x5f,0xfa,0x9c,0x27,0xac,0xa9,0x36, + 0x62,0xbd,0xde,0x0b,0xa3,0xc0,0x66,0x84,0xde,0x82,0xd0,0x1a,0xb4,0xd1,0xb5,0xfe}, + {0xf1,0x94,0xf7,0x5f,0x15,0x12,0x10,0x4d,0x6e,0xfb,0x04,0x8c,0x35,0xc4,0x51,0xb6, + 0x11,0x04,0xa7,0x9b,0xb0,0x46,0xaf,0x7b,0x47,0x39,0xf0,0xac,0xb2,0x8a,0xfa,0x45, + 0x09,0x86,0x8f,0x10,0x4b,0xc6,0xee,0x00,0x11,0x38,0x73,0x7a,0x6a,0xd8,0x25,0x67, + 0x85,0xa4,0x10,0x4e,0xa9,0x2f,0x15,0xfe,0xcf,0x63,0xe1,0xe8,0xcf,0xab,0xe8,0xbd} + }; + #elif defined(SCRYPT_SALSA64) + static const uint8_t post_vectors[][64] = { + {0xf4,0x87,0x29,0xf4,0xc3,0x31,0x8c,0xe8,0xdf,0xe5,0xd8,0x73,0xff,0xca,0x32,0xcf, + 0xd8,0xac,0xe7,0xf7,0x15,0xda,0x84,0x41,0x60,0x23,0x26,0x4a,0xc8,0x3e,0xee,0xa6, + 0xa5,0x6e,0x52,0xd6,0x64,0x55,0x16,0x31,0x3e,0x66,0x7b,0x65,0xd5,0xe2,0xc9,0x95, + 0x1b,0xf0,0x81,0x40,0xb7,0x2f,0xff,0xa6,0xe6,0x02,0xcc,0x63,0x08,0x4a,0x74,0x31}, + {0x7a,0xd8,0xad,0x02,0x9c,0xa5,0xf4,0x42,0x6a,0x29,0xd2,0xb5,0x53,0xf1,0x6d,0x1d, + 0x25,0xc8,0x70,0x48,0x80,0xb9,0xa3,0xf6,0x94,0xf8,0xfa,0xb8,0x52,0x42,0xcd,0x14, + 0x26,0x46,0x28,0x06,0xc7,0xf6,0x1f,0xa7,0x89,0x6d,0xc5,0xa0,0x36,0xcc,0xde,0xcb, + 0x73,0x0b,0xa4,0xe2,0xd3,0xd1,0x44,0x06,0x35,0x08,0xe0,0x35,0x5b,0xf8,0xd7,0xe7} + }; + #endif +#elif defined(SCRYPT_SHA512) + #if defined(SCRYPT_SALSA) + static const uint8_t post_vectors[][64] = { + {0xae,0x54,0xe7,0x74,0xe4,0x51,0x6b,0x0f,0xe1,0xe7,0x28,0x03,0x17,0xe4,0x8c,0xfa, + 0x2f,0x66,0x55,0x7f,0xdc,0x3b,0x40,0xab,0x47,0x84,0xc9,0x63,0x36,0x07,0x9d,0xe5, + 0x86,0x43,0x95,0x89,0xb6,0xc0,0x6c,0x72,0x64,0x00,0xc1,0x2a,0xd7,0x69,0x21,0x92, + 0x8e,0xba,0xa4,0x59,0x9f,0x00,0x14,0x3a,0x7c,0x12,0x58,0x91,0x09,0xa0,0x32,0xfe}, + {0xc5,0xb3,0xd6,0xea,0x0a,0x4b,0x1e,0xcc,0x40,0x00,0xe5,0x98,0x5c,0xdc,0x06,0x06, + 0x78,0x34,0x92,0x16,0xcf,0xe4,0x9f,0x03,0x96,0x2d,0x41,0x35,0x00,0x9b,0xff,0x74, + 0x60,0x19,0x6e,0xe6,0xa6,0x46,0xf7,0x37,0xcb,0xfa,0xd0,0x9f,0x80,0x72,0x2e,0x85, + 0x13,0x3e,0x1a,0x91,0x90,0x53,0xa1,0x33,0x85,0x51,0xdc,0x62,0x1c,0x0e,0x4d,0x30} + }; + #elif defined(SCRYPT_CHACHA) + static const uint8_t post_vectors[][64] = { + {0xe2,0x05,0x7c,0x44,0xf9,0x55,0x9f,0x64,0xbe,0xd5,0x7f,0x85,0x69,0xc7,0x8c,0x7f, + 0x2b,0x91,0xd6,0x9a,0x6c,0xf8,0x57,0x55,0x61,0x25,0x3d,0xee,0xb8,0xd5,0x8c,0xdc, + 0x2d,0xd5,0x53,0x84,0x8c,0x06,0xaa,0x37,0x77,0xa6,0xf0,0xf1,0x35,0xfe,0xb5,0xcb, + 0x61,0xd7,0x2c,0x67,0xf3,0x7e,0x8a,0x1b,0x04,0xa3,0xa3,0x43,0xa2,0xb2,0x29,0xf2}, + {0x82,0xda,0x29,0xb2,0x08,0x27,0xfc,0x78,0x22,0xc4,0xb8,0x7e,0xbc,0x36,0xcf,0xcd, + 0x17,0x4b,0xa1,0x30,0x16,0x4a,0x25,0x70,0xc7,0xcb,0xe0,0x2b,0x56,0xd3,0x16,0x4e, + 0x85,0xb6,0x84,0xe7,0x9b,0x7f,0x8b,0xb5,0x94,0x33,0xcf,0x33,0x44,0x65,0xc8,0xa1, + 0x46,0xf9,0xf5,0xfc,0x74,0x29,0x7e,0xd5,0x46,0xec,0xbd,0x95,0xc1,0x80,0x24,0xe4} + }; + #elif defined(SCRYPT_SALSA64) + static const uint8_t post_vectors[][64] = { + {0xa6,0xcb,0x77,0x9a,0x64,0x1f,0x95,0x02,0x53,0xe7,0x5c,0x78,0xdb,0xa3,0x43,0xff, + 0xbe,0x10,0x4c,0x7b,0xe4,0xe1,0x91,0xcf,0x67,0x69,0x5a,0x2c,0x12,0xd6,0x99,0x49, + 0x92,0xfd,0x5a,0xaa,0x12,0x4c,0x2e,0xf6,0x95,0x46,0x8f,0x5e,0x77,0x62,0x16,0x29, + 0xdb,0xe7,0xab,0x02,0x2b,0x9c,0x35,0x03,0xf8,0xd4,0x04,0x7d,0x2d,0x73,0x85,0xf1}, + {0x54,0xb7,0xca,0xbb,0xaf,0x0f,0xb0,0x5f,0xb7,0x10,0x63,0x48,0xb3,0x15,0xd8,0xb5, + 0x62,0x64,0x89,0x6a,0x59,0xc6,0x0f,0x86,0x96,0x38,0xf0,0xcf,0xd4,0x62,0x90,0x61, + 0x7d,0xce,0xd6,0x13,0x85,0x67,0x4a,0xf5,0x32,0x03,0x74,0x30,0x0b,0x5a,0x2f,0x86, + 0x82,0x6e,0x0c,0x3e,0x40,0x7a,0xde,0xbe,0x42,0x6e,0x80,0x2b,0xaf,0xdb,0xcc,0x94} + }; + #endif +#elif defined(SCRYPT_BLAKE512) + #if defined(SCRYPT_SALSA) + static const uint8_t post_vectors[][64] = { + {0x4a,0x48,0xb3,0xfa,0xdc,0xb0,0xb8,0xdb,0x54,0xee,0xf3,0x5c,0x27,0x65,0x6c,0x20, + 0xab,0x61,0x9a,0x5b,0xd5,0x1d,0xd9,0x95,0xab,0x88,0x0e,0x4d,0x1e,0x71,0x2f,0x11, + 0x43,0x2e,0xef,0x23,0xca,0x8a,0x49,0x3b,0x11,0x38,0xa5,0x28,0x61,0x2f,0xb7,0x89, + 0x5d,0xef,0x42,0x4c,0xc1,0x74,0xea,0x8a,0x56,0xbe,0x4a,0x82,0x76,0x15,0x1a,0x87}, + {0x96,0x24,0xbf,0x40,0xeb,0x03,0x8e,0xfe,0xc0,0xd5,0xa4,0x81,0x85,0x7b,0x09,0x88, + 0x52,0xb5,0xcb,0xc4,0x48,0xe1,0xb9,0x1d,0x3f,0x8b,0x3a,0xc6,0x38,0x32,0xc7,0x55, + 0x30,0x28,0x7a,0x42,0xa9,0x5d,0x54,0x33,0x62,0xf3,0xd9,0x3c,0x96,0x40,0xd1,0x80, + 0xe4,0x0e,0x7e,0xf0,0x64,0x53,0xfe,0x7b,0xd7,0x15,0xba,0xad,0x16,0x80,0x01,0xb5} + }; + #elif defined(SCRYPT_CHACHA) + static const uint8_t post_vectors[][64] = { + {0x45,0x42,0x22,0x31,0x26,0x13,0x5f,0x94,0xa4,0x00,0x04,0x47,0xe8,0x50,0x6d,0xd6, + 0xdd,0xd5,0x08,0xd4,0x90,0x64,0xe0,0x59,0x70,0x46,0xff,0xfc,0x29,0xb3,0x6a,0xc9, + 0x4d,0x45,0x97,0x95,0xa8,0xf0,0x53,0xe7,0xee,0x4b,0x6b,0x5d,0x1e,0xa5,0xb2,0x58, + 0x4b,0x93,0xc9,0x89,0x4c,0xa8,0xab,0x03,0x74,0x38,0xbd,0x54,0x97,0x6b,0xab,0x4a}, + {0x4b,0x4a,0x63,0x96,0x73,0x34,0x9f,0x39,0x64,0x51,0x0e,0x2e,0x3b,0x07,0xd5,0x1c, + 0xd2,0xf7,0xce,0x60,0xab,0xac,0x89,0xa4,0x16,0x0c,0x58,0x82,0xb3,0xd3,0x25,0x5b, + 0xd5,0x62,0x32,0xf4,0x86,0x5d,0xb2,0x4b,0xbf,0x8e,0xc6,0xc0,0xac,0x40,0x48,0xb4, + 0x69,0x08,0xba,0x40,0x4b,0x07,0x2a,0x13,0x9c,0x98,0x3b,0x8b,0x20,0x0c,0xac,0x9e} + }; + #elif defined(SCRYPT_SALSA64) + static const uint8_t post_vectors[][64] = { + {0xcb,0x4b,0xc2,0xd1,0xf4,0x77,0x32,0x3c,0x42,0x9d,0xf7,0x7d,0x1f,0x22,0x64,0xa4, + 0xe2,0x88,0x30,0x2d,0x54,0x9d,0xb6,0x26,0x89,0x25,0x30,0xc3,0x3d,0xdb,0xba,0x99, + 0xe9,0x8e,0x1e,0x5e,0x57,0x66,0x75,0x7c,0x24,0xda,0x00,0x6f,0x79,0xf7,0x47,0xf5, + 0xea,0x40,0x70,0x37,0xd2,0x91,0xc7,0x4d,0xdf,0x46,0xb6,0x3e,0x95,0x7d,0xcb,0xc1}, + {0x25,0xc2,0xcb,0x7f,0xc8,0x50,0xb7,0x0b,0x11,0x9e,0x1d,0x10,0xb2,0xa8,0x35,0x23, + 0x91,0x39,0xfb,0x45,0xf2,0xbf,0xe4,0xd0,0x84,0xec,0x72,0x33,0x6d,0x09,0xed,0x41, + 0x9a,0x7e,0x4f,0x10,0x73,0x97,0x22,0x76,0x58,0x93,0x39,0x24,0xdf,0xd2,0xaa,0x2f, + 0x6b,0x2b,0x64,0x48,0xa5,0xb7,0xf5,0x56,0x77,0x02,0xa7,0x71,0x46,0xe5,0x0e,0x8d}, + }; + #endif +#elif defined(SCRYPT_BLAKE256) + #if defined(SCRYPT_SALSA) + static const uint8_t post_vectors[][64] = { + {0xf1,0xf1,0x91,0x1a,0x81,0xe6,0x9f,0xc1,0xce,0x43,0xab,0xb1,0x1a,0x02,0x1e,0x16, + 0x08,0xc6,0xf9,0x00,0x50,0x1b,0x6d,0xf1,0x31,0x06,0x95,0x48,0x5d,0xf7,0x6c,0x00, + 0xa2,0x4c,0xb1,0x0e,0x52,0x66,0x94,0x7e,0x84,0xfc,0xa5,0x34,0xfd,0xf0,0xe9,0x57, + 0x85,0x2d,0x8c,0x05,0x5c,0x0f,0x04,0xd4,0x8d,0x3e,0x13,0x52,0x3d,0x90,0x2d,0x2c}, + {0xd5,0x42,0xd2,0x7b,0x06,0xae,0x63,0x90,0x9e,0x30,0x00,0x0e,0xd8,0xa4,0x3a,0x0b, + 0xee,0x4a,0xef,0xb2,0xc4,0x95,0x0d,0x72,0x07,0x70,0xcc,0xa3,0xf9,0x1e,0xc2,0x75, + 0xcf,0xaf,0xe1,0x44,0x1c,0x8c,0xe2,0x3e,0x0c,0x81,0xf3,0x92,0xe1,0x13,0xe6,0x4f, + 0x2d,0x27,0xc3,0x87,0xe5,0xb6,0xf9,0xd7,0x02,0x04,0x37,0x64,0x78,0x36,0x6e,0xb3} + }; + #elif defined(SCRYPT_CHACHA) + static const uint8_t post_vectors[][64] = { + {0xad,0x1b,0x4b,0xca,0xe3,0x26,0x1a,0xfd,0xb7,0x77,0x8c,0xde,0x8d,0x26,0x14,0xe1, + 0x54,0x38,0x42,0xf3,0xb3,0x66,0x29,0xf9,0x90,0x04,0xf1,0x82,0x7c,0x5a,0x6f,0xa8, + 0x7d,0xd6,0x08,0x0d,0x8b,0x78,0x04,0xad,0x31,0xea,0xd4,0x87,0x2d,0xf7,0x74,0x9a, + 0xe5,0xce,0x97,0xef,0xa3,0xbb,0x90,0x46,0x7c,0xf4,0x51,0x38,0xc7,0x60,0x53,0x21}, + {0x39,0xbb,0x56,0x3d,0x0d,0x7b,0x74,0x82,0xfe,0x5a,0x78,0x3d,0x66,0xe8,0x3a,0xdf, + 0x51,0x6f,0x3e,0xf4,0x86,0x20,0x8d,0xe1,0x81,0x22,0x02,0xf7,0x0d,0xb5,0x1a,0x0f, + 0xfc,0x59,0xb6,0x60,0xc9,0xdb,0x38,0x0b,0x5b,0x95,0xa5,0x94,0xda,0x42,0x2d,0x90, + 0x47,0xeb,0x73,0x31,0x9f,0x20,0xf6,0x81,0xc2,0xef,0x33,0x77,0x51,0xd8,0x2c,0xe4} + }; + #elif defined(SCRYPT_SALSA64) + static const uint8_t post_vectors[][64] = { + {0x9e,0xf2,0x60,0x7c,0xbd,0x7c,0x19,0x5c,0x79,0xc6,0x1b,0x7e,0xb0,0x65,0x1b,0xc3, + 0x70,0x0d,0x89,0xfc,0x72,0xb2,0x03,0x72,0x15,0xcb,0x8e,0x8c,0x49,0x50,0x4c,0x27, + 0x99,0xda,0x47,0x32,0x5e,0xb4,0xa2,0x07,0x83,0x51,0x6b,0x06,0x37,0x60,0x42,0xc4, + 0x59,0x49,0x99,0xdd,0xc0,0xd2,0x08,0x94,0x7f,0xe3,0x9e,0x4e,0x43,0x8e,0x5b,0xba}, + {0x86,0x6f,0x3b,0x11,0xb8,0xca,0x4b,0x6e,0xa7,0x6f,0xc2,0xc9,0x33,0xb7,0x8b,0x9f, + 0xa3,0xb9,0xf5,0xb5,0x62,0xa6,0x17,0x66,0xe4,0xc3,0x9d,0x9b,0xca,0x51,0xb0,0x2f, + 0xda,0x09,0xc1,0x77,0xed,0x8b,0x89,0xc2,0x69,0x5a,0x34,0x05,0x4a,0x1f,0x4d,0x76, + 0xcb,0xd5,0xa4,0x78,0xfa,0x1b,0xb9,0x5b,0xbc,0x3d,0xce,0x04,0x63,0x99,0xad,0x54} + }; + #endif +#elif defined(SCRYPT_SKEIN512) + #if defined(SCRYPT_SALSA) + static const uint8_t post_vectors[][64] = { + {0xe4,0x36,0xa0,0x9a,0xdb,0xf0,0xd1,0x45,0x56,0xda,0x25,0x53,0x00,0xf9,0x2c,0x69, + 0xa4,0xc2,0xa5,0x8e,0x1a,0x85,0xfa,0x53,0xbd,0x55,0x3d,0x11,0x2a,0x44,0x13,0x87, + 0x8f,0x81,0x88,0x13,0x1e,0x49,0xa8,0xc4,0xc5,0xcd,0x1f,0xe1,0x5f,0xf5,0xcb,0x2f, + 0x8b,0xab,0x57,0x38,0x59,0xeb,0x6b,0xac,0x3b,0x73,0x10,0xa6,0xe1,0xfe,0x17,0x3e}, + {0x6d,0x61,0xde,0x43,0xa9,0x38,0x53,0x5f,0xd8,0xf2,0x6d,0xf3,0xe4,0xd6,0xd8,0x5e, + 0x81,0x89,0xd0,0x0b,0x86,0x16,0xb1,0x91,0x65,0x76,0xd8,0xc1,0xf7,0x3b,0xca,0x8b, + 0x35,0x07,0x58,0xba,0x77,0xdf,0x11,0x6c,0xbc,0x58,0xee,0x11,0x59,0xf2,0xfe,0xcb, + 0x51,0xdc,0xcd,0x35,0x2e,0x46,0x22,0xa0,0xaa,0x55,0x60,0x7c,0x91,0x15,0xb8,0x00} + }; + #elif defined(SCRYPT_CHACHA) + static const uint8_t post_vectors[][64] = { + {0xd1,0x12,0x6d,0x64,0x10,0x0e,0x98,0x6c,0xbe,0x70,0x21,0xd9,0xc6,0x04,0x62,0xa4, + 0x29,0x13,0x9a,0x3c,0xf8,0xe9,0x1e,0x87,0x9f,0x88,0xf4,0x98,0x01,0x41,0x8e,0xce, + 0x60,0xf7,0xbe,0x17,0x0a,0xec,0xd6,0x30,0x80,0xcf,0x6b,0x1e,0xcf,0x95,0xa0,0x4d, + 0x37,0xed,0x3a,0x09,0xd1,0xeb,0x0c,0x80,0x82,0x22,0x8e,0xd3,0xb1,0x7f,0xd6,0xa8}, + {0x5c,0x5c,0x05,0xe2,0x75,0xa5,0xa4,0xec,0x81,0x97,0x9c,0x5b,0xd7,0x26,0xb3,0x16, + 0xb4,0x02,0x8c,0x56,0xe6,0x32,0x57,0x33,0x47,0x19,0x06,0x6c,0xde,0x68,0x41,0x37, + 0x5b,0x7d,0xa7,0xb3,0x73,0xeb,0x82,0xca,0x0f,0x86,0x2e,0x6b,0x47,0xa2,0x70,0x39, + 0x35,0xfd,0x2d,0x2e,0x7b,0xc3,0x68,0xbb,0x52,0x42,0x19,0x3b,0x78,0x96,0xe7,0xc8} + }; + #elif defined(SCRYPT_SALSA64) + static const uint8_t post_vectors[][64] = { + {0xd2,0xad,0x32,0x05,0xee,0x80,0xe3,0x44,0x70,0xc6,0x34,0xde,0x05,0xb6,0xcf,0x60, + 0x89,0x98,0x70,0xc0,0xb8,0xf5,0x54,0xf1,0xa6,0xb2,0xc8,0x76,0x34,0xec,0xc4,0x59, + 0x8e,0x64,0x42,0xd0,0xa9,0xed,0xe7,0x19,0xb2,0x8a,0x11,0xc6,0xa6,0xbf,0xa7,0xa9, + 0x4e,0x44,0x32,0x7e,0x12,0x91,0x9d,0xfe,0x52,0x48,0xa8,0x27,0xb3,0xfc,0xb1,0x89}, + {0xd6,0x67,0xd2,0x3e,0x30,0x1e,0x9d,0xe2,0x55,0x68,0x17,0x3d,0x2b,0x75,0x5a,0xe5, + 0x04,0xfb,0x3d,0x0e,0x86,0xe0,0xaa,0x1d,0xd4,0x72,0xda,0xb0,0x79,0x41,0xb7,0x99, + 0x68,0xe5,0xd9,0x55,0x79,0x7d,0xc3,0xd1,0xa6,0x56,0xc1,0xbe,0x0b,0x6c,0x62,0x23, + 0x66,0x67,0x91,0x47,0x99,0x13,0x6b,0xe3,0xda,0x59,0x55,0x18,0x67,0x8f,0x2e,0x3b} + }; + #endif +#elif defined(SCRYPT_KECCAK512) + #if defined(SCRYPT_SALSA) + static const uint8_t post_vectors[][64] = { + {0xc2,0x7b,0xbe,0x1d,0xf1,0x99,0xd8,0xe7,0x1b,0xac,0xe0,0x9d,0xeb,0x5a,0xfe,0x21, + 0x71,0xff,0x41,0x51,0x4f,0xbe,0x41,0x01,0x15,0xe2,0xb7,0xb9,0x55,0x15,0x25,0xa1, + 0x40,0x4c,0x66,0x29,0x32,0xb7,0xc9,0x62,0x60,0x88,0xe0,0x99,0x39,0xae,0xce,0x25, + 0x3c,0x11,0x89,0xdd,0xc6,0x14,0xd7,0x3e,0xa3,0x6d,0x07,0x2e,0x56,0xa0,0xff,0x97}, + {0x3c,0x91,0x12,0x4a,0x37,0x7d,0xd6,0x96,0xd2,0x9b,0x5d,0xea,0xb8,0xb9,0x82,0x4e, + 0x4f,0x6b,0x60,0x4c,0x59,0x01,0xe5,0x73,0xfd,0xf6,0xb8,0x9a,0x5a,0xd3,0x7c,0x7a, + 0xd2,0x4f,0x8e,0x74,0xc1,0x90,0x88,0xa0,0x3f,0x55,0x75,0x79,0x10,0xd0,0x09,0x79, + 0x0f,0x6c,0x74,0x0c,0x05,0x08,0x3c,0x8c,0x94,0x7b,0x30,0x56,0xca,0xdf,0xdf,0x34} + }; + #elif defined(SCRYPT_CHACHA) + static const uint8_t post_vectors[][64] = { + {0x77,0xcb,0x70,0xbf,0xae,0xd4,0x4c,0x5b,0xbc,0xd3,0xec,0x8a,0x82,0x43,0x8d,0xb3, + 0x7f,0x1f,0xfb,0x70,0x36,0x32,0x4d,0xa6,0xb7,0x13,0x37,0x77,0x30,0x0c,0x3c,0xfb, + 0x2c,0x20,0x8f,0x2a,0xf4,0x47,0x4d,0x69,0x8e,0xae,0x2d,0xad,0xba,0x35,0xe9,0x2f, + 0xe6,0x99,0x7a,0xf8,0xcf,0x70,0x78,0xbb,0x0c,0x72,0x64,0x95,0x8b,0x36,0x77,0x3d}, + {0xc6,0x43,0x17,0x16,0x87,0x09,0x5f,0x12,0xed,0x21,0xe2,0xb4,0xad,0x55,0xa1,0xa1, + 0x49,0x50,0x90,0x70,0xab,0x81,0x83,0x7a,0xcd,0xdf,0x23,0x52,0x19,0xc0,0xa2,0xd8, + 0x8e,0x98,0xeb,0xf0,0x37,0xab,0xad,0xfd,0x1c,0x04,0x97,0x18,0x42,0x85,0xf7,0x4b, + 0x18,0x2c,0x55,0xd3,0xa9,0xe6,0x89,0xfb,0x58,0x0a,0xb2,0x37,0xb9,0xf8,0xfb,0xc5} + }; + #elif defined(SCRYPT_SALSA64) + static const uint8_t post_vectors[][64] = { + {0xc7,0x34,0x95,0x02,0x5e,0x31,0x0d,0x1f,0x10,0x38,0x9c,0x3f,0x04,0x53,0xed,0x05, + 0x27,0x38,0xc1,0x3f,0x6a,0x0f,0xc5,0xa3,0x9b,0x73,0x8a,0x28,0x7e,0x5d,0x3c,0xdc, + 0x9d,0x5a,0x09,0xbf,0x8c,0x0a,0xad,0xe4,0x73,0x52,0xe3,0x6d,0xaa,0xd1,0x8b,0xbf, + 0xa3,0xb7,0xf0,0x58,0xad,0x22,0x24,0xc9,0xaa,0x96,0xb7,0x5d,0xfc,0x5f,0xb0,0xcf}, + {0x76,0x22,0xfd,0xe8,0xa2,0x79,0x8e,0x9d,0x43,0x8c,0x7a,0xba,0x78,0xb7,0x84,0xf1, + 0xc8,0xee,0x3b,0xae,0x31,0x89,0xbf,0x7e,0xd0,0x4b,0xc1,0x2d,0x58,0x5d,0x84,0x6b, + 0xec,0x86,0x56,0xe0,0x87,0x94,0x7f,0xbc,0xf9,0x48,0x92,0xef,0x54,0x7f,0x23,0x8d, + 0x4f,0x8b,0x0a,0x75,0xa7,0x39,0x0e,0x46,0x6e,0xee,0x58,0xc8,0xfa,0xea,0x90,0x53} + }; + #endif +#elif defined(SCRYPT_KECCAK256) + #if defined(SCRYPT_SALSA) + static const uint8_t post_vectors[][64] = { + {0x2e,0x96,0xd8,0x87,0x45,0xcd,0xd6,0xc8,0xf6,0xd2,0x87,0x33,0x50,0xc7,0x04,0xe5, + 0x3c,0x4b,0x48,0x44,0x57,0xc1,0x74,0x09,0x76,0x02,0xaa,0xd3,0x7b,0xf3,0xbf,0xed, + 0x4b,0x72,0xd7,0x1b,0x49,0x6b,0xe0,0x44,0x83,0xee,0x8f,0xaf,0xa1,0xb5,0x33,0xa9, + 0x9e,0x86,0xab,0xe2,0x9f,0xcf,0x68,0x6e,0x7e,0xbd,0xf5,0x7a,0x83,0x4b,0x1c,0x10}, + {0x42,0x7e,0xf9,0x4b,0x72,0x61,0xda,0x2d,0xb3,0x27,0x0e,0xe1,0xd9,0xde,0x5f,0x3e, + 0x64,0x2f,0xd6,0xda,0x90,0x59,0xce,0xbf,0x02,0x5b,0x32,0xf7,0x6d,0x94,0x51,0x7b, + 0xb6,0xa6,0x0d,0x99,0x3e,0x7f,0x39,0xbe,0x1b,0x1d,0x6c,0x97,0x12,0xd8,0xb7,0xfd, + 0x5b,0xb5,0xf3,0x73,0x5a,0x89,0xb2,0xdd,0xcc,0x3d,0x74,0x2e,0x3d,0x9e,0x3c,0x22} + }; + #elif defined(SCRYPT_CHACHA) + static const uint8_t post_vectors[][64] = { + {0x76,0x1d,0x5b,0x8f,0xa9,0xe1,0xa6,0x01,0xcb,0xc5,0x7a,0x5f,0x02,0x23,0xb6,0x82, + 0x57,0x79,0x60,0x2f,0x05,0x7f,0xb8,0x0a,0xcb,0x5e,0x54,0x11,0x49,0x2e,0xdd,0x85, + 0x83,0x30,0x67,0xb3,0x24,0x5c,0xce,0xfc,0x32,0xcf,0x12,0xc3,0xff,0xe0,0x79,0x36, + 0x74,0x17,0xa6,0x3e,0xcd,0xa0,0x7e,0xcb,0x37,0xeb,0xcb,0xb6,0xe1,0xb9,0xf5,0x15}, + {0xf5,0x66,0xa7,0x4c,0xe4,0xdc,0x18,0x56,0x2f,0x3e,0x86,0x4d,0x92,0xa5,0x5c,0x5a, + 0x8f,0xc3,0x6b,0x32,0xdb,0xe5,0x72,0x50,0x84,0xfc,0x6e,0x5d,0x15,0x77,0x3d,0xca, + 0xc5,0x2b,0x20,0x3c,0x78,0x37,0x80,0x78,0x23,0x56,0x91,0xa0,0xce,0xa4,0x06,0x5a, + 0x7f,0xe3,0xbf,0xab,0x51,0x57,0x32,0x2c,0x0a,0xf0,0xc5,0x6f,0xf4,0xcb,0xff,0x42} + }; + #elif defined(SCRYPT_SALSA64) + static const uint8_t post_vectors[][64] = { + {0xb0,0xb7,0x10,0xb5,0x1f,0x2b,0x7f,0xaf,0x9d,0x95,0x5f,0x4c,0x2d,0x98,0x7c,0xc1, + 0xbc,0x37,0x2f,0x50,0x8d,0xb2,0x9f,0xfd,0x48,0x0d,0xe0,0x44,0x19,0xdf,0x28,0x6c, + 0xab,0xbf,0x1e,0x17,0x26,0xcc,0x57,0x95,0x18,0x17,0x83,0x4c,0x12,0x48,0xd9,0xee, + 0x4b,0x00,0x29,0x06,0x31,0x01,0x6b,0x8c,0x26,0x39,0xbf,0xe4,0xe4,0xd4,0x6a,0x26}, + {0xa0,0x40,0xb2,0xf2,0x11,0xb6,0x5f,0x3d,0x4c,0x1e,0xef,0x59,0xd4,0x98,0xdb,0x14, + 0x01,0xff,0xe3,0x34,0xd7,0x19,0xcd,0xeb,0xde,0x52,0x1c,0xf4,0x86,0x43,0xc9,0xe2, + 0xfb,0xf9,0x4f,0x0a,0xbb,0x1f,0x5c,0x6a,0xdf,0xb9,0x28,0xfa,0xac,0xc4,0x48,0xed, + 0xcc,0xd2,0x2e,0x25,0x5f,0xf3,0x56,0x1d,0x2d,0x23,0x22,0xc1,0xbc,0xff,0x78,0x80} + }; + #endif +#else + static const uint8_t post_vectors[][64] = {{0}}; +#endif + diff --git a/deps/scrypt-jane-master/example.c b/deps/scrypt-jane-master/example.c new file mode 100644 index 000000000..6f290a13c --- /dev/null +++ b/deps/scrypt-jane-master/example.c @@ -0,0 +1,13 @@ +#include +#include "scrypt-jane.h" + + +int main(void) { + unsigned char digest[16]; + int i; + scrypt("pw", 2, "salt", 4, 0, 0, 0, digest, 16); + for (i = 0; i < sizeof(digest); i++) + printf("%02x, ", digest[i]); + printf("\n"); + return 0; +} \ No newline at end of file diff --git a/deps/scrypt-jane-master/scrypt-jane-speed.c b/deps/scrypt-jane-master/scrypt-jane-speed.c new file mode 100644 index 000000000..e8d61b3c0 --- /dev/null +++ b/deps/scrypt-jane-master/scrypt-jane-speed.c @@ -0,0 +1,121 @@ +#define SCRYPT_TEST_SPEED +#include "scrypt-jane.c" + +/* ticks - not tested on anything other than x86 */ +static uint64_t +get_ticks(void) { +#if defined(CPU_X86) || defined(CPU_X86_64) + #if defined(COMPILER_INTEL) + return _rdtsc(); + #elif defined(COMPILER_MSVC) + return __rdtsc(); + #elif defined(COMPILER_GCC) + uint32_t lo, hi; + __asm__ __volatile__("rdtsc" : "=a" (lo), "=d" (hi)); + return ((uint64_t)lo | ((uint64_t)hi << 32)); + #else + need rdtsc for this compiler + #endif +#elif defined(OS_SOLARIS) + return (uint64_t)gethrtime(); +#elif defined(CPU_SPARC) && !defined(OS_OPENBSD) + uint64_t t; + __asm__ __volatile__("rd %%tick, %0" : "=r" (t)); + return t; +#elif defined(CPU_PPC) + uint32_t lo = 0, hi = 0; + __asm__ __volatile__("mftbu %0; mftb %1" : "=r" (hi), "=r" (lo)); + return ((uint64_t)lo | ((uint64_t)hi << 32)); +#elif defined(CPU_IA64) + uint64_t t; + __asm__ __volatile__("mov %0=ar.itc" : "=r" (t)); + return t; +#elif defined(OS_NIX) + timeval t2; + gettimeofday(&t2, NULL); + t = ((uint64_t)t2.tv_usec << 32) | (uint64_t)t2.tv_sec; + return t; +#else + need ticks for this platform +#endif +} + +#define timeit(x,minvar) { \ + ticks = get_ticks(); \ + x; \ + ticks = get_ticks() - ticks; \ + if (ticks < minvar) \ + minvar = ticks; \ + } + +#define maxticks 0xffffffffffffffffull + +typedef struct scrypt_speed_settings_t { + const char *desc; + uint8_t Nfactor, rfactor, pfactor; +} scrypt_speed_settings; + +/* scrypt_r_32kb is set to a 32kb chunk, so (1 << (scrypt_r_32kb - 5)) = 1kb chunk */ +static const scrypt_speed_settings settings[] = { + {"scrypt high volume ( ~4mb)", 11, scrypt_r_32kb - 5, 0}, + {"scrypt interactive (~16mb)", 13, scrypt_r_32kb - 5, 0}, + {"scrypt non-interactive (~ 1gb)", 19, scrypt_r_32kb - 5, 0}, + {0} +}; + +int main(void) { + const scrypt_speed_settings *s; + uint8_t password[64], salt[24], digest[64]; + uint64_t minticks, ticks; + size_t i, passes; + size_t cpuflags, topbit; + + for (i = 0; i < sizeof(password); i++) + password[i] = (uint8_t)i; + for (i = 0; i < sizeof(salt); i++) + salt[i] = 255 - (uint8_t)i; + + /* warm up a little */ + scrypt(password, sizeof(password), salt, sizeof(salt), 15, 3, 4, digest, sizeof(digest)); + + cpuflags = available_implementations(); + topbit = 0; + for (i = cpuflags; i != 0; i >>= 1) + topbit++; + topbit = ((size_t)1 << topbit); + + while (1) { + #if defined(SCRYPT_CHOOSE_COMPILETIME) + printf("speed test for scrypt[%s,%s]\n", SCRYPT_HASH, SCRYPT_MIX); + #else + printf("speed test for scrypt[%s,%s,%s]\n", SCRYPT_HASH, SCRYPT_MIX, get_top_cpuflag_desc(cpuflags)); + #endif + + cpu_detect_mask = cpuflags; + for (i = 0; settings[i].desc; i++) { + s = &settings[i]; + minticks = maxticks; + for (passes = 0; passes < 16; passes++) + timeit(scrypt(password, sizeof(password), salt, sizeof(salt), s->Nfactor, s->rfactor, s->pfactor, digest, sizeof(digest)), minticks) + + printf("%s, %.0f ticks\n", s->desc, (double)minticks); + } + + #if defined(SCRYPT_CHOOSE_COMPILETIME) + break; + #else + while (topbit && ((cpuflags & topbit) == 0)) + topbit >>= 1; + cpuflags &= ~topbit; + + /* (cpuflags == 0) is the basic/portable version, don't bother timing it */ + if (!cpuflags) + break; + #endif + } + + printf("\n\n"); + + return 0; +} + diff --git a/deps/scrypt-jane-master/scrypt-jane-test.c b/deps/scrypt-jane-master/scrypt-jane-test.c new file mode 100644 index 000000000..808f84311 --- /dev/null +++ b/deps/scrypt-jane-master/scrypt-jane-test.c @@ -0,0 +1,12 @@ +#define SCRYPT_TEST +#include "scrypt-jane.c" + +int main(void) { + int res = scrypt_power_on_self_test(); + + printf("%s: test %s\n", SCRYPT_MIX, (res & 1) ? "ok" : "FAILED"); + printf("%s: test %s\n", SCRYPT_HASH, (res & 2) ? "ok" : "FAILED"); + printf("scrypt: test vectors %s\n", (res & 4) ? "ok" : "FAILED"); + + return ((res & 7) == 7) ? 0 : 1; +} diff --git a/deps/scrypt-jane-master/scrypt-jane.c b/deps/scrypt-jane-master/scrypt-jane.c new file mode 100644 index 000000000..e057c6d9a --- /dev/null +++ b/deps/scrypt-jane-master/scrypt-jane.c @@ -0,0 +1,182 @@ +/* + scrypt-jane by Andrew M, https://github.com/floodyberry/scrypt-jane + + Public Domain or MIT License, whichever is easier +*/ + +#include + +#include "scrypt-jane.h" +#include "code/scrypt-jane-portable.h" +#include "code/scrypt-jane-hash.h" +#include "code/scrypt-jane-romix.h" +#include "code/scrypt-jane-test-vectors.h" + + +#define scrypt_maxNfactor 30 /* (1 << (30 + 1)) = ~2 billion */ +#if (SCRYPT_BLOCK_BYTES == 64) +#define scrypt_r_32kb 8 /* (1 << 8) = 256 * 2 blocks in a chunk * 64 bytes = Max of 32kb in a chunk */ +#elif (SCRYPT_BLOCK_BYTES == 128) +#define scrypt_r_32kb 7 /* (1 << 7) = 128 * 2 blocks in a chunk * 128 bytes = Max of 32kb in a chunk */ +#elif (SCRYPT_BLOCK_BYTES == 256) +#define scrypt_r_32kb 6 /* (1 << 6) = 64 * 2 blocks in a chunk * 256 bytes = Max of 32kb in a chunk */ +#elif (SCRYPT_BLOCK_BYTES == 512) +#define scrypt_r_32kb 5 /* (1 << 5) = 32 * 2 blocks in a chunk * 512 bytes = Max of 32kb in a chunk */ +#endif +#define scrypt_maxrfactor scrypt_r_32kb /* 32kb */ +#define scrypt_maxpfactor 25 /* (1 << 25) = ~33 million */ + +#include +//#include + +static void NORETURN +scrypt_fatal_error_default(const char *msg) { + fprintf(stderr, "%s\n", msg); + exit(1); +} + +static scrypt_fatal_errorfn scrypt_fatal_error = scrypt_fatal_error_default; + +void +scrypt_set_fatal_error(scrypt_fatal_errorfn fn) { + scrypt_fatal_error = fn; +} + +static int +scrypt_power_on_self_test(void) { + const scrypt_test_setting *t; + uint8_t test_digest[64]; + uint32_t i; + int res = 7, scrypt_valid; + + if (!scrypt_test_mix()) { +#if !defined(SCRYPT_TEST) + scrypt_fatal_error("scrypt: mix function power-on-self-test failed"); +#endif + res &= ~1; + } + + if (!scrypt_test_hash()) { +#if !defined(SCRYPT_TEST) + scrypt_fatal_error("scrypt: hash function power-on-self-test failed"); +#endif + res &= ~2; + } + + for (i = 0, scrypt_valid = 1; post_settings[i].pw; i++) { + t = post_settings + i; + scrypt((uint8_t *)t->pw, strlen(t->pw), (uint8_t *)t->salt, strlen(t->salt), t->Nfactor, t->rfactor, t->pfactor, test_digest, sizeof(test_digest)); + scrypt_valid &= scrypt_verify(post_vectors[i], test_digest, sizeof(test_digest)); + } + + if (!scrypt_valid) { +#if !defined(SCRYPT_TEST) + scrypt_fatal_error("scrypt: scrypt power-on-self-test failed"); +#endif + res &= ~4; + } + + return res; +} + +typedef struct scrypt_aligned_alloc_t { + uint8_t *mem, *ptr; +} scrypt_aligned_alloc; + +#if defined(SCRYPT_TEST_SPEED) +static uint8_t *mem_base = (uint8_t *)0; +static size_t mem_bump = 0; + +/* allocations are assumed to be multiples of 64 bytes and total allocations not to exceed ~1.01gb */ +static scrypt_aligned_alloc +scrypt_alloc(uint64_t size) { + scrypt_aligned_alloc aa; + if (!mem_base) { + mem_base = (uint8_t *)malloc((1024 * 1024 * 1024) + (1024 * 1024) + (SCRYPT_BLOCK_BYTES - 1)); + if (!mem_base) + scrypt_fatal_error("scrypt: out of memory"); + mem_base = (uint8_t *)(((size_t)mem_base + (SCRYPT_BLOCK_BYTES - 1)) & ~(SCRYPT_BLOCK_BYTES - 1)); + } + aa.mem = mem_base + mem_bump; + aa.ptr = aa.mem; + mem_bump += (size_t)size; + return aa; +} + +static void +scrypt_free(scrypt_aligned_alloc *aa) { + mem_bump = 0; +} +#else +static scrypt_aligned_alloc +scrypt_alloc(uint64_t size) { + static const size_t max_alloc = (size_t)-1; + scrypt_aligned_alloc aa; + size += (SCRYPT_BLOCK_BYTES - 1); + if (size > max_alloc) + scrypt_fatal_error("scrypt: not enough address space on this CPU to allocate required memory"); + aa.mem = (uint8_t *)malloc((size_t)size); + aa.ptr = (uint8_t *)(((size_t)aa.mem + (SCRYPT_BLOCK_BYTES - 1)) & ~(SCRYPT_BLOCK_BYTES - 1)); + if (!aa.mem) + scrypt_fatal_error("scrypt: out of memory"); + return aa; +} + +static void +scrypt_free(scrypt_aligned_alloc *aa) { + free(aa->mem); +} +#endif + + +void +scrypt(const uint8_t *password, size_t password_len, const uint8_t *salt, size_t salt_len, uint8_t Nfactor, uint8_t rfactor, uint8_t pfactor, uint8_t *out, size_t bytes) { + scrypt_aligned_alloc YX, V; + uint8_t *X, *Y; + uint32_t N, r, p, chunk_bytes, i; + +#if !defined(SCRYPT_CHOOSE_COMPILETIME) + scrypt_ROMixfn scrypt_ROMix = scrypt_getROMix(); +#endif + +#if !defined(SCRYPT_TEST) + static int power_on_self_test = 0; + if (!power_on_self_test) { + power_on_self_test = 1; + if (!scrypt_power_on_self_test()) + scrypt_fatal_error("scrypt: power on self test failed"); + } +#endif + + if (Nfactor > scrypt_maxNfactor) + scrypt_fatal_error("scrypt: N out of range"); + if (rfactor > scrypt_maxrfactor) + scrypt_fatal_error("scrypt: r out of range"); + if (pfactor > scrypt_maxpfactor) + scrypt_fatal_error("scrypt: p out of range"); + + N = (1 << (Nfactor + 1)); + r = (1 << rfactor); + p = (1 << pfactor); + + chunk_bytes = SCRYPT_BLOCK_BYTES * r * 2; + V = scrypt_alloc((uint64_t)N * chunk_bytes); + YX = scrypt_alloc((p + 1) * chunk_bytes); + + /* 1: X = PBKDF2(password, salt) */ + Y = YX.ptr; + X = Y + chunk_bytes; + scrypt_pbkdf2(password, password_len, salt, salt_len, 1, X, chunk_bytes * p); + + /* 2: X = ROMix(X) */ + for (i = 0; i < p; i++) + scrypt_ROMix((scrypt_mix_word_t *)(X + (chunk_bytes * i)), (scrypt_mix_word_t *)Y, (scrypt_mix_word_t *)V.ptr, N, r); + + /* 3: Out = PBKDF2(password, X) */ + scrypt_pbkdf2(password, password_len, X, chunk_bytes * p, 1, out, bytes); + + scrypt_ensure_zero(YX.ptr, (p + 1) * chunk_bytes); + + scrypt_free(&V); + scrypt_free(&YX); +} diff --git a/deps/scrypt-jane-master/scrypt-jane.h b/deps/scrypt-jane-master/scrypt-jane.h new file mode 100644 index 000000000..1c0df6242 --- /dev/null +++ b/deps/scrypt-jane-master/scrypt-jane.h @@ -0,0 +1,27 @@ +#ifndef SCRYPT_JANE_H +#define SCRYPT_JANE_H + +/* + Nfactor: Increases CPU & Memory Hardness + N = (1 << (Nfactor + 1)): How many times to mix a chunk and how many temporary chunks are used + + rfactor: Increases Memory Hardness + r = (1 << rfactor): How large a chunk is + + pfactor: Increases CPU Hardness + p = (1 << pfactor): Number of times to mix the main chunk + + A block is the basic mixing unit (salsa/chacha block = 64 bytes) + A chunk is (2 * r) blocks + + ~Memory used = (N + 2) * ((2 * r) * block size) +*/ + +#include + +typedef void (*scrypt_fatal_errorfn)(const char *msg); +void scrypt_set_fatal_error(scrypt_fatal_errorfn fn); + +void scrypt(const unsigned char *password, size_t password_len, const unsigned char *salt, size_t salt_len, unsigned char Nfactor, unsigned char rfactor, unsigned char pfactor, unsigned char *out, size_t bytes); + +#endif /* SCRYPT_JANE_H */ diff --git a/deps/scrypt-jane-master/test-speed.sh b/deps/scrypt-jane-master/test-speed.sh new file mode 100644 index 000000000..f223dae49 --- /dev/null +++ b/deps/scrypt-jane-master/test-speed.sh @@ -0,0 +1,38 @@ +#!/bin/sh + +test() { + sleep 0.25 # mingw is stupid and will occasionally not have permission to overwrite scrypt_speed + gcc scrypt-jane-speed.c -O3 -DSCRYPT_$1 -DSCRYPT_$2 $3 -o scrypt_speed 2>/dev/null + local RC=$? + if [ $RC -ne 0 ]; then + echo "$1/$2: failed to compile " + return + fi + ./scrypt_speed +} + +testhash() { + test $1 SALSA $2 + test $1 CHACHA $2 + test $1 SALSA64 $2 +} + +testhashes() { + testhash SHA256 $1 + testhash SHA512 $1 + testhash BLAKE256 $1 + testhash BLAKE512 $1 + testhash SKEIN512 $1 + testhash KECCAK256 $1 + testhash KECCAK512 $1 +} + +if [ -z $1 ]; then + testhashes +elif [ $1 -eq 32 ]; then + testhashes -m32 +elif [ $1 -eq 64 ]; then + testhashes -m64 +fi + +rm -f scrypt_speed \ No newline at end of file diff --git a/deps/scrypt-jane-master/test.sh b/deps/scrypt-jane-master/test.sh new file mode 100644 index 000000000..f1a1f62ce --- /dev/null +++ b/deps/scrypt-jane-master/test.sh @@ -0,0 +1,44 @@ +#!/bin/sh + +test() { + sleep 0.25 # mingw is stupid and will occasionally not have permission to overwrite scrypt_test + gcc scrypt-jane-test.c -O3 -DSCRYPT_$1 -DSCRYPT_$2 $3 -o scrypt_test #2>/dev/null + local RC=$? + if [ $RC -ne 0 ]; then + echo "$1/$2: failed to compile " + return + fi + ./scrypt_test >/dev/null + local RC=$? + if [ $RC -ne 0 ]; then + echo "$1/$2: validation failed" + return + fi + echo "$1/$2: OK" +} + +testhash() { + test $1 SALSA $2 + test $1 CHACHA $2 + test $1 SALSA64 $2 +} + +testhashes() { + testhash SHA256 $1 + testhash SHA512 $1 + testhash BLAKE256 $1 + testhash BLAKE512 $1 + testhash SKEIN512 $1 + testhash KECCAK256 $1 + testhash KECCAK512 $1 +} + +if [ -z $1 ]; then + testhashes +elif [ $1 -eq 32 ]; then + testhashes -m32 +elif [ $1 -eq 64 ]; then + testhashes -m64 +fi + +rm -f scrypt_test diff --git a/src/bridges/bridge_scrypt_jane.c b/src/bridges/bridge_scrypt_jane.c new file mode 100644 index 000000000..b8e2a7759 --- /dev/null +++ b/src/bridges/bridge_scrypt_jane.c @@ -0,0 +1,292 @@ +/** + * Author......: See docs/credits.txt + * License.....: MIT + */ + +#include "common.h" +#include "types.h" +#include "bridges.h" +#include "memory.h" + +#include "code/scrypt-jane-portable.h" +#include "code/scrypt-jane-hash.h" +#include "code/scrypt-jane-romix.h" + +// good: we can use this multiplier do reduce copy overhead to increase the guessing speed, +// bad: but we also increase the password candidate batch size. +// slow hashes which make use of this bridge probably are used with smaller wordlists, +// and therefore it's easier for hashcat to parallelize if this multiplier is low. +// in the end, it's a trade-off. + +#define N_ACCEL 8 + +#define SCRYPT_R_MAX 16 +#define SCRYPT_P_MAX 16 + +#define SCRYPT_TMP_SIZE (128ULL * SCRYPT_R_MAX * SCRYPT_P_MAX) +#define SCRYPT_TMP_SIZE4 (SCRYPT_TMP_SIZE / 4) + +typedef struct +{ + u32 P[SCRYPT_TMP_SIZE4]; + +} scrypt_tmp_t; + +typedef struct +{ + u32 salt_buf[64]; + u32 salt_len; + + u32 digest_buf[64]; + u32 digest_len; + + u32 N; + u32 r; + u32 p; + +} scrypt_t; + +typedef struct +{ + void *V; + //void *X; + void *Y; + + // implementation specific + + char unit_info_buf[1024]; + int unit_info_len; + + u64 workitem_count; + size_t workitem_size; + +} unit_t; + +typedef struct +{ + unit_t *units_buf; + int units_cnt; + +} bridge_scrypt_jane_t; + +static bool units_init (bridge_scrypt_jane_t *bridge_scrypt_jane) +{ + #if defined (_WIN) + + SYSTEM_INFO sysinfo; + + GetSystemInfo (&sysinfo); + + int num_devices = sysinfo.dwNumberOfProcessors; + + #else + + int num_devices = sysconf (_SC_NPROCESSORS_ONLN); + + #endif + + unit_t *units_buf = (unit_t *) hccalloc (num_devices, sizeof (unit_t)); + + int units_cnt = 0; + + for (int i = 0; i < num_devices; i++) + { + unit_t *unit_buf = &units_buf[i]; + + unit_buf->unit_info_len = snprintf (unit_buf->unit_info_buf, sizeof (unit_buf->unit_info_buf) - 1, + "%s", + "Scrypt-Jane ROMix"); + + unit_buf->unit_info_buf[unit_buf->unit_info_len] = 0; + + unit_buf->workitem_count = N_ACCEL; + + units_cnt++; + } + + bridge_scrypt_jane->units_buf = units_buf; + bridge_scrypt_jane->units_cnt = units_cnt; + + return true; +} + +static void units_term (bridge_scrypt_jane_t *bridge_scrypt_jane) +{ + if (bridge_scrypt_jane) + { + hcfree (bridge_scrypt_jane->units_buf); + } +} + +void *platform_init () +{ + // bridge_scrypt_jane_t will be our platform context + + bridge_scrypt_jane_t *bridge_scrypt_jane = (bridge_scrypt_jane_t *) hcmalloc (sizeof (bridge_scrypt_jane_t)); + + if (units_init (bridge_scrypt_jane) == false) + { + hcfree (bridge_scrypt_jane); + + return NULL; + } + + return bridge_scrypt_jane; +} + +void platform_term (void *platform_context) +{ + bridge_scrypt_jane_t *bridge_scrypt_jane = platform_context; + + if (bridge_scrypt_jane) + { + units_term (bridge_scrypt_jane); + + hcfree (bridge_scrypt_jane); + } +} + +int get_unit_count (void *platform_context) +{ + bridge_scrypt_jane_t *bridge_scrypt_jane = platform_context; + + return bridge_scrypt_jane->units_cnt; +} + +// we support units of mixed speed, that's why the workitem count is unit specific + +int get_workitem_count (void *platform_context, const int unit_idx) +{ + bridge_scrypt_jane_t *bridge_scrypt_jane = platform_context; + + unit_t *unit_buf = &bridge_scrypt_jane->units_buf[unit_idx]; + + return unit_buf->workitem_count; +} + +char *get_unit_info (void *platform_context, const int unit_idx) +{ + bridge_scrypt_jane_t *bridge_scrypt_jane = platform_context; + + unit_t *unit_buf = &bridge_scrypt_jane->units_buf[unit_idx]; + + return unit_buf->unit_info_buf; +} + +bool salt_prepare (void *platform_context, MAYBE_UNUSED hashconfig_t *hashconfig, MAYBE_UNUSED hashes_t *hashes) +{ + // selftest hash + + scrypt_t *scrypt_st = (scrypt_t *) hashes->st_esalts_buf; + + const size_t chunk_bytes = 64 * 2 * scrypt_st->r; + + size_t largest_V = chunk_bytes * scrypt_st->N; + //size_t largest_X = chunk_bytes * scrypt_st->p; + size_t largest_Y = chunk_bytes; + + // from here regular hashes + + scrypt_t *scrypt = (scrypt_t *) hashes->esalts_buf; + + for (u32 salt_idx = 0; salt_idx < hashes->salts_cnt; salt_idx++, scrypt++) + { + const size_t chunk_bytes = 64 * 2 * scrypt->r; + + const size_t sz_V = chunk_bytes * scrypt->N; + //const size_t sz_X = chunk_bytes * scrypt->p; + const size_t sz_Y = chunk_bytes; + + if (sz_V > largest_V) largest_V = sz_V; + //if (sz_X > largest_X) largest_X = sz_X; + if (sz_Y > largest_Y) largest_Y = sz_Y; + } + + bridge_scrypt_jane_t *bridge_scrypt_jane = platform_context; + + for (int unit_idx = 0; unit_idx < bridge_scrypt_jane->units_cnt; unit_idx++) + { + unit_t *unit_buf = &bridge_scrypt_jane->units_buf[unit_idx]; + + unit_buf->V = hcmalloc_aligned (largest_V, 64); + //unit_buf->X = hcmalloc_aligned (largest_X, 64); + unit_buf->Y = hcmalloc_aligned (largest_Y, 64); + } + + return true; +} + +void salt_destroy (void *platform_context, MAYBE_UNUSED hashconfig_t *hashconfig, MAYBE_UNUSED hashes_t *hashes) +{ + bridge_scrypt_jane_t *bridge_scrypt_jane = platform_context; + + for (int unit_idx = 0; unit_idx < bridge_scrypt_jane->units_cnt; unit_idx++) + { + unit_t *unit_buf = &bridge_scrypt_jane->units_buf[unit_idx]; + + hcfree_aligned (unit_buf->V); + //hcfree_aligned (unit_buf->X); + hcfree_aligned (unit_buf->Y); + } +} + +bool launch_loop (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_param_t *device_param, MAYBE_UNUSED hashconfig_t *hashconfig, MAYBE_UNUSED hashes_t *hashes, MAYBE_UNUSED const u32 salt_pos, MAYBE_UNUSED const u64 pws_cnt) +{ + bridge_scrypt_jane_t *bridge_scrypt_jane = platform_context; + + const int unit_idx = device_param->bridge_link_device; + + unit_t *unit_buf = &bridge_scrypt_jane->units_buf[unit_idx]; + + scrypt_t *esalts_buf = (scrypt_t *) hashes->esalts_buf; + + scrypt_t *esalt_buf = &esalts_buf[salt_pos]; + + scrypt_tmp_t *scrypt_tmp = (scrypt_tmp_t *) device_param->h_tmps; + + scrypt_mix_word_t *V = unit_buf->V; + //scrypt_mix_word_t *X = unit_buf->X; + scrypt_mix_word_t *Y = unit_buf->Y; + + const u32 N = esalt_buf->N; + const u32 r = esalt_buf->r; + const u32 p = esalt_buf->p; + + const size_t chunk_bytes = 64 * 2 * r; + + // hashcat guarantees h_tmps[] is 64 byte aligned + + for (u64 pw_cnt = 0; pw_cnt < pws_cnt; pw_cnt++) + { + u8 *X = (u8 *) scrypt_tmp->P; + + for (u32 i = 0; i < p; i++) + { + scrypt_ROMix ((scrypt_mix_word_t *) (X + (chunk_bytes * i)), (scrypt_mix_word_t *) Y, (scrypt_mix_word_t *) V, N, r); + } + + scrypt_tmp++; + } + + return true; +} + +void bridge_init (bridge_ctx_t *bridge_ctx) +{ + bridge_ctx->bridge_context_size = BRIDGE_CONTEXT_SIZE_CURRENT; + bridge_ctx->bridge_interface_version = BRIDGE_INTERFACE_VERSION_CURRENT; + + bridge_ctx->platform_init = platform_init; + bridge_ctx->platform_term = platform_term; + bridge_ctx->get_unit_count = get_unit_count; + bridge_ctx->get_unit_info = get_unit_info; + bridge_ctx->get_workitem_count = get_workitem_count; + bridge_ctx->thread_init = BRIDGE_DEFAULT; + bridge_ctx->thread_term = BRIDGE_DEFAULT; + bridge_ctx->salt_prepare = salt_prepare; + bridge_ctx->salt_destroy = salt_destroy; + bridge_ctx->launch_loop = launch_loop; + bridge_ctx->launch_loop2 = BRIDGE_DEFAULT; + bridge_ctx->st_update_hash = BRIDGE_DEFAULT; + bridge_ctx->st_update_pass = BRIDGE_DEFAULT; +} diff --git a/src/bridges/bridge_scrypt_jane.mk b/src/bridges/bridge_scrypt_jane.mk new file mode 100644 index 000000000..f423f7c15 --- /dev/null +++ b/src/bridges/bridge_scrypt_jane.mk @@ -0,0 +1,30 @@ + +SCRYPT_JANE := deps/scrypt-jane-master +SCRYPT_JANE_CFLAGS := -I$(SCRYPT_JANE)/ -DSCRYPT_SHA256 -DSCRYPT_SALSA -DSCRYPT_CHOOSE_COMPILETIME -Wno-unused-function -Wno-unused-but-set-variable + +ifeq ($(MAKECMDGOALS),binaries) +SCRYPT_JANE_CFLAGS += -mavx2 +else +ifeq ($(UNAME),Darwin) +ifeq ($(IS_APPLE_SILICON),0) +SCRYPT_JANE_CFLAGS += -mavx2 +endif +else +SCRYPT_JANE_CFLAGS += -march=native +endif +endif + +ifeq ($(MAKECMDGOALS),binaries) +bridges/bridge_scrypt_jane.so: src/bridges/bridge_scrypt_jane.c obj/combined.LINUX.a + $(CC_LINUX) $(CCFLAGS) $(CFLAGS_CROSS_LINUX) $^ -o $@ $(LFLAGS_CROSS_LINUX) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(SCRYPT_JANE_CFLAGS) +bridges/bridge_scrypt_jane.dll: src/bridges/bridge_scrypt_jane.c obj/combined.WIN.a + $(CC_WIN) $(CCFLAGS) $(CFLAGS_CROSS_WIN) $^ -o $@ $(LFLAGS_CROSS_WIN) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(SCRYPT_JANE_CFLAGS) +else +ifeq ($(SHARED),1) +bridges/bridge_scrypt_jane.$(BRIDGE_SUFFIX): src/bridges/bridge_scrypt_jane.c $(HASHCAT_LIBRARY) + $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(SCRYPT_JANE_CFLAGS) +else +bridges/bridge_scrypt_jane.$(BRIDGE_SUFFIX): src/bridges/bridge_scrypt_jane.c obj/combined.NATIVE.a + $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(SCRYPT_JANE_CFLAGS) +endif +endif diff --git a/src/modules/module_70100.c b/src/modules/module_70100.c new file mode 100644 index 000000000..ac18fd609 --- /dev/null +++ b/src/modules/module_70100.c @@ -0,0 +1,298 @@ +/** + * Author......: See docs/credits.txt + * License.....: MIT + */ + +#include "common.h" +#include "types.h" +#include "modules.h" +#include "bitops.h" +#include "convert.h" +#include "shared.h" + +static const u32 ATTACK_EXEC = ATTACK_EXEC_OUTSIDE_KERNEL; +static const u32 DGST_POS0 = 0; +static const u32 DGST_POS1 = 1; +static const u32 DGST_POS2 = 2; +static const u32 DGST_POS3 = 3; +static const u32 DGST_SIZE = DGST_SIZE_4_4; +static const u32 HASH_CATEGORY = HASH_CATEGORY_GENERIC_KDF; +static const char *HASH_NAME = "scrypt [Bridged: Scrypt-Jane ROMix]"; +static const u64 KERN_TYPE = 70100; +static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE; +static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE + | OPTS_TYPE_PT_GENERATE_LE + | OPTS_TYPE_NATIVE_THREADS + | OPTS_TYPE_MP_MULTI_DISABLE; +static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; +static const u64 BRIDGE_TYPE = BRIDGE_TYPE_MATCH_TUNINGS // optional - improves performance + | BRIDGE_TYPE_LAUNCH_LOOP; +static const char *BRIDGE_NAME = "scrypt_jane"; +static const char *ST_PASS = "hashcat"; +static const char *ST_HASH = "SCRYPT:16384:8:2:ODEzMTA2Mw==:NuOcXzv+MOqXmwTXnH6bbUEjN/vjlDG28IM7WXaUkk0="; + +u32 module_attack_exec (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ATTACK_EXEC; } +u32 module_dgst_pos0 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS0; } +u32 module_dgst_pos1 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS1; } +u32 module_dgst_pos2 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS2; } +u32 module_dgst_pos3 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS3; } +u32 module_dgst_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_SIZE; } +u32 module_hash_category (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return HASH_CATEGORY; } +const char *module_hash_name (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return HASH_NAME; } +u64 module_kern_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return KERN_TYPE; } +u32 module_opti_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return OPTI_TYPE; } +u64 module_opts_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return OPTS_TYPE; } +u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return SALT_TYPE; } +const char *module_st_hash (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_HASH; } +const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_PASS; } +const char *module_bridge_name (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return BRIDGE_NAME; } +u64 module_bridge_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return BRIDGE_TYPE; } + +static const char *SIGNATURE_SCRYPT = "SCRYPT"; + +typedef struct +{ + u32 salt_buf[64]; + u32 salt_len; + + u32 digest_buf[64]; + u32 digest_len; + + u32 N; + u32 r; + u32 p; + +} scrypt_t; + +u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + // this overrides the reductions of PW_MAX in case optimized kernel is selected + // IOW, even in optimized kernel mode it support length 256 + + const u32 pw_max = PW_MAX; + + return pw_max; +} + +u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u64 esalt_size = (const u64) sizeof (scrypt_t); + + return esalt_size; +} + +u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + #define SCRYPT_R_MAX 16 + #define SCRYPT_P_MAX 16 + + const u64 tmp_size = 128ULL * SCRYPT_R_MAX * SCRYPT_P_MAX; + + return tmp_size; +} + +int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len) +{ + u32 *digest = (u32 *) digest_buf; + + scrypt_t *scrypt = (scrypt_t *) esalt_buf; + + hc_token_t token; + + token.token_cnt = 6; + + token.signatures_cnt = 1; + token.signatures_buf[0] = SIGNATURE_SCRYPT; + + token.len_min[0] = 6; + token.len_max[0] = 6; + token.sep[0] = ':'; + token.attr[0] = TOKEN_ATTR_VERIFY_LENGTH + | TOKEN_ATTR_VERIFY_SIGNATURE; + + token.len_min[1] = 1; + token.len_max[1] = 6; + token.sep[1] = ':'; + token.attr[1] = TOKEN_ATTR_VERIFY_LENGTH; + + token.len_min[2] = 1; + token.len_max[2] = 6; + token.sep[2] = ':'; + token.attr[2] = TOKEN_ATTR_VERIFY_LENGTH; + + token.len_min[3] = 1; + token.len_max[3] = 6; + token.sep[3] = ':'; + token.attr[3] = TOKEN_ATTR_VERIFY_LENGTH; + + token.len_min[4] = 0; + token.len_max[4] = 45; + token.sep[4] = ':'; + token.attr[4] = TOKEN_ATTR_VERIFY_LENGTH + | TOKEN_ATTR_VERIFY_BASE64A; + + token.len_min[5] = 44; + token.len_max[5] = 88; + token.sep[5] = ':'; + token.attr[5] = TOKEN_ATTR_VERIFY_LENGTH + | TOKEN_ATTR_VERIFY_BASE64A; + + const int rc_tokenizer = input_tokenizer ((const u8 *) line_buf, line_len, &token); + + if (rc_tokenizer != PARSER_OK) return (rc_tokenizer); + + // scrypt settings + + const u8 *N_pos = token.buf[1]; + const u8 *r_pos = token.buf[2]; + const u8 *p_pos = token.buf[3]; + + scrypt->N = hc_strtoul ((const char *) N_pos, NULL, 10); + scrypt->r = hc_strtoul ((const char *) r_pos, NULL, 10); + scrypt->p = hc_strtoul ((const char *) p_pos, NULL, 10); + + if (scrypt->r > 16) return (PARSER_SALT_VALUE); + if (scrypt->p > 16) return (PARSER_SALT_VALUE); + + // salt + + const u8 *salt_pos = token.buf[4]; + const int salt_len = token.len[4]; + + scrypt->salt_len = base64_decode (base64_to_int, (const u8 *) salt_pos, salt_len, (u8 *) scrypt->salt_buf); + + // digest - base64 decode + + const u8 *hash_pos = token.buf[5]; + const int hash_len = token.len[5]; + + scrypt->digest_len = base64_decode (base64_to_int, (const u8 *) hash_pos, hash_len, (u8 *) scrypt->digest_buf); + + // comparison digest + + digest[0] = scrypt->digest_buf[0]; + digest[1] = scrypt->digest_buf[1]; + digest[2] = scrypt->digest_buf[2]; + digest[3] = scrypt->digest_buf[3]; + + // fake salt, we just need to make this unique + + salt->salt_buf[0] = digest[0]; + salt->salt_buf[1] = digest[1]; + salt->salt_buf[2] = digest[2]; + salt->salt_buf[3] = digest[3]; + salt->salt_buf[4] = scrypt->N; + salt->salt_buf[5] = scrypt->r; + salt->salt_buf[6] = scrypt->p; + salt->salt_buf[7] = 0; + + salt->salt_len = 32; + salt->salt_iter = 1; + + return (PARSER_OK); +} + +int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const void *digest_buf, MAYBE_UNUSED const salt_t *salt, MAYBE_UNUSED const void *esalt_buf, MAYBE_UNUSED const void *hook_salt_buf, MAYBE_UNUSED const hashinfo_t *hash_info, char *line_buf, MAYBE_UNUSED const int line_size) +{ + const scrypt_t *scrypt = (const scrypt_t *) esalt_buf; + + char base64_salt[64] = { 0 }; + + base64_encode (int_to_base64, (const u8 *) scrypt->salt_buf, scrypt->salt_len, (u8 *) base64_salt); + + char base64_digest[128] = { 0 }; + + base64_encode (int_to_base64, (const u8 *) scrypt->digest_buf, scrypt->digest_len, (u8 *) base64_digest); + + const int line_len = snprintf (line_buf, line_size, "%s:%u:%u:%u:%s:%s", + SIGNATURE_SCRYPT, + scrypt->N, + scrypt->r, + scrypt->p, + base64_salt, + base64_digest); + + return line_len; +} + +void module_init (module_ctx_t *module_ctx) +{ + module_ctx->module_context_size = MODULE_CONTEXT_SIZE_CURRENT; + module_ctx->module_interface_version = MODULE_INTERFACE_VERSION_CURRENT; + + module_ctx->module_attack_exec = module_attack_exec; + module_ctx->module_benchmark_esalt = MODULE_DEFAULT; + module_ctx->module_benchmark_hook_salt = MODULE_DEFAULT; + module_ctx->module_benchmark_mask = MODULE_DEFAULT; + module_ctx->module_benchmark_charset = MODULE_DEFAULT; + module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = module_bridge_name; + module_ctx->module_bridge_type = module_bridge_type; + module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; + module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; + module_ctx->module_deprecated_notice = MODULE_DEFAULT; + module_ctx->module_dgst_pos0 = module_dgst_pos0; + module_ctx->module_dgst_pos1 = module_dgst_pos1; + module_ctx->module_dgst_pos2 = module_dgst_pos2; + module_ctx->module_dgst_pos3 = module_dgst_pos3; + module_ctx->module_dgst_size = module_dgst_size; + module_ctx->module_dictstat_disable = MODULE_DEFAULT; + module_ctx->module_esalt_size = module_esalt_size; + module_ctx->module_extra_buffer_size = MODULE_DEFAULT; + module_ctx->module_extra_tmp_size = MODULE_DEFAULT; + module_ctx->module_extra_tuningdb_block = MODULE_DEFAULT; + module_ctx->module_forced_outfile_format = MODULE_DEFAULT; + module_ctx->module_hash_binary_count = MODULE_DEFAULT; + module_ctx->module_hash_binary_parse = MODULE_DEFAULT; + module_ctx->module_hash_binary_save = MODULE_DEFAULT; + module_ctx->module_hash_decode_postprocess = MODULE_DEFAULT; + module_ctx->module_hash_decode_potfile = MODULE_DEFAULT; + module_ctx->module_hash_decode_zero_hash = MODULE_DEFAULT; + module_ctx->module_hash_decode = module_hash_decode; + module_ctx->module_hash_encode_status = MODULE_DEFAULT; + module_ctx->module_hash_encode_potfile = MODULE_DEFAULT; + module_ctx->module_hash_encode = module_hash_encode; + module_ctx->module_hash_init_selftest = MODULE_DEFAULT; + module_ctx->module_hash_mode = MODULE_DEFAULT; + module_ctx->module_hash_category = module_hash_category; + module_ctx->module_hash_name = module_hash_name; + module_ctx->module_hashes_count_min = MODULE_DEFAULT; + module_ctx->module_hashes_count_max = MODULE_DEFAULT; + module_ctx->module_hlfmt_disable = MODULE_DEFAULT; + module_ctx->module_hook_extra_param_size = MODULE_DEFAULT; + module_ctx->module_hook_extra_param_init = MODULE_DEFAULT; + module_ctx->module_hook_extra_param_term = MODULE_DEFAULT; + module_ctx->module_hook12 = MODULE_DEFAULT; + module_ctx->module_hook23 = MODULE_DEFAULT; + module_ctx->module_hook_salt_size = MODULE_DEFAULT; + module_ctx->module_hook_size = MODULE_DEFAULT; + module_ctx->module_jit_build_options = MODULE_DEFAULT; + module_ctx->module_jit_cache_disable = MODULE_DEFAULT; + module_ctx->module_kernel_accel_max = MODULE_DEFAULT; + module_ctx->module_kernel_accel_min = MODULE_DEFAULT; + module_ctx->module_kernel_loops_max = MODULE_DEFAULT; + module_ctx->module_kernel_loops_min = MODULE_DEFAULT; + module_ctx->module_kernel_threads_max = MODULE_DEFAULT; + module_ctx->module_kernel_threads_min = MODULE_DEFAULT; + module_ctx->module_kern_type = module_kern_type; + module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; + module_ctx->module_opti_type = module_opti_type; + module_ctx->module_opts_type = module_opts_type; + module_ctx->module_outfile_check_disable = MODULE_DEFAULT; + module_ctx->module_outfile_check_nocomp = MODULE_DEFAULT; + module_ctx->module_potfile_custom_check = MODULE_DEFAULT; + module_ctx->module_potfile_disable = MODULE_DEFAULT; + module_ctx->module_potfile_keep_all_hashes = MODULE_DEFAULT; + module_ctx->module_pwdump_column = MODULE_DEFAULT; + module_ctx->module_pw_max = module_pw_max; + module_ctx->module_pw_min = MODULE_DEFAULT; + module_ctx->module_salt_max = MODULE_DEFAULT; + module_ctx->module_salt_min = MODULE_DEFAULT; + module_ctx->module_salt_type = module_salt_type; + module_ctx->module_separator = MODULE_DEFAULT; + module_ctx->module_st_hash = module_st_hash; + module_ctx->module_st_pass = module_st_pass; + module_ctx->module_tmp_size = module_tmp_size; + module_ctx->module_unstable_warning = MODULE_DEFAULT; + module_ctx->module_warmup_disable = MODULE_DEFAULT; +} diff --git a/tools/test_modules/m70100.pm b/tools/test_modules/m70100.pm new file mode 100644 index 000000000..145610f6c --- /dev/null +++ b/tools/test_modules/m70100.pm @@ -0,0 +1,90 @@ +#!/usr/bin/env perl + +## +## Author......: See docs/credits.txt +## License.....: MIT +## + +use strict; +use warnings; + +use Crypt::ScryptKDF qw (scrypt_hash); +use MIME::Base64 qw (decode_base64); + +sub module_constraints { [[0, 256], [1, 15], [-1, -1], [-1, -1], [-1, -1]] } + +sub module_generate_hash +{ + my $word = shift; + my $salt = shift; + my $N = shift // 16384; + my $r = shift // 8; + my $p = shift // 2; + + my $hash_buf = scrypt_hash ($word, $salt, $N, $r, $p, 32); + + my $hash = sprintf ('%s', $hash_buf); + + return $hash; +} + +sub module_verify_hash +{ + my $line = shift; + + # scrypt + return unless (substr ($line, 0, 7) eq 'SCRYPT:'); + + # get hash + my $index1 = index ($line, ":", 7); + + return if $index1 < 1; + + # N + my $N = substr ($line, 7, $index1 - 7); + + my $index2 = index ($line, ":", $index1 + 1); + + return if $index2 < 1; + + # r + my $r = substr ($line, $index1 + 1, $index2 - $index1 - 1); + + $index1 = index ($line, ":", $index2 + 1); + + return if $index1 < 1; + + # p + my $p = substr ($line, $index2 + 1, $index1 - $index2 - 1); + + $index2 = index ($line, ":", $index1 + 1); + + return if $index2 < 1; + + # salt + my $salt = substr ($line, $index1 + 1, $index2 - $index1 - 1); + + $salt = decode_base64 ($salt); + + $index1 = index ($line, ":", $index2 + 1); + + return if $index1 < 1; + + # digest + + my $word = substr ($line, $index1 + 1); + + return unless defined $salt; + return unless defined $word; + return unless defined $N; + return unless defined $r; + return unless defined $p; + + $word = pack_if_HEX_notation ($word); + + my $new_hash = module_generate_hash ($word, $salt, $N, $r, $p); + + return ($new_hash, $word); +} + +1; From 22c25b3ea1cc70de848a3490281cd890b1c29c00 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Sun, 1 Jun 2025 06:39:55 +0200 Subject: [PATCH 25/95] Fix cross-compiler target in makefiles Do not show timeout patch warnings in virtualized mode --- src/Makefile | 6 ++++++ src/backend.c | 6 +++--- src/bridges/bridge_argon2id_reference.mk | 4 ++-- src/bridges/bridge_scrypt_jane.mk | 4 ++-- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/Makefile b/src/Makefile index 2c18cd3b3..01b1eceb7 100644 --- a/src/Makefile +++ b/src/Makefile @@ -39,6 +39,12 @@ ifeq ($(DEBUG),1) $(info "## Detected Operating System : $(UNAME)") endif +BUILD_MODE := native + +ifneq ($(filter binaries linux host_linux modules_linux bridges_linux win host_win modules_win bridges_win,$(MAKECMDGOALS)),) + BUILD_MODE := cross +endif + ## ## Makefile flags ## diff --git a/src/backend.c b/src/backend.c index 1e15f8985..fcb5dce8f 100644 --- a/src/backend.c +++ b/src/backend.c @@ -5494,7 +5494,7 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) if (device_param->kernel_exec_timeout != 0) { - if (user_options->quiet == false) + if ((user_options->quiet == false) && (is_virtualized == false)) { event_log_advice (hashcat_ctx, "* Device #%u: WARNING! Kernel exec timeout is not disabled.", device_id + 1); event_log_advice (hashcat_ctx, " This may cause \"CL_OUT_OF_RESOURCES\" or related errors."); @@ -5930,7 +5930,7 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) if (device_param->kernel_exec_timeout != 0) { - if (user_options->quiet == false) + if ((user_options->quiet == false) && (is_virtualized == false)) { event_log_advice (hashcat_ctx, "* Device #%u: WARNING! Kernel exec timeout is not disabled.", device_id + 1); event_log_advice (hashcat_ctx, " This may cause \"CL_OUT_OF_RESOURCES\" or related errors."); @@ -7721,7 +7721,7 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) if (device_param->kernel_exec_timeout != 0) { - if (user_options->quiet == false) + if ((user_options->quiet == false) && (is_virtualized == false)) { event_log_warning (hashcat_ctx, "* Device #%u: WARNING! Kernel exec timeout is not disabled.", device_id + 1); event_log_warning (hashcat_ctx, " This may cause \"CL_OUT_OF_RESOURCES\" or related errors."); diff --git a/src/bridges/bridge_argon2id_reference.mk b/src/bridges/bridge_argon2id_reference.mk index 1ce6051ee..d55c5bc07 100644 --- a/src/bridges/bridge_argon2id_reference.mk +++ b/src/bridges/bridge_argon2id_reference.mk @@ -2,7 +2,7 @@ ARGON2_REFERENCE := deps/phc-winner-argon2-20190702 ARGON2_REFERENCE_CFLAGS := -I$(ARGON2_REFERENCE)/_hashcat/ -ifeq ($(MAKECMDGOALS),binaries) +ifeq ($(BUILD_MODE),cross) ARGON2_REFERENCE_CFLAGS += -mavx2 else ifeq ($(UNAME),Darwin) @@ -14,7 +14,7 @@ ARGON2_REFERENCE_CFLAGS += -march=native endif endif -ifeq ($(MAKECMDGOALS),binaries) +ifeq ($(BUILD_MODE),cross) bridges/bridge_argon2id_reference.so: src/bridges/bridge_argon2id_reference.c obj/combined.LINUX.a $(CC_LINUX) $(CCFLAGS) $(CFLAGS_CROSS_LINUX) $^ -o $@ $(LFLAGS_CROSS_LINUX) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(ARGON2_REFERENCE_CFLAGS) bridges/bridge_argon2id_reference.dll: src/bridges/bridge_argon2id_reference.c obj/combined.WIN.a diff --git a/src/bridges/bridge_scrypt_jane.mk b/src/bridges/bridge_scrypt_jane.mk index f423f7c15..ba1fc834c 100644 --- a/src/bridges/bridge_scrypt_jane.mk +++ b/src/bridges/bridge_scrypt_jane.mk @@ -2,7 +2,7 @@ SCRYPT_JANE := deps/scrypt-jane-master SCRYPT_JANE_CFLAGS := -I$(SCRYPT_JANE)/ -DSCRYPT_SHA256 -DSCRYPT_SALSA -DSCRYPT_CHOOSE_COMPILETIME -Wno-unused-function -Wno-unused-but-set-variable -ifeq ($(MAKECMDGOALS),binaries) +ifeq ($(BUILD_MODE),cross) SCRYPT_JANE_CFLAGS += -mavx2 else ifeq ($(UNAME),Darwin) @@ -14,7 +14,7 @@ SCRYPT_JANE_CFLAGS += -march=native endif endif -ifeq ($(MAKECMDGOALS),binaries) +ifeq ($(BUILD_MODE),cross) bridges/bridge_scrypt_jane.so: src/bridges/bridge_scrypt_jane.c obj/combined.LINUX.a $(CC_LINUX) $(CCFLAGS) $(CFLAGS_CROSS_LINUX) $^ -o $@ $(LFLAGS_CROSS_LINUX) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(SCRYPT_JANE_CFLAGS) bridges/bridge_scrypt_jane.dll: src/bridges/bridge_scrypt_jane.c obj/combined.WIN.a From ed71e41ae1c75a8d09269fa97c206e1fee1a4a59 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Sun, 1 Jun 2025 07:10:00 +0200 Subject: [PATCH 26/95] The Assimilation Bridge (Scrypt-Yescrypt GPU-CPU hybrid plugin -m 70200) --- deps/yescrypt-master/CHANGES | 200 +++ deps/yescrypt-master/COMPARISON | 129 ++ deps/yescrypt-master/Makefile | 85 ++ deps/yescrypt-master/PARAMETERS | 196 +++ deps/yescrypt-master/PERFORMANCE | 206 +++ deps/yescrypt-master/PHC-TEST-OK-SHA256 | 1 + deps/yescrypt-master/README | 197 +++ deps/yescrypt-master/TESTS-OK | 80 ++ deps/yescrypt-master/initrom.c | 217 +++ deps/yescrypt-master/insecure_memzero.c | 49 + deps/yescrypt-master/insecure_memzero.h | 69 + deps/yescrypt-master/phc.c | 145 ++ deps/yescrypt-master/sha256.c | 652 +++++++++ deps/yescrypt-master/sha256.h | 129 ++ deps/yescrypt-master/sysendian.h | 122 ++ deps/yescrypt-master/tests.c | 418 ++++++ deps/yescrypt-master/userom.c | 405 ++++++ deps/yescrypt-master/yescrypt-common.c | 703 ++++++++++ deps/yescrypt-master/yescrypt-opt.c | 1533 ++++++++++++++++++++++ deps/yescrypt-master/yescrypt-platform.c | 111 ++ deps/yescrypt-master/yescrypt-ref.c | 925 +++++++++++++ deps/yescrypt-master/yescrypt.h | 346 +++++ src/bridges/bridge_scrypt_yescrypt.c | 285 ++++ src/bridges/bridge_scrypt_yescrypt.mk | 30 + src/modules/module_70200.c | 298 +++++ tools/test_modules/m70200.pm | 90 ++ 26 files changed, 7621 insertions(+) create mode 100644 deps/yescrypt-master/CHANGES create mode 100644 deps/yescrypt-master/COMPARISON create mode 100644 deps/yescrypt-master/Makefile create mode 100644 deps/yescrypt-master/PARAMETERS create mode 100644 deps/yescrypt-master/PERFORMANCE create mode 100644 deps/yescrypt-master/PHC-TEST-OK-SHA256 create mode 100644 deps/yescrypt-master/README create mode 100644 deps/yescrypt-master/TESTS-OK create mode 100644 deps/yescrypt-master/initrom.c create mode 100644 deps/yescrypt-master/insecure_memzero.c create mode 100644 deps/yescrypt-master/insecure_memzero.h create mode 100644 deps/yescrypt-master/phc.c create mode 100644 deps/yescrypt-master/sha256.c create mode 100644 deps/yescrypt-master/sha256.h create mode 100644 deps/yescrypt-master/sysendian.h create mode 100644 deps/yescrypt-master/tests.c create mode 100644 deps/yescrypt-master/userom.c create mode 100644 deps/yescrypt-master/yescrypt-common.c create mode 100644 deps/yescrypt-master/yescrypt-opt.c create mode 100644 deps/yescrypt-master/yescrypt-platform.c create mode 100644 deps/yescrypt-master/yescrypt-ref.c create mode 100644 deps/yescrypt-master/yescrypt.h create mode 100644 src/bridges/bridge_scrypt_yescrypt.c create mode 100644 src/bridges/bridge_scrypt_yescrypt.mk create mode 100644 src/modules/module_70200.c create mode 100644 tools/test_modules/m70200.pm diff --git a/deps/yescrypt-master/CHANGES b/deps/yescrypt-master/CHANGES new file mode 100644 index 000000000..e1dc1e2e8 --- /dev/null +++ b/deps/yescrypt-master/CHANGES @@ -0,0 +1,200 @@ + Changes made since 1.1.0 (2019/06/30). + +Use AVX512VL XOP-like bit rotates for faster Salsa20 on supporting CPUs. + +Implemented a little-known SHA-2 Maj() optimization proposed by Wei Dai. + +Minor code cleanups and documentation updates. + + + Changes made between 1.0.3 (2018/06/13) and 1.1.0 (2019/06/30). + +Merged yescrypt-opt.c and yescrypt-simd.c into one source file, which is +a closer match to -simd but is called -opt (and -simd is now gone). +With this change, performance of SIMD builds should be almost unchanged, +while scalar builds should be faster than before on register-rich 64-bit +architectures but may be slower than before on register-starved 32-bit +architectures (this shortcoming may be addressed later). This also +happens to make SSE prefetch available even in otherwise-scalar builds +and it paves the way for adding SIMD support on big-endian architectures +(previously, -simd assumed little-endian). + +Added x32 ABI support (x86-64 with 32-bit pointers). + + + Changes made between 1.0.2 (2018/06/06) and 1.0.3 (2018/06/13). + +In SMix1, optimized out the indexing of V for the sequential writes. + + + Changes made between 1.0.1 (2018/04/22) and 1.0.2 (2018/06/06). + +Don't use MAP_POPULATE anymore because new multi-threaded benchmarks on +RHEL6'ish and RHEL7'ish systems revealed that it sometimes has adverse +effect far in excess of its occasional positive effect. + +In the SIMD code, we now reuse the same buffer for BlockMix_pwxform's +input and output in SMix2. This might slightly improve cache hit rate +and thus performance. + +Also in the SIMD code, a compiler memory barrier has been added between +sub-blocks to ensure that none of the writes into what was S2 during +processing of the previous sub-block are postponed until after a read +from S0 or S1 in the inline asm code for the current sub-block. This +potential problem was never observed so far due to other constraints +that we have, but strictly speaking those constraints were insufficient +to guarantee it couldn't occur. + + + Changes made between 1.0.0 (2018/03/09) and 1.0.1 (2018/04/22). + +The included documentation has been improved, most notably adding new +text files PARAMETERS (guidelines on parameter selection, and currently +recommended parameter sets by use case) and COMPARISON (comparison to +scrypt and Argon2). + +Code cleanups have been made, including removal of AVX2 support, which +was deliberately temporarily preserved for the 1.0.0 release, but which +almost always hurt performance with currently recommended low-level +yescrypt parameters on Intel & AMD CPUs tested so far. (The low-level +parameters are chosen with consideration for relative performance of +defensive vs. offensive implementations on different hardware, and not +only for seemingly best performance on CPUs. It is possible to change +them such that AVX2 would be worthwhile, and this might happen in the +future, but currently this wouldn't be obviously beneficial overall.) + + + Changes made between 0.8.1 (2015/10/25) and 1.0.0 (2018/03/09). + +Hash string encoding has been finalized under the "$y$" prefix for both +native yescrypt and classic scrypt hashes, using a new variable-length +and extremely compact encoding of (ye)scrypt's many parameters. (Also +still recognized under the "$7$" prefix is the previously used encoding +for classic scrypt hashes, which is fixed-length and not so compact.) + +Optional format-preserving salt and hash (re-)encryption has been added, +using the Luby-Rackoff construction with SHA-256 as the PRF. + +Support for hash upgrades has been temporarily excluded to allow for its +finalization at a later time and based on actual needs (e.g., will 3x +ROM size upgrades be in demand now that Intel went from 4 to 6 memory +channels in their server CPUs, bringing a factor of 3 into RAM sizes?) + +ROM initialization has been sped up through a new simplified algorithm. + +ROM tags (magic constant values) and digests (values that depend on the +entire computation of the ROM contents) have been added to the last +block of ROM. (The placement of these tags/digests is such that nested +ROMs are possible, to allow for ROM size upgrades later.) + +The last block of ROM is now checked for the tag and is always used for +hash computation before a secret-dependent memory access is first made. +This ensures that hashes won't be computed with a partially initialized +ROM or with one initialized using different machine word endianness, and +that they will be consistently miscomputed if the ROM digest is other +than what the caller expected. This in turn helps early detection of +problems with ROM initialization even if the calling application fails +to check for them. This also helps mitigate cache-timing attacks when +the attacker doesn't know the contents of the last block of ROM. + +Many implementation changes have been made, such as for performance, +portability, security (intentional reuse and thus rewrite of memory +where practical and optional zeroization elsewhere), and coding style. +This includes addition of optional SSE2 inline assembly code (a macro +with 8 instructions) to yescrypt-simd.c, which tends to slightly +outperform compiler-generated code, including AVX(2)-enabled code, for +yescrypt's currently recommended settings. This is no surprise since +yescrypt was designed to fit the 64-bit mode extended SSE2 instruction +set perfectly (including SSE2's lack of 3-register instructions), so for +its optimal implementation AVX would merely result in extra instruction +prefixes and not provide any benefit (except for the uses of Salsa20 +inherited from scrypt, but those are infrequent). + +The auxiliary files inherited from scrypt have been sync'ed with scrypt +1.2.1, and the implementation of PBKDF2 has been further optimized, +especially for its use in (ye)scrypt where the "iteration count" is 1 +but the output size is relatively large. (The speedup is measurable at +realistically low settings for yescrypt, such as at 2 MiB of memory.) + +The included tests have been revised and test vectors regenerated to +account for the ROM initialization/use updates and hash (re-)encryption. + +The PHC test vectors have been compacted into a single SHA-256 hash of +the expected output of phc.c, but have otherwise remained unchanged as +none of the incompatible changes have affected the subset of yescrypt +exposed via the PHS() interface for the Password Hashing Competition. + +The specification document and extra programs that were included with +the PHC submission and its updates are now excluded from this release. + +The rest of documentation files have been updated for the 1.0.0 release. + + + Changes made between 0.7.1 (2015/01/31) and 0.8.1 (2015/10/25). + +pwxform became stateful, through writes to its S-boxes. This further +discourages TMTO attacks on yescrypt as a whole, as well as on pwxform +S-boxes separately. It also increases the total size of the S-boxes by +a factor of 1.5 (8 KiB to 12 KiB by default) and it puts the previously +mostly idle L1 cache write ports on CPUs to use. + +Salsa20/8 in BlockMix_pwxform has been replaced with Salsa20/2. + +An extra HMAC-SHA256 update of the password buffer (which is eventually +passed into the final PBKDF2 invocation) is now performed right after +the pwxform S-boxes initialization. + +Nloop_rw rounding has been adjusted to be the same as Nloop_all's. +This avoids an unnecessary invocation of SMix2 with Nloop = 2, which +would otherwise have occurred in some cases. + +t is now halved per hash upgrade (rather than reset to 0 right away on +the very first upgrade, like it was in 0.7.1). + +Minor corrections and improvements to the specification and the code +have been made. + + + Changes made between 0.6.4 (2015/01/30) and 0.7.1 (2015/01/31). + +The YESCRYPT_PARALLEL_SMIX and YESCRYPT_PWXFORM flags have been removed, +with the corresponding functionality enabled along with the YESCRYPT_RW +flag. This change has simplified the SIMD implementation a little bit +(eliminating specialized code for some flag combinations that are no +longer possible), and it should help simplify documentation, analysis, +testing, and benchmarking (fewer combinations of settings to test). + +Adjustments to pre- and post-hashing have been made to address subtle +issues and non-intuitive behavior, as well as in some cases to reduce +impact of garbage collector attacks. + +Support for hash upgrades has been added (the g parameter). + +Extra tests have been written and test vectors re-generated. + + + Changes made between 0.5.2 (2014/03/31) and 0.6.4 (2015/01/30). + +Dropped support for ROM access frequency mask since it made little sense +when supporting only one ROM at a time. (It'd make sense with two ROMs, +for simultaneous use of a ROM-in-RAM and a ROM-on-SSD. With just one +ROM, the mask could still be used for a ROM-on-SSD, but only in lieu of +a ROM-in-RAM, which would arguably be unreasonable.) + +Simplified the API by having it accept NULL for the "shared" parameter +to indicate no ROM in use. (Previously, a dummy "shared" structure had +to be created.) + +Completed the specification of pwxform, BlockMix_pwxform, Salsa20 SIMD +shuffling, and potential endianness conversion. (No change to these has +been made - they have just been specified in the included document more +completely.) + +Provided rationale for the default compile-time settings for pwxform. + +Revised the reference and optimized implementations' source code to more +closely match the current specification document in terms of identifier +names, compile-time constant expressions, source code comments, and in +some cases the ordering of source code lines. None of these changes +affect the computed hash values, hence the test vectors have remained +the same. diff --git a/deps/yescrypt-master/COMPARISON b/deps/yescrypt-master/COMPARISON new file mode 100644 index 000000000..05a9d570e --- /dev/null +++ b/deps/yescrypt-master/COMPARISON @@ -0,0 +1,129 @@ + Comparison of yescrypt to scrypt and Argon2. + +yescrypt's advantages: + + + Greater resistance to offline attacks (increasing attacker's cost at + same defender's cost) + + + yescrypt supports optional ROM for protection from use of botnet + nodes (and other relatively small memory devices) + + + yescrypt has a dependency not only on RAM and maybe ROM, but + also on fast on-die local memory (such as a CPU's L1 or L2 cache), + which provides bcrypt-like anti-GPU properties even at very low + per-hash RAM sizes (where scrypt and Argon2 are more likely to lose + to bcrypt in terms of GPU attack speed) and even without ROM + + + yescrypt and scrypt currently have little low-level + parallelism within processing of a block (yescrypt allows for + tuning this later, scrypt does not), whereas Argon2 has a fixed and + currently commonly excessive amount of such parallelism, which may + be extracted to speed up e.g. GPU attacks through use of more + computing resources per the same total memory size due to each hash + computation's memory needs being split between 32 threads (yescrypt + currently has four 16-byte lanes that can be processed in parallel + within a 64-byte sub-block before running into a data dependency + for the next sub-block, whereas Argon2 allows for parallel + processing of eight 128-byte chunks within a 1 KiB block with only + two synchronization points for the entire block, as well as of four + 32-byte parts of the 128-byte chunks with only two more + synchronization points for the entire 1 KiB block) + + + yescrypt uses computation latency hardening based on integer + multiplication and local memory access speed, which ties its + per-hash RAMs up for a guaranteed minimum amount of time regardless + of possibly much higher memory bandwidth on the attacker's + hardware, whereas Argon2 uses only the multiplications and performs + 6 times fewer of those sequentially (96 sequential multiplications + per 1 KiB for yescrypt vs. 16 per 1 KiB for Argon2, providing + correspondingly different minimum time guarantees) and scrypt does + not use this technique at all (but is no worse than Argon2 in this + respect anyway due to having less low-level parallelism) + + + yescrypt and Argon2 are time-memory trade-off (TMTO) resistant + (thus, computing them in less memory takes disproportionately + longer), whereas scrypt is deliberately TMTO-friendly (and + moreover, computing it in less memory takes up to 4x less than + proportionately longer) + + + Extra optional built-in features + + + Hash encryption so that the hashes are not crackable without + the key (to be stored separately) + + + Hash upgrade to higher settings without knowledge of password + (temporarily removed from 1.0, to be re-added later) + + + SCRAM-like client-side computation of challenge responses + (already part of the algorithm, not yet exposed via the API) + + + yescrypt's and Argon2's running time is tunable on top of + memory usage and parallelism, unlike in scrypt's + + + Cryptographic security provided by NIST-approved primitives + + + (ye)scrypt's cryptographic security is provided by SHA-256, + HMAC, and PBKDF2, which are NIST-approved and time-tested (the rest + of yescrypt's processing, while most crucial for its offline attack + resistance properties, provably does not affect its basic + cryptographic hash properties), whereas Argon2 relies on the newer + BLAKE2 (either choice is just fine for security, but use of + approved algorithms may sometimes be required for compliance) + + + SHA-256, HMAC, PBKDF2, and scrypt are usable from the same codebase + +yescrypt's drawbacks: + + - Complex (higher risk of human error occurring and remaining + unnoticed for long) + + - Cache-timing unsafe (like bcrypt, scrypt, and Argon2d, but + unlike Argon2i) + + - Not the PHC winner (Argon2 is), but is merely a "special recognition" + + - Supported in fewer third-party projects (as of this writing, there's + yescrypt support in libxcrypt, Linux-PAM, shadow, and mkpasswd) + +Other observations: + + * yescrypt's complexity is related to its current primary target use + case (mass user authentication) and is relatively small compared to + the total complexity of the authentication service, so the risk may + be justified + + * Cache-timing safety is unimportant on dedicated servers, is + mitigated for some use cases and threat models by proper use of + salts, and is fully achieved in Argon2 only in its 2i flavor and only + through reduction of resistance to the usual offline attacks compared + to the 2d flavor + + * yescrypt's single-threaded memory filling speed on an otherwise + idle machine and at our currently recommended settings is lower than + Argon2's, but that's a result of our deliberate tuning (there's a + knob to change that, but we don't recommend doing so) preventing + yescrypt from bumping into memory access speed prematurely, and is + irrelevant for determining server request rate capacity and maximum + response latency where multiple instances or threads would be run + (under that scenario, the algorithms deliver similar speeds) + + * yescrypt has been designed and currently configured to fit the + SSE2 and NEON instruction sets and 128-bit SIMD perfectly, not + benefiting from AVX's 3-register instructions (unlike classic scrypt, + which doesn't fit SSE2 as perfectly and thus benefits from AVX and + XOP) nor from AVX2's and AVX-512's wider SIMD (although it can be + reconfigured for wider SIMD later), whereas Argon2 significantly + benefits from those at least when running fewer threads or concurrent + instances than are supported by the hardware (yet yescrypt's SSE2 + code is competitive with Argon2's AVX2 code under full server load) + + * yescrypt vs. Argon2 benchmarks are further complicated by these + two schemes having different minimum amount of processing over memory + (yescrypt's is 4/3 of Argon2's), and thus different average memory + usage (5/8 of peak for yescrypt t=0 vs. 1/2 of peak for Argon2 t=1), + which needs to be taken into account + + * scrypt benchmarks are also different in amount of processing over + memory (twice Argon2's minimum) and average memory usage (3/4 of + peak), but that's even further complicated by scrypt's + TMTO-friendliness providing up to a 4x advantage to some attackers diff --git a/deps/yescrypt-master/Makefile b/deps/yescrypt-master/Makefile new file mode 100644 index 000000000..7abea8d62 --- /dev/null +++ b/deps/yescrypt-master/Makefile @@ -0,0 +1,85 @@ +# Copyright 2013-2018 Alexander Peslyak +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted. +# +# 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. + +CC = gcc +LD = $(CC) +RM = rm -f +OMPFLAGS = -fopenmp +OMPFLAGS_MAYBE = $(OMPFLAGS) +#CFLAGS = -Wall -O2 -fomit-frame-pointer $(OMPFLAGS_MAYBE) -DSKIP_MEMZERO +CFLAGS = -Wall -O2 -march=native -fomit-frame-pointer $(OMPFLAGS_MAYBE) -DSKIP_MEMZERO +#CFLAGS = -Wall -O2 -funroll-loops -fomit-frame-pointer $(OMPFLAGS_MAYBE) -DSKIP_MEMZERO +#CFLAGS = -Wall -O2 -march=native -funroll-loops -fomit-frame-pointer $(OMPFLAGS_MAYBE) -DSKIP_MEMZERO +# -lrt is for userom's use of clock_gettime() +LDFLAGS = -s -lrt $(OMPFLAGS_MAYBE) + +PROJ = tests phc-test initrom userom +OBJS_CORE = yescrypt-opt.o +OBJS_COMMON = yescrypt-common.o sha256.o insecure_memzero.o +OBJS_TESTS = $(OBJS_CORE) $(OBJS_COMMON) tests.o +OBJS_PHC = $(OBJS_CORE) $(OBJS_COMMON) phc-test.o +OBJS_INITROM = $(OBJS_CORE) $(OBJS_COMMON) initrom.o +OBJS_USEROM = $(OBJS_CORE) $(OBJS_COMMON) userom.o +OBJS_RM = yescrypt-*.o + +all: $(PROJ) + +check: tests phc-test + @echo 'Running main tests' + @time ./tests | tee TESTS-OUT + @diff -U0 TESTS-OK TESTS-OUT && echo PASSED || echo FAILED + @if [ -e PHC-TEST-OK-SHA256 ]; then \ + echo 'Running PHC tests'; \ + time ./phc-test > PHC-TEST-OUT; \ + sha256sum -c PHC-TEST-OK-SHA256; \ + fi + +ref: + $(MAKE) $(PROJ) OBJS_CORE=yescrypt-ref.o + +check-ref: + $(MAKE) check OBJS_CORE=yescrypt-ref.o + +tests: $(OBJS_TESTS) + $(LD) $(LDFLAGS) $(OBJS_TESTS) -o $@ + +phc-test.o: phc.c + $(CC) -c $(CFLAGS) -DTEST phc.c -o $@ + +phc-test: $(OBJS_PHC) + $(LD) $(LDFLAGS) $(OBJS_PHC) -o $@ + +initrom: $(OBJS_INITROM) + $(LD) $(LDFLAGS) $(OBJS_INITROM) -o $@ + +userom: $(OBJS_USEROM) + $(LD) $(LDFLAGS) $(OMPFLAGS) $(OBJS_USEROM) -o $@ + +userom.o: userom.c + $(CC) -c $(CFLAGS) $(OMPFLAGS) $*.c + +.c.o: + $(CC) -c $(CFLAGS) $*.c + +yescrypt-opt.o: yescrypt-platform.c + +clean: + $(RM) $(PROJ) + $(RM) $(OBJS_TESTS) $(OBJS_PHC) $(OBJS_INITROM) $(OBJS_USEROM) + $(RM) $(OBJS_RM) + $(RM) TESTS-OUT PHC-TEST-OUT diff --git a/deps/yescrypt-master/PARAMETERS b/deps/yescrypt-master/PARAMETERS new file mode 100644 index 000000000..d9f5d24e6 --- /dev/null +++ b/deps/yescrypt-master/PARAMETERS @@ -0,0 +1,196 @@ + Optimal yescrypt configuration. + +yescrypt is very flexible, but configuring it optimally is complicated. +Here are some guidelines to simplify near-optimal configuration. We +start by listing the parameters and their typical values, and then give +currently recommended parameter sets by use case. + + + Parameters and their typical values. + +Set flags (yescrypt flavor) to YESCRYPT_DEFAULTS to use the currently +recommended flavor. (Other flags values exist for compatibility and for +specialized cases where you think you know what you're doing.) + +Set N (block count) based on target memory usage and running time, as +well as on the value of r (block size in 128 byte units). N must be a +power of two. + +Set r (block size) to 8 (so that N is in KiB, which is convenient) or to +another small value (if more optimal or for fine-tuning of the total +size and/or running time). Reasonable values for r are from 8 to 96. + +Set p (parallelism) to 1 meaning no thread-level parallelism within one +computation of yescrypt. (Use of thread-level parallelism within +yescrypt makes sense for ROM initialization and for key derivation at +high memory usage, but usually not for password hashing where +parallelism is available through concurrent authentication attempts. +Don't use p > 1 unnecessarily.) + +Set t (time) to 0 to use the optimal running time for a given memory +usage. This will allow you to maximize the memory usage (the value of +N*r) while staying within your running time constraints. (Non-zero t +makes sense in specialized cases where you can't afford higher memory +usage but can afford more time.) + +Set g (upgrades) to 0 because there have been no hash upgrades yet. + +Set NROM (block count of ROM) to 0 unless you use a ROM (see below). +NROM must be a power of two. + + + Password hashing for user authentication, no ROM. + +Small and fast (memory usage 2 MiB, performance like bcrypt cost 2^5 - +latency 2-3 ms and throughput 10,000+ per second on a 16-core server): + +flags = YESCRYPT_DEFAULTS, N = 2048, r = 8, p = 1, t = 0, g = 0, NROM = 0 + +Large and slow (memory usage 16 MiB, performance like bcrypt cost 2^8 - +latency 10-30 ms and throughput 1000+ per second on a 16-core server): + +flags = YESCRYPT_DEFAULTS, N = 4096, r = 32, p = 1, t = 0, g = 0, NROM = 0 + +Of course, even heavier and slower settings are possible, if affordable. +Simply double the value of N as many times as needed. Since N must be a +power of two, you may use r (in the range of 8 to 32) or/and t (in the +range of 0 to 2) for fine-tuning the running time, but first bring N to +the maximum you can afford. If this feels too complicated, just use one +of the two parameter sets given above (preferably the second) as-is. + + + Password hashing for user authentication, with ROM. + +It's similar to the above, except that you need to adjust r, set NROM, +and initialize the ROM. + +First decide on a ROM size, such as making it a large portion of your +dedicated authentication servers' RAM sizes. Since NROM (block count) +must be a power of two, you might need to choose r (block size) based on +how your desired ROM size corresponds to a power of two. Also tuning +for performance on current hardware, you'll likely end up with r in the +range from slightly below 16 to 32. For example, to use 15/16 of a +server's 256 GiB RAM as ROM (thus, making it 240 GiB), you could use +r=15 or r=30. To use 23/24 of a server's 384 GiB RAM as ROM (thus, +making it 368 GiB), you'd use r=23. Then set NROM to your desired ROM +size in KiB divided by 128*r. Note that these examples might (or might +not) be too extreme, leaving little memory for the rest of the system. +You could as well opt for 7/8 with r=14 or 11/12 with r=11 or r=22. + +Note that higher r may make placing of ROM in e.g. NVMe flash memory +instead of in RAM more reasonable (or less unreasonable) than it would +have been with a lower r. If this is a concern as it relates to +possible attacks and you do not intend to ever do it defensively, you +might want to keep r lower (e.g., prefer r=15 over r=30 in the example +above, even if 30 performs slightly faster). + +Your adjustments to r, if you deviate from powers of two, will also +result in weirder memory usage per hash. Like 1.75 MiB at r=14 instead +of 2 MiB at r=8 that you would have used without a ROM. That's OK. + +For ROM initialization, which you do with yescrypt_init_shared(), use +the same r and NROM that you'd later use for password hashing, choose p +based on your servers' physical and/or logical CPU count (maybe +considering eventual upgrades as you won't be able to change this later, +but without going unnecessarily high - e.g., p=28, p=56, or p=112 make +sense on servers that currently have 28 physical / 56 logical CPUs), and +set the rest of the parameters to: + +flags = YESCRYPT_DEFAULTS, N = 0, t = 0, g = 0 + +N is set to 0 because it isn't relevant during ROM initialization (you +can use different values of N for hashing passwords with the same ROM). + +To keep the ROM in e.g. SysV shared memory and reuse it across your +authentication service restarts, you'd need to allocate the memory and +set the flags to "YESCRYPT_DEFAULTS | YESCRYPT_SHARED_PREALLOCATED". + +For actual password hashing, you'd use your chosen values for N, r, +NROM, and set the rest of the parameters to: + +flags = YESCRYPT_DEFAULTS, p = 1, t = 0, g = 0 + +Note that although you'd use a large p for ROM initialization, you +should use p=1 for actual password hashing like you would without a ROM. + +Do not forget to pass the ROM into the actual password hashing (and keep +r and NROM set accordingly). + +Since N must be a power of two and r is dependent on ROM size, you may +use t (in the range of 0 to 2) for fine-tuning the running time, but +first bring N to the maximum you can afford. + +If this feels too complicated, or even if it doesn't, please consider +engaging Openwall for your yescrypt deployment. We'd be happy to help. + + + Password-based key derivation. + +(Or rather passphrase-based.) + +Use settings similar to those for password hashing without a ROM, but +adjusted for higher memory usage and running time, and optionally with +thread-level parallelism. + +Small and fast (memory usage 128 MiB, running time under 100 ms on a +fast desktop): + +flags = YESCRYPT_DEFAULTS, N = 32768, r = 32, p = 1, t = 0, g = 0, NROM = 0 + +Large and fast (memory usage 1 GiB, running time under 200 ms on a fast +quad-core desktop not including memory allocation overhead, under 250 ms +with the overhead included), but requires build with OpenMP support (or +otherwise will run as slow as yet be weaker than its p=1 alternative): + +flags = YESCRYPT_DEFAULTS, N = 262144, r = 32, p = 4, t = 0, g = 0, NROM = 0 + +Large and slower (memory usage 1 GiB, running time under 300 ms on a +fast quad-core desktop not including memory allocation overhead, under +350 ms with the overhead included), also requires build with OpenMP +support (or otherwise will run slower than the p=1 alternative below): + +flags = YESCRYPT_DEFAULTS, N = 262144, r = 32, p = 4, t = 2, g = 0, NROM = 0 + +Large and slow (memory usage 1 GiB, running time under 600 ms on a fast +desktop not including memory allocation overhead, under 650 ms with the +overhead included): + +flags = YESCRYPT_DEFAULTS, N = 262144, r = 32, p = 1, t = 0, g = 0, NROM = 0 + +Just like with password hashing, even heavier and slower settings are +possible, if affordable, and you achieve them by adjusting N, r, t in +the same way and in the same preferred ranges (please see the section on +password hashing without a ROM, above). Unlike with password hashing, +it makes some sense to go above t=2 if you expect that your users might +not be able to afford more memory but can afford more time. However, +increasing the memory usage provides better protection, and we don't +recommend forcing your users to wait for more than 1 second as they +could as well type more characters in that time. If this feels too +complicated, just use one of the above parameter sets as-is. + + + Amortization of memory allocation overhead. + +It takes a significant fraction of yescrypt's total running time to +allocate memory from the operating system, especially considering that +the kernel zeroizes the memory before handing it over to your program. + +Unless you naturally need to compute yescrypt just once per process, you +may achieve greater efficiency by fully using advanced yescrypt APIs +that let you preserve and reuse the memory allocation across yescrypt +invocations. This is done by reusing the structure pointed to by the +"yescrypt_local_t *local" argument of yescrypt_r() or yescrypt_kdf() +without calling yescrypt_free_local() inbetween the repeated invocations +of yescrypt. + + + YESCRYPT_DEFAULTS macro. + +Please note that the value of the YESCRYPT_DEFAULTS macro might change +later, so if you use the macro like it's recommended here then for +results reproducible across versions you might need to store its value +somewhere along with the hashes or the encrypted data. + +If you use yescrypt's standard hash string encoding, then yescrypt +already encodes and decodes this value for you, so you don't need to +worry about this. diff --git a/deps/yescrypt-master/PERFORMANCE b/deps/yescrypt-master/PERFORMANCE new file mode 100644 index 000000000..7d303d395 --- /dev/null +++ b/deps/yescrypt-master/PERFORMANCE @@ -0,0 +1,206 @@ +Although yescrypt is usable for a variety of purposes (password hashing, +KDF, PoW) and is extremely scalable (from 1 CPU core to many, from +kilobytes to terabytes and beyond) while achieving good security +properties across this whole range of use cases and settings, at this +time we're primarily targeting the mass user authentication use case. +Hence, this is what the setup and benchmarks shown in here focus on. + +The test system is a server (kindly provided by Packet.net) with dual +Xeon Gold 5120 CPUs (2.2 GHz, turbo to up to 3.2 GHz) and 384 GiB RAM +(12x DDR4-2400 ECC Reg). These CPUs have 14 cores and 6 memory channels +each, for a total of 28 physical cores, 56 logical CPUs (HT is enabled), +and 12 memory channels. The OS is Ubuntu 17.10 with kernel +"4.13.0-25-generic #29-Ubuntu SMP Mon Jan 8 21:14:41 UTC 2018 x86_64" +and compiler "gcc (Ubuntu 7.2.0-8ubuntu3.2) 7.2.0". + +First, we need to configure the Linux system, as root. Grant our user +account's group the privilege to access "huge pages" (2 MiB or 1 GiB as +opposed to x86's default 4 KiB pages): + +# sysctl -w vm.hugetlb_shm_group=1000 + +(You may need to replace the "1000" with your user account's actual +group id.) + +Disable swap, so that it doesn't get in the way: + +# swapoff -a + +Let processes allocate shared memory segments of up to 368 GiB each, and +up to 369 GiB total for the system: + +# sysctl -w kernel.shmmax=395136991232 +# sysctl -w kernel.shmall=396210733056 + +(The allowance for an extra gigabyte is in case any processes unrelated +to ours make use of SysV shared memory as well.) + +Preallocate the 368 GiB and 2 GiB more (to be potentially used for +threads' "RAM" lookup tables), thus 370 GiB total, into huge pages (this +will only work when existing memory allocations aren't too fragmented +yet, so is normally to be performed right upon system bootup): + +# sysctl -w vm.nr_hugepages=189440 + +Check that the preallocation has succeeded by examining /proc/meminfo: + +# grep ^Huge /proc/meminfo +HugePages_Total: 189440 +HugePages_Free: 189440 + +(If the memory were too fragmented, this would show lower numbers, which +would be problematic - worse than no use of huge pages at all.) + +This is quite extreme. Although it sort of leaves 14 GiB free (as the +difference between 370 GiB and the physical RAM of 384 GiB), in practice +on our test system only less than 5 GiB remains allocatable by user +processes after this point. For actual use, you might consider using a +slightly lower fraction (than 23/24 that we're targeting here) of total +memory for yescrypt ROM, or/and not pre-allocating any huge pages for +the RAMs (especially if they won't be used that way anyway, which +depends on the HUGEPAGE_THRESHOLD setting in yescrypt-platform.c - +currently at 32 MiB). + +Now initialization of the ROM is possible, and we can work as non-root +from this point on: + +$ GOMP_CPU_AFFINITY=0-55 time ./initrom 368 1 +r=23 N=2^9 NROM=2^27 +Will use 385875968.00 KiB ROM + 1472.00 KiB RAM +Initializing ROM ... DONE (98764b03) +'$y$j6K5O$LdJMENpBABJJ3hIHjB1Bi.$VtHhEYlX3mDbxmXUUYt9Xldf.2R5/G0E/tMioNUQ/F8' +1058.64user 163.70system 0:22.04elapsed 5544%CPU (0avgtext+0avgdata 4692maxresident)k +0inputs+0outputs (0major+193094minor)pagefaults 0swaps + +It took 22 seconds to initialize our 368 GiB ROM, and now we may hash +passwords from another process (this may be the authentication service): + +$ GOMP_CPU_AFFINITY=0-55 ./userom 368 1 +r=23 N=2^9 NROM=2^27 +Will use 385875968.00 KiB ROM + 1472.00 KiB RAM +Plaintext: '$y$j6K5O$LdJMENpBABJJ3hIHjB1Bi.$VtHhEYlX3mDbxmXUUYt9Xldf.2R5/G0E/tMioNUQ/F8' +Encrypted: '$y$j6K5O$LdJMENpBABJJ3hIHjB1Bi.$LZropFwwbIVeo/8DfHbxg6VhFLkUqdvdNy7L.T8tud.' +Benchmarking 1 thread ... +809 c/s real, 812 c/s virtual (2047 hashes in 2.53 seconds) +Benchmarking 56 threads ... +21307 c/s real, 384 c/s virtual (114632 hashes in 5.38 seconds) +min 1.393 ms, avg 2.591 ms, max 3.628 ms + +$ GOMP_CPU_AFFINITY=0-55 ./userom 368 2 +r=23 N=2^10 NROM=2^27 +Will use 385875968.00 KiB ROM + 2944.00 KiB RAM +Plaintext: '$y$j7K5O$LdJMENpBABJJ3hIHjB1Bi.$ljg0jm5/lpMa98qlF1GeAI9YkqWXSA4KVTGxidC6Gy0' +Encrypted: '$y$j7K5O$LdJMENpBABJJ3hIHjB1Bi.$7X1fd6TFYK5VQOH.7M2dRJMxvFTZbv5d1i7.GwQ/7YC' +Benchmarking 1 thread ... +419 c/s real, 420 c/s virtual (1023 hashes in 2.44 seconds) +Benchmarking 56 threads ... +10248 c/s real, 184 c/s virtual (57288 hashes in 5.59 seconds) +min 2.571 ms, avg 5.413 ms, max 6.704 ms + +$ GOMP_CPU_AFFINITY=0-55 ./userom 368 23 +r=23 N=2^13 NROM=2^27 +Will use 385875968.00 KiB ROM + 23552.00 KiB RAM +Plaintext: '$y$jAK5O$LdJMENpBABJJ3hIHjB1Bi.$UL29LYGiz.rXa6c620meFuqT3IiZmBO0BlW6HenRmA4' +Encrypted: '$y$jAK5O$LdJMENpBABJJ3hIHjB1Bi.$U15LiKcR4vHbUmCbt7SUllXp/jUyNXYOC1I.426Vk80' +Benchmarking 1 thread ... +50 c/s real, 50 c/s virtual (127 hashes in 2.52 seconds) +Benchmarking 56 threads ... +1201 c/s real, 21 c/s virtual (7112 hashes in 5.92 seconds) +min 32.444 ms, avg 46.362 ms, max 48.067 ms + +While using the ROM, we're able to compute over 21k, over 10k, or around +1200 password hashes per second with per-thread RAM sizes of 1.4375 MiB, +2.875 MiB, or 23 MiB, respectively. + +We can also reasonably use yescrypt without a ROM: + +$ GOMP_CPU_AFFINITY=0-55 ./userom 0 2 +r=16 N=2^10 NROM=2^0 +Will use 0.00 KiB ROM + 2048.00 KiB RAM +Plaintext: '$y$j7D$LdJMENpBABJJ3hIHjB1Bi.$MpcIFGNF/2yn.6pugGKCS3k6Js5sbJ7j3qLBBqKLUk4' +Encrypted: '$y$j7D$LdJMENpBABJJ3hIHjB1Bi.$7yuShztNep5CDrsQE9Ms9DkH1zqJzTy8wRiSHozJy.9' +Benchmarking 1 thread ... +828 c/s real, 828 c/s virtual (2047 hashes in 2.47 seconds) +Benchmarking 56 threads ... +21710 c/s real, 388 c/s virtual (114632 hashes in 5.28 seconds) +min 1.679 ms, avg 2.571 ms, max 3.591 ms + +$ GOMP_CPU_AFFINITY=0-55 ./userom 0 4 +r=16 N=2^11 NROM=2^0 +Will use 0.00 KiB ROM + 4096.00 KiB RAM +Plaintext: '$y$j8D$LdJMENpBABJJ3hIHjB1Bi.$dT8UO1PVT6lpQcAuWsreFpgdw9TeYdEkqsCp5syNoL9' +Encrypted: '$y$j8D$LdJMENpBABJJ3hIHjB1Bi.$evEI7SjEM6GKYxcIaNYmanAesDLMRezuOfT4V01aj33' +Benchmarking 1 thread ... +417 c/s real, 417 c/s virtual (1023 hashes in 2.45 seconds) +Benchmarking 56 threads ... +10434 c/s real, 186 c/s virtual (57288 hashes in 5.49 seconds) +min 3.120 ms, avg 5.339 ms, max 6.878 ms + +$ GOMP_CPU_AFFINITY=0-55 ./userom 0 16 +r=16 N=2^13 NROM=2^0 +Will use 0.00 KiB ROM + 16384.00 KiB RAM +Plaintext: '$y$jAD$LdJMENpBABJJ3hIHjB1Bi.$Cap65IlIDN8g9Lh0aVhLLWORQhpwxvh0rhkIB6OOpqC' +Encrypted: '$y$jAD$LdJMENpBABJJ3hIHjB1Bi.$d5Qoew0sKNt63xBRsAxNDhGV52p1jHAFN1/fglibMbA' +Benchmarking 1 thread ... +100 c/s real, 100 c/s virtual (255 hashes in 2.54 seconds) +Benchmarking 56 threads ... +2314 c/s real, 41 c/s virtual (14280 hashes in 6.17 seconds) +min 13.440 ms, avg 24.049 ms, max 25.467 ms + +$ GOMP_CPU_AFFINITY=0-55 ./userom 0 32 +r=16 N=2^14 NROM=2^0 +Will use 0.00 KiB ROM + 32768.00 KiB RAM +Plaintext: '$y$jBD$LdJMENpBABJJ3hIHjB1Bi.$zdJjnnDFSqeRbC8ZUQFZShGpP2gvFCGjAZ01h10dWa9' +Encrypted: '$y$jBD$LdJMENpBABJJ3hIHjB1Bi.$U45EV25V/KtqyetJ7AHsJaeeNTJwvQ3hBG7lokzkyR6' +Benchmarking 1 thread ... +48 c/s real, 49 c/s virtual (127 hashes in 2.61 seconds) +Benchmarking 56 threads ... +1136 c/s real, 20 c/s virtual (7112 hashes in 6.26 seconds) +min 27.844 ms, avg 48.837 ms, max 50.792 ms + +Slightly higher speeds are possible for 4 MiB and higher with larger +yescrypt block size (r=32 instead of r=16, thus 4 KiB blocks instead of +2 KiB blocks benchmarked above). Here they are for 4 MiB, 16 MiB, and +32 MiB, respectively: + +10589 c/s real, 189 c/s virtual (57288 hashes in 5.41 seconds) +min 3.465 ms, avg 5.260 ms, max 6.705 ms + +2462 c/s real, 44 c/s virtual (14280 hashes in 5.80 seconds) +min 13.923 ms, avg 22.638 ms, max 24.042 ms + +1221 c/s real, 21 c/s virtual (7112 hashes in 5.82 seconds) +min 28.909 ms, avg 45.658 ms, max 47.265 ms + +Thus, when not using a ROM we're able to compute over 21k, over 10k, +around 2400, or around 1200 hashes per second with per-thread RAM sizes +of 2 MiB, 4 MiB, 16 MiB, or 32 MiB, respectively. + +The same might not hold on another machine. + +By the way, here's what our SysV shared memory segment looks like: + +$ ipcs -m + +------ Shared Memory Segments -------- +key shmid owner perms bytes nattch status +[...] +0x7965730a 327683 user 640 395136991232 0 + +The 395+ GB size corresponds to 368 GiB. + +To cleanup, let's remove the SysV shared memory segment holding the ROM: + +$ ipcrm -M 0x7965730a + +and free up the preallocated huge pages, as root: + +# sysctl -w vm.nr_hugepages=0 diff --git a/deps/yescrypt-master/PHC-TEST-OK-SHA256 b/deps/yescrypt-master/PHC-TEST-OK-SHA256 new file mode 100644 index 000000000..aab409ae7 --- /dev/null +++ b/deps/yescrypt-master/PHC-TEST-OK-SHA256 @@ -0,0 +1 @@ +05ad49b9d9fb9eb65df78c919c3a778b7952e2e63f2e8ddb6b2b3f4b645e3cd0 PHC-TEST-OUT diff --git a/deps/yescrypt-master/README b/deps/yescrypt-master/README new file mode 100644 index 000000000..f017c6717 --- /dev/null +++ b/deps/yescrypt-master/README @@ -0,0 +1,197 @@ + What is yescrypt? + +yescrypt is a password-based key derivation function (KDF) and password +hashing scheme. It builds upon Colin Percival's scrypt. This +implementation is able to compute native yescrypt hashes as well as +classic scrypt. + +As of this writing, yescrypt is the default password hashing scheme on +recent ALT Linux, Arch Linux, Debian 11+, Fedora 35+, Kali Linux 2021.1+, +and Ubuntu 22.04+. It is also supported in Fedora 29+, RHEL 9+, and +Ubuntu 20.04+, and is recommended for new passwords in Fedora CoreOS. + + + Why yescrypt? + +Like it or not, password authentication remains relevant (including as +one of several authentication factors), password hash database leaks +happen, the leaks are not always detected and fully dealt with right +away, and even once they are many users' same or similar passwords +reused elsewhere remain exposed. To mitigate these risks (as well as +those present in other scenarios where password-based key derivation or +password hashing is relevant), computationally expensive (bcrypt, +PBKDF2, etc.) and more recently also memory-hard (scrypt, Argon2, etc.) +password hashing schemes have been introduced. Unfortunately, at high +target throughput and/or low target latency their memory usage is +unreasonably low, up to the point where they're not obviously better +than the much older bcrypt (considering attackers with pre-existing +hardware). This is a primary drawback that yescrypt addresses. + +Most notable for large-scale deployments is yescrypt's optional +initialization and reuse of a large lookup table, typically occupying +at least tens of gigabytes of RAM and essentially forming a +site-specific ROM. This limits attackers' use of pre-existing hardware +such as botnet nodes. + +yescrypt's other changes from scrypt additionally slow down GPUs and to +a lesser extent FPGAs and ASICs even when its memory usage is low and +even when there's no ROM, and provide extra knobs and built-in features. + +Technically, yescrypt is the most scalable password hashing scheme so +far, providing near-optimal security from offline password cracking +across the whole range from kilobytes to terabytes and beyond. However, +the price for this is complexity, and we recognize that complexity is a +major drawback of any software. Thus, at this time we focus on +large-scale deployments, where the added complexity is relatively small +compared to the total complexity of the authentication service setup. +For smaller deployments, bcrypt with its simplicity and existing library +support is a reasonable short-term choice (although we're making +progress towards more efficient FPGA attacks on bcrypt under a separate +project). We might introduce a cut-down yescrypt-lite later or/and +yescrypt might become part of standard or popular libraries, making it +more suitable for smaller deployments as well. + + + Parameter selection. + +Please refer to PARAMETERS for guidelines on parameter selection and the +currently recommended parameter sets by use case (password hashing with +or without a ROM, and KDF). + + + Performance. + +Please refer to PERFORMANCE for example setup and benchmarks relevant to +the mass user authentication use case. + +The test system is a server (kindly provided by Packet.net) with dual +Xeon Gold 5120 CPUs (2.2 GHz, turbo to up to 3.2 GHz) and 384 GiB RAM +(12x DDR4-2400 ECC Reg). These CPUs have 14 cores and 6 memory channels +each, for a total of 28 physical cores, 56 logical CPUs (HT is enabled), +and 12 memory channels. + +Some highlights: initialization of a 368 GiB ROM takes 22 seconds (to +be done on server bootup), and while using the ROM we're able to compute +over 21k, over 10k, or around 1200 hashes per second with per-hash RAM +usage of 1.4375 MiB, 2.875 MiB, or 23 MiB, respectively. + +When not using a ROM, we're able to compute over 21k, over 10k, or +around 1200 hashes per second with per-hash RAM usage of 2 MiB, 4 MiB, +or 32 MiB, respectively. + + + Comparison to scrypt and Argon2. + +yescrypt's advantages: + + + Greater resistance to offline attacks + + Extra optional built-in features + + Cryptographic security provided by NIST-approved primitives + + SHA-256, HMAC, PBKDF2, and scrypt are usable from the same codebase + +yescrypt's drawbacks: + + - Complex + - Cache-timing unsafe (like scrypt and Argon2d, but unlike Argon2i) + - Not the PHC winner (Argon2 is), but is merely a "special recognition" + - Supported in fewer third-party projects + +Please refer to COMPARISON for a lot more detail and other observations. + + + A note on cryptocurrencies. + +For historical reasons, multiple CPU mining focused cryptocurrencies use +yescrypt 0.5'ish as their proof-of-work (PoW) scheme. We currently have +a separate project for the PoW use case: yespower. Thus, rather than +misuse yescrypt 1.0+ for PoW, those and other projects are advised to +use yespower 1.0+ instead. The yespower homepage is: + + https://www.openwall.com/yespower/ + + + How to test yescrypt for proper operation. + +On a Unix-like system, invoke "make check". This will build and run a +program called "tests", and check its output against the supplied file +TESTS-OK. It will also build a program called "phc-test", and if a file +called PHC-TEST-OK-SHA256 is present will run that program and check its +output against that file's contents. If everything matches, each of +these two sets of tests prints one word "PASSED", so there will be two +such lines among "make check" output, one of them being the final line +of output. + +We do most of our testing on Linux systems with gcc. The supplied +Makefile assumes that you use gcc. + + + ROM in SysV shared memory demo and benchmark. + +Also included with this version of yescrypt are "initrom" and "userom" +demo programs. They're built by simply typing "make". Please refer to +PERFORMANCE for their usage. + + + Alternate code versions and make targets. + +Two implementations of yescrypt are included: reference and optimized. +By default, the optimized implementation is built. Internally, the +optimized implementation uses conditional compilation to choose between +usage of various SIMD instruction sets where supported and scalar code. + +The reference implementation is unoptimized and is very slow, but it has +simpler and shorter source code. Its purpose is to provide a simple +human- and machine-readable specification that implementations intended +for actual use should be tested against. It is deliberately mostly not +optimized, and it is not meant to be used in production. + +Similarly to "make check", there's "make check-ref" to build and test +the reference implementation. There's also "make ref" to build the +reference implementation and have the "initrom" and "userom" programs +use it. + +"make clean" may need to be run between making different builds. + + + Development status. + +This yescrypt distribution is a work-in-progress. Its interfaces other +than crypto_scrypt() are subject to change in future revisions, however +no incompatible changes to the yescrypt algorithm are expected. + + + Credits. + +scrypt has been designed by Colin Percival. yescrypt has been designed +by Solar Designer building upon scrypt. + +The following other people and projects have also indirectly helped make +yescrypt what it is: + + - Bill Cox + - Rich Felker + - Anthony Ferrara + - Christian Forler + - Taylor Hornby + - Dmitry Khovratovich + - Samuel Neves + - Marcos Simplicio + - Ken T Takusagawa + - Jakob Wenzel + - Christian Winnerlein + + - DARPA Cyber Fast Track + - Password Hashing Competition + + + Contact info. + +First, please check the yescrypt homepage for new versions, etc.: + + https://www.openwall.com/yescrypt/ + +If you have anything valuable to add or a non-trivial question to ask, +you may join and post to the yescrypt mailing list (referenced on the +yescrypt homepage above) or contact the maintainer of yescrypt at: + + Solar Designer diff --git a/deps/yescrypt-master/TESTS-OK b/deps/yescrypt-master/TESTS-OK new file mode 100644 index 000000000..ace7fb2ef --- /dev/null +++ b/deps/yescrypt-master/TESTS-OK @@ -0,0 +1,80 @@ +scrypt("", "", 16, 1, 1) = 77 d6 57 62 38 65 7b 20 3b 19 ca 42 c1 8a 04 97 f1 6b 48 44 e3 07 4a e8 df df fa 3f ed e2 14 42 fc d0 06 9d ed 09 48 f8 32 6a 75 3a 0f c8 1f 17 e8 d3 e0 fb 2e 0d 36 28 cf 35 e2 0c 38 d1 89 06 +scrypt("password", "NaCl", 1024, 8, 16) = fd ba be 1c 9d 34 72 00 78 56 e7 19 0d 01 e9 fe 7c 6a d7 cb c8 23 78 30 e7 73 76 63 4b 37 31 62 2e af 30 d9 2e 22 a3 88 6f f1 09 27 9d 98 30 da c7 27 af b9 4a 83 ee 6d 83 60 cb df a2 cc 06 40 +scrypt("pleaseletmein", "SodiumChloride", 16384, 8, 1) = 70 23 bd cb 3a fd 73 48 46 1c 06 cd 81 fd 38 eb fd a8 fb ba 90 4f 8e 3e a9 b5 43 f6 54 5d a1 f2 d5 43 29 55 61 3f 0f cf 62 d4 97 05 24 2a 9a f9 e6 1e 85 dc 0d 65 1e 40 df cf 01 7b 45 57 58 87 +scrypt("pleaseletmein", "SodiumChloride", 1048576, 8, 1) = 21 01 cb 9b 6a 51 1a ae ad db be 09 cf 70 f8 81 ec 56 8d 57 4a 2f fd 4d ab e5 ee 98 20 ad aa 47 8e 56 fd 8f 4b a5 d0 9f fa 1c 6d 92 7c 40 f4 c3 37 30 40 49 e8 a9 52 fb cb f4 5c 6f a7 7a 41 a4 +yescrypt("", "", 0, 16, 1, 1, 0, 0) = 77 d6 57 62 38 65 7b 20 3b 19 ca 42 c1 8a 04 97 f1 6b 48 44 e3 07 4a e8 df df fa 3f ed e2 14 42 fc d0 06 9d ed 09 48 f8 32 6a 75 3a 0f c8 1f 17 e8 d3 e0 fb 2e 0d 36 28 cf 35 e2 0c 38 d1 89 06 +yescrypt("", "", 0, 16, 1, 1, 0, 0) = 77 d6 57 62 38 65 7b 20 +yescrypt("", "", 0, 4, 1, 1, 0, 0) = ef ad 0c 23 31 4c b5 72 bc 3c fb 15 43 da 42 f8 a8 b0 73 00 4c 86 6b 64 ab 50 55 a4 f0 9f a5 f5 71 14 2e bf e7 e0 5a 3b 92 c4 32 f3 1d ea 95 ad 5f 9c 85 4b 64 56 46 2f 4b d0 f7 32 b7 cd c5 49 +yescrypt("", "", 1, 4, 1, 1, 0, 0) = 85 dd a4 8c 9e c9 de 2f 7f 1a e8 b4 df ed a5 1f 8b 6d 56 f3 08 1b e1 a7 c0 83 3b a2 71 9a 36 ab 02 88 5d ae 36 55 7d 34 26 86 b1 7b a7 5f 2c 21 77 92 de 09 70 ab 1d 07 a9 c7 50 93 6d 31 42 6f +yescrypt("", "", 1, 4, 1, 1, 0, 0) = 85 dd a4 8c 9e c9 de 2f +yescrypt("", "", 1, 4, 1, 1, 1, 0) = 4b aa 8c d8 60 8b a9 1f 3e 34 39 d9 ec 4f ae 8f 9f c0 92 d9 ca 22 b7 37 7e 31 ae 5b 9a d7 87 7c 11 68 69 11 62 dd 0e 5e f0 49 e5 70 65 0c be d4 38 4a d6 05 34 fb 0c be d1 9f f3 f0 33 c9 4b 0c +yescrypt("", "", 1, 4, 1, 1, 2, 0) = e6 e8 bb a0 9b 64 12 ff b0 b3 cc 35 e3 7d 0b 78 2a 47 fb aa dc 57 a0 76 d7 c6 cc 2e 70 91 9a 1b 8d 47 38 c4 f8 33 55 69 07 42 d9 be d7 1c 3b 8f b0 d7 eb 08 6a b1 34 c5 e5 57 07 c2 c1 3c 75 ef +yescrypt("", "", 1, 4, 1, 1, 3, 0) = ac d9 a4 20 1c f4 a4 76 ec f7 ba a6 11 3d 86 fb 65 cd 07 10 2b 40 04 e4 f9 d9 9c d3 42 55 a1 08 99 7d 70 ae 0a 64 bf 0a 4d 96 c1 73 ab f8 82 79 c1 a9 4a d9 bd f1 68 ed fb bd 90 f6 6e d5 c8 0d +yescrypt("", "", 1, 4, 1, 1, 3, 0) = ac d9 a4 20 1c f4 a4 76 ec f7 ba a6 11 3d 86 fb 65 cd 07 10 2b 40 04 e4 f9 d9 9c d3 42 55 a1 08 99 +yescrypt("", "", 1, 4, 1, 1, 3, 0) = ac d9 a4 20 1c f4 a4 76 ec f7 ba a6 11 3d 86 fb 65 cd 07 10 2b 40 04 e4 f9 d9 9c d3 42 55 a1 08 +yescrypt("", "", 1, 4, 1, 1, 3, 0) = ac d9 a4 20 1c f4 a4 76 ec f7 ba a6 11 3d 86 fb 65 cd 07 10 2b 40 04 e4 f9 d9 9c d3 42 55 a1 +yescrypt("", "", 1, 4, 1, 1, 3, 0) = ac +yescrypt("", "", 182, 4, 1, 1, 0, 0) = 0c d5 af 76 eb 24 1d f8 11 9a 9a 12 2a e3 69 20 bc c7 f4 14 b9 c0 d5 8f 45 00 80 60 da de 46 b0 c8 09 22 bd cc 16 a3 ab 5d 20 1d 4c 61 40 c6 71 be 1f 75 27 2c a9 04 73 9d 5a d1 ff 67 2b 0c 21 +yescrypt("", "", 182, 4, 1, 1, 0, 0) = 0c d5 af 76 +yescrypt("", "", 182, 4, 1, 1, 1, 0) = 23 b6 ad f0 b6 0c 9a 99 7f 58 58 3d 80 cd a4 8c 63 8c dc 2f 28 9e df 93 a7 08 07 72 5a 0d 35 c4 68 ca 36 2c 55 57 cc 04 b6 81 1e 2e 73 08 41 f5 26 d8 f4 f7 ac fb fa 9e 06 fe 1f 38 3a 71 15 5e +yescrypt("", "", 182, 4, 1, 1, 1, 0) = 23 b6 ad f0 b6 0c 9a 99 7f 58 58 3d 80 cd a4 8c 63 8c dc 2f 28 9e df 93 a7 08 07 72 5a 0d 35 c4 68 +yescrypt("", "", 182, 4, 1, 1, 1, 0) = 23 b6 ad f0 b6 0c 9a 99 7f 58 58 3d 80 cd a4 8c 63 8c dc 2f 28 9e df 93 a7 08 07 72 5a 0d 35 c4 +yescrypt("", "", 182, 4, 1, 1, 1, 0) = 23 b6 ad f0 b6 0c 9a 99 7f 58 58 3d 80 cd a4 8c 63 8c dc 2f 28 9e df 93 a7 08 07 72 5a 0d 35 +yescrypt("", "", 182, 4, 1, 1, 1, 0) = 23 +yescrypt("p", "s", 182, 16, 8, 1, 10, 0) = e1 f9 81 73 3a 94 05 2f cd 7a cb 14 05 df 0b bd e8 e4 99 b6 a1 33 1b 77 59 09 b4 8c 2f 51 6c 40 dc c8 30 16 35 b7 23 7b +yescrypt("p", "s", 1, 16, 8, 1, 10, 0) = 9e 7a 40 97 64 42 84 cf 3b 73 b6 04 50 ff 23 0c dc b6 b1 b1 9b 15 09 ee b4 82 f6 96 c4 f1 c7 05 c0 0f 74 02 16 18 3a 12 +yescrypt("p", "s", 182, 16, 8, 1, 0, 0) = c8 c7 ff 11 22 b0 b2 91 c3 f2 60 89 48 78 2c d6 89 cc 45 57 90 17 aa a5 ff 8b aa 74 a6 32 ec 99 c3 d6 69 30 fb 20 23 bb +yescrypt("p", "s", 1, 16, 8, 1, 0, 0) = 9d d6 36 c2 d0 bb 92 34 52 86 ef da f8 a6 8c fc 1b 4f fd c4 b1 ad ac cc 7d 86 4b 9a 67 87 b8 5d 6a e0 f5 28 0d a8 88 9f +yescrypt("p", "s", 182, 16, 8, 1, 0, 0) = c8 c7 ff 11 22 b0 b2 91 c3 f2 60 89 48 78 2c d6 89 cc 45 57 90 17 aa a5 ff 8b aa 74 a6 32 ec 99 +yescrypt("p", "s", 182, 16, 8, 1, 0, 0) = c8 c7 ff 11 22 b0 b2 91 +'$y$jD5.7$LdJMENpBABJJ3hIHjB1Bi.' +Plaintext: '$y$jD5.7$LdJMENpBABJJ3hIHjB1Bi.$HboGM6qPrsK.StKYGt6KErmUYtioHreJd98oIugoNB6' +Encrypted: '$y$jD5.7$BkbiDbyWZnzlLWOAcru671$zLAHafRUyp9n9XZWnltUbj3ULWUtMN4fteTltjWkARC' +Plaintext: '$y$jC4$LdJMENpBABJJ3hIHjB1B$jVg4HoqqpbmQv/NCpin.QCMagJ8o4QX7lXdzvVV0xFC' +Encrypted: '$y$jC4$qiyh2SQgE5vrF3ORvFho$HurI7MuukXHz..TpxrwKuakji/j9VKDh2WVUK4DIsq5' +Plaintext: '$y$/B3.6$LdJMENpBABJJ3hIHjB1$h8sE4hJo.BsdlfJr0.d8bNJNPZymH7Y3kLj4aY1Rfc8' +Encrypted: '$y$/B3.6$YiN5s/dKpjNrdKm9ND0$lBNMoUaAsw.JR0zMq9IBKIi/VPxj7lD7Sg64nB5LFw2' +Plaintext: '$y$/A2$LdJMENpBABJJ3hIHj/$5IEld1eWdmh5lylrqHLF5dvA3ISpimEM9J1Dd05n/.3' +Encrypted: '$y$/A2$TqjvmGXoqnsNU/8Y40$ZB43..7UnMt6ySU7XbpPyvyahahHSkJJgztkLWp6/IC' +Plaintext: '$y$j91.5$LdJMENpBABJJ3hIH$ebKnn23URD5vyLgF9cP2EvVosrUXf7UErGRV0KmC6e6' +Encrypted: '$y$j91.5$bICydADAaInC9UR/$rpsDDkULkr1caCVYV9PNAsiZxijoQ2/gDcbonlowRi7' +Plaintext: '$y$j80$LdJMENpBABJJ3h2$ysXVVJwuaVlI1BWoEKt/Bz3WNDDmdOWz/8KTQaHL1cC' +Encrypted: '$y$j80$fmxyeGYOC34lh19$mm9FRBs0iHLTHfSNznm1kJVchXN4PaS8hoNI6TTAlB7' +Plaintext: '$y$/7/.4$LdJMENpBABJJ3/$lXHleh7bIZMGNtJVxGVrsIWkEIXfBedlfPui/PITflC' +Encrypted: '$y$/7/.4$EuTbL3Wtm3khW0$1jvKQzIcAqYnYxfb4TEs.FeAZ7rLDl5vNQEkPPcj2KC' +Plaintext: '$y$/6.$LdJMENpBABJJ$zQITmYSih5.CTY47x0IuE4wl.b3HzYGKKCSggakaQ22' +Encrypted: '$y$/6.$x0G/jIr053ui$4O.aVGTPptkjx6eXrW8fdvqcPEV28w7a1PSos6CXV31' +Plaintext: '$y$j5..3$LdJMENpBAB3$xi27PTUNd8NsChHeLOz85JFnUOyibRHkWzprowRlR5/' +Encrypted: '$y$j5..3$/nwg3UXJWp/$5jcvDgeotKpaG9IeSJx0fJNSz33JjTYYD4Kwao3Eki5' +Plaintext: '$y$j4/$LdJMENpBA/$tHlkpTQ8V/eEnTVau1uW36T97LIXlfPrEzdeV5SE5K7' +Encrypted: '$y$j4/$yoneNBwae0$uPBnH0yXBCOM5v5BU9qlvUUtUr3QD5btS0upc6sdvf4' +Plaintext: '$y$/3..2$LdJMENpB$tNczXFuNUd3HMqypStCRsEaL4e4KF7ZYLBe8Hbeg0B7' +Encrypted: '$y$/3..2$VD20uHT3$AV5WWaN6bEKRvZlCuurj.mnHMmZmJ9ExQ9HjiReCDwC' +Plaintext: '$y$/2/$LdJMEN3$RRorHhfsw1/P/WR6Aurg4U72e9Q7qt9vFPURdyfiqK8' +Encrypted: '$y$/2/$BYujKJA$fsMwVvFm8r1caFQP.mem3OUuMYBCDGj9CEoDfSwFDLB' +Plaintext: '$y$j2..1$LdJME/$iLEt6kuTwHch6XdCxtTHfsQzYwWFmpUwgl6Ax8RH4d1' +Encrypted: '$y$j2..1$.mZga/$X6GFMkoYPxFapo.3H4LllEjltFapONQcKUOdEd9oPa/' +Plaintext: '$y$j0/$LdJM$k7BXzSDuoGHW56SY3HxROCiA0gWRscZe2aA0q5oHPM0' +Encrypted: '$y$j0/$SkNZ$DQ06H0br45bpE7lGgCD9gOxTMP9SsO6Mt1T9lo5PHz1' +Plaintext: '$y$//..0$Ld3$6BJXezMFxaMiO5wsuoEmztvtCs/79085dZO56ADlV5B' +Encrypted: '$y$//..0$lM1$60gjeUIW/3QidfN6zU9NqB09Ni1NBMfj2VaSZMjDd18' +Plaintext: '$y$///$L/$Rrrkp6OVljrIk0kcwkCDhAiHJiSthh3cKeIGHUW7Z0C' +Encrypted: '$y$///$q.$/.tR4GqigxciLYGoB8fmzudWQR7IzSu9s3dR8wp3VsD' +Plaintext: '$y$j1../$LdJMENpBABJJ3hIHjB1Bi.$L8OQFc8mxJPd7CpUFgkS7KqJM2I9jGXu3BdqX2D.647' +Encrypted: '$y$j1../$BkbiDbyWZnzlLWOAcru671$iicGI2gNZyhimPVgz2VoKrJAB9fWykBN.3Mh0AwEy29' +Plaintext: '$y$j//$LdJMENpBABJJ3hIHjB1B$U8a2MaK.yesqWySK8Owk6PWeWmp/XuagMbpP45q1/q1' +Encrypted: '$y$j//$qiyh2SQgE5vrF3ORvFho$5dD9ick8ugystfp8wa3xbV7ASDux0dpoOh0QJxFuXH5' +'$7$C6..../....SodiumChloride$kBGj9fHznVYFQMEn/qDCfrDevf9YDtcDdKvEqHJLV8D' +'$7$06..../....SodiumChloride$ENlyo6fGw4PCcDBOFepfSZjFUnVatHzCcW55.ZGz3B0' +r=8 N=2^11 NROM=2^18 +Will use 262144.00 KiB ROM + 2048.00 KiB RAM +Initializing ROM ... DONE (696ebab2) +'$y$j8567F$LdJMENpBABJJ3hIHjB1Bi.' +'$y$j8567F$LdJMENpBABJJ3hIHjB1Bi.$4XJGTsv75AjIN60Z31kPN3.86vkCYzIq7LMz2Pb2lC.' +Initializing ROM in preallocated memory ... DONE (696ebab2) +'$y$j8567F$LdJMENpBABJJ3hIHjB1Bi.$4XJGTsv75AjIN60Z31kPN3.86vkCYzIq7LMz2Pb2lC.' +'$y$j8567F$LdJMENpBABJJ3hIHjB1Bi.$K3wFVK9/t3QsjCk/oK2s8dKzzZ4m7QTP8Ms5uywhWv8' +'$y$j8567F$LdJMENpBABJJ3ZIHjB1Bi.$/OnmIkP0UK5OxyxD0Af/V1oL0zWvTLAUWg3Nr0bsFEB' +'$y$j8567F$LdJMENpBABJJ3ZIHjB1Bi.$DskEGULspNduIZVFK5SOK8enlXnSs/vkuXFdi0wkQ1.' +'$y$j/.5I$LdJMENpBABJJ3hIHjB1Bi.$NqCMKxN9Y9Uw821.72ScGDMpyk7U7V51qnHSRPapzW8' diff --git a/deps/yescrypt-master/initrom.c b/deps/yescrypt-master/initrom.c new file mode 100644 index 000000000..fde858cc4 --- /dev/null +++ b/deps/yescrypt-master/initrom.c @@ -0,0 +1,217 @@ +/*- + * Copyright 2013-2018 Alexander Peslyak + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted. + * + * 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 YESCRYPT_FLAGS YESCRYPT_DEFAULTS + +#define ROM_SHM_KEY 0x7965730a +#define ROM_LOCAL_PARAM "change this before use" + +/* Maximum parallelism factor during ROM initialization */ +#define YESCRYPT_PROM_SHM 112 +#define YESCRYPT_PROM_FILE 4 + +//#define USE_HUGEPAGE +//#define DUMP_SHARED + +#include +#include +#include /* for atoi() */ +#include +#include +#include +#include +#include +#include + +#include "yescrypt.h" + +int main(int argc, const char * const *argv) +{ +#if 0 + uint64_t rom_bytes = 112 * (1024ULL*1024*1024); + uint64_t ram_bytes = 1 * (1024ULL*1024); +#else + uint64_t rom_bytes = 3 * (1024ULL*1024*1024); + uint64_t ram_bytes = 2 * (1024ULL*1024); +#endif + uint32_t r, min_r; + uint64_t NROM_log2, N_log2; + int shmid; + yescrypt_shared_t shared; + yescrypt_binary_t *digest; + const char *rom_filename = NULL; + int rom_fd; + + if (argc > 1) + rom_bytes = atoi(argv[1]) * (1024ULL*1024*1024); + if (argc > 2) + ram_bytes = atoi(argv[2]) * (1024ULL*1024); + if (argc > 3) + rom_filename = argv[3]; + + if (!rom_bytes) { + puts("Wrong ROM size requested"); + return 1; + } + + min_r = 9; + if (rom_filename) + min_r = 8 * 256; + + NROM_log2 = 0; + while (((rom_bytes >> NROM_log2) & 0xff) == 0) + NROM_log2++; + r = rom_bytes >> (7 + NROM_log2); + while (r < min_r && NROM_log2 > 0) { + r <<= 1; + NROM_log2--; + } + rom_bytes = (uint64_t)r << (7 + NROM_log2); + + N_log2 = 3; + while (((uint64_t)r << (7 + N_log2)) < ram_bytes) + N_log2++; + ram_bytes = (uint64_t)r << (7 + N_log2); + + printf("r=%u N=2^%u NROM=2^%u\n", r, + (unsigned int)N_log2, (unsigned int)NROM_log2); + + printf("Will use %.2f KiB ROM\n", rom_bytes / 1024.0); + printf(" %.2f KiB RAM\n", ram_bytes / 1024.0); + + shared.aligned_size = rom_bytes; + + if (rom_filename) { + rom_fd = open(rom_filename, O_CREAT|O_RDWR|O_EXCL, + S_IRUSR|S_IRGRP|S_IWUSR); + if (rom_fd < 0) { + perror("open"); + return 1; + } + if (ftruncate(rom_fd, rom_bytes)) { + perror("ftruncate"); + close(rom_fd); + unlink(rom_filename); + return 1; + } + + int flags = +#ifdef MAP_NOCORE + MAP_NOCORE | +#endif +#if defined(MAP_HUGETLB) && defined(USE_HUGEPAGE) + MAP_HUGETLB | +#endif + MAP_SHARED; + void *p = mmap(NULL, rom_bytes, PROT_READ | PROT_WRITE, + flags, rom_fd, 0); +#if defined(MAP_HUGETLB) && defined(USE_HUGEPAGE) + if (p == MAP_FAILED) + p = mmap(NULL, rom_bytes, PROT_READ | PROT_WRITE, + flags & ~MAP_HUGETLB, rom_fd, 0); +#endif + if (p == MAP_FAILED) { + perror("mmap"); + close(rom_fd); + unlink(rom_filename); + return 1; + } + close(rom_fd); + shared.base = shared.aligned = p; + } else { + shmid = shmget(ROM_SHM_KEY, shared.aligned_size, +#ifdef SHM_HUGETLB + SHM_HUGETLB | +#endif + IPC_CREAT|IPC_EXCL | S_IRUSR|S_IRGRP|S_IWUSR); + if (shmid == -1) { +#ifdef SHM_HUGETLB + perror("shmget"); + puts("Retrying without SHM_HUGETLB"); + shmid = shmget(ROM_SHM_KEY, shared.aligned_size, + IPC_CREAT|IPC_EXCL | S_IRUSR|S_IRGRP|S_IWUSR); +#endif + if (shmid == -1) { + perror("shmget"); + return 1; + } + } + + shared.base = shared.aligned = shmat(shmid, NULL, 0); + if (shared.base == (void *)-1) { + int save_errno = errno; + shmctl(shmid, IPC_RMID, NULL); + errno = save_errno; + perror("shmat"); + return 1; + } + } + + printf("Initializing ROM ..."); + fflush(stdout); + yescrypt_params_t rom_params = { + .flags = YESCRYPT_DEFAULTS | YESCRYPT_SHARED_PREALLOCATED, + .NROM = (uint64_t)1 << NROM_log2, + .r = r, + .p = rom_filename ? YESCRYPT_PROM_FILE : YESCRYPT_PROM_SHM }; + if (yescrypt_init_shared(&shared, + (uint8_t *)ROM_LOCAL_PARAM, strlen(ROM_LOCAL_PARAM), + &rom_params)) { + puts(" FAILED"); + if (rom_filename) + unlink(rom_filename); + return 1; + } +#ifdef DUMP_SHARED + fwrite(shared.aligned, shared.aligned_size, 1, stderr); +#endif + digest = yescrypt_digest_shared(&shared); + printf(" DONE (%02x%02x%02x%02x)\n", + digest->uc[0], digest->uc[1], digest->uc[2], digest->uc[3]); + + { + yescrypt_local_t local; + const uint8_t *setting; + uint8_t hash[128]; + + if (yescrypt_init_local(&local)) { + puts("yescrypt_init_local() FAILED"); + return 1; + } + + yescrypt_params_t params = rom_params; + params.flags = YESCRYPT_FLAGS; + params.N = (uint64_t)1 << N_log2; + params.p = 1; + setting = yescrypt_encode_params(¶ms, + (const uint8_t *)"WZaPV7LSUEKMo34.", 16); + + printf("'%s'\n", (char *)yescrypt_r(&shared, &local, + (const uint8_t *)"pleaseletmein", 13, setting, NULL, + hash, sizeof(hash))); + } + + if (rom_filename && munmap(shared.base, rom_bytes)) { + perror("munmap"); + return 1; + } + + return 0; +} diff --git a/deps/yescrypt-master/insecure_memzero.c b/deps/yescrypt-master/insecure_memzero.c new file mode 100644 index 000000000..d0e8cbad7 --- /dev/null +++ b/deps/yescrypt-master/insecure_memzero.c @@ -0,0 +1,49 @@ +/*- + * Copyright 2014 Colin Percival + * All rights reserved. + * + * 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 SKIP_MEMZERO + +#include +#include + +#include "insecure_memzero.h" + +/* Function which does the zeroing. */ +static void +insecure_memzero_func(volatile void * buf, size_t len) +{ + volatile uint8_t * _buf = buf; + size_t i; + + for (i = 0; i < len; i++) + _buf[i] = 0; +} + +/* Pointer to memory-zeroing function. */ +void (* volatile insecure_memzero_ptr)(volatile void *, size_t) = + insecure_memzero_func; + +#endif diff --git a/deps/yescrypt-master/insecure_memzero.h b/deps/yescrypt-master/insecure_memzero.h new file mode 100644 index 000000000..d5a41d157 --- /dev/null +++ b/deps/yescrypt-master/insecure_memzero.h @@ -0,0 +1,69 @@ +/*- + * Copyright 2014 Colin Percival + * All rights reserved. + * + * 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 _INSECURE_MEMZERO_H_ +#define _INSECURE_MEMZERO_H_ + +#ifdef SKIP_MEMZERO +#define insecure_memzero(buf, len) /* empty */ +#else + +#include + +/* Pointer to memory-zeroing function. */ +extern void (* volatile insecure_memzero_ptr)(volatile void *, size_t); + +/** + * insecure_memzero(buf, len): + * Attempt to zero ${len} bytes at ${buf} in spite of optimizing compilers' + * best (standards-compliant) attempts to remove the buffer-zeroing. In + * particular, to avoid performing the zeroing, a compiler would need to + * use optimistic devirtualization; recognize that non-volatile objects do not + * need to be treated as volatile, even if they are accessed via volatile + * qualified pointers; and perform link-time optimization; in addition to the + * dead-code elimination which often causes buffer-zeroing to be elided. + * + * Note however that zeroing a buffer does not guarantee that the data held + * in the buffer is not stored elsewhere; in particular, there may be copies + * held in CPU registers or in anonymous allocations on the stack, even if + * every named variable is successfully sanitized. Solving the "wipe data + * from the system" problem will require a C language extension which does not + * yet exist. + * + * For more information, see: + * http://www.daemonology.net/blog/2014-09-04-how-to-zero-a-buffer.html + * http://www.daemonology.net/blog/2014-09-06-zeroing-buffers-is-insufficient.html + */ +static inline void +insecure_memzero(volatile void * buf, size_t len) +{ + + (insecure_memzero_ptr)(buf, len); +} + +#endif + +#endif /* !_INSECURE_MEMZERO_H_ */ diff --git a/deps/yescrypt-master/phc.c b/deps/yescrypt-master/phc.c new file mode 100644 index 000000000..ceb5935cc --- /dev/null +++ b/deps/yescrypt-master/phc.c @@ -0,0 +1,145 @@ +/*- + * Copyright 2014-2016,2018 Alexander Peslyak + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted. + * + * 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 YESCRYPT_FLAGS YESCRYPT_DEFAULTS +#define YESCRYPT_BASE_N 8 +#define YESCRYPT_R 8 +#define YESCRYPT_P 1 + +#include "yescrypt.h" + +#ifdef TEST +static +#endif +int PHS(void *out, size_t outlen, const void *in, size_t inlen, + const void *salt, size_t saltlen, unsigned int t_cost, unsigned int m_cost) +{ + yescrypt_local_t local; + yescrypt_params_t params = { + .flags = YESCRYPT_FLAGS, + .N = (uint64_t)YESCRYPT_BASE_N << m_cost, + .r = YESCRYPT_R, + .p = YESCRYPT_P, + .t = t_cost, + .g = 0 }; + int retval; + + if (yescrypt_init_local(&local)) + return -1; + retval = yescrypt_kdf(NULL, &local, in, inlen, salt, saltlen, ¶ms, + out, outlen); + if (yescrypt_free_local(&local)) + return -1; + return retval; +} + +#ifdef TEST +#include +#include /* for sysconf() */ +#include + +static void print_hex(const uint8_t *buf, size_t buflen, const char *sep) +{ + size_t i; + + putchar('"'); + for (i = 0; i < buflen; i++) + printf("\\x%02x", buf[i]); + printf("\"%s", sep); +} + +static void print_PHS(const void *in, size_t inlen, + const void *salt, size_t saltlen, unsigned int t_cost, unsigned int m_cost) +{ + uint8_t dk[32]; + + printf("PHS("); + print_hex(in, inlen, ", "); + print_hex(salt, saltlen, ", "); + printf("%u, %u) = ", t_cost, m_cost); + + if (PHS(dk, sizeof(dk), in, inlen, salt, saltlen, t_cost, m_cost)) { + puts("FAILED"); + return; + } + + print_hex(dk, sizeof(dk), "\n"); +} + +static void print_all_PHS(unsigned int t_cost, unsigned int m_cost) +{ + clock_t clk_tck = sysconf(_SC_CLK_TCK); + struct tms start_tms, end_tms; + clock_t start = times(&start_tms), end, start_v, end_v; + const size_t count = 0x102; + size_t inlen, i, j; + + inlen = 0; + for (i = 0; i < count; i++) { + uint8_t in[128], salt[16]; + + for (j = 0; j < inlen; j++) + in[j] = (i + j) & 0xff; + for (j = 0; j < sizeof(salt); j++) + salt[j] = ~(i + j) & 0xff; + + print_PHS(in, inlen, salt, sizeof(salt), t_cost, m_cost); + + if (++inlen > sizeof(in)) + inlen = 0; + } + + end = times(&end_tms); + + start_v = start_tms.tms_utime + start_tms.tms_stime + + start_tms.tms_cutime + start_tms.tms_cstime; + end_v = end_tms.tms_utime + end_tms.tms_stime + + end_tms.tms_cutime + end_tms.tms_cstime; + + if (end == start) + end++; + if (end_v == start_v) + end_v++; + + fprintf(stderr, "m_cost=%u (%.0f KiB), t_cost=%u\n" + "%llu c/s real, %llu c/s virtual (%llu hashes in %.2f seconds)\n", + m_cost, (YESCRYPT_BASE_N << m_cost) * YESCRYPT_R / 8.0, t_cost, + (unsigned long long)count * clk_tck / (end - start), + (unsigned long long)count * clk_tck / (end_v - start_v), + (unsigned long long)count, (double)(end - start) / clk_tck); +} + +int main(void) +{ +#if 0 + setvbuf(stdout, NULL, _IOLBF, 0); +#endif + + print_all_PHS(0, 0); + print_all_PHS(0, 7); + print_all_PHS(0, 8); + print_all_PHS(1, 8); + print_all_PHS(2, 8); + print_all_PHS(3, 8); + print_all_PHS(0, 11); + + return 0; +} +#endif diff --git a/deps/yescrypt-master/sha256.c b/deps/yescrypt-master/sha256.c new file mode 100644 index 000000000..1a5372793 --- /dev/null +++ b/deps/yescrypt-master/sha256.c @@ -0,0 +1,652 @@ +/*- + * Copyright 2005-2016 Colin Percival + * Copyright 2016-2018,2021 Alexander Peslyak + * All rights reserved. + * + * 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 +#include +#include + +#include "insecure_memzero.h" +#include "sysendian.h" + +#include "sha256.h" + +#ifdef __ICC +/* Miscompile with icc 14.0.0 (at least), so don't use restrict there */ +#define restrict +#elif __STDC_VERSION__ >= 199901L +/* Have restrict */ +#elif defined(__GNUC__) +#define restrict __restrict +#else +#define restrict +#endif + +/* + * Encode a length len*2 vector of (uint32_t) into a length len*8 vector of + * (uint8_t) in big-endian form. + */ +static void +be32enc_vect(uint8_t * dst, const uint32_t * src, size_t len) +{ + + /* Encode vector, two words at a time. */ + do { + be32enc(&dst[0], src[0]); + be32enc(&dst[4], src[1]); + src += 2; + dst += 8; + } while (--len); +} + +/* + * Decode a big-endian length len*8 vector of (uint8_t) into a length + * len*2 vector of (uint32_t). + */ +static void +be32dec_vect(uint32_t * dst, const uint8_t * src, size_t len) +{ + + /* Decode vector, two words at a time. */ + do { + dst[0] = be32dec(&src[0]); + dst[1] = be32dec(&src[4]); + src += 8; + dst += 2; + } while (--len); +} + +/* SHA256 round constants. */ +static const uint32_t Krnd[64] = { + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, + 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, + 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, + 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, + 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, + 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, + 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, + 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, + 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 +}; + +/* Elementary functions used by SHA256 */ +#define Ch(x, y, z) ((x & (y ^ z)) ^ z) +#if 1 /* Explicit caching/reuse of common subexpression between rounds */ +#define Maj(x, y, z) (y ^ ((x_xor_y = x ^ y) & y_xor_z)) +#else /* Let the compiler cache/reuse or not */ +#define Maj(x, y, z) (y ^ ((x ^ y) & (y ^ z))) +#endif +#define SHR(x, n) (x >> n) +#define ROTR(x, n) ((x >> n) | (x << (32 - n))) +#define S0(x) (ROTR(x, 2) ^ ROTR(x, 13) ^ ROTR(x, 22)) +#define S1(x) (ROTR(x, 6) ^ ROTR(x, 11) ^ ROTR(x, 25)) +#define s0(x) (ROTR(x, 7) ^ ROTR(x, 18) ^ SHR(x, 3)) +#define s1(x) (ROTR(x, 17) ^ ROTR(x, 19) ^ SHR(x, 10)) + +/* SHA256 round function */ +#define RND(a, b, c, d, e, f, g, h, k) \ + h += S1(e) + Ch(e, f, g) + k; \ + d += h; \ + h += S0(a) + Maj(a, b, c); \ + y_xor_z = x_xor_y; + +/* Adjusted round function for rotating state */ +#define RNDr(S, W, i, ii) \ + RND(S[(64 - i) % 8], S[(65 - i) % 8], \ + S[(66 - i) % 8], S[(67 - i) % 8], \ + S[(68 - i) % 8], S[(69 - i) % 8], \ + S[(70 - i) % 8], S[(71 - i) % 8], \ + W[i + ii] + Krnd[i + ii]) + +/* Message schedule computation */ +#define MSCH(W, ii, i) \ + W[i + ii + 16] = s1(W[i + ii + 14]) + W[i + ii + 9] + s0(W[i + ii + 1]) + W[i + ii] + +/* + * SHA256 block compression function. The 256-bit state is transformed via + * the 512-bit input block to produce a new state. + */ +static void +SHA256_Transform(uint32_t state[static restrict 8], + const uint8_t block[static restrict 64], + uint32_t W[static restrict 64], uint32_t S[static restrict 8]) +{ + int i; + + /* 1. Prepare the first part of the message schedule W. */ + be32dec_vect(W, block, 8); + + /* 2. Initialize working variables. */ + memcpy(S, state, 32); + + /* 3. Mix. */ + for (i = 0; i < 64; i += 16) { + uint32_t x_xor_y, y_xor_z = S[(65 - i) % 8] ^ S[(66 - i) % 8]; + RNDr(S, W, 0, i); + RNDr(S, W, 1, i); + RNDr(S, W, 2, i); + RNDr(S, W, 3, i); + RNDr(S, W, 4, i); + RNDr(S, W, 5, i); + RNDr(S, W, 6, i); + RNDr(S, W, 7, i); + RNDr(S, W, 8, i); + RNDr(S, W, 9, i); + RNDr(S, W, 10, i); + RNDr(S, W, 11, i); + RNDr(S, W, 12, i); + RNDr(S, W, 13, i); + RNDr(S, W, 14, i); + RNDr(S, W, 15, i); + + if (i == 48) + break; + MSCH(W, 0, i); + MSCH(W, 1, i); + MSCH(W, 2, i); + MSCH(W, 3, i); + MSCH(W, 4, i); + MSCH(W, 5, i); + MSCH(W, 6, i); + MSCH(W, 7, i); + MSCH(W, 8, i); + MSCH(W, 9, i); + MSCH(W, 10, i); + MSCH(W, 11, i); + MSCH(W, 12, i); + MSCH(W, 13, i); + MSCH(W, 14, i); + MSCH(W, 15, i); + } + + /* 4. Mix local working variables into global state. */ + state[0] += S[0]; + state[1] += S[1]; + state[2] += S[2]; + state[3] += S[3]; + state[4] += S[4]; + state[5] += S[5]; + state[6] += S[6]; + state[7] += S[7]; +} + +static const uint8_t PAD[64] = { + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +/* Add padding and terminating bit-count. */ +static void +SHA256_Pad(SHA256_CTX * ctx, uint32_t tmp32[static restrict 72]) +{ + size_t r; + + /* Figure out how many bytes we have buffered. */ + r = (ctx->count >> 3) & 0x3f; + + /* Pad to 56 mod 64, transforming if we finish a block en route. */ + if (r < 56) { + /* Pad to 56 mod 64. */ + memcpy(&ctx->buf[r], PAD, 56 - r); + } else { + /* Finish the current block and mix. */ + memcpy(&ctx->buf[r], PAD, 64 - r); + SHA256_Transform(ctx->state, ctx->buf, &tmp32[0], &tmp32[64]); + + /* The start of the final block is all zeroes. */ + memset(&ctx->buf[0], 0, 56); + } + + /* Add the terminating bit-count. */ + be64enc(&ctx->buf[56], ctx->count); + + /* Mix in the final block. */ + SHA256_Transform(ctx->state, ctx->buf, &tmp32[0], &tmp32[64]); +} + +/* Magic initialization constants. */ +static const uint32_t initial_state[8] = { + 0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, + 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19 +}; + +/** + * SHA256_Init(ctx): + * Initialize the SHA256 context ${ctx}. + */ +void +SHA256_Init(SHA256_CTX * ctx) +{ + + /* Zero bits processed so far. */ + ctx->count = 0; + + /* Initialize state. */ + memcpy(ctx->state, initial_state, sizeof(initial_state)); +} + +/** + * SHA256_Update(ctx, in, len): + * Input ${len} bytes from ${in} into the SHA256 context ${ctx}. + */ +static void +_SHA256_Update(SHA256_CTX * ctx, const void * in, size_t len, + uint32_t tmp32[static restrict 72]) +{ + uint32_t r; + const uint8_t * src = in; + + /* Return immediately if we have nothing to do. */ + if (len == 0) + return; + + /* Number of bytes left in the buffer from previous updates. */ + r = (ctx->count >> 3) & 0x3f; + + /* Update number of bits. */ + ctx->count += (uint64_t)(len) << 3; + + /* Handle the case where we don't need to perform any transforms. */ + if (len < 64 - r) { + memcpy(&ctx->buf[r], src, len); + return; + } + + /* Finish the current block. */ + memcpy(&ctx->buf[r], src, 64 - r); + SHA256_Transform(ctx->state, ctx->buf, &tmp32[0], &tmp32[64]); + src += 64 - r; + len -= 64 - r; + + /* Perform complete blocks. */ + while (len >= 64) { + SHA256_Transform(ctx->state, src, &tmp32[0], &tmp32[64]); + src += 64; + len -= 64; + } + + /* Copy left over data into buffer. */ + memcpy(ctx->buf, src, len); +} + +/* Wrapper function for intermediate-values sanitization. */ +void +SHA256_Update(SHA256_CTX * ctx, const void * in, size_t len) +{ + uint32_t tmp32[72]; + + /* Call the real function. */ + _SHA256_Update(ctx, in, len, tmp32); + + /* Clean the stack. */ + insecure_memzero(tmp32, 288); +} + +/** + * SHA256_Final(digest, ctx): + * Output the SHA256 hash of the data input to the context ${ctx} into the + * buffer ${digest}. + */ +static void +_SHA256_Final(uint8_t digest[32], SHA256_CTX * ctx, + uint32_t tmp32[static restrict 72]) +{ + + /* Add padding. */ + SHA256_Pad(ctx, tmp32); + + /* Write the hash. */ + be32enc_vect(digest, ctx->state, 4); +} + +/* Wrapper function for intermediate-values sanitization. */ +void +SHA256_Final(uint8_t digest[32], SHA256_CTX * ctx) +{ + uint32_t tmp32[72]; + + /* Call the real function. */ + _SHA256_Final(digest, ctx, tmp32); + + /* Clear the context state. */ + insecure_memzero(ctx, sizeof(SHA256_CTX)); + + /* Clean the stack. */ + insecure_memzero(tmp32, 288); +} + +/** + * SHA256_Buf(in, len, digest): + * Compute the SHA256 hash of ${len} bytes from ${in} and write it to ${digest}. + */ +void +SHA256_Buf(const void * in, size_t len, uint8_t digest[32]) +{ + SHA256_CTX ctx; + uint32_t tmp32[72]; + + SHA256_Init(&ctx); + _SHA256_Update(&ctx, in, len, tmp32); + _SHA256_Final(digest, &ctx, tmp32); + + /* Clean the stack. */ + insecure_memzero(&ctx, sizeof(SHA256_CTX)); + insecure_memzero(tmp32, 288); +} + +/** + * HMAC_SHA256_Init(ctx, K, Klen): + * Initialize the HMAC-SHA256 context ${ctx} with ${Klen} bytes of key from + * ${K}. + */ +static void +_HMAC_SHA256_Init(HMAC_SHA256_CTX * ctx, const void * _K, size_t Klen, + uint32_t tmp32[static restrict 72], uint8_t pad[static restrict 64], + uint8_t khash[static restrict 32]) +{ + const uint8_t * K = _K; + size_t i; + + /* If Klen > 64, the key is really SHA256(K). */ + if (Klen > 64) { + SHA256_Init(&ctx->ictx); + _SHA256_Update(&ctx->ictx, K, Klen, tmp32); + _SHA256_Final(khash, &ctx->ictx, tmp32); + K = khash; + Klen = 32; + } + + /* Inner SHA256 operation is SHA256(K xor [block of 0x36] || data). */ + SHA256_Init(&ctx->ictx); + memset(pad, 0x36, 64); + for (i = 0; i < Klen; i++) + pad[i] ^= K[i]; + _SHA256_Update(&ctx->ictx, pad, 64, tmp32); + + /* Outer SHA256 operation is SHA256(K xor [block of 0x5c] || hash). */ + SHA256_Init(&ctx->octx); + memset(pad, 0x5c, 64); + for (i = 0; i < Klen; i++) + pad[i] ^= K[i]; + _SHA256_Update(&ctx->octx, pad, 64, tmp32); +} + +/* Wrapper function for intermediate-values sanitization. */ +void +HMAC_SHA256_Init(HMAC_SHA256_CTX * ctx, const void * _K, size_t Klen) +{ + uint32_t tmp32[72]; + uint8_t pad[64]; + uint8_t khash[32]; + + /* Call the real function. */ + _HMAC_SHA256_Init(ctx, _K, Klen, tmp32, pad, khash); + + /* Clean the stack. */ + insecure_memzero(tmp32, 288); + insecure_memzero(khash, 32); + insecure_memzero(pad, 64); +} + +/** + * HMAC_SHA256_Update(ctx, in, len): + * Input ${len} bytes from ${in} into the HMAC-SHA256 context ${ctx}. + */ +static void +_HMAC_SHA256_Update(HMAC_SHA256_CTX * ctx, const void * in, size_t len, + uint32_t tmp32[static restrict 72]) +{ + + /* Feed data to the inner SHA256 operation. */ + _SHA256_Update(&ctx->ictx, in, len, tmp32); +} + +/* Wrapper function for intermediate-values sanitization. */ +void +HMAC_SHA256_Update(HMAC_SHA256_CTX * ctx, const void * in, size_t len) +{ + uint32_t tmp32[72]; + + /* Call the real function. */ + _HMAC_SHA256_Update(ctx, in, len, tmp32); + + /* Clean the stack. */ + insecure_memzero(tmp32, 288); +} + +/** + * HMAC_SHA256_Final(digest, ctx): + * Output the HMAC-SHA256 of the data input to the context ${ctx} into the + * buffer ${digest}. + */ +static void +_HMAC_SHA256_Final(uint8_t digest[32], HMAC_SHA256_CTX * ctx, + uint32_t tmp32[static restrict 72], uint8_t ihash[static restrict 32]) +{ + + /* Finish the inner SHA256 operation. */ + _SHA256_Final(ihash, &ctx->ictx, tmp32); + + /* Feed the inner hash to the outer SHA256 operation. */ + _SHA256_Update(&ctx->octx, ihash, 32, tmp32); + + /* Finish the outer SHA256 operation. */ + _SHA256_Final(digest, &ctx->octx, tmp32); +} + +/* Wrapper function for intermediate-values sanitization. */ +void +HMAC_SHA256_Final(uint8_t digest[32], HMAC_SHA256_CTX * ctx) +{ + uint32_t tmp32[72]; + uint8_t ihash[32]; + + /* Call the real function. */ + _HMAC_SHA256_Final(digest, ctx, tmp32, ihash); + + /* Clean the stack. */ + insecure_memzero(tmp32, 288); + insecure_memzero(ihash, 32); +} + +/** + * HMAC_SHA256_Buf(K, Klen, in, len, digest): + * Compute the HMAC-SHA256 of ${len} bytes from ${in} using the key ${K} of + * length ${Klen}, and write the result to ${digest}. + */ +void +HMAC_SHA256_Buf(const void * K, size_t Klen, const void * in, size_t len, + uint8_t digest[32]) +{ + HMAC_SHA256_CTX ctx; + uint32_t tmp32[72]; + uint8_t tmp8[96]; + + _HMAC_SHA256_Init(&ctx, K, Klen, tmp32, &tmp8[0], &tmp8[64]); + _HMAC_SHA256_Update(&ctx, in, len, tmp32); + _HMAC_SHA256_Final(digest, &ctx, tmp32, &tmp8[0]); + + /* Clean the stack. */ + insecure_memzero(&ctx, sizeof(HMAC_SHA256_CTX)); + insecure_memzero(tmp32, 288); + insecure_memzero(tmp8, 96); +} + +/* Add padding and terminating bit-count, but don't invoke Transform yet. */ +static int +SHA256_Pad_Almost(SHA256_CTX * ctx, uint8_t len[static restrict 8], + uint32_t tmp32[static restrict 72]) +{ + uint32_t r; + + r = (ctx->count >> 3) & 0x3f; + if (r >= 56) + return -1; + + /* + * Convert length to a vector of bytes -- we do this now rather + * than later because the length will change after we pad. + */ + be64enc(len, ctx->count); + + /* Add 1--56 bytes so that the resulting length is 56 mod 64. */ + _SHA256_Update(ctx, PAD, 56 - r, tmp32); + + /* Add the terminating bit-count. */ + ctx->buf[63] = len[7]; + _SHA256_Update(ctx, len, 7, tmp32); + + return 0; +} + +/** + * PBKDF2_SHA256(passwd, passwdlen, salt, saltlen, c, buf, dkLen): + * Compute PBKDF2(passwd, salt, c, dkLen) using HMAC-SHA256 as the PRF, and + * write the output to buf. The value dkLen must be at most 32 * (2^32 - 1). + */ +void +PBKDF2_SHA256(const uint8_t * passwd, size_t passwdlen, const uint8_t * salt, + size_t saltlen, uint64_t c, uint8_t * buf, size_t dkLen) +{ + HMAC_SHA256_CTX Phctx, PShctx, hctx; + uint32_t tmp32[72]; + union { + uint8_t tmp8[96]; + uint32_t state[8]; + } u; + size_t i; + uint8_t ivec[4]; + uint8_t U[32]; + uint8_t T[32]; + uint64_t j; + int k; + size_t clen; + + /* Sanity-check. */ + assert(dkLen <= 32 * (size_t)(UINT32_MAX)); + + if (c == 1 && (dkLen & 31) == 0 && (saltlen & 63) <= 51) { + uint32_t oldcount; + uint8_t * ivecp; + + /* Compute HMAC state after processing P and S. */ + _HMAC_SHA256_Init(&hctx, passwd, passwdlen, + tmp32, &u.tmp8[0], &u.tmp8[64]); + _HMAC_SHA256_Update(&hctx, salt, saltlen, tmp32); + + /* Prepare ictx padding. */ + oldcount = hctx.ictx.count & (0x3f << 3); + _HMAC_SHA256_Update(&hctx, "\0\0\0", 4, tmp32); + if ((hctx.ictx.count & (0x3f << 3)) < oldcount || + SHA256_Pad_Almost(&hctx.ictx, u.tmp8, tmp32)) + goto generic; /* Can't happen due to saltlen check */ + ivecp = hctx.ictx.buf + (oldcount >> 3); + + /* Prepare octx padding. */ + hctx.octx.count += 32 << 3; + SHA256_Pad_Almost(&hctx.octx, u.tmp8, tmp32); + + /* Iterate through the blocks. */ + for (i = 0; i * 32 < dkLen; i++) { + /* Generate INT(i + 1). */ + be32enc(ivecp, (uint32_t)(i + 1)); + + /* Compute U_1 = PRF(P, S || INT(i)). */ + memcpy(u.state, hctx.ictx.state, sizeof(u.state)); + SHA256_Transform(u.state, hctx.ictx.buf, + &tmp32[0], &tmp32[64]); + be32enc_vect(hctx.octx.buf, u.state, 4); + memcpy(u.state, hctx.octx.state, sizeof(u.state)); + SHA256_Transform(u.state, hctx.octx.buf, + &tmp32[0], &tmp32[64]); + be32enc_vect(&buf[i * 32], u.state, 4); + } + + goto cleanup; + } + +generic: + /* Compute HMAC state after processing P. */ + _HMAC_SHA256_Init(&Phctx, passwd, passwdlen, + tmp32, &u.tmp8[0], &u.tmp8[64]); + + /* Compute HMAC state after processing P and S. */ + memcpy(&PShctx, &Phctx, sizeof(HMAC_SHA256_CTX)); + _HMAC_SHA256_Update(&PShctx, salt, saltlen, tmp32); + + /* Iterate through the blocks. */ + for (i = 0; i * 32 < dkLen; i++) { + /* Generate INT(i + 1). */ + be32enc(ivec, (uint32_t)(i + 1)); + + /* Compute U_1 = PRF(P, S || INT(i)). */ + memcpy(&hctx, &PShctx, sizeof(HMAC_SHA256_CTX)); + _HMAC_SHA256_Update(&hctx, ivec, 4, tmp32); + _HMAC_SHA256_Final(T, &hctx, tmp32, u.tmp8); + + if (c > 1) { + /* T_i = U_1 ... */ + memcpy(U, T, 32); + + for (j = 2; j <= c; j++) { + /* Compute U_j. */ + memcpy(&hctx, &Phctx, sizeof(HMAC_SHA256_CTX)); + _HMAC_SHA256_Update(&hctx, U, 32, tmp32); + _HMAC_SHA256_Final(U, &hctx, tmp32, u.tmp8); + + /* ... xor U_j ... */ + for (k = 0; k < 32; k++) + T[k] ^= U[k]; + } + } + + /* Copy as many bytes as necessary into buf. */ + clen = dkLen - i * 32; + if (clen > 32) + clen = 32; + memcpy(&buf[i * 32], T, clen); + } + + /* Clean the stack. */ + insecure_memzero(&Phctx, sizeof(HMAC_SHA256_CTX)); + insecure_memzero(&PShctx, sizeof(HMAC_SHA256_CTX)); + insecure_memzero(U, 32); + insecure_memzero(T, 32); + +cleanup: + insecure_memzero(&hctx, sizeof(HMAC_SHA256_CTX)); + insecure_memzero(tmp32, 288); + insecure_memzero(&u, sizeof(u)); +} diff --git a/deps/yescrypt-master/sha256.h b/deps/yescrypt-master/sha256.h new file mode 100644 index 000000000..6210502ff --- /dev/null +++ b/deps/yescrypt-master/sha256.h @@ -0,0 +1,129 @@ +/*- + * Copyright 2005-2016 Colin Percival + * All rights reserved. + * + * 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 _SHA256_H_ +#define _SHA256_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Use #defines in order to avoid namespace collisions with anyone else's + * SHA256 code (e.g., the code in OpenSSL). + */ +#define SHA256_Init libcperciva_SHA256_Init +#define SHA256_Update libcperciva_SHA256_Update +#define SHA256_Final libcperciva_SHA256_Final +#define SHA256_Buf libcperciva_SHA256_Buf +#define SHA256_CTX libcperciva_SHA256_CTX +#define HMAC_SHA256_Init libcperciva_HMAC_SHA256_Init +#define HMAC_SHA256_Update libcperciva_HMAC_SHA256_Update +#define HMAC_SHA256_Final libcperciva_HMAC_SHA256_Final +#define HMAC_SHA256_Buf libcperciva_HMAC_SHA256_Buf +#define HMAC_SHA256_CTX libcperciva_HMAC_SHA256_CTX + +/* Context structure for SHA256 operations. */ +typedef struct { + uint32_t state[8]; + uint64_t count; + uint8_t buf[64]; +} SHA256_CTX; + +/** + * SHA256_Init(ctx): + * Initialize the SHA256 context ${ctx}. + */ +void SHA256_Init(SHA256_CTX *); + +/** + * SHA256_Update(ctx, in, len): + * Input ${len} bytes from ${in} into the SHA256 context ${ctx}. + */ +void SHA256_Update(SHA256_CTX *, const void *, size_t); + +/** + * SHA256_Final(digest, ctx): + * Output the SHA256 hash of the data input to the context ${ctx} into the + * buffer ${digest}. + */ +void SHA256_Final(uint8_t[32], SHA256_CTX *); + +/** + * SHA256_Buf(in, len, digest): + * Compute the SHA256 hash of ${len} bytes from ${in} and write it to ${digest}. + */ +void SHA256_Buf(const void *, size_t, uint8_t[32]); + +/* Context structure for HMAC-SHA256 operations. */ +typedef struct { + SHA256_CTX ictx; + SHA256_CTX octx; +} HMAC_SHA256_CTX; + +/** + * HMAC_SHA256_Init(ctx, K, Klen): + * Initialize the HMAC-SHA256 context ${ctx} with ${Klen} bytes of key from + * ${K}. + */ +void HMAC_SHA256_Init(HMAC_SHA256_CTX *, const void *, size_t); + +/** + * HMAC_SHA256_Update(ctx, in, len): + * Input ${len} bytes from ${in} into the HMAC-SHA256 context ${ctx}. + */ +void HMAC_SHA256_Update(HMAC_SHA256_CTX *, const void *, size_t); + +/** + * HMAC_SHA256_Final(digest, ctx): + * Output the HMAC-SHA256 of the data input to the context ${ctx} into the + * buffer ${digest}. + */ +void HMAC_SHA256_Final(uint8_t[32], HMAC_SHA256_CTX *); + +/** + * HMAC_SHA256_Buf(K, Klen, in, len, digest): + * Compute the HMAC-SHA256 of ${len} bytes from ${in} using the key ${K} of + * length ${Klen}, and write the result to ${digest}. + */ +void HMAC_SHA256_Buf(const void *, size_t, const void *, size_t, uint8_t[32]); + +/** + * PBKDF2_SHA256(passwd, passwdlen, salt, saltlen, c, buf, dkLen): + * Compute PBKDF2(passwd, salt, c, dkLen) using HMAC-SHA256 as the PRF, and + * write the output to buf. The value dkLen must be at most 32 * (2^32 - 1). + */ +void PBKDF2_SHA256(const uint8_t *, size_t, const uint8_t *, size_t, + uint64_t, uint8_t *, size_t); + +#ifdef __cplusplus +} +#endif + +#endif /* !_SHA256_H_ */ diff --git a/deps/yescrypt-master/sysendian.h b/deps/yescrypt-master/sysendian.h new file mode 100644 index 000000000..c51730d1c --- /dev/null +++ b/deps/yescrypt-master/sysendian.h @@ -0,0 +1,122 @@ +/*- + * Copyright 2007-2014 Colin Percival + * All rights reserved. + * + * 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 _SYSENDIAN_H_ +#define _SYSENDIAN_H_ + +#include + +/* Avoid namespace collisions with BSD . */ +#define be32dec libcperciva_be32dec +#define be32enc libcperciva_be32enc +#define be64enc libcperciva_be64enc +#define le32dec libcperciva_le32dec +#define le32enc libcperciva_le32enc +#define le64dec libcperciva_le64dec +#define le64enc libcperciva_le64enc + +static inline uint32_t +be32dec(const void * pp) +{ + const uint8_t * p = (uint8_t const *)pp; + + return ((uint32_t)(p[3]) + ((uint32_t)(p[2]) << 8) + + ((uint32_t)(p[1]) << 16) + ((uint32_t)(p[0]) << 24)); +} + +static inline void +be32enc(void * pp, uint32_t x) +{ + uint8_t * p = (uint8_t *)pp; + + p[3] = x & 0xff; + p[2] = (x >> 8) & 0xff; + p[1] = (x >> 16) & 0xff; + p[0] = (x >> 24) & 0xff; +} + +static inline void +be64enc(void * pp, uint64_t x) +{ + uint8_t * p = (uint8_t *)pp; + + p[7] = x & 0xff; + p[6] = (x >> 8) & 0xff; + p[5] = (x >> 16) & 0xff; + p[4] = (x >> 24) & 0xff; + p[3] = (x >> 32) & 0xff; + p[2] = (x >> 40) & 0xff; + p[1] = (x >> 48) & 0xff; + p[0] = (x >> 56) & 0xff; +} + +static inline uint32_t +le32dec(const void * pp) +{ + const uint8_t * p = (uint8_t const *)pp; + + return ((uint32_t)(p[0]) + ((uint32_t)(p[1]) << 8) + + ((uint32_t)(p[2]) << 16) + ((uint32_t)(p[3]) << 24)); +} + +static inline void +le32enc(void * pp, uint32_t x) +{ + uint8_t * p = (uint8_t *)pp; + + p[0] = x & 0xff; + p[1] = (x >> 8) & 0xff; + p[2] = (x >> 16) & 0xff; + p[3] = (x >> 24) & 0xff; +} + +static inline uint64_t +le64dec(const void * pp) +{ + const uint8_t * p = (uint8_t const *)pp; + + return ((uint64_t)(p[0]) + ((uint64_t)(p[1]) << 8) + + ((uint64_t)(p[2]) << 16) + ((uint64_t)(p[3]) << 24) + + ((uint64_t)(p[4]) << 32) + ((uint64_t)(p[5]) << 40) + + ((uint64_t)(p[6]) << 48) + ((uint64_t)(p[7]) << 56)); +} + +static inline void +le64enc(void * pp, uint64_t x) +{ + uint8_t * p = (uint8_t *)pp; + + p[0] = x & 0xff; + p[1] = (x >> 8) & 0xff; + p[2] = (x >> 16) & 0xff; + p[3] = (x >> 24) & 0xff; + p[4] = (x >> 32) & 0xff; + p[5] = (x >> 40) & 0xff; + p[6] = (x >> 48) & 0xff; + p[7] = (x >> 56) & 0xff; +} + +#endif /* !_SYSENDIAN_H_ */ diff --git a/deps/yescrypt-master/tests.c b/deps/yescrypt-master/tests.c new file mode 100644 index 000000000..ed342449d --- /dev/null +++ b/deps/yescrypt-master/tests.c @@ -0,0 +1,418 @@ +/*- + * Copyright 2013-2018 Alexander Peslyak + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted. + * + * 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 +#include + +#define YESCRYPT_FLAGS YESCRYPT_DEFAULTS +#if 1 +#define YESCRYPT_P 11 +#define YESCRYPT_PROM 8 +#else +#define YESCRYPT_P 1 +#define YESCRYPT_PROM 1 +#endif + +#undef TEST_PBKDF2_SHA256 +#define TEST_SCRYPT +#define TEST_YESCRYPT_KDF +#define TEST_YESCRYPT_ENCODING +#define TEST_ROM +#define TEST_ROM_PREALLOC + +#ifdef TEST_ROM_PREALLOC +#include /* for malloc() */ +#endif + +#ifdef TEST_PBKDF2_SHA256 +#include + +#include "sha256.h" + +static void print_PBKDF2_SHA256_raw(const char *passwd, size_t passwdlen, + const char *salt, size_t saltlen, uint64_t c, size_t dkLen) +{ + uint8_t dk[64]; + size_t i; + + assert(dkLen <= sizeof(dk)); + + /* XXX This prints the strings truncated at first NUL */ + printf("PBKDF2_SHA256(\"%s\", \"%s\", %llu, %llu) =", + passwd, salt, (unsigned long long)c, (unsigned long long)dkLen); + + PBKDF2_SHA256((const uint8_t *) passwd, passwdlen, + (const uint8_t *) salt, saltlen, c, dk, dkLen); + + for (i = 0; i < dkLen; i++) + printf(" %02x", dk[i]); + puts(""); +} + +static void print_PBKDF2_SHA256(const char *passwd, + const char *salt, uint64_t c, size_t dkLen) +{ + print_PBKDF2_SHA256_raw(passwd, strlen(passwd), salt, strlen(salt), c, + dkLen); +} +#endif + +#if defined(TEST_SCRYPT) || defined(TEST_YESCRYPT_ENCODING) +#include "yescrypt.h" +#endif + +#ifdef TEST_SCRYPT +static void print_scrypt(const char *passwd, const char *salt, + uint64_t N, uint32_t r, uint32_t p) +{ + uint8_t dk[64]; + size_t i; + + printf("scrypt(\"%s\", \"%s\", %llu, %u, %u) =", + passwd, salt, (unsigned long long)N, r, p); + + if (crypto_scrypt((const uint8_t *) passwd, strlen(passwd), + (const uint8_t *) salt, strlen(salt), N, r, p, dk, sizeof(dk))) { + puts(" FAILED"); + return; + } + + for (i = 0; i < sizeof(dk); i++) + printf(" %02x", dk[i]); + puts(""); +} +#endif + +#ifdef TEST_YESCRYPT_KDF +static void print_yescrypt(const char *passwd, const char *salt, + yescrypt_flags_t flags, + uint64_t N, uint32_t r, uint32_t p, uint32_t t, uint32_t g, + uint32_t dklen) +{ + yescrypt_local_t local; + yescrypt_params_t params = {flags, N, r, p, t, g, 0}; + uint8_t dk[64]; + uint32_t i; + +#if 1 + /* Don't test hash upgrades */ + if (g) + return; +#endif + + if (dklen > sizeof(dk) || yescrypt_init_local(&local)) { + puts("FAILED"); + return; + } + + printf("yescrypt(\"%s\", \"%s\", %u, %llu, %u, %u, %u, %u) =", + passwd, salt, flags, (unsigned long long)N, r, p, t, g); + + if (yescrypt_kdf(NULL, &local, + (const uint8_t *) passwd, strlen(passwd), + (const uint8_t *) salt, strlen(salt), ¶ms, dk, dklen)) { + yescrypt_free_local(&local); + puts(" FAILED"); + return; + } + + yescrypt_free_local(&local); + + for (i = 0; i < dklen; i++) + printf(" %02x", dk[i]); + puts(""); +} +#endif + +int main(void) +{ + int i; + + setvbuf(stdout, NULL, _IOLBF, 0); + +#ifdef TEST_PBKDF2_SHA256 + print_PBKDF2_SHA256("password", "salt", 1, 20); + print_PBKDF2_SHA256("password", "salt", 2, 20); + print_PBKDF2_SHA256("password", "salt", 4096, 20); + print_PBKDF2_SHA256("password", "salt", 16777216, 20); + print_PBKDF2_SHA256("passwordPASSWORDpassword", + "saltSALTsaltSALTsaltSALTsaltSALTsalt", 4096, 25); + print_PBKDF2_SHA256_raw("pass\0word", 9, "sa\0lt", 5, 4096, 16); +#if 0 + print_PBKDF2_SHA256("password", "salt", 1, 32); + print_PBKDF2_SHA256("password", "salt", 2, 32); + print_PBKDF2_SHA256("password", "salt", 4096, 32); + print_PBKDF2_SHA256("password", "salt", 16777216, 32); + print_PBKDF2_SHA256("passwordPASSWORDpassword", + "saltSALTsaltSALTsaltSALTsaltSALTsalt", 4096, 40); + print_PBKDF2_SHA256("password", "salt", 4096, 16); + print_PBKDF2_SHA256("password", "salt", 1, 20); + print_PBKDF2_SHA256("password", "salt", 2, 20); + print_PBKDF2_SHA256("password", "salt", 4096, 20); + print_PBKDF2_SHA256("password", "salt", 16777216, 20); + print_PBKDF2_SHA256("password", "salt", 4096, 25); + print_PBKDF2_SHA256("password", "salt", 4096, 16); +#endif +#endif + +#ifdef TEST_SCRYPT + print_scrypt("", "", 16, 1, 1); + print_scrypt("password", "NaCl", 1024, 8, 16); + print_scrypt("pleaseletmein", "SodiumChloride", 16384, 8, 1); + print_scrypt("pleaseletmein", "SodiumChloride", 1048576, 8, 1); +#endif + +#ifdef TEST_YESCRYPT_KDF + print_yescrypt("", "", 0, 16, 1, 1, 0, 0, 64); + print_yescrypt("", "", 0, 16, 1, 1, 0, 0, 8); + print_yescrypt("", "", 0, 4, 1, 1, 0, 0, 64); + print_yescrypt("", "", YESCRYPT_WORM, 4, 1, 1, 0, 0, 64); + print_yescrypt("", "", YESCRYPT_WORM, 4, 1, 1, 0, 0, 8); + print_yescrypt("", "", YESCRYPT_WORM, 4, 1, 1, 1, 0, 64); + print_yescrypt("", "", YESCRYPT_WORM, 4, 1, 1, 2, 0, 64); + print_yescrypt("", "", YESCRYPT_WORM, 4, 1, 1, 3, 0, 64); + print_yescrypt("", "", YESCRYPT_WORM, 4, 1, 1, 3, 0, 33); + print_yescrypt("", "", YESCRYPT_WORM, 4, 1, 1, 3, 0, 32); + print_yescrypt("", "", YESCRYPT_WORM, 4, 1, 1, 3, 0, 31); + print_yescrypt("", "", YESCRYPT_WORM, 4, 1, 1, 3, 0, 1); + print_yescrypt("", "", YESCRYPT_DEFAULTS, 4, 1, 1, 0, 0, 64); + print_yescrypt("", "", YESCRYPT_DEFAULTS, 4, 1, 1, 0, 0, 4); + print_yescrypt("", "", YESCRYPT_DEFAULTS, 4, 1, 1, 1, 0, 64); + print_yescrypt("", "", YESCRYPT_DEFAULTS, 4, 1, 1, 1, 0, 33); + print_yescrypt("", "", YESCRYPT_DEFAULTS, 4, 1, 1, 1, 0, 32); + print_yescrypt("", "", YESCRYPT_DEFAULTS, 4, 1, 1, 1, 0, 31); + print_yescrypt("", "", YESCRYPT_DEFAULTS, 4, 1, 1, 1, 0, 1); + for (i = 0; i <= 6; i++) + print_yescrypt("p", "s", YESCRYPT_DEFAULTS, 16, 8, 1, i + 10, i, 40); + for (i = 0; i <= 6; i++) + print_yescrypt("p", "s", YESCRYPT_WORM, 16, 8, 1, i + 10, i, 40); + for (i = 0; i <= 6; i++) + print_yescrypt("p", "s", YESCRYPT_DEFAULTS, 16, 8, 1, 0, i, 40); + for (i = 0; i <= 6; i++) + print_yescrypt("p", "s", YESCRYPT_WORM, 16, 8, 1, 0, i, 40); + for (i = 0; i <= 2; i++) + print_yescrypt("p", "s", YESCRYPT_DEFAULTS, 16, 8, 1, 0, i, 32); + for (i = 0; i <= 2; i++) + print_yescrypt("p", "s", YESCRYPT_DEFAULTS, 16, 8, 1, 0, i, 8); +#endif + +#ifdef TEST_YESCRYPT_ENCODING + { + uint8_t *setting; + yescrypt_binary_t key = {.uc={ + 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, + 17,18,19,20,21,22,23,24,25,26,27,28,255,128,64,32}}; + + for (i = 0; i < 18; i++) { + uint32_t N_log2 = (i < 14) ? (16 - i) : 2; + uint32_t r = (i < 8) ? (8 - i) : (1 + (i & 1)); + uint32_t p = (i & 1) ? 1 : YESCRYPT_P; + yescrypt_flags_t flags = YESCRYPT_DEFAULTS; + if ((int)p - (i / 2) > 1) + p -= i / 2; + if (i & 2) { + flags = YESCRYPT_WORM; + } else { + while ((1ULL << N_log2) / p <= 3) + N_log2++; + } + yescrypt_params_t params = + {flags, (uint64_t)1 << N_log2, r, p, 0, 0, 0}; + setting = yescrypt_encode_params(¶ms, + (const uint8_t *)"WZaPV7LSUEKMo34.", 16 - (i & 15)); + if (i == 0) + printf("'%s'\n", (char *)setting); + if (!setting) + printf("%d yescrypt_encode_params() = NULL\n", i); + if (setting) { + uint8_t *hash = yescrypt( + (const uint8_t *)"pleaseletmein", setting); + printf("Plaintext: '%s'\n", (char *)hash); + hash = (uint8_t *)strdup((char *)hash); + if (!hash || strcmp( + (char *)hash, (char *)yescrypt( + (const uint8_t *)"pleaseletmein", hash))) + puts("Validation FAILED"); + uint8_t *orig = (uint8_t *)strdup((char *)hash); + if (!yescrypt_reencrypt(hash, NULL, &key)) + printf("%d yescrypt_reencrypt() = NULL\n", i); + printf("Encrypted: '%s'\n", (char *)hash); + yescrypt_local_t local; + if (yescrypt_init_local(&local)) { + puts("yescrypt_init_local() FAILED"); + return 1; + } + uint8_t buf[128]; + if (strcmp((char *)hash, (char *)yescrypt_r( + NULL, &local, + (const uint8_t *)"pleaseletmein", 13, + hash, &key, buf, sizeof(buf)))) + puts("Validation of encrypted FAILED"); + if (!strcmp((char *)hash, (char *)yescrypt_r( + NULL, &local, + (const uint8_t *)"pleaseletmein", 13, + hash, NULL, buf, sizeof(buf)))) + puts("Validation of encrypted " + "unexpectedly succeeded"); + if (!strcmp((char *)orig, (char *)yescrypt_r( + NULL, &local, + (const uint8_t *)"pleaseletmein", 13, + orig, &key, buf, sizeof(buf)))) + puts("Validation of unencrypted " + "unexpectedly succeeded"); + yescrypt_free_local(&local); + if (!yescrypt_reencrypt(hash, &key, NULL)) + printf("%d yescrypt_reencrypt() = NULL\n", i); + if (strcmp((char *)hash, (char *)orig)) + puts("Decryption FAILED"); + free(orig); + free(hash); + } + } + + printf("'%s'\n", (char *)yescrypt( + (const uint8_t *)"pleaseletmein", + (const uint8_t *)"$7$C6..../....SodiumChloride")); + + printf("'%s'\n", (char *)yescrypt( + (const uint8_t *)"pleaseletmein", + (const uint8_t *)"$7$06..../....SodiumChloride")); + +#ifdef TEST_ROM + uint64_t rom_bytes = 256 * (1024ULL*1024); + uint64_t ram_bytes = 2 * (1024ULL*1024); + uint32_t r; + uint64_t NROM_log2, N_log2; + yescrypt_shared_t shared; + yescrypt_local_t local; + + NROM_log2 = 0; + while (((rom_bytes >> NROM_log2) & 0xff) == 0) + NROM_log2++; + r = rom_bytes >> (7 + NROM_log2); + while (r < 5 && NROM_log2 > 0) { + r <<= 1; + NROM_log2--; + } + rom_bytes = (uint64_t)r << (7 + NROM_log2); + + N_log2 = 0; + while (((uint64_t)r << (7 + N_log2)) < ram_bytes) + N_log2++; + ram_bytes = (uint64_t)r << (7 + N_log2); + + printf("r=%u N=2^%u NROM=2^%u\n", r, + (unsigned int)N_log2, (unsigned int)NROM_log2); + + printf("Will use %.2f KiB ROM\n", rom_bytes / 1024.0); + printf(" %.2f KiB RAM\n", ram_bytes / 1024.0); + + printf("Initializing ROM ..."); + fflush(stdout); + yescrypt_params_t rom_params = { YESCRYPT_DEFAULTS, + 0, r, YESCRYPT_PROM, 0, 0, (uint64_t)1 << NROM_log2 }; + if (yescrypt_init_shared(&shared, + (const uint8_t *)"local param", 12, &rom_params)) { + puts(" FAILED"); + return 1; + } + yescrypt_binary_t *digest = yescrypt_digest_shared(&shared); + printf(" DONE (%02x%02x%02x%02x)\n", + digest->uc[0], digest->uc[1], digest->uc[2], digest->uc[3]); + + if (yescrypt_init_local(&local)) { + puts("FAILED"); + return 1; + } + + yescrypt_params_t params = rom_params; + params.flags = YESCRYPT_FLAGS; + params.N = (uint64_t)1 << N_log2; + params.p = YESCRYPT_P; + setting = yescrypt_encode_params(¶ms, + (const uint8_t *)"WZaPV7LSUEKMo34.", 16); + printf("'%s'\n", (char *)setting); + + uint8_t hash[128]; + + printf("'%s'\n", (char *)yescrypt_r(&shared, &local, + (const uint8_t *)"pleaseletmein", 13, setting, NULL, + hash, sizeof(hash))); + +#ifdef TEST_ROM_PREALLOC + yescrypt_free_shared(&shared); + + shared.aligned_size = ((uint64_t)1 << NROM_log2) * 128 * r; + shared.base_size = shared.aligned_size + 63; + uint8_t *where = shared.base = malloc(shared.base_size); + where += 63; + where = shared.aligned = where - ((uintptr_t)where & 63); + + printf("Initializing ROM in preallocated memory ..."); + fflush(stdout); + rom_params.flags |= YESCRYPT_SHARED_PREALLOCATED; + if (yescrypt_init_shared(&shared, + (const uint8_t *)"local param", 12, &rom_params)) { + puts(" FAILED"); + return 1; + } + digest = yescrypt_digest_shared(&shared); + printf(" DONE (%02x%02x%02x%02x)\n", + digest->uc[0], digest->uc[1], digest->uc[2], digest->uc[3]); + + if ((void *)where != shared.aligned) + puts("YESCRYPT_SHARED_PREALLOCATED failed"); +#endif + + printf("'%s'\n", (char *)yescrypt_r(&shared, &local, + (const uint8_t *)"pleaseletmein", 13, setting, NULL, + hash, sizeof(hash))); + + printf("'%s'\n", (char *)yescrypt_r(&shared, &local, + (const uint8_t *)"pleaseletmeIn", 13, setting, NULL, + hash, sizeof(hash))); + + setting = yescrypt_encode_params(¶ms, + (const uint8_t *)"WZaPV7LSUEIMo34.", 16); + + printf("'%s'\n", (char *)yescrypt_r(&shared, &local, + (const uint8_t *)"pleaseletmein", 13, setting, NULL, + hash, sizeof(hash))); + + printf("'%s'\n", (char *)yescrypt_r(&shared, &local, + (const uint8_t *)"pleaseletmeIn", 13, setting, NULL, + hash, sizeof(hash))); + + params.N = 4; + params.NROM *= params.r; + params.r = 1; + params.p = 1; + setting = yescrypt_encode_params(¶ms, + (const uint8_t *)"WZaPV7LSUEKMo34.", 16); + + printf("'%s'\n", (char *)yescrypt_r(&shared, &local, + (const uint8_t *)"pleaseletmein", 13, setting, NULL, + hash, sizeof(hash))); +#endif + } +#endif + + return 0; +} diff --git a/deps/yescrypt-master/userom.c b/deps/yescrypt-master/userom.c new file mode 100644 index 000000000..d8d89d178 --- /dev/null +++ b/deps/yescrypt-master/userom.c @@ -0,0 +1,405 @@ +/*- + * Copyright 2013-2018 Alexander Peslyak + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted. + * + * 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 YESCRYPT_FLAGS YESCRYPT_DEFAULTS +//#define YESCRYPT_FLAGS YESCRYPT_WORM +//#define YESCRYPT_FLAGS 0 + +#define ROM_SHM_KEY 0x7965730a + +//#define DISABLE_ROM +//#define DUMP_LOCAL + +#include +#include /* for atoi() */ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "yescrypt.h" + +#ifdef _OPENMP +#include + +#define NSAVE 1000 + +static uint64_t time_us(void) +{ + struct timespec t; +#ifdef CLOCK_MONOTONIC_RAW + if (clock_gettime(CLOCK_MONOTONIC_RAW, &t)) + return 0; +#else + if (clock_gettime(CLOCK_MONOTONIC, &t)) + return 0; +#endif + return 1 + (uint64_t)t.tv_sec * 1000000 + t.tv_nsec / 1000; +} +#endif + +int main(int argc, const char * const *argv) +{ +#if 0 + uint64_t rom_bytes = 112 * (1024ULL*1024*1024); + uint64_t ram_bytes = 1 * (1024ULL*1024); +#else + uint64_t rom_bytes = 3 * (1024ULL*1024*1024); + uint64_t ram_bytes = 2 * (1024ULL*1024); +#endif + uint32_t r, min_r; + uint64_t NROM_log2, N_log2; + yescrypt_shared_t shared_s; + yescrypt_shared_t *shared = NULL; +#ifndef DISABLE_ROM + int shmid; +#endif + const char *rom_filename = NULL; + int rom_fd; + yescrypt_binary_t key = {.uc={ + 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, + 17,18,19,20,21,22,23,24,25,26,27,28,255,128,64,32}}; + + if (argc > 1) + rom_bytes = atoi(argv[1]) * (1024ULL*1024*1024); + if (argc > 2) + ram_bytes = atoi(argv[2]) * (1024ULL*1024); + if (argc > 3 && rom_bytes) + rom_filename = argv[3]; + + r = 16; + min_r = 9; + if (rom_filename) + min_r = 8 * 64; + + NROM_log2 = 0; + if (rom_bytes) { + while (((rom_bytes >> NROM_log2) & 0xff) == 0) + NROM_log2++; + r = rom_bytes >> (7 + NROM_log2); + while (r < min_r && NROM_log2 > 0) { + r <<= 1; + NROM_log2--; + } + rom_bytes = (uint64_t)r << (7 + NROM_log2); + } + + N_log2 = 0; + while (((uint64_t)r << (7 + N_log2)) < ram_bytes) + N_log2++; + ram_bytes = (uint64_t)r << (7 + N_log2); + + printf("r=%u N=2^%u NROM=2^%u\n", r, + (unsigned int)N_log2, (unsigned int)NROM_log2); + +#ifdef DISABLE_ROM + rom_bytes = 0; +#endif + + printf("Will use %.2f KiB ROM\n", rom_bytes / 1024.0); + printf(" %.2f KiB RAM\n", ram_bytes / 1024.0); + +#ifndef DISABLE_ROM + if (rom_filename) { + rom_fd = open(rom_filename, O_RDONLY); + if (rom_fd < 0) { + perror("open"); + return 1; + } + + int flags = +#ifdef MAP_NOCORE + MAP_NOCORE | +#endif +#ifdef MAP_HUGETLB + MAP_HUGETLB | +#endif + MAP_SHARED; + void *p = mmap(NULL, rom_bytes, PROT_READ, flags, rom_fd, 0); +#ifdef MAP_HUGETLB + if (p == MAP_FAILED) + p = mmap(NULL, rom_bytes, PROT_READ, + flags & ~MAP_HUGETLB, rom_fd, 0); +#endif + if (p == MAP_FAILED) { + perror("mmap"); + close(rom_fd); + return 1; + } + close(rom_fd); + + shared = &shared_s; + shared->base = shared->aligned = p; + shared->aligned_size = rom_bytes; + } else if (rom_bytes) { + shared = &shared_s; + shared->aligned_size = rom_bytes; + shmid = shmget(ROM_SHM_KEY, shared->aligned_size, 0); + if (shmid == -1) { + perror("shmget"); + return 1; + } + + shared->base = shared->aligned = shmat(shmid, NULL, SHM_RDONLY); + if (shared->base == (void *)-1) { + perror("shmat"); + return 1; + } + } +#endif + + { + yescrypt_local_t local; + const uint8_t *setting; + + if (yescrypt_init_local(&local)) { + puts("yescrypt_init_local() FAILED"); + return 1; + } + + yescrypt_params_t params = { + .flags = YESCRYPT_FLAGS, + .N = (uint64_t)1 << N_log2, + .NROM = NROM_log2 ? ((uint64_t)1 << NROM_log2) : 0, + .r = r, + .p = 1 }; + setting = yescrypt_encode_params(¶ms, + (const uint8_t *)"WZaPV7LSUEKMo34.", 16); + + { + uint8_t hash[128]; + if (!yescrypt_r(shared, &local, + (const uint8_t *)"pleaseletmein", 13, setting, NULL, + hash, sizeof(hash))) { + puts("yescrypt_r() FAILED"); + return 1; + } + printf("Plaintext: '%s'\n", (char *)hash); + if (!yescrypt_r(shared, &local, + (const uint8_t *)"pleaseletmein", 13, setting, &key, + hash, sizeof(hash))) { + puts("yescrypt_r() FAILED"); + return 1; + } + printf("Encrypted: '%s'\n", (char *)hash); + } + +#ifdef DUMP_LOCAL +#if 0 + fwrite(local.aligned, local.aligned_size, 1, stderr); +#else + /* Skip B, dump only V */ + if (local.aligned_size >= ram_bytes + 128 * r) + fwrite((char *)local.aligned + 128 * r, ram_bytes, + 1, stderr); +#endif +#endif + + puts("Benchmarking 1 thread ..."); + + clock_t clk_tck = sysconf(_SC_CLK_TCK); + struct tms start_tms, end_tms; + clock_t start = times(&start_tms), end; + unsigned int i, n; + unsigned long long count; +#ifdef _OPENMP + char save[NSAVE][128]; + unsigned int nsave = 0; +#endif + unsigned int seed = start * 1812433253U; + + n = 1; + count = 0; + do { + for (i = 0; i < n; i++) { + unsigned int j = count + i; + char p[32]; + uint8_t hash[128]; + snprintf(p, sizeof(p), "%u", seed + j); +#ifdef _OPENMP + const uint8_t *h = +#endif + yescrypt_r(shared, &local, + (const uint8_t *)p, strlen(p), + setting, &key, hash, sizeof(hash)); +#ifdef _OPENMP + if (j < NSAVE) { + save[j][0] = 0; + strncat(save[j], (char *)h, + sizeof(save[j]) - 1); + nsave = j; + } +#endif + } + count += n; + + end = times(&end_tms); + n <<= 1; + } while (end - start < clk_tck * 2); + + clock_t start_v = start_tms.tms_utime + start_tms.tms_stime + + start_tms.tms_cutime + start_tms.tms_cstime; + clock_t end_v = end_tms.tms_utime + end_tms.tms_stime + + end_tms.tms_cutime + end_tms.tms_cstime; + + printf("%llu c/s real, %llu c/s virtual " + "(%llu hashes in %.2f seconds)\n", + count * clk_tck / (end - start), + count * clk_tck / (end_v - start_v), + count, (double)(end - start) / clk_tck); + +#ifdef _OPENMP + unsigned int nt = omp_get_max_threads(); + + printf("Benchmarking %u thread%s ...\n", + nt, nt == 1 ? "" : "s"); + + typedef struct { + yescrypt_local_t local; + uint64_t min, max, total; + } thread_data_s; + union { + thread_data_s s; + uint8_t cachelines[2][64]; /* avoid false sharing */ + } thread_data[nt]; /* tricky to align this when on stack */ + + unsigned int t; + for (t = 0; t < nt; t++) { + thread_data_s *td = &thread_data[t].s; + if (yescrypt_init_local(&td->local)) { + puts("yescrypt_init_local() FAILED"); + return 1; + } + td->min = ~(uint64_t)0; td->max = 0; td->total = 0; + } + + unsigned long long count1 = count, count_restart = 0; + + if (!geteuid()) { + puts("Running as root, so trying to set SCHED_RR"); +#pragma omp parallel + { + struct sched_param param = { .sched_priority = 1 }; + if (sched_setscheduler(getpid(), SCHED_RR, ¶m)) + perror("sched_setscheduler"); + } + } + + start = times(&start_tms); + + n = count * omp_get_max_threads(); + count = 0; + do { +#pragma omp parallel for default(none) private(i) shared(n, shared, thread_data, setting, seed, count, save, nsave, key) + for (i = 0; i < n; i++) { + unsigned int j = count + i; + char p[32]; + uint8_t hash[128]; + snprintf(p, sizeof(p), "%u", seed + j); + thread_data_s *td = &thread_data[omp_get_thread_num()].s; + uint64_t start1 = time_us(); +#if 1 + const char *h = (const char *)yescrypt_r( + shared, &td->local, + (const uint8_t *)p, strlen(p), + setting, &key, hash, sizeof(hash)); +#else + yescrypt_local_t local; + yescrypt_init_local(&local); + const char *h = (const char *)yescrypt_r( + shared, &local, + (const uint8_t *)p, strlen(p), + setting, &key, hash, sizeof(hash)); + yescrypt_free_local(&local); +#endif + uint64_t end1 = time_us(); + if (end1 < start1) + end1 = start1; + uint64_t diff1 = end1 - start1; + td->total += diff1; + if (diff1 < td->min) + td->min = diff1; + if (diff1 > td->max) + td->max = diff1; + if (j < nsave && strcmp(save[j], h)) { +#pragma omp critical + printf("Mismatch at %u, %s != %s\n", + j, save[j], h); + } + } + + count += n; + if ((count - n) < count1 && count >= count1) { +/* Disregard our repeat of single thread's results (could be partially cached + * by same core, but OTOH other cores not yet warmed up to full clock rate). */ + start = times(&start_tms); + count_restart = count; + for (t = 0; t < nt; t++) { + thread_data_s *td = &thread_data[t].s; + td->min = ~(uint64_t)0; td->max = 0; td->total = 0; + } + } else { + n <<= 1; + } + + end = times(&end_tms); + } while (end - start < clk_tck); + + if (!count_restart) + puts("Didn't reach single-thread's hash count"); + count -= count_restart; + + start_v = start_tms.tms_utime + start_tms.tms_stime + + start_tms.tms_cutime + start_tms.tms_cstime; + end_v = end_tms.tms_utime + end_tms.tms_stime + + end_tms.tms_cutime + end_tms.tms_cstime; + + printf("%llu c/s real, %llu c/s virtual " + "(%llu hashes in %.2f seconds)\n", + count * clk_tck / (end - start), + count * clk_tck / (end_v - start_v), + count, (double)(end - start) / clk_tck); + + uint64_t min = ~(uint64_t)0, max = 0, total = 0; + for (t = 0; t < nt; t++) { + thread_data_s *td = &thread_data[t].s; + total += td->total; + if (td->min < min) + min = td->min; + if (td->max > max) + max = td->max; + } + printf("min %.3f ms, avg %.3f ms, max %.3f ms\n", + min / 1000.0, total / 1000.0 / count, max / 1000.0); +#endif + } + + if (rom_filename && munmap(shared->base, rom_bytes)) { + perror("munmap"); + return 1; + } + + return 0; +} diff --git a/deps/yescrypt-master/yescrypt-common.c b/deps/yescrypt-master/yescrypt-common.c new file mode 100644 index 000000000..ce32b3e52 --- /dev/null +++ b/deps/yescrypt-master/yescrypt-common.c @@ -0,0 +1,703 @@ +/*- + * Copyright 2013-2018 Alexander Peslyak + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted. + * + * 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 +#include + +#include "insecure_memzero.h" +#include "sha256.h" + +#define YESCRYPT_INTERNAL +#include "yescrypt.h" + +#define BYTES2CHARS(bytes) ((((bytes) * 8) + 5) / 6) + +#define HASH_SIZE sizeof(yescrypt_binary_t) /* bytes */ +#define HASH_LEN BYTES2CHARS(HASH_SIZE) /* base-64 chars */ + +/* + * "$y$", up to 8 params of up to 6 chars each, '$', salt + * Alternatively, but that's smaller: + * "$7$", 3 params encoded as 1+5+5 chars, salt + */ +#define PREFIX_LEN (3 + 8 * 6 + 1 + BYTES2CHARS(32)) + +static const char * const itoa64 = + "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + +static const uint8_t atoi64_partial[77] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 64, 64, 64, 64, 64, 64, 64, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 64, 64, 64, 64, 64, 64, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 +}; + +static uint8_t *encode64_uint32(uint8_t *dst, size_t dstlen, + uint32_t src, uint32_t min) +{ + uint32_t start = 0, end = 47, chars = 1, bits = 0; + + if (src < min) + return NULL; + src -= min; + + do { + uint32_t count = (end + 1 - start) << bits; + if (src < count) + break; + if (start >= 63) + return NULL; + start = end + 1; + end = start + (62 - end) / 2; + src -= count; + chars++; + bits += 6; + } while (1); + + if (dstlen <= chars) /* require room for a NUL terminator */ + return NULL; + + *dst++ = itoa64[start + (src >> bits)]; + + while (--chars) { + bits -= 6; + *dst++ = itoa64[(src >> bits) & 0x3f]; + } + + *dst = 0; /* NUL terminate just in case */ + + return dst; +} + +static inline uint32_t atoi64(uint8_t src) +{ + if (src >= '.' && src <= 'z') + return atoi64_partial[src - '.']; + + return 64; +} + +static const uint8_t *decode64_uint32(uint32_t *dst, + const uint8_t *src, uint32_t min) +{ + uint32_t start = 0, end = 47, chars = 1, bits = 0; + uint32_t c; + + c = atoi64(*src++); + if (c > 63) + goto fail; + + *dst = min; + while (c > end) { + *dst += (end + 1 - start) << bits; + start = end + 1; + end = start + (62 - end) / 2; + chars++; + bits += 6; + } + + *dst += (c - start) << bits; + + while (--chars) { + c = atoi64(*src++); + if (c > 63) + goto fail; + bits -= 6; + *dst += c << bits; + } + + return src; + +fail: + *dst = 0; + return NULL; +} + +static uint8_t *encode64_uint32_fixed(uint8_t *dst, size_t dstlen, + uint32_t src, uint32_t srcbits) +{ + uint32_t bits; + + for (bits = 0; bits < srcbits; bits += 6) { + if (dstlen < 2) + return NULL; + *dst++ = itoa64[src & 0x3f]; + dstlen--; + src >>= 6; + } + + if (src || dstlen < 1) + return NULL; + + *dst = 0; /* NUL terminate just in case */ + + return dst; +} + +static uint8_t *encode64(uint8_t *dst, size_t dstlen, + const uint8_t *src, size_t srclen) +{ + size_t i; + + for (i = 0; i < srclen; ) { + uint8_t *dnext; + uint32_t value = 0, bits = 0; + do { + value |= (uint32_t)src[i++] << bits; + bits += 8; + } while (bits < 24 && i < srclen); + dnext = encode64_uint32_fixed(dst, dstlen, value, bits); + if (!dnext) + return NULL; + dstlen -= dnext - dst; + dst = dnext; + } + + if (dstlen < 1) + return NULL; + + *dst = 0; /* NUL terminate just in case */ + + return dst; +} + +static const uint8_t *decode64_uint32_fixed(uint32_t *dst, uint32_t dstbits, + const uint8_t *src) +{ + uint32_t bits; + + *dst = 0; + for (bits = 0; bits < dstbits; bits += 6) { + uint32_t c = atoi64(*src++); + if (c > 63) { + *dst = 0; + return NULL; + } + *dst |= c << bits; + } + + return src; +} + +static const uint8_t *decode64(uint8_t *dst, size_t *dstlen, + const uint8_t *src, size_t srclen) +{ + size_t dstpos = 0; + + while (dstpos <= *dstlen && srclen) { + uint32_t value = 0, bits = 0; + while (srclen--) { + uint32_t c = atoi64(*src); + if (c > 63) { + srclen = 0; + break; + } + src++; + value |= c << bits; + bits += 6; + if (bits >= 24) + break; + } + if (!bits) + break; + if (bits < 12) /* must have at least one full byte */ + goto fail; + while (dstpos++ < *dstlen) { + *dst++ = value; + value >>= 8; + bits -= 8; + if (bits < 8) { /* 2 or 4 */ + if (value) /* must be 0 */ + goto fail; + bits = 0; + break; + } + } + if (bits) + goto fail; + } + + if (!srclen && dstpos <= *dstlen) { + *dstlen = dstpos; + return src; + } + +fail: + *dstlen = 0; + return NULL; +} + +typedef enum { ENC = 1, DEC = -1 } encrypt_dir_t; + +static void memxor(unsigned char *dst, unsigned char *src, size_t size) +{ + while (size--) + *dst++ ^= *src++; +} + +static void encrypt(unsigned char *data, size_t datalen, + const yescrypt_binary_t *key, encrypt_dir_t dir) +{ + SHA256_CTX ctx; + unsigned char f[32 + 4]; + size_t halflen, which; + unsigned char mask, round, target; + + if (!datalen) + return; + if (datalen > 64) + datalen = 64; + + halflen = datalen >> 1; + + which = 0; /* offset to half we are working on (0 or halflen) */ + mask = 0x0f; /* current half's extra nibble mask if datalen is odd */ + + round = 0; + target = 5; /* 6 rounds due to Jacques Patarin's CRYPTO 2004 paper */ + + if (dir == DEC) { + which = halflen; /* even round count, so swap the halves */ + mask ^= 0xff; + + round = target; + target = 0; + } + + f[32] = 0; + f[33] = sizeof(*key); + f[34] = datalen; + + do { + SHA256_Init(&ctx); + f[35] = round; + SHA256_Update(&ctx, &f[32], 4); + SHA256_Update(&ctx, key, sizeof(*key)); + SHA256_Update(&ctx, &data[which], halflen); + if (datalen & 1) { + f[0] = data[datalen - 1] & mask; + SHA256_Update(&ctx, f, 1); + } + SHA256_Final(f, &ctx); + which ^= halflen; + memxor(&data[which], f, halflen); + if (datalen & 1) { + mask ^= 0xff; + data[datalen - 1] ^= f[halflen] & mask; + } + if (round == target) + break; + round += dir; + } while (1); + + /* ctx is presumably zeroized by SHA256_Final() */ + insecure_memzero(f, sizeof(f)); +} + +uint8_t *yescrypt_r(const yescrypt_shared_t *shared, yescrypt_local_t *local, + const uint8_t *passwd, size_t passwdlen, + const uint8_t *setting, + const yescrypt_binary_t *key, + uint8_t *buf, size_t buflen) +{ + unsigned char saltbin[64], hashbin[32]; + const uint8_t *src, *saltstr, *salt; + uint8_t *dst; + size_t need, prefixlen, saltstrlen, saltlen; + yescrypt_params_t params = { .p = 1 }; + + if (setting[0] != '$' || + (setting[1] != '7' && setting[1] != 'y') || + setting[2] != '$') + return NULL; + src = setting + 3; + + if (setting[1] == '7') { + uint32_t N_log2 = atoi64(*src++); + if (N_log2 < 1 || N_log2 > 63) + return NULL; + params.N = (uint64_t)1 << N_log2; + + src = decode64_uint32_fixed(¶ms.r, 30, src); + if (!src) + return NULL; + + src = decode64_uint32_fixed(¶ms.p, 30, src); + if (!src) + return NULL; + + if (key) + return NULL; + } else { + uint32_t flavor, N_log2; + + src = decode64_uint32(&flavor, src, 0); + if (!src) + return NULL; + + if (flavor < YESCRYPT_RW) { + params.flags = flavor; + } else if (flavor <= YESCRYPT_RW + (YESCRYPT_RW_FLAVOR_MASK >> 2)) { + params.flags = YESCRYPT_RW + ((flavor - YESCRYPT_RW) << 2); + } else { + return NULL; + } + + src = decode64_uint32(&N_log2, src, 1); + if (!src || N_log2 > 63) + return NULL; + params.N = (uint64_t)1 << N_log2; + + src = decode64_uint32(¶ms.r, src, 1); + if (!src) + return NULL; + + if (*src != '$') { + uint32_t have; + + src = decode64_uint32(&have, src, 1); + if (!src) + return NULL; + + if (have & 1) { + src = decode64_uint32(¶ms.p, src, 2); + if (!src) + return NULL; + } + + if (have & 2) { + src = decode64_uint32(¶ms.t, src, 1); + if (!src) + return NULL; + } + + if (have & 4) { + src = decode64_uint32(¶ms.g, src, 1); + if (!src) + return NULL; + } + + if (have & 8) { + uint32_t NROM_log2; + src = decode64_uint32(&NROM_log2, src, 1); + if (!src || NROM_log2 > 63) + return NULL; + params.NROM = (uint64_t)1 << NROM_log2; + } + } + + if (*src++ != '$') + return NULL; + } + + prefixlen = src - setting; + + saltstr = src; + src = (uint8_t *)strrchr((char *)saltstr, '$'); + if (src) + saltstrlen = src - saltstr; + else + saltstrlen = strlen((char *)saltstr); + + if (setting[1] == '7') { + salt = saltstr; + saltlen = saltstrlen; + } else { + const uint8_t *saltend; + + saltlen = sizeof(saltbin); + saltend = decode64(saltbin, &saltlen, saltstr, saltstrlen); + + if (!saltend || (size_t)(saltend - saltstr) != saltstrlen) + goto fail; + + salt = saltbin; + + if (key) + encrypt(saltbin, saltlen, key, ENC); + } + + need = prefixlen + saltstrlen + 1 + HASH_LEN + 1; + if (need > buflen || need < saltstrlen) + goto fail; + + if (yescrypt_kdf(shared, local, passwd, passwdlen, salt, saltlen, + ¶ms, hashbin, sizeof(hashbin))) + goto fail; + + if (key) { + insecure_memzero(saltbin, sizeof(saltbin)); + encrypt(hashbin, sizeof(hashbin), key, ENC); + } + + dst = buf; + memcpy(dst, setting, prefixlen + saltstrlen); + dst += prefixlen + saltstrlen; + *dst++ = '$'; + + dst = encode64(dst, buflen - (dst - buf), hashbin, sizeof(hashbin)); + insecure_memzero(hashbin, sizeof(hashbin)); + if (!dst || dst >= buf + buflen) + return NULL; + + *dst = 0; /* NUL termination */ + + return buf; + +fail: + insecure_memzero(saltbin, sizeof(saltbin)); + insecure_memzero(hashbin, sizeof(hashbin)); + return NULL; +} + +uint8_t *yescrypt(const uint8_t *passwd, const uint8_t *setting) +{ + /* prefix, '$', hash, NUL */ + static uint8_t buf[PREFIX_LEN + 1 + HASH_LEN + 1]; + yescrypt_local_t local; + uint8_t *retval; + + if (yescrypt_init_local(&local)) + return NULL; + retval = yescrypt_r(NULL, &local, + passwd, strlen((char *)passwd), setting, NULL, buf, sizeof(buf)); + if (yescrypt_free_local(&local)) + return NULL; + return retval; +} + +uint8_t *yescrypt_reencrypt(uint8_t *hash, + const yescrypt_binary_t *from_key, + const yescrypt_binary_t *to_key) +{ + uint8_t *retval = NULL, *saltstart, *hashstart; + const uint8_t *hashend; + unsigned char saltbin[64], hashbin[32]; + size_t saltstrlen, saltlen = 0, hashlen; + + if (strncmp((char *)hash, "$y$", 3)) + return NULL; + + saltstart = NULL; + hashstart = (uint8_t *)strrchr((char *)hash, '$'); + if (hashstart) { + if (hashstart > (uint8_t *)hash) { + saltstart = hashstart - 1; + while (*saltstart != '$' && saltstart > hash) + saltstart--; + if (*saltstart == '$') + saltstart++; + } + hashstart++; + } else { + hashstart = hash; + } + saltstrlen = saltstart ? (hashstart - 1 - saltstart) : 0; + if (saltstrlen > BYTES2CHARS(64) || + strlen((char *)hashstart) != HASH_LEN) + return NULL; + + if (saltstrlen) { + const uint8_t *saltend; + saltlen = sizeof(saltbin); + saltend = decode64(saltbin, &saltlen, saltstart, saltstrlen); + if (!saltend || *saltend != '$' || saltlen < 1 || saltlen > 64) + goto out; + + if (from_key) + encrypt(saltbin, saltlen, from_key, ENC); + if (to_key) + encrypt(saltbin, saltlen, to_key, DEC); + } + + hashlen = sizeof(hashbin); + hashend = decode64(hashbin, &hashlen, hashstart, HASH_LEN); + if (!hashend || *hashend || hashlen != sizeof(hashbin)) + goto out; + + if (from_key) + encrypt(hashbin, hashlen, from_key, DEC); + if (to_key) + encrypt(hashbin, hashlen, to_key, ENC); + + if (saltstrlen) { + if (!encode64(saltstart, saltstrlen + 1, saltbin, saltlen)) + goto out; /* can't happen */ + *(saltstart + saltstrlen) = '$'; + } + + if (!encode64(hashstart, HASH_LEN + 1, hashbin, hashlen)) + goto out; /* can't happen */ + + retval = hash; + +out: + insecure_memzero(saltbin, sizeof(saltbin)); + insecure_memzero(hashbin, sizeof(hashbin)); + + return retval; +} + +static uint32_t N2log2(uint64_t N) +{ + uint32_t N_log2; + + if (N < 2) + return 0; + + N_log2 = 2; + while (N >> N_log2 != 0) + N_log2++; + N_log2--; + + if (N >> N_log2 != 1) + return 0; + + return N_log2; +} + +uint8_t *yescrypt_encode_params_r(const yescrypt_params_t *params, + const uint8_t *src, size_t srclen, + uint8_t *buf, size_t buflen) +{ + uint32_t flavor, N_log2, NROM_log2, have; + uint8_t *dst; + + if (srclen > SIZE_MAX / 16) + return NULL; + + if (params->flags < YESCRYPT_RW) { + flavor = params->flags; + } else if ((params->flags & YESCRYPT_MODE_MASK) == YESCRYPT_RW && + params->flags <= (YESCRYPT_RW | YESCRYPT_RW_FLAVOR_MASK)) { + flavor = YESCRYPT_RW + (params->flags >> 2); + } else { + return NULL; + } + + N_log2 = N2log2(params->N); + if (!N_log2) + return NULL; + + NROM_log2 = N2log2(params->NROM); + if (params->NROM && !NROM_log2) + return NULL; + + if ((uint64_t)params->r * (uint64_t)params->p >= (1U << 30)) + return NULL; + + dst = buf; + *dst++ = '$'; + *dst++ = 'y'; + *dst++ = '$'; + + dst = encode64_uint32(dst, buflen - (dst - buf), flavor, 0); + if (!dst) + return NULL; + + dst = encode64_uint32(dst, buflen - (dst - buf), N_log2, 1); + if (!dst) + return NULL; + + dst = encode64_uint32(dst, buflen - (dst - buf), params->r, 1); + if (!dst) + return NULL; + + have = 0; + if (params->p != 1) + have |= 1; + if (params->t) + have |= 2; + if (params->g) + have |= 4; + if (NROM_log2) + have |= 8; + + if (have) { + dst = encode64_uint32(dst, buflen - (dst - buf), have, 1); + if (!dst) + return NULL; + } + + if (params->p != 1) { + dst = encode64_uint32(dst, buflen - (dst - buf), params->p, 2); + if (!dst) + return NULL; + } + + if (params->t) { + dst = encode64_uint32(dst, buflen - (dst - buf), params->t, 1); + if (!dst) + return NULL; + } + + if (params->g) { + dst = encode64_uint32(dst, buflen - (dst - buf), params->g, 1); + if (!dst) + return NULL; + } + + if (NROM_log2) { + dst = encode64_uint32(dst, buflen - (dst - buf), NROM_log2, 1); + if (!dst) + return NULL; + } + + if (dst >= buf + buflen) + return NULL; + + *dst++ = '$'; + + dst = encode64(dst, buflen - (dst - buf), src, srclen); + if (!dst || dst >= buf + buflen) + return NULL; + + *dst = 0; /* NUL termination */ + + return buf; +} + +uint8_t *yescrypt_encode_params(const yescrypt_params_t *params, + const uint8_t *src, size_t srclen) +{ + /* prefix, NUL */ + static uint8_t buf[PREFIX_LEN + 1]; + return yescrypt_encode_params_r(params, src, srclen, buf, sizeof(buf)); +} + +int crypto_scrypt(const uint8_t *passwd, size_t passwdlen, + const uint8_t *salt, size_t saltlen, uint64_t N, uint32_t r, uint32_t p, + uint8_t *buf, size_t buflen) +{ + yescrypt_local_t local; + yescrypt_params_t params = { .flags = 0, .N = N, .r = r, .p = p }; + int retval; + + if (yescrypt_init_local(&local)) + return -1; + retval = yescrypt_kdf(NULL, &local, + passwd, passwdlen, salt, saltlen, ¶ms, buf, buflen); + if (yescrypt_free_local(&local)) + return -1; + return retval; +} diff --git a/deps/yescrypt-master/yescrypt-opt.c b/deps/yescrypt-master/yescrypt-opt.c new file mode 100644 index 000000000..97ef1e44c --- /dev/null +++ b/deps/yescrypt-master/yescrypt-opt.c @@ -0,0 +1,1533 @@ +/*- + * Copyright 2009 Colin Percival + * Copyright 2012-2025 Alexander Peslyak + * All rights reserved. + * + * 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. + * + * This file was originally written by Colin Percival as part of the Tarsnap + * online backup system. + */ + +/* + * AVX and especially XOP speed up Salsa20 a lot, but this mostly matters for + * classic scrypt and for YESCRYPT_WORM (which use 8 rounds of Salsa20 per + * sub-block), and much less so for YESCRYPT_RW (which uses 2 rounds of Salsa20 + * per block except during pwxform S-box initialization). + */ +#ifdef __GNUC__ +#ifdef __XOP__ +#warning "Note: XOP is enabled. That's great." +#elif defined(__AVX512VL__) +#warning "Note: AVX512VL is enabled. That's great." +#elif defined(__AVX__) +#warning "Note: AVX is enabled, which is great for classic scrypt and YESCRYPT_WORM, but is sometimes slightly slower than plain SSE2 for YESCRYPT_RW" +#elif defined(__SSE2__) +#warning "Note: AVX and XOP are not enabled, which is great for YESCRYPT_RW, but they would substantially improve performance at classic scrypt and YESCRYPT_WORM" +#elif defined(__x86_64__) || defined(__i386__) +#warning "SSE2 not enabled. Expect poor performance." +#else +#warning "Note: building generic code for non-x86. That's OK." +#endif +#endif + +/* + * The SSE4 code version has fewer instructions than the generic SSE2 version, + * but all of the instructions are SIMD, thereby wasting the scalar execution + * units. Thus, the generic SSE2 version below actually runs faster on some + * CPUs due to its balanced mix of SIMD and scalar instructions. + */ +#undef USE_SSE4_FOR_32BIT + +#ifdef __SSE2__ +/* + * GCC before 4.9 would by default unnecessarily use store/load (without + * SSE4.1) or (V)PEXTR (with SSE4.1 or AVX) instead of simply (V)MOV. + * This was tracked as GCC bug 54349. + * "-mtune=corei7" works around this, but is only supported for GCC 4.6+. + * We use inline asm for pre-4.6 GCC, further down this file. + */ +#if __GNUC__ == 4 && __GNUC_MINOR__ >= 6 && __GNUC_MINOR__ < 9 && \ + !defined(__clang__) && !defined(__ICC) +#pragma GCC target ("tune=corei7") +#endif +#include +#ifdef __XOP__ +#include +#elif defined(__AVX512VL__) +#include +#endif +#elif defined(__SSE__) +#include +#endif + +#include +#include +#include +#include + +#include "insecure_memzero.h" +#include "sha256.h" +#include "sysendian.h" + +#define YESCRYPT_INTERNAL +#include "yescrypt.h" + +#include "yescrypt-platform.c" + +#if __STDC_VERSION__ >= 199901L +/* Have restrict */ +#elif defined(__GNUC__) +#define restrict __restrict +#else +#define restrict +#endif + +#ifdef __GNUC__ +#define unlikely(exp) __builtin_expect(exp, 0) +#else +#define unlikely(exp) (exp) +#endif + +#ifdef __SSE__ +#define PREFETCH(x, hint) _mm_prefetch((const char *)(x), (hint)); +#else +#undef PREFETCH +#endif + +typedef union { + uint32_t w[16]; + uint64_t d[8]; +#ifdef __SSE2__ + __m128i q[4]; +#endif +} salsa20_blk_t; + +static inline void salsa20_simd_shuffle(const salsa20_blk_t *Bin, + salsa20_blk_t *Bout) +{ +#define COMBINE(out, in1, in2) \ + Bout->d[out] = Bin->w[in1 * 2] | ((uint64_t)Bin->w[in2 * 2 + 1] << 32); + COMBINE(0, 0, 2) + COMBINE(1, 5, 7) + COMBINE(2, 2, 4) + COMBINE(3, 7, 1) + COMBINE(4, 4, 6) + COMBINE(5, 1, 3) + COMBINE(6, 6, 0) + COMBINE(7, 3, 5) +#undef COMBINE +} + +static inline void salsa20_simd_unshuffle(const salsa20_blk_t *Bin, + salsa20_blk_t *Bout) +{ +#define UNCOMBINE(out, in1, in2) \ + Bout->w[out * 2] = Bin->d[in1]; \ + Bout->w[out * 2 + 1] = Bin->d[in2] >> 32; + UNCOMBINE(0, 0, 6) + UNCOMBINE(1, 5, 3) + UNCOMBINE(2, 2, 0) + UNCOMBINE(3, 7, 5) + UNCOMBINE(4, 4, 2) + UNCOMBINE(5, 1, 7) + UNCOMBINE(6, 6, 4) + UNCOMBINE(7, 3, 1) +#undef UNCOMBINE +} + +#ifdef __SSE2__ +#define DECL_X \ + __m128i X0, X1, X2, X3; +#define DECL_Y \ + __m128i Y0, Y1, Y2, Y3; +#define READ_X(in) \ + X0 = (in).q[0]; X1 = (in).q[1]; X2 = (in).q[2]; X3 = (in).q[3]; +#define WRITE_X(out) \ + (out).q[0] = X0; (out).q[1] = X1; (out).q[2] = X2; (out).q[3] = X3; + +#ifdef __XOP__ +#define ARX(out, in1, in2, s) \ + out = _mm_xor_si128(out, _mm_roti_epi32(_mm_add_epi32(in1, in2), s)); +#elif defined(__AVX512VL__) +#define ARX(out, in1, in2, s) \ + out = _mm_xor_si128(out, _mm_rol_epi32(_mm_add_epi32(in1, in2), s)); +#else +#define ARX(out, in1, in2, s) { \ + __m128i tmp = _mm_add_epi32(in1, in2); \ + out = _mm_xor_si128(out, _mm_slli_epi32(tmp, s)); \ + out = _mm_xor_si128(out, _mm_srli_epi32(tmp, 32 - s)); \ +} +#endif + +#define SALSA20_2ROUNDS \ + /* Operate on "columns" */ \ + ARX(X1, X0, X3, 7) \ + ARX(X2, X1, X0, 9) \ + ARX(X3, X2, X1, 13) \ + ARX(X0, X3, X2, 18) \ + /* Rearrange data */ \ + X1 = _mm_shuffle_epi32(X1, 0x93); \ + X2 = _mm_shuffle_epi32(X2, 0x4E); \ + X3 = _mm_shuffle_epi32(X3, 0x39); \ + /* Operate on "rows" */ \ + ARX(X3, X0, X1, 7) \ + ARX(X2, X3, X0, 9) \ + ARX(X1, X2, X3, 13) \ + ARX(X0, X1, X2, 18) \ + /* Rearrange data */ \ + X1 = _mm_shuffle_epi32(X1, 0x39); \ + X2 = _mm_shuffle_epi32(X2, 0x4E); \ + X3 = _mm_shuffle_epi32(X3, 0x93); + +/** + * Apply the Salsa20 core to the block provided in (X0 ... X3). + */ +#define SALSA20_wrapper(out, rounds) { \ + __m128i Z0 = X0, Z1 = X1, Z2 = X2, Z3 = X3; \ + rounds \ + (out).q[0] = X0 = _mm_add_epi32(X0, Z0); \ + (out).q[1] = X1 = _mm_add_epi32(X1, Z1); \ + (out).q[2] = X2 = _mm_add_epi32(X2, Z2); \ + (out).q[3] = X3 = _mm_add_epi32(X3, Z3); \ +} + +/** + * Apply the Salsa20/2 core to the block provided in X. + */ +#define SALSA20_2(out) \ + SALSA20_wrapper(out, SALSA20_2ROUNDS) + +#define SALSA20_8ROUNDS \ + SALSA20_2ROUNDS SALSA20_2ROUNDS SALSA20_2ROUNDS SALSA20_2ROUNDS + +#define XOR_X(in) \ + X0 = _mm_xor_si128(X0, (in).q[0]); \ + X1 = _mm_xor_si128(X1, (in).q[1]); \ + X2 = _mm_xor_si128(X2, (in).q[2]); \ + X3 = _mm_xor_si128(X3, (in).q[3]); + +#define XOR_X_2(in1, in2) \ + X0 = _mm_xor_si128((in1).q[0], (in2).q[0]); \ + X1 = _mm_xor_si128((in1).q[1], (in2).q[1]); \ + X2 = _mm_xor_si128((in1).q[2], (in2).q[2]); \ + X3 = _mm_xor_si128((in1).q[3], (in2).q[3]); + +#define XOR_X_WRITE_XOR_Y_2(out, in) \ + (out).q[0] = Y0 = _mm_xor_si128((out).q[0], (in).q[0]); \ + (out).q[1] = Y1 = _mm_xor_si128((out).q[1], (in).q[1]); \ + (out).q[2] = Y2 = _mm_xor_si128((out).q[2], (in).q[2]); \ + (out).q[3] = Y3 = _mm_xor_si128((out).q[3], (in).q[3]); \ + X0 = _mm_xor_si128(X0, Y0); \ + X1 = _mm_xor_si128(X1, Y1); \ + X2 = _mm_xor_si128(X2, Y2); \ + X3 = _mm_xor_si128(X3, Y3); + +/** + * Apply the Salsa20/8 core to the block provided in X ^ in. + */ +#define SALSA20_8_XOR_MEM(in, out) \ + XOR_X(in) \ + SALSA20_wrapper(out, SALSA20_8ROUNDS) + +#define INTEGERIFY _mm_cvtsi128_si32(X0) + +#else /* !defined(__SSE2__) */ + +#define DECL_X \ + salsa20_blk_t X; +#define DECL_Y \ + salsa20_blk_t Y; + +#define COPY(out, in) \ + (out).d[0] = (in).d[0]; \ + (out).d[1] = (in).d[1]; \ + (out).d[2] = (in).d[2]; \ + (out).d[3] = (in).d[3]; \ + (out).d[4] = (in).d[4]; \ + (out).d[5] = (in).d[5]; \ + (out).d[6] = (in).d[6]; \ + (out).d[7] = (in).d[7]; + +#define READ_X(in) COPY(X, in) +#define WRITE_X(out) COPY(out, X) + +/** + * salsa20(B): + * Apply the Salsa20 core to the provided block. + */ +static inline void salsa20(salsa20_blk_t *restrict B, + salsa20_blk_t *restrict Bout, uint32_t doublerounds) +{ + salsa20_blk_t X; +#define x X.w + + salsa20_simd_unshuffle(B, &X); + + do { +#define R(a,b) (((a) << (b)) | ((a) >> (32 - (b)))) + /* Operate on columns */ + x[ 4] ^= R(x[ 0]+x[12], 7); x[ 8] ^= R(x[ 4]+x[ 0], 9); + x[12] ^= R(x[ 8]+x[ 4],13); x[ 0] ^= R(x[12]+x[ 8],18); + + x[ 9] ^= R(x[ 5]+x[ 1], 7); x[13] ^= R(x[ 9]+x[ 5], 9); + x[ 1] ^= R(x[13]+x[ 9],13); x[ 5] ^= R(x[ 1]+x[13],18); + + x[14] ^= R(x[10]+x[ 6], 7); x[ 2] ^= R(x[14]+x[10], 9); + x[ 6] ^= R(x[ 2]+x[14],13); x[10] ^= R(x[ 6]+x[ 2],18); + + x[ 3] ^= R(x[15]+x[11], 7); x[ 7] ^= R(x[ 3]+x[15], 9); + x[11] ^= R(x[ 7]+x[ 3],13); x[15] ^= R(x[11]+x[ 7],18); + + /* Operate on rows */ + x[ 1] ^= R(x[ 0]+x[ 3], 7); x[ 2] ^= R(x[ 1]+x[ 0], 9); + x[ 3] ^= R(x[ 2]+x[ 1],13); x[ 0] ^= R(x[ 3]+x[ 2],18); + + x[ 6] ^= R(x[ 5]+x[ 4], 7); x[ 7] ^= R(x[ 6]+x[ 5], 9); + x[ 4] ^= R(x[ 7]+x[ 6],13); x[ 5] ^= R(x[ 4]+x[ 7],18); + + x[11] ^= R(x[10]+x[ 9], 7); x[ 8] ^= R(x[11]+x[10], 9); + x[ 9] ^= R(x[ 8]+x[11],13); x[10] ^= R(x[ 9]+x[ 8],18); + + x[12] ^= R(x[15]+x[14], 7); x[13] ^= R(x[12]+x[15], 9); + x[14] ^= R(x[13]+x[12],13); x[15] ^= R(x[14]+x[13],18); +#undef R + } while (--doublerounds); +#undef x + + { + uint32_t i; + salsa20_simd_shuffle(&X, Bout); + for (i = 0; i < 16; i += 4) { + B->w[i] = Bout->w[i] += B->w[i]; + B->w[i + 1] = Bout->w[i + 1] += B->w[i + 1]; + B->w[i + 2] = Bout->w[i + 2] += B->w[i + 2]; + B->w[i + 3] = Bout->w[i + 3] += B->w[i + 3]; + } + } + +#if 0 + /* Too expensive */ + insecure_memzero(&X, sizeof(X)); +#endif +} + +/** + * Apply the Salsa20/2 core to the block provided in X. + */ +#define SALSA20_2(out) \ + salsa20(&X, &out, 1); + +#define XOR(out, in1, in2) \ + (out).d[0] = (in1).d[0] ^ (in2).d[0]; \ + (out).d[1] = (in1).d[1] ^ (in2).d[1]; \ + (out).d[2] = (in1).d[2] ^ (in2).d[2]; \ + (out).d[3] = (in1).d[3] ^ (in2).d[3]; \ + (out).d[4] = (in1).d[4] ^ (in2).d[4]; \ + (out).d[5] = (in1).d[5] ^ (in2).d[5]; \ + (out).d[6] = (in1).d[6] ^ (in2).d[6]; \ + (out).d[7] = (in1).d[7] ^ (in2).d[7]; + +#define XOR_X(in) XOR(X, X, in) +#define XOR_X_2(in1, in2) XOR(X, in1, in2) +#define XOR_X_WRITE_XOR_Y_2(out, in) \ + XOR(Y, out, in) \ + COPY(out, Y) \ + XOR(X, X, Y) + +/** + * Apply the Salsa20/8 core to the block provided in X ^ in. + */ +#define SALSA20_8_XOR_MEM(in, out) \ + XOR_X(in); \ + salsa20(&X, &out, 4); + +#define INTEGERIFY (uint32_t)X.d[0] +#endif + +/** + * blockmix_salsa8(Bin, Bout, r): + * Compute Bout = BlockMix_{salsa20/8, r}(Bin). The input Bin must be 128r + * bytes in length; the output Bout must also be the same size. + */ +static void blockmix_salsa8(const salsa20_blk_t *restrict Bin, + salsa20_blk_t *restrict Bout, size_t r) +{ + size_t i; + DECL_X + + READ_X(Bin[r * 2 - 1]) + for (i = 0; i < r; i++) { + SALSA20_8_XOR_MEM(Bin[i * 2], Bout[i]) + SALSA20_8_XOR_MEM(Bin[i * 2 + 1], Bout[r + i]) + } +} + +static uint32_t blockmix_salsa8_xor(const salsa20_blk_t *restrict Bin1, + const salsa20_blk_t *restrict Bin2, salsa20_blk_t *restrict Bout, + size_t r) +{ + size_t i; + DECL_X + +#ifdef PREFETCH + PREFETCH(&Bin2[r * 2 - 1], _MM_HINT_T0) + for (i = 0; i < r - 1; i++) { + PREFETCH(&Bin2[i * 2], _MM_HINT_T0) + PREFETCH(&Bin2[i * 2 + 1], _MM_HINT_T0) + } + PREFETCH(&Bin2[i * 2], _MM_HINT_T0) +#endif + + XOR_X_2(Bin1[r * 2 - 1], Bin2[r * 2 - 1]) + for (i = 0; i < r; i++) { + XOR_X(Bin1[i * 2]) + SALSA20_8_XOR_MEM(Bin2[i * 2], Bout[i]) + XOR_X(Bin1[i * 2 + 1]) + SALSA20_8_XOR_MEM(Bin2[i * 2 + 1], Bout[r + i]) + } + + return INTEGERIFY; +} + +/* This is tunable */ +#define Swidth 8 + +/* Not tunable in this implementation, hard-coded in a few places */ +#define PWXsimple 2 +#define PWXgather 4 + +/* Derived values. Not tunable except via Swidth above. */ +#define PWXbytes (PWXgather * PWXsimple * 8) +#define Sbytes (3 * (1 << Swidth) * PWXsimple * 8) +#define Smask (((1 << Swidth) - 1) * PWXsimple * 8) +#define Smask2 (((uint64_t)Smask << 32) | Smask) + +#define DECL_SMASK2REG /* empty */ +#define FORCE_REGALLOC_3 /* empty */ +#define MAYBE_MEMORY_BARRIER /* empty */ + +#ifdef __SSE2__ +/* + * (V)PSRLDQ and (V)PSHUFD have higher throughput than (V)PSRLQ on some CPUs + * starting with Sandy Bridge. Additionally, PSHUFD uses separate source and + * destination registers, whereas the shifts would require an extra move + * instruction for our code when building without AVX. Unfortunately, PSHUFD + * is much slower on Conroe (4 cycles latency vs. 1 cycle latency for PSRLQ) + * and somewhat slower on some non-Intel CPUs (luckily not including AMD + * Bulldozer and Piledriver). + */ +#ifdef __AVX__ +#define HI32(X) \ + _mm_srli_si128((X), 4) +#elif 1 /* As an option, check for __SSE4_1__ here not to hurt Conroe */ +#define HI32(X) \ + _mm_shuffle_epi32((X), _MM_SHUFFLE(2,3,0,1)) +#else +#define HI32(X) \ + _mm_srli_epi64((X), 32) +#endif + +#if defined(__x86_64__) && \ + __GNUC__ == 4 && __GNUC_MINOR__ < 6 && !defined(__ICC) +#ifdef __AVX__ +#define MOVQ "vmovq" +#else +/* "movq" would be more correct, but "movd" is supported by older binutils + * due to an error in AMD's spec for x86-64. */ +#define MOVQ "movd" +#endif +#define EXTRACT64(X) ({ \ + uint64_t result; \ + __asm__(MOVQ " %1, %0" : "=r" (result) : "x" (X)); \ + result; \ +}) +#elif defined(__x86_64__) && !defined(_MSC_VER) && !defined(__OPEN64__) +/* MSVC and Open64 had bugs */ +#define EXTRACT64(X) _mm_cvtsi128_si64(X) +#elif defined(__x86_64__) && defined(__SSE4_1__) +/* No known bugs for this intrinsic */ +#include +#define EXTRACT64(X) _mm_extract_epi64((X), 0) +#elif defined(USE_SSE4_FOR_32BIT) && defined(__SSE4_1__) +/* 32-bit */ +#include +#if 0 +/* This is currently unused by the code below, which instead uses these two + * intrinsics explicitly when (!defined(__x86_64__) && defined(__SSE4_1__)) */ +#define EXTRACT64(X) \ + ((uint64_t)(uint32_t)_mm_cvtsi128_si32(X) | \ + ((uint64_t)(uint32_t)_mm_extract_epi32((X), 1) << 32)) +#endif +#else +/* 32-bit or compilers with known past bugs in _mm_cvtsi128_si64() */ +#define EXTRACT64(X) \ + ((uint64_t)(uint32_t)_mm_cvtsi128_si32(X) | \ + ((uint64_t)(uint32_t)_mm_cvtsi128_si32(HI32(X)) << 32)) +#endif + +#if defined(__x86_64__) && (defined(__AVX__) || !defined(__GNUC__)) +/* 64-bit with AVX */ +/* Force use of 64-bit AND instead of two 32-bit ANDs */ +#undef DECL_SMASK2REG +#if defined(__GNUC__) && !defined(__ICC) +#define DECL_SMASK2REG uint64_t Smask2reg = Smask2; +/* Force use of lower-numbered registers to reduce number of prefixes, relying + * on out-of-order execution and register renaming. */ +#define FORCE_REGALLOC_1 \ + __asm__("" : "=a" (x), "+d" (Smask2reg), "+S" (S0), "+D" (S1)); +#define FORCE_REGALLOC_2 \ + __asm__("" : : "c" (lo)); +#else +static volatile uint64_t Smask2var = Smask2; +#define DECL_SMASK2REG uint64_t Smask2reg = Smask2var; +#define FORCE_REGALLOC_1 /* empty */ +#define FORCE_REGALLOC_2 /* empty */ +#endif +#define PWXFORM_SIMD(X) { \ + uint64_t x; \ + FORCE_REGALLOC_1 \ + uint32_t lo = x = EXTRACT64(X) & Smask2reg; \ + FORCE_REGALLOC_2 \ + uint32_t hi = x >> 32; \ + X = _mm_mul_epu32(HI32(X), X); \ + X = _mm_add_epi64(X, *(__m128i *)(S0 + lo)); \ + X = _mm_xor_si128(X, *(__m128i *)(S1 + hi)); \ +} +#elif defined(__x86_64__) +/* 64-bit without AVX. This relies on out-of-order execution and register + * renaming. It may actually be fastest on CPUs with AVX(2) as well - e.g., + * it runs great on Haswell. */ +#warning "Note: using x86-64 inline assembly for YESCRYPT_RW. That's great." +/* We need a compiler memory barrier between sub-blocks to ensure that none of + * the writes into what was S2 during processing of the previous sub-block are + * postponed until after a read from S0 or S1 in the inline asm code below. */ +#undef MAYBE_MEMORY_BARRIER +#define MAYBE_MEMORY_BARRIER \ + __asm__("" : : : "memory"); +#ifdef __ILP32__ /* x32 */ +#define REGISTER_PREFIX "e" +#else +#define REGISTER_PREFIX "r" +#endif +#define PWXFORM_SIMD(X) { \ + __m128i H; \ + __asm__( \ + "movd %0, %%rax\n\t" \ + "pshufd $0xb1, %0, %1\n\t" \ + "andq %2, %%rax\n\t" \ + "pmuludq %1, %0\n\t" \ + "movl %%eax, %%ecx\n\t" \ + "shrq $0x20, %%rax\n\t" \ + "paddq (%3,%%" REGISTER_PREFIX "cx), %0\n\t" \ + "pxor (%4,%%" REGISTER_PREFIX "ax), %0\n\t" \ + : "+x" (X), "=x" (H) \ + : "d" (Smask2), "S" (S0), "D" (S1) \ + : "cc", "ax", "cx"); \ +} +#elif defined(USE_SSE4_FOR_32BIT) && defined(__SSE4_1__) +/* 32-bit with SSE4.1 */ +#define PWXFORM_SIMD(X) { \ + __m128i x = _mm_and_si128(X, _mm_set1_epi64x(Smask2)); \ + __m128i s0 = *(__m128i *)(S0 + (uint32_t)_mm_cvtsi128_si32(x)); \ + __m128i s1 = *(__m128i *)(S1 + (uint32_t)_mm_extract_epi32(x, 1)); \ + X = _mm_mul_epu32(HI32(X), X); \ + X = _mm_add_epi64(X, s0); \ + X = _mm_xor_si128(X, s1); \ +} +#else +/* 32-bit without SSE4.1 */ +#define PWXFORM_SIMD(X) { \ + uint64_t x = EXTRACT64(X) & Smask2; \ + __m128i s0 = *(__m128i *)(S0 + (uint32_t)x); \ + __m128i s1 = *(__m128i *)(S1 + (x >> 32)); \ + X = _mm_mul_epu32(HI32(X), X); \ + X = _mm_add_epi64(X, s0); \ + X = _mm_xor_si128(X, s1); \ +} +#endif + +#define PWXFORM_ROUND \ + PWXFORM_SIMD(X0) \ + PWXFORM_SIMD(X1) \ + PWXFORM_SIMD(X2) \ + PWXFORM_SIMD(X3) + +#if defined(__x86_64__) && defined(__GNUC__) && !defined(__ICC) +#undef FORCE_REGALLOC_3 +#define FORCE_REGALLOC_3 __asm__("" : : "b" (Sw)); +#endif + +#else /* !defined(__SSE2__) */ + +#define PWXFORM_SIMD(x0, x1) { \ + uint64_t x = x0 & Smask2; \ + uint64_t *p0 = (uint64_t *)(S0 + (uint32_t)x); \ + uint64_t *p1 = (uint64_t *)(S1 + (x >> 32)); \ + x0 = ((x0 >> 32) * (uint32_t)x0 + p0[0]) ^ p1[0]; \ + x1 = ((x1 >> 32) * (uint32_t)x1 + p0[1]) ^ p1[1]; \ +} + +#define PWXFORM_ROUND \ + PWXFORM_SIMD(X.d[0], X.d[1]) \ + PWXFORM_SIMD(X.d[2], X.d[3]) \ + PWXFORM_SIMD(X.d[4], X.d[5]) \ + PWXFORM_SIMD(X.d[6], X.d[7]) +#endif + +/* + * This offset helps address the 256-byte write block via the single-byte + * displacements encodable in x86(-64) instructions. It is needed because the + * displacements are signed. Without it, we'd get 4-byte displacements for + * half of the writes. Setting it to 0x80 instead of 0x7c would avoid needing + * a displacement for one of the writes, but then the LEA instruction would + * need a 4-byte displacement. + */ +#define PWXFORM_WRITE_OFFSET 0x7c + +#define PWXFORM_WRITE \ + WRITE_X(*(salsa20_blk_t *)(Sw - PWXFORM_WRITE_OFFSET)) \ + Sw += 64; + +#define PWXFORM { \ + uint8_t *Sw = S2 + w + PWXFORM_WRITE_OFFSET; \ + FORCE_REGALLOC_3 \ + MAYBE_MEMORY_BARRIER \ + PWXFORM_ROUND \ + PWXFORM_ROUND PWXFORM_WRITE \ + PWXFORM_ROUND PWXFORM_WRITE \ + PWXFORM_ROUND PWXFORM_WRITE \ + PWXFORM_ROUND PWXFORM_WRITE \ + PWXFORM_ROUND \ + w = (w + 64 * 4) & Smask2; \ + { \ + uint8_t *Stmp = S2; \ + S2 = S1; \ + S1 = S0; \ + S0 = Stmp; \ + } \ +} + +typedef struct { + uint8_t *S0, *S1, *S2; + size_t w; +} pwxform_ctx_t; + +#define Salloc (Sbytes + ((sizeof(pwxform_ctx_t) + 63) & ~63U)) + +/** + * blockmix_pwxform(Bin, Bout, r, S): + * Compute Bout = BlockMix_pwxform{salsa20/2, r, S}(Bin). The input Bin must + * be 128r bytes in length; the output Bout must also be the same size. + */ +static void blockmix(const salsa20_blk_t *restrict Bin, + salsa20_blk_t *restrict Bout, size_t r, pwxform_ctx_t *restrict ctx) +{ + uint8_t *S0 = ctx->S0, *S1 = ctx->S1, *S2 = ctx->S2; + size_t w = ctx->w; + size_t i; + DECL_X + + /* Convert count of 128-byte blocks to max index of 64-byte block */ + r = r * 2 - 1; + + READ_X(Bin[r]) + + DECL_SMASK2REG + + i = 0; + do { + XOR_X(Bin[i]) + PWXFORM + if (unlikely(i >= r)) + break; + WRITE_X(Bout[i]) + i++; + } while (1); + + ctx->S0 = S0; ctx->S1 = S1; ctx->S2 = S2; + ctx->w = w; + + SALSA20_2(Bout[i]) +} + +static uint32_t blockmix_xor(const salsa20_blk_t *Bin1, + const salsa20_blk_t *restrict Bin2, salsa20_blk_t *Bout, + size_t r, int Bin2_in_ROM, pwxform_ctx_t *restrict ctx) +{ + uint8_t *S0 = ctx->S0, *S1 = ctx->S1, *S2 = ctx->S2; + size_t w = ctx->w; + size_t i; + DECL_X + + /* Convert count of 128-byte blocks to max index of 64-byte block */ + r = r * 2 - 1; + +#ifdef PREFETCH + if (Bin2_in_ROM) { + PREFETCH(&Bin2[r], _MM_HINT_NTA) + for (i = 0; i < r; i++) { + PREFETCH(&Bin2[i], _MM_HINT_NTA) + } + } else { + PREFETCH(&Bin2[r], _MM_HINT_T0) + for (i = 0; i < r; i++) { + PREFETCH(&Bin2[i], _MM_HINT_T0) + } + } +#else + (void)Bin2_in_ROM; /* unused */ +#endif + + XOR_X_2(Bin1[r], Bin2[r]) + + DECL_SMASK2REG + + i = 0; + r--; + do { + XOR_X(Bin1[i]) + XOR_X(Bin2[i]) + PWXFORM + WRITE_X(Bout[i]) + + XOR_X(Bin1[i + 1]) + XOR_X(Bin2[i + 1]) + PWXFORM + + if (unlikely(i >= r)) + break; + + WRITE_X(Bout[i + 1]) + + i += 2; + } while (1); + i++; + + ctx->S0 = S0; ctx->S1 = S1; ctx->S2 = S2; + ctx->w = w; + + SALSA20_2(Bout[i]) + + return INTEGERIFY; +} + +static uint32_t blockmix_xor_save(salsa20_blk_t *restrict Bin1out, + salsa20_blk_t *restrict Bin2, + size_t r, pwxform_ctx_t *restrict ctx) +{ + uint8_t *S0 = ctx->S0, *S1 = ctx->S1, *S2 = ctx->S2; + size_t w = ctx->w; + size_t i; + DECL_X + DECL_Y + + /* Convert count of 128-byte blocks to max index of 64-byte block */ + r = r * 2 - 1; + +#ifdef PREFETCH + PREFETCH(&Bin2[r], _MM_HINT_T0) + for (i = 0; i < r; i++) { + PREFETCH(&Bin2[i], _MM_HINT_T0) + } +#endif + + XOR_X_2(Bin1out[r], Bin2[r]) + + DECL_SMASK2REG + + i = 0; + r--; + do { + XOR_X_WRITE_XOR_Y_2(Bin2[i], Bin1out[i]) + PWXFORM + WRITE_X(Bin1out[i]) + + XOR_X_WRITE_XOR_Y_2(Bin2[i + 1], Bin1out[i + 1]) + PWXFORM + + if (unlikely(i >= r)) + break; + + WRITE_X(Bin1out[i + 1]) + + i += 2; + } while (1); + i++; + + ctx->S0 = S0; ctx->S1 = S1; ctx->S2 = S2; + ctx->w = w; + + SALSA20_2(Bin1out[i]) + + return INTEGERIFY; +} + +/** + * integerify(B, r): + * Return the result of parsing B_{2r-1} as a little-endian integer. + */ +static inline uint32_t integerify(const salsa20_blk_t *B, size_t r) +{ +/* + * Our 64-bit words are in host byte order, which is why we don't just read + * w[0] here (would be wrong on big-endian). Also, our 32-bit words are + * SIMD-shuffled (so the next 32 bits would be part of d[6]), but currently + * this does not matter as we only care about the least significant 32 bits. + */ + return (uint32_t)B[2 * r - 1].d[0]; +} + +/** + * smix1(B, r, N, flags, V, NROM, VROM, XY, ctx): + * Compute first loop of B = SMix_r(B, N). The input B must be 128r bytes in + * length; the temporary storage V must be 128rN bytes in length; the temporary + * storage XY must be 128r+64 bytes in length. N must be even and at least 4. + * The array V must be aligned to a multiple of 64 bytes, and arrays B and XY + * to a multiple of at least 16 bytes. + */ +static void smix1(uint8_t *B, size_t r, uint32_t N, yescrypt_flags_t flags, + salsa20_blk_t *V, uint32_t NROM, const salsa20_blk_t *VROM, + salsa20_blk_t *XY, pwxform_ctx_t *ctx) +{ + size_t s = 2 * r; + salsa20_blk_t *X = V, *Y = &V[s]; + uint32_t i, j; + + for (i = 0; i < 2 * r; i++) { + const salsa20_blk_t *src = (salsa20_blk_t *)&B[i * 64]; + salsa20_blk_t *tmp = Y; + salsa20_blk_t *dst = &X[i]; + size_t k; + for (k = 0; k < 16; k++) + tmp->w[k] = le32dec(&src->w[k]); + salsa20_simd_shuffle(tmp, dst); + } + + if (VROM) { + uint32_t n; + const salsa20_blk_t *V_j; + + V_j = &VROM[(NROM - 1) * s]; + j = blockmix_xor(X, V_j, Y, r, 1, ctx) & (NROM - 1); + V_j = &VROM[j * s]; + X = Y + s; + j = blockmix_xor(Y, V_j, X, r, 1, ctx); + + for (n = 2; n < N; n <<= 1) { + uint32_t m = (n < N / 2) ? n : (N - 1 - n); + for (i = 1; i < m; i += 2) { + j &= n - 1; + j += i - 1; + V_j = &V[j * s]; + Y = X + s; + j = blockmix_xor(X, V_j, Y, r, 0, ctx) & (NROM - 1); + V_j = &VROM[j * s]; + X = Y + s; + j = blockmix_xor(Y, V_j, X, r, 1, ctx); + } + } + n >>= 1; + + j &= n - 1; + j += N - 2 - n; + V_j = &V[j * s]; + Y = X + s; + j = blockmix_xor(X, V_j, Y, r, 0, ctx) & (NROM - 1); + V_j = &VROM[j * s]; + blockmix_xor(Y, V_j, XY, r, 1, ctx); + } else if (flags & YESCRYPT_RW) { + uint32_t n; + salsa20_blk_t *V_j; + + blockmix(X, Y, r, ctx); + X = Y + s; + blockmix(Y, X, r, ctx); + j = integerify(X, r); + + for (n = 2; n < N; n <<= 1) { + uint32_t m = (n < N / 2) ? n : (N - 1 - n); + for (i = 1; i < m; i += 2) { + Y = X + s; + j &= n - 1; + j += i - 1; + V_j = &V[j * s]; + j = blockmix_xor(X, V_j, Y, r, 0, ctx); + j &= n - 1; + j += i; + V_j = &V[j * s]; + X = Y + s; + j = blockmix_xor(Y, V_j, X, r, 0, ctx); + } + } + n >>= 1; + + j &= n - 1; + j += N - 2 - n; + V_j = &V[j * s]; + Y = X + s; + j = blockmix_xor(X, V_j, Y, r, 0, ctx); + j &= n - 1; + j += N - 1 - n; + V_j = &V[j * s]; + blockmix_xor(Y, V_j, XY, r, 0, ctx); + } else { + N -= 2; + do { + blockmix_salsa8(X, Y, r); + X = Y + s; + blockmix_salsa8(Y, X, r); + Y = X + s; + } while ((N -= 2)); + + blockmix_salsa8(X, Y, r); + blockmix_salsa8(Y, XY, r); + } + + for (i = 0; i < 2 * r; i++) { + const salsa20_blk_t *src = &XY[i]; + salsa20_blk_t *tmp = &XY[s]; + salsa20_blk_t *dst = (salsa20_blk_t *)&B[i * 64]; + size_t k; + for (k = 0; k < 16; k++) + le32enc(&tmp->w[k], src->w[k]); + salsa20_simd_unshuffle(tmp, dst); + } +} + +/** + * smix2(B, r, N, Nloop, flags, V, NROM, VROM, XY, ctx): + * Compute second loop of B = SMix_r(B, N). The input B must be 128r bytes in + * length; the temporary storage V must be 128rN bytes in length; the temporary + * storage XY must be 256r bytes in length. N must be a power of 2 and at + * least 2. Nloop must be even. The array V must be aligned to a multiple of + * 64 bytes, and arrays B and XY to a multiple of at least 16 bytes. + */ +static void smix2(uint8_t *B, size_t r, uint32_t N, uint64_t Nloop, + yescrypt_flags_t flags, salsa20_blk_t *V, uint32_t NROM, + const salsa20_blk_t *VROM, salsa20_blk_t *XY, pwxform_ctx_t *ctx) +{ + size_t s = 2 * r; + salsa20_blk_t *X = XY, *Y = &XY[s]; + uint32_t i, j; + + if (Nloop == 0) + return; + + for (i = 0; i < 2 * r; i++) { + const salsa20_blk_t *src = (salsa20_blk_t *)&B[i * 64]; + salsa20_blk_t *tmp = Y; + salsa20_blk_t *dst = &X[i]; + size_t k; + for (k = 0; k < 16; k++) + tmp->w[k] = le32dec(&src->w[k]); + salsa20_simd_shuffle(tmp, dst); + } + + j = integerify(X, r) & (N - 1); + +/* + * Normally, VROM implies YESCRYPT_RW, but we check for these separately + * because our SMix resets YESCRYPT_RW for the smix2() calls operating on the + * entire V when p > 1. + */ + if (VROM && (flags & YESCRYPT_RW)) { + do { + salsa20_blk_t *V_j = &V[j * s]; + const salsa20_blk_t *VROM_j; + j = blockmix_xor_save(X, V_j, r, ctx) & (NROM - 1); + VROM_j = &VROM[j * s]; + j = blockmix_xor(X, VROM_j, X, r, 1, ctx) & (N - 1); + } while (Nloop -= 2); + } else if (VROM) { + do { + const salsa20_blk_t *V_j = &V[j * s]; + j = blockmix_xor(X, V_j, X, r, 0, ctx) & (NROM - 1); + V_j = &VROM[j * s]; + j = blockmix_xor(X, V_j, X, r, 1, ctx) & (N - 1); + } while (Nloop -= 2); + } else if (flags & YESCRYPT_RW) { + do { + salsa20_blk_t *V_j = &V[j * s]; + j = blockmix_xor_save(X, V_j, r, ctx) & (N - 1); + V_j = &V[j * s]; + j = blockmix_xor_save(X, V_j, r, ctx) & (N - 1); + } while (Nloop -= 2); + } else if (ctx) { + do { + const salsa20_blk_t *V_j = &V[j * s]; + j = blockmix_xor(X, V_j, X, r, 0, ctx) & (N - 1); + V_j = &V[j * s]; + j = blockmix_xor(X, V_j, X, r, 0, ctx) & (N - 1); + } while (Nloop -= 2); + } else { + do { + const salsa20_blk_t *V_j = &V[j * s]; + j = blockmix_salsa8_xor(X, V_j, Y, r) & (N - 1); + V_j = &V[j * s]; + j = blockmix_salsa8_xor(Y, V_j, X, r) & (N - 1); + } while (Nloop -= 2); + } + + for (i = 0; i < 2 * r; i++) { + const salsa20_blk_t *src = &X[i]; + salsa20_blk_t *tmp = Y; + salsa20_blk_t *dst = (salsa20_blk_t *)&B[i * 64]; + size_t k; + for (k = 0; k < 16; k++) + le32enc(&tmp->w[k], src->w[k]); + salsa20_simd_unshuffle(tmp, dst); + } +} + +/** + * p2floor(x): + * Largest power of 2 not greater than argument. + */ +static uint64_t p2floor(uint64_t x) +{ + uint64_t y; + while ((y = x & (x - 1))) + x = y; + return x; +} + +/** + * smix(B, r, N, p, t, flags, V, NROM, VROM, XY, S, passwd): + * Compute B = SMix_r(B, N). The input B must be 128rp bytes in length; the + * temporary storage V must be 128rN bytes in length; the temporary storage + * XY must be 256r or 256rp bytes in length (the larger size is required with + * OpenMP-enabled builds). N must be a power of 2 and at least 4. The array V + * must be aligned to a multiple of 64 bytes, and arrays B and XY to a multiple + * of at least 16 bytes (aligning them to 64 bytes as well saves cache lines + * and helps avoid false sharing in OpenMP-enabled builds when p > 1, but it + * might also result in cache bank conflicts). + */ +//hashcat: removed static, need direct access +//static void smix(uint8_t *B, size_t r, uint32_t N, uint32_t p, uint32_t t, +void smix(uint8_t *B, size_t r, uint32_t N, uint32_t p, uint32_t t, + yescrypt_flags_t flags, + salsa20_blk_t *V, uint32_t NROM, const salsa20_blk_t *VROM, + salsa20_blk_t *XY, uint8_t *S, uint8_t *passwd) +{ + size_t s = 2 * r; + uint32_t Nchunk; + uint64_t Nloop_all, Nloop_rw; + uint32_t i; + + Nchunk = N / p; + Nloop_all = Nchunk; + if (flags & YESCRYPT_RW) { + if (t <= 1) { + if (t) + Nloop_all *= 2; /* 2/3 */ + Nloop_all = (Nloop_all + 2) / 3; /* 1/3, round up */ + } else { + Nloop_all *= t - 1; + } + } else if (t) { + if (t == 1) + Nloop_all += (Nloop_all + 1) / 2; /* 1.5, round up */ + Nloop_all *= t; + } + + Nloop_rw = 0; + if (flags & YESCRYPT_INIT_SHARED) + Nloop_rw = Nloop_all; + else if (flags & YESCRYPT_RW) + Nloop_rw = Nloop_all / p; + + Nchunk &= ~(uint32_t)1; /* round down to even */ + Nloop_all++; Nloop_all &= ~(uint64_t)1; /* round up to even */ + Nloop_rw++; Nloop_rw &= ~(uint64_t)1; /* round up to even */ + +#ifdef _OPENMP +#pragma omp parallel if (p > 1) default(none) private(i) shared(B, r, N, p, flags, V, NROM, VROM, XY, S, passwd, s, Nchunk, Nloop_all, Nloop_rw) + { +#pragma omp for +#endif + for (i = 0; i < p; i++) { + uint32_t Vchunk = i * Nchunk; + uint32_t Np = (i < p - 1) ? Nchunk : (N - Vchunk); + uint8_t *Bp = &B[128 * r * i]; + salsa20_blk_t *Vp = &V[Vchunk * s]; +#ifdef _OPENMP + salsa20_blk_t *XYp = &XY[i * (2 * s)]; +#else + salsa20_blk_t *XYp = XY; +#endif + pwxform_ctx_t *ctx_i = NULL; + if (flags & YESCRYPT_RW) { + uint8_t *Si = S + i * Salloc; + smix1(Bp, 1, Sbytes / 128, 0 /* no flags */, + (salsa20_blk_t *)Si, 0, NULL, XYp, NULL); + ctx_i = (pwxform_ctx_t *)(Si + Sbytes); + ctx_i->S2 = Si; + ctx_i->S1 = Si + Sbytes / 3; + ctx_i->S0 = Si + Sbytes / 3 * 2; + ctx_i->w = 0; + if (i == 0) + HMAC_SHA256_Buf(Bp + (128 * r - 64), 64, + passwd, 32, passwd); + } + smix1(Bp, r, Np, flags, Vp, NROM, VROM, XYp, ctx_i); + smix2(Bp, r, p2floor(Np), Nloop_rw, flags, Vp, + NROM, VROM, XYp, ctx_i); + } + + if (Nloop_all > Nloop_rw) { +#ifdef _OPENMP +#pragma omp for +#endif + for (i = 0; i < p; i++) { + uint8_t *Bp = &B[128 * r * i]; +#ifdef _OPENMP + salsa20_blk_t *XYp = &XY[i * (2 * s)]; +#else + salsa20_blk_t *XYp = XY; +#endif + pwxform_ctx_t *ctx_i = NULL; + if (flags & YESCRYPT_RW) { + uint8_t *Si = S + i * Salloc; + ctx_i = (pwxform_ctx_t *)(Si + Sbytes); + } + smix2(Bp, r, N, Nloop_all - Nloop_rw, + flags & ~YESCRYPT_RW, V, NROM, VROM, XYp, ctx_i); + } + } +#ifdef _OPENMP + } +#endif +} + +/** + * yescrypt_kdf_body(shared, local, passwd, passwdlen, salt, saltlen, + * flags, N, r, p, t, NROM, buf, buflen): + * Compute scrypt(passwd[0 .. passwdlen - 1], salt[0 .. saltlen - 1], N, r, + * p, buflen), or a revision of scrypt as requested by flags and shared, and + * write the result into buf. + * + * shared and flags may request special modes as described in yescrypt.h. + * + * local is the thread-local data structure, allowing to preserve and reuse a + * memory allocation across calls, thereby reducing its overhead. + * + * t controls computation time while not affecting peak memory usage. + * + * Return 0 on success; or -1 on error. + * + * This optimized implementation currently limits N to the range from 4 to + * 2^31, but other implementations might not. + */ +static int yescrypt_kdf_body(const yescrypt_shared_t *shared, + yescrypt_local_t *local, + const uint8_t *passwd, size_t passwdlen, + const uint8_t *salt, size_t saltlen, + yescrypt_flags_t flags, uint64_t N, uint32_t r, uint32_t p, uint32_t t, + uint64_t NROM, + uint8_t *buf, size_t buflen) +{ + yescrypt_region_t tmp; + const salsa20_blk_t *VROM; + size_t B_size, V_size, XY_size, need; + uint8_t *B, *S; + salsa20_blk_t *V, *XY; + uint8_t sha256[32]; + uint8_t dk[sizeof(sha256)], *dkp = buf; + + /* Sanity-check parameters */ + switch (flags & YESCRYPT_MODE_MASK) { + case 0: /* classic scrypt - can't have anything non-standard */ + if (flags || t || NROM) + goto out_EINVAL; + break; + case YESCRYPT_WORM: + if (flags != YESCRYPT_WORM || NROM) + goto out_EINVAL; + break; + case YESCRYPT_RW: + if (flags != (flags & YESCRYPT_KNOWN_FLAGS)) + goto out_EINVAL; +#if PWXsimple == 2 && PWXgather == 4 && Sbytes == 12288 + if ((flags & YESCRYPT_RW_FLAVOR_MASK) == + (YESCRYPT_ROUNDS_6 | YESCRYPT_GATHER_4 | + YESCRYPT_SIMPLE_2 | YESCRYPT_SBOX_12K)) + break; +#else +#error "Unsupported pwxform settings" +#endif + /* FALLTHRU */ + default: + goto out_EINVAL; + } +#if SIZE_MAX > UINT32_MAX + if (buflen > (((uint64_t)1 << 32) - 1) * 32) + goto out_EINVAL; +#endif + if ((uint64_t)r * (uint64_t)p >= 1 << 30) + goto out_EINVAL; + if (N > UINT32_MAX) + goto out_EINVAL; + if ((N & (N - 1)) != 0 || N <= 3 || r < 1 || p < 1) + goto out_EINVAL; + if (r > SIZE_MAX / 256 / p || + N > SIZE_MAX / 128 / r) + goto out_EINVAL; + if (flags & YESCRYPT_RW) { + if (N / p <= 3 || p > SIZE_MAX / Salloc) + goto out_EINVAL; + } +#ifdef _OPENMP + else if (N > SIZE_MAX / 128 / (r * p)) { + goto out_EINVAL; + } +#endif + + VROM = NULL; + if (shared) { + uint64_t expected_size = (size_t)128 * r * NROM; + if ((NROM & (NROM - 1)) != 0 || + NROM <= 1 || NROM > UINT32_MAX || + shared->aligned_size < expected_size) + goto out_EINVAL; + if (!(flags & YESCRYPT_INIT_SHARED)) { + uint64_t *tag = (uint64_t *) + ((uint8_t *)shared->aligned + expected_size - 48); + if (tag[0] != YESCRYPT_ROM_TAG1 || tag[1] != YESCRYPT_ROM_TAG2) + goto out_EINVAL; + } + VROM = shared->aligned; + } else { + if (NROM) + goto out_EINVAL; + } + + /* Allocate memory */ + V = NULL; + V_size = (size_t)128 * r * N; +#ifdef _OPENMP + if (!(flags & YESCRYPT_RW)) + V_size *= p; +#endif + need = V_size; + if (flags & YESCRYPT_INIT_SHARED) { + if (local->aligned_size < need) { + if (local->base || local->aligned || + local->base_size || local->aligned_size) + goto out_EINVAL; + if (!alloc_region(local, need)) + return -1; + } + if (flags & YESCRYPT_ALLOC_ONLY) + return -2; /* expected "failure" */ + V = (salsa20_blk_t *)local->aligned; + need = 0; + } + B_size = (size_t)128 * r * p; + need += B_size; + if (need < B_size) + goto out_EINVAL; + XY_size = (size_t)256 * r; +#ifdef _OPENMP + XY_size *= p; +#endif + need += XY_size; + if (need < XY_size) + goto out_EINVAL; + if (flags & YESCRYPT_RW) { + size_t S_size = (size_t)Salloc * p; + need += S_size; + if (need < S_size) + goto out_EINVAL; + } + if (flags & YESCRYPT_INIT_SHARED) { + if (!alloc_region(&tmp, need)) + return -1; + B = (uint8_t *)tmp.aligned; + XY = (salsa20_blk_t *)((uint8_t *)B + B_size); + } else { + init_region(&tmp); + if (local->aligned_size < need) { + if (free_region(local)) + return -1; + if (!alloc_region(local, need)) + return -1; + } + if (flags & YESCRYPT_ALLOC_ONLY) + return -3; /* expected "failure" */ + B = (uint8_t *)local->aligned; + V = (salsa20_blk_t *)((uint8_t *)B + B_size); + XY = (salsa20_blk_t *)((uint8_t *)V + V_size); + } + S = NULL; + if (flags & YESCRYPT_RW) + S = (uint8_t *)XY + XY_size; + + if (flags) { + HMAC_SHA256_Buf("yescrypt-prehash", + (flags & YESCRYPT_PREHASH) ? 16 : 8, + passwd, passwdlen, sha256); + passwd = sha256; + passwdlen = sizeof(sha256); + } + + PBKDF2_SHA256(passwd, passwdlen, salt, saltlen, 1, B, B_size); + + if (flags) + memcpy(sha256, B, sizeof(sha256)); + + if (p == 1 || (flags & YESCRYPT_RW)) { + smix(B, r, N, p, t, flags, V, NROM, VROM, XY, S, sha256); + } else { + uint32_t i; +#ifdef _OPENMP +#pragma omp parallel for default(none) private(i) shared(B, r, N, p, t, flags, V, NROM, VROM, XY, S) +#endif + for (i = 0; i < p; i++) { +#ifdef _OPENMP + smix(&B[(size_t)128 * r * i], r, N, 1, t, flags, + &V[(size_t)2 * r * i * N], + NROM, VROM, + &XY[(size_t)4 * r * i], NULL, NULL); +#else + smix(&B[(size_t)128 * r * i], r, N, 1, t, flags, V, + NROM, VROM, XY, NULL, NULL); +#endif + } + } + + dkp = buf; + if (flags && buflen < sizeof(dk)) { + PBKDF2_SHA256(passwd, passwdlen, B, B_size, 1, dk, sizeof(dk)); + dkp = dk; + } + + PBKDF2_SHA256(passwd, passwdlen, B, B_size, 1, buf, buflen); + + /* + * Except when computing classic scrypt, allow all computation so far + * to be performed on the client. The final steps below match those of + * SCRAM (RFC 5802), so that an extension of SCRAM (with the steps so + * far in place of SCRAM's use of PBKDF2 and with SHA-256 in place of + * SCRAM's use of SHA-1) would be usable with yescrypt hashes. + */ + if (flags && !(flags & YESCRYPT_PREHASH)) { + /* Compute ClientKey */ + HMAC_SHA256_Buf(dkp, sizeof(dk), "Client Key", 10, sha256); + /* Compute StoredKey */ + { + size_t clen = buflen; + if (clen > sizeof(dk)) + clen = sizeof(dk); + SHA256_Buf(sha256, sizeof(sha256), dk); + memcpy(buf, dk, clen); + } + } + + if (flags) { + insecure_memzero(sha256, sizeof(sha256)); + insecure_memzero(dk, sizeof(dk)); + } + + if (free_region(&tmp)) { + insecure_memzero(buf, buflen); /* must preserve errno */ + return -1; + } + + /* Success! */ + return 0; + +out_EINVAL: + errno = EINVAL; + return -1; +} + +/** + * yescrypt_kdf(shared, local, passwd, passwdlen, salt, saltlen, params, + * buf, buflen): + * Compute scrypt or its revision as requested by the parameters. The inputs + * to this function are the same as those for yescrypt_kdf_body() above, with + * the addition of g, which controls hash upgrades (0 for no upgrades so far). + */ +int yescrypt_kdf(const yescrypt_shared_t *shared, yescrypt_local_t *local, + const uint8_t *passwd, size_t passwdlen, + const uint8_t *salt, size_t saltlen, + const yescrypt_params_t *params, + uint8_t *buf, size_t buflen) +{ + yescrypt_flags_t flags = params->flags; + uint64_t N = params->N; + uint32_t r = params->r; + uint32_t p = params->p; + uint32_t t = params->t; + uint32_t g = params->g; + uint64_t NROM = params->NROM; + uint8_t dk[32]; + int retval; + + /* Support for hash upgrades has been temporarily removed */ + if (g) { + errno = EINVAL; + return -1; + } + + if ((flags & (YESCRYPT_RW | YESCRYPT_INIT_SHARED)) == YESCRYPT_RW && + p >= 1 && N / p >= 0x100 && N / p * r >= 0x20000) { + if (yescrypt_kdf_body(shared, local, + passwd, passwdlen, salt, saltlen, + flags | YESCRYPT_ALLOC_ONLY, N, r, p, t, NROM, + buf, buflen) != -3) { + errno = EINVAL; + return -1; + } + if ((retval = yescrypt_kdf_body(shared, local, + passwd, passwdlen, salt, saltlen, + flags | YESCRYPT_PREHASH, N >> 6, r, p, 0, NROM, + dk, sizeof(dk)))) + return retval; + passwd = dk; + passwdlen = sizeof(dk); + } + + retval = yescrypt_kdf_body(shared, local, + passwd, passwdlen, salt, saltlen, + flags, N, r, p, t, NROM, buf, buflen); +#ifndef SKIP_MEMZERO + if (passwd == dk) + insecure_memzero(dk, sizeof(dk)); +#endif + return retval; +} + +int yescrypt_init_shared(yescrypt_shared_t *shared, + const uint8_t *seed, size_t seedlen, + const yescrypt_params_t *params) +{ + yescrypt_params_t subparams; + yescrypt_shared_t half1, half2; + uint8_t salt[32]; + uint64_t *tag; + + subparams = *params; + subparams.flags |= YESCRYPT_INIT_SHARED; + subparams.N = params->NROM; + subparams.NROM = 0; + + if (!(params->flags & YESCRYPT_RW) || params->N || params->g) + return -1; + + if (params->flags & YESCRYPT_SHARED_PREALLOCATED) { + if (!shared->aligned || !shared->aligned_size) + return -1; + +/* Overwrite a possible old ROM tag before we overwrite the rest */ + tag = (uint64_t *) + ((uint8_t *)shared->aligned + shared->aligned_size - 48); + memset(tag, 0, 48); + } else { + init_region(shared); + + subparams.flags |= YESCRYPT_ALLOC_ONLY; + if (yescrypt_kdf(NULL, shared, NULL, 0, NULL, 0, &subparams, + NULL, 0) != -2 || !shared->aligned) + return -1; + subparams.flags -= YESCRYPT_ALLOC_ONLY; + } + + subparams.N /= 2; + + half1 = *shared; + half1.aligned_size /= 2; + half2 = half1; + half2.aligned = (uint8_t *)half2.aligned + half1.aligned_size; + + if (yescrypt_kdf(NULL, &half1, + seed, seedlen, (const uint8_t *)"yescrypt-ROMhash", 16, &subparams, + salt, sizeof(salt))) + goto fail; + + subparams.NROM = subparams.N; + + if (yescrypt_kdf(&half1, &half2, + seed, seedlen, salt, sizeof(salt), &subparams, salt, sizeof(salt))) + goto fail; + + if (yescrypt_kdf(&half2, &half1, + seed, seedlen, salt, sizeof(salt), &subparams, salt, sizeof(salt))) + goto fail; + + tag = (uint64_t *) + ((uint8_t *)shared->aligned + shared->aligned_size - 48); + tag[0] = YESCRYPT_ROM_TAG1; + tag[1] = YESCRYPT_ROM_TAG2; + tag[2] = le64dec(salt); + tag[3] = le64dec(salt + 8); + tag[4] = le64dec(salt + 16); + tag[5] = le64dec(salt + 24); + + insecure_memzero(salt, sizeof(salt)); + return 0; + +fail: + insecure_memzero(salt, sizeof(salt)); + if (!(params->flags & YESCRYPT_SHARED_PREALLOCATED)) + free_region(shared); + return -1; +} + +yescrypt_binary_t *yescrypt_digest_shared(yescrypt_shared_t *shared) +{ + static yescrypt_binary_t digest; + uint64_t *tag; + + if (shared->aligned_size < 48) + return NULL; + + tag = (uint64_t *) + ((uint8_t *)shared->aligned + shared->aligned_size - 48); + + if (tag[0] != YESCRYPT_ROM_TAG1 || tag[1] != YESCRYPT_ROM_TAG2) + return NULL; + + le64enc(digest.uc, tag[2]); + le64enc(digest.uc + 8, tag[3]); + le64enc(digest.uc + 16, tag[4]); + le64enc(digest.uc + 24, tag[5]); + + return &digest; +} + +int yescrypt_free_shared(yescrypt_shared_t *shared) +{ + return free_region(shared); +} + +int yescrypt_init_local(yescrypt_local_t *local) +{ + init_region(local); + return 0; +} + +int yescrypt_free_local(yescrypt_local_t *local) +{ + return free_region(local); +} diff --git a/deps/yescrypt-master/yescrypt-platform.c b/deps/yescrypt-master/yescrypt-platform.c new file mode 100644 index 000000000..b04acee2a --- /dev/null +++ b/deps/yescrypt-master/yescrypt-platform.c @@ -0,0 +1,111 @@ +/*- + * Copyright 2013-2018,2022 Alexander Peslyak + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted. + * + * 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. + */ + +#ifdef __unix__ +#include +#endif +#ifdef __linux__ +#include /* for MAP_HUGE_2MB */ +#endif + +#define HUGEPAGE_THRESHOLD (32 * 1024 * 1024) + +#ifdef __x86_64__ +#define HUGEPAGE_SIZE (2 * 1024 * 1024) +#else +#undef HUGEPAGE_SIZE +#endif + +static void *alloc_region(yescrypt_region_t *region, size_t size) +{ + size_t base_size = size; + uint8_t *base, *aligned; +#ifdef MAP_ANON + int flags = +#ifdef MAP_NOCORE + MAP_NOCORE | +#endif + MAP_ANON | MAP_PRIVATE; +#if defined(MAP_HUGETLB) && defined(MAP_HUGE_2MB) && defined(HUGEPAGE_SIZE) + size_t new_size = size; + const size_t hugepage_mask = (size_t)HUGEPAGE_SIZE - 1; + if (size >= HUGEPAGE_THRESHOLD && size + hugepage_mask >= size) { + flags |= MAP_HUGETLB | MAP_HUGE_2MB; +/* + * Linux's munmap() fails on MAP_HUGETLB mappings if size is not a multiple of + * huge page size, so let's round up to huge page size here. + */ + new_size = size + hugepage_mask; + new_size &= ~hugepage_mask; + } + base = mmap(NULL, new_size, PROT_READ | PROT_WRITE, flags, -1, 0); + if (base != MAP_FAILED) { + base_size = new_size; + } else if (flags & MAP_HUGETLB) { + flags &= ~(MAP_HUGETLB | MAP_HUGE_2MB); + base = mmap(NULL, size, PROT_READ | PROT_WRITE, flags, -1, 0); + } + +#else + base = mmap(NULL, size, PROT_READ | PROT_WRITE, flags, -1, 0); +#endif + if (base == MAP_FAILED) + base = NULL; + aligned = base; +#elif defined(HAVE_POSIX_MEMALIGN) + if ((errno = posix_memalign((void **)&base, 64, size)) != 0) + base = NULL; + aligned = base; +#else + base = aligned = NULL; + if (size + 63 < size) { + errno = ENOMEM; + } else if ((base = malloc(size + 63)) != NULL) { + aligned = base + 63; + aligned -= (uintptr_t)aligned & 63; + } +#endif + region->base = base; + region->aligned = aligned; + region->base_size = base ? base_size : 0; + region->aligned_size = base ? size : 0; + return aligned; +} + +static inline void init_region(yescrypt_region_t *region) +{ + region->base = region->aligned = NULL; + region->base_size = region->aligned_size = 0; +} + +static int free_region(yescrypt_region_t *region) +{ +return 0; + if (region->base) { +#ifdef MAP_ANON + if (munmap(region->base, region->base_size)) + return -1; +#else + free(region->base); +#endif + } + init_region(region); + return 0; +} diff --git a/deps/yescrypt-master/yescrypt-ref.c b/deps/yescrypt-master/yescrypt-ref.c new file mode 100644 index 000000000..532304519 --- /dev/null +++ b/deps/yescrypt-master/yescrypt-ref.c @@ -0,0 +1,925 @@ +/*- + * Copyright 2009 Colin Percival + * Copyright 2013-2018 Alexander Peslyak + * All rights reserved. + * + * 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. + * + * This file was originally written by Colin Percival as part of the Tarsnap + * online backup system. + * + * This is the reference implementation. Its purpose is to provide a simple + * human- and machine-readable specification that implementations intended + * for actual use should be tested against. It is deliberately mostly not + * optimized, and it is not meant to be used in production. Instead, use + * yescrypt-opt.c. + */ + +#ifdef __GNUC__ +#warning "This reference implementation is deliberately mostly not optimized, nor does it make any attempt not to leave sensitive data in memory. Use yescrypt-opt.c instead unless you're testing (against) the reference implementation on purpose." +#endif + +#include +#include +#include +#include + +#include "sha256.h" +#include "sysendian.h" + +#define YESCRYPT_INTERNAL +#include "yescrypt.h" + +static void blkcpy(uint32_t *dst, const uint32_t *src, size_t count) +{ + do { + *dst++ = *src++; + } while (--count); +} + +static void blkxor(uint32_t *dst, const uint32_t *src, size_t count) +{ + do { + *dst++ ^= *src++; + } while (--count); +} + +/** + * salsa20(B): + * Apply the Salsa20 core to the provided block. + */ +static void salsa20(uint32_t B[16], uint32_t rounds) +{ + uint32_t x[16]; + size_t i; + + /* SIMD unshuffle */ + for (i = 0; i < 16; i++) + x[i * 5 % 16] = B[i]; + + for (i = 0; i < rounds; i += 2) { +#define R(a,b) (((a) << (b)) | ((a) >> (32 - (b)))) + /* Operate on columns */ + x[ 4] ^= R(x[ 0]+x[12], 7); x[ 8] ^= R(x[ 4]+x[ 0], 9); + x[12] ^= R(x[ 8]+x[ 4],13); x[ 0] ^= R(x[12]+x[ 8],18); + + x[ 9] ^= R(x[ 5]+x[ 1], 7); x[13] ^= R(x[ 9]+x[ 5], 9); + x[ 1] ^= R(x[13]+x[ 9],13); x[ 5] ^= R(x[ 1]+x[13],18); + + x[14] ^= R(x[10]+x[ 6], 7); x[ 2] ^= R(x[14]+x[10], 9); + x[ 6] ^= R(x[ 2]+x[14],13); x[10] ^= R(x[ 6]+x[ 2],18); + + x[ 3] ^= R(x[15]+x[11], 7); x[ 7] ^= R(x[ 3]+x[15], 9); + x[11] ^= R(x[ 7]+x[ 3],13); x[15] ^= R(x[11]+x[ 7],18); + + /* Operate on rows */ + x[ 1] ^= R(x[ 0]+x[ 3], 7); x[ 2] ^= R(x[ 1]+x[ 0], 9); + x[ 3] ^= R(x[ 2]+x[ 1],13); x[ 0] ^= R(x[ 3]+x[ 2],18); + + x[ 6] ^= R(x[ 5]+x[ 4], 7); x[ 7] ^= R(x[ 6]+x[ 5], 9); + x[ 4] ^= R(x[ 7]+x[ 6],13); x[ 5] ^= R(x[ 4]+x[ 7],18); + + x[11] ^= R(x[10]+x[ 9], 7); x[ 8] ^= R(x[11]+x[10], 9); + x[ 9] ^= R(x[ 8]+x[11],13); x[10] ^= R(x[ 9]+x[ 8],18); + + x[12] ^= R(x[15]+x[14], 7); x[13] ^= R(x[12]+x[15], 9); + x[14] ^= R(x[13]+x[12],13); x[15] ^= R(x[14]+x[13],18); +#undef R + } + + /* SIMD shuffle */ + for (i = 0; i < 16; i++) + B[i] += x[i * 5 % 16]; +} + +/** + * blockmix_salsa8(B, Y, r): + * Compute B = BlockMix_{salsa20/8, r}(B). The input B must be 128r bytes in + * length; the temporary space Y must also be the same size. + */ +static void blockmix_salsa8(uint32_t *B, uint32_t *Y, size_t r) +{ + uint32_t X[16]; + size_t i; + + /* 1: X <-- B_{2r - 1} */ + blkcpy(X, &B[(2 * r - 1) * 16], 16); + + /* 2: for i = 0 to 2r - 1 do */ + for (i = 0; i < 2 * r; i++) { + /* 3: X <-- H(X xor B_i) */ + blkxor(X, &B[i * 16], 16); + salsa20(X, 8); + + /* 4: Y_i <-- X */ + blkcpy(&Y[i * 16], X, 16); + } + + /* 6: B' <-- (Y_0, Y_2 ... Y_{2r-2}, Y_1, Y_3 ... Y_{2r-1}) */ + for (i = 0; i < r; i++) + blkcpy(&B[i * 16], &Y[(i * 2) * 16], 16); + for (i = 0; i < r; i++) + blkcpy(&B[(i + r) * 16], &Y[(i * 2 + 1) * 16], 16); +} + +/* These are tunable, but they must meet certain constraints */ +#define PWXsimple 2 +#define PWXgather 4 +#define PWXrounds 6 +#define Swidth 8 + +/* Derived values. Not tunable on their own. */ +#define PWXbytes (PWXgather * PWXsimple * 8) +#define PWXwords (PWXbytes / sizeof(uint32_t)) +#define Sbytes (3 * (1 << Swidth) * PWXsimple * 8) +#define Swords (Sbytes / sizeof(uint32_t)) +#define Smask (((1 << Swidth) - 1) * PWXsimple * 8) +#define rmin ((PWXbytes + 127) / 128) + +typedef struct { + uint32_t *S; + uint32_t (*S0)[2], (*S1)[2], (*S2)[2]; + size_t w; +} pwxform_ctx_t; + +/** + * pwxform(B): + * Transform the provided block using the provided S-boxes. + */ +static void pwxform(uint32_t *B, pwxform_ctx_t *ctx) +{ + uint32_t (*X)[PWXsimple][2] = (uint32_t (*)[PWXsimple][2])B; + uint32_t (*S0)[2] = ctx->S0, (*S1)[2] = ctx->S1, (*S2)[2] = ctx->S2; + size_t w = ctx->w; + size_t i, j, k; + + /* 1: for i = 0 to PWXrounds - 1 do */ + for (i = 0; i < PWXrounds; i++) { + /* 2: for j = 0 to PWXgather - 1 do */ + for (j = 0; j < PWXgather; j++) { + uint32_t xl = X[j][0][0]; + uint32_t xh = X[j][0][1]; + uint32_t (*p0)[2], (*p1)[2]; + + /* 3: p0 <-- (lo(B_{j,0}) & Smask) / (PWXsimple * 8) */ + p0 = S0 + (xl & Smask) / sizeof(*S0); + /* 4: p1 <-- (hi(B_{j,0}) & Smask) / (PWXsimple * 8) */ + p1 = S1 + (xh & Smask) / sizeof(*S1); + + /* 5: for k = 0 to PWXsimple - 1 do */ + for (k = 0; k < PWXsimple; k++) { + uint64_t x, s0, s1; + + /* 6: B_{j,k} <-- (hi(B_{j,k}) * lo(B_{j,k}) + S0_{p0,k}) xor S1_{p1,k} */ + s0 = ((uint64_t)p0[k][1] << 32) + p0[k][0]; + s1 = ((uint64_t)p1[k][1] << 32) + p1[k][0]; + + xl = X[j][k][0]; + xh = X[j][k][1]; + + x = (uint64_t)xh * xl; + x += s0; + x ^= s1; + + X[j][k][0] = x; + X[j][k][1] = x >> 32; + + /* 8: if (i != 0) and (i != PWXrounds - 1) */ + if (i != 0 && i != PWXrounds - 1) { + /* 9: S2_w <-- B_j */ + S2[w][0] = x; + S2[w][1] = x >> 32; + /* 10: w <-- w + 1 */ + w++; + } + } + } + } + + /* 14: (S0, S1, S2) <-- (S2, S0, S1) */ + ctx->S0 = S2; + ctx->S1 = S0; + ctx->S2 = S1; + /* 15: w <-- w mod 2^Swidth */ + ctx->w = w & ((1 << Swidth) * PWXsimple - 1); +} + +/** + * blockmix_pwxform(B, ctx, r): + * Compute B = BlockMix_pwxform{salsa20/2, ctx, r}(B). The input B must be + * 128r bytes in length. + */ +static void blockmix_pwxform(uint32_t *B, pwxform_ctx_t *ctx, size_t r) +{ + uint32_t X[PWXwords]; + size_t r1, i; + + /* Convert 128-byte blocks to PWXbytes blocks */ + /* 1: r_1 <-- 128r / PWXbytes */ + r1 = 128 * r / PWXbytes; + + /* 2: X <-- B'_{r_1 - 1} */ + blkcpy(X, &B[(r1 - 1) * PWXwords], PWXwords); + + /* 3: for i = 0 to r_1 - 1 do */ + for (i = 0; i < r1; i++) { + /* 4: if r_1 > 1 */ + if (r1 > 1) { + /* 5: X <-- X xor B'_i */ + blkxor(X, &B[i * PWXwords], PWXwords); + } + + /* 7: X <-- pwxform(X) */ + pwxform(X, ctx); + + /* 8: B'_i <-- X */ + blkcpy(&B[i * PWXwords], X, PWXwords); + } + + /* 10: i <-- floor((r_1 - 1) * PWXbytes / 64) */ + i = (r1 - 1) * PWXbytes / 64; + + /* 11: B_i <-- H(B_i) */ + salsa20(&B[i * 16], 2); + +#if 1 /* No-op with our current pwxform settings, but do it to make sure */ + /* 12: for i = i + 1 to 2r - 1 do */ + for (i++; i < 2 * r; i++) { + /* 13: B_i <-- H(B_i xor B_{i-1}) */ + blkxor(&B[i * 16], &B[(i - 1) * 16], 16); + salsa20(&B[i * 16], 2); + } +#endif +} + +/** + * integerify(B, r): + * Return the result of parsing B_{2r-1} as a little-endian integer. + */ +static uint64_t integerify(const uint32_t *B, size_t r) +{ +/* + * Our 32-bit words are in host byte order, and word 13 is the second word of + * B_{2r-1} due to SIMD shuffling. The 64-bit value we return is also in host + * byte order, as it should be. + */ + const uint32_t *X = &B[(2 * r - 1) * 16]; + return ((uint64_t)X[13] << 32) + X[0]; +} + +/** + * p2floor(x): + * Largest power of 2 not greater than argument. + */ +static uint64_t p2floor(uint64_t x) +{ + uint64_t y; + while ((y = x & (x - 1))) + x = y; + return x; +} + +/** + * wrap(x, i): + * Wrap x to the range 0 to i-1. + */ +static uint64_t wrap(uint64_t x, uint64_t i) +{ + uint64_t n = p2floor(i); + return (x & (n - 1)) + (i - n); +} + +/** + * smix1(B, r, N, flags, V, NROM, VROM, XY, ctx): + * Compute first loop of B = SMix_r(B, N). The input B must be 128r bytes in + * length; the temporary storage V must be 128rN bytes in length; the temporary + * storage XY must be 256r bytes in length. + */ +static void smix1(uint32_t *B, size_t r, uint64_t N, yescrypt_flags_t flags, + uint32_t *V, uint64_t NROM, const uint32_t *VROM, + uint32_t *XY, pwxform_ctx_t *ctx) +{ + size_t s = 32 * r; + uint32_t *X = XY; + uint32_t *Y = &XY[s]; + uint64_t i, j; + size_t k; + + /* 1: X <-- B */ + for (k = 0; k < 2 * r; k++) + for (i = 0; i < 16; i++) + X[k * 16 + i] = le32dec(&B[k * 16 + (i * 5 % 16)]); + + /* 2: for i = 0 to N - 1 do */ + for (i = 0; i < N; i++) { + /* 3: V_i <-- X */ + blkcpy(&V[i * s], X, s); + + if (VROM && i == 0) { + /* X <-- X xor VROM_{NROM-1} */ + blkxor(X, &VROM[(NROM - 1) * s], s); + } else if (VROM && (i & 1)) { + /* j <-- Integerify(X) mod NROM */ + j = integerify(X, r) & (NROM - 1); + + /* X <-- X xor VROM_j */ + blkxor(X, &VROM[j * s], s); + } else if ((flags & YESCRYPT_RW) && i > 1) { + /* j <-- Wrap(Integerify(X), i) */ + j = wrap(integerify(X, r), i); + + /* X <-- X xor V_j */ + blkxor(X, &V[j * s], s); + } + + /* 4: X <-- H(X) */ + if (ctx) + blockmix_pwxform(X, ctx, r); + else + blockmix_salsa8(X, Y, r); + } + + /* B' <-- X */ + for (k = 0; k < 2 * r; k++) + for (i = 0; i < 16; i++) + le32enc(&B[k * 16 + (i * 5 % 16)], X[k * 16 + i]); +} + +/** + * smix2(B, r, N, Nloop, flags, V, NROM, VROM, XY, ctx): + * Compute second loop of B = SMix_r(B, N). The input B must be 128r bytes in + * length; the temporary storage V must be 128rN bytes in length; the temporary + * storage XY must be 256r bytes in length. The value N must be a power of 2 + * greater than 1. + */ +static void smix2(uint32_t *B, size_t r, uint64_t N, uint64_t Nloop, + yescrypt_flags_t flags, uint32_t *V, uint64_t NROM, + const uint32_t *VROM, uint32_t *XY, pwxform_ctx_t *ctx) +{ + size_t s = 32 * r; + uint32_t *X = XY; + uint32_t *Y = &XY[s]; + uint64_t i, j; + size_t k; + + /* X <-- B */ + for (k = 0; k < 2 * r; k++) + for (i = 0; i < 16; i++) + X[k * 16 + i] = le32dec(&B[k * 16 + (i * 5 % 16)]); + + /* 6: for i = 0 to N - 1 do */ + for (i = 0; i < Nloop; i++) { + if (VROM && (i & 1)) { + /* j <-- Integerify(X) mod NROM */ + j = integerify(X, r) & (NROM - 1); + + /* X <-- H(X xor VROM_j) */ + blkxor(X, &VROM[j * s], s); + } else { + /* 7: j <-- Integerify(X) mod N */ + j = integerify(X, r) & (N - 1); + + /* 8.1: X <-- X xor V_j */ + blkxor(X, &V[j * s], s); + /* V_j <-- X */ + if (flags & YESCRYPT_RW) + blkcpy(&V[j * s], X, s); + } + + /* 8.2: X <-- H(X) */ + if (ctx) + blockmix_pwxform(X, ctx, r); + else + blockmix_salsa8(X, Y, r); + } + + /* 10: B' <-- X */ + for (k = 0; k < 2 * r; k++) + for (i = 0; i < 16; i++) + le32enc(&B[k * 16 + (i * 5 % 16)], X[k * 16 + i]); +} + +/** + * smix(B, r, N, p, t, flags, V, NROM, VROM, XY, ctx, passwd): + * Compute B = SMix_r(B, N). The input B must be 128rp bytes in length; the + * temporary storage V must be 128rN bytes in length; the temporary storage + * XY must be 256r bytes in length. The value N must be a power of 2 greater + * than 1. + */ +static void smix(uint32_t *B, size_t r, uint64_t N, uint32_t p, uint32_t t, + yescrypt_flags_t flags, + uint32_t *V, uint64_t NROM, const uint32_t *VROM, + uint32_t *XY, pwxform_ctx_t *ctx, uint8_t *passwd) +{ + size_t s = 32 * r; + uint64_t Nchunk, Nloop_all, Nloop_rw, Vchunk; + uint32_t i; + + /* 1: n <-- N / p */ + Nchunk = N / p; + + /* 2: Nloop_all <-- fNloop(n, t, flags) */ + Nloop_all = Nchunk; + if (flags & YESCRYPT_RW) { + if (t <= 1) { + if (t) + Nloop_all *= 2; /* 2/3 */ + Nloop_all = (Nloop_all + 2) / 3; /* 1/3, round up */ + } else { + Nloop_all *= t - 1; + } + } else if (t) { + if (t == 1) + Nloop_all += (Nloop_all + 1) / 2; /* 1.5, round up */ + Nloop_all *= t; + } + + /* 6: Nloop_rw <-- 0 */ + Nloop_rw = 0; + if (flags & YESCRYPT_INIT_SHARED) { + Nloop_rw = Nloop_all; + } else { + /* 3: if YESCRYPT_RW flag is set */ + if (flags & YESCRYPT_RW) { + /* 4: Nloop_rw <-- Nloop_all / p */ + Nloop_rw = Nloop_all / p; + } + } + + /* 8: n <-- n - (n mod 2) */ + Nchunk &= ~(uint64_t)1; /* round down to even */ + /* 9: Nloop_all <-- Nloop_all + (Nloop_all mod 2) */ + Nloop_all++; Nloop_all &= ~(uint64_t)1; /* round up to even */ + /* 10: Nloop_rw <-- Nloop_rw + (Nloop_rw mod 2) */ + Nloop_rw++; Nloop_rw &= ~(uint64_t)1; /* round up to even */ + + /* 11: for i = 0 to p - 1 do */ + /* 12: u <-- in */ + for (i = 0, Vchunk = 0; i < p; i++, Vchunk += Nchunk) { + /* 13: if i = p - 1 */ + /* 14: n <-- N - u */ + /* 15: end if */ + /* 16: v <-- u + n - 1 */ + uint64_t Np = (i < p - 1) ? Nchunk : (N - Vchunk); + uint32_t *Bp = &B[i * s]; + uint32_t *Vp = &V[Vchunk * s]; + pwxform_ctx_t *ctx_i = NULL; + /* 17: if YESCRYPT_RW flag is set */ + if (flags & YESCRYPT_RW) { + ctx_i = &ctx[i]; + /* 18: SMix1_1(B_i, Sbytes / 128, S_i, no flags) */ + smix1(Bp, 1, Sbytes / 128, 0 /* no flags */, + ctx_i->S, 0, NULL, XY, NULL); + /* 19: S2_i <-- S_{i,0...2^Swidth-1} */ + ctx_i->S2 = (uint32_t (*)[2])ctx_i->S; + /* 20: S1_i <-- S_{i,2^Swidth...2*2^Swidth-1} */ + ctx_i->S1 = ctx_i->S2 + (1 << Swidth) * PWXsimple; + /* 21: S0_i <-- S_{i,2*2^Swidth...3*2^Swidth-1} */ + ctx_i->S0 = ctx_i->S1 + (1 << Swidth) * PWXsimple; + /* 22: w_i <-- 0 */ + ctx_i->w = 0; + /* 23: if i = 0 */ + if (i == 0) { + /* 24: passwd <-- HMAC-SHA256(B_{0,2r-1}, passwd) */ + HMAC_SHA256_Buf(Bp + (s - 16), 64, + passwd, 32, passwd); + } + } + /* 27: SMix1_r(B_i, n, V_{u..v}, flags) */ + smix1(Bp, r, Np, flags, Vp, NROM, VROM, XY, ctx_i); + /* 28: SMix2_r(B_i, p2floor(n), Nloop_rw, V_{u..v}, flags) */ + smix2(Bp, r, p2floor(Np), Nloop_rw, flags, Vp, + NROM, VROM, XY, ctx_i); + } + + /* 30: for i = 0 to p - 1 do */ + for (i = 0; i < p; i++) { + uint32_t *Bp = &B[i * s]; + /* 31: SMix2_r(B_i, N, Nloop_all - Nloop_rw, V, flags excluding YESCRYPT_RW) */ + smix2(Bp, r, N, Nloop_all - Nloop_rw, flags & ~YESCRYPT_RW, + V, NROM, VROM, XY, (flags & YESCRYPT_RW) ? &ctx[i] : NULL); + } +} + +/** + * yescrypt_kdf_body(shared, local, passwd, passwdlen, salt, saltlen, + * flags, N, r, p, t, NROM, buf, buflen): + * Compute scrypt(passwd[0 .. passwdlen - 1], salt[0 .. saltlen - 1], N, r, + * p, buflen), or a revision of scrypt as requested by flags and shared, and + * write the result into buf. + * + * shared and flags may request special modes as described in yescrypt.h. + * + * local is the thread-local data structure, allowing optimized implementations + * to preserve and reuse a memory allocation across calls, thereby reducing its + * overhead (this reference implementation does not make that optimization). + * + * t controls computation time while not affecting peak memory usage. + * + * Return 0 on success; or -1 on error. + */ +static int yescrypt_kdf_body(const yescrypt_shared_t *shared, + yescrypt_local_t *local, + const uint8_t *passwd, size_t passwdlen, + const uint8_t *salt, size_t saltlen, + yescrypt_flags_t flags, uint64_t N, uint32_t r, uint32_t p, uint32_t t, + uint64_t NROM, + uint8_t *buf, size_t buflen) +{ + int retval = -1; + const uint32_t *VROM; + size_t B_size, V_size; + uint32_t *B, *V, *XY, *S; + pwxform_ctx_t *pwxform_ctx; + uint32_t sha256[8]; + uint8_t dk[sizeof(sha256)], *dkp = buf; + uint32_t i; + + /* Sanity-check parameters */ + switch (flags & YESCRYPT_MODE_MASK) { + case 0: /* classic scrypt - can't have anything non-standard */ + if (flags || t || NROM) + goto out_EINVAL; + break; + case YESCRYPT_WORM: + if (flags != YESCRYPT_WORM || NROM) + goto out_EINVAL; + break; + case YESCRYPT_RW: + if (flags != (flags & YESCRYPT_KNOWN_FLAGS)) + goto out_EINVAL; +#if PWXsimple == 2 && PWXgather == 4 && PWXrounds == 6 && Sbytes == 12288 + if ((flags & YESCRYPT_RW_FLAVOR_MASK) == + (YESCRYPT_ROUNDS_6 | YESCRYPT_GATHER_4 | + YESCRYPT_SIMPLE_2 | YESCRYPT_SBOX_12K)) + break; +#else +#error "Unsupported pwxform settings" +#endif + /* FALLTHRU */ + default: + goto out_EINVAL; + } +#if SIZE_MAX > UINT32_MAX + if (buflen > (((uint64_t)1 << 32) - 1) * 32) + goto out_EINVAL; +#endif + if ((uint64_t)r * (uint64_t)p >= 1 << 30) + goto out_EINVAL; + if ((N & (N - 1)) != 0 || N <= 1 || r < 1 || p < 1) + goto out_EINVAL; + if (r > SIZE_MAX / 128 / p || +#if SIZE_MAX / 256 <= UINT32_MAX + r > SIZE_MAX / 256 || +#endif + N > SIZE_MAX / 128 / r) + goto out_EINVAL; + if (N > UINT64_MAX / ((uint64_t)t + 1)) + goto out_EINVAL; + if (flags & YESCRYPT_RW) { + if (N / p <= 1 || r < rmin || + p > SIZE_MAX / Sbytes || + p > SIZE_MAX / sizeof(*pwxform_ctx)) + goto out_EINVAL; + } + + VROM = NULL; + if (shared) { + uint64_t expected_size = (size_t)128 * r * NROM; + if ((NROM & (NROM - 1)) != 0 || NROM <= 1 || + shared->aligned_size < expected_size) + goto out_EINVAL; + if (!(flags & YESCRYPT_INIT_SHARED)) { + uint32_t *tag = (uint32_t *) + ((uint8_t *)shared->aligned + expected_size - 48); + uint64_t tag1 = ((uint64_t)tag[1] << 32) + tag[0]; + uint64_t tag2 = ((uint64_t)tag[3] << 32) + tag[2]; + if (tag1 != YESCRYPT_ROM_TAG1 || tag2 != YESCRYPT_ROM_TAG2) + goto out_EINVAL; + } + VROM = shared->aligned; + } else { + if (NROM) + goto out_EINVAL; + } + + /* Allocate memory */ + V_size = (size_t)128 * r * N; + if (flags & YESCRYPT_INIT_SHARED) { + V = (uint32_t *)local->aligned; + if (local->aligned_size < V_size) { + if (local->base || local->aligned || + local->base_size || local->aligned_size) + goto out_EINVAL; + if ((V = malloc(V_size)) == NULL) + return -1; + local->base = local->aligned = V; + local->base_size = local->aligned_size = V_size; + } + if (flags & YESCRYPT_ALLOC_ONLY) + return -2; /* expected "failure" */ + } else { + if ((V = malloc(V_size)) == NULL) + return -1; + } + B_size = (size_t)128 * r * p; + if ((B = malloc(B_size)) == NULL) + goto free_V; + if ((XY = malloc((size_t)256 * r)) == NULL) + goto free_B; + S = NULL; + pwxform_ctx = NULL; + if (flags & YESCRYPT_RW) { + if ((S = malloc((size_t)Sbytes * p)) == NULL) + goto free_XY; + if ((pwxform_ctx = malloc(sizeof(*pwxform_ctx) * p)) == NULL) + goto free_S; + } + + if (flags) { + HMAC_SHA256_Buf("yescrypt-prehash", + (flags & YESCRYPT_PREHASH) ? 16 : 8, + passwd, passwdlen, (uint8_t *)sha256); + passwd = (uint8_t *)sha256; + passwdlen = sizeof(sha256); + } + + /* 1: (B_0 ... B_{p-1}) <-- PBKDF2(P, S, 1, p * MFLen) */ + PBKDF2_SHA256(passwd, passwdlen, salt, saltlen, 1, + (uint8_t *)B, B_size); + + if (flags) + blkcpy(sha256, B, sizeof(sha256) / sizeof(sha256[0])); + + if (flags & YESCRYPT_RW) { + for (i = 0; i < p; i++) + pwxform_ctx[i].S = &S[i * Swords]; + smix(B, r, N, p, t, flags, V, NROM, VROM, XY, pwxform_ctx, + (uint8_t *)sha256); + } else { + /* 2: for i = 0 to p - 1 do */ + for (i = 0; i < p; i++) { + /* 3: B_i <-- MF(B_i, N) */ + smix(&B[(size_t)32 * r * i], r, N, 1, t, flags, V, + NROM, VROM, XY, NULL, NULL); + } + } + + dkp = buf; + if (flags && buflen < sizeof(dk)) { + PBKDF2_SHA256(passwd, passwdlen, (uint8_t *)B, B_size, 1, + dk, sizeof(dk)); + dkp = dk; + } + + /* 5: DK <-- PBKDF2(P, B, 1, dkLen) */ + PBKDF2_SHA256(passwd, passwdlen, (uint8_t *)B, B_size, 1, buf, buflen); + + /* + * Except when computing classic scrypt, allow all computation so far + * to be performed on the client. The final steps below match those of + * SCRAM (RFC 5802), so that an extension of SCRAM (with the steps so + * far in place of SCRAM's use of PBKDF2 and with SHA-256 in place of + * SCRAM's use of SHA-1) would be usable with yescrypt hashes. + */ + if (flags && !(flags & YESCRYPT_PREHASH)) { + /* Compute ClientKey */ + HMAC_SHA256_Buf(dkp, sizeof(dk), "Client Key", 10, + (uint8_t *)sha256); + /* Compute StoredKey */ + { + size_t clen = buflen; + if (clen > sizeof(dk)) + clen = sizeof(dk); + SHA256_Buf((uint8_t *)sha256, sizeof(sha256), dk); + memcpy(buf, dk, clen); + } + } + + /* Success! */ + retval = 0; + + /* Free memory */ + free(pwxform_ctx); +free_S: + free(S); +free_XY: + free(XY); +free_B: + free(B); +free_V: + if (!(flags & YESCRYPT_INIT_SHARED)) + free(V); + + return retval; + +out_EINVAL: + errno = EINVAL; + return -1; +} + +/** + * yescrypt_kdf(shared, local, passwd, passwdlen, salt, saltlen, params, + * buf, buflen): + * Compute scrypt or its revision as requested by the parameters. The inputs + * to this function are the same as those for yescrypt_kdf_body() above, with + * the addition of g, which controls hash upgrades (0 for no upgrades so far). + */ +int yescrypt_kdf(const yescrypt_shared_t *shared, yescrypt_local_t *local, + const uint8_t *passwd, size_t passwdlen, + const uint8_t *salt, size_t saltlen, + const yescrypt_params_t *params, + uint8_t *buf, size_t buflen) +{ + yescrypt_flags_t flags = params->flags; + uint64_t N = params->N; + uint32_t r = params->r; + uint32_t p = params->p; + uint32_t t = params->t; + uint32_t g = params->g; + uint64_t NROM = params->NROM; + uint8_t dk[32]; + + /* Support for hash upgrades has been temporarily removed */ + if (g) { + errno = EINVAL; + return -1; + } + + if ((flags & YESCRYPT_RW) && + p >= 1 && N / p >= 0x100 && N / p * r >= 0x20000) { + /* + * This reference implementation's yescrypt_kdf_body() + * (de)allocates memory on each call, which defeats the purpose + * of this pre-hashing. The optimized implementations, which + * you should actually use, make the larger allocation first + * and then reuse it. Thus, this implementation doing things + * differently serves as a test that the computation result is + * unaffected by such differences. + */ + int retval = yescrypt_kdf_body(shared, local, + passwd, passwdlen, salt, saltlen, + flags | YESCRYPT_PREHASH, N >> 6, r, p, 0, NROM, + dk, sizeof(dk)); + if (retval) + return retval; + passwd = dk; + passwdlen = sizeof(dk); + } + + return yescrypt_kdf_body(shared, local, + passwd, passwdlen, salt, saltlen, + flags, N, r, p, t, NROM, buf, buflen); +} + +int yescrypt_init_shared(yescrypt_shared_t *shared, + const uint8_t *seed, size_t seedlen, + const yescrypt_params_t *params) +{ + yescrypt_flags_t flags = params->flags; + uint64_t N = params->NROM; + uint32_t r = params->r; + uint32_t p = params->p; + uint32_t t = params->t; + yescrypt_shared_t half1, half2; + uint8_t salt[32]; + uint32_t *tag; + + if (!(params->flags & YESCRYPT_RW) || params->N || params->g) + return -1; + + if (flags & YESCRYPT_SHARED_PREALLOCATED) { + if (!shared->aligned || !shared->aligned_size) + return -1; + +/* Overwrite a possible old ROM tag before we overwrite the rest */ + tag = (uint32_t *) + ((uint8_t *)shared->aligned + shared->aligned_size - 48); + memset(tag, 0, 48); + } else { + shared->base = shared->aligned = NULL; + shared->base_size = shared->aligned_size = 0; + + if (yescrypt_kdf_body(NULL, shared, NULL, 0, NULL, 0, + flags | YESCRYPT_INIT_SHARED | YESCRYPT_ALLOC_ONLY, + N, r, p, t, 0, NULL, 0) != -2 || !shared->aligned) + goto fail; + } + + half1 = half2 = *shared; + half1.aligned_size /= 2; + half2.aligned = (uint8_t *)half2.aligned + half1.aligned_size; + half2.aligned_size = half1.aligned_size; + N /= 2; + + if (yescrypt_kdf_body(NULL, &half1, + seed, seedlen, (const uint8_t *)"yescrypt-ROMhash", 16, + flags | YESCRYPT_INIT_SHARED, N, r, p, t, 0, + salt, sizeof(salt))) + goto fail; + + if (yescrypt_kdf_body(&half1, &half2, + seed, seedlen, salt, sizeof(salt), + flags | YESCRYPT_INIT_SHARED, N, r, p, t, N, + salt, sizeof(salt))) + goto fail; + + if (yescrypt_kdf_body(&half2, &half1, + seed, seedlen, salt, sizeof(salt), + flags | YESCRYPT_INIT_SHARED, N, r, p, t, N, + salt, sizeof(salt))) + goto fail; + + tag = (uint32_t *) + ((uint8_t *)shared->aligned + shared->aligned_size - 48); + tag[0] = YESCRYPT_ROM_TAG1 & 0xffffffffU; + tag[1] = YESCRYPT_ROM_TAG1 >> 32; + tag[2] = YESCRYPT_ROM_TAG2 & 0xffffffffU; + tag[3] = YESCRYPT_ROM_TAG2 >> 32; + tag[4] = le32dec(salt); + tag[5] = le32dec(salt + 4); + tag[6] = le32dec(salt + 8); + tag[7] = le32dec(salt + 12); + tag[8] = le32dec(salt + 16); + tag[9] = le32dec(salt + 20); + tag[10] = le32dec(salt + 24); + tag[11] = le32dec(salt + 28); + + return 0; + +fail: + if (!(flags & YESCRYPT_SHARED_PREALLOCATED)) + free(shared->base); + return -1; +} + +yescrypt_binary_t *yescrypt_digest_shared(yescrypt_shared_t *shared) +{ + static yescrypt_binary_t digest; + uint32_t *tag; + uint64_t tag1, tag2; + + if (shared->aligned_size < 48) + return NULL; + + tag = (uint32_t *) + ((uint8_t *)shared->aligned + shared->aligned_size - 48); + + tag1 = ((uint64_t)tag[1] << 32) + tag[0]; + tag2 = ((uint64_t)tag[3] << 32) + tag[2]; + if (tag1 != YESCRYPT_ROM_TAG1 || tag2 != YESCRYPT_ROM_TAG2) + return NULL; + + le32enc(digest.uc, tag[4]); + le32enc(digest.uc + 4, tag[5]); + le32enc(digest.uc + 8, tag[6]); + le32enc(digest.uc + 12, tag[7]); + le32enc(digest.uc + 16, tag[8]); + le32enc(digest.uc + 20, tag[9]); + le32enc(digest.uc + 24, tag[10]); + le32enc(digest.uc + 28, tag[11]); + + return &digest; +} + +int yescrypt_free_shared(yescrypt_shared_t *shared) +{ + free(shared->base); + shared->base = shared->aligned = NULL; + shared->base_size = shared->aligned_size = 0; + return 0; +} + +int yescrypt_init_local(yescrypt_local_t *local) +{ +/* The reference implementation doesn't use the local structure */ + local->base = local->aligned = NULL; + local->base_size = local->aligned_size = 0; + return 0; +} + +int yescrypt_free_local(yescrypt_local_t *local) +{ +/* The reference implementation frees its memory in yescrypt_kdf() */ + (void)local; /* unused */ + return 0; +} diff --git a/deps/yescrypt-master/yescrypt.h b/deps/yescrypt-master/yescrypt.h new file mode 100644 index 000000000..f00b5a88a --- /dev/null +++ b/deps/yescrypt-master/yescrypt.h @@ -0,0 +1,346 @@ +/*- + * Copyright 2009 Colin Percival + * Copyright 2013-2018 Alexander Peslyak + * All rights reserved. + * + * 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. + * + * This file was originally written by Colin Percival as part of the Tarsnap + * online backup system. + */ +#ifndef _YESCRYPT_H_ +#define _YESCRYPT_H_ + +#include +#include /* for size_t */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * crypto_scrypt(passwd, passwdlen, salt, saltlen, N, r, p, buf, buflen): + * Compute scrypt(passwd[0 .. passwdlen - 1], salt[0 .. saltlen - 1], N, r, + * p, buflen) and write the result into buf. The parameters r, p, and buflen + * must satisfy r * p < 2^30 and buflen <= (2^32 - 1) * 32. The parameter N + * must be a power of 2 greater than 1. + * + * Return 0 on success; or -1 on error. + * + * MT-safe as long as buf is local to the thread. + */ +extern int crypto_scrypt(const uint8_t *passwd, size_t passwdlen, + const uint8_t *salt, size_t saltlen, + uint64_t N, uint32_t r, uint32_t p, uint8_t *buf, size_t buflen); + +/** + * Internal type used by the memory allocator. Please do not use it directly. + * Use yescrypt_shared_t and yescrypt_local_t as appropriate instead, since + * they might differ from each other in a future version. + */ +typedef struct { + void *base, *aligned; + size_t base_size, aligned_size; +} yescrypt_region_t; + +/** + * Types for shared (ROM) and thread-local (RAM) data structures. + */ +typedef yescrypt_region_t yescrypt_shared_t; +typedef yescrypt_region_t yescrypt_local_t; + +/** + * Two 64-bit tags placed 48 bytes to the end of a ROM in host byte endianness + * (and followed by 32 bytes of the ROM digest). + */ +#define YESCRYPT_ROM_TAG1 0x7470797263736579ULL /* "yescrypt" */ +#define YESCRYPT_ROM_TAG2 0x687361684d4f522dULL /* "-ROMhash" */ + +/** + * Type and possible values for the flags argument of yescrypt_kdf(), + * yescrypt_encode_params_r(), yescrypt_encode_params(). Most of these may be + * OR'ed together, except that YESCRYPT_WORM stands on its own. + * Please refer to the description of yescrypt_kdf() below for the meaning of + * these flags. + */ +typedef uint32_t yescrypt_flags_t; +/* Public */ +#define YESCRYPT_WORM 1 +#define YESCRYPT_RW 0x002 +#define YESCRYPT_ROUNDS_3 0x000 +#define YESCRYPT_ROUNDS_6 0x004 +#define YESCRYPT_GATHER_1 0x000 +#define YESCRYPT_GATHER_2 0x008 +#define YESCRYPT_GATHER_4 0x010 +#define YESCRYPT_GATHER_8 0x018 +#define YESCRYPT_SIMPLE_1 0x000 +#define YESCRYPT_SIMPLE_2 0x020 +#define YESCRYPT_SIMPLE_4 0x040 +#define YESCRYPT_SIMPLE_8 0x060 +#define YESCRYPT_SBOX_6K 0x000 +#define YESCRYPT_SBOX_12K 0x080 +#define YESCRYPT_SBOX_24K 0x100 +#define YESCRYPT_SBOX_48K 0x180 +#define YESCRYPT_SBOX_96K 0x200 +#define YESCRYPT_SBOX_192K 0x280 +#define YESCRYPT_SBOX_384K 0x300 +#define YESCRYPT_SBOX_768K 0x380 +/* Only valid for yescrypt_init_shared() */ +#define YESCRYPT_SHARED_PREALLOCATED 0x10000 +#ifdef YESCRYPT_INTERNAL +/* Private */ +#define YESCRYPT_MODE_MASK 0x003 +#define YESCRYPT_RW_FLAVOR_MASK 0x3fc +#define YESCRYPT_INIT_SHARED 0x01000000 +#define YESCRYPT_ALLOC_ONLY 0x08000000 +#define YESCRYPT_PREHASH 0x10000000 +#endif + +#define YESCRYPT_RW_DEFAULTS \ + (YESCRYPT_RW | \ + YESCRYPT_ROUNDS_6 | YESCRYPT_GATHER_4 | YESCRYPT_SIMPLE_2 | \ + YESCRYPT_SBOX_12K) + +#define YESCRYPT_DEFAULTS YESCRYPT_RW_DEFAULTS + +#ifdef YESCRYPT_INTERNAL +#define YESCRYPT_KNOWN_FLAGS \ + (YESCRYPT_MODE_MASK | YESCRYPT_RW_FLAVOR_MASK | \ + YESCRYPT_SHARED_PREALLOCATED | \ + YESCRYPT_INIT_SHARED | YESCRYPT_ALLOC_ONLY | YESCRYPT_PREHASH) +#endif + +/** + * yescrypt parameters combined into one struct. N, r, p are the same as in + * classic scrypt, except that the meaning of p changes when YESCRYPT_RW is + * set. flags, t, g, NROM are special to yescrypt. + */ +typedef struct { + yescrypt_flags_t flags; + uint64_t N; + uint32_t r, p, t, g; + uint64_t NROM; +} yescrypt_params_t; + +/** + * A 256-bit yescrypt hash, or a hash encryption key (which may itself have + * been derived as a yescrypt hash of a human-specified key string). + */ +typedef union { + unsigned char uc[32]; + uint64_t u64[4]; +} yescrypt_binary_t; + +/** + * yescrypt_init_shared(shared, seed, seedlen, params): + * Optionally allocate memory for and initialize the shared (ROM) data + * structure. The parameters flags, NROM, r, p, and t specify how the ROM is + * to be initialized, and seed and seedlen specify the initial seed affecting + * the data with which the ROM is filled. + * + * Return 0 on success; or -1 on error. + * + * If bit YESCRYPT_SHARED_PREALLOCATED in flags is set, then memory for the + * ROM is assumed to have been preallocated by the caller, with shared->aligned + * being the start address of the ROM and shared->aligned_size being its size + * (which must be sufficient for NROM, r, p). This may be used e.g. when the + * ROM is to be placed in a SysV shared memory segment allocated by the caller. + * + * MT-safe as long as shared is local to the thread. + */ +extern int yescrypt_init_shared(yescrypt_shared_t *shared, + const uint8_t *seed, size_t seedlen, const yescrypt_params_t *params); + +/** + * yescrypt_digest_shared(shared): + * Extract the previously stored message digest of the provided yescrypt ROM. + * + * Return pointer to the message digest on success; or NULL on error. + * + * MT-unsafe. + */ +extern yescrypt_binary_t *yescrypt_digest_shared(yescrypt_shared_t *shared); + +/** + * yescrypt_free_shared(shared): + * Free memory that had been allocated with yescrypt_init_shared(). + * + * Return 0 on success; or -1 on error. + * + * MT-safe as long as shared is local to the thread. + */ +extern int yescrypt_free_shared(yescrypt_shared_t *shared); + +/** + * yescrypt_init_local(local): + * Initialize the thread-local (RAM) data structure. Actual memory allocation + * is currently fully postponed until a call to yescrypt_kdf() or yescrypt_r(). + * + * Return 0 on success; or -1 on error. + * + * MT-safe as long as local is local to the thread. + */ +extern int yescrypt_init_local(yescrypt_local_t *local); + +/** + * yescrypt_free_local(local): + * Free memory that may have been allocated for an initialized thread-local + * (RAM) data structure. + * + * Return 0 on success; or -1 on error. + * + * MT-safe as long as local is local to the thread. + */ +extern int yescrypt_free_local(yescrypt_local_t *local); + +/** + * yescrypt_kdf(shared, local, passwd, passwdlen, salt, saltlen, params, + * buf, buflen): + * Compute scrypt(passwd[0 .. passwdlen - 1], salt[0 .. saltlen - 1], N, r, + * p, buflen), or a revision of scrypt as requested by flags and shared, and + * write the result into buf. The parameters N, r, p, and buflen must satisfy + * the same conditions as with crypto_scrypt(). t controls computation time + * while not affecting peak memory usage (t = 0 is optimal unless higher N*r + * is not affordable while higher t is). g controls hash upgrades (g = 0 for + * no upgrades so far). shared and flags may request special modes. local is + * the thread-local data structure, allowing to preserve and reuse a memory + * allocation across calls, thereby reducing processing overhead. + * + * Return 0 on success; or -1 on error. + * + * Classic scrypt is available by setting shared = NULL, flags = 0, and t = 0. + * + * Setting YESCRYPT_WORM enables only minimal deviations from classic scrypt: + * support for the t parameter, and pre- and post-hashing. + * + * Setting YESCRYPT_RW fully enables yescrypt. As a side effect of differences + * between the algorithms, it also prevents p > 1 from growing the threads' + * combined processing time and memory allocation (like it did with classic + * scrypt and YESCRYPT_WORM), treating p as a divider rather than a multiplier. + * + * Passing a shared structure, with ROM contents previously computed by + * yescrypt_init_shared(), enables the use of ROM and requires YESCRYPT_RW. + * + * In order to allow for initialization of the ROM to be split into a separate + * program (or separate invocation of the same program), the shared->aligned + * and shared->aligned_size fields may optionally be set by the caller directly + * (e.g., to a mapped SysV shm segment), without using yescrypt_init_shared(). + * + * local must be initialized with yescrypt_init_local(). + * + * MT-safe as long as local and buf are local to the thread. + */ +extern int yescrypt_kdf(const yescrypt_shared_t *shared, + yescrypt_local_t *local, + const uint8_t *passwd, size_t passwdlen, + const uint8_t *salt, size_t saltlen, + const yescrypt_params_t *params, + uint8_t *buf, size_t buflen); + +/** + * yescrypt_r(shared, local, passwd, passwdlen, setting, key, buf, buflen): + * Compute and encode an scrypt or enhanced scrypt hash of passwd given the + * parameters and salt value encoded in setting. If shared is not NULL, a ROM + * is used and YESCRYPT_RW is required. Otherwise, whether to compute classic + * scrypt, YESCRYPT_WORM (a slight deviation from classic scrypt), or + * YESCRYPT_RW (time-memory tradeoff discouraging modification) is determined + * by the setting string. shared (if not NULL) and local must be initialized + * as described above for yescrypt_kdf(). buf must be large enough (as + * indicated by buflen) to hold the encoded hash string. + * + * Return the encoded hash string on success; or NULL on error. + * + * MT-safe as long as local and buf are local to the thread. + */ +extern uint8_t *yescrypt_r(const yescrypt_shared_t *shared, + yescrypt_local_t *local, + const uint8_t *passwd, size_t passwdlen, + const uint8_t *setting, + const yescrypt_binary_t *key, + uint8_t *buf, size_t buflen); + +/** + * yescrypt(passwd, setting): + * Compute and encode an scrypt or enhanced scrypt hash of passwd given the + * parameters and salt value encoded in setting. Whether to compute classic + * scrypt, YESCRYPT_WORM (a slight deviation from classic scrypt), or + * YESCRYPT_RW (time-memory tradeoff discouraging modification) is determined + * by the setting string. + * + * Return the encoded hash string on success; or NULL on error. + * + * This is a crypt(3)-like interface, which is simpler to use than + * yescrypt_r(), but it is not MT-safe, it does not allow for the use of a ROM, + * and it is slower than yescrypt_r() for repeated calls because it allocates + * and frees memory on each call. + * + * MT-unsafe. + */ +extern uint8_t *yescrypt(const uint8_t *passwd, const uint8_t *setting); + +/** + * yescrypt_reencrypt(hash, from_key, to_key): + * Re-encrypt a yescrypt hash from one key to another. Either key may be NULL + * to indicate unencrypted hash. The encoded hash string is modified in-place. + * + * Return the hash pointer on success; or NULL on error (in which case the hash + * string is left unmodified). + * + * MT-safe as long as hash is local to the thread. + */ +extern uint8_t *yescrypt_reencrypt(uint8_t *hash, + const yescrypt_binary_t *from_key, + const yescrypt_binary_t *to_key); + +/** + * yescrypt_encode_params_r(params, src, srclen, buf, buflen): + * Generate a setting string for use with yescrypt_r() and yescrypt() by + * encoding into it the parameters flags, N, r, p, t, g, and a salt given by + * src (of srclen bytes). buf must be large enough (as indicated by buflen) + * to hold the setting string. + * + * Return the setting string on success; or NULL on error. + * + * MT-safe as long as buf is local to the thread. + */ +extern uint8_t *yescrypt_encode_params_r(const yescrypt_params_t *params, + const uint8_t *src, size_t srclen, + uint8_t *buf, size_t buflen); + +/** + * yescrypt_encode_params(params, src, srclen): + * Generate a setting string for use with yescrypt_r() and yescrypt(). This + * function is the same as yescrypt_encode_params_r() except that it uses a + * static buffer and thus is not MT-safe. + * + * Return the setting string on success; or NULL on error. + * + * MT-unsafe. + */ +extern uint8_t *yescrypt_encode_params(const yescrypt_params_t *params, + const uint8_t *src, size_t srclen); + +#ifdef __cplusplus +} +#endif + +#endif /* !_YESCRYPT_H_ */ diff --git a/src/bridges/bridge_scrypt_yescrypt.c b/src/bridges/bridge_scrypt_yescrypt.c new file mode 100644 index 000000000..d0bfd3284 --- /dev/null +++ b/src/bridges/bridge_scrypt_yescrypt.c @@ -0,0 +1,285 @@ +/** + * Author......: See docs/credits.txt + * License.....: MIT + */ + +#include "common.h" +#include "types.h" +#include "bridges.h" +#include "memory.h" + +#include "yescrypt.h" + +void smix(uint8_t *B, size_t r, uint32_t N, uint32_t p, uint32_t t, + yescrypt_flags_t flags, + void *V, uint32_t NROM, const void *VROM, + void *XY, uint8_t *S, uint8_t *passwd); + +// good: we can use this multiplier do reduce copy overhead to increase the guessing speed, +// bad: but we also increase the password candidate batch size. +// slow hashes which make use of this bridge probably are used with smaller wordlists, +// and therefore it's easier for hashcat to parallelize if this multiplier is low. +// in the end, it's a trade-off. + +#define N_ACCEL 8 + +#define SCRYPT_R_MAX 16 +#define SCRYPT_P_MAX 16 + +#define SCRYPT_TMP_SIZE (128ULL * SCRYPT_R_MAX * SCRYPT_P_MAX) +#define SCRYPT_TMP_SIZE4 (SCRYPT_TMP_SIZE / 4) + +typedef struct +{ + u32 B[SCRYPT_TMP_SIZE4]; + +} scrypt_tmp_t; + +typedef struct +{ + u32 salt_buf[64]; + u32 salt_len; + + u32 digest_buf[64]; + u32 digest_len; + + u32 N; + u32 r; + u32 p; + +} scrypt_t; + +typedef struct +{ + void *V; + void *XY; + + // implementation specific + + char unit_info_buf[1024]; + int unit_info_len; + + u64 workitem_count; + size_t workitem_size; + +} unit_t; + +typedef struct +{ + unit_t *units_buf; + int units_cnt; + +} bridge_scrypt_yescrypt_t; + +static bool units_init (bridge_scrypt_yescrypt_t *bridge_scrypt_yescrypt) +{ + #if defined (_WIN) + + SYSTEM_INFO sysinfo; + + GetSystemInfo (&sysinfo); + + int num_devices = sysinfo.dwNumberOfProcessors; + + #else + + int num_devices = sysconf (_SC_NPROCESSORS_ONLN); + + #endif + + unit_t *units_buf = (unit_t *) hccalloc (num_devices, sizeof (unit_t)); + + int units_cnt = 0; + + for (int i = 0; i < num_devices; i++) + { + unit_t *unit_buf = &units_buf[i]; + + unit_buf->unit_info_len = snprintf (unit_buf->unit_info_buf, sizeof (unit_buf->unit_info_buf) - 1, + "%s", + "Scrypt-Yescrypt"); + + unit_buf->unit_info_buf[unit_buf->unit_info_len] = 0; + + unit_buf->workitem_count = N_ACCEL; + + units_cnt++; + } + + bridge_scrypt_yescrypt->units_buf = units_buf; + bridge_scrypt_yescrypt->units_cnt = units_cnt; + + return true; +} + +static void units_term (bridge_scrypt_yescrypt_t *bridge_scrypt_yescrypt) +{ + if (bridge_scrypt_yescrypt) + { + hcfree (bridge_scrypt_yescrypt->units_buf); + } +} + +void *platform_init () +{ + // bridge_scrypt_yescrypt_t will be our platform context + + bridge_scrypt_yescrypt_t *bridge_scrypt_yescrypt = (bridge_scrypt_yescrypt_t *) hcmalloc (sizeof (bridge_scrypt_yescrypt_t)); + + if (units_init (bridge_scrypt_yescrypt) == false) + { + hcfree (bridge_scrypt_yescrypt); + + return NULL; + } + + return bridge_scrypt_yescrypt; +} + +void platform_term (void *platform_context) +{ + bridge_scrypt_yescrypt_t *bridge_scrypt_yescrypt = platform_context; + + if (bridge_scrypt_yescrypt) + { + units_term (bridge_scrypt_yescrypt); + + hcfree (bridge_scrypt_yescrypt); + } +} + +int get_unit_count (void *platform_context) +{ + bridge_scrypt_yescrypt_t *bridge_scrypt_yescrypt = platform_context; + + return bridge_scrypt_yescrypt->units_cnt; +} + +// we support units of mixed speed, that's why the workitem count is unit specific + +int get_workitem_count (void *platform_context, const int unit_idx) +{ + bridge_scrypt_yescrypt_t *bridge_scrypt_yescrypt = platform_context; + + unit_t *unit_buf = &bridge_scrypt_yescrypt->units_buf[unit_idx]; + + return unit_buf->workitem_count; +} + +char *get_unit_info (void *platform_context, const int unit_idx) +{ + bridge_scrypt_yescrypt_t *bridge_scrypt_yescrypt = platform_context; + + unit_t *unit_buf = &bridge_scrypt_yescrypt->units_buf[unit_idx]; + + return unit_buf->unit_info_buf; +} + +bool salt_prepare (void *platform_context, MAYBE_UNUSED hashconfig_t *hashconfig, MAYBE_UNUSED hashes_t *hashes) +{ + // selftest hash + + scrypt_t *scrypt_st = (scrypt_t *) hashes->st_esalts_buf; + + size_t largest_V = 128 * scrypt_st->r * scrypt_st->N; // yescrypt: the temporary storage V must be 128rN bytes in length + size_t largest_XY = 256 * scrypt_st->r * scrypt_st->p; // yescrypt: the temporary storage XY must be 256r or 256rp bytes in length + + // from here regular hashes + + scrypt_t *scrypt = (scrypt_t *) hashes->esalts_buf; + + for (u32 salt_idx = 0; salt_idx < hashes->salts_cnt; salt_idx++, scrypt++) + { + const size_t sz_V = 128 * scrypt->r * scrypt->N; // yescrypt: the temporary storage V must be 128rN bytes in length + const size_t sz_XY = 256 * scrypt->r * scrypt->p; // yescrypt: the temporary storage XY must be 256r or 256rp bytes in length + + if (sz_V > largest_V) largest_V = sz_V; + if (sz_XY > largest_XY) largest_XY = sz_XY; + } + + bridge_scrypt_yescrypt_t *bridge_scrypt_yescrypt = platform_context; + + for (int unit_idx = 0; unit_idx < bridge_scrypt_yescrypt->units_cnt; unit_idx++) + { + unit_t *unit_buf = &bridge_scrypt_yescrypt->units_buf[unit_idx]; + + unit_buf->V = hcmalloc_aligned (largest_V, 64); + unit_buf->XY = hcmalloc_aligned (largest_XY, 64); + } + + return true; +} + +void salt_destroy (void *platform_context, MAYBE_UNUSED hashconfig_t *hashconfig, MAYBE_UNUSED hashes_t *hashes) +{ + bridge_scrypt_yescrypt_t *bridge_scrypt_yescrypt = platform_context; + + for (int unit_idx = 0; unit_idx < bridge_scrypt_yescrypt->units_cnt; unit_idx++) + { + unit_t *unit_buf = &bridge_scrypt_yescrypt->units_buf[unit_idx]; + + hcfree_aligned (unit_buf->V); + hcfree_aligned (unit_buf->XY); + } +} + +bool launch_loop (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_param_t *device_param, MAYBE_UNUSED hashconfig_t *hashconfig, MAYBE_UNUSED hashes_t *hashes, MAYBE_UNUSED const u32 salt_pos, MAYBE_UNUSED const u64 pws_cnt) +{ + bridge_scrypt_yescrypt_t *bridge_scrypt_yescrypt = platform_context; + + const int unit_idx = device_param->bridge_link_device; + + unit_t *unit_buf = &bridge_scrypt_yescrypt->units_buf[unit_idx]; + + scrypt_t *esalts_buf = (scrypt_t *) hashes->esalts_buf; + + scrypt_t *esalt_buf = &esalts_buf[salt_pos]; + + // hashcat guarantees h_tmps[] is 64 byte aligned, so is *B + + scrypt_tmp_t *scrypt_tmp = (scrypt_tmp_t *) device_param->h_tmps; + + for (u64 pw_cnt = 0; pw_cnt < pws_cnt; pw_cnt++) + { + u8 *B = (u8 *) scrypt_tmp->B; + + // We could use p-based parallelization from yescrypt instead, + // but since we're already multi-threading, there's no need to run OpenMP. + // With that in mind, we can optimize by using a constant p=1, + // allowing the compiler to eliminate branches in smix(). + + for (u32 i = 0; i < esalt_buf->p; i++) + { + // Same here: using constants allows the compiler to optimize away branches in smix(), + // so there's no need to call smix1()/smix2() directly and unnecessarily complicate the code. + + smix (B, esalt_buf->r, esalt_buf->N, 1, 0, 0, unit_buf->V, 0, NULL, unit_buf->XY, NULL, NULL); + + B += 128 * esalt_buf->r; + } + + scrypt_tmp++; + } + + return true; +} + +void bridge_init (bridge_ctx_t *bridge_ctx) +{ + bridge_ctx->bridge_context_size = BRIDGE_CONTEXT_SIZE_CURRENT; + bridge_ctx->bridge_interface_version = BRIDGE_INTERFACE_VERSION_CURRENT; + + bridge_ctx->platform_init = platform_init; + bridge_ctx->platform_term = platform_term; + bridge_ctx->get_unit_count = get_unit_count; + bridge_ctx->get_unit_info = get_unit_info; + bridge_ctx->get_workitem_count = get_workitem_count; + bridge_ctx->thread_init = BRIDGE_DEFAULT; + bridge_ctx->thread_term = BRIDGE_DEFAULT; + bridge_ctx->salt_prepare = salt_prepare; + bridge_ctx->salt_destroy = salt_destroy; + bridge_ctx->launch_loop = launch_loop; + bridge_ctx->launch_loop2 = BRIDGE_DEFAULT; + bridge_ctx->st_update_hash = BRIDGE_DEFAULT; + bridge_ctx->st_update_pass = BRIDGE_DEFAULT; +} diff --git a/src/bridges/bridge_scrypt_yescrypt.mk b/src/bridges/bridge_scrypt_yescrypt.mk new file mode 100644 index 000000000..715bbb950 --- /dev/null +++ b/src/bridges/bridge_scrypt_yescrypt.mk @@ -0,0 +1,30 @@ + +SCRYPT_YESCRYPT := deps/yescrypt-master +SCRYPT_YESCRYPT_CFLAGS := -I$(SCRYPT_YESCRYPT)/ -DSKIP_MEMZERO -Wno-cpp -Wno-type-limits + +ifeq ($(BUILD_MODE),cross) +SCRYPT_YESCRYPT_CFLAGS += -mavx2 +else +ifeq ($(UNAME),Darwin) +ifeq ($(IS_APPLE_SILICON),0) +SCRYPT_YESCRYPT_CFLAGS += -mavx2 +endif +else +SCRYPT_YESCRYPT_CFLAGS += -march=native +endif +endif + +ifeq ($(BUILD_MODE),cross) +bridges/bridge_scrypt_yescrypt.so: src/bridges/bridge_scrypt_yescrypt.c $(SCRYPT_YESCRYPT)/yescrypt-opt.c $(SCRYPT_YESCRYPT)/sha256.c obj/combined.LINUX.a + $(CC_LINUX) $(CCFLAGS) $(CFLAGS_CROSS_LINUX) $^ -o $@ $(LFLAGS_CROSS_LINUX) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(SCRYPT_YESCRYPT_CFLAGS) +bridges/bridge_scrypt_yescrypt.dll: src/bridges/bridge_scrypt_yescrypt.c $(SCRYPT_YESCRYPT)/yescrypt-opt.c $(SCRYPT_YESCRYPT)/sha256.c obj/combined.WIN.a + $(CC_WIN) $(CCFLAGS) $(CFLAGS_CROSS_WIN) $^ -o $@ $(LFLAGS_CROSS_WIN) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(SCRYPT_YESCRYPT_CFLAGS) +else +ifeq ($(SHARED),1) +bridges/bridge_scrypt_yescrypt.$(BRIDGE_SUFFIX): src/bridges/bridge_scrypt_yescrypt.c $(SCRYPT_YESCRYPT)/yescrypt-opt.c $(SCRYPT_YESCRYPT)/sha256.c $(HASHCAT_LIBRARY) + $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(SCRYPT_YESCRYPT_CFLAGS) +else +bridges/bridge_scrypt_yescrypt.$(BRIDGE_SUFFIX): src/bridges/bridge_scrypt_yescrypt.c $(SCRYPT_YESCRYPT)/yescrypt-opt.c $(SCRYPT_YESCRYPT)/sha256.c obj/combined.NATIVE.a + $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(SCRYPT_YESCRYPT_CFLAGS) +endif +endif diff --git a/src/modules/module_70200.c b/src/modules/module_70200.c new file mode 100644 index 000000000..f4e6c0bef --- /dev/null +++ b/src/modules/module_70200.c @@ -0,0 +1,298 @@ +/** + * Author......: See docs/credits.txt + * License.....: MIT + */ + +#include "common.h" +#include "types.h" +#include "modules.h" +#include "bitops.h" +#include "convert.h" +#include "shared.h" + +static const u32 ATTACK_EXEC = ATTACK_EXEC_OUTSIDE_KERNEL; +static const u32 DGST_POS0 = 0; +static const u32 DGST_POS1 = 1; +static const u32 DGST_POS2 = 2; +static const u32 DGST_POS3 = 3; +static const u32 DGST_SIZE = DGST_SIZE_4_4; +static const u32 HASH_CATEGORY = HASH_CATEGORY_GENERIC_KDF; +static const char *HASH_NAME = "scrypt [Bridged: Scrypt-Yescrypt]"; +static const u64 KERN_TYPE = 70100; +static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE; +static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE + | OPTS_TYPE_PT_GENERATE_LE + | OPTS_TYPE_NATIVE_THREADS + | OPTS_TYPE_MP_MULTI_DISABLE; +static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; +static const u64 BRIDGE_TYPE = BRIDGE_TYPE_MATCH_TUNINGS // optional - improves performance + | BRIDGE_TYPE_LAUNCH_LOOP; +static const char *BRIDGE_NAME = "scrypt_yescrypt"; +static const char *ST_PASS = "hashcat"; +static const char *ST_HASH = "SCRYPT:16384:8:2:ODEzMTA2Mw==:NuOcXzv+MOqXmwTXnH6bbUEjN/vjlDG28IM7WXaUkk0="; + +u32 module_attack_exec (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ATTACK_EXEC; } +u32 module_dgst_pos0 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS0; } +u32 module_dgst_pos1 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS1; } +u32 module_dgst_pos2 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS2; } +u32 module_dgst_pos3 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS3; } +u32 module_dgst_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_SIZE; } +u32 module_hash_category (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return HASH_CATEGORY; } +const char *module_hash_name (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return HASH_NAME; } +u64 module_kern_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return KERN_TYPE; } +u32 module_opti_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return OPTI_TYPE; } +u64 module_opts_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return OPTS_TYPE; } +u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return SALT_TYPE; } +const char *module_st_hash (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_HASH; } +const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_PASS; } +const char *module_bridge_name (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return BRIDGE_NAME; } +u64 module_bridge_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return BRIDGE_TYPE; } + +static const char *SIGNATURE_SCRYPT = "SCRYPT"; + +typedef struct +{ + u32 salt_buf[64]; + u32 salt_len; + + u32 digest_buf[64]; + u32 digest_len; + + u32 N; + u32 r; + u32 p; + +} scrypt_t; + +u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + // this overrides the reductions of PW_MAX in case optimized kernel is selected + // IOW, even in optimized kernel mode it support length 256 + + const u32 pw_max = PW_MAX; + + return pw_max; +} + +u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u64 esalt_size = (const u64) sizeof (scrypt_t); + + return esalt_size; +} + +u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + #define SCRYPT_R_MAX 16 + #define SCRYPT_P_MAX 16 + + const u64 tmp_size = 128ULL * SCRYPT_R_MAX * SCRYPT_P_MAX; + + return tmp_size; +} + +int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len) +{ + u32 *digest = (u32 *) digest_buf; + + scrypt_t *scrypt = (scrypt_t *) esalt_buf; + + hc_token_t token; + + token.token_cnt = 6; + + token.signatures_cnt = 1; + token.signatures_buf[0] = SIGNATURE_SCRYPT; + + token.len_min[0] = 6; + token.len_max[0] = 6; + token.sep[0] = ':'; + token.attr[0] = TOKEN_ATTR_VERIFY_LENGTH + | TOKEN_ATTR_VERIFY_SIGNATURE; + + token.len_min[1] = 1; + token.len_max[1] = 6; + token.sep[1] = ':'; + token.attr[1] = TOKEN_ATTR_VERIFY_LENGTH; + + token.len_min[2] = 1; + token.len_max[2] = 6; + token.sep[2] = ':'; + token.attr[2] = TOKEN_ATTR_VERIFY_LENGTH; + + token.len_min[3] = 1; + token.len_max[3] = 6; + token.sep[3] = ':'; + token.attr[3] = TOKEN_ATTR_VERIFY_LENGTH; + + token.len_min[4] = 0; + token.len_max[4] = 45; + token.sep[4] = ':'; + token.attr[4] = TOKEN_ATTR_VERIFY_LENGTH + | TOKEN_ATTR_VERIFY_BASE64A; + + token.len_min[5] = 44; + token.len_max[5] = 88; + token.sep[5] = ':'; + token.attr[5] = TOKEN_ATTR_VERIFY_LENGTH + | TOKEN_ATTR_VERIFY_BASE64A; + + const int rc_tokenizer = input_tokenizer ((const u8 *) line_buf, line_len, &token); + + if (rc_tokenizer != PARSER_OK) return (rc_tokenizer); + + // scrypt settings + + const u8 *N_pos = token.buf[1]; + const u8 *r_pos = token.buf[2]; + const u8 *p_pos = token.buf[3]; + + scrypt->N = hc_strtoul ((const char *) N_pos, NULL, 10); + scrypt->r = hc_strtoul ((const char *) r_pos, NULL, 10); + scrypt->p = hc_strtoul ((const char *) p_pos, NULL, 10); + + if (scrypt->r > 16) return (PARSER_SALT_VALUE); + if (scrypt->p > 16) return (PARSER_SALT_VALUE); + + // salt + + const u8 *salt_pos = token.buf[4]; + const int salt_len = token.len[4]; + + scrypt->salt_len = base64_decode (base64_to_int, (const u8 *) salt_pos, salt_len, (u8 *) scrypt->salt_buf); + + // digest - base64 decode + + const u8 *hash_pos = token.buf[5]; + const int hash_len = token.len[5]; + + scrypt->digest_len = base64_decode (base64_to_int, (const u8 *) hash_pos, hash_len, (u8 *) scrypt->digest_buf); + + // comparison digest + + digest[0] = scrypt->digest_buf[0]; + digest[1] = scrypt->digest_buf[1]; + digest[2] = scrypt->digest_buf[2]; + digest[3] = scrypt->digest_buf[3]; + + // fake salt, we just need to make this unique + + salt->salt_buf[0] = digest[0]; + salt->salt_buf[1] = digest[1]; + salt->salt_buf[2] = digest[2]; + salt->salt_buf[3] = digest[3]; + salt->salt_buf[4] = scrypt->N; + salt->salt_buf[5] = scrypt->r; + salt->salt_buf[6] = scrypt->p; + salt->salt_buf[7] = 0; + + salt->salt_len = 32; + salt->salt_iter = 1; + + return (PARSER_OK); +} + +int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const void *digest_buf, MAYBE_UNUSED const salt_t *salt, MAYBE_UNUSED const void *esalt_buf, MAYBE_UNUSED const void *hook_salt_buf, MAYBE_UNUSED const hashinfo_t *hash_info, char *line_buf, MAYBE_UNUSED const int line_size) +{ + const scrypt_t *scrypt = (const scrypt_t *) esalt_buf; + + char base64_salt[64] = { 0 }; + + base64_encode (int_to_base64, (const u8 *) scrypt->salt_buf, scrypt->salt_len, (u8 *) base64_salt); + + char base64_digest[128] = { 0 }; + + base64_encode (int_to_base64, (const u8 *) scrypt->digest_buf, scrypt->digest_len, (u8 *) base64_digest); + + const int line_len = snprintf (line_buf, line_size, "%s:%u:%u:%u:%s:%s", + SIGNATURE_SCRYPT, + scrypt->N, + scrypt->r, + scrypt->p, + base64_salt, + base64_digest); + + return line_len; +} + +void module_init (module_ctx_t *module_ctx) +{ + module_ctx->module_context_size = MODULE_CONTEXT_SIZE_CURRENT; + module_ctx->module_interface_version = MODULE_INTERFACE_VERSION_CURRENT; + + module_ctx->module_attack_exec = module_attack_exec; + module_ctx->module_benchmark_esalt = MODULE_DEFAULT; + module_ctx->module_benchmark_hook_salt = MODULE_DEFAULT; + module_ctx->module_benchmark_mask = MODULE_DEFAULT; + module_ctx->module_benchmark_charset = MODULE_DEFAULT; + module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = module_bridge_name; + module_ctx->module_bridge_type = module_bridge_type; + module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; + module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; + module_ctx->module_deprecated_notice = MODULE_DEFAULT; + module_ctx->module_dgst_pos0 = module_dgst_pos0; + module_ctx->module_dgst_pos1 = module_dgst_pos1; + module_ctx->module_dgst_pos2 = module_dgst_pos2; + module_ctx->module_dgst_pos3 = module_dgst_pos3; + module_ctx->module_dgst_size = module_dgst_size; + module_ctx->module_dictstat_disable = MODULE_DEFAULT; + module_ctx->module_esalt_size = module_esalt_size; + module_ctx->module_extra_buffer_size = MODULE_DEFAULT; + module_ctx->module_extra_tmp_size = MODULE_DEFAULT; + module_ctx->module_extra_tuningdb_block = MODULE_DEFAULT; + module_ctx->module_forced_outfile_format = MODULE_DEFAULT; + module_ctx->module_hash_binary_count = MODULE_DEFAULT; + module_ctx->module_hash_binary_parse = MODULE_DEFAULT; + module_ctx->module_hash_binary_save = MODULE_DEFAULT; + module_ctx->module_hash_decode_postprocess = MODULE_DEFAULT; + module_ctx->module_hash_decode_potfile = MODULE_DEFAULT; + module_ctx->module_hash_decode_zero_hash = MODULE_DEFAULT; + module_ctx->module_hash_decode = module_hash_decode; + module_ctx->module_hash_encode_status = MODULE_DEFAULT; + module_ctx->module_hash_encode_potfile = MODULE_DEFAULT; + module_ctx->module_hash_encode = module_hash_encode; + module_ctx->module_hash_init_selftest = MODULE_DEFAULT; + module_ctx->module_hash_mode = MODULE_DEFAULT; + module_ctx->module_hash_category = module_hash_category; + module_ctx->module_hash_name = module_hash_name; + module_ctx->module_hashes_count_min = MODULE_DEFAULT; + module_ctx->module_hashes_count_max = MODULE_DEFAULT; + module_ctx->module_hlfmt_disable = MODULE_DEFAULT; + module_ctx->module_hook_extra_param_size = MODULE_DEFAULT; + module_ctx->module_hook_extra_param_init = MODULE_DEFAULT; + module_ctx->module_hook_extra_param_term = MODULE_DEFAULT; + module_ctx->module_hook12 = MODULE_DEFAULT; + module_ctx->module_hook23 = MODULE_DEFAULT; + module_ctx->module_hook_salt_size = MODULE_DEFAULT; + module_ctx->module_hook_size = MODULE_DEFAULT; + module_ctx->module_jit_build_options = MODULE_DEFAULT; + module_ctx->module_jit_cache_disable = MODULE_DEFAULT; + module_ctx->module_kernel_accel_max = MODULE_DEFAULT; + module_ctx->module_kernel_accel_min = MODULE_DEFAULT; + module_ctx->module_kernel_loops_max = MODULE_DEFAULT; + module_ctx->module_kernel_loops_min = MODULE_DEFAULT; + module_ctx->module_kernel_threads_max = MODULE_DEFAULT; + module_ctx->module_kernel_threads_min = MODULE_DEFAULT; + module_ctx->module_kern_type = module_kern_type; + module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; + module_ctx->module_opti_type = module_opti_type; + module_ctx->module_opts_type = module_opts_type; + module_ctx->module_outfile_check_disable = MODULE_DEFAULT; + module_ctx->module_outfile_check_nocomp = MODULE_DEFAULT; + module_ctx->module_potfile_custom_check = MODULE_DEFAULT; + module_ctx->module_potfile_disable = MODULE_DEFAULT; + module_ctx->module_potfile_keep_all_hashes = MODULE_DEFAULT; + module_ctx->module_pwdump_column = MODULE_DEFAULT; + module_ctx->module_pw_max = module_pw_max; + module_ctx->module_pw_min = MODULE_DEFAULT; + module_ctx->module_salt_max = MODULE_DEFAULT; + module_ctx->module_salt_min = MODULE_DEFAULT; + module_ctx->module_salt_type = module_salt_type; + module_ctx->module_separator = MODULE_DEFAULT; + module_ctx->module_st_hash = module_st_hash; + module_ctx->module_st_pass = module_st_pass; + module_ctx->module_tmp_size = module_tmp_size; + module_ctx->module_unstable_warning = MODULE_DEFAULT; + module_ctx->module_warmup_disable = MODULE_DEFAULT; +} diff --git a/tools/test_modules/m70200.pm b/tools/test_modules/m70200.pm new file mode 100644 index 000000000..145610f6c --- /dev/null +++ b/tools/test_modules/m70200.pm @@ -0,0 +1,90 @@ +#!/usr/bin/env perl + +## +## Author......: See docs/credits.txt +## License.....: MIT +## + +use strict; +use warnings; + +use Crypt::ScryptKDF qw (scrypt_hash); +use MIME::Base64 qw (decode_base64); + +sub module_constraints { [[0, 256], [1, 15], [-1, -1], [-1, -1], [-1, -1]] } + +sub module_generate_hash +{ + my $word = shift; + my $salt = shift; + my $N = shift // 16384; + my $r = shift // 8; + my $p = shift // 2; + + my $hash_buf = scrypt_hash ($word, $salt, $N, $r, $p, 32); + + my $hash = sprintf ('%s', $hash_buf); + + return $hash; +} + +sub module_verify_hash +{ + my $line = shift; + + # scrypt + return unless (substr ($line, 0, 7) eq 'SCRYPT:'); + + # get hash + my $index1 = index ($line, ":", 7); + + return if $index1 < 1; + + # N + my $N = substr ($line, 7, $index1 - 7); + + my $index2 = index ($line, ":", $index1 + 1); + + return if $index2 < 1; + + # r + my $r = substr ($line, $index1 + 1, $index2 - $index1 - 1); + + $index1 = index ($line, ":", $index2 + 1); + + return if $index1 < 1; + + # p + my $p = substr ($line, $index2 + 1, $index1 - $index2 - 1); + + $index2 = index ($line, ":", $index1 + 1); + + return if $index2 < 1; + + # salt + my $salt = substr ($line, $index1 + 1, $index2 - $index1 - 1); + + $salt = decode_base64 ($salt); + + $index1 = index ($line, ":", $index2 + 1); + + return if $index1 < 1; + + # digest + + my $word = substr ($line, $index1 + 1); + + return unless defined $salt; + return unless defined $word; + return unless defined $N; + return unless defined $r; + return unless defined $p; + + $word = pack_if_HEX_notation ($word); + + my $new_hash = module_generate_hash ($word, $salt, $N, $r, $p); + + return ($new_hash, $word); +} + +1; From 1a49b6c81e6de70b1ab35d031de24c55d72b8dd5 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Sun, 1 Jun 2025 08:40:26 +0200 Subject: [PATCH 27/95] The Assimilation Bridge (comprehensive python plugin documentation) --- ...hashcat-python-plugin-development-guide.md | 258 ++++++++++++++++++ docs/hashcat-python-plugin-quickstart.md | 114 ++------ docs/hashcat-python-plugin-requirements.md | 49 ++++ 3 files changed, 335 insertions(+), 86 deletions(-) create mode 100644 docs/hashcat-python-plugin-development-guide.md create mode 100644 docs/hashcat-python-plugin-requirements.md diff --git a/docs/hashcat-python-plugin-development-guide.md b/docs/hashcat-python-plugin-development-guide.md new file mode 100644 index 000000000..b9a825970 --- /dev/null +++ b/docs/hashcat-python-plugin-development-guide.md @@ -0,0 +1,258 @@ +# Hashcat Python Plugin Development Guide + +This document is a comprehensive guide for writing custom hash modes in Python via Hashcat's Assimilation Bridge plugin. + +## 1. Introduction + +The The Assimilation Bridge enables developers to implement complete hash mode logic in languages other than C, most notably Python. Traditionally, customizing Hashcat required writing a module in C and a kernel in OpenCL/CUDA. With the bridge, you can now implement a complete hash mode in Python. + +The bridge supports two hash modes to run python code: + +- `-m 72000`: Uses single-threaded Python interpreter and hashcat controlling the multi-threading. +- `-m 73000`: Uses classic multiprocessing module controlling multi-threaded support. + +Having two hash modes is currently a workaround; future Python developments toward a fully GIL-free mode should eventually resolve this. The single-threaded Python route is the way to go, and when Python will be totally GIL-free, we will remove the multiprocessing support completely. For now, we must work around platform-specific behavior (see `hashcat-python-plugin-requirements.md`). + +## 2. Requirements + +Ideally, start by walking through `hashcat-python-plugin-quickstart.md`, or read `hashcat-python-plugin-requirements.md`. + +## 3. Python Bridge basics + +Hashcat implements the CPython interface, loading the embedded interpreter via dynamic loading mechanisms (`dlopen()`, `LoadLibrary()`, etc). This enables runtime flexibility, allowing Hashcat to use whatever Python version is installed on the system. Users of the precompiled Hashcat binaries don’t need Python headers and just a working Python interpreter. Compatibility is checked at runtime, not compile time. If hashcat detect an invalid python version it will stop and print informative instructions on what to do next. + +In general, when using any assimilation bridge "application" (such as the Python bridge), the hash mode determines which bridge plugin is loaded (this is a 1:1 relationship). From there, the bridge decides how to proceed. In the case of the Python bridge, it loads the Python library, sets up the interpreter, and finally selects which Python script to execute. Understanding this flow is essential, especially if you plan to contribute to upstream Hashcat on GitHub or want to register a dedicated hash mode number. + +You can decide to use the generic hash mode and only contribute the .py file itself with your implementation, or you copy the bridge code and hardcode the path to you .py implementation in there. The advantage in the generic mode is that it's super simple, but it will run a little slower and you have less control about workload tuning. Also having a dedicated mode allows you to implement a unit test, because you have a dedicated hash mode that you can refer to. + +Hashcat includes a top-level `Python/` directory with standard helpers and bridge modules: + +The following three files are relevant regardless of whether you plan to create a generic or a dedicated hash mode. These modules do the heavy lifting to interact with Hashcat internals from Python. Basically you should not need to change them, and instead you import them from your implementation: + +```text +- hcsp.py: Helper for single-threaded mode. Manages queue handling, function invocation, and context propagation. +- hcmp.py: Extends `hcsp.py` to support multiprocessing. It spawns worker processes and routes password batches via queues. +- hcshared.py: Shared utility functions between SP and MP, for instance some getter function for salt data retrieval. +``` + +There are two additional files, and they are mainly relevant in case you plan to make use of the generic hash mode. But even if you plan to make a dedicated hash mode have a look into them, most likely they will be a very good template for your non-generic mode + +```text +- generic_hash_mp.py +- generic_hash_sp.py +``` + +We will discuss these two in more detail in the `generic hash mode` section. + +## 4. Required Functions in a Python Module + +Both `-m 72000` and `-m 73000` follow the same requirements, with the idea that your python code will run in both hash-modes, whatever your user decides to use. + +The requirements are to implement the following three functions: + +```python +def init(ctx): +def term(ctx): +def kernel_loop(ctx, passwords, salt_id, is_selftest): +``` + +- `init(ctx)`: Called once during plugin startup. All salts and esalts are copied at this stage. You use it to wire up callbacks to helper modules. +- `term(ctx)`: Called once at shutdown. Use it to clean up resources like file handles or sockets if you use them. +- `kernel_loop(...)`: Main function for processing password batches. This is called many times during cracking. + +A typical `init()` might look like this: + +```python +def init(ctx): + hcsp.init(ctx, calc_hash, extract_esalts) +``` + +Here: +- `calc_hash()` is your main implementation that processes one password (with one specific salt). You return the result in the format that hashcat requires. In generic hash mode that would be just the same format as in your hashlist. Instead, if you write your own decoder and encoder in the module, this can also be in binary for better performance. +- `extract_esalts()` is an optional function to deserialize binary esalt blobs. Depends on your hash, if esalts (such as binary blobs for decryption) are required. +- `hcsp.init()` stores these so that `handle_queue()` (described later) can call `calc_hash()` for each password in a batch. + +Note the the ctx will hold your salt data from all hashes. Whenever calc_hash() is called, this context is given. If you have multiple hashes with multiple salts, the context will have all of them. The helper module hcsp.init() will deserialze the static salt and the dynamic salt and store the data in your context. + +A typical `term()` might look like this: + +```python +def term(ctx): + hcsp.term(ctx) +``` + +This should be used in case you had open files, open networking connection, or similar. We are good citizen! + +Here's our main function `kernel_loop()` where we spend almost all our time: + +```python +def kernel_loop(ctx,passwords,salt_id,is_selftest): + return hcsp.handle_queue(ctx,passwords,salt_id,is_selftest) +``` + +Hashcat optimizes performance by sending password candidates in batches. The `passwords` parameter in `kernel_loop()` is a list. Instead of manually looping over them, the helper module will queue them, and call your callback function which you had specified in the `init()` function before. The idea is that whenever your calc_hash() is called, it will always be only about one password and one salt (and optional some binary blobs), and you do not have to deal with queuing, whatever it is threaded or not threaded. + +Of course, you can also fully control this yourself: + +```python +def calc_hash(ctx, password, salt_id, is_selftest): + # Your custom logic here + return encoded_guess +``` + +If you want to control all by youself, here's what's important to know: + +- salt_id: Basically a index number which tells you about which salt your calculation is about. When you initially receive the context, it will hold all salts at once, and you need to store them in the context. The helper scripts do that for your, but just for you to know, its the salt_id which tells the handle_queue() which salt data to pick before it calls your hash_calc() function. +- is_selftest: Historically hashcat keeps two parallel structures for the the selftest hash and real hash. As such they arrive in the context buffer, and you need to make a decision on that `is_selftest` flag which salt buffer to pick. + +## 5. Esalts and Structured Binary Blobs, and fixed Salts + +One of the most confusing parts for developers new to hashcat is salt handling. While simple hash modes may work out-of-the-box with default helpers, dealing with salts in real-world formats requires deeper understanding. + +For complex formats, you may need a structured binary blob ("esalt") passed from the C plugin to Python. Since only you as the developer know the structures of your hash mode, structures vary. For that reason you can optionally write Python code to unpack it. + +### Some C Structure + +Let's say you need to transfer a salt value to python. You can specify an exact structure in the module to do so. Or, as in this example, this is how we had designed a generic hash mode: + +```c +typedef struct { + u32 hash_buf[16384]; + u32 hash_len; + u32 salt_buf[16384]; + u32 salt_len; +} generic_io_t; +``` + +### Unpacking esalts + +To access the data, we typically want to unpack it so it's easier to access from python: + +```python +def extract_esalts(esalts_buf): + esalts = [] + for hash_buf, hash_len, salt_buf, salt_len in struct.iter_unpack("65536s I 65536s I", esalts_buf): + hash_buf = hash_buf[0:hash_len] + salt_buf = salt_buf[0:salt_len] + esalts.append({ "hash_buf": hash_buf, "salt_buf": salt_buf }) + return esalts +``` + +Remember, the extract_esalts() was given as function pointer to hcsp.init(). That's how the helper can include your code from outside the helper code. The esalt format is based on what is defined in the module struct. + +### Salts Appear as Binary Blobs using 32 bit datatypes + +Hashcat is optimized for performance, especially on GPUs. To improve performance, it mostly works on 32 bit datatypes instead of 8 bit datatypes. In python the helper scripts convert these binary blobs into byte[] objects that are easier to work with. As you can see from the above example: `16384 * 4 = 65536` + +### Fixed salt datatypes + +In general, in all hashcat hash modes: + +- The `salt_t` structure is **fixed and consistent**. +- The esalt (extra salt) is **custom and plugin-specific**. + +Since `salt_t` is a fixed structure, the helper mode come with a salt unpacker code and in addition, it provides getter functions: + +```python +def get_salt_buf(salt: dict) -> bytes: +def get_salt_buf_pc(salt: dict) -> bytes: +def get_salt_iter(salt: dict) -> int: +def get_salt_iter2(salt: dict) -> int: +def get_salt_sign(salt: dict) -> bytes: +def get_salt_repeats(salt: dict) -> int: +def get_orig_pos(salt: dict) -> int: +def get_digests_cnt(salt: dict) -> int: +def get_digests_done(salt: dict) -> int: +def get_digests_offset(salt: dict) -> int: +def get_scrypt_N(salt: dict) -> int: +def get_scrypt_r(salt: dict) -> int: +``` + +These go back to the `salt_t` fixed structure you can find in `OpenCL/inc_types.h`. As an example on how to use these, here's a snippet from the `yescrypt`: + +```python +settings=hcshared.get_salt_buf(salt) +``` + +The `salt` variable is one of the parameters from the calc_hash(): + +```python +def calc_hash(password: bytes, salt: dict) -> str: +``` + +Note that if fully exhaust the Hashcat keyspace, your function has been called X times Y. X is the number of candidates, and Y is all the salts (except if a salt has been cracked). What's important to realize that within your function, you implement hashing logic only for precisely that situation where you have one password and one salt. + + +### Merging Salts and Esalts into a Single Object + +Finally, after unpacking both salts and esalts from their binary blob form, they are explicitly combined into a single dictionary object to simplify access: + +```python +for salt, esalt in zip(salts, esalts): + salt["esalt"] = esalt +``` + +Initially, salts and esalts are unpacked separately from their respective binary structures. Each salt entry contains standardized fields defined by the fixed `salt_t` structure and each esalt is dynamically structured and plugin-specific. Merging the esalt dictionary into the salt dictionary makes accessing all related data straightforward and intuitive within Python. + +## 6. Python generic hash mode `-m 72000` and `-m 73000` + +The "generic hash" support in hashcat is using python. The main idea behind "generic" is the goal is to write freely ideal for rapid prototyping. + +The most straight-forward way is to edit the following files directly: + +- `generic_hash_sp.py` for single-threaded (SP), typically when the user is using `-m 72000`. +- `generic_hash_mp.py` for multiprocessing (MP), typically when the user is using `-m 73000`. + +Notes: + +- Even though `-m 72000` uses single-threaded Python, the bridge plugin above it manages multiple Python interpreters (one per thread) making it effectively multi-threaded. +- On Windows, if `-m 73000` is selected, it silently falls back to `generic_hash_sp.py` due to limitations with multiprocessing. This behavior is important to understand and you might otherwise wonder why your code changes have no effect. + +If you modify one of these plugin files, there's a trade-off: you won’t be able to contribute that code directly to the upstream Hashcat repository, since those files are meant to remain clean for demonstration purposes. + +To address this, the assimilation bridge provides a generic parameter that users can specify via the command line. In the case of the Python bridge, only the first parameter is used. You can override the Python script to be loaded using `--bridge-parameter1`: + +``` +$ ./hashcat -m 73000 --bridge-parameter1 myimplementation.py hash.txt wordlist.txt ... +``` + +This tells the Python bridge plugin to load `myimplementation.py` instead of the default `generic_hash_mp.py`. This approach is especially useful if you plan to contribute `myimplementation.py` to the upstream Hashcat repository. If you choose to stay within the generic mode, your Python code won’t have a dedicated hash mode, and you'll need to instruct users to use the `--bridge-parameter1` flag to load your implementation. + +### Design Tradeoffs and Format Considerations + +In the generic hash mode, we are using a generic binary esalt to avoid writing complex C encode/decode logic. However, guesses returned from Python must match the **original encoded format** exactly. This can be inefficient if encoding is complex. The hash lines are intentionally not decoded and re-encoded in a structured way. Instead, a simple trick such as appending the salt after an asterisk (`*`) is used: + +``` +hash-with-embedded-salt*salt +``` + +This technique makes each hash appear unique, especially when multiple salts are involved, and simplifies initial parsing and processing. + +However, it is crucial to highlight: + +- You are **not obligated to follow this generic approach**. In fact, it's generally preferable to implement proper hash line decoding and encoding logic. +- For instance, a proper Yescrypt implementation (unlike the quickstart document) would ideally decode hash lines into clear, separate components (digest, salt, parameters) and encode them accordingly upon successful cracking. + +The reason the generic hash mode provided by Hashcat employs a simplified approach is to: + +- Demonstrate a flexible, format-agnostic solution suitable for initial prototyping or unfamiliar hash formats. +- Avoid complexity and make it easy for plugin developers to get started quickly without deep understanding of specific hash format parsing logic. + +In summary, while the generic mode is quick and easy, robust real-world plugins **should implement proper hash decoding and encoding logic** to ensure accuracy, efficiency, and maintainability. + +## 7. Debugging Without Hashcat + +You can run your plugin as a standalone script: + +``` +python3 generic_hash.py +``` + +It reads passwords from stdin and prints the result of `calc_hash()`: + +``` +echo "password" | python3 generic_hash_mp.py +``` + +Note that you probably want to inline the correct salt value, see the `main` section in the code. TBD: Add some sample + diff --git a/docs/hashcat-python-plugin-quickstart.md b/docs/hashcat-python-plugin-quickstart.md index 1c27617aa..e50f5ea34 100644 --- a/docs/hashcat-python-plugin-quickstart.md +++ b/docs/hashcat-python-plugin-quickstart.md @@ -1,31 +1,29 @@ -# Hashcat Python Plugin Developer Guide +# Hashcat Python Plugin Quickstart ## Introduction -This guide walks you through building custom hash modes in **pure Python** using Hashcat v7's Python plugin from the new assimilation bridge. Whether you're experimenting with a new algorithm, supporting a proprietary format, hacking a prototype, or just writing hashing logic in a high-level language, this plugin interface makes it fast and easy. +This guide walks you through building custom hash modes in **pure Python** using Hashcat v7's Python plugin interface via the new assimilation bridge. -No C required. No recompilation. Just write your logic in pure python code in `calc_hash()`. +Whether you're experimenting with a new algorithm, supporting a proprietary format, prototyping a new feature, or simply prefer writing in a high-level language, this plugin interface makes development fast and straightforward. -You can use any python modules you want. +No C required. No recompilation. Just write your logic in Python in the `calc_hash()` function. ---- +You can use any Python modules you like. ## Quick Start -Hashcat mode `73000` is preconfigured to load a generic Python plugin source file from `Python/generic_hash_mp.py`: +A benchmark is a good way to verify that your setup is working correctly. + +Hashcat mode `73000` is preconfigured to load a generic Python plugin from the source file `Python/generic_hash_mp.py`: ``` hashcat -m 73000 -b ``` -You can edit the `Python/generic_hash_mp.py`, or override the plugin source file with: +If you encounter issues with your Python installation, refer to `hashcat-python-plugin-requirements.md`. -``` -hashcat -m 73000 --bridge-parameter1=my_hash.py hash.txt wordlist.txt ... -``` - ---- +To learn how to modify the plugin source, see `hashcat-python-plugin-development-guide.md`. ## Yescrypt in One Line @@ -41,104 +39,48 @@ Example output: $y$j9T$uxVFACnNnGBakt9MLrpFf0$SmbSZAge5oa1BfHPBxYGq3mITgHeO/iG2Mdfgo93UN0 ``` -### Prepare Hash Line for Hashcat +### Prepare the Hash Line for Hashcat ``` $y$j9T$uxVFACnNnGBakt9MLrpFf0$SmbSZAge5oa1BfHPBxYGq3mITgHeO/iG2Mdfgo93UN0*$y$j9T$uxVFACnNnGBakt9MLrpFf0$ ``` -(Use the full hash before the `*`, and the salt portion after the `*`.) +(Use the full hash before the `*` and the salt portion after the `*`.) + +Hashcat modes `73000` and `72000` are generic modes that do not parse the hash, which can lead to redundancy. + +Refer to `hashcat-python-plugin-development-guide.md` to learn how to develop plugins for the generic hash mode. ### Plugin Code -Install the module: +Install the required module: ``` pip install pyescrypt ``` -Then in your plugin (either `generic_hash_mp.py` for -m 73000 or `generic_hash_sp.py` for -m 72000) +Then in your plugin (either `generic_hash_mp.py` for `-m 73000` or `generic_hash_sp.py` for `-m 72000`): + +**Note for Windows users:** Mode `73000` automatically switches to `generic_hash_sp.py`, so be sure to edit that file. ```python -from pyescrypt import Yescrypt,Mode +from pyescrypt import Yescrypt, Mode -# Self-Test pair +# Self-test pair ST_HASH = "$y$j9T$uxVFACnNnGBakt9MLrpFf0$SmbSZAge5oa1BfHPBxYGq3mITgHeO/iG2Mdfgo93UN0*$y$j9T$uxVFACnNnGBakt9MLrpFf0$" ST_PASS = "password" def calc_hash(password: bytes, salt: dict) -> str: - return Yescrypt(n=4096, r=32, p=1, mode=Mode.MCF).digest(password=password, settings=hcshared.get_salt_buf(salt)).decode('utf8') + return Yescrypt(n=4096, r=32, p=1, mode=Mode.MCF).digest( + password=password, + settings=hcshared.get_salt_buf(salt) + ).decode("utf-8") ``` -That's it - full Yescrypt support in Hashcat with a single line of code. +That’s it. -### Run +### Run Regularly ``` hashcat -m 73000 yescrypt.hash wordlist.txt ``` - ---- - -## Debugging Without Hashcat - -You can run your plugin as a standalone script: - -``` -python3 generic_hash.py -``` - -It reads passwords from stdin and prints the result of `calc_hash()`: - -``` -echo "password" | python3 generic_hash_mp.py -``` - -Note that you probably want to inline the correct salt value, see the `main` section in the code. - ---- - -## Windows and Linux/macOS - -There are significant differences between Windows and Linux/macOS when embedding Python as done here. It's a complex issue, and we hope future Python developments toward a fully GIL-free mode will resolve it. For now, we must work around platform-specific behavior. - -### On Windows - -The `multiprocessing` module is not fully supported in this embedded setup. As a result, only one thread can run effectively. While the `threading` module does work, most cryptographic functions like `sha256()` block the GIL. CPU-intensive algorithms such as 10,000 iterations of `sha256()` will monopolize the GIL, making the program effectively single-threaded. - -### On Linux/macOS - -The `multiprocessing` module works correctly, enabling full CPU utilization through parallel worker processes. - -### Free-threaded Python (3.13+) - -Python 3.13 introduces optional GIL-free support. This allows multithreading to work even in embedded Python, both on Linux and Windows. Hashcat leverages this through two modes: - -- `-m 72000`: Uses free-threaded Python (no multiprocessing) -- `-m 73000`: Uses GIL-bound Python with multiprocessing - -Multiprocessing (73000) supports most modules and is generally better for real-world workloads, but it works only on Linux. Developers may use `-m 73000` on Linux for performance and `-m 72000` on Windows for development, provided their code does not rely on modules that require `cffi` because this as of now lacks support for running with Python free-treaded ABI. - ---- - -## Python 3.13 Requirement - -The `-m 72000` mode requires Python 3.13 due to its reliance on the new free-threading feature. This feature is not available in earlier versions. - -### Why Python 3.13 Isn't Preinstalled - -Several Linux distributions, including Ubuntu 24.04, do not ship with Python 3.13 because it was released after the distro’s feature freeze. You will likely need to install it manually. - -### Installing Python 3.13 - -**On Windows**: Use the official installer and ensure you check the "Install free-threaded" option - it's disabled by default. - -**On Linux/macOS**: Use `pyenv`. It's the easiest way to install and manage Python versions: - -``` -pyenv install 3.13t -pyenv local 3.13t -``` - -This makes it easy to manage `pip` packages without global installs or virtual environments. - diff --git a/docs/hashcat-python-plugin-requirements.md b/docs/hashcat-python-plugin-requirements.md new file mode 100644 index 000000000..86b0822d4 --- /dev/null +++ b/docs/hashcat-python-plugin-requirements.md @@ -0,0 +1,49 @@ +# Hashcat Python Plugin Requirements + +## Windows and Linux/macOS + +There are significant differences between Windows and Linux/macOS when embedding Python as done here. + +### On Windows + +The `multiprocessing` module is not fully supported in this embedded environment, so only a single process can run effectively. In contrast, the `threading` module does work correctly on Windows for starting threads and enabling parallelism. However, most cryptographic functions like `sha256()` block the Global Interpreter Lock (GIL). Since we often run CPU-intensive algorithms (e.g., 10,000 iterations of `sha256()`), this monopolizes the GIL, making the program effectively single-threaded. To achieve true multithreading on Windows, we need to move to a free-threaded Python runtime. + +**On Windows**: Use the official installer from https://www.python.org/downloads/windows/ and ensure you check the "Install free-threaded" option - it's disabled by default. + +Do not use python from Microsoft Store it's too old. + +### On Linux/macOS + +The `multiprocessing` module functions correctly, allowing full CPU utilization through parallel worker processes. However, since threading is managed by Python, it relies on `fork()` and inter-process communication (IPC). This adds complexity and code bloat to Hashcat, effectively duplicating modules and bridge plugins, making the codebase harder to understand for those exploring how it all works. We could switch to a free-threaded Python runtime, but it's still unstable at the time of writing even on Linux (see the `cffi` problem below). For now, we’ve chosen to use the `multiprocessing` module as a more practical solution. + +**On Linux/macOS**: Use `pyenv`. It's the easiest way to install and manage Python versions, see below section + +### Free-threaded Python (3.13+) + +In order to have multithreading on Windows, we were looking into Python 3.13 which introduces optional GIL-free support. This allows multithreading to work even in embedded Python. However, it has a major downside. Most relevant modules such as `cffi` still lacks support for running with the Python free-threaded ABI. But if your hash-mode does not rely on modules with `cffi` you should be fine using `-m 72000` no matter the OS. + +At the time of writing, several Linux distributions, including Ubuntu 24.04, do not ship with Python 3.13 because it was released after the distro’s feature freeze. You will likely need to install it manually, which is one of the reason we are refering to use `pyenv`. + +### Real-world best practice + +For now, multiprocessing (73000) supports most modules and is generally better for real-world workloads, but it works only on Linux. Developers may use `-m 73000` on Linux for performance and `-m 72000` on Windows for development. + +### Pyenv + +Pyenv is great for managing local python versions, and also frees us from using virtual environments while at the same time to not break global system installs when using `pip` to install new modules. + +Check out https://github.com/pyenv/pyenv in order how to install `pyenv`. + +After install, if you are fine with `-m 73000` + +``` +pyenv install 3.13 +pyenv local 3.13 +``` + +In order to use `-m 72000` + +``` +pyenv install 3.13t +pyenv local 3.13t +``` From b02b1b5033f8523f10c8eae6870c1b35a263fda7 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Mon, 2 Jun 2025 06:59:36 +0200 Subject: [PATCH 28/95] - Add code to recognize Microsofts OpenCL D3D12 platform - Skip memory-free detection on MS OpenCL platform to avoid crashes - Improve salt usage of 70100/70200, use decoder/kernels from 8900 - Add REPLACE bridge type support (eg. BRIDGE_TYPE_REPLACE_LOOP) - Switch 70000, 70100 and 70200 to BRIDGE_TYPE_REPLACE_LOOP - Add synchronization barriers on d2h copy when using bridges - Improve speed status display updates when using bridges - Set AMD_DIRECT_DISPATCH=0 to reduce CPU burning loop on AMD backends - Set benchmark/selftest hash on 70100/70200 to 16:8:1 --- OpenCL/m70100-pure.cl | 30 +++----- include/backend.h | 1 + include/types.h | 93 ++++++++++++++---------- src/backend.c | 70 ++++++++++++++++-- src/bridges.c | 8 ++- src/bridges/bridge_scrypt_jane.c | 40 ++++------- src/bridges/bridge_scrypt_yescrypt.c | 36 +++------- src/interface.c | 23 +++++- src/modules/module_70000.c | 2 +- src/modules/module_70100.c | 102 ++++++++++----------------- src/modules/module_70200.c | 102 ++++++++++----------------- src/selftest.c | 20 +++++- src/shared.c | 4 ++ tools/test_modules/m70100.pm | 2 +- tools/test_modules/m70200.pm | 2 +- 15 files changed, 274 insertions(+), 261 deletions(-) diff --git a/OpenCL/m70100-pure.cl b/OpenCL/m70100-pure.cl index 8fc213b98..4890196cb 100644 --- a/OpenCL/m70100-pure.cl +++ b/OpenCL/m70100-pure.cl @@ -26,21 +26,7 @@ typedef struct } scrypt_tmp_t; -typedef struct -{ - u32 salt_buf[64]; - u32 salt_len; - - u32 digest_buf[64]; - u32 digest_len; - - u32 N; - u32 r; - u32 p; - -} scrypt_t; - -KERNEL_FQ void m70100_init (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, scrypt_t)) +KERNEL_FQ void m70100_init (KERN_ATTR_TMPS (scrypt_tmp_t)) { /** * base @@ -54,10 +40,10 @@ KERNEL_FQ void m70100_init (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, scrypt_t)) sha256_hmac_init_global_swap (&sha256_hmac_ctx, pws[gid].i, pws[gid].pw_len); - sha256_hmac_update_global_swap (&sha256_hmac_ctx, esalt_bufs[DIGESTS_OFFSET_HOST].salt_buf, esalt_bufs[DIGESTS_OFFSET_HOST].salt_len); + sha256_hmac_update_global_swap (&sha256_hmac_ctx, salt_bufs[SALT_POS_HOST].salt_buf, salt_bufs[SALT_POS_HOST].salt_len); - u32 r = esalt_bufs[DIGESTS_OFFSET_HOST].r; - u32 p = esalt_bufs[DIGESTS_OFFSET_HOST].p; + u32 r = salt_bufs[SALT_POS_HOST].scrypt_r; + u32 p = salt_bufs[SALT_POS_HOST].scrypt_p; u32 chunk_bytes = 64 * r * 2; @@ -115,11 +101,11 @@ KERNEL_FQ void m70100_init (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, scrypt_t)) } } -KERNEL_FQ void m70100_loop (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, scrypt_t)) +KERNEL_FQ void m70100_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) { } -KERNEL_FQ void m70100_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, scrypt_t)) +KERNEL_FQ void m70100_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) { /** * base @@ -143,8 +129,8 @@ KERNEL_FQ void m70100_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, scrypt_t)) sha256_hmac_init_global_swap (&ctx, pws[gid].i, pws[gid].pw_len); - u32 r = esalt_bufs[DIGESTS_OFFSET_HOST].r; - u32 p = esalt_bufs[DIGESTS_OFFSET_HOST].p; + u32 r = salt_bufs[SALT_POS_HOST].scrypt_r; + u32 p = salt_bufs[SALT_POS_HOST].scrypt_p; u32 chunk_bytes = 64 * r * 2; diff --git a/include/backend.h b/include/backend.h index cd0dfca44..0e3fe2359 100644 --- a/include/backend.h +++ b/include/backend.h @@ -22,6 +22,7 @@ static const char CL_VENDOR_INTEL_SDK[] = "Intel(R) Corporation"; static const char CL_VENDOR_MESA[] = "Mesa"; static const char CL_VENDOR_NV[] = "NVIDIA Corporation"; static const char CL_VENDOR_POCL[] = "The pocl project"; +static const char CL_VENDOR_MICROSOFT[] = "Microsoft"; int backend_ctx_init (hashcat_ctx_t *hashcat_ctx); void backend_ctx_destroy (hashcat_ctx_t *hashcat_ctx); diff --git a/include/types.h b/include/types.h index bef5982ad..bc4dc32d3 100644 --- a/include/types.h +++ b/include/types.h @@ -187,6 +187,7 @@ typedef enum vendor_id VENDOR_ID_POCL = (1U << 6), VENDOR_ID_AMD_USE_INTEL = (1U << 7), VENDOR_ID_AMD_USE_HIP = (1U << 8), + VENDOR_ID_MICROSOFT = (1U << 9), VENDOR_ID_GENERIC = (1U << 31) } vendor_id_t; @@ -442,40 +443,43 @@ typedef enum opts_type OPTS_TYPE_MT_HEX = (1ULL << 27), // mask is always in hex OPTS_TYPE_HASH_COPY = (1ULL << 28), OPTS_TYPE_HASH_SPLIT = (1ULL << 29), - OPTS_TYPE_LOOP_PREPARE = (1ULL << 30), // a kernel which is called each time before _loop kernel started. + OPTS_TYPE_INIT = (1ULL << 30), // Added v7, since bridge can fully replace these, but are set by default automatically + OPTS_TYPE_LOOP = (1ULL << 31), // Added v7, since bridge can fully replace these, but are set by default automatically + OPTS_TYPE_COMP = (1ULL << 32), // Added v7, since bridge can fully replace these, but are set by default automatically + OPTS_TYPE_LOOP_PREPARE = (1ULL << 33), // a kernel which is called each time before _loop kernel started. // like a hook12 kernel but without extra buffers. - OPTS_TYPE_LOOP_EXTENDED = (1ULL << 31), // a kernel which is called each time normal _loop kernel finished. + OPTS_TYPE_LOOP_EXTENDED = (1ULL << 34), // a kernel which is called each time normal _loop kernel finished. // but unlike a hook kernel this kernel is called for every _loop iteration offset - OPTS_TYPE_HOOK12 = (1ULL << 32), - OPTS_TYPE_HOOK23 = (1ULL << 33), - OPTS_TYPE_INIT2 = (1ULL << 34), - OPTS_TYPE_LOOP2_PREPARE = (1ULL << 35), // same as OPTS_TYPE_LOOP_PREPARE but for loop2 kernel - OPTS_TYPE_LOOP2 = (1ULL << 36), - OPTS_TYPE_AUX1 = (1ULL << 37), - OPTS_TYPE_AUX2 = (1ULL << 38), - OPTS_TYPE_AUX3 = (1ULL << 39), - OPTS_TYPE_AUX4 = (1ULL << 40), - OPTS_TYPE_BINARY_HASHFILE = (1ULL << 41), + OPTS_TYPE_HOOK12 = (1ULL << 35), + OPTS_TYPE_HOOK23 = (1ULL << 36), + OPTS_TYPE_INIT2 = (1ULL << 37), + OPTS_TYPE_LOOP2_PREPARE = (1ULL << 38), // same as OPTS_TYPE_LOOP_PREPARE but for loop2 kernel + OPTS_TYPE_LOOP2 = (1ULL << 39), + OPTS_TYPE_AUX1 = (1ULL << 40), + OPTS_TYPE_AUX2 = (1ULL << 41), + OPTS_TYPE_AUX3 = (1ULL << 42), + OPTS_TYPE_AUX4 = (1ULL << 43), + OPTS_TYPE_BINARY_HASHFILE = (1ULL << 44), OPTS_TYPE_BINARY_HASHFILE_OPTIONAL - = (1ULL << 42), // this allows us to not enforce the use of a binary file. requires OPTS_TYPE_BINARY_HASHFILE set to be effective. - OPTS_TYPE_PT_ADD06 = (1ULL << 43), - OPTS_TYPE_KEYBOARD_MAPPING = (1ULL << 44), - OPTS_TYPE_DEEP_COMP_KERNEL = (1ULL << 45), // if we have to iterate through each hash inside the comp kernel, for example if each hash has to be decrypted separately - OPTS_TYPE_TM_KERNEL = (1ULL << 46), - OPTS_TYPE_SUGGEST_KG = (1ULL << 47), // suggest keep guessing for modules the user maybe wants to use --keep-guessing - OPTS_TYPE_COPY_TMPS = (1ULL << 48), // if we want to use data from tmps buffer (for example get the PMK in WPA) - OPTS_TYPE_POTFILE_NOPASS = (1ULL << 49), // sometimes the password should not be printed to potfile - OPTS_TYPE_DYNAMIC_SHARED = (1ULL << 50), // use dynamic shared memory (note: needs special kernel changes) - OPTS_TYPE_SELF_TEST_DISABLE = (1ULL << 51), // some algos use JiT in combinations with a salt or create too much startup time - OPTS_TYPE_MP_MULTI_DISABLE = (1ULL << 52), // do not multiply the kernel-accel with the multiprocessor count per device to allow more fine-tuned workload settings - OPTS_TYPE_NATIVE_THREADS = (1ULL << 53), // forces "native" thread count: CPU=1, GPU-Intel=8, GPU-AMD=64 (wavefront), GPU-NV=32 (warps) - OPTS_TYPE_MAXIMUM_THREADS = (1ULL << 54), // disable else branch in pre-compilation thread count optimization setting - OPTS_TYPE_POST_AMP_UTF16LE = (1ULL << 55), // run the utf8 to utf16le conversion kernel after they have been processed from amplifiers + = (1ULL << 45), // this allows us to not enforce the use of a binary file. requires OPTS_TYPE_BINARY_HASHFILE set to be effective. + OPTS_TYPE_PT_ADD06 = (1ULL << 46), + OPTS_TYPE_KEYBOARD_MAPPING = (1ULL << 47), + OPTS_TYPE_DEEP_COMP_KERNEL = (1ULL << 48), // if we have to iterate through each hash inside the comp kernel, for example if each hash has to be decrypted separately + OPTS_TYPE_TM_KERNEL = (1ULL << 49), + OPTS_TYPE_SUGGEST_KG = (1ULL << 50), // suggest keep guessing for modules the user maybe wants to use --keep-guessing + OPTS_TYPE_COPY_TMPS = (1ULL << 51), // if we want to use data from tmps buffer (for example get the PMK in WPA) + OPTS_TYPE_POTFILE_NOPASS = (1ULL << 52), // sometimes the password should not be printed to potfile + OPTS_TYPE_DYNAMIC_SHARED = (1ULL << 53), // use dynamic shared memory (note: needs special kernel changes) + OPTS_TYPE_SELF_TEST_DISABLE = (1ULL << 54), // some algos use JiT in combinations with a salt or create too much startup time + OPTS_TYPE_MP_MULTI_DISABLE = (1ULL << 55), // do not multiply the kernel-accel with the multiprocessor count per device to allow more fine-tuned workload settings + OPTS_TYPE_NATIVE_THREADS = (1ULL << 56), // forces "native" thread count: CPU=1, GPU-Intel=8, GPU-AMD=64 (wavefront), GPU-NV=32 (warps) + OPTS_TYPE_MAXIMUM_THREADS = (1ULL << 57), // disable else branch in pre-compilation thread count optimization setting + OPTS_TYPE_POST_AMP_UTF16LE = (1ULL << 58), // run the utf8 to utf16le conversion kernel after they have been processed from amplifiers OPTS_TYPE_AUTODETECT_DISABLE - = (1ULL << 56), // skip autodetect engine - OPTS_TYPE_STOCK_MODULE = (1ULL << 57), // module included with hashcat default distribution + = (1ULL << 59), // skip autodetect engine + OPTS_TYPE_STOCK_MODULE = (1ULL << 60), // module included with hashcat default distribution OPTS_TYPE_MULTIHASH_DESPITE_ESALT - = (1ULL << 58), // overrule multihash cracking check same salt but not same esalt + = (1ULL << 61), // overrule multihash cracking check same salt but not same esalt } opts_type_t; @@ -485,18 +489,29 @@ typedef enum bridge_type BRIDGE_TYPE_MATCH_TUNINGS = (1ULL << 1), // Disables autotune and adjusts -n, -u and -T for the backend device according to match bridge dimensions BRIDGE_TYPE_UPDATE_SELFTEST = (1ULL << 2), // updates the selftest configured in the module. Can be useful for generic hash modes such as the python one + BRIDGE_TYPE_LAUNCH_INIT = (1ULL << 10), // attention! not yet implemented BRIDGE_TYPE_LAUNCH_LOOP = (1ULL << 11), BRIDGE_TYPE_LAUNCH_LOOP2 = (1ULL << 12), + BRIDGE_TYPE_LAUNCH_COMP = (1ULL << 13), // attention! not yet implemented - BRIDGE_TYPE_FORCE_WORKITEMS_001 = (1ULL << 20), // This override the workitem counts reported from the bridge device - BRIDGE_TYPE_FORCE_WORKITEMS_002 = (1ULL << 21), // Can be useful if this is not a physical hardware - BRIDGE_TYPE_FORCE_WORKITEMS_004 = (1ULL << 22), - BRIDGE_TYPE_FORCE_WORKITEMS_008 = (1ULL << 23), - BRIDGE_TYPE_FORCE_WORKITEMS_016 = (1ULL << 24), - BRIDGE_TYPE_FORCE_WORKITEMS_032 = (1ULL << 25), - BRIDGE_TYPE_FORCE_WORKITEMS_064 = (1ULL << 26), - BRIDGE_TYPE_FORCE_WORKITEMS_128 = (1ULL << 27), - BRIDGE_TYPE_FORCE_WORKITEMS_256 = (1ULL << 26), + // BRIDGE_TYPE_REPLACE_* is like + // BRIDGE_TYPE_LAUNCH_*, but + // deactivates KERN_RUN INIT/LOOP/COMP + + BRIDGE_TYPE_REPLACE_INIT = (1ULL << 20), // attention! not yet implemented + BRIDGE_TYPE_REPLACE_LOOP = (1ULL << 21), + BRIDGE_TYPE_REPLACE_LOOP2 = (1ULL << 22), + BRIDGE_TYPE_REPLACE_COMP = (1ULL << 23), // attention! not yet implemented + + BRIDGE_TYPE_FORCE_WORKITEMS_001 = (1ULL << 30), // This override the workitem counts reported from the bridge device + BRIDGE_TYPE_FORCE_WORKITEMS_002 = (1ULL << 31), // Can be useful if this is not a physical hardware + BRIDGE_TYPE_FORCE_WORKITEMS_004 = (1ULL << 32), + BRIDGE_TYPE_FORCE_WORKITEMS_008 = (1ULL << 33), + BRIDGE_TYPE_FORCE_WORKITEMS_016 = (1ULL << 34), + BRIDGE_TYPE_FORCE_WORKITEMS_032 = (1ULL << 35), + BRIDGE_TYPE_FORCE_WORKITEMS_064 = (1ULL << 36), + BRIDGE_TYPE_FORCE_WORKITEMS_128 = (1ULL << 37), + BRIDGE_TYPE_FORCE_WORKITEMS_256 = (1ULL << 36), } bridge_type_t; @@ -1944,7 +1959,7 @@ typedef struct backend_ctx int cuda_devices_cnt; int cuda_devices_active; int hip_devices_cnt; - int hip_devices_active; + int hip_devices_active; int metal_devices_cnt; int metal_devices_active; int opencl_devices_cnt; diff --git a/src/backend.c b/src/backend.c index fcb5dce8f..286b6f0c6 100644 --- a/src/backend.c +++ b/src/backend.c @@ -1156,7 +1156,10 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, } } - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_1, pws_pos, pws_cnt, false, 0) == -1) return -1; + if (hashconfig->opts_type & OPTS_TYPE_INIT) + { + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_1, pws_pos, pws_cnt, false, 0) == -1) return -1; + } if (hashconfig->opts_type & OPTS_TYPE_HOOK12) { @@ -1273,7 +1276,10 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, device_param->kernel_param.loop_pos = loop_pos; device_param->kernel_param.loop_cnt = loop_left; - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_2, pws_pos, pws_cnt, true, slow_iteration) == -1) return -1; + if (hashconfig->opts_type & OPTS_TYPE_LOOP) + { + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_2, pws_pos, pws_cnt, true, slow_iteration) == -1) return -1; + } if (hashconfig->opts_type & OPTS_TYPE_LOOP_EXTENDED) { @@ -1352,11 +1358,15 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, if (device_param->is_cuda == true) { if (hc_cuMemcpyHtoDAsync (hashcat_ctx, device_param->cuda_d_tmps, device_param->h_tmps, pws_cnt * hashconfig->tmp_size, device_param->cuda_stream) == -1) return -1; + + if (hc_cuStreamSynchronize (hashcat_ctx, device_param->cuda_stream) == -1) return -1; } if (device_param->is_hip == true) { if (hc_hipMemcpyHtoDAsync (hashcat_ctx, device_param->hip_d_tmps, device_param->h_tmps, pws_cnt * hashconfig->tmp_size, device_param->hip_stream) == -1) return -1; + + if (hc_hipStreamSynchronize (hashcat_ctx, device_param->hip_stream) == -1) return -1; } #if defined (__APPLE__) @@ -1368,8 +1378,39 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, if (device_param->is_opencl == true) { + /* blocking */ if (hc_clEnqueueWriteBuffer (hashcat_ctx, device_param->opencl_command_queue, device_param->opencl_d_tmps, CL_TRUE, 0, pws_cnt * hashconfig->tmp_size, device_param->h_tmps, 0, NULL, NULL) == -1) return -1; } + + //bug? + //while (status_ctx->run_thread_level2 == false) break; + if (status_ctx->run_thread_level2 == false) break; + + /** + * speed + */ + + const u64 perf_sum_all = (u64) (pws_cnt); + + double speed_msec = hc_timer_get (device_param->timer_speed); + + const u32 speed_pos = device_param->speed_pos; + + device_param->speed_cnt[speed_pos] = perf_sum_all; + + device_param->speed_msec[speed_pos] = speed_msec; + + if (user_options->speed_only == true) + { + if (speed_msec > 4000) + { + device_param->speed_pos = 1; + + device_param->speed_only_finish = true; + + return 0; + } + } } if (hashconfig->opts_type & OPTS_TYPE_HOOK23) @@ -1557,11 +1598,15 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, if (device_param->is_cuda == true) { if (hc_cuMemcpyHtoDAsync (hashcat_ctx, device_param->cuda_d_tmps, device_param->h_tmps, pws_cnt * hashconfig->tmp_size, device_param->cuda_stream) == -1) return -1; + + if (hc_cuStreamSynchronize (hashcat_ctx, device_param->cuda_stream) == -1) return -1; } if (device_param->is_hip == true) { if (hc_hipMemcpyHtoDAsync (hashcat_ctx, device_param->hip_d_tmps, device_param->h_tmps, pws_cnt * hashconfig->tmp_size, device_param->hip_stream) == -1) return -1; + + if (hc_hipStreamSynchronize (hashcat_ctx, device_param->hip_stream) == -1) return -1; } #if defined (__APPLE__) @@ -1573,6 +1618,7 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, if (device_param->is_opencl == true) { + /* blocking */ if (hc_clEnqueueWriteBuffer (hashcat_ctx, device_param->opencl_command_queue, device_param->opencl_d_tmps, CL_TRUE, 0, pws_cnt * hashconfig->tmp_size, device_param->h_tmps, 0, NULL, NULL) == -1) return -1; } } @@ -1636,7 +1682,10 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, if (aux_cnt == 0) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_3, pws_pos, pws_cnt, false, 0) == -1) return -1; + if (hashconfig->opts_type & OPTS_TYPE_COMP) + { + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_3, pws_pos, pws_cnt, false, 0) == -1) return -1; + } if (status_ctx->run_thread_level2 == false) break; } @@ -1661,7 +1710,10 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, } else { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_3, pws_pos, pws_cnt, false, 0) == -1) return -1; + if (hashconfig->opts_type & OPTS_TYPE_COMP) + { + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_3, pws_pos, pws_cnt, false, 0) == -1) return -1; + } } } @@ -4928,6 +4980,10 @@ int backend_ctx_init (hashcat_ctx_t *hashcat_ctx) { opencl_platform_vendor_id = VENDOR_ID_POCL; } + else if (strcmp (opencl_platform_vendor, CL_VENDOR_MICROSOFT) == 0) + { + opencl_platform_vendor_id = VENDOR_ID_MICROSOFT; + } else { opencl_platform_vendor_id = VENDOR_ID_GENERIC; @@ -6714,6 +6770,10 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) { opencl_device_vendor_id = VENDOR_ID_POCL; } + else if (strcmp (opencl_device_vendor, CL_VENDOR_MICROSOFT) == 0) + { + opencl_device_vendor_id = VENDOR_ID_MICROSOFT; + } else { opencl_device_vendor_id = VENDOR_ID_GENERIC; @@ -8281,7 +8341,7 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) device_param->device_available_mem = device_param->device_global_mem - MAX_ALLOC_CHECKS_SIZE; - if ((device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) && ((device_param->opencl_platform_vendor_id != VENDOR_ID_INTEL_SDK) || (device_param->device_host_unified_memory == 0))) + if ((device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) && (device_param->opencl_platform_vendor_id != VENDOR_ID_MICROSOFT) && ((device_param->opencl_platform_vendor_id != VENDOR_ID_INTEL_SDK) || (device_param->device_host_unified_memory == 0))) { // OK, so the problem here is the following: // There's just CL_DEVICE_GLOBAL_MEM_SIZE to ask OpenCL about the total memory on the device, diff --git a/src/bridges.c b/src/bridges.c index f56224a8e..9b37aa25a 100644 --- a/src/bridges.c +++ b/src/bridges.c @@ -113,7 +113,7 @@ bool bridges_init (hashcat_ctx_t *hashcat_ctx) hashconfig_destroy (hashcat_ctx); return true; - } + } bridge_ctx->enabled = true; @@ -181,8 +181,10 @@ bool bridges_init (hashcat_ctx_t *hashcat_ctx) CHECK_MANDATORY (bridge_ctx->get_unit_info); CHECK_MANDATORY (bridge_ctx->get_workitem_count); - if (hashconfig->bridge_type & BRIDGE_TYPE_LAUNCH_LOOP) CHECK_MANDATORY (bridge_ctx->launch_loop); - if (hashconfig->bridge_type & BRIDGE_TYPE_LAUNCH_LOOP2) CHECK_MANDATORY (bridge_ctx->launch_loop2); + if (hashconfig->bridge_type & BRIDGE_TYPE_REPLACE_LOOP) CHECK_MANDATORY (bridge_ctx->launch_loop); + if (hashconfig->bridge_type & BRIDGE_TYPE_REPLACE_LOOP2) CHECK_MANDATORY (bridge_ctx->launch_loop2); + if (hashconfig->bridge_type & BRIDGE_TYPE_LAUNCH_LOOP) CHECK_MANDATORY (bridge_ctx->launch_loop); + if (hashconfig->bridge_type & BRIDGE_TYPE_LAUNCH_LOOP2) CHECK_MANDATORY (bridge_ctx->launch_loop2); #undef CHECK_MANDATORY diff --git a/src/bridges/bridge_scrypt_jane.c b/src/bridges/bridge_scrypt_jane.c index b8e2a7759..39132171e 100644 --- a/src/bridges/bridge_scrypt_jane.c +++ b/src/bridges/bridge_scrypt_jane.c @@ -32,20 +32,6 @@ typedef struct } scrypt_tmp_t; -typedef struct -{ - u32 salt_buf[64]; - u32 salt_len; - - u32 digest_buf[64]; - u32 digest_len; - - u32 N; - u32 r; - u32 p; - -} scrypt_t; - typedef struct { void *V; @@ -177,24 +163,24 @@ bool salt_prepare (void *platform_context, MAYBE_UNUSED hashconfig_t *hashconfig { // selftest hash - scrypt_t *scrypt_st = (scrypt_t *) hashes->st_esalts_buf; + salt_t *scrypt_st = (salt_t *) hashes->st_salts_buf; - const size_t chunk_bytes = 64 * 2 * scrypt_st->r; + const size_t chunk_bytes = 64 * 2 * scrypt_st->scrypt_r; - size_t largest_V = chunk_bytes * scrypt_st->N; - //size_t largest_X = chunk_bytes * scrypt_st->p; + size_t largest_V = chunk_bytes * scrypt_st->scrypt_N; + //size_t largest_X = chunk_bytes * scrypt_st->scrypt_p; size_t largest_Y = chunk_bytes; // from here regular hashes - scrypt_t *scrypt = (scrypt_t *) hashes->esalts_buf; + salt_t *scrypt = (salt_t *) hashes->salts_buf; for (u32 salt_idx = 0; salt_idx < hashes->salts_cnt; salt_idx++, scrypt++) { - const size_t chunk_bytes = 64 * 2 * scrypt->r; + const size_t chunk_bytes = 64 * 2 * scrypt->scrypt_r; - const size_t sz_V = chunk_bytes * scrypt->N; - //const size_t sz_X = chunk_bytes * scrypt->p; + const size_t sz_V = chunk_bytes * scrypt->scrypt_N; + //const size_t sz_X = chunk_bytes * scrypt->scrypt_p; const size_t sz_Y = chunk_bytes; if (sz_V > largest_V) largest_V = sz_V; @@ -238,9 +224,9 @@ bool launch_loop (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_pa unit_t *unit_buf = &bridge_scrypt_jane->units_buf[unit_idx]; - scrypt_t *esalts_buf = (scrypt_t *) hashes->esalts_buf; + salt_t *salts_buf = (salt_t *) hashes->salts_buf; - scrypt_t *esalt_buf = &esalts_buf[salt_pos]; + salt_t *salt_buf = &salts_buf[salt_pos]; scrypt_tmp_t *scrypt_tmp = (scrypt_tmp_t *) device_param->h_tmps; @@ -248,9 +234,9 @@ bool launch_loop (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_pa //scrypt_mix_word_t *X = unit_buf->X; scrypt_mix_word_t *Y = unit_buf->Y; - const u32 N = esalt_buf->N; - const u32 r = esalt_buf->r; - const u32 p = esalt_buf->p; + const u32 N = salt_buf->scrypt_N; + const u32 r = salt_buf->scrypt_r; + const u32 p = salt_buf->scrypt_p; const size_t chunk_bytes = 64 * 2 * r; diff --git a/src/bridges/bridge_scrypt_yescrypt.c b/src/bridges/bridge_scrypt_yescrypt.c index d0bfd3284..0096c2f3b 100644 --- a/src/bridges/bridge_scrypt_yescrypt.c +++ b/src/bridges/bridge_scrypt_yescrypt.c @@ -35,20 +35,6 @@ typedef struct } scrypt_tmp_t; -typedef struct -{ - u32 salt_buf[64]; - u32 salt_len; - - u32 digest_buf[64]; - u32 digest_len; - - u32 N; - u32 r; - u32 p; - -} scrypt_t; - typedef struct { void *V; @@ -179,19 +165,19 @@ bool salt_prepare (void *platform_context, MAYBE_UNUSED hashconfig_t *hashconfig { // selftest hash - scrypt_t *scrypt_st = (scrypt_t *) hashes->st_esalts_buf; + salt_t *scrypt_st = (salt_t *) hashes->st_salts_buf; - size_t largest_V = 128 * scrypt_st->r * scrypt_st->N; // yescrypt: the temporary storage V must be 128rN bytes in length - size_t largest_XY = 256 * scrypt_st->r * scrypt_st->p; // yescrypt: the temporary storage XY must be 256r or 256rp bytes in length + size_t largest_V = 128 * scrypt_st->scrypt_r * scrypt_st->scrypt_N; // yescrypt: the temporary storage V must be 128rN bytes in length + size_t largest_XY = 256 * scrypt_st->scrypt_r * scrypt_st->scrypt_p; // yescrypt: the temporary storage XY must be 256r or 256rp bytes in length // from here regular hashes - scrypt_t *scrypt = (scrypt_t *) hashes->esalts_buf; + salt_t *scrypt = (salt_t *) hashes->salts_buf; for (u32 salt_idx = 0; salt_idx < hashes->salts_cnt; salt_idx++, scrypt++) { - const size_t sz_V = 128 * scrypt->r * scrypt->N; // yescrypt: the temporary storage V must be 128rN bytes in length - const size_t sz_XY = 256 * scrypt->r * scrypt->p; // yescrypt: the temporary storage XY must be 256r or 256rp bytes in length + const size_t sz_V = 128 * scrypt->scrypt_r * scrypt->scrypt_N; // yescrypt: the temporary storage V must be 128rN bytes in length + const size_t sz_XY = 256 * scrypt->scrypt_r * scrypt->scrypt_p; // yescrypt: the temporary storage XY must be 256r or 256rp bytes in length if (sz_V > largest_V) largest_V = sz_V; if (sz_XY > largest_XY) largest_XY = sz_XY; @@ -231,9 +217,9 @@ bool launch_loop (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_pa unit_t *unit_buf = &bridge_scrypt_yescrypt->units_buf[unit_idx]; - scrypt_t *esalts_buf = (scrypt_t *) hashes->esalts_buf; + salt_t *salts_buf = (salt_t *) hashes->salts_buf; - scrypt_t *esalt_buf = &esalts_buf[salt_pos]; + salt_t *salt_buf = &salts_buf[salt_pos]; // hashcat guarantees h_tmps[] is 64 byte aligned, so is *B @@ -248,14 +234,14 @@ bool launch_loop (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_pa // With that in mind, we can optimize by using a constant p=1, // allowing the compiler to eliminate branches in smix(). - for (u32 i = 0; i < esalt_buf->p; i++) + for (u32 i = 0; i < salt_buf->scrypt_p; i++) { // Same here: using constants allows the compiler to optimize away branches in smix(), // so there's no need to call smix1()/smix2() directly and unnecessarily complicate the code. - smix (B, esalt_buf->r, esalt_buf->N, 1, 0, 0, unit_buf->V, 0, NULL, unit_buf->XY, NULL, NULL); + smix (B, salt_buf->scrypt_r, salt_buf->scrypt_N, 1, 0, 0, unit_buf->V, 0, NULL, unit_buf->XY, NULL, NULL); - B += 128 * esalt_buf->r; + B += 128 * salt_buf->scrypt_r; } scrypt_tmp++; diff --git a/src/interface.c b/src/interface.c index f3836721a..b1c1bc32b 100644 --- a/src/interface.c +++ b/src/interface.c @@ -336,6 +336,11 @@ int hashconfig_init (hashcat_ctx_t *hashcat_ctx) } } + if (hashconfig->attack_exec == ATTACK_EXEC_OUTSIDE_KERNEL) + { + hashconfig->opts_type |= OPTS_TYPE_INIT | OPTS_TYPE_LOOP | OPTS_TYPE_COMP; + } + hashconfig->has_optimized_kernel = false; hashconfig->has_pure_kernel = false; @@ -500,13 +505,27 @@ int hashconfig_init (hashcat_ctx_t *hashcat_ctx) } } - // selftest bridge update + // bridges have some serious impact on hashconfig + if (hashconfig->bridge_type & BRIDGE_TYPE_REPLACE_LOOP) + { + hashconfig->opts_type &= ~OPTS_TYPE_LOOP; + hashconfig->bridge_type |= BRIDGE_TYPE_LAUNCH_LOOP; + } + + if (hashconfig->bridge_type & BRIDGE_TYPE_REPLACE_LOOP2) + { + hashconfig->opts_type &= ~OPTS_TYPE_LOOP2; + + hashconfig->bridge_type |= BRIDGE_TYPE_LAUNCH_LOOP2; + } + + // selftest bridge update if (hashconfig->bridge_type & BRIDGE_TYPE_UPDATE_SELFTEST) { if (bridge_ctx->st_update_hash) hashconfig->st_hash = bridge_ctx->st_update_hash (bridge_ctx->platform_context); if (bridge_ctx->st_update_pass) hashconfig->st_pass = bridge_ctx->st_update_pass (bridge_ctx->platform_context); - } + } return 0; } diff --git a/src/modules/module_70000.c b/src/modules/module_70000.c index 5eea2b228..01504ea09 100644 --- a/src/modules/module_70000.c +++ b/src/modules/module_70000.c @@ -26,7 +26,7 @@ static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_MP_MULTI_DISABLE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const u64 BRIDGE_TYPE = BRIDGE_TYPE_MATCH_TUNINGS // optional - improves performance - | BRIDGE_TYPE_LAUNCH_LOOP; + | BRIDGE_TYPE_REPLACE_LOOP; static const char *BRIDGE_NAME = "argon2id_reference"; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "$argon2id$v=19$m=4096,t=3,p=1$FoIjFnZlM2JSJWYXUgMFAw$eYKMzhbW8uyT1LLtKRdRcJj2CQeRrdr2pKv/Y71YbAQ"; diff --git a/src/modules/module_70100.c b/src/modules/module_70100.c index ac18fd609..ac5998476 100644 --- a/src/modules/module_70100.c +++ b/src/modules/module_70100.c @@ -15,7 +15,7 @@ static const u32 DGST_POS0 = 0; static const u32 DGST_POS1 = 1; static const u32 DGST_POS2 = 2; static const u32 DGST_POS3 = 3; -static const u32 DGST_SIZE = DGST_SIZE_4_4; +static const u32 DGST_SIZE = DGST_SIZE_4_16; static const u32 HASH_CATEGORY = HASH_CATEGORY_GENERIC_KDF; static const char *HASH_NAME = "scrypt [Bridged: Scrypt-Jane ROMix]"; static const u64 KERN_TYPE = 70100; @@ -26,10 +26,10 @@ static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_MP_MULTI_DISABLE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const u64 BRIDGE_TYPE = BRIDGE_TYPE_MATCH_TUNINGS // optional - improves performance - | BRIDGE_TYPE_LAUNCH_LOOP; + | BRIDGE_TYPE_REPLACE_LOOP; static const char *BRIDGE_NAME = "scrypt_jane"; static const char *ST_PASS = "hashcat"; -static const char *ST_HASH = "SCRYPT:16384:8:2:ODEzMTA2Mw==:NuOcXzv+MOqXmwTXnH6bbUEjN/vjlDG28IM7WXaUkk0="; +static const char *ST_HASH = "SCRYPT:16384:8:1:OTEyNzU0ODg=:Cc8SPjRH1hFQhuIPCdF51uNGtJ2aOY/isuoMlMUsJ8c="; u32 module_attack_exec (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ATTACK_EXEC; } u32 module_dgst_pos0 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS0; } @@ -50,20 +50,6 @@ u64 module_bridge_type (MAYBE_UNUSED const hashconfig_t *hashconfig, static const char *SIGNATURE_SCRYPT = "SCRYPT"; -typedef struct -{ - u32 salt_buf[64]; - u32 salt_len; - - u32 digest_buf[64]; - u32 digest_len; - - u32 N; - u32 r; - u32 p; - -} scrypt_t; - u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { // this overrides the reductions of PW_MAX in case optimized kernel is selected @@ -74,13 +60,6 @@ u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED con return pw_max; } -u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u64 esalt_size = (const u64) sizeof (scrypt_t); - - return esalt_size; -} - u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { #define SCRYPT_R_MAX 16 @@ -95,45 +74,44 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE { u32 *digest = (u32 *) digest_buf; - scrypt_t *scrypt = (scrypt_t *) esalt_buf; - hc_token_t token; + memset (&token, 0, sizeof (hc_token_t)); + token.token_cnt = 6; token.signatures_cnt = 1; token.signatures_buf[0] = SIGNATURE_SCRYPT; - token.len_min[0] = 6; - token.len_max[0] = 6; token.sep[0] = ':'; - token.attr[0] = TOKEN_ATTR_VERIFY_LENGTH + token.len[0] = 6; + token.attr[0] = TOKEN_ATTR_FIXED_LENGTH | TOKEN_ATTR_VERIFY_SIGNATURE; + token.sep[1] = ':'; token.len_min[1] = 1; token.len_max[1] = 6; - token.sep[1] = ':'; token.attr[1] = TOKEN_ATTR_VERIFY_LENGTH; + token.sep[2] = ':'; token.len_min[2] = 1; token.len_max[2] = 6; - token.sep[2] = ':'; token.attr[2] = TOKEN_ATTR_VERIFY_LENGTH; + token.sep[3] = ':'; token.len_min[3] = 1; token.len_max[3] = 6; - token.sep[3] = ':'; token.attr[3] = TOKEN_ATTR_VERIFY_LENGTH; + token.sep[4] = ':'; token.len_min[4] = 0; token.len_max[4] = 45; - token.sep[4] = ':'; token.attr[4] = TOKEN_ATTR_VERIFY_LENGTH | TOKEN_ATTR_VERIFY_BASE64A; + token.sep[5] = ':'; token.len_min[5] = 44; token.len_max[5] = 88; - token.sep[5] = ':'; token.attr[5] = TOKEN_ATTR_VERIFY_LENGTH | TOKEN_ATTR_VERIFY_BASE64A; @@ -147,68 +125,60 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE const u8 *r_pos = token.buf[2]; const u8 *p_pos = token.buf[3]; - scrypt->N = hc_strtoul ((const char *) N_pos, NULL, 10); - scrypt->r = hc_strtoul ((const char *) r_pos, NULL, 10); - scrypt->p = hc_strtoul ((const char *) p_pos, NULL, 10); + salt->scrypt_N = hc_strtoul ((const char *) N_pos, NULL, 10); + salt->scrypt_r = hc_strtoul ((const char *) r_pos, NULL, 10); + salt->scrypt_p = hc_strtoul ((const char *) p_pos, NULL, 10); - if (scrypt->r > 16) return (PARSER_SALT_VALUE); - if (scrypt->p > 16) return (PARSER_SALT_VALUE); + salt->salt_iter = 1; + + if (salt->scrypt_N % 1024) return (PARSER_SALT_VALUE); // we set loop count to 1024 fixed // salt const u8 *salt_pos = token.buf[4]; const int salt_len = token.len[4]; - scrypt->salt_len = base64_decode (base64_to_int, (const u8 *) salt_pos, salt_len, (u8 *) scrypt->salt_buf); + u8 tmp_buf[128] = { 0 }; + + const int tmp_len = base64_decode (base64_to_int, salt_pos, salt_len, tmp_buf); + + memcpy (salt->salt_buf, tmp_buf, tmp_len); + + salt->salt_len = tmp_len; // digest - base64 decode const u8 *hash_pos = token.buf[5]; const int hash_len = token.len[5]; - scrypt->digest_len = base64_decode (base64_to_int, (const u8 *) hash_pos, hash_len, (u8 *) scrypt->digest_buf); + memset (tmp_buf, 0, sizeof (tmp_buf)); - // comparison digest + const int digest_len = base64_decode (base64_to_int, hash_pos, hash_len, tmp_buf); - digest[0] = scrypt->digest_buf[0]; - digest[1] = scrypt->digest_buf[1]; - digest[2] = scrypt->digest_buf[2]; - digest[3] = scrypt->digest_buf[3]; + // digest_len should be safe because of 88 limit - // fake salt, we just need to make this unique + memcpy (digest, tmp_buf, digest_len); - salt->salt_buf[0] = digest[0]; - salt->salt_buf[1] = digest[1]; - salt->salt_buf[2] = digest[2]; - salt->salt_buf[3] = digest[3]; - salt->salt_buf[4] = scrypt->N; - salt->salt_buf[5] = scrypt->r; - salt->salt_buf[6] = scrypt->p; - salt->salt_buf[7] = 0; - - salt->salt_len = 32; - salt->salt_iter = 1; + salt->salt_len_pc = digest_len; return (PARSER_OK); } int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const void *digest_buf, MAYBE_UNUSED const salt_t *salt, MAYBE_UNUSED const void *esalt_buf, MAYBE_UNUSED const void *hook_salt_buf, MAYBE_UNUSED const hashinfo_t *hash_info, char *line_buf, MAYBE_UNUSED const int line_size) { - const scrypt_t *scrypt = (const scrypt_t *) esalt_buf; - char base64_salt[64] = { 0 }; - base64_encode (int_to_base64, (const u8 *) scrypt->salt_buf, scrypt->salt_len, (u8 *) base64_salt); + base64_encode (int_to_base64, (const u8 *) salt->salt_buf, salt->salt_len, (u8 *) base64_salt); char base64_digest[128] = { 0 }; - base64_encode (int_to_base64, (const u8 *) scrypt->digest_buf, scrypt->digest_len, (u8 *) base64_digest); + base64_encode (int_to_base64, (const u8 *) digest_buf, salt->salt_len_pc, (u8 *) base64_digest); const int line_len = snprintf (line_buf, line_size, "%s:%u:%u:%u:%s:%s", SIGNATURE_SCRYPT, - scrypt->N, - scrypt->r, - scrypt->p, + salt->scrypt_N, + salt->scrypt_r, + salt->scrypt_p, base64_salt, base64_digest); @@ -237,7 +207,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_dgst_pos3 = module_dgst_pos3; module_ctx->module_dgst_size = module_dgst_size; module_ctx->module_dictstat_disable = MODULE_DEFAULT; - module_ctx->module_esalt_size = module_esalt_size; + module_ctx->module_esalt_size = MODULE_DEFAULT; module_ctx->module_extra_buffer_size = MODULE_DEFAULT; module_ctx->module_extra_tmp_size = MODULE_DEFAULT; module_ctx->module_extra_tuningdb_block = MODULE_DEFAULT; diff --git a/src/modules/module_70200.c b/src/modules/module_70200.c index f4e6c0bef..e39fd2f25 100644 --- a/src/modules/module_70200.c +++ b/src/modules/module_70200.c @@ -15,7 +15,7 @@ static const u32 DGST_POS0 = 0; static const u32 DGST_POS1 = 1; static const u32 DGST_POS2 = 2; static const u32 DGST_POS3 = 3; -static const u32 DGST_SIZE = DGST_SIZE_4_4; +static const u32 DGST_SIZE = DGST_SIZE_4_16; static const u32 HASH_CATEGORY = HASH_CATEGORY_GENERIC_KDF; static const char *HASH_NAME = "scrypt [Bridged: Scrypt-Yescrypt]"; static const u64 KERN_TYPE = 70100; @@ -26,10 +26,10 @@ static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_MP_MULTI_DISABLE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const u64 BRIDGE_TYPE = BRIDGE_TYPE_MATCH_TUNINGS // optional - improves performance - | BRIDGE_TYPE_LAUNCH_LOOP; + | BRIDGE_TYPE_REPLACE_LOOP; static const char *BRIDGE_NAME = "scrypt_yescrypt"; static const char *ST_PASS = "hashcat"; -static const char *ST_HASH = "SCRYPT:16384:8:2:ODEzMTA2Mw==:NuOcXzv+MOqXmwTXnH6bbUEjN/vjlDG28IM7WXaUkk0="; +static const char *ST_HASH = "SCRYPT:16384:8:1:OTEyNzU0ODg=:Cc8SPjRH1hFQhuIPCdF51uNGtJ2aOY/isuoMlMUsJ8c="; u32 module_attack_exec (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ATTACK_EXEC; } u32 module_dgst_pos0 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS0; } @@ -50,20 +50,6 @@ u64 module_bridge_type (MAYBE_UNUSED const hashconfig_t *hashconfig, static const char *SIGNATURE_SCRYPT = "SCRYPT"; -typedef struct -{ - u32 salt_buf[64]; - u32 salt_len; - - u32 digest_buf[64]; - u32 digest_len; - - u32 N; - u32 r; - u32 p; - -} scrypt_t; - u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { // this overrides the reductions of PW_MAX in case optimized kernel is selected @@ -74,13 +60,6 @@ u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED con return pw_max; } -u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u64 esalt_size = (const u64) sizeof (scrypt_t); - - return esalt_size; -} - u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { #define SCRYPT_R_MAX 16 @@ -95,45 +74,44 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE { u32 *digest = (u32 *) digest_buf; - scrypt_t *scrypt = (scrypt_t *) esalt_buf; - hc_token_t token; + memset (&token, 0, sizeof (hc_token_t)); + token.token_cnt = 6; token.signatures_cnt = 1; token.signatures_buf[0] = SIGNATURE_SCRYPT; - token.len_min[0] = 6; - token.len_max[0] = 6; token.sep[0] = ':'; - token.attr[0] = TOKEN_ATTR_VERIFY_LENGTH + token.len[0] = 6; + token.attr[0] = TOKEN_ATTR_FIXED_LENGTH | TOKEN_ATTR_VERIFY_SIGNATURE; + token.sep[1] = ':'; token.len_min[1] = 1; token.len_max[1] = 6; - token.sep[1] = ':'; token.attr[1] = TOKEN_ATTR_VERIFY_LENGTH; + token.sep[2] = ':'; token.len_min[2] = 1; token.len_max[2] = 6; - token.sep[2] = ':'; token.attr[2] = TOKEN_ATTR_VERIFY_LENGTH; + token.sep[3] = ':'; token.len_min[3] = 1; token.len_max[3] = 6; - token.sep[3] = ':'; token.attr[3] = TOKEN_ATTR_VERIFY_LENGTH; + token.sep[4] = ':'; token.len_min[4] = 0; token.len_max[4] = 45; - token.sep[4] = ':'; token.attr[4] = TOKEN_ATTR_VERIFY_LENGTH | TOKEN_ATTR_VERIFY_BASE64A; + token.sep[5] = ':'; token.len_min[5] = 44; token.len_max[5] = 88; - token.sep[5] = ':'; token.attr[5] = TOKEN_ATTR_VERIFY_LENGTH | TOKEN_ATTR_VERIFY_BASE64A; @@ -147,68 +125,60 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE const u8 *r_pos = token.buf[2]; const u8 *p_pos = token.buf[3]; - scrypt->N = hc_strtoul ((const char *) N_pos, NULL, 10); - scrypt->r = hc_strtoul ((const char *) r_pos, NULL, 10); - scrypt->p = hc_strtoul ((const char *) p_pos, NULL, 10); + salt->scrypt_N = hc_strtoul ((const char *) N_pos, NULL, 10); + salt->scrypt_r = hc_strtoul ((const char *) r_pos, NULL, 10); + salt->scrypt_p = hc_strtoul ((const char *) p_pos, NULL, 10); - if (scrypt->r > 16) return (PARSER_SALT_VALUE); - if (scrypt->p > 16) return (PARSER_SALT_VALUE); + salt->salt_iter = 1; + + if (salt->scrypt_N % 1024) return (PARSER_SALT_VALUE); // we set loop count to 1024 fixed // salt const u8 *salt_pos = token.buf[4]; const int salt_len = token.len[4]; - scrypt->salt_len = base64_decode (base64_to_int, (const u8 *) salt_pos, salt_len, (u8 *) scrypt->salt_buf); + u8 tmp_buf[128] = { 0 }; + + const int tmp_len = base64_decode (base64_to_int, salt_pos, salt_len, tmp_buf); + + memcpy (salt->salt_buf, tmp_buf, tmp_len); + + salt->salt_len = tmp_len; // digest - base64 decode const u8 *hash_pos = token.buf[5]; const int hash_len = token.len[5]; - scrypt->digest_len = base64_decode (base64_to_int, (const u8 *) hash_pos, hash_len, (u8 *) scrypt->digest_buf); + memset (tmp_buf, 0, sizeof (tmp_buf)); - // comparison digest + const int digest_len = base64_decode (base64_to_int, hash_pos, hash_len, tmp_buf); - digest[0] = scrypt->digest_buf[0]; - digest[1] = scrypt->digest_buf[1]; - digest[2] = scrypt->digest_buf[2]; - digest[3] = scrypt->digest_buf[3]; + // digest_len should be safe because of 88 limit - // fake salt, we just need to make this unique + memcpy (digest, tmp_buf, digest_len); - salt->salt_buf[0] = digest[0]; - salt->salt_buf[1] = digest[1]; - salt->salt_buf[2] = digest[2]; - salt->salt_buf[3] = digest[3]; - salt->salt_buf[4] = scrypt->N; - salt->salt_buf[5] = scrypt->r; - salt->salt_buf[6] = scrypt->p; - salt->salt_buf[7] = 0; - - salt->salt_len = 32; - salt->salt_iter = 1; + salt->salt_len_pc = digest_len; return (PARSER_OK); } int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const void *digest_buf, MAYBE_UNUSED const salt_t *salt, MAYBE_UNUSED const void *esalt_buf, MAYBE_UNUSED const void *hook_salt_buf, MAYBE_UNUSED const hashinfo_t *hash_info, char *line_buf, MAYBE_UNUSED const int line_size) { - const scrypt_t *scrypt = (const scrypt_t *) esalt_buf; - char base64_salt[64] = { 0 }; - base64_encode (int_to_base64, (const u8 *) scrypt->salt_buf, scrypt->salt_len, (u8 *) base64_salt); + base64_encode (int_to_base64, (const u8 *) salt->salt_buf, salt->salt_len, (u8 *) base64_salt); char base64_digest[128] = { 0 }; - base64_encode (int_to_base64, (const u8 *) scrypt->digest_buf, scrypt->digest_len, (u8 *) base64_digest); + base64_encode (int_to_base64, (const u8 *) digest_buf, salt->salt_len_pc, (u8 *) base64_digest); const int line_len = snprintf (line_buf, line_size, "%s:%u:%u:%u:%s:%s", SIGNATURE_SCRYPT, - scrypt->N, - scrypt->r, - scrypt->p, + salt->scrypt_N, + salt->scrypt_r, + salt->scrypt_p, base64_salt, base64_digest); @@ -237,7 +207,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_dgst_pos3 = module_dgst_pos3; module_ctx->module_dgst_size = module_dgst_size; module_ctx->module_dictstat_disable = MODULE_DEFAULT; - module_ctx->module_esalt_size = module_esalt_size; + module_ctx->module_esalt_size = MODULE_DEFAULT; module_ctx->module_extra_buffer_size = MODULE_DEFAULT; module_ctx->module_extra_tmp_size = MODULE_DEFAULT; module_ctx->module_extra_tuningdb_block = MODULE_DEFAULT; diff --git a/src/selftest.c b/src/selftest.c index 04a2e98f7..f237aa94b 100644 --- a/src/selftest.c +++ b/src/selftest.c @@ -561,7 +561,10 @@ static int selftest (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param } } - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_1, 0, 1, false, 0) == -1) return -1; + if (hashconfig->opts_type & OPTS_TYPE_INIT) + { + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_1, 0, 1, false, 0) == -1) return -1; + } if (hashconfig->opts_type & OPTS_TYPE_HOOK12) { @@ -647,7 +650,10 @@ static int selftest (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param device_param->kernel_param.loop_pos = loop_pos; device_param->kernel_param.loop_cnt = loop_left; - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_2, 0, 1, false, 0) == -1) return -1; + if (hashconfig->opts_type & OPTS_TYPE_LOOP) + { + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_2, 0, 1, false, 0) == -1) return -1; + } if (hashconfig->opts_type & OPTS_TYPE_LOOP_EXTENDED) { @@ -704,11 +710,15 @@ static int selftest (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param if (device_param->is_cuda == true) { if (hc_cuMemcpyHtoDAsync (hashcat_ctx, device_param->cuda_d_tmps, device_param->h_tmps, hashconfig->tmp_size, device_param->cuda_stream) == -1) return -1; + + if (hc_cuStreamSynchronize (hashcat_ctx, device_param->cuda_stream) == -1) return -1; } if (device_param->is_hip == true) { if (hc_hipMemcpyHtoDAsync (hashcat_ctx, device_param->hip_d_tmps, device_param->h_tmps, hashconfig->tmp_size, device_param->hip_stream) == -1) return -1; + + if (hc_hipStreamSynchronize (hashcat_ctx, device_param->hip_stream) == -1) return -1; } #if defined (__APPLE__) @@ -720,6 +730,7 @@ static int selftest (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param if (device_param->is_opencl == true) { + /* blocking */ if (hc_clEnqueueWriteBuffer (hashcat_ctx, device_param->opencl_command_queue, device_param->opencl_d_tmps, CL_TRUE, 0, hashconfig->tmp_size, device_param->h_tmps, 0, NULL, NULL) == -1) return -1; } } @@ -912,7 +923,10 @@ static int selftest (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param } } - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_3, 0, 1, false, 0) == -1) return -1; + if (hashconfig->opts_type & OPTS_TYPE_COMP) + { + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_3, 0, 1, false, 0) == -1) return -1; + } } device_param->spin_damp = spin_damp_sav; diff --git a/src/shared.c b/src/shared.c index f738cec83..6795bf2f5 100644 --- a/src/shared.c +++ b/src/shared.c @@ -591,6 +591,10 @@ void setup_environment_variables (const folder_config_t *folder_config) // we can't free tmpdir at this point! } + // creates too much cpu load + if (getenv ("AMD_DIRECT_DISPATCH") == NULL) + putenv ((char *) "AMD_DIRECT_DISPATCH=0"); + /* if (getenv ("CL_CONFIG_USE_VECTORIZER") == NULL) putenv ((char *) "CL_CONFIG_USE_VECTORIZER=False"); diff --git a/tools/test_modules/m70100.pm b/tools/test_modules/m70100.pm index 145610f6c..ca3f56710 100644 --- a/tools/test_modules/m70100.pm +++ b/tools/test_modules/m70100.pm @@ -19,7 +19,7 @@ sub module_generate_hash my $salt = shift; my $N = shift // 16384; my $r = shift // 8; - my $p = shift // 2; + my $p = shift // 1; my $hash_buf = scrypt_hash ($word, $salt, $N, $r, $p, 32); diff --git a/tools/test_modules/m70200.pm b/tools/test_modules/m70200.pm index 145610f6c..ca3f56710 100644 --- a/tools/test_modules/m70200.pm +++ b/tools/test_modules/m70200.pm @@ -19,7 +19,7 @@ sub module_generate_hash my $salt = shift; my $N = shift // 16384; my $r = shift // 8; - my $p = shift // 2; + my $p = shift // 1; my $hash_buf = scrypt_hash ($word, $salt, $N, $r, $p, 32); From 73d817e74fdd5de96631dc000e1b8d93b9584ac6 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Mon, 2 Jun 2025 10:15:34 +0200 Subject: [PATCH 29/95] The Assimilation Bridge (Python plugins -m 72000 and -m 73000) --- .github/workflows/build.yml | 1 + OpenCL/m72000-pure.cl | 79 ++ OpenCL/m73000-pure.cl | 79 ++ Python/generic_hash_mp.py | 66 ++ Python/generic_hash_sp.py | 66 ++ Python/hcmp.py | 81 ++ Python/hcshared.py | 60 + Python/hcsp.py | 36 + src/bridges/bridge_python_generic_hash_mp.c | 979 +++++++++++++++++ src/bridges/bridge_python_generic_hash_mp.mk | 24 + src/bridges/bridge_python_generic_hash_sp.c | 1038 ++++++++++++++++++ src/bridges/bridge_python_generic_hash_sp.mk | 37 + src/modules/module_72000.c | 263 +++++ src/modules/module_73000.c | 263 +++++ tools/test_modules/m72000.pm | 55 + tools/test_modules/m73000.pm | 55 + 16 files changed, 3182 insertions(+) create mode 100644 OpenCL/m72000-pure.cl create mode 100644 OpenCL/m73000-pure.cl create mode 100644 Python/generic_hash_mp.py create mode 100644 Python/generic_hash_sp.py create mode 100644 Python/hcmp.py create mode 100644 Python/hcshared.py create mode 100644 Python/hcsp.py create mode 100644 src/bridges/bridge_python_generic_hash_mp.c create mode 100644 src/bridges/bridge_python_generic_hash_mp.mk create mode 100644 src/bridges/bridge_python_generic_hash_sp.c create mode 100644 src/bridges/bridge_python_generic_hash_sp.mk create mode 100644 src/modules/module_72000.c create mode 100644 src/modules/module_73000.c create mode 100644 tools/test_modules/m72000.pm create mode 100644 tools/test_modules/m73000.pm diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7caa5ac47..ed0ec9575 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -76,6 +76,7 @@ jobs: libiconv libiconv-devel make + python - name: Build (Windows) if: matrix.os_name_lowercase == 'windows' diff --git a/OpenCL/m72000-pure.cl b/OpenCL/m72000-pure.cl new file mode 100644 index 000000000..3ca0285e5 --- /dev/null +++ b/OpenCL/m72000-pure.cl @@ -0,0 +1,79 @@ +/** + * Author......: See docs/credits.txt + * License.....: MIT + */ + +#ifdef KERNEL_STATIC +#include M2S(INCLUDE_PATH/inc_vendor.h) +#include M2S(INCLUDE_PATH/inc_types.h) +#include M2S(INCLUDE_PATH/inc_platform.cl) +#include M2S(INCLUDE_PATH/inc_common.cl) +#include M2S(INCLUDE_PATH/inc_hash_md4.cl) +#endif + +#define COMPARE_S M2S(INCLUDE_PATH/inc_comp_single.cl) +#define COMPARE_M M2S(INCLUDE_PATH/inc_comp_multi.cl) + +typedef struct +{ + // input + + u32 pw_buf[64]; + u32 pw_len; + + // output + + u32 out_buf[64]; + u32 out_len; + +} generic_io_tmp_t; + +KERNEL_FQ void m72000_init (KERN_ATTR_TMPS (generic_io_tmp_t)) +{ + const u64 gid = get_global_id (0); + + if (gid >= GID_CNT) return; + + const u32 pw_len = pws[gid].pw_len; + + for (u32 idx = 0; idx < 64; idx++) + { + tmps[gid].pw_buf[idx] = pws[gid].i[idx]; + } + + tmps[gid].pw_len = pw_len; +} + +KERNEL_FQ void m72000_loop (KERN_ATTR_TMPS (generic_io_tmp_t)) +{ +} + +KERNEL_FQ void m72000_comp (KERN_ATTR_TMPS (generic_io_tmp_t)) +{ + /** + * base + */ + + const u64 gid = get_global_id (0); + + if (gid >= GID_CNT) return; + + md4_ctx_t ctx0; + + md4_init (&ctx0); + + md4_update_global (&ctx0, tmps[gid].out_buf, tmps[gid].out_len); + + md4_final (&ctx0); + + const u32 r0 = ctx0.h[0]; + const u32 r1 = ctx0.h[1]; + const u32 r2 = ctx0.h[2]; + const u32 r3 = ctx0.h[3]; + + #define il_pos 0 + + #ifdef KERNEL_STATIC + #include COMPARE_M + #endif +} diff --git a/OpenCL/m73000-pure.cl b/OpenCL/m73000-pure.cl new file mode 100644 index 000000000..36859baf4 --- /dev/null +++ b/OpenCL/m73000-pure.cl @@ -0,0 +1,79 @@ +/** + * Author......: See docs/credits.txt + * License.....: MIT + */ + +#ifdef KERNEL_STATIC +#include M2S(INCLUDE_PATH/inc_vendor.h) +#include M2S(INCLUDE_PATH/inc_types.h) +#include M2S(INCLUDE_PATH/inc_platform.cl) +#include M2S(INCLUDE_PATH/inc_common.cl) +#include M2S(INCLUDE_PATH/inc_hash_md4.cl) +#endif + +#define COMPARE_S M2S(INCLUDE_PATH/inc_comp_single.cl) +#define COMPARE_M M2S(INCLUDE_PATH/inc_comp_multi.cl) + +typedef struct +{ + // input + + u32 pw_buf[64]; + u32 pw_len; + + // output + + u32 out_buf[64]; + u32 out_len; + +} generic_io_tmp_t; + +KERNEL_FQ void m73000_init (KERN_ATTR_TMPS (generic_io_tmp_t)) +{ + const u64 gid = get_global_id (0); + + if (gid >= GID_CNT) return; + + const u32 pw_len = pws[gid].pw_len; + + for (u32 idx = 0; idx < 64; idx++) + { + tmps[gid].pw_buf[idx] = pws[gid].i[idx]; + } + + tmps[gid].pw_len = pw_len; +} + +KERNEL_FQ void m73000_loop (KERN_ATTR_TMPS (generic_io_tmp_t)) +{ +} + +KERNEL_FQ void m73000_comp (KERN_ATTR_TMPS (generic_io_tmp_t)) +{ + /** + * base + */ + + const u64 gid = get_global_id (0); + + if (gid >= GID_CNT) return; + + md4_ctx_t ctx0; + + md4_init (&ctx0); + + md4_update_global (&ctx0, tmps[gid].out_buf, tmps[gid].out_len); + + md4_final (&ctx0); + + const u32 r0 = ctx0.h[0]; + const u32 r1 = ctx0.h[1]; + const u32 r2 = ctx0.h[2]; + const u32 r3 = ctx0.h[3]; + + #define il_pos 0 + + #ifdef KERNEL_STATIC + #include COMPARE_M + #endif +} diff --git a/Python/generic_hash_mp.py b/Python/generic_hash_mp.py new file mode 100644 index 000000000..537491b5a --- /dev/null +++ b/Python/generic_hash_mp.py @@ -0,0 +1,66 @@ +import sys +import struct +import hashlib +import hcshared +import hcmp + +ST_HASH = "33522b0fd9812aa68586f66dba7c17a8ce64344137f9c7d8b11f32a6921c22de*9348746780603343" +ST_PASS = "hashcat" + +# In theory, you only have to implement this function... + +def calc_hash(password: bytes, salt: dict) -> str: + salt_buf = hcshared.get_salt_buf(salt) + hash = hashlib.sha256(salt_buf + password) + for i in range(10000): + hash = hashlib.sha256(hash.digest()) + return hash.hexdigest() + +# ...except when using an esalt. The esalt void* structure is both dynamic and specific to a hash mode. +# If you use an esalt, you must convert its contents into Python datatypes. +# If you don't use esalt, just return [] +# For this example hash-mode, we kept it very general and pushed all salt data in a generic format of generic sizes +# As such, it has to go into esalt + +def extract_esalts(esalts_buf): + esalts=[] + for hash_buf, hash_len, salt_buf, salt_len in struct.iter_unpack("65536s I 65536s I", esalts_buf): + hash_buf = hash_buf[0:hash_len] + salt_buf = salt_buf[0:salt_len] + esalts.append({ "hash_buf": hash_buf, "salt_buf": salt_buf }) + return esalts + +# From here you really can leave things as they are +# The init function is good for converting the hashcat data type because it is only called once + +def kernel_loop(ctx,passwords,salt_id,is_selftest): + return hcmp.handle_queue(ctx,passwords,salt_id,is_selftest) + +def init(ctx): + hcmp.init(ctx,calc_hash,extract_esalts) + +def term(ctx): + hcmp.term(ctx) + +# This code is only intended to enable debugging via a standalone Python interpreter. +# It makes development easier as you don't have to use a hashcat to test your changes. +# Read passwords from stdin + +if __name__ == '__main__': + ctx = { + "salts_buf": bytes(568), + "esalts_buf": bytes(131080), + "st_salts_buf": bytes(568), + "st_esalts_buf": bytes(131080) + } + init(ctx) + hashcat_passwords = 256 + passwords = [] + for line in sys.stdin: + passwords.append(bytes(line.rstrip(), 'utf-8')) + if(len(passwords) == hashcat_passwords): + hashes = kernel_loop(ctx,passwords,0,False) + passwords.clear() + hashes = kernel_loop(ctx,passwords,0,False) ## remaining entries + if(len(hashes)): print(hashes[-1]) + term(ctx) diff --git a/Python/generic_hash_sp.py b/Python/generic_hash_sp.py new file mode 100644 index 000000000..e49db9577 --- /dev/null +++ b/Python/generic_hash_sp.py @@ -0,0 +1,66 @@ +import sys +import struct +import hashlib +import hcshared +import hcsp + +ST_HASH = "33522b0fd9812aa68586f66dba7c17a8ce64344137f9c7d8b11f32a6921c22de*9348746780603343" +ST_PASS = "hashcat" + +# In theory, you only have to implement this function... + +def calc_hash(password: bytes, salt: dict) -> str: + salt_buf = hcshared.get_salt_buf(salt) + hash = hashlib.sha256(salt_buf + password) + for i in range(10000): + hash = hashlib.sha256(hash.digest()) + return hash.hexdigest() + +# ...except when using an esalt. The esalt void* structure is both dynamic and specific to a hash mode. +# If you use an esalt, you must convert its contents into Python datatypes. +# If you don't use esalt, just return [] +# For this example hash-mode, we kept it very general and pushed all salt data in a generic format of generic sizes +# As such, it has to go into esalt + +def extract_esalts(esalts_buf): + esalts=[] + for hash_buf, hash_len, salt_buf, salt_len in struct.iter_unpack("65536s I 65536s I", esalts_buf): + hash_buf = hash_buf[0:hash_len] + salt_buf = salt_buf[0:salt_len] + esalts.append({ "hash_buf": hash_buf, "salt_buf": salt_buf }) + return esalts + +# From here you really can leave things as they are +# The init function is good for converting the hashcat data type because it is only called once + +def kernel_loop(ctx,passwords,salt_id,is_selftest): + return hcsp.handle_queue(ctx,passwords,salt_id,is_selftest) + +def init(ctx): + hcsp.init(ctx,calc_hash,extract_esalts) + +def term(ctx): + hcsp.term(ctx) + +# This code is only intended to enable debugging via a standalone Python interpreter. +# It makes development easier as you don't have to use a hashcat to test your changes. +# Read passwords from stdin + +if __name__ == '__main__': + ctx = { + "salts_buf": bytes(568), + "esalts_buf": bytes(131080), + "st_salts_buf": bytes(568), + "st_esalts_buf": bytes(131080) + } + init(ctx) + hashcat_passwords = 256 + passwords = [] + for line in sys.stdin: + passwords.append(bytes(line.rstrip(), 'utf-8')) + if(len(passwords) == hashcat_passwords): + hashes = kernel_loop(ctx,passwords,0,False) + passwords.clear() + hashes = kernel_loop(ctx,passwords,0,False) ## remaining entries + if(len(hashes)): print(hashes[-1]) + term(ctx) diff --git a/Python/hcmp.py b/Python/hcmp.py new file mode 100644 index 000000000..e650c8e4e --- /dev/null +++ b/Python/hcmp.py @@ -0,0 +1,81 @@ +import sys +import hcshared +import multiprocessing +import math + +def child(qi,qo,salts,st_salts,user_fn): + while True: + entry = qi.get() + if entry is None: + break + salt_id, passwords, is_selftest = entry + if is_selftest: + salt = st_salts[salt_id] + else: + salt = salts[salt_id] + hashes = [] + for password in passwords: + try: + hashes.append(user_fn(password,salt)) + except Exception as e: + print (e, file=sys.stderr) + hashes.append("invalid-password") + qo.put(hashes) + return + +def handle_queue(ctx: dict,passwords: list,salt_id: int,is_selftest: bool) -> list: + npasswords = len(passwords) + if(npasswords == 0): return [] + nprocs = ctx["nprocs"] + qos = ctx["qos"] + qis = ctx["qis"] + batchsize = int((npasswords+(nprocs-1))/nprocs) # round up, to garantee none of the procs are called more than once per invocation + child_ids = math.ceil(npasswords/batchsize) # relevant if npasswords < batchsize + slice_start = 0 + slice_stop = slice_start+batchsize + for child_id in range(child_ids): + qos[child_id].put([salt_id, passwords[slice_start:slice_stop], is_selftest]) + slice_start = slice_stop + slice_stop = slice_start+batchsize + hashes = [] + for child_id in range(child_ids): + hashes.extend(qis[child_id].get()) + return(hashes) + +def init(ctx: dict,user_fn,extract_esalts): + # Extract salt and esalt, merge esalt into salt + salts = hcshared.extract_salts(ctx["salts_buf"]) + esalts = extract_esalts(ctx["esalts_buf"]) + for salt,esalt in zip(salts,esalts): + salt["esalt"] = esalt + # Same extraction, but for self-test hash + st_salts = hcshared.extract_salts(ctx["st_salts_buf"]) + st_esalts = extract_esalts(ctx["st_esalts_buf"]) + for salt,esalt in zip(st_salts,st_esalts): + salt["esalt"] = esalt + # Use native cpu count + nprocs = multiprocessing.cpu_count() + procs = [] + qis = [] + qos = [] + multiprocessing.set_start_method('spawn', force=True) + for child_id in range(nprocs): + qi = multiprocessing.Queue(1) + qis.append(qi) + qo = multiprocessing.Queue(1) + qos.append(qo) + proc = multiprocessing.Process(target=child, args=(qo,qi,salts,st_salts,user_fn)) # note qi/qo side switch! + proc.start() + procs.append(proc) + ctx.update ({ "nprocs": nprocs, "procs": procs, "qis": qis, "qos": qos, "salts": salts, "st_salts": st_salts }) + return + +def term(ctx: dict): + nprocs = ctx["nprocs"] + procs = ctx["procs"] + qos = ctx["qos"] + for child_id in range(nprocs): + qos[child_id].put(None) + for child_id in range(nprocs): + procs[child_id].join() + return diff --git a/Python/hcshared.py b/Python/hcshared.py new file mode 100644 index 000000000..970429542 --- /dev/null +++ b/Python/hcshared.py @@ -0,0 +1,60 @@ +import struct + +# Extract a blob that is a list of salt_t entries and convert it to a list of dictionaries +# The salt_t is a fixed data-type so we can handle it here + +def extract_salts(salts_buf) -> list: + salts=[] + for salt_buf, salt_buf_pc, salt_len, salt_len_pc, salt_iter, salt_iter2, salt_sign, salt_repeats, orig_pos, digests_cnt, digests_done, digests_offset, scrypt_N, scrypt_r, scrypt_p in struct.iter_unpack("256s 256s I I I I 8s I I I I I I I I", salts_buf): + salt_buf = salt_buf[0:salt_len] + salt_buf_pc = salt_buf_pc[0:salt_len_pc] + salts.append({ "salt_buf": salt_buf, \ + "salt_buf_pc": salt_buf_pc, \ + "salt_iter": salt_iter, \ + "salt_iter2": salt_iter2, \ + "salt_sign": salt_sign, \ + "salt_repeats": salt_repeats, \ + "orig_pos": orig_pos, \ + "digests_cnt": digests_cnt, \ + "digests_done": digests_done, \ + "scrypt_N": scrypt_N, \ + "scrypt_r": scrypt_r, \ + "scrypt_p": scrypt_p, \ + "esalt": None }) + return salts + +def get_salt_buf(salt: dict) -> bytes: + return salt["esalt"]["salt_buf"] + +def get_salt_buf_pc(salt: dict) -> bytes: + return salt["esalt"]["salt_buf_pc"] + +def get_salt_iter(salt: dict) -> int: + return salt["esalt"]["salt_iter"] + +def get_salt_iter2(salt: dict) -> int: + return salt["esalt"]["salt_iter2"] + +def get_salt_sign(salt: dict) -> bytes: + return salt["esalt"]["salt_sign"] + +def get_salt_repeats(salt: dict) -> int: + return salt["esalt"]["salt_repeats"] + +def get_orig_pos(salt: dict) -> int: + return salt["esalt"]["orig_pos"] + +def get_digests_cnt(salt: dict) -> int: + return salt["esalt"]["digests_cnt"] + +def get_digests_done(salt: dict) -> int: + return salt["esalt"]["digests_done"] + +def get_digests_offset(salt: dict) -> int: + return salt["esalt"]["digests_offset"] + +def get_scrypt_N(salt: dict) -> int: + return salt["esalt"]["scrypt_N"] + +def get_scrypt_r(salt: dict) -> int: + return salt["esalt"]["scrypt_r"] diff --git a/Python/hcsp.py b/Python/hcsp.py new file mode 100644 index 000000000..0b3a0f7f7 --- /dev/null +++ b/Python/hcsp.py @@ -0,0 +1,36 @@ +import sys +import hcshared + +def handle_queue(ctx: dict,passwords: list,salt_id: int,is_selftest: bool) -> list: + npasswords = len(passwords) + if(npasswords == 0): return [] + user_fn = ctx["user_fn"] + if is_selftest: + salt = ctx["st_salts"][salt_id] + else: + salt = ctx["salts"][salt_id] + hashes = [] + for password in passwords: + try: + hashes.append(user_fn(password,salt)) + except Exception as e: + print (e, file=sys.stderr) + hashes.append("invalid-password") + return(hashes) + +def init(ctx: dict,user_fn,extract_esalts): + # Extract salt and esalt, merge esalt into salt + salts = hcshared.extract_salts(ctx["salts_buf"]) + esalts = extract_esalts(ctx["esalts_buf"]) + for salt,esalt in zip(salts,esalts): + salt["esalt"] = esalt + # Same extraction, but for self-test hash + st_salts = hcshared.extract_salts(ctx["st_salts_buf"]) + st_esalts = extract_esalts(ctx["st_esalts_buf"]) + for salt,esalt in zip(st_salts,st_esalts): + salt["esalt"] = esalt + ctx.update ({ "salts": salts, "st_salts": st_salts, "user_fn": user_fn }) + return + +def term(ctx: dict): + return diff --git a/src/bridges/bridge_python_generic_hash_mp.c b/src/bridges/bridge_python_generic_hash_mp.c new file mode 100644 index 000000000..36d61768f --- /dev/null +++ b/src/bridges/bridge_python_generic_hash_mp.c @@ -0,0 +1,979 @@ +/** + * Author......: See docs/credits.txt + * License.....: MIT + */ + +#include "common.h" +#include "types.h" +#include "bridges.h" +#include "memory.h" +#include "shared.h" +#include "dynloader.h" + +#if defined (_WIN) +#include "processenv.h" +#endif + +// python interpreter + +#define PY_SSIZE_T_CLEAN + +#undef _GNU_SOURCE +#include + +#define PYTHON_API_CALL + +typedef void (PYTHON_API_CALL *PY_INITIALIZE) (); +typedef void (PYTHON_API_CALL *PY_FINALIZE) (); +typedef void (PYTHON_API_CALL *PY_DECREF) (PyObject *); +typedef PyObject *(PYTHON_API_CALL *PYBOOL_FROMLONG) (long); +typedef PyObject *(PYTHON_API_CALL *PYBYTES_FROMSTRINGANDSIZE) (const char *, Py_ssize_t); +typedef int (PYTHON_API_CALL *PYDICT_DELITEMSTRING) (PyObject *, const char *); +typedef PyObject *(PYTHON_API_CALL *PYDICT_GETITEMSTRING) (PyObject *, const char *); +typedef PyObject *(PYTHON_API_CALL *PYDICT_NEW) (); +typedef int (PYTHON_API_CALL *PYDICT_SETITEMSTRING) (PyObject *, const char *, PyObject *); +typedef void (PYTHON_API_CALL *PYERR_PRINT) (); +typedef PyObject *(PYTHON_API_CALL *PYIMPORT_IMPORTMODULE) (const char *); +typedef PyObject *(PYTHON_API_CALL *PYIMPORT_IMPORT) (PyObject *); +typedef int (PYTHON_API_CALL *PYLIST_APPEND) (PyObject *, PyObject *); +typedef PyObject *(PYTHON_API_CALL *PYLIST_GETITEM) (PyObject *, Py_ssize_t); +typedef PyObject *(PYTHON_API_CALL *PYLIST_NEW) (Py_ssize_t); +typedef int (PYTHON_API_CALL *PYLIST_SETITEM) (PyObject *, Py_ssize_t, PyObject *); +typedef Py_ssize_t (PYTHON_API_CALL *PYLIST_SIZE) (PyObject *); +typedef PyObject *(PYTHON_API_CALL *PYLONG_FROMLONG) (long); +typedef PyObject *(PYTHON_API_CALL *PYOBJECT_CALLOBJECT) (PyObject *, PyObject *); +typedef PyObject *(PYTHON_API_CALL *PYOBJECT_GETATTRSTRING) (PyObject *, const char *); +typedef PyObject *(PYTHON_API_CALL *PYTUPLE_NEW) (Py_ssize_t); +typedef int (PYTHON_API_CALL *PYTUPLE_SETITEM) (PyObject *, Py_ssize_t, PyObject *); +typedef const char *(PYTHON_API_CALL *PYUNICODE_ASUTF8) (PyObject *); +typedef const char *(PYTHON_API_CALL *PYUNICODE_ASUTF8ANDSIZE) (PyObject *, Py_ssize_t *); +typedef PyObject *(PYTHON_API_CALL *PYUNICODE_DECODEFSDEFAULTANDSIZE) (const char *, Py_ssize_t); +typedef PyObject *(PYTHON_API_CALL *PYUNICODE_DECODEFSDEFAULT) (const char *); +typedef PyObject *(PYTHON_API_CALL *PYUNICODE_FROMSTRINGANDSIZE) (const char *, Py_ssize_t); +typedef PyObject *(PYTHON_API_CALL *PYUNICODE_FROMSTRING) (const char *); +typedef void (PYTHON_API_CALL *PYEVAL_ACQUIRELOCK) (void); +typedef void (PYTHON_API_CALL *PYEVAL_RELEASELOCK) (void); +typedef PyThreadState *(PYTHON_API_CALL *PYTHREADSTATE_SWAP) (PyThreadState *); +typedef PyThreadState *(PYTHON_API_CALL *PYNEWINTERPRETER) (void); +typedef void (PYTHON_API_CALL *PYENDINTERPRETER) (PyThreadState *); +typedef PyGILState_STATE (PYTHON_API_CALL *PYGILSTATE_ENSURE) (void); +typedef void (PYTHON_API_CALL *PYGILSTATE_RELEASE) (PyGILState_STATE); +typedef void (PYTHON_API_CALL *PYEVAL_ACQUIRETHREAD) (PyThreadState *); +typedef void (PYTHON_API_CALL *PYEVAL_RELEASETHREAD) (PyThreadState *); +typedef void (PYTHON_API_CALL *PYTHREADSTATE_CLEAR) (PyThreadState *); +typedef void (PYTHON_API_CALL *PYTHREADSTATE_DELETE) (PyThreadState *); +typedef PyThreadState *(PYTHON_API_CALL *PYTHREADSTATE_NEW) (PyInterpreterState *); +typedef PyInterpreterState *(PYTHON_API_CALL *PYINTERPRETERSTATE_MAIN) (void); +typedef void (PYTHON_API_CALL *PYEVAL_INITTHREADS) (void); +typedef PyThreadState *(PYTHON_API_CALL *PYEVAL_SAVETHREAD) (void); +//typedef PyStatus (PYTHON_API_CALL *PYNEWINTERPRETERFROMCONFIG) (PyThreadState **, const PyInterpreterConfig *); +typedef void (PYTHON_API_CALL *PYEXITSTATUSEXCEPTION) (PyStatus); +typedef PyStatus (PYTHON_API_CALL *PYINITIALIZEFROMCONFIG) (const PyConfig *); +typedef void (PYTHON_API_CALL *PYEVAL_RESTORETHREAD) (PyThreadState *); +typedef const char *(PYTHON_API_CALL *PYGETVERSION) (void); + +typedef struct hc_python_lib +{ + hc_dynlib_t lib; + + PY_INITIALIZE Py_Initialize; + PY_FINALIZE Py_Finalize; + PY_DECREF Py_DecRef; + PYBOOL_FROMLONG PyBool_FromLong; + PYBYTES_FROMSTRINGANDSIZE PyBytes_FromStringAndSize; + PYDICT_DELITEMSTRING PyDict_DelItemString; + PYDICT_GETITEMSTRING PyDict_GetItemString; + PYDICT_NEW PyDict_New; + PYDICT_SETITEMSTRING PyDict_SetItemString; + PYERR_PRINT PyErr_Print; + PYIMPORT_IMPORTMODULE PyImport_ImportModule; + PYIMPORT_IMPORT PyImport_Import; + PYLIST_APPEND PyList_Append; + PYLIST_GETITEM PyList_GetItem; + PYLIST_NEW PyList_New; + PYLIST_SETITEM PyList_SetItem; + PYLIST_SIZE PyList_Size; + PYLONG_FROMLONG PyLong_FromLong; + PYOBJECT_CALLOBJECT PyObject_CallObject; + PYOBJECT_GETATTRSTRING PyObject_GetAttrString; + PYTUPLE_NEW PyTuple_New; + PYTUPLE_SETITEM PyTuple_SetItem; + PYUNICODE_ASUTF8 PyUnicode_AsUTF8; + PYUNICODE_ASUTF8ANDSIZE PyUnicode_AsUTF8AndSize; + PYUNICODE_DECODEFSDEFAULTANDSIZE PyUnicode_DecodeFSDefaultAndSize; + PYUNICODE_DECODEFSDEFAULT PyUnicode_DecodeFSDefault; + PYUNICODE_FROMSTRINGANDSIZE PyUnicode_FromStringAndSize; + PYUNICODE_FROMSTRING PyUnicode_FromString; + PYEVAL_ACQUIRELOCK PyEval_AcquireLock; + PYEVAL_RELEASELOCK PyEval_ReleaseLock; + PYTHREADSTATE_SWAP PyThreadState_Swap; + PYNEWINTERPRETER Py_NewInterpreter; + PYENDINTERPRETER Py_EndInterpreter; + PYGILSTATE_ENSURE PyGILState_Ensure; + PYGILSTATE_RELEASE PyGILState_Release; + PYEVAL_ACQUIRETHREAD PyEval_AcquireThread; + PYEVAL_RELEASETHREAD PyEval_ReleaseThread; + PYTHREADSTATE_CLEAR PyThreadState_Clear; + PYTHREADSTATE_DELETE PyThreadState_Delete; + PYTHREADSTATE_NEW PyThreadState_New; + PYINTERPRETERSTATE_MAIN PyInterpreterState_Main; + PYEVAL_INITTHREADS PyEval_InitThreads; + PYEVAL_SAVETHREAD PyEval_SaveThread; + //PYNEWINTERPRETERFROMCONFIG Py_NewInterpreterFromConfig; + PYEXITSTATUSEXCEPTION Py_ExitStatusException; + PYINITIALIZEFROMCONFIG Py_InitializeFromConfig; + PYEVAL_RESTORETHREAD PyEval_RestoreThread; + PYGETVERSION Py_GetVersion; + +} hc_python_lib_t; + +// good: we can use this multiplier do reduce copy overhead to increase the guessing speed, +// bad: but we also increase the password candidate batch size. +// slow hashes which make use of this bridge probably are used with smaller wordlists, +// and therefore it's easier for hashcat to parallelize if this multiplier is low. +// in the end, it's a trade-off. + +#define N_ACCEL 8 + +typedef struct +{ + // input + + u32 pw_buf[64]; + u32 pw_len; + + // output + + u32 out_buf[64]; + u32 out_len; + +} generic_io_tmp_t; + +typedef struct +{ + // template + + char unit_info_buf[1024]; + int unit_info_len; + + u64 workitem_count; + size_t workitem_size; + + // implementation specific + + PyGILState_STATE gstate; + + PyObject *pArgs; + PyObject *pContext; + PyObject *pModule; + PyObject *pFunc_Init; + PyObject *pFunc_Term; + PyObject *pFunc_kernel_loop; + +} unit_t; + +typedef struct +{ + unit_t *units_buf; + int units_cnt; + + hc_python_lib_t *python; + + PyThreadState *tstate; + + char *source_filename; + +} python_interpreter_t; + +#if defined (_WIN) +static char *DEFAULT_SOURCE_FILENAME = "generic_hash_sp"; +#else +static char *DEFAULT_SOURCE_FILENAME = "generic_hash_mp"; +#endif + +static bool init_python (hc_python_lib_t *python) +{ + char *pythondll_path = NULL; + + python->lib = NULL; + + #define MIN_MAJ 3 + #define MAX_MAJ 8 + + #define MIN_MIN 0 + #define MAX_MIN 50 + + #if defined (_WIN) + + for (int maj = MAX_MAJ; maj >= MIN_MAJ; --maj) + { + for (int min = MAX_MIN; min >= MIN_MIN; --min) + { + // first try %LocalAppData% default path + char expandedPath[MAX_PATH]; + + char *libpython_namelocal = NULL; + + hc_asprintf (&libpython_namelocal, "%%LocalAppData%%\\Programs\\Python\\Python%d%d\\python%d%d.dll", maj, min, maj, min); + + DWORD len = ExpandEnvironmentStringsA (libpython_namelocal, expandedPath, sizeof (expandedPath)); + + if (len) + { + python->lib = hc_dlopen (expandedPath); + + if (python->lib != NULL) + { + pythondll_path = hcstrdup (expandedPath); + + hcfree (libpython_namelocal); + + break; + } + else + { + hcfree (libpython_namelocal); + }; + } + + // use %PATH% + char *libpython_namepath = NULL; + + hc_asprintf (&libpython_namepath, "python%d%d.dll", maj, min); + + python->lib = hc_dlopen (libpython_namepath); + + if (python->lib != NULL) + { + pythondll_path = libpython_namepath; + + break; + } + else + { + hcfree (libpython_namepath); + }; + + if (python->lib != NULL) break; + } + + if (python->lib != NULL) break; + } + + #elif defined (__MSYS__) + + for (int maj = MAX_MAJ; maj >= MIN_MAJ; --maj) + { + for (int min = MAX_MIN; min >= MIN_MIN; --min) + { + char *libpython_name = NULL; + + hc_asprintf (&libpython_name, "msys-python%d.%d.dll", maj, min); + + python->lib = dlopen (libpython_name, RTLD_NOW | RTLD_GLOBAL); + + if (python->lib != NULL) + { + pythondll_path = libpython_name; + + break; + } + else + { + hcfree (libpython_name); + }; + + if (python->lib != NULL) break; + } + + if (python->lib != NULL) break; + } + + #elif defined (__APPLE__) + + // untested + for (int maj = MAX_MAJ; maj >= MIN_MAJ; --maj) + { + for (int min = MAX_MIN; min >= MIN_MIN; --min) + { + char *libpython_name = NULL; + + hc_asprintf (&libpython_name, "libpython%d.%d.dylib", maj, min); + + python->lib = dlopen (libpython_name, RTLD_NOW | RTLD_GLOBAL); + + if (python->lib != NULL) + { + pythondll_path = libpython_name; + + break; + } + else + { + hcfree (libpython_name); + }; + + if (python->lib != NULL) break; + } + + if (python->lib != NULL) break; + } + + #elif defined (__CYGWIN__) + + // untested + for (int maj = MAX_MAJ; maj >= MIN_MAJ; --maj) + { + for (int min = MAX_MIN; min >= MIN_MIN; --min) + { + char *libpython_name = NULL; + + hc_asprintf (&libpython_name, "python%d%d.dll", maj, min); + + python->lib = hc_dlopen (libpython_name); + + if (python->lib != NULL) + { + pythondll_path = libpython_name; + + break; + } + else + { + hcfree (libpython_name); + }; + + if (python->lib != NULL) break; + } + + if (python->lib != NULL) break; + } + + #else + + for (int maj = MAX_MAJ; maj >= MIN_MAJ; --maj) + { + for (int min = MAX_MIN; min >= MIN_MIN; --min) + { + char *libpython_name = NULL; + + hc_asprintf (&libpython_name, "libpython%d.%d.so", maj, min); + + python->lib = dlopen (libpython_name, RTLD_NOW | RTLD_GLOBAL); + + if (python->lib != NULL) + { + pythondll_path = libpython_name; + + break; + } + else + { + hcfree (libpython_name); + }; + + if (python->lib != NULL) break; + } + + if (python->lib != NULL) break; + } + + #endif + + if (python->lib == NULL) + { + fprintf (stderr, "Awww, unable to find Python shared library.\n"); + + return false; + } + else + { + printf ("Loaded python library from: %s\n\n", pythondll_path); + } + + #define HC_LOAD_FUNC_PYTHON(ptr,name,pythonname,type,libname,noerr) \ + do { \ + ptr->name = (type) hc_dlsym ((ptr)->lib, #pythonname); \ + if ((noerr) != -1) { \ + if (!(ptr)->name) { \ + if ((noerr) == 1) { \ + fprintf (stderr, "%s is missing from %s shared library.", #name, #libname); \ + return false; \ + } \ + if ((noerr) != 1) { \ + fprintf (stderr, "%s is missing from %s shared library.", #name, #libname); \ + return true; \ + } \ + } \ + } \ + } while (0) + + HC_LOAD_FUNC_PYTHON (python, Py_GetVersion, Py_GetVersion, PYGETVERSION, PYTHON, 1); + + const char *version_str = python->Py_GetVersion (); + + int major = 0; + int minor = 0; + + if (sscanf (version_str, "%d.%d", &major, &minor) != 2) + { + fprintf (stderr, "Python version string is not valid: %s\n", version_str); + + return false; + } + + if ((major < 3) || (major == 3 && minor < 10)) + { + fprintf (stderr, "Python version mismatch: Need at least v3.10\n"); + + return false; + } + + HC_LOAD_FUNC_PYTHON (python, Py_Initialize, Py_Initialize, PY_INITIALIZE, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, Py_Finalize, Py_Finalize, PY_FINALIZE, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, Py_DecRef, Py_DecRef, PY_DECREF, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyBool_FromLong, PyBool_FromLong, PYBOOL_FROMLONG, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyBytes_FromStringAndSize, PyBytes_FromStringAndSize, PYBYTES_FROMSTRINGANDSIZE, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyDict_DelItemString, PyDict_DelItemString, PYDICT_DELITEMSTRING, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyDict_GetItemString, PyDict_GetItemString, PYDICT_GETITEMSTRING, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyDict_New, PyDict_New, PYDICT_NEW, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyDict_SetItemString, PyDict_SetItemString, PYDICT_SETITEMSTRING, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyErr_Print, PyErr_Print, PYERR_PRINT, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyImport_ImportModule, PyImport_ImportModule, PYIMPORT_IMPORTMODULE, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyImport_Import, PyImport_Import, PYIMPORT_IMPORT, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyList_Append, PyList_Append, PYLIST_APPEND, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyList_GetItem, PyList_GetItem, PYLIST_GETITEM, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyList_New, PyList_New, PYLIST_NEW, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyList_SetItem, PyList_SetItem, PYLIST_SETITEM, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyList_Size, PyList_Size, PYLIST_SIZE, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyLong_FromLong, PyLong_FromLong, PYLONG_FROMLONG, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyObject_CallObject, PyObject_CallObject, PYOBJECT_CALLOBJECT, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyObject_GetAttrString, PyObject_GetAttrString, PYOBJECT_GETATTRSTRING, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyTuple_New, PyTuple_New, PYTUPLE_NEW, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyTuple_SetItem, PyTuple_SetItem, PYTUPLE_SETITEM, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyUnicode_AsUTF8, PyUnicode_AsUTF8, PYUNICODE_ASUTF8, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyUnicode_AsUTF8AndSize, PyUnicode_AsUTF8AndSize, PYUNICODE_ASUTF8ANDSIZE, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyUnicode_DecodeFSDefaultAndSize, PyUnicode_DecodeFSDefaultAndSize, PYUNICODE_DECODEFSDEFAULTANDSIZE, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyUnicode_DecodeFSDefault, PyUnicode_DecodeFSDefault, PYUNICODE_DECODEFSDEFAULT, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyUnicode_FromStringAndSize, PyUnicode_FromStringAndSize, PYUNICODE_FROMSTRINGANDSIZE, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyUnicode_FromString, PyUnicode_FromString, PYUNICODE_FROMSTRING, PYTHON, 1); + //HC_LOAD_FUNC_PYTHON (python, PyEval_AcquireLock, PyEval_AcquireLock, PYEVAL_ACQUIRELOCK, PYTHON, 1); + //HC_LOAD_FUNC_PYTHON (python, PyEval_ReleaseLock, PyEval_ReleaseLock, PYEVAL_RELEASELOCK, PYTHON, 1); + //HC_LOAD_FUNC_PYTHON (python, PyThreadState_Swap, PyThreadState_Swap, PYTHREADSTATE_SWAP, PYTHON, 1); + //HC_LOAD_FUNC_PYTHON (python, Py_NewInterpreter, Py_NewInterpreter, PYNEWINTERPRETER, PYTHON, 1); + //HC_LOAD_FUNC_PYTHON (python, Py_EndInterpreter, Py_EndInterpreter, PYENDINTERPRETER, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyGILState_Ensure, PyGILState_Ensure, PYGILSTATE_ENSURE, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyGILState_Release, PyGILState_Release, PYGILSTATE_RELEASE, PYTHON, 1); + //HC_LOAD_FUNC_PYTHON (python, PyEval_AcquireThread, PyEval_AcquireThread, PYEVAL_ACQUIRETHREAD, PYTHON, 1); + //HC_LOAD_FUNC_PYTHON (python, PyEval_ReleaseThread, PyEval_ReleaseThread, PYEVAL_RELEASETHREAD, PYTHON, 1); + //HC_LOAD_FUNC_PYTHON (python, PyThreadState_Clear, PyThreadState_Clear, PYTHREADSTATE_CLEAR, PYTHON, 1); + //HC_LOAD_FUNC_PYTHON (python, PyThreadState_Delete, PyThreadState_Delete, PYTHREADSTATE_DELETE, PYTHON, 1); + //HC_LOAD_FUNC_PYTHON (python, PyThreadState_New, PyThreadState_New, PYTHREADSTATE_NEW, PYTHON, 1); + //HC_LOAD_FUNC_PYTHON (python, PyInterpreterState_Main, PyInterpreterState_Main, PYINTERPRETERSTATE_MAIN, PYTHON, 1); + //HC_LOAD_FUNC_PYTHON (python, PyEval_InitThreads, PyEval_InitThreads, PYEVAL_INITTHREADS, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyEval_SaveThread, PyEval_SaveThread, PYEVAL_SAVETHREAD, PYTHON, 1); + //HC_LOAD_FUNC_PYTHON (python, Py_NewInterpreterFromConfig, Py_NewInterpreterFromConfig, PYNEWINTERPRETERFROMCONFIG, PYTHON, 1); + //HC_LOAD_FUNC_PYTHON (python, Py_ExitStatusException, Py_ExitStatusException, PYEXITSTATUSEXCEPTION, PYTHON, 1); + //HC_LOAD_FUNC_PYTHON (python, Py_InitializeFromConfig, Py_InitializeFromConfig, PYINITIALIZEFROMCONFIG, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyEval_RestoreThread, PyEval_RestoreThread, PYEVAL_RESTORETHREAD, PYTHON, 1); + + return true; +} + +static bool units_init (python_interpreter_t *python_interpreter) +{ + #if defined (_WIN) + + SYSTEM_INFO sysinfo; + + GetSystemInfo (&sysinfo); + + int num_devices = sysinfo.dwNumberOfProcessors; + + #else + + int num_devices = sysconf (_SC_NPROCESSORS_ONLN); + + #endif + + // This branch of python plugin handles threads through multiprocessing module, so we only need one thread + // Bu we will multiply N_ACCEL later with the num_devices count to achieve the same workload size + + const int num_devices_sav = num_devices; + + num_devices = 1; + + unit_t *units_buf = (unit_t *) hccalloc (num_devices, sizeof (unit_t)); + + int units_cnt = 0; + + for (int i = 0; i < num_devices; i++) + { + unit_t *unit_buf = &units_buf[i]; + + hc_python_lib_t *python = python_interpreter->python; + + unit_buf->unit_info_len = snprintf (unit_buf->unit_info_buf, sizeof (unit_buf->unit_info_buf) - 1, "Python Interpreter (%s)", python->Py_GetVersion ()); + + unit_buf->unit_info_buf[unit_buf->unit_info_len] = 0; + + unit_buf->workitem_count = N_ACCEL * num_devices_sav; + + units_cnt++; + } + + python_interpreter->units_buf = units_buf; + python_interpreter->units_cnt = units_cnt; + + return true; +} + +static void units_term (python_interpreter_t *python_interpreter) +{ + unit_t *units_buf = python_interpreter->units_buf; + + if (units_buf) + { + hcfree (python_interpreter->units_buf); + } +} + +void *platform_init (user_options_t *user_options) +{ + python_interpreter_t *python_interpreter = (python_interpreter_t *) hcmalloc (sizeof (python_interpreter_t)); + + hc_python_lib_t *python = (hc_python_lib_t *) hcmalloc (sizeof (hc_python_lib_t)); + + python_interpreter->python = python; + + if (init_python (python) == false) return NULL; + + python->Py_Initialize (); + + PyObject *sys = python->PyImport_ImportModule ("sys"); + PyObject *path = python->PyObject_GetAttrString (sys, "path"); + python->PyList_Append (path, python->PyUnicode_FromString ("./Python")); + //python->Py_DecRef (path); + //python->Py_DecRef (sys); + + if (units_init (python_interpreter) == false) + { + hcfree (python_interpreter); + + return NULL; + } + + unit_t *unit_buf = &python_interpreter->units_buf[0]; + + #if defined (_WIN) + fprintf (stderr, "Attention!!! Falling back to single-threaded mode.\n"); + fprintf (stderr, " Windows does not support multiprocessing module cleanly!\n"); + fprintf (stderr, " For multithreading on Windows, please use -m 72000 instead.\n\n"); + #endif + + python_interpreter->source_filename = (user_options->bridge_parameter1) ? user_options->bridge_parameter1 : DEFAULT_SOURCE_FILENAME; + + PyObject *pName = python->PyUnicode_DecodeFSDefault (python_interpreter->source_filename); + + if (pName == NULL) + { + python->PyErr_Print (); + + return false; + } + + unit_buf->pModule = python->PyImport_Import (pName); + + if (unit_buf->pModule == NULL) + { + python->PyErr_Print (); + + return false; + } + + //python->Py_DecRef (pName); + + unit_buf->pFunc_Init = python->PyObject_GetAttrString (unit_buf->pModule, "init"); + + if (unit_buf->pFunc_Init == NULL) + { + python->PyErr_Print (); + + return false; + } + + unit_buf->pFunc_Term = python->PyObject_GetAttrString (unit_buf->pModule, "term"); + + if (unit_buf->pFunc_Term == NULL) + { + python->PyErr_Print (); + + return false; + } + + unit_buf->pFunc_kernel_loop = python->PyObject_GetAttrString (unit_buf->pModule, "kernel_loop"); + + if (unit_buf->pFunc_kernel_loop == NULL) + { + python->PyErr_Print (); + + return false; + } + + // Initialize Context (which also means copy salts because they are part of the context) + + unit_buf->pContext = python->PyDict_New (); + + if (unit_buf->pContext == NULL) + { + python->PyErr_Print (); + + return false; + } + + // for later calls + + unit_buf->pArgs = python->PyTuple_New (4); + + if (unit_buf->pArgs == NULL) + { + python->PyErr_Print (); + + return false; + } + + python->PyTuple_SetItem (unit_buf->pArgs, 0, unit_buf->pContext); + python->PyTuple_SetItem (unit_buf->pArgs, 2, python->PyLong_FromLong (0)); + python->PyTuple_SetItem (unit_buf->pArgs, 3, python->PyBool_FromLong (false)); + + python_interpreter->tstate = python->PyEval_SaveThread (); + + return python_interpreter; +} + +void platform_term (void *platform_context) +{ + python_interpreter_t *python_interpreter = platform_context; + + hc_python_lib_t *python = python_interpreter->python; + + unit_t *unit_buf = &python_interpreter->units_buf[0]; + + unit_buf->gstate = python->PyGILState_Ensure (); + + //python->Py_DecRef (unit_buf->pFunc_kernel_loop); + //python->Py_DecRef (unit_buf->pFunc_Term); + //python->Py_DecRef (unit_buf->pFunc_Init); + //python->Py_DecRef (unit_buf->pModule); + //python->Py_DecRef (unit_buf->pContext); + //python->Py_DecRef (unit_buf->pArgs); + + //python->PyEval_RestoreThread (python_interpreter->tstate); + + python->Py_Finalize (); + + units_term (python_interpreter); + + hcfree (python_interpreter); +} + +bool thread_init (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_param_t *device_param, MAYBE_UNUSED hashconfig_t *hashconfig, MAYBE_UNUSED hashes_t *hashes) +{ + python_interpreter_t *python_interpreter = platform_context; + + const int unit_idx = device_param->bridge_link_device; + + unit_t *unit_buf = &python_interpreter->units_buf[unit_idx]; + + hc_python_lib_t *python = python_interpreter->python; + + unit_buf->gstate = python->PyGILState_Ensure (); + + int rc = 0; + + rc |= python->PyDict_SetItemString (unit_buf->pContext, "salts_cnt", python->PyLong_FromLong (hashes->salts_cnt)); + rc |= python->PyDict_SetItemString (unit_buf->pContext, "salts_size", python->PyLong_FromLong (sizeof (salt_t))); + rc |= python->PyDict_SetItemString (unit_buf->pContext, "salts_buf", python->PyBytes_FromStringAndSize ((const char *) hashes->salts_buf, sizeof (salt_t) * hashes->salts_cnt)); + rc |= python->PyDict_SetItemString (unit_buf->pContext, "esalts_cnt", python->PyLong_FromLong (hashes->digests_cnt)); + rc |= python->PyDict_SetItemString (unit_buf->pContext, "esalts_size", python->PyLong_FromLong (hashconfig->esalt_size)); + rc |= python->PyDict_SetItemString (unit_buf->pContext, "esalts_buf", python->PyBytes_FromStringAndSize ((const char *) hashes->esalts_buf, hashconfig->esalt_size * hashes->digests_cnt)); + rc |= python->PyDict_SetItemString (unit_buf->pContext, "st_salts_cnt", python->PyLong_FromLong (1)); + rc |= python->PyDict_SetItemString (unit_buf->pContext, "st_salts_size", python->PyLong_FromLong (sizeof (salt_t))); + rc |= python->PyDict_SetItemString (unit_buf->pContext, "st_salts_buf", python->PyBytes_FromStringAndSize ((const char *) hashes->st_salts_buf, sizeof (salt_t) * 1)); + rc |= python->PyDict_SetItemString (unit_buf->pContext, "st_esalts_cnt", python->PyLong_FromLong (1)); + rc |= python->PyDict_SetItemString (unit_buf->pContext, "st_esalts_size", python->PyLong_FromLong (hashconfig->esalt_size)); + rc |= python->PyDict_SetItemString (unit_buf->pContext, "st_esalts_buf", python->PyBytes_FromStringAndSize ((const char *) hashes->st_esalts_buf, hashconfig->esalt_size * 1)); + + if (rc != 0) + { + python->PyErr_Print (); + + return false; + } + + PyObject *pArgs = python->PyTuple_New (1); + + if (pArgs == NULL) + { + python->PyErr_Print (); + + return false; + } + + python->PyTuple_SetItem (pArgs, 0, unit_buf->pContext); + + python->PyObject_CallObject (unit_buf->pFunc_Init, pArgs); + + //python->Py_DecRef (pArgs); + + python->PyGILState_Release (unit_buf->gstate); + + return true; +} + +void thread_term (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_param_t *device_param, MAYBE_UNUSED hashconfig_t *hashconfig, MAYBE_UNUSED hashes_t *hashes) +{ + python_interpreter_t *python_interpreter = platform_context; + + const int unit_idx = device_param->bridge_link_device; + + unit_t *unit_buf = &python_interpreter->units_buf[unit_idx]; + + hc_python_lib_t *python = python_interpreter->python; + + unit_buf->gstate = python->PyGILState_Ensure (); + + PyObject *pArgs = python->PyTuple_New (1); + + if (pArgs == NULL) + { + python->PyErr_Print (); + + return; + } + + python->PyTuple_SetItem (pArgs, 0, unit_buf->pContext); + + python->PyObject_CallObject (unit_buf->pFunc_Term, pArgs); + + //python->Py_DecRef (pArgs); + + //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "salts_cnt")); + //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "salts_size")); + //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "salts_buf")); + //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "esalts_cnt")); + //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "esalts_size")); + //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "esalts_buf")); + //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "st_salts_cnt")); + //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "st_salts_size")); + //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "st_salts_buf")); + //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "st_esalts_cnt")); + //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "st_esalts_size")); + //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "st_esalts_buf")); + + python->PyDict_DelItemString (unit_buf->pContext, "salts_cnt"); + python->PyDict_DelItemString (unit_buf->pContext, "salts_size"); + python->PyDict_DelItemString (unit_buf->pContext, "salts_buf"); + python->PyDict_DelItemString (unit_buf->pContext, "esalts_cnt"); + python->PyDict_DelItemString (unit_buf->pContext, "esalts_size"); + python->PyDict_DelItemString (unit_buf->pContext, "esalts_buf"); + python->PyDict_DelItemString (unit_buf->pContext, "st_salts_cnt"); + python->PyDict_DelItemString (unit_buf->pContext, "st_salts_size"); + python->PyDict_DelItemString (unit_buf->pContext, "st_salts_buf"); + python->PyDict_DelItemString (unit_buf->pContext, "st_esalts_cnt"); + python->PyDict_DelItemString (unit_buf->pContext, "st_esalts_size"); + python->PyDict_DelItemString (unit_buf->pContext, "st_esalts_buf"); + + python->PyGILState_Release (unit_buf->gstate); +} + +int get_unit_count (void *platform_context) +{ + python_interpreter_t *python_interpreter = platform_context; + + return python_interpreter->units_cnt; +} + +// we support units of mixed speed, that's why the workitem count is unit specific + +int get_workitem_count (void *platform_context, const int unit_idx) +{ + python_interpreter_t *python_interpreter = platform_context; + + unit_t *unit_buf = &python_interpreter->units_buf[unit_idx]; + + return unit_buf->workitem_count; +} + +char *get_unit_info (void *platform_context, const int unit_idx) +{ + python_interpreter_t *python_interpreter = platform_context; + + unit_t *unit_buf = &python_interpreter->units_buf[unit_idx]; + + return unit_buf->unit_info_buf; +} + +bool launch_loop (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_param_t *device_param, MAYBE_UNUSED hashconfig_t *hashconfig, MAYBE_UNUSED hashes_t *hashes, MAYBE_UNUSED const u32 salt_pos, MAYBE_UNUSED const u64 pws_cnt) +{ + python_interpreter_t *python_interpreter = platform_context; + + const int unit_idx = device_param->bridge_link_device; + + unit_t *unit_buf = &python_interpreter->units_buf[unit_idx]; + + hc_python_lib_t *python = python_interpreter->python; + + unit_buf->gstate = python->PyGILState_Ensure (); + + generic_io_tmp_t *generic_io_tmp = (generic_io_tmp_t *) device_param->h_tmps; + + PyObject *pws = python->PyList_New (pws_cnt); + + if (pws == NULL) + { + python->PyErr_Print (); + + return false; + } + + for (u64 i = 0; i < pws_cnt; i++) + { + PyObject *pw = python->PyBytes_FromStringAndSize ((char *) generic_io_tmp->pw_buf, generic_io_tmp->pw_len); + + if (pw == NULL) return false; + + python->PyList_SetItem (pws, i, pw); + + // python->Py_DecRef (pw); + + generic_io_tmp++; + } + + python->PyTuple_SetItem (unit_buf->pArgs, 1, pws); + python->PyTuple_SetItem (unit_buf->pArgs, 2, python->PyLong_FromLong (salt_pos)); + + if (hashes->salts_buf == hashes->st_salts_buf) + { + python->PyTuple_SetItem (unit_buf->pArgs, 3, python->PyBool_FromLong (true)); + } + else + { + python->PyTuple_SetItem (unit_buf->pArgs, 3, python->PyBool_FromLong (false)); + } + + PyObject *pReturn = python->PyObject_CallObject (unit_buf->pFunc_kernel_loop, unit_buf->pArgs); + + if (pReturn == NULL) + { + python->PyErr_Print (); + + return false; + } + + // python->Py_DecRef (pws); + + Py_ssize_t retsz = python->PyList_Size (pReturn); + + if (retsz != (Py_ssize_t) pws_cnt) return false; + + generic_io_tmp = (generic_io_tmp_t *) device_param->h_tmps; + + for (Py_ssize_t i = 0; i < retsz; i++) + { + PyObject *hash = python->PyList_GetItem (pReturn, i); + + Py_ssize_t len; + + const char *s = python->PyUnicode_AsUTF8AndSize (hash, &len); + + if (s) + { + memcpy (generic_io_tmp->out_buf, s, len); + + generic_io_tmp->out_len = len; + } + + //python->Py_DecRef (hash); + + generic_io_tmp++; + } + + //python->Py_DecRef (pReturn); + + python->PyGILState_Release(unit_buf->gstate); + + return true; +} + +const char *st_update_hash (MAYBE_UNUSED void *platform_context) +{ + python_interpreter_t *python_interpreter = platform_context; + + hc_python_lib_t *python = python_interpreter->python; + + unit_t *unit_buf = &python_interpreter->units_buf[0]; + + unit_buf->gstate = python->PyGILState_Ensure (); + + PyObject *constant = python->PyObject_GetAttrString (unit_buf->pModule, "ST_HASH"); + + if (constant == NULL) + { + python->PyGILState_Release (unit_buf->gstate); + + return NULL; + } + + const char *s = python->PyUnicode_AsUTF8 (constant); + + python->PyGILState_Release (unit_buf->gstate); + + return s; +} + +const char *st_update_pass (MAYBE_UNUSED void *platform_context) +{ + python_interpreter_t *python_interpreter = platform_context; + + hc_python_lib_t *python = python_interpreter->python; + + unit_t *unit_buf = &python_interpreter->units_buf[0]; + + unit_buf->gstate = python->PyGILState_Ensure (); + + PyObject *constant = python->PyObject_GetAttrString (unit_buf->pModule, "ST_PASS"); + + if (constant == NULL) + { + python->PyGILState_Release (unit_buf->gstate); + + return NULL; + } + + const char *s = python->PyUnicode_AsUTF8 (constant); + + python->PyGILState_Release (unit_buf->gstate); + + return s; +} + +void bridge_init (bridge_ctx_t *bridge_ctx) +{ + bridge_ctx->bridge_context_size = BRIDGE_CONTEXT_SIZE_CURRENT; + bridge_ctx->bridge_interface_version = BRIDGE_INTERFACE_VERSION_CURRENT; + + bridge_ctx->platform_init = platform_init; + bridge_ctx->platform_term = platform_term; + bridge_ctx->get_unit_count = get_unit_count; + bridge_ctx->get_unit_info = get_unit_info; + bridge_ctx->get_workitem_count = get_workitem_count; + bridge_ctx->thread_init = thread_init; + bridge_ctx->thread_term = thread_term; + bridge_ctx->salt_prepare = BRIDGE_DEFAULT; + bridge_ctx->salt_destroy = BRIDGE_DEFAULT; + bridge_ctx->launch_loop = launch_loop; + bridge_ctx->launch_loop2 = BRIDGE_DEFAULT; + bridge_ctx->st_update_hash = st_update_hash; + bridge_ctx->st_update_pass = st_update_pass; +} diff --git a/src/bridges/bridge_python_generic_hash_mp.mk b/src/bridges/bridge_python_generic_hash_mp.mk new file mode 100644 index 000000000..075c45640 --- /dev/null +++ b/src/bridges/bridge_python_generic_hash_mp.mk @@ -0,0 +1,24 @@ + +PYTHON_CONFIG_FLAGS_LINUX := `python3-config --includes` + +# Experimental support for for Windows: +# $ mkdir /opt/cpython-mingw +# $ cd /opt/cpython-mingw +# $ wget https://repo.msys2.org/mingw/mingw64/mingw-w64-x86_64-python-3.12.10-1-any.pkg.tar.zst +# $ tar --zstd -xf mingw-w64-x86_64-python-3.12.10-1-any.pkg.tar.zst +PYTHON_CONFIG_FLAGS_WIN := -I/opt/cpython-mingw/mingw64/include/python3.12 + +ifeq ($(BUILD_MODE),cross) +bridges/bridge_python_generic_hash_mp.so: src/bridges/bridge_python_generic_hash_mp.c obj/combined.LINUX.a + $(CC_LINUX) $(CCFLAGS) $(CFLAGS_CROSS_LINUX) $^ -o $@ $(LFLAGS_CROSS_LINUX) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CONFIG_FLAGS_LINUX) +bridges/bridge_python_generic_hash_mp.dll: src/bridges/bridge_python_generic_hash_mp.c obj/combined.WIN.a + $(CC_WIN) $(CCFLAGS) $(CFLAGS_CROSS_WIN) $^ -o $@ $(LFLAGS_CROSS_WIN) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CONFIG_FLAGS_WIN) +else +ifeq ($(SHARED),1) +bridges/bridge_python_generic_hash_mp.$(BRIDGE_SUFFIX): src/bridges/bridge_python_generic_hash_mp.c $(HASHCAT_LIBRARY) + $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CONFIG_FLAGS_LINUX) $(PYTHON_CONFIG_FLAGS_WIN) +else +bridges/bridge_python_generic_hash_mp.$(BRIDGE_SUFFIX): src/bridges/bridge_python_generic_hash_mp.c obj/combined.NATIVE.a + $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CONFIG_FLAGS_LINUX) $(PYTHON_CONFIG_FLAGS_WIN) +endif +endif diff --git a/src/bridges/bridge_python_generic_hash_sp.c b/src/bridges/bridge_python_generic_hash_sp.c new file mode 100644 index 000000000..3d2a3fdcd --- /dev/null +++ b/src/bridges/bridge_python_generic_hash_sp.c @@ -0,0 +1,1038 @@ +/** + * Author......: See docs/credits.txt + * License.....: MIT + */ + +#include "common.h" +#include "types.h" +#include "bridges.h" +#include "memory.h" +#include "shared.h" +#include "dynloader.h" + +#if defined (_WIN) +#include "processenv.h" +#endif + +// python interpreter + +#define PY_SSIZE_T_CLEAN + +#undef _GNU_SOURCE +#include + +#define PYTHON_API_CALL + +typedef void (PYTHON_API_CALL *PY_INITIALIZE) (); +typedef void (PYTHON_API_CALL *PY_FINALIZE) (); +typedef void (PYTHON_API_CALL *PY_DECREF) (PyObject *); +typedef PyObject *(PYTHON_API_CALL *PYBOOL_FROMLONG) (long); +typedef PyObject *(PYTHON_API_CALL *PYBYTES_FROMSTRINGANDSIZE) (const char *, Py_ssize_t); +typedef int (PYTHON_API_CALL *PYDICT_DELITEMSTRING) (PyObject *, const char *); +typedef PyObject *(PYTHON_API_CALL *PYDICT_GETITEMSTRING) (PyObject *, const char *); +typedef PyObject *(PYTHON_API_CALL *PYDICT_NEW) (); +typedef int (PYTHON_API_CALL *PYDICT_SETITEMSTRING) (PyObject *, const char *, PyObject *); +typedef void (PYTHON_API_CALL *PYERR_PRINT) (); +typedef PyObject *(PYTHON_API_CALL *PYIMPORT_IMPORTMODULE) (const char *); +typedef PyObject *(PYTHON_API_CALL *PYIMPORT_IMPORT) (PyObject *); +typedef int (PYTHON_API_CALL *PYLIST_APPEND) (PyObject *, PyObject *); +typedef PyObject *(PYTHON_API_CALL *PYLIST_GETITEM) (PyObject *, Py_ssize_t); +typedef PyObject *(PYTHON_API_CALL *PYLIST_NEW) (Py_ssize_t); +typedef int (PYTHON_API_CALL *PYLIST_SETITEM) (PyObject *, Py_ssize_t, PyObject *); +typedef Py_ssize_t (PYTHON_API_CALL *PYLIST_SIZE) (PyObject *); +typedef PyObject *(PYTHON_API_CALL *PYLONG_FROMLONG) (long); +typedef PyObject *(PYTHON_API_CALL *PYOBJECT_CALLOBJECT) (PyObject *, PyObject *); +typedef PyObject *(PYTHON_API_CALL *PYOBJECT_GETATTRSTRING) (PyObject *, const char *); +typedef PyObject *(PYTHON_API_CALL *PYTUPLE_NEW) (Py_ssize_t); +typedef int (PYTHON_API_CALL *PYTUPLE_SETITEM) (PyObject *, Py_ssize_t, PyObject *); +typedef const char *(PYTHON_API_CALL *PYUNICODE_ASUTF8) (PyObject *); +typedef const char *(PYTHON_API_CALL *PYUNICODE_ASUTF8ANDSIZE) (PyObject *, Py_ssize_t *); +typedef PyObject *(PYTHON_API_CALL *PYUNICODE_DECODEFSDEFAULTANDSIZE) (const char *, Py_ssize_t); +typedef PyObject *(PYTHON_API_CALL *PYUNICODE_DECODEFSDEFAULT) (const char *); +typedef PyObject *(PYTHON_API_CALL *PYUNICODE_FROMSTRINGANDSIZE) (const char *, Py_ssize_t); +typedef PyObject *(PYTHON_API_CALL *PYUNICODE_FROMSTRING) (const char *); +typedef void (PYTHON_API_CALL *PYEVAL_ACQUIRELOCK) (void); +typedef void (PYTHON_API_CALL *PYEVAL_RELEASELOCK) (void); +typedef PyThreadState *(PYTHON_API_CALL *PYTHREADSTATE_SWAP) (PyThreadState *); +typedef PyThreadState *(PYTHON_API_CALL *PYNEWINTERPRETER) (void); +typedef void (PYTHON_API_CALL *PYENDINTERPRETER) (PyThreadState *); +typedef PyGILState_STATE (PYTHON_API_CALL *PYGILSTATE_ENSURE) (void); +typedef void (PYTHON_API_CALL *PYGILSTATE_RELEASE) (PyGILState_STATE); +typedef void (PYTHON_API_CALL *PYEVAL_ACQUIRETHREAD) (PyThreadState *); +typedef void (PYTHON_API_CALL *PYEVAL_RELEASETHREAD) (PyThreadState *); +typedef void (PYTHON_API_CALL *PYTHREADSTATE_CLEAR) (PyThreadState *); +typedef void (PYTHON_API_CALL *PYTHREADSTATE_DELETE) (PyThreadState *); +typedef PyThreadState *(PYTHON_API_CALL *PYTHREADSTATE_NEW) (PyInterpreterState *); +typedef PyInterpreterState *(PYTHON_API_CALL *PYINTERPRETERSTATE_MAIN) (void); +typedef void (PYTHON_API_CALL *PYEVAL_INITTHREADS) (void); +typedef PyThreadState *(PYTHON_API_CALL *PYEVAL_SAVETHREAD) (void); +typedef PyStatus (PYTHON_API_CALL *PYNEWINTERPRETERFROMCONFIG) (PyThreadState **, const PyInterpreterConfig *); +typedef void (PYTHON_API_CALL *PYEXITSTATUSEXCEPTION) (PyStatus); +typedef PyStatus (PYTHON_API_CALL *PYINITIALIZEFROMCONFIG) (const PyConfig *); +typedef void (PYTHON_API_CALL *PYEVAL_RESTORETHREAD) (PyThreadState *); +typedef const char *(PYTHON_API_CALL *PYGETVERSION) (void); + +typedef struct hc_python_lib +{ + hc_dynlib_t lib; + + PY_INITIALIZE Py_Initialize; + PY_FINALIZE Py_Finalize; + PY_DECREF Py_DecRef; + PYBOOL_FROMLONG PyBool_FromLong; + PYBYTES_FROMSTRINGANDSIZE PyBytes_FromStringAndSize; + PYDICT_DELITEMSTRING PyDict_DelItemString; + PYDICT_GETITEMSTRING PyDict_GetItemString; + PYDICT_NEW PyDict_New; + PYDICT_SETITEMSTRING PyDict_SetItemString; + PYERR_PRINT PyErr_Print; + PYIMPORT_IMPORTMODULE PyImport_ImportModule; + PYIMPORT_IMPORT PyImport_Import; + PYLIST_APPEND PyList_Append; + PYLIST_GETITEM PyList_GetItem; + PYLIST_NEW PyList_New; + PYLIST_SETITEM PyList_SetItem; + PYLIST_SIZE PyList_Size; + PYLONG_FROMLONG PyLong_FromLong; + PYOBJECT_CALLOBJECT PyObject_CallObject; + PYOBJECT_GETATTRSTRING PyObject_GetAttrString; + PYTUPLE_NEW PyTuple_New; + PYTUPLE_SETITEM PyTuple_SetItem; + PYUNICODE_ASUTF8 PyUnicode_AsUTF8; + PYUNICODE_ASUTF8ANDSIZE PyUnicode_AsUTF8AndSize; + PYUNICODE_DECODEFSDEFAULTANDSIZE PyUnicode_DecodeFSDefaultAndSize; + PYUNICODE_DECODEFSDEFAULT PyUnicode_DecodeFSDefault; + PYUNICODE_FROMSTRINGANDSIZE PyUnicode_FromStringAndSize; + PYUNICODE_FROMSTRING PyUnicode_FromString; + PYEVAL_ACQUIRELOCK PyEval_AcquireLock; + PYEVAL_RELEASELOCK PyEval_ReleaseLock; + PYTHREADSTATE_SWAP PyThreadState_Swap; + PYNEWINTERPRETER Py_NewInterpreter; + PYENDINTERPRETER Py_EndInterpreter; + PYGILSTATE_ENSURE PyGILState_Ensure; + PYGILSTATE_RELEASE PyGILState_Release; + PYEVAL_ACQUIRETHREAD PyEval_AcquireThread; + PYEVAL_RELEASETHREAD PyEval_ReleaseThread; + PYTHREADSTATE_CLEAR PyThreadState_Clear; + PYTHREADSTATE_DELETE PyThreadState_Delete; + PYTHREADSTATE_NEW PyThreadState_New; + PYINTERPRETERSTATE_MAIN PyInterpreterState_Main; + PYEVAL_INITTHREADS PyEval_InitThreads; + PYEVAL_SAVETHREAD PyEval_SaveThread; + PYNEWINTERPRETERFROMCONFIG Py_NewInterpreterFromConfig; + PYEXITSTATUSEXCEPTION Py_ExitStatusException; + PYINITIALIZEFROMCONFIG Py_InitializeFromConfig; + PYEVAL_RESTORETHREAD PyEval_RestoreThread; + PYGETVERSION Py_GetVersion; + +} hc_python_lib_t; + +// good: we can use this multiplier do reduce copy overhead to increase the guessing speed, +// bad: but we also increase the password candidate batch size. +// slow hashes which make use of this bridge probably are used with smaller wordlists, +// and therefore it's easier for hashcat to parallelize if this multiplier is low. +// in the end, it's a trade-off. + +#define N_ACCEL 8 + +typedef struct +{ + // input + + u32 pw_buf[64]; + u32 pw_len; + + // output + + u32 out_buf[64]; + u32 out_len; + +} generic_io_tmp_t; + +typedef struct +{ + // template + + char unit_info_buf[1024]; + int unit_info_len; + + u64 workitem_count; + size_t workitem_size; + + // implementation specific + + PyThreadState *tstate; + + PyObject *pArgs; + PyObject *pContext; + PyObject *pModule; + PyObject *pFunc_Init; + PyObject *pFunc_Term; + PyObject *pFunc_kernel_loop; + +} unit_t; + +typedef struct +{ + unit_t *units_buf; + int units_cnt; + + hc_python_lib_t *python; + + PyThreadState *thread_state; + + char *source_filename; + +} python_interpreter_t; + +static char *DEFAULT_SOURCE_FILENAME = "generic_hash_sp"; + +static bool init_python (hc_python_lib_t *python) +{ + char *pythondll_path = NULL; + + python->lib = NULL; + + if (getenv ("PYTHON_GIL") == NULL) + putenv ((char *) "PYTHON_GIL=0"); + + #define MIN_MAJ 3 + #define MAX_MAJ 8 + + #define MIN_MIN 0 + #define MAX_MIN 50 + + #if defined (_WIN) + + for (int maj = MAX_MAJ; maj >= MIN_MAJ; --maj) + { + for (int min = MAX_MIN; min >= MIN_MIN; --min) + { + // first try %LocalAppData% default path + char expandedPath[MAX_PATH]; + + char *libpython_namelocal = NULL; + + hc_asprintf (&libpython_namelocal, "%%LocalAppData%%\\Programs\\Python\\Python%d%d\\python%d%dt.dll", maj, min, maj, min); + + DWORD len = ExpandEnvironmentStringsA (libpython_namelocal, expandedPath, sizeof (expandedPath)); + + if (len) + { + python->lib = hc_dlopen (expandedPath); + + if (python->lib != NULL) + { + pythondll_path = hcstrdup (expandedPath); + + hcfree (libpython_namelocal); + + break; + } + else + { + hcfree (libpython_namelocal); + }; + } + + // use %PATH% + char *libpython_namepath = NULL; + + hc_asprintf (&libpython_namepath, "python%d%dt.dll", maj, min); + + python->lib = hc_dlopen (libpython_namepath); + + if (python->lib != NULL) + { + pythondll_path = libpython_namepath; + + break; + } + else + { + hcfree (libpython_namepath); + }; + + if (python->lib != NULL) break; + } + + if (python->lib != NULL) break; + } + + #elif defined (__MSYS__) + + for (int maj = MAX_MAJ; maj >= MIN_MAJ; --maj) + { + for (int min = MAX_MIN; min >= MIN_MIN; --min) + { + char *libpython_name = NULL; + + hc_asprintf (&libpython_name, "msys-python%d.%d.dll", maj, min); + + python->lib = dlopen (libpython_name, RTLD_NOW | RTLD_GLOBAL); + + if (python->lib != NULL) + { + pythondll_path = libpython_name; + + break; + } + else + { + hcfree (libpython_name); + }; + + if (python->lib != NULL) break; + } + + if (python->lib != NULL) break; + } + + #elif defined (__APPLE__) + + // untested + for (int maj = MAX_MAJ; maj >= MIN_MAJ; --maj) + { + for (int min = MAX_MIN; min >= MIN_MIN; --min) + { + char *libpython_name = NULL; + + hc_asprintf (&libpython_name, "libpython%d.%dt.dylib", maj, min); + + python->lib = dlopen (libpython_name, RTLD_NOW | RTLD_GLOBAL); + + if (python->lib != NULL) + { + pythondll_path = libpython_name; + + break; + } + else + { + hcfree (libpython_name); + }; + + if (python->lib != NULL) break; + } + + if (python->lib != NULL) break; + } + + #elif defined (__CYGWIN__) + + // untested + for (int maj = MAX_MAJ; maj >= MIN_MAJ; --maj) + { + for (int min = MAX_MIN; min >= MIN_MIN; --min) + { + char *libpython_name = NULL; + + hc_asprintf (&libpython_name, "python%d%dt.dll", maj, min); + + python->lib = hc_dlopen (libpython_name); + + if (python->lib != NULL) + { + pythondll_path = libpython_name; + + break; + } + else + { + hcfree (libpython_name); + }; + + if (python->lib != NULL) break; + } + + if (python->lib != NULL) break; + } + + #else + + for (int maj = MAX_MAJ; maj >= MIN_MAJ; --maj) + { + for (int min = MAX_MIN; min >= MIN_MIN; --min) + { + char *libpython_name = NULL; + + hc_asprintf (&libpython_name, "libpython%d.%dt.so", maj, min); + + python->lib = dlopen (libpython_name, RTLD_NOW | RTLD_GLOBAL); + + if (python->lib != NULL) + { + pythondll_path = libpython_name; + + break; + } + else + { + hcfree (libpython_name); + }; + + if (python->lib != NULL) break; + } + + if (python->lib != NULL) break; + } + + #endif + + if (python->lib == NULL) + { + fprintf (stderr, "Unable to find suitable Python library for -m 72000.\n\n"); + fprintf (stderr, "Most users who encounter this error are just missing the so called 'free-threaded' library support.\n"); + fprintf (stderr, "* On Windows, during install, there's an option 'free-threaded' that you need to click, it's just disabled by default.\n"); + fprintf (stderr, "* On Linux, use `pyenv` and select a version that ends with a `t` (for instance `3.13t`).\n"); + fprintf (stderr, " However, on Linux it's better to use -m 73000 instead. So you probably want to ignore this.\n"); + fprintf (stderr, "\n"); + + return false; + } + else + { + printf ("Loaded python library from: %s\n\n", pythondll_path); + } + + #if defined (_WIN) + + #else + fprintf (stderr, "Attention!!! The 'free-threaded' python library has some major downsides.\n"); + fprintf (stderr, " The main purpose of this module is to give windows users a multithreading option.\n"); + fprintf (stderr, " It seems to be a lot slower, and relevant modules such as cffi are incompatibile.\n"); + fprintf (stderr, " Since your are on Linux/MacOS we highly recommend to stick to multiprocessing module.\n"); + fprintf (stderr, " Maybe 'free-threaded' mode will become more mature in the future.\n"); + fprintf (stderr, " For now, we high recommend to stick to -m 73000 instead.\n"); + #endif + + #define HC_LOAD_FUNC_PYTHON(ptr,name,pythonname,type,libname,noerr) \ + do { \ + ptr->name = (type) hc_dlsym ((ptr)->lib, #pythonname); \ + if ((noerr) != -1) { \ + if (!(ptr)->name) { \ + if ((noerr) == 1) { \ + fprintf (stderr, "%s is missing from %s shared library.", #name, #libname); \ + return false; \ + } \ + if ((noerr) != 1) { \ + fprintf (stderr, "%s is missing from %s shared library.", #name, #libname); \ + return true; \ + } \ + } \ + } \ + } while (0) + + HC_LOAD_FUNC_PYTHON (python, Py_GetVersion, Py_GetVersion, PYGETVERSION, PYTHON, 1); + + const char *version_str = python->Py_GetVersion (); + + int major = 0; + int minor = 0; + + if (sscanf (version_str, "%d.%d", &major, &minor) != 2) + { + fprintf (stderr, "Python version string is not valid: %s\n", version_str); + + return false; + } + + if ((major < 3) || (major == 3 && minor < 13)) + { + fprintf (stderr, "Python version mismatch: Need at least v3.13\n"); + + return false; + } + + HC_LOAD_FUNC_PYTHON (python, Py_Initialize, Py_Initialize, PY_INITIALIZE, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, Py_Finalize, Py_Finalize, PY_FINALIZE, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, Py_DecRef, Py_DecRef, PY_DECREF, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyBool_FromLong, PyBool_FromLong, PYBOOL_FROMLONG, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyBytes_FromStringAndSize, PyBytes_FromStringAndSize, PYBYTES_FROMSTRINGANDSIZE, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyDict_DelItemString, PyDict_DelItemString, PYDICT_DELITEMSTRING, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyDict_GetItemString, PyDict_GetItemString, PYDICT_GETITEMSTRING, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyDict_New, PyDict_New, PYDICT_NEW, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyDict_SetItemString, PyDict_SetItemString, PYDICT_SETITEMSTRING, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyErr_Print, PyErr_Print, PYERR_PRINT, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyImport_ImportModule, PyImport_ImportModule, PYIMPORT_IMPORTMODULE, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyImport_Import, PyImport_Import, PYIMPORT_IMPORT, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyList_Append, PyList_Append, PYLIST_APPEND, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyList_GetItem, PyList_GetItem, PYLIST_GETITEM, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyList_New, PyList_New, PYLIST_NEW, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyList_SetItem, PyList_SetItem, PYLIST_SETITEM, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyList_Size, PyList_Size, PYLIST_SIZE, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyLong_FromLong, PyLong_FromLong, PYLONG_FROMLONG, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyObject_CallObject, PyObject_CallObject, PYOBJECT_CALLOBJECT, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyObject_GetAttrString, PyObject_GetAttrString, PYOBJECT_GETATTRSTRING, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyTuple_New, PyTuple_New, PYTUPLE_NEW, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyTuple_SetItem, PyTuple_SetItem, PYTUPLE_SETITEM, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyUnicode_AsUTF8, PyUnicode_AsUTF8, PYUNICODE_ASUTF8, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyUnicode_AsUTF8AndSize, PyUnicode_AsUTF8AndSize, PYUNICODE_ASUTF8ANDSIZE, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyUnicode_DecodeFSDefaultAndSize, PyUnicode_DecodeFSDefaultAndSize, PYUNICODE_DECODEFSDEFAULTANDSIZE, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyUnicode_DecodeFSDefault, PyUnicode_DecodeFSDefault, PYUNICODE_DECODEFSDEFAULT, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyUnicode_FromStringAndSize, PyUnicode_FromStringAndSize, PYUNICODE_FROMSTRINGANDSIZE, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyUnicode_FromString, PyUnicode_FromString, PYUNICODE_FROMSTRING, PYTHON, 1); + //HC_LOAD_FUNC_PYTHON (python, PyEval_AcquireLock, PyEval_AcquireLock, PYEVAL_ACQUIRELOCK, PYTHON, 1); + //HC_LOAD_FUNC_PYTHON (python, PyEval_ReleaseLock, PyEval_ReleaseLock, PYEVAL_RELEASELOCK, PYTHON, 1); + //HC_LOAD_FUNC_PYTHON (python, PyThreadState_Swap, PyThreadState_Swap, PYTHREADSTATE_SWAP, PYTHON, 1); + //HC_LOAD_FUNC_PYTHON (python, Py_NewInterpreter, Py_NewInterpreter, PYNEWINTERPRETER, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, Py_EndInterpreter, Py_EndInterpreter, PYENDINTERPRETER, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyGILState_Ensure, PyGILState_Ensure, PYGILSTATE_ENSURE, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyGILState_Release, PyGILState_Release, PYGILSTATE_RELEASE, PYTHON, 1); + //HC_LOAD_FUNC_PYTHON (python, PyEval_AcquireThread, PyEval_AcquireThread, PYEVAL_ACQUIRETHREAD, PYTHON, 1); + //HC_LOAD_FUNC_PYTHON (python, PyEval_ReleaseThread, PyEval_ReleaseThread, PYEVAL_RELEASETHREAD, PYTHON, 1); + //HC_LOAD_FUNC_PYTHON (python, PyThreadState_Clear, PyThreadState_Clear, PYTHREADSTATE_CLEAR, PYTHON, 1); + //HC_LOAD_FUNC_PYTHON (python, PyThreadState_Delete, PyThreadState_Delete, PYTHREADSTATE_DELETE, PYTHON, 1); + //HC_LOAD_FUNC_PYTHON (python, PyThreadState_New, PyThreadState_New, PYTHREADSTATE_NEW, PYTHON, 1); + //HC_LOAD_FUNC_PYTHON (python, PyInterpreterState_Main, PyInterpreterState_Main, PYINTERPRETERSTATE_MAIN, PYTHON, 1); + //HC_LOAD_FUNC_PYTHON (python, PyEval_InitThreads, PyEval_InitThreads, PYEVAL_INITTHREADS, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyEval_SaveThread, PyEval_SaveThread, PYEVAL_SAVETHREAD, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, Py_NewInterpreterFromConfig, Py_NewInterpreterFromConfig, PYNEWINTERPRETERFROMCONFIG, PYTHON, 1); + //HC_LOAD_FUNC_PYTHON (python, Py_ExitStatusException, Py_ExitStatusException, PYEXITSTATUSEXCEPTION, PYTHON, 1); + //HC_LOAD_FUNC_PYTHON (python, Py_InitializeFromConfig, Py_InitializeFromConfig, PYINITIALIZEFROMCONFIG, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyEval_RestoreThread, PyEval_RestoreThread, PYEVAL_RESTORETHREAD, PYTHON, 1); + + return true; +} + +static bool units_init (python_interpreter_t *python_interpreter) +{ + #if defined (_WIN) + + SYSTEM_INFO sysinfo; + + GetSystemInfo (&sysinfo); + + int num_devices = sysinfo.dwNumberOfProcessors; + + #else + + int num_devices = sysconf (_SC_NPROCESSORS_ONLN); + + #endif + + unit_t *units_buf = (unit_t *) hccalloc (num_devices, sizeof (unit_t)); + + int units_cnt = 0; + + for (int i = 0; i < num_devices; i++) + { + unit_t *unit_buf = &units_buf[i]; + + hc_python_lib_t *python = python_interpreter->python; + + unit_buf->unit_info_len = snprintf (unit_buf->unit_info_buf, sizeof (unit_buf->unit_info_buf) - 1, "Python Interpreter (%s)", python->Py_GetVersion ()); + + unit_buf->unit_info_buf[unit_buf->unit_info_len] = 0; + + unit_buf->workitem_count = N_ACCEL; + + units_cnt++; + } + + python_interpreter->units_buf = units_buf; + python_interpreter->units_cnt = units_cnt; + + return true; +} + +static void units_term (python_interpreter_t *python_interpreter) +{ + unit_t *units_buf = python_interpreter->units_buf; + + if (units_buf) + { + hcfree (python_interpreter->units_buf); + } +} + +void *platform_init (user_options_t *user_options) +{ + python_interpreter_t *python_interpreter = (python_interpreter_t *) hcmalloc (sizeof (python_interpreter_t)); + + hc_python_lib_t *python = (hc_python_lib_t *) hcmalloc (sizeof (hc_python_lib_t)); + + python_interpreter->python = python; + + if (init_python (python) == false) return NULL; + + python->Py_Initialize (); + + python_interpreter->thread_state = python->PyEval_SaveThread (); + + python_interpreter->source_filename = (user_options->bridge_parameter1) ? user_options->bridge_parameter1 : DEFAULT_SOURCE_FILENAME; + + if (units_init (python_interpreter) == false) + { + hcfree (python_interpreter); + + return NULL; + } + + return python_interpreter; +} + +void platform_term (void *platform_context) +{ + python_interpreter_t *python_interpreter = platform_context; + + if (python_interpreter == NULL) return; + + hc_python_lib_t *python = python_interpreter->python; + + // python->PyGILState_Ensure (); + + python->PyEval_RestoreThread (python_interpreter->thread_state); + + python->Py_Finalize (); + + units_term (python_interpreter); + + hcfree (python_interpreter); +} + +bool thread_init (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_param_t *device_param, MAYBE_UNUSED hashconfig_t *hashconfig, MAYBE_UNUSED hashes_t *hashes) +{ + python_interpreter_t *python_interpreter = platform_context; + + const int unit_idx = device_param->bridge_link_device; + + unit_t *unit_buf = &python_interpreter->units_buf[unit_idx]; + + hc_python_lib_t *python = python_interpreter->python; + + PyInterpreterConfig config = + { + .use_main_obmalloc = 0, + .allow_fork = 1, + .allow_exec = 1, + .allow_threads = 1, + .allow_daemon_threads = 0, + .check_multi_interp_extensions = 1, + .gil = PyInterpreterConfig_OWN_GIL + }; + + unit_buf->tstate = NULL; + + PyStatus status = python->Py_NewInterpreterFromConfig (&unit_buf->tstate, &config); + + if (status.exitcode) + { + python->PyErr_Print (); + + return false; + } + + PyObject *sys = python->PyImport_ImportModule ("sys"); + PyObject *path = python->PyObject_GetAttrString (sys, "path"); + python->PyList_Append (path, python->PyUnicode_FromString ("./Python")); + //python->Py_DecRef (path); + //python->Py_DecRef (sys); + + PyObject *pName = python->PyUnicode_DecodeFSDefault (python_interpreter->source_filename); + + if (pName == NULL) + { + python->PyErr_Print (); + + return false; + } + + unit_buf->pModule = python->PyImport_Import (pName); + + if (unit_buf->pModule == NULL) + { + python->PyErr_Print (); + + return false; + } + + //python->Py_DecRef (pName); + + unit_buf->pFunc_Init = python->PyObject_GetAttrString (unit_buf->pModule, "init"); + + if (unit_buf->pFunc_Init == NULL) + { + python->PyErr_Print (); + + return false; + } + + unit_buf->pFunc_Term = python->PyObject_GetAttrString (unit_buf->pModule, "term"); + + if (unit_buf->pFunc_Term == NULL) + { + python->PyErr_Print (); + + return false; + } + + unit_buf->pFunc_kernel_loop = python->PyObject_GetAttrString (unit_buf->pModule, "kernel_loop"); + + if (unit_buf->pFunc_kernel_loop == NULL) + { + python->PyErr_Print (); + + return false; + } + + // Initialize Context (which also means copy salts because they are part of the context) + + unit_buf->pContext = python->PyDict_New (); + + if (unit_buf->pContext == NULL) + { + python->PyErr_Print (); + + return false; + } + + int rc = 0; + + rc |= python->PyDict_SetItemString (unit_buf->pContext, "salts_cnt", python->PyLong_FromLong (hashes->salts_cnt)); + rc |= python->PyDict_SetItemString (unit_buf->pContext, "salts_size", python->PyLong_FromLong (sizeof (salt_t))); + rc |= python->PyDict_SetItemString (unit_buf->pContext, "salts_buf", python->PyBytes_FromStringAndSize ((const char *) hashes->salts_buf, sizeof (salt_t) * hashes->salts_cnt)); + rc |= python->PyDict_SetItemString (unit_buf->pContext, "esalts_cnt", python->PyLong_FromLong (hashes->digests_cnt)); + rc |= python->PyDict_SetItemString (unit_buf->pContext, "esalts_size", python->PyLong_FromLong (hashconfig->esalt_size)); + rc |= python->PyDict_SetItemString (unit_buf->pContext, "esalts_buf", python->PyBytes_FromStringAndSize ((const char *) hashes->esalts_buf, hashconfig->esalt_size * hashes->digests_cnt)); + rc |= python->PyDict_SetItemString (unit_buf->pContext, "st_salts_cnt", python->PyLong_FromLong (1)); + rc |= python->PyDict_SetItemString (unit_buf->pContext, "st_salts_size", python->PyLong_FromLong (sizeof (salt_t))); + rc |= python->PyDict_SetItemString (unit_buf->pContext, "st_salts_buf", python->PyBytes_FromStringAndSize ((const char *) hashes->st_salts_buf, sizeof (salt_t) * 1)); + rc |= python->PyDict_SetItemString (unit_buf->pContext, "st_esalts_cnt", python->PyLong_FromLong (1)); + rc |= python->PyDict_SetItemString (unit_buf->pContext, "st_esalts_size", python->PyLong_FromLong (hashconfig->esalt_size)); + rc |= python->PyDict_SetItemString (unit_buf->pContext, "st_esalts_buf", python->PyBytes_FromStringAndSize ((const char *) hashes->st_esalts_buf, hashconfig->esalt_size * 1)); + + if (rc != 0) + { + python->PyErr_Print (); + + return false; + } + + PyObject *pArgs = python->PyTuple_New (1); + + if (pArgs == NULL) + { + python->PyErr_Print (); + + return false; + } + + python->PyTuple_SetItem (pArgs, 0, unit_buf->pContext); + + python->PyObject_CallObject (unit_buf->pFunc_Init, pArgs); + + // for later calls + + unit_buf->pArgs = python->PyTuple_New (4); + + if (unit_buf->pArgs == NULL) + { + python->PyErr_Print (); + + return false; + } + + python->PyTuple_SetItem (unit_buf->pArgs, 0, unit_buf->pContext); + python->PyTuple_SetItem (unit_buf->pArgs, 2, python->PyLong_FromLong (0)); + python->PyTuple_SetItem (unit_buf->pArgs, 3, python->PyBool_FromLong (false)); + + return true; +} + +void thread_term (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_param_t *device_param, MAYBE_UNUSED hashconfig_t *hashconfig, MAYBE_UNUSED hashes_t *hashes) +{ + python_interpreter_t *python_interpreter = platform_context; + + const int unit_idx = device_param->bridge_link_device; + + unit_t *unit_buf = &python_interpreter->units_buf[unit_idx]; + + hc_python_lib_t *python = python_interpreter->python; + + //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "salts_cnt")); + //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "salts_size")); + //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "salts_buf")); + //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "esalts_cnt")); + //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "esalts_size")); + //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "esalts_buf")); + //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "st_salts_cnt")); + //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "st_salts_size")); + //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "st_salts_buf")); + //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "st_esalts_cnt")); + //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "st_esalts_size")); + //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "st_esalts_buf")); + + python->PyDict_DelItemString (unit_buf->pContext, "salts_cnt"); + python->PyDict_DelItemString (unit_buf->pContext, "salts_size"); + python->PyDict_DelItemString (unit_buf->pContext, "salts_buf"); + python->PyDict_DelItemString (unit_buf->pContext, "esalts_cnt"); + python->PyDict_DelItemString (unit_buf->pContext, "esalts_size"); + python->PyDict_DelItemString (unit_buf->pContext, "esalts_buf"); + python->PyDict_DelItemString (unit_buf->pContext, "st_salts_cnt"); + python->PyDict_DelItemString (unit_buf->pContext, "st_salts_size"); + python->PyDict_DelItemString (unit_buf->pContext, "st_salts_buf"); + python->PyDict_DelItemString (unit_buf->pContext, "st_esalts_cnt"); + python->PyDict_DelItemString (unit_buf->pContext, "st_esalts_size"); + python->PyDict_DelItemString (unit_buf->pContext, "st_esalts_buf"); + + PyObject *pArgs = python->PyTuple_New (1); + + if (pArgs == NULL) + { + python->PyErr_Print (); + + return; + } + + python->PyTuple_SetItem (pArgs, 0, unit_buf->pContext); + + python->PyObject_CallObject (unit_buf->pFunc_Term, pArgs); + + //python->Py_DecRef (pArgs); + //python->Py_DecRef (unit_buf->pFunc_kernel_loop); + //python->Py_DecRef (unit_buf->pFunc_Term); + //python->Py_DecRef (unit_buf->pFunc_Init); + //python->Py_DecRef (unit_buf->pModule); + //python->Py_DecRef (unit_buf->pContext); + //python->Py_DecRef (unit_buf->pArgs); + + python->Py_EndInterpreter (unit_buf->tstate); +} + +int get_unit_count (void *platform_context) +{ + python_interpreter_t *python_interpreter = platform_context; + + return python_interpreter->units_cnt; +} + +// we support units of mixed speed, that's why the workitem count is unit specific + +int get_workitem_count (void *platform_context, const int unit_idx) +{ + python_interpreter_t *python_interpreter = platform_context; + + unit_t *unit_buf = &python_interpreter->units_buf[unit_idx]; + + return unit_buf->workitem_count; +} + +char *get_unit_info (void *platform_context, const int unit_idx) +{ + python_interpreter_t *python_interpreter = platform_context; + + unit_t *unit_buf = &python_interpreter->units_buf[unit_idx]; + + return unit_buf->unit_info_buf; +} + +bool launch_loop (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_param_t *device_param, MAYBE_UNUSED hashconfig_t *hashconfig, MAYBE_UNUSED hashes_t *hashes, MAYBE_UNUSED const u32 salt_pos, MAYBE_UNUSED const u64 pws_cnt) +{ + python_interpreter_t *python_interpreter = platform_context; + + const int unit_idx = device_param->bridge_link_device; + + unit_t *unit_buf = &python_interpreter->units_buf[unit_idx]; + + hc_python_lib_t *python = python_interpreter->python; + + generic_io_tmp_t *generic_io_tmp = (generic_io_tmp_t *) device_param->h_tmps; + + PyObject *pws = python->PyList_New (pws_cnt); + + if (pws == NULL) + { + python->PyErr_Print (); + + return false; + } + + for (u64 i = 0; i < pws_cnt; i++) + { + PyObject *pw = python->PyBytes_FromStringAndSize ((char *) generic_io_tmp->pw_buf, generic_io_tmp->pw_len); + + if (pw == NULL) return false; + + python->PyList_SetItem (pws, i, pw); + + generic_io_tmp++; + } + + python->PyTuple_SetItem (unit_buf->pArgs, 1, pws); + python->PyTuple_SetItem (unit_buf->pArgs, 2, python->PyLong_FromLong (salt_pos)); + + if (hashes->salts_buf == hashes->st_salts_buf) + { + python->PyTuple_SetItem (unit_buf->pArgs, 3, python->PyBool_FromLong (true)); + } + else + { + python->PyTuple_SetItem (unit_buf->pArgs, 3, python->PyBool_FromLong (false)); + } + + PyObject *pReturn = python->PyObject_CallObject (unit_buf->pFunc_kernel_loop, unit_buf->pArgs); + + if (pReturn == NULL) + { + python->PyErr_Print (); + + return false; + } + + //python->Py_DecRef (pws); + + Py_ssize_t retsz = python->PyList_Size (pReturn); + + if (retsz != (Py_ssize_t) pws_cnt) return false; + + generic_io_tmp = (generic_io_tmp_t *) device_param->h_tmps; + + for (Py_ssize_t i = 0; i < retsz; i++) + { + PyObject *hash = python->PyList_GetItem (pReturn, i); + + Py_ssize_t len; + + const char *s = python->PyUnicode_AsUTF8AndSize (hash, &len); + + if (s) + { + memcpy (generic_io_tmp->out_buf, s, len); + + generic_io_tmp->out_len = len; + } + + //python->Py_DecRef (hash); + + generic_io_tmp++; + } + + //python->Py_DecRef (pReturn); + + return true; +} + +const char *st_update_hash (MAYBE_UNUSED void *platform_context) +{ + python_interpreter_t *python_interpreter = platform_context; + + hc_python_lib_t *python = python_interpreter->python; + + python->PyEval_RestoreThread (python_interpreter->thread_state); + + PyObject *sys = python->PyImport_ImportModule ("sys"); + PyObject *path = python->PyObject_GetAttrString (sys, "path"); + python->PyList_Append (path, python->PyUnicode_FromString ("./Python")); + //python->Py_DecRef (path); + //python->Py_DecRef (sys); + + PyObject *pName = python->PyUnicode_DecodeFSDefault (python_interpreter->source_filename); + + if (pName == NULL) + { + python->PyErr_Print (); + + python_interpreter->thread_state = python->PyEval_SaveThread (); + + return false; + } + + PyObject *pModule = python->PyImport_Import (pName); + + if (pModule == NULL) + { + python->PyErr_Print (); + + python_interpreter->thread_state = python->PyEval_SaveThread (); + + return false; + } + + PyObject *constant = python->PyObject_GetAttrString (pModule, "ST_HASH"); + + if (constant == NULL) + { + python_interpreter->thread_state = python->PyEval_SaveThread (); + + return NULL; + } + + const char *s = python->PyUnicode_AsUTF8 (constant); + + python_interpreter->thread_state = python->PyEval_SaveThread (); + + return s; +} + +const char *st_update_pass (MAYBE_UNUSED void *platform_context) +{ + python_interpreter_t *python_interpreter = platform_context; + + hc_python_lib_t *python = python_interpreter->python; + + python->PyEval_RestoreThread (python_interpreter->thread_state); + + PyObject *sys = python->PyImport_ImportModule ("sys"); + PyObject *path = python->PyObject_GetAttrString (sys, "path"); + python->PyList_Append (path, python->PyUnicode_FromString ("./Python")); + //python->Py_DecRef (path); + //python->Py_DecRef (sys); + + PyObject *pName = python->PyUnicode_DecodeFSDefault (python_interpreter->source_filename); + + if (pName == NULL) + { + python->PyErr_Print (); + + python_interpreter->thread_state = python->PyEval_SaveThread (); + + return false; + } + + PyObject *pModule = python->PyImport_Import (pName); + + if (pModule == NULL) + { + python->PyErr_Print (); + + python_interpreter->thread_state = python->PyEval_SaveThread (); + + return false; + } + + PyObject *constant = python->PyObject_GetAttrString (pModule, "ST_PASS"); + + if (constant == NULL) + { + python_interpreter->thread_state = python->PyEval_SaveThread (); + + return NULL; + } + + const char *s = python->PyUnicode_AsUTF8 (constant); + + python_interpreter->thread_state = python->PyEval_SaveThread (); + + return s; +} + +void bridge_init (bridge_ctx_t *bridge_ctx) +{ + bridge_ctx->bridge_context_size = BRIDGE_CONTEXT_SIZE_CURRENT; + bridge_ctx->bridge_interface_version = BRIDGE_INTERFACE_VERSION_CURRENT; + + bridge_ctx->platform_init = platform_init; + bridge_ctx->platform_term = platform_term; + bridge_ctx->get_unit_count = get_unit_count; + bridge_ctx->get_unit_info = get_unit_info; + bridge_ctx->get_workitem_count = get_workitem_count; + bridge_ctx->thread_init = thread_init; + bridge_ctx->thread_term = thread_term; + bridge_ctx->salt_prepare = BRIDGE_DEFAULT; + bridge_ctx->salt_destroy = BRIDGE_DEFAULT; + bridge_ctx->launch_loop = launch_loop; + bridge_ctx->launch_loop2 = BRIDGE_DEFAULT; + bridge_ctx->st_update_hash = st_update_hash; + bridge_ctx->st_update_pass = st_update_pass; +} diff --git a/src/bridges/bridge_python_generic_hash_sp.mk b/src/bridges/bridge_python_generic_hash_sp.mk new file mode 100644 index 000000000..c98c57eab --- /dev/null +++ b/src/bridges/bridge_python_generic_hash_sp.mk @@ -0,0 +1,37 @@ + +PYTHON_CONFIG_FLAGS_LINUX := `python3-config --includes` + +# Experimental support for for Windows: +# $ mkdir /opt/cpython-mingw +# $ cd /opt/cpython-mingw +# $ wget https://repo.msys2.org/mingw/mingw64/mingw-w64-x86_64-python-3.12.10-1-any.pkg.tar.zst +# $ tar --zstd -xf mingw-w64-x86_64-python-3.12.10-1-any.pkg.tar.zst +PYTHON_CONFIG_FLAGS_WIN := -I/opt/cpython-mingw/mingw64/include/python3.12 + +ifeq ($(BUILD_MODE),cross) +bridges/bridge_python_generic_hash_sp.so: src/bridges/bridge_python_generic_hash_sp.c obj/combined.LINUX.a + $(CC_LINUX) $(CCFLAGS) $(CFLAGS_CROSS_LINUX) $^ -o $@ $(LFLAGS_CROSS_LINUX) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CONFIG_FLAGS_LINUX) +bridges/bridge_python_generic_hash_sp.dll: src/bridges/bridge_python_generic_hash_sp.c obj/combined.WIN.a + $(CC_WIN) $(CCFLAGS) $(CFLAGS_CROSS_WIN) $^ -o $@ $(LFLAGS_CROSS_WIN) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CONFIG_FLAGS_WIN) +else +ifeq ($(SHARED),1) +bridges/bridge_python_generic_hash_sp.$(BRIDGE_SUFFIX): src/bridges/bridge_python_generic_hash_sp.c $(HASHCAT_LIBRARY) + $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CONFIG_FLAGS_LINUX) $(PYTHON_CONFIG_FLAGS_WIN) +else +bridges/bridge_python_generic_hash_sp.$(BRIDGE_SUFFIX): src/bridges/bridge_python_generic_hash_sp.c obj/combined.NATIVE.a + $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CONFIG_FLAGS_LINUX) $(PYTHON_CONFIG_FLAGS_WIN) +endif +endif + +PYTHON_INCLUDE_PATH := $(shell echo $(PYTHON_CONFIG_FLAGS_LINUX) | sed -n 's/-I\([^ ]*\).*/\1/p') +PYTHON_HAS_OWN_GIL := $(shell grep -r -q 'PyInterpreterConfig_OWN_GIL' $(PYTHON_INCLUDE_PATH) && echo yes || echo no) + +ifeq ($(BRIDGE_SUFFIX),so) +ifeq ($(PYTHON_HAS_OWN_GIL),no) +bridges/bridge_python_generic_hash_sp.so: + @echo "" + @echo "WARNING: Skipping freethreaded plugin 70200: Python 3.12+ headers not found." + @echo " Please read 'docs/hashcat-python-plugin-requirements.md'." + @echo "" +endif +endif diff --git a/src/modules/module_72000.c b/src/modules/module_72000.c new file mode 100644 index 000000000..a1268759e --- /dev/null +++ b/src/modules/module_72000.c @@ -0,0 +1,263 @@ + +/** + * Author......: See docs/credits.txt + * License.....: MIT + */ + +#include "common.h" +#include "types.h" +#include "modules.h" +#include "bitops.h" +#include "convert.h" +#include "shared.h" +#include "memory.h" +#include "emu_inc_hash_md4.h" + +static const u32 ATTACK_EXEC = ATTACK_EXEC_OUTSIDE_KERNEL; +static const u32 DGST_POS0 = 0; +static const u32 DGST_POS1 = 1; +static const u32 DGST_POS2 = 2; +static const u32 DGST_POS3 = 3; +static const u32 DGST_SIZE = DGST_SIZE_4_4; +static const u32 HASH_CATEGORY = HASH_CATEGORY_RAW_HASH; +static const char *HASH_NAME = "Generic Hash [Bridged: Python Interpreter free-threading]"; +static const u64 KERN_TYPE = 72000; +static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE; +static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE + | OPTS_TYPE_PT_GENERATE_LE + | OPTS_TYPE_NATIVE_THREADS + | OPTS_TYPE_MP_MULTI_DISABLE; +static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; +static const u64 BRIDGE_TYPE = BRIDGE_TYPE_MATCH_TUNINGS // optional - improves performance + | BRIDGE_TYPE_LAUNCH_LOOP + | BRIDGE_TYPE_UPDATE_SELFTEST; +static const char *BRIDGE_NAME = "python_generic_hash_sp"; +static const char *ST_PASS = "hashcat"; +static const char *ST_HASH = "33522b0fd9812aa68586f66dba7c17a8ce64344137f9c7d8b11f32a6921c22de*9348746780603343"; + +u32 module_attack_exec (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ATTACK_EXEC; } +u32 module_dgst_pos0 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS0; } +u32 module_dgst_pos1 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS1; } +u32 module_dgst_pos2 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS2; } +u32 module_dgst_pos3 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS3; } +u32 module_dgst_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_SIZE; } +u32 module_hash_category (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return HASH_CATEGORY; } +const char *module_hash_name (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return HASH_NAME; } +u64 module_kern_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return KERN_TYPE; } +u32 module_opti_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return OPTI_TYPE; } +u64 module_opts_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return OPTS_TYPE; } +u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return SALT_TYPE; } +const char *module_st_hash (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_HASH; } +const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_PASS; } +const char *module_bridge_name (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return BRIDGE_NAME; } +u64 module_bridge_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return BRIDGE_TYPE; } + +typedef struct +{ + // input + + u32 pw_buf[64]; + u32 pw_len; + + // output + + u32 out_buf[64]; + u32 out_len; + +} generic_io_tmp_t; + +typedef struct +{ + u32 hash_buf[16384]; + u32 hash_len; + + u32 salt_buf[16384]; + u32 salt_len; + +} generic_io_t; + +u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u64 tmp_size = (const u64) sizeof (generic_io_tmp_t); + + return tmp_size; +} + +u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u64 esalt_size = (const u64) sizeof (generic_io_t); + + return esalt_size; +} + +bool module_potfile_disable (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const bool potfile_disable = true; + + return potfile_disable; +} + +int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len) +{ + u32 *digest = (u32 *) digest_buf; + + generic_io_t *generic_io = (generic_io_t *) esalt_buf; + + hc_token_t token; + + memset (&token, 0, sizeof (hc_token_t)); + + token.token_cnt = 2; + + token.len_min[0] = 0; + token.len_max[0] = 65536; + token.sep[0] = '*'; + token.attr[0] = TOKEN_ATTR_VERIFY_LENGTH; + + token.len_min[1] = 0; + token.len_max[1] = 65536; + token.sep[1] = '*'; + token.attr[1] = TOKEN_ATTR_VERIFY_LENGTH; + + const int rc_tokenizer = input_tokenizer ((const u8 *) line_buf, line_len, &token); + + if (rc_tokenizer != PARSER_OK) return (rc_tokenizer); + + // To keep this as generic as possible, + // we make a hash of the input data so it fits into digest[] + // and the same for the salt + + const u8 *salt_buf = token.buf[1]; + const int salt_len = token.len[1]; + + memcpy (generic_io->salt_buf, salt_buf, salt_len); + + generic_io->salt_len = salt_len; + + md4_ctx_t ctx1; + + md4_init (&ctx1); + md4_update (&ctx1, (const u32 *) generic_io->salt_buf, generic_io->salt_len); + md4_final (&ctx1); + + salt->salt_buf[0] = ctx1.h[0]; + salt->salt_buf[1] = ctx1.h[1]; + salt->salt_buf[2] = ctx1.h[2]; + salt->salt_buf[3] = ctx1.h[3]; + + salt->salt_len = 16; + salt->salt_iter = 1; + + // digest + + const u8 *hash_buf = token.buf[0]; + const int hash_len = token.len[0]; + + memcpy (generic_io->hash_buf, hash_buf, hash_len); + + generic_io->hash_len = hash_len; + + md4_ctx_t ctx2; + + md4_init (&ctx2); + md4_update (&ctx2, (const u32 *) generic_io->hash_buf, generic_io->hash_len); + md4_final (&ctx2); + + digest[0] = ctx2.h[0]; + digest[1] = ctx2.h[1]; + digest[2] = ctx2.h[2]; + digest[3] = ctx2.h[3]; + + return (PARSER_OK); +} + +int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const void *digest_buf, MAYBE_UNUSED const salt_t *salt, MAYBE_UNUSED const void *esalt_buf, MAYBE_UNUSED const void *hook_salt_buf, MAYBE_UNUSED const hashinfo_t *hash_info, char *line_buf, MAYBE_UNUSED const int line_size) +{ + const generic_io_t *generic_io = (const generic_io_t *) esalt_buf; + + const int line_len = snprintf (line_buf, line_size, "%s*%s", (char *) generic_io->hash_buf, (char *) generic_io->salt_buf); + + return line_len; +} + +void module_init (module_ctx_t *module_ctx) +{ + module_ctx->module_context_size = MODULE_CONTEXT_SIZE_CURRENT; + module_ctx->module_interface_version = MODULE_INTERFACE_VERSION_CURRENT; + + module_ctx->module_attack_exec = module_attack_exec; + module_ctx->module_benchmark_esalt = MODULE_DEFAULT; + module_ctx->module_benchmark_hook_salt = MODULE_DEFAULT; + module_ctx->module_benchmark_mask = MODULE_DEFAULT; + module_ctx->module_benchmark_charset = MODULE_DEFAULT; + module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = module_bridge_name; + module_ctx->module_bridge_type = module_bridge_type; + module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; + module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; + module_ctx->module_deprecated_notice = MODULE_DEFAULT; + module_ctx->module_dgst_pos0 = module_dgst_pos0; + module_ctx->module_dgst_pos1 = module_dgst_pos1; + module_ctx->module_dgst_pos2 = module_dgst_pos2; + module_ctx->module_dgst_pos3 = module_dgst_pos3; + module_ctx->module_dgst_size = module_dgst_size; + module_ctx->module_dictstat_disable = MODULE_DEFAULT; + module_ctx->module_esalt_size = module_esalt_size; + module_ctx->module_extra_buffer_size = MODULE_DEFAULT; + module_ctx->module_extra_tmp_size = MODULE_DEFAULT; + module_ctx->module_extra_tuningdb_block = MODULE_DEFAULT; + module_ctx->module_forced_outfile_format = MODULE_DEFAULT; + module_ctx->module_hash_binary_count = MODULE_DEFAULT; + module_ctx->module_hash_binary_parse = MODULE_DEFAULT; + module_ctx->module_hash_binary_save = MODULE_DEFAULT; + module_ctx->module_hash_decode_postprocess = MODULE_DEFAULT; + module_ctx->module_hash_category = module_hash_category; + module_ctx->module_hash_decode = module_hash_decode; + module_ctx->module_hash_decode_potfile = MODULE_DEFAULT; + module_ctx->module_hash_decode_zero_hash = MODULE_DEFAULT; + module_ctx->module_hash_encode = module_hash_encode; + module_ctx->module_hash_encode_status = MODULE_DEFAULT; + module_ctx->module_hash_encode_potfile = MODULE_DEFAULT; + module_ctx->module_hash_init_selftest = MODULE_DEFAULT; + module_ctx->module_hash_mode = MODULE_DEFAULT; + module_ctx->module_hash_name = module_hash_name; + module_ctx->module_hashes_count_min = MODULE_DEFAULT; + module_ctx->module_hashes_count_max = MODULE_DEFAULT; + module_ctx->module_hlfmt_disable = MODULE_DEFAULT; + module_ctx->module_hook_extra_param_size = MODULE_DEFAULT; + module_ctx->module_hook_extra_param_init = MODULE_DEFAULT; + module_ctx->module_hook_extra_param_term = MODULE_DEFAULT; + module_ctx->module_hook12 = MODULE_DEFAULT; + module_ctx->module_hook23 = MODULE_DEFAULT; + module_ctx->module_hook_salt_size = MODULE_DEFAULT; + module_ctx->module_hook_size = MODULE_DEFAULT; + module_ctx->module_jit_build_options = MODULE_DEFAULT; + module_ctx->module_jit_cache_disable = MODULE_DEFAULT; + module_ctx->module_kernel_accel_max = MODULE_DEFAULT; + module_ctx->module_kernel_accel_min = MODULE_DEFAULT; + module_ctx->module_kernel_loops_max = MODULE_DEFAULT; + module_ctx->module_kernel_loops_min = MODULE_DEFAULT; + module_ctx->module_kernel_threads_max = MODULE_DEFAULT; + module_ctx->module_kernel_threads_min = MODULE_DEFAULT; + module_ctx->module_kern_type = module_kern_type; + module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; + module_ctx->module_opti_type = module_opti_type; + module_ctx->module_opts_type = module_opts_type; + module_ctx->module_outfile_check_disable = MODULE_DEFAULT; + module_ctx->module_outfile_check_nocomp = MODULE_DEFAULT; + module_ctx->module_potfile_custom_check = MODULE_DEFAULT; + module_ctx->module_potfile_disable = module_potfile_disable; + module_ctx->module_potfile_keep_all_hashes = MODULE_DEFAULT; + module_ctx->module_pwdump_column = MODULE_DEFAULT; + module_ctx->module_pw_max = MODULE_DEFAULT; + module_ctx->module_pw_min = MODULE_DEFAULT; + module_ctx->module_salt_max = MODULE_DEFAULT; + module_ctx->module_salt_min = MODULE_DEFAULT; + module_ctx->module_salt_type = module_salt_type; + module_ctx->module_separator = MODULE_DEFAULT; + module_ctx->module_st_hash = module_st_hash; + module_ctx->module_st_pass = module_st_pass; + module_ctx->module_tmp_size = module_tmp_size; + module_ctx->module_unstable_warning = MODULE_DEFAULT; + module_ctx->module_warmup_disable = MODULE_DEFAULT; +} diff --git a/src/modules/module_73000.c b/src/modules/module_73000.c new file mode 100644 index 000000000..f8516ce00 --- /dev/null +++ b/src/modules/module_73000.c @@ -0,0 +1,263 @@ + +/** + * Author......: See docs/credits.txt + * License.....: MIT + */ + +#include "common.h" +#include "types.h" +#include "modules.h" +#include "bitops.h" +#include "convert.h" +#include "shared.h" +#include "memory.h" +#include "emu_inc_hash_md4.h" + +static const u32 ATTACK_EXEC = ATTACK_EXEC_OUTSIDE_KERNEL; +static const u32 DGST_POS0 = 0; +static const u32 DGST_POS1 = 1; +static const u32 DGST_POS2 = 2; +static const u32 DGST_POS3 = 3; +static const u32 DGST_SIZE = DGST_SIZE_4_4; +static const u32 HASH_CATEGORY = HASH_CATEGORY_RAW_HASH; +static const char *HASH_NAME = "Generic Hash [Bridged: Python Interpreter with GIL]"; +static const u64 KERN_TYPE = 73000; +static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE; +static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE + | OPTS_TYPE_PT_GENERATE_LE + | OPTS_TYPE_NATIVE_THREADS + | OPTS_TYPE_MP_MULTI_DISABLE; +static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; +static const u64 BRIDGE_TYPE = BRIDGE_TYPE_MATCH_TUNINGS // optional - improves performance + | BRIDGE_TYPE_LAUNCH_LOOP + | BRIDGE_TYPE_UPDATE_SELFTEST; +static const char *BRIDGE_NAME = "python_generic_hash_mp"; +static const char *ST_PASS = "hashcat"; +static const char *ST_HASH = "33522b0fd9812aa68586f66dba7c17a8ce64344137f9c7d8b11f32a6921c22de*9348746780603343"; + +u32 module_attack_exec (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ATTACK_EXEC; } +u32 module_dgst_pos0 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS0; } +u32 module_dgst_pos1 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS1; } +u32 module_dgst_pos2 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS2; } +u32 module_dgst_pos3 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS3; } +u32 module_dgst_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_SIZE; } +u32 module_hash_category (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return HASH_CATEGORY; } +const char *module_hash_name (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return HASH_NAME; } +u64 module_kern_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return KERN_TYPE; } +u32 module_opti_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return OPTI_TYPE; } +u64 module_opts_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return OPTS_TYPE; } +u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return SALT_TYPE; } +const char *module_st_hash (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_HASH; } +const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_PASS; } +const char *module_bridge_name (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return BRIDGE_NAME; } +u64 module_bridge_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return BRIDGE_TYPE; } + +typedef struct +{ + // input + + u32 pw_buf[64]; + u32 pw_len; + + // output + + u32 out_buf[64]; + u32 out_len; + +} generic_io_tmp_t; + +typedef struct +{ + u32 hash_buf[16384]; + u32 hash_len; + + u32 salt_buf[16384]; + u32 salt_len; + +} generic_io_t; + +u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u64 tmp_size = (const u64) sizeof (generic_io_tmp_t); + + return tmp_size; +} + +u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u64 esalt_size = (const u64) sizeof (generic_io_t); + + return esalt_size; +} + +bool module_potfile_disable (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const bool potfile_disable = true; + + return potfile_disable; +} + +int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len) +{ + u32 *digest = (u32 *) digest_buf; + + generic_io_t *generic_io = (generic_io_t *) esalt_buf; + + hc_token_t token; + + memset (&token, 0, sizeof (hc_token_t)); + + token.token_cnt = 2; + + token.len_min[0] = 0; + token.len_max[0] = 65536; + token.sep[0] = '*'; + token.attr[0] = TOKEN_ATTR_VERIFY_LENGTH; + + token.len_min[1] = 0; + token.len_max[1] = 65536; + token.sep[1] = '*'; + token.attr[1] = TOKEN_ATTR_VERIFY_LENGTH; + + const int rc_tokenizer = input_tokenizer ((const u8 *) line_buf, line_len, &token); + + if (rc_tokenizer != PARSER_OK) return (rc_tokenizer); + + // To keep this as generic as possible, + // we make a hash of the input data so it fits into digest[] + // and the same for the salt + + const u8 *salt_buf = token.buf[1]; + const int salt_len = token.len[1]; + + memcpy (generic_io->salt_buf, salt_buf, salt_len); + + generic_io->salt_len = salt_len; + + md4_ctx_t ctx1; + + md4_init (&ctx1); + md4_update (&ctx1, (const u32 *) generic_io->salt_buf, generic_io->salt_len); + md4_final (&ctx1); + + salt->salt_buf[0] = ctx1.h[0]; + salt->salt_buf[1] = ctx1.h[1]; + salt->salt_buf[2] = ctx1.h[2]; + salt->salt_buf[3] = ctx1.h[3]; + + salt->salt_len = 16; + salt->salt_iter = 1; + + // digest + + const u8 *hash_buf = token.buf[0]; + const int hash_len = token.len[0]; + + memcpy (generic_io->hash_buf, hash_buf, hash_len); + + generic_io->hash_len = hash_len; + + md4_ctx_t ctx2; + + md4_init (&ctx2); + md4_update (&ctx2, (const u32 *) generic_io->hash_buf, generic_io->hash_len); + md4_final (&ctx2); + + digest[0] = ctx2.h[0]; + digest[1] = ctx2.h[1]; + digest[2] = ctx2.h[2]; + digest[3] = ctx2.h[3]; + + return (PARSER_OK); +} + +int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const void *digest_buf, MAYBE_UNUSED const salt_t *salt, MAYBE_UNUSED const void *esalt_buf, MAYBE_UNUSED const void *hook_salt_buf, MAYBE_UNUSED const hashinfo_t *hash_info, char *line_buf, MAYBE_UNUSED const int line_size) +{ + const generic_io_t *generic_io = (const generic_io_t *) esalt_buf; + + const int line_len = snprintf (line_buf, line_size, "%s*%s", (char *) generic_io->hash_buf, (char *) generic_io->salt_buf); + + return line_len; +} + +void module_init (module_ctx_t *module_ctx) +{ + module_ctx->module_context_size = MODULE_CONTEXT_SIZE_CURRENT; + module_ctx->module_interface_version = MODULE_INTERFACE_VERSION_CURRENT; + + module_ctx->module_attack_exec = module_attack_exec; + module_ctx->module_benchmark_esalt = MODULE_DEFAULT; + module_ctx->module_benchmark_hook_salt = MODULE_DEFAULT; + module_ctx->module_benchmark_mask = MODULE_DEFAULT; + module_ctx->module_benchmark_charset = MODULE_DEFAULT; + module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = module_bridge_name; + module_ctx->module_bridge_type = module_bridge_type; + module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; + module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; + module_ctx->module_deprecated_notice = MODULE_DEFAULT; + module_ctx->module_dgst_pos0 = module_dgst_pos0; + module_ctx->module_dgst_pos1 = module_dgst_pos1; + module_ctx->module_dgst_pos2 = module_dgst_pos2; + module_ctx->module_dgst_pos3 = module_dgst_pos3; + module_ctx->module_dgst_size = module_dgst_size; + module_ctx->module_dictstat_disable = MODULE_DEFAULT; + module_ctx->module_esalt_size = module_esalt_size; + module_ctx->module_extra_buffer_size = MODULE_DEFAULT; + module_ctx->module_extra_tmp_size = MODULE_DEFAULT; + module_ctx->module_extra_tuningdb_block = MODULE_DEFAULT; + module_ctx->module_forced_outfile_format = MODULE_DEFAULT; + module_ctx->module_hash_binary_count = MODULE_DEFAULT; + module_ctx->module_hash_binary_parse = MODULE_DEFAULT; + module_ctx->module_hash_binary_save = MODULE_DEFAULT; + module_ctx->module_hash_decode_postprocess = MODULE_DEFAULT; + module_ctx->module_hash_category = module_hash_category; + module_ctx->module_hash_decode = module_hash_decode; + module_ctx->module_hash_decode_potfile = MODULE_DEFAULT; + module_ctx->module_hash_decode_zero_hash = MODULE_DEFAULT; + module_ctx->module_hash_encode = module_hash_encode; + module_ctx->module_hash_encode_status = MODULE_DEFAULT; + module_ctx->module_hash_encode_potfile = MODULE_DEFAULT; + module_ctx->module_hash_init_selftest = MODULE_DEFAULT; + module_ctx->module_hash_mode = MODULE_DEFAULT; + module_ctx->module_hash_name = module_hash_name; + module_ctx->module_hashes_count_min = MODULE_DEFAULT; + module_ctx->module_hashes_count_max = MODULE_DEFAULT; + module_ctx->module_hlfmt_disable = MODULE_DEFAULT; + module_ctx->module_hook_extra_param_size = MODULE_DEFAULT; + module_ctx->module_hook_extra_param_init = MODULE_DEFAULT; + module_ctx->module_hook_extra_param_term = MODULE_DEFAULT; + module_ctx->module_hook12 = MODULE_DEFAULT; + module_ctx->module_hook23 = MODULE_DEFAULT; + module_ctx->module_hook_salt_size = MODULE_DEFAULT; + module_ctx->module_hook_size = MODULE_DEFAULT; + module_ctx->module_jit_build_options = MODULE_DEFAULT; + module_ctx->module_jit_cache_disable = MODULE_DEFAULT; + module_ctx->module_kernel_accel_max = MODULE_DEFAULT; + module_ctx->module_kernel_accel_min = MODULE_DEFAULT; + module_ctx->module_kernel_loops_max = MODULE_DEFAULT; + module_ctx->module_kernel_loops_min = MODULE_DEFAULT; + module_ctx->module_kernel_threads_max = MODULE_DEFAULT; + module_ctx->module_kernel_threads_min = MODULE_DEFAULT; + module_ctx->module_kern_type = module_kern_type; + module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; + module_ctx->module_opti_type = module_opti_type; + module_ctx->module_opts_type = module_opts_type; + module_ctx->module_outfile_check_disable = MODULE_DEFAULT; + module_ctx->module_outfile_check_nocomp = MODULE_DEFAULT; + module_ctx->module_potfile_custom_check = MODULE_DEFAULT; + module_ctx->module_potfile_disable = module_potfile_disable; + module_ctx->module_potfile_keep_all_hashes = MODULE_DEFAULT; + module_ctx->module_pwdump_column = MODULE_DEFAULT; + module_ctx->module_pw_max = MODULE_DEFAULT; + module_ctx->module_pw_min = MODULE_DEFAULT; + module_ctx->module_salt_max = MODULE_DEFAULT; + module_ctx->module_salt_min = MODULE_DEFAULT; + module_ctx->module_salt_type = module_salt_type; + module_ctx->module_separator = MODULE_DEFAULT; + module_ctx->module_st_hash = module_st_hash; + module_ctx->module_st_pass = module_st_pass; + module_ctx->module_tmp_size = module_tmp_size; + module_ctx->module_unstable_warning = MODULE_DEFAULT; + module_ctx->module_warmup_disable = MODULE_DEFAULT; +} diff --git a/tools/test_modules/m72000.pm b/tools/test_modules/m72000.pm new file mode 100644 index 000000000..c16d35790 --- /dev/null +++ b/tools/test_modules/m72000.pm @@ -0,0 +1,55 @@ +#!/usr/bin/env perl + +## +## Author......: See docs/credits.txt +## License.....: MIT +## + +use strict; +use warnings; + +use Digest::SHA qw (sha256); + +sub module_constraints { [[0, 256], [16, 16], [-1, -1], [-1, -1], [-1, -1]] } + +sub module_generate_hash +{ + my $word = shift; + my $salt = shift; + + my $digest = sha256 ($salt . $word); + + for (my $i = 0; $i < 10000; $i++) + { + $digest = sha256 ($digest); + } + + my $hash = sprintf ("%s*%s", unpack ("H*", $digest), $salt); + + return $hash; +} + +sub module_verify_hash +{ + my $line = shift; + + my $idx = index ($line, ':'); + + return unless $idx >= 0; + + my $hash = substr ($line, 0, $idx); + my $word = substr ($line, $idx + 1); + + my ($digest, $salt) = split '\*', $hash; + + return unless defined $digest; + return unless defined $salt; + + my $word_packed = pack_if_HEX_notation ($word); + + my $new_hash = module_generate_hash ($word_packed, $salt); + + return ($new_hash, $word); +} + +1; diff --git a/tools/test_modules/m73000.pm b/tools/test_modules/m73000.pm new file mode 100644 index 000000000..c16d35790 --- /dev/null +++ b/tools/test_modules/m73000.pm @@ -0,0 +1,55 @@ +#!/usr/bin/env perl + +## +## Author......: See docs/credits.txt +## License.....: MIT +## + +use strict; +use warnings; + +use Digest::SHA qw (sha256); + +sub module_constraints { [[0, 256], [16, 16], [-1, -1], [-1, -1], [-1, -1]] } + +sub module_generate_hash +{ + my $word = shift; + my $salt = shift; + + my $digest = sha256 ($salt . $word); + + for (my $i = 0; $i < 10000; $i++) + { + $digest = sha256 ($digest); + } + + my $hash = sprintf ("%s*%s", unpack ("H*", $digest), $salt); + + return $hash; +} + +sub module_verify_hash +{ + my $line = shift; + + my $idx = index ($line, ':'); + + return unless $idx >= 0; + + my $hash = substr ($line, 0, $idx); + my $word = substr ($line, $idx + 1); + + my ($digest, $salt) = split '\*', $hash; + + return unless defined $digest; + return unless defined $salt; + + my $word_packed = pack_if_HEX_notation ($word); + + my $new_hash = module_generate_hash ($word_packed, $salt); + + return ($new_hash, $word); +} + +1; From e8052a004b53d324be752914830b62d9107e6705 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Mon, 2 Jun 2025 11:50:08 +0200 Subject: [PATCH 30/95] - Replace naive 32 bit rotate with funnelshift on CUDA/HIP - Replace V_ALIGNBIT_B32 with funnelshift on HIP - Improve RC4 performance by preventing inlineing - Fix leftover code in yescrypt-platform.c - Update docs/hashcat-assimilation-bridge-development.md - Only initialize hwmon on host for virtualized backends - Improve SCRYPT tunings on AMD RX6900XT --- OpenCL/inc_cipher_rc4.cl | 8 +- OpenCL/inc_platform.cl | 183 ++++++++++++++--- deps/yescrypt-master/yescrypt-platform.c | 1 - ...hashcat-assimilation-bridge-development.md | 184 ++++++++++++------ src/hwmon.c | 17 +- src/terminal.c | 126 ++++++++---- tunings/Module_08900.hctune | 2 +- tunings/Module_09300.hctune | 2 +- tunings/Module_15700.hctune | 2 +- tunings/Module_22700.hctune | 2 +- tunings/Module_27700.hctune | 2 +- tunings/Module_28200.hctune | 2 +- tunings/Module_29800.hctune | 2 +- 13 files changed, 407 insertions(+), 126 deletions(-) diff --git a/OpenCL/inc_cipher_rc4.cl b/OpenCL/inc_cipher_rc4.cl index 3ec670511..77dc5daa4 100644 --- a/OpenCL/inc_cipher_rc4.cl +++ b/OpenCL/inc_cipher_rc4.cl @@ -4,6 +4,12 @@ #include "inc_common.h" #include "inc_cipher_rc4.h" +#ifdef IS_HIP +#define RC4_NOINLINE __attribute__ ((noinline)) +#else +#define RC4_NOINLINE +#endif + #ifdef IS_CPU // Pattern linear @@ -390,7 +396,7 @@ DECLSPEC u8 rc4_next_16 (LOCAL_AS u32 *S, const u8 i, const u8 j, PRIVATE_AS con return b; } -DECLSPEC u8 rc4_next_16_global (LOCAL_AS u32 *S, const u8 i, const u8 j, GLOBAL_AS const u32 *in, PRIVATE_AS u32 *out, const u64 lid) +DECLSPEC RC4_NOINLINE u8 rc4_next_16_global (LOCAL_AS u32 *S, const u8 i, const u8 j, GLOBAL_AS const u32 *in, PRIVATE_AS u32 *out, const u64 lid) { u8 a = i; u8 b = j; diff --git a/OpenCL/inc_platform.cl b/OpenCL/inc_platform.cl index 06ba76553..99d2cea13 100644 --- a/OpenCL/inc_platform.cl +++ b/OpenCL/inc_platform.cl @@ -122,22 +122,94 @@ DECLSPEC size_t get_local_size (const u32 dimindx __attribute__((unused))) DECLSPEC u32x rotl32 (const u32x a, const int n) { - return ((a << n) | ((a >> (32 - n)))); + #if VECT_SIZE == 1 + return __funnelshift_l(a, a, n); + #endif + + u32x t; + + #if VECT_SIZE >= 2 + t.s0 = __funnelshift_l(a.s0, a.s0, n); + t.s1 = __funnelshift_l(a.s1, a.s1, n); + #endif + + #if VECT_SIZE >= 4 + t.s2 = __funnelshift_l(a.s2, a.s2, n); + t.s3 = __funnelshift_l(a.s3, a.s3, n); + #endif + + #if VECT_SIZE >= 8 + t.s4 = __funnelshift_l(a.s4, a.s4, n); + t.s5 = __funnelshift_l(a.s5, a.s5, n); + t.s6 = __funnelshift_l(a.s6, a.s6, n); + t.s7 = __funnelshift_l(a.s7, a.s7, n); + #endif + + #if VECT_SIZE >= 16 + t.s8 = __funnelshift_l(a.s8, a.s8, n); + t.s9 = __funnelshift_l(a.s9, a.s9, n); + t.sa = __funnelshift_l(a.sa, a.sa, n); + t.sb = __funnelshift_l(a.sb, a.sb, n); + t.sc = __funnelshift_l(a.sc, a.sc, n); + t.sd = __funnelshift_l(a.sd, a.sd, n); + t.se = __funnelshift_l(a.se, a.se, n); + t.sf = __funnelshift_l(a.sf, a.sf, n); + #endif + + return t; + //return ((a << n) | ((a >> (32 - n)))); } DECLSPEC u32x rotr32 (const u32x a, const int n) { - return ((a >> n) | ((a << (32 - n)))); + #if VECT_SIZE == 1 + return __funnelshift_r(a, a, n); + #endif + + u32x t; + + #if VECT_SIZE >= 2 + t.s0 = __funnelshift_r(a.s0, a.s0, n); + t.s1 = __funnelshift_r(a.s1, a.s1, n); + #endif + + #if VECT_SIZE >= 4 + t.s2 = __funnelshift_r(a.s2, a.s2, n); + t.s3 = __funnelshift_r(a.s3, a.s3, n); + #endif + + #if VECT_SIZE >= 8 + t.s4 = __funnelshift_r(a.s4, a.s4, n); + t.s5 = __funnelshift_r(a.s5, a.s5, n); + t.s6 = __funnelshift_r(a.s6, a.s6, n); + t.s7 = __funnelshift_r(a.s7, a.s7, n); + #endif + + #if VECT_SIZE >= 16 + t.s8 = __funnelshift_r(a.s8, a.s8, n); + t.s9 = __funnelshift_r(a.s9, a.s9, n); + t.sa = __funnelshift_r(a.sa, a.sa, n); + t.sb = __funnelshift_r(a.sb, a.sb, n); + t.sc = __funnelshift_r(a.sc, a.sc, n); + t.sd = __funnelshift_r(a.sd, a.sd, n); + t.se = __funnelshift_r(a.se, a.se, n); + t.sf = __funnelshift_r(a.sf, a.sf, n); + #endif + + return t; + //return ((a >> n) | ((a << (32 - n)))); } DECLSPEC u32 rotl32_S (const u32 a, const int n) { - return ((a << n) | ((a >> (32 - n)))); + return __funnelshift_l(a, a, n); + //return ((a << n) | ((a >> (32 - n)))); } DECLSPEC u32 rotr32_S (const u32 a, const int n) { - return ((a >> n) | ((a << (32 - n)))); + return __funnelshift_r(a, a, n); + //return ((a >> n) | ((a << (32 - n)))); } DECLSPEC u64x rotl64 (const u64x a, const int n) @@ -226,36 +298,103 @@ DECLSPEC size_t get_local_size (const u32 dimindx __attribute__((unused))) DECLSPEC u32x rotl32 (const u32x a, const int n) { - return ((a << n) | ((a >> (32 - n)))); + #if VECT_SIZE == 1 + return __funnelshift_l(a, a, n); + #endif + + u32x t; + + #if VECT_SIZE >= 2 + t.s0 = __funnelshift_l(a.s0, a.s0, n); + t.s1 = __funnelshift_l(a.s1, a.s1, n); + #endif + + #if VECT_SIZE >= 4 + t.s2 = __funnelshift_l(a.s2, a.s2, n); + t.s3 = __funnelshift_l(a.s3, a.s3, n); + #endif + + #if VECT_SIZE >= 8 + t.s4 = __funnelshift_l(a.s4, a.s4, n); + t.s5 = __funnelshift_l(a.s5, a.s5, n); + t.s6 = __funnelshift_l(a.s6, a.s6, n); + t.s7 = __funnelshift_l(a.s7, a.s7, n); + #endif + + #if VECT_SIZE >= 16 + t.s8 = __funnelshift_l(a.s8, a.s8, n); + t.s9 = __funnelshift_l(a.s9, a.s9, n); + t.sa = __funnelshift_l(a.sa, a.sa, n); + t.sb = __funnelshift_l(a.sb, a.sb, n); + t.sc = __funnelshift_l(a.sc, a.sc, n); + t.sd = __funnelshift_l(a.sd, a.sd, n); + t.se = __funnelshift_l(a.se, a.se, n); + t.sf = __funnelshift_l(a.sf, a.sf, n); + #endif + + return t; + //return ((a << n) | ((a >> (32 - n)))); } DECLSPEC u32x rotr32 (const u32x a, const int n) { - return ((a >> n) | ((a << (32 - n)))); + #if VECT_SIZE == 1 + return __funnelshift_r(a, a, n); + #endif + + u32x t; + + #if VECT_SIZE >= 2 + t.s0 = __funnelshift_r(a.s0, a.s0, n); + t.s1 = __funnelshift_r(a.s1, a.s1, n); + #endif + + #if VECT_SIZE >= 4 + t.s2 = __funnelshift_r(a.s2, a.s2, n); + t.s3 = __funnelshift_r(a.s3, a.s3, n); + #endif + + #if VECT_SIZE >= 8 + t.s4 = __funnelshift_r(a.s4, a.s4, n); + t.s5 = __funnelshift_r(a.s5, a.s5, n); + t.s6 = __funnelshift_r(a.s6, a.s6, n); + t.s7 = __funnelshift_r(a.s7, a.s7, n); + #endif + + #if VECT_SIZE >= 16 + t.s8 = __funnelshift_r(a.s8, a.s8, n); + t.s9 = __funnelshift_r(a.s9, a.s9, n); + t.sa = __funnelshift_r(a.sa, a.sa, n); + t.sb = __funnelshift_r(a.sb, a.sb, n); + t.sc = __funnelshift_r(a.sc, a.sc, n); + t.sd = __funnelshift_r(a.sd, a.sd, n); + t.se = __funnelshift_r(a.se, a.se, n); + t.sf = __funnelshift_r(a.sf, a.sf, n); + #endif + + return t; + //return ((a >> n) | ((a << (32 - n)))); } DECLSPEC u32 rotl32_S (const u32 a, const int n) { - return ((a << n) | ((a >> (32 - n)))); + return __funnelshift_l(a, a, n); + //return ((a << n) | ((a >> (32 - n)))); } DECLSPEC u32 rotr32_S (const u32 a, const int n) { - return ((a >> n) | ((a << (32 - n)))); + return __funnelshift_r(a, a, n); + //return ((a >> n) | ((a << (32 - n)))); } DECLSPEC u64x rotl64 (const u64x a, const int n) { - return rotr64 (a, 64 - n); -} - -DECLSPEC u32 amd_bitalign_S (const u32 a, const u32 b, const int n) -{ - u32 r = 0; - - __asm__ ("V_ALIGNBIT_B32 %0, %1, %2, %3;" : "=v"(r): "v"(a), "v"(b), "I"(n)); - - return r; + #if VECT_SIZE == 1 + return rotl64_S (a, n); + #else + return ((a << n) | ((a >> (64 - n)))); + #endif } DECLSPEC u64x rotr64 (const u64x a, const int n) @@ -285,13 +424,13 @@ DECLSPEC u64 rotr64_S (const u64 a, const int n) if (n < 32) { - out.v32.a = amd_bitalign_S (a1, a0, n); - out.v32.b = amd_bitalign_S (a0, a1, n); + out.v32.a = __funnelshift_r (a0, a1, n); + out.v32.b = __funnelshift_r (a1, a0, n); } else { - out.v32.a = amd_bitalign_S (a0, a1, n - 32); - out.v32.b = amd_bitalign_S (a1, a0, n - 32); + out.v32.a = __funnelshift_r (a1, a0, n - 32); + out.v32.b = __funnelshift_r (a0, a1, n - 32); } return out.v64; diff --git a/deps/yescrypt-master/yescrypt-platform.c b/deps/yescrypt-master/yescrypt-platform.c index b04acee2a..6632f14c0 100644 --- a/deps/yescrypt-master/yescrypt-platform.c +++ b/deps/yescrypt-master/yescrypt-platform.c @@ -97,7 +97,6 @@ static inline void init_region(yescrypt_region_t *region) static int free_region(yescrypt_region_t *region) { -return 0; if (region->base) { #ifdef MAP_ANON if (munmap(region->base, region->base_size)) diff --git a/docs/hashcat-assimilation-bridge-development.md b/docs/hashcat-assimilation-bridge-development.md index d82604cd1..459a786fd 100644 --- a/docs/hashcat-assimilation-bridge-development.md +++ b/docs/hashcat-assimilation-bridge-development.md @@ -1,9 +1,17 @@ +# Assimilation Bridge Plugin Development ## Developer Section -The following section is for plugin and bridge developers. It contains low-level implementation details. It's a first draft, expect more details to fill in soon. +The following section is for plugin and bridge developers. It contains low-level implementation details. ---- +## Update existing plugins + +In case you have written a hashcat plugin, you need to update the init function and add the following two lines: + ++ module_ctx->module_bridge_name = MODULE_DEFAULT; ++ module_ctx->module_bridge_type = MODULE_DEFAULT; + +Existing modules on hashcat repository will be automatically updated. ## Plugin Integration and Bridge Registration @@ -18,27 +26,96 @@ static const char *BRIDGE_NAME = "scrypt_jane"; * `BRIDGE_NAME` tells Hashcat which bridge to load (e.g., `bridge_scrypt_jane.so`). * `BRIDGE_TYPE` indicates which backend kernel functions the bridge will override: - * `BRIDGE_TYPE_LAUNCH_LOOP` - * `BRIDGE_TYPE_LAUNCH_LOOP2` + * `BRIDGE_TYPE_LAUNCH_LOOP`: Entry point for all bridges that register to run after `RUN_LOOP` + * `BRIDGE_TYPE_LAUNCH_LOOP2`: Entry point for all bridges that register to run after `RUN_LOOP2` + * `BRIDGE_TYPE_REPLACE_LOOP`: Same as BRIDGE_TYPE_LAUNCH_LOOP, but deactivates `RUN_LOOP` + * `BRIDGE_TYPE_REPLACE_LOOP2`: Same as BRIDGE_TYPE_LAUNCH_LOOP2, but deactivates `RUN_LOOP2` -Hashcat loads the bridge dynamically and uses it for any declared replacements. It's the developer's responsibility to ensure compatibility. That typically means the handling of the `tmps` variable relevant in the `kernel_loop` and how it changes over time. Hashcat will take care of copying the data from and to the compute backend (GPU) buffers. +Hashcat loads the bridge dynamically and uses it for any declared invocation. ---- +Note that bridges only load for outside kernel, aka "slow hash" kernels. In "fast hash" kernels, such as MD5, they are ignored. In case you want to implement a "fast hash" + bridge hybrid, you can move the "fast hash" code into a new "slow hash" kernel. + +Here's a high-level view on how hashcat executes several key points during a password batch: + +``` +ATTACK_EXEC_OUTSIDE_KERNEL: + COPY_AMPLIFIER_MATERIAL + RUN_AMPLIFIER + RUN_UTF16_CONVERT + RUN_INIT + COPY_HOOK_DATA_TO_HOST + CALL_HOOK12 + COPY_HOOK_DATA_TO_DEVICE + SALT_REPEATS (default 1): + RUN_PREPARE + ITER_REPEATS: + RUN_LOOP + RUN_EXTENTED + COPY_BRIDGE_MATERIAL_TO_HOST + BRIDGE_LAUNCH_LOOP + COPY_BRIDGE_MATERIAL_TO_DEVICE + COPY_HOOK_DATA_TO_HOST + CALL_HOOK23 + COPY_HOOK_DATA_TO_DEVICE + RUN_INIT2 + SALT_REPEATS (default 1): + RUN_PREPARE2 + ITER2_REPEATS: + RUN_LOOP2 + COPY_BRIDGE_MATERIAL_TO_HOST + BRIDGE_LAUNCH_LOOP2 + COPY_BRIDGE_MATERIAL_TO_DEVICE + DEEP_COMP_KERNEL: + RUN_AUX1/2/3/4 + RUN_COMP + CLEAN_HOOK_DATA +``` + +- RUN_* refers to compute kernel executions, such as "init" kernel, but also "amplifier" (typically base-word * modifier-word multiplication). +- COPY_* refers to host-to-device or device-to-host copies and typically involve PCIe data transfer. +- CALL_* are code functions executed on the host CPU. They are plugin-specific and defined in a module. They were the predecessor of bridges but are still usable. +- SALT_* typically are optional steps which allow certain algorithms specific optimizations. For instance in Scrypt with P > 1, the V and XY buffer can be reused and allow temporary storage of result values into B. This saves memory requirement, improving parallelization +- ITER_* is the main loop that chunks what typically is defined as "iterations" in a algorithm computation. For instance a PBKDF2 function is called with 10,000 iterations, which would take a while to compute. The time this takes could be longer than a GPU drivers watchdog allows (before it resets the compute engine.). Hashcat will divide the 10,000 into chunks of let's say 1,000 and call the same kernel 10 times +- BRIDGE_* existing bridge entry points. During the "lifetime" of a hash computation the tmps[] variable is used (algorithm specific, so defined in the specific plugin module and kernel). This variable is which we refer to as bridge material, but it's possible we add other types of variables to "material" in the future +- ITER2/LOOP2: Optional entry points in case the algorithm consists of two types of long running (high iterated) sub-components. For instance one iteration of 10k loops sha256 followed by 100k loops of sha512, or bcrypt followed by scrypt + + * `BRIDGE_TYPE_LAUNCH_INIT` + * `BRIDGE_TYPE_LAUNCH_COMP` + +Hashcat devs will add support on request. + +As mentioned in the BRIDGE_* entry points, it's the developer's responsibility to ensure compatibility. That typically means the handling of the `tmps` variable relevant in the `kernel_loop` and how it changes over algorithm computations lifetime. Hashcat will take care of copying the data from and to the compute backend buffers (bridge material). + +But the bridge developer must ensure data transformation compatibility. For instance, if we replace the loop section in SCRYPT (8900), the long running part is the smix() activity. But SCRYPT implements the PBKDF2 handling in both init and comp kernels, preparing the values in B[] after the init kernel, and expecting modified values in B[] before running comp kernel. If you want to replace the smix() section with let's say FPGA code, the bridge needs to understand the structure of the tmps[] variable. In this case tmps[] just reflect SCRYPT B[], making this simple, but other algorithms may require more than just one large buffer array. That means the structure itself (datatypes), but also the amount of workitems, because there's almost always more than one workitem (to reduce overhead times). + +There's some more BRIDGE PARAMETERs that you should know: + ++ BRIDGE_TYPE_MATCH_TUNINGS = Disables autotune and adjusts -n, -u and -T for the backend device according to match the bridge's dimensions ++ BRIDGE_TYPE_UPDATE_SELFTEST = updates the selftest configured in the module. Can be useful for generic hash modes such as the python plugin ## How Bridges Work -When Hashcat starts with a plugin that specifies a bridge, it loads the bridge and invokes its initialization function. The bridge must then discover its internal compute units, called *bridge units*. This is done manually by the bridge developer. +When Hashcat starts with a plugin that specifies a bridge, it loads the bridge and invokes its initialization function. The bridge must then discover its internal compute units, called *bridge units*. Handling the units must be implemented by the bridge developer, and typically involves loading some library, init it, and retrieve some resources available, for instances loading XRT, asking how many FPGA are available. If there's two FPGA, then the bridge unit count would be two. You also need to provide some detailed information on the unit itself, for instance the name of the device, or version or your software solution if it's not a hardware. -Each bridge unit maps to one virtual backend device, which allows asynchronous and independent parallel execution. +Each of these bridge unit maps to one virtual backend device, which allows asynchronous and independent parallel execution, and this were virtual backend devices become relevant. Read section about virtual backend devices for a better understanding -### Virtual Backend Devices +From the bridge_init() function you have access to the following generic parameters, set on the command line by the user: + +```c ++ " --bridge-parameter1 | Str | Sets the generatic parameter 1 for a Bridge |", ++ " --bridge-parameter2 | Str | Sets the generatic parameter 2 for a Bridge |", ++ " --bridge-parameter3 | Str | Sets the generatic parameter 3 for a Bridge |", ++ " --bridge-parameter4 | Str | Sets the generatic parameter 4 for a Bridge |", +``` + +## Virtual Backend Devices + +This feature is available also outside of bridges, eg in order to increase some workload on a compute device, but it was added in the first place to support bridges. The main problem is that it's possible that a bridge return 2 bridge units which may have different speeds (clocking), or an ideal batch size. The time it takes to compute a certain batch of passwords would be different, so there was a need for an asynchronous execution strategy. Hashcat supports mixed speed device types, but that typically mean "backend" devices. To solve the issue, we partition (virtualize) one physical backend device into multiple virtual backend devices (done internally by hashcat), and "link" each of the virtual backend device to a bridge unit. Due to this binding we can support bridge units of different speed. There's two flags a user can control in regard to virtual device backend: * Use `-Y` to define how many virtual backend devices to create. * Use `-R` to bind these virtual devices to a physical backend host (new in v7). -This structure supports mixed-performance hardware without bottlenecks. - ---- +Note that if a bridge is used, the user's `-Y` parameter is overridden with the bridge unit count. If no bridge is used for a hash mode, then -Y can be manually specified. `-R` works in both cases. The default is device `1`, unless overridden. ## Writing a Bridge @@ -51,14 +128,18 @@ src/bridges/bridge_scrypt_jane.c src/bridges/bridge_scrypt_jane.mk ``` -Example build rule: +The target output should be named like this: `bridges/bridge_scrypt_jane.so` and `bridges/bridge_scrypt_jane.dll`. Use any of the existing `.mk` files as template. + +When hashcat starts, it finds the plugin using this pathfinder: ``` -bridges/bridge_scrypt_jane.so: src/bridges/bridge_scrypt_jane.c + #if defined (_WIN) || defined (__CYGWIN__) + return snprintf (out_buf, out_size, "%s/bridges/bridge_%s.dll", folder_config->shared_dir, bridge_name); + #else + return snprintf (out_buf, out_size, "%s/bridges/bridge_%s.so", folder_config->shared_dir, bridge_name); + #endif ``` -Hashcat will automatically load this shared object based on the plugin's `BRIDGE_NAME`. - ### Required Function Exports ```c @@ -77,7 +158,25 @@ bridge_ctx->st_update_hash = BRIDGE_DEFAULT; bridge_ctx->st_update_pass = BRIDGE_DEFAULT; ``` -> Use `BRIDGE_DEFAULT` when no function implementation is required. +They are defined like this: + +```c + void *(*platform_init) (user_options_t *); + void (*platform_term) (void *); + int (*get_unit_count) (void *); + char *(*get_unit_info) (void *, const int); + int (*get_workitem_count) (void *, const int); + bool (*salt_prepare) (void *, hashconfig_t *, hashes_t *); + void (*salt_destroy) (void *, hashconfig_t *, hashes_t *); + bool (*thread_init) (void *, hc_device_param_t *, hashconfig_t *, hashes_t *); + void (*thread_term) (void *, hc_device_param_t *, hashconfig_t *, hashes_t *); + bool (*launch_loop) (void *, hc_device_param_t *, hashconfig_t *, hashes_t *, const u32, const u64); + bool (*launch_loop2) (void *, hc_device_param_t *, hashconfig_t *, hashes_t *, const u32, const u64); + const char *(*st_update_pass) (void *); + const char *(*st_update_hash) (void *); +``` + +**Note**: Use `BRIDGE_DEFAULT` when no function implementation is required. ### Mandatory Functions @@ -93,41 +192,16 @@ CHECK_MANDATORY (bridge_ctx->get_workitem_count); ### Function Roles -**platform\_init** -Called at startup. Responsible for initialization. This might include loading libraries, connecting to remote endpoints, or setting up hardware APIs. Returns a context pointer. - -**platform\_term** -Final cleanup logic. Frees any context data allocated during initialization. - -**get\_unit\_count** -Returns the number of available units. For example, return `2` if two FPGAs are detected. - -**get\_unit\_info** -Returns a human-readable description of a unit, like "Python v3.13.3". - -**get\_workitem\_count** -Returns the number of password candidates to process per invocation. - -**thread\_init** -Optional. Use for per-thread setup, such as creating a new Python interpreter. - -**thread\_term** -Optional. Use for per-thread cleanup. - -**salt\_prepare** -Called once per salt. Useful for preprocessing or storing large salt/esalt buffers. - -**salt\_destroy** -Optional cleanup routine for any salt-specific memory. - -**launch\_loop** -Main compute function. Replaces the traditional `_loop` kernel. - -**launch\_loop2** -Secondary compute function. Replaces `_loop2` if needed. - -**st\_update\_hash** -Optionally override the module's default self-test hash. - -**st\_update\_pass** -Optionally override the module's default self-test password. +- platform_init: Called at startup. Responsible for initialization. This might include loading libraries, connecting to remote endpoints, or setting up hardware APIs. Returns a context pointer. +- platform_term: Final cleanup logic. Frees any context data allocated during initialization. +- get_unit_count: Returns the number of available units. For example, return `2` if two FPGAs are detected. +- get_unit_info: Returns a human-readable description of a unit, like "Python v3.13.3". +- get_workitem_count: Returns the number of password candidates to process per invocation. +- thread_init: Optional. Use for per-thread setup, such as creating a new Python interpreter. +- thread_term: Optional. Use for per-thread cleanup. +- salt_prepare: Called once per salt. Useful for preprocessing or storing large salt/esalt buffers. +- salt_destroy: Optional cleanup routine for any salt-specific memory. +- launch_loop: Main compute function. Replaces the traditional `_loop` kernel. +- launch_loop2: Secondary compute function. Replaces `_loop2` if needed. +- st_update_hash: Optionally override the module's default self-test hash. +- st_update_pass: Optionally override the module's default self-test password. diff --git a/src/hwmon.c b/src/hwmon.c index d18d12552..a0f24c644 100644 --- a/src/hwmon.c +++ b/src/hwmon.c @@ -1216,12 +1216,17 @@ int hm_get_throttle_with_devices_idx (hashcat_ctx_t *hashcat_ctx, const int back int hwmon_ctx_init (hashcat_ctx_t *hashcat_ctx) { + bridge_ctx_t *bridge_ctx = hashcat_ctx->bridge_ctx; hwmon_ctx_t *hwmon_ctx = hashcat_ctx->hwmon_ctx; backend_ctx_t *backend_ctx = hashcat_ctx->backend_ctx; user_options_t *user_options = hashcat_ctx->user_options; hwmon_ctx->enabled = false; + int backend_devices_cnt = backend_ctx->backend_devices_cnt; + + if (bridge_ctx->enabled == true) backend_devices_cnt = 1; + #if !defined (WITH_HWMON) return 0; #endif // WITH_HWMON @@ -1352,7 +1357,7 @@ int hwmon_ctx_init (hashcat_ctx_t *hashcat_ctx) int tmp_in = hm_get_adapter_index_nvml (hashcat_ctx, nvmlGPUHandle); - for (int backend_devices_idx = 0; backend_devices_idx < backend_ctx->backend_devices_cnt; backend_devices_idx++) + for (int backend_devices_idx = 0; backend_devices_idx < backend_devices_cnt; backend_devices_idx++) { hc_device_param_t *device_param = &backend_ctx->devices_param[backend_devices_idx]; @@ -1431,7 +1436,7 @@ int hwmon_ctx_init (hashcat_ctx_t *hashcat_ctx) int tmp_in = hm_get_adapter_index_nvapi (hashcat_ctx, nvGPUHandle); - for (int backend_devices_idx = 0; backend_devices_idx < backend_ctx->backend_devices_cnt; backend_devices_idx++) + for (int backend_devices_idx = 0; backend_devices_idx < backend_devices_cnt; backend_devices_idx++) { hc_device_param_t *device_param = &backend_ctx->devices_param[backend_devices_idx]; @@ -1522,7 +1527,7 @@ int hwmon_ctx_init (hashcat_ctx_t *hashcat_ctx) return -1; } - for (int backend_devices_idx = 0; backend_devices_idx < backend_ctx->backend_devices_cnt; backend_devices_idx++) + for (int backend_devices_idx = 0; backend_devices_idx < backend_devices_cnt; backend_devices_idx++) { hc_device_param_t *device_param = &backend_ctx->devices_param[backend_devices_idx]; @@ -1580,7 +1585,7 @@ int hwmon_ctx_init (hashcat_ctx_t *hashcat_ctx) { if (true) { - for (int backend_devices_idx = 0; backend_devices_idx < backend_ctx->backend_devices_cnt; backend_devices_idx++) + for (int backend_devices_idx = 0; backend_devices_idx < backend_devices_cnt; backend_devices_idx++) { hc_device_param_t *device_param = &backend_ctx->devices_param[backend_devices_idx]; @@ -1645,7 +1650,7 @@ int hwmon_ctx_init (hashcat_ctx_t *hashcat_ctx) { if (true) { - for (int backend_devices_idx = 0; backend_devices_idx < backend_ctx->backend_devices_cnt; backend_devices_idx++) + for (int backend_devices_idx = 0; backend_devices_idx < backend_devices_cnt; backend_devices_idx++) { hc_device_param_t *device_param = &backend_ctx->devices_param[backend_devices_idx]; @@ -1708,7 +1713,7 @@ int hwmon_ctx_init (hashcat_ctx_t *hashcat_ctx) * HM devices: copy */ - for (int backend_devices_idx = 0; backend_devices_idx < backend_ctx->backend_devices_cnt; backend_devices_idx++) + for (int backend_devices_idx = 0; backend_devices_idx < backend_devices_cnt; backend_devices_idx++) { hc_device_param_t *device_param = &backend_ctx->devices_param[backend_devices_idx]; diff --git a/src/terminal.c b/src/terminal.c index 9ceaf5706..04b157400 100644 --- a/src/terminal.c +++ b/src/terminal.c @@ -1818,52 +1818,110 @@ void backend_info_compact (hashcat_ctx_t *hashcat_ctx) event_log_info (hashcat_ctx, "%s", line); - for (cl_uint opencl_platform_devices_idx = 0; opencl_platform_devices_idx < opencl_platform_devices_cnt; opencl_platform_devices_idx++) + if (bridge_ctx->enabled == true) { - const int backend_devices_idx = backend_ctx->backend_device_from_opencl_platform[opencl_platforms_idx][opencl_platform_devices_idx]; + const int unit_count = bridge_ctx->get_unit_count (bridge_ctx->platform_context); - const hc_device_param_t *device_param = backend_ctx->devices_param + backend_devices_idx; - - int device_id = device_param->device_id; - char *device_name = device_param->device_name; - u32 device_processors = device_param->device_processors; - u64 device_maxmem_alloc = device_param->device_maxmem_alloc; - u64 device_global_mem = device_param->device_global_mem; - u64 device_available_mem = device_param->device_available_mem; - - if ((device_param->skipped == false) && (device_param->skipped_warning == false)) + for (cl_uint opencl_platform_devices_idx = 0; opencl_platform_devices_idx < opencl_platform_devices_cnt; opencl_platform_devices_idx++) { - if (strncmp (device_name, "Apple M", 7) == 0) + const int backend_devices_idx = backend_ctx->backend_device_from_opencl_platform[opencl_platforms_idx][opencl_platform_devices_idx]; + + const hc_device_param_t *device_param = backend_ctx->devices_param + backend_devices_idx; + + int device_id = device_param->device_id; + char *device_name = device_param->device_name; + u32 device_processors = device_param->device_processors; + u64 device_maxmem_alloc = device_param->device_maxmem_alloc; + u64 device_global_mem = device_param->device_global_mem; + u64 device_available_mem = device_param->device_available_mem; + + if ((device_param->skipped == false) && (device_param->skipped_warning == false)) { - cl_device_type opencl_device_type = device_param->opencl_device_type; + if (strncmp (device_name, "Apple M", 7) == 0) + { + cl_device_type opencl_device_type = device_param->opencl_device_type; - const char *device_type_desc = ((opencl_device_type & CL_DEVICE_TYPE_CPU) ? "CPU" : ((opencl_device_type & CL_DEVICE_TYPE_GPU) ? "GPU" : "Accelerator")); + const char *device_type_desc = ((opencl_device_type & CL_DEVICE_TYPE_CPU) ? "CPU" : ((opencl_device_type & CL_DEVICE_TYPE_GPU) ? "GPU" : "Accelerator")); - event_log_info (hashcat_ctx, "* Device #%02u: %s, %s, %" PRIu64 "/%" PRIu64 " MB (%" PRIu64 " MB allocatable), %uMCU", - device_id + 1, - device_name, - device_type_desc, - device_available_mem / 1024 / 1024, - device_global_mem / 1024 / 1024, - device_maxmem_alloc / 1024 / 1024, - device_processors); + event_log_info (hashcat_ctx, "* Device #%02u -> #%02u: %s, %s, %" PRIu64 "/%" PRIu64 " MB (%" PRIu64 " MB allocatable), %uMCU", + device_id + 1, unit_count, + device_name, + device_type_desc, + device_available_mem / 1024 / 1024, + device_global_mem / 1024 / 1024, + device_maxmem_alloc / 1024 / 1024, + device_processors); + } + else + { + event_log_info (hashcat_ctx, "* Device #%02u -> #%02u: %s, %" PRIu64 "/%" PRIu64 " MB (%" PRIu64 " MB allocatable), %uMCU", + device_id + 1, unit_count, + device_name, + device_available_mem / 1024 / 1024, + device_global_mem / 1024 / 1024, + device_maxmem_alloc / 1024 / 1024, + device_processors); + } + + break; } else { - event_log_info (hashcat_ctx, "* Device #%02u: %s, %" PRIu64 "/%" PRIu64 " MB (%" PRIu64 " MB allocatable), %uMCU", - device_id + 1, - device_name, - device_available_mem / 1024 / 1024, - device_global_mem / 1024 / 1024, - device_maxmem_alloc / 1024 / 1024, - device_processors); + event_log_info (hashcat_ctx, "* Device #%02u -> #%02u: %s, skipped", + device_id + 1, unit_count, + device_name); } } - else + } + else + { + for (cl_uint opencl_platform_devices_idx = 0; opencl_platform_devices_idx < opencl_platform_devices_cnt; opencl_platform_devices_idx++) { - event_log_info (hashcat_ctx, "* Device #%02u: %s, skipped", - device_id + 1, - device_name); + const int backend_devices_idx = backend_ctx->backend_device_from_opencl_platform[opencl_platforms_idx][opencl_platform_devices_idx]; + + const hc_device_param_t *device_param = backend_ctx->devices_param + backend_devices_idx; + + int device_id = device_param->device_id; + char *device_name = device_param->device_name; + u32 device_processors = device_param->device_processors; + u64 device_maxmem_alloc = device_param->device_maxmem_alloc; + u64 device_global_mem = device_param->device_global_mem; + u64 device_available_mem = device_param->device_available_mem; + + if ((device_param->skipped == false) && (device_param->skipped_warning == false)) + { + if (strncmp (device_name, "Apple M", 7) == 0) + { + cl_device_type opencl_device_type = device_param->opencl_device_type; + + const char *device_type_desc = ((opencl_device_type & CL_DEVICE_TYPE_CPU) ? "CPU" : ((opencl_device_type & CL_DEVICE_TYPE_GPU) ? "GPU" : "Accelerator")); + + event_log_info (hashcat_ctx, "* Device #%02u: %s, %s, %" PRIu64 "/%" PRIu64 " MB (%" PRIu64 " MB allocatable), %uMCU", + device_id + 1, + device_name, + device_type_desc, + device_available_mem / 1024 / 1024, + device_global_mem / 1024 / 1024, + device_maxmem_alloc / 1024 / 1024, + device_processors); + } + else + { + event_log_info (hashcat_ctx, "* Device #%02u: %s, %" PRIu64 "/%" PRIu64 " MB (%" PRIu64 " MB allocatable), %uMCU", + device_id + 1, + device_name, + device_available_mem / 1024 / 1024, + device_global_mem / 1024 / 1024, + device_maxmem_alloc / 1024 / 1024, + device_processors); + } + } + else + { + event_log_info (hashcat_ctx, "* Device #%02u: %s, skipped", + device_id + 1, + device_name); + } } } diff --git a/tunings/Module_08900.hctune b/tunings/Module_08900.hctune index 8aabacba9..08f468424 100644 --- a/tunings/Module_08900.hctune +++ b/tunings/Module_08900.hctune @@ -34,6 +34,6 @@ NVS_510 * 8900 1 12 ALIAS_AMD_RX480 * 8900 1 15 A ALIAS_AMD_Vega64 * 8900 1 30 A ALIAS_AMD_MI100 * 8900 1 79 A -ALIAS_AMD_RX6900XT * 8900 1 123 A +ALIAS_AMD_RX6900XT * 8900 1 57 A ALIAS_AMD_RX7900XTX * 8900 1 91 A ALIAS_AMD_W5700X * 8900 1 4 A diff --git a/tunings/Module_09300.hctune b/tunings/Module_09300.hctune index 0014494fb..7f7f2ba82 100644 --- a/tunings/Module_09300.hctune +++ b/tunings/Module_09300.hctune @@ -31,6 +31,6 @@ GeForce_RTX_3090 * 9300 1 984 ALIAS_AMD_RX480 * 9300 1 232 A ALIAS_AMD_Vega64 * 9300 1 440 A ALIAS_AMD_MI100 * 9300 1 1000 A -ALIAS_AMD_RX6900XT * 9300 1 720 A +ALIAS_AMD_RX6900XT * 9300 1 700 A ALIAS_AMD_RX7900XTX * 9300 1 858 A ALIAS_AMD_W5700X * 9300 1 3 A diff --git a/tunings/Module_15700.hctune b/tunings/Module_15700.hctune index dd67e5f42..11144ed0d 100644 --- a/tunings/Module_15700.hctune +++ b/tunings/Module_15700.hctune @@ -33,6 +33,6 @@ GeForce_RTX_4090 * 15700 1 180 ALIAS_AMD_RX480 * 15700 1 58 A ALIAS_AMD_Vega64 * 15700 1 53 A ALIAS_AMD_MI100 * 15700 1 120 A -ALIAS_AMD_RX6900XT * 15700 1 56 A +ALIAS_AMD_RX6900XT * 15700 1 12 A ALIAS_AMD_RX7900XTX * 15700 1 45 A ALIAS_AMD_W5700X * 15700 1 1 A diff --git a/tunings/Module_22700.hctune b/tunings/Module_22700.hctune index 2409eefff..fe98fa6b4 100644 --- a/tunings/Module_22700.hctune +++ b/tunings/Module_22700.hctune @@ -34,6 +34,6 @@ NVS_510 * 22700 1 12 ALIAS_AMD_RX480 * 22700 1 15 A ALIAS_AMD_Vega64 * 22700 1 30 A ALIAS_AMD_MI100 * 22700 1 79 A -ALIAS_AMD_RX6900XT * 22700 1 123 A +ALIAS_AMD_RX6900XT * 22700 1 57 A ALIAS_AMD_RX7900XTX * 22700 1 186 A ALIAS_AMD_W5700X * 22700 1 4 A diff --git a/tunings/Module_27700.hctune b/tunings/Module_27700.hctune index 4121ae1a4..f9450f336 100644 --- a/tunings/Module_27700.hctune +++ b/tunings/Module_27700.hctune @@ -34,6 +34,6 @@ NVS_510 * 27700 1 12 ALIAS_AMD_RX480 * 27700 1 15 A ALIAS_AMD_Vega64 * 27700 1 30 A ALIAS_AMD_MI100 * 27700 1 79 A -ALIAS_AMD_RX6900XT * 27700 1 123 A +ALIAS_AMD_RX6900XT * 27700 1 57 A ALIAS_AMD_RX7900XTX * 27700 1 171 A ALIAS_AMD_W5700X * 27700 1 4 A diff --git a/tunings/Module_28200.hctune b/tunings/Module_28200.hctune index a01f9a24d..c8f30c07d 100644 --- a/tunings/Module_28200.hctune +++ b/tunings/Module_28200.hctune @@ -34,6 +34,6 @@ NVS_510 * 28200 1 12 ALIAS_AMD_RX480 * 28200 1 15 A ALIAS_AMD_Vega64 * 28200 1 30 A ALIAS_AMD_MI100 * 28200 1 79 A -ALIAS_AMD_RX6900XT * 28200 1 123 A +ALIAS_AMD_RX6900XT * 28200 1 57 A ALIAS_AMD_RX7900XTX * 28200 1 46 A ALIAS_AMD_W5700X * 28200 1 4 A diff --git a/tunings/Module_29800.hctune b/tunings/Module_29800.hctune index 14b5cec94..869a9350b 100644 --- a/tunings/Module_29800.hctune +++ b/tunings/Module_29800.hctune @@ -28,5 +28,5 @@ GeForce_GTX_1080_Ti * 29800 1 20 GeForce_RTX_2080_Ti * 29800 1 40 A GeForce_RTX_3090 * 29800 1 82 A -ALIAS_AMD_RX6900XT * 29800 1 125 A +ALIAS_AMD_RX6900XT * 29800 1 28 A ALIAS_AMD_W5700X * 29800 1 4 A From 2962b9d52e2b982103a37eac28e45e5a74b950e8 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Tue, 3 Jun 2025 07:10:50 +0200 Subject: [PATCH 31/95] - Improved strategy to detect pyenv managed python libraries - Improved documents on python bridge --- ...hashcat-python-plugin-development-guide.md | 8 +- docs/hashcat-python-plugin-quickstart.md | 9 +- src/bridges/bridge_python_generic_hash_mp.c | 255 +++++++++++++---- src/bridges/bridge_python_generic_hash_sp.c | 259 ++++++++++++++---- 4 files changed, 405 insertions(+), 126 deletions(-) diff --git a/docs/hashcat-python-plugin-development-guide.md b/docs/hashcat-python-plugin-development-guide.md index b9a825970..6c4b6035d 100644 --- a/docs/hashcat-python-plugin-development-guide.md +++ b/docs/hashcat-python-plugin-development-guide.md @@ -4,7 +4,7 @@ This document is a comprehensive guide for writing custom hash modes in Python v ## 1. Introduction -The The Assimilation Bridge enables developers to implement complete hash mode logic in languages other than C, most notably Python. Traditionally, customizing Hashcat required writing a module in C and a kernel in OpenCL/CUDA. With the bridge, you can now implement a complete hash mode in Python. +The Assimilation Bridge enables developers to implement complete hash mode logic in languages other than C, most notably Python. Traditionally, customizing Hashcat required writing a module in C and a kernel in OpenCL/CUDA. With the bridge, you can now implement a complete hash mode in Python. The bridge supports two hash modes to run python code: @@ -81,7 +81,7 @@ def term(ctx): hcsp.term(ctx) ``` -This should be used in case you had open files, open networking connection, or similar. We are good citizen! +This should be used in case you had open files, open networking connection, or similar. We are good citizens! Here's our main function `kernel_loop()` where we spend almost all our time: @@ -180,7 +180,7 @@ The `salt` variable is one of the parameters from the calc_hash(): def calc_hash(password: bytes, salt: dict) -> str: ``` -Note that if fully exhaust the Hashcat keyspace, your function has been called X times Y. X is the number of candidates, and Y is all the salts (except if a salt has been cracked). What's important to realize that within your function, you implement hashing logic only for precisely that situation where you have one password and one salt. +Note that if you fully exhaust the Hashcat keyspace, your function has been called X times Y.. X is the number of candidates, and Y is all the salts (except if a salt has been cracked). What's important to realize that within your function, you implement hashing logic only for precisely that situation where you have one password and one salt. ### Merging Salts and Esalts into a Single Object @@ -196,7 +196,7 @@ Initially, salts and esalts are unpacked separately from their respective binary ## 6. Python generic hash mode `-m 72000` and `-m 73000` -The "generic hash" support in hashcat is using python. The main idea behind "generic" is the goal is to write freely ideal for rapid prototyping. +The "generic hash" support in hashcat is using python. The main idea behind "generic" is to write freely. Ideal for rapid prototyping and achieving your goal. The most straight-forward way is to edit the following files directly: diff --git a/docs/hashcat-python-plugin-quickstart.md b/docs/hashcat-python-plugin-quickstart.md index e50f5ea34..dff602f69 100644 --- a/docs/hashcat-python-plugin-quickstart.md +++ b/docs/hashcat-python-plugin-quickstart.md @@ -1,13 +1,14 @@ - # Hashcat Python Plugin Quickstart ## Introduction -This guide walks you through building custom hash modes in **pure Python** using Hashcat v7's Python plugin interface via the new assimilation bridge. +Hashcat v7 introduces a `Python plugin bridge` that allows you to write and integrate custom hash-matching algorithms directly in Python. This plugin system fits into the regular cracking workflow by replacing or extending internal kernel routines. -Whether you're experimenting with a new algorithm, supporting a proprietary format, prototyping a new feature, or simply prefer writing in a high-level language, this plugin interface makes development fast and straightforward. +When enabled, Hashcat uses the plugin’s `calc_hash()` function to compute hash candidates for verification, making it easy to experiment with new or obscure algorithms without modifying core C code or writing OpenCL/CUDA kernels. -No C required. No recompilation. Just write your logic in Python in the `calc_hash()` function. +This guide demonstrates how to quickly customize such an algorithm using pure Python. Whether you're prototyping a new hash mode, supporting a proprietary format, or simply prefer high-level development, Python plugins make the process fast and straightforward. + +No C required. No recompilation. Just write your logic in Python using `calc_hash()`, and you're ready to crack. You can use any Python modules you like. diff --git a/src/bridges/bridge_python_generic_hash_mp.c b/src/bridges/bridge_python_generic_hash_mp.c index 36d61768f..c75563ba5 100644 --- a/src/bridges/bridge_python_generic_hash_mp.c +++ b/src/bridges/bridge_python_generic_hash_mp.c @@ -191,26 +191,197 @@ static char *DEFAULT_SOURCE_FILENAME = "generic_hash_sp"; static char *DEFAULT_SOURCE_FILENAME = "generic_hash_mp"; #endif +#if defined (_WIN) +#define DEVNULL "NUL" +#else +#define DEVNULL "/dev/null" +#endif + +static int suppress_stderr (void) +{ + int null_fd = open (DEVNULL, O_WRONLY); + + if (null_fd < 0) return -1; + + int saved_fd = dup (fileno (stderr)); + + if (saved_fd < 0) + { + close (null_fd); + + return -1; + } + + dup2 (null_fd, fileno (stderr)); + + close (null_fd); + + return saved_fd; +} + +static void restore_stderr (int saved_fd) +{ + if (saved_fd < 0) return; + + dup2 (saved_fd, fileno (stderr)); + + close (saved_fd); +} + +static char *expand_pyenv_libpath (const char *prefix, const int maj, const int min) +{ + char *out = NULL; + + #if defined (_WIN) + const int len = asprintf (&out, "%s/python%d%d.dll", prefix, maj, min); //untested + #elif defined (__MSYS__) + const int len = asprintf (&out, "%s/msys-python%d.%d.dll", prefix, maj, min); //untested could be wrong + #elif defined (__APPLE__) + const int len = asprintf (&out, "%s/lib/libpython%d.%d.dylib", prefix, maj, min); //untested + #elif defined (__CYGWIN__) + const int len = asprintf (&out, "%s/lib/python%d%d.dll", prefix, maj, min); //untested + #else + const int len = asprintf (&out, "%s/lib/libpython%d.%d.so", prefix, maj, min); + #endif + + if (len == -1) return NULL; + + struct stat st; + + if (stat (out, &st) != 0) + { + free (out); + + return NULL; + } + + return out; +} + +static int resolve_pyenv_libpath (char *out_buf, const size_t out_sz) +{ + // prefix + + FILE *fp1 = popen ("pyenv prefix", "r"); + + if (fp1 == NULL) return -1; + + char prefix_path[PATH_MAX]; + + if (fgets (prefix_path, sizeof (prefix_path), fp1) == NULL) + { + pclose (fp1); + + return -1; + } + + pclose (fp1); + + superchop_with_length (prefix_path, strlen (prefix_path)); + + int maj = 0; + int min = 0; + + // local + + FILE *fp2 = popen ("pyenv local", "r"); + + if (fp2 == NULL) return -1; + + if (fscanf (fp2, "%d.%d", &maj, &min) == 2) + { + pclose (fp2); + + char *pyenv_libpath = expand_pyenv_libpath (prefix_path, maj, min); + + if (pyenv_libpath != NULL) + { + strncpy (out_buf, pyenv_libpath, out_sz - 1); + + free (pyenv_libpath); + + return 0; + } + + return -1; + } + + pclose (fp2); + + // global + + FILE *fp3 = popen ("pyenv global", "r"); + + if (fp3 == NULL) return -1; + + if (fscanf (fp3, "%d.%d", &maj, &min) == 2) + { + pclose (fp3); + + char *pyenv_libpath = expand_pyenv_libpath (prefix_path, maj, min); + + if (pyenv_libpath != NULL) + { + strncpy (out_buf, pyenv_libpath, out_sz - 1); + + free (pyenv_libpath); + + return 0; + } + + return -1; + } + + pclose (fp3); + + return -1; +} + static bool init_python (hc_python_lib_t *python) { - char *pythondll_path = NULL; + char pythondll_path[PATH_MAX]; python->lib = NULL; + // let's see if we have pyenv, that will save us a lot of guessing... + + int saved_stderr = suppress_stderr (); + + const int pyenv_rc = resolve_pyenv_libpath (pythondll_path, sizeof (pythondll_path)); + + restore_stderr (saved_stderr); + + if (pyenv_rc == 0) + { + #if defined (_WIN) + python->lib = hc_dlopen (pythondll_path); + #elif defined (__MSYS__) + python->lib = dlopen (pythondll_path, RTLD_NOW | RTLD_GLOBAL); + #elif defined (__APPLE__) + python->lib = dlopen (pythondll_path, RTLD_NOW | RTLD_GLOBAL); + #elif defined (__CYGWIN__) + python->lib = hc_dlopen (pythondll_path); + #else + python->lib = dlopen (pythondll_path, RTLD_NOW | RTLD_GLOBAL); + #endif + } + #define MIN_MAJ 3 #define MAX_MAJ 8 #define MIN_MIN 0 #define MAX_MIN 50 - #if defined (_WIN) - for (int maj = MAX_MAJ; maj >= MIN_MAJ; --maj) { + if (python->lib != NULL) break; + for (int min = MAX_MIN; min >= MIN_MIN; --min) { + #if defined (_WIN) + // first try %LocalAppData% default path - char expandedPath[MAX_PATH]; + char expandedPath[MAX_PATH - 1]; char *libpython_namelocal = NULL; @@ -224,7 +395,7 @@ static bool init_python (hc_python_lib_t *python) if (python->lib != NULL) { - pythondll_path = hcstrdup (expandedPath); + strncpy (pythondll_path, expandedPath, sizeof (pythondll_path) - 1); hcfree (libpython_namelocal); @@ -245,7 +416,9 @@ static bool init_python (hc_python_lib_t *python) if (python->lib != NULL) { - pythondll_path = libpython_namepath; + strncpy (pythondll_path, libpython_namepath, sizeof (pythondll_path) - 1); + + hcfree (libpython_namepath); break; } @@ -254,18 +427,8 @@ static bool init_python (hc_python_lib_t *python) hcfree (libpython_namepath); }; - if (python->lib != NULL) break; - } + #elif defined (__MSYS__) - if (python->lib != NULL) break; - } - - #elif defined (__MSYS__) - - for (int maj = MAX_MAJ; maj >= MIN_MAJ; --maj) - { - for (int min = MAX_MIN; min >= MIN_MIN; --min) - { char *libpython_name = NULL; hc_asprintf (&libpython_name, "msys-python%d.%d.dll", maj, min); @@ -274,7 +437,9 @@ static bool init_python (hc_python_lib_t *python) if (python->lib != NULL) { - pythondll_path = libpython_name; + strncpy (pythondll_path, libpython_name, sizeof (pythondll_path) - 1); + + hcfree (libpython_name); break; } @@ -283,19 +448,8 @@ static bool init_python (hc_python_lib_t *python) hcfree (libpython_name); }; - if (python->lib != NULL) break; - } + #elif defined (__APPLE__) - if (python->lib != NULL) break; - } - - #elif defined (__APPLE__) - - // untested - for (int maj = MAX_MAJ; maj >= MIN_MAJ; --maj) - { - for (int min = MAX_MIN; min >= MIN_MIN; --min) - { char *libpython_name = NULL; hc_asprintf (&libpython_name, "libpython%d.%d.dylib", maj, min); @@ -304,7 +458,9 @@ static bool init_python (hc_python_lib_t *python) if (python->lib != NULL) { - pythondll_path = libpython_name; + strncpy (pythondll_path, libpython_name, sizeof (pythondll_path) - 1); + + hcfree (libpython_name); break; } @@ -313,19 +469,8 @@ static bool init_python (hc_python_lib_t *python) hcfree (libpython_name); }; - if (python->lib != NULL) break; - } + #elif defined (__CYGWIN__) - if (python->lib != NULL) break; - } - - #elif defined (__CYGWIN__) - - // untested - for (int maj = MAX_MAJ; maj >= MIN_MAJ; --maj) - { - for (int min = MAX_MIN; min >= MIN_MIN; --min) - { char *libpython_name = NULL; hc_asprintf (&libpython_name, "python%d%d.dll", maj, min); @@ -334,7 +479,9 @@ static bool init_python (hc_python_lib_t *python) if (python->lib != NULL) { - pythondll_path = libpython_name; + strncpy (pythondll_path, libpython_name, sizeof (pythondll_path) - 1); + + hcfree (libpython_name); break; } @@ -343,18 +490,8 @@ static bool init_python (hc_python_lib_t *python) hcfree (libpython_name); }; - if (python->lib != NULL) break; - } + #else - if (python->lib != NULL) break; - } - - #else - - for (int maj = MAX_MAJ; maj >= MIN_MAJ; --maj) - { - for (int min = MAX_MIN; min >= MIN_MIN; --min) - { char *libpython_name = NULL; hc_asprintf (&libpython_name, "libpython%d.%d.so", maj, min); @@ -363,7 +500,9 @@ static bool init_python (hc_python_lib_t *python) if (python->lib != NULL) { - pythondll_path = libpython_name; + strncpy (pythondll_path, libpython_name, sizeof (pythondll_path) - 1); + + hcfree (libpython_name); break; } @@ -372,14 +511,14 @@ static bool init_python (hc_python_lib_t *python) hcfree (libpython_name); }; + #endif + if (python->lib != NULL) break; } if (python->lib != NULL) break; } - #endif - if (python->lib == NULL) { fprintf (stderr, "Awww, unable to find Python shared library.\n"); diff --git a/src/bridges/bridge_python_generic_hash_sp.c b/src/bridges/bridge_python_generic_hash_sp.c index 3d2a3fdcd..87c51d32c 100644 --- a/src/bridges/bridge_python_generic_hash_sp.c +++ b/src/bridges/bridge_python_generic_hash_sp.c @@ -187,29 +187,200 @@ typedef struct static char *DEFAULT_SOURCE_FILENAME = "generic_hash_sp"; +#if defined (_WIN) +#define DEVNULL "NUL" +#else +#define DEVNULL "/dev/null" +#endif + +static int suppress_stderr (void) +{ + int null_fd = open (DEVNULL, O_WRONLY); + + if (null_fd < 0) return -1; + + int saved_fd = dup (fileno (stderr)); + + if (saved_fd < 0) + { + close (null_fd); + + return -1; + } + + dup2 (null_fd, fileno (stderr)); + + close (null_fd); + + return saved_fd; +} + +static void restore_stderr (int saved_fd) +{ + if (saved_fd < 0) return; + + dup2 (saved_fd, fileno (stderr)); + + close (saved_fd); +} + +static char *expand_pyenv_libpath (const char *prefix, const int maj, const int min) +{ + char *out = NULL; + + #if defined (_WIN) + const int len = asprintf (&out, "%s/python%d%dt.dll", prefix, maj, min); //untested + #elif defined (__MSYS__) + const int len = asprintf (&out, "%s/msys-python%d.%dt.dll", prefix, maj, min); //untested could be wrong + #elif defined (__APPLE__) + const int len = asprintf (&out, "%s/lib/libpython%d.%dt.dylib", prefix, maj, min); //untested + #elif defined (__CYGWIN__) + const int len = asprintf (&out, "%s/lib/python%d%dt.dll", prefix, maj, min); //untested + #else + const int len = asprintf (&out, "%s/lib/libpython%d.%dt.so", prefix, maj, min); + #endif + + if (len == -1) return NULL; + + struct stat st; + + if (stat (out, &st) != 0) + { + free (out); + + return NULL; + } + + return out; +} + +static int resolve_pyenv_libpath (char *out_buf, const size_t out_sz) +{ + // prefix + + FILE *fp1 = popen ("pyenv prefix", "r"); + + if (fp1 == NULL) return -1; + + char prefix_path[PATH_MAX]; + + if (fgets (prefix_path, sizeof (prefix_path), fp1) == NULL) + { + pclose (fp1); + + return -1; + } + + pclose (fp1); + + superchop_with_length (prefix_path, strlen (prefix_path)); + + int maj = 0; + int min = 0; + + // local + + FILE *fp2 = popen ("pyenv local", "r"); + + if (fp2 == NULL) return -1; + + if (fscanf (fp2, "%d.%d", &maj, &min) == 2) + { + pclose (fp2); + + char *pyenv_libpath = expand_pyenv_libpath (prefix_path, maj, min); + + if (pyenv_libpath != NULL) + { + strncpy (out_buf, pyenv_libpath, out_sz - 1); + + free (pyenv_libpath); + + return 0; + } + + return -1; + } + + pclose (fp2); + + // global + + FILE *fp3 = popen ("pyenv global", "r"); + + if (fp3 == NULL) return -1; + + if (fscanf (fp3, "%d.%d", &maj, &min) == 2) + { + pclose (fp3); + + char *pyenv_libpath = expand_pyenv_libpath (prefix_path, maj, min); + + if (pyenv_libpath != NULL) + { + strncpy (out_buf, pyenv_libpath, out_sz - 1); + + free (pyenv_libpath); + + return 0; + } + + return -1; + } + + pclose (fp3); + + return -1; +} + static bool init_python (hc_python_lib_t *python) { - char *pythondll_path = NULL; + char pythondll_path[PATH_MAX]; python->lib = NULL; if (getenv ("PYTHON_GIL") == NULL) putenv ((char *) "PYTHON_GIL=0"); + // let's see if we have pyenv, that will save us a lot of guessing... + + int saved_stderr = suppress_stderr (); + + const int pyenv_rc = resolve_pyenv_libpath (pythondll_path, sizeof (pythondll_path)); + + restore_stderr (saved_stderr); + + if (pyenv_rc == 0) + { + #if defined (_WIN) + python->lib = hc_dlopen (pythondll_path); + #elif defined (__MSYS__) + python->lib = dlopen (pythondll_path, RTLD_NOW | RTLD_GLOBAL); + #elif defined (__APPLE__) + python->lib = dlopen (pythondll_path, RTLD_NOW | RTLD_GLOBAL); + #elif defined (__CYGWIN__) + python->lib = hc_dlopen (pythondll_path); + #else + python->lib = dlopen (pythondll_path, RTLD_NOW | RTLD_GLOBAL); + #endif + } + #define MIN_MAJ 3 #define MAX_MAJ 8 #define MIN_MIN 0 #define MAX_MIN 50 - #if defined (_WIN) - for (int maj = MAX_MAJ; maj >= MIN_MAJ; --maj) { + if (python->lib != NULL) break; + for (int min = MAX_MIN; min >= MIN_MIN; --min) { + #if defined (_WIN) + // first try %LocalAppData% default path - char expandedPath[MAX_PATH]; + char expandedPath[MAX_PATH - 1]; char *libpython_namelocal = NULL; @@ -223,7 +394,7 @@ static bool init_python (hc_python_lib_t *python) if (python->lib != NULL) { - pythondll_path = hcstrdup (expandedPath); + strncpy (pythondll_path, expandedPath, sizeof (pythondll_path) - 1); hcfree (libpython_namelocal); @@ -244,7 +415,9 @@ static bool init_python (hc_python_lib_t *python) if (python->lib != NULL) { - pythondll_path = libpython_namepath; + strncpy (pythondll_path, libpython_namepath, sizeof (pythondll_path) - 1); + + hcfree (libpython_namepath); break; } @@ -253,27 +426,19 @@ static bool init_python (hc_python_lib_t *python) hcfree (libpython_namepath); }; - if (python->lib != NULL) break; - } + #elif defined (__MSYS__) - if (python->lib != NULL) break; - } - - #elif defined (__MSYS__) - - for (int maj = MAX_MAJ; maj >= MIN_MAJ; --maj) - { - for (int min = MAX_MIN; min >= MIN_MIN; --min) - { char *libpython_name = NULL; - hc_asprintf (&libpython_name, "msys-python%d.%d.dll", maj, min); + hc_asprintf (&libpython_name, "msys-python%d.%dt.dll", maj, min); python->lib = dlopen (libpython_name, RTLD_NOW | RTLD_GLOBAL); if (python->lib != NULL) { - pythondll_path = libpython_name; + strncpy (pythondll_path, libpython_name, sizeof (pythondll_path) - 1); + + hcfree (libpython_name); break; } @@ -282,19 +447,8 @@ static bool init_python (hc_python_lib_t *python) hcfree (libpython_name); }; - if (python->lib != NULL) break; - } + #elif defined (__APPLE__) - if (python->lib != NULL) break; - } - - #elif defined (__APPLE__) - - // untested - for (int maj = MAX_MAJ; maj >= MIN_MAJ; --maj) - { - for (int min = MAX_MIN; min >= MIN_MIN; --min) - { char *libpython_name = NULL; hc_asprintf (&libpython_name, "libpython%d.%dt.dylib", maj, min); @@ -303,7 +457,9 @@ static bool init_python (hc_python_lib_t *python) if (python->lib != NULL) { - pythondll_path = libpython_name; + strncpy (pythondll_path, libpython_name, sizeof (pythondll_path) - 1); + + hcfree (libpython_name); break; } @@ -312,19 +468,8 @@ static bool init_python (hc_python_lib_t *python) hcfree (libpython_name); }; - if (python->lib != NULL) break; - } + #elif defined (__CYGWIN__) - if (python->lib != NULL) break; - } - - #elif defined (__CYGWIN__) - - // untested - for (int maj = MAX_MAJ; maj >= MIN_MAJ; --maj) - { - for (int min = MAX_MIN; min >= MIN_MIN; --min) - { char *libpython_name = NULL; hc_asprintf (&libpython_name, "python%d%dt.dll", maj, min); @@ -333,7 +478,9 @@ static bool init_python (hc_python_lib_t *python) if (python->lib != NULL) { - pythondll_path = libpython_name; + strncpy (pythondll_path, libpython_name, sizeof (pythondll_path) - 1); + + hcfree (libpython_name); break; } @@ -342,18 +489,8 @@ static bool init_python (hc_python_lib_t *python) hcfree (libpython_name); }; - if (python->lib != NULL) break; - } + #else - if (python->lib != NULL) break; - } - - #else - - for (int maj = MAX_MAJ; maj >= MIN_MAJ; --maj) - { - for (int min = MAX_MIN; min >= MIN_MIN; --min) - { char *libpython_name = NULL; hc_asprintf (&libpython_name, "libpython%d.%dt.so", maj, min); @@ -362,7 +499,9 @@ static bool init_python (hc_python_lib_t *python) if (python->lib != NULL) { - pythondll_path = libpython_name; + strncpy (pythondll_path, libpython_name, sizeof (pythondll_path) - 1); + + hcfree (libpython_name); break; } @@ -371,14 +510,14 @@ static bool init_python (hc_python_lib_t *python) hcfree (libpython_name); }; + #endif + if (python->lib != NULL) break; } if (python->lib != NULL) break; } - #endif - if (python->lib == NULL) { fprintf (stderr, "Unable to find suitable Python library for -m 72000.\n\n"); @@ -403,7 +542,7 @@ static bool init_python (hc_python_lib_t *python) fprintf (stderr, " It seems to be a lot slower, and relevant modules such as cffi are incompatibile.\n"); fprintf (stderr, " Since your are on Linux/MacOS we highly recommend to stick to multiprocessing module.\n"); fprintf (stderr, " Maybe 'free-threaded' mode will become more mature in the future.\n"); - fprintf (stderr, " For now, we high recommend to stick to -m 73000 instead.\n"); + fprintf (stderr, " For now, we high recommend to stick to -m 73000 instead.\n\n"); #endif #define HC_LOAD_FUNC_PYTHON(ptr,name,pythonname,type,libname,noerr) \ From 3d4901a60c662cd3be85ff9f6354b6772f75088c Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Wed, 4 Jun 2025 10:09:44 +0200 Subject: [PATCH 32/95] - Add CPU SIMD detection at runtime, relevant for bridge plugins - Update BUILD_WSL.md document, add preparation for python bridge --- BUILD_WSL.md | 13 +- docker/BinaryPackage.arch | 4 +- docker/BinaryPackage.ubuntu20 | 4 +- include/cpu_features.h | 21 +++ src/bridges/bridge_argon2id_reference.c | 8 +- src/bridges/bridge_argon2id_reference.mk | 8 +- src/bridges/bridge_python_generic_hash_mp.c | 7 + src/bridges/bridge_python_generic_hash_mp.mk | 17 +- src/bridges/bridge_python_generic_hash_sp.c | 7 + src/bridges/bridge_python_generic_hash_sp.mk | 19 +- src/bridges/bridge_scrypt_jane.c | 8 +- src/bridges/bridge_scrypt_jane.mk | 8 +- src/bridges/bridge_scrypt_yescrypt.c | 8 +- src/bridges/bridge_scrypt_yescrypt.mk | 8 +- src/cpu_features.c | 181 +++++++++++++++++++ 15 files changed, 274 insertions(+), 47 deletions(-) create mode 100644 include/cpu_features.h create mode 100644 src/cpu_features.c diff --git a/BUILD_WSL.md b/BUILD_WSL.md index 8e0ff1fbc..9fc136183 100644 --- a/BUILD_WSL.md +++ b/BUILD_WSL.md @@ -1,24 +1,27 @@ -# Compiling hashcat for Windows with Windows Subsystem for Linux. +# Compiling hashcat for Windows with Windows Subsystem for Linux 2. -Tested on Windows 10 x64, should also work to build hashcat for Windows on Linux. +Tested on Windows 11 x64, should also work to build hashcat for Windows on Linux. -I had it tested with WSL2 using Ubuntu_2004.2020.424.0_x64.appx. +I had it tested with WSL2 using "Ubuntu", which at the time of writing is Ubuntu 24.04 Make sure to have the system upgraded after install (otherwise it will fail to find the gcc-mingw-w64-x86-64 package). ### Installation ### -Enable WSL. +Enable WSL2. Press the win + r key on your keyboard simultaneously and in the "Run" popup window type bash and make sure to install additional dependencies necessary for hashcat compilation ```bash -sudo apt install gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 make git +sudo apt install gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 make git zstd python3-dev git clone https://github.com/hashcat/hashcat git clone https://github.com/win-iconv/win-iconv cd win-iconv/ cmake -D WIN_ICONV_BUILD_EXECUTABLE=OFF -D CMAKE_INSTALL_PREFIX=/opt/win-iconv-64 -D CMAKE_CXX_COMPILER=$(which x86_64-w64-mingw32-g++) -D CMAKE_C_COMPILER=$(which x86_64-w64-mingw32-gcc) sudo make install cd ../ +wget https://repo.msys2.org/mingw/mingw64/mingw-w64-x86_64-python-3.12.10-1-any.pkg.tar.zst +sudo mkdir /opt/win-python +sudo tar --zstd -xf mingw-w64-x86_64-python-3.12.10-1-any.pkg.tar.zst -C /opt/win-python ``` ### Building ### diff --git a/docker/BinaryPackage.arch b/docker/BinaryPackage.arch index 40d736557..e6ddbd4a1 100644 --- a/docker/BinaryPackage.arch +++ b/docker/BinaryPackage.arch @@ -43,8 +43,8 @@ RUN cmake \ make -j$(nproc) && make install # Download and extract MSYS2 Python headers (still 3.12) -RUN mkdir /opt/cpython-mingw -WORKDIR /opt/cpython-mingw +RUN mkdir /opt/win-python +WORKDIR /opt/win-python RUN wget https://repo.msys2.org/mingw/mingw64/mingw-w64-x86_64-python-3.12.10-1-any.pkg.tar.zst && \ zstd -d mingw-w64-x86_64-python-3.12.10-1-any.pkg.tar.zst && \ tar -xf mingw-w64-x86_64-python-3.12.10-1-any.pkg.tar diff --git a/docker/BinaryPackage.ubuntu20 b/docker/BinaryPackage.ubuntu20 index 872ec5b90..c23d5832d 100644 --- a/docker/BinaryPackage.ubuntu20 +++ b/docker/BinaryPackage.ubuntu20 @@ -79,8 +79,8 @@ ENV PATH="/opt/linux-python/bin:$PATH" WORKDIR /root -RUN mkdir /opt/cpython-mingw -WORKDIR /opt/cpython-mingw +RUN mkdir /opt/win-python +WORKDIR /opt/win-python RUN wget https://repo.msys2.org/mingw/mingw64/mingw-w64-x86_64-python-3.12.10-1-any.pkg.tar.zst RUN unzstd mingw-w64-x86_64-python-3.12.10-1-any.pkg.tar.zst RUN tar -xf mingw-w64-x86_64-python-3.12.10-1-any.pkg.tar diff --git a/include/cpu_features.h b/include/cpu_features.h new file mode 100644 index 000000000..e7630fc80 --- /dev/null +++ b/include/cpu_features.h @@ -0,0 +1,21 @@ +/** + * Author......: See docs/credits.txt + * License.....: MIT + */ + +#ifndef HC_CPU_FEATURES_H +#define HC_CPU_FEATURES_H + +#include +#include + +// SIMD detection + +int cpu_supports_sse2 (); +int cpu_supports_ssse3 (); +int cpu_supports_xop (); +int cpu_supports_avx2 (); +int cpu_supports_avx512f (); +int cpu_chipset_test (); + +#endif // HC_CPU_FEATURES_H diff --git a/src/bridges/bridge_argon2id_reference.c b/src/bridges/bridge_argon2id_reference.c index 5483950c9..06c9eda22 100644 --- a/src/bridges/bridge_argon2id_reference.c +++ b/src/bridges/bridge_argon2id_reference.c @@ -7,6 +7,8 @@ #include "types.h" #include "bridges.h" #include "memory.h" +#include "shared.h" +#include "cpu_features.h" // argon2 reference @@ -133,7 +135,11 @@ static void units_term (bridge_argon2id_t *bridge_argon2id) void *platform_init () { - // bridge_argon2id_t will be our platform context + // Verify CPU features + + if (cpu_chipset_test () == -1) return NULL; + + // Allocate platform context bridge_argon2id_t *bridge_argon2id = (bridge_argon2id_t *) hcmalloc (sizeof (bridge_argon2id_t)); diff --git a/src/bridges/bridge_argon2id_reference.mk b/src/bridges/bridge_argon2id_reference.mk index d55c5bc07..d02eed8ff 100644 --- a/src/bridges/bridge_argon2id_reference.mk +++ b/src/bridges/bridge_argon2id_reference.mk @@ -15,16 +15,16 @@ endif endif ifeq ($(BUILD_MODE),cross) -bridges/bridge_argon2id_reference.so: src/bridges/bridge_argon2id_reference.c obj/combined.LINUX.a +bridges/bridge_argon2id_reference.so: src/bridges/bridge_argon2id_reference.c src/cpu_features.c obj/combined.LINUX.a $(CC_LINUX) $(CCFLAGS) $(CFLAGS_CROSS_LINUX) $^ -o $@ $(LFLAGS_CROSS_LINUX) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(ARGON2_REFERENCE_CFLAGS) -bridges/bridge_argon2id_reference.dll: src/bridges/bridge_argon2id_reference.c obj/combined.WIN.a +bridges/bridge_argon2id_reference.dll: src/bridges/bridge_argon2id_reference.c src/cpu_features.c obj/combined.WIN.a $(CC_WIN) $(CCFLAGS) $(CFLAGS_CROSS_WIN) $^ -o $@ $(LFLAGS_CROSS_WIN) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(ARGON2_REFERENCE_CFLAGS) else ifeq ($(SHARED),1) -bridges/bridge_argon2id_reference.$(BRIDGE_SUFFIX): src/bridges/bridge_argon2id_reference.c $(HASHCAT_LIBRARY) +bridges/bridge_argon2id_reference.$(BRIDGE_SUFFIX): src/bridges/bridge_argon2id_reference.c src/cpu_features.c $(HASHCAT_LIBRARY) $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(ARGON2_REFERENCE_CFLAGS) else -bridges/bridge_argon2id_reference.$(BRIDGE_SUFFIX): src/bridges/bridge_argon2id_reference.c obj/combined.NATIVE.a +bridges/bridge_argon2id_reference.$(BRIDGE_SUFFIX): src/bridges/bridge_argon2id_reference.c src/cpu_features.c obj/combined.NATIVE.a $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(ARGON2_REFERENCE_CFLAGS) endif endif diff --git a/src/bridges/bridge_python_generic_hash_mp.c b/src/bridges/bridge_python_generic_hash_mp.c index c75563ba5..9bffc87fe 100644 --- a/src/bridges/bridge_python_generic_hash_mp.c +++ b/src/bridges/bridge_python_generic_hash_mp.c @@ -8,6 +8,7 @@ #include "bridges.h" #include "memory.h" #include "shared.h" +#include "cpu_features.h" #include "dynloader.h" #if defined (_WIN) @@ -679,6 +680,12 @@ static void units_term (python_interpreter_t *python_interpreter) void *platform_init (user_options_t *user_options) { + // Verify CPU features + + if (cpu_chipset_test () == -1) return NULL; + + // Allocate platform context + python_interpreter_t *python_interpreter = (python_interpreter_t *) hcmalloc (sizeof (python_interpreter_t)); hc_python_lib_t *python = (hc_python_lib_t *) hcmalloc (sizeof (hc_python_lib_t)); diff --git a/src/bridges/bridge_python_generic_hash_mp.mk b/src/bridges/bridge_python_generic_hash_mp.mk index 075c45640..e69931382 100644 --- a/src/bridges/bridge_python_generic_hash_mp.mk +++ b/src/bridges/bridge_python_generic_hash_mp.mk @@ -1,24 +1,19 @@ PYTHON_CONFIG_FLAGS_LINUX := `python3-config --includes` - -# Experimental support for for Windows: -# $ mkdir /opt/cpython-mingw -# $ cd /opt/cpython-mingw -# $ wget https://repo.msys2.org/mingw/mingw64/mingw-w64-x86_64-python-3.12.10-1-any.pkg.tar.zst -# $ tar --zstd -xf mingw-w64-x86_64-python-3.12.10-1-any.pkg.tar.zst -PYTHON_CONFIG_FLAGS_WIN := -I/opt/cpython-mingw/mingw64/include/python3.12 +# See BUILD_WSL.md to prepare /opt/win-python +PYTHON_CONFIG_FLAGS_WIN := -I/opt/win-python/mingw64/include/python3.12 ifeq ($(BUILD_MODE),cross) -bridges/bridge_python_generic_hash_mp.so: src/bridges/bridge_python_generic_hash_mp.c obj/combined.LINUX.a +bridges/bridge_python_generic_hash_mp.so: src/bridges/bridge_python_generic_hash_mp.c src/cpu_features.c obj/combined.LINUX.a $(CC_LINUX) $(CCFLAGS) $(CFLAGS_CROSS_LINUX) $^ -o $@ $(LFLAGS_CROSS_LINUX) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CONFIG_FLAGS_LINUX) -bridges/bridge_python_generic_hash_mp.dll: src/bridges/bridge_python_generic_hash_mp.c obj/combined.WIN.a +bridges/bridge_python_generic_hash_mp.dll: src/bridges/bridge_python_generic_hash_mp.c src/cpu_features.c obj/combined.WIN.a $(CC_WIN) $(CCFLAGS) $(CFLAGS_CROSS_WIN) $^ -o $@ $(LFLAGS_CROSS_WIN) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CONFIG_FLAGS_WIN) else ifeq ($(SHARED),1) -bridges/bridge_python_generic_hash_mp.$(BRIDGE_SUFFIX): src/bridges/bridge_python_generic_hash_mp.c $(HASHCAT_LIBRARY) +bridges/bridge_python_generic_hash_mp.$(BRIDGE_SUFFIX): src/bridges/bridge_python_generic_hash_mp.c src/cpu_features.c $(HASHCAT_LIBRARY) $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CONFIG_FLAGS_LINUX) $(PYTHON_CONFIG_FLAGS_WIN) else -bridges/bridge_python_generic_hash_mp.$(BRIDGE_SUFFIX): src/bridges/bridge_python_generic_hash_mp.c obj/combined.NATIVE.a +bridges/bridge_python_generic_hash_mp.$(BRIDGE_SUFFIX): src/bridges/bridge_python_generic_hash_mp.c src/cpu_features.c obj/combined.NATIVE.a $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CONFIG_FLAGS_LINUX) $(PYTHON_CONFIG_FLAGS_WIN) endif endif diff --git a/src/bridges/bridge_python_generic_hash_sp.c b/src/bridges/bridge_python_generic_hash_sp.c index 87c51d32c..5bcd930c4 100644 --- a/src/bridges/bridge_python_generic_hash_sp.c +++ b/src/bridges/bridge_python_generic_hash_sp.c @@ -8,6 +8,7 @@ #include "bridges.h" #include "memory.h" #include "shared.h" +#include "cpu_features.h" #include "dynloader.h" #if defined (_WIN) @@ -687,6 +688,12 @@ static void units_term (python_interpreter_t *python_interpreter) void *platform_init (user_options_t *user_options) { + // Verify CPU features + + if (cpu_chipset_test () == -1) return NULL; + + // Allocate platform context + python_interpreter_t *python_interpreter = (python_interpreter_t *) hcmalloc (sizeof (python_interpreter_t)); hc_python_lib_t *python = (hc_python_lib_t *) hcmalloc (sizeof (hc_python_lib_t)); diff --git a/src/bridges/bridge_python_generic_hash_sp.mk b/src/bridges/bridge_python_generic_hash_sp.mk index c98c57eab..52662448c 100644 --- a/src/bridges/bridge_python_generic_hash_sp.mk +++ b/src/bridges/bridge_python_generic_hash_sp.mk @@ -1,24 +1,19 @@ PYTHON_CONFIG_FLAGS_LINUX := `python3-config --includes` - -# Experimental support for for Windows: -# $ mkdir /opt/cpython-mingw -# $ cd /opt/cpython-mingw -# $ wget https://repo.msys2.org/mingw/mingw64/mingw-w64-x86_64-python-3.12.10-1-any.pkg.tar.zst -# $ tar --zstd -xf mingw-w64-x86_64-python-3.12.10-1-any.pkg.tar.zst -PYTHON_CONFIG_FLAGS_WIN := -I/opt/cpython-mingw/mingw64/include/python3.12 +# See BUILD_WSL.md to prepare /opt/win-python +PYTHON_CONFIG_FLAGS_WIN := -I/opt/win-python/mingw64/include/python3.12 ifeq ($(BUILD_MODE),cross) -bridges/bridge_python_generic_hash_sp.so: src/bridges/bridge_python_generic_hash_sp.c obj/combined.LINUX.a +bridges/bridge_python_generic_hash_sp.so: src/bridges/bridge_python_generic_hash_sp.c src/cpu_features.c obj/combined.LINUX.a $(CC_LINUX) $(CCFLAGS) $(CFLAGS_CROSS_LINUX) $^ -o $@ $(LFLAGS_CROSS_LINUX) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CONFIG_FLAGS_LINUX) -bridges/bridge_python_generic_hash_sp.dll: src/bridges/bridge_python_generic_hash_sp.c obj/combined.WIN.a +bridges/bridge_python_generic_hash_sp.dll: src/bridges/bridge_python_generic_hash_sp.c src/cpu_features.c obj/combined.WIN.a $(CC_WIN) $(CCFLAGS) $(CFLAGS_CROSS_WIN) $^ -o $@ $(LFLAGS_CROSS_WIN) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CONFIG_FLAGS_WIN) else ifeq ($(SHARED),1) -bridges/bridge_python_generic_hash_sp.$(BRIDGE_SUFFIX): src/bridges/bridge_python_generic_hash_sp.c $(HASHCAT_LIBRARY) +bridges/bridge_python_generic_hash_sp.$(BRIDGE_SUFFIX): src/bridges/bridge_python_generic_hash_sp.c src/cpu_features.c $(HASHCAT_LIBRARY) $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CONFIG_FLAGS_LINUX) $(PYTHON_CONFIG_FLAGS_WIN) else -bridges/bridge_python_generic_hash_sp.$(BRIDGE_SUFFIX): src/bridges/bridge_python_generic_hash_sp.c obj/combined.NATIVE.a +bridges/bridge_python_generic_hash_sp.$(BRIDGE_SUFFIX): src/bridges/bridge_python_generic_hash_sp.c src/cpu_features.c obj/combined.NATIVE.a $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CONFIG_FLAGS_LINUX) $(PYTHON_CONFIG_FLAGS_WIN) endif endif @@ -32,6 +27,6 @@ bridges/bridge_python_generic_hash_sp.so: @echo "" @echo "WARNING: Skipping freethreaded plugin 70200: Python 3.12+ headers not found." @echo " Please read 'docs/hashcat-python-plugin-requirements.md'." - @echo "" + @echo "" endif endif diff --git a/src/bridges/bridge_scrypt_jane.c b/src/bridges/bridge_scrypt_jane.c index 39132171e..f6df8fd12 100644 --- a/src/bridges/bridge_scrypt_jane.c +++ b/src/bridges/bridge_scrypt_jane.c @@ -7,6 +7,8 @@ #include "types.h" #include "bridges.h" #include "memory.h" +#include "shared.h" +#include "cpu_features.h" #include "code/scrypt-jane-portable.h" #include "code/scrypt-jane-hash.h" @@ -106,7 +108,11 @@ static void units_term (bridge_scrypt_jane_t *bridge_scrypt_jane) void *platform_init () { - // bridge_scrypt_jane_t will be our platform context + // Verify CPU features + + if (cpu_chipset_test () == -1) return NULL; + + // Allocate platform context bridge_scrypt_jane_t *bridge_scrypt_jane = (bridge_scrypt_jane_t *) hcmalloc (sizeof (bridge_scrypt_jane_t)); diff --git a/src/bridges/bridge_scrypt_jane.mk b/src/bridges/bridge_scrypt_jane.mk index ba1fc834c..9aa789fc3 100644 --- a/src/bridges/bridge_scrypt_jane.mk +++ b/src/bridges/bridge_scrypt_jane.mk @@ -15,16 +15,16 @@ endif endif ifeq ($(BUILD_MODE),cross) -bridges/bridge_scrypt_jane.so: src/bridges/bridge_scrypt_jane.c obj/combined.LINUX.a +bridges/bridge_scrypt_jane.so: src/bridges/bridge_scrypt_jane.c src/cpu_features.c obj/combined.LINUX.a $(CC_LINUX) $(CCFLAGS) $(CFLAGS_CROSS_LINUX) $^ -o $@ $(LFLAGS_CROSS_LINUX) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(SCRYPT_JANE_CFLAGS) -bridges/bridge_scrypt_jane.dll: src/bridges/bridge_scrypt_jane.c obj/combined.WIN.a +bridges/bridge_scrypt_jane.dll: src/bridges/bridge_scrypt_jane.c src/cpu_features.c obj/combined.WIN.a $(CC_WIN) $(CCFLAGS) $(CFLAGS_CROSS_WIN) $^ -o $@ $(LFLAGS_CROSS_WIN) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(SCRYPT_JANE_CFLAGS) else ifeq ($(SHARED),1) -bridges/bridge_scrypt_jane.$(BRIDGE_SUFFIX): src/bridges/bridge_scrypt_jane.c $(HASHCAT_LIBRARY) +bridges/bridge_scrypt_jane.$(BRIDGE_SUFFIX): src/bridges/bridge_scrypt_jane.c src/cpu_features.c $(HASHCAT_LIBRARY) $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(SCRYPT_JANE_CFLAGS) else -bridges/bridge_scrypt_jane.$(BRIDGE_SUFFIX): src/bridges/bridge_scrypt_jane.c obj/combined.NATIVE.a +bridges/bridge_scrypt_jane.$(BRIDGE_SUFFIX): src/bridges/bridge_scrypt_jane.c src/cpu_features.c obj/combined.NATIVE.a $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(SCRYPT_JANE_CFLAGS) endif endif diff --git a/src/bridges/bridge_scrypt_yescrypt.c b/src/bridges/bridge_scrypt_yescrypt.c index 0096c2f3b..4e709153f 100644 --- a/src/bridges/bridge_scrypt_yescrypt.c +++ b/src/bridges/bridge_scrypt_yescrypt.c @@ -7,6 +7,8 @@ #include "types.h" #include "bridges.h" #include "memory.h" +#include "shared.h" +#include "cpu_features.h" #include "yescrypt.h" @@ -108,7 +110,11 @@ static void units_term (bridge_scrypt_yescrypt_t *bridge_scrypt_yescrypt) void *platform_init () { - // bridge_scrypt_yescrypt_t will be our platform context + // Verify CPU features + + if (cpu_chipset_test () == -1) return NULL; + + // Allocate platform context bridge_scrypt_yescrypt_t *bridge_scrypt_yescrypt = (bridge_scrypt_yescrypt_t *) hcmalloc (sizeof (bridge_scrypt_yescrypt_t)); diff --git a/src/bridges/bridge_scrypt_yescrypt.mk b/src/bridges/bridge_scrypt_yescrypt.mk index 715bbb950..046450a33 100644 --- a/src/bridges/bridge_scrypt_yescrypt.mk +++ b/src/bridges/bridge_scrypt_yescrypt.mk @@ -15,16 +15,16 @@ endif endif ifeq ($(BUILD_MODE),cross) -bridges/bridge_scrypt_yescrypt.so: src/bridges/bridge_scrypt_yescrypt.c $(SCRYPT_YESCRYPT)/yescrypt-opt.c $(SCRYPT_YESCRYPT)/sha256.c obj/combined.LINUX.a +bridges/bridge_scrypt_yescrypt.so: src/bridges/bridge_scrypt_yescrypt.c src/cpu_features.c $(SCRYPT_YESCRYPT)/yescrypt-opt.c $(SCRYPT_YESCRYPT)/sha256.c obj/combined.LINUX.a $(CC_LINUX) $(CCFLAGS) $(CFLAGS_CROSS_LINUX) $^ -o $@ $(LFLAGS_CROSS_LINUX) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(SCRYPT_YESCRYPT_CFLAGS) -bridges/bridge_scrypt_yescrypt.dll: src/bridges/bridge_scrypt_yescrypt.c $(SCRYPT_YESCRYPT)/yescrypt-opt.c $(SCRYPT_YESCRYPT)/sha256.c obj/combined.WIN.a +bridges/bridge_scrypt_yescrypt.dll: src/bridges/bridge_scrypt_yescrypt.c src/cpu_features.c $(SCRYPT_YESCRYPT)/yescrypt-opt.c $(SCRYPT_YESCRYPT)/sha256.c obj/combined.WIN.a $(CC_WIN) $(CCFLAGS) $(CFLAGS_CROSS_WIN) $^ -o $@ $(LFLAGS_CROSS_WIN) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(SCRYPT_YESCRYPT_CFLAGS) else ifeq ($(SHARED),1) -bridges/bridge_scrypt_yescrypt.$(BRIDGE_SUFFIX): src/bridges/bridge_scrypt_yescrypt.c $(SCRYPT_YESCRYPT)/yescrypt-opt.c $(SCRYPT_YESCRYPT)/sha256.c $(HASHCAT_LIBRARY) +bridges/bridge_scrypt_yescrypt.$(BRIDGE_SUFFIX): src/bridges/bridge_scrypt_yescrypt.c src/cpu_features.c $(SCRYPT_YESCRYPT)/yescrypt-opt.c $(SCRYPT_YESCRYPT)/sha256.c $(HASHCAT_LIBRARY) $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(SCRYPT_YESCRYPT_CFLAGS) else -bridges/bridge_scrypt_yescrypt.$(BRIDGE_SUFFIX): src/bridges/bridge_scrypt_yescrypt.c $(SCRYPT_YESCRYPT)/yescrypt-opt.c $(SCRYPT_YESCRYPT)/sha256.c obj/combined.NATIVE.a +bridges/bridge_scrypt_yescrypt.$(BRIDGE_SUFFIX): src/bridges/bridge_scrypt_yescrypt.c src/cpu_features.c $(SCRYPT_YESCRYPT)/yescrypt-opt.c $(SCRYPT_YESCRYPT)/sha256.c obj/combined.NATIVE.a $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(SCRYPT_YESCRYPT_CFLAGS) endif endif diff --git a/src/cpu_features.c b/src/cpu_features.c new file mode 100644 index 000000000..2f104a044 --- /dev/null +++ b/src/cpu_features.c @@ -0,0 +1,181 @@ +/** + * Author......: See docs/credits.txt + * License.....: MIT + */ + +#include "common.h" +#include "types.h" +#include "cpu_features.h" + +static inline void cpuid (u32 leaf, u32 subleaf, u32 *eax, u32 *ebx, u32 *ecx, u32 *edx) +{ + __cpuid_count (leaf, subleaf, *eax, *ebx, *ecx, *edx); +} + +static inline u64 xgetbv (u32 index) +{ + u32 eax, edx; + + __asm__ volatile (".byte 0x0f, 0x01, 0xd0" + : "=a"(eax), "=d"(edx) + : "c"(index)); + + return ((u64)edx << 32) | eax; +} + +// Should always be present on 64 bit? +int cpu_supports_sse2 () +{ + u32 eax, ebx, ecx, edx; + + cpuid(1, 0, &eax, &ebx, &ecx, &edx); + + return (edx & bit_SSE2) != 0; +} + +int cpu_supports_ssse3 () +{ + u32 eax, ebx, ecx, edx; + + cpuid (1, 0, &eax, &ebx, &ecx, &edx); + + return (ecx & bit_SSSE3) != 0; +} + +int cpu_supports_xop () +{ + u32 eax, ebx, ecx, edx; + + cpuid (0x80000000, 0, &eax, &ebx, &ecx, &edx); + + if (eax < 0x80000001) + { + return 0; + } + + cpuid (0x80000001, 0, &eax, &ebx, &ecx, &edx); + + return (ecx & (1 << 11)) != 0; // No macro for XOP +} + +int cpu_supports_avx2 () +{ + u32 eax, ebx, ecx, edx; + + cpuid (1, 0, &eax, &ebx, &ecx, &edx); + + if (!(ecx & bit_OSXSAVE) || !(ecx & bit_AVX)) + { + return 0; + } + + if ((xgetbv(0) & 0x6) != 0x6) // XMM and YMM state + { + return 0; + } + + cpuid (7, 0, &eax, &ebx, &ecx, &edx); + + return (ebx & bit_AVX2) != 0; +} + +int cpu_supports_avx512f () +{ + u32 eax, ebx, ecx, edx; + + cpuid (1, 0, &eax, &ebx, &ecx, &edx); + + if (!(ecx & bit_OSXSAVE) || !(ecx & bit_AVX)) + { + return 0; + } + + if ((xgetbv(0) & 0xE6) != 0xE6) + { + return 0; + } + + cpuid (7, 0, &eax, &ebx, &ecx, &edx); + + return (ebx & bit_AVX512F) != 0; +} + +int cpu_supports_avx512vl () +{ + u32 eax, ebx, ecx, edx; + + cpuid (1, 0, &eax, &ebx, &ecx, &edx); + + if (!(ecx & bit_OSXSAVE) || !(ecx & bit_AVX)) + { + return 0; + } + + if ((xgetbv(0) & 0xE6) != 0xE6) + { + return 0; + } + + cpuid (7, 0, &eax, &ebx, &ecx, &edx); + + return (ebx & (1u << 31)) != 0; +} + +int cpu_chipset_test () +{ + #ifdef __SSE2__ + if (cpu_supports_sse2 () == 0) + { + fprintf (stderr, "ERROR: Compiled with SSE2 but CPU does not support it.\n"); + + return -1; + } + #endif + + #ifdef __SSSE3__ + if (cpu_supports_ssse3 () == 0) + { + fprintf (stderr, "ERROR: Compiled with SSSE3 but CPU does not support it.\n"); + + return -1; + } + #endif + + #ifdef __XOP__ + if (cpu_supports_xop () == 0) + { + fprintf (stderr, "ERROR: Compiled with XOP but CPU does not support it.\n"); + + return -1; + } + #endif + + #ifdef __AVX2__ + if (cpu_supports_avx2 () == 0) + { + fprintf (stderr, "ERROR: Compiled with AVX2 but CPU does not support it.\n"); + + return -1; + } + #endif + + #ifdef __AVX512F__ + if (cpu_supports_avx512f () == 0) + { + fprintf (stderr, "ERROR: Compiled with AVX512F but CPU does not support it.\n"); + + return -1; + } + #endif + + #ifdef __AVX512VL__ + if (cpu_supports_avx512vl () == 0) + { + fprintf (stderr, "ERROR: Compiled with AVX512VL but CPU does not support it.\n"); + + return -1; + } + #endif + + return 0; +} From d60658102bb64dfc279b93de55497b8c8dc4033c Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Wed, 4 Jun 2025 10:13:29 +0200 Subject: [PATCH 33/95] Added option --backend-devices-keepfree to configure X percentage of device memory available to keep free --- docs/changes.txt | 1 + extra/tab_completion/hashcat.sh | 4 ++-- include/types.h | 4 ++++ src/backend.c | 21 ++++++++++++++++----- src/usage.c | 1 + src/user_options.c | 14 +++++++++++++- 6 files changed, 37 insertions(+), 8 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index 7ba71069e..2325ce8e8 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -66,6 +66,7 @@ - Added new feature (-Y) that creates N virtual instances for each device in your system at the cost of N times the device memory consumption - Added options --benchmark-min and --benchmark-max to set a hash-mode range to be used during the benchmark +- Added option --backend-devices-keepfree to configure X percentage of device memory available to keep free ## ## Performance diff --git a/extra/tab_completion/hashcat.sh b/extra/tab_completion/hashcat.sh index 8f243b126..f1d01e0f5 100755 --- a/extra/tab_completion/hashcat.sh +++ b/extra/tab_completion/hashcat.sh @@ -426,8 +426,8 @@ _hashcat () local BUILD_IN_CHARSETS='?l ?u ?d ?a ?b ?s ?h ?H' local SHORT_OPTS="-m -a -V -h -b -t -T -o -p -c -d -D -w -n -u -j -k -r -g -1 -2 -3 -4 -i -I -s -l -O -S -z -M -Y -R" - local LONG_OPTS="--hash-type --attack-mode --version --help --quiet --benchmark --benchmark-all --hex-salt --hex-wordlist --hex-charset --force --status --status-json --status-timer --stdin-timeout-abort --machine-readable --loopback --markov-hcstat2 --markov-disable --markov-inverse --markov-classic --markov-threshold --runtime --session --speed-only --progress-only --restore --restore-file-path --restore-disable --outfile --outfile-format --outfile-autohex-disable --outfile-json --outfile-check-timer --outfile-check-dir --wordlist-autohex-disable --separator --show --deprecated-check-disable --left --username --dynamic-x --remove --remove-timer --potfile-disable --potfile-path --debug-mode --debug-file --induction-dir --segment-size --bitmap-min --bitmap-max --cpu-affinity --example-hashes --hash-info --backend-ignore-cuda --backend-ignore-opencl --backend-ignore-hip --backend-ignore-metal --backend-info --backend-devices --backend-devices-virtmulti --backend-devices-virthost --opencl-device-types --backend-vector-width --workload-profile --kernel-accel --kernel-loops --kernel-threads --spin-damp --hwmon-disable --hwmon-temp-abort --skip --limit --keyspace --rule-left --rule-right --rules-file --generate-rules --generate-rules-func-min --generate-rules-func-max --generate-rules-func-sel --generate-rules-seed --custom-charset1 --custom-charset2 --custom-charset3 --custom-charset4 --hook-threads --increment --increment-min --increment-max --logfile-disable --scrypt-tmto --keyboard-layout-mapping --truecrypt-keyfiles --veracrypt-keyfiles --veracrypt-pim-start --veracrypt-pim-stop --stdout --keep-guessing --hccapx-message-pair --nonce-error-corrections --encoding-from --encoding-to --optimized-kernel-enable --multiply-accel-disable --self-test-disable --slow-candidates --brain-server --brain-server-timer --brain-client --brain-client-features --brain-host --brain-port --brain-session --brain-session-whitelist --brain-password --identify --bridge-parameter1 --bridge-parameter2 --bridge-parameter3 --bridge-parameter4" - local OPTIONS="-m -a -t -o -p -c -d -w -n -u -j -k -r -g -1 -2 -3 -4 -s -l --hash-type --attack-mode --status-timer --stdin-timeout-abort --markov-hcstat2 --markov-threshold --runtime --session --outfile --outfile-format --outfile-check-timer --outfile-check-dir --separator --remove-timer --potfile-path --restore-file-path --debug-mode --debug-file --induction-dir --segment-size --bitmap-min --bitmap-max --cpu-affinity --backend-devices --backend-devices-virtmulti --backend-devices-virthost --opencl-device-types --backend-vector-width --workload-profile --kernel-accel --kernel-loops --kernel-threads --spin-damp --hwmon-temp-abort --skip --limit --rule-left --rule-right --rules-file --generate-rules --generate-rules-func-min --generate-rules-func-max --generate-rules-func-sel --generate-rules-seed --custom-charset1 --custom-charset2 --custom-charset3 --custom-charset4 --hook-threads --increment-min --increment-max --scrypt-tmto --keyboard-layout-mapping --truecrypt-keyfiles --veracrypt-keyfiles --veracrypt-pim-start --veracrypt-pim-stop --hccapx-message-pair --nonce-error-corrections --encoding-from --encoding-to --brain-server-timer --brain-client-features --brain-host --brain-password --brain-port --brain-session --brain-session-whitelist --bridge-parameter1 --bridge-parameter2 --bridge-parameter3 --bridge-parameter4" + local LONG_OPTS="--hash-type --attack-mode --version --help --quiet --benchmark --benchmark-all --hex-salt --hex-wordlist --hex-charset --force --status --status-json --status-timer --stdin-timeout-abort --machine-readable --loopback --markov-hcstat2 --markov-disable --markov-inverse --markov-classic --markov-threshold --runtime --session --speed-only --progress-only --restore --restore-file-path --restore-disable --outfile --outfile-format --outfile-autohex-disable --outfile-json --outfile-check-timer --outfile-check-dir --wordlist-autohex-disable --separator --show --deprecated-check-disable --left --username --dynamic-x --remove --remove-timer --potfile-disable --potfile-path --debug-mode --debug-file --induction-dir --segment-size --bitmap-min --bitmap-max --cpu-affinity --example-hashes --hash-info --backend-ignore-cuda --backend-ignore-opencl --backend-ignore-hip --backend-ignore-metal --backend-info --backend-devices --backend-devices-virtmulti --backend-devices-virthost --backend-devices-keepfree --opencl-device-types --backend-vector-width --workload-profile --kernel-accel --kernel-loops --kernel-threads --spin-damp --hwmon-disable --hwmon-temp-abort --skip --limit --keyspace --rule-left --rule-right --rules-file --generate-rules --generate-rules-func-min --generate-rules-func-max --generate-rules-func-sel --generate-rules-seed --custom-charset1 --custom-charset2 --custom-charset3 --custom-charset4 --hook-threads --increment --increment-min --increment-max --logfile-disable --scrypt-tmto --keyboard-layout-mapping --truecrypt-keyfiles --veracrypt-keyfiles --veracrypt-pim-start --veracrypt-pim-stop --stdout --keep-guessing --hccapx-message-pair --nonce-error-corrections --encoding-from --encoding-to --optimized-kernel-enable --multiply-accel-disable --self-test-disable --slow-candidates --brain-server --brain-server-timer --brain-client --brain-client-features --brain-host --brain-port --brain-session --brain-session-whitelist --brain-password --identify --bridge-parameter1 --bridge-parameter2 --bridge-parameter3 --bridge-parameter4" + local OPTIONS="-m -a -t -o -p -c -d -w -n -u -j -k -r -g -1 -2 -3 -4 -s -l --hash-type --attack-mode --status-timer --stdin-timeout-abort --markov-hcstat2 --markov-threshold --runtime --session --outfile --outfile-format --outfile-check-timer --outfile-check-dir --separator --remove-timer --potfile-path --restore-file-path --debug-mode --debug-file --induction-dir --segment-size --bitmap-min --bitmap-max --cpu-affinity --backend-devices --backend-devices-virtmulti --backend-devices-virthost --backend-devices-keepfree --opencl-device-types --backend-vector-width --workload-profile --kernel-accel --kernel-loops --kernel-threads --spin-damp --hwmon-temp-abort --skip --limit --rule-left --rule-right --rules-file --generate-rules --generate-rules-func-min --generate-rules-func-max --generate-rules-func-sel --generate-rules-seed --custom-charset1 --custom-charset2 --custom-charset3 --custom-charset4 --hook-threads --increment-min --increment-max --scrypt-tmto --keyboard-layout-mapping --truecrypt-keyfiles --veracrypt-keyfiles --veracrypt-pim-start --veracrypt-pim-stop --hccapx-message-pair --nonce-error-corrections --encoding-from --encoding-to --brain-server-timer --brain-client-features --brain-host --brain-password --brain-port --brain-session --brain-session-whitelist --bridge-parameter1 --bridge-parameter2 --bridge-parameter3 --bridge-parameter4" COMPREPLY=() local cur="${COMP_WORDS[COMP_CWORD]}" diff --git a/include/types.h b/include/types.h index bc4dc32d3..d40a8cf29 100644 --- a/include/types.h +++ b/include/types.h @@ -670,6 +670,7 @@ typedef enum user_options_defaults AUTODETECT = false, BACKEND_DEVICES_VIRTMULTI = 1, BACKEND_DEVICES_VIRTHOST = 1, + BACKEND_DEVICES_KEEPFREE = 20, BENCHMARK_ALL = false, BENCHMARK_MAX = 99999, BENCHMARK_MIN = 0, @@ -777,6 +778,7 @@ typedef enum user_options_map IDX_BACKEND_DEVICES = 'd', IDX_BACKEND_DEVICES_VIRTMULTI = 'Y', IDX_BACKEND_DEVICES_VIRTHOST = 'R', + IDX_BACKEND_DEVICES_KEEPFREE = 0xff60, IDX_BACKEND_IGNORE_CUDA = 0xff01, IDX_BACKEND_IGNORE_HIP = 0xff02, IDX_BACKEND_IGNORE_METAL = 0xff03, @@ -1954,6 +1956,7 @@ typedef struct backend_ctx int backend_devices_cnt; int backend_devices_virtmulti; int backend_devices_virthost; + int backend_devices_keepfree; int backend_devices_active; int cuda_devices_cnt; @@ -2486,6 +2489,7 @@ typedef struct user_options u32 attack_mode; u32 backend_devices_virtmulti; u32 backend_devices_virthost; + u32 backend_devices_keepfree; u32 backend_info; u32 benchmark_max; u32 benchmark_min; diff --git a/src/backend.c b/src/backend.c index 8377580c9..02248a21d 100644 --- a/src/backend.c +++ b/src/backend.c @@ -5608,7 +5608,7 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) continue; } - device_param->device_available_mem = (u64) free; + device_param->device_available_mem = ((u64) free * (100 - user_options->backend_devices_keepfree)) / 100; if (hc_cuCtxPopCurrent (hashcat_ctx, &cuda_context) == -1) { @@ -6037,7 +6037,7 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) continue; } - device_param->device_available_mem = (u64) free; + device_param->device_available_mem = ((u64) free * (100 - user_options->backend_devices_keepfree)) / 100; if (hc_hipCtxPopCurrent (hashcat_ctx, &hip_context) == -1) { @@ -8116,7 +8116,13 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) device_param->device_available_mem = device_param->device_global_mem - MAX_ALLOC_CHECKS_SIZE; - if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) + if (user_options->backend_devices_keepfree) + { + device_param->device_available_mem = (device_param->device_global_mem * (100 - user_options->backend_devices_keepfree)) / 100; + } + // this section is creating more problems than it solves, so lets use a fixed multiplier instead + // users can override with --backend-devices-keepfree=0 + else if ((device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) && (device_param->device_host_unified_memory == 0)) { // following the same logic as for OpenCL, explained later @@ -8341,8 +8347,13 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) device_param->device_available_mem = device_param->device_global_mem - MAX_ALLOC_CHECKS_SIZE; - if ((device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) && - (((device_param->opencl_platform_vendor_id != VENDOR_ID_INTEL_SDK) && (device_param->opencl_platform_vendor_id != VENDOR_ID_MICROSOFT) && (device_param->opencl_platform_vendor_id != VENDOR_ID_GENERIC)) || (device_param->device_host_unified_memory == 0))) + if (user_options->backend_devices_keepfree) + { + device_param->device_available_mem = (device_param->device_global_mem * (100 - user_options->backend_devices_keepfree)) / 100; + } + // this section is creating more problems than it solves, so lets use a fixed multiplier instead + // users can override with --backend-devices-keepfree=0 + else if ((device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) && (device_param->device_host_unified_memory == 0)) { // OK, so the problem here is the following: // There's just CL_DEVICE_GLOBAL_MEM_SIZE to ask OpenCL about the total memory on the device, diff --git a/src/usage.c b/src/usage.c index 13036f510..83794204e 100644 --- a/src/usage.c +++ b/src/usage.c @@ -110,6 +110,7 @@ static const char *const USAGE_BIG_PRE_HASHMODES[] = " -d, --backend-devices | Str | Backend devices to use, separated with commas | -d 1", " -Y, --backend-devices-virtmulti| Num | Spawn X virtual instances on a real device | -Y 8", " -R, --backend-devices-virthost | Num | Sets the real device to create virtual instances | -R 1", + " --backend-devices-keepfree | Num | Keep specified percentage of device memory free | --backend-devices-keepfree=5", " -D, --opencl-device-types | Str | OpenCL device-types to use, separated with commas | -D 1", " -O, --optimized-kernel-enable | | Enable optimized kernels (limits password length) |", " -M, --multiply-accel-disable | | Disable multiply kernel-accel with processor count |", diff --git a/src/user_options.c b/src/user_options.c index 25f1324a0..217e8d3f3 100644 --- a/src/user_options.c +++ b/src/user_options.c @@ -34,7 +34,8 @@ static const struct option long_options[] = {"attack-mode", required_argument, NULL, IDX_ATTACK_MODE}, {"backend-devices", required_argument, NULL, IDX_BACKEND_DEVICES}, {"backend-devices-virtmulti", required_argument, NULL, IDX_BACKEND_DEVICES_VIRTMULTI}, - {"backend-devices-virthost", required_argument, NULL, IDX_BACKEND_DEVICES_VIRTHOST}, + {"backend-devices-virthost", required_argument, NULL, IDX_BACKEND_DEVICES_VIRTHOST}, + {"backend-devices-keepfree", required_argument, NULL, IDX_BACKEND_DEVICES_KEEPFREE}, {"backend-ignore-cuda", no_argument, NULL, IDX_BACKEND_IGNORE_CUDA}, {"backend-ignore-hip", no_argument, NULL, IDX_BACKEND_IGNORE_HIP}, #if defined (__APPLE__) @@ -184,6 +185,7 @@ int user_options_init (hashcat_ctx_t *hashcat_ctx) user_options->backend_devices = NULL; user_options->backend_devices_virtmulti = BACKEND_DEVICES_VIRTMULTI; user_options->backend_devices_virthost = BACKEND_DEVICES_VIRTHOST; + user_options->backend_devices_keepfree = BACKEND_DEVICES_KEEPFREE; user_options->backend_ignore_cuda = BACKEND_IGNORE_CUDA; user_options->backend_ignore_hip = BACKEND_IGNORE_HIP; #if defined (__APPLE__) @@ -378,6 +380,7 @@ int user_options_getopt (hashcat_ctx_t *hashcat_ctx, int argc, char **argv) case IDX_HOOK_THREADS: case IDX_BACKEND_DEVICES_VIRTMULTI: case IDX_BACKEND_DEVICES_VIRTHOST: + case IDX_BACKEND_DEVICES_KEEPFREE: case IDX_BENCHMARK_MAX: case IDX_BENCHMARK_MIN: #ifdef WITH_BRAIN @@ -509,6 +512,7 @@ int user_options_getopt (hashcat_ctx_t *hashcat_ctx, int argc, char **argv) case IDX_BACKEND_DEVICES: user_options->backend_devices = optarg; break; case IDX_BACKEND_DEVICES_VIRTMULTI: user_options->backend_devices_virtmulti = hc_strtoul (optarg, NULL, 10); break; case IDX_BACKEND_DEVICES_VIRTHOST: user_options->backend_devices_virthost = hc_strtoul (optarg, NULL, 10); break; + case IDX_BACKEND_DEVICES_KEEPFREE: user_options->backend_devices_keepfree = hc_strtoul (optarg, NULL, 10); break; case IDX_BACKEND_VECTOR_WIDTH: user_options->backend_vector_width = hc_strtoul (optarg, NULL, 10); user_options->backend_vector_width_chgd = true; break; case IDX_OPENCL_DEVICE_TYPES: user_options->opencl_device_types = optarg; break; @@ -814,6 +818,13 @@ int user_options_sanity (hashcat_ctx_t *hashcat_ctx) return -1; } + if (user_options->backend_devices_keepfree > 100) + { + event_log_error (hashcat_ctx, "Invalid --backend-devices-keepfree value specified."); + + return -1; + } + if (user_options->outfile_format == 0) { event_log_error (hashcat_ctx, "Invalid --outfile-format value specified."); @@ -3315,6 +3326,7 @@ void user_options_logger (hashcat_ctx_t *hashcat_ctx) logfile_top_uint (user_options->attack_mode); logfile_top_uint (user_options->backend_devices_virtmulti); logfile_top_uint (user_options->backend_devices_virthost); + logfile_top_uint (user_options->backend_devices_keepfree); logfile_top_uint (user_options->benchmark); logfile_top_uint (user_options->benchmark_all); logfile_top_uint (user_options->benchmark_max); From c8d81016caacdc2b954bbedabb1804bc2e8223f3 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Wed, 4 Jun 2025 10:41:24 +0200 Subject: [PATCH 34/95] Fix compile error on apple silicon --- include/cpu_features.h | 3 +++ src/cpu_features.c | 13 ++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/include/cpu_features.h b/include/cpu_features.h index e7630fc80..f583ed9bc 100644 --- a/include/cpu_features.h +++ b/include/cpu_features.h @@ -7,7 +7,10 @@ #define HC_CPU_FEATURES_H #include + +#if defined(__x86_64__) || defined(_M_X64) #include +#endif // SIMD detection diff --git a/src/cpu_features.c b/src/cpu_features.c index 2f104a044..cf00a8438 100644 --- a/src/cpu_features.c +++ b/src/cpu_features.c @@ -7,6 +7,16 @@ #include "types.h" #include "cpu_features.h" +#if defined(__aarch64__) || defined(__arm64__) + +int cpu_supports_sse2 () { return 1; } +int cpu_supports_ssse3 () { return 0; } +int cpu_supports_xop () { return 0; } +int cpu_supports_avx2 () { return 0; } +int cpu_supports_avx512f () { return 0; } +int cpu_supports_avx512vl () { return 0; } + +#else static inline void cpuid (u32 leaf, u32 subleaf, u32 *eax, u32 *ebx, u32 *ecx, u32 *edx) { __cpuid_count (leaf, subleaf, *eax, *ebx, *ecx, *edx); @@ -28,7 +38,7 @@ int cpu_supports_sse2 () { u32 eax, ebx, ecx, edx; - cpuid(1, 0, &eax, &ebx, &ecx, &edx); + cpuid (1, 0, &eax, &ebx, &ecx, &edx); return (edx & bit_SSE2) != 0; } @@ -120,6 +130,7 @@ int cpu_supports_avx512vl () return (ebx & (1u << 31)) != 0; } +#endif int cpu_chipset_test () { From ac2ed9f402dd8952d579a6311be1b8563107a22a Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Thu, 5 Jun 2025 06:56:38 +0200 Subject: [PATCH 35/95] - Remove old iconv patches (replaced by cmake) - Replace Queues in hcmp/hcsp and make code more pythonic - Synchronize python thread in hcmp count with detected cores - Move setting PYTHON_GIL to shared.c - Fix allocating and freeing aligned memory - Update BUILD guides for WSL and macOS - Fix python plugin documentation for macOS --- BUILD_WSL.md | 4 +- BUILD_macOS.md | 5 +- Python/hcmp.py | 120 +++++++----------- Python/hcshared.py | 15 ++- Python/hcsp.py | 52 ++++---- ...hashcat-python-plugin-development-guide.md | 2 +- docs/hashcat-python-plugin-quickstart.md | 2 +- docs/hashcat-python-plugin-requirements.md | 22 ++-- include/shared.h | 2 +- src/Makefile | 9 +- src/bridges/bridge_python_generic_hash_mp.c | 12 +- src/bridges/bridge_python_generic_hash_mp.mk | 14 +- src/bridges/bridge_python_generic_hash_sp.c | 15 +-- src/bridges/bridge_python_generic_hash_sp.mk | 14 +- src/hashcat.c | 2 +- src/memory.c | 26 ++-- src/shared.c | 6 +- tools/win-iconv-32.diff | 32 ----- tools/win-iconv-64.diff | 32 ----- 19 files changed, 154 insertions(+), 232 deletions(-) delete mode 100644 tools/win-iconv-32.diff delete mode 100644 tools/win-iconv-64.diff diff --git a/BUILD_WSL.md b/BUILD_WSL.md index 9fc136183..cd5b6fd5b 100644 --- a/BUILD_WSL.md +++ b/BUILD_WSL.md @@ -12,11 +12,11 @@ Enable WSL2. Press the win + r key on your keyboard simultaneously and in the "Run" popup window type bash and make sure to install additional dependencies necessary for hashcat compilation ```bash -sudo apt install gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 make git zstd python3-dev +sudo apt install build-essential gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 make git zstd python3-dev cmake git clone https://github.com/hashcat/hashcat git clone https://github.com/win-iconv/win-iconv cd win-iconv/ -cmake -D WIN_ICONV_BUILD_EXECUTABLE=OFF -D CMAKE_INSTALL_PREFIX=/opt/win-iconv-64 -D CMAKE_CXX_COMPILER=$(which x86_64-w64-mingw32-g++) -D CMAKE_C_COMPILER=$(which x86_64-w64-mingw32-gcc) +cmake -D WIN_ICONV_BUILD_EXECUTABLE=OFF -D CMAKE_INSTALL_PREFIX=/opt/win-iconv-64 -D CMAKE_CXX_COMPILER=$(which x86_64-w64-mingw32-g++) -D CMAKE_C_COMPILER=$(which x86_64-w64-mingw32-gcc) -D CMAKE_SYSTEM_NAME=Windows sudo make install cd ../ wget https://repo.msys2.org/mingw/mingw64/mingw-w64-x86_64-python-3.12.10-1-any.pkg.tar.zst diff --git a/BUILD_macOS.md b/BUILD_macOS.md index 67d09a6bf..9388dd75e 100644 --- a/BUILD_macOS.md +++ b/BUILD_macOS.md @@ -11,9 +11,12 @@ brew install mingw-w64 git clone https://github.com/hashcat/hashcat git clone https://github.com/win-iconv/win-iconv cd win-iconv/ -patch < ../hashcat/tools/win-iconv-64.diff +cmake -D WIN_ICONV_BUILD_EXECUTABLE=OFF -D CMAKE_INSTALL_PREFIX=/opt/win-iconv-64 -D CMAKE_CXX_COMPILER=$(which x86_64-w64-mingw32-g++) -D CMAKE_C_COMPILER=$(which x86_64-w64-mingw32-gcc) -D CMAKE_SYSTEM_NAME=Windows sudo make install cd ../ +wget https://repo.msys2.org/mingw/mingw64/mingw-w64-x86_64-python-3.12.10-1-any.pkg.tar.zst +sudo mkdir /opt/win-python +sudo tar --zstd -xf mingw-w64-x86_64-python-3.12.10-1-any.pkg.tar.zst -C /opt/win-python ``` ### Building ### diff --git a/Python/hcmp.py b/Python/hcmp.py index e650c8e4e..1e55ebfab 100644 --- a/Python/hcmp.py +++ b/Python/hcmp.py @@ -1,81 +1,51 @@ -import sys import hcshared import multiprocessing -import math -def child(qi,qo,salts,st_salts,user_fn): - while True: - entry = qi.get() - if entry is None: - break - salt_id, passwords, is_selftest = entry - if is_selftest: - salt = st_salts[salt_id] - else: - salt = salts[salt_id] +def init(ctx: dict, user_fn, extract_esalts): + # Extract and merge salts and esalts + salts = hcshared.extract_salts(ctx["salts_buf"]) + esalts = extract_esalts(ctx["esalts_buf"]) + for salt, esalt in zip(salts, esalts): + salt["esalt"] = esalt + + st_salts = hcshared.extract_salts(ctx["st_salts_buf"]) + st_esalts = extract_esalts(ctx["st_esalts_buf"]) + for salt, esalt in zip(st_salts, st_esalts): + salt["esalt"] = esalt + + # Save state in ctx + ctx["salts"] = salts + ctx["st_salts"] = st_salts + ctx["user_fn"] = user_fn + ctx["pool"] = multiprocessing.Pool(processes=ctx["parallelism"]) + return + +def handle_queue(ctx: dict, passwords: list, salt_id: int, is_selftest: bool) -> list: + user_fn = ctx["user_fn"] + salts = ctx["salts"] + st_salts = ctx["st_salts"] + pool = ctx["pool"] + parallelism = ctx["parallelism"] + + chunk_size = (len(passwords) + parallelism - 1) // parallelism + chunks = [passwords[i:i + chunk_size] for i in range(0, len(passwords), chunk_size)] + + jobs = [] + for chunk in chunks: + if chunk: + jobs.append(pool.apply_async( + hcshared._worker_batch, + args=(chunk, salt_id, is_selftest, user_fn, salts, st_salts) + )) + hashes = [] - for password in passwords: - try: - hashes.append(user_fn(password,salt)) - except Exception as e: - print (e, file=sys.stderr) - hashes.append("invalid-password") - qo.put(hashes) - return - -def handle_queue(ctx: dict,passwords: list,salt_id: int,is_selftest: bool) -> list: - npasswords = len(passwords) - if(npasswords == 0): return [] - nprocs = ctx["nprocs"] - qos = ctx["qos"] - qis = ctx["qis"] - batchsize = int((npasswords+(nprocs-1))/nprocs) # round up, to garantee none of the procs are called more than once per invocation - child_ids = math.ceil(npasswords/batchsize) # relevant if npasswords < batchsize - slice_start = 0 - slice_stop = slice_start+batchsize - for child_id in range(child_ids): - qos[child_id].put([salt_id, passwords[slice_start:slice_stop], is_selftest]) - slice_start = slice_stop - slice_stop = slice_start+batchsize - hashes = [] - for child_id in range(child_ids): - hashes.extend(qis[child_id].get()) - return(hashes) - -def init(ctx: dict,user_fn,extract_esalts): - # Extract salt and esalt, merge esalt into salt - salts = hcshared.extract_salts(ctx["salts_buf"]) - esalts = extract_esalts(ctx["esalts_buf"]) - for salt,esalt in zip(salts,esalts): - salt["esalt"] = esalt - # Same extraction, but for self-test hash - st_salts = hcshared.extract_salts(ctx["st_salts_buf"]) - st_esalts = extract_esalts(ctx["st_esalts_buf"]) - for salt,esalt in zip(st_salts,st_esalts): - salt["esalt"] = esalt - # Use native cpu count - nprocs = multiprocessing.cpu_count() - procs = [] - qis = [] - qos = [] - multiprocessing.set_start_method('spawn', force=True) - for child_id in range(nprocs): - qi = multiprocessing.Queue(1) - qis.append(qi) - qo = multiprocessing.Queue(1) - qos.append(qo) - proc = multiprocessing.Process(target=child, args=(qo,qi,salts,st_salts,user_fn)) # note qi/qo side switch! - proc.start() - procs.append(proc) - ctx.update ({ "nprocs": nprocs, "procs": procs, "qis": qis, "qos": qos, "salts": salts, "st_salts": st_salts }) - return + for job in jobs: + hashes.extend(job.get()) + return hashes def term(ctx: dict): - nprocs = ctx["nprocs"] - procs = ctx["procs"] - qos = ctx["qos"] - for child_id in range(nprocs): - qos[child_id].put(None) - for child_id in range(nprocs): - procs[child_id].join() - return + if "pool" in ctx: + ctx["pool"].close() + ctx["pool"].join() + del ctx["pool"] + return diff --git a/Python/hcshared.py b/Python/hcshared.py index 970429542..2fcf56c70 100644 --- a/Python/hcshared.py +++ b/Python/hcshared.py @@ -1,4 +1,5 @@ import struct +import sys # Extract a blob that is a list of salt_t entries and convert it to a list of dictionaries # The salt_t is a fixed data-type so we can handle it here @@ -57,4 +58,16 @@ def get_scrypt_N(salt: dict) -> int: return salt["esalt"]["scrypt_N"] def get_scrypt_r(salt: dict) -> int: - return salt["esalt"]["scrypt_r"] + return salt["esalt"]["scrypt_r"] + +def _worker_batch(passwords, salt_id, is_selftest, user_fn, salts, st_salts): + salt = st_salts[salt_id] if is_selftest else salts[salt_id] + hashes = [] + for pw in passwords: + try: + hash=user_fn(pw, salt) + hashes.append(hash) + except Exception as e: + print(e, file=sys.stderr) + hashes.append("invalid-password") + return hashes diff --git a/Python/hcsp.py b/Python/hcsp.py index 0b3a0f7f7..308529cfc 100644 --- a/Python/hcsp.py +++ b/Python/hcsp.py @@ -1,36 +1,28 @@ -import sys import hcshared -def handle_queue(ctx: dict,passwords: list,salt_id: int,is_selftest: bool) -> list: - npasswords = len(passwords) - if(npasswords == 0): return [] - user_fn = ctx["user_fn"] - if is_selftest: - salt = ctx["st_salts"][salt_id] - else: - salt = ctx["salts"][salt_id] - hashes = [] - for password in passwords: - try: - hashes.append(user_fn(password,salt)) - except Exception as e: - print (e, file=sys.stderr) - hashes.append("invalid-password") - return(hashes) +def handle_queue(ctx: dict, passwords: list, salt_id: int, is_selftest: bool) -> list: + user_fn = ctx["user_fn"] + salts = ctx["salts"] + st_salts = ctx["st_salts"] + return hcshared._worker_batch (passwords, salt_id, is_selftest, user_fn, salts, st_salts) def init(ctx: dict,user_fn,extract_esalts): - # Extract salt and esalt, merge esalt into salt - salts = hcshared.extract_salts(ctx["salts_buf"]) - esalts = extract_esalts(ctx["esalts_buf"]) - for salt,esalt in zip(salts,esalts): - salt["esalt"] = esalt - # Same extraction, but for self-test hash - st_salts = hcshared.extract_salts(ctx["st_salts_buf"]) - st_esalts = extract_esalts(ctx["st_esalts_buf"]) - for salt,esalt in zip(st_salts,st_esalts): - salt["esalt"] = esalt - ctx.update ({ "salts": salts, "st_salts": st_salts, "user_fn": user_fn }) - return + # Extract and merge salts and esalts + salts = hcshared.extract_salts(ctx["salts_buf"]) + esalts = extract_esalts(ctx["esalts_buf"]) + for salt, esalt in zip(salts, esalts): + salt["esalt"] = esalt + + st_salts = hcshared.extract_salts(ctx["st_salts_buf"]) + st_esalts = extract_esalts(ctx["st_esalts_buf"]) + for salt, esalt in zip(st_salts, st_esalts): + salt["esalt"] = esalt + + # Save state in ctx + ctx["salts"] = salts + ctx["st_salts"] = st_salts + ctx["user_fn"] = user_fn + return def term(ctx: dict): - return + return diff --git a/docs/hashcat-python-plugin-development-guide.md b/docs/hashcat-python-plugin-development-guide.md index 6c4b6035d..e955ef72a 100644 --- a/docs/hashcat-python-plugin-development-guide.md +++ b/docs/hashcat-python-plugin-development-guide.md @@ -206,7 +206,7 @@ The most straight-forward way is to edit the following files directly: Notes: - Even though `-m 72000` uses single-threaded Python, the bridge plugin above it manages multiple Python interpreters (one per thread) making it effectively multi-threaded. -- On Windows, if `-m 73000` is selected, it silently falls back to `generic_hash_sp.py` due to limitations with multiprocessing. This behavior is important to understand and you might otherwise wonder why your code changes have no effect. +- On Windows/macOS, if `-m 73000` is selected, it silently falls back to `generic_hash_sp.py` due to limitations with multiprocessing. This behavior is important to understand and you might otherwise wonder why your code changes have no effect. If you modify one of these plugin files, there's a trade-off: you won’t be able to contribute that code directly to the upstream Hashcat repository, since those files are meant to remain clean for demonstration purposes. diff --git a/docs/hashcat-python-plugin-quickstart.md b/docs/hashcat-python-plugin-quickstart.md index dff602f69..760607cd7 100644 --- a/docs/hashcat-python-plugin-quickstart.md +++ b/docs/hashcat-python-plugin-quickstart.md @@ -62,7 +62,7 @@ pip install pyescrypt Then in your plugin (either `generic_hash_mp.py` for `-m 73000` or `generic_hash_sp.py` for `-m 72000`): -**Note for Windows users:** Mode `73000` automatically switches to `generic_hash_sp.py`, so be sure to edit that file. +**Note for Windows and MacOS users:** Mode `73000` automatically switches to `generic_hash_sp.py`, so be sure to edit that file. ```python from pyescrypt import Yescrypt, Mode diff --git a/docs/hashcat-python-plugin-requirements.md b/docs/hashcat-python-plugin-requirements.md index 86b0822d4..41564afbd 100644 --- a/docs/hashcat-python-plugin-requirements.md +++ b/docs/hashcat-python-plugin-requirements.md @@ -1,32 +1,32 @@ # Hashcat Python Plugin Requirements -## Windows and Linux/macOS +## Windows/macOS and Linux -There are significant differences between Windows and Linux/macOS when embedding Python as done here. +There are significant differences between Windows/macOS and Linux when embedding Python as done here. -### On Windows +### On Windows/macOS -The `multiprocessing` module is not fully supported in this embedded environment, so only a single process can run effectively. In contrast, the `threading` module does work correctly on Windows for starting threads and enabling parallelism. However, most cryptographic functions like `sha256()` block the Global Interpreter Lock (GIL). Since we often run CPU-intensive algorithms (e.g., 10,000 iterations of `sha256()`), this monopolizes the GIL, making the program effectively single-threaded. To achieve true multithreading on Windows, we need to move to a free-threaded Python runtime. +The `multiprocessing` module is not fully supported in this embedded environment, so only a single process can run effectively. In contrast, even though `threading` module does work correctly on Windows/macOS for starting threads and enabling parallelism, most cryptographic functions like `sha256()` block the Global Interpreter Lock (GIL). Since we often run CPU-intensive algorithms (e.g., 10,000 iterations of `sha256()`), this monopolizes the GIL, making the program effectively single-threaded. To achieve true multithreading on Windows/macOS, we need to move to a free-threaded Python runtime. -**On Windows**: Use the official installer from https://www.python.org/downloads/windows/ and ensure you check the "Install free-threaded" option - it's disabled by default. +**On Windows**: Use the official installer from https://www.python.org/downloads/windows/ and ensure you check the "Install free-threaded" option - it's disabled by default. Do not use python from Microsoft Store it's too old. -Do not use python from Microsoft Store it's too old. +**On macOS**: Use `pyenv`. It's the easiest way to install and manage Python versions, see below section -### On Linux/macOS +### On Linux The `multiprocessing` module functions correctly, allowing full CPU utilization through parallel worker processes. However, since threading is managed by Python, it relies on `fork()` and inter-process communication (IPC). This adds complexity and code bloat to Hashcat, effectively duplicating modules and bridge plugins, making the codebase harder to understand for those exploring how it all works. We could switch to a free-threaded Python runtime, but it's still unstable at the time of writing even on Linux (see the `cffi` problem below). For now, we’ve chosen to use the `multiprocessing` module as a more practical solution. -**On Linux/macOS**: Use `pyenv`. It's the easiest way to install and manage Python versions, see below section +**On Linux**: Use `pyenv`. It's the easiest way to install and manage Python versions, see below section ### Free-threaded Python (3.13+) -In order to have multithreading on Windows, we were looking into Python 3.13 which introduces optional GIL-free support. This allows multithreading to work even in embedded Python. However, it has a major downside. Most relevant modules such as `cffi` still lacks support for running with the Python free-threaded ABI. But if your hash-mode does not rely on modules with `cffi` you should be fine using `-m 72000` no matter the OS. +In order to have multithreading on Windows/macOS, we were looking into Python 3.13 which introduces optional GIL-free support. This allows multithreading to work even in embedded Python. However, it has a major downside. Most relevant modules such as `cffi` still lacks support for running with the Python free-threaded ABI. But if your hash-mode does not rely on modules with `cffi` you should be fine using `-m 72000` no matter the OS. At the time of writing, several Linux distributions, including Ubuntu 24.04, do not ship with Python 3.13 because it was released after the distro’s feature freeze. You will likely need to install it manually, which is one of the reason we are refering to use `pyenv`. ### Real-world best practice -For now, multiprocessing (73000) supports most modules and is generally better for real-world workloads, but it works only on Linux. Developers may use `-m 73000` on Linux for performance and `-m 72000` on Windows for development. +For now, multiprocessing (-m 73000) supports most modules and is generally better for real-world workloads, but it works only on Linux. Developers on Windows/macOS may use `-m 72000` for development, except if `cffi` modules are requested and in this case switch back to `-m 73000`. Then use Linux (or WSL2 on Windows) for long running tasks. ### Pyenv @@ -47,3 +47,5 @@ In order to use `-m 72000` pyenv install 3.13t pyenv local 3.13t ``` + +Note that unlike on Windows, there is no combined Python 3.13 + 3.13t version. This can be a bit confusing. If you plan to use `-m 72000`, you must switch your pyenv to Python `3.13t` beforehand. Similarly, you need to switch back to Python `3.13` before using `-m 73000`. diff --git a/include/shared.h b/include/shared.h index f1660c58e..5dd482d34 100644 --- a/include/shared.h +++ b/include/shared.h @@ -46,7 +46,7 @@ void naive_escape (char *s, size_t s_max, const char key_char, const char escape __attribute__ ((format (printf, 2, 3))) int hc_asprintf (char **strp, const char *fmt, ...); -void setup_environment_variables (const folder_config_t *folder_config); +void setup_environment_variables (const folder_config_t *folder_config, const user_options_t *user_options); void setup_umask (void); void setup_seeding (const bool rp_gen_seed_chgd, const u32 rp_gen_seed); diff --git a/src/Makefile b/src/Makefile index 01b1eceb7..7f872f01b 100644 --- a/src/Makefile +++ b/src/Makefile @@ -787,12 +787,9 @@ CXX_WIN := x86_64-w64-mingw32-g++ AR_LINUX := ar AR_WIN := x86_64-w64-mingw32-ar -## To compile win-iconv with mingw clone from here: https://github.com/win-iconv/win-iconv -## -## Then patch the makefile with the patches from tools/win-iconv-64.diff and run make install -## - +# See BUILD_WSL.md to make these WIN_ICONV := /opt/win-iconv-64 +WIN_PYTHON := /opt/win-python ## ## Compiler options @@ -849,7 +846,7 @@ binaries: win host_win: hashcat.exe .PHONY: win -win: host_win modules_win +win: host_win modules_win bridges_win else .PHONY: binaries binaries: linux win diff --git a/src/bridges/bridge_python_generic_hash_mp.c b/src/bridges/bridge_python_generic_hash_mp.c index 9bffc87fe..4e3d5d49c 100644 --- a/src/bridges/bridge_python_generic_hash_mp.c +++ b/src/bridges/bridge_python_generic_hash_mp.c @@ -162,6 +162,8 @@ typedef struct // implementation specific + int parallelism; + PyGILState_STATE gstate; PyObject *pArgs; @@ -186,7 +188,7 @@ typedef struct } python_interpreter_t; -#if defined (_WIN) +#if defined (_WIN) || defined (__APPLE__) static char *DEFAULT_SOURCE_FILENAME = "generic_hash_sp"; #else static char *DEFAULT_SOURCE_FILENAME = "generic_hash_mp"; @@ -657,6 +659,7 @@ static bool units_init (python_interpreter_t *python_interpreter) unit_buf->unit_info_buf[unit_buf->unit_info_len] = 0; + unit_buf->parallelism = num_devices_sav; unit_buf->workitem_count = N_ACCEL * num_devices_sav; units_cnt++; @@ -711,10 +714,10 @@ void *platform_init (user_options_t *user_options) unit_t *unit_buf = &python_interpreter->units_buf[0]; - #if defined (_WIN) + #if defined (_WIN) || defined (__APPLE__) fprintf (stderr, "Attention!!! Falling back to single-threaded mode.\n"); - fprintf (stderr, " Windows does not support multiprocessing module cleanly!\n"); - fprintf (stderr, " For multithreading on Windows, please use -m 72000 instead.\n\n"); + fprintf (stderr, " Windows and MacOS ds not support multiprocessing module cleanly!\n"); + fprintf (stderr, " For multithreading on Windows and MacOS, please use -m 72000 instead.\n\n"); #endif python_interpreter->source_filename = (user_options->bridge_parameter1) ? user_options->bridge_parameter1 : DEFAULT_SOURCE_FILENAME; @@ -837,6 +840,7 @@ bool thread_init (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_pa int rc = 0; + rc |= python->PyDict_SetItemString (unit_buf->pContext, "parallelism", python->PyLong_FromLong (unit_buf->parallelism)); rc |= python->PyDict_SetItemString (unit_buf->pContext, "salts_cnt", python->PyLong_FromLong (hashes->salts_cnt)); rc |= python->PyDict_SetItemString (unit_buf->pContext, "salts_size", python->PyLong_FromLong (sizeof (salt_t))); rc |= python->PyDict_SetItemString (unit_buf->pContext, "salts_buf", python->PyBytes_FromStringAndSize ((const char *) hashes->salts_buf, sizeof (salt_t) * hashes->salts_cnt)); diff --git a/src/bridges/bridge_python_generic_hash_mp.mk b/src/bridges/bridge_python_generic_hash_mp.mk index e69931382..6f72a208d 100644 --- a/src/bridges/bridge_python_generic_hash_mp.mk +++ b/src/bridges/bridge_python_generic_hash_mp.mk @@ -1,19 +1,19 @@ -PYTHON_CONFIG_FLAGS_LINUX := `python3-config --includes` -# See BUILD_WSL.md to prepare /opt/win-python -PYTHON_CONFIG_FLAGS_WIN := -I/opt/win-python/mingw64/include/python3.12 +PYTHON_CFLAGS := `python3-config --includes` +# See BUILD_WSL.md how to prepare $(WIN_PYTHON) +PYTHON_CFLAGS_WIN := -I$(WIN_PYTHON)/mingw64/include/python3.12/ ifeq ($(BUILD_MODE),cross) bridges/bridge_python_generic_hash_mp.so: src/bridges/bridge_python_generic_hash_mp.c src/cpu_features.c obj/combined.LINUX.a - $(CC_LINUX) $(CCFLAGS) $(CFLAGS_CROSS_LINUX) $^ -o $@ $(LFLAGS_CROSS_LINUX) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CONFIG_FLAGS_LINUX) + $(CC_LINUX) $(CCFLAGS) $(CFLAGS_CROSS_LINUX) $^ -o $@ $(LFLAGS_CROSS_LINUX) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CFLAGS) bridges/bridge_python_generic_hash_mp.dll: src/bridges/bridge_python_generic_hash_mp.c src/cpu_features.c obj/combined.WIN.a - $(CC_WIN) $(CCFLAGS) $(CFLAGS_CROSS_WIN) $^ -o $@ $(LFLAGS_CROSS_WIN) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CONFIG_FLAGS_WIN) + $(CC_WIN) $(CCFLAGS) $(CFLAGS_CROSS_WIN) $^ -o $@ $(LFLAGS_CROSS_WIN) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CFLAGS_WIN) else ifeq ($(SHARED),1) bridges/bridge_python_generic_hash_mp.$(BRIDGE_SUFFIX): src/bridges/bridge_python_generic_hash_mp.c src/cpu_features.c $(HASHCAT_LIBRARY) - $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CONFIG_FLAGS_LINUX) $(PYTHON_CONFIG_FLAGS_WIN) + $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CFLAGS) else bridges/bridge_python_generic_hash_mp.$(BRIDGE_SUFFIX): src/bridges/bridge_python_generic_hash_mp.c src/cpu_features.c obj/combined.NATIVE.a - $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CONFIG_FLAGS_LINUX) $(PYTHON_CONFIG_FLAGS_WIN) + $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CFLAGS) endif endif diff --git a/src/bridges/bridge_python_generic_hash_sp.c b/src/bridges/bridge_python_generic_hash_sp.c index 5bcd930c4..f2a31265c 100644 --- a/src/bridges/bridge_python_generic_hash_sp.c +++ b/src/bridges/bridge_python_generic_hash_sp.c @@ -340,9 +340,6 @@ static bool init_python (hc_python_lib_t *python) python->lib = NULL; - if (getenv ("PYTHON_GIL") == NULL) - putenv ((char *) "PYTHON_GIL=0"); - // let's see if we have pyenv, that will save us a lot of guessing... int saved_stderr = suppress_stderr (); @@ -524,8 +521,8 @@ static bool init_python (hc_python_lib_t *python) fprintf (stderr, "Unable to find suitable Python library for -m 72000.\n\n"); fprintf (stderr, "Most users who encounter this error are just missing the so called 'free-threaded' library support.\n"); fprintf (stderr, "* On Windows, during install, there's an option 'free-threaded' that you need to click, it's just disabled by default.\n"); - fprintf (stderr, "* On Linux, use `pyenv` and select a version that ends with a `t` (for instance `3.13t`).\n"); - fprintf (stderr, " However, on Linux it's better to use -m 73000 instead. So you probably want to ignore this.\n"); + fprintf (stderr, "* On Linux and MacOS, use `pyenv` and select a version that ends with a `t` (for instance `3.13t`).\n"); + fprintf (stderr, " However, on Linux (not MacOS) it's better to use -m 73000 instead. So you probably want to ignore this.\n"); fprintf (stderr, "\n"); return false; @@ -535,13 +532,13 @@ static bool init_python (hc_python_lib_t *python) printf ("Loaded python library from: %s\n\n", pythondll_path); } - #if defined (_WIN) + #if defined (_WIN) || defined (__APPLE__) #else fprintf (stderr, "Attention!!! The 'free-threaded' python library has some major downsides.\n"); - fprintf (stderr, " The main purpose of this module is to give windows users a multithreading option.\n"); - fprintf (stderr, " It seems to be a lot slower, and relevant modules such as cffi are incompatibile.\n"); - fprintf (stderr, " Since your are on Linux/MacOS we highly recommend to stick to multiprocessing module.\n"); + fprintf (stderr, " The main purpose of this module is to give Windows and macOS users a multithreading option.\n"); + fprintf (stderr, " It seems to be a lot slower, and relevant modules such as `cffi` are incompatibile.\n"); + fprintf (stderr, " Since your are on Linux we highly recommend to stick to multiprocessing module.\n"); fprintf (stderr, " Maybe 'free-threaded' mode will become more mature in the future.\n"); fprintf (stderr, " For now, we high recommend to stick to -m 73000 instead.\n\n"); #endif diff --git a/src/bridges/bridge_python_generic_hash_sp.mk b/src/bridges/bridge_python_generic_hash_sp.mk index 52662448c..fb9586166 100644 --- a/src/bridges/bridge_python_generic_hash_sp.mk +++ b/src/bridges/bridge_python_generic_hash_sp.mk @@ -1,20 +1,20 @@ -PYTHON_CONFIG_FLAGS_LINUX := `python3-config --includes` -# See BUILD_WSL.md to prepare /opt/win-python -PYTHON_CONFIG_FLAGS_WIN := -I/opt/win-python/mingw64/include/python3.12 +PYTHON_CFLAGS := `python3-config --includes` +# See BUILD_WSL.md how to prepare $(WIN_PYTHON) +PYTHON_CFLAGS_WIN := -I$(WIN_PYTHON)/mingw64/include/python3.12/ ifeq ($(BUILD_MODE),cross) bridges/bridge_python_generic_hash_sp.so: src/bridges/bridge_python_generic_hash_sp.c src/cpu_features.c obj/combined.LINUX.a - $(CC_LINUX) $(CCFLAGS) $(CFLAGS_CROSS_LINUX) $^ -o $@ $(LFLAGS_CROSS_LINUX) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CONFIG_FLAGS_LINUX) + $(CC_LINUX) $(CCFLAGS) $(CFLAGS_CROSS_LINUX) $^ -o $@ $(LFLAGS_CROSS_LINUX) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CFLAGS) bridges/bridge_python_generic_hash_sp.dll: src/bridges/bridge_python_generic_hash_sp.c src/cpu_features.c obj/combined.WIN.a - $(CC_WIN) $(CCFLAGS) $(CFLAGS_CROSS_WIN) $^ -o $@ $(LFLAGS_CROSS_WIN) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CONFIG_FLAGS_WIN) + $(CC_WIN) $(CCFLAGS) $(CFLAGS_CROSS_WIN) $^ -o $@ $(LFLAGS_CROSS_WIN) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CFLAGS_WIN) else ifeq ($(SHARED),1) bridges/bridge_python_generic_hash_sp.$(BRIDGE_SUFFIX): src/bridges/bridge_python_generic_hash_sp.c src/cpu_features.c $(HASHCAT_LIBRARY) - $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CONFIG_FLAGS_LINUX) $(PYTHON_CONFIG_FLAGS_WIN) + $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CFLAGS) else bridges/bridge_python_generic_hash_sp.$(BRIDGE_SUFFIX): src/bridges/bridge_python_generic_hash_sp.c src/cpu_features.c obj/combined.NATIVE.a - $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CONFIG_FLAGS_LINUX) $(PYTHON_CONFIG_FLAGS_WIN) + $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CFLAGS) endif endif diff --git a/src/hashcat.c b/src/hashcat.c index ff412654a..9907e1229 100644 --- a/src/hashcat.c +++ b/src/hashcat.c @@ -1253,7 +1253,7 @@ int hashcat_session_init (hashcat_ctx_t *hashcat_ctx, const char *install_folder * To help users a bit */ - setup_environment_variables (hashcat_ctx->folder_config); + setup_environment_variables (hashcat_ctx->folder_config, hashcat_ctx->user_options); setup_umask (); diff --git a/src/memory.c b/src/memory.c index 54995cc86..15f4cbe19 100644 --- a/src/memory.c +++ b/src/memory.c @@ -69,23 +69,27 @@ void hcfree (void *ptr) void *hcmalloc_aligned (const size_t sz, const int align) { - // store the original allocated address so we can later use it to free the memory - // this is convenient to use because we don't need to store two memory addresses + uintptr_t align_mask = (uintptr_t) (align - 1); - const int align1 = align - 1; + void *raw = malloc (sz + align + sizeof (void *)); - void *ptr1 = hcmalloc (sz + sizeof (void *) + align1); + if (raw == NULL) return NULL; - void *ptr2 = (void **) ((uintptr_t) (ptr1 + sizeof (void *) + align1) & ~align1); + uintptr_t raw_addr = (uintptr_t) raw + sizeof (void *); - ((void **) ptr2)[-1] = ptr1; + uintptr_t aligned_addr = (raw_addr + align_mask) & ~align_mask; - return ptr2; + void **aligned_ptr = (void **) aligned_addr; + + aligned_ptr[-1] = raw; + + return aligned_ptr; } -void hcfree_aligned (void *ptr) +void hcfree_aligned(void *ptr) { - if (ptr == NULL) return; - - free (((void **) ptr)[-1]); + if (ptr != NULL) + { + free (((void **) ptr)[-1]); + } } diff --git a/src/shared.c b/src/shared.c index 6795bf2f5..38255b6f3 100644 --- a/src/shared.c +++ b/src/shared.c @@ -549,7 +549,7 @@ bool hc_string_is_digit (const char *s) return true; } -void setup_environment_variables (const folder_config_t *folder_config) +void setup_environment_variables (const folder_config_t *folder_config, const user_options_t *user_options) { char *compute = getenv ("COMPUTE"); @@ -595,6 +595,10 @@ void setup_environment_variables (const folder_config_t *folder_config) if (getenv ("AMD_DIRECT_DISPATCH") == NULL) putenv ((char *) "AMD_DIRECT_DISPATCH=0"); + if (user_options->hash_mode == 72000) // ugly but rare hack, we might move this to modules at a later stage + if (getenv ("PYTHON_GIL") == NULL) + putenv ((char *) "PYTHON_GIL=0"); + /* if (getenv ("CL_CONFIG_USE_VECTORIZER") == NULL) putenv ((char *) "CL_CONFIG_USE_VECTORIZER=False"); diff --git a/tools/win-iconv-32.diff b/tools/win-iconv-32.diff deleted file mode 100644 index 7dc17e3a6..000000000 --- a/tools/win-iconv-32.diff +++ /dev/null @@ -1,32 +0,0 @@ -diff --git a/Makefile b/Makefile -index 5937584..8777fad 100644 ---- a/Makefile -+++ b/Makefile -@@ -6,10 +6,10 @@ - # MKDIR_P, INSTALL, RM - # prefix, BINARY_PATH, INCLUDE_PATH, LIBRARY_PATH - --CC ?= gcc --AR ?= ar --RANLIB ?= ranlib --DLLTOOL ?= dlltool -+CC := i686-w64-mingw32-gcc -+AR := i686-w64-mingw32-ar -+RANLIB := i686-w64-mingw32-ranlib -+DLLTOOL := i686-w64-mingw32-dlltool - - MKDIR_P = mkdir -p - INSTALL = install -c -@@ -19,10 +19,10 @@ RM = rm -f - DEFAULT_LIBICONV_DLL ?= \"\" - - CFLAGS += -pedantic -Wall --CFLAGS += -DUSE_LIBICONV_DLL -+#CFLAGS += -DUSE_LIBICONV_DLL - CFLAGS += -DDEFAULT_LIBICONV_DLL=$(DEFAULT_LIBICONV_DLL) - --prefix ?= /usr/local -+prefix ?= /opt/win-iconv-32 - BINARY_PATH = $(prefix)/bin - INCLUDE_PATH = $(prefix)/include - LIBRARY_PATH = $(prefix)/lib diff --git a/tools/win-iconv-64.diff b/tools/win-iconv-64.diff deleted file mode 100644 index 2c658d8c1..000000000 --- a/tools/win-iconv-64.diff +++ /dev/null @@ -1,32 +0,0 @@ -diff --git a/Makefile b/Makefile -index 5937584..c4742a3 100644 ---- a/Makefile -+++ b/Makefile -@@ -6,10 +6,10 @@ - # MKDIR_P, INSTALL, RM - # prefix, BINARY_PATH, INCLUDE_PATH, LIBRARY_PATH - --CC ?= gcc --AR ?= ar --RANLIB ?= ranlib --DLLTOOL ?= dlltool -+CC := x86_64-w64-mingw32-gcc -+AR := x86_64-w64-mingw32-ar -+RANLIB := x86_64-w64-mingw32-ranlib -+DLLTOOL := x86_64-w64-mingw32-dlltool - - MKDIR_P = mkdir -p - INSTALL = install -c -@@ -19,10 +19,10 @@ RM = rm -f - DEFAULT_LIBICONV_DLL ?= \"\" - - CFLAGS += -pedantic -Wall --CFLAGS += -DUSE_LIBICONV_DLL -+#CFLAGS += -DUSE_LIBICONV_DLL - CFLAGS += -DDEFAULT_LIBICONV_DLL=$(DEFAULT_LIBICONV_DLL) - --prefix ?= /usr/local -+prefix ?= /opt/win-iconv-64 - BINARY_PATH = $(prefix)/bin - INCLUDE_PATH = $(prefix)/include - LIBRARY_PATH = $(prefix)/lib From d5934f9e3d0a5e0088609bfce9f1eb995bd670da Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Thu, 5 Jun 2025 21:15:49 +0200 Subject: [PATCH 36/95] - Fix memory leak in python bridge - Fix Python header validation in Makefile - Improve some tunings --- Python/generic_hash_mp.py | 10 +-- Python/generic_hash_sp.py | 16 ++--- src/bridges/bridge_python_generic_hash_mp.c | 58 ++++++++--------- src/bridges/bridge_python_generic_hash_sp.c | 65 ++++++++++---------- src/bridges/bridge_python_generic_hash_sp.mk | 29 +++++++-- tunings/Module_08900.hctune | 1 + tunings/Module_09300.hctune | 1 + tunings/Module_15700.hctune | 1 + tunings/Module_22700.hctune | 1 + tunings/Module_27700.hctune | 1 + tunings/Module_28200.hctune | 1 + tunings/Module_29800.hctune | 1 + 12 files changed, 99 insertions(+), 86 deletions(-) diff --git a/Python/generic_hash_mp.py b/Python/generic_hash_mp.py index 537491b5a..44003bdd3 100644 --- a/Python/generic_hash_mp.py +++ b/Python/generic_hash_mp.py @@ -47,11 +47,11 @@ def term(ctx): # Read passwords from stdin if __name__ == '__main__': - ctx = { - "salts_buf": bytes(568), - "esalts_buf": bytes(131080), - "st_salts_buf": bytes(568), - "st_esalts_buf": bytes(131080) + ctx = { + "salts_buf": bytes(568), + "esalts_buf": bytes(131080), + "st_salts_buf": bytes(568), + "st_esalts_buf": bytes(131080) } init(ctx) hashcat_passwords = 256 diff --git a/Python/generic_hash_sp.py b/Python/generic_hash_sp.py index e49db9577..76cc13f5b 100644 --- a/Python/generic_hash_sp.py +++ b/Python/generic_hash_sp.py @@ -11,9 +11,9 @@ ST_PASS = "hashcat" def calc_hash(password: bytes, salt: dict) -> str: salt_buf = hcshared.get_salt_buf(salt) - hash = hashlib.sha256(salt_buf + password) - for i in range(10000): - hash = hashlib.sha256(hash.digest()) + hash = hashlib.sha256(salt_buf + password) + for i in range(10000): + hash = hashlib.sha256(hash.digest()) return hash.hexdigest() # ...except when using an esalt. The esalt void* structure is both dynamic and specific to a hash mode. @@ -47,11 +47,11 @@ def term(ctx): # Read passwords from stdin if __name__ == '__main__': - ctx = { - "salts_buf": bytes(568), - "esalts_buf": bytes(131080), - "st_salts_buf": bytes(568), - "st_esalts_buf": bytes(131080) + ctx = { + "salts_buf": bytes(568), + "esalts_buf": bytes(131080), + "st_salts_buf": bytes(568), + "st_esalts_buf": bytes(131080) } init(ctx) hashcat_passwords = 256 diff --git a/src/bridges/bridge_python_generic_hash_mp.c b/src/bridges/bridge_python_generic_hash_mp.c index 4e3d5d49c..6ff1edc98 100644 --- a/src/bridges/bridge_python_generic_hash_mp.c +++ b/src/bridges/bridge_python_generic_hash_mp.c @@ -702,8 +702,8 @@ void *platform_init (user_options_t *user_options) PyObject *sys = python->PyImport_ImportModule ("sys"); PyObject *path = python->PyObject_GetAttrString (sys, "path"); python->PyList_Append (path, python->PyUnicode_FromString ("./Python")); - //python->Py_DecRef (path); - //python->Py_DecRef (sys); + python->Py_DecRef (path); + python->Py_DecRef (sys); if (units_init (python_interpreter) == false) { @@ -740,7 +740,7 @@ void *platform_init (user_options_t *user_options) return false; } - //python->Py_DecRef (pName); + python->Py_DecRef (pName); unit_buf->pFunc_Init = python->PyObject_GetAttrString (unit_buf->pModule, "init"); @@ -810,12 +810,12 @@ void platform_term (void *platform_context) unit_buf->gstate = python->PyGILState_Ensure (); - //python->Py_DecRef (unit_buf->pFunc_kernel_loop); - //python->Py_DecRef (unit_buf->pFunc_Term); - //python->Py_DecRef (unit_buf->pFunc_Init); - //python->Py_DecRef (unit_buf->pModule); - //python->Py_DecRef (unit_buf->pContext); - //python->Py_DecRef (unit_buf->pArgs); + python->Py_DecRef (unit_buf->pArgs); + python->Py_DecRef (unit_buf->pContext); + python->Py_DecRef (unit_buf->pFunc_kernel_loop); + python->Py_DecRef (unit_buf->pFunc_Term); + python->Py_DecRef (unit_buf->pFunc_Init); + python->Py_DecRef (unit_buf->pModule); //python->PyEval_RestoreThread (python_interpreter->tstate); @@ -872,9 +872,16 @@ bool thread_init (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_pa python->PyTuple_SetItem (pArgs, 0, unit_buf->pContext); - python->PyObject_CallObject (unit_buf->pFunc_Init, pArgs); + PyObject *pReturn = python->PyObject_CallObject (unit_buf->pFunc_Init, pArgs); - //python->Py_DecRef (pArgs); + if (pReturn == NULL) + { + python->PyErr_Print (); + + return false; + } + + python->Py_DecRef (pReturn); python->PyGILState_Release (unit_buf->gstate); @@ -906,21 +913,6 @@ void thread_term (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_pa python->PyObject_CallObject (unit_buf->pFunc_Term, pArgs); - //python->Py_DecRef (pArgs); - - //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "salts_cnt")); - //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "salts_size")); - //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "salts_buf")); - //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "esalts_cnt")); - //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "esalts_size")); - //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "esalts_buf")); - //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "st_salts_cnt")); - //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "st_salts_size")); - //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "st_salts_buf")); - //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "st_esalts_cnt")); - //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "st_esalts_size")); - //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "st_esalts_buf")); - python->PyDict_DelItemString (unit_buf->pContext, "salts_cnt"); python->PyDict_DelItemString (unit_buf->pContext, "salts_size"); python->PyDict_DelItemString (unit_buf->pContext, "salts_buf"); @@ -995,8 +987,6 @@ bool launch_loop (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_pa python->PyList_SetItem (pws, i, pw); - // python->Py_DecRef (pw); - generic_io_tmp++; } @@ -1021,8 +1011,6 @@ bool launch_loop (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_pa return false; } - // python->Py_DecRef (pws); - Py_ssize_t retsz = python->PyList_Size (pReturn); if (retsz != (Py_ssize_t) pws_cnt) return false; @@ -1044,14 +1032,12 @@ bool launch_loop (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_pa generic_io_tmp->out_len = len; } - //python->Py_DecRef (hash); - generic_io_tmp++; } - //python->Py_DecRef (pReturn); + python->Py_DecRef (pReturn); - python->PyGILState_Release(unit_buf->gstate); + python->PyGILState_Release (unit_buf->gstate); return true; } @@ -1077,6 +1063,8 @@ const char *st_update_hash (MAYBE_UNUSED void *platform_context) const char *s = python->PyUnicode_AsUTF8 (constant); + python->Py_DecRef (constant); + python->PyGILState_Release (unit_buf->gstate); return s; @@ -1103,6 +1091,8 @@ const char *st_update_pass (MAYBE_UNUSED void *platform_context) const char *s = python->PyUnicode_AsUTF8 (constant); + python->Py_DecRef (constant); + python->PyGILState_Release (unit_buf->gstate); return s; diff --git a/src/bridges/bridge_python_generic_hash_sp.c b/src/bridges/bridge_python_generic_hash_sp.c index f2a31265c..98fd55fd0 100644 --- a/src/bridges/bridge_python_generic_hash_sp.c +++ b/src/bridges/bridge_python_generic_hash_sp.c @@ -769,8 +769,8 @@ bool thread_init (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_pa PyObject *sys = python->PyImport_ImportModule ("sys"); PyObject *path = python->PyObject_GetAttrString (sys, "path"); python->PyList_Append (path, python->PyUnicode_FromString ("./Python")); - //python->Py_DecRef (path); - //python->Py_DecRef (sys); + python->Py_DecRef (path); + python->Py_DecRef (sys); PyObject *pName = python->PyUnicode_DecodeFSDefault (python_interpreter->source_filename); @@ -790,7 +790,7 @@ bool thread_init (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_pa return false; } - //python->Py_DecRef (pName); + python->Py_DecRef (pName); unit_buf->pFunc_Init = python->PyObject_GetAttrString (unit_buf->pModule, "init"); @@ -863,7 +863,18 @@ bool thread_init (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_pa python->PyTuple_SetItem (pArgs, 0, unit_buf->pContext); - python->PyObject_CallObject (unit_buf->pFunc_Init, pArgs); + PyObject *pReturn = python->PyObject_CallObject (unit_buf->pFunc_Init, pArgs); + + if (pReturn == NULL) + { + python->PyErr_Print (); + + return false; + } + + python->Py_DecRef (pReturn); + + //python->Py_DecRef (pArgs); // for later calls @@ -893,19 +904,6 @@ void thread_term (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_pa hc_python_lib_t *python = python_interpreter->python; - //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "salts_cnt")); - //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "salts_size")); - //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "salts_buf")); - //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "esalts_cnt")); - //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "esalts_size")); - //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "esalts_buf")); - //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "st_salts_cnt")); - //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "st_salts_size")); - //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "st_salts_buf")); - //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "st_esalts_cnt")); - //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "st_esalts_size")); - //python->Py_DecRef (python->PyDict_GetItemString (unit_buf->pContext, "st_esalts_buf")); - python->PyDict_DelItemString (unit_buf->pContext, "salts_cnt"); python->PyDict_DelItemString (unit_buf->pContext, "salts_size"); python->PyDict_DelItemString (unit_buf->pContext, "salts_buf"); @@ -932,13 +930,14 @@ void thread_term (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_pa python->PyObject_CallObject (unit_buf->pFunc_Term, pArgs); - //python->Py_DecRef (pArgs); - //python->Py_DecRef (unit_buf->pFunc_kernel_loop); - //python->Py_DecRef (unit_buf->pFunc_Term); - //python->Py_DecRef (unit_buf->pFunc_Init); - //python->Py_DecRef (unit_buf->pModule); - //python->Py_DecRef (unit_buf->pContext); - //python->Py_DecRef (unit_buf->pArgs); + python->Py_DecRef (pArgs); + + python->Py_DecRef (unit_buf->pArgs); + python->Py_DecRef (unit_buf->pContext); + python->Py_DecRef (unit_buf->pFunc_kernel_loop); + python->Py_DecRef (unit_buf->pFunc_Term); + python->Py_DecRef (unit_buf->pFunc_Init); + python->Py_DecRef (unit_buf->pModule); python->Py_EndInterpreter (unit_buf->tstate); } @@ -1023,8 +1022,6 @@ bool launch_loop (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_pa return false; } - //python->Py_DecRef (pws); - Py_ssize_t retsz = python->PyList_Size (pReturn); if (retsz != (Py_ssize_t) pws_cnt) return false; @@ -1046,12 +1043,10 @@ bool launch_loop (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_pa generic_io_tmp->out_len = len; } - //python->Py_DecRef (hash); - generic_io_tmp++; } - //python->Py_DecRef (pReturn); + python->Py_DecRef (pReturn); return true; } @@ -1067,8 +1062,8 @@ const char *st_update_hash (MAYBE_UNUSED void *platform_context) PyObject *sys = python->PyImport_ImportModule ("sys"); PyObject *path = python->PyObject_GetAttrString (sys, "path"); python->PyList_Append (path, python->PyUnicode_FromString ("./Python")); - //python->Py_DecRef (path); - //python->Py_DecRef (sys); + python->Py_DecRef (path); + python->Py_DecRef (sys); PyObject *pName = python->PyUnicode_DecodeFSDefault (python_interpreter->source_filename); @@ -1103,6 +1098,8 @@ const char *st_update_hash (MAYBE_UNUSED void *platform_context) const char *s = python->PyUnicode_AsUTF8 (constant); + python->Py_DecRef (constant); + python_interpreter->thread_state = python->PyEval_SaveThread (); return s; @@ -1119,8 +1116,8 @@ const char *st_update_pass (MAYBE_UNUSED void *platform_context) PyObject *sys = python->PyImport_ImportModule ("sys"); PyObject *path = python->PyObject_GetAttrString (sys, "path"); python->PyList_Append (path, python->PyUnicode_FromString ("./Python")); - //python->Py_DecRef (path); - //python->Py_DecRef (sys); + python->Py_DecRef (path); + python->Py_DecRef (sys); PyObject *pName = python->PyUnicode_DecodeFSDefault (python_interpreter->source_filename); @@ -1155,6 +1152,8 @@ const char *st_update_pass (MAYBE_UNUSED void *platform_context) const char *s = python->PyUnicode_AsUTF8 (constant); + python->Py_DecRef (constant); + python_interpreter->thread_state = python->PyEval_SaveThread (); return s; diff --git a/src/bridges/bridge_python_generic_hash_sp.mk b/src/bridges/bridge_python_generic_hash_sp.mk index fb9586166..8438fe7cf 100644 --- a/src/bridges/bridge_python_generic_hash_sp.mk +++ b/src/bridges/bridge_python_generic_hash_sp.mk @@ -18,15 +18,32 @@ bridges/bridge_python_generic_hash_sp.$(BRIDGE_SUFFIX): src/bridges/bridge_pytho endif endif -PYTHON_INCLUDE_PATH := $(shell echo $(PYTHON_CONFIG_FLAGS_LINUX) | sed -n 's/-I\([^ ]*\).*/\1/p') -PYTHON_HAS_OWN_GIL := $(shell grep -r -q 'PyInterpreterConfig_OWN_GIL' $(PYTHON_INCLUDE_PATH) && echo yes || echo no) - ifeq ($(BRIDGE_SUFFIX),so) -ifeq ($(PYTHON_HAS_OWN_GIL),no) + +PYTHON_INCLUDE_PATH := $(shell echo "$(PYTHON_CFLAGS)" | sed -n 's/-I\([^ ]*\).*/\1/p') +PYTHON_HAS_OWN_GIL := $(shell grep -r -q 'PyInterpreterConfig_OWN_GIL' "$(PYTHON_INCLUDE_PATH)" && echo true || echo false) + +REPORTS_MISSING := false + +ifeq ($(PYTHON_INCLUDE_PATH),) + REPORTS_MISSING := true +endif + +ifeq ($(PYTHON_HAS_OWN_GIL),false) + REPORTS_MISSING := true +endif + +RED = \033[1;31m +RESET = \033[0m + +ifeq ($(REPORTS_MISSING),true) bridges/bridge_python_generic_hash_sp.so: @echo "" - @echo "WARNING: Skipping freethreaded plugin 70200: Python 3.12+ headers not found." - @echo " Please read 'docs/hashcat-python-plugin-requirements.md'." + @echo "$(RED)WARNING$(RESET): Skipping freethreaded plugin 70200: Python 3.12+ headers not found." + @echo " To use -m 70200, you must install the required Python headers." + @echo " Otherwise, you can safely ignore this warning." + @echo " For more information, see 'docs/hashcat-python-plugin-requirements.md'." @echo "" endif + endif diff --git a/tunings/Module_08900.hctune b/tunings/Module_08900.hctune index 08f468424..3ebbe7820 100644 --- a/tunings/Module_08900.hctune +++ b/tunings/Module_08900.hctune @@ -27,6 +27,7 @@ GeForce_GTX_1080 * 8900 1 15 GeForce_RTX_2080_Ti * 8900 1 68 A GeForce_RTX_3060_Ti * 8900 1 51 A GeForce_RTX_3070 * 8900 1 46 A +GeForce_RTX_3080_Ti_Laptop_GPU * 8900 1 46 A GeForce_RTX_3090 * 8900 1 82 A GeForce_RTX_3090_Ti * 8900 1 84 A GeForce_RTX_4090 * 8900 1 180 A diff --git a/tunings/Module_09300.hctune b/tunings/Module_09300.hctune index 7f7f2ba82..f1b448ca8 100644 --- a/tunings/Module_09300.hctune +++ b/tunings/Module_09300.hctune @@ -27,6 +27,7 @@ GeForce_GTX_1080 * 9300 1 256 GeForce_RTX_2080_Ti * 9300 1 528 A GeForce_RTX_3060_Ti * 9300 1 256 A GeForce_RTX_3070 * 9300 1 368 A +GeForce_RTX_3080_Ti_Laptop_GPU * 9300 1 272 A GeForce_RTX_3090 * 9300 1 984 A ALIAS_AMD_RX480 * 9300 1 232 A ALIAS_AMD_Vega64 * 9300 1 440 A diff --git a/tunings/Module_15700.hctune b/tunings/Module_15700.hctune index 11144ed0d..43bdcdd05 100644 --- a/tunings/Module_15700.hctune +++ b/tunings/Module_15700.hctune @@ -27,6 +27,7 @@ GeForce_GTX_1080 * 15700 1 28 GeForce_RTX_2080_Ti * 15700 1 68 A GeForce_RTX_3060_Ti * 15700 1 11 A GeForce_RTX_3070 * 15700 1 22 A +GeForce_RTX_3080_Ti_Laptop_GPU * 15700 1 22 A GeForce_RTX_3090 * 15700 1 82 A GeForce_RTX_3090_Ti * 15700 1 84 A GeForce_RTX_4090 * 15700 1 180 A diff --git a/tunings/Module_22700.hctune b/tunings/Module_22700.hctune index fe98fa6b4..7dc52c60c 100644 --- a/tunings/Module_22700.hctune +++ b/tunings/Module_22700.hctune @@ -27,6 +27,7 @@ GeForce_GTX_1080 * 22700 1 15 GeForce_RTX_2080_Ti * 22700 1 68 A GeForce_RTX_3060_Ti * 22700 1 51 A GeForce_RTX_3070 * 22700 1 46 A +GeForce_RTX_3080_Ti_Laptop_GPU * 22700 1 46 A GeForce_RTX_3090 * 22700 1 82 A GeForce_RTX_3090_Ti * 22700 1 84 A GeForce_RTX_4090 * 22700 1 180 A diff --git a/tunings/Module_27700.hctune b/tunings/Module_27700.hctune index f9450f336..637b9b084 100644 --- a/tunings/Module_27700.hctune +++ b/tunings/Module_27700.hctune @@ -27,6 +27,7 @@ GeForce_GTX_1080 * 27700 1 15 GeForce_RTX_2080_Ti * 27700 1 68 A GeForce_RTX_3060_Ti * 27700 1 51 A GeForce_RTX_3070 * 27700 1 46 A +GeForce_RTX_3080_Ti_Laptop_GPU * 27700 1 46 A GeForce_RTX_3090 * 27700 1 82 A GeForce_RTX_3090_Ti * 27700 1 84 A GeForce_RTX_4090 * 27700 1 180 A diff --git a/tunings/Module_28200.hctune b/tunings/Module_28200.hctune index c8f30c07d..32977504f 100644 --- a/tunings/Module_28200.hctune +++ b/tunings/Module_28200.hctune @@ -27,6 +27,7 @@ GeForce_GTX_1080 * 28200 1 15 GeForce_RTX_2080_Ti * 28200 1 68 A GeForce_RTX_3060_Ti * 28200 1 51 A GeForce_RTX_3070 * 28200 1 46 A +GeForce_RTX_3080_Ti_Laptop_GPU * 28200 1 46 A GeForce_RTX_3090 * 28200 1 82 A GeForce_RTX_3090_Ti * 28200 1 84 A GeForce_RTX_4090 * 28200 1 180 A diff --git a/tunings/Module_29800.hctune b/tunings/Module_29800.hctune index 869a9350b..ef7e70cab 100644 --- a/tunings/Module_29800.hctune +++ b/tunings/Module_29800.hctune @@ -26,6 +26,7 @@ GeForce_GTX_1070_Ti * 29800 1 14 GeForce_GTX_1080 * 29800 1 14 A GeForce_GTX_1080_Ti * 29800 1 20 A GeForce_RTX_2080_Ti * 29800 1 40 A +GeForce_RTX_3080_Ti_Laptop_GPU * 29800 1 23 A GeForce_RTX_3090 * 29800 1 82 A ALIAS_AMD_RX6900XT * 29800 1 28 A From c231b2ec5cd4c0ba46309ab25d27ee4aaa0b117c Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Fri, 6 Jun 2025 21:49:49 +0200 Subject: [PATCH 37/95] Refactored salsa_r() core code in all SCRYPT kernels Fantastic results on AMD GPUs via HIP Small improvements on NV GPUs as well --- OpenCL/m08900-pure.cl | 281 +++++++++++++++++++---------------------- OpenCL/m15700-pure.cl | 242 ++++++++++++++++++------------------ OpenCL/m22700-pure.cl | 281 +++++++++++++++++++---------------------- OpenCL/m24000-pure.cl | 255 +++++++++++++++++++------------------- OpenCL/m27700-pure.cl | 281 +++++++++++++++++++---------------------- OpenCL/m28200-pure.cl | 282 +++++++++++++++++++----------------------- OpenCL/m29800-pure.cl | 234 +++++++++++++++++------------------ 7 files changed, 864 insertions(+), 992 deletions(-) diff --git a/OpenCL/m08900-pure.cl b/OpenCL/m08900-pure.cl index b74b3d9c6..a16e80f9a 100644 --- a/OpenCL/m08900-pure.cl +++ b/OpenCL/m08900-pure.cl @@ -55,146 +55,146 @@ DECLSPEC uint4 hc_swap32_4 (uint4 v) #define STATE_CNT GET_STATE_CNT (SCRYPT_R) #define STATE_CNT4 (STATE_CNT / 4) -#define ADD_ROTATE_XOR(r,i1,i2,s) (r) ^= rotate ((i1) + (i2), (s)); - -#if defined IS_CUDA || defined IS_HIP - -#define SALSA20_2R() \ -{ \ - ADD_ROTATE_XOR (X1, X0, X3, 7); \ - ADD_ROTATE_XOR (X2, X1, X0, 9); \ - ADD_ROTATE_XOR (X3, X2, X1, 13); \ - ADD_ROTATE_XOR (X0, X3, X2, 18); \ - \ - X1 = make_uint4 (X1.w, X1.x, X1.y, X1.z); \ - X2 = make_uint4 (X2.z, X2.w, X2.x, X2.y); \ - X3 = make_uint4 (X3.y, X3.z, X3.w, X3.x); \ - \ - ADD_ROTATE_XOR (X3, X0, X1, 7); \ - ADD_ROTATE_XOR (X2, X3, X0, 9); \ - ADD_ROTATE_XOR (X1, X2, X3, 13); \ - ADD_ROTATE_XOR (X0, X1, X2, 18); \ - \ - X1 = make_uint4 (X1.y, X1.z, X1.w, X1.x); \ - X2 = make_uint4 (X2.z, X2.w, X2.x, X2.y); \ - X3 = make_uint4 (X3.w, X3.x, X3.y, X3.z); \ -} -#elif defined IS_METAL -#define SALSA20_2R() \ -{ \ - ADD_ROTATE_XOR (X1, X0, X3, 7); \ - ADD_ROTATE_XOR (X2, X1, X0, 9); \ - ADD_ROTATE_XOR (X3, X2, X1, 13); \ - ADD_ROTATE_XOR (X0, X3, X2, 18); \ - \ - X1 = X1.wxyz; \ - X2 = X2.zwxy; \ - X3 = X3.yzwx; \ - \ - ADD_ROTATE_XOR (X3, X0, X1, 7); \ - ADD_ROTATE_XOR (X2, X3, X0, 9); \ - ADD_ROTATE_XOR (X1, X2, X3, 13); \ - ADD_ROTATE_XOR (X0, X1, X2, 18); \ - \ - X1 = X1.yzwx; \ - X2 = X2.zwxy; \ - X3 = X3.wxyz; \ -} -#else -#define SALSA20_2R() \ -{ \ - ADD_ROTATE_XOR (X1, X0, X3, 7); \ - ADD_ROTATE_XOR (X2, X1, X0, 9); \ - ADD_ROTATE_XOR (X3, X2, X1, 13); \ - ADD_ROTATE_XOR (X0, X3, X2, 18); \ - \ - X1 = X1.s3012; \ - X2 = X2.s2301; \ - X3 = X3.s1230; \ - \ - ADD_ROTATE_XOR (X3, X0, X1, 7); \ - ADD_ROTATE_XOR (X2, X3, X0, 9); \ - ADD_ROTATE_XOR (X1, X2, X3, 13); \ - ADD_ROTATE_XOR (X0, X1, X2, 18); \ - \ - X1 = X1.s1230; \ - X2 = X2.s2301; \ - X3 = X3.s3012; \ -} -#endif - #define Coord(xd4,y,z) (((xd4) * ySIZE * zSIZE) + ((y) * zSIZE) + (z)) #define CO Coord(xd4,y,z) -DECLSPEC void salsa_r (PRIVATE_AS uint4 *TI) +DECLSPEC void salsa_r (PRIVATE_AS u32 *TI) { + u32 x[16]; + + for (int j = 0; j < 16; j++) x[j] = TI[STATE_CNT - 16 + j]; + + for (int i = 0; i < STATE_CNT; i += 16) + { + for (int j = 0; j < 16; j++) + { + x[j] ^= TI[i + j]; + } + + for (int j = 0; j < 16; j++) + { + TI[i + j] = x[j]; + } + + for (int r = 0; r < 4; r++) + { + u32 t0, t1, t2, t3; + + t0 = x[ 0] + x[12]; + t1 = x[ 1] + x[13]; + t2 = x[ 2] + x[14]; + t3 = x[ 3] + x[15]; + x[ 4] ^= hc_rotl32_S (t0, 7); + x[ 5] ^= hc_rotl32_S (t1, 7); + x[ 6] ^= hc_rotl32_S (t2, 7); + x[ 7] ^= hc_rotl32_S (t3, 7); + + t0 = x[ 4] + x[ 0]; + t1 = x[ 5] + x[ 1]; + t2 = x[ 6] + x[ 2]; + t3 = x[ 7] + x[ 3]; + x[ 8] ^= hc_rotl32_S (t0, 9); + x[ 9] ^= hc_rotl32_S (t1, 9); + x[10] ^= hc_rotl32_S (t2, 9); + x[11] ^= hc_rotl32_S (t3, 9); + + t0 = x[ 8] + x[ 4]; + t1 = x[ 9] + x[ 5]; + t2 = x[10] + x[ 6]; + t3 = x[11] + x[ 7]; + x[12] ^= hc_rotl32_S (t0, 13); + x[13] ^= hc_rotl32_S (t1, 13); + x[14] ^= hc_rotl32_S (t2, 13); + x[15] ^= hc_rotl32_S (t3, 13); + + t0 = x[12] + x[ 8]; + t1 = x[13] + x[ 9]; + t2 = x[14] + x[10]; + t3 = x[15] + x[11]; + x[ 0] ^= hc_rotl32_S (t0, 18); + x[ 1] ^= hc_rotl32_S (t1, 18); + x[ 2] ^= hc_rotl32_S (t2, 18); + x[ 3] ^= hc_rotl32_S (t3, 18); + + t0 = x[ 4]; x[ 4] = x[ 7]; x[ 7] = x[ 6]; x[ 6] = x[ 5]; x[ 5] = t0; + t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; + t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; + t0 = x[12]; x[12] = x[13]; x[13] = x[14]; x[14] = x[15]; x[15] = t0; + + t0 = x[ 0] + x[ 4]; + t1 = x[ 1] + x[ 5]; + t2 = x[ 2] + x[ 6]; + t3 = x[ 3] + x[ 7]; + x[12] ^= hc_rotl32_S (t0, 7); + x[13] ^= hc_rotl32_S (t1, 7); + x[14] ^= hc_rotl32_S (t2, 7); + x[15] ^= hc_rotl32_S (t3, 7); + + t0 = x[12] + x[ 0]; + t1 = x[13] + x[ 1]; + t2 = x[14] + x[ 2]; + t3 = x[15] + x[ 3]; + x[ 8] ^= hc_rotl32_S (t0, 9); + x[ 9] ^= hc_rotl32_S (t1, 9); + x[10] ^= hc_rotl32_S (t2, 9); + x[11] ^= hc_rotl32_S (t3, 9); + + t0 = x[ 8] + x[12]; + t1 = x[ 9] + x[13]; + t2 = x[10] + x[14]; + t3 = x[11] + x[15]; + x[ 4] ^= hc_rotl32_S (t0, 13); + x[ 5] ^= hc_rotl32_S (t1, 13); + x[ 6] ^= hc_rotl32_S (t2, 13); + x[ 7] ^= hc_rotl32_S (t3, 13); + + t0 = x[ 4] + x[ 8]; + t1 = x[ 5] + x[ 9]; + t2 = x[ 6] + x[10]; + t3 = x[ 7] + x[11]; + x[ 0] ^= hc_rotl32_S (t0, 18); + x[ 1] ^= hc_rotl32_S (t1, 18); + x[ 2] ^= hc_rotl32_S (t2, 18); + x[ 3] ^= hc_rotl32_S (t3, 18); + + t0 = x[ 4]; x[ 4] = x[ 5]; x[ 5] = x[ 6]; x[ 6] = x[ 7]; x[ 7] = t0; + t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; + t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; + t0 = x[15]; x[15] = x[14]; x[14] = x[13]; x[13] = x[12]; x[12] = t0; + } + + for (int j = 0; j < 16; j++) + { + x[j] += TI[i + j]; + } + + for (int j = 0; j < 16; j++) + { + TI[i + j] = x[j]; + } + } + #if SCRYPT_R > 1 - uint4 TT[STATE_CNT4 / 2]; + u32 TT[STATE_CNT / 2]; - for (int dst_off = 0, src_off = 4; src_off < STATE_CNT4; dst_off += 4, src_off += 8) + for (int dst_off = 0, src_off = 16; src_off < STATE_CNT; dst_off += 16, src_off += 32) { - TT[dst_off + 0] = TI[src_off + 0]; - TT[dst_off + 1] = TI[src_off + 1]; - TT[dst_off + 2] = TI[src_off + 2]; - TT[dst_off + 3] = TI[src_off + 3]; + for (int j = 0; j < 16; j++) TT[dst_off + j] = TI[src_off + j]; } - for (int dst_off = 4, src_off = 8; src_off < STATE_CNT4; dst_off += 4, src_off += 8) + for (int dst_off = 16, src_off = 32; src_off < STATE_CNT; dst_off += 16, src_off += 32) { - TI[dst_off + 0] = TI[src_off + 0]; - TI[dst_off + 1] = TI[src_off + 1]; - TI[dst_off + 2] = TI[src_off + 2]; - TI[dst_off + 3] = TI[src_off + 3]; + for (int j = 0; j < 16; j++) TI[dst_off + j] = TI[src_off + j]; } - for (int dst_off = STATE_CNT4 / 2, src_off = 0; dst_off < STATE_CNT4; dst_off += 4, src_off += 4) + for (int dst_off = STATE_CNT / 2, src_off = 0; dst_off < STATE_CNT; dst_off += 16, src_off += 16) { - TI[dst_off + 0] = TT[src_off + 0]; - TI[dst_off + 1] = TT[src_off + 1]; - TI[dst_off + 2] = TT[src_off + 2]; - TI[dst_off + 3] = TT[src_off + 3]; + for (int j = 0; j < 16; j++) TI[dst_off + j] = TT[src_off + j]; } #endif - uint4 R0 = TI[STATE_CNT4 - 4]; - uint4 R1 = TI[STATE_CNT4 - 3]; - uint4 R2 = TI[STATE_CNT4 - 2]; - uint4 R3 = TI[STATE_CNT4 - 1]; - - for (int i = 0; i < STATE_CNT4; i += 4) - { - uint4 Y0 = TI[i + 0]; - uint4 Y1 = TI[i + 1]; - uint4 Y2 = TI[i + 2]; - uint4 Y3 = TI[i + 3]; - - R0 = R0 ^ Y0; - R1 = R1 ^ Y1; - R2 = R2 ^ Y2; - R3 = R3 ^ Y3; - - uint4 X0 = R0; - uint4 X1 = R1; - uint4 X2 = R2; - uint4 X3 = R3; - - SALSA20_2R (); - SALSA20_2R (); - SALSA20_2R (); - SALSA20_2R (); - - R0 = R0 + X0; - R1 = R1 + X1; - R2 = R2 + X2; - R3 = R3 + X3; - - TI[i + 0] = R0; - TI[i + 1] = R1; - TI[i + 2] = R2; - TI[i + 3] = R3; - } } DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) @@ -217,35 +217,11 @@ DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL case 3: V = V3; break; } - #if SCRYPT_R > 1 - - uint4 TT[STATE_CNT4]; - - for (int z = 0; z < zSIZE; z++) TT[z] = X[z]; - - for (int dst_off = 8, src_off = 4; dst_off < zSIZE; dst_off += 8, src_off += 4) - { - X[dst_off + 0] = TT[src_off + 0]; - X[dst_off + 1] = TT[src_off + 1]; - X[dst_off + 2] = TT[src_off + 2]; - X[dst_off + 3] = TT[src_off + 3]; - } - - for (int dst_off = 4, src_off = zSIZE / 2; dst_off < zSIZE; dst_off += 8, src_off += 4) - { - X[dst_off + 0] = TT[src_off + 0]; - X[dst_off + 1] = TT[src_off + 1]; - X[dst_off + 2] = TT[src_off + 2]; - X[dst_off + 3] = TT[src_off + 3]; - } - - #endif - for (u32 y = 0; y < ySIZE; y++) { for (u32 z = 0; z < zSIZE; z++) V[CO] = X[z]; - for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r (X); + for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r ((u32 *) X); } } @@ -283,11 +259,11 @@ DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL for (u32 z = 0; z < zSIZE; z++) T[z] = V[CO]; - for (u32 i = 0; i < km; i++) salsa_r (T); + for (u32 i = 0; i < km; i++) salsa_r ((u32 *) T); for (u32 z = 0; z < zSIZE; z++) X[z] ^= T[z]; - salsa_r (X); + salsa_r ((u32 *) X); } } @@ -483,14 +459,10 @@ KERNEL_FQ void m08900_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) sha256_hmac_init_global_swap (&ctx, pws[gid].i, pws[gid].pw_len); - for (u32 i = 0; i < SCRYPT_CNT4; i += STATE_CNT4) + for (u32 l = 0; l < SCRYPT_CNT4; l += 4) { - for (u32 j = 0; j < (STATE_CNT4 * 2); j += 8) - { uint4 X[4]; - const u32 l = i + j + ((j >= STATE_CNT4) ? (4 - STATE_CNT4) : 0); - X[0] = tmps[gid].P[l + 0]; X[1] = tmps[gid].P[l + 1]; X[2] = tmps[gid].P[l + 2]; @@ -538,7 +510,6 @@ KERNEL_FQ void m08900_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) w3[3] = T[3].w; sha256_hmac_update_64 (&ctx, w0, w1, w2, w3, 64); - } } w0[0] = 1; diff --git a/OpenCL/m15700-pure.cl b/OpenCL/m15700-pure.cl index d435883ce..277b3d729 100644 --- a/OpenCL/m15700-pure.cl +++ b/OpenCL/m15700-pure.cl @@ -62,145 +62,145 @@ DECLSPEC uint4 hc_swap32_4 (uint4 v) #define STATE_CNT GET_STATE_CNT (SCRYPT_R) #define STATE_CNT4 (STATE_CNT / 4) -#define ADD_ROTATE_XOR(r,i1,i2,s) (r) ^= rotate ((i1) + (i2), (s)); - -#if defined IS_CUDA || defined IS_HIP - -#define SALSA20_2R() \ -{ \ - ADD_ROTATE_XOR (X1, X0, X3, 7); \ - ADD_ROTATE_XOR (X2, X1, X0, 9); \ - ADD_ROTATE_XOR (X3, X2, X1, 13); \ - ADD_ROTATE_XOR (X0, X3, X2, 18); \ - \ - X1 = make_uint4 (X1.w, X1.x, X1.y, X1.z); \ - X2 = make_uint4 (X2.z, X2.w, X2.x, X2.y); \ - X3 = make_uint4 (X3.y, X3.z, X3.w, X3.x); \ - \ - ADD_ROTATE_XOR (X3, X0, X1, 7); \ - ADD_ROTATE_XOR (X2, X3, X0, 9); \ - ADD_ROTATE_XOR (X1, X2, X3, 13); \ - ADD_ROTATE_XOR (X0, X1, X2, 18); \ - \ - X1 = make_uint4 (X1.y, X1.z, X1.w, X1.x); \ - X2 = make_uint4 (X2.z, X2.w, X2.x, X2.y); \ - X3 = make_uint4 (X3.w, X3.x, X3.y, X3.z); \ -} -#elif defined IS_METAL -#define SALSA20_2R() \ -{ \ - ADD_ROTATE_XOR (X1, X0, X3, 7); \ - ADD_ROTATE_XOR (X2, X1, X0, 9); \ - ADD_ROTATE_XOR (X3, X2, X1, 13); \ - ADD_ROTATE_XOR (X0, X3, X2, 18); \ - \ - X1 = X1.wxyz; \ - X2 = X2.zwxy; \ - X3 = X3.yzwx; \ - \ - ADD_ROTATE_XOR (X3, X0, X1, 7); \ - ADD_ROTATE_XOR (X2, X3, X0, 9); \ - ADD_ROTATE_XOR (X1, X2, X3, 13); \ - ADD_ROTATE_XOR (X0, X1, X2, 18); \ - \ - X1 = X1.yzwx; \ - X2 = X2.zwxy; \ - X3 = X3.wxyz; \ -} -#else -#define SALSA20_2R() \ -{ \ - ADD_ROTATE_XOR (X1, X0, X3, 7); \ - ADD_ROTATE_XOR (X2, X1, X0, 9); \ - ADD_ROTATE_XOR (X3, X2, X1, 13); \ - ADD_ROTATE_XOR (X0, X3, X2, 18); \ - \ - X1 = X1.s3012; \ - X2 = X2.s2301; \ - X3 = X3.s1230; \ - \ - ADD_ROTATE_XOR (X3, X0, X1, 7); \ - ADD_ROTATE_XOR (X2, X3, X0, 9); \ - ADD_ROTATE_XOR (X1, X2, X3, 13); \ - ADD_ROTATE_XOR (X0, X1, X2, 18); \ - \ - X1 = X1.s1230; \ - X2 = X2.s2301; \ - X3 = X3.s3012; \ -} -#endif - #define Coord(xd4,y,z) (((xd4) * ySIZE * zSIZE) + ((y) * zSIZE) + (z)) #define CO Coord(xd4,y,z) -DECLSPEC void salsa_r (PRIVATE_AS uint4 *TI) + +DECLSPEC void salsa_r (PRIVATE_AS u32 *TI) { #if SCRYPT_R > 1 - uint4 TT[STATE_CNT4 / 2]; + u32 TT[STATE_CNT / 2]; - for (int dst_off = 0, src_off = 4; src_off < STATE_CNT4; dst_off += 4, src_off += 8) + for (int dst_off = 0, src_off = 16; src_off < STATE_CNT; dst_off += 16, src_off += 32) { - TT[dst_off + 0] = TI[src_off + 0]; - TT[dst_off + 1] = TI[src_off + 1]; - TT[dst_off + 2] = TI[src_off + 2]; - TT[dst_off + 3] = TI[src_off + 3]; + for (int j = 0; j < 16; j++) TT[dst_off + j] = TI[src_off + j]; } - for (int dst_off = 4, src_off = 8; src_off < STATE_CNT4; dst_off += 4, src_off += 8) + for (int dst_off = 16, src_off = 32; src_off < STATE_CNT; dst_off += 16, src_off += 32) { - TI[dst_off + 0] = TI[src_off + 0]; - TI[dst_off + 1] = TI[src_off + 1]; - TI[dst_off + 2] = TI[src_off + 2]; - TI[dst_off + 3] = TI[src_off + 3]; + for (int j = 0; j < 16; j++) TI[dst_off + j] = TI[src_off + j]; } - for (int dst_off = STATE_CNT4 / 2, src_off = 0; dst_off < STATE_CNT4; dst_off += 4, src_off += 4) + for (int dst_off = STATE_CNT / 2, src_off = 0; dst_off < STATE_CNT; dst_off += 16, src_off += 16) { - TI[dst_off + 0] = TT[src_off + 0]; - TI[dst_off + 1] = TT[src_off + 1]; - TI[dst_off + 2] = TT[src_off + 2]; - TI[dst_off + 3] = TT[src_off + 3]; + for (int j = 0; j < 16; j++) TI[dst_off + j] = TT[src_off + j]; } #endif - uint4 R0 = TI[STATE_CNT4 - 4]; - uint4 R1 = TI[STATE_CNT4 - 3]; - uint4 R2 = TI[STATE_CNT4 - 2]; - uint4 R3 = TI[STATE_CNT4 - 1]; + u32 x[16]; - for (int i = 0; i < STATE_CNT4; i += 4) + for (int j = 0; j < 16; j++) x[j] = TI[STATE_CNT - 16 + j]; + + for (int i = 0; i < STATE_CNT; i += 16) { - uint4 Y0 = TI[i + 0]; - uint4 Y1 = TI[i + 1]; - uint4 Y2 = TI[i + 2]; - uint4 Y3 = TI[i + 3]; + for (int j = 0; j < 16; j++) + { + x[j] ^= TI[i + j]; + } - R0 = R0 ^ Y0; - R1 = R1 ^ Y1; - R2 = R2 ^ Y2; - R3 = R3 ^ Y3; + for (int j = 0; j < 16; j++) + { + TI[i + j] = x[j]; + } - uint4 X0 = R0; - uint4 X1 = R1; - uint4 X2 = R2; - uint4 X3 = R3; + for (int r = 0; r < 4; r++) + { + u32 t0, t1, t2, t3; - SALSA20_2R (); - SALSA20_2R (); - SALSA20_2R (); - SALSA20_2R (); + t0 = x[ 0] + x[12]; + t1 = x[ 1] + x[13]; + t2 = x[ 2] + x[14]; + t3 = x[ 3] + x[15]; + x[ 4] ^= hc_rotl32_S (t0, 7); + x[ 5] ^= hc_rotl32_S (t1, 7); + x[ 6] ^= hc_rotl32_S (t2, 7); + x[ 7] ^= hc_rotl32_S (t3, 7); - R0 = R0 + X0; - R1 = R1 + X1; - R2 = R2 + X2; - R3 = R3 + X3; + t0 = x[ 4] + x[ 0]; + t1 = x[ 5] + x[ 1]; + t2 = x[ 6] + x[ 2]; + t3 = x[ 7] + x[ 3]; + x[ 8] ^= hc_rotl32_S (t0, 9); + x[ 9] ^= hc_rotl32_S (t1, 9); + x[10] ^= hc_rotl32_S (t2, 9); + x[11] ^= hc_rotl32_S (t3, 9); - TI[i + 0] = R0; - TI[i + 1] = R1; - TI[i + 2] = R2; - TI[i + 3] = R3; + t0 = x[ 8] + x[ 4]; + t1 = x[ 9] + x[ 5]; + t2 = x[10] + x[ 6]; + t3 = x[11] + x[ 7]; + x[12] ^= hc_rotl32_S (t0, 13); + x[13] ^= hc_rotl32_S (t1, 13); + x[14] ^= hc_rotl32_S (t2, 13); + x[15] ^= hc_rotl32_S (t3, 13); + + t0 = x[12] + x[ 8]; + t1 = x[13] + x[ 9]; + t2 = x[14] + x[10]; + t3 = x[15] + x[11]; + x[ 0] ^= hc_rotl32_S (t0, 18); + x[ 1] ^= hc_rotl32_S (t1, 18); + x[ 2] ^= hc_rotl32_S (t2, 18); + x[ 3] ^= hc_rotl32_S (t3, 18); + + t0 = x[ 4]; x[ 4] = x[ 7]; x[ 7] = x[ 6]; x[ 6] = x[ 5]; x[ 5] = t0; + t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; + t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; + t0 = x[12]; x[12] = x[13]; x[13] = x[14]; x[14] = x[15]; x[15] = t0; + + t0 = x[ 0] + x[ 4]; + t1 = x[ 1] + x[ 5]; + t2 = x[ 2] + x[ 6]; + t3 = x[ 3] + x[ 7]; + x[12] ^= hc_rotl32_S (t0, 7); + x[13] ^= hc_rotl32_S (t1, 7); + x[14] ^= hc_rotl32_S (t2, 7); + x[15] ^= hc_rotl32_S (t3, 7); + + t0 = x[12] + x[ 0]; + t1 = x[13] + x[ 1]; + t2 = x[14] + x[ 2]; + t3 = x[15] + x[ 3]; + x[ 8] ^= hc_rotl32_S (t0, 9); + x[ 9] ^= hc_rotl32_S (t1, 9); + x[10] ^= hc_rotl32_S (t2, 9); + x[11] ^= hc_rotl32_S (t3, 9); + + t0 = x[ 8] + x[12]; + t1 = x[ 9] + x[13]; + t2 = x[10] + x[14]; + t3 = x[11] + x[15]; + x[ 4] ^= hc_rotl32_S (t0, 13); + x[ 5] ^= hc_rotl32_S (t1, 13); + x[ 6] ^= hc_rotl32_S (t2, 13); + x[ 7] ^= hc_rotl32_S (t3, 13); + + t0 = x[ 4] + x[ 8]; + t1 = x[ 5] + x[ 9]; + t2 = x[ 6] + x[10]; + t3 = x[ 7] + x[11]; + x[ 0] ^= hc_rotl32_S (t0, 18); + x[ 1] ^= hc_rotl32_S (t1, 18); + x[ 2] ^= hc_rotl32_S (t2, 18); + x[ 3] ^= hc_rotl32_S (t3, 18); + + t0 = x[ 4]; x[ 4] = x[ 5]; x[ 5] = x[ 6]; x[ 6] = x[ 7]; x[ 7] = t0; + t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; + t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; + t0 = x[15]; x[15] = x[14]; x[14] = x[13]; x[13] = x[12]; x[12] = t0; + } + + for (int j = 0; j < 16; j++) + { + x[j] += TI[i + j]; + } + + for (int j = 0; j < 16; j++) + { + TI[i + j] = x[j]; + } } } @@ -252,7 +252,7 @@ DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL { for (u32 z = 0; z < zSIZE; z++) V[CO] = X[z]; - for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r (X); + for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r ((u32 *) X); } } @@ -290,11 +290,11 @@ DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL for (u32 z = 0; z < zSIZE; z++) T[z] = V[CO]; - for (u32 i = 0; i < km; i++) salsa_r (T); + for (u32 i = 0; i < km; i++) salsa_r ((u32 *) T); for (u32 z = 0; z < zSIZE; z++) X[z] ^= T[z]; - salsa_r (X); + salsa_r ((u32 *) X); } } @@ -619,15 +619,10 @@ KERNEL_FQ void m15700_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, ethereum_scrypt_ sha256_hmac_init_global_swap (&ctx, pws[gid].i, pws[gid].pw_len); - - for (u32 i = 0; i < SCRYPT_CNT4; i += STATE_CNT4) + for (u32 l = 0; l < SCRYPT_CNT4; l += 4) { - for (u32 j = 0; j < (STATE_CNT4 * 2); j += 8) - { uint4 X[4]; - const u32 l = i + j + ((j >= STATE_CNT4) ? (4 - STATE_CNT4) : 0); - X[0] = tmps[gid].P[l + 0]; X[1] = tmps[gid].P[l + 1]; X[2] = tmps[gid].P[l + 2]; @@ -675,7 +670,6 @@ KERNEL_FQ void m15700_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, ethereum_scrypt_ w3[3] = T[3].w; sha256_hmac_update_64 (&ctx, w0, w1, w2, w3, 64); - } } w0[0] = 1; diff --git a/OpenCL/m22700-pure.cl b/OpenCL/m22700-pure.cl index 303e5e334..291e44acc 100644 --- a/OpenCL/m22700-pure.cl +++ b/OpenCL/m22700-pure.cl @@ -103,146 +103,146 @@ DECLSPEC uint4 hc_swap32_4 (uint4 v) #define STATE_CNT GET_STATE_CNT (SCRYPT_R) #define STATE_CNT4 (STATE_CNT / 4) -#define ADD_ROTATE_XOR(r,i1,i2,s) (r) ^= rotate ((i1) + (i2), (s)); - -#if defined IS_CUDA || defined IS_HIP - -#define SALSA20_2R() \ -{ \ - ADD_ROTATE_XOR (X1, X0, X3, 7); \ - ADD_ROTATE_XOR (X2, X1, X0, 9); \ - ADD_ROTATE_XOR (X3, X2, X1, 13); \ - ADD_ROTATE_XOR (X0, X3, X2, 18); \ - \ - X1 = make_uint4 (X1.w, X1.x, X1.y, X1.z); \ - X2 = make_uint4 (X2.z, X2.w, X2.x, X2.y); \ - X3 = make_uint4 (X3.y, X3.z, X3.w, X3.x); \ - \ - ADD_ROTATE_XOR (X3, X0, X1, 7); \ - ADD_ROTATE_XOR (X2, X3, X0, 9); \ - ADD_ROTATE_XOR (X1, X2, X3, 13); \ - ADD_ROTATE_XOR (X0, X1, X2, 18); \ - \ - X1 = make_uint4 (X1.y, X1.z, X1.w, X1.x); \ - X2 = make_uint4 (X2.z, X2.w, X2.x, X2.y); \ - X3 = make_uint4 (X3.w, X3.x, X3.y, X3.z); \ -} -#elif defined IS_METAL -#define SALSA20_2R() \ -{ \ - ADD_ROTATE_XOR (X1, X0, X3, 7); \ - ADD_ROTATE_XOR (X2, X1, X0, 9); \ - ADD_ROTATE_XOR (X3, X2, X1, 13); \ - ADD_ROTATE_XOR (X0, X3, X2, 18); \ - \ - X1 = X1.wxyz; \ - X2 = X2.zwxy; \ - X3 = X3.yzwx; \ - \ - ADD_ROTATE_XOR (X3, X0, X1, 7); \ - ADD_ROTATE_XOR (X2, X3, X0, 9); \ - ADD_ROTATE_XOR (X1, X2, X3, 13); \ - ADD_ROTATE_XOR (X0, X1, X2, 18); \ - \ - X1 = X1.yzwx; \ - X2 = X2.zwxy; \ - X3 = X3.wxyz; \ -} -#else -#define SALSA20_2R() \ -{ \ - ADD_ROTATE_XOR (X1, X0, X3, 7); \ - ADD_ROTATE_XOR (X2, X1, X0, 9); \ - ADD_ROTATE_XOR (X3, X2, X1, 13); \ - ADD_ROTATE_XOR (X0, X3, X2, 18); \ - \ - X1 = X1.s3012; \ - X2 = X2.s2301; \ - X3 = X3.s1230; \ - \ - ADD_ROTATE_XOR (X3, X0, X1, 7); \ - ADD_ROTATE_XOR (X2, X3, X0, 9); \ - ADD_ROTATE_XOR (X1, X2, X3, 13); \ - ADD_ROTATE_XOR (X0, X1, X2, 18); \ - \ - X1 = X1.s1230; \ - X2 = X2.s2301; \ - X3 = X3.s3012; \ -} -#endif - #define Coord(xd4,y,z) (((xd4) * ySIZE * zSIZE) + ((y) * zSIZE) + (z)) #define CO Coord(xd4,y,z) -DECLSPEC void salsa_r (PRIVATE_AS uint4 *TI) +DECLSPEC void salsa_r (PRIVATE_AS u32 *TI) { + u32 x[16]; + + for (int j = 0; j < 16; j++) x[j] = TI[STATE_CNT - 16 + j]; + + for (int i = 0; i < STATE_CNT; i += 16) + { + for (int j = 0; j < 16; j++) + { + x[j] ^= TI[i + j]; + } + + for (int j = 0; j < 16; j++) + { + TI[i + j] = x[j]; + } + + for (int r = 0; r < 4; r++) + { + u32 t0, t1, t2, t3; + + t0 = x[ 0] + x[12]; + t1 = x[ 1] + x[13]; + t2 = x[ 2] + x[14]; + t3 = x[ 3] + x[15]; + x[ 4] ^= hc_rotl32_S (t0, 7); + x[ 5] ^= hc_rotl32_S (t1, 7); + x[ 6] ^= hc_rotl32_S (t2, 7); + x[ 7] ^= hc_rotl32_S (t3, 7); + + t0 = x[ 4] + x[ 0]; + t1 = x[ 5] + x[ 1]; + t2 = x[ 6] + x[ 2]; + t3 = x[ 7] + x[ 3]; + x[ 8] ^= hc_rotl32_S (t0, 9); + x[ 9] ^= hc_rotl32_S (t1, 9); + x[10] ^= hc_rotl32_S (t2, 9); + x[11] ^= hc_rotl32_S (t3, 9); + + t0 = x[ 8] + x[ 4]; + t1 = x[ 9] + x[ 5]; + t2 = x[10] + x[ 6]; + t3 = x[11] + x[ 7]; + x[12] ^= hc_rotl32_S (t0, 13); + x[13] ^= hc_rotl32_S (t1, 13); + x[14] ^= hc_rotl32_S (t2, 13); + x[15] ^= hc_rotl32_S (t3, 13); + + t0 = x[12] + x[ 8]; + t1 = x[13] + x[ 9]; + t2 = x[14] + x[10]; + t3 = x[15] + x[11]; + x[ 0] ^= hc_rotl32_S (t0, 18); + x[ 1] ^= hc_rotl32_S (t1, 18); + x[ 2] ^= hc_rotl32_S (t2, 18); + x[ 3] ^= hc_rotl32_S (t3, 18); + + t0 = x[ 4]; x[ 4] = x[ 7]; x[ 7] = x[ 6]; x[ 6] = x[ 5]; x[ 5] = t0; + t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; + t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; + t0 = x[12]; x[12] = x[13]; x[13] = x[14]; x[14] = x[15]; x[15] = t0; + + t0 = x[ 0] + x[ 4]; + t1 = x[ 1] + x[ 5]; + t2 = x[ 2] + x[ 6]; + t3 = x[ 3] + x[ 7]; + x[12] ^= hc_rotl32_S (t0, 7); + x[13] ^= hc_rotl32_S (t1, 7); + x[14] ^= hc_rotl32_S (t2, 7); + x[15] ^= hc_rotl32_S (t3, 7); + + t0 = x[12] + x[ 0]; + t1 = x[13] + x[ 1]; + t2 = x[14] + x[ 2]; + t3 = x[15] + x[ 3]; + x[ 8] ^= hc_rotl32_S (t0, 9); + x[ 9] ^= hc_rotl32_S (t1, 9); + x[10] ^= hc_rotl32_S (t2, 9); + x[11] ^= hc_rotl32_S (t3, 9); + + t0 = x[ 8] + x[12]; + t1 = x[ 9] + x[13]; + t2 = x[10] + x[14]; + t3 = x[11] + x[15]; + x[ 4] ^= hc_rotl32_S (t0, 13); + x[ 5] ^= hc_rotl32_S (t1, 13); + x[ 6] ^= hc_rotl32_S (t2, 13); + x[ 7] ^= hc_rotl32_S (t3, 13); + + t0 = x[ 4] + x[ 8]; + t1 = x[ 5] + x[ 9]; + t2 = x[ 6] + x[10]; + t3 = x[ 7] + x[11]; + x[ 0] ^= hc_rotl32_S (t0, 18); + x[ 1] ^= hc_rotl32_S (t1, 18); + x[ 2] ^= hc_rotl32_S (t2, 18); + x[ 3] ^= hc_rotl32_S (t3, 18); + + t0 = x[ 4]; x[ 4] = x[ 5]; x[ 5] = x[ 6]; x[ 6] = x[ 7]; x[ 7] = t0; + t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; + t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; + t0 = x[15]; x[15] = x[14]; x[14] = x[13]; x[13] = x[12]; x[12] = t0; + } + + for (int j = 0; j < 16; j++) + { + x[j] += TI[i + j]; + } + + for (int j = 0; j < 16; j++) + { + TI[i + j] = x[j]; + } + } + #if SCRYPT_R > 1 - uint4 TT[STATE_CNT4 / 2]; + u32 TT[STATE_CNT / 2]; - for (int dst_off = 0, src_off = 4; src_off < STATE_CNT4; dst_off += 4, src_off += 8) + for (int dst_off = 0, src_off = 16; src_off < STATE_CNT; dst_off += 16, src_off += 32) { - TT[dst_off + 0] = TI[src_off + 0]; - TT[dst_off + 1] = TI[src_off + 1]; - TT[dst_off + 2] = TI[src_off + 2]; - TT[dst_off + 3] = TI[src_off + 3]; + for (int j = 0; j < 16; j++) TT[dst_off + j] = TI[src_off + j]; } - for (int dst_off = 4, src_off = 8; src_off < STATE_CNT4; dst_off += 4, src_off += 8) + for (int dst_off = 16, src_off = 32; src_off < STATE_CNT; dst_off += 16, src_off += 32) { - TI[dst_off + 0] = TI[src_off + 0]; - TI[dst_off + 1] = TI[src_off + 1]; - TI[dst_off + 2] = TI[src_off + 2]; - TI[dst_off + 3] = TI[src_off + 3]; + for (int j = 0; j < 16; j++) TI[dst_off + j] = TI[src_off + j]; } - for (int dst_off = STATE_CNT4 / 2, src_off = 0; dst_off < STATE_CNT4; dst_off += 4, src_off += 4) + for (int dst_off = STATE_CNT / 2, src_off = 0; dst_off < STATE_CNT; dst_off += 16, src_off += 16) { - TI[dst_off + 0] = TT[src_off + 0]; - TI[dst_off + 1] = TT[src_off + 1]; - TI[dst_off + 2] = TT[src_off + 2]; - TI[dst_off + 3] = TT[src_off + 3]; + for (int j = 0; j < 16; j++) TI[dst_off + j] = TT[src_off + j]; } #endif - uint4 R0 = TI[STATE_CNT4 - 4]; - uint4 R1 = TI[STATE_CNT4 - 3]; - uint4 R2 = TI[STATE_CNT4 - 2]; - uint4 R3 = TI[STATE_CNT4 - 1]; - - for (int i = 0; i < STATE_CNT4; i += 4) - { - uint4 Y0 = TI[i + 0]; - uint4 Y1 = TI[i + 1]; - uint4 Y2 = TI[i + 2]; - uint4 Y3 = TI[i + 3]; - - R0 = R0 ^ Y0; - R1 = R1 ^ Y1; - R2 = R2 ^ Y2; - R3 = R3 ^ Y3; - - uint4 X0 = R0; - uint4 X1 = R1; - uint4 X2 = R2; - uint4 X3 = R3; - - SALSA20_2R (); - SALSA20_2R (); - SALSA20_2R (); - SALSA20_2R (); - - R0 = R0 + X0; - R1 = R1 + X1; - R2 = R2 + X2; - R3 = R3 + X3; - - TI[i + 0] = R0; - TI[i + 1] = R1; - TI[i + 2] = R2; - TI[i + 3] = R3; - } } DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) @@ -265,35 +265,11 @@ DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL case 3: V = V3; break; } - #if SCRYPT_R > 1 - - uint4 TT[STATE_CNT4]; - - for (int z = 0; z < zSIZE; z++) TT[z] = X[z]; - - for (int dst_off = 8, src_off = 4; dst_off < zSIZE; dst_off += 8, src_off += 4) - { - X[dst_off + 0] = TT[src_off + 0]; - X[dst_off + 1] = TT[src_off + 1]; - X[dst_off + 2] = TT[src_off + 2]; - X[dst_off + 3] = TT[src_off + 3]; - } - - for (int dst_off = 4, src_off = zSIZE / 2; dst_off < zSIZE; dst_off += 8, src_off += 4) - { - X[dst_off + 0] = TT[src_off + 0]; - X[dst_off + 1] = TT[src_off + 1]; - X[dst_off + 2] = TT[src_off + 2]; - X[dst_off + 3] = TT[src_off + 3]; - } - - #endif - for (u32 y = 0; y < ySIZE; y++) { for (u32 z = 0; z < zSIZE; z++) V[CO] = X[z]; - for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r (X); + for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r ((u32 *) X); } } @@ -331,11 +307,11 @@ DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL for (u32 z = 0; z < zSIZE; z++) T[z] = V[CO]; - for (u32 i = 0; i < km; i++) salsa_r (T); + for (u32 i = 0; i < km; i++) salsa_r ((u32 *) T); for (u32 z = 0; z < zSIZE; z++) X[z] ^= T[z]; - salsa_r (X); + salsa_r ((u32 *) X); } } @@ -621,14 +597,10 @@ KERNEL_FQ void m22700_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) u32 w2[4]; u32 w3[4]; - for (u32 i = 0; i < SCRYPT_CNT4; i += STATE_CNT4) + for (u32 l = 0; l < SCRYPT_CNT4; l += 4) { - for (u32 j = 0; j < (STATE_CNT4 * 2); j += 8) - { uint4 X[4]; - const u32 l = i + j + ((j >= STATE_CNT4) ? (4 - STATE_CNT4) : 0); - X[0] = tmps[gid].P[l + 0]; X[1] = tmps[gid].P[l + 1]; X[2] = tmps[gid].P[l + 2]; @@ -676,7 +648,6 @@ KERNEL_FQ void m22700_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) w3[3] = T[3].w; sha256_hmac_update_64 (&ctx, w0, w1, w2, w3, 64); - } } w0[0] = 1; diff --git a/OpenCL/m24000-pure.cl b/OpenCL/m24000-pure.cl index 37e219e2c..77afe5ef5 100644 --- a/OpenCL/m24000-pure.cl +++ b/OpenCL/m24000-pure.cl @@ -64,147 +64,142 @@ DECLSPEC uint4 hc_swap32_4 (uint4 v) #define STATE_CNT GET_STATE_CNT (SCRYPT_R) #define STATE_CNT4 (STATE_CNT / 4) -#define ADD_ROTATE_XOR(r,i1,i2,s) (r) ^= rotate ((i1) + (i2), (s)); - -#if defined IS_CUDA || defined IS_HIP - -#define SALSA20_2R() \ -{ \ - ADD_ROTATE_XOR (X1, X0, X3, 7); \ - ADD_ROTATE_XOR (X2, X1, X0, 9); \ - ADD_ROTATE_XOR (X3, X2, X1, 13); \ - ADD_ROTATE_XOR (X0, X3, X2, 18); \ - \ - X1 = make_uint4 (X1.w, X1.x, X1.y, X1.z); \ - X2 = make_uint4 (X2.z, X2.w, X2.x, X2.y); \ - X3 = make_uint4 (X3.y, X3.z, X3.w, X3.x); \ - \ - ADD_ROTATE_XOR (X3, X0, X1, 7); \ - ADD_ROTATE_XOR (X2, X3, X0, 9); \ - ADD_ROTATE_XOR (X1, X2, X3, 13); \ - ADD_ROTATE_XOR (X0, X1, X2, 18); \ - \ - X1 = make_uint4 (X1.y, X1.z, X1.w, X1.x); \ - X2 = make_uint4 (X2.z, X2.w, X2.x, X2.y); \ - X3 = make_uint4 (X3.w, X3.x, X3.y, X3.z); \ -} -#elif defined IS_METAL -#define SALSA20_2R() \ -{ \ - ADD_ROTATE_XOR (X1, X0, X3, 7); \ - ADD_ROTATE_XOR (X2, X1, X0, 9); \ - ADD_ROTATE_XOR (X3, X2, X1, 13); \ - ADD_ROTATE_XOR (X0, X3, X2, 18); \ - \ - X1 = X1.wxyz; \ - X2 = X2.zwxy; \ - X3 = X3.yzwx; \ - \ - ADD_ROTATE_XOR (X3, X0, X1, 7); \ - ADD_ROTATE_XOR (X2, X3, X0, 9); \ - ADD_ROTATE_XOR (X1, X2, X3, 13); \ - ADD_ROTATE_XOR (X0, X1, X2, 18); \ - \ - X1 = X1.yzwx; \ - X2 = X2.zwxy; \ - X3 = X3.wxyz; \ -} -#else -#define SALSA20_2R() \ -{ \ - ADD_ROTATE_XOR (X1, X0, X3, 7); \ - ADD_ROTATE_XOR (X2, X1, X0, 9); \ - ADD_ROTATE_XOR (X3, X2, X1, 13); \ - ADD_ROTATE_XOR (X0, X3, X2, 18); \ - \ - X1 = X1.s3012; \ - X2 = X2.s2301; \ - X3 = X3.s1230; \ - \ - ADD_ROTATE_XOR (X3, X0, X1, 7); \ - ADD_ROTATE_XOR (X2, X3, X0, 9); \ - ADD_ROTATE_XOR (X1, X2, X3, 13); \ - ADD_ROTATE_XOR (X0, X1, X2, 18); \ - \ - X1 = X1.s1230; \ - X2 = X2.s2301; \ - X3 = X3.s3012; \ -} -#endif - -#define SALSA20_8_XOR() \ -{ \ - R0 = R0 ^ Y0; \ - R1 = R1 ^ Y1; \ - R2 = R2 ^ Y2; \ - R3 = R3 ^ Y3; \ - \ - uint4 X0 = R0; \ - uint4 X1 = R1; \ - uint4 X2 = R2; \ - uint4 X3 = R3; \ - \ - SALSA20_2R (); \ - SALSA20_2R (); \ - SALSA20_2R (); \ - SALSA20_2R (); \ - \ - R0 = R0 + X0; \ - R1 = R1 + X1; \ - R2 = R2 + X2; \ - R3 = R3 + X3; \ -} - -DECLSPEC void salsa_r (PRIVATE_AS uint4 *TI) +DECLSPEC void salsa_r (PRIVATE_AS u32 *TI) { - uint4 R0 = TI[STATE_CNT4 - 4]; - uint4 R1 = TI[STATE_CNT4 - 3]; - uint4 R2 = TI[STATE_CNT4 - 2]; - uint4 R3 = TI[STATE_CNT4 - 1]; + u32 x[16]; - uint4 TO[STATE_CNT4]; + for (int j = 0; j < 16; j++) x[j] = TI[STATE_CNT - 16 + j]; - int idx_y = 0; - int idx_r1 = 0; - int idx_r2 = SCRYPT_R * 4; - - for (int i = 0; i < SCRYPT_R; i++) + for (int i = 0; i < STATE_CNT; i += 16) { - uint4 Y0; - uint4 Y1; - uint4 Y2; - uint4 Y3; + for (int j = 0; j < 16; j++) + { + x[j] ^= TI[i + j]; + } - Y0 = TI[idx_y++]; - Y1 = TI[idx_y++]; - Y2 = TI[idx_y++]; - Y3 = TI[idx_y++]; + for (int j = 0; j < 16; j++) + { + TI[i + j] = x[j]; + } - SALSA20_8_XOR (); + for (int r = 0; r < 4; r++) + { + u32 t0, t1, t2, t3; - TO[idx_r1++] = R0; - TO[idx_r1++] = R1; - TO[idx_r1++] = R2; - TO[idx_r1++] = R3; + t0 = x[ 0] + x[12]; + t1 = x[ 1] + x[13]; + t2 = x[ 2] + x[14]; + t3 = x[ 3] + x[15]; + x[ 4] ^= hc_rotl32_S (t0, 7); + x[ 5] ^= hc_rotl32_S (t1, 7); + x[ 6] ^= hc_rotl32_S (t2, 7); + x[ 7] ^= hc_rotl32_S (t3, 7); - Y0 = TI[idx_y++]; - Y1 = TI[idx_y++]; - Y2 = TI[idx_y++]; - Y3 = TI[idx_y++]; + t0 = x[ 4] + x[ 0]; + t1 = x[ 5] + x[ 1]; + t2 = x[ 6] + x[ 2]; + t3 = x[ 7] + x[ 3]; + x[ 8] ^= hc_rotl32_S (t0, 9); + x[ 9] ^= hc_rotl32_S (t1, 9); + x[10] ^= hc_rotl32_S (t2, 9); + x[11] ^= hc_rotl32_S (t3, 9); - SALSA20_8_XOR (); + t0 = x[ 8] + x[ 4]; + t1 = x[ 9] + x[ 5]; + t2 = x[10] + x[ 6]; + t3 = x[11] + x[ 7]; + x[12] ^= hc_rotl32_S (t0, 13); + x[13] ^= hc_rotl32_S (t1, 13); + x[14] ^= hc_rotl32_S (t2, 13); + x[15] ^= hc_rotl32_S (t3, 13); - TO[idx_r2++] = R0; - TO[idx_r2++] = R1; - TO[idx_r2++] = R2; - TO[idx_r2++] = R3; + t0 = x[12] + x[ 8]; + t1 = x[13] + x[ 9]; + t2 = x[14] + x[10]; + t3 = x[15] + x[11]; + x[ 0] ^= hc_rotl32_S (t0, 18); + x[ 1] ^= hc_rotl32_S (t1, 18); + x[ 2] ^= hc_rotl32_S (t2, 18); + x[ 3] ^= hc_rotl32_S (t3, 18); + + t0 = x[ 4]; x[ 4] = x[ 7]; x[ 7] = x[ 6]; x[ 6] = x[ 5]; x[ 5] = t0; + t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; + t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; + t0 = x[12]; x[12] = x[13]; x[13] = x[14]; x[14] = x[15]; x[15] = t0; + + t0 = x[ 0] + x[ 4]; + t1 = x[ 1] + x[ 5]; + t2 = x[ 2] + x[ 6]; + t3 = x[ 3] + x[ 7]; + x[12] ^= hc_rotl32_S (t0, 7); + x[13] ^= hc_rotl32_S (t1, 7); + x[14] ^= hc_rotl32_S (t2, 7); + x[15] ^= hc_rotl32_S (t3, 7); + + t0 = x[12] + x[ 0]; + t1 = x[13] + x[ 1]; + t2 = x[14] + x[ 2]; + t3 = x[15] + x[ 3]; + x[ 8] ^= hc_rotl32_S (t0, 9); + x[ 9] ^= hc_rotl32_S (t1, 9); + x[10] ^= hc_rotl32_S (t2, 9); + x[11] ^= hc_rotl32_S (t3, 9); + + t0 = x[ 8] + x[12]; + t1 = x[ 9] + x[13]; + t2 = x[10] + x[14]; + t3 = x[11] + x[15]; + x[ 4] ^= hc_rotl32_S (t0, 13); + x[ 5] ^= hc_rotl32_S (t1, 13); + x[ 6] ^= hc_rotl32_S (t2, 13); + x[ 7] ^= hc_rotl32_S (t3, 13); + + t0 = x[ 4] + x[ 8]; + t1 = x[ 5] + x[ 9]; + t2 = x[ 6] + x[10]; + t3 = x[ 7] + x[11]; + x[ 0] ^= hc_rotl32_S (t0, 18); + x[ 1] ^= hc_rotl32_S (t1, 18); + x[ 2] ^= hc_rotl32_S (t2, 18); + x[ 3] ^= hc_rotl32_S (t3, 18); + + t0 = x[ 4]; x[ 4] = x[ 5]; x[ 5] = x[ 6]; x[ 6] = x[ 7]; x[ 7] = t0; + t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; + t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; + t0 = x[15]; x[15] = x[14]; x[14] = x[13]; x[13] = x[12]; x[12] = t0; + } + + for (int j = 0; j < 16; j++) + { + x[j] += TI[i + j]; + } + + for (int j = 0; j < 16; j++) + { + TI[i + j] = x[j]; + } } - #pragma unroll - for (int i = 0; i < STATE_CNT4; i++) + #if SCRYPT_R > 1 + + u32 TT[STATE_CNT / 2]; + + for (int dst_off = 0, src_off = 16; src_off < STATE_CNT; dst_off += 16, src_off += 32) { - TI[i] = TO[i]; + for (int j = 0; j < 16; j++) TT[dst_off + j] = TI[src_off + j]; } + + for (int dst_off = 16, src_off = 32; src_off < STATE_CNT; dst_off += 16, src_off += 32) + { + for (int j = 0; j < 16; j++) TI[dst_off + j] = TI[src_off + j]; + } + + for (int dst_off = STATE_CNT / 2, src_off = 0; dst_off < STATE_CNT; dst_off += 16, src_off += 16) + { + for (int j = 0; j < 16; j++) TI[dst_off + j] = TT[src_off + j]; + } + + #endif } DECLSPEC void scrypt_smix (PRIVATE_AS uint4 *X, PRIVATE_AS uint4 *T, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) @@ -262,7 +257,7 @@ DECLSPEC void scrypt_smix (PRIVATE_AS uint4 *X, PRIVATE_AS uint4 *T, GLOBAL_AS u { for (u32 z = 0; z < zSIZE; z++) V[CO] = X[z]; - for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r (X); + for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r ((u32 *) X); } for (u32 i = 0; i < SCRYPT_N; i++) @@ -275,11 +270,11 @@ DECLSPEC void scrypt_smix (PRIVATE_AS uint4 *X, PRIVATE_AS uint4 *T, GLOBAL_AS u for (u32 z = 0; z < zSIZE; z++) T[z] = V[CO]; - for (u32 i = 0; i < km; i++) salsa_r (T); + for (u32 i = 0; i < km; i++) salsa_r ((u32 *) T); for (u32 z = 0; z < zSIZE; z++) X[z] ^= T[z]; - salsa_r (X); + salsa_r ((u32 *) X); } #ifdef _unroll diff --git a/OpenCL/m27700-pure.cl b/OpenCL/m27700-pure.cl index d9bf11510..42ee0974d 100644 --- a/OpenCL/m27700-pure.cl +++ b/OpenCL/m27700-pure.cl @@ -53,146 +53,146 @@ DECLSPEC uint4 hc_swap32_4 (uint4 v) #define STATE_CNT GET_STATE_CNT (SCRYPT_R) #define STATE_CNT4 (STATE_CNT / 4) -#define ADD_ROTATE_XOR(r,i1,i2,s) (r) ^= rotate ((i1) + (i2), (s)); - -#if defined IS_CUDA || defined IS_HIP - -#define SALSA20_2R() \ -{ \ - ADD_ROTATE_XOR (X1, X0, X3, 7); \ - ADD_ROTATE_XOR (X2, X1, X0, 9); \ - ADD_ROTATE_XOR (X3, X2, X1, 13); \ - ADD_ROTATE_XOR (X0, X3, X2, 18); \ - \ - X1 = make_uint4 (X1.w, X1.x, X1.y, X1.z); \ - X2 = make_uint4 (X2.z, X2.w, X2.x, X2.y); \ - X3 = make_uint4 (X3.y, X3.z, X3.w, X3.x); \ - \ - ADD_ROTATE_XOR (X3, X0, X1, 7); \ - ADD_ROTATE_XOR (X2, X3, X0, 9); \ - ADD_ROTATE_XOR (X1, X2, X3, 13); \ - ADD_ROTATE_XOR (X0, X1, X2, 18); \ - \ - X1 = make_uint4 (X1.y, X1.z, X1.w, X1.x); \ - X2 = make_uint4 (X2.z, X2.w, X2.x, X2.y); \ - X3 = make_uint4 (X3.w, X3.x, X3.y, X3.z); \ -} -#elif defined IS_METAL -#define SALSA20_2R() \ -{ \ - ADD_ROTATE_XOR (X1, X0, X3, 7); \ - ADD_ROTATE_XOR (X2, X1, X0, 9); \ - ADD_ROTATE_XOR (X3, X2, X1, 13); \ - ADD_ROTATE_XOR (X0, X3, X2, 18); \ - \ - X1 = X1.wxyz; \ - X2 = X2.zwxy; \ - X3 = X3.yzwx; \ - \ - ADD_ROTATE_XOR (X3, X0, X1, 7); \ - ADD_ROTATE_XOR (X2, X3, X0, 9); \ - ADD_ROTATE_XOR (X1, X2, X3, 13); \ - ADD_ROTATE_XOR (X0, X1, X2, 18); \ - \ - X1 = X1.yzwx; \ - X2 = X2.zwxy; \ - X3 = X3.wxyz; \ -} -#else -#define SALSA20_2R() \ -{ \ - ADD_ROTATE_XOR (X1, X0, X3, 7); \ - ADD_ROTATE_XOR (X2, X1, X0, 9); \ - ADD_ROTATE_XOR (X3, X2, X1, 13); \ - ADD_ROTATE_XOR (X0, X3, X2, 18); \ - \ - X1 = X1.s3012; \ - X2 = X2.s2301; \ - X3 = X3.s1230; \ - \ - ADD_ROTATE_XOR (X3, X0, X1, 7); \ - ADD_ROTATE_XOR (X2, X3, X0, 9); \ - ADD_ROTATE_XOR (X1, X2, X3, 13); \ - ADD_ROTATE_XOR (X0, X1, X2, 18); \ - \ - X1 = X1.s1230; \ - X2 = X2.s2301; \ - X3 = X3.s3012; \ -} -#endif - #define Coord(xd4,y,z) (((xd4) * ySIZE * zSIZE) + ((y) * zSIZE) + (z)) #define CO Coord(xd4,y,z) -DECLSPEC void salsa_r (PRIVATE_AS uint4 *TI) +DECLSPEC void salsa_r (PRIVATE_AS u32 *TI) { + u32 x[16]; + + for (int j = 0; j < 16; j++) x[j] = TI[STATE_CNT - 16 + j]; + + for (int i = 0; i < STATE_CNT; i += 16) + { + for (int j = 0; j < 16; j++) + { + x[j] ^= TI[i + j]; + } + + for (int j = 0; j < 16; j++) + { + TI[i + j] = x[j]; + } + + for (int r = 0; r < 4; r++) + { + u32 t0, t1, t2, t3; + + t0 = x[ 0] + x[12]; + t1 = x[ 1] + x[13]; + t2 = x[ 2] + x[14]; + t3 = x[ 3] + x[15]; + x[ 4] ^= hc_rotl32_S (t0, 7); + x[ 5] ^= hc_rotl32_S (t1, 7); + x[ 6] ^= hc_rotl32_S (t2, 7); + x[ 7] ^= hc_rotl32_S (t3, 7); + + t0 = x[ 4] + x[ 0]; + t1 = x[ 5] + x[ 1]; + t2 = x[ 6] + x[ 2]; + t3 = x[ 7] + x[ 3]; + x[ 8] ^= hc_rotl32_S (t0, 9); + x[ 9] ^= hc_rotl32_S (t1, 9); + x[10] ^= hc_rotl32_S (t2, 9); + x[11] ^= hc_rotl32_S (t3, 9); + + t0 = x[ 8] + x[ 4]; + t1 = x[ 9] + x[ 5]; + t2 = x[10] + x[ 6]; + t3 = x[11] + x[ 7]; + x[12] ^= hc_rotl32_S (t0, 13); + x[13] ^= hc_rotl32_S (t1, 13); + x[14] ^= hc_rotl32_S (t2, 13); + x[15] ^= hc_rotl32_S (t3, 13); + + t0 = x[12] + x[ 8]; + t1 = x[13] + x[ 9]; + t2 = x[14] + x[10]; + t3 = x[15] + x[11]; + x[ 0] ^= hc_rotl32_S (t0, 18); + x[ 1] ^= hc_rotl32_S (t1, 18); + x[ 2] ^= hc_rotl32_S (t2, 18); + x[ 3] ^= hc_rotl32_S (t3, 18); + + t0 = x[ 4]; x[ 4] = x[ 7]; x[ 7] = x[ 6]; x[ 6] = x[ 5]; x[ 5] = t0; + t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; + t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; + t0 = x[12]; x[12] = x[13]; x[13] = x[14]; x[14] = x[15]; x[15] = t0; + + t0 = x[ 0] + x[ 4]; + t1 = x[ 1] + x[ 5]; + t2 = x[ 2] + x[ 6]; + t3 = x[ 3] + x[ 7]; + x[12] ^= hc_rotl32_S (t0, 7); + x[13] ^= hc_rotl32_S (t1, 7); + x[14] ^= hc_rotl32_S (t2, 7); + x[15] ^= hc_rotl32_S (t3, 7); + + t0 = x[12] + x[ 0]; + t1 = x[13] + x[ 1]; + t2 = x[14] + x[ 2]; + t3 = x[15] + x[ 3]; + x[ 8] ^= hc_rotl32_S (t0, 9); + x[ 9] ^= hc_rotl32_S (t1, 9); + x[10] ^= hc_rotl32_S (t2, 9); + x[11] ^= hc_rotl32_S (t3, 9); + + t0 = x[ 8] + x[12]; + t1 = x[ 9] + x[13]; + t2 = x[10] + x[14]; + t3 = x[11] + x[15]; + x[ 4] ^= hc_rotl32_S (t0, 13); + x[ 5] ^= hc_rotl32_S (t1, 13); + x[ 6] ^= hc_rotl32_S (t2, 13); + x[ 7] ^= hc_rotl32_S (t3, 13); + + t0 = x[ 4] + x[ 8]; + t1 = x[ 5] + x[ 9]; + t2 = x[ 6] + x[10]; + t3 = x[ 7] + x[11]; + x[ 0] ^= hc_rotl32_S (t0, 18); + x[ 1] ^= hc_rotl32_S (t1, 18); + x[ 2] ^= hc_rotl32_S (t2, 18); + x[ 3] ^= hc_rotl32_S (t3, 18); + + t0 = x[ 4]; x[ 4] = x[ 5]; x[ 5] = x[ 6]; x[ 6] = x[ 7]; x[ 7] = t0; + t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; + t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; + t0 = x[15]; x[15] = x[14]; x[14] = x[13]; x[13] = x[12]; x[12] = t0; + } + + for (int j = 0; j < 16; j++) + { + x[j] += TI[i + j]; + } + + for (int j = 0; j < 16; j++) + { + TI[i + j] = x[j]; + } + } + #if SCRYPT_R > 1 - uint4 TT[STATE_CNT4 / 2]; + u32 TT[STATE_CNT / 2]; - for (int dst_off = 0, src_off = 4; src_off < STATE_CNT4; dst_off += 4, src_off += 8) + for (int dst_off = 0, src_off = 16; src_off < STATE_CNT; dst_off += 16, src_off += 32) { - TT[dst_off + 0] = TI[src_off + 0]; - TT[dst_off + 1] = TI[src_off + 1]; - TT[dst_off + 2] = TI[src_off + 2]; - TT[dst_off + 3] = TI[src_off + 3]; + for (int j = 0; j < 16; j++) TT[dst_off + j] = TI[src_off + j]; } - for (int dst_off = 4, src_off = 8; src_off < STATE_CNT4; dst_off += 4, src_off += 8) + for (int dst_off = 16, src_off = 32; src_off < STATE_CNT; dst_off += 16, src_off += 32) { - TI[dst_off + 0] = TI[src_off + 0]; - TI[dst_off + 1] = TI[src_off + 1]; - TI[dst_off + 2] = TI[src_off + 2]; - TI[dst_off + 3] = TI[src_off + 3]; + for (int j = 0; j < 16; j++) TI[dst_off + j] = TI[src_off + j]; } - for (int dst_off = STATE_CNT4 / 2, src_off = 0; dst_off < STATE_CNT4; dst_off += 4, src_off += 4) + for (int dst_off = STATE_CNT / 2, src_off = 0; dst_off < STATE_CNT; dst_off += 16, src_off += 16) { - TI[dst_off + 0] = TT[src_off + 0]; - TI[dst_off + 1] = TT[src_off + 1]; - TI[dst_off + 2] = TT[src_off + 2]; - TI[dst_off + 3] = TT[src_off + 3]; + for (int j = 0; j < 16; j++) TI[dst_off + j] = TT[src_off + j]; } #endif - uint4 R0 = TI[STATE_CNT4 - 4]; - uint4 R1 = TI[STATE_CNT4 - 3]; - uint4 R2 = TI[STATE_CNT4 - 2]; - uint4 R3 = TI[STATE_CNT4 - 1]; - - for (int i = 0; i < STATE_CNT4; i += 4) - { - uint4 Y0 = TI[i + 0]; - uint4 Y1 = TI[i + 1]; - uint4 Y2 = TI[i + 2]; - uint4 Y3 = TI[i + 3]; - - R0 = R0 ^ Y0; - R1 = R1 ^ Y1; - R2 = R2 ^ Y2; - R3 = R3 ^ Y3; - - uint4 X0 = R0; - uint4 X1 = R1; - uint4 X2 = R2; - uint4 X3 = R3; - - SALSA20_2R (); - SALSA20_2R (); - SALSA20_2R (); - SALSA20_2R (); - - R0 = R0 + X0; - R1 = R1 + X1; - R2 = R2 + X2; - R3 = R3 + X3; - - TI[i + 0] = R0; - TI[i + 1] = R1; - TI[i + 2] = R2; - TI[i + 3] = R3; - } } DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) @@ -215,35 +215,11 @@ DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL case 3: V = V3; break; } - #if SCRYPT_R > 1 - - uint4 TT[STATE_CNT4]; - - for (int z = 0; z < zSIZE; z++) TT[z] = X[z]; - - for (int dst_off = 8, src_off = 4; dst_off < zSIZE; dst_off += 8, src_off += 4) - { - X[dst_off + 0] = TT[src_off + 0]; - X[dst_off + 1] = TT[src_off + 1]; - X[dst_off + 2] = TT[src_off + 2]; - X[dst_off + 3] = TT[src_off + 3]; - } - - for (int dst_off = 4, src_off = zSIZE / 2; dst_off < zSIZE; dst_off += 8, src_off += 4) - { - X[dst_off + 0] = TT[src_off + 0]; - X[dst_off + 1] = TT[src_off + 1]; - X[dst_off + 2] = TT[src_off + 2]; - X[dst_off + 3] = TT[src_off + 3]; - } - - #endif - for (u32 y = 0; y < ySIZE; y++) { for (u32 z = 0; z < zSIZE; z++) V[CO] = X[z]; - for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r (X); + for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r ((u32 *) X); } } @@ -281,11 +257,11 @@ DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL for (u32 z = 0; z < zSIZE; z++) T[z] = V[CO]; - for (u32 i = 0; i < km; i++) salsa_r (T); + for (u32 i = 0; i < km; i++) salsa_r ((u32 *) T); for (u32 z = 0; z < zSIZE; z++) X[z] ^= T[z]; - salsa_r (X); + salsa_r ((u32 *) X); } } @@ -573,14 +549,10 @@ KERNEL_FQ void m27700_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) u32 w2[4]; u32 w3[4]; - for (u32 i = 0; i < SCRYPT_CNT4; i += STATE_CNT4) + for (u32 l = 0; l < SCRYPT_CNT4; l += 4) { - for (u32 j = 0; j < (STATE_CNT4 * 2); j += 8) - { uint4 X[4]; - const u32 l = i + j + ((j >= STATE_CNT4) ? (4 - STATE_CNT4) : 0); - X[0] = tmps[gid].P[l + 0]; X[1] = tmps[gid].P[l + 1]; X[2] = tmps[gid].P[l + 2]; @@ -628,7 +600,6 @@ KERNEL_FQ void m27700_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) w3[3] = T[3].w; sha256_hmac_update_64 (&ctx, w0, w1, w2, w3, 64); - } } w0[0] = 1; diff --git a/OpenCL/m28200-pure.cl b/OpenCL/m28200-pure.cl index 58106a007..49774658c 100644 --- a/OpenCL/m28200-pure.cl +++ b/OpenCL/m28200-pure.cl @@ -65,149 +65,148 @@ DECLSPEC uint4 hc_swap32_4 (uint4 v) #define STATE_CNT GET_STATE_CNT (SCRYPT_R) #define STATE_CNT4 (STATE_CNT / 4) -#define ADD_ROTATE_XOR(r,i1,i2,s) (r) ^= rotate ((i1) + (i2), (s)); - -#if defined IS_CUDA || defined IS_HIP - -#define SALSA20_2R() \ -{ \ - ADD_ROTATE_XOR (X1, X0, X3, 7); \ - ADD_ROTATE_XOR (X2, X1, X0, 9); \ - ADD_ROTATE_XOR (X3, X2, X1, 13); \ - ADD_ROTATE_XOR (X0, X3, X2, 18); \ - \ - X1 = make_uint4 (X1.w, X1.x, X1.y, X1.z); \ - X2 = make_uint4 (X2.z, X2.w, X2.x, X2.y); \ - X3 = make_uint4 (X3.y, X3.z, X3.w, X3.x); \ - \ - ADD_ROTATE_XOR (X3, X0, X1, 7); \ - ADD_ROTATE_XOR (X2, X3, X0, 9); \ - ADD_ROTATE_XOR (X1, X2, X3, 13); \ - ADD_ROTATE_XOR (X0, X1, X2, 18); \ - \ - X1 = make_uint4 (X1.y, X1.z, X1.w, X1.x); \ - X2 = make_uint4 (X2.z, X2.w, X2.x, X2.y); \ - X3 = make_uint4 (X3.w, X3.x, X3.y, X3.z); \ -} -#elif defined IS_METAL -#define SALSA20_2R() \ -{ \ - ADD_ROTATE_XOR (X1, X0, X3, 7); \ - ADD_ROTATE_XOR (X2, X1, X0, 9); \ - ADD_ROTATE_XOR (X3, X2, X1, 13); \ - ADD_ROTATE_XOR (X0, X3, X2, 18); \ - \ - X1 = X1.wxyz; \ - X2 = X2.zwxy; \ - X3 = X3.yzwx; \ - \ - ADD_ROTATE_XOR (X3, X0, X1, 7); \ - ADD_ROTATE_XOR (X2, X3, X0, 9); \ - ADD_ROTATE_XOR (X1, X2, X3, 13); \ - ADD_ROTATE_XOR (X0, X1, X2, 18); \ - \ - X1 = X1.yzwx; \ - X2 = X2.zwxy; \ - X3 = X3.wxyz; \ -} -#else -#define SALSA20_2R() \ -{ \ - ADD_ROTATE_XOR (X1, X0, X3, 7); \ - ADD_ROTATE_XOR (X2, X1, X0, 9); \ - ADD_ROTATE_XOR (X3, X2, X1, 13); \ - ADD_ROTATE_XOR (X0, X3, X2, 18); \ - \ - X1 = X1.s3012; \ - X2 = X2.s2301; \ - X3 = X3.s1230; \ - \ - ADD_ROTATE_XOR (X3, X0, X1, 7); \ - ADD_ROTATE_XOR (X2, X3, X0, 9); \ - ADD_ROTATE_XOR (X1, X2, X3, 13); \ - ADD_ROTATE_XOR (X0, X1, X2, 18); \ - \ - X1 = X1.s1230; \ - X2 = X2.s2301; \ - X3 = X3.s3012; \ -} -#endif - #define Coord(xd4,y,z) (((xd4) * ySIZE * zSIZE) + ((y) * zSIZE) + (z)) #define CO Coord(xd4,y,z) -DECLSPEC void salsa_r (PRIVATE_AS uint4 *TI) +DECLSPEC void salsa_r (PRIVATE_AS u32 *TI) { + u32 x[16]; + + for (int j = 0; j < 16; j++) x[j] = TI[STATE_CNT - 16 + j]; + + for (int i = 0; i < STATE_CNT; i += 16) + { + for (int j = 0; j < 16; j++) + { + x[j] ^= TI[i + j]; + } + + for (int j = 0; j < 16; j++) + { + TI[i + j] = x[j]; + } + + for (int r = 0; r < 4; r++) + { + u32 t0, t1, t2, t3; + + t0 = x[ 0] + x[12]; + t1 = x[ 1] + x[13]; + t2 = x[ 2] + x[14]; + t3 = x[ 3] + x[15]; + x[ 4] ^= hc_rotl32_S (t0, 7); + x[ 5] ^= hc_rotl32_S (t1, 7); + x[ 6] ^= hc_rotl32_S (t2, 7); + x[ 7] ^= hc_rotl32_S (t3, 7); + + t0 = x[ 4] + x[ 0]; + t1 = x[ 5] + x[ 1]; + t2 = x[ 6] + x[ 2]; + t3 = x[ 7] + x[ 3]; + x[ 8] ^= hc_rotl32_S (t0, 9); + x[ 9] ^= hc_rotl32_S (t1, 9); + x[10] ^= hc_rotl32_S (t2, 9); + x[11] ^= hc_rotl32_S (t3, 9); + + t0 = x[ 8] + x[ 4]; + t1 = x[ 9] + x[ 5]; + t2 = x[10] + x[ 6]; + t3 = x[11] + x[ 7]; + x[12] ^= hc_rotl32_S (t0, 13); + x[13] ^= hc_rotl32_S (t1, 13); + x[14] ^= hc_rotl32_S (t2, 13); + x[15] ^= hc_rotl32_S (t3, 13); + + t0 = x[12] + x[ 8]; + t1 = x[13] + x[ 9]; + t2 = x[14] + x[10]; + t3 = x[15] + x[11]; + x[ 0] ^= hc_rotl32_S (t0, 18); + x[ 1] ^= hc_rotl32_S (t1, 18); + x[ 2] ^= hc_rotl32_S (t2, 18); + x[ 3] ^= hc_rotl32_S (t3, 18); + + t0 = x[ 4]; x[ 4] = x[ 7]; x[ 7] = x[ 6]; x[ 6] = x[ 5]; x[ 5] = t0; + t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; + t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; + t0 = x[12]; x[12] = x[13]; x[13] = x[14]; x[14] = x[15]; x[15] = t0; + + t0 = x[ 0] + x[ 4]; + t1 = x[ 1] + x[ 5]; + t2 = x[ 2] + x[ 6]; + t3 = x[ 3] + x[ 7]; + x[12] ^= hc_rotl32_S (t0, 7); + x[13] ^= hc_rotl32_S (t1, 7); + x[14] ^= hc_rotl32_S (t2, 7); + x[15] ^= hc_rotl32_S (t3, 7); + + t0 = x[12] + x[ 0]; + t1 = x[13] + x[ 1]; + t2 = x[14] + x[ 2]; + t3 = x[15] + x[ 3]; + x[ 8] ^= hc_rotl32_S (t0, 9); + x[ 9] ^= hc_rotl32_S (t1, 9); + x[10] ^= hc_rotl32_S (t2, 9); + x[11] ^= hc_rotl32_S (t3, 9); + + t0 = x[ 8] + x[12]; + t1 = x[ 9] + x[13]; + t2 = x[10] + x[14]; + t3 = x[11] + x[15]; + x[ 4] ^= hc_rotl32_S (t0, 13); + x[ 5] ^= hc_rotl32_S (t1, 13); + x[ 6] ^= hc_rotl32_S (t2, 13); + x[ 7] ^= hc_rotl32_S (t3, 13); + + t0 = x[ 4] + x[ 8]; + t1 = x[ 5] + x[ 9]; + t2 = x[ 6] + x[10]; + t3 = x[ 7] + x[11]; + x[ 0] ^= hc_rotl32_S (t0, 18); + x[ 1] ^= hc_rotl32_S (t1, 18); + x[ 2] ^= hc_rotl32_S (t2, 18); + x[ 3] ^= hc_rotl32_S (t3, 18); + + t0 = x[ 4]; x[ 4] = x[ 5]; x[ 5] = x[ 6]; x[ 6] = x[ 7]; x[ 7] = t0; + t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; + t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; + t0 = x[15]; x[15] = x[14]; x[14] = x[13]; x[13] = x[12]; x[12] = t0; + } + + for (int j = 0; j < 16; j++) + { + x[j] += TI[i + j]; + } + + for (int j = 0; j < 16; j++) + { + TI[i + j] = x[j]; + } + } + #if SCRYPT_R > 1 - uint4 TT[STATE_CNT4 / 2]; + u32 TT[STATE_CNT / 2]; - for (int dst_off = 0, src_off = 4; src_off < STATE_CNT4; dst_off += 4, src_off += 8) + for (int dst_off = 0, src_off = 16; src_off < STATE_CNT; dst_off += 16, src_off += 32) { - TT[dst_off + 0] = TI[src_off + 0]; - TT[dst_off + 1] = TI[src_off + 1]; - TT[dst_off + 2] = TI[src_off + 2]; - TT[dst_off + 3] = TI[src_off + 3]; + for (int j = 0; j < 16; j++) TT[dst_off + j] = TI[src_off + j]; } - for (int dst_off = 4, src_off = 8; src_off < STATE_CNT4; dst_off += 4, src_off += 8) + for (int dst_off = 16, src_off = 32; src_off < STATE_CNT; dst_off += 16, src_off += 32) { - TI[dst_off + 0] = TI[src_off + 0]; - TI[dst_off + 1] = TI[src_off + 1]; - TI[dst_off + 2] = TI[src_off + 2]; - TI[dst_off + 3] = TI[src_off + 3]; + for (int j = 0; j < 16; j++) TI[dst_off + j] = TI[src_off + j]; } - for (int dst_off = STATE_CNT4 / 2, src_off = 0; dst_off < STATE_CNT4; dst_off += 4, src_off += 4) + for (int dst_off = STATE_CNT / 2, src_off = 0; dst_off < STATE_CNT; dst_off += 16, src_off += 16) { - TI[dst_off + 0] = TT[src_off + 0]; - TI[dst_off + 1] = TT[src_off + 1]; - TI[dst_off + 2] = TT[src_off + 2]; - TI[dst_off + 3] = TT[src_off + 3]; + for (int j = 0; j < 16; j++) TI[dst_off + j] = TT[src_off + j]; } #endif - uint4 R0 = TI[STATE_CNT4 - 4]; - uint4 R1 = TI[STATE_CNT4 - 3]; - uint4 R2 = TI[STATE_CNT4 - 2]; - uint4 R3 = TI[STATE_CNT4 - 1]; - - for (int i = 0; i < STATE_CNT4; i += 4) - { - uint4 Y0 = TI[i + 0]; - uint4 Y1 = TI[i + 1]; - uint4 Y2 = TI[i + 2]; - uint4 Y3 = TI[i + 3]; - - R0 = R0 ^ Y0; - R1 = R1 ^ Y1; - R2 = R2 ^ Y2; - R3 = R3 ^ Y3; - - uint4 X0 = R0; - uint4 X1 = R1; - uint4 X2 = R2; - uint4 X3 = R3; - - SALSA20_2R (); - SALSA20_2R (); - SALSA20_2R (); - SALSA20_2R (); - - R0 = R0 + X0; - R1 = R1 + X1; - R2 = R2 + X2; - R3 = R3 + X3; - - TI[i + 0] = R0; - TI[i + 1] = R1; - TI[i + 2] = R2; - TI[i + 3] = R3; - } } - DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) { const u32 ySIZE = SCRYPT_N / SCRYPT_TMTO; @@ -228,35 +227,11 @@ DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL case 3: V = V3; break; } - #if SCRYPT_R > 1 - - uint4 TT[STATE_CNT4]; - - for (int z = 0; z < zSIZE; z++) TT[z] = X[z]; - - for (int dst_off = 8, src_off = 4; dst_off < zSIZE; dst_off += 8, src_off += 4) - { - X[dst_off + 0] = TT[src_off + 0]; - X[dst_off + 1] = TT[src_off + 1]; - X[dst_off + 2] = TT[src_off + 2]; - X[dst_off + 3] = TT[src_off + 3]; - } - - for (int dst_off = 4, src_off = zSIZE / 2; dst_off < zSIZE; dst_off += 8, src_off += 4) - { - X[dst_off + 0] = TT[src_off + 0]; - X[dst_off + 1] = TT[src_off + 1]; - X[dst_off + 2] = TT[src_off + 2]; - X[dst_off + 3] = TT[src_off + 3]; - } - - #endif - for (u32 y = 0; y < ySIZE; y++) { for (u32 z = 0; z < zSIZE; z++) V[CO] = X[z]; - for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r (X); + for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r ((u32 *) X); } } @@ -294,11 +269,11 @@ DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL for (u32 z = 0; z < zSIZE; z++) T[z] = V[CO]; - for (u32 i = 0; i < km; i++) salsa_r (T); + for (u32 i = 0; i < km; i++) salsa_r ((u32 *) T); for (u32 z = 0; z < zSIZE; z++) X[z] ^= T[z]; - salsa_r (X); + salsa_r ((u32 *) X); } } @@ -542,14 +517,10 @@ KERNEL_FQ void m28200_comp (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exodus_t)) sha256_hmac_init_global_swap (&ctx, pws[gid].i, pws[gid].pw_len); - for (u32 i = 0; i < SCRYPT_CNT4; i += STATE_CNT4) + for (u32 l = 0; l < SCRYPT_CNT4; l += 4) { - for (u32 j = 0; j < (STATE_CNT4 * 2); j += 8) - { uint4 X[4]; - const u32 l = i + j + ((j >= STATE_CNT4) ? (4 - STATE_CNT4) : 0); - X[0] = tmps[gid].P[l + 0]; X[1] = tmps[gid].P[l + 1]; X[2] = tmps[gid].P[l + 2]; @@ -597,7 +568,6 @@ KERNEL_FQ void m28200_comp (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exodus_t)) w3[3] = T[3].w; sha256_hmac_update_64 (&ctx, w0, w1, w2, w3, 64); - } } w0[0] = 1; diff --git a/OpenCL/m29800-pure.cl b/OpenCL/m29800-pure.cl index c72f5c267..114c97a82 100644 --- a/OpenCL/m29800-pure.cl +++ b/OpenCL/m29800-pure.cl @@ -53,146 +53,146 @@ DECLSPEC uint4 hc_swap32_4 (uint4 v) #define STATE_CNT GET_STATE_CNT (SCRYPT_R) #define STATE_CNT4 (STATE_CNT / 4) -#define ADD_ROTATE_XOR(r,i1,i2,s) (r) ^= rotate ((i1) + (i2), (s)); - -#if defined IS_CUDA || defined IS_HIP - -#define SALSA20_2R() \ -{ \ - ADD_ROTATE_XOR (X1, X0, X3, 7); \ - ADD_ROTATE_XOR (X2, X1, X0, 9); \ - ADD_ROTATE_XOR (X3, X2, X1, 13); \ - ADD_ROTATE_XOR (X0, X3, X2, 18); \ - \ - X1 = make_uint4 (X1.w, X1.x, X1.y, X1.z); \ - X2 = make_uint4 (X2.z, X2.w, X2.x, X2.y); \ - X3 = make_uint4 (X3.y, X3.z, X3.w, X3.x); \ - \ - ADD_ROTATE_XOR (X3, X0, X1, 7); \ - ADD_ROTATE_XOR (X2, X3, X0, 9); \ - ADD_ROTATE_XOR (X1, X2, X3, 13); \ - ADD_ROTATE_XOR (X0, X1, X2, 18); \ - \ - X1 = make_uint4 (X1.y, X1.z, X1.w, X1.x); \ - X2 = make_uint4 (X2.z, X2.w, X2.x, X2.y); \ - X3 = make_uint4 (X3.w, X3.x, X3.y, X3.z); \ -} -#elif defined IS_METAL -#define SALSA20_2R() \ -{ \ - ADD_ROTATE_XOR (X1, X0, X3, 7); \ - ADD_ROTATE_XOR (X2, X1, X0, 9); \ - ADD_ROTATE_XOR (X3, X2, X1, 13); \ - ADD_ROTATE_XOR (X0, X3, X2, 18); \ - \ - X1 = X1.wxyz; \ - X2 = X2.zwxy; \ - X3 = X3.yzwx; \ - \ - ADD_ROTATE_XOR (X3, X0, X1, 7); \ - ADD_ROTATE_XOR (X2, X3, X0, 9); \ - ADD_ROTATE_XOR (X1, X2, X3, 13); \ - ADD_ROTATE_XOR (X0, X1, X2, 18); \ - \ - X1 = X1.yzwx; \ - X2 = X2.zwxy; \ - X3 = X3.wxyz; \ -} -#else -#define SALSA20_2R() \ -{ \ - ADD_ROTATE_XOR (X1, X0, X3, 7); \ - ADD_ROTATE_XOR (X2, X1, X0, 9); \ - ADD_ROTATE_XOR (X3, X2, X1, 13); \ - ADD_ROTATE_XOR (X0, X3, X2, 18); \ - \ - X1 = X1.s3012; \ - X2 = X2.s2301; \ - X3 = X3.s1230; \ - \ - ADD_ROTATE_XOR (X3, X0, X1, 7); \ - ADD_ROTATE_XOR (X2, X3, X0, 9); \ - ADD_ROTATE_XOR (X1, X2, X3, 13); \ - ADD_ROTATE_XOR (X0, X1, X2, 18); \ - \ - X1 = X1.s1230; \ - X2 = X2.s2301; \ - X3 = X3.s3012; \ -} -#endif - #define Coord(xd4,y,z) (((xd4) * ySIZE * zSIZE) + ((y) * zSIZE) + (z)) #define CO Coord(xd4,y,z) -DECLSPEC void salsa_r (PRIVATE_AS uint4 *TI) +DECLSPEC void salsa_r (PRIVATE_AS u32 *TI) { - uint4 R0 = TI[STATE_CNT4 - 4]; - uint4 R1 = TI[STATE_CNT4 - 3]; - uint4 R2 = TI[STATE_CNT4 - 2]; - uint4 R3 = TI[STATE_CNT4 - 1]; + u32 x[16]; - for (int i = 0; i < STATE_CNT4; i += 4) + for (int j = 0; j < 16; j++) x[j] = TI[STATE_CNT - 16 + j]; + + for (int i = 0; i < STATE_CNT; i += 16) { - uint4 Y0 = TI[i + 0]; - uint4 Y1 = TI[i + 1]; - uint4 Y2 = TI[i + 2]; - uint4 Y3 = TI[i + 3]; + for (int j = 0; j < 16; j++) + { + x[j] ^= TI[i + j]; + } - R0 = R0 ^ Y0; - R1 = R1 ^ Y1; - R2 = R2 ^ Y2; - R3 = R3 ^ Y3; + for (int j = 0; j < 16; j++) + { + TI[i + j] = x[j]; + } - uint4 X0 = R0; - uint4 X1 = R1; - uint4 X2 = R2; - uint4 X3 = R3; + for (int r = 0; r < 4; r++) + { + u32 t0, t1, t2, t3; - SALSA20_2R (); - SALSA20_2R (); - SALSA20_2R (); - SALSA20_2R (); + t0 = x[ 0] + x[12]; + t1 = x[ 1] + x[13]; + t2 = x[ 2] + x[14]; + t3 = x[ 3] + x[15]; + x[ 4] ^= hc_rotl32_S (t0, 7); + x[ 5] ^= hc_rotl32_S (t1, 7); + x[ 6] ^= hc_rotl32_S (t2, 7); + x[ 7] ^= hc_rotl32_S (t3, 7); - R0 = R0 + X0; - R1 = R1 + X1; - R2 = R2 + X2; - R3 = R3 + X3; + t0 = x[ 4] + x[ 0]; + t1 = x[ 5] + x[ 1]; + t2 = x[ 6] + x[ 2]; + t3 = x[ 7] + x[ 3]; + x[ 8] ^= hc_rotl32_S (t0, 9); + x[ 9] ^= hc_rotl32_S (t1, 9); + x[10] ^= hc_rotl32_S (t2, 9); + x[11] ^= hc_rotl32_S (t3, 9); - TI[i + 0] = R0; - TI[i + 1] = R1; - TI[i + 2] = R2; - TI[i + 3] = R3; + t0 = x[ 8] + x[ 4]; + t1 = x[ 9] + x[ 5]; + t2 = x[10] + x[ 6]; + t3 = x[11] + x[ 7]; + x[12] ^= hc_rotl32_S (t0, 13); + x[13] ^= hc_rotl32_S (t1, 13); + x[14] ^= hc_rotl32_S (t2, 13); + x[15] ^= hc_rotl32_S (t3, 13); + + t0 = x[12] + x[ 8]; + t1 = x[13] + x[ 9]; + t2 = x[14] + x[10]; + t3 = x[15] + x[11]; + x[ 0] ^= hc_rotl32_S (t0, 18); + x[ 1] ^= hc_rotl32_S (t1, 18); + x[ 2] ^= hc_rotl32_S (t2, 18); + x[ 3] ^= hc_rotl32_S (t3, 18); + + t0 = x[ 4]; x[ 4] = x[ 7]; x[ 7] = x[ 6]; x[ 6] = x[ 5]; x[ 5] = t0; + t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; + t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; + t0 = x[12]; x[12] = x[13]; x[13] = x[14]; x[14] = x[15]; x[15] = t0; + + t0 = x[ 0] + x[ 4]; + t1 = x[ 1] + x[ 5]; + t2 = x[ 2] + x[ 6]; + t3 = x[ 3] + x[ 7]; + x[12] ^= hc_rotl32_S (t0, 7); + x[13] ^= hc_rotl32_S (t1, 7); + x[14] ^= hc_rotl32_S (t2, 7); + x[15] ^= hc_rotl32_S (t3, 7); + + t0 = x[12] + x[ 0]; + t1 = x[13] + x[ 1]; + t2 = x[14] + x[ 2]; + t3 = x[15] + x[ 3]; + x[ 8] ^= hc_rotl32_S (t0, 9); + x[ 9] ^= hc_rotl32_S (t1, 9); + x[10] ^= hc_rotl32_S (t2, 9); + x[11] ^= hc_rotl32_S (t3, 9); + + t0 = x[ 8] + x[12]; + t1 = x[ 9] + x[13]; + t2 = x[10] + x[14]; + t3 = x[11] + x[15]; + x[ 4] ^= hc_rotl32_S (t0, 13); + x[ 5] ^= hc_rotl32_S (t1, 13); + x[ 6] ^= hc_rotl32_S (t2, 13); + x[ 7] ^= hc_rotl32_S (t3, 13); + + t0 = x[ 4] + x[ 8]; + t1 = x[ 5] + x[ 9]; + t2 = x[ 6] + x[10]; + t3 = x[ 7] + x[11]; + x[ 0] ^= hc_rotl32_S (t0, 18); + x[ 1] ^= hc_rotl32_S (t1, 18); + x[ 2] ^= hc_rotl32_S (t2, 18); + x[ 3] ^= hc_rotl32_S (t3, 18); + + t0 = x[ 4]; x[ 4] = x[ 5]; x[ 5] = x[ 6]; x[ 6] = x[ 7]; x[ 7] = t0; + t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; + t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; + t0 = x[15]; x[15] = x[14]; x[14] = x[13]; x[13] = x[12]; x[12] = t0; + } + + for (int j = 0; j < 16; j++) + { + x[j] += TI[i + j]; + } + + for (int j = 0; j < 16; j++) + { + TI[i + j] = x[j]; + } } #if SCRYPT_R > 1 - uint4 TT[STATE_CNT4 / 2]; + u32 TT[STATE_CNT / 2]; - for (int dst_off = 0, src_off = 4; src_off < STATE_CNT4; dst_off += 4, src_off += 8) + for (int dst_off = 0, src_off = 16; src_off < STATE_CNT; dst_off += 16, src_off += 32) { - TT[dst_off + 0] = TI[src_off + 0]; - TT[dst_off + 1] = TI[src_off + 1]; - TT[dst_off + 2] = TI[src_off + 2]; - TT[dst_off + 3] = TI[src_off + 3]; + for (int j = 0; j < 16; j++) TT[dst_off + j] = TI[src_off + j]; } - for (int dst_off = 4, src_off = 8; src_off < STATE_CNT4; dst_off += 4, src_off += 8) + for (int dst_off = 16, src_off = 32; src_off < STATE_CNT; dst_off += 16, src_off += 32) { - TI[dst_off + 0] = TI[src_off + 0]; - TI[dst_off + 1] = TI[src_off + 1]; - TI[dst_off + 2] = TI[src_off + 2]; - TI[dst_off + 3] = TI[src_off + 3]; + for (int j = 0; j < 16; j++) TI[dst_off + j] = TI[src_off + j]; } - for (int dst_off = STATE_CNT4 / 2, src_off = 0; dst_off < STATE_CNT4; dst_off += 4, src_off += 4) + for (int dst_off = STATE_CNT / 2, src_off = 0; dst_off < STATE_CNT; dst_off += 16, src_off += 16) { - TI[dst_off + 0] = TT[src_off + 0]; - TI[dst_off + 1] = TT[src_off + 1]; - TI[dst_off + 2] = TT[src_off + 2]; - TI[dst_off + 3] = TT[src_off + 3]; + for (int j = 0; j < 16; j++) TI[dst_off + j] = TT[src_off + j]; } #endif + } DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) @@ -219,7 +219,7 @@ DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL { for (u32 z = 0; z < zSIZE; z++) V[CO] = X[z]; - for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r (X); + for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r ((u32 *) X); } } @@ -257,11 +257,11 @@ DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL for (u32 z = 0; z < zSIZE; z++) T[z] = V[CO]; - for (u32 i = 0; i < km; i++) salsa_r (T); + for (u32 i = 0; i < km; i++) salsa_r ((u32 *) T); for (u32 z = 0; z < zSIZE; z++) X[z] ^= T[z]; - salsa_r (X); + salsa_r ((u32 *) X); } } From 23ab78f333f5e9d9d4b60feb3ca632857f76e2b6 Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Sat, 7 Jun 2025 02:29:44 +0200 Subject: [PATCH 38/95] fix salsa_r() for Apple Metal --- OpenCL/m08900-pure.cl | 6 +++--- OpenCL/m15700-pure.cl | 6 +++--- OpenCL/m22700-pure.cl | 6 +++--- OpenCL/m24000-pure.cl | 6 +++--- OpenCL/m27700-pure.cl | 6 +++--- OpenCL/m28200-pure.cl | 6 +++--- OpenCL/m29800-pure.cl | 6 +++--- 7 files changed, 21 insertions(+), 21 deletions(-) diff --git a/OpenCL/m08900-pure.cl b/OpenCL/m08900-pure.cl index a16e80f9a..884e24359 100644 --- a/OpenCL/m08900-pure.cl +++ b/OpenCL/m08900-pure.cl @@ -221,7 +221,7 @@ DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL { for (u32 z = 0; z < zSIZE; z++) V[CO] = X[z]; - for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r ((u32 *) X); + for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r ((PRIVATE_AS u32 *) X); } } @@ -259,11 +259,11 @@ DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL for (u32 z = 0; z < zSIZE; z++) T[z] = V[CO]; - for (u32 i = 0; i < km; i++) salsa_r ((u32 *) T); + for (u32 i = 0; i < km; i++) salsa_r ((PRIVATE_AS u32 *) T); for (u32 z = 0; z < zSIZE; z++) X[z] ^= T[z]; - salsa_r ((u32 *) X); + salsa_r ((PRIVATE_AS u32 *) X); } } diff --git a/OpenCL/m15700-pure.cl b/OpenCL/m15700-pure.cl index 277b3d729..1010a5e8b 100644 --- a/OpenCL/m15700-pure.cl +++ b/OpenCL/m15700-pure.cl @@ -252,7 +252,7 @@ DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL { for (u32 z = 0; z < zSIZE; z++) V[CO] = X[z]; - for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r ((u32 *) X); + for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r ((PRIVATE_AS u32 *) X); } } @@ -290,11 +290,11 @@ DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL for (u32 z = 0; z < zSIZE; z++) T[z] = V[CO]; - for (u32 i = 0; i < km; i++) salsa_r ((u32 *) T); + for (u32 i = 0; i < km; i++) salsa_r ((PRIVATE_AS u32 *) T); for (u32 z = 0; z < zSIZE; z++) X[z] ^= T[z]; - salsa_r ((u32 *) X); + salsa_r ((PRIVATE_AS u32 *) X); } } diff --git a/OpenCL/m22700-pure.cl b/OpenCL/m22700-pure.cl index 291e44acc..6cc6817e4 100644 --- a/OpenCL/m22700-pure.cl +++ b/OpenCL/m22700-pure.cl @@ -269,7 +269,7 @@ DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL { for (u32 z = 0; z < zSIZE; z++) V[CO] = X[z]; - for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r ((u32 *) X); + for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r ((PRIVATE_AS u32 *) X); } } @@ -307,11 +307,11 @@ DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL for (u32 z = 0; z < zSIZE; z++) T[z] = V[CO]; - for (u32 i = 0; i < km; i++) salsa_r ((u32 *) T); + for (u32 i = 0; i < km; i++) salsa_r ((PRIVATE_AS u32 *) T); for (u32 z = 0; z < zSIZE; z++) X[z] ^= T[z]; - salsa_r ((u32 *) X); + salsa_r ((PRIVATE_AS u32 *) X); } } diff --git a/OpenCL/m24000-pure.cl b/OpenCL/m24000-pure.cl index 77afe5ef5..7d1dce20d 100644 --- a/OpenCL/m24000-pure.cl +++ b/OpenCL/m24000-pure.cl @@ -257,7 +257,7 @@ DECLSPEC void scrypt_smix (PRIVATE_AS uint4 *X, PRIVATE_AS uint4 *T, GLOBAL_AS u { for (u32 z = 0; z < zSIZE; z++) V[CO] = X[z]; - for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r ((u32 *) X); + for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r ((PRIVATE_AS u32 *) X); } for (u32 i = 0; i < SCRYPT_N; i++) @@ -270,11 +270,11 @@ DECLSPEC void scrypt_smix (PRIVATE_AS uint4 *X, PRIVATE_AS uint4 *T, GLOBAL_AS u for (u32 z = 0; z < zSIZE; z++) T[z] = V[CO]; - for (u32 i = 0; i < km; i++) salsa_r ((u32 *) T); + for (u32 i = 0; i < km; i++) salsa_r ((PRIVATE_AS u32 *) T); for (u32 z = 0; z < zSIZE; z++) X[z] ^= T[z]; - salsa_r ((u32 *) X); + salsa_r ((PRIVATE_AS u32 *) X); } #ifdef _unroll diff --git a/OpenCL/m27700-pure.cl b/OpenCL/m27700-pure.cl index 42ee0974d..c9f0bb42f 100644 --- a/OpenCL/m27700-pure.cl +++ b/OpenCL/m27700-pure.cl @@ -219,7 +219,7 @@ DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL { for (u32 z = 0; z < zSIZE; z++) V[CO] = X[z]; - for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r ((u32 *) X); + for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r ((PRIVATE_AS u32 *) X); } } @@ -257,11 +257,11 @@ DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL for (u32 z = 0; z < zSIZE; z++) T[z] = V[CO]; - for (u32 i = 0; i < km; i++) salsa_r ((u32 *) T); + for (u32 i = 0; i < km; i++) salsa_r ((PRIVATE_AS u32 *) T); for (u32 z = 0; z < zSIZE; z++) X[z] ^= T[z]; - salsa_r ((u32 *) X); + salsa_r ((PRIVATE_AS u32 *) X); } } diff --git a/OpenCL/m28200-pure.cl b/OpenCL/m28200-pure.cl index 49774658c..8e307765c 100644 --- a/OpenCL/m28200-pure.cl +++ b/OpenCL/m28200-pure.cl @@ -231,7 +231,7 @@ DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL { for (u32 z = 0; z < zSIZE; z++) V[CO] = X[z]; - for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r ((u32 *) X); + for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r ((PRIVATE_AS u32 *) X); } } @@ -269,11 +269,11 @@ DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL for (u32 z = 0; z < zSIZE; z++) T[z] = V[CO]; - for (u32 i = 0; i < km; i++) salsa_r ((u32 *) T); + for (u32 i = 0; i < km; i++) salsa_r ((PRIVATE_AS u32 *) T); for (u32 z = 0; z < zSIZE; z++) X[z] ^= T[z]; - salsa_r ((u32 *) X); + salsa_r ((PRIVATE_AS u32 *) X); } } diff --git a/OpenCL/m29800-pure.cl b/OpenCL/m29800-pure.cl index 114c97a82..98f582673 100644 --- a/OpenCL/m29800-pure.cl +++ b/OpenCL/m29800-pure.cl @@ -219,7 +219,7 @@ DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL { for (u32 z = 0; z < zSIZE; z++) V[CO] = X[z]; - for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r ((u32 *) X); + for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r ((PRIVATE_AS u32 *) X); } } @@ -257,11 +257,11 @@ DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL for (u32 z = 0; z < zSIZE; z++) T[z] = V[CO]; - for (u32 i = 0; i < km; i++) salsa_r ((u32 *) T); + for (u32 i = 0; i < km; i++) salsa_r ((PRIVATE_AS u32 *) T); for (u32 z = 0; z < zSIZE; z++) X[z] ^= T[z]; - salsa_r ((u32 *) X); + salsa_r ((PRIVATE_AS u32 *) X); } } From 92360868e97adcb98dd646e31e884f899b7e8214 Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Sat, 7 Jun 2025 12:20:25 +0200 Subject: [PATCH 39/95] Update BUILD.md Updated build procedure --- BUILD.md | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 69 insertions(+), 5 deletions(-) diff --git a/BUILD.md b/BUILD.md index 92163a3a1..769cbb3c4 100644 --- a/BUILD.md +++ b/BUILD.md @@ -3,27 +3,91 @@ hashcat build documentation ### Revision ### -* 1.6 +* 1.7 ### Author ### See docs/credits.txt -### Building hashcat for Linux and macOS ### +### Building hashcat + +Check your python3 version + +``` +$ python3 --version +Python 3.13.3 +``` + +If you cannot globally install a version of python >= 3.12, you can use pyenv. If you want to use pyenv please follow all the steps described below, otherwise only steps 3 and 5. + +### Building hashcat - Step 1 + +#### Linux + +Install deps for build python3 with pyenv + +``` +$ sudo apt install libbz2-dev libssl-dev libncurses5-dev libffi-dev libreadline-dev libsqlite3-dev liblzma-dev +``` + +Install pyenv and follow the instructions at the end to properly set up your environment + +``` +$ curl https://pyenv.run | bash +``` + +#### macOS + +Install pyenv and follow the instructions at the end to properly set up your environment + +``` +$ brew install pyenv +``` + +### Building hashcat - Step 2 + +Install python 3.12 (or or higher) with pyenv + +``` +$ pyenv install 3.12 +``` + +Get the precise python3 version to activate + +``` +$ pyenv versions +* system (set by [...]/.pyenv/version) + 3.12.11 +``` + +### Building hashcat - Step 3 Get a copy of the **hashcat** repository ``` $ git clone https://github.com/hashcat/hashcat.git +$ cd hashcat ``` -Run "make" +### Building hashcat - Step 4 + +Sets a local application-specific Python version for hashcat ``` -$ make +$ pyenv local 3.12.11 ``` -### Install hashcat for Linux ### +### Building hashcat - Step 5 + +Build hashcat + +``` +$ make clean && make +``` + +### Building hashcat - Step 6 (optional) + +#### Install hashcat for Linux #### The install target is linux FHS compatible and can be used like this: From 27d6816e09802bad4d20c32920dcf67377cba7a1 Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Sat, 7 Jun 2025 13:21:31 +0200 Subject: [PATCH 40/95] Update BUILD.md graphic improvement --- BUILD.md | 161 +++++++++++++++++++++++++------------------------------ 1 file changed, 72 insertions(+), 89 deletions(-) diff --git a/BUILD.md b/BUILD.md index 769cbb3c4..a66a75938 100644 --- a/BUILD.md +++ b/BUILD.md @@ -1,155 +1,138 @@ -hashcat build documentation -= -### Revision ### +# Hashcat – Build Documentation -* 1.7 +**Revision**: 1.7 +**Author**: See `docs/credits.txt` -### Author ### +--- -See docs/credits.txt +## ✅ Requirements -### Building hashcat +- **Python 3.12** or higher -Check your python3 version +Check your Python version: -``` +```bash $ python3 --version -Python 3.13.3 +# Expected output: Python 3.13.3 ``` -If you cannot globally install a version of python >= 3.12, you can use pyenv. If you want to use pyenv please follow all the steps described below, otherwise only steps 3 and 5. +If you can't install Python ≥ 3.12 globally, you can use **pyenv**. -### Building hashcat - Step 1 +> If you're using `pyenv`, follow **all steps** below. Otherwise, follow only **steps 3 and 5**. -#### Linux +--- -Install deps for build python3 with pyenv +## 🛠️ Building Hashcat – Step-by-Step -``` +### 🔹 Step 1: Install dependencies and pyenv + +#### On Linux + +Install required libraries to build Python: + +```bash $ sudo apt install libbz2-dev libssl-dev libncurses5-dev libffi-dev libreadline-dev libsqlite3-dev liblzma-dev ``` -Install pyenv and follow the instructions at the end to properly set up your environment +Install `pyenv`: -``` +```bash $ curl https://pyenv.run | bash ``` -#### macOS +> Follow the instructions shown after installation to set up your shell correctly. -Install pyenv and follow the instructions at the end to properly set up your environment +#### On macOS -``` +Install `pyenv` via Homebrew: + +```bash $ brew install pyenv ``` -### Building hashcat - Step 2 +--- -Install python 3.12 (or or higher) with pyenv +### 🔹 Step 2: Install Python using pyenv -``` +Install Python 3.12 (or newer): + +```bash $ pyenv install 3.12 ``` -Get the precise python3 version to activate +Check installed versions: -``` +```bash $ pyenv versions -* system (set by [...]/.pyenv/version) - 3.12.11 +# Example: +# * system +# 3.12.11 ``` -### Building hashcat - Step 3 +--- -Get a copy of the **hashcat** repository +### 🔹 Step 3: Clone the Hashcat repository -``` +```bash $ git clone https://github.com/hashcat/hashcat.git $ cd hashcat ``` -### Building hashcat - Step 4 +--- -Sets a local application-specific Python version for hashcat +### 🔹 Step 4: Set the local Python version -``` +```bash $ pyenv local 3.12.11 ``` -### Building hashcat - Step 5 +--- -Build hashcat +### 🔹 Step 5: Build Hashcat -``` +```bash $ make clean && make ``` -### Building hashcat - Step 6 (optional) +--- -#### Install hashcat for Linux #### +### 🔹 Step 6 (Optional): Install Hashcat (Linux only) -The install target is linux FHS compatible and can be used like this: - -``` +```bash $ make install ``` -If the $HOME/.hashcat folder exists, then: +Hashcat will use the following locations depending on your environment: -- Session related files go to: $HOME/.hashcat/sessions/ -- Cached kernels go to: $HOME/.hashcat/kernels/ -- Potfiles go to: $HOME/.hashcat/ +| Condition | Session Files | Kernel Cache | Potfiles | +|--------------------------------------------|----------------------------------------|---------------------------------------|----------------------------------------| +| `$HOME/.hashcat` exists | `$HOME/.hashcat/sessions/` | `$HOME/.hashcat/kernels/` | `$HOME/.hashcat/` | +| `$XDG_DATA_HOME` and `$XDG_CACHE_HOME` set | `$XDG_DATA_HOME/hashcat/sessions/` | `$XDG_CACHE_HOME/hashcat/kernels/` | `$XDG_DATA_HOME/hashcat/` | +| Only `$XDG_DATA_HOME` set | `$XDG_DATA_HOME/hashcat/sessions/` | `$HOME/.cache/hashcat/` | `$XDG_DATA_HOME/hashcat/` | +| Only `$XDG_CACHE_HOME` set | `$HOME/.local/share/hashcat/sessions/` | `$XDG_CACHE_HOME/hashcat/kernels/` | `$HOME/.local/share/hashcat/` | +| None of the above | `$HOME/.local/share/hashcat/sessions/` | `$HOME/.cache/hashcat/` | `$HOME/.local/share/hashcat/` | -Otherwise, if environment variable XDG_DATA_HOME and XDG_CACHE_HOME exists, then: +--- -- Session related files go to: $XDG_DATA_HOME/hashcat/sessions/ -- Cached kernels go to: $XDG_CACHE_HOME/hashcat/kernels/ -- Potfiles go to: $XDG_DATA_HOME/hashcat/ +## 🐳 Building Hashcat with Docker -Otherwise, if environment variable XDG_DATA_HOME exists, then: +See: [BUILD_Docker.md](BUILD_Docker.md) -- Session related files go to: $XDG_DATA_HOME/hashcat/sessions/ -- Cached kernels go to: $HOME/.cache/hashcat -- Potfiles go to: $XDG_DATA_HOME/hashcat/ +--- -Otherwise, if environment variable XDG_CACHE_HOME exists, then: +## 🪟 Building Hashcat for Windows -- Session related files go to: $HOME/.local/share/hashcat/sessions/ -- Cached kernels go to: $XDG_CACHE_HOME/hashcat/kernels/ -- Potfiles go to: $HOME/.local/share/hashcat/ +| Method | Documentation | +|----------------------------------------|--------------------------------------| +| From macOS | [BUILD_macOS.md](BUILD_macOS.md) | +| Using Windows Subsystem for Linux (WSL)| [BUILD_WSL.md](BUILD_WSL.md) | +| Using Cygwin | [BUILD_CYGWIN.md](BUILD_CYGWIN.md) | +| Using MSYS2 | [BUILD_MSYS2.md](BUILD_MSYS2.md) | +| From Linux | Run: `make win` | -Otherwise: +--- -- Session related files go to: $HOME/.local/share/hashcat/sessions/ -- Cached kernels go to: $HOME/.cache/hashcat -- Potfiles go to: $HOME/.local/share/hashcat/ +## 🎉 Done -### Building hashcat binaries using Docker ### - -Refer to [BUILD_Docker.md](BUILD_Docker.md) - -### Building hashcat for Windows (using macOS) ### - -Refer to [BUILD_macOS.md](BUILD_macOS.md) - -### Building hashcat for Windows (using Windows Subsystem for Linux) ### - -Refer to [BUILD_WSL.md](BUILD_WSL.md) - -### Building hashcat for Windows (using Cygwin) ### - -Refer to [BUILD_CYGWIN.md](BUILD_CYGWIN.md) - -### Building hashcat for Windows (using MSYS2) ### - -Refer to [BUILD_MSYS2.md](BUILD_MSYS2.md) - -### Building hashcat for Windows from Linux ### - -``` -$ make win -``` - -= -Enjoy your fresh **hashcat** binaries ;) +Enjoy your fresh **Hashcat** binaries! 😎 From 378abf695717391caa1683362c4135906f3f0f2d Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Sat, 7 Jun 2025 17:52:34 +0200 Subject: [PATCH 41/95] Metal Backend: added workaround to set the true Processor value in Metal devices on Apple Intel --- docs/changes.txt | 1 + src/backend.c | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/docs/changes.txt b/docs/changes.txt index 2325ce8e8..b95e1904c 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -137,6 +137,7 @@ - MetaMask: update extraction tool to support MetaMask Mobile wallets - SecureCRT MasterPassphrase v2: update module, pure kernels and test unit. Add optimized kernels. - Metal Backend: added workaround to prevent 'Infinite Loop' bug when build kernels +- Metal Backend: added workaround to set the true Processor value in Metal devices on Apple Intel - Metal Backend: allow use of devices with Metal if runtime version is >= 200 - Metal Backend: disable Metal devices only if at least one OpenCL device is active - Modules: Check UnpackSize to raise false positive with hc_decompress_rar diff --git a/src/backend.c b/src/backend.c index 02248a21d..adb6d66fe 100644 --- a/src/backend.c +++ b/src/backend.c @@ -6838,6 +6838,33 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) device_param->device_processors = device_processors; + #if defined (__APPLE__) + if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) + { + if (backend_ctx->metal_devices_cnt > 0 && backend_ctx->metal_devices_active > 0) + { + for (int metal_devices_idx = 0; metal_devices_idx < backend_ctx->metal_devices_cnt; metal_devices_idx++) + { + const int tmp_backend_devices_idx = backend_ctx->backend_device_from_metal[metal_devices_idx]; + + hc_device_param_t *tmp_device_param = backend_ctx->devices_param + tmp_backend_devices_idx; + + if (strstr (device_param->device_name, tmp_device_param->device_name) || strstr (tmp_device_param->device_name, device_param->device_name)) + { + // can't detect the actual value of device_processors on macOS Intel with Metal + // set the value of Metal device_processor from OpenCL to solve the issue + if (tmp_device_param->device_processors != device_param->device_processors) + { + tmp_device_param->device_processors = device_param->device_processors; + + break; + } + } + } + } + } + #endif // __APPLE__ + // device_host_unified_memory cl_bool device_host_unified_memory = false; From 12f1fe56aa5634831c25c0ff72ecb8c88b7214cd Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Sat, 7 Jun 2025 20:22:01 +0200 Subject: [PATCH 42/95] OpenCL Backend: added workaround to set device_available_memory from CUDA/HIP alias device --- docs/changes.txt | 1 + src/backend.c | 233 +++++++++++++++++++++++++++++------------------ 2 files changed, 143 insertions(+), 91 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index b95e1904c..9d93c5e98 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -130,6 +130,7 @@ - Modules: Added support for non-zero IVs for -m 6800 (Lastpass). Also added `tools/lastpass2hashcat.py` - Modules: Updated module_unstable_warning - Open Document Format: Added support for small documents with content length < 1024 +- OpenCL Backend: added workaround to set device_available_memory from CUDA/HIP alias device - Status Code: Add specific return code for self-test fail (-11) - Scrypt: Increase buffer sizes in module for hash mode 8900 to allow longer scrypt digests - Unicode: Update UTF-8 to UTF-16 conversion to match RFC 3629 diff --git a/src/backend.c b/src/backend.c index adb6d66fe..8e5ce28d2 100644 --- a/src/backend.c +++ b/src/backend.c @@ -8362,114 +8362,165 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) */ } - // available device memory - // This test causes an GPU memory usage spike. - // In case there are multiple hashcat instances starting at the same time this will cause GPU out of memory errors which otherwise would not exist. - // We will simply not run it if that device was skipped by the user. + // available device memory + // first trying to check if we can get device_available_mem from cuda/hip alias device - if (device_param->device_global_mem) + bool updated_device_available_mem = false; + + if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) { - #define MAX_ALLOC_CHECKS_CNT 8192 - #define MAX_ALLOC_CHECKS_SIZE (64 * 1024 * 1024) - - device_param->device_available_mem = device_param->device_global_mem - MAX_ALLOC_CHECKS_SIZE; - - if (user_options->backend_devices_keepfree) + if (device_param->opencl_platform_vendor_id == VENDOR_ID_NV) { - device_param->device_available_mem = (device_param->device_global_mem * (100 - user_options->backend_devices_keepfree)) / 100; + if (backend_ctx->cuda_devices_cnt > 0 && backend_ctx->cuda_devices_active > 0) + { + for (int cuda_devices_idx = 0; cuda_devices_idx < backend_ctx->cuda_devices_cnt; cuda_devices_idx++) + { + const int tmp_backend_devices_idx = backend_ctx->backend_device_from_cuda[cuda_devices_idx]; + + hc_device_param_t *tmp_device_param = backend_ctx->devices_param + tmp_backend_devices_idx; + + if (is_same_device (device_param, tmp_device_param)) + { + device_param->device_available_mem = tmp_device_param->device_available_mem; + updated_device_available_mem = true; + break; + } + } + } } - // this section is creating more problems than it solves, so lets use a fixed multiplier instead - // users can override with --backend-devices-keepfree=0 - else if ((device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) && (device_param->device_host_unified_memory == 0)) + else if (device_param->opencl_platform_vendor_id == VENDOR_ID_AMD) { - // OK, so the problem here is the following: - // There's just CL_DEVICE_GLOBAL_MEM_SIZE to ask OpenCL about the total memory on the device, - // but there's no way to ask for available memory on the device. - // In combination, most OpenCL runtimes implementation of clCreateBuffer() - // are doing so called lazy memory allocation on the device. - // Now, if the user has X11 (or a game or anything that takes a lot of GPU memory) - // running on the host we end up with an error type of this: - // clEnqueueNDRangeKernel(): CL_MEM_OBJECT_ALLOCATION_FAILURE - // The clEnqueueNDRangeKernel() is because of the lazy allocation - // The best way to workaround this problem is if we would be able to ask for available memory, - // The idea here is to try to evaluate available memory by allocating it till it errors - - cl_mem *tmp_device = (cl_mem *) hccalloc (MAX_ALLOC_CHECKS_CNT, sizeof (cl_mem)); - - u64 c; - - for (c = 0; c < MAX_ALLOC_CHECKS_CNT; c++) + if (backend_ctx->hip_devices_cnt > 0 && backend_ctx->hip_devices_active > 0) { - if (((c + 1 + 1) * MAX_ALLOC_CHECKS_SIZE) >= device_param->device_global_mem) break; - - // work around, for some reason apple opencl can't have buffers larger 2^31 - // typically runs into trap 6 - // maybe 32/64 bit problem affecting size_t? - // this seems to affect global memory as well no just single allocations - - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->is_metal == false)) + for (int hip_devices_idx = 0; hip_devices_idx < backend_ctx->hip_devices_cnt; hip_devices_idx++) { - const size_t undocumented_single_allocation_apple = 0x7fffffff; + const int tmp_backend_devices_idx = backend_ctx->backend_device_from_hip[hip_devices_idx]; - if (((c + 1 + 1) * MAX_ALLOC_CHECKS_SIZE) >= undocumented_single_allocation_apple) break; - } + hc_device_param_t *tmp_device_param = backend_ctx->devices_param + tmp_backend_devices_idx; - cl_int CL_err; - - OCL_PTR *ocl = (OCL_PTR *) backend_ctx->ocl; - - tmp_device[c] = ocl->clCreateBuffer (context, CL_MEM_READ_WRITE, MAX_ALLOC_CHECKS_SIZE, NULL, &CL_err); - - if (CL_err != CL_SUCCESS) - { - c--; - - break; - } - - // transfer only a few byte should be enough to force the runtime to actually allocate the memory - - u8 tmp_host[8]; - - if (ocl->clEnqueueReadBuffer (command_queue, tmp_device[c], CL_TRUE, 0, sizeof (tmp_host), tmp_host, 0, NULL, NULL) != CL_SUCCESS) break; - if (ocl->clEnqueueWriteBuffer (command_queue, tmp_device[c], CL_TRUE, 0, sizeof (tmp_host), tmp_host, 0, NULL, NULL) != CL_SUCCESS) break; - - if (ocl->clEnqueueReadBuffer (command_queue, tmp_device[c], CL_TRUE, MAX_ALLOC_CHECKS_SIZE - sizeof (tmp_host), sizeof (tmp_host), tmp_host, 0, NULL, NULL) != CL_SUCCESS) break; - if (ocl->clEnqueueWriteBuffer (command_queue, tmp_device[c], CL_TRUE, MAX_ALLOC_CHECKS_SIZE - sizeof (tmp_host), sizeof (tmp_host), tmp_host, 0, NULL, NULL) != CL_SUCCESS) break; - } - - device_param->device_available_mem = MAX_ALLOC_CHECKS_SIZE; - - if (c > 0) - { - device_param->device_available_mem *= c; - } - - // clean up - - for (c = 0; c < MAX_ALLOC_CHECKS_CNT; c++) - { - if (((c + 1 + 1) * MAX_ALLOC_CHECKS_SIZE) >= device_param->device_global_mem) break; - - if (tmp_device[c] != NULL) - { - if (hc_clReleaseMemObject (hashcat_ctx, tmp_device[c]) == -1) return -1; + if (is_same_device (device_param, tmp_device_param)) + { + device_param->device_available_mem = tmp_device_param->device_available_mem; + updated_device_available_mem = true; + break; + } } } - - hcfree (tmp_device); } } - hc_clReleaseCommandQueue (hashcat_ctx, command_queue); + // if not found ... use old strategy - hc_clReleaseContext (hashcat_ctx, context); - - if (device_param->device_host_unified_memory == 1) + if (updated_device_available_mem == false) { - // so, we actually have only half the memory because we need the same buffers on host side + // This test causes an GPU memory usage spike. + // In case there are multiple hashcat instances starting at the same time this will cause GPU out of memory errors which otherwise would not exist. + // We will simply not run it if that device was skipped by the user. - device_param->device_available_mem /= 2; + if (device_param->device_global_mem) + { + #define MAX_ALLOC_CHECKS_CNT 8192 + #define MAX_ALLOC_CHECKS_SIZE (64 * 1024 * 1024) + + device_param->device_available_mem = device_param->device_global_mem - MAX_ALLOC_CHECKS_SIZE; + + if (user_options->backend_devices_keepfree) + { + device_param->device_available_mem = (device_param->device_global_mem * (100 - user_options->backend_devices_keepfree)) / 100; + } + // this section is creating more problems than it solves, so lets use a fixed multiplier instead + // users can override with --backend-devices-keepfree=0 + else if ((device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) && (device_param->device_host_unified_memory == 0)) + { + // OK, so the problem here is the following: + // There's just CL_DEVICE_GLOBAL_MEM_SIZE to ask OpenCL about the total memory on the device, + // but there's no way to ask for available memory on the device. + // In combination, most OpenCL runtimes implementation of clCreateBuffer() + // are doing so called lazy memory allocation on the device. + // Now, if the user has X11 (or a game or anything that takes a lot of GPU memory) + // running on the host we end up with an error type of this: + // clEnqueueNDRangeKernel(): CL_MEM_OBJECT_ALLOCATION_FAILURE + // The clEnqueueNDRangeKernel() is because of the lazy allocation + // The best way to workaround this problem is if we would be able to ask for available memory, + // The idea here is to try to evaluate available memory by allocating it till it errors + + cl_mem *tmp_device = (cl_mem *) hccalloc (MAX_ALLOC_CHECKS_CNT, sizeof (cl_mem)); + + u64 c; + + for (c = 0; c < MAX_ALLOC_CHECKS_CNT; c++) + { + if (((c + 1 + 1) * MAX_ALLOC_CHECKS_SIZE) >= device_param->device_global_mem) break; + + // work around, for some reason apple opencl can't have buffers larger 2^31 + // typically runs into trap 6 + // maybe 32/64 bit problem affecting size_t? + // this seems to affect global memory as well no just single allocations + + if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->is_metal == false)) + { + const size_t undocumented_single_allocation_apple = 0x7fffffff; + + if (((c + 1 + 1) * MAX_ALLOC_CHECKS_SIZE) >= undocumented_single_allocation_apple) break; + } + + cl_int CL_err; + + OCL_PTR *ocl = (OCL_PTR *) backend_ctx->ocl; + + tmp_device[c] = ocl->clCreateBuffer (context, CL_MEM_READ_WRITE, MAX_ALLOC_CHECKS_SIZE, NULL, &CL_err); + + if (CL_err != CL_SUCCESS) + { + c--; + + break; + } + + // transfer only a few byte should be enough to force the runtime to actually allocate the memory + + u8 tmp_host[8]; + + if (ocl->clEnqueueReadBuffer (command_queue, tmp_device[c], CL_TRUE, 0, sizeof (tmp_host), tmp_host, 0, NULL, NULL) != CL_SUCCESS) break; + if (ocl->clEnqueueWriteBuffer (command_queue, tmp_device[c], CL_TRUE, 0, sizeof (tmp_host), tmp_host, 0, NULL, NULL) != CL_SUCCESS) break; + + if (ocl->clEnqueueReadBuffer (command_queue, tmp_device[c], CL_TRUE, MAX_ALLOC_CHECKS_SIZE - sizeof (tmp_host), sizeof (tmp_host), tmp_host, 0, NULL, NULL) != CL_SUCCESS) break; + if (ocl->clEnqueueWriteBuffer (command_queue, tmp_device[c], CL_TRUE, MAX_ALLOC_CHECKS_SIZE - sizeof (tmp_host), sizeof (tmp_host), tmp_host, 0, NULL, NULL) != CL_SUCCESS) break; + } + + device_param->device_available_mem = MAX_ALLOC_CHECKS_SIZE; + + if (c > 0) + { + device_param->device_available_mem *= c; + } + + // clean up + + for (c = 0; c < MAX_ALLOC_CHECKS_CNT; c++) + { + if (((c + 1 + 1) * MAX_ALLOC_CHECKS_SIZE) >= device_param->device_global_mem) break; + + if (tmp_device[c] != NULL) + { + if (hc_clReleaseMemObject (hashcat_ctx, tmp_device[c]) == -1) return -1; + } + } + + hcfree (tmp_device); + } + } + + hc_clReleaseCommandQueue (hashcat_ctx, command_queue); + + hc_clReleaseContext (hashcat_ctx, context); + + if (device_param->device_host_unified_memory == 1) + { + // so, we actually have only half the memory because we need the same buffers on host side + + device_param->device_available_mem /= 2; + } } } } From 48d405d9aabf995d387a61124064e86b52675a06 Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Sat, 7 Jun 2025 22:52:11 +0200 Subject: [PATCH 43/95] add .so/.dll from bridges directory in .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index a9fd43fb4..6dd2f09f2 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,8 @@ hashcat.dll *.dSYM kernels/** lib/*.a +bridges/*.dll +bridges/*.so modules/*.dll modules/*.so obj/*/*/*.o From ed6e9674255b75528a729827fa09ba974f45190f Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Sun, 8 Jun 2025 07:32:32 +0200 Subject: [PATCH 44/95] Add experimental SCRYPT N-parameter auto-discovery Remove existing tuningdb entries due to salsa_r() core refactor. Update tuningdb engine to prefer file entries, when available, over automatic discovery. Improve memory-free detection per device, default --backend-device-keepfree is now set to 0. Old brute-force OpenCL behavior can be restored using --backend-device-keepfree 100. --- OpenCL/m08900-pure.cl | 1 - OpenCL/m15700-pure.cl | 42 ++++++++--------- include/modules.h | 2 +- include/tuningdb.h | 2 +- include/types.h | 5 ++- src/backend.c | 12 ++--- src/modules/module_08900.c | 90 ++++++++++++++++++++++++++++++++++++- src/modules/module_09300.c | 90 ++++++++++++++++++++++++++++++++++++- src/modules/module_15700.c | 90 ++++++++++++++++++++++++++++++++++++- src/modules/module_22700.c | 90 ++++++++++++++++++++++++++++++++++++- src/modules/module_24000.c | 90 ++++++++++++++++++++++++++++++++++++- src/modules/module_27700.c | 90 ++++++++++++++++++++++++++++++++++++- src/modules/module_28200.c | 90 ++++++++++++++++++++++++++++++++++++- src/modules/module_29800.c | 90 ++++++++++++++++++++++++++++++++++++- src/tuningdb.c | 23 +++++++--- tunings/Module_08900.hctune | 25 +++-------- tunings/Module_09300.hctune | 20 ++------- tunings/Module_15700.hctune | 22 ++------- tunings/Module_22700.hctune | 23 ++-------- tunings/Module_24000.hctune | 24 +++++++++- tunings/Module_27700.hctune | 23 ++-------- tunings/Module_28200.hctune | 23 ++-------- tunings/Module_29800.hctune | 16 ++----- 23 files changed, 812 insertions(+), 171 deletions(-) diff --git a/OpenCL/m08900-pure.cl b/OpenCL/m08900-pure.cl index 884e24359..aafbf1d30 100644 --- a/OpenCL/m08900-pure.cl +++ b/OpenCL/m08900-pure.cl @@ -194,7 +194,6 @@ DECLSPEC void salsa_r (PRIVATE_AS u32 *TI) } #endif - } DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) diff --git a/OpenCL/m15700-pure.cl b/OpenCL/m15700-pure.cl index 1010a5e8b..4604fc293 100644 --- a/OpenCL/m15700-pure.cl +++ b/OpenCL/m15700-pure.cl @@ -68,27 +68,6 @@ DECLSPEC uint4 hc_swap32_4 (uint4 v) DECLSPEC void salsa_r (PRIVATE_AS u32 *TI) { - #if SCRYPT_R > 1 - - u32 TT[STATE_CNT / 2]; - - for (int dst_off = 0, src_off = 16; src_off < STATE_CNT; dst_off += 16, src_off += 32) - { - for (int j = 0; j < 16; j++) TT[dst_off + j] = TI[src_off + j]; - } - - for (int dst_off = 16, src_off = 32; src_off < STATE_CNT; dst_off += 16, src_off += 32) - { - for (int j = 0; j < 16; j++) TI[dst_off + j] = TI[src_off + j]; - } - - for (int dst_off = STATE_CNT / 2, src_off = 0; dst_off < STATE_CNT; dst_off += 16, src_off += 16) - { - for (int j = 0; j < 16; j++) TI[dst_off + j] = TT[src_off + j]; - } - - #endif - u32 x[16]; for (int j = 0; j < 16; j++) x[j] = TI[STATE_CNT - 16 + j]; @@ -202,6 +181,27 @@ DECLSPEC void salsa_r (PRIVATE_AS u32 *TI) TI[i + j] = x[j]; } } + + #if SCRYPT_R > 1 + + u32 TT[STATE_CNT / 2]; + + for (int dst_off = 0, src_off = 16; src_off < STATE_CNT; dst_off += 16, src_off += 32) + { + for (int j = 0; j < 16; j++) TT[dst_off + j] = TI[src_off + j]; + } + + for (int dst_off = 16, src_off = 32; src_off < STATE_CNT; dst_off += 16, src_off += 32) + { + for (int j = 0; j < 16; j++) TI[dst_off + j] = TI[src_off + j]; + } + + for (int dst_off = STATE_CNT / 2, src_off = 0; dst_off < STATE_CNT; dst_off += 16, src_off += 16) + { + for (int j = 0; j < 16; j++) TI[dst_off + j] = TT[src_off + j]; + } + + #endif } DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) diff --git a/include/modules.h b/include/modules.h index 9768c11de..aed8403ce 100644 --- a/include/modules.h +++ b/include/modules.h @@ -20,7 +20,7 @@ u32 module_dgst_pos2 (MAYBE_UNUSED const hashconfig_t *ha u32 module_dgst_pos3 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra); u32 module_dgst_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra); u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra); -const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra); +const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes); u32 module_forced_outfile_format (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra); u32 module_hash_category (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra); const char *module_hash_name (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra); diff --git a/include/tuningdb.h b/include/tuningdb.h index b2cafff67..608a25cfd 100644 --- a/include/tuningdb.h +++ b/include/tuningdb.h @@ -17,7 +17,7 @@ int sort_by_tuning_db_entry (const void *v1, const void *v2); int tuning_db_init (hashcat_ctx_t *hashcat_ctx); void tuning_db_destroy (hashcat_ctx_t *hashcat_ctx); -bool tuning_db_process_line (hashcat_ctx_t *hashcat_ctx, const char *line_buf, const int line_num); +bool tuning_db_process_line (hashcat_ctx_t *hashcat_ctx, const char *line_buf, const int line_num, const int source); tuning_db_entry_t *tuning_db_search (hashcat_ctx_t *hashcat_ctx, const char *device_name, const cl_device_type device_type, int attack_mode, const int hash_mode); #endif // HC_TUNINGDB_H diff --git a/include/types.h b/include/types.h index d40a8cf29..d02c1b783 100644 --- a/include/types.h +++ b/include/types.h @@ -670,7 +670,7 @@ typedef enum user_options_defaults AUTODETECT = false, BACKEND_DEVICES_VIRTMULTI = 1, BACKEND_DEVICES_VIRTHOST = 1, - BACKEND_DEVICES_KEEPFREE = 20, + BACKEND_DEVICES_KEEPFREE = 0, BENCHMARK_ALL = false, BENCHMARK_MAX = 99999, BENCHMARK_MIN = 0, @@ -2324,6 +2324,7 @@ typedef struct tuning_db_entry int vector_width; int kernel_accel; int kernel_loops; + int source; // 1 = dbfile, 2 = module } tuning_db_entry_t; @@ -3012,7 +3013,7 @@ typedef struct module_ctx u32 (*module_dgst_size) (const hashconfig_t *, const user_options_t *, const user_options_extra_t *); bool (*module_dictstat_disable) (const hashconfig_t *, const user_options_t *, const user_options_extra_t *); u64 (*module_esalt_size) (const hashconfig_t *, const user_options_t *, const user_options_extra_t *); - const char *(*module_extra_tuningdb_block) (const hashconfig_t *, const user_options_t *, const user_options_extra_t *); + const char *(*module_extra_tuningdb_block) (const hashconfig_t *, const user_options_t *, const user_options_extra_t *, const backend_ctx_t *, const hashes_t *); u32 (*module_forced_outfile_format) (const hashconfig_t *, const user_options_t *, const user_options_extra_t *); u32 (*module_hash_category) (const hashconfig_t *, const user_options_t *, const user_options_extra_t *); const char *(*module_hash_name) (const hashconfig_t *, const user_options_t *, const user_options_extra_t *); diff --git a/src/backend.c b/src/backend.c index 8e5ce28d2..c5b95a659 100644 --- a/src/backend.c +++ b/src/backend.c @@ -8143,12 +8143,12 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) device_param->device_available_mem = device_param->device_global_mem - MAX_ALLOC_CHECKS_SIZE; - if (user_options->backend_devices_keepfree) + if (user_options->backend_devices_keepfree < 100) { device_param->device_available_mem = (device_param->device_global_mem * (100 - user_options->backend_devices_keepfree)) / 100; } // this section is creating more problems than it solves, so lets use a fixed multiplier instead - // users can override with --backend-devices-keepfree=0 + // users can override with --backend-devices-keepfree=100 else if ((device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) && (device_param->device_host_unified_memory == 0)) { // following the same logic as for OpenCL, explained later @@ -8424,12 +8424,12 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) device_param->device_available_mem = device_param->device_global_mem - MAX_ALLOC_CHECKS_SIZE; - if (user_options->backend_devices_keepfree) + if (user_options->backend_devices_keepfree < 100) { device_param->device_available_mem = (device_param->device_global_mem * (100 - user_options->backend_devices_keepfree)) / 100; } // this section is creating more problems than it solves, so lets use a fixed multiplier instead - // users can override with --backend-devices-keepfree=0 + // users can override with --backend-devices-keepfree=100 else if ((device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) && (device_param->device_host_unified_memory == 0)) { // OK, so the problem here is the following: @@ -9649,7 +9649,7 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) if (module_ctx->module_extra_tuningdb_block != MODULE_DEFAULT) { - const char *extra_tuningdb_block = module_ctx->module_extra_tuningdb_block (hashconfig, user_options, user_options_extra); + const char *extra_tuningdb_block = module_ctx->module_extra_tuningdb_block (hashconfig, user_options, user_options_extra, backend_ctx, hashes); char *lines_buf = hcstrdup (extra_tuningdb_block); @@ -9669,7 +9669,7 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) if (next[0] == '#') continue; - tuning_db_process_line (hashcat_ctx, next, line_num); + tuning_db_process_line (hashcat_ctx, next, line_num, 2); } while ((next = strtok_r ((char *) NULL, "\n", &saveptr)) != NULL); diff --git a/src/modules/module_08900.c b/src/modules/module_08900.c index 35a64484d..0865e8575 100644 --- a/src/modules/module_08900.c +++ b/src/modules/module_08900.c @@ -10,6 +10,7 @@ #include "bitops.h" #include "convert.h" #include "shared.h" +#include "memory.h" static const u32 ATTACK_EXEC = ATTACK_EXEC_OUTSIDE_KERNEL; static const u32 DGST_POS0 = 0; @@ -83,6 +84,93 @@ u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED con return pw_max; } +const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes) +{ + // we enforce the same configuration for all hashes, so this should be fine + + const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; + const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; + + const u64 req1 = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); + + int lines_sz = 4096; + char *lines_buf = hcmalloc (lines_sz); + int lines_pos = 0; + + for (int backend_devices_idx = 0; backend_devices_idx < backend_ctx->backend_devices_cnt; backend_devices_idx++) + { + hc_device_param_t *device_param = &backend_ctx->devices_param[backend_devices_idx]; + + if (device_param->skipped == true) continue; + + const u64 avail = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)) - (2 * req1); + + char *new_device_name = hcstrdup (device_param->device_name); + + for (size_t i = 0; i < strlen (new_device_name); i++) + { + if (new_device_name[i] == ' ') new_device_name[i] = '_'; + } + + char *out_name = new_device_name; + + if (memcmp (new_device_name, "AMD_", 4) == 0) out_name += 4; + if (memcmp (new_device_name, "NVIDIA_", 7) == 0) out_name += 7; + + // ok, try to find a nice accel programmatically + + u32 accel = device_param->device_processors; + + if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) + { + // expect to change any of this + + if (avail < (req1 * accel)) // not enough memory + { + const float multi = (float) avail / req1; + + accel = multi; + + for (int i = 1; i <= 4; i++) // this is tmto + { + if (device_param->device_processors > accel) + { + accel = ((u64) multi << i) & ~3; + } + } + } + else + { + for (int i = 1; i <= 8; i++) + { + if ((avail * 2) > (req1 * accel)) + { + accel = device_param->device_processors * i; + } + } + } + } + else + { + const u64 req1 = 128 * scrypt_r * scrypt_N; + + for (int i = 1; i <= 8; i++) + { + if (avail > (req1 * accel)) + { + accel = device_param->device_processors * i; + } + } + } + + lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", out_name, user_options->hash_mode, accel); + + hcfree (new_device_name); + } + + return lines_buf; +} + u64 module_extra_buffer_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) { // we need to set the self-test hash settings to pass the self-test @@ -406,7 +494,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_esalt_size = MODULE_DEFAULT; module_ctx->module_extra_buffer_size = module_extra_buffer_size; module_ctx->module_extra_tmp_size = module_extra_tmp_size; - module_ctx->module_extra_tuningdb_block = MODULE_DEFAULT; + module_ctx->module_extra_tuningdb_block = module_extra_tuningdb_block; module_ctx->module_forced_outfile_format = MODULE_DEFAULT; module_ctx->module_hash_binary_count = MODULE_DEFAULT; module_ctx->module_hash_binary_parse = MODULE_DEFAULT; diff --git a/src/modules/module_09300.c b/src/modules/module_09300.c index c2118e202..8f92e7fce 100644 --- a/src/modules/module_09300.c +++ b/src/modules/module_09300.c @@ -10,6 +10,7 @@ #include "bitops.h" #include "convert.h" #include "shared.h" +#include "memory.h" static const u32 ATTACK_EXEC = ATTACK_EXEC_OUTSIDE_KERNEL; static const u32 DGST_POS0 = 0; @@ -83,6 +84,93 @@ u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED con return pw_max; } +const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes) +{ + // we enforce the same configuration for all hashes, so this should be fine + + const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; + const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; + + const u64 req1 = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); + + int lines_sz = 4096; + char *lines_buf = hcmalloc (lines_sz); + int lines_pos = 0; + + for (int backend_devices_idx = 0; backend_devices_idx < backend_ctx->backend_devices_cnt; backend_devices_idx++) + { + hc_device_param_t *device_param = &backend_ctx->devices_param[backend_devices_idx]; + + if (device_param->skipped == true) continue; + + const u64 avail = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)) - (2 * req1); + + char *new_device_name = hcstrdup (device_param->device_name); + + for (size_t i = 0; i < strlen (new_device_name); i++) + { + if (new_device_name[i] == ' ') new_device_name[i] = '_'; + } + + char *out_name = new_device_name; + + if (memcmp (new_device_name, "AMD_", 4) == 0) out_name += 4; + if (memcmp (new_device_name, "NVIDIA_", 7) == 0) out_name += 7; + + // ok, try to find a nice accel programmatically + + u32 accel = device_param->device_processors; + + if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) + { + // expect to change any of this + + if (avail < (req1 * accel)) // not enough memory + { + const float multi = (float) avail / req1; + + accel = multi; + + for (int i = 1; i <= 4; i++) // this is tmto + { + if (device_param->device_processors > accel) + { + accel = ((u64) multi << i) & ~3; + } + } + } + else + { + for (int i = 1; i <= 8; i++) + { + if ((avail * 2) > (req1 * accel)) + { + accel = device_param->device_processors * i; + } + } + } + } + else + { + const u64 req1 = 128 * scrypt_r * scrypt_N; + + for (int i = 1; i <= 8; i++) + { + if (avail > (req1 * accel)) + { + accel = device_param->device_processors * i; + } + } + } + + lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", out_name, user_options->hash_mode, accel); + + hcfree (new_device_name); + } + + return lines_buf; +} + u64 module_extra_buffer_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) { // we need to set the self-test hash settings to pass the self-test @@ -367,7 +455,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_esalt_size = MODULE_DEFAULT; module_ctx->module_extra_buffer_size = module_extra_buffer_size; module_ctx->module_extra_tmp_size = module_extra_tmp_size; - module_ctx->module_extra_tuningdb_block = MODULE_DEFAULT; + module_ctx->module_extra_tuningdb_block = module_extra_tuningdb_block; module_ctx->module_forced_outfile_format = MODULE_DEFAULT; module_ctx->module_hash_binary_count = MODULE_DEFAULT; module_ctx->module_hash_binary_parse = MODULE_DEFAULT; diff --git a/src/modules/module_15700.c b/src/modules/module_15700.c index 26c381f71..c7a357dd0 100644 --- a/src/modules/module_15700.c +++ b/src/modules/module_15700.c @@ -10,6 +10,7 @@ #include "bitops.h" #include "convert.h" #include "shared.h" +#include "memory.h" static const u32 ATTACK_EXEC = ATTACK_EXEC_OUTSIDE_KERNEL; static const u32 DGST_POS0 = 0; @@ -97,6 +98,93 @@ u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED con return pw_max; } +const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes) +{ + // we enforce the same configuration for all hashes, so this should be fine + + const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; + const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; + + const u64 req1 = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); + + int lines_sz = 4096; + char *lines_buf = hcmalloc (lines_sz); + int lines_pos = 0; + + for (int backend_devices_idx = 0; backend_devices_idx < backend_ctx->backend_devices_cnt; backend_devices_idx++) + { + hc_device_param_t *device_param = &backend_ctx->devices_param[backend_devices_idx]; + + if (device_param->skipped == true) continue; + + const u64 avail = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)) - (2 * req1); + + char *new_device_name = hcstrdup (device_param->device_name); + + for (size_t i = 0; i < strlen (new_device_name); i++) + { + if (new_device_name[i] == ' ') new_device_name[i] = '_'; + } + + char *out_name = new_device_name; + + if (memcmp (new_device_name, "AMD_", 4) == 0) out_name += 4; + if (memcmp (new_device_name, "NVIDIA_", 7) == 0) out_name += 7; + + // ok, try to find a nice accel programmatically + + u32 accel = device_param->device_processors; + + if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) + { + // expect to change any of this + + if (avail < (req1 * accel)) // not enough memory + { + const float multi = (float) avail / req1; + + accel = multi; + + for (int i = 1; i <= 4; i++) // this is tmto + { + if (device_param->device_processors > accel) + { + accel = ((u64) multi << i) & ~3; + } + } + } + else + { + for (int i = 1; i <= 8; i++) + { + if ((avail * 2) > (req1 * accel)) + { + accel = device_param->device_processors * i; + } + } + } + } + else + { + const u64 req1 = 128 * scrypt_r * scrypt_N; + + for (int i = 1; i <= 8; i++) + { + if (avail > (req1 * accel)) + { + accel = device_param->device_processors * i; + } + } + } + + lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", out_name, user_options->hash_mode, accel); + + hcfree (new_device_name); + } + + return lines_buf; +} + u64 module_extra_buffer_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) { // we need to set the self-test hash settings to pass the self-test @@ -466,7 +554,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_esalt_size = module_esalt_size; module_ctx->module_extra_buffer_size = module_extra_buffer_size; module_ctx->module_extra_tmp_size = module_extra_tmp_size; - module_ctx->module_extra_tuningdb_block = MODULE_DEFAULT; + module_ctx->module_extra_tuningdb_block = module_extra_tuningdb_block; module_ctx->module_forced_outfile_format = MODULE_DEFAULT; module_ctx->module_hash_binary_count = MODULE_DEFAULT; module_ctx->module_hash_binary_parse = MODULE_DEFAULT; diff --git a/src/modules/module_22700.c b/src/modules/module_22700.c index a943d36df..30c106625 100644 --- a/src/modules/module_22700.c +++ b/src/modules/module_22700.c @@ -10,6 +10,7 @@ #include "bitops.h" #include "convert.h" #include "shared.h" +#include "memory.h" static const u32 ATTACK_EXEC = ATTACK_EXEC_OUTSIDE_KERNEL; static const u32 DGST_POS0 = 0; @@ -83,6 +84,93 @@ u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED con return pw_max; } +const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes) +{ + // we enforce the same configuration for all hashes, so this should be fine + + const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; + const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; + + const u64 req1 = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); + + int lines_sz = 4096; + char *lines_buf = hcmalloc (lines_sz); + int lines_pos = 0; + + for (int backend_devices_idx = 0; backend_devices_idx < backend_ctx->backend_devices_cnt; backend_devices_idx++) + { + hc_device_param_t *device_param = &backend_ctx->devices_param[backend_devices_idx]; + + if (device_param->skipped == true) continue; + + const u64 avail = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)) - (2 * req1); + + char *new_device_name = hcstrdup (device_param->device_name); + + for (size_t i = 0; i < strlen (new_device_name); i++) + { + if (new_device_name[i] == ' ') new_device_name[i] = '_'; + } + + char *out_name = new_device_name; + + if (memcmp (new_device_name, "AMD_", 4) == 0) out_name += 4; + if (memcmp (new_device_name, "NVIDIA_", 7) == 0) out_name += 7; + + // ok, try to find a nice accel programmatically + + u32 accel = device_param->device_processors; + + if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) + { + // expect to change any of this + + if (avail < (req1 * accel)) // not enough memory + { + const float multi = (float) avail / req1; + + accel = multi; + + for (int i = 1; i <= 4; i++) // this is tmto + { + if (device_param->device_processors > accel) + { + accel = ((u64) multi << i) & ~3; + } + } + } + else + { + for (int i = 1; i <= 8; i++) + { + if ((avail * 2) > (req1 * accel)) + { + accel = device_param->device_processors * i; + } + } + } + } + else + { + const u64 req1 = 128 * scrypt_r * scrypt_N; + + for (int i = 1; i <= 8; i++) + { + if (avail > (req1 * accel)) + { + accel = device_param->device_processors * i; + } + } + } + + lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", out_name, user_options->hash_mode, accel); + + hcfree (new_device_name); + } + + return lines_buf; +} + u64 module_extra_buffer_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) { // we need to set the self-test hash settings to pass the self-test @@ -405,7 +493,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_esalt_size = MODULE_DEFAULT; module_ctx->module_extra_buffer_size = module_extra_buffer_size; module_ctx->module_extra_tmp_size = module_extra_tmp_size; - module_ctx->module_extra_tuningdb_block = MODULE_DEFAULT; + module_ctx->module_extra_tuningdb_block = module_extra_tuningdb_block; module_ctx->module_forced_outfile_format = MODULE_DEFAULT; module_ctx->module_hash_binary_count = MODULE_DEFAULT; module_ctx->module_hash_binary_parse = MODULE_DEFAULT; diff --git a/src/modules/module_24000.c b/src/modules/module_24000.c index 7e6d545e2..62217f2d8 100644 --- a/src/modules/module_24000.c +++ b/src/modules/module_24000.c @@ -9,6 +9,7 @@ #include "bitops.h" #include "convert.h" #include "shared.h" +#include "memory.h" static const u32 ATTACK_EXEC = ATTACK_EXEC_OUTSIDE_KERNEL; static const u32 DGST_POS0 = 0; @@ -122,6 +123,93 @@ u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED con return pw_max; } +const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes) +{ + // we enforce the same configuration for all hashes, so this should be fine + + const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; + const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; + + const u64 req1 = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); + + int lines_sz = 4096; + char *lines_buf = hcmalloc (lines_sz); + int lines_pos = 0; + + for (int backend_devices_idx = 0; backend_devices_idx < backend_ctx->backend_devices_cnt; backend_devices_idx++) + { + hc_device_param_t *device_param = &backend_ctx->devices_param[backend_devices_idx]; + + if (device_param->skipped == true) continue; + + const u64 avail = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)) - (2 * req1); + + char *new_device_name = hcstrdup (device_param->device_name); + + for (size_t i = 0; i < strlen (new_device_name); i++) + { + if (new_device_name[i] == ' ') new_device_name[i] = '_'; + } + + char *out_name = new_device_name; + + if (memcmp (new_device_name, "AMD_", 4) == 0) out_name += 4; + if (memcmp (new_device_name, "NVIDIA_", 7) == 0) out_name += 7; + + // ok, try to find a nice accel programmatically + + u32 accel = device_param->device_processors; + + if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) + { + // expect to change any of this + + if (avail < (req1 * accel)) // not enough memory + { + const float multi = (float) avail / req1; + + accel = multi; + + for (int i = 1; i <= 4; i++) // this is tmto + { + if (device_param->device_processors > accel) + { + accel = ((u64) multi << i) & ~3; + } + } + } + else + { + for (int i = 1; i <= 8; i++) + { + if ((avail * 2) > (req1 * accel)) + { + accel = device_param->device_processors * i; + } + } + } + } + else + { + const u64 req1 = 128 * scrypt_r * scrypt_N; + + for (int i = 1; i <= 8; i++) + { + if (avail > (req1 * accel)) + { + accel = device_param->device_processors * i; + } + } + } + + lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", out_name, user_options->hash_mode, accel); + + hcfree (new_device_name); + } + + return lines_buf; +} + u64 module_extra_buffer_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) { // we need to set the self-test hash settings to pass the self-test @@ -477,7 +565,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_esalt_size = module_esalt_size; module_ctx->module_extra_buffer_size = module_extra_buffer_size; module_ctx->module_extra_tmp_size = module_extra_tmp_size; - module_ctx->module_extra_tuningdb_block = MODULE_DEFAULT; + module_ctx->module_extra_tuningdb_block = module_extra_tuningdb_block; module_ctx->module_forced_outfile_format = MODULE_DEFAULT; module_ctx->module_hash_binary_count = MODULE_DEFAULT; module_ctx->module_hash_binary_parse = MODULE_DEFAULT; diff --git a/src/modules/module_27700.c b/src/modules/module_27700.c index 6b03236a8..089deb5fa 100644 --- a/src/modules/module_27700.c +++ b/src/modules/module_27700.c @@ -10,6 +10,7 @@ #include "bitops.h" #include "convert.h" #include "shared.h" +#include "memory.h" static const u32 ATTACK_EXEC = ATTACK_EXEC_OUTSIDE_KERNEL; static const u32 DGST_POS0 = 0; @@ -83,6 +84,93 @@ u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED con return pw_max; } +const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes) +{ + // we enforce the same configuration for all hashes, so this should be fine + + const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; + const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; + + const u64 req1 = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); + + int lines_sz = 4096; + char *lines_buf = hcmalloc (lines_sz); + int lines_pos = 0; + + for (int backend_devices_idx = 0; backend_devices_idx < backend_ctx->backend_devices_cnt; backend_devices_idx++) + { + hc_device_param_t *device_param = &backend_ctx->devices_param[backend_devices_idx]; + + if (device_param->skipped == true) continue; + + const u64 avail = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)) - (2 * req1); + + char *new_device_name = hcstrdup (device_param->device_name); + + for (size_t i = 0; i < strlen (new_device_name); i++) + { + if (new_device_name[i] == ' ') new_device_name[i] = '_'; + } + + char *out_name = new_device_name; + + if (memcmp (new_device_name, "AMD_", 4) == 0) out_name += 4; + if (memcmp (new_device_name, "NVIDIA_", 7) == 0) out_name += 7; + + // ok, try to find a nice accel programmatically + + u32 accel = device_param->device_processors; + + if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) + { + // expect to change any of this + + if (avail < (req1 * accel)) // not enough memory + { + const float multi = (float) avail / req1; + + accel = multi; + + for (int i = 1; i <= 4; i++) // this is tmto + { + if (device_param->device_processors > accel) + { + accel = ((u64) multi << i) & ~3; + } + } + } + else + { + for (int i = 1; i <= 8; i++) + { + if ((avail * 2) > (req1 * accel)) + { + accel = device_param->device_processors * i; + } + } + } + } + else + { + const u64 req1 = 128 * scrypt_r * scrypt_N; + + for (int i = 1; i <= 8; i++) + { + if (avail > (req1 * accel)) + { + accel = device_param->device_processors * i; + } + } + } + + lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", out_name, user_options->hash_mode, accel); + + hcfree (new_device_name); + } + + return lines_buf; +} + u64 module_extra_buffer_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) { // we need to set the self-test hash settings to pass the self-test @@ -429,7 +517,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_esalt_size = MODULE_DEFAULT; module_ctx->module_extra_buffer_size = module_extra_buffer_size; module_ctx->module_extra_tmp_size = module_extra_tmp_size; - module_ctx->module_extra_tuningdb_block = MODULE_DEFAULT; + module_ctx->module_extra_tuningdb_block = module_extra_tuningdb_block; module_ctx->module_forced_outfile_format = MODULE_DEFAULT; module_ctx->module_hash_binary_count = MODULE_DEFAULT; module_ctx->module_hash_binary_parse = MODULE_DEFAULT; diff --git a/src/modules/module_28200.c b/src/modules/module_28200.c index 0aacb889e..86a636adf 100644 --- a/src/modules/module_28200.c +++ b/src/modules/module_28200.c @@ -10,6 +10,7 @@ #include "bitops.h" #include "convert.h" #include "shared.h" +#include "memory.h" static const u32 ATTACK_EXEC = ATTACK_EXEC_OUTSIDE_KERNEL; static const u32 DGST_POS0 = 0; @@ -95,6 +96,93 @@ u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED return esalt_size; } +const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes) +{ + // we enforce the same configuration for all hashes, so this should be fine + + const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; + const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; + + const u64 req1 = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); + + int lines_sz = 4096; + char *lines_buf = hcmalloc (lines_sz); + int lines_pos = 0; + + for (int backend_devices_idx = 0; backend_devices_idx < backend_ctx->backend_devices_cnt; backend_devices_idx++) + { + hc_device_param_t *device_param = &backend_ctx->devices_param[backend_devices_idx]; + + if (device_param->skipped == true) continue; + + const u64 avail = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)) - (2 * req1); + + char *new_device_name = hcstrdup (device_param->device_name); + + for (size_t i = 0; i < strlen (new_device_name); i++) + { + if (new_device_name[i] == ' ') new_device_name[i] = '_'; + } + + char *out_name = new_device_name; + + if (memcmp (new_device_name, "AMD_", 4) == 0) out_name += 4; + if (memcmp (new_device_name, "NVIDIA_", 7) == 0) out_name += 7; + + // ok, try to find a nice accel programmatically + + u32 accel = device_param->device_processors; + + if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) + { + // expect to change any of this + + if (avail < (req1 * accel)) // not enough memory + { + const float multi = (float) avail / req1; + + accel = multi; + + for (int i = 1; i <= 4; i++) // this is tmto + { + if (device_param->device_processors > accel) + { + accel = ((u64) multi << i) & ~3; + } + } + } + else + { + for (int i = 1; i <= 8; i++) + { + if ((avail * 2) > (req1 * accel)) + { + accel = device_param->device_processors * i; + } + } + } + } + else + { + const u64 req1 = 128 * scrypt_r * scrypt_N; + + for (int i = 1; i <= 8; i++) + { + if (avail > (req1 * accel)) + { + accel = device_param->device_processors * i; + } + } + } + + lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", out_name, user_options->hash_mode, accel); + + hcfree (new_device_name); + } + + return lines_buf; +} + u64 module_extra_buffer_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) { // we need to set the self-test hash settings to pass the self-test @@ -513,7 +601,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_esalt_size = module_esalt_size; module_ctx->module_extra_buffer_size = module_extra_buffer_size; module_ctx->module_extra_tmp_size = module_extra_tmp_size; - module_ctx->module_extra_tuningdb_block = MODULE_DEFAULT; + module_ctx->module_extra_tuningdb_block = module_extra_tuningdb_block; module_ctx->module_forced_outfile_format = MODULE_DEFAULT; module_ctx->module_hash_binary_count = MODULE_DEFAULT; module_ctx->module_hash_binary_parse = MODULE_DEFAULT; diff --git a/src/modules/module_29800.c b/src/modules/module_29800.c index 2bd6b351c..d1be6be39 100644 --- a/src/modules/module_29800.c +++ b/src/modules/module_29800.c @@ -10,6 +10,7 @@ #include "bitops.h" #include "convert.h" #include "shared.h" +#include "memory.h" static const u32 ATTACK_EXEC = ATTACK_EXEC_OUTSIDE_KERNEL; static const u32 DGST_POS0 = 0; @@ -90,6 +91,93 @@ u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED con return pw_max; } +const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes) +{ + // we enforce the same configuration for all hashes, so this should be fine + + const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; + const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; + + const u64 req1 = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); + + int lines_sz = 4096; + char *lines_buf = hcmalloc (lines_sz); + int lines_pos = 0; + + for (int backend_devices_idx = 0; backend_devices_idx < backend_ctx->backend_devices_cnt; backend_devices_idx++) + { + hc_device_param_t *device_param = &backend_ctx->devices_param[backend_devices_idx]; + + if (device_param->skipped == true) continue; + + const u64 avail = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)) - (2 * req1); + + char *new_device_name = hcstrdup (device_param->device_name); + + for (size_t i = 0; i < strlen (new_device_name); i++) + { + if (new_device_name[i] == ' ') new_device_name[i] = '_'; + } + + char *out_name = new_device_name; + + if (memcmp (new_device_name, "AMD_", 4) == 0) out_name += 4; + if (memcmp (new_device_name, "NVIDIA_", 7) == 0) out_name += 7; + + // ok, try to find a nice accel programmatically + + u32 accel = device_param->device_processors; + + if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) + { + // expect to change any of this + + if (avail < (req1 * accel)) // not enough memory + { + const float multi = (float) avail / req1; + + accel = multi; + + for (int i = 1; i <= 4; i++) // this is tmto + { + if (device_param->device_processors > accel) + { + accel = ((u64) multi << i) & ~3; + } + } + } + else + { + for (int i = 1; i <= 8; i++) + { + if ((avail * 2) > (req1 * accel)) + { + accel = device_param->device_processors * i; + } + } + } + } + else + { + const u64 req1 = 128 * scrypt_r * scrypt_N; + + for (int i = 1; i <= 8; i++) + { + if (avail > (req1 * accel)) + { + accel = device_param->device_processors * i; + } + } + } + + lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", out_name, user_options->hash_mode, accel); + + hcfree (new_device_name); + } + + return lines_buf; +} + u64 module_extra_buffer_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) { // we need to set the self-test hash settings to pass the self-test @@ -436,7 +524,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_esalt_size = MODULE_DEFAULT; module_ctx->module_extra_buffer_size = module_extra_buffer_size; module_ctx->module_extra_tmp_size = module_extra_tmp_size; - module_ctx->module_extra_tuningdb_block = MODULE_DEFAULT; + module_ctx->module_extra_tuningdb_block = module_extra_tuningdb_block; module_ctx->module_forced_outfile_format = MODULE_DEFAULT; module_ctx->module_hash_binary_count = MODULE_DEFAULT; module_ctx->module_hash_binary_parse = MODULE_DEFAULT; diff --git a/src/tuningdb.c b/src/tuningdb.c index 2f983b31e..406359ab4 100644 --- a/src/tuningdb.c +++ b/src/tuningdb.c @@ -43,6 +43,11 @@ int sort_by_tuning_db_entry (const void *v1, const void *v2) if (res3 != 0) return (res3); + const int res4 = t1->source + - t2->source; + + if (res4 != 0) return (res4); + return 0; } @@ -113,7 +118,7 @@ int tuning_db_init (hashcat_ctx_t *hashcat_ctx) if (line_buf[0] == '#') continue; - tuning_db_process_line (hashcat_ctx, line_buf, line_num); + tuning_db_process_line (hashcat_ctx, line_buf, line_num, 1); } hcfree (buf); @@ -162,7 +167,7 @@ void tuning_db_destroy (hashcat_ctx_t *hashcat_ctx) memset (tuning_db, 0, sizeof (tuning_db_t)); } -bool tuning_db_process_line (hashcat_ctx_t *hashcat_ctx, const char *line_buf, const int line_num) +bool tuning_db_process_line (hashcat_ctx_t *hashcat_ctx, const char *line_buf, const int line_num, const int source) { tuning_db_t *tuning_db = hashcat_ctx->tuning_db; user_options_extra_t *user_options_extra = hashcat_ctx->user_options_extra; @@ -348,6 +353,7 @@ bool tuning_db_process_line (hashcat_ctx_t *hashcat_ctx, const char *line_buf, c entry->vector_width = vector_width; entry->kernel_accel = kernel_accel; entry->kernel_loops = kernel_loops; + entry->source = source; tuning_db->entry_cnt++; } @@ -365,7 +371,7 @@ bool tuning_db_process_line (hashcat_ctx_t *hashcat_ctx, const char *line_buf, c return true; } -tuning_db_entry_t *tuning_db_search_real (hashcat_ctx_t *hashcat_ctx, const char *device_name, const cl_device_type device_type, int attack_mode, const int hash_mode) +static tuning_db_entry_t *tuning_db_search_real (hashcat_ctx_t *hashcat_ctx, const char *device_name, const cl_device_type device_type, int attack_mode, const int hash_mode) { tuning_db_t *tuning_db = hashcat_ctx->tuning_db; @@ -424,11 +430,12 @@ tuning_db_entry_t *tuning_db_search_real (hashcat_ctx_t *hashcat_ctx, const char // this will produce all 2^3 combinations required - for (i = 0; i < 8; i++) + for (i = 0; i < 16; i++) { - s.device_name = (i & 1) ? "*" : device_name_nospace; + s.source = (i & 1) ? 2 : 1; s.attack_mode = (i & 2) ? -1 : attack_mode; s.hash_mode = (i & 4) ? -1 : hash_mode; + s.device_name = (i & 8) ? "*" : device_name_nospace; entry = (tuning_db_entry_t *) bsearch (&s, tuning_db->entry_buf, tuning_db->entry_cnt, sizeof (tuning_db_entry_t), sort_by_tuning_db_entry); @@ -436,7 +443,7 @@ tuning_db_entry_t *tuning_db_search_real (hashcat_ctx_t *hashcat_ctx, const char // in non-wildcard mode do some additional checks: - if ((i & 1) == 0) + if ((i & 8) == 0) { // in case we have an alias-name @@ -501,5 +508,7 @@ tuning_db_entry_t *tuning_db_search (hashcat_ctx_t *hashcat_ctx, const char *dev entry = tuning_db_search_real (hashcat_ctx, device_name, device_type, attack_mode, hash_mode); - return entry; + if (entry) return entry; + + return NULL; } diff --git a/tunings/Module_08900.hctune b/tunings/Module_08900.hctune index 3ebbe7820..ecaa0e353 100644 --- a/tunings/Module_08900.hctune +++ b/tunings/Module_08900.hctune @@ -1,4 +1,4 @@ -# + # Find the right -n value for your GPU: # ===================================== # @@ -19,22 +19,9 @@ #Device Attack Hash Vector Kernel Kernel #Name Mode Type Width Accel Loops -DEVICE_TYPE_CPU * 8900 1 N A -DEVICE_TYPE_GPU * 8900 1 N A +# Intentionally left blank. +# This is a generic KDF, and its tuning depends largely on the hash parameters. +# It's better to derive the tuning based on the hash information (handled by the hash-mode plugin). +# The tunings from the hash-mode plugin may be slightly off, so if you have better values, you can hardcode them here. + -GeForce_GTX_980 * 8900 1 29 A -GeForce_GTX_1080 * 8900 1 15 A -GeForce_RTX_2080_Ti * 8900 1 68 A -GeForce_RTX_3060_Ti * 8900 1 51 A -GeForce_RTX_3070 * 8900 1 46 A -GeForce_RTX_3080_Ti_Laptop_GPU * 8900 1 46 A -GeForce_RTX_3090 * 8900 1 82 A -GeForce_RTX_3090_Ti * 8900 1 84 A -GeForce_RTX_4090 * 8900 1 180 A -NVS_510 * 8900 1 12 A -ALIAS_AMD_RX480 * 8900 1 15 A -ALIAS_AMD_Vega64 * 8900 1 30 A -ALIAS_AMD_MI100 * 8900 1 79 A -ALIAS_AMD_RX6900XT * 8900 1 57 A -ALIAS_AMD_RX7900XTX * 8900 1 91 A -ALIAS_AMD_W5700X * 8900 1 4 A diff --git a/tunings/Module_09300.hctune b/tunings/Module_09300.hctune index f1b448ca8..3277390ab 100644 --- a/tunings/Module_09300.hctune +++ b/tunings/Module_09300.hctune @@ -1,4 +1,4 @@ -# + # Find the right -n value for your GPU: # ===================================== # @@ -19,19 +19,7 @@ #Device Attack Hash Vector Kernel Kernel #Name Mode Type Width Accel Loops -DEVICE_TYPE_CPU * 9300 1 N A -DEVICE_TYPE_GPU * 9300 1 N A +GeForce_RTX_4090 * 9300 1 512 A +ALIAS_AMD_RX6900XT * 9300 1 720 A +ALIAS_AMD_RX7900XTX * 9300 1 840 A -GeForce_GTX_980 * 9300 1 128 A -GeForce_GTX_1080 * 9300 1 256 A -GeForce_RTX_2080_Ti * 9300 1 528 A -GeForce_RTX_3060_Ti * 9300 1 256 A -GeForce_RTX_3070 * 9300 1 368 A -GeForce_RTX_3080_Ti_Laptop_GPU * 9300 1 272 A -GeForce_RTX_3090 * 9300 1 984 A -ALIAS_AMD_RX480 * 9300 1 232 A -ALIAS_AMD_Vega64 * 9300 1 440 A -ALIAS_AMD_MI100 * 9300 1 1000 A -ALIAS_AMD_RX6900XT * 9300 1 700 A -ALIAS_AMD_RX7900XTX * 9300 1 858 A -ALIAS_AMD_W5700X * 9300 1 3 A diff --git a/tunings/Module_15700.hctune b/tunings/Module_15700.hctune index 43bdcdd05..c19ae375e 100644 --- a/tunings/Module_15700.hctune +++ b/tunings/Module_15700.hctune @@ -1,4 +1,4 @@ -# + # Find the right -n value for your GPU: # ===================================== # @@ -19,21 +19,7 @@ #Device Attack Hash Vector Kernel Kernel #Name Mode Type Width Accel Loops -DEVICE_TYPE_CPU * 15700 1 N A -DEVICE_TYPE_GPU * 15700 1 1 A +GeForce_RTX_4090 * 15700 1 180 A +ALIAS_AMD_RX6900XT * 15700 1 56 A +ALIAS_AMD_RX7900XTX * 15700 1 92 A -GeForce_GTX_980 * 15700 1 24 A -GeForce_GTX_1080 * 15700 1 28 A -GeForce_RTX_2080_Ti * 15700 1 68 A -GeForce_RTX_3060_Ti * 15700 1 11 A -GeForce_RTX_3070 * 15700 1 22 A -GeForce_RTX_3080_Ti_Laptop_GPU * 15700 1 22 A -GeForce_RTX_3090 * 15700 1 82 A -GeForce_RTX_3090_Ti * 15700 1 84 A -GeForce_RTX_4090 * 15700 1 180 A -ALIAS_AMD_RX480 * 15700 1 58 A -ALIAS_AMD_Vega64 * 15700 1 53 A -ALIAS_AMD_MI100 * 15700 1 120 A -ALIAS_AMD_RX6900XT * 15700 1 12 A -ALIAS_AMD_RX7900XTX * 15700 1 45 A -ALIAS_AMD_W5700X * 15700 1 1 A diff --git a/tunings/Module_22700.hctune b/tunings/Module_22700.hctune index 7dc52c60c..be4cd8a4a 100644 --- a/tunings/Module_22700.hctune +++ b/tunings/Module_22700.hctune @@ -1,4 +1,4 @@ -# + # Find the right -n value for your GPU: # ===================================== # @@ -19,22 +19,7 @@ #Device Attack Hash Vector Kernel Kernel #Name Mode Type Width Accel Loops -DEVICE_TYPE_CPU * 22700 1 N A -DEVICE_TYPE_GPU * 22700 1 N A +GeForce_RTX_4090 * 22700 1 180 A +ALIAS_AMD_RX6900XT * 22700 1 56 A +ALIAS_AMD_RX7900XTX * 22700 1 92 A -GeForce_GTX_980 * 22700 1 29 A -GeForce_GTX_1080 * 22700 1 15 A -GeForce_RTX_2080_Ti * 22700 1 68 A -GeForce_RTX_3060_Ti * 22700 1 51 A -GeForce_RTX_3070 * 22700 1 46 A -GeForce_RTX_3080_Ti_Laptop_GPU * 22700 1 46 A -GeForce_RTX_3090 * 22700 1 82 A -GeForce_RTX_3090_Ti * 22700 1 84 A -GeForce_RTX_4090 * 22700 1 180 A -NVS_510 * 22700 1 12 A -ALIAS_AMD_RX480 * 22700 1 15 A -ALIAS_AMD_Vega64 * 22700 1 30 A -ALIAS_AMD_MI100 * 22700 1 79 A -ALIAS_AMD_RX6900XT * 22700 1 57 A -ALIAS_AMD_RX7900XTX * 22700 1 186 A -ALIAS_AMD_W5700X * 22700 1 4 A diff --git a/tunings/Module_24000.hctune b/tunings/Module_24000.hctune index 11fb49268..71f61fe67 100644 --- a/tunings/Module_24000.hctune +++ b/tunings/Module_24000.hctune @@ -1,5 +1,25 @@ + +# Find the right -n value for your GPU: +# ===================================== +# +# 1. For example, to find the value for 24000, first create a valid hash for 24000 as follows: +# +# $ ./hashcat --example-hashes -m 24000 | grep Example.Hash | grep -v Format | cut -b 25- > tmp.hash.24000 +# +# 2. Now let it iterate through all -n values to a certain point. In this case, I'm using 200, but in general it's a value that is at least twice that of the multiprocessor. If you don't mind you can just leave it as it is, it just runs a little longer. +# +# $ export i=1; while [ $i -ne 201 ]; do echo $i; ./hashcat --quiet tmp.hash.24000 --keep-guessing --self-test-disable --markov-disable --restore-disable --outfile-autohex-disable --wordlist-autohex-disable --potfile-disable --logfile-disable --hwmon-disable --status --status-timer 1 --runtime 28 --machine-readable --optimized-kernel-enable --workload-profile 3 --hash-type 24000 --attack-mode 3 ?b?b?b?b?b?b?b --backend-devices 1 --force -n $i; i=$(($i+1)); done | tee x +# +# 3. Determine the highest measured H/s speed. But don't just use the highest value. Instead, use the number that seems most stable, usually at the beginning. +# +# $ grep "$(printf 'STATUS\t3')" x | cut -f4 -d$'\t' | sort -n | tail +# +# 4. To match the speed you have chosen to the correct value in the 'x' file, simply search for it in it. Then go up a little on the block where you found him. The value -n is the single value that begins before the block start. If you have multiple blocks at the same speed, choose the lowest value for -n + #Device Attack Hash Vector Kernel Kernel #Name Mode Type Width Accel Loops -DEVICE_TYPE_CPU * 24000 1 N A -DEVICE_TYPE_GPU * 24000 1 1 A +GeForce_RTX_4090 * 24000 1 180 A +ALIAS_AMD_RX6900XT * 24000 1 56 A +ALIAS_AMD_RX7900XTX * 24000 1 92 A + diff --git a/tunings/Module_27700.hctune b/tunings/Module_27700.hctune index 637b9b084..32b5253b4 100644 --- a/tunings/Module_27700.hctune +++ b/tunings/Module_27700.hctune @@ -1,4 +1,4 @@ -# + # Find the right -n value for your GPU: # ===================================== # @@ -19,22 +19,7 @@ #Device Attack Hash Vector Kernel Kernel #Name Mode Type Width Accel Loops -DEVICE_TYPE_CPU * 27700 1 N A -DEVICE_TYPE_GPU * 27700 1 N A +GeForce_RTX_4090 * 27700 1 180 A +ALIAS_AMD_RX6900XT * 27700 1 56 A +ALIAS_AMD_RX7900XTX * 27700 1 92 A -GeForce_GTX_980 * 27700 1 29 A -GeForce_GTX_1080 * 27700 1 15 A -GeForce_RTX_2080_Ti * 27700 1 68 A -GeForce_RTX_3060_Ti * 27700 1 51 A -GeForce_RTX_3070 * 27700 1 46 A -GeForce_RTX_3080_Ti_Laptop_GPU * 27700 1 46 A -GeForce_RTX_3090 * 27700 1 82 A -GeForce_RTX_3090_Ti * 27700 1 84 A -GeForce_RTX_4090 * 27700 1 180 A -NVS_510 * 27700 1 12 A -ALIAS_AMD_RX480 * 27700 1 15 A -ALIAS_AMD_Vega64 * 27700 1 30 A -ALIAS_AMD_MI100 * 27700 1 79 A -ALIAS_AMD_RX6900XT * 27700 1 57 A -ALIAS_AMD_RX7900XTX * 27700 1 171 A -ALIAS_AMD_W5700X * 27700 1 4 A diff --git a/tunings/Module_28200.hctune b/tunings/Module_28200.hctune index 32977504f..50a09b89c 100644 --- a/tunings/Module_28200.hctune +++ b/tunings/Module_28200.hctune @@ -1,4 +1,4 @@ -# + # Find the right -n value for your GPU: # ===================================== # @@ -19,22 +19,7 @@ #Device Attack Hash Vector Kernel Kernel #Name Mode Type Width Accel Loops -DEVICE_TYPE_CPU * 28200 1 N A -DEVICE_TYPE_GPU * 28200 1 N A +GeForce_RTX_4090 * 28200 1 180 A +ALIAS_AMD_RX6900XT * 28200 1 56 A +ALIAS_AMD_RX7900XTX * 28200 1 92 A -GeForce_GTX_980 * 28200 1 29 A -GeForce_GTX_1080 * 28200 1 15 A -GeForce_RTX_2080_Ti * 28200 1 68 A -GeForce_RTX_3060_Ti * 28200 1 51 A -GeForce_RTX_3070 * 28200 1 46 A -GeForce_RTX_3080_Ti_Laptop_GPU * 28200 1 46 A -GeForce_RTX_3090 * 28200 1 82 A -GeForce_RTX_3090_Ti * 28200 1 84 A -GeForce_RTX_4090 * 28200 1 180 A -NVS_510 * 28200 1 12 A -ALIAS_AMD_RX480 * 28200 1 15 A -ALIAS_AMD_Vega64 * 28200 1 30 A -ALIAS_AMD_MI100 * 28200 1 79 A -ALIAS_AMD_RX6900XT * 28200 1 57 A -ALIAS_AMD_RX7900XTX * 28200 1 46 A -ALIAS_AMD_W5700X * 28200 1 4 A diff --git a/tunings/Module_29800.hctune b/tunings/Module_29800.hctune index ef7e70cab..31bea6286 100644 --- a/tunings/Module_29800.hctune +++ b/tunings/Module_29800.hctune @@ -1,4 +1,4 @@ -# + # Find the right -n value for your GPU: # ===================================== # @@ -19,15 +19,7 @@ #Device Attack Hash Vector Kernel Kernel #Name Mode Type Width Accel Loops -DEVICE_TYPE_CPU * 29800 1 N A -DEVICE_TYPE_GPU * 29800 1 N A +GeForce_RTX_4090 * 29800 1 180 A +ALIAS_AMD_RX6900XT * 29800 1 56 A +ALIAS_AMD_RX7900XTX * 29800 1 92 A -GeForce_GTX_1070_Ti * 29800 1 14 A -GeForce_GTX_1080 * 29800 1 14 A -GeForce_GTX_1080_Ti * 29800 1 20 A -GeForce_RTX_2080_Ti * 29800 1 40 A -GeForce_RTX_3080_Ti_Laptop_GPU * 29800 1 23 A -GeForce_RTX_3090 * 29800 1 82 A - -ALIAS_AMD_RX6900XT * 29800 1 28 A -ALIAS_AMD_W5700X * 29800 1 4 A From 14db95aabd85150291d3e20aca974dbcaa6a558f Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Sun, 8 Jun 2025 14:10:22 +0200 Subject: [PATCH 45/95] update BUILD_MSYS2: add python3 to dependencies --- BUILD_MSYS2.md | 1 + 1 file changed, 1 insertion(+) diff --git a/BUILD_MSYS2.md b/BUILD_MSYS2.md index 09c7b4f1a..bdb2c68a9 100644 --- a/BUILD_MSYS2.md +++ b/BUILD_MSYS2.md @@ -13,6 +13,7 @@ $ pacman -S git $ pacman -S make $ pacman -S gcc $ pacman -S libiconv-devel +$ pacman -S python3 ``` ### Building ### From a06cf1bf7d61a936fd2cbd7f61a8bf2c3976f8e4 Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Sun, 8 Jun 2025 17:08:11 +0200 Subject: [PATCH 46/95] update BUILD_CYGWIN: add python3.12 to dependencies --- BUILD_CYGWIN.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/BUILD_CYGWIN.md b/BUILD_CYGWIN.md index 13b1d2c02..b5719de11 100644 --- a/BUILD_CYGWIN.md +++ b/BUILD_CYGWIN.md @@ -14,6 +14,8 @@ gcc-core gcc-g++ make git +python312 +python312-devel ``` ### Building ### From c2dfc5f007cd91d1b0ec64b7d5b606da5245934a Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Sun, 8 Jun 2025 17:29:05 +0200 Subject: [PATCH 47/95] fix DEFAULT_SOURCE_FILENAME with CYGWIN --- src/bridges/bridge_python_generic_hash_mp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bridges/bridge_python_generic_hash_mp.c b/src/bridges/bridge_python_generic_hash_mp.c index 6ff1edc98..e5599e76f 100644 --- a/src/bridges/bridge_python_generic_hash_mp.c +++ b/src/bridges/bridge_python_generic_hash_mp.c @@ -188,7 +188,7 @@ typedef struct } python_interpreter_t; -#if defined (_WIN) || defined (__APPLE__) +#if defined (_WIN) || defined (__CYGWIN__) || defined (__APPLE__) static char *DEFAULT_SOURCE_FILENAME = "generic_hash_sp"; #else static char *DEFAULT_SOURCE_FILENAME = "generic_hash_mp"; From ae2c0f2a311257f1a1991e72a0563a4722967539 Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Sun, 8 Jun 2025 18:06:03 +0200 Subject: [PATCH 48/95] show warning on single-threaded mode also with CYGWIN --- src/bridges/bridge_python_generic_hash_mp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bridges/bridge_python_generic_hash_mp.c b/src/bridges/bridge_python_generic_hash_mp.c index e5599e76f..a40d55373 100644 --- a/src/bridges/bridge_python_generic_hash_mp.c +++ b/src/bridges/bridge_python_generic_hash_mp.c @@ -714,7 +714,7 @@ void *platform_init (user_options_t *user_options) unit_t *unit_buf = &python_interpreter->units_buf[0]; - #if defined (_WIN) || defined (__APPLE__) + #if defined (_WIN) || defined (__CYGWIN__) || defined (__APPLE__) fprintf (stderr, "Attention!!! Falling back to single-threaded mode.\n"); fprintf (stderr, " Windows and MacOS ds not support multiprocessing module cleanly!\n"); fprintf (stderr, " For multithreading on Windows and MacOS, please use -m 72000 instead.\n\n"); From 839ea7c2c43602b762e7c1c088a882a11c2041ce Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Sun, 8 Jun 2025 18:09:18 +0200 Subject: [PATCH 49/95] fix for CYGWIN also on bridge_python_generic_hash_sp.c --- src/bridges/bridge_python_generic_hash_sp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bridges/bridge_python_generic_hash_sp.c b/src/bridges/bridge_python_generic_hash_sp.c index 98fd55fd0..beeb7d948 100644 --- a/src/bridges/bridge_python_generic_hash_sp.c +++ b/src/bridges/bridge_python_generic_hash_sp.c @@ -532,7 +532,7 @@ static bool init_python (hc_python_lib_t *python) printf ("Loaded python library from: %s\n\n", pythondll_path); } - #if defined (_WIN) || defined (__APPLE__) + #if defined (_WIN) || defined (__CYGWIN__) || defined (__APPLE__) #else fprintf (stderr, "Attention!!! The 'free-threaded' python library has some major downsides.\n"); From 86c8323ae2da5b22db3109fed5589f6cbd27f348 Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Sun, 8 Jun 2025 21:39:29 +0200 Subject: [PATCH 50/95] Added hash-mode: Microsoft Online Account (PBKDF2-HMAC-SHA256 + AES256) --- OpenCL/m33700-pure.cl | 398 +++++++++++++++++++++++++++++++++++ docs/changes.txt | 1 + docs/readme.txt | 1 + src/modules/module_33700.c | 253 ++++++++++++++++++++++ tools/test_modules/m33700.pm | 126 +++++++++++ 5 files changed, 779 insertions(+) create mode 100644 OpenCL/m33700-pure.cl create mode 100644 src/modules/module_33700.c create mode 100644 tools/test_modules/m33700.pm diff --git a/OpenCL/m33700-pure.cl b/OpenCL/m33700-pure.cl new file mode 100644 index 000000000..8540d6d69 --- /dev/null +++ b/OpenCL/m33700-pure.cl @@ -0,0 +1,398 @@ +/** + * Author......: See docs/credits.txt + * License.....: MIT + */ + +#define NEW_SIMD_CODE + +#ifdef KERNEL_STATIC +#include M2S(INCLUDE_PATH/inc_vendor.h) +#include M2S(INCLUDE_PATH/inc_types.h) +#include M2S(INCLUDE_PATH/inc_platform.cl) +#include M2S(INCLUDE_PATH/inc_common.cl) +#include M2S(INCLUDE_PATH/inc_simd.cl) +#include M2S(INCLUDE_PATH/inc_hash_sha256.cl) +#include M2S(INCLUDE_PATH/inc_cipher_aes.cl) +#include M2S(INCLUDE_PATH/inc_cipher_des.cl) +#endif + +typedef struct pkcs_sha256_tmp +{ + u32 ipad[8]; + u32 opad[8]; + + u32 dgst[32]; + u32 out[32]; + +} pkcs_sha256_tmp_t; + +typedef struct pkcs +{ + u32 data_buf[60]; + int data_len; + +} pkcs_t; + +DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_AS u32x *w2, PRIVATE_AS u32x *w3, PRIVATE_AS u32x *ipad, PRIVATE_AS u32x *opad, PRIVATE_AS u32x *digest) +{ + digest[0] = ipad[0]; + digest[1] = ipad[1]; + digest[2] = ipad[2]; + digest[3] = ipad[3]; + digest[4] = ipad[4]; + digest[5] = ipad[5]; + digest[6] = ipad[6]; + digest[7] = ipad[7]; + + sha256_transform_vector (w0, w1, w2, w3, digest); + + w0[0] = digest[0]; + w0[1] = digest[1]; + w0[2] = digest[2]; + w0[3] = digest[3]; + w1[0] = digest[4]; + w1[1] = digest[5]; + w1[2] = digest[6]; + w1[3] = digest[7]; + w2[0] = 0x80000000; + w2[1] = 0; + w2[2] = 0; + w2[3] = 0; + w3[0] = 0; + w3[1] = 0; + w3[2] = 0; + w3[3] = (64 + 32) * 8; + + digest[0] = opad[0]; + digest[1] = opad[1]; + digest[2] = opad[2]; + digest[3] = opad[3]; + digest[4] = opad[4]; + digest[5] = opad[5]; + digest[6] = opad[6]; + digest[7] = opad[7]; + + sha256_transform_vector (w0, w1, w2, w3, digest); +} + +KERNEL_FQ void m33700_init (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) +{ + /** + * base + */ + + const u64 gid = get_global_id (0); + + if (gid >= GID_CNT) return; + + sha256_hmac_ctx_t sha256_hmac_ctx; + + sha256_hmac_init_global_utf16le_swap (&sha256_hmac_ctx, pws[gid].i, pws[gid].pw_len); + + tmps[gid].ipad[0] = sha256_hmac_ctx.ipad.h[0]; + tmps[gid].ipad[1] = sha256_hmac_ctx.ipad.h[1]; + tmps[gid].ipad[2] = sha256_hmac_ctx.ipad.h[2]; + tmps[gid].ipad[3] = sha256_hmac_ctx.ipad.h[3]; + tmps[gid].ipad[4] = sha256_hmac_ctx.ipad.h[4]; + tmps[gid].ipad[5] = sha256_hmac_ctx.ipad.h[5]; + tmps[gid].ipad[6] = sha256_hmac_ctx.ipad.h[6]; + tmps[gid].ipad[7] = sha256_hmac_ctx.ipad.h[7]; + + tmps[gid].opad[0] = sha256_hmac_ctx.opad.h[0]; + tmps[gid].opad[1] = sha256_hmac_ctx.opad.h[1]; + tmps[gid].opad[2] = sha256_hmac_ctx.opad.h[2]; + tmps[gid].opad[3] = sha256_hmac_ctx.opad.h[3]; + tmps[gid].opad[4] = sha256_hmac_ctx.opad.h[4]; + tmps[gid].opad[5] = sha256_hmac_ctx.opad.h[5]; + tmps[gid].opad[6] = sha256_hmac_ctx.opad.h[6]; + tmps[gid].opad[7] = sha256_hmac_ctx.opad.h[7]; + + for (u32 i = 0, j = 1; i < 8; i += 8, j += 1) + { + sha256_hmac_ctx_t sha256_hmac_ctx2 = sha256_hmac_ctx; + + u32 w0[4]; + u32 w1[4]; + u32 w2[4]; + u32 w3[4]; + + w0[0] = j; + w0[1] = 0; + w0[2] = 0; + w0[3] = 0; + w1[0] = 0; + w1[1] = 0; + w1[2] = 0; + w1[3] = 0; + w2[0] = 0; + w2[1] = 0; + w2[2] = 0; + w2[3] = 0; + w3[0] = 0; + w3[1] = 0; + w3[2] = 0; + w3[3] = 0; + + sha256_hmac_update_64 (&sha256_hmac_ctx2, w0, w1, w2, w3, 4); + + sha256_hmac_final (&sha256_hmac_ctx2); + + tmps[gid].dgst[i + 0] = sha256_hmac_ctx2.opad.h[0]; + tmps[gid].dgst[i + 1] = sha256_hmac_ctx2.opad.h[1]; + tmps[gid].dgst[i + 2] = sha256_hmac_ctx2.opad.h[2]; + tmps[gid].dgst[i + 3] = sha256_hmac_ctx2.opad.h[3]; + tmps[gid].dgst[i + 4] = sha256_hmac_ctx2.opad.h[4]; + tmps[gid].dgst[i + 5] = sha256_hmac_ctx2.opad.h[5]; + tmps[gid].dgst[i + 6] = sha256_hmac_ctx2.opad.h[6]; + tmps[gid].dgst[i + 7] = sha256_hmac_ctx2.opad.h[7]; + + tmps[gid].out[i + 0] = tmps[gid].dgst[i + 0]; + tmps[gid].out[i + 1] = tmps[gid].dgst[i + 1]; + tmps[gid].out[i + 2] = tmps[gid].dgst[i + 2]; + tmps[gid].out[i + 3] = tmps[gid].dgst[i + 3]; + tmps[gid].out[i + 4] = tmps[gid].dgst[i + 4]; + tmps[gid].out[i + 5] = tmps[gid].dgst[i + 5]; + tmps[gid].out[i + 6] = tmps[gid].dgst[i + 6]; + tmps[gid].out[i + 7] = tmps[gid].dgst[i + 7]; + } +} + +KERNEL_FQ void m33700_loop (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) +{ + const u64 gid = get_global_id (0); + + if ((gid * VECT_SIZE) >= GID_CNT) return; + + u32x ipad[8]; + u32x opad[8]; + + ipad[0] = packv (tmps, ipad, gid, 0); + ipad[1] = packv (tmps, ipad, gid, 1); + ipad[2] = packv (tmps, ipad, gid, 2); + ipad[3] = packv (tmps, ipad, gid, 3); + ipad[4] = packv (tmps, ipad, gid, 4); + ipad[5] = packv (tmps, ipad, gid, 5); + ipad[6] = packv (tmps, ipad, gid, 6); + ipad[7] = packv (tmps, ipad, gid, 7); + + opad[0] = packv (tmps, opad, gid, 0); + opad[1] = packv (tmps, opad, gid, 1); + opad[2] = packv (tmps, opad, gid, 2); + opad[3] = packv (tmps, opad, gid, 3); + opad[4] = packv (tmps, opad, gid, 4); + opad[5] = packv (tmps, opad, gid, 5); + opad[6] = packv (tmps, opad, gid, 6); + opad[7] = packv (tmps, opad, gid, 7); + + for (u32 i = 0; i < 8; i += 8) + { + u32x dgst[8]; + u32x out[8]; + + dgst[0] = packv (tmps, dgst, gid, i + 0); + dgst[1] = packv (tmps, dgst, gid, i + 1); + dgst[2] = packv (tmps, dgst, gid, i + 2); + dgst[3] = packv (tmps, dgst, gid, i + 3); + dgst[4] = packv (tmps, dgst, gid, i + 4); + dgst[5] = packv (tmps, dgst, gid, i + 5); + dgst[6] = packv (tmps, dgst, gid, i + 6); + dgst[7] = packv (tmps, dgst, gid, i + 7); + + out[0] = packv (tmps, out, gid, i + 0); + out[1] = packv (tmps, out, gid, i + 1); + out[2] = packv (tmps, out, gid, i + 2); + out[3] = packv (tmps, out, gid, i + 3); + out[4] = packv (tmps, out, gid, i + 4); + out[5] = packv (tmps, out, gid, i + 5); + out[6] = packv (tmps, out, gid, i + 6); + out[7] = packv (tmps, out, gid, i + 7); + + for (u32 j = 0; j < LOOP_CNT; j++) + { + u32x w0[4]; + u32x w1[4]; + u32x w2[4]; + u32x w3[4]; + + w0[0] = dgst[0]; + w0[1] = dgst[1]; + w0[2] = dgst[2]; + w0[3] = dgst[3]; + w1[0] = dgst[4]; + w1[1] = dgst[5]; + w1[2] = dgst[6]; + w1[3] = dgst[7]; + w2[0] = 0x80000000; + w2[1] = 0; + w2[2] = 0; + w2[3] = 0; + w3[0] = 0; + w3[1] = 0; + w3[2] = 0; + w3[3] = (64 + 32) * 8; + + hmac_sha256_run_V (w0, w1, w2, w3, ipad, opad, dgst); + + out[0] ^= dgst[0]; + out[1] ^= dgst[1]; + out[2] ^= dgst[2]; + out[3] ^= dgst[3]; + out[4] ^= dgst[4]; + out[5] ^= dgst[5]; + out[6] ^= dgst[6]; + out[7] ^= dgst[7]; + } + + unpackv (tmps, dgst, gid, i + 0, dgst[0]); + unpackv (tmps, dgst, gid, i + 1, dgst[1]); + unpackv (tmps, dgst, gid, i + 2, dgst[2]); + unpackv (tmps, dgst, gid, i + 3, dgst[3]); + unpackv (tmps, dgst, gid, i + 4, dgst[4]); + unpackv (tmps, dgst, gid, i + 5, dgst[5]); + unpackv (tmps, dgst, gid, i + 6, dgst[6]); + unpackv (tmps, dgst, gid, i + 7, dgst[7]); + + unpackv (tmps, out, gid, i + 0, out[0]); + unpackv (tmps, out, gid, i + 1, out[1]); + unpackv (tmps, out, gid, i + 2, out[2]); + unpackv (tmps, out, gid, i + 3, out[3]); + unpackv (tmps, out, gid, i + 4, out[4]); + unpackv (tmps, out, gid, i + 5, out[5]); + unpackv (tmps, out, gid, i + 6, out[6]); + unpackv (tmps, out, gid, i + 7, out[7]); + } +} + +KERNEL_FQ void m33700_comp (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) +{ + const u64 gid = get_global_id (0); + const u64 lid = get_local_id (0); + const u64 lsz = get_local_size (0); + + /** + * aes shared + */ + + #ifdef REAL_SHM + + LOCAL_VK u32 s_td0[256]; + LOCAL_VK u32 s_td1[256]; + LOCAL_VK u32 s_td2[256]; + LOCAL_VK u32 s_td3[256]; + LOCAL_VK u32 s_td4[256]; + + LOCAL_VK u32 s_te0[256]; + LOCAL_VK u32 s_te1[256]; + LOCAL_VK u32 s_te2[256]; + LOCAL_VK u32 s_te3[256]; + LOCAL_VK u32 s_te4[256]; + + for (u32 i = lid; i < 256; i += lsz) + { + s_td0[i] = td0[i]; + s_td1[i] = td1[i]; + s_td2[i] = td2[i]; + s_td3[i] = td3[i]; + s_td4[i] = td4[i]; + + s_te0[i] = te0[i]; + s_te1[i] = te1[i]; + s_te2[i] = te2[i]; + s_te3[i] = te3[i]; + s_te4[i] = te4[i]; + } + + LOCAL_VK u32 s_SPtrans[8][64]; + LOCAL_VK u32 s_skb[8][64]; + + for (u32 i = lid; i < 64; i += lsz) + { + s_SPtrans[0][i] = c_SPtrans[0][i]; + s_SPtrans[1][i] = c_SPtrans[1][i]; + s_SPtrans[2][i] = c_SPtrans[2][i]; + s_SPtrans[3][i] = c_SPtrans[3][i]; + s_SPtrans[4][i] = c_SPtrans[4][i]; + s_SPtrans[5][i] = c_SPtrans[5][i]; + s_SPtrans[6][i] = c_SPtrans[6][i]; + s_SPtrans[7][i] = c_SPtrans[7][i]; + + s_skb[0][i] = c_skb[0][i]; + s_skb[1][i] = c_skb[1][i]; + s_skb[2][i] = c_skb[2][i]; + s_skb[3][i] = c_skb[3][i]; + s_skb[4][i] = c_skb[4][i]; + s_skb[5][i] = c_skb[5][i]; + s_skb[6][i] = c_skb[6][i]; + s_skb[7][i] = c_skb[7][i]; + } + + SYNC_THREADS (); + + #else + + CONSTANT_AS u32a *s_td0 = td0; + CONSTANT_AS u32a *s_td1 = td1; + CONSTANT_AS u32a *s_td2 = td2; + CONSTANT_AS u32a *s_td3 = td3; + CONSTANT_AS u32a *s_td4 = td4; + + CONSTANT_AS u32a *s_te0 = te0; + CONSTANT_AS u32a *s_te1 = te1; + CONSTANT_AS u32a *s_te2 = te2; + CONSTANT_AS u32a *s_te3 = te3; + CONSTANT_AS u32a *s_te4 = te4; + + CONSTANT_AS u32a (*s_SPtrans)[64] = c_SPtrans; + CONSTANT_AS u32a (*s_skb)[64] = c_skb; + + #endif + + if (gid >= GID_CNT) return; + + u32 ukey[8]; + + ukey[0] = tmps[gid].out[0]; + ukey[1] = tmps[gid].out[1]; + ukey[2] = tmps[gid].out[2]; + ukey[3] = tmps[gid].out[3]; + ukey[4] = tmps[gid].out[4]; + ukey[5] = tmps[gid].out[5]; + ukey[6] = tmps[gid].out[6]; + ukey[7] = tmps[gid].out[7]; + + //const int data_len = esalt_bufs[DIGESTS_OFFSET_HOST].data_len; + + u32 iv[4] = { 0 }; + + // decrypt first block + + u32 enc[4]; + u32 dec[4]; + + enc[0] = esalt_bufs[DIGESTS_OFFSET_HOST].data_buf[0]; + enc[1] = esalt_bufs[DIGESTS_OFFSET_HOST].data_buf[1]; + enc[2] = esalt_bufs[DIGESTS_OFFSET_HOST].data_buf[2]; + enc[3] = esalt_bufs[DIGESTS_OFFSET_HOST].data_buf[3]; + + u32 ks[60]; + + AES256_set_decrypt_key (ks, ukey, s_te0, s_te1, s_te2, s_te3, s_td0, s_td1, s_td2, s_td3); + + aes256_decrypt (ks, enc, dec, s_td0, s_td1, s_td2, s_td3, s_td4); + + dec[0] ^= iv[0]; + dec[0] = hc_swap32_S (dec[0]); + + if (dec[0] != 0x00000000) return; + + dec[1] ^= iv[1]; + dec[1] = hc_swap32_S (dec[1]); + + if (dec[1] != 0x01000000) return; + + if (hc_atomic_inc (&hashes_shown[DIGESTS_OFFSET_HOST]) == 0) + { + #define il_pos 0 + mark_hash (plains_buf, d_return_buf, SALT_POS_HOST, DIGESTS_CNT, 0, DIGESTS_OFFSET_HOST + 0, gid, il_pos, 0, 0); + } +} diff --git a/docs/changes.txt b/docs/changes.txt index 9d93c5e98..63ef1844f 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -31,6 +31,7 @@ - Added hash-mode: Kerberos 5, etype 18, AS-REP - Added hash-mode: MetaMask Mobile Wallet - Added hash-mode: MetaMask Wallet (short hash, plaintext check) +- Added hash-mode: Microsoft Online Account (PBKDF2-HMAC-SHA256 + AES256) - Added hash-mode: NetIQ SSPR (MD5) - Added hash-mode: NetIQ SSPR (PBKDF2WithHmacSHA1) - Added hash-mode: NetIQ SSPR (PBKDF2WithHmacSHA256) diff --git a/docs/readme.txt b/docs/readme.txt index 38d1bb594..70f0499ee 100644 --- a/docs/readme.txt +++ b/docs/readme.txt @@ -484,6 +484,7 @@ NVIDIA GPUs require "NVIDIA Driver" (440.64 or later) and "CUDA Toolkit" (9.0 or - RC4 40-bit DropN - RC4 72-bit DropN - RC4 104-bit DropN +- Microsoft Online Account (PBKDF2-HMAC-SHA256 + AES256) ## ## Attack-Modes diff --git a/src/modules/module_33700.c b/src/modules/module_33700.c new file mode 100644 index 000000000..75904bf68 --- /dev/null +++ b/src/modules/module_33700.c @@ -0,0 +1,253 @@ +/** + * Author......: See docs/credits.txt + * License.....: MIT + */ + +#include "common.h" +#include "types.h" +#include "modules.h" +#include "bitops.h" +#include "convert.h" +#include "shared.h" + +static const u32 ATTACK_EXEC = ATTACK_EXEC_OUTSIDE_KERNEL; +static const u32 DGST_POS0 = 0; +static const u32 DGST_POS1 = 1; +static const u32 DGST_POS2 = 2; +static const u32 DGST_POS3 = 3; +static const u32 DGST_SIZE = DGST_SIZE_4_4; +static const u32 HASH_CATEGORY = HASH_CATEGORY_RAW_CIPHER_KPA; +static const char *HASH_NAME = "Microsoft Online Account (PBKDF2-HMAC-SHA256 + AES256)"; +static const u64 KERN_TYPE = 33700; +static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE + | OPTI_TYPE_SLOW_HASH_SIMD_LOOP; +static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE + | OPTS_TYPE_PT_GENERATE_LE + | OPTS_TYPE_PT_UTF16LE; +static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; +static const char *ST_PASS = "hashcat"; +static const char *ST_HASH = "$MSONLINEACCOUNT$0$10000$91869d1d5d3a1df25dd3f0e57bbc226aaae0b6e3a61991083f314886b26c7477c4c6bfb99e48cb0eed6d76d9a59c2e8462c308fd681fd5ac591500b7f6b3c9eec87c1c2f8f563cc0cd24f411f44d5cc74e44b6b12d5f31c9f5c6818b6472bb37116d2584f6938f8b797fdd71449d844e10277e8d2f1eb5a57d6abc9ccf0b681ca463a0f18080a464cbfd859f955c67a9f06427638893d6331f5e529e0e59f4b6e1a775a93a9df5573010886265786ce8c6dfa65a0e9de99f9fdbfa5ff9668534fccc419c9f99c9853e04d4455130712486c643b5aca11a9aba85be271deef6bad064936bb86a96303fc430f31ed5b172"; + +u32 module_attack_exec (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ATTACK_EXEC; } +u32 module_dgst_pos0 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS0; } +u32 module_dgst_pos1 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS1; } +u32 module_dgst_pos2 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS2; } +u32 module_dgst_pos3 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS3; } +u32 module_dgst_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_SIZE; } +u32 module_hash_category (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return HASH_CATEGORY; } +const char *module_hash_name (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return HASH_NAME; } +u64 module_kern_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return KERN_TYPE; } +u32 module_opti_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return OPTI_TYPE; } +u64 module_opts_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return OPTS_TYPE; } +u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return SALT_TYPE; } +const char *module_st_hash (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_HASH; } +const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_PASS; } + +typedef struct pkcs_sha256_tmp +{ + u32 ipad[8]; + u32 opad[8]; + + u32 dgst[32]; + u32 out[32]; + +} pkcs_sha256_tmp_t; + +typedef struct pkcs +{ + u32 data_buf[60]; + int data_len; + +} pkcs_t; + +static const char *SIGNATURE_MSOA = "$MSONLINEACCOUNT$"; + +u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u64 esalt_size = (const u64) sizeof (pkcs_t); + + return esalt_size; +} + +u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u64 tmp_size = (const u64) sizeof (pkcs_sha256_tmp_t); + + return tmp_size; +} + +int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len) +{ + u32 *digest = (u32 *) digest_buf; + + pkcs_t *pkcs = (pkcs_t *) esalt_buf; + + hc_token_t token; + + memset (&token, 0, sizeof (hc_token_t)); + + token.token_cnt = 4; + + token.signatures_cnt = 1; + token.signatures_buf[0] = SIGNATURE_MSOA; + + token.len[0] = 17; + token.attr[0] = TOKEN_ATTR_FIXED_LENGTH + | TOKEN_ATTR_VERIFY_SIGNATURE; + + token.sep[1] = '$'; + token.len[1] = 1; + token.attr[1] = TOKEN_ATTR_FIXED_LENGTH + | TOKEN_ATTR_VERIFY_DIGIT; + + token.sep[2] = '$'; + token.len_min[2] = 1; + token.len_max[2] = 5; + token.attr[2] = TOKEN_ATTR_VERIFY_LENGTH + | TOKEN_ATTR_VERIFY_DIGIT; + + token.sep[3] = '$'; + token.len[3] = 480; + token.attr[3] = TOKEN_ATTR_FIXED_LENGTH + | TOKEN_ATTR_VERIFY_HEX; + + const int rc_tokenizer = input_tokenizer ((const u8 *) line_buf, line_len, &token); + + if (rc_tokenizer != PARSER_OK) return (rc_tokenizer); + + // type + + const u8 *type_pos = token.buf[1]; + + if (type_pos[0] != '0') return (PARSER_SIGNATURE_UNMATCHED); + + // iter + + const u8 *iter_pos = token.buf[2]; + + const u32 iter = hc_strtoul ((const char *) iter_pos, NULL, 10); + + salt->salt_iter = iter - 1; + + // data + + const u8 *data_pos = token.buf[3]; + const int data_len = token.len[3]; + + pkcs->data_len = hex_decode (data_pos, data_len, (u8 *) pkcs->data_buf); + + // hash + + digest[0] = pkcs->data_buf[0]; + digest[1] = pkcs->data_buf[1]; + digest[2] = pkcs->data_buf[2]; + digest[3] = pkcs->data_buf[3]; + + // set fake salt + + salt->salt_buf[0] = digest[0]; + salt->salt_buf[1] = digest[1]; + salt->salt_buf[2] = digest[2]; + salt->salt_buf[3] = digest[3]; + + return (PARSER_OK); +} + +int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const void *digest_buf, MAYBE_UNUSED const salt_t *salt, MAYBE_UNUSED const void *esalt_buf, MAYBE_UNUSED const void *hook_salt_buf, MAYBE_UNUSED const hashinfo_t *hash_info, char *line_buf, MAYBE_UNUSED const int line_size) +{ + const pkcs_t *pkcs = (const pkcs_t *) esalt_buf; + + // output + + u8 *out_buf = (u8 *) line_buf; + + int out_len = snprintf ((char *) out_buf, line_size, "%s0$%d$", + SIGNATURE_MSOA, + salt->salt_iter + 1); + + out_len += hex_encode ((const u8 *) pkcs->data_buf, pkcs->data_len, out_buf + out_len); + + return out_len; +} + +void module_init (module_ctx_t *module_ctx) +{ + module_ctx->module_context_size = MODULE_CONTEXT_SIZE_CURRENT; + module_ctx->module_interface_version = MODULE_INTERFACE_VERSION_CURRENT; + + module_ctx->module_attack_exec = module_attack_exec; + module_ctx->module_benchmark_esalt = MODULE_DEFAULT; + module_ctx->module_benchmark_hook_salt = MODULE_DEFAULT; + module_ctx->module_benchmark_mask = MODULE_DEFAULT; + module_ctx->module_benchmark_charset = MODULE_DEFAULT; + module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; + module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; + module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; + module_ctx->module_deprecated_notice = MODULE_DEFAULT; + module_ctx->module_dgst_pos0 = module_dgst_pos0; + module_ctx->module_dgst_pos1 = module_dgst_pos1; + module_ctx->module_dgst_pos2 = module_dgst_pos2; + module_ctx->module_dgst_pos3 = module_dgst_pos3; + module_ctx->module_dgst_size = module_dgst_size; + module_ctx->module_dictstat_disable = MODULE_DEFAULT; + module_ctx->module_esalt_size = module_esalt_size; + module_ctx->module_extra_buffer_size = MODULE_DEFAULT; + module_ctx->module_extra_tmp_size = MODULE_DEFAULT; + module_ctx->module_extra_tuningdb_block = MODULE_DEFAULT; + module_ctx->module_forced_outfile_format = MODULE_DEFAULT; + module_ctx->module_hash_binary_count = MODULE_DEFAULT; + module_ctx->module_hash_binary_parse = MODULE_DEFAULT; + module_ctx->module_hash_binary_save = MODULE_DEFAULT; + module_ctx->module_hash_decode_postprocess = MODULE_DEFAULT; + module_ctx->module_hash_decode_potfile = MODULE_DEFAULT; + module_ctx->module_hash_decode_zero_hash = MODULE_DEFAULT; + module_ctx->module_hash_decode = module_hash_decode; + module_ctx->module_hash_encode_status = MODULE_DEFAULT; + module_ctx->module_hash_encode_potfile = MODULE_DEFAULT; + module_ctx->module_hash_encode = module_hash_encode; + module_ctx->module_hash_init_selftest = MODULE_DEFAULT; + module_ctx->module_hash_mode = MODULE_DEFAULT; + module_ctx->module_hash_category = module_hash_category; + module_ctx->module_hash_name = module_hash_name; + module_ctx->module_hashes_count_min = MODULE_DEFAULT; + module_ctx->module_hashes_count_max = MODULE_DEFAULT; + module_ctx->module_hlfmt_disable = MODULE_DEFAULT; + module_ctx->module_hook_extra_param_size = MODULE_DEFAULT; + module_ctx->module_hook_extra_param_init = MODULE_DEFAULT; + module_ctx->module_hook_extra_param_term = MODULE_DEFAULT; + module_ctx->module_hook12 = MODULE_DEFAULT; + module_ctx->module_hook23 = MODULE_DEFAULT; + module_ctx->module_hook_salt_size = MODULE_DEFAULT; + module_ctx->module_hook_size = MODULE_DEFAULT; + module_ctx->module_jit_build_options = MODULE_DEFAULT; + module_ctx->module_jit_cache_disable = MODULE_DEFAULT; + module_ctx->module_kernel_accel_max = MODULE_DEFAULT; + module_ctx->module_kernel_accel_min = MODULE_DEFAULT; + module_ctx->module_kernel_loops_max = MODULE_DEFAULT; + module_ctx->module_kernel_loops_min = MODULE_DEFAULT; + module_ctx->module_kernel_threads_max = MODULE_DEFAULT; + module_ctx->module_kernel_threads_min = MODULE_DEFAULT; + module_ctx->module_kern_type = module_kern_type; + module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; + module_ctx->module_opti_type = module_opti_type; + module_ctx->module_opts_type = module_opts_type; + module_ctx->module_outfile_check_disable = MODULE_DEFAULT; + module_ctx->module_outfile_check_nocomp = MODULE_DEFAULT; + module_ctx->module_potfile_custom_check = MODULE_DEFAULT; + module_ctx->module_potfile_disable = MODULE_DEFAULT; + module_ctx->module_potfile_keep_all_hashes = MODULE_DEFAULT; + module_ctx->module_pwdump_column = MODULE_DEFAULT; + module_ctx->module_pw_max = MODULE_DEFAULT; + module_ctx->module_pw_min = MODULE_DEFAULT; + module_ctx->module_salt_max = MODULE_DEFAULT; + module_ctx->module_salt_min = MODULE_DEFAULT; + module_ctx->module_salt_type = module_salt_type; + module_ctx->module_separator = MODULE_DEFAULT; + module_ctx->module_st_hash = module_st_hash; + module_ctx->module_st_pass = module_st_pass; + module_ctx->module_tmp_size = module_tmp_size; + module_ctx->module_unstable_warning = MODULE_DEFAULT; + module_ctx->module_warmup_disable = MODULE_DEFAULT; +} diff --git a/tools/test_modules/m33700.pm b/tools/test_modules/m33700.pm new file mode 100644 index 000000000..9355afb50 --- /dev/null +++ b/tools/test_modules/m33700.pm @@ -0,0 +1,126 @@ +#!/usr/bin/env perl + +## +## Author......: See docs/credits.txt +## License.....: MIT +## + +use strict; +use warnings; + +use Crypt::PBKDF2; +use Crypt::CBC; +use Encode qw(encode); + +sub module_constraints { [[0, 256], [-1, -1], [-1, -1], [-1, -1], [-1, -1]] } + +sub module_generate_hash +{ + my $word = shift; + my $iter = shift; + my $ct = shift; + + $iter = 10000 unless defined ($iter) && $iter =~ /^\d+$/; + + my $hid = 0; + + my $iv = "\x00" x 16; + + my $key_len = 32; + + my $kdf = Crypt::PBKDF2->new + ( + hasher => Crypt::PBKDF2->hasher_from_algorithm ('HMACSHA2', 256), + iterations => $iter, + output_len => $key_len, + salt_len => 0 + ); + + my $word_utf16le = encode ("UTF-16LE", $word); + + my $key = $kdf->PBKDF2 ('', $word_utf16le); + + my $is_decrypt = defined ($ct); + + my $data_bin; + + if ($is_decrypt == 1) + { + $data_bin = pack ("H*", $ct); + + my $aes = Crypt::CBC->new ({ + cipher => "Crypt::Rijndael", + key => $key, + iv => $iv, + keysize => $key_len, + literal_key => 1, + header => "none", + padding => "standard", + }); + + my $pt_bin = $aes->decrypt ($data_bin); + + my $pt = unpack ("H*", $pt_bin); + my $pt_tmp = substr ($pt, 0, 16); + + my $kp = "\x00\x00\x00\x00\x01\x00\x00\x00"; + my $kp_tmp = unpack ("H*", $kp); + + if ($pt_tmp eq $kp_tmp) + { + $data_bin = $pt_bin; + } + } + else + { + $data_bin = pack ("H*", "0000000001000000000000006000000060000000000000002000000040000000d43b8a0960a5654d8b9b31562f8be8b60efac1c060d2c74ee14db2b9328daac71e21bff7f1888a56e087f0bc861ced541ccf651d0fd7bcddbd9dd360ebfa36e810e461f6e4066171944c20d0cf0971f27b2256657273696f6e223a332c202255736572496e666f223a7b2256657273696f6e223a322c2022556e697175654964223a2238633466343238362d653262342d346264652d393330642d343537346361386230363566222c20225072696d617279536964223a22532d312d31322d31"); + } + + my $aes = Crypt::CBC->new ({ + cipher => "Crypt::Rijndael", + key => $key, + iv => $iv, + keysize => $key_len, + literal_key => 1, + header => "none", + padding => "standard", + }); + + my $ct_bin = $aes->encrypt ($data_bin); + + my $hash = sprintf ('$MSONLINEACCOUNT$%d$%d$%s', $hid, $iter, unpack ("H*", $ct_bin)); + + return $hash; +} + +sub module_verify_hash +{ + my $line = shift; + + my $idx = index ($line, ':'); + + return unless $idx >= 0; + + my $hash = substr ($line, 0, $idx); + my $word = substr ($line, $idx + 1); + + return unless substr ($hash, 0, 18) eq '$MSONLINEACCOUNT$0'; + + my (undef, $signature, $hid, $iter, $ct) = split '\$', $hash; + + return unless defined $signature; + return unless defined $hid; + return unless defined $iter; + return unless defined $ct; + + return unless ($signature eq 'MSONLINEACCOUNT'); + return unless ($hid eq '0'); + + my $word_packed = pack_if_HEX_notation ($word); + + my $new_hash = module_generate_hash ($word_packed, $iter, $ct); + + return ($new_hash, $word); +} + +1; From c87a87f99299741c36fe822e5a9b6b2c071b1d81 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Mon, 9 Jun 2025 11:02:34 +0200 Subject: [PATCH 51/95] Improvements to SCRYPT autotuning strategy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit General: The logic for calculating the SCRYPT workload has been moved from module_extra_buffer_size() to module_extra_tuningdb_block(). Previously, this function just returned values from a static tuning file. Now, it actually computes tuning values on the fly based on the device's resources and SCRYPT parameters. This was always possible, it just wasn't used that way until now. After running the calculation, the calculated kernel_accel value is injected into the tuning database as if it had come from a file. The tmto value is stored internally. Users can still override kernel-threads, kernel-accel, and scrypt-tmto via the command line or via tuningdb file. module_extra_tuningdb_block(): This is now where kernel_accel and tmto are automatically calculated. The logic for accel and tmto is now separated and more flexible. Whether the user is using defaults, tuningdb entries, or manual command line overrides, the code logic will try to make smart choices based on what's actually available on the device. First, it tries to find a kernel_accel value that fits into available memory. It starts with a base value and simulates tmto=1 or 2 (which is typical good on GPU). It also leaves room for other buffers (like pws[], tmps[], etc.). If the result is close to the actual processor count, it gets clamped. This value is then added to the tuning database, so hashcat can pick it up during startup. Once that's set, it derives tmto using available memory, thread count, and the actual SCRYPT parameters. module_extra_buffer_size(): This function now just returns the size of the SCRYPT B[] buffer, based on the tmto that was already calculated. kernel_threads: Defaults are now set to 32 threads in most cases. On AMD GPUs, 64 threads might give a slight performance bump, but 32 is more consistent and reliable. For very memory-heavy algorithms (like Ethereum Wallet), it scales down the thread count. Here's a rough reference for other SCRYPT-based modes: - 64 MiB: 16 threads - 256 MiB: 4 threads Tuning files: All built-in tuningdb entries have been removed, because they shouldn’t be needed anymore. But you can still add custom entries if needed. There’s even a commented-out example in the tuningdb file for mode 22700. Free memory handling: Getting the actual amount of free GPU memory is critical for this to work right. Unfortunately, none of the common GPGPU APIs give reliable numbers. We now query low-level interfaces like SYSFS (AMD) and NVML (NVIDIA). Support for those APIs is in place already, except for ADL, which still needs to be added. Because of this, hwmon support (which handles those low-level queries) can no longer be disabled. --- include/ext_nvml.h | 15 +++ include/ext_sysfs_amdgpu.h | 1 + include/hwmon.h | 1 + include/modules.h | 2 +- include/tuningdb.h | 2 +- include/types.h | 3 +- src/backend.c | 42 +++++- src/ext_nvml.c | 22 +++ src/ext_sysfs_amdgpu.c | 52 +++++++ src/hwmon.c | 73 +++++++++- src/modules/module_08900.c | 241 ++++++++++++--------------------- src/modules/module_09300.c | 241 ++++++++++++--------------------- src/modules/module_15700.c | 241 ++++++++++++--------------------- src/modules/module_22700.c | 241 ++++++++++++--------------------- src/modules/module_24000.c | 261 ++++++++++++------------------------ src/modules/module_27700.c | 241 ++++++++++++--------------------- src/modules/module_28200.c | 241 ++++++++++++--------------------- src/modules/module_29800.c | 241 ++++++++++++--------------------- src/tuningdb.c | 17 +-- src/user_options.c | 20 ++- tunings/Module_08900.hctune | 1 - tunings/Module_09300.hctune | 4 - tunings/Module_15700.hctune | 4 - tunings/Module_22700.hctune | 13 +- tunings/Module_24000.hctune | 4 - tunings/Module_27700.hctune | 4 - tunings/Module_28200.hctune | 4 - tunings/Module_29800.hctune | 5 - 28 files changed, 941 insertions(+), 1296 deletions(-) diff --git a/include/ext_nvml.h b/include/ext_nvml.h index 02c5d490c..0215e1a32 100644 --- a/include/ext_nvml.h +++ b/include/ext_nvml.h @@ -161,6 +161,18 @@ typedef enum nvmlGom_enum * */ #define nvmlClocksThrottleReasonNone 0x0000000000000000LL +/** + * Memory allocation information for a device (v1). + * The total amount is equal to the sum of the amounts of free and used memory. + */ +typedef struct nvmlMemory_st +{ + unsigned long long total; //!< Total physical device memory (in bytes) + unsigned long long free; //!< Unallocated device memory (in bytes) + unsigned long long used; //!< Sum of Reserved and Allocated device memory (in bytes). + //!< Note that the driver/GPU always sets aside a small amount of memory for bookkeeping +} nvmlMemory_t; + /* * End of declarations from nvml.h **/ @@ -191,6 +203,7 @@ typedef nvmlReturn_t (*NVML_API_CALL NVML_DEVICE_GET_SUPPORTEDCLOCKSTHROTTLEREAS typedef nvmlReturn_t (*NVML_API_CALL NVML_DEVICE_SET_COMPUTEMODE) (nvmlDevice_t, nvmlComputeMode_t); typedef nvmlReturn_t (*NVML_API_CALL NVML_DEVICE_SET_OPERATIONMODE) (nvmlDevice_t, nvmlGpuOperationMode_t); typedef nvmlReturn_t (*NVML_API_CALL NVML_DEVICE_GET_PCIINFO) (nvmlDevice_t, nvmlPciInfo_t *); +typedef nvmlReturn_t (*NVML_API_CALL NVML_DEVICE_GET_MEMORYINFO) (nvmlDevice_t, nvmlMemory_t *); typedef struct hm_nvml_lib { @@ -212,6 +225,7 @@ typedef struct hm_nvml_lib NVML_DEVICE_GET_CURRENTCLOCKSTHROTTLEREASONS nvmlDeviceGetCurrentClocksThrottleReasons; NVML_DEVICE_GET_SUPPORTEDCLOCKSTHROTTLEREASONS nvmlDeviceGetSupportedClocksThrottleReasons; NVML_DEVICE_GET_PCIINFO nvmlDeviceGetPciInfo; + NVML_DEVICE_GET_MEMORYINFO nvmlDeviceGetMemoryInfo; } hm_nvml_lib_t; @@ -232,5 +246,6 @@ int hm_NVML_nvmlDeviceGetClockInfo (void *hashcat_ctx, nvmlDevice_t device, nvml int hm_NVML_nvmlDeviceGetTemperatureThreshold (void *hashcat_ctx, nvmlDevice_t device, nvmlTemperatureThresholds_t thresholdType, unsigned int *temp); int hm_NVML_nvmlDeviceGetCurrPcieLinkWidth (void *hashcat_ctx, nvmlDevice_t device, unsigned int *currLinkWidth); int hm_NVML_nvmlDeviceGetPciInfo (void *hashcat_ctx, nvmlDevice_t device, nvmlPciInfo_t *pci); +int hm_NVML_nvmlDeviceGetMemoryInfo (void *hashcat_ctx, nvmlDevice_t device, nvmlMemory_t *mem); #endif // HC_NVML_H diff --git a/include/ext_sysfs_amdgpu.h b/include/ext_sysfs_amdgpu.h index 50c0dc569..d381d9cec 100644 --- a/include/ext_sysfs_amdgpu.h +++ b/include/ext_sysfs_amdgpu.h @@ -34,5 +34,6 @@ int hm_SYSFS_AMDGPU_get_pp_dpm_sclk (void *hashcat_ctx, const int backend_device int hm_SYSFS_AMDGPU_get_pp_dpm_mclk (void *hashcat_ctx, const int backend_device_idx, int *val); int hm_SYSFS_AMDGPU_get_pp_dpm_pcie (void *hashcat_ctx, const int backend_device_idx, int *val); int hm_SYSFS_AMDGPU_get_gpu_busy_percent (void *hashcat_ctx, const int backend_device_idx, int *val); +int hm_SYSFS_AMDGPU_get_mem_info_vram_used (void *hashcat_ctx, const int backend_device_idx, u64 *val); #endif // HC_EXT_SYSFS_AMDGPU_H diff --git a/include/hwmon.h b/include/hwmon.h index 545e22b2d..3d4bd7940 100644 --- a/include/hwmon.h +++ b/include/hwmon.h @@ -24,6 +24,7 @@ int hm_get_utilization_with_devices_idx (hashcat_ctx_t *hashcat_ctx, cons int hm_get_memoryspeed_with_devices_idx (hashcat_ctx_t *hashcat_ctx, const int backend_device_idx); int hm_get_corespeed_with_devices_idx (hashcat_ctx_t *hashcat_ctx, const int backend_device_idx); int hm_get_throttle_with_devices_idx (hashcat_ctx_t *hashcat_ctx, const int backend_device_idx); +u64 hm_get_memoryused_with_devices_idx (hashcat_ctx_t *hashcat_ctx, const int backend_device_idx); int hwmon_ctx_init (hashcat_ctx_t *hashcat_ctx); void hwmon_ctx_destroy (hashcat_ctx_t *hashcat_ctx); diff --git a/include/modules.h b/include/modules.h index aed8403ce..713b3f46f 100644 --- a/include/modules.h +++ b/include/modules.h @@ -20,7 +20,7 @@ u32 module_dgst_pos2 (MAYBE_UNUSED const hashconfig_t *ha u32 module_dgst_pos3 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra); u32 module_dgst_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra); u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra); -const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes); +const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes, const u32 device_id, const u32 kernel_accel); u32 module_forced_outfile_format (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra); u32 module_hash_category (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra); const char *module_hash_name (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra); diff --git a/include/tuningdb.h b/include/tuningdb.h index 608a25cfd..b2cafff67 100644 --- a/include/tuningdb.h +++ b/include/tuningdb.h @@ -17,7 +17,7 @@ int sort_by_tuning_db_entry (const void *v1, const void *v2); int tuning_db_init (hashcat_ctx_t *hashcat_ctx); void tuning_db_destroy (hashcat_ctx_t *hashcat_ctx); -bool tuning_db_process_line (hashcat_ctx_t *hashcat_ctx, const char *line_buf, const int line_num, const int source); +bool tuning_db_process_line (hashcat_ctx_t *hashcat_ctx, const char *line_buf, const int line_num); tuning_db_entry_t *tuning_db_search (hashcat_ctx_t *hashcat_ctx, const char *device_name, const cl_device_type device_type, int attack_mode, const int hash_mode); #endif // HC_TUNINGDB_H diff --git a/include/types.h b/include/types.h index d02c1b783..8f265ab14 100644 --- a/include/types.h +++ b/include/types.h @@ -2067,6 +2067,7 @@ typedef struct hm_attrs bool threshold_slowdown_get_supported; bool throttle_get_supported; bool utilization_get_supported; + bool memoryused_get_supported; } hm_attrs_t; @@ -3013,7 +3014,7 @@ typedef struct module_ctx u32 (*module_dgst_size) (const hashconfig_t *, const user_options_t *, const user_options_extra_t *); bool (*module_dictstat_disable) (const hashconfig_t *, const user_options_t *, const user_options_extra_t *); u64 (*module_esalt_size) (const hashconfig_t *, const user_options_t *, const user_options_extra_t *); - const char *(*module_extra_tuningdb_block) (const hashconfig_t *, const user_options_t *, const user_options_extra_t *, const backend_ctx_t *, const hashes_t *); + const char *(*module_extra_tuningdb_block) (const hashconfig_t *, const user_options_t *, const user_options_extra_t *, const backend_ctx_t *, const hashes_t *, const u32, const u32); u32 (*module_forced_outfile_format) (const hashconfig_t *, const user_options_t *, const user_options_extra_t *); u32 (*module_hash_category) (const hashconfig_t *, const user_options_t *, const user_options_extra_t *); const char *(*module_hash_name) (const hashconfig_t *, const user_options_t *, const user_options_extra_t *); diff --git a/src/backend.c b/src/backend.c index c5b95a659..80d1bfd60 100644 --- a/src/backend.c +++ b/src/backend.c @@ -24,6 +24,7 @@ #include "dynloader.h" #include "backend.h" #include "terminal.h" +#include "hwmon.h" #if defined (__linux__) static const char *const dri_card0_path = "/dev/dri/card0"; @@ -9649,7 +9650,44 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) if (module_ctx->module_extra_tuningdb_block != MODULE_DEFAULT) { - const char *extra_tuningdb_block = module_ctx->module_extra_tuningdb_block (hashconfig, user_options, user_options_extra, backend_ctx, hashes); + // We need this because we can't trust CUDA/HIP to give us the real free device memory + // The only way to do so is through low level APIs + + for (int i = 0; i < 10; i++) + { + const u64 used_bytes = hm_get_memoryused_with_devices_idx (hashcat_ctx, device_id); + + if (used_bytes) + { + if ((used_bytes > (2ULL * 1024 * 1024 * 1024)) + || (used_bytes > (device_param->device_global_mem * 0.5))) + { + event_log_warning (hashcat_ctx, "* Device #%u: Memory usage is too high: %" PRIu64 "/%" PRIu64 ", waiting...", device_id + 1, used_bytes, device_param->device_global_mem); + + sleep (1); + + continue; + } + + device_param->device_available_mem -= used_bytes; + + break; + } + else + { + break; + } + } + + u32 _kernel_accel = 0; + + tuning_db_entry_t *tuningdb_entry = tuning_db_search (hashcat_ctx, device_param->device_name, device_param->opencl_device_type, user_options->attack_mode, hashconfig->hash_mode); + + if (tuningdb_entry != NULL) _kernel_accel = tuningdb_entry->kernel_accel; + + if (user_options->kernel_accel_chgd == true) _kernel_accel = user_options->kernel_accel; + + const char *extra_tuningdb_block = module_ctx->module_extra_tuningdb_block (hashconfig, user_options, user_options_extra, backend_ctx, hashes, device_id, _kernel_accel); char *lines_buf = hcstrdup (extra_tuningdb_block); @@ -9669,7 +9707,7 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) if (next[0] == '#') continue; - tuning_db_process_line (hashcat_ctx, next, line_num, 2); + tuning_db_process_line (hashcat_ctx, next, line_num); } while ((next = strtok_r ((char *) NULL, "\n", &saveptr)) != NULL); diff --git a/src/ext_nvml.c b/src/ext_nvml.c index 25911df14..e6d49cd08 100644 --- a/src/ext_nvml.c +++ b/src/ext_nvml.c @@ -149,6 +149,7 @@ int nvml_init (void *hashcat_ctx) HC_LOAD_FUNC(nvml, nvmlDeviceGetCurrentClocksThrottleReasons, NVML_DEVICE_GET_CURRENTCLOCKSTHROTTLEREASONS, NVML, 0); HC_LOAD_FUNC(nvml, nvmlDeviceGetSupportedClocksThrottleReasons, NVML_DEVICE_GET_SUPPORTEDCLOCKSTHROTTLEREASONS, NVML, 0); HC_LOAD_FUNC(nvml, nvmlDeviceGetPciInfo, NVML_DEVICE_GET_PCIINFO, NVML, 0); + HC_LOAD_FUNC(nvml, nvmlDeviceGetMemoryInfo, NVML_DEVICE_GET_MEMORYINFO, NVML, 0); return 0; } @@ -392,3 +393,24 @@ int hm_NVML_nvmlDeviceGetPciInfo (void *hashcat_ctx, nvmlDevice_t device, nvmlPc return 0; } + +int hm_NVML_nvmlDeviceGetMemoryInfo (void *hashcat_ctx, nvmlDevice_t device, nvmlMemory_t *mem) +{ + hwmon_ctx_t *hwmon_ctx = ((hashcat_ctx_t *) hashcat_ctx)->hwmon_ctx; + + NVML_PTR *nvml = (NVML_PTR *) hwmon_ctx->hm_nvml; + + const nvmlReturn_t nvml_rc = nvml->nvmlDeviceGetMemoryInfo (device, mem); + + if (nvml_rc != NVML_SUCCESS) + { + const char *string = hm_NVML_nvmlErrorString (nvml, nvml_rc); + + event_log_error (hashcat_ctx, "nvmlDeviceGetMemoryInfo(): %s", string); + + return -1; + } + + return 0; +} + diff --git a/src/ext_sysfs_amdgpu.c b/src/ext_sysfs_amdgpu.c index 1aa53b210..70f071649 100644 --- a/src/ext_sysfs_amdgpu.c +++ b/src/ext_sysfs_amdgpu.c @@ -441,3 +441,55 @@ int hm_SYSFS_AMDGPU_get_gpu_busy_percent (void *hashcat_ctx, const int backend_d return 0; } + +int hm_SYSFS_AMDGPU_get_mem_info_vram_used (void *hashcat_ctx, const int backend_device_idx, u64 *val) +{ + char *syspath = hm_SYSFS_AMDGPU_get_syspath_device (hashcat_ctx, backend_device_idx); + + if (syspath == NULL) return -1; + + char *path; + + hc_asprintf (&path, "%s/mem_info_vram_used", syspath); + + hcfree (syspath); + + HCFILE fp; + + if (hc_fopen (&fp, path, "r") == false) + { + event_log_error (hashcat_ctx, "%s: %s", path, strerror (errno)); + + hcfree (path); + + return -1; + } + + u64 mem_info_vram_used = 0; + + while (!hc_feof (&fp)) + { + char buf[HCBUFSIZ_TINY]; + + char *ptr = hc_fgets (buf, sizeof (buf), &fp); + + if (ptr == NULL) continue; + + size_t len = strlen (ptr); + + if (len < 1) continue; + + int rc = sscanf (ptr, "%" PRIu64, &mem_info_vram_used); + + if (rc == 1) break; + } + + hc_fclose (&fp); + + *val = mem_info_vram_used; + + hcfree (path); + + return 0; +} + diff --git a/src/hwmon.c b/src/hwmon.c index a0f24c644..4f5264b3d 100644 --- a/src/hwmon.c +++ b/src/hwmon.c @@ -1214,6 +1214,60 @@ int hm_get_throttle_with_devices_idx (hashcat_ctx_t *hashcat_ctx, const int back return -1; } +u64 hm_get_memoryused_with_devices_idx (hashcat_ctx_t *hashcat_ctx, const int backend_device_idx) +{ + hwmon_ctx_t *hwmon_ctx = hashcat_ctx->hwmon_ctx; + backend_ctx_t *backend_ctx = hashcat_ctx->backend_ctx; + + if (hwmon_ctx->enabled == false) return 0; + + if (hwmon_ctx->hm_device[backend_device_idx].memoryused_get_supported == false) return 0; + + if ((backend_ctx->devices_param[backend_device_idx].is_opencl == true) || (backend_ctx->devices_param[backend_device_idx].is_hip == true) || (backend_ctx->devices_param[backend_device_idx].is_cuda == true)) + { + if (backend_ctx->devices_param[backend_device_idx].opencl_device_type & CL_DEVICE_TYPE_GPU) + { + if ((backend_ctx->devices_param[backend_device_idx].opencl_device_vendor_id == VENDOR_ID_AMD) || (backend_ctx->devices_param[backend_device_idx].opencl_device_vendor_id == VENDOR_ID_AMD_USE_HIP)) + { + if (hwmon_ctx->hm_sysfs_amdgpu) + { + u64 used = 0; + + if (hm_SYSFS_AMDGPU_get_mem_info_vram_used (hashcat_ctx, backend_device_idx, &used) == -1) + { + hwmon_ctx->hm_device[backend_device_idx].memoryused_get_supported = false; + + return 0; + } + + return used; + } + } + + if (backend_ctx->devices_param[backend_device_idx].opencl_device_vendor_id == VENDOR_ID_NV) + { + if (hwmon_ctx->hm_nvml) + { + nvmlMemory_t mem; + + if (hm_NVML_nvmlDeviceGetMemoryInfo (hashcat_ctx, hwmon_ctx->hm_device[backend_device_idx].nvml, &mem) == -1) + { + hwmon_ctx->hm_device[backend_device_idx].memoryused_get_supported = false; + + return 0; + } + + return mem.used; + } + } + } + } + + hwmon_ctx->hm_device[backend_device_idx].memoryused_get_supported = false; + + return 0; +} + int hwmon_ctx_init (hashcat_ctx_t *hashcat_ctx) { bridge_ctx_t *bridge_ctx = hashcat_ctx->bridge_ctx; @@ -1227,12 +1281,12 @@ int hwmon_ctx_init (hashcat_ctx_t *hashcat_ctx) if (bridge_ctx->enabled == true) backend_devices_cnt = 1; - #if !defined (WITH_HWMON) - return 0; - #endif // WITH_HWMON + //#if !defined (WITH_HWMON) + //return 0; + //#endif // WITH_HWMON if (user_options->usage > 0) return 0; - if (user_options->backend_info > 0) return 0; + //if (user_options->backend_info > 0) return 0; if (user_options->hash_info == true) return 0; if (user_options->keyspace == true) return 0; @@ -1241,7 +1295,9 @@ int hwmon_ctx_init (hashcat_ctx_t *hashcat_ctx) if (user_options->stdout_flag == true) return 0; if (user_options->version == true) return 0; if (user_options->identify == true) return 0; - if (user_options->hwmon == false) return 0; + //we need hwmon support to get free memory per device support + //its a joke, but there's no way around + //if (user_options->hwmon == false) return 0; hwmon_ctx->hm_device = (hm_attrs_t *) hccalloc (DEVICES_MAX, sizeof (hm_attrs_t)); @@ -1387,6 +1443,7 @@ int hwmon_ctx_init (hashcat_ctx_t *hashcat_ctx) hm_adapters_nvml[device_id].threshold_shutdown_get_supported = true; hm_adapters_nvml[device_id].threshold_slowdown_get_supported = true; hm_adapters_nvml[device_id].utilization_get_supported = true; + hm_adapters_nvml[device_id].memoryused_get_supported = true; } } } @@ -1419,6 +1476,7 @@ int hwmon_ctx_init (hashcat_ctx_t *hashcat_ctx) hm_adapters_nvml[device_id].threshold_shutdown_get_supported = true; hm_adapters_nvml[device_id].threshold_slowdown_get_supported = true; hm_adapters_nvml[device_id].utilization_get_supported = true; + hm_adapters_nvml[device_id].memoryused_get_supported = true; } } } @@ -1640,6 +1698,7 @@ int hwmon_ctx_init (hashcat_ctx_t *hashcat_ctx) hm_adapters_sysfs_amdgpu[device_id].memoryspeed_get_supported = true; hm_adapters_sysfs_amdgpu[device_id].temperature_get_supported = true; hm_adapters_sysfs_amdgpu[device_id].utilization_get_supported = true; + hm_adapters_sysfs_amdgpu[device_id].memoryused_get_supported = true; } } } @@ -1746,6 +1805,7 @@ int hwmon_ctx_init (hashcat_ctx_t *hashcat_ctx) hwmon_ctx->hm_device[backend_devices_idx].threshold_slowdown_get_supported |= hm_adapters_nvml[device_id].threshold_slowdown_get_supported; hwmon_ctx->hm_device[backend_devices_idx].throttle_get_supported |= hm_adapters_nvml[device_id].throttle_get_supported; hwmon_ctx->hm_device[backend_devices_idx].utilization_get_supported |= hm_adapters_nvml[device_id].utilization_get_supported; + hwmon_ctx->hm_device[backend_devices_idx].memoryused_get_supported |= hm_adapters_nvml[device_id].memoryused_get_supported; } if (hwmon_ctx->hm_nvapi) @@ -1875,6 +1935,7 @@ int hwmon_ctx_init (hashcat_ctx_t *hashcat_ctx) hwmon_ctx->hm_device[backend_devices_idx].threshold_slowdown_get_supported |= hm_adapters_sysfs_amdgpu[device_id].threshold_slowdown_get_supported; hwmon_ctx->hm_device[backend_devices_idx].throttle_get_supported |= hm_adapters_sysfs_amdgpu[device_id].throttle_get_supported; hwmon_ctx->hm_device[backend_devices_idx].utilization_get_supported |= hm_adapters_sysfs_amdgpu[device_id].utilization_get_supported; + hwmon_ctx->hm_device[backend_devices_idx].memoryused_get_supported |= hm_adapters_sysfs_amdgpu[device_id].memoryused_get_supported; } } @@ -1895,6 +1956,7 @@ int hwmon_ctx_init (hashcat_ctx_t *hashcat_ctx) hwmon_ctx->hm_device[backend_devices_idx].threshold_slowdown_get_supported |= hm_adapters_nvml[device_id].threshold_slowdown_get_supported; hwmon_ctx->hm_device[backend_devices_idx].throttle_get_supported |= hm_adapters_nvml[device_id].throttle_get_supported; hwmon_ctx->hm_device[backend_devices_idx].utilization_get_supported |= hm_adapters_nvml[device_id].utilization_get_supported; + hwmon_ctx->hm_device[backend_devices_idx].memoryused_get_supported |= hm_adapters_nvml[device_id].memoryused_get_supported; } if (hwmon_ctx->hm_nvapi) @@ -1927,6 +1989,7 @@ int hwmon_ctx_init (hashcat_ctx_t *hashcat_ctx) hm_get_threshold_slowdown_with_devices_idx (hashcat_ctx, backend_devices_idx); hm_get_throttle_with_devices_idx (hashcat_ctx, backend_devices_idx); hm_get_utilization_with_devices_idx (hashcat_ctx, backend_devices_idx); + hm_get_memoryused_with_devices_idx (hashcat_ctx, backend_devices_idx); } FREE_ADAPTERS; diff --git a/src/modules/module_08900.c b/src/modules/module_08900.c index 0865e8575..42fd456be 100644 --- a/src/modules/module_08900.c +++ b/src/modules/module_08900.c @@ -49,6 +49,8 @@ const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, static const char *SIGNATURE_SCRYPT = "SCRYPT"; +static const u32 SCRYPT_THREADS = 32; + static const u64 SCRYPT_N = 16384; static const u64 SCRYPT_R = 8; static const u64 SCRYPT_P = 1; @@ -67,9 +69,16 @@ u32 module_kernel_loops_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_ return kernel_loops_max; } +u32 module_kernel_threads_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u32 kernel_threads_min = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; + + return kernel_threads_min; +} + u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { - const u32 kernel_threads_max = 32; + const u32 kernel_threads_max = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; return kernel_threads_max; } @@ -84,90 +93,122 @@ u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED con return pw_max; } -const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes) +u32 tmto = 0; + +const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes, const u32 device_id, const u32 kernel_accel) { + // preprocess tmto in case user has overridden + // it's important to set to 0 otherwise so we can postprocess tmto in that case + + tmto = (user_options->scrypt_tmto_chgd == true) ? user_options->scrypt_tmto : 0; + // we enforce the same configuration for all hashes, so this should be fine const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 req1 = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); + const u64 size_per_accel = (128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra)) >> tmto; int lines_sz = 4096; char *lines_buf = hcmalloc (lines_sz); int lines_pos = 0; - for (int backend_devices_idx = 0; backend_devices_idx < backend_ctx->backend_devices_cnt; backend_devices_idx++) + hc_device_param_t *device_param = &backend_ctx->devices_param[device_id]; + + const u32 device_processors = device_param->device_processors; + + const u64 available_mem = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)); + + u32 kernel_accel_new = device_processors; + + if (kernel_accel) { - hc_device_param_t *device_param = &backend_ctx->devices_param[backend_devices_idx]; + // from command line or tuning db has priority - if (device_param->skipped == true) continue; - - const u64 avail = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)) - (2 * req1); - - char *new_device_name = hcstrdup (device_param->device_name); - - for (size_t i = 0; i < strlen (new_device_name); i++) - { - if (new_device_name[i] == ' ') new_device_name[i] = '_'; - } - - char *out_name = new_device_name; - - if (memcmp (new_device_name, "AMD_", 4) == 0) out_name += 4; - if (memcmp (new_device_name, "NVIDIA_", 7) == 0) out_name += 7; - - // ok, try to find a nice accel programmatically - - u32 accel = device_param->device_processors; + kernel_accel_new = user_options->kernel_accel; + } + else + { + // find a nice kernel_accel programmatically if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) { - // expect to change any of this - - if (avail < (req1 * accel)) // not enough memory + if ((size_per_accel * device_processors) > available_mem) // not enough memory { - const float multi = (float) avail / req1; + const float multi = (float) available_mem / size_per_accel; - accel = multi; + int accel_multi; - for (int i = 1; i <= 4; i++) // this is tmto + for (accel_multi = 1; accel_multi <= 2; accel_multi++) { - if (device_param->device_processors > accel) - { - accel = ((u64) multi << i) & ~3; - } + kernel_accel_new = multi * (1 << accel_multi); + + if (kernel_accel_new >= device_processors) break; + } + + // we need some space for tmps[], ... + + kernel_accel_new -= (1 << accel_multi); + + // clamp if close to device processors -- 10% good? + + if ((kernel_accel_new > device_processors) && ((kernel_accel_new - device_processors) <= (device_processors / 10))) + { + kernel_accel_new = device_processors; } } else { for (int i = 1; i <= 8; i++) { - if ((avail * 2) > (req1 * accel)) + if ((size_per_accel * device_processors * i) < available_mem) { - accel = device_param->device_processors * i; + kernel_accel_new = device_processors * i; } } } } else { - const u64 req1 = 128 * scrypt_r * scrypt_N; - for (int i = 1; i <= 8; i++) { - if (avail > (req1 * accel)) + if ((size_per_accel * device_processors * i) < available_mem) { - accel = device_param->device_processors * i; + kernel_accel_new = device_processors * i; } } } - - lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", out_name, user_options->hash_mode, accel); - - hcfree (new_device_name); } + // fix tmto if user allows + + if (tmto == 0) + { + const u32 tmto_start = 1; + const u32 tmto_stop = 5; + + for (u32 tmto_new = tmto_start; tmto_new <= tmto_stop; tmto_new++) + { + if (available_mem > (kernel_accel_new * (size_per_accel >> tmto_new))) + { + tmto = tmto_new; + + break; + } + } + } + + char *new_device_name = hcstrdup (device_param->device_name); + + for (size_t i = 0; i < strlen (new_device_name); i++) + { + if (new_device_name[i] == ' ') new_device_name[i] = '_'; + } + + lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", new_device_name, user_options->hash_mode, kernel_accel_new); + + hcfree (new_device_name); + return lines_buf; } @@ -179,115 +220,11 @@ u64 module_extra_buffer_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 kernel_power_max = ((OPTS_TYPE & OPTS_TYPE_MP_MULTI_DISABLE) ? 1 : device_param->device_processors) * device_param->kernel_threads_max * device_param->kernel_accel_max; + const u64 size_per_accel = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); - u64 tmto_start = 0; - u64 tmto_stop = 4; + u64 size_scrypt = size_per_accel * device_param->kernel_accel_max; - if (user_options->scrypt_tmto_chgd == true) - { - tmto_start = user_options->scrypt_tmto; - tmto_stop = user_options->scrypt_tmto; - } - - // size_pws - - const u64 size_pws = kernel_power_max * sizeof (pw_t); - - const u64 size_pws_amp = size_pws; - - // size_pws_comp - - const u64 size_pws_comp = kernel_power_max * (sizeof (u32) * 64); - - // size_pws_idx - - const u64 size_pws_idx = (kernel_power_max + 1) * sizeof (pw_idx_t); - - // size_tmps - - const u64 size_tmps = kernel_power_max * hashconfig->tmp_size; - - // size_hooks - - const u64 size_hooks = kernel_power_max * hashconfig->hook_size; - - u64 size_pws_pre = 4; - u64 size_pws_base = 4; - - if (user_options->slow_candidates == true) - { - // size_pws_pre - - size_pws_pre = kernel_power_max * sizeof (pw_pre_t); - - // size_pws_base - - size_pws_base = kernel_power_max * sizeof (pw_pre_t); - } - - // sometimes device_available_mem and device_maxmem_alloc reported back from the opencl runtime are a bit inaccurate. - // let's add some extra space just to be sure. - // now depends on the kernel-accel value (where scrypt and similar benefits), but also hard minimum 64mb and maximum 1024mb limit - - u64 EXTRA_SPACE = (1024ULL * 1024ULL) * device_param->kernel_accel_max; - - EXTRA_SPACE = MAX (EXTRA_SPACE, ( 64ULL * 1024ULL * 1024ULL)); - EXTRA_SPACE = MIN (EXTRA_SPACE, (1024ULL * 1024ULL * 1024ULL)); - - const u64 scrypt_extra_space - = device_param->size_bfs - + device_param->size_combs - + device_param->size_digests - + device_param->size_esalts - + device_param->size_markov_css - + device_param->size_plains - + device_param->size_results - + device_param->size_root_css - + device_param->size_rules - + device_param->size_rules_c - + device_param->size_salts - + device_param->size_shown - + device_param->size_tm - + device_param->size_st_digests - + device_param->size_st_salts - + device_param->size_st_esalts - + size_pws - + size_pws_amp - + size_pws_comp - + size_pws_idx - + size_tmps - + size_hooks - + size_pws_pre - + size_pws_base - + EXTRA_SPACE; - - bool not_enough_memory = true; - - u64 size_scrypt = 0; - - u64 tmto; - - for (tmto = tmto_start; tmto <= tmto_stop; tmto++) - { - size_scrypt = (128ULL * scrypt_r) * scrypt_N; - - size_scrypt /= 1ull << tmto; - - size_scrypt *= kernel_power_max; - - if ((size_scrypt / 4) > device_param->device_maxmem_alloc) continue; - - if ((size_scrypt + scrypt_extra_space) > device_param->device_available_mem) continue; - - not_enough_memory = false; - - break; - } - - if (not_enough_memory == true) return -1; - - return size_scrypt; + return size_scrypt / (1 << tmto); } u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) @@ -527,7 +464,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_kernel_loops_max = module_kernel_loops_max; module_ctx->module_kernel_loops_min = module_kernel_loops_min; module_ctx->module_kernel_threads_max = module_kernel_threads_max; - module_ctx->module_kernel_threads_min = MODULE_DEFAULT; + module_ctx->module_kernel_threads_min = module_kernel_threads_min; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; module_ctx->module_opti_type = module_opti_type; diff --git a/src/modules/module_09300.c b/src/modules/module_09300.c index 8f92e7fce..4f0f5bbb5 100644 --- a/src/modules/module_09300.c +++ b/src/modules/module_09300.c @@ -49,6 +49,8 @@ const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, static const char *SIGNATURE_CISCO9 = "$9$"; +static const u32 SCRYPT_THREADS = 32; + static const u64 SCRYPT_N = 16384; static const u64 SCRYPT_R = 1; static const u64 SCRYPT_P = 1; @@ -67,9 +69,16 @@ u32 module_kernel_loops_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_ return kernel_loops_max; } +u32 module_kernel_threads_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u32 kernel_threads_min = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; + + return kernel_threads_min; +} + u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { - const u32 kernel_threads_max = 32; + const u32 kernel_threads_max = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; return kernel_threads_max; } @@ -84,90 +93,122 @@ u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED con return pw_max; } -const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes) +u32 tmto = 0; + +const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes, const u32 device_id, const u32 kernel_accel) { + // preprocess tmto in case user has overridden + // it's important to set to 0 otherwise so we can postprocess tmto in that case + + tmto = (user_options->scrypt_tmto_chgd == true) ? user_options->scrypt_tmto : 0; + // we enforce the same configuration for all hashes, so this should be fine const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 req1 = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); + const u64 size_per_accel = (128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra)) >> tmto; int lines_sz = 4096; char *lines_buf = hcmalloc (lines_sz); int lines_pos = 0; - for (int backend_devices_idx = 0; backend_devices_idx < backend_ctx->backend_devices_cnt; backend_devices_idx++) + hc_device_param_t *device_param = &backend_ctx->devices_param[device_id]; + + const u32 device_processors = device_param->device_processors; + + const u64 available_mem = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)); + + u32 kernel_accel_new = device_processors; + + if (kernel_accel) { - hc_device_param_t *device_param = &backend_ctx->devices_param[backend_devices_idx]; + // from command line or tuning db has priority - if (device_param->skipped == true) continue; - - const u64 avail = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)) - (2 * req1); - - char *new_device_name = hcstrdup (device_param->device_name); - - for (size_t i = 0; i < strlen (new_device_name); i++) - { - if (new_device_name[i] == ' ') new_device_name[i] = '_'; - } - - char *out_name = new_device_name; - - if (memcmp (new_device_name, "AMD_", 4) == 0) out_name += 4; - if (memcmp (new_device_name, "NVIDIA_", 7) == 0) out_name += 7; - - // ok, try to find a nice accel programmatically - - u32 accel = device_param->device_processors; + kernel_accel_new = user_options->kernel_accel; + } + else + { + // find a nice kernel_accel programmatically if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) { - // expect to change any of this - - if (avail < (req1 * accel)) // not enough memory + if ((size_per_accel * device_processors) > available_mem) // not enough memory { - const float multi = (float) avail / req1; + const float multi = (float) available_mem / size_per_accel; - accel = multi; + int accel_multi; - for (int i = 1; i <= 4; i++) // this is tmto + for (accel_multi = 1; accel_multi <= 2; accel_multi++) { - if (device_param->device_processors > accel) - { - accel = ((u64) multi << i) & ~3; - } + kernel_accel_new = multi * (1 << accel_multi); + + if (kernel_accel_new >= device_processors) break; + } + + // we need some space for tmps[], ... + + kernel_accel_new -= (1 << accel_multi); + + // clamp if close to device processors -- 10% good? + + if ((kernel_accel_new > device_processors) && ((kernel_accel_new - device_processors) <= (device_processors / 10))) + { + kernel_accel_new = device_processors; } } else { for (int i = 1; i <= 8; i++) { - if ((avail * 2) > (req1 * accel)) + if ((size_per_accel * device_processors * i) < available_mem) { - accel = device_param->device_processors * i; + kernel_accel_new = device_processors * i; } } } } else { - const u64 req1 = 128 * scrypt_r * scrypt_N; - for (int i = 1; i <= 8; i++) { - if (avail > (req1 * accel)) + if ((size_per_accel * device_processors * i) < available_mem) { - accel = device_param->device_processors * i; + kernel_accel_new = device_processors * i; } } } - - lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", out_name, user_options->hash_mode, accel); - - hcfree (new_device_name); } + // fix tmto if user allows + + if (tmto == 0) + { + const u32 tmto_start = 1; + const u32 tmto_stop = 5; + + for (u32 tmto_new = tmto_start; tmto_new <= tmto_stop; tmto_new++) + { + if (available_mem > (kernel_accel_new * (size_per_accel >> tmto_new))) + { + tmto = tmto_new; + + break; + } + } + } + + char *new_device_name = hcstrdup (device_param->device_name); + + for (size_t i = 0; i < strlen (new_device_name); i++) + { + if (new_device_name[i] == ' ') new_device_name[i] = '_'; + } + + lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", new_device_name, user_options->hash_mode, kernel_accel_new); + + hcfree (new_device_name); + return lines_buf; } @@ -179,115 +220,11 @@ u64 module_extra_buffer_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 kernel_power_max = ((OPTS_TYPE & OPTS_TYPE_MP_MULTI_DISABLE) ? 1 : device_param->device_processors) * device_param->kernel_threads_max * device_param->kernel_accel_max; + const u64 req1 = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); - u64 tmto_start = 0; - u64 tmto_stop = 4; + u64 size_scrypt = req1 * device_param->kernel_accel_max; - if (user_options->scrypt_tmto_chgd == true) - { - tmto_start = user_options->scrypt_tmto; - tmto_stop = user_options->scrypt_tmto; - } - - // size_pws - - const u64 size_pws = kernel_power_max * sizeof (pw_t); - - const u64 size_pws_amp = size_pws; - - // size_pws_comp - - const u64 size_pws_comp = kernel_power_max * (sizeof (u32) * 64); - - // size_pws_idx - - const u64 size_pws_idx = (kernel_power_max + 1) * sizeof (pw_idx_t); - - // size_tmps - - const u64 size_tmps = kernel_power_max * hashconfig->tmp_size; - - // size_hooks - - const u64 size_hooks = kernel_power_max * hashconfig->hook_size; - - u64 size_pws_pre = 4; - u64 size_pws_base = 4; - - if (user_options->slow_candidates == true) - { - // size_pws_pre - - size_pws_pre = kernel_power_max * sizeof (pw_pre_t); - - // size_pws_base - - size_pws_base = kernel_power_max * sizeof (pw_pre_t); - } - - // sometimes device_available_mem and device_maxmem_alloc reported back from the opencl runtime are a bit inaccurate. - // let's add some extra space just to be sure. - // now depends on the kernel-accel value (where scrypt and similar benefits), but also hard minimum 64mb and maximum 1024mb limit - - u64 EXTRA_SPACE = (1024ULL * 1024ULL) * device_param->kernel_accel_max; - - EXTRA_SPACE = MAX (EXTRA_SPACE, ( 64ULL * 1024ULL * 1024ULL)); - EXTRA_SPACE = MIN (EXTRA_SPACE, (1024ULL * 1024ULL * 1024ULL)); - - const u64 scrypt_extra_space - = device_param->size_bfs - + device_param->size_combs - + device_param->size_digests - + device_param->size_esalts - + device_param->size_markov_css - + device_param->size_plains - + device_param->size_results - + device_param->size_root_css - + device_param->size_rules - + device_param->size_rules_c - + device_param->size_salts - + device_param->size_shown - + device_param->size_tm - + device_param->size_st_digests - + device_param->size_st_salts - + device_param->size_st_esalts - + size_pws - + size_pws_amp - + size_pws_comp - + size_pws_idx - + size_tmps - + size_hooks - + size_pws_pre - + size_pws_base - + EXTRA_SPACE; - - bool not_enough_memory = true; - - u64 size_scrypt = 0; - - u64 tmto; - - for (tmto = tmto_start; tmto <= tmto_stop; tmto++) - { - size_scrypt = (128ULL * scrypt_r) * scrypt_N; - - size_scrypt /= 1ull << tmto; - - size_scrypt *= kernel_power_max; - - if ((size_scrypt / 4) > device_param->device_maxmem_alloc) continue; - - if ((size_scrypt + scrypt_extra_space) > device_param->device_available_mem) continue; - - not_enough_memory = false; - - break; - } - - if (not_enough_memory == true) return -1; - - return size_scrypt; + return size_scrypt / (1 << tmto); } u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) @@ -488,7 +425,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_kernel_loops_max = module_kernel_loops_max; module_ctx->module_kernel_loops_min = module_kernel_loops_min; module_ctx->module_kernel_threads_max = module_kernel_threads_max; - module_ctx->module_kernel_threads_min = MODULE_DEFAULT; + module_ctx->module_kernel_threads_min = module_kernel_threads_min; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; module_ctx->module_opti_type = module_opti_type; diff --git a/src/modules/module_15700.c b/src/modules/module_15700.c index c7a357dd0..063106d2f 100644 --- a/src/modules/module_15700.c +++ b/src/modules/module_15700.c @@ -56,6 +56,8 @@ typedef struct ethereum_scrypt static const char *SIGNATURE_ETHEREUM_SCRYPT = "$ethereum$s"; +static const u32 SCRYPT_THREADS = 4; + static const u64 SCRYPT_N = 262144; static const u64 SCRYPT_R = 8; static const u64 SCRYPT_P = 1; @@ -74,9 +76,16 @@ u32 module_kernel_loops_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_ return kernel_loops_max; } +u32 module_kernel_threads_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u32 kernel_threads_min = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; + + return kernel_threads_min; +} + u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { - const u32 kernel_threads_max = 4; + const u32 kernel_threads_max = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; return kernel_threads_max; } @@ -98,90 +107,122 @@ u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED con return pw_max; } -const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes) +u32 tmto = 0; + +const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes, const u32 device_id, const u32 kernel_accel) { + // preprocess tmto in case user has overridden + // it's important to set to 0 otherwise so we can postprocess tmto in that case + + tmto = (user_options->scrypt_tmto_chgd == true) ? user_options->scrypt_tmto : 0; + // we enforce the same configuration for all hashes, so this should be fine const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 req1 = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); + const u64 size_per_accel = (128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra)) >> tmto; int lines_sz = 4096; char *lines_buf = hcmalloc (lines_sz); int lines_pos = 0; - for (int backend_devices_idx = 0; backend_devices_idx < backend_ctx->backend_devices_cnt; backend_devices_idx++) + hc_device_param_t *device_param = &backend_ctx->devices_param[device_id]; + + const u32 device_processors = device_param->device_processors; + + const u64 available_mem = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)); + + u32 kernel_accel_new = device_processors; + + if (kernel_accel) { - hc_device_param_t *device_param = &backend_ctx->devices_param[backend_devices_idx]; + // from command line or tuning db has priority - if (device_param->skipped == true) continue; - - const u64 avail = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)) - (2 * req1); - - char *new_device_name = hcstrdup (device_param->device_name); - - for (size_t i = 0; i < strlen (new_device_name); i++) - { - if (new_device_name[i] == ' ') new_device_name[i] = '_'; - } - - char *out_name = new_device_name; - - if (memcmp (new_device_name, "AMD_", 4) == 0) out_name += 4; - if (memcmp (new_device_name, "NVIDIA_", 7) == 0) out_name += 7; - - // ok, try to find a nice accel programmatically - - u32 accel = device_param->device_processors; + kernel_accel_new = user_options->kernel_accel; + } + else + { + // find a nice kernel_accel programmatically if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) { - // expect to change any of this - - if (avail < (req1 * accel)) // not enough memory + if ((size_per_accel * device_processors) > available_mem) // not enough memory { - const float multi = (float) avail / req1; + const float multi = (float) available_mem / size_per_accel; - accel = multi; + int accel_multi; - for (int i = 1; i <= 4; i++) // this is tmto + for (accel_multi = 1; accel_multi <= 2; accel_multi++) { - if (device_param->device_processors > accel) - { - accel = ((u64) multi << i) & ~3; - } + kernel_accel_new = multi * (1 << accel_multi); + + if (kernel_accel_new >= device_processors) break; + } + + // we need some space for tmps[], ... + + kernel_accel_new -= (1 << accel_multi); + + // clamp if close to device processors -- 10% good? + + if ((kernel_accel_new > device_processors) && ((kernel_accel_new - device_processors) <= (device_processors / 10))) + { + kernel_accel_new = device_processors; } } else { for (int i = 1; i <= 8; i++) { - if ((avail * 2) > (req1 * accel)) + if ((size_per_accel * device_processors * i) < available_mem) { - accel = device_param->device_processors * i; + kernel_accel_new = device_processors * i; } } } } else { - const u64 req1 = 128 * scrypt_r * scrypt_N; - for (int i = 1; i <= 8; i++) { - if (avail > (req1 * accel)) + if ((size_per_accel * device_processors * i) < available_mem) { - accel = device_param->device_processors * i; + kernel_accel_new = device_processors * i; } } } - - lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", out_name, user_options->hash_mode, accel); - - hcfree (new_device_name); } + // fix tmto if user allows + + if (tmto == 0) + { + const u32 tmto_start = 1; + const u32 tmto_stop = 5; + + for (u32 tmto_new = tmto_start; tmto_new <= tmto_stop; tmto_new++) + { + if (available_mem > (kernel_accel_new * (size_per_accel >> tmto_new))) + { + tmto = tmto_new; + + break; + } + } + } + + char *new_device_name = hcstrdup (device_param->device_name); + + for (size_t i = 0; i < strlen (new_device_name); i++) + { + if (new_device_name[i] == ' ') new_device_name[i] = '_'; + } + + lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", new_device_name, user_options->hash_mode, kernel_accel_new); + + hcfree (new_device_name); + return lines_buf; } @@ -193,115 +234,11 @@ u64 module_extra_buffer_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 kernel_power_max = ((OPTS_TYPE & OPTS_TYPE_MP_MULTI_DISABLE) ? 1 : device_param->device_processors) * device_param->kernel_threads_max * device_param->kernel_accel_max; + const u64 size_per_accel = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); - u64 tmto_start = 0; - u64 tmto_stop = 4; + u64 size_scrypt = size_per_accel * device_param->kernel_accel_max; - if (user_options->scrypt_tmto_chgd == true) - { - tmto_start = user_options->scrypt_tmto; - tmto_stop = user_options->scrypt_tmto; - } - - // size_pws - - const u64 size_pws = kernel_power_max * sizeof (pw_t); - - const u64 size_pws_amp = size_pws; - - // size_pws_comp - - const u64 size_pws_comp = kernel_power_max * (sizeof (u32) * 64); - - // size_pws_idx - - const u64 size_pws_idx = (kernel_power_max + 1) * sizeof (pw_idx_t); - - // size_tmps - - const u64 size_tmps = kernel_power_max * hashconfig->tmp_size; - - // size_hooks - - const u64 size_hooks = kernel_power_max * hashconfig->hook_size; - - u64 size_pws_pre = 4; - u64 size_pws_base = 4; - - if (user_options->slow_candidates == true) - { - // size_pws_pre - - size_pws_pre = kernel_power_max * sizeof (pw_pre_t); - - // size_pws_base - - size_pws_base = kernel_power_max * sizeof (pw_pre_t); - } - - // sometimes device_available_mem and device_maxmem_alloc reported back from the opencl runtime are a bit inaccurate. - // let's add some extra space just to be sure. - // now depends on the kernel-accel value (where scrypt and similar benefits), but also hard minimum 64mb and maximum 1024mb limit - - u64 EXTRA_SPACE = (1024ULL * 1024ULL) * device_param->kernel_accel_max; - - EXTRA_SPACE = MAX (EXTRA_SPACE, ( 64ULL * 1024ULL * 1024ULL)); - EXTRA_SPACE = MIN (EXTRA_SPACE, (1024ULL * 1024ULL * 1024ULL)); - - const u64 scrypt_extra_space - = device_param->size_bfs - + device_param->size_combs - + device_param->size_digests - + device_param->size_esalts - + device_param->size_markov_css - + device_param->size_plains - + device_param->size_results - + device_param->size_root_css - + device_param->size_rules - + device_param->size_rules_c - + device_param->size_salts - + device_param->size_shown - + device_param->size_tm - + device_param->size_st_digests - + device_param->size_st_salts - + device_param->size_st_esalts - + size_pws - + size_pws_amp - + size_pws_comp - + size_pws_idx - + size_tmps - + size_hooks - + size_pws_pre - + size_pws_base - + EXTRA_SPACE; - - bool not_enough_memory = true; - - u64 size_scrypt = 0; - - u64 tmto; - - for (tmto = tmto_start; tmto <= tmto_stop; tmto++) - { - size_scrypt = (128ULL * scrypt_r) * scrypt_N; - - size_scrypt /= 1ull << tmto; - - size_scrypt *= kernel_power_max; - - if ((size_scrypt / 4) > device_param->device_maxmem_alloc) continue; - - if ((size_scrypt + scrypt_extra_space) > device_param->device_available_mem) continue; - - not_enough_memory = false; - - break; - } - - if (not_enough_memory == true) return -1; - - return size_scrypt; + return size_scrypt / (1 << tmto); } u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) @@ -587,7 +524,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_kernel_loops_max = module_kernel_loops_max; module_ctx->module_kernel_loops_min = module_kernel_loops_min; module_ctx->module_kernel_threads_max = module_kernel_threads_max; - module_ctx->module_kernel_threads_min = MODULE_DEFAULT; + module_ctx->module_kernel_threads_min = module_kernel_threads_min; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; module_ctx->module_opti_type = module_opti_type; diff --git a/src/modules/module_22700.c b/src/modules/module_22700.c index 30c106625..1b9113bd4 100644 --- a/src/modules/module_22700.c +++ b/src/modules/module_22700.c @@ -49,6 +49,8 @@ const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, static const char *SIGNATURE_MULTIBIT = "$multibit$"; +static const u32 SCRYPT_THREADS = 32; + static const u64 SCRYPT_N = 16384; static const u64 SCRYPT_R = 8; static const u64 SCRYPT_P = 1; @@ -67,9 +69,16 @@ u32 module_kernel_loops_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_ return kernel_loops_max; } +u32 module_kernel_threads_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u32 kernel_threads_min = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; + + return kernel_threads_min; +} + u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { - const u32 kernel_threads_max = 32; + const u32 kernel_threads_max = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; return kernel_threads_max; } @@ -84,90 +93,122 @@ u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED con return pw_max; } -const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes) +u32 tmto = 0; + +const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes, const u32 device_id, const u32 kernel_accel) { + // preprocess tmto in case user has overridden + // it's important to set to 0 otherwise so we can postprocess tmto in that case + + tmto = (user_options->scrypt_tmto_chgd == true) ? user_options->scrypt_tmto : 0; + // we enforce the same configuration for all hashes, so this should be fine const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 req1 = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); + const u64 size_per_accel = (128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra)) >> tmto; int lines_sz = 4096; char *lines_buf = hcmalloc (lines_sz); int lines_pos = 0; - for (int backend_devices_idx = 0; backend_devices_idx < backend_ctx->backend_devices_cnt; backend_devices_idx++) + hc_device_param_t *device_param = &backend_ctx->devices_param[device_id]; + + const u32 device_processors = device_param->device_processors; + + const u64 available_mem = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)); + + u32 kernel_accel_new = device_processors; + + if (kernel_accel) { - hc_device_param_t *device_param = &backend_ctx->devices_param[backend_devices_idx]; + // from command line or tuning db has priority - if (device_param->skipped == true) continue; - - const u64 avail = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)) - (2 * req1); - - char *new_device_name = hcstrdup (device_param->device_name); - - for (size_t i = 0; i < strlen (new_device_name); i++) - { - if (new_device_name[i] == ' ') new_device_name[i] = '_'; - } - - char *out_name = new_device_name; - - if (memcmp (new_device_name, "AMD_", 4) == 0) out_name += 4; - if (memcmp (new_device_name, "NVIDIA_", 7) == 0) out_name += 7; - - // ok, try to find a nice accel programmatically - - u32 accel = device_param->device_processors; + kernel_accel_new = user_options->kernel_accel; + } + else + { + // find a nice kernel_accel programmatically if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) { - // expect to change any of this - - if (avail < (req1 * accel)) // not enough memory + if ((size_per_accel * device_processors) > available_mem) // not enough memory { - const float multi = (float) avail / req1; + const float multi = (float) available_mem / size_per_accel; - accel = multi; + int accel_multi; - for (int i = 1; i <= 4; i++) // this is tmto + for (accel_multi = 1; accel_multi <= 2; accel_multi++) { - if (device_param->device_processors > accel) - { - accel = ((u64) multi << i) & ~3; - } + kernel_accel_new = multi * (1 << accel_multi); + + if (kernel_accel_new >= device_processors) break; + } + + // we need some space for tmps[], ... + + kernel_accel_new -= (1 << accel_multi); + + // clamp if close to device processors -- 10% good? + + if ((kernel_accel_new > device_processors) && ((kernel_accel_new - device_processors) <= (device_processors / 10))) + { + kernel_accel_new = device_processors; } } else { for (int i = 1; i <= 8; i++) { - if ((avail * 2) > (req1 * accel)) + if ((size_per_accel * device_processors * i) < available_mem) { - accel = device_param->device_processors * i; + kernel_accel_new = device_processors * i; } } } } else { - const u64 req1 = 128 * scrypt_r * scrypt_N; - for (int i = 1; i <= 8; i++) { - if (avail > (req1 * accel)) + if ((size_per_accel * device_processors * i) < available_mem) { - accel = device_param->device_processors * i; + kernel_accel_new = device_processors * i; } } } - - lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", out_name, user_options->hash_mode, accel); - - hcfree (new_device_name); } + // fix tmto if user allows + + if (tmto == 0) + { + const u32 tmto_start = 1; + const u32 tmto_stop = 5; + + for (u32 tmto_new = tmto_start; tmto_new <= tmto_stop; tmto_new++) + { + if (available_mem > (kernel_accel_new * (size_per_accel >> tmto_new))) + { + tmto = tmto_new; + + break; + } + } + } + + char *new_device_name = hcstrdup (device_param->device_name); + + for (size_t i = 0; i < strlen (new_device_name); i++) + { + if (new_device_name[i] == ' ') new_device_name[i] = '_'; + } + + lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", new_device_name, user_options->hash_mode, kernel_accel_new); + + hcfree (new_device_name); + return lines_buf; } @@ -179,115 +220,11 @@ u64 module_extra_buffer_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 kernel_power_max = ((OPTS_TYPE & OPTS_TYPE_MP_MULTI_DISABLE) ? 1 : device_param->device_processors) * device_param->kernel_threads_max * device_param->kernel_accel_max; + const u64 size_per_accel = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); - u64 tmto_start = 0; - u64 tmto_stop = 4; + u64 size_scrypt = size_per_accel * device_param->kernel_accel_max; - if (user_options->scrypt_tmto_chgd == true) - { - tmto_start = user_options->scrypt_tmto; - tmto_stop = user_options->scrypt_tmto; - } - - // size_pws - - const u64 size_pws = kernel_power_max * sizeof (pw_t); - - const u64 size_pws_amp = size_pws; - - // size_pws_comp - - const u64 size_pws_comp = kernel_power_max * (sizeof (u32) * 64); - - // size_pws_idx - - const u64 size_pws_idx = (kernel_power_max + 1) * sizeof (pw_idx_t); - - // size_tmps - - const u64 size_tmps = kernel_power_max * hashconfig->tmp_size; - - // size_hooks - - const u64 size_hooks = kernel_power_max * hashconfig->hook_size; - - u64 size_pws_pre = 4; - u64 size_pws_base = 4; - - if (user_options->slow_candidates == true) - { - // size_pws_pre - - size_pws_pre = kernel_power_max * sizeof (pw_pre_t); - - // size_pws_base - - size_pws_base = kernel_power_max * sizeof (pw_pre_t); - } - - // sometimes device_available_mem and device_maxmem_alloc reported back from the opencl runtime are a bit inaccurate. - // let's add some extra space just to be sure. - // now depends on the kernel-accel value (where scrypt and similar benefits), but also hard minimum 64mb and maximum 1024mb limit - - u64 EXTRA_SPACE = (1024ULL * 1024ULL) * device_param->kernel_accel_max; - - EXTRA_SPACE = MAX (EXTRA_SPACE, ( 64ULL * 1024ULL * 1024ULL)); - EXTRA_SPACE = MIN (EXTRA_SPACE, (1024ULL * 1024ULL * 1024ULL)); - - const u64 scrypt_extra_space - = device_param->size_bfs - + device_param->size_combs - + device_param->size_digests - + device_param->size_esalts - + device_param->size_markov_css - + device_param->size_plains - + device_param->size_results - + device_param->size_root_css - + device_param->size_rules - + device_param->size_rules_c - + device_param->size_salts - + device_param->size_shown - + device_param->size_tm - + device_param->size_st_digests - + device_param->size_st_salts - + device_param->size_st_esalts - + size_pws - + size_pws_amp - + size_pws_comp - + size_pws_idx - + size_tmps - + size_hooks - + size_pws_pre - + size_pws_base - + EXTRA_SPACE; - - bool not_enough_memory = true; - - u64 size_scrypt = 0; - - u64 tmto; - - for (tmto = tmto_start; tmto <= tmto_stop; tmto++) - { - size_scrypt = (128ULL * scrypt_r) * scrypt_N; - - size_scrypt /= 1ull << tmto; - - size_scrypt *= kernel_power_max; - - if ((size_scrypt / 4) > device_param->device_maxmem_alloc) continue; - - if ((size_scrypt + scrypt_extra_space) > device_param->device_available_mem) continue; - - not_enough_memory = false; - - break; - } - - if (not_enough_memory == true) return -1; - - return size_scrypt; + return size_scrypt / (1 << tmto); } u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) @@ -526,7 +463,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_kernel_loops_max = module_kernel_loops_max; module_ctx->module_kernel_loops_min = module_kernel_loops_min; module_ctx->module_kernel_threads_max = module_kernel_threads_max; - module_ctx->module_kernel_threads_min = MODULE_DEFAULT; + module_ctx->module_kernel_threads_min = module_kernel_threads_min; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; module_ctx->module_opti_type = module_opti_type; diff --git a/src/modules/module_24000.c b/src/modules/module_24000.c index 62217f2d8..159acbed0 100644 --- a/src/modules/module_24000.c +++ b/src/modules/module_24000.c @@ -57,27 +57,13 @@ typedef struct bestcrypt_scrypt // 16 is actually a bit low, we may need to change this depending on user response static const char *SIGNATURE_BESTCRYPT_SCRYPT = "$bcve$"; -static const u32 SCRYPT_MAX_ACCEL = 256; -static const u32 SCRYPT_MAX_THREADS = 4; + +static const u32 SCRYPT_THREADS = 16; static const u64 SCRYPT_N = 32768; static const u64 SCRYPT_R = 16; static const u64 SCRYPT_P = 1; -u32 module_kernel_accel_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_accel_min = 1; - - return kernel_accel_min; -} - -u32 module_kernel_accel_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_accel_max = (user_options->kernel_accel_chgd == true) ? user_options->kernel_accel : SCRYPT_MAX_ACCEL; - - return kernel_accel_max; -} - u32 module_kernel_loops_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const u32 kernel_loops_min = 1; @@ -94,14 +80,14 @@ u32 module_kernel_loops_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_ u32 module_kernel_threads_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { - const u32 kernel_threads_min = 1; + const u32 kernel_threads_min = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; return kernel_threads_min; } u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { - const u32 kernel_threads_max = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_MAX_THREADS; + const u32 kernel_threads_max = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; return kernel_threads_max; } @@ -123,90 +109,122 @@ u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED con return pw_max; } -const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes) +u32 tmto = 0; + +const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes, const u32 device_id, const u32 kernel_accel) { + // preprocess tmto in case user has overridden + // it's important to set to 0 otherwise so we can postprocess tmto in that case + + tmto = (user_options->scrypt_tmto_chgd == true) ? user_options->scrypt_tmto : 0; + // we enforce the same configuration for all hashes, so this should be fine const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 req1 = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); + const u64 size_per_accel = (128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra)) >> tmto; int lines_sz = 4096; char *lines_buf = hcmalloc (lines_sz); int lines_pos = 0; - for (int backend_devices_idx = 0; backend_devices_idx < backend_ctx->backend_devices_cnt; backend_devices_idx++) + hc_device_param_t *device_param = &backend_ctx->devices_param[device_id]; + + const u32 device_processors = device_param->device_processors; + + const u64 available_mem = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)); + + u32 kernel_accel_new = device_processors; + + if (kernel_accel) { - hc_device_param_t *device_param = &backend_ctx->devices_param[backend_devices_idx]; + // from command line or tuning db has priority - if (device_param->skipped == true) continue; - - const u64 avail = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)) - (2 * req1); - - char *new_device_name = hcstrdup (device_param->device_name); - - for (size_t i = 0; i < strlen (new_device_name); i++) - { - if (new_device_name[i] == ' ') new_device_name[i] = '_'; - } - - char *out_name = new_device_name; - - if (memcmp (new_device_name, "AMD_", 4) == 0) out_name += 4; - if (memcmp (new_device_name, "NVIDIA_", 7) == 0) out_name += 7; - - // ok, try to find a nice accel programmatically - - u32 accel = device_param->device_processors; + kernel_accel_new = user_options->kernel_accel; + } + else + { + // find a nice kernel_accel programmatically if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) { - // expect to change any of this - - if (avail < (req1 * accel)) // not enough memory + if ((size_per_accel * device_processors) > available_mem) // not enough memory { - const float multi = (float) avail / req1; + const float multi = (float) available_mem / size_per_accel; - accel = multi; + int accel_multi; - for (int i = 1; i <= 4; i++) // this is tmto + for (accel_multi = 1; accel_multi <= 2; accel_multi++) { - if (device_param->device_processors > accel) - { - accel = ((u64) multi << i) & ~3; - } + kernel_accel_new = multi * (1 << accel_multi); + + if (kernel_accel_new >= device_processors) break; + } + + // we need some space for tmps[], ... + + kernel_accel_new -= (1 << accel_multi); + + // clamp if close to device processors -- 10% good? + + if ((kernel_accel_new > device_processors) && ((kernel_accel_new - device_processors) <= (device_processors / 10))) + { + kernel_accel_new = device_processors; } } else { for (int i = 1; i <= 8; i++) { - if ((avail * 2) > (req1 * accel)) + if ((size_per_accel * device_processors * i) < available_mem) { - accel = device_param->device_processors * i; + kernel_accel_new = device_processors * i; } } } } else { - const u64 req1 = 128 * scrypt_r * scrypt_N; - for (int i = 1; i <= 8; i++) { - if (avail > (req1 * accel)) + if ((size_per_accel * device_processors * i) < available_mem) { - accel = device_param->device_processors * i; + kernel_accel_new = device_processors * i; } } } - - lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", out_name, user_options->hash_mode, accel); - - hcfree (new_device_name); } + // fix tmto if user allows + + if (tmto == 0) + { + const u32 tmto_start = 1; + const u32 tmto_stop = 5; + + for (u32 tmto_new = tmto_start; tmto_new <= tmto_stop; tmto_new++) + { + if (available_mem > (kernel_accel_new * (size_per_accel >> tmto_new))) + { + tmto = tmto_new; + + break; + } + } + } + + char *new_device_name = hcstrdup (device_param->device_name); + + for (size_t i = 0; i < strlen (new_device_name); i++) + { + if (new_device_name[i] == ' ') new_device_name[i] = '_'; + } + + lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", new_device_name, user_options->hash_mode, kernel_accel_new); + + hcfree (new_device_name); + return lines_buf; } @@ -215,121 +233,14 @@ u64 module_extra_buffer_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE // we need to set the self-test hash settings to pass the self-test // the decoder for the self-test is called after this function - const u32 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u32 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; + const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; + const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 kernel_power_max = ((OPTS_TYPE & OPTS_TYPE_MP_MULTI_DISABLE) ? 1 : device_param->device_processors) * device_param->kernel_threads_max * device_param->kernel_accel_max; + const u64 size_per_accel = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); - u32 tmto_start = 1; - u32 tmto_stop = 6; + u64 size_scrypt = size_per_accel * device_param->kernel_accel_max; - if (user_options->scrypt_tmto) - { - tmto_start = user_options->scrypt_tmto; - tmto_stop = user_options->scrypt_tmto; - } - - // size_pws - - const u64 size_pws = kernel_power_max * sizeof (pw_t); - - const u64 size_pws_amp = size_pws; - - // size_pws_comp - - const u64 size_pws_comp = kernel_power_max * (sizeof (u32) * 64); - - // size_pws_idx - - const u64 size_pws_idx = (kernel_power_max + 1) * sizeof (pw_idx_t); - - // size_tmps - - const u64 size_tmps = kernel_power_max * hashconfig->tmp_size; - - // size_hooks - - const u64 size_hooks = kernel_power_max * hashconfig->hook_size; - -/* - u64 size_pws_pre = 4; - u64 size_pws_base = 4; - - if (user_options->slow_candidates == true) - { - // size_pws_pre - - size_pws_pre = kernel_power_max * sizeof (pw_pre_t); - - // size_pws_base - - size_pws_base = kernel_power_max * sizeof (pw_pre_t); - } -*/ - - // sometimes device_available_mem and device_maxmem_alloc reported back from the opencl runtime are a bit inaccurate. - // let's add some extra space just to be sure. - // now depends on the kernel-accel value (where scrypt and similar benefits), but also hard minimum 64mb and maximum 1024mb limit -/* - u64 EXTRA_SPACE = (1024ULL * 1024ULL) * device_param->kernel_accel_max; - - EXTRA_SPACE = MAX (EXTRA_SPACE, ( 64ULL * 1024ULL * 1024ULL)); - EXTRA_SPACE = MIN (EXTRA_SPACE, (1024ULL * 1024ULL * 1024ULL)); -*/ - const u64 scrypt_extra_space - = device_param->size_bfs - + device_param->size_combs - + device_param->size_digests - + device_param->size_esalts - + device_param->size_markov_css - + device_param->size_plains - + device_param->size_results - + device_param->size_root_css - + device_param->size_rules - + device_param->size_rules_c - + device_param->size_salts - + device_param->size_shown - + device_param->size_tm - + device_param->size_st_digests - + device_param->size_st_salts - + device_param->size_st_esalts - + size_pws - + size_pws_amp - + size_pws_comp - + size_pws_idx - + size_tmps - + size_hooks; -// + size_pws_pre -// + size_pws_base; -/* - + EXTRA_SPACE; -*/ - bool not_enough_memory = true; - - u64 size_scrypt = 0; - - u32 tmto; - - for (tmto = tmto_start; tmto <= tmto_stop; tmto++) - { - size_scrypt = (128ULL * scrypt_r) * scrypt_N; - - size_scrypt /= 1ull << tmto; - - size_scrypt *= kernel_power_max; - - if ((size_scrypt / 4) > device_param->device_maxmem_alloc) continue; - - if ((size_scrypt + scrypt_extra_space) > device_param->device_available_mem) continue; - - not_enough_memory = false; - - break; - } - - if (not_enough_memory == true) return -1; - - return size_scrypt; + return size_scrypt / (1 << tmto); } u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) @@ -593,8 +504,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook_size = MODULE_DEFAULT; module_ctx->module_jit_build_options = module_jit_build_options; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; - module_ctx->module_kernel_accel_max = module_kernel_accel_max; - module_ctx->module_kernel_accel_min = module_kernel_accel_min; + module_ctx->module_kernel_accel_max = MODULE_DEFAULT; + module_ctx->module_kernel_accel_min = MODULE_DEFAULT; module_ctx->module_kernel_loops_max = module_kernel_loops_max; module_ctx->module_kernel_loops_min = module_kernel_loops_min; module_ctx->module_kernel_threads_max = module_kernel_threads_max; diff --git a/src/modules/module_27700.c b/src/modules/module_27700.c index 089deb5fa..fb3a31fa1 100644 --- a/src/modules/module_27700.c +++ b/src/modules/module_27700.c @@ -49,6 +49,8 @@ const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, static const char *SIGNATURE_MULTIBIT = "$multibit$"; +static const u32 SCRYPT_THREADS = 32; + static const u64 SCRYPT_N = 16384; static const u64 SCRYPT_R = 8; static const u64 SCRYPT_P = 1; @@ -67,9 +69,16 @@ u32 module_kernel_loops_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_ return kernel_loops_max; } +u32 module_kernel_threads_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u32 kernel_threads_min = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; + + return kernel_threads_min; +} + u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { - const u32 kernel_threads_max = 32; + const u32 kernel_threads_max = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; return kernel_threads_max; } @@ -84,90 +93,122 @@ u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED con return pw_max; } -const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes) +u32 tmto = 0; + +const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes, const u32 device_id, const u32 kernel_accel) { + // preprocess tmto in case user has overridden + // it's important to set to 0 otherwise so we can postprocess tmto in that case + + tmto = (user_options->scrypt_tmto_chgd == true) ? user_options->scrypt_tmto : 0; + // we enforce the same configuration for all hashes, so this should be fine const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 req1 = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); + const u64 size_per_accel = (128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra)) >> tmto; int lines_sz = 4096; char *lines_buf = hcmalloc (lines_sz); int lines_pos = 0; - for (int backend_devices_idx = 0; backend_devices_idx < backend_ctx->backend_devices_cnt; backend_devices_idx++) + hc_device_param_t *device_param = &backend_ctx->devices_param[device_id]; + + const u32 device_processors = device_param->device_processors; + + const u64 available_mem = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)); + + u32 kernel_accel_new = device_processors; + + if (kernel_accel) { - hc_device_param_t *device_param = &backend_ctx->devices_param[backend_devices_idx]; + // from command line or tuning db has priority - if (device_param->skipped == true) continue; - - const u64 avail = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)) - (2 * req1); - - char *new_device_name = hcstrdup (device_param->device_name); - - for (size_t i = 0; i < strlen (new_device_name); i++) - { - if (new_device_name[i] == ' ') new_device_name[i] = '_'; - } - - char *out_name = new_device_name; - - if (memcmp (new_device_name, "AMD_", 4) == 0) out_name += 4; - if (memcmp (new_device_name, "NVIDIA_", 7) == 0) out_name += 7; - - // ok, try to find a nice accel programmatically - - u32 accel = device_param->device_processors; + kernel_accel_new = user_options->kernel_accel; + } + else + { + // find a nice kernel_accel programmatically if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) { - // expect to change any of this - - if (avail < (req1 * accel)) // not enough memory + if ((size_per_accel * device_processors) > available_mem) // not enough memory { - const float multi = (float) avail / req1; + const float multi = (float) available_mem / size_per_accel; - accel = multi; + int accel_multi; - for (int i = 1; i <= 4; i++) // this is tmto + for (accel_multi = 1; accel_multi <= 2; accel_multi++) { - if (device_param->device_processors > accel) - { - accel = ((u64) multi << i) & ~3; - } + kernel_accel_new = multi * (1 << accel_multi); + + if (kernel_accel_new >= device_processors) break; + } + + // we need some space for tmps[], ... + + kernel_accel_new -= (1 << accel_multi); + + // clamp if close to device processors -- 10% good? + + if ((kernel_accel_new > device_processors) && ((kernel_accel_new - device_processors) <= (device_processors / 10))) + { + kernel_accel_new = device_processors; } } else { for (int i = 1; i <= 8; i++) { - if ((avail * 2) > (req1 * accel)) + if ((size_per_accel * device_processors * i) < available_mem) { - accel = device_param->device_processors * i; + kernel_accel_new = device_processors * i; } } } } else { - const u64 req1 = 128 * scrypt_r * scrypt_N; - for (int i = 1; i <= 8; i++) { - if (avail > (req1 * accel)) + if ((size_per_accel * device_processors * i) < available_mem) { - accel = device_param->device_processors * i; + kernel_accel_new = device_processors * i; } } } - - lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", out_name, user_options->hash_mode, accel); - - hcfree (new_device_name); } + // fix tmto if user allows + + if (tmto == 0) + { + const u32 tmto_start = 1; + const u32 tmto_stop = 5; + + for (u32 tmto_new = tmto_start; tmto_new <= tmto_stop; tmto_new++) + { + if (available_mem > (kernel_accel_new * (size_per_accel >> tmto_new))) + { + tmto = tmto_new; + + break; + } + } + } + + char *new_device_name = hcstrdup (device_param->device_name); + + for (size_t i = 0; i < strlen (new_device_name); i++) + { + if (new_device_name[i] == ' ') new_device_name[i] = '_'; + } + + lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", new_device_name, user_options->hash_mode, kernel_accel_new); + + hcfree (new_device_name); + return lines_buf; } @@ -179,115 +220,11 @@ u64 module_extra_buffer_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 kernel_power_max = ((OPTS_TYPE & OPTS_TYPE_MP_MULTI_DISABLE) ? 1 : device_param->device_processors) * device_param->kernel_threads_max * device_param->kernel_accel_max; + const u64 size_per_accel = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); - u64 tmto_start = 0; - u64 tmto_stop = 4; + u64 size_scrypt = size_per_accel * device_param->kernel_accel_max; - if (user_options->scrypt_tmto_chgd == true) - { - tmto_start = user_options->scrypt_tmto; - tmto_stop = user_options->scrypt_tmto; - } - - // size_pws - - const u64 size_pws = kernel_power_max * sizeof (pw_t); - - const u64 size_pws_amp = size_pws; - - // size_pws_comp - - const u64 size_pws_comp = kernel_power_max * (sizeof (u32) * 64); - - // size_pws_idx - - const u64 size_pws_idx = (kernel_power_max + 1) * sizeof (pw_idx_t); - - // size_tmps - - const u64 size_tmps = kernel_power_max * hashconfig->tmp_size; - - // size_hooks - - const u64 size_hooks = kernel_power_max * hashconfig->hook_size; - - u64 size_pws_pre = 4; - u64 size_pws_base = 4; - - if (user_options->slow_candidates == true) - { - // size_pws_pre - - size_pws_pre = kernel_power_max * sizeof (pw_pre_t); - - // size_pws_base - - size_pws_base = kernel_power_max * sizeof (pw_pre_t); - } - - // sometimes device_available_mem and device_maxmem_alloc reported back from the opencl runtime are a bit inaccurate. - // let's add some extra space just to be sure. - // now depends on the kernel-accel value (where scrypt and similar benefits), but also hard minimum 64mb and maximum 1024mb limit - - u64 EXTRA_SPACE = (1024ULL * 1024ULL) * device_param->kernel_accel_max; - - EXTRA_SPACE = MAX (EXTRA_SPACE, ( 64ULL * 1024ULL * 1024ULL)); - EXTRA_SPACE = MIN (EXTRA_SPACE, (1024ULL * 1024ULL * 1024ULL)); - - const u64 scrypt_extra_space - = device_param->size_bfs - + device_param->size_combs - + device_param->size_digests - + device_param->size_esalts - + device_param->size_markov_css - + device_param->size_plains - + device_param->size_results - + device_param->size_root_css - + device_param->size_rules - + device_param->size_rules_c - + device_param->size_salts - + device_param->size_shown - + device_param->size_tm - + device_param->size_st_digests - + device_param->size_st_salts - + device_param->size_st_esalts - + size_pws - + size_pws_amp - + size_pws_comp - + size_pws_idx - + size_tmps - + size_hooks - + size_pws_pre - + size_pws_base - + EXTRA_SPACE; - - bool not_enough_memory = true; - - u64 size_scrypt = 0; - - u64 tmto; - - for (tmto = tmto_start; tmto <= tmto_stop; tmto++) - { - size_scrypt = (128ULL * scrypt_r) * scrypt_N; - - size_scrypt /= 1ull << tmto; - - size_scrypt *= kernel_power_max; - - if ((size_scrypt / 4) > device_param->device_maxmem_alloc) continue; - - if ((size_scrypt + scrypt_extra_space) > device_param->device_available_mem) continue; - - not_enough_memory = false; - - break; - } - - if (not_enough_memory == true) return -1; - - return size_scrypt; + return size_scrypt / (1 << tmto); } u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) @@ -550,7 +487,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_kernel_loops_max = module_kernel_loops_max; module_ctx->module_kernel_loops_min = module_kernel_loops_min; module_ctx->module_kernel_threads_max = module_kernel_threads_max; - module_ctx->module_kernel_threads_min = MODULE_DEFAULT; + module_ctx->module_kernel_threads_min = module_kernel_threads_min; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; module_ctx->module_opti_type = module_opti_type; diff --git a/src/modules/module_28200.c b/src/modules/module_28200.c index 86a636adf..52a7adbdd 100644 --- a/src/modules/module_28200.c +++ b/src/modules/module_28200.c @@ -57,6 +57,8 @@ typedef struct exodus static const char *SIGNATURE_EXODUS = "EXODUS"; +static const u32 SCRYPT_THREADS = 32; + static const u64 SCRYPT_N = 16384; static const u64 SCRYPT_R = 8; static const u64 SCRYPT_P = 1; @@ -75,9 +77,16 @@ u32 module_kernel_loops_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_ return kernel_loops_max; } +u32 module_kernel_threads_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u32 kernel_threads_min = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; + + return kernel_threads_min; +} + u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { - const u32 kernel_threads_max = 32; + const u32 kernel_threads_max = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; return kernel_threads_max; } @@ -96,90 +105,122 @@ u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED return esalt_size; } -const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes) +u32 tmto = 0; + +const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes, const u32 device_id, const u32 kernel_accel) { + // preprocess tmto in case user has overridden + // it's important to set to 0 otherwise so we can postprocess tmto in that case + + tmto = (user_options->scrypt_tmto_chgd == true) ? user_options->scrypt_tmto : 0; + // we enforce the same configuration for all hashes, so this should be fine const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 req1 = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); + const u64 size_per_accel = (128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra)) >> tmto; int lines_sz = 4096; char *lines_buf = hcmalloc (lines_sz); int lines_pos = 0; - for (int backend_devices_idx = 0; backend_devices_idx < backend_ctx->backend_devices_cnt; backend_devices_idx++) + hc_device_param_t *device_param = &backend_ctx->devices_param[device_id]; + + const u32 device_processors = device_param->device_processors; + + const u64 available_mem = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)); + + u32 kernel_accel_new = device_processors; + + if (kernel_accel) { - hc_device_param_t *device_param = &backend_ctx->devices_param[backend_devices_idx]; + // from command line or tuning db has priority - if (device_param->skipped == true) continue; - - const u64 avail = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)) - (2 * req1); - - char *new_device_name = hcstrdup (device_param->device_name); - - for (size_t i = 0; i < strlen (new_device_name); i++) - { - if (new_device_name[i] == ' ') new_device_name[i] = '_'; - } - - char *out_name = new_device_name; - - if (memcmp (new_device_name, "AMD_", 4) == 0) out_name += 4; - if (memcmp (new_device_name, "NVIDIA_", 7) == 0) out_name += 7; - - // ok, try to find a nice accel programmatically - - u32 accel = device_param->device_processors; + kernel_accel_new = user_options->kernel_accel; + } + else + { + // find a nice kernel_accel programmatically if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) { - // expect to change any of this - - if (avail < (req1 * accel)) // not enough memory + if ((size_per_accel * device_processors) > available_mem) // not enough memory { - const float multi = (float) avail / req1; + const float multi = (float) available_mem / size_per_accel; - accel = multi; + int accel_multi; - for (int i = 1; i <= 4; i++) // this is tmto + for (accel_multi = 1; accel_multi <= 2; accel_multi++) { - if (device_param->device_processors > accel) - { - accel = ((u64) multi << i) & ~3; - } + kernel_accel_new = multi * (1 << accel_multi); + + if (kernel_accel_new >= device_processors) break; + } + + // we need some space for tmps[], ... + + kernel_accel_new -= (1 << accel_multi); + + // clamp if close to device processors -- 10% good? + + if ((kernel_accel_new > device_processors) && ((kernel_accel_new - device_processors) <= (device_processors / 10))) + { + kernel_accel_new = device_processors; } } else { for (int i = 1; i <= 8; i++) { - if ((avail * 2) > (req1 * accel)) + if ((size_per_accel * device_processors * i) < available_mem) { - accel = device_param->device_processors * i; + kernel_accel_new = device_processors * i; } } } } else { - const u64 req1 = 128 * scrypt_r * scrypt_N; - for (int i = 1; i <= 8; i++) { - if (avail > (req1 * accel)) + if ((size_per_accel * device_processors * i) < available_mem) { - accel = device_param->device_processors * i; + kernel_accel_new = device_processors * i; } } } - - lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", out_name, user_options->hash_mode, accel); - - hcfree (new_device_name); } + // fix tmto if user allows + + if (tmto == 0) + { + const u32 tmto_start = 1; + const u32 tmto_stop = 5; + + for (u32 tmto_new = tmto_start; tmto_new <= tmto_stop; tmto_new++) + { + if (available_mem > (kernel_accel_new * (size_per_accel >> tmto_new))) + { + tmto = tmto_new; + + break; + } + } + } + + char *new_device_name = hcstrdup (device_param->device_name); + + for (size_t i = 0; i < strlen (new_device_name); i++) + { + if (new_device_name[i] == ' ') new_device_name[i] = '_'; + } + + lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", new_device_name, user_options->hash_mode, kernel_accel_new); + + hcfree (new_device_name); + return lines_buf; } @@ -191,115 +232,11 @@ u64 module_extra_buffer_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 kernel_power_max = ((OPTS_TYPE & OPTS_TYPE_MP_MULTI_DISABLE) ? 1 : device_param->device_processors) * device_param->kernel_threads_max * device_param->kernel_accel_max; + const u64 size_per_accel = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); - u64 tmto_start = 0; - u64 tmto_stop = 4; + u64 size_scrypt = size_per_accel * device_param->kernel_accel_max; - if (user_options->scrypt_tmto_chgd == true) - { - tmto_start = user_options->scrypt_tmto; - tmto_stop = user_options->scrypt_tmto; - } - - // size_pws - - const u64 size_pws = kernel_power_max * sizeof (pw_t); - - const u64 size_pws_amp = size_pws; - - // size_pws_comp - - const u64 size_pws_comp = kernel_power_max * (sizeof (u32) * 64); - - // size_pws_idx - - const u64 size_pws_idx = (kernel_power_max + 1) * sizeof (pw_idx_t); - - // size_tmps - - const u64 size_tmps = kernel_power_max * hashconfig->tmp_size; - - // size_hooks - - const u64 size_hooks = kernel_power_max * hashconfig->hook_size; - - u64 size_pws_pre = 4; - u64 size_pws_base = 4; - - if (user_options->slow_candidates == true) - { - // size_pws_pre - - size_pws_pre = kernel_power_max * sizeof (pw_pre_t); - - // size_pws_base - - size_pws_base = kernel_power_max * sizeof (pw_pre_t); - } - - // sometimes device_available_mem and device_maxmem_alloc reported back from the opencl runtime are a bit inaccurate. - // let's add some extra space just to be sure. - // now depends on the kernel-accel value (where scrypt and similar benefits), but also hard minimum 64mb and maximum 1024mb limit - - u64 EXTRA_SPACE = (1024ULL * 1024ULL) * device_param->kernel_accel_max; - - EXTRA_SPACE = MAX (EXTRA_SPACE, ( 64ULL * 1024ULL * 1024ULL)); - EXTRA_SPACE = MIN (EXTRA_SPACE, (1024ULL * 1024ULL * 1024ULL)); - - const u64 scrypt_extra_space - = device_param->size_bfs - + device_param->size_combs - + device_param->size_digests - + device_param->size_esalts - + device_param->size_markov_css - + device_param->size_plains - + device_param->size_results - + device_param->size_root_css - + device_param->size_rules - + device_param->size_rules_c - + device_param->size_salts - + device_param->size_shown - + device_param->size_tm - + device_param->size_st_digests - + device_param->size_st_salts - + device_param->size_st_esalts - + size_pws - + size_pws_amp - + size_pws_comp - + size_pws_idx - + size_tmps - + size_hooks - + size_pws_pre - + size_pws_base - + EXTRA_SPACE; - - bool not_enough_memory = true; - - u64 size_scrypt = 0; - - u64 tmto; - - for (tmto = tmto_start; tmto <= tmto_stop; tmto++) - { - size_scrypt = (128ULL * scrypt_r) * scrypt_N; - - size_scrypt /= 1ull << tmto; - - size_scrypt *= kernel_power_max; - - if ((size_scrypt / 4) > device_param->device_maxmem_alloc) continue; - - if ((size_scrypt + scrypt_extra_space) > device_param->device_available_mem) continue; - - not_enough_memory = false; - - break; - } - - if (not_enough_memory == true) return -1; - - return size_scrypt; + return size_scrypt / (1 << tmto); } u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) @@ -634,7 +571,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_kernel_loops_max = module_kernel_loops_max; module_ctx->module_kernel_loops_min = module_kernel_loops_min; module_ctx->module_kernel_threads_max = module_kernel_threads_max; - module_ctx->module_kernel_threads_min = MODULE_DEFAULT; + module_ctx->module_kernel_threads_min = module_kernel_threads_min; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; module_ctx->module_opti_type = module_opti_type; diff --git a/src/modules/module_29800.c b/src/modules/module_29800.c index d1be6be39..633ef1978 100644 --- a/src/modules/module_29800.c +++ b/src/modules/module_29800.c @@ -49,6 +49,8 @@ const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, static const char *SIGNATURE_BISQ = "$bisq$"; +static const u32 SCRYPT_THREADS = 16; + static const u64 SCRYPT_N = 32768; static const u64 SCRYPT_R = 8; static const u64 SCRYPT_P = 6; @@ -67,9 +69,16 @@ u32 module_kernel_loops_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_ return kernel_loops_max; } +u32 module_kernel_threads_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u32 kernel_threads_min = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; + + return kernel_threads_min; +} + u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { - const u32 kernel_threads_max = 32; + const u32 kernel_threads_max = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; return kernel_threads_max; } @@ -91,90 +100,122 @@ u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED con return pw_max; } -const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes) +u32 tmto = 0; + +const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes, const u32 device_id, const u32 kernel_accel) { + // preprocess tmto in case user has overridden + // it's important to set to 0 otherwise so we can postprocess tmto in that case + + tmto = (user_options->scrypt_tmto_chgd == true) ? user_options->scrypt_tmto : 0; + // we enforce the same configuration for all hashes, so this should be fine const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 req1 = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); + const u64 size_per_accel = (128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra)) >> tmto; int lines_sz = 4096; char *lines_buf = hcmalloc (lines_sz); int lines_pos = 0; - for (int backend_devices_idx = 0; backend_devices_idx < backend_ctx->backend_devices_cnt; backend_devices_idx++) + hc_device_param_t *device_param = &backend_ctx->devices_param[device_id]; + + const u32 device_processors = device_param->device_processors; + + const u64 available_mem = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)); + + u32 kernel_accel_new = device_processors; + + if (kernel_accel) { - hc_device_param_t *device_param = &backend_ctx->devices_param[backend_devices_idx]; + // from command line or tuning db has priority - if (device_param->skipped == true) continue; - - const u64 avail = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)) - (2 * req1); - - char *new_device_name = hcstrdup (device_param->device_name); - - for (size_t i = 0; i < strlen (new_device_name); i++) - { - if (new_device_name[i] == ' ') new_device_name[i] = '_'; - } - - char *out_name = new_device_name; - - if (memcmp (new_device_name, "AMD_", 4) == 0) out_name += 4; - if (memcmp (new_device_name, "NVIDIA_", 7) == 0) out_name += 7; - - // ok, try to find a nice accel programmatically - - u32 accel = device_param->device_processors; + kernel_accel_new = user_options->kernel_accel; + } + else + { + // find a nice kernel_accel programmatically if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) { - // expect to change any of this - - if (avail < (req1 * accel)) // not enough memory + if ((size_per_accel * device_processors) > available_mem) // not enough memory { - const float multi = (float) avail / req1; + const float multi = (float) available_mem / size_per_accel; - accel = multi; + int accel_multi; - for (int i = 1; i <= 4; i++) // this is tmto + for (accel_multi = 1; accel_multi <= 2; accel_multi++) { - if (device_param->device_processors > accel) - { - accel = ((u64) multi << i) & ~3; - } + kernel_accel_new = multi * (1 << accel_multi); + + if (kernel_accel_new >= device_processors) break; + } + + // we need some space for tmps[], ... + + kernel_accel_new -= (1 << accel_multi); + + // clamp if close to device processors -- 10% good? + + if ((kernel_accel_new > device_processors) && ((kernel_accel_new - device_processors) <= (device_processors / 10))) + { + kernel_accel_new = device_processors; } } else { for (int i = 1; i <= 8; i++) { - if ((avail * 2) > (req1 * accel)) + if ((size_per_accel * device_processors * i) < available_mem) { - accel = device_param->device_processors * i; + kernel_accel_new = device_processors * i; } } } } else { - const u64 req1 = 128 * scrypt_r * scrypt_N; - for (int i = 1; i <= 8; i++) { - if (avail > (req1 * accel)) + if ((size_per_accel * device_processors * i) < available_mem) { - accel = device_param->device_processors * i; + kernel_accel_new = device_processors * i; } } } - - lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", out_name, user_options->hash_mode, accel); - - hcfree (new_device_name); } + // fix tmto if user allows + + if (tmto == 0) + { + const u32 tmto_start = 1; + const u32 tmto_stop = 5; + + for (u32 tmto_new = tmto_start; tmto_new <= tmto_stop; tmto_new++) + { + if (available_mem > (kernel_accel_new * (size_per_accel >> tmto_new))) + { + tmto = tmto_new; + + break; + } + } + } + + char *new_device_name = hcstrdup (device_param->device_name); + + for (size_t i = 0; i < strlen (new_device_name); i++) + { + if (new_device_name[i] == ' ') new_device_name[i] = '_'; + } + + lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", new_device_name, user_options->hash_mode, kernel_accel_new); + + hcfree (new_device_name); + return lines_buf; } @@ -186,115 +227,11 @@ u64 module_extra_buffer_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 kernel_power_max = ((OPTS_TYPE & OPTS_TYPE_MP_MULTI_DISABLE) ? 1 : device_param->device_processors) * device_param->kernel_threads_max * device_param->kernel_accel_max; + const u64 size_per_accel = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); - u64 tmto_start = 0; - u64 tmto_stop = 4; + u64 size_scrypt = size_per_accel * device_param->kernel_accel_max; - if (user_options->scrypt_tmto_chgd == true) - { - tmto_start = user_options->scrypt_tmto; - tmto_stop = user_options->scrypt_tmto; - } - - // size_pws - - const u64 size_pws = kernel_power_max * sizeof (pw_t); - - const u64 size_pws_amp = size_pws; - - // size_pws_comp - - const u64 size_pws_comp = kernel_power_max * (sizeof (u32) * 64); - - // size_pws_idx - - const u64 size_pws_idx = (kernel_power_max + 1) * sizeof (pw_idx_t); - - // size_tmps - - const u64 size_tmps = kernel_power_max * hashconfig->tmp_size; - - // size_hooks - - const u64 size_hooks = kernel_power_max * hashconfig->hook_size; - - u64 size_pws_pre = 4; - u64 size_pws_base = 4; - - if (user_options->slow_candidates == true) - { - // size_pws_pre - - size_pws_pre = kernel_power_max * sizeof (pw_pre_t); - - // size_pws_base - - size_pws_base = kernel_power_max * sizeof (pw_pre_t); - } - - // sometimes device_available_mem and device_maxmem_alloc reported back from the opencl runtime are a bit inaccurate. - // let's add some extra space just to be sure. - // now depends on the kernel-accel value (where scrypt and similar benefits), but also hard minimum 64mb and maximum 1024mb limit - - u64 EXTRA_SPACE = (1024ULL * 1024ULL) * device_param->kernel_accel_max; - - EXTRA_SPACE = MAX (EXTRA_SPACE, ( 64ULL * 1024ULL * 1024ULL)); - EXTRA_SPACE = MIN (EXTRA_SPACE, (1024ULL * 1024ULL * 1024ULL)); - - const u64 scrypt_extra_space - = device_param->size_bfs - + device_param->size_combs - + device_param->size_digests - + device_param->size_esalts - + device_param->size_markov_css - + device_param->size_plains - + device_param->size_results - + device_param->size_root_css - + device_param->size_rules - + device_param->size_rules_c - + device_param->size_salts - + device_param->size_shown - + device_param->size_tm - + device_param->size_st_digests - + device_param->size_st_salts - + device_param->size_st_esalts - + size_pws - + size_pws_amp - + size_pws_comp - + size_pws_idx - + size_tmps - + size_hooks - + size_pws_pre - + size_pws_base - + EXTRA_SPACE; - - bool not_enough_memory = true; - - u64 size_scrypt = 0; - - u64 tmto; - - for (tmto = tmto_start; tmto <= tmto_stop; tmto++) - { - size_scrypt = (128ULL * scrypt_r) * scrypt_N; - - size_scrypt /= 1ull << tmto; - - size_scrypt *= kernel_power_max; - - if ((size_scrypt / 4) > device_param->device_maxmem_alloc) continue; - - if ((size_scrypt + scrypt_extra_space) > device_param->device_available_mem) continue; - - not_enough_memory = false; - - break; - } - - if (not_enough_memory == true) return -1; - - return size_scrypt; + return size_scrypt / (1 << tmto); } u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) @@ -557,7 +494,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_kernel_loops_max = module_kernel_loops_max; module_ctx->module_kernel_loops_min = module_kernel_loops_min; module_ctx->module_kernel_threads_max = module_kernel_threads_max; - module_ctx->module_kernel_threads_min = MODULE_DEFAULT; + module_ctx->module_kernel_threads_min = module_kernel_threads_min; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; module_ctx->module_opti_type = module_opti_type; diff --git a/src/tuningdb.c b/src/tuningdb.c index 406359ab4..1c5e6cb32 100644 --- a/src/tuningdb.c +++ b/src/tuningdb.c @@ -43,11 +43,6 @@ int sort_by_tuning_db_entry (const void *v1, const void *v2) if (res3 != 0) return (res3); - const int res4 = t1->source - - t2->source; - - if (res4 != 0) return (res4); - return 0; } @@ -118,7 +113,7 @@ int tuning_db_init (hashcat_ctx_t *hashcat_ctx) if (line_buf[0] == '#') continue; - tuning_db_process_line (hashcat_ctx, line_buf, line_num, 1); + tuning_db_process_line (hashcat_ctx, line_buf, line_num); } hcfree (buf); @@ -167,7 +162,7 @@ void tuning_db_destroy (hashcat_ctx_t *hashcat_ctx) memset (tuning_db, 0, sizeof (tuning_db_t)); } -bool tuning_db_process_line (hashcat_ctx_t *hashcat_ctx, const char *line_buf, const int line_num, const int source) +bool tuning_db_process_line (hashcat_ctx_t *hashcat_ctx, const char *line_buf, const int line_num) { tuning_db_t *tuning_db = hashcat_ctx->tuning_db; user_options_extra_t *user_options_extra = hashcat_ctx->user_options_extra; @@ -353,7 +348,6 @@ bool tuning_db_process_line (hashcat_ctx_t *hashcat_ctx, const char *line_buf, c entry->vector_width = vector_width; entry->kernel_accel = kernel_accel; entry->kernel_loops = kernel_loops; - entry->source = source; tuning_db->entry_cnt++; } @@ -430,12 +424,11 @@ static tuning_db_entry_t *tuning_db_search_real (hashcat_ctx_t *hashcat_ctx, con // this will produce all 2^3 combinations required - for (i = 0; i < 16; i++) + for (i = 0; i < 8; i++) { - s.source = (i & 1) ? 2 : 1; + s.device_name = (i & 1) ? "*" : device_name_nospace; s.attack_mode = (i & 2) ? -1 : attack_mode; s.hash_mode = (i & 4) ? -1 : hash_mode; - s.device_name = (i & 8) ? "*" : device_name_nospace; entry = (tuning_db_entry_t *) bsearch (&s, tuning_db->entry_buf, tuning_db->entry_cnt, sizeof (tuning_db_entry_t), sort_by_tuning_db_entry); @@ -443,7 +436,7 @@ static tuning_db_entry_t *tuning_db_search_real (hashcat_ctx_t *hashcat_ctx, con // in non-wildcard mode do some additional checks: - if ((i & 8) == 0) + if ((i & 1) == 0) { // in case we have an alias-name diff --git a/src/user_options.c b/src/user_options.c index 217e8d3f3..7dbe6567d 100644 --- a/src/user_options.c +++ b/src/user_options.c @@ -379,8 +379,8 @@ int user_options_getopt (hashcat_ctx_t *hashcat_ctx, int argc, char **argv) case IDX_INCREMENT_MAX: case IDX_HOOK_THREADS: case IDX_BACKEND_DEVICES_VIRTMULTI: - case IDX_BACKEND_DEVICES_VIRTHOST: - case IDX_BACKEND_DEVICES_KEEPFREE: + case IDX_BACKEND_DEVICES_VIRTHOST: + case IDX_BACKEND_DEVICES_KEEPFREE: case IDX_BENCHMARK_MAX: case IDX_BENCHMARK_MIN: #ifdef WITH_BRAIN @@ -816,14 +816,14 @@ int user_options_sanity (hashcat_ctx_t *hashcat_ctx) event_log_error (hashcat_ctx, "Invalid --backend-devices-virthost value specified."); return -1; - } + } if (user_options->backend_devices_keepfree > 100) { event_log_error (hashcat_ctx, "Invalid --backend-devices-keepfree value specified."); return -1; - } + } if (user_options->outfile_format == 0) { @@ -1895,6 +1895,14 @@ void user_options_preprocess (hashcat_ctx_t *hashcat_ctx) } #endif + if (user_options->hwmon == false) + { + // some algorithm, such as SCRYPT, depend on accurate free memory values + // the only way to get them is through low-level APIs such as nvml via hwmon + + user_options->hwmon = true; + } + if (user_options->stdout_flag) { user_options->hwmon = false; @@ -3325,8 +3333,8 @@ void user_options_logger (hashcat_ctx_t *hashcat_ctx) logfile_top_uint64 (user_options->skip); logfile_top_uint (user_options->attack_mode); logfile_top_uint (user_options->backend_devices_virtmulti); - logfile_top_uint (user_options->backend_devices_virthost); - logfile_top_uint (user_options->backend_devices_keepfree); + logfile_top_uint (user_options->backend_devices_virthost); + logfile_top_uint (user_options->backend_devices_keepfree); logfile_top_uint (user_options->benchmark); logfile_top_uint (user_options->benchmark_all); logfile_top_uint (user_options->benchmark_max); diff --git a/tunings/Module_08900.hctune b/tunings/Module_08900.hctune index ecaa0e353..46df052b5 100644 --- a/tunings/Module_08900.hctune +++ b/tunings/Module_08900.hctune @@ -24,4 +24,3 @@ # It's better to derive the tuning based on the hash information (handled by the hash-mode plugin). # The tunings from the hash-mode plugin may be slightly off, so if you have better values, you can hardcode them here. - diff --git a/tunings/Module_09300.hctune b/tunings/Module_09300.hctune index 3277390ab..d98505795 100644 --- a/tunings/Module_09300.hctune +++ b/tunings/Module_09300.hctune @@ -19,7 +19,3 @@ #Device Attack Hash Vector Kernel Kernel #Name Mode Type Width Accel Loops -GeForce_RTX_4090 * 9300 1 512 A -ALIAS_AMD_RX6900XT * 9300 1 720 A -ALIAS_AMD_RX7900XTX * 9300 1 840 A - diff --git a/tunings/Module_15700.hctune b/tunings/Module_15700.hctune index c19ae375e..a44bd5a9c 100644 --- a/tunings/Module_15700.hctune +++ b/tunings/Module_15700.hctune @@ -19,7 +19,3 @@ #Device Attack Hash Vector Kernel Kernel #Name Mode Type Width Accel Loops -GeForce_RTX_4090 * 15700 1 180 A -ALIAS_AMD_RX6900XT * 15700 1 56 A -ALIAS_AMD_RX7900XTX * 15700 1 92 A - diff --git a/tunings/Module_22700.hctune b/tunings/Module_22700.hctune index be4cd8a4a..c08bd7a51 100644 --- a/tunings/Module_22700.hctune +++ b/tunings/Module_22700.hctune @@ -19,7 +19,14 @@ #Device Attack Hash Vector Kernel Kernel #Name Mode Type Width Accel Loops -GeForce_RTX_4090 * 22700 1 180 A -ALIAS_AMD_RX6900XT * 22700 1 56 A -ALIAS_AMD_RX7900XTX * 22700 1 92 A +#Leaving this here as a reference +#GeForce_GTX_980 * 22700 1 28 A +#GeForce_GTX_1630 * 22700 1 11 A +#GeForce_RTX_2080_Ti * 22700 1 78 A +#GeForce_RTX_3090 * 22700 1 82 A +#GeForce_RTX_4090 * 22700 1 180 A +#ALIAS_AMD_RX480 * 22700 1 28 A +#ALIAS_AMD_Vega64 * 22700 1 28 A +#ALIAS_AMD_RX6900XT * 22700 1 56 A +#ALIAS_AMD_RX7900XTX * 22700 1 92 A diff --git a/tunings/Module_24000.hctune b/tunings/Module_24000.hctune index 71f61fe67..52e4b78bb 100644 --- a/tunings/Module_24000.hctune +++ b/tunings/Module_24000.hctune @@ -19,7 +19,3 @@ #Device Attack Hash Vector Kernel Kernel #Name Mode Type Width Accel Loops -GeForce_RTX_4090 * 24000 1 180 A -ALIAS_AMD_RX6900XT * 24000 1 56 A -ALIAS_AMD_RX7900XTX * 24000 1 92 A - diff --git a/tunings/Module_27700.hctune b/tunings/Module_27700.hctune index 32b5253b4..095c829f6 100644 --- a/tunings/Module_27700.hctune +++ b/tunings/Module_27700.hctune @@ -19,7 +19,3 @@ #Device Attack Hash Vector Kernel Kernel #Name Mode Type Width Accel Loops -GeForce_RTX_4090 * 27700 1 180 A -ALIAS_AMD_RX6900XT * 27700 1 56 A -ALIAS_AMD_RX7900XTX * 27700 1 92 A - diff --git a/tunings/Module_28200.hctune b/tunings/Module_28200.hctune index 50a09b89c..2759beb00 100644 --- a/tunings/Module_28200.hctune +++ b/tunings/Module_28200.hctune @@ -19,7 +19,3 @@ #Device Attack Hash Vector Kernel Kernel #Name Mode Type Width Accel Loops -GeForce_RTX_4090 * 28200 1 180 A -ALIAS_AMD_RX6900XT * 28200 1 56 A -ALIAS_AMD_RX7900XTX * 28200 1 92 A - diff --git a/tunings/Module_29800.hctune b/tunings/Module_29800.hctune index 31bea6286..ce9ebd31d 100644 --- a/tunings/Module_29800.hctune +++ b/tunings/Module_29800.hctune @@ -18,8 +18,3 @@ #Device Attack Hash Vector Kernel Kernel #Name Mode Type Width Accel Loops - -GeForce_RTX_4090 * 29800 1 180 A -ALIAS_AMD_RX6900XT * 29800 1 56 A -ALIAS_AMD_RX7900XTX * 29800 1 92 A - From ffa3626c60efff302a59cd74f627628a33584f43 Mon Sep 17 00:00:00 2001 From: Banaanhangwagen Date: Mon, 9 Jun 2025 16:26:13 +0200 Subject: [PATCH 52/95] Create cachedata2hashcat.py --- tools/cachedata2hashcat.py | 112 +++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 tools/cachedata2hashcat.py diff --git a/tools/cachedata2hashcat.py b/tools/cachedata2hashcat.py new file mode 100644 index 000000000..4ec57b6b1 --- /dev/null +++ b/tools/cachedata2hashcat.py @@ -0,0 +1,112 @@ +#!/usr/bin/env python3 +# +# Script to extract the hash from a CacheData-file. +#--MicrosoftAccount +### C:\Windows\system32\config\systemprofile\AppData\local\microsoft\windows\CloudAPCache\MicrosoftAccount\\Cache\CacheData +#--AzureAD +### C:\Windows\system32\config\systemprofile\AppData\local\microsoft\windows\CloudAPCache\AzureAD\\Cache\CacheData +# +# This code is build from scratch. Nonetheless, all the initial reverse engineering work has been done +# by https://github.com/tijldeneut and https://github.com/synacktiv +# +# Authors: +# https://github.com/Banaanhangwagen +# https://github.com/Ctrl-Shift-Defeat +# +# v2025-5: initial release +# +# License: MIT +# + +import sys +import struct + +def read_node_info(file, node_count, start_address): + """Extracts node info from the binary file.""" + node_info = [] + node_size = 20 + node_type_counts = {} + for i in range(node_count): + node_start = start_address + i * node_size + node = file[node_start:node_start + node_size] + node_type = node[0] + node_type_counts[node_type] = node_type_counts.get(node_type, 0) + 1 + crypto_blob_size = struct.unpack('111}") + hashes_found += 1 + else: + # Skip the other nodes properly + start_address += crypto_blob_size + encrypted_part_size + 8 + + return hashes_found + + +def print_banner(): + print("╔══════════════════════════════╗") + print("║ Cachedata2hashcat ║") + print("╚══════════════════════════════╝") + + +def main(): + if len(sys.argv) != 2: + print(f"Usage: {sys.argv[0]} path_to_CacheData") + sys.exit(1) + try: + with open(sys.argv[1], 'rb') as f: + file = f.read() + except IOError as e: + print(f"Error opening file: {e}") + sys.exit(1) + + print_banner() + + # Extract version + version = struct.unpack('5}") + if version != 2: + print("\033[91m[!]\033[0m Unsupported version. Be careful when proceeding.") + + # Extract node count + node_count = struct.unpack('14}") + if node_count == 0: + print("\033[91m[!]\033[0m No nodes found. Cannot proceed.") + sys.exit(1) + + node_info, node_type_counts = read_node_info(file, node_count, 0x54) + + type1_count = node_type_counts.get(1, 0) + print(f"\033[92m[+]\033[0m Type 1-nodes: {type1_count:>15}") + if type1_count == 0: + print("\033[91m[!] Warning: No hash-containing nodes (Type 1) found.\033[0m") + + hashes_found = extract_hashes(file, node_info, 0x54 + node_count * 20) + + if hashes_found == 0: + print(f"\033[91m[!]\033[0m No valid hashes found in the file.\033[0m") + else: + print(f"\033[92m[+]\033[0m Successfully extracted {hashes_found} hash(es).") + + +if __name__ == "__main__": + main() From 2485c1fcb585dcfb5635238fecdd40ef9bbbfe5d Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Tue, 10 Jun 2025 00:35:35 +0200 Subject: [PATCH 53/95] Module 33700: limit data len to 32 bytes, based on the extraction tool --- OpenCL/m33700-pure.cl | 14 ++++---------- src/modules/module_33700.c | 18 ++++++++++-------- tools/test_modules/m33700.pm | 2 +- 3 files changed, 15 insertions(+), 19 deletions(-) diff --git a/OpenCL/m33700-pure.cl b/OpenCL/m33700-pure.cl index 8540d6d69..c82ed5c57 100644 --- a/OpenCL/m33700-pure.cl +++ b/OpenCL/m33700-pure.cl @@ -28,7 +28,7 @@ typedef struct pkcs_sha256_tmp typedef struct pkcs { - u32 data_buf[60]; + u32 data_buf[8]; int data_len; } pkcs_t; @@ -360,10 +360,6 @@ KERNEL_FQ void m33700_comp (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) ukey[6] = tmps[gid].out[6]; ukey[7] = tmps[gid].out[7]; - //const int data_len = esalt_bufs[DIGESTS_OFFSET_HOST].data_len; - - u32 iv[4] = { 0 }; - // decrypt first block u32 enc[4]; @@ -380,15 +376,13 @@ KERNEL_FQ void m33700_comp (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) aes256_decrypt (ks, enc, dec, s_td0, s_td1, s_td2, s_td3, s_td4); - dec[0] ^= iv[0]; - dec[0] = hc_swap32_S (dec[0]); + dec[0] ^= 0x00000000; if (dec[0] != 0x00000000) return; - dec[1] ^= iv[1]; - dec[1] = hc_swap32_S (dec[1]); + dec[1] ^= 0x00000000; - if (dec[1] != 0x01000000) return; + if (dec[1] != 0x00000001) return; if (hc_atomic_inc (&hashes_shown[DIGESTS_OFFSET_HOST]) == 0) { diff --git a/src/modules/module_33700.c b/src/modules/module_33700.c index 75904bf68..71eddf09f 100644 --- a/src/modules/module_33700.c +++ b/src/modules/module_33700.c @@ -26,7 +26,7 @@ static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_UTF16LE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; -static const char *ST_HASH = "$MSONLINEACCOUNT$0$10000$91869d1d5d3a1df25dd3f0e57bbc226aaae0b6e3a61991083f314886b26c7477c4c6bfb99e48cb0eed6d76d9a59c2e8462c308fd681fd5ac591500b7f6b3c9eec87c1c2f8f563cc0cd24f411f44d5cc74e44b6b12d5f31c9f5c6818b6472bb37116d2584f6938f8b797fdd71449d844e10277e8d2f1eb5a57d6abc9ccf0b681ca463a0f18080a464cbfd859f955c67a9f06427638893d6331f5e529e0e59f4b6e1a775a93a9df5573010886265786ce8c6dfa65a0e9de99f9fdbfa5ff9668534fccc419c9f99c9853e04d4455130712486c643b5aca11a9aba85be271deef6bad064936bb86a96303fc430f31ed5b172"; +static const char *ST_HASH = "$MSONLINEACCOUNT$0$10000$91869d1d5d3a1df25dd3f0e57bbc226a43641bc03086dcb5b6672941fcabce01"; u32 module_attack_exec (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ATTACK_EXEC; } u32 module_dgst_pos0 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS0; } @@ -55,7 +55,7 @@ typedef struct pkcs_sha256_tmp typedef struct pkcs { - u32 data_buf[60]; + u32 data_buf[8]; int data_len; } pkcs_t; @@ -107,7 +107,7 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE | TOKEN_ATTR_VERIFY_DIGIT; token.sep[3] = '$'; - token.len[3] = 480; + token.len[3] = 64; token.attr[3] = TOKEN_ATTR_FIXED_LENGTH | TOKEN_ATTR_VERIFY_HEX; @@ -136,7 +136,7 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE pkcs->data_len = hex_decode (data_pos, data_len, (u8 *) pkcs->data_buf); - // hash + // fake digest digest[0] = pkcs->data_buf[0]; digest[1] = pkcs->data_buf[1]; @@ -145,10 +145,12 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE // set fake salt - salt->salt_buf[0] = digest[0]; - salt->salt_buf[1] = digest[1]; - salt->salt_buf[2] = digest[2]; - salt->salt_buf[3] = digest[3]; + salt->salt_buf[0] = pkcs->data_buf[0]; + salt->salt_buf[1] = pkcs->data_buf[1]; + salt->salt_buf[2] = pkcs->data_buf[2]; + salt->salt_buf[3] = pkcs->data_buf[3]; + + salt->salt_len = 16; return (PARSER_OK); } diff --git a/tools/test_modules/m33700.pm b/tools/test_modules/m33700.pm index 9355afb50..dab6da2fb 100644 --- a/tools/test_modules/m33700.pm +++ b/tools/test_modules/m33700.pm @@ -73,7 +73,7 @@ sub module_generate_hash } else { - $data_bin = pack ("H*", "0000000001000000000000006000000060000000000000002000000040000000d43b8a0960a5654d8b9b31562f8be8b60efac1c060d2c74ee14db2b9328daac71e21bff7f1888a56e087f0bc861ced541ccf651d0fd7bcddbd9dd360ebfa36e810e461f6e4066171944c20d0cf0971f27b2256657273696f6e223a332c202255736572496e666f223a7b2256657273696f6e223a322c2022556e697175654964223a2238633466343238362d653262342d346264652d393330642d343537346361386230363566222c20225072696d617279536964223a22532d312d31322d31"); + $data_bin = pack ("H*", "000000000100000000000000600000006000000000000000200000004000"); } my $aes = Crypt::CBC->new ({ From 6aeb188b48e08416f60ee2ef04425324e34ed8e5 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Tue, 10 Jun 2025 12:54:15 +0200 Subject: [PATCH 54/95] - Handle case where system does not offer any reliable method to query actual free memory - Change package script source folder from $HOME/hashcat to . - Revisited Apple OpenCL 2GiB Bug (still present) --- src/backend.c | 29 +++++++++++++++++++++++------ src/user_options.c | 2 +- tools/package_bin.sh | 2 +- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/backend.c b/src/backend.c index 80d1bfd60..5bf1d3c98 100644 --- a/src/backend.c +++ b/src/backend.c @@ -6914,10 +6914,6 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) device_param->device_maxmem_alloc /= 2; } - // note we'll limit to 2gb, otherwise this causes all kinds of weird errors because of possible integer overflows in opencl runtimes - // testwise disabling that - //device_param->device_maxmem_alloc = MIN (device_maxmem_alloc, 0x7fffffff); - // max_work_group_size size_t device_maxworkgroup_size = 0; @@ -8457,6 +8453,9 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) // typically runs into trap 6 // maybe 32/64 bit problem affecting size_t? // this seems to affect global memory as well no just single allocations + // this is really ugly, and still in place 2025/06/09 + // Version.: OpenCL 1.2 (Apr 18 2025 21:45:30) + // Driver.Version.: 1.2 (Apr 22 2025 20:11:41) if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->is_metal == false)) { @@ -9659,7 +9658,7 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) if (used_bytes) { - if ((used_bytes > (2ULL * 1024 * 1024 * 1024)) + if ((used_bytes > (3ULL * 1024 * 1024 * 1024)) || (used_bytes > (device_param->device_global_mem * 0.5))) { event_log_warning (hashcat_ctx, "* Device #%u: Memory usage is too high: %" PRIu64 "/%" PRIu64 ", waiting...", device_id + 1, used_bytes, device_param->device_global_mem); @@ -9675,6 +9674,21 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) } else { + if (user_options->backend_devices_keepfree == 0) + { + const u64 device_available_mem_sav = device_param->device_available_mem; + + const u64 device_available_mem_new = device_available_mem_sav - (device_available_mem_sav * 0.2); + + event_log_warning (hashcat_ctx, "* Device #%u: This system does not offer any reliable method to query actual free memory. Estimated base: %" PRIu64, device_id + 1, device_available_mem_sav); + event_log_warning (hashcat_ctx, " Assuming normal desktop activity, reducing estimate by 20%%: %" PRIu64, device_available_mem_new); + event_log_warning (hashcat_ctx, " This can hurt performance drastically, especially on memory-heavy algorithms."); + event_log_warning (hashcat_ctx, " You can adjust this percentage using --backend-devices-keepfree"); + event_log_warning (hashcat_ctx, NULL); + + device_param->device_available_mem = device_available_mem_new; + } + break; } } @@ -15658,6 +15672,9 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) // work around, for some reason apple opencl can't have buffers larger 2^31 // typically runs into trap 6 // maybe 32/64 bit problem affecting size_t? + // this is really ugly, and still in place 2025/06/09 + // Version.: OpenCL 1.2 (Apr 18 2025 21:45:30) + // Driver.Version.: 1.2 (Apr 22 2025 20:11:41) if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->is_metal == false)) { @@ -15680,7 +15697,7 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) if (size_rules > undocumented_single_allocation_apple) memory_limit_hit = 1; if (size_rules_c > undocumented_single_allocation_apple) memory_limit_hit = 1; if (size_salts > undocumented_single_allocation_apple) memory_limit_hit = 1; - if (size_extra_buffer > undocumented_single_allocation_apple) memory_limit_hit = 1; + if ((size_extra_buffer / 4) > undocumented_single_allocation_apple) memory_limit_hit = 1; if (size_shown > undocumented_single_allocation_apple) memory_limit_hit = 1; if (size_tm > undocumented_single_allocation_apple) memory_limit_hit = 1; if (size_tmps > undocumented_single_allocation_apple) memory_limit_hit = 1; diff --git a/src/user_options.c b/src/user_options.c index 7dbe6567d..5de443725 100644 --- a/src/user_options.c +++ b/src/user_options.c @@ -2216,7 +2216,7 @@ void user_options_info (hashcat_ctx_t *hashcat_ctx) if (user_options->backend_devices_virthost) { - event_log_info (hashcat_ctx, "* --backend-devices-virthost%u", user_options->backend_devices_virthost); + event_log_info (hashcat_ctx, "* --backend-devices-virthost=%u", user_options->backend_devices_virthost); } if (user_options->opencl_device_types) diff --git a/tools/package_bin.sh b/tools/package_bin.sh index 832ef1615..b110a8bea 100755 --- a/tools/package_bin.sh +++ b/tools/package_bin.sh @@ -5,7 +5,7 @@ ## License.....: MIT ## -export IN=$HOME/hashcat +export IN=. export OUT=$HOME/xy/hashcat-6.2.6 rm -rf $OUT From ef8223b17a3a235717e4cf382c01fc18e706ff97 Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Tue, 10 Jun 2025 21:49:21 +0200 Subject: [PATCH 55/95] Alias Devices: Prevents hashcat, when started with x86_64 emulation on Apple Silicon, from showing the Apple M1 OpenCL CPU as an alias for the Apple M1 Metal GPU --- docs/changes.txt | 1 + src/backend.c | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/docs/changes.txt b/docs/changes.txt index 63ef1844f..95f630a97 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -117,6 +117,7 @@ ## - AMD Driver: Updated requirements for AMD Windows drivers to "AMD Adrenalin Edition" (23.7.2 or later) and "AMD HIP SDK" (23.Q3 or later) +- Alias Devices: Prevents hashcat, when started with x86_64 emulation on Apple Silicon, from showing the Apple M1 OpenCL CPU as an alias for the Apple M1 Metal GPU - Apple Driver: Automatically enable GPU support on Apple OpenCL instead of CPU support - Apple Driver: Updated requirements to use Apple OpenCL API to macOS 13.0 - use - Backend Checks: Describe workaround in error message when detecting more than 64 backend devices diff --git a/src/backend.c b/src/backend.c index 5bf1d3c98..ec58ac8a8 100644 --- a/src/backend.c +++ b/src/backend.c @@ -70,6 +70,15 @@ static bool is_same_device (const hc_device_param_t *src, const hc_device_param_ // Metal can't have aliases if ((src->is_metal == true) && (dst->is_metal == true)) return false; + + // But Metal and OpenCL can have aliases + + if ((src->is_metal == true) && (dst->is_opencl == true)) + { + // Prevents hashcat, when started with x86_64 emulation on Apple Silicon, from showing the Apple M1 OpenCL CPU as an alias for the Apple M1 Metal GPU + + if (src->opencl_device_type != dst->opencl_device_type) return false; + } #endif // But OpenCL can have aliases From 1096d961a18de9865a5641f77291329243a77cfc Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Tue, 10 Jun 2025 23:19:12 +0200 Subject: [PATCH 56/95] Backend: Updated filename chksum format to prevent invalid cache on Apple Silicon when switching arch --- docs/changes.txt | 1 + include/shared.h | 2 ++ src/backend.c | 8 +++++--- src/shared.c | 37 +++++++++++++++++++++++++++++++++++++ 4 files changed, 45 insertions(+), 3 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index 63ef1844f..4b3b15b72 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -119,6 +119,7 @@ - AMD Driver: Updated requirements for AMD Windows drivers to "AMD Adrenalin Edition" (23.7.2 or later) and "AMD HIP SDK" (23.Q3 or later) - Apple Driver: Automatically enable GPU support on Apple OpenCL instead of CPU support - Apple Driver: Updated requirements to use Apple OpenCL API to macOS 13.0 - use +- Backend: Updated filename chksum format to prevent invalid cache on Apple Silicon when switching arch - Backend Checks: Describe workaround in error message when detecting more than 64 backend devices - Brain: Added sanity check and corresponding error message for invalid --brain-port values - Dependencies: Added sse2neon v1.8.0 (commit 658eeac) diff --git a/include/shared.h b/include/shared.h index 5dd482d34..bcc98e5d9 100644 --- a/include/shared.h +++ b/include/shared.h @@ -106,6 +106,8 @@ int input_tokenizer (const u8 *input_buf, const int input_len, hc_token_t *token int extract_dynamicx_hash (const u8 *input_buf, const int input_len, u8 **output_buf, int *output_len); +int get_current_arch(); + #if defined (__APPLE__) bool is_apple_silicon (void); #endif diff --git a/src/backend.c b/src/backend.c index 5bf1d3c98..e7f4733b3 100644 --- a/src/backend.c +++ b/src/backend.c @@ -10528,7 +10528,7 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) char device_name_chksum_amp_mp[HCBUFSIZ_TINY] = { 0 }; - const size_t dnclen_amp_mp = snprintf (device_name_chksum_amp_mp, HCBUFSIZ_TINY, "%d-%d-%d-%u-%d-%u-%s-%s-%s-%u", + const size_t dnclen_amp_mp = snprintf (device_name_chksum_amp_mp, HCBUFSIZ_TINY, "%d-%d-%d-%u-%d-%u-%s-%s-%s-%u-%u", backend_ctx->comptime, backend_ctx->cuda_driver_version, backend_ctx->hip_runtimeVersion, @@ -10538,7 +10538,8 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) device_param->device_name, device_param->opencl_device_version, device_param->opencl_driver_version, - (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : device_param->kernel_threads_max); + (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : device_param->kernel_threads_max, + get_current_arch()); md5_ctx_t md5_ctx; @@ -11090,7 +11091,7 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) const u32 extra_value = (user_options->attack_mode == ATTACK_MODE_ASSOCIATION) ? ATTACK_MODE_ASSOCIATION : ATTACK_MODE_NONE; - const size_t dnclen = snprintf (device_name_chksum, HCBUFSIZ_TINY, "%d-%d-%d-%u-%d-%u-%s-%s-%s-%d-%u-%u-%u-%s", + const size_t dnclen = snprintf (device_name_chksum, HCBUFSIZ_TINY, "%d-%d-%d-%u-%d-%u-%s-%s-%s-%d-%u-%u-%u-%u-%s", backend_ctx->comptime, backend_ctx->cuda_driver_version, backend_ctx->hip_runtimeVersion, @@ -11104,6 +11105,7 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) hashconfig->kern_type, extra_value, (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : device_param->kernel_threads_max, + get_current_arch(), build_options_module_buf); memset (&md5_ctx, 0, sizeof (md5_ctx_t)); diff --git a/src/shared.c b/src/shared.c index 38255b6f3..47645d655 100644 --- a/src/shared.c +++ b/src/shared.c @@ -23,6 +23,11 @@ #include #endif +#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__MSYS__) +#else +#include +#endif + static const char *const PA_000 = "OK"; static const char *const PA_001 = "Ignored due to comment"; static const char *const PA_002 = "Ignored due to zero length"; @@ -1455,6 +1460,38 @@ int generic_salt_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, const u8 * return tmp_len; } +int get_current_arch() +{ + #if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__MSYS__) + + SYSTEM_INFO sysinfo; + + GetNativeSystemInfo(&sysinfo); + + switch (sysinfo.wProcessorArchitecture) + { + case PROCESSOR_ARCHITECTURE_AMD64: return 1; + case PROCESSOR_ARCHITECTURE_INTEL: return 2; + case PROCESSOR_ARCHITECTURE_ARM64: return 3; + case PROCESSOR_ARCHITECTURE_ARM: return 4; + default: return 0; + } + + #else + + struct utsname uts; + + if (uname(&uts) != 0) return 0; // same as default, it doesn't matter if it fails here + + if (strstr(uts.machine, "x86_64")) return 1; + else if (strstr(uts.machine, "i386") || strstr(uts.machine, "i686")) return 2; + else if (strstr(uts.machine, "aarch64") || strstr(uts.machine, "arm64")) return 3; + else if (strstr(uts.machine, "arm")) return 4; + else return 0; + + #endif +} + #if defined (__APPLE__) bool is_apple_silicon (void) From 30ac079caf97b81c61952d04bc09782bec4c95b9 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Wed, 11 Jun 2025 11:15:44 +0200 Subject: [PATCH 57/95] Use total memory as base if low-level free memory API is available. Prefix device name in tuning-db with device ID to avoid collisions between identically named devices. Fix Python bridge Makefile to handle missing python3-config helper. --- src/backend.c | 40 ++++++++-- src/bridges/bridge_python_generic_hash_mp.mk | 59 ++++++++++++++- src/bridges/bridge_python_generic_hash_sp.mk | 77 +++++++++++++++----- 3 files changed, 146 insertions(+), 30 deletions(-) diff --git a/src/backend.c b/src/backend.c index a8f475fc4..d524a4c6b 100644 --- a/src/backend.c +++ b/src/backend.c @@ -9677,7 +9677,7 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) continue; } - device_param->device_available_mem -= used_bytes; + device_param->device_available_mem = device_param->device_global_mem - used_bytes; break; } @@ -9730,7 +9730,13 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) if (next[0] == '#') continue; - tuning_db_process_line (hashcat_ctx, next, line_num); + char *search_name = NULL; + + hc_asprintf (&search_name, "MODULE_%02d_%s", device_param->device_id, next); + + tuning_db_process_line (hashcat_ctx, search_name, line_num); + + hcfree (search_name); } while ((next = strtok_r ((char *) NULL, "\n", &saveptr)) != NULL); @@ -9891,13 +9897,31 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) tuning_db_entry_t *tuningdb_entry = NULL; - if (user_options->slow_candidates == true) + for (int i = 0; i < 2; i++) { - tuningdb_entry = tuning_db_search (hashcat_ctx, device_param->device_name, device_param->opencl_device_type, 0, hashconfig->hash_mode); - } - else - { - tuningdb_entry = tuning_db_search (hashcat_ctx, device_param->device_name, device_param->opencl_device_type, user_options->attack_mode, hashconfig->hash_mode); + char *search_name = NULL; + + if (i == 0) + { + hc_asprintf (&search_name, "MODULE_%02d_%s", device_param->device_id, device_param->device_name); + } + else + { + search_name = device_param->device_name; + } + + if (user_options->slow_candidates == true) + { + tuningdb_entry = tuning_db_search (hashcat_ctx, search_name, device_param->opencl_device_type, 0, hashconfig->hash_mode); + } + else + { + tuningdb_entry = tuning_db_search (hashcat_ctx, search_name, device_param->opencl_device_type, user_options->attack_mode, hashconfig->hash_mode); + } + + if (i == 0) hcfree (search_name); + + if (tuningdb_entry != NULL) break; } // user commandline option override tuning db diff --git a/src/bridges/bridge_python_generic_hash_mp.mk b/src/bridges/bridge_python_generic_hash_mp.mk index 6f72a208d..2903553a3 100644 --- a/src/bridges/bridge_python_generic_hash_mp.mk +++ b/src/bridges/bridge_python_generic_hash_mp.mk @@ -1,7 +1,39 @@ +REPORT_MISSING_SO := false +REPORT_MISSING_DLL := false -PYTHON_CFLAGS := `python3-config --includes` -# See BUILD_WSL.md how to prepare $(WIN_PYTHON) +ifeq ($(BRIDGE_SUFFIX),so) +ifeq ($(REPORT_MISSING_SO),false) +PYTHON_CONFIG := $(shell command -v python3-config 2>/dev/null) +ifeq ($(PYTHON_CONFIG),) + REPORT_MISSING_SO := true +endif +endif +ifeq ($(REPORT_MISSING_SO),false) +PYTHON_CFLAGS := $(shell python3-config --includes 2>/dev/null) +ifeq ($(strip $(PYTHON_CFLAGS)),) + REPORT_MISSING_SO := true +endif +endif +endif + +CHECK_DLL := false + +ifeq ($(BRIDGE_SUFFIX),dll) + CHECK_DLL := true +endif +ifeq ($(BUILD_MODE),cross) + CHECK_DLL := true +endif + +ifeq ($(CHECK_DLL),true) +ifeq ($(REPORT_MISSING_DLL),false) +PYTHON_CONFIG := $(shell ls $(WIN_PYTHON)/mingw64/include/python3.12/ 2>/dev/null) +ifeq ($(PYTHON_CONFIG),) + REPORT_MISSING_DLL := true +endif +endif PYTHON_CFLAGS_WIN := -I$(WIN_PYTHON)/mingw64/include/python3.12/ +endif ifeq ($(BUILD_MODE),cross) bridges/bridge_python_generic_hash_mp.so: src/bridges/bridge_python_generic_hash_mp.c src/cpu_features.c obj/combined.LINUX.a @@ -17,3 +49,26 @@ bridges/bridge_python_generic_hash_mp.$(BRIDGE_SUFFIX): src/bridges/bridge_pytho $(CC) $(CCFLAGS) $(CFLAGS_NATIVE) $^ -o $@ $(LFLAGS_NATIVE) -shared -fPIC -D BRIDGE_INTERFACE_VERSION_CURRENT=$(BRIDGE_INTERFACE_VERSION) $(PYTHON_CFLAGS) endif endif + +RED = \033[1;31m +RESET = \033[0m + +ifeq ($(REPORT_MISSING_DLL),true) +bridges/bridge_python_generic_hash_mp.dll: + @echo "" + @echo "$(RED)WARNING$(RESET): Skipping regular plugin 70300: Python Windows headers not found." + @echo " To use -m 70300, you must install the required Python headers." + @echo " Otherwise, you can safely ignore this warning." + @echo " See BUILD_WSL.md how to prepare $(WIN_PYTHON)." + @echo "" +endif + +ifeq ($(REPORT_MISSING_SO),true) +bridges/bridge_python_generic_hash_mp.so: + @echo "" + @echo "$(RED)WARNING$(RESET): Skipping regular plugin 70300: Python headers not found." + @echo " To use -m 70300, you must install the required Python headers." + @echo " Otherwise, you can safely ignore this warning." + @echo " For more information, see 'docs/hashcat-python-plugin-requirements.md'." + @echo "" +endif diff --git a/src/bridges/bridge_python_generic_hash_sp.mk b/src/bridges/bridge_python_generic_hash_sp.mk index 8438fe7cf..cbef434cb 100644 --- a/src/bridges/bridge_python_generic_hash_sp.mk +++ b/src/bridges/bridge_python_generic_hash_sp.mk @@ -1,7 +1,51 @@ +REPORT_MISSING_SO := false +REPORT_MISSING_DLL := false -PYTHON_CFLAGS := `python3-config --includes` -# See BUILD_WSL.md how to prepare $(WIN_PYTHON) +ifeq ($(BRIDGE_SUFFIX),so) +ifeq ($(REPORT_MISSING_SO),false) +PYTHON_CONFIG := $(shell command -v python3-config 2>/dev/null) +ifeq ($(PYTHON_CONFIG),) + REPORT_MISSING_SO := true +endif +endif +ifeq ($(REPORT_MISSING_SO),false) +PYTHON_CFLAGS := $(shell python3-config --includes 2>/dev/null) +ifeq ($(strip $(PYTHON_CFLAGS)),) + REPORT_MISSING_SO := true +endif +endif +ifeq ($(REPORT_MISSING_SO),false) +PYTHON_INCLUDE_PATH := $(shell echo "$(PYTHON_CFLAGS)" | sed -n 's/-I\([^ ]*\).*/\1/p') +ifeq ($(PYTHON_INCLUDE_PATH),) + REPORT_MISSING_SO := true +endif +endif +ifeq ($(REPORT_MISSING_SO),false) +PYTHON_HAS_OWN_GIL := $(shell grep -r -q 'PyInterpreterConfig_OWN_GIL' "$(PYTHON_INCLUDE_PATH)" && echo true || echo false) +ifeq ($(PYTHON_HAS_OWN_GIL),false) + REPORT_MISSING_SO := true +endif +endif +endif + +CHECK_DLL := false + +ifeq ($(BRIDGE_SUFFIX),dll) + CHECK_DLL := true +endif +ifeq ($(BUILD_MODE),cross) + CHECK_DLL := true +endif + +ifeq ($(CHECK_DLL),true) +ifeq ($(REPORT_MISSING_DLL),false) +PYTHON_CONFIG := $(shell ls $(WIN_PYTHON)/mingw64/include/python3.12/ 2>/dev/null) +ifeq ($(PYTHON_CONFIG),) + REPORT_MISSING_DLL := true +endif +endif PYTHON_CFLAGS_WIN := -I$(WIN_PYTHON)/mingw64/include/python3.12/ +endif ifeq ($(BUILD_MODE),cross) bridges/bridge_python_generic_hash_sp.so: src/bridges/bridge_python_generic_hash_sp.c src/cpu_features.c obj/combined.LINUX.a @@ -18,25 +62,20 @@ bridges/bridge_python_generic_hash_sp.$(BRIDGE_SUFFIX): src/bridges/bridge_pytho endif endif -ifeq ($(BRIDGE_SUFFIX),so) - -PYTHON_INCLUDE_PATH := $(shell echo "$(PYTHON_CFLAGS)" | sed -n 's/-I\([^ ]*\).*/\1/p') -PYTHON_HAS_OWN_GIL := $(shell grep -r -q 'PyInterpreterConfig_OWN_GIL' "$(PYTHON_INCLUDE_PATH)" && echo true || echo false) - -REPORTS_MISSING := false - -ifeq ($(PYTHON_INCLUDE_PATH),) - REPORTS_MISSING := true -endif - -ifeq ($(PYTHON_HAS_OWN_GIL),false) - REPORTS_MISSING := true -endif - RED = \033[1;31m RESET = \033[0m -ifeq ($(REPORTS_MISSING),true) +ifeq ($(REPORT_MISSING_DLL),true) +bridges/bridge_python_generic_hash_sp.dll: + @echo "" + @echo "$(RED)WARNING$(RESET): Skipping freethreaded plugin 70200: Python Windows headers not found." + @echo " To use -m 70200, you must install the required Python headers." + @echo " Otherwise, you can safely ignore this warning." + @echo " See BUILD_WSL.md how to prepare $(WIN_PYTHON)." + @echo "" +endif + +ifeq ($(REPORT_MISSING_SO),true) bridges/bridge_python_generic_hash_sp.so: @echo "" @echo "$(RED)WARNING$(RESET): Skipping freethreaded plugin 70200: Python 3.12+ headers not found." @@ -45,5 +84,3 @@ bridges/bridge_python_generic_hash_sp.so: @echo " For more information, see 'docs/hashcat-python-plugin-requirements.md'." @echo "" endif - -endif From 4e0a728f8fbe614aedb35171a95612842751b0de Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Thu, 12 Jun 2025 09:17:02 +0200 Subject: [PATCH 58/95] Add HC_ATTR_SEQ as a workaround, since HIP no longer supports compiler option --gpu-max-threads-per-block --- OpenCL/amp_a0.cl | 2 +- OpenCL/amp_a1.cl | 2 +- OpenCL/amp_a3.cl | 2 +- OpenCL/inc_vendor.h | 15 +++++++++++++++ OpenCL/m00000_a0-optimized.cl | 12 ++++++------ OpenCL/m00000_a0-pure.cl | 4 ++-- OpenCL/m00000_a1-optimized.cl | 12 ++++++------ OpenCL/m00000_a1-pure.cl | 4 ++-- OpenCL/m00000_a3-optimized.cl | 12 ++++++------ OpenCL/m00000_a3-pure.cl | 4 ++-- OpenCL/m00010_a0-optimized.cl | 12 ++++++------ OpenCL/m00010_a0-pure.cl | 4 ++-- OpenCL/m00010_a1-optimized.cl | 12 ++++++------ OpenCL/m00010_a1-pure.cl | 4 ++-- OpenCL/m00010_a3-optimized.cl | 12 ++++++------ OpenCL/m00010_a3-pure.cl | 4 ++-- OpenCL/m00020_a0-optimized.cl | 12 ++++++------ OpenCL/m00020_a0-pure.cl | 4 ++-- OpenCL/m00020_a1-optimized.cl | 12 ++++++------ OpenCL/m00020_a1-pure.cl | 4 ++-- OpenCL/m00020_a3-optimized.cl | 12 ++++++------ OpenCL/m00020_a3-pure.cl | 4 ++-- OpenCL/m00030_a0-optimized.cl | 12 ++++++------ OpenCL/m00030_a0-pure.cl | 4 ++-- OpenCL/m00030_a1-optimized.cl | 12 ++++++------ OpenCL/m00030_a1-pure.cl | 4 ++-- OpenCL/m00030_a3-optimized.cl | 12 ++++++------ OpenCL/m00030_a3-pure.cl | 4 ++-- OpenCL/m00040_a0-optimized.cl | 12 ++++++------ OpenCL/m00040_a0-pure.cl | 4 ++-- OpenCL/m00040_a1-optimized.cl | 12 ++++++------ OpenCL/m00040_a1-pure.cl | 4 ++-- OpenCL/m00040_a3-optimized.cl | 12 ++++++------ OpenCL/m00040_a3-pure.cl | 4 ++-- OpenCL/m00050_a0-optimized.cl | 12 ++++++------ OpenCL/m00050_a0-pure.cl | 4 ++-- OpenCL/m00050_a1-optimized.cl | 12 ++++++------ OpenCL/m00050_a1-pure.cl | 4 ++-- OpenCL/m00050_a3-optimized.cl | 12 ++++++------ OpenCL/m00050_a3-pure.cl | 4 ++-- OpenCL/m00060_a0-optimized.cl | 12 ++++++------ OpenCL/m00060_a0-pure.cl | 4 ++-- OpenCL/m00060_a1-optimized.cl | 12 ++++++------ OpenCL/m00060_a1-pure.cl | 4 ++-- OpenCL/m00060_a3-optimized.cl | 12 ++++++------ OpenCL/m00060_a3-pure.cl | 4 ++-- OpenCL/m00070_a0-optimized.cl | 12 ++++++------ OpenCL/m00070_a0-pure.cl | 4 ++-- OpenCL/m00070_a1-optimized.cl | 12 ++++++------ OpenCL/m00070_a1-pure.cl | 4 ++-- OpenCL/m00070_a3-optimized.cl | 12 ++++++------ OpenCL/m00070_a3-pure.cl | 4 ++-- OpenCL/m00100_a0-optimized.cl | 12 ++++++------ OpenCL/m00100_a0-pure.cl | 4 ++-- OpenCL/m00100_a1-optimized.cl | 12 ++++++------ OpenCL/m00100_a1-pure.cl | 4 ++-- OpenCL/m00100_a3-optimized.cl | 12 ++++++------ OpenCL/m00100_a3-pure.cl | 4 ++-- OpenCL/m00110_a0-optimized.cl | 12 ++++++------ OpenCL/m00110_a0-pure.cl | 4 ++-- OpenCL/m00110_a1-optimized.cl | 12 ++++++------ OpenCL/m00110_a1-pure.cl | 4 ++-- OpenCL/m00110_a3-optimized.cl | 12 ++++++------ OpenCL/m00110_a3-pure.cl | 4 ++-- OpenCL/m00120_a0-optimized.cl | 12 ++++++------ OpenCL/m00120_a0-pure.cl | 4 ++-- OpenCL/m00120_a1-optimized.cl | 12 ++++++------ OpenCL/m00120_a1-pure.cl | 4 ++-- OpenCL/m00120_a3-optimized.cl | 12 ++++++------ OpenCL/m00120_a3-pure.cl | 4 ++-- OpenCL/m00130_a0-optimized.cl | 12 ++++++------ OpenCL/m00130_a0-pure.cl | 4 ++-- OpenCL/m00130_a1-optimized.cl | 12 ++++++------ OpenCL/m00130_a1-pure.cl | 4 ++-- OpenCL/m00130_a3-optimized.cl | 12 ++++++------ OpenCL/m00130_a3-pure.cl | 4 ++-- OpenCL/m00140_a0-optimized.cl | 12 ++++++------ OpenCL/m00140_a0-pure.cl | 4 ++-- OpenCL/m00140_a1-optimized.cl | 12 ++++++------ OpenCL/m00140_a1-pure.cl | 4 ++-- OpenCL/m00140_a3-optimized.cl | 12 ++++++------ OpenCL/m00140_a3-pure.cl | 4 ++-- OpenCL/m00150_a0-optimized.cl | 12 ++++++------ OpenCL/m00150_a0-pure.cl | 4 ++-- OpenCL/m00150_a1-optimized.cl | 12 ++++++------ OpenCL/m00150_a1-pure.cl | 4 ++-- OpenCL/m00150_a3-optimized.cl | 12 ++++++------ OpenCL/m00150_a3-pure.cl | 4 ++-- OpenCL/m00160_a0-optimized.cl | 12 ++++++------ OpenCL/m00160_a0-pure.cl | 4 ++-- OpenCL/m00160_a1-optimized.cl | 12 ++++++------ OpenCL/m00160_a1-pure.cl | 4 ++-- OpenCL/m00160_a3-optimized.cl | 12 ++++++------ OpenCL/m00160_a3-pure.cl | 4 ++-- OpenCL/m00170_a0-optimized.cl | 12 ++++++------ OpenCL/m00170_a0-pure.cl | 4 ++-- OpenCL/m00170_a1-optimized.cl | 12 ++++++------ OpenCL/m00170_a1-pure.cl | 4 ++-- OpenCL/m00170_a3-optimized.cl | 12 ++++++------ OpenCL/m00170_a3-pure.cl | 4 ++-- OpenCL/m00200_a0-optimized.cl | 12 ++++++------ OpenCL/m00200_a1-optimized.cl | 12 ++++++------ OpenCL/m00200_a3-optimized.cl | 12 ++++++------ OpenCL/m00300_a0-optimized.cl | 12 ++++++------ OpenCL/m00300_a0-pure.cl | 4 ++-- OpenCL/m00300_a1-optimized.cl | 12 ++++++------ OpenCL/m00300_a1-pure.cl | 4 ++-- OpenCL/m00300_a3-optimized.cl | 12 ++++++------ OpenCL/m00300_a3-pure.cl | 4 ++-- OpenCL/m00400-optimized.cl | 6 +++--- OpenCL/m00400-pure.cl | 6 +++--- OpenCL/m00500-optimized.cl | 6 +++--- OpenCL/m00500-pure.cl | 6 +++--- OpenCL/m00600_a0-optimized.cl | 12 ++++++------ OpenCL/m00600_a0-pure.cl | 4 ++-- OpenCL/m00600_a1-optimized.cl | 12 ++++++------ OpenCL/m00600_a1-pure.cl | 4 ++-- OpenCL/m00600_a3-optimized.cl | 12 ++++++------ OpenCL/m00600_a3-pure.cl | 4 ++-- OpenCL/m00610_a0-optimized.cl | 12 ++++++------ OpenCL/m00610_a0-pure.cl | 4 ++-- OpenCL/m00610_a1-optimized.cl | 12 ++++++------ OpenCL/m00610_a1-pure.cl | 4 ++-- OpenCL/m00610_a3-optimized.cl | 12 ++++++------ OpenCL/m00610_a3-pure.cl | 4 ++-- OpenCL/m00620_a0-optimized.cl | 12 ++++++------ OpenCL/m00620_a0-pure.cl | 4 ++-- OpenCL/m00620_a1-optimized.cl | 12 ++++++------ OpenCL/m00620_a1-pure.cl | 4 ++-- OpenCL/m00620_a3-optimized.cl | 12 ++++++------ OpenCL/m00620_a3-pure.cl | 4 ++-- OpenCL/m00900_a0-optimized.cl | 12 ++++++------ OpenCL/m00900_a0-pure.cl | 4 ++-- OpenCL/m00900_a1-optimized.cl | 12 ++++++------ OpenCL/m00900_a1-pure.cl | 4 ++-- OpenCL/m00900_a3-optimized.cl | 12 ++++++------ OpenCL/m00900_a3-pure.cl | 4 ++-- OpenCL/m01000_a0-optimized.cl | 12 ++++++------ OpenCL/m01000_a0-pure.cl | 4 ++-- OpenCL/m01000_a1-optimized.cl | 12 ++++++------ OpenCL/m01000_a1-pure.cl | 4 ++-- OpenCL/m01000_a3-optimized.cl | 12 ++++++------ OpenCL/m01000_a3-pure.cl | 4 ++-- OpenCL/m01100_a0-optimized.cl | 12 ++++++------ OpenCL/m01100_a0-pure.cl | 4 ++-- OpenCL/m01100_a1-optimized.cl | 12 ++++++------ OpenCL/m01100_a1-pure.cl | 4 ++-- OpenCL/m01100_a3-optimized.cl | 12 ++++++------ OpenCL/m01100_a3-pure.cl | 4 ++-- OpenCL/m01300_a0-optimized.cl | 12 ++++++------ OpenCL/m01300_a0-pure.cl | 4 ++-- OpenCL/m01300_a1-optimized.cl | 12 ++++++------ OpenCL/m01300_a1-pure.cl | 4 ++-- OpenCL/m01300_a3-optimized.cl | 12 ++++++------ OpenCL/m01300_a3-pure.cl | 4 ++-- OpenCL/m01400_a0-optimized.cl | 12 ++++++------ OpenCL/m01400_a0-pure.cl | 4 ++-- OpenCL/m01400_a1-optimized.cl | 12 ++++++------ OpenCL/m01400_a1-pure.cl | 4 ++-- OpenCL/m01400_a3-optimized.cl | 12 ++++++------ OpenCL/m01400_a3-pure.cl | 4 ++-- OpenCL/m01410_a0-optimized.cl | 12 ++++++------ OpenCL/m01410_a0-pure.cl | 4 ++-- OpenCL/m01410_a1-optimized.cl | 12 ++++++------ OpenCL/m01410_a1-pure.cl | 4 ++-- OpenCL/m01410_a3-optimized.cl | 12 ++++++------ OpenCL/m01410_a3-pure.cl | 4 ++-- OpenCL/m01420_a0-optimized.cl | 12 ++++++------ OpenCL/m01420_a0-pure.cl | 4 ++-- OpenCL/m01420_a1-optimized.cl | 12 ++++++------ OpenCL/m01420_a1-pure.cl | 4 ++-- OpenCL/m01420_a3-optimized.cl | 12 ++++++------ OpenCL/m01420_a3-pure.cl | 4 ++-- OpenCL/m01430_a0-optimized.cl | 12 ++++++------ OpenCL/m01430_a0-pure.cl | 4 ++-- OpenCL/m01430_a1-optimized.cl | 12 ++++++------ OpenCL/m01430_a1-pure.cl | 4 ++-- OpenCL/m01430_a3-optimized.cl | 12 ++++++------ OpenCL/m01430_a3-pure.cl | 4 ++-- OpenCL/m01440_a0-optimized.cl | 12 ++++++------ OpenCL/m01440_a0-pure.cl | 4 ++-- OpenCL/m01440_a1-optimized.cl | 12 ++++++------ OpenCL/m01440_a1-pure.cl | 4 ++-- OpenCL/m01440_a3-optimized.cl | 12 ++++++------ OpenCL/m01440_a3-pure.cl | 4 ++-- OpenCL/m01450_a0-optimized.cl | 12 ++++++------ OpenCL/m01450_a0-pure.cl | 4 ++-- OpenCL/m01450_a1-optimized.cl | 12 ++++++------ OpenCL/m01450_a1-pure.cl | 4 ++-- OpenCL/m01450_a3-optimized.cl | 12 ++++++------ OpenCL/m01450_a3-pure.cl | 4 ++-- OpenCL/m01460_a0-optimized.cl | 12 ++++++------ OpenCL/m01460_a0-pure.cl | 4 ++-- OpenCL/m01460_a1-optimized.cl | 12 ++++++------ OpenCL/m01460_a1-pure.cl | 4 ++-- OpenCL/m01460_a3-optimized.cl | 12 ++++++------ OpenCL/m01460_a3-pure.cl | 4 ++-- OpenCL/m01470_a0-optimized.cl | 12 ++++++------ OpenCL/m01470_a0-pure.cl | 4 ++-- OpenCL/m01470_a1-optimized.cl | 12 ++++++------ OpenCL/m01470_a1-pure.cl | 4 ++-- OpenCL/m01470_a3-optimized.cl | 12 ++++++------ OpenCL/m01470_a3-pure.cl | 4 ++-- OpenCL/m01500_a0-pure.cl | 4 ++-- OpenCL/m01500_a1-pure.cl | 4 ++-- OpenCL/m01500_a3-pure.cl | 10 +++++----- OpenCL/m01600-optimized.cl | 6 +++--- OpenCL/m01600-pure.cl | 6 +++--- OpenCL/m01700_a0-optimized.cl | 12 ++++++------ OpenCL/m01700_a0-pure.cl | 4 ++-- OpenCL/m01700_a1-optimized.cl | 12 ++++++------ OpenCL/m01700_a1-pure.cl | 4 ++-- OpenCL/m01700_a3-optimized.cl | 12 ++++++------ OpenCL/m01700_a3-pure.cl | 4 ++-- OpenCL/m01710_a0-optimized.cl | 12 ++++++------ OpenCL/m01710_a0-pure.cl | 4 ++-- OpenCL/m01710_a1-optimized.cl | 12 ++++++------ OpenCL/m01710_a1-pure.cl | 4 ++-- OpenCL/m01710_a3-optimized.cl | 12 ++++++------ OpenCL/m01710_a3-pure.cl | 4 ++-- OpenCL/m01720_a0-optimized.cl | 12 ++++++------ OpenCL/m01720_a0-pure.cl | 4 ++-- OpenCL/m01720_a1-optimized.cl | 12 ++++++------ OpenCL/m01720_a1-pure.cl | 4 ++-- OpenCL/m01720_a3-optimized.cl | 12 ++++++------ OpenCL/m01720_a3-pure.cl | 4 ++-- OpenCL/m01730_a0-optimized.cl | 12 ++++++------ OpenCL/m01730_a0-pure.cl | 4 ++-- OpenCL/m01730_a1-optimized.cl | 12 ++++++------ OpenCL/m01730_a1-pure.cl | 4 ++-- OpenCL/m01730_a3-optimized.cl | 12 ++++++------ OpenCL/m01730_a3-pure.cl | 4 ++-- OpenCL/m01740_a0-optimized.cl | 12 ++++++------ OpenCL/m01740_a0-pure.cl | 4 ++-- OpenCL/m01740_a1-optimized.cl | 12 ++++++------ OpenCL/m01740_a1-pure.cl | 4 ++-- OpenCL/m01740_a3-optimized.cl | 12 ++++++------ OpenCL/m01740_a3-pure.cl | 4 ++-- OpenCL/m01750_a0-optimized.cl | 12 ++++++------ OpenCL/m01750_a0-pure.cl | 4 ++-- OpenCL/m01750_a1-optimized.cl | 12 ++++++------ OpenCL/m01750_a1-pure.cl | 4 ++-- OpenCL/m01750_a3-optimized.cl | 12 ++++++------ OpenCL/m01750_a3-pure.cl | 4 ++-- OpenCL/m01760_a0-optimized.cl | 12 ++++++------ OpenCL/m01760_a0-pure.cl | 4 ++-- OpenCL/m01760_a1-optimized.cl | 12 ++++++------ OpenCL/m01760_a1-pure.cl | 4 ++-- OpenCL/m01760_a3-optimized.cl | 12 ++++++------ OpenCL/m01760_a3-pure.cl | 4 ++-- OpenCL/m01770_a0-optimized.cl | 12 ++++++------ OpenCL/m01770_a0-pure.cl | 4 ++-- OpenCL/m01770_a1-optimized.cl | 12 ++++++------ OpenCL/m01770_a1-pure.cl | 4 ++-- OpenCL/m01770_a3-optimized.cl | 12 ++++++------ OpenCL/m01770_a3-pure.cl | 4 ++-- OpenCL/m01800-optimized.cl | 6 +++--- OpenCL/m01800-pure.cl | 6 +++--- OpenCL/m02000_a0-optimized.cl | 12 ++++++------ OpenCL/m02000_a0-pure.cl | 4 ++-- OpenCL/m02000_a1-optimized.cl | 12 ++++++------ OpenCL/m02000_a1-pure.cl | 4 ++-- OpenCL/m02000_a3-optimized.cl | 12 ++++++------ OpenCL/m02000_a3-pure.cl | 4 ++-- OpenCL/m02100-pure.cl | 6 +++--- OpenCL/m02400_a0-optimized.cl | 12 ++++++------ OpenCL/m02400_a1-optimized.cl | 12 ++++++------ OpenCL/m02400_a3-optimized.cl | 12 ++++++------ OpenCL/m02410_a0-optimized.cl | 12 ++++++------ OpenCL/m02410_a1-optimized.cl | 12 ++++++------ OpenCL/m02410_a3-optimized.cl | 12 ++++++------ OpenCL/m02500-pure.cl | 12 ++++++------ OpenCL/m02501-pure.cl | 12 ++++++------ OpenCL/m02610_a0-optimized.cl | 12 ++++++------ OpenCL/m02610_a0-pure.cl | 4 ++-- OpenCL/m02610_a1-optimized.cl | 12 ++++++------ OpenCL/m02610_a1-pure.cl | 4 ++-- OpenCL/m02610_a3-optimized.cl | 12 ++++++------ OpenCL/m02610_a3-pure.cl | 4 ++-- OpenCL/m02630_a0-optimized.cl | 12 ++++++------ OpenCL/m02630_a0-pure.cl | 4 ++-- OpenCL/m02630_a1-optimized.cl | 12 ++++++------ OpenCL/m02630_a1-pure.cl | 4 ++-- OpenCL/m02630_a3-optimized.cl | 12 ++++++------ OpenCL/m02630_a3-pure.cl | 4 ++-- OpenCL/m02710_a0-optimized.cl | 12 ++++++------ OpenCL/m02710_a1-optimized.cl | 12 ++++++------ OpenCL/m02710_a3-optimized.cl | 12 ++++++------ OpenCL/m02810_a0-optimized.cl | 12 ++++++------ OpenCL/m02810_a0-pure.cl | 4 ++-- OpenCL/m02810_a1-optimized.cl | 12 ++++++------ OpenCL/m02810_a1-pure.cl | 4 ++-- OpenCL/m02810_a3-optimized.cl | 12 ++++++------ OpenCL/m02810_a3-pure.cl | 4 ++-- OpenCL/m03000_a0-pure.cl | 4 ++-- OpenCL/m03000_a1-pure.cl | 4 ++-- OpenCL/m03000_a3-pure.cl | 6 +++--- OpenCL/m03100_a0-optimized.cl | 12 ++++++------ OpenCL/m03100_a1-optimized.cl | 12 ++++++------ OpenCL/m03100_a3-optimized.cl | 12 ++++++------ OpenCL/m03200-pure.cl | 6 +++--- OpenCL/m03500_a0-optimized.cl | 12 ++++++------ OpenCL/m03500_a0-pure.cl | 4 ++-- OpenCL/m03500_a1-optimized.cl | 12 ++++++------ OpenCL/m03500_a1-pure.cl | 4 ++-- OpenCL/m03500_a3-optimized.cl | 12 ++++++------ OpenCL/m03500_a3-pure.cl | 4 ++-- OpenCL/m03610_a0-optimized.cl | 12 ++++++------ OpenCL/m03610_a0-pure.cl | 4 ++-- OpenCL/m03610_a1-optimized.cl | 12 ++++++------ OpenCL/m03610_a1-pure.cl | 4 ++-- OpenCL/m03610_a3-optimized.cl | 12 ++++++------ OpenCL/m03610_a3-pure.cl | 4 ++-- OpenCL/m03710_a0-optimized.cl | 12 ++++++------ OpenCL/m03710_a0-pure.cl | 4 ++-- OpenCL/m03710_a1-optimized.cl | 12 ++++++------ OpenCL/m03710_a1-pure.cl | 4 ++-- OpenCL/m03710_a3-optimized.cl | 12 ++++++------ OpenCL/m03710_a3-pure.cl | 4 ++-- OpenCL/m03730_a0-pure.cl | 4 ++-- OpenCL/m03730_a1-pure.cl | 4 ++-- OpenCL/m03730_a3-pure.cl | 4 ++-- OpenCL/m03800_a0-optimized.cl | 12 ++++++------ OpenCL/m03800_a0-pure.cl | 4 ++-- OpenCL/m03800_a1-optimized.cl | 12 ++++++------ OpenCL/m03800_a1-pure.cl | 4 ++-- OpenCL/m03800_a3-optimized.cl | 12 ++++++------ OpenCL/m03800_a3-pure.cl | 4 ++-- OpenCL/m03910_a0-optimized.cl | 12 ++++++------ OpenCL/m03910_a0-pure.cl | 4 ++-- OpenCL/m03910_a1-optimized.cl | 12 ++++++------ OpenCL/m03910_a1-pure.cl | 4 ++-- OpenCL/m03910_a3-optimized.cl | 12 ++++++------ OpenCL/m03910_a3-pure.cl | 4 ++-- OpenCL/m04010_a0-optimized.cl | 12 ++++++------ OpenCL/m04010_a0-pure.cl | 4 ++-- OpenCL/m04010_a1-optimized.cl | 12 ++++++------ OpenCL/m04010_a1-pure.cl | 4 ++-- OpenCL/m04010_a3-optimized.cl | 12 ++++++------ OpenCL/m04010_a3-pure.cl | 4 ++-- OpenCL/m04110_a0-optimized.cl | 12 ++++++------ OpenCL/m04110_a0-pure.cl | 4 ++-- OpenCL/m04110_a1-optimized.cl | 12 ++++++------ OpenCL/m04110_a1-pure.cl | 4 ++-- OpenCL/m04110_a3-optimized.cl | 12 ++++++------ OpenCL/m04110_a3-pure.cl | 4 ++-- OpenCL/m04310_a0-optimized.cl | 12 ++++++------ OpenCL/m04310_a0-pure.cl | 4 ++-- OpenCL/m04310_a1-optimized.cl | 12 ++++++------ OpenCL/m04310_a1-pure.cl | 4 ++-- OpenCL/m04310_a3-optimized.cl | 12 ++++++------ OpenCL/m04310_a3-pure.cl | 4 ++-- OpenCL/m04400_a0-optimized.cl | 12 ++++++------ OpenCL/m04400_a0-pure.cl | 4 ++-- OpenCL/m04400_a1-optimized.cl | 12 ++++++------ OpenCL/m04400_a1-pure.cl | 4 ++-- OpenCL/m04400_a3-optimized.cl | 12 ++++++------ OpenCL/m04400_a3-pure.cl | 4 ++-- OpenCL/m04410_a0-optimized.cl | 12 ++++++------ OpenCL/m04410_a0-pure.cl | 4 ++-- OpenCL/m04410_a1-optimized.cl | 12 ++++++------ OpenCL/m04410_a1-pure.cl | 4 ++-- OpenCL/m04410_a3-optimized.cl | 12 ++++++------ OpenCL/m04410_a3-pure.cl | 4 ++-- OpenCL/m04420_a0-optimized.cl | 12 ++++++------ OpenCL/m04420_a0-pure.cl | 4 ++-- OpenCL/m04420_a1-optimized.cl | 12 ++++++------ OpenCL/m04420_a1-pure.cl | 4 ++-- OpenCL/m04420_a3-optimized.cl | 12 ++++++------ OpenCL/m04420_a3-pure.cl | 4 ++-- OpenCL/m04430_a0-optimized.cl | 12 ++++++------ OpenCL/m04430_a0-pure.cl | 4 ++-- OpenCL/m04430_a1-optimized.cl | 12 ++++++------ OpenCL/m04430_a1-pure.cl | 4 ++-- OpenCL/m04430_a3-optimized.cl | 12 ++++++------ OpenCL/m04430_a3-pure.cl | 4 ++-- OpenCL/m04500_a0-optimized.cl | 12 ++++++------ OpenCL/m04500_a0-pure.cl | 4 ++-- OpenCL/m04500_a1-optimized.cl | 12 ++++++------ OpenCL/m04500_a1-pure.cl | 4 ++-- OpenCL/m04500_a3-optimized.cl | 12 ++++++------ OpenCL/m04500_a3-pure.cl | 4 ++-- OpenCL/m04510_a0-optimized.cl | 12 ++++++------ OpenCL/m04510_a0-pure.cl | 4 ++-- OpenCL/m04510_a1-optimized.cl | 12 ++++++------ OpenCL/m04510_a1-pure.cl | 4 ++-- OpenCL/m04510_a3-optimized.cl | 12 ++++++------ OpenCL/m04510_a3-pure.cl | 4 ++-- OpenCL/m04520_a0-optimized.cl | 12 ++++++------ OpenCL/m04520_a0-pure.cl | 4 ++-- OpenCL/m04520_a1-optimized.cl | 12 ++++++------ OpenCL/m04520_a1-pure.cl | 4 ++-- OpenCL/m04520_a3-optimized.cl | 12 ++++++------ OpenCL/m04520_a3-pure.cl | 4 ++-- OpenCL/m04700_a0-optimized.cl | 12 ++++++------ OpenCL/m04700_a0-pure.cl | 4 ++-- OpenCL/m04700_a1-optimized.cl | 12 ++++++------ OpenCL/m04700_a1-pure.cl | 4 ++-- OpenCL/m04700_a3-optimized.cl | 12 ++++++------ OpenCL/m04700_a3-pure.cl | 4 ++-- OpenCL/m04710_a0-optimized.cl | 12 ++++++------ OpenCL/m04710_a0-pure.cl | 4 ++-- OpenCL/m04710_a1-optimized.cl | 12 ++++++------ OpenCL/m04710_a1-pure.cl | 4 ++-- OpenCL/m04710_a3-optimized.cl | 12 ++++++------ OpenCL/m04710_a3-pure.cl | 4 ++-- OpenCL/m04800_a0-optimized.cl | 12 ++++++------ OpenCL/m04800_a0-pure.cl | 4 ++-- OpenCL/m04800_a1-optimized.cl | 12 ++++++------ OpenCL/m04800_a1-pure.cl | 4 ++-- OpenCL/m04800_a3-optimized.cl | 12 ++++++------ OpenCL/m04800_a3-pure.cl | 4 ++-- OpenCL/m04900_a0-optimized.cl | 12 ++++++------ OpenCL/m04900_a0-pure.cl | 4 ++-- OpenCL/m04900_a1-optimized.cl | 12 ++++++------ OpenCL/m04900_a1-pure.cl | 4 ++-- OpenCL/m04900_a3-optimized.cl | 12 ++++++------ OpenCL/m04900_a3-pure.cl | 4 ++-- OpenCL/m05000_a0-optimized.cl | 12 ++++++------ OpenCL/m05000_a0-pure.cl | 4 ++-- OpenCL/m05000_a1-optimized.cl | 12 ++++++------ OpenCL/m05000_a1-pure.cl | 4 ++-- OpenCL/m05000_a3-optimized.cl | 12 ++++++------ OpenCL/m05000_a3-pure.cl | 4 ++-- OpenCL/m05100_a0-optimized.cl | 12 ++++++------ OpenCL/m05100_a0-pure.cl | 4 ++-- OpenCL/m05100_a1-optimized.cl | 12 ++++++------ OpenCL/m05100_a1-pure.cl | 4 ++-- OpenCL/m05100_a3-optimized.cl | 12 ++++++------ OpenCL/m05100_a3-pure.cl | 4 ++-- OpenCL/m05200-pure.cl | 6 +++--- OpenCL/m05300_a0-optimized.cl | 12 ++++++------ OpenCL/m05300_a0-pure.cl | 4 ++-- OpenCL/m05300_a1-optimized.cl | 12 ++++++------ OpenCL/m05300_a1-pure.cl | 4 ++-- OpenCL/m05300_a3-optimized.cl | 12 ++++++------ OpenCL/m05300_a3-pure.cl | 4 ++-- OpenCL/m05400_a0-optimized.cl | 12 ++++++------ OpenCL/m05400_a0-pure.cl | 4 ++-- OpenCL/m05400_a1-optimized.cl | 12 ++++++------ OpenCL/m05400_a1-pure.cl | 4 ++-- OpenCL/m05400_a3-optimized.cl | 12 ++++++------ OpenCL/m05400_a3-pure.cl | 4 ++-- OpenCL/m05500_a0-optimized.cl | 12 ++++++------ OpenCL/m05500_a0-pure.cl | 4 ++-- OpenCL/m05500_a1-optimized.cl | 12 ++++++------ OpenCL/m05500_a1-pure.cl | 4 ++-- OpenCL/m05500_a3-optimized.cl | 12 ++++++------ OpenCL/m05500_a3-pure.cl | 4 ++-- OpenCL/m05600_a0-optimized.cl | 12 ++++++------ OpenCL/m05600_a0-pure.cl | 4 ++-- OpenCL/m05600_a1-optimized.cl | 12 ++++++------ OpenCL/m05600_a1-pure.cl | 4 ++-- OpenCL/m05600_a3-optimized.cl | 12 ++++++------ OpenCL/m05600_a3-pure.cl | 4 ++-- OpenCL/m05800-optimized.cl | 6 +++--- OpenCL/m05800-pure.cl | 6 +++--- OpenCL/m06000_a0-optimized.cl | 12 ++++++------ OpenCL/m06000_a0-pure.cl | 4 ++-- OpenCL/m06000_a1-optimized.cl | 12 ++++++------ OpenCL/m06000_a1-pure.cl | 4 ++-- OpenCL/m06000_a3-optimized.cl | 12 ++++++------ OpenCL/m06000_a3-pure.cl | 4 ++-- OpenCL/m06050_a0-pure.cl | 4 ++-- OpenCL/m06050_a1-pure.cl | 4 ++-- OpenCL/m06050_a3-pure.cl | 4 ++-- OpenCL/m06060_a0-pure.cl | 4 ++-- OpenCL/m06060_a1-pure.cl | 4 ++-- OpenCL/m06060_a3-pure.cl | 4 ++-- OpenCL/m06100_a0-optimized.cl | 12 ++++++------ OpenCL/m06100_a0-pure.cl | 4 ++-- OpenCL/m06100_a1-optimized.cl | 12 ++++++------ OpenCL/m06100_a1-pure.cl | 4 ++-- OpenCL/m06100_a3-optimized.cl | 12 ++++++------ OpenCL/m06100_a3-pure.cl | 4 ++-- OpenCL/m06211-pure.cl | 6 +++--- OpenCL/m06212-pure.cl | 6 +++--- OpenCL/m06213-pure.cl | 6 +++--- OpenCL/m06221-pure.cl | 6 +++--- OpenCL/m06222-pure.cl | 6 +++--- OpenCL/m06223-pure.cl | 6 +++--- OpenCL/m06231-pure.cl | 6 +++--- OpenCL/m06232-pure.cl | 6 +++--- OpenCL/m06233-pure.cl | 6 +++--- OpenCL/m06300-optimized.cl | 6 +++--- OpenCL/m06300-pure.cl | 6 +++--- OpenCL/m06400-pure.cl | 6 +++--- OpenCL/m06500-pure.cl | 6 +++--- OpenCL/m06600-pure.cl | 6 +++--- OpenCL/m06700-pure.cl | 6 +++--- OpenCL/m06800-pure.cl | 6 +++--- OpenCL/m06900_a0-optimized.cl | 12 ++++++------ OpenCL/m06900_a1-optimized.cl | 12 ++++++------ OpenCL/m06900_a3-optimized.cl | 12 ++++++------ OpenCL/m07000_a0-optimized.cl | 12 ++++++------ OpenCL/m07000_a0-pure.cl | 4 ++-- OpenCL/m07000_a1-optimized.cl | 12 ++++++------ OpenCL/m07000_a1-pure.cl | 4 ++-- OpenCL/m07000_a3-optimized.cl | 12 ++++++------ OpenCL/m07000_a3-pure.cl | 4 ++-- OpenCL/m07100-pure.cl | 6 +++--- OpenCL/m07300_a0-optimized.cl | 12 ++++++------ OpenCL/m07300_a0-pure.cl | 4 ++-- OpenCL/m07300_a1-optimized.cl | 12 ++++++------ OpenCL/m07300_a1-pure.cl | 4 ++-- OpenCL/m07300_a3-optimized.cl | 12 ++++++------ OpenCL/m07300_a3-pure.cl | 4 ++-- OpenCL/m07350_a0-optimized.cl | 12 ++++++------ OpenCL/m07350_a0-pure.cl | 4 ++-- OpenCL/m07350_a1-optimized.cl | 12 ++++++------ OpenCL/m07350_a1-pure.cl | 4 ++-- OpenCL/m07350_a3-optimized.cl | 12 ++++++------ OpenCL/m07350_a3-pure.cl | 4 ++-- OpenCL/m07400-optimized.cl | 6 +++--- OpenCL/m07400-pure.cl | 6 +++--- OpenCL/m07500_a0-optimized.cl | 12 ++++++------ OpenCL/m07500_a0-pure.cl | 4 ++-- OpenCL/m07500_a1-optimized.cl | 12 ++++++------ OpenCL/m07500_a1-pure.cl | 4 ++-- OpenCL/m07500_a3-optimized.cl | 12 ++++++------ OpenCL/m07500_a3-pure.cl | 4 ++-- OpenCL/m07700_a0-optimized.cl | 12 ++++++------ OpenCL/m07700_a1-optimized.cl | 12 ++++++------ OpenCL/m07700_a3-optimized.cl | 12 ++++++------ OpenCL/m07701_a0-optimized.cl | 12 ++++++------ OpenCL/m07701_a1-optimized.cl | 12 ++++++------ OpenCL/m07701_a3-optimized.cl | 12 ++++++------ OpenCL/m07800_a0-optimized.cl | 12 ++++++------ OpenCL/m07800_a1-optimized.cl | 12 ++++++------ OpenCL/m07800_a3-optimized.cl | 12 ++++++------ OpenCL/m07801_a0-optimized.cl | 12 ++++++------ OpenCL/m07801_a1-optimized.cl | 12 ++++++------ OpenCL/m07801_a3-optimized.cl | 12 ++++++------ OpenCL/m07900-pure.cl | 6 +++--- OpenCL/m08000_a0-optimized.cl | 12 ++++++------ OpenCL/m08000_a1-optimized.cl | 12 ++++++------ OpenCL/m08000_a3-optimized.cl | 12 ++++++------ OpenCL/m08100_a0-optimized.cl | 12 ++++++------ OpenCL/m08100_a0-pure.cl | 4 ++-- OpenCL/m08100_a1-optimized.cl | 12 ++++++------ OpenCL/m08100_a1-pure.cl | 4 ++-- OpenCL/m08100_a3-optimized.cl | 12 ++++++------ OpenCL/m08100_a3-pure.cl | 4 ++-- OpenCL/m08200-pure.cl | 6 +++--- OpenCL/m08300_a0-optimized.cl | 12 ++++++------ OpenCL/m08300_a0-pure.cl | 4 ++-- OpenCL/m08300_a1-optimized.cl | 12 ++++++------ OpenCL/m08300_a1-pure.cl | 4 ++-- OpenCL/m08300_a3-optimized.cl | 12 ++++++------ OpenCL/m08300_a3-pure.cl | 4 ++-- OpenCL/m08400_a0-optimized.cl | 12 ++++++------ OpenCL/m08400_a0-pure.cl | 4 ++-- OpenCL/m08400_a1-optimized.cl | 12 ++++++------ OpenCL/m08400_a1-pure.cl | 4 ++-- OpenCL/m08400_a3-optimized.cl | 12 ++++++------ OpenCL/m08400_a3-pure.cl | 4 ++-- OpenCL/m08500_a0-pure.cl | 4 ++-- OpenCL/m08500_a1-pure.cl | 4 ++-- OpenCL/m08500_a3-pure.cl | 4 ++-- OpenCL/m08600_a0-pure.cl | 4 ++-- OpenCL/m08600_a1-pure.cl | 4 ++-- OpenCL/m08600_a3-pure.cl | 4 ++-- OpenCL/m08700_a0-optimized.cl | 12 ++++++------ OpenCL/m08700_a1-optimized.cl | 12 ++++++------ OpenCL/m08700_a3-optimized.cl | 12 ++++++------ OpenCL/m08800-pure.cl | 6 +++--- OpenCL/m08900-pure.cl | 8 ++++---- OpenCL/m09000-pure.cl | 6 +++--- OpenCL/m09100-pure.cl | 6 +++--- OpenCL/m09400-pure.cl | 6 +++--- OpenCL/m09500-pure.cl | 6 +++--- OpenCL/m09600-pure.cl | 6 +++--- OpenCL/m09700_a0-optimized.cl | 12 ++++++------ OpenCL/m09700_a1-optimized.cl | 12 ++++++------ OpenCL/m09700_a3-optimized.cl | 12 ++++++------ OpenCL/m09710_a0-optimized.cl | 12 ++++++------ OpenCL/m09710_a1-optimized.cl | 12 ++++++------ OpenCL/m09710_a3-optimized.cl | 12 ++++++------ OpenCL/m09720_a0-optimized.cl | 12 ++++++------ OpenCL/m09720_a1-optimized.cl | 12 ++++++------ OpenCL/m09720_a3-optimized.cl | 12 ++++++------ OpenCL/m09800_a0-optimized.cl | 12 ++++++------ OpenCL/m09800_a1-optimized.cl | 12 ++++++------ OpenCL/m09800_a3-optimized.cl | 12 ++++++------ OpenCL/m09810_a0-optimized.cl | 12 ++++++------ OpenCL/m09810_a1-optimized.cl | 12 ++++++------ OpenCL/m09810_a3-optimized.cl | 12 ++++++------ OpenCL/m09820_a0-optimized.cl | 12 ++++++------ OpenCL/m09820_a1-optimized.cl | 12 ++++++------ OpenCL/m09820_a3-optimized.cl | 12 ++++++------ OpenCL/m09900_a0-optimized.cl | 12 ++++++------ OpenCL/m09900_a0-pure.cl | 4 ++-- OpenCL/m09900_a1-optimized.cl | 12 ++++++------ OpenCL/m09900_a1-pure.cl | 4 ++-- OpenCL/m09900_a3-optimized.cl | 12 ++++++------ OpenCL/m09900_a3-pure.cl | 4 ++-- OpenCL/m10100_a0-optimized.cl | 12 ++++++------ OpenCL/m10100_a1-optimized.cl | 12 ++++++------ OpenCL/m10100_a3-optimized.cl | 12 ++++++------ OpenCL/m10300-pure.cl | 6 +++--- OpenCL/m10400_a0-optimized.cl | 12 ++++++------ OpenCL/m10400_a1-optimized.cl | 12 ++++++------ OpenCL/m10400_a3-optimized.cl | 12 ++++++------ OpenCL/m10410_a0-optimized.cl | 12 ++++++------ OpenCL/m10410_a1-optimized.cl | 12 ++++++------ OpenCL/m10410_a3-optimized.cl | 12 ++++++------ OpenCL/m10420_a0-optimized.cl | 12 ++++++------ OpenCL/m10420_a1-optimized.cl | 12 ++++++------ OpenCL/m10420_a3-optimized.cl | 12 ++++++------ OpenCL/m10500-pure.cl | 6 +++--- OpenCL/m10700-optimized.cl | 6 +++--- OpenCL/m10700-pure.cl | 6 +++--- OpenCL/m10800_a0-optimized.cl | 12 ++++++------ OpenCL/m10800_a0-pure.cl | 4 ++-- OpenCL/m10800_a1-optimized.cl | 12 ++++++------ OpenCL/m10800_a1-pure.cl | 4 ++-- OpenCL/m10800_a3-optimized.cl | 12 ++++++------ OpenCL/m10800_a3-pure.cl | 4 ++-- OpenCL/m10810_a0-optimized.cl | 12 ++++++------ OpenCL/m10810_a0-pure.cl | 4 ++-- OpenCL/m10810_a1-optimized.cl | 12 ++++++------ OpenCL/m10810_a1-pure.cl | 4 ++-- OpenCL/m10810_a3-optimized.cl | 12 ++++++------ OpenCL/m10810_a3-pure.cl | 4 ++-- OpenCL/m10820_a0-optimized.cl | 12 ++++++------ OpenCL/m10820_a0-pure.cl | 4 ++-- OpenCL/m10820_a1-optimized.cl | 12 ++++++------ OpenCL/m10820_a1-pure.cl | 4 ++-- OpenCL/m10820_a3-optimized.cl | 12 ++++++------ OpenCL/m10820_a3-pure.cl | 4 ++-- OpenCL/m10830_a0-optimized.cl | 12 ++++++------ OpenCL/m10830_a0-pure.cl | 4 ++-- OpenCL/m10830_a1-optimized.cl | 12 ++++++------ OpenCL/m10830_a1-pure.cl | 4 ++-- OpenCL/m10830_a3-optimized.cl | 12 ++++++------ OpenCL/m10830_a3-pure.cl | 4 ++-- OpenCL/m10840_a0-optimized.cl | 12 ++++++------ OpenCL/m10840_a0-pure.cl | 4 ++-- OpenCL/m10840_a1-optimized.cl | 12 ++++++------ OpenCL/m10840_a1-pure.cl | 4 ++-- OpenCL/m10840_a3-optimized.cl | 12 ++++++------ OpenCL/m10840_a3-pure.cl | 4 ++-- OpenCL/m10870_a0-optimized.cl | 12 ++++++------ OpenCL/m10870_a0-pure.cl | 4 ++-- OpenCL/m10870_a1-optimized.cl | 12 ++++++------ OpenCL/m10870_a1-pure.cl | 4 ++-- OpenCL/m10870_a3-optimized.cl | 12 ++++++------ OpenCL/m10870_a3-pure.cl | 4 ++-- OpenCL/m10900-pure.cl | 6 +++--- OpenCL/m11000_a0-optimized.cl | 12 ++++++------ OpenCL/m11000_a0-pure.cl | 4 ++-- OpenCL/m11000_a1-optimized.cl | 12 ++++++------ OpenCL/m11000_a1-pure.cl | 4 ++-- OpenCL/m11000_a3-optimized.cl | 12 ++++++------ OpenCL/m11000_a3-pure.cl | 4 ++-- OpenCL/m11100_a0-optimized.cl | 12 ++++++------ OpenCL/m11100_a0-pure.cl | 4 ++-- OpenCL/m11100_a1-optimized.cl | 12 ++++++------ OpenCL/m11100_a1-pure.cl | 4 ++-- OpenCL/m11100_a3-optimized.cl | 12 ++++++------ OpenCL/m11100_a3-pure.cl | 4 ++-- OpenCL/m11200_a0-optimized.cl | 12 ++++++------ OpenCL/m11200_a0-pure.cl | 4 ++-- OpenCL/m11200_a1-optimized.cl | 12 ++++++------ OpenCL/m11200_a1-pure.cl | 4 ++-- OpenCL/m11200_a3-optimized.cl | 12 ++++++------ OpenCL/m11200_a3-pure.cl | 4 ++-- OpenCL/m11300-pure.cl | 6 +++--- OpenCL/m11400_a0-pure.cl | 4 ++-- OpenCL/m11400_a1-pure.cl | 4 ++-- OpenCL/m11400_a3-pure.cl | 4 ++-- OpenCL/m11500_a0-optimized.cl | 12 ++++++------ OpenCL/m11500_a0-pure.cl | 4 ++-- OpenCL/m11500_a1-optimized.cl | 12 ++++++------ OpenCL/m11500_a1-pure.cl | 4 ++-- OpenCL/m11500_a3-optimized.cl | 12 ++++++------ OpenCL/m11500_a3-pure.cl | 4 ++-- OpenCL/m11600-optimized.cl | 8 ++++---- OpenCL/m11600-pure.cl | 8 ++++---- OpenCL/m11700_a0-optimized.cl | 12 ++++++------ OpenCL/m11700_a0-pure.cl | 4 ++-- OpenCL/m11700_a1-optimized.cl | 12 ++++++------ OpenCL/m11700_a1-pure.cl | 4 ++-- OpenCL/m11700_a3-optimized.cl | 12 ++++++------ OpenCL/m11700_a3-pure.cl | 4 ++-- OpenCL/m11750_a0-pure.cl | 4 ++-- OpenCL/m11750_a1-pure.cl | 4 ++-- OpenCL/m11750_a3-pure.cl | 4 ++-- OpenCL/m11760_a0-pure.cl | 4 ++-- OpenCL/m11760_a1-pure.cl | 4 ++-- OpenCL/m11760_a3-pure.cl | 4 ++-- OpenCL/m11800_a0-optimized.cl | 12 ++++++------ OpenCL/m11800_a0-pure.cl | 4 ++-- OpenCL/m11800_a1-optimized.cl | 12 ++++++------ OpenCL/m11800_a1-pure.cl | 4 ++-- OpenCL/m11800_a3-optimized.cl | 12 ++++++------ OpenCL/m11800_a3-pure.cl | 4 ++-- OpenCL/m11850_a0-pure.cl | 4 ++-- OpenCL/m11850_a1-pure.cl | 4 ++-- OpenCL/m11850_a3-pure.cl | 4 ++-- OpenCL/m11860_a0-pure.cl | 4 ++-- OpenCL/m11860_a1-pure.cl | 4 ++-- OpenCL/m11860_a3-pure.cl | 4 ++-- OpenCL/m11900-pure.cl | 6 +++--- OpenCL/m12000-pure.cl | 6 +++--- OpenCL/m12200-pure.cl | 6 +++--- OpenCL/m12300-pure.cl | 6 +++--- OpenCL/m12400-pure.cl | 6 +++--- OpenCL/m12500-optimized.cl | 6 +++--- OpenCL/m12500-pure.cl | 6 +++--- OpenCL/m12600_a0-optimized.cl | 12 ++++++------ OpenCL/m12600_a0-pure.cl | 4 ++-- OpenCL/m12600_a1-optimized.cl | 12 ++++++------ OpenCL/m12600_a1-pure.cl | 4 ++-- OpenCL/m12600_a3-optimized.cl | 12 ++++++------ OpenCL/m12600_a3-pure.cl | 4 ++-- OpenCL/m12700-pure.cl | 6 +++--- OpenCL/m12800-pure.cl | 6 +++--- OpenCL/m12900-pure.cl | 6 +++--- OpenCL/m13000-pure.cl | 6 +++--- OpenCL/m13100_a0-optimized.cl | 12 ++++++------ OpenCL/m13100_a0-pure.cl | 4 ++-- OpenCL/m13100_a1-optimized.cl | 12 ++++++------ OpenCL/m13100_a1-pure.cl | 4 ++-- OpenCL/m13100_a3-optimized.cl | 12 ++++++------ OpenCL/m13100_a3-pure.cl | 4 ++-- OpenCL/m13200-pure.cl | 6 +++--- OpenCL/m13300_a0-optimized.cl | 12 ++++++------ OpenCL/m13300_a0-pure.cl | 4 ++-- OpenCL/m13300_a1-optimized.cl | 12 ++++++------ OpenCL/m13300_a1-pure.cl | 4 ++-- OpenCL/m13300_a3-optimized.cl | 12 ++++++------ OpenCL/m13300_a3-pure.cl | 4 ++-- OpenCL/m13400-pure.cl | 6 +++--- OpenCL/m13500_a0-optimized.cl | 12 ++++++------ OpenCL/m13500_a0-pure.cl | 4 ++-- OpenCL/m13500_a1-optimized.cl | 12 ++++++------ OpenCL/m13500_a1-pure.cl | 4 ++-- OpenCL/m13500_a3-optimized.cl | 12 ++++++------ OpenCL/m13500_a3-pure.cl | 4 ++-- OpenCL/m13600-pure.cl | 6 +++--- OpenCL/m13711-pure.cl | 8 ++++---- OpenCL/m13712-pure.cl | 8 ++++---- OpenCL/m13713-pure.cl | 8 ++++---- OpenCL/m13721-pure.cl | 8 ++++---- OpenCL/m13722-pure.cl | 8 ++++---- OpenCL/m13723-pure.cl | 8 ++++---- OpenCL/m13731-pure.cl | 8 ++++---- OpenCL/m13732-pure.cl | 8 ++++---- OpenCL/m13733-pure.cl | 8 ++++---- OpenCL/m13751-pure.cl | 8 ++++---- OpenCL/m13752-pure.cl | 8 ++++---- OpenCL/m13753-pure.cl | 8 ++++---- OpenCL/m13771-pure.cl | 8 ++++---- OpenCL/m13772-pure.cl | 8 ++++---- OpenCL/m13773-pure.cl | 8 ++++---- OpenCL/m13800_a0-optimized.cl | 12 ++++++------ OpenCL/m13800_a0-pure.cl | 4 ++-- OpenCL/m13800_a1-optimized.cl | 12 ++++++------ OpenCL/m13800_a1-pure.cl | 4 ++-- OpenCL/m13800_a3-optimized.cl | 12 ++++++------ OpenCL/m13800_a3-pure.cl | 4 ++-- OpenCL/m13900_a0-optimized.cl | 12 ++++++------ OpenCL/m13900_a0-pure.cl | 4 ++-- OpenCL/m13900_a1-optimized.cl | 12 ++++++------ OpenCL/m13900_a1-pure.cl | 4 ++-- OpenCL/m13900_a3-optimized.cl | 12 ++++++------ OpenCL/m13900_a3-pure.cl | 4 ++-- OpenCL/m14000_a0-pure.cl | 4 ++-- OpenCL/m14000_a1-pure.cl | 4 ++-- OpenCL/m14000_a3-pure.cl | 6 +++--- OpenCL/m14100_a0-pure.cl | 4 ++-- OpenCL/m14100_a1-pure.cl | 4 ++-- OpenCL/m14100_a3-pure.cl | 4 ++-- OpenCL/m14400_a0-optimized.cl | 12 ++++++------ OpenCL/m14400_a0-pure.cl | 4 ++-- OpenCL/m14400_a1-optimized.cl | 12 ++++++------ OpenCL/m14400_a1-pure.cl | 4 ++-- OpenCL/m14400_a3-optimized.cl | 12 ++++++------ OpenCL/m14400_a3-pure.cl | 4 ++-- OpenCL/m14511_a0-pure.cl | 4 ++-- OpenCL/m14511_a1-pure.cl | 4 ++-- OpenCL/m14511_a3-pure.cl | 4 ++-- OpenCL/m14512_a0-pure.cl | 4 ++-- OpenCL/m14512_a1-pure.cl | 4 ++-- OpenCL/m14512_a3-pure.cl | 4 ++-- OpenCL/m14513_a0-pure.cl | 4 ++-- OpenCL/m14513_a1-pure.cl | 4 ++-- OpenCL/m14513_a3-pure.cl | 4 ++-- OpenCL/m14521_a0-pure.cl | 4 ++-- OpenCL/m14521_a1-pure.cl | 4 ++-- OpenCL/m14521_a3-pure.cl | 4 ++-- OpenCL/m14522_a0-pure.cl | 4 ++-- OpenCL/m14522_a1-pure.cl | 4 ++-- OpenCL/m14522_a3-pure.cl | 4 ++-- OpenCL/m14523_a0-pure.cl | 4 ++-- OpenCL/m14523_a1-pure.cl | 4 ++-- OpenCL/m14523_a3-pure.cl | 4 ++-- OpenCL/m14531_a0-pure.cl | 4 ++-- OpenCL/m14531_a1-pure.cl | 4 ++-- OpenCL/m14531_a3-pure.cl | 4 ++-- OpenCL/m14532_a0-pure.cl | 4 ++-- OpenCL/m14532_a1-pure.cl | 4 ++-- OpenCL/m14532_a3-pure.cl | 4 ++-- OpenCL/m14533_a0-pure.cl | 4 ++-- OpenCL/m14533_a1-pure.cl | 4 ++-- OpenCL/m14533_a3-pure.cl | 4 ++-- OpenCL/m14541_a0-pure.cl | 4 ++-- OpenCL/m14541_a1-pure.cl | 4 ++-- OpenCL/m14541_a3-pure.cl | 4 ++-- OpenCL/m14542_a0-pure.cl | 4 ++-- OpenCL/m14542_a1-pure.cl | 4 ++-- OpenCL/m14542_a3-pure.cl | 4 ++-- OpenCL/m14543_a0-pure.cl | 4 ++-- OpenCL/m14543_a1-pure.cl | 4 ++-- OpenCL/m14543_a3-pure.cl | 4 ++-- OpenCL/m14551_a0-pure.cl | 4 ++-- OpenCL/m14551_a1-pure.cl | 4 ++-- OpenCL/m14551_a3-pure.cl | 4 ++-- OpenCL/m14552_a0-pure.cl | 4 ++-- OpenCL/m14552_a1-pure.cl | 4 ++-- OpenCL/m14552_a3-pure.cl | 4 ++-- OpenCL/m14553_a0-pure.cl | 4 ++-- OpenCL/m14553_a1-pure.cl | 4 ++-- OpenCL/m14553_a3-pure.cl | 4 ++-- OpenCL/m14611-pure.cl | 6 +++--- OpenCL/m14612-pure.cl | 6 +++--- OpenCL/m14613-pure.cl | 6 +++--- OpenCL/m14621-pure.cl | 6 +++--- OpenCL/m14622-pure.cl | 6 +++--- OpenCL/m14623-pure.cl | 6 +++--- OpenCL/m14631-pure.cl | 6 +++--- OpenCL/m14632-pure.cl | 6 +++--- OpenCL/m14633-pure.cl | 6 +++--- OpenCL/m14641-pure.cl | 6 +++--- OpenCL/m14642-pure.cl | 6 +++--- OpenCL/m14643-pure.cl | 6 +++--- OpenCL/m14700-pure.cl | 6 +++--- OpenCL/m14800-pure.cl | 10 +++++----- OpenCL/m14900_a0-optimized.cl | 12 ++++++------ OpenCL/m14900_a1-optimized.cl | 12 ++++++------ OpenCL/m14900_a3-optimized.cl | 12 ++++++------ OpenCL/m15000_a0-optimized.cl | 12 ++++++------ OpenCL/m15000_a0-pure.cl | 4 ++-- OpenCL/m15000_a1-optimized.cl | 12 ++++++------ OpenCL/m15000_a1-pure.cl | 4 ++-- OpenCL/m15000_a3-optimized.cl | 12 ++++++------ OpenCL/m15000_a3-pure.cl | 4 ++-- OpenCL/m15100-pure.cl | 6 +++--- OpenCL/m15300-pure.cl | 6 +++--- OpenCL/m15310-pure.cl | 10 +++++----- OpenCL/m15400_a0-optimized.cl | 12 ++++++------ OpenCL/m15400_a1-optimized.cl | 12 ++++++------ OpenCL/m15400_a3-optimized.cl | 12 ++++++------ OpenCL/m15500_a0-optimized.cl | 12 ++++++------ OpenCL/m15500_a0-pure.cl | 4 ++-- OpenCL/m15500_a1-optimized.cl | 12 ++++++------ OpenCL/m15500_a1-pure.cl | 4 ++-- OpenCL/m15500_a3-optimized.cl | 12 ++++++------ OpenCL/m15500_a3-pure.cl | 4 ++-- OpenCL/m15600-pure.cl | 6 +++--- OpenCL/m15700-pure.cl | 8 ++++---- OpenCL/m15900-pure.cl | 6 +++--- OpenCL/m15910-pure.cl | 10 +++++----- OpenCL/m16000_a0-pure.cl | 4 ++-- OpenCL/m16000_a1-pure.cl | 4 ++-- OpenCL/m16000_a3-pure.cl | 4 ++-- OpenCL/m16100_a0-optimized.cl | 12 ++++++------ OpenCL/m16100_a0-pure.cl | 4 ++-- OpenCL/m16100_a1-optimized.cl | 12 ++++++------ OpenCL/m16100_a1-pure.cl | 4 ++-- OpenCL/m16100_a3-optimized.cl | 12 ++++++------ OpenCL/m16100_a3-pure.cl | 4 ++-- OpenCL/m16200-pure.cl | 6 +++--- OpenCL/m16300-pure.cl | 6 +++--- OpenCL/m16400_a0-optimized.cl | 12 ++++++------ OpenCL/m16400_a0-pure.cl | 4 ++-- OpenCL/m16400_a1-optimized.cl | 12 ++++++------ OpenCL/m16400_a1-pure.cl | 4 ++-- OpenCL/m16400_a3-optimized.cl | 12 ++++++------ OpenCL/m16400_a3-pure.cl | 4 ++-- OpenCL/m16511_a0-pure.cl | 4 ++-- OpenCL/m16511_a1-pure.cl | 4 ++-- OpenCL/m16511_a3-pure.cl | 4 ++-- OpenCL/m16512_a0-pure.cl | 4 ++-- OpenCL/m16512_a1-pure.cl | 4 ++-- OpenCL/m16512_a3-pure.cl | 4 ++-- OpenCL/m16513_a0-pure.cl | 4 ++-- OpenCL/m16513_a1-pure.cl | 4 ++-- OpenCL/m16513_a3-pure.cl | 4 ++-- OpenCL/m16600_a0-optimized.cl | 12 ++++++------ OpenCL/m16600_a0-pure.cl | 4 ++-- OpenCL/m16600_a1-optimized.cl | 12 ++++++------ OpenCL/m16600_a1-pure.cl | 4 ++-- OpenCL/m16600_a3-optimized.cl | 12 ++++++------ OpenCL/m16600_a3-pure.cl | 4 ++-- OpenCL/m16800-pure.cl | 8 ++++---- OpenCL/m16801-pure.cl | 8 ++++---- OpenCL/m16900-pure.cl | 6 +++--- OpenCL/m17010-pure.cl | 12 ++++++------ OpenCL/m17020-pure.cl | 12 ++++++------ OpenCL/m17030-pure.cl | 12 ++++++------ OpenCL/m17040-pure.cl | 10 +++++----- OpenCL/m17200_a0-pure.cl | 4 ++-- OpenCL/m17200_a1-pure.cl | 4 ++-- OpenCL/m17200_a3-pure.cl | 4 ++-- OpenCL/m17210_a0-pure.cl | 4 ++-- OpenCL/m17210_a1-pure.cl | 4 ++-- OpenCL/m17210_a3-pure.cl | 4 ++-- OpenCL/m17220_a0-pure.cl | 4 ++-- OpenCL/m17220_a1-pure.cl | 4 ++-- OpenCL/m17220_a3-pure.cl | 4 ++-- OpenCL/m17225_a0-pure.cl | 4 ++-- OpenCL/m17225_a1-pure.cl | 4 ++-- OpenCL/m17225_a3-pure.cl | 4 ++-- OpenCL/m17230_a0-pure.cl | 4 ++-- OpenCL/m17230_a1-pure.cl | 4 ++-- OpenCL/m17230_a3-pure.cl | 4 ++-- OpenCL/m17300_a0-optimized.cl | 12 ++++++------ OpenCL/m17300_a1-optimized.cl | 12 ++++++------ OpenCL/m17300_a3-optimized.cl | 12 ++++++------ OpenCL/m17400_a0-optimized.cl | 12 ++++++------ OpenCL/m17400_a1-optimized.cl | 12 ++++++------ OpenCL/m17400_a3-optimized.cl | 12 ++++++------ OpenCL/m17500_a0-optimized.cl | 12 ++++++------ OpenCL/m17500_a1-optimized.cl | 12 ++++++------ OpenCL/m17500_a3-optimized.cl | 12 ++++++------ OpenCL/m17600_a0-optimized.cl | 12 ++++++------ OpenCL/m17600_a1-optimized.cl | 12 ++++++------ OpenCL/m17600_a3-optimized.cl | 12 ++++++------ OpenCL/m17700_a0-optimized.cl | 12 ++++++------ OpenCL/m17700_a1-optimized.cl | 12 ++++++------ OpenCL/m17700_a3-optimized.cl | 12 ++++++------ OpenCL/m17800_a0-optimized.cl | 12 ++++++------ OpenCL/m17800_a1-optimized.cl | 12 ++++++------ OpenCL/m17800_a3-optimized.cl | 12 ++++++------ OpenCL/m17900_a0-optimized.cl | 12 ++++++------ OpenCL/m17900_a1-optimized.cl | 12 ++++++------ OpenCL/m17900_a3-optimized.cl | 12 ++++++------ OpenCL/m18000_a0-optimized.cl | 12 ++++++------ OpenCL/m18000_a1-optimized.cl | 12 ++++++------ OpenCL/m18000_a3-optimized.cl | 12 ++++++------ OpenCL/m18100_a0-pure.cl | 4 ++-- OpenCL/m18100_a1-pure.cl | 4 ++-- OpenCL/m18100_a3-pure.cl | 4 ++-- OpenCL/m18200_a0-optimized.cl | 12 ++++++------ OpenCL/m18200_a0-pure.cl | 4 ++-- OpenCL/m18200_a1-optimized.cl | 12 ++++++------ OpenCL/m18200_a1-pure.cl | 4 ++-- OpenCL/m18200_a3-optimized.cl | 12 ++++++------ OpenCL/m18200_a3-pure.cl | 4 ++-- OpenCL/m18300-pure.cl | 6 +++--- OpenCL/m18400-pure.cl | 6 +++--- OpenCL/m18500_a0-pure.cl | 4 ++-- OpenCL/m18500_a1-pure.cl | 4 ++-- OpenCL/m18500_a3-pure.cl | 4 ++-- OpenCL/m18600-pure.cl | 6 +++--- OpenCL/m18700_a0-optimized.cl | 12 ++++++------ OpenCL/m18700_a0-pure.cl | 4 ++-- OpenCL/m18700_a1-optimized.cl | 12 ++++++------ OpenCL/m18700_a1-pure.cl | 4 ++-- OpenCL/m18700_a3-optimized.cl | 12 ++++++------ OpenCL/m18700_a3-pure.cl | 4 ++-- OpenCL/m18800-pure.cl | 6 +++--- OpenCL/m18900-pure.cl | 6 +++--- OpenCL/m19000-pure.cl | 6 +++--- OpenCL/m19100-pure.cl | 6 +++--- OpenCL/m19200-pure.cl | 6 +++--- OpenCL/m19300_a0-pure.cl | 4 ++-- OpenCL/m19300_a1-pure.cl | 4 ++-- OpenCL/m19300_a3-pure.cl | 4 ++-- OpenCL/m19500_a0-pure.cl | 4 ++-- OpenCL/m19500_a1-pure.cl | 4 ++-- OpenCL/m19500_a3-pure.cl | 4 ++-- OpenCL/m19600-pure.cl | 6 +++--- OpenCL/m19700-pure.cl | 6 +++--- OpenCL/m19800-pure.cl | 6 +++--- OpenCL/m19900-pure.cl | 6 +++--- OpenCL/m20011-pure.cl | 6 +++--- OpenCL/m20012-pure.cl | 6 +++--- OpenCL/m20013-pure.cl | 6 +++--- OpenCL/m20500_a0-pure.cl | 4 ++-- OpenCL/m20500_a1-pure.cl | 4 ++-- OpenCL/m20500_a3-pure.cl | 4 ++-- OpenCL/m20510_a0-pure.cl | 4 ++-- OpenCL/m20510_a1-pure.cl | 4 ++-- OpenCL/m20510_a3-pure.cl | 4 ++-- OpenCL/m20600-pure.cl | 6 +++--- OpenCL/m20710_a0-optimized.cl | 12 ++++++------ OpenCL/m20710_a0-pure.cl | 4 ++-- OpenCL/m20710_a1-optimized.cl | 12 ++++++------ OpenCL/m20710_a1-pure.cl | 4 ++-- OpenCL/m20710_a3-optimized.cl | 12 ++++++------ OpenCL/m20710_a3-pure.cl | 4 ++-- OpenCL/m20712_a0-optimized.cl | 12 ++++++------ OpenCL/m20712_a0-pure.cl | 4 ++-- OpenCL/m20712_a1-optimized.cl | 12 ++++++------ OpenCL/m20712_a1-pure.cl | 4 ++-- OpenCL/m20712_a3-optimized.cl | 12 ++++++------ OpenCL/m20712_a3-pure.cl | 4 ++-- OpenCL/m20720_a0-pure.cl | 4 ++-- OpenCL/m20720_a1-pure.cl | 4 ++-- OpenCL/m20720_a3-pure.cl | 4 ++-- OpenCL/m20730_a0-pure.cl | 4 ++-- OpenCL/m20730_a1-pure.cl | 4 ++-- OpenCL/m20730_a3-pure.cl | 4 ++-- OpenCL/m20800_a0-optimized.cl | 12 ++++++------ OpenCL/m20800_a0-pure.cl | 4 ++-- OpenCL/m20800_a1-optimized.cl | 12 ++++++------ OpenCL/m20800_a1-pure.cl | 4 ++-- OpenCL/m20800_a3-optimized.cl | 12 ++++++------ OpenCL/m20800_a3-pure.cl | 4 ++-- OpenCL/m20900_a0-optimized.cl | 12 ++++++------ OpenCL/m20900_a0-pure.cl | 4 ++-- OpenCL/m20900_a1-optimized.cl | 12 ++++++------ OpenCL/m20900_a1-pure.cl | 4 ++-- OpenCL/m20900_a3-optimized.cl | 12 ++++++------ OpenCL/m20900_a3-pure.cl | 4 ++-- OpenCL/m21000_a0-optimized.cl | 12 ++++++------ OpenCL/m21000_a0-pure.cl | 4 ++-- OpenCL/m21000_a1-optimized.cl | 12 ++++++------ OpenCL/m21000_a1-pure.cl | 4 ++-- OpenCL/m21000_a3-optimized.cl | 12 ++++++------ OpenCL/m21000_a3-pure.cl | 4 ++-- OpenCL/m21100_a0-optimized.cl | 12 ++++++------ OpenCL/m21100_a0-pure.cl | 4 ++-- OpenCL/m21100_a1-optimized.cl | 12 ++++++------ OpenCL/m21100_a1-pure.cl | 4 ++-- OpenCL/m21100_a3-optimized.cl | 12 ++++++------ OpenCL/m21100_a3-pure.cl | 4 ++-- OpenCL/m21200_a0-optimized.cl | 12 ++++++------ OpenCL/m21200_a0-pure.cl | 4 ++-- OpenCL/m21200_a1-optimized.cl | 12 ++++++------ OpenCL/m21200_a1-pure.cl | 4 ++-- OpenCL/m21200_a3-optimized.cl | 12 ++++++------ OpenCL/m21200_a3-pure.cl | 4 ++-- OpenCL/m21300_a0-pure.cl | 4 ++-- OpenCL/m21300_a1-pure.cl | 4 ++-- OpenCL/m21300_a3-pure.cl | 4 ++-- OpenCL/m21310_a0-pure.cl | 4 ++-- OpenCL/m21310_a1-pure.cl | 4 ++-- OpenCL/m21310_a3-pure.cl | 4 ++-- OpenCL/m21400_a0-optimized.cl | 12 ++++++------ OpenCL/m21400_a0-pure.cl | 4 ++-- OpenCL/m21400_a1-optimized.cl | 12 ++++++------ OpenCL/m21400_a1-pure.cl | 4 ++-- OpenCL/m21400_a3-optimized.cl | 12 ++++++------ OpenCL/m21400_a3-pure.cl | 4 ++-- OpenCL/m21420_a0-pure.cl | 4 ++-- OpenCL/m21420_a1-pure.cl | 4 ++-- OpenCL/m21420_a3-pure.cl | 4 ++-- OpenCL/m21500-pure.cl | 6 +++--- OpenCL/m21600-pure.cl | 6 +++--- OpenCL/m21700-pure.cl | 6 +++--- OpenCL/m21800-pure.cl | 6 +++--- OpenCL/m22000-pure.cl | 14 +++++++------- OpenCL/m22001-pure.cl | 14 +++++++------- OpenCL/m22100-pure.cl | 6 +++--- OpenCL/m22200_a0-optimized.cl | 12 ++++++------ OpenCL/m22200_a0-pure.cl | 4 ++-- OpenCL/m22200_a1-optimized.cl | 12 ++++++------ OpenCL/m22200_a1-pure.cl | 4 ++-- OpenCL/m22200_a3-optimized.cl | 12 ++++++------ OpenCL/m22200_a3-pure.cl | 4 ++-- OpenCL/m22300_a0-optimized.cl | 12 ++++++------ OpenCL/m22300_a0-pure.cl | 4 ++-- OpenCL/m22300_a1-optimized.cl | 12 ++++++------ OpenCL/m22300_a1-pure.cl | 4 ++-- OpenCL/m22300_a3-optimized.cl | 12 ++++++------ OpenCL/m22300_a3-pure.cl | 4 ++-- OpenCL/m22400-pure.cl | 6 +++--- OpenCL/m22500_a0-optimized.cl | 12 ++++++------ OpenCL/m22500_a0-pure.cl | 4 ++-- OpenCL/m22500_a1-optimized.cl | 12 ++++++------ OpenCL/m22500_a1-pure.cl | 4 ++-- OpenCL/m22500_a3-optimized.cl | 12 ++++++------ OpenCL/m22500_a3-pure.cl | 4 ++-- OpenCL/m22600-pure.cl | 6 +++--- OpenCL/m22700-pure.cl | 8 ++++---- OpenCL/m22911_a0-pure.cl | 4 ++-- OpenCL/m22911_a1-pure.cl | 4 ++-- OpenCL/m22911_a3-pure.cl | 4 ++-- OpenCL/m22921_a0-pure.cl | 4 ++-- OpenCL/m22921_a1-pure.cl | 4 ++-- OpenCL/m22921_a3-pure.cl | 4 ++-- OpenCL/m22931_a0-pure.cl | 4 ++-- OpenCL/m22931_a1-pure.cl | 4 ++-- OpenCL/m22931_a3-pure.cl | 4 ++-- OpenCL/m22941_a0-pure.cl | 4 ++-- OpenCL/m22941_a1-pure.cl | 4 ++-- OpenCL/m22941_a3-pure.cl | 4 ++-- OpenCL/m22951_a0-pure.cl | 4 ++-- OpenCL/m22951_a1-pure.cl | 4 ++-- OpenCL/m22951_a3-pure.cl | 4 ++-- OpenCL/m23001_a0-optimized.cl | 12 ++++++------ OpenCL/m23001_a0-pure.cl | 4 ++-- OpenCL/m23001_a1-optimized.cl | 12 ++++++------ OpenCL/m23001_a1-pure.cl | 4 ++-- OpenCL/m23001_a3-optimized.cl | 12 ++++++------ OpenCL/m23001_a3-pure.cl | 4 ++-- OpenCL/m23002_a0-optimized.cl | 12 ++++++------ OpenCL/m23002_a0-pure.cl | 4 ++-- OpenCL/m23002_a1-optimized.cl | 12 ++++++------ OpenCL/m23002_a1-pure.cl | 4 ++-- OpenCL/m23002_a3-optimized.cl | 12 ++++++------ OpenCL/m23002_a3-pure.cl | 4 ++-- OpenCL/m23003_a0-optimized.cl | 12 ++++++------ OpenCL/m23003_a0-pure.cl | 4 ++-- OpenCL/m23003_a1-optimized.cl | 12 ++++++------ OpenCL/m23003_a1-pure.cl | 4 ++-- OpenCL/m23003_a3-optimized.cl | 12 ++++++------ OpenCL/m23003_a3-pure.cl | 4 ++-- OpenCL/m23100-pure.cl | 6 +++--- OpenCL/m23200-pure.cl | 6 +++--- OpenCL/m23300-pure.cl | 6 +++--- OpenCL/m23400-pure.cl | 10 +++++----- OpenCL/m23500-pure.cl | 10 +++++----- OpenCL/m23600-pure.cl | 10 +++++----- OpenCL/m23700-optimized.cl | 8 ++++---- OpenCL/m23700-pure.cl | 6 +++--- OpenCL/m23800-optimized.cl | 8 ++++---- OpenCL/m23800-pure.cl | 8 ++++---- OpenCL/m23900-pure.cl | 6 +++--- OpenCL/m24000-pure.cl | 6 +++--- OpenCL/m24100-pure.cl | 6 +++--- OpenCL/m24200-pure.cl | 6 +++--- OpenCL/m24300_a0-optimized.cl | 12 ++++++------ OpenCL/m24300_a0-pure.cl | 4 ++-- OpenCL/m24300_a1-optimized.cl | 12 ++++++------ OpenCL/m24300_a1-pure.cl | 4 ++-- OpenCL/m24300_a3-optimized.cl | 12 ++++++------ OpenCL/m24300_a3-pure.cl | 4 ++-- OpenCL/m24410-pure.cl | 6 +++--- OpenCL/m24420-pure.cl | 6 +++--- OpenCL/m24500-pure.cl | 6 +++--- OpenCL/m24610-pure.cl | 6 +++--- OpenCL/m24620-pure.cl | 6 +++--- OpenCL/m24630-pure.cl | 6 +++--- OpenCL/m24700_a0-optimized.cl | 12 ++++++------ OpenCL/m24700_a0-pure.cl | 4 ++-- OpenCL/m24700_a1-optimized.cl | 12 ++++++------ OpenCL/m24700_a1-pure.cl | 4 ++-- OpenCL/m24700_a3-optimized.cl | 12 ++++++------ OpenCL/m24700_a3-pure.cl | 4 ++-- OpenCL/m24800_a0-optimized.cl | 12 ++++++------ OpenCL/m24800_a0-pure.cl | 4 ++-- OpenCL/m24800_a1-optimized.cl | 12 ++++++------ OpenCL/m24800_a1-pure.cl | 4 ++-- OpenCL/m24800_a3-optimized.cl | 12 ++++++------ OpenCL/m24800_a3-pure.cl | 4 ++-- OpenCL/m24900_a0-optimized.cl | 12 ++++++------ OpenCL/m24900_a1-optimized.cl | 12 ++++++------ OpenCL/m24900_a3-optimized.cl | 12 ++++++------ OpenCL/m25000-pure.cl | 6 +++--- OpenCL/m25100-pure.cl | 6 +++--- OpenCL/m25200-pure.cl | 6 +++--- OpenCL/m25300-pure.cl | 6 +++--- OpenCL/m25400-pure.cl | 6 +++--- OpenCL/m25500-pure.cl | 8 ++++---- OpenCL/m25600-pure.cl | 6 +++--- OpenCL/m25700_a0-optimized.cl | 12 ++++++------ OpenCL/m25700_a1-optimized.cl | 12 ++++++------ OpenCL/m25700_a3-optimized.cl | 12 ++++++------ OpenCL/m25800-pure.cl | 6 +++--- OpenCL/m25900-pure.cl | 6 +++--- OpenCL/m26000_a0-pure.cl | 4 ++-- OpenCL/m26000_a1-pure.cl | 4 ++-- OpenCL/m26000_a3-pure.cl | 4 ++-- OpenCL/m26100-pure.cl | 6 +++--- OpenCL/m26200_a0-pure.cl | 4 ++-- OpenCL/m26200_a1-pure.cl | 4 ++-- OpenCL/m26200_a3-pure.cl | 4 ++-- OpenCL/m26300_a0-pure.cl | 4 ++-- OpenCL/m26300_a1-pure.cl | 4 ++-- OpenCL/m26300_a3-pure.cl | 4 ++-- OpenCL/m26401_a0-optimized.cl | 12 ++++++------ OpenCL/m26401_a1-optimized.cl | 12 ++++++------ OpenCL/m26401_a3-optimized.cl | 12 ++++++------ OpenCL/m26402_a0-optimized.cl | 12 ++++++------ OpenCL/m26402_a1-optimized.cl | 12 ++++++------ OpenCL/m26402_a3-optimized.cl | 12 ++++++------ OpenCL/m26403_a0-optimized.cl | 12 ++++++------ OpenCL/m26403_a1-optimized.cl | 12 ++++++------ OpenCL/m26403_a3-optimized.cl | 12 ++++++------ OpenCL/m26500-pure.cl | 6 +++--- OpenCL/m26600-pure.cl | 6 +++--- OpenCL/m26610-pure.cl | 6 +++--- OpenCL/m26700-pure.cl | 6 +++--- OpenCL/m26800-pure.cl | 6 +++--- OpenCL/m26900-pure.cl | 6 +++--- OpenCL/m27000-pure.cl | 6 +++--- OpenCL/m27100-pure.cl | 6 +++--- OpenCL/m27200_a0-optimized.cl | 12 ++++++------ OpenCL/m27200_a0-pure.cl | 4 ++-- OpenCL/m27200_a1-optimized.cl | 12 ++++++------ OpenCL/m27200_a1-pure.cl | 4 ++-- OpenCL/m27200_a3-optimized.cl | 12 ++++++------ OpenCL/m27200_a3-pure.cl | 4 ++-- OpenCL/m27300-pure.cl | 6 +++--- OpenCL/m27400-pure.cl | 6 +++--- OpenCL/m27500-pure.cl | 10 +++++----- OpenCL/m27600-pure.cl | 10 +++++----- OpenCL/m27700-pure.cl | 8 ++++---- OpenCL/m27800_a0-optimized.cl | 12 ++++++------ OpenCL/m27800_a1-optimized.cl | 12 ++++++------ OpenCL/m27800_a3-optimized.cl | 12 ++++++------ OpenCL/m27900_a0-optimized.cl | 12 ++++++------ OpenCL/m27900_a0-pure.cl | 4 ++-- OpenCL/m27900_a1-optimized.cl | 12 ++++++------ OpenCL/m27900_a1-pure.cl | 4 ++-- OpenCL/m27900_a3-optimized.cl | 12 ++++++------ OpenCL/m27900_a3-pure.cl | 4 ++-- OpenCL/m28000_a0-optimized.cl | 12 ++++++------ OpenCL/m28000_a0-pure.cl | 4 ++-- OpenCL/m28000_a1-optimized.cl | 12 ++++++------ OpenCL/m28000_a1-pure.cl | 4 ++-- OpenCL/m28000_a3-optimized.cl | 12 ++++++------ OpenCL/m28000_a3-pure.cl | 4 ++-- OpenCL/m28100-pure.cl | 6 +++--- OpenCL/m28200-pure.cl | 8 ++++---- OpenCL/m28300_a0-pure.cl | 4 ++-- OpenCL/m28300_a1-pure.cl | 4 ++-- OpenCL/m28300_a3-pure.cl | 4 ++-- OpenCL/m28400-pure.cl | 6 +++--- OpenCL/m28501_a0-pure.cl | 4 ++-- OpenCL/m28501_a1-pure.cl | 4 ++-- OpenCL/m28501_a3-pure.cl | 4 ++-- OpenCL/m28502_a0-pure.cl | 4 ++-- OpenCL/m28502_a1-pure.cl | 4 ++-- OpenCL/m28502_a3-pure.cl | 4 ++-- OpenCL/m28505_a0-pure.cl | 4 ++-- OpenCL/m28505_a1-pure.cl | 4 ++-- OpenCL/m28505_a3-pure.cl | 4 ++-- OpenCL/m28506_a0-pure.cl | 4 ++-- OpenCL/m28506_a1-pure.cl | 4 ++-- OpenCL/m28506_a3-pure.cl | 4 ++-- OpenCL/m28600-pure.cl | 6 +++--- OpenCL/m28700_a0-optimized.cl | 12 ++++++------ OpenCL/m28700_a0-pure.cl | 4 ++-- OpenCL/m28700_a1-optimized.cl | 12 ++++++------ OpenCL/m28700_a1-pure.cl | 4 ++-- OpenCL/m28700_a3-optimized.cl | 12 ++++++------ OpenCL/m28700_a3-pure.cl | 4 ++-- OpenCL/m28800-pure.cl | 6 +++--- OpenCL/m28900-pure.cl | 6 +++--- OpenCL/m29000_a0-pure.cl | 4 ++-- OpenCL/m29000_a1-pure.cl | 4 ++-- OpenCL/m29000_a3-pure.cl | 4 ++-- OpenCL/m29100_a0-pure.cl | 4 ++-- OpenCL/m29100_a1-pure.cl | 4 ++-- OpenCL/m29100_a3-pure.cl | 4 ++-- OpenCL/m29200_a0-pure.cl | 4 ++-- OpenCL/m29200_a1-pure.cl | 4 ++-- OpenCL/m29200_a3-pure.cl | 4 ++-- OpenCL/m29600-pure.cl | 6 +++--- OpenCL/m29700-pure.cl | 6 +++--- OpenCL/m29800-pure.cl | 8 ++++---- OpenCL/m29910-pure.cl | 6 +++--- OpenCL/m29920-pure.cl | 6 +++--- OpenCL/m29930-pure.cl | 6 +++--- OpenCL/m29940-pure.cl | 6 +++--- OpenCL/m30420_a0-optimized.cl | 12 ++++++------ OpenCL/m30420_a0-pure.cl | 4 ++-- OpenCL/m30420_a1-optimized.cl | 12 ++++++------ OpenCL/m30420_a1-pure.cl | 4 ++-- OpenCL/m30420_a3-optimized.cl | 12 ++++++------ OpenCL/m30420_a3-pure.cl | 4 ++-- OpenCL/m30500_a0-optimized.cl | 12 ++++++------ OpenCL/m30500_a0-pure.cl | 4 ++-- OpenCL/m30500_a1-optimized.cl | 12 ++++++------ OpenCL/m30500_a1-pure.cl | 4 ++-- OpenCL/m30500_a3-optimized.cl | 12 ++++++------ OpenCL/m30500_a3-pure.cl | 4 ++-- OpenCL/m30600-pure.cl | 6 +++--- OpenCL/m30700_a0-optimized.cl | 12 ++++++------ OpenCL/m30700_a0-pure.cl | 4 ++-- OpenCL/m30700_a1-optimized.cl | 12 ++++++------ OpenCL/m30700_a1-pure.cl | 4 ++-- OpenCL/m30700_a3-optimized.cl | 12 ++++++------ OpenCL/m30700_a3-pure.cl | 4 ++-- OpenCL/m30901_a0-pure.cl | 4 ++-- OpenCL/m30901_a1-pure.cl | 4 ++-- OpenCL/m30901_a3-pure.cl | 4 ++-- OpenCL/m30902_a0-pure.cl | 4 ++-- OpenCL/m30902_a1-pure.cl | 4 ++-- OpenCL/m30902_a3-pure.cl | 4 ++-- OpenCL/m30905_a0-pure.cl | 4 ++-- OpenCL/m30905_a1-pure.cl | 4 ++-- OpenCL/m30905_a3-pure.cl | 4 ++-- OpenCL/m30906_a0-pure.cl | 4 ++-- OpenCL/m30906_a1-pure.cl | 4 ++-- OpenCL/m30906_a3-pure.cl | 4 ++-- OpenCL/m31000_a0-optimized.cl | 12 ++++++------ OpenCL/m31000_a0-pure.cl | 4 ++-- OpenCL/m31000_a1-optimized.cl | 12 ++++++------ OpenCL/m31000_a1-pure.cl | 4 ++-- OpenCL/m31000_a3-optimized.cl | 12 ++++++------ OpenCL/m31000_a3-pure.cl | 4 ++-- OpenCL/m31100_a0-optimized.cl | 12 ++++++------ OpenCL/m31100_a0-pure.cl | 4 ++-- OpenCL/m31100_a1-optimized.cl | 12 ++++++------ OpenCL/m31100_a1-pure.cl | 4 ++-- OpenCL/m31100_a3-optimized.cl | 12 ++++++------ OpenCL/m31100_a3-pure.cl | 4 ++-- OpenCL/m31200-pure.cl | 6 +++--- OpenCL/m31300_a0-optimized.cl | 12 ++++++------ OpenCL/m31300_a0-pure.cl | 4 ++-- OpenCL/m31300_a1-optimized.cl | 12 ++++++------ OpenCL/m31300_a1-pure.cl | 4 ++-- OpenCL/m31300_a3-optimized.cl | 12 ++++++------ OpenCL/m31300_a3-pure.cl | 4 ++-- OpenCL/m31400_a0-optimized.cl | 12 ++++++------ OpenCL/m31400_a0-pure.cl | 4 ++-- OpenCL/m31400_a1-optimized.cl | 12 ++++++------ OpenCL/m31400_a1-pure.cl | 4 ++-- OpenCL/m31400_a3-optimized.cl | 12 ++++++------ OpenCL/m31400_a3-pure.cl | 4 ++-- OpenCL/m31500-pure.cl | 6 +++--- OpenCL/m31600-pure.cl | 6 +++--- OpenCL/m31700_a0-pure.cl | 4 ++-- OpenCL/m31700_a1-pure.cl | 4 ++-- OpenCL/m31700_a3-pure.cl | 4 ++-- OpenCL/m31800-pure.cl | 6 +++--- OpenCL/m31900-pure.cl | 6 +++--- OpenCL/m32000-pure.cl | 6 +++--- OpenCL/m32010-pure.cl | 6 +++--- OpenCL/m32020-pure.cl | 6 +++--- OpenCL/m32030-pure.cl | 6 +++--- OpenCL/m32040-pure.cl | 6 +++--- OpenCL/m32100-pure.cl | 6 +++--- OpenCL/m32200-pure.cl | 6 +++--- OpenCL/m32300_a0-optimized.cl | 12 ++++++------ OpenCL/m32300_a0-pure.cl | 4 ++-- OpenCL/m32300_a1-optimized.cl | 12 ++++++------ OpenCL/m32300_a1-pure.cl | 4 ++-- OpenCL/m32300_a3-optimized.cl | 12 ++++++------ OpenCL/m32300_a3-pure.cl | 4 ++-- OpenCL/m32410_a0-pure.cl | 4 ++-- OpenCL/m32410_a1-pure.cl | 4 ++-- OpenCL/m32410_a3-pure.cl | 4 ++-- OpenCL/m32420_a0-pure.cl | 4 ++-- OpenCL/m32420_a1-pure.cl | 4 ++-- OpenCL/m32420_a3-pure.cl | 4 ++-- OpenCL/m32500-pure.cl | 6 +++--- OpenCL/m32600_a0-pure.cl | 4 ++-- OpenCL/m32600_a1-pure.cl | 4 ++-- OpenCL/m32600_a3-pure.cl | 4 ++-- OpenCL/m32700-pure.cl | 6 +++--- OpenCL/m33300_a0-pure.cl | 4 ++-- OpenCL/m33300_a1-pure.cl | 4 ++-- OpenCL/m33300_a3-pure.cl | 4 ++-- OpenCL/m33500_a0-optimized.cl | 12 ++++++------ OpenCL/m33500_a1-optimized.cl | 12 ++++++------ OpenCL/m33500_a3-optimized.cl | 12 ++++++------ OpenCL/m33501_a0-optimized.cl | 12 ++++++------ OpenCL/m33501_a1-optimized.cl | 12 ++++++------ OpenCL/m33501_a3-optimized.cl | 12 ++++++------ OpenCL/m33502_a0-optimized.cl | 12 ++++++------ OpenCL/m33502_a1-optimized.cl | 12 ++++++------ OpenCL/m33502_a3-optimized.cl | 12 ++++++------ OpenCL/m33700-pure.cl | 6 +++--- OpenCL/m70000-pure.cl | 6 +++--- OpenCL/m70100-pure.cl | 6 +++--- OpenCL/m72000-pure.cl | 6 +++--- OpenCL/m73000-pure.cl | 6 +++--- OpenCL/markov_be.cl | 6 +++--- OpenCL/markov_le.cl | 6 +++--- OpenCL/shared.cl | 10 +++++----- src/backend.c | 2 +- 1369 files changed, 5139 insertions(+), 5124 deletions(-) diff --git a/OpenCL/amp_a0.cl b/OpenCL/amp_a0.cl index f39750c54..e09b9fbb2 100644 --- a/OpenCL/amp_a0.cl +++ b/OpenCL/amp_a0.cl @@ -13,7 +13,7 @@ #include M2S(INCLUDE_PATH/inc_amp.h) #endif -KERNEL_FQ void amp (KERN_ATTR_AMP) +KERNEL_FQ void HC_ATTR_SEQ amp (KERN_ATTR_AMP) { const u64 gid = get_global_id (0); diff --git a/OpenCL/amp_a1.cl b/OpenCL/amp_a1.cl index 99d91c168..eff542abe 100644 --- a/OpenCL/amp_a1.cl +++ b/OpenCL/amp_a1.cl @@ -11,7 +11,7 @@ #include M2S(INCLUDE_PATH/inc_amp.h) #endif -KERNEL_FQ void amp (KERN_ATTR_AMP) +KERNEL_FQ void HC_ATTR_SEQ amp (KERN_ATTR_AMP) { const u64 gid = get_global_id (0); diff --git a/OpenCL/amp_a3.cl b/OpenCL/amp_a3.cl index abdb3f7a6..e657252eb 100644 --- a/OpenCL/amp_a3.cl +++ b/OpenCL/amp_a3.cl @@ -10,7 +10,7 @@ #include M2S(INCLUDE_PATH/inc_amp.h) #endif -KERNEL_FQ void amp (KERN_ATTR_AMP) +KERNEL_FQ void HC_ATTR_SEQ amp (KERN_ATTR_AMP) { const u64 gid = get_global_id (0); diff --git a/OpenCL/inc_vendor.h b/OpenCL/inc_vendor.h index 52ef8188d..b443e3f96 100644 --- a/OpenCL/inc_vendor.h +++ b/OpenCL/inc_vendor.h @@ -148,6 +148,21 @@ using namespace metal; #define HC_INLINE inline static #endif +#if defined FIXED_LOCAL_SIZE +#define HC_ATTR_SEQ FIXED_THREAD_COUNT((FIXED_LOCAL_SIZE)) +#else +#if defined IS_AMD && defined IS_GPU +#define HC_ATTR_SEQ +#define DECLSPEC HC_INLINE +#elif defined IS_HIP +#define HC_ATTR_SEQ __launch_bounds__((MAX_THREADS_PER_BLOCK), 0) +#define DECLSPEC __device__ HC_INLINE +#else +#define HC_ATTR_SEQ +#define DECLSPEC +#endif +#endif + #if defined IS_AMD && defined IS_GPU #define DECLSPEC HC_INLINE #elif defined IS_HIP diff --git a/OpenCL/m00000_a0-optimized.cl b/OpenCL/m00000_a0-optimized.cl index 366f74bfa..565fbf6a0 100644 --- a/OpenCL/m00000_a0-optimized.cl +++ b/OpenCL/m00000_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00000_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00000_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -143,15 +143,15 @@ KERNEL_FQ void m00000_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00000_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00000_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00000_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00000_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00000_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00000_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -293,10 +293,10 @@ KERNEL_FQ void m00000_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00000_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00000_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00000_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00000_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00000_a0-pure.cl b/OpenCL/m00000_a0-pure.cl index 0dafc0653..2dce8f19d 100644 --- a/OpenCL/m00000_a0-pure.cl +++ b/OpenCL/m00000_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00000_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00000_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void m00000_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00000_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00000_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00000_a1-optimized.cl b/OpenCL/m00000_a1-optimized.cl index 17cf06a79..8f78de8e6 100644 --- a/OpenCL/m00000_a1-optimized.cl +++ b/OpenCL/m00000_a1-optimized.cl @@ -15,7 +15,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00000_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -201,15 +201,15 @@ KERNEL_FQ void m00000_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00000_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00000_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00000_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -410,10 +410,10 @@ KERNEL_FQ void m00000_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00000_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00000_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00000_a1-pure.cl b/OpenCL/m00000_a1-pure.cl index 9d7dfded8..4da9fa9be 100644 --- a/OpenCL/m00000_a1-pure.cl +++ b/OpenCL/m00000_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00000_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00000_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void m00000_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00000_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00000_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00000_a3-optimized.cl b/OpenCL/m00000_a3-optimized.cl index bbe35c2c5..4e4d607d4 100644 --- a/OpenCL/m00000_a3-optimized.cl +++ b/OpenCL/m00000_a3-optimized.cl @@ -423,7 +423,7 @@ DECLSPEC void m00000s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m00000_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00000_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -463,7 +463,7 @@ KERNEL_FQ void m00000_m04 (KERN_ATTR_VECTOR ()) m00000m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00000_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00000_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -503,7 +503,7 @@ KERNEL_FQ void m00000_m08 (KERN_ATTR_VECTOR ()) m00000m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00000_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00000_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -543,7 +543,7 @@ KERNEL_FQ void m00000_m16 (KERN_ATTR_VECTOR ()) m00000m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00000_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00000_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -583,7 +583,7 @@ KERNEL_FQ void m00000_s04 (KERN_ATTR_VECTOR ()) m00000s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00000_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00000_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -623,7 +623,7 @@ KERNEL_FQ void m00000_s08 (KERN_ATTR_VECTOR ()) m00000s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00000_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00000_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m00000_a3-pure.cl b/OpenCL/m00000_a3-pure.cl index aae28aa7f..3582c4f9a 100644 --- a/OpenCL/m00000_a3-pure.cl +++ b/OpenCL/m00000_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00000_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00000_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void m00000_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m00000_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00000_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00010_a0-optimized.cl b/OpenCL/m00010_a0-optimized.cl index 30c3311e1..f1c8dc697 100644 --- a/OpenCL/m00010_a0-optimized.cl +++ b/OpenCL/m00010_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00010_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00010_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -217,15 +217,15 @@ KERNEL_FQ void m00010_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00010_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00010_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00010_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00010_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00010_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00010_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -441,10 +441,10 @@ KERNEL_FQ void m00010_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00010_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00010_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00010_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00010_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00010_a0-pure.cl b/OpenCL/m00010_a0-pure.cl index cbbcd203e..5decf5b9d 100644 --- a/OpenCL/m00010_a0-pure.cl +++ b/OpenCL/m00010_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00010_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00010_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void m00010_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00010_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00010_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00010_a1-optimized.cl b/OpenCL/m00010_a1-optimized.cl index c707d50ce..428f283fe 100644 --- a/OpenCL/m00010_a1-optimized.cl +++ b/OpenCL/m00010_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00010_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00010_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -275,15 +275,15 @@ KERNEL_FQ void m00010_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00010_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00010_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00010_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00010_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00010_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00010_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -559,10 +559,10 @@ KERNEL_FQ void m00010_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00010_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00010_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00010_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00010_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00010_a1-pure.cl b/OpenCL/m00010_a1-pure.cl index 0fdf5de48..3a1cec1ee 100644 --- a/OpenCL/m00010_a1-pure.cl +++ b/OpenCL/m00010_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00010_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00010_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -67,7 +67,7 @@ KERNEL_FQ void m00010_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00010_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00010_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00010_a3-optimized.cl b/OpenCL/m00010_a3-optimized.cl index 84ddc589c..296cd2432 100644 --- a/OpenCL/m00010_a3-optimized.cl +++ b/OpenCL/m00010_a3-optimized.cl @@ -472,7 +472,7 @@ DECLSPEC void m00010s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m00010_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00010_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -512,7 +512,7 @@ KERNEL_FQ void m00010_m04 (KERN_ATTR_VECTOR ()) m00010m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00010_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00010_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -552,7 +552,7 @@ KERNEL_FQ void m00010_m08 (KERN_ATTR_VECTOR ()) m00010m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00010_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00010_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -592,7 +592,7 @@ KERNEL_FQ void m00010_m16 (KERN_ATTR_VECTOR ()) m00010m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00010_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00010_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -632,7 +632,7 @@ KERNEL_FQ void m00010_s04 (KERN_ATTR_VECTOR ()) m00010s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00010_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00010_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -672,7 +672,7 @@ KERNEL_FQ void m00010_s08 (KERN_ATTR_VECTOR ()) m00010s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00010_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00010_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m00010_a3-pure.cl b/OpenCL/m00010_a3-pure.cl index fdc18f513..83af011db 100644 --- a/OpenCL/m00010_a3-pure.cl +++ b/OpenCL/m00010_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00010_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00010_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void m00010_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m00010_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00010_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00020_a0-optimized.cl b/OpenCL/m00020_a0-optimized.cl index 6bf430fba..a3572eb90 100644 --- a/OpenCL/m00020_a0-optimized.cl +++ b/OpenCL/m00020_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00020_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00020_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -197,15 +197,15 @@ KERNEL_FQ void m00020_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00020_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00020_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00020_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00020_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00020_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00020_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -401,10 +401,10 @@ KERNEL_FQ void m00020_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00020_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00020_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00020_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00020_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00020_a0-pure.cl b/OpenCL/m00020_a0-pure.cl index c0721a27b..51c53358f 100644 --- a/OpenCL/m00020_a0-pure.cl +++ b/OpenCL/m00020_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00020_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00020_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -64,7 +64,7 @@ KERNEL_FQ void m00020_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00020_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00020_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00020_a1-optimized.cl b/OpenCL/m00020_a1-optimized.cl index 64ca7e34c..e8c3fcbf7 100644 --- a/OpenCL/m00020_a1-optimized.cl +++ b/OpenCL/m00020_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00020_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00020_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -253,15 +253,15 @@ KERNEL_FQ void m00020_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00020_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00020_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00020_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00020_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00020_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00020_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -515,10 +515,10 @@ KERNEL_FQ void m00020_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00020_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00020_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00020_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00020_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00020_a1-pure.cl b/OpenCL/m00020_a1-pure.cl index accb063cb..7bec72c21 100644 --- a/OpenCL/m00020_a1-pure.cl +++ b/OpenCL/m00020_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00020_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00020_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -58,7 +58,7 @@ KERNEL_FQ void m00020_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00020_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00020_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00020_a3-optimized.cl b/OpenCL/m00020_a3-optimized.cl index adb7076f4..de749b9e2 100644 --- a/OpenCL/m00020_a3-optimized.cl +++ b/OpenCL/m00020_a3-optimized.cl @@ -373,7 +373,7 @@ DECLSPEC void m00020s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m00020_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00020_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -422,7 +422,7 @@ KERNEL_FQ void m00020_m04 (KERN_ATTR_BASIC ()) m00020m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00020_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00020_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -471,7 +471,7 @@ KERNEL_FQ void m00020_m08 (KERN_ATTR_BASIC ()) m00020m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00020_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00020_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -520,7 +520,7 @@ KERNEL_FQ void m00020_m16 (KERN_ATTR_BASIC ()) m00020m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00020_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00020_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -569,7 +569,7 @@ KERNEL_FQ void m00020_s04 (KERN_ATTR_BASIC ()) m00020s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00020_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00020_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -618,7 +618,7 @@ KERNEL_FQ void m00020_s08 (KERN_ATTR_BASIC ()) m00020s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00020_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00020_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m00020_a3-pure.cl b/OpenCL/m00020_a3-pure.cl index db1bb450c..96f650814 100644 --- a/OpenCL/m00020_a3-pure.cl +++ b/OpenCL/m00020_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00020_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00020_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -75,7 +75,7 @@ KERNEL_FQ void m00020_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m00020_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00020_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00030_a0-optimized.cl b/OpenCL/m00030_a0-optimized.cl index 10f0e1c4e..ad44498c9 100644 --- a/OpenCL/m00030_a0-optimized.cl +++ b/OpenCL/m00030_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00030_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00030_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -222,15 +222,15 @@ KERNEL_FQ void m00030_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00030_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00030_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00030_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00030_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00030_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00030_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -451,10 +451,10 @@ KERNEL_FQ void m00030_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00030_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00030_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00030_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00030_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00030_a0-pure.cl b/OpenCL/m00030_a0-pure.cl index faee2c23b..9ad5e1201 100644 --- a/OpenCL/m00030_a0-pure.cl +++ b/OpenCL/m00030_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00030_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00030_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void m00030_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00030_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00030_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00030_a1-optimized.cl b/OpenCL/m00030_a1-optimized.cl index 1d84bc0e7..7cc881a53 100644 --- a/OpenCL/m00030_a1-optimized.cl +++ b/OpenCL/m00030_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00030_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00030_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -280,15 +280,15 @@ KERNEL_FQ void m00030_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00030_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00030_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00030_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00030_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00030_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00030_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -569,10 +569,10 @@ KERNEL_FQ void m00030_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00030_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00030_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00030_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00030_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00030_a1-pure.cl b/OpenCL/m00030_a1-pure.cl index 7ecbe7a95..ae5b04121 100644 --- a/OpenCL/m00030_a1-pure.cl +++ b/OpenCL/m00030_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00030_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00030_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -67,7 +67,7 @@ KERNEL_FQ void m00030_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00030_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00030_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00030_a3-optimized.cl b/OpenCL/m00030_a3-optimized.cl index fe11425bb..b79163461 100644 --- a/OpenCL/m00030_a3-optimized.cl +++ b/OpenCL/m00030_a3-optimized.cl @@ -472,7 +472,7 @@ DECLSPEC void m00030s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m00030_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00030_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -512,7 +512,7 @@ KERNEL_FQ void m00030_m04 (KERN_ATTR_VECTOR ()) m00030m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00030_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00030_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -552,7 +552,7 @@ KERNEL_FQ void m00030_m08 (KERN_ATTR_VECTOR ()) m00030m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00030_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00030_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -592,7 +592,7 @@ KERNEL_FQ void m00030_m16 (KERN_ATTR_VECTOR ()) m00030m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00030_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00030_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -632,7 +632,7 @@ KERNEL_FQ void m00030_s04 (KERN_ATTR_VECTOR ()) m00030s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00030_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00030_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -672,7 +672,7 @@ KERNEL_FQ void m00030_s08 (KERN_ATTR_VECTOR ()) m00030s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00030_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00030_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m00030_a3-pure.cl b/OpenCL/m00030_a3-pure.cl index 6fd205531..60963fab0 100644 --- a/OpenCL/m00030_a3-pure.cl +++ b/OpenCL/m00030_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00030_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00030_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -96,7 +96,7 @@ KERNEL_FQ void m00030_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m00030_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00030_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00040_a0-optimized.cl b/OpenCL/m00040_a0-optimized.cl index 1282eba47..49f7bfa9d 100644 --- a/OpenCL/m00040_a0-optimized.cl +++ b/OpenCL/m00040_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00040_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00040_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -202,15 +202,15 @@ KERNEL_FQ void m00040_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00040_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00040_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00040_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00040_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00040_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00040_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -411,10 +411,10 @@ KERNEL_FQ void m00040_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00040_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00040_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00040_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00040_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00040_a0-pure.cl b/OpenCL/m00040_a0-pure.cl index 66d556c43..ccbef3c5f 100644 --- a/OpenCL/m00040_a0-pure.cl +++ b/OpenCL/m00040_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00040_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00040_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -64,7 +64,7 @@ KERNEL_FQ void m00040_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00040_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00040_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00040_a1-optimized.cl b/OpenCL/m00040_a1-optimized.cl index 6e29d87cd..7bb0ace78 100644 --- a/OpenCL/m00040_a1-optimized.cl +++ b/OpenCL/m00040_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00040_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00040_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -258,15 +258,15 @@ KERNEL_FQ void m00040_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00040_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00040_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00040_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00040_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00040_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00040_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -525,10 +525,10 @@ KERNEL_FQ void m00040_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00040_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00040_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00040_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00040_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00040_a1-pure.cl b/OpenCL/m00040_a1-pure.cl index 488b183eb..d372f75a4 100644 --- a/OpenCL/m00040_a1-pure.cl +++ b/OpenCL/m00040_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00040_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00040_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -58,7 +58,7 @@ KERNEL_FQ void m00040_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00040_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00040_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00040_a3-optimized.cl b/OpenCL/m00040_a3-optimized.cl index cf87f67d3..5ae016dd3 100644 --- a/OpenCL/m00040_a3-optimized.cl +++ b/OpenCL/m00040_a3-optimized.cl @@ -373,7 +373,7 @@ DECLSPEC void m00040s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m00040_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00040_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -422,7 +422,7 @@ KERNEL_FQ void m00040_m04 (KERN_ATTR_BASIC ()) m00040m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00040_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00040_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -471,7 +471,7 @@ KERNEL_FQ void m00040_m08 (KERN_ATTR_BASIC ()) m00040m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00040_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00040_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -520,7 +520,7 @@ KERNEL_FQ void m00040_m16 (KERN_ATTR_BASIC ()) m00040m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00040_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00040_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -569,7 +569,7 @@ KERNEL_FQ void m00040_s04 (KERN_ATTR_BASIC ()) m00040s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00040_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00040_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -618,7 +618,7 @@ KERNEL_FQ void m00040_s08 (KERN_ATTR_BASIC ()) m00040s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00040_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00040_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m00040_a3-pure.cl b/OpenCL/m00040_a3-pure.cl index 6dd3f5cd2..0fc3425d5 100644 --- a/OpenCL/m00040_a3-pure.cl +++ b/OpenCL/m00040_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00040_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00040_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -87,7 +87,7 @@ KERNEL_FQ void m00040_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m00040_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00040_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00050_a0-optimized.cl b/OpenCL/m00050_a0-optimized.cl index 398e4d90a..25b66a683 100644 --- a/OpenCL/m00050_a0-optimized.cl +++ b/OpenCL/m00050_a0-optimized.cl @@ -101,7 +101,7 @@ DECLSPEC void hmac_md5_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_AS md5_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m00050_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00050_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -206,15 +206,15 @@ KERNEL_FQ void m00050_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00050_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00050_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00050_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00050_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00050_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00050_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -331,10 +331,10 @@ KERNEL_FQ void m00050_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00050_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00050_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00050_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00050_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00050_a0-pure.cl b/OpenCL/m00050_a0-pure.cl index 2a5d3f089..d1141b5a1 100644 --- a/OpenCL/m00050_a0-pure.cl +++ b/OpenCL/m00050_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00050_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00050_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void m00050_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00050_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00050_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00050_a1-optimized.cl b/OpenCL/m00050_a1-optimized.cl index 1067f8cc1..900a28be7 100644 --- a/OpenCL/m00050_a1-optimized.cl +++ b/OpenCL/m00050_a1-optimized.cl @@ -99,7 +99,7 @@ DECLSPEC void hmac_md5_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_AS md5_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m00050_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00050_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -264,15 +264,15 @@ KERNEL_FQ void m00050_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00050_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00050_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00050_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00050_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00050_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00050_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -449,10 +449,10 @@ KERNEL_FQ void m00050_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00050_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00050_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00050_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00050_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00050_a1-pure.cl b/OpenCL/m00050_a1-pure.cl index 9de09b4bd..855c7cd56 100644 --- a/OpenCL/m00050_a1-pure.cl +++ b/OpenCL/m00050_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00050_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00050_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -92,7 +92,7 @@ KERNEL_FQ void m00050_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00050_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00050_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00050_a3-optimized.cl b/OpenCL/m00050_a3-optimized.cl index 0ea68753c..40e21fd92 100644 --- a/OpenCL/m00050_a3-optimized.cl +++ b/OpenCL/m00050_a3-optimized.cl @@ -315,7 +315,7 @@ DECLSPEC void m00050s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m00050_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00050_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -364,7 +364,7 @@ KERNEL_FQ void m00050_m04 (KERN_ATTR_BASIC ()) m00050m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00050_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00050_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -413,7 +413,7 @@ KERNEL_FQ void m00050_m08 (KERN_ATTR_BASIC ()) m00050m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00050_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00050_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -462,7 +462,7 @@ KERNEL_FQ void m00050_m16 (KERN_ATTR_BASIC ()) m00050m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00050_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00050_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -511,7 +511,7 @@ KERNEL_FQ void m00050_s04 (KERN_ATTR_BASIC ()) m00050s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00050_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00050_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -560,7 +560,7 @@ KERNEL_FQ void m00050_s08 (KERN_ATTR_BASIC ()) m00050s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00050_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00050_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m00050_a3-pure.cl b/OpenCL/m00050_a3-pure.cl index 9b118a8b5..93b7f9f40 100644 --- a/OpenCL/m00050_a3-pure.cl +++ b/OpenCL/m00050_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00050_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00050_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -78,7 +78,7 @@ KERNEL_FQ void m00050_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m00050_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00050_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00060_a0-optimized.cl b/OpenCL/m00060_a0-optimized.cl index 578bb7297..2cca873ce 100644 --- a/OpenCL/m00060_a0-optimized.cl +++ b/OpenCL/m00060_a0-optimized.cl @@ -101,7 +101,7 @@ DECLSPEC void hmac_md5_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_AS md5_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m00060_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00060_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -228,15 +228,15 @@ KERNEL_FQ void m00060_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00060_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00060_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00060_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00060_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00060_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00060_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -375,10 +375,10 @@ KERNEL_FQ void m00060_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00060_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00060_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00060_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00060_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00060_a0-pure.cl b/OpenCL/m00060_a0-pure.cl index ddfe80a7a..0ca9338b4 100644 --- a/OpenCL/m00060_a0-pure.cl +++ b/OpenCL/m00060_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00060_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00060_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void m00060_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00060_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00060_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00060_a1-optimized.cl b/OpenCL/m00060_a1-optimized.cl index 8d41540d1..635c5b98a 100644 --- a/OpenCL/m00060_a1-optimized.cl +++ b/OpenCL/m00060_a1-optimized.cl @@ -99,7 +99,7 @@ DECLSPEC void hmac_md5_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_AS md5_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m00060_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00060_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -267,15 +267,15 @@ KERNEL_FQ void m00060_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00060_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00060_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00060_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00060_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00060_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00060_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -455,10 +455,10 @@ KERNEL_FQ void m00060_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00060_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00060_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00060_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00060_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00060_a1-pure.cl b/OpenCL/m00060_a1-pure.cl index 2341e99a9..9710d0c10 100644 --- a/OpenCL/m00060_a1-pure.cl +++ b/OpenCL/m00060_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00060_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00060_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -94,7 +94,7 @@ KERNEL_FQ void m00060_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00060_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00060_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00060_a3-optimized.cl b/OpenCL/m00060_a3-optimized.cl index e829b6eb9..823c143ae 100644 --- a/OpenCL/m00060_a3-optimized.cl +++ b/OpenCL/m00060_a3-optimized.cl @@ -311,7 +311,7 @@ DECLSPEC void m00060s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m00060_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00060_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -360,7 +360,7 @@ KERNEL_FQ void m00060_m04 (KERN_ATTR_BASIC ()) m00060m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00060_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00060_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -409,7 +409,7 @@ KERNEL_FQ void m00060_m08 (KERN_ATTR_BASIC ()) m00060m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00060_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00060_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -458,7 +458,7 @@ KERNEL_FQ void m00060_m16 (KERN_ATTR_BASIC ()) m00060m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00060_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00060_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -507,7 +507,7 @@ KERNEL_FQ void m00060_s04 (KERN_ATTR_BASIC ()) m00060s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00060_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00060_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -556,7 +556,7 @@ KERNEL_FQ void m00060_s08 (KERN_ATTR_BASIC ()) m00060s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00060_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00060_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m00060_a3-pure.cl b/OpenCL/m00060_a3-pure.cl index 9e9f7aa8b..3eb62ef5b 100644 --- a/OpenCL/m00060_a3-pure.cl +++ b/OpenCL/m00060_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00060_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00060_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void m00060_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m00060_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00060_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00070_a0-optimized.cl b/OpenCL/m00070_a0-optimized.cl index d866de9ec..a713936ad 100644 --- a/OpenCL/m00070_a0-optimized.cl +++ b/OpenCL/m00070_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00070_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00070_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -152,15 +152,15 @@ KERNEL_FQ void m00070_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00070_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00070_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00070_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00070_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00070_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00070_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -311,10 +311,10 @@ KERNEL_FQ void m00070_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00070_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00070_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00070_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00070_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00070_a0-pure.cl b/OpenCL/m00070_a0-pure.cl index 0a0c2e6de..602fa7b8f 100644 --- a/OpenCL/m00070_a0-pure.cl +++ b/OpenCL/m00070_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00070_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00070_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void m00070_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00070_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00070_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00070_a1-optimized.cl b/OpenCL/m00070_a1-optimized.cl index 4376a0f12..e691e5604 100644 --- a/OpenCL/m00070_a1-optimized.cl +++ b/OpenCL/m00070_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00070_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00070_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -210,15 +210,15 @@ KERNEL_FQ void m00070_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00070_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00070_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00070_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00070_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00070_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00070_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -429,10 +429,10 @@ KERNEL_FQ void m00070_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00070_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00070_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00070_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00070_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00070_a1-pure.cl b/OpenCL/m00070_a1-pure.cl index f35be6a39..b47f6cb08 100644 --- a/OpenCL/m00070_a1-pure.cl +++ b/OpenCL/m00070_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00070_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00070_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void m00070_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00070_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00070_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00070_a3-optimized.cl b/OpenCL/m00070_a3-optimized.cl index 95cf2ac2b..ba7c58ce0 100644 --- a/OpenCL/m00070_a3-optimized.cl +++ b/OpenCL/m00070_a3-optimized.cl @@ -426,7 +426,7 @@ DECLSPEC void m00070s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m00070_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00070_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -466,7 +466,7 @@ KERNEL_FQ void m00070_m04 (KERN_ATTR_VECTOR ()) m00070m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00070_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00070_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -506,7 +506,7 @@ KERNEL_FQ void m00070_m08 (KERN_ATTR_VECTOR ()) m00070m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00070_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00070_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -546,7 +546,7 @@ KERNEL_FQ void m00070_m16 (KERN_ATTR_VECTOR ()) m00070m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00070_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00070_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -586,7 +586,7 @@ KERNEL_FQ void m00070_s04 (KERN_ATTR_VECTOR ()) m00070s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00070_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00070_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -626,7 +626,7 @@ KERNEL_FQ void m00070_s08 (KERN_ATTR_VECTOR ()) m00070s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00070_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00070_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m00070_a3-pure.cl b/OpenCL/m00070_a3-pure.cl index 84a22e63d..22a82bd84 100644 --- a/OpenCL/m00070_a3-pure.cl +++ b/OpenCL/m00070_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m00070_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00070_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -83,7 +83,7 @@ KERNEL_FQ void m00070_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m00070_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00070_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00100_a0-optimized.cl b/OpenCL/m00100_a0-optimized.cl index 26d1c1753..0d8d82a58 100644 --- a/OpenCL/m00100_a0-optimized.cl +++ b/OpenCL/m00100_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00100_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00100_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -188,15 +188,15 @@ KERNEL_FQ void m00100_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00100_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00100_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00100_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00100_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00100_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00100_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -389,10 +389,10 @@ KERNEL_FQ void m00100_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00100_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00100_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00100_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00100_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00100_a0-pure.cl b/OpenCL/m00100_a0-pure.cl index 5142cedb3..702c52d9a 100644 --- a/OpenCL/m00100_a0-pure.cl +++ b/OpenCL/m00100_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00100_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00100_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void m00100_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00100_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00100_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00100_a1-optimized.cl b/OpenCL/m00100_a1-optimized.cl index 4b33bbb0b..59f49d433 100644 --- a/OpenCL/m00100_a1-optimized.cl +++ b/OpenCL/m00100_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00100_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00100_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -244,15 +244,15 @@ KERNEL_FQ void m00100_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00100_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00100_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00100_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00100_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00100_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00100_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -503,10 +503,10 @@ KERNEL_FQ void m00100_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00100_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00100_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00100_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00100_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00100_a1-pure.cl b/OpenCL/m00100_a1-pure.cl index 9007a7f9c..5692f6c31 100644 --- a/OpenCL/m00100_a1-pure.cl +++ b/OpenCL/m00100_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00100_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00100_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void m00100_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00100_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00100_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00100_a3-optimized.cl b/OpenCL/m00100_a3-optimized.cl index ceb01ef4f..772b9ee1e 100644 --- a/OpenCL/m00100_a3-optimized.cl +++ b/OpenCL/m00100_a3-optimized.cl @@ -516,7 +516,7 @@ DECLSPEC void m00100s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m00100_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00100_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -556,7 +556,7 @@ KERNEL_FQ void m00100_m04 (KERN_ATTR_VECTOR ()) m00100m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00100_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00100_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -596,7 +596,7 @@ KERNEL_FQ void m00100_m08 (KERN_ATTR_VECTOR ()) m00100m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00100_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00100_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -636,7 +636,7 @@ KERNEL_FQ void m00100_m16 (KERN_ATTR_VECTOR ()) m00100m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00100_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00100_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -676,7 +676,7 @@ KERNEL_FQ void m00100_s04 (KERN_ATTR_VECTOR ()) m00100s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00100_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00100_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -716,7 +716,7 @@ KERNEL_FQ void m00100_s08 (KERN_ATTR_VECTOR ()) m00100s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00100_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00100_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m00100_a3-pure.cl b/OpenCL/m00100_a3-pure.cl index 06695068d..92ccdd776 100644 --- a/OpenCL/m00100_a3-pure.cl +++ b/OpenCL/m00100_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00100_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00100_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void m00100_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m00100_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00100_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00110_a0-optimized.cl b/OpenCL/m00110_a0-optimized.cl index 7289495de..0e8f63edf 100644 --- a/OpenCL/m00110_a0-optimized.cl +++ b/OpenCL/m00110_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00110_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00110_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -261,15 +261,15 @@ KERNEL_FQ void m00110_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00110_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00110_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00110_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00110_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00110_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00110_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -535,10 +535,10 @@ KERNEL_FQ void m00110_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00110_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00110_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00110_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00110_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00110_a0-pure.cl b/OpenCL/m00110_a0-pure.cl index 8f5ef2a0e..812d274ab 100644 --- a/OpenCL/m00110_a0-pure.cl +++ b/OpenCL/m00110_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00110_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00110_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void m00110_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00110_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00110_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00110_a1-optimized.cl b/OpenCL/m00110_a1-optimized.cl index 2591c95d2..a20483fab 100644 --- a/OpenCL/m00110_a1-optimized.cl +++ b/OpenCL/m00110_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00110_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00110_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -319,15 +319,15 @@ KERNEL_FQ void m00110_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00110_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00110_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00110_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00110_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00110_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00110_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -653,10 +653,10 @@ KERNEL_FQ void m00110_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00110_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00110_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00110_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00110_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00110_a1-pure.cl b/OpenCL/m00110_a1-pure.cl index 24b42d999..3f889aaad 100644 --- a/OpenCL/m00110_a1-pure.cl +++ b/OpenCL/m00110_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00110_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00110_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -67,7 +67,7 @@ KERNEL_FQ void m00110_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00110_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00110_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00110_a3-optimized.cl b/OpenCL/m00110_a3-optimized.cl index d989e422a..ef007b45e 100644 --- a/OpenCL/m00110_a3-optimized.cl +++ b/OpenCL/m00110_a3-optimized.cl @@ -564,7 +564,7 @@ DECLSPEC void m00110s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m00110_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00110_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -604,7 +604,7 @@ KERNEL_FQ void m00110_m04 (KERN_ATTR_VECTOR ()) m00110m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00110_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00110_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -644,7 +644,7 @@ KERNEL_FQ void m00110_m08 (KERN_ATTR_VECTOR ()) m00110m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00110_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00110_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -684,7 +684,7 @@ KERNEL_FQ void m00110_m16 (KERN_ATTR_VECTOR ()) m00110m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00110_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00110_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -724,7 +724,7 @@ KERNEL_FQ void m00110_s04 (KERN_ATTR_VECTOR ()) m00110s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00110_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00110_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -764,7 +764,7 @@ KERNEL_FQ void m00110_s08 (KERN_ATTR_VECTOR ()) m00110s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00110_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00110_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m00110_a3-pure.cl b/OpenCL/m00110_a3-pure.cl index 6be13eeb2..3c365c4eb 100644 --- a/OpenCL/m00110_a3-pure.cl +++ b/OpenCL/m00110_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00110_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00110_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void m00110_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m00110_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00110_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00120_a0-optimized.cl b/OpenCL/m00120_a0-optimized.cl index 86e3df072..2f52c73b6 100644 --- a/OpenCL/m00120_a0-optimized.cl +++ b/OpenCL/m00120_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00120_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00120_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -253,15 +253,15 @@ KERNEL_FQ void m00120_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00120_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00120_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00120_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00120_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00120_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00120_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -507,10 +507,10 @@ KERNEL_FQ void m00120_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00120_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00120_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00120_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00120_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00120_a0-pure.cl b/OpenCL/m00120_a0-pure.cl index e1b9b1e67..f9d4e3d93 100644 --- a/OpenCL/m00120_a0-pure.cl +++ b/OpenCL/m00120_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00120_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00120_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -64,7 +64,7 @@ KERNEL_FQ void m00120_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00120_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00120_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00120_a1-optimized.cl b/OpenCL/m00120_a1-optimized.cl index 528b4427b..b0519f5e1 100644 --- a/OpenCL/m00120_a1-optimized.cl +++ b/OpenCL/m00120_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00120_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00120_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -309,15 +309,15 @@ KERNEL_FQ void m00120_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00120_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00120_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00120_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00120_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00120_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00120_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -621,10 +621,10 @@ KERNEL_FQ void m00120_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00120_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00120_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00120_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00120_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00120_a1-pure.cl b/OpenCL/m00120_a1-pure.cl index de06c0a45..13afd0bd4 100644 --- a/OpenCL/m00120_a1-pure.cl +++ b/OpenCL/m00120_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00120_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00120_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -58,7 +58,7 @@ KERNEL_FQ void m00120_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00120_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00120_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00120_a3-optimized.cl b/OpenCL/m00120_a3-optimized.cl index 843ce7179..d6ffdf912 100644 --- a/OpenCL/m00120_a3-optimized.cl +++ b/OpenCL/m00120_a3-optimized.cl @@ -467,7 +467,7 @@ DECLSPEC void m00120s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m00120_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00120_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -516,7 +516,7 @@ KERNEL_FQ void m00120_m04 (KERN_ATTR_BASIC ()) m00120m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00120_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00120_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -565,7 +565,7 @@ KERNEL_FQ void m00120_m08 (KERN_ATTR_BASIC ()) m00120m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00120_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00120_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -614,7 +614,7 @@ KERNEL_FQ void m00120_m16 (KERN_ATTR_BASIC ()) m00120m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00120_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00120_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -663,7 +663,7 @@ KERNEL_FQ void m00120_s04 (KERN_ATTR_BASIC ()) m00120s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00120_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00120_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -712,7 +712,7 @@ KERNEL_FQ void m00120_s08 (KERN_ATTR_BASIC ()) m00120s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00120_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00120_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m00120_a3-pure.cl b/OpenCL/m00120_a3-pure.cl index 609c14308..0d567d6b1 100644 --- a/OpenCL/m00120_a3-pure.cl +++ b/OpenCL/m00120_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00120_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00120_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -75,7 +75,7 @@ KERNEL_FQ void m00120_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m00120_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00120_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00130_a0-optimized.cl b/OpenCL/m00130_a0-optimized.cl index de71f2af1..6d67251db 100644 --- a/OpenCL/m00130_a0-optimized.cl +++ b/OpenCL/m00130_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00130_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00130_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -266,15 +266,15 @@ KERNEL_FQ void m00130_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00130_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00130_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00130_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00130_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00130_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00130_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -545,10 +545,10 @@ KERNEL_FQ void m00130_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00130_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00130_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00130_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00130_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00130_a0-pure.cl b/OpenCL/m00130_a0-pure.cl index d7fcf39a8..d6ad720eb 100644 --- a/OpenCL/m00130_a0-pure.cl +++ b/OpenCL/m00130_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00130_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00130_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void m00130_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00130_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00130_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00130_a1-optimized.cl b/OpenCL/m00130_a1-optimized.cl index 25f84e81f..b8412d61f 100644 --- a/OpenCL/m00130_a1-optimized.cl +++ b/OpenCL/m00130_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00130_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00130_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -324,15 +324,15 @@ KERNEL_FQ void m00130_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00130_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00130_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00130_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00130_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00130_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00130_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -663,10 +663,10 @@ KERNEL_FQ void m00130_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00130_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00130_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00130_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00130_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00130_a1-pure.cl b/OpenCL/m00130_a1-pure.cl index c8676867c..dc11b3398 100644 --- a/OpenCL/m00130_a1-pure.cl +++ b/OpenCL/m00130_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00130_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00130_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -67,7 +67,7 @@ KERNEL_FQ void m00130_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00130_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00130_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00130_a3-optimized.cl b/OpenCL/m00130_a3-optimized.cl index 3ea05c652..cb5babd4a 100644 --- a/OpenCL/m00130_a3-optimized.cl +++ b/OpenCL/m00130_a3-optimized.cl @@ -564,7 +564,7 @@ DECLSPEC void m00130s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m00130_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00130_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -604,7 +604,7 @@ KERNEL_FQ void m00130_m04 (KERN_ATTR_VECTOR ()) m00130m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00130_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00130_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -644,7 +644,7 @@ KERNEL_FQ void m00130_m08 (KERN_ATTR_VECTOR ()) m00130m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00130_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00130_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -684,7 +684,7 @@ KERNEL_FQ void m00130_m16 (KERN_ATTR_VECTOR ()) m00130m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00130_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00130_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -724,7 +724,7 @@ KERNEL_FQ void m00130_s04 (KERN_ATTR_VECTOR ()) m00130s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00130_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00130_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -764,7 +764,7 @@ KERNEL_FQ void m00130_s08 (KERN_ATTR_VECTOR ()) m00130s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00130_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00130_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m00130_a3-pure.cl b/OpenCL/m00130_a3-pure.cl index 733e5a2fd..ccfd74c6a 100644 --- a/OpenCL/m00130_a3-pure.cl +++ b/OpenCL/m00130_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00130_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00130_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void m00130_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m00130_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00130_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00140_a0-optimized.cl b/OpenCL/m00140_a0-optimized.cl index 0a01ab7cb..d1a8675f4 100644 --- a/OpenCL/m00140_a0-optimized.cl +++ b/OpenCL/m00140_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00140_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00140_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -246,15 +246,15 @@ KERNEL_FQ void m00140_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00140_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00140_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00140_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00140_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00140_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00140_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -505,10 +505,10 @@ KERNEL_FQ void m00140_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00140_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00140_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00140_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00140_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00140_a0-pure.cl b/OpenCL/m00140_a0-pure.cl index 3e4a5fd36..d0e5f3265 100644 --- a/OpenCL/m00140_a0-pure.cl +++ b/OpenCL/m00140_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00140_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00140_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -64,7 +64,7 @@ KERNEL_FQ void m00140_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00140_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00140_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00140_a1-optimized.cl b/OpenCL/m00140_a1-optimized.cl index d0dce68c6..d87be7e2f 100644 --- a/OpenCL/m00140_a1-optimized.cl +++ b/OpenCL/m00140_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00140_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00140_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -302,15 +302,15 @@ KERNEL_FQ void m00140_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00140_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00140_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00140_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00140_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00140_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00140_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -619,10 +619,10 @@ KERNEL_FQ void m00140_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00140_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00140_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00140_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00140_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00140_a1-pure.cl b/OpenCL/m00140_a1-pure.cl index 3bd8223ba..d433e2f84 100644 --- a/OpenCL/m00140_a1-pure.cl +++ b/OpenCL/m00140_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00140_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00140_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -58,7 +58,7 @@ KERNEL_FQ void m00140_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00140_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00140_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00140_a3-optimized.cl b/OpenCL/m00140_a3-optimized.cl index e0ef0076a..ead2365b2 100644 --- a/OpenCL/m00140_a3-optimized.cl +++ b/OpenCL/m00140_a3-optimized.cl @@ -467,7 +467,7 @@ DECLSPEC void m00140s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m00140_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00140_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -516,7 +516,7 @@ KERNEL_FQ void m00140_m04 (KERN_ATTR_BASIC ()) m00140m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00140_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00140_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -565,7 +565,7 @@ KERNEL_FQ void m00140_m08 (KERN_ATTR_BASIC ()) m00140m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00140_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00140_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -614,7 +614,7 @@ KERNEL_FQ void m00140_m16 (KERN_ATTR_BASIC ()) m00140m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00140_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00140_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -663,7 +663,7 @@ KERNEL_FQ void m00140_s04 (KERN_ATTR_BASIC ()) m00140s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00140_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00140_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -712,7 +712,7 @@ KERNEL_FQ void m00140_s08 (KERN_ATTR_BASIC ()) m00140s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00140_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00140_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m00140_a3-pure.cl b/OpenCL/m00140_a3-pure.cl index dd921714f..f58633634 100644 --- a/OpenCL/m00140_a3-pure.cl +++ b/OpenCL/m00140_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00140_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00140_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -75,7 +75,7 @@ KERNEL_FQ void m00140_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m00140_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00140_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00150_a0-optimized.cl b/OpenCL/m00150_a0-optimized.cl index 69b7f3ea1..3bd130a13 100644 --- a/OpenCL/m00150_a0-optimized.cl +++ b/OpenCL/m00150_a0-optimized.cl @@ -105,7 +105,7 @@ DECLSPEC void hmac_sha1_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_A sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m00150_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00150_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -219,15 +219,15 @@ KERNEL_FQ void m00150_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00150_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00150_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00150_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00150_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00150_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00150_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -353,10 +353,10 @@ KERNEL_FQ void m00150_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00150_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00150_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00150_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00150_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00150_a0-pure.cl b/OpenCL/m00150_a0-pure.cl index 29b929c95..e40fb42e6 100644 --- a/OpenCL/m00150_a0-pure.cl +++ b/OpenCL/m00150_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00150_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00150_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void m00150_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00150_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00150_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00150_a1-optimized.cl b/OpenCL/m00150_a1-optimized.cl index 3fb66a02f..2869a4976 100644 --- a/OpenCL/m00150_a1-optimized.cl +++ b/OpenCL/m00150_a1-optimized.cl @@ -103,7 +103,7 @@ DECLSPEC void hmac_sha1_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_A sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m00150_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00150_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -285,15 +285,15 @@ KERNEL_FQ void m00150_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00150_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00150_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00150_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00150_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00150_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00150_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -487,10 +487,10 @@ KERNEL_FQ void m00150_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00150_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00150_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00150_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00150_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00150_a1-pure.cl b/OpenCL/m00150_a1-pure.cl index 7a607e8b7..afac04952 100644 --- a/OpenCL/m00150_a1-pure.cl +++ b/OpenCL/m00150_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00150_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00150_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -92,7 +92,7 @@ KERNEL_FQ void m00150_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00150_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00150_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00150_a3-optimized.cl b/OpenCL/m00150_a3-optimized.cl index b959bfb8a..3b7851153 100644 --- a/OpenCL/m00150_a3-optimized.cl +++ b/OpenCL/m00150_a3-optimized.cl @@ -319,7 +319,7 @@ DECLSPEC void m00150s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m00150_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00150_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -368,7 +368,7 @@ KERNEL_FQ void m00150_m04 (KERN_ATTR_BASIC ()) m00150m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00150_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00150_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -417,7 +417,7 @@ KERNEL_FQ void m00150_m08 (KERN_ATTR_BASIC ()) m00150m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00150_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00150_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -466,7 +466,7 @@ KERNEL_FQ void m00150_m16 (KERN_ATTR_BASIC ()) m00150m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00150_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00150_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -515,7 +515,7 @@ KERNEL_FQ void m00150_s04 (KERN_ATTR_BASIC ()) m00150s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00150_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00150_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -564,7 +564,7 @@ KERNEL_FQ void m00150_s08 (KERN_ATTR_BASIC ()) m00150s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00150_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00150_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m00150_a3-pure.cl b/OpenCL/m00150_a3-pure.cl index 789ebb4d5..70b4be04d 100644 --- a/OpenCL/m00150_a3-pure.cl +++ b/OpenCL/m00150_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00150_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00150_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -78,7 +78,7 @@ KERNEL_FQ void m00150_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m00150_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00150_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00160_a0-optimized.cl b/OpenCL/m00160_a0-optimized.cl index cf77ebe6b..75c51edc5 100644 --- a/OpenCL/m00160_a0-optimized.cl +++ b/OpenCL/m00160_a0-optimized.cl @@ -105,7 +105,7 @@ DECLSPEC void hmac_sha1_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_A sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m00160_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00160_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -232,15 +232,15 @@ KERNEL_FQ void m00160_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00160_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00160_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00160_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00160_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00160_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00160_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -379,10 +379,10 @@ KERNEL_FQ void m00160_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00160_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00160_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00160_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00160_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00160_a0-pure.cl b/OpenCL/m00160_a0-pure.cl index 95648d839..3bfc522a9 100644 --- a/OpenCL/m00160_a0-pure.cl +++ b/OpenCL/m00160_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00160_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00160_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void m00160_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00160_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00160_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00160_a1-optimized.cl b/OpenCL/m00160_a1-optimized.cl index 730e29a27..e1c9807be 100644 --- a/OpenCL/m00160_a1-optimized.cl +++ b/OpenCL/m00160_a1-optimized.cl @@ -103,7 +103,7 @@ DECLSPEC void hmac_sha1_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_A sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m00160_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00160_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -290,15 +290,15 @@ KERNEL_FQ void m00160_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00160_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00160_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00160_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00160_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00160_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00160_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -497,10 +497,10 @@ KERNEL_FQ void m00160_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00160_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00160_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00160_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00160_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00160_a1-pure.cl b/OpenCL/m00160_a1-pure.cl index a5c3830c8..2489d9b79 100644 --- a/OpenCL/m00160_a1-pure.cl +++ b/OpenCL/m00160_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00160_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00160_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -94,7 +94,7 @@ KERNEL_FQ void m00160_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00160_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00160_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00160_a3-optimized.cl b/OpenCL/m00160_a3-optimized.cl index d59399df0..b401e1df3 100644 --- a/OpenCL/m00160_a3-optimized.cl +++ b/OpenCL/m00160_a3-optimized.cl @@ -315,7 +315,7 @@ DECLSPEC void m00160s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m00160_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00160_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -364,7 +364,7 @@ KERNEL_FQ void m00160_m04 (KERN_ATTR_BASIC ()) m00160m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00160_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00160_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -413,7 +413,7 @@ KERNEL_FQ void m00160_m08 (KERN_ATTR_BASIC ()) m00160m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00160_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00160_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -462,7 +462,7 @@ KERNEL_FQ void m00160_m16 (KERN_ATTR_BASIC ()) m00160m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00160_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00160_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -511,7 +511,7 @@ KERNEL_FQ void m00160_s04 (KERN_ATTR_BASIC ()) m00160s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00160_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00160_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -560,7 +560,7 @@ KERNEL_FQ void m00160_s08 (KERN_ATTR_BASIC ()) m00160s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00160_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00160_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m00160_a3-pure.cl b/OpenCL/m00160_a3-pure.cl index 907e393c7..4874d3dfe 100644 --- a/OpenCL/m00160_a3-pure.cl +++ b/OpenCL/m00160_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00160_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00160_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void m00160_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m00160_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00160_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00170_a0-optimized.cl b/OpenCL/m00170_a0-optimized.cl index 0eb3ee0bb..16be4e154 100644 --- a/OpenCL/m00170_a0-optimized.cl +++ b/OpenCL/m00170_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00170_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00170_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -193,15 +193,15 @@ KERNEL_FQ void m00170_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00170_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00170_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00170_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00170_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00170_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00170_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -399,10 +399,10 @@ KERNEL_FQ void m00170_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00170_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00170_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00170_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00170_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00170_a0-pure.cl b/OpenCL/m00170_a0-pure.cl index 624f51f4e..e22864f8d 100644 --- a/OpenCL/m00170_a0-pure.cl +++ b/OpenCL/m00170_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00170_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00170_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void m00170_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00170_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00170_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00170_a1-optimized.cl b/OpenCL/m00170_a1-optimized.cl index b281b9f90..2215464cc 100644 --- a/OpenCL/m00170_a1-optimized.cl +++ b/OpenCL/m00170_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00170_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00170_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -249,15 +249,15 @@ KERNEL_FQ void m00170_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00170_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00170_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00170_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00170_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00170_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00170_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -513,10 +513,10 @@ KERNEL_FQ void m00170_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00170_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00170_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00170_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00170_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00170_a1-pure.cl b/OpenCL/m00170_a1-pure.cl index c7c9aa16b..748e5e1e6 100644 --- a/OpenCL/m00170_a1-pure.cl +++ b/OpenCL/m00170_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00170_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00170_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void m00170_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00170_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00170_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00170_a3-optimized.cl b/OpenCL/m00170_a3-optimized.cl index a96d1d5a7..5774a3d48 100644 --- a/OpenCL/m00170_a3-optimized.cl +++ b/OpenCL/m00170_a3-optimized.cl @@ -513,7 +513,7 @@ DECLSPEC void m00170s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m00170_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00170_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -553,7 +553,7 @@ KERNEL_FQ void m00170_m04 (KERN_ATTR_VECTOR ()) m00170m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00170_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00170_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -593,7 +593,7 @@ KERNEL_FQ void m00170_m08 (KERN_ATTR_VECTOR ()) m00170m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00170_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00170_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -633,7 +633,7 @@ KERNEL_FQ void m00170_m16 (KERN_ATTR_VECTOR ()) m00170m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00170_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00170_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -673,7 +673,7 @@ KERNEL_FQ void m00170_s04 (KERN_ATTR_VECTOR ()) m00170s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00170_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00170_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -713,7 +713,7 @@ KERNEL_FQ void m00170_s08 (KERN_ATTR_VECTOR ()) m00170s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00170_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00170_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m00170_a3-pure.cl b/OpenCL/m00170_a3-pure.cl index efebacac5..bdb3d6a92 100644 --- a/OpenCL/m00170_a3-pure.cl +++ b/OpenCL/m00170_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00170_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00170_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void m00170_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m00170_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00170_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00200_a0-optimized.cl b/OpenCL/m00200_a0-optimized.cl index d7b759cf7..e62e6edc8 100644 --- a/OpenCL/m00200_a0-optimized.cl +++ b/OpenCL/m00200_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_simd.cl) #endif -KERNEL_FQ void m00200_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00200_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -134,15 +134,15 @@ KERNEL_FQ void m00200_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00200_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00200_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00200_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00200_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00200_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00200_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -272,10 +272,10 @@ KERNEL_FQ void m00200_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00200_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00200_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00200_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00200_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00200_a1-optimized.cl b/OpenCL/m00200_a1-optimized.cl index 5cc2e46e7..ef9004e69 100644 --- a/OpenCL/m00200_a1-optimized.cl +++ b/OpenCL/m00200_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_simd.cl) #endif -KERNEL_FQ void m00200_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00200_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -196,15 +196,15 @@ KERNEL_FQ void m00200_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00200_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00200_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00200_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00200_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00200_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00200_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -398,10 +398,10 @@ KERNEL_FQ void m00200_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00200_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00200_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00200_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00200_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00200_a3-optimized.cl b/OpenCL/m00200_a3-optimized.cl index 2de401b84..e08b42b0d 100644 --- a/OpenCL/m00200_a3-optimized.cl +++ b/OpenCL/m00200_a3-optimized.cl @@ -340,7 +340,7 @@ DECLSPEC void m00200s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO CODE_POST_S; } -KERNEL_FQ void m00200_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00200_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -380,7 +380,7 @@ KERNEL_FQ void m00200_m04 (KERN_ATTR_VECTOR ()) m00200m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00200_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00200_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -420,7 +420,7 @@ KERNEL_FQ void m00200_m08 (KERN_ATTR_VECTOR ()) m00200m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00200_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00200_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -460,7 +460,7 @@ KERNEL_FQ void m00200_m16 (KERN_ATTR_VECTOR ()) m00200m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00200_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00200_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -500,7 +500,7 @@ KERNEL_FQ void m00200_s04 (KERN_ATTR_VECTOR ()) m00200s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00200_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00200_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -540,7 +540,7 @@ KERNEL_FQ void m00200_s08 (KERN_ATTR_VECTOR ()) m00200s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00200_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00200_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m00300_a0-optimized.cl b/OpenCL/m00300_a0-optimized.cl index 594d190dc..5be00b4fb 100644 --- a/OpenCL/m00300_a0-optimized.cl +++ b/OpenCL/m00300_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00300_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00300_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -313,15 +313,15 @@ KERNEL_FQ void m00300_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00300_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00300_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00300_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00300_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00300_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00300_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -639,10 +639,10 @@ KERNEL_FQ void m00300_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00300_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00300_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00300_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00300_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00300_a0-pure.cl b/OpenCL/m00300_a0-pure.cl index a328a5e83..496436a14 100644 --- a/OpenCL/m00300_a0-pure.cl +++ b/OpenCL/m00300_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00300_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00300_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -83,7 +83,7 @@ KERNEL_FQ void m00300_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00300_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00300_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00300_a1-optimized.cl b/OpenCL/m00300_a1-optimized.cl index 77b0ffb0c..2876543bc 100644 --- a/OpenCL/m00300_a1-optimized.cl +++ b/OpenCL/m00300_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00300_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00300_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -369,15 +369,15 @@ KERNEL_FQ void m00300_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00300_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00300_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00300_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00300_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00300_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00300_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -753,10 +753,10 @@ KERNEL_FQ void m00300_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00300_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00300_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00300_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00300_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00300_a1-pure.cl b/OpenCL/m00300_a1-pure.cl index 3ba139992..cb9667833 100644 --- a/OpenCL/m00300_a1-pure.cl +++ b/OpenCL/m00300_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00300_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00300_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -79,7 +79,7 @@ KERNEL_FQ void m00300_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00300_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00300_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00300_a3-optimized.cl b/OpenCL/m00300_a3-optimized.cl index 185cd9938..c883c6bcc 100644 --- a/OpenCL/m00300_a3-optimized.cl +++ b/OpenCL/m00300_a3-optimized.cl @@ -767,7 +767,7 @@ DECLSPEC void m00300s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m00300_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00300_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -807,7 +807,7 @@ KERNEL_FQ void m00300_m04 (KERN_ATTR_VECTOR ()) m00300m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00300_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00300_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -847,7 +847,7 @@ KERNEL_FQ void m00300_m08 (KERN_ATTR_VECTOR ()) m00300m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00300_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00300_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -887,7 +887,7 @@ KERNEL_FQ void m00300_m16 (KERN_ATTR_VECTOR ()) m00300m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00300_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00300_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -927,7 +927,7 @@ KERNEL_FQ void m00300_s04 (KERN_ATTR_VECTOR ()) m00300s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00300_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00300_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -967,7 +967,7 @@ KERNEL_FQ void m00300_s08 (KERN_ATTR_VECTOR ()) m00300s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00300_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00300_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m00300_a3-pure.cl b/OpenCL/m00300_a3-pure.cl index dcd9ac736..c9c17712d 100644 --- a/OpenCL/m00300_a3-pure.cl +++ b/OpenCL/m00300_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m00300_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00300_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -92,7 +92,7 @@ KERNEL_FQ void m00300_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m00300_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00300_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00400-optimized.cl b/OpenCL/m00400-optimized.cl index 8ddeb789a..a8b94d1de 100644 --- a/OpenCL/m00400-optimized.cl +++ b/OpenCL/m00400-optimized.cl @@ -23,7 +23,7 @@ typedef struct phpass_tmp } phpass_tmp_t; -KERNEL_FQ void m00400_init (KERN_ATTR_TMPS (phpass_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m00400_init (KERN_ATTR_TMPS (phpass_tmp_t)) { /** * base @@ -120,7 +120,7 @@ KERNEL_FQ void m00400_init (KERN_ATTR_TMPS (phpass_tmp_t)) tmps[gid].digest_buf[3] = digest[3]; } -KERNEL_FQ void m00400_loop (KERN_ATTR_TMPS (phpass_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m00400_loop (KERN_ATTR_TMPS (phpass_tmp_t)) { /** * base @@ -211,7 +211,7 @@ KERNEL_FQ void m00400_loop (KERN_ATTR_TMPS (phpass_tmp_t)) unpackv (tmps, digest_buf, gid, 3, digest[3]); } -KERNEL_FQ void m00400_comp (KERN_ATTR_TMPS (phpass_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m00400_comp (KERN_ATTR_TMPS (phpass_tmp_t)) { /** * modifier diff --git a/OpenCL/m00400-pure.cl b/OpenCL/m00400-pure.cl index 6fa76b732..9648ef530 100644 --- a/OpenCL/m00400-pure.cl +++ b/OpenCL/m00400-pure.cl @@ -23,7 +23,7 @@ typedef struct phpass_tmp } phpass_tmp_t; -KERNEL_FQ void m00400_init (KERN_ATTR_TMPS (phpass_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m00400_init (KERN_ATTR_TMPS (phpass_tmp_t)) { /** * base @@ -60,7 +60,7 @@ KERNEL_FQ void m00400_init (KERN_ATTR_TMPS (phpass_tmp_t)) tmps[gid].digest_buf[3] = digest[3]; } -KERNEL_FQ void m00400_loop (KERN_ATTR_TMPS (phpass_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m00400_loop (KERN_ATTR_TMPS (phpass_tmp_t)) { /** * base @@ -161,7 +161,7 @@ KERNEL_FQ void m00400_loop (KERN_ATTR_TMPS (phpass_tmp_t)) tmps[gid].digest_buf[3] = digest[3]; } -KERNEL_FQ void m00400_comp (KERN_ATTR_TMPS (phpass_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m00400_comp (KERN_ATTR_TMPS (phpass_tmp_t)) { /** * modifier diff --git a/OpenCL/m00500-optimized.cl b/OpenCL/m00500-optimized.cl index f44294283..b3952468e 100644 --- a/OpenCL/m00500-optimized.cl +++ b/OpenCL/m00500-optimized.cl @@ -659,7 +659,7 @@ DECLSPEC void append_1st (PRIVATE_AS u32 *block0, PRIVATE_AS u32 *block1, PRIVAT } } -KERNEL_FQ void m00500_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m00500_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * base @@ -822,7 +822,7 @@ KERNEL_FQ void m00500_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) tmps[gid].digest_buf[3] = digest[3]; } -KERNEL_FQ void m00500_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m00500_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * base @@ -1010,7 +1010,7 @@ KERNEL_FQ void m00500_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) tmps[gid].digest_buf[3] = digest[3]; } -KERNEL_FQ void m00500_comp (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m00500_comp (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * modifier diff --git a/OpenCL/m00500-pure.cl b/OpenCL/m00500-pure.cl index 6c9700639..cb5fd15c1 100644 --- a/OpenCL/m00500-pure.cl +++ b/OpenCL/m00500-pure.cl @@ -24,7 +24,7 @@ typedef struct md5crypt_tmp #define md5crypt_magic 0x00243124u -KERNEL_FQ void m00500_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m00500_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * base @@ -130,7 +130,7 @@ KERNEL_FQ void m00500_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) tmps[gid].digest_buf[3] = md5_ctx.h[3]; } -KERNEL_FQ void m00500_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m00500_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * base @@ -225,7 +225,7 @@ KERNEL_FQ void m00500_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) tmps[gid].digest_buf[3] = digest[3]; } -KERNEL_FQ void m00500_comp (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m00500_comp (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * modifier diff --git a/OpenCL/m00600_a0-optimized.cl b/OpenCL/m00600_a0-optimized.cl index 1402dde1c..72643abc3 100644 --- a/OpenCL/m00600_a0-optimized.cl +++ b/OpenCL/m00600_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2b.cl) #endif -KERNEL_FQ void m00600_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00600_m04 (KERN_ATTR_RULES ()) { /** * base @@ -94,15 +94,15 @@ KERNEL_FQ void m00600_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00600_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00600_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00600_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00600_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00600_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00600_s04 (KERN_ATTR_RULES ()) { /** * base @@ -192,10 +192,10 @@ KERNEL_FQ void m00600_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00600_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00600_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00600_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00600_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00600_a0-pure.cl b/OpenCL/m00600_a0-pure.cl index 8324fd1be..109bbca8a 100644 --- a/OpenCL/m00600_a0-pure.cl +++ b/OpenCL/m00600_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2b.cl) #endif -KERNEL_FQ void m00600_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00600_mxx (KERN_ATTR_RULES ()) { /** * base @@ -57,7 +57,7 @@ KERNEL_FQ void m00600_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00600_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00600_sxx (KERN_ATTR_RULES ()) { /** * base diff --git a/OpenCL/m00600_a1-optimized.cl b/OpenCL/m00600_a1-optimized.cl index 40edd58d3..a200b51dc 100644 --- a/OpenCL/m00600_a1-optimized.cl +++ b/OpenCL/m00600_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2b.cl) #endif -KERNEL_FQ void m00600_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00600_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -152,15 +152,15 @@ KERNEL_FQ void m00600_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00600_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00600_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00600_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00600_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00600_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00600_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -310,10 +310,10 @@ KERNEL_FQ void m00600_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00600_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00600_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00600_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00600_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00600_a1-pure.cl b/OpenCL/m00600_a1-pure.cl index bd7fe085a..42595f67b 100644 --- a/OpenCL/m00600_a1-pure.cl +++ b/OpenCL/m00600_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2b.cl) #endif -KERNEL_FQ void m00600_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00600_mxx (KERN_ATTR_BASIC ()) { /** * base @@ -55,7 +55,7 @@ KERNEL_FQ void m00600_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00600_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00600_sxx (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m00600_a3-optimized.cl b/OpenCL/m00600_a3-optimized.cl index 8cbdf7a95..7f17a2b11 100644 --- a/OpenCL/m00600_a3-optimized.cl +++ b/OpenCL/m00600_a3-optimized.cl @@ -186,7 +186,7 @@ DECLSPEC void m00600s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m00600_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00600_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -226,7 +226,7 @@ KERNEL_FQ void m00600_m04 (KERN_ATTR_VECTOR ()) m00600m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00600_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00600_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -266,7 +266,7 @@ KERNEL_FQ void m00600_m08 (KERN_ATTR_VECTOR ()) m00600m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00600_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00600_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -306,7 +306,7 @@ KERNEL_FQ void m00600_m16 (KERN_ATTR_VECTOR ()) m00600m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00600_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00600_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -346,7 +346,7 @@ KERNEL_FQ void m00600_s04 (KERN_ATTR_VECTOR ()) m00600s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00600_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00600_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -386,7 +386,7 @@ KERNEL_FQ void m00600_s08 (KERN_ATTR_VECTOR ()) m00600s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00600_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00600_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m00600_a3-pure.cl b/OpenCL/m00600_a3-pure.cl index 7b80092bf..23627b7b3 100644 --- a/OpenCL/m00600_a3-pure.cl +++ b/OpenCL/m00600_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2b.cl) #endif -KERNEL_FQ void m00600_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00600_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -66,7 +66,7 @@ KERNEL_FQ void m00600_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m00600_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00600_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00610_a0-optimized.cl b/OpenCL/m00610_a0-optimized.cl index 01b29a159..a0ea005f7 100644 --- a/OpenCL/m00610_a0-optimized.cl +++ b/OpenCL/m00610_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2b.cl) #endif -KERNEL_FQ void m00610_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00610_m04 (KERN_ATTR_RULES ()) { /** * base @@ -173,15 +173,15 @@ KERNEL_FQ void m00610_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00610_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00610_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00610_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00610_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00610_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00610_s04 (KERN_ATTR_RULES ()) { /** * base @@ -350,11 +350,11 @@ KERNEL_FQ void m00610_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00610_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00610_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00610_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00610_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00610_a0-pure.cl b/OpenCL/m00610_a0-pure.cl index f3d98ff9e..34c25301d 100644 --- a/OpenCL/m00610_a0-pure.cl +++ b/OpenCL/m00610_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2b.cl) #endif -KERNEL_FQ void m00610_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00610_mxx (KERN_ATTR_RULES ()) { /** * base @@ -68,7 +68,7 @@ KERNEL_FQ void m00610_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00610_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00610_sxx (KERN_ATTR_RULES ()) { /** * base diff --git a/OpenCL/m00610_a1-optimized.cl b/OpenCL/m00610_a1-optimized.cl index a6728bce4..efb8c62b7 100644 --- a/OpenCL/m00610_a1-optimized.cl +++ b/OpenCL/m00610_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2b.cl) #endif -KERNEL_FQ void m00610_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00610_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -231,15 +231,15 @@ KERNEL_FQ void m00610_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00610_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00610_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00610_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00610_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00610_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00610_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -468,11 +468,11 @@ KERNEL_FQ void m00610_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00610_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00610_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00610_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00610_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00610_a1-pure.cl b/OpenCL/m00610_a1-pure.cl index 9eeabb060..d6499bae5 100644 --- a/OpenCL/m00610_a1-pure.cl +++ b/OpenCL/m00610_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2b.cl) #endif -KERNEL_FQ void m00610_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00610_mxx (KERN_ATTR_BASIC ()) { /** * base @@ -66,7 +66,7 @@ KERNEL_FQ void m00610_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00610_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00610_sxx (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m00610_a3-optimized.cl b/OpenCL/m00610_a3-optimized.cl index 1ebbffb51..e97084e23 100644 --- a/OpenCL/m00610_a3-optimized.cl +++ b/OpenCL/m00610_a3-optimized.cl @@ -222,7 +222,7 @@ DECLSPEC void m00610s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m00610_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00610_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -262,7 +262,7 @@ KERNEL_FQ void m00610_m04 (KERN_ATTR_VECTOR ()) m00610m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00610_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00610_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -302,7 +302,7 @@ KERNEL_FQ void m00610_m08 (KERN_ATTR_VECTOR ()) m00610m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00610_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00610_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -342,7 +342,7 @@ KERNEL_FQ void m00610_m16 (KERN_ATTR_VECTOR ()) m00610m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00610_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00610_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -382,7 +382,7 @@ KERNEL_FQ void m00610_s04 (KERN_ATTR_VECTOR ()) m00610s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00610_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00610_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -422,7 +422,7 @@ KERNEL_FQ void m00610_s08 (KERN_ATTR_VECTOR ()) m00610s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00610_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00610_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m00610_a3-pure.cl b/OpenCL/m00610_a3-pure.cl index d61b6f847..a4fbc8651 100644 --- a/OpenCL/m00610_a3-pure.cl +++ b/OpenCL/m00610_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2b.cl) #endif -KERNEL_FQ void m00610_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00610_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -79,7 +79,7 @@ KERNEL_FQ void m00610_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m00610_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00610_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00620_a0-optimized.cl b/OpenCL/m00620_a0-optimized.cl index 29144dc4a..b2a9f7896 100644 --- a/OpenCL/m00620_a0-optimized.cl +++ b/OpenCL/m00620_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2b.cl) #endif -KERNEL_FQ void m00620_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00620_m04 (KERN_ATTR_RULES ()) { /** * base @@ -151,15 +151,15 @@ KERNEL_FQ void m00620_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00620_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00620_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00620_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00620_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00620_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00620_s04 (KERN_ATTR_RULES ()) { /** * base @@ -306,11 +306,11 @@ KERNEL_FQ void m00620_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00620_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00620_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00620_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00620_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00620_a0-pure.cl b/OpenCL/m00620_a0-pure.cl index bcc056611..ce329c425 100644 --- a/OpenCL/m00620_a0-pure.cl +++ b/OpenCL/m00620_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2b.cl) #endif -KERNEL_FQ void m00620_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00620_mxx (KERN_ATTR_RULES ()) { /** * base @@ -62,7 +62,7 @@ KERNEL_FQ void m00620_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00620_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00620_sxx (KERN_ATTR_RULES ()) { /** * base diff --git a/OpenCL/m00620_a1-optimized.cl b/OpenCL/m00620_a1-optimized.cl index fa50e5d89..b50cdb3b7 100644 --- a/OpenCL/m00620_a1-optimized.cl +++ b/OpenCL/m00620_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2b.cl) #endif -KERNEL_FQ void m00620_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00620_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -209,15 +209,15 @@ KERNEL_FQ void m00620_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00620_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00620_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00620_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00620_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00620_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00620_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -424,11 +424,11 @@ KERNEL_FQ void m00620_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00620_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00620_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00620_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00620_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00620_a1-pure.cl b/OpenCL/m00620_a1-pure.cl index 70ffccc8c..a0b620328 100644 --- a/OpenCL/m00620_a1-pure.cl +++ b/OpenCL/m00620_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2b.cl) #endif -KERNEL_FQ void m00620_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00620_mxx (KERN_ATTR_BASIC ()) { /** * base @@ -57,7 +57,7 @@ KERNEL_FQ void m00620_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00620_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00620_sxx (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m00620_a3-optimized.cl b/OpenCL/m00620_a3-optimized.cl index 64cb352c5..6d05afe81 100644 --- a/OpenCL/m00620_a3-optimized.cl +++ b/OpenCL/m00620_a3-optimized.cl @@ -294,7 +294,7 @@ DECLSPEC void m00620s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m00620_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00620_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -343,7 +343,7 @@ KERNEL_FQ void m00620_m04 (KERN_ATTR_BASIC ()) m00620m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00620_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00620_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -392,7 +392,7 @@ KERNEL_FQ void m00620_m08 (KERN_ATTR_BASIC ()) m00620m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00620_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00620_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -441,7 +441,7 @@ KERNEL_FQ void m00620_m16 (KERN_ATTR_BASIC ()) m00620m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00620_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00620_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -490,7 +490,7 @@ KERNEL_FQ void m00620_s04 (KERN_ATTR_BASIC ()) m00620s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00620_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00620_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -539,7 +539,7 @@ KERNEL_FQ void m00620_s08 (KERN_ATTR_BASIC ()) m00620s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00620_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00620_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m00620_a3-pure.cl b/OpenCL/m00620_a3-pure.cl index 2b34cd3ba..cc18a0f0f 100644 --- a/OpenCL/m00620_a3-pure.cl +++ b/OpenCL/m00620_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2b.cl) #endif -KERNEL_FQ void m00620_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00620_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -74,7 +74,7 @@ KERNEL_FQ void m00620_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m00620_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00620_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00900_a0-optimized.cl b/OpenCL/m00900_a0-optimized.cl index c11ed77d0..8b17771a7 100644 --- a/OpenCL/m00900_a0-optimized.cl +++ b/OpenCL/m00900_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md4.cl) #endif -KERNEL_FQ void m00900_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00900_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -124,15 +124,15 @@ KERNEL_FQ void m00900_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00900_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00900_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00900_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00900_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00900_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00900_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -255,10 +255,10 @@ KERNEL_FQ void m00900_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00900_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00900_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m00900_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00900_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00900_a0-pure.cl b/OpenCL/m00900_a0-pure.cl index 25cf7f1d9..9d7234e7f 100644 --- a/OpenCL/m00900_a0-pure.cl +++ b/OpenCL/m00900_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md4.cl) #endif -KERNEL_FQ void m00900_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00900_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void m00900_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m00900_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m00900_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00900_a1-optimized.cl b/OpenCL/m00900_a1-optimized.cl index af869cb27..db7afcd8b 100644 --- a/OpenCL/m00900_a1-optimized.cl +++ b/OpenCL/m00900_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md4.cl) #endif -KERNEL_FQ void m00900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00900_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -181,15 +181,15 @@ KERNEL_FQ void m00900_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00900_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00900_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00900_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -371,10 +371,10 @@ KERNEL_FQ void m00900_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00900_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m00900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00900_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00900_a1-pure.cl b/OpenCL/m00900_a1-pure.cl index 8b1e086a8..ba049ca3d 100644 --- a/OpenCL/m00900_a1-pure.cl +++ b/OpenCL/m00900_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md4.cl) #endif -KERNEL_FQ void m00900_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00900_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void m00900_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m00900_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m00900_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00900_a3-optimized.cl b/OpenCL/m00900_a3-optimized.cl index c9b635854..092341866 100644 --- a/OpenCL/m00900_a3-optimized.cl +++ b/OpenCL/m00900_a3-optimized.cl @@ -347,7 +347,7 @@ DECLSPEC void m00900s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m00900_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00900_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -387,7 +387,7 @@ KERNEL_FQ void m00900_m04 (KERN_ATTR_VECTOR ()) m00900m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00900_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00900_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -427,7 +427,7 @@ KERNEL_FQ void m00900_m08 (KERN_ATTR_VECTOR ()) m00900m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00900_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00900_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -467,7 +467,7 @@ KERNEL_FQ void m00900_m16 (KERN_ATTR_VECTOR ()) m00900m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00900_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00900_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -507,7 +507,7 @@ KERNEL_FQ void m00900_s04 (KERN_ATTR_VECTOR ()) m00900s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00900_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00900_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -547,7 +547,7 @@ KERNEL_FQ void m00900_s08 (KERN_ATTR_VECTOR ()) m00900s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m00900_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00900_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m00900_a3-pure.cl b/OpenCL/m00900_a3-pure.cl index beb0f89af..0737d311a 100644 --- a/OpenCL/m00900_a3-pure.cl +++ b/OpenCL/m00900_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md4.cl) #endif -KERNEL_FQ void m00900_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00900_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void m00900_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m00900_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m00900_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01000_a0-optimized.cl b/OpenCL/m01000_a0-optimized.cl index a0732dd92..eccf2ba26 100644 --- a/OpenCL/m01000_a0-optimized.cl +++ b/OpenCL/m01000_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md4.cl) #endif -KERNEL_FQ void m01000_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01000_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -127,15 +127,15 @@ KERNEL_FQ void m01000_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01000_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01000_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01000_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01000_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01000_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01000_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -261,10 +261,10 @@ KERNEL_FQ void m01000_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01000_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01000_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01000_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01000_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01000_a0-pure.cl b/OpenCL/m01000_a0-pure.cl index a85989648..4934d2924 100644 --- a/OpenCL/m01000_a0-pure.cl +++ b/OpenCL/m01000_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md4.cl) #endif -KERNEL_FQ void m01000_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01000_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void m01000_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01000_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01000_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01000_a1-optimized.cl b/OpenCL/m01000_a1-optimized.cl index fc19ea778..2a7d39a9e 100644 --- a/OpenCL/m01000_a1-optimized.cl +++ b/OpenCL/m01000_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md4.cl) #endif -KERNEL_FQ void m01000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01000_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -187,15 +187,15 @@ KERNEL_FQ void m01000_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01000_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01000_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01000_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -383,10 +383,10 @@ KERNEL_FQ void m01000_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01000_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01000_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01000_a1-pure.cl b/OpenCL/m01000_a1-pure.cl index 2d2d4b510..59f5d9ce2 100644 --- a/OpenCL/m01000_a1-pure.cl +++ b/OpenCL/m01000_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md4.cl) #endif -KERNEL_FQ void m01000_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01000_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void m01000_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01000_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01000_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01000_a3-optimized.cl b/OpenCL/m01000_a3-optimized.cl index fa6b86266..2e55b98c1 100644 --- a/OpenCL/m01000_a3-optimized.cl +++ b/OpenCL/m01000_a3-optimized.cl @@ -347,7 +347,7 @@ DECLSPEC void m01000s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m01000_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01000_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -387,7 +387,7 @@ KERNEL_FQ void m01000_m04 (KERN_ATTR_VECTOR ()) m01000m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01000_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01000_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -427,7 +427,7 @@ KERNEL_FQ void m01000_m08 (KERN_ATTR_VECTOR ()) m01000m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01000_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01000_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -467,7 +467,7 @@ KERNEL_FQ void m01000_m16 (KERN_ATTR_VECTOR ()) m01000m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01000_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01000_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -507,7 +507,7 @@ KERNEL_FQ void m01000_s04 (KERN_ATTR_VECTOR ()) m01000s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01000_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01000_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -547,7 +547,7 @@ KERNEL_FQ void m01000_s08 (KERN_ATTR_VECTOR ()) m01000s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01000_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01000_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m01000_a3-pure.cl b/OpenCL/m01000_a3-pure.cl index 4aea55ae1..1c3e7bc49 100644 --- a/OpenCL/m01000_a3-pure.cl +++ b/OpenCL/m01000_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md4.cl) #endif -KERNEL_FQ void m01000_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01000_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -83,7 +83,7 @@ KERNEL_FQ void m01000_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m01000_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01000_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01100_a0-optimized.cl b/OpenCL/m01100_a0-optimized.cl index 9c8b4194f..8ea11de43 100644 --- a/OpenCL/m01100_a0-optimized.cl +++ b/OpenCL/m01100_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md4.cl) #endif -KERNEL_FQ void m01100_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01100_m04 (KERN_ATTR_RULES ()) { /** * base @@ -227,15 +227,15 @@ KERNEL_FQ void m01100_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01100_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01100_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01100_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01100_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01100_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01100_s04 (KERN_ATTR_RULES ()) { /** * base @@ -461,10 +461,10 @@ KERNEL_FQ void m01100_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01100_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01100_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01100_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01100_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01100_a0-pure.cl b/OpenCL/m01100_a0-pure.cl index 985d7350c..b5a7f6e2b 100644 --- a/OpenCL/m01100_a0-pure.cl +++ b/OpenCL/m01100_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md4.cl) #endif -KERNEL_FQ void m01100_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01100_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -84,7 +84,7 @@ KERNEL_FQ void m01100_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01100_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01100_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01100_a1-optimized.cl b/OpenCL/m01100_a1-optimized.cl index 72e6d71fa..9313b6ce6 100644 --- a/OpenCL/m01100_a1-optimized.cl +++ b/OpenCL/m01100_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md4.cl) #endif -KERNEL_FQ void m01100_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01100_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -287,15 +287,15 @@ KERNEL_FQ void m01100_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01100_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01100_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01100_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01100_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01100_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01100_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -583,10 +583,10 @@ KERNEL_FQ void m01100_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01100_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01100_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01100_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01100_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01100_a1-pure.cl b/OpenCL/m01100_a1-pure.cl index ef5b7d142..cc8b59777 100644 --- a/OpenCL/m01100_a1-pure.cl +++ b/OpenCL/m01100_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md4.cl) #endif -KERNEL_FQ void m01100_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01100_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void m01100_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01100_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01100_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01100_a3-optimized.cl b/OpenCL/m01100_a3-optimized.cl index d26ac1708..35c26ef5a 100644 --- a/OpenCL/m01100_a3-optimized.cl +++ b/OpenCL/m01100_a3-optimized.cl @@ -493,7 +493,7 @@ DECLSPEC void m01100s (LOCAL_AS salt_t *s_salt_buf, PRIVATE_AS u32 *w, const u32 } } -KERNEL_FQ void m01100_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01100_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -548,7 +548,7 @@ KERNEL_FQ void m01100_m04 (KERN_ATTR_VECTOR ()) m01100m (s_salt_buf, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01100_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01100_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -603,7 +603,7 @@ KERNEL_FQ void m01100_m08 (KERN_ATTR_VECTOR ()) m01100m (s_salt_buf, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01100_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01100_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -658,7 +658,7 @@ KERNEL_FQ void m01100_m16 (KERN_ATTR_VECTOR ()) m01100m (s_salt_buf, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01100_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01100_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -713,7 +713,7 @@ KERNEL_FQ void m01100_s04 (KERN_ATTR_VECTOR ()) m01100s (s_salt_buf, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01100_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01100_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -768,7 +768,7 @@ KERNEL_FQ void m01100_s08 (KERN_ATTR_VECTOR ()) m01100s (s_salt_buf, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01100_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01100_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m01100_a3-pure.cl b/OpenCL/m01100_a3-pure.cl index afa425501..687126d39 100644 --- a/OpenCL/m01100_a3-pure.cl +++ b/OpenCL/m01100_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md4.cl) #endif -KERNEL_FQ void m01100_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01100_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -122,7 +122,7 @@ KERNEL_FQ void m01100_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m01100_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01100_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01300_a0-optimized.cl b/OpenCL/m01300_a0-optimized.cl index 695d65c7f..b50f950f9 100644 --- a/OpenCL/m01300_a0-optimized.cl +++ b/OpenCL/m01300_a0-optimized.cl @@ -29,7 +29,7 @@ g = 0; \ } -KERNEL_FQ void m01300_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01300_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -176,15 +176,15 @@ KERNEL_FQ void m01300_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01300_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01300_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01300_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01300_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01300_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01300_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -362,10 +362,10 @@ KERNEL_FQ void m01300_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01300_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01300_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01300_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01300_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01300_a0-pure.cl b/OpenCL/m01300_a0-pure.cl index 52f35f9d5..a978a5df6 100644 --- a/OpenCL/m01300_a0-pure.cl +++ b/OpenCL/m01300_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha224.cl) #endif -KERNEL_FQ void m01300_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01300_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void m01300_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01300_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01300_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01300_a1-optimized.cl b/OpenCL/m01300_a1-optimized.cl index f1b7fe8c5..bc24adbc5 100644 --- a/OpenCL/m01300_a1-optimized.cl +++ b/OpenCL/m01300_a1-optimized.cl @@ -27,7 +27,7 @@ g = 0; \ } -KERNEL_FQ void m01300_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01300_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -232,15 +232,15 @@ KERNEL_FQ void m01300_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01300_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01300_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01300_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01300_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01300_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01300_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -476,10 +476,10 @@ KERNEL_FQ void m01300_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01300_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01300_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01300_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01300_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01300_a1-pure.cl b/OpenCL/m01300_a1-pure.cl index 71da5f570..5dfb3df3b 100644 --- a/OpenCL/m01300_a1-pure.cl +++ b/OpenCL/m01300_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha224.cl) #endif -KERNEL_FQ void m01300_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01300_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void m01300_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01300_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01300_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01300_a3-optimized.cl b/OpenCL/m01300_a3-optimized.cl index 8b0d065d0..91d32df5b 100644 --- a/OpenCL/m01300_a3-optimized.cl +++ b/OpenCL/m01300_a3-optimized.cl @@ -290,7 +290,7 @@ DECLSPEC void m01300s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m01300_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01300_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -330,7 +330,7 @@ KERNEL_FQ void m01300_m04 (KERN_ATTR_VECTOR ()) m01300m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01300_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01300_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -370,7 +370,7 @@ KERNEL_FQ void m01300_m08 (KERN_ATTR_VECTOR ()) m01300m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01300_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01300_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -410,7 +410,7 @@ KERNEL_FQ void m01300_m16 (KERN_ATTR_VECTOR ()) m01300m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01300_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01300_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -450,7 +450,7 @@ KERNEL_FQ void m01300_s04 (KERN_ATTR_VECTOR ()) m01300s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01300_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01300_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -490,7 +490,7 @@ KERNEL_FQ void m01300_s08 (KERN_ATTR_VECTOR ()) m01300s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01300_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01300_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m01300_a3-pure.cl b/OpenCL/m01300_a3-pure.cl index 2cefefa34..9c7c04d23 100644 --- a/OpenCL/m01300_a3-pure.cl +++ b/OpenCL/m01300_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha224.cl) #endif -KERNEL_FQ void m01300_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01300_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void m01300_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m01300_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01300_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01400_a0-optimized.cl b/OpenCL/m01400_a0-optimized.cl index 95fac4e0d..8324073ff 100644 --- a/OpenCL/m01400_a0-optimized.cl +++ b/OpenCL/m01400_a0-optimized.cl @@ -30,7 +30,7 @@ h = 0; \ } -KERNEL_FQ void m01400_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01400_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -177,15 +177,15 @@ KERNEL_FQ void m01400_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01400_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01400_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01400_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01400_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01400_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01400_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -365,10 +365,10 @@ KERNEL_FQ void m01400_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01400_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01400_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01400_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01400_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01400_a0-pure.cl b/OpenCL/m01400_a0-pure.cl index 932a6c33d..3148ec349 100644 --- a/OpenCL/m01400_a0-pure.cl +++ b/OpenCL/m01400_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m01400_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01400_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void m01400_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01400_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01400_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01400_a1-optimized.cl b/OpenCL/m01400_a1-optimized.cl index ad90577fb..54ed34bab 100644 --- a/OpenCL/m01400_a1-optimized.cl +++ b/OpenCL/m01400_a1-optimized.cl @@ -28,7 +28,7 @@ h = 0; \ } -KERNEL_FQ void m01400_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01400_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -233,15 +233,15 @@ KERNEL_FQ void m01400_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01400_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01400_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01400_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01400_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01400_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01400_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -479,10 +479,10 @@ KERNEL_FQ void m01400_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01400_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01400_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01400_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01400_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01400_a1-pure.cl b/OpenCL/m01400_a1-pure.cl index 8ce38c174..57c346fff 100644 --- a/OpenCL/m01400_a1-pure.cl +++ b/OpenCL/m01400_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m01400_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01400_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void m01400_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01400_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01400_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01400_a3-optimized.cl b/OpenCL/m01400_a3-optimized.cl index 6b82987bb..5c0172406 100644 --- a/OpenCL/m01400_a3-optimized.cl +++ b/OpenCL/m01400_a3-optimized.cl @@ -293,7 +293,7 @@ DECLSPEC void m01400s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m01400_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01400_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -333,7 +333,7 @@ KERNEL_FQ void m01400_m04 (KERN_ATTR_VECTOR ()) m01400m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01400_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01400_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -373,7 +373,7 @@ KERNEL_FQ void m01400_m08 (KERN_ATTR_VECTOR ()) m01400m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01400_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01400_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -413,7 +413,7 @@ KERNEL_FQ void m01400_m16 (KERN_ATTR_VECTOR ()) m01400m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01400_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01400_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -453,7 +453,7 @@ KERNEL_FQ void m01400_s04 (KERN_ATTR_VECTOR ()) m01400s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01400_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01400_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -493,7 +493,7 @@ KERNEL_FQ void m01400_s08 (KERN_ATTR_VECTOR ()) m01400s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01400_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01400_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m01400_a3-pure.cl b/OpenCL/m01400_a3-pure.cl index 04ebffdbb..311f7a057 100644 --- a/OpenCL/m01400_a3-pure.cl +++ b/OpenCL/m01400_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m01400_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01400_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void m01400_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m01400_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01400_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01410_a0-optimized.cl b/OpenCL/m01410_a0-optimized.cl index b2e6a2bd5..6f995c8cf 100644 --- a/OpenCL/m01410_a0-optimized.cl +++ b/OpenCL/m01410_a0-optimized.cl @@ -30,7 +30,7 @@ h = 0; \ } -KERNEL_FQ void m01410_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01410_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -250,15 +250,15 @@ KERNEL_FQ void m01410_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01410_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01410_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01410_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01410_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01410_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01410_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -511,10 +511,10 @@ KERNEL_FQ void m01410_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01410_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01410_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01410_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01410_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01410_a0-pure.cl b/OpenCL/m01410_a0-pure.cl index 81a0b2487..91a4277f3 100644 --- a/OpenCL/m01410_a0-pure.cl +++ b/OpenCL/m01410_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m01410_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01410_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void m01410_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01410_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01410_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01410_a1-optimized.cl b/OpenCL/m01410_a1-optimized.cl index 287b8da82..9f3344899 100644 --- a/OpenCL/m01410_a1-optimized.cl +++ b/OpenCL/m01410_a1-optimized.cl @@ -28,7 +28,7 @@ h = 0; \ } -KERNEL_FQ void m01410_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01410_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -308,15 +308,15 @@ KERNEL_FQ void m01410_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01410_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01410_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01410_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01410_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01410_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01410_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -629,10 +629,10 @@ KERNEL_FQ void m01410_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01410_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01410_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01410_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01410_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01410_a1-pure.cl b/OpenCL/m01410_a1-pure.cl index 01204bc42..c5f0d5d7f 100644 --- a/OpenCL/m01410_a1-pure.cl +++ b/OpenCL/m01410_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m01410_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01410_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -67,7 +67,7 @@ KERNEL_FQ void m01410_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01410_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01410_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01410_a3-optimized.cl b/OpenCL/m01410_a3-optimized.cl index 2574d9fe7..be68d9207 100644 --- a/OpenCL/m01410_a3-optimized.cl +++ b/OpenCL/m01410_a3-optimized.cl @@ -344,7 +344,7 @@ DECLSPEC void m01410s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m01410_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01410_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -384,7 +384,7 @@ KERNEL_FQ void m01410_m04 (KERN_ATTR_VECTOR ()) m01410m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01410_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01410_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -424,7 +424,7 @@ KERNEL_FQ void m01410_m08 (KERN_ATTR_VECTOR ()) m01410m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01410_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01410_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -464,7 +464,7 @@ KERNEL_FQ void m01410_m16 (KERN_ATTR_VECTOR ()) m01410m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01410_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01410_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -504,7 +504,7 @@ KERNEL_FQ void m01410_s04 (KERN_ATTR_VECTOR ()) m01410s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01410_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01410_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -544,7 +544,7 @@ KERNEL_FQ void m01410_s08 (KERN_ATTR_VECTOR ()) m01410s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01410_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01410_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m01410_a3-pure.cl b/OpenCL/m01410_a3-pure.cl index 7e29bf125..2f714401c 100644 --- a/OpenCL/m01410_a3-pure.cl +++ b/OpenCL/m01410_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m01410_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01410_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void m01410_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m01410_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01410_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01420_a0-optimized.cl b/OpenCL/m01420_a0-optimized.cl index b83b6860e..970e50167 100644 --- a/OpenCL/m01420_a0-optimized.cl +++ b/OpenCL/m01420_a0-optimized.cl @@ -30,7 +30,7 @@ h = 0; \ } -KERNEL_FQ void m01420_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01420_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -230,15 +230,15 @@ KERNEL_FQ void m01420_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01420_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01420_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01420_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01420_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01420_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01420_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -471,10 +471,10 @@ KERNEL_FQ void m01420_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01420_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01420_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01420_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01420_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01420_a0-pure.cl b/OpenCL/m01420_a0-pure.cl index a021b8cc3..1a5fbc39f 100644 --- a/OpenCL/m01420_a0-pure.cl +++ b/OpenCL/m01420_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m01420_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01420_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -64,7 +64,7 @@ KERNEL_FQ void m01420_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01420_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01420_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01420_a1-optimized.cl b/OpenCL/m01420_a1-optimized.cl index 668cf0969..39680d0ba 100644 --- a/OpenCL/m01420_a1-optimized.cl +++ b/OpenCL/m01420_a1-optimized.cl @@ -28,7 +28,7 @@ h = 0; \ } -KERNEL_FQ void m01420_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01420_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -286,15 +286,15 @@ KERNEL_FQ void m01420_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01420_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01420_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01420_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01420_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01420_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01420_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -585,10 +585,10 @@ KERNEL_FQ void m01420_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01420_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01420_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01420_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01420_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01420_a1-pure.cl b/OpenCL/m01420_a1-pure.cl index adf7e44cf..fa365ebf6 100644 --- a/OpenCL/m01420_a1-pure.cl +++ b/OpenCL/m01420_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m01420_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01420_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -58,7 +58,7 @@ KERNEL_FQ void m01420_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01420_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01420_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01420_a3-optimized.cl b/OpenCL/m01420_a3-optimized.cl index 42019378a..d59abc28d 100644 --- a/OpenCL/m01420_a3-optimized.cl +++ b/OpenCL/m01420_a3-optimized.cl @@ -443,7 +443,7 @@ DECLSPEC void m01420s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m01420_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01420_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -492,7 +492,7 @@ KERNEL_FQ void m01420_m04 (KERN_ATTR_BASIC ()) m01420m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01420_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01420_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -541,7 +541,7 @@ KERNEL_FQ void m01420_m08 (KERN_ATTR_BASIC ()) m01420m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01420_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01420_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -590,7 +590,7 @@ KERNEL_FQ void m01420_m16 (KERN_ATTR_BASIC ()) m01420m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01420_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01420_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -639,7 +639,7 @@ KERNEL_FQ void m01420_s04 (KERN_ATTR_BASIC ()) m01420s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01420_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01420_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -688,7 +688,7 @@ KERNEL_FQ void m01420_s08 (KERN_ATTR_BASIC ()) m01420s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01420_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01420_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m01420_a3-pure.cl b/OpenCL/m01420_a3-pure.cl index 7bf819abe..998de6ea4 100644 --- a/OpenCL/m01420_a3-pure.cl +++ b/OpenCL/m01420_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m01420_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01420_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -75,7 +75,7 @@ KERNEL_FQ void m01420_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m01420_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01420_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01430_a0-optimized.cl b/OpenCL/m01430_a0-optimized.cl index 1be82fdad..fce561f8d 100644 --- a/OpenCL/m01430_a0-optimized.cl +++ b/OpenCL/m01430_a0-optimized.cl @@ -30,7 +30,7 @@ h = 0; \ } -KERNEL_FQ void m01430_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01430_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -255,15 +255,15 @@ KERNEL_FQ void m01430_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01430_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01430_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01430_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01430_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01430_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01430_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -521,10 +521,10 @@ KERNEL_FQ void m01430_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01430_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01430_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01430_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01430_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01430_a0-pure.cl b/OpenCL/m01430_a0-pure.cl index 8abd18ca5..ed9bba7e0 100644 --- a/OpenCL/m01430_a0-pure.cl +++ b/OpenCL/m01430_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m01430_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01430_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void m01430_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01430_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01430_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01430_a1-optimized.cl b/OpenCL/m01430_a1-optimized.cl index 15f216ae9..44f6cc3b0 100644 --- a/OpenCL/m01430_a1-optimized.cl +++ b/OpenCL/m01430_a1-optimized.cl @@ -28,7 +28,7 @@ h = 0; \ } -KERNEL_FQ void m01430_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01430_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -313,15 +313,15 @@ KERNEL_FQ void m01430_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01430_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01430_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01430_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01430_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01430_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01430_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -639,10 +639,10 @@ KERNEL_FQ void m01430_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01430_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01430_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01430_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01430_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01430_a1-pure.cl b/OpenCL/m01430_a1-pure.cl index b75eb7191..8b16ee251 100644 --- a/OpenCL/m01430_a1-pure.cl +++ b/OpenCL/m01430_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m01430_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01430_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -67,7 +67,7 @@ KERNEL_FQ void m01430_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01430_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01430_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01430_a3-optimized.cl b/OpenCL/m01430_a3-optimized.cl index 4a76b5028..a097554a7 100644 --- a/OpenCL/m01430_a3-optimized.cl +++ b/OpenCL/m01430_a3-optimized.cl @@ -344,7 +344,7 @@ DECLSPEC void m01430s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m01430_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01430_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -384,7 +384,7 @@ KERNEL_FQ void m01430_m04 (KERN_ATTR_VECTOR ()) m01430m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01430_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01430_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -424,7 +424,7 @@ KERNEL_FQ void m01430_m08 (KERN_ATTR_VECTOR ()) m01430m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01430_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01430_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -464,7 +464,7 @@ KERNEL_FQ void m01430_m16 (KERN_ATTR_VECTOR ()) m01430m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01430_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01430_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -504,7 +504,7 @@ KERNEL_FQ void m01430_s04 (KERN_ATTR_VECTOR ()) m01430s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01430_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01430_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -544,7 +544,7 @@ KERNEL_FQ void m01430_s08 (KERN_ATTR_VECTOR ()) m01430s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01430_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01430_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m01430_a3-pure.cl b/OpenCL/m01430_a3-pure.cl index 24afd1355..bd94748a6 100644 --- a/OpenCL/m01430_a3-pure.cl +++ b/OpenCL/m01430_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m01430_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01430_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void m01430_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m01430_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01430_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01440_a0-optimized.cl b/OpenCL/m01440_a0-optimized.cl index 60b369eec..679c97f4f 100644 --- a/OpenCL/m01440_a0-optimized.cl +++ b/OpenCL/m01440_a0-optimized.cl @@ -30,7 +30,7 @@ h = 0; \ } -KERNEL_FQ void m01440_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01440_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -235,15 +235,15 @@ KERNEL_FQ void m01440_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01440_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01440_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01440_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01440_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01440_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01440_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -481,10 +481,10 @@ KERNEL_FQ void m01440_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01440_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01440_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01440_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01440_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01440_a0-pure.cl b/OpenCL/m01440_a0-pure.cl index 8b7e6d8d7..cd463928b 100644 --- a/OpenCL/m01440_a0-pure.cl +++ b/OpenCL/m01440_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m01440_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01440_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -64,7 +64,7 @@ KERNEL_FQ void m01440_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01440_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01440_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01440_a1-optimized.cl b/OpenCL/m01440_a1-optimized.cl index 8dd16407c..4cadbeab5 100644 --- a/OpenCL/m01440_a1-optimized.cl +++ b/OpenCL/m01440_a1-optimized.cl @@ -28,7 +28,7 @@ h = 0; \ } -KERNEL_FQ void m01440_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01440_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -291,15 +291,15 @@ KERNEL_FQ void m01440_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01440_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01440_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01440_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01440_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01440_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01440_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -595,10 +595,10 @@ KERNEL_FQ void m01440_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01440_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01440_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01440_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01440_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01440_a1-pure.cl b/OpenCL/m01440_a1-pure.cl index aa16fb9dd..5ab4daf6a 100644 --- a/OpenCL/m01440_a1-pure.cl +++ b/OpenCL/m01440_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m01440_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01440_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -58,7 +58,7 @@ KERNEL_FQ void m01440_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01440_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01440_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01440_a3-optimized.cl b/OpenCL/m01440_a3-optimized.cl index bd3dc0512..70954978d 100644 --- a/OpenCL/m01440_a3-optimized.cl +++ b/OpenCL/m01440_a3-optimized.cl @@ -443,7 +443,7 @@ DECLSPEC void m01440s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m01440_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01440_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -492,7 +492,7 @@ KERNEL_FQ void m01440_m04 (KERN_ATTR_BASIC ()) m01440m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01440_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01440_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -541,7 +541,7 @@ KERNEL_FQ void m01440_m08 (KERN_ATTR_BASIC ()) m01440m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01440_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01440_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -590,7 +590,7 @@ KERNEL_FQ void m01440_m16 (KERN_ATTR_BASIC ()) m01440m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01440_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01440_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -639,7 +639,7 @@ KERNEL_FQ void m01440_s04 (KERN_ATTR_BASIC ()) m01440s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01440_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01440_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -688,7 +688,7 @@ KERNEL_FQ void m01440_s08 (KERN_ATTR_BASIC ()) m01440s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01440_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01440_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m01440_a3-pure.cl b/OpenCL/m01440_a3-pure.cl index 8724e78c1..df3ce8099 100644 --- a/OpenCL/m01440_a3-pure.cl +++ b/OpenCL/m01440_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m01440_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01440_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -75,7 +75,7 @@ KERNEL_FQ void m01440_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m01440_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01440_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01450_a0-optimized.cl b/OpenCL/m01450_a0-optimized.cl index 262641bf3..a8cb98718 100644 --- a/OpenCL/m01450_a0-optimized.cl +++ b/OpenCL/m01450_a0-optimized.cl @@ -117,7 +117,7 @@ DECLSPEC void hmac_sha256_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m01450_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01450_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -231,15 +231,15 @@ KERNEL_FQ void m01450_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01450_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01450_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01450_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01450_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01450_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01450_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -365,10 +365,10 @@ KERNEL_FQ void m01450_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01450_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01450_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01450_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01450_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01450_a0-pure.cl b/OpenCL/m01450_a0-pure.cl index b2167e229..e3971b35f 100644 --- a/OpenCL/m01450_a0-pure.cl +++ b/OpenCL/m01450_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m01450_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01450_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void m01450_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01450_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01450_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01450_a1-optimized.cl b/OpenCL/m01450_a1-optimized.cl index 8b75fcf25..6114c0740 100644 --- a/OpenCL/m01450_a1-optimized.cl +++ b/OpenCL/m01450_a1-optimized.cl @@ -115,7 +115,7 @@ DECLSPEC void hmac_sha256_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m01450_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01450_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -297,15 +297,15 @@ KERNEL_FQ void m01450_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01450_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01450_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01450_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01450_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01450_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01450_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -499,10 +499,10 @@ KERNEL_FQ void m01450_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01450_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01450_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01450_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01450_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01450_a1-pure.cl b/OpenCL/m01450_a1-pure.cl index 07bdfac62..5032c09ee 100644 --- a/OpenCL/m01450_a1-pure.cl +++ b/OpenCL/m01450_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m01450_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01450_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -92,7 +92,7 @@ KERNEL_FQ void m01450_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01450_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01450_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01450_a3-optimized.cl b/OpenCL/m01450_a3-optimized.cl index a88a84100..c08243469 100644 --- a/OpenCL/m01450_a3-optimized.cl +++ b/OpenCL/m01450_a3-optimized.cl @@ -331,7 +331,7 @@ DECLSPEC void m01450s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m01450_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01450_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -380,7 +380,7 @@ KERNEL_FQ void m01450_m04 (KERN_ATTR_BASIC ()) m01450m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01450_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01450_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -429,7 +429,7 @@ KERNEL_FQ void m01450_m08 (KERN_ATTR_BASIC ()) m01450m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01450_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01450_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -478,7 +478,7 @@ KERNEL_FQ void m01450_m16 (KERN_ATTR_BASIC ()) m01450m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01450_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01450_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -527,7 +527,7 @@ KERNEL_FQ void m01450_s04 (KERN_ATTR_BASIC ()) m01450s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01450_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01450_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -576,7 +576,7 @@ KERNEL_FQ void m01450_s08 (KERN_ATTR_BASIC ()) m01450s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01450_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01450_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m01450_a3-pure.cl b/OpenCL/m01450_a3-pure.cl index 462a22a0c..97064dd5d 100644 --- a/OpenCL/m01450_a3-pure.cl +++ b/OpenCL/m01450_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m01450_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01450_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -78,7 +78,7 @@ KERNEL_FQ void m01450_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m01450_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01450_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01460_a0-optimized.cl b/OpenCL/m01460_a0-optimized.cl index d3dea0ceb..a69ce5a19 100644 --- a/OpenCL/m01460_a0-optimized.cl +++ b/OpenCL/m01460_a0-optimized.cl @@ -117,7 +117,7 @@ DECLSPEC void hmac_sha256_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m01460_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01460_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -244,15 +244,15 @@ KERNEL_FQ void m01460_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01460_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01460_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01460_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01460_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01460_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01460_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -391,10 +391,10 @@ KERNEL_FQ void m01460_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01460_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01460_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01460_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01460_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01460_a0-pure.cl b/OpenCL/m01460_a0-pure.cl index 7cdc49d1b..8cb08f30e 100644 --- a/OpenCL/m01460_a0-pure.cl +++ b/OpenCL/m01460_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m01460_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01460_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void m01460_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01460_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01460_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01460_a1-optimized.cl b/OpenCL/m01460_a1-optimized.cl index 5fb3c8a90..548876cb9 100644 --- a/OpenCL/m01460_a1-optimized.cl +++ b/OpenCL/m01460_a1-optimized.cl @@ -115,7 +115,7 @@ DECLSPEC void hmac_sha256_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m01460_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01460_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -302,15 +302,15 @@ KERNEL_FQ void m01460_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01460_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01460_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01460_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01460_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01460_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01460_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -509,10 +509,10 @@ KERNEL_FQ void m01460_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01460_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01460_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01460_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01460_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01460_a1-pure.cl b/OpenCL/m01460_a1-pure.cl index 49f0a3ce6..0dae76818 100644 --- a/OpenCL/m01460_a1-pure.cl +++ b/OpenCL/m01460_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m01460_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01460_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -94,7 +94,7 @@ KERNEL_FQ void m01460_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01460_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01460_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01460_a3-optimized.cl b/OpenCL/m01460_a3-optimized.cl index da5e67a07..04848e834 100644 --- a/OpenCL/m01460_a3-optimized.cl +++ b/OpenCL/m01460_a3-optimized.cl @@ -327,7 +327,7 @@ DECLSPEC void m01460s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m01460_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01460_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -376,7 +376,7 @@ KERNEL_FQ void m01460_m04 (KERN_ATTR_BASIC ()) m01460m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01460_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01460_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -425,7 +425,7 @@ KERNEL_FQ void m01460_m08 (KERN_ATTR_BASIC ()) m01460m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01460_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01460_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -474,7 +474,7 @@ KERNEL_FQ void m01460_m16 (KERN_ATTR_BASIC ()) m01460m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01460_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01460_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -523,7 +523,7 @@ KERNEL_FQ void m01460_s04 (KERN_ATTR_BASIC ()) m01460s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01460_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01460_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -572,7 +572,7 @@ KERNEL_FQ void m01460_s08 (KERN_ATTR_BASIC ()) m01460s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01460_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01460_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m01460_a3-pure.cl b/OpenCL/m01460_a3-pure.cl index 28b359f1c..2621c623d 100644 --- a/OpenCL/m01460_a3-pure.cl +++ b/OpenCL/m01460_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m01460_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01460_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void m01460_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m01460_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01460_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01470_a0-optimized.cl b/OpenCL/m01470_a0-optimized.cl index fa40cecbf..c90923d3d 100644 --- a/OpenCL/m01470_a0-optimized.cl +++ b/OpenCL/m01470_a0-optimized.cl @@ -30,7 +30,7 @@ h = 0; \ } -KERNEL_FQ void m01470_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01470_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -182,15 +182,15 @@ KERNEL_FQ void m01470_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01470_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01470_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01470_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01470_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01470_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01470_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -375,10 +375,10 @@ KERNEL_FQ void m01470_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01470_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01470_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01470_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01470_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01470_a0-pure.cl b/OpenCL/m01470_a0-pure.cl index 1e43c8245..c664eee91 100644 --- a/OpenCL/m01470_a0-pure.cl +++ b/OpenCL/m01470_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m01470_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01470_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -62,7 +62,7 @@ KERNEL_FQ void m01470_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01470_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01470_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01470_a1-optimized.cl b/OpenCL/m01470_a1-optimized.cl index 06774618e..93af6ba9a 100644 --- a/OpenCL/m01470_a1-optimized.cl +++ b/OpenCL/m01470_a1-optimized.cl @@ -28,7 +28,7 @@ h = 0; \ } -KERNEL_FQ void m01470_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01470_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -238,15 +238,15 @@ KERNEL_FQ void m01470_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01470_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01470_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01470_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01470_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01470_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01470_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -489,10 +489,10 @@ KERNEL_FQ void m01470_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01470_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01470_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01470_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01470_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01470_a1-pure.cl b/OpenCL/m01470_a1-pure.cl index 18ab9488f..1e0022f48 100644 --- a/OpenCL/m01470_a1-pure.cl +++ b/OpenCL/m01470_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m01470_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01470_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void m01470_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01470_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01470_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01470_a3-optimized.cl b/OpenCL/m01470_a3-optimized.cl index 9c8b1519b..1f50fee43 100644 --- a/OpenCL/m01470_a3-optimized.cl +++ b/OpenCL/m01470_a3-optimized.cl @@ -345,7 +345,7 @@ DECLSPEC void m01470s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m01470_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01470_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -394,7 +394,7 @@ KERNEL_FQ void m01470_m04 (KERN_ATTR_BASIC ()) m01470m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01470_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01470_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -443,7 +443,7 @@ KERNEL_FQ void m01470_m08 (KERN_ATTR_BASIC ()) m01470m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01470_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01470_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -492,7 +492,7 @@ KERNEL_FQ void m01470_m16 (KERN_ATTR_BASIC ()) m01470m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01470_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01470_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -541,7 +541,7 @@ KERNEL_FQ void m01470_s04 (KERN_ATTR_BASIC ()) m01470s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01470_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01470_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -590,7 +590,7 @@ KERNEL_FQ void m01470_s08 (KERN_ATTR_BASIC ()) m01470s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01470_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01470_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m01470_a3-pure.cl b/OpenCL/m01470_a3-pure.cl index fcf36b2d9..183dd48cd 100644 --- a/OpenCL/m01470_a3-pure.cl +++ b/OpenCL/m01470_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m01470_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01470_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -73,7 +73,7 @@ KERNEL_FQ void m01470_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m01470_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01470_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01500_a0-pure.cl b/OpenCL/m01500_a0-pure.cl index 7a95576f9..3b3ab3602 100644 --- a/OpenCL/m01500_a0-pure.cl +++ b/OpenCL/m01500_a0-pure.cl @@ -482,7 +482,7 @@ DECLSPEC void _des_crypt_encrypt (PRIVATE_AS u32 *iv, u32 mask, PRIVATE_AS u32 iv[1] = hc_rotl32 (l, 31); } -KERNEL_FQ void m01500_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01500_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -566,7 +566,7 @@ KERNEL_FQ void m01500_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01500_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01500_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01500_a1-pure.cl b/OpenCL/m01500_a1-pure.cl index 581e708f8..1ce28aea8 100644 --- a/OpenCL/m01500_a1-pure.cl +++ b/OpenCL/m01500_a1-pure.cl @@ -480,7 +480,7 @@ DECLSPEC void _des_crypt_encrypt (PRIVATE_AS u32 *iv, u32 mask, PRIVATE_AS u32x iv[1] = hc_rotl32 (l, 31); } -KERNEL_FQ void m01500_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01500_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -643,7 +643,7 @@ KERNEL_FQ void m01500_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01500_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01500_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01500_a3-pure.cl b/OpenCL/m01500_a3-pure.cl index 59606e47f..0823a99d1 100644 --- a/OpenCL/m01500_a3-pure.cl +++ b/OpenCL/m01500_a3-pure.cl @@ -1885,7 +1885,7 @@ DECLSPEC void transpose32c (PRIVATE_AS u32 *data) // transpose bitslice mod : attention race conditions, need different buffers for *in and *out // -KERNEL_FQ void m01500_tm (KERN_ATTR_TM) +KERNEL_FQ void HC_ATTR_SEQ m01500_tm (KERN_ATTR_TM) { const u64 gid = get_global_id (0); @@ -1915,11 +1915,11 @@ KERNEL_FQ void m01500_tm (KERN_ATTR_TM) #ifndef DESCRYPT_SALT -KERNEL_FQ void m01500_sxx (KERN_ATTR_BITSLICE ()) +KERNEL_FQ void HC_ATTR_SEQ m01500_sxx (KERN_ATTR_BITSLICE ()) { } -KERNEL_FQ void m01500_mxx (KERN_ATTR_BITSLICE ()) +KERNEL_FQ void HC_ATTR_SEQ m01500_mxx (KERN_ATTR_BITSLICE ()) { /** * base @@ -2294,7 +2294,7 @@ KERNEL_FQ void m01500_mxx (KERN_ATTR_BITSLICE ()) #else -KERNEL_FQ void m01500_sxx (KERN_ATTR_BITSLICE ()) +KERNEL_FQ void HC_ATTR_SEQ m01500_sxx (KERN_ATTR_BITSLICE ()) { /** * base @@ -2688,7 +2688,7 @@ KERNEL_FQ void m01500_sxx (KERN_ATTR_BITSLICE ()) } } -KERNEL_FQ void m01500_mxx (KERN_ATTR_BITSLICE ()) +KERNEL_FQ void HC_ATTR_SEQ m01500_mxx (KERN_ATTR_BITSLICE ()) { } diff --git a/OpenCL/m01600-optimized.cl b/OpenCL/m01600-optimized.cl index 7f5bd7f5e..38270f7b0 100644 --- a/OpenCL/m01600-optimized.cl +++ b/OpenCL/m01600-optimized.cl @@ -674,7 +674,7 @@ DECLSPEC void append_1st (PRIVATE_AS u32 *block0, PRIVATE_AS u32 *block1, PRIVAT } } -KERNEL_FQ void m01600_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m01600_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * base @@ -837,7 +837,7 @@ KERNEL_FQ void m01600_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) tmps[gid].digest_buf[3] = digest[3]; } -KERNEL_FQ void m01600_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m01600_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * base @@ -1025,7 +1025,7 @@ KERNEL_FQ void m01600_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) tmps[gid].digest_buf[3] = digest[3]; } -KERNEL_FQ void m01600_comp (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m01600_comp (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * modifier diff --git a/OpenCL/m01600-pure.cl b/OpenCL/m01600-pure.cl index ac1722da9..5d7edeab8 100644 --- a/OpenCL/m01600-pure.cl +++ b/OpenCL/m01600-pure.cl @@ -25,7 +25,7 @@ typedef struct md5crypt_tmp #define md5apr1_magic0 0x72706124u #define md5apr1_magic1 0x00002431u -KERNEL_FQ void m01600_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m01600_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * base @@ -132,7 +132,7 @@ KERNEL_FQ void m01600_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) tmps[gid].digest_buf[3] = md5_ctx.h[3]; } -KERNEL_FQ void m01600_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m01600_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * base @@ -227,7 +227,7 @@ KERNEL_FQ void m01600_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) tmps[gid].digest_buf[3] = digest[3]; } -KERNEL_FQ void m01600_comp (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m01600_comp (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * modifier diff --git a/OpenCL/m01700_a0-optimized.cl b/OpenCL/m01700_a0-optimized.cl index 161a6a603..92605c15d 100644 --- a/OpenCL/m01700_a0-optimized.cl +++ b/OpenCL/m01700_a0-optimized.cl @@ -122,7 +122,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void m01700_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01700_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -215,15 +215,15 @@ KERNEL_FQ void m01700_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01700_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01700_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01700_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01700_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01700_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01700_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -328,10 +328,10 @@ KERNEL_FQ void m01700_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01700_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01700_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01700_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01700_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01700_a0-pure.cl b/OpenCL/m01700_a0-pure.cl index 254769c54..08c381811 100644 --- a/OpenCL/m01700_a0-pure.cl +++ b/OpenCL/m01700_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m01700_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01700_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void m01700_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01700_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01700_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01700_a1-optimized.cl b/OpenCL/m01700_a1-optimized.cl index 1112c25d0..854889299 100644 --- a/OpenCL/m01700_a1-optimized.cl +++ b/OpenCL/m01700_a1-optimized.cl @@ -120,7 +120,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void m01700_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01700_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -271,15 +271,15 @@ KERNEL_FQ void m01700_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01700_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01700_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01700_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01700_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01700_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01700_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -442,10 +442,10 @@ KERNEL_FQ void m01700_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01700_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01700_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01700_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01700_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01700_a1-pure.cl b/OpenCL/m01700_a1-pure.cl index 904d1f118..3171feb4e 100644 --- a/OpenCL/m01700_a1-pure.cl +++ b/OpenCL/m01700_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m01700_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01700_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void m01700_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01700_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01700_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01700_a3-optimized.cl b/OpenCL/m01700_a3-optimized.cl index c7f4eebfb..aee1ce2dd 100644 --- a/OpenCL/m01700_a3-optimized.cl +++ b/OpenCL/m01700_a3-optimized.cl @@ -256,7 +256,7 @@ DECLSPEC void m01700s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m01700_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01700_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -296,7 +296,7 @@ KERNEL_FQ void m01700_m04 (KERN_ATTR_VECTOR ()) m01700m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01700_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01700_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -336,7 +336,7 @@ KERNEL_FQ void m01700_m08 (KERN_ATTR_VECTOR ()) m01700m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01700_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01700_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -376,7 +376,7 @@ KERNEL_FQ void m01700_m16 (KERN_ATTR_VECTOR ()) m01700m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01700_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01700_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -416,7 +416,7 @@ KERNEL_FQ void m01700_s04 (KERN_ATTR_VECTOR ()) m01700s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01700_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01700_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -456,7 +456,7 @@ KERNEL_FQ void m01700_s08 (KERN_ATTR_VECTOR ()) m01700s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01700_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01700_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m01700_a3-pure.cl b/OpenCL/m01700_a3-pure.cl index dd04f3616..86e719a88 100644 --- a/OpenCL/m01700_a3-pure.cl +++ b/OpenCL/m01700_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m01700_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01700_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void m01700_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m01700_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01700_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01710_a0-optimized.cl b/OpenCL/m01710_a0-optimized.cl index fa9a024ea..861b8f04d 100644 --- a/OpenCL/m01710_a0-optimized.cl +++ b/OpenCL/m01710_a0-optimized.cl @@ -122,7 +122,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void m01710_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01710_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -288,15 +288,15 @@ KERNEL_FQ void m01710_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01710_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01710_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01710_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01710_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01710_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01710_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -474,10 +474,10 @@ KERNEL_FQ void m01710_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01710_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01710_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01710_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01710_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01710_a0-pure.cl b/OpenCL/m01710_a0-pure.cl index cdf537ae1..a35c3ceea 100644 --- a/OpenCL/m01710_a0-pure.cl +++ b/OpenCL/m01710_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m01710_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01710_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void m01710_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01710_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01710_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01710_a1-optimized.cl b/OpenCL/m01710_a1-optimized.cl index bb395f2ae..563cf257b 100644 --- a/OpenCL/m01710_a1-optimized.cl +++ b/OpenCL/m01710_a1-optimized.cl @@ -120,7 +120,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void m01710_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01710_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -346,15 +346,15 @@ KERNEL_FQ void m01710_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01710_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01710_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01710_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01710_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01710_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01710_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -592,10 +592,10 @@ KERNEL_FQ void m01710_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01710_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01710_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01710_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01710_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01710_a1-pure.cl b/OpenCL/m01710_a1-pure.cl index e81e1d7e4..d1845b7a0 100644 --- a/OpenCL/m01710_a1-pure.cl +++ b/OpenCL/m01710_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m01710_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01710_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -67,7 +67,7 @@ KERNEL_FQ void m01710_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01710_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01710_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01710_a3-optimized.cl b/OpenCL/m01710_a3-optimized.cl index e2a8aecbe..2893d5aaa 100644 --- a/OpenCL/m01710_a3-optimized.cl +++ b/OpenCL/m01710_a3-optimized.cl @@ -307,7 +307,7 @@ DECLSPEC void m01710s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m01710_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01710_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -347,7 +347,7 @@ KERNEL_FQ void m01710_m04 (KERN_ATTR_VECTOR ()) m01710m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01710_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01710_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -387,7 +387,7 @@ KERNEL_FQ void m01710_m08 (KERN_ATTR_VECTOR ()) m01710m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01710_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01710_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -427,7 +427,7 @@ KERNEL_FQ void m01710_m16 (KERN_ATTR_VECTOR ()) m01710m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01710_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01710_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -467,7 +467,7 @@ KERNEL_FQ void m01710_s04 (KERN_ATTR_VECTOR ()) m01710s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01710_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01710_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -507,7 +507,7 @@ KERNEL_FQ void m01710_s08 (KERN_ATTR_VECTOR ()) m01710s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01710_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01710_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m01710_a3-pure.cl b/OpenCL/m01710_a3-pure.cl index 340e2ece0..deb999393 100644 --- a/OpenCL/m01710_a3-pure.cl +++ b/OpenCL/m01710_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m01710_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01710_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void m01710_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m01710_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01710_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01720_a0-optimized.cl b/OpenCL/m01720_a0-optimized.cl index 669108e88..d0763acce 100644 --- a/OpenCL/m01720_a0-optimized.cl +++ b/OpenCL/m01720_a0-optimized.cl @@ -122,7 +122,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void m01720_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01720_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -268,15 +268,15 @@ KERNEL_FQ void m01720_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01720_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01720_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01720_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01720_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01720_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01720_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -434,10 +434,10 @@ KERNEL_FQ void m01720_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01720_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01720_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01720_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01720_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01720_a0-pure.cl b/OpenCL/m01720_a0-pure.cl index 33c9d16d0..bf690d1f9 100644 --- a/OpenCL/m01720_a0-pure.cl +++ b/OpenCL/m01720_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m01720_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01720_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -64,7 +64,7 @@ KERNEL_FQ void m01720_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01720_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01720_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01720_a1-optimized.cl b/OpenCL/m01720_a1-optimized.cl index a6882e1c1..83b8838c5 100644 --- a/OpenCL/m01720_a1-optimized.cl +++ b/OpenCL/m01720_a1-optimized.cl @@ -120,7 +120,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void m01720_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01720_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -324,15 +324,15 @@ KERNEL_FQ void m01720_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01720_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01720_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01720_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01720_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01720_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01720_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -548,10 +548,10 @@ KERNEL_FQ void m01720_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01720_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01720_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01720_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01720_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01720_a1-pure.cl b/OpenCL/m01720_a1-pure.cl index aa06164df..5dffba6c1 100644 --- a/OpenCL/m01720_a1-pure.cl +++ b/OpenCL/m01720_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m01720_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01720_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -58,7 +58,7 @@ KERNEL_FQ void m01720_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01720_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01720_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01720_a3-optimized.cl b/OpenCL/m01720_a3-optimized.cl index de40817c2..d37014204 100644 --- a/OpenCL/m01720_a3-optimized.cl +++ b/OpenCL/m01720_a3-optimized.cl @@ -362,7 +362,7 @@ DECLSPEC void m01720s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m01720_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01720_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -411,7 +411,7 @@ KERNEL_FQ void m01720_m04 (KERN_ATTR_BASIC ()) m01720m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01720_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01720_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -460,7 +460,7 @@ KERNEL_FQ void m01720_m08 (KERN_ATTR_BASIC ()) m01720m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01720_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01720_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -509,7 +509,7 @@ KERNEL_FQ void m01720_m16 (KERN_ATTR_BASIC ()) m01720m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01720_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01720_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -558,7 +558,7 @@ KERNEL_FQ void m01720_s04 (KERN_ATTR_BASIC ()) m01720s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01720_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01720_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -607,7 +607,7 @@ KERNEL_FQ void m01720_s08 (KERN_ATTR_BASIC ()) m01720s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01720_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01720_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m01720_a3-pure.cl b/OpenCL/m01720_a3-pure.cl index ec7a882d5..4820e931b 100644 --- a/OpenCL/m01720_a3-pure.cl +++ b/OpenCL/m01720_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m01720_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01720_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -75,7 +75,7 @@ KERNEL_FQ void m01720_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m01720_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01720_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01730_a0-optimized.cl b/OpenCL/m01730_a0-optimized.cl index 7638c39f3..5eec58984 100644 --- a/OpenCL/m01730_a0-optimized.cl +++ b/OpenCL/m01730_a0-optimized.cl @@ -122,7 +122,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void m01730_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01730_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -293,15 +293,15 @@ KERNEL_FQ void m01730_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01730_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01730_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01730_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01730_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01730_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01730_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -484,10 +484,10 @@ KERNEL_FQ void m01730_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01730_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01730_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01730_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01730_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01730_a0-pure.cl b/OpenCL/m01730_a0-pure.cl index 3b0cd3ebe..7deed7724 100644 --- a/OpenCL/m01730_a0-pure.cl +++ b/OpenCL/m01730_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m01730_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01730_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void m01730_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01730_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01730_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01730_a1-optimized.cl b/OpenCL/m01730_a1-optimized.cl index d491e077d..1836c668a 100644 --- a/OpenCL/m01730_a1-optimized.cl +++ b/OpenCL/m01730_a1-optimized.cl @@ -120,7 +120,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void m01730_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01730_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -351,15 +351,15 @@ KERNEL_FQ void m01730_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01730_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01730_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01730_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01730_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01730_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01730_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -602,10 +602,10 @@ KERNEL_FQ void m01730_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01730_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01730_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01730_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01730_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01730_a1-pure.cl b/OpenCL/m01730_a1-pure.cl index 88ae2f6ad..711e64d02 100644 --- a/OpenCL/m01730_a1-pure.cl +++ b/OpenCL/m01730_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m01730_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01730_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -67,7 +67,7 @@ KERNEL_FQ void m01730_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01730_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01730_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01730_a3-optimized.cl b/OpenCL/m01730_a3-optimized.cl index ecfc09f94..1e5fba2c1 100644 --- a/OpenCL/m01730_a3-optimized.cl +++ b/OpenCL/m01730_a3-optimized.cl @@ -307,7 +307,7 @@ DECLSPEC void m01730s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m01730_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01730_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -347,7 +347,7 @@ KERNEL_FQ void m01730_m04 (KERN_ATTR_VECTOR ()) m01730m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01730_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01730_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -387,7 +387,7 @@ KERNEL_FQ void m01730_m08 (KERN_ATTR_VECTOR ()) m01730m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01730_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01730_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -427,7 +427,7 @@ KERNEL_FQ void m01730_m16 (KERN_ATTR_VECTOR ()) m01730m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01730_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01730_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -467,7 +467,7 @@ KERNEL_FQ void m01730_s04 (KERN_ATTR_VECTOR ()) m01730s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01730_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01730_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -507,7 +507,7 @@ KERNEL_FQ void m01730_s08 (KERN_ATTR_VECTOR ()) m01730s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01730_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01730_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m01730_a3-pure.cl b/OpenCL/m01730_a3-pure.cl index 9f9e0f2e3..a97e9abb3 100644 --- a/OpenCL/m01730_a3-pure.cl +++ b/OpenCL/m01730_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m01730_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01730_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void m01730_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m01730_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01730_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01740_a0-optimized.cl b/OpenCL/m01740_a0-optimized.cl index c384bbd39..4132e930c 100644 --- a/OpenCL/m01740_a0-optimized.cl +++ b/OpenCL/m01740_a0-optimized.cl @@ -122,7 +122,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void m01740_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01740_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -273,15 +273,15 @@ KERNEL_FQ void m01740_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01740_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01740_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01740_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01740_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01740_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01740_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -444,10 +444,10 @@ KERNEL_FQ void m01740_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01740_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01740_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01740_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01740_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01740_a0-pure.cl b/OpenCL/m01740_a0-pure.cl index 1fd0df2ca..2cfcfe14c 100644 --- a/OpenCL/m01740_a0-pure.cl +++ b/OpenCL/m01740_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m01740_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01740_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -64,7 +64,7 @@ KERNEL_FQ void m01740_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01740_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01740_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01740_a1-optimized.cl b/OpenCL/m01740_a1-optimized.cl index f6a453911..6426ca3cd 100644 --- a/OpenCL/m01740_a1-optimized.cl +++ b/OpenCL/m01740_a1-optimized.cl @@ -120,7 +120,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void m01740_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01740_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -329,15 +329,15 @@ KERNEL_FQ void m01740_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01740_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01740_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01740_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01740_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01740_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01740_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -558,10 +558,10 @@ KERNEL_FQ void m01740_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01740_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01740_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01740_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01740_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01740_a1-pure.cl b/OpenCL/m01740_a1-pure.cl index 7144b9ab7..60cd364e0 100644 --- a/OpenCL/m01740_a1-pure.cl +++ b/OpenCL/m01740_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m01740_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01740_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -58,7 +58,7 @@ KERNEL_FQ void m01740_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01740_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01740_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01740_a3-optimized.cl b/OpenCL/m01740_a3-optimized.cl index df4a1c10d..0a6e54d81 100644 --- a/OpenCL/m01740_a3-optimized.cl +++ b/OpenCL/m01740_a3-optimized.cl @@ -362,7 +362,7 @@ DECLSPEC void m01740s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m01740_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01740_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -411,7 +411,7 @@ KERNEL_FQ void m01740_m04 (KERN_ATTR_BASIC ()) m01740m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01740_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01740_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -460,7 +460,7 @@ KERNEL_FQ void m01740_m08 (KERN_ATTR_BASIC ()) m01740m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01740_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01740_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -509,7 +509,7 @@ KERNEL_FQ void m01740_m16 (KERN_ATTR_BASIC ()) m01740m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01740_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01740_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -558,7 +558,7 @@ KERNEL_FQ void m01740_s04 (KERN_ATTR_BASIC ()) m01740s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01740_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01740_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -607,7 +607,7 @@ KERNEL_FQ void m01740_s08 (KERN_ATTR_BASIC ()) m01740s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01740_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01740_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m01740_a3-pure.cl b/OpenCL/m01740_a3-pure.cl index 4e448f353..1d27f3998 100644 --- a/OpenCL/m01740_a3-pure.cl +++ b/OpenCL/m01740_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m01740_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01740_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -75,7 +75,7 @@ KERNEL_FQ void m01740_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m01740_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01740_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01750_a0-optimized.cl b/OpenCL/m01750_a0-optimized.cl index 32a7c5c75..c6f9a1ef7 100644 --- a/OpenCL/m01750_a0-optimized.cl +++ b/OpenCL/m01750_a0-optimized.cl @@ -191,7 +191,7 @@ DECLSPEC void hmac_sha512_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha512_transform_transport_vector (w0_t, w1_t, w2_t, w3_t, digest); } -KERNEL_FQ void m01750_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01750_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -310,15 +310,15 @@ KERNEL_FQ void m01750_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01750_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01750_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01750_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01750_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01750_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01750_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -449,10 +449,10 @@ KERNEL_FQ void m01750_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01750_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01750_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01750_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01750_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01750_a0-pure.cl b/OpenCL/m01750_a0-pure.cl index 7fae20f0b..5b8958ee3 100644 --- a/OpenCL/m01750_a0-pure.cl +++ b/OpenCL/m01750_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m01750_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01750_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void m01750_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01750_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01750_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01750_a1-optimized.cl b/OpenCL/m01750_a1-optimized.cl index b6925c871..746a924d7 100644 --- a/OpenCL/m01750_a1-optimized.cl +++ b/OpenCL/m01750_a1-optimized.cl @@ -189,7 +189,7 @@ DECLSPEC void hmac_sha512_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha512_transform_transport_vector (w0_t, w1_t, w2_t, w3_t, digest); } -KERNEL_FQ void m01750_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01750_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -376,15 +376,15 @@ KERNEL_FQ void m01750_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01750_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01750_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01750_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01750_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01750_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01750_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -583,10 +583,10 @@ KERNEL_FQ void m01750_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01750_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01750_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01750_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01750_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01750_a1-pure.cl b/OpenCL/m01750_a1-pure.cl index 4c9e99333..608054bf3 100644 --- a/OpenCL/m01750_a1-pure.cl +++ b/OpenCL/m01750_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m01750_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01750_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -92,7 +92,7 @@ KERNEL_FQ void m01750_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01750_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01750_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01750_a3-optimized.cl b/OpenCL/m01750_a3-optimized.cl index 196c7e597..0a7c13d35 100644 --- a/OpenCL/m01750_a3-optimized.cl +++ b/OpenCL/m01750_a3-optimized.cl @@ -415,7 +415,7 @@ DECLSPEC void m01750s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m01750_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01750_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -464,7 +464,7 @@ KERNEL_FQ void m01750_m04 (KERN_ATTR_BASIC ()) m01750m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01750_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01750_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -513,7 +513,7 @@ KERNEL_FQ void m01750_m08 (KERN_ATTR_BASIC ()) m01750m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01750_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01750_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -562,7 +562,7 @@ KERNEL_FQ void m01750_m16 (KERN_ATTR_BASIC ()) m01750m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01750_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01750_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -611,7 +611,7 @@ KERNEL_FQ void m01750_s04 (KERN_ATTR_BASIC ()) m01750s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01750_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01750_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -660,7 +660,7 @@ KERNEL_FQ void m01750_s08 (KERN_ATTR_BASIC ()) m01750s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01750_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01750_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m01750_a3-pure.cl b/OpenCL/m01750_a3-pure.cl index 297b0f82e..f89f033be 100644 --- a/OpenCL/m01750_a3-pure.cl +++ b/OpenCL/m01750_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m01750_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01750_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -78,7 +78,7 @@ KERNEL_FQ void m01750_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m01750_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01750_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01760_a0-optimized.cl b/OpenCL/m01760_a0-optimized.cl index 7ce89b233..b79a830b7 100644 --- a/OpenCL/m01760_a0-optimized.cl +++ b/OpenCL/m01760_a0-optimized.cl @@ -191,7 +191,7 @@ DECLSPEC void hmac_sha512_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha512_transform_transport_vector (w0_t, w1_t, w2_t, w3_t, digest); } -KERNEL_FQ void m01760_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01760_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -323,15 +323,15 @@ KERNEL_FQ void m01760_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01760_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01760_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01760_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01760_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01760_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01760_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -475,10 +475,10 @@ KERNEL_FQ void m01760_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01760_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01760_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01760_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01760_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01760_a0-pure.cl b/OpenCL/m01760_a0-pure.cl index a1a2f401f..91cbdee15 100644 --- a/OpenCL/m01760_a0-pure.cl +++ b/OpenCL/m01760_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m01760_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01760_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void m01760_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01760_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01760_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01760_a1-optimized.cl b/OpenCL/m01760_a1-optimized.cl index 713ede277..f652d1d28 100644 --- a/OpenCL/m01760_a1-optimized.cl +++ b/OpenCL/m01760_a1-optimized.cl @@ -189,7 +189,7 @@ DECLSPEC void hmac_sha512_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha512_transform_transport_vector (w0_t, w1_t, w2_t, w3_t, digest); } -KERNEL_FQ void m01760_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01760_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -381,15 +381,15 @@ KERNEL_FQ void m01760_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01760_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01760_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01760_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01760_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01760_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01760_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -593,10 +593,10 @@ KERNEL_FQ void m01760_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01760_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01760_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01760_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01760_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01760_a1-pure.cl b/OpenCL/m01760_a1-pure.cl index 9c44ccd33..0a3460c69 100644 --- a/OpenCL/m01760_a1-pure.cl +++ b/OpenCL/m01760_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m01760_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01760_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -94,7 +94,7 @@ KERNEL_FQ void m01760_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01760_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01760_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01760_a3-optimized.cl b/OpenCL/m01760_a3-optimized.cl index 674fee09f..03f86721c 100644 --- a/OpenCL/m01760_a3-optimized.cl +++ b/OpenCL/m01760_a3-optimized.cl @@ -411,7 +411,7 @@ DECLSPEC void m01760s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m01760_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01760_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -460,7 +460,7 @@ KERNEL_FQ void m01760_m04 (KERN_ATTR_BASIC ()) m01760m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01760_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01760_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -509,7 +509,7 @@ KERNEL_FQ void m01760_m08 (KERN_ATTR_BASIC ()) m01760m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01760_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01760_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -558,7 +558,7 @@ KERNEL_FQ void m01760_m16 (KERN_ATTR_BASIC ()) m01760m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01760_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01760_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -607,7 +607,7 @@ KERNEL_FQ void m01760_s04 (KERN_ATTR_BASIC ()) m01760s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01760_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01760_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -656,7 +656,7 @@ KERNEL_FQ void m01760_s08 (KERN_ATTR_BASIC ()) m01760s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01760_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01760_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m01760_a3-pure.cl b/OpenCL/m01760_a3-pure.cl index a929aaf70..b00cdcf64 100644 --- a/OpenCL/m01760_a3-pure.cl +++ b/OpenCL/m01760_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m01760_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01760_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void m01760_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m01760_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01760_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01770_a0-optimized.cl b/OpenCL/m01770_a0-optimized.cl index b4a9f3eea..917a7ad4b 100644 --- a/OpenCL/m01770_a0-optimized.cl +++ b/OpenCL/m01770_a0-optimized.cl @@ -122,7 +122,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void m01770_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01770_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -220,15 +220,15 @@ KERNEL_FQ void m01770_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01770_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01770_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01770_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01770_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01770_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01770_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -338,10 +338,10 @@ KERNEL_FQ void m01770_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01770_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01770_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m01770_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01770_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01770_a0-pure.cl b/OpenCL/m01770_a0-pure.cl index 462288df8..7c026653e 100644 --- a/OpenCL/m01770_a0-pure.cl +++ b/OpenCL/m01770_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m01770_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01770_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void m01770_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m01770_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m01770_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01770_a1-optimized.cl b/OpenCL/m01770_a1-optimized.cl index 41f6a77df..c96298241 100644 --- a/OpenCL/m01770_a1-optimized.cl +++ b/OpenCL/m01770_a1-optimized.cl @@ -120,7 +120,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void m01770_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01770_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -276,15 +276,15 @@ KERNEL_FQ void m01770_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01770_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01770_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01770_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01770_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01770_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01770_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -452,10 +452,10 @@ KERNEL_FQ void m01770_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01770_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01770_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m01770_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01770_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01770_a1-pure.cl b/OpenCL/m01770_a1-pure.cl index 46c56dc12..900aaf082 100644 --- a/OpenCL/m01770_a1-pure.cl +++ b/OpenCL/m01770_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m01770_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01770_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void m01770_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m01770_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m01770_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01770_a3-optimized.cl b/OpenCL/m01770_a3-optimized.cl index 248e644ec..7847aa924 100644 --- a/OpenCL/m01770_a3-optimized.cl +++ b/OpenCL/m01770_a3-optimized.cl @@ -258,7 +258,7 @@ DECLSPEC void m01770s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m01770_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01770_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -298,7 +298,7 @@ KERNEL_FQ void m01770_m04 (KERN_ATTR_VECTOR ()) m01770m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01770_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01770_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -338,7 +338,7 @@ KERNEL_FQ void m01770_m08 (KERN_ATTR_VECTOR ()) m01770m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01770_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01770_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -378,7 +378,7 @@ KERNEL_FQ void m01770_m16 (KERN_ATTR_VECTOR ()) m01770m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01770_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01770_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -418,7 +418,7 @@ KERNEL_FQ void m01770_s04 (KERN_ATTR_VECTOR ()) m01770s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01770_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01770_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -458,7 +458,7 @@ KERNEL_FQ void m01770_s08 (KERN_ATTR_VECTOR ()) m01770s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m01770_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01770_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m01770_a3-pure.cl b/OpenCL/m01770_a3-pure.cl index 7cd13c39c..aecd964bb 100644 --- a/OpenCL/m01770_a3-pure.cl +++ b/OpenCL/m01770_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m01770_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01770_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void m01770_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m01770_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m01770_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01800-optimized.cl b/OpenCL/m01800-optimized.cl index e994b7985..978e0c672 100644 --- a/OpenCL/m01800-optimized.cl +++ b/OpenCL/m01800-optimized.cl @@ -171,7 +171,7 @@ DECLSPEC void orig_sha512_final (PRIVATE_AS orig_sha512_ctx_t *sha512_ctx) sha512_transform_transport (sha512_ctx->buf, sha512_ctx->state); } -KERNEL_FQ void m01800_init (KERN_ATTR_TMPS (sha512crypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m01800_init (KERN_ATTR_TMPS (sha512crypt_tmp_t)) { /** * base @@ -300,7 +300,7 @@ KERNEL_FQ void m01800_init (KERN_ATTR_TMPS (sha512crypt_tmp_t)) tmps[gid].l_s_bytes[1] = sha512_ctx.state[1]; } -KERNEL_FQ void m01800_loop (KERN_ATTR_TMPS (sha512crypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m01800_loop (KERN_ATTR_TMPS (sha512crypt_tmp_t)) { /** * base @@ -477,7 +477,7 @@ KERNEL_FQ void m01800_loop (KERN_ATTR_TMPS (sha512crypt_tmp_t)) tmps[gid].l_alt_result[7] = l_alt_result[7]; } -KERNEL_FQ void m01800_comp (KERN_ATTR_TMPS (sha512crypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m01800_comp (KERN_ATTR_TMPS (sha512crypt_tmp_t)) { /** * base diff --git a/OpenCL/m01800-pure.cl b/OpenCL/m01800-pure.cl index 77bf38ba5..2d4a917ed 100644 --- a/OpenCL/m01800-pure.cl +++ b/OpenCL/m01800-pure.cl @@ -28,7 +28,7 @@ typedef struct sha512crypt_tmp } sha512crypt_tmp_t; -KERNEL_FQ void m01800_init (KERN_ATTR_TMPS (sha512crypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m01800_init (KERN_ATTR_TMPS (sha512crypt_tmp_t)) { /** * base @@ -313,7 +313,7 @@ KERNEL_FQ void m01800_init (KERN_ATTR_TMPS (sha512crypt_tmp_t)) for (int i = 0; i < 64; i++) tmps[gid].s_bytes[i] = s_final[i]; } -KERNEL_FQ void m01800_loop (KERN_ATTR_TMPS (sha512crypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m01800_loop (KERN_ATTR_TMPS (sha512crypt_tmp_t)) { /** * base @@ -397,7 +397,7 @@ KERNEL_FQ void m01800_loop (KERN_ATTR_TMPS (sha512crypt_tmp_t)) for (int i = 0; i < 16; i++) tmps[gid].alt_result[i] = alt_result[i]; } -KERNEL_FQ void m01800_comp (KERN_ATTR_TMPS (sha512crypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m01800_comp (KERN_ATTR_TMPS (sha512crypt_tmp_t)) { /** * base diff --git a/OpenCL/m02000_a0-optimized.cl b/OpenCL/m02000_a0-optimized.cl index 7b537538e..f7597cc9c 100644 --- a/OpenCL/m02000_a0-optimized.cl +++ b/OpenCL/m02000_a0-optimized.cl @@ -10,26 +10,26 @@ #include M2S(INCLUDE_PATH/inc_common.cl) #endif -KERNEL_FQ void m02000_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02000_m04 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m02000_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02000_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m02000_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02000_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m02000_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02000_s04 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m02000_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02000_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m02000_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02000_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m02000_a0-pure.cl b/OpenCL/m02000_a0-pure.cl index b902aa2c9..280e4bf4a 100644 --- a/OpenCL/m02000_a0-pure.cl +++ b/OpenCL/m02000_a0-pure.cl @@ -10,10 +10,10 @@ #include M2S(INCLUDE_PATH/inc_common.cl) #endif -KERNEL_FQ void m02000_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02000_mxx (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m02000_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02000_sxx (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m02000_a1-optimized.cl b/OpenCL/m02000_a1-optimized.cl index 248122e0f..7ff89e2b9 100644 --- a/OpenCL/m02000_a1-optimized.cl +++ b/OpenCL/m02000_a1-optimized.cl @@ -10,26 +10,26 @@ #include M2S(INCLUDE_PATH/inc_common.cl) #endif -KERNEL_FQ void m02000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02000_m04 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m02000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02000_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m02000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02000_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m02000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02000_s04 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m02000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02000_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m02000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02000_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m02000_a1-pure.cl b/OpenCL/m02000_a1-pure.cl index 71a8c9015..2043d4d2d 100644 --- a/OpenCL/m02000_a1-pure.cl +++ b/OpenCL/m02000_a1-pure.cl @@ -10,10 +10,10 @@ #include M2S(INCLUDE_PATH/inc_common.cl) #endif -KERNEL_FQ void m02000_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02000_mxx (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m02000_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02000_sxx (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m02000_a3-optimized.cl b/OpenCL/m02000_a3-optimized.cl index 248122e0f..7ff89e2b9 100644 --- a/OpenCL/m02000_a3-optimized.cl +++ b/OpenCL/m02000_a3-optimized.cl @@ -10,26 +10,26 @@ #include M2S(INCLUDE_PATH/inc_common.cl) #endif -KERNEL_FQ void m02000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02000_m04 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m02000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02000_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m02000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02000_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m02000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02000_s04 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m02000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02000_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m02000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02000_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m02000_a3-pure.cl b/OpenCL/m02000_a3-pure.cl index 71a8c9015..2043d4d2d 100644 --- a/OpenCL/m02000_a3-pure.cl +++ b/OpenCL/m02000_a3-pure.cl @@ -10,10 +10,10 @@ #include M2S(INCLUDE_PATH/inc_common.cl) #endif -KERNEL_FQ void m02000_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02000_mxx (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m02000_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02000_sxx (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m02100-pure.cl b/OpenCL/m02100-pure.cl index ec97d1d15..a52f7db3d 100644 --- a/OpenCL/m02100-pure.cl +++ b/OpenCL/m02100-pure.cl @@ -65,7 +65,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m02100_init (KERN_ATTR_TMPS (dcc2_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m02100_init (KERN_ATTR_TMPS (dcc2_tmp_t)) { /** * base @@ -180,7 +180,7 @@ KERNEL_FQ void m02100_init (KERN_ATTR_TMPS (dcc2_tmp_t)) tmps[gid].out[3] = tmps[gid].dgst[3]; } -KERNEL_FQ void m02100_loop (KERN_ATTR_TMPS (dcc2_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m02100_loop (KERN_ATTR_TMPS (dcc2_tmp_t)) { /** * base @@ -267,7 +267,7 @@ KERNEL_FQ void m02100_loop (KERN_ATTR_TMPS (dcc2_tmp_t)) unpackv (tmps, out, gid, 3, out[3]); } -KERNEL_FQ void m02100_comp (KERN_ATTR_TMPS (dcc2_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m02100_comp (KERN_ATTR_TMPS (dcc2_tmp_t)) { /** * base diff --git a/OpenCL/m02400_a0-optimized.cl b/OpenCL/m02400_a0-optimized.cl index f10aac5cb..d26341057 100644 --- a/OpenCL/m02400_a0-optimized.cl +++ b/OpenCL/m02400_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m02400_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02400_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -177,15 +177,15 @@ KERNEL_FQ void m02400_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m02400_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02400_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m02400_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02400_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m02400_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02400_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -361,10 +361,10 @@ KERNEL_FQ void m02400_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m02400_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02400_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m02400_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02400_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m02400_a1-optimized.cl b/OpenCL/m02400_a1-optimized.cl index 7ad7bd058..c81356298 100644 --- a/OpenCL/m02400_a1-optimized.cl +++ b/OpenCL/m02400_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m02400_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02400_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -239,15 +239,15 @@ KERNEL_FQ void m02400_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m02400_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02400_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m02400_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02400_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m02400_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02400_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -487,10 +487,10 @@ KERNEL_FQ void m02400_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m02400_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02400_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m02400_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02400_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m02400_a3-optimized.cl b/OpenCL/m02400_a3-optimized.cl index b3b3f6d94..b2222db8e 100644 --- a/OpenCL/m02400_a3-optimized.cl +++ b/OpenCL/m02400_a3-optimized.cl @@ -453,7 +453,7 @@ DECLSPEC void m02400s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m02400_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m02400_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -493,7 +493,7 @@ KERNEL_FQ void m02400_m04 (KERN_ATTR_VECTOR ()) m02400m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m02400_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m02400_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -533,7 +533,7 @@ KERNEL_FQ void m02400_m08 (KERN_ATTR_VECTOR ()) m02400m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m02400_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m02400_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -573,7 +573,7 @@ KERNEL_FQ void m02400_m16 (KERN_ATTR_VECTOR ()) m02400m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m02400_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m02400_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -613,7 +613,7 @@ KERNEL_FQ void m02400_s04 (KERN_ATTR_VECTOR ()) m02400s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m02400_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m02400_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -653,7 +653,7 @@ KERNEL_FQ void m02400_s08 (KERN_ATTR_VECTOR ()) m02400s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m02400_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m02400_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m02410_a0-optimized.cl b/OpenCL/m02410_a0-optimized.cl index 84ab9e682..b5c3b0d87 100644 --- a/OpenCL/m02410_a0-optimized.cl +++ b/OpenCL/m02410_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m02410_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02410_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -256,15 +256,15 @@ KERNEL_FQ void m02410_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m02410_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02410_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m02410_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02410_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m02410_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02410_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -519,10 +519,10 @@ KERNEL_FQ void m02410_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m02410_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02410_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m02410_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02410_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m02410_a1-optimized.cl b/OpenCL/m02410_a1-optimized.cl index 8e0045453..692b65005 100644 --- a/OpenCL/m02410_a1-optimized.cl +++ b/OpenCL/m02410_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m02410_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02410_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -314,15 +314,15 @@ KERNEL_FQ void m02410_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m02410_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02410_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m02410_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02410_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m02410_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02410_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -637,10 +637,10 @@ KERNEL_FQ void m02410_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m02410_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02410_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m02410_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02410_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m02410_a3-optimized.cl b/OpenCL/m02410_a3-optimized.cl index c5352aadf..6dae686f7 100644 --- a/OpenCL/m02410_a3-optimized.cl +++ b/OpenCL/m02410_a3-optimized.cl @@ -551,7 +551,7 @@ DECLSPEC void m02410s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m02410_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m02410_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -591,7 +591,7 @@ KERNEL_FQ void m02410_m04 (KERN_ATTR_VECTOR ()) m02410m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m02410_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m02410_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -631,7 +631,7 @@ KERNEL_FQ void m02410_m08 (KERN_ATTR_VECTOR ()) m02410m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m02410_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m02410_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -671,7 +671,7 @@ KERNEL_FQ void m02410_m16 (KERN_ATTR_VECTOR ()) m02410m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m02410_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m02410_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -711,7 +711,7 @@ KERNEL_FQ void m02410_s04 (KERN_ATTR_VECTOR ()) m02410s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m02410_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m02410_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -751,7 +751,7 @@ KERNEL_FQ void m02410_s08 (KERN_ATTR_VECTOR ()) m02410s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m02410_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m02410_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m02500-pure.cl b/OpenCL/m02500-pure.cl index 80bc26bdc..03484a373 100644 --- a/OpenCL/m02500-pure.cl +++ b/OpenCL/m02500-pure.cl @@ -128,7 +128,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m02500_init (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_eapol_t)) +KERNEL_FQ void HC_ATTR_SEQ m02500_init (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_eapol_t)) { /** * base @@ -236,7 +236,7 @@ KERNEL_FQ void m02500_init (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_eapol_t) tmps[gid].out[9] = sha1_hmac_ctx2.opad.h[4]; } -KERNEL_FQ void m02500_loop (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_eapol_t)) +KERNEL_FQ void HC_ATTR_SEQ m02500_loop (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_eapol_t)) { const u64 gid = get_global_id (0); @@ -379,12 +379,12 @@ KERNEL_FQ void m02500_loop (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_eapol_t) unpackv (tmps, out, gid, 9, out[4]); } -KERNEL_FQ void m02500_comp (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_eapol_t)) +KERNEL_FQ void HC_ATTR_SEQ m02500_comp (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_eapol_t)) { // not in use here, special case... } -KERNEL_FQ void m02500_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_eapol_t)) +KERNEL_FQ void HC_ATTR_SEQ m02500_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_eapol_t)) { const u64 gid = get_global_id (0); @@ -572,7 +572,7 @@ KERNEL_FQ void m02500_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_eapol_t) } } -KERNEL_FQ void m02500_aux2 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_eapol_t)) +KERNEL_FQ void HC_ATTR_SEQ m02500_aux2 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_eapol_t)) { const u64 gid = get_global_id (0); @@ -755,7 +755,7 @@ KERNEL_FQ void m02500_aux2 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_eapol_t) } } -KERNEL_FQ void m02500_aux3 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_eapol_t)) +KERNEL_FQ void HC_ATTR_SEQ m02500_aux3 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_eapol_t)) { /** * aes shared diff --git a/OpenCL/m02501-pure.cl b/OpenCL/m02501-pure.cl index 6bb174486..f220ac4fd 100644 --- a/OpenCL/m02501-pure.cl +++ b/OpenCL/m02501-pure.cl @@ -102,7 +102,7 @@ DECLSPEC void make_kn (u32 *k) k[3] ^= c * 0x87000000; } -KERNEL_FQ void m02501_init (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_eapol_t)) +KERNEL_FQ void HC_ATTR_SEQ m02501_init (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_eapol_t)) { const u64 gid = get_global_id (0); @@ -148,19 +148,19 @@ KERNEL_FQ void m02501_init (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_eapol_t)) tmps[gid].out[7] = hc_swap32_S (out[7]); } -KERNEL_FQ void m02501_loop (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_eapol_t)) +KERNEL_FQ void HC_ATTR_SEQ m02501_loop (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_eapol_t)) { const u64 gid = get_global_id (0); if (gid >= GID_CNT) return; } -KERNEL_FQ void m02501_comp (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_eapol_t)) +KERNEL_FQ void HC_ATTR_SEQ m02501_comp (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_eapol_t)) { // not in use here, special case... } -KERNEL_FQ void m02501_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_eapol_t)) +KERNEL_FQ void HC_ATTR_SEQ m02501_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_eapol_t)) { const u64 gid = get_global_id (0); @@ -348,7 +348,7 @@ KERNEL_FQ void m02501_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_eapol_t)) } } -KERNEL_FQ void m02501_aux2 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_eapol_t)) +KERNEL_FQ void HC_ATTR_SEQ m02501_aux2 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_eapol_t)) { const u64 gid = get_global_id (0); @@ -531,7 +531,7 @@ KERNEL_FQ void m02501_aux2 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_eapol_t)) } } -KERNEL_FQ void m02501_aux3 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_eapol_t)) +KERNEL_FQ void HC_ATTR_SEQ m02501_aux3 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_eapol_t)) { /** * aes shared diff --git a/OpenCL/m02610_a0-optimized.cl b/OpenCL/m02610_a0-optimized.cl index 47ccd84a5..29ac2bea5 100644 --- a/OpenCL/m02610_a0-optimized.cl +++ b/OpenCL/m02610_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m02610_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02610_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -304,15 +304,15 @@ KERNEL_FQ void m02610_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m02610_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02610_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m02610_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02610_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m02610_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02610_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -603,10 +603,10 @@ KERNEL_FQ void m02610_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m02610_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02610_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m02610_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02610_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m02610_a0-pure.cl b/OpenCL/m02610_a0-pure.cl index ecd7d3319..e178e82f4 100644 --- a/OpenCL/m02610_a0-pure.cl +++ b/OpenCL/m02610_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m02610_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02610_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -131,7 +131,7 @@ KERNEL_FQ void m02610_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m02610_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02610_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m02610_a1-optimized.cl b/OpenCL/m02610_a1-optimized.cl index 9f05b58d8..82b11d37d 100644 --- a/OpenCL/m02610_a1-optimized.cl +++ b/OpenCL/m02610_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m02610_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02610_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -361,15 +361,15 @@ KERNEL_FQ void m02610_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m02610_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02610_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m02610_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02610_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m02610_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02610_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -719,10 +719,10 @@ KERNEL_FQ void m02610_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m02610_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02610_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m02610_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02610_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m02610_a1-pure.cl b/OpenCL/m02610_a1-pure.cl index 569486bd0..1b9be9b53 100644 --- a/OpenCL/m02610_a1-pure.cl +++ b/OpenCL/m02610_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m02610_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02610_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -127,7 +127,7 @@ KERNEL_FQ void m02610_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m02610_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02610_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m02610_a3-optimized.cl b/OpenCL/m02610_a3-optimized.cl index bdbf35318..8c6296630 100644 --- a/OpenCL/m02610_a3-optimized.cl +++ b/OpenCL/m02610_a3-optimized.cl @@ -552,7 +552,7 @@ DECLSPEC void m02610s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m02610_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02610_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -622,7 +622,7 @@ KERNEL_FQ void m02610_m04 (KERN_ATTR_BASIC ()) m02610m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m02610_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02610_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -692,7 +692,7 @@ KERNEL_FQ void m02610_m08 (KERN_ATTR_BASIC ()) m02610m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m02610_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02610_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -762,7 +762,7 @@ KERNEL_FQ void m02610_m16 (KERN_ATTR_BASIC ()) m02610m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m02610_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02610_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -832,7 +832,7 @@ KERNEL_FQ void m02610_s04 (KERN_ATTR_BASIC ()) m02610s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m02610_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02610_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -902,7 +902,7 @@ KERNEL_FQ void m02610_s08 (KERN_ATTR_BASIC ()) m02610s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m02610_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02610_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m02610_a3-pure.cl b/OpenCL/m02610_a3-pure.cl index c9ff5c487..36bf15a5f 100644 --- a/OpenCL/m02610_a3-pure.cl +++ b/OpenCL/m02610_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m02610_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m02610_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -140,7 +140,7 @@ KERNEL_FQ void m02610_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m02610_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m02610_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m02630_a0-optimized.cl b/OpenCL/m02630_a0-optimized.cl index ceb71f299..b2dc24624 100644 --- a/OpenCL/m02630_a0-optimized.cl +++ b/OpenCL/m02630_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m02630_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02630_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -370,15 +370,15 @@ KERNEL_FQ void m02630_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m02630_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02630_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m02630_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02630_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m02630_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02630_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -735,10 +735,10 @@ KERNEL_FQ void m02630_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m02630_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02630_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m02630_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02630_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m02630_a0-pure.cl b/OpenCL/m02630_a0-pure.cl index 6c691a526..f3b89f02c 100644 --- a/OpenCL/m02630_a0-pure.cl +++ b/OpenCL/m02630_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m02630_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02630_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -137,7 +137,7 @@ KERNEL_FQ void m02630_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m02630_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02630_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m02630_a1-optimized.cl b/OpenCL/m02630_a1-optimized.cl index 7f6971c8d..79b723978 100644 --- a/OpenCL/m02630_a1-optimized.cl +++ b/OpenCL/m02630_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m02630_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02630_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -428,15 +428,15 @@ KERNEL_FQ void m02630_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m02630_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02630_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m02630_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02630_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m02630_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02630_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -853,10 +853,10 @@ KERNEL_FQ void m02630_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m02630_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02630_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m02630_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02630_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m02630_a1-pure.cl b/OpenCL/m02630_a1-pure.cl index 1157dd7d7..3f28b6f5b 100644 --- a/OpenCL/m02630_a1-pure.cl +++ b/OpenCL/m02630_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m02630_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02630_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -135,7 +135,7 @@ KERNEL_FQ void m02630_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m02630_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02630_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m02630_a3-optimized.cl b/OpenCL/m02630_a3-optimized.cl index aa12d6a94..e838b5474 100644 --- a/OpenCL/m02630_a3-optimized.cl +++ b/OpenCL/m02630_a3-optimized.cl @@ -642,7 +642,7 @@ DECLSPEC void m02630s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m02630_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02630_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -712,7 +712,7 @@ KERNEL_FQ void m02630_m04 (KERN_ATTR_BASIC ()) m02630m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m02630_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02630_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -782,7 +782,7 @@ KERNEL_FQ void m02630_m08 (KERN_ATTR_BASIC ()) m02630m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m02630_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02630_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -852,7 +852,7 @@ KERNEL_FQ void m02630_m16 (KERN_ATTR_BASIC ()) m02630m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m02630_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02630_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -922,7 +922,7 @@ KERNEL_FQ void m02630_s04 (KERN_ATTR_BASIC ()) m02630s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m02630_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02630_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -992,7 +992,7 @@ KERNEL_FQ void m02630_s08 (KERN_ATTR_BASIC ()) m02630s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m02630_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02630_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m02630_a3-pure.cl b/OpenCL/m02630_a3-pure.cl index 51c5fb3af..a23414cfb 100644 --- a/OpenCL/m02630_a3-pure.cl +++ b/OpenCL/m02630_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m02630_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m02630_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -148,7 +148,7 @@ KERNEL_FQ void m02630_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m02630_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m02630_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m02710_a0-optimized.cl b/OpenCL/m02710_a0-optimized.cl index 99fca1af1..70e35e6f2 100644 --- a/OpenCL/m02710_a0-optimized.cl +++ b/OpenCL/m02710_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m02710_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02710_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -389,15 +389,15 @@ KERNEL_FQ void m02710_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m02710_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02710_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m02710_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02710_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m02710_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02710_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -773,10 +773,10 @@ KERNEL_FQ void m02710_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m02710_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02710_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m02710_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02710_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m02710_a1-optimized.cl b/OpenCL/m02710_a1-optimized.cl index 5e8b2d4fe..38c96444b 100644 --- a/OpenCL/m02710_a1-optimized.cl +++ b/OpenCL/m02710_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m02710_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02710_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -446,15 +446,15 @@ KERNEL_FQ void m02710_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m02710_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02710_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m02710_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02710_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m02710_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02710_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -889,10 +889,10 @@ KERNEL_FQ void m02710_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m02710_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02710_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m02710_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02710_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m02710_a3-optimized.cl b/OpenCL/m02710_a3-optimized.cl index 3c8404772..d1a02db1f 100644 --- a/OpenCL/m02710_a3-optimized.cl +++ b/OpenCL/m02710_a3-optimized.cl @@ -721,7 +721,7 @@ DECLSPEC void m02710s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m02710_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02710_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -791,7 +791,7 @@ KERNEL_FQ void m02710_m04 (KERN_ATTR_BASIC ()) m02710m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m02710_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02710_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -861,7 +861,7 @@ KERNEL_FQ void m02710_m08 (KERN_ATTR_BASIC ()) m02710m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m02710_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02710_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -931,7 +931,7 @@ KERNEL_FQ void m02710_m16 (KERN_ATTR_BASIC ()) m02710m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m02710_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02710_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1001,7 +1001,7 @@ KERNEL_FQ void m02710_s04 (KERN_ATTR_BASIC ()) m02710s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m02710_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02710_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1071,7 +1071,7 @@ KERNEL_FQ void m02710_s08 (KERN_ATTR_BASIC ()) m02710s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m02710_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02710_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m02810_a0-optimized.cl b/OpenCL/m02810_a0-optimized.cl index 38853d0e2..6b673bf56 100644 --- a/OpenCL/m02810_a0-optimized.cl +++ b/OpenCL/m02810_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m02810_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02810_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -388,15 +388,15 @@ KERNEL_FQ void m02810_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m02810_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02810_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m02810_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02810_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m02810_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02810_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -771,10 +771,10 @@ KERNEL_FQ void m02810_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m02810_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02810_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m02810_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02810_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m02810_a0-pure.cl b/OpenCL/m02810_a0-pure.cl index 7beaed972..5ef5d972e 100644 --- a/OpenCL/m02810_a0-pure.cl +++ b/OpenCL/m02810_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m02810_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02810_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -154,7 +154,7 @@ KERNEL_FQ void m02810_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m02810_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m02810_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m02810_a1-optimized.cl b/OpenCL/m02810_a1-optimized.cl index 5b61d0e25..605c8a669 100644 --- a/OpenCL/m02810_a1-optimized.cl +++ b/OpenCL/m02810_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m02810_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02810_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -445,15 +445,15 @@ KERNEL_FQ void m02810_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m02810_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02810_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m02810_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02810_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m02810_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02810_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -887,10 +887,10 @@ KERNEL_FQ void m02810_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m02810_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02810_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m02810_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02810_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m02810_a1-pure.cl b/OpenCL/m02810_a1-pure.cl index 5aa69a11c..7d48641c9 100644 --- a/OpenCL/m02810_a1-pure.cl +++ b/OpenCL/m02810_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m02810_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02810_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -150,7 +150,7 @@ KERNEL_FQ void m02810_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m02810_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02810_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m02810_a3-optimized.cl b/OpenCL/m02810_a3-optimized.cl index 5f80b2be3..95837b073 100644 --- a/OpenCL/m02810_a3-optimized.cl +++ b/OpenCL/m02810_a3-optimized.cl @@ -719,7 +719,7 @@ DECLSPEC void m02810s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m02810_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02810_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -789,7 +789,7 @@ KERNEL_FQ void m02810_m04 (KERN_ATTR_BASIC ()) m02810m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m02810_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02810_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -859,7 +859,7 @@ KERNEL_FQ void m02810_m08 (KERN_ATTR_BASIC ()) m02810m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m02810_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02810_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -929,7 +929,7 @@ KERNEL_FQ void m02810_m16 (KERN_ATTR_BASIC ()) m02810m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m02810_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02810_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -999,7 +999,7 @@ KERNEL_FQ void m02810_s04 (KERN_ATTR_BASIC ()) m02810s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m02810_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02810_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1069,7 +1069,7 @@ KERNEL_FQ void m02810_s08 (KERN_ATTR_BASIC ()) m02810s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m02810_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m02810_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m02810_a3-pure.cl b/OpenCL/m02810_a3-pure.cl index e970b166e..42128e7e1 100644 --- a/OpenCL/m02810_a3-pure.cl +++ b/OpenCL/m02810_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m02810_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m02810_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -163,7 +163,7 @@ KERNEL_FQ void m02810_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m02810_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m02810_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m03000_a0-pure.cl b/OpenCL/m03000_a0-pure.cl index 58c3e7045..a78a7f02d 100644 --- a/OpenCL/m03000_a0-pure.cl +++ b/OpenCL/m03000_a0-pure.cl @@ -492,7 +492,7 @@ DECLSPEC void transform_netntlmv1_key (const u32 w0, const u32x w1, PRIVATE_AS u | ((k[7] & 0xff) << 24); } -KERNEL_FQ void m03000_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03000_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -577,7 +577,7 @@ KERNEL_FQ void m03000_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m03000_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03000_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m03000_a1-pure.cl b/OpenCL/m03000_a1-pure.cl index 35929b974..7e14ea6cb 100644 --- a/OpenCL/m03000_a1-pure.cl +++ b/OpenCL/m03000_a1-pure.cl @@ -490,7 +490,7 @@ DECLSPEC void transform_netntlmv1_key (const u32 w0, const u32x w1, PRIVATE_AS u | ((k[7] & 0xff) << 24); } -KERNEL_FQ void m03000_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03000_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -654,7 +654,7 @@ KERNEL_FQ void m03000_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m03000_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03000_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m03000_a3-pure.cl b/OpenCL/m03000_a3-pure.cl index 15c24a43e..42a3facbd 100644 --- a/OpenCL/m03000_a3-pure.cl +++ b/OpenCL/m03000_a3-pure.cl @@ -1730,7 +1730,7 @@ DECLSPEC void transpose32c (PRIVATE_AS u32 *data) // transpose bitslice mod : attention race conditions, need different buffers for *in and *out // -KERNEL_FQ void m03000_tm (KERN_ATTR_TM) +KERNEL_FQ void HC_ATTR_SEQ m03000_tm (KERN_ATTR_TM) { const u64 gid = get_global_id (0); @@ -1754,7 +1754,7 @@ KERNEL_FQ void m03000_tm (KERN_ATTR_TM) } } -KERNEL_FQ void m03000_mxx (KERN_ATTR_BITSLICE ()) +KERNEL_FQ void HC_ATTR_SEQ m03000_mxx (KERN_ATTR_BITSLICE ()) { /** * base @@ -2127,7 +2127,7 @@ KERNEL_FQ void m03000_mxx (KERN_ATTR_BITSLICE ()) } } -KERNEL_FQ void m03000_sxx (KERN_ATTR_BITSLICE ()) +KERNEL_FQ void HC_ATTR_SEQ m03000_sxx (KERN_ATTR_BITSLICE ()) { /** * base diff --git a/OpenCL/m03100_a0-optimized.cl b/OpenCL/m03100_a0-optimized.cl index 9bce4928a..983c91121 100644 --- a/OpenCL/m03100_a0-optimized.cl +++ b/OpenCL/m03100_a0-optimized.cl @@ -17,7 +17,7 @@ #include M2S(INCLUDE_PATH/inc_cipher_des.cl) #endif -KERNEL_FQ void m03100_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03100_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -241,15 +241,15 @@ KERNEL_FQ void m03100_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m03100_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03100_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m03100_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03100_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m03100_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03100_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -485,10 +485,10 @@ KERNEL_FQ void m03100_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m03100_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03100_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m03100_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03100_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m03100_a1-optimized.cl b/OpenCL/m03100_a1-optimized.cl index d027d2650..d6643552d 100644 --- a/OpenCL/m03100_a1-optimized.cl +++ b/OpenCL/m03100_a1-optimized.cl @@ -15,7 +15,7 @@ #include M2S(INCLUDE_PATH/inc_cipher_des.cl) #endif -KERNEL_FQ void m03100_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03100_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -299,15 +299,15 @@ KERNEL_FQ void m03100_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m03100_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03100_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m03100_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03100_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m03100_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03100_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -603,10 +603,10 @@ KERNEL_FQ void m03100_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m03100_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03100_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m03100_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03100_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m03100_a3-optimized.cl b/OpenCL/m03100_a3-optimized.cl index 5c92c78f5..2fdcd11a6 100644 --- a/OpenCL/m03100_a3-optimized.cl +++ b/OpenCL/m03100_a3-optimized.cl @@ -382,7 +382,7 @@ DECLSPEC void m03100s (SHM_TYPE u32 (*s_SPtrans)[64], SHM_TYPE u32 (*s_skb)[64], } } -KERNEL_FQ void m03100_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m03100_m04 (KERN_ATTR_VECTOR ()) { /** * modifier @@ -465,7 +465,7 @@ KERNEL_FQ void m03100_m04 (KERN_ATTR_VECTOR ()) m03100m (s_SPtrans, s_skb, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m03100_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m03100_m08 (KERN_ATTR_VECTOR ()) { /** * modifier @@ -548,11 +548,11 @@ KERNEL_FQ void m03100_m08 (KERN_ATTR_VECTOR ()) m03100m (s_SPtrans, s_skb, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m03100_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m03100_m16 (KERN_ATTR_VECTOR ()) { } -KERNEL_FQ void m03100_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m03100_s04 (KERN_ATTR_VECTOR ()) { /** * modifier @@ -635,7 +635,7 @@ KERNEL_FQ void m03100_s04 (KERN_ATTR_VECTOR ()) m03100s (s_SPtrans, s_skb, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m03100_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m03100_s08 (KERN_ATTR_VECTOR ()) { /** * modifier @@ -718,6 +718,6 @@ KERNEL_FQ void m03100_s08 (KERN_ATTR_VECTOR ()) m03100s (s_SPtrans, s_skb, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m03100_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m03100_s16 (KERN_ATTR_VECTOR ()) { } diff --git a/OpenCL/m03200-pure.cl b/OpenCL/m03200-pure.cl index 2828908d7..634188466 100644 --- a/OpenCL/m03200-pure.cl +++ b/OpenCL/m03200-pure.cl @@ -425,7 +425,7 @@ DECLSPEC void expand_key (PRIVATE_AS u32 *E, PRIVATE_AS u32 *W, const int len) } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m03200_init (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m03200_init (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base @@ -647,7 +647,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m03200_init (KERN_ATTR_TMPS } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m03200_loop (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m03200_loop (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base @@ -850,7 +850,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m03200_loop (KERN_ATTR_TMPS } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m03200_comp (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m03200_comp (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base diff --git a/OpenCL/m03500_a0-optimized.cl b/OpenCL/m03500_a0-optimized.cl index b24cdecb0..497b715a7 100644 --- a/OpenCL/m03500_a0-optimized.cl +++ b/OpenCL/m03500_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m03500_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03500_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -410,15 +410,15 @@ KERNEL_FQ void m03500_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m03500_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03500_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m03500_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03500_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m03500_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03500_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -815,10 +815,10 @@ KERNEL_FQ void m03500_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m03500_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03500_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m03500_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03500_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m03500_a0-pure.cl b/OpenCL/m03500_a0-pure.cl index bf87330c5..b9d4f68f8 100644 --- a/OpenCL/m03500_a0-pure.cl +++ b/OpenCL/m03500_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m03500_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03500_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -161,7 +161,7 @@ KERNEL_FQ void m03500_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m03500_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03500_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m03500_a1-optimized.cl b/OpenCL/m03500_a1-optimized.cl index 707718fce..efb358c57 100644 --- a/OpenCL/m03500_a1-optimized.cl +++ b/OpenCL/m03500_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m03500_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03500_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -467,15 +467,15 @@ KERNEL_FQ void m03500_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m03500_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03500_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m03500_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03500_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m03500_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03500_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -931,10 +931,10 @@ KERNEL_FQ void m03500_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m03500_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03500_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m03500_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03500_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m03500_a1-pure.cl b/OpenCL/m03500_a1-pure.cl index 66205828e..700f8569a 100644 --- a/OpenCL/m03500_a1-pure.cl +++ b/OpenCL/m03500_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m03500_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03500_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -157,7 +157,7 @@ KERNEL_FQ void m03500_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m03500_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03500_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m03500_a3-optimized.cl b/OpenCL/m03500_a3-optimized.cl index 1c7972e41..c6958c5ed 100644 --- a/OpenCL/m03500_a3-optimized.cl +++ b/OpenCL/m03500_a3-optimized.cl @@ -764,7 +764,7 @@ DECLSPEC void m03500s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m03500_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03500_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -834,7 +834,7 @@ KERNEL_FQ void m03500_m04 (KERN_ATTR_BASIC ()) m03500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m03500_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03500_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -904,7 +904,7 @@ KERNEL_FQ void m03500_m08 (KERN_ATTR_BASIC ()) m03500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m03500_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03500_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -974,7 +974,7 @@ KERNEL_FQ void m03500_m16 (KERN_ATTR_BASIC ()) m03500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m03500_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03500_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1044,7 +1044,7 @@ KERNEL_FQ void m03500_s04 (KERN_ATTR_BASIC ()) m03500s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m03500_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03500_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1114,7 +1114,7 @@ KERNEL_FQ void m03500_s08 (KERN_ATTR_BASIC ()) m03500s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m03500_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03500_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m03500_a3-pure.cl b/OpenCL/m03500_a3-pure.cl index c2200b2a1..9db03bc36 100644 --- a/OpenCL/m03500_a3-pure.cl +++ b/OpenCL/m03500_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m03500_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m03500_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -170,7 +170,7 @@ KERNEL_FQ void m03500_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m03500_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m03500_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m03610_a0-optimized.cl b/OpenCL/m03610_a0-optimized.cl index 7829bf6fd..616a18ea3 100644 --- a/OpenCL/m03610_a0-optimized.cl +++ b/OpenCL/m03610_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m03610_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03610_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -408,15 +408,15 @@ KERNEL_FQ void m03610_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m03610_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03610_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m03610_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03610_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m03610_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03610_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -811,10 +811,10 @@ KERNEL_FQ void m03610_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m03610_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03610_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m03610_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03610_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m03610_a0-pure.cl b/OpenCL/m03610_a0-pure.cl index 8eec44092..9ce718551 100644 --- a/OpenCL/m03610_a0-pure.cl +++ b/OpenCL/m03610_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m03610_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03610_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -161,7 +161,7 @@ KERNEL_FQ void m03610_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m03610_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03610_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m03610_a1-optimized.cl b/OpenCL/m03610_a1-optimized.cl index b8ed49a7a..84294280f 100644 --- a/OpenCL/m03610_a1-optimized.cl +++ b/OpenCL/m03610_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m03610_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03610_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -464,15 +464,15 @@ KERNEL_FQ void m03610_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m03610_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03610_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m03610_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03610_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m03610_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03610_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -925,10 +925,10 @@ KERNEL_FQ void m03610_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m03610_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03610_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m03610_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03610_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m03610_a1-pure.cl b/OpenCL/m03610_a1-pure.cl index 2e412d0dd..268125267 100644 --- a/OpenCL/m03610_a1-pure.cl +++ b/OpenCL/m03610_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m03610_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03610_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -157,7 +157,7 @@ KERNEL_FQ void m03610_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m03610_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03610_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m03610_a3-optimized.cl b/OpenCL/m03610_a3-optimized.cl index 55a6d7bf5..15eb1eff4 100644 --- a/OpenCL/m03610_a3-optimized.cl +++ b/OpenCL/m03610_a3-optimized.cl @@ -758,7 +758,7 @@ DECLSPEC void m03610s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m03610_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03610_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -828,7 +828,7 @@ KERNEL_FQ void m03610_m04 (KERN_ATTR_BASIC ()) m03610m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m03610_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03610_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -898,7 +898,7 @@ KERNEL_FQ void m03610_m08 (KERN_ATTR_BASIC ()) m03610m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m03610_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03610_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -968,7 +968,7 @@ KERNEL_FQ void m03610_m16 (KERN_ATTR_BASIC ()) m03610m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m03610_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03610_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1038,7 +1038,7 @@ KERNEL_FQ void m03610_s04 (KERN_ATTR_BASIC ()) m03610s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m03610_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03610_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1108,7 +1108,7 @@ KERNEL_FQ void m03610_s08 (KERN_ATTR_BASIC ()) m03610s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m03610_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03610_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m03610_a3-pure.cl b/OpenCL/m03610_a3-pure.cl index 1e622a413..1c103bad5 100644 --- a/OpenCL/m03610_a3-pure.cl +++ b/OpenCL/m03610_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m03610_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m03610_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -170,7 +170,7 @@ KERNEL_FQ void m03610_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m03610_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m03610_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m03710_a0-optimized.cl b/OpenCL/m03710_a0-optimized.cl index 54498ca59..9babadf62 100644 --- a/OpenCL/m03710_a0-optimized.cl +++ b/OpenCL/m03710_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m03710_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03710_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -335,15 +335,15 @@ KERNEL_FQ void m03710_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m03710_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03710_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m03710_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03710_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m03710_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03710_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -665,10 +665,10 @@ KERNEL_FQ void m03710_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m03710_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03710_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m03710_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03710_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m03710_a0-pure.cl b/OpenCL/m03710_a0-pure.cl index 0f61a73bf..a844b4c5a 100644 --- a/OpenCL/m03710_a0-pure.cl +++ b/OpenCL/m03710_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m03710_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03710_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -144,7 +144,7 @@ KERNEL_FQ void m03710_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m03710_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03710_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m03710_a1-optimized.cl b/OpenCL/m03710_a1-optimized.cl index c4254ae8d..8dff4d145 100644 --- a/OpenCL/m03710_a1-optimized.cl +++ b/OpenCL/m03710_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m03710_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03710_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -392,15 +392,15 @@ KERNEL_FQ void m03710_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m03710_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03710_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m03710_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03710_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m03710_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03710_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -781,10 +781,10 @@ KERNEL_FQ void m03710_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m03710_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03710_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m03710_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03710_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m03710_a1-pure.cl b/OpenCL/m03710_a1-pure.cl index af7e112b8..72d6f0261 100644 --- a/OpenCL/m03710_a1-pure.cl +++ b/OpenCL/m03710_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m03710_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03710_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -140,7 +140,7 @@ KERNEL_FQ void m03710_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m03710_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03710_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m03710_a3-optimized.cl b/OpenCL/m03710_a3-optimized.cl index c2d71c934..06ce5ff93 100644 --- a/OpenCL/m03710_a3-optimized.cl +++ b/OpenCL/m03710_a3-optimized.cl @@ -613,7 +613,7 @@ DECLSPEC void m03710s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m03710_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03710_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -683,7 +683,7 @@ KERNEL_FQ void m03710_m04 (KERN_ATTR_BASIC ()) m03710m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m03710_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03710_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -753,7 +753,7 @@ KERNEL_FQ void m03710_m08 (KERN_ATTR_BASIC ()) m03710m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m03710_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03710_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -823,7 +823,7 @@ KERNEL_FQ void m03710_m16 (KERN_ATTR_BASIC ()) m03710m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m03710_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03710_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -893,7 +893,7 @@ KERNEL_FQ void m03710_s04 (KERN_ATTR_BASIC ()) m03710s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m03710_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03710_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -963,7 +963,7 @@ KERNEL_FQ void m03710_s08 (KERN_ATTR_BASIC ()) m03710s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m03710_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03710_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m03710_a3-pure.cl b/OpenCL/m03710_a3-pure.cl index 553672fc5..caff7e13d 100644 --- a/OpenCL/m03710_a3-pure.cl +++ b/OpenCL/m03710_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m03710_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m03710_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -153,7 +153,7 @@ KERNEL_FQ void m03710_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m03710_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m03710_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m03730_a0-pure.cl b/OpenCL/m03730_a0-pure.cl index d3713e572..0506ff766 100644 --- a/OpenCL/m03730_a0-pure.cl +++ b/OpenCL/m03730_a0-pure.cl @@ -38,7 +38,7 @@ typedef struct md5_double_salt } md5_double_salt_t; -KERNEL_FQ void m03730_mxx (KERN_ATTR_ESALT (md5_double_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m03730_mxx (KERN_ATTR_ESALT (md5_double_salt_t)) { /** * modifier @@ -156,7 +156,7 @@ KERNEL_FQ void m03730_mxx (KERN_ATTR_ESALT (md5_double_salt_t)) } } -KERNEL_FQ void m03730_sxx (KERN_ATTR_ESALT (md5_double_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m03730_sxx (KERN_ATTR_ESALT (md5_double_salt_t)) { /** * modifier diff --git a/OpenCL/m03730_a1-pure.cl b/OpenCL/m03730_a1-pure.cl index 779f14fa6..12f5f7dcb 100644 --- a/OpenCL/m03730_a1-pure.cl +++ b/OpenCL/m03730_a1-pure.cl @@ -36,7 +36,7 @@ typedef struct md5_double_salt } md5_double_salt_t; -KERNEL_FQ void m03730_mxx (KERN_ATTR_ESALT (md5_double_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m03730_mxx (KERN_ATTR_ESALT (md5_double_salt_t)) { /** * modifier @@ -152,7 +152,7 @@ KERNEL_FQ void m03730_mxx (KERN_ATTR_ESALT (md5_double_salt_t)) } } -KERNEL_FQ void m03730_sxx (KERN_ATTR_ESALT (md5_double_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m03730_sxx (KERN_ATTR_ESALT (md5_double_salt_t)) { /** * modifier diff --git a/OpenCL/m03730_a3-pure.cl b/OpenCL/m03730_a3-pure.cl index 903512e24..bd5bb3573 100644 --- a/OpenCL/m03730_a3-pure.cl +++ b/OpenCL/m03730_a3-pure.cl @@ -36,7 +36,7 @@ typedef struct md5_double_salt } md5_double_salt_t; -KERNEL_FQ void m03730_mxx (KERN_ATTR_VECTOR_ESALT (md5_double_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m03730_mxx (KERN_ATTR_VECTOR_ESALT (md5_double_salt_t)) { /** * modifier @@ -176,7 +176,7 @@ KERNEL_FQ void m03730_mxx (KERN_ATTR_VECTOR_ESALT (md5_double_salt_t)) } } -KERNEL_FQ void m03730_sxx (KERN_ATTR_VECTOR_ESALT (md5_double_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m03730_sxx (KERN_ATTR_VECTOR_ESALT (md5_double_salt_t)) { /** * modifier diff --git a/OpenCL/m03800_a0-optimized.cl b/OpenCL/m03800_a0-optimized.cl index 07a959c00..2977f86cf 100644 --- a/OpenCL/m03800_a0-optimized.cl +++ b/OpenCL/m03800_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m03800_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03800_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -247,15 +247,15 @@ KERNEL_FQ void m03800_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m03800_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03800_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m03800_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03800_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m03800_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03800_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -501,10 +501,10 @@ KERNEL_FQ void m03800_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m03800_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03800_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m03800_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03800_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m03800_a0-pure.cl b/OpenCL/m03800_a0-pure.cl index 191735f2d..37cf988f7 100644 --- a/OpenCL/m03800_a0-pure.cl +++ b/OpenCL/m03800_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m03800_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03800_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -75,7 +75,7 @@ KERNEL_FQ void m03800_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m03800_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03800_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m03800_a1-optimized.cl b/OpenCL/m03800_a1-optimized.cl index 8b440155a..a9e232e05 100644 --- a/OpenCL/m03800_a1-optimized.cl +++ b/OpenCL/m03800_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m03800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03800_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -305,15 +305,15 @@ KERNEL_FQ void m03800_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m03800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03800_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m03800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03800_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m03800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03800_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -619,10 +619,10 @@ KERNEL_FQ void m03800_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m03800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03800_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m03800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03800_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m03800_a1-pure.cl b/OpenCL/m03800_a1-pure.cl index 5ea3d9b57..6c683fc9c 100644 --- a/OpenCL/m03800_a1-pure.cl +++ b/OpenCL/m03800_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m03800_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03800_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void m03800_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m03800_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03800_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m03800_a3-optimized.cl b/OpenCL/m03800_a3-optimized.cl index 0b421306f..99c59b319 100644 --- a/OpenCL/m03800_a3-optimized.cl +++ b/OpenCL/m03800_a3-optimized.cl @@ -471,7 +471,7 @@ DECLSPEC void m03800s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m03800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03800_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -524,7 +524,7 @@ KERNEL_FQ void m03800_m04 (KERN_ATTR_BASIC ()) m03800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m03800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03800_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -577,7 +577,7 @@ KERNEL_FQ void m03800_m08 (KERN_ATTR_BASIC ()) m03800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m03800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03800_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -630,7 +630,7 @@ KERNEL_FQ void m03800_m16 (KERN_ATTR_BASIC ()) m03800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m03800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03800_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -683,7 +683,7 @@ KERNEL_FQ void m03800_s04 (KERN_ATTR_BASIC ()) m03800s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m03800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03800_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -736,7 +736,7 @@ KERNEL_FQ void m03800_s08 (KERN_ATTR_BASIC ()) m03800s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m03800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03800_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m03800_a3-pure.cl b/OpenCL/m03800_a3-pure.cl index ca1c599e3..d5c4075e6 100644 --- a/OpenCL/m03800_a3-pure.cl +++ b/OpenCL/m03800_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m03800_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m03800_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -86,7 +86,7 @@ KERNEL_FQ void m03800_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m03800_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m03800_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m03910_a0-optimized.cl b/OpenCL/m03910_a0-optimized.cl index e8a305f72..93a2f7355 100644 --- a/OpenCL/m03910_a0-optimized.cl +++ b/OpenCL/m03910_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m03910_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03910_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -388,15 +388,15 @@ KERNEL_FQ void m03910_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m03910_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03910_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m03910_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03910_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m03910_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03910_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -771,10 +771,10 @@ KERNEL_FQ void m03910_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m03910_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03910_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m03910_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03910_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m03910_a0-pure.cl b/OpenCL/m03910_a0-pure.cl index e178e8bf8..1e903182e 100644 --- a/OpenCL/m03910_a0-pure.cl +++ b/OpenCL/m03910_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m03910_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03910_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -154,7 +154,7 @@ KERNEL_FQ void m03910_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m03910_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m03910_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m03910_a1-optimized.cl b/OpenCL/m03910_a1-optimized.cl index c759bde95..94b686808 100644 --- a/OpenCL/m03910_a1-optimized.cl +++ b/OpenCL/m03910_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m03910_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03910_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -445,15 +445,15 @@ KERNEL_FQ void m03910_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m03910_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03910_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m03910_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03910_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m03910_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03910_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -887,10 +887,10 @@ KERNEL_FQ void m03910_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m03910_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03910_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m03910_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03910_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m03910_a1-pure.cl b/OpenCL/m03910_a1-pure.cl index b9421224c..ce3264a17 100644 --- a/OpenCL/m03910_a1-pure.cl +++ b/OpenCL/m03910_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m03910_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03910_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -150,7 +150,7 @@ KERNEL_FQ void m03910_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m03910_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03910_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m03910_a3-optimized.cl b/OpenCL/m03910_a3-optimized.cl index 9137008a4..8317808b1 100644 --- a/OpenCL/m03910_a3-optimized.cl +++ b/OpenCL/m03910_a3-optimized.cl @@ -719,7 +719,7 @@ DECLSPEC void m03910s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m03910_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03910_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -789,7 +789,7 @@ KERNEL_FQ void m03910_m04 (KERN_ATTR_BASIC ()) m03910m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m03910_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03910_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -859,7 +859,7 @@ KERNEL_FQ void m03910_m08 (KERN_ATTR_BASIC ()) m03910m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m03910_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03910_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -929,7 +929,7 @@ KERNEL_FQ void m03910_m16 (KERN_ATTR_BASIC ()) m03910m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m03910_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03910_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -999,7 +999,7 @@ KERNEL_FQ void m03910_s04 (KERN_ATTR_BASIC ()) m03910s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m03910_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03910_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1069,7 +1069,7 @@ KERNEL_FQ void m03910_s08 (KERN_ATTR_BASIC ()) m03910s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m03910_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m03910_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m03910_a3-pure.cl b/OpenCL/m03910_a3-pure.cl index f9b32de2a..3a35c1aa0 100644 --- a/OpenCL/m03910_a3-pure.cl +++ b/OpenCL/m03910_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m03910_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m03910_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -163,7 +163,7 @@ KERNEL_FQ void m03910_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m03910_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m03910_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m04010_a0-optimized.cl b/OpenCL/m04010_a0-optimized.cl index 596fa9a0c..2818eb5be 100644 --- a/OpenCL/m04010_a0-optimized.cl +++ b/OpenCL/m04010_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04010_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04010_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -361,15 +361,15 @@ KERNEL_FQ void m04010_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04010_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04010_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04010_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04010_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04010_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04010_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -717,10 +717,10 @@ KERNEL_FQ void m04010_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04010_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04010_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04010_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04010_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m04010_a0-pure.cl b/OpenCL/m04010_a0-pure.cl index 6485d70dd..5c4fddca0 100644 --- a/OpenCL/m04010_a0-pure.cl +++ b/OpenCL/m04010_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04010_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04010_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -135,7 +135,7 @@ KERNEL_FQ void m04010_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04010_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04010_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m04010_a1-optimized.cl b/OpenCL/m04010_a1-optimized.cl index d50efb929..ea159639e 100644 --- a/OpenCL/m04010_a1-optimized.cl +++ b/OpenCL/m04010_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04010_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04010_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -417,15 +417,15 @@ KERNEL_FQ void m04010_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04010_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04010_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04010_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04010_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04010_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04010_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -831,10 +831,10 @@ KERNEL_FQ void m04010_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04010_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04010_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04010_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04010_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m04010_a1-pure.cl b/OpenCL/m04010_a1-pure.cl index 084e85ef0..f10f50bd4 100644 --- a/OpenCL/m04010_a1-pure.cl +++ b/OpenCL/m04010_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04010_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04010_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -131,7 +131,7 @@ KERNEL_FQ void m04010_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04010_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04010_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m04010_a3-optimized.cl b/OpenCL/m04010_a3-optimized.cl index 6a52abb00..aeecf3c22 100644 --- a/OpenCL/m04010_a3-optimized.cl +++ b/OpenCL/m04010_a3-optimized.cl @@ -653,7 +653,7 @@ DECLSPEC void m04010s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m04010_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04010_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -723,7 +723,7 @@ KERNEL_FQ void m04010_m04 (KERN_ATTR_BASIC ()) m04010m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04010_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04010_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -793,7 +793,7 @@ KERNEL_FQ void m04010_m08 (KERN_ATTR_BASIC ()) m04010m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04010_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04010_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -863,7 +863,7 @@ KERNEL_FQ void m04010_m16 (KERN_ATTR_BASIC ()) m04010m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04010_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04010_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -933,7 +933,7 @@ KERNEL_FQ void m04010_s04 (KERN_ATTR_BASIC ()) m04010s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04010_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04010_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1003,7 +1003,7 @@ KERNEL_FQ void m04010_s08 (KERN_ATTR_BASIC ()) m04010s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04010_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04010_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m04010_a3-pure.cl b/OpenCL/m04010_a3-pure.cl index 4bff07477..f2b6a1d1d 100644 --- a/OpenCL/m04010_a3-pure.cl +++ b/OpenCL/m04010_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04010_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m04010_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -148,7 +148,7 @@ KERNEL_FQ void m04010_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m04010_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m04010_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m04110_a0-optimized.cl b/OpenCL/m04110_a0-optimized.cl index c2e04ac36..586104b1c 100644 --- a/OpenCL/m04110_a0-optimized.cl +++ b/OpenCL/m04110_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04110_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04110_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -406,15 +406,15 @@ KERNEL_FQ void m04110_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04110_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04110_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04110_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04110_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04110_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04110_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -807,10 +807,10 @@ KERNEL_FQ void m04110_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04110_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04110_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04110_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04110_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m04110_a0-pure.cl b/OpenCL/m04110_a0-pure.cl index a4fd4f00c..a6c865768 100644 --- a/OpenCL/m04110_a0-pure.cl +++ b/OpenCL/m04110_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04110_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04110_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -148,7 +148,7 @@ KERNEL_FQ void m04110_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04110_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04110_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m04110_a1-optimized.cl b/OpenCL/m04110_a1-optimized.cl index cba0aac04..980c83838 100644 --- a/OpenCL/m04110_a1-optimized.cl +++ b/OpenCL/m04110_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04110_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04110_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -464,15 +464,15 @@ KERNEL_FQ void m04110_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04110_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04110_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04110_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04110_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04110_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04110_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -925,10 +925,10 @@ KERNEL_FQ void m04110_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04110_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04110_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04110_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04110_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m04110_a1-pure.cl b/OpenCL/m04110_a1-pure.cl index a1cab9e20..cd1f003f5 100644 --- a/OpenCL/m04110_a1-pure.cl +++ b/OpenCL/m04110_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04110_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04110_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -144,7 +144,7 @@ KERNEL_FQ void m04110_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04110_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04110_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m04110_a3-optimized.cl b/OpenCL/m04110_a3-optimized.cl index c01dfa5ae..481ba3633 100644 --- a/OpenCL/m04110_a3-optimized.cl +++ b/OpenCL/m04110_a3-optimized.cl @@ -709,7 +709,7 @@ DECLSPEC void m04110s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m04110_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04110_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -779,7 +779,7 @@ KERNEL_FQ void m04110_m04 (KERN_ATTR_BASIC ()) m04110m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04110_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04110_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -849,7 +849,7 @@ KERNEL_FQ void m04110_m08 (KERN_ATTR_BASIC ()) m04110m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04110_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04110_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -919,7 +919,7 @@ KERNEL_FQ void m04110_m16 (KERN_ATTR_BASIC ()) m04110m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04110_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04110_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -989,7 +989,7 @@ KERNEL_FQ void m04110_s04 (KERN_ATTR_BASIC ()) m04110s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04110_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04110_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1059,7 +1059,7 @@ KERNEL_FQ void m04110_s08 (KERN_ATTR_BASIC ()) m04110s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04110_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04110_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m04110_a3-pure.cl b/OpenCL/m04110_a3-pure.cl index b30502e58..7783dad10 100644 --- a/OpenCL/m04110_a3-pure.cl +++ b/OpenCL/m04110_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04110_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m04110_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -159,7 +159,7 @@ KERNEL_FQ void m04110_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m04110_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m04110_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m04310_a0-optimized.cl b/OpenCL/m04310_a0-optimized.cl index 3dca3c0a4..64b40ba7b 100644 --- a/OpenCL/m04310_a0-optimized.cl +++ b/OpenCL/m04310_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_upper8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04310_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04310_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -304,15 +304,15 @@ KERNEL_FQ void m04310_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04310_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04310_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04310_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04310_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04310_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04310_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -603,10 +603,10 @@ KERNEL_FQ void m04310_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04310_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04310_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04310_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04310_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m04310_a0-pure.cl b/OpenCL/m04310_a0-pure.cl index cd6abb254..7254be823 100644 --- a/OpenCL/m04310_a0-pure.cl +++ b/OpenCL/m04310_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_upper8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04310_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04310_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -131,7 +131,7 @@ KERNEL_FQ void m04310_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04310_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04310_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m04310_a1-optimized.cl b/OpenCL/m04310_a1-optimized.cl index b6128578c..7beced80d 100644 --- a/OpenCL/m04310_a1-optimized.cl +++ b/OpenCL/m04310_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_upper8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04310_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04310_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -361,15 +361,15 @@ KERNEL_FQ void m04310_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04310_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04310_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04310_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04310_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04310_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04310_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -719,10 +719,10 @@ KERNEL_FQ void m04310_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04310_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04310_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04310_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04310_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m04310_a1-pure.cl b/OpenCL/m04310_a1-pure.cl index 7087e597d..b75b00cf1 100644 --- a/OpenCL/m04310_a1-pure.cl +++ b/OpenCL/m04310_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_upper8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04310_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04310_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -127,7 +127,7 @@ KERNEL_FQ void m04310_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04310_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04310_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m04310_a3-optimized.cl b/OpenCL/m04310_a3-optimized.cl index 0e2cb3e45..a74af0159 100644 --- a/OpenCL/m04310_a3-optimized.cl +++ b/OpenCL/m04310_a3-optimized.cl @@ -552,7 +552,7 @@ DECLSPEC void m04310s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m04310_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04310_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -622,7 +622,7 @@ KERNEL_FQ void m04310_m04 (KERN_ATTR_BASIC ()) m04310m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04310_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04310_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -692,7 +692,7 @@ KERNEL_FQ void m04310_m08 (KERN_ATTR_BASIC ()) m04310m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04310_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04310_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -762,7 +762,7 @@ KERNEL_FQ void m04310_m16 (KERN_ATTR_BASIC ()) m04310m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04310_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04310_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -832,7 +832,7 @@ KERNEL_FQ void m04310_s04 (KERN_ATTR_BASIC ()) m04310s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04310_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04310_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -902,7 +902,7 @@ KERNEL_FQ void m04310_s08 (KERN_ATTR_BASIC ()) m04310s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04310_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04310_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m04310_a3-pure.cl b/OpenCL/m04310_a3-pure.cl index 2aa0b01b2..fcc51234b 100644 --- a/OpenCL/m04310_a3-pure.cl +++ b/OpenCL/m04310_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_upper8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04310_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m04310_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -140,7 +140,7 @@ KERNEL_FQ void m04310_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m04310_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m04310_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m04400_a0-optimized.cl b/OpenCL/m04400_a0-optimized.cl index 22a622863..f4692d08d 100644 --- a/OpenCL/m04400_a0-optimized.cl +++ b/OpenCL/m04400_a0-optimized.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04400_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04400_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -331,15 +331,15 @@ KERNEL_FQ void m04400_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04400_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04400_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04400_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04400_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04400_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04400_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -656,10 +656,10 @@ KERNEL_FQ void m04400_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04400_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04400_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04400_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04400_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m04400_a0-pure.cl b/OpenCL/m04400_a0-pure.cl index 378a66ed0..a5f6cd30d 100644 --- a/OpenCL/m04400_a0-pure.cl +++ b/OpenCL/m04400_a0-pure.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04400_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04400_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -126,7 +126,7 @@ KERNEL_FQ void m04400_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04400_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04400_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m04400_a1-optimized.cl b/OpenCL/m04400_a1-optimized.cl index 152fd04e7..25c90d3b4 100644 --- a/OpenCL/m04400_a1-optimized.cl +++ b/OpenCL/m04400_a1-optimized.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04400_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04400_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -387,15 +387,15 @@ KERNEL_FQ void m04400_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04400_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04400_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04400_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04400_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04400_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04400_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -770,10 +770,10 @@ KERNEL_FQ void m04400_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04400_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04400_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04400_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04400_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m04400_a1-pure.cl b/OpenCL/m04400_a1-pure.cl index 8fc032c46..9fce785e9 100644 --- a/OpenCL/m04400_a1-pure.cl +++ b/OpenCL/m04400_a1-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04400_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04400_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -122,7 +122,7 @@ KERNEL_FQ void m04400_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04400_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04400_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m04400_a3-optimized.cl b/OpenCL/m04400_a3-optimized.cl index e53ae6b16..03d26b4d3 100644 --- a/OpenCL/m04400_a3-optimized.cl +++ b/OpenCL/m04400_a3-optimized.cl @@ -558,7 +558,7 @@ DECLSPEC void m04400s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m04400_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04400_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -628,7 +628,7 @@ KERNEL_FQ void m04400_m04 (KERN_ATTR_BASIC ()) m04400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04400_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04400_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -698,7 +698,7 @@ KERNEL_FQ void m04400_m08 (KERN_ATTR_BASIC ()) m04400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04400_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04400_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -768,7 +768,7 @@ KERNEL_FQ void m04400_m16 (KERN_ATTR_BASIC ()) m04400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04400_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04400_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -838,7 +838,7 @@ KERNEL_FQ void m04400_s04 (KERN_ATTR_BASIC ()) m04400s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04400_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04400_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -908,7 +908,7 @@ KERNEL_FQ void m04400_s08 (KERN_ATTR_BASIC ()) m04400s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04400_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04400_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m04400_a3-pure.cl b/OpenCL/m04400_a3-pure.cl index c463e627c..1e47d6146 100644 --- a/OpenCL/m04400_a3-pure.cl +++ b/OpenCL/m04400_a3-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04400_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m04400_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -135,7 +135,7 @@ KERNEL_FQ void m04400_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m04400_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m04400_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m04410_a0-optimized.cl b/OpenCL/m04410_a0-optimized.cl index 191e1eddf..ffeb0f015 100644 --- a/OpenCL/m04410_a0-optimized.cl +++ b/OpenCL/m04410_a0-optimized.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04410_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04410_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -650,15 +650,15 @@ KERNEL_FQ void m04410_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04410_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04410_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04410_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04410_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04410_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04410_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -1294,10 +1294,10 @@ KERNEL_FQ void m04410_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04410_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04410_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04410_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04410_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m04410_a0-pure.cl b/OpenCL/m04410_a0-pure.cl index 52c9d8578..f3eb9bb00 100644 --- a/OpenCL/m04410_a0-pure.cl +++ b/OpenCL/m04410_a0-pure.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04410_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04410_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -148,7 +148,7 @@ KERNEL_FQ void m04410_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04410_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04410_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m04410_a1-optimized.cl b/OpenCL/m04410_a1-optimized.cl index 813ad365d..7741e1b32 100644 --- a/OpenCL/m04410_a1-optimized.cl +++ b/OpenCL/m04410_a1-optimized.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04410_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04410_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -706,15 +706,15 @@ KERNEL_FQ void m04410_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04410_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04410_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04410_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04410_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04410_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04410_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -1408,10 +1408,10 @@ KERNEL_FQ void m04410_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04410_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04410_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04410_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04410_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m04410_a1-pure.cl b/OpenCL/m04410_a1-pure.cl index 4c08d8eb5..2cd4a39bf 100644 --- a/OpenCL/m04410_a1-pure.cl +++ b/OpenCL/m04410_a1-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04410_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04410_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -144,7 +144,7 @@ KERNEL_FQ void m04410_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04410_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04410_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m04410_a3-optimized.cl b/OpenCL/m04410_a3-optimized.cl index 584999c7e..4fd442eed 100644 --- a/OpenCL/m04410_a3-optimized.cl +++ b/OpenCL/m04410_a3-optimized.cl @@ -1196,7 +1196,7 @@ DECLSPEC void m04410s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m04410_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04410_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -1266,7 +1266,7 @@ KERNEL_FQ void m04410_m04 (KERN_ATTR_BASIC ()) m04410m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04410_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04410_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -1336,7 +1336,7 @@ KERNEL_FQ void m04410_m08 (KERN_ATTR_BASIC ()) m04410m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04410_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04410_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -1406,7 +1406,7 @@ KERNEL_FQ void m04410_m16 (KERN_ATTR_BASIC ()) m04410m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04410_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04410_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1476,7 +1476,7 @@ KERNEL_FQ void m04410_s04 (KERN_ATTR_BASIC ()) m04410s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04410_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04410_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1546,7 +1546,7 @@ KERNEL_FQ void m04410_s08 (KERN_ATTR_BASIC ()) m04410s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04410_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04410_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m04410_a3-pure.cl b/OpenCL/m04410_a3-pure.cl index 9e2fa1f80..6e88f45a4 100644 --- a/OpenCL/m04410_a3-pure.cl +++ b/OpenCL/m04410_a3-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04410_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m04410_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -157,7 +157,7 @@ KERNEL_FQ void m04410_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m04410_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m04410_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m04420_a0-optimized.cl b/OpenCL/m04420_a0-optimized.cl index e071beef3..8d55d58fb 100644 --- a/OpenCL/m04420_a0-optimized.cl +++ b/OpenCL/m04420_a0-optimized.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04420_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04420_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -405,15 +405,15 @@ KERNEL_FQ void m04420_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04420_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04420_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04420_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04420_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04420_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04420_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -804,10 +804,10 @@ KERNEL_FQ void m04420_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04420_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04420_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04420_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04420_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m04420_a0-pure.cl b/OpenCL/m04420_a0-pure.cl index a0114a72c..923d1d119 100644 --- a/OpenCL/m04420_a0-pure.cl +++ b/OpenCL/m04420_a0-pure.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04420_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04420_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -148,7 +148,7 @@ KERNEL_FQ void m04420_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04420_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04420_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m04420_a1-optimized.cl b/OpenCL/m04420_a1-optimized.cl index 2f688826e..546818bd2 100644 --- a/OpenCL/m04420_a1-optimized.cl +++ b/OpenCL/m04420_a1-optimized.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04420_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04420_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -463,15 +463,15 @@ KERNEL_FQ void m04420_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04420_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04420_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04420_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04420_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04420_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04420_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -922,10 +922,10 @@ KERNEL_FQ void m04420_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04420_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04420_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04420_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04420_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m04420_a1-pure.cl b/OpenCL/m04420_a1-pure.cl index 20b17296c..b44226098 100644 --- a/OpenCL/m04420_a1-pure.cl +++ b/OpenCL/m04420_a1-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04420_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04420_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -144,7 +144,7 @@ KERNEL_FQ void m04420_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04420_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04420_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m04420_a3-optimized.cl b/OpenCL/m04420_a3-optimized.cl index baef3c6a7..a6c1e2b75 100644 --- a/OpenCL/m04420_a3-optimized.cl +++ b/OpenCL/m04420_a3-optimized.cl @@ -706,7 +706,7 @@ DECLSPEC void m04420s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m04420_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04420_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -776,7 +776,7 @@ KERNEL_FQ void m04420_m04 (KERN_ATTR_BASIC ()) m04420m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04420_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04420_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -846,7 +846,7 @@ KERNEL_FQ void m04420_m08 (KERN_ATTR_BASIC ()) m04420m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04420_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04420_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -916,7 +916,7 @@ KERNEL_FQ void m04420_m16 (KERN_ATTR_BASIC ()) m04420m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04420_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04420_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -986,7 +986,7 @@ KERNEL_FQ void m04420_s04 (KERN_ATTR_BASIC ()) m04420s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04420_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04420_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1056,7 +1056,7 @@ KERNEL_FQ void m04420_s08 (KERN_ATTR_BASIC ()) m04420s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04420_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04420_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m04420_a3-pure.cl b/OpenCL/m04420_a3-pure.cl index 37727503e..99dcbebd4 100644 --- a/OpenCL/m04420_a3-pure.cl +++ b/OpenCL/m04420_a3-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04420_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m04420_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -157,7 +157,7 @@ KERNEL_FQ void m04420_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m04420_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m04420_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m04430_a0-optimized.cl b/OpenCL/m04430_a0-optimized.cl index 4f809d3ff..da3a0358f 100644 --- a/OpenCL/m04430_a0-optimized.cl +++ b/OpenCL/m04430_a0-optimized.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04430_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04430_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -385,15 +385,15 @@ KERNEL_FQ void m04430_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04430_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04430_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04430_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04430_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04430_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04430_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -764,10 +764,10 @@ KERNEL_FQ void m04430_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04430_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04430_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04430_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04430_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m04430_a0-pure.cl b/OpenCL/m04430_a0-pure.cl index 60cfea81b..ef33923b7 100644 --- a/OpenCL/m04430_a0-pure.cl +++ b/OpenCL/m04430_a0-pure.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04430_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04430_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -141,7 +141,7 @@ KERNEL_FQ void m04430_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04430_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04430_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m04430_a1-optimized.cl b/OpenCL/m04430_a1-optimized.cl index 43b94cf73..9d9392769 100644 --- a/OpenCL/m04430_a1-optimized.cl +++ b/OpenCL/m04430_a1-optimized.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04430_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04430_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -441,15 +441,15 @@ KERNEL_FQ void m04430_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04430_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04430_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04430_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04430_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04430_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04430_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -877,10 +877,10 @@ KERNEL_FQ void m04430_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04430_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04430_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04430_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04430_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m04430_a1-pure.cl b/OpenCL/m04430_a1-pure.cl index 3a801e1a2..aed95f4fb 100644 --- a/OpenCL/m04430_a1-pure.cl +++ b/OpenCL/m04430_a1-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04430_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04430_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -135,7 +135,7 @@ KERNEL_FQ void m04430_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04430_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04430_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m04430_a3-optimized.cl b/OpenCL/m04430_a3-optimized.cl index ccca5001c..5727609a4 100644 --- a/OpenCL/m04430_a3-optimized.cl +++ b/OpenCL/m04430_a3-optimized.cl @@ -702,7 +702,7 @@ DECLSPEC void m04430s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m04430_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04430_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -772,7 +772,7 @@ KERNEL_FQ void m04430_m04 (KERN_ATTR_BASIC ()) m04430m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04430_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04430_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -842,7 +842,7 @@ KERNEL_FQ void m04430_m08 (KERN_ATTR_BASIC ()) m04430m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04430_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04430_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -912,7 +912,7 @@ KERNEL_FQ void m04430_m16 (KERN_ATTR_BASIC ()) m04430m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04430_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04430_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -982,7 +982,7 @@ KERNEL_FQ void m04430_s04 (KERN_ATTR_BASIC ()) m04430s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04430_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04430_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1052,7 +1052,7 @@ KERNEL_FQ void m04430_s08 (KERN_ATTR_BASIC ()) m04430s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04430_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04430_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m04430_a3-pure.cl b/OpenCL/m04430_a3-pure.cl index 54142aeb3..443c436b2 100644 --- a/OpenCL/m04430_a3-pure.cl +++ b/OpenCL/m04430_a3-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04430_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m04430_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -152,7 +152,7 @@ KERNEL_FQ void m04430_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m04430_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m04430_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m04500_a0-optimized.cl b/OpenCL/m04500_a0-optimized.cl index 1adb1c5a1..e08c2b6ef 100644 --- a/OpenCL/m04500_a0-optimized.cl +++ b/OpenCL/m04500_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04500_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04500_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -357,15 +357,15 @@ KERNEL_FQ void m04500_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04500_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04500_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04500_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04500_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04500_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04500_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -715,10 +715,10 @@ KERNEL_FQ void m04500_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04500_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04500_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04500_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04500_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m04500_a0-pure.cl b/OpenCL/m04500_a0-pure.cl index 2704f3b14..75ad529e2 100644 --- a/OpenCL/m04500_a0-pure.cl +++ b/OpenCL/m04500_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04500_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04500_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -125,7 +125,7 @@ KERNEL_FQ void m04500_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04500_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04500_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m04500_a1-optimized.cl b/OpenCL/m04500_a1-optimized.cl index cb4a9af2b..94db62269 100644 --- a/OpenCL/m04500_a1-optimized.cl +++ b/OpenCL/m04500_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04500_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04500_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -413,15 +413,15 @@ KERNEL_FQ void m04500_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04500_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04500_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04500_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04500_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04500_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04500_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -829,10 +829,10 @@ KERNEL_FQ void m04500_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04500_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04500_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04500_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04500_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m04500_a1-pure.cl b/OpenCL/m04500_a1-pure.cl index 7a7fefce3..e10fecd3e 100644 --- a/OpenCL/m04500_a1-pure.cl +++ b/OpenCL/m04500_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04500_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04500_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -121,7 +121,7 @@ KERNEL_FQ void m04500_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04500_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04500_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m04500_a3-optimized.cl b/OpenCL/m04500_a3-optimized.cl index d03a86232..1a1593e63 100644 --- a/OpenCL/m04500_a3-optimized.cl +++ b/OpenCL/m04500_a3-optimized.cl @@ -617,7 +617,7 @@ DECLSPEC void m04500s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m04500_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04500_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -687,7 +687,7 @@ KERNEL_FQ void m04500_m04 (KERN_ATTR_BASIC ()) m04500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04500_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04500_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -757,7 +757,7 @@ KERNEL_FQ void m04500_m08 (KERN_ATTR_BASIC ()) m04500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04500_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04500_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -827,7 +827,7 @@ KERNEL_FQ void m04500_m16 (KERN_ATTR_BASIC ()) m04500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04500_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04500_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -897,7 +897,7 @@ KERNEL_FQ void m04500_s04 (KERN_ATTR_BASIC ()) m04500s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04500_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04500_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -967,7 +967,7 @@ KERNEL_FQ void m04500_s08 (KERN_ATTR_BASIC ()) m04500s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04500_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04500_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m04500_a3-pure.cl b/OpenCL/m04500_a3-pure.cl index 1811b6f18..ba5028d3c 100644 --- a/OpenCL/m04500_a3-pure.cl +++ b/OpenCL/m04500_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04500_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m04500_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -134,7 +134,7 @@ KERNEL_FQ void m04500_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m04500_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m04500_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m04510_a0-optimized.cl b/OpenCL/m04510_a0-optimized.cl index 59b5994f5..f3f564def 100644 --- a/OpenCL/m04510_a0-optimized.cl +++ b/OpenCL/m04510_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04510_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04510_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -1024,15 +1024,15 @@ KERNEL_FQ void m04510_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04510_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04510_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04510_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04510_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04510_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04510_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -2045,10 +2045,10 @@ KERNEL_FQ void m04510_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04510_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04510_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04510_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04510_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m04510_a0-pure.cl b/OpenCL/m04510_a0-pure.cl index a3be7b535..5c2f90cfc 100644 --- a/OpenCL/m04510_a0-pure.cl +++ b/OpenCL/m04510_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04510_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04510_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -131,7 +131,7 @@ KERNEL_FQ void m04510_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04510_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04510_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m04510_a1-optimized.cl b/OpenCL/m04510_a1-optimized.cl index 5c94dbbd1..94d74eea0 100644 --- a/OpenCL/m04510_a1-optimized.cl +++ b/OpenCL/m04510_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04510_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04510_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -1079,15 +1079,15 @@ KERNEL_FQ void m04510_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04510_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04510_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04510_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04510_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04510_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04510_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -2157,10 +2157,10 @@ KERNEL_FQ void m04510_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04510_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04510_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04510_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04510_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m04510_a1-pure.cl b/OpenCL/m04510_a1-pure.cl index 885cee178..804fe89c0 100644 --- a/OpenCL/m04510_a1-pure.cl +++ b/OpenCL/m04510_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04510_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04510_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -127,7 +127,7 @@ KERNEL_FQ void m04510_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04510_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04510_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m04510_a3-optimized.cl b/OpenCL/m04510_a3-optimized.cl index 685b6f9a8..24fa11ba9 100644 --- a/OpenCL/m04510_a3-optimized.cl +++ b/OpenCL/m04510_a3-optimized.cl @@ -1947,7 +1947,7 @@ DECLSPEC void m04510s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m04510_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04510_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -2017,7 +2017,7 @@ KERNEL_FQ void m04510_m04 (KERN_ATTR_BASIC ()) m04510m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04510_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04510_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -2087,7 +2087,7 @@ KERNEL_FQ void m04510_m08 (KERN_ATTR_BASIC ()) m04510m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04510_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04510_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -2157,7 +2157,7 @@ KERNEL_FQ void m04510_m16 (KERN_ATTR_BASIC ()) m04510m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04510_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04510_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -2227,7 +2227,7 @@ KERNEL_FQ void m04510_s04 (KERN_ATTR_BASIC ()) m04510s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04510_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04510_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -2297,7 +2297,7 @@ KERNEL_FQ void m04510_s08 (KERN_ATTR_BASIC ()) m04510s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04510_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04510_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m04510_a3-pure.cl b/OpenCL/m04510_a3-pure.cl index c9d578819..5b96c046f 100644 --- a/OpenCL/m04510_a3-pure.cl +++ b/OpenCL/m04510_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04510_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m04510_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -135,7 +135,7 @@ KERNEL_FQ void m04510_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m04510_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m04510_sxx (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m04520_a0-optimized.cl b/OpenCL/m04520_a0-optimized.cl index 52aa26687..1248b956d 100644 --- a/OpenCL/m04520_a0-optimized.cl +++ b/OpenCL/m04520_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04520_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04520_m04 (KERN_ATTR_RULES ()) { /** * base @@ -588,15 +588,15 @@ KERNEL_FQ void m04520_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04520_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04520_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04520_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04520_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04520_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04520_s04 (KERN_ATTR_RULES ()) { /** * base @@ -1168,10 +1168,10 @@ KERNEL_FQ void m04520_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04520_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04520_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04520_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04520_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m04520_a0-pure.cl b/OpenCL/m04520_a0-pure.cl index f87c1521b..8df531927 100644 --- a/OpenCL/m04520_a0-pure.cl +++ b/OpenCL/m04520_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04520_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04520_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -140,7 +140,7 @@ KERNEL_FQ void m04520_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04520_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04520_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m04520_a1-optimized.cl b/OpenCL/m04520_a1-optimized.cl index 58a4c9fbd..b13c5526b 100644 --- a/OpenCL/m04520_a1-optimized.cl +++ b/OpenCL/m04520_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04520_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04520_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -644,15 +644,15 @@ KERNEL_FQ void m04520_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04520_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04520_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04520_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04520_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04520_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04520_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1282,10 +1282,10 @@ KERNEL_FQ void m04520_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04520_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04520_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04520_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04520_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m04520_a1-pure.cl b/OpenCL/m04520_a1-pure.cl index 03c5370a2..f19a9c274 100644 --- a/OpenCL/m04520_a1-pure.cl +++ b/OpenCL/m04520_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04520_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04520_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -136,7 +136,7 @@ KERNEL_FQ void m04520_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04520_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04520_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m04520_a3-optimized.cl b/OpenCL/m04520_a3-optimized.cl index 563da5b9d..3784e3b47 100644 --- a/OpenCL/m04520_a3-optimized.cl +++ b/OpenCL/m04520_a3-optimized.cl @@ -1070,7 +1070,7 @@ DECLSPEC void m04520s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m04520_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04520_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -1140,7 +1140,7 @@ KERNEL_FQ void m04520_m04 (KERN_ATTR_BASIC ()) m04520m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04520_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04520_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -1210,7 +1210,7 @@ KERNEL_FQ void m04520_m08 (KERN_ATTR_BASIC ()) m04520m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04520_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04520_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -1280,7 +1280,7 @@ KERNEL_FQ void m04520_m16 (KERN_ATTR_BASIC ()) m04520m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04520_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04520_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1350,7 +1350,7 @@ KERNEL_FQ void m04520_s04 (KERN_ATTR_BASIC ()) m04520s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04520_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04520_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1420,7 +1420,7 @@ KERNEL_FQ void m04520_s08 (KERN_ATTR_BASIC ()) m04520s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04520_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04520_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m04520_a3-pure.cl b/OpenCL/m04520_a3-pure.cl index 0ae4e54b4..3a03c537d 100644 --- a/OpenCL/m04520_a3-pure.cl +++ b/OpenCL/m04520_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04520_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m04520_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -151,7 +151,7 @@ KERNEL_FQ void m04520_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m04520_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m04520_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m04700_a0-optimized.cl b/OpenCL/m04700_a0-optimized.cl index d89787e1b..84e537625 100644 --- a/OpenCL/m04700_a0-optimized.cl +++ b/OpenCL/m04700_a0-optimized.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04700_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04700_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -314,15 +314,15 @@ KERNEL_FQ void m04700_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04700_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04700_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04700_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04700_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04700_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04700_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -628,10 +628,10 @@ KERNEL_FQ void m04700_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04700_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04700_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04700_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04700_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m04700_a0-pure.cl b/OpenCL/m04700_a0-pure.cl index 32c24fafd..64ad56396 100644 --- a/OpenCL/m04700_a0-pure.cl +++ b/OpenCL/m04700_a0-pure.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04700_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04700_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -121,7 +121,7 @@ KERNEL_FQ void m04700_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04700_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04700_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m04700_a1-optimized.cl b/OpenCL/m04700_a1-optimized.cl index 54b141681..832df1f99 100644 --- a/OpenCL/m04700_a1-optimized.cl +++ b/OpenCL/m04700_a1-optimized.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04700_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04700_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -367,15 +367,15 @@ KERNEL_FQ void m04700_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04700_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04700_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04700_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04700_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04700_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04700_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -736,10 +736,10 @@ KERNEL_FQ void m04700_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04700_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04700_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04700_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04700_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m04700_a1-pure.cl b/OpenCL/m04700_a1-pure.cl index e5f1465a5..13d416840 100644 --- a/OpenCL/m04700_a1-pure.cl +++ b/OpenCL/m04700_a1-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04700_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04700_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -117,7 +117,7 @@ KERNEL_FQ void m04700_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04700_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04700_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m04700_a3-optimized.cl b/OpenCL/m04700_a3-optimized.cl index 91d329c4b..1a14e2af4 100644 --- a/OpenCL/m04700_a3-optimized.cl +++ b/OpenCL/m04700_a3-optimized.cl @@ -558,7 +558,7 @@ DECLSPEC void m04700s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m04700_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04700_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -628,7 +628,7 @@ KERNEL_FQ void m04700_m04 (KERN_ATTR_BASIC ()) m04700m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04700_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04700_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -698,7 +698,7 @@ KERNEL_FQ void m04700_m08 (KERN_ATTR_BASIC ()) m04700m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04700_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04700_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -768,7 +768,7 @@ KERNEL_FQ void m04700_m16 (KERN_ATTR_BASIC ()) m04700m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04700_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04700_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -838,7 +838,7 @@ KERNEL_FQ void m04700_s04 (KERN_ATTR_BASIC ()) m04700s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04700_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04700_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -908,7 +908,7 @@ KERNEL_FQ void m04700_s08 (KERN_ATTR_BASIC ()) m04700s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04700_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04700_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m04700_a3-pure.cl b/OpenCL/m04700_a3-pure.cl index eadeb2a68..737211c1d 100644 --- a/OpenCL/m04700_a3-pure.cl +++ b/OpenCL/m04700_a3-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04700_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m04700_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -130,7 +130,7 @@ KERNEL_FQ void m04700_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m04700_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m04700_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m04710_a0-optimized.cl b/OpenCL/m04710_a0-optimized.cl index ea50b7d79..5b5efd8db 100644 --- a/OpenCL/m04710_a0-optimized.cl +++ b/OpenCL/m04710_a0-optimized.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04710_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04710_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -724,15 +724,15 @@ KERNEL_FQ void m04710_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04710_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04710_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04710_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04710_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04710_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04710_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -1443,10 +1443,10 @@ KERNEL_FQ void m04710_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04710_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04710_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04710_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04710_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m04710_a0-pure.cl b/OpenCL/m04710_a0-pure.cl index ddec6b202..98364d7a6 100644 --- a/OpenCL/m04710_a0-pure.cl +++ b/OpenCL/m04710_a0-pure.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04710_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04710_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -146,7 +146,7 @@ KERNEL_FQ void m04710_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04710_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04710_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m04710_a1-optimized.cl b/OpenCL/m04710_a1-optimized.cl index 248903fbc..27782c0bd 100644 --- a/OpenCL/m04710_a1-optimized.cl +++ b/OpenCL/m04710_a1-optimized.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04710_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04710_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -777,15 +777,15 @@ KERNEL_FQ void m04710_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04710_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04710_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04710_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04710_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04710_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04710_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -1551,10 +1551,10 @@ KERNEL_FQ void m04710_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04710_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04710_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04710_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04710_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m04710_a1-pure.cl b/OpenCL/m04710_a1-pure.cl index 1c71a09d8..a865031f1 100644 --- a/OpenCL/m04710_a1-pure.cl +++ b/OpenCL/m04710_a1-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04710_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04710_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -142,7 +142,7 @@ KERNEL_FQ void m04710_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04710_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04710_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m04710_a3-optimized.cl b/OpenCL/m04710_a3-optimized.cl index 9fad29489..fdc0ebc19 100644 --- a/OpenCL/m04710_a3-optimized.cl +++ b/OpenCL/m04710_a3-optimized.cl @@ -1373,7 +1373,7 @@ DECLSPEC void m04710s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m04710_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04710_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -1443,7 +1443,7 @@ KERNEL_FQ void m04710_m04 (KERN_ATTR_BASIC ()) m04710m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04710_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04710_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -1513,7 +1513,7 @@ KERNEL_FQ void m04710_m08 (KERN_ATTR_BASIC ()) m04710m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04710_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04710_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -1583,7 +1583,7 @@ KERNEL_FQ void m04710_m16 (KERN_ATTR_BASIC ()) m04710m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04710_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04710_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1653,7 +1653,7 @@ KERNEL_FQ void m04710_s04 (KERN_ATTR_BASIC ()) m04710s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04710_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04710_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1723,7 +1723,7 @@ KERNEL_FQ void m04710_s08 (KERN_ATTR_BASIC ()) m04710s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m04710_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04710_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m04710_a3-pure.cl b/OpenCL/m04710_a3-pure.cl index f60f385f8..a4352d41b 100644 --- a/OpenCL/m04710_a3-pure.cl +++ b/OpenCL/m04710_a3-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04710_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m04710_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -155,7 +155,7 @@ KERNEL_FQ void m04710_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m04710_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m04710_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m04800_a0-optimized.cl b/OpenCL/m04800_a0-optimized.cl index d0142f1f7..62bfb653a 100644 --- a/OpenCL/m04800_a0-optimized.cl +++ b/OpenCL/m04800_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m04800_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04800_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -213,15 +213,15 @@ KERNEL_FQ void m04800_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04800_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04800_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04800_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04800_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04800_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04800_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -433,10 +433,10 @@ KERNEL_FQ void m04800_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04800_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04800_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04800_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04800_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m04800_a0-pure.cl b/OpenCL/m04800_a0-pure.cl index a8b8549f1..ca34cde99 100644 --- a/OpenCL/m04800_a0-pure.cl +++ b/OpenCL/m04800_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m04800_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04800_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -77,7 +77,7 @@ KERNEL_FQ void m04800_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04800_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04800_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m04800_a1-optimized.cl b/OpenCL/m04800_a1-optimized.cl index 4f09e63ae..388584cf8 100644 --- a/OpenCL/m04800_a1-optimized.cl +++ b/OpenCL/m04800_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m04800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04800_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -283,15 +283,15 @@ KERNEL_FQ void m04800_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04800_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04800_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04800_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -563,10 +563,10 @@ KERNEL_FQ void m04800_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04800_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04800_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m04800_a1-pure.cl b/OpenCL/m04800_a1-pure.cl index 2328b1dbd..aa08dc0de 100644 --- a/OpenCL/m04800_a1-pure.cl +++ b/OpenCL/m04800_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m04800_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04800_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void m04800_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04800_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04800_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m04800_a3-optimized.cl b/OpenCL/m04800_a3-optimized.cl index 9f59e50b8..2e93ae5bd 100644 --- a/OpenCL/m04800_a3-optimized.cl +++ b/OpenCL/m04800_a3-optimized.cl @@ -391,7 +391,7 @@ DECLSPEC void m04800s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m04800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04800_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -444,7 +444,7 @@ KERNEL_FQ void m04800_m04 (KERN_ATTR_BASIC ()) m04800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m04800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04800_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -497,7 +497,7 @@ KERNEL_FQ void m04800_m08 (KERN_ATTR_BASIC ()) m04800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m04800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04800_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -550,7 +550,7 @@ KERNEL_FQ void m04800_m16 (KERN_ATTR_BASIC ()) m04800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m04800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04800_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -603,7 +603,7 @@ KERNEL_FQ void m04800_s04 (KERN_ATTR_BASIC ()) m04800s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m04800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04800_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -656,7 +656,7 @@ KERNEL_FQ void m04800_s08 (KERN_ATTR_BASIC ()) m04800s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m04800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04800_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m04800_a3-pure.cl b/OpenCL/m04800_a3-pure.cl index 0a7619700..58fbe934f 100644 --- a/OpenCL/m04800_a3-pure.cl +++ b/OpenCL/m04800_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m04800_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m04800_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -88,7 +88,7 @@ KERNEL_FQ void m04800_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m04800_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m04800_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m04900_a0-optimized.cl b/OpenCL/m04900_a0-optimized.cl index 758f48497..f300e4eca 100644 --- a/OpenCL/m04900_a0-optimized.cl +++ b/OpenCL/m04900_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m04900_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04900_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -288,15 +288,15 @@ KERNEL_FQ void m04900_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04900_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04900_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04900_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04900_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04900_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04900_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -589,10 +589,10 @@ KERNEL_FQ void m04900_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04900_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04900_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m04900_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04900_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m04900_a0-pure.cl b/OpenCL/m04900_a0-pure.cl index c16962c10..f5c42620d 100644 --- a/OpenCL/m04900_a0-pure.cl +++ b/OpenCL/m04900_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m04900_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04900_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -75,7 +75,7 @@ KERNEL_FQ void m04900_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m04900_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m04900_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m04900_a1-optimized.cl b/OpenCL/m04900_a1-optimized.cl index d14164a89..5b9650fe1 100644 --- a/OpenCL/m04900_a1-optimized.cl +++ b/OpenCL/m04900_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m04900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04900_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -346,15 +346,15 @@ KERNEL_FQ void m04900_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04900_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04900_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04900_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -707,10 +707,10 @@ KERNEL_FQ void m04900_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04900_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m04900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04900_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m04900_a1-pure.cl b/OpenCL/m04900_a1-pure.cl index 99ac40da6..7d9c8897a 100644 --- a/OpenCL/m04900_a1-pure.cl +++ b/OpenCL/m04900_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m04900_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04900_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void m04900_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m04900_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04900_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m04900_a3-optimized.cl b/OpenCL/m04900_a3-optimized.cl index 31e3b3e14..d74956474 100644 --- a/OpenCL/m04900_a3-optimized.cl +++ b/OpenCL/m04900_a3-optimized.cl @@ -563,7 +563,7 @@ DECLSPEC void m04900s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m04900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04900_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -616,7 +616,7 @@ KERNEL_FQ void m04900_m04 (KERN_ATTR_BASIC ()) m04900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m04900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04900_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -669,7 +669,7 @@ KERNEL_FQ void m04900_m08 (KERN_ATTR_BASIC ()) m04900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m04900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04900_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -722,7 +722,7 @@ KERNEL_FQ void m04900_m16 (KERN_ATTR_BASIC ()) m04900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m04900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04900_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -775,7 +775,7 @@ KERNEL_FQ void m04900_s04 (KERN_ATTR_BASIC ()) m04900s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m04900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04900_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -828,7 +828,7 @@ KERNEL_FQ void m04900_s08 (KERN_ATTR_BASIC ()) m04900s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m04900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m04900_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m04900_a3-pure.cl b/OpenCL/m04900_a3-pure.cl index 1b2999879..e94b22c94 100644 --- a/OpenCL/m04900_a3-pure.cl +++ b/OpenCL/m04900_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m04900_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m04900_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -86,7 +86,7 @@ KERNEL_FQ void m04900_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m04900_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m04900_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m05000_a0-optimized.cl b/OpenCL/m05000_a0-optimized.cl index af98d5922..4b4edba8f 100644 --- a/OpenCL/m05000_a0-optimized.cl +++ b/OpenCL/m05000_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m05000_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m05000_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -458,15 +458,15 @@ KERNEL_FQ void m05000_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m05000_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m05000_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m05000_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m05000_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m05000_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m05000_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -917,10 +917,10 @@ KERNEL_FQ void m05000_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m05000_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m05000_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m05000_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m05000_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m05000_a0-pure.cl b/OpenCL/m05000_a0-pure.cl index 7733bc064..73839a0fc 100644 --- a/OpenCL/m05000_a0-pure.cl +++ b/OpenCL/m05000_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m05000_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m05000_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -140,7 +140,7 @@ KERNEL_FQ void m05000_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m05000_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m05000_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m05000_a1-optimized.cl b/OpenCL/m05000_a1-optimized.cl index 84d227e1f..383359966 100644 --- a/OpenCL/m05000_a1-optimized.cl +++ b/OpenCL/m05000_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m05000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05000_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -516,15 +516,15 @@ KERNEL_FQ void m05000_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m05000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05000_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m05000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05000_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m05000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05000_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -1035,10 +1035,10 @@ KERNEL_FQ void m05000_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m05000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05000_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m05000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05000_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m05000_a1-pure.cl b/OpenCL/m05000_a1-pure.cl index d96c0bf90..6a0bde1ef 100644 --- a/OpenCL/m05000_a1-pure.cl +++ b/OpenCL/m05000_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m05000_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05000_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -134,7 +134,7 @@ KERNEL_FQ void m05000_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m05000_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05000_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m05000_a3-optimized.cl b/OpenCL/m05000_a3-optimized.cl index 2b7de0385..d60a7f197 100644 --- a/OpenCL/m05000_a3-optimized.cl +++ b/OpenCL/m05000_a3-optimized.cl @@ -855,7 +855,7 @@ DECLSPEC void m05000s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m05000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05000_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -921,7 +921,7 @@ KERNEL_FQ void m05000_m04 (KERN_ATTR_BASIC ()) m05000m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m05000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05000_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -987,7 +987,7 @@ KERNEL_FQ void m05000_m08 (KERN_ATTR_BASIC ()) m05000m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m05000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05000_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -1053,7 +1053,7 @@ KERNEL_FQ void m05000_m16 (KERN_ATTR_BASIC ()) m05000m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m05000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05000_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1119,7 +1119,7 @@ KERNEL_FQ void m05000_s04 (KERN_ATTR_BASIC ()) m05000s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m05000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05000_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1185,7 +1185,7 @@ KERNEL_FQ void m05000_s08 (KERN_ATTR_BASIC ()) m05000s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m05000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05000_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m05000_a3-pure.cl b/OpenCL/m05000_a3-pure.cl index ef86170d6..9579df82b 100644 --- a/OpenCL/m05000_a3-pure.cl +++ b/OpenCL/m05000_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m05000_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m05000_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -151,7 +151,7 @@ KERNEL_FQ void m05000_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m05000_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m05000_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m05100_a0-optimized.cl b/OpenCL/m05100_a0-optimized.cl index 17ea18179..3743bce14 100644 --- a/OpenCL/m05100_a0-optimized.cl +++ b/OpenCL/m05100_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m05100_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m05100_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -156,15 +156,15 @@ KERNEL_FQ void m05100_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m05100_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m05100_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m05100_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m05100_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m05100_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m05100_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -316,10 +316,10 @@ KERNEL_FQ void m05100_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m05100_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m05100_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m05100_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m05100_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m05100_a0-pure.cl b/OpenCL/m05100_a0-pure.cl index 77915b5cf..fdf901862 100644 --- a/OpenCL/m05100_a0-pure.cl +++ b/OpenCL/m05100_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m05100_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m05100_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -64,7 +64,7 @@ KERNEL_FQ void m05100_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m05100_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m05100_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m05100_a1-optimized.cl b/OpenCL/m05100_a1-optimized.cl index 33805c09b..f1af6d92b 100644 --- a/OpenCL/m05100_a1-optimized.cl +++ b/OpenCL/m05100_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m05100_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05100_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -209,15 +209,15 @@ KERNEL_FQ void m05100_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m05100_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05100_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m05100_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05100_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m05100_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05100_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -424,10 +424,10 @@ KERNEL_FQ void m05100_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m05100_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05100_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m05100_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05100_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m05100_a1-pure.cl b/OpenCL/m05100_a1-pure.cl index 630fa692f..de574e374 100644 --- a/OpenCL/m05100_a1-pure.cl +++ b/OpenCL/m05100_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m05100_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05100_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void m05100_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m05100_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05100_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m05100_a3-optimized.cl b/OpenCL/m05100_a3-optimized.cl index 7bb0ab257..70ae97a53 100644 --- a/OpenCL/m05100_a3-optimized.cl +++ b/OpenCL/m05100_a3-optimized.cl @@ -290,7 +290,7 @@ DECLSPEC void m05100s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m05100_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05100_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -339,7 +339,7 @@ KERNEL_FQ void m05100_m04 (KERN_ATTR_BASIC ()) m05100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m05100_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05100_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -388,7 +388,7 @@ KERNEL_FQ void m05100_m08 (KERN_ATTR_BASIC ()) m05100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m05100_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05100_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -437,7 +437,7 @@ KERNEL_FQ void m05100_m16 (KERN_ATTR_BASIC ()) m05100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m05100_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05100_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -486,7 +486,7 @@ KERNEL_FQ void m05100_s04 (KERN_ATTR_BASIC ()) m05100s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m05100_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05100_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -535,7 +535,7 @@ KERNEL_FQ void m05100_s08 (KERN_ATTR_BASIC ()) m05100s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m05100_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05100_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m05100_a3-pure.cl b/OpenCL/m05100_a3-pure.cl index 559bc5f9c..c46a0e4ab 100644 --- a/OpenCL/m05100_a3-pure.cl +++ b/OpenCL/m05100_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m05100_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m05100_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -73,7 +73,7 @@ KERNEL_FQ void m05100_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m05100_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m05100_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m05200-pure.cl b/OpenCL/m05200-pure.cl index 57aea1a72..0b58a1629 100644 --- a/OpenCL/m05200-pure.cl +++ b/OpenCL/m05200-pure.cl @@ -23,7 +23,7 @@ typedef struct pwsafe3_tmp } pwsafe3_tmp_t; -KERNEL_FQ void m05200_init (KERN_ATTR_TMPS (pwsafe3_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m05200_init (KERN_ATTR_TMPS (pwsafe3_tmp_t)) { /** * base @@ -53,7 +53,7 @@ KERNEL_FQ void m05200_init (KERN_ATTR_TMPS (pwsafe3_tmp_t)) tmps[gid].digest_buf[7] = ctx.h[7]; } -KERNEL_FQ void m05200_loop (KERN_ATTR_TMPS (pwsafe3_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m05200_loop (KERN_ATTR_TMPS (pwsafe3_tmp_t)) { const u64 gid = get_global_id (0); @@ -120,7 +120,7 @@ KERNEL_FQ void m05200_loop (KERN_ATTR_TMPS (pwsafe3_tmp_t)) unpackv (tmps, digest_buf, gid, 7, digest[7]); } -KERNEL_FQ void m05200_comp (KERN_ATTR_TMPS (pwsafe3_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m05200_comp (KERN_ATTR_TMPS (pwsafe3_tmp_t)) { /** * modifier diff --git a/OpenCL/m05300_a0-optimized.cl b/OpenCL/m05300_a0-optimized.cl index 2d0ed29b9..304a52be1 100644 --- a/OpenCL/m05300_a0-optimized.cl +++ b/OpenCL/m05300_a0-optimized.cl @@ -111,7 +111,7 @@ DECLSPEC void hmac_md5_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_AS md5_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m05300_m04 (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05300_m04 (KERN_ATTR_RULES_ESALT (ikepsk_t)) { /** * modifier @@ -278,15 +278,15 @@ KERNEL_FQ void m05300_m04 (KERN_ATTR_RULES_ESALT (ikepsk_t)) } } -KERNEL_FQ void m05300_m08 (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05300_m08 (KERN_ATTR_RULES_ESALT (ikepsk_t)) { } -KERNEL_FQ void m05300_m16 (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05300_m16 (KERN_ATTR_RULES_ESALT (ikepsk_t)) { } -KERNEL_FQ void m05300_s04 (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05300_s04 (KERN_ATTR_RULES_ESALT (ikepsk_t)) { /** * modifier @@ -465,10 +465,10 @@ KERNEL_FQ void m05300_s04 (KERN_ATTR_RULES_ESALT (ikepsk_t)) } } -KERNEL_FQ void m05300_s08 (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05300_s08 (KERN_ATTR_RULES_ESALT (ikepsk_t)) { } -KERNEL_FQ void m05300_s16 (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05300_s16 (KERN_ATTR_RULES_ESALT (ikepsk_t)) { } diff --git a/OpenCL/m05300_a0-pure.cl b/OpenCL/m05300_a0-pure.cl index 689fd0874..46ed095cf 100644 --- a/OpenCL/m05300_a0-pure.cl +++ b/OpenCL/m05300_a0-pure.cl @@ -26,7 +26,7 @@ typedef struct ikepsk } ikepsk_t; -KERNEL_FQ void m05300_mxx (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05300_mxx (KERN_ATTR_RULES_ESALT (ikepsk_t)) { /** * modifier @@ -100,7 +100,7 @@ KERNEL_FQ void m05300_mxx (KERN_ATTR_RULES_ESALT (ikepsk_t)) } } -KERNEL_FQ void m05300_sxx (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05300_sxx (KERN_ATTR_RULES_ESALT (ikepsk_t)) { /** * modifier diff --git a/OpenCL/m05300_a1-optimized.cl b/OpenCL/m05300_a1-optimized.cl index 784c7db0b..4436b877b 100644 --- a/OpenCL/m05300_a1-optimized.cl +++ b/OpenCL/m05300_a1-optimized.cl @@ -109,7 +109,7 @@ DECLSPEC void hmac_md5_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_AS md5_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m05300_m04 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05300_m04 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -336,15 +336,15 @@ KERNEL_FQ void m05300_m04 (KERN_ATTR_ESALT (ikepsk_t)) } } -KERNEL_FQ void m05300_m08 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05300_m08 (KERN_ATTR_ESALT (ikepsk_t)) { } -KERNEL_FQ void m05300_m16 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05300_m16 (KERN_ATTR_ESALT (ikepsk_t)) { } -KERNEL_FQ void m05300_s04 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05300_s04 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -583,10 +583,10 @@ KERNEL_FQ void m05300_s04 (KERN_ATTR_ESALT (ikepsk_t)) } } -KERNEL_FQ void m05300_s08 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05300_s08 (KERN_ATTR_ESALT (ikepsk_t)) { } -KERNEL_FQ void m05300_s16 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05300_s16 (KERN_ATTR_ESALT (ikepsk_t)) { } diff --git a/OpenCL/m05300_a1-pure.cl b/OpenCL/m05300_a1-pure.cl index c3bdb83a6..781da5eca 100644 --- a/OpenCL/m05300_a1-pure.cl +++ b/OpenCL/m05300_a1-pure.cl @@ -24,7 +24,7 @@ typedef struct ikepsk } ikepsk_t; -KERNEL_FQ void m05300_mxx (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05300_mxx (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -123,7 +123,7 @@ KERNEL_FQ void m05300_mxx (KERN_ATTR_ESALT (ikepsk_t)) } } -KERNEL_FQ void m05300_sxx (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05300_sxx (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier diff --git a/OpenCL/m05300_a3-optimized.cl b/OpenCL/m05300_a3-optimized.cl index 5917f6c29..2be6bc7aa 100644 --- a/OpenCL/m05300_a3-optimized.cl +++ b/OpenCL/m05300_a3-optimized.cl @@ -409,7 +409,7 @@ DECLSPEC void m05300s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m05300_m04 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05300_m04 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -482,7 +482,7 @@ KERNEL_FQ void m05300_m04 (KERN_ATTR_ESALT (ikepsk_t)) m05300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_msg_buf, s_nr_buf); } -KERNEL_FQ void m05300_m08 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05300_m08 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -555,7 +555,7 @@ KERNEL_FQ void m05300_m08 (KERN_ATTR_ESALT (ikepsk_t)) m05300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_msg_buf, s_nr_buf); } -KERNEL_FQ void m05300_m16 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05300_m16 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -628,7 +628,7 @@ KERNEL_FQ void m05300_m16 (KERN_ATTR_ESALT (ikepsk_t)) m05300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_msg_buf, s_nr_buf); } -KERNEL_FQ void m05300_s04 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05300_s04 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -701,7 +701,7 @@ KERNEL_FQ void m05300_s04 (KERN_ATTR_ESALT (ikepsk_t)) m05300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_msg_buf, s_nr_buf); } -KERNEL_FQ void m05300_s08 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05300_s08 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -774,7 +774,7 @@ KERNEL_FQ void m05300_s08 (KERN_ATTR_ESALT (ikepsk_t)) m05300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_msg_buf, s_nr_buf); } -KERNEL_FQ void m05300_s16 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05300_s16 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier diff --git a/OpenCL/m05300_a3-pure.cl b/OpenCL/m05300_a3-pure.cl index 43dfe10dd..0636c4d67 100644 --- a/OpenCL/m05300_a3-pure.cl +++ b/OpenCL/m05300_a3-pure.cl @@ -24,7 +24,7 @@ typedef struct ikepsk } ikepsk_t; -KERNEL_FQ void m05300_mxx (KERN_ATTR_VECTOR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05300_mxx (KERN_ATTR_VECTOR_ESALT (ikepsk_t)) { /** * modifier @@ -109,7 +109,7 @@ KERNEL_FQ void m05300_mxx (KERN_ATTR_VECTOR_ESALT (ikepsk_t)) } } -KERNEL_FQ void m05300_sxx (KERN_ATTR_VECTOR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05300_sxx (KERN_ATTR_VECTOR_ESALT (ikepsk_t)) { /** * modifier diff --git a/OpenCL/m05400_a0-optimized.cl b/OpenCL/m05400_a0-optimized.cl index cbe34a58b..1fa298673 100644 --- a/OpenCL/m05400_a0-optimized.cl +++ b/OpenCL/m05400_a0-optimized.cl @@ -115,7 +115,7 @@ DECLSPEC void hmac_sha1_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_A sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m05400_m04 (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05400_m04 (KERN_ATTR_RULES_ESALT (ikepsk_t)) { /** * modifier @@ -291,15 +291,15 @@ KERNEL_FQ void m05400_m04 (KERN_ATTR_RULES_ESALT (ikepsk_t)) } } -KERNEL_FQ void m05400_m08 (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05400_m08 (KERN_ATTR_RULES_ESALT (ikepsk_t)) { } -KERNEL_FQ void m05400_m16 (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05400_m16 (KERN_ATTR_RULES_ESALT (ikepsk_t)) { } -KERNEL_FQ void m05400_s04 (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05400_s04 (KERN_ATTR_RULES_ESALT (ikepsk_t)) { /** * modifier @@ -487,10 +487,10 @@ KERNEL_FQ void m05400_s04 (KERN_ATTR_RULES_ESALT (ikepsk_t)) } } -KERNEL_FQ void m05400_s08 (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05400_s08 (KERN_ATTR_RULES_ESALT (ikepsk_t)) { } -KERNEL_FQ void m05400_s16 (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05400_s16 (KERN_ATTR_RULES_ESALT (ikepsk_t)) { } diff --git a/OpenCL/m05400_a0-pure.cl b/OpenCL/m05400_a0-pure.cl index 5481144d0..7a5b2b24d 100644 --- a/OpenCL/m05400_a0-pure.cl +++ b/OpenCL/m05400_a0-pure.cl @@ -26,7 +26,7 @@ typedef struct ikepsk } ikepsk_t; -KERNEL_FQ void m05400_mxx (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05400_mxx (KERN_ATTR_RULES_ESALT (ikepsk_t)) { /** * modifier @@ -100,7 +100,7 @@ KERNEL_FQ void m05400_mxx (KERN_ATTR_RULES_ESALT (ikepsk_t)) } } -KERNEL_FQ void m05400_sxx (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05400_sxx (KERN_ATTR_RULES_ESALT (ikepsk_t)) { /** * modifier diff --git a/OpenCL/m05400_a1-optimized.cl b/OpenCL/m05400_a1-optimized.cl index 245580c31..0f733d808 100644 --- a/OpenCL/m05400_a1-optimized.cl +++ b/OpenCL/m05400_a1-optimized.cl @@ -113,7 +113,7 @@ DECLSPEC void hmac_sha1_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_A sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m05400_m04 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05400_m04 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -357,15 +357,15 @@ KERNEL_FQ void m05400_m04 (KERN_ATTR_ESALT (ikepsk_t)) } } -KERNEL_FQ void m05400_m08 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05400_m08 (KERN_ATTR_ESALT (ikepsk_t)) { } -KERNEL_FQ void m05400_m16 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05400_m16 (KERN_ATTR_ESALT (ikepsk_t)) { } -KERNEL_FQ void m05400_s04 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05400_s04 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -621,10 +621,10 @@ KERNEL_FQ void m05400_s04 (KERN_ATTR_ESALT (ikepsk_t)) } } -KERNEL_FQ void m05400_s08 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05400_s08 (KERN_ATTR_ESALT (ikepsk_t)) { } -KERNEL_FQ void m05400_s16 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05400_s16 (KERN_ATTR_ESALT (ikepsk_t)) { } diff --git a/OpenCL/m05400_a1-pure.cl b/OpenCL/m05400_a1-pure.cl index 60679fab5..4c41ff13f 100644 --- a/OpenCL/m05400_a1-pure.cl +++ b/OpenCL/m05400_a1-pure.cl @@ -24,7 +24,7 @@ typedef struct ikepsk } ikepsk_t; -KERNEL_FQ void m05400_mxx (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05400_mxx (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -123,7 +123,7 @@ KERNEL_FQ void m05400_mxx (KERN_ATTR_ESALT (ikepsk_t)) } } -KERNEL_FQ void m05400_sxx (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05400_sxx (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier diff --git a/OpenCL/m05400_a3-optimized.cl b/OpenCL/m05400_a3-optimized.cl index b99b970f3..be5ee8299 100644 --- a/OpenCL/m05400_a3-optimized.cl +++ b/OpenCL/m05400_a3-optimized.cl @@ -413,7 +413,7 @@ DECLSPEC void m05400s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m05400_m04 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05400_m04 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -486,7 +486,7 @@ KERNEL_FQ void m05400_m04 (KERN_ATTR_ESALT (ikepsk_t)) m05400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_msg_buf, s_nr_buf); } -KERNEL_FQ void m05400_m08 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05400_m08 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -559,7 +559,7 @@ KERNEL_FQ void m05400_m08 (KERN_ATTR_ESALT (ikepsk_t)) m05400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_msg_buf, s_nr_buf); } -KERNEL_FQ void m05400_m16 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05400_m16 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -632,7 +632,7 @@ KERNEL_FQ void m05400_m16 (KERN_ATTR_ESALT (ikepsk_t)) m05400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_msg_buf, s_nr_buf); } -KERNEL_FQ void m05400_s04 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05400_s04 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -705,7 +705,7 @@ KERNEL_FQ void m05400_s04 (KERN_ATTR_ESALT (ikepsk_t)) m05400s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_msg_buf, s_nr_buf); } -KERNEL_FQ void m05400_s08 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05400_s08 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -778,7 +778,7 @@ KERNEL_FQ void m05400_s08 (KERN_ATTR_ESALT (ikepsk_t)) m05400s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_msg_buf, s_nr_buf); } -KERNEL_FQ void m05400_s16 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05400_s16 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier diff --git a/OpenCL/m05400_a3-pure.cl b/OpenCL/m05400_a3-pure.cl index c22bdd166..76eb104b1 100644 --- a/OpenCL/m05400_a3-pure.cl +++ b/OpenCL/m05400_a3-pure.cl @@ -24,7 +24,7 @@ typedef struct ikepsk } ikepsk_t; -KERNEL_FQ void m05400_mxx (KERN_ATTR_VECTOR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05400_mxx (KERN_ATTR_VECTOR_ESALT (ikepsk_t)) { /** * modifier @@ -109,7 +109,7 @@ KERNEL_FQ void m05400_mxx (KERN_ATTR_VECTOR_ESALT (ikepsk_t)) } } -KERNEL_FQ void m05400_sxx (KERN_ATTR_VECTOR_ESALT (ikepsk_t)) +KERNEL_FQ void HC_ATTR_SEQ m05400_sxx (KERN_ATTR_VECTOR_ESALT (ikepsk_t)) { /** * modifier diff --git a/OpenCL/m05500_a0-optimized.cl b/OpenCL/m05500_a0-optimized.cl index f3eee1661..d7dd89591 100644 --- a/OpenCL/m05500_a0-optimized.cl +++ b/OpenCL/m05500_a0-optimized.cl @@ -502,7 +502,7 @@ DECLSPEC void transform_netntlmv1_key (const u32x w0, const u32x w1, PRIVATE_AS | ((k[7] & 0xff) << 24); } -KERNEL_FQ void m05500_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m05500_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -716,15 +716,15 @@ KERNEL_FQ void m05500_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m05500_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m05500_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m05500_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m05500_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m05500_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m05500_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -952,10 +952,10 @@ KERNEL_FQ void m05500_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m05500_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m05500_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m05500_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m05500_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m05500_a0-pure.cl b/OpenCL/m05500_a0-pure.cl index 0b65f38dd..35d27e95c 100644 --- a/OpenCL/m05500_a0-pure.cl +++ b/OpenCL/m05500_a0-pure.cl @@ -502,7 +502,7 @@ DECLSPEC void transform_netntlmv1_key (const u32 w0, const u32 w1, PRIVATE_AS u3 | ((k[7] & 0xff) << 24); } -KERNEL_FQ void m05500_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m05500_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -635,7 +635,7 @@ KERNEL_FQ void m05500_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m05500_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m05500_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m05500_a1-optimized.cl b/OpenCL/m05500_a1-optimized.cl index a102db121..8ad05199c 100644 --- a/OpenCL/m05500_a1-optimized.cl +++ b/OpenCL/m05500_a1-optimized.cl @@ -500,7 +500,7 @@ DECLSPEC void transform_netntlmv1_key (const u32x w0, const u32x w1, PRIVATE_AS | ((k[7] & 0xff) << 24); } -KERNEL_FQ void m05500_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05500_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -767,15 +767,15 @@ KERNEL_FQ void m05500_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m05500_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05500_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m05500_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05500_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m05500_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05500_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -1061,10 +1061,10 @@ KERNEL_FQ void m05500_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m05500_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05500_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m05500_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05500_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m05500_a1-pure.cl b/OpenCL/m05500_a1-pure.cl index 1466ce430..8836cc07c 100644 --- a/OpenCL/m05500_a1-pure.cl +++ b/OpenCL/m05500_a1-pure.cl @@ -500,7 +500,7 @@ DECLSPEC void transform_netntlmv1_key (const u32 w0, const u32 w1, PRIVATE_AS u3 | ((k[7] & 0xff) << 24); } -KERNEL_FQ void m05500_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05500_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -631,7 +631,7 @@ KERNEL_FQ void m05500_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m05500_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m05500_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m05500_a3-optimized.cl b/OpenCL/m05500_a3-optimized.cl index 421e683ca..095b98a2f 100644 --- a/OpenCL/m05500_a3-optimized.cl +++ b/OpenCL/m05500_a3-optimized.cl @@ -827,7 +827,7 @@ DECLSPEC void m05500s (SHM_TYPE u32 (*s_SPtrans)[64], SHM_TYPE u32 (*s_skb)[64], } } -KERNEL_FQ void m05500_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m05500_m04 (KERN_ATTR_VECTOR ()) { /** * modifier @@ -910,7 +910,7 @@ KERNEL_FQ void m05500_m04 (KERN_ATTR_VECTOR ()) m05500m (s_SPtrans, s_skb, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m05500_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m05500_m08 (KERN_ATTR_VECTOR ()) { /** * modifier @@ -993,7 +993,7 @@ KERNEL_FQ void m05500_m08 (KERN_ATTR_VECTOR ()) m05500m (s_SPtrans, s_skb, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m05500_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m05500_m16 (KERN_ATTR_VECTOR ()) { /** * modifier @@ -1076,7 +1076,7 @@ KERNEL_FQ void m05500_m16 (KERN_ATTR_VECTOR ()) m05500m (s_SPtrans, s_skb, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m05500_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m05500_s04 (KERN_ATTR_VECTOR ()) { /** * modifier @@ -1159,7 +1159,7 @@ KERNEL_FQ void m05500_s04 (KERN_ATTR_VECTOR ()) m05500s (s_SPtrans, s_skb, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m05500_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m05500_s08 (KERN_ATTR_VECTOR ()) { /** * modifier @@ -1242,7 +1242,7 @@ KERNEL_FQ void m05500_s08 (KERN_ATTR_VECTOR ()) m05500s (s_SPtrans, s_skb, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m05500_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m05500_s16 (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m05500_a3-pure.cl b/OpenCL/m05500_a3-pure.cl index ab19a80bc..464573c8e 100644 --- a/OpenCL/m05500_a3-pure.cl +++ b/OpenCL/m05500_a3-pure.cl @@ -500,7 +500,7 @@ DECLSPEC void transform_netntlmv1_key (const u32x w0, const u32x w1, PRIVATE_AS | ((k[7] & 0xff) << 24); } -KERNEL_FQ void m05500_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m05500_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -658,7 +658,7 @@ KERNEL_FQ void m05500_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m05500_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m05500_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m05600_a0-optimized.cl b/OpenCL/m05600_a0-optimized.cl index 5bedcfe2d..25958c3a1 100644 --- a/OpenCL/m05600_a0-optimized.cl +++ b/OpenCL/m05600_a0-optimized.cl @@ -114,7 +114,7 @@ DECLSPEC void hmac_md5_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_AS md5_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m05600_m04 (KERN_ATTR_RULES_ESALT (netntlm_t)) +KERNEL_FQ void HC_ATTR_SEQ m05600_m04 (KERN_ATTR_RULES_ESALT (netntlm_t)) { /** * modifier @@ -345,15 +345,15 @@ KERNEL_FQ void m05600_m04 (KERN_ATTR_RULES_ESALT (netntlm_t)) } } -KERNEL_FQ void m05600_m08 (KERN_ATTR_RULES_ESALT (netntlm_t)) +KERNEL_FQ void HC_ATTR_SEQ m05600_m08 (KERN_ATTR_RULES_ESALT (netntlm_t)) { } -KERNEL_FQ void m05600_m16 (KERN_ATTR_RULES_ESALT (netntlm_t)) +KERNEL_FQ void HC_ATTR_SEQ m05600_m16 (KERN_ATTR_RULES_ESALT (netntlm_t)) { } -KERNEL_FQ void m05600_s04 (KERN_ATTR_RULES_ESALT (netntlm_t)) +KERNEL_FQ void HC_ATTR_SEQ m05600_s04 (KERN_ATTR_RULES_ESALT (netntlm_t)) { /** * modifier @@ -596,10 +596,10 @@ KERNEL_FQ void m05600_s04 (KERN_ATTR_RULES_ESALT (netntlm_t)) } } -KERNEL_FQ void m05600_s08 (KERN_ATTR_RULES_ESALT (netntlm_t)) +KERNEL_FQ void HC_ATTR_SEQ m05600_s08 (KERN_ATTR_RULES_ESALT (netntlm_t)) { } -KERNEL_FQ void m05600_s16 (KERN_ATTR_RULES_ESALT (netntlm_t)) +KERNEL_FQ void HC_ATTR_SEQ m05600_s16 (KERN_ATTR_RULES_ESALT (netntlm_t)) { } diff --git a/OpenCL/m05600_a0-pure.cl b/OpenCL/m05600_a0-pure.cl index 257bf949a..ebe418137 100644 --- a/OpenCL/m05600_a0-pure.cl +++ b/OpenCL/m05600_a0-pure.cl @@ -29,7 +29,7 @@ typedef struct netntlm } netntlm_t; -KERNEL_FQ void m05600_mxx (KERN_ATTR_RULES_ESALT (netntlm_t)) +KERNEL_FQ void HC_ATTR_SEQ m05600_mxx (KERN_ATTR_RULES_ESALT (netntlm_t)) { /** * modifier @@ -128,7 +128,7 @@ KERNEL_FQ void m05600_mxx (KERN_ATTR_RULES_ESALT (netntlm_t)) } } -KERNEL_FQ void m05600_sxx (KERN_ATTR_RULES_ESALT (netntlm_t)) +KERNEL_FQ void HC_ATTR_SEQ m05600_sxx (KERN_ATTR_RULES_ESALT (netntlm_t)) { /** * modifier diff --git a/OpenCL/m05600_a1-optimized.cl b/OpenCL/m05600_a1-optimized.cl index f30fb465d..11318d25c 100644 --- a/OpenCL/m05600_a1-optimized.cl +++ b/OpenCL/m05600_a1-optimized.cl @@ -112,7 +112,7 @@ DECLSPEC void hmac_md5_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_AS md5_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m05600_m04 (KERN_ATTR_ESALT (netntlm_t)) +KERNEL_FQ void HC_ATTR_SEQ m05600_m04 (KERN_ATTR_ESALT (netntlm_t)) { /** * modifier @@ -401,15 +401,15 @@ KERNEL_FQ void m05600_m04 (KERN_ATTR_ESALT (netntlm_t)) } } -KERNEL_FQ void m05600_m08 (KERN_ATTR_ESALT (netntlm_t)) +KERNEL_FQ void HC_ATTR_SEQ m05600_m08 (KERN_ATTR_ESALT (netntlm_t)) { } -KERNEL_FQ void m05600_m16 (KERN_ATTR_ESALT (netntlm_t)) +KERNEL_FQ void HC_ATTR_SEQ m05600_m16 (KERN_ATTR_ESALT (netntlm_t)) { } -KERNEL_FQ void m05600_s04 (KERN_ATTR_ESALT (netntlm_t)) +KERNEL_FQ void HC_ATTR_SEQ m05600_s04 (KERN_ATTR_ESALT (netntlm_t)) { /** * modifier @@ -710,10 +710,10 @@ KERNEL_FQ void m05600_s04 (KERN_ATTR_ESALT (netntlm_t)) } } -KERNEL_FQ void m05600_s08 (KERN_ATTR_ESALT (netntlm_t)) +KERNEL_FQ void HC_ATTR_SEQ m05600_s08 (KERN_ATTR_ESALT (netntlm_t)) { } -KERNEL_FQ void m05600_s16 (KERN_ATTR_ESALT (netntlm_t)) +KERNEL_FQ void HC_ATTR_SEQ m05600_s16 (KERN_ATTR_ESALT (netntlm_t)) { } diff --git a/OpenCL/m05600_a1-pure.cl b/OpenCL/m05600_a1-pure.cl index 65b8ae4b3..234fed876 100644 --- a/OpenCL/m05600_a1-pure.cl +++ b/OpenCL/m05600_a1-pure.cl @@ -27,7 +27,7 @@ typedef struct netntlm } netntlm_t; -KERNEL_FQ void m05600_mxx (KERN_ATTR_ESALT (netntlm_t)) +KERNEL_FQ void HC_ATTR_SEQ m05600_mxx (KERN_ATTR_ESALT (netntlm_t)) { /** * modifier @@ -124,7 +124,7 @@ KERNEL_FQ void m05600_mxx (KERN_ATTR_ESALT (netntlm_t)) } } -KERNEL_FQ void m05600_sxx (KERN_ATTR_ESALT (netntlm_t)) +KERNEL_FQ void HC_ATTR_SEQ m05600_sxx (KERN_ATTR_ESALT (netntlm_t)) { /** * modifier diff --git a/OpenCL/m05600_a3-optimized.cl b/OpenCL/m05600_a3-optimized.cl index d2450f86b..265f984dd 100644 --- a/OpenCL/m05600_a3-optimized.cl +++ b/OpenCL/m05600_a3-optimized.cl @@ -530,7 +530,7 @@ DECLSPEC void m05600s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m05600_m04 (KERN_ATTR_ESALT (netntlm_t)) +KERNEL_FQ void HC_ATTR_SEQ m05600_m04 (KERN_ATTR_ESALT (netntlm_t)) { /** * modifier @@ -603,7 +603,7 @@ KERNEL_FQ void m05600_m04 (KERN_ATTR_ESALT (netntlm_t)) m05600m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_userdomain_buf, s_chall_buf); } -KERNEL_FQ void m05600_m08 (KERN_ATTR_ESALT (netntlm_t)) +KERNEL_FQ void HC_ATTR_SEQ m05600_m08 (KERN_ATTR_ESALT (netntlm_t)) { /** * modifier @@ -676,7 +676,7 @@ KERNEL_FQ void m05600_m08 (KERN_ATTR_ESALT (netntlm_t)) m05600m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_userdomain_buf, s_chall_buf); } -KERNEL_FQ void m05600_m16 (KERN_ATTR_ESALT (netntlm_t)) +KERNEL_FQ void HC_ATTR_SEQ m05600_m16 (KERN_ATTR_ESALT (netntlm_t)) { /** * modifier @@ -749,7 +749,7 @@ KERNEL_FQ void m05600_m16 (KERN_ATTR_ESALT (netntlm_t)) m05600m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_userdomain_buf, s_chall_buf); } -KERNEL_FQ void m05600_s04 (KERN_ATTR_ESALT (netntlm_t)) +KERNEL_FQ void HC_ATTR_SEQ m05600_s04 (KERN_ATTR_ESALT (netntlm_t)) { /** * modifier @@ -822,7 +822,7 @@ KERNEL_FQ void m05600_s04 (KERN_ATTR_ESALT (netntlm_t)) m05600s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_userdomain_buf, s_chall_buf); } -KERNEL_FQ void m05600_s08 (KERN_ATTR_ESALT (netntlm_t)) +KERNEL_FQ void HC_ATTR_SEQ m05600_s08 (KERN_ATTR_ESALT (netntlm_t)) { /** * modifier @@ -895,7 +895,7 @@ KERNEL_FQ void m05600_s08 (KERN_ATTR_ESALT (netntlm_t)) m05600s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_userdomain_buf, s_chall_buf); } -KERNEL_FQ void m05600_s16 (KERN_ATTR_ESALT (netntlm_t)) +KERNEL_FQ void HC_ATTR_SEQ m05600_s16 (KERN_ATTR_ESALT (netntlm_t)) { /** * modifier diff --git a/OpenCL/m05600_a3-pure.cl b/OpenCL/m05600_a3-pure.cl index dc7521830..68472ea8f 100644 --- a/OpenCL/m05600_a3-pure.cl +++ b/OpenCL/m05600_a3-pure.cl @@ -27,7 +27,7 @@ typedef struct netntlm } netntlm_t; -KERNEL_FQ void m05600_mxx (KERN_ATTR_VECTOR_ESALT (netntlm_t)) +KERNEL_FQ void HC_ATTR_SEQ m05600_mxx (KERN_ATTR_VECTOR_ESALT (netntlm_t)) { /** * modifier @@ -137,7 +137,7 @@ KERNEL_FQ void m05600_mxx (KERN_ATTR_VECTOR_ESALT (netntlm_t)) } } -KERNEL_FQ void m05600_sxx (KERN_ATTR_VECTOR_ESALT (netntlm_t)) +KERNEL_FQ void HC_ATTR_SEQ m05600_sxx (KERN_ATTR_VECTOR_ESALT (netntlm_t)) { /** * modifier diff --git a/OpenCL/m05800-optimized.cl b/OpenCL/m05800-optimized.cl index 200716a2f..e64fe685c 100644 --- a/OpenCL/m05800-optimized.cl +++ b/OpenCL/m05800-optimized.cl @@ -315,7 +315,7 @@ DECLSPEC void append_salt (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u3 } } -KERNEL_FQ void m05800_init (KERN_ATTR_TMPS (androidpin_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m05800_init (KERN_ATTR_TMPS (androidpin_tmp_t)) { /** * base @@ -404,7 +404,7 @@ KERNEL_FQ void m05800_init (KERN_ATTR_TMPS (androidpin_tmp_t)) tmps[gid].digest_buf[4] = digest[4]; } -KERNEL_FQ void m05800_loop (KERN_ATTR_TMPS (androidpin_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m05800_loop (KERN_ATTR_TMPS (androidpin_tmp_t)) { /** * base @@ -523,7 +523,7 @@ KERNEL_FQ void m05800_loop (KERN_ATTR_TMPS (androidpin_tmp_t)) tmps[gid].digest_buf[4] = digest[4]; } -KERNEL_FQ void m05800_comp (KERN_ATTR_TMPS (androidpin_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m05800_comp (KERN_ATTR_TMPS (androidpin_tmp_t)) { /** * modifier diff --git a/OpenCL/m05800-pure.cl b/OpenCL/m05800-pure.cl index 313530194..c4498517c 100644 --- a/OpenCL/m05800-pure.cl +++ b/OpenCL/m05800-pure.cl @@ -188,7 +188,7 @@ CONSTANT_VK u32a c_pc_len[1024] = 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 }; -KERNEL_FQ void m05800_init (KERN_ATTR_TMPS (androidpin_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m05800_init (KERN_ATTR_TMPS (androidpin_tmp_t)) { const u64 gid = get_global_id (0); @@ -218,7 +218,7 @@ KERNEL_FQ void m05800_init (KERN_ATTR_TMPS (androidpin_tmp_t)) tmps[gid].digest_buf[4] = ctx.h[4]; } -KERNEL_FQ void m05800_loop (KERN_ATTR_TMPS (androidpin_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m05800_loop (KERN_ATTR_TMPS (androidpin_tmp_t)) { /** * base @@ -317,7 +317,7 @@ KERNEL_FQ void m05800_loop (KERN_ATTR_TMPS (androidpin_tmp_t)) tmps[gid].digest_buf[4] = digest[4]; } -KERNEL_FQ void m05800_comp (KERN_ATTR_TMPS (androidpin_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m05800_comp (KERN_ATTR_TMPS (androidpin_tmp_t)) { /** * modifier diff --git a/OpenCL/m06000_a0-optimized.cl b/OpenCL/m06000_a0-optimized.cl index 79fc22175..78a1e41cb 100644 --- a/OpenCL/m06000_a0-optimized.cl +++ b/OpenCL/m06000_a0-optimized.cl @@ -21,7 +21,7 @@ DECLSPEC void ripemd160_transform_transport_vector (PRIVATE_AS const u32x *w, PR ripemd160_transform_vector (w + 0, w + 4, w + 8, w + 12, dgst); } -KERNEL_FQ void m06000_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m06000_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -103,15 +103,15 @@ KERNEL_FQ void m06000_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m06000_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m06000_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m06000_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m06000_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m06000_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m06000_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -205,10 +205,10 @@ KERNEL_FQ void m06000_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m06000_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m06000_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m06000_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m06000_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m06000_a0-pure.cl b/OpenCL/m06000_a0-pure.cl index 799b60e58..3773fbd51 100644 --- a/OpenCL/m06000_a0-pure.cl +++ b/OpenCL/m06000_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_ripemd160.cl) #endif -KERNEL_FQ void m06000_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m06000_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void m06000_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m06000_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m06000_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m06000_a1-optimized.cl b/OpenCL/m06000_a1-optimized.cl index f1311ce99..99188ab33 100644 --- a/OpenCL/m06000_a1-optimized.cl +++ b/OpenCL/m06000_a1-optimized.cl @@ -19,7 +19,7 @@ DECLSPEC void ripemd160_transform_transport_vector (PRIVATE_AS const u32x *w, PR ripemd160_transform_vector (w + 0, w + 4, w + 8, w + 12, dgst); } -KERNEL_FQ void m06000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06000_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -159,15 +159,15 @@ KERNEL_FQ void m06000_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m06000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06000_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m06000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06000_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m06000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06000_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -319,10 +319,10 @@ KERNEL_FQ void m06000_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m06000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06000_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m06000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06000_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m06000_a1-pure.cl b/OpenCL/m06000_a1-pure.cl index 80fc12ee9..c9460c706 100644 --- a/OpenCL/m06000_a1-pure.cl +++ b/OpenCL/m06000_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_ripemd160.cl) #endif -KERNEL_FQ void m06000_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06000_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void m06000_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m06000_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06000_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m06000_a3-optimized.cl b/OpenCL/m06000_a3-optimized.cl index 4f09bd702..6d4069a7f 100644 --- a/OpenCL/m06000_a3-optimized.cl +++ b/OpenCL/m06000_a3-optimized.cl @@ -141,7 +141,7 @@ DECLSPEC void m06000s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m06000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06000_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -190,7 +190,7 @@ KERNEL_FQ void m06000_m04 (KERN_ATTR_BASIC ()) m06000m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m06000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06000_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -239,7 +239,7 @@ KERNEL_FQ void m06000_m08 (KERN_ATTR_BASIC ()) m06000m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m06000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06000_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -288,7 +288,7 @@ KERNEL_FQ void m06000_m16 (KERN_ATTR_BASIC ()) m06000m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m06000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06000_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -337,7 +337,7 @@ KERNEL_FQ void m06000_s04 (KERN_ATTR_BASIC ()) m06000s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m06000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06000_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -386,7 +386,7 @@ KERNEL_FQ void m06000_s08 (KERN_ATTR_BASIC ()) m06000s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m06000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06000_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m06000_a3-pure.cl b/OpenCL/m06000_a3-pure.cl index 60049ccfd..1b037ff9a 100644 --- a/OpenCL/m06000_a3-pure.cl +++ b/OpenCL/m06000_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_ripemd160.cl) #endif -KERNEL_FQ void m06000_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m06000_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void m06000_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m06000_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m06000_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m06050_a0-pure.cl b/OpenCL/m06050_a0-pure.cl index 721829c35..0fbf0112a 100644 --- a/OpenCL/m06050_a0-pure.cl +++ b/OpenCL/m06050_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_ripemd160.cl) #endif -KERNEL_FQ void m06050_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m06050_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void m06050_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m06050_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m06050_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m06050_a1-pure.cl b/OpenCL/m06050_a1-pure.cl index 8ee9d6a3f..816eeba2e 100644 --- a/OpenCL/m06050_a1-pure.cl +++ b/OpenCL/m06050_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_ripemd160.cl) #endif -KERNEL_FQ void m06050_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06050_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -92,7 +92,7 @@ KERNEL_FQ void m06050_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m06050_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06050_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m06050_a3-pure.cl b/OpenCL/m06050_a3-pure.cl index 18bf635ce..54e335a2a 100644 --- a/OpenCL/m06050_a3-pure.cl +++ b/OpenCL/m06050_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_ripemd160.cl) #endif -KERNEL_FQ void m06050_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m06050_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -78,7 +78,7 @@ KERNEL_FQ void m06050_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m06050_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m06050_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m06060_a0-pure.cl b/OpenCL/m06060_a0-pure.cl index 2ec330ec9..1052ac5f4 100644 --- a/OpenCL/m06060_a0-pure.cl +++ b/OpenCL/m06060_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_ripemd160.cl) #endif -KERNEL_FQ void m06060_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m06060_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void m06060_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m06060_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m06060_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m06060_a1-pure.cl b/OpenCL/m06060_a1-pure.cl index 65113fd08..a93d77eb1 100644 --- a/OpenCL/m06060_a1-pure.cl +++ b/OpenCL/m06060_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_ripemd160.cl) #endif -KERNEL_FQ void m06060_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06060_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -94,7 +94,7 @@ KERNEL_FQ void m06060_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m06060_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06060_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m06060_a3-pure.cl b/OpenCL/m06060_a3-pure.cl index b67daf63b..aa9f73995 100644 --- a/OpenCL/m06060_a3-pure.cl +++ b/OpenCL/m06060_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_ripemd160.cl) #endif -KERNEL_FQ void m06060_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m06060_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void m06060_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m06060_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m06060_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m06100_a0-optimized.cl b/OpenCL/m06100_a0-optimized.cl index 478e8caa2..ceb470442 100644 --- a/OpenCL/m06100_a0-optimized.cl +++ b/OpenCL/m06100_a0-optimized.cl @@ -21,7 +21,7 @@ DECLSPEC void whirlpool_transform_transport_vector (PRIVATE_AS const u32x *w, PR whirlpool_transform_vector (w + 0, w + 4, w + 8, w + 12, digest, s_MT0, s_MT1, s_MT2, s_MT3, s_MT4, s_MT5, s_MT6, s_MT7); } -KERNEL_FQ void m06100_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m06100_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -156,15 +156,15 @@ KERNEL_FQ void m06100_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m06100_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m06100_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m06100_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m06100_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m06100_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m06100_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -311,10 +311,10 @@ KERNEL_FQ void m06100_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m06100_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m06100_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m06100_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m06100_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m06100_a0-pure.cl b/OpenCL/m06100_a0-pure.cl index f53025d4d..63f4e5e71 100644 --- a/OpenCL/m06100_a0-pure.cl +++ b/OpenCL/m06100_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_whirlpool.cl) #endif -KERNEL_FQ void m06100_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m06100_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -103,7 +103,7 @@ KERNEL_FQ void m06100_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m06100_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m06100_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m06100_a1-optimized.cl b/OpenCL/m06100_a1-optimized.cl index 0ce3769e4..9eea1caa5 100644 --- a/OpenCL/m06100_a1-optimized.cl +++ b/OpenCL/m06100_a1-optimized.cl @@ -19,7 +19,7 @@ DECLSPEC void whirlpool_transform_transport_vector (PRIVATE_AS const u32x *w, PR whirlpool_transform_vector (w + 0, w + 4, w + 8, w + 12, digest, s_MT0, s_MT1, s_MT2, s_MT3, s_MT4, s_MT5, s_MT6, s_MT7); } -KERNEL_FQ void m06100_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06100_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -212,15 +212,15 @@ KERNEL_FQ void m06100_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m06100_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06100_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m06100_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06100_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m06100_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06100_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -425,10 +425,10 @@ KERNEL_FQ void m06100_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m06100_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06100_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m06100_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06100_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m06100_a1-pure.cl b/OpenCL/m06100_a1-pure.cl index 95567d1dd..8cace5623 100644 --- a/OpenCL/m06100_a1-pure.cl +++ b/OpenCL/m06100_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_whirlpool.cl) #endif -KERNEL_FQ void m06100_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06100_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -99,7 +99,7 @@ KERNEL_FQ void m06100_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m06100_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06100_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m06100_a3-optimized.cl b/OpenCL/m06100_a3-optimized.cl index 9623ad97e..668e22714 100644 --- a/OpenCL/m06100_a3-optimized.cl +++ b/OpenCL/m06100_a3-optimized.cl @@ -163,7 +163,7 @@ DECLSPEC void m06100s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m06100_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06100_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -258,7 +258,7 @@ KERNEL_FQ void m06100_m04 (KERN_ATTR_BASIC ()) m06100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_MT0, s_MT1, s_MT2, s_MT3, s_MT4, s_MT5, s_MT6, s_MT7); } -KERNEL_FQ void m06100_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06100_m08 (KERN_ATTR_BASIC ()) { /** * modifier @@ -353,11 +353,11 @@ KERNEL_FQ void m06100_m08 (KERN_ATTR_BASIC ()) m06100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_MT0, s_MT1, s_MT2, s_MT3, s_MT4, s_MT5, s_MT6, s_MT7); } -KERNEL_FQ void m06100_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06100_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m06100_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06100_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -452,7 +452,7 @@ KERNEL_FQ void m06100_s04 (KERN_ATTR_BASIC ()) m06100s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_MT0, s_MT1, s_MT2, s_MT3, s_MT4, s_MT5, s_MT6, s_MT7); } -KERNEL_FQ void m06100_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06100_s08 (KERN_ATTR_BASIC ()) { /** * modifier @@ -547,6 +547,6 @@ KERNEL_FQ void m06100_s08 (KERN_ATTR_BASIC ()) m06100s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_MT0, s_MT1, s_MT2, s_MT3, s_MT4, s_MT5, s_MT6, s_MT7); } -KERNEL_FQ void m06100_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06100_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m06100_a3-pure.cl b/OpenCL/m06100_a3-pure.cl index a54d087e8..1b8b092ac 100644 --- a/OpenCL/m06100_a3-pure.cl +++ b/OpenCL/m06100_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_whirlpool.cl) #endif -KERNEL_FQ void m06100_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m06100_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -112,7 +112,7 @@ KERNEL_FQ void m06100_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m06100_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m06100_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m06211-pure.cl b/OpenCL/m06211-pure.cl index 11e5a5bf4..9b4351e7b 100644 --- a/OpenCL/m06211-pure.cl +++ b/OpenCL/m06211-pure.cl @@ -84,7 +84,7 @@ DECLSPEC void hmac_ripemd160_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PR ripemd160_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m06211_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ void HC_ATTR_SEQ m06211_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -214,7 +214,7 @@ KERNEL_FQ void m06211_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) } } -KERNEL_FQ void m06211_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ void HC_ATTR_SEQ m06211_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { const u64 gid = get_global_id (0); @@ -299,7 +299,7 @@ KERNEL_FQ void m06211_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) } } -KERNEL_FQ void m06211_comp (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ void HC_ATTR_SEQ m06211_comp (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m06212-pure.cl b/OpenCL/m06212-pure.cl index 01dca38c8..9ed498233 100644 --- a/OpenCL/m06212-pure.cl +++ b/OpenCL/m06212-pure.cl @@ -84,7 +84,7 @@ DECLSPEC void hmac_ripemd160_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PR ripemd160_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m06212_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ void HC_ATTR_SEQ m06212_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -214,7 +214,7 @@ KERNEL_FQ void m06212_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) } } -KERNEL_FQ void m06212_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ void HC_ATTR_SEQ m06212_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { const u64 gid = get_global_id (0); @@ -299,7 +299,7 @@ KERNEL_FQ void m06212_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) } } -KERNEL_FQ void m06212_comp (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ void HC_ATTR_SEQ m06212_comp (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m06213-pure.cl b/OpenCL/m06213-pure.cl index dd51ac790..8c5435e63 100644 --- a/OpenCL/m06213-pure.cl +++ b/OpenCL/m06213-pure.cl @@ -84,7 +84,7 @@ DECLSPEC void hmac_ripemd160_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PR ripemd160_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m06213_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ void HC_ATTR_SEQ m06213_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -214,7 +214,7 @@ KERNEL_FQ void m06213_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) } } -KERNEL_FQ void m06213_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ void HC_ATTR_SEQ m06213_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { const u64 gid = get_global_id (0); @@ -299,7 +299,7 @@ KERNEL_FQ void m06213_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) } } -KERNEL_FQ void m06213_comp (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ void HC_ATTR_SEQ m06213_comp (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m06221-pure.cl b/OpenCL/m06221-pure.cl index cf03af58b..ae27ea541 100644 --- a/OpenCL/m06221-pure.cl +++ b/OpenCL/m06221-pure.cl @@ -106,7 +106,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void m06221_init (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) +KERNEL_FQ void HC_ATTR_SEQ m06221_init (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -268,7 +268,7 @@ KERNEL_FQ void m06221_init (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) } } -KERNEL_FQ void m06221_loop (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) +KERNEL_FQ void HC_ATTR_SEQ m06221_loop (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) { const u64 gid = get_global_id (0); @@ -394,7 +394,7 @@ KERNEL_FQ void m06221_loop (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) } } -KERNEL_FQ void m06221_comp (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) +KERNEL_FQ void HC_ATTR_SEQ m06221_comp (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m06222-pure.cl b/OpenCL/m06222-pure.cl index 6187ff2dd..112620f16 100644 --- a/OpenCL/m06222-pure.cl +++ b/OpenCL/m06222-pure.cl @@ -106,7 +106,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void m06222_init (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) +KERNEL_FQ void HC_ATTR_SEQ m06222_init (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -268,7 +268,7 @@ KERNEL_FQ void m06222_init (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) } } -KERNEL_FQ void m06222_loop (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) +KERNEL_FQ void HC_ATTR_SEQ m06222_loop (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) { const u64 gid = get_global_id (0); @@ -394,7 +394,7 @@ KERNEL_FQ void m06222_loop (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) } } -KERNEL_FQ void m06222_comp (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) +KERNEL_FQ void HC_ATTR_SEQ m06222_comp (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m06223-pure.cl b/OpenCL/m06223-pure.cl index 5e64191df..36795e9fb 100644 --- a/OpenCL/m06223-pure.cl +++ b/OpenCL/m06223-pure.cl @@ -106,7 +106,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void m06223_init (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) +KERNEL_FQ void HC_ATTR_SEQ m06223_init (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -268,7 +268,7 @@ KERNEL_FQ void m06223_init (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) } } -KERNEL_FQ void m06223_loop (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) +KERNEL_FQ void HC_ATTR_SEQ m06223_loop (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) { const u64 gid = get_global_id (0); @@ -394,7 +394,7 @@ KERNEL_FQ void m06223_loop (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) } } -KERNEL_FQ void m06223_comp (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) +KERNEL_FQ void HC_ATTR_SEQ m06223_comp (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m06231-pure.cl b/OpenCL/m06231-pure.cl index 85880b268..34a9c20f5 100644 --- a/OpenCL/m06231-pure.cl +++ b/OpenCL/m06231-pure.cl @@ -144,7 +144,7 @@ DECLSPEC void hmac_whirlpool_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PR whirlpool_transform_vector (w0, w1, w2, w3, digest, s_MT0, s_MT1, s_MT2, s_MT3, s_MT4, s_MT5, s_MT6, s_MT7); } -KERNEL_FQ void m06231_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ void HC_ATTR_SEQ m06231_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -360,7 +360,7 @@ KERNEL_FQ void m06231_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) } } -KERNEL_FQ void m06231_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ void HC_ATTR_SEQ m06231_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { /** * Whirlpool shared @@ -566,7 +566,7 @@ KERNEL_FQ void m06231_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) } } -KERNEL_FQ void m06231_comp (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ void HC_ATTR_SEQ m06231_comp (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m06232-pure.cl b/OpenCL/m06232-pure.cl index 702a1719e..0108383c8 100644 --- a/OpenCL/m06232-pure.cl +++ b/OpenCL/m06232-pure.cl @@ -144,7 +144,7 @@ DECLSPEC void hmac_whirlpool_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PR whirlpool_transform_vector (w0, w1, w2, w3, digest, s_MT0, s_MT1, s_MT2, s_MT3, s_MT4, s_MT5, s_MT6, s_MT7); } -KERNEL_FQ void m06232_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ void HC_ATTR_SEQ m06232_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -360,7 +360,7 @@ KERNEL_FQ void m06232_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) } } -KERNEL_FQ void m06232_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ void HC_ATTR_SEQ m06232_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { /** * Whirlpool shared @@ -566,7 +566,7 @@ KERNEL_FQ void m06232_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) } } -KERNEL_FQ void m06232_comp (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ void HC_ATTR_SEQ m06232_comp (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m06233-pure.cl b/OpenCL/m06233-pure.cl index 446c58327..45b767d7d 100644 --- a/OpenCL/m06233-pure.cl +++ b/OpenCL/m06233-pure.cl @@ -144,7 +144,7 @@ DECLSPEC void hmac_whirlpool_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PR whirlpool_transform_vector (w0, w1, w2, w3, digest, s_MT0, s_MT1, s_MT2, s_MT3, s_MT4, s_MT5, s_MT6, s_MT7); } -KERNEL_FQ void m06233_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ void HC_ATTR_SEQ m06233_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -360,7 +360,7 @@ KERNEL_FQ void m06233_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) } } -KERNEL_FQ void m06233_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ void HC_ATTR_SEQ m06233_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { /** * Whirlpool shared @@ -566,7 +566,7 @@ KERNEL_FQ void m06233_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) } } -KERNEL_FQ void m06233_comp (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ void HC_ATTR_SEQ m06233_comp (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m06300-optimized.cl b/OpenCL/m06300-optimized.cl index c8cc8779b..830ddc4e6 100644 --- a/OpenCL/m06300-optimized.cl +++ b/OpenCL/m06300-optimized.cl @@ -573,7 +573,7 @@ DECLSPEC void append_1st (PRIVATE_AS u32 *block0, PRIVATE_AS u32 *block1, PRIVAT } } -KERNEL_FQ void m06300_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m06300_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * base @@ -731,7 +731,7 @@ KERNEL_FQ void m06300_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) tmps[gid].digest_buf[3] = digest[3]; } -KERNEL_FQ void m06300_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m06300_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * base @@ -919,7 +919,7 @@ KERNEL_FQ void m06300_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) tmps[gid].digest_buf[3] = digest[3]; } -KERNEL_FQ void m06300_comp (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m06300_comp (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * modifier diff --git a/OpenCL/m06300-pure.cl b/OpenCL/m06300-pure.cl index 11a02d988..41f194683 100644 --- a/OpenCL/m06300-pure.cl +++ b/OpenCL/m06300-pure.cl @@ -22,7 +22,7 @@ typedef struct md5crypt_tmp } md5crypt_tmp_t; -KERNEL_FQ void m06300_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m06300_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * base @@ -122,7 +122,7 @@ KERNEL_FQ void m06300_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) tmps[gid].digest_buf[3] = md5_ctx.h[3]; } -KERNEL_FQ void m06300_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m06300_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * base @@ -217,7 +217,7 @@ KERNEL_FQ void m06300_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) tmps[gid].digest_buf[3] = digest[3]; } -KERNEL_FQ void m06300_comp (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m06300_comp (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * modifier diff --git a/OpenCL/m06400-pure.cl b/OpenCL/m06400-pure.cl index 9dbbfe7d4..eb2d1fb72 100644 --- a/OpenCL/m06400-pure.cl +++ b/OpenCL/m06400-pure.cl @@ -69,7 +69,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m06400_init (KERN_ATTR_TMPS (sha256aix_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m06400_init (KERN_ATTR_TMPS (sha256aix_tmp_t)) { /** * base @@ -153,7 +153,7 @@ KERNEL_FQ void m06400_init (KERN_ATTR_TMPS (sha256aix_tmp_t)) } } -KERNEL_FQ void m06400_loop (KERN_ATTR_TMPS (sha256aix_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m06400_loop (KERN_ATTR_TMPS (sha256aix_tmp_t)) { const u64 gid = get_global_id (0); @@ -259,7 +259,7 @@ KERNEL_FQ void m06400_loop (KERN_ATTR_TMPS (sha256aix_tmp_t)) } } -KERNEL_FQ void m06400_comp (KERN_ATTR_TMPS (sha256aix_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m06400_comp (KERN_ATTR_TMPS (sha256aix_tmp_t)) { /** * base diff --git a/OpenCL/m06500-pure.cl b/OpenCL/m06500-pure.cl index fe8ef3e9a..3808e9fe7 100644 --- a/OpenCL/m06500-pure.cl +++ b/OpenCL/m06500-pure.cl @@ -85,7 +85,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void m06500_init (KERN_ATTR_TMPS (sha512aix_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m06500_init (KERN_ATTR_TMPS (sha512aix_tmp_t)) { /** * base @@ -184,7 +184,7 @@ KERNEL_FQ void m06500_init (KERN_ATTR_TMPS (sha512aix_tmp_t)) tmps[gid].out[7] = sha512_hmac_ctx.opad.h[7]; } -KERNEL_FQ void m06500_loop (KERN_ATTR_TMPS (sha512aix_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m06500_loop (KERN_ATTR_TMPS (sha512aix_tmp_t)) { const u64 gid = get_global_id (0); @@ -307,7 +307,7 @@ KERNEL_FQ void m06500_loop (KERN_ATTR_TMPS (sha512aix_tmp_t)) unpack64v (tmps, out, gid, 7, out[7]); } -KERNEL_FQ void m06500_comp (KERN_ATTR_TMPS (sha512aix_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m06500_comp (KERN_ATTR_TMPS (sha512aix_tmp_t)) { /** * base diff --git a/OpenCL/m06600-pure.cl b/OpenCL/m06600-pure.cl index c98902f42..f12316aba 100644 --- a/OpenCL/m06600-pure.cl +++ b/OpenCL/m06600-pure.cl @@ -64,7 +64,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m06600_init (KERN_ATTR_TMPS (agilekey_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m06600_init (KERN_ATTR_TMPS (agilekey_tmp_t)) { /** * base @@ -144,7 +144,7 @@ KERNEL_FQ void m06600_init (KERN_ATTR_TMPS (agilekey_tmp_t)) } } -KERNEL_FQ void m06600_loop (KERN_ATTR_TMPS (agilekey_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m06600_loop (KERN_ATTR_TMPS (agilekey_tmp_t)) { const u64 gid = get_global_id (0); @@ -229,7 +229,7 @@ KERNEL_FQ void m06600_loop (KERN_ATTR_TMPS (agilekey_tmp_t)) } } -KERNEL_FQ void m06600_comp (KERN_ATTR_TMPS (agilekey_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m06600_comp (KERN_ATTR_TMPS (agilekey_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m06700-pure.cl b/OpenCL/m06700-pure.cl index 35d041efa..a7994d2b9 100644 --- a/OpenCL/m06700-pure.cl +++ b/OpenCL/m06700-pure.cl @@ -63,7 +63,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m06700_init (KERN_ATTR_TMPS (sha1aix_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m06700_init (KERN_ATTR_TMPS (sha1aix_tmp_t)) { /** * base @@ -135,7 +135,7 @@ KERNEL_FQ void m06700_init (KERN_ATTR_TMPS (sha1aix_tmp_t)) } } -KERNEL_FQ void m06700_loop (KERN_ATTR_TMPS (sha1aix_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m06700_loop (KERN_ATTR_TMPS (sha1aix_tmp_t)) { const u64 gid = get_global_id (0); @@ -220,7 +220,7 @@ KERNEL_FQ void m06700_loop (KERN_ATTR_TMPS (sha1aix_tmp_t)) } } -KERNEL_FQ void m06700_comp (KERN_ATTR_TMPS (sha1aix_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m06700_comp (KERN_ATTR_TMPS (sha1aix_tmp_t)) { /** * base diff --git a/OpenCL/m06800-pure.cl b/OpenCL/m06800-pure.cl index 48efc5306..afa24cf47 100644 --- a/OpenCL/m06800-pure.cl +++ b/OpenCL/m06800-pure.cl @@ -75,7 +75,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m06800_init (KERN_ATTR_TMPS_ESALT (lastpass_tmp_t, lastpass_t)) +KERNEL_FQ void HC_ATTR_SEQ m06800_init (KERN_ATTR_TMPS_ESALT (lastpass_tmp_t, lastpass_t)) { /** * base @@ -159,7 +159,7 @@ KERNEL_FQ void m06800_init (KERN_ATTR_TMPS_ESALT (lastpass_tmp_t, lastpass_t)) } } -KERNEL_FQ void m06800_loop (KERN_ATTR_TMPS_ESALT (lastpass_tmp_t, lastpass_t)) +KERNEL_FQ void HC_ATTR_SEQ m06800_loop (KERN_ATTR_TMPS_ESALT (lastpass_tmp_t, lastpass_t)) { const u64 gid = get_global_id (0); @@ -265,7 +265,7 @@ KERNEL_FQ void m06800_loop (KERN_ATTR_TMPS_ESALT (lastpass_tmp_t, lastpass_t)) } } -KERNEL_FQ void m06800_comp (KERN_ATTR_TMPS_ESALT (lastpass_tmp_t, lastpass_t)) +KERNEL_FQ void HC_ATTR_SEQ m06800_comp (KERN_ATTR_TMPS_ESALT (lastpass_tmp_t, lastpass_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m06900_a0-optimized.cl b/OpenCL/m06900_a0-optimized.cl index 9902bdcee..23a831384 100644 --- a/OpenCL/m06900_a0-optimized.cl +++ b/OpenCL/m06900_a0-optimized.cl @@ -698,7 +698,7 @@ CONSTANT_VK u32a c_tables[4][256] = R (k, h, s, 6, t); \ } -KERNEL_FQ void m06900_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m06900_m04 (KERN_ATTR_RULES ()) { /** * base @@ -906,15 +906,15 @@ KERNEL_FQ void m06900_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m06900_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m06900_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m06900_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m06900_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m06900_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m06900_s04 (KERN_ATTR_RULES ()) { /** * base @@ -1138,10 +1138,10 @@ KERNEL_FQ void m06900_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m06900_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m06900_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m06900_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m06900_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m06900_a1-optimized.cl b/OpenCL/m06900_a1-optimized.cl index d98dbff79..a11165b08 100644 --- a/OpenCL/m06900_a1-optimized.cl +++ b/OpenCL/m06900_a1-optimized.cl @@ -696,7 +696,7 @@ CONSTANT_VK u32a c_tables[4][256] = R (k, h, s, 6, t); \ } -KERNEL_FQ void m06900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06900_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -958,15 +958,15 @@ KERNEL_FQ void m06900_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m06900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06900_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m06900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06900_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m06900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06900_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1240,10 +1240,10 @@ KERNEL_FQ void m06900_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m06900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06900_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m06900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06900_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m06900_a3-optimized.cl b/OpenCL/m06900_a3-optimized.cl index 1cb46e6ea..a6d8bd40b 100644 --- a/OpenCL/m06900_a3-optimized.cl +++ b/OpenCL/m06900_a3-optimized.cl @@ -1050,7 +1050,7 @@ DECLSPEC void m06900s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m06900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06900_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -1119,7 +1119,7 @@ KERNEL_FQ void m06900_m04 (KERN_ATTR_BASIC ()) m06900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_tables); } -KERNEL_FQ void m06900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06900_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -1188,11 +1188,11 @@ KERNEL_FQ void m06900_m08 (KERN_ATTR_BASIC ()) m06900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_tables); } -KERNEL_FQ void m06900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06900_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m06900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06900_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1261,7 +1261,7 @@ KERNEL_FQ void m06900_s04 (KERN_ATTR_BASIC ()) m06900s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_tables); } -KERNEL_FQ void m06900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06900_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1330,6 +1330,6 @@ KERNEL_FQ void m06900_s08 (KERN_ATTR_BASIC ()) m06900s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_tables); } -KERNEL_FQ void m06900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m06900_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m07000_a0-optimized.cl b/OpenCL/m07000_a0-optimized.cl index 4671bdeb9..8f17f8b82 100644 --- a/OpenCL/m07000_a0-optimized.cl +++ b/OpenCL/m07000_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m07000_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07000_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -270,15 +270,15 @@ KERNEL_FQ void m07000_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m07000_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07000_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m07000_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07000_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m07000_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07000_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -553,10 +553,10 @@ KERNEL_FQ void m07000_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m07000_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07000_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m07000_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07000_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m07000_a0-pure.cl b/OpenCL/m07000_a0-pure.cl index f5e083df7..9452785d1 100644 --- a/OpenCL/m07000_a0-pure.cl +++ b/OpenCL/m07000_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m07000_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07000_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -92,7 +92,7 @@ KERNEL_FQ void m07000_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m07000_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07000_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m07000_a1-optimized.cl b/OpenCL/m07000_a1-optimized.cl index 0e7408918..bb72c01a0 100644 --- a/OpenCL/m07000_a1-optimized.cl +++ b/OpenCL/m07000_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m07000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07000_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -328,15 +328,15 @@ KERNEL_FQ void m07000_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m07000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07000_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m07000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07000_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m07000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07000_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -671,10 +671,10 @@ KERNEL_FQ void m07000_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m07000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07000_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m07000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07000_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m07000_a1-pure.cl b/OpenCL/m07000_a1-pure.cl index 5d4440654..50ce56e29 100644 --- a/OpenCL/m07000_a1-pure.cl +++ b/OpenCL/m07000_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m07000_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07000_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -86,7 +86,7 @@ KERNEL_FQ void m07000_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m07000_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07000_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m07000_a3-optimized.cl b/OpenCL/m07000_a3-optimized.cl index 83bda1931..3d5478366 100644 --- a/OpenCL/m07000_a3-optimized.cl +++ b/OpenCL/m07000_a3-optimized.cl @@ -563,7 +563,7 @@ DECLSPEC void m07000s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m07000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07000_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -616,7 +616,7 @@ KERNEL_FQ void m07000_m04 (KERN_ATTR_BASIC ()) m07000m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m07000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07000_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -669,7 +669,7 @@ KERNEL_FQ void m07000_m08 (KERN_ATTR_BASIC ()) m07000m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m07000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07000_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -722,7 +722,7 @@ KERNEL_FQ void m07000_m16 (KERN_ATTR_BASIC ()) m07000m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m07000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07000_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -775,7 +775,7 @@ KERNEL_FQ void m07000_s04 (KERN_ATTR_BASIC ()) m07000s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m07000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07000_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -828,7 +828,7 @@ KERNEL_FQ void m07000_s08 (KERN_ATTR_BASIC ()) m07000s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m07000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07000_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m07000_a3-pure.cl b/OpenCL/m07000_a3-pure.cl index f7ac81883..08b6a9691 100644 --- a/OpenCL/m07000_a3-pure.cl +++ b/OpenCL/m07000_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m07000_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m07000_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -103,7 +103,7 @@ KERNEL_FQ void m07000_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m07000_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m07000_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m07100-pure.cl b/OpenCL/m07100-pure.cl index 55dcdb066..12809b0e1 100644 --- a/OpenCL/m07100-pure.cl +++ b/OpenCL/m07100-pure.cl @@ -91,7 +91,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void m07100_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, pbkdf2_sha512_t)) +KERNEL_FQ void HC_ATTR_SEQ m07100_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, pbkdf2_sha512_t)) { /** * base @@ -195,7 +195,7 @@ KERNEL_FQ void m07100_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, pbkdf2_sh } } -KERNEL_FQ void m07100_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, pbkdf2_sha512_t)) +KERNEL_FQ void HC_ATTR_SEQ m07100_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, pbkdf2_sha512_t)) { const u64 gid = get_global_id (0); @@ -321,7 +321,7 @@ KERNEL_FQ void m07100_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, pbkdf2_sh } } -KERNEL_FQ void m07100_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, pbkdf2_sha512_t)) +KERNEL_FQ void HC_ATTR_SEQ m07100_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, pbkdf2_sha512_t)) { /** * base diff --git a/OpenCL/m07300_a0-optimized.cl b/OpenCL/m07300_a0-optimized.cl index 0cda75ede..8f27d7daf 100644 --- a/OpenCL/m07300_a0-optimized.cl +++ b/OpenCL/m07300_a0-optimized.cl @@ -112,7 +112,7 @@ DECLSPEC void hmac_sha1_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_A sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m07300_m04 (KERN_ATTR_RULES_ESALT (rakp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07300_m04 (KERN_ATTR_RULES_ESALT (rakp_t)) { /** * modifier @@ -240,15 +240,15 @@ KERNEL_FQ void m07300_m04 (KERN_ATTR_RULES_ESALT (rakp_t)) } } -KERNEL_FQ void m07300_m08 (KERN_ATTR_RULES_ESALT (rakp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07300_m08 (KERN_ATTR_RULES_ESALT (rakp_t)) { } -KERNEL_FQ void m07300_m16 (KERN_ATTR_RULES_ESALT (rakp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07300_m16 (KERN_ATTR_RULES_ESALT (rakp_t)) { } -KERNEL_FQ void m07300_s04 (KERN_ATTR_RULES_ESALT (rakp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07300_s04 (KERN_ATTR_RULES_ESALT (rakp_t)) { /** * modifier @@ -388,10 +388,10 @@ KERNEL_FQ void m07300_s04 (KERN_ATTR_RULES_ESALT (rakp_t)) } } -KERNEL_FQ void m07300_s08 (KERN_ATTR_RULES_ESALT (rakp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07300_s08 (KERN_ATTR_RULES_ESALT (rakp_t)) { } -KERNEL_FQ void m07300_s16 (KERN_ATTR_RULES_ESALT (rakp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07300_s16 (KERN_ATTR_RULES_ESALT (rakp_t)) { } diff --git a/OpenCL/m07300_a0-pure.cl b/OpenCL/m07300_a0-pure.cl index 3bef46d34..ba91d436c 100644 --- a/OpenCL/m07300_a0-pure.cl +++ b/OpenCL/m07300_a0-pure.cl @@ -23,7 +23,7 @@ typedef struct rakp } rakp_t; -KERNEL_FQ void m07300_mxx (KERN_ATTR_RULES_ESALT (rakp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07300_mxx (KERN_ATTR_RULES_ESALT (rakp_t)) { /** * modifier @@ -67,7 +67,7 @@ KERNEL_FQ void m07300_mxx (KERN_ATTR_RULES_ESALT (rakp_t)) } } -KERNEL_FQ void m07300_sxx (KERN_ATTR_RULES_ESALT (rakp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07300_sxx (KERN_ATTR_RULES_ESALT (rakp_t)) { /** * modifier diff --git a/OpenCL/m07300_a1-optimized.cl b/OpenCL/m07300_a1-optimized.cl index fc2d6ff8a..89fd5dce9 100644 --- a/OpenCL/m07300_a1-optimized.cl +++ b/OpenCL/m07300_a1-optimized.cl @@ -110,7 +110,7 @@ DECLSPEC void hmac_sha1_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_A sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m07300_m04 (KERN_ATTR_ESALT (rakp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07300_m04 (KERN_ATTR_ESALT (rakp_t)) { /** * modifier @@ -306,15 +306,15 @@ KERNEL_FQ void m07300_m04 (KERN_ATTR_ESALT (rakp_t)) } } -KERNEL_FQ void m07300_m08 (KERN_ATTR_ESALT (rakp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07300_m08 (KERN_ATTR_ESALT (rakp_t)) { } -KERNEL_FQ void m07300_m16 (KERN_ATTR_ESALT (rakp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07300_m16 (KERN_ATTR_ESALT (rakp_t)) { } -KERNEL_FQ void m07300_s04 (KERN_ATTR_ESALT (rakp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07300_s04 (KERN_ATTR_ESALT (rakp_t)) { /** * modifier @@ -522,10 +522,10 @@ KERNEL_FQ void m07300_s04 (KERN_ATTR_ESALT (rakp_t)) } } -KERNEL_FQ void m07300_s08 (KERN_ATTR_ESALT (rakp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07300_s08 (KERN_ATTR_ESALT (rakp_t)) { } -KERNEL_FQ void m07300_s16 (KERN_ATTR_ESALT (rakp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07300_s16 (KERN_ATTR_ESALT (rakp_t)) { } diff --git a/OpenCL/m07300_a1-pure.cl b/OpenCL/m07300_a1-pure.cl index 12016889c..7da3ef9fd 100644 --- a/OpenCL/m07300_a1-pure.cl +++ b/OpenCL/m07300_a1-pure.cl @@ -21,7 +21,7 @@ typedef struct rakp } rakp_t; -KERNEL_FQ void m07300_mxx (KERN_ATTR_ESALT (rakp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07300_mxx (KERN_ATTR_ESALT (rakp_t)) { /** * modifier @@ -90,7 +90,7 @@ KERNEL_FQ void m07300_mxx (KERN_ATTR_ESALT (rakp_t)) } } -KERNEL_FQ void m07300_sxx (KERN_ATTR_ESALT (rakp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07300_sxx (KERN_ATTR_ESALT (rakp_t)) { /** * modifier diff --git a/OpenCL/m07300_a3-optimized.cl b/OpenCL/m07300_a3-optimized.cl index e14dcd72b..61ae658bd 100644 --- a/OpenCL/m07300_a3-optimized.cl +++ b/OpenCL/m07300_a3-optimized.cl @@ -336,7 +336,7 @@ DECLSPEC void m07300s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m07300_m04 (KERN_ATTR_ESALT (rakp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07300_m04 (KERN_ATTR_ESALT (rakp_t)) { /** * modifier @@ -402,7 +402,7 @@ KERNEL_FQ void m07300_m04 (KERN_ATTR_ESALT (rakp_t)) m07300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_esalt_buf); } -KERNEL_FQ void m07300_m08 (KERN_ATTR_ESALT (rakp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07300_m08 (KERN_ATTR_ESALT (rakp_t)) { /** * modifiers are taken from args @@ -468,7 +468,7 @@ KERNEL_FQ void m07300_m08 (KERN_ATTR_ESALT (rakp_t)) m07300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_esalt_buf); } -KERNEL_FQ void m07300_m16 (KERN_ATTR_ESALT (rakp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07300_m16 (KERN_ATTR_ESALT (rakp_t)) { /** * modifiers are taken from args @@ -534,7 +534,7 @@ KERNEL_FQ void m07300_m16 (KERN_ATTR_ESALT (rakp_t)) m07300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_esalt_buf); } -KERNEL_FQ void m07300_s04 (KERN_ATTR_ESALT (rakp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07300_s04 (KERN_ATTR_ESALT (rakp_t)) { /** * modifier @@ -600,7 +600,7 @@ KERNEL_FQ void m07300_s04 (KERN_ATTR_ESALT (rakp_t)) m07300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_esalt_buf); } -KERNEL_FQ void m07300_s08 (KERN_ATTR_ESALT (rakp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07300_s08 (KERN_ATTR_ESALT (rakp_t)) { /** * modifier @@ -666,7 +666,7 @@ KERNEL_FQ void m07300_s08 (KERN_ATTR_ESALT (rakp_t)) m07300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_esalt_buf); } -KERNEL_FQ void m07300_s16 (KERN_ATTR_ESALT (rakp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07300_s16 (KERN_ATTR_ESALT (rakp_t)) { /** * modifier diff --git a/OpenCL/m07300_a3-pure.cl b/OpenCL/m07300_a3-pure.cl index d969ed0f6..febe3d5dc 100644 --- a/OpenCL/m07300_a3-pure.cl +++ b/OpenCL/m07300_a3-pure.cl @@ -21,7 +21,7 @@ typedef struct rakp } rakp_t; -KERNEL_FQ void m07300_mxx (KERN_ATTR_VECTOR_ESALT (rakp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07300_mxx (KERN_ATTR_VECTOR_ESALT (rakp_t)) { /** * modifier @@ -76,7 +76,7 @@ KERNEL_FQ void m07300_mxx (KERN_ATTR_VECTOR_ESALT (rakp_t)) } } -KERNEL_FQ void m07300_sxx (KERN_ATTR_VECTOR_ESALT (rakp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07300_sxx (KERN_ATTR_VECTOR_ESALT (rakp_t)) { /** * modifier diff --git a/OpenCL/m07350_a0-optimized.cl b/OpenCL/m07350_a0-optimized.cl index 89b557b32..65603445d 100644 --- a/OpenCL/m07350_a0-optimized.cl +++ b/OpenCL/m07350_a0-optimized.cl @@ -74,7 +74,7 @@ DECLSPEC void hmac_md5_pad (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_AS md5_transform_vector (w0, w1, w2, w3, opad); } -KERNEL_FQ void m07350_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07350_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -221,15 +221,15 @@ KERNEL_FQ void m07350_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m07350_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07350_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m07350_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07350_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m07350_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07350_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -388,10 +388,10 @@ KERNEL_FQ void m07350_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m07350_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07350_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m07350_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07350_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m07350_a0-pure.cl b/OpenCL/m07350_a0-pure.cl index 6d1cac651..e3ae9af31 100644 --- a/OpenCL/m07350_a0-pure.cl +++ b/OpenCL/m07350_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m07350_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07350_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void m07350_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m07350_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07350_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m07350_a1-optimized.cl b/OpenCL/m07350_a1-optimized.cl index 058b6411d..a04605542 100644 --- a/OpenCL/m07350_a1-optimized.cl +++ b/OpenCL/m07350_a1-optimized.cl @@ -101,7 +101,7 @@ DECLSPEC void hmac_md5_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_AS } */ -KERNEL_FQ void m07350_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07350_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -358,15 +358,15 @@ KERNEL_FQ void m07350_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m07350_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07350_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m07350_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07350_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m07350_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07350_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -635,10 +635,10 @@ KERNEL_FQ void m07350_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m07350_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07350_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m07350_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07350_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m07350_a1-pure.cl b/OpenCL/m07350_a1-pure.cl index 09b774141..5eb139744 100644 --- a/OpenCL/m07350_a1-pure.cl +++ b/OpenCL/m07350_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m07350_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07350_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -92,7 +92,7 @@ KERNEL_FQ void m07350_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m07350_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07350_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m07350_a3-optimized.cl b/OpenCL/m07350_a3-optimized.cl index 79dde06d5..f6341671c 100644 --- a/OpenCL/m07350_a3-optimized.cl +++ b/OpenCL/m07350_a3-optimized.cl @@ -365,7 +365,7 @@ DECLSPEC void m07350s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m07350_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07350_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -414,7 +414,7 @@ KERNEL_FQ void m07350_m04 (KERN_ATTR_BASIC ()) m07350m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m07350_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07350_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -463,7 +463,7 @@ KERNEL_FQ void m07350_m08 (KERN_ATTR_BASIC ()) m07350m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m07350_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07350_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -512,7 +512,7 @@ KERNEL_FQ void m07350_m16 (KERN_ATTR_BASIC ()) m07350m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m07350_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07350_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -561,7 +561,7 @@ KERNEL_FQ void m07350_s04 (KERN_ATTR_BASIC ()) m07350s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m07350_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07350_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -610,7 +610,7 @@ KERNEL_FQ void m07350_s08 (KERN_ATTR_BASIC ()) m07350s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m07350_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07350_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m07350_a3-pure.cl b/OpenCL/m07350_a3-pure.cl index 908bd51e2..2826384a0 100644 --- a/OpenCL/m07350_a3-pure.cl +++ b/OpenCL/m07350_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m07350_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m07350_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -78,7 +78,7 @@ KERNEL_FQ void m07350_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m07350_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m07350_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m07400-optimized.cl b/OpenCL/m07400-optimized.cl index 0615d5414..aa2e3e9ed 100644 --- a/OpenCL/m07400-optimized.cl +++ b/OpenCL/m07400-optimized.cl @@ -1178,7 +1178,7 @@ DECLSPEC u32 memcat24 (PRIVATE_AS u32 *block, const u32 offset, PRIVATE_AS const return offset + append_len; } -KERNEL_FQ void m07400_init (KERN_ATTR_TMPS (sha256crypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07400_init (KERN_ATTR_TMPS (sha256crypt_tmp_t)) { /** * base @@ -1526,7 +1526,7 @@ KERNEL_FQ void m07400_init (KERN_ATTR_TMPS (sha256crypt_tmp_t)) tmps[gid].s_bytes[4] = s_bytes[4]; } -KERNEL_FQ void m07400_loop (KERN_ATTR_TMPS (sha256crypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07400_loop (KERN_ATTR_TMPS (sha256crypt_tmp_t)) { /** * base @@ -1737,7 +1737,7 @@ KERNEL_FQ void m07400_loop (KERN_ATTR_TMPS (sha256crypt_tmp_t)) tmps[gid].alt_result[7] = alt_result[7]; } -KERNEL_FQ void m07400_comp (KERN_ATTR_TMPS (sha256crypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07400_comp (KERN_ATTR_TMPS (sha256crypt_tmp_t)) { /** * base diff --git a/OpenCL/m07400-pure.cl b/OpenCL/m07400-pure.cl index d17aafd9f..1190b1583 100644 --- a/OpenCL/m07400-pure.cl +++ b/OpenCL/m07400-pure.cl @@ -24,7 +24,7 @@ typedef struct sha256crypt_tmp } sha256crypt_tmp_t; -KERNEL_FQ void m07400_init (KERN_ATTR_TMPS (sha256crypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07400_init (KERN_ATTR_TMPS (sha256crypt_tmp_t)) { /** * base @@ -261,7 +261,7 @@ KERNEL_FQ void m07400_init (KERN_ATTR_TMPS (sha256crypt_tmp_t)) for (int i = 0; i < 64; i++) tmps[gid].s_bytes[i] = s_final[i]; } -KERNEL_FQ void m07400_loop (KERN_ATTR_TMPS (sha256crypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07400_loop (KERN_ATTR_TMPS (sha256crypt_tmp_t)) { /** * base @@ -345,7 +345,7 @@ KERNEL_FQ void m07400_loop (KERN_ATTR_TMPS (sha256crypt_tmp_t)) tmps[gid].alt_result[7] = alt_result[7]; } -KERNEL_FQ void m07400_comp (KERN_ATTR_TMPS (sha256crypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07400_comp (KERN_ATTR_TMPS (sha256crypt_tmp_t)) { /** * base diff --git a/OpenCL/m07500_a0-optimized.cl b/OpenCL/m07500_a0-optimized.cl index 2036dd882..349e221df 100644 --- a/OpenCL/m07500_a0-optimized.cl +++ b/OpenCL/m07500_a0-optimized.cl @@ -273,7 +273,7 @@ DECLSPEC void kerb_prepare (PRIVATE_AS const u32 *w0, PRIVATE_AS const u32 *w1, hmac_md5_run (w0_t, w1_t, w2_t, w3_t, ipad, opad, digest); } -KERNEL_FQ void m07500_m04 (KERN_ATTR_RULES_ESALT (krb5pa_t)) +KERNEL_FQ void HC_ATTR_SEQ m07500_m04 (KERN_ATTR_RULES_ESALT (krb5pa_t)) { /** * modifier @@ -369,15 +369,15 @@ KERNEL_FQ void m07500_m04 (KERN_ATTR_RULES_ESALT (krb5pa_t)) } } -KERNEL_FQ void m07500_m08 (KERN_ATTR_RULES_ESALT (krb5pa_t)) +KERNEL_FQ void HC_ATTR_SEQ m07500_m08 (KERN_ATTR_RULES_ESALT (krb5pa_t)) { } -KERNEL_FQ void m07500_m16 (KERN_ATTR_RULES_ESALT (krb5pa_t)) +KERNEL_FQ void HC_ATTR_SEQ m07500_m16 (KERN_ATTR_RULES_ESALT (krb5pa_t)) { } -KERNEL_FQ void m07500_s04 (KERN_ATTR_RULES_ESALT (krb5pa_t)) +KERNEL_FQ void HC_ATTR_SEQ m07500_s04 (KERN_ATTR_RULES_ESALT (krb5pa_t)) { /** * modifier @@ -473,10 +473,10 @@ KERNEL_FQ void m07500_s04 (KERN_ATTR_RULES_ESALT (krb5pa_t)) } } -KERNEL_FQ void m07500_s08 (KERN_ATTR_RULES_ESALT (krb5pa_t)) +KERNEL_FQ void HC_ATTR_SEQ m07500_s08 (KERN_ATTR_RULES_ESALT (krb5pa_t)) { } -KERNEL_FQ void m07500_s16 (KERN_ATTR_RULES_ESALT (krb5pa_t)) +KERNEL_FQ void HC_ATTR_SEQ m07500_s16 (KERN_ATTR_RULES_ESALT (krb5pa_t)) { } diff --git a/OpenCL/m07500_a0-pure.cl b/OpenCL/m07500_a0-pure.cl index 3799e2f30..d31b69935 100644 --- a/OpenCL/m07500_a0-pure.cl +++ b/OpenCL/m07500_a0-pure.cl @@ -157,7 +157,7 @@ DECLSPEC void kerb_prepare (PRIVATE_AS const u32 *K, PRIVATE_AS const u32 *check digest[3] = ctx.opad.h[3]; } -KERNEL_FQ void m07500_mxx (KERN_ATTR_RULES_ESALT (krb5pa_t)) +KERNEL_FQ void HC_ATTR_SEQ m07500_mxx (KERN_ATTR_RULES_ESALT (krb5pa_t)) { /** * modifier @@ -226,7 +226,7 @@ KERNEL_FQ void m07500_mxx (KERN_ATTR_RULES_ESALT (krb5pa_t)) } } -KERNEL_FQ void m07500_sxx (KERN_ATTR_RULES_ESALT (krb5pa_t)) +KERNEL_FQ void HC_ATTR_SEQ m07500_sxx (KERN_ATTR_RULES_ESALT (krb5pa_t)) { /** * modifier diff --git a/OpenCL/m07500_a1-optimized.cl b/OpenCL/m07500_a1-optimized.cl index 89935c890..0918d2f2b 100644 --- a/OpenCL/m07500_a1-optimized.cl +++ b/OpenCL/m07500_a1-optimized.cl @@ -271,7 +271,7 @@ DECLSPEC void kerb_prepare (PRIVATE_AS const u32 *w0, PRIVATE_AS const u32 *w1, hmac_md5_run (w0_t, w1_t, w2_t, w3_t, ipad, opad, digest); } -KERNEL_FQ void m07500_m04 (KERN_ATTR_ESALT (krb5pa_t)) +KERNEL_FQ void HC_ATTR_SEQ m07500_m04 (KERN_ATTR_ESALT (krb5pa_t)) { /** * modifier @@ -417,15 +417,15 @@ KERNEL_FQ void m07500_m04 (KERN_ATTR_ESALT (krb5pa_t)) } } -KERNEL_FQ void m07500_m08 (KERN_ATTR_ESALT (krb5pa_t)) +KERNEL_FQ void HC_ATTR_SEQ m07500_m08 (KERN_ATTR_ESALT (krb5pa_t)) { } -KERNEL_FQ void m07500_m16 (KERN_ATTR_ESALT (krb5pa_t)) +KERNEL_FQ void HC_ATTR_SEQ m07500_m16 (KERN_ATTR_ESALT (krb5pa_t)) { } -KERNEL_FQ void m07500_s04 (KERN_ATTR_ESALT (krb5pa_t)) +KERNEL_FQ void HC_ATTR_SEQ m07500_s04 (KERN_ATTR_ESALT (krb5pa_t)) { /** * modifier @@ -571,10 +571,10 @@ KERNEL_FQ void m07500_s04 (KERN_ATTR_ESALT (krb5pa_t)) } } -KERNEL_FQ void m07500_s08 (KERN_ATTR_ESALT (krb5pa_t)) +KERNEL_FQ void HC_ATTR_SEQ m07500_s08 (KERN_ATTR_ESALT (krb5pa_t)) { } -KERNEL_FQ void m07500_s16 (KERN_ATTR_ESALT (krb5pa_t)) +KERNEL_FQ void HC_ATTR_SEQ m07500_s16 (KERN_ATTR_ESALT (krb5pa_t)) { } diff --git a/OpenCL/m07500_a1-pure.cl b/OpenCL/m07500_a1-pure.cl index 125757b26..21c092249 100644 --- a/OpenCL/m07500_a1-pure.cl +++ b/OpenCL/m07500_a1-pure.cl @@ -155,7 +155,7 @@ DECLSPEC void kerb_prepare (PRIVATE_AS const u32 *K, PRIVATE_AS const u32 *check digest[3] = ctx.opad.h[3]; } -KERNEL_FQ void m07500_mxx (KERN_ATTR_ESALT (krb5pa_t)) +KERNEL_FQ void HC_ATTR_SEQ m07500_mxx (KERN_ATTR_ESALT (krb5pa_t)) { /** * modifier @@ -222,7 +222,7 @@ KERNEL_FQ void m07500_mxx (KERN_ATTR_ESALT (krb5pa_t)) } } -KERNEL_FQ void m07500_sxx (KERN_ATTR_ESALT (krb5pa_t)) +KERNEL_FQ void HC_ATTR_SEQ m07500_sxx (KERN_ATTR_ESALT (krb5pa_t)) { /** * modifier diff --git a/OpenCL/m07500_a3-optimized.cl b/OpenCL/m07500_a3-optimized.cl index c85d2d728..b379bad6b 100644 --- a/OpenCL/m07500_a3-optimized.cl +++ b/OpenCL/m07500_a3-optimized.cl @@ -358,7 +358,7 @@ DECLSPEC void m07500 (LOCAL_AS u32 *S, PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, P } } -KERNEL_FQ void m07500_m04 (KERN_ATTR_ESALT (krb5pa_t)) +KERNEL_FQ void HC_ATTR_SEQ m07500_m04 (KERN_ATTR_ESALT (krb5pa_t)) { /** * base @@ -409,7 +409,7 @@ KERNEL_FQ void m07500_m04 (KERN_ATTR_ESALT (krb5pa_t)) m07500 (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m07500_m08 (KERN_ATTR_ESALT (krb5pa_t)) +KERNEL_FQ void HC_ATTR_SEQ m07500_m08 (KERN_ATTR_ESALT (krb5pa_t)) { /** * base @@ -460,11 +460,11 @@ KERNEL_FQ void m07500_m08 (KERN_ATTR_ESALT (krb5pa_t)) m07500 (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m07500_m16 (KERN_ATTR_ESALT (krb5pa_t)) +KERNEL_FQ void HC_ATTR_SEQ m07500_m16 (KERN_ATTR_ESALT (krb5pa_t)) { } -KERNEL_FQ void m07500_s04 (KERN_ATTR_ESALT (krb5pa_t)) +KERNEL_FQ void HC_ATTR_SEQ m07500_s04 (KERN_ATTR_ESALT (krb5pa_t)) { /** * base @@ -515,7 +515,7 @@ KERNEL_FQ void m07500_s04 (KERN_ATTR_ESALT (krb5pa_t)) m07500 (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m07500_s08 (KERN_ATTR_ESALT (krb5pa_t)) +KERNEL_FQ void HC_ATTR_SEQ m07500_s08 (KERN_ATTR_ESALT (krb5pa_t)) { /** * base @@ -566,6 +566,6 @@ KERNEL_FQ void m07500_s08 (KERN_ATTR_ESALT (krb5pa_t)) m07500 (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m07500_s16 (KERN_ATTR_ESALT (krb5pa_t)) +KERNEL_FQ void HC_ATTR_SEQ m07500_s16 (KERN_ATTR_ESALT (krb5pa_t)) { } diff --git a/OpenCL/m07500_a3-pure.cl b/OpenCL/m07500_a3-pure.cl index 0191426da..66a05f744 100644 --- a/OpenCL/m07500_a3-pure.cl +++ b/OpenCL/m07500_a3-pure.cl @@ -155,7 +155,7 @@ DECLSPEC void kerb_prepare (PRIVATE_AS const u32 *K, PRIVATE_AS const u32 *check digest[3] = ctx.opad.h[3]; } -KERNEL_FQ void m07500_mxx (KERN_ATTR_VECTOR_ESALT (krb5pa_t)) +KERNEL_FQ void HC_ATTR_SEQ m07500_mxx (KERN_ATTR_VECTOR_ESALT (krb5pa_t)) { /** * modifier @@ -247,7 +247,7 @@ KERNEL_FQ void m07500_mxx (KERN_ATTR_VECTOR_ESALT (krb5pa_t)) } } -KERNEL_FQ void m07500_sxx (KERN_ATTR_VECTOR_ESALT (krb5pa_t)) +KERNEL_FQ void HC_ATTR_SEQ m07500_sxx (KERN_ATTR_VECTOR_ESALT (krb5pa_t)) { /** * modifier diff --git a/OpenCL/m07700_a0-optimized.cl b/OpenCL/m07700_a0-optimized.cl index 9d6f7a018..b77b61ff3 100644 --- a/OpenCL/m07700_a0-optimized.cl +++ b/OpenCL/m07700_a0-optimized.cl @@ -155,7 +155,7 @@ DECLSPEC u32 walld0rf_magic (PRIVATE_AS const u32 *w0, const u32 pw_len, PRIVATE return sum20; } -KERNEL_FQ void m07700_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07700_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -311,15 +311,15 @@ KERNEL_FQ void m07700_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m07700_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07700_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m07700_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07700_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m07700_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07700_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -487,10 +487,10 @@ KERNEL_FQ void m07700_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m07700_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07700_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m07700_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07700_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m07700_a1-optimized.cl b/OpenCL/m07700_a1-optimized.cl index 581d4e236..d8261c789 100644 --- a/OpenCL/m07700_a1-optimized.cl +++ b/OpenCL/m07700_a1-optimized.cl @@ -146,7 +146,7 @@ DECLSPEC u32 walld0rf_magic (PRIVATE_AS const u32 *w0, const u32 pw_len, PRIVATE return sum20; } -KERNEL_FQ void m07700_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07700_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -345,15 +345,15 @@ KERNEL_FQ void m07700_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m07700_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07700_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m07700_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07700_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m07700_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07700_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -564,10 +564,10 @@ KERNEL_FQ void m07700_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m07700_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07700_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m07700_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07700_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m07700_a3-optimized.cl b/OpenCL/m07700_a3-optimized.cl index 6af310aca..374df50d2 100644 --- a/OpenCL/m07700_a3-optimized.cl +++ b/OpenCL/m07700_a3-optimized.cl @@ -393,7 +393,7 @@ DECLSPEC void m07700s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m07700_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07700_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -446,7 +446,7 @@ KERNEL_FQ void m07700_m04 (KERN_ATTR_BASIC ()) m07700m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m07700_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07700_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -499,11 +499,11 @@ KERNEL_FQ void m07700_m08 (KERN_ATTR_BASIC ()) m07700m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m07700_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07700_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m07700_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07700_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -556,7 +556,7 @@ KERNEL_FQ void m07700_s04 (KERN_ATTR_BASIC ()) m07700s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m07700_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07700_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -609,6 +609,6 @@ KERNEL_FQ void m07700_s08 (KERN_ATTR_BASIC ()) m07700s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m07700_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07700_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m07701_a0-optimized.cl b/OpenCL/m07701_a0-optimized.cl index f673fbba4..1ca796ce0 100644 --- a/OpenCL/m07701_a0-optimized.cl +++ b/OpenCL/m07701_a0-optimized.cl @@ -148,7 +148,7 @@ DECLSPEC u32 walld0rf_magic (PRIVATE_AS const u32 *w0, const u32 pw_len, PRIVATE return sum20; } -KERNEL_FQ void m07701_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07701_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -304,15 +304,15 @@ KERNEL_FQ void m07701_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m07701_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07701_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m07701_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07701_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m07701_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07701_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -480,10 +480,10 @@ KERNEL_FQ void m07701_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m07701_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07701_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m07701_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07701_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m07701_a1-optimized.cl b/OpenCL/m07701_a1-optimized.cl index e3727fe13..a909609a1 100644 --- a/OpenCL/m07701_a1-optimized.cl +++ b/OpenCL/m07701_a1-optimized.cl @@ -146,7 +146,7 @@ DECLSPEC u32 walld0rf_magic (PRIVATE_AS const u32 *w0, const u32 pw_len, PRIVATE return sum20; } -KERNEL_FQ void m07701_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07701_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -345,15 +345,15 @@ KERNEL_FQ void m07701_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m07701_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07701_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m07701_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07701_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m07701_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07701_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -564,10 +564,10 @@ KERNEL_FQ void m07701_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m07701_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07701_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m07701_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07701_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m07701_a3-optimized.cl b/OpenCL/m07701_a3-optimized.cl index 3ee03e9a3..7eca44110 100644 --- a/OpenCL/m07701_a3-optimized.cl +++ b/OpenCL/m07701_a3-optimized.cl @@ -393,7 +393,7 @@ DECLSPEC void m07701s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m07701_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07701_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -446,7 +446,7 @@ KERNEL_FQ void m07701_m04 (KERN_ATTR_BASIC ()) m07701m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m07701_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07701_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -499,11 +499,11 @@ KERNEL_FQ void m07701_m08 (KERN_ATTR_BASIC ()) m07701m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m07701_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07701_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m07701_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07701_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -556,7 +556,7 @@ KERNEL_FQ void m07701_s04 (KERN_ATTR_BASIC ()) m07701s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m07701_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07701_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -609,6 +609,6 @@ KERNEL_FQ void m07701_s08 (KERN_ATTR_BASIC ()) m07701s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m07701_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07701_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m07800_a0-optimized.cl b/OpenCL/m07800_a0-optimized.cl index 6344453a2..e67f774f0 100644 --- a/OpenCL/m07800_a0-optimized.cl +++ b/OpenCL/m07800_a0-optimized.cl @@ -54,7 +54,7 @@ DECLSPEC void SETSHIFTEDINT (PRIVATE_AS u32 *a, const int n, const u32 v) a[d + 1] = l32_from_64_S (tmp); } -KERNEL_FQ void m07800_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07800_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -298,15 +298,15 @@ KERNEL_FQ void m07800_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m07800_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07800_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m07800_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07800_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m07800_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07800_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -562,10 +562,10 @@ KERNEL_FQ void m07800_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m07800_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07800_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m07800_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07800_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m07800_a1-optimized.cl b/OpenCL/m07800_a1-optimized.cl index 79564d7e5..765835f07 100644 --- a/OpenCL/m07800_a1-optimized.cl +++ b/OpenCL/m07800_a1-optimized.cl @@ -52,7 +52,7 @@ DECLSPEC void SETSHIFTEDINT (PRIVATE_AS u32 *a, const int n, const u32 v) a[d + 1] = l32_from_64_S (tmp); } -KERNEL_FQ void m07800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07800_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -356,15 +356,15 @@ KERNEL_FQ void m07800_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m07800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07800_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m07800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07800_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m07800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07800_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -680,10 +680,10 @@ KERNEL_FQ void m07800_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m07800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07800_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m07800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07800_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m07800_a3-optimized.cl b/OpenCL/m07800_a3-optimized.cl index 7ff3ec75a..ce7135caf 100644 --- a/OpenCL/m07800_a3-optimized.cl +++ b/OpenCL/m07800_a3-optimized.cl @@ -498,7 +498,7 @@ DECLSPEC void m07800s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m07800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07800_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -553,7 +553,7 @@ KERNEL_FQ void m07800_m04 (KERN_ATTR_BASIC ()) m07800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m07800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07800_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -608,11 +608,11 @@ KERNEL_FQ void m07800_m08 (KERN_ATTR_BASIC ()) m07800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m07800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07800_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m07800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07800_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -667,7 +667,7 @@ KERNEL_FQ void m07800_s04 (KERN_ATTR_BASIC ()) m07800s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m07800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07800_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -722,6 +722,6 @@ KERNEL_FQ void m07800_s08 (KERN_ATTR_BASIC ()) m07800s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m07800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07800_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m07801_a0-optimized.cl b/OpenCL/m07801_a0-optimized.cl index d9033a704..4dc1a15d8 100644 --- a/OpenCL/m07801_a0-optimized.cl +++ b/OpenCL/m07801_a0-optimized.cl @@ -54,7 +54,7 @@ DECLSPEC void SETSHIFTEDINT (PRIVATE_AS u32 *a, const int n, const u32 v) a[d + 1] = l32_from_64_S (tmp); } -KERNEL_FQ void m07801_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07801_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -298,15 +298,15 @@ KERNEL_FQ void m07801_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m07801_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07801_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m07801_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07801_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m07801_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07801_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -562,10 +562,10 @@ KERNEL_FQ void m07801_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m07801_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07801_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m07801_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m07801_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m07801_a1-optimized.cl b/OpenCL/m07801_a1-optimized.cl index f9479c906..b8b4738f3 100644 --- a/OpenCL/m07801_a1-optimized.cl +++ b/OpenCL/m07801_a1-optimized.cl @@ -52,7 +52,7 @@ DECLSPEC void SETSHIFTEDINT (PRIVATE_AS u32 *a, const int n, const u32 v) a[d + 1] = l32_from_64_S (tmp); } -KERNEL_FQ void m07801_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07801_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -356,15 +356,15 @@ KERNEL_FQ void m07801_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m07801_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07801_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m07801_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07801_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m07801_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07801_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -680,10 +680,10 @@ KERNEL_FQ void m07801_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m07801_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07801_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m07801_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07801_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m07801_a3-optimized.cl b/OpenCL/m07801_a3-optimized.cl index 169657aad..e760af4ae 100644 --- a/OpenCL/m07801_a3-optimized.cl +++ b/OpenCL/m07801_a3-optimized.cl @@ -498,7 +498,7 @@ DECLSPEC void m07801s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m07801_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07801_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -553,7 +553,7 @@ KERNEL_FQ void m07801_m04 (KERN_ATTR_BASIC ()) m07801m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m07801_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07801_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -608,11 +608,11 @@ KERNEL_FQ void m07801_m08 (KERN_ATTR_BASIC ()) m07801m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m07801_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07801_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m07801_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07801_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -667,7 +667,7 @@ KERNEL_FQ void m07801_s04 (KERN_ATTR_BASIC ()) m07801s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m07801_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07801_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -722,6 +722,6 @@ KERNEL_FQ void m07801_s08 (KERN_ATTR_BASIC ()) m07801s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m07801_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m07801_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m07900-pure.cl b/OpenCL/m07900-pure.cl index 9fdc23cbb..cfda6eade 100644 --- a/OpenCL/m07900-pure.cl +++ b/OpenCL/m07900-pure.cl @@ -20,7 +20,7 @@ typedef struct drupal7_tmp } drupal7_tmp_t; -KERNEL_FQ void m07900_init (KERN_ATTR_TMPS (drupal7_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07900_init (KERN_ATTR_TMPS (drupal7_tmp_t)) { /** * base @@ -50,7 +50,7 @@ KERNEL_FQ void m07900_init (KERN_ATTR_TMPS (drupal7_tmp_t)) tmps[gid].digest_buf[7] = ctx.h[7]; } -KERNEL_FQ void m07900_loop (KERN_ATTR_TMPS (drupal7_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07900_loop (KERN_ATTR_TMPS (drupal7_tmp_t)) { /** * base @@ -204,7 +204,7 @@ KERNEL_FQ void m07900_loop (KERN_ATTR_TMPS (drupal7_tmp_t)) tmps[gid].digest_buf[7] = digest[7]; } -KERNEL_FQ void m07900_comp (KERN_ATTR_TMPS (drupal7_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m07900_comp (KERN_ATTR_TMPS (drupal7_tmp_t)) { /** * modifier diff --git a/OpenCL/m08000_a0-optimized.cl b/OpenCL/m08000_a0-optimized.cl index 3a5348531..7697d08fb 100644 --- a/OpenCL/m08000_a0-optimized.cl +++ b/OpenCL/m08000_a0-optimized.cl @@ -218,7 +218,7 @@ DECLSPEC void sha256_transform_s (PRIVATE_AS u32x *digest, LOCAL_AS u32 *w) digest[7] += h; } -KERNEL_FQ void m08000_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08000_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -381,15 +381,15 @@ KERNEL_FQ void m08000_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m08000_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08000_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m08000_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08000_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m08000_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08000_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -564,10 +564,10 @@ KERNEL_FQ void m08000_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m08000_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08000_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m08000_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08000_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m08000_a1-optimized.cl b/OpenCL/m08000_a1-optimized.cl index 3565c5fc4..a957271fd 100644 --- a/OpenCL/m08000_a1-optimized.cl +++ b/OpenCL/m08000_a1-optimized.cl @@ -216,7 +216,7 @@ DECLSPEC void sha256_transform_s (PRIVATE_AS u32x *digest, LOCAL_AS u32 *w) digest[7] += h; } -KERNEL_FQ void m08000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08000_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -433,15 +433,15 @@ KERNEL_FQ void m08000_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m08000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08000_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m08000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08000_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m08000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08000_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -670,10 +670,10 @@ KERNEL_FQ void m08000_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m08000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08000_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m08000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08000_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m08000_a3-optimized.cl b/OpenCL/m08000_a3-optimized.cl index 2e13bd72b..ffe903b13 100644 --- a/OpenCL/m08000_a3-optimized.cl +++ b/OpenCL/m08000_a3-optimized.cl @@ -464,7 +464,7 @@ DECLSPEC void m08000s (LOCAL_AS u32 *w_s1, LOCAL_AS u32 *w_s2, PRIVATE_AS u32 *w } } -KERNEL_FQ void m08000_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m08000_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -505,7 +505,7 @@ KERNEL_FQ void m08000_m04 (KERN_ATTR_VECTOR ()) m08000m (w_s1, w_s2, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m08000_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m08000_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -546,7 +546,7 @@ KERNEL_FQ void m08000_m08 (KERN_ATTR_VECTOR ()) m08000m (w_s1, w_s2, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m08000_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m08000_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -587,7 +587,7 @@ KERNEL_FQ void m08000_m16 (KERN_ATTR_VECTOR ()) m08000m (w_s1, w_s2, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m08000_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m08000_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -628,7 +628,7 @@ KERNEL_FQ void m08000_s04 (KERN_ATTR_VECTOR ()) m08000s (w_s1, w_s2, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m08000_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m08000_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -669,7 +669,7 @@ KERNEL_FQ void m08000_s08 (KERN_ATTR_VECTOR ()) m08000s (w_s1, w_s2, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m08000_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m08000_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m08100_a0-optimized.cl b/OpenCL/m08100_a0-optimized.cl index cba059b94..20023eba1 100644 --- a/OpenCL/m08100_a0-optimized.cl +++ b/OpenCL/m08100_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m08100_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08100_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -220,15 +220,15 @@ KERNEL_FQ void m08100_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m08100_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08100_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m08100_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08100_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m08100_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08100_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -453,10 +453,10 @@ KERNEL_FQ void m08100_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m08100_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08100_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m08100_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08100_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m08100_a0-pure.cl b/OpenCL/m08100_a0-pure.cl index 63dd1561e..decc7b9fd 100644 --- a/OpenCL/m08100_a0-pure.cl +++ b/OpenCL/m08100_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m08100_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08100_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -68,7 +68,7 @@ KERNEL_FQ void m08100_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m08100_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08100_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m08100_a1-optimized.cl b/OpenCL/m08100_a1-optimized.cl index e1ffe5e15..eb4834215 100644 --- a/OpenCL/m08100_a1-optimized.cl +++ b/OpenCL/m08100_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m08100_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08100_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -289,15 +289,15 @@ KERNEL_FQ void m08100_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m08100_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08100_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m08100_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08100_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m08100_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08100_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -581,10 +581,10 @@ KERNEL_FQ void m08100_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m08100_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08100_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m08100_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08100_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m08100_a1-pure.cl b/OpenCL/m08100_a1-pure.cl index 8b46f1fa8..b2aa7c57d 100644 --- a/OpenCL/m08100_a1-pure.cl +++ b/OpenCL/m08100_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m08100_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08100_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -63,7 +63,7 @@ KERNEL_FQ void m08100_mxx (KERN_ATTR_BASIC ()) } -KERNEL_FQ void m08100_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08100_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m08100_a3-optimized.cl b/OpenCL/m08100_a3-optimized.cl index 5d2ebec01..e41b966fc 100644 --- a/OpenCL/m08100_a3-optimized.cl +++ b/OpenCL/m08100_a3-optimized.cl @@ -351,7 +351,7 @@ DECLSPEC void m08100s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m08100_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08100_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -417,7 +417,7 @@ KERNEL_FQ void m08100_m04 (KERN_ATTR_BASIC ()) m08100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m08100_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08100_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -491,7 +491,7 @@ KERNEL_FQ void m08100_m08 (KERN_ATTR_BASIC ()) m08100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m08100_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08100_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -580,7 +580,7 @@ KERNEL_FQ void m08100_m16 (KERN_ATTR_BASIC ()) m08100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m08100_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08100_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -646,7 +646,7 @@ KERNEL_FQ void m08100_s04 (KERN_ATTR_BASIC ()) m08100s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m08100_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08100_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -720,7 +720,7 @@ KERNEL_FQ void m08100_s08 (KERN_ATTR_BASIC ()) m08100s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m08100_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08100_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m08100_a3-pure.cl b/OpenCL/m08100_a3-pure.cl index c7b5884b7..4c546de05 100644 --- a/OpenCL/m08100_a3-pure.cl +++ b/OpenCL/m08100_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m08100_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m08100_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -79,7 +79,7 @@ KERNEL_FQ void m08100_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m08100_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m08100_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m08200-pure.cl b/OpenCL/m08200-pure.cl index 49d951cb7..c7043b92b 100644 --- a/OpenCL/m08200-pure.cl +++ b/OpenCL/m08200-pure.cl @@ -93,7 +93,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void m08200_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, cloudkey_t)) +KERNEL_FQ void HC_ATTR_SEQ m08200_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, cloudkey_t)) { /** * base @@ -197,7 +197,7 @@ KERNEL_FQ void m08200_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, cloudkey_ } } -KERNEL_FQ void m08200_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, cloudkey_t)) +KERNEL_FQ void HC_ATTR_SEQ m08200_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, cloudkey_t)) { const u64 gid = get_global_id (0); @@ -323,7 +323,7 @@ KERNEL_FQ void m08200_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, cloudkey_ } } -KERNEL_FQ void m08200_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, cloudkey_t)) +KERNEL_FQ void HC_ATTR_SEQ m08200_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, cloudkey_t)) { /** * base diff --git a/OpenCL/m08300_a0-optimized.cl b/OpenCL/m08300_a0-optimized.cl index f1265f28b..1c42c7873 100644 --- a/OpenCL/m08300_a0-optimized.cl +++ b/OpenCL/m08300_a0-optimized.cl @@ -173,7 +173,7 @@ DECLSPEC u32 replace_dot_by_len (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE out_len.s##n++; \ } -KERNEL_FQ void m08300_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08300_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -457,15 +457,15 @@ KERNEL_FQ void m08300_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m08300_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08300_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m08300_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08300_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m08300_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08300_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -761,10 +761,10 @@ KERNEL_FQ void m08300_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m08300_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08300_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m08300_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08300_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m08300_a0-pure.cl b/OpenCL/m08300_a0-pure.cl index 1454c90bf..51fc7c7ef 100644 --- a/OpenCL/m08300_a0-pure.cl +++ b/OpenCL/m08300_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m08300_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08300_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -148,7 +148,7 @@ KERNEL_FQ void m08300_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m08300_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08300_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m08300_a1-optimized.cl b/OpenCL/m08300_a1-optimized.cl index 690647820..986676cec 100644 --- a/OpenCL/m08300_a1-optimized.cl +++ b/OpenCL/m08300_a1-optimized.cl @@ -171,7 +171,7 @@ DECLSPEC u32 replace_dot_by_len (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE pw_len.s##n++; \ } -KERNEL_FQ void m08300_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08300_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -515,15 +515,15 @@ KERNEL_FQ void m08300_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m08300_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08300_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m08300_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08300_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m08300_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08300_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -879,10 +879,10 @@ KERNEL_FQ void m08300_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m08300_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08300_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m08300_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08300_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m08300_a1-pure.cl b/OpenCL/m08300_a1-pure.cl index 0545f4c93..1346fa199 100644 --- a/OpenCL/m08300_a1-pure.cl +++ b/OpenCL/m08300_a1-pure.cl @@ -50,7 +50,7 @@ DECLSPEC const u32 replace_dot_by_len (PRIVATE_AS pw_t *out, GLOBAL_AS const pw_ return cur_len; } -KERNEL_FQ void m08300_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08300_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -167,7 +167,7 @@ KERNEL_FQ void m08300_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m08300_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08300_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m08300_a3-optimized.cl b/OpenCL/m08300_a3-optimized.cl index 2364b0219..dcd0ad49a 100644 --- a/OpenCL/m08300_a3-optimized.cl +++ b/OpenCL/m08300_a3-optimized.cl @@ -651,7 +651,7 @@ DECLSPEC void m08300s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m08300_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08300_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -700,7 +700,7 @@ KERNEL_FQ void m08300_m04 (KERN_ATTR_BASIC ()) m08300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m08300_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08300_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -749,7 +749,7 @@ KERNEL_FQ void m08300_m08 (KERN_ATTR_BASIC ()) m08300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m08300_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08300_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -798,7 +798,7 @@ KERNEL_FQ void m08300_m16 (KERN_ATTR_BASIC ()) m08300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m08300_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08300_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -847,7 +847,7 @@ KERNEL_FQ void m08300_s04 (KERN_ATTR_BASIC ()) m08300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m08300_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08300_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -896,7 +896,7 @@ KERNEL_FQ void m08300_s08 (KERN_ATTR_BASIC ()) m08300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m08300_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08300_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m08300_a3-pure.cl b/OpenCL/m08300_a3-pure.cl index 38879aaca..2415acb97 100644 --- a/OpenCL/m08300_a3-pure.cl +++ b/OpenCL/m08300_a3-pure.cl @@ -25,7 +25,7 @@ len.s##n++; \ } -KERNEL_FQ void m08300_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m08300_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -198,7 +198,7 @@ KERNEL_FQ void m08300_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m08300_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m08300_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m08400_a0-optimized.cl b/OpenCL/m08400_a0-optimized.cl index ff7f1d720..718406292 100644 --- a/OpenCL/m08400_a0-optimized.cl +++ b/OpenCL/m08400_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m08400_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08400_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -274,15 +274,15 @@ KERNEL_FQ void m08400_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m08400_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08400_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m08400_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08400_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m08400_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08400_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -540,10 +540,10 @@ KERNEL_FQ void m08400_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m08400_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08400_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m08400_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08400_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m08400_a0-pure.cl b/OpenCL/m08400_a0-pure.cl index 42adeeb07..f42af7d41 100644 --- a/OpenCL/m08400_a0-pure.cl +++ b/OpenCL/m08400_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m08400_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08400_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -179,7 +179,7 @@ KERNEL_FQ void m08400_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m08400_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08400_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m08400_a1-optimized.cl b/OpenCL/m08400_a1-optimized.cl index 0cb5adbfd..60a1b4988 100644 --- a/OpenCL/m08400_a1-optimized.cl +++ b/OpenCL/m08400_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m08400_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08400_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -330,15 +330,15 @@ KERNEL_FQ void m08400_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m08400_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08400_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m08400_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08400_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m08400_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08400_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -654,10 +654,10 @@ KERNEL_FQ void m08400_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m08400_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08400_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m08400_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08400_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m08400_a1-pure.cl b/OpenCL/m08400_a1-pure.cl index 3ec471e72..e4e00efc1 100644 --- a/OpenCL/m08400_a1-pure.cl +++ b/OpenCL/m08400_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m08400_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08400_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -175,7 +175,7 @@ KERNEL_FQ void m08400_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m08400_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08400_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m08400_a3-optimized.cl b/OpenCL/m08400_a3-optimized.cl index 6b4288fb4..5a89de6bb 100644 --- a/OpenCL/m08400_a3-optimized.cl +++ b/OpenCL/m08400_a3-optimized.cl @@ -452,7 +452,7 @@ DECLSPEC void m08400s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m08400_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08400_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -522,7 +522,7 @@ KERNEL_FQ void m08400_m04 (KERN_ATTR_BASIC ()) m08400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m08400_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08400_m08 (KERN_ATTR_BASIC ()) { /** * modifier @@ -592,7 +592,7 @@ KERNEL_FQ void m08400_m08 (KERN_ATTR_BASIC ()) m08400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m08400_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08400_m16 (KERN_ATTR_BASIC ()) { /** * modifier @@ -662,7 +662,7 @@ KERNEL_FQ void m08400_m16 (KERN_ATTR_BASIC ()) m08400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m08400_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08400_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -732,7 +732,7 @@ KERNEL_FQ void m08400_s04 (KERN_ATTR_BASIC ()) m08400s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m08400_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08400_s08 (KERN_ATTR_BASIC ()) { /** * modifier @@ -802,7 +802,7 @@ KERNEL_FQ void m08400_s08 (KERN_ATTR_BASIC ()) m08400s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m08400_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08400_s16 (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m08400_a3-pure.cl b/OpenCL/m08400_a3-pure.cl index 01db0dcb9..03cdd8de0 100644 --- a/OpenCL/m08400_a3-pure.cl +++ b/OpenCL/m08400_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m08400_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m08400_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -192,7 +192,7 @@ KERNEL_FQ void m08400_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m08400_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m08400_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m08500_a0-pure.cl b/OpenCL/m08500_a0-pure.cl index 0f4fabad9..d20c06e03 100644 --- a/OpenCL/m08500_a0-pure.cl +++ b/OpenCL/m08500_a0-pure.cl @@ -522,7 +522,7 @@ DECLSPEC void transform_racf_key (const u32 w0, const u32x w1, PRIVATE_AS u32x * | BOX1 (((w1 >> 24) & 0xff), c_ascii_to_ebcdic_pc) << 24; } -KERNEL_FQ void m08500_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08500_mxx (KERN_ATTR_RULES ()) { /** * base @@ -620,7 +620,7 @@ KERNEL_FQ void m08500_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m08500_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08500_sxx (KERN_ATTR_RULES ()) { /** * base diff --git a/OpenCL/m08500_a1-pure.cl b/OpenCL/m08500_a1-pure.cl index 37df9d9df..e44828dad 100644 --- a/OpenCL/m08500_a1-pure.cl +++ b/OpenCL/m08500_a1-pure.cl @@ -520,7 +520,7 @@ DECLSPEC void transform_racf_key (const u32 w0, const u32x w1, PRIVATE_AS u32x * | BOX1 (((w1 >> 24) & 0xff), c_ascii_to_ebcdic_pc) << 24; } -KERNEL_FQ void m08500_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08500_mxx (KERN_ATTR_BASIC ()) { /** * base @@ -676,7 +676,7 @@ KERNEL_FQ void m08500_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m08500_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08500_sxx (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m08500_a3-pure.cl b/OpenCL/m08500_a3-pure.cl index 9eb48ad2a..f21acff22 100644 --- a/OpenCL/m08500_a3-pure.cl +++ b/OpenCL/m08500_a3-pure.cl @@ -652,7 +652,7 @@ DECLSPEC void m08500s (LOCAL_AS u32 (*s_SPtrans)[64], LOCAL_AS u32 (*s_skb)[64], } } -KERNEL_FQ void m08500_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m08500_mxx (KERN_ATTR_VECTOR ()) { /** * base @@ -726,7 +726,7 @@ KERNEL_FQ void m08500_mxx (KERN_ATTR_VECTOR ()) m08500m (s_SPtrans, s_skb, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m08500_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m08500_sxx (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m08600_a0-pure.cl b/OpenCL/m08600_a0-pure.cl index ed65c3ed8..d7bc1cdae 100644 --- a/OpenCL/m08600_a0-pure.cl +++ b/OpenCL/m08600_a0-pure.cl @@ -265,7 +265,7 @@ DECLSPEC void domino_big_md (PRIVATE_AS const u32 *saved_key, const u32 size, PR mdtransform_norecalc (state, checksum, s_lotus_magic_table); } -KERNEL_FQ void m08600_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08600_mxx (KERN_ATTR_RULES ()) { /** * base @@ -329,7 +329,7 @@ KERNEL_FQ void m08600_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m08600_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08600_sxx (KERN_ATTR_RULES ()) { /** * base diff --git a/OpenCL/m08600_a1-pure.cl b/OpenCL/m08600_a1-pure.cl index 006d46e5e..8e349f8b1 100644 --- a/OpenCL/m08600_a1-pure.cl +++ b/OpenCL/m08600_a1-pure.cl @@ -263,7 +263,7 @@ DECLSPEC void domino_big_md (PRIVATE_AS const u32 *saved_key, const u32 size, PR mdtransform_norecalc (state, checksum, s_lotus_magic_table); } -KERNEL_FQ void m08600_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08600_mxx (KERN_ATTR_BASIC ()) { /** * base @@ -387,7 +387,7 @@ KERNEL_FQ void m08600_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m08600_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08600_sxx (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m08600_a3-pure.cl b/OpenCL/m08600_a3-pure.cl index 1adc4deb4..41995b3f0 100644 --- a/OpenCL/m08600_a3-pure.cl +++ b/OpenCL/m08600_a3-pure.cl @@ -362,7 +362,7 @@ DECLSPEC void m08600s (LOCAL_AS u32 *s_lotus_magic_table, PRIVATE_AS u32 *w, con } } -KERNEL_FQ void m08600_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m08600_mxx (KERN_ATTR_VECTOR ()) { /** * base @@ -419,7 +419,7 @@ KERNEL_FQ void m08600_mxx (KERN_ATTR_VECTOR ()) m08600m (s_lotus_magic_table, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m08600_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m08600_sxx (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m08700_a0-optimized.cl b/OpenCL/m08700_a0-optimized.cl index 19c75e923..330db9283 100644 --- a/OpenCL/m08700_a0-optimized.cl +++ b/OpenCL/m08700_a0-optimized.cl @@ -302,7 +302,7 @@ DECLSPEC void domino_big_md (PRIVATE_AS const u32x *saved_key, const u32 size, P mdtransform_norecalc (state, checksum, s_lotus_magic_table); } -KERNEL_FQ void m08700_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08700_m04 (KERN_ATTR_RULES ()) { /** * base @@ -481,15 +481,15 @@ KERNEL_FQ void m08700_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m08700_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08700_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m08700_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08700_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m08700_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08700_s04 (KERN_ATTR_RULES ()) { /** * base @@ -680,10 +680,10 @@ KERNEL_FQ void m08700_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m08700_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08700_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m08700_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m08700_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m08700_a1-optimized.cl b/OpenCL/m08700_a1-optimized.cl index 41d0b368b..4bec676fa 100644 --- a/OpenCL/m08700_a1-optimized.cl +++ b/OpenCL/m08700_a1-optimized.cl @@ -300,7 +300,7 @@ DECLSPEC void domino_big_md (PRIVATE_AS const u32x *saved_key, const u32 size, P mdtransform_norecalc (state, checksum, s_lotus_magic_table); } -KERNEL_FQ void m08700_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08700_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -539,15 +539,15 @@ KERNEL_FQ void m08700_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m08700_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08700_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m08700_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08700_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m08700_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08700_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -798,10 +798,10 @@ KERNEL_FQ void m08700_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m08700_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08700_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m08700_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m08700_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m08700_a3-optimized.cl b/OpenCL/m08700_a3-optimized.cl index b2af8bec9..d14bd5edc 100644 --- a/OpenCL/m08700_a3-optimized.cl +++ b/OpenCL/m08700_a3-optimized.cl @@ -573,7 +573,7 @@ DECLSPEC void m08700s (LOCAL_AS u32 *s_lotus_magic_table, LOCAL_AS u32 *l_bin2as } } -KERNEL_FQ void m08700_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m08700_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -641,7 +641,7 @@ KERNEL_FQ void m08700_m04 (KERN_ATTR_VECTOR ()) m08700m (s_lotus_magic_table, l_bin2asc, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m08700_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m08700_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -709,7 +709,7 @@ KERNEL_FQ void m08700_m08 (KERN_ATTR_VECTOR ()) m08700m (s_lotus_magic_table, l_bin2asc, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m08700_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m08700_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -777,7 +777,7 @@ KERNEL_FQ void m08700_m16 (KERN_ATTR_VECTOR ()) m08700m (s_lotus_magic_table, l_bin2asc, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m08700_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m08700_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -845,7 +845,7 @@ KERNEL_FQ void m08700_s04 (KERN_ATTR_VECTOR ()) m08700s (s_lotus_magic_table, l_bin2asc, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m08700_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m08700_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -913,7 +913,7 @@ KERNEL_FQ void m08700_s08 (KERN_ATTR_VECTOR ()) m08700s (s_lotus_magic_table, l_bin2asc, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m08700_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m08700_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m08800-pure.cl b/OpenCL/m08800-pure.cl index cbd3a250d..505ce7ed9 100644 --- a/OpenCL/m08800-pure.cl +++ b/OpenCL/m08800-pure.cl @@ -68,7 +68,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m08800_init (KERN_ATTR_TMPS_ESALT (androidfde_tmp_t, androidfde_t)) +KERNEL_FQ void HC_ATTR_SEQ m08800_init (KERN_ATTR_TMPS_ESALT (androidfde_tmp_t, androidfde_t)) { /** * base @@ -140,7 +140,7 @@ KERNEL_FQ void m08800_init (KERN_ATTR_TMPS_ESALT (androidfde_tmp_t, androidfde_t } } -KERNEL_FQ void m08800_loop (KERN_ATTR_TMPS_ESALT (androidfde_tmp_t, androidfde_t)) +KERNEL_FQ void HC_ATTR_SEQ m08800_loop (KERN_ATTR_TMPS_ESALT (androidfde_tmp_t, androidfde_t)) { const u64 gid = get_global_id (0); @@ -225,7 +225,7 @@ KERNEL_FQ void m08800_loop (KERN_ATTR_TMPS_ESALT (androidfde_tmp_t, androidfde_t } } -KERNEL_FQ void m08800_comp (KERN_ATTR_TMPS_ESALT (androidfde_tmp_t, androidfde_t)) +KERNEL_FQ void HC_ATTR_SEQ m08800_comp (KERN_ATTR_TMPS_ESALT (androidfde_tmp_t, androidfde_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m08900-pure.cl b/OpenCL/m08900-pure.cl index aafbf1d30..c5a989418 100644 --- a/OpenCL/m08900-pure.cl +++ b/OpenCL/m08900-pure.cl @@ -266,7 +266,7 @@ DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL } } -KERNEL_FQ void m08900_init (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m08900_init (KERN_ATTR_TMPS (scrypt_tmp_t)) { /** * base @@ -378,7 +378,7 @@ KERNEL_FQ void m08900_init (KERN_ATTR_TMPS (scrypt_tmp_t)) } } -KERNEL_FQ void m08900_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m08900_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) { /** * base @@ -409,7 +409,7 @@ KERNEL_FQ void m08900_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } -KERNEL_FQ void m08900_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m08900_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -434,7 +434,7 @@ KERNEL_FQ void m08900_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } -KERNEL_FQ void m08900_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m08900_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) { /** * base diff --git a/OpenCL/m09000-pure.cl b/OpenCL/m09000-pure.cl index 999f57bfe..2de60f2da 100644 --- a/OpenCL/m09000-pure.cl +++ b/OpenCL/m09000-pure.cl @@ -406,7 +406,7 @@ DECLSPEC inline void SET_KEY32 (LOCAL_AS u32 *S, const u64 key, const u32 val) extern __shared__ u32 S[]; #endif -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m09000_init (KERN_ATTR_TMPS (pwsafe2_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m09000_init (KERN_ATTR_TMPS (pwsafe2_tmp_t)) { /** * base @@ -636,7 +636,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m09000_init (KERN_ATTR_TMPS } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m09000_loop (KERN_ATTR_TMPS (pwsafe2_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m09000_loop (KERN_ATTR_TMPS (pwsafe2_tmp_t)) { /** * base @@ -705,7 +705,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m09000_loop (KERN_ATTR_TMPS tmps[gid].digest[1] = R0; } -KERNEL_FQ void m09000_comp (KERN_ATTR_TMPS (pwsafe2_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m09000_comp (KERN_ATTR_TMPS (pwsafe2_tmp_t)) { /** * base diff --git a/OpenCL/m09100-pure.cl b/OpenCL/m09100-pure.cl index 307dcfab8..e4c1080f6 100644 --- a/OpenCL/m09100-pure.cl +++ b/OpenCL/m09100-pure.cl @@ -424,7 +424,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m09100_init (KERN_ATTR_TMPS (lotus8_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m09100_init (KERN_ATTR_TMPS (lotus8_tmp_t)) { /** * base @@ -696,7 +696,7 @@ KERNEL_FQ void m09100_init (KERN_ATTR_TMPS (lotus8_tmp_t)) } } -KERNEL_FQ void m09100_loop (KERN_ATTR_TMPS (lotus8_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m09100_loop (KERN_ATTR_TMPS (lotus8_tmp_t)) { const u64 gid = get_global_id (0); @@ -781,7 +781,7 @@ KERNEL_FQ void m09100_loop (KERN_ATTR_TMPS (lotus8_tmp_t)) } } -KERNEL_FQ void m09100_comp (KERN_ATTR_TMPS (lotus8_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m09100_comp (KERN_ATTR_TMPS (lotus8_tmp_t)) { /** * base diff --git a/OpenCL/m09400-pure.cl b/OpenCL/m09400-pure.cl index be2626141..8fa99c333 100644 --- a/OpenCL/m09400-pure.cl +++ b/OpenCL/m09400-pure.cl @@ -33,7 +33,7 @@ typedef struct office2007 } office2007_t; -KERNEL_FQ void m09400_init (KERN_ATTR_TMPS_ESALT (office2007_tmp_t, office2007_t)) +KERNEL_FQ void HC_ATTR_SEQ m09400_init (KERN_ATTR_TMPS_ESALT (office2007_tmp_t, office2007_t)) { /** * base @@ -60,7 +60,7 @@ KERNEL_FQ void m09400_init (KERN_ATTR_TMPS_ESALT (office2007_tmp_t, office2007_t tmps[gid].out[4] = ctx.h[4]; } -KERNEL_FQ void m09400_loop (KERN_ATTR_TMPS_ESALT (office2007_tmp_t, office2007_t)) +KERNEL_FQ void HC_ATTR_SEQ m09400_loop (KERN_ATTR_TMPS_ESALT (office2007_tmp_t, office2007_t)) { const u64 gid = get_global_id (0); @@ -127,7 +127,7 @@ KERNEL_FQ void m09400_loop (KERN_ATTR_TMPS_ESALT (office2007_tmp_t, office2007_t unpackv (tmps, out, gid, 4, t4); } -KERNEL_FQ void m09400_comp (KERN_ATTR_TMPS_ESALT (office2007_tmp_t, office2007_t)) +KERNEL_FQ void HC_ATTR_SEQ m09400_comp (KERN_ATTR_TMPS_ESALT (office2007_tmp_t, office2007_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m09500-pure.cl b/OpenCL/m09500-pure.cl index e009a1b80..a09826aa0 100644 --- a/OpenCL/m09500-pure.cl +++ b/OpenCL/m09500-pure.cl @@ -31,7 +31,7 @@ typedef struct office2010_tmp } office2010_tmp_t; -KERNEL_FQ void m09500_init (KERN_ATTR_TMPS_ESALT (office2010_tmp_t, office2010_t)) +KERNEL_FQ void HC_ATTR_SEQ m09500_init (KERN_ATTR_TMPS_ESALT (office2010_tmp_t, office2010_t)) { /** * base @@ -58,7 +58,7 @@ KERNEL_FQ void m09500_init (KERN_ATTR_TMPS_ESALT (office2010_tmp_t, office2010_t tmps[gid].out[4] = ctx.h[4]; } -KERNEL_FQ void m09500_loop (KERN_ATTR_TMPS_ESALT (office2010_tmp_t, office2010_t)) +KERNEL_FQ void HC_ATTR_SEQ m09500_loop (KERN_ATTR_TMPS_ESALT (office2010_tmp_t, office2010_t)) { const u64 gid = get_global_id (0); @@ -125,7 +125,7 @@ KERNEL_FQ void m09500_loop (KERN_ATTR_TMPS_ESALT (office2010_tmp_t, office2010_t unpackv (tmps, out, gid, 4, t4); } -KERNEL_FQ void m09500_comp (KERN_ATTR_TMPS_ESALT (office2010_tmp_t, office2010_t)) +KERNEL_FQ void HC_ATTR_SEQ m09500_comp (KERN_ATTR_TMPS_ESALT (office2010_tmp_t, office2010_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m09600-pure.cl b/OpenCL/m09600-pure.cl index aeb397a20..4136323be 100644 --- a/OpenCL/m09600-pure.cl +++ b/OpenCL/m09600-pure.cl @@ -31,7 +31,7 @@ typedef struct office2013 } office2013_t; -KERNEL_FQ void m09600_init (KERN_ATTR_TMPS_ESALT (office2013_tmp_t, office2013_t)) +KERNEL_FQ void HC_ATTR_SEQ m09600_init (KERN_ATTR_TMPS_ESALT (office2013_tmp_t, office2013_t)) { /** * base @@ -61,7 +61,7 @@ KERNEL_FQ void m09600_init (KERN_ATTR_TMPS_ESALT (office2013_tmp_t, office2013_t tmps[gid].out[7] = ctx.h[7]; } -KERNEL_FQ void m09600_loop (KERN_ATTR_TMPS_ESALT (office2013_tmp_t, office2013_t)) +KERNEL_FQ void HC_ATTR_SEQ m09600_loop (KERN_ATTR_TMPS_ESALT (office2013_tmp_t, office2013_t)) { const u64 gid = get_global_id (0); @@ -171,7 +171,7 @@ KERNEL_FQ void m09600_loop (KERN_ATTR_TMPS_ESALT (office2013_tmp_t, office2013_t unpack64v (tmps, out, gid, 7, t7); } -KERNEL_FQ void m09600_comp (KERN_ATTR_TMPS_ESALT (office2013_tmp_t, office2013_t)) +KERNEL_FQ void HC_ATTR_SEQ m09600_comp (KERN_ATTR_TMPS_ESALT (office2013_tmp_t, office2013_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m09700_a0-optimized.cl b/OpenCL/m09700_a0-optimized.cl index 1a1384f3a..60659884f 100644 --- a/OpenCL/m09700_a0-optimized.cl +++ b/OpenCL/m09700_a0-optimized.cl @@ -371,7 +371,7 @@ DECLSPEC void gen336 (PRIVATE_AS u32 *digest_pre, PRIVATE_AS u32 *salt_buf, PRIV md5_transform (w0_t, w1_t, w2_t, w3_t, digest); } -KERNEL_FQ void m09700_m04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09700_m04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { /** * modifier @@ -548,15 +548,15 @@ KERNEL_FQ void m09700_m04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) } } -KERNEL_FQ void m09700_m08 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09700_m08 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { } -KERNEL_FQ void m09700_m16 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09700_m16 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { } -KERNEL_FQ void m09700_s04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09700_s04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { /** * modifier @@ -745,10 +745,10 @@ KERNEL_FQ void m09700_s04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) } } -KERNEL_FQ void m09700_s08 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09700_s08 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { } -KERNEL_FQ void m09700_s16 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09700_s16 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { } diff --git a/OpenCL/m09700_a1-optimized.cl b/OpenCL/m09700_a1-optimized.cl index d6a5164cd..b47ae648f 100644 --- a/OpenCL/m09700_a1-optimized.cl +++ b/OpenCL/m09700_a1-optimized.cl @@ -369,7 +369,7 @@ DECLSPEC void gen336 (PRIVATE_AS u32 *digest_pre, PRIVATE_AS u32 *salt_buf, PRIV md5_transform (w0_t, w1_t, w2_t, w3_t, digest); } -KERNEL_FQ void m09700_m04 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09700_m04 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * modifier @@ -604,15 +604,15 @@ KERNEL_FQ void m09700_m04 (KERN_ATTR_ESALT (oldoffice01_t)) } } -KERNEL_FQ void m09700_m08 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09700_m08 (KERN_ATTR_ESALT (oldoffice01_t)) { } -KERNEL_FQ void m09700_m16 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09700_m16 (KERN_ATTR_ESALT (oldoffice01_t)) { } -KERNEL_FQ void m09700_s04 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09700_s04 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * modifier @@ -859,10 +859,10 @@ KERNEL_FQ void m09700_s04 (KERN_ATTR_ESALT (oldoffice01_t)) } } -KERNEL_FQ void m09700_s08 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09700_s08 (KERN_ATTR_ESALT (oldoffice01_t)) { } -KERNEL_FQ void m09700_s16 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09700_s16 (KERN_ATTR_ESALT (oldoffice01_t)) { } diff --git a/OpenCL/m09700_a3-optimized.cl b/OpenCL/m09700_a3-optimized.cl index 6e368bc10..80e7a4eab 100644 --- a/OpenCL/m09700_a3-optimized.cl +++ b/OpenCL/m09700_a3-optimized.cl @@ -828,7 +828,7 @@ DECLSPEC void m09700s (LOCAL_AS u32 *S, PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, } } -KERNEL_FQ void m09700_m04 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09700_m04 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * base @@ -879,7 +879,7 @@ KERNEL_FQ void m09700_m04 (KERN_ATTR_ESALT (oldoffice01_t)) m09700m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m09700_m08 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09700_m08 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * base @@ -930,11 +930,11 @@ KERNEL_FQ void m09700_m08 (KERN_ATTR_ESALT (oldoffice01_t)) m09700m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m09700_m16 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09700_m16 (KERN_ATTR_ESALT (oldoffice01_t)) { } -KERNEL_FQ void m09700_s04 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09700_s04 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * base @@ -985,7 +985,7 @@ KERNEL_FQ void m09700_s04 (KERN_ATTR_ESALT (oldoffice01_t)) m09700s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m09700_s08 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09700_s08 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * base @@ -1036,6 +1036,6 @@ KERNEL_FQ void m09700_s08 (KERN_ATTR_ESALT (oldoffice01_t)) m09700s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m09700_s16 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09700_s16 (KERN_ATTR_ESALT (oldoffice01_t)) { } diff --git a/OpenCL/m09710_a0-optimized.cl b/OpenCL/m09710_a0-optimized.cl index 87773002d..47998ae63 100644 --- a/OpenCL/m09710_a0-optimized.cl +++ b/OpenCL/m09710_a0-optimized.cl @@ -27,7 +27,7 @@ typedef struct oldoffice01 } oldoffice01_t; -KERNEL_FQ void m09710_m04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09710_m04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { /** * modifier @@ -155,15 +155,15 @@ KERNEL_FQ void m09710_m04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) } } -KERNEL_FQ void m09710_m08 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09710_m08 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { } -KERNEL_FQ void m09710_m16 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09710_m16 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { } -KERNEL_FQ void m09710_s04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09710_s04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { /** * modifier @@ -303,10 +303,10 @@ KERNEL_FQ void m09710_s04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) } } -KERNEL_FQ void m09710_s08 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09710_s08 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { } -KERNEL_FQ void m09710_s16 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09710_s16 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { } diff --git a/OpenCL/m09710_a1-optimized.cl b/OpenCL/m09710_a1-optimized.cl index 04ea2ee80..921fa18e3 100644 --- a/OpenCL/m09710_a1-optimized.cl +++ b/OpenCL/m09710_a1-optimized.cl @@ -25,7 +25,7 @@ typedef struct oldoffice01 } oldoffice01_t; -KERNEL_FQ void m09710_m04 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09710_m04 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * modifier @@ -199,15 +199,15 @@ KERNEL_FQ void m09710_m04 (KERN_ATTR_ESALT (oldoffice01_t)) } } -KERNEL_FQ void m09710_m08 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09710_m08 (KERN_ATTR_ESALT (oldoffice01_t)) { } -KERNEL_FQ void m09710_m16 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09710_m16 (KERN_ATTR_ESALT (oldoffice01_t)) { } -KERNEL_FQ void m09710_s04 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09710_s04 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * modifier @@ -393,10 +393,10 @@ KERNEL_FQ void m09710_s04 (KERN_ATTR_ESALT (oldoffice01_t)) } } -KERNEL_FQ void m09710_s08 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09710_s08 (KERN_ATTR_ESALT (oldoffice01_t)) { } -KERNEL_FQ void m09710_s16 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09710_s16 (KERN_ATTR_ESALT (oldoffice01_t)) { } diff --git a/OpenCL/m09710_a3-optimized.cl b/OpenCL/m09710_a3-optimized.cl index dc7c1f6ef..b296df5d3 100644 --- a/OpenCL/m09710_a3-optimized.cl +++ b/OpenCL/m09710_a3-optimized.cl @@ -237,7 +237,7 @@ DECLSPEC void m09710s (LOCAL_AS u32 *S, PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, } } -KERNEL_FQ void m09710_m04 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09710_m04 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * base @@ -288,15 +288,15 @@ KERNEL_FQ void m09710_m04 (KERN_ATTR_ESALT (oldoffice01_t)) m09710m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m09710_m08 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09710_m08 (KERN_ATTR_ESALT (oldoffice01_t)) { } -KERNEL_FQ void m09710_m16 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09710_m16 (KERN_ATTR_ESALT (oldoffice01_t)) { } -KERNEL_FQ void m09710_s04 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09710_s04 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * base @@ -347,10 +347,10 @@ KERNEL_FQ void m09710_s04 (KERN_ATTR_ESALT (oldoffice01_t)) m09710s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m09710_s08 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09710_s08 (KERN_ATTR_ESALT (oldoffice01_t)) { } -KERNEL_FQ void m09710_s16 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09710_s16 (KERN_ATTR_ESALT (oldoffice01_t)) { } diff --git a/OpenCL/m09720_a0-optimized.cl b/OpenCL/m09720_a0-optimized.cl index 4e58fa2ed..f0b9b0f3d 100644 --- a/OpenCL/m09720_a0-optimized.cl +++ b/OpenCL/m09720_a0-optimized.cl @@ -369,7 +369,7 @@ DECLSPEC void gen336 (PRIVATE_AS u32x *digest_pre, PRIVATE_AS u32 *salt_buf, PRI md5_transform_vector (w0_t, w1_t, w2_t, w3_t, digest); } -KERNEL_FQ void m09720_m04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09720_m04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { /** * modifier @@ -467,15 +467,15 @@ KERNEL_FQ void m09720_m04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) } } -KERNEL_FQ void m09720_m08 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09720_m08 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { } -KERNEL_FQ void m09720_m16 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09720_m16 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { } -KERNEL_FQ void m09720_s04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09720_s04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { /** * modifier @@ -585,10 +585,10 @@ KERNEL_FQ void m09720_s04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) } } -KERNEL_FQ void m09720_s08 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09720_s08 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { } -KERNEL_FQ void m09720_s16 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09720_s16 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { } diff --git a/OpenCL/m09720_a1-optimized.cl b/OpenCL/m09720_a1-optimized.cl index a9c0c53ed..885da5f07 100644 --- a/OpenCL/m09720_a1-optimized.cl +++ b/OpenCL/m09720_a1-optimized.cl @@ -367,7 +367,7 @@ DECLSPEC void gen336 (PRIVATE_AS u32x *digest_pre, PRIVATE_AS u32 *salt_buf, PRI md5_transform_vector (w0_t, w1_t, w2_t, w3_t, digest); } -KERNEL_FQ void m09720_m04 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09720_m04 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * modifier @@ -515,15 +515,15 @@ KERNEL_FQ void m09720_m04 (KERN_ATTR_ESALT (oldoffice01_t)) } } -KERNEL_FQ void m09720_m08 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09720_m08 (KERN_ATTR_ESALT (oldoffice01_t)) { } -KERNEL_FQ void m09720_m16 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09720_m16 (KERN_ATTR_ESALT (oldoffice01_t)) { } -KERNEL_FQ void m09720_s04 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09720_s04 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * modifier @@ -683,10 +683,10 @@ KERNEL_FQ void m09720_s04 (KERN_ATTR_ESALT (oldoffice01_t)) } } -KERNEL_FQ void m09720_s08 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09720_s08 (KERN_ATTR_ESALT (oldoffice01_t)) { } -KERNEL_FQ void m09720_s16 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09720_s16 (KERN_ATTR_ESALT (oldoffice01_t)) { } diff --git a/OpenCL/m09720_a3-optimized.cl b/OpenCL/m09720_a3-optimized.cl index 1102f1222..91e06cdab 100644 --- a/OpenCL/m09720_a3-optimized.cl +++ b/OpenCL/m09720_a3-optimized.cl @@ -553,7 +553,7 @@ DECLSPEC void m09720s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m09720_m04 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09720_m04 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * base @@ -602,7 +602,7 @@ KERNEL_FQ void m09720_m04 (KERN_ATTR_ESALT (oldoffice01_t)) m09720m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m09720_m08 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09720_m08 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * base @@ -651,11 +651,11 @@ KERNEL_FQ void m09720_m08 (KERN_ATTR_ESALT (oldoffice01_t)) m09720m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m09720_m16 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09720_m16 (KERN_ATTR_ESALT (oldoffice01_t)) { } -KERNEL_FQ void m09720_s04 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09720_s04 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * base @@ -704,7 +704,7 @@ KERNEL_FQ void m09720_s04 (KERN_ATTR_ESALT (oldoffice01_t)) m09720s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m09720_s08 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09720_s08 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * base @@ -753,6 +753,6 @@ KERNEL_FQ void m09720_s08 (KERN_ATTR_ESALT (oldoffice01_t)) m09720s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m09720_s16 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ void HC_ATTR_SEQ m09720_s16 (KERN_ATTR_ESALT (oldoffice01_t)) { } diff --git a/OpenCL/m09800_a0-optimized.cl b/OpenCL/m09800_a0-optimized.cl index 46b798d1c..c1d0640ab 100644 --- a/OpenCL/m09800_a0-optimized.cl +++ b/OpenCL/m09800_a0-optimized.cl @@ -31,7 +31,7 @@ typedef struct oldoffice34 } oldoffice34_t; -KERNEL_FQ void m09800_m04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09800_m04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { /** * modifier @@ -309,15 +309,15 @@ KERNEL_FQ void m09800_m04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) } } -KERNEL_FQ void m09800_m08 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09800_m08 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { } -KERNEL_FQ void m09800_m16 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09800_m16 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { } -KERNEL_FQ void m09800_s04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09800_s04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { /** * modifier @@ -606,10 +606,10 @@ KERNEL_FQ void m09800_s04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) } } -KERNEL_FQ void m09800_s08 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09800_s08 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { } -KERNEL_FQ void m09800_s16 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09800_s16 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { } diff --git a/OpenCL/m09800_a1-optimized.cl b/OpenCL/m09800_a1-optimized.cl index 9a27f463d..ddbae47aa 100644 --- a/OpenCL/m09800_a1-optimized.cl +++ b/OpenCL/m09800_a1-optimized.cl @@ -29,7 +29,7 @@ typedef struct oldoffice34 } oldoffice34_t; -KERNEL_FQ void m09800_m04 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09800_m04 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * modifier @@ -357,15 +357,15 @@ KERNEL_FQ void m09800_m04 (KERN_ATTR_ESALT (oldoffice34_t)) } } -KERNEL_FQ void m09800_m08 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09800_m08 (KERN_ATTR_ESALT (oldoffice34_t)) { } -KERNEL_FQ void m09800_m16 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09800_m16 (KERN_ATTR_ESALT (oldoffice34_t)) { } -KERNEL_FQ void m09800_s04 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09800_s04 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * modifier @@ -704,10 +704,10 @@ KERNEL_FQ void m09800_s04 (KERN_ATTR_ESALT (oldoffice34_t)) } } -KERNEL_FQ void m09800_s08 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09800_s08 (KERN_ATTR_ESALT (oldoffice34_t)) { } -KERNEL_FQ void m09800_s16 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09800_s16 (KERN_ATTR_ESALT (oldoffice34_t)) { } diff --git a/OpenCL/m09800_a3-optimized.cl b/OpenCL/m09800_a3-optimized.cl index 53c3b7ef0..a19ba98e6 100644 --- a/OpenCL/m09800_a3-optimized.cl +++ b/OpenCL/m09800_a3-optimized.cl @@ -531,7 +531,7 @@ DECLSPEC void m09800s (LOCAL_AS u32 *S, PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, } } -KERNEL_FQ void m09800_m04 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09800_m04 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base @@ -582,7 +582,7 @@ KERNEL_FQ void m09800_m04 (KERN_ATTR_ESALT (oldoffice34_t)) m09800m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m09800_m08 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09800_m08 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base @@ -633,7 +633,7 @@ KERNEL_FQ void m09800_m08 (KERN_ATTR_ESALT (oldoffice34_t)) m09800m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m09800_m16 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09800_m16 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base @@ -684,7 +684,7 @@ KERNEL_FQ void m09800_m16 (KERN_ATTR_ESALT (oldoffice34_t)) m09800m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m09800_s04 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09800_s04 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base @@ -735,7 +735,7 @@ KERNEL_FQ void m09800_s04 (KERN_ATTR_ESALT (oldoffice34_t)) m09800s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m09800_s08 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09800_s08 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base @@ -786,7 +786,7 @@ KERNEL_FQ void m09800_s08 (KERN_ATTR_ESALT (oldoffice34_t)) m09800s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m09800_s16 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09800_s16 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base diff --git a/OpenCL/m09810_a0-optimized.cl b/OpenCL/m09810_a0-optimized.cl index f0f1f15fd..55494578f 100644 --- a/OpenCL/m09810_a0-optimized.cl +++ b/OpenCL/m09810_a0-optimized.cl @@ -29,7 +29,7 @@ typedef struct oldoffice34 } oldoffice34_t; -KERNEL_FQ void m09810_m04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09810_m04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { /** * modifier @@ -144,15 +144,15 @@ KERNEL_FQ void m09810_m04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) } } -KERNEL_FQ void m09810_m08 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09810_m08 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { } -KERNEL_FQ void m09810_m16 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09810_m16 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { } -KERNEL_FQ void m09810_s04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09810_s04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { /** * modifier @@ -279,10 +279,10 @@ KERNEL_FQ void m09810_s04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) } } -KERNEL_FQ void m09810_s08 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09810_s08 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { } -KERNEL_FQ void m09810_s16 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09810_s16 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { } diff --git a/OpenCL/m09810_a1-optimized.cl b/OpenCL/m09810_a1-optimized.cl index 7f90cfd0a..22b2004bf 100644 --- a/OpenCL/m09810_a1-optimized.cl +++ b/OpenCL/m09810_a1-optimized.cl @@ -27,7 +27,7 @@ typedef struct oldoffice34 } oldoffice34_t; -KERNEL_FQ void m09810_m04 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09810_m04 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * modifier @@ -188,15 +188,15 @@ KERNEL_FQ void m09810_m04 (KERN_ATTR_ESALT (oldoffice34_t)) } } -KERNEL_FQ void m09810_m08 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09810_m08 (KERN_ATTR_ESALT (oldoffice34_t)) { } -KERNEL_FQ void m09810_m16 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09810_m16 (KERN_ATTR_ESALT (oldoffice34_t)) { } -KERNEL_FQ void m09810_s04 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09810_s04 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * modifier @@ -369,10 +369,10 @@ KERNEL_FQ void m09810_s04 (KERN_ATTR_ESALT (oldoffice34_t)) } } -KERNEL_FQ void m09810_s08 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09810_s08 (KERN_ATTR_ESALT (oldoffice34_t)) { } -KERNEL_FQ void m09810_s16 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09810_s16 (KERN_ATTR_ESALT (oldoffice34_t)) { } diff --git a/OpenCL/m09810_a3-optimized.cl b/OpenCL/m09810_a3-optimized.cl index 902b369bf..7ca6f2a29 100644 --- a/OpenCL/m09810_a3-optimized.cl +++ b/OpenCL/m09810_a3-optimized.cl @@ -209,7 +209,7 @@ DECLSPEC void m09810s (LOCAL_AS u32 *S, PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, } } -KERNEL_FQ void m09810_m04 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09810_m04 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base @@ -260,7 +260,7 @@ KERNEL_FQ void m09810_m04 (KERN_ATTR_ESALT (oldoffice34_t)) m09810m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m09810_m08 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09810_m08 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base @@ -311,7 +311,7 @@ KERNEL_FQ void m09810_m08 (KERN_ATTR_ESALT (oldoffice34_t)) m09810m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m09810_m16 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09810_m16 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base @@ -362,7 +362,7 @@ KERNEL_FQ void m09810_m16 (KERN_ATTR_ESALT (oldoffice34_t)) m09810m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m09810_s04 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09810_s04 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base @@ -413,7 +413,7 @@ KERNEL_FQ void m09810_s04 (KERN_ATTR_ESALT (oldoffice34_t)) m09810s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m09810_s08 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09810_s08 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base @@ -464,7 +464,7 @@ KERNEL_FQ void m09810_s08 (KERN_ATTR_ESALT (oldoffice34_t)) m09810s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m09810_s16 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09810_s16 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base diff --git a/OpenCL/m09820_a0-optimized.cl b/OpenCL/m09820_a0-optimized.cl index b4daf5587..b07e32fbf 100644 --- a/OpenCL/m09820_a0-optimized.cl +++ b/OpenCL/m09820_a0-optimized.cl @@ -31,7 +31,7 @@ typedef struct oldoffice34 } oldoffice34_t; -KERNEL_FQ void m09820_m04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09820_m04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { /** * modifier @@ -253,15 +253,15 @@ KERNEL_FQ void m09820_m04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) } } -KERNEL_FQ void m09820_m08 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09820_m08 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { } -KERNEL_FQ void m09820_m16 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09820_m16 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { } -KERNEL_FQ void m09820_s04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09820_s04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { /** * modifier @@ -492,10 +492,10 @@ KERNEL_FQ void m09820_s04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) } } -KERNEL_FQ void m09820_s08 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09820_s08 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { } -KERNEL_FQ void m09820_s16 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09820_s16 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { } diff --git a/OpenCL/m09820_a1-optimized.cl b/OpenCL/m09820_a1-optimized.cl index b8d19f00c..c22d93f7b 100644 --- a/OpenCL/m09820_a1-optimized.cl +++ b/OpenCL/m09820_a1-optimized.cl @@ -29,7 +29,7 @@ typedef struct oldoffice34 } oldoffice34_t; -KERNEL_FQ void m09820_m04 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09820_m04 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * modifier @@ -301,15 +301,15 @@ KERNEL_FQ void m09820_m04 (KERN_ATTR_ESALT (oldoffice34_t)) } } -KERNEL_FQ void m09820_m08 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09820_m08 (KERN_ATTR_ESALT (oldoffice34_t)) { } -KERNEL_FQ void m09820_m16 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09820_m16 (KERN_ATTR_ESALT (oldoffice34_t)) { } -KERNEL_FQ void m09820_s04 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09820_s04 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * modifier @@ -590,10 +590,10 @@ KERNEL_FQ void m09820_s04 (KERN_ATTR_ESALT (oldoffice34_t)) } } -KERNEL_FQ void m09820_s08 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09820_s08 (KERN_ATTR_ESALT (oldoffice34_t)) { } -KERNEL_FQ void m09820_s16 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09820_s16 (KERN_ATTR_ESALT (oldoffice34_t)) { } diff --git a/OpenCL/m09820_a3-optimized.cl b/OpenCL/m09820_a3-optimized.cl index 889268423..d258a48e9 100644 --- a/OpenCL/m09820_a3-optimized.cl +++ b/OpenCL/m09820_a3-optimized.cl @@ -416,7 +416,7 @@ DECLSPEC void m09820s (LOCAL_AS u32 *S, PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, } } -KERNEL_FQ void m09820_m04 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09820_m04 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base @@ -467,7 +467,7 @@ KERNEL_FQ void m09820_m04 (KERN_ATTR_ESALT (oldoffice34_t)) m09820m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m09820_m08 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09820_m08 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base @@ -518,7 +518,7 @@ KERNEL_FQ void m09820_m08 (KERN_ATTR_ESALT (oldoffice34_t)) m09820m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m09820_m16 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09820_m16 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base @@ -569,7 +569,7 @@ KERNEL_FQ void m09820_m16 (KERN_ATTR_ESALT (oldoffice34_t)) m09820m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m09820_s04 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09820_s04 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base @@ -620,7 +620,7 @@ KERNEL_FQ void m09820_s04 (KERN_ATTR_ESALT (oldoffice34_t)) m09820s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m09820_s08 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09820_s08 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base @@ -671,7 +671,7 @@ KERNEL_FQ void m09820_s08 (KERN_ATTR_ESALT (oldoffice34_t)) m09820s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m09820_s16 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ void HC_ATTR_SEQ m09820_s16 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base diff --git a/OpenCL/m09900_a0-optimized.cl b/OpenCL/m09900_a0-optimized.cl index 2aa8ae62f..c12656908 100644 --- a/OpenCL/m09900_a0-optimized.cl +++ b/OpenCL/m09900_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m09900_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m09900_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -242,15 +242,15 @@ KERNEL_FQ void m09900_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m09900_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m09900_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m09900_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m09900_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m09900_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m09900_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -491,10 +491,10 @@ KERNEL_FQ void m09900_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m09900_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m09900_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m09900_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m09900_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m09900_a0-pure.cl b/OpenCL/m09900_a0-pure.cl index dc4d9ea92..9ec8dcb57 100644 --- a/OpenCL/m09900_a0-pure.cl +++ b/OpenCL/m09900_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m09900_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m09900_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void m09900_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m09900_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m09900_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m09900_a1-optimized.cl b/OpenCL/m09900_a1-optimized.cl index fb52d6aa1..c2f6f8eb3 100644 --- a/OpenCL/m09900_a1-optimized.cl +++ b/OpenCL/m09900_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m09900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m09900_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -300,15 +300,15 @@ KERNEL_FQ void m09900_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m09900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m09900_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m09900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m09900_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m09900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m09900_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -609,10 +609,10 @@ KERNEL_FQ void m09900_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m09900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m09900_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m09900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m09900_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m09900_a1-pure.cl b/OpenCL/m09900_a1-pure.cl index 9be5a5714..5cb119840 100644 --- a/OpenCL/m09900_a1-pure.cl +++ b/OpenCL/m09900_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m09900_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m09900_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void m09900_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m09900_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m09900_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m09900_a3-optimized.cl b/OpenCL/m09900_a3-optimized.cl index c2d7e76b8..0866e2932 100644 --- a/OpenCL/m09900_a3-optimized.cl +++ b/OpenCL/m09900_a3-optimized.cl @@ -585,7 +585,7 @@ DECLSPEC void m09900s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m09900_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m09900_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -625,7 +625,7 @@ KERNEL_FQ void m09900_m04 (KERN_ATTR_VECTOR ()) m09900m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m09900_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m09900_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -665,7 +665,7 @@ KERNEL_FQ void m09900_m08 (KERN_ATTR_VECTOR ()) m09900m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m09900_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m09900_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -705,7 +705,7 @@ KERNEL_FQ void m09900_m16 (KERN_ATTR_VECTOR ()) m09900m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m09900_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m09900_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -745,7 +745,7 @@ KERNEL_FQ void m09900_s04 (KERN_ATTR_VECTOR ()) m09900s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m09900_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m09900_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -785,7 +785,7 @@ KERNEL_FQ void m09900_s08 (KERN_ATTR_VECTOR ()) m09900s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m09900_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m09900_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m09900_a3-pure.cl b/OpenCL/m09900_a3-pure.cl index f76512ed6..6971266ab 100644 --- a/OpenCL/m09900_a3-pure.cl +++ b/OpenCL/m09900_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m09900_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m09900_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void m09900_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m09900_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m09900_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m10100_a0-optimized.cl b/OpenCL/m10100_a0-optimized.cl index 946c47f71..1115a7a98 100644 --- a/OpenCL/m10100_a0-optimized.cl +++ b/OpenCL/m10100_a0-optimized.cl @@ -85,7 +85,7 @@ DECLSPEC u64x siphash_rot32 (const u64x a) (v1) ^= (v2); \ (v2) = siphash_rot32 ((v2)) -KERNEL_FQ void m10100_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10100_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -204,15 +204,15 @@ KERNEL_FQ void m10100_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m10100_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10100_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m10100_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10100_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m10100_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10100_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -343,10 +343,10 @@ KERNEL_FQ void m10100_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m10100_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10100_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m10100_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10100_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m10100_a1-optimized.cl b/OpenCL/m10100_a1-optimized.cl index ca7e5b63d..d9bfcaa85 100644 --- a/OpenCL/m10100_a1-optimized.cl +++ b/OpenCL/m10100_a1-optimized.cl @@ -83,7 +83,7 @@ DECLSPEC u64x siphash_rot32 (const u64x a) (v1) ^= (v2); \ (v2) = siphash_rot32 ((v2)) -KERNEL_FQ void m10100_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10100_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -262,15 +262,15 @@ KERNEL_FQ void m10100_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m10100_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10100_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m10100_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10100_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m10100_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10100_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -461,10 +461,10 @@ KERNEL_FQ void m10100_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m10100_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10100_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m10100_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10100_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m10100_a3-optimized.cl b/OpenCL/m10100_a3-optimized.cl index 26c1e036f..e4fbc766e 100644 --- a/OpenCL/m10100_a3-optimized.cl +++ b/OpenCL/m10100_a3-optimized.cl @@ -276,7 +276,7 @@ DECLSPEC void m10100s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m10100_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10100_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -316,7 +316,7 @@ KERNEL_FQ void m10100_m04 (KERN_ATTR_VECTOR ()) m10100m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10100_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10100_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -356,7 +356,7 @@ KERNEL_FQ void m10100_m08 (KERN_ATTR_VECTOR ()) m10100m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10100_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10100_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -396,7 +396,7 @@ KERNEL_FQ void m10100_m16 (KERN_ATTR_VECTOR ()) m10100m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10100_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10100_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -436,7 +436,7 @@ KERNEL_FQ void m10100_s04 (KERN_ATTR_VECTOR ()) m10100s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10100_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10100_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -476,7 +476,7 @@ KERNEL_FQ void m10100_s08 (KERN_ATTR_VECTOR ()) m10100s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10100_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10100_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m10300-pure.cl b/OpenCL/m10300-pure.cl index 8976ad795..fa73e47d0 100644 --- a/OpenCL/m10300-pure.cl +++ b/OpenCL/m10300-pure.cl @@ -20,7 +20,7 @@ typedef struct saph_sha1_tmp } saph_sha1_tmp_t; -KERNEL_FQ void m10300_init (KERN_ATTR_TMPS (saph_sha1_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m10300_init (KERN_ATTR_TMPS (saph_sha1_tmp_t)) { /** * base @@ -47,7 +47,7 @@ KERNEL_FQ void m10300_init (KERN_ATTR_TMPS (saph_sha1_tmp_t)) tmps[gid].digest_buf[4] = ctx.h[4]; } -KERNEL_FQ void m10300_loop (KERN_ATTR_TMPS (saph_sha1_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m10300_loop (KERN_ATTR_TMPS (saph_sha1_tmp_t)) { /** * base @@ -127,7 +127,7 @@ KERNEL_FQ void m10300_loop (KERN_ATTR_TMPS (saph_sha1_tmp_t)) tmps[gid].digest_buf[4] = digest[4]; } -KERNEL_FQ void m10300_comp (KERN_ATTR_TMPS (saph_sha1_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m10300_comp (KERN_ATTR_TMPS (saph_sha1_tmp_t)) { /** * modifier diff --git a/OpenCL/m10400_a0-optimized.cl b/OpenCL/m10400_a0-optimized.cl index e442a7e8b..a74dac2cf 100644 --- a/OpenCL/m10400_a0-optimized.cl +++ b/OpenCL/m10400_a0-optimized.cl @@ -41,7 +41,7 @@ typedef struct pdf } pdf_t; -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10400_m04 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10400_m04 (KERN_ATTR_RULES_ESALT (pdf_t)) { /** * modifier @@ -223,15 +223,15 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10400_m04 (KERN_ATTR_RULES_ } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10400_m08 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10400_m08 (KERN_ATTR_RULES_ESALT (pdf_t)) { } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10400_m16 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10400_m16 (KERN_ATTR_RULES_ESALT (pdf_t)) { } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10400_s04 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10400_s04 (KERN_ATTR_RULES_ESALT (pdf_t)) { /** * modifier @@ -425,10 +425,10 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10400_s04 (KERN_ATTR_RULES_ } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10400_s08 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10400_s08 (KERN_ATTR_RULES_ESALT (pdf_t)) { } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10400_s16 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10400_s16 (KERN_ATTR_RULES_ESALT (pdf_t)) { } diff --git a/OpenCL/m10400_a1-optimized.cl b/OpenCL/m10400_a1-optimized.cl index 3c0165749..706ba58bc 100644 --- a/OpenCL/m10400_a1-optimized.cl +++ b/OpenCL/m10400_a1-optimized.cl @@ -39,7 +39,7 @@ typedef struct pdf } pdf_t; -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10400_m04 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10400_m04 (KERN_ATTR_ESALT (pdf_t)) { /** * modifier @@ -281,15 +281,15 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10400_m04 (KERN_ATTR_ESALT } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10400_m08 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10400_m08 (KERN_ATTR_ESALT (pdf_t)) { } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10400_m16 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10400_m16 (KERN_ATTR_ESALT (pdf_t)) { } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10400_s04 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10400_s04 (KERN_ATTR_ESALT (pdf_t)) { /** * modifier @@ -543,10 +543,10 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10400_s04 (KERN_ATTR_ESALT } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10400_s08 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10400_s08 (KERN_ATTR_ESALT (pdf_t)) { } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10400_s16 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10400_s16 (KERN_ATTR_ESALT (pdf_t)) { } diff --git a/OpenCL/m10400_a3-optimized.cl b/OpenCL/m10400_a3-optimized.cl index 8687ae809..4f038bbf3 100644 --- a/OpenCL/m10400_a3-optimized.cl +++ b/OpenCL/m10400_a3-optimized.cl @@ -397,7 +397,7 @@ DECLSPEC void m10400s (LOCAL_AS u32 *S, PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10400_m04 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10400_m04 (KERN_ATTR_ESALT (pdf_t)) { /** * base @@ -448,7 +448,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10400_m04 (KERN_ATTR_ESALT m10400m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10400_m08 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10400_m08 (KERN_ATTR_ESALT (pdf_t)) { /** * base @@ -499,7 +499,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10400_m08 (KERN_ATTR_ESALT m10400m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10400_m16 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10400_m16 (KERN_ATTR_ESALT (pdf_t)) { /** * base @@ -550,7 +550,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10400_m16 (KERN_ATTR_ESALT m10400m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10400_s04 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10400_s04 (KERN_ATTR_ESALT (pdf_t)) { /** * base @@ -601,7 +601,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10400_s04 (KERN_ATTR_ESALT m10400s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10400_s08 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10400_s08 (KERN_ATTR_ESALT (pdf_t)) { /** * base @@ -652,7 +652,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10400_s08 (KERN_ATTR_ESALT m10400s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10400_s16 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10400_s16 (KERN_ATTR_ESALT (pdf_t)) { /** * base diff --git a/OpenCL/m10410_a0-optimized.cl b/OpenCL/m10410_a0-optimized.cl index aa1acad0b..a1bde21a9 100644 --- a/OpenCL/m10410_a0-optimized.cl +++ b/OpenCL/m10410_a0-optimized.cl @@ -41,7 +41,7 @@ typedef struct pdf } pdf_t; -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10410_m04 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10410_m04 (KERN_ATTR_RULES_ESALT (pdf_t)) { /** * modifier @@ -120,15 +120,15 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10410_m04 (KERN_ATTR_RULES_ } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10410_m08 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10410_m08 (KERN_ATTR_RULES_ESALT (pdf_t)) { } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10410_m16 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10410_m16 (KERN_ATTR_RULES_ESALT (pdf_t)) { } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10410_s04 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10410_s04 (KERN_ATTR_RULES_ESALT (pdf_t)) { /** * modifier @@ -219,10 +219,10 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10410_s04 (KERN_ATTR_RULES_ } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10410_s08 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10410_s08 (KERN_ATTR_RULES_ESALT (pdf_t)) { } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10410_s16 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10410_s16 (KERN_ATTR_RULES_ESALT (pdf_t)) { } diff --git a/OpenCL/m10410_a1-optimized.cl b/OpenCL/m10410_a1-optimized.cl index b37624c5b..7f51dded5 100644 --- a/OpenCL/m10410_a1-optimized.cl +++ b/OpenCL/m10410_a1-optimized.cl @@ -39,7 +39,7 @@ typedef struct pdf } pdf_t; -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10410_m04 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10410_m04 (KERN_ATTR_ESALT (pdf_t)) { /** * modifier @@ -187,15 +187,15 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10410_m04 (KERN_ATTR_ESALT } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10410_m08 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10410_m08 (KERN_ATTR_ESALT (pdf_t)) { } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10410_m16 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10410_m16 (KERN_ATTR_ESALT (pdf_t)) { } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10410_s04 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10410_s04 (KERN_ATTR_ESALT (pdf_t)) { /** * modifier @@ -355,10 +355,10 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10410_s04 (KERN_ATTR_ESALT } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10410_s08 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10410_s08 (KERN_ATTR_ESALT (pdf_t)) { } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10410_s16 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10410_s16 (KERN_ATTR_ESALT (pdf_t)) { } diff --git a/OpenCL/m10410_a3-optimized.cl b/OpenCL/m10410_a3-optimized.cl index 5e789cca8..fbd8e540e 100644 --- a/OpenCL/m10410_a3-optimized.cl +++ b/OpenCL/m10410_a3-optimized.cl @@ -151,7 +151,7 @@ DECLSPEC void m10410s (LOCAL_AS u32 *S, PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10410_m04 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10410_m04 (KERN_ATTR_ESALT (pdf_t)) { /** * base @@ -202,7 +202,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10410_m04 (KERN_ATTR_ESALT m10410m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10410_m08 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10410_m08 (KERN_ATTR_ESALT (pdf_t)) { /** * base @@ -253,7 +253,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10410_m08 (KERN_ATTR_ESALT m10410m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10410_m16 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10410_m16 (KERN_ATTR_ESALT (pdf_t)) { /** * base @@ -304,7 +304,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10410_m16 (KERN_ATTR_ESALT m10410m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10410_s04 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10410_s04 (KERN_ATTR_ESALT (pdf_t)) { /** * base @@ -355,7 +355,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10410_s04 (KERN_ATTR_ESALT m10410s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10410_s08 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10410_s08 (KERN_ATTR_ESALT (pdf_t)) { /** * base @@ -406,7 +406,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10410_s08 (KERN_ATTR_ESALT m10410s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m10410_s16 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10410_s16 (KERN_ATTR_ESALT (pdf_t)) { /** * base diff --git a/OpenCL/m10420_a0-optimized.cl b/OpenCL/m10420_a0-optimized.cl index 32b1df8c1..89af53096 100644 --- a/OpenCL/m10420_a0-optimized.cl +++ b/OpenCL/m10420_a0-optimized.cl @@ -51,7 +51,7 @@ typedef struct pdf } pdf_t; -KERNEL_FQ void m10420_m04 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10420_m04 (KERN_ATTR_RULES_ESALT (pdf_t)) { /** * modifier @@ -204,15 +204,15 @@ KERNEL_FQ void m10420_m04 (KERN_ATTR_RULES_ESALT (pdf_t)) } } -KERNEL_FQ void m10420_m08 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10420_m08 (KERN_ATTR_RULES_ESALT (pdf_t)) { } -KERNEL_FQ void m10420_m16 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10420_m16 (KERN_ATTR_RULES_ESALT (pdf_t)) { } -KERNEL_FQ void m10420_s04 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10420_s04 (KERN_ATTR_RULES_ESALT (pdf_t)) { /** * modifier @@ -377,10 +377,10 @@ KERNEL_FQ void m10420_s04 (KERN_ATTR_RULES_ESALT (pdf_t)) } } -KERNEL_FQ void m10420_s08 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10420_s08 (KERN_ATTR_RULES_ESALT (pdf_t)) { } -KERNEL_FQ void m10420_s16 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10420_s16 (KERN_ATTR_RULES_ESALT (pdf_t)) { } diff --git a/OpenCL/m10420_a1-optimized.cl b/OpenCL/m10420_a1-optimized.cl index 5c2ef872d..f9124b9fa 100644 --- a/OpenCL/m10420_a1-optimized.cl +++ b/OpenCL/m10420_a1-optimized.cl @@ -49,7 +49,7 @@ typedef struct pdf } pdf_t; -KERNEL_FQ void m10420_m04 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10420_m04 (KERN_ATTR_ESALT (pdf_t)) { /** * modifier @@ -262,15 +262,15 @@ KERNEL_FQ void m10420_m04 (KERN_ATTR_ESALT (pdf_t)) } } -KERNEL_FQ void m10420_m08 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10420_m08 (KERN_ATTR_ESALT (pdf_t)) { } -KERNEL_FQ void m10420_m16 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10420_m16 (KERN_ATTR_ESALT (pdf_t)) { } -KERNEL_FQ void m10420_s04 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10420_s04 (KERN_ATTR_ESALT (pdf_t)) { /** * modifier @@ -495,10 +495,10 @@ KERNEL_FQ void m10420_s04 (KERN_ATTR_ESALT (pdf_t)) } } -KERNEL_FQ void m10420_s08 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10420_s08 (KERN_ATTR_ESALT (pdf_t)) { } -KERNEL_FQ void m10420_s16 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10420_s16 (KERN_ATTR_ESALT (pdf_t)) { } diff --git a/OpenCL/m10420_a3-optimized.cl b/OpenCL/m10420_a3-optimized.cl index 797c7d16b..f5c0c2cdd 100644 --- a/OpenCL/m10420_a3-optimized.cl +++ b/OpenCL/m10420_a3-optimized.cl @@ -361,7 +361,7 @@ DECLSPEC void m10420s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m10420_m04 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10420_m04 (KERN_ATTR_ESALT (pdf_t)) { /** * base @@ -410,7 +410,7 @@ KERNEL_FQ void m10420_m04 (KERN_ATTR_ESALT (pdf_t)) m10420m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10420_m08 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10420_m08 (KERN_ATTR_ESALT (pdf_t)) { /** * base @@ -459,7 +459,7 @@ KERNEL_FQ void m10420_m08 (KERN_ATTR_ESALT (pdf_t)) m10420m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10420_m16 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10420_m16 (KERN_ATTR_ESALT (pdf_t)) { /** * base @@ -508,7 +508,7 @@ KERNEL_FQ void m10420_m16 (KERN_ATTR_ESALT (pdf_t)) m10420m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10420_s04 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10420_s04 (KERN_ATTR_ESALT (pdf_t)) { /** * base @@ -557,7 +557,7 @@ KERNEL_FQ void m10420_s04 (KERN_ATTR_ESALT (pdf_t)) m10420s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10420_s08 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10420_s08 (KERN_ATTR_ESALT (pdf_t)) { /** * base @@ -606,7 +606,7 @@ KERNEL_FQ void m10420_s08 (KERN_ATTR_ESALT (pdf_t)) m10420s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10420_s16 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10420_s16 (KERN_ATTR_ESALT (pdf_t)) { /** * base diff --git a/OpenCL/m10500-pure.cl b/OpenCL/m10500-pure.cl index f45c40d42..a21205911 100644 --- a/OpenCL/m10500-pure.cl +++ b/OpenCL/m10500-pure.cl @@ -45,7 +45,7 @@ typedef struct pdf14_tmp } pdf14_tmp_t; -KERNEL_FQ void m10500_init (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10500_init (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t)) { /** * base @@ -232,7 +232,7 @@ KERNEL_FQ void m10500_init (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t)) tmps[gid].out[3] = 0; } -KERNEL_FQ void m10500_loop (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10500_loop (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t)) { /** * base @@ -333,7 +333,7 @@ KERNEL_FQ void m10500_loop (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t)) tmps[gid].out[3] = out[3]; } -KERNEL_FQ void m10500_comp (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10500_comp (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t)) { /** * modifier diff --git a/OpenCL/m10700-optimized.cl b/OpenCL/m10700-optimized.cl index 10ebfcac8..945f8bb93 100644 --- a/OpenCL/m10700-optimized.cl +++ b/OpenCL/m10700-optimized.cl @@ -563,7 +563,7 @@ DECLSPEC u32 do_round (LOCAL_AS u32 *sc, PRIVATE_AS const u32 *pw, const u32 pw_ return ex; } -KERNEL_FQ void m10700_init (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10700_init (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf_t)) { /** * base @@ -595,7 +595,7 @@ KERNEL_FQ void m10700_init (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf_t)) tmps[gid].W_len = WORDSZ256; } -KERNEL_FQ void m10700_loop (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10700_loop (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -695,7 +695,7 @@ KERNEL_FQ void m10700_loop (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf_t)) tmps[gid].W_len = ctx.W_len; } -KERNEL_FQ void m10700_comp (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10700_comp (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf_t)) { /** * modifier diff --git a/OpenCL/m10700-pure.cl b/OpenCL/m10700-pure.cl index 327c76e71..e43c9fb7e 100644 --- a/OpenCL/m10700-pure.cl +++ b/OpenCL/m10700-pure.cl @@ -1167,7 +1167,7 @@ DECLSPEC u32 do_round (PRIVATE_AS const u32 *w, const u32 pw_len, PRIVATE_AS pdf return ex; } -KERNEL_FQ void m10700_init (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10700_init (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf_t)) { /** * base @@ -1211,7 +1211,7 @@ KERNEL_FQ void m10700_init (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf_t)) tmps[gid] = tmp; } -KERNEL_FQ void m10700_loop (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10700_loop (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -1289,7 +1289,7 @@ KERNEL_FQ void m10700_loop (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf_t)) tmps[gid] = tmp; } -KERNEL_FQ void m10700_comp (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m10700_comp (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf_t)) { /** * modifier diff --git a/OpenCL/m10800_a0-optimized.cl b/OpenCL/m10800_a0-optimized.cl index 4825f106d..ba060d8e9 100644 --- a/OpenCL/m10800_a0-optimized.cl +++ b/OpenCL/m10800_a0-optimized.cl @@ -122,7 +122,7 @@ DECLSPEC void sha384_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = 0; } -KERNEL_FQ void m10800_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10800_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -215,15 +215,15 @@ KERNEL_FQ void m10800_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m10800_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10800_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m10800_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10800_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m10800_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10800_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -328,10 +328,10 @@ KERNEL_FQ void m10800_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m10800_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10800_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m10800_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10800_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m10800_a0-pure.cl b/OpenCL/m10800_a0-pure.cl index 665d0fe0c..7cec38cab 100644 --- a/OpenCL/m10800_a0-pure.cl +++ b/OpenCL/m10800_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void m10800_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10800_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void m10800_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m10800_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10800_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m10800_a1-optimized.cl b/OpenCL/m10800_a1-optimized.cl index ad3321401..e640bbbd1 100644 --- a/OpenCL/m10800_a1-optimized.cl +++ b/OpenCL/m10800_a1-optimized.cl @@ -120,7 +120,7 @@ DECLSPEC void sha384_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = 0; } -KERNEL_FQ void m10800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10800_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -271,15 +271,15 @@ KERNEL_FQ void m10800_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m10800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10800_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m10800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10800_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m10800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10800_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -442,10 +442,10 @@ KERNEL_FQ void m10800_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m10800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10800_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m10800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10800_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m10800_a1-pure.cl b/OpenCL/m10800_a1-pure.cl index 827093244..233b85fa4 100644 --- a/OpenCL/m10800_a1-pure.cl +++ b/OpenCL/m10800_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void m10800_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10800_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void m10800_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m10800_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10800_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m10800_a3-optimized.cl b/OpenCL/m10800_a3-optimized.cl index 371e024d2..6f0938e61 100644 --- a/OpenCL/m10800_a3-optimized.cl +++ b/OpenCL/m10800_a3-optimized.cl @@ -256,7 +256,7 @@ DECLSPEC void m10800s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m10800_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10800_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -296,7 +296,7 @@ KERNEL_FQ void m10800_m04 (KERN_ATTR_VECTOR ()) m10800m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10800_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10800_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -336,7 +336,7 @@ KERNEL_FQ void m10800_m08 (KERN_ATTR_VECTOR ()) m10800m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10800_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10800_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -376,7 +376,7 @@ KERNEL_FQ void m10800_m16 (KERN_ATTR_VECTOR ()) m10800m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10800_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10800_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -416,7 +416,7 @@ KERNEL_FQ void m10800_s04 (KERN_ATTR_VECTOR ()) m10800s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10800_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10800_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -456,7 +456,7 @@ KERNEL_FQ void m10800_s08 (KERN_ATTR_VECTOR ()) m10800s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10800_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10800_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m10800_a3-pure.cl b/OpenCL/m10800_a3-pure.cl index a1c0213c2..0665e1bc5 100644 --- a/OpenCL/m10800_a3-pure.cl +++ b/OpenCL/m10800_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void m10800_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10800_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void m10800_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m10800_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10800_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m10810_a0-optimized.cl b/OpenCL/m10810_a0-optimized.cl index 9bee00928..619349678 100644 --- a/OpenCL/m10810_a0-optimized.cl +++ b/OpenCL/m10810_a0-optimized.cl @@ -122,7 +122,7 @@ DECLSPEC void sha384_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = 0; } -KERNEL_FQ void m10810_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10810_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -288,15 +288,15 @@ KERNEL_FQ void m10810_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m10810_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10810_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m10810_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10810_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m10810_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10810_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -474,10 +474,10 @@ KERNEL_FQ void m10810_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m10810_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10810_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m10810_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10810_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m10810_a0-pure.cl b/OpenCL/m10810_a0-pure.cl index 5ba543ff4..d1c437948 100644 --- a/OpenCL/m10810_a0-pure.cl +++ b/OpenCL/m10810_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void m10810_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10810_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void m10810_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m10810_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10810_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m10810_a1-optimized.cl b/OpenCL/m10810_a1-optimized.cl index 76c6fc3d1..928f50b27 100644 --- a/OpenCL/m10810_a1-optimized.cl +++ b/OpenCL/m10810_a1-optimized.cl @@ -120,7 +120,7 @@ DECLSPEC void sha384_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = 0; } -KERNEL_FQ void m10810_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10810_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -346,15 +346,15 @@ KERNEL_FQ void m10810_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m10810_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10810_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m10810_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10810_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m10810_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10810_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -592,10 +592,10 @@ KERNEL_FQ void m10810_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m10810_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10810_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m10810_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10810_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m10810_a1-pure.cl b/OpenCL/m10810_a1-pure.cl index 31a34e647..c310dad31 100644 --- a/OpenCL/m10810_a1-pure.cl +++ b/OpenCL/m10810_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void m10810_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10810_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -67,7 +67,7 @@ KERNEL_FQ void m10810_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m10810_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10810_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m10810_a3-optimized.cl b/OpenCL/m10810_a3-optimized.cl index c4be02491..461cd593e 100644 --- a/OpenCL/m10810_a3-optimized.cl +++ b/OpenCL/m10810_a3-optimized.cl @@ -307,7 +307,7 @@ DECLSPEC void m10810s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m10810_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10810_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -347,7 +347,7 @@ KERNEL_FQ void m10810_m04 (KERN_ATTR_VECTOR ()) m10810m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10810_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10810_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -387,7 +387,7 @@ KERNEL_FQ void m10810_m08 (KERN_ATTR_VECTOR ()) m10810m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10810_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10810_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -427,7 +427,7 @@ KERNEL_FQ void m10810_m16 (KERN_ATTR_VECTOR ()) m10810m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10810_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10810_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -467,7 +467,7 @@ KERNEL_FQ void m10810_s04 (KERN_ATTR_VECTOR ()) m10810s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10810_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10810_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -507,7 +507,7 @@ KERNEL_FQ void m10810_s08 (KERN_ATTR_VECTOR ()) m10810s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10810_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10810_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m10810_a3-pure.cl b/OpenCL/m10810_a3-pure.cl index 334370c7b..2cb82c2b0 100644 --- a/OpenCL/m10810_a3-pure.cl +++ b/OpenCL/m10810_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void m10810_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10810_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void m10810_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m10810_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10810_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m10820_a0-optimized.cl b/OpenCL/m10820_a0-optimized.cl index 2fd131708..7fbce095c 100644 --- a/OpenCL/m10820_a0-optimized.cl +++ b/OpenCL/m10820_a0-optimized.cl @@ -122,7 +122,7 @@ DECLSPEC void sha384_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = 0; } -KERNEL_FQ void m10820_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10820_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -268,15 +268,15 @@ KERNEL_FQ void m10820_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m10820_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10820_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m10820_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10820_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m10820_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10820_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -434,10 +434,10 @@ KERNEL_FQ void m10820_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m10820_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10820_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m10820_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10820_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m10820_a0-pure.cl b/OpenCL/m10820_a0-pure.cl index dcb959972..8abd99158 100644 --- a/OpenCL/m10820_a0-pure.cl +++ b/OpenCL/m10820_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void m10820_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10820_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -64,7 +64,7 @@ KERNEL_FQ void m10820_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m10820_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10820_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m10820_a1-optimized.cl b/OpenCL/m10820_a1-optimized.cl index beb234e13..11dff838f 100644 --- a/OpenCL/m10820_a1-optimized.cl +++ b/OpenCL/m10820_a1-optimized.cl @@ -120,7 +120,7 @@ DECLSPEC void sha384_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = 0; } -KERNEL_FQ void m10820_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10820_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -324,15 +324,15 @@ KERNEL_FQ void m10820_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m10820_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10820_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m10820_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10820_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m10820_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10820_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -548,10 +548,10 @@ KERNEL_FQ void m10820_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m10820_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10820_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m10820_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10820_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m10820_a1-pure.cl b/OpenCL/m10820_a1-pure.cl index a58b437a4..56ebe7666 100644 --- a/OpenCL/m10820_a1-pure.cl +++ b/OpenCL/m10820_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void m10820_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10820_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -58,7 +58,7 @@ KERNEL_FQ void m10820_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m10820_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10820_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m10820_a3-optimized.cl b/OpenCL/m10820_a3-optimized.cl index 3b6ccedd9..cb24d336d 100644 --- a/OpenCL/m10820_a3-optimized.cl +++ b/OpenCL/m10820_a3-optimized.cl @@ -362,7 +362,7 @@ DECLSPEC void m10820s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_BASIC } } -KERNEL_FQ void m10820_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10820_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -402,7 +402,7 @@ KERNEL_FQ void m10820_m04 (KERN_ATTR_BASIC ()) m10820m (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10820_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10820_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -442,7 +442,7 @@ KERNEL_FQ void m10820_m08 (KERN_ATTR_BASIC ()) m10820m (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10820_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10820_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -482,7 +482,7 @@ KERNEL_FQ void m10820_m16 (KERN_ATTR_BASIC ()) m10820m (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10820_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10820_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -522,7 +522,7 @@ KERNEL_FQ void m10820_s04 (KERN_ATTR_BASIC ()) m10820s (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10820_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10820_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -562,7 +562,7 @@ KERNEL_FQ void m10820_s08 (KERN_ATTR_BASIC ()) m10820s (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10820_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10820_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m10820_a3-pure.cl b/OpenCL/m10820_a3-pure.cl index 542612a8b..e82851561 100644 --- a/OpenCL/m10820_a3-pure.cl +++ b/OpenCL/m10820_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void m10820_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10820_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -75,7 +75,7 @@ KERNEL_FQ void m10820_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m10820_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10820_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m10830_a0-optimized.cl b/OpenCL/m10830_a0-optimized.cl index de034f608..3a7a8d9ad 100644 --- a/OpenCL/m10830_a0-optimized.cl +++ b/OpenCL/m10830_a0-optimized.cl @@ -122,7 +122,7 @@ DECLSPEC void sha384_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = 0; } -KERNEL_FQ void m10830_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10830_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -293,15 +293,15 @@ KERNEL_FQ void m10830_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m10830_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10830_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m10830_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10830_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m10830_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10830_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -484,10 +484,10 @@ KERNEL_FQ void m10830_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m10830_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10830_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m10830_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10830_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m10830_a0-pure.cl b/OpenCL/m10830_a0-pure.cl index 9f8c33c07..783d505b3 100644 --- a/OpenCL/m10830_a0-pure.cl +++ b/OpenCL/m10830_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void m10830_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10830_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void m10830_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m10830_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10830_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m10830_a1-optimized.cl b/OpenCL/m10830_a1-optimized.cl index a98dca237..51895bb94 100644 --- a/OpenCL/m10830_a1-optimized.cl +++ b/OpenCL/m10830_a1-optimized.cl @@ -120,7 +120,7 @@ DECLSPEC void sha384_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = 0; } -KERNEL_FQ void m10830_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10830_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -351,15 +351,15 @@ KERNEL_FQ void m10830_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m10830_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10830_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m10830_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10830_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m10830_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10830_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -602,10 +602,10 @@ KERNEL_FQ void m10830_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m10830_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10830_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m10830_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10830_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m10830_a1-pure.cl b/OpenCL/m10830_a1-pure.cl index 23c2954f8..205a85654 100644 --- a/OpenCL/m10830_a1-pure.cl +++ b/OpenCL/m10830_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void m10830_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10830_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -67,7 +67,7 @@ KERNEL_FQ void m10830_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m10830_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10830_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m10830_a3-optimized.cl b/OpenCL/m10830_a3-optimized.cl index 9e1177f40..41fb2e780 100644 --- a/OpenCL/m10830_a3-optimized.cl +++ b/OpenCL/m10830_a3-optimized.cl @@ -307,7 +307,7 @@ DECLSPEC void m10830s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m10830_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10830_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -347,7 +347,7 @@ KERNEL_FQ void m10830_m04 (KERN_ATTR_VECTOR ()) m10830m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10830_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10830_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -387,7 +387,7 @@ KERNEL_FQ void m10830_m08 (KERN_ATTR_VECTOR ()) m10830m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10830_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10830_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -427,7 +427,7 @@ KERNEL_FQ void m10830_m16 (KERN_ATTR_VECTOR ()) m10830m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10830_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10830_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -467,7 +467,7 @@ KERNEL_FQ void m10830_s04 (KERN_ATTR_VECTOR ()) m10830s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10830_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10830_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -507,7 +507,7 @@ KERNEL_FQ void m10830_s08 (KERN_ATTR_VECTOR ()) m10830s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10830_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10830_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m10830_a3-pure.cl b/OpenCL/m10830_a3-pure.cl index 052523e08..12784b957 100644 --- a/OpenCL/m10830_a3-pure.cl +++ b/OpenCL/m10830_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void m10830_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10830_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void m10830_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m10830_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10830_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m10840_a0-optimized.cl b/OpenCL/m10840_a0-optimized.cl index 6629619d2..4e124ed6d 100644 --- a/OpenCL/m10840_a0-optimized.cl +++ b/OpenCL/m10840_a0-optimized.cl @@ -122,7 +122,7 @@ DECLSPEC void sha384_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = 0; } -KERNEL_FQ void m10840_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10840_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -273,15 +273,15 @@ KERNEL_FQ void m10840_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m10840_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10840_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m10840_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10840_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m10840_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10840_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -444,10 +444,10 @@ KERNEL_FQ void m10840_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m10840_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10840_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m10840_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10840_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m10840_a0-pure.cl b/OpenCL/m10840_a0-pure.cl index 531da18b0..9011ae561 100644 --- a/OpenCL/m10840_a0-pure.cl +++ b/OpenCL/m10840_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void m10840_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10840_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -64,7 +64,7 @@ KERNEL_FQ void m10840_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m10840_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10840_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m10840_a1-optimized.cl b/OpenCL/m10840_a1-optimized.cl index 8ec344beb..839107c4b 100644 --- a/OpenCL/m10840_a1-optimized.cl +++ b/OpenCL/m10840_a1-optimized.cl @@ -120,7 +120,7 @@ DECLSPEC void sha384_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = 0; } -KERNEL_FQ void m10840_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10840_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -329,15 +329,15 @@ KERNEL_FQ void m10840_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m10840_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10840_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m10840_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10840_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m10840_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10840_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -558,10 +558,10 @@ KERNEL_FQ void m10840_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m10840_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10840_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m10840_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10840_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m10840_a1-pure.cl b/OpenCL/m10840_a1-pure.cl index 4dd8ba1c3..60faf375b 100644 --- a/OpenCL/m10840_a1-pure.cl +++ b/OpenCL/m10840_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void m10840_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10840_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -58,7 +58,7 @@ KERNEL_FQ void m10840_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m10840_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10840_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m10840_a3-optimized.cl b/OpenCL/m10840_a3-optimized.cl index 8f05f4bd9..74e797a51 100644 --- a/OpenCL/m10840_a3-optimized.cl +++ b/OpenCL/m10840_a3-optimized.cl @@ -362,7 +362,7 @@ DECLSPEC void m10840s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_BASIC } } -KERNEL_FQ void m10840_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10840_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -402,7 +402,7 @@ KERNEL_FQ void m10840_m04 (KERN_ATTR_BASIC ()) m10840m (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10840_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10840_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -442,7 +442,7 @@ KERNEL_FQ void m10840_m08 (KERN_ATTR_BASIC ()) m10840m (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10840_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10840_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -482,7 +482,7 @@ KERNEL_FQ void m10840_m16 (KERN_ATTR_BASIC ()) m10840m (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10840_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10840_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -522,7 +522,7 @@ KERNEL_FQ void m10840_s04 (KERN_ATTR_BASIC ()) m10840s (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10840_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10840_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -562,7 +562,7 @@ KERNEL_FQ void m10840_s08 (KERN_ATTR_BASIC ()) m10840s (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10840_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10840_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m10840_a3-pure.cl b/OpenCL/m10840_a3-pure.cl index 4469efe45..88be817f1 100644 --- a/OpenCL/m10840_a3-pure.cl +++ b/OpenCL/m10840_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void m10840_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10840_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -75,7 +75,7 @@ KERNEL_FQ void m10840_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m10840_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10840_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m10870_a0-optimized.cl b/OpenCL/m10870_a0-optimized.cl index ed2c4b80c..d2e5e77d5 100644 --- a/OpenCL/m10870_a0-optimized.cl +++ b/OpenCL/m10870_a0-optimized.cl @@ -122,7 +122,7 @@ DECLSPEC void sha384_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = 0; } -KERNEL_FQ void m10870_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10870_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -220,15 +220,15 @@ KERNEL_FQ void m10870_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m10870_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10870_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m10870_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10870_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m10870_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10870_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -338,10 +338,10 @@ KERNEL_FQ void m10870_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m10870_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10870_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m10870_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10870_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m10870_a0-pure.cl b/OpenCL/m10870_a0-pure.cl index aacfffea5..88c8c3af4 100644 --- a/OpenCL/m10870_a0-pure.cl +++ b/OpenCL/m10870_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void m10870_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10870_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void m10870_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m10870_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m10870_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m10870_a1-optimized.cl b/OpenCL/m10870_a1-optimized.cl index d4a08c550..8bba3c7f3 100644 --- a/OpenCL/m10870_a1-optimized.cl +++ b/OpenCL/m10870_a1-optimized.cl @@ -120,7 +120,7 @@ DECLSPEC void sha384_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = 0; } -KERNEL_FQ void m10870_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10870_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -276,15 +276,15 @@ KERNEL_FQ void m10870_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m10870_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10870_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m10870_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10870_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m10870_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10870_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -452,10 +452,10 @@ KERNEL_FQ void m10870_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m10870_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10870_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m10870_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10870_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m10870_a1-pure.cl b/OpenCL/m10870_a1-pure.cl index 659c1c06c..a178dbf58 100644 --- a/OpenCL/m10870_a1-pure.cl +++ b/OpenCL/m10870_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void m10870_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10870_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void m10870_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m10870_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m10870_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m10870_a3-optimized.cl b/OpenCL/m10870_a3-optimized.cl index 3a24df3bb..3f291d6f8 100644 --- a/OpenCL/m10870_a3-optimized.cl +++ b/OpenCL/m10870_a3-optimized.cl @@ -256,7 +256,7 @@ DECLSPEC void m10870s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m10870_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10870_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -296,7 +296,7 @@ KERNEL_FQ void m10870_m04 (KERN_ATTR_VECTOR ()) m10870m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10870_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10870_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -336,7 +336,7 @@ KERNEL_FQ void m10870_m08 (KERN_ATTR_VECTOR ()) m10870m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10870_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10870_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -376,7 +376,7 @@ KERNEL_FQ void m10870_m16 (KERN_ATTR_VECTOR ()) m10870m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10870_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10870_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -416,7 +416,7 @@ KERNEL_FQ void m10870_s04 (KERN_ATTR_VECTOR ()) m10870s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10870_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10870_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -456,7 +456,7 @@ KERNEL_FQ void m10870_s08 (KERN_ATTR_VECTOR ()) m10870s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m10870_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10870_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m10870_a3-pure.cl b/OpenCL/m10870_a3-pure.cl index 26dbae7c1..2196964d6 100644 --- a/OpenCL/m10870_a3-pure.cl +++ b/OpenCL/m10870_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void m10870_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10870_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void m10870_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m10870_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m10870_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m10900-pure.cl b/OpenCL/m10900-pure.cl index 009715af6..261555f19 100644 --- a/OpenCL/m10900-pure.cl +++ b/OpenCL/m10900-pure.cl @@ -75,7 +75,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m10900_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) +KERNEL_FQ void HC_ATTR_SEQ m10900_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) { /** * base @@ -159,7 +159,7 @@ KERNEL_FQ void m10900_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sh } } -KERNEL_FQ void m10900_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) +KERNEL_FQ void HC_ATTR_SEQ m10900_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) { const u64 gid = get_global_id (0); @@ -265,7 +265,7 @@ KERNEL_FQ void m10900_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sh } } -KERNEL_FQ void m10900_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) +KERNEL_FQ void HC_ATTR_SEQ m10900_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) { /** * base diff --git a/OpenCL/m11000_a0-optimized.cl b/OpenCL/m11000_a0-optimized.cl index 05bf90ac3..0cb23bc5f 100644 --- a/OpenCL/m11000_a0-optimized.cl +++ b/OpenCL/m11000_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m11000_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11000_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -305,15 +305,15 @@ KERNEL_FQ void m11000_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m11000_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11000_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m11000_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11000_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m11000_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11000_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -614,10 +614,10 @@ KERNEL_FQ void m11000_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m11000_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11000_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m11000_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11000_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m11000_a0-pure.cl b/OpenCL/m11000_a0-pure.cl index 6969c2929..b4b9ecc80 100644 --- a/OpenCL/m11000_a0-pure.cl +++ b/OpenCL/m11000_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m11000_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11000_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -64,7 +64,7 @@ KERNEL_FQ void m11000_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m11000_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11000_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m11000_a1-optimized.cl b/OpenCL/m11000_a1-optimized.cl index 2500deba6..d7cf4abcb 100644 --- a/OpenCL/m11000_a1-optimized.cl +++ b/OpenCL/m11000_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m11000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11000_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -361,15 +361,15 @@ KERNEL_FQ void m11000_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m11000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11000_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m11000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11000_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m11000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11000_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -728,10 +728,10 @@ KERNEL_FQ void m11000_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m11000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11000_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m11000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11000_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m11000_a1-pure.cl b/OpenCL/m11000_a1-pure.cl index 906c5bcfd..36ccb13b7 100644 --- a/OpenCL/m11000_a1-pure.cl +++ b/OpenCL/m11000_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m11000_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11000_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -58,7 +58,7 @@ KERNEL_FQ void m11000_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m11000_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11000_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m11000_a3-optimized.cl b/OpenCL/m11000_a3-optimized.cl index a7cb4055a..73216677d 100644 --- a/OpenCL/m11000_a3-optimized.cl +++ b/OpenCL/m11000_a3-optimized.cl @@ -550,7 +550,7 @@ DECLSPEC void m11000s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m11000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11000_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -599,7 +599,7 @@ KERNEL_FQ void m11000_m04 (KERN_ATTR_BASIC ()) m11000m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m11000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11000_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -648,7 +648,7 @@ KERNEL_FQ void m11000_m08 (KERN_ATTR_BASIC ()) m11000m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m11000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11000_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -697,7 +697,7 @@ KERNEL_FQ void m11000_m16 (KERN_ATTR_BASIC ()) m11000m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m11000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11000_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -746,7 +746,7 @@ KERNEL_FQ void m11000_s04 (KERN_ATTR_BASIC ()) m11000s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m11000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11000_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -795,7 +795,7 @@ KERNEL_FQ void m11000_s08 (KERN_ATTR_BASIC ()) m11000s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m11000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11000_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m11000_a3-pure.cl b/OpenCL/m11000_a3-pure.cl index 21cea2c2d..20fcd77ae 100644 --- a/OpenCL/m11000_a3-pure.cl +++ b/OpenCL/m11000_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m11000_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m11000_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -75,7 +75,7 @@ KERNEL_FQ void m11000_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m11000_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m11000_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m11100_a0-optimized.cl b/OpenCL/m11100_a0-optimized.cl index 23ba22a5a..353208664 100644 --- a/OpenCL/m11100_a0-optimized.cl +++ b/OpenCL/m11100_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m11100_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11100_m04 (KERN_ATTR_RULES ()) { /** * base @@ -354,15 +354,15 @@ KERNEL_FQ void m11100_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m11100_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11100_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m11100_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11100_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m11100_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11100_s04 (KERN_ATTR_RULES ()) { /** * base @@ -703,10 +703,10 @@ KERNEL_FQ void m11100_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m11100_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11100_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m11100_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11100_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m11100_a0-pure.cl b/OpenCL/m11100_a0-pure.cl index ed8221ae7..e924cf779 100644 --- a/OpenCL/m11100_a0-pure.cl +++ b/OpenCL/m11100_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m11100_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11100_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -174,7 +174,7 @@ KERNEL_FQ void m11100_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m11100_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11100_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m11100_a1-optimized.cl b/OpenCL/m11100_a1-optimized.cl index 015a2fdf4..6b93cf1aa 100644 --- a/OpenCL/m11100_a1-optimized.cl +++ b/OpenCL/m11100_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m11100_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11100_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -412,15 +412,15 @@ KERNEL_FQ void m11100_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m11100_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11100_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m11100_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11100_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m11100_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11100_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -821,10 +821,10 @@ KERNEL_FQ void m11100_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m11100_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11100_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m11100_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11100_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m11100_a1-pure.cl b/OpenCL/m11100_a1-pure.cl index e2189be2d..9fc017665 100644 --- a/OpenCL/m11100_a1-pure.cl +++ b/OpenCL/m11100_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m11100_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11100_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -170,7 +170,7 @@ KERNEL_FQ void m11100_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m11100_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11100_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m11100_a3-optimized.cl b/OpenCL/m11100_a3-optimized.cl index af87664e3..96256abdd 100644 --- a/OpenCL/m11100_a3-optimized.cl +++ b/OpenCL/m11100_a3-optimized.cl @@ -645,7 +645,7 @@ DECLSPEC void m11100s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m11100_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11100_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -715,7 +715,7 @@ KERNEL_FQ void m11100_m04 (KERN_ATTR_BASIC ()) m11100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m11100_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11100_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -785,7 +785,7 @@ KERNEL_FQ void m11100_m08 (KERN_ATTR_BASIC ()) m11100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m11100_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11100_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -855,7 +855,7 @@ KERNEL_FQ void m11100_m16 (KERN_ATTR_BASIC ()) m11100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m11100_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11100_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -925,7 +925,7 @@ KERNEL_FQ void m11100_s04 (KERN_ATTR_BASIC ()) m11100s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m11100_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11100_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -995,7 +995,7 @@ KERNEL_FQ void m11100_s08 (KERN_ATTR_BASIC ()) m11100s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m11100_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11100_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m11100_a3-pure.cl b/OpenCL/m11100_a3-pure.cl index cdb063f02..f9c1174a6 100644 --- a/OpenCL/m11100_a3-pure.cl +++ b/OpenCL/m11100_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m11100_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m11100_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -213,7 +213,7 @@ KERNEL_FQ void m11100_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m11100_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m11100_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m11200_a0-optimized.cl b/OpenCL/m11200_a0-optimized.cl index 9cf4eb094..c10a3c12b 100644 --- a/OpenCL/m11200_a0-optimized.cl +++ b/OpenCL/m11200_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m11200_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11200_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -470,15 +470,15 @@ KERNEL_FQ void m11200_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m11200_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11200_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m11200_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11200_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m11200_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11200_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -944,10 +944,10 @@ KERNEL_FQ void m11200_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m11200_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11200_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m11200_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11200_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m11200_a0-pure.cl b/OpenCL/m11200_a0-pure.cl index 8fcb68a08..1e723af07 100644 --- a/OpenCL/m11200_a0-pure.cl +++ b/OpenCL/m11200_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m11200_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11200_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -132,7 +132,7 @@ KERNEL_FQ void m11200_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m11200_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11200_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m11200_a1-optimized.cl b/OpenCL/m11200_a1-optimized.cl index 67bd63aef..5821478a6 100644 --- a/OpenCL/m11200_a1-optimized.cl +++ b/OpenCL/m11200_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m11200_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11200_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -526,15 +526,15 @@ KERNEL_FQ void m11200_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m11200_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11200_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m11200_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11200_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m11200_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11200_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -1058,10 +1058,10 @@ KERNEL_FQ void m11200_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m11200_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11200_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m11200_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11200_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m11200_a1-pure.cl b/OpenCL/m11200_a1-pure.cl index 051348f67..99edaf1b9 100644 --- a/OpenCL/m11200_a1-pure.cl +++ b/OpenCL/m11200_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m11200_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11200_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -128,7 +128,7 @@ KERNEL_FQ void m11200_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m11200_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11200_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m11200_a3-optimized.cl b/OpenCL/m11200_a3-optimized.cl index e74a76733..296d23fb2 100644 --- a/OpenCL/m11200_a3-optimized.cl +++ b/OpenCL/m11200_a3-optimized.cl @@ -880,7 +880,7 @@ DECLSPEC void m11200s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m11200_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11200_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -933,7 +933,7 @@ KERNEL_FQ void m11200_m04 (KERN_ATTR_BASIC ()) m11200m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m11200_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11200_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -986,7 +986,7 @@ KERNEL_FQ void m11200_m08 (KERN_ATTR_BASIC ()) m11200m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m11200_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11200_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -1039,7 +1039,7 @@ KERNEL_FQ void m11200_m16 (KERN_ATTR_BASIC ()) m11200m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m11200_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11200_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1092,7 +1092,7 @@ KERNEL_FQ void m11200_s04 (KERN_ATTR_BASIC ()) m11200s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m11200_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11200_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1145,7 +1145,7 @@ KERNEL_FQ void m11200_s08 (KERN_ATTR_BASIC ()) m11200s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m11200_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11200_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m11200_a3-pure.cl b/OpenCL/m11200_a3-pure.cl index 79524b5cf..170403f6e 100644 --- a/OpenCL/m11200_a3-pure.cl +++ b/OpenCL/m11200_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m11200_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m11200_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -155,7 +155,7 @@ KERNEL_FQ void m11200_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m11200_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m11200_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m11300-pure.cl b/OpenCL/m11300-pure.cl index 074d91797..119dddd94 100644 --- a/OpenCL/m11300-pure.cl +++ b/OpenCL/m11300-pure.cl @@ -89,7 +89,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void m11300_init (KERN_ATTR_TMPS_ESALT (bitcoin_wallet_tmp_t, bitcoin_wallet_t)) +KERNEL_FQ void HC_ATTR_SEQ m11300_init (KERN_ATTR_TMPS_ESALT (bitcoin_wallet_tmp_t, bitcoin_wallet_t)) { /** * base @@ -119,7 +119,7 @@ KERNEL_FQ void m11300_init (KERN_ATTR_TMPS_ESALT (bitcoin_wallet_tmp_t, bitcoin_ tmps[gid].dgst[7] = ctx.h[7]; } -KERNEL_FQ void m11300_loop (KERN_ATTR_TMPS_ESALT (bitcoin_wallet_tmp_t, bitcoin_wallet_t)) +KERNEL_FQ void HC_ATTR_SEQ m11300_loop (KERN_ATTR_TMPS_ESALT (bitcoin_wallet_tmp_t, bitcoin_wallet_t)) { const u64 gid = get_global_id (0); @@ -211,7 +211,7 @@ KERNEL_FQ void m11300_loop (KERN_ATTR_TMPS_ESALT (bitcoin_wallet_tmp_t, bitcoin_ unpack64v (tmps, dgst, gid, 7, t7); } -KERNEL_FQ void m11300_comp (KERN_ATTR_TMPS_ESALT (bitcoin_wallet_tmp_t, bitcoin_wallet_t)) +KERNEL_FQ void HC_ATTR_SEQ m11300_comp (KERN_ATTR_TMPS_ESALT (bitcoin_wallet_tmp_t, bitcoin_wallet_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m11400_a0-pure.cl b/OpenCL/m11400_a0-pure.cl index e0cb1171d..6e55285df 100644 --- a/OpenCL/m11400_a0-pure.cl +++ b/OpenCL/m11400_a0-pure.cl @@ -38,7 +38,7 @@ typedef struct sip #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m11400_mxx (KERN_ATTR_RULES_ESALT (sip_t)) +KERNEL_FQ void HC_ATTR_SEQ m11400_mxx (KERN_ATTR_RULES_ESALT (sip_t)) { /** * modifier @@ -136,7 +136,7 @@ KERNEL_FQ void m11400_mxx (KERN_ATTR_RULES_ESALT (sip_t)) } } -KERNEL_FQ void m11400_sxx (KERN_ATTR_RULES_ESALT (sip_t)) +KERNEL_FQ void HC_ATTR_SEQ m11400_sxx (KERN_ATTR_RULES_ESALT (sip_t)) { /** * modifier diff --git a/OpenCL/m11400_a1-pure.cl b/OpenCL/m11400_a1-pure.cl index 253f63d58..091c1aa3d 100644 --- a/OpenCL/m11400_a1-pure.cl +++ b/OpenCL/m11400_a1-pure.cl @@ -36,7 +36,7 @@ typedef struct sip #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m11400_mxx (KERN_ATTR_ESALT (sip_t)) +KERNEL_FQ void HC_ATTR_SEQ m11400_mxx (KERN_ATTR_ESALT (sip_t)) { /** * modifier @@ -130,7 +130,7 @@ KERNEL_FQ void m11400_mxx (KERN_ATTR_ESALT (sip_t)) } } -KERNEL_FQ void m11400_sxx (KERN_ATTR_ESALT (sip_t)) +KERNEL_FQ void HC_ATTR_SEQ m11400_sxx (KERN_ATTR_ESALT (sip_t)) { /** * modifier diff --git a/OpenCL/m11400_a3-pure.cl b/OpenCL/m11400_a3-pure.cl index cf11f9295..8eef3eca5 100644 --- a/OpenCL/m11400_a3-pure.cl +++ b/OpenCL/m11400_a3-pure.cl @@ -36,7 +36,7 @@ typedef struct sip #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m11400_mxx (KERN_ATTR_VECTOR_ESALT (sip_t)) +KERNEL_FQ void HC_ATTR_SEQ m11400_mxx (KERN_ATTR_VECTOR_ESALT (sip_t)) { /** * modifier @@ -156,7 +156,7 @@ KERNEL_FQ void m11400_mxx (KERN_ATTR_VECTOR_ESALT (sip_t)) } } -KERNEL_FQ void m11400_sxx (KERN_ATTR_VECTOR_ESALT (sip_t)) +KERNEL_FQ void HC_ATTR_SEQ m11400_sxx (KERN_ATTR_VECTOR_ESALT (sip_t)) { /** * modifier diff --git a/OpenCL/m11500_a0-optimized.cl b/OpenCL/m11500_a0-optimized.cl index cef66fe88..6eac6eea6 100644 --- a/OpenCL/m11500_a0-optimized.cl +++ b/OpenCL/m11500_a0-optimized.cl @@ -135,7 +135,7 @@ DECLSPEC u32x crc32 (PRIVATE_AS const u32x *w, const u32 pw_len, const u32 iv) return ~a; } -KERNEL_FQ void m11500_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11500_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -215,15 +215,15 @@ KERNEL_FQ void m11500_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m11500_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11500_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m11500_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11500_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m11500_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11500_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -315,10 +315,10 @@ KERNEL_FQ void m11500_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m11500_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11500_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m11500_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11500_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m11500_a0-pure.cl b/OpenCL/m11500_a0-pure.cl index 520975145..e8b29c3de 100644 --- a/OpenCL/m11500_a0-pure.cl +++ b/OpenCL/m11500_a0-pure.cl @@ -123,7 +123,7 @@ DECLSPEC u32x crc32 (PRIVATE_AS const u32x *w, const u32 pw_len, const u32 iv) return ~a; } -KERNEL_FQ void m11500_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11500_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -169,7 +169,7 @@ KERNEL_FQ void m11500_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m11500_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11500_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m11500_a1-optimized.cl b/OpenCL/m11500_a1-optimized.cl index 0b6ad0808..e7f4e1fd7 100644 --- a/OpenCL/m11500_a1-optimized.cl +++ b/OpenCL/m11500_a1-optimized.cl @@ -133,7 +133,7 @@ DECLSPEC u32x crc32 (PRIVATE_AS const u32x *w, const u32 pw_len, const u32 iv) return ~a; } -KERNEL_FQ void m11500_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11500_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -273,15 +273,15 @@ KERNEL_FQ void m11500_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m11500_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11500_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m11500_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11500_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m11500_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11500_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -433,10 +433,10 @@ KERNEL_FQ void m11500_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m11500_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11500_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m11500_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11500_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m11500_a1-pure.cl b/OpenCL/m11500_a1-pure.cl index 7d6c54eae..d76d7f4f4 100644 --- a/OpenCL/m11500_a1-pure.cl +++ b/OpenCL/m11500_a1-pure.cl @@ -121,7 +121,7 @@ DECLSPEC u32x crc32_g (GLOBAL_AS const u32x *w, const u32 pw_len, const u32 iv) return ~a; } -KERNEL_FQ void m11500_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11500_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -163,7 +163,7 @@ KERNEL_FQ void m11500_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m11500_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11500_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m11500_a3-optimized.cl b/OpenCL/m11500_a3-optimized.cl index 21794b812..2374728e3 100644 --- a/OpenCL/m11500_a3-optimized.cl +++ b/OpenCL/m11500_a3-optimized.cl @@ -255,7 +255,7 @@ DECLSPEC void m11500s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_BASIC } } -KERNEL_FQ void m11500_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11500_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -295,7 +295,7 @@ KERNEL_FQ void m11500_m04 (KERN_ATTR_BASIC ()) m11500m (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m11500_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11500_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -335,7 +335,7 @@ KERNEL_FQ void m11500_m08 (KERN_ATTR_BASIC ()) m11500m (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m11500_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11500_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -375,7 +375,7 @@ KERNEL_FQ void m11500_m16 (KERN_ATTR_BASIC ()) m11500m (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m11500_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11500_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -415,7 +415,7 @@ KERNEL_FQ void m11500_s04 (KERN_ATTR_BASIC ()) m11500s (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m11500_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11500_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -455,7 +455,7 @@ KERNEL_FQ void m11500_s08 (KERN_ATTR_BASIC ()) m11500s (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m11500_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11500_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m11500_a3-pure.cl b/OpenCL/m11500_a3-pure.cl index 8a64c4cc0..834f9a913 100644 --- a/OpenCL/m11500_a3-pure.cl +++ b/OpenCL/m11500_a3-pure.cl @@ -121,7 +121,7 @@ DECLSPEC u32x crc32 (PRIVATE_AS const u32x *w, const u32 pw_len, const u32 iv) return ~a; } -KERNEL_FQ void m11500_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m11500_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -174,7 +174,7 @@ KERNEL_FQ void m11500_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m11500_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m11500_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m11600-optimized.cl b/OpenCL/m11600-optimized.cl index 671349d99..d4c618bf1 100644 --- a/OpenCL/m11600-optimized.cl +++ b/OpenCL/m11600-optimized.cl @@ -40,7 +40,7 @@ typedef struct #define MIN(a,b) (((a) < (b)) ? (a) : (b)) -KERNEL_FQ void m11600_init (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) +KERNEL_FQ void HC_ATTR_SEQ m11600_init (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) { /** * base @@ -62,7 +62,7 @@ KERNEL_FQ void m11600_init (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hoo tmps[gid].len = 0; } -KERNEL_FQ void m11600_loop (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) +KERNEL_FQ void HC_ATTR_SEQ m11600_loop (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) { const u64 gid = get_global_id (0); @@ -178,7 +178,7 @@ KERNEL_FQ void m11600_loop (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hoo tmps[gid].h[7] = h[7]; } -KERNEL_FQ void m11600_hook23 (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) +KERNEL_FQ void HC_ATTR_SEQ m11600_hook23 (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) { const u64 gid = get_global_id (0); @@ -233,7 +233,7 @@ KERNEL_FQ void m11600_hook23 (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_h hooks[gid].ukey[7] = hc_swap32_S (h[7]); } -KERNEL_FQ void m11600_comp (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) +KERNEL_FQ void HC_ATTR_SEQ m11600_comp (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) { /** * base diff --git a/OpenCL/m11600-pure.cl b/OpenCL/m11600-pure.cl index 585b1e308..d02928bc9 100644 --- a/OpenCL/m11600-pure.cl +++ b/OpenCL/m11600-pure.cl @@ -140,7 +140,7 @@ DECLSPEC void memcat8c_be (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u3 } } -KERNEL_FQ void m11600_init (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) +KERNEL_FQ void HC_ATTR_SEQ m11600_init (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) { /** * base @@ -187,7 +187,7 @@ KERNEL_FQ void m11600_init (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hoo tmps[gid].len = ctx.len; } -KERNEL_FQ void m11600_loop (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) +KERNEL_FQ void HC_ATTR_SEQ m11600_loop (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) { /** * base @@ -286,7 +286,7 @@ KERNEL_FQ void m11600_loop (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hoo tmps[gid].len = ctx.len; } -KERNEL_FQ void m11600_hook23 (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) +KERNEL_FQ void HC_ATTR_SEQ m11600_hook23 (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) { const u64 gid = get_global_id (0); @@ -341,7 +341,7 @@ KERNEL_FQ void m11600_hook23 (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_h hooks[gid].ukey[7] = hc_swap32_S (h[7]); } -KERNEL_FQ void m11600_comp (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) +KERNEL_FQ void HC_ATTR_SEQ m11600_comp (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) { /** * base diff --git a/OpenCL/m11700_a0-optimized.cl b/OpenCL/m11700_a0-optimized.cl index 55186edd5..206a44d9e 100644 --- a/OpenCL/m11700_a0-optimized.cl +++ b/OpenCL/m11700_a0-optimized.cl @@ -87,7 +87,7 @@ DECLSPEC void streebog_g (PRIVATE_AS u64x *h, PRIVATE_AS const u64x *m, LOCAL_AS } } -KERNEL_FQ void m11700_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11700_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -237,15 +237,15 @@ KERNEL_FQ void m11700_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m11700_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11700_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m11700_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11700_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m11700_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11700_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -407,10 +407,10 @@ KERNEL_FQ void m11700_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m11700_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11700_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m11700_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11700_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m11700_a0-pure.cl b/OpenCL/m11700_a0-pure.cl index 05825df37..a94f9833f 100644 --- a/OpenCL/m11700_a0-pure.cl +++ b/OpenCL/m11700_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog256.cl) #endif -KERNEL_FQ void m11700_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11700_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -89,7 +89,7 @@ KERNEL_FQ void m11700_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m11700_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11700_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m11700_a1-optimized.cl b/OpenCL/m11700_a1-optimized.cl index 4a0c9e086..4ec7d6e07 100644 --- a/OpenCL/m11700_a1-optimized.cl +++ b/OpenCL/m11700_a1-optimized.cl @@ -85,7 +85,7 @@ DECLSPEC void streebog_g (PRIVATE_AS u64x *h, PRIVATE_AS const u64x *m, LOCAL_AS } } -KERNEL_FQ void m11700_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11700_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -293,15 +293,15 @@ KERNEL_FQ void m11700_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m11700_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11700_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m11700_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11700_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m11700_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11700_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -521,10 +521,10 @@ KERNEL_FQ void m11700_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m11700_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11700_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m11700_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11700_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m11700_a1-pure.cl b/OpenCL/m11700_a1-pure.cl index 5bbe44e30..429766047 100644 --- a/OpenCL/m11700_a1-pure.cl +++ b/OpenCL/m11700_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog256.cl) #endif -KERNEL_FQ void m11700_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11700_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -85,7 +85,7 @@ KERNEL_FQ void m11700_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m11700_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11700_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m11700_a3-optimized.cl b/OpenCL/m11700_a3-optimized.cl index 211b7258e..3af7e6d46 100644 --- a/OpenCL/m11700_a3-optimized.cl +++ b/OpenCL/m11700_a3-optimized.cl @@ -248,7 +248,7 @@ DECLSPEC void m11700s (LOCAL_AS u64 (*s_sbob_sl64)[256], PRIVATE_AS u32 *w, cons } } -KERNEL_FQ void m11700_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11700_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -312,7 +312,7 @@ KERNEL_FQ void m11700_m04 (KERN_ATTR_BASIC ()) m11700m (s_sbob_sl64, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m11700_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11700_m08 (KERN_ATTR_BASIC ()) { /** * modifier @@ -376,7 +376,7 @@ KERNEL_FQ void m11700_m08 (KERN_ATTR_BASIC ()) m11700m (s_sbob_sl64, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m11700_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11700_m16 (KERN_ATTR_BASIC ()) { /** * modifier @@ -440,7 +440,7 @@ KERNEL_FQ void m11700_m16 (KERN_ATTR_BASIC ()) m11700m (s_sbob_sl64, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m11700_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11700_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -504,7 +504,7 @@ KERNEL_FQ void m11700_s04 (KERN_ATTR_BASIC ()) m11700s (s_sbob_sl64, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m11700_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11700_s08 (KERN_ATTR_BASIC ()) { /** * modifier @@ -568,7 +568,7 @@ KERNEL_FQ void m11700_s08 (KERN_ATTR_BASIC ()) m11700s (s_sbob_sl64, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m11700_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11700_s16 (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m11700_a3-pure.cl b/OpenCL/m11700_a3-pure.cl index 3daf08077..207ee3e93 100644 --- a/OpenCL/m11700_a3-pure.cl +++ b/OpenCL/m11700_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog256.cl) #endif -KERNEL_FQ void m11700_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m11700_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -98,7 +98,7 @@ KERNEL_FQ void m11700_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m11700_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m11700_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m11750_a0-pure.cl b/OpenCL/m11750_a0-pure.cl index 0626330b1..04fc48826 100644 --- a/OpenCL/m11750_a0-pure.cl +++ b/OpenCL/m11750_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog256.cl) #endif -KERNEL_FQ void m11750_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11750_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -98,7 +98,7 @@ KERNEL_FQ void m11750_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m11750_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11750_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m11750_a1-pure.cl b/OpenCL/m11750_a1-pure.cl index 96bd210ef..447390f17 100644 --- a/OpenCL/m11750_a1-pure.cl +++ b/OpenCL/m11750_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog256.cl) #endif -KERNEL_FQ void m11750_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11750_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -121,7 +121,7 @@ KERNEL_FQ void m11750_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m11750_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11750_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m11750_a3-pure.cl b/OpenCL/m11750_a3-pure.cl index 604cdd250..21eb5d1d2 100644 --- a/OpenCL/m11750_a3-pure.cl +++ b/OpenCL/m11750_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog256.cl) #endif -KERNEL_FQ void m11750_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m11750_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -107,7 +107,7 @@ KERNEL_FQ void m11750_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m11750_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m11750_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m11760_a0-pure.cl b/OpenCL/m11760_a0-pure.cl index bef4c15ea..eb905e532 100644 --- a/OpenCL/m11760_a0-pure.cl +++ b/OpenCL/m11760_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog256.cl) #endif -KERNEL_FQ void m11760_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11760_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -100,7 +100,7 @@ KERNEL_FQ void m11760_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m11760_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11760_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m11760_a1-pure.cl b/OpenCL/m11760_a1-pure.cl index e98ff5ae2..30402cc0d 100644 --- a/OpenCL/m11760_a1-pure.cl +++ b/OpenCL/m11760_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog256.cl) #endif -KERNEL_FQ void m11760_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11760_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -123,7 +123,7 @@ KERNEL_FQ void m11760_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m11760_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11760_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m11760_a3-pure.cl b/OpenCL/m11760_a3-pure.cl index a125320b1..24def4823 100644 --- a/OpenCL/m11760_a3-pure.cl +++ b/OpenCL/m11760_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog256.cl) #endif -KERNEL_FQ void m11760_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m11760_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -109,7 +109,7 @@ KERNEL_FQ void m11760_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m11760_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m11760_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m11800_a0-optimized.cl b/OpenCL/m11800_a0-optimized.cl index dc0251a00..9e61a3136 100644 --- a/OpenCL/m11800_a0-optimized.cl +++ b/OpenCL/m11800_a0-optimized.cl @@ -87,7 +87,7 @@ DECLSPEC void streebog_g (PRIVATE_AS u64x *h, PRIVATE_AS const u64x *m, LOCAL_AS } } -KERNEL_FQ void m11800_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11800_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -237,15 +237,15 @@ KERNEL_FQ void m11800_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m11800_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11800_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m11800_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11800_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m11800_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11800_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -407,10 +407,10 @@ KERNEL_FQ void m11800_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m11800_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11800_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m11800_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11800_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m11800_a0-pure.cl b/OpenCL/m11800_a0-pure.cl index 09f65c373..64c7b29ec 100644 --- a/OpenCL/m11800_a0-pure.cl +++ b/OpenCL/m11800_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog512.cl) #endif -KERNEL_FQ void m11800_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11800_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -89,7 +89,7 @@ KERNEL_FQ void m11800_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m11800_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11800_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m11800_a1-optimized.cl b/OpenCL/m11800_a1-optimized.cl index 9f8985346..ca9ae3f03 100644 --- a/OpenCL/m11800_a1-optimized.cl +++ b/OpenCL/m11800_a1-optimized.cl @@ -85,7 +85,7 @@ DECLSPEC void streebog_g (PRIVATE_AS u64x *h, PRIVATE_AS const u64x *m, LOCAL_AS } } -KERNEL_FQ void m11800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11800_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -293,15 +293,15 @@ KERNEL_FQ void m11800_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m11800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11800_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m11800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11800_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m11800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11800_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -521,10 +521,10 @@ KERNEL_FQ void m11800_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m11800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11800_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m11800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11800_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m11800_a1-pure.cl b/OpenCL/m11800_a1-pure.cl index 7acd881cd..e6f1a2550 100644 --- a/OpenCL/m11800_a1-pure.cl +++ b/OpenCL/m11800_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog512.cl) #endif -KERNEL_FQ void m11800_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11800_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -85,7 +85,7 @@ KERNEL_FQ void m11800_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m11800_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11800_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m11800_a3-optimized.cl b/OpenCL/m11800_a3-optimized.cl index 2b91c9576..ff35c2d82 100644 --- a/OpenCL/m11800_a3-optimized.cl +++ b/OpenCL/m11800_a3-optimized.cl @@ -248,7 +248,7 @@ DECLSPEC void m11800s (LOCAL_AS u64 (*s_sbob_sl64)[256], PRIVATE_AS u32 *w, cons } } -KERNEL_FQ void m11800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11800_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -312,7 +312,7 @@ KERNEL_FQ void m11800_m04 (KERN_ATTR_BASIC ()) m11800m (s_sbob_sl64, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m11800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11800_m08 (KERN_ATTR_BASIC ()) { /** * modifier @@ -376,7 +376,7 @@ KERNEL_FQ void m11800_m08 (KERN_ATTR_BASIC ()) m11800m (s_sbob_sl64, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m11800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11800_m16 (KERN_ATTR_BASIC ()) { /** * modifier @@ -440,7 +440,7 @@ KERNEL_FQ void m11800_m16 (KERN_ATTR_BASIC ()) m11800m (s_sbob_sl64, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m11800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11800_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -504,7 +504,7 @@ KERNEL_FQ void m11800_s04 (KERN_ATTR_BASIC ()) m11800s (s_sbob_sl64, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m11800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11800_s08 (KERN_ATTR_BASIC ()) { /** * modifier @@ -568,7 +568,7 @@ KERNEL_FQ void m11800_s08 (KERN_ATTR_BASIC ()) m11800s (s_sbob_sl64, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m11800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11800_s16 (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m11800_a3-pure.cl b/OpenCL/m11800_a3-pure.cl index eb378b6c1..733b52d8a 100644 --- a/OpenCL/m11800_a3-pure.cl +++ b/OpenCL/m11800_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog512.cl) #endif -KERNEL_FQ void m11800_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m11800_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -98,7 +98,7 @@ KERNEL_FQ void m11800_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m11800_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m11800_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m11850_a0-pure.cl b/OpenCL/m11850_a0-pure.cl index 8963e8d24..2d15e1fdb 100644 --- a/OpenCL/m11850_a0-pure.cl +++ b/OpenCL/m11850_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog512.cl) #endif -KERNEL_FQ void m11850_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11850_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -98,7 +98,7 @@ KERNEL_FQ void m11850_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m11850_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11850_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m11850_a1-pure.cl b/OpenCL/m11850_a1-pure.cl index 0f10594d3..41c11ad26 100644 --- a/OpenCL/m11850_a1-pure.cl +++ b/OpenCL/m11850_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog512.cl) #endif -KERNEL_FQ void m11850_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11850_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -121,7 +121,7 @@ KERNEL_FQ void m11850_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m11850_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11850_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m11850_a3-pure.cl b/OpenCL/m11850_a3-pure.cl index ee3f3a050..6bfa73484 100644 --- a/OpenCL/m11850_a3-pure.cl +++ b/OpenCL/m11850_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog512.cl) #endif -KERNEL_FQ void m11850_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m11850_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -107,7 +107,7 @@ KERNEL_FQ void m11850_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m11850_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m11850_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m11860_a0-pure.cl b/OpenCL/m11860_a0-pure.cl index ab1cc6b98..b0fabfe21 100644 --- a/OpenCL/m11860_a0-pure.cl +++ b/OpenCL/m11860_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog512.cl) #endif -KERNEL_FQ void m11860_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11860_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -100,7 +100,7 @@ KERNEL_FQ void m11860_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m11860_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m11860_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m11860_a1-pure.cl b/OpenCL/m11860_a1-pure.cl index 2842b9f52..6acc35462 100644 --- a/OpenCL/m11860_a1-pure.cl +++ b/OpenCL/m11860_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog512.cl) #endif -KERNEL_FQ void m11860_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11860_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -123,7 +123,7 @@ KERNEL_FQ void m11860_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m11860_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m11860_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m11860_a3-pure.cl b/OpenCL/m11860_a3-pure.cl index 60c72865b..cf1aedc7e 100644 --- a/OpenCL/m11860_a3-pure.cl +++ b/OpenCL/m11860_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog512.cl) #endif -KERNEL_FQ void m11860_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m11860_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -109,7 +109,7 @@ KERNEL_FQ void m11860_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m11860_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m11860_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m11900-pure.cl b/OpenCL/m11900-pure.cl index fee24abc7..84fca48a9 100644 --- a/OpenCL/m11900-pure.cl +++ b/OpenCL/m11900-pure.cl @@ -67,7 +67,7 @@ DECLSPEC void hmac_md5_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_ md5_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m11900_init (KERN_ATTR_TMPS_ESALT (pbkdf2_md5_tmp_t, pbkdf2_md5_t)) +KERNEL_FQ void HC_ATTR_SEQ m11900_init (KERN_ATTR_TMPS_ESALT (pbkdf2_md5_tmp_t, pbkdf2_md5_t)) { /** * base @@ -135,7 +135,7 @@ KERNEL_FQ void m11900_init (KERN_ATTR_TMPS_ESALT (pbkdf2_md5_tmp_t, pbkdf2_md5_t } } -KERNEL_FQ void m11900_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_md5_tmp_t, pbkdf2_md5_t)) +KERNEL_FQ void HC_ATTR_SEQ m11900_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_md5_tmp_t, pbkdf2_md5_t)) { const u64 gid = get_global_id (0); @@ -213,7 +213,7 @@ KERNEL_FQ void m11900_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_md5_tmp_t, pbkdf2_md5_t } } -KERNEL_FQ void m11900_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_md5_tmp_t, pbkdf2_md5_t)) +KERNEL_FQ void HC_ATTR_SEQ m11900_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_md5_tmp_t, pbkdf2_md5_t)) { /** * base diff --git a/OpenCL/m12000-pure.cl b/OpenCL/m12000-pure.cl index 5c2385bdf..5ade6d791 100644 --- a/OpenCL/m12000-pure.cl +++ b/OpenCL/m12000-pure.cl @@ -69,7 +69,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m12000_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, pbkdf2_sha1_t)) +KERNEL_FQ void HC_ATTR_SEQ m12000_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, pbkdf2_sha1_t)) { /** * base @@ -141,7 +141,7 @@ KERNEL_FQ void m12000_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, pbkdf2_sha1 } } -KERNEL_FQ void m12000_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, pbkdf2_sha1_t)) +KERNEL_FQ void HC_ATTR_SEQ m12000_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, pbkdf2_sha1_t)) { const u64 gid = get_global_id (0); @@ -226,7 +226,7 @@ KERNEL_FQ void m12000_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, pbkdf2_sha1 } } -KERNEL_FQ void m12000_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, pbkdf2_sha1_t)) +KERNEL_FQ void HC_ATTR_SEQ m12000_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, pbkdf2_sha1_t)) { /** * base diff --git a/OpenCL/m12200-pure.cl b/OpenCL/m12200-pure.cl index 39eb3016e..cedb389b6 100644 --- a/OpenCL/m12200-pure.cl +++ b/OpenCL/m12200-pure.cl @@ -23,7 +23,7 @@ typedef struct ecryptfs_tmp } ecryptfs_tmp_t; -KERNEL_FQ void m12200_init (KERN_ATTR_TMPS (ecryptfs_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m12200_init (KERN_ATTR_TMPS (ecryptfs_tmp_t)) { /** * base @@ -53,7 +53,7 @@ KERNEL_FQ void m12200_init (KERN_ATTR_TMPS (ecryptfs_tmp_t)) tmps[gid].out[7] = ctx.h[7]; } -KERNEL_FQ void m12200_loop (KERN_ATTR_TMPS (ecryptfs_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m12200_loop (KERN_ATTR_TMPS (ecryptfs_tmp_t)) { const u64 gid = get_global_id (0); @@ -162,7 +162,7 @@ KERNEL_FQ void m12200_loop (KERN_ATTR_TMPS (ecryptfs_tmp_t)) unpack64v (tmps, out, gid, 7, t7); } -KERNEL_FQ void m12200_comp (KERN_ATTR_TMPS (ecryptfs_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m12200_comp (KERN_ATTR_TMPS (ecryptfs_tmp_t)) { /** * base diff --git a/OpenCL/m12300-pure.cl b/OpenCL/m12300-pure.cl index 32fcafb4b..96d013826 100644 --- a/OpenCL/m12300-pure.cl +++ b/OpenCL/m12300-pure.cl @@ -85,7 +85,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void m12300_init (KERN_ATTR_TMPS (oraclet_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m12300_init (KERN_ATTR_TMPS (oraclet_tmp_t)) { /** * base @@ -224,7 +224,7 @@ KERNEL_FQ void m12300_init (KERN_ATTR_TMPS (oraclet_tmp_t)) } } -KERNEL_FQ void m12300_loop (KERN_ATTR_TMPS (oraclet_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m12300_loop (KERN_ATTR_TMPS (oraclet_tmp_t)) { const u64 gid = get_global_id (0); @@ -350,7 +350,7 @@ KERNEL_FQ void m12300_loop (KERN_ATTR_TMPS (oraclet_tmp_t)) } } -KERNEL_FQ void m12300_comp (KERN_ATTR_TMPS (oraclet_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m12300_comp (KERN_ATTR_TMPS (oraclet_tmp_t)) { /** * base diff --git a/OpenCL/m12400-pure.cl b/OpenCL/m12400-pure.cl index e515bc907..bc718706b 100644 --- a/OpenCL/m12400-pure.cl +++ b/OpenCL/m12400-pure.cl @@ -497,7 +497,7 @@ DECLSPEC void _des_crypt_encrypt (PRIVATE_AS u32 *iv, u32 mask, u32 rounds, PRIV iv[1] = l; } -KERNEL_FQ void m12400_init (KERN_ATTR_TMPS (bsdicrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m12400_init (KERN_ATTR_TMPS (bsdicrypt_tmp_t)) { /** * base @@ -633,7 +633,7 @@ KERNEL_FQ void m12400_init (KERN_ATTR_TMPS (bsdicrypt_tmp_t)) tmps[gid].iv[1] = 0; } -KERNEL_FQ void m12400_loop (KERN_ATTR_TMPS (bsdicrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m12400_loop (KERN_ATTR_TMPS (bsdicrypt_tmp_t)) { /** * base @@ -730,7 +730,7 @@ KERNEL_FQ void m12400_loop (KERN_ATTR_TMPS (bsdicrypt_tmp_t)) tmps[gid].iv[1] = iv[1]; } -KERNEL_FQ void m12400_comp (KERN_ATTR_TMPS (bsdicrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m12400_comp (KERN_ATTR_TMPS (bsdicrypt_tmp_t)) { /** * base diff --git a/OpenCL/m12500-optimized.cl b/OpenCL/m12500-optimized.cl index 01abd8805..06c12abb2 100644 --- a/OpenCL/m12500-optimized.cl +++ b/OpenCL/m12500-optimized.cl @@ -31,7 +31,7 @@ typedef struct rar3_tmp } rar3_tmp_t; -KERNEL_FQ void m12500_init (KERN_ATTR_TMPS (rar3_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m12500_init (KERN_ATTR_TMPS (rar3_tmp_t)) { /** * base @@ -48,7 +48,7 @@ KERNEL_FQ void m12500_init (KERN_ATTR_TMPS (rar3_tmp_t)) tmps[gid].dgst[0][4] = SHA1M_E; } -KERNEL_FQ void m12500_loop (KERN_ATTR_TMPS (rar3_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m12500_loop (KERN_ATTR_TMPS (rar3_tmp_t)) { const u64 gid = get_global_id (0); @@ -237,7 +237,7 @@ KERNEL_FQ void m12500_loop (KERN_ATTR_TMPS (rar3_tmp_t)) tmps[gid].dgst[init_pos + 1][4] = dgst[4]; } -KERNEL_FQ void m12500_comp (KERN_ATTR_TMPS (rar3_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m12500_comp (KERN_ATTR_TMPS (rar3_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m12500-pure.cl b/OpenCL/m12500-pure.cl index f6101ab8c..db3f227c1 100644 --- a/OpenCL/m12500-pure.cl +++ b/OpenCL/m12500-pure.cl @@ -728,7 +728,7 @@ DECLSPEC void sha1_update_rar29 (PRIVATE_AS sha1_ctx_t *ctx, PRIVATE_AS u32 *w, } } -KERNEL_FQ void m12500_init (KERN_ATTR_TMPS (rar3_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m12500_init (KERN_ATTR_TMPS (rar3_tmp_t)) { /** * base @@ -796,7 +796,7 @@ KERNEL_FQ void m12500_init (KERN_ATTR_TMPS (rar3_tmp_t)) tmps[gid].iv[3] = 0; } -KERNEL_FQ void m12500_loop (KERN_ATTR_TMPS (rar3_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m12500_loop (KERN_ATTR_TMPS (rar3_tmp_t)) { const u64 gid = get_global_id (0); @@ -911,7 +911,7 @@ KERNEL_FQ void m12500_loop (KERN_ATTR_TMPS (rar3_tmp_t)) } } -KERNEL_FQ void m12500_comp (KERN_ATTR_TMPS (rar3_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m12500_comp (KERN_ATTR_TMPS (rar3_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m12600_a0-optimized.cl b/OpenCL/m12600_a0-optimized.cl index 323d8c0e6..cfbe35302 100644 --- a/OpenCL/m12600_a0-optimized.cl +++ b/OpenCL/m12600_a0-optimized.cl @@ -29,7 +29,7 @@ #define uint_to_hex_upper8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m12600_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m12600_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -361,15 +361,15 @@ KERNEL_FQ void m12600_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m12600_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m12600_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m12600_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m12600_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m12600_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m12600_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -716,10 +716,10 @@ KERNEL_FQ void m12600_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m12600_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m12600_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m12600_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m12600_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m12600_a0-pure.cl b/OpenCL/m12600_a0-pure.cl index f4ac84492..d988fc04f 100644 --- a/OpenCL/m12600_a0-pure.cl +++ b/OpenCL/m12600_a0-pure.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m12600_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m12600_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -165,7 +165,7 @@ KERNEL_FQ void m12600_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m12600_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m12600_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m12600_a1-optimized.cl b/OpenCL/m12600_a1-optimized.cl index 3c5b709a8..0a8750a93 100644 --- a/OpenCL/m12600_a1-optimized.cl +++ b/OpenCL/m12600_a1-optimized.cl @@ -27,7 +27,7 @@ #define uint_to_hex_upper8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m12600_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m12600_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -417,15 +417,15 @@ KERNEL_FQ void m12600_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m12600_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m12600_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m12600_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m12600_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m12600_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m12600_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -830,10 +830,10 @@ KERNEL_FQ void m12600_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m12600_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m12600_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m12600_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m12600_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m12600_a1-pure.cl b/OpenCL/m12600_a1-pure.cl index 4f130e1bb..ee660d497 100644 --- a/OpenCL/m12600_a1-pure.cl +++ b/OpenCL/m12600_a1-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m12600_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m12600_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -161,7 +161,7 @@ KERNEL_FQ void m12600_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m12600_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m12600_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m12600_a3-optimized.cl b/OpenCL/m12600_a3-optimized.cl index e73899b05..58a53447b 100644 --- a/OpenCL/m12600_a3-optimized.cl +++ b/OpenCL/m12600_a3-optimized.cl @@ -618,7 +618,7 @@ DECLSPEC void m12600s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m12600_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m12600_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -688,7 +688,7 @@ KERNEL_FQ void m12600_m04 (KERN_ATTR_BASIC ()) m12600m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m12600_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m12600_m08 (KERN_ATTR_BASIC ()) { /** * modifier @@ -758,7 +758,7 @@ KERNEL_FQ void m12600_m08 (KERN_ATTR_BASIC ()) m12600m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m12600_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m12600_m16 (KERN_ATTR_BASIC ()) { /** * modifier @@ -828,7 +828,7 @@ KERNEL_FQ void m12600_m16 (KERN_ATTR_BASIC ()) m12600m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m12600_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m12600_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -898,7 +898,7 @@ KERNEL_FQ void m12600_s04 (KERN_ATTR_BASIC ()) m12600s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m12600_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m12600_s08 (KERN_ATTR_BASIC ()) { /** * modifier @@ -968,7 +968,7 @@ KERNEL_FQ void m12600_s08 (KERN_ATTR_BASIC ()) m12600s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m12600_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m12600_s16 (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m12600_a3-pure.cl b/OpenCL/m12600_a3-pure.cl index 9b4afb1cf..71b3f9007 100644 --- a/OpenCL/m12600_a3-pure.cl +++ b/OpenCL/m12600_a3-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m12600_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m12600_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -174,7 +174,7 @@ KERNEL_FQ void m12600_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m12600_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m12600_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m12700-pure.cl b/OpenCL/m12700-pure.cl index 497b44a75..b164d6514 100644 --- a/OpenCL/m12700-pure.cl +++ b/OpenCL/m12700-pure.cl @@ -78,7 +78,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m12700_init (KERN_ATTR_TMPS (mywallet_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m12700_init (KERN_ATTR_TMPS (mywallet_tmp_t)) { /** * base @@ -167,7 +167,7 @@ KERNEL_FQ void m12700_init (KERN_ATTR_TMPS (mywallet_tmp_t)) } } -KERNEL_FQ void m12700_loop (KERN_ATTR_TMPS (mywallet_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m12700_loop (KERN_ATTR_TMPS (mywallet_tmp_t)) { const u64 gid = get_global_id (0); @@ -252,7 +252,7 @@ KERNEL_FQ void m12700_loop (KERN_ATTR_TMPS (mywallet_tmp_t)) } } -KERNEL_FQ void m12700_comp (KERN_ATTR_TMPS (mywallet_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m12700_comp (KERN_ATTR_TMPS (mywallet_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m12800-pure.cl b/OpenCL/m12800-pure.cl index fb8848dcf..63557b0c1 100644 --- a/OpenCL/m12800-pure.cl +++ b/OpenCL/m12800-pure.cl @@ -76,7 +76,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m12800_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) +KERNEL_FQ void HC_ATTR_SEQ m12800_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) { /** * base @@ -244,7 +244,7 @@ KERNEL_FQ void m12800_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sh } } -KERNEL_FQ void m12800_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) +KERNEL_FQ void HC_ATTR_SEQ m12800_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) { const u64 gid = get_global_id (0); @@ -350,7 +350,7 @@ KERNEL_FQ void m12800_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sh } } -KERNEL_FQ void m12800_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) +KERNEL_FQ void HC_ATTR_SEQ m12800_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) { /** * base diff --git a/OpenCL/m12900-pure.cl b/OpenCL/m12900-pure.cl index c3c9d4d32..02b25953c 100644 --- a/OpenCL/m12900-pure.cl +++ b/OpenCL/m12900-pure.cl @@ -75,7 +75,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m12900_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) +KERNEL_FQ void HC_ATTR_SEQ m12900_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) { /** * base @@ -176,7 +176,7 @@ KERNEL_FQ void m12900_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sh } } -KERNEL_FQ void m12900_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) +KERNEL_FQ void HC_ATTR_SEQ m12900_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) { const u64 gid = get_global_id (0); @@ -282,7 +282,7 @@ KERNEL_FQ void m12900_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sh } } -KERNEL_FQ void m12900_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) +KERNEL_FQ void HC_ATTR_SEQ m12900_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) { /** * base diff --git a/OpenCL/m13000-pure.cl b/OpenCL/m13000-pure.cl index c2ccb8f96..30a53d3c8 100644 --- a/OpenCL/m13000-pure.cl +++ b/OpenCL/m13000-pure.cl @@ -69,7 +69,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m13000_init (KERN_ATTR_TMPS (pbkdf2_sha256_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m13000_init (KERN_ATTR_TMPS (pbkdf2_sha256_tmp_t)) { /** * base @@ -153,7 +153,7 @@ KERNEL_FQ void m13000_init (KERN_ATTR_TMPS (pbkdf2_sha256_tmp_t)) } } -KERNEL_FQ void m13000_loop (KERN_ATTR_TMPS (pbkdf2_sha256_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m13000_loop (KERN_ATTR_TMPS (pbkdf2_sha256_tmp_t)) { const u64 gid = get_global_id (0); @@ -259,7 +259,7 @@ KERNEL_FQ void m13000_loop (KERN_ATTR_TMPS (pbkdf2_sha256_tmp_t)) } } -KERNEL_FQ void m13000_comp (KERN_ATTR_TMPS (pbkdf2_sha256_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m13000_comp (KERN_ATTR_TMPS (pbkdf2_sha256_tmp_t)) { /** * base diff --git a/OpenCL/m13100_a0-optimized.cl b/OpenCL/m13100_a0-optimized.cl index a2b653f47..d0d53ee09 100644 --- a/OpenCL/m13100_a0-optimized.cl +++ b/OpenCL/m13100_a0-optimized.cl @@ -454,7 +454,7 @@ DECLSPEC void kerb_prepare (PRIVATE_AS const u32 *w0, PRIVATE_AS const u32 *w1, hmac_md5_run (w0_t, w1_t, w2_t, w3_t, ipad, opad, digest); } -KERNEL_FQ void m13100_m04 (KERN_ATTR_RULES_ESALT (krb5tgs_t)) +KERNEL_FQ void HC_ATTR_SEQ m13100_m04 (KERN_ATTR_RULES_ESALT (krb5tgs_t)) { /** * modifier @@ -542,15 +542,15 @@ KERNEL_FQ void m13100_m04 (KERN_ATTR_RULES_ESALT (krb5tgs_t)) } } -KERNEL_FQ void m13100_m08 (KERN_ATTR_RULES_ESALT (krb5tgs_t)) +KERNEL_FQ void HC_ATTR_SEQ m13100_m08 (KERN_ATTR_RULES_ESALT (krb5tgs_t)) { } -KERNEL_FQ void m13100_m16 (KERN_ATTR_RULES_ESALT (krb5tgs_t)) +KERNEL_FQ void HC_ATTR_SEQ m13100_m16 (KERN_ATTR_RULES_ESALT (krb5tgs_t)) { } -KERNEL_FQ void m13100_s04 (KERN_ATTR_RULES_ESALT (krb5tgs_t)) +KERNEL_FQ void HC_ATTR_SEQ m13100_s04 (KERN_ATTR_RULES_ESALT (krb5tgs_t)) { /** * modifier @@ -638,10 +638,10 @@ KERNEL_FQ void m13100_s04 (KERN_ATTR_RULES_ESALT (krb5tgs_t)) } } -KERNEL_FQ void m13100_s08 (KERN_ATTR_RULES_ESALT (krb5tgs_t)) +KERNEL_FQ void HC_ATTR_SEQ m13100_s08 (KERN_ATTR_RULES_ESALT (krb5tgs_t)) { } -KERNEL_FQ void m13100_s16 (KERN_ATTR_RULES_ESALT (krb5tgs_t)) +KERNEL_FQ void HC_ATTR_SEQ m13100_s16 (KERN_ATTR_RULES_ESALT (krb5tgs_t)) { } diff --git a/OpenCL/m13100_a0-pure.cl b/OpenCL/m13100_a0-pure.cl index 8aaff8389..976f58259 100644 --- a/OpenCL/m13100_a0-pure.cl +++ b/OpenCL/m13100_a0-pure.cl @@ -266,7 +266,7 @@ DECLSPEC void kerb_prepare (PRIVATE_AS const u32 *K, PRIVATE_AS const u32 *check K2[3] = ctx1.opad.h[3]; } -KERNEL_FQ void m13100_mxx (KERN_ATTR_RULES_ESALT (krb5tgs_t)) +KERNEL_FQ void HC_ATTR_SEQ m13100_mxx (KERN_ATTR_RULES_ESALT (krb5tgs_t)) { /** * modifier @@ -326,7 +326,7 @@ KERNEL_FQ void m13100_mxx (KERN_ATTR_RULES_ESALT (krb5tgs_t)) } } -KERNEL_FQ void m13100_sxx (KERN_ATTR_RULES_ESALT (krb5tgs_t)) +KERNEL_FQ void HC_ATTR_SEQ m13100_sxx (KERN_ATTR_RULES_ESALT (krb5tgs_t)) { /** * modifier diff --git a/OpenCL/m13100_a1-optimized.cl b/OpenCL/m13100_a1-optimized.cl index 26c8e8111..1b64e10ed 100644 --- a/OpenCL/m13100_a1-optimized.cl +++ b/OpenCL/m13100_a1-optimized.cl @@ -452,7 +452,7 @@ DECLSPEC void kerb_prepare (PRIVATE_AS const u32 *w0, PRIVATE_AS const u32 *w1, hmac_md5_run (w0_t, w1_t, w2_t, w3_t, ipad, opad, digest); } -KERNEL_FQ void m13100_m04 (KERN_ATTR_ESALT (krb5tgs_t)) +KERNEL_FQ void HC_ATTR_SEQ m13100_m04 (KERN_ATTR_ESALT (krb5tgs_t)) { /** * modifier @@ -589,15 +589,15 @@ KERNEL_FQ void m13100_m04 (KERN_ATTR_ESALT (krb5tgs_t)) } } -KERNEL_FQ void m13100_m08 (KERN_ATTR_ESALT (krb5tgs_t)) +KERNEL_FQ void HC_ATTR_SEQ m13100_m08 (KERN_ATTR_ESALT (krb5tgs_t)) { } -KERNEL_FQ void m13100_m16 (KERN_ATTR_ESALT (krb5tgs_t)) +KERNEL_FQ void HC_ATTR_SEQ m13100_m16 (KERN_ATTR_ESALT (krb5tgs_t)) { } -KERNEL_FQ void m13100_s04 (KERN_ATTR_ESALT (krb5tgs_t)) +KERNEL_FQ void HC_ATTR_SEQ m13100_s04 (KERN_ATTR_ESALT (krb5tgs_t)) { /** * modifier @@ -734,10 +734,10 @@ KERNEL_FQ void m13100_s04 (KERN_ATTR_ESALT (krb5tgs_t)) } } -KERNEL_FQ void m13100_s08 (KERN_ATTR_ESALT (krb5tgs_t)) +KERNEL_FQ void HC_ATTR_SEQ m13100_s08 (KERN_ATTR_ESALT (krb5tgs_t)) { } -KERNEL_FQ void m13100_s16 (KERN_ATTR_ESALT (krb5tgs_t)) +KERNEL_FQ void HC_ATTR_SEQ m13100_s16 (KERN_ATTR_ESALT (krb5tgs_t)) { } diff --git a/OpenCL/m13100_a1-pure.cl b/OpenCL/m13100_a1-pure.cl index 1799a64ee..12ab9b3bd 100644 --- a/OpenCL/m13100_a1-pure.cl +++ b/OpenCL/m13100_a1-pure.cl @@ -264,7 +264,7 @@ DECLSPEC void kerb_prepare (PRIVATE_AS const u32 *K, PRIVATE_AS const u32 *check K2[3] = ctx1.opad.h[3]; } -KERNEL_FQ void m13100_mxx (KERN_ATTR_ESALT (krb5tgs_t)) +KERNEL_FQ void HC_ATTR_SEQ m13100_mxx (KERN_ATTR_ESALT (krb5tgs_t)) { /** * modifier @@ -322,7 +322,7 @@ KERNEL_FQ void m13100_mxx (KERN_ATTR_ESALT (krb5tgs_t)) } } -KERNEL_FQ void m13100_sxx (KERN_ATTR_ESALT (krb5tgs_t)) +KERNEL_FQ void HC_ATTR_SEQ m13100_sxx (KERN_ATTR_ESALT (krb5tgs_t)) { /** * modifier diff --git a/OpenCL/m13100_a3-optimized.cl b/OpenCL/m13100_a3-optimized.cl index 2d2a47efc..dfdf64dcb 100644 --- a/OpenCL/m13100_a3-optimized.cl +++ b/OpenCL/m13100_a3-optimized.cl @@ -508,7 +508,7 @@ DECLSPEC void m13100 (LOCAL_AS u32 *S, PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, P } } -KERNEL_FQ void m13100_m04 (KERN_ATTR_ESALT (krb5tgs_t)) +KERNEL_FQ void HC_ATTR_SEQ m13100_m04 (KERN_ATTR_ESALT (krb5tgs_t)) { /** * base @@ -559,7 +559,7 @@ KERNEL_FQ void m13100_m04 (KERN_ATTR_ESALT (krb5tgs_t)) m13100 (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m13100_m08 (KERN_ATTR_ESALT (krb5tgs_t)) +KERNEL_FQ void HC_ATTR_SEQ m13100_m08 (KERN_ATTR_ESALT (krb5tgs_t)) { /** * base @@ -610,11 +610,11 @@ KERNEL_FQ void m13100_m08 (KERN_ATTR_ESALT (krb5tgs_t)) m13100 (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m13100_m16 (KERN_ATTR_ESALT (krb5tgs_t)) +KERNEL_FQ void HC_ATTR_SEQ m13100_m16 (KERN_ATTR_ESALT (krb5tgs_t)) { } -KERNEL_FQ void m13100_s04 (KERN_ATTR_ESALT (krb5tgs_t)) +KERNEL_FQ void HC_ATTR_SEQ m13100_s04 (KERN_ATTR_ESALT (krb5tgs_t)) { /** * base @@ -665,7 +665,7 @@ KERNEL_FQ void m13100_s04 (KERN_ATTR_ESALT (krb5tgs_t)) m13100 (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m13100_s08 (KERN_ATTR_ESALT (krb5tgs_t)) +KERNEL_FQ void HC_ATTR_SEQ m13100_s08 (KERN_ATTR_ESALT (krb5tgs_t)) { /** * base @@ -716,6 +716,6 @@ KERNEL_FQ void m13100_s08 (KERN_ATTR_ESALT (krb5tgs_t)) m13100 (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m13100_s16 (KERN_ATTR_ESALT (krb5tgs_t)) +KERNEL_FQ void HC_ATTR_SEQ m13100_s16 (KERN_ATTR_ESALT (krb5tgs_t)) { } diff --git a/OpenCL/m13100_a3-pure.cl b/OpenCL/m13100_a3-pure.cl index 166997b52..522278381 100644 --- a/OpenCL/m13100_a3-pure.cl +++ b/OpenCL/m13100_a3-pure.cl @@ -264,7 +264,7 @@ DECLSPEC void kerb_prepare (PRIVATE_AS const u32 *K, PRIVATE_AS const u32 *check K2[3] = ctx1.opad.h[3]; } -KERNEL_FQ void m13100_mxx (KERN_ATTR_VECTOR_ESALT (krb5tgs_t)) +KERNEL_FQ void HC_ATTR_SEQ m13100_mxx (KERN_ATTR_VECTOR_ESALT (krb5tgs_t)) { /** * modifier @@ -335,7 +335,7 @@ KERNEL_FQ void m13100_mxx (KERN_ATTR_VECTOR_ESALT (krb5tgs_t)) } } -KERNEL_FQ void m13100_sxx (KERN_ATTR_VECTOR_ESALT (krb5tgs_t)) +KERNEL_FQ void HC_ATTR_SEQ m13100_sxx (KERN_ATTR_VECTOR_ESALT (krb5tgs_t)) { /** * modifier diff --git a/OpenCL/m13200-pure.cl b/OpenCL/m13200-pure.cl index 06a6856a7..e7a6aa7a2 100644 --- a/OpenCL/m13200-pure.cl +++ b/OpenCL/m13200-pure.cl @@ -20,7 +20,7 @@ typedef struct axcrypt_tmp } axcrypt_tmp_t; -KERNEL_FQ void m13200_init (KERN_ATTR_TMPS (axcrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m13200_init (KERN_ATTR_TMPS (axcrypt_tmp_t)) { /** * base @@ -74,7 +74,7 @@ KERNEL_FQ void m13200_init (KERN_ATTR_TMPS (axcrypt_tmp_t)) tmps[gid].cipher[3] = 0; } -KERNEL_FQ void m13200_loop (KERN_ATTR_TMPS (axcrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m13200_loop (KERN_ATTR_TMPS (axcrypt_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -211,7 +211,7 @@ KERNEL_FQ void m13200_loop (KERN_ATTR_TMPS (axcrypt_tmp_t)) tmps[gid].cipher[3] = cipher[3]; } -KERNEL_FQ void m13200_comp (KERN_ATTR_TMPS (axcrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m13200_comp (KERN_ATTR_TMPS (axcrypt_tmp_t)) { /** * base diff --git a/OpenCL/m13300_a0-optimized.cl b/OpenCL/m13300_a0-optimized.cl index 5110045c3..b987f600d 100644 --- a/OpenCL/m13300_a0-optimized.cl +++ b/OpenCL/m13300_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m13300_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m13300_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -195,15 +195,15 @@ KERNEL_FQ void m13300_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m13300_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m13300_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m13300_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m13300_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m13300_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m13300_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -394,10 +394,10 @@ KERNEL_FQ void m13300_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m13300_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m13300_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m13300_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m13300_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m13300_a0-pure.cl b/OpenCL/m13300_a0-pure.cl index 12ccda0b2..1480c683d 100644 --- a/OpenCL/m13300_a0-pure.cl +++ b/OpenCL/m13300_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m13300_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m13300_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -62,7 +62,7 @@ KERNEL_FQ void m13300_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m13300_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m13300_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m13300_a1-optimized.cl b/OpenCL/m13300_a1-optimized.cl index 051eba2db..cede4b975 100644 --- a/OpenCL/m13300_a1-optimized.cl +++ b/OpenCL/m13300_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m13300_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m13300_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -251,15 +251,15 @@ KERNEL_FQ void m13300_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m13300_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m13300_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m13300_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m13300_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m13300_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m13300_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -508,10 +508,10 @@ KERNEL_FQ void m13300_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m13300_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m13300_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m13300_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m13300_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m13300_a1-pure.cl b/OpenCL/m13300_a1-pure.cl index b87420eca..01c8a7be9 100644 --- a/OpenCL/m13300_a1-pure.cl +++ b/OpenCL/m13300_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m13300_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m13300_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -58,7 +58,7 @@ KERNEL_FQ void m13300_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m13300_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m13300_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m13300_a3-optimized.cl b/OpenCL/m13300_a3-optimized.cl index dfeff4acd..a009f8754 100644 --- a/OpenCL/m13300_a3-optimized.cl +++ b/OpenCL/m13300_a3-optimized.cl @@ -522,7 +522,7 @@ DECLSPEC void m13300s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m13300_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m13300_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -562,7 +562,7 @@ KERNEL_FQ void m13300_m04 (KERN_ATTR_VECTOR ()) m13300m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m13300_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m13300_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -602,7 +602,7 @@ KERNEL_FQ void m13300_m08 (KERN_ATTR_VECTOR ()) m13300m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m13300_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m13300_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -642,7 +642,7 @@ KERNEL_FQ void m13300_m16 (KERN_ATTR_VECTOR ()) m13300m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m13300_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m13300_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -682,7 +682,7 @@ KERNEL_FQ void m13300_s04 (KERN_ATTR_VECTOR ()) m13300s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m13300_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m13300_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -722,7 +722,7 @@ KERNEL_FQ void m13300_s08 (KERN_ATTR_VECTOR ()) m13300s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m13300_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m13300_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m13300_a3-pure.cl b/OpenCL/m13300_a3-pure.cl index 10f82fda6..f64e9c3a5 100644 --- a/OpenCL/m13300_a3-pure.cl +++ b/OpenCL/m13300_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m13300_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m13300_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void m13300_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m13300_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m13300_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m13400-pure.cl b/OpenCL/m13400-pure.cl index 49d52dc21..a9a41aec0 100644 --- a/OpenCL/m13400-pure.cl +++ b/OpenCL/m13400-pure.cl @@ -45,7 +45,7 @@ typedef struct keepass } keepass_t; -KERNEL_FQ void m13400_init (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, keepass_t)) +KERNEL_FQ void HC_ATTR_SEQ m13400_init (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, keepass_t)) { /** * base @@ -164,7 +164,7 @@ KERNEL_FQ void m13400_init (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, keepass_t)) tmps[gid].tmp_digest[7] = digest[7]; } -KERNEL_FQ void m13400_loop (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, keepass_t)) +KERNEL_FQ void HC_ATTR_SEQ m13400_loop (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, keepass_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -252,7 +252,7 @@ KERNEL_FQ void m13400_loop (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, keepass_t)) tmps[gid].tmp_digest[7] = data1[3]; } -KERNEL_FQ void m13400_comp (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, keepass_t)) +KERNEL_FQ void HC_ATTR_SEQ m13400_comp (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, keepass_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13500_a0-optimized.cl b/OpenCL/m13500_a0-optimized.cl index f01a248a7..fca00d284 100644 --- a/OpenCL/m13500_a0-optimized.cl +++ b/OpenCL/m13500_a0-optimized.cl @@ -27,7 +27,7 @@ typedef struct pstoken } pstoken_t; -KERNEL_FQ void m13500_m04 (KERN_ATTR_RULES_ESALT (pstoken_t)) +KERNEL_FQ void HC_ATTR_SEQ m13500_m04 (KERN_ATTR_RULES_ESALT (pstoken_t)) { /** * modifier @@ -444,15 +444,15 @@ KERNEL_FQ void m13500_m04 (KERN_ATTR_RULES_ESALT (pstoken_t)) } } -KERNEL_FQ void m13500_m08 (KERN_ATTR_RULES_ESALT (pstoken_t)) +KERNEL_FQ void HC_ATTR_SEQ m13500_m08 (KERN_ATTR_RULES_ESALT (pstoken_t)) { } -KERNEL_FQ void m13500_m16 (KERN_ATTR_RULES_ESALT (pstoken_t)) +KERNEL_FQ void HC_ATTR_SEQ m13500_m16 (KERN_ATTR_RULES_ESALT (pstoken_t)) { } -KERNEL_FQ void m13500_s04 (KERN_ATTR_RULES_ESALT (pstoken_t)) +KERNEL_FQ void HC_ATTR_SEQ m13500_s04 (KERN_ATTR_RULES_ESALT (pstoken_t)) { /** * modifier @@ -881,10 +881,10 @@ KERNEL_FQ void m13500_s04 (KERN_ATTR_RULES_ESALT (pstoken_t)) } } -KERNEL_FQ void m13500_s08 (KERN_ATTR_RULES_ESALT (pstoken_t)) +KERNEL_FQ void HC_ATTR_SEQ m13500_s08 (KERN_ATTR_RULES_ESALT (pstoken_t)) { } -KERNEL_FQ void m13500_s16 (KERN_ATTR_RULES_ESALT (pstoken_t)) +KERNEL_FQ void HC_ATTR_SEQ m13500_s16 (KERN_ATTR_RULES_ESALT (pstoken_t)) { } diff --git a/OpenCL/m13500_a0-pure.cl b/OpenCL/m13500_a0-pure.cl index 8ade5504f..991f9c700 100644 --- a/OpenCL/m13500_a0-pure.cl +++ b/OpenCL/m13500_a0-pure.cl @@ -26,7 +26,7 @@ typedef struct pstoken } pstoken_t; -KERNEL_FQ void m13500_mxx (KERN_ATTR_RULES_ESALT (pstoken_t)) +KERNEL_FQ void HC_ATTR_SEQ m13500_mxx (KERN_ATTR_RULES_ESALT (pstoken_t)) { /** * modifier @@ -101,7 +101,7 @@ KERNEL_FQ void m13500_mxx (KERN_ATTR_RULES_ESALT (pstoken_t)) } } -KERNEL_FQ void m13500_sxx (KERN_ATTR_RULES_ESALT (pstoken_t)) +KERNEL_FQ void HC_ATTR_SEQ m13500_sxx (KERN_ATTR_RULES_ESALT (pstoken_t)) { /** * modifier diff --git a/OpenCL/m13500_a1-optimized.cl b/OpenCL/m13500_a1-optimized.cl index 5fd2ed370..fe4afda13 100644 --- a/OpenCL/m13500_a1-optimized.cl +++ b/OpenCL/m13500_a1-optimized.cl @@ -25,7 +25,7 @@ typedef struct pstoken } pstoken_t; -KERNEL_FQ void m13500_m04 (KERN_ATTR_ESALT (pstoken_t)) +KERNEL_FQ void HC_ATTR_SEQ m13500_m04 (KERN_ATTR_ESALT (pstoken_t)) { /** * modifier @@ -494,15 +494,15 @@ KERNEL_FQ void m13500_m04 (KERN_ATTR_ESALT (pstoken_t)) } } -KERNEL_FQ void m13500_m08 (KERN_ATTR_ESALT (pstoken_t)) +KERNEL_FQ void HC_ATTR_SEQ m13500_m08 (KERN_ATTR_ESALT (pstoken_t)) { } -KERNEL_FQ void m13500_m16 (KERN_ATTR_ESALT (pstoken_t)) +KERNEL_FQ void HC_ATTR_SEQ m13500_m16 (KERN_ATTR_ESALT (pstoken_t)) { } -KERNEL_FQ void m13500_s04 (KERN_ATTR_ESALT (pstoken_t)) +KERNEL_FQ void HC_ATTR_SEQ m13500_s04 (KERN_ATTR_ESALT (pstoken_t)) { /** * modifier @@ -983,10 +983,10 @@ KERNEL_FQ void m13500_s04 (KERN_ATTR_ESALT (pstoken_t)) } } -KERNEL_FQ void m13500_s08 (KERN_ATTR_ESALT (pstoken_t)) +KERNEL_FQ void HC_ATTR_SEQ m13500_s08 (KERN_ATTR_ESALT (pstoken_t)) { } -KERNEL_FQ void m13500_s16 (KERN_ATTR_ESALT (pstoken_t)) +KERNEL_FQ void HC_ATTR_SEQ m13500_s16 (KERN_ATTR_ESALT (pstoken_t)) { } diff --git a/OpenCL/m13500_a1-pure.cl b/OpenCL/m13500_a1-pure.cl index 9e8438e15..a2d53c3e8 100644 --- a/OpenCL/m13500_a1-pure.cl +++ b/OpenCL/m13500_a1-pure.cl @@ -24,7 +24,7 @@ typedef struct pstoken } pstoken_t; -KERNEL_FQ void m13500_mxx (KERN_ATTR_ESALT (pstoken_t)) +KERNEL_FQ void HC_ATTR_SEQ m13500_mxx (KERN_ATTR_ESALT (pstoken_t)) { /** * modifier @@ -95,7 +95,7 @@ KERNEL_FQ void m13500_mxx (KERN_ATTR_ESALT (pstoken_t)) } } -KERNEL_FQ void m13500_sxx (KERN_ATTR_ESALT (pstoken_t)) +KERNEL_FQ void HC_ATTR_SEQ m13500_sxx (KERN_ATTR_ESALT (pstoken_t)) { /** * modifier diff --git a/OpenCL/m13500_a3-optimized.cl b/OpenCL/m13500_a3-optimized.cl index eb334cdac..126f56a11 100644 --- a/OpenCL/m13500_a3-optimized.cl +++ b/OpenCL/m13500_a3-optimized.cl @@ -817,7 +817,7 @@ DECLSPEC void m13500s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m13500_m04 (KERN_ATTR_ESALT (pstoken_t)) +KERNEL_FQ void HC_ATTR_SEQ m13500_m04 (KERN_ATTR_ESALT (pstoken_t)) { /** * base @@ -866,7 +866,7 @@ KERNEL_FQ void m13500_m04 (KERN_ATTR_ESALT (pstoken_t)) m13500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m13500_m08 (KERN_ATTR_ESALT (pstoken_t)) +KERNEL_FQ void HC_ATTR_SEQ m13500_m08 (KERN_ATTR_ESALT (pstoken_t)) { /** * base @@ -915,7 +915,7 @@ KERNEL_FQ void m13500_m08 (KERN_ATTR_ESALT (pstoken_t)) m13500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m13500_m16 (KERN_ATTR_ESALT (pstoken_t)) +KERNEL_FQ void HC_ATTR_SEQ m13500_m16 (KERN_ATTR_ESALT (pstoken_t)) { /** * base @@ -964,7 +964,7 @@ KERNEL_FQ void m13500_m16 (KERN_ATTR_ESALT (pstoken_t)) m13500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m13500_s04 (KERN_ATTR_ESALT (pstoken_t)) +KERNEL_FQ void HC_ATTR_SEQ m13500_s04 (KERN_ATTR_ESALT (pstoken_t)) { /** * base @@ -1013,7 +1013,7 @@ KERNEL_FQ void m13500_s04 (KERN_ATTR_ESALT (pstoken_t)) m13500s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m13500_s08 (KERN_ATTR_ESALT (pstoken_t)) +KERNEL_FQ void HC_ATTR_SEQ m13500_s08 (KERN_ATTR_ESALT (pstoken_t)) { /** * base @@ -1062,7 +1062,7 @@ KERNEL_FQ void m13500_s08 (KERN_ATTR_ESALT (pstoken_t)) m13500s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m13500_s16 (KERN_ATTR_ESALT (pstoken_t)) +KERNEL_FQ void HC_ATTR_SEQ m13500_s16 (KERN_ATTR_ESALT (pstoken_t)) { /** * base diff --git a/OpenCL/m13500_a3-pure.cl b/OpenCL/m13500_a3-pure.cl index 2dee0a358..80ffdd0fe 100644 --- a/OpenCL/m13500_a3-pure.cl +++ b/OpenCL/m13500_a3-pure.cl @@ -24,7 +24,7 @@ typedef struct pstoken } pstoken_t; -KERNEL_FQ void m13500_mxx (KERN_ATTR_VECTOR_ESALT (pstoken_t)) +KERNEL_FQ void HC_ATTR_SEQ m13500_mxx (KERN_ATTR_VECTOR_ESALT (pstoken_t)) { /** * modifier @@ -112,7 +112,7 @@ KERNEL_FQ void m13500_mxx (KERN_ATTR_VECTOR_ESALT (pstoken_t)) } } -KERNEL_FQ void m13500_sxx (KERN_ATTR_VECTOR_ESALT (pstoken_t)) +KERNEL_FQ void HC_ATTR_SEQ m13500_sxx (KERN_ATTR_VECTOR_ESALT (pstoken_t)) { /** * modifier diff --git a/OpenCL/m13600-pure.cl b/OpenCL/m13600-pure.cl index 5a114304e..0ac35a165 100644 --- a/OpenCL/m13600-pure.cl +++ b/OpenCL/m13600-pure.cl @@ -79,7 +79,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m13600_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, zip2_t)) +KERNEL_FQ void HC_ATTR_SEQ m13600_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, zip2_t)) { /** * base @@ -188,7 +188,7 @@ KERNEL_FQ void m13600_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, zip2_t)) } } -KERNEL_FQ void m13600_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, zip2_t)) +KERNEL_FQ void HC_ATTR_SEQ m13600_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, zip2_t)) { const u64 gid = get_global_id (0); @@ -302,7 +302,7 @@ KERNEL_FQ void m13600_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, zip2_t)) } } -KERNEL_FQ void m13600_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, zip2_t)) +KERNEL_FQ void HC_ATTR_SEQ m13600_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, zip2_t)) { /** * base diff --git a/OpenCL/m13711-pure.cl b/OpenCL/m13711-pure.cl index 36ae740a7..76ab6d8f3 100644 --- a/OpenCL/m13711-pure.cl +++ b/OpenCL/m13711-pure.cl @@ -124,7 +124,7 @@ DECLSPEC void hmac_ripemd160_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PR ripemd160_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m13711_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13711_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -254,7 +254,7 @@ KERNEL_FQ void m13711_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void m13711_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13711_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); @@ -385,7 +385,7 @@ KERNEL_FQ void m13711_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void m13711_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13711_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -457,7 +457,7 @@ KERNEL_FQ void m13711_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void m13711_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13711_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13712-pure.cl b/OpenCL/m13712-pure.cl index 11acc1753..a71118ebc 100644 --- a/OpenCL/m13712-pure.cl +++ b/OpenCL/m13712-pure.cl @@ -175,7 +175,7 @@ DECLSPEC void hmac_ripemd160_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PR ripemd160_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m13712_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13712_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -305,7 +305,7 @@ KERNEL_FQ void m13712_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void m13712_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13712_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); @@ -436,7 +436,7 @@ KERNEL_FQ void m13712_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void m13712_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13712_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -513,7 +513,7 @@ KERNEL_FQ void m13712_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void m13712_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13712_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13713-pure.cl b/OpenCL/m13713-pure.cl index e03a1e86a..89dd9a58c 100644 --- a/OpenCL/m13713-pure.cl +++ b/OpenCL/m13713-pure.cl @@ -240,7 +240,7 @@ DECLSPEC void hmac_ripemd160_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PR ripemd160_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m13713_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13713_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -370,7 +370,7 @@ KERNEL_FQ void m13713_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void m13713_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13713_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); @@ -501,7 +501,7 @@ KERNEL_FQ void m13713_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void m13713_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13713_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -583,7 +583,7 @@ KERNEL_FQ void m13713_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void m13713_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13713_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13721-pure.cl b/OpenCL/m13721-pure.cl index 978497b58..ad4fb1f82 100644 --- a/OpenCL/m13721-pure.cl +++ b/OpenCL/m13721-pure.cl @@ -146,7 +146,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void m13721_init (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13721_init (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -308,7 +308,7 @@ KERNEL_FQ void m13721_init (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) } } -KERNEL_FQ void m13721_loop (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13721_loop (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) { const u64 gid = get_global_id (0); @@ -483,7 +483,7 @@ KERNEL_FQ void m13721_loop (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) } } -KERNEL_FQ void m13721_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13721_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -555,7 +555,7 @@ KERNEL_FQ void m13721_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) } } -KERNEL_FQ void m13721_comp (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13721_comp (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13722-pure.cl b/OpenCL/m13722-pure.cl index 12590f2fb..fb71d683e 100644 --- a/OpenCL/m13722-pure.cl +++ b/OpenCL/m13722-pure.cl @@ -197,7 +197,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void m13722_init (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13722_init (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -359,7 +359,7 @@ KERNEL_FQ void m13722_init (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) } } -KERNEL_FQ void m13722_loop (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13722_loop (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) { const u64 gid = get_global_id (0); @@ -534,7 +534,7 @@ KERNEL_FQ void m13722_loop (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) } } -KERNEL_FQ void m13722_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13722_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -611,7 +611,7 @@ KERNEL_FQ void m13722_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) } } -KERNEL_FQ void m13722_comp (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13722_comp (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13723-pure.cl b/OpenCL/m13723-pure.cl index 8d67e7c7a..978d364c5 100644 --- a/OpenCL/m13723-pure.cl +++ b/OpenCL/m13723-pure.cl @@ -262,7 +262,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void m13723_init (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13723_init (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -424,7 +424,7 @@ KERNEL_FQ void m13723_init (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) } } -KERNEL_FQ void m13723_loop (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13723_loop (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) { const u64 gid = get_global_id (0); @@ -599,7 +599,7 @@ KERNEL_FQ void m13723_loop (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) } } -KERNEL_FQ void m13723_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13723_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -681,7 +681,7 @@ KERNEL_FQ void m13723_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) } } -KERNEL_FQ void m13723_comp (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13723_comp (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13731-pure.cl b/OpenCL/m13731-pure.cl index bf6109688..3e0e78ff2 100644 --- a/OpenCL/m13731-pure.cl +++ b/OpenCL/m13731-pure.cl @@ -184,7 +184,7 @@ DECLSPEC void hmac_whirlpool_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PR whirlpool_transform_vector (w0, w1, w2, w3, digest, s_MT0, s_MT1, s_MT2, s_MT3, s_MT4, s_MT5, s_MT6, s_MT7); } -KERNEL_FQ void m13731_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13731_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -400,7 +400,7 @@ KERNEL_FQ void m13731_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void m13731_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13731_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -663,7 +663,7 @@ KERNEL_FQ void m13731_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void m13731_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13731_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -735,7 +735,7 @@ KERNEL_FQ void m13731_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void m13731_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13731_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13732-pure.cl b/OpenCL/m13732-pure.cl index 5cebed18e..5e7176021 100644 --- a/OpenCL/m13732-pure.cl +++ b/OpenCL/m13732-pure.cl @@ -235,7 +235,7 @@ DECLSPEC void hmac_whirlpool_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PR whirlpool_transform_vector (w0, w1, w2, w3, digest, s_MT0, s_MT1, s_MT2, s_MT3, s_MT4, s_MT5, s_MT6, s_MT7); } -KERNEL_FQ void m13732_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13732_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -451,7 +451,7 @@ KERNEL_FQ void m13732_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void m13732_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13732_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -714,7 +714,7 @@ KERNEL_FQ void m13732_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void m13732_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13732_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -791,7 +791,7 @@ KERNEL_FQ void m13732_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void m13732_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13732_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13733-pure.cl b/OpenCL/m13733-pure.cl index a16ee5740..ce11c1f1b 100644 --- a/OpenCL/m13733-pure.cl +++ b/OpenCL/m13733-pure.cl @@ -300,7 +300,7 @@ DECLSPEC void hmac_whirlpool_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PR whirlpool_transform_vector (w0, w1, w2, w3, digest, s_MT0, s_MT1, s_MT2, s_MT3, s_MT4, s_MT5, s_MT6, s_MT7); } -KERNEL_FQ void m13733_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13733_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -516,7 +516,7 @@ KERNEL_FQ void m13733_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void m13733_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13733_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -779,7 +779,7 @@ KERNEL_FQ void m13733_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void m13733_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13733_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -861,7 +861,7 @@ KERNEL_FQ void m13733_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void m13733_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13733_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13751-pure.cl b/OpenCL/m13751-pure.cl index cd7a2dbd8..1b01931e5 100644 --- a/OpenCL/m13751-pure.cl +++ b/OpenCL/m13751-pure.cl @@ -130,7 +130,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m13751_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13751_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -276,7 +276,7 @@ KERNEL_FQ void m13751_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void m13751_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13751_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); @@ -460,7 +460,7 @@ KERNEL_FQ void m13751_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void m13751_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13751_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -532,7 +532,7 @@ KERNEL_FQ void m13751_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void m13751_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13751_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13752-pure.cl b/OpenCL/m13752-pure.cl index a7a977e31..f8ffca28b 100644 --- a/OpenCL/m13752-pure.cl +++ b/OpenCL/m13752-pure.cl @@ -181,7 +181,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m13752_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13752_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -327,7 +327,7 @@ KERNEL_FQ void m13752_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void m13752_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13752_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); @@ -482,7 +482,7 @@ KERNEL_FQ void m13752_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void m13752_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13752_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -559,7 +559,7 @@ KERNEL_FQ void m13752_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void m13752_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13752_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13753-pure.cl b/OpenCL/m13753-pure.cl index 7df35f839..4d2a90f34 100644 --- a/OpenCL/m13753-pure.cl +++ b/OpenCL/m13753-pure.cl @@ -246,7 +246,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m13753_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13753_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -392,7 +392,7 @@ KERNEL_FQ void m13753_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void m13753_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13753_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); @@ -547,7 +547,7 @@ KERNEL_FQ void m13753_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void m13753_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13753_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -629,7 +629,7 @@ KERNEL_FQ void m13753_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void m13753_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13753_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13771-pure.cl b/OpenCL/m13771-pure.cl index e212dfacb..8bbedbd55 100644 --- a/OpenCL/m13771-pure.cl +++ b/OpenCL/m13771-pure.cl @@ -176,7 +176,7 @@ DECLSPEC void hmac_streebog512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, streebog512_g_vector (digest, nullbuf, message, s_sbob_sl64); } -KERNEL_FQ void m13771_init (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13771_init (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -356,7 +356,7 @@ KERNEL_FQ void m13771_init (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) } } -KERNEL_FQ void m13771_loop (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13771_loop (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -562,7 +562,7 @@ KERNEL_FQ void m13771_loop (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) } } -KERNEL_FQ void m13771_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13771_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -634,7 +634,7 @@ KERNEL_FQ void m13771_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t } } -KERNEL_FQ void m13771_comp (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13771_comp (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13772-pure.cl b/OpenCL/m13772-pure.cl index c4b870208..a305cc6c2 100644 --- a/OpenCL/m13772-pure.cl +++ b/OpenCL/m13772-pure.cl @@ -227,7 +227,7 @@ DECLSPEC void hmac_streebog512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, streebog512_g_vector (digest, nullbuf, message, s_sbob_sl64); } -KERNEL_FQ void m13772_init (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13772_init (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -451,7 +451,7 @@ KERNEL_FQ void m13772_init (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) tmps[gid].out[i + 7] = tmps[gid].dgst[i + 7]; } -KERNEL_FQ void m13772_loop (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13772_loop (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -657,7 +657,7 @@ KERNEL_FQ void m13772_loop (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) } } -KERNEL_FQ void m13772_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13772_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -734,7 +734,7 @@ KERNEL_FQ void m13772_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t } } -KERNEL_FQ void m13772_comp (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13772_comp (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13773-pure.cl b/OpenCL/m13773-pure.cl index 55f14890c..3db98fa73 100644 --- a/OpenCL/m13773-pure.cl +++ b/OpenCL/m13773-pure.cl @@ -292,7 +292,7 @@ DECLSPEC void hmac_streebog512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, streebog512_g_vector (digest, nullbuf, message, s_sbob_sl64); } -KERNEL_FQ void m13773_init (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13773_init (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -560,7 +560,7 @@ KERNEL_FQ void m13773_init (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) tmps[gid].out[i + 7] = tmps[gid].dgst[i + 7]; } -KERNEL_FQ void m13773_loop (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13773_loop (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -766,7 +766,7 @@ KERNEL_FQ void m13773_loop (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) } } -KERNEL_FQ void m13773_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13773_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -848,7 +848,7 @@ KERNEL_FQ void m13773_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t } } -KERNEL_FQ void m13773_comp (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) +KERNEL_FQ void HC_ATTR_SEQ m13773_comp (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13800_a0-optimized.cl b/OpenCL/m13800_a0-optimized.cl index 4da2d1c98..1f956db85 100644 --- a/OpenCL/m13800_a0-optimized.cl +++ b/OpenCL/m13800_a0-optimized.cl @@ -410,7 +410,7 @@ DECLSPEC void memcat64c_be (PRIVATE_AS u32x *block, const u32 offset, PRIVATE_AS } } -KERNEL_FQ void m13800_m04 (KERN_ATTR_RULES_ESALT (win8phone_t)) +KERNEL_FQ void HC_ATTR_SEQ m13800_m04 (KERN_ATTR_RULES_ESALT (win8phone_t)) { /** * modifier @@ -598,15 +598,15 @@ KERNEL_FQ void m13800_m04 (KERN_ATTR_RULES_ESALT (win8phone_t)) } } -KERNEL_FQ void m13800_m08 (KERN_ATTR_RULES_ESALT (win8phone_t)) +KERNEL_FQ void HC_ATTR_SEQ m13800_m08 (KERN_ATTR_RULES_ESALT (win8phone_t)) { } -KERNEL_FQ void m13800_m16 (KERN_ATTR_RULES_ESALT (win8phone_t)) +KERNEL_FQ void HC_ATTR_SEQ m13800_m16 (KERN_ATTR_RULES_ESALT (win8phone_t)) { } -KERNEL_FQ void m13800_s04 (KERN_ATTR_RULES_ESALT (win8phone_t)) +KERNEL_FQ void HC_ATTR_SEQ m13800_s04 (KERN_ATTR_RULES_ESALT (win8phone_t)) { /** * modifier @@ -806,10 +806,10 @@ KERNEL_FQ void m13800_s04 (KERN_ATTR_RULES_ESALT (win8phone_t)) } } -KERNEL_FQ void m13800_s08 (KERN_ATTR_RULES_ESALT (win8phone_t)) +KERNEL_FQ void HC_ATTR_SEQ m13800_s08 (KERN_ATTR_RULES_ESALT (win8phone_t)) { } -KERNEL_FQ void m13800_s16 (KERN_ATTR_RULES_ESALT (win8phone_t)) +KERNEL_FQ void HC_ATTR_SEQ m13800_s16 (KERN_ATTR_RULES_ESALT (win8phone_t)) { } diff --git a/OpenCL/m13800_a0-pure.cl b/OpenCL/m13800_a0-pure.cl index c7a1d0299..bfaf22173 100644 --- a/OpenCL/m13800_a0-pure.cl +++ b/OpenCL/m13800_a0-pure.cl @@ -22,7 +22,7 @@ typedef struct win8phone } win8phone_t; -KERNEL_FQ void m13800_mxx (KERN_ATTR_RULES_ESALT (win8phone_t)) +KERNEL_FQ void HC_ATTR_SEQ m13800_mxx (KERN_ATTR_RULES_ESALT (win8phone_t)) { /** * modifier @@ -68,7 +68,7 @@ KERNEL_FQ void m13800_mxx (KERN_ATTR_RULES_ESALT (win8phone_t)) } } -KERNEL_FQ void m13800_sxx (KERN_ATTR_RULES_ESALT (win8phone_t)) +KERNEL_FQ void HC_ATTR_SEQ m13800_sxx (KERN_ATTR_RULES_ESALT (win8phone_t)) { /** * modifier diff --git a/OpenCL/m13800_a1-optimized.cl b/OpenCL/m13800_a1-optimized.cl index 033f3a98e..ba8791c0f 100644 --- a/OpenCL/m13800_a1-optimized.cl +++ b/OpenCL/m13800_a1-optimized.cl @@ -408,7 +408,7 @@ DECLSPEC void memcat64c_be (PRIVATE_AS u32x *block, const u32 offset, PRIVATE_AS } } -KERNEL_FQ void m13800_m04 (KERN_ATTR_ESALT (win8phone_t)) +KERNEL_FQ void HC_ATTR_SEQ m13800_m04 (KERN_ATTR_ESALT (win8phone_t)) { /** * modifier @@ -652,15 +652,15 @@ KERNEL_FQ void m13800_m04 (KERN_ATTR_ESALT (win8phone_t)) } } -KERNEL_FQ void m13800_m08 (KERN_ATTR_ESALT (win8phone_t)) +KERNEL_FQ void HC_ATTR_SEQ m13800_m08 (KERN_ATTR_ESALT (win8phone_t)) { } -KERNEL_FQ void m13800_m16 (KERN_ATTR_ESALT (win8phone_t)) +KERNEL_FQ void HC_ATTR_SEQ m13800_m16 (KERN_ATTR_ESALT (win8phone_t)) { } -KERNEL_FQ void m13800_s04 (KERN_ATTR_ESALT (win8phone_t)) +KERNEL_FQ void HC_ATTR_SEQ m13800_s04 (KERN_ATTR_ESALT (win8phone_t)) { /** * modifier @@ -916,10 +916,10 @@ KERNEL_FQ void m13800_s04 (KERN_ATTR_ESALT (win8phone_t)) } } -KERNEL_FQ void m13800_s08 (KERN_ATTR_ESALT (win8phone_t)) +KERNEL_FQ void HC_ATTR_SEQ m13800_s08 (KERN_ATTR_ESALT (win8phone_t)) { } -KERNEL_FQ void m13800_s16 (KERN_ATTR_ESALT (win8phone_t)) +KERNEL_FQ void HC_ATTR_SEQ m13800_s16 (KERN_ATTR_ESALT (win8phone_t)) { } diff --git a/OpenCL/m13800_a1-pure.cl b/OpenCL/m13800_a1-pure.cl index 5e507e7f4..b287fb389 100644 --- a/OpenCL/m13800_a1-pure.cl +++ b/OpenCL/m13800_a1-pure.cl @@ -20,7 +20,7 @@ typedef struct win8phone } win8phone_t; -KERNEL_FQ void m13800_mxx (KERN_ATTR_ESALT (win8phone_t)) +KERNEL_FQ void HC_ATTR_SEQ m13800_mxx (KERN_ATTR_ESALT (win8phone_t)) { /** * modifier @@ -64,7 +64,7 @@ KERNEL_FQ void m13800_mxx (KERN_ATTR_ESALT (win8phone_t)) } } -KERNEL_FQ void m13800_sxx (KERN_ATTR_ESALT (win8phone_t)) +KERNEL_FQ void HC_ATTR_SEQ m13800_sxx (KERN_ATTR_ESALT (win8phone_t)) { /** * modifier diff --git a/OpenCL/m13800_a3-optimized.cl b/OpenCL/m13800_a3-optimized.cl index 8352ffb4f..151d13ce1 100644 --- a/OpenCL/m13800_a3-optimized.cl +++ b/OpenCL/m13800_a3-optimized.cl @@ -709,7 +709,7 @@ DECLSPEC void m13800s (LOCAL_AS u32 *s_esalt, PRIVATE_AS u32 *w, const u32 pw_le } } -KERNEL_FQ void m13800_m04 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) +KERNEL_FQ void HC_ATTR_SEQ m13800_m04 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) { /** * modifier @@ -766,7 +766,7 @@ KERNEL_FQ void m13800_m04 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) m13800m (s_esalt, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m13800_m08 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) +KERNEL_FQ void HC_ATTR_SEQ m13800_m08 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) { /** * modifier @@ -823,7 +823,7 @@ KERNEL_FQ void m13800_m08 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) m13800m (s_esalt, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m13800_m16 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) +KERNEL_FQ void HC_ATTR_SEQ m13800_m16 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) { /** * modifier @@ -880,7 +880,7 @@ KERNEL_FQ void m13800_m16 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) m13800m (s_esalt, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m13800_s04 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) +KERNEL_FQ void HC_ATTR_SEQ m13800_s04 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) { /** * modifier @@ -937,7 +937,7 @@ KERNEL_FQ void m13800_s04 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) m13800s (s_esalt, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m13800_s08 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) +KERNEL_FQ void HC_ATTR_SEQ m13800_s08 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) { /** * modifier @@ -994,7 +994,7 @@ KERNEL_FQ void m13800_s08 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) m13800s (s_esalt, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m13800_s16 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) +KERNEL_FQ void HC_ATTR_SEQ m13800_s16 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) { /** * modifier diff --git a/OpenCL/m13800_a3-pure.cl b/OpenCL/m13800_a3-pure.cl index 47ad0f431..4fe593d39 100644 --- a/OpenCL/m13800_a3-pure.cl +++ b/OpenCL/m13800_a3-pure.cl @@ -20,7 +20,7 @@ typedef struct win8phone } win8phone_t; -KERNEL_FQ void m13800_mxx (KERN_ATTR_VECTOR_ESALT (win8phone_t)) +KERNEL_FQ void HC_ATTR_SEQ m13800_mxx (KERN_ATTR_VECTOR_ESALT (win8phone_t)) { /** * modifier @@ -86,7 +86,7 @@ KERNEL_FQ void m13800_mxx (KERN_ATTR_VECTOR_ESALT (win8phone_t)) } } -KERNEL_FQ void m13800_sxx (KERN_ATTR_VECTOR_ESALT (win8phone_t)) +KERNEL_FQ void HC_ATTR_SEQ m13800_sxx (KERN_ATTR_VECTOR_ESALT (win8phone_t)) { /** * modifier diff --git a/OpenCL/m13900_a0-optimized.cl b/OpenCL/m13900_a0-optimized.cl index b24b610e5..ebd91174f 100644 --- a/OpenCL/m13900_a0-optimized.cl +++ b/OpenCL/m13900_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m13900_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m13900_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -247,15 +247,15 @@ KERNEL_FQ void m13900_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m13900_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m13900_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m13900_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m13900_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m13900_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m13900_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -486,10 +486,10 @@ KERNEL_FQ void m13900_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m13900_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m13900_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m13900_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m13900_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m13900_a0-pure.cl b/OpenCL/m13900_a0-pure.cl index df2afe2e9..f90a8c20b 100644 --- a/OpenCL/m13900_a0-pure.cl +++ b/OpenCL/m13900_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m13900_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m13900_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -179,7 +179,7 @@ KERNEL_FQ void m13900_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m13900_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m13900_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m13900_a1-optimized.cl b/OpenCL/m13900_a1-optimized.cl index 22e59655a..d1d8e122a 100644 --- a/OpenCL/m13900_a1-optimized.cl +++ b/OpenCL/m13900_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m13900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m13900_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -303,15 +303,15 @@ KERNEL_FQ void m13900_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m13900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m13900_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m13900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m13900_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m13900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m13900_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -600,10 +600,10 @@ KERNEL_FQ void m13900_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m13900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m13900_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m13900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m13900_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m13900_a1-pure.cl b/OpenCL/m13900_a1-pure.cl index 2da14f898..44bd25e52 100644 --- a/OpenCL/m13900_a1-pure.cl +++ b/OpenCL/m13900_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m13900_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m13900_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -175,7 +175,7 @@ KERNEL_FQ void m13900_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m13900_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m13900_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m13900_a3-optimized.cl b/OpenCL/m13900_a3-optimized.cl index e0292604e..52a5eac15 100644 --- a/OpenCL/m13900_a3-optimized.cl +++ b/OpenCL/m13900_a3-optimized.cl @@ -409,7 +409,7 @@ DECLSPEC void m13900s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m13900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m13900_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -479,7 +479,7 @@ KERNEL_FQ void m13900_m04 (KERN_ATTR_BASIC ()) m13900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m13900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m13900_m08 (KERN_ATTR_BASIC ()) { /** * modifier @@ -549,7 +549,7 @@ KERNEL_FQ void m13900_m08 (KERN_ATTR_BASIC ()) m13900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m13900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m13900_m16 (KERN_ATTR_BASIC ()) { /** * modifier @@ -619,7 +619,7 @@ KERNEL_FQ void m13900_m16 (KERN_ATTR_BASIC ()) m13900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m13900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m13900_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -689,7 +689,7 @@ KERNEL_FQ void m13900_s04 (KERN_ATTR_BASIC ()) m13900s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m13900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m13900_s08 (KERN_ATTR_BASIC ()) { /** * modifier @@ -759,7 +759,7 @@ KERNEL_FQ void m13900_s08 (KERN_ATTR_BASIC ()) m13900s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m13900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m13900_s16 (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m13900_a3-pure.cl b/OpenCL/m13900_a3-pure.cl index 42a93b689..79f8ca395 100644 --- a/OpenCL/m13900_a3-pure.cl +++ b/OpenCL/m13900_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m13900_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m13900_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -192,7 +192,7 @@ KERNEL_FQ void m13900_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m13900_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m13900_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m14000_a0-pure.cl b/OpenCL/m14000_a0-pure.cl index 6f53c5fc0..0e15496a0 100644 --- a/OpenCL/m14000_a0-pure.cl +++ b/OpenCL/m14000_a0-pure.cl @@ -497,7 +497,7 @@ DECLSPEC void _des_crypt_keysetup (u32 c, u32 d, PRIVATE_AS u32 *Kc, PRIVATE_AS } } -KERNEL_FQ void m14000_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m14000_mxx (KERN_ATTR_RULES ()) { /** * base @@ -602,7 +602,7 @@ KERNEL_FQ void m14000_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m14000_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m14000_sxx (KERN_ATTR_RULES ()) { /** * base diff --git a/OpenCL/m14000_a1-pure.cl b/OpenCL/m14000_a1-pure.cl index 2615a66d4..3242d1285 100644 --- a/OpenCL/m14000_a1-pure.cl +++ b/OpenCL/m14000_a1-pure.cl @@ -487,7 +487,7 @@ DECLSPEC void _des_crypt_keysetup (u32 c, u32 d, PRIVATE_AS u32 *Kc, PRIVATE_AS } } -KERNEL_FQ void m14000_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14000_mxx (KERN_ATTR_BASIC ()) { /** * base @@ -635,7 +635,7 @@ KERNEL_FQ void m14000_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m14000_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14000_sxx (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m14000_a3-pure.cl b/OpenCL/m14000_a3-pure.cl index 6b020b286..9a8fdc75e 100644 --- a/OpenCL/m14000_a3-pure.cl +++ b/OpenCL/m14000_a3-pure.cl @@ -1730,7 +1730,7 @@ DECLSPEC void transpose32c (PRIVATE_AS u32 *data) // transpose bitslice mod : attention race conditions, need different buffers for *in and *out // -KERNEL_FQ void m14000_tm (KERN_ATTR_TM) +KERNEL_FQ void HC_ATTR_SEQ m14000_tm (KERN_ATTR_TM) { const u64 gid = get_global_id (0); @@ -1756,7 +1756,7 @@ KERNEL_FQ void m14000_tm (KERN_ATTR_TM) } } -KERNEL_FQ void m14000_mxx (KERN_ATTR_BITSLICE ()) +KERNEL_FQ void HC_ATTR_SEQ m14000_mxx (KERN_ATTR_BITSLICE ()) { /** * base @@ -2200,7 +2200,7 @@ KERNEL_FQ void m14000_mxx (KERN_ATTR_BITSLICE ()) } } -KERNEL_FQ void m14000_sxx (KERN_ATTR_BITSLICE ()) +KERNEL_FQ void HC_ATTR_SEQ m14000_sxx (KERN_ATTR_BITSLICE ()) { /** * base diff --git a/OpenCL/m14100_a0-pure.cl b/OpenCL/m14100_a0-pure.cl index 5466ce60d..8bd7c1b24 100644 --- a/OpenCL/m14100_a0-pure.cl +++ b/OpenCL/m14100_a0-pure.cl @@ -541,7 +541,7 @@ DECLSPEC void _des_crypt_keysetup (u32 c, u32 d, PRIVATE_AS u32 *Kc, PRIVATE_AS } } -KERNEL_FQ void m14100_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m14100_mxx (KERN_ATTR_RULES ()) { /** * base @@ -676,7 +676,7 @@ KERNEL_FQ void m14100_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m14100_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m14100_sxx (KERN_ATTR_RULES ()) { /** * base diff --git a/OpenCL/m14100_a1-pure.cl b/OpenCL/m14100_a1-pure.cl index cd35004a4..04120dae5 100644 --- a/OpenCL/m14100_a1-pure.cl +++ b/OpenCL/m14100_a1-pure.cl @@ -531,7 +531,7 @@ DECLSPEC void _des_crypt_keysetup (u32 c, u32 d, PRIVATE_AS u32 *Kc, PRIVATE_AS } } -KERNEL_FQ void m14100_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14100_mxx (KERN_ATTR_BASIC ()) { /** * base @@ -714,7 +714,7 @@ KERNEL_FQ void m14100_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m14100_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14100_sxx (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m14100_a3-pure.cl b/OpenCL/m14100_a3-pure.cl index 2686f2599..6cfd5d794 100644 --- a/OpenCL/m14100_a3-pure.cl +++ b/OpenCL/m14100_a3-pure.cl @@ -730,7 +730,7 @@ DECLSPEC void m14100s (LOCAL_AS u32 (*s_SPtrans)[64], LOCAL_AS u32 (*s_skb)[64], } } -KERNEL_FQ void m14100_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14100_mxx (KERN_ATTR_BASIC ()) { /** * base @@ -804,7 +804,7 @@ KERNEL_FQ void m14100_mxx (KERN_ATTR_BASIC ()) m14100m (s_SPtrans, s_skb, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m14100_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14100_sxx (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m14400_a0-optimized.cl b/OpenCL/m14400_a0-optimized.cl index c7a9cd640..6aa05b003 100644 --- a/OpenCL/m14400_a0-optimized.cl +++ b/OpenCL/m14400_a0-optimized.cl @@ -118,7 +118,7 @@ DECLSPEC void shift_2 (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w w0[0] = 0 | w0[0] << 16; } -KERNEL_FQ void m14400_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m14400_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -381,15 +381,15 @@ KERNEL_FQ void m14400_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m14400_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m14400_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m14400_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m14400_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m14400_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m14400_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -664,10 +664,10 @@ KERNEL_FQ void m14400_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m14400_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m14400_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m14400_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m14400_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m14400_a0-pure.cl b/OpenCL/m14400_a0-pure.cl index 9e4814289..583ccf752 100644 --- a/OpenCL/m14400_a0-pure.cl +++ b/OpenCL/m14400_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m14400_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m14400_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -275,7 +275,7 @@ KERNEL_FQ void m14400_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m14400_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m14400_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m14400_a1-optimized.cl b/OpenCL/m14400_a1-optimized.cl index b2d7bf2f9..ff92046fd 100644 --- a/OpenCL/m14400_a1-optimized.cl +++ b/OpenCL/m14400_a1-optimized.cl @@ -118,7 +118,7 @@ DECLSPEC void shift_2 (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w w0[0] = 0 | w0[0] << 16; } -KERNEL_FQ void m14400_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14400_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -445,15 +445,15 @@ KERNEL_FQ void m14400_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m14400_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14400_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m14400_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14400_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m14400_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14400_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -792,10 +792,10 @@ KERNEL_FQ void m14400_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m14400_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14400_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m14400_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14400_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m14400_a1-pure.cl b/OpenCL/m14400_a1-pure.cl index 4410dbf46..c86633a86 100644 --- a/OpenCL/m14400_a1-pure.cl +++ b/OpenCL/m14400_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m14400_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14400_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -271,7 +271,7 @@ KERNEL_FQ void m14400_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m14400_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14400_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m14400_a3-optimized.cl b/OpenCL/m14400_a3-optimized.cl index 4598a7632..a36a0e66c 100644 --- a/OpenCL/m14400_a3-optimized.cl +++ b/OpenCL/m14400_a3-optimized.cl @@ -622,7 +622,7 @@ DECLSPEC void m14400s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m14400_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14400_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -692,7 +692,7 @@ KERNEL_FQ void m14400_m04 (KERN_ATTR_BASIC ()) m14400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m14400_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14400_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -762,7 +762,7 @@ KERNEL_FQ void m14400_m08 (KERN_ATTR_BASIC ()) m14400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m14400_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14400_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -832,7 +832,7 @@ KERNEL_FQ void m14400_m16 (KERN_ATTR_BASIC ()) m14400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m14400_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14400_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -902,7 +902,7 @@ KERNEL_FQ void m14400_s04 (KERN_ATTR_BASIC ()) m14400s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m14400_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14400_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -972,7 +972,7 @@ KERNEL_FQ void m14400_s08 (KERN_ATTR_BASIC ()) m14400s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m14400_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14400_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m14400_a3-pure.cl b/OpenCL/m14400_a3-pure.cl index 853044e05..d1812d1f7 100644 --- a/OpenCL/m14400_a3-pure.cl +++ b/OpenCL/m14400_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m14400_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m14400_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -296,7 +296,7 @@ KERNEL_FQ void m14400_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m14400_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m14400_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m14511_a0-pure.cl b/OpenCL/m14511_a0-pure.cl index 201ea1de8..b4b0b35d0 100644 --- a/OpenCL/m14511_a0-pure.cl +++ b/OpenCL/m14511_a0-pure.cl @@ -24,7 +24,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14511_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14511_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier @@ -200,7 +200,7 @@ KERNEL_FQ void m14511_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14511_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14511_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14511_a1-pure.cl b/OpenCL/m14511_a1-pure.cl index 869d38946..ec8131c3a 100644 --- a/OpenCL/m14511_a1-pure.cl +++ b/OpenCL/m14511_a1-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14511_mxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14511_mxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier @@ -210,7 +210,7 @@ KERNEL_FQ void m14511_mxx (KERN_ATTR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14511_sxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14511_sxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14511_a3-pure.cl b/OpenCL/m14511_a3-pure.cl index 507bf490c..969699dc9 100644 --- a/OpenCL/m14511_a3-pure.cl +++ b/OpenCL/m14511_a3-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14511_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14511_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier @@ -203,7 +203,7 @@ KERNEL_FQ void m14511_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14511_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14511_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14512_a0-pure.cl b/OpenCL/m14512_a0-pure.cl index 2120c87c2..11a3071e7 100644 --- a/OpenCL/m14512_a0-pure.cl +++ b/OpenCL/m14512_a0-pure.cl @@ -24,7 +24,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14512_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14512_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier @@ -164,7 +164,7 @@ KERNEL_FQ void m14512_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14512_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14512_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14512_a1-pure.cl b/OpenCL/m14512_a1-pure.cl index 597231930..a6be29429 100644 --- a/OpenCL/m14512_a1-pure.cl +++ b/OpenCL/m14512_a1-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14512_mxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14512_mxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier @@ -174,7 +174,7 @@ KERNEL_FQ void m14512_mxx (KERN_ATTR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14512_sxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14512_sxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14512_a3-pure.cl b/OpenCL/m14512_a3-pure.cl index ace236029..e08927bc1 100644 --- a/OpenCL/m14512_a3-pure.cl +++ b/OpenCL/m14512_a3-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14512_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14512_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier @@ -167,7 +167,7 @@ KERNEL_FQ void m14512_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14512_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14512_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14513_a0-pure.cl b/OpenCL/m14513_a0-pure.cl index 281921530..4f7cc5ed2 100644 --- a/OpenCL/m14513_a0-pure.cl +++ b/OpenCL/m14513_a0-pure.cl @@ -24,7 +24,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14513_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14513_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier @@ -165,7 +165,7 @@ KERNEL_FQ void m14513_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14513_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14513_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14513_a1-pure.cl b/OpenCL/m14513_a1-pure.cl index 71f9f9ade..da16877df 100644 --- a/OpenCL/m14513_a1-pure.cl +++ b/OpenCL/m14513_a1-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14513_mxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14513_mxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier @@ -175,7 +175,7 @@ KERNEL_FQ void m14513_mxx (KERN_ATTR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14513_sxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14513_sxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14513_a3-pure.cl b/OpenCL/m14513_a3-pure.cl index bace1952c..d99f43a4a 100644 --- a/OpenCL/m14513_a3-pure.cl +++ b/OpenCL/m14513_a3-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14513_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14513_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier @@ -168,7 +168,7 @@ KERNEL_FQ void m14513_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14513_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14513_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14521_a0-pure.cl b/OpenCL/m14521_a0-pure.cl index 44f5ba90d..5bac5f5b3 100644 --- a/OpenCL/m14521_a0-pure.cl +++ b/OpenCL/m14521_a0-pure.cl @@ -24,7 +24,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14521_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14521_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier @@ -181,7 +181,7 @@ KERNEL_FQ void m14521_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14521_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14521_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14521_a1-pure.cl b/OpenCL/m14521_a1-pure.cl index f42b48c26..815525b14 100644 --- a/OpenCL/m14521_a1-pure.cl +++ b/OpenCL/m14521_a1-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14521_mxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14521_mxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier @@ -177,7 +177,7 @@ KERNEL_FQ void m14521_mxx (KERN_ATTR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14521_sxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14521_sxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14521_a3-pure.cl b/OpenCL/m14521_a3-pure.cl index 82dfecbf6..e63f5f0ce 100644 --- a/OpenCL/m14521_a3-pure.cl +++ b/OpenCL/m14521_a3-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14521_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14521_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier @@ -190,7 +190,7 @@ KERNEL_FQ void m14521_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14521_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14521_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14522_a0-pure.cl b/OpenCL/m14522_a0-pure.cl index a39b10993..3bc127b21 100644 --- a/OpenCL/m14522_a0-pure.cl +++ b/OpenCL/m14522_a0-pure.cl @@ -24,7 +24,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14522_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14522_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier @@ -145,7 +145,7 @@ KERNEL_FQ void m14522_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14522_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14522_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14522_a1-pure.cl b/OpenCL/m14522_a1-pure.cl index 44d50f9b5..43f1e09c3 100644 --- a/OpenCL/m14522_a1-pure.cl +++ b/OpenCL/m14522_a1-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14522_mxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14522_mxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier @@ -141,7 +141,7 @@ KERNEL_FQ void m14522_mxx (KERN_ATTR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14522_sxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14522_sxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14522_a3-pure.cl b/OpenCL/m14522_a3-pure.cl index 633a71e1a..c72282bd5 100644 --- a/OpenCL/m14522_a3-pure.cl +++ b/OpenCL/m14522_a3-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14522_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14522_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier @@ -154,7 +154,7 @@ KERNEL_FQ void m14522_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14522_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14522_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14523_a0-pure.cl b/OpenCL/m14523_a0-pure.cl index a9ff6de68..d5beea061 100644 --- a/OpenCL/m14523_a0-pure.cl +++ b/OpenCL/m14523_a0-pure.cl @@ -24,7 +24,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14523_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14523_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier @@ -146,7 +146,7 @@ KERNEL_FQ void m14523_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14523_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14523_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14523_a1-pure.cl b/OpenCL/m14523_a1-pure.cl index 557c6d9b7..3ed56f238 100644 --- a/OpenCL/m14523_a1-pure.cl +++ b/OpenCL/m14523_a1-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14523_mxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14523_mxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier @@ -142,7 +142,7 @@ KERNEL_FQ void m14523_mxx (KERN_ATTR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14523_sxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14523_sxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14523_a3-pure.cl b/OpenCL/m14523_a3-pure.cl index b3086a558..699e2cb07 100644 --- a/OpenCL/m14523_a3-pure.cl +++ b/OpenCL/m14523_a3-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14523_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14523_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier @@ -155,7 +155,7 @@ KERNEL_FQ void m14523_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14523_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14523_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14531_a0-pure.cl b/OpenCL/m14531_a0-pure.cl index 9ebed2d37..4e478a752 100644 --- a/OpenCL/m14531_a0-pure.cl +++ b/OpenCL/m14531_a0-pure.cl @@ -24,7 +24,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14531_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14531_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier @@ -181,7 +181,7 @@ KERNEL_FQ void m14531_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14531_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14531_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14531_a1-pure.cl b/OpenCL/m14531_a1-pure.cl index e9c1e686b..6fdd46d4b 100644 --- a/OpenCL/m14531_a1-pure.cl +++ b/OpenCL/m14531_a1-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14531_mxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14531_mxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier @@ -177,7 +177,7 @@ KERNEL_FQ void m14531_mxx (KERN_ATTR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14531_sxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14531_sxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14531_a3-pure.cl b/OpenCL/m14531_a3-pure.cl index ddeb1210b..d7f71985d 100644 --- a/OpenCL/m14531_a3-pure.cl +++ b/OpenCL/m14531_a3-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14531_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14531_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier @@ -190,7 +190,7 @@ KERNEL_FQ void m14531_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14531_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14531_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14532_a0-pure.cl b/OpenCL/m14532_a0-pure.cl index 4ff993369..32234c534 100644 --- a/OpenCL/m14532_a0-pure.cl +++ b/OpenCL/m14532_a0-pure.cl @@ -24,7 +24,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14532_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14532_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier @@ -145,7 +145,7 @@ KERNEL_FQ void m14532_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14532_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14532_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14532_a1-pure.cl b/OpenCL/m14532_a1-pure.cl index 46ea468d8..d410f1a81 100644 --- a/OpenCL/m14532_a1-pure.cl +++ b/OpenCL/m14532_a1-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14532_mxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14532_mxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier @@ -141,7 +141,7 @@ KERNEL_FQ void m14532_mxx (KERN_ATTR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14532_sxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14532_sxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14532_a3-pure.cl b/OpenCL/m14532_a3-pure.cl index d2115cb96..088a79041 100644 --- a/OpenCL/m14532_a3-pure.cl +++ b/OpenCL/m14532_a3-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14532_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14532_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier @@ -154,7 +154,7 @@ KERNEL_FQ void m14532_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14532_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14532_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14533_a0-pure.cl b/OpenCL/m14533_a0-pure.cl index c22abe168..c239dfaac 100644 --- a/OpenCL/m14533_a0-pure.cl +++ b/OpenCL/m14533_a0-pure.cl @@ -24,7 +24,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14533_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14533_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier @@ -146,7 +146,7 @@ KERNEL_FQ void m14533_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14533_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14533_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14533_a1-pure.cl b/OpenCL/m14533_a1-pure.cl index 2ce1e6c37..aac4c3a03 100644 --- a/OpenCL/m14533_a1-pure.cl +++ b/OpenCL/m14533_a1-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14533_mxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14533_mxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier @@ -142,7 +142,7 @@ KERNEL_FQ void m14533_mxx (KERN_ATTR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14533_sxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14533_sxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14533_a3-pure.cl b/OpenCL/m14533_a3-pure.cl index 294e8fb74..bfda0d082 100644 --- a/OpenCL/m14533_a3-pure.cl +++ b/OpenCL/m14533_a3-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14533_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14533_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier @@ -155,7 +155,7 @@ KERNEL_FQ void m14533_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14533_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14533_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14541_a0-pure.cl b/OpenCL/m14541_a0-pure.cl index d04e0e96d..2ef1ad9ee 100644 --- a/OpenCL/m14541_a0-pure.cl +++ b/OpenCL/m14541_a0-pure.cl @@ -24,7 +24,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14541_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14541_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier @@ -200,7 +200,7 @@ KERNEL_FQ void m14541_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14541_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14541_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14541_a1-pure.cl b/OpenCL/m14541_a1-pure.cl index 822edab4b..366e77e75 100644 --- a/OpenCL/m14541_a1-pure.cl +++ b/OpenCL/m14541_a1-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14541_mxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14541_mxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier @@ -210,7 +210,7 @@ KERNEL_FQ void m14541_mxx (KERN_ATTR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14541_sxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14541_sxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14541_a3-pure.cl b/OpenCL/m14541_a3-pure.cl index 826768b8e..7c66bb6b0 100644 --- a/OpenCL/m14541_a3-pure.cl +++ b/OpenCL/m14541_a3-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14541_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14541_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier @@ -203,7 +203,7 @@ KERNEL_FQ void m14541_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14541_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14541_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14542_a0-pure.cl b/OpenCL/m14542_a0-pure.cl index 9231a7d81..ce32d535f 100644 --- a/OpenCL/m14542_a0-pure.cl +++ b/OpenCL/m14542_a0-pure.cl @@ -24,7 +24,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14542_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14542_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier @@ -164,7 +164,7 @@ KERNEL_FQ void m14542_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14542_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14542_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14542_a1-pure.cl b/OpenCL/m14542_a1-pure.cl index d25a00920..3c221d0a5 100644 --- a/OpenCL/m14542_a1-pure.cl +++ b/OpenCL/m14542_a1-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14542_mxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14542_mxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier @@ -174,7 +174,7 @@ KERNEL_FQ void m14542_mxx (KERN_ATTR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14542_sxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14542_sxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14542_a3-pure.cl b/OpenCL/m14542_a3-pure.cl index 2e167c5e1..687ed6df7 100644 --- a/OpenCL/m14542_a3-pure.cl +++ b/OpenCL/m14542_a3-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14542_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14542_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier @@ -167,7 +167,7 @@ KERNEL_FQ void m14542_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14542_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14542_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14543_a0-pure.cl b/OpenCL/m14543_a0-pure.cl index 5fcd0c681..be628da66 100644 --- a/OpenCL/m14543_a0-pure.cl +++ b/OpenCL/m14543_a0-pure.cl @@ -24,7 +24,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14543_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14543_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier @@ -165,7 +165,7 @@ KERNEL_FQ void m14543_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14543_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14543_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14543_a1-pure.cl b/OpenCL/m14543_a1-pure.cl index aea17884c..194864f4f 100644 --- a/OpenCL/m14543_a1-pure.cl +++ b/OpenCL/m14543_a1-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14543_mxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14543_mxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier @@ -175,7 +175,7 @@ KERNEL_FQ void m14543_mxx (KERN_ATTR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14543_sxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14543_sxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14543_a3-pure.cl b/OpenCL/m14543_a3-pure.cl index b40223c38..b164cec0a 100644 --- a/OpenCL/m14543_a3-pure.cl +++ b/OpenCL/m14543_a3-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14543_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14543_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier @@ -168,7 +168,7 @@ KERNEL_FQ void m14543_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14543_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14543_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14551_a0-pure.cl b/OpenCL/m14551_a0-pure.cl index e8a8ee9c3..6dec5f5a6 100644 --- a/OpenCL/m14551_a0-pure.cl +++ b/OpenCL/m14551_a0-pure.cl @@ -24,7 +24,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14551_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14551_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier @@ -208,7 +208,7 @@ KERNEL_FQ void m14551_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14551_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14551_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14551_a1-pure.cl b/OpenCL/m14551_a1-pure.cl index 402a40494..f2ae8814d 100644 --- a/OpenCL/m14551_a1-pure.cl +++ b/OpenCL/m14551_a1-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14551_mxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14551_mxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier @@ -204,7 +204,7 @@ KERNEL_FQ void m14551_mxx (KERN_ATTR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14551_sxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14551_sxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14551_a3-pure.cl b/OpenCL/m14551_a3-pure.cl index 7069505e8..39a3671b6 100644 --- a/OpenCL/m14551_a3-pure.cl +++ b/OpenCL/m14551_a3-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14551_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14551_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier @@ -217,7 +217,7 @@ KERNEL_FQ void m14551_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14551_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14551_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14552_a0-pure.cl b/OpenCL/m14552_a0-pure.cl index 70ea01567..f768f000f 100644 --- a/OpenCL/m14552_a0-pure.cl +++ b/OpenCL/m14552_a0-pure.cl @@ -24,7 +24,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14552_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14552_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier @@ -190,7 +190,7 @@ KERNEL_FQ void m14552_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14552_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14552_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14552_a1-pure.cl b/OpenCL/m14552_a1-pure.cl index dd7ce6f30..689040b26 100644 --- a/OpenCL/m14552_a1-pure.cl +++ b/OpenCL/m14552_a1-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14552_mxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14552_mxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier @@ -186,7 +186,7 @@ KERNEL_FQ void m14552_mxx (KERN_ATTR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14552_sxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14552_sxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14552_a3-pure.cl b/OpenCL/m14552_a3-pure.cl index b42e8d2f3..9c767e0fb 100644 --- a/OpenCL/m14552_a3-pure.cl +++ b/OpenCL/m14552_a3-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14552_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14552_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier @@ -199,7 +199,7 @@ KERNEL_FQ void m14552_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14552_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14552_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14553_a0-pure.cl b/OpenCL/m14553_a0-pure.cl index 0ee833a6d..381c433b9 100644 --- a/OpenCL/m14553_a0-pure.cl +++ b/OpenCL/m14553_a0-pure.cl @@ -24,7 +24,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14553_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14553_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier @@ -191,7 +191,7 @@ KERNEL_FQ void m14553_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14553_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14553_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14553_a1-pure.cl b/OpenCL/m14553_a1-pure.cl index 0aca6847a..57bc2e5a2 100644 --- a/OpenCL/m14553_a1-pure.cl +++ b/OpenCL/m14553_a1-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14553_mxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14553_mxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier @@ -187,7 +187,7 @@ KERNEL_FQ void m14553_mxx (KERN_ATTR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14553_sxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14553_sxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14553_a3-pure.cl b/OpenCL/m14553_a3-pure.cl index 62048e1ed..ba83d6eb2 100644 --- a/OpenCL/m14553_a3-pure.cl +++ b/OpenCL/m14553_a3-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void m14553_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14553_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier @@ -200,7 +200,7 @@ KERNEL_FQ void m14553_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void m14553_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ void HC_ATTR_SEQ m14553_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14611-pure.cl b/OpenCL/m14611-pure.cl index 7d9c6742a..84e4b4a60 100644 --- a/OpenCL/m14611-pure.cl +++ b/OpenCL/m14611-pure.cl @@ -136,7 +136,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m14611_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14611_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { /** * base @@ -210,7 +210,7 @@ KERNEL_FQ void m14611_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) } } -KERNEL_FQ void m14611_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14611_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); @@ -297,7 +297,7 @@ KERNEL_FQ void m14611_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) } } -KERNEL_FQ void m14611_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14611_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m14612-pure.cl b/OpenCL/m14612-pure.cl index d00cca68f..1380a5f2a 100644 --- a/OpenCL/m14612-pure.cl +++ b/OpenCL/m14612-pure.cl @@ -136,7 +136,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m14612_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14612_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { /** * base @@ -210,7 +210,7 @@ KERNEL_FQ void m14612_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) } } -KERNEL_FQ void m14612_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14612_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); @@ -297,7 +297,7 @@ KERNEL_FQ void m14612_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) } } -KERNEL_FQ void m14612_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14612_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m14613-pure.cl b/OpenCL/m14613-pure.cl index d1788d9bc..d9e9c21ff 100644 --- a/OpenCL/m14613-pure.cl +++ b/OpenCL/m14613-pure.cl @@ -136,7 +136,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m14613_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14613_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { /** * base @@ -210,7 +210,7 @@ KERNEL_FQ void m14613_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) } } -KERNEL_FQ void m14613_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14613_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); @@ -297,7 +297,7 @@ KERNEL_FQ void m14613_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) } } -KERNEL_FQ void m14613_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14613_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m14621-pure.cl b/OpenCL/m14621-pure.cl index 6789f606c..f79c780ba 100644 --- a/OpenCL/m14621-pure.cl +++ b/OpenCL/m14621-pure.cl @@ -142,7 +142,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m14621_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14621_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { /** * base @@ -228,7 +228,7 @@ KERNEL_FQ void m14621_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) } } -KERNEL_FQ void m14621_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14621_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); @@ -336,7 +336,7 @@ KERNEL_FQ void m14621_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) } } -KERNEL_FQ void m14621_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14621_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m14622-pure.cl b/OpenCL/m14622-pure.cl index 0921fbde4..f69df29b0 100644 --- a/OpenCL/m14622-pure.cl +++ b/OpenCL/m14622-pure.cl @@ -142,7 +142,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m14622_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14622_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { /** * base @@ -228,7 +228,7 @@ KERNEL_FQ void m14622_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) } } -KERNEL_FQ void m14622_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14622_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); @@ -336,7 +336,7 @@ KERNEL_FQ void m14622_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) } } -KERNEL_FQ void m14622_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14622_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m14623-pure.cl b/OpenCL/m14623-pure.cl index 98884e25e..9816d7d66 100644 --- a/OpenCL/m14623-pure.cl +++ b/OpenCL/m14623-pure.cl @@ -142,7 +142,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m14623_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14623_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { /** * base @@ -228,7 +228,7 @@ KERNEL_FQ void m14623_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) } } -KERNEL_FQ void m14623_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14623_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); @@ -336,7 +336,7 @@ KERNEL_FQ void m14623_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) } } -KERNEL_FQ void m14623_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14623_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m14631-pure.cl b/OpenCL/m14631-pure.cl index f42f215c4..a39f50346 100644 --- a/OpenCL/m14631-pure.cl +++ b/OpenCL/m14631-pure.cl @@ -158,7 +158,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void m14631_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14631_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { /** * base @@ -264,7 +264,7 @@ KERNEL_FQ void m14631_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) } } -KERNEL_FQ void m14631_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14631_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); @@ -392,7 +392,7 @@ KERNEL_FQ void m14631_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) } } -KERNEL_FQ void m14631_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14631_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m14632-pure.cl b/OpenCL/m14632-pure.cl index 50ba38a64..22057fe0e 100644 --- a/OpenCL/m14632-pure.cl +++ b/OpenCL/m14632-pure.cl @@ -158,7 +158,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void m14632_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14632_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { /** * base @@ -264,7 +264,7 @@ KERNEL_FQ void m14632_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) } } -KERNEL_FQ void m14632_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14632_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); @@ -392,7 +392,7 @@ KERNEL_FQ void m14632_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) } } -KERNEL_FQ void m14632_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14632_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m14633-pure.cl b/OpenCL/m14633-pure.cl index 1e008e8dd..fd061f07d 100644 --- a/OpenCL/m14633-pure.cl +++ b/OpenCL/m14633-pure.cl @@ -158,7 +158,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void m14633_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14633_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { /** * base @@ -264,7 +264,7 @@ KERNEL_FQ void m14633_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) } } -KERNEL_FQ void m14633_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14633_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); @@ -392,7 +392,7 @@ KERNEL_FQ void m14633_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) } } -KERNEL_FQ void m14633_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14633_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m14641-pure.cl b/OpenCL/m14641-pure.cl index 2c32013c6..98bb38c7c 100644 --- a/OpenCL/m14641-pure.cl +++ b/OpenCL/m14641-pure.cl @@ -136,7 +136,7 @@ DECLSPEC void hmac_ripemd160_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PR ripemd160_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m14641_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14641_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { /** * base @@ -210,7 +210,7 @@ KERNEL_FQ void m14641_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) } } -KERNEL_FQ void m14641_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14641_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); @@ -297,7 +297,7 @@ KERNEL_FQ void m14641_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) } } -KERNEL_FQ void m14641_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14641_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m14642-pure.cl b/OpenCL/m14642-pure.cl index e8ab9919d..59c29ee4d 100644 --- a/OpenCL/m14642-pure.cl +++ b/OpenCL/m14642-pure.cl @@ -136,7 +136,7 @@ DECLSPEC void hmac_ripemd160_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PR ripemd160_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m14642_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14642_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { /** * base @@ -210,7 +210,7 @@ KERNEL_FQ void m14642_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) } } -KERNEL_FQ void m14642_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14642_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); @@ -297,7 +297,7 @@ KERNEL_FQ void m14642_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) } } -KERNEL_FQ void m14642_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14642_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m14643-pure.cl b/OpenCL/m14643-pure.cl index cc48d85e0..13d3c314f 100644 --- a/OpenCL/m14643-pure.cl +++ b/OpenCL/m14643-pure.cl @@ -136,7 +136,7 @@ DECLSPEC void hmac_ripemd160_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PR ripemd160_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m14643_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14643_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { /** * base @@ -210,7 +210,7 @@ KERNEL_FQ void m14643_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) } } -KERNEL_FQ void m14643_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14643_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); @@ -297,7 +297,7 @@ KERNEL_FQ void m14643_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) } } -KERNEL_FQ void m14643_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ void HC_ATTR_SEQ m14643_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m14700-pure.cl b/OpenCL/m14700-pure.cl index fc5acfd8d..b3af03235 100644 --- a/OpenCL/m14700-pure.cl +++ b/OpenCL/m14700-pure.cl @@ -71,7 +71,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m14700_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, itunes_backup_t)) +KERNEL_FQ void HC_ATTR_SEQ m14700_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, itunes_backup_t)) { /** * base @@ -143,7 +143,7 @@ KERNEL_FQ void m14700_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, itunes_back } } -KERNEL_FQ void m14700_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, itunes_backup_t)) +KERNEL_FQ void HC_ATTR_SEQ m14700_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, itunes_backup_t)) { const u64 gid = get_global_id (0); @@ -228,7 +228,7 @@ KERNEL_FQ void m14700_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, itunes_back } } -KERNEL_FQ void m14700_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, itunes_backup_t)) +KERNEL_FQ void HC_ATTR_SEQ m14700_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, itunes_backup_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m14800-pure.cl b/OpenCL/m14800-pure.cl index 6d7322e92..eb3526c74 100644 --- a/OpenCL/m14800-pure.cl +++ b/OpenCL/m14800-pure.cl @@ -111,7 +111,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m14800_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, itunes_backup_t)) +KERNEL_FQ void HC_ATTR_SEQ m14800_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, itunes_backup_t)) { /** * base @@ -212,7 +212,7 @@ KERNEL_FQ void m14800_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, itunes_ba } } -KERNEL_FQ void m14800_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, itunes_backup_t)) +KERNEL_FQ void HC_ATTR_SEQ m14800_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, itunes_backup_t)) { const u64 gid = get_global_id (0); @@ -318,7 +318,7 @@ KERNEL_FQ void m14800_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, itunes_ba } } -KERNEL_FQ void m14800_init2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, itunes_backup_t)) +KERNEL_FQ void HC_ATTR_SEQ m14800_init2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, itunes_backup_t)) { /** * base @@ -407,7 +407,7 @@ KERNEL_FQ void m14800_init2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, itunes_b } } -KERNEL_FQ void m14800_loop2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, itunes_backup_t)) +KERNEL_FQ void HC_ATTR_SEQ m14800_loop2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, itunes_backup_t)) { const u64 gid = get_global_id (0); @@ -492,7 +492,7 @@ KERNEL_FQ void m14800_loop2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, itunes_b } } -KERNEL_FQ void m14800_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, itunes_backup_t)) +KERNEL_FQ void HC_ATTR_SEQ m14800_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, itunes_backup_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m14900_a0-optimized.cl b/OpenCL/m14900_a0-optimized.cl index b835dd776..b78393beb 100644 --- a/OpenCL/m14900_a0-optimized.cl +++ b/OpenCL/m14900_a0-optimized.cl @@ -105,7 +105,7 @@ DECLSPEC u32 skip32 (LOCAL_AS u8 *s_ftable, const u32 KP, PRIVATE_AS const u32 * return r; } -KERNEL_FQ void m14900_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m14900_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -188,15 +188,15 @@ KERNEL_FQ void m14900_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m14900_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m14900_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m14900_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m14900_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m14900_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m14900_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -291,10 +291,10 @@ KERNEL_FQ void m14900_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m14900_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m14900_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m14900_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m14900_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m14900_a1-optimized.cl b/OpenCL/m14900_a1-optimized.cl index 3b47cb5de..bb915e0ab 100644 --- a/OpenCL/m14900_a1-optimized.cl +++ b/OpenCL/m14900_a1-optimized.cl @@ -103,7 +103,7 @@ DECLSPEC u32 skip32 (LOCAL_AS u8 *s_ftable, const u32 KP, PRIVATE_AS const u32 * return r; } -KERNEL_FQ void m14900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14900_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -250,15 +250,15 @@ KERNEL_FQ void m14900_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m14900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14900_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m14900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14900_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m14900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14900_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -417,10 +417,10 @@ KERNEL_FQ void m14900_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m14900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14900_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m14900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14900_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m14900_a3-optimized.cl b/OpenCL/m14900_a3-optimized.cl index b902b40c1..a61d23d3e 100644 --- a/OpenCL/m14900_a3-optimized.cl +++ b/OpenCL/m14900_a3-optimized.cl @@ -205,7 +205,7 @@ DECLSPEC void m14900s (LOCAL_AS u8 *s_ftable, PRIVATE_AS u32 *w0, PRIVATE_AS u32 } } -KERNEL_FQ void m14900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14900_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -271,15 +271,15 @@ KERNEL_FQ void m14900_m04 (KERN_ATTR_BASIC ()) m14900m (s_ftable, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m14900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14900_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m14900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14900_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m14900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14900_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -345,10 +345,10 @@ KERNEL_FQ void m14900_s04 (KERN_ATTR_BASIC ()) m14900s (s_ftable, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m14900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14900_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m14900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m14900_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m15000_a0-optimized.cl b/OpenCL/m15000_a0-optimized.cl index 404a0418a..4cf58a81d 100644 --- a/OpenCL/m15000_a0-optimized.cl +++ b/OpenCL/m15000_a0-optimized.cl @@ -115,7 +115,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void m15000_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m15000_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -312,15 +312,15 @@ KERNEL_FQ void m15000_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m15000_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m15000_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m15000_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m15000_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m15000_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m15000_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -529,10 +529,10 @@ KERNEL_FQ void m15000_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m15000_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m15000_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m15000_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m15000_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m15000_a0-pure.cl b/OpenCL/m15000_a0-pure.cl index bfc61e2e6..d0a2a64c7 100644 --- a/OpenCL/m15000_a0-pure.cl +++ b/OpenCL/m15000_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m15000_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m15000_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void m15000_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m15000_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m15000_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m15000_a1-optimized.cl b/OpenCL/m15000_a1-optimized.cl index 609a5fa3a..29ba83d22 100644 --- a/OpenCL/m15000_a1-optimized.cl +++ b/OpenCL/m15000_a1-optimized.cl @@ -113,7 +113,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void m15000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m15000_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -370,15 +370,15 @@ KERNEL_FQ void m15000_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m15000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m15000_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m15000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m15000_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m15000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m15000_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -647,10 +647,10 @@ KERNEL_FQ void m15000_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m15000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m15000_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m15000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m15000_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m15000_a1-pure.cl b/OpenCL/m15000_a1-pure.cl index 412858add..be8dc7b74 100644 --- a/OpenCL/m15000_a1-pure.cl +++ b/OpenCL/m15000_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m15000_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m15000_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -67,7 +67,7 @@ KERNEL_FQ void m15000_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m15000_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m15000_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m15000_a3-optimized.cl b/OpenCL/m15000_a3-optimized.cl index 6715ab4d0..bf4bd12cb 100644 --- a/OpenCL/m15000_a3-optimized.cl +++ b/OpenCL/m15000_a3-optimized.cl @@ -437,7 +437,7 @@ DECLSPEC void m15000s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m15000_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m15000_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -477,7 +477,7 @@ KERNEL_FQ void m15000_m04 (KERN_ATTR_VECTOR ()) m15000m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m15000_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m15000_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -517,7 +517,7 @@ KERNEL_FQ void m15000_m08 (KERN_ATTR_VECTOR ()) m15000m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m15000_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m15000_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -557,7 +557,7 @@ KERNEL_FQ void m15000_m16 (KERN_ATTR_VECTOR ()) m15000m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m15000_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m15000_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -597,7 +597,7 @@ KERNEL_FQ void m15000_s04 (KERN_ATTR_VECTOR ()) m15000s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m15000_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m15000_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -637,7 +637,7 @@ KERNEL_FQ void m15000_s08 (KERN_ATTR_VECTOR ()) m15000s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m15000_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m15000_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m15000_a3-pure.cl b/OpenCL/m15000_a3-pure.cl index 59e983719..cd383d8a3 100644 --- a/OpenCL/m15000_a3-pure.cl +++ b/OpenCL/m15000_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m15000_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m15000_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void m15000_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m15000_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m15000_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m15100-pure.cl b/OpenCL/m15100-pure.cl index 97138fc42..750f2a533 100644 --- a/OpenCL/m15100-pure.cl +++ b/OpenCL/m15100-pure.cl @@ -64,7 +64,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m15100_init (KERN_ATTR_TMPS (pbkdf1_sha1_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m15100_init (KERN_ATTR_TMPS (pbkdf1_sha1_tmp_t)) { /** * base @@ -101,7 +101,7 @@ KERNEL_FQ void m15100_init (KERN_ATTR_TMPS (pbkdf1_sha1_tmp_t)) tmps[gid].out[4] = sha1_hmac_ctx.opad.h[4]; } -KERNEL_FQ void m15100_loop (KERN_ATTR_TMPS (pbkdf1_sha1_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m15100_loop (KERN_ATTR_TMPS (pbkdf1_sha1_tmp_t)) { const u64 gid = get_global_id (0); @@ -164,7 +164,7 @@ KERNEL_FQ void m15100_loop (KERN_ATTR_TMPS (pbkdf1_sha1_tmp_t)) unpackv (tmps, out, gid, 4, out[4]); } -KERNEL_FQ void m15100_comp (KERN_ATTR_TMPS (pbkdf1_sha1_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m15100_comp (KERN_ATTR_TMPS (pbkdf1_sha1_tmp_t)) { /** * base diff --git a/OpenCL/m15300-pure.cl b/OpenCL/m15300-pure.cl index 64869baa7..cf46002a1 100644 --- a/OpenCL/m15300-pure.cl +++ b/OpenCL/m15300-pure.cl @@ -86,7 +86,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m15300_init (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) +KERNEL_FQ void HC_ATTR_SEQ m15300_init (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) { /** * base @@ -283,7 +283,7 @@ KERNEL_FQ void m15300_init (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) } } -KERNEL_FQ void m15300_loop (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) +KERNEL_FQ void HC_ATTR_SEQ m15300_loop (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) { /** * base @@ -372,7 +372,7 @@ KERNEL_FQ void m15300_loop (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) } } -KERNEL_FQ void m15300_comp (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) +KERNEL_FQ void HC_ATTR_SEQ m15300_comp (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m15310-pure.cl b/OpenCL/m15310-pure.cl index bf8c53947..f56e1b94e 100644 --- a/OpenCL/m15310-pure.cl +++ b/OpenCL/m15310-pure.cl @@ -130,7 +130,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m15310_init (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) +KERNEL_FQ void HC_ATTR_SEQ m15310_init (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) { /** * base @@ -252,7 +252,7 @@ KERNEL_FQ void m15310_init (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) } } -KERNEL_FQ void m15310_loop (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) +KERNEL_FQ void HC_ATTR_SEQ m15310_loop (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) { const u64 gid = get_global_id (0); @@ -358,7 +358,7 @@ KERNEL_FQ void m15310_loop (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) } } -KERNEL_FQ void m15310_init2 (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) +KERNEL_FQ void HC_ATTR_SEQ m15310_init2 (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) { /** * base @@ -599,7 +599,7 @@ KERNEL_FQ void m15310_init2 (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) } } -KERNEL_FQ void m15310_loop2 (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) +KERNEL_FQ void HC_ATTR_SEQ m15310_loop2 (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) { /** * base @@ -688,7 +688,7 @@ KERNEL_FQ void m15310_loop2 (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) } } -KERNEL_FQ void m15310_comp (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) +KERNEL_FQ void HC_ATTR_SEQ m15310_comp (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m15400_a0-optimized.cl b/OpenCL/m15400_a0-optimized.cl index 86363977a..c558e8437 100644 --- a/OpenCL/m15400_a0-optimized.cl +++ b/OpenCL/m15400_a0-optimized.cl @@ -238,7 +238,7 @@ DECLSPEC void chacha20_transform (PRIVATE_AS const u32x *w0, PRIVATE_AS const u3 } } -KERNEL_FQ void m15400_m04 (KERN_ATTR_RULES_ESALT (chacha20_t)) +KERNEL_FQ void HC_ATTR_SEQ m15400_m04 (KERN_ATTR_RULES_ESALT (chacha20_t)) { /** * modifier @@ -308,15 +308,15 @@ KERNEL_FQ void m15400_m04 (KERN_ATTR_RULES_ESALT (chacha20_t)) } } -KERNEL_FQ void m15400_m08 (KERN_ATTR_RULES_ESALT (chacha20_t)) +KERNEL_FQ void HC_ATTR_SEQ m15400_m08 (KERN_ATTR_RULES_ESALT (chacha20_t)) { } -KERNEL_FQ void m15400_m16 (KERN_ATTR_RULES_ESALT (chacha20_t)) +KERNEL_FQ void HC_ATTR_SEQ m15400_m16 (KERN_ATTR_RULES_ESALT (chacha20_t)) { } -KERNEL_FQ void m15400_s04 (KERN_ATTR_RULES_ESALT (chacha20_t)) +KERNEL_FQ void HC_ATTR_SEQ m15400_s04 (KERN_ATTR_RULES_ESALT (chacha20_t)) { /** * modifier @@ -398,10 +398,10 @@ KERNEL_FQ void m15400_s04 (KERN_ATTR_RULES_ESALT (chacha20_t)) } } -KERNEL_FQ void m15400_s08 (KERN_ATTR_RULES_ESALT (chacha20_t)) +KERNEL_FQ void HC_ATTR_SEQ m15400_s08 (KERN_ATTR_RULES_ESALT (chacha20_t)) { } -KERNEL_FQ void m15400_s16 (KERN_ATTR_RULES_ESALT (chacha20_t)) +KERNEL_FQ void HC_ATTR_SEQ m15400_s16 (KERN_ATTR_RULES_ESALT (chacha20_t)) { } diff --git a/OpenCL/m15400_a1-optimized.cl b/OpenCL/m15400_a1-optimized.cl index cf9017ce6..8406e899f 100644 --- a/OpenCL/m15400_a1-optimized.cl +++ b/OpenCL/m15400_a1-optimized.cl @@ -236,7 +236,7 @@ DECLSPEC void chacha20_transform (PRIVATE_AS const u32x *w0, PRIVATE_AS const u3 } } -KERNEL_FQ void m15400_m04 (KERN_ATTR_ESALT (chacha20_t)) +KERNEL_FQ void HC_ATTR_SEQ m15400_m04 (KERN_ATTR_ESALT (chacha20_t)) { /** * modifier @@ -357,15 +357,15 @@ KERNEL_FQ void m15400_m04 (KERN_ATTR_ESALT (chacha20_t)) } } -KERNEL_FQ void m15400_m08 (KERN_ATTR_ESALT (chacha20_t)) +KERNEL_FQ void HC_ATTR_SEQ m15400_m08 (KERN_ATTR_ESALT (chacha20_t)) { } -KERNEL_FQ void m15400_m16 (KERN_ATTR_ESALT (chacha20_t)) +KERNEL_FQ void HC_ATTR_SEQ m15400_m16 (KERN_ATTR_ESALT (chacha20_t)) { } -KERNEL_FQ void m15400_s04 (KERN_ATTR_ESALT (chacha20_t)) +KERNEL_FQ void HC_ATTR_SEQ m15400_s04 (KERN_ATTR_ESALT (chacha20_t)) { /** * modifier @@ -498,10 +498,10 @@ KERNEL_FQ void m15400_s04 (KERN_ATTR_ESALT (chacha20_t)) } } -KERNEL_FQ void m15400_s08 (KERN_ATTR_ESALT (chacha20_t)) +KERNEL_FQ void HC_ATTR_SEQ m15400_s08 (KERN_ATTR_ESALT (chacha20_t)) { } -KERNEL_FQ void m15400_s16 (KERN_ATTR_ESALT (chacha20_t)) +KERNEL_FQ void HC_ATTR_SEQ m15400_s16 (KERN_ATTR_ESALT (chacha20_t)) { } diff --git a/OpenCL/m15400_a3-optimized.cl b/OpenCL/m15400_a3-optimized.cl index 2eaa0ea40..73a7919b9 100644 --- a/OpenCL/m15400_a3-optimized.cl +++ b/OpenCL/m15400_a3-optimized.cl @@ -236,17 +236,17 @@ DECLSPEC void chacha20_transform (PRIVATE_AS const u32x *w0, PRIVATE_AS const u3 } } -KERNEL_FQ void m15400_m04 (KERN_ATTR_VECTOR_ESALT (chacha20_t)) +KERNEL_FQ void HC_ATTR_SEQ m15400_m04 (KERN_ATTR_VECTOR_ESALT (chacha20_t)) { // fixed size 32 } -KERNEL_FQ void m15400_m08 (KERN_ATTR_VECTOR_ESALT (chacha20_t)) +KERNEL_FQ void HC_ATTR_SEQ m15400_m08 (KERN_ATTR_VECTOR_ESALT (chacha20_t)) { // fixed size 32 } -KERNEL_FQ void m15400_m16 (KERN_ATTR_VECTOR_ESALT (chacha20_t)) +KERNEL_FQ void HC_ATTR_SEQ m15400_m16 (KERN_ATTR_VECTOR_ESALT (chacha20_t)) { /** * modifier @@ -326,17 +326,17 @@ KERNEL_FQ void m15400_m16 (KERN_ATTR_VECTOR_ESALT (chacha20_t)) } } -KERNEL_FQ void m15400_s04 (KERN_ATTR_VECTOR_ESALT (chacha20_t)) +KERNEL_FQ void HC_ATTR_SEQ m15400_s04 (KERN_ATTR_VECTOR_ESALT (chacha20_t)) { // fixed size 32 } -KERNEL_FQ void m15400_s08 (KERN_ATTR_VECTOR_ESALT (chacha20_t)) +KERNEL_FQ void HC_ATTR_SEQ m15400_s08 (KERN_ATTR_VECTOR_ESALT (chacha20_t)) { // fixed size 32 } -KERNEL_FQ void m15400_s16 (KERN_ATTR_VECTOR_ESALT (chacha20_t)) +KERNEL_FQ void HC_ATTR_SEQ m15400_s16 (KERN_ATTR_VECTOR_ESALT (chacha20_t)) { /** * modifier diff --git a/OpenCL/m15500_a0-optimized.cl b/OpenCL/m15500_a0-optimized.cl index 55d5cf935..42a31dd7e 100644 --- a/OpenCL/m15500_a0-optimized.cl +++ b/OpenCL/m15500_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m15500_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m15500_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -264,15 +264,15 @@ KERNEL_FQ void m15500_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m15500_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m15500_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m15500_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m15500_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m15500_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m15500_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -532,10 +532,10 @@ KERNEL_FQ void m15500_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m15500_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m15500_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m15500_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m15500_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m15500_a0-pure.cl b/OpenCL/m15500_a0-pure.cl index 5190cf4ea..3f5948815 100644 --- a/OpenCL/m15500_a0-pure.cl +++ b/OpenCL/m15500_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m15500_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m15500_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -77,7 +77,7 @@ KERNEL_FQ void m15500_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m15500_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m15500_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m15500_a1-optimized.cl b/OpenCL/m15500_a1-optimized.cl index 6d253ba54..4de4bab58 100644 --- a/OpenCL/m15500_a1-optimized.cl +++ b/OpenCL/m15500_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m15500_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m15500_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -322,15 +322,15 @@ KERNEL_FQ void m15500_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m15500_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m15500_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m15500_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m15500_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m15500_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m15500_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -650,10 +650,10 @@ KERNEL_FQ void m15500_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m15500_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m15500_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m15500_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m15500_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m15500_a1-pure.cl b/OpenCL/m15500_a1-pure.cl index 457a9e982..b4ca91df3 100644 --- a/OpenCL/m15500_a1-pure.cl +++ b/OpenCL/m15500_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m15500_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m15500_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -73,7 +73,7 @@ KERNEL_FQ void m15500_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m15500_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m15500_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m15500_a3-optimized.cl b/OpenCL/m15500_a3-optimized.cl index f6d37dd9f..7259094ae 100644 --- a/OpenCL/m15500_a3-optimized.cl +++ b/OpenCL/m15500_a3-optimized.cl @@ -580,7 +580,7 @@ DECLSPEC void m15500s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m15500_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m15500_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -620,7 +620,7 @@ KERNEL_FQ void m15500_m04 (KERN_ATTR_VECTOR ()) m15500m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m15500_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m15500_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -660,7 +660,7 @@ KERNEL_FQ void m15500_m08 (KERN_ATTR_VECTOR ()) m15500m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m15500_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m15500_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -700,7 +700,7 @@ KERNEL_FQ void m15500_m16 (KERN_ATTR_VECTOR ()) m15500m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m15500_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m15500_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -740,7 +740,7 @@ KERNEL_FQ void m15500_s04 (KERN_ATTR_VECTOR ()) m15500s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m15500_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m15500_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -780,7 +780,7 @@ KERNEL_FQ void m15500_s08 (KERN_ATTR_VECTOR ()) m15500s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m15500_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m15500_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m15500_a3-pure.cl b/OpenCL/m15500_a3-pure.cl index 1805eb526..0e6e18aaf 100644 --- a/OpenCL/m15500_a3-pure.cl +++ b/OpenCL/m15500_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m15500_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m15500_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -86,7 +86,7 @@ KERNEL_FQ void m15500_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m15500_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m15500_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m15600-pure.cl b/OpenCL/m15600-pure.cl index 391bdf13c..31982d8cd 100644 --- a/OpenCL/m15600-pure.cl +++ b/OpenCL/m15600-pure.cl @@ -205,7 +205,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m15600_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ethereum_pbkdf2_t)) +KERNEL_FQ void HC_ATTR_SEQ m15600_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ethereum_pbkdf2_t)) { /** * base @@ -289,7 +289,7 @@ KERNEL_FQ void m15600_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ethereum_ } } -KERNEL_FQ void m15600_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ethereum_pbkdf2_t)) +KERNEL_FQ void HC_ATTR_SEQ m15600_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ethereum_pbkdf2_t)) { const u64 gid = get_global_id (0); @@ -395,7 +395,7 @@ KERNEL_FQ void m15600_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ethereum_ } } -KERNEL_FQ void m15600_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ethereum_pbkdf2_t)) +KERNEL_FQ void HC_ATTR_SEQ m15600_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ethereum_pbkdf2_t)) { /** * base diff --git a/OpenCL/m15700-pure.cl b/OpenCL/m15700-pure.cl index 4604fc293..67a3cc870 100644 --- a/OpenCL/m15700-pure.cl +++ b/OpenCL/m15700-pure.cl @@ -427,7 +427,7 @@ DECLSPEC void keccak_transform_S (PRIVATE_AS u64 *st) } } -KERNEL_FQ void m15700_init (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, ethereum_scrypt_t)) +KERNEL_FQ void HC_ATTR_SEQ m15700_init (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, ethereum_scrypt_t)) { /** * base @@ -539,7 +539,7 @@ KERNEL_FQ void m15700_init (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, ethereum_scrypt_ } } -KERNEL_FQ void m15700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m15700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) { /** * base @@ -570,7 +570,7 @@ KERNEL_FQ void m15700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } -KERNEL_FQ void m15700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m15700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -595,7 +595,7 @@ KERNEL_FQ void m15700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } -KERNEL_FQ void m15700_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, ethereum_scrypt_t)) +KERNEL_FQ void HC_ATTR_SEQ m15700_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, ethereum_scrypt_t)) { /** * base diff --git a/OpenCL/m15900-pure.cl b/OpenCL/m15900-pure.cl index 025c50f0d..96f7992e5 100644 --- a/OpenCL/m15900-pure.cl +++ b/OpenCL/m15900-pure.cl @@ -109,7 +109,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void m15900_init (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) +KERNEL_FQ void HC_ATTR_SEQ m15900_init (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) { /** * base @@ -371,7 +371,7 @@ KERNEL_FQ void m15900_init (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) } } -KERNEL_FQ void m15900_loop (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) +KERNEL_FQ void HC_ATTR_SEQ m15900_loop (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) { /** * base @@ -501,7 +501,7 @@ KERNEL_FQ void m15900_loop (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) } } -KERNEL_FQ void m15900_comp (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) +KERNEL_FQ void HC_ATTR_SEQ m15900_comp (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m15910-pure.cl b/OpenCL/m15910-pure.cl index d9c781911..a808d7b1b 100644 --- a/OpenCL/m15910-pure.cl +++ b/OpenCL/m15910-pure.cl @@ -159,7 +159,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void m15910_init (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) +KERNEL_FQ void HC_ATTR_SEQ m15910_init (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) { /** * base @@ -281,7 +281,7 @@ KERNEL_FQ void m15910_init (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) } } -KERNEL_FQ void m15910_loop (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) +KERNEL_FQ void HC_ATTR_SEQ m15910_loop (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) { const u64 gid = get_global_id (0); @@ -387,7 +387,7 @@ KERNEL_FQ void m15910_loop (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) } } -KERNEL_FQ void m15910_init2 (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) +KERNEL_FQ void HC_ATTR_SEQ m15910_init2 (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) { /** * base @@ -693,7 +693,7 @@ KERNEL_FQ void m15910_init2 (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) } } -KERNEL_FQ void m15910_loop2 (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) +KERNEL_FQ void HC_ATTR_SEQ m15910_loop2 (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) { /** * base @@ -823,7 +823,7 @@ KERNEL_FQ void m15910_loop2 (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) } } -KERNEL_FQ void m15910_comp (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) +KERNEL_FQ void HC_ATTR_SEQ m15910_comp (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m16000_a0-pure.cl b/OpenCL/m16000_a0-pure.cl index 9abeee3ce..e77ef4662 100644 --- a/OpenCL/m16000_a0-pure.cl +++ b/OpenCL/m16000_a0-pure.cl @@ -494,7 +494,7 @@ DECLSPEC void _des_crypt_encrypt (PRIVATE_AS u32 *iv, u32 mask, PRIVATE_AS u32x iv[1] = hc_rotl32 (l, 31); } -KERNEL_FQ void m16000_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m16000_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -587,7 +587,7 @@ KERNEL_FQ void m16000_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m16000_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m16000_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m16000_a1-pure.cl b/OpenCL/m16000_a1-pure.cl index e076a5f24..822dd3e34 100644 --- a/OpenCL/m16000_a1-pure.cl +++ b/OpenCL/m16000_a1-pure.cl @@ -492,7 +492,7 @@ DECLSPEC void _des_crypt_encrypt (PRIVATE_AS u32 *iv, u32 mask, PRIVATE_AS u32x iv[1] = hc_rotl32 (l, 31); } -KERNEL_FQ void m16000_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m16000_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -664,7 +664,7 @@ KERNEL_FQ void m16000_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m16000_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m16000_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m16000_a3-pure.cl b/OpenCL/m16000_a3-pure.cl index 25d1cf776..18a17a411 100644 --- a/OpenCL/m16000_a3-pure.cl +++ b/OpenCL/m16000_a3-pure.cl @@ -492,7 +492,7 @@ DECLSPEC void _des_crypt_encrypt (PRIVATE_AS u32 *iv, u32 mask, PRIVATE_AS u32x iv[1] = hc_rotl32 (l, 31); } -KERNEL_FQ void m16000_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m16000_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -613,7 +613,7 @@ KERNEL_FQ void m16000_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m16000_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m16000_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m16100_a0-optimized.cl b/OpenCL/m16100_a0-optimized.cl index 8e068c96b..eb1fe4901 100644 --- a/OpenCL/m16100_a0-optimized.cl +++ b/OpenCL/m16100_a0-optimized.cl @@ -27,7 +27,7 @@ typedef struct tacacs_plus } tacacs_plus_t; -KERNEL_FQ void m16100_m04 (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) +KERNEL_FQ void HC_ATTR_SEQ m16100_m04 (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) { /** * modifier @@ -304,15 +304,15 @@ KERNEL_FQ void m16100_m04 (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) } } -KERNEL_FQ void m16100_m08 (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) +KERNEL_FQ void HC_ATTR_SEQ m16100_m08 (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) { } -KERNEL_FQ void m16100_m16 (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) +KERNEL_FQ void HC_ATTR_SEQ m16100_m16 (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) { } -KERNEL_FQ void m16100_s04 (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) +KERNEL_FQ void HC_ATTR_SEQ m16100_s04 (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) { /** * modifier @@ -589,10 +589,10 @@ KERNEL_FQ void m16100_s04 (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) } } -KERNEL_FQ void m16100_s08 (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) +KERNEL_FQ void HC_ATTR_SEQ m16100_s08 (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) { } -KERNEL_FQ void m16100_s16 (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) +KERNEL_FQ void HC_ATTR_SEQ m16100_s16 (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) { } diff --git a/OpenCL/m16100_a0-pure.cl b/OpenCL/m16100_a0-pure.cl index 24e0289d9..53a0366e4 100644 --- a/OpenCL/m16100_a0-pure.cl +++ b/OpenCL/m16100_a0-pure.cl @@ -27,7 +27,7 @@ typedef struct tacacs_plus } tacacs_plus_t; -KERNEL_FQ void m16100_mxx (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) +KERNEL_FQ void HC_ATTR_SEQ m16100_mxx (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) { /** * modifier @@ -189,7 +189,7 @@ KERNEL_FQ void m16100_mxx (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) } } -KERNEL_FQ void m16100_sxx (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) +KERNEL_FQ void HC_ATTR_SEQ m16100_sxx (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) { /** * modifier diff --git a/OpenCL/m16100_a1-optimized.cl b/OpenCL/m16100_a1-optimized.cl index b950b2a41..b60e607f8 100644 --- a/OpenCL/m16100_a1-optimized.cl +++ b/OpenCL/m16100_a1-optimized.cl @@ -25,7 +25,7 @@ typedef struct tacacs_plus } tacacs_plus_t; -KERNEL_FQ void m16100_m04 (KERN_ATTR_ESALT (tacacs_plus_t)) +KERNEL_FQ void HC_ATTR_SEQ m16100_m04 (KERN_ATTR_ESALT (tacacs_plus_t)) { /** * modifier @@ -363,15 +363,15 @@ KERNEL_FQ void m16100_m04 (KERN_ATTR_ESALT (tacacs_plus_t)) } } -KERNEL_FQ void m16100_m08 (KERN_ATTR_ESALT (tacacs_plus_t)) +KERNEL_FQ void HC_ATTR_SEQ m16100_m08 (KERN_ATTR_ESALT (tacacs_plus_t)) { } -KERNEL_FQ void m16100_m16 (KERN_ATTR_ESALT (tacacs_plus_t)) +KERNEL_FQ void HC_ATTR_SEQ m16100_m16 (KERN_ATTR_ESALT (tacacs_plus_t)) { } -KERNEL_FQ void m16100_s04 (KERN_ATTR_ESALT (tacacs_plus_t)) +KERNEL_FQ void HC_ATTR_SEQ m16100_s04 (KERN_ATTR_ESALT (tacacs_plus_t)) { /** * modifier @@ -709,10 +709,10 @@ KERNEL_FQ void m16100_s04 (KERN_ATTR_ESALT (tacacs_plus_t)) } } -KERNEL_FQ void m16100_s08 (KERN_ATTR_ESALT (tacacs_plus_t)) +KERNEL_FQ void HC_ATTR_SEQ m16100_s08 (KERN_ATTR_ESALT (tacacs_plus_t)) { } -KERNEL_FQ void m16100_s16 (KERN_ATTR_ESALT (tacacs_plus_t)) +KERNEL_FQ void HC_ATTR_SEQ m16100_s16 (KERN_ATTR_ESALT (tacacs_plus_t)) { } diff --git a/OpenCL/m16100_a1-pure.cl b/OpenCL/m16100_a1-pure.cl index d27663ec2..99d81bc3c 100644 --- a/OpenCL/m16100_a1-pure.cl +++ b/OpenCL/m16100_a1-pure.cl @@ -24,7 +24,7 @@ typedef struct tacacs_plus } tacacs_plus_t; -KERNEL_FQ void m16100_mxx (KERN_ATTR_ESALT (tacacs_plus_t)) +KERNEL_FQ void HC_ATTR_SEQ m16100_mxx (KERN_ATTR_ESALT (tacacs_plus_t)) { /** * modifier @@ -182,7 +182,7 @@ KERNEL_FQ void m16100_mxx (KERN_ATTR_ESALT (tacacs_plus_t)) } } -KERNEL_FQ void m16100_sxx (KERN_ATTR_ESALT (tacacs_plus_t)) +KERNEL_FQ void HC_ATTR_SEQ m16100_sxx (KERN_ATTR_ESALT (tacacs_plus_t)) { /** * modifier diff --git a/OpenCL/m16100_a3-optimized.cl b/OpenCL/m16100_a3-optimized.cl index 9353f977d..950322dcb 100644 --- a/OpenCL/m16100_a3-optimized.cl +++ b/OpenCL/m16100_a3-optimized.cl @@ -525,7 +525,7 @@ DECLSPEC void m16100s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m16100_m04 (KERN_ATTR_ESALT (tacacs_plus_t)) +KERNEL_FQ void HC_ATTR_SEQ m16100_m04 (KERN_ATTR_ESALT (tacacs_plus_t)) { /** * base @@ -574,7 +574,7 @@ KERNEL_FQ void m16100_m04 (KERN_ATTR_ESALT (tacacs_plus_t)) m16100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m16100_m08 (KERN_ATTR_ESALT (tacacs_plus_t)) +KERNEL_FQ void HC_ATTR_SEQ m16100_m08 (KERN_ATTR_ESALT (tacacs_plus_t)) { /** * base @@ -623,7 +623,7 @@ KERNEL_FQ void m16100_m08 (KERN_ATTR_ESALT (tacacs_plus_t)) m16100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m16100_m16 (KERN_ATTR_ESALT (tacacs_plus_t)) +KERNEL_FQ void HC_ATTR_SEQ m16100_m16 (KERN_ATTR_ESALT (tacacs_plus_t)) { /** * base @@ -672,7 +672,7 @@ KERNEL_FQ void m16100_m16 (KERN_ATTR_ESALT (tacacs_plus_t)) m16100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m16100_s04 (KERN_ATTR_ESALT (tacacs_plus_t)) +KERNEL_FQ void HC_ATTR_SEQ m16100_s04 (KERN_ATTR_ESALT (tacacs_plus_t)) { /** * base @@ -721,7 +721,7 @@ KERNEL_FQ void m16100_s04 (KERN_ATTR_ESALT (tacacs_plus_t)) m16100s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m16100_s08 (KERN_ATTR_ESALT (tacacs_plus_t)) +KERNEL_FQ void HC_ATTR_SEQ m16100_s08 (KERN_ATTR_ESALT (tacacs_plus_t)) { /** * base @@ -770,7 +770,7 @@ KERNEL_FQ void m16100_s08 (KERN_ATTR_ESALT (tacacs_plus_t)) m16100s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m16100_s16 (KERN_ATTR_ESALT (tacacs_plus_t)) +KERNEL_FQ void HC_ATTR_SEQ m16100_s16 (KERN_ATTR_ESALT (tacacs_plus_t)) { /** * base diff --git a/OpenCL/m16100_a3-pure.cl b/OpenCL/m16100_a3-pure.cl index a55774438..875dc176f 100644 --- a/OpenCL/m16100_a3-pure.cl +++ b/OpenCL/m16100_a3-pure.cl @@ -24,7 +24,7 @@ typedef struct tacacs_plus } tacacs_plus_t; -KERNEL_FQ void m16100_mxx (KERN_ATTR_VECTOR_ESALT (tacacs_plus_t)) +KERNEL_FQ void HC_ATTR_SEQ m16100_mxx (KERN_ATTR_VECTOR_ESALT (tacacs_plus_t)) { /** * modifier @@ -199,7 +199,7 @@ KERNEL_FQ void m16100_mxx (KERN_ATTR_VECTOR_ESALT (tacacs_plus_t)) } } -KERNEL_FQ void m16100_sxx (KERN_ATTR_VECTOR_ESALT (tacacs_plus_t)) +KERNEL_FQ void HC_ATTR_SEQ m16100_sxx (KERN_ATTR_VECTOR_ESALT (tacacs_plus_t)) { /** * modifier diff --git a/OpenCL/m16200-pure.cl b/OpenCL/m16200-pure.cl index 85cc819b3..0e9ff5646 100644 --- a/OpenCL/m16200-pure.cl +++ b/OpenCL/m16200-pure.cl @@ -79,7 +79,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m16200_init (KERN_ATTR_TMPS_ESALT (apple_secure_notes_tmp_t, apple_secure_notes_t)) +KERNEL_FQ void HC_ATTR_SEQ m16200_init (KERN_ATTR_TMPS_ESALT (apple_secure_notes_tmp_t, apple_secure_notes_t)) { /** * base @@ -163,7 +163,7 @@ KERNEL_FQ void m16200_init (KERN_ATTR_TMPS_ESALT (apple_secure_notes_tmp_t, appl } } -KERNEL_FQ void m16200_loop (KERN_ATTR_TMPS_ESALT (apple_secure_notes_tmp_t, apple_secure_notes_t)) +KERNEL_FQ void HC_ATTR_SEQ m16200_loop (KERN_ATTR_TMPS_ESALT (apple_secure_notes_tmp_t, apple_secure_notes_t)) { const u64 gid = get_global_id (0); @@ -269,7 +269,7 @@ KERNEL_FQ void m16200_loop (KERN_ATTR_TMPS_ESALT (apple_secure_notes_tmp_t, appl } } -KERNEL_FQ void m16200_comp (KERN_ATTR_TMPS_ESALT (apple_secure_notes_tmp_t, apple_secure_notes_t)) +KERNEL_FQ void HC_ATTR_SEQ m16200_comp (KERN_ATTR_TMPS_ESALT (apple_secure_notes_tmp_t, apple_secure_notes_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m16300-pure.cl b/OpenCL/m16300-pure.cl index 2ec4c9152..cba3c0127 100644 --- a/OpenCL/m16300-pure.cl +++ b/OpenCL/m16300-pure.cl @@ -207,7 +207,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m16300_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ethereum_presale_t)) +KERNEL_FQ void HC_ATTR_SEQ m16300_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ethereum_presale_t)) { /** * base @@ -291,7 +291,7 @@ KERNEL_FQ void m16300_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ethereum_ } } -KERNEL_FQ void m16300_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ethereum_presale_t)) +KERNEL_FQ void HC_ATTR_SEQ m16300_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ethereum_presale_t)) { const u64 gid = get_global_id (0); @@ -397,7 +397,7 @@ KERNEL_FQ void m16300_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ethereum_ } } -KERNEL_FQ void m16300_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ethereum_presale_t)) +KERNEL_FQ void HC_ATTR_SEQ m16300_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ethereum_presale_t)) { /** * base diff --git a/OpenCL/m16400_a0-optimized.cl b/OpenCL/m16400_a0-optimized.cl index f7c254928..c3826bc98 100644 --- a/OpenCL/m16400_a0-optimized.cl +++ b/OpenCL/m16400_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m16400_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m16400_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -155,15 +155,15 @@ KERNEL_FQ void m16400_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m16400_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m16400_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m16400_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m16400_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m16400_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m16400_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -317,10 +317,10 @@ KERNEL_FQ void m16400_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m16400_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m16400_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m16400_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m16400_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m16400_a0-pure.cl b/OpenCL/m16400_a0-pure.cl index 59e4dc2d5..ec7b4bdb5 100644 --- a/OpenCL/m16400_a0-pure.cl +++ b/OpenCL/m16400_a0-pure.cl @@ -176,7 +176,7 @@ DECLSPEC void cram_md5_final (PRIVATE_AS md5_ctx_t *ctx) cram_md5_transform (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h); } -KERNEL_FQ void m16400_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m16400_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -220,7 +220,7 @@ KERNEL_FQ void m16400_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m16400_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m16400_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m16400_a1-optimized.cl b/OpenCL/m16400_a1-optimized.cl index 3fbb16a87..3b4cd0227 100644 --- a/OpenCL/m16400_a1-optimized.cl +++ b/OpenCL/m16400_a1-optimized.cl @@ -15,7 +15,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m16400_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m16400_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -201,15 +201,15 @@ KERNEL_FQ void m16400_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m16400_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m16400_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m16400_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m16400_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m16400_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m16400_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -410,10 +410,10 @@ KERNEL_FQ void m16400_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m16400_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m16400_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m16400_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m16400_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m16400_a1-pure.cl b/OpenCL/m16400_a1-pure.cl index 18b460d81..c470acf22 100644 --- a/OpenCL/m16400_a1-pure.cl +++ b/OpenCL/m16400_a1-pure.cl @@ -174,7 +174,7 @@ DECLSPEC void cram_md5_final (PRIVATE_AS md5_ctx_t *ctx) cram_md5_transform (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h); } -KERNEL_FQ void m16400_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m16400_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -216,7 +216,7 @@ KERNEL_FQ void m16400_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m16400_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m16400_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m16400_a3-optimized.cl b/OpenCL/m16400_a3-optimized.cl index d51ac6319..1392ece32 100644 --- a/OpenCL/m16400_a3-optimized.cl +++ b/OpenCL/m16400_a3-optimized.cl @@ -463,7 +463,7 @@ DECLSPEC void m16400s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m16400_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m16400_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -503,7 +503,7 @@ KERNEL_FQ void m16400_m04 (KERN_ATTR_VECTOR ()) m16400m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m16400_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m16400_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -543,7 +543,7 @@ KERNEL_FQ void m16400_m08 (KERN_ATTR_VECTOR ()) m16400m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m16400_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m16400_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -583,7 +583,7 @@ KERNEL_FQ void m16400_m16 (KERN_ATTR_VECTOR ()) m16400m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m16400_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m16400_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -623,7 +623,7 @@ KERNEL_FQ void m16400_s04 (KERN_ATTR_VECTOR ()) m16400s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m16400_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m16400_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -663,7 +663,7 @@ KERNEL_FQ void m16400_s08 (KERN_ATTR_VECTOR ()) m16400s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m16400_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m16400_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m16400_a3-pure.cl b/OpenCL/m16400_a3-pure.cl index d6c5bcb49..5bac2cbe9 100644 --- a/OpenCL/m16400_a3-pure.cl +++ b/OpenCL/m16400_a3-pure.cl @@ -175,7 +175,7 @@ DECLSPEC void cram_md5_final_vector (PRIVATE_AS md5_ctx_vector_t *ctx) cram_md5_transform_vector (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h); } -KERNEL_FQ void m16400_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m16400_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -230,7 +230,7 @@ KERNEL_FQ void m16400_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m16400_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m16400_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m16511_a0-pure.cl b/OpenCL/m16511_a0-pure.cl index cce108270..7aec79d1f 100644 --- a/OpenCL/m16511_a0-pure.cl +++ b/OpenCL/m16511_a0-pure.cl @@ -25,7 +25,7 @@ typedef struct jwt } jwt_t; -KERNEL_FQ void m16511_mxx (KERN_ATTR_RULES_ESALT (jwt_t)) +KERNEL_FQ void HC_ATTR_SEQ m16511_mxx (KERN_ATTR_RULES_ESALT (jwt_t)) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void m16511_mxx (KERN_ATTR_RULES_ESALT (jwt_t)) } } -KERNEL_FQ void m16511_sxx (KERN_ATTR_RULES_ESALT (jwt_t)) +KERNEL_FQ void HC_ATTR_SEQ m16511_sxx (KERN_ATTR_RULES_ESALT (jwt_t)) { /** * modifier diff --git a/OpenCL/m16511_a1-pure.cl b/OpenCL/m16511_a1-pure.cl index 022548e40..576ff8065 100644 --- a/OpenCL/m16511_a1-pure.cl +++ b/OpenCL/m16511_a1-pure.cl @@ -23,7 +23,7 @@ typedef struct jwt } jwt_t; -KERNEL_FQ void m16511_mxx (KERN_ATTR_ESALT (jwt_t)) +KERNEL_FQ void HC_ATTR_SEQ m16511_mxx (KERN_ATTR_ESALT (jwt_t)) { /** * modifier @@ -92,7 +92,7 @@ KERNEL_FQ void m16511_mxx (KERN_ATTR_ESALT (jwt_t)) } } -KERNEL_FQ void m16511_sxx (KERN_ATTR_ESALT (jwt_t)) +KERNEL_FQ void HC_ATTR_SEQ m16511_sxx (KERN_ATTR_ESALT (jwt_t)) { /** * modifier diff --git a/OpenCL/m16511_a3-pure.cl b/OpenCL/m16511_a3-pure.cl index aebd2dead..34c2ad669 100644 --- a/OpenCL/m16511_a3-pure.cl +++ b/OpenCL/m16511_a3-pure.cl @@ -23,7 +23,7 @@ typedef struct jwt } jwt_t; -KERNEL_FQ void m16511_mxx (KERN_ATTR_VECTOR_ESALT (jwt_t)) +KERNEL_FQ void HC_ATTR_SEQ m16511_mxx (KERN_ATTR_VECTOR_ESALT (jwt_t)) { /** * modifier @@ -78,7 +78,7 @@ KERNEL_FQ void m16511_mxx (KERN_ATTR_VECTOR_ESALT (jwt_t)) } } -KERNEL_FQ void m16511_sxx (KERN_ATTR_VECTOR_ESALT (jwt_t)) +KERNEL_FQ void HC_ATTR_SEQ m16511_sxx (KERN_ATTR_VECTOR_ESALT (jwt_t)) { /** * modifier diff --git a/OpenCL/m16512_a0-pure.cl b/OpenCL/m16512_a0-pure.cl index 9f612b6e4..072901118 100644 --- a/OpenCL/m16512_a0-pure.cl +++ b/OpenCL/m16512_a0-pure.cl @@ -25,7 +25,7 @@ typedef struct jwt } jwt_t; -KERNEL_FQ void m16512_mxx (KERN_ATTR_RULES_ESALT (jwt_t)) +KERNEL_FQ void HC_ATTR_SEQ m16512_mxx (KERN_ATTR_RULES_ESALT (jwt_t)) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void m16512_mxx (KERN_ATTR_RULES_ESALT (jwt_t)) } } -KERNEL_FQ void m16512_sxx (KERN_ATTR_RULES_ESALT (jwt_t)) +KERNEL_FQ void HC_ATTR_SEQ m16512_sxx (KERN_ATTR_RULES_ESALT (jwt_t)) { /** * modifier diff --git a/OpenCL/m16512_a1-pure.cl b/OpenCL/m16512_a1-pure.cl index 857bf28da..b73bc26c6 100644 --- a/OpenCL/m16512_a1-pure.cl +++ b/OpenCL/m16512_a1-pure.cl @@ -23,7 +23,7 @@ typedef struct jwt } jwt_t; -KERNEL_FQ void m16512_mxx (KERN_ATTR_ESALT (jwt_t)) +KERNEL_FQ void HC_ATTR_SEQ m16512_mxx (KERN_ATTR_ESALT (jwt_t)) { /** * modifier @@ -92,7 +92,7 @@ KERNEL_FQ void m16512_mxx (KERN_ATTR_ESALT (jwt_t)) } } -KERNEL_FQ void m16512_sxx (KERN_ATTR_ESALT (jwt_t)) +KERNEL_FQ void HC_ATTR_SEQ m16512_sxx (KERN_ATTR_ESALT (jwt_t)) { /** * modifier diff --git a/OpenCL/m16512_a3-pure.cl b/OpenCL/m16512_a3-pure.cl index f89e03844..d74dfb54f 100644 --- a/OpenCL/m16512_a3-pure.cl +++ b/OpenCL/m16512_a3-pure.cl @@ -23,7 +23,7 @@ typedef struct jwt } jwt_t; -KERNEL_FQ void m16512_mxx (KERN_ATTR_VECTOR_ESALT (jwt_t)) +KERNEL_FQ void HC_ATTR_SEQ m16512_mxx (KERN_ATTR_VECTOR_ESALT (jwt_t)) { /** * modifier @@ -78,7 +78,7 @@ KERNEL_FQ void m16512_mxx (KERN_ATTR_VECTOR_ESALT (jwt_t)) } } -KERNEL_FQ void m16512_sxx (KERN_ATTR_VECTOR_ESALT (jwt_t)) +KERNEL_FQ void HC_ATTR_SEQ m16512_sxx (KERN_ATTR_VECTOR_ESALT (jwt_t)) { /** * modifier diff --git a/OpenCL/m16513_a0-pure.cl b/OpenCL/m16513_a0-pure.cl index 2eed0e12a..9ef35c320 100644 --- a/OpenCL/m16513_a0-pure.cl +++ b/OpenCL/m16513_a0-pure.cl @@ -25,7 +25,7 @@ typedef struct jwt } jwt_t; -KERNEL_FQ void m16513_mxx (KERN_ATTR_RULES_ESALT (jwt_t)) +KERNEL_FQ void HC_ATTR_SEQ m16513_mxx (KERN_ATTR_RULES_ESALT (jwt_t)) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void m16513_mxx (KERN_ATTR_RULES_ESALT (jwt_t)) } } -KERNEL_FQ void m16513_sxx (KERN_ATTR_RULES_ESALT (jwt_t)) +KERNEL_FQ void HC_ATTR_SEQ m16513_sxx (KERN_ATTR_RULES_ESALT (jwt_t)) { /** * modifier diff --git a/OpenCL/m16513_a1-pure.cl b/OpenCL/m16513_a1-pure.cl index 53fd8f41f..7293415c5 100644 --- a/OpenCL/m16513_a1-pure.cl +++ b/OpenCL/m16513_a1-pure.cl @@ -23,7 +23,7 @@ typedef struct jwt } jwt_t; -KERNEL_FQ void m16513_mxx (KERN_ATTR_ESALT (jwt_t)) +KERNEL_FQ void HC_ATTR_SEQ m16513_mxx (KERN_ATTR_ESALT (jwt_t)) { /** * modifier @@ -92,7 +92,7 @@ KERNEL_FQ void m16513_mxx (KERN_ATTR_ESALT (jwt_t)) } } -KERNEL_FQ void m16513_sxx (KERN_ATTR_ESALT (jwt_t)) +KERNEL_FQ void HC_ATTR_SEQ m16513_sxx (KERN_ATTR_ESALT (jwt_t)) { /** * modifier diff --git a/OpenCL/m16513_a3-pure.cl b/OpenCL/m16513_a3-pure.cl index f3f9bbd1e..fc0314d0d 100644 --- a/OpenCL/m16513_a3-pure.cl +++ b/OpenCL/m16513_a3-pure.cl @@ -23,7 +23,7 @@ typedef struct jwt } jwt_t; -KERNEL_FQ void m16513_mxx (KERN_ATTR_VECTOR_ESALT (jwt_t)) +KERNEL_FQ void HC_ATTR_SEQ m16513_mxx (KERN_ATTR_VECTOR_ESALT (jwt_t)) { /** * modifier @@ -78,7 +78,7 @@ KERNEL_FQ void m16513_mxx (KERN_ATTR_VECTOR_ESALT (jwt_t)) } } -KERNEL_FQ void m16513_sxx (KERN_ATTR_VECTOR_ESALT (jwt_t)) +KERNEL_FQ void HC_ATTR_SEQ m16513_sxx (KERN_ATTR_VECTOR_ESALT (jwt_t)) { /** * modifier diff --git a/OpenCL/m16600_a0-optimized.cl b/OpenCL/m16600_a0-optimized.cl index 27842d1c8..b82c41478 100644 --- a/OpenCL/m16600_a0-optimized.cl +++ b/OpenCL/m16600_a0-optimized.cl @@ -25,7 +25,7 @@ typedef struct electrum_wallet } electrum_wallet_t; -KERNEL_FQ void m16600_m04 (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) +KERNEL_FQ void HC_ATTR_SEQ m16600_m04 (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) { /** * base @@ -429,15 +429,15 @@ KERNEL_FQ void m16600_m04 (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) } } -KERNEL_FQ void m16600_m08 (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) +KERNEL_FQ void HC_ATTR_SEQ m16600_m08 (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) { } -KERNEL_FQ void m16600_m16 (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) +KERNEL_FQ void HC_ATTR_SEQ m16600_m16 (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) { } -KERNEL_FQ void m16600_s04 (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) +KERNEL_FQ void HC_ATTR_SEQ m16600_s04 (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) { /** * base @@ -841,10 +841,10 @@ KERNEL_FQ void m16600_s04 (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) } } -KERNEL_FQ void m16600_s08 (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) +KERNEL_FQ void HC_ATTR_SEQ m16600_s08 (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) { } -KERNEL_FQ void m16600_s16 (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) +KERNEL_FQ void HC_ATTR_SEQ m16600_s16 (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) { } diff --git a/OpenCL/m16600_a0-pure.cl b/OpenCL/m16600_a0-pure.cl index c13319564..d0d84eff6 100644 --- a/OpenCL/m16600_a0-pure.cl +++ b/OpenCL/m16600_a0-pure.cl @@ -25,7 +25,7 @@ typedef struct electrum_wallet } electrum_wallet_t; -KERNEL_FQ void m16600_mxx (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) +KERNEL_FQ void HC_ATTR_SEQ m16600_mxx (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) { /** * base @@ -243,7 +243,7 @@ KERNEL_FQ void m16600_mxx (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) } } -KERNEL_FQ void m16600_sxx (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) +KERNEL_FQ void HC_ATTR_SEQ m16600_sxx (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) { /** * base diff --git a/OpenCL/m16600_a1-optimized.cl b/OpenCL/m16600_a1-optimized.cl index 9ee0b7b85..d12751f86 100644 --- a/OpenCL/m16600_a1-optimized.cl +++ b/OpenCL/m16600_a1-optimized.cl @@ -23,7 +23,7 @@ typedef struct electrum_wallet } electrum_wallet_t; -KERNEL_FQ void m16600_m04 (KERN_ATTR_ESALT (electrum_wallet_t)) +KERNEL_FQ void HC_ATTR_SEQ m16600_m04 (KERN_ATTR_ESALT (electrum_wallet_t)) { /** * base @@ -485,15 +485,15 @@ KERNEL_FQ void m16600_m04 (KERN_ATTR_ESALT (electrum_wallet_t)) } } -KERNEL_FQ void m16600_m08 (KERN_ATTR_ESALT (electrum_wallet_t)) +KERNEL_FQ void HC_ATTR_SEQ m16600_m08 (KERN_ATTR_ESALT (electrum_wallet_t)) { } -KERNEL_FQ void m16600_m16 (KERN_ATTR_ESALT (electrum_wallet_t)) +KERNEL_FQ void HC_ATTR_SEQ m16600_m16 (KERN_ATTR_ESALT (electrum_wallet_t)) { } -KERNEL_FQ void m16600_s04 (KERN_ATTR_ESALT (electrum_wallet_t)) +KERNEL_FQ void HC_ATTR_SEQ m16600_s04 (KERN_ATTR_ESALT (electrum_wallet_t)) { /** * base @@ -955,10 +955,10 @@ KERNEL_FQ void m16600_s04 (KERN_ATTR_ESALT (electrum_wallet_t)) } } -KERNEL_FQ void m16600_s08 (KERN_ATTR_ESALT (electrum_wallet_t)) +KERNEL_FQ void HC_ATTR_SEQ m16600_s08 (KERN_ATTR_ESALT (electrum_wallet_t)) { } -KERNEL_FQ void m16600_s16 (KERN_ATTR_ESALT (electrum_wallet_t)) +KERNEL_FQ void HC_ATTR_SEQ m16600_s16 (KERN_ATTR_ESALT (electrum_wallet_t)) { } diff --git a/OpenCL/m16600_a1-pure.cl b/OpenCL/m16600_a1-pure.cl index b62608b09..a8cafa420 100644 --- a/OpenCL/m16600_a1-pure.cl +++ b/OpenCL/m16600_a1-pure.cl @@ -23,7 +23,7 @@ typedef struct electrum_wallet } electrum_wallet_t; -KERNEL_FQ void m16600_mxx (KERN_ATTR_ESALT (electrum_wallet_t)) +KERNEL_FQ void HC_ATTR_SEQ m16600_mxx (KERN_ATTR_ESALT (electrum_wallet_t)) { /** * base @@ -239,7 +239,7 @@ KERNEL_FQ void m16600_mxx (KERN_ATTR_ESALT (electrum_wallet_t)) } } -KERNEL_FQ void m16600_sxx (KERN_ATTR_ESALT (electrum_wallet_t)) +KERNEL_FQ void HC_ATTR_SEQ m16600_sxx (KERN_ATTR_ESALT (electrum_wallet_t)) { /** * base diff --git a/OpenCL/m16600_a3-optimized.cl b/OpenCL/m16600_a3-optimized.cl index b12391b6e..3a6ca0f69 100644 --- a/OpenCL/m16600_a3-optimized.cl +++ b/OpenCL/m16600_a3-optimized.cl @@ -204,7 +204,7 @@ DECLSPEC void m16600 (SHM_TYPE u32a *s_te0, SHM_TYPE u32a *s_te1, SHM_TYPE u32a } } -KERNEL_FQ void m16600_m04 (KERN_ATTR_ESALT (electrum_wallet_t)) +KERNEL_FQ void HC_ATTR_SEQ m16600_m04 (KERN_ATTR_ESALT (electrum_wallet_t)) { /** * base @@ -299,7 +299,7 @@ KERNEL_FQ void m16600_m04 (KERN_ATTR_ESALT (electrum_wallet_t)) m16600 (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m16600_m08 (KERN_ATTR_ESALT (electrum_wallet_t)) +KERNEL_FQ void HC_ATTR_SEQ m16600_m08 (KERN_ATTR_ESALT (electrum_wallet_t)) { /** * base @@ -394,7 +394,7 @@ KERNEL_FQ void m16600_m08 (KERN_ATTR_ESALT (electrum_wallet_t)) m16600 (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m16600_m16 (KERN_ATTR_ESALT (electrum_wallet_t)) +KERNEL_FQ void HC_ATTR_SEQ m16600_m16 (KERN_ATTR_ESALT (electrum_wallet_t)) { /** * base @@ -489,7 +489,7 @@ KERNEL_FQ void m16600_m16 (KERN_ATTR_ESALT (electrum_wallet_t)) m16600 (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m16600_s04 (KERN_ATTR_ESALT (electrum_wallet_t)) +KERNEL_FQ void HC_ATTR_SEQ m16600_s04 (KERN_ATTR_ESALT (electrum_wallet_t)) { /** * base @@ -584,7 +584,7 @@ KERNEL_FQ void m16600_s04 (KERN_ATTR_ESALT (electrum_wallet_t)) m16600 (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m16600_s08 (KERN_ATTR_ESALT (electrum_wallet_t)) +KERNEL_FQ void HC_ATTR_SEQ m16600_s08 (KERN_ATTR_ESALT (electrum_wallet_t)) { /** * base @@ -679,7 +679,7 @@ KERNEL_FQ void m16600_s08 (KERN_ATTR_ESALT (electrum_wallet_t)) m16600 (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m16600_s16 (KERN_ATTR_ESALT (electrum_wallet_t)) +KERNEL_FQ void HC_ATTR_SEQ m16600_s16 (KERN_ATTR_ESALT (electrum_wallet_t)) { /** * base diff --git a/OpenCL/m16600_a3-pure.cl b/OpenCL/m16600_a3-pure.cl index 906a4b56a..6e649cf86 100644 --- a/OpenCL/m16600_a3-pure.cl +++ b/OpenCL/m16600_a3-pure.cl @@ -23,7 +23,7 @@ typedef struct electrum_wallet } electrum_wallet_t; -KERNEL_FQ void m16600_mxx (KERN_ATTR_VECTOR_ESALT (electrum_wallet_t)) +KERNEL_FQ void HC_ATTR_SEQ m16600_mxx (KERN_ATTR_VECTOR_ESALT (electrum_wallet_t)) { /** * base @@ -252,7 +252,7 @@ KERNEL_FQ void m16600_mxx (KERN_ATTR_VECTOR_ESALT (electrum_wallet_t)) } } -KERNEL_FQ void m16600_sxx (KERN_ATTR_VECTOR_ESALT (electrum_wallet_t)) +KERNEL_FQ void HC_ATTR_SEQ m16600_sxx (KERN_ATTR_VECTOR_ESALT (electrum_wallet_t)) { /** * base diff --git a/OpenCL/m16800-pure.cl b/OpenCL/m16800-pure.cl index e4752e21c..964fd6278 100644 --- a/OpenCL/m16800-pure.cl +++ b/OpenCL/m16800-pure.cl @@ -81,7 +81,7 @@ DECLSPEC void hmac_sha1_run_V (u32x *w0, u32x *w1, u32x *w2, u32x *w3, const u32 sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m16800_init (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_pmkid_t)) +KERNEL_FQ void HC_ATTR_SEQ m16800_init (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_pmkid_t)) { /** * base @@ -189,7 +189,7 @@ KERNEL_FQ void m16800_init (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_pmkid_t) tmps[gid].out[9] = sha1_hmac_ctx2.opad.h[4]; } -KERNEL_FQ void m16800_loop (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_pmkid_t)) +KERNEL_FQ void HC_ATTR_SEQ m16800_loop (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_pmkid_t)) { const u64 gid = get_global_id (0); @@ -332,12 +332,12 @@ KERNEL_FQ void m16800_loop (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_pmkid_t) unpackv (tmps, out, gid, 9, out[4]); } -KERNEL_FQ void m16800_comp (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_pmkid_t)) +KERNEL_FQ void HC_ATTR_SEQ m16800_comp (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_pmkid_t)) { // not in use here, special case... } -KERNEL_FQ void m16800_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_pmkid_t)) +KERNEL_FQ void HC_ATTR_SEQ m16800_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_pmkid_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m16801-pure.cl b/OpenCL/m16801-pure.cl index a98ad6424..3cf16de21 100644 --- a/OpenCL/m16801-pure.cl +++ b/OpenCL/m16801-pure.cl @@ -58,7 +58,7 @@ DECLSPEC u8 hex_to_u8 (const u8 *hex) } #endif -KERNEL_FQ void m16801_init (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_pmkid_t)) +KERNEL_FQ void HC_ATTR_SEQ m16801_init (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_pmkid_t)) { const u64 gid = get_global_id (0); @@ -104,19 +104,19 @@ KERNEL_FQ void m16801_init (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_pmkid_t)) tmps[gid].out[7] = hc_swap32_S (out[7]); } -KERNEL_FQ void m16801_loop (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_pmkid_t)) +KERNEL_FQ void HC_ATTR_SEQ m16801_loop (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_pmkid_t)) { const u64 gid = get_global_id (0); if (gid >= GID_CNT) return; } -KERNEL_FQ void m16801_comp (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_pmkid_t)) +KERNEL_FQ void HC_ATTR_SEQ m16801_comp (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_pmkid_t)) { // not in use here, special case... } -KERNEL_FQ void m16801_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_pmkid_t)) +KERNEL_FQ void HC_ATTR_SEQ m16801_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_pmkid_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m16900-pure.cl b/OpenCL/m16900-pure.cl index 88bde3454..705c72795 100644 --- a/OpenCL/m16900-pure.cl +++ b/OpenCL/m16900-pure.cl @@ -78,7 +78,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m16900_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ansible_vault_t)) +KERNEL_FQ void HC_ATTR_SEQ m16900_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ansible_vault_t)) { /** * base @@ -162,7 +162,7 @@ KERNEL_FQ void m16900_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ansible_v } } -KERNEL_FQ void m16900_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ansible_vault_t)) +KERNEL_FQ void HC_ATTR_SEQ m16900_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ansible_vault_t)) { const u64 gid = get_global_id (0); @@ -268,7 +268,7 @@ KERNEL_FQ void m16900_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ansible_v } } -KERNEL_FQ void m16900_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ansible_vault_t)) +KERNEL_FQ void HC_ATTR_SEQ m16900_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ansible_vault_t)) { /** * base diff --git a/OpenCL/m17010-pure.cl b/OpenCL/m17010-pure.cl index 406c35aa2..1bc9fe36d 100644 --- a/OpenCL/m17010-pure.cl +++ b/OpenCL/m17010-pure.cl @@ -211,7 +211,7 @@ DECLSPEC int check_decoded_data (PRIVATE_AS u32 *decoded_data, const u32 decoded && (expected_sha1[4] == hc_swap32_S (ctx.h[4])); } -KERNEL_FQ void m17010_init (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ void HC_ATTR_SEQ m17010_init (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { const u64 gid = get_global_id (0); @@ -260,7 +260,7 @@ KERNEL_FQ void m17010_init (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) tmps[gid].len = 0; } -KERNEL_FQ void m17010_loop_prepare (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ void HC_ATTR_SEQ m17010_loop_prepare (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { const u64 gid = get_global_id (0); @@ -286,7 +286,7 @@ KERNEL_FQ void m17010_loop_prepare (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) tmps[gid].len = SALT_REPEAT; } -KERNEL_FQ void m17010_loop (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ void HC_ATTR_SEQ m17010_loop (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { const u64 gid = get_global_id (0); @@ -358,12 +358,12 @@ KERNEL_FQ void m17010_loop (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) tmps[gid].len = ctx.len; } -KERNEL_FQ void m17010_comp (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ void HC_ATTR_SEQ m17010_comp (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { // not in use here, special case... } -KERNEL_FQ void m17010_aux1 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ void HC_ATTR_SEQ m17010_aux1 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { /** * modifier @@ -433,7 +433,7 @@ KERNEL_FQ void m17010_aux1 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) } } -KERNEL_FQ void m17010_aux2 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ void HC_ATTR_SEQ m17010_aux2 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { /** * modifier diff --git a/OpenCL/m17020-pure.cl b/OpenCL/m17020-pure.cl index d8b112a13..c7c4021d6 100644 --- a/OpenCL/m17020-pure.cl +++ b/OpenCL/m17020-pure.cl @@ -216,7 +216,7 @@ DECLSPEC int check_decoded_data (PRIVATE_AS u32 *decoded_data, const u32 decoded && (expected_sha1[4] == hc_swap32_S (ctx.h[4])); } -KERNEL_FQ void m17020_init (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ void HC_ATTR_SEQ m17020_init (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { const u64 gid = get_global_id (0); @@ -266,7 +266,7 @@ KERNEL_FQ void m17020_init (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) tmps[gid].len = 0; } -KERNEL_FQ void m17020_loop_prepare (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ void HC_ATTR_SEQ m17020_loop_prepare (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { const u64 gid = get_global_id (0); @@ -308,7 +308,7 @@ KERNEL_FQ void m17020_loop_prepare (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) tmps[gid].len = 0; } -KERNEL_FQ void m17020_loop (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ void HC_ATTR_SEQ m17020_loop (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { const u64 gid = get_global_id (0); @@ -386,12 +386,12 @@ KERNEL_FQ void m17020_loop (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) tmps[gid].len = ctx.len; } -KERNEL_FQ void m17020_comp (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ void HC_ATTR_SEQ m17020_comp (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { // not in use here, special case... } -KERNEL_FQ void m17020_aux1 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ void HC_ATTR_SEQ m17020_aux1 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { /** * modifier @@ -464,7 +464,7 @@ KERNEL_FQ void m17020_aux1 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) } } -KERNEL_FQ void m17020_aux2 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ void HC_ATTR_SEQ m17020_aux2 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { /** * modifier diff --git a/OpenCL/m17030-pure.cl b/OpenCL/m17030-pure.cl index e04ac6398..3865a7eb0 100644 --- a/OpenCL/m17030-pure.cl +++ b/OpenCL/m17030-pure.cl @@ -212,7 +212,7 @@ DECLSPEC int check_decoded_data (PRIVATE_AS u32 *decoded_data, const u32 decoded && (expected_sha1[4] == hc_swap32_S (ctx.h[4])); } -KERNEL_FQ void m17030_init (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ void HC_ATTR_SEQ m17030_init (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { const u64 gid = get_global_id (0); @@ -262,7 +262,7 @@ KERNEL_FQ void m17030_init (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) tmps[gid].len = 0; } -KERNEL_FQ void m17030_loop_prepare (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ void HC_ATTR_SEQ m17030_loop_prepare (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { const u64 gid = get_global_id (0); @@ -288,7 +288,7 @@ KERNEL_FQ void m17030_loop_prepare (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) tmps[gid].len = 0; } -KERNEL_FQ void m17030_loop (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ void HC_ATTR_SEQ m17030_loop (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { const u64 gid = get_global_id (0); @@ -358,12 +358,12 @@ KERNEL_FQ void m17030_loop (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) tmps[gid].len = ctx.len; } -KERNEL_FQ void m17030_comp (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ void HC_ATTR_SEQ m17030_comp (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { // not in use here, special case... } -KERNEL_FQ void m17030_aux1 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ void HC_ATTR_SEQ m17030_aux1 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { /** * modifier @@ -436,7 +436,7 @@ KERNEL_FQ void m17030_aux1 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) } } -KERNEL_FQ void m17030_aux2 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ void HC_ATTR_SEQ m17030_aux2 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { /** * modifier diff --git a/OpenCL/m17040-pure.cl b/OpenCL/m17040-pure.cl index feeae009f..e268ce44c 100644 --- a/OpenCL/m17040-pure.cl +++ b/OpenCL/m17040-pure.cl @@ -193,7 +193,7 @@ DECLSPEC int check_decoded_data (PRIVATE_AS u32 *decoded_data, const u32 decoded && (expected_sha1[4] == hc_swap32_S (ctx.h[4])); } -KERNEL_FQ void m17040_init (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ void HC_ATTR_SEQ m17040_init (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { const u64 gid = get_global_id (0); @@ -242,7 +242,7 @@ KERNEL_FQ void m17040_init (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) tmps[gid].len = 0; } -KERNEL_FQ void m17040_loop_prepare (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ void HC_ATTR_SEQ m17040_loop_prepare (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { const u64 gid = get_global_id (0); @@ -279,7 +279,7 @@ KERNEL_FQ void m17040_loop_prepare (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) tmps[gid].len = 0; } -KERNEL_FQ void m17040_loop (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ void HC_ATTR_SEQ m17040_loop (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -336,12 +336,12 @@ KERNEL_FQ void m17040_loop (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) tmps[gid].len = ctx.len; } -KERNEL_FQ void m17040_comp (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ void HC_ATTR_SEQ m17040_comp (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { // not in use here, special case... } -KERNEL_FQ void m17040_aux1 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ void HC_ATTR_SEQ m17040_aux1 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { /** * modifier diff --git a/OpenCL/m17200_a0-pure.cl b/OpenCL/m17200_a0-pure.cl index 1fdc1c069..134318275 100644 --- a/OpenCL/m17200_a0-pure.cl +++ b/OpenCL/m17200_a0-pure.cl @@ -529,7 +529,7 @@ DECLSPEC int check_inflate_code1 (u8 *next, int left) } } -KERNEL_FQ void m17200_sxx (KERN_ATTR_RULES_ESALT (pkzip_t)) +KERNEL_FQ void HC_ATTR_SEQ m17200_sxx (KERN_ATTR_RULES_ESALT (pkzip_t)) { /** * modifier @@ -767,7 +767,7 @@ KERNEL_FQ void m17200_sxx (KERN_ATTR_RULES_ESALT (pkzip_t)) } } -KERNEL_FQ void m17200_mxx (KERN_ATTR_RULES_ESALT (pkzip_t)) +KERNEL_FQ void HC_ATTR_SEQ m17200_mxx (KERN_ATTR_RULES_ESALT (pkzip_t)) { /** * modifier diff --git a/OpenCL/m17200_a1-pure.cl b/OpenCL/m17200_a1-pure.cl index c8ed0d5bc..d23ca640b 100644 --- a/OpenCL/m17200_a1-pure.cl +++ b/OpenCL/m17200_a1-pure.cl @@ -527,7 +527,7 @@ DECLSPEC int check_inflate_code1 (PRIVATE_AS u8 *next, int left) } } -KERNEL_FQ void m17200_sxx (KERN_ATTR_ESALT (pkzip_t)) +KERNEL_FQ void HC_ATTR_SEQ m17200_sxx (KERN_ATTR_ESALT (pkzip_t)) { /** * modifier @@ -769,7 +769,7 @@ KERNEL_FQ void m17200_sxx (KERN_ATTR_ESALT (pkzip_t)) } } -KERNEL_FQ void m17200_mxx (KERN_ATTR_ESALT (pkzip_t)) +KERNEL_FQ void HC_ATTR_SEQ m17200_mxx (KERN_ATTR_ESALT (pkzip_t)) { /** * modifier diff --git a/OpenCL/m17200_a3-pure.cl b/OpenCL/m17200_a3-pure.cl index 1820c38e6..a7be151f2 100644 --- a/OpenCL/m17200_a3-pure.cl +++ b/OpenCL/m17200_a3-pure.cl @@ -528,7 +528,7 @@ DECLSPEC int check_inflate_code1 (u8 *next, int left) } } -KERNEL_FQ void m17200_sxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) +KERNEL_FQ void HC_ATTR_SEQ m17200_sxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) { /** * modifier @@ -782,7 +782,7 @@ KERNEL_FQ void m17200_sxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) } } -KERNEL_FQ void m17200_mxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) +KERNEL_FQ void HC_ATTR_SEQ m17200_mxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) { /** * modifier diff --git a/OpenCL/m17210_a0-pure.cl b/OpenCL/m17210_a0-pure.cl index 093a62d6b..ccc596181 100644 --- a/OpenCL/m17210_a0-pure.cl +++ b/OpenCL/m17210_a0-pure.cl @@ -220,7 +220,7 @@ CONSTANT_VK u32a crc32tab[256] = 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d }; -KERNEL_FQ void m17210_sxx (KERN_ATTR_RULES_ESALT (pkzip_t)) +KERNEL_FQ void HC_ATTR_SEQ m17210_sxx (KERN_ATTR_RULES_ESALT (pkzip_t)) { /** * modifier @@ -459,7 +459,7 @@ KERNEL_FQ void m17210_sxx (KERN_ATTR_RULES_ESALT (pkzip_t)) } } -KERNEL_FQ void m17210_mxx (KERN_ATTR_RULES_ESALT (pkzip_t)) +KERNEL_FQ void HC_ATTR_SEQ m17210_mxx (KERN_ATTR_RULES_ESALT (pkzip_t)) { /** * modifier diff --git a/OpenCL/m17210_a1-pure.cl b/OpenCL/m17210_a1-pure.cl index a2d7d4984..e93fef661 100644 --- a/OpenCL/m17210_a1-pure.cl +++ b/OpenCL/m17210_a1-pure.cl @@ -218,7 +218,7 @@ CONSTANT_VK u32a crc32tab[256] = 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d }; -KERNEL_FQ void m17210_sxx (KERN_ATTR_ESALT (pkzip_t)) +KERNEL_FQ void HC_ATTR_SEQ m17210_sxx (KERN_ATTR_ESALT (pkzip_t)) { /** * modifier @@ -459,7 +459,7 @@ KERNEL_FQ void m17210_sxx (KERN_ATTR_ESALT (pkzip_t)) } } -KERNEL_FQ void m17210_mxx (KERN_ATTR_ESALT (pkzip_t)) +KERNEL_FQ void HC_ATTR_SEQ m17210_mxx (KERN_ATTR_ESALT (pkzip_t)) { /** * modifier diff --git a/OpenCL/m17210_a3-pure.cl b/OpenCL/m17210_a3-pure.cl index 829f06644..1bc833010 100644 --- a/OpenCL/m17210_a3-pure.cl +++ b/OpenCL/m17210_a3-pure.cl @@ -218,7 +218,7 @@ CONSTANT_VK u32a crc32tab[256] = 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d }; -KERNEL_FQ void m17210_sxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) +KERNEL_FQ void HC_ATTR_SEQ m17210_sxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) { /** * modifier @@ -471,7 +471,7 @@ KERNEL_FQ void m17210_sxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) } } -KERNEL_FQ void m17210_mxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) +KERNEL_FQ void HC_ATTR_SEQ m17210_mxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) { /** * modifier diff --git a/OpenCL/m17220_a0-pure.cl b/OpenCL/m17220_a0-pure.cl index a7300768d..077011bee 100644 --- a/OpenCL/m17220_a0-pure.cl +++ b/OpenCL/m17220_a0-pure.cl @@ -527,7 +527,7 @@ DECLSPEC int check_inflate_code1 (u8 *next, int left) } } -KERNEL_FQ void m17220_sxx (KERN_ATTR_RULES_ESALT (pkzip_t)) +KERNEL_FQ void HC_ATTR_SEQ m17220_sxx (KERN_ATTR_RULES_ESALT (pkzip_t)) { /** * modifier @@ -792,7 +792,7 @@ KERNEL_FQ void m17220_sxx (KERN_ATTR_RULES_ESALT (pkzip_t)) } } -KERNEL_FQ void m17220_mxx (KERN_ATTR_RULES_ESALT (pkzip_t)) +KERNEL_FQ void HC_ATTR_SEQ m17220_mxx (KERN_ATTR_RULES_ESALT (pkzip_t)) { /** * modifier diff --git a/OpenCL/m17220_a1-pure.cl b/OpenCL/m17220_a1-pure.cl index 7755ee5a8..5624fa593 100644 --- a/OpenCL/m17220_a1-pure.cl +++ b/OpenCL/m17220_a1-pure.cl @@ -525,7 +525,7 @@ DECLSPEC int check_inflate_code1 (PRIVATE_AS u8 *next, int left) } } -KERNEL_FQ void m17220_sxx (KERN_ATTR_ESALT (pkzip_t)) +KERNEL_FQ void HC_ATTR_SEQ m17220_sxx (KERN_ATTR_ESALT (pkzip_t)) { /** * modifier @@ -792,7 +792,7 @@ KERNEL_FQ void m17220_sxx (KERN_ATTR_ESALT (pkzip_t)) } } -KERNEL_FQ void m17220_mxx (KERN_ATTR_ESALT (pkzip_t)) +KERNEL_FQ void HC_ATTR_SEQ m17220_mxx (KERN_ATTR_ESALT (pkzip_t)) { /** * modifier diff --git a/OpenCL/m17220_a3-pure.cl b/OpenCL/m17220_a3-pure.cl index 2145540af..f05e81570 100644 --- a/OpenCL/m17220_a3-pure.cl +++ b/OpenCL/m17220_a3-pure.cl @@ -525,7 +525,7 @@ DECLSPEC int check_inflate_code1 (u8 *next, int left) } } -KERNEL_FQ void m17220_sxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) +KERNEL_FQ void HC_ATTR_SEQ m17220_sxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) { /** * modifier @@ -804,7 +804,7 @@ KERNEL_FQ void m17220_sxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) } } -KERNEL_FQ void m17220_mxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) +KERNEL_FQ void HC_ATTR_SEQ m17220_mxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) { /** * modifier diff --git a/OpenCL/m17225_a0-pure.cl b/OpenCL/m17225_a0-pure.cl index 868ffc8dd..00c06b196 100644 --- a/OpenCL/m17225_a0-pure.cl +++ b/OpenCL/m17225_a0-pure.cl @@ -527,7 +527,7 @@ DECLSPEC int check_inflate_code1 (u8 *next, int left) } } -KERNEL_FQ void m17225_sxx (KERN_ATTR_RULES_ESALT (pkzip_t)) +KERNEL_FQ void HC_ATTR_SEQ m17225_sxx (KERN_ATTR_RULES_ESALT (pkzip_t)) { /** * modifier @@ -855,7 +855,7 @@ KERNEL_FQ void m17225_sxx (KERN_ATTR_RULES_ESALT (pkzip_t)) } } -KERNEL_FQ void m17225_mxx (KERN_ATTR_RULES_ESALT (pkzip_t)) +KERNEL_FQ void HC_ATTR_SEQ m17225_mxx (KERN_ATTR_RULES_ESALT (pkzip_t)) { /** * modifier diff --git a/OpenCL/m17225_a1-pure.cl b/OpenCL/m17225_a1-pure.cl index a4f04f253..42c86079f 100644 --- a/OpenCL/m17225_a1-pure.cl +++ b/OpenCL/m17225_a1-pure.cl @@ -525,7 +525,7 @@ DECLSPEC int check_inflate_code1 (PRIVATE_AS u8 *next, int left) } } -KERNEL_FQ void m17225_sxx (KERN_ATTR_ESALT (pkzip_t)) +KERNEL_FQ void HC_ATTR_SEQ m17225_sxx (KERN_ATTR_ESALT (pkzip_t)) { /** * modifier @@ -854,7 +854,7 @@ KERNEL_FQ void m17225_sxx (KERN_ATTR_ESALT (pkzip_t)) } } -KERNEL_FQ void m17225_mxx (KERN_ATTR_ESALT (pkzip_t)) +KERNEL_FQ void HC_ATTR_SEQ m17225_mxx (KERN_ATTR_ESALT (pkzip_t)) { /** * modifier diff --git a/OpenCL/m17225_a3-pure.cl b/OpenCL/m17225_a3-pure.cl index 1704eb848..e350deb96 100644 --- a/OpenCL/m17225_a3-pure.cl +++ b/OpenCL/m17225_a3-pure.cl @@ -525,7 +525,7 @@ DECLSPEC int check_inflate_code1 (u8 *next, int left) } } -KERNEL_FQ void m17225_sxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) +KERNEL_FQ void HC_ATTR_SEQ m17225_sxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) { /** * modifier @@ -866,7 +866,7 @@ KERNEL_FQ void m17225_sxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) } } -KERNEL_FQ void m17225_mxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) +KERNEL_FQ void HC_ATTR_SEQ m17225_mxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) { /** * modifier diff --git a/OpenCL/m17230_a0-pure.cl b/OpenCL/m17230_a0-pure.cl index b9d8e60ed..83cee4daf 100644 --- a/OpenCL/m17230_a0-pure.cl +++ b/OpenCL/m17230_a0-pure.cl @@ -220,7 +220,7 @@ CONSTANT_VK u32a crc32tab[256] = 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d }; -KERNEL_FQ void m17230_sxx (KERN_ATTR_RULES_ESALT (pkzip_t)) +KERNEL_FQ void HC_ATTR_SEQ m17230_sxx (KERN_ATTR_RULES_ESALT (pkzip_t)) { /** * modifier @@ -390,7 +390,7 @@ KERNEL_FQ void m17230_sxx (KERN_ATTR_RULES_ESALT (pkzip_t)) } } -KERNEL_FQ void m17230_mxx (KERN_ATTR_RULES_ESALT (pkzip_t)) +KERNEL_FQ void HC_ATTR_SEQ m17230_mxx (KERN_ATTR_RULES_ESALT (pkzip_t)) { /** * modifier diff --git a/OpenCL/m17230_a1-pure.cl b/OpenCL/m17230_a1-pure.cl index ebeb48768..f89e23046 100644 --- a/OpenCL/m17230_a1-pure.cl +++ b/OpenCL/m17230_a1-pure.cl @@ -218,7 +218,7 @@ CONSTANT_VK u32a crc32tab[256] = 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d }; -KERNEL_FQ void m17230_sxx (KERN_ATTR_ESALT (pkzip_t)) +KERNEL_FQ void HC_ATTR_SEQ m17230_sxx (KERN_ATTR_ESALT (pkzip_t)) { /** * modifier @@ -390,7 +390,7 @@ KERNEL_FQ void m17230_sxx (KERN_ATTR_ESALT (pkzip_t)) } } -KERNEL_FQ void m17230_mxx (KERN_ATTR_ESALT (pkzip_t)) +KERNEL_FQ void HC_ATTR_SEQ m17230_mxx (KERN_ATTR_ESALT (pkzip_t)) { /** * modifier diff --git a/OpenCL/m17230_a3-pure.cl b/OpenCL/m17230_a3-pure.cl index a52dec658..f5dcfd923 100644 --- a/OpenCL/m17230_a3-pure.cl +++ b/OpenCL/m17230_a3-pure.cl @@ -218,7 +218,7 @@ CONSTANT_VK u32a crc32tab[256] = 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d }; -KERNEL_FQ void m17230_sxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) +KERNEL_FQ void HC_ATTR_SEQ m17230_sxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) { /** * modifier @@ -404,7 +404,7 @@ KERNEL_FQ void m17230_sxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) } } -KERNEL_FQ void m17230_mxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) +KERNEL_FQ void HC_ATTR_SEQ m17230_mxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) { /** * modifier diff --git a/OpenCL/m17300_a0-optimized.cl b/OpenCL/m17300_a0-optimized.cl index 0140de8fb..d61df5dcb 100644 --- a/OpenCL/m17300_a0-optimized.cl +++ b/OpenCL/m17300_a0-optimized.cl @@ -29,7 +29,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void m17300_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17300_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -239,15 +239,15 @@ KERNEL_FQ void m17300_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m17300_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17300_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m17300_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17300_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m17300_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17300_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -469,10 +469,10 @@ KERNEL_FQ void m17300_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m17300_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17300_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m17300_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17300_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m17300_a1-optimized.cl b/OpenCL/m17300_a1-optimized.cl index 04d70395a..d3976cfac 100644 --- a/OpenCL/m17300_a1-optimized.cl +++ b/OpenCL/m17300_a1-optimized.cl @@ -27,7 +27,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void m17300_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17300_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -296,15 +296,15 @@ KERNEL_FQ void m17300_m04 (KERN_ATTR_BASIC ()) } -KERNEL_FQ void m17300_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17300_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m17300_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17300_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m17300_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17300_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -584,10 +584,10 @@ KERNEL_FQ void m17300_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m17300_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17300_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m17300_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17300_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m17300_a3-optimized.cl b/OpenCL/m17300_a3-optimized.cl index 4f3c1649e..ea9ddead4 100644 --- a/OpenCL/m17300_a3-optimized.cl +++ b/OpenCL/m17300_a3-optimized.cl @@ -405,7 +405,7 @@ DECLSPEC void m17300s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m17300_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17300_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -454,7 +454,7 @@ KERNEL_FQ void m17300_m04 (KERN_ATTR_BASIC ()) m17300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17300_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17300_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -503,7 +503,7 @@ KERNEL_FQ void m17300_m08 (KERN_ATTR_BASIC ()) m17300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17300_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17300_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -552,7 +552,7 @@ KERNEL_FQ void m17300_m16 (KERN_ATTR_BASIC ()) m17300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17300_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17300_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -601,7 +601,7 @@ KERNEL_FQ void m17300_s04 (KERN_ATTR_BASIC ()) m17300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17300_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17300_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -650,7 +650,7 @@ KERNEL_FQ void m17300_s08 (KERN_ATTR_BASIC ()) m17300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17300_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17300_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m17400_a0-optimized.cl b/OpenCL/m17400_a0-optimized.cl index ad517f2dd..b95ba78c4 100644 --- a/OpenCL/m17400_a0-optimized.cl +++ b/OpenCL/m17400_a0-optimized.cl @@ -29,7 +29,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void m17400_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17400_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -239,15 +239,15 @@ KERNEL_FQ void m17400_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m17400_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17400_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m17400_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17400_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m17400_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17400_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -469,10 +469,10 @@ KERNEL_FQ void m17400_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m17400_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17400_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m17400_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17400_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m17400_a1-optimized.cl b/OpenCL/m17400_a1-optimized.cl index 47b771a47..b76181977 100644 --- a/OpenCL/m17400_a1-optimized.cl +++ b/OpenCL/m17400_a1-optimized.cl @@ -27,7 +27,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void m17400_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17400_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -296,15 +296,15 @@ KERNEL_FQ void m17400_m04 (KERN_ATTR_BASIC ()) } -KERNEL_FQ void m17400_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17400_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m17400_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17400_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m17400_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17400_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -584,10 +584,10 @@ KERNEL_FQ void m17400_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m17400_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17400_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m17400_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17400_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m17400_a3-optimized.cl b/OpenCL/m17400_a3-optimized.cl index ae79bfb14..80e5ef294 100644 --- a/OpenCL/m17400_a3-optimized.cl +++ b/OpenCL/m17400_a3-optimized.cl @@ -405,7 +405,7 @@ DECLSPEC void m17400s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m17400_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17400_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -454,7 +454,7 @@ KERNEL_FQ void m17400_m04 (KERN_ATTR_BASIC ()) m17400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17400_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17400_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -503,7 +503,7 @@ KERNEL_FQ void m17400_m08 (KERN_ATTR_BASIC ()) m17400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17400_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17400_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -552,7 +552,7 @@ KERNEL_FQ void m17400_m16 (KERN_ATTR_BASIC ()) m17400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17400_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17400_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -601,7 +601,7 @@ KERNEL_FQ void m17400_s04 (KERN_ATTR_BASIC ()) m17400s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17400_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17400_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -650,7 +650,7 @@ KERNEL_FQ void m17400_s08 (KERN_ATTR_BASIC ()) m17400s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17400_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17400_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m17500_a0-optimized.cl b/OpenCL/m17500_a0-optimized.cl index c1f24e1cc..e89cc1188 100644 --- a/OpenCL/m17500_a0-optimized.cl +++ b/OpenCL/m17500_a0-optimized.cl @@ -29,7 +29,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void m17500_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17500_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -239,15 +239,15 @@ KERNEL_FQ void m17500_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m17500_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17500_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m17500_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17500_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m17500_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17500_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -469,10 +469,10 @@ KERNEL_FQ void m17500_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m17500_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17500_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m17500_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17500_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m17500_a1-optimized.cl b/OpenCL/m17500_a1-optimized.cl index cd8ebcef9..6bdea81d0 100644 --- a/OpenCL/m17500_a1-optimized.cl +++ b/OpenCL/m17500_a1-optimized.cl @@ -27,7 +27,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void m17500_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17500_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -296,15 +296,15 @@ KERNEL_FQ void m17500_m04 (KERN_ATTR_BASIC ()) } -KERNEL_FQ void m17500_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17500_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m17500_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17500_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m17500_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17500_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -584,10 +584,10 @@ KERNEL_FQ void m17500_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m17500_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17500_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m17500_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17500_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m17500_a3-optimized.cl b/OpenCL/m17500_a3-optimized.cl index 488b92236..99f2bc144 100644 --- a/OpenCL/m17500_a3-optimized.cl +++ b/OpenCL/m17500_a3-optimized.cl @@ -405,7 +405,7 @@ DECLSPEC void m17500s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m17500_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17500_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -454,7 +454,7 @@ KERNEL_FQ void m17500_m04 (KERN_ATTR_BASIC ()) m17500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17500_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17500_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -503,7 +503,7 @@ KERNEL_FQ void m17500_m08 (KERN_ATTR_BASIC ()) m17500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17500_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17500_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -552,7 +552,7 @@ KERNEL_FQ void m17500_m16 (KERN_ATTR_BASIC ()) m17500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17500_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17500_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -601,7 +601,7 @@ KERNEL_FQ void m17500_s04 (KERN_ATTR_BASIC ()) m17500s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17500_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17500_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -650,7 +650,7 @@ KERNEL_FQ void m17500_s08 (KERN_ATTR_BASIC ()) m17500s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17500_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17500_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m17600_a0-optimized.cl b/OpenCL/m17600_a0-optimized.cl index 4a9282398..5ec268781 100644 --- a/OpenCL/m17600_a0-optimized.cl +++ b/OpenCL/m17600_a0-optimized.cl @@ -29,7 +29,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void m17600_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17600_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -239,15 +239,15 @@ KERNEL_FQ void m17600_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m17600_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17600_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m17600_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17600_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m17600_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17600_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -469,10 +469,10 @@ KERNEL_FQ void m17600_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m17600_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17600_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m17600_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17600_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m17600_a1-optimized.cl b/OpenCL/m17600_a1-optimized.cl index d6ff92ee7..446311cd1 100644 --- a/OpenCL/m17600_a1-optimized.cl +++ b/OpenCL/m17600_a1-optimized.cl @@ -27,7 +27,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void m17600_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17600_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -296,15 +296,15 @@ KERNEL_FQ void m17600_m04 (KERN_ATTR_BASIC ()) } -KERNEL_FQ void m17600_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17600_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m17600_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17600_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m17600_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17600_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -584,10 +584,10 @@ KERNEL_FQ void m17600_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m17600_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17600_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m17600_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17600_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m17600_a3-optimized.cl b/OpenCL/m17600_a3-optimized.cl index 13d47d69d..8b2031210 100644 --- a/OpenCL/m17600_a3-optimized.cl +++ b/OpenCL/m17600_a3-optimized.cl @@ -405,7 +405,7 @@ DECLSPEC void m17600s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m17600_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17600_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -454,7 +454,7 @@ KERNEL_FQ void m17600_m04 (KERN_ATTR_BASIC ()) m17600m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17600_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17600_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -503,7 +503,7 @@ KERNEL_FQ void m17600_m08 (KERN_ATTR_BASIC ()) m17600m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17600_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17600_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -552,7 +552,7 @@ KERNEL_FQ void m17600_m16 (KERN_ATTR_BASIC ()) m17600m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17600_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17600_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -601,7 +601,7 @@ KERNEL_FQ void m17600_s04 (KERN_ATTR_BASIC ()) m17600s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17600_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17600_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -650,7 +650,7 @@ KERNEL_FQ void m17600_s08 (KERN_ATTR_BASIC ()) m17600s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17600_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17600_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m17700_a0-optimized.cl b/OpenCL/m17700_a0-optimized.cl index 7d7066f3b..1271c7049 100644 --- a/OpenCL/m17700_a0-optimized.cl +++ b/OpenCL/m17700_a0-optimized.cl @@ -29,7 +29,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void m17700_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17700_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -239,15 +239,15 @@ KERNEL_FQ void m17700_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m17700_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17700_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m17700_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17700_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m17700_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17700_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -469,10 +469,10 @@ KERNEL_FQ void m17700_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m17700_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17700_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m17700_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17700_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m17700_a1-optimized.cl b/OpenCL/m17700_a1-optimized.cl index 1a8cf659b..633e01b0b 100644 --- a/OpenCL/m17700_a1-optimized.cl +++ b/OpenCL/m17700_a1-optimized.cl @@ -27,7 +27,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void m17700_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17700_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -296,15 +296,15 @@ KERNEL_FQ void m17700_m04 (KERN_ATTR_BASIC ()) } -KERNEL_FQ void m17700_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17700_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m17700_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17700_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m17700_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17700_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -584,10 +584,10 @@ KERNEL_FQ void m17700_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m17700_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17700_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m17700_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17700_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m17700_a3-optimized.cl b/OpenCL/m17700_a3-optimized.cl index 4f2ae86bf..98e736c0a 100644 --- a/OpenCL/m17700_a3-optimized.cl +++ b/OpenCL/m17700_a3-optimized.cl @@ -405,7 +405,7 @@ DECLSPEC void m17300s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m17700_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17700_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -454,7 +454,7 @@ KERNEL_FQ void m17700_m04 (KERN_ATTR_BASIC ()) m17300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17700_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17700_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -503,7 +503,7 @@ KERNEL_FQ void m17700_m08 (KERN_ATTR_BASIC ()) m17300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17700_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17700_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -552,7 +552,7 @@ KERNEL_FQ void m17700_m16 (KERN_ATTR_BASIC ()) m17300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17700_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17700_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -601,7 +601,7 @@ KERNEL_FQ void m17700_s04 (KERN_ATTR_BASIC ()) m17300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17700_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17700_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -650,7 +650,7 @@ KERNEL_FQ void m17700_s08 (KERN_ATTR_BASIC ()) m17300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17700_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17700_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m17800_a0-optimized.cl b/OpenCL/m17800_a0-optimized.cl index ca898956d..637493ac8 100644 --- a/OpenCL/m17800_a0-optimized.cl +++ b/OpenCL/m17800_a0-optimized.cl @@ -29,7 +29,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void m17800_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17800_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -239,15 +239,15 @@ KERNEL_FQ void m17800_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m17800_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17800_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m17800_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17800_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m17800_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17800_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -469,10 +469,10 @@ KERNEL_FQ void m17800_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m17800_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17800_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m17800_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17800_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m17800_a1-optimized.cl b/OpenCL/m17800_a1-optimized.cl index 33a90169f..0ff854bdb 100644 --- a/OpenCL/m17800_a1-optimized.cl +++ b/OpenCL/m17800_a1-optimized.cl @@ -27,7 +27,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void m17800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17800_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -296,15 +296,15 @@ KERNEL_FQ void m17800_m04 (KERN_ATTR_BASIC ()) } -KERNEL_FQ void m17800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17800_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m17800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17800_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m17800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17800_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -584,10 +584,10 @@ KERNEL_FQ void m17800_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m17800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17800_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m17800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17800_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m17800_a3-optimized.cl b/OpenCL/m17800_a3-optimized.cl index e073b1910..065002d72 100644 --- a/OpenCL/m17800_a3-optimized.cl +++ b/OpenCL/m17800_a3-optimized.cl @@ -405,7 +405,7 @@ DECLSPEC void m17400s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m17800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17800_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -454,7 +454,7 @@ KERNEL_FQ void m17800_m04 (KERN_ATTR_BASIC ()) m17400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17800_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -503,7 +503,7 @@ KERNEL_FQ void m17800_m08 (KERN_ATTR_BASIC ()) m17400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17800_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -552,7 +552,7 @@ KERNEL_FQ void m17800_m16 (KERN_ATTR_BASIC ()) m17400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17800_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -601,7 +601,7 @@ KERNEL_FQ void m17800_s04 (KERN_ATTR_BASIC ()) m17400s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17800_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -650,7 +650,7 @@ KERNEL_FQ void m17800_s08 (KERN_ATTR_BASIC ()) m17400s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17800_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m17900_a0-optimized.cl b/OpenCL/m17900_a0-optimized.cl index 42c9e970a..488b67a21 100644 --- a/OpenCL/m17900_a0-optimized.cl +++ b/OpenCL/m17900_a0-optimized.cl @@ -29,7 +29,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void m17900_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17900_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -239,15 +239,15 @@ KERNEL_FQ void m17900_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m17900_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17900_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m17900_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17900_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m17900_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17900_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -469,10 +469,10 @@ KERNEL_FQ void m17900_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m17900_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17900_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m17900_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m17900_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m17900_a1-optimized.cl b/OpenCL/m17900_a1-optimized.cl index 7c4047ed4..7e871fd0b 100644 --- a/OpenCL/m17900_a1-optimized.cl +++ b/OpenCL/m17900_a1-optimized.cl @@ -27,7 +27,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void m17900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17900_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -296,15 +296,15 @@ KERNEL_FQ void m17900_m04 (KERN_ATTR_BASIC ()) } -KERNEL_FQ void m17900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17900_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m17900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17900_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m17900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17900_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -584,10 +584,10 @@ KERNEL_FQ void m17900_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m17900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17900_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m17900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17900_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m17900_a3-optimized.cl b/OpenCL/m17900_a3-optimized.cl index 58b0211ae..cbbc93959 100644 --- a/OpenCL/m17900_a3-optimized.cl +++ b/OpenCL/m17900_a3-optimized.cl @@ -405,7 +405,7 @@ DECLSPEC void m17500s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m17900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17900_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -454,7 +454,7 @@ KERNEL_FQ void m17900_m04 (KERN_ATTR_BASIC ()) m17500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17900_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -503,7 +503,7 @@ KERNEL_FQ void m17900_m08 (KERN_ATTR_BASIC ()) m17500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17900_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -552,7 +552,7 @@ KERNEL_FQ void m17900_m16 (KERN_ATTR_BASIC ()) m17500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17900_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -601,7 +601,7 @@ KERNEL_FQ void m17900_s04 (KERN_ATTR_BASIC ()) m17500s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17900_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -650,7 +650,7 @@ KERNEL_FQ void m17900_s08 (KERN_ATTR_BASIC ()) m17500s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m17900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m17900_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m18000_a0-optimized.cl b/OpenCL/m18000_a0-optimized.cl index 88b9f51d2..69f48c6f6 100644 --- a/OpenCL/m18000_a0-optimized.cl +++ b/OpenCL/m18000_a0-optimized.cl @@ -29,7 +29,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void m18000_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m18000_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -239,15 +239,15 @@ KERNEL_FQ void m18000_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m18000_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m18000_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m18000_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m18000_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m18000_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m18000_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -469,10 +469,10 @@ KERNEL_FQ void m18000_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m18000_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m18000_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m18000_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m18000_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m18000_a1-optimized.cl b/OpenCL/m18000_a1-optimized.cl index 8600c0f29..f852f27ed 100644 --- a/OpenCL/m18000_a1-optimized.cl +++ b/OpenCL/m18000_a1-optimized.cl @@ -27,7 +27,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void m18000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m18000_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -296,15 +296,15 @@ KERNEL_FQ void m18000_m04 (KERN_ATTR_BASIC ()) } -KERNEL_FQ void m18000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m18000_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m18000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m18000_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m18000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m18000_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -584,10 +584,10 @@ KERNEL_FQ void m18000_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m18000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m18000_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m18000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m18000_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m18000_a3-optimized.cl b/OpenCL/m18000_a3-optimized.cl index bb83ec067..76f0d7f72 100644 --- a/OpenCL/m18000_a3-optimized.cl +++ b/OpenCL/m18000_a3-optimized.cl @@ -405,7 +405,7 @@ DECLSPEC void m17600s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m18000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m18000_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -454,7 +454,7 @@ KERNEL_FQ void m18000_m04 (KERN_ATTR_BASIC ()) m17600m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m18000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m18000_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -503,7 +503,7 @@ KERNEL_FQ void m18000_m08 (KERN_ATTR_BASIC ()) m17600m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m18000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m18000_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -552,7 +552,7 @@ KERNEL_FQ void m18000_m16 (KERN_ATTR_BASIC ()) m17600m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m18000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m18000_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -601,7 +601,7 @@ KERNEL_FQ void m18000_s04 (KERN_ATTR_BASIC ()) m17600s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m18000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m18000_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -650,7 +650,7 @@ KERNEL_FQ void m18000_s08 (KERN_ATTR_BASIC ()) m17600s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m18000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m18000_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m18100_a0-pure.cl b/OpenCL/m18100_a0-pure.cl index 9c8f047a9..93e7148bf 100644 --- a/OpenCL/m18100_a0-pure.cl +++ b/OpenCL/m18100_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m18100_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m18100_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -93,7 +93,7 @@ KERNEL_FQ void m18100_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m18100_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m18100_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m18100_a1-pure.cl b/OpenCL/m18100_a1-pure.cl index a596894ca..dd4aee14d 100644 --- a/OpenCL/m18100_a1-pure.cl +++ b/OpenCL/m18100_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m18100_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m18100_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -116,7 +116,7 @@ KERNEL_FQ void m18100_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m18100_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m18100_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m18100_a3-pure.cl b/OpenCL/m18100_a3-pure.cl index 70235ce95..d824f1b8d 100644 --- a/OpenCL/m18100_a3-pure.cl +++ b/OpenCL/m18100_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m18100_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m18100_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -103,7 +103,7 @@ KERNEL_FQ void m18100_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m18100_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m18100_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m18200_a0-optimized.cl b/OpenCL/m18200_a0-optimized.cl index 4eee77861..77cb7e010 100644 --- a/OpenCL/m18200_a0-optimized.cl +++ b/OpenCL/m18200_a0-optimized.cl @@ -452,7 +452,7 @@ DECLSPEC void kerb_prepare (PRIVATE_AS const u32 *w0, PRIVATE_AS const u32 *w1, hmac_md5_run (w0_t, w1_t, w2_t, w3_t, ipad, opad, digest); } -KERNEL_FQ void m18200_m04 (KERN_ATTR_RULES_ESALT (krb5asrep_t)) +KERNEL_FQ void HC_ATTR_SEQ m18200_m04 (KERN_ATTR_RULES_ESALT (krb5asrep_t)) { /** * modifier @@ -540,15 +540,15 @@ KERNEL_FQ void m18200_m04 (KERN_ATTR_RULES_ESALT (krb5asrep_t)) } } -KERNEL_FQ void m18200_m08 (KERN_ATTR_RULES_ESALT (krb5asrep_t)) +KERNEL_FQ void HC_ATTR_SEQ m18200_m08 (KERN_ATTR_RULES_ESALT (krb5asrep_t)) { } -KERNEL_FQ void m18200_m16 (KERN_ATTR_RULES_ESALT (krb5asrep_t)) +KERNEL_FQ void HC_ATTR_SEQ m18200_m16 (KERN_ATTR_RULES_ESALT (krb5asrep_t)) { } -KERNEL_FQ void m18200_s04 (KERN_ATTR_RULES_ESALT (krb5asrep_t)) +KERNEL_FQ void HC_ATTR_SEQ m18200_s04 (KERN_ATTR_RULES_ESALT (krb5asrep_t)) { /** * modifier @@ -636,10 +636,10 @@ KERNEL_FQ void m18200_s04 (KERN_ATTR_RULES_ESALT (krb5asrep_t)) } } -KERNEL_FQ void m18200_s08 (KERN_ATTR_RULES_ESALT (krb5asrep_t)) +KERNEL_FQ void HC_ATTR_SEQ m18200_s08 (KERN_ATTR_RULES_ESALT (krb5asrep_t)) { } -KERNEL_FQ void m18200_s16 (KERN_ATTR_RULES_ESALT (krb5asrep_t)) +KERNEL_FQ void HC_ATTR_SEQ m18200_s16 (KERN_ATTR_RULES_ESALT (krb5asrep_t)) { } diff --git a/OpenCL/m18200_a0-pure.cl b/OpenCL/m18200_a0-pure.cl index f86a48fef..f9b218ee3 100644 --- a/OpenCL/m18200_a0-pure.cl +++ b/OpenCL/m18200_a0-pure.cl @@ -264,7 +264,7 @@ DECLSPEC void kerb_prepare (PRIVATE_AS const u32 *K, PRIVATE_AS const u32 *check K2[3] = ctx1.opad.h[3]; } -KERNEL_FQ void m18200_mxx (KERN_ATTR_RULES_ESALT (krb5asrep_t)) +KERNEL_FQ void HC_ATTR_SEQ m18200_mxx (KERN_ATTR_RULES_ESALT (krb5asrep_t)) { /** * modifier @@ -324,7 +324,7 @@ KERNEL_FQ void m18200_mxx (KERN_ATTR_RULES_ESALT (krb5asrep_t)) } } -KERNEL_FQ void m18200_sxx (KERN_ATTR_RULES_ESALT (krb5asrep_t)) +KERNEL_FQ void HC_ATTR_SEQ m18200_sxx (KERN_ATTR_RULES_ESALT (krb5asrep_t)) { /** * modifier diff --git a/OpenCL/m18200_a1-optimized.cl b/OpenCL/m18200_a1-optimized.cl index c710bcbe8..249d20cf5 100644 --- a/OpenCL/m18200_a1-optimized.cl +++ b/OpenCL/m18200_a1-optimized.cl @@ -450,7 +450,7 @@ DECLSPEC void kerb_prepare (PRIVATE_AS const u32 *w0, PRIVATE_AS const u32 *w1, hmac_md5_run (w0_t, w1_t, w2_t, w3_t, ipad, opad, digest); } -KERNEL_FQ void m18200_m04 (KERN_ATTR_ESALT (krb5asrep_t)) +KERNEL_FQ void HC_ATTR_SEQ m18200_m04 (KERN_ATTR_ESALT (krb5asrep_t)) { /** * modifier @@ -587,15 +587,15 @@ KERNEL_FQ void m18200_m04 (KERN_ATTR_ESALT (krb5asrep_t)) } } -KERNEL_FQ void m18200_m08 (KERN_ATTR_ESALT (krb5asrep_t)) +KERNEL_FQ void HC_ATTR_SEQ m18200_m08 (KERN_ATTR_ESALT (krb5asrep_t)) { } -KERNEL_FQ void m18200_m16 (KERN_ATTR_ESALT (krb5asrep_t)) +KERNEL_FQ void HC_ATTR_SEQ m18200_m16 (KERN_ATTR_ESALT (krb5asrep_t)) { } -KERNEL_FQ void m18200_s04 (KERN_ATTR_ESALT (krb5asrep_t)) +KERNEL_FQ void HC_ATTR_SEQ m18200_s04 (KERN_ATTR_ESALT (krb5asrep_t)) { /** * modifier @@ -732,10 +732,10 @@ KERNEL_FQ void m18200_s04 (KERN_ATTR_ESALT (krb5asrep_t)) } } -KERNEL_FQ void m18200_s08 (KERN_ATTR_ESALT (krb5asrep_t)) +KERNEL_FQ void HC_ATTR_SEQ m18200_s08 (KERN_ATTR_ESALT (krb5asrep_t)) { } -KERNEL_FQ void m18200_s16 (KERN_ATTR_ESALT (krb5asrep_t)) +KERNEL_FQ void HC_ATTR_SEQ m18200_s16 (KERN_ATTR_ESALT (krb5asrep_t)) { } diff --git a/OpenCL/m18200_a1-pure.cl b/OpenCL/m18200_a1-pure.cl index 987afb360..6ee9e7bd0 100644 --- a/OpenCL/m18200_a1-pure.cl +++ b/OpenCL/m18200_a1-pure.cl @@ -262,7 +262,7 @@ DECLSPEC void kerb_prepare (PRIVATE_AS const u32 *K, PRIVATE_AS const u32 *check K2[3] = ctx1.opad.h[3]; } -KERNEL_FQ void m18200_mxx (KERN_ATTR_ESALT (krb5asrep_t)) +KERNEL_FQ void HC_ATTR_SEQ m18200_mxx (KERN_ATTR_ESALT (krb5asrep_t)) { /** * modifier @@ -320,7 +320,7 @@ KERNEL_FQ void m18200_mxx (KERN_ATTR_ESALT (krb5asrep_t)) } } -KERNEL_FQ void m18200_sxx (KERN_ATTR_ESALT (krb5asrep_t)) +KERNEL_FQ void HC_ATTR_SEQ m18200_sxx (KERN_ATTR_ESALT (krb5asrep_t)) { /** * modifier diff --git a/OpenCL/m18200_a3-optimized.cl b/OpenCL/m18200_a3-optimized.cl index c2c2eee7b..c76034d70 100644 --- a/OpenCL/m18200_a3-optimized.cl +++ b/OpenCL/m18200_a3-optimized.cl @@ -506,7 +506,7 @@ DECLSPEC void m18200 (LOCAL_AS u32 *S, PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, P } } -KERNEL_FQ void m18200_m04 (KERN_ATTR_ESALT (krb5asrep_t)) +KERNEL_FQ void HC_ATTR_SEQ m18200_m04 (KERN_ATTR_ESALT (krb5asrep_t)) { /** * base @@ -557,7 +557,7 @@ KERNEL_FQ void m18200_m04 (KERN_ATTR_ESALT (krb5asrep_t)) m18200 (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m18200_m08 (KERN_ATTR_ESALT (krb5asrep_t)) +KERNEL_FQ void HC_ATTR_SEQ m18200_m08 (KERN_ATTR_ESALT (krb5asrep_t)) { /** * base @@ -608,11 +608,11 @@ KERNEL_FQ void m18200_m08 (KERN_ATTR_ESALT (krb5asrep_t)) m18200 (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m18200_m16 (KERN_ATTR_ESALT (krb5asrep_t)) +KERNEL_FQ void HC_ATTR_SEQ m18200_m16 (KERN_ATTR_ESALT (krb5asrep_t)) { } -KERNEL_FQ void m18200_s04 (KERN_ATTR_ESALT (krb5asrep_t)) +KERNEL_FQ void HC_ATTR_SEQ m18200_s04 (KERN_ATTR_ESALT (krb5asrep_t)) { /** * base @@ -663,7 +663,7 @@ KERNEL_FQ void m18200_s04 (KERN_ATTR_ESALT (krb5asrep_t)) m18200 (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m18200_s08 (KERN_ATTR_ESALT (krb5asrep_t)) +KERNEL_FQ void HC_ATTR_SEQ m18200_s08 (KERN_ATTR_ESALT (krb5asrep_t)) { /** * base @@ -714,6 +714,6 @@ KERNEL_FQ void m18200_s08 (KERN_ATTR_ESALT (krb5asrep_t)) m18200 (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m18200_s16 (KERN_ATTR_ESALT (krb5asrep_t)) +KERNEL_FQ void HC_ATTR_SEQ m18200_s16 (KERN_ATTR_ESALT (krb5asrep_t)) { } diff --git a/OpenCL/m18200_a3-pure.cl b/OpenCL/m18200_a3-pure.cl index b5015406b..4ab2fd0fc 100644 --- a/OpenCL/m18200_a3-pure.cl +++ b/OpenCL/m18200_a3-pure.cl @@ -262,7 +262,7 @@ DECLSPEC void kerb_prepare (PRIVATE_AS const u32 *K, PRIVATE_AS const u32 *check K2[3] = ctx1.opad.h[3]; } -KERNEL_FQ void m18200_mxx (KERN_ATTR_VECTOR_ESALT (krb5asrep_t)) +KERNEL_FQ void HC_ATTR_SEQ m18200_mxx (KERN_ATTR_VECTOR_ESALT (krb5asrep_t)) { /** * modifier @@ -333,7 +333,7 @@ KERNEL_FQ void m18200_mxx (KERN_ATTR_VECTOR_ESALT (krb5asrep_t)) } } -KERNEL_FQ void m18200_sxx (KERN_ATTR_VECTOR_ESALT (krb5asrep_t)) +KERNEL_FQ void HC_ATTR_SEQ m18200_sxx (KERN_ATTR_VECTOR_ESALT (krb5asrep_t)) { /** * modifier diff --git a/OpenCL/m18300-pure.cl b/OpenCL/m18300-pure.cl index d2ecaa88a..1103cf905 100644 --- a/OpenCL/m18300-pure.cl +++ b/OpenCL/m18300-pure.cl @@ -79,7 +79,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m18300_init (KERN_ATTR_TMPS_ESALT (apple_secure_notes_tmp_t, apple_secure_notes_t)) +KERNEL_FQ void HC_ATTR_SEQ m18300_init (KERN_ATTR_TMPS_ESALT (apple_secure_notes_tmp_t, apple_secure_notes_t)) { /** * base @@ -163,7 +163,7 @@ KERNEL_FQ void m18300_init (KERN_ATTR_TMPS_ESALT (apple_secure_notes_tmp_t, appl } } -KERNEL_FQ void m18300_loop (KERN_ATTR_TMPS_ESALT (apple_secure_notes_tmp_t, apple_secure_notes_t)) +KERNEL_FQ void HC_ATTR_SEQ m18300_loop (KERN_ATTR_TMPS_ESALT (apple_secure_notes_tmp_t, apple_secure_notes_t)) { const u64 gid = get_global_id (0); @@ -269,7 +269,7 @@ KERNEL_FQ void m18300_loop (KERN_ATTR_TMPS_ESALT (apple_secure_notes_tmp_t, appl } } -KERNEL_FQ void m18300_comp (KERN_ATTR_TMPS_ESALT (apple_secure_notes_tmp_t, apple_secure_notes_t)) +KERNEL_FQ void HC_ATTR_SEQ m18300_comp (KERN_ATTR_TMPS_ESALT (apple_secure_notes_tmp_t, apple_secure_notes_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m18400-pure.cl b/OpenCL/m18400-pure.cl index 36c1411f1..5fcd8dd7b 100644 --- a/OpenCL/m18400-pure.cl +++ b/OpenCL/m18400-pure.cl @@ -75,7 +75,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m18400_init (KERN_ATTR_TMPS_ESALT (odf12_tmp_t, odf12_t)) +KERNEL_FQ void HC_ATTR_SEQ m18400_init (KERN_ATTR_TMPS_ESALT (odf12_tmp_t, odf12_t)) { /** * base @@ -180,7 +180,7 @@ KERNEL_FQ void m18400_init (KERN_ATTR_TMPS_ESALT (odf12_tmp_t, odf12_t)) } } -KERNEL_FQ void m18400_loop (KERN_ATTR_TMPS_ESALT (odf12_tmp_t, odf12_t)) +KERNEL_FQ void HC_ATTR_SEQ m18400_loop (KERN_ATTR_TMPS_ESALT (odf12_tmp_t, odf12_t)) { const u64 gid = get_global_id (0); @@ -266,7 +266,7 @@ KERNEL_FQ void m18400_loop (KERN_ATTR_TMPS_ESALT (odf12_tmp_t, odf12_t)) } } -KERNEL_FQ void m18400_comp (KERN_ATTR_TMPS_ESALT (odf12_tmp_t, odf12_t)) +KERNEL_FQ void HC_ATTR_SEQ m18400_comp (KERN_ATTR_TMPS_ESALT (odf12_tmp_t, odf12_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m18500_a0-pure.cl b/OpenCL/m18500_a0-pure.cl index dd952ba2e..d3f412ce5 100644 --- a/OpenCL/m18500_a0-pure.cl +++ b/OpenCL/m18500_a0-pure.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m18500_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m18500_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -145,7 +145,7 @@ KERNEL_FQ void m18500_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m18500_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m18500_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m18500_a1-pure.cl b/OpenCL/m18500_a1-pure.cl index a0093926a..4d29a3e21 100644 --- a/OpenCL/m18500_a1-pure.cl +++ b/OpenCL/m18500_a1-pure.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m18500_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m18500_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -144,7 +144,7 @@ KERNEL_FQ void m18500_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m18500_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m18500_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m18500_a3-pure.cl b/OpenCL/m18500_a3-pure.cl index 9191affa6..88a7ffabf 100644 --- a/OpenCL/m18500_a3-pure.cl +++ b/OpenCL/m18500_a3-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m18500_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m18500_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -154,7 +154,7 @@ KERNEL_FQ void m18500_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m18500_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m18500_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m18600-pure.cl b/OpenCL/m18600-pure.cl index 1e00f6628..6d380ac66 100644 --- a/OpenCL/m18600-pure.cl +++ b/OpenCL/m18600-pure.cl @@ -452,7 +452,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m18600_init (KERN_ATTR_TMPS_ESALT (odf11_tmp_t, odf11_t)) +KERNEL_FQ void HC_ATTR_SEQ m18600_init (KERN_ATTR_TMPS_ESALT (odf11_tmp_t, odf11_t)) { /** * base @@ -554,7 +554,7 @@ KERNEL_FQ void m18600_init (KERN_ATTR_TMPS_ESALT (odf11_tmp_t, odf11_t)) tmps[gid].out[4] = tmps[gid].dgst[4]; } -KERNEL_FQ void m18600_loop (KERN_ATTR_TMPS_ESALT (odf11_tmp_t, odf11_t)) +KERNEL_FQ void HC_ATTR_SEQ m18600_loop (KERN_ATTR_TMPS_ESALT (odf11_tmp_t, odf11_t)) { const u64 gid = get_global_id (0); @@ -636,7 +636,7 @@ KERNEL_FQ void m18600_loop (KERN_ATTR_TMPS_ESALT (odf11_tmp_t, odf11_t)) } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE_COMP) m18600_comp (KERN_ATTR_TMPS_ESALT (odf11_tmp_t, odf11_t)) +KERNEL_FQ void HC_ATTR_SEQ FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE_COMP) m18600_comp (KERN_ATTR_TMPS_ESALT (odf11_tmp_t, odf11_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m18700_a0-optimized.cl b/OpenCL/m18700_a0-optimized.cl index 0daed2a10..a86b3323d 100644 --- a/OpenCL/m18700_a0-optimized.cl +++ b/OpenCL/m18700_a0-optimized.cl @@ -53,7 +53,7 @@ DECLSPEC u32 hashCode (const u32 init, PRIVATE_AS const u32 *w, const u32 pw_len return hash; } -KERNEL_FQ void m18700_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m18700_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -104,15 +104,15 @@ KERNEL_FQ void m18700_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m18700_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m18700_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m18700_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m18700_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m18700_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m18700_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -175,10 +175,10 @@ KERNEL_FQ void m18700_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m18700_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m18700_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m18700_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m18700_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m18700_a0-pure.cl b/OpenCL/m18700_a0-pure.cl index c1841f3c0..e7b9eb1a5 100644 --- a/OpenCL/m18700_a0-pure.cl +++ b/OpenCL/m18700_a0-pure.cl @@ -54,7 +54,7 @@ DECLSPEC u32 hashCode (const u32 init, PRIVATE_AS const u32 *w, const u32 pw_len return hash; } -KERNEL_FQ void m18700_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m18700_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -92,7 +92,7 @@ KERNEL_FQ void m18700_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m18700_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m18700_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m18700_a1-optimized.cl b/OpenCL/m18700_a1-optimized.cl index 873a601cf..116e02b5c 100644 --- a/OpenCL/m18700_a1-optimized.cl +++ b/OpenCL/m18700_a1-optimized.cl @@ -53,7 +53,7 @@ DECLSPEC u32 hashCode_g (const u32 init, GLOBAL_AS const u32 *w, const u32 pw_le return hash; } -KERNEL_FQ void m18700_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m18700_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -97,15 +97,15 @@ KERNEL_FQ void m18700_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m18700_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m18700_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m18700_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m18700_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m18700_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m18700_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -161,10 +161,10 @@ KERNEL_FQ void m18700_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m18700_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m18700_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m18700_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m18700_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m18700_a1-pure.cl b/OpenCL/m18700_a1-pure.cl index e8f8f9988..8a57a2a5c 100644 --- a/OpenCL/m18700_a1-pure.cl +++ b/OpenCL/m18700_a1-pure.cl @@ -52,7 +52,7 @@ DECLSPEC u32 hashCode_g (const u32 init, GLOBAL_AS const u32 *w, const u32 pw_le return hash; } -KERNEL_FQ void m18700_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m18700_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -91,7 +91,7 @@ KERNEL_FQ void m18700_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m18700_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m18700_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m18700_a3-optimized.cl b/OpenCL/m18700_a3-optimized.cl index e3aa57ecf..40168e7c6 100644 --- a/OpenCL/m18700_a3-optimized.cl +++ b/OpenCL/m18700_a3-optimized.cl @@ -140,7 +140,7 @@ DECLSPEC void m18700s (PRIVATE_AS const u32 *w, const u32 pw_len, KERN_ATTR_FUNC } } -KERNEL_FQ void m18700_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m18700_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -180,7 +180,7 @@ KERNEL_FQ void m18700_m04 (KERN_ATTR_VECTOR ()) m18700m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m18700_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m18700_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -220,7 +220,7 @@ KERNEL_FQ void m18700_m08 (KERN_ATTR_VECTOR ()) m18700m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m18700_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m18700_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -260,7 +260,7 @@ KERNEL_FQ void m18700_m16 (KERN_ATTR_VECTOR ()) m18700m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m18700_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m18700_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -300,7 +300,7 @@ KERNEL_FQ void m18700_s04 (KERN_ATTR_VECTOR ()) m18700s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m18700_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m18700_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -340,7 +340,7 @@ KERNEL_FQ void m18700_s08 (KERN_ATTR_VECTOR ()) m18700s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m18700_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m18700_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m18700_a3-pure.cl b/OpenCL/m18700_a3-pure.cl index cb1407e94..c7b18eced 100644 --- a/OpenCL/m18700_a3-pure.cl +++ b/OpenCL/m18700_a3-pure.cl @@ -70,7 +70,7 @@ DECLSPEC u32x hashCode_w0 (const u32x init, const u32x w0, PRIVATE_AS const u32 return hash; } -KERNEL_FQ void m18700_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m18700_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -117,7 +117,7 @@ KERNEL_FQ void m18700_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m18700_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m18700_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m18800-pure.cl b/OpenCL/m18800-pure.cl index 93ebf5aca..ea2213464 100644 --- a/OpenCL/m18800-pure.cl +++ b/OpenCL/m18800-pure.cl @@ -23,7 +23,7 @@ typedef struct bsp_tmp } bsp_tmp_t; -KERNEL_FQ void m18800_init (KERN_ATTR_TMPS (bsp_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m18800_init (KERN_ATTR_TMPS (bsp_tmp_t)) { /** * base @@ -53,7 +53,7 @@ KERNEL_FQ void m18800_init (KERN_ATTR_TMPS (bsp_tmp_t)) tmps[gid].hash[7] = ctx.h[7]; } -KERNEL_FQ void m18800_loop (KERN_ATTR_TMPS (bsp_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m18800_loop (KERN_ATTR_TMPS (bsp_tmp_t)) { const u64 gid = get_global_id (0); @@ -116,7 +116,7 @@ KERNEL_FQ void m18800_loop (KERN_ATTR_TMPS (bsp_tmp_t)) unpackv (tmps, hash, gid, 7, digest[7]); } -KERNEL_FQ void m18800_comp (KERN_ATTR_TMPS (bsp_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m18800_comp (KERN_ATTR_TMPS (bsp_tmp_t)) { /** * modifier diff --git a/OpenCL/m18900-pure.cl b/OpenCL/m18900-pure.cl index 707ba438c..f858b91bb 100644 --- a/OpenCL/m18900-pure.cl +++ b/OpenCL/m18900-pure.cl @@ -76,7 +76,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m18900_init (KERN_ATTR_TMPS_ESALT (android_backup_tmp_t, android_backup_t)) +KERNEL_FQ void HC_ATTR_SEQ m18900_init (KERN_ATTR_TMPS_ESALT (android_backup_tmp_t, android_backup_t)) { /** * base @@ -148,7 +148,7 @@ KERNEL_FQ void m18900_init (KERN_ATTR_TMPS_ESALT (android_backup_tmp_t, android_ } } -KERNEL_FQ void m18900_loop (KERN_ATTR_TMPS_ESALT (android_backup_tmp_t, android_backup_t)) +KERNEL_FQ void HC_ATTR_SEQ m18900_loop (KERN_ATTR_TMPS_ESALT (android_backup_tmp_t, android_backup_t)) { const u64 gid = get_global_id (0); @@ -233,7 +233,7 @@ KERNEL_FQ void m18900_loop (KERN_ATTR_TMPS_ESALT (android_backup_tmp_t, android_ } } -KERNEL_FQ void m18900_comp (KERN_ATTR_TMPS_ESALT (android_backup_tmp_t, android_backup_t)) +KERNEL_FQ void HC_ATTR_SEQ m18900_comp (KERN_ATTR_TMPS_ESALT (android_backup_tmp_t, android_backup_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m19000-pure.cl b/OpenCL/m19000-pure.cl index 42ee3dd54..e63a31b3c 100644 --- a/OpenCL/m19000-pure.cl +++ b/OpenCL/m19000-pure.cl @@ -23,7 +23,7 @@ typedef struct qnx_md5_tmp } qnx_md5_tmp_t; -KERNEL_FQ void m19000_init (KERN_ATTR_TMPS (qnx_md5_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m19000_init (KERN_ATTR_TMPS (qnx_md5_tmp_t)) { /** * base @@ -48,7 +48,7 @@ KERNEL_FQ void m19000_init (KERN_ATTR_TMPS (qnx_md5_tmp_t)) tmps[gid].md5_ctx = md5_ctx; } -KERNEL_FQ void m19000_loop (KERN_ATTR_TMPS (qnx_md5_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m19000_loop (KERN_ATTR_TMPS (qnx_md5_tmp_t)) { /** * base @@ -68,7 +68,7 @@ KERNEL_FQ void m19000_loop (KERN_ATTR_TMPS (qnx_md5_tmp_t)) tmps[gid].md5_ctx = md5_ctx; } -KERNEL_FQ void m19000_comp (KERN_ATTR_TMPS (qnx_md5_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m19000_comp (KERN_ATTR_TMPS (qnx_md5_tmp_t)) { /** * modifier diff --git a/OpenCL/m19100-pure.cl b/OpenCL/m19100-pure.cl index 64b402b6e..c4f4419f3 100644 --- a/OpenCL/m19100-pure.cl +++ b/OpenCL/m19100-pure.cl @@ -23,7 +23,7 @@ typedef struct qnx_sha256_tmp } qnx_sha256_tmp_t; -KERNEL_FQ void m19100_init (KERN_ATTR_TMPS (qnx_sha256_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m19100_init (KERN_ATTR_TMPS (qnx_sha256_tmp_t)) { /** * base @@ -48,7 +48,7 @@ KERNEL_FQ void m19100_init (KERN_ATTR_TMPS (qnx_sha256_tmp_t)) tmps[gid].sha256_ctx = sha256_ctx; } -KERNEL_FQ void m19100_loop (KERN_ATTR_TMPS (qnx_sha256_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m19100_loop (KERN_ATTR_TMPS (qnx_sha256_tmp_t)) { /** * base @@ -68,7 +68,7 @@ KERNEL_FQ void m19100_loop (KERN_ATTR_TMPS (qnx_sha256_tmp_t)) tmps[gid].sha256_ctx = sha256_ctx; } -KERNEL_FQ void m19100_comp (KERN_ATTR_TMPS (qnx_sha256_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m19100_comp (KERN_ATTR_TMPS (qnx_sha256_tmp_t)) { /** * modifier diff --git a/OpenCL/m19200-pure.cl b/OpenCL/m19200-pure.cl index 4d62da229..86e3980a1 100644 --- a/OpenCL/m19200-pure.cl +++ b/OpenCL/m19200-pure.cl @@ -364,7 +364,7 @@ DECLSPEC void sha512_final_qnxbug (PRIVATE_AS sha512_ctx_t *ctx, u32 sav) sha512_transform (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->w4, ctx->w5, ctx->w6, ctx->w7, ctx->h); } -KERNEL_FQ void m19200_init (KERN_ATTR_TMPS (qnx_sha512_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m19200_init (KERN_ATTR_TMPS (qnx_sha512_tmp_t)) { /** * base @@ -390,7 +390,7 @@ KERNEL_FQ void m19200_init (KERN_ATTR_TMPS (qnx_sha512_tmp_t)) tmps[gid].sav = 0; } -KERNEL_FQ void m19200_loop (KERN_ATTR_TMPS (qnx_sha512_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m19200_loop (KERN_ATTR_TMPS (qnx_sha512_tmp_t)) { /** * base @@ -412,7 +412,7 @@ KERNEL_FQ void m19200_loop (KERN_ATTR_TMPS (qnx_sha512_tmp_t)) tmps[gid].sav = sav; } -KERNEL_FQ void m19200_comp (KERN_ATTR_TMPS (qnx_sha512_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m19200_comp (KERN_ATTR_TMPS (qnx_sha512_tmp_t)) { /** * modifier diff --git a/OpenCL/m19300_a0-pure.cl b/OpenCL/m19300_a0-pure.cl index a08b85c9e..55a91964b 100644 --- a/OpenCL/m19300_a0-pure.cl +++ b/OpenCL/m19300_a0-pure.cl @@ -26,7 +26,7 @@ typedef struct sha1_double_salt } sha1_double_salt_t; -KERNEL_FQ void m19300_mxx (KERN_ATTR_RULES_ESALT (sha1_double_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m19300_mxx (KERN_ATTR_RULES_ESALT (sha1_double_salt_t)) { /** * modifier @@ -85,7 +85,7 @@ KERNEL_FQ void m19300_mxx (KERN_ATTR_RULES_ESALT (sha1_double_salt_t)) } } -KERNEL_FQ void m19300_sxx (KERN_ATTR_RULES_ESALT (sha1_double_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m19300_sxx (KERN_ATTR_RULES_ESALT (sha1_double_salt_t)) { /** * modifier diff --git a/OpenCL/m19300_a1-pure.cl b/OpenCL/m19300_a1-pure.cl index 236844816..9ff4b53ed 100644 --- a/OpenCL/m19300_a1-pure.cl +++ b/OpenCL/m19300_a1-pure.cl @@ -24,7 +24,7 @@ typedef struct sha1_double_salt } sha1_double_salt_t; -KERNEL_FQ void m19300_mxx (KERN_ATTR_ESALT (sha1_double_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m19300_mxx (KERN_ATTR_ESALT (sha1_double_salt_t)) { /** * modifier @@ -79,7 +79,7 @@ KERNEL_FQ void m19300_mxx (KERN_ATTR_ESALT (sha1_double_salt_t)) } } -KERNEL_FQ void m19300_sxx (KERN_ATTR_ESALT (sha1_double_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m19300_sxx (KERN_ATTR_ESALT (sha1_double_salt_t)) { /** * modifier diff --git a/OpenCL/m19300_a3-pure.cl b/OpenCL/m19300_a3-pure.cl index 2ad916d35..95387e258 100644 --- a/OpenCL/m19300_a3-pure.cl +++ b/OpenCL/m19300_a3-pure.cl @@ -24,7 +24,7 @@ typedef struct sha1_double_salt } sha1_double_salt_t; -KERNEL_FQ void m19300_mxx (KERN_ATTR_VECTOR_ESALT (sha1_double_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m19300_mxx (KERN_ATTR_VECTOR_ESALT (sha1_double_salt_t)) { /** * modifier @@ -96,7 +96,7 @@ KERNEL_FQ void m19300_mxx (KERN_ATTR_VECTOR_ESALT (sha1_double_salt_t)) } } -KERNEL_FQ void m19300_sxx (KERN_ATTR_VECTOR_ESALT (sha1_double_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m19300_sxx (KERN_ATTR_VECTOR_ESALT (sha1_double_salt_t)) { /** * modifier diff --git a/OpenCL/m19500_a0-pure.cl b/OpenCL/m19500_a0-pure.cl index 01c8b2279..e3b2acf56 100644 --- a/OpenCL/m19500_a0-pure.cl +++ b/OpenCL/m19500_a0-pure.cl @@ -38,7 +38,7 @@ typedef struct devise_hash #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m19500_mxx (KERN_ATTR_RULES_ESALT (devise_hash_t)) +KERNEL_FQ void HC_ATTR_SEQ m19500_mxx (KERN_ATTR_RULES_ESALT (devise_hash_t)) { /** * modifier @@ -173,7 +173,7 @@ KERNEL_FQ void m19500_mxx (KERN_ATTR_RULES_ESALT (devise_hash_t)) } } -KERNEL_FQ void m19500_sxx (KERN_ATTR_RULES_ESALT (devise_hash_t)) +KERNEL_FQ void HC_ATTR_SEQ m19500_sxx (KERN_ATTR_RULES_ESALT (devise_hash_t)) { /** * modifier diff --git a/OpenCL/m19500_a1-pure.cl b/OpenCL/m19500_a1-pure.cl index 5b5afaadd..57de72a51 100644 --- a/OpenCL/m19500_a1-pure.cl +++ b/OpenCL/m19500_a1-pure.cl @@ -36,7 +36,7 @@ typedef struct devise_hash #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m19500_mxx (KERN_ATTR_ESALT (devise_hash_t)) +KERNEL_FQ void HC_ATTR_SEQ m19500_mxx (KERN_ATTR_ESALT (devise_hash_t)) { /** * modifier @@ -167,7 +167,7 @@ KERNEL_FQ void m19500_mxx (KERN_ATTR_ESALT (devise_hash_t)) } } -KERNEL_FQ void m19500_sxx (KERN_ATTR_ESALT (devise_hash_t)) +KERNEL_FQ void HC_ATTR_SEQ m19500_sxx (KERN_ATTR_ESALT (devise_hash_t)) { /** * modifier diff --git a/OpenCL/m19500_a3-pure.cl b/OpenCL/m19500_a3-pure.cl index 1efdb7af2..eaa6db9f5 100644 --- a/OpenCL/m19500_a3-pure.cl +++ b/OpenCL/m19500_a3-pure.cl @@ -36,7 +36,7 @@ typedef struct devise_hash #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m19500_mxx (KERN_ATTR_VECTOR_ESALT (devise_hash_t)) +KERNEL_FQ void HC_ATTR_SEQ m19500_mxx (KERN_ATTR_VECTOR_ESALT (devise_hash_t)) { /** * modifier @@ -182,7 +182,7 @@ KERNEL_FQ void m19500_mxx (KERN_ATTR_VECTOR_ESALT (devise_hash_t)) } } -KERNEL_FQ void m19500_sxx (KERN_ATTR_VECTOR_ESALT (devise_hash_t)) +KERNEL_FQ void HC_ATTR_SEQ m19500_sxx (KERN_ATTR_VECTOR_ESALT (devise_hash_t)) { /** * modifier diff --git a/OpenCL/m19600-pure.cl b/OpenCL/m19600-pure.cl index 916b79a84..59c3cb6fe 100644 --- a/OpenCL/m19600-pure.cl +++ b/OpenCL/m19600-pure.cl @@ -115,7 +115,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m19600_init (KERN_ATTR_TMPS_ESALT (krb5tgs_17_tmp_t, krb5tgs_17_t)) +KERNEL_FQ void HC_ATTR_SEQ m19600_init (KERN_ATTR_TMPS_ESALT (krb5tgs_17_tmp_t, krb5tgs_17_t)) { /** * base @@ -193,7 +193,7 @@ KERNEL_FQ void m19600_init (KERN_ATTR_TMPS_ESALT (krb5tgs_17_tmp_t, krb5tgs_17_t } } -KERNEL_FQ void m19600_loop (KERN_ATTR_TMPS_ESALT (krb5tgs_17_tmp_t, krb5tgs_17_t)) +KERNEL_FQ void HC_ATTR_SEQ m19600_loop (KERN_ATTR_TMPS_ESALT (krb5tgs_17_tmp_t, krb5tgs_17_t)) { /** * base @@ -281,7 +281,7 @@ KERNEL_FQ void m19600_loop (KERN_ATTR_TMPS_ESALT (krb5tgs_17_tmp_t, krb5tgs_17_t } } -KERNEL_FQ void m19600_comp (KERN_ATTR_TMPS_ESALT (krb5tgs_17_tmp_t, krb5tgs_17_t)) +KERNEL_FQ void HC_ATTR_SEQ m19600_comp (KERN_ATTR_TMPS_ESALT (krb5tgs_17_tmp_t, krb5tgs_17_t)) { /** * base diff --git a/OpenCL/m19700-pure.cl b/OpenCL/m19700-pure.cl index c3346bdc5..63d9e59e7 100644 --- a/OpenCL/m19700-pure.cl +++ b/OpenCL/m19700-pure.cl @@ -115,7 +115,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m19700_init (KERN_ATTR_TMPS_ESALT (krb5tgs_18_tmp_t, krb5tgs_18_t)) +KERNEL_FQ void HC_ATTR_SEQ m19700_init (KERN_ATTR_TMPS_ESALT (krb5tgs_18_tmp_t, krb5tgs_18_t)) { /** * base @@ -193,7 +193,7 @@ KERNEL_FQ void m19700_init (KERN_ATTR_TMPS_ESALT (krb5tgs_18_tmp_t, krb5tgs_18_t } } -KERNEL_FQ void m19700_loop (KERN_ATTR_TMPS_ESALT (krb5tgs_18_tmp_t, krb5tgs_18_t)) +KERNEL_FQ void HC_ATTR_SEQ m19700_loop (KERN_ATTR_TMPS_ESALT (krb5tgs_18_tmp_t, krb5tgs_18_t)) { /** * base @@ -281,7 +281,7 @@ KERNEL_FQ void m19700_loop (KERN_ATTR_TMPS_ESALT (krb5tgs_18_tmp_t, krb5tgs_18_t } } -KERNEL_FQ void m19700_comp (KERN_ATTR_TMPS_ESALT (krb5tgs_18_tmp_t, krb5tgs_18_t)) +KERNEL_FQ void HC_ATTR_SEQ m19700_comp (KERN_ATTR_TMPS_ESALT (krb5tgs_18_tmp_t, krb5tgs_18_t)) { /** * base diff --git a/OpenCL/m19800-pure.cl b/OpenCL/m19800-pure.cl index 91ec5592c..1bba8d07a 100644 --- a/OpenCL/m19800-pure.cl +++ b/OpenCL/m19800-pure.cl @@ -115,7 +115,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m19800_init (KERN_ATTR_TMPS_ESALT (krb5pa_17_tmp_t, krb5pa_17_t)) +KERNEL_FQ void HC_ATTR_SEQ m19800_init (KERN_ATTR_TMPS_ESALT (krb5pa_17_tmp_t, krb5pa_17_t)) { /** * base @@ -193,7 +193,7 @@ KERNEL_FQ void m19800_init (KERN_ATTR_TMPS_ESALT (krb5pa_17_tmp_t, krb5pa_17_t)) } } -KERNEL_FQ void m19800_loop (KERN_ATTR_TMPS_ESALT (krb5pa_17_tmp_t, krb5pa_17_t)) +KERNEL_FQ void HC_ATTR_SEQ m19800_loop (KERN_ATTR_TMPS_ESALT (krb5pa_17_tmp_t, krb5pa_17_t)) { /** * base @@ -281,7 +281,7 @@ KERNEL_FQ void m19800_loop (KERN_ATTR_TMPS_ESALT (krb5pa_17_tmp_t, krb5pa_17_t)) } } -KERNEL_FQ void m19800_comp (KERN_ATTR_TMPS_ESALT (krb5pa_17_tmp_t, krb5pa_17_t)) +KERNEL_FQ void HC_ATTR_SEQ m19800_comp (KERN_ATTR_TMPS_ESALT (krb5pa_17_tmp_t, krb5pa_17_t)) { /** * base diff --git a/OpenCL/m19900-pure.cl b/OpenCL/m19900-pure.cl index 05579ee15..cf7710fc3 100644 --- a/OpenCL/m19900-pure.cl +++ b/OpenCL/m19900-pure.cl @@ -115,7 +115,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m19900_init (KERN_ATTR_TMPS_ESALT (krb5pa_18_tmp_t, krb5pa_18_t)) +KERNEL_FQ void HC_ATTR_SEQ m19900_init (KERN_ATTR_TMPS_ESALT (krb5pa_18_tmp_t, krb5pa_18_t)) { /** * base @@ -193,7 +193,7 @@ KERNEL_FQ void m19900_init (KERN_ATTR_TMPS_ESALT (krb5pa_18_tmp_t, krb5pa_18_t)) } } -KERNEL_FQ void m19900_loop (KERN_ATTR_TMPS_ESALT (krb5pa_18_tmp_t, krb5pa_18_t)) +KERNEL_FQ void HC_ATTR_SEQ m19900_loop (KERN_ATTR_TMPS_ESALT (krb5pa_18_tmp_t, krb5pa_18_t)) { /** * base @@ -282,7 +282,7 @@ KERNEL_FQ void m19900_loop (KERN_ATTR_TMPS_ESALT (krb5pa_18_tmp_t, krb5pa_18_t)) } } -KERNEL_FQ void m19900_comp (KERN_ATTR_TMPS_ESALT (krb5pa_18_tmp_t, krb5pa_18_t)) +KERNEL_FQ void HC_ATTR_SEQ m19900_comp (KERN_ATTR_TMPS_ESALT (krb5pa_18_tmp_t, krb5pa_18_t)) { /** * base diff --git a/OpenCL/m20011-pure.cl b/OpenCL/m20011-pure.cl index dc40f80c3..204a0f1b9 100644 --- a/OpenCL/m20011-pure.cl +++ b/OpenCL/m20011-pure.cl @@ -92,7 +92,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void m20011_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) +KERNEL_FQ void HC_ATTR_SEQ m20011_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) { /** * base @@ -196,7 +196,7 @@ KERNEL_FQ void m20011_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcrypt } } -KERNEL_FQ void m20011_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) +KERNEL_FQ void HC_ATTR_SEQ m20011_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) { const u64 gid = get_global_id (0); @@ -322,7 +322,7 @@ KERNEL_FQ void m20011_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcrypt } } -KERNEL_FQ void m20011_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) +KERNEL_FQ void HC_ATTR_SEQ m20011_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m20012-pure.cl b/OpenCL/m20012-pure.cl index 8966e60ca..40705faed 100644 --- a/OpenCL/m20012-pure.cl +++ b/OpenCL/m20012-pure.cl @@ -92,7 +92,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void m20012_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) +KERNEL_FQ void HC_ATTR_SEQ m20012_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) { /** * base @@ -196,7 +196,7 @@ KERNEL_FQ void m20012_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcrypt } } -KERNEL_FQ void m20012_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) +KERNEL_FQ void HC_ATTR_SEQ m20012_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) { const u64 gid = get_global_id (0); @@ -322,7 +322,7 @@ KERNEL_FQ void m20012_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcrypt } } -KERNEL_FQ void m20012_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) +KERNEL_FQ void HC_ATTR_SEQ m20012_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m20013-pure.cl b/OpenCL/m20013-pure.cl index a26269980..5160c8d7b 100644 --- a/OpenCL/m20013-pure.cl +++ b/OpenCL/m20013-pure.cl @@ -92,7 +92,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void m20013_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) +KERNEL_FQ void HC_ATTR_SEQ m20013_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) { /** * base @@ -196,7 +196,7 @@ KERNEL_FQ void m20013_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcrypt } } -KERNEL_FQ void m20013_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) +KERNEL_FQ void HC_ATTR_SEQ m20013_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) { const u64 gid = get_global_id (0); @@ -322,7 +322,7 @@ KERNEL_FQ void m20013_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcrypt } } -KERNEL_FQ void m20013_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) +KERNEL_FQ void HC_ATTR_SEQ m20013_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m20500_a0-pure.cl b/OpenCL/m20500_a0-pure.cl index 7ab1ca4fa..02eaf15a5 100644 --- a/OpenCL/m20500_a0-pure.cl +++ b/OpenCL/m20500_a0-pure.cl @@ -151,7 +151,7 @@ CONSTANT_VK u32a crc32tab[256] = 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d }; -KERNEL_FQ void m20500_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20500_sxx (KERN_ATTR_RULES ()) { /** * modifier @@ -225,7 +225,7 @@ KERNEL_FQ void m20500_sxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m20500_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20500_mxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m20500_a1-pure.cl b/OpenCL/m20500_a1-pure.cl index 541b3cc6b..cef2fd117 100644 --- a/OpenCL/m20500_a1-pure.cl +++ b/OpenCL/m20500_a1-pure.cl @@ -149,7 +149,7 @@ CONSTANT_VK u32a crc32tab[256] = 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d }; -KERNEL_FQ void m20500_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20500_sxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -225,7 +225,7 @@ KERNEL_FQ void m20500_sxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m20500_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20500_mxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m20500_a3-pure.cl b/OpenCL/m20500_a3-pure.cl index e7a9f137c..6a72fd14a 100644 --- a/OpenCL/m20500_a3-pure.cl +++ b/OpenCL/m20500_a3-pure.cl @@ -245,7 +245,7 @@ CONSTANT_VK u32a crc32tab[256] = 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d }; -KERNEL_FQ void m20500_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m20500_sxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -359,7 +359,7 @@ KERNEL_FQ void m20500_sxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m20500_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m20500_mxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m20510_a0-pure.cl b/OpenCL/m20510_a0-pure.cl index 59f088764..a38bcdf2e 100644 --- a/OpenCL/m20510_a0-pure.cl +++ b/OpenCL/m20510_a0-pure.cl @@ -465,7 +465,7 @@ DECLSPEC int derivelast6bytes (const u32x k0, const u32x k1, const u32x k2, PRIV return 0; } -KERNEL_FQ void m20510_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20510_sxx (KERN_ATTR_RULES ()) { /** * modifier @@ -581,7 +581,7 @@ KERNEL_FQ void m20510_sxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m20510_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20510_mxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m20510_a1-pure.cl b/OpenCL/m20510_a1-pure.cl index d0dc121fe..b537ab389 100644 --- a/OpenCL/m20510_a1-pure.cl +++ b/OpenCL/m20510_a1-pure.cl @@ -463,7 +463,7 @@ DECLSPEC int derivelast6bytes (const u32x k0, const u32x k1, const u32x k2, PRIV return 0; } -KERNEL_FQ void m20510_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20510_sxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -585,7 +585,7 @@ KERNEL_FQ void m20510_sxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m20510_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20510_mxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m20510_a3-pure.cl b/OpenCL/m20510_a3-pure.cl index e2c6fc406..20712a88d 100644 --- a/OpenCL/m20510_a3-pure.cl +++ b/OpenCL/m20510_a3-pure.cl @@ -463,7 +463,7 @@ DECLSPEC int derivelast6bytes (const u32x k0, const u32x k1, const u32x k2, PRIV return 0; } -KERNEL_FQ void m20510_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m20510_sxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -604,7 +604,7 @@ KERNEL_FQ void m20510_sxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m20510_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m20510_mxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m20600-pure.cl b/OpenCL/m20600-pure.cl index 1373bb96c..c3e61e48b 100644 --- a/OpenCL/m20600-pure.cl +++ b/OpenCL/m20600-pure.cl @@ -25,7 +25,7 @@ typedef struct omt_sha256_tmp } omt_sha256_tmp_t; -KERNEL_FQ void m20600_init (KERN_ATTR_TMPS (omt_sha256_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m20600_init (KERN_ATTR_TMPS (omt_sha256_tmp_t)) { /** * base @@ -59,7 +59,7 @@ KERNEL_FQ void m20600_init (KERN_ATTR_TMPS (omt_sha256_tmp_t)) tmps[gid].digest_buf[7] = sha256_ctx.h[7]; } -KERNEL_FQ void m20600_loop (KERN_ATTR_TMPS (omt_sha256_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m20600_loop (KERN_ATTR_TMPS (omt_sha256_tmp_t)) { /** * base @@ -135,7 +135,7 @@ KERNEL_FQ void m20600_loop (KERN_ATTR_TMPS (omt_sha256_tmp_t)) unpackv (tmps, digest_buf, gid, 7, digest[7]); } -KERNEL_FQ void m20600_comp (KERN_ATTR_TMPS (omt_sha256_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m20600_comp (KERN_ATTR_TMPS (omt_sha256_tmp_t)) { /** * modifier diff --git a/OpenCL/m20710_a0-optimized.cl b/OpenCL/m20710_a0-optimized.cl index f5385d316..7aff75125 100644 --- a/OpenCL/m20710_a0-optimized.cl +++ b/OpenCL/m20710_a0-optimized.cl @@ -42,7 +42,7 @@ h = 0; \ } -KERNEL_FQ void m20710_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20710_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -620,15 +620,15 @@ KERNEL_FQ void m20710_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m20710_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20710_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m20710_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20710_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m20710_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20710_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -1224,10 +1224,10 @@ KERNEL_FQ void m20710_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m20710_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20710_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m20710_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20710_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m20710_a0-pure.cl b/OpenCL/m20710_a0-pure.cl index 47ef8c683..e69bb3147 100644 --- a/OpenCL/m20710_a0-pure.cl +++ b/OpenCL/m20710_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m20710_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20710_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -140,7 +140,7 @@ KERNEL_FQ void m20710_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m20710_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20710_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m20710_a1-optimized.cl b/OpenCL/m20710_a1-optimized.cl index 044720593..87f653ae6 100644 --- a/OpenCL/m20710_a1-optimized.cl +++ b/OpenCL/m20710_a1-optimized.cl @@ -40,7 +40,7 @@ h = 0; \ } -KERNEL_FQ void m20710_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20710_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -676,15 +676,15 @@ KERNEL_FQ void m20710_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m20710_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20710_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m20710_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20710_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m20710_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20710_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -1338,10 +1338,10 @@ KERNEL_FQ void m20710_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m20710_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20710_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m20710_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20710_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m20710_a1-pure.cl b/OpenCL/m20710_a1-pure.cl index f2a6ac7d8..5b192c33c 100644 --- a/OpenCL/m20710_a1-pure.cl +++ b/OpenCL/m20710_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m20710_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20710_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -136,7 +136,7 @@ KERNEL_FQ void m20710_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m20710_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20710_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m20710_a3-optimized.cl b/OpenCL/m20710_a3-optimized.cl index ab959ef93..5e80a137a 100644 --- a/OpenCL/m20710_a3-optimized.cl +++ b/OpenCL/m20710_a3-optimized.cl @@ -1123,7 +1123,7 @@ DECLSPEC void m20710s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m20710_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m20710_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -1184,7 +1184,7 @@ KERNEL_FQ void m20710_m04 (KERN_ATTR_VECTOR ()) m20710m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m20710_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m20710_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -1245,7 +1245,7 @@ KERNEL_FQ void m20710_m08 (KERN_ATTR_VECTOR ()) m20710m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m20710_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m20710_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -1306,7 +1306,7 @@ KERNEL_FQ void m20710_m16 (KERN_ATTR_VECTOR ()) m20710m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m20710_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m20710_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -1367,7 +1367,7 @@ KERNEL_FQ void m20710_s04 (KERN_ATTR_VECTOR ()) m20710s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m20710_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m20710_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -1428,7 +1428,7 @@ KERNEL_FQ void m20710_s08 (KERN_ATTR_VECTOR ()) m20710s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m20710_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m20710_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m20710_a3-pure.cl b/OpenCL/m20710_a3-pure.cl index e17cb76e9..976a5ccc6 100644 --- a/OpenCL/m20710_a3-pure.cl +++ b/OpenCL/m20710_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m20710_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m20710_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -149,7 +149,7 @@ KERNEL_FQ void m20710_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m20710_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m20710_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m20712_a0-optimized.cl b/OpenCL/m20712_a0-optimized.cl index 48f5e9463..8ac940598 100644 --- a/OpenCL/m20712_a0-optimized.cl +++ b/OpenCL/m20712_a0-optimized.cl @@ -42,7 +42,7 @@ h = 0; \ } -KERNEL_FQ void m20712_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20712_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -620,15 +620,15 @@ KERNEL_FQ void m20712_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m20712_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20712_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m20712_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20712_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m20712_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20712_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -1224,10 +1224,10 @@ KERNEL_FQ void m20712_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m20712_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20712_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m20712_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20712_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m20712_a0-pure.cl b/OpenCL/m20712_a0-pure.cl index 4ec9014e3..7db08ce71 100644 --- a/OpenCL/m20712_a0-pure.cl +++ b/OpenCL/m20712_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m20712_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20712_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -140,7 +140,7 @@ KERNEL_FQ void m20712_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m20712_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20712_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m20712_a1-optimized.cl b/OpenCL/m20712_a1-optimized.cl index b1088a630..95c934d82 100644 --- a/OpenCL/m20712_a1-optimized.cl +++ b/OpenCL/m20712_a1-optimized.cl @@ -40,7 +40,7 @@ h = 0; \ } -KERNEL_FQ void m20712_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20712_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -676,15 +676,15 @@ KERNEL_FQ void m20712_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m20712_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20712_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m20712_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20712_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m20712_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20712_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -1338,10 +1338,10 @@ KERNEL_FQ void m20712_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m20712_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20712_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m20712_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20712_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m20712_a1-pure.cl b/OpenCL/m20712_a1-pure.cl index b713e2eca..2068ccc2a 100644 --- a/OpenCL/m20712_a1-pure.cl +++ b/OpenCL/m20712_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m20712_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20712_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -136,7 +136,7 @@ KERNEL_FQ void m20712_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m20712_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20712_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m20712_a3-optimized.cl b/OpenCL/m20712_a3-optimized.cl index 2814cbe69..bcbb4d88d 100644 --- a/OpenCL/m20712_a3-optimized.cl +++ b/OpenCL/m20712_a3-optimized.cl @@ -1123,7 +1123,7 @@ DECLSPEC void m20712s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m20712_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m20712_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -1184,7 +1184,7 @@ KERNEL_FQ void m20712_m04 (KERN_ATTR_VECTOR ()) m20712m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m20712_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m20712_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -1245,7 +1245,7 @@ KERNEL_FQ void m20712_m08 (KERN_ATTR_VECTOR ()) m20712m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m20712_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m20712_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -1306,7 +1306,7 @@ KERNEL_FQ void m20712_m16 (KERN_ATTR_VECTOR ()) m20712m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m20712_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m20712_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -1367,7 +1367,7 @@ KERNEL_FQ void m20712_s04 (KERN_ATTR_VECTOR ()) m20712s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m20712_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m20712_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -1428,7 +1428,7 @@ KERNEL_FQ void m20712_s08 (KERN_ATTR_VECTOR ()) m20712s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m20712_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m20712_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m20712_a3-pure.cl b/OpenCL/m20712_a3-pure.cl index 908b8ca2d..e8883bb27 100644 --- a/OpenCL/m20712_a3-pure.cl +++ b/OpenCL/m20712_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m20712_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m20712_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -149,7 +149,7 @@ KERNEL_FQ void m20712_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m20712_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m20712_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m20720_a0-pure.cl b/OpenCL/m20720_a0-pure.cl index a25d65181..65dcac871 100644 --- a/OpenCL/m20720_a0-pure.cl +++ b/OpenCL/m20720_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m20720_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20720_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -140,7 +140,7 @@ KERNEL_FQ void m20720_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m20720_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20720_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m20720_a1-pure.cl b/OpenCL/m20720_a1-pure.cl index 82ebdb8d2..550d49c8e 100644 --- a/OpenCL/m20720_a1-pure.cl +++ b/OpenCL/m20720_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m20720_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20720_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -136,7 +136,7 @@ KERNEL_FQ void m20720_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m20720_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20720_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m20720_a3-pure.cl b/OpenCL/m20720_a3-pure.cl index 0caa7bd4f..904d870f1 100644 --- a/OpenCL/m20720_a3-pure.cl +++ b/OpenCL/m20720_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m20720_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m20720_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -149,7 +149,7 @@ KERNEL_FQ void m20720_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m20720_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m20720_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m20730_a0-pure.cl b/OpenCL/m20730_a0-pure.cl index 76589f18a..93598a57f 100644 --- a/OpenCL/m20730_a0-pure.cl +++ b/OpenCL/m20730_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m20730_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20730_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -134,7 +134,7 @@ KERNEL_FQ void m20730_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m20730_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20730_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m20730_a1-pure.cl b/OpenCL/m20730_a1-pure.cl index 1bc541c88..f79ef3717 100644 --- a/OpenCL/m20730_a1-pure.cl +++ b/OpenCL/m20730_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m20730_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20730_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -135,7 +135,7 @@ KERNEL_FQ void m20730_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m20730_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20730_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m20730_a3-pure.cl b/OpenCL/m20730_a3-pure.cl index 4f1f670c9..15502c4af 100644 --- a/OpenCL/m20730_a3-pure.cl +++ b/OpenCL/m20730_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m20730_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m20730_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -148,7 +148,7 @@ KERNEL_FQ void m20730_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m20730_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m20730_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m20800_a0-optimized.cl b/OpenCL/m20800_a0-optimized.cl index 2eca0f810..80614b93c 100644 --- a/OpenCL/m20800_a0-optimized.cl +++ b/OpenCL/m20800_a0-optimized.cl @@ -43,7 +43,7 @@ h = 0; \ } -KERNEL_FQ void m20800_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20800_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -306,15 +306,15 @@ KERNEL_FQ void m20800_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m20800_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20800_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m20800_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20800_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m20800_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20800_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -610,10 +610,10 @@ KERNEL_FQ void m20800_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m20800_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20800_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m20800_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20800_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m20800_a0-pure.cl b/OpenCL/m20800_a0-pure.cl index c9254e633..09028270f 100644 --- a/OpenCL/m20800_a0-pure.cl +++ b/OpenCL/m20800_a0-pure.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m20800_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20800_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -130,7 +130,7 @@ KERNEL_FQ void m20800_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m20800_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20800_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m20800_a1-optimized.cl b/OpenCL/m20800_a1-optimized.cl index fa01e62d3..689c516d8 100644 --- a/OpenCL/m20800_a1-optimized.cl +++ b/OpenCL/m20800_a1-optimized.cl @@ -41,7 +41,7 @@ h = 0; \ } -KERNEL_FQ void m20800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20800_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -359,15 +359,15 @@ KERNEL_FQ void m20800_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m20800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20800_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m20800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20800_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m20800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20800_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -718,10 +718,10 @@ KERNEL_FQ void m20800_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m20800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20800_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m20800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20800_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m20800_a1-pure.cl b/OpenCL/m20800_a1-pure.cl index b2594147b..e750f1c0b 100644 --- a/OpenCL/m20800_a1-pure.cl +++ b/OpenCL/m20800_a1-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m20800_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20800_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -126,7 +126,7 @@ KERNEL_FQ void m20800_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m20800_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20800_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m20800_a3-optimized.cl b/OpenCL/m20800_a3-optimized.cl index 3523584a9..d1a317226 100644 --- a/OpenCL/m20800_a3-optimized.cl +++ b/OpenCL/m20800_a3-optimized.cl @@ -540,7 +540,7 @@ DECLSPEC void m20800s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m20800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20800_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -610,7 +610,7 @@ KERNEL_FQ void m20800_m04 (KERN_ATTR_BASIC ()) m20800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m20800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20800_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -680,7 +680,7 @@ KERNEL_FQ void m20800_m08 (KERN_ATTR_BASIC ()) m20800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m20800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20800_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -750,7 +750,7 @@ KERNEL_FQ void m20800_m16 (KERN_ATTR_BASIC ()) m20800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m20800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20800_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -820,7 +820,7 @@ KERNEL_FQ void m20800_s04 (KERN_ATTR_BASIC ()) m20800s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m20800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20800_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -890,7 +890,7 @@ KERNEL_FQ void m20800_s08 (KERN_ATTR_BASIC ()) m20800s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m20800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20800_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m20800_a3-pure.cl b/OpenCL/m20800_a3-pure.cl index f0bb42691..f9214f4c5 100644 --- a/OpenCL/m20800_a3-pure.cl +++ b/OpenCL/m20800_a3-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m20800_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m20800_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -139,7 +139,7 @@ KERNEL_FQ void m20800_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m20800_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m20800_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m20900_a0-optimized.cl b/OpenCL/m20900_a0-optimized.cl index 3ab829071..9f87e5118 100644 --- a/OpenCL/m20900_a0-optimized.cl +++ b/OpenCL/m20900_a0-optimized.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m20900_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20900_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -731,15 +731,15 @@ KERNEL_FQ void m20900_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m20900_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20900_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m20900_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20900_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m20900_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20900_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -1456,10 +1456,10 @@ KERNEL_FQ void m20900_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m20900_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20900_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m20900_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20900_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m20900_a0-pure.cl b/OpenCL/m20900_a0-pure.cl index 556d41cf6..a7b80040b 100644 --- a/OpenCL/m20900_a0-pure.cl +++ b/OpenCL/m20900_a0-pure.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m20900_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20900_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -209,7 +209,7 @@ KERNEL_FQ void m20900_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m20900_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m20900_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m20900_a1-optimized.cl b/OpenCL/m20900_a1-optimized.cl index c50b619f8..df2d02df6 100644 --- a/OpenCL/m20900_a1-optimized.cl +++ b/OpenCL/m20900_a1-optimized.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m20900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20900_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -787,15 +787,15 @@ KERNEL_FQ void m20900_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m20900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20900_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m20900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20900_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m20900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20900_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -1570,10 +1570,10 @@ KERNEL_FQ void m20900_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m20900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20900_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m20900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20900_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m20900_a1-pure.cl b/OpenCL/m20900_a1-pure.cl index 0b4f0f898..226c6fc71 100644 --- a/OpenCL/m20900_a1-pure.cl +++ b/OpenCL/m20900_a1-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m20900_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20900_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -209,7 +209,7 @@ KERNEL_FQ void m20900_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m20900_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20900_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m20900_a3-optimized.cl b/OpenCL/m20900_a3-optimized.cl index adeb2b1e6..90613b961 100644 --- a/OpenCL/m20900_a3-optimized.cl +++ b/OpenCL/m20900_a3-optimized.cl @@ -1358,7 +1358,7 @@ DECLSPEC void m20900s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m20900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20900_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -1428,7 +1428,7 @@ KERNEL_FQ void m20900_m04 (KERN_ATTR_BASIC ()) m20900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m20900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20900_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -1498,7 +1498,7 @@ KERNEL_FQ void m20900_m08 (KERN_ATTR_BASIC ()) m20900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m20900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20900_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -1568,7 +1568,7 @@ KERNEL_FQ void m20900_m16 (KERN_ATTR_BASIC ()) m20900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m20900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20900_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1638,7 +1638,7 @@ KERNEL_FQ void m20900_s04 (KERN_ATTR_BASIC ()) m20900s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m20900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20900_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1708,7 +1708,7 @@ KERNEL_FQ void m20900_s08 (KERN_ATTR_BASIC ()) m20900s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m20900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m20900_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m20900_a3-pure.cl b/OpenCL/m20900_a3-pure.cl index 23443d5ea..8582e8a5c 100644 --- a/OpenCL/m20900_a3-pure.cl +++ b/OpenCL/m20900_a3-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m20900_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m20900_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -218,7 +218,7 @@ KERNEL_FQ void m20900_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m20900_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m20900_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m21000_a0-optimized.cl b/OpenCL/m21000_a0-optimized.cl index fe3305d8c..4407991e0 100644 --- a/OpenCL/m21000_a0-optimized.cl +++ b/OpenCL/m21000_a0-optimized.cl @@ -125,7 +125,7 @@ DECLSPEC void sha512_transform_opt (PRIVATE_AS const u32x *w0, PRIVATE_AS const digest[7] = h; } -KERNEL_FQ void m21000_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21000_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -266,15 +266,15 @@ KERNEL_FQ void m21000_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m21000_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21000_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m21000_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21000_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m21000_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21000_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -427,10 +427,10 @@ KERNEL_FQ void m21000_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m21000_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21000_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m21000_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21000_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m21000_a0-pure.cl b/OpenCL/m21000_a0-pure.cl index c66ee9b83..02eb56a9c 100644 --- a/OpenCL/m21000_a0-pure.cl +++ b/OpenCL/m21000_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m21000_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21000_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -87,7 +87,7 @@ KERNEL_FQ void m21000_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m21000_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21000_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m21000_a1-optimized.cl b/OpenCL/m21000_a1-optimized.cl index b0f4b364b..1b673cdcb 100644 --- a/OpenCL/m21000_a1-optimized.cl +++ b/OpenCL/m21000_a1-optimized.cl @@ -218,7 +218,7 @@ DECLSPEC void sha512_transform_opt (PRIVATE_AS const u32x *w0, PRIVATE_AS const digest[7] = h; } -KERNEL_FQ void m21000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21000_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -397,15 +397,15 @@ KERNEL_FQ void m21000_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m21000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21000_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m21000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21000_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m21000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21000_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -596,10 +596,10 @@ KERNEL_FQ void m21000_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m21000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21000_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m21000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21000_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m21000_a1-pure.cl b/OpenCL/m21000_a1-pure.cl index cf0667973..c7d623690 100644 --- a/OpenCL/m21000_a1-pure.cl +++ b/OpenCL/m21000_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m21000_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21000_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -83,7 +83,7 @@ KERNEL_FQ void m21000_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m21000_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21000_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m21000_a3-optimized.cl b/OpenCL/m21000_a3-optimized.cl index 4096c2e25..da62eecfe 100644 --- a/OpenCL/m21000_a3-optimized.cl +++ b/OpenCL/m21000_a3-optimized.cl @@ -410,7 +410,7 @@ DECLSPEC void m21000s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m21000_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m21000_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -450,7 +450,7 @@ KERNEL_FQ void m21000_m04 (KERN_ATTR_VECTOR ()) m21000m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m21000_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m21000_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -490,7 +490,7 @@ KERNEL_FQ void m21000_m08 (KERN_ATTR_VECTOR ()) m21000m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m21000_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m21000_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -530,7 +530,7 @@ KERNEL_FQ void m21000_m16 (KERN_ATTR_VECTOR ()) m21000m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m21000_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m21000_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -570,7 +570,7 @@ KERNEL_FQ void m21000_s04 (KERN_ATTR_VECTOR ()) m21000s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m21000_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m21000_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -610,7 +610,7 @@ KERNEL_FQ void m21000_s08 (KERN_ATTR_VECTOR ()) m21000s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m21000_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m21000_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m21000_a3-pure.cl b/OpenCL/m21000_a3-pure.cl index 17854b263..82f53bf70 100644 --- a/OpenCL/m21000_a3-pure.cl +++ b/OpenCL/m21000_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m21000_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m21000_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -96,7 +96,7 @@ KERNEL_FQ void m21000_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m21000_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m21000_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m21100_a0-optimized.cl b/OpenCL/m21100_a0-optimized.cl index 6c6654355..2b9aef1bc 100644 --- a/OpenCL/m21100_a0-optimized.cl +++ b/OpenCL/m21100_a0-optimized.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m21100_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21100_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -386,15 +386,15 @@ KERNEL_FQ void m21100_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m21100_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21100_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m21100_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21100_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m21100_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21100_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -772,10 +772,10 @@ KERNEL_FQ void m21100_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m21100_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21100_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m21100_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21100_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m21100_a0-pure.cl b/OpenCL/m21100_a0-pure.cl index b59d5a31a..688cb3f01 100644 --- a/OpenCL/m21100_a0-pure.cl +++ b/OpenCL/m21100_a0-pure.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m21100_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21100_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -146,7 +146,7 @@ KERNEL_FQ void m21100_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m21100_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21100_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m21100_a1-optimized.cl b/OpenCL/m21100_a1-optimized.cl index 4a20328c3..ce982ed89 100644 --- a/OpenCL/m21100_a1-optimized.cl +++ b/OpenCL/m21100_a1-optimized.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m21100_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21100_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -442,15 +442,15 @@ KERNEL_FQ void m21100_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m21100_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21100_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m21100_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21100_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m21100_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21100_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -886,10 +886,10 @@ KERNEL_FQ void m21100_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m21100_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21100_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m21100_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21100_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m21100_a1-pure.cl b/OpenCL/m21100_a1-pure.cl index 9c6019504..98ee7ef27 100644 --- a/OpenCL/m21100_a1-pure.cl +++ b/OpenCL/m21100_a1-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m21100_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21100_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -142,7 +142,7 @@ KERNEL_FQ void m21100_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m21100_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21100_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m21100_a3-optimized.cl b/OpenCL/m21100_a3-optimized.cl index e5b0e86ce..5e2a97567 100644 --- a/OpenCL/m21100_a3-optimized.cl +++ b/OpenCL/m21100_a3-optimized.cl @@ -634,7 +634,7 @@ DECLSPEC void m21100s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m21100_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21100_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -704,7 +704,7 @@ KERNEL_FQ void m21100_m04 (KERN_ATTR_BASIC ()) m21100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m21100_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21100_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -774,7 +774,7 @@ KERNEL_FQ void m21100_m08 (KERN_ATTR_BASIC ()) m21100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m21100_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21100_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -844,7 +844,7 @@ KERNEL_FQ void m21100_m16 (KERN_ATTR_BASIC ()) m21100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m21100_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21100_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -914,7 +914,7 @@ KERNEL_FQ void m21100_s04 (KERN_ATTR_BASIC ()) m21100s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m21100_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21100_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -984,7 +984,7 @@ KERNEL_FQ void m21100_s08 (KERN_ATTR_BASIC ()) m21100s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m21100_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21100_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m21100_a3-pure.cl b/OpenCL/m21100_a3-pure.cl index 90d39999f..593f6f942 100644 --- a/OpenCL/m21100_a3-pure.cl +++ b/OpenCL/m21100_a3-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m21100_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m21100_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -155,7 +155,7 @@ KERNEL_FQ void m21100_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m21100_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m21100_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m21200_a0-optimized.cl b/OpenCL/m21200_a0-optimized.cl index c3764aa87..40136ee83 100644 --- a/OpenCL/m21200_a0-optimized.cl +++ b/OpenCL/m21200_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m21200_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21200_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -442,15 +442,15 @@ KERNEL_FQ void m21200_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m21200_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21200_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m21200_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21200_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m21200_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21200_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -879,10 +879,10 @@ KERNEL_FQ void m21200_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m21200_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21200_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m21200_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21200_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m21200_a0-pure.cl b/OpenCL/m21200_a0-pure.cl index 31a05eafe..cae391caf 100644 --- a/OpenCL/m21200_a0-pure.cl +++ b/OpenCL/m21200_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m21200_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21200_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -166,7 +166,7 @@ KERNEL_FQ void m21200_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m21200_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21200_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m21200_a1-optimized.cl b/OpenCL/m21200_a1-optimized.cl index 00289dc1f..85a2c3d70 100644 --- a/OpenCL/m21200_a1-optimized.cl +++ b/OpenCL/m21200_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m21200_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21200_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -498,15 +498,15 @@ KERNEL_FQ void m21200_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m21200_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21200_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m21200_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21200_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m21200_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21200_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -993,10 +993,10 @@ KERNEL_FQ void m21200_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m21200_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21200_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m21200_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21200_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m21200_a1-pure.cl b/OpenCL/m21200_a1-pure.cl index 9c75b2ba5..5b8590c7b 100644 --- a/OpenCL/m21200_a1-pure.cl +++ b/OpenCL/m21200_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m21200_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21200_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -162,7 +162,7 @@ KERNEL_FQ void m21200_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m21200_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21200_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m21200_a3-optimized.cl b/OpenCL/m21200_a3-optimized.cl index 74292b4f1..4ab6caedd 100644 --- a/OpenCL/m21200_a3-optimized.cl +++ b/OpenCL/m21200_a3-optimized.cl @@ -781,7 +781,7 @@ DECLSPEC void m21200s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m21200_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21200_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -851,7 +851,7 @@ KERNEL_FQ void m21200_m04 (KERN_ATTR_BASIC ()) m21200m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m21200_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21200_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -921,7 +921,7 @@ KERNEL_FQ void m21200_m08 (KERN_ATTR_BASIC ()) m21200m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m21200_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21200_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -991,7 +991,7 @@ KERNEL_FQ void m21200_m16 (KERN_ATTR_BASIC ()) m21200m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m21200_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21200_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1061,7 +1061,7 @@ KERNEL_FQ void m21200_s04 (KERN_ATTR_BASIC ()) m21200s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m21200_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21200_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1131,7 +1131,7 @@ KERNEL_FQ void m21200_s08 (KERN_ATTR_BASIC ()) m21200s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m21200_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21200_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m21200_a3-pure.cl b/OpenCL/m21200_a3-pure.cl index efd900e8d..1395d5c09 100644 --- a/OpenCL/m21200_a3-pure.cl +++ b/OpenCL/m21200_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m21200_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m21200_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -173,7 +173,7 @@ KERNEL_FQ void m21200_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m21200_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m21200_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m21300_a0-pure.cl b/OpenCL/m21300_a0-pure.cl index 31eeea607..fe8d316aa 100644 --- a/OpenCL/m21300_a0-pure.cl +++ b/OpenCL/m21300_a0-pure.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m21300_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21300_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -146,7 +146,7 @@ KERNEL_FQ void m21300_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m21300_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21300_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m21300_a1-pure.cl b/OpenCL/m21300_a1-pure.cl index a1c1c8f75..e7e58d03e 100644 --- a/OpenCL/m21300_a1-pure.cl +++ b/OpenCL/m21300_a1-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m21300_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21300_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -140,7 +140,7 @@ KERNEL_FQ void m21300_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m21300_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21300_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m21300_a3-pure.cl b/OpenCL/m21300_a3-pure.cl index 5f92bb90a..91b279a23 100644 --- a/OpenCL/m21300_a3-pure.cl +++ b/OpenCL/m21300_a3-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m21300_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m21300_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -159,7 +159,7 @@ KERNEL_FQ void m21300_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m21300_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m21300_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m21310_a0-pure.cl b/OpenCL/m21310_a0-pure.cl index dba86ea7d..c14d713be 100644 --- a/OpenCL/m21310_a0-pure.cl +++ b/OpenCL/m21310_a0-pure.cl @@ -39,7 +39,7 @@ typedef struct md5_double_salt } md5_double_salt_t; -KERNEL_FQ void m21310_mxx (KERN_ATTR_RULES_ESALT (md5_double_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m21310_mxx (KERN_ATTR_RULES_ESALT (md5_double_salt_t)) { /** * modifier @@ -153,7 +153,7 @@ KERNEL_FQ void m21310_mxx (KERN_ATTR_RULES_ESALT (md5_double_salt_t)) } } -KERNEL_FQ void m21310_sxx (KERN_ATTR_RULES_ESALT (md5_double_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m21310_sxx (KERN_ATTR_RULES_ESALT (md5_double_salt_t)) { /** * modifier diff --git a/OpenCL/m21310_a1-pure.cl b/OpenCL/m21310_a1-pure.cl index be8285e50..353023724 100644 --- a/OpenCL/m21310_a1-pure.cl +++ b/OpenCL/m21310_a1-pure.cl @@ -37,7 +37,7 @@ typedef struct md5_double_salt } md5_double_salt_t; -KERNEL_FQ void m21310_mxx (KERN_ATTR_ESALT (md5_double_salt)) +KERNEL_FQ void HC_ATTR_SEQ m21310_mxx (KERN_ATTR_ESALT (md5_double_salt)) { /** * modifier @@ -149,7 +149,7 @@ KERNEL_FQ void m21310_mxx (KERN_ATTR_ESALT (md5_double_salt)) } } -KERNEL_FQ void m21310_sxx (KERN_ATTR_ESALT (md5_double_salt)) +KERNEL_FQ void HC_ATTR_SEQ m21310_sxx (KERN_ATTR_ESALT (md5_double_salt)) { /** * modifier diff --git a/OpenCL/m21310_a3-pure.cl b/OpenCL/m21310_a3-pure.cl index 546e7defb..8ffef046f 100644 --- a/OpenCL/m21310_a3-pure.cl +++ b/OpenCL/m21310_a3-pure.cl @@ -37,7 +37,7 @@ typedef struct md5_double_salt } md5_double_salt_t; -KERNEL_FQ void m21310_mxx (KERN_ATTR_VECTOR_ESALT (md5_double_salt)) +KERNEL_FQ void HC_ATTR_SEQ m21310_mxx (KERN_ATTR_VECTOR_ESALT (md5_double_salt)) { /** * modifier @@ -168,7 +168,7 @@ KERNEL_FQ void m21310_mxx (KERN_ATTR_VECTOR_ESALT (md5_double_salt)) } } -KERNEL_FQ void m21310_sxx (KERN_ATTR_VECTOR_ESALT (md5_double_salt)) +KERNEL_FQ void HC_ATTR_SEQ m21310_sxx (KERN_ATTR_VECTOR_ESALT (md5_double_salt)) { /** * modifier diff --git a/OpenCL/m21400_a0-optimized.cl b/OpenCL/m21400_a0-optimized.cl index 7148b8aa0..6f421834d 100644 --- a/OpenCL/m21400_a0-optimized.cl +++ b/OpenCL/m21400_a0-optimized.cl @@ -30,7 +30,7 @@ h = 0; \ } -KERNEL_FQ void m21400_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21400_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -277,15 +277,15 @@ KERNEL_FQ void m21400_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m21400_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21400_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m21400_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21400_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m21400_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21400_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -565,10 +565,10 @@ KERNEL_FQ void m21400_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m21400_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21400_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m21400_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21400_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m21400_a0-pure.cl b/OpenCL/m21400_a0-pure.cl index c16f3c6c1..04f8c0126 100644 --- a/OpenCL/m21400_a0-pure.cl +++ b/OpenCL/m21400_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m21400_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21400_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -91,7 +91,7 @@ KERNEL_FQ void m21400_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m21400_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21400_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m21400_a1-optimized.cl b/OpenCL/m21400_a1-optimized.cl index c71550a34..5c4b4189c 100644 --- a/OpenCL/m21400_a1-optimized.cl +++ b/OpenCL/m21400_a1-optimized.cl @@ -28,7 +28,7 @@ h = 0; \ } -KERNEL_FQ void m21400_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21400_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -333,15 +333,15 @@ KERNEL_FQ void m21400_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m21400_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21400_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m21400_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21400_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m21400_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21400_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -679,10 +679,10 @@ KERNEL_FQ void m21400_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m21400_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21400_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m21400_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21400_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m21400_a1-pure.cl b/OpenCL/m21400_a1-pure.cl index 68b1d47e8..ea88e75c8 100644 --- a/OpenCL/m21400_a1-pure.cl +++ b/OpenCL/m21400_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m21400_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21400_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -87,7 +87,7 @@ KERNEL_FQ void m21400_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m21400_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21400_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m21400_a3-optimized.cl b/OpenCL/m21400_a3-optimized.cl index 8fbbeb2b5..d77a4ee3a 100644 --- a/OpenCL/m21400_a3-optimized.cl +++ b/OpenCL/m21400_a3-optimized.cl @@ -493,7 +493,7 @@ DECLSPEC void m21400s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m21400_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m21400_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -533,7 +533,7 @@ KERNEL_FQ void m21400_m04 (KERN_ATTR_VECTOR ()) m21400m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m21400_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m21400_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -573,7 +573,7 @@ KERNEL_FQ void m21400_m08 (KERN_ATTR_VECTOR ()) m21400m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m21400_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m21400_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -613,7 +613,7 @@ KERNEL_FQ void m21400_m16 (KERN_ATTR_VECTOR ()) m21400m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m21400_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m21400_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -653,7 +653,7 @@ KERNEL_FQ void m21400_s04 (KERN_ATTR_VECTOR ()) m21400s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m21400_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m21400_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -693,7 +693,7 @@ KERNEL_FQ void m21400_s08 (KERN_ATTR_VECTOR ()) m21400s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m21400_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m21400_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m21400_a3-pure.cl b/OpenCL/m21400_a3-pure.cl index b14318fe5..4f61de64a 100644 --- a/OpenCL/m21400_a3-pure.cl +++ b/OpenCL/m21400_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m21400_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m21400_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -100,7 +100,7 @@ KERNEL_FQ void m21400_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m21400_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m21400_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m21420_a0-pure.cl b/OpenCL/m21420_a0-pure.cl index 06c7dad00..2992e3446 100644 --- a/OpenCL/m21420_a0-pure.cl +++ b/OpenCL/m21420_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m21420_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21420_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -111,7 +111,7 @@ KERNEL_FQ void m21420_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m21420_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m21420_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m21420_a1-pure.cl b/OpenCL/m21420_a1-pure.cl index 720b189a1..d613b2e3c 100644 --- a/OpenCL/m21420_a1-pure.cl +++ b/OpenCL/m21420_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m21420_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21420_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -107,7 +107,7 @@ KERNEL_FQ void m21420_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m21420_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m21420_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m21420_a3-pure.cl b/OpenCL/m21420_a3-pure.cl index 9d81389b9..17ddf7c88 100644 --- a/OpenCL/m21420_a3-pure.cl +++ b/OpenCL/m21420_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m21420_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m21420_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -120,7 +120,7 @@ KERNEL_FQ void m21420_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m21420_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m21420_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m21500-pure.cl b/OpenCL/m21500-pure.cl index a181cc4a6..69d676a0d 100644 --- a/OpenCL/m21500-pure.cl +++ b/OpenCL/m21500-pure.cl @@ -70,7 +70,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m21500_init (KERN_ATTR_TMPS_ESALT (solarwinds_tmp_t, solarwinds_t)) +KERNEL_FQ void HC_ATTR_SEQ m21500_init (KERN_ATTR_TMPS_ESALT (solarwinds_tmp_t, solarwinds_t)) { /** * base @@ -142,7 +142,7 @@ KERNEL_FQ void m21500_init (KERN_ATTR_TMPS_ESALT (solarwinds_tmp_t, solarwinds_t } } -KERNEL_FQ void m21500_loop (KERN_ATTR_TMPS_ESALT (solarwinds_tmp_t, solarwinds_t)) +KERNEL_FQ void HC_ATTR_SEQ m21500_loop (KERN_ATTR_TMPS_ESALT (solarwinds_tmp_t, solarwinds_t)) { const u64 gid = get_global_id (0); @@ -227,7 +227,7 @@ KERNEL_FQ void m21500_loop (KERN_ATTR_TMPS_ESALT (solarwinds_tmp_t, solarwinds_t } } -KERNEL_FQ void m21500_comp (KERN_ATTR_TMPS_ESALT (solarwinds_tmp_t, solarwinds_t)) +KERNEL_FQ void HC_ATTR_SEQ m21500_comp (KERN_ATTR_TMPS_ESALT (solarwinds_tmp_t, solarwinds_t)) { /** * base diff --git a/OpenCL/m21600-pure.cl b/OpenCL/m21600-pure.cl index 8852a3c4a..ca888a606 100644 --- a/OpenCL/m21600-pure.cl +++ b/OpenCL/m21600-pure.cl @@ -85,7 +85,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void m21600_init (KERN_ATTR_TMPS (web2py_sha512_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m21600_init (KERN_ATTR_TMPS (web2py_sha512_tmp_t)) { /** * base @@ -189,7 +189,7 @@ KERNEL_FQ void m21600_init (KERN_ATTR_TMPS (web2py_sha512_tmp_t)) } } -KERNEL_FQ void m21600_loop (KERN_ATTR_TMPS (web2py_sha512_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m21600_loop (KERN_ATTR_TMPS (web2py_sha512_tmp_t)) { const u64 gid = get_global_id (0); @@ -315,7 +315,7 @@ KERNEL_FQ void m21600_loop (KERN_ATTR_TMPS (web2py_sha512_tmp_t)) } } -KERNEL_FQ void m21600_comp (KERN_ATTR_TMPS (web2py_sha512_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m21600_comp (KERN_ATTR_TMPS (web2py_sha512_tmp_t)) { /** * base diff --git a/OpenCL/m21700-pure.cl b/OpenCL/m21700-pure.cl index 554dcfbdf..697fc1072 100644 --- a/OpenCL/m21700-pure.cl +++ b/OpenCL/m21700-pure.cl @@ -95,7 +95,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void m21700_init (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, electrum_t)) +KERNEL_FQ void HC_ATTR_SEQ m21700_init (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, electrum_t)) { /** * base @@ -192,7 +192,7 @@ KERNEL_FQ void m21700_init (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, electrum_t)) tmps[gid].out[7] = tmps[gid].dgst[7]; } -KERNEL_FQ void m21700_loop (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, electrum_t)) +KERNEL_FQ void HC_ATTR_SEQ m21700_loop (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, electrum_t)) { const u64 gid = get_global_id (0); @@ -315,7 +315,7 @@ KERNEL_FQ void m21700_loop (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, electrum_t)) unpack64v (tmps, out, gid, 7, out[7]); } -KERNEL_FQ void m21700_comp (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, electrum_t)) +KERNEL_FQ void HC_ATTR_SEQ m21700_comp (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, electrum_t)) { /** * base diff --git a/OpenCL/m21800-pure.cl b/OpenCL/m21800-pure.cl index fd301671b..e81f487e9 100644 --- a/OpenCL/m21800-pure.cl +++ b/OpenCL/m21800-pure.cl @@ -96,7 +96,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void m21800_init (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, electrum_t)) +KERNEL_FQ void HC_ATTR_SEQ m21800_init (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, electrum_t)) { /** * base @@ -193,7 +193,7 @@ KERNEL_FQ void m21800_init (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, electrum_t)) tmps[gid].out[7] = tmps[gid].dgst[7]; } -KERNEL_FQ void m21800_loop (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, electrum_t)) +KERNEL_FQ void HC_ATTR_SEQ m21800_loop (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, electrum_t)) { const u64 gid = get_global_id (0); @@ -316,7 +316,7 @@ KERNEL_FQ void m21800_loop (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, electrum_t)) unpack64v (tmps, out, gid, 7, out[7]); } -KERNEL_FQ void m21800_comp (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, electrum_t)) +KERNEL_FQ void HC_ATTR_SEQ m21800_comp (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, electrum_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22000-pure.cl b/OpenCL/m22000-pure.cl index 5fc836f89..8c4e1c325 100644 --- a/OpenCL/m22000-pure.cl +++ b/OpenCL/m22000-pure.cl @@ -145,7 +145,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m22000_init (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) +KERNEL_FQ void HC_ATTR_SEQ m22000_init (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) { /** * base @@ -253,7 +253,7 @@ KERNEL_FQ void m22000_init (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) tmps[gid].out[9] = sha1_hmac_ctx2.opad.h[4]; } -KERNEL_FQ void m22000_loop (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) +KERNEL_FQ void HC_ATTR_SEQ m22000_loop (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) { const u64 gid = get_global_id (0); @@ -396,12 +396,12 @@ KERNEL_FQ void m22000_loop (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) unpackv (tmps, out, gid, 9, out[4]); } -KERNEL_FQ void m22000_comp (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) +KERNEL_FQ void HC_ATTR_SEQ m22000_comp (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) { // not in use here, special case... } -KERNEL_FQ void m22000_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) +KERNEL_FQ void HC_ATTR_SEQ m22000_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) { const u64 gid = get_global_id (0); @@ -594,7 +594,7 @@ KERNEL_FQ void m22000_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) } } -KERNEL_FQ void m22000_aux2 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) +KERNEL_FQ void HC_ATTR_SEQ m22000_aux2 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) { const u64 gid = get_global_id (0); @@ -777,7 +777,7 @@ KERNEL_FQ void m22000_aux2 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) } } -KERNEL_FQ void m22000_aux3 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) +KERNEL_FQ void HC_ATTR_SEQ m22000_aux3 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) { /** * aes shared @@ -1071,7 +1071,7 @@ KERNEL_FQ void m22000_aux3 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) } } -KERNEL_FQ void m22000_aux4 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) +KERNEL_FQ void HC_ATTR_SEQ m22000_aux4 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m22001-pure.cl b/OpenCL/m22001-pure.cl index 9034abded..133f63ff7 100644 --- a/OpenCL/m22001-pure.cl +++ b/OpenCL/m22001-pure.cl @@ -158,7 +158,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m22001_init (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) +KERNEL_FQ void HC_ATTR_SEQ m22001_init (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) { const u64 gid = get_global_id (0); @@ -203,17 +203,17 @@ KERNEL_FQ void m22001_init (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) tmps[gid].out[7] = hc_swap32_S (out[7]); } -KERNEL_FQ void m22001_loop (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) +KERNEL_FQ void HC_ATTR_SEQ m22001_loop (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) { // not in use here, special case... } -KERNEL_FQ void m22001_comp (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) +KERNEL_FQ void HC_ATTR_SEQ m22001_comp (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) { // not in use here, special case... } -KERNEL_FQ void m22001_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) +KERNEL_FQ void HC_ATTR_SEQ m22001_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) { const u64 gid = get_global_id (0); @@ -406,7 +406,7 @@ KERNEL_FQ void m22001_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) } } -KERNEL_FQ void m22001_aux2 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) +KERNEL_FQ void HC_ATTR_SEQ m22001_aux2 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) { const u64 gid = get_global_id (0); @@ -589,7 +589,7 @@ KERNEL_FQ void m22001_aux2 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) } } -KERNEL_FQ void m22001_aux3 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) +KERNEL_FQ void HC_ATTR_SEQ m22001_aux3 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) { /** * aes shared @@ -883,7 +883,7 @@ KERNEL_FQ void m22001_aux3 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) } } -KERNEL_FQ void m22001_aux4 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) +KERNEL_FQ void HC_ATTR_SEQ m22001_aux4 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m22100-pure.cl b/OpenCL/m22100-pure.cl index 15747015c..773c910cd 100644 --- a/OpenCL/m22100-pure.cl +++ b/OpenCL/m22100-pure.cl @@ -133,7 +133,7 @@ DECLSPEC void sha256_transform_vector_pc (PRIVATE_AS const u32x *w0, PRIVATE_AS digest[7] += h; } -KERNEL_FQ void m22100_init (KERN_ATTR_TMPS_ESALT (bitlocker_tmp_t, bitlocker_t)) +KERNEL_FQ void HC_ATTR_SEQ m22100_init (KERN_ATTR_TMPS_ESALT (bitlocker_tmp_t, bitlocker_t)) { /** * base @@ -193,7 +193,7 @@ KERNEL_FQ void m22100_init (KERN_ATTR_TMPS_ESALT (bitlocker_tmp_t, bitlocker_t)) tmps[gid].last_hash[7] = 0; } -KERNEL_FQ void m22100_loop (KERN_ATTR_TMPS_ESALT (bitlocker_tmp_t, bitlocker_t)) +KERNEL_FQ void HC_ATTR_SEQ m22100_loop (KERN_ATTR_TMPS_ESALT (bitlocker_tmp_t, bitlocker_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -347,7 +347,7 @@ KERNEL_FQ void m22100_loop (KERN_ATTR_TMPS_ESALT (bitlocker_tmp_t, bitlocker_t)) unpackv (tmps, last_hash, gid, 7, w1[3]); } -KERNEL_FQ void m22100_comp (KERN_ATTR_TMPS_ESALT (bitlocker_tmp_t, bitlocker_t)) +KERNEL_FQ void HC_ATTR_SEQ m22100_comp (KERN_ATTR_TMPS_ESALT (bitlocker_tmp_t, bitlocker_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22200_a0-optimized.cl b/OpenCL/m22200_a0-optimized.cl index fc7c9406b..ea8ff7dc6 100644 --- a/OpenCL/m22200_a0-optimized.cl +++ b/OpenCL/m22200_a0-optimized.cl @@ -122,7 +122,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void m22200_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m22200_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -237,15 +237,15 @@ KERNEL_FQ void m22200_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m22200_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m22200_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m22200_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m22200_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m22200_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m22200_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -373,10 +373,10 @@ KERNEL_FQ void m22200_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m22200_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m22200_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m22200_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m22200_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m22200_a0-pure.cl b/OpenCL/m22200_a0-pure.cl index 75d20c990..4e824b9f5 100644 --- a/OpenCL/m22200_a0-pure.cl +++ b/OpenCL/m22200_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m22200_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m22200_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -68,7 +68,7 @@ KERNEL_FQ void m22200_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m22200_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m22200_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m22200_a1-optimized.cl b/OpenCL/m22200_a1-optimized.cl index 9c426666a..5d883e355 100644 --- a/OpenCL/m22200_a1-optimized.cl +++ b/OpenCL/m22200_a1-optimized.cl @@ -120,7 +120,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void m22200_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22200_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -307,15 +307,15 @@ KERNEL_FQ void m22200_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m22200_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22200_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m22200_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22200_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m22200_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22200_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -502,10 +502,10 @@ KERNEL_FQ void m22200_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m22200_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22200_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m22200_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22200_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m22200_a1-pure.cl b/OpenCL/m22200_a1-pure.cl index 82af2556d..2e6683a4b 100644 --- a/OpenCL/m22200_a1-pure.cl +++ b/OpenCL/m22200_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m22200_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22200_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -63,7 +63,7 @@ KERNEL_FQ void m22200_mxx (KERN_ATTR_BASIC ()) } -KERNEL_FQ void m22200_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22200_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m22200_a3-optimized.cl b/OpenCL/m22200_a3-optimized.cl index c26d3977c..2d1b28a79 100644 --- a/OpenCL/m22200_a3-optimized.cl +++ b/OpenCL/m22200_a3-optimized.cl @@ -282,7 +282,7 @@ DECLSPEC void m22200s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m22200_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22200_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -348,7 +348,7 @@ KERNEL_FQ void m22200_m04 (KERN_ATTR_BASIC ()) m22200m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m22200_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22200_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -422,7 +422,7 @@ KERNEL_FQ void m22200_m08 (KERN_ATTR_BASIC ()) m22200m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m22200_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22200_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -511,7 +511,7 @@ KERNEL_FQ void m22200_m16 (KERN_ATTR_BASIC ()) m22200m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m22200_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22200_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -577,7 +577,7 @@ KERNEL_FQ void m22200_s04 (KERN_ATTR_BASIC ()) m22200s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m22200_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22200_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -651,7 +651,7 @@ KERNEL_FQ void m22200_s08 (KERN_ATTR_BASIC ()) m22200s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m22200_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22200_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m22200_a3-pure.cl b/OpenCL/m22200_a3-pure.cl index 4df3d0c63..dd0442fa1 100644 --- a/OpenCL/m22200_a3-pure.cl +++ b/OpenCL/m22200_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m22200_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m22200_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -79,7 +79,7 @@ KERNEL_FQ void m22200_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m22200_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m22200_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m22300_a0-optimized.cl b/OpenCL/m22300_a0-optimized.cl index 78178a00c..51343a714 100644 --- a/OpenCL/m22300_a0-optimized.cl +++ b/OpenCL/m22300_a0-optimized.cl @@ -30,7 +30,7 @@ h = 0; \ } -KERNEL_FQ void m22300_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m22300_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -277,15 +277,15 @@ KERNEL_FQ void m22300_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m22300_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m22300_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m22300_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m22300_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m22300_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m22300_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -565,10 +565,10 @@ KERNEL_FQ void m22300_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m22300_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m22300_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m22300_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m22300_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m22300_a0-pure.cl b/OpenCL/m22300_a0-pure.cl index 729ac56e0..ba04eb049 100644 --- a/OpenCL/m22300_a0-pure.cl +++ b/OpenCL/m22300_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m22300_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m22300_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -75,7 +75,7 @@ KERNEL_FQ void m22300_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m22300_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m22300_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m22300_a1-optimized.cl b/OpenCL/m22300_a1-optimized.cl index f57a8c2a1..82a0a4d51 100644 --- a/OpenCL/m22300_a1-optimized.cl +++ b/OpenCL/m22300_a1-optimized.cl @@ -28,7 +28,7 @@ h = 0; \ } -KERNEL_FQ void m22300_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22300_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -335,15 +335,15 @@ KERNEL_FQ void m22300_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m22300_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22300_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m22300_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22300_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m22300_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22300_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -683,10 +683,10 @@ KERNEL_FQ void m22300_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m22300_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22300_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m22300_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22300_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m22300_a1-pure.cl b/OpenCL/m22300_a1-pure.cl index 65af3eb13..861741b05 100644 --- a/OpenCL/m22300_a1-pure.cl +++ b/OpenCL/m22300_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m22300_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22300_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void m22300_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m22300_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22300_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m22300_a3-optimized.cl b/OpenCL/m22300_a3-optimized.cl index 4293778df..fc7d87c4d 100644 --- a/OpenCL/m22300_a3-optimized.cl +++ b/OpenCL/m22300_a3-optimized.cl @@ -537,7 +537,7 @@ DECLSPEC void m22300s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m22300_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22300_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -586,7 +586,7 @@ KERNEL_FQ void m22300_m04 (KERN_ATTR_BASIC ()) m22300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m22300_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22300_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -635,7 +635,7 @@ KERNEL_FQ void m22300_m08 (KERN_ATTR_BASIC ()) m22300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m22300_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22300_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -684,7 +684,7 @@ KERNEL_FQ void m22300_m16 (KERN_ATTR_BASIC ()) m22300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m22300_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22300_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -733,7 +733,7 @@ KERNEL_FQ void m22300_s04 (KERN_ATTR_BASIC ()) m22300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m22300_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22300_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -782,7 +782,7 @@ KERNEL_FQ void m22300_s08 (KERN_ATTR_BASIC ()) m22300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m22300_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22300_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m22300_a3-pure.cl b/OpenCL/m22300_a3-pure.cl index dfe7fa169..22a5f174e 100644 --- a/OpenCL/m22300_a3-pure.cl +++ b/OpenCL/m22300_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m22300_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m22300_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -86,7 +86,7 @@ KERNEL_FQ void m22300_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m22300_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m22300_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m22400-pure.cl b/OpenCL/m22400-pure.cl index f7da3a4ba..b6916b462 100644 --- a/OpenCL/m22400-pure.cl +++ b/OpenCL/m22400-pure.cl @@ -31,7 +31,7 @@ typedef struct aescrypt_tmp } aescrypt_tmp_t; -KERNEL_FQ void m22400_init (KERN_ATTR_TMPS_ESALT (aescrypt_tmp_t, aescrypt_t)) +KERNEL_FQ void HC_ATTR_SEQ m22400_init (KERN_ATTR_TMPS_ESALT (aescrypt_tmp_t, aescrypt_t)) { /** * base @@ -110,7 +110,7 @@ KERNEL_FQ void m22400_init (KERN_ATTR_TMPS_ESALT (aescrypt_tmp_t, aescrypt_t)) tmps[gid].len = final_len; } -KERNEL_FQ void m22400_loop (KERN_ATTR_TMPS_ESALT (aescrypt_tmp_t, aescrypt_t)) +KERNEL_FQ void HC_ATTR_SEQ m22400_loop (KERN_ATTR_TMPS_ESALT (aescrypt_tmp_t, aescrypt_t)) { const u64 gid = get_global_id (0); @@ -214,7 +214,7 @@ KERNEL_FQ void m22400_loop (KERN_ATTR_TMPS_ESALT (aescrypt_tmp_t, aescrypt_t)) tmps[gid].pass[7] = w[7]; } -KERNEL_FQ void m22400_comp (KERN_ATTR_TMPS_ESALT (aescrypt_tmp_t, aescrypt_t)) +KERNEL_FQ void HC_ATTR_SEQ m22400_comp (KERN_ATTR_TMPS_ESALT (aescrypt_tmp_t, aescrypt_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m22500_a0-optimized.cl b/OpenCL/m22500_a0-optimized.cl index 12e14e48d..33454830e 100644 --- a/OpenCL/m22500_a0-optimized.cl +++ b/OpenCL/m22500_a0-optimized.cl @@ -29,7 +29,7 @@ DECLSPEC int is_valid_bitcoinj_8 (const u8 v) return 1; } -KERNEL_FQ void m22500_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m22500_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -616,15 +616,15 @@ KERNEL_FQ void m22500_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m22500_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m22500_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m22500_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m22500_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m22500_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m22500_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -1211,10 +1211,10 @@ KERNEL_FQ void m22500_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m22500_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m22500_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m22500_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m22500_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m22500_a0-pure.cl b/OpenCL/m22500_a0-pure.cl index e2c51c557..b75ab45f4 100644 --- a/OpenCL/m22500_a0-pure.cl +++ b/OpenCL/m22500_a0-pure.cl @@ -29,7 +29,7 @@ DECLSPEC int is_valid_bitcoinj_8 (const u8 v) return 1; } -KERNEL_FQ void m22500_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m22500_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -325,7 +325,7 @@ KERNEL_FQ void m22500_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m22500_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m22500_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m22500_a1-optimized.cl b/OpenCL/m22500_a1-optimized.cl index 9eb8a54c5..d622b616c 100644 --- a/OpenCL/m22500_a1-optimized.cl +++ b/OpenCL/m22500_a1-optimized.cl @@ -28,7 +28,7 @@ DECLSPEC int is_valid_bitcoinj_8 (const u8 v) return 1; } -KERNEL_FQ void m22500_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22500_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -675,15 +675,15 @@ KERNEL_FQ void m22500_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m22500_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22500_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m22500_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22500_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m22500_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22500_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -1330,10 +1330,10 @@ KERNEL_FQ void m22500_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m22500_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22500_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m22500_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22500_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m22500_a1-pure.cl b/OpenCL/m22500_a1-pure.cl index 07b11a97f..8ab215f46 100644 --- a/OpenCL/m22500_a1-pure.cl +++ b/OpenCL/m22500_a1-pure.cl @@ -27,7 +27,7 @@ DECLSPEC int is_valid_bitcoinj_8 (const u8 v) return 1; } -KERNEL_FQ void m22500_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22500_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -329,7 +329,7 @@ KERNEL_FQ void m22500_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m22500_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m22500_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m22500_a3-optimized.cl b/OpenCL/m22500_a3-optimized.cl index a16415b0b..9550e2c03 100644 --- a/OpenCL/m22500_a3-optimized.cl +++ b/OpenCL/m22500_a3-optimized.cl @@ -602,7 +602,7 @@ DECLSPEC void m22500 (SHM_TYPE u32a *s_te0, SHM_TYPE u32a *s_te1, SHM_TYPE u32a } } -KERNEL_FQ void m22500_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m22500_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -697,7 +697,7 @@ KERNEL_FQ void m22500_m04 (KERN_ATTR_VECTOR ()) m22500 (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m22500_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m22500_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -792,7 +792,7 @@ KERNEL_FQ void m22500_m08 (KERN_ATTR_VECTOR ()) m22500 (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m22500_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m22500_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -887,7 +887,7 @@ KERNEL_FQ void m22500_m16 (KERN_ATTR_VECTOR ()) m22500 (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m22500_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m22500_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -982,7 +982,7 @@ KERNEL_FQ void m22500_s04 (KERN_ATTR_VECTOR ()) m22500 (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m22500_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m22500_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -1077,7 +1077,7 @@ KERNEL_FQ void m22500_s08 (KERN_ATTR_VECTOR ()) m22500 (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m22500_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m22500_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m22500_a3-pure.cl b/OpenCL/m22500_a3-pure.cl index d11b78493..e041240be 100644 --- a/OpenCL/m22500_a3-pure.cl +++ b/OpenCL/m22500_a3-pure.cl @@ -27,7 +27,7 @@ DECLSPEC int is_valid_bitcoinj_8 (const u8 v) return 1; } -KERNEL_FQ void m22500_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m22500_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -338,7 +338,7 @@ KERNEL_FQ void m22500_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m22500_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m22500_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m22600-pure.cl b/OpenCL/m22600-pure.cl index 04558549b..2e30ac148 100644 --- a/OpenCL/m22600-pure.cl +++ b/OpenCL/m22600-pure.cl @@ -108,7 +108,7 @@ DECLSPEC void sha1_run (PRIVATE_AS u32 *w, PRIVATE_AS u32 *res) res[4] = digest[4]; } -KERNEL_FQ void m22600_init (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, telegram_t)) +KERNEL_FQ void HC_ATTR_SEQ m22600_init (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, telegram_t)) { /** * base @@ -182,7 +182,7 @@ KERNEL_FQ void m22600_init (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, telegram_t)) } } -KERNEL_FQ void m22600_loop (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, telegram_t)) +KERNEL_FQ void HC_ATTR_SEQ m22600_loop (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, telegram_t)) { const u64 gid = get_global_id (0); @@ -267,7 +267,7 @@ KERNEL_FQ void m22600_loop (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, telegram_t)) } } -KERNEL_FQ void m22600_comp (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, telegram_t)) +KERNEL_FQ void HC_ATTR_SEQ m22600_comp (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, telegram_t)) { /** * base diff --git a/OpenCL/m22700-pure.cl b/OpenCL/m22700-pure.cl index 6cc6817e4..0d024b53e 100644 --- a/OpenCL/m22700-pure.cl +++ b/OpenCL/m22700-pure.cl @@ -315,7 +315,7 @@ DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL } } -KERNEL_FQ void m22700_init (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m22700_init (KERN_ATTR_TMPS (scrypt_tmp_t)) { /** * base @@ -452,7 +452,7 @@ KERNEL_FQ void m22700_init (KERN_ATTR_TMPS (scrypt_tmp_t)) } } -KERNEL_FQ void m22700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m22700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) { /** * base @@ -483,7 +483,7 @@ KERNEL_FQ void m22700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } -KERNEL_FQ void m22700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m22700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -508,7 +508,7 @@ KERNEL_FQ void m22700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } -KERNEL_FQ void m22700_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m22700_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22911_a0-pure.cl b/OpenCL/m22911_a0-pure.cl index 400c28c6f..807b8c2b4 100644 --- a/OpenCL/m22911_a0-pure.cl +++ b/OpenCL/m22911_a0-pure.cl @@ -26,7 +26,7 @@ typedef struct pem } pem_t; -KERNEL_FQ void m22911_mxx (KERN_ATTR_RULES_ESALT (pem_t)) +KERNEL_FQ void HC_ATTR_SEQ m22911_mxx (KERN_ATTR_RULES_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -236,7 +236,7 @@ KERNEL_FQ void m22911_mxx (KERN_ATTR_RULES_ESALT (pem_t)) } } -KERNEL_FQ void m22911_sxx (KERN_ATTR_RULES_ESALT (pem_t)) +KERNEL_FQ void HC_ATTR_SEQ m22911_sxx (KERN_ATTR_RULES_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22911_a1-pure.cl b/OpenCL/m22911_a1-pure.cl index 2ca92d8aa..82d811599 100644 --- a/OpenCL/m22911_a1-pure.cl +++ b/OpenCL/m22911_a1-pure.cl @@ -24,7 +24,7 @@ typedef struct pem } pem_t; -KERNEL_FQ void m22911_mxx (KERN_ATTR_ESALT (pem_t)) +KERNEL_FQ void HC_ATTR_SEQ m22911_mxx (KERN_ATTR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -232,7 +232,7 @@ KERNEL_FQ void m22911_mxx (KERN_ATTR_ESALT (pem_t)) } } -KERNEL_FQ void m22911_sxx (KERN_ATTR_ESALT (pem_t)) +KERNEL_FQ void HC_ATTR_SEQ m22911_sxx (KERN_ATTR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22911_a3-pure.cl b/OpenCL/m22911_a3-pure.cl index 3536db5be..92a8272e8 100644 --- a/OpenCL/m22911_a3-pure.cl +++ b/OpenCL/m22911_a3-pure.cl @@ -24,7 +24,7 @@ typedef struct pem } pem_t; -KERNEL_FQ void m22911_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) +KERNEL_FQ void HC_ATTR_SEQ m22911_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -249,7 +249,7 @@ KERNEL_FQ void m22911_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) } } -KERNEL_FQ void m22911_sxx (KERN_ATTR_VECTOR_ESALT (pem_t)) +KERNEL_FQ void HC_ATTR_SEQ m22911_sxx (KERN_ATTR_VECTOR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22921_a0-pure.cl b/OpenCL/m22921_a0-pure.cl index 028ada437..68d2b964b 100644 --- a/OpenCL/m22921_a0-pure.cl +++ b/OpenCL/m22921_a0-pure.cl @@ -26,7 +26,7 @@ typedef struct pem } pem_t; -KERNEL_FQ void m22921_mxx (KERN_ATTR_RULES_ESALT (pem_t)) +KERNEL_FQ void HC_ATTR_SEQ m22921_mxx (KERN_ATTR_RULES_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -203,7 +203,7 @@ KERNEL_FQ void m22921_mxx (KERN_ATTR_RULES_ESALT (pem_t)) } } -KERNEL_FQ void m22921_sxx (KERN_ATTR_RULES_ESALT (pem_t)) +KERNEL_FQ void HC_ATTR_SEQ m22921_sxx (KERN_ATTR_RULES_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22921_a1-pure.cl b/OpenCL/m22921_a1-pure.cl index e84989d9a..7f70467b1 100644 --- a/OpenCL/m22921_a1-pure.cl +++ b/OpenCL/m22921_a1-pure.cl @@ -24,7 +24,7 @@ typedef struct pem } pem_t; -KERNEL_FQ void m22921_mxx (KERN_ATTR_ESALT (pem_t)) +KERNEL_FQ void HC_ATTR_SEQ m22921_mxx (KERN_ATTR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -197,7 +197,7 @@ KERNEL_FQ void m22921_mxx (KERN_ATTR_ESALT (pem_t)) } } -KERNEL_FQ void m22921_sxx (KERN_ATTR_ESALT (pem_t)) +KERNEL_FQ void HC_ATTR_SEQ m22921_sxx (KERN_ATTR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22921_a3-pure.cl b/OpenCL/m22921_a3-pure.cl index 60d13976f..805660d0d 100644 --- a/OpenCL/m22921_a3-pure.cl +++ b/OpenCL/m22921_a3-pure.cl @@ -24,7 +24,7 @@ typedef struct pem } pem_t; -KERNEL_FQ void m22921_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) +KERNEL_FQ void HC_ATTR_SEQ m22921_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -217,7 +217,7 @@ KERNEL_FQ void m22921_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) } -KERNEL_FQ void m22921_sxx (KERN_ATTR_VECTOR_ESALT (pem_t)) +KERNEL_FQ void HC_ATTR_SEQ m22921_sxx (KERN_ATTR_VECTOR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22931_a0-pure.cl b/OpenCL/m22931_a0-pure.cl index c40cbd597..55e25a747 100644 --- a/OpenCL/m22931_a0-pure.cl +++ b/OpenCL/m22931_a0-pure.cl @@ -26,7 +26,7 @@ typedef struct pem } pem_t; -KERNEL_FQ void m22931_mxx (KERN_ATTR_RULES_ESALT (pem_t)) +KERNEL_FQ void HC_ATTR_SEQ m22931_mxx (KERN_ATTR_RULES_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -237,7 +237,7 @@ KERNEL_FQ void m22931_mxx (KERN_ATTR_RULES_ESALT (pem_t)) } } -KERNEL_FQ void m22931_sxx (KERN_ATTR_RULES_ESALT (pem_t)) +KERNEL_FQ void HC_ATTR_SEQ m22931_sxx (KERN_ATTR_RULES_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22931_a1-pure.cl b/OpenCL/m22931_a1-pure.cl index ebcda1156..8063d2c94 100644 --- a/OpenCL/m22931_a1-pure.cl +++ b/OpenCL/m22931_a1-pure.cl @@ -24,7 +24,7 @@ typedef struct pem } pem_t; -KERNEL_FQ void m22931_mxx (KERN_ATTR_ESALT (pem_t)) +KERNEL_FQ void HC_ATTR_SEQ m22931_mxx (KERN_ATTR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -231,7 +231,7 @@ KERNEL_FQ void m22931_mxx (KERN_ATTR_ESALT (pem_t)) } } -KERNEL_FQ void m22931_sxx (KERN_ATTR_ESALT (pem_t)) +KERNEL_FQ void HC_ATTR_SEQ m22931_sxx (KERN_ATTR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22931_a3-pure.cl b/OpenCL/m22931_a3-pure.cl index 6933a2e7e..f42823830 100644 --- a/OpenCL/m22931_a3-pure.cl +++ b/OpenCL/m22931_a3-pure.cl @@ -24,7 +24,7 @@ typedef struct pem } pem_t; -KERNEL_FQ void m22931_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) +KERNEL_FQ void HC_ATTR_SEQ m22931_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -250,7 +250,7 @@ KERNEL_FQ void m22931_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) } } -KERNEL_FQ void m22931_sxx (KERN_ATTR_VECTOR_ESALT (pem_t)) +KERNEL_FQ void HC_ATTR_SEQ m22931_sxx (KERN_ATTR_VECTOR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22941_a0-pure.cl b/OpenCL/m22941_a0-pure.cl index 9bbd7cf19..463bb5000 100644 --- a/OpenCL/m22941_a0-pure.cl +++ b/OpenCL/m22941_a0-pure.cl @@ -26,7 +26,7 @@ typedef struct pem } pem_t; -KERNEL_FQ void m22941_mxx (KERN_ATTR_RULES_ESALT (pem_t)) +KERNEL_FQ void HC_ATTR_SEQ m22941_mxx (KERN_ATTR_RULES_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -257,7 +257,7 @@ KERNEL_FQ void m22941_mxx (KERN_ATTR_RULES_ESALT (pem_t)) } } -KERNEL_FQ void m22941_sxx (KERN_ATTR_RULES_ESALT (pem_t)) +KERNEL_FQ void HC_ATTR_SEQ m22941_sxx (KERN_ATTR_RULES_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22941_a1-pure.cl b/OpenCL/m22941_a1-pure.cl index 11817d48f..2800377cd 100644 --- a/OpenCL/m22941_a1-pure.cl +++ b/OpenCL/m22941_a1-pure.cl @@ -24,7 +24,7 @@ typedef struct pem } pem_t; -KERNEL_FQ void m22941_mxx (KERN_ATTR_ESALT (pem_t)) +KERNEL_FQ void HC_ATTR_SEQ m22941_mxx (KERN_ATTR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -253,7 +253,7 @@ KERNEL_FQ void m22941_mxx (KERN_ATTR_ESALT (pem_t)) } } -KERNEL_FQ void m22941_sxx (KERN_ATTR_ESALT (pem_t)) +KERNEL_FQ void HC_ATTR_SEQ m22941_sxx (KERN_ATTR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22941_a3-pure.cl b/OpenCL/m22941_a3-pure.cl index 20d9a2735..7faa1040b 100644 --- a/OpenCL/m22941_a3-pure.cl +++ b/OpenCL/m22941_a3-pure.cl @@ -24,7 +24,7 @@ typedef struct pem } pem_t; -KERNEL_FQ void m22941_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) +KERNEL_FQ void HC_ATTR_SEQ m22941_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -270,7 +270,7 @@ KERNEL_FQ void m22941_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) } } -KERNEL_FQ void m22941_sxx (KERN_ATTR_VECTOR_ESALT (pem_t)) +KERNEL_FQ void HC_ATTR_SEQ m22941_sxx (KERN_ATTR_VECTOR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22951_a0-pure.cl b/OpenCL/m22951_a0-pure.cl index 8e6b1e615..33cb26990 100644 --- a/OpenCL/m22951_a0-pure.cl +++ b/OpenCL/m22951_a0-pure.cl @@ -26,7 +26,7 @@ typedef struct pem } pem_t; -KERNEL_FQ void m22951_mxx (KERN_ATTR_RULES_ESALT (pem_t)) +KERNEL_FQ void HC_ATTR_SEQ m22951_mxx (KERN_ATTR_RULES_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -261,7 +261,7 @@ KERNEL_FQ void m22951_mxx (KERN_ATTR_RULES_ESALT (pem_t)) } } -KERNEL_FQ void m22951_sxx (KERN_ATTR_RULES_ESALT (pem_t)) +KERNEL_FQ void HC_ATTR_SEQ m22951_sxx (KERN_ATTR_RULES_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22951_a1-pure.cl b/OpenCL/m22951_a1-pure.cl index 357627ec5..2079aff3f 100644 --- a/OpenCL/m22951_a1-pure.cl +++ b/OpenCL/m22951_a1-pure.cl @@ -24,7 +24,7 @@ typedef struct pem } pem_t; -KERNEL_FQ void m22951_mxx (KERN_ATTR_ESALT (pem_t)) +KERNEL_FQ void HC_ATTR_SEQ m22951_mxx (KERN_ATTR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -257,7 +257,7 @@ KERNEL_FQ void m22951_mxx (KERN_ATTR_ESALT (pem_t)) } } -KERNEL_FQ void m22951_sxx (KERN_ATTR_ESALT (pem_t)) +KERNEL_FQ void HC_ATTR_SEQ m22951_sxx (KERN_ATTR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22951_a3-pure.cl b/OpenCL/m22951_a3-pure.cl index 47e103d0b..019f91c37 100644 --- a/OpenCL/m22951_a3-pure.cl +++ b/OpenCL/m22951_a3-pure.cl @@ -24,7 +24,7 @@ typedef struct pem } pem_t; -KERNEL_FQ void m22951_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) +KERNEL_FQ void HC_ATTR_SEQ m22951_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -274,7 +274,7 @@ KERNEL_FQ void m22951_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) } } -KERNEL_FQ void m22951_sxx (KERN_ATTR_VECTOR_ESALT (pem_t)) +KERNEL_FQ void HC_ATTR_SEQ m22951_sxx (KERN_ATTR_VECTOR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m23001_a0-optimized.cl b/OpenCL/m23001_a0-optimized.cl index b9e4555b0..e5757d33c 100644 --- a/OpenCL/m23001_a0-optimized.cl +++ b/OpenCL/m23001_a0-optimized.cl @@ -26,7 +26,7 @@ typedef struct securezip } securezip_t; -KERNEL_FQ void m23001_m04 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23001_m04 (KERN_ATTR_RULES_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -352,15 +352,15 @@ KERNEL_FQ void m23001_m04 (KERN_ATTR_RULES_ESALT (securezip_t)) } } -KERNEL_FQ void m23001_m08 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23001_m08 (KERN_ATTR_RULES_ESALT (securezip_t)) { } -KERNEL_FQ void m23001_m16 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23001_m16 (KERN_ATTR_RULES_ESALT (securezip_t)) { } -KERNEL_FQ void m23001_s04 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23001_s04 (KERN_ATTR_RULES_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -686,10 +686,10 @@ KERNEL_FQ void m23001_s04 (KERN_ATTR_RULES_ESALT (securezip_t)) } } -KERNEL_FQ void m23001_s08 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23001_s08 (KERN_ATTR_RULES_ESALT (securezip_t)) { } -KERNEL_FQ void m23001_s16 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23001_s16 (KERN_ATTR_RULES_ESALT (securezip_t)) { } diff --git a/OpenCL/m23001_a0-pure.cl b/OpenCL/m23001_a0-pure.cl index 332893e12..af66056aa 100644 --- a/OpenCL/m23001_a0-pure.cl +++ b/OpenCL/m23001_a0-pure.cl @@ -26,7 +26,7 @@ typedef struct securezip } securezip_t; -KERNEL_FQ void m23001_mxx (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23001_mxx (KERN_ATTR_RULES_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -218,7 +218,7 @@ KERNEL_FQ void m23001_mxx (KERN_ATTR_RULES_ESALT (securezip_t)) } } -KERNEL_FQ void m23001_sxx (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23001_sxx (KERN_ATTR_RULES_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m23001_a1-optimized.cl b/OpenCL/m23001_a1-optimized.cl index 8df639eb4..c5e5e70fb 100644 --- a/OpenCL/m23001_a1-optimized.cl +++ b/OpenCL/m23001_a1-optimized.cl @@ -24,7 +24,7 @@ typedef struct securezip } securezip_t; -KERNEL_FQ void m23001_m04 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23001_m04 (KERN_ATTR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -408,15 +408,15 @@ KERNEL_FQ void m23001_m04 (KERN_ATTR_ESALT (securezip_t)) } } -KERNEL_FQ void m23001_m08 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23001_m08 (KERN_ATTR_ESALT (securezip_t)) { } -KERNEL_FQ void m23001_m16 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23001_m16 (KERN_ATTR_ESALT (securezip_t)) { } -KERNEL_FQ void m23001_s04 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23001_s04 (KERN_ATTR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -800,10 +800,10 @@ KERNEL_FQ void m23001_s04 (KERN_ATTR_ESALT (securezip_t)) } } -KERNEL_FQ void m23001_s08 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23001_s08 (KERN_ATTR_ESALT (securezip_t)) { } -KERNEL_FQ void m23001_s16 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23001_s16 (KERN_ATTR_ESALT (securezip_t)) { } diff --git a/OpenCL/m23001_a1-pure.cl b/OpenCL/m23001_a1-pure.cl index 5a5d009c5..65457567d 100644 --- a/OpenCL/m23001_a1-pure.cl +++ b/OpenCL/m23001_a1-pure.cl @@ -24,7 +24,7 @@ typedef struct securezip } securezip_t; -KERNEL_FQ void m23001_mxx (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23001_mxx (KERN_ATTR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -214,7 +214,7 @@ KERNEL_FQ void m23001_mxx (KERN_ATTR_ESALT (securezip_t)) } } -KERNEL_FQ void m23001_sxx (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23001_sxx (KERN_ATTR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m23001_a3-optimized.cl b/OpenCL/m23001_a3-optimized.cl index b8fb0b748..e0d22b5ce 100644 --- a/OpenCL/m23001_a3-optimized.cl +++ b/OpenCL/m23001_a3-optimized.cl @@ -728,7 +728,7 @@ DECLSPEC void m23001s (SHM_TYPE u32a *s_te0, SHM_TYPE u32a *s_te1, SHM_TYPE u32a } } -KERNEL_FQ void m23001_m04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23001_m04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base @@ -819,7 +819,7 @@ KERNEL_FQ void m23001_m04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) m23001m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m23001_m08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23001_m08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base @@ -910,7 +910,7 @@ KERNEL_FQ void m23001_m08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) m23001m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m23001_m16 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23001_m16 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base @@ -1001,7 +1001,7 @@ KERNEL_FQ void m23001_m16 (KERN_ATTR_VECTOR_ESALT (securezip_t)) m23001m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m23001_s04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23001_s04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base @@ -1092,7 +1092,7 @@ KERNEL_FQ void m23001_s04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) m23001s (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m23001_s08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23001_s08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base @@ -1183,7 +1183,7 @@ KERNEL_FQ void m23001_s08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) m23001s (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m23001_s16 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23001_s16 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base diff --git a/OpenCL/m23001_a3-pure.cl b/OpenCL/m23001_a3-pure.cl index 538106f76..4921f3429 100644 --- a/OpenCL/m23001_a3-pure.cl +++ b/OpenCL/m23001_a3-pure.cl @@ -24,7 +24,7 @@ typedef struct securezip } securezip_t; -KERNEL_FQ void m23001_mxx (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23001_mxx (KERN_ATTR_VECTOR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -227,7 +227,7 @@ KERNEL_FQ void m23001_mxx (KERN_ATTR_VECTOR_ESALT (securezip_t)) } } -KERNEL_FQ void m23001_sxx (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23001_sxx (KERN_ATTR_VECTOR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m23002_a0-optimized.cl b/OpenCL/m23002_a0-optimized.cl index 02deb7d1d..0f9c25051 100644 --- a/OpenCL/m23002_a0-optimized.cl +++ b/OpenCL/m23002_a0-optimized.cl @@ -26,7 +26,7 @@ typedef struct securezip } securezip_t; -KERNEL_FQ void m23002_m04 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23002_m04 (KERN_ATTR_RULES_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -405,15 +405,15 @@ KERNEL_FQ void m23002_m04 (KERN_ATTR_RULES_ESALT (securezip_t)) } } -KERNEL_FQ void m23002_m08 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23002_m08 (KERN_ATTR_RULES_ESALT (securezip_t)) { } -KERNEL_FQ void m23002_m16 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23002_m16 (KERN_ATTR_RULES_ESALT (securezip_t)) { } -KERNEL_FQ void m23002_s04 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23002_s04 (KERN_ATTR_RULES_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -792,10 +792,10 @@ KERNEL_FQ void m23002_s04 (KERN_ATTR_RULES_ESALT (securezip_t)) } } -KERNEL_FQ void m23002_s08 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23002_s08 (KERN_ATTR_RULES_ESALT (securezip_t)) { } -KERNEL_FQ void m23002_s16 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23002_s16 (KERN_ATTR_RULES_ESALT (securezip_t)) { } diff --git a/OpenCL/m23002_a0-pure.cl b/OpenCL/m23002_a0-pure.cl index 142053dd6..dc3aaa285 100644 --- a/OpenCL/m23002_a0-pure.cl +++ b/OpenCL/m23002_a0-pure.cl @@ -26,7 +26,7 @@ typedef struct securezip } securezip_t; -KERNEL_FQ void m23002_mxx (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23002_mxx (KERN_ATTR_RULES_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -271,7 +271,7 @@ KERNEL_FQ void m23002_mxx (KERN_ATTR_RULES_ESALT (securezip_t)) } } -KERNEL_FQ void m23002_sxx (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23002_sxx (KERN_ATTR_RULES_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m23002_a1-optimized.cl b/OpenCL/m23002_a1-optimized.cl index 5ca39b3f9..61bb6e749 100644 --- a/OpenCL/m23002_a1-optimized.cl +++ b/OpenCL/m23002_a1-optimized.cl @@ -24,7 +24,7 @@ typedef struct securezip } securezip_t; -KERNEL_FQ void m23002_m04 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23002_m04 (KERN_ATTR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -461,15 +461,15 @@ KERNEL_FQ void m23002_m04 (KERN_ATTR_ESALT (securezip_t)) } } -KERNEL_FQ void m23002_m08 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23002_m08 (KERN_ATTR_ESALT (securezip_t)) { } -KERNEL_FQ void m23002_m16 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23002_m16 (KERN_ATTR_ESALT (securezip_t)) { } -KERNEL_FQ void m23002_s04 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23002_s04 (KERN_ATTR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -906,10 +906,10 @@ KERNEL_FQ void m23002_s04 (KERN_ATTR_ESALT (securezip_t)) } } -KERNEL_FQ void m23002_s08 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23002_s08 (KERN_ATTR_ESALT (securezip_t)) { } -KERNEL_FQ void m23002_s16 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23002_s16 (KERN_ATTR_ESALT (securezip_t)) { } diff --git a/OpenCL/m23002_a1-pure.cl b/OpenCL/m23002_a1-pure.cl index ca1931c14..38509ae29 100644 --- a/OpenCL/m23002_a1-pure.cl +++ b/OpenCL/m23002_a1-pure.cl @@ -24,7 +24,7 @@ typedef struct securezip } securezip_t; -KERNEL_FQ void m23002_mxx (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23002_mxx (KERN_ATTR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -267,7 +267,7 @@ KERNEL_FQ void m23002_mxx (KERN_ATTR_ESALT (securezip_t)) } } -KERNEL_FQ void m23002_sxx (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23002_sxx (KERN_ATTR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m23002_a3-optimized.cl b/OpenCL/m23002_a3-optimized.cl index c5dd6af46..ddc15e43e 100644 --- a/OpenCL/m23002_a3-optimized.cl +++ b/OpenCL/m23002_a3-optimized.cl @@ -834,7 +834,7 @@ DECLSPEC void m23002s (SHM_TYPE u32a *s_te0, SHM_TYPE u32a *s_te1, SHM_TYPE u32a } } -KERNEL_FQ void m23002_m04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23002_m04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base @@ -925,7 +925,7 @@ KERNEL_FQ void m23002_m04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) m23002m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m23002_m08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23002_m08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base @@ -1016,7 +1016,7 @@ KERNEL_FQ void m23002_m08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) m23002m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m23002_m16 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23002_m16 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base @@ -1107,7 +1107,7 @@ KERNEL_FQ void m23002_m16 (KERN_ATTR_VECTOR_ESALT (securezip_t)) m23002m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m23002_s04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23002_s04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base @@ -1198,7 +1198,7 @@ KERNEL_FQ void m23002_s04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) m23002s (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m23002_s08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23002_s08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base @@ -1289,7 +1289,7 @@ KERNEL_FQ void m23002_s08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) m23002s (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m23002_s16 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23002_s16 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base diff --git a/OpenCL/m23002_a3-pure.cl b/OpenCL/m23002_a3-pure.cl index 99e99fb2e..dbb73d19f 100644 --- a/OpenCL/m23002_a3-pure.cl +++ b/OpenCL/m23002_a3-pure.cl @@ -24,7 +24,7 @@ typedef struct securezip } securezip_t; -KERNEL_FQ void m23002_mxx (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23002_mxx (KERN_ATTR_VECTOR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -280,7 +280,7 @@ KERNEL_FQ void m23002_mxx (KERN_ATTR_VECTOR_ESALT (securezip_t)) } } -KERNEL_FQ void m23002_sxx (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23002_sxx (KERN_ATTR_VECTOR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m23003_a0-optimized.cl b/OpenCL/m23003_a0-optimized.cl index 6a3c918de..7f1485308 100644 --- a/OpenCL/m23003_a0-optimized.cl +++ b/OpenCL/m23003_a0-optimized.cl @@ -26,7 +26,7 @@ typedef struct securezip } securezip_t; -KERNEL_FQ void m23003_m04 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23003_m04 (KERN_ATTR_RULES_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -407,15 +407,15 @@ KERNEL_FQ void m23003_m04 (KERN_ATTR_RULES_ESALT (securezip_t)) } } -KERNEL_FQ void m23003_m08 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23003_m08 (KERN_ATTR_RULES_ESALT (securezip_t)) { } -KERNEL_FQ void m23003_m16 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23003_m16 (KERN_ATTR_RULES_ESALT (securezip_t)) { } -KERNEL_FQ void m23003_s04 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23003_s04 (KERN_ATTR_RULES_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -796,10 +796,10 @@ KERNEL_FQ void m23003_s04 (KERN_ATTR_RULES_ESALT (securezip_t)) } } -KERNEL_FQ void m23003_s08 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23003_s08 (KERN_ATTR_RULES_ESALT (securezip_t)) { } -KERNEL_FQ void m23003_s16 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23003_s16 (KERN_ATTR_RULES_ESALT (securezip_t)) { } diff --git a/OpenCL/m23003_a0-pure.cl b/OpenCL/m23003_a0-pure.cl index 123fbda71..ad94c169e 100644 --- a/OpenCL/m23003_a0-pure.cl +++ b/OpenCL/m23003_a0-pure.cl @@ -26,7 +26,7 @@ typedef struct securezip } securezip_t; -KERNEL_FQ void m23003_mxx (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23003_mxx (KERN_ATTR_RULES_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -273,7 +273,7 @@ KERNEL_FQ void m23003_mxx (KERN_ATTR_RULES_ESALT (securezip_t)) } } -KERNEL_FQ void m23003_sxx (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23003_sxx (KERN_ATTR_RULES_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m23003_a1-optimized.cl b/OpenCL/m23003_a1-optimized.cl index de9ad1db1..a8a43040c 100644 --- a/OpenCL/m23003_a1-optimized.cl +++ b/OpenCL/m23003_a1-optimized.cl @@ -24,7 +24,7 @@ typedef struct securezip } securezip_t; -KERNEL_FQ void m23003_m04 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23003_m04 (KERN_ATTR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -463,15 +463,15 @@ KERNEL_FQ void m23003_m04 (KERN_ATTR_ESALT (securezip_t)) } } -KERNEL_FQ void m23003_m08 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23003_m08 (KERN_ATTR_ESALT (securezip_t)) { } -KERNEL_FQ void m23003_m16 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23003_m16 (KERN_ATTR_ESALT (securezip_t)) { } -KERNEL_FQ void m23003_s04 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23003_s04 (KERN_ATTR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -910,10 +910,10 @@ KERNEL_FQ void m23003_s04 (KERN_ATTR_ESALT (securezip_t)) } } -KERNEL_FQ void m23003_s08 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23003_s08 (KERN_ATTR_ESALT (securezip_t)) { } -KERNEL_FQ void m23003_s16 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23003_s16 (KERN_ATTR_ESALT (securezip_t)) { } diff --git a/OpenCL/m23003_a1-pure.cl b/OpenCL/m23003_a1-pure.cl index bc26fad52..16a4b6e59 100644 --- a/OpenCL/m23003_a1-pure.cl +++ b/OpenCL/m23003_a1-pure.cl @@ -24,7 +24,7 @@ typedef struct securezip } securezip_t; -KERNEL_FQ void m23003_mxx (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23003_mxx (KERN_ATTR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -269,7 +269,7 @@ KERNEL_FQ void m23003_mxx (KERN_ATTR_ESALT (securezip_t)) } } -KERNEL_FQ void m23003_sxx (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23003_sxx (KERN_ATTR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m23003_a3-optimized.cl b/OpenCL/m23003_a3-optimized.cl index 1d32074c3..ef1b334c6 100644 --- a/OpenCL/m23003_a3-optimized.cl +++ b/OpenCL/m23003_a3-optimized.cl @@ -838,7 +838,7 @@ DECLSPEC void m23003s (SHM_TYPE u32a *s_te0, SHM_TYPE u32a *s_te1, SHM_TYPE u32a } } -KERNEL_FQ void m23003_m04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23003_m04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base @@ -929,7 +929,7 @@ KERNEL_FQ void m23003_m04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) m23003m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m23003_m08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23003_m08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base @@ -1020,7 +1020,7 @@ KERNEL_FQ void m23003_m08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) m23003m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m23003_m16 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23003_m16 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base @@ -1111,7 +1111,7 @@ KERNEL_FQ void m23003_m16 (KERN_ATTR_VECTOR_ESALT (securezip_t)) m23003m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m23003_s04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23003_s04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base @@ -1202,7 +1202,7 @@ KERNEL_FQ void m23003_s04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) m23003s (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m23003_s08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23003_s08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base @@ -1293,7 +1293,7 @@ KERNEL_FQ void m23003_s08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) m23003s (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m23003_s16 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23003_s16 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base diff --git a/OpenCL/m23003_a3-pure.cl b/OpenCL/m23003_a3-pure.cl index 4c9d79332..5519c32ad 100644 --- a/OpenCL/m23003_a3-pure.cl +++ b/OpenCL/m23003_a3-pure.cl @@ -24,7 +24,7 @@ typedef struct securezip } securezip_t; -KERNEL_FQ void m23003_mxx (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23003_mxx (KERN_ATTR_VECTOR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -282,7 +282,7 @@ KERNEL_FQ void m23003_mxx (KERN_ATTR_VECTOR_ESALT (securezip_t)) } } -KERNEL_FQ void m23003_sxx (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ void HC_ATTR_SEQ m23003_sxx (KERN_ATTR_VECTOR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m23100-pure.cl b/OpenCL/m23100-pure.cl index bdc03f0dc..189460f82 100644 --- a/OpenCL/m23100-pure.cl +++ b/OpenCL/m23100-pure.cl @@ -68,7 +68,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m23100_init (KERN_ATTR_TMPS_ESALT (keychain_tmp_t, keychain_t)) +KERNEL_FQ void HC_ATTR_SEQ m23100_init (KERN_ATTR_TMPS_ESALT (keychain_tmp_t, keychain_t)) { /** * base @@ -140,7 +140,7 @@ KERNEL_FQ void m23100_init (KERN_ATTR_TMPS_ESALT (keychain_tmp_t, keychain_t)) } } -KERNEL_FQ void m23100_loop (KERN_ATTR_TMPS_ESALT (keychain_tmp_t, keychain_t)) +KERNEL_FQ void HC_ATTR_SEQ m23100_loop (KERN_ATTR_TMPS_ESALT (keychain_tmp_t, keychain_t)) { const u64 gid = get_global_id (0); @@ -225,7 +225,7 @@ KERNEL_FQ void m23100_loop (KERN_ATTR_TMPS_ESALT (keychain_tmp_t, keychain_t)) } } -KERNEL_FQ void m23100_comp (KERN_ATTR_TMPS_ESALT (keychain_tmp_t, keychain_t)) +KERNEL_FQ void HC_ATTR_SEQ m23100_comp (KERN_ATTR_TMPS_ESALT (keychain_tmp_t, keychain_t)) { /** * base diff --git a/OpenCL/m23200-pure.cl b/OpenCL/m23200-pure.cl index eebe40906..2ee8f5d90 100644 --- a/OpenCL/m23200-pure.cl +++ b/OpenCL/m23200-pure.cl @@ -63,7 +63,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m23200_init (KERN_ATTR_TMPS (xmpp_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m23200_init (KERN_ATTR_TMPS (xmpp_tmp_t)) { /** * base @@ -135,7 +135,7 @@ KERNEL_FQ void m23200_init (KERN_ATTR_TMPS (xmpp_tmp_t)) } } -KERNEL_FQ void m23200_loop (KERN_ATTR_TMPS (xmpp_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m23200_loop (KERN_ATTR_TMPS (xmpp_tmp_t)) { const u64 gid = get_global_id (0); @@ -220,7 +220,7 @@ KERNEL_FQ void m23200_loop (KERN_ATTR_TMPS (xmpp_tmp_t)) } } -KERNEL_FQ void m23200_comp (KERN_ATTR_TMPS (xmpp_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m23200_comp (KERN_ATTR_TMPS (xmpp_tmp_t)) { /** * base diff --git a/OpenCL/m23300-pure.cl b/OpenCL/m23300-pure.cl index 485340612..706017e57 100644 --- a/OpenCL/m23300-pure.cl +++ b/OpenCL/m23300-pure.cl @@ -69,7 +69,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m23300_init (KERN_ATTR_TMPS_ESALT (iwork_tmp_t, iwork_t)) +KERNEL_FQ void HC_ATTR_SEQ m23300_init (KERN_ATTR_TMPS_ESALT (iwork_tmp_t, iwork_t)) { /** * base @@ -158,7 +158,7 @@ KERNEL_FQ void m23300_init (KERN_ATTR_TMPS_ESALT (iwork_tmp_t, iwork_t)) } } -KERNEL_FQ void m23300_loop (KERN_ATTR_TMPS_ESALT (iwork_tmp_t, iwork_t)) +KERNEL_FQ void HC_ATTR_SEQ m23300_loop (KERN_ATTR_TMPS_ESALT (iwork_tmp_t, iwork_t)) { const u64 gid = get_global_id (0); @@ -243,7 +243,7 @@ KERNEL_FQ void m23300_loop (KERN_ATTR_TMPS_ESALT (iwork_tmp_t, iwork_t)) } } -KERNEL_FQ void m23300_comp (KERN_ATTR_TMPS_ESALT (iwork_tmp_t, iwork_t)) +KERNEL_FQ void HC_ATTR_SEQ m23300_comp (KERN_ATTR_TMPS_ESALT (iwork_tmp_t, iwork_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m23400-pure.cl b/OpenCL/m23400-pure.cl index 091dc8ca6..9690388c7 100644 --- a/OpenCL/m23400-pure.cl +++ b/OpenCL/m23400-pure.cl @@ -69,7 +69,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m23400_init (KERN_ATTR_TMPS (bitwarden_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m23400_init (KERN_ATTR_TMPS (bitwarden_tmp_t)) { /** * base @@ -150,7 +150,7 @@ KERNEL_FQ void m23400_init (KERN_ATTR_TMPS (bitwarden_tmp_t)) tmps[gid].out[7] = tmps[gid].dgst[7]; } -KERNEL_FQ void m23400_loop (KERN_ATTR_TMPS (bitwarden_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m23400_loop (KERN_ATTR_TMPS (bitwarden_tmp_t)) { const u64 gid = get_global_id (0); @@ -253,7 +253,7 @@ KERNEL_FQ void m23400_loop (KERN_ATTR_TMPS (bitwarden_tmp_t)) unpackv (tmps, out, gid, 7, out[7]); } -KERNEL_FQ void m23400_init2 (KERN_ATTR_TMPS (bitwarden_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m23400_init2 (KERN_ATTR_TMPS (bitwarden_tmp_t)) { /** * base @@ -345,7 +345,7 @@ KERNEL_FQ void m23400_init2 (KERN_ATTR_TMPS (bitwarden_tmp_t)) tmps[gid].out[7] = tmps[gid].dgst[7]; } -KERNEL_FQ void m23400_loop2 (KERN_ATTR_TMPS (bitwarden_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m23400_loop2 (KERN_ATTR_TMPS (bitwarden_tmp_t)) { const u64 gid = get_global_id (0); @@ -448,7 +448,7 @@ KERNEL_FQ void m23400_loop2 (KERN_ATTR_TMPS (bitwarden_tmp_t)) unpackv (tmps, out, gid, 7, out[7]); } -KERNEL_FQ void m23400_comp (KERN_ATTR_TMPS (bitwarden_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m23400_comp (KERN_ATTR_TMPS (bitwarden_tmp_t)) { /** * base diff --git a/OpenCL/m23500-pure.cl b/OpenCL/m23500-pure.cl index 23def62fe..5847d5351 100644 --- a/OpenCL/m23500-pure.cl +++ b/OpenCL/m23500-pure.cl @@ -93,7 +93,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void m23500_init (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) +KERNEL_FQ void HC_ATTR_SEQ m23500_init (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) { /** * base @@ -197,7 +197,7 @@ KERNEL_FQ void m23500_init (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) } } -KERNEL_FQ void m23500_loop (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) +KERNEL_FQ void HC_ATTR_SEQ m23500_loop (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) { const u64 gid = get_global_id (0); @@ -323,7 +323,7 @@ KERNEL_FQ void m23500_loop (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) } } -KERNEL_FQ void m23500_init2 (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) +KERNEL_FQ void HC_ATTR_SEQ m23500_init2 (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) { /** * base @@ -377,7 +377,7 @@ KERNEL_FQ void m23500_init2 (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) } } -KERNEL_FQ void m23500_loop2 (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) +KERNEL_FQ void HC_ATTR_SEQ m23500_loop2 (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) { /** * base @@ -498,7 +498,7 @@ KERNEL_FQ void m23500_loop2 (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) } } -KERNEL_FQ void m23500_comp (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) +KERNEL_FQ void HC_ATTR_SEQ m23500_comp (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) { /** * base diff --git a/OpenCL/m23600-pure.cl b/OpenCL/m23600-pure.cl index 41f31a873..248c13510 100644 --- a/OpenCL/m23600-pure.cl +++ b/OpenCL/m23600-pure.cl @@ -93,7 +93,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void m23600_init (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) +KERNEL_FQ void HC_ATTR_SEQ m23600_init (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) { /** * base @@ -197,7 +197,7 @@ KERNEL_FQ void m23600_init (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) } } -KERNEL_FQ void m23600_loop (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) +KERNEL_FQ void HC_ATTR_SEQ m23600_loop (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) { const u64 gid = get_global_id (0); @@ -323,7 +323,7 @@ KERNEL_FQ void m23600_loop (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) } } -KERNEL_FQ void m23600_init2 (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) +KERNEL_FQ void HC_ATTR_SEQ m23600_init2 (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) { /** * base @@ -389,7 +389,7 @@ KERNEL_FQ void m23600_init2 (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) } } -KERNEL_FQ void m23600_loop2 (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) +KERNEL_FQ void HC_ATTR_SEQ m23600_loop2 (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) { /** * base @@ -514,7 +514,7 @@ KERNEL_FQ void m23600_loop2 (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) } } -KERNEL_FQ void m23600_comp (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) +KERNEL_FQ void HC_ATTR_SEQ m23600_comp (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) { /** * base diff --git a/OpenCL/m23700-optimized.cl b/OpenCL/m23700-optimized.cl index c3c823464..799cfe84f 100644 --- a/OpenCL/m23700-optimized.cl +++ b/OpenCL/m23700-optimized.cl @@ -137,7 +137,7 @@ DECLSPEC u32 round_crc32_16 (const u32 crc32, PRIVATE_AS const u32 *buf, const u return c; } -KERNEL_FQ void m23700_init (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) +KERNEL_FQ void HC_ATTR_SEQ m23700_init (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) { /** * base @@ -155,7 +155,7 @@ KERNEL_FQ void m23700_init (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) } /* -KERNEL_FQ void m23700_loop (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) +KERNEL_FQ void HC_ATTR_SEQ m23700_loop (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) { const u64 gid = get_global_id (0); @@ -490,7 +490,7 @@ KERNEL_FQ void m23700_loop (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) } */ -KERNEL_FQ void m23700_loop (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) +KERNEL_FQ void HC_ATTR_SEQ m23700_loop (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) { const u64 gid = get_global_id (0); @@ -679,7 +679,7 @@ KERNEL_FQ void m23700_loop (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) tmps[gid].dgst[init_pos + 1][4] = dgst[4]; } -KERNEL_FQ void m23700_comp (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) +KERNEL_FQ void HC_ATTR_SEQ m23700_comp (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m23700-pure.cl b/OpenCL/m23700-pure.cl index 468711e2f..9093f6201 100644 --- a/OpenCL/m23700-pure.cl +++ b/OpenCL/m23700-pure.cl @@ -836,7 +836,7 @@ DECLSPEC void sha1_update_rar29 (PRIVATE_AS sha1_ctx_t *ctx, PRIVATE_AS u32 *w, } } -KERNEL_FQ void m23700_init (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) +KERNEL_FQ void HC_ATTR_SEQ m23700_init (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) { /** * base @@ -904,7 +904,7 @@ KERNEL_FQ void m23700_init (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) tmps[gid].iv[3] = 0; } -KERNEL_FQ void m23700_loop (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) +KERNEL_FQ void HC_ATTR_SEQ m23700_loop (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) { const u64 gid = get_global_id (0); @@ -1020,7 +1020,7 @@ KERNEL_FQ void m23700_loop (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) } } -KERNEL_FQ void m23700_comp (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) +KERNEL_FQ void HC_ATTR_SEQ m23700_comp (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m23800-optimized.cl b/OpenCL/m23800-optimized.cl index 2cefcf827..ce1e60a1a 100644 --- a/OpenCL/m23800-optimized.cl +++ b/OpenCL/m23800-optimized.cl @@ -50,7 +50,7 @@ typedef struct rar3_hook } rar3_hook_t; -KERNEL_FQ void m23800_init (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) +KERNEL_FQ void HC_ATTR_SEQ m23800_init (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) { /** * base @@ -67,7 +67,7 @@ KERNEL_FQ void m23800_init (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, tmps[gid].dgst[0][4] = SHA1M_E; } -KERNEL_FQ void m23800_loop (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) +KERNEL_FQ void HC_ATTR_SEQ m23800_loop (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) { const u64 gid = get_global_id (0); @@ -256,7 +256,7 @@ KERNEL_FQ void m23800_loop (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, tmps[gid].dgst[init_pos + 1][4] = dgst[4]; } -KERNEL_FQ void m23800_hook23 (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) +KERNEL_FQ void HC_ATTR_SEQ m23800_hook23 (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -487,7 +487,7 @@ KERNEL_FQ void m23800_hook23 (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_ hooks[gid].first_block_decrypted[3] = hc_swap32_S (out[3]); } -KERNEL_FQ void m23800_comp (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) +KERNEL_FQ void HC_ATTR_SEQ m23800_comp (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) { /** * base diff --git a/OpenCL/m23800-pure.cl b/OpenCL/m23800-pure.cl index 8b71ae0b8..66b4d025e 100644 --- a/OpenCL/m23800-pure.cl +++ b/OpenCL/m23800-pure.cl @@ -749,7 +749,7 @@ DECLSPEC void sha1_update_rar29 (PRIVATE_AS sha1_ctx_t *ctx, PRIVATE_AS u32 *w, } } -KERNEL_FQ void m23800_init (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) +KERNEL_FQ void HC_ATTR_SEQ m23800_init (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) { /** * base @@ -817,7 +817,7 @@ KERNEL_FQ void m23800_init (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, tmps[gid].iv[3] = 0; } -KERNEL_FQ void m23800_loop (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) +KERNEL_FQ void HC_ATTR_SEQ m23800_loop (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) { const u64 gid = get_global_id (0); @@ -933,7 +933,7 @@ KERNEL_FQ void m23800_loop (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, } } -KERNEL_FQ void m23800_hook23 (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) +KERNEL_FQ void HC_ATTR_SEQ m23800_hook23 (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -1088,7 +1088,7 @@ KERNEL_FQ void m23800_hook23 (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_ hooks[gid].first_block_decrypted[3] = hc_swap32_S (out[3]); } -KERNEL_FQ void m23800_comp (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) +KERNEL_FQ void HC_ATTR_SEQ m23800_comp (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) { /** * base diff --git a/OpenCL/m23900-pure.cl b/OpenCL/m23900-pure.cl index bc99e371d..4368f5cc9 100644 --- a/OpenCL/m23900-pure.cl +++ b/OpenCL/m23900-pure.cl @@ -29,7 +29,7 @@ typedef struct bestcrypt } bestcrypt_t; -KERNEL_FQ void m23900_init (KERN_ATTR_TMPS_ESALT (bestcrypt_tmp_t, bestcrypt_t)) +KERNEL_FQ void HC_ATTR_SEQ m23900_init (KERN_ATTR_TMPS_ESALT (bestcrypt_tmp_t, bestcrypt_t)) { const u64 gid = get_global_id (0); @@ -103,7 +103,7 @@ KERNEL_FQ void m23900_init (KERN_ATTR_TMPS_ESALT (bestcrypt_tmp_t, bestcrypt_t)) } } -KERNEL_FQ void m23900_loop (KERN_ATTR_TMPS_ESALT (bestcrypt_tmp_t, bestcrypt_t)) +KERNEL_FQ void HC_ATTR_SEQ m23900_loop (KERN_ATTR_TMPS_ESALT (bestcrypt_tmp_t, bestcrypt_t)) { const u64 gid = get_global_id (0); @@ -251,7 +251,7 @@ KERNEL_FQ void m23900_loop (KERN_ATTR_TMPS_ESALT (bestcrypt_tmp_t, bestcrypt_t)) tmps[gid].out[7] = digest[7]; } -KERNEL_FQ void m23900_comp (KERN_ATTR_TMPS_ESALT (bestcrypt_tmp_t, bestcrypt_t)) +KERNEL_FQ void HC_ATTR_SEQ m23900_comp (KERN_ATTR_TMPS_ESALT (bestcrypt_tmp_t, bestcrypt_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m24000-pure.cl b/OpenCL/m24000-pure.cl index 7d1dce20d..fb15c5066 100644 --- a/OpenCL/m24000-pure.cl +++ b/OpenCL/m24000-pure.cl @@ -437,7 +437,7 @@ DECLSPEC void keccak_transform_S (PRIVATE_AS u64 *st) } } -KERNEL_FQ void m24000_init (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, bestcrypt_scrypt_t)) +KERNEL_FQ void HC_ATTR_SEQ m24000_init (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, bestcrypt_scrypt_t)) { /** * base @@ -510,7 +510,7 @@ KERNEL_FQ void m24000_init (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, bestcrypt_scrypt } } -KERNEL_FQ void m24000_loop (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, bestcrypt_scrypt_t)) +KERNEL_FQ void HC_ATTR_SEQ m24000_loop (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, bestcrypt_scrypt_t)) { const u64 gid = get_global_id (0); @@ -548,7 +548,7 @@ KERNEL_FQ void m24000_loop (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, bestcrypt_scrypt #endif } -KERNEL_FQ void m24000_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, bestcrypt_scrypt_t)) +KERNEL_FQ void HC_ATTR_SEQ m24000_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, bestcrypt_scrypt_t)) { /** * base diff --git a/OpenCL/m24100-pure.cl b/OpenCL/m24100-pure.cl index 8f8842e7c..06304c12d 100644 --- a/OpenCL/m24100-pure.cl +++ b/OpenCL/m24100-pure.cl @@ -73,7 +73,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m24100_init (KERN_ATTR_TMPS_ESALT (mongodb_sha1_tmp_t, mongodb_sha1_t)) +KERNEL_FQ void HC_ATTR_SEQ m24100_init (KERN_ATTR_TMPS_ESALT (mongodb_sha1_tmp_t, mongodb_sha1_t)) { /** * modifier @@ -199,7 +199,7 @@ KERNEL_FQ void m24100_init (KERN_ATTR_TMPS_ESALT (mongodb_sha1_tmp_t, mongodb_sh } } -KERNEL_FQ void m24100_loop (KERN_ATTR_TMPS_ESALT (mongodb_sha1_tmp_t, mongodb_sha1_t)) +KERNEL_FQ void HC_ATTR_SEQ m24100_loop (KERN_ATTR_TMPS_ESALT (mongodb_sha1_tmp_t, mongodb_sha1_t)) { const u64 gid = get_global_id (0); @@ -284,7 +284,7 @@ KERNEL_FQ void m24100_loop (KERN_ATTR_TMPS_ESALT (mongodb_sha1_tmp_t, mongodb_sh } } -KERNEL_FQ void m24100_comp (KERN_ATTR_TMPS_ESALT (mongodb_sha1_tmp_t, mongodb_sha1_t)) +KERNEL_FQ void HC_ATTR_SEQ m24100_comp (KERN_ATTR_TMPS_ESALT (mongodb_sha1_tmp_t, mongodb_sha1_t)) { /** * base diff --git a/OpenCL/m24200-pure.cl b/OpenCL/m24200-pure.cl index 6cf9e8a79..918b12890 100644 --- a/OpenCL/m24200-pure.cl +++ b/OpenCL/m24200-pure.cl @@ -78,7 +78,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m24200_init (KERN_ATTR_TMPS_ESALT (mongodb_sha256_tmp_t, mongodb_sha256_t)) +KERNEL_FQ void HC_ATTR_SEQ m24200_init (KERN_ATTR_TMPS_ESALT (mongodb_sha256_tmp_t, mongodb_sha256_t)) { /** * base @@ -162,7 +162,7 @@ KERNEL_FQ void m24200_init (KERN_ATTR_TMPS_ESALT (mongodb_sha256_tmp_t, mongodb_ } } -KERNEL_FQ void m24200_loop (KERN_ATTR_TMPS_ESALT (mongodb_sha256_tmp_t, mongodb_sha256_t)) +KERNEL_FQ void HC_ATTR_SEQ m24200_loop (KERN_ATTR_TMPS_ESALT (mongodb_sha256_tmp_t, mongodb_sha256_t)) { const u64 gid = get_global_id (0); @@ -268,7 +268,7 @@ KERNEL_FQ void m24200_loop (KERN_ATTR_TMPS_ESALT (mongodb_sha256_tmp_t, mongodb_ } } -KERNEL_FQ void m24200_comp (KERN_ATTR_TMPS_ESALT (mongodb_sha256_tmp_t, mongodb_sha256_t)) +KERNEL_FQ void HC_ATTR_SEQ m24200_comp (KERN_ATTR_TMPS_ESALT (mongodb_sha256_tmp_t, mongodb_sha256_t)) { /** * base diff --git a/OpenCL/m24300_a0-optimized.cl b/OpenCL/m24300_a0-optimized.cl index 5f595ac64..c07d38750 100644 --- a/OpenCL/m24300_a0-optimized.cl +++ b/OpenCL/m24300_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m24300_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m24300_m04 (KERN_ATTR_RULES ()) { /** * base @@ -635,15 +635,15 @@ KERNEL_FQ void m24300_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m24300_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m24300_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m24300_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m24300_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m24300_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m24300_s04 (KERN_ATTR_RULES ()) { /** * base @@ -1263,10 +1263,10 @@ KERNEL_FQ void m24300_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m24300_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m24300_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m24300_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m24300_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m24300_a0-pure.cl b/OpenCL/m24300_a0-pure.cl index f4d9ea8ba..8b5a9d24f 100644 --- a/OpenCL/m24300_a0-pure.cl +++ b/OpenCL/m24300_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m24300_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m24300_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -142,7 +142,7 @@ KERNEL_FQ void m24300_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m24300_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m24300_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m24300_a1-optimized.cl b/OpenCL/m24300_a1-optimized.cl index 153ba475a..ef96f2340 100644 --- a/OpenCL/m24300_a1-optimized.cl +++ b/OpenCL/m24300_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m24300_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24300_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -689,15 +689,15 @@ KERNEL_FQ void m24300_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m24300_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24300_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m24300_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24300_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m24300_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24300_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1372,10 +1372,10 @@ KERNEL_FQ void m24300_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m24300_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24300_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m24300_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24300_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m24300_a1-pure.cl b/OpenCL/m24300_a1-pure.cl index d5d00c6eb..5de3e967d 100644 --- a/OpenCL/m24300_a1-pure.cl +++ b/OpenCL/m24300_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m24300_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24300_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -138,7 +138,7 @@ KERNEL_FQ void m24300_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m24300_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24300_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m24300_a3-optimized.cl b/OpenCL/m24300_a3-optimized.cl index c48755420..d7978686f 100644 --- a/OpenCL/m24300_a3-optimized.cl +++ b/OpenCL/m24300_a3-optimized.cl @@ -1162,7 +1162,7 @@ DECLSPEC void m24300s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m24300_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24300_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -1232,7 +1232,7 @@ KERNEL_FQ void m24300_m04 (KERN_ATTR_BASIC ()) m24300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m24300_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24300_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -1302,7 +1302,7 @@ KERNEL_FQ void m24300_m08 (KERN_ATTR_BASIC ()) m24300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m24300_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24300_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -1372,7 +1372,7 @@ KERNEL_FQ void m24300_m16 (KERN_ATTR_BASIC ()) m24300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m24300_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24300_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1442,7 +1442,7 @@ KERNEL_FQ void m24300_s04 (KERN_ATTR_BASIC ()) m24300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m24300_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24300_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1512,7 +1512,7 @@ KERNEL_FQ void m24300_s08 (KERN_ATTR_BASIC ()) m24300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m24300_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24300_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m24300_a3-pure.cl b/OpenCL/m24300_a3-pure.cl index 776d6dfaa..4aea2249c 100644 --- a/OpenCL/m24300_a3-pure.cl +++ b/OpenCL/m24300_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m24300_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m24300_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -162,7 +162,7 @@ KERNEL_FQ void m24300_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m24300_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m24300_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m24410-pure.cl b/OpenCL/m24410-pure.cl index d0553cb40..474a648c1 100644 --- a/OpenCL/m24410-pure.cl +++ b/OpenCL/m24410-pure.cl @@ -90,7 +90,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m24410_init (KERN_ATTR_TMPS_ESALT (pkcs_sha1_tmp_t, pkcs_t)) +KERNEL_FQ void HC_ATTR_SEQ m24410_init (KERN_ATTR_TMPS_ESALT (pkcs_sha1_tmp_t, pkcs_t)) { /** * base @@ -169,7 +169,7 @@ KERNEL_FQ void m24410_init (KERN_ATTR_TMPS_ESALT (pkcs_sha1_tmp_t, pkcs_t)) } } -KERNEL_FQ void m24410_loop (KERN_ATTR_TMPS_ESALT (pkcs_sha1_tmp_t, pkcs_t)) +KERNEL_FQ void HC_ATTR_SEQ m24410_loop (KERN_ATTR_TMPS_ESALT (pkcs_sha1_tmp_t, pkcs_t)) { const u64 gid = get_global_id (0); @@ -261,7 +261,7 @@ KERNEL_FQ void m24410_loop (KERN_ATTR_TMPS_ESALT (pkcs_sha1_tmp_t, pkcs_t)) } } -KERNEL_FQ void m24410_comp (KERN_ATTR_TMPS_ESALT (pkcs_sha1_tmp_t, pkcs_t)) +KERNEL_FQ void HC_ATTR_SEQ m24410_comp (KERN_ATTR_TMPS_ESALT (pkcs_sha1_tmp_t, pkcs_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m24420-pure.cl b/OpenCL/m24420-pure.cl index 2da61b238..5eb0140e0 100644 --- a/OpenCL/m24420-pure.cl +++ b/OpenCL/m24420-pure.cl @@ -89,7 +89,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m24420_init (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) +KERNEL_FQ void HC_ATTR_SEQ m24420_init (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) { /** * base @@ -173,7 +173,7 @@ KERNEL_FQ void m24420_init (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) } } -KERNEL_FQ void m24420_loop (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) +KERNEL_FQ void HC_ATTR_SEQ m24420_loop (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) { const u64 gid = get_global_id (0); @@ -279,7 +279,7 @@ KERNEL_FQ void m24420_loop (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) } } -KERNEL_FQ void m24420_comp (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) +KERNEL_FQ void HC_ATTR_SEQ m24420_comp (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m24500-pure.cl b/OpenCL/m24500-pure.cl index 2eaf5e8c8..312778e36 100644 --- a/OpenCL/m24500-pure.cl +++ b/OpenCL/m24500-pure.cl @@ -131,7 +131,7 @@ DECLSPEC void sha1_run (PRIVATE_AS u32 *w, PRIVATE_AS u32 *res) res[4] = digest[4]; } -KERNEL_FQ void m24500_init (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, telegram_t)) +KERNEL_FQ void HC_ATTR_SEQ m24500_init (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, telegram_t)) { /** * base @@ -266,7 +266,7 @@ KERNEL_FQ void m24500_init (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, telegram_t)) } } -KERNEL_FQ void m24500_loop (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, telegram_t)) +KERNEL_FQ void HC_ATTR_SEQ m24500_loop (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, telegram_t)) { const u64 gid = get_global_id (0); @@ -392,7 +392,7 @@ KERNEL_FQ void m24500_loop (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, telegram_t)) } } -KERNEL_FQ void m24500_comp (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, telegram_t)) +KERNEL_FQ void HC_ATTR_SEQ m24500_comp (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, telegram_t)) { /** * base diff --git a/OpenCL/m24610-pure.cl b/OpenCL/m24610-pure.cl index 798070ddb..ff0de9bc9 100644 --- a/OpenCL/m24610-pure.cl +++ b/OpenCL/m24610-pure.cl @@ -73,7 +73,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m24610_init (KERN_ATTR_TMPS_ESALT (sqlcipher_sha1_tmp_t, sqlcipher_t)) +KERNEL_FQ void HC_ATTR_SEQ m24610_init (KERN_ATTR_TMPS_ESALT (sqlcipher_sha1_tmp_t, sqlcipher_t)) { /** * base @@ -145,7 +145,7 @@ KERNEL_FQ void m24610_init (KERN_ATTR_TMPS_ESALT (sqlcipher_sha1_tmp_t, sqlciphe } } -KERNEL_FQ void m24610_loop (KERN_ATTR_TMPS_ESALT (sqlcipher_sha1_tmp_t, sqlcipher_t)) +KERNEL_FQ void HC_ATTR_SEQ m24610_loop (KERN_ATTR_TMPS_ESALT (sqlcipher_sha1_tmp_t, sqlcipher_t)) { const u64 gid = get_global_id (0); @@ -230,7 +230,7 @@ KERNEL_FQ void m24610_loop (KERN_ATTR_TMPS_ESALT (sqlcipher_sha1_tmp_t, sqlciphe } } -KERNEL_FQ void m24610_comp (KERN_ATTR_TMPS_ESALT (sqlcipher_sha1_tmp_t, sqlcipher_t)) +KERNEL_FQ void HC_ATTR_SEQ m24610_comp (KERN_ATTR_TMPS_ESALT (sqlcipher_sha1_tmp_t, sqlcipher_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m24620-pure.cl b/OpenCL/m24620-pure.cl index 863e9cc31..3ecb175de 100644 --- a/OpenCL/m24620-pure.cl +++ b/OpenCL/m24620-pure.cl @@ -79,7 +79,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m24620_init (KERN_ATTR_TMPS_ESALT (sqlcipher_sha256_tmp_t, sqlcipher_t)) +KERNEL_FQ void HC_ATTR_SEQ m24620_init (KERN_ATTR_TMPS_ESALT (sqlcipher_sha256_tmp_t, sqlcipher_t)) { /** * base @@ -163,7 +163,7 @@ KERNEL_FQ void m24620_init (KERN_ATTR_TMPS_ESALT (sqlcipher_sha256_tmp_t, sqlcip } } -KERNEL_FQ void m24620_loop (KERN_ATTR_TMPS_ESALT (sqlcipher_sha256_tmp_t, sqlcipher_t)) +KERNEL_FQ void HC_ATTR_SEQ m24620_loop (KERN_ATTR_TMPS_ESALT (sqlcipher_sha256_tmp_t, sqlcipher_t)) { const u64 gid = get_global_id (0); @@ -269,7 +269,7 @@ KERNEL_FQ void m24620_loop (KERN_ATTR_TMPS_ESALT (sqlcipher_sha256_tmp_t, sqlcip } } -KERNEL_FQ void m24620_comp (KERN_ATTR_TMPS_ESALT (sqlcipher_sha256_tmp_t, sqlcipher_t)) +KERNEL_FQ void HC_ATTR_SEQ m24620_comp (KERN_ATTR_TMPS_ESALT (sqlcipher_sha256_tmp_t, sqlcipher_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m24630-pure.cl b/OpenCL/m24630-pure.cl index d1c26a400..d2d7b7f61 100644 --- a/OpenCL/m24630-pure.cl +++ b/OpenCL/m24630-pure.cl @@ -95,7 +95,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void m24630_init (KERN_ATTR_TMPS_ESALT (sqlcipher_sha512_tmp_t, sqlcipher_t)) +KERNEL_FQ void HC_ATTR_SEQ m24630_init (KERN_ATTR_TMPS_ESALT (sqlcipher_sha512_tmp_t, sqlcipher_t)) { /** * base @@ -199,7 +199,7 @@ KERNEL_FQ void m24630_init (KERN_ATTR_TMPS_ESALT (sqlcipher_sha512_tmp_t, sqlcip } } -KERNEL_FQ void m24630_loop (KERN_ATTR_TMPS_ESALT (sqlcipher_sha512_tmp_t, sqlcipher_t)) +KERNEL_FQ void HC_ATTR_SEQ m24630_loop (KERN_ATTR_TMPS_ESALT (sqlcipher_sha512_tmp_t, sqlcipher_t)) { const u64 gid = get_global_id (0); @@ -325,7 +325,7 @@ KERNEL_FQ void m24630_loop (KERN_ATTR_TMPS_ESALT (sqlcipher_sha512_tmp_t, sqlcip } } -KERNEL_FQ void m24630_comp (KERN_ATTR_TMPS_ESALT (sqlcipher_sha512_tmp_t, sqlcipher_t)) +KERNEL_FQ void HC_ATTR_SEQ m24630_comp (KERN_ATTR_TMPS_ESALT (sqlcipher_sha512_tmp_t, sqlcipher_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m24700_a0-optimized.cl b/OpenCL/m24700_a0-optimized.cl index 8a351fb6f..f43c2f74a 100644 --- a/OpenCL/m24700_a0-optimized.cl +++ b/OpenCL/m24700_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m24700_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m24700_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -240,15 +240,15 @@ KERNEL_FQ void m24700_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m24700_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m24700_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m24700_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m24700_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m24700_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m24700_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -487,10 +487,10 @@ KERNEL_FQ void m24700_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m24700_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m24700_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m24700_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m24700_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m24700_a0-pure.cl b/OpenCL/m24700_a0-pure.cl index afffe62cf..ab5cd2f66 100644 --- a/OpenCL/m24700_a0-pure.cl +++ b/OpenCL/m24700_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m24700_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m24700_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -73,7 +73,7 @@ KERNEL_FQ void m24700_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m24700_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m24700_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m24700_a1-optimized.cl b/OpenCL/m24700_a1-optimized.cl index 65f3bd1ac..364f6c947 100644 --- a/OpenCL/m24700_a1-optimized.cl +++ b/OpenCL/m24700_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m24700_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24700_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -297,15 +297,15 @@ KERNEL_FQ void m24700_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m24700_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24700_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m24700_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24700_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m24700_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24700_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -603,10 +603,10 @@ KERNEL_FQ void m24700_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m24700_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24700_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m24700_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24700_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m24700_a1-pure.cl b/OpenCL/m24700_a1-pure.cl index 35c81b748..6413c850e 100644 --- a/OpenCL/m24700_a1-pure.cl +++ b/OpenCL/m24700_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m24700_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24700_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void m24700_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m24700_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24700_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m24700_a3-optimized.cl b/OpenCL/m24700_a3-optimized.cl index 231f129de..4c98c19a2 100644 --- a/OpenCL/m24700_a3-optimized.cl +++ b/OpenCL/m24700_a3-optimized.cl @@ -473,7 +473,7 @@ DECLSPEC void m24700s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m24700_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24700_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -526,7 +526,7 @@ KERNEL_FQ void m24700_m04 (KERN_ATTR_BASIC ()) m24700m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m24700_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24700_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -579,7 +579,7 @@ KERNEL_FQ void m24700_m08 (KERN_ATTR_BASIC ()) m24700m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m24700_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24700_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -632,7 +632,7 @@ KERNEL_FQ void m24700_m16 (KERN_ATTR_BASIC ()) m24700m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m24700_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24700_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -685,7 +685,7 @@ KERNEL_FQ void m24700_s04 (KERN_ATTR_BASIC ()) m24700s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m24700_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24700_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -738,7 +738,7 @@ KERNEL_FQ void m24700_s08 (KERN_ATTR_BASIC ()) m24700s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m24700_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24700_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m24700_a3-pure.cl b/OpenCL/m24700_a3-pure.cl index 081c2bc22..1698b0a61 100644 --- a/OpenCL/m24700_a3-pure.cl +++ b/OpenCL/m24700_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m24700_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m24700_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -82,7 +82,7 @@ KERNEL_FQ void m24700_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m24700_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m24700_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m24800_a0-optimized.cl b/OpenCL/m24800_a0-optimized.cl index 23be925b2..71fb8a20c 100644 --- a/OpenCL/m24800_a0-optimized.cl +++ b/OpenCL/m24800_a0-optimized.cl @@ -105,7 +105,7 @@ DECLSPEC void hmac_sha1_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_A sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m24800_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m24800_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -219,15 +219,15 @@ KERNEL_FQ void m24800_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m24800_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m24800_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m24800_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m24800_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m24800_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m24800_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -353,10 +353,10 @@ KERNEL_FQ void m24800_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m24800_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m24800_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m24800_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m24800_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m24800_a0-pure.cl b/OpenCL/m24800_a0-pure.cl index 512ecec1c..7085425b3 100644 --- a/OpenCL/m24800_a0-pure.cl +++ b/OpenCL/m24800_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m24800_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m24800_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -72,7 +72,7 @@ KERNEL_FQ void m24800_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m24800_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m24800_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m24800_a1-optimized.cl b/OpenCL/m24800_a1-optimized.cl index fe26c52ca..b58cef9f8 100644 --- a/OpenCL/m24800_a1-optimized.cl +++ b/OpenCL/m24800_a1-optimized.cl @@ -103,7 +103,7 @@ DECLSPEC void hmac_sha1_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_A sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m24800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24800_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -269,15 +269,15 @@ KERNEL_FQ void m24800_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m24800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24800_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m24800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24800_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m24800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24800_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -455,10 +455,10 @@ KERNEL_FQ void m24800_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m24800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24800_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m24800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24800_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m24800_a1-pure.cl b/OpenCL/m24800_a1-pure.cl index a1b2766f7..467c2a016 100644 --- a/OpenCL/m24800_a1-pure.cl +++ b/OpenCL/m24800_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m24800_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24800_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -95,7 +95,7 @@ KERNEL_FQ void m24800_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m24800_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24800_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m24800_a3-optimized.cl b/OpenCL/m24800_a3-optimized.cl index 80a8c5b2b..740c6bb07 100644 --- a/OpenCL/m24800_a3-optimized.cl +++ b/OpenCL/m24800_a3-optimized.cl @@ -323,7 +323,7 @@ DECLSPEC void m24800s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m24800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24800_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -372,7 +372,7 @@ KERNEL_FQ void m24800_m04 (KERN_ATTR_BASIC ()) m24800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m24800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24800_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -421,7 +421,7 @@ KERNEL_FQ void m24800_m08 (KERN_ATTR_BASIC ()) m24800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m24800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24800_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -470,7 +470,7 @@ KERNEL_FQ void m24800_m16 (KERN_ATTR_BASIC ()) m24800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m24800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24800_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -519,7 +519,7 @@ KERNEL_FQ void m24800_s04 (KERN_ATTR_BASIC ()) m24800s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m24800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24800_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -568,7 +568,7 @@ KERNEL_FQ void m24800_s08 (KERN_ATTR_BASIC ()) m24800s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m24800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24800_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m24800_a3-pure.cl b/OpenCL/m24800_a3-pure.cl index cb76326ec..b8b594a85 100644 --- a/OpenCL/m24800_a3-pure.cl +++ b/OpenCL/m24800_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m24800_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m24800_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -81,7 +81,7 @@ KERNEL_FQ void m24800_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m24800_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m24800_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m24900_a0-optimized.cl b/OpenCL/m24900_a0-optimized.cl index f22a0c59b..6b8a7ec5f 100644 --- a/OpenCL/m24900_a0-optimized.cl +++ b/OpenCL/m24900_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m24900_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m24900_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -162,15 +162,15 @@ KERNEL_FQ void m24900_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m24900_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m24900_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m24900_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m24900_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m24900_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m24900_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -328,10 +328,10 @@ KERNEL_FQ void m24900_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m24900_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m24900_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m24900_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m24900_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m24900_a1-optimized.cl b/OpenCL/m24900_a1-optimized.cl index 9bff24186..0e60859fc 100644 --- a/OpenCL/m24900_a1-optimized.cl +++ b/OpenCL/m24900_a1-optimized.cl @@ -15,7 +15,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m24900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24900_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -220,15 +220,15 @@ KERNEL_FQ void m24900_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m24900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24900_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m24900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24900_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m24900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24900_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -445,10 +445,10 @@ KERNEL_FQ void m24900_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m24900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24900_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m24900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24900_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m24900_a3-optimized.cl b/OpenCL/m24900_a3-optimized.cl index 432dab27b..12eacbc10 100644 --- a/OpenCL/m24900_a3-optimized.cl +++ b/OpenCL/m24900_a3-optimized.cl @@ -310,7 +310,7 @@ DECLSPEC void m24900s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m24900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24900_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -359,7 +359,7 @@ KERNEL_FQ void m24900_m04 (KERN_ATTR_BASIC ()) m24900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m24900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24900_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -408,7 +408,7 @@ KERNEL_FQ void m24900_m08 (KERN_ATTR_BASIC ()) m24900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m24900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24900_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -457,7 +457,7 @@ KERNEL_FQ void m24900_m16 (KERN_ATTR_BASIC ()) m24900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m24900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24900_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -506,7 +506,7 @@ KERNEL_FQ void m24900_s04 (KERN_ATTR_BASIC ()) m24900s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m24900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24900_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -555,7 +555,7 @@ KERNEL_FQ void m24900_s08 (KERN_ATTR_BASIC ()) m24900s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m24900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m24900_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m25000-pure.cl b/OpenCL/m25000-pure.cl index a6325c37a..06fb6a1d4 100644 --- a/OpenCL/m25000-pure.cl +++ b/OpenCL/m25000-pure.cl @@ -59,7 +59,7 @@ typedef struct snmpv3 } snmpv3_t; -KERNEL_FQ void m25000_init (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, snmpv3_t)) +KERNEL_FQ void HC_ATTR_SEQ m25000_init (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, snmpv3_t)) { /** * modifier @@ -165,7 +165,7 @@ KERNEL_FQ void m25000_init (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, snmpv3_t)) tmps[gid].h_sha1[4] = SHA1M_E; } -KERNEL_FQ void m25000_loop (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, snmpv3_t)) +KERNEL_FQ void HC_ATTR_SEQ m25000_loop (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, snmpv3_t)) { /** * base @@ -337,7 +337,7 @@ KERNEL_FQ void m25000_loop (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, snmpv3_t)) tmps[gid].h_sha1[4] = h_sha1[4]; } -KERNEL_FQ void m25000_comp (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, snmpv3_t)) +KERNEL_FQ void HC_ATTR_SEQ m25000_comp (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, snmpv3_t)) { /** * modifier diff --git a/OpenCL/m25100-pure.cl b/OpenCL/m25100-pure.cl index 63fdebd20..7447a4002 100644 --- a/OpenCL/m25100-pure.cl +++ b/OpenCL/m25100-pure.cl @@ -54,7 +54,7 @@ typedef struct snmpv3 } snmpv3_t; -KERNEL_FQ void m25100_init (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, snmpv3_t)) +KERNEL_FQ void HC_ATTR_SEQ m25100_init (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, snmpv3_t)) { /** * modifier @@ -131,7 +131,7 @@ KERNEL_FQ void m25100_init (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, snmpv3_t)) tmps[gid].h[3] = MD5M_D; } -KERNEL_FQ void m25100_loop (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, snmpv3_t)) +KERNEL_FQ void HC_ATTR_SEQ m25100_loop (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, snmpv3_t)) { /** * base @@ -228,7 +228,7 @@ KERNEL_FQ void m25100_loop (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, snmpv3_t)) tmps[gid].h[3] = h[3]; } -KERNEL_FQ void m25100_comp (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, snmpv3_t)) +KERNEL_FQ void HC_ATTR_SEQ m25100_comp (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, snmpv3_t)) { /** * modifier diff --git a/OpenCL/m25200-pure.cl b/OpenCL/m25200-pure.cl index 82ae963dc..724d945ea 100644 --- a/OpenCL/m25200-pure.cl +++ b/OpenCL/m25200-pure.cl @@ -54,7 +54,7 @@ typedef struct snmpv3 } snmpv3_t; -KERNEL_FQ void m25200_init (KERN_ATTR_TMPS_ESALT (hmac_sha1_tmp_t, snmpv3_t)) +KERNEL_FQ void HC_ATTR_SEQ m25200_init (KERN_ATTR_TMPS_ESALT (hmac_sha1_tmp_t, snmpv3_t)) { /** * modifier @@ -132,7 +132,7 @@ KERNEL_FQ void m25200_init (KERN_ATTR_TMPS_ESALT (hmac_sha1_tmp_t, snmpv3_t)) tmps[gid].h[4] = SHA1M_E; } -KERNEL_FQ void m25200_loop (KERN_ATTR_TMPS_ESALT (hmac_sha1_tmp_t, snmpv3_t)) +KERNEL_FQ void HC_ATTR_SEQ m25200_loop (KERN_ATTR_TMPS_ESALT (hmac_sha1_tmp_t, snmpv3_t)) { /** * base @@ -231,7 +231,7 @@ KERNEL_FQ void m25200_loop (KERN_ATTR_TMPS_ESALT (hmac_sha1_tmp_t, snmpv3_t)) tmps[gid].h[4] = h[4]; } -KERNEL_FQ void m25200_comp (KERN_ATTR_TMPS_ESALT (hmac_sha1_tmp_t, snmpv3_t)) +KERNEL_FQ void HC_ATTR_SEQ m25200_comp (KERN_ATTR_TMPS_ESALT (hmac_sha1_tmp_t, snmpv3_t)) { /** * modifier diff --git a/OpenCL/m25300-pure.cl b/OpenCL/m25300-pure.cl index b7f6ebceb..68185d6e6 100644 --- a/OpenCL/m25300-pure.cl +++ b/OpenCL/m25300-pure.cl @@ -23,7 +23,7 @@ typedef struct office2016_tmp } office2016_tmp_t; -KERNEL_FQ void m25300_init (KERN_ATTR_TMPS (office2016_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m25300_init (KERN_ATTR_TMPS (office2016_tmp_t)) { /** * base @@ -53,7 +53,7 @@ KERNEL_FQ void m25300_init (KERN_ATTR_TMPS (office2016_tmp_t)) tmps[gid].out[7] = ctx.h[7]; } -KERNEL_FQ void m25300_loop (KERN_ATTR_TMPS (office2016_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m25300_loop (KERN_ATTR_TMPS (office2016_tmp_t)) { const u64 gid = get_global_id (0); @@ -163,7 +163,7 @@ KERNEL_FQ void m25300_loop (KERN_ATTR_TMPS (office2016_tmp_t)) unpack64v (tmps, out, gid, 7, t7); } -KERNEL_FQ void m25300_comp (KERN_ATTR_TMPS (office2016_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m25300_comp (KERN_ATTR_TMPS (office2016_tmp_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m25400-pure.cl b/OpenCL/m25400-pure.cl index 6ad2d1034..138cf7ea0 100644 --- a/OpenCL/m25400-pure.cl +++ b/OpenCL/m25400-pure.cl @@ -49,7 +49,7 @@ typedef struct pdf14_tmp } pdf14_tmp_t; -KERNEL_FQ void m25400_init (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m25400_init (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t)) { /** * base @@ -191,7 +191,7 @@ KERNEL_FQ void m25400_init (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t)) tmps[gid].out[7] = 0; // we only need the size of out for the plaintext check } -KERNEL_FQ void m25400_loop (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m25400_loop (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t)) { /** * base @@ -315,7 +315,7 @@ KERNEL_FQ void m25400_loop (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t)) tmps[gid].digest[3] = digest[3]; } -KERNEL_FQ void m25400_comp (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t)) +KERNEL_FQ void HC_ATTR_SEQ m25400_comp (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t)) { const u32 digest[4] = { diff --git a/OpenCL/m25500-pure.cl b/OpenCL/m25500-pure.cl index f5c72c3de..e5edf2777 100644 --- a/OpenCL/m25500-pure.cl +++ b/OpenCL/m25500-pure.cl @@ -81,7 +81,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m25500_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) +KERNEL_FQ void HC_ATTR_SEQ m25500_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) { /** * base @@ -165,7 +165,7 @@ KERNEL_FQ void m25500_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sh } } -KERNEL_FQ void m25500_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) +KERNEL_FQ void HC_ATTR_SEQ m25500_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) { const u64 gid = get_global_id (0); @@ -271,7 +271,7 @@ KERNEL_FQ void m25500_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sh } } -KERNEL_FQ void m25500_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) +KERNEL_FQ void HC_ATTR_SEQ m25500_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -407,7 +407,7 @@ KERNEL_FQ void m25500_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sh /* Optimized GCM: No real speed benefit. For documentation purpose -KERNEL_FQ void m25500_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) +KERNEL_FQ void HC_ATTR_SEQ m25500_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m25600-pure.cl b/OpenCL/m25600-pure.cl index 98151b7bf..278dab51d 100644 --- a/OpenCL/m25600-pure.cl +++ b/OpenCL/m25600-pure.cl @@ -447,7 +447,7 @@ DECLSPEC u32 u16_bin_to_u32_hex (const u32 v) | ((v1 < 10) ? '0' + v1 : 'a' - 10 + v1) << 0; } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m25600_init (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m25600_init (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base @@ -686,7 +686,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m25600_init (KERN_ATTR_TMPS } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m25600_loop (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m25600_loop (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base @@ -889,7 +889,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m25600_loop (KERN_ATTR_TMPS } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m25600_comp (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m25600_comp (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base diff --git a/OpenCL/m25700_a0-optimized.cl b/OpenCL/m25700_a0-optimized.cl index a83272714..637d0f5b7 100644 --- a/OpenCL/m25700_a0-optimized.cl +++ b/OpenCL/m25700_a0-optimized.cl @@ -51,7 +51,7 @@ DECLSPEC u32 MurmurHash (const u32 seed, PRIVATE_AS const u32 *w, const u32 pw_l return hash; } -KERNEL_FQ void m25700_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m25700_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -108,15 +108,15 @@ KERNEL_FQ void m25700_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m25700_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m25700_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m25700_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m25700_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m25700_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m25700_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -185,10 +185,10 @@ KERNEL_FQ void m25700_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m25700_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m25700_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m25700_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m25700_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m25700_a1-optimized.cl b/OpenCL/m25700_a1-optimized.cl index 029a79506..4c76e77a8 100644 --- a/OpenCL/m25700_a1-optimized.cl +++ b/OpenCL/m25700_a1-optimized.cl @@ -50,7 +50,7 @@ DECLSPEC u32 MurmurHash (const u32 seed, PRIVATE_AS const u32 *w, const u32 pw_l return hash; } -KERNEL_FQ void m25700_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m25700_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -163,15 +163,15 @@ KERNEL_FQ void m25700_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m25700_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m25700_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m25700_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m25700_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m25700_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m25700_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -296,10 +296,10 @@ KERNEL_FQ void m25700_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m25700_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m25700_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m25700_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m25700_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m25700_a3-optimized.cl b/OpenCL/m25700_a3-optimized.cl index 69b96f987..4c749f701 100644 --- a/OpenCL/m25700_a3-optimized.cl +++ b/OpenCL/m25700_a3-optimized.cl @@ -182,7 +182,7 @@ DECLSPEC void m25700s (PRIVATE_AS const u32 *data, const u32 pw_len, KERN_ATTR_F } } -KERNEL_FQ void m25700_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m25700_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -222,7 +222,7 @@ KERNEL_FQ void m25700_m04 (KERN_ATTR_VECTOR ()) m25700m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m25700_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m25700_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -262,7 +262,7 @@ KERNEL_FQ void m25700_m08 (KERN_ATTR_VECTOR ()) m25700m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m25700_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m25700_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -302,7 +302,7 @@ KERNEL_FQ void m25700_m16 (KERN_ATTR_VECTOR ()) m25700m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m25700_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m25700_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -342,7 +342,7 @@ KERNEL_FQ void m25700_s04 (KERN_ATTR_VECTOR ()) m25700s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m25700_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m25700_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -382,7 +382,7 @@ KERNEL_FQ void m25700_s08 (KERN_ATTR_VECTOR ()) m25700s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m25700_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m25700_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m25800-pure.cl b/OpenCL/m25800-pure.cl index 2c3d581ec..b1407e5f3 100644 --- a/OpenCL/m25800-pure.cl +++ b/OpenCL/m25800-pure.cl @@ -443,7 +443,7 @@ DECLSPEC u32 u16_bin_to_u32_hex (const u32 v) | ((v1 < 10) ? '0' + v1 : 'a' - 10 + v1) << 0; } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m25800_init (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m25800_init (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base @@ -685,7 +685,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m25800_init (KERN_ATTR_TMPS } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m25800_loop (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m25800_loop (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base @@ -888,7 +888,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m25800_loop (KERN_ATTR_TMPS } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m25800_comp (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m25800_comp (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base diff --git a/OpenCL/m25900-pure.cl b/OpenCL/m25900-pure.cl index 00c2637ed..2ab92c283 100644 --- a/OpenCL/m25900-pure.cl +++ b/OpenCL/m25900-pure.cl @@ -100,7 +100,7 @@ DECLSPEC void aes128_encrypt_cbc (PRIVATE_AS const u32 *aes_ks, PRIVATE_AS u32 * aes_iv[3] = out[3]; } -KERNEL_FQ void m25900_init (KERN_ATTR_TMPS (pbkdf2_sha256_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m25900_init (KERN_ATTR_TMPS (pbkdf2_sha256_tmp_t)) { /** * base @@ -184,7 +184,7 @@ KERNEL_FQ void m25900_init (KERN_ATTR_TMPS (pbkdf2_sha256_tmp_t)) } } -KERNEL_FQ void m25900_loop (KERN_ATTR_TMPS (pbkdf2_sha256_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m25900_loop (KERN_ATTR_TMPS (pbkdf2_sha256_tmp_t)) { const u64 gid = get_global_id(0); @@ -290,7 +290,7 @@ KERNEL_FQ void m25900_loop (KERN_ATTR_TMPS (pbkdf2_sha256_tmp_t)) } } -KERNEL_FQ void m25900_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, blocks_t)) +KERNEL_FQ void HC_ATTR_SEQ m25900_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, blocks_t)) { /** * base diff --git a/OpenCL/m26000_a0-pure.cl b/OpenCL/m26000_a0-pure.cl index adaf0100d..5fa521a29 100644 --- a/OpenCL/m26000_a0-pure.cl +++ b/OpenCL/m26000_a0-pure.cl @@ -23,7 +23,7 @@ typedef struct mozilla_3des } mozilla_3des_t; -KERNEL_FQ void m26000_mxx (KERN_ATTR_RULES_ESALT (mozilla_3des_t)) +KERNEL_FQ void HC_ATTR_SEQ m26000_mxx (KERN_ATTR_RULES_ESALT (mozilla_3des_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -365,7 +365,7 @@ KERNEL_FQ void m26000_mxx (KERN_ATTR_RULES_ESALT (mozilla_3des_t)) } } -KERNEL_FQ void m26000_sxx (KERN_ATTR_RULES_ESALT (mozilla_3des_t)) +KERNEL_FQ void HC_ATTR_SEQ m26000_sxx (KERN_ATTR_RULES_ESALT (mozilla_3des_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m26000_a1-pure.cl b/OpenCL/m26000_a1-pure.cl index 577bbdc08..cdaf5f254 100644 --- a/OpenCL/m26000_a1-pure.cl +++ b/OpenCL/m26000_a1-pure.cl @@ -21,7 +21,7 @@ typedef struct mozilla_3des } mozilla_3des_t; -KERNEL_FQ void m26000_mxx (KERN_ATTR_ESALT (mozilla_3des_t)) +KERNEL_FQ void HC_ATTR_SEQ m26000_mxx (KERN_ATTR_ESALT (mozilla_3des_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -388,7 +388,7 @@ KERNEL_FQ void m26000_mxx (KERN_ATTR_ESALT (mozilla_3des_t)) } } -KERNEL_FQ void m26000_sxx (KERN_ATTR_ESALT (mozilla_3des_t)) +KERNEL_FQ void HC_ATTR_SEQ m26000_sxx (KERN_ATTR_ESALT (mozilla_3des_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m26000_a3-pure.cl b/OpenCL/m26000_a3-pure.cl index b7993154b..860013e10 100644 --- a/OpenCL/m26000_a3-pure.cl +++ b/OpenCL/m26000_a3-pure.cl @@ -21,7 +21,7 @@ typedef struct mozilla_3des } mozilla_3des_t; -KERNEL_FQ void m26000_mxx (KERN_ATTR_VECTOR_ESALT (mozilla_3des_t)) +KERNEL_FQ void HC_ATTR_SEQ m26000_mxx (KERN_ATTR_VECTOR_ESALT (mozilla_3des_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -374,7 +374,7 @@ KERNEL_FQ void m26000_mxx (KERN_ATTR_VECTOR_ESALT (mozilla_3des_t)) } } -KERNEL_FQ void m26000_sxx (KERN_ATTR_VECTOR_ESALT (mozilla_3des_t)) +KERNEL_FQ void HC_ATTR_SEQ m26000_sxx (KERN_ATTR_VECTOR_ESALT (mozilla_3des_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m26100-pure.cl b/OpenCL/m26100-pure.cl index 83cba94e4..a93c263a4 100644 --- a/OpenCL/m26100-pure.cl +++ b/OpenCL/m26100-pure.cl @@ -78,7 +78,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m26100_init (KERN_ATTR_TMPS_ESALT (mozilla_aes_tmp_t, mozilla_aes_t)) +KERNEL_FQ void HC_ATTR_SEQ m26100_init (KERN_ATTR_TMPS_ESALT (mozilla_aes_tmp_t, mozilla_aes_t)) { /** * base @@ -203,7 +203,7 @@ KERNEL_FQ void m26100_init (KERN_ATTR_TMPS_ESALT (mozilla_aes_tmp_t, mozilla_aes } } -KERNEL_FQ void m26100_loop (KERN_ATTR_TMPS_ESALT (mozilla_aes_tmp_t, mozilla_aes_t)) +KERNEL_FQ void HC_ATTR_SEQ m26100_loop (KERN_ATTR_TMPS_ESALT (mozilla_aes_tmp_t, mozilla_aes_t)) { const u64 gid = get_global_id (0); @@ -309,7 +309,7 @@ KERNEL_FQ void m26100_loop (KERN_ATTR_TMPS_ESALT (mozilla_aes_tmp_t, mozilla_aes } } -KERNEL_FQ void m26100_comp (KERN_ATTR_TMPS_ESALT (mozilla_aes_tmp_t, mozilla_aes_t)) +KERNEL_FQ void HC_ATTR_SEQ m26100_comp (KERN_ATTR_TMPS_ESALT (mozilla_aes_tmp_t, mozilla_aes_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m26200_a0-pure.cl b/OpenCL/m26200_a0-pure.cl index b38ae40bf..06caaa28f 100644 --- a/OpenCL/m26200_a0-pure.cl +++ b/OpenCL/m26200_a0-pure.cl @@ -35,7 +35,7 @@ CONSTANT_VK u32a PE_CONST[256] = 17408, 33985, 34177, 17728, 34561, 18368, 18048, 34369, 33281, 17088, 17280, 33601, 16640, 33217, 32897, 16448 }; -KERNEL_FQ void m26200_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m26200_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -128,7 +128,7 @@ KERNEL_FQ void m26200_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m26200_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m26200_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m26200_a1-pure.cl b/OpenCL/m26200_a1-pure.cl index 3b84dfba5..1ede47faa 100644 --- a/OpenCL/m26200_a1-pure.cl +++ b/OpenCL/m26200_a1-pure.cl @@ -33,7 +33,7 @@ CONSTANT_VK u32a PE_CONST[256] = 17408, 33985, 34177, 17728, 34561, 18368, 18048, 34369, 33281, 17088, 17280, 33601, 16640, 33217, 32897, 16448 }; -KERNEL_FQ void m26200_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m26200_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -193,7 +193,7 @@ KERNEL_FQ void m26200_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m26200_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m26200_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m26200_a3-pure.cl b/OpenCL/m26200_a3-pure.cl index 447771260..440caf060 100644 --- a/OpenCL/m26200_a3-pure.cl +++ b/OpenCL/m26200_a3-pure.cl @@ -33,7 +33,7 @@ CONSTANT_VK u32a PE_CONST[256] = 17408, 33985, 34177, 17728, 34561, 18368, 18048, 34369, 33281, 17088, 17280, 33601, 16640, 33217, 32897, 16448 }; -KERNEL_FQ void m26200_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m26200_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -137,7 +137,7 @@ KERNEL_FQ void m26200_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m26200_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m26200_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m26300_a0-pure.cl b/OpenCL/m26300_a0-pure.cl index 2020035b1..ac3dc06c1 100644 --- a/OpenCL/m26300_a0-pure.cl +++ b/OpenCL/m26300_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m26300_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m26300_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -92,7 +92,7 @@ KERNEL_FQ void m26300_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m26300_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m26300_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m26300_a1-pure.cl b/OpenCL/m26300_a1-pure.cl index cf0ab137c..5bffcea35 100644 --- a/OpenCL/m26300_a1-pure.cl +++ b/OpenCL/m26300_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m26300_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m26300_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -86,7 +86,7 @@ KERNEL_FQ void m26300_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m26300_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m26300_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m26300_a3-pure.cl b/OpenCL/m26300_a3-pure.cl index b4224857b..9767f6564 100644 --- a/OpenCL/m26300_a3-pure.cl +++ b/OpenCL/m26300_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m26300_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m26300_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -103,7 +103,7 @@ KERNEL_FQ void m26300_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m26300_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m26300_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m26401_a0-optimized.cl b/OpenCL/m26401_a0-optimized.cl index e22fe2fbe..9f7916aed 100644 --- a/OpenCL/m26401_a0-optimized.cl +++ b/OpenCL/m26401_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_cipher_aes.cl) #endif -KERNEL_FQ void m26401_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m26401_m04 (KERN_ATTR_RULES ()) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -142,15 +142,15 @@ KERNEL_FQ void m26401_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m26401_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m26401_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m26401_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m26401_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m26401_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m26401_s04 (KERN_ATTR_RULES ()) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -288,10 +288,10 @@ KERNEL_FQ void m26401_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m26401_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m26401_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m26401_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m26401_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m26401_a1-optimized.cl b/OpenCL/m26401_a1-optimized.cl index 8138ab9a4..ac2038594 100644 --- a/OpenCL/m26401_a1-optimized.cl +++ b/OpenCL/m26401_a1-optimized.cl @@ -15,7 +15,7 @@ #include M2S(INCLUDE_PATH/inc_cipher_aes.cl) #endif -KERNEL_FQ void m26401_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m26401_m04 (KERN_ATTR_BASIC ()) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -194,15 +194,15 @@ KERNEL_FQ void m26401_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m26401_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m26401_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m26401_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m26401_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m26401_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m26401_s04 (KERN_ATTR_BASIC ()) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -393,10 +393,10 @@ KERNEL_FQ void m26401_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m26401_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m26401_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m26401_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m26401_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m26401_a3-optimized.cl b/OpenCL/m26401_a3-optimized.cl index c2bbcaadd..028500b38 100644 --- a/OpenCL/m26401_a3-optimized.cl +++ b/OpenCL/m26401_a3-optimized.cl @@ -136,7 +136,7 @@ DECLSPEC void m26401s (SHM_TYPE u32a *s_te0, SHM_TYPE u32a *s_te1, SHM_TYPE u32a } } -KERNEL_FQ void m26401_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m26401_m04 (KERN_ATTR_VECTOR ()) { const u64 lid = get_local_id (0); const u64 gid = get_global_id (0); @@ -227,7 +227,7 @@ KERNEL_FQ void m26401_m04 (KERN_ATTR_VECTOR ()) m26401m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m26401_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m26401_m08 (KERN_ATTR_VECTOR ()) { const u64 lid = get_local_id (0); const u64 gid = get_global_id (0); @@ -318,11 +318,11 @@ KERNEL_FQ void m26401_m08 (KERN_ATTR_VECTOR ()) m26401m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m26401_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m26401_m16 (KERN_ATTR_VECTOR ()) { } -KERNEL_FQ void m26401_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m26401_s04 (KERN_ATTR_VECTOR ()) { const u64 lid = get_local_id (0); const u64 gid = get_global_id (0); @@ -413,7 +413,7 @@ KERNEL_FQ void m26401_s04 (KERN_ATTR_VECTOR ()) m26401s (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m26401_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m26401_s08 (KERN_ATTR_VECTOR ()) { const u64 lid = get_local_id (0); const u64 gid = get_global_id (0); @@ -504,6 +504,6 @@ KERNEL_FQ void m26401_s08 (KERN_ATTR_VECTOR ()) m26401s (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m26401_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m26401_s16 (KERN_ATTR_VECTOR ()) { } diff --git a/OpenCL/m26402_a0-optimized.cl b/OpenCL/m26402_a0-optimized.cl index 0b27c2baa..f5e899c41 100644 --- a/OpenCL/m26402_a0-optimized.cl +++ b/OpenCL/m26402_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_cipher_aes.cl) #endif -KERNEL_FQ void m26402_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m26402_m04 (KERN_ATTR_RULES ()) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -144,15 +144,15 @@ KERNEL_FQ void m26402_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m26402_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m26402_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m26402_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m26402_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m26402_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m26402_s04 (KERN_ATTR_RULES ()) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -292,10 +292,10 @@ KERNEL_FQ void m26402_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m26402_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m26402_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m26402_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m26402_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m26402_a1-optimized.cl b/OpenCL/m26402_a1-optimized.cl index 68b788251..9796d7c83 100644 --- a/OpenCL/m26402_a1-optimized.cl +++ b/OpenCL/m26402_a1-optimized.cl @@ -15,7 +15,7 @@ #include M2S(INCLUDE_PATH/inc_cipher_aes.cl) #endif -KERNEL_FQ void m26402_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m26402_m04 (KERN_ATTR_BASIC ()) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -200,15 +200,15 @@ KERNEL_FQ void m26402_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m26402_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m26402_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m26402_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m26402_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m26402_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m26402_s04 (KERN_ATTR_BASIC ()) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -405,10 +405,10 @@ KERNEL_FQ void m26402_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m26402_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m26402_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m26402_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m26402_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m26402_a3-optimized.cl b/OpenCL/m26402_a3-optimized.cl index add930bec..9829bd180 100644 --- a/OpenCL/m26402_a3-optimized.cl +++ b/OpenCL/m26402_a3-optimized.cl @@ -140,7 +140,7 @@ DECLSPEC void m26402s (SHM_TYPE u32a *s_te0, SHM_TYPE u32a *s_te1, SHM_TYPE u32a } } -KERNEL_FQ void m26402_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m26402_m04 (KERN_ATTR_VECTOR ()) { const u64 lid = get_local_id (0); const u64 gid = get_global_id (0); @@ -231,7 +231,7 @@ KERNEL_FQ void m26402_m04 (KERN_ATTR_VECTOR ()) m26402m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m26402_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m26402_m08 (KERN_ATTR_VECTOR ()) { const u64 lid = get_local_id (0); const u64 gid = get_global_id (0); @@ -322,11 +322,11 @@ KERNEL_FQ void m26402_m08 (KERN_ATTR_VECTOR ()) m26402m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m26402_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m26402_m16 (KERN_ATTR_VECTOR ()) { } -KERNEL_FQ void m26402_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m26402_s04 (KERN_ATTR_VECTOR ()) { const u64 lid = get_local_id (0); const u64 gid = get_global_id (0); @@ -417,7 +417,7 @@ KERNEL_FQ void m26402_s04 (KERN_ATTR_VECTOR ()) m26402s (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m26402_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m26402_s08 (KERN_ATTR_VECTOR ()) { const u64 lid = get_local_id (0); const u64 gid = get_global_id (0); @@ -508,6 +508,6 @@ KERNEL_FQ void m26402_s08 (KERN_ATTR_VECTOR ()) m26402s (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m26402_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m26402_s16 (KERN_ATTR_VECTOR ()) { } diff --git a/OpenCL/m26403_a0-optimized.cl b/OpenCL/m26403_a0-optimized.cl index 1fae8e779..a225d376e 100644 --- a/OpenCL/m26403_a0-optimized.cl +++ b/OpenCL/m26403_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_cipher_aes.cl) #endif -KERNEL_FQ void m26403_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m26403_m04 (KERN_ATTR_RULES ()) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -146,15 +146,15 @@ KERNEL_FQ void m26403_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m26403_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m26403_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m26403_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m26403_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m26403_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m26403_s04 (KERN_ATTR_RULES ()) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -296,10 +296,10 @@ KERNEL_FQ void m26403_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m26403_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m26403_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m26403_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m26403_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m26403_a1-optimized.cl b/OpenCL/m26403_a1-optimized.cl index 107ba9218..12cd99b3f 100644 --- a/OpenCL/m26403_a1-optimized.cl +++ b/OpenCL/m26403_a1-optimized.cl @@ -15,7 +15,7 @@ #include M2S(INCLUDE_PATH/inc_cipher_aes.cl) #endif -KERNEL_FQ void m26403_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m26403_m04 (KERN_ATTR_BASIC ()) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -206,15 +206,15 @@ KERNEL_FQ void m26403_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m26403_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m26403_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m26403_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m26403_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m26403_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m26403_s04 (KERN_ATTR_BASIC ()) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -417,10 +417,10 @@ KERNEL_FQ void m26403_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m26403_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m26403_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m26403_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m26403_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m26403_a3-optimized.cl b/OpenCL/m26403_a3-optimized.cl index 76de06b78..ab5a7de5c 100644 --- a/OpenCL/m26403_a3-optimized.cl +++ b/OpenCL/m26403_a3-optimized.cl @@ -144,7 +144,7 @@ DECLSPEC void m26403s (SHM_TYPE u32a *s_te0, SHM_TYPE u32a *s_te1, SHM_TYPE u32a } } -KERNEL_FQ void m26403_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m26403_m04 (KERN_ATTR_VECTOR ()) { const u64 lid = get_local_id (0); const u64 gid = get_global_id (0); @@ -235,7 +235,7 @@ KERNEL_FQ void m26403_m04 (KERN_ATTR_VECTOR ()) m26403m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m26403_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m26403_m08 (KERN_ATTR_VECTOR ()) { const u64 lid = get_local_id (0); const u64 gid = get_global_id (0); @@ -326,7 +326,7 @@ KERNEL_FQ void m26403_m08 (KERN_ATTR_VECTOR ()) m26403m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m26403_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m26403_m16 (KERN_ATTR_VECTOR ()) { const u64 lid = get_local_id (0); const u64 gid = get_global_id (0); @@ -417,7 +417,7 @@ KERNEL_FQ void m26403_m16 (KERN_ATTR_VECTOR ()) m26403m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m26403_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m26403_s04 (KERN_ATTR_VECTOR ()) { const u64 lid = get_local_id (0); const u64 gid = get_global_id (0); @@ -508,7 +508,7 @@ KERNEL_FQ void m26403_s04 (KERN_ATTR_VECTOR ()) m26403s (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m26403_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m26403_s08 (KERN_ATTR_VECTOR ()) { const u64 lid = get_local_id (0); const u64 gid = get_global_id (0); @@ -599,7 +599,7 @@ KERNEL_FQ void m26403_s08 (KERN_ATTR_VECTOR ()) m26403s (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m26403_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m26403_s16 (KERN_ATTR_VECTOR ()) { const u64 lid = get_local_id (0); const u64 gid = get_global_id (0); diff --git a/OpenCL/m26500-pure.cl b/OpenCL/m26500-pure.cl index 7e73390e4..a790299b3 100644 --- a/OpenCL/m26500-pure.cl +++ b/OpenCL/m26500-pure.cl @@ -73,7 +73,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m26500_init (KERN_ATTR_TMPS_ESALT (iphone_passcode_tmp_t, iphone_passcode_t)) +KERNEL_FQ void HC_ATTR_SEQ m26500_init (KERN_ATTR_TMPS_ESALT (iphone_passcode_tmp_t, iphone_passcode_t)) { /** * base @@ -167,7 +167,7 @@ KERNEL_FQ void m26500_init (KERN_ATTR_TMPS_ESALT (iphone_passcode_tmp_t, iphone_ tmps[gid].iv[3] = 0; } -KERNEL_FQ void m26500_loop (KERN_ATTR_TMPS_ESALT (iphone_passcode_tmp_t, iphone_passcode_t)) +KERNEL_FQ void HC_ATTR_SEQ m26500_loop (KERN_ATTR_TMPS_ESALT (iphone_passcode_tmp_t, iphone_passcode_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -298,7 +298,7 @@ KERNEL_FQ void m26500_loop (KERN_ATTR_TMPS_ESALT (iphone_passcode_tmp_t, iphone_ tmps[gid].iv[3] = iv[3]; } -KERNEL_FQ void m26500_comp (KERN_ATTR_TMPS_ESALT (iphone_passcode_tmp_t, iphone_passcode_t)) +KERNEL_FQ void HC_ATTR_SEQ m26500_comp (KERN_ATTR_TMPS_ESALT (iphone_passcode_tmp_t, iphone_passcode_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m26600-pure.cl b/OpenCL/m26600-pure.cl index 6f1d1f4f4..56fb0271a 100644 --- a/OpenCL/m26600-pure.cl +++ b/OpenCL/m26600-pure.cl @@ -81,7 +81,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m26600_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) +KERNEL_FQ void HC_ATTR_SEQ m26600_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) { /** * base @@ -165,7 +165,7 @@ KERNEL_FQ void m26600_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sh } } -KERNEL_FQ void m26600_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) +KERNEL_FQ void HC_ATTR_SEQ m26600_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) { const u64 gid = get_global_id (0); @@ -271,7 +271,7 @@ KERNEL_FQ void m26600_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sh } } -KERNEL_FQ void m26600_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) +KERNEL_FQ void HC_ATTR_SEQ m26600_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m26610-pure.cl b/OpenCL/m26610-pure.cl index abd476395..63baa2719 100644 --- a/OpenCL/m26610-pure.cl +++ b/OpenCL/m26610-pure.cl @@ -81,7 +81,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m26610_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) +KERNEL_FQ void HC_ATTR_SEQ m26610_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) { /** * base @@ -165,7 +165,7 @@ KERNEL_FQ void m26610_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sh } } -KERNEL_FQ void m26610_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) +KERNEL_FQ void HC_ATTR_SEQ m26610_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) { const u64 gid = get_global_id (0); @@ -271,7 +271,7 @@ KERNEL_FQ void m26610_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sh } } -KERNEL_FQ void m26610_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) +KERNEL_FQ void HC_ATTR_SEQ m26610_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m26700-pure.cl b/OpenCL/m26700-pure.cl index 74bb30284..5de4da6d8 100644 --- a/OpenCL/m26700-pure.cl +++ b/OpenCL/m26700-pure.cl @@ -54,7 +54,7 @@ typedef struct snmpv3 } snmpv3_t; -KERNEL_FQ void m26700_init (KERN_ATTR_TMPS_ESALT (hmac_sha224_tmp_t, snmpv3_t)) +KERNEL_FQ void HC_ATTR_SEQ m26700_init (KERN_ATTR_TMPS_ESALT (hmac_sha224_tmp_t, snmpv3_t)) { /** * modifier @@ -135,7 +135,7 @@ KERNEL_FQ void m26700_init (KERN_ATTR_TMPS_ESALT (hmac_sha224_tmp_t, snmpv3_t)) tmps[gid].h[7] = SHA224M_H; } -KERNEL_FQ void m26700_loop (KERN_ATTR_TMPS_ESALT (hmac_sha224_tmp_t, snmpv3_t)) +KERNEL_FQ void HC_ATTR_SEQ m26700_loop (KERN_ATTR_TMPS_ESALT (hmac_sha224_tmp_t, snmpv3_t)) { /** * base @@ -240,7 +240,7 @@ KERNEL_FQ void m26700_loop (KERN_ATTR_TMPS_ESALT (hmac_sha224_tmp_t, snmpv3_t)) tmps[gid].h[7] = h[7]; } -KERNEL_FQ void m26700_comp (KERN_ATTR_TMPS_ESALT (hmac_sha224_tmp_t, snmpv3_t)) +KERNEL_FQ void HC_ATTR_SEQ m26700_comp (KERN_ATTR_TMPS_ESALT (hmac_sha224_tmp_t, snmpv3_t)) { /** * modifier diff --git a/OpenCL/m26800-pure.cl b/OpenCL/m26800-pure.cl index 9fa5ce34d..260191e91 100644 --- a/OpenCL/m26800-pure.cl +++ b/OpenCL/m26800-pure.cl @@ -54,7 +54,7 @@ typedef struct snmpv3 } snmpv3_t; -KERNEL_FQ void m26800_init (KERN_ATTR_TMPS_ESALT (hmac_sha256_tmp_t, snmpv3_t)) +KERNEL_FQ void HC_ATTR_SEQ m26800_init (KERN_ATTR_TMPS_ESALT (hmac_sha256_tmp_t, snmpv3_t)) { /** * modifier @@ -135,7 +135,7 @@ KERNEL_FQ void m26800_init (KERN_ATTR_TMPS_ESALT (hmac_sha256_tmp_t, snmpv3_t)) tmps[gid].h[7] = SHA256M_H; } -KERNEL_FQ void m26800_loop (KERN_ATTR_TMPS_ESALT (hmac_sha256_tmp_t, snmpv3_t)) +KERNEL_FQ void HC_ATTR_SEQ m26800_loop (KERN_ATTR_TMPS_ESALT (hmac_sha256_tmp_t, snmpv3_t)) { /** * base @@ -240,7 +240,7 @@ KERNEL_FQ void m26800_loop (KERN_ATTR_TMPS_ESALT (hmac_sha256_tmp_t, snmpv3_t)) tmps[gid].h[7] = h[7]; } -KERNEL_FQ void m26800_comp (KERN_ATTR_TMPS_ESALT (hmac_sha256_tmp_t, snmpv3_t)) +KERNEL_FQ void HC_ATTR_SEQ m26800_comp (KERN_ATTR_TMPS_ESALT (hmac_sha256_tmp_t, snmpv3_t)) { /** * modifier diff --git a/OpenCL/m26900-pure.cl b/OpenCL/m26900-pure.cl index 616a3c5c1..e27e9b819 100644 --- a/OpenCL/m26900-pure.cl +++ b/OpenCL/m26900-pure.cl @@ -54,7 +54,7 @@ typedef struct snmpv3 } snmpv3_t; -KERNEL_FQ void m26900_init (KERN_ATTR_TMPS_ESALT (hmac_sha384_tmp_t, snmpv3_t)) +KERNEL_FQ void HC_ATTR_SEQ m26900_init (KERN_ATTR_TMPS_ESALT (hmac_sha384_tmp_t, snmpv3_t)) { /** * modifier @@ -151,7 +151,7 @@ KERNEL_FQ void m26900_init (KERN_ATTR_TMPS_ESALT (hmac_sha384_tmp_t, snmpv3_t)) tmps[gid].h[7] = SHA384M_H; } -KERNEL_FQ void m26900_loop (KERN_ATTR_TMPS_ESALT (hmac_sha384_tmp_t, snmpv3_t)) +KERNEL_FQ void HC_ATTR_SEQ m26900_loop (KERN_ATTR_TMPS_ESALT (hmac_sha384_tmp_t, snmpv3_t)) { /** * base @@ -296,7 +296,7 @@ KERNEL_FQ void m26900_loop (KERN_ATTR_TMPS_ESALT (hmac_sha384_tmp_t, snmpv3_t)) tmps[gid].h[7] = h[7]; } -KERNEL_FQ void m26900_comp (KERN_ATTR_TMPS_ESALT (hmac_sha384_tmp_t, snmpv3_t)) +KERNEL_FQ void HC_ATTR_SEQ m26900_comp (KERN_ATTR_TMPS_ESALT (hmac_sha384_tmp_t, snmpv3_t)) { /** * modifier diff --git a/OpenCL/m27000-pure.cl b/OpenCL/m27000-pure.cl index 5f85c8f2b..ff5a7eb9f 100644 --- a/OpenCL/m27000-pure.cl +++ b/OpenCL/m27000-pure.cl @@ -528,7 +528,7 @@ typedef struct netntlm_tmp } netntlm_tmp_t; -KERNEL_FQ void m27000_init (KERN_ATTR_TMPS_ESALT (netntlm_tmp_t, netntlm_t)) +KERNEL_FQ void HC_ATTR_SEQ m27000_init (KERN_ATTR_TMPS_ESALT (netntlm_tmp_t, netntlm_t)) { /** * modifier @@ -572,12 +572,12 @@ KERNEL_FQ void m27000_init (KERN_ATTR_TMPS_ESALT (netntlm_tmp_t, netntlm_t)) } -KERNEL_FQ void m27000_loop (KERN_ATTR_TMPS_ESALT (netntlm_tmp_t, netntlm_t)) +KERNEL_FQ void HC_ATTR_SEQ m27000_loop (KERN_ATTR_TMPS_ESALT (netntlm_tmp_t, netntlm_t)) { } -KERNEL_FQ void m27000_comp (KERN_ATTR_TMPS_ESALT (netntlm_tmp_t, netntlm_t)) +KERNEL_FQ void HC_ATTR_SEQ m27000_comp (KERN_ATTR_TMPS_ESALT (netntlm_tmp_t, netntlm_t)) { /** * modifier diff --git a/OpenCL/m27100-pure.cl b/OpenCL/m27100-pure.cl index d3cb273f5..6ac3c6773 100644 --- a/OpenCL/m27100-pure.cl +++ b/OpenCL/m27100-pure.cl @@ -56,7 +56,7 @@ typedef struct netntlmv2_tmp } netntlm_tmp_t; -KERNEL_FQ void m27100_init (KERN_ATTR_TMPS_ESALT (netntlm_tmp_t, netntlm_t)) +KERNEL_FQ void HC_ATTR_SEQ m27100_init (KERN_ATTR_TMPS_ESALT (netntlm_tmp_t, netntlm_t)) { /** * modifier @@ -100,13 +100,13 @@ KERNEL_FQ void m27100_init (KERN_ATTR_TMPS_ESALT (netntlm_tmp_t, netntlm_t)) } -KERNEL_FQ void m27100_loop (KERN_ATTR_TMPS_ESALT (netntlm_tmp_t, netntlm_t)) +KERNEL_FQ void HC_ATTR_SEQ m27100_loop (KERN_ATTR_TMPS_ESALT (netntlm_tmp_t, netntlm_t)) { } -KERNEL_FQ void m27100_comp (KERN_ATTR_TMPS_ESALT (netntlm_tmp_t, netntlm_t)) +KERNEL_FQ void HC_ATTR_SEQ m27100_comp (KERN_ATTR_TMPS_ESALT (netntlm_tmp_t, netntlm_t)) { /** * modifier diff --git a/OpenCL/m27200_a0-optimized.cl b/OpenCL/m27200_a0-optimized.cl index 5ec604632..67999dc6a 100644 --- a/OpenCL/m27200_a0-optimized.cl +++ b/OpenCL/m27200_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m27200_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m27200_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -251,15 +251,15 @@ KERNEL_FQ void m27200_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m27200_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m27200_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m27200_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m27200_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m27200_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m27200_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -504,10 +504,10 @@ KERNEL_FQ void m27200_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m27200_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m27200_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m27200_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m27200_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m27200_a0-pure.cl b/OpenCL/m27200_a0-pure.cl index 41abbf189..35483a8f2 100644 --- a/OpenCL/m27200_a0-pure.cl +++ b/OpenCL/m27200_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m27200_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m27200_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -72,7 +72,7 @@ KERNEL_FQ void m27200_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m27200_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m27200_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m27200_a1-optimized.cl b/OpenCL/m27200_a1-optimized.cl index 2e04d23a0..2e069f6d4 100644 --- a/OpenCL/m27200_a1-optimized.cl +++ b/OpenCL/m27200_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m27200_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27200_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -309,15 +309,15 @@ KERNEL_FQ void m27200_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m27200_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27200_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m27200_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27200_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m27200_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27200_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -621,10 +621,10 @@ KERNEL_FQ void m27200_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m27200_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27200_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m27200_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27200_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m27200_a1-pure.cl b/OpenCL/m27200_a1-pure.cl index cf5cca506..f3261533e 100644 --- a/OpenCL/m27200_a1-pure.cl +++ b/OpenCL/m27200_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m27200_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27200_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -66,7 +66,7 @@ KERNEL_FQ void m27200_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m27200_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27200_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m27200_a3-optimized.cl b/OpenCL/m27200_a3-optimized.cl index f7bc79d58..fb653d7a0 100644 --- a/OpenCL/m27200_a3-optimized.cl +++ b/OpenCL/m27200_a3-optimized.cl @@ -539,7 +539,7 @@ DECLSPEC void m27200s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m27200_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27200_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -588,7 +588,7 @@ KERNEL_FQ void m27200_m04 (KERN_ATTR_BASIC ()) m27200m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m27200_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27200_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -637,7 +637,7 @@ KERNEL_FQ void m27200_m08 (KERN_ATTR_BASIC ()) m27200m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m27200_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27200_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -686,7 +686,7 @@ KERNEL_FQ void m27200_m16 (KERN_ATTR_BASIC ()) m27200m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m27200_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27200_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -735,7 +735,7 @@ KERNEL_FQ void m27200_s04 (KERN_ATTR_BASIC ()) m27200s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m27200_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27200_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -784,7 +784,7 @@ KERNEL_FQ void m27200_s08 (KERN_ATTR_BASIC ()) m27200s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m27200_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27200_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m27200_a3-pure.cl b/OpenCL/m27200_a3-pure.cl index 9b976ee15..b79bb8ada 100644 --- a/OpenCL/m27200_a3-pure.cl +++ b/OpenCL/m27200_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m27200_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m27200_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -85,7 +85,7 @@ KERNEL_FQ void m27200_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m27200_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m27200_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m27300-pure.cl b/OpenCL/m27300-pure.cl index 6d21ba03c..b8cea3625 100644 --- a/OpenCL/m27300-pure.cl +++ b/OpenCL/m27300-pure.cl @@ -54,7 +54,7 @@ typedef struct snmpv3 } snmpv3_t; -KERNEL_FQ void m27300_init (KERN_ATTR_TMPS_ESALT (hmac_sha512_tmp_t, snmpv3_t)) +KERNEL_FQ void HC_ATTR_SEQ m27300_init (KERN_ATTR_TMPS_ESALT (hmac_sha512_tmp_t, snmpv3_t)) { /** * modifier @@ -151,7 +151,7 @@ KERNEL_FQ void m27300_init (KERN_ATTR_TMPS_ESALT (hmac_sha512_tmp_t, snmpv3_t)) tmps[gid].h[7] = SHA512M_H; } -KERNEL_FQ void m27300_loop (KERN_ATTR_TMPS_ESALT (hmac_sha512_tmp_t, snmpv3_t)) +KERNEL_FQ void HC_ATTR_SEQ m27300_loop (KERN_ATTR_TMPS_ESALT (hmac_sha512_tmp_t, snmpv3_t)) { /** * base @@ -296,7 +296,7 @@ KERNEL_FQ void m27300_loop (KERN_ATTR_TMPS_ESALT (hmac_sha512_tmp_t, snmpv3_t)) tmps[gid].h[7] = h[7]; } -KERNEL_FQ void m27300_comp (KERN_ATTR_TMPS_ESALT (hmac_sha512_tmp_t, snmpv3_t)) +KERNEL_FQ void HC_ATTR_SEQ m27300_comp (KERN_ATTR_TMPS_ESALT (hmac_sha512_tmp_t, snmpv3_t)) { /** * modifier diff --git a/OpenCL/m27400-pure.cl b/OpenCL/m27400-pure.cl index d86b95d6c..1a4f3d56b 100644 --- a/OpenCL/m27400-pure.cl +++ b/OpenCL/m27400-pure.cl @@ -72,7 +72,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m27400_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, vmware_vmx_t)) +KERNEL_FQ void HC_ATTR_SEQ m27400_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, vmware_vmx_t)) { /** * base @@ -144,7 +144,7 @@ KERNEL_FQ void m27400_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, vmware_vmx_ } } -KERNEL_FQ void m27400_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, vmware_vmx_t)) +KERNEL_FQ void HC_ATTR_SEQ m27400_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, vmware_vmx_t)) { const u64 gid = get_global_id (0); @@ -229,7 +229,7 @@ KERNEL_FQ void m27400_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, vmware_vmx_ } } -KERNEL_FQ void m27400_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, vmware_vmx_t)) +KERNEL_FQ void HC_ATTR_SEQ m27400_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, vmware_vmx_t)) { /** * base diff --git a/OpenCL/m27500-pure.cl b/OpenCL/m27500-pure.cl index e4120dd15..5a1efc724 100644 --- a/OpenCL/m27500-pure.cl +++ b/OpenCL/m27500-pure.cl @@ -92,7 +92,7 @@ DECLSPEC void xts_mul2 (PRIVATE_AS u32 *in, PRIVATE_AS u32 *out) out[0] ^= c * 0x87; } -KERNEL_FQ void m27500_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) +KERNEL_FQ void HC_ATTR_SEQ m27500_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) { /** * base @@ -176,7 +176,7 @@ KERNEL_FQ void m27500_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) } } -KERNEL_FQ void m27500_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) +KERNEL_FQ void HC_ATTR_SEQ m27500_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) { const u64 gid = get_global_id (0); @@ -282,7 +282,7 @@ KERNEL_FQ void m27500_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) } } -KERNEL_FQ void m27500_init2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) +KERNEL_FQ void HC_ATTR_SEQ m27500_init2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -538,7 +538,7 @@ KERNEL_FQ void m27500_init2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) } } -KERNEL_FQ void m27500_loop2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) +KERNEL_FQ void HC_ATTR_SEQ m27500_loop2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) { const u64 gid = get_global_id (0); @@ -644,7 +644,7 @@ KERNEL_FQ void m27500_loop2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) } } -KERNEL_FQ void m27500_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) +KERNEL_FQ void HC_ATTR_SEQ m27500_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m27600-pure.cl b/OpenCL/m27600-pure.cl index 0825425ad..ec012bc77 100644 --- a/OpenCL/m27600-pure.cl +++ b/OpenCL/m27600-pure.cl @@ -92,7 +92,7 @@ DECLSPEC void xts_mul2 (PRIVATE_AS u32 *in, PRIVATE_AS u32 *out) out[0] ^= c * 0x87; } -KERNEL_FQ void m27600_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) +KERNEL_FQ void HC_ATTR_SEQ m27600_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) { /** * base @@ -176,7 +176,7 @@ KERNEL_FQ void m27600_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) } } -KERNEL_FQ void m27600_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) +KERNEL_FQ void HC_ATTR_SEQ m27600_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) { const u64 gid = get_global_id (0); @@ -282,7 +282,7 @@ KERNEL_FQ void m27600_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) } } -KERNEL_FQ void m27600_init2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) +KERNEL_FQ void HC_ATTR_SEQ m27600_init2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -616,7 +616,7 @@ KERNEL_FQ void m27600_init2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) } } -KERNEL_FQ void m27600_loop2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) +KERNEL_FQ void HC_ATTR_SEQ m27600_loop2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) { const u64 gid = get_global_id (0); @@ -722,7 +722,7 @@ KERNEL_FQ void m27600_loop2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) } } -KERNEL_FQ void m27600_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) +KERNEL_FQ void HC_ATTR_SEQ m27600_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m27700-pure.cl b/OpenCL/m27700-pure.cl index c9f0bb42f..c32a468ca 100644 --- a/OpenCL/m27700-pure.cl +++ b/OpenCL/m27700-pure.cl @@ -265,7 +265,7 @@ DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL } } -KERNEL_FQ void m27700_init (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m27700_init (KERN_ATTR_TMPS (scrypt_tmp_t)) { /** * base @@ -403,7 +403,7 @@ KERNEL_FQ void m27700_init (KERN_ATTR_TMPS (scrypt_tmp_t)) } } -KERNEL_FQ void m27700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m27700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) { /** * base @@ -434,7 +434,7 @@ KERNEL_FQ void m27700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } -KERNEL_FQ void m27700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m27700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -459,7 +459,7 @@ KERNEL_FQ void m27700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } -KERNEL_FQ void m27700_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m27700_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m27800_a0-optimized.cl b/OpenCL/m27800_a0-optimized.cl index fc4017a50..0d08e6f44 100644 --- a/OpenCL/m27800_a0-optimized.cl +++ b/OpenCL/m27800_a0-optimized.cl @@ -55,7 +55,7 @@ DECLSPEC u32 MurmurHash3 (const u32 seed, PRIVATE_AS const u32 *data, const u32 return checksum ^ (checksum >> 16); } -KERNEL_FQ void m27800_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m27800_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -112,15 +112,15 @@ KERNEL_FQ void m27800_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m27800_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m27800_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m27800_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m27800_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m27800_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m27800_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -189,10 +189,10 @@ KERNEL_FQ void m27800_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m27800_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m27800_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m27800_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m27800_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m27800_a1-optimized.cl b/OpenCL/m27800_a1-optimized.cl index 28f8dfb45..a934da219 100644 --- a/OpenCL/m27800_a1-optimized.cl +++ b/OpenCL/m27800_a1-optimized.cl @@ -53,7 +53,7 @@ DECLSPEC u32 MurmurHash3 (const u32 seed, PRIVATE_AS const u32 *data, const u32 return checksum ^ (checksum >> 16); } -KERNEL_FQ void m27800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27800_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -166,15 +166,15 @@ KERNEL_FQ void m27800_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m27800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27800_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m27800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27800_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m27800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27800_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -299,10 +299,10 @@ KERNEL_FQ void m27800_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m27800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27800_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m27800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27800_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m27800_a3-optimized.cl b/OpenCL/m27800_a3-optimized.cl index d0e04eae0..f94c9da00 100644 --- a/OpenCL/m27800_a3-optimized.cl +++ b/OpenCL/m27800_a3-optimized.cl @@ -185,7 +185,7 @@ DECLSPEC void m27800s (PRIVATE_AS const u32 *data, const u32 pw_len, KERN_ATTR_F } } -KERNEL_FQ void m27800_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m27800_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -225,7 +225,7 @@ KERNEL_FQ void m27800_m04 (KERN_ATTR_VECTOR ()) m27800m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m27800_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m27800_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -265,7 +265,7 @@ KERNEL_FQ void m27800_m08 (KERN_ATTR_VECTOR ()) m27800m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m27800_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m27800_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -305,7 +305,7 @@ KERNEL_FQ void m27800_m16 (KERN_ATTR_VECTOR ()) m27800m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m27800_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m27800_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -345,7 +345,7 @@ KERNEL_FQ void m27800_s04 (KERN_ATTR_VECTOR ()) m27800s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m27800_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m27800_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -385,7 +385,7 @@ KERNEL_FQ void m27800_s08 (KERN_ATTR_VECTOR ()) m27800s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m27800_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m27800_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m27900_a0-optimized.cl b/OpenCL/m27900_a0-optimized.cl index fac6a7799..a72e9841d 100644 --- a/OpenCL/m27900_a0-optimized.cl +++ b/OpenCL/m27900_a0-optimized.cl @@ -135,7 +135,7 @@ DECLSPEC u32x crc32c (PRIVATE_AS const u32x *w, const u32 pw_len, const u32 iv) return ~a; } -KERNEL_FQ void m27900_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m27900_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -215,15 +215,15 @@ KERNEL_FQ void m27900_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m27900_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m27900_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m27900_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m27900_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m27900_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m27900_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -315,10 +315,10 @@ KERNEL_FQ void m27900_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m27900_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m27900_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m27900_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m27900_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m27900_a0-pure.cl b/OpenCL/m27900_a0-pure.cl index c378ee5c6..7ec0d4da6 100644 --- a/OpenCL/m27900_a0-pure.cl +++ b/OpenCL/m27900_a0-pure.cl @@ -123,7 +123,7 @@ DECLSPEC u32x crc32c (PRIVATE_AS const u32x *w, const u32 pw_len, const u32 iv) return ~a; } -KERNEL_FQ void m27900_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m27900_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -169,7 +169,7 @@ KERNEL_FQ void m27900_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m27900_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m27900_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m27900_a1-optimized.cl b/OpenCL/m27900_a1-optimized.cl index 240d7c050..b4054c4a3 100644 --- a/OpenCL/m27900_a1-optimized.cl +++ b/OpenCL/m27900_a1-optimized.cl @@ -133,7 +133,7 @@ DECLSPEC u32x crc32c (PRIVATE_AS const u32x *w, const u32 pw_len, const u32 iv) return ~a; } -KERNEL_FQ void m27900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27900_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -273,15 +273,15 @@ KERNEL_FQ void m27900_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m27900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27900_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m27900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27900_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m27900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27900_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -433,10 +433,10 @@ KERNEL_FQ void m27900_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m27900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27900_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m27900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27900_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m27900_a1-pure.cl b/OpenCL/m27900_a1-pure.cl index 11c41b8be..b4c5cd2f5 100644 --- a/OpenCL/m27900_a1-pure.cl +++ b/OpenCL/m27900_a1-pure.cl @@ -121,7 +121,7 @@ DECLSPEC u32x crc32c_g (GLOBAL_AS const u32x *w, const u32 pw_len, const u32 iv) return ~a; } -KERNEL_FQ void m27900_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27900_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -163,7 +163,7 @@ KERNEL_FQ void m27900_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m27900_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27900_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m27900_a3-optimized.cl b/OpenCL/m27900_a3-optimized.cl index 2f9e7ce2a..5e48c1029 100644 --- a/OpenCL/m27900_a3-optimized.cl +++ b/OpenCL/m27900_a3-optimized.cl @@ -255,7 +255,7 @@ DECLSPEC void m27900s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_BASIC } } -KERNEL_FQ void m27900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27900_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -295,7 +295,7 @@ KERNEL_FQ void m27900_m04 (KERN_ATTR_BASIC ()) m27900m (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m27900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27900_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -335,7 +335,7 @@ KERNEL_FQ void m27900_m08 (KERN_ATTR_BASIC ()) m27900m (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m27900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27900_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -375,7 +375,7 @@ KERNEL_FQ void m27900_m16 (KERN_ATTR_BASIC ()) m27900m (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m27900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27900_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -415,7 +415,7 @@ KERNEL_FQ void m27900_s04 (KERN_ATTR_BASIC ()) m27900s (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m27900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27900_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -455,7 +455,7 @@ KERNEL_FQ void m27900_s08 (KERN_ATTR_BASIC ()) m27900s (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m27900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m27900_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m27900_a3-pure.cl b/OpenCL/m27900_a3-pure.cl index 90e8777c8..3e837ac18 100644 --- a/OpenCL/m27900_a3-pure.cl +++ b/OpenCL/m27900_a3-pure.cl @@ -121,7 +121,7 @@ DECLSPEC u32x crc32c (PRIVATE_AS const u32x *w, const u32 pw_len, const u32 iv) return ~a; } -KERNEL_FQ void m27900_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m27900_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -174,7 +174,7 @@ KERNEL_FQ void m27900_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m27900_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m27900_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m28000_a0-optimized.cl b/OpenCL/m28000_a0-optimized.cl index 275a195e7..18a27d1f4 100644 --- a/OpenCL/m28000_a0-optimized.cl +++ b/OpenCL/m28000_a0-optimized.cl @@ -195,7 +195,7 @@ DECLSPEC u64 crc64jones (PRIVATE_AS const u32 *w, const u32 pw_len, const u64 iv return a; } -KERNEL_FQ void m28000_m04 (KERN_ATTR_RULES_ESALT (crc64_t)) +KERNEL_FQ void HC_ATTR_SEQ m28000_m04 (KERN_ATTR_RULES_ESALT (crc64_t)) { /** * modifier @@ -299,15 +299,15 @@ KERNEL_FQ void m28000_m04 (KERN_ATTR_RULES_ESALT (crc64_t)) } } -KERNEL_FQ void m28000_m08 (KERN_ATTR_RULES_ESALT (crc64_t)) +KERNEL_FQ void HC_ATTR_SEQ m28000_m08 (KERN_ATTR_RULES_ESALT (crc64_t)) { } -KERNEL_FQ void m28000_m16 (KERN_ATTR_RULES_ESALT (crc64_t)) +KERNEL_FQ void HC_ATTR_SEQ m28000_m16 (KERN_ATTR_RULES_ESALT (crc64_t)) { } -KERNEL_FQ void m28000_s04 (KERN_ATTR_RULES_ESALT (crc64_t)) +KERNEL_FQ void HC_ATTR_SEQ m28000_s04 (KERN_ATTR_RULES_ESALT (crc64_t)) { /** * modifier @@ -423,10 +423,10 @@ KERNEL_FQ void m28000_s04 (KERN_ATTR_RULES_ESALT (crc64_t)) } } -KERNEL_FQ void m28000_s08 (KERN_ATTR_RULES_ESALT (crc64_t)) +KERNEL_FQ void HC_ATTR_SEQ m28000_s08 (KERN_ATTR_RULES_ESALT (crc64_t)) { } -KERNEL_FQ void m28000_s16 (KERN_ATTR_RULES_ESALT (crc64_t)) +KERNEL_FQ void HC_ATTR_SEQ m28000_s16 (KERN_ATTR_RULES_ESALT (crc64_t)) { } diff --git a/OpenCL/m28000_a0-pure.cl b/OpenCL/m28000_a0-pure.cl index 75abc8c0d..c1a24417f 100644 --- a/OpenCL/m28000_a0-pure.cl +++ b/OpenCL/m28000_a0-pure.cl @@ -183,7 +183,7 @@ DECLSPEC u64 crc64jones (PRIVATE_AS const u32 *w, const u32 pw_len, const u64 iv return a; } -KERNEL_FQ void m28000_mxx (KERN_ATTR_RULES_ESALT (crc64_t)) +KERNEL_FQ void HC_ATTR_SEQ m28000_mxx (KERN_ATTR_RULES_ESALT (crc64_t)) { /** * modifier @@ -253,7 +253,7 @@ KERNEL_FQ void m28000_mxx (KERN_ATTR_RULES_ESALT (crc64_t)) } } -KERNEL_FQ void m28000_sxx (KERN_ATTR_RULES_ESALT (crc64_t)) +KERNEL_FQ void HC_ATTR_SEQ m28000_sxx (KERN_ATTR_RULES_ESALT (crc64_t)) { /** * modifier diff --git a/OpenCL/m28000_a1-optimized.cl b/OpenCL/m28000_a1-optimized.cl index 16e840868..35b90fdc3 100644 --- a/OpenCL/m28000_a1-optimized.cl +++ b/OpenCL/m28000_a1-optimized.cl @@ -193,7 +193,7 @@ DECLSPEC u64 crc64jones (PRIVATE_AS const u32 *w, const u32 pw_len, const u64 iv return a; } -KERNEL_FQ void m28000_m04 (KERN_ATTR_ESALT (crc64_t)) +KERNEL_FQ void HC_ATTR_SEQ m28000_m04 (KERN_ATTR_ESALT (crc64_t)) { /** * modifier @@ -357,15 +357,15 @@ KERNEL_FQ void m28000_m04 (KERN_ATTR_ESALT (crc64_t)) } } -KERNEL_FQ void m28000_m08 (KERN_ATTR_ESALT (crc64_t)) +KERNEL_FQ void HC_ATTR_SEQ m28000_m08 (KERN_ATTR_ESALT (crc64_t)) { } -KERNEL_FQ void m28000_m16 (KERN_ATTR_ESALT (crc64_t)) +KERNEL_FQ void HC_ATTR_SEQ m28000_m16 (KERN_ATTR_ESALT (crc64_t)) { } -KERNEL_FQ void m28000_s04 (KERN_ATTR_ESALT (crc64_t)) +KERNEL_FQ void HC_ATTR_SEQ m28000_s04 (KERN_ATTR_ESALT (crc64_t)) { /** * modifier @@ -541,10 +541,10 @@ KERNEL_FQ void m28000_s04 (KERN_ATTR_ESALT (crc64_t)) } } -KERNEL_FQ void m28000_s08 (KERN_ATTR_ESALT (crc64_t)) +KERNEL_FQ void HC_ATTR_SEQ m28000_s08 (KERN_ATTR_ESALT (crc64_t)) { } -KERNEL_FQ void m28000_s16 (KERN_ATTR_ESALT (crc64_t)) +KERNEL_FQ void HC_ATTR_SEQ m28000_s16 (KERN_ATTR_ESALT (crc64_t)) { } diff --git a/OpenCL/m28000_a1-pure.cl b/OpenCL/m28000_a1-pure.cl index b07ca2c0f..827c9439f 100644 --- a/OpenCL/m28000_a1-pure.cl +++ b/OpenCL/m28000_a1-pure.cl @@ -181,7 +181,7 @@ DECLSPEC u64 crc64jones_g (GLOBAL_AS const u32 *w, const u32 pw_len, const u64 i return a; } -KERNEL_FQ void m28000_mxx (KERN_ATTR_ESALT (crc64_t)) +KERNEL_FQ void HC_ATTR_SEQ m28000_mxx (KERN_ATTR_ESALT (crc64_t)) { /** * modifier @@ -243,7 +243,7 @@ KERNEL_FQ void m28000_mxx (KERN_ATTR_ESALT (crc64_t)) } } -KERNEL_FQ void m28000_sxx (KERN_ATTR_ESALT (crc64_t)) +KERNEL_FQ void HC_ATTR_SEQ m28000_sxx (KERN_ATTR_ESALT (crc64_t)) { /** * modifier diff --git a/OpenCL/m28000_a3-optimized.cl b/OpenCL/m28000_a3-optimized.cl index b304d64f2..5f4f3eb11 100644 --- a/OpenCL/m28000_a3-optimized.cl +++ b/OpenCL/m28000_a3-optimized.cl @@ -321,7 +321,7 @@ DECLSPEC void m28000s (SHM_TYPE u64 *s_crc64jonestab, PRIVATE_AS u32 *w, const u } } -KERNEL_FQ void m28000_m04 (KERN_ATTR_ESALT (crc64_t)) +KERNEL_FQ void HC_ATTR_SEQ m28000_m04 (KERN_ATTR_ESALT (crc64_t)) { /** * modifier @@ -386,7 +386,7 @@ KERNEL_FQ void m28000_m04 (KERN_ATTR_ESALT (crc64_t)) m28000m (s_crc64jonestab, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m28000_m08 (KERN_ATTR_ESALT (crc64_t)) +KERNEL_FQ void HC_ATTR_SEQ m28000_m08 (KERN_ATTR_ESALT (crc64_t)) { /** * modifier @@ -451,7 +451,7 @@ KERNEL_FQ void m28000_m08 (KERN_ATTR_ESALT (crc64_t)) m28000m (s_crc64jonestab, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m28000_m16 (KERN_ATTR_ESALT (crc64_t)) +KERNEL_FQ void HC_ATTR_SEQ m28000_m16 (KERN_ATTR_ESALT (crc64_t)) { /** * modifier @@ -516,7 +516,7 @@ KERNEL_FQ void m28000_m16 (KERN_ATTR_ESALT (crc64_t)) m28000m (s_crc64jonestab, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m28000_s04 (KERN_ATTR_ESALT (crc64_t)) +KERNEL_FQ void HC_ATTR_SEQ m28000_s04 (KERN_ATTR_ESALT (crc64_t)) { /** * modifier @@ -581,7 +581,7 @@ KERNEL_FQ void m28000_s04 (KERN_ATTR_ESALT (crc64_t)) m28000s (s_crc64jonestab, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m28000_s08 (KERN_ATTR_ESALT (crc64_t)) +KERNEL_FQ void HC_ATTR_SEQ m28000_s08 (KERN_ATTR_ESALT (crc64_t)) { /** * modifier @@ -646,7 +646,7 @@ KERNEL_FQ void m28000_s08 (KERN_ATTR_ESALT (crc64_t)) m28000s (s_crc64jonestab, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m28000_s16 (KERN_ATTR_ESALT (crc64_t)) +KERNEL_FQ void HC_ATTR_SEQ m28000_s16 (KERN_ATTR_ESALT (crc64_t)) { /** * modifier diff --git a/OpenCL/m28000_a3-pure.cl b/OpenCL/m28000_a3-pure.cl index f0aac2e14..efce81920 100644 --- a/OpenCL/m28000_a3-pure.cl +++ b/OpenCL/m28000_a3-pure.cl @@ -181,7 +181,7 @@ DECLSPEC u64 crc64jones (PRIVATE_AS const u32 *w, const u32 pw_len, const u64 iv return a; } -KERNEL_FQ void m28000_mxx (KERN_ATTR_VECTOR_ESALT (crc64_t)) +KERNEL_FQ void HC_ATTR_SEQ m28000_mxx (KERN_ATTR_VECTOR_ESALT (crc64_t)) { /** * modifier @@ -254,7 +254,7 @@ KERNEL_FQ void m28000_mxx (KERN_ATTR_VECTOR_ESALT (crc64_t)) } } -KERNEL_FQ void m28000_sxx (KERN_ATTR_VECTOR_ESALT (crc64_t)) +KERNEL_FQ void HC_ATTR_SEQ m28000_sxx (KERN_ATTR_VECTOR_ESALT (crc64_t)) { /** * modifier diff --git a/OpenCL/m28100-pure.cl b/OpenCL/m28100-pure.cl index 46d707055..e62a5b785 100644 --- a/OpenCL/m28100-pure.cl +++ b/OpenCL/m28100-pure.cl @@ -88,7 +88,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m28100_init (KERN_ATTR_TMPS_ESALT (winhello_tmp_t, winhello_t)) +KERNEL_FQ void HC_ATTR_SEQ m28100_init (KERN_ATTR_TMPS_ESALT (winhello_tmp_t, winhello_t)) { /** * base @@ -203,7 +203,7 @@ KERNEL_FQ void m28100_init (KERN_ATTR_TMPS_ESALT (winhello_tmp_t, winhello_t)) } } -KERNEL_FQ void m28100_loop (KERN_ATTR_TMPS_ESALT (winhello_tmp_t, winhello_t)) +KERNEL_FQ void HC_ATTR_SEQ m28100_loop (KERN_ATTR_TMPS_ESALT (winhello_tmp_t, winhello_t)) { const u64 gid = get_global_id (0); @@ -309,7 +309,7 @@ KERNEL_FQ void m28100_loop (KERN_ATTR_TMPS_ESALT (winhello_tmp_t, winhello_t)) } } -KERNEL_FQ void m28100_comp (KERN_ATTR_TMPS_ESALT (winhello_tmp_t, winhello_t)) +KERNEL_FQ void HC_ATTR_SEQ m28100_comp (KERN_ATTR_TMPS_ESALT (winhello_tmp_t, winhello_t)) { /** * base diff --git a/OpenCL/m28200-pure.cl b/OpenCL/m28200-pure.cl index 8e307765c..3e4bed337 100644 --- a/OpenCL/m28200-pure.cl +++ b/OpenCL/m28200-pure.cl @@ -277,7 +277,7 @@ DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL } } -KERNEL_FQ void m28200_init (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exodus_t)) +KERNEL_FQ void HC_ATTR_SEQ m28200_init (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exodus_t)) { /** * base @@ -389,7 +389,7 @@ KERNEL_FQ void m28200_init (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exodus_t)) } } -KERNEL_FQ void m28200_loop_prepare (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exodus_t)) +KERNEL_FQ void HC_ATTR_SEQ m28200_loop_prepare (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exodus_t)) { /** * base @@ -420,7 +420,7 @@ KERNEL_FQ void m28200_loop_prepare (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exodus_t for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } -KERNEL_FQ void m28200_loop (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exodus_t)) +KERNEL_FQ void HC_ATTR_SEQ m28200_loop (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exodus_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -445,7 +445,7 @@ KERNEL_FQ void m28200_loop (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exodus_t)) for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } -KERNEL_FQ void m28200_comp (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exodus_t)) +KERNEL_FQ void HC_ATTR_SEQ m28200_comp (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exodus_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m28300_a0-pure.cl b/OpenCL/m28300_a0-pure.cl index 8551fd776..59e119765 100644 --- a/OpenCL/m28300_a0-pure.cl +++ b/OpenCL/m28300_a0-pure.cl @@ -36,7 +36,7 @@ CONSTANT_VK u32 bin2base64[0x40] = #define int_to_base64(c) make_u32x (s_bin2base64[(c).s0], s_bin2base64[(c).s1], s_bin2base64[(c).s2], s_bin2base64[(c).s3], s_bin2base64[(c).s4], s_bin2base64[(c).s5], s_bin2base64[(c).s6], s_bin2base64[(c).s7], s_bin2base64[(c).s8], s_bin2base64[(c).s9], s_bin2base64[(c).sa], s_bin2base64[(c).sb], s_bin2base64[(c).sc], s_bin2base64[(c).sd], s_bin2base64[(c).se], s_bin2base64[(c).sf]) #endif -KERNEL_FQ void m28300_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m28300_mxx (KERN_ATTR_RULES ()) { /** * base @@ -184,7 +184,7 @@ KERNEL_FQ void m28300_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m28300_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m28300_sxx (KERN_ATTR_RULES ()) { /** * base diff --git a/OpenCL/m28300_a1-pure.cl b/OpenCL/m28300_a1-pure.cl index 5924ad59d..0f0f33729 100644 --- a/OpenCL/m28300_a1-pure.cl +++ b/OpenCL/m28300_a1-pure.cl @@ -34,7 +34,7 @@ CONSTANT_VK u32 bin2base64[0x40] = #define int_to_base64(c) make_u32x (s_bin2base64[(c).s0], s_bin2base64[(c).s1], s_bin2base64[(c).s2], s_bin2base64[(c).s3], s_bin2base64[(c).s4], s_bin2base64[(c).s5], s_bin2base64[(c).s6], s_bin2base64[(c).s7], s_bin2base64[(c).s8], s_bin2base64[(c).s9], s_bin2base64[(c).sa], s_bin2base64[(c).sb], s_bin2base64[(c).sc], s_bin2base64[(c).sd], s_bin2base64[(c).se], s_bin2base64[(c).sf]) #endif -KERNEL_FQ void m28300_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m28300_mxx (KERN_ATTR_BASIC ()) { /** * base @@ -180,7 +180,7 @@ KERNEL_FQ void m28300_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m28300_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m28300_sxx (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m28300_a3-pure.cl b/OpenCL/m28300_a3-pure.cl index 0734fcf5e..47dd46819 100644 --- a/OpenCL/m28300_a3-pure.cl +++ b/OpenCL/m28300_a3-pure.cl @@ -34,7 +34,7 @@ CONSTANT_VK u32 bin2base64[0x40] = #define int_to_base64(c) make_u32x (s_bin2base64[(c).s0], s_bin2base64[(c).s1], s_bin2base64[(c).s2], s_bin2base64[(c).s3], s_bin2base64[(c).s4], s_bin2base64[(c).s5], s_bin2base64[(c).s6], s_bin2base64[(c).s7], s_bin2base64[(c).s8], s_bin2base64[(c).s9], s_bin2base64[(c).sa], s_bin2base64[(c).sb], s_bin2base64[(c).sc], s_bin2base64[(c).sd], s_bin2base64[(c).se], s_bin2base64[(c).sf]) #endif -KERNEL_FQ void m28300_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m28300_mxx (KERN_ATTR_VECTOR ()) { /** * base @@ -193,7 +193,7 @@ KERNEL_FQ void m28300_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m28300_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m28300_sxx (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m28400-pure.cl b/OpenCL/m28400-pure.cl index 2fec71c5b..add3f0579 100644 --- a/OpenCL/m28400-pure.cl +++ b/OpenCL/m28400-pure.cl @@ -423,7 +423,7 @@ DECLSPEC u32 u16_bin_to_u32_hex (const u32 v) | ((v1 < 10) ? '0' + v1 : 'a' - 10 + v1) << 0; } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m28400_init (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m28400_init (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base @@ -659,7 +659,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m28400_init (KERN_ATTR_TMPS } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m28400_loop (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m28400_loop (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base @@ -862,7 +862,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m28400_loop (KERN_ATTR_TMPS } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m28400_comp (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m28400_comp (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base diff --git a/OpenCL/m28501_a0-pure.cl b/OpenCL/m28501_a0-pure.cl index a04f0db9c..6ac90fd4b 100644 --- a/OpenCL/m28501_a0-pure.cl +++ b/OpenCL/m28501_a0-pure.cl @@ -21,7 +21,7 @@ #include M2S(INCLUDE_PATH/inc_ecc_secp256k1.cl) #endif -KERNEL_FQ void m28501_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m28501_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -162,7 +162,7 @@ KERNEL_FQ void m28501_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m28501_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m28501_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m28501_a1-pure.cl b/OpenCL/m28501_a1-pure.cl index 23146d63a..99911ca10 100644 --- a/OpenCL/m28501_a1-pure.cl +++ b/OpenCL/m28501_a1-pure.cl @@ -19,7 +19,7 @@ #include M2S(INCLUDE_PATH/inc_ecc_secp256k1.cl) #endif -KERNEL_FQ void m28501_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m28501_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -200,7 +200,7 @@ KERNEL_FQ void m28501_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m28501_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m28501_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m28501_a3-pure.cl b/OpenCL/m28501_a3-pure.cl index 960a1c431..24bef94f8 100644 --- a/OpenCL/m28501_a3-pure.cl +++ b/OpenCL/m28501_a3-pure.cl @@ -61,7 +61,7 @@ // } // }; -KERNEL_FQ void m28501_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m28501_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -220,7 +220,7 @@ KERNEL_FQ void m28501_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m28501_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m28501_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m28502_a0-pure.cl b/OpenCL/m28502_a0-pure.cl index 19f5e4af8..0313f1022 100644 --- a/OpenCL/m28502_a0-pure.cl +++ b/OpenCL/m28502_a0-pure.cl @@ -21,7 +21,7 @@ #include M2S(INCLUDE_PATH/inc_ecc_secp256k1.cl) #endif -KERNEL_FQ void m28502_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m28502_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -163,7 +163,7 @@ KERNEL_FQ void m28502_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m28502_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m28502_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m28502_a1-pure.cl b/OpenCL/m28502_a1-pure.cl index fdbe644aa..9b31fe4c0 100644 --- a/OpenCL/m28502_a1-pure.cl +++ b/OpenCL/m28502_a1-pure.cl @@ -19,7 +19,7 @@ #include M2S(INCLUDE_PATH/inc_ecc_secp256k1.cl) #endif -KERNEL_FQ void m28502_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m28502_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -201,7 +201,7 @@ KERNEL_FQ void m28502_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m28502_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m28502_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m28502_a3-pure.cl b/OpenCL/m28502_a3-pure.cl index 080e86bc7..eec975cb0 100644 --- a/OpenCL/m28502_a3-pure.cl +++ b/OpenCL/m28502_a3-pure.cl @@ -19,7 +19,7 @@ #include M2S(INCLUDE_PATH/inc_ecc_secp256k1.cl) #endif -KERNEL_FQ void m28502_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m28502_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -179,7 +179,7 @@ KERNEL_FQ void m28502_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m28502_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m28502_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m28505_a0-pure.cl b/OpenCL/m28505_a0-pure.cl index 94d90874b..d4ae3e7e5 100644 --- a/OpenCL/m28505_a0-pure.cl +++ b/OpenCL/m28505_a0-pure.cl @@ -21,7 +21,7 @@ #include M2S(INCLUDE_PATH/inc_ecc_secp256k1.cl) #endif -KERNEL_FQ void m28505_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m28505_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -186,7 +186,7 @@ KERNEL_FQ void m28505_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m28505_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m28505_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m28505_a1-pure.cl b/OpenCL/m28505_a1-pure.cl index 38fd02d32..013a70d99 100644 --- a/OpenCL/m28505_a1-pure.cl +++ b/OpenCL/m28505_a1-pure.cl @@ -19,7 +19,7 @@ #include M2S(INCLUDE_PATH/inc_ecc_secp256k1.cl) #endif -KERNEL_FQ void m28505_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m28505_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -224,7 +224,7 @@ KERNEL_FQ void m28505_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m28505_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m28505_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m28505_a3-pure.cl b/OpenCL/m28505_a3-pure.cl index d0f0ca899..773732931 100644 --- a/OpenCL/m28505_a3-pure.cl +++ b/OpenCL/m28505_a3-pure.cl @@ -20,7 +20,7 @@ #include M2S(INCLUDE_PATH/inc_ecc_secp256k1.cl) #endif -KERNEL_FQ void m28505_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m28505_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -203,7 +203,7 @@ KERNEL_FQ void m28505_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m28505_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m28505_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m28506_a0-pure.cl b/OpenCL/m28506_a0-pure.cl index 31361c813..e8c389f63 100644 --- a/OpenCL/m28506_a0-pure.cl +++ b/OpenCL/m28506_a0-pure.cl @@ -21,7 +21,7 @@ #include M2S(INCLUDE_PATH/inc_ecc_secp256k1.cl) #endif -KERNEL_FQ void m28506_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m28506_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -187,7 +187,7 @@ KERNEL_FQ void m28506_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m28506_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m28506_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m28506_a1-pure.cl b/OpenCL/m28506_a1-pure.cl index f26707e1a..0d6051847 100644 --- a/OpenCL/m28506_a1-pure.cl +++ b/OpenCL/m28506_a1-pure.cl @@ -19,7 +19,7 @@ #include M2S(INCLUDE_PATH/inc_ecc_secp256k1.cl) #endif -KERNEL_FQ void m28506_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m28506_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -225,7 +225,7 @@ KERNEL_FQ void m28506_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m28506_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m28506_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m28506_a3-pure.cl b/OpenCL/m28506_a3-pure.cl index 1c31c5563..70c7f57b6 100644 --- a/OpenCL/m28506_a3-pure.cl +++ b/OpenCL/m28506_a3-pure.cl @@ -19,7 +19,7 @@ #include M2S(INCLUDE_PATH/inc_ecc_secp256k1.cl) #endif -KERNEL_FQ void m28506_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m28506_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -203,7 +203,7 @@ KERNEL_FQ void m28506_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m28506_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m28506_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m28600-pure.cl b/OpenCL/m28600-pure.cl index 9b534a4d5..f7b6084d9 100644 --- a/OpenCL/m28600-pure.cl +++ b/OpenCL/m28600-pure.cl @@ -79,7 +79,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m28600_init (KERN_ATTR_TMPS_ESALT (postgres_sha256_tmp_t, postgres_sha256_t)) +KERNEL_FQ void HC_ATTR_SEQ m28600_init (KERN_ATTR_TMPS_ESALT (postgres_sha256_tmp_t, postgres_sha256_t)) { /** * base @@ -163,7 +163,7 @@ KERNEL_FQ void m28600_init (KERN_ATTR_TMPS_ESALT (postgres_sha256_tmp_t, postgre } } -KERNEL_FQ void m28600_loop (KERN_ATTR_TMPS_ESALT (postgres_sha256_tmp_t, postgres_sha256_t)) +KERNEL_FQ void HC_ATTR_SEQ m28600_loop (KERN_ATTR_TMPS_ESALT (postgres_sha256_tmp_t, postgres_sha256_t)) { const u64 gid = get_global_id (0); @@ -269,7 +269,7 @@ KERNEL_FQ void m28600_loop (KERN_ATTR_TMPS_ESALT (postgres_sha256_tmp_t, postgre } } -KERNEL_FQ void m28600_comp (KERN_ATTR_TMPS_ESALT (postgres_sha256_tmp_t, postgres_sha256_t)) +KERNEL_FQ void HC_ATTR_SEQ m28600_comp (KERN_ATTR_TMPS_ESALT (postgres_sha256_tmp_t, postgres_sha256_t)) { /** * base diff --git a/OpenCL/m28700_a0-optimized.cl b/OpenCL/m28700_a0-optimized.cl index f32c69ccb..7bbc234f3 100644 --- a/OpenCL/m28700_a0-optimized.cl +++ b/OpenCL/m28700_a0-optimized.cl @@ -139,7 +139,7 @@ DECLSPEC void hmac_sha256_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m28700_m04 (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) +KERNEL_FQ void HC_ATTR_SEQ m28700_m04 (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) { /** * modifier @@ -431,15 +431,15 @@ KERNEL_FQ void m28700_m04 (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) } } -KERNEL_FQ void m28700_m08 (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) +KERNEL_FQ void HC_ATTR_SEQ m28700_m08 (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) { } -KERNEL_FQ void m28700_m16 (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) +KERNEL_FQ void HC_ATTR_SEQ m28700_m16 (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) { } -KERNEL_FQ void m28700_s04 (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) +KERNEL_FQ void HC_ATTR_SEQ m28700_s04 (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) { /** * modifier @@ -743,10 +743,10 @@ KERNEL_FQ void m28700_s04 (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) } } -KERNEL_FQ void m28700_s08 (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) +KERNEL_FQ void HC_ATTR_SEQ m28700_s08 (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) { } -KERNEL_FQ void m28700_s16 (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) +KERNEL_FQ void HC_ATTR_SEQ m28700_s16 (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) { } diff --git a/OpenCL/m28700_a0-pure.cl b/OpenCL/m28700_a0-pure.cl index 65583b2b0..49f2ee843 100644 --- a/OpenCL/m28700_a0-pure.cl +++ b/OpenCL/m28700_a0-pure.cl @@ -38,7 +38,7 @@ typedef struct aws4_sig_v4 } aws4_sig_v4_t; -KERNEL_FQ void m28700_mxx (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) +KERNEL_FQ void HC_ATTR_SEQ m28700_mxx (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) { /** * modifier @@ -264,7 +264,7 @@ KERNEL_FQ void m28700_mxx (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) } } -KERNEL_FQ void m28700_sxx (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) +KERNEL_FQ void HC_ATTR_SEQ m28700_sxx (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) { /** * modifier diff --git a/OpenCL/m28700_a1-optimized.cl b/OpenCL/m28700_a1-optimized.cl index 5458783f2..6f8bfb0ab 100644 --- a/OpenCL/m28700_a1-optimized.cl +++ b/OpenCL/m28700_a1-optimized.cl @@ -137,7 +137,7 @@ DECLSPEC void hmac_sha256_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m28700_m04 (KERN_ATTR_ESALT (aws4_sig_v4_t)) +KERNEL_FQ void HC_ATTR_SEQ m28700_m04 (KERN_ATTR_ESALT (aws4_sig_v4_t)) { /** * modifier @@ -498,15 +498,15 @@ KERNEL_FQ void m28700_m04 (KERN_ATTR_ESALT (aws4_sig_v4_t)) } } -KERNEL_FQ void m28700_m08 (KERN_ATTR_ESALT (aws4_sig_v4_t)) +KERNEL_FQ void HC_ATTR_SEQ m28700_m08 (KERN_ATTR_ESALT (aws4_sig_v4_t)) { } -KERNEL_FQ void m28700_m16 (KERN_ATTR_ESALT (aws4_sig_v4_t)) +KERNEL_FQ void HC_ATTR_SEQ m28700_m16 (KERN_ATTR_ESALT (aws4_sig_v4_t)) { } -KERNEL_FQ void m28700_s04 (KERN_ATTR_ESALT (aws4_sig_v4_t)) +KERNEL_FQ void HC_ATTR_SEQ m28700_s04 (KERN_ATTR_ESALT (aws4_sig_v4_t)) { /** * modifier @@ -879,10 +879,10 @@ KERNEL_FQ void m28700_s04 (KERN_ATTR_ESALT (aws4_sig_v4_t)) } } -KERNEL_FQ void m28700_s08 (KERN_ATTR_ESALT (aws4_sig_v4_t)) +KERNEL_FQ void HC_ATTR_SEQ m28700_s08 (KERN_ATTR_ESALT (aws4_sig_v4_t)) { } -KERNEL_FQ void m28700_s16 (KERN_ATTR_ESALT (aws4_sig_v4_t)) +KERNEL_FQ void HC_ATTR_SEQ m28700_s16 (KERN_ATTR_ESALT (aws4_sig_v4_t)) { } diff --git a/OpenCL/m28700_a1-pure.cl b/OpenCL/m28700_a1-pure.cl index 2cb8cca7a..f99ee5f72 100644 --- a/OpenCL/m28700_a1-pure.cl +++ b/OpenCL/m28700_a1-pure.cl @@ -36,7 +36,7 @@ typedef struct aws4_sig_v4 } aws4_sig_v4_t; -KERNEL_FQ void m28700_mxx (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) +KERNEL_FQ void HC_ATTR_SEQ m28700_mxx (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) { /** * modifier @@ -285,7 +285,7 @@ KERNEL_FQ void m28700_mxx (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) } } -KERNEL_FQ void m28700_sxx (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) +KERNEL_FQ void HC_ATTR_SEQ m28700_sxx (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) { /** * modifier diff --git a/OpenCL/m28700_a3-optimized.cl b/OpenCL/m28700_a3-optimized.cl index 4dff8f5b9..3fb758087 100644 --- a/OpenCL/m28700_a3-optimized.cl +++ b/OpenCL/m28700_a3-optimized.cl @@ -701,7 +701,7 @@ DECLSPEC void m28700s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m28700_m04 (KERN_ATTR_ESALT (aws4_sig_v4_t)) +KERNEL_FQ void HC_ATTR_SEQ m28700_m04 (KERN_ATTR_ESALT (aws4_sig_v4_t)) { /** * base @@ -750,7 +750,7 @@ KERNEL_FQ void m28700_m04 (KERN_ATTR_ESALT (aws4_sig_v4_t)) m28700m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m28700_m08 (KERN_ATTR_ESALT (aws4_sig_v4_t)) +KERNEL_FQ void HC_ATTR_SEQ m28700_m08 (KERN_ATTR_ESALT (aws4_sig_v4_t)) { /** * base @@ -799,7 +799,7 @@ KERNEL_FQ void m28700_m08 (KERN_ATTR_ESALT (aws4_sig_v4_t)) m28700m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m28700_m16 (KERN_ATTR_ESALT (aws4_sig_v4_t)) +KERNEL_FQ void HC_ATTR_SEQ m28700_m16 (KERN_ATTR_ESALT (aws4_sig_v4_t)) { /** * base @@ -848,7 +848,7 @@ KERNEL_FQ void m28700_m16 (KERN_ATTR_ESALT (aws4_sig_v4_t)) m28700m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m28700_s04 (KERN_ATTR_ESALT (aws4_sig_v4_t)) +KERNEL_FQ void HC_ATTR_SEQ m28700_s04 (KERN_ATTR_ESALT (aws4_sig_v4_t)) { /** * base @@ -897,7 +897,7 @@ KERNEL_FQ void m28700_s04 (KERN_ATTR_ESALT (aws4_sig_v4_t)) m28700s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m28700_s08 (KERN_ATTR_ESALT (aws4_sig_v4_t)) +KERNEL_FQ void HC_ATTR_SEQ m28700_s08 (KERN_ATTR_ESALT (aws4_sig_v4_t)) { /** * base @@ -946,7 +946,7 @@ KERNEL_FQ void m28700_s08 (KERN_ATTR_ESALT (aws4_sig_v4_t)) m28700s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m28700_s16 (KERN_ATTR_ESALT (aws4_sig_v4_t)) +KERNEL_FQ void HC_ATTR_SEQ m28700_s16 (KERN_ATTR_ESALT (aws4_sig_v4_t)) { /** * base diff --git a/OpenCL/m28700_a3-pure.cl b/OpenCL/m28700_a3-pure.cl index d6111755d..358854684 100644 --- a/OpenCL/m28700_a3-pure.cl +++ b/OpenCL/m28700_a3-pure.cl @@ -36,7 +36,7 @@ typedef struct aws4_sig_v4 } aws4_sig_v4_t; -KERNEL_FQ void m28700_mxx (KERN_ATTR_VECTOR_ESALT (aws4_sig_v4_t)) +KERNEL_FQ void HC_ATTR_SEQ m28700_mxx (KERN_ATTR_VECTOR_ESALT (aws4_sig_v4_t)) { /** * modifier @@ -246,7 +246,7 @@ KERNEL_FQ void m28700_mxx (KERN_ATTR_VECTOR_ESALT (aws4_sig_v4_t)) } } -KERNEL_FQ void m28700_sxx (KERN_ATTR_VECTOR_ESALT (aws4_sig_v4_t)) +KERNEL_FQ void HC_ATTR_SEQ m28700_sxx (KERN_ATTR_VECTOR_ESALT (aws4_sig_v4_t)) { /** * modifier diff --git a/OpenCL/m28800-pure.cl b/OpenCL/m28800-pure.cl index ed167af6d..31882693d 100644 --- a/OpenCL/m28800-pure.cl +++ b/OpenCL/m28800-pure.cl @@ -114,7 +114,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m28800_init (KERN_ATTR_TMPS_ESALT (krb5db_17_tmp_t, krb5db_17_t)) +KERNEL_FQ void HC_ATTR_SEQ m28800_init (KERN_ATTR_TMPS_ESALT (krb5db_17_tmp_t, krb5db_17_t)) { /** * base @@ -192,7 +192,7 @@ KERNEL_FQ void m28800_init (KERN_ATTR_TMPS_ESALT (krb5db_17_tmp_t, krb5db_17_t)) } } -KERNEL_FQ void m28800_loop (KERN_ATTR_TMPS_ESALT (krb5db_17_tmp_t, krb5db_17_t)) +KERNEL_FQ void HC_ATTR_SEQ m28800_loop (KERN_ATTR_TMPS_ESALT (krb5db_17_tmp_t, krb5db_17_t)) { /** * base @@ -280,7 +280,7 @@ KERNEL_FQ void m28800_loop (KERN_ATTR_TMPS_ESALT (krb5db_17_tmp_t, krb5db_17_t)) } } -KERNEL_FQ void m28800_comp (KERN_ATTR_TMPS_ESALT (krb5db_17_tmp_t, krb5db_17_t)) +KERNEL_FQ void HC_ATTR_SEQ m28800_comp (KERN_ATTR_TMPS_ESALT (krb5db_17_tmp_t, krb5db_17_t)) { /** * base diff --git a/OpenCL/m28900-pure.cl b/OpenCL/m28900-pure.cl index 075ed4e94..12965e599 100644 --- a/OpenCL/m28900-pure.cl +++ b/OpenCL/m28900-pure.cl @@ -114,7 +114,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m28900_init (KERN_ATTR_TMPS_ESALT (krb5db_18_tmp_t, krb5db_18_t)) +KERNEL_FQ void HC_ATTR_SEQ m28900_init (KERN_ATTR_TMPS_ESALT (krb5db_18_tmp_t, krb5db_18_t)) { /** * base @@ -192,7 +192,7 @@ KERNEL_FQ void m28900_init (KERN_ATTR_TMPS_ESALT (krb5db_18_tmp_t, krb5db_18_t)) } } -KERNEL_FQ void m28900_loop (KERN_ATTR_TMPS_ESALT (krb5db_18_tmp_t, krb5db_18_t)) +KERNEL_FQ void HC_ATTR_SEQ m28900_loop (KERN_ATTR_TMPS_ESALT (krb5db_18_tmp_t, krb5db_18_t)) { /** * base @@ -280,7 +280,7 @@ KERNEL_FQ void m28900_loop (KERN_ATTR_TMPS_ESALT (krb5db_18_tmp_t, krb5db_18_t)) } } -KERNEL_FQ void m28900_comp (KERN_ATTR_TMPS_ESALT (krb5db_18_tmp_t, krb5db_18_t)) +KERNEL_FQ void HC_ATTR_SEQ m28900_comp (KERN_ATTR_TMPS_ESALT (krb5db_18_tmp_t, krb5db_18_t)) { /** * base diff --git a/OpenCL/m29000_a0-pure.cl b/OpenCL/m29000_a0-pure.cl index b2685c9ca..3aaf9ae75 100644 --- a/OpenCL/m29000_a0-pure.cl +++ b/OpenCL/m29000_a0-pure.cl @@ -26,7 +26,7 @@ typedef struct sha1_double_salt } sha1_double_salt_t; -KERNEL_FQ void m29000_mxx (KERN_ATTR_RULES_ESALT (sha1_double_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m29000_mxx (KERN_ATTR_RULES_ESALT (sha1_double_salt_t)) { /** * modifier @@ -112,7 +112,7 @@ KERNEL_FQ void m29000_mxx (KERN_ATTR_RULES_ESALT (sha1_double_salt_t)) } } -KERNEL_FQ void m29000_sxx (KERN_ATTR_RULES_ESALT (sha1_double_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m29000_sxx (KERN_ATTR_RULES_ESALT (sha1_double_salt_t)) { /** * modifier diff --git a/OpenCL/m29000_a1-pure.cl b/OpenCL/m29000_a1-pure.cl index eb7efadd1..b39ab4bc2 100644 --- a/OpenCL/m29000_a1-pure.cl +++ b/OpenCL/m29000_a1-pure.cl @@ -24,7 +24,7 @@ typedef struct sha1_double_salt } sha1_double_salt_t; -KERNEL_FQ void m29000_mxx (KERN_ATTR_ESALT (sha1_double_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m29000_mxx (KERN_ATTR_ESALT (sha1_double_salt_t)) { /** * modifier @@ -115,7 +115,7 @@ KERNEL_FQ void m29000_mxx (KERN_ATTR_ESALT (sha1_double_salt_t)) } } -KERNEL_FQ void m29000_sxx (KERN_ATTR_ESALT (sha1_double_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m29000_sxx (KERN_ATTR_ESALT (sha1_double_salt_t)) { /** * modifier diff --git a/OpenCL/m29000_a3-pure.cl b/OpenCL/m29000_a3-pure.cl index 2d7eb194f..53d188034 100644 --- a/OpenCL/m29000_a3-pure.cl +++ b/OpenCL/m29000_a3-pure.cl @@ -24,7 +24,7 @@ typedef struct sha1_double_salt } sha1_double_salt_t; -KERNEL_FQ void m29000_mxx (KERN_ATTR_VECTOR_ESALT (sha1_double_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m29000_mxx (KERN_ATTR_VECTOR_ESALT (sha1_double_salt_t)) { /** * modifier @@ -121,7 +121,7 @@ KERNEL_FQ void m29000_mxx (KERN_ATTR_VECTOR_ESALT (sha1_double_salt_t)) } } -KERNEL_FQ void m29000_sxx (KERN_ATTR_VECTOR_ESALT (sha1_double_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m29000_sxx (KERN_ATTR_VECTOR_ESALT (sha1_double_salt_t)) { /** * modifier diff --git a/OpenCL/m29100_a0-pure.cl b/OpenCL/m29100_a0-pure.cl index 1d53b0036..5bc4830e3 100644 --- a/OpenCL/m29100_a0-pure.cl +++ b/OpenCL/m29100_a0-pure.cl @@ -17,7 +17,7 @@ #endif -KERNEL_FQ void m29100_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m29100_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -104,7 +104,7 @@ KERNEL_FQ void m29100_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m29100_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m29100_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m29100_a1-pure.cl b/OpenCL/m29100_a1-pure.cl index e6bb17319..72cd63b64 100644 --- a/OpenCL/m29100_a1-pure.cl +++ b/OpenCL/m29100_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m29100_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m29100_mxx (KERN_ATTR_BASIC ()) { /** @@ -124,7 +124,7 @@ KERNEL_FQ void m29100_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m29100_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m29100_sxx (KERN_ATTR_BASIC ()) { /** diff --git a/OpenCL/m29100_a3-pure.cl b/OpenCL/m29100_a3-pure.cl index 94c38d7da..28a341d39 100644 --- a/OpenCL/m29100_a3-pure.cl +++ b/OpenCL/m29100_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void m29100_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m29100_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -110,7 +110,7 @@ KERNEL_FQ void m29100_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m29100_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m29100_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m29200_a0-pure.cl b/OpenCL/m29200_a0-pure.cl index 017fc1c8e..1d019d2b5 100644 --- a/OpenCL/m29200_a0-pure.cl +++ b/OpenCL/m29200_a0-pure.cl @@ -32,7 +32,7 @@ typedef struct radmin3 } radmin3_t; -KERNEL_FQ void m29200_mxx (KERN_ATTR_RULES_ESALT (radmin3_t)) +KERNEL_FQ void HC_ATTR_SEQ m29200_mxx (KERN_ATTR_RULES_ESALT (radmin3_t)) { /** * modifier @@ -288,7 +288,7 @@ KERNEL_FQ void m29200_mxx (KERN_ATTR_RULES_ESALT (radmin3_t)) } } -KERNEL_FQ void m29200_sxx (KERN_ATTR_RULES_ESALT (radmin3_t)) +KERNEL_FQ void HC_ATTR_SEQ m29200_sxx (KERN_ATTR_RULES_ESALT (radmin3_t)) { /** * modifier diff --git a/OpenCL/m29200_a1-pure.cl b/OpenCL/m29200_a1-pure.cl index 9a44a3efe..163d050d2 100644 --- a/OpenCL/m29200_a1-pure.cl +++ b/OpenCL/m29200_a1-pure.cl @@ -30,7 +30,7 @@ typedef struct radmin3 } radmin3_t; -KERNEL_FQ void m29200_mxx (KERN_ATTR_ESALT (radmin3_t)) +KERNEL_FQ void HC_ATTR_SEQ m29200_mxx (KERN_ATTR_ESALT (radmin3_t)) { /** * modifier @@ -291,7 +291,7 @@ KERNEL_FQ void m29200_mxx (KERN_ATTR_ESALT (radmin3_t)) } } -KERNEL_FQ void m29200_sxx (KERN_ATTR_ESALT (radmin3_t)) +KERNEL_FQ void HC_ATTR_SEQ m29200_sxx (KERN_ATTR_ESALT (radmin3_t)) { /** * modifier diff --git a/OpenCL/m29200_a3-pure.cl b/OpenCL/m29200_a3-pure.cl index 1757589da..880b2a4f9 100644 --- a/OpenCL/m29200_a3-pure.cl +++ b/OpenCL/m29200_a3-pure.cl @@ -30,7 +30,7 @@ typedef struct radmin3 } radmin3_t; -KERNEL_FQ void m29200_mxx (KERN_ATTR_VECTOR_ESALT (radmin3_t)) +KERNEL_FQ void HC_ATTR_SEQ m29200_mxx (KERN_ATTR_VECTOR_ESALT (radmin3_t)) { /** * modifier @@ -298,7 +298,7 @@ KERNEL_FQ void m29200_mxx (KERN_ATTR_VECTOR_ESALT (radmin3_t)) } } -KERNEL_FQ void m29200_sxx (KERN_ATTR_VECTOR_ESALT (radmin3_t)) +KERNEL_FQ void HC_ATTR_SEQ m29200_sxx (KERN_ATTR_VECTOR_ESALT (radmin3_t)) { /** * modifier diff --git a/OpenCL/m29600-pure.cl b/OpenCL/m29600-pure.cl index 85406f53e..586543fc1 100644 --- a/OpenCL/m29600-pure.cl +++ b/OpenCL/m29600-pure.cl @@ -75,7 +75,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m29600_init (KERN_ATTR_TMPS_ESALT (pbkdf_sha1_tmp_t,terra_t)) +KERNEL_FQ void HC_ATTR_SEQ m29600_init (KERN_ATTR_TMPS_ESALT (pbkdf_sha1_tmp_t,terra_t)) { const u64 gid = get_global_id (0); if (gid >= GID_CNT) return; @@ -155,7 +155,7 @@ KERNEL_FQ void m29600_init (KERN_ATTR_TMPS_ESALT (pbkdf_sha1_tmp_t,terra_t)) } } -KERNEL_FQ void m29600_loop (KERN_ATTR_TMPS_ESALT (pbkdf_sha1_tmp_t,terra_t)) +KERNEL_FQ void HC_ATTR_SEQ m29600_loop (KERN_ATTR_TMPS_ESALT (pbkdf_sha1_tmp_t,terra_t)) { const u64 gid = get_global_id (0); @@ -241,7 +241,7 @@ KERNEL_FQ void m29600_loop (KERN_ATTR_TMPS_ESALT (pbkdf_sha1_tmp_t,terra_t)) } } -KERNEL_FQ void m29600_comp (KERN_ATTR_TMPS_ESALT (pbkdf_sha1_tmp_t,terra_t)) +KERNEL_FQ void HC_ATTR_SEQ m29600_comp (KERN_ATTR_TMPS_ESALT (pbkdf_sha1_tmp_t,terra_t)) { /** * base diff --git a/OpenCL/m29700-pure.cl b/OpenCL/m29700-pure.cl index 8eaf8ae03..c970848e2 100644 --- a/OpenCL/m29700-pure.cl +++ b/OpenCL/m29700-pure.cl @@ -45,7 +45,7 @@ typedef struct keepass } keepass_t; -KERNEL_FQ void m29700_init (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, keepass_t)) +KERNEL_FQ void HC_ATTR_SEQ m29700_init (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, keepass_t)) { /** * base @@ -84,7 +84,7 @@ KERNEL_FQ void m29700_init (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, keepass_t)) tmps[gid].tmp_digest[7] = digest[7]; } -KERNEL_FQ void m29700_loop (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, keepass_t)) +KERNEL_FQ void HC_ATTR_SEQ m29700_loop (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, keepass_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -172,7 +172,7 @@ KERNEL_FQ void m29700_loop (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, keepass_t)) tmps[gid].tmp_digest[7] = data1[3]; } -KERNEL_FQ void m29700_comp (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, keepass_t)) +KERNEL_FQ void HC_ATTR_SEQ m29700_comp (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, keepass_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m29800-pure.cl b/OpenCL/m29800-pure.cl index 98f582673..b543ebbca 100644 --- a/OpenCL/m29800-pure.cl +++ b/OpenCL/m29800-pure.cl @@ -265,7 +265,7 @@ DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL } } -KERNEL_FQ void m29800_init (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m29800_init (KERN_ATTR_TMPS (scrypt_tmp_t)) { /** * base @@ -403,7 +403,7 @@ KERNEL_FQ void m29800_init (KERN_ATTR_TMPS (scrypt_tmp_t)) } } -KERNEL_FQ void m29800_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m29800_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) { /** * base @@ -434,7 +434,7 @@ KERNEL_FQ void m29800_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } -KERNEL_FQ void m29800_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m29800_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -459,7 +459,7 @@ KERNEL_FQ void m29800_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } -KERNEL_FQ void m29800_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m29800_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m29910-pure.cl b/OpenCL/m29910-pure.cl index 2d8c0954d..191f38884 100644 --- a/OpenCL/m29910-pure.cl +++ b/OpenCL/m29910-pure.cl @@ -87,7 +87,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m29910_init (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) +KERNEL_FQ void HC_ATTR_SEQ m29910_init (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) { /** * base @@ -173,7 +173,7 @@ KERNEL_FQ void m29910_init (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavau } } -KERNEL_FQ void m29910_loop (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) +KERNEL_FQ void HC_ATTR_SEQ m29910_loop (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) { const u64 gid = get_global_id (0); @@ -281,7 +281,7 @@ KERNEL_FQ void m29910_loop (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavau } } -KERNEL_FQ void m29910_comp (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) +KERNEL_FQ void HC_ATTR_SEQ m29910_comp (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m29920-pure.cl b/OpenCL/m29920-pure.cl index a44d6c6a1..c8180bc1b 100644 --- a/OpenCL/m29920-pure.cl +++ b/OpenCL/m29920-pure.cl @@ -87,7 +87,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m29920_init (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) +KERNEL_FQ void HC_ATTR_SEQ m29920_init (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) { /** * base @@ -173,7 +173,7 @@ KERNEL_FQ void m29920_init (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavau } } -KERNEL_FQ void m29920_loop (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) +KERNEL_FQ void HC_ATTR_SEQ m29920_loop (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) { const u64 gid = get_global_id (0); @@ -281,7 +281,7 @@ KERNEL_FQ void m29920_loop (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavau } } -KERNEL_FQ void m29920_comp (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) +KERNEL_FQ void HC_ATTR_SEQ m29920_comp (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m29930-pure.cl b/OpenCL/m29930-pure.cl index 9a1f842d6..bcd7639a5 100644 --- a/OpenCL/m29930-pure.cl +++ b/OpenCL/m29930-pure.cl @@ -52,7 +52,7 @@ CONSTANT_VK u32a default_salts[32] = 0xeae3f44e, 0xaf4a8f84, 0xf1fab308, 0x8569bef8 }; -KERNEL_FQ void m29930_init (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) +KERNEL_FQ void HC_ATTR_SEQ m29930_init (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) { /** * base @@ -81,7 +81,7 @@ KERNEL_FQ void m29930_init (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavau tmps[gid].out_buf[3] = 0; } -KERNEL_FQ void m29930_loop (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) +KERNEL_FQ void HC_ATTR_SEQ m29930_loop (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) { const u64 gid = get_global_id (0); @@ -154,7 +154,7 @@ KERNEL_FQ void m29930_loop (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavau unpackv (tmps, out_buf, gid, 3, out[3]); } -KERNEL_FQ void m29930_comp (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) +KERNEL_FQ void HC_ATTR_SEQ m29930_comp (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m29940-pure.cl b/OpenCL/m29940-pure.cl index e93708b9b..1ad96b59d 100644 --- a/OpenCL/m29940-pure.cl +++ b/OpenCL/m29940-pure.cl @@ -52,7 +52,7 @@ CONSTANT_VK u32a default_salts[32] = 0xeae3f44e, 0xaf4a8f84, 0xf1fab308, 0x8569bef8 }; -KERNEL_FQ void m29940_init (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) +KERNEL_FQ void HC_ATTR_SEQ m29940_init (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) { /** * base @@ -81,7 +81,7 @@ KERNEL_FQ void m29940_init (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavau tmps[gid].out_buf[3] = 0; } -KERNEL_FQ void m29940_loop (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) +KERNEL_FQ void HC_ATTR_SEQ m29940_loop (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) { const u64 gid = get_global_id (0); @@ -154,7 +154,7 @@ KERNEL_FQ void m29940_loop (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavau unpackv (tmps, out_buf, gid, 3, out[3]); } -KERNEL_FQ void m29940_comp (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) +KERNEL_FQ void HC_ATTR_SEQ m29940_comp (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m30420_a0-optimized.cl b/OpenCL/m30420_a0-optimized.cl index ac0c46ec5..e8f9bdccd 100644 --- a/OpenCL/m30420_a0-optimized.cl +++ b/OpenCL/m30420_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m30420_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30420_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -163,15 +163,15 @@ KERNEL_FQ void m30420_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m30420_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30420_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m30420_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30420_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m30420_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30420_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -330,10 +330,10 @@ KERNEL_FQ void m30420_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m30420_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30420_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m30420_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30420_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m30420_a0-pure.cl b/OpenCL/m30420_a0-pure.cl index ef049b6a7..364be8688 100644 --- a/OpenCL/m30420_a0-pure.cl +++ b/OpenCL/m30420_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m30420_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30420_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void m30420_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m30420_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30420_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m30420_a1-optimized.cl b/OpenCL/m30420_a1-optimized.cl index 2ce78c612..9fb4e7a33 100644 --- a/OpenCL/m30420_a1-optimized.cl +++ b/OpenCL/m30420_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m30420_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30420_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -219,15 +219,15 @@ KERNEL_FQ void m30420_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m30420_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30420_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m30420_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30420_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m30420_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30420_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -444,10 +444,10 @@ KERNEL_FQ void m30420_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m30420_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30420_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m30420_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30420_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m30420_a1-pure.cl b/OpenCL/m30420_a1-pure.cl index 135ce78df..611369c6a 100644 --- a/OpenCL/m30420_a1-pure.cl +++ b/OpenCL/m30420_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m30420_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30420_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void m30420_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m30420_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30420_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m30420_a3-optimized.cl b/OpenCL/m30420_a3-optimized.cl index ed59e5277..d2fbb33d0 100644 --- a/OpenCL/m30420_a3-optimized.cl +++ b/OpenCL/m30420_a3-optimized.cl @@ -258,7 +258,7 @@ DECLSPEC void m30420s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m30420_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m30420_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -298,7 +298,7 @@ KERNEL_FQ void m30420_m04 (KERN_ATTR_VECTOR ()) m30420m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m30420_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m30420_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -338,7 +338,7 @@ KERNEL_FQ void m30420_m08 (KERN_ATTR_VECTOR ()) m30420m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m30420_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m30420_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -378,7 +378,7 @@ KERNEL_FQ void m30420_m16 (KERN_ATTR_VECTOR ()) m30420m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m30420_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m30420_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -418,7 +418,7 @@ KERNEL_FQ void m30420_s04 (KERN_ATTR_VECTOR ()) m30420s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m30420_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m30420_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -458,7 +458,7 @@ KERNEL_FQ void m30420_s08 (KERN_ATTR_VECTOR ()) m30420s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m30420_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m30420_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m30420_a3-pure.cl b/OpenCL/m30420_a3-pure.cl index a2698f5b3..44b8a64ca 100644 --- a/OpenCL/m30420_a3-pure.cl +++ b/OpenCL/m30420_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m30420_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m30420_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void m30420_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m30420_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m30420_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m30500_a0-optimized.cl b/OpenCL/m30500_a0-optimized.cl index 115409f48..83024f6c3 100644 --- a/OpenCL/m30500_a0-optimized.cl +++ b/OpenCL/m30500_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m30500_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30500_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -492,15 +492,15 @@ KERNEL_FQ void m30500_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m30500_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30500_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m30500_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30500_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m30500_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30500_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -979,10 +979,10 @@ KERNEL_FQ void m30500_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m30500_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30500_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m30500_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30500_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m30500_a0-pure.cl b/OpenCL/m30500_a0-pure.cl index e78e6c708..f0f9a1f69 100644 --- a/OpenCL/m30500_a0-pure.cl +++ b/OpenCL/m30500_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m30500_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30500_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -184,7 +184,7 @@ KERNEL_FQ void m30500_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m30500_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30500_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m30500_a1-optimized.cl b/OpenCL/m30500_a1-optimized.cl index c77a0c341..c9b85c5df 100644 --- a/OpenCL/m30500_a1-optimized.cl +++ b/OpenCL/m30500_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m30500_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30500_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -549,15 +549,15 @@ KERNEL_FQ void m30500_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m30500_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30500_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m30500_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30500_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m30500_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30500_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -1095,10 +1095,10 @@ KERNEL_FQ void m30500_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m30500_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30500_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m30500_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30500_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m30500_a1-pure.cl b/OpenCL/m30500_a1-pure.cl index 18bed013f..043aaf6f4 100644 --- a/OpenCL/m30500_a1-pure.cl +++ b/OpenCL/m30500_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m30500_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30500_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -180,7 +180,7 @@ KERNEL_FQ void m30500_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m30500_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30500_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m30500_a3-optimized.cl b/OpenCL/m30500_a3-optimized.cl index 2326eb1c3..5b44ee9a1 100644 --- a/OpenCL/m30500_a3-optimized.cl +++ b/OpenCL/m30500_a3-optimized.cl @@ -929,7 +929,7 @@ DECLSPEC void m30500s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m30500_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30500_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -999,7 +999,7 @@ KERNEL_FQ void m30500_m04 (KERN_ATTR_BASIC ()) m30500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m30500_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30500_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -1069,7 +1069,7 @@ KERNEL_FQ void m30500_m08 (KERN_ATTR_BASIC ()) m30500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m30500_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30500_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -1139,7 +1139,7 @@ KERNEL_FQ void m30500_m16 (KERN_ATTR_BASIC ()) m30500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m30500_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30500_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1209,7 +1209,7 @@ KERNEL_FQ void m30500_s04 (KERN_ATTR_BASIC ()) m30500s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m30500_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30500_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1279,7 +1279,7 @@ KERNEL_FQ void m30500_s08 (KERN_ATTR_BASIC ()) m30500s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m30500_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30500_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m30500_a3-pure.cl b/OpenCL/m30500_a3-pure.cl index ad3e5da9f..9813bf2cc 100644 --- a/OpenCL/m30500_a3-pure.cl +++ b/OpenCL/m30500_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m30500_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m30500_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -193,7 +193,7 @@ KERNEL_FQ void m30500_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m30500_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m30500_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m30600-pure.cl b/OpenCL/m30600-pure.cl index 140514465..26b9cc2a0 100644 --- a/OpenCL/m30600-pure.cl +++ b/OpenCL/m30600-pure.cl @@ -444,7 +444,7 @@ DECLSPEC u32 u16_bin_to_u32_hex (const u32 v) | ((v1 < 10) ? '0' + v1 : 'a' - 10 + v1) << 0; } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m30600_init (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m30600_init (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base @@ -695,7 +695,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m30600_init (KERN_ATTR_TMPS } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m30600_loop (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m30600_loop (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base @@ -898,7 +898,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m30600_loop (KERN_ATTR_TMPS } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m30600_comp (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m30600_comp (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base diff --git a/OpenCL/m30700_a0-optimized.cl b/OpenCL/m30700_a0-optimized.cl index 88f6cd29b..e30ed0b93 100644 --- a/OpenCL/m30700_a0-optimized.cl +++ b/OpenCL/m30700_a0-optimized.cl @@ -30,7 +30,7 @@ h = 0; \ } -KERNEL_FQ void m30700_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30700_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -186,15 +186,15 @@ KERNEL_FQ void m30700_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m30700_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30700_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m30700_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30700_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m30700_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30700_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -383,10 +383,10 @@ KERNEL_FQ void m30700_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m30700_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30700_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m30700_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30700_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m30700_a0-pure.cl b/OpenCL/m30700_a0-pure.cl index 72eab9d86..031177c3c 100644 --- a/OpenCL/m30700_a0-pure.cl +++ b/OpenCL/m30700_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m30700_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30700_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void m30700_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m30700_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30700_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m30700_a1-optimized.cl b/OpenCL/m30700_a1-optimized.cl index 873c96b5f..c7a965ac0 100644 --- a/OpenCL/m30700_a1-optimized.cl +++ b/OpenCL/m30700_a1-optimized.cl @@ -28,7 +28,7 @@ h = 0; \ } -KERNEL_FQ void m30700_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30700_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -242,15 +242,15 @@ KERNEL_FQ void m30700_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m30700_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30700_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m30700_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30700_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m30700_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30700_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -497,10 +497,10 @@ KERNEL_FQ void m30700_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m30700_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30700_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m30700_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30700_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m30700_a1-pure.cl b/OpenCL/m30700_a1-pure.cl index 146f543ac..a81352df5 100644 --- a/OpenCL/m30700_a1-pure.cl +++ b/OpenCL/m30700_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m30700_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30700_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -65,7 +65,7 @@ KERNEL_FQ void m30700_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m30700_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30700_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m30700_a3-optimized.cl b/OpenCL/m30700_a3-optimized.cl index 54b769776..3a29cb947 100644 --- a/OpenCL/m30700_a3-optimized.cl +++ b/OpenCL/m30700_a3-optimized.cl @@ -311,7 +311,7 @@ DECLSPEC void m30700s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m30700_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m30700_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -351,7 +351,7 @@ KERNEL_FQ void m30700_m04 (KERN_ATTR_VECTOR ()) m30700m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m30700_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m30700_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -391,7 +391,7 @@ KERNEL_FQ void m30700_m08 (KERN_ATTR_VECTOR ()) m30700m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m30700_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m30700_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -431,7 +431,7 @@ KERNEL_FQ void m30700_m16 (KERN_ATTR_VECTOR ()) m30700m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m30700_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m30700_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -471,7 +471,7 @@ KERNEL_FQ void m30700_s04 (KERN_ATTR_VECTOR ()) m30700s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m30700_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m30700_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -511,7 +511,7 @@ KERNEL_FQ void m30700_s08 (KERN_ATTR_VECTOR ()) m30700s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m30700_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m30700_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m30700_a3-pure.cl b/OpenCL/m30700_a3-pure.cl index 910e54f9c..6cea90732 100644 --- a/OpenCL/m30700_a3-pure.cl +++ b/OpenCL/m30700_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void m30700_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m30700_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -82,7 +82,7 @@ KERNEL_FQ void m30700_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m30700_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m30700_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m30901_a0-pure.cl b/OpenCL/m30901_a0-pure.cl index 0709c22d2..4607a2f78 100644 --- a/OpenCL/m30901_a0-pure.cl +++ b/OpenCL/m30901_a0-pure.cl @@ -42,7 +42,7 @@ DECLSPEC u32 hex_u32_to_u32 (PRIVATE_AS const u32 hex0, PRIVATE_AS const u32 hex return (v); } -KERNEL_FQ void m30901_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30901_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -161,7 +161,7 @@ KERNEL_FQ void m30901_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m30901_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30901_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m30901_a1-pure.cl b/OpenCL/m30901_a1-pure.cl index 097351c8d..48d9ca837 100644 --- a/OpenCL/m30901_a1-pure.cl +++ b/OpenCL/m30901_a1-pure.cl @@ -40,7 +40,7 @@ DECLSPEC u32 hex_u32_to_u32 (PRIVATE_AS const u32 hex0, PRIVATE_AS const u32 hex return (v); } -KERNEL_FQ void m30901_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30901_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -187,7 +187,7 @@ KERNEL_FQ void m30901_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m30901_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30901_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m30901_a3-pure.cl b/OpenCL/m30901_a3-pure.cl index 6df675272..a154ccc41 100644 --- a/OpenCL/m30901_a3-pure.cl +++ b/OpenCL/m30901_a3-pure.cl @@ -82,7 +82,7 @@ DECLSPEC u32 hex_u32_to_u32 (PRIVATE_AS const u32 hex0, PRIVATE_AS const u32 hex return (v); } -KERNEL_FQ void m30901_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m30901_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -217,7 +217,7 @@ KERNEL_FQ void m30901_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m30901_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m30901_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m30902_a0-pure.cl b/OpenCL/m30902_a0-pure.cl index 570f54fb4..864e70ae7 100644 --- a/OpenCL/m30902_a0-pure.cl +++ b/OpenCL/m30902_a0-pure.cl @@ -42,7 +42,7 @@ DECLSPEC u32 hex_u32_to_u32 (PRIVATE_AS const u32 hex0, PRIVATE_AS const u32 hex return (v); } -KERNEL_FQ void m30902_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30902_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -167,7 +167,7 @@ KERNEL_FQ void m30902_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m30902_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30902_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m30902_a1-pure.cl b/OpenCL/m30902_a1-pure.cl index d1e478296..40c6f1bd5 100644 --- a/OpenCL/m30902_a1-pure.cl +++ b/OpenCL/m30902_a1-pure.cl @@ -40,7 +40,7 @@ DECLSPEC u32 hex_u32_to_u32 (PRIVATE_AS const u32 hex0, PRIVATE_AS const u32 hex return (v); } -KERNEL_FQ void m30902_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30902_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -193,7 +193,7 @@ KERNEL_FQ void m30902_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m30902_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30902_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m30902_a3-pure.cl b/OpenCL/m30902_a3-pure.cl index 13f949bab..cdae0dc6d 100644 --- a/OpenCL/m30902_a3-pure.cl +++ b/OpenCL/m30902_a3-pure.cl @@ -40,7 +40,7 @@ DECLSPEC u32 hex_u32_to_u32 (PRIVATE_AS const u32 hex0, PRIVATE_AS const u32 hex return (v); } -KERNEL_FQ void m30902_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m30902_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -181,7 +181,7 @@ KERNEL_FQ void m30902_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m30902_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m30902_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m30905_a0-pure.cl b/OpenCL/m30905_a0-pure.cl index d72376414..64cdb3fc7 100644 --- a/OpenCL/m30905_a0-pure.cl +++ b/OpenCL/m30905_a0-pure.cl @@ -42,7 +42,7 @@ DECLSPEC u32 hex_u32_to_u32 (PRIVATE_AS const u32 hex0, PRIVATE_AS const u32 hex return (v); } -KERNEL_FQ void m30905_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30905_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -185,7 +185,7 @@ KERNEL_FQ void m30905_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m30905_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30905_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m30905_a1-pure.cl b/OpenCL/m30905_a1-pure.cl index 2493a1741..533cb231e 100644 --- a/OpenCL/m30905_a1-pure.cl +++ b/OpenCL/m30905_a1-pure.cl @@ -40,7 +40,7 @@ DECLSPEC u32 hex_u32_to_u32 (PRIVATE_AS const u32 hex0, PRIVATE_AS const u32 hex return (v); } -KERNEL_FQ void m30905_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30905_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -211,7 +211,7 @@ KERNEL_FQ void m30905_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m30905_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30905_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m30905_a3-pure.cl b/OpenCL/m30905_a3-pure.cl index 624d21ec6..1fb573a39 100644 --- a/OpenCL/m30905_a3-pure.cl +++ b/OpenCL/m30905_a3-pure.cl @@ -41,7 +41,7 @@ DECLSPEC u32 hex_u32_to_u32 (PRIVATE_AS const u32 hex0, PRIVATE_AS const u32 hex return (v); } -KERNEL_FQ void m30905_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m30905_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -200,7 +200,7 @@ KERNEL_FQ void m30905_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m30905_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m30905_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m30906_a0-pure.cl b/OpenCL/m30906_a0-pure.cl index 95549f36a..3b4d7357a 100644 --- a/OpenCL/m30906_a0-pure.cl +++ b/OpenCL/m30906_a0-pure.cl @@ -42,7 +42,7 @@ DECLSPEC u32 hex_u32_to_u32 (PRIVATE_AS const u32 hex0, PRIVATE_AS const u32 hex return (v); } -KERNEL_FQ void m30906_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30906_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -191,7 +191,7 @@ KERNEL_FQ void m30906_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m30906_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m30906_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m30906_a1-pure.cl b/OpenCL/m30906_a1-pure.cl index fd76b12c4..532e255cd 100644 --- a/OpenCL/m30906_a1-pure.cl +++ b/OpenCL/m30906_a1-pure.cl @@ -40,7 +40,7 @@ DECLSPEC u32 hex_u32_to_u32 (PRIVATE_AS const u32 hex0, PRIVATE_AS const u32 hex return (v); } -KERNEL_FQ void m30906_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30906_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -217,7 +217,7 @@ KERNEL_FQ void m30906_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m30906_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m30906_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m30906_a3-pure.cl b/OpenCL/m30906_a3-pure.cl index 033d9e1c4..365bcb787 100644 --- a/OpenCL/m30906_a3-pure.cl +++ b/OpenCL/m30906_a3-pure.cl @@ -40,7 +40,7 @@ DECLSPEC u32 hex_u32_to_u32 (PRIVATE_AS const u32 hex0, PRIVATE_AS const u32 hex return (v); } -KERNEL_FQ void m30906_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m30906_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -205,7 +205,7 @@ KERNEL_FQ void m30906_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m30906_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m30906_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m31000_a0-optimized.cl b/OpenCL/m31000_a0-optimized.cl index 52d4d7852..bbaeabd0e 100644 --- a/OpenCL/m31000_a0-optimized.cl +++ b/OpenCL/m31000_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2s.cl) #endif -KERNEL_FQ void m31000_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m31000_m04 (KERN_ATTR_RULES ()) { /** * base @@ -92,15 +92,15 @@ KERNEL_FQ void m31000_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m31000_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m31000_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m31000_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m31000_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m31000_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m31000_s04 (KERN_ATTR_RULES ()) { /** * base @@ -188,10 +188,10 @@ KERNEL_FQ void m31000_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m31000_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m31000_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m31000_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m31000_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m31000_a0-pure.cl b/OpenCL/m31000_a0-pure.cl index 81919e0ff..a98787f17 100644 --- a/OpenCL/m31000_a0-pure.cl +++ b/OpenCL/m31000_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2s.cl) #endif -KERNEL_FQ void m31000_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m31000_mxx (KERN_ATTR_RULES ()) { /** * base @@ -57,7 +57,7 @@ KERNEL_FQ void m31000_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m31000_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m31000_sxx (KERN_ATTR_RULES ()) { /** * base diff --git a/OpenCL/m31000_a1-optimized.cl b/OpenCL/m31000_a1-optimized.cl index 8bb154729..7d71dd656 100644 --- a/OpenCL/m31000_a1-optimized.cl +++ b/OpenCL/m31000_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2s.cl) #endif -KERNEL_FQ void m31000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m31000_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -152,15 +152,15 @@ KERNEL_FQ void m31000_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m31000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m31000_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m31000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m31000_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m31000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m31000_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -311,10 +311,10 @@ KERNEL_FQ void m31000_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m31000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m31000_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m31000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m31000_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m31000_a1-pure.cl b/OpenCL/m31000_a1-pure.cl index e90aa0d46..659a64057 100644 --- a/OpenCL/m31000_a1-pure.cl +++ b/OpenCL/m31000_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2s.cl) #endif -KERNEL_FQ void m31000_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m31000_mxx (KERN_ATTR_BASIC ()) { /** * base @@ -55,7 +55,7 @@ KERNEL_FQ void m31000_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m31000_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m31000_sxx (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m31000_a3-optimized.cl b/OpenCL/m31000_a3-optimized.cl index 085873422..57c2fe89c 100644 --- a/OpenCL/m31000_a3-optimized.cl +++ b/OpenCL/m31000_a3-optimized.cl @@ -142,7 +142,7 @@ DECLSPEC void m31000s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m31000_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m31000_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -182,7 +182,7 @@ KERNEL_FQ void m31000_m04 (KERN_ATTR_VECTOR ()) m31000m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m31000_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m31000_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -222,7 +222,7 @@ KERNEL_FQ void m31000_m08 (KERN_ATTR_VECTOR ()) m31000m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m31000_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m31000_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -262,7 +262,7 @@ KERNEL_FQ void m31000_m16 (KERN_ATTR_VECTOR ()) m31000m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m31000_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m31000_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -302,7 +302,7 @@ KERNEL_FQ void m31000_s04 (KERN_ATTR_VECTOR ()) m31000s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m31000_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m31000_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -342,7 +342,7 @@ KERNEL_FQ void m31000_s08 (KERN_ATTR_VECTOR ()) m31000s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m31000_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m31000_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m31000_a3-pure.cl b/OpenCL/m31000_a3-pure.cl index 24ce691db..3128959a8 100644 --- a/OpenCL/m31000_a3-pure.cl +++ b/OpenCL/m31000_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2s.cl) #endif -KERNEL_FQ void m31000_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m31000_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -66,7 +66,7 @@ KERNEL_FQ void m31000_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m31000_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m31000_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m31100_a0-optimized.cl b/OpenCL/m31100_a0-optimized.cl index c42b3f18e..1a4c5781e 100644 --- a/OpenCL/m31100_a0-optimized.cl +++ b/OpenCL/m31100_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sm3.cl) #endif -KERNEL_FQ void m31100_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m31100_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -163,15 +163,15 @@ KERNEL_FQ void m31100_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m31100_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m31100_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m31100_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m31100_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m31100_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m31100_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -335,10 +335,10 @@ KERNEL_FQ void m31100_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m31100_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m31100_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m31100_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m31100_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m31100_a0-pure.cl b/OpenCL/m31100_a0-pure.cl index 18c1e2795..d572deacc 100644 --- a/OpenCL/m31100_a0-pure.cl +++ b/OpenCL/m31100_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sm3.cl) #endif -KERNEL_FQ void m31100_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m31100_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void m31100_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m31100_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m31100_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m31100_a1-optimized.cl b/OpenCL/m31100_a1-optimized.cl index 5ed4672ec..5dea365e9 100644 --- a/OpenCL/m31100_a1-optimized.cl +++ b/OpenCL/m31100_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sm3.cl) #endif -KERNEL_FQ void m31100_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m31100_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -219,15 +219,15 @@ KERNEL_FQ void m31100_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m31100_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m31100_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m31100_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m31100_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m31100_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m31100_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -449,10 +449,10 @@ KERNEL_FQ void m31100_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m31100_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m31100_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m31100_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m31100_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m31100_a1-pure.cl b/OpenCL/m31100_a1-pure.cl index 43d42204a..f80206efb 100644 --- a/OpenCL/m31100_a1-pure.cl +++ b/OpenCL/m31100_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sm3.cl) #endif -KERNEL_FQ void m31100_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m31100_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void m31100_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m31100_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m31100_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m31100_a3-optimized.cl b/OpenCL/m31100_a3-optimized.cl index c5f61fceb..be2cecec2 100644 --- a/OpenCL/m31100_a3-optimized.cl +++ b/OpenCL/m31100_a3-optimized.cl @@ -498,7 +498,7 @@ DECLSPEC void m31100s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } */ -KERNEL_FQ void m31100_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m31100_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -538,7 +538,7 @@ KERNEL_FQ void m31100_m04 (KERN_ATTR_VECTOR ()) m31100m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m31100_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m31100_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -578,7 +578,7 @@ KERNEL_FQ void m31100_m08 (KERN_ATTR_VECTOR ()) m31100m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m31100_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m31100_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -618,7 +618,7 @@ KERNEL_FQ void m31100_m16 (KERN_ATTR_VECTOR ()) m31100m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m31100_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m31100_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -658,7 +658,7 @@ KERNEL_FQ void m31100_s04 (KERN_ATTR_VECTOR ()) m31100s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m31100_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m31100_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -698,7 +698,7 @@ KERNEL_FQ void m31100_s08 (KERN_ATTR_VECTOR ()) m31100s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m31100_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m31100_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m31100_a3-pure.cl b/OpenCL/m31100_a3-pure.cl index 01dea33eb..0f9cd9acc 100644 --- a/OpenCL/m31100_a3-pure.cl +++ b/OpenCL/m31100_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sm3.cl) #endif -KERNEL_FQ void m31100_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m31100_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void m31100_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m31100_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m31100_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m31200-pure.cl b/OpenCL/m31200-pure.cl index 4cbe28053..eea813e05 100644 --- a/OpenCL/m31200-pure.cl +++ b/OpenCL/m31200-pure.cl @@ -70,7 +70,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m31200_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, veeam_vbk_t)) +KERNEL_FQ void HC_ATTR_SEQ m31200_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, veeam_vbk_t)) { /** * base @@ -142,7 +142,7 @@ KERNEL_FQ void m31200_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, veeam_vbk_t } } -KERNEL_FQ void m31200_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, veeam_vbk_t)) +KERNEL_FQ void HC_ATTR_SEQ m31200_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, veeam_vbk_t)) { const u64 gid = get_global_id (0); @@ -227,7 +227,7 @@ KERNEL_FQ void m31200_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, veeam_vbk_t } } -KERNEL_FQ void m31200_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, veeam_vbk_t)) +KERNEL_FQ void HC_ATTR_SEQ m31200_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, veeam_vbk_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m31300_a0-optimized.cl b/OpenCL/m31300_a0-optimized.cl index 11b3061c5..7297fe6ec 100644 --- a/OpenCL/m31300_a0-optimized.cl +++ b/OpenCL/m31300_a0-optimized.cl @@ -17,7 +17,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m31300_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m31300_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -343,15 +343,15 @@ KERNEL_FQ void m31300_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m31300_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m31300_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m31300_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m31300_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m31300_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m31300_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -689,10 +689,10 @@ KERNEL_FQ void m31300_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m31300_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m31300_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m31300_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m31300_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m31300_a0-pure.cl b/OpenCL/m31300_a0-pure.cl index ef3cac65a..ad76c7c68 100644 --- a/OpenCL/m31300_a0-pure.cl +++ b/OpenCL/m31300_a0-pure.cl @@ -17,7 +17,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m31300_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m31300_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -114,7 +114,7 @@ KERNEL_FQ void m31300_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m31300_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m31300_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m31300_a1-optimized.cl b/OpenCL/m31300_a1-optimized.cl index 604554925..7c0b16065 100644 --- a/OpenCL/m31300_a1-optimized.cl +++ b/OpenCL/m31300_a1-optimized.cl @@ -15,7 +15,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m31300_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m31300_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -403,15 +403,15 @@ KERNEL_FQ void m31300_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m31300_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m31300_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m31300_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m31300_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m31300_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m31300_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -812,10 +812,10 @@ KERNEL_FQ void m31300_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m31300_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m31300_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m31300_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m31300_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m31300_a1-pure.cl b/OpenCL/m31300_a1-pure.cl index a6c964152..4c1bf9d4f 100644 --- a/OpenCL/m31300_a1-pure.cl +++ b/OpenCL/m31300_a1-pure.cl @@ -15,7 +15,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m31300_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m31300_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -110,7 +110,7 @@ KERNEL_FQ void m31300_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m31300_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m31300_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m31300_a3-optimized.cl b/OpenCL/m31300_a3-optimized.cl index e305df2c5..43b380954 100644 --- a/OpenCL/m31300_a3-optimized.cl +++ b/OpenCL/m31300_a3-optimized.cl @@ -725,7 +725,7 @@ DECLSPEC void m31300s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void m31300_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m31300_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -765,7 +765,7 @@ KERNEL_FQ void m31300_m04 (KERN_ATTR_VECTOR ()) m31300m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m31300_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m31300_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -805,7 +805,7 @@ KERNEL_FQ void m31300_m08 (KERN_ATTR_VECTOR ()) m31300m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m31300_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m31300_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -845,7 +845,7 @@ KERNEL_FQ void m31300_m16 (KERN_ATTR_VECTOR ()) m31300m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m31300_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m31300_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -885,7 +885,7 @@ KERNEL_FQ void m31300_s04 (KERN_ATTR_VECTOR ()) m31300s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m31300_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m31300_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -925,7 +925,7 @@ KERNEL_FQ void m31300_s08 (KERN_ATTR_VECTOR ()) m31300s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m31300_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m31300_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m31300_a3-pure.cl b/OpenCL/m31300_a3-pure.cl index 2296f9b68..93288eb36 100644 --- a/OpenCL/m31300_a3-pure.cl +++ b/OpenCL/m31300_a3-pure.cl @@ -15,7 +15,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void m31300_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m31300_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -165,7 +165,7 @@ KERNEL_FQ void m31300_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m31300_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m31300_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m31400_a0-optimized.cl b/OpenCL/m31400_a0-optimized.cl index 3ebf076da..eb7dac328 100644 --- a/OpenCL/m31400_a0-optimized.cl +++ b/OpenCL/m31400_a0-optimized.cl @@ -303,15 +303,15 @@ DECLSPEC void aes256_scrt_format_VV (PRIVATE_AS u32 *aes_ks, PRIVATE_AS u32x *w, #endif } -KERNEL_FQ void m31400_m16 (KERN_ATTR_RULES_ESALT (scrtv2_t)) +KERNEL_FQ void HC_ATTR_SEQ m31400_m16 (KERN_ATTR_RULES_ESALT (scrtv2_t)) { } -KERNEL_FQ void m31400_m08 (KERN_ATTR_RULES_ESALT (scrtv2_t)) +KERNEL_FQ void HC_ATTR_SEQ m31400_m08 (KERN_ATTR_RULES_ESALT (scrtv2_t)) { } -KERNEL_FQ void m31400_m04 (KERN_ATTR_RULES_ESALT (scrtv2_t)) +KERNEL_FQ void HC_ATTR_SEQ m31400_m04 (KERN_ATTR_RULES_ESALT (scrtv2_t)) { /** * modifier @@ -520,15 +520,15 @@ KERNEL_FQ void m31400_m04 (KERN_ATTR_RULES_ESALT (scrtv2_t)) } } -KERNEL_FQ void m31400_s16 (KERN_ATTR_RULES_ESALT (scrtv2_t)) +KERNEL_FQ void HC_ATTR_SEQ m31400_s16 (KERN_ATTR_RULES_ESALT (scrtv2_t)) { } -KERNEL_FQ void m31400_s08 (KERN_ATTR_RULES_ESALT (scrtv2_t)) +KERNEL_FQ void HC_ATTR_SEQ m31400_s08 (KERN_ATTR_RULES_ESALT (scrtv2_t)) { } -KERNEL_FQ void m31400_s04 (KERN_ATTR_RULES_ESALT (scrtv2_t)) +KERNEL_FQ void HC_ATTR_SEQ m31400_s04 (KERN_ATTR_RULES_ESALT (scrtv2_t)) { /** * modifier diff --git a/OpenCL/m31400_a0-pure.cl b/OpenCL/m31400_a0-pure.cl index 28cd2c51a..ce85ada6b 100644 --- a/OpenCL/m31400_a0-pure.cl +++ b/OpenCL/m31400_a0-pure.cl @@ -135,7 +135,7 @@ DECLSPEC void aes256_scrt_format (PRIVATE_AS u32 *aes_ks, PRIVATE_AS u32 *pw, co AES256_encrypt (aes_ks, hash, out, s_te0, s_te1, s_te2, s_te3, s_te4); } -KERNEL_FQ void m31400_mxx (KERN_ATTR_RULES_ESALT (scrtv2_t)) +KERNEL_FQ void HC_ATTR_SEQ m31400_mxx (KERN_ATTR_RULES_ESALT (scrtv2_t)) { /** * modifier @@ -219,7 +219,7 @@ KERNEL_FQ void m31400_mxx (KERN_ATTR_RULES_ESALT (scrtv2_t)) } } -KERNEL_FQ void m31400_sxx (KERN_ATTR_RULES_ESALT (scrtv2_t)) +KERNEL_FQ void HC_ATTR_SEQ m31400_sxx (KERN_ATTR_RULES_ESALT (scrtv2_t)) { /** * modifier diff --git a/OpenCL/m31400_a1-optimized.cl b/OpenCL/m31400_a1-optimized.cl index e6b266a23..26419644a 100644 --- a/OpenCL/m31400_a1-optimized.cl +++ b/OpenCL/m31400_a1-optimized.cl @@ -300,7 +300,7 @@ DECLSPEC void aes256_scrt_format_VV (PRIVATE_AS u32 *aes_ks, PRIVATE_AS u32x *w, #endif } -KERNEL_FQ void m31400_m04 (KERN_ATTR_ESALT (scrtv2_t)) +KERNEL_FQ void HC_ATTR_SEQ m31400_m04 (KERN_ATTR_ESALT (scrtv2_t)) { /** * modifier @@ -586,15 +586,15 @@ KERNEL_FQ void m31400_m04 (KERN_ATTR_ESALT (scrtv2_t)) } } -KERNEL_FQ void m31400_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m31400_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m31400_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m31400_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m31400_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m31400_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -892,10 +892,10 @@ KERNEL_FQ void m31400_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m31400_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m31400_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m31400_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m31400_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m31400_a1-pure.cl b/OpenCL/m31400_a1-pure.cl index 390bc8bf3..6d076cee2 100644 --- a/OpenCL/m31400_a1-pure.cl +++ b/OpenCL/m31400_a1-pure.cl @@ -135,7 +135,7 @@ DECLSPEC void aes256_scrt_format (PRIVATE_AS u32 *aes_ks, PRIVATE_AS u32 *pw, co AES256_encrypt (aes_ks, hash, out, s_te0, s_te1, s_te2, s_te3, s_te4); } -KERNEL_FQ void m31400_mxx (KERN_ATTR_ESALT (scrtv2_t)) +KERNEL_FQ void HC_ATTR_SEQ m31400_mxx (KERN_ATTR_ESALT (scrtv2_t)) { /** * modifier @@ -225,7 +225,7 @@ KERNEL_FQ void m31400_mxx (KERN_ATTR_ESALT (scrtv2_t)) } } -KERNEL_FQ void m31400_sxx (KERN_ATTR_ESALT (scrtv2_t)) +KERNEL_FQ void HC_ATTR_SEQ m31400_sxx (KERN_ATTR_ESALT (scrtv2_t)) { /** * modifier diff --git a/OpenCL/m31400_a3-optimized.cl b/OpenCL/m31400_a3-optimized.cl index a9c43e961..b887309c9 100644 --- a/OpenCL/m31400_a3-optimized.cl +++ b/OpenCL/m31400_a3-optimized.cl @@ -478,7 +478,7 @@ DECLSPEC void m31400m (SHM_TYPE u32a *s_te0, SHM_TYPE u32a *s_te1, SHM_TYPE u32a } } -KERNEL_FQ void m31400_m04 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) +KERNEL_FQ void HC_ATTR_SEQ m31400_m04 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) { /** * base @@ -551,7 +551,7 @@ KERNEL_FQ void m31400_m04 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) m31400m (s_te0, s_te1, s_te2, s_te3, s_te4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m31400_m08 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) +KERNEL_FQ void HC_ATTR_SEQ m31400_m08 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) { /** * base @@ -624,7 +624,7 @@ KERNEL_FQ void m31400_m08 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) m31400m (s_te0, s_te1, s_te2, s_te3, s_te4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m31400_m16 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) +KERNEL_FQ void HC_ATTR_SEQ m31400_m16 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) { /** * base @@ -885,7 +885,7 @@ DECLSPEC void m31400s (SHM_TYPE u32a *s_te0, SHM_TYPE u32a *s_te1, SHM_TYPE u32a } } -KERNEL_FQ void m31400_s04 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) +KERNEL_FQ void HC_ATTR_SEQ m31400_s04 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) { /** * base @@ -957,7 +957,7 @@ KERNEL_FQ void m31400_s04 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) m31400s (s_te0, s_te1, s_te2, s_te3, s_te4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m31400_s08 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) +KERNEL_FQ void HC_ATTR_SEQ m31400_s08 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) { /** * base @@ -1030,7 +1030,7 @@ KERNEL_FQ void m31400_s08 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) m31400s (s_te0, s_te1, s_te2, s_te3, s_te4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void m31400_s16 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) +KERNEL_FQ void HC_ATTR_SEQ m31400_s16 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) { /** * base diff --git a/OpenCL/m31400_a3-pure.cl b/OpenCL/m31400_a3-pure.cl index 7baacb913..a2e1174eb 100644 --- a/OpenCL/m31400_a3-pure.cl +++ b/OpenCL/m31400_a3-pure.cl @@ -305,7 +305,7 @@ DECLSPEC void aes256_scrt_format_VV (PRIVATE_AS u32 *aes_ks, PRIVATE_AS u32x *w, #endif } -KERNEL_FQ void m31400_mxx (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) +KERNEL_FQ void HC_ATTR_SEQ m31400_mxx (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) { /** * modifier @@ -400,7 +400,7 @@ KERNEL_FQ void m31400_mxx (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) } } -KERNEL_FQ void m31400_sxx (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) +KERNEL_FQ void HC_ATTR_SEQ m31400_sxx (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) { /** * modifier diff --git a/OpenCL/m31500-pure.cl b/OpenCL/m31500-pure.cl index 9797dfcff..9bee3da14 100644 --- a/OpenCL/m31500-pure.cl +++ b/OpenCL/m31500-pure.cl @@ -41,7 +41,7 @@ typedef struct dcc_tmp } dcc_tmp_t; -KERNEL_FQ void m31500_init (KERN_ATTR_TMPS (dcc_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m31500_init (KERN_ATTR_TMPS (dcc_tmp_t)) { /** * modifier @@ -79,12 +79,12 @@ KERNEL_FQ void m31500_init (KERN_ATTR_TMPS (dcc_tmp_t)) tmps[gid].digest_buf[3] = out[3]; } -KERNEL_FQ void m31500_loop (KERN_ATTR_TMPS (dcc_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m31500_loop (KERN_ATTR_TMPS (dcc_tmp_t)) { } -KERNEL_FQ void m31500_comp (KERN_ATTR_TMPS (dcc_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m31500_comp (KERN_ATTR_TMPS (dcc_tmp_t)) { /** * modifier diff --git a/OpenCL/m31600-pure.cl b/OpenCL/m31600-pure.cl index 40af858f4..2fae3b56a 100644 --- a/OpenCL/m31600-pure.cl +++ b/OpenCL/m31600-pure.cl @@ -82,7 +82,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m31600_init (KERN_ATTR_TMPS (dcc2_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m31600_init (KERN_ATTR_TMPS (dcc2_tmp_t)) { /** * base @@ -210,7 +210,7 @@ KERNEL_FQ void m31600_init (KERN_ATTR_TMPS (dcc2_tmp_t)) tmps[gid].out[3] = tmps[gid].dgst[3]; } -KERNEL_FQ void m31600_loop (KERN_ATTR_TMPS (dcc2_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m31600_loop (KERN_ATTR_TMPS (dcc2_tmp_t)) { /** * base @@ -297,7 +297,7 @@ KERNEL_FQ void m31600_loop (KERN_ATTR_TMPS (dcc2_tmp_t)) unpackv (tmps, out, gid, 3, out[3]); } -KERNEL_FQ void m31600_comp (KERN_ATTR_TMPS (dcc2_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m31600_comp (KERN_ATTR_TMPS (dcc2_tmp_t)) { /** * base diff --git a/OpenCL/m31700_a0-pure.cl b/OpenCL/m31700_a0-pure.cl index f56df6f88..d11de4b16 100644 --- a/OpenCL/m31700_a0-pure.cl +++ b/OpenCL/m31700_a0-pure.cl @@ -38,7 +38,7 @@ typedef struct md5_double_salt } md5_double_salt_t; -KERNEL_FQ void m31700_mxx (KERN_ATTR_RULES_ESALT (md5_double_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m31700_mxx (KERN_ATTR_RULES_ESALT (md5_double_salt_t)) { /** * modifier @@ -180,7 +180,7 @@ KERNEL_FQ void m31700_mxx (KERN_ATTR_RULES_ESALT (md5_double_salt_t)) } } -KERNEL_FQ void m31700_sxx (KERN_ATTR_RULES_ESALT (md5_double_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m31700_sxx (KERN_ATTR_RULES_ESALT (md5_double_salt_t)) { /** * modifier diff --git a/OpenCL/m31700_a1-pure.cl b/OpenCL/m31700_a1-pure.cl index 3b07f7e55..2cdf3baee 100644 --- a/OpenCL/m31700_a1-pure.cl +++ b/OpenCL/m31700_a1-pure.cl @@ -36,7 +36,7 @@ typedef struct md5_double_salt } md5_double_salt_t; -KERNEL_FQ void m31700_mxx (KERN_ATTR_ESALT (md5_double_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m31700_mxx (KERN_ATTR_ESALT (md5_double_salt_t)) { /** * modifier @@ -176,7 +176,7 @@ KERNEL_FQ void m31700_mxx (KERN_ATTR_ESALT (md5_double_salt_t)) } } -KERNEL_FQ void m31700_sxx (KERN_ATTR_ESALT (md5_double_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m31700_sxx (KERN_ATTR_ESALT (md5_double_salt_t)) { /** * modifier diff --git a/OpenCL/m31700_a3-pure.cl b/OpenCL/m31700_a3-pure.cl index 9a9db3047..0eb1ab7c5 100644 --- a/OpenCL/m31700_a3-pure.cl +++ b/OpenCL/m31700_a3-pure.cl @@ -36,7 +36,7 @@ typedef struct md5_double_salt } md5_double_salt_t; -KERNEL_FQ void m31700_mxx (KERN_ATTR_VECTOR_ESALT (md5_double_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m31700_mxx (KERN_ATTR_VECTOR_ESALT (md5_double_salt_t)) { /** * modifier @@ -189,7 +189,7 @@ KERNEL_FQ void m31700_mxx (KERN_ATTR_VECTOR_ESALT (md5_double_salt_t)) } } -KERNEL_FQ void m31700_sxx (KERN_ATTR_VECTOR_ESALT (md5_double_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m31700_sxx (KERN_ATTR_VECTOR_ESALT (md5_double_salt_t)) { /** * modifier diff --git a/OpenCL/m31800-pure.cl b/OpenCL/m31800-pure.cl index 55ec89ddf..76f9b837c 100644 --- a/OpenCL/m31800-pure.cl +++ b/OpenCL/m31800-pure.cl @@ -88,7 +88,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m31800_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, onepassword8_t)) +KERNEL_FQ void HC_ATTR_SEQ m31800_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, onepassword8_t)) { /** * base @@ -191,7 +191,7 @@ KERNEL_FQ void m31800_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, onepasswo } } -KERNEL_FQ void m31800_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, onepassword8_t)) +KERNEL_FQ void HC_ATTR_SEQ m31800_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, onepassword8_t)) { const u64 gid = get_global_id (0); @@ -297,7 +297,7 @@ KERNEL_FQ void m31800_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, onepasswo } } -KERNEL_FQ void m31800_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, onepassword8_t)) +KERNEL_FQ void HC_ATTR_SEQ m31800_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, onepassword8_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m31900-pure.cl b/OpenCL/m31900-pure.cl index fca9b423d..661c3a85c 100644 --- a/OpenCL/m31900-pure.cl +++ b/OpenCL/m31900-pure.cl @@ -96,7 +96,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void m31900_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, pbkdf2_sha512_aes_cbc_t)) +KERNEL_FQ void HC_ATTR_SEQ m31900_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, pbkdf2_sha512_aes_cbc_t)) { /** * base @@ -200,7 +200,7 @@ KERNEL_FQ void m31900_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, pbkdf2_sh } } -KERNEL_FQ void m31900_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, pbkdf2_sha512_aes_cbc_t)) +KERNEL_FQ void HC_ATTR_SEQ m31900_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, pbkdf2_sha512_aes_cbc_t)) { const u64 gid = get_global_id (0); @@ -326,7 +326,7 @@ KERNEL_FQ void m31900_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, pbkdf2_sh } } -KERNEL_FQ void m31900_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, pbkdf2_sha512_aes_cbc_t)) +KERNEL_FQ void HC_ATTR_SEQ m31900_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, pbkdf2_sha512_aes_cbc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m32000-pure.cl b/OpenCL/m32000-pure.cl index e7d985b52..0d3975f8b 100644 --- a/OpenCL/m32000-pure.cl +++ b/OpenCL/m32000-pure.cl @@ -23,7 +23,7 @@ typedef struct netiq_sspr_md5_tmp } netiq_sspr_md5_tmp_t; -KERNEL_FQ void m32000_init (KERN_ATTR_TMPS (netiq_sspr_md5_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m32000_init (KERN_ATTR_TMPS (netiq_sspr_md5_tmp_t)) { /** * base @@ -47,7 +47,7 @@ KERNEL_FQ void m32000_init (KERN_ATTR_TMPS (netiq_sspr_md5_tmp_t)) tmps[gid].dgst[3] = ctx.h[3]; } -KERNEL_FQ void m32000_loop (KERN_ATTR_TMPS (netiq_sspr_md5_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m32000_loop (KERN_ATTR_TMPS (netiq_sspr_md5_tmp_t)) { const u64 gid = get_global_id (0); @@ -108,7 +108,7 @@ KERNEL_FQ void m32000_loop (KERN_ATTR_TMPS (netiq_sspr_md5_tmp_t)) } } -KERNEL_FQ void m32000_comp (KERN_ATTR_TMPS (netiq_sspr_md5_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m32000_comp (KERN_ATTR_TMPS (netiq_sspr_md5_tmp_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m32010-pure.cl b/OpenCL/m32010-pure.cl index c806dce13..18ca02660 100644 --- a/OpenCL/m32010-pure.cl +++ b/OpenCL/m32010-pure.cl @@ -23,7 +23,7 @@ typedef struct netiq_sspr_sha1_tmp } netiq_sspr_sha1_tmp_t; -KERNEL_FQ void m32010_init (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m32010_init (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) { /** * base @@ -48,7 +48,7 @@ KERNEL_FQ void m32010_init (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) tmps[gid].dgst[4] = ctx.h[4]; } -KERNEL_FQ void m32010_loop (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m32010_loop (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) { const u64 gid = get_global_id (0); @@ -113,7 +113,7 @@ KERNEL_FQ void m32010_loop (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) } } -KERNEL_FQ void m32010_comp (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m32010_comp (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m32020-pure.cl b/OpenCL/m32020-pure.cl index b779676e2..e65a8a0a5 100644 --- a/OpenCL/m32020-pure.cl +++ b/OpenCL/m32020-pure.cl @@ -23,7 +23,7 @@ typedef struct netiq_sspr_sha1_tmp } netiq_sspr_sha1_tmp_t; -KERNEL_FQ void m32020_init (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m32020_init (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) { /** * base @@ -50,7 +50,7 @@ KERNEL_FQ void m32020_init (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) tmps[gid].dgst[4] = ctx.h[4]; } -KERNEL_FQ void m32020_loop (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m32020_loop (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) { const u64 gid = get_global_id (0); @@ -115,7 +115,7 @@ KERNEL_FQ void m32020_loop (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) } } -KERNEL_FQ void m32020_comp (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m32020_comp (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m32030-pure.cl b/OpenCL/m32030-pure.cl index 78ea30d56..4dcfe16b9 100644 --- a/OpenCL/m32030-pure.cl +++ b/OpenCL/m32030-pure.cl @@ -23,7 +23,7 @@ typedef struct netiq_sspr_sha256_tmp } netiq_sspr_sha256_tmp_t; -KERNEL_FQ void m32030_init (KERN_ATTR_TMPS (netiq_sspr_sha256_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m32030_init (KERN_ATTR_TMPS (netiq_sspr_sha256_tmp_t)) { /** * base @@ -53,7 +53,7 @@ KERNEL_FQ void m32030_init (KERN_ATTR_TMPS (netiq_sspr_sha256_tmp_t)) tmps[gid].dgst[7] = ctx.h[7]; } -KERNEL_FQ void m32030_loop (KERN_ATTR_TMPS (netiq_sspr_sha256_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m32030_loop (KERN_ATTR_TMPS (netiq_sspr_sha256_tmp_t)) { const u64 gid = get_global_id (0); @@ -130,7 +130,7 @@ KERNEL_FQ void m32030_loop (KERN_ATTR_TMPS (netiq_sspr_sha256_tmp_t)) } } -KERNEL_FQ void m32030_comp (KERN_ATTR_TMPS (netiq_sspr_sha256_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m32030_comp (KERN_ATTR_TMPS (netiq_sspr_sha256_tmp_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m32040-pure.cl b/OpenCL/m32040-pure.cl index 66611bd98..c5fb0fb3c 100644 --- a/OpenCL/m32040-pure.cl +++ b/OpenCL/m32040-pure.cl @@ -23,7 +23,7 @@ typedef struct netiq_sspr_sha512_tmp } netiq_sspr_sha512_tmp_t; -KERNEL_FQ void m32040_init (KERN_ATTR_TMPS (netiq_sspr_sha512_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m32040_init (KERN_ATTR_TMPS (netiq_sspr_sha512_tmp_t)) { /** * base @@ -53,7 +53,7 @@ KERNEL_FQ void m32040_init (KERN_ATTR_TMPS (netiq_sspr_sha512_tmp_t)) tmps[gid].dgst[7] = ctx.h[7]; } -KERNEL_FQ void m32040_loop (KERN_ATTR_TMPS (netiq_sspr_sha512_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m32040_loop (KERN_ATTR_TMPS (netiq_sspr_sha512_tmp_t)) { const u64 gid = get_global_id (0); @@ -150,7 +150,7 @@ KERNEL_FQ void m32040_loop (KERN_ATTR_TMPS (netiq_sspr_sha512_tmp_t)) } } -KERNEL_FQ void m32040_comp (KERN_ATTR_TMPS (netiq_sspr_sha512_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m32040_comp (KERN_ATTR_TMPS (netiq_sspr_sha512_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m32100-pure.cl b/OpenCL/m32100-pure.cl index a1e9fe227..fe2730abf 100644 --- a/OpenCL/m32100-pure.cl +++ b/OpenCL/m32100-pure.cl @@ -116,7 +116,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m32100_init (KERN_ATTR_TMPS_ESALT (krb5asrep_17_tmp_t, krb5asrep_17_t)) +KERNEL_FQ void HC_ATTR_SEQ m32100_init (KERN_ATTR_TMPS_ESALT (krb5asrep_17_tmp_t, krb5asrep_17_t)) { /** * base @@ -194,7 +194,7 @@ KERNEL_FQ void m32100_init (KERN_ATTR_TMPS_ESALT (krb5asrep_17_tmp_t, krb5asrep_ } } -KERNEL_FQ void m32100_loop (KERN_ATTR_TMPS_ESALT (krb5asrep_17_tmp_t, krb5asrep_17_t)) +KERNEL_FQ void HC_ATTR_SEQ m32100_loop (KERN_ATTR_TMPS_ESALT (krb5asrep_17_tmp_t, krb5asrep_17_t)) { /** * base @@ -282,7 +282,7 @@ KERNEL_FQ void m32100_loop (KERN_ATTR_TMPS_ESALT (krb5asrep_17_tmp_t, krb5asrep_ } } -KERNEL_FQ void m32100_comp (KERN_ATTR_TMPS_ESALT (krb5asrep_17_tmp_t, krb5asrep_17_t)) +KERNEL_FQ void HC_ATTR_SEQ m32100_comp (KERN_ATTR_TMPS_ESALT (krb5asrep_17_tmp_t, krb5asrep_17_t)) { /** * base diff --git a/OpenCL/m32200-pure.cl b/OpenCL/m32200-pure.cl index 9a9d999ae..7dc292115 100644 --- a/OpenCL/m32200-pure.cl +++ b/OpenCL/m32200-pure.cl @@ -116,7 +116,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m32200_init (KERN_ATTR_TMPS_ESALT (krb5asrep_18_tmp_t, krb5asrep_18_t)) +KERNEL_FQ void HC_ATTR_SEQ m32200_init (KERN_ATTR_TMPS_ESALT (krb5asrep_18_tmp_t, krb5asrep_18_t)) { /** * base @@ -194,7 +194,7 @@ KERNEL_FQ void m32200_init (KERN_ATTR_TMPS_ESALT (krb5asrep_18_tmp_t, krb5asrep_ } } -KERNEL_FQ void m32200_loop (KERN_ATTR_TMPS_ESALT (krb5asrep_18_tmp_t, krb5asrep_18_t)) +KERNEL_FQ void HC_ATTR_SEQ m32200_loop (KERN_ATTR_TMPS_ESALT (krb5asrep_18_tmp_t, krb5asrep_18_t)) { /** * base @@ -282,7 +282,7 @@ KERNEL_FQ void m32200_loop (KERN_ATTR_TMPS_ESALT (krb5asrep_18_tmp_t, krb5asrep_ } } -KERNEL_FQ void m32200_comp (KERN_ATTR_TMPS_ESALT (krb5asrep_18_tmp_t, krb5asrep_18_t)) +KERNEL_FQ void HC_ATTR_SEQ m32200_comp (KERN_ATTR_TMPS_ESALT (krb5asrep_18_tmp_t, krb5asrep_18_t)) { /** * base diff --git a/OpenCL/m32300_a0-optimized.cl b/OpenCL/m32300_a0-optimized.cl index 76400a61e..2d40860cd 100644 --- a/OpenCL/m32300_a0-optimized.cl +++ b/OpenCL/m32300_a0-optimized.cl @@ -41,7 +41,7 @@ typedef struct md5_triple_salt } md5_triple_salt_t; -KERNEL_FQ void m32300_m04 (KERN_ATTR_RULES_ESALT (md5_triple_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m32300_m04 (KERN_ATTR_RULES_ESALT (md5_triple_salt_t)) { /** * modifier @@ -413,15 +413,15 @@ KERNEL_FQ void m32300_m04 (KERN_ATTR_RULES_ESALT (md5_triple_salt_t)) } } -KERNEL_FQ void m32300_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m32300_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m32300_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m32300_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m32300_s04 (KERN_ATTR_RULES_ESALT (md5_triple_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m32300_s04 (KERN_ATTR_RULES_ESALT (md5_triple_salt_t)) { /** * modifier @@ -804,10 +804,10 @@ KERNEL_FQ void m32300_s04 (KERN_ATTR_RULES_ESALT (md5_triple_salt_t)) } } -KERNEL_FQ void m32300_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m32300_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void m32300_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m32300_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m32300_a0-pure.cl b/OpenCL/m32300_a0-pure.cl index 59c177abc..57fc0f2db 100644 --- a/OpenCL/m32300_a0-pure.cl +++ b/OpenCL/m32300_a0-pure.cl @@ -41,7 +41,7 @@ typedef struct md5_triple_salt } md5_triple_salt_t; -KERNEL_FQ void m32300_mxx (KERN_ATTR_RULES_ESALT (md5_triple_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m32300_mxx (KERN_ATTR_RULES_ESALT (md5_triple_salt_t)) { /** * modifier @@ -208,7 +208,7 @@ KERNEL_FQ void m32300_mxx (KERN_ATTR_RULES_ESALT (md5_triple_salt_t)) } } -KERNEL_FQ void m32300_sxx (KERN_ATTR_RULES_ESALT (md5_triple_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m32300_sxx (KERN_ATTR_RULES_ESALT (md5_triple_salt_t)) { /** * modifier diff --git a/OpenCL/m32300_a1-optimized.cl b/OpenCL/m32300_a1-optimized.cl index 371cb2d99..b073db7a6 100644 --- a/OpenCL/m32300_a1-optimized.cl +++ b/OpenCL/m32300_a1-optimized.cl @@ -39,7 +39,7 @@ typedef struct md5_triple_salt } md5_triple_salt_t; -KERNEL_FQ void m32300_m04 (KERN_ATTR_ESALT (md5_triple_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m32300_m04 (KERN_ATTR_ESALT (md5_triple_salt_t)) { /** * modifier @@ -466,15 +466,15 @@ KERNEL_FQ void m32300_m04 (KERN_ATTR_ESALT (md5_triple_salt_t)) } } -KERNEL_FQ void m32300_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m32300_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m32300_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m32300_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m32300_s04 (KERN_ATTR_ESALT (md5_triple_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m32300_s04 (KERN_ATTR_ESALT (md5_triple_salt_t)) { /** * modifier @@ -916,10 +916,10 @@ KERNEL_FQ void m32300_s04 (KERN_ATTR_ESALT (md5_triple_salt_t)) } } -KERNEL_FQ void m32300_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m32300_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void m32300_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m32300_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m32300_a1-pure.cl b/OpenCL/m32300_a1-pure.cl index 132db135a..1a29b6639 100644 --- a/OpenCL/m32300_a1-pure.cl +++ b/OpenCL/m32300_a1-pure.cl @@ -39,7 +39,7 @@ typedef struct md5_triple_salt } md5_triple_salt_t; -KERNEL_FQ void m32300_mxx (KERN_ATTR_ESALT (md5_triple_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m32300_mxx (KERN_ATTR_ESALT (md5_triple_salt_t)) { /** * modifier @@ -204,7 +204,7 @@ KERNEL_FQ void m32300_mxx (KERN_ATTR_ESALT (md5_triple_salt_t)) } } -KERNEL_FQ void m32300_sxx (KERN_ATTR_ESALT (md5_triple_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m32300_sxx (KERN_ATTR_ESALT (md5_triple_salt_t)) { /** * modifier diff --git a/OpenCL/m32300_a3-optimized.cl b/OpenCL/m32300_a3-optimized.cl index 74a051cf5..5365f4890 100644 --- a/OpenCL/m32300_a3-optimized.cl +++ b/OpenCL/m32300_a3-optimized.cl @@ -748,7 +748,7 @@ DECLSPEC void m32300s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void m32300_m04 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m32300_m04 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) { /** * base @@ -818,7 +818,7 @@ KERNEL_FQ void m32300_m04 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) m32300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m32300_m08 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m32300_m08 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) { /** * base @@ -888,7 +888,7 @@ KERNEL_FQ void m32300_m08 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) m32300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m32300_m16 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m32300_m16 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) { /** * base @@ -958,7 +958,7 @@ KERNEL_FQ void m32300_m16 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) m32300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m32300_s04 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m32300_s04 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) { /** * base @@ -1028,7 +1028,7 @@ KERNEL_FQ void m32300_s04 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) m32300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m32300_s08 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m32300_s08 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) { /** * base @@ -1098,7 +1098,7 @@ KERNEL_FQ void m32300_s08 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) m32300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void m32300_s16 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m32300_s16 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) { /** * base diff --git a/OpenCL/m32300_a3-pure.cl b/OpenCL/m32300_a3-pure.cl index 1345df59d..afb20656b 100644 --- a/OpenCL/m32300_a3-pure.cl +++ b/OpenCL/m32300_a3-pure.cl @@ -39,7 +39,7 @@ typedef struct md5_triple_salt } md5_triple_salt_t; -KERNEL_FQ void m32300_mxx (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m32300_mxx (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) { /** * modifier @@ -217,7 +217,7 @@ KERNEL_FQ void m32300_mxx (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) } } -KERNEL_FQ void m32300_sxx (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) +KERNEL_FQ void HC_ATTR_SEQ m32300_sxx (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) { /** * modifier diff --git a/OpenCL/m32410_a0-pure.cl b/OpenCL/m32410_a0-pure.cl index 864468195..fdf17e50a 100644 --- a/OpenCL/m32410_a0-pure.cl +++ b/OpenCL/m32410_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m32410_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m32410_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -192,7 +192,7 @@ KERNEL_FQ void m32410_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m32410_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m32410_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m32410_a1-pure.cl b/OpenCL/m32410_a1-pure.cl index 65dccc7d6..db2b62968 100644 --- a/OpenCL/m32410_a1-pure.cl +++ b/OpenCL/m32410_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m32410_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m32410_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -188,7 +188,7 @@ KERNEL_FQ void m32410_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m32410_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m32410_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m32410_a3-pure.cl b/OpenCL/m32410_a3-pure.cl index 32b0c17d9..40efa9cf9 100644 --- a/OpenCL/m32410_a3-pure.cl +++ b/OpenCL/m32410_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void m32410_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m32410_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -201,7 +201,7 @@ KERNEL_FQ void m32410_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m32410_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m32410_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m32420_a0-pure.cl b/OpenCL/m32420_a0-pure.cl index 79a7c2712..ac5bdb6a8 100644 --- a/OpenCL/m32420_a0-pure.cl +++ b/OpenCL/m32420_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m32420_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m32420_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -122,7 +122,7 @@ KERNEL_FQ void m32420_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m32420_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m32420_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m32420_a1-pure.cl b/OpenCL/m32420_a1-pure.cl index 1835d4fba..ac7c855b1 100644 --- a/OpenCL/m32420_a1-pure.cl +++ b/OpenCL/m32420_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m32420_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m32420_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -118,7 +118,7 @@ KERNEL_FQ void m32420_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m32420_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m32420_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m32420_a3-pure.cl b/OpenCL/m32420_a3-pure.cl index ae4575e1b..97f98b835 100644 --- a/OpenCL/m32420_a3-pure.cl +++ b/OpenCL/m32420_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void m32420_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m32420_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -140,7 +140,7 @@ KERNEL_FQ void m32420_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m32420_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m32420_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m32500-pure.cl b/OpenCL/m32500-pure.cl index a40ed2481..510243599 100644 --- a/OpenCL/m32500-pure.cl +++ b/OpenCL/m32500-pure.cl @@ -127,7 +127,7 @@ DECLSPEC void base64_encode_sha256 (u32 *out, const u32 *in) } //--------------------------------------------------------------------------------------- -KERNEL_FQ void m32500_init (KERN_ATTR_TMPS_ESALT (doge_tmp_t, payload_t)) +KERNEL_FQ void HC_ATTR_SEQ m32500_init (KERN_ATTR_TMPS_ESALT (doge_tmp_t, payload_t)) { const u64 gid = get_global_id (0); @@ -220,7 +220,7 @@ KERNEL_FQ void m32500_init (KERN_ATTR_TMPS_ESALT (doge_tmp_t, payload_t)) } -KERNEL_FQ void m32500_loop (KERN_ATTR_TMPS_ESALT (doge_tmp_t, payload_t)) +KERNEL_FQ void HC_ATTR_SEQ m32500_loop (KERN_ATTR_TMPS_ESALT (doge_tmp_t, payload_t)) { //pbkdf2hmac here @@ -328,7 +328,7 @@ KERNEL_FQ void m32500_loop (KERN_ATTR_TMPS_ESALT (doge_tmp_t, payload_t)) } } -KERNEL_FQ void m32500_comp (KERN_ATTR_TMPS_ESALT (doge_tmp_t, payload_t)) +KERNEL_FQ void HC_ATTR_SEQ m32500_comp (KERN_ATTR_TMPS_ESALT (doge_tmp_t, payload_t)) { /** * base diff --git a/OpenCL/m32600_a0-pure.cl b/OpenCL/m32600_a0-pure.cl index b3200f1cf..224bdf578 100644 --- a/OpenCL/m32600_a0-pure.cl +++ b/OpenCL/m32600_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_whirlpool.cl) #endif -KERNEL_FQ void m32600_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m32600_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -118,7 +118,7 @@ KERNEL_FQ void m32600_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m32600_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m32600_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m32600_a1-pure.cl b/OpenCL/m32600_a1-pure.cl index 40289ed35..ab26a0579 100644 --- a/OpenCL/m32600_a1-pure.cl +++ b/OpenCL/m32600_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_whirlpool.cl) #endif -KERNEL_FQ void m32600_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m32600_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -112,7 +112,7 @@ KERNEL_FQ void m32600_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m32600_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m32600_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m32600_a3-pure.cl b/OpenCL/m32600_a3-pure.cl index 173ba4381..90ac75850 100644 --- a/OpenCL/m32600_a3-pure.cl +++ b/OpenCL/m32600_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_whirlpool.cl) #endif -KERNEL_FQ void m32600_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m32600_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -127,7 +127,7 @@ KERNEL_FQ void m32600_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m32600_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m32600_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m32700-pure.cl b/OpenCL/m32700-pure.cl index 4f25d3020..bf9f366e3 100644 --- a/OpenCL/m32700-pure.cl +++ b/OpenCL/m32700-pure.cl @@ -120,7 +120,7 @@ DECLSPEC void sha1_final_32700 (PRIVATE_AS sha1_ctx_t *ctx) sha1_transform (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h); } -KERNEL_FQ void m32700_init (KERN_ATTR_TMPS (sha1_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m32700_init (KERN_ATTR_TMPS (sha1_tmp_t)) { const u64 gid = get_global_id (0); @@ -161,7 +161,7 @@ KERNEL_FQ void m32700_init (KERN_ATTR_TMPS (sha1_tmp_t)) } } -KERNEL_FQ void m32700_loop (KERN_ATTR_TMPS (sha1_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m32700_loop (KERN_ATTR_TMPS (sha1_tmp_t)) { const u64 gid = get_global_id (0); @@ -193,7 +193,7 @@ KERNEL_FQ void m32700_loop (KERN_ATTR_TMPS (sha1_tmp_t)) } } -KERNEL_FQ void m32700_comp (KERN_ATTR_TMPS (sha1_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m32700_comp (KERN_ATTR_TMPS (sha1_tmp_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m33300_a0-pure.cl b/OpenCL/m33300_a0-pure.cl index 78fc5d463..bfdf62879 100644 --- a/OpenCL/m33300_a0-pure.cl +++ b/OpenCL/m33300_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2s.cl) #endif -KERNEL_FQ void m33300_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m33300_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void m33300_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void m33300_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ void HC_ATTR_SEQ m33300_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m33300_a1-pure.cl b/OpenCL/m33300_a1-pure.cl index 9c0cf15d0..320ff4784 100644 --- a/OpenCL/m33300_a1-pure.cl +++ b/OpenCL/m33300_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2s.cl) #endif -KERNEL_FQ void m33300_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m33300_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -92,7 +92,7 @@ KERNEL_FQ void m33300_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void m33300_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ void HC_ATTR_SEQ m33300_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m33300_a3-pure.cl b/OpenCL/m33300_a3-pure.cl index 5cdfefcd0..5f0d4261a 100644 --- a/OpenCL/m33300_a3-pure.cl +++ b/OpenCL/m33300_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2s.cl) #endif -KERNEL_FQ void m33300_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m33300_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -78,7 +78,7 @@ KERNEL_FQ void m33300_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void m33300_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ void HC_ATTR_SEQ m33300_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m33500_a0-optimized.cl b/OpenCL/m33500_a0-optimized.cl index 4f7332db6..3ea5edb5e 100644 --- a/OpenCL/m33500_a0-optimized.cl +++ b/OpenCL/m33500_a0-optimized.cl @@ -40,7 +40,7 @@ CONSTANT_VK u32 pt_masks[8] = 0 }; -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33500_m04 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33500_m04 (KERN_ATTR_RULES_ESALT (rc4_t)) { /** * base @@ -123,15 +123,15 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33500_m04 (KERN_ATTR_RULES_ } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33500_m08 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33500_m08 (KERN_ATTR_RULES_ESALT (rc4_t)) { } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33500_m16 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33500_m16 (KERN_ATTR_RULES_ESALT (rc4_t)) { } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33500_s04 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33500_s04 (KERN_ATTR_RULES_ESALT (rc4_t)) { /** * base @@ -230,10 +230,10 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33500_s04 (KERN_ATTR_RULES_ } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33500_s08 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33500_s08 (KERN_ATTR_RULES_ESALT (rc4_t)) { } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33500_s16 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33500_s16 (KERN_ATTR_RULES_ESALT (rc4_t)) { } diff --git a/OpenCL/m33500_a1-optimized.cl b/OpenCL/m33500_a1-optimized.cl index 1a116c145..6ea4e254c 100644 --- a/OpenCL/m33500_a1-optimized.cl +++ b/OpenCL/m33500_a1-optimized.cl @@ -38,7 +38,7 @@ CONSTANT_VK u32 pt_masks[8] = 0 }; -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33500_m04 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33500_m04 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -172,15 +172,15 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33500_m04 (KERN_ATTR_ESALT } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33500_m08 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33500_m08 (KERN_ATTR_ESALT (rc4_t)) { } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33500_m16 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33500_m16 (KERN_ATTR_ESALT (rc4_t)) { } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33500_s04 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33500_s04 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -326,10 +326,10 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33500_s04 (KERN_ATTR_ESALT } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33500_s08 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33500_s08 (KERN_ATTR_ESALT (rc4_t)) { } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33500_s16 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33500_s16 (KERN_ATTR_ESALT (rc4_t)) { } diff --git a/OpenCL/m33500_a3-optimized.cl b/OpenCL/m33500_a3-optimized.cl index 38cebda6e..050a89e55 100644 --- a/OpenCL/m33500_a3-optimized.cl +++ b/OpenCL/m33500_a3-optimized.cl @@ -180,7 +180,7 @@ DECLSPEC void m33500s (LOCAL_AS u32 *S, PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33500_m04 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33500_m04 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -231,7 +231,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33500_m04 (KERN_ATTR_ESALT m33500m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33500_m08 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33500_m08 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -282,7 +282,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33500_m08 (KERN_ATTR_ESALT m33500m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33500_m16 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33500_m16 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -333,7 +333,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33500_m16 (KERN_ATTR_ESALT m33500m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33500_s04 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33500_s04 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -384,7 +384,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33500_s04 (KERN_ATTR_ESALT m33500s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33500_s08 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33500_s08 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -435,7 +435,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33500_s08 (KERN_ATTR_ESALT m33500s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33500_s16 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33500_s16 (KERN_ATTR_ESALT (rc4_t)) { /** * base diff --git a/OpenCL/m33501_a0-optimized.cl b/OpenCL/m33501_a0-optimized.cl index 4e9196869..9a663241d 100644 --- a/OpenCL/m33501_a0-optimized.cl +++ b/OpenCL/m33501_a0-optimized.cl @@ -44,7 +44,7 @@ CONSTANT_VK u32 pt_masks[12] = 0 }; -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33501_m04 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33501_m04 (KERN_ATTR_RULES_ESALT (rc4_t)) { /** * base @@ -137,15 +137,15 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33501_m04 (KERN_ATTR_RULES_ } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33501_m08 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33501_m08 (KERN_ATTR_RULES_ESALT (rc4_t)) { } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33501_m16 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33501_m16 (KERN_ATTR_RULES_ESALT (rc4_t)) { } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33501_s04 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33501_s04 (KERN_ATTR_RULES_ESALT (rc4_t)) { /** * base @@ -254,10 +254,10 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33501_s04 (KERN_ATTR_RULES_ } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33501_s08 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33501_s08 (KERN_ATTR_RULES_ESALT (rc4_t)) { } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33501_s16 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33501_s16 (KERN_ATTR_RULES_ESALT (rc4_t)) { } diff --git a/OpenCL/m33501_a1-optimized.cl b/OpenCL/m33501_a1-optimized.cl index 21abdee29..e3f988682 100644 --- a/OpenCL/m33501_a1-optimized.cl +++ b/OpenCL/m33501_a1-optimized.cl @@ -42,7 +42,7 @@ CONSTANT_VK u32 pt_masks[12] = 0 }; -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33501_m04 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33501_m04 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -186,15 +186,15 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33501_m04 (KERN_ATTR_ESALT } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33501_m08 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33501_m08 (KERN_ATTR_ESALT (rc4_t)) { } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33501_m16 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33501_m16 (KERN_ATTR_ESALT (rc4_t)) { } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33501_s04 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33501_s04 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -350,10 +350,10 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33501_s04 (KERN_ATTR_ESALT } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33501_s08 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33501_s08 (KERN_ATTR_ESALT (rc4_t)) { } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33501_s16 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33501_s16 (KERN_ATTR_ESALT (rc4_t)) { } diff --git a/OpenCL/m33501_a3-optimized.cl b/OpenCL/m33501_a3-optimized.cl index 33b2ff258..d26288170 100644 --- a/OpenCL/m33501_a3-optimized.cl +++ b/OpenCL/m33501_a3-optimized.cl @@ -202,7 +202,7 @@ DECLSPEC void m33501s (LOCAL_AS u32 *S, PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33501_m04 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33501_m04 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -253,7 +253,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33501_m04 (KERN_ATTR_ESALT m33501m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33501_m08 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33501_m08 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -304,7 +304,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33501_m08 (KERN_ATTR_ESALT m33501m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33501_m16 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33501_m16 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -355,7 +355,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33501_m16 (KERN_ATTR_ESALT m33501m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33501_s04 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33501_s04 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -406,7 +406,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33501_s04 (KERN_ATTR_ESALT m33501s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33501_s08 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33501_s08 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -457,7 +457,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33501_s08 (KERN_ATTR_ESALT m33501s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33501_s16 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33501_s16 (KERN_ATTR_ESALT (rc4_t)) { /** * base diff --git a/OpenCL/m33502_a0-optimized.cl b/OpenCL/m33502_a0-optimized.cl index 4dc0012db..99657dea4 100644 --- a/OpenCL/m33502_a0-optimized.cl +++ b/OpenCL/m33502_a0-optimized.cl @@ -48,7 +48,7 @@ CONSTANT_VK u32 pt_masks[16] = 0 }; -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33502_m04 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33502_m04 (KERN_ATTR_RULES_ESALT (rc4_t)) { /** * base @@ -148,15 +148,15 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33502_m04 (KERN_ATTR_RULES_ } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33502_m08 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33502_m08 (KERN_ATTR_RULES_ESALT (rc4_t)) { } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33502_m16 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33502_m16 (KERN_ATTR_RULES_ESALT (rc4_t)) { } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33502_s04 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33502_s04 (KERN_ATTR_RULES_ESALT (rc4_t)) { /** * base @@ -272,10 +272,10 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33502_s04 (KERN_ATTR_RULES_ } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33502_s08 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33502_s08 (KERN_ATTR_RULES_ESALT (rc4_t)) { } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33502_s16 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33502_s16 (KERN_ATTR_RULES_ESALT (rc4_t)) { } diff --git a/OpenCL/m33502_a1-optimized.cl b/OpenCL/m33502_a1-optimized.cl index 12babaeac..450322d81 100644 --- a/OpenCL/m33502_a1-optimized.cl +++ b/OpenCL/m33502_a1-optimized.cl @@ -46,7 +46,7 @@ CONSTANT_VK u32 pt_masks[16] = 0 }; -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33502_m04 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33502_m04 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -197,15 +197,15 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33502_m04 (KERN_ATTR_ESALT } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33502_m08 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33502_m08 (KERN_ATTR_ESALT (rc4_t)) { } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33502_m16 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33502_m16 (KERN_ATTR_ESALT (rc4_t)) { } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33502_s04 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33502_s04 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -368,10 +368,10 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33502_s04 (KERN_ATTR_ESALT } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33502_s08 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33502_s08 (KERN_ATTR_ESALT (rc4_t)) { } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33502_s16 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33502_s16 (KERN_ATTR_ESALT (rc4_t)) { } diff --git a/OpenCL/m33502_a3-optimized.cl b/OpenCL/m33502_a3-optimized.cl index 65a0c8438..60f348068 100644 --- a/OpenCL/m33502_a3-optimized.cl +++ b/OpenCL/m33502_a3-optimized.cl @@ -220,7 +220,7 @@ DECLSPEC void m33502s (LOCAL_AS u32 *S, PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, } } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33502_m04 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33502_m04 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -271,7 +271,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33502_m04 (KERN_ATTR_ESALT m33502m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33502_m08 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33502_m08 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -322,7 +322,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33502_m08 (KERN_ATTR_ESALT m33502m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33502_m16 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33502_m16 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -373,7 +373,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33502_m16 (KERN_ATTR_ESALT m33502m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33502_s04 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33502_s04 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -424,7 +424,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33502_s04 (KERN_ATTR_ESALT m33502s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33502_s08 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33502_s08 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -475,7 +475,7 @@ KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33502_s08 (KERN_ATTR_ESALT m33502s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) m33502_s16 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ void HC_ATTR_SEQ m33502_s16 (KERN_ATTR_ESALT (rc4_t)) { /** * base diff --git a/OpenCL/m33700-pure.cl b/OpenCL/m33700-pure.cl index c82ed5c57..8be18a4da 100644 --- a/OpenCL/m33700-pure.cl +++ b/OpenCL/m33700-pure.cl @@ -75,7 +75,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void m33700_init (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) +KERNEL_FQ void HC_ATTR_SEQ m33700_init (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) { /** * base @@ -157,7 +157,7 @@ KERNEL_FQ void m33700_init (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) } } -KERNEL_FQ void m33700_loop (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) +KERNEL_FQ void HC_ATTR_SEQ m33700_loop (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) { const u64 gid = get_global_id (0); @@ -263,7 +263,7 @@ KERNEL_FQ void m33700_loop (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) } } -KERNEL_FQ void m33700_comp (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) +KERNEL_FQ void HC_ATTR_SEQ m33700_comp (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m70000-pure.cl b/OpenCL/m70000-pure.cl index 94edc957e..b779db741 100644 --- a/OpenCL/m70000-pure.cl +++ b/OpenCL/m70000-pure.cl @@ -26,7 +26,7 @@ typedef struct } argon2_reference_tmp_t; -KERNEL_FQ void m70000_init (KERN_ATTR_TMPS (argon2_reference_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m70000_init (KERN_ATTR_TMPS (argon2_reference_tmp_t)) { const u64 gid = get_global_id (0); @@ -42,11 +42,11 @@ KERNEL_FQ void m70000_init (KERN_ATTR_TMPS (argon2_reference_tmp_t)) tmps[gid].pw_len = pw_len; } -KERNEL_FQ void m70000_loop (KERN_ATTR_TMPS (argon2_reference_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m70000_loop (KERN_ATTR_TMPS (argon2_reference_tmp_t)) { } -KERNEL_FQ void m70000_comp (KERN_ATTR_TMPS (argon2_reference_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m70000_comp (KERN_ATTR_TMPS (argon2_reference_tmp_t)) { /** * base diff --git a/OpenCL/m70100-pure.cl b/OpenCL/m70100-pure.cl index 4890196cb..cb5269c21 100644 --- a/OpenCL/m70100-pure.cl +++ b/OpenCL/m70100-pure.cl @@ -26,7 +26,7 @@ typedef struct } scrypt_tmp_t; -KERNEL_FQ void m70100_init (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m70100_init (KERN_ATTR_TMPS (scrypt_tmp_t)) { /** * base @@ -101,11 +101,11 @@ KERNEL_FQ void m70100_init (KERN_ATTR_TMPS (scrypt_tmp_t)) } } -KERNEL_FQ void m70100_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m70100_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) { } -KERNEL_FQ void m70100_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m70100_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) { /** * base diff --git a/OpenCL/m72000-pure.cl b/OpenCL/m72000-pure.cl index 3ca0285e5..0905c07a2 100644 --- a/OpenCL/m72000-pure.cl +++ b/OpenCL/m72000-pure.cl @@ -28,7 +28,7 @@ typedef struct } generic_io_tmp_t; -KERNEL_FQ void m72000_init (KERN_ATTR_TMPS (generic_io_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m72000_init (KERN_ATTR_TMPS (generic_io_tmp_t)) { const u64 gid = get_global_id (0); @@ -44,11 +44,11 @@ KERNEL_FQ void m72000_init (KERN_ATTR_TMPS (generic_io_tmp_t)) tmps[gid].pw_len = pw_len; } -KERNEL_FQ void m72000_loop (KERN_ATTR_TMPS (generic_io_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m72000_loop (KERN_ATTR_TMPS (generic_io_tmp_t)) { } -KERNEL_FQ void m72000_comp (KERN_ATTR_TMPS (generic_io_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m72000_comp (KERN_ATTR_TMPS (generic_io_tmp_t)) { /** * base diff --git a/OpenCL/m73000-pure.cl b/OpenCL/m73000-pure.cl index 36859baf4..6d7d1d184 100644 --- a/OpenCL/m73000-pure.cl +++ b/OpenCL/m73000-pure.cl @@ -28,7 +28,7 @@ typedef struct } generic_io_tmp_t; -KERNEL_FQ void m73000_init (KERN_ATTR_TMPS (generic_io_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m73000_init (KERN_ATTR_TMPS (generic_io_tmp_t)) { const u64 gid = get_global_id (0); @@ -44,11 +44,11 @@ KERNEL_FQ void m73000_init (KERN_ATTR_TMPS (generic_io_tmp_t)) tmps[gid].pw_len = pw_len; } -KERNEL_FQ void m73000_loop (KERN_ATTR_TMPS (generic_io_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m73000_loop (KERN_ATTR_TMPS (generic_io_tmp_t)) { } -KERNEL_FQ void m73000_comp (KERN_ATTR_TMPS (generic_io_tmp_t)) +KERNEL_FQ void HC_ATTR_SEQ m73000_comp (KERN_ATTR_TMPS (generic_io_tmp_t)) { /** * base diff --git a/OpenCL/markov_be.cl b/OpenCL/markov_be.cl index 0c4dc7d17..650767d7f 100644 --- a/OpenCL/markov_be.cl +++ b/OpenCL/markov_be.cl @@ -47,7 +47,7 @@ DECLSPEC void generate_pw (PRIVATE_AS u32 *pw_buf, GLOBAL_AS const cs_t *root_cs if (bits15) pw_buf[15] = (pw_l_len + pw_r_len) * 8; } -KERNEL_FQ void l_markov (KERN_ATTR_L_MARKOV) +KERNEL_FQ void HC_ATTR_SEQ l_markov (KERN_ATTR_L_MARKOV) { const u64 gid = get_global_id (0); @@ -128,7 +128,7 @@ KERNEL_FQ void l_markov (KERN_ATTR_L_MARKOV) pws_buf_l[gid] = pw; } -KERNEL_FQ void r_markov (KERN_ATTR_R_MARKOV) +KERNEL_FQ void HC_ATTR_SEQ r_markov (KERN_ATTR_R_MARKOV) { const u64 gid = get_global_id (0); @@ -206,7 +206,7 @@ KERNEL_FQ void r_markov (KERN_ATTR_R_MARKOV) pws_buf_r[gid].i = pw.i[0]; } -KERNEL_FQ void C_markov (KERN_ATTR_C_MARKOV) +KERNEL_FQ void HC_ATTR_SEQ C_markov (KERN_ATTR_C_MARKOV) { const u64 gid = get_global_id (0); diff --git a/OpenCL/markov_le.cl b/OpenCL/markov_le.cl index 49da843aa..5ff18285d 100644 --- a/OpenCL/markov_le.cl +++ b/OpenCL/markov_le.cl @@ -47,7 +47,7 @@ DECLSPEC void generate_pw (PRIVATE_AS u32 *pw_buf, GLOBAL_AS const cs_t *root_cs if (bits15) pw_buf[15] = (pw_l_len + pw_r_len) * 8; } -KERNEL_FQ void l_markov (KERN_ATTR_L_MARKOV) +KERNEL_FQ void HC_ATTR_SEQ l_markov (KERN_ATTR_L_MARKOV) { const u64 gid = get_global_id (0); @@ -127,7 +127,7 @@ KERNEL_FQ void l_markov (KERN_ATTR_L_MARKOV) pws_buf_l[gid] = pw; } -KERNEL_FQ void r_markov (KERN_ATTR_R_MARKOV) +KERNEL_FQ void HC_ATTR_SEQ r_markov (KERN_ATTR_R_MARKOV) { const u64 gid = get_global_id (0); @@ -205,7 +205,7 @@ KERNEL_FQ void r_markov (KERN_ATTR_R_MARKOV) pws_buf_r[gid].i = pw.i[0]; } -KERNEL_FQ void C_markov (KERN_ATTR_C_MARKOV) +KERNEL_FQ void HC_ATTR_SEQ C_markov (KERN_ATTR_C_MARKOV) { const u64 gid = get_global_id (0); diff --git a/OpenCL/shared.cl b/OpenCL/shared.cl index 7b8939ded..0c60cf7d9 100644 --- a/OpenCL/shared.cl +++ b/OpenCL/shared.cl @@ -94,7 +94,7 @@ DECLSPEC void gpu_decompress_entry (GLOBAL_AS pw_idx_t *pws_idx, GLOBAL_AS u32 * *buf = pw; } -KERNEL_FQ void gpu_decompress (KERN_ATTR_GPU_DECOMPRESS) +KERNEL_FQ void HC_ATTR_SEQ gpu_decompress (KERN_ATTR_GPU_DECOMPRESS) { const u64 gid = get_global_id (0); @@ -107,7 +107,7 @@ KERNEL_FQ void gpu_decompress (KERN_ATTR_GPU_DECOMPRESS) pws_buf[gid] = pw; } -KERNEL_FQ void gpu_memset (KERN_ATTR_GPU_MEMSET) +KERNEL_FQ void HC_ATTR_SEQ gpu_memset (KERN_ATTR_GPU_MEMSET) { const u64 gid = get_global_id (0); @@ -139,7 +139,7 @@ KERNEL_FQ void gpu_memset (KERN_ATTR_GPU_MEMSET) buf[gid] = r; } -KERNEL_FQ void gpu_bzero (KERN_ATTR_GPU_BZERO) +KERNEL_FQ void HC_ATTR_SEQ gpu_bzero (KERN_ATTR_GPU_BZERO) { const u64 gid = get_global_id (0); @@ -171,7 +171,7 @@ KERNEL_FQ void gpu_bzero (KERN_ATTR_GPU_BZERO) buf[gid] = r; } -KERNEL_FQ void gpu_atinit (KERN_ATTR_GPU_ATINIT) +KERNEL_FQ void HC_ATTR_SEQ gpu_atinit (KERN_ATTR_GPU_ATINIT) { const u64 gid = get_global_id (0); @@ -253,7 +253,7 @@ KERNEL_FQ void gpu_atinit (KERN_ATTR_GPU_ATINIT) buf[gid] = pw; } -KERNEL_FQ void gpu_utf8_to_utf16 (KERN_ATTR_GPU_UTF8_TO_UTF16) +KERNEL_FQ void HC_ATTR_SEQ gpu_utf8_to_utf16 (KERN_ATTR_GPU_UTF8_TO_UTF16) { const u64 gid = get_global_id (0); diff --git a/src/backend.c b/src/backend.c index d524a4c6b..7f4d1c9a5 100644 --- a/src/backend.c +++ b/src/backend.c @@ -9183,7 +9183,7 @@ static bool load_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_p //hiprtc_options[1] = "--device-as-default-execution-space"; //hiprtc_options[2] = "--gpu-architecture"; - hc_asprintf (&hiprtc_options[0], "--gpu-max-threads-per-block=%d", (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : device_param->kernel_threads_max); + hc_asprintf (&hiprtc_options[0], "-D MAX_THREADS_PER_BLOCK=%d", (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : device_param->kernel_threads_max); /* 4.3 linux hiprtc_options[1] = "-I"; From 2e640c4e9f7be87cadd30527d3b516ccffd00a72 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Thu, 12 Jun 2025 21:18:24 +0200 Subject: [PATCH 59/95] Speed improvements for all QNX /etc/shadow Speed improvements for all OpenSSH private key (by reducing max upported password length from 256 to 128) --- OpenCL/m19000-pure.cl | 33 ++++++++++-- OpenCL/m19100-pure.cl | 33 ++++++++++-- OpenCL/m19200-pure.cl | 101 +++++++++++------------------------ OpenCL/m22911_a3-pure.cl | 4 +- OpenCL/m22921_a3-pure.cl | 4 +- OpenCL/m22931_a3-pure.cl | 4 +- OpenCL/m22941_a3-pure.cl | 4 +- OpenCL/m22951_a3-pure.cl | 4 +- tools/test_modules/m22911.pm | 2 +- tools/test_modules/m22921.pm | 2 +- tools/test_modules/m22931.pm | 2 +- tools/test_modules/m22941.pm | 2 +- tools/test_modules/m22951.pm | 2 +- 13 files changed, 106 insertions(+), 91 deletions(-) diff --git a/OpenCL/m19000-pure.cl b/OpenCL/m19000-pure.cl index e63a31b3c..88e503867 100644 --- a/OpenCL/m19000-pure.cl +++ b/OpenCL/m19000-pure.cl @@ -37,13 +37,31 @@ KERNEL_FQ void HC_ATTR_SEQ m19000_init (KERN_ATTR_TMPS (qnx_md5_tmp_t)) * init */ + const u32 pw_len = pws[gid].pw_len; + + u32 w[64] = { 0 }; + + for (u32 i = 0, idx = 0; i < pw_len; i += 4, idx += 1) + { + w[idx] = pws[gid].i[idx]; + } + + const u32 salt_len = salt_bufs[SALT_POS_HOST].salt_len; + + u32 s[64] = { 0 }; + + for (u32 i = 0, idx = 0; i < salt_len; i += 4, idx += 1) + { + s[idx] = salt_bufs[SALT_POS_HOST].salt_buf[idx]; + } + md5_ctx_t md5_ctx; md5_init (&md5_ctx); - md5_update_global (&md5_ctx, salt_bufs[SALT_POS_HOST].salt_buf, salt_bufs[SALT_POS_HOST].salt_len); + md5_update (&md5_ctx, s, salt_len); - md5_update_global (&md5_ctx, pws[gid].i, pws[gid].pw_len); + md5_update (&md5_ctx, w, pw_len); tmps[gid].md5_ctx = md5_ctx; } @@ -58,11 +76,20 @@ KERNEL_FQ void HC_ATTR_SEQ m19000_loop (KERN_ATTR_TMPS (qnx_md5_tmp_t)) if (gid >= GID_CNT) return; + const u32 pw_len = pws[gid].pw_len; + + u32 w[64] = { 0 }; + + for (u32 i = 0, idx = 0; i < pw_len; i += 4, idx += 1) + { + w[idx] = pws[gid].i[idx]; + } + md5_ctx_t md5_ctx = tmps[gid].md5_ctx; for (u32 i = 0; i < LOOP_CNT; i++) { - md5_update_global (&md5_ctx, pws[gid].i, pws[gid].pw_len); + md5_update (&md5_ctx, w, pw_len); } tmps[gid].md5_ctx = md5_ctx; diff --git a/OpenCL/m19100-pure.cl b/OpenCL/m19100-pure.cl index c4f4419f3..f7456e5ea 100644 --- a/OpenCL/m19100-pure.cl +++ b/OpenCL/m19100-pure.cl @@ -37,13 +37,31 @@ KERNEL_FQ void HC_ATTR_SEQ m19100_init (KERN_ATTR_TMPS (qnx_sha256_tmp_t)) * init */ + const u32 pw_len = pws[gid].pw_len; + + u32 w[64] = { 0 }; + + for (u32 i = 0, idx = 0; i < pw_len; i += 4, idx += 1) + { + w[idx] = hc_swap32_S (pws[gid].i[idx]); + } + + const u32 salt_len = salt_bufs[SALT_POS_HOST].salt_len; + + u32 s[64] = { 0 }; + + for (u32 i = 0, idx = 0; i < salt_len; i += 4, idx += 1) + { + s[idx] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[idx]); + } + sha256_ctx_t sha256_ctx; sha256_init (&sha256_ctx); - sha256_update_global_swap (&sha256_ctx, salt_bufs[SALT_POS_HOST].salt_buf, salt_bufs[SALT_POS_HOST].salt_len); + sha256_update (&sha256_ctx, s, salt_len); - sha256_update_global_swap (&sha256_ctx, pws[gid].i, pws[gid].pw_len); + sha256_update (&sha256_ctx, w, pw_len); tmps[gid].sha256_ctx = sha256_ctx; } @@ -58,11 +76,20 @@ KERNEL_FQ void HC_ATTR_SEQ m19100_loop (KERN_ATTR_TMPS (qnx_sha256_tmp_t)) if (gid >= GID_CNT) return; + const u32 pw_len = pws[gid].pw_len; + + u32 w[64] = { 0 }; + + for (u32 i = 0, idx = 0; i < pw_len; i += 4, idx += 1) + { + w[idx] = hc_swap32_S (pws[gid].i[idx]); + } + sha256_ctx_t sha256_ctx = tmps[gid].sha256_ctx; for (u32 i = 0; i < LOOP_CNT; i++) { - sha256_update_global_swap (&sha256_ctx, pws[gid].i, pws[gid].pw_len); + sha256_update (&sha256_ctx, w, pw_len); } tmps[gid].sha256_ctx = sha256_ctx; diff --git a/OpenCL/m19200-pure.cl b/OpenCL/m19200-pure.cl index 86e3980a1..f61df414d 100644 --- a/OpenCL/m19200-pure.cl +++ b/OpenCL/m19200-pure.cl @@ -155,7 +155,7 @@ DECLSPEC u32 sha512_update_128_qnxbug (PRIVATE_AS sha512_ctx_t *ctx, PRIVATE_AS return sav; } -DECLSPEC u32 sha512_update_global_swap_qnxbug (PRIVATE_AS sha512_ctx_t *ctx, GLOBAL_AS const u32 *w, const int len, u32 sav) +DECLSPEC u32 sha512_update_qnxbug (PRIVATE_AS sha512_ctx_t *ctx, PRIVATE_AS const u32 *w, const int len, u32 sav) { u32 w0[4]; u32 w1[4]; @@ -204,39 +204,6 @@ DECLSPEC u32 sha512_update_global_swap_qnxbug (PRIVATE_AS sha512_ctx_t *ctx, GLO w7[2] = w[pos4 + 30]; w7[3] = w[pos4 + 31]; - w0[0] = hc_swap32_S (w0[0]); - w0[1] = hc_swap32_S (w0[1]); - w0[2] = hc_swap32_S (w0[2]); - w0[3] = hc_swap32_S (w0[3]); - w1[0] = hc_swap32_S (w1[0]); - w1[1] = hc_swap32_S (w1[1]); - w1[2] = hc_swap32_S (w1[2]); - w1[3] = hc_swap32_S (w1[3]); - w2[0] = hc_swap32_S (w2[0]); - w2[1] = hc_swap32_S (w2[1]); - w2[2] = hc_swap32_S (w2[2]); - w2[3] = hc_swap32_S (w2[3]); - w3[0] = hc_swap32_S (w3[0]); - w3[1] = hc_swap32_S (w3[1]); - w3[2] = hc_swap32_S (w3[2]); - w3[3] = hc_swap32_S (w3[3]); - w4[0] = hc_swap32_S (w4[0]); - w4[1] = hc_swap32_S (w4[1]); - w4[2] = hc_swap32_S (w4[2]); - w4[3] = hc_swap32_S (w4[3]); - w5[0] = hc_swap32_S (w5[0]); - w5[1] = hc_swap32_S (w5[1]); - w5[2] = hc_swap32_S (w5[2]); - w5[3] = hc_swap32_S (w5[3]); - w6[0] = hc_swap32_S (w6[0]); - w6[1] = hc_swap32_S (w6[1]); - w6[2] = hc_swap32_S (w6[2]); - w6[3] = hc_swap32_S (w6[3]); - w7[0] = hc_swap32_S (w7[0]); - w7[1] = hc_swap32_S (w7[1]); - w7[2] = hc_swap32_S (w7[2]); - w7[3] = hc_swap32_S (w7[3]); - sav = sha512_update_128_qnxbug (ctx, w0, w1, w2, w3, w4, w5, w6, w7, 128, sav); } @@ -273,39 +240,6 @@ DECLSPEC u32 sha512_update_global_swap_qnxbug (PRIVATE_AS sha512_ctx_t *ctx, GLO w7[2] = w[pos4 + 30]; w7[3] = w[pos4 + 31]; - w0[0] = hc_swap32_S (w0[0]); - w0[1] = hc_swap32_S (w0[1]); - w0[2] = hc_swap32_S (w0[2]); - w0[3] = hc_swap32_S (w0[3]); - w1[0] = hc_swap32_S (w1[0]); - w1[1] = hc_swap32_S (w1[1]); - w1[2] = hc_swap32_S (w1[2]); - w1[3] = hc_swap32_S (w1[3]); - w2[0] = hc_swap32_S (w2[0]); - w2[1] = hc_swap32_S (w2[1]); - w2[2] = hc_swap32_S (w2[2]); - w2[3] = hc_swap32_S (w2[3]); - w3[0] = hc_swap32_S (w3[0]); - w3[1] = hc_swap32_S (w3[1]); - w3[2] = hc_swap32_S (w3[2]); - w3[3] = hc_swap32_S (w3[3]); - w4[0] = hc_swap32_S (w4[0]); - w4[1] = hc_swap32_S (w4[1]); - w4[2] = hc_swap32_S (w4[2]); - w4[3] = hc_swap32_S (w4[3]); - w5[0] = hc_swap32_S (w5[0]); - w5[1] = hc_swap32_S (w5[1]); - w5[2] = hc_swap32_S (w5[2]); - w5[3] = hc_swap32_S (w5[3]); - w6[0] = hc_swap32_S (w6[0]); - w6[1] = hc_swap32_S (w6[1]); - w6[2] = hc_swap32_S (w6[2]); - w6[3] = hc_swap32_S (w6[3]); - w7[0] = hc_swap32_S (w7[0]); - w7[1] = hc_swap32_S (w7[1]); - w7[2] = hc_swap32_S (w7[2]); - w7[3] = hc_swap32_S (w7[3]); - sav = sha512_update_128_qnxbug (ctx, w0, w1, w2, w3, w4, w5, w6, w7, len - pos1, sav); return sav; @@ -382,9 +316,27 @@ KERNEL_FQ void HC_ATTR_SEQ m19200_init (KERN_ATTR_TMPS (qnx_sha512_tmp_t)) sha512_init (&sha512_ctx); - sha512_update_global_swap (&sha512_ctx, salt_bufs[SALT_POS_HOST].salt_buf, salt_bufs[SALT_POS_HOST].salt_len); + const u32 pw_len = pws[gid].pw_len; - sha512_update_global_swap (&sha512_ctx, pws[gid].i, pws[gid].pw_len); + u32 w[64] = { 0 }; + + for (u32 i = 0, idx = 0; i < pw_len; i += 4, idx += 1) + { + w[idx] = hc_swap32_S (pws[gid].i[idx]); + } + + const u32 salt_len = salt_bufs[SALT_POS_HOST].salt_len; + + u32 s[64] = { 0 }; + + for (u32 i = 0, idx = 0; i < salt_len; i += 4, idx += 1) + { + s[idx] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[idx]); + } + + sha512_update (&sha512_ctx, s, salt_len); + + sha512_update (&sha512_ctx, w, pw_len); tmps[gid].sha512_ctx = sha512_ctx; tmps[gid].sav = 0; @@ -400,12 +352,21 @@ KERNEL_FQ void HC_ATTR_SEQ m19200_loop (KERN_ATTR_TMPS (qnx_sha512_tmp_t)) if (gid >= GID_CNT) return; + const u32 pw_len = pws[gid].pw_len; + + u32 w[64] = { 0 }; + + for (u32 i = 0, idx = 0; i < pw_len; i += 4, idx += 1) + { + w[idx] = hc_swap32_S (pws[gid].i[idx]); + } + sha512_ctx_t sha512_ctx = tmps[gid].sha512_ctx; u32 sav = tmps[gid].sav; for (u32 i = 0; i < LOOP_CNT; i++) { - sav = sha512_update_global_swap_qnxbug (&sha512_ctx, pws[gid].i, pws[gid].pw_len, sav); + sav = sha512_update_qnxbug (&sha512_ctx, w, pw_len, sav); } tmps[gid].sha512_ctx = sha512_ctx; diff --git a/OpenCL/m22911_a3-pure.cl b/OpenCL/m22911_a3-pure.cl index 92a8272e8..d2c03ae1d 100644 --- a/OpenCL/m22911_a3-pure.cl +++ b/OpenCL/m22911_a3-pure.cl @@ -115,7 +115,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22911_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) const u32 pw_len = pws[gid].pw_len; - u32x w[64] = { 0 }; + u32x w[32] = { 0 }; for (u32 i = 0, idx = 0; i < pw_len; i += 4, idx += 1) { @@ -340,7 +340,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22911_sxx (KERN_ATTR_VECTOR_ESALT (pem_t)) const u32 pw_len = pws[gid].pw_len; - u32x w[64] = { 0 }; + u32x w[32] = { 0 }; for (u32 i = 0, idx = 0; i < pw_len; i += 4, idx += 1) { diff --git a/OpenCL/m22921_a3-pure.cl b/OpenCL/m22921_a3-pure.cl index 805660d0d..234d39c75 100644 --- a/OpenCL/m22921_a3-pure.cl +++ b/OpenCL/m22921_a3-pure.cl @@ -115,7 +115,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22921_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) const u32 pw_len = pws[gid].pw_len; - u32x w[64] = { 0 }; + u32x w[32] = { 0 }; for (u32 i = 0, idx = 0; i < pw_len; i += 4, idx += 1) { @@ -308,7 +308,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22921_sxx (KERN_ATTR_VECTOR_ESALT (pem_t)) const u32 pw_len = pws[gid].pw_len; - u32x w[64] = { 0 }; + u32x w[32] = { 0 }; for (u32 i = 0, idx = 0; i < pw_len; i += 4, idx += 1) { diff --git a/OpenCL/m22931_a3-pure.cl b/OpenCL/m22931_a3-pure.cl index f42823830..085b54240 100644 --- a/OpenCL/m22931_a3-pure.cl +++ b/OpenCL/m22931_a3-pure.cl @@ -139,7 +139,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22931_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) const u32 pw_len = pws[gid].pw_len; - u32x w[64] = { 0 }; + u32x w[32] = { 0 }; for (u32 i = 0, idx = 0; i < pw_len; i += 4, idx += 1) { @@ -365,7 +365,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22931_sxx (KERN_ATTR_VECTOR_ESALT (pem_t)) const u32 pw_len = pws[gid].pw_len; - u32x w[64] = { 0 }; + u32x w[32] = { 0 }; for (u32 i = 0, idx = 0; i < pw_len; i += 4, idx += 1) { diff --git a/OpenCL/m22941_a3-pure.cl b/OpenCL/m22941_a3-pure.cl index 7faa1040b..9706b5a5f 100644 --- a/OpenCL/m22941_a3-pure.cl +++ b/OpenCL/m22941_a3-pure.cl @@ -139,7 +139,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22941_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) const u32 pw_len = pws[gid].pw_len; - u32x w[64] = { 0 }; + u32x w[32] = { 0 }; for (u32 i = 0, idx = 0; i < pw_len; i += 4, idx += 1) { @@ -385,7 +385,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22941_sxx (KERN_ATTR_VECTOR_ESALT (pem_t)) const u32 pw_len = pws[gid].pw_len; - u32x w[64] = { 0 }; + u32x w[32] = { 0 }; for (u32 i = 0, idx = 0; i < pw_len; i += 4, idx += 1) { diff --git a/OpenCL/m22951_a3-pure.cl b/OpenCL/m22951_a3-pure.cl index 019f91c37..b5bead74c 100644 --- a/OpenCL/m22951_a3-pure.cl +++ b/OpenCL/m22951_a3-pure.cl @@ -139,7 +139,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22951_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) const u32 pw_len = pws[gid].pw_len; - u32x w[64] = { 0 }; + u32x w[32] = { 0 }; for (u32 i = 0, idx = 0; i < pw_len; i += 4, idx += 1) { @@ -389,7 +389,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22951_sxx (KERN_ATTR_VECTOR_ESALT (pem_t)) const u32 pw_len = pws[gid].pw_len; - u32x w[64] = { 0 }; + u32x w[32] = { 0 }; for (u32 i = 0, idx = 0; i < pw_len; i += 4, idx += 1) { diff --git a/tools/test_modules/m22911.pm b/tools/test_modules/m22911.pm index d8c53693f..45aed4d90 100644 --- a/tools/test_modules/m22911.pm +++ b/tools/test_modules/m22911.pm @@ -12,7 +12,7 @@ use Crypt::CBC; use Crypt::DES_EDE3; use Digest::MD5 qw (md5); -sub module_constraints { [[0, 256], [16, 16], [-1, -1], [-1, -1], [-1, -1]] } +sub module_constraints { [[0, 128], [16, 16], [-1, -1], [-1, -1], [-1, -1]] } sub generate_key { diff --git a/tools/test_modules/m22921.pm b/tools/test_modules/m22921.pm index 4839da1f6..9b35a14e5 100644 --- a/tools/test_modules/m22921.pm +++ b/tools/test_modules/m22921.pm @@ -11,7 +11,7 @@ use warnings; use Crypt::CBC; use Digest::MD5 qw (md5); -sub module_constraints { [[0, 256], [16, 16], [-1, -1], [-1, -1], [-1, -1]] } +sub module_constraints { [[0, 128], [16, 16], [-1, -1], [-1, -1], [-1, -1]] } sub generate_key { diff --git a/tools/test_modules/m22931.pm b/tools/test_modules/m22931.pm index 138f56e66..0fa5897a8 100644 --- a/tools/test_modules/m22931.pm +++ b/tools/test_modules/m22931.pm @@ -11,7 +11,7 @@ use warnings; use Crypt::CBC; use Digest::MD5 qw (md5); -sub module_constraints { [[0, 256], [32, 32], [-1, -1], [-1, -1], [-1, -1]] } +sub module_constraints { [[0, 128], [32, 32], [-1, -1], [-1, -1], [-1, -1]] } sub generate_key { diff --git a/tools/test_modules/m22941.pm b/tools/test_modules/m22941.pm index d4fb2b554..1e1e39e1f 100644 --- a/tools/test_modules/m22941.pm +++ b/tools/test_modules/m22941.pm @@ -11,7 +11,7 @@ use warnings; use Crypt::CBC; use Digest::MD5 qw (md5); -sub module_constraints { [[0, 256], [32, 32], [-1, -1], [-1, -1], [-1, -1]] } +sub module_constraints { [[0, 128], [32, 32], [-1, -1], [-1, -1], [-1, -1]] } sub generate_key { diff --git a/tools/test_modules/m22951.pm b/tools/test_modules/m22951.pm index c9c794be8..a8b8f14f8 100644 --- a/tools/test_modules/m22951.pm +++ b/tools/test_modules/m22951.pm @@ -11,7 +11,7 @@ use warnings; use Crypt::CBC; use Digest::MD5 qw (md5); -sub module_constraints { [[0, 256], [32, 32], [-1, -1], [-1, -1], [-1, -1]] } +sub module_constraints { [[0, 128], [32, 32], [-1, -1], [-1, -1], [-1, -1]] } sub generate_key { From 8494116ded396c0624a3dc4438aa08b3ddba5afb Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Fri, 13 Jun 2025 12:38:06 +0200 Subject: [PATCH 60/95] Added support for WBB4 (Woltlab Burning Board) Plugin [bcrypt(bcrypt($pass))] Thanks for the contribution! You know who you are. --- OpenCL/m33800-pure.cl | 1308 ++++++++++++++++++++++++++++++++++ src/modules/module_33800.c | 388 ++++++++++ tools/test_modules/m33800.pm | 76 ++ 3 files changed, 1772 insertions(+) create mode 100644 OpenCL/m33800-pure.cl create mode 100644 src/modules/module_33800.c create mode 100644 tools/test_modules/m33800.pm diff --git a/OpenCL/m33800-pure.cl b/OpenCL/m33800-pure.cl new file mode 100644 index 000000000..7a6d03740 --- /dev/null +++ b/OpenCL/m33800-pure.cl @@ -0,0 +1,1308 @@ +/** + * based on 3200 + * + */ + +#ifdef KERNEL_STATIC +#include M2S(INCLUDE_PATH/inc_vendor.h) +#include M2S(INCLUDE_PATH/inc_types.h) +#include M2S(INCLUDE_PATH/inc_platform.cl) +#include M2S(INCLUDE_PATH/inc_common.cl) +#endif + +#define COMPARE_S M2S(INCLUDE_PATH/inc_comp_single.cl) +#define COMPARE_M M2S(INCLUDE_PATH/inc_comp_multi.cl) + +typedef struct bcrypt_tmp +{ + u32 E[18]; + + u32 P[18]; + + u32 S0[256]; + u32 S1[256]; + u32 S2[256]; + u32 S3[256]; + +} bcrypt_tmp_t; + +// http://www.schneier.com/code/constants.txt + +CONSTANT_VK u32a c_sbox0[256] = +{ + 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, + 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99, + 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, + 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, + 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, + 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, + 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, + 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e, + 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, + 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, + 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, + 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a, + 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, + 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677, + 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, + 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, + 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, + 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239, + 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, + 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0, + 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, + 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, + 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, + 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe, + 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, + 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, + 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, + 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, + 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, + 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463, + 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, + 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09, + 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, + 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, + 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, + 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, + 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, + 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82, + 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, + 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, + 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, + 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, + 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, + 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8, + 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, + 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, + 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, + 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c, + 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, + 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1, + 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, + 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, + 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, + 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf, + 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, + 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af, + 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, + 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, + 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, + 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915, + 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, + 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915, + 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, + 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a +}; + +CONSTANT_VK u32a c_sbox1[256] = +{ + 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, + 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266, + 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, + 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, + 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, + 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1, + 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, + 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1, + 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, + 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, + 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, + 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, + 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, + 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7, + 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, + 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, + 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, + 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, + 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, + 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87, + 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, + 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, + 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, + 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd, + 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, + 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509, + 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, + 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, + 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, + 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a, + 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, + 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, + 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, + 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, + 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, + 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, + 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, + 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf, + 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, + 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, + 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, + 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, + 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, + 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281, + 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, + 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, + 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, + 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, + 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, + 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0, + 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, + 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, + 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, + 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285, + 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, + 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061, + 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, + 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, + 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, + 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc, + 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, + 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340, + 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, + 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7 +}; + +CONSTANT_VK u32a c_sbox2[256] = +{ + 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, + 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068, + 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, + 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, + 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, + 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504, + 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, + 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, + 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, + 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, + 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, + 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b, + 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, + 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb, + 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, + 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b, + 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, + 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, + 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, + 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc, + 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, + 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, + 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, + 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115, + 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, + 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728, + 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, + 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, + 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, + 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d, + 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, + 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b, + 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, + 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb, + 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, + 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c, + 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, + 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, + 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, + 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, + 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, + 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc, + 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, + 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61, + 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, + 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9, + 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, + 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, + 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, + 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633, + 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, + 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, + 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, + 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027, + 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, + 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62, + 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, + 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, + 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, + 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc, + 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, + 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c, + 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, + 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0 +}; + +CONSTANT_VK u32a c_sbox3[256] = +{ + 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, + 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe, + 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, + 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, + 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, + 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6, + 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, + 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22, + 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, + 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, + 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, + 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59, + 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, + 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51, + 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, + 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, + 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, + 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28, + 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, + 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd, + 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, + 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, + 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, + 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, + 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, + 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32, + 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, + 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, + 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, + 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, + 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, + 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47, + 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, + 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, + 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, + 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048, + 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, + 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd, + 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, + 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, + 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, + 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f, + 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, + 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, + 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, + 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, + 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, + 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, + 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, + 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, + 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, + 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, + 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, + 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, + 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, + 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a, + 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, + 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, + 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, + 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060, + 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, + 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9, + 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, + 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6 +}; + +CONSTANT_VK u32a c_pbox[18] = +{ + 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, + 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89, + 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, + 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, + 0x9216d5d9, 0x8979fb1b +}; + +CONSTANT_VK u8 c_bcrypt_base64_alphabet[64] = +{ + '.', '/', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', + 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', + 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', + 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' +}; + +// Yes, works only with CUDA atm + +#ifdef DYNAMIC_LOCAL +#define BCRYPT_AVOID_BANK_CONFLICTS +#endif + +#ifdef BCRYPT_AVOID_BANK_CONFLICTS + +// access pattern: minimize bank ID based on thread ID but thread ID is not saved from computation + +#define KEY32(lid,key) (((key) * FIXED_LOCAL_SIZE) + (lid)) + +DECLSPEC u32 GET_KEY32 (LOCAL_AS u32 *S, const u64 key) +{ + const u64 lid = get_local_id (0); + + return S[KEY32 (lid, key)]; +} + +DECLSPEC void SET_KEY32 (LOCAL_AS u32 *S, const u64 key, const u32 val) +{ + const u64 lid = get_local_id (0); + + S[KEY32 (lid, key)] = val; +} + +#undef KEY32 + +#else + +// access pattern: linear access with S offset already set to right offset based on thread ID saving it from computation +// makes sense if there are not thread ID's (for instance on CPU) + +DECLSPEC inline u32 GET_KEY32 (LOCAL_AS u32 *S, const u64 key) +{ + return S[key]; +} + +DECLSPEC inline void SET_KEY32 (LOCAL_AS u32 *S, const u64 key, const u32 val) +{ + S[key] = val; +} + +#endif + +#define BF_ROUND(L,R,N) \ +{ \ + u32 tmp; \ + \ + const u32 r0 = unpack_v8d_from_v32_S ((L)); \ + const u32 r1 = unpack_v8c_from_v32_S ((L)); \ + const u32 r2 = unpack_v8b_from_v32_S ((L)); \ + const u32 r3 = unpack_v8a_from_v32_S ((L)); \ + \ + tmp = GET_KEY32 (S0, r0); \ + tmp += GET_KEY32 (S1, r1); \ + tmp ^= GET_KEY32 (S2, r2); \ + tmp += GET_KEY32 (S3, r3); \ + \ + (R) ^= tmp ^ P[(N)]; \ +} + +#define BF_ENCRYPT(L,R) \ +{ \ + L ^= P[0]; \ + \ + BF_ROUND (L, R, 1); \ + BF_ROUND (R, L, 2); \ + BF_ROUND (L, R, 3); \ + BF_ROUND (R, L, 4); \ + BF_ROUND (L, R, 5); \ + BF_ROUND (R, L, 6); \ + BF_ROUND (L, R, 7); \ + BF_ROUND (R, L, 8); \ + BF_ROUND (L, R, 9); \ + BF_ROUND (R, L, 10); \ + BF_ROUND (L, R, 11); \ + BF_ROUND (R, L, 12); \ + BF_ROUND (L, R, 13); \ + BF_ROUND (R, L, 14); \ + BF_ROUND (L, R, 15); \ + BF_ROUND (R, L, 16); \ + \ + u32 tmp; \ + \ + tmp = R; \ + R = L; \ + L = tmp; \ + \ + L ^= P[17]; \ +} + +#ifdef DYNAMIC_LOCAL +extern __shared__ u32 S[]; +#endif + +DECLSPEC void expand_key (PRIVATE_AS u32 *E, PRIVATE_AS u32 *W, const int len) +{ + PRIVATE_AS u8 *E_ptr = (PRIVATE_AS u8 *) E; + PRIVATE_AS u8 *W_ptr = (PRIVATE_AS u8 *) W; + + for (int pos = 0; pos < 72; pos++) // pos++ is not a bug, we actually want that zero byte here + { + const int left = 72 - pos; + + const int sz = (len < left) ? len : left; // should be MIN() + + for (int i = 0; i < sz; i++) + { + E_ptr[pos + i] = W_ptr[i]; + } + + pos += sz; + } +} + +KERNEL_FQ void HC_ATTR_SEQ m33800_init (KERN_ATTR_TMPS (bcrypt_tmp_t)) +{ + /** + * base + */ + + const u64 gid = get_global_id (0); + const u64 lid = get_local_id (0); + + if (gid >= GID_CNT) return; + + const u32 pw_len = pws[gid].pw_len; + + u32 w[18]; + + w[ 0] = pws[gid].i[ 0]; + w[ 1] = pws[gid].i[ 1]; + w[ 2] = pws[gid].i[ 2]; + w[ 3] = pws[gid].i[ 3]; + w[ 4] = pws[gid].i[ 4]; + w[ 5] = pws[gid].i[ 5]; + w[ 6] = pws[gid].i[ 6]; + w[ 7] = pws[gid].i[ 7]; + w[ 8] = pws[gid].i[ 8]; + w[ 9] = pws[gid].i[ 9]; + w[10] = pws[gid].i[10]; + w[11] = pws[gid].i[11]; + w[12] = pws[gid].i[12]; + w[13] = pws[gid].i[13]; + w[14] = pws[gid].i[14]; + w[15] = pws[gid].i[15]; + w[16] = pws[gid].i[16]; + w[17] = pws[gid].i[17]; + + u32 E[18] = { 0 }; + + expand_key (E, w, pw_len); + + E[ 0] = hc_swap32_S (E[ 0]); + E[ 1] = hc_swap32_S (E[ 1]); + E[ 2] = hc_swap32_S (E[ 2]); + E[ 3] = hc_swap32_S (E[ 3]); + E[ 4] = hc_swap32_S (E[ 4]); + E[ 5] = hc_swap32_S (E[ 5]); + E[ 6] = hc_swap32_S (E[ 6]); + E[ 7] = hc_swap32_S (E[ 7]); + E[ 8] = hc_swap32_S (E[ 8]); + E[ 9] = hc_swap32_S (E[ 9]); + E[10] = hc_swap32_S (E[10]); + E[11] = hc_swap32_S (E[11]); + E[12] = hc_swap32_S (E[12]); + E[13] = hc_swap32_S (E[13]); + E[14] = hc_swap32_S (E[14]); + E[15] = hc_swap32_S (E[15]); + E[16] = hc_swap32_S (E[16]); + E[17] = hc_swap32_S (E[17]); + + for (u32 i = 0; i < 18; i++) + { + tmps[gid].E[i] = E[i]; + } + + /** + * salt + */ + + u32 salt_buf[4]; + + salt_buf[0] = salt_bufs[SALT_POS_HOST].salt_buf[0]; + salt_buf[1] = salt_bufs[SALT_POS_HOST].salt_buf[1]; + salt_buf[2] = salt_bufs[SALT_POS_HOST].salt_buf[2]; + salt_buf[3] = salt_bufs[SALT_POS_HOST].salt_buf[3]; + + u32 P[18]; + + for (u32 i = 0; i < 18; i++) + { + P[i] = c_pbox[i]; + } + + #ifdef DYNAMIC_LOCAL + // from host + #else + LOCAL_VK u32 S0_all[FIXED_LOCAL_SIZE][256]; + LOCAL_VK u32 S1_all[FIXED_LOCAL_SIZE][256]; + LOCAL_VK u32 S2_all[FIXED_LOCAL_SIZE][256]; + LOCAL_VK u32 S3_all[FIXED_LOCAL_SIZE][256]; + #endif + + #ifdef BCRYPT_AVOID_BANK_CONFLICTS + LOCAL_AS u32 *S0 = S + (FIXED_LOCAL_SIZE * 256 * 0); + LOCAL_AS u32 *S1 = S + (FIXED_LOCAL_SIZE * 256 * 1); + LOCAL_AS u32 *S2 = S + (FIXED_LOCAL_SIZE * 256 * 2); + LOCAL_AS u32 *S3 = S + (FIXED_LOCAL_SIZE * 256 * 3); + #else + LOCAL_AS u32 *S0 = S0_all[lid]; + LOCAL_AS u32 *S1 = S1_all[lid]; + LOCAL_AS u32 *S2 = S2_all[lid]; + LOCAL_AS u32 *S3 = S3_all[lid]; + #endif + + for (u32 i = 0; i < 256; i++) + { + SET_KEY32 (S0, i, c_sbox0[i]); + SET_KEY32 (S1, i, c_sbox1[i]); + SET_KEY32 (S2, i, c_sbox2[i]); + SET_KEY32 (S3, i, c_sbox3[i]); + } + + // expandstate + + for (u32 i = 0; i < 18; i++) + { + P[i] ^= E[i]; + } + + u32 L0 = 0; + u32 R0 = 0; + + for (u32 i = 0; i < 18; i += 2) + { + L0 ^= salt_buf[(i & 2) + 0]; + R0 ^= salt_buf[(i & 2) + 1]; + + BF_ENCRYPT (L0, R0); + + P[i + 0] = L0; + P[i + 1] = R0; + } + + for (u32 i = 0; i < 256; i += 4) + { + L0 ^= salt_buf[2]; + R0 ^= salt_buf[3]; + + BF_ENCRYPT (L0, R0); + + SET_KEY32 (S0, i + 0, L0); + SET_KEY32 (S0, i + 1, R0); + + L0 ^= salt_buf[0]; + R0 ^= salt_buf[1]; + + BF_ENCRYPT (L0, R0); + + SET_KEY32 (S0, i + 2, L0); + SET_KEY32 (S0, i + 3, R0); + } + + for (u32 i = 0; i < 256; i += 4) + { + L0 ^= salt_buf[2]; + R0 ^= salt_buf[3]; + + BF_ENCRYPT (L0, R0); + + SET_KEY32 (S1, i + 0, L0); + SET_KEY32 (S1, i + 1, R0); + + L0 ^= salt_buf[0]; + R0 ^= salt_buf[1]; + + BF_ENCRYPT (L0, R0); + + SET_KEY32 (S1, i + 2, L0); + SET_KEY32 (S1, i + 3, R0); + } + + for (u32 i = 0; i < 256; i += 4) + { + L0 ^= salt_buf[2]; + R0 ^= salt_buf[3]; + + BF_ENCRYPT (L0, R0); + + SET_KEY32 (S2, i + 0, L0); + SET_KEY32 (S2, i + 1, R0); + + L0 ^= salt_buf[0]; + R0 ^= salt_buf[1]; + + BF_ENCRYPT (L0, R0); + + SET_KEY32 (S2, i + 2, L0); + SET_KEY32 (S2, i + 3, R0); + } + + for (u32 i = 0; i < 256; i += 4) + { + L0 ^= salt_buf[2]; + R0 ^= salt_buf[3]; + + BF_ENCRYPT (L0, R0); + + SET_KEY32 (S3, i + 0, L0); + SET_KEY32 (S3, i + 1, R0); + + L0 ^= salt_buf[0]; + R0 ^= salt_buf[1]; + + BF_ENCRYPT (L0, R0); + + SET_KEY32 (S3, i + 2, L0); + SET_KEY32 (S3, i + 3, R0); + } + + // store + + for (u32 i = 0; i < 18; i++) + { + tmps[gid].P[i] = P[i]; + } + + for (u32 i = 0; i < 256; i++) + { + tmps[gid].S0[i] = GET_KEY32 (S0, i); + tmps[gid].S1[i] = GET_KEY32 (S1, i); + tmps[gid].S2[i] = GET_KEY32 (S2, i); + tmps[gid].S3[i] = GET_KEY32 (S3, i); + } +} + +KERNEL_FQ void HC_ATTR_SEQ m33800_loop (KERN_ATTR_TMPS (bcrypt_tmp_t)) +{ + /** + * base + */ + + const u64 gid = get_global_id (0); + const u64 lid = get_local_id (0); + + if (gid >= GID_CNT) return; + + // load + + u32 E[18]; + + for (u32 i = 0; i < 18; i++) + { + E[i] = tmps[gid].E[i]; + } + + u32 P[18]; + + for (u32 i = 0; i < 18; i++) + { + P[i] = tmps[gid].P[i]; + } + + #ifdef DYNAMIC_LOCAL + // from host + #else + LOCAL_VK u32 S0_all[FIXED_LOCAL_SIZE][256]; + LOCAL_VK u32 S1_all[FIXED_LOCAL_SIZE][256]; + LOCAL_VK u32 S2_all[FIXED_LOCAL_SIZE][256]; + LOCAL_VK u32 S3_all[FIXED_LOCAL_SIZE][256]; + #endif + + #ifdef BCRYPT_AVOID_BANK_CONFLICTS + LOCAL_AS u32 *S0 = S + (FIXED_LOCAL_SIZE * 256 * 0); + LOCAL_AS u32 *S1 = S + (FIXED_LOCAL_SIZE * 256 * 1); + LOCAL_AS u32 *S2 = S + (FIXED_LOCAL_SIZE * 256 * 2); + LOCAL_AS u32 *S3 = S + (FIXED_LOCAL_SIZE * 256 * 3); + #else + LOCAL_AS u32 *S0 = S0_all[lid]; + LOCAL_AS u32 *S1 = S1_all[lid]; + LOCAL_AS u32 *S2 = S2_all[lid]; + LOCAL_AS u32 *S3 = S3_all[lid]; + #endif + + for (u32 i = 0; i < 256; i++) + { + SET_KEY32 (S0, i, tmps[gid].S0[i]); + SET_KEY32 (S1, i, tmps[gid].S1[i]); + SET_KEY32 (S2, i, tmps[gid].S2[i]); + SET_KEY32 (S3, i, tmps[gid].S3[i]); + } + + /** + * salt + */ + + u32 salt_buf[4]; + + salt_buf[0] = salt_bufs[SALT_POS_HOST].salt_buf[0]; + salt_buf[1] = salt_bufs[SALT_POS_HOST].salt_buf[1]; + salt_buf[2] = salt_bufs[SALT_POS_HOST].salt_buf[2]; + salt_buf[3] = salt_bufs[SALT_POS_HOST].salt_buf[3]; + + /** + * main loop + */ + + u32 L0; + u32 R0; + + for (u32 i = 0; i < LOOP_CNT; i++) + { + for (u32 i = 0; i < 18; i++) + { + P[i] ^= E[i]; + } + + L0 = 0; + R0 = 0; + + for (u32 i = 0; i < 9; i++) + { + BF_ENCRYPT (L0, R0); + + P[i * 2 + 0] = L0; + P[i * 2 + 1] = R0; + } + + for (u32 i = 0; i < 256; i += 2) + { + BF_ENCRYPT (L0, R0); + + SET_KEY32 (S0, i + 0, L0); + SET_KEY32 (S0, i + 1, R0); + } + + for (u32 i = 0; i < 256; i += 2) + { + BF_ENCRYPT (L0, R0); + + SET_KEY32 (S1, i + 0, L0); + SET_KEY32 (S1, i + 1, R0); + } + + for (u32 i = 0; i < 256; i += 2) + { + BF_ENCRYPT (L0, R0); + + SET_KEY32 (S2, i + 0, L0); + SET_KEY32 (S2, i + 1, R0); + } + + for (u32 i = 0; i < 256; i += 2) + { + BF_ENCRYPT (L0, R0); + + SET_KEY32 (S3, i + 0, L0); + SET_KEY32 (S3, i + 1, R0); + } + + P[ 0] ^= salt_buf[0]; + P[ 1] ^= salt_buf[1]; + P[ 2] ^= salt_buf[2]; + P[ 3] ^= salt_buf[3]; + P[ 4] ^= salt_buf[0]; + P[ 5] ^= salt_buf[1]; + P[ 6] ^= salt_buf[2]; + P[ 7] ^= salt_buf[3]; + P[ 8] ^= salt_buf[0]; + P[ 9] ^= salt_buf[1]; + P[10] ^= salt_buf[2]; + P[11] ^= salt_buf[3]; + P[12] ^= salt_buf[0]; + P[13] ^= salt_buf[1]; + P[14] ^= salt_buf[2]; + P[15] ^= salt_buf[3]; + P[16] ^= salt_buf[0]; + P[17] ^= salt_buf[1]; + + L0 = 0; + R0 = 0; + + for (u32 i = 0; i < 9; i++) + { + BF_ENCRYPT (L0, R0); + + P[i * 2 + 0] = L0; + P[i * 2 + 1] = R0; + } + + for (u32 i = 0; i < 256; i += 2) + { + BF_ENCRYPT (L0, R0); + + SET_KEY32 (S0, i + 0, L0); + SET_KEY32 (S0, i + 1, R0); + } + + for (u32 i = 0; i < 256; i += 2) + { + BF_ENCRYPT (L0, R0); + + SET_KEY32 (S1, i + 0, L0); + SET_KEY32 (S1, i + 1, R0); + } + + for (u32 i = 0; i < 256; i += 2) + { + BF_ENCRYPT (L0, R0); + + SET_KEY32 (S2, i + 0, L0); + SET_KEY32 (S2, i + 1, R0); + } + + for (u32 i = 0; i < 256; i += 2) + { + BF_ENCRYPT (L0, R0); + + SET_KEY32 (S3, i + 0, L0); + SET_KEY32 (S3, i + 1, R0); + } + } + + // store + + for (u32 i = 0; i < 18; i++) + { + tmps[gid].P[i] = P[i]; + } + + for (u32 i = 0; i < 256; i++) + { + tmps[gid].S0[i] = GET_KEY32 (S0, i); + tmps[gid].S1[i] = GET_KEY32 (S1, i); + tmps[gid].S2[i] = GET_KEY32 (S2, i); + tmps[gid].S3[i] = GET_KEY32 (S3, i); + } +} + +KERNEL_FQ void HC_ATTR_SEQ m33800_init2 (KERN_ATTR_TMPS (bcrypt_tmp_t)) +{ + /** + * base + */ + + const u64 gid = get_global_id (0); + const u64 lid = get_local_id (0); + + if (gid >= GID_CNT) return; + + const u32 pw_len = 60; + + /** + * calculate final inner/first bcrypt + */ + u32 P[18]; + + for (u32 i = 0; i < 18; i++) + { + P[i] = tmps[gid].P[i]; + } + + #ifdef DYNAMIC_LOCAL + // from host + #else + LOCAL_VK u32 S0_all[FIXED_LOCAL_SIZE][256]; + LOCAL_VK u32 S1_all[FIXED_LOCAL_SIZE][256]; + LOCAL_VK u32 S2_all[FIXED_LOCAL_SIZE][256]; + LOCAL_VK u32 S3_all[FIXED_LOCAL_SIZE][256]; + #endif + + #ifdef BCRYPT_AVOID_BANK_CONFLICTS + LOCAL_AS u32 *S0 = S + (FIXED_LOCAL_SIZE * 256 * 0); + LOCAL_AS u32 *S1 = S + (FIXED_LOCAL_SIZE * 256 * 1); + LOCAL_AS u32 *S2 = S + (FIXED_LOCAL_SIZE * 256 * 2); + LOCAL_AS u32 *S3 = S + (FIXED_LOCAL_SIZE * 256 * 3); + #else + LOCAL_AS u32 *S0 = S0_all[lid]; + LOCAL_AS u32 *S1 = S1_all[lid]; + LOCAL_AS u32 *S2 = S2_all[lid]; + LOCAL_AS u32 *S3 = S3_all[lid]; + #endif + + for (u32 i = 0; i < 256; i++) + { + SET_KEY32 (S0, i, tmps[gid].S0[i]); + SET_KEY32 (S1, i, tmps[gid].S1[i]); + SET_KEY32 (S2, i, tmps[gid].S2[i]); + SET_KEY32 (S3, i, tmps[gid].S3[i]); + } + + u32 L0; + u32 R0; + + L0 = BCRYPTM_0; + R0 = BCRYPTM_1; + + for (u32 i = 0; i < 64; i++) + { + BF_ENCRYPT (L0, R0); + } + + const u32 r0 = L0; + const u32 r1 = R0; + + L0 = BCRYPTM_2; + R0 = BCRYPTM_3; + + for (u32 i = 0; i < 64; i++) + { + BF_ENCRYPT (L0, R0); + } + + const u32 r2 = L0; + const u32 r3 = R0; + + L0 = BCRYPTM_4; + R0 = BCRYPTM_5; + + for (u32 i = 0; i < 64; i++) + { + BF_ENCRYPT (L0, R0); + } + + const u32 r4 = L0; + const u32 r5 = R0; + + u32 w[18]; + + /** + * set first bcrypt as input for second bcrypt + */ + + //put in the saved beginning and salt of original hash + w[ 0] = salt_bufs[SALT_POS_HOST].salt_buf_pc[ 0]; + w[ 1] = salt_bufs[SALT_POS_HOST].salt_buf_pc[ 1]; + w[ 2] = salt_bufs[SALT_POS_HOST].salt_buf_pc[ 2]; + w[ 3] = salt_bufs[SALT_POS_HOST].salt_buf_pc[ 3]; + w[ 4] = salt_bufs[SALT_POS_HOST].salt_buf_pc[ 4]; + w[ 5] = salt_bufs[SALT_POS_HOST].salt_buf_pc[ 5]; + w[ 6] = salt_bufs[SALT_POS_HOST].salt_buf_pc[ 6]; + //w[ 7] = salt_bufs[SALT_POS_HOST].salt_buf_pc[ 7]; //here for logic (overwritten in next step) + + //now fill in base64; last Byte is zeroed (--> 0x00000F00 not 0x00000FC0) + w[ 7] = salt_bufs[SALT_POS_HOST].salt_buf_pc[ 7] ^ (c_bcrypt_base64_alphabet[(r0&0xFC000000)>>26] << 8) ^ (c_bcrypt_base64_alphabet[(r0&0x03F00000)>> 20] << 16) ^ (c_bcrypt_base64_alphabet[(r0&0x000FC000)>>14] << 24); + w[ 8] = c_bcrypt_base64_alphabet[(r0&0x00003F00)>> 8] ^ (c_bcrypt_base64_alphabet[(r0&0x000000FC)>> 2] << 8) ^ (c_bcrypt_base64_alphabet[(r0&0x00000003)<< 4 ^ (r1&0xF0000000)>>28] << 16) ^ (c_bcrypt_base64_alphabet[(r1&0x0FC00000)>>22] << 24); + w[ 9] = c_bcrypt_base64_alphabet[(r1&0x003F0000)>>16] ^ (c_bcrypt_base64_alphabet[(r1&0x0000FC00)>>10] << 8) ^ (c_bcrypt_base64_alphabet[(r1&0x000003F0)>> 4] << 16) ^ (c_bcrypt_base64_alphabet[(r1&0x0000000F)<< 2 ^ (r2&0xC0000000)>>30] << 24); + w[10] = c_bcrypt_base64_alphabet[(r2&0x3F000000)>>24] ^ (c_bcrypt_base64_alphabet[(r2&0x00FC0000)>>18] << 8) ^ (c_bcrypt_base64_alphabet[(r2&0x0003F000)>>12] << 16) ^ (c_bcrypt_base64_alphabet[(r2&0x00000FC0)>> 6] << 24); + w[11] = c_bcrypt_base64_alphabet[(r2&0x0000003F) ] ^ (c_bcrypt_base64_alphabet[(r3&0xFC000000)>>26] << 8) ^ (c_bcrypt_base64_alphabet[(r3&0x03F00000)>>20] << 16) ^ (c_bcrypt_base64_alphabet[(r3&0x000FC000)>>14] << 24); + w[12] = c_bcrypt_base64_alphabet[(r3&0x00003F00)>> 8] ^ (c_bcrypt_base64_alphabet[(r3&0x000000FC)>> 2] << 8) ^ (c_bcrypt_base64_alphabet[(r3&0x00000003)<< 4 ^ (r4&0xF0000000)>>28] << 16) ^ (c_bcrypt_base64_alphabet[(r4&0x0FC00000)>>22] << 24); + w[13] = c_bcrypt_base64_alphabet[(r4&0x003F0000)>>16] ^ (c_bcrypt_base64_alphabet[(r4&0x0000FC00)>>10] << 8) ^ (c_bcrypt_base64_alphabet[(r4&0x000003F0)>> 4] << 16) ^ (c_bcrypt_base64_alphabet[(r4&0x0000000F)<< 2 ^ (r5&0xC0000000)>>30] << 24); + w[14] = c_bcrypt_base64_alphabet[(r5&0x3F000000)>>24] ^ (c_bcrypt_base64_alphabet[(r5&0x00FC0000)>>18] << 8) ^ (c_bcrypt_base64_alphabet[(r5&0x0003F000)>>12] << 16) ^ (c_bcrypt_base64_alphabet[(r5&0x00000F00)>> 6] << 24); + w[15] = 0; + w[16] = 0; + w[17] = 0; + + u32 E[18] = { 0 }; + + expand_key (E, w, pw_len); + + E[ 0] = hc_swap32_S (E[ 0]); + E[ 1] = hc_swap32_S (E[ 1]); + E[ 2] = hc_swap32_S (E[ 2]); + E[ 3] = hc_swap32_S (E[ 3]); + E[ 4] = hc_swap32_S (E[ 4]); + E[ 5] = hc_swap32_S (E[ 5]); + E[ 6] = hc_swap32_S (E[ 6]); + E[ 7] = hc_swap32_S (E[ 7]); + E[ 8] = hc_swap32_S (E[ 8]); + E[ 9] = hc_swap32_S (E[ 9]); + E[10] = hc_swap32_S (E[10]); + E[11] = hc_swap32_S (E[11]); + E[12] = hc_swap32_S (E[12]); + E[13] = hc_swap32_S (E[13]); + E[14] = hc_swap32_S (E[14]); + E[15] = hc_swap32_S (E[15]); + E[16] = hc_swap32_S (E[16]); + E[17] = hc_swap32_S (E[17]); + + for (u32 i = 0; i < 18; i++) + { + tmps[gid].E[i] = E[i]; + } + + /** + * salt + */ + + u32 salt_buf[4]; + + salt_buf[0] = salt_bufs[SALT_POS_HOST].salt_buf[0]; + salt_buf[1] = salt_bufs[SALT_POS_HOST].salt_buf[1]; + salt_buf[2] = salt_bufs[SALT_POS_HOST].salt_buf[2]; + salt_buf[3] = salt_bufs[SALT_POS_HOST].salt_buf[3]; + + for (u32 i = 0; i < 18; i++) + { + P[i] = c_pbox[i]; + } + + + #ifdef BCRYPT_AVOID_BANK_CONFLICTS + S0 = S + (FIXED_LOCAL_SIZE * 256 * 0); + S1 = S + (FIXED_LOCAL_SIZE * 256 * 1); + S2 = S + (FIXED_LOCAL_SIZE * 256 * 2); + S3 = S + (FIXED_LOCAL_SIZE * 256 * 3); + #else + S0 = S0_all[lid]; + S1 = S1_all[lid]; + S2 = S2_all[lid]; + S3 = S3_all[lid]; + #endif + + for (u32 i = 0; i < 256; i++) + { + SET_KEY32 (S0, i, c_sbox0[i]); + SET_KEY32 (S1, i, c_sbox1[i]); + SET_KEY32 (S2, i, c_sbox2[i]); + SET_KEY32 (S3, i, c_sbox3[i]); + } + + // expandstate + + for (u32 i = 0; i < 18; i++) + { + P[i] ^= E[i]; + } + + L0 = 0; + R0 = 0; + + for (u32 i = 0; i < 18; i += 2) + { + L0 ^= salt_buf[(i & 2) + 0]; + R0 ^= salt_buf[(i & 2) + 1]; + + BF_ENCRYPT (L0, R0); + + P[i + 0] = L0; + P[i + 1] = R0; + } + + for (u32 i = 0; i < 256; i += 4) + { + L0 ^= salt_buf[2]; + R0 ^= salt_buf[3]; + + BF_ENCRYPT (L0, R0); + + SET_KEY32 (S0, i + 0, L0); + SET_KEY32 (S0, i + 1, R0); + + L0 ^= salt_buf[0]; + R0 ^= salt_buf[1]; + + BF_ENCRYPT (L0, R0); + + SET_KEY32 (S0, i + 2, L0); + SET_KEY32 (S0, i + 3, R0); + } + + for (u32 i = 0; i < 256; i += 4) + { + L0 ^= salt_buf[2]; + R0 ^= salt_buf[3]; + + BF_ENCRYPT (L0, R0); + + SET_KEY32 (S1, i + 0, L0); + SET_KEY32 (S1, i + 1, R0); + + L0 ^= salt_buf[0]; + R0 ^= salt_buf[1]; + + BF_ENCRYPT (L0, R0); + + SET_KEY32 (S1, i + 2, L0); + SET_KEY32 (S1, i + 3, R0); + } + + for (u32 i = 0; i < 256; i += 4) + { + L0 ^= salt_buf[2]; + R0 ^= salt_buf[3]; + + BF_ENCRYPT (L0, R0); + + SET_KEY32 (S2, i + 0, L0); + SET_KEY32 (S2, i + 1, R0); + + L0 ^= salt_buf[0]; + R0 ^= salt_buf[1]; + + BF_ENCRYPT (L0, R0); + + SET_KEY32 (S2, i + 2, L0); + SET_KEY32 (S2, i + 3, R0); + } + + for (u32 i = 0; i < 256; i += 4) + { + L0 ^= salt_buf[2]; + R0 ^= salt_buf[3]; + + BF_ENCRYPT (L0, R0); + + SET_KEY32 (S3, i + 0, L0); + SET_KEY32 (S3, i + 1, R0); + + L0 ^= salt_buf[0]; + R0 ^= salt_buf[1]; + + BF_ENCRYPT (L0, R0); + + SET_KEY32 (S3, i + 2, L0); + SET_KEY32 (S3, i + 3, R0); + } + + // store + + for (u32 i = 0; i < 18; i++) + { + tmps[gid].P[i] = P[i]; + } + + for (u32 i = 0; i < 256; i++) + { + tmps[gid].S0[i] = GET_KEY32 (S0, i); + tmps[gid].S1[i] = GET_KEY32 (S1, i); + tmps[gid].S2[i] = GET_KEY32 (S2, i); + tmps[gid].S3[i] = GET_KEY32 (S3, i); + } +} + +KERNEL_FQ void HC_ATTR_SEQ m33800_loop2 (KERN_ATTR_TMPS (bcrypt_tmp_t)) +{ + // the second loop is the same as the first one, only different "password" in init2 +#if defined IS_CUDA || defined IS_HIP + m33800_loop( + pws, + g_rules_buf, + combs_buf, + g_bfs_buf, + tmps, + hooks, + bitmaps_buf_s1_a, + bitmaps_buf_s1_b, + bitmaps_buf_s1_c, + bitmaps_buf_s1_d, + bitmaps_buf_s2_a, + bitmaps_buf_s2_b, + bitmaps_buf_s2_c, + bitmaps_buf_s2_d, + plains_buf, + digests_buf, + hashes_shown, + salt_bufs, + esalt_bufs, + d_return_buf, + d_extra0_buf, + d_extra1_buf, + d_extra2_buf, + d_extra3_buf, + kernel_param + ); +#else + m33800_loop( + pws, + rules_buf, + combs_buf, + bfs_buf, + tmps, + hooks, + bitmaps_buf_s1_a, + bitmaps_buf_s1_b, + bitmaps_buf_s1_c, + bitmaps_buf_s1_d, + bitmaps_buf_s2_a, + bitmaps_buf_s2_b, + bitmaps_buf_s2_c, + bitmaps_buf_s2_d, + plains_buf, + digests_buf, + hashes_shown, + salt_bufs, + esalt_bufs, + d_return_buf, + d_extra0_buf, + d_extra1_buf, + d_extra2_buf, + d_extra3_buf, + kernel_param + ); +#endif +} + +KERNEL_FQ void HC_ATTR_SEQ m33800_comp (KERN_ATTR_TMPS (bcrypt_tmp_t)) +{ + /** + * base + */ + + const u64 gid = get_global_id (0); + const u64 lid = get_local_id (0); + + if (gid >= GID_CNT) return; + + // load + + u32 P[18]; + + for (u32 i = 0; i < 18; i++) + { + P[i] = tmps[gid].P[i]; + } + + #ifdef DYNAMIC_LOCAL + // from host + #else + LOCAL_VK u32 S0_all[FIXED_LOCAL_SIZE][256]; + LOCAL_VK u32 S1_all[FIXED_LOCAL_SIZE][256]; + LOCAL_VK u32 S2_all[FIXED_LOCAL_SIZE][256]; + LOCAL_VK u32 S3_all[FIXED_LOCAL_SIZE][256]; + #endif + + #ifdef BCRYPT_AVOID_BANK_CONFLICTS + LOCAL_AS u32 *S0 = S + (FIXED_LOCAL_SIZE * 256 * 0); + LOCAL_AS u32 *S1 = S + (FIXED_LOCAL_SIZE * 256 * 1); + LOCAL_AS u32 *S2 = S + (FIXED_LOCAL_SIZE * 256 * 2); + LOCAL_AS u32 *S3 = S + (FIXED_LOCAL_SIZE * 256 * 3); + #else + LOCAL_AS u32 *S0 = S0_all[lid]; + LOCAL_AS u32 *S1 = S1_all[lid]; + LOCAL_AS u32 *S2 = S2_all[lid]; + LOCAL_AS u32 *S3 = S3_all[lid]; + #endif + + for (u32 i = 0; i < 256; i++) + { + SET_KEY32 (S0, i, tmps[gid].S0[i]); + SET_KEY32 (S1, i, tmps[gid].S1[i]); + SET_KEY32 (S2, i, tmps[gid].S2[i]); + SET_KEY32 (S3, i, tmps[gid].S3[i]); + } + + /** + * main + */ + + u32 L0; + u32 R0; + + L0 = BCRYPTM_0; + R0 = BCRYPTM_1; + + for (u32 i = 0; i < 64; i++) + { + BF_ENCRYPT (L0, R0); + } + + const u32 r0 = L0; + const u32 r1 = R0; + + L0 = BCRYPTM_2; + R0 = BCRYPTM_3; + + for (u32 i = 0; i < 64; i++) + { + BF_ENCRYPT (L0, R0); + } + + const u32 r2 = L0; + const u32 r3 = R0; + + /* + e = L0; + f = R0; + + f &= ~0xff; // its just 23 not 24 ! + */ + + #define il_pos 0 + + #ifdef KERNEL_STATIC + #include COMPARE_M + #endif +} diff --git a/src/modules/module_33800.c b/src/modules/module_33800.c new file mode 100644 index 000000000..9a1efa0f4 --- /dev/null +++ b/src/modules/module_33800.c @@ -0,0 +1,388 @@ +/** + * based on mode 3200 + * + * + * related tickets/issues + * + * https://github.com/hashcat/hashcat/issues/73 + * support to recover Woltlab Burning Board 4.x hashes #73 + * (closed without implementation) + * + * https://github.com/hashcat/hashcat/issues/2788 + * Bcrypt(Bcrypt($Pass)) Kernel Support #2788 + * + * + * john the ripper + * + * https://github.com/openwall/john/issues/2413 + * Add support for Woltlab Burning Board 4.x hashes #2413 + * + */ + +#include "common.h" +#include "types.h" +#include "modules.h" +#include "bitops.h" +#include "convert.h" +#include "shared.h" + +static const u32 ATTACK_EXEC = ATTACK_EXEC_OUTSIDE_KERNEL; +static const u32 DGST_POS0 = 0; +static const u32 DGST_POS1 = 1; +static const u32 DGST_POS2 = 2; +static const u32 DGST_POS3 = 3; +static const u32 DGST_SIZE = DGST_SIZE_4_6; +static const u32 HASH_CATEGORY = HASH_CATEGORY_FORUM_SOFTWARE; +static const char *HASH_NAME = "WBB4 (Woltlab Burning Board) Plugin [bcrypt(bcrypt($pass))]"; +static const u64 KERN_TYPE = 33800; +static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE; +static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE + | OPTS_TYPE_PT_GENERATE_LE + | OPTS_TYPE_INIT2 + | OPTS_TYPE_LOOP2 + | OPTS_TYPE_DYNAMIC_SHARED; +static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; +static const char *ST_PASS = "hashcat"; +static const char *ST_HASH = "$2a$08$hashcatohohohohohohohegk6PN.SFkoXxDIkacAGKFN9AF8nx.Hi"; + +u32 module_attack_exec (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ATTACK_EXEC; } +u32 module_dgst_pos0 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS0; } +u32 module_dgst_pos1 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS1; } +u32 module_dgst_pos2 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS2; } +u32 module_dgst_pos3 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS3; } +u32 module_dgst_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_SIZE; } +u32 module_hash_category (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return HASH_CATEGORY; } +const char *module_hash_name (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return HASH_NAME; } +u64 module_kern_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return KERN_TYPE; } +u32 module_opti_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return OPTI_TYPE; } +u64 module_opts_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return OPTS_TYPE; } +u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return SALT_TYPE; } +const char *module_st_hash (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_HASH; } +const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_PASS; } + +static const char *SIGNATURE_BCRYPT1 = "$2a$"; +static const char *SIGNATURE_BCRYPT2 = "$2b$"; +static const char *SIGNATURE_BCRYPT3 = "$2x$"; +static const char *SIGNATURE_BCRYPT4 = "$2y$"; + +typedef struct bcrypt_tmp +{ + u32 E[18]; + + u32 P[18]; + + u32 S0[256]; + u32 S1[256]; + u32 S2[256]; + u32 S3[256]; + +} bcrypt_tmp_t; + +u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u32 pw_max = 72; // Underlaying Blowfish max + + return pw_max; +} + +u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u64 tmp_size = (const u64) sizeof (bcrypt_tmp_t); + + return tmp_size; +} + +bool module_jit_cache_disable (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) +{ + return true; +} + +char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) +{ + char *jit_build_options = NULL; + + // this mode heavily depends on the available shared memory size + // note the kernel need to have some special code changes in order to make use to use post-48k memory region + // we need to set some macros + + bool use_dynamic = false; + + if (device_param->is_cuda == true) + { + use_dynamic = true; + } + + // this uses some nice feedback effect. + // based on the device_local_mem_size the reqd_work_group_size in the kernel is set to some value + // which is then is read from the opencl host in the kernel_preferred_wgs_multiple1/2/3 result. + // therefore we do not need to set module_kernel_threads_min/max except for CPU, where the threads are set to fixed 1. + + if (device_param->opencl_device_type & CL_DEVICE_TYPE_CPU) + { + hc_asprintf (&jit_build_options, "-D FIXED_LOCAL_SIZE=%u", 1); + } + else + { + u32 overhead = 0; + + if (device_param->opencl_device_vendor_id == VENDOR_ID_NV) + { + // note we need to use device_param->device_local_mem_size - 4 because opencl jit returns with: + // Entry function '...' uses too much shared data (0xc004 bytes, 0xc000 max) + // on my development system. no clue where the 4 bytes are spent. + // I did some research on this and it seems to be related with the datatype. + // For example, if i used u8 instead, there's only 1 byte wasted. + + if (device_param->is_opencl == true) + { + overhead = 1; + } + } + + if (user_options->kernel_threads_chgd == true) + { + u32 fixed_local_size = user_options->kernel_threads; + + if (use_dynamic == true) + { + if ((fixed_local_size * 4096) > device_param->kernel_dynamic_local_mem_size_memset) + { + // otherwise out-of-bound reads + + fixed_local_size = device_param->kernel_dynamic_local_mem_size_memset / 4096; + } + + hc_asprintf (&jit_build_options, "-D FIXED_LOCAL_SIZE=%u -D DYNAMIC_LOCAL", fixed_local_size); + } + else + { + if ((fixed_local_size * 4096) > (device_param->device_local_mem_size - overhead)) + { + // otherwise out-of-bound reads + + fixed_local_size = (device_param->device_local_mem_size - overhead) / 4096; + } + + hc_asprintf (&jit_build_options, "-D FIXED_LOCAL_SIZE=%u", fixed_local_size); + } + } + else + { + if (use_dynamic == true) + { + // using kernel_dynamic_local_mem_size_memset is a bit hackish. + // we had to brute-force this value out of an already loaded CUDA function. + // there's no official way to query for this value. + + const u32 fixed_local_size = device_param->kernel_dynamic_local_mem_size_memset / 4096; + + hc_asprintf (&jit_build_options, "-D FIXED_LOCAL_SIZE=%u -D DYNAMIC_LOCAL", fixed_local_size); + } + else + { + const u32 fixed_local_size = (device_param->device_local_mem_size - overhead) / 4096; + + hc_asprintf (&jit_build_options, "-D FIXED_LOCAL_SIZE=%u", fixed_local_size); + } + } + } + + return jit_build_options; +} + +int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len) +{ + u32 *digest = (u32 *) digest_buf; + + hc_token_t token; + + memset (&token, 0, sizeof (hc_token_t)); + + token.token_cnt = 4; + + token.signatures_cnt = 4; + token.signatures_buf[0] = SIGNATURE_BCRYPT1; + token.signatures_buf[1] = SIGNATURE_BCRYPT2; + token.signatures_buf[2] = SIGNATURE_BCRYPT3; + token.signatures_buf[3] = SIGNATURE_BCRYPT4; + + token.len[0] = 4; + token.attr[0] = TOKEN_ATTR_FIXED_LENGTH + | TOKEN_ATTR_VERIFY_SIGNATURE; + + token.sep[1] = '$'; + token.len[1] = 2; + token.attr[1] = TOKEN_ATTR_FIXED_LENGTH + | TOKEN_ATTR_VERIFY_DIGIT; + + token.len[2] = 22; + token.attr[2] = TOKEN_ATTR_FIXED_LENGTH + | TOKEN_ATTR_VERIFY_BASE64B; + + token.len[3] = 31; + token.attr[3] = TOKEN_ATTR_FIXED_LENGTH + | TOKEN_ATTR_VERIFY_BASE64B; + + const int rc_tokenizer = input_tokenizer ((const u8 *) line_buf, line_len, &token); + + if (rc_tokenizer != PARSER_OK) return (rc_tokenizer); + + const u8 *iter_pos = token.buf[1]; + const u8 *salt_pos = token.buf[2]; + const u8 *hash_pos = token.buf[3]; + + const int salt_len = token.len[2]; + const int hash_len = token.len[3]; + + salt->salt_len = 16; + salt->salt_iter = 1u << hc_strtoul ((const char *) iter_pos, NULL, 10); + salt->salt_iter2 = 1u << hc_strtoul ((const char *) iter_pos, NULL, 10); + + memcpy ((char *) salt->salt_sign, line_buf, 6); + //have a copy of that for second round to prevent from calculating it inside kernel + memcpy ((char *) salt->salt_buf_pc, line_buf, 29); + + u8 *salt_buf_ptr = (u8 *) salt->salt_buf; + + u8 tmp_buf[100]; + + memset (tmp_buf, 0, sizeof (tmp_buf)); + + base64_decode (bf64_to_int, (const u8 *) salt_pos, salt_len, tmp_buf); + + memcpy (salt_buf_ptr, tmp_buf, 16); + + salt->salt_buf[0] = byte_swap_32 (salt->salt_buf[0]); + salt->salt_buf[1] = byte_swap_32 (salt->salt_buf[1]); + salt->salt_buf[2] = byte_swap_32 (salt->salt_buf[2]); + salt->salt_buf[3] = byte_swap_32 (salt->salt_buf[3]); + + memset (tmp_buf, 0, sizeof (tmp_buf)); + + base64_decode (bf64_to_int, (const u8 *) hash_pos, hash_len, tmp_buf); + + memcpy (digest, tmp_buf, 24); + + digest[0] = byte_swap_32 (digest[0]); + digest[1] = byte_swap_32 (digest[1]); + digest[2] = byte_swap_32 (digest[2]); + digest[3] = byte_swap_32 (digest[3]); + digest[4] = byte_swap_32 (digest[4]); + digest[5] = byte_swap_32 (digest[5]); + + digest[5] &= ~0xffu; // its just 23 not 24 ! + + return (PARSER_OK); +} + +int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const void *digest_buf, MAYBE_UNUSED const salt_t *salt, MAYBE_UNUSED const void *esalt_buf, MAYBE_UNUSED const void *hook_salt_buf, MAYBE_UNUSED const hashinfo_t *hash_info, char *line_buf, MAYBE_UNUSED const int line_size) +{ + const u32 *digest = (const u32 *) digest_buf; + + u32 tmp_digest[6]; + + tmp_digest[0] = byte_swap_32 (digest[0]); + tmp_digest[1] = byte_swap_32 (digest[1]); + tmp_digest[2] = byte_swap_32 (digest[2]); + tmp_digest[3] = byte_swap_32 (digest[3]); + tmp_digest[4] = byte_swap_32 (digest[4]); + tmp_digest[5] = byte_swap_32 (digest[5]); + + u32 tmp_salt[4]; + + tmp_salt[0] = byte_swap_32 (salt->salt_buf[0]); + tmp_salt[1] = byte_swap_32 (salt->salt_buf[1]); + tmp_salt[2] = byte_swap_32 (salt->salt_buf[2]); + tmp_salt[3] = byte_swap_32 (salt->salt_buf[3]); + + char tmp_buf[64]; + + base64_encode (int_to_bf64, (const u8 *) tmp_salt, 16, (u8 *) tmp_buf + 0); + base64_encode (int_to_bf64, (const u8 *) tmp_digest, 23, (u8 *) tmp_buf + 22); + + tmp_buf[22 + 31] = 0; // base64_encode wants to pad + + return snprintf (line_buf, line_size, "%s$%s", (const char *) salt->salt_sign, tmp_buf); +} + +void module_init (module_ctx_t *module_ctx) +{ + module_ctx->module_context_size = MODULE_CONTEXT_SIZE_CURRENT; + module_ctx->module_interface_version = MODULE_INTERFACE_VERSION_CURRENT; + + module_ctx->module_attack_exec = module_attack_exec; + module_ctx->module_benchmark_esalt = MODULE_DEFAULT; + module_ctx->module_benchmark_hook_salt = MODULE_DEFAULT; + module_ctx->module_benchmark_mask = MODULE_DEFAULT; + module_ctx->module_benchmark_charset = MODULE_DEFAULT; + module_ctx->module_benchmark_salt = MODULE_DEFAULT; + module_ctx->module_bridge_name = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; + module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; + module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; + module_ctx->module_deprecated_notice = MODULE_DEFAULT; + module_ctx->module_dgst_pos0 = module_dgst_pos0; + module_ctx->module_dgst_pos1 = module_dgst_pos1; + module_ctx->module_dgst_pos2 = module_dgst_pos2; + module_ctx->module_dgst_pos3 = module_dgst_pos3; + module_ctx->module_dgst_size = module_dgst_size; + module_ctx->module_dictstat_disable = MODULE_DEFAULT; + module_ctx->module_esalt_size = MODULE_DEFAULT; + module_ctx->module_extra_buffer_size = MODULE_DEFAULT; + module_ctx->module_extra_tmp_size = MODULE_DEFAULT; + module_ctx->module_extra_tuningdb_block = MODULE_DEFAULT; + module_ctx->module_forced_outfile_format = MODULE_DEFAULT; + module_ctx->module_hash_binary_count = MODULE_DEFAULT; + module_ctx->module_hash_binary_parse = MODULE_DEFAULT; + module_ctx->module_hash_binary_save = MODULE_DEFAULT; + module_ctx->module_hash_decode_postprocess = MODULE_DEFAULT; + module_ctx->module_hash_decode_potfile = MODULE_DEFAULT; + module_ctx->module_hash_decode_zero_hash = MODULE_DEFAULT; + module_ctx->module_hash_decode = module_hash_decode; + module_ctx->module_hash_encode_status = MODULE_DEFAULT; + module_ctx->module_hash_encode_potfile = MODULE_DEFAULT; + module_ctx->module_hash_encode = module_hash_encode; + module_ctx->module_hash_init_selftest = MODULE_DEFAULT; + module_ctx->module_hash_mode = MODULE_DEFAULT; + module_ctx->module_hash_category = module_hash_category; + module_ctx->module_hash_name = module_hash_name; + module_ctx->module_hashes_count_min = MODULE_DEFAULT; + module_ctx->module_hashes_count_max = MODULE_DEFAULT; + module_ctx->module_hlfmt_disable = MODULE_DEFAULT; + module_ctx->module_hook_extra_param_size = MODULE_DEFAULT; + module_ctx->module_hook_extra_param_init = MODULE_DEFAULT; + module_ctx->module_hook_extra_param_term = MODULE_DEFAULT; + module_ctx->module_hook12 = MODULE_DEFAULT; + module_ctx->module_hook23 = MODULE_DEFAULT; + module_ctx->module_hook_salt_size = MODULE_DEFAULT; + module_ctx->module_hook_size = MODULE_DEFAULT; + module_ctx->module_jit_build_options = module_jit_build_options; + module_ctx->module_jit_cache_disable = module_jit_cache_disable; + module_ctx->module_kernel_accel_max = MODULE_DEFAULT; + module_ctx->module_kernel_accel_min = MODULE_DEFAULT; + module_ctx->module_kernel_loops_max = MODULE_DEFAULT; + module_ctx->module_kernel_loops_min = MODULE_DEFAULT; + module_ctx->module_kernel_threads_max = MODULE_DEFAULT; + module_ctx->module_kernel_threads_min = MODULE_DEFAULT; + module_ctx->module_kern_type = module_kern_type; + module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; + module_ctx->module_opti_type = module_opti_type; + module_ctx->module_opts_type = module_opts_type; + module_ctx->module_outfile_check_disable = MODULE_DEFAULT; + module_ctx->module_outfile_check_nocomp = MODULE_DEFAULT; + module_ctx->module_potfile_custom_check = MODULE_DEFAULT; + module_ctx->module_potfile_disable = MODULE_DEFAULT; + module_ctx->module_potfile_keep_all_hashes = MODULE_DEFAULT; + module_ctx->module_pwdump_column = MODULE_DEFAULT; + module_ctx->module_pw_max = module_pw_max; + module_ctx->module_pw_min = MODULE_DEFAULT; + module_ctx->module_salt_max = MODULE_DEFAULT; + module_ctx->module_salt_min = MODULE_DEFAULT; + module_ctx->module_salt_type = module_salt_type; + module_ctx->module_separator = MODULE_DEFAULT; + module_ctx->module_st_hash = module_st_hash; + module_ctx->module_st_pass = module_st_pass; + module_ctx->module_tmp_size = module_tmp_size; + module_ctx->module_unstable_warning = MODULE_DEFAULT; + module_ctx->module_warmup_disable = MODULE_DEFAULT; +} diff --git a/tools/test_modules/m33800.pm b/tools/test_modules/m33800.pm new file mode 100644 index 000000000..86ffc3b75 --- /dev/null +++ b/tools/test_modules/m33800.pm @@ -0,0 +1,76 @@ +#!/usr/bin/env perl + +## +## Author......: See docs/credits.txt +## License.....: MIT +## + +use strict; +use warnings; + +use Crypt::Eksblowfish::Bcrypt qw (bcrypt en_base64); +use MIME::Base64 qw (decode_base64); + +sub module_constraints { [[0, 72], [16, 16], [-1, -1], [-1, -1], [-1, -1]] } + +sub module_generate_hash +{ + my $word = shift; + my $salt = shift; + my $iter = shift; + + my $cost = "05"; + + if (length ($iter)) + { + $cost = $iter; + } + + my $hash = bcrypt ($word, sprintf ('$2a$%s$%s$', $cost, en_base64 ($salt))); + + my $hash2 = bcrypt ($hash, sprintf ('$2a$%s$%s$', $cost, en_base64 ($salt))); + + return $hash2; +} + +sub module_verify_hash +{ + my $line = shift; + + my $index1 = index ($line, ":", 33); + + return if $index1 < 1; + + my $hash = substr ($line, 0, $index1); + my $word = substr ($line, $index1 + 1); + + my $index2 = index ($hash, "\$", 4); + + my $iter = substr ($hash, 4, $index2 - 4); + + my $plain_base64 = substr ($hash, $index2 + 1, 22); + + # base64 mapping + + my $base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + my $itoa64_2 = "./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + + my $encoded = ""; + + for (my $i = 0; $i < length ($plain_base64); $i++) + { + my $char = substr ($plain_base64, $i, 1); + + $encoded .= substr ($base64, index ($itoa64_2, $char), 1); + } + + my $salt = decode_base64 ($encoded); + + my $word_packed = pack_if_HEX_notation ($word); + + my $new_hash = module_generate_hash ($word_packed, $salt, $iter); + + return ($new_hash, $word); +} + +1; From 53186f0a7f90909c1b2f6a85782187268b435d89 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Sat, 14 Jun 2025 18:07:50 +0200 Subject: [PATCH 61/95] Added OpenCL/inc_hash_scrypt.cl and src/modules/scrypt_common.c with the goal to reduce code duplication in scrypt based plugins. Updated all scrypt based plugins. Added condition in OpenCL/inc_hash_scrypt.cl to use local memory in case of HIP platform for a 10% speed boost. --- OpenCL/inc_hash_scrypt.cl | 515 ++++++++++++++++++++++++++++++++++++ OpenCL/inc_hash_scrypt.h | 33 +++ OpenCL/m08900-pure.cl | 468 ++------------------------------ OpenCL/m15700-pure.cl | 493 ++-------------------------------- OpenCL/m22700-pure.cl | 482 +++------------------------------ OpenCL/m24000-pure.cl | 507 ++++------------------------------- OpenCL/m27700-pure.cl | 464 ++------------------------------ OpenCL/m28200-pure.cl | 472 ++------------------------------- OpenCL/m29800-pure.cl | 464 ++------------------------------ src/modules/module_08900.c | 260 +----------------- src/modules/module_09300.c | 260 +----------------- src/modules/module_15700.c | 259 +----------------- src/modules/module_22700.c | 260 +----------------- src/modules/module_24000.c | 295 ++------------------- src/modules/module_27700.c | 260 +----------------- src/modules/module_28200.c | 254 ++---------------- src/modules/module_29800.c | 260 +----------------- src/modules/scrypt_common.c | 251 ++++++++++++++++++ 18 files changed, 1134 insertions(+), 5123 deletions(-) create mode 100644 OpenCL/inc_hash_scrypt.cl create mode 100644 OpenCL/inc_hash_scrypt.h create mode 100644 src/modules/scrypt_common.c diff --git a/OpenCL/inc_hash_scrypt.cl b/OpenCL/inc_hash_scrypt.cl new file mode 100644 index 000000000..697ed77bf --- /dev/null +++ b/OpenCL/inc_hash_scrypt.cl @@ -0,0 +1,515 @@ +/** + * Author......: See docs/credits.txt + * License.....: MIT + */ + +#include "inc_vendor.h" +#include "inc_types.h" +#include "inc_platform.h" +#include "inc_common.h" +#include "inc_hash_scrypt.h" + +DECLSPEC void salsa_r_l (LOCAL_AS u32 *TI) +{ + u32 x[16]; + + for (int j = 0; j < 16; j++) x[j] = TI[STATE_CNT - 16 + j]; + + for (int i = 0; i < STATE_CNT; i += 16) + { + for (int j = 0; j < 16; j++) + { + x[j] ^= TI[i + j]; + } + + for (int j = 0; j < 16; j++) + { + TI[i + j] = x[j]; + } + + for (int r = 0; r < 4; r++) + { + u32 t0, t1, t2, t3; + + t0 = x[ 0] + x[12]; + t1 = x[ 1] + x[13]; + t2 = x[ 2] + x[14]; + t3 = x[ 3] + x[15]; + x[ 4] ^= hc_rotl32_S (t0, 7); + x[ 5] ^= hc_rotl32_S (t1, 7); + x[ 6] ^= hc_rotl32_S (t2, 7); + x[ 7] ^= hc_rotl32_S (t3, 7); + + t0 = x[ 4] + x[ 0]; + t1 = x[ 5] + x[ 1]; + t2 = x[ 6] + x[ 2]; + t3 = x[ 7] + x[ 3]; + x[ 8] ^= hc_rotl32_S (t0, 9); + x[ 9] ^= hc_rotl32_S (t1, 9); + x[10] ^= hc_rotl32_S (t2, 9); + x[11] ^= hc_rotl32_S (t3, 9); + + t0 = x[ 8] + x[ 4]; + t1 = x[ 9] + x[ 5]; + t2 = x[10] + x[ 6]; + t3 = x[11] + x[ 7]; + x[12] ^= hc_rotl32_S (t0, 13); + x[13] ^= hc_rotl32_S (t1, 13); + x[14] ^= hc_rotl32_S (t2, 13); + x[15] ^= hc_rotl32_S (t3, 13); + + t0 = x[12] + x[ 8]; + t1 = x[13] + x[ 9]; + t2 = x[14] + x[10]; + t3 = x[15] + x[11]; + x[ 0] ^= hc_rotl32_S (t0, 18); + x[ 1] ^= hc_rotl32_S (t1, 18); + x[ 2] ^= hc_rotl32_S (t2, 18); + x[ 3] ^= hc_rotl32_S (t3, 18); + + t0 = x[ 4]; x[ 4] = x[ 7]; x[ 7] = x[ 6]; x[ 6] = x[ 5]; x[ 5] = t0; + t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; + t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; + t0 = x[12]; x[12] = x[13]; x[13] = x[14]; x[14] = x[15]; x[15] = t0; + + t0 = x[ 0] + x[ 4]; + t1 = x[ 1] + x[ 5]; + t2 = x[ 2] + x[ 6]; + t3 = x[ 3] + x[ 7]; + x[12] ^= hc_rotl32_S (t0, 7); + x[13] ^= hc_rotl32_S (t1, 7); + x[14] ^= hc_rotl32_S (t2, 7); + x[15] ^= hc_rotl32_S (t3, 7); + + t0 = x[12] + x[ 0]; + t1 = x[13] + x[ 1]; + t2 = x[14] + x[ 2]; + t3 = x[15] + x[ 3]; + x[ 8] ^= hc_rotl32_S (t0, 9); + x[ 9] ^= hc_rotl32_S (t1, 9); + x[10] ^= hc_rotl32_S (t2, 9); + x[11] ^= hc_rotl32_S (t3, 9); + + t0 = x[ 8] + x[12]; + t1 = x[ 9] + x[13]; + t2 = x[10] + x[14]; + t3 = x[11] + x[15]; + x[ 4] ^= hc_rotl32_S (t0, 13); + x[ 5] ^= hc_rotl32_S (t1, 13); + x[ 6] ^= hc_rotl32_S (t2, 13); + x[ 7] ^= hc_rotl32_S (t3, 13); + + t0 = x[ 4] + x[ 8]; + t1 = x[ 5] + x[ 9]; + t2 = x[ 6] + x[10]; + t3 = x[ 7] + x[11]; + x[ 0] ^= hc_rotl32_S (t0, 18); + x[ 1] ^= hc_rotl32_S (t1, 18); + x[ 2] ^= hc_rotl32_S (t2, 18); + x[ 3] ^= hc_rotl32_S (t3, 18); + + t0 = x[ 4]; x[ 4] = x[ 5]; x[ 5] = x[ 6]; x[ 6] = x[ 7]; x[ 7] = t0; + t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; + t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; + t0 = x[15]; x[15] = x[14]; x[14] = x[13]; x[13] = x[12]; x[12] = t0; + } + + for (int j = 0; j < 16; j++) + { + x[j] += TI[i + j]; + } + + for (int j = 0; j < 16; j++) + { + TI[i + j] = x[j]; + } + } + + #if SCRYPT_R > 1 + + u32 TT[STATE_CNT / 2]; + + for (int dst_off = 0, src_off = 16; src_off < STATE_CNT; dst_off += 16, src_off += 32) + { + for (int j = 0; j < 16; j++) TT[dst_off + j] = TI[src_off + j]; + } + + for (int dst_off = 16, src_off = 32; src_off < STATE_CNT; dst_off += 16, src_off += 32) + { + for (int j = 0; j < 16; j++) TI[dst_off + j] = TI[src_off + j]; + } + + for (int dst_off = STATE_CNT / 2, src_off = 0; dst_off < STATE_CNT; dst_off += 16, src_off += 16) + { + for (int j = 0; j < 16; j++) TI[dst_off + j] = TT[src_off + j]; + } + + #endif +} + +DECLSPEC void salsa_r_p (PRIVATE_AS u32 *TI) +{ + u32 x[16]; + + for (int j = 0; j < 16; j++) x[j] = TI[STATE_CNT - 16 + j]; + + for (int i = 0; i < STATE_CNT; i += 16) + { + for (int j = 0; j < 16; j++) + { + x[j] ^= TI[i + j]; + } + + for (int j = 0; j < 16; j++) + { + TI[i + j] = x[j]; + } + + for (int r = 0; r < 4; r++) + { + u32 t0, t1, t2, t3; + + t0 = x[ 0] + x[12]; + t1 = x[ 1] + x[13]; + t2 = x[ 2] + x[14]; + t3 = x[ 3] + x[15]; + x[ 4] ^= hc_rotl32_S (t0, 7); + x[ 5] ^= hc_rotl32_S (t1, 7); + x[ 6] ^= hc_rotl32_S (t2, 7); + x[ 7] ^= hc_rotl32_S (t3, 7); + + t0 = x[ 4] + x[ 0]; + t1 = x[ 5] + x[ 1]; + t2 = x[ 6] + x[ 2]; + t3 = x[ 7] + x[ 3]; + x[ 8] ^= hc_rotl32_S (t0, 9); + x[ 9] ^= hc_rotl32_S (t1, 9); + x[10] ^= hc_rotl32_S (t2, 9); + x[11] ^= hc_rotl32_S (t3, 9); + + t0 = x[ 8] + x[ 4]; + t1 = x[ 9] + x[ 5]; + t2 = x[10] + x[ 6]; + t3 = x[11] + x[ 7]; + x[12] ^= hc_rotl32_S (t0, 13); + x[13] ^= hc_rotl32_S (t1, 13); + x[14] ^= hc_rotl32_S (t2, 13); + x[15] ^= hc_rotl32_S (t3, 13); + + t0 = x[12] + x[ 8]; + t1 = x[13] + x[ 9]; + t2 = x[14] + x[10]; + t3 = x[15] + x[11]; + x[ 0] ^= hc_rotl32_S (t0, 18); + x[ 1] ^= hc_rotl32_S (t1, 18); + x[ 2] ^= hc_rotl32_S (t2, 18); + x[ 3] ^= hc_rotl32_S (t3, 18); + + t0 = x[ 4]; x[ 4] = x[ 7]; x[ 7] = x[ 6]; x[ 6] = x[ 5]; x[ 5] = t0; + t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; + t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; + t0 = x[12]; x[12] = x[13]; x[13] = x[14]; x[14] = x[15]; x[15] = t0; + + t0 = x[ 0] + x[ 4]; + t1 = x[ 1] + x[ 5]; + t2 = x[ 2] + x[ 6]; + t3 = x[ 3] + x[ 7]; + x[12] ^= hc_rotl32_S (t0, 7); + x[13] ^= hc_rotl32_S (t1, 7); + x[14] ^= hc_rotl32_S (t2, 7); + x[15] ^= hc_rotl32_S (t3, 7); + + t0 = x[12] + x[ 0]; + t1 = x[13] + x[ 1]; + t2 = x[14] + x[ 2]; + t3 = x[15] + x[ 3]; + x[ 8] ^= hc_rotl32_S (t0, 9); + x[ 9] ^= hc_rotl32_S (t1, 9); + x[10] ^= hc_rotl32_S (t2, 9); + x[11] ^= hc_rotl32_S (t3, 9); + + t0 = x[ 8] + x[12]; + t1 = x[ 9] + x[13]; + t2 = x[10] + x[14]; + t3 = x[11] + x[15]; + x[ 4] ^= hc_rotl32_S (t0, 13); + x[ 5] ^= hc_rotl32_S (t1, 13); + x[ 6] ^= hc_rotl32_S (t2, 13); + x[ 7] ^= hc_rotl32_S (t3, 13); + + t0 = x[ 4] + x[ 8]; + t1 = x[ 5] + x[ 9]; + t2 = x[ 6] + x[10]; + t3 = x[ 7] + x[11]; + x[ 0] ^= hc_rotl32_S (t0, 18); + x[ 1] ^= hc_rotl32_S (t1, 18); + x[ 2] ^= hc_rotl32_S (t2, 18); + x[ 3] ^= hc_rotl32_S (t3, 18); + + t0 = x[ 4]; x[ 4] = x[ 5]; x[ 5] = x[ 6]; x[ 6] = x[ 7]; x[ 7] = t0; + t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; + t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; + t0 = x[15]; x[15] = x[14]; x[14] = x[13]; x[13] = x[12]; x[12] = t0; + } + + for (int j = 0; j < 16; j++) + { + x[j] += TI[i + j]; + } + + for (int j = 0; j < 16; j++) + { + TI[i + j] = x[j]; + } + } + + #if SCRYPT_R > 1 + + u32 TT[STATE_CNT / 2]; + + for (int dst_off = 0, src_off = 16; src_off < STATE_CNT; dst_off += 16, src_off += 32) + { + for (int j = 0; j < 16; j++) TT[dst_off + j] = TI[src_off + j]; + } + + for (int dst_off = 16, src_off = 32; src_off < STATE_CNT; dst_off += 16, src_off += 32) + { + for (int j = 0; j < 16; j++) TI[dst_off + j] = TI[src_off + j]; + } + + for (int dst_off = STATE_CNT / 2, src_off = 0; dst_off < STATE_CNT; dst_off += 16, src_off += 16) + { + for (int j = 0; j < 16; j++) TI[dst_off + j] = TT[src_off + j]; + } + + #endif +} + +#ifdef IS_HIP +DECLSPEC void scrypt_smix_init (LOCAL_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) +#else +DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) +#endif +{ + const u32 ySIZE = SCRYPT_N / SCRYPT_TMTO; + const u32 zSIZE = STATE_CNT4; + + const u32 x = (u32) gid; + + const u32 xd4 = x / 4; + const u32 xm4 = x & 3; + + GLOBAL_AS uint4 *V; + + switch (xm4) + { + case 0: V = V0; break; + case 1: V = V1; break; + case 2: V = V2; break; + case 3: V = V3; break; + } + + for (u32 y = 0; y < ySIZE; y++) + { + for (u32 z = 0; z < zSIZE; z++) V[CO] = X[z]; + + #ifdef IS_HIP + for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r_l ((LOCAL_AS u32 *) X); + #else + for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r_p ((PRIVATE_AS u32 *) X); + #endif + } +} + +#ifdef IS_HIP +DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, LOCAL_AS uint4 *T, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) +#else +DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, PRIVATE_AS uint4 *T, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) +#endif +{ + const u32 ySIZE = SCRYPT_N / SCRYPT_TMTO; + const u32 zSIZE = STATE_CNT4; + + const u32 x = (u32) gid; + + const u32 xd4 = x / 4; + const u32 xm4 = x & 3; + + GLOBAL_AS uint4 *V; + + switch (xm4) + { + case 0: V = V0; break; + case 1: V = V1; break; + case 2: V = V2; break; + case 3: V = V3; break; + } + + // note: fixed 1024 iterations = forced -u 1024 + + for (u32 N_pos = 0; N_pos < 1024; N_pos++) + { + const u32 k = X[zSIZE - 4].x & (SCRYPT_N - 1); + + const u32 y = k / SCRYPT_TMTO; + + const u32 km = k - (y * SCRYPT_TMTO); + + for (u32 z = 0; z < zSIZE; z++) T[z] = V[CO]; + + #ifdef IS_HIP + for (u32 i = 0; i < km; i++) salsa_r_l ((LOCAL_AS u32 *) T); + #else + for (u32 i = 0; i < km; i++) salsa_r_p ((PRIVATE_AS u32 *) T); + #endif + + for (u32 z = 0; z < zSIZE; z++) X[z] ^= T[z]; + + salsa_r_p ((PRIVATE_AS u32 *) X); + } +} + +DECLSPEC void scrypt_blockmix_in (GLOBAL_AS uint4 *out_buf, const int out_len) +{ + for (int i = 0, j = 0; i < out_len; i += 64, j += 4) + { + uint4 T[4]; + + T[0] = out_buf[j + 0]; + T[1] = out_buf[j + 1]; + T[2] = out_buf[j + 2]; + T[3] = out_buf[j + 3]; + + uint4 X[4]; + + #if defined IS_CUDA || defined IS_HIP + X[0] = make_uint4 (T[0].x, T[1].y, T[2].z, T[3].w); + X[1] = make_uint4 (T[1].x, T[2].y, T[3].z, T[0].w); + X[2] = make_uint4 (T[2].x, T[3].y, T[0].z, T[1].w); + X[3] = make_uint4 (T[3].x, T[0].y, T[1].z, T[2].w); + #elif defined IS_METAL + X[0] = uint4 (T[0].x, T[1].y, T[2].z, T[3].w); + X[1] = uint4 (T[1].x, T[2].y, T[3].z, T[0].w); + X[2] = uint4 (T[2].x, T[3].y, T[0].z, T[1].w); + X[3] = uint4 (T[3].x, T[0].y, T[1].z, T[2].w); + #else + X[0] = (uint4) (T[0].x, T[1].y, T[2].z, T[3].w); + X[1] = (uint4) (T[1].x, T[2].y, T[3].z, T[0].w); + X[2] = (uint4) (T[2].x, T[3].y, T[0].z, T[1].w); + X[3] = (uint4) (T[3].x, T[0].y, T[1].z, T[2].w); + #endif + + out_buf[j + 0] = X[0]; + out_buf[j + 1] = X[1]; + out_buf[j + 2] = X[2]; + out_buf[j + 3] = X[3]; + } +} + +DECLSPEC void scrypt_blockmix_out (GLOBAL_AS uint4 *out_buf, const int out_len) +{ + for (int i = 0, j = 0; i < out_len; i += 64, j += 4) + { + uint4 X[4]; + + X[0] = out_buf[j + 0]; + X[1] = out_buf[j + 1]; + X[2] = out_buf[j + 2]; + X[3] = out_buf[j + 3]; + + uint4 T[4]; + + #if defined IS_CUDA || defined IS_HIP + T[0] = make_uint4 (X[0].x, X[3].y, X[2].z, X[1].w); + T[1] = make_uint4 (X[1].x, X[0].y, X[3].z, X[2].w); + T[2] = make_uint4 (X[2].x, X[1].y, X[0].z, X[3].w); + T[3] = make_uint4 (X[3].x, X[2].y, X[1].z, X[0].w); + #elif defined IS_METAL + T[0] = uint4 (X[0].x, X[3].y, X[2].z, X[1].w); + T[1] = uint4 (X[1].x, X[0].y, X[3].z, X[2].w); + T[2] = uint4 (X[2].x, X[1].y, X[0].z, X[3].w); + T[3] = uint4 (X[3].x, X[2].y, X[1].z, X[0].w); + #else + T[0] = (uint4) (X[0].x, X[3].y, X[2].z, X[1].w); + T[1] = (uint4) (X[1].x, X[0].y, X[3].z, X[2].w); + T[2] = (uint4) (X[2].x, X[1].y, X[0].z, X[3].w); + T[3] = (uint4) (X[3].x, X[2].y, X[1].z, X[0].w); + #endif + + out_buf[j + 0] = T[0]; + out_buf[j + 1] = T[1]; + out_buf[j + 2] = T[2]; + out_buf[j + 3] = T[3]; + } +} + +DECLSPEC void scrypt_pbkdf2_body (PRIVATE_AS sha256_hmac_ctx_t *sha256_hmac_ctx, GLOBAL_AS uint4 *out_buf, const int out_len) +{ + for (int i = 0, j = 1, k = 0; i < out_len; i += 32, j += 1, k += 2) + { + sha256_hmac_ctx_t sha256_hmac_ctx2 = *sha256_hmac_ctx; + + u32 w0[4]; + u32 w1[4]; + u32 w2[4]; + u32 w3[4]; + + w0[0] = j; + w0[1] = 0; + w0[2] = 0; + w0[3] = 0; + w1[0] = 0; + w1[1] = 0; + w1[2] = 0; + w1[3] = 0; + w2[0] = 0; + w2[1] = 0; + w2[2] = 0; + w2[3] = 0; + w3[0] = 0; + w3[1] = 0; + w3[2] = 0; + w3[3] = 0; + + sha256_hmac_update_64 (&sha256_hmac_ctx2, w0, w1, w2, w3, 4); + + sha256_hmac_final (&sha256_hmac_ctx2); + + u32 digest[8]; + + digest[0] = hc_swap32_S (sha256_hmac_ctx2.opad.h[0]); + digest[1] = hc_swap32_S (sha256_hmac_ctx2.opad.h[1]); + digest[2] = hc_swap32_S (sha256_hmac_ctx2.opad.h[2]); + digest[3] = hc_swap32_S (sha256_hmac_ctx2.opad.h[3]); + digest[4] = hc_swap32_S (sha256_hmac_ctx2.opad.h[4]); + digest[5] = hc_swap32_S (sha256_hmac_ctx2.opad.h[5]); + digest[6] = hc_swap32_S (sha256_hmac_ctx2.opad.h[6]); + digest[7] = hc_swap32_S (sha256_hmac_ctx2.opad.h[7]); + + #if defined IS_CUDA || defined IS_HIP + const uint4 tmp0 = make_uint4 (digest[0], digest[1], digest[2], digest[3]); + const uint4 tmp1 = make_uint4 (digest[4], digest[5], digest[6], digest[7]); + #elif defined IS_METAL + const uint4 tmp0 = uint4 (digest[0], digest[1], digest[2], digest[3]); + const uint4 tmp1 = uint4 (digest[4], digest[5], digest[6], digest[7]); + #else + const uint4 tmp0 = (uint4) (digest[0], digest[1], digest[2], digest[3]); + const uint4 tmp1 = (uint4) (digest[4], digest[5], digest[6], digest[7]); + #endif + + out_buf[k + 0] = tmp0; + out_buf[k + 1] = tmp1; + } +} + +DECLSPEC void scrypt_pbkdf2 (GLOBAL_AS const u32 *pw_buf, const int pw_len, GLOBAL_AS const u32 *salt_buf, const int salt_len, GLOBAL_AS uint4 *out_buf, const int out_len) +{ + sha256_hmac_ctx_t sha256_hmac_ctx; + + sha256_hmac_init_global_swap (&sha256_hmac_ctx, pw_buf, pw_len); + + sha256_hmac_update_global_swap (&sha256_hmac_ctx, salt_buf, salt_len); + + scrypt_pbkdf2_body (&sha256_hmac_ctx, out_buf, out_len); +} + diff --git a/OpenCL/inc_hash_scrypt.h b/OpenCL/inc_hash_scrypt.h new file mode 100644 index 000000000..3ae019a6e --- /dev/null +++ b/OpenCL/inc_hash_scrypt.h @@ -0,0 +1,33 @@ +/** + * Author......: See docs/credits.txt + * License.....: MIT + */ + +#ifndef INC_HASH_SCRYPT_H +#define INC_HASH_SCRYPT_H + +#define GET_SCRYPT_CNT(r,p) (2 * (r) * 16 * (p)) +#define GET_SMIX_CNT(r,N) (2 * (r) * 16 * (N)) +#define GET_STATE_CNT(r) (2 * (r) * 16) + +#define SCRYPT_CNT GET_SCRYPT_CNT (SCRYPT_R, SCRYPT_P) +#define SCRYPT_CNT4 (SCRYPT_CNT / 4) +#define STATE_CNT GET_STATE_CNT (SCRYPT_R) +#define STATE_CNT4 (STATE_CNT / 4) + +#define Coord(xd4,y,z) (((xd4) * ySIZE * zSIZE) + ((y) * zSIZE) + (z)) +#define CO Coord(xd4,y,z) + +#if defined IS_CUDA +inline __device__ uint4 operator & (const uint4 a, const u32 b) { return make_uint4 ((a.x & b ), (a.y & b ), (a.z & b ), (a.w & b )); } +inline __device__ uint4 operator << (const uint4 a, const u32 b) { return make_uint4 ((a.x << b ), (a.y << b ), (a.z << b ), (a.w << b )); } +inline __device__ uint4 operator >> (const uint4 a, const u32 b) { return make_uint4 ((a.x >> b ), (a.y >> b ), (a.z >> b ), (a.w >> b )); } +inline __device__ uint4 operator + (const uint4 a, const uint4 b) { return make_uint4 ((a.x + b.x), (a.y + b.y), (a.z + b.z), (a.w + b.w)); } +inline __device__ uint4 operator ^ (const uint4 a, const uint4 b) { return make_uint4 ((a.x ^ b.x), (a.y ^ b.y), (a.z ^ b.z), (a.w ^ b.w)); } +inline __device__ uint4 operator | (const uint4 a, const uint4 b) { return make_uint4 ((a.x | b.x), (a.y | b.y), (a.z | b.z), (a.w | b.w)); } +inline __device__ void operator ^= ( uint4 &a, const uint4 b) { a.x ^= b.x; a.y ^= b.y; a.z ^= b.z; a.w ^= b.w; } + +inline __device__ uint4 rotate (const uint4 a, const int n) { return ((a << n) | ((a >> (32 - n)))); } +#endif + +#endif diff --git a/OpenCL/m08900-pure.cl b/OpenCL/m08900-pure.cl index c5a989418..69f5624c5 100644 --- a/OpenCL/m08900-pure.cl +++ b/OpenCL/m08900-pure.cl @@ -9,6 +9,7 @@ #include M2S(INCLUDE_PATH/inc_platform.cl) #include M2S(INCLUDE_PATH/inc_common.cl) #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) +#include M2S(INCLUDE_PATH/inc_hash_scrypt.cl) #endif #define COMPARE_S M2S(INCLUDE_PATH/inc_comp_single.cl) @@ -24,379 +25,35 @@ typedef struct } scrypt_tmp_t; -#if defined IS_CUDA || defined IS_HIP - -inline __device__ uint4 operator & (const uint4 a, const u32 b) { return make_uint4 ((a.x & b ), (a.y & b ), (a.z & b ), (a.w & b )); } -inline __device__ uint4 operator << (const uint4 a, const u32 b) { return make_uint4 ((a.x << b ), (a.y << b ), (a.z << b ), (a.w << b )); } -inline __device__ uint4 operator >> (const uint4 a, const u32 b) { return make_uint4 ((a.x >> b ), (a.y >> b ), (a.z >> b ), (a.w >> b )); } -inline __device__ uint4 operator + (const uint4 a, const uint4 b) { return make_uint4 ((a.x + b.x), (a.y + b.y), (a.z + b.z), (a.w + b.w)); } -inline __device__ uint4 operator ^ (const uint4 a, const uint4 b) { return make_uint4 ((a.x ^ b.x), (a.y ^ b.y), (a.z ^ b.z), (a.w ^ b.w)); } -inline __device__ uint4 operator | (const uint4 a, const uint4 b) { return make_uint4 ((a.x | b.x), (a.y | b.y), (a.z | b.z), (a.w | b.w)); } -inline __device__ void operator ^= ( uint4 &a, const uint4 b) { a.x ^= b.x; a.y ^= b.y; a.z ^= b.z; a.w ^= b.w; } - -inline __device__ uint4 rotate (const uint4 a, const int n) -{ - return ((a << n) | ((a >> (32 - n)))); -} - -#endif - -DECLSPEC uint4 hc_swap32_4 (uint4 v) -{ - return (rotate ((v & 0x00FF00FF), 24u) | rotate ((v & 0xFF00FF00), 8u)); -} - -#define GET_SCRYPT_CNT(r,p) (2 * (r) * 16 * (p)) -#define GET_SMIX_CNT(r,N) (2 * (r) * 16 * (N)) -#define GET_STATE_CNT(r) (2 * (r) * 16) - -#define SCRYPT_CNT GET_SCRYPT_CNT (SCRYPT_R, SCRYPT_P) -#define SCRYPT_CNT4 (SCRYPT_CNT / 4) -#define STATE_CNT GET_STATE_CNT (SCRYPT_R) -#define STATE_CNT4 (STATE_CNT / 4) - -#define Coord(xd4,y,z) (((xd4) * ySIZE * zSIZE) + ((y) * zSIZE) + (z)) -#define CO Coord(xd4,y,z) - -DECLSPEC void salsa_r (PRIVATE_AS u32 *TI) -{ - u32 x[16]; - - for (int j = 0; j < 16; j++) x[j] = TI[STATE_CNT - 16 + j]; - - for (int i = 0; i < STATE_CNT; i += 16) - { - for (int j = 0; j < 16; j++) - { - x[j] ^= TI[i + j]; - } - - for (int j = 0; j < 16; j++) - { - TI[i + j] = x[j]; - } - - for (int r = 0; r < 4; r++) - { - u32 t0, t1, t2, t3; - - t0 = x[ 0] + x[12]; - t1 = x[ 1] + x[13]; - t2 = x[ 2] + x[14]; - t3 = x[ 3] + x[15]; - x[ 4] ^= hc_rotl32_S (t0, 7); - x[ 5] ^= hc_rotl32_S (t1, 7); - x[ 6] ^= hc_rotl32_S (t2, 7); - x[ 7] ^= hc_rotl32_S (t3, 7); - - t0 = x[ 4] + x[ 0]; - t1 = x[ 5] + x[ 1]; - t2 = x[ 6] + x[ 2]; - t3 = x[ 7] + x[ 3]; - x[ 8] ^= hc_rotl32_S (t0, 9); - x[ 9] ^= hc_rotl32_S (t1, 9); - x[10] ^= hc_rotl32_S (t2, 9); - x[11] ^= hc_rotl32_S (t3, 9); - - t0 = x[ 8] + x[ 4]; - t1 = x[ 9] + x[ 5]; - t2 = x[10] + x[ 6]; - t3 = x[11] + x[ 7]; - x[12] ^= hc_rotl32_S (t0, 13); - x[13] ^= hc_rotl32_S (t1, 13); - x[14] ^= hc_rotl32_S (t2, 13); - x[15] ^= hc_rotl32_S (t3, 13); - - t0 = x[12] + x[ 8]; - t1 = x[13] + x[ 9]; - t2 = x[14] + x[10]; - t3 = x[15] + x[11]; - x[ 0] ^= hc_rotl32_S (t0, 18); - x[ 1] ^= hc_rotl32_S (t1, 18); - x[ 2] ^= hc_rotl32_S (t2, 18); - x[ 3] ^= hc_rotl32_S (t3, 18); - - t0 = x[ 4]; x[ 4] = x[ 7]; x[ 7] = x[ 6]; x[ 6] = x[ 5]; x[ 5] = t0; - t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; - t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; - t0 = x[12]; x[12] = x[13]; x[13] = x[14]; x[14] = x[15]; x[15] = t0; - - t0 = x[ 0] + x[ 4]; - t1 = x[ 1] + x[ 5]; - t2 = x[ 2] + x[ 6]; - t3 = x[ 3] + x[ 7]; - x[12] ^= hc_rotl32_S (t0, 7); - x[13] ^= hc_rotl32_S (t1, 7); - x[14] ^= hc_rotl32_S (t2, 7); - x[15] ^= hc_rotl32_S (t3, 7); - - t0 = x[12] + x[ 0]; - t1 = x[13] + x[ 1]; - t2 = x[14] + x[ 2]; - t3 = x[15] + x[ 3]; - x[ 8] ^= hc_rotl32_S (t0, 9); - x[ 9] ^= hc_rotl32_S (t1, 9); - x[10] ^= hc_rotl32_S (t2, 9); - x[11] ^= hc_rotl32_S (t3, 9); - - t0 = x[ 8] + x[12]; - t1 = x[ 9] + x[13]; - t2 = x[10] + x[14]; - t3 = x[11] + x[15]; - x[ 4] ^= hc_rotl32_S (t0, 13); - x[ 5] ^= hc_rotl32_S (t1, 13); - x[ 6] ^= hc_rotl32_S (t2, 13); - x[ 7] ^= hc_rotl32_S (t3, 13); - - t0 = x[ 4] + x[ 8]; - t1 = x[ 5] + x[ 9]; - t2 = x[ 6] + x[10]; - t3 = x[ 7] + x[11]; - x[ 0] ^= hc_rotl32_S (t0, 18); - x[ 1] ^= hc_rotl32_S (t1, 18); - x[ 2] ^= hc_rotl32_S (t2, 18); - x[ 3] ^= hc_rotl32_S (t3, 18); - - t0 = x[ 4]; x[ 4] = x[ 5]; x[ 5] = x[ 6]; x[ 6] = x[ 7]; x[ 7] = t0; - t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; - t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; - t0 = x[15]; x[15] = x[14]; x[14] = x[13]; x[13] = x[12]; x[12] = t0; - } - - for (int j = 0; j < 16; j++) - { - x[j] += TI[i + j]; - } - - for (int j = 0; j < 16; j++) - { - TI[i + j] = x[j]; - } - } - - #if SCRYPT_R > 1 - - u32 TT[STATE_CNT / 2]; - - for (int dst_off = 0, src_off = 16; src_off < STATE_CNT; dst_off += 16, src_off += 32) - { - for (int j = 0; j < 16; j++) TT[dst_off + j] = TI[src_off + j]; - } - - for (int dst_off = 16, src_off = 32; src_off < STATE_CNT; dst_off += 16, src_off += 32) - { - for (int j = 0; j < 16; j++) TI[dst_off + j] = TI[src_off + j]; - } - - for (int dst_off = STATE_CNT / 2, src_off = 0; dst_off < STATE_CNT; dst_off += 16, src_off += 16) - { - for (int j = 0; j < 16; j++) TI[dst_off + j] = TT[src_off + j]; - } - - #endif -} - -DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) -{ - const u32 ySIZE = SCRYPT_N / SCRYPT_TMTO; - const u32 zSIZE = STATE_CNT4; - - const u32 x = (u32) gid; - - const u32 xd4 = x / 4; - const u32 xm4 = x & 3; - - GLOBAL_AS uint4 *V; - - switch (xm4) - { - case 0: V = V0; break; - case 1: V = V1; break; - case 2: V = V2; break; - case 3: V = V3; break; - } - - for (u32 y = 0; y < ySIZE; y++) - { - for (u32 z = 0; z < zSIZE; z++) V[CO] = X[z]; - - for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r ((PRIVATE_AS u32 *) X); - } -} - -DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) -{ - const u32 ySIZE = SCRYPT_N / SCRYPT_TMTO; - const u32 zSIZE = STATE_CNT4; - - const u32 x = (u32) gid; - - const u32 xd4 = x / 4; - const u32 xm4 = x & 3; - - GLOBAL_AS uint4 *V; - - switch (xm4) - { - case 0: V = V0; break; - case 1: V = V1; break; - case 2: V = V2; break; - case 3: V = V3; break; - } - - // note: fixed 1024 iterations = forced -u 1024 - - for (u32 N_pos = 0; N_pos < 1024; N_pos++) - { - const u32 k = X[zSIZE - 4].x & (SCRYPT_N - 1); - - const u32 y = k / SCRYPT_TMTO; - - const u32 km = k - (y * SCRYPT_TMTO); - - uint4 T[STATE_CNT4]; - - for (u32 z = 0; z < zSIZE; z++) T[z] = V[CO]; - - for (u32 i = 0; i < km; i++) salsa_r ((PRIVATE_AS u32 *) T); - - for (u32 z = 0; z < zSIZE; z++) X[z] ^= T[z]; - - salsa_r ((PRIVATE_AS u32 *) X); - } -} - KERNEL_FQ void HC_ATTR_SEQ m08900_init (KERN_ATTR_TMPS (scrypt_tmp_t)) { - /** - * base - */ - const u64 gid = get_global_id (0); if (gid >= GID_CNT) return; - sha256_hmac_ctx_t sha256_hmac_ctx; + scrypt_pbkdf2 (pws[gid].i, pws[gid].pw_len, salt_bufs[SALT_POS_HOST].salt_buf, salt_bufs[SALT_POS_HOST].salt_len, tmps[gid].P, SCRYPT_CNT * 4); - sha256_hmac_init_global_swap (&sha256_hmac_ctx, pws[gid].i, pws[gid].pw_len); - - sha256_hmac_update_global_swap (&sha256_hmac_ctx, salt_bufs[SALT_POS_HOST].salt_buf, salt_bufs[SALT_POS_HOST].salt_len); - - for (u32 i = 0, j = 1, k = 0; i < SCRYPT_CNT; i += 8, j += 1, k += 2) - { - sha256_hmac_ctx_t sha256_hmac_ctx2 = sha256_hmac_ctx; - - u32 w0[4]; - u32 w1[4]; - u32 w2[4]; - u32 w3[4]; - - w0[0] = j; - w0[1] = 0; - w0[2] = 0; - w0[3] = 0; - w1[0] = 0; - w1[1] = 0; - w1[2] = 0; - w1[3] = 0; - w2[0] = 0; - w2[1] = 0; - w2[2] = 0; - w2[3] = 0; - w3[0] = 0; - w3[1] = 0; - w3[2] = 0; - w3[3] = 0; - - sha256_hmac_update_64 (&sha256_hmac_ctx2, w0, w1, w2, w3, 4); - - sha256_hmac_final (&sha256_hmac_ctx2); - - u32 digest[8]; - - digest[0] = sha256_hmac_ctx2.opad.h[0]; - digest[1] = sha256_hmac_ctx2.opad.h[1]; - digest[2] = sha256_hmac_ctx2.opad.h[2]; - digest[3] = sha256_hmac_ctx2.opad.h[3]; - digest[4] = sha256_hmac_ctx2.opad.h[4]; - digest[5] = sha256_hmac_ctx2.opad.h[5]; - digest[6] = sha256_hmac_ctx2.opad.h[6]; - digest[7] = sha256_hmac_ctx2.opad.h[7]; - - #if defined IS_CUDA || defined IS_HIP - const uint4 tmp0 = make_uint4 (digest[0], digest[1], digest[2], digest[3]); - const uint4 tmp1 = make_uint4 (digest[4], digest[5], digest[6], digest[7]); - #elif defined IS_METAL - const uint4 tmp0 = uint4 (digest[0], digest[1], digest[2], digest[3]); - const uint4 tmp1 = uint4 (digest[4], digest[5], digest[6], digest[7]); - #else - const uint4 tmp0 = (uint4) (digest[0], digest[1], digest[2], digest[3]); - const uint4 tmp1 = (uint4) (digest[4], digest[5], digest[6], digest[7]); - #endif - - tmps[gid].P[k + 0] = tmp0; - tmps[gid].P[k + 1] = tmp1; - } - - for (u32 l = 0; l < SCRYPT_CNT4; l += 4) - { - uint4 T[4]; - - T[0] = tmps[gid].P[l + 0]; - T[1] = tmps[gid].P[l + 1]; - T[2] = tmps[gid].P[l + 2]; - T[3] = tmps[gid].P[l + 3]; - - T[0] = hc_swap32_4 (T[0]); - T[1] = hc_swap32_4 (T[1]); - T[2] = hc_swap32_4 (T[2]); - T[3] = hc_swap32_4 (T[3]); - - uint4 X[4]; - - #if defined IS_CUDA || defined IS_HIP - X[0] = make_uint4 (T[0].x, T[1].y, T[2].z, T[3].w); - X[1] = make_uint4 (T[1].x, T[2].y, T[3].z, T[0].w); - X[2] = make_uint4 (T[2].x, T[3].y, T[0].z, T[1].w); - X[3] = make_uint4 (T[3].x, T[0].y, T[1].z, T[2].w); - #elif defined IS_METAL - X[0] = uint4 (T[0].x, T[1].y, T[2].z, T[3].w); - X[1] = uint4 (T[1].x, T[2].y, T[3].z, T[0].w); - X[2] = uint4 (T[2].x, T[3].y, T[0].z, T[1].w); - X[3] = uint4 (T[3].x, T[0].y, T[1].z, T[2].w); - #else - X[0] = (uint4) (T[0].x, T[1].y, T[2].z, T[3].w); - X[1] = (uint4) (T[1].x, T[2].y, T[3].z, T[0].w); - X[2] = (uint4) (T[2].x, T[3].y, T[0].z, T[1].w); - X[3] = (uint4) (T[3].x, T[0].y, T[1].z, T[2].w); - #endif - - tmps[gid].P[l + 0] = X[0]; - tmps[gid].P[l + 1] = X[1]; - tmps[gid].P[l + 2] = X[2]; - tmps[gid].P[l + 3] = X[3]; - } + scrypt_blockmix_in (tmps[gid].P, SCRYPT_CNT * 4); } KERNEL_FQ void HC_ATTR_SEQ m08900_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) { - /** - * base - */ - const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); if (gid >= GID_CNT) return; - // SCRYPT part, init V - GLOBAL_AS uint4 *d_scrypt0_buf = (GLOBAL_AS uint4 *) d_extra0_buf; GLOBAL_AS uint4 *d_scrypt1_buf = (GLOBAL_AS uint4 *) d_extra1_buf; GLOBAL_AS uint4 *d_scrypt2_buf = (GLOBAL_AS uint4 *) d_extra2_buf; GLOBAL_AS uint4 *d_scrypt3_buf = (GLOBAL_AS uint4 *) d_extra3_buf; + #ifdef IS_HIP + LOCAL_VK uint4 X_s[MAX_THREADS_PER_BLOCK][STATE_CNT4]; + LOCAL_AS uint4 *X = X_s[lid]; + #else uint4 X[STATE_CNT4]; + #endif const u32 P_offset = SALT_REPEAT * STATE_CNT4; @@ -423,119 +80,38 @@ KERNEL_FQ void HC_ATTR_SEQ m08900_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) uint4 X[STATE_CNT4]; + #ifdef IS_HIP + LOCAL_VK uint4 T_s[MAX_THREADS_PER_BLOCK][STATE_CNT4]; + LOCAL_AS uint4 *T = T_s[lid]; + #else + uint4 T[STATE_CNT4]; + #endif + const u32 P_offset = SALT_REPEAT * STATE_CNT4; GLOBAL_AS uint4 *P = tmps[gid].P + P_offset; for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - scrypt_smix_loop (X, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid); + scrypt_smix_loop (X, T, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid); for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } KERNEL_FQ void HC_ATTR_SEQ m08900_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) { - /** - * base - */ - const u64 gid = get_global_id (0); - const u64 lid = get_local_id (0); if (gid >= GID_CNT) return; - /** - * 2nd pbkdf2, creates B - */ + scrypt_blockmix_out (tmps[gid].P, SCRYPT_CNT * 4); - u32 w0[4]; - u32 w1[4]; - u32 w2[4]; - u32 w3[4]; + scrypt_pbkdf2 (pws[gid].i, pws[gid].pw_len, (GLOBAL_AS const u32 *) tmps[gid].P, SCRYPT_CNT * 4, tmps[gid].P, 16); - sha256_hmac_ctx_t ctx; - - sha256_hmac_init_global_swap (&ctx, pws[gid].i, pws[gid].pw_len); - - for (u32 l = 0; l < SCRYPT_CNT4; l += 4) - { - uint4 X[4]; - - X[0] = tmps[gid].P[l + 0]; - X[1] = tmps[gid].P[l + 1]; - X[2] = tmps[gid].P[l + 2]; - X[3] = tmps[gid].P[l + 3]; - - uint4 T[4]; - - #if defined IS_CUDA || defined IS_HIP - T[0] = make_uint4 (X[0].x, X[3].y, X[2].z, X[1].w); - T[1] = make_uint4 (X[1].x, X[0].y, X[3].z, X[2].w); - T[2] = make_uint4 (X[2].x, X[1].y, X[0].z, X[3].w); - T[3] = make_uint4 (X[3].x, X[2].y, X[1].z, X[0].w); - #elif defined IS_METAL - T[0] = uint4 (X[0].x, X[3].y, X[2].z, X[1].w); - T[1] = uint4 (X[1].x, X[0].y, X[3].z, X[2].w); - T[2] = uint4 (X[2].x, X[1].y, X[0].z, X[3].w); - T[3] = uint4 (X[3].x, X[2].y, X[1].z, X[0].w); - #else - T[0] = (uint4) (X[0].x, X[3].y, X[2].z, X[1].w); - T[1] = (uint4) (X[1].x, X[0].y, X[3].z, X[2].w); - T[2] = (uint4) (X[2].x, X[1].y, X[0].z, X[3].w); - T[3] = (uint4) (X[3].x, X[2].y, X[1].z, X[0].w); - #endif - - T[0] = hc_swap32_4 (T[0]); - T[1] = hc_swap32_4 (T[1]); - T[2] = hc_swap32_4 (T[2]); - T[3] = hc_swap32_4 (T[3]); - - w0[0] = T[0].x; - w0[1] = T[0].y; - w0[2] = T[0].z; - w0[3] = T[0].w; - w1[0] = T[1].x; - w1[1] = T[1].y; - w1[2] = T[1].z; - w1[3] = T[1].w; - w2[0] = T[2].x; - w2[1] = T[2].y; - w2[2] = T[2].z; - w2[3] = T[2].w; - w3[0] = T[3].x; - w3[1] = T[3].y; - w3[2] = T[3].z; - w3[3] = T[3].w; - - sha256_hmac_update_64 (&ctx, w0, w1, w2, w3, 64); - } - - w0[0] = 1; - w0[1] = 0; - w0[2] = 0; - w0[3] = 0; - w1[0] = 0; - w1[1] = 0; - w1[2] = 0; - w1[3] = 0; - w2[0] = 0; - w2[1] = 0; - w2[2] = 0; - w2[3] = 0; - w3[0] = 0; - w3[1] = 0; - w3[2] = 0; - w3[3] = 0; - - sha256_hmac_update_64 (&ctx, w0, w1, w2, w3, 4); - - sha256_hmac_final (&ctx); - - const u32 r0 = hc_swap32_S (ctx.opad.h[DGST_R0]); - const u32 r1 = hc_swap32_S (ctx.opad.h[DGST_R1]); - const u32 r2 = hc_swap32_S (ctx.opad.h[DGST_R2]); - const u32 r3 = hc_swap32_S (ctx.opad.h[DGST_R3]); + const u32 r0 = tmps[gid].P[0].x; + const u32 r1 = tmps[gid].P[0].y; + const u32 r2 = tmps[gid].P[0].z; + const u32 r3 = tmps[gid].P[0].w; #define il_pos 0 diff --git a/OpenCL/m15700-pure.cl b/OpenCL/m15700-pure.cl index 67a3cc870..c357e6d97 100644 --- a/OpenCL/m15700-pure.cl +++ b/OpenCL/m15700-pure.cl @@ -9,6 +9,7 @@ #include M2S(INCLUDE_PATH/inc_platform.cl) #include M2S(INCLUDE_PATH/inc_common.cl) #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) +#include M2S(INCLUDE_PATH/inc_hash_scrypt.cl) #endif #define COMPARE_S M2S(INCLUDE_PATH/inc_comp_single.cl) @@ -31,273 +32,6 @@ typedef struct ethereum_scrypt } ethereum_scrypt_t; -#if defined IS_CUDA || defined IS_HIP - -inline __device__ uint4 operator & (const uint4 a, const u32 b) { return make_uint4 ((a.x & b ), (a.y & b ), (a.z & b ), (a.w & b )); } -inline __device__ uint4 operator << (const uint4 a, const u32 b) { return make_uint4 ((a.x << b ), (a.y << b ), (a.z << b ), (a.w << b )); } -inline __device__ uint4 operator >> (const uint4 a, const u32 b) { return make_uint4 ((a.x >> b ), (a.y >> b ), (a.z >> b ), (a.w >> b )); } -inline __device__ uint4 operator + (const uint4 a, const uint4 b) { return make_uint4 ((a.x + b.x), (a.y + b.y), (a.z + b.z), (a.w + b.w)); } -inline __device__ uint4 operator ^ (const uint4 a, const uint4 b) { return make_uint4 ((a.x ^ b.x), (a.y ^ b.y), (a.z ^ b.z), (a.w ^ b.w)); } -inline __device__ uint4 operator | (const uint4 a, const uint4 b) { return make_uint4 ((a.x | b.x), (a.y | b.y), (a.z | b.z), (a.w | b.w)); } -inline __device__ void operator ^= ( uint4 &a, const uint4 b) { a.x ^= b.x; a.y ^= b.y; a.z ^= b.z; a.w ^= b.w; } - -inline __device__ uint4 rotate (const uint4 a, const int n) -{ - return ((a << n) | ((a >> (32 - n)))); -} - -#endif - -DECLSPEC uint4 hc_swap32_4 (uint4 v) -{ - return (rotate ((v & 0x00FF00FF), 24u) | rotate ((v & 0xFF00FF00), 8u)); -} - -#define GET_SCRYPT_CNT(r,p) (2 * (r) * 16 * (p)) -#define GET_SMIX_CNT(r,N) (2 * (r) * 16 * (N)) -#define GET_STATE_CNT(r) (2 * (r) * 16) - -#define SCRYPT_CNT GET_SCRYPT_CNT (SCRYPT_R, SCRYPT_P) -#define SCRYPT_CNT4 (SCRYPT_CNT / 4) -#define STATE_CNT GET_STATE_CNT (SCRYPT_R) -#define STATE_CNT4 (STATE_CNT / 4) - -#define Coord(xd4,y,z) (((xd4) * ySIZE * zSIZE) + ((y) * zSIZE) + (z)) -#define CO Coord(xd4,y,z) - - -DECLSPEC void salsa_r (PRIVATE_AS u32 *TI) -{ - u32 x[16]; - - for (int j = 0; j < 16; j++) x[j] = TI[STATE_CNT - 16 + j]; - - for (int i = 0; i < STATE_CNT; i += 16) - { - for (int j = 0; j < 16; j++) - { - x[j] ^= TI[i + j]; - } - - for (int j = 0; j < 16; j++) - { - TI[i + j] = x[j]; - } - - for (int r = 0; r < 4; r++) - { - u32 t0, t1, t2, t3; - - t0 = x[ 0] + x[12]; - t1 = x[ 1] + x[13]; - t2 = x[ 2] + x[14]; - t3 = x[ 3] + x[15]; - x[ 4] ^= hc_rotl32_S (t0, 7); - x[ 5] ^= hc_rotl32_S (t1, 7); - x[ 6] ^= hc_rotl32_S (t2, 7); - x[ 7] ^= hc_rotl32_S (t3, 7); - - t0 = x[ 4] + x[ 0]; - t1 = x[ 5] + x[ 1]; - t2 = x[ 6] + x[ 2]; - t3 = x[ 7] + x[ 3]; - x[ 8] ^= hc_rotl32_S (t0, 9); - x[ 9] ^= hc_rotl32_S (t1, 9); - x[10] ^= hc_rotl32_S (t2, 9); - x[11] ^= hc_rotl32_S (t3, 9); - - t0 = x[ 8] + x[ 4]; - t1 = x[ 9] + x[ 5]; - t2 = x[10] + x[ 6]; - t3 = x[11] + x[ 7]; - x[12] ^= hc_rotl32_S (t0, 13); - x[13] ^= hc_rotl32_S (t1, 13); - x[14] ^= hc_rotl32_S (t2, 13); - x[15] ^= hc_rotl32_S (t3, 13); - - t0 = x[12] + x[ 8]; - t1 = x[13] + x[ 9]; - t2 = x[14] + x[10]; - t3 = x[15] + x[11]; - x[ 0] ^= hc_rotl32_S (t0, 18); - x[ 1] ^= hc_rotl32_S (t1, 18); - x[ 2] ^= hc_rotl32_S (t2, 18); - x[ 3] ^= hc_rotl32_S (t3, 18); - - t0 = x[ 4]; x[ 4] = x[ 7]; x[ 7] = x[ 6]; x[ 6] = x[ 5]; x[ 5] = t0; - t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; - t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; - t0 = x[12]; x[12] = x[13]; x[13] = x[14]; x[14] = x[15]; x[15] = t0; - - t0 = x[ 0] + x[ 4]; - t1 = x[ 1] + x[ 5]; - t2 = x[ 2] + x[ 6]; - t3 = x[ 3] + x[ 7]; - x[12] ^= hc_rotl32_S (t0, 7); - x[13] ^= hc_rotl32_S (t1, 7); - x[14] ^= hc_rotl32_S (t2, 7); - x[15] ^= hc_rotl32_S (t3, 7); - - t0 = x[12] + x[ 0]; - t1 = x[13] + x[ 1]; - t2 = x[14] + x[ 2]; - t3 = x[15] + x[ 3]; - x[ 8] ^= hc_rotl32_S (t0, 9); - x[ 9] ^= hc_rotl32_S (t1, 9); - x[10] ^= hc_rotl32_S (t2, 9); - x[11] ^= hc_rotl32_S (t3, 9); - - t0 = x[ 8] + x[12]; - t1 = x[ 9] + x[13]; - t2 = x[10] + x[14]; - t3 = x[11] + x[15]; - x[ 4] ^= hc_rotl32_S (t0, 13); - x[ 5] ^= hc_rotl32_S (t1, 13); - x[ 6] ^= hc_rotl32_S (t2, 13); - x[ 7] ^= hc_rotl32_S (t3, 13); - - t0 = x[ 4] + x[ 8]; - t1 = x[ 5] + x[ 9]; - t2 = x[ 6] + x[10]; - t3 = x[ 7] + x[11]; - x[ 0] ^= hc_rotl32_S (t0, 18); - x[ 1] ^= hc_rotl32_S (t1, 18); - x[ 2] ^= hc_rotl32_S (t2, 18); - x[ 3] ^= hc_rotl32_S (t3, 18); - - t0 = x[ 4]; x[ 4] = x[ 5]; x[ 5] = x[ 6]; x[ 6] = x[ 7]; x[ 7] = t0; - t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; - t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; - t0 = x[15]; x[15] = x[14]; x[14] = x[13]; x[13] = x[12]; x[12] = t0; - } - - for (int j = 0; j < 16; j++) - { - x[j] += TI[i + j]; - } - - for (int j = 0; j < 16; j++) - { - TI[i + j] = x[j]; - } - } - - #if SCRYPT_R > 1 - - u32 TT[STATE_CNT / 2]; - - for (int dst_off = 0, src_off = 16; src_off < STATE_CNT; dst_off += 16, src_off += 32) - { - for (int j = 0; j < 16; j++) TT[dst_off + j] = TI[src_off + j]; - } - - for (int dst_off = 16, src_off = 32; src_off < STATE_CNT; dst_off += 16, src_off += 32) - { - for (int j = 0; j < 16; j++) TI[dst_off + j] = TI[src_off + j]; - } - - for (int dst_off = STATE_CNT / 2, src_off = 0; dst_off < STATE_CNT; dst_off += 16, src_off += 16) - { - for (int j = 0; j < 16; j++) TI[dst_off + j] = TT[src_off + j]; - } - - #endif -} - -DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) -{ - const u32 ySIZE = SCRYPT_N / SCRYPT_TMTO; - const u32 zSIZE = STATE_CNT4; - - const u32 x = (u32) gid; - - const u32 xd4 = x / 4; - const u32 xm4 = x & 3; - - GLOBAL_AS uint4 *V; - - switch (xm4) - { - case 0: V = V0; break; - case 1: V = V1; break; - case 2: V = V2; break; - case 3: V = V3; break; - } - - #if SCRYPT_R > 1 - - uint4 TT[STATE_CNT4]; - - for (int z = 0; z < zSIZE; z++) TT[z] = X[z]; - - for (int dst_off = 8, src_off = 4; dst_off < zSIZE; dst_off += 8, src_off += 4) - { - X[dst_off + 0] = TT[src_off + 0]; - X[dst_off + 1] = TT[src_off + 1]; - X[dst_off + 2] = TT[src_off + 2]; - X[dst_off + 3] = TT[src_off + 3]; - } - - for (int dst_off = 4, src_off = zSIZE / 2; dst_off < zSIZE; dst_off += 8, src_off += 4) - { - X[dst_off + 0] = TT[src_off + 0]; - X[dst_off + 1] = TT[src_off + 1]; - X[dst_off + 2] = TT[src_off + 2]; - X[dst_off + 3] = TT[src_off + 3]; - } - - #endif - - for (u32 y = 0; y < ySIZE; y++) - { - for (u32 z = 0; z < zSIZE; z++) V[CO] = X[z]; - - for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r ((PRIVATE_AS u32 *) X); - } -} - -DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) -{ - const u32 ySIZE = SCRYPT_N / SCRYPT_TMTO; - const u32 zSIZE = STATE_CNT4; - - const u32 x = (u32) gid; - - const u32 xd4 = x / 4; - const u32 xm4 = x & 3; - - GLOBAL_AS uint4 *V; - - switch (xm4) - { - case 0: V = V0; break; - case 1: V = V1; break; - case 2: V = V2; break; - case 3: V = V3; break; - } - - // note: fixed 1024 iterations = forced -u 1024 - - for (u32 N_pos = 0; N_pos < 1024; N_pos++) - { - const u32 k = X[zSIZE - 4].x & (SCRYPT_N - 1); - - const u32 y = k / SCRYPT_TMTO; - - const u32 km = k - (y * SCRYPT_TMTO); - - uint4 T[STATE_CNT4]; - - for (u32 z = 0; z < zSIZE; z++) T[z] = V[CO]; - - for (u32 i = 0; i < km; i++) salsa_r ((PRIVATE_AS u32 *) T); - - for (u32 z = 0; z < zSIZE; z++) X[z] ^= T[z]; - - salsa_r ((PRIVATE_AS u32 *) X); - } -} - #ifndef KECCAK_ROUNDS #define KECCAK_ROUNDS 24 #endif @@ -429,135 +163,33 @@ DECLSPEC void keccak_transform_S (PRIVATE_AS u64 *st) KERNEL_FQ void HC_ATTR_SEQ m15700_init (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, ethereum_scrypt_t)) { - /** - * base - */ - const u64 gid = get_global_id (0); if (gid >= GID_CNT) return; - sha256_hmac_ctx_t sha256_hmac_ctx; + scrypt_pbkdf2 (pws[gid].i, pws[gid].pw_len, salt_bufs[SALT_POS_HOST].salt_buf, salt_bufs[SALT_POS_HOST].salt_len, tmps[gid].P, SCRYPT_CNT * 4); - sha256_hmac_init_global_swap (&sha256_hmac_ctx, pws[gid].i, pws[gid].pw_len); - - sha256_hmac_update_global_swap (&sha256_hmac_ctx, salt_bufs[SALT_POS_HOST].salt_buf, salt_bufs[SALT_POS_HOST].salt_len); - - for (u32 i = 0, j = 1, k = 0; i < SCRYPT_CNT; i += 8, j += 1, k += 2) - { - sha256_hmac_ctx_t sha256_hmac_ctx2 = sha256_hmac_ctx; - - u32 w0[4]; - u32 w1[4]; - u32 w2[4]; - u32 w3[4]; - - w0[0] = j; - w0[1] = 0; - w0[2] = 0; - w0[3] = 0; - w1[0] = 0; - w1[1] = 0; - w1[2] = 0; - w1[3] = 0; - w2[0] = 0; - w2[1] = 0; - w2[2] = 0; - w2[3] = 0; - w3[0] = 0; - w3[1] = 0; - w3[2] = 0; - w3[3] = 0; - - sha256_hmac_update_64 (&sha256_hmac_ctx2, w0, w1, w2, w3, 4); - - sha256_hmac_final (&sha256_hmac_ctx2); - - u32 digest[8]; - - digest[0] = sha256_hmac_ctx2.opad.h[0]; - digest[1] = sha256_hmac_ctx2.opad.h[1]; - digest[2] = sha256_hmac_ctx2.opad.h[2]; - digest[3] = sha256_hmac_ctx2.opad.h[3]; - digest[4] = sha256_hmac_ctx2.opad.h[4]; - digest[5] = sha256_hmac_ctx2.opad.h[5]; - digest[6] = sha256_hmac_ctx2.opad.h[6]; - digest[7] = sha256_hmac_ctx2.opad.h[7]; - - #if defined IS_CUDA || defined IS_HIP - const uint4 tmp0 = make_uint4 (digest[0], digest[1], digest[2], digest[3]); - const uint4 tmp1 = make_uint4 (digest[4], digest[5], digest[6], digest[7]); - #elif defined IS_METAL - const uint4 tmp0 = uint4 (digest[0], digest[1], digest[2], digest[3]); - const uint4 tmp1 = uint4 (digest[4], digest[5], digest[6], digest[7]); - #else - const uint4 tmp0 = (uint4) (digest[0], digest[1], digest[2], digest[3]); - const uint4 tmp1 = (uint4) (digest[4], digest[5], digest[6], digest[7]); - #endif - - tmps[gid].P[k + 0] = tmp0; - tmps[gid].P[k + 1] = tmp1; - } - - for (u32 l = 0; l < SCRYPT_CNT4; l += 4) - { - uint4 T[4]; - - T[0] = tmps[gid].P[l + 0]; - T[1] = tmps[gid].P[l + 1]; - T[2] = tmps[gid].P[l + 2]; - T[3] = tmps[gid].P[l + 3]; - - T[0] = hc_swap32_4 (T[0]); - T[1] = hc_swap32_4 (T[1]); - T[2] = hc_swap32_4 (T[2]); - T[3] = hc_swap32_4 (T[3]); - - uint4 X[4]; - - #if defined IS_CUDA || defined IS_HIP - X[0] = make_uint4 (T[0].x, T[1].y, T[2].z, T[3].w); - X[1] = make_uint4 (T[1].x, T[2].y, T[3].z, T[0].w); - X[2] = make_uint4 (T[2].x, T[3].y, T[0].z, T[1].w); - X[3] = make_uint4 (T[3].x, T[0].y, T[1].z, T[2].w); - #elif defined IS_METAL - X[0] = uint4 (T[0].x, T[1].y, T[2].z, T[3].w); - X[1] = uint4 (T[1].x, T[2].y, T[3].z, T[0].w); - X[2] = uint4 (T[2].x, T[3].y, T[0].z, T[1].w); - X[3] = uint4 (T[3].x, T[0].y, T[1].z, T[2].w); - #else - X[0] = (uint4) (T[0].x, T[1].y, T[2].z, T[3].w); - X[1] = (uint4) (T[1].x, T[2].y, T[3].z, T[0].w); - X[2] = (uint4) (T[2].x, T[3].y, T[0].z, T[1].w); - X[3] = (uint4) (T[3].x, T[0].y, T[1].z, T[2].w); - #endif - - tmps[gid].P[l + 0] = X[0]; - tmps[gid].P[l + 1] = X[1]; - tmps[gid].P[l + 2] = X[2]; - tmps[gid].P[l + 3] = X[3]; - } + scrypt_blockmix_in (tmps[gid].P, SCRYPT_CNT * 4); } KERNEL_FQ void HC_ATTR_SEQ m15700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) { - /** - * base - */ - const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); if (gid >= GID_CNT) return; - // SCRYPT part, init V - GLOBAL_AS uint4 *d_scrypt0_buf = (GLOBAL_AS uint4 *) d_extra0_buf; GLOBAL_AS uint4 *d_scrypt1_buf = (GLOBAL_AS uint4 *) d_extra1_buf; GLOBAL_AS uint4 *d_scrypt2_buf = (GLOBAL_AS uint4 *) d_extra2_buf; GLOBAL_AS uint4 *d_scrypt3_buf = (GLOBAL_AS uint4 *) d_extra3_buf; + #ifdef IS_HIP + LOCAL_VK uint4 X_s[MAX_THREADS_PER_BLOCK][STATE_CNT4]; + LOCAL_AS uint4 *X = X_s[lid]; + #else uint4 X[STATE_CNT4]; + #endif const u32 P_offset = SALT_REPEAT * STATE_CNT4; @@ -584,114 +216,33 @@ KERNEL_FQ void HC_ATTR_SEQ m15700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) uint4 X[STATE_CNT4]; + #ifdef IS_HIP + LOCAL_VK uint4 T_s[MAX_THREADS_PER_BLOCK][STATE_CNT4]; + LOCAL_AS uint4 *T = T_s[lid]; + #else + uint4 T[STATE_CNT4]; + #endif + const u32 P_offset = SALT_REPEAT * STATE_CNT4; GLOBAL_AS uint4 *P = tmps[gid].P + P_offset; for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - scrypt_smix_loop (X, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid); + scrypt_smix_loop (X, T, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid); for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } KERNEL_FQ void HC_ATTR_SEQ m15700_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, ethereum_scrypt_t)) { - /** - * base - */ - const u64 gid = get_global_id (0); - const u64 lid = get_local_id (0); if (gid >= GID_CNT) return; - /** - * 2nd pbkdf2, creates B - */ + scrypt_blockmix_out (tmps[gid].P, SCRYPT_CNT * 4); - u32 w0[4]; - u32 w1[4]; - u32 w2[4]; - u32 w3[4]; - - sha256_hmac_ctx_t ctx; - - sha256_hmac_init_global_swap (&ctx, pws[gid].i, pws[gid].pw_len); - - for (u32 l = 0; l < SCRYPT_CNT4; l += 4) - { - uint4 X[4]; - - X[0] = tmps[gid].P[l + 0]; - X[1] = tmps[gid].P[l + 1]; - X[2] = tmps[gid].P[l + 2]; - X[3] = tmps[gid].P[l + 3]; - - uint4 T[4]; - - #if defined IS_CUDA || defined IS_HIP - T[0] = make_uint4 (X[0].x, X[3].y, X[2].z, X[1].w); - T[1] = make_uint4 (X[1].x, X[0].y, X[3].z, X[2].w); - T[2] = make_uint4 (X[2].x, X[1].y, X[0].z, X[3].w); - T[3] = make_uint4 (X[3].x, X[2].y, X[1].z, X[0].w); - #elif defined IS_METAL - T[0] = uint4 (X[0].x, X[3].y, X[2].z, X[1].w); - T[1] = uint4 (X[1].x, X[0].y, X[3].z, X[2].w); - T[2] = uint4 (X[2].x, X[1].y, X[0].z, X[3].w); - T[3] = uint4 (X[3].x, X[2].y, X[1].z, X[0].w); - #else - T[0] = (uint4) (X[0].x, X[3].y, X[2].z, X[1].w); - T[1] = (uint4) (X[1].x, X[0].y, X[3].z, X[2].w); - T[2] = (uint4) (X[2].x, X[1].y, X[0].z, X[3].w); - T[3] = (uint4) (X[3].x, X[2].y, X[1].z, X[0].w); - #endif - - T[0] = hc_swap32_4 (T[0]); - T[1] = hc_swap32_4 (T[1]); - T[2] = hc_swap32_4 (T[2]); - T[3] = hc_swap32_4 (T[3]); - - w0[0] = T[0].x; - w0[1] = T[0].y; - w0[2] = T[0].z; - w0[3] = T[0].w; - w1[0] = T[1].x; - w1[1] = T[1].y; - w1[2] = T[1].z; - w1[3] = T[1].w; - w2[0] = T[2].x; - w2[1] = T[2].y; - w2[2] = T[2].z; - w2[3] = T[2].w; - w3[0] = T[3].x; - w3[1] = T[3].y; - w3[2] = T[3].z; - w3[3] = T[3].w; - - sha256_hmac_update_64 (&ctx, w0, w1, w2, w3, 64); - } - - w0[0] = 1; - w0[1] = 0; - w0[2] = 0; - w0[3] = 0; - w1[0] = 0; - w1[1] = 0; - w1[2] = 0; - w1[3] = 0; - w2[0] = 0; - w2[1] = 0; - w2[2] = 0; - w2[3] = 0; - w3[0] = 0; - w3[1] = 0; - w3[2] = 0; - w3[3] = 0; - - sha256_hmac_update_64 (&ctx, w0, w1, w2, w3, 4); - - sha256_hmac_final (&ctx); + scrypt_pbkdf2 (pws[gid].i, pws[gid].pw_len, (GLOBAL_AS const u32 *) tmps[gid].P, SCRYPT_CNT * 4, tmps[gid].P, 32); /** * keccak @@ -710,10 +261,10 @@ KERNEL_FQ void HC_ATTR_SEQ m15700_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, ethe u32 key[4]; - key[0] = hc_swap32_S (ctx.opad.h[4]); - key[1] = hc_swap32_S (ctx.opad.h[5]); - key[2] = hc_swap32_S (ctx.opad.h[6]); - key[3] = hc_swap32_S (ctx.opad.h[7]); + key[0] = tmps[gid].P[1].x; + key[1] = tmps[gid].P[1].y; + key[2] = tmps[gid].P[1].z; + key[3] = tmps[gid].P[1].w; u64 st[25]; diff --git a/OpenCL/m22700-pure.cl b/OpenCL/m22700-pure.cl index 0d024b53e..2ac914cdd 100644 --- a/OpenCL/m22700-pure.cl +++ b/OpenCL/m22700-pure.cl @@ -9,22 +9,13 @@ #include M2S(INCLUDE_PATH/inc_platform.cl) #include M2S(INCLUDE_PATH/inc_common.cl) #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) +#include M2S(INCLUDE_PATH/inc_hash_scrypt.cl) #include M2S(INCLUDE_PATH/inc_cipher_aes.cl) #endif #define COMPARE_S M2S(INCLUDE_PATH/inc_comp_single.cl) #define COMPARE_M M2S(INCLUDE_PATH/inc_comp_multi.cl) -// fixed MultiBit salt (not a bug) - -#define MULTIBIT_S0 0x35510380 -#define MULTIBIT_S1 0x75a3b0c5 - -#define MULTIBIT_IV0 0x1f3944a3 -#define MULTIBIT_IV1 0xb3118353 -#define MULTIBIT_IV2 0x16865429 -#define MULTIBIT_IV3 0x3e7289c4 - typedef struct { #ifndef SCRYPT_TMP_ELEM @@ -35,6 +26,16 @@ typedef struct } scrypt_tmp_t; +// fixed MultiBit salt (not a bug) + +#define MULTIBIT_S0 0x35510380 +#define MULTIBIT_S1 0x75a3b0c5 + +#define MULTIBIT_IV0 0x1f3944a3 +#define MULTIBIT_IV1 0xb3118353 +#define MULTIBIT_IV2 0x16865429 +#define MULTIBIT_IV3 0x3e7289c4 + DECLSPEC int is_valid_bitcoinj_8 (const u8 v) { // .abcdefghijklmnopqrstuvwxyz @@ -72,255 +73,8 @@ DECLSPEC int is_valid_bitcoinj (PRIVATE_AS const u32 *w) return 1; } -#if defined IS_CUDA || defined IS_HIP - -inline __device__ uint4 operator & (const uint4 a, const u32 b) { return make_uint4 ((a.x & b ), (a.y & b ), (a.z & b ), (a.w & b )); } -inline __device__ uint4 operator << (const uint4 a, const u32 b) { return make_uint4 ((a.x << b ), (a.y << b ), (a.z << b ), (a.w << b )); } -inline __device__ uint4 operator >> (const uint4 a, const u32 b) { return make_uint4 ((a.x >> b ), (a.y >> b ), (a.z >> b ), (a.w >> b )); } -inline __device__ uint4 operator + (const uint4 a, const uint4 b) { return make_uint4 ((a.x + b.x), (a.y + b.y), (a.z + b.z), (a.w + b.w)); } -inline __device__ uint4 operator ^ (const uint4 a, const uint4 b) { return make_uint4 ((a.x ^ b.x), (a.y ^ b.y), (a.z ^ b.z), (a.w ^ b.w)); } -inline __device__ uint4 operator | (const uint4 a, const uint4 b) { return make_uint4 ((a.x | b.x), (a.y | b.y), (a.z | b.z), (a.w | b.w)); } -inline __device__ void operator ^= ( uint4 &a, const uint4 b) { a.x ^= b.x; a.y ^= b.y; a.z ^= b.z; a.w ^= b.w; } - -inline __device__ uint4 rotate (const uint4 a, const int n) -{ - return ((a << n) | ((a >> (32 - n)))); -} - -#endif - -DECLSPEC uint4 hc_swap32_4 (uint4 v) -{ - return (rotate ((v & 0x00FF00FF), 24u) | rotate ((v & 0xFF00FF00), 8u)); -} - -#define GET_SCRYPT_CNT(r,p) (2 * (r) * 16 * (p)) -#define GET_SMIX_CNT(r,N) (2 * (r) * 16 * (N)) -#define GET_STATE_CNT(r) (2 * (r) * 16) - -#define SCRYPT_CNT GET_SCRYPT_CNT (SCRYPT_R, SCRYPT_P) -#define SCRYPT_CNT4 (SCRYPT_CNT / 4) -#define STATE_CNT GET_STATE_CNT (SCRYPT_R) -#define STATE_CNT4 (STATE_CNT / 4) - -#define Coord(xd4,y,z) (((xd4) * ySIZE * zSIZE) + ((y) * zSIZE) + (z)) -#define CO Coord(xd4,y,z) - -DECLSPEC void salsa_r (PRIVATE_AS u32 *TI) -{ - u32 x[16]; - - for (int j = 0; j < 16; j++) x[j] = TI[STATE_CNT - 16 + j]; - - for (int i = 0; i < STATE_CNT; i += 16) - { - for (int j = 0; j < 16; j++) - { - x[j] ^= TI[i + j]; - } - - for (int j = 0; j < 16; j++) - { - TI[i + j] = x[j]; - } - - for (int r = 0; r < 4; r++) - { - u32 t0, t1, t2, t3; - - t0 = x[ 0] + x[12]; - t1 = x[ 1] + x[13]; - t2 = x[ 2] + x[14]; - t3 = x[ 3] + x[15]; - x[ 4] ^= hc_rotl32_S (t0, 7); - x[ 5] ^= hc_rotl32_S (t1, 7); - x[ 6] ^= hc_rotl32_S (t2, 7); - x[ 7] ^= hc_rotl32_S (t3, 7); - - t0 = x[ 4] + x[ 0]; - t1 = x[ 5] + x[ 1]; - t2 = x[ 6] + x[ 2]; - t3 = x[ 7] + x[ 3]; - x[ 8] ^= hc_rotl32_S (t0, 9); - x[ 9] ^= hc_rotl32_S (t1, 9); - x[10] ^= hc_rotl32_S (t2, 9); - x[11] ^= hc_rotl32_S (t3, 9); - - t0 = x[ 8] + x[ 4]; - t1 = x[ 9] + x[ 5]; - t2 = x[10] + x[ 6]; - t3 = x[11] + x[ 7]; - x[12] ^= hc_rotl32_S (t0, 13); - x[13] ^= hc_rotl32_S (t1, 13); - x[14] ^= hc_rotl32_S (t2, 13); - x[15] ^= hc_rotl32_S (t3, 13); - - t0 = x[12] + x[ 8]; - t1 = x[13] + x[ 9]; - t2 = x[14] + x[10]; - t3 = x[15] + x[11]; - x[ 0] ^= hc_rotl32_S (t0, 18); - x[ 1] ^= hc_rotl32_S (t1, 18); - x[ 2] ^= hc_rotl32_S (t2, 18); - x[ 3] ^= hc_rotl32_S (t3, 18); - - t0 = x[ 4]; x[ 4] = x[ 7]; x[ 7] = x[ 6]; x[ 6] = x[ 5]; x[ 5] = t0; - t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; - t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; - t0 = x[12]; x[12] = x[13]; x[13] = x[14]; x[14] = x[15]; x[15] = t0; - - t0 = x[ 0] + x[ 4]; - t1 = x[ 1] + x[ 5]; - t2 = x[ 2] + x[ 6]; - t3 = x[ 3] + x[ 7]; - x[12] ^= hc_rotl32_S (t0, 7); - x[13] ^= hc_rotl32_S (t1, 7); - x[14] ^= hc_rotl32_S (t2, 7); - x[15] ^= hc_rotl32_S (t3, 7); - - t0 = x[12] + x[ 0]; - t1 = x[13] + x[ 1]; - t2 = x[14] + x[ 2]; - t3 = x[15] + x[ 3]; - x[ 8] ^= hc_rotl32_S (t0, 9); - x[ 9] ^= hc_rotl32_S (t1, 9); - x[10] ^= hc_rotl32_S (t2, 9); - x[11] ^= hc_rotl32_S (t3, 9); - - t0 = x[ 8] + x[12]; - t1 = x[ 9] + x[13]; - t2 = x[10] + x[14]; - t3 = x[11] + x[15]; - x[ 4] ^= hc_rotl32_S (t0, 13); - x[ 5] ^= hc_rotl32_S (t1, 13); - x[ 6] ^= hc_rotl32_S (t2, 13); - x[ 7] ^= hc_rotl32_S (t3, 13); - - t0 = x[ 4] + x[ 8]; - t1 = x[ 5] + x[ 9]; - t2 = x[ 6] + x[10]; - t3 = x[ 7] + x[11]; - x[ 0] ^= hc_rotl32_S (t0, 18); - x[ 1] ^= hc_rotl32_S (t1, 18); - x[ 2] ^= hc_rotl32_S (t2, 18); - x[ 3] ^= hc_rotl32_S (t3, 18); - - t0 = x[ 4]; x[ 4] = x[ 5]; x[ 5] = x[ 6]; x[ 6] = x[ 7]; x[ 7] = t0; - t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; - t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; - t0 = x[15]; x[15] = x[14]; x[14] = x[13]; x[13] = x[12]; x[12] = t0; - } - - for (int j = 0; j < 16; j++) - { - x[j] += TI[i + j]; - } - - for (int j = 0; j < 16; j++) - { - TI[i + j] = x[j]; - } - } - - #if SCRYPT_R > 1 - - u32 TT[STATE_CNT / 2]; - - for (int dst_off = 0, src_off = 16; src_off < STATE_CNT; dst_off += 16, src_off += 32) - { - for (int j = 0; j < 16; j++) TT[dst_off + j] = TI[src_off + j]; - } - - for (int dst_off = 16, src_off = 32; src_off < STATE_CNT; dst_off += 16, src_off += 32) - { - for (int j = 0; j < 16; j++) TI[dst_off + j] = TI[src_off + j]; - } - - for (int dst_off = STATE_CNT / 2, src_off = 0; dst_off < STATE_CNT; dst_off += 16, src_off += 16) - { - for (int j = 0; j < 16; j++) TI[dst_off + j] = TT[src_off + j]; - } - - #endif - -} - -DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) -{ - const u32 ySIZE = SCRYPT_N / SCRYPT_TMTO; - const u32 zSIZE = STATE_CNT4; - - const u32 x = (u32) gid; - - const u32 xd4 = x / 4; - const u32 xm4 = x & 3; - - GLOBAL_AS uint4 *V; - - switch (xm4) - { - case 0: V = V0; break; - case 1: V = V1; break; - case 2: V = V2; break; - case 3: V = V3; break; - } - - for (u32 y = 0; y < ySIZE; y++) - { - for (u32 z = 0; z < zSIZE; z++) V[CO] = X[z]; - - for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r ((PRIVATE_AS u32 *) X); - } -} - -DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) -{ - const u32 ySIZE = SCRYPT_N / SCRYPT_TMTO; - const u32 zSIZE = STATE_CNT4; - - const u32 x = (u32) gid; - - const u32 xd4 = x / 4; - const u32 xm4 = x & 3; - - GLOBAL_AS uint4 *V; - - switch (xm4) - { - case 0: V = V0; break; - case 1: V = V1; break; - case 2: V = V2; break; - case 3: V = V3; break; - } - - // note: fixed 1024 iterations = forced -u 1024 - - for (u32 N_pos = 0; N_pos < 1024; N_pos++) - { - const u32 k = X[zSIZE - 4].x & (SCRYPT_N - 1); - - const u32 y = k / SCRYPT_TMTO; - - const u32 km = k - (y * SCRYPT_TMTO); - - uint4 T[STATE_CNT4]; - - for (u32 z = 0; z < zSIZE; z++) T[z] = V[CO]; - - for (u32 i = 0; i < km; i++) salsa_r ((PRIVATE_AS u32 *) T); - - for (u32 z = 0; z < zSIZE; z++) X[z] ^= T[z]; - - salsa_r ((PRIVATE_AS u32 *) X); - } -} - KERNEL_FQ void HC_ATTR_SEQ m22700_init (KERN_ATTR_TMPS (scrypt_tmp_t)) { - /** - * base - */ - const u64 gid = get_global_id (0); if (gid >= GID_CNT) return; @@ -356,121 +110,29 @@ KERNEL_FQ void HC_ATTR_SEQ m22700_init (KERN_ATTR_TMPS (scrypt_tmp_t)) sha256_hmac_update_64 (&sha256_hmac_ctx, x0, x1, x2, x3, 8); - for (u32 i = 0, j = 1, k = 0; i < SCRYPT_CNT; i += 8, j += 1, k += 2) - { - sha256_hmac_ctx_t sha256_hmac_ctx2 = sha256_hmac_ctx; + scrypt_pbkdf2_body (&sha256_hmac_ctx, tmps[gid].P, SCRYPT_CNT * 4); - u32 w0[4]; - u32 w1[4]; - u32 w2[4]; - u32 w3[4]; - - w0[0] = j; - w0[1] = 0; - w0[2] = 0; - w0[3] = 0; - w1[0] = 0; - w1[1] = 0; - w1[2] = 0; - w1[3] = 0; - w2[0] = 0; - w2[1] = 0; - w2[2] = 0; - w2[3] = 0; - w3[0] = 0; - w3[1] = 0; - w3[2] = 0; - w3[3] = 0; - - sha256_hmac_update_64 (&sha256_hmac_ctx2, w0, w1, w2, w3, 4); - - sha256_hmac_final (&sha256_hmac_ctx2); - - u32 digest[8]; - - digest[0] = sha256_hmac_ctx2.opad.h[0]; - digest[1] = sha256_hmac_ctx2.opad.h[1]; - digest[2] = sha256_hmac_ctx2.opad.h[2]; - digest[3] = sha256_hmac_ctx2.opad.h[3]; - digest[4] = sha256_hmac_ctx2.opad.h[4]; - digest[5] = sha256_hmac_ctx2.opad.h[5]; - digest[6] = sha256_hmac_ctx2.opad.h[6]; - digest[7] = sha256_hmac_ctx2.opad.h[7]; - - #if defined IS_CUDA || defined IS_HIP - const uint4 tmp0 = make_uint4 (digest[0], digest[1], digest[2], digest[3]); - const uint4 tmp1 = make_uint4 (digest[4], digest[5], digest[6], digest[7]); - #elif defined IS_METAL - const uint4 tmp0 = uint4 (digest[0], digest[1], digest[2], digest[3]); - const uint4 tmp1 = uint4 (digest[4], digest[5], digest[6], digest[7]); - #else - const uint4 tmp0 = (uint4) (digest[0], digest[1], digest[2], digest[3]); - const uint4 tmp1 = (uint4) (digest[4], digest[5], digest[6], digest[7]); - #endif - - tmps[gid].P[k + 0] = tmp0; - tmps[gid].P[k + 1] = tmp1; - } - - for (u32 l = 0; l < SCRYPT_CNT4; l += 4) - { - uint4 T[4]; - - T[0] = tmps[gid].P[l + 0]; - T[1] = tmps[gid].P[l + 1]; - T[2] = tmps[gid].P[l + 2]; - T[3] = tmps[gid].P[l + 3]; - - T[0] = hc_swap32_4 (T[0]); - T[1] = hc_swap32_4 (T[1]); - T[2] = hc_swap32_4 (T[2]); - T[3] = hc_swap32_4 (T[3]); - - uint4 X[4]; - - #if defined IS_CUDA || defined IS_HIP - X[0] = make_uint4 (T[0].x, T[1].y, T[2].z, T[3].w); - X[1] = make_uint4 (T[1].x, T[2].y, T[3].z, T[0].w); - X[2] = make_uint4 (T[2].x, T[3].y, T[0].z, T[1].w); - X[3] = make_uint4 (T[3].x, T[0].y, T[1].z, T[2].w); - #elif defined IS_METAL - X[0] = uint4 (T[0].x, T[1].y, T[2].z, T[3].w); - X[1] = uint4 (T[1].x, T[2].y, T[3].z, T[0].w); - X[2] = uint4 (T[2].x, T[3].y, T[0].z, T[1].w); - X[3] = uint4 (T[3].x, T[0].y, T[1].z, T[2].w); - #else - X[0] = (uint4) (T[0].x, T[1].y, T[2].z, T[3].w); - X[1] = (uint4) (T[1].x, T[2].y, T[3].z, T[0].w); - X[2] = (uint4) (T[2].x, T[3].y, T[0].z, T[1].w); - X[3] = (uint4) (T[3].x, T[0].y, T[1].z, T[2].w); - #endif - - tmps[gid].P[l + 0] = X[0]; - tmps[gid].P[l + 1] = X[1]; - tmps[gid].P[l + 2] = X[2]; - tmps[gid].P[l + 3] = X[3]; - } + scrypt_blockmix_in (tmps[gid].P, SCRYPT_CNT * 4); } KERNEL_FQ void HC_ATTR_SEQ m22700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) { - /** - * base - */ - const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); if (gid >= GID_CNT) return; - // SCRYPT part, init V - GLOBAL_AS uint4 *d_scrypt0_buf = (GLOBAL_AS uint4 *) d_extra0_buf; GLOBAL_AS uint4 *d_scrypt1_buf = (GLOBAL_AS uint4 *) d_extra1_buf; GLOBAL_AS uint4 *d_scrypt2_buf = (GLOBAL_AS uint4 *) d_extra2_buf; GLOBAL_AS uint4 *d_scrypt3_buf = (GLOBAL_AS uint4 *) d_extra3_buf; + #ifdef IS_HIP + LOCAL_VK uint4 X_s[MAX_THREADS_PER_BLOCK][STATE_CNT4]; + LOCAL_AS uint4 *X = X_s[lid]; + #else uint4 X[STATE_CNT4]; + #endif const u32 P_offset = SALT_REPEAT * STATE_CNT4; @@ -497,13 +159,20 @@ KERNEL_FQ void HC_ATTR_SEQ m22700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) uint4 X[STATE_CNT4]; + #ifdef IS_HIP + LOCAL_VK uint4 T_s[MAX_THREADS_PER_BLOCK][STATE_CNT4]; + LOCAL_AS uint4 *T = T_s[lid]; + #else + uint4 T[STATE_CNT4]; + #endif + const u32 P_offset = SALT_REPEAT * STATE_CNT4; GLOBAL_AS uint4 *P = tmps[gid].P + P_offset; for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - scrypt_smix_loop (X, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid); + scrypt_smix_loop (X, T, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid); for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } @@ -588,107 +257,34 @@ KERNEL_FQ void HC_ATTR_SEQ m22700_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) | ((w[j] << 8) & 0xff00ff00); } + scrypt_blockmix_out (tmps[gid].P, SCRYPT_CNT * 4); + sha256_hmac_ctx_t ctx; sha256_hmac_init_swap (&ctx, w, w_len); - u32 w0[4]; - u32 w1[4]; - u32 w2[4]; - u32 w3[4]; + sha256_hmac_update_global_swap (&ctx, (GLOBAL_AS const u32 *) tmps[gid].P, SCRYPT_CNT * 4); - for (u32 l = 0; l < SCRYPT_CNT4; l += 4) - { - uint4 X[4]; - - X[0] = tmps[gid].P[l + 0]; - X[1] = tmps[gid].P[l + 1]; - X[2] = tmps[gid].P[l + 2]; - X[3] = tmps[gid].P[l + 3]; - - uint4 T[4]; - - #if defined IS_CUDA || defined IS_HIP - T[0] = make_uint4 (X[0].x, X[3].y, X[2].z, X[1].w); - T[1] = make_uint4 (X[1].x, X[0].y, X[3].z, X[2].w); - T[2] = make_uint4 (X[2].x, X[1].y, X[0].z, X[3].w); - T[3] = make_uint4 (X[3].x, X[2].y, X[1].z, X[0].w); - #elif defined IS_METAL - T[0] = uint4 (X[0].x, X[3].y, X[2].z, X[1].w); - T[1] = uint4 (X[1].x, X[0].y, X[3].z, X[2].w); - T[2] = uint4 (X[2].x, X[1].y, X[0].z, X[3].w); - T[3] = uint4 (X[3].x, X[2].y, X[1].z, X[0].w); - #else - T[0] = (uint4) (X[0].x, X[3].y, X[2].z, X[1].w); - T[1] = (uint4) (X[1].x, X[0].y, X[3].z, X[2].w); - T[2] = (uint4) (X[2].x, X[1].y, X[0].z, X[3].w); - T[3] = (uint4) (X[3].x, X[2].y, X[1].z, X[0].w); - #endif - - T[0] = hc_swap32_4 (T[0]); - T[1] = hc_swap32_4 (T[1]); - T[2] = hc_swap32_4 (T[2]); - T[3] = hc_swap32_4 (T[3]); - - w0[0] = T[0].x; - w0[1] = T[0].y; - w0[2] = T[0].z; - w0[3] = T[0].w; - w1[0] = T[1].x; - w1[1] = T[1].y; - w1[2] = T[1].z; - w1[3] = T[1].w; - w2[0] = T[2].x; - w2[1] = T[2].y; - w2[2] = T[2].z; - w2[3] = T[2].w; - w3[0] = T[3].x; - w3[1] = T[3].y; - w3[2] = T[3].z; - w3[3] = T[3].w; - - sha256_hmac_update_64 (&ctx, w0, w1, w2, w3, 64); - } - - w0[0] = 1; - w0[1] = 0; - w0[2] = 0; - w0[3] = 0; - w1[0] = 0; - w1[1] = 0; - w1[2] = 0; - w1[3] = 0; - w2[0] = 0; - w2[1] = 0; - w2[2] = 0; - w2[3] = 0; - w3[0] = 0; - w3[1] = 0; - w3[2] = 0; - w3[3] = 0; - - sha256_hmac_update_64 (&ctx, w0, w1, w2, w3, 4); - - sha256_hmac_final (&ctx); + scrypt_pbkdf2_body (&ctx, tmps[gid].P, 16); // AES256-CBC decrypt with IV from salt buffer (dynamic, alternative 1): u32 key[8]; - key[0] = ctx.opad.h[0]; - key[1] = ctx.opad.h[1]; - key[2] = ctx.opad.h[2]; - key[3] = ctx.opad.h[3]; - key[4] = ctx.opad.h[4]; - key[5] = ctx.opad.h[5]; - key[6] = ctx.opad.h[6]; - key[7] = ctx.opad.h[7]; + key[0] = tmps[gid].P[0].x; + key[1] = tmps[gid].P[0].y; + key[2] = tmps[gid].P[0].z; + key[3] = tmps[gid].P[0].w; + key[4] = tmps[gid].P[1].x; + key[5] = tmps[gid].P[1].y; + key[6] = tmps[gid].P[1].z; + key[7] = tmps[gid].P[1].w; #define KEYLEN 60 u32 ks[KEYLEN]; - AES256_set_decrypt_key (ks, key, s_te0, s_te1, s_te2, s_te3, s_td0, s_td1, s_td2, s_td3); + aes256_set_decrypt_key (ks, key, s_te0, s_te1, s_te2, s_te3, s_td0, s_td1, s_td2, s_td3); u32 iv[4]; diff --git a/OpenCL/m24000-pure.cl b/OpenCL/m24000-pure.cl index fb15c5066..d7d7ed03c 100644 --- a/OpenCL/m24000-pure.cl +++ b/OpenCL/m24000-pure.cl @@ -9,6 +9,7 @@ #include M2S(INCLUDE_PATH/inc_platform.cl) #include M2S(INCLUDE_PATH/inc_common.cl) #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) +#include M2S(INCLUDE_PATH/inc_hash_scrypt.cl) #include M2S(INCLUDE_PATH/inc_cipher_aes.cl) #include M2S(INCLUDE_PATH/inc_cipher_twofish.cl) #include M2S(INCLUDE_PATH/inc_cipher_serpent.cl) @@ -33,279 +34,6 @@ typedef struct bestcrypt_scrypt } bestcrypt_scrypt_t; -#if defined IS_CUDA || defined IS_HIP - -inline __device__ uint4 operator & (const uint4 a, const u32 b) { return make_uint4 ((a.x & b ), (a.y & b ), (a.z & b ), (a.w & b )); } -inline __device__ uint4 operator << (const uint4 a, const u32 b) { return make_uint4 ((a.x << b ), (a.y << b ), (a.z << b ), (a.w << b )); } -inline __device__ uint4 operator >> (const uint4 a, const u32 b) { return make_uint4 ((a.x >> b ), (a.y >> b ), (a.z >> b ), (a.w >> b )); } -inline __device__ uint4 operator + (const uint4 a, const uint4 b) { return make_uint4 ((a.x + b.x), (a.y + b.y), (a.z + b.z), (a.w + b.w)); } -inline __device__ uint4 operator ^ (const uint4 a, const uint4 b) { return make_uint4 ((a.x ^ b.x), (a.y ^ b.y), (a.z ^ b.z), (a.w ^ b.w)); } -inline __device__ uint4 operator | (const uint4 a, const uint4 b) { return make_uint4 ((a.x | b.x), (a.y | b.y), (a.z | b.z), (a.w | b.w)); } -inline __device__ void operator ^= ( uint4 &a, const uint4 b) { a.x ^= b.x; a.y ^= b.y; a.z ^= b.z; a.w ^= b.w; } - -inline __device__ uint4 rotate (const uint4 a, const int n) -{ - return ((a << n) | ((a >> (32 - n)))); -} - -#endif - -DECLSPEC uint4 hc_swap32_4 (uint4 v) -{ - return (rotate ((v & 0x00FF00FF), 24u) | rotate ((v & 0xFF00FF00), 8u)); -} - -#define GET_SCRYPT_CNT(r,p) (2 * (r) * 16 * (p)) -#define GET_SMIX_CNT(r,N) (2 * (r) * 16 * (N)) -#define GET_STATE_CNT(r) (2 * (r) * 16) - -#define SCRYPT_CNT GET_SCRYPT_CNT (SCRYPT_R, SCRYPT_P) -#define SCRYPT_CNT4 (SCRYPT_CNT / 4) -#define STATE_CNT GET_STATE_CNT (SCRYPT_R) -#define STATE_CNT4 (STATE_CNT / 4) - -DECLSPEC void salsa_r (PRIVATE_AS u32 *TI) -{ - u32 x[16]; - - for (int j = 0; j < 16; j++) x[j] = TI[STATE_CNT - 16 + j]; - - for (int i = 0; i < STATE_CNT; i += 16) - { - for (int j = 0; j < 16; j++) - { - x[j] ^= TI[i + j]; - } - - for (int j = 0; j < 16; j++) - { - TI[i + j] = x[j]; - } - - for (int r = 0; r < 4; r++) - { - u32 t0, t1, t2, t3; - - t0 = x[ 0] + x[12]; - t1 = x[ 1] + x[13]; - t2 = x[ 2] + x[14]; - t3 = x[ 3] + x[15]; - x[ 4] ^= hc_rotl32_S (t0, 7); - x[ 5] ^= hc_rotl32_S (t1, 7); - x[ 6] ^= hc_rotl32_S (t2, 7); - x[ 7] ^= hc_rotl32_S (t3, 7); - - t0 = x[ 4] + x[ 0]; - t1 = x[ 5] + x[ 1]; - t2 = x[ 6] + x[ 2]; - t3 = x[ 7] + x[ 3]; - x[ 8] ^= hc_rotl32_S (t0, 9); - x[ 9] ^= hc_rotl32_S (t1, 9); - x[10] ^= hc_rotl32_S (t2, 9); - x[11] ^= hc_rotl32_S (t3, 9); - - t0 = x[ 8] + x[ 4]; - t1 = x[ 9] + x[ 5]; - t2 = x[10] + x[ 6]; - t3 = x[11] + x[ 7]; - x[12] ^= hc_rotl32_S (t0, 13); - x[13] ^= hc_rotl32_S (t1, 13); - x[14] ^= hc_rotl32_S (t2, 13); - x[15] ^= hc_rotl32_S (t3, 13); - - t0 = x[12] + x[ 8]; - t1 = x[13] + x[ 9]; - t2 = x[14] + x[10]; - t3 = x[15] + x[11]; - x[ 0] ^= hc_rotl32_S (t0, 18); - x[ 1] ^= hc_rotl32_S (t1, 18); - x[ 2] ^= hc_rotl32_S (t2, 18); - x[ 3] ^= hc_rotl32_S (t3, 18); - - t0 = x[ 4]; x[ 4] = x[ 7]; x[ 7] = x[ 6]; x[ 6] = x[ 5]; x[ 5] = t0; - t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; - t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; - t0 = x[12]; x[12] = x[13]; x[13] = x[14]; x[14] = x[15]; x[15] = t0; - - t0 = x[ 0] + x[ 4]; - t1 = x[ 1] + x[ 5]; - t2 = x[ 2] + x[ 6]; - t3 = x[ 3] + x[ 7]; - x[12] ^= hc_rotl32_S (t0, 7); - x[13] ^= hc_rotl32_S (t1, 7); - x[14] ^= hc_rotl32_S (t2, 7); - x[15] ^= hc_rotl32_S (t3, 7); - - t0 = x[12] + x[ 0]; - t1 = x[13] + x[ 1]; - t2 = x[14] + x[ 2]; - t3 = x[15] + x[ 3]; - x[ 8] ^= hc_rotl32_S (t0, 9); - x[ 9] ^= hc_rotl32_S (t1, 9); - x[10] ^= hc_rotl32_S (t2, 9); - x[11] ^= hc_rotl32_S (t3, 9); - - t0 = x[ 8] + x[12]; - t1 = x[ 9] + x[13]; - t2 = x[10] + x[14]; - t3 = x[11] + x[15]; - x[ 4] ^= hc_rotl32_S (t0, 13); - x[ 5] ^= hc_rotl32_S (t1, 13); - x[ 6] ^= hc_rotl32_S (t2, 13); - x[ 7] ^= hc_rotl32_S (t3, 13); - - t0 = x[ 4] + x[ 8]; - t1 = x[ 5] + x[ 9]; - t2 = x[ 6] + x[10]; - t3 = x[ 7] + x[11]; - x[ 0] ^= hc_rotl32_S (t0, 18); - x[ 1] ^= hc_rotl32_S (t1, 18); - x[ 2] ^= hc_rotl32_S (t2, 18); - x[ 3] ^= hc_rotl32_S (t3, 18); - - t0 = x[ 4]; x[ 4] = x[ 5]; x[ 5] = x[ 6]; x[ 6] = x[ 7]; x[ 7] = t0; - t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; - t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; - t0 = x[15]; x[15] = x[14]; x[14] = x[13]; x[13] = x[12]; x[12] = t0; - } - - for (int j = 0; j < 16; j++) - { - x[j] += TI[i + j]; - } - - for (int j = 0; j < 16; j++) - { - TI[i + j] = x[j]; - } - } - - #if SCRYPT_R > 1 - - u32 TT[STATE_CNT / 2]; - - for (int dst_off = 0, src_off = 16; src_off < STATE_CNT; dst_off += 16, src_off += 32) - { - for (int j = 0; j < 16; j++) TT[dst_off + j] = TI[src_off + j]; - } - - for (int dst_off = 16, src_off = 32; src_off < STATE_CNT; dst_off += 16, src_off += 32) - { - for (int j = 0; j < 16; j++) TI[dst_off + j] = TI[src_off + j]; - } - - for (int dst_off = STATE_CNT / 2, src_off = 0; dst_off < STATE_CNT; dst_off += 16, src_off += 16) - { - for (int j = 0; j < 16; j++) TI[dst_off + j] = TT[src_off + j]; - } - - #endif -} - -DECLSPEC void scrypt_smix (PRIVATE_AS uint4 *X, PRIVATE_AS uint4 *T, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) -{ - #define Coord(xd4,y,z) (((xd4) * ySIZE * zSIZE) + ((y) * zSIZE) + (z)) - #define CO Coord(xd4,y,z) - - const u32 ySIZE = SCRYPT_N / SCRYPT_TMTO; - const u32 zSIZE = STATE_CNT4; - - const u32 x = (u32) gid; - - const u32 xd4 = x / 4; - const u32 xm4 = x & 3; - - GLOBAL_AS uint4 *V; - - switch (xm4) - { - case 0: V = V0; break; - case 1: V = V1; break; - case 2: V = V2; break; - case 3: V = V3; break; - } - - #ifdef _unroll - #pragma unroll - #endif - for (u32 i = 0; i < STATE_CNT4; i += 4) - { - #if defined IS_CUDA || defined IS_HIP - T[0] = make_uint4 (X[i + 0].x, X[i + 1].y, X[i + 2].z, X[i + 3].w); - T[1] = make_uint4 (X[i + 1].x, X[i + 2].y, X[i + 3].z, X[i + 0].w); - T[2] = make_uint4 (X[i + 2].x, X[i + 3].y, X[i + 0].z, X[i + 1].w); - T[3] = make_uint4 (X[i + 3].x, X[i + 0].y, X[i + 1].z, X[i + 2].w); - #elif defined IS_METAL - T[0] = uint4 (X[i + 0].x, X[i + 1].y, X[i + 2].z, X[i + 3].w); - T[1] = uint4 (X[i + 1].x, X[i + 2].y, X[i + 3].z, X[i + 0].w); - T[2] = uint4 (X[i + 2].x, X[i + 3].y, X[i + 0].z, X[i + 1].w); - T[3] = uint4 (X[i + 3].x, X[i + 0].y, X[i + 1].z, X[i + 2].w); - #else - T[0] = (uint4) (X[i + 0].x, X[i + 1].y, X[i + 2].z, X[i + 3].w); - T[1] = (uint4) (X[i + 1].x, X[i + 2].y, X[i + 3].z, X[i + 0].w); - T[2] = (uint4) (X[i + 2].x, X[i + 3].y, X[i + 0].z, X[i + 1].w); - T[3] = (uint4) (X[i + 3].x, X[i + 0].y, X[i + 1].z, X[i + 2].w); - #endif - - X[i + 0] = T[0]; - X[i + 1] = T[1]; - X[i + 2] = T[2]; - X[i + 3] = T[3]; - } - - for (u32 y = 0; y < ySIZE; y++) - { - for (u32 z = 0; z < zSIZE; z++) V[CO] = X[z]; - - for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r ((PRIVATE_AS u32 *) X); - } - - for (u32 i = 0; i < SCRYPT_N; i++) - { - const u32 k = X[zSIZE - 4].x & (SCRYPT_N - 1); - - const u32 y = k / SCRYPT_TMTO; - - const u32 km = k - (y * SCRYPT_TMTO); - - for (u32 z = 0; z < zSIZE; z++) T[z] = V[CO]; - - for (u32 i = 0; i < km; i++) salsa_r ((PRIVATE_AS u32 *) T); - - for (u32 z = 0; z < zSIZE; z++) X[z] ^= T[z]; - - salsa_r ((PRIVATE_AS u32 *) X); - } - - #ifdef _unroll - #pragma unroll - #endif - for (u32 i = 0; i < STATE_CNT4; i += 4) - { - #if defined IS_CUDA || defined IS_HIP - T[0] = make_uint4 (X[i + 0].x, X[i + 3].y, X[i + 2].z, X[i + 1].w); - T[1] = make_uint4 (X[i + 1].x, X[i + 0].y, X[i + 3].z, X[i + 2].w); - T[2] = make_uint4 (X[i + 2].x, X[i + 1].y, X[i + 0].z, X[i + 3].w); - T[3] = make_uint4 (X[i + 3].x, X[i + 2].y, X[i + 1].z, X[i + 0].w); - #elif defined IS_METAL - T[0] = uint4 (X[i + 0].x, X[i + 3].y, X[i + 2].z, X[i + 1].w); - T[1] = uint4 (X[i + 1].x, X[i + 0].y, X[i + 3].z, X[i + 2].w); - T[2] = uint4 (X[i + 2].x, X[i + 1].y, X[i + 0].z, X[i + 3].w); - T[3] = uint4 (X[i + 3].x, X[i + 2].y, X[i + 1].z, X[i + 0].w); - #else - T[0] = (uint4) (X[i + 0].x, X[i + 3].y, X[i + 2].z, X[i + 1].w); - T[1] = (uint4) (X[i + 1].x, X[i + 0].y, X[i + 3].z, X[i + 2].w); - T[2] = (uint4) (X[i + 2].x, X[i + 1].y, X[i + 0].z, X[i + 3].w); - T[3] = (uint4) (X[i + 3].x, X[i + 2].y, X[i + 1].z, X[i + 0].w); - #endif - - X[i + 0] = T[0]; - X[i + 1] = T[1]; - X[i + 2] = T[2]; - X[i + 3] = T[3]; - } -} - #ifndef KECCAK_ROUNDS #define KECCAK_ROUNDS 24 #endif @@ -438,81 +166,51 @@ DECLSPEC void keccak_transform_S (PRIVATE_AS u64 *st) } KERNEL_FQ void HC_ATTR_SEQ m24000_init (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, bestcrypt_scrypt_t)) +{ + const u64 gid = get_global_id (0); + + if (gid >= GID_CNT) return; + + scrypt_pbkdf2 (pws[gid].i, pws[gid].pw_len, salt_bufs[SALT_POS_HOST].salt_buf, salt_bufs[SALT_POS_HOST].salt_len, tmps[gid].P, SCRYPT_CNT * 4); + + scrypt_blockmix_in (tmps[gid].P, SCRYPT_CNT * 4); +} + +KERNEL_FQ void HC_ATTR_SEQ m24000_loop_prepare (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, bestcrypt_scrypt_t)) { /** * base */ const u64 gid = get_global_id (0); + const u64 lid = get_local_id (0); if (gid >= GID_CNT) return; - sha256_hmac_ctx_t sha256_hmac_ctx; + // SCRYPT part, init V - sha256_hmac_init_global_swap (&sha256_hmac_ctx, pws[gid].i, pws[gid].pw_len); + GLOBAL_AS uint4 *d_scrypt0_buf = (GLOBAL_AS uint4 *) d_extra0_buf; + GLOBAL_AS uint4 *d_scrypt1_buf = (GLOBAL_AS uint4 *) d_extra1_buf; + GLOBAL_AS uint4 *d_scrypt2_buf = (GLOBAL_AS uint4 *) d_extra2_buf; + GLOBAL_AS uint4 *d_scrypt3_buf = (GLOBAL_AS uint4 *) d_extra3_buf; - sha256_hmac_update_global_swap (&sha256_hmac_ctx, salt_bufs[SALT_POS_HOST].salt_buf, salt_bufs[SALT_POS_HOST].salt_len); + uint4 X[STATE_CNT4]; - for (u32 i = 0, j = 1, k = 0; i < SCRYPT_CNT; i += 8, j += 1, k += 2) - { - sha256_hmac_ctx_t sha256_hmac_ctx2 = sha256_hmac_ctx; + const u32 P_offset = SALT_REPEAT * STATE_CNT4; - u32 w0[4]; - u32 w1[4]; - u32 w2[4]; - u32 w3[4]; + GLOBAL_AS uint4 *P = tmps[gid].P + P_offset; - w0[0] = j; - w0[1] = 0; - w0[2] = 0; - w0[3] = 0; - w1[0] = 0; - w1[1] = 0; - w1[2] = 0; - w1[3] = 0; - w2[0] = 0; - w2[1] = 0; - w2[2] = 0; - w2[3] = 0; - w3[0] = 0; - w3[1] = 0; - w3[2] = 0; - w3[3] = 0; + for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - sha256_hmac_update_64 (&sha256_hmac_ctx2, w0, w1, w2, w3, 4); + scrypt_smix_init (X, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid); - sha256_hmac_final (&sha256_hmac_ctx2); - - u32 digest[8]; - - digest[0] = sha256_hmac_ctx2.opad.h[0]; - digest[1] = sha256_hmac_ctx2.opad.h[1]; - digest[2] = sha256_hmac_ctx2.opad.h[2]; - digest[3] = sha256_hmac_ctx2.opad.h[3]; - digest[4] = sha256_hmac_ctx2.opad.h[4]; - digest[5] = sha256_hmac_ctx2.opad.h[5]; - digest[6] = sha256_hmac_ctx2.opad.h[6]; - digest[7] = sha256_hmac_ctx2.opad.h[7]; - - #if defined IS_CUDA || defined IS_HIP - const uint4 tmp0 = make_uint4 (digest[0], digest[1], digest[2], digest[3]); - const uint4 tmp1 = make_uint4 (digest[4], digest[5], digest[6], digest[7]); - #elif defined IS_METAL - const uint4 tmp0 = uint4 (digest[0], digest[1], digest[2], digest[3]); - const uint4 tmp1 = uint4 (digest[4], digest[5], digest[6], digest[7]); - #else - const uint4 tmp0 = (uint4) (digest[0], digest[1], digest[2], digest[3]); - const uint4 tmp1 = (uint4) (digest[4], digest[5], digest[6], digest[7]); - #endif - - tmps[gid].P[k + 0] = tmp0; - tmps[gid].P[k + 1] = tmp1; - } + for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } KERNEL_FQ void HC_ATTR_SEQ m24000_loop (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, bestcrypt_scrypt_t)) { const u64 gid = get_global_id (0); + const u64 lid = get_local_id (0); if (gid >= GID_CNT) return; @@ -522,30 +220,23 @@ KERNEL_FQ void HC_ATTR_SEQ m24000_loop (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, best GLOBAL_AS uint4 *d_scrypt3_buf = (GLOBAL_AS uint4 *) d_extra3_buf; uint4 X[STATE_CNT4]; + + #ifdef IS_HIP + LOCAL_VK uint4 T_s[MAX_THREADS_PER_BLOCK][STATE_CNT4]; + LOCAL_AS uint4 *T = T_s[lid]; + #else uint4 T[STATE_CNT4]; - - #ifdef _unroll - #pragma unroll #endif - for (int z = 0; z < STATE_CNT4; z++) X[z] = hc_swap32_4 (tmps[gid].P[z]); - scrypt_smix (X, T, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid); + const u32 P_offset = SALT_REPEAT * STATE_CNT4; - #ifdef _unroll - #pragma unroll - #endif - for (int z = 0; z < STATE_CNT4; z++) tmps[gid].P[z] = hc_swap32_4 (X[z]); + GLOBAL_AS uint4 *P = tmps[gid].P + P_offset; - #if SCRYPT_P >= 1 - for (int i = STATE_CNT4; i < SCRYPT_CNT4; i += STATE_CNT4) - { - for (int z = 0; z < STATE_CNT4; z++) X[z] = hc_swap32_4 (tmps[gid].P[i + z]); + for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - scrypt_smix (X, T, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid); + scrypt_smix_loop (X, T, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid); - for (int z = 0; z < STATE_CNT4; z++) tmps[gid].P[i + z] = hc_swap32_4 (X[z]); - } - #endif + for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } KERNEL_FQ void HC_ATTR_SEQ m24000_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, bestcrypt_scrypt_t)) @@ -608,80 +299,11 @@ KERNEL_FQ void HC_ATTR_SEQ m24000_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, best CONSTANT_AS u32a *s_te4 = te4; #endif - /** - * AES part - */ - if (gid >= GID_CNT) return; - /** - * 2nd pbkdf2, creates B - */ + scrypt_blockmix_out (tmps[gid].P, SCRYPT_CNT * 4); - u32 w0[4]; - u32 w1[4]; - u32 w2[4]; - u32 w3[4]; - - sha256_hmac_ctx_t ctx; - - sha256_hmac_init_global_swap (&ctx, pws[gid].i, pws[gid].pw_len); - - for (u32 l = 0; l < SCRYPT_CNT4; l += 4) - { - uint4 tmp; - - tmp = tmps[gid].P[l + 0]; - - w0[0] = tmp.x; - w0[1] = tmp.y; - w0[2] = tmp.z; - w0[3] = tmp.w; - - tmp = tmps[gid].P[l + 1]; - - w1[0] = tmp.x; - w1[1] = tmp.y; - w1[2] = tmp.z; - w1[3] = tmp.w; - - tmp = tmps[gid].P[l + 2]; - - w2[0] = tmp.x; - w2[1] = tmp.y; - w2[2] = tmp.z; - w2[3] = tmp.w; - - tmp = tmps[gid].P[l + 3]; - - w3[0] = tmp.x; - w3[1] = tmp.y; - w3[2] = tmp.z; - w3[3] = tmp.w; - - sha256_hmac_update_64 (&ctx, w0, w1, w2, w3, 64); - } - - w0[0] = 1; - w0[1] = 0; - w0[2] = 0; - w0[3] = 0; - w1[0] = 0; - w1[1] = 0; - w1[2] = 0; - w1[3] = 0; - w2[0] = 0; - w2[1] = 0; - w2[2] = 0; - w2[3] = 0; - w3[0] = 0; - w3[1] = 0; - w3[2] = 0; - w3[3] = 0; - - sha256_hmac_update_64 (&ctx, w0, w1, w2, w3, 4); - - sha256_hmac_final (&ctx); + scrypt_pbkdf2 (pws[gid].i, pws[gid].pw_len, (GLOBAL_AS const u32 *) tmps[gid].P, SCRYPT_CNT * 4, tmps[gid].P, 32); u32 version = esalt_bufs[DIGESTS_OFFSET_HOST].version; @@ -689,14 +311,24 @@ KERNEL_FQ void HC_ATTR_SEQ m24000_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, best u32 res[20]; // full would be 24 x u32 (96 bytes) + u32 key[8]; + + key[0] = tmps[gid].P[0].x; + key[1] = tmps[gid].P[0].y; + key[2] = tmps[gid].P[0].z; + key[3] = tmps[gid].P[0].w; + key[4] = tmps[gid].P[1].x; + key[5] = tmps[gid].P[1].y; + key[6] = tmps[gid].P[1].z; + key[7] = tmps[gid].P[1].w; + if (version == 0x38) //0x38 is char for '8' which is the crypto type passed in position 3 of hash ( $08$ ) { - #define KEYLEN 60 u32 ks[KEYLEN]; - AES256_set_decrypt_key (ks, ctx.opad.h, s_te0, s_te1, s_te2, s_te3, s_td0, s_td1, s_td2, s_td3); + aes256_set_decrypt_key (ks, key, s_te0, s_te1, s_te2, s_te3, s_td0, s_td1, s_td2, s_td3); for (u32 i = 0; i < 20; i += 4) // 96 bytes output would contain the full 32 byte checksum { @@ -723,22 +355,12 @@ KERNEL_FQ void HC_ATTR_SEQ m24000_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, best } } - if (version == 0x39) //0x39 is char for '9' which is the crypto type passed in position 3 of hash ( $09$ ) { u32 sk[4]; u32 lk[40]; - ctx.opad.h[0] = hc_swap32_S (ctx.opad.h[0]); - ctx.opad.h[1] = hc_swap32_S (ctx.opad.h[1]); - ctx.opad.h[2] = hc_swap32_S (ctx.opad.h[2]); - ctx.opad.h[3] = hc_swap32_S (ctx.opad.h[3]); - ctx.opad.h[4] = hc_swap32_S (ctx.opad.h[4]); - ctx.opad.h[5] = hc_swap32_S (ctx.opad.h[5]); - ctx.opad.h[6] = hc_swap32_S (ctx.opad.h[6]); - ctx.opad.h[7] = hc_swap32_S (ctx.opad.h[7]); - - twofish256_set_key (sk, lk, ctx.opad.h); + twofish256_set_key (sk, lk, key); for (u32 i = 0; i < 20; i += 4) // 96 bytes output would contain the full 32 byte checksum { @@ -749,7 +371,6 @@ KERNEL_FQ void HC_ATTR_SEQ m24000_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, best data[2] = esalt_bufs[DIGESTS_OFFSET_HOST].ciphertext[i + 2]; data[3] = esalt_bufs[DIGESTS_OFFSET_HOST].ciphertext[i + 3]; - u32 out[4]; twofish256_decrypt (sk, lk, data, out); @@ -770,16 +391,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24000_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, best { u32 ks_serpent[140]; - ctx.opad.h[0] = hc_swap32_S (ctx.opad.h[0]); - ctx.opad.h[1] = hc_swap32_S (ctx.opad.h[1]); - ctx.opad.h[2] = hc_swap32_S (ctx.opad.h[2]); - ctx.opad.h[3] = hc_swap32_S (ctx.opad.h[3]); - ctx.opad.h[4] = hc_swap32_S (ctx.opad.h[4]); - ctx.opad.h[5] = hc_swap32_S (ctx.opad.h[5]); - ctx.opad.h[6] = hc_swap32_S (ctx.opad.h[6]); - ctx.opad.h[7] = hc_swap32_S (ctx.opad.h[7]); - - serpent256_set_key (ks_serpent, ctx.opad.h); + serpent256_set_key (ks_serpent, key); for (u32 i = 0; i < 20; i += 4) // 96 bytes output would contain the full 32 byte checksum { @@ -811,16 +423,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24000_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, best { u32 ks_camellia[68]; - ctx.opad.h[0] = hc_swap32_S (ctx.opad.h[0]); - ctx.opad.h[1] = hc_swap32_S (ctx.opad.h[1]); - ctx.opad.h[2] = hc_swap32_S (ctx.opad.h[2]); - ctx.opad.h[3] = hc_swap32_S (ctx.opad.h[3]); - ctx.opad.h[4] = hc_swap32_S (ctx.opad.h[4]); - ctx.opad.h[5] = hc_swap32_S (ctx.opad.h[5]); - ctx.opad.h[6] = hc_swap32_S (ctx.opad.h[6]); - ctx.opad.h[7] = hc_swap32_S (ctx.opad.h[7]); - - camellia256_set_key (ks_camellia, ctx.opad.h); + camellia256_set_key (ks_camellia, key); for (u32 i = 0; i < 20; i += 4) // 96 bytes output would contain the full 32 byte checksum { @@ -859,6 +462,11 @@ KERNEL_FQ void HC_ATTR_SEQ m24000_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, best digest[6] = SHA256M_G; digest[7] = SHA256M_H; + u32 w0[4]; + u32 w1[4]; + u32 w2[4]; + u32 w3[4]; + w0[0] = res[ 0]; w0[1] = res[ 1]; w0[2] = res[ 2]; @@ -910,3 +518,4 @@ KERNEL_FQ void HC_ATTR_SEQ m24000_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, best return; } } + diff --git a/OpenCL/m27700-pure.cl b/OpenCL/m27700-pure.cl index c32a468ca..752342015 100644 --- a/OpenCL/m27700-pure.cl +++ b/OpenCL/m27700-pure.cl @@ -9,6 +9,7 @@ #include M2S(INCLUDE_PATH/inc_platform.cl) #include M2S(INCLUDE_PATH/inc_common.cl) #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) +#include M2S(INCLUDE_PATH/inc_hash_scrypt.cl) #include M2S(INCLUDE_PATH/inc_cipher_aes.cl) #endif @@ -22,255 +23,8 @@ typedef struct } scrypt_tmp_t; -#if defined IS_CUDA || defined IS_HIP - -inline __device__ uint4 operator & (const uint4 a, const u32 b) { return make_uint4 ((a.x & b ), (a.y & b ), (a.z & b ), (a.w & b )); } -inline __device__ uint4 operator << (const uint4 a, const u32 b) { return make_uint4 ((a.x << b ), (a.y << b ), (a.z << b ), (a.w << b )); } -inline __device__ uint4 operator >> (const uint4 a, const u32 b) { return make_uint4 ((a.x >> b ), (a.y >> b ), (a.z >> b ), (a.w >> b )); } -inline __device__ uint4 operator + (const uint4 a, const uint4 b) { return make_uint4 ((a.x + b.x), (a.y + b.y), (a.z + b.z), (a.w + b.w)); } -inline __device__ uint4 operator ^ (const uint4 a, const uint4 b) { return make_uint4 ((a.x ^ b.x), (a.y ^ b.y), (a.z ^ b.z), (a.w ^ b.w)); } -inline __device__ uint4 operator | (const uint4 a, const uint4 b) { return make_uint4 ((a.x | b.x), (a.y | b.y), (a.z | b.z), (a.w | b.w)); } -inline __device__ void operator ^= ( uint4 &a, const uint4 b) { a.x ^= b.x; a.y ^= b.y; a.z ^= b.z; a.w ^= b.w; } - -inline __device__ uint4 rotate (const uint4 a, const int n) -{ - return ((a << n) | ((a >> (32 - n)))); -} - -#endif - -DECLSPEC uint4 hc_swap32_4 (uint4 v) -{ - return (rotate ((v & 0x00FF00FF), 24u) | rotate ((v & 0xFF00FF00), 8u)); -} - -#define GET_SCRYPT_CNT(r,p) (2 * (r) * 16 * (p)) -#define GET_SMIX_CNT(r,N) (2 * (r) * 16 * (N)) -#define GET_STATE_CNT(r) (2 * (r) * 16) - -#define SCRYPT_CNT GET_SCRYPT_CNT (SCRYPT_R, SCRYPT_P) -#define SCRYPT_CNT4 (SCRYPT_CNT / 4) -#define STATE_CNT GET_STATE_CNT (SCRYPT_R) -#define STATE_CNT4 (STATE_CNT / 4) - -#define Coord(xd4,y,z) (((xd4) * ySIZE * zSIZE) + ((y) * zSIZE) + (z)) -#define CO Coord(xd4,y,z) - -DECLSPEC void salsa_r (PRIVATE_AS u32 *TI) -{ - u32 x[16]; - - for (int j = 0; j < 16; j++) x[j] = TI[STATE_CNT - 16 + j]; - - for (int i = 0; i < STATE_CNT; i += 16) - { - for (int j = 0; j < 16; j++) - { - x[j] ^= TI[i + j]; - } - - for (int j = 0; j < 16; j++) - { - TI[i + j] = x[j]; - } - - for (int r = 0; r < 4; r++) - { - u32 t0, t1, t2, t3; - - t0 = x[ 0] + x[12]; - t1 = x[ 1] + x[13]; - t2 = x[ 2] + x[14]; - t3 = x[ 3] + x[15]; - x[ 4] ^= hc_rotl32_S (t0, 7); - x[ 5] ^= hc_rotl32_S (t1, 7); - x[ 6] ^= hc_rotl32_S (t2, 7); - x[ 7] ^= hc_rotl32_S (t3, 7); - - t0 = x[ 4] + x[ 0]; - t1 = x[ 5] + x[ 1]; - t2 = x[ 6] + x[ 2]; - t3 = x[ 7] + x[ 3]; - x[ 8] ^= hc_rotl32_S (t0, 9); - x[ 9] ^= hc_rotl32_S (t1, 9); - x[10] ^= hc_rotl32_S (t2, 9); - x[11] ^= hc_rotl32_S (t3, 9); - - t0 = x[ 8] + x[ 4]; - t1 = x[ 9] + x[ 5]; - t2 = x[10] + x[ 6]; - t3 = x[11] + x[ 7]; - x[12] ^= hc_rotl32_S (t0, 13); - x[13] ^= hc_rotl32_S (t1, 13); - x[14] ^= hc_rotl32_S (t2, 13); - x[15] ^= hc_rotl32_S (t3, 13); - - t0 = x[12] + x[ 8]; - t1 = x[13] + x[ 9]; - t2 = x[14] + x[10]; - t3 = x[15] + x[11]; - x[ 0] ^= hc_rotl32_S (t0, 18); - x[ 1] ^= hc_rotl32_S (t1, 18); - x[ 2] ^= hc_rotl32_S (t2, 18); - x[ 3] ^= hc_rotl32_S (t3, 18); - - t0 = x[ 4]; x[ 4] = x[ 7]; x[ 7] = x[ 6]; x[ 6] = x[ 5]; x[ 5] = t0; - t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; - t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; - t0 = x[12]; x[12] = x[13]; x[13] = x[14]; x[14] = x[15]; x[15] = t0; - - t0 = x[ 0] + x[ 4]; - t1 = x[ 1] + x[ 5]; - t2 = x[ 2] + x[ 6]; - t3 = x[ 3] + x[ 7]; - x[12] ^= hc_rotl32_S (t0, 7); - x[13] ^= hc_rotl32_S (t1, 7); - x[14] ^= hc_rotl32_S (t2, 7); - x[15] ^= hc_rotl32_S (t3, 7); - - t0 = x[12] + x[ 0]; - t1 = x[13] + x[ 1]; - t2 = x[14] + x[ 2]; - t3 = x[15] + x[ 3]; - x[ 8] ^= hc_rotl32_S (t0, 9); - x[ 9] ^= hc_rotl32_S (t1, 9); - x[10] ^= hc_rotl32_S (t2, 9); - x[11] ^= hc_rotl32_S (t3, 9); - - t0 = x[ 8] + x[12]; - t1 = x[ 9] + x[13]; - t2 = x[10] + x[14]; - t3 = x[11] + x[15]; - x[ 4] ^= hc_rotl32_S (t0, 13); - x[ 5] ^= hc_rotl32_S (t1, 13); - x[ 6] ^= hc_rotl32_S (t2, 13); - x[ 7] ^= hc_rotl32_S (t3, 13); - - t0 = x[ 4] + x[ 8]; - t1 = x[ 5] + x[ 9]; - t2 = x[ 6] + x[10]; - t3 = x[ 7] + x[11]; - x[ 0] ^= hc_rotl32_S (t0, 18); - x[ 1] ^= hc_rotl32_S (t1, 18); - x[ 2] ^= hc_rotl32_S (t2, 18); - x[ 3] ^= hc_rotl32_S (t3, 18); - - t0 = x[ 4]; x[ 4] = x[ 5]; x[ 5] = x[ 6]; x[ 6] = x[ 7]; x[ 7] = t0; - t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; - t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; - t0 = x[15]; x[15] = x[14]; x[14] = x[13]; x[13] = x[12]; x[12] = t0; - } - - for (int j = 0; j < 16; j++) - { - x[j] += TI[i + j]; - } - - for (int j = 0; j < 16; j++) - { - TI[i + j] = x[j]; - } - } - - #if SCRYPT_R > 1 - - u32 TT[STATE_CNT / 2]; - - for (int dst_off = 0, src_off = 16; src_off < STATE_CNT; dst_off += 16, src_off += 32) - { - for (int j = 0; j < 16; j++) TT[dst_off + j] = TI[src_off + j]; - } - - for (int dst_off = 16, src_off = 32; src_off < STATE_CNT; dst_off += 16, src_off += 32) - { - for (int j = 0; j < 16; j++) TI[dst_off + j] = TI[src_off + j]; - } - - for (int dst_off = STATE_CNT / 2, src_off = 0; dst_off < STATE_CNT; dst_off += 16, src_off += 16) - { - for (int j = 0; j < 16; j++) TI[dst_off + j] = TT[src_off + j]; - } - - #endif - -} - -DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) -{ - const u32 ySIZE = SCRYPT_N / SCRYPT_TMTO; - const u32 zSIZE = STATE_CNT4; - - const u32 x = (u32) gid; - - const u32 xd4 = x / 4; - const u32 xm4 = x & 3; - - GLOBAL_AS uint4 *V; - - switch (xm4) - { - case 0: V = V0; break; - case 1: V = V1; break; - case 2: V = V2; break; - case 3: V = V3; break; - } - - for (u32 y = 0; y < ySIZE; y++) - { - for (u32 z = 0; z < zSIZE; z++) V[CO] = X[z]; - - for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r ((PRIVATE_AS u32 *) X); - } -} - -DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) -{ - const u32 ySIZE = SCRYPT_N / SCRYPT_TMTO; - const u32 zSIZE = STATE_CNT4; - - const u32 x = (u32) gid; - - const u32 xd4 = x / 4; - const u32 xm4 = x & 3; - - GLOBAL_AS uint4 *V; - - switch (xm4) - { - case 0: V = V0; break; - case 1: V = V1; break; - case 2: V = V2; break; - case 3: V = V3; break; - } - - // note: fixed 1024 iterations = forced -u 1024 - - for (u32 N_pos = 0; N_pos < 1024; N_pos++) - { - const u32 k = X[zSIZE - 4].x & (SCRYPT_N - 1); - - const u32 y = k / SCRYPT_TMTO; - - const u32 km = k - (y * SCRYPT_TMTO); - - uint4 T[STATE_CNT4]; - - for (u32 z = 0; z < zSIZE; z++) T[z] = V[CO]; - - for (u32 i = 0; i < km; i++) salsa_r ((PRIVATE_AS u32 *) T); - - for (u32 z = 0; z < zSIZE; z++) X[z] ^= T[z]; - - salsa_r ((PRIVATE_AS u32 *) X); - } -} - KERNEL_FQ void HC_ATTR_SEQ m27700_init (KERN_ATTR_TMPS (scrypt_tmp_t)) { - /** - * base - */ - const u64 gid = get_global_id (0); if (gid >= GID_CNT) return; @@ -286,7 +40,6 @@ KERNEL_FQ void HC_ATTR_SEQ m27700_init (KERN_ATTR_TMPS (scrypt_tmp_t)) if (w_len == -1) return; // utf16le to utf16be - for (int i = 0, j = 0; i < w_len; i += 4, j += 1) { w[j] = ((w[j] >> 8) & 0x00ff00ff) @@ -307,121 +60,29 @@ KERNEL_FQ void HC_ATTR_SEQ m27700_init (KERN_ATTR_TMPS (scrypt_tmp_t)) sha256_hmac_update_64 (&sha256_hmac_ctx, x0, x1, x2, x3, 8); - for (u32 i = 0, j = 1, k = 0; i < SCRYPT_CNT; i += 8, j += 1, k += 2) - { - sha256_hmac_ctx_t sha256_hmac_ctx2 = sha256_hmac_ctx; + scrypt_pbkdf2_body (&sha256_hmac_ctx, tmps[gid].P, SCRYPT_CNT * 4); - u32 w0[4]; - u32 w1[4]; - u32 w2[4]; - u32 w3[4]; - - w0[0] = j; - w0[1] = 0; - w0[2] = 0; - w0[3] = 0; - w1[0] = 0; - w1[1] = 0; - w1[2] = 0; - w1[3] = 0; - w2[0] = 0; - w2[1] = 0; - w2[2] = 0; - w2[3] = 0; - w3[0] = 0; - w3[1] = 0; - w3[2] = 0; - w3[3] = 0; - - sha256_hmac_update_64 (&sha256_hmac_ctx2, w0, w1, w2, w3, 4); - - sha256_hmac_final (&sha256_hmac_ctx2); - - u32 digest[8]; - - digest[0] = sha256_hmac_ctx2.opad.h[0]; - digest[1] = sha256_hmac_ctx2.opad.h[1]; - digest[2] = sha256_hmac_ctx2.opad.h[2]; - digest[3] = sha256_hmac_ctx2.opad.h[3]; - digest[4] = sha256_hmac_ctx2.opad.h[4]; - digest[5] = sha256_hmac_ctx2.opad.h[5]; - digest[6] = sha256_hmac_ctx2.opad.h[6]; - digest[7] = sha256_hmac_ctx2.opad.h[7]; - - #if defined IS_CUDA || defined IS_HIP - const uint4 tmp0 = make_uint4 (digest[0], digest[1], digest[2], digest[3]); - const uint4 tmp1 = make_uint4 (digest[4], digest[5], digest[6], digest[7]); - #elif defined IS_METAL - const uint4 tmp0 = uint4 (digest[0], digest[1], digest[2], digest[3]); - const uint4 tmp1 = uint4 (digest[4], digest[5], digest[6], digest[7]); - #else - const uint4 tmp0 = (uint4) (digest[0], digest[1], digest[2], digest[3]); - const uint4 tmp1 = (uint4) (digest[4], digest[5], digest[6], digest[7]); - #endif - - tmps[gid].P[k + 0] = tmp0; - tmps[gid].P[k + 1] = tmp1; - } - - for (u32 l = 0; l < SCRYPT_CNT4; l += 4) - { - uint4 T[4]; - - T[0] = tmps[gid].P[l + 0]; - T[1] = tmps[gid].P[l + 1]; - T[2] = tmps[gid].P[l + 2]; - T[3] = tmps[gid].P[l + 3]; - - T[0] = hc_swap32_4 (T[0]); - T[1] = hc_swap32_4 (T[1]); - T[2] = hc_swap32_4 (T[2]); - T[3] = hc_swap32_4 (T[3]); - - uint4 X[4]; - - #if defined IS_CUDA || defined IS_HIP - X[0] = make_uint4 (T[0].x, T[1].y, T[2].z, T[3].w); - X[1] = make_uint4 (T[1].x, T[2].y, T[3].z, T[0].w); - X[2] = make_uint4 (T[2].x, T[3].y, T[0].z, T[1].w); - X[3] = make_uint4 (T[3].x, T[0].y, T[1].z, T[2].w); - #elif defined IS_METAL - X[0] = uint4 (T[0].x, T[1].y, T[2].z, T[3].w); - X[1] = uint4 (T[1].x, T[2].y, T[3].z, T[0].w); - X[2] = uint4 (T[2].x, T[3].y, T[0].z, T[1].w); - X[3] = uint4 (T[3].x, T[0].y, T[1].z, T[2].w); - #else - X[0] = (uint4) (T[0].x, T[1].y, T[2].z, T[3].w); - X[1] = (uint4) (T[1].x, T[2].y, T[3].z, T[0].w); - X[2] = (uint4) (T[2].x, T[3].y, T[0].z, T[1].w); - X[3] = (uint4) (T[3].x, T[0].y, T[1].z, T[2].w); - #endif - - tmps[gid].P[l + 0] = X[0]; - tmps[gid].P[l + 1] = X[1]; - tmps[gid].P[l + 2] = X[2]; - tmps[gid].P[l + 3] = X[3]; - } + scrypt_blockmix_in (tmps[gid].P, SCRYPT_CNT * 4); } KERNEL_FQ void HC_ATTR_SEQ m27700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) { - /** - * base - */ - const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); if (gid >= GID_CNT) return; - // SCRYPT part, init V - GLOBAL_AS uint4 *d_scrypt0_buf = (GLOBAL_AS uint4 *) d_extra0_buf; GLOBAL_AS uint4 *d_scrypt1_buf = (GLOBAL_AS uint4 *) d_extra1_buf; GLOBAL_AS uint4 *d_scrypt2_buf = (GLOBAL_AS uint4 *) d_extra2_buf; GLOBAL_AS uint4 *d_scrypt3_buf = (GLOBAL_AS uint4 *) d_extra3_buf; + #ifdef IS_HIP + LOCAL_VK uint4 X_s[MAX_THREADS_PER_BLOCK][STATE_CNT4]; + LOCAL_AS uint4 *X = X_s[lid]; + #else uint4 X[STATE_CNT4]; + #endif const u32 P_offset = SALT_REPEAT * STATE_CNT4; @@ -448,13 +109,20 @@ KERNEL_FQ void HC_ATTR_SEQ m27700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) uint4 X[STATE_CNT4]; + #ifdef IS_HIP + LOCAL_VK uint4 T_s[MAX_THREADS_PER_BLOCK][STATE_CNT4]; + LOCAL_AS uint4 *T = T_s[lid]; + #else + uint4 T[STATE_CNT4]; + #endif + const u32 P_offset = SALT_REPEAT * STATE_CNT4; GLOBAL_AS uint4 *P = tmps[gid].P + P_offset; for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - scrypt_smix_loop (X, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid); + scrypt_smix_loop (X, T, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid); for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } @@ -533,114 +201,40 @@ KERNEL_FQ void HC_ATTR_SEQ m27700_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) if (w_len == -1) return; // utf16le to utf16be - for (int i = 0, j = 0; i < w_len; i += 4, j += 1) { w[j] = ((w[j] >> 8) & 0x00ff00ff) | ((w[j] << 8) & 0xff00ff00); } + scrypt_blockmix_out (tmps[gid].P, SCRYPT_CNT * 4); + sha256_hmac_ctx_t ctx; sha256_hmac_init_swap (&ctx, w, w_len); - u32 w0[4]; - u32 w1[4]; - u32 w2[4]; - u32 w3[4]; + sha256_hmac_update_global_swap (&ctx, (GLOBAL_AS const u32 *) tmps[gid].P, SCRYPT_CNT * 4); - for (u32 l = 0; l < SCRYPT_CNT4; l += 4) - { - uint4 X[4]; - - X[0] = tmps[gid].P[l + 0]; - X[1] = tmps[gid].P[l + 1]; - X[2] = tmps[gid].P[l + 2]; - X[3] = tmps[gid].P[l + 3]; - - uint4 T[4]; - - #if defined IS_CUDA || defined IS_HIP - T[0] = make_uint4 (X[0].x, X[3].y, X[2].z, X[1].w); - T[1] = make_uint4 (X[1].x, X[0].y, X[3].z, X[2].w); - T[2] = make_uint4 (X[2].x, X[1].y, X[0].z, X[3].w); - T[3] = make_uint4 (X[3].x, X[2].y, X[1].z, X[0].w); - #elif defined IS_METAL - T[0] = uint4 (X[0].x, X[3].y, X[2].z, X[1].w); - T[1] = uint4 (X[1].x, X[0].y, X[3].z, X[2].w); - T[2] = uint4 (X[2].x, X[1].y, X[0].z, X[3].w); - T[3] = uint4 (X[3].x, X[2].y, X[1].z, X[0].w); - #else - T[0] = (uint4) (X[0].x, X[3].y, X[2].z, X[1].w); - T[1] = (uint4) (X[1].x, X[0].y, X[3].z, X[2].w); - T[2] = (uint4) (X[2].x, X[1].y, X[0].z, X[3].w); - T[3] = (uint4) (X[3].x, X[2].y, X[1].z, X[0].w); - #endif - - T[0] = hc_swap32_4 (T[0]); - T[1] = hc_swap32_4 (T[1]); - T[2] = hc_swap32_4 (T[2]); - T[3] = hc_swap32_4 (T[3]); - - w0[0] = T[0].x; - w0[1] = T[0].y; - w0[2] = T[0].z; - w0[3] = T[0].w; - w1[0] = T[1].x; - w1[1] = T[1].y; - w1[2] = T[1].z; - w1[3] = T[1].w; - w2[0] = T[2].x; - w2[1] = T[2].y; - w2[2] = T[2].z; - w2[3] = T[2].w; - w3[0] = T[3].x; - w3[1] = T[3].y; - w3[2] = T[3].z; - w3[3] = T[3].w; - - sha256_hmac_update_64 (&ctx, w0, w1, w2, w3, 64); - } - - w0[0] = 1; - w0[1] = 0; - w0[2] = 0; - w0[3] = 0; - w1[0] = 0; - w1[1] = 0; - w1[2] = 0; - w1[3] = 0; - w2[0] = 0; - w2[1] = 0; - w2[2] = 0; - w2[3] = 0; - w3[0] = 0; - w3[1] = 0; - w3[2] = 0; - w3[3] = 0; - - sha256_hmac_update_64 (&ctx, w0, w1, w2, w3, 4); - - sha256_hmac_final (&ctx); + scrypt_pbkdf2_body (&ctx, tmps[gid].P, 16); // AES256-CBC decrypt u32 key[8]; - key[0] = ctx.opad.h[0]; - key[1] = ctx.opad.h[1]; - key[2] = ctx.opad.h[2]; - key[3] = ctx.opad.h[3]; - key[4] = ctx.opad.h[4]; - key[5] = ctx.opad.h[5]; - key[6] = ctx.opad.h[6]; - key[7] = ctx.opad.h[7]; + key[0] = tmps[gid].P[0].x; + key[1] = tmps[gid].P[0].y; + key[2] = tmps[gid].P[0].z; + key[3] = tmps[gid].P[0].w; + key[4] = tmps[gid].P[1].x; + key[5] = tmps[gid].P[1].y; + key[6] = tmps[gid].P[1].z; + key[7] = tmps[gid].P[1].w; #define KEYLEN 60 u32 ks[KEYLEN]; - AES256_set_decrypt_key (ks, key, s_te0, s_te1, s_te2, s_te3, s_td0, s_td1, s_td2, s_td3); + aes256_set_decrypt_key (ks, key, s_te0, s_te1, s_te2, s_te3, s_td0, s_td1, s_td2, s_td3); u32 iv[4]; diff --git a/OpenCL/m28200-pure.cl b/OpenCL/m28200-pure.cl index 3e4bed337..ff34ba8a2 100644 --- a/OpenCL/m28200-pure.cl +++ b/OpenCL/m28200-pure.cl @@ -9,6 +9,7 @@ #include M2S(INCLUDE_PATH/inc_platform.cl) #include M2S(INCLUDE_PATH/inc_common.cl) #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) +#include M2S(INCLUDE_PATH/inc_hash_scrypt.cl) #include M2S(INCLUDE_PATH/inc_cipher_aes.cl) #include M2S(INCLUDE_PATH/inc_cipher_aes-gcm.cl) #endif @@ -34,380 +35,35 @@ typedef struct exodus } exodus_t; -#if defined IS_CUDA || defined IS_HIP - -inline __device__ uint4 operator & (const uint4 a, const u32 b) { return make_uint4 ((a.x & b ), (a.y & b ), (a.z & b ), (a.w & b )); } -inline __device__ uint4 operator << (const uint4 a, const u32 b) { return make_uint4 ((a.x << b ), (a.y << b ), (a.z << b ), (a.w << b )); } -inline __device__ uint4 operator >> (const uint4 a, const u32 b) { return make_uint4 ((a.x >> b ), (a.y >> b ), (a.z >> b ), (a.w >> b )); } -inline __device__ uint4 operator + (const uint4 a, const uint4 b) { return make_uint4 ((a.x + b.x), (a.y + b.y), (a.z + b.z), (a.w + b.w)); } -inline __device__ uint4 operator ^ (const uint4 a, const uint4 b) { return make_uint4 ((a.x ^ b.x), (a.y ^ b.y), (a.z ^ b.z), (a.w ^ b.w)); } -inline __device__ uint4 operator | (const uint4 a, const uint4 b) { return make_uint4 ((a.x | b.x), (a.y | b.y), (a.z | b.z), (a.w | b.w)); } -inline __device__ void operator ^= ( uint4 &a, const uint4 b) { a.x ^= b.x; a.y ^= b.y; a.z ^= b.z; a.w ^= b.w; } - -inline __device__ uint4 rotate (const uint4 a, const int n) -{ - return ((a << n) | ((a >> (32 - n)))); -} - -#endif - -DECLSPEC uint4 hc_swap32_4 (uint4 v) -{ - return (rotate ((v & 0x00FF00FF), 24u) | rotate ((v & 0xFF00FF00), 8u)); -} - -#define GET_SCRYPT_CNT(r,p) (2 * (r) * 16 * (p)) -#define GET_SMIX_CNT(r,N) (2 * (r) * 16 * (N)) -#define GET_STATE_CNT(r) (2 * (r) * 16) - -#define SCRYPT_CNT GET_SCRYPT_CNT (SCRYPT_R, SCRYPT_P) -#define SCRYPT_CNT4 (SCRYPT_CNT / 4) -#define STATE_CNT GET_STATE_CNT (SCRYPT_R) -#define STATE_CNT4 (STATE_CNT / 4) - -#define Coord(xd4,y,z) (((xd4) * ySIZE * zSIZE) + ((y) * zSIZE) + (z)) -#define CO Coord(xd4,y,z) - -DECLSPEC void salsa_r (PRIVATE_AS u32 *TI) -{ - u32 x[16]; - - for (int j = 0; j < 16; j++) x[j] = TI[STATE_CNT - 16 + j]; - - for (int i = 0; i < STATE_CNT; i += 16) - { - for (int j = 0; j < 16; j++) - { - x[j] ^= TI[i + j]; - } - - for (int j = 0; j < 16; j++) - { - TI[i + j] = x[j]; - } - - for (int r = 0; r < 4; r++) - { - u32 t0, t1, t2, t3; - - t0 = x[ 0] + x[12]; - t1 = x[ 1] + x[13]; - t2 = x[ 2] + x[14]; - t3 = x[ 3] + x[15]; - x[ 4] ^= hc_rotl32_S (t0, 7); - x[ 5] ^= hc_rotl32_S (t1, 7); - x[ 6] ^= hc_rotl32_S (t2, 7); - x[ 7] ^= hc_rotl32_S (t3, 7); - - t0 = x[ 4] + x[ 0]; - t1 = x[ 5] + x[ 1]; - t2 = x[ 6] + x[ 2]; - t3 = x[ 7] + x[ 3]; - x[ 8] ^= hc_rotl32_S (t0, 9); - x[ 9] ^= hc_rotl32_S (t1, 9); - x[10] ^= hc_rotl32_S (t2, 9); - x[11] ^= hc_rotl32_S (t3, 9); - - t0 = x[ 8] + x[ 4]; - t1 = x[ 9] + x[ 5]; - t2 = x[10] + x[ 6]; - t3 = x[11] + x[ 7]; - x[12] ^= hc_rotl32_S (t0, 13); - x[13] ^= hc_rotl32_S (t1, 13); - x[14] ^= hc_rotl32_S (t2, 13); - x[15] ^= hc_rotl32_S (t3, 13); - - t0 = x[12] + x[ 8]; - t1 = x[13] + x[ 9]; - t2 = x[14] + x[10]; - t3 = x[15] + x[11]; - x[ 0] ^= hc_rotl32_S (t0, 18); - x[ 1] ^= hc_rotl32_S (t1, 18); - x[ 2] ^= hc_rotl32_S (t2, 18); - x[ 3] ^= hc_rotl32_S (t3, 18); - - t0 = x[ 4]; x[ 4] = x[ 7]; x[ 7] = x[ 6]; x[ 6] = x[ 5]; x[ 5] = t0; - t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; - t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; - t0 = x[12]; x[12] = x[13]; x[13] = x[14]; x[14] = x[15]; x[15] = t0; - - t0 = x[ 0] + x[ 4]; - t1 = x[ 1] + x[ 5]; - t2 = x[ 2] + x[ 6]; - t3 = x[ 3] + x[ 7]; - x[12] ^= hc_rotl32_S (t0, 7); - x[13] ^= hc_rotl32_S (t1, 7); - x[14] ^= hc_rotl32_S (t2, 7); - x[15] ^= hc_rotl32_S (t3, 7); - - t0 = x[12] + x[ 0]; - t1 = x[13] + x[ 1]; - t2 = x[14] + x[ 2]; - t3 = x[15] + x[ 3]; - x[ 8] ^= hc_rotl32_S (t0, 9); - x[ 9] ^= hc_rotl32_S (t1, 9); - x[10] ^= hc_rotl32_S (t2, 9); - x[11] ^= hc_rotl32_S (t3, 9); - - t0 = x[ 8] + x[12]; - t1 = x[ 9] + x[13]; - t2 = x[10] + x[14]; - t3 = x[11] + x[15]; - x[ 4] ^= hc_rotl32_S (t0, 13); - x[ 5] ^= hc_rotl32_S (t1, 13); - x[ 6] ^= hc_rotl32_S (t2, 13); - x[ 7] ^= hc_rotl32_S (t3, 13); - - t0 = x[ 4] + x[ 8]; - t1 = x[ 5] + x[ 9]; - t2 = x[ 6] + x[10]; - t3 = x[ 7] + x[11]; - x[ 0] ^= hc_rotl32_S (t0, 18); - x[ 1] ^= hc_rotl32_S (t1, 18); - x[ 2] ^= hc_rotl32_S (t2, 18); - x[ 3] ^= hc_rotl32_S (t3, 18); - - t0 = x[ 4]; x[ 4] = x[ 5]; x[ 5] = x[ 6]; x[ 6] = x[ 7]; x[ 7] = t0; - t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; - t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; - t0 = x[15]; x[15] = x[14]; x[14] = x[13]; x[13] = x[12]; x[12] = t0; - } - - for (int j = 0; j < 16; j++) - { - x[j] += TI[i + j]; - } - - for (int j = 0; j < 16; j++) - { - TI[i + j] = x[j]; - } - } - - #if SCRYPT_R > 1 - - u32 TT[STATE_CNT / 2]; - - for (int dst_off = 0, src_off = 16; src_off < STATE_CNT; dst_off += 16, src_off += 32) - { - for (int j = 0; j < 16; j++) TT[dst_off + j] = TI[src_off + j]; - } - - for (int dst_off = 16, src_off = 32; src_off < STATE_CNT; dst_off += 16, src_off += 32) - { - for (int j = 0; j < 16; j++) TI[dst_off + j] = TI[src_off + j]; - } - - for (int dst_off = STATE_CNT / 2, src_off = 0; dst_off < STATE_CNT; dst_off += 16, src_off += 16) - { - for (int j = 0; j < 16; j++) TI[dst_off + j] = TT[src_off + j]; - } - - #endif - -} - -DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) -{ - const u32 ySIZE = SCRYPT_N / SCRYPT_TMTO; - const u32 zSIZE = STATE_CNT4; - - const u32 x = (u32) gid; - - const u32 xd4 = x / 4; - const u32 xm4 = x & 3; - - GLOBAL_AS uint4 *V; - - switch (xm4) - { - case 0: V = V0; break; - case 1: V = V1; break; - case 2: V = V2; break; - case 3: V = V3; break; - } - - for (u32 y = 0; y < ySIZE; y++) - { - for (u32 z = 0; z < zSIZE; z++) V[CO] = X[z]; - - for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r ((PRIVATE_AS u32 *) X); - } -} - -DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) -{ - const u32 ySIZE = SCRYPT_N / SCRYPT_TMTO; - const u32 zSIZE = STATE_CNT4; - - const u32 x = (u32) gid; - - const u32 xd4 = x / 4; - const u32 xm4 = x & 3; - - GLOBAL_AS uint4 *V; - - switch (xm4) - { - case 0: V = V0; break; - case 1: V = V1; break; - case 2: V = V2; break; - case 3: V = V3; break; - } - - // note: fixed 1024 iterations = forced -u 1024 - - for (u32 N_pos = 0; N_pos < 1024; N_pos++) - { - const u32 k = X[zSIZE - 4].x & (SCRYPT_N - 1); - - const u32 y = k / SCRYPT_TMTO; - - const u32 km = k - (y * SCRYPT_TMTO); - - uint4 T[STATE_CNT4]; - - for (u32 z = 0; z < zSIZE; z++) T[z] = V[CO]; - - for (u32 i = 0; i < km; i++) salsa_r ((PRIVATE_AS u32 *) T); - - for (u32 z = 0; z < zSIZE; z++) X[z] ^= T[z]; - - salsa_r ((PRIVATE_AS u32 *) X); - } -} - KERNEL_FQ void HC_ATTR_SEQ m28200_init (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exodus_t)) { - /** - * base - */ - const u64 gid = get_global_id (0); if (gid >= GID_CNT) return; - sha256_hmac_ctx_t sha256_hmac_ctx; + scrypt_pbkdf2 (pws[gid].i, pws[gid].pw_len, salt_bufs[SALT_POS_HOST].salt_buf, salt_bufs[SALT_POS_HOST].salt_len, tmps[gid].P, SCRYPT_CNT * 4); - sha256_hmac_init_global_swap (&sha256_hmac_ctx, pws[gid].i, pws[gid].pw_len); - - sha256_hmac_update_global (&sha256_hmac_ctx, salt_bufs[SALT_POS_HOST].salt_buf, salt_bufs[SALT_POS_HOST].salt_len); - - for (u32 i = 0, j = 1, k = 0; i < SCRYPT_CNT; i += 8, j += 1, k += 2) - { - sha256_hmac_ctx_t sha256_hmac_ctx2 = sha256_hmac_ctx; - - u32 w0[4]; - u32 w1[4]; - u32 w2[4]; - u32 w3[4]; - - w0[0] = j; - w0[1] = 0; - w0[2] = 0; - w0[3] = 0; - w1[0] = 0; - w1[1] = 0; - w1[2] = 0; - w1[3] = 0; - w2[0] = 0; - w2[1] = 0; - w2[2] = 0; - w2[3] = 0; - w3[0] = 0; - w3[1] = 0; - w3[2] = 0; - w3[3] = 0; - - sha256_hmac_update_64 (&sha256_hmac_ctx2, w0, w1, w2, w3, 4); - - sha256_hmac_final (&sha256_hmac_ctx2); - - u32 digest[8]; - - digest[0] = sha256_hmac_ctx2.opad.h[0]; - digest[1] = sha256_hmac_ctx2.opad.h[1]; - digest[2] = sha256_hmac_ctx2.opad.h[2]; - digest[3] = sha256_hmac_ctx2.opad.h[3]; - digest[4] = sha256_hmac_ctx2.opad.h[4]; - digest[5] = sha256_hmac_ctx2.opad.h[5]; - digest[6] = sha256_hmac_ctx2.opad.h[6]; - digest[7] = sha256_hmac_ctx2.opad.h[7]; - - #if defined IS_CUDA || defined IS_HIP - const uint4 tmp0 = make_uint4 (digest[0], digest[1], digest[2], digest[3]); - const uint4 tmp1 = make_uint4 (digest[4], digest[5], digest[6], digest[7]); - #elif defined IS_METAL - const uint4 tmp0 = uint4 (digest[0], digest[1], digest[2], digest[3]); - const uint4 tmp1 = uint4 (digest[4], digest[5], digest[6], digest[7]); - #else - const uint4 tmp0 = (uint4) (digest[0], digest[1], digest[2], digest[3]); - const uint4 tmp1 = (uint4) (digest[4], digest[5], digest[6], digest[7]); - #endif - - tmps[gid].P[k + 0] = tmp0; - tmps[gid].P[k + 1] = tmp1; - } - - for (u32 l = 0; l < SCRYPT_CNT4; l += 4) - { - uint4 T[4]; - - T[0] = tmps[gid].P[l + 0]; - T[1] = tmps[gid].P[l + 1]; - T[2] = tmps[gid].P[l + 2]; - T[3] = tmps[gid].P[l + 3]; - - T[0] = hc_swap32_4 (T[0]); - T[1] = hc_swap32_4 (T[1]); - T[2] = hc_swap32_4 (T[2]); - T[3] = hc_swap32_4 (T[3]); - - uint4 X[4]; - - #if defined IS_CUDA || defined IS_HIP - X[0] = make_uint4 (T[0].x, T[1].y, T[2].z, T[3].w); - X[1] = make_uint4 (T[1].x, T[2].y, T[3].z, T[0].w); - X[2] = make_uint4 (T[2].x, T[3].y, T[0].z, T[1].w); - X[3] = make_uint4 (T[3].x, T[0].y, T[1].z, T[2].w); - #elif defined IS_METAL - X[0] = uint4 (T[0].x, T[1].y, T[2].z, T[3].w); - X[1] = uint4 (T[1].x, T[2].y, T[3].z, T[0].w); - X[2] = uint4 (T[2].x, T[3].y, T[0].z, T[1].w); - X[3] = uint4 (T[3].x, T[0].y, T[1].z, T[2].w); - #else - X[0] = (uint4) (T[0].x, T[1].y, T[2].z, T[3].w); - X[1] = (uint4) (T[1].x, T[2].y, T[3].z, T[0].w); - X[2] = (uint4) (T[2].x, T[3].y, T[0].z, T[1].w); - X[3] = (uint4) (T[3].x, T[0].y, T[1].z, T[2].w); - #endif - - tmps[gid].P[l + 0] = X[0]; - tmps[gid].P[l + 1] = X[1]; - tmps[gid].P[l + 2] = X[2]; - tmps[gid].P[l + 3] = X[3]; - } + scrypt_blockmix_in (tmps[gid].P, SCRYPT_CNT * 4); } KERNEL_FQ void HC_ATTR_SEQ m28200_loop_prepare (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exodus_t)) { - /** - * base - */ - const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); if (gid >= GID_CNT) return; - // SCRYPT part, init V - GLOBAL_AS uint4 *d_scrypt0_buf = (GLOBAL_AS uint4 *) d_extra0_buf; GLOBAL_AS uint4 *d_scrypt1_buf = (GLOBAL_AS uint4 *) d_extra1_buf; GLOBAL_AS uint4 *d_scrypt2_buf = (GLOBAL_AS uint4 *) d_extra2_buf; GLOBAL_AS uint4 *d_scrypt3_buf = (GLOBAL_AS uint4 *) d_extra3_buf; + #ifdef IS_HIP + LOCAL_VK uint4 X_s[MAX_THREADS_PER_BLOCK][STATE_CNT4]; + LOCAL_AS uint4 *X = X_s[lid]; + #else uint4 X[STATE_CNT4]; + #endif const u32 P_offset = SALT_REPEAT * STATE_CNT4; @@ -434,13 +90,20 @@ KERNEL_FQ void HC_ATTR_SEQ m28200_loop (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exod uint4 X[STATE_CNT4]; + #ifdef IS_HIP + LOCAL_VK uint4 T_s[MAX_THREADS_PER_BLOCK][STATE_CNT4]; + LOCAL_AS uint4 *T = T_s[lid]; + #else + uint4 T[STATE_CNT4]; + #endif + const u32 P_offset = SALT_REPEAT * STATE_CNT4; GLOBAL_AS uint4 *P = tmps[gid].P + P_offset; for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - scrypt_smix_loop (X, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid); + scrypt_smix_loop (X, T, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid); for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } @@ -504,105 +167,22 @@ KERNEL_FQ void HC_ATTR_SEQ m28200_comp (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exod if (gid >= GID_CNT) return; - /** - * 2nd pbkdf2, creates B - */ + scrypt_blockmix_out (tmps[gid].P, SCRYPT_CNT * 4); - u32 w0[4]; - u32 w1[4]; - u32 w2[4]; - u32 w3[4]; - - sha256_hmac_ctx_t ctx; - - sha256_hmac_init_global_swap (&ctx, pws[gid].i, pws[gid].pw_len); - - for (u32 l = 0; l < SCRYPT_CNT4; l += 4) - { - uint4 X[4]; - - X[0] = tmps[gid].P[l + 0]; - X[1] = tmps[gid].P[l + 1]; - X[2] = tmps[gid].P[l + 2]; - X[3] = tmps[gid].P[l + 3]; - - uint4 T[4]; - - #if defined IS_CUDA || defined IS_HIP - T[0] = make_uint4 (X[0].x, X[3].y, X[2].z, X[1].w); - T[1] = make_uint4 (X[1].x, X[0].y, X[3].z, X[2].w); - T[2] = make_uint4 (X[2].x, X[1].y, X[0].z, X[3].w); - T[3] = make_uint4 (X[3].x, X[2].y, X[1].z, X[0].w); - #elif defined IS_METAL - T[0] = uint4 (X[0].x, X[3].y, X[2].z, X[1].w); - T[1] = uint4 (X[1].x, X[0].y, X[3].z, X[2].w); - T[2] = uint4 (X[2].x, X[1].y, X[0].z, X[3].w); - T[3] = uint4 (X[3].x, X[2].y, X[1].z, X[0].w); - #else - T[0] = (uint4) (X[0].x, X[3].y, X[2].z, X[1].w); - T[1] = (uint4) (X[1].x, X[0].y, X[3].z, X[2].w); - T[2] = (uint4) (X[2].x, X[1].y, X[0].z, X[3].w); - T[3] = (uint4) (X[3].x, X[2].y, X[1].z, X[0].w); - #endif - - T[0] = hc_swap32_4 (T[0]); - T[1] = hc_swap32_4 (T[1]); - T[2] = hc_swap32_4 (T[2]); - T[3] = hc_swap32_4 (T[3]); - - w0[0] = T[0].x; - w0[1] = T[0].y; - w0[2] = T[0].z; - w0[3] = T[0].w; - w1[0] = T[1].x; - w1[1] = T[1].y; - w1[2] = T[1].z; - w1[3] = T[1].w; - w2[0] = T[2].x; - w2[1] = T[2].y; - w2[2] = T[2].z; - w2[3] = T[2].w; - w3[0] = T[3].x; - w3[1] = T[3].y; - w3[2] = T[3].z; - w3[3] = T[3].w; - - sha256_hmac_update_64 (&ctx, w0, w1, w2, w3, 64); - } - - w0[0] = 1; - w0[1] = 0; - w0[2] = 0; - w0[3] = 0; - w1[0] = 0; - w1[1] = 0; - w1[2] = 0; - w1[3] = 0; - w2[0] = 0; - w2[1] = 0; - w2[2] = 0; - w2[3] = 0; - w3[0] = 0; - w3[1] = 0; - w3[2] = 0; - w3[3] = 0; - - sha256_hmac_update_64 (&ctx, w0, w1, w2, w3, 4); - - sha256_hmac_final (&ctx); + scrypt_pbkdf2 (pws[gid].i, pws[gid].pw_len, (GLOBAL_AS const u32 *) tmps[gid].P, SCRYPT_CNT * 4, tmps[gid].P, 32); // GCM stuff u32 ukey[8]; - ukey[0] = ctx.opad.h[0]; - ukey[1] = ctx.opad.h[1]; - ukey[2] = ctx.opad.h[2]; - ukey[3] = ctx.opad.h[3]; - ukey[4] = ctx.opad.h[4]; - ukey[5] = ctx.opad.h[5]; - ukey[6] = ctx.opad.h[6]; - ukey[7] = ctx.opad.h[7]; + ukey[0] = hc_swap32_S (tmps[gid].P[0].x); + ukey[1] = hc_swap32_S (tmps[gid].P[0].y); + ukey[2] = hc_swap32_S (tmps[gid].P[0].z); + ukey[3] = hc_swap32_S (tmps[gid].P[0].w); + ukey[4] = hc_swap32_S (tmps[gid].P[1].x); + ukey[5] = hc_swap32_S (tmps[gid].P[1].y); + ukey[6] = hc_swap32_S (tmps[gid].P[1].z); + ukey[7] = hc_swap32_S (tmps[gid].P[1].w); u32 key[60] = { 0 }; u32 subKey[4] = { 0 }; diff --git a/OpenCL/m29800-pure.cl b/OpenCL/m29800-pure.cl index b543ebbca..51b208e3c 100644 --- a/OpenCL/m29800-pure.cl +++ b/OpenCL/m29800-pure.cl @@ -9,6 +9,7 @@ #include M2S(INCLUDE_PATH/inc_platform.cl) #include M2S(INCLUDE_PATH/inc_common.cl) #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) +#include M2S(INCLUDE_PATH/inc_hash_scrypt.cl) #include M2S(INCLUDE_PATH/inc_cipher_aes.cl) #endif @@ -22,255 +23,8 @@ typedef struct } scrypt_tmp_t; -#if defined IS_CUDA || defined IS_HIP - -inline __device__ uint4 operator & (const uint4 a, const u32 b) { return make_uint4 ((a.x & b ), (a.y & b ), (a.z & b ), (a.w & b )); } -inline __device__ uint4 operator << (const uint4 a, const u32 b) { return make_uint4 ((a.x << b ), (a.y << b ), (a.z << b ), (a.w << b )); } -inline __device__ uint4 operator >> (const uint4 a, const u32 b) { return make_uint4 ((a.x >> b ), (a.y >> b ), (a.z >> b ), (a.w >> b )); } -inline __device__ uint4 operator + (const uint4 a, const uint4 b) { return make_uint4 ((a.x + b.x), (a.y + b.y), (a.z + b.z), (a.w + b.w)); } -inline __device__ uint4 operator ^ (const uint4 a, const uint4 b) { return make_uint4 ((a.x ^ b.x), (a.y ^ b.y), (a.z ^ b.z), (a.w ^ b.w)); } -inline __device__ uint4 operator | (const uint4 a, const uint4 b) { return make_uint4 ((a.x | b.x), (a.y | b.y), (a.z | b.z), (a.w | b.w)); } -inline __device__ void operator ^= ( uint4 &a, const uint4 b) { a.x ^= b.x; a.y ^= b.y; a.z ^= b.z; a.w ^= b.w; } - -inline __device__ uint4 rotate (const uint4 a, const int n) -{ - return ((a << n) | ((a >> (32 - n)))); -} - -#endif - -DECLSPEC uint4 hc_swap32_4 (uint4 v) -{ - return (rotate ((v & 0x00FF00FF), 24u) | rotate ((v & 0xFF00FF00), 8u)); -} - -#define GET_SCRYPT_CNT(r,p) (2 * (r) * 16 * (p)) -#define GET_SMIX_CNT(r,N) (2 * (r) * 16 * (N)) -#define GET_STATE_CNT(r) (2 * (r) * 16) - -#define SCRYPT_CNT GET_SCRYPT_CNT (SCRYPT_R, SCRYPT_P) -#define SCRYPT_CNT4 (SCRYPT_CNT / 4) -#define STATE_CNT GET_STATE_CNT (SCRYPT_R) -#define STATE_CNT4 (STATE_CNT / 4) - -#define Coord(xd4,y,z) (((xd4) * ySIZE * zSIZE) + ((y) * zSIZE) + (z)) -#define CO Coord(xd4,y,z) - -DECLSPEC void salsa_r (PRIVATE_AS u32 *TI) -{ - u32 x[16]; - - for (int j = 0; j < 16; j++) x[j] = TI[STATE_CNT - 16 + j]; - - for (int i = 0; i < STATE_CNT; i += 16) - { - for (int j = 0; j < 16; j++) - { - x[j] ^= TI[i + j]; - } - - for (int j = 0; j < 16; j++) - { - TI[i + j] = x[j]; - } - - for (int r = 0; r < 4; r++) - { - u32 t0, t1, t2, t3; - - t0 = x[ 0] + x[12]; - t1 = x[ 1] + x[13]; - t2 = x[ 2] + x[14]; - t3 = x[ 3] + x[15]; - x[ 4] ^= hc_rotl32_S (t0, 7); - x[ 5] ^= hc_rotl32_S (t1, 7); - x[ 6] ^= hc_rotl32_S (t2, 7); - x[ 7] ^= hc_rotl32_S (t3, 7); - - t0 = x[ 4] + x[ 0]; - t1 = x[ 5] + x[ 1]; - t2 = x[ 6] + x[ 2]; - t3 = x[ 7] + x[ 3]; - x[ 8] ^= hc_rotl32_S (t0, 9); - x[ 9] ^= hc_rotl32_S (t1, 9); - x[10] ^= hc_rotl32_S (t2, 9); - x[11] ^= hc_rotl32_S (t3, 9); - - t0 = x[ 8] + x[ 4]; - t1 = x[ 9] + x[ 5]; - t2 = x[10] + x[ 6]; - t3 = x[11] + x[ 7]; - x[12] ^= hc_rotl32_S (t0, 13); - x[13] ^= hc_rotl32_S (t1, 13); - x[14] ^= hc_rotl32_S (t2, 13); - x[15] ^= hc_rotl32_S (t3, 13); - - t0 = x[12] + x[ 8]; - t1 = x[13] + x[ 9]; - t2 = x[14] + x[10]; - t3 = x[15] + x[11]; - x[ 0] ^= hc_rotl32_S (t0, 18); - x[ 1] ^= hc_rotl32_S (t1, 18); - x[ 2] ^= hc_rotl32_S (t2, 18); - x[ 3] ^= hc_rotl32_S (t3, 18); - - t0 = x[ 4]; x[ 4] = x[ 7]; x[ 7] = x[ 6]; x[ 6] = x[ 5]; x[ 5] = t0; - t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; - t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; - t0 = x[12]; x[12] = x[13]; x[13] = x[14]; x[14] = x[15]; x[15] = t0; - - t0 = x[ 0] + x[ 4]; - t1 = x[ 1] + x[ 5]; - t2 = x[ 2] + x[ 6]; - t3 = x[ 3] + x[ 7]; - x[12] ^= hc_rotl32_S (t0, 7); - x[13] ^= hc_rotl32_S (t1, 7); - x[14] ^= hc_rotl32_S (t2, 7); - x[15] ^= hc_rotl32_S (t3, 7); - - t0 = x[12] + x[ 0]; - t1 = x[13] + x[ 1]; - t2 = x[14] + x[ 2]; - t3 = x[15] + x[ 3]; - x[ 8] ^= hc_rotl32_S (t0, 9); - x[ 9] ^= hc_rotl32_S (t1, 9); - x[10] ^= hc_rotl32_S (t2, 9); - x[11] ^= hc_rotl32_S (t3, 9); - - t0 = x[ 8] + x[12]; - t1 = x[ 9] + x[13]; - t2 = x[10] + x[14]; - t3 = x[11] + x[15]; - x[ 4] ^= hc_rotl32_S (t0, 13); - x[ 5] ^= hc_rotl32_S (t1, 13); - x[ 6] ^= hc_rotl32_S (t2, 13); - x[ 7] ^= hc_rotl32_S (t3, 13); - - t0 = x[ 4] + x[ 8]; - t1 = x[ 5] + x[ 9]; - t2 = x[ 6] + x[10]; - t3 = x[ 7] + x[11]; - x[ 0] ^= hc_rotl32_S (t0, 18); - x[ 1] ^= hc_rotl32_S (t1, 18); - x[ 2] ^= hc_rotl32_S (t2, 18); - x[ 3] ^= hc_rotl32_S (t3, 18); - - t0 = x[ 4]; x[ 4] = x[ 5]; x[ 5] = x[ 6]; x[ 6] = x[ 7]; x[ 7] = t0; - t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; - t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; - t0 = x[15]; x[15] = x[14]; x[14] = x[13]; x[13] = x[12]; x[12] = t0; - } - - for (int j = 0; j < 16; j++) - { - x[j] += TI[i + j]; - } - - for (int j = 0; j < 16; j++) - { - TI[i + j] = x[j]; - } - } - - #if SCRYPT_R > 1 - - u32 TT[STATE_CNT / 2]; - - for (int dst_off = 0, src_off = 16; src_off < STATE_CNT; dst_off += 16, src_off += 32) - { - for (int j = 0; j < 16; j++) TT[dst_off + j] = TI[src_off + j]; - } - - for (int dst_off = 16, src_off = 32; src_off < STATE_CNT; dst_off += 16, src_off += 32) - { - for (int j = 0; j < 16; j++) TI[dst_off + j] = TI[src_off + j]; - } - - for (int dst_off = STATE_CNT / 2, src_off = 0; dst_off < STATE_CNT; dst_off += 16, src_off += 16) - { - for (int j = 0; j < 16; j++) TI[dst_off + j] = TT[src_off + j]; - } - - #endif - -} - -DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) -{ - const u32 ySIZE = SCRYPT_N / SCRYPT_TMTO; - const u32 zSIZE = STATE_CNT4; - - const u32 x = (u32) gid; - - const u32 xd4 = x / 4; - const u32 xm4 = x & 3; - - GLOBAL_AS uint4 *V; - - switch (xm4) - { - case 0: V = V0; break; - case 1: V = V1; break; - case 2: V = V2; break; - case 3: V = V3; break; - } - - for (u32 y = 0; y < ySIZE; y++) - { - for (u32 z = 0; z < zSIZE; z++) V[CO] = X[z]; - - for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r ((PRIVATE_AS u32 *) X); - } -} - -DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) -{ - const u32 ySIZE = SCRYPT_N / SCRYPT_TMTO; - const u32 zSIZE = STATE_CNT4; - - const u32 x = (u32) gid; - - const u32 xd4 = x / 4; - const u32 xm4 = x & 3; - - GLOBAL_AS uint4 *V; - - switch (xm4) - { - case 0: V = V0; break; - case 1: V = V1; break; - case 2: V = V2; break; - case 3: V = V3; break; - } - - // note: fixed 1024 iterations = forced -u 1024 - - for (u32 N_pos = 0; N_pos < 1024; N_pos++) - { - const u32 k = X[zSIZE - 4].x & (SCRYPT_N - 1); - - const u32 y = k / SCRYPT_TMTO; - - const u32 km = k - (y * SCRYPT_TMTO); - - uint4 T[STATE_CNT4]; - - for (u32 z = 0; z < zSIZE; z++) T[z] = V[CO]; - - for (u32 i = 0; i < km; i++) salsa_r ((PRIVATE_AS u32 *) T); - - for (u32 z = 0; z < zSIZE; z++) X[z] ^= T[z]; - - salsa_r ((PRIVATE_AS u32 *) X); - } -} - KERNEL_FQ void HC_ATTR_SEQ m29800_init (KERN_ATTR_TMPS (scrypt_tmp_t)) { - /** - * base - */ - const u64 gid = get_global_id (0); if (gid >= GID_CNT) return; @@ -286,7 +40,6 @@ KERNEL_FQ void HC_ATTR_SEQ m29800_init (KERN_ATTR_TMPS (scrypt_tmp_t)) if (w_len == -1) return; // utf16le to utf16be - for (int i = 0, j = 0; i < w_len; i += 4, j += 1) { w[j] = ((w[j] >> 8) & 0x00ff00ff) @@ -307,121 +60,29 @@ KERNEL_FQ void HC_ATTR_SEQ m29800_init (KERN_ATTR_TMPS (scrypt_tmp_t)) sha256_hmac_update_64 (&sha256_hmac_ctx, x0, x1, x2, x3, 8); - for (u32 i = 0, j = 1, k = 0; i < SCRYPT_CNT; i += 8, j += 1, k += 2) - { - sha256_hmac_ctx_t sha256_hmac_ctx2 = sha256_hmac_ctx; + scrypt_pbkdf2_body (&sha256_hmac_ctx, tmps[gid].P, SCRYPT_CNT * 4); - u32 w0[4]; - u32 w1[4]; - u32 w2[4]; - u32 w3[4]; - - w0[0] = j; - w0[1] = 0; - w0[2] = 0; - w0[3] = 0; - w1[0] = 0; - w1[1] = 0; - w1[2] = 0; - w1[3] = 0; - w2[0] = 0; - w2[1] = 0; - w2[2] = 0; - w2[3] = 0; - w3[0] = 0; - w3[1] = 0; - w3[2] = 0; - w3[3] = 0; - - sha256_hmac_update_64 (&sha256_hmac_ctx2, w0, w1, w2, w3, 4); - - sha256_hmac_final (&sha256_hmac_ctx2); - - u32 digest[8]; - - digest[0] = sha256_hmac_ctx2.opad.h[0]; - digest[1] = sha256_hmac_ctx2.opad.h[1]; - digest[2] = sha256_hmac_ctx2.opad.h[2]; - digest[3] = sha256_hmac_ctx2.opad.h[3]; - digest[4] = sha256_hmac_ctx2.opad.h[4]; - digest[5] = sha256_hmac_ctx2.opad.h[5]; - digest[6] = sha256_hmac_ctx2.opad.h[6]; - digest[7] = sha256_hmac_ctx2.opad.h[7]; - - #if defined IS_CUDA || defined IS_HIP - const uint4 tmp0 = make_uint4 (digest[0], digest[1], digest[2], digest[3]); - const uint4 tmp1 = make_uint4 (digest[4], digest[5], digest[6], digest[7]); - #elif defined IS_METAL - const uint4 tmp0 = uint4 (digest[0], digest[1], digest[2], digest[3]); - const uint4 tmp1 = uint4 (digest[4], digest[5], digest[6], digest[7]); - #else - const uint4 tmp0 = (uint4) (digest[0], digest[1], digest[2], digest[3]); - const uint4 tmp1 = (uint4) (digest[4], digest[5], digest[6], digest[7]); - #endif - - tmps[gid].P[k + 0] = tmp0; - tmps[gid].P[k + 1] = tmp1; - } - - for (u32 l = 0; l < SCRYPT_CNT4; l += 4) - { - uint4 T[4]; - - T[0] = tmps[gid].P[l + 0]; - T[1] = tmps[gid].P[l + 1]; - T[2] = tmps[gid].P[l + 2]; - T[3] = tmps[gid].P[l + 3]; - - T[0] = hc_swap32_4 (T[0]); - T[1] = hc_swap32_4 (T[1]); - T[2] = hc_swap32_4 (T[2]); - T[3] = hc_swap32_4 (T[3]); - - uint4 X[4]; - - #if defined IS_CUDA || defined IS_HIP - X[0] = make_uint4 (T[0].x, T[1].y, T[2].z, T[3].w); - X[1] = make_uint4 (T[1].x, T[2].y, T[3].z, T[0].w); - X[2] = make_uint4 (T[2].x, T[3].y, T[0].z, T[1].w); - X[3] = make_uint4 (T[3].x, T[0].y, T[1].z, T[2].w); - #elif defined IS_METAL - X[0] = uint4 (T[0].x, T[1].y, T[2].z, T[3].w); - X[1] = uint4 (T[1].x, T[2].y, T[3].z, T[0].w); - X[2] = uint4 (T[2].x, T[3].y, T[0].z, T[1].w); - X[3] = uint4 (T[3].x, T[0].y, T[1].z, T[2].w); - #else - X[0] = (uint4) (T[0].x, T[1].y, T[2].z, T[3].w); - X[1] = (uint4) (T[1].x, T[2].y, T[3].z, T[0].w); - X[2] = (uint4) (T[2].x, T[3].y, T[0].z, T[1].w); - X[3] = (uint4) (T[3].x, T[0].y, T[1].z, T[2].w); - #endif - - tmps[gid].P[l + 0] = X[0]; - tmps[gid].P[l + 1] = X[1]; - tmps[gid].P[l + 2] = X[2]; - tmps[gid].P[l + 3] = X[3]; - } + scrypt_blockmix_in (tmps[gid].P, SCRYPT_CNT * 4); } KERNEL_FQ void HC_ATTR_SEQ m29800_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) { - /** - * base - */ - const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); if (gid >= GID_CNT) return; - // SCRYPT part, init V - GLOBAL_AS uint4 *d_scrypt0_buf = (GLOBAL_AS uint4 *) d_extra0_buf; GLOBAL_AS uint4 *d_scrypt1_buf = (GLOBAL_AS uint4 *) d_extra1_buf; GLOBAL_AS uint4 *d_scrypt2_buf = (GLOBAL_AS uint4 *) d_extra2_buf; GLOBAL_AS uint4 *d_scrypt3_buf = (GLOBAL_AS uint4 *) d_extra3_buf; + #ifdef IS_HIP + LOCAL_VK uint4 X_s[MAX_THREADS_PER_BLOCK][STATE_CNT4]; + LOCAL_AS uint4 *X = X_s[lid]; + #else uint4 X[STATE_CNT4]; + #endif const u32 P_offset = SALT_REPEAT * STATE_CNT4; @@ -448,13 +109,20 @@ KERNEL_FQ void HC_ATTR_SEQ m29800_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) uint4 X[STATE_CNT4]; + #ifdef IS_HIP + LOCAL_VK uint4 T_s[MAX_THREADS_PER_BLOCK][STATE_CNT4]; + LOCAL_AS uint4 *T = T_s[lid]; + #else + uint4 T[STATE_CNT4]; + #endif + const u32 P_offset = SALT_REPEAT * STATE_CNT4; GLOBAL_AS uint4 *P = tmps[gid].P + P_offset; for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - scrypt_smix_loop (X, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid); + scrypt_smix_loop (X, T, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid); for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } @@ -533,114 +201,40 @@ KERNEL_FQ void HC_ATTR_SEQ m29800_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) if (w_len == -1) return; // utf16le to utf16be - for (int i = 0, j = 0; i < w_len; i += 4, j += 1) { w[j] = ((w[j] >> 8) & 0x00ff00ff) | ((w[j] << 8) & 0xff00ff00); } + scrypt_blockmix_out (tmps[gid].P, SCRYPT_CNT * 4); + sha256_hmac_ctx_t ctx; sha256_hmac_init_swap (&ctx, w, w_len); - u32 w0[4]; - u32 w1[4]; - u32 w2[4]; - u32 w3[4]; + sha256_hmac_update_global_swap (&ctx, (GLOBAL_AS const u32 *) tmps[gid].P, SCRYPT_CNT * 4); - for (u32 l = 0; l < SCRYPT_CNT4; l += 4) - { - uint4 X[4]; - - X[0] = tmps[gid].P[l + 0]; - X[1] = tmps[gid].P[l + 1]; - X[2] = tmps[gid].P[l + 2]; - X[3] = tmps[gid].P[l + 3]; - - uint4 T[4]; - - #if defined IS_CUDA || defined IS_HIP - T[0] = make_uint4 (X[0].x, X[3].y, X[2].z, X[1].w); - T[1] = make_uint4 (X[1].x, X[0].y, X[3].z, X[2].w); - T[2] = make_uint4 (X[2].x, X[1].y, X[0].z, X[3].w); - T[3] = make_uint4 (X[3].x, X[2].y, X[1].z, X[0].w); - #elif defined IS_METAL - T[0] = uint4 (X[0].x, X[3].y, X[2].z, X[1].w); - T[1] = uint4 (X[1].x, X[0].y, X[3].z, X[2].w); - T[2] = uint4 (X[2].x, X[1].y, X[0].z, X[3].w); - T[3] = uint4 (X[3].x, X[2].y, X[1].z, X[0].w); - #else - T[0] = (uint4) (X[0].x, X[3].y, X[2].z, X[1].w); - T[1] = (uint4) (X[1].x, X[0].y, X[3].z, X[2].w); - T[2] = (uint4) (X[2].x, X[1].y, X[0].z, X[3].w); - T[3] = (uint4) (X[3].x, X[2].y, X[1].z, X[0].w); - #endif - - T[0] = hc_swap32_4 (T[0]); - T[1] = hc_swap32_4 (T[1]); - T[2] = hc_swap32_4 (T[2]); - T[3] = hc_swap32_4 (T[3]); - - w0[0] = T[0].x; - w0[1] = T[0].y; - w0[2] = T[0].z; - w0[3] = T[0].w; - w1[0] = T[1].x; - w1[1] = T[1].y; - w1[2] = T[1].z; - w1[3] = T[1].w; - w2[0] = T[2].x; - w2[1] = T[2].y; - w2[2] = T[2].z; - w2[3] = T[2].w; - w3[0] = T[3].x; - w3[1] = T[3].y; - w3[2] = T[3].z; - w3[3] = T[3].w; - - sha256_hmac_update_64 (&ctx, w0, w1, w2, w3, 64); - } - - w0[0] = 1; - w0[1] = 0; - w0[2] = 0; - w0[3] = 0; - w1[0] = 0; - w1[1] = 0; - w1[2] = 0; - w1[3] = 0; - w2[0] = 0; - w2[1] = 0; - w2[2] = 0; - w2[3] = 0; - w3[0] = 0; - w3[1] = 0; - w3[2] = 0; - w3[3] = 0; - - sha256_hmac_update_64 (&ctx, w0, w1, w2, w3, 4); - - sha256_hmac_final (&ctx); + scrypt_pbkdf2_body (&ctx, tmps[gid].P, 16); // AES256-CBC decrypt u32 key[8]; - key[0] = ctx.opad.h[0]; - key[1] = ctx.opad.h[1]; - key[2] = ctx.opad.h[2]; - key[3] = ctx.opad.h[3]; - key[4] = ctx.opad.h[4]; - key[5] = ctx.opad.h[5]; - key[6] = ctx.opad.h[6]; - key[7] = ctx.opad.h[7]; + key[0] = tmps[gid].P[0].x; + key[1] = tmps[gid].P[0].y; + key[2] = tmps[gid].P[0].z; + key[3] = tmps[gid].P[0].w; + key[4] = tmps[gid].P[1].x; + key[5] = tmps[gid].P[1].y; + key[6] = tmps[gid].P[1].z; + key[7] = tmps[gid].P[1].w; #define KEYLEN 60 u32 ks[KEYLEN]; - AES256_set_decrypt_key (ks, key, s_te0, s_te1, s_te2, s_te3, s_td0, s_td1, s_td2, s_td3); + aes256_set_decrypt_key (ks, key, s_te0, s_te1, s_te2, s_te3, s_td0, s_td1, s_td2, s_td3); u32 iv[4]; diff --git a/src/modules/module_08900.c b/src/modules/module_08900.c index 42fd456be..3e2af586a 100644 --- a/src/modules/module_08900.c +++ b/src/modules/module_08900.c @@ -26,8 +26,7 @@ static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_LE | OPTS_TYPE_MP_MULTI_DISABLE | OPTS_TYPE_NATIVE_THREADS - | OPTS_TYPE_LOOP_PREPARE - | OPTS_TYPE_SELF_TEST_DISABLE; + | OPTS_TYPE_LOOP_PREPARE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "SCRYPT:16384:8:1:OTEyNzU0ODg=:Cc8SPjRH1hFQhuIPCdF51uNGtJ2aOY/isuoMlMUsJ8c="; @@ -55,240 +54,7 @@ static const u64 SCRYPT_N = 16384; static const u64 SCRYPT_R = 8; static const u64 SCRYPT_P = 1; -u32 module_kernel_loops_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_loops_min = 1024; - - return kernel_loops_min; -} - -u32 module_kernel_loops_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_loops_max = 1024; - - return kernel_loops_max; -} - -u32 module_kernel_threads_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_threads_min = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; - - return kernel_threads_min; -} - -u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_threads_max = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; - - return kernel_threads_max; -} - -u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - // this overrides the reductions of PW_MAX in case optimized kernel is selected - // IOW, even in optimized kernel mode it support length 256 - - const u32 pw_max = PW_MAX; - - return pw_max; -} - -u32 tmto = 0; - -const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes, const u32 device_id, const u32 kernel_accel) -{ - // preprocess tmto in case user has overridden - // it's important to set to 0 otherwise so we can postprocess tmto in that case - - tmto = (user_options->scrypt_tmto_chgd == true) ? user_options->scrypt_tmto : 0; - - // we enforce the same configuration for all hashes, so this should be fine - - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - - const u64 size_per_accel = (128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra)) >> tmto; - - int lines_sz = 4096; - char *lines_buf = hcmalloc (lines_sz); - int lines_pos = 0; - - hc_device_param_t *device_param = &backend_ctx->devices_param[device_id]; - - const u32 device_processors = device_param->device_processors; - - const u64 available_mem = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)); - - u32 kernel_accel_new = device_processors; - - if (kernel_accel) - { - // from command line or tuning db has priority - - kernel_accel_new = user_options->kernel_accel; - } - else - { - // find a nice kernel_accel programmatically - - if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) - { - if ((size_per_accel * device_processors) > available_mem) // not enough memory - { - const float multi = (float) available_mem / size_per_accel; - - int accel_multi; - - for (accel_multi = 1; accel_multi <= 2; accel_multi++) - { - kernel_accel_new = multi * (1 << accel_multi); - - if (kernel_accel_new >= device_processors) break; - } - - // we need some space for tmps[], ... - - kernel_accel_new -= (1 << accel_multi); - - // clamp if close to device processors -- 10% good? - - if ((kernel_accel_new > device_processors) && ((kernel_accel_new - device_processors) <= (device_processors / 10))) - { - kernel_accel_new = device_processors; - } - } - else - { - for (int i = 1; i <= 8; i++) - { - if ((size_per_accel * device_processors * i) < available_mem) - { - kernel_accel_new = device_processors * i; - } - } - } - } - else - { - for (int i = 1; i <= 8; i++) - { - if ((size_per_accel * device_processors * i) < available_mem) - { - kernel_accel_new = device_processors * i; - } - } - } - } - - // fix tmto if user allows - - if (tmto == 0) - { - const u32 tmto_start = 1; - const u32 tmto_stop = 5; - - for (u32 tmto_new = tmto_start; tmto_new <= tmto_stop; tmto_new++) - { - if (available_mem > (kernel_accel_new * (size_per_accel >> tmto_new))) - { - tmto = tmto_new; - - break; - } - } - } - - char *new_device_name = hcstrdup (device_param->device_name); - - for (size_t i = 0; i < strlen (new_device_name); i++) - { - if (new_device_name[i] == ' ') new_device_name[i] = '_'; - } - - lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", new_device_name, user_options->hash_mode, kernel_accel_new); - - hcfree (new_device_name); - - return lines_buf; -} - -u64 module_extra_buffer_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - // we need to set the self-test hash settings to pass the self-test - // the decoder for the self-test is called after this function - - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - - const u64 size_per_accel = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); - - u64 size_scrypt = size_per_accel * device_param->kernel_accel_max; - - return size_scrypt / (1 << tmto); -} - -u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u64 tmp_size = 0; // we'll add some later - - return tmp_size; -} - -u64 module_extra_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes) -{ - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 scrypt_p = (hashes->salts_buf[0].scrypt_p) ? hashes->salts_buf[0].scrypt_p : SCRYPT_P; - - // we need to check that all hashes have the same scrypt settings - - for (u32 i = 1; i < hashes->salts_cnt; i++) - { - if ((hashes->salts_buf[i].scrypt_N != scrypt_N) - || (hashes->salts_buf[i].scrypt_r != scrypt_r) - || (hashes->salts_buf[i].scrypt_p != scrypt_p)) - { - return -1; - } - } - - const u64 tmp_size = 128ULL * scrypt_r * scrypt_p; - - return tmp_size; -} - -bool module_warmup_disable (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - return true; -} - -char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 scrypt_p = (hashes->salts_buf[0].scrypt_p) ? hashes->salts_buf[0].scrypt_p : SCRYPT_P; - - const u64 extra_buffer_size = device_param->extra_buffer_size; - - const u64 kernel_power_max = ((OPTS_TYPE & OPTS_TYPE_MP_MULTI_DISABLE) ? 1 : device_param->device_processors) * device_param->kernel_threads_max * device_param->kernel_accel_max; - - const u64 size_scrypt = 128ULL * scrypt_r * scrypt_N; - - const u64 scrypt_tmto_final = (kernel_power_max * size_scrypt) / extra_buffer_size; - - const u64 tmp_size = 128ULL * scrypt_r * scrypt_p; - - char *jit_build_options = NULL; - - hc_asprintf (&jit_build_options, "-D SCRYPT_N=%u -D SCRYPT_R=%u -D SCRYPT_P=%u -D SCRYPT_TMTO=%" PRIu64 " -D SCRYPT_TMP_ELEM=%" PRIu64, - hashes->salts_buf[0].scrypt_N, - hashes->salts_buf[0].scrypt_r, - hashes->salts_buf[0].scrypt_p, - scrypt_tmto_final, - tmp_size / 16); - - return jit_build_options; -} +#include "scrypt_common.c" int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len) { @@ -429,9 +195,9 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_dgst_size = module_dgst_size; module_ctx->module_dictstat_disable = MODULE_DEFAULT; module_ctx->module_esalt_size = MODULE_DEFAULT; - module_ctx->module_extra_buffer_size = module_extra_buffer_size; - module_ctx->module_extra_tmp_size = module_extra_tmp_size; - module_ctx->module_extra_tuningdb_block = module_extra_tuningdb_block; + module_ctx->module_extra_buffer_size = scrypt_module_extra_buffer_size; + module_ctx->module_extra_tmp_size = scrypt_module_extra_tmp_size; + module_ctx->module_extra_tuningdb_block = scrypt_module_extra_tuningdb_block; module_ctx->module_forced_outfile_format = MODULE_DEFAULT; module_ctx->module_hash_binary_count = MODULE_DEFAULT; module_ctx->module_hash_binary_parse = MODULE_DEFAULT; @@ -457,14 +223,14 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = module_jit_build_options; + module_ctx->module_jit_build_options = scrypt_module_jit_build_options; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; - module_ctx->module_kernel_loops_max = module_kernel_loops_max; - module_ctx->module_kernel_loops_min = module_kernel_loops_min; - module_ctx->module_kernel_threads_max = module_kernel_threads_max; - module_ctx->module_kernel_threads_min = module_kernel_threads_min; + module_ctx->module_kernel_loops_max = scrypt_module_kernel_loops_max; + module_ctx->module_kernel_loops_min = scrypt_module_kernel_loops_min; + module_ctx->module_kernel_threads_max = scrypt_module_kernel_threads_max; + module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; module_ctx->module_opti_type = module_opti_type; @@ -475,7 +241,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_potfile_disable = MODULE_DEFAULT; module_ctx->module_potfile_keep_all_hashes = MODULE_DEFAULT; module_ctx->module_pwdump_column = MODULE_DEFAULT; - module_ctx->module_pw_max = module_pw_max; + module_ctx->module_pw_max = MODULE_DEFAULT; module_ctx->module_pw_min = MODULE_DEFAULT; module_ctx->module_salt_max = MODULE_DEFAULT; module_ctx->module_salt_min = MODULE_DEFAULT; @@ -483,7 +249,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_separator = MODULE_DEFAULT; module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; - module_ctx->module_tmp_size = module_tmp_size; + module_ctx->module_tmp_size = scrypt_module_tmp_size; module_ctx->module_unstable_warning = MODULE_DEFAULT; - module_ctx->module_warmup_disable = module_warmup_disable; + module_ctx->module_warmup_disable = scrypt_module_warmup_disable; } diff --git a/src/modules/module_09300.c b/src/modules/module_09300.c index 4f0f5bbb5..05f25e62b 100644 --- a/src/modules/module_09300.c +++ b/src/modules/module_09300.c @@ -26,8 +26,7 @@ static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_LE | OPTS_TYPE_MP_MULTI_DISABLE | OPTS_TYPE_NATIVE_THREADS - | OPTS_TYPE_LOOP_PREPARE - | OPTS_TYPE_SELF_TEST_DISABLE; + | OPTS_TYPE_LOOP_PREPARE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "$9$87023684531115$phio0TBQwaO7KZ8toQFyGFyDvyOzidaypRWN0uKX0hU"; @@ -55,240 +54,7 @@ static const u64 SCRYPT_N = 16384; static const u64 SCRYPT_R = 1; static const u64 SCRYPT_P = 1; -u32 module_kernel_loops_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_loops_min = 1024; - - return kernel_loops_min; -} - -u32 module_kernel_loops_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_loops_max = 1024; - - return kernel_loops_max; -} - -u32 module_kernel_threads_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_threads_min = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; - - return kernel_threads_min; -} - -u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_threads_max = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; - - return kernel_threads_max; -} - -u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - // this overrides the reductions of PW_MAX in case optimized kernel is selected - // IOW, even in optimized kernel mode it support length 256 - - const u32 pw_max = PW_MAX; - - return pw_max; -} - -u32 tmto = 0; - -const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes, const u32 device_id, const u32 kernel_accel) -{ - // preprocess tmto in case user has overridden - // it's important to set to 0 otherwise so we can postprocess tmto in that case - - tmto = (user_options->scrypt_tmto_chgd == true) ? user_options->scrypt_tmto : 0; - - // we enforce the same configuration for all hashes, so this should be fine - - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - - const u64 size_per_accel = (128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra)) >> tmto; - - int lines_sz = 4096; - char *lines_buf = hcmalloc (lines_sz); - int lines_pos = 0; - - hc_device_param_t *device_param = &backend_ctx->devices_param[device_id]; - - const u32 device_processors = device_param->device_processors; - - const u64 available_mem = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)); - - u32 kernel_accel_new = device_processors; - - if (kernel_accel) - { - // from command line or tuning db has priority - - kernel_accel_new = user_options->kernel_accel; - } - else - { - // find a nice kernel_accel programmatically - - if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) - { - if ((size_per_accel * device_processors) > available_mem) // not enough memory - { - const float multi = (float) available_mem / size_per_accel; - - int accel_multi; - - for (accel_multi = 1; accel_multi <= 2; accel_multi++) - { - kernel_accel_new = multi * (1 << accel_multi); - - if (kernel_accel_new >= device_processors) break; - } - - // we need some space for tmps[], ... - - kernel_accel_new -= (1 << accel_multi); - - // clamp if close to device processors -- 10% good? - - if ((kernel_accel_new > device_processors) && ((kernel_accel_new - device_processors) <= (device_processors / 10))) - { - kernel_accel_new = device_processors; - } - } - else - { - for (int i = 1; i <= 8; i++) - { - if ((size_per_accel * device_processors * i) < available_mem) - { - kernel_accel_new = device_processors * i; - } - } - } - } - else - { - for (int i = 1; i <= 8; i++) - { - if ((size_per_accel * device_processors * i) < available_mem) - { - kernel_accel_new = device_processors * i; - } - } - } - } - - // fix tmto if user allows - - if (tmto == 0) - { - const u32 tmto_start = 1; - const u32 tmto_stop = 5; - - for (u32 tmto_new = tmto_start; tmto_new <= tmto_stop; tmto_new++) - { - if (available_mem > (kernel_accel_new * (size_per_accel >> tmto_new))) - { - tmto = tmto_new; - - break; - } - } - } - - char *new_device_name = hcstrdup (device_param->device_name); - - for (size_t i = 0; i < strlen (new_device_name); i++) - { - if (new_device_name[i] == ' ') new_device_name[i] = '_'; - } - - lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", new_device_name, user_options->hash_mode, kernel_accel_new); - - hcfree (new_device_name); - - return lines_buf; -} - -u64 module_extra_buffer_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - // we need to set the self-test hash settings to pass the self-test - // the decoder for the self-test is called after this function - - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - - const u64 req1 = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); - - u64 size_scrypt = req1 * device_param->kernel_accel_max; - - return size_scrypt / (1 << tmto); -} - -u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u64 tmp_size = 0; // we'll add some later - - return tmp_size; -} - -u64 module_extra_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes) -{ - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 scrypt_p = (hashes->salts_buf[0].scrypt_p) ? hashes->salts_buf[0].scrypt_p : SCRYPT_P; - - // we need to check that all hashes have the same scrypt settings - - for (u32 i = 1; i < hashes->salts_cnt; i++) - { - if ((hashes->salts_buf[i].scrypt_N != scrypt_N) - || (hashes->salts_buf[i].scrypt_r != scrypt_r) - || (hashes->salts_buf[i].scrypt_p != scrypt_p)) - { - return -1; - } - } - - const u64 tmp_size = 128ULL * scrypt_r * scrypt_p; - - return tmp_size; -} - -bool module_warmup_disable (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - return true; -} - -char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 scrypt_p = (hashes->salts_buf[0].scrypt_p) ? hashes->salts_buf[0].scrypt_p : SCRYPT_P; - - const u64 extra_buffer_size = device_param->extra_buffer_size; - - const u64 kernel_power_max = ((OPTS_TYPE & OPTS_TYPE_MP_MULTI_DISABLE) ? 1 : device_param->device_processors) * device_param->kernel_threads_max * device_param->kernel_accel_max; - - const u64 size_scrypt = 128ULL * scrypt_r * scrypt_N; - - const u64 scrypt_tmto_final = (kernel_power_max * size_scrypt) / extra_buffer_size; - - const u64 tmp_size = 128ULL * scrypt_r * scrypt_p; - - char *jit_build_options = NULL; - - hc_asprintf (&jit_build_options, "-D SCRYPT_N=%u -D SCRYPT_R=%u -D SCRYPT_P=%u -D SCRYPT_TMTO=%" PRIu64 " -D SCRYPT_TMP_ELEM=%" PRIu64, - hashes->salts_buf[0].scrypt_N, - hashes->salts_buf[0].scrypt_r, - hashes->salts_buf[0].scrypt_p, - scrypt_tmto_final, - tmp_size / 16); - - return jit_build_options; -} +#include "scrypt_common.c" int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len) { @@ -390,9 +156,9 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_dgst_size = module_dgst_size; module_ctx->module_dictstat_disable = MODULE_DEFAULT; module_ctx->module_esalt_size = MODULE_DEFAULT; - module_ctx->module_extra_buffer_size = module_extra_buffer_size; - module_ctx->module_extra_tmp_size = module_extra_tmp_size; - module_ctx->module_extra_tuningdb_block = module_extra_tuningdb_block; + module_ctx->module_extra_buffer_size = scrypt_module_extra_buffer_size; + module_ctx->module_extra_tmp_size = scrypt_module_extra_tmp_size; + module_ctx->module_extra_tuningdb_block = scrypt_module_extra_tuningdb_block; module_ctx->module_forced_outfile_format = MODULE_DEFAULT; module_ctx->module_hash_binary_count = MODULE_DEFAULT; module_ctx->module_hash_binary_parse = MODULE_DEFAULT; @@ -418,14 +184,14 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = module_jit_build_options; + module_ctx->module_jit_build_options = scrypt_module_jit_build_options; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; - module_ctx->module_kernel_loops_max = module_kernel_loops_max; - module_ctx->module_kernel_loops_min = module_kernel_loops_min; - module_ctx->module_kernel_threads_max = module_kernel_threads_max; - module_ctx->module_kernel_threads_min = module_kernel_threads_min; + module_ctx->module_kernel_loops_max = scrypt_module_kernel_loops_max; + module_ctx->module_kernel_loops_min = scrypt_module_kernel_loops_min; + module_ctx->module_kernel_threads_max = scrypt_module_kernel_threads_max; + module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; module_ctx->module_opti_type = module_opti_type; @@ -436,7 +202,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_potfile_disable = MODULE_DEFAULT; module_ctx->module_potfile_keep_all_hashes = MODULE_DEFAULT; module_ctx->module_pwdump_column = MODULE_DEFAULT; - module_ctx->module_pw_max = module_pw_max; + module_ctx->module_pw_max = MODULE_DEFAULT; module_ctx->module_pw_min = MODULE_DEFAULT; module_ctx->module_salt_max = MODULE_DEFAULT; module_ctx->module_salt_min = MODULE_DEFAULT; @@ -444,7 +210,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_separator = MODULE_DEFAULT; module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; - module_ctx->module_tmp_size = module_tmp_size; + module_ctx->module_tmp_size = scrypt_module_tmp_size; module_ctx->module_unstable_warning = MODULE_DEFAULT; - module_ctx->module_warmup_disable = module_warmup_disable; + module_ctx->module_warmup_disable = scrypt_module_warmup_disable; } diff --git a/src/modules/module_15700.c b/src/modules/module_15700.c index 063106d2f..6a29c0ce8 100644 --- a/src/modules/module_15700.c +++ b/src/modules/module_15700.c @@ -25,8 +25,8 @@ static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_LE | OPTS_TYPE_MP_MULTI_DISABLE + | OPTS_TYPE_NATIVE_THREADS | OPTS_TYPE_LOOP_PREPARE - | OPTS_TYPE_SELF_TEST_DISABLE | OPTS_TYPE_ST_HEX; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; @@ -62,33 +62,7 @@ static const u64 SCRYPT_N = 262144; static const u64 SCRYPT_R = 8; static const u64 SCRYPT_P = 1; -u32 module_kernel_loops_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_loops_min = 1024; - - return kernel_loops_min; -} - -u32 module_kernel_loops_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_loops_max = 1024; - - return kernel_loops_max; -} - -u32 module_kernel_threads_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_threads_min = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; - - return kernel_threads_min; -} - -u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_threads_max = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; - - return kernel_threads_max; -} +#include "scrypt_common.c" u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { @@ -97,213 +71,6 @@ u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED return esalt_size; } -u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - // this overrides the reductions of PW_MAX in case optimized kernel is selected - // IOW, even in optimized kernel mode it support length 256 - - const u32 pw_max = PW_MAX; - - return pw_max; -} - -u32 tmto = 0; - -const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes, const u32 device_id, const u32 kernel_accel) -{ - // preprocess tmto in case user has overridden - // it's important to set to 0 otherwise so we can postprocess tmto in that case - - tmto = (user_options->scrypt_tmto_chgd == true) ? user_options->scrypt_tmto : 0; - - // we enforce the same configuration for all hashes, so this should be fine - - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - - const u64 size_per_accel = (128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra)) >> tmto; - - int lines_sz = 4096; - char *lines_buf = hcmalloc (lines_sz); - int lines_pos = 0; - - hc_device_param_t *device_param = &backend_ctx->devices_param[device_id]; - - const u32 device_processors = device_param->device_processors; - - const u64 available_mem = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)); - - u32 kernel_accel_new = device_processors; - - if (kernel_accel) - { - // from command line or tuning db has priority - - kernel_accel_new = user_options->kernel_accel; - } - else - { - // find a nice kernel_accel programmatically - - if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) - { - if ((size_per_accel * device_processors) > available_mem) // not enough memory - { - const float multi = (float) available_mem / size_per_accel; - - int accel_multi; - - for (accel_multi = 1; accel_multi <= 2; accel_multi++) - { - kernel_accel_new = multi * (1 << accel_multi); - - if (kernel_accel_new >= device_processors) break; - } - - // we need some space for tmps[], ... - - kernel_accel_new -= (1 << accel_multi); - - // clamp if close to device processors -- 10% good? - - if ((kernel_accel_new > device_processors) && ((kernel_accel_new - device_processors) <= (device_processors / 10))) - { - kernel_accel_new = device_processors; - } - } - else - { - for (int i = 1; i <= 8; i++) - { - if ((size_per_accel * device_processors * i) < available_mem) - { - kernel_accel_new = device_processors * i; - } - } - } - } - else - { - for (int i = 1; i <= 8; i++) - { - if ((size_per_accel * device_processors * i) < available_mem) - { - kernel_accel_new = device_processors * i; - } - } - } - } - - // fix tmto if user allows - - if (tmto == 0) - { - const u32 tmto_start = 1; - const u32 tmto_stop = 5; - - for (u32 tmto_new = tmto_start; tmto_new <= tmto_stop; tmto_new++) - { - if (available_mem > (kernel_accel_new * (size_per_accel >> tmto_new))) - { - tmto = tmto_new; - - break; - } - } - } - - char *new_device_name = hcstrdup (device_param->device_name); - - for (size_t i = 0; i < strlen (new_device_name); i++) - { - if (new_device_name[i] == ' ') new_device_name[i] = '_'; - } - - lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", new_device_name, user_options->hash_mode, kernel_accel_new); - - hcfree (new_device_name); - - return lines_buf; -} - -u64 module_extra_buffer_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - // we need to set the self-test hash settings to pass the self-test - // the decoder for the self-test is called after this function - - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - - const u64 size_per_accel = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); - - u64 size_scrypt = size_per_accel * device_param->kernel_accel_max; - - return size_scrypt / (1 << tmto); -} - -u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u64 tmp_size = 0; // we'll add some later - - return tmp_size; -} - -u64 module_extra_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes) -{ - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 scrypt_p = (hashes->salts_buf[0].scrypt_p) ? hashes->salts_buf[0].scrypt_p : SCRYPT_P; - - // we need to check that all hashes have the same scrypt settings - - for (u32 i = 1; i < hashes->salts_cnt; i++) - { - if ((hashes->salts_buf[i].scrypt_N != scrypt_N) - || (hashes->salts_buf[i].scrypt_r != scrypt_r) - || (hashes->salts_buf[i].scrypt_p != scrypt_p)) - { - return -1; - } - } - - const u64 tmp_size = 128ULL * scrypt_r * scrypt_p; - - return tmp_size; -} - -bool module_warmup_disable (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - return true; -} - -char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 scrypt_p = (hashes->salts_buf[0].scrypt_p) ? hashes->salts_buf[0].scrypt_p : SCRYPT_P; - - const u64 extra_buffer_size = device_param->extra_buffer_size; - - const u64 kernel_power_max = ((OPTS_TYPE & OPTS_TYPE_MP_MULTI_DISABLE) ? 1 : device_param->device_processors) * device_param->kernel_threads_max * device_param->kernel_accel_max; - - const u64 size_scrypt = 128ULL * scrypt_r * scrypt_N; - - const u64 scrypt_tmto_final = (kernel_power_max * size_scrypt) / extra_buffer_size; - - const u64 tmp_size = 128ULL * scrypt_r * scrypt_p; - - char *jit_build_options = NULL; - - hc_asprintf (&jit_build_options, "-D SCRYPT_N=%u -D SCRYPT_R=%u -D SCRYPT_P=%u -D SCRYPT_TMTO=%" PRIu64 " -D SCRYPT_TMP_ELEM=%" PRIu64, - hashes->salts_buf[0].scrypt_N, - hashes->salts_buf[0].scrypt_r, - hashes->salts_buf[0].scrypt_p, - scrypt_tmto_final, - tmp_size / 16); - - return jit_build_options; -} - int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len) { u32 *digest = (u32 *) digest_buf; @@ -489,9 +256,9 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_dgst_size = module_dgst_size; module_ctx->module_dictstat_disable = MODULE_DEFAULT; module_ctx->module_esalt_size = module_esalt_size; - module_ctx->module_extra_buffer_size = module_extra_buffer_size; - module_ctx->module_extra_tmp_size = module_extra_tmp_size; - module_ctx->module_extra_tuningdb_block = module_extra_tuningdb_block; + module_ctx->module_extra_buffer_size = scrypt_module_extra_buffer_size; + module_ctx->module_extra_tmp_size = scrypt_module_extra_tmp_size; + module_ctx->module_extra_tuningdb_block = scrypt_module_extra_tuningdb_block; module_ctx->module_forced_outfile_format = MODULE_DEFAULT; module_ctx->module_hash_binary_count = MODULE_DEFAULT; module_ctx->module_hash_binary_parse = MODULE_DEFAULT; @@ -517,14 +284,14 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = module_jit_build_options; + module_ctx->module_jit_build_options = scrypt_module_jit_build_options; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; - module_ctx->module_kernel_loops_max = module_kernel_loops_max; - module_ctx->module_kernel_loops_min = module_kernel_loops_min; - module_ctx->module_kernel_threads_max = module_kernel_threads_max; - module_ctx->module_kernel_threads_min = module_kernel_threads_min; + module_ctx->module_kernel_loops_max = scrypt_module_kernel_loops_max; + module_ctx->module_kernel_loops_min = scrypt_module_kernel_loops_min; + module_ctx->module_kernel_threads_max = scrypt_module_kernel_threads_max; + module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; module_ctx->module_opti_type = module_opti_type; @@ -535,7 +302,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_potfile_disable = MODULE_DEFAULT; module_ctx->module_potfile_keep_all_hashes = MODULE_DEFAULT; module_ctx->module_pwdump_column = MODULE_DEFAULT; - module_ctx->module_pw_max = module_pw_max; + module_ctx->module_pw_max = MODULE_DEFAULT; module_ctx->module_pw_min = MODULE_DEFAULT; module_ctx->module_salt_max = MODULE_DEFAULT; module_ctx->module_salt_min = MODULE_DEFAULT; @@ -543,7 +310,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_separator = MODULE_DEFAULT; module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; - module_ctx->module_tmp_size = module_tmp_size; + module_ctx->module_tmp_size = scrypt_module_tmp_size; module_ctx->module_unstable_warning = MODULE_DEFAULT; - module_ctx->module_warmup_disable = module_warmup_disable; + module_ctx->module_warmup_disable = scrypt_module_warmup_disable; } diff --git a/src/modules/module_22700.c b/src/modules/module_22700.c index 1b9113bd4..0fddd735c 100644 --- a/src/modules/module_22700.c +++ b/src/modules/module_22700.c @@ -26,8 +26,7 @@ static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_LE | OPTS_TYPE_MP_MULTI_DISABLE | OPTS_TYPE_NATIVE_THREADS - | OPTS_TYPE_LOOP_PREPARE - | OPTS_TYPE_SELF_TEST_DISABLE; + | OPTS_TYPE_LOOP_PREPARE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "$multibit$2*2e311aa2cc5ec99f7073cacc8a2d1938*e3ad782e7f92d66a3cdfaec43a46be29*5d1cabd4f4a50ba125f88c47027fff9b"; @@ -55,240 +54,7 @@ static const u64 SCRYPT_N = 16384; static const u64 SCRYPT_R = 8; static const u64 SCRYPT_P = 1; -u32 module_kernel_loops_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_loops_min = 1024; - - return kernel_loops_min; -} - -u32 module_kernel_loops_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_loops_max = 1024; - - return kernel_loops_max; -} - -u32 module_kernel_threads_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_threads_min = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; - - return kernel_threads_min; -} - -u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_threads_max = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; - - return kernel_threads_max; -} - -u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - // this overrides the reductions of PW_MAX in case optimized kernel is selected - // IOW, even in optimized kernel mode it support length 256 - - const u32 pw_max = PW_MAX; - - return pw_max; -} - -u32 tmto = 0; - -const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes, const u32 device_id, const u32 kernel_accel) -{ - // preprocess tmto in case user has overridden - // it's important to set to 0 otherwise so we can postprocess tmto in that case - - tmto = (user_options->scrypt_tmto_chgd == true) ? user_options->scrypt_tmto : 0; - - // we enforce the same configuration for all hashes, so this should be fine - - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - - const u64 size_per_accel = (128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra)) >> tmto; - - int lines_sz = 4096; - char *lines_buf = hcmalloc (lines_sz); - int lines_pos = 0; - - hc_device_param_t *device_param = &backend_ctx->devices_param[device_id]; - - const u32 device_processors = device_param->device_processors; - - const u64 available_mem = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)); - - u32 kernel_accel_new = device_processors; - - if (kernel_accel) - { - // from command line or tuning db has priority - - kernel_accel_new = user_options->kernel_accel; - } - else - { - // find a nice kernel_accel programmatically - - if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) - { - if ((size_per_accel * device_processors) > available_mem) // not enough memory - { - const float multi = (float) available_mem / size_per_accel; - - int accel_multi; - - for (accel_multi = 1; accel_multi <= 2; accel_multi++) - { - kernel_accel_new = multi * (1 << accel_multi); - - if (kernel_accel_new >= device_processors) break; - } - - // we need some space for tmps[], ... - - kernel_accel_new -= (1 << accel_multi); - - // clamp if close to device processors -- 10% good? - - if ((kernel_accel_new > device_processors) && ((kernel_accel_new - device_processors) <= (device_processors / 10))) - { - kernel_accel_new = device_processors; - } - } - else - { - for (int i = 1; i <= 8; i++) - { - if ((size_per_accel * device_processors * i) < available_mem) - { - kernel_accel_new = device_processors * i; - } - } - } - } - else - { - for (int i = 1; i <= 8; i++) - { - if ((size_per_accel * device_processors * i) < available_mem) - { - kernel_accel_new = device_processors * i; - } - } - } - } - - // fix tmto if user allows - - if (tmto == 0) - { - const u32 tmto_start = 1; - const u32 tmto_stop = 5; - - for (u32 tmto_new = tmto_start; tmto_new <= tmto_stop; tmto_new++) - { - if (available_mem > (kernel_accel_new * (size_per_accel >> tmto_new))) - { - tmto = tmto_new; - - break; - } - } - } - - char *new_device_name = hcstrdup (device_param->device_name); - - for (size_t i = 0; i < strlen (new_device_name); i++) - { - if (new_device_name[i] == ' ') new_device_name[i] = '_'; - } - - lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", new_device_name, user_options->hash_mode, kernel_accel_new); - - hcfree (new_device_name); - - return lines_buf; -} - -u64 module_extra_buffer_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - // we need to set the self-test hash settings to pass the self-test - // the decoder for the self-test is called after this function - - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - - const u64 size_per_accel = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); - - u64 size_scrypt = size_per_accel * device_param->kernel_accel_max; - - return size_scrypt / (1 << tmto); -} - -u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u64 tmp_size = 0; // we'll add some later - - return tmp_size; -} - -u64 module_extra_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes) -{ - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 scrypt_p = (hashes->salts_buf[0].scrypt_p) ? hashes->salts_buf[0].scrypt_p : SCRYPT_P; - - // we need to check that all hashes have the same scrypt settings - - for (u32 i = 1; i < hashes->salts_cnt; i++) - { - if ((hashes->salts_buf[i].scrypt_N != scrypt_N) - || (hashes->salts_buf[i].scrypt_r != scrypt_r) - || (hashes->salts_buf[i].scrypt_p != scrypt_p)) - { - return -1; - } - } - - const u64 tmp_size = 128ULL * scrypt_r * scrypt_p; - - return tmp_size; -} - -bool module_warmup_disable (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - return true; -} - -char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 scrypt_p = (hashes->salts_buf[0].scrypt_p) ? hashes->salts_buf[0].scrypt_p : SCRYPT_P; - - const u64 extra_buffer_size = device_param->extra_buffer_size; - - const u64 kernel_power_max = ((OPTS_TYPE & OPTS_TYPE_MP_MULTI_DISABLE) ? 1 : device_param->device_processors) * device_param->kernel_threads_max * device_param->kernel_accel_max; - - const u64 size_scrypt = 128ULL * scrypt_r * scrypt_N; - - const u64 scrypt_tmto_final = (kernel_power_max * size_scrypt) / extra_buffer_size; - - const u64 tmp_size = 128ULL * scrypt_r * scrypt_p; - - char *jit_build_options = NULL; - - hc_asprintf (&jit_build_options, "-D SCRYPT_N=%u -D SCRYPT_R=%u -D SCRYPT_P=%u -D SCRYPT_TMTO=%" PRIu64 " -D SCRYPT_TMP_ELEM=%" PRIu64, - hashes->salts_buf[0].scrypt_N, - hashes->salts_buf[0].scrypt_r, - hashes->salts_buf[0].scrypt_p, - scrypt_tmto_final, - tmp_size / 16); - - return jit_build_options; -} +#include "scrypt_common.c" int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len) { @@ -428,9 +194,9 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_dgst_size = module_dgst_size; module_ctx->module_dictstat_disable = MODULE_DEFAULT; module_ctx->module_esalt_size = MODULE_DEFAULT; - module_ctx->module_extra_buffer_size = module_extra_buffer_size; - module_ctx->module_extra_tmp_size = module_extra_tmp_size; - module_ctx->module_extra_tuningdb_block = module_extra_tuningdb_block; + module_ctx->module_extra_buffer_size = scrypt_module_extra_buffer_size; + module_ctx->module_extra_tmp_size = scrypt_module_extra_tmp_size; + module_ctx->module_extra_tuningdb_block = scrypt_module_extra_tuningdb_block; module_ctx->module_forced_outfile_format = MODULE_DEFAULT; module_ctx->module_hash_binary_count = MODULE_DEFAULT; module_ctx->module_hash_binary_parse = MODULE_DEFAULT; @@ -456,14 +222,14 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = module_jit_build_options; + module_ctx->module_jit_build_options = scrypt_module_jit_build_options; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; - module_ctx->module_kernel_loops_max = module_kernel_loops_max; - module_ctx->module_kernel_loops_min = module_kernel_loops_min; - module_ctx->module_kernel_threads_max = module_kernel_threads_max; - module_ctx->module_kernel_threads_min = module_kernel_threads_min; + module_ctx->module_kernel_loops_max = scrypt_module_kernel_loops_max; + module_ctx->module_kernel_loops_min = scrypt_module_kernel_loops_min; + module_ctx->module_kernel_threads_max = scrypt_module_kernel_threads_max; + module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; module_ctx->module_opti_type = module_opti_type; @@ -474,7 +240,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_potfile_disable = MODULE_DEFAULT; module_ctx->module_potfile_keep_all_hashes = MODULE_DEFAULT; module_ctx->module_pwdump_column = MODULE_DEFAULT; - module_ctx->module_pw_max = module_pw_max; + module_ctx->module_pw_max = MODULE_DEFAULT; module_ctx->module_pw_min = MODULE_DEFAULT; module_ctx->module_salt_max = MODULE_DEFAULT; module_ctx->module_salt_min = MODULE_DEFAULT; @@ -482,7 +248,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_separator = MODULE_DEFAULT; module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; - module_ctx->module_tmp_size = module_tmp_size; + module_ctx->module_tmp_size = scrypt_module_tmp_size; module_ctx->module_unstable_warning = MODULE_DEFAULT; - module_ctx->module_warmup_disable = module_warmup_disable; + module_ctx->module_warmup_disable = scrypt_module_warmup_disable; } diff --git a/src/modules/module_24000.c b/src/modules/module_24000.c index 159acbed0..774b05fd2 100644 --- a/src/modules/module_24000.c +++ b/src/modules/module_24000.c @@ -24,7 +24,8 @@ static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_LE | OPTS_TYPE_MP_MULTI_DISABLE - | OPTS_TYPE_SELF_TEST_DISABLE + | OPTS_TYPE_NATIVE_THREADS + | OPTS_TYPE_LOOP_PREPARE | OPTS_TYPE_ST_HEX; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; @@ -53,9 +54,6 @@ typedef struct bestcrypt_scrypt } bestcrypt_scrypt_t; -// limit scrypt accel otherwise we hurt ourself when calculating the scrypt tmto -// 16 is actually a bit low, we may need to change this depending on user response - static const char *SIGNATURE_BESTCRYPT_SCRYPT = "$bcve$"; static const u32 SCRYPT_THREADS = 16; @@ -64,33 +62,7 @@ static const u64 SCRYPT_N = 32768; static const u64 SCRYPT_R = 16; static const u64 SCRYPT_P = 1; -u32 module_kernel_loops_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_loops_min = 1; - - return kernel_loops_min; -} - -u32 module_kernel_loops_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_loops_max = 1; - - return kernel_loops_max; -} - -u32 module_kernel_threads_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_threads_min = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; - - return kernel_threads_min; -} - -u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_threads_max = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; - - return kernel_threads_max; -} +#include "scrypt_common.c" u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { @@ -99,239 +71,6 @@ u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED return esalt_size; } -u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - // this overrides the reductions of PW_MAX in case optimized kernel is selected - // IOW, even in optimized kernel mode it support length 256 - - const u32 pw_max = PW_MAX; - - return pw_max; -} - -u32 tmto = 0; - -const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes, const u32 device_id, const u32 kernel_accel) -{ - // preprocess tmto in case user has overridden - // it's important to set to 0 otherwise so we can postprocess tmto in that case - - tmto = (user_options->scrypt_tmto_chgd == true) ? user_options->scrypt_tmto : 0; - - // we enforce the same configuration for all hashes, so this should be fine - - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - - const u64 size_per_accel = (128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra)) >> tmto; - - int lines_sz = 4096; - char *lines_buf = hcmalloc (lines_sz); - int lines_pos = 0; - - hc_device_param_t *device_param = &backend_ctx->devices_param[device_id]; - - const u32 device_processors = device_param->device_processors; - - const u64 available_mem = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)); - - u32 kernel_accel_new = device_processors; - - if (kernel_accel) - { - // from command line or tuning db has priority - - kernel_accel_new = user_options->kernel_accel; - } - else - { - // find a nice kernel_accel programmatically - - if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) - { - if ((size_per_accel * device_processors) > available_mem) // not enough memory - { - const float multi = (float) available_mem / size_per_accel; - - int accel_multi; - - for (accel_multi = 1; accel_multi <= 2; accel_multi++) - { - kernel_accel_new = multi * (1 << accel_multi); - - if (kernel_accel_new >= device_processors) break; - } - - // we need some space for tmps[], ... - - kernel_accel_new -= (1 << accel_multi); - - // clamp if close to device processors -- 10% good? - - if ((kernel_accel_new > device_processors) && ((kernel_accel_new - device_processors) <= (device_processors / 10))) - { - kernel_accel_new = device_processors; - } - } - else - { - for (int i = 1; i <= 8; i++) - { - if ((size_per_accel * device_processors * i) < available_mem) - { - kernel_accel_new = device_processors * i; - } - } - } - } - else - { - for (int i = 1; i <= 8; i++) - { - if ((size_per_accel * device_processors * i) < available_mem) - { - kernel_accel_new = device_processors * i; - } - } - } - } - - // fix tmto if user allows - - if (tmto == 0) - { - const u32 tmto_start = 1; - const u32 tmto_stop = 5; - - for (u32 tmto_new = tmto_start; tmto_new <= tmto_stop; tmto_new++) - { - if (available_mem > (kernel_accel_new * (size_per_accel >> tmto_new))) - { - tmto = tmto_new; - - break; - } - } - } - - char *new_device_name = hcstrdup (device_param->device_name); - - for (size_t i = 0; i < strlen (new_device_name); i++) - { - if (new_device_name[i] == ' ') new_device_name[i] = '_'; - } - - lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", new_device_name, user_options->hash_mode, kernel_accel_new); - - hcfree (new_device_name); - - return lines_buf; -} - -u64 module_extra_buffer_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - // we need to set the self-test hash settings to pass the self-test - // the decoder for the self-test is called after this function - - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - - const u64 size_per_accel = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); - - u64 size_scrypt = size_per_accel * device_param->kernel_accel_max; - - return size_scrypt / (1 << tmto); -} - -u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u64 tmp_size = 0; // we'll add some later - - return tmp_size; -} - -u64 module_extra_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes) -{ - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 scrypt_p = (hashes->salts_buf[0].scrypt_p) ? hashes->salts_buf[0].scrypt_p : SCRYPT_P; - - // we need to check that all hashes have the same scrypt settings - - for (u32 i = 1; i < hashes->salts_cnt; i++) - { - if ((hashes->salts_buf[i].scrypt_N != scrypt_N) - || (hashes->salts_buf[i].scrypt_r != scrypt_r) - || (hashes->salts_buf[i].scrypt_p != scrypt_p)) - { - return -1; - } - } - - const u64 tmp_size = 128ULL * scrypt_r * scrypt_p; - - return tmp_size; -} - -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if (device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) - { - // Invalid extra buffer size. - if ((device_param->is_metal == false) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - return true; - } -/* - if ((device_param->opencl_device_vendor_id == VENDOR_ID_INTEL_SDK) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - return true; - } -*/ - } - - // amdgpu-pro-18.50-708488-ubuntu-18.04: Segmentation fault - if ((device_param->opencl_device_vendor_id == VENDOR_ID_AMD) && (device_param->has_vperm == false)) - { - return true; - } - - return false; -} - -bool module_warmup_disable (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - return true; -} - -char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 scrypt_p = (hashes->salts_buf[0].scrypt_p) ? hashes->salts_buf[0].scrypt_p : SCRYPT_P; - - const u64 extra_buffer_size = device_param->extra_buffer_size; - - const u64 kernel_power_max = ((OPTS_TYPE & OPTS_TYPE_MP_MULTI_DISABLE) ? 1 : device_param->device_processors) * device_param->kernel_threads_max * device_param->kernel_accel_max; - - const u64 size_scrypt = 128ULL * scrypt_r * scrypt_N; - - const u64 scrypt_tmto_final = (kernel_power_max * size_scrypt) / extra_buffer_size; - - const u64 tmp_size = 128ULL * scrypt_r * scrypt_p; - - char *jit_build_options = NULL; - - hc_asprintf (&jit_build_options, "-D SCRYPT_N=%u -D SCRYPT_R=%u -D SCRYPT_P=%u -D SCRYPT_TMTO=%" PRIu64 " -D SCRYPT_TMP_ELEM=%" PRIu64, - hashes->salts_buf[0].scrypt_N, - hashes->salts_buf[0].scrypt_r, - hashes->salts_buf[0].scrypt_p, - scrypt_tmto_final, - tmp_size / 16); - - return jit_build_options; -} - int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len) { u32 *digest = (u32 *) digest_buf; @@ -407,9 +146,7 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE bestcrypt_scrypt->salt_buf[0] = byte_swap_32 (salt->salt_buf[0]); bestcrypt_scrypt->salt_buf[1] = byte_swap_32 (salt->salt_buf[1]); - salt->salt_iter = 1; - -// salt->salt_iter = salt->scrypt_N; + salt->salt_iter = salt->scrypt_N; salt->salt_repeats = salt->scrypt_p - 1; // ciphertext @@ -474,9 +211,9 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_dgst_size = module_dgst_size; module_ctx->module_dictstat_disable = MODULE_DEFAULT; module_ctx->module_esalt_size = module_esalt_size; - module_ctx->module_extra_buffer_size = module_extra_buffer_size; - module_ctx->module_extra_tmp_size = module_extra_tmp_size; - module_ctx->module_extra_tuningdb_block = module_extra_tuningdb_block; + module_ctx->module_extra_buffer_size = scrypt_module_extra_buffer_size; + module_ctx->module_extra_tmp_size = scrypt_module_extra_tmp_size; + module_ctx->module_extra_tuningdb_block = scrypt_module_extra_tuningdb_block; module_ctx->module_forced_outfile_format = MODULE_DEFAULT; module_ctx->module_hash_binary_count = MODULE_DEFAULT; module_ctx->module_hash_binary_parse = MODULE_DEFAULT; @@ -502,14 +239,14 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = module_jit_build_options; + module_ctx->module_jit_build_options = scrypt_module_jit_build_options; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; - module_ctx->module_kernel_loops_max = module_kernel_loops_max; - module_ctx->module_kernel_loops_min = module_kernel_loops_min; - module_ctx->module_kernel_threads_max = module_kernel_threads_max; - module_ctx->module_kernel_threads_min = module_kernel_threads_min; + module_ctx->module_kernel_loops_max = scrypt_module_kernel_loops_max; + module_ctx->module_kernel_loops_min = scrypt_module_kernel_loops_min; + module_ctx->module_kernel_threads_max = scrypt_module_kernel_threads_max; + module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; module_ctx->module_opti_type = module_opti_type; @@ -520,7 +257,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_potfile_disable = MODULE_DEFAULT; module_ctx->module_potfile_keep_all_hashes = MODULE_DEFAULT; module_ctx->module_pwdump_column = MODULE_DEFAULT; - module_ctx->module_pw_max = module_pw_max; + module_ctx->module_pw_max = MODULE_DEFAULT; module_ctx->module_pw_min = MODULE_DEFAULT; module_ctx->module_salt_max = MODULE_DEFAULT; module_ctx->module_salt_min = MODULE_DEFAULT; @@ -528,7 +265,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_separator = MODULE_DEFAULT; module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; - module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; - module_ctx->module_warmup_disable = module_warmup_disable; + module_ctx->module_tmp_size = scrypt_module_tmp_size; + module_ctx->module_unstable_warning = MODULE_DEFAULT; + module_ctx->module_warmup_disable = scrypt_module_warmup_disable; } diff --git a/src/modules/module_27700.c b/src/modules/module_27700.c index fb3a31fa1..5176a6a7e 100644 --- a/src/modules/module_27700.c +++ b/src/modules/module_27700.c @@ -26,8 +26,7 @@ static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_LE | OPTS_TYPE_MP_MULTI_DISABLE | OPTS_TYPE_NATIVE_THREADS - | OPTS_TYPE_LOOP_PREPARE - | OPTS_TYPE_SELF_TEST_DISABLE; + | OPTS_TYPE_LOOP_PREPARE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "$multibit$3*16384*8*1*7523cb5482e81b81*91780fd49b81a782ab840157a69ba7996d81270eaf456c850f314fc1787d9b0b"; @@ -55,240 +54,7 @@ static const u64 SCRYPT_N = 16384; static const u64 SCRYPT_R = 8; static const u64 SCRYPT_P = 1; -u32 module_kernel_loops_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_loops_min = 1024; - - return kernel_loops_min; -} - -u32 module_kernel_loops_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_loops_max = 1024; - - return kernel_loops_max; -} - -u32 module_kernel_threads_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_threads_min = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; - - return kernel_threads_min; -} - -u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_threads_max = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; - - return kernel_threads_max; -} - -u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - // this overrides the reductions of PW_MAX in case optimized kernel is selected - // IOW, even in optimized kernel mode it support length 256 - - const u32 pw_max = PW_MAX; - - return pw_max; -} - -u32 tmto = 0; - -const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes, const u32 device_id, const u32 kernel_accel) -{ - // preprocess tmto in case user has overridden - // it's important to set to 0 otherwise so we can postprocess tmto in that case - - tmto = (user_options->scrypt_tmto_chgd == true) ? user_options->scrypt_tmto : 0; - - // we enforce the same configuration for all hashes, so this should be fine - - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - - const u64 size_per_accel = (128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra)) >> tmto; - - int lines_sz = 4096; - char *lines_buf = hcmalloc (lines_sz); - int lines_pos = 0; - - hc_device_param_t *device_param = &backend_ctx->devices_param[device_id]; - - const u32 device_processors = device_param->device_processors; - - const u64 available_mem = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)); - - u32 kernel_accel_new = device_processors; - - if (kernel_accel) - { - // from command line or tuning db has priority - - kernel_accel_new = user_options->kernel_accel; - } - else - { - // find a nice kernel_accel programmatically - - if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) - { - if ((size_per_accel * device_processors) > available_mem) // not enough memory - { - const float multi = (float) available_mem / size_per_accel; - - int accel_multi; - - for (accel_multi = 1; accel_multi <= 2; accel_multi++) - { - kernel_accel_new = multi * (1 << accel_multi); - - if (kernel_accel_new >= device_processors) break; - } - - // we need some space for tmps[], ... - - kernel_accel_new -= (1 << accel_multi); - - // clamp if close to device processors -- 10% good? - - if ((kernel_accel_new > device_processors) && ((kernel_accel_new - device_processors) <= (device_processors / 10))) - { - kernel_accel_new = device_processors; - } - } - else - { - for (int i = 1; i <= 8; i++) - { - if ((size_per_accel * device_processors * i) < available_mem) - { - kernel_accel_new = device_processors * i; - } - } - } - } - else - { - for (int i = 1; i <= 8; i++) - { - if ((size_per_accel * device_processors * i) < available_mem) - { - kernel_accel_new = device_processors * i; - } - } - } - } - - // fix tmto if user allows - - if (tmto == 0) - { - const u32 tmto_start = 1; - const u32 tmto_stop = 5; - - for (u32 tmto_new = tmto_start; tmto_new <= tmto_stop; tmto_new++) - { - if (available_mem > (kernel_accel_new * (size_per_accel >> tmto_new))) - { - tmto = tmto_new; - - break; - } - } - } - - char *new_device_name = hcstrdup (device_param->device_name); - - for (size_t i = 0; i < strlen (new_device_name); i++) - { - if (new_device_name[i] == ' ') new_device_name[i] = '_'; - } - - lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", new_device_name, user_options->hash_mode, kernel_accel_new); - - hcfree (new_device_name); - - return lines_buf; -} - -u64 module_extra_buffer_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - // we need to set the self-test hash settings to pass the self-test - // the decoder for the self-test is called after this function - - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - - const u64 size_per_accel = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); - - u64 size_scrypt = size_per_accel * device_param->kernel_accel_max; - - return size_scrypt / (1 << tmto); -} - -u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u64 tmp_size = 0; // we'll add some later - - return tmp_size; -} - -u64 module_extra_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes) -{ - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 scrypt_p = (hashes->salts_buf[0].scrypt_p) ? hashes->salts_buf[0].scrypt_p : SCRYPT_P; - - // we need to check that all hashes have the same scrypt settings - - for (u32 i = 1; i < hashes->salts_cnt; i++) - { - if ((hashes->salts_buf[i].scrypt_N != scrypt_N) - || (hashes->salts_buf[i].scrypt_r != scrypt_r) - || (hashes->salts_buf[i].scrypt_p != scrypt_p)) - { - return -1; - } - } - - const u64 tmp_size = 128ULL * scrypt_r * scrypt_p; - - return tmp_size; -} - -bool module_warmup_disable (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - return true; -} - -char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 scrypt_p = (hashes->salts_buf[0].scrypt_p) ? hashes->salts_buf[0].scrypt_p : SCRYPT_P; - - const u64 extra_buffer_size = device_param->extra_buffer_size; - - const u64 kernel_power_max = ((OPTS_TYPE & OPTS_TYPE_MP_MULTI_DISABLE) ? 1 : device_param->device_processors) * device_param->kernel_threads_max * device_param->kernel_accel_max; - - const u64 size_scrypt = 128ULL * scrypt_r * scrypt_N; - - const u64 scrypt_tmto_final = (kernel_power_max * size_scrypt) / extra_buffer_size; - - const u64 tmp_size = 128ULL * scrypt_r * scrypt_p; - - char *jit_build_options = NULL; - - hc_asprintf (&jit_build_options, "-D SCRYPT_N=%u -D SCRYPT_R=%u -D SCRYPT_P=%u -D SCRYPT_TMTO=%" PRIu64 " -D SCRYPT_TMP_ELEM=%" PRIu64, - hashes->salts_buf[0].scrypt_N, - hashes->salts_buf[0].scrypt_r, - hashes->salts_buf[0].scrypt_p, - scrypt_tmto_final, - tmp_size / 16); - - return jit_build_options; -} +#include "scrypt_common.c" int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len) { @@ -452,9 +218,9 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_dgst_size = module_dgst_size; module_ctx->module_dictstat_disable = MODULE_DEFAULT; module_ctx->module_esalt_size = MODULE_DEFAULT; - module_ctx->module_extra_buffer_size = module_extra_buffer_size; - module_ctx->module_extra_tmp_size = module_extra_tmp_size; - module_ctx->module_extra_tuningdb_block = module_extra_tuningdb_block; + module_ctx->module_extra_buffer_size = scrypt_module_extra_buffer_size; + module_ctx->module_extra_tmp_size = scrypt_module_extra_tmp_size; + module_ctx->module_extra_tuningdb_block = scrypt_module_extra_tuningdb_block; module_ctx->module_forced_outfile_format = MODULE_DEFAULT; module_ctx->module_hash_binary_count = MODULE_DEFAULT; module_ctx->module_hash_binary_parse = MODULE_DEFAULT; @@ -480,14 +246,14 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = module_jit_build_options; + module_ctx->module_jit_build_options = scrypt_module_jit_build_options; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; - module_ctx->module_kernel_loops_max = module_kernel_loops_max; - module_ctx->module_kernel_loops_min = module_kernel_loops_min; - module_ctx->module_kernel_threads_max = module_kernel_threads_max; - module_ctx->module_kernel_threads_min = module_kernel_threads_min; + module_ctx->module_kernel_loops_max = scrypt_module_kernel_loops_max; + module_ctx->module_kernel_loops_min = scrypt_module_kernel_loops_min; + module_ctx->module_kernel_threads_max = scrypt_module_kernel_threads_max; + module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; module_ctx->module_opti_type = module_opti_type; @@ -498,7 +264,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_potfile_disable = MODULE_DEFAULT; module_ctx->module_potfile_keep_all_hashes = MODULE_DEFAULT; module_ctx->module_pwdump_column = MODULE_DEFAULT; - module_ctx->module_pw_max = module_pw_max; + module_ctx->module_pw_max = MODULE_DEFAULT; module_ctx->module_pw_min = MODULE_DEFAULT; module_ctx->module_salt_max = MODULE_DEFAULT; module_ctx->module_salt_min = MODULE_DEFAULT; @@ -506,7 +272,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_separator = MODULE_DEFAULT; module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; - module_ctx->module_tmp_size = module_tmp_size; + module_ctx->module_tmp_size = scrypt_module_tmp_size; module_ctx->module_unstable_warning = MODULE_DEFAULT; - module_ctx->module_warmup_disable = module_warmup_disable; + module_ctx->module_warmup_disable = scrypt_module_warmup_disable; } diff --git a/src/modules/module_28200.c b/src/modules/module_28200.c index 52a7adbdd..c4149ae94 100644 --- a/src/modules/module_28200.c +++ b/src/modules/module_28200.c @@ -26,8 +26,7 @@ static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_LE | OPTS_TYPE_MP_MULTI_DISABLE | OPTS_TYPE_NATIVE_THREADS - | OPTS_TYPE_LOOP_PREPARE - | OPTS_TYPE_SELF_TEST_DISABLE; + | OPTS_TYPE_LOOP_PREPARE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "EXODUS:16384:8:1:IYkXZgFETRmFp4wQXyP8XMe3LtuOw8wMdLcBVQ+9YWE=:lq0W9ekN5sC0O7Xw:UD4a6mUUhkTbQtGWitXHZUg0pQ4RHI6W/KUyYE95m3k=:ZuNQckXOtr4r21x+DT1zpQ=="; @@ -63,33 +62,7 @@ static const u64 SCRYPT_N = 16384; static const u64 SCRYPT_R = 8; static const u64 SCRYPT_P = 1; -u32 module_kernel_loops_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_loops_min = 1024; - - return kernel_loops_min; -} - -u32 module_kernel_loops_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_loops_max = 1024; - - return kernel_loops_max; -} - -u32 module_kernel_threads_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_threads_min = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; - - return kernel_threads_min; -} - -u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_threads_max = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; - - return kernel_threads_max; -} +#include "scrypt_common.c" u32 module_pw_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { @@ -105,203 +78,6 @@ u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED return esalt_size; } -u32 tmto = 0; - -const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes, const u32 device_id, const u32 kernel_accel) -{ - // preprocess tmto in case user has overridden - // it's important to set to 0 otherwise so we can postprocess tmto in that case - - tmto = (user_options->scrypt_tmto_chgd == true) ? user_options->scrypt_tmto : 0; - - // we enforce the same configuration for all hashes, so this should be fine - - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - - const u64 size_per_accel = (128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra)) >> tmto; - - int lines_sz = 4096; - char *lines_buf = hcmalloc (lines_sz); - int lines_pos = 0; - - hc_device_param_t *device_param = &backend_ctx->devices_param[device_id]; - - const u32 device_processors = device_param->device_processors; - - const u64 available_mem = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)); - - u32 kernel_accel_new = device_processors; - - if (kernel_accel) - { - // from command line or tuning db has priority - - kernel_accel_new = user_options->kernel_accel; - } - else - { - // find a nice kernel_accel programmatically - - if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) - { - if ((size_per_accel * device_processors) > available_mem) // not enough memory - { - const float multi = (float) available_mem / size_per_accel; - - int accel_multi; - - for (accel_multi = 1; accel_multi <= 2; accel_multi++) - { - kernel_accel_new = multi * (1 << accel_multi); - - if (kernel_accel_new >= device_processors) break; - } - - // we need some space for tmps[], ... - - kernel_accel_new -= (1 << accel_multi); - - // clamp if close to device processors -- 10% good? - - if ((kernel_accel_new > device_processors) && ((kernel_accel_new - device_processors) <= (device_processors / 10))) - { - kernel_accel_new = device_processors; - } - } - else - { - for (int i = 1; i <= 8; i++) - { - if ((size_per_accel * device_processors * i) < available_mem) - { - kernel_accel_new = device_processors * i; - } - } - } - } - else - { - for (int i = 1; i <= 8; i++) - { - if ((size_per_accel * device_processors * i) < available_mem) - { - kernel_accel_new = device_processors * i; - } - } - } - } - - // fix tmto if user allows - - if (tmto == 0) - { - const u32 tmto_start = 1; - const u32 tmto_stop = 5; - - for (u32 tmto_new = tmto_start; tmto_new <= tmto_stop; tmto_new++) - { - if (available_mem > (kernel_accel_new * (size_per_accel >> tmto_new))) - { - tmto = tmto_new; - - break; - } - } - } - - char *new_device_name = hcstrdup (device_param->device_name); - - for (size_t i = 0; i < strlen (new_device_name); i++) - { - if (new_device_name[i] == ' ') new_device_name[i] = '_'; - } - - lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", new_device_name, user_options->hash_mode, kernel_accel_new); - - hcfree (new_device_name); - - return lines_buf; -} - -u64 module_extra_buffer_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - // we need to set the self-test hash settings to pass the self-test - // the decoder for the self-test is called after this function - - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - - const u64 size_per_accel = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); - - u64 size_scrypt = size_per_accel * device_param->kernel_accel_max; - - return size_scrypt / (1 << tmto); -} - -u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u64 tmp_size = 0; // we'll add some later - - return tmp_size; -} - -u64 module_extra_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes) -{ - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 scrypt_p = (hashes->salts_buf[0].scrypt_p) ? hashes->salts_buf[0].scrypt_p : SCRYPT_P; - - // we need to check that all hashes have the same scrypt settings - - for (u32 i = 1; i < hashes->salts_cnt; i++) - { - if ((hashes->salts_buf[i].scrypt_N != scrypt_N) - || (hashes->salts_buf[i].scrypt_r != scrypt_r) - || (hashes->salts_buf[i].scrypt_p != scrypt_p)) - { - return -1; - } - } - - const u64 tmp_size = 128ULL * scrypt_r * scrypt_p; - - return tmp_size; -} - -bool module_warmup_disable (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - return true; -} - -char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 scrypt_p = (hashes->salts_buf[0].scrypt_p) ? hashes->salts_buf[0].scrypt_p : SCRYPT_P; - - const u64 extra_buffer_size = device_param->extra_buffer_size; - - const u64 kernel_power_max = ((OPTS_TYPE & OPTS_TYPE_MP_MULTI_DISABLE) ? 1 : device_param->device_processors) * device_param->kernel_threads_max * device_param->kernel_accel_max; - - const u64 size_scrypt = 128ULL * scrypt_r * scrypt_N; - - const u64 scrypt_tmto_final = (kernel_power_max * size_scrypt) / extra_buffer_size; - - const u64 tmp_size = 128ULL * scrypt_r * scrypt_p; - - char *jit_build_options = NULL; - - hc_asprintf (&jit_build_options, "-D SCRYPT_N=%u -D SCRYPT_R=%u -D SCRYPT_P=%u -D SCRYPT_TMTO=%" PRIu64 " -D SCRYPT_TMP_ELEM=%" PRIu64, - hashes->salts_buf[0].scrypt_N, - hashes->salts_buf[0].scrypt_r, - hashes->salts_buf[0].scrypt_p, - scrypt_tmto_final, - tmp_size / 16); - - return jit_build_options; -} - int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len) { u32 *digest = (u32 *) digest_buf; @@ -391,7 +167,8 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE memcpy (salt->salt_buf, tmp_buf, tmp_len); - for (int i = 0; i < 8; i++) salt->salt_buf[i] = byte_swap_32 (salt->salt_buf[i]); + //for (int i = 0; i < 8; i++) salt->salt_buf[i] = byte_swap_32 (salt->salt_buf[i]); + for (int i = 0; i < 8; i++) salt->salt_buf[i] = salt->salt_buf[i]; salt->salt_len = tmp_len; @@ -454,7 +231,8 @@ int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE u32 tmp_salt[8] = { 0 }; - for (int i = 0; i < 8; i++) tmp_salt[i] = byte_swap_32 (salt->salt_buf[i]); + //for (int i = 0; i < 8; i++) tmp_salt[i] = byte_swap_32 (salt->salt_buf[i]); + for (int i = 0; i < 8; i++) tmp_salt[i] = salt->salt_buf[i]; char base64_salt[64]; @@ -536,9 +314,9 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_dgst_size = module_dgst_size; module_ctx->module_dictstat_disable = MODULE_DEFAULT; module_ctx->module_esalt_size = module_esalt_size; - module_ctx->module_extra_buffer_size = module_extra_buffer_size; - module_ctx->module_extra_tmp_size = module_extra_tmp_size; - module_ctx->module_extra_tuningdb_block = module_extra_tuningdb_block; + module_ctx->module_extra_buffer_size = scrypt_module_extra_buffer_size; + module_ctx->module_extra_tmp_size = scrypt_module_extra_tmp_size; + module_ctx->module_extra_tuningdb_block = scrypt_module_extra_tuningdb_block; module_ctx->module_forced_outfile_format = MODULE_DEFAULT; module_ctx->module_hash_binary_count = MODULE_DEFAULT; module_ctx->module_hash_binary_parse = MODULE_DEFAULT; @@ -564,14 +342,14 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = module_jit_build_options; + module_ctx->module_jit_build_options = scrypt_module_jit_build_options; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; - module_ctx->module_kernel_loops_max = module_kernel_loops_max; - module_ctx->module_kernel_loops_min = module_kernel_loops_min; - module_ctx->module_kernel_threads_max = module_kernel_threads_max; - module_ctx->module_kernel_threads_min = module_kernel_threads_min; + module_ctx->module_kernel_loops_max = scrypt_module_kernel_loops_max; + module_ctx->module_kernel_loops_min = scrypt_module_kernel_loops_min; + module_ctx->module_kernel_threads_max = scrypt_module_kernel_threads_max; + module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; module_ctx->module_opti_type = module_opti_type; @@ -590,7 +368,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_separator = MODULE_DEFAULT; module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; - module_ctx->module_tmp_size = module_tmp_size; + module_ctx->module_tmp_size = scrypt_module_tmp_size; module_ctx->module_unstable_warning = MODULE_DEFAULT; - module_ctx->module_warmup_disable = module_warmup_disable; + module_ctx->module_warmup_disable = scrypt_module_warmup_disable; } diff --git a/src/modules/module_29800.c b/src/modules/module_29800.c index 633ef1978..b919ab176 100644 --- a/src/modules/module_29800.c +++ b/src/modules/module_29800.c @@ -26,8 +26,7 @@ static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_LE | OPTS_TYPE_MP_MULTI_DISABLE | OPTS_TYPE_NATIVE_THREADS - | OPTS_TYPE_LOOP_PREPARE - | OPTS_TYPE_SELF_TEST_DISABLE; + | OPTS_TYPE_LOOP_PREPARE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat1"; static const char *ST_HASH = "$bisq$3*32768*8*6*31d838af87f99cb8*5cfb7bf3228d9e865881156e17b1866589ffa6b757011e25d1319083595236d2"; @@ -55,33 +54,7 @@ static const u64 SCRYPT_N = 32768; static const u64 SCRYPT_R = 8; static const u64 SCRYPT_P = 6; -u32 module_kernel_loops_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_loops_min = 1024; - - return kernel_loops_min; -} - -u32 module_kernel_loops_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_loops_max = 1024; - - return kernel_loops_max; -} - -u32 module_kernel_threads_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_threads_min = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; - - return kernel_threads_min; -} - -u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_threads_max = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; - - return kernel_threads_max; -} +#include "scrypt_common.c" u32 module_pw_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { @@ -90,213 +63,6 @@ u32 module_pw_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED con return pw_min; } -u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - // this overrides the reductions of PW_MAX in case optimized kernel is selected - // IOW, even in optimized kernel mode it support length 256 - - const u32 pw_max = PW_MAX; - - return pw_max; -} - -u32 tmto = 0; - -const char *module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes, const u32 device_id, const u32 kernel_accel) -{ - // preprocess tmto in case user has overridden - // it's important to set to 0 otherwise so we can postprocess tmto in that case - - tmto = (user_options->scrypt_tmto_chgd == true) ? user_options->scrypt_tmto : 0; - - // we enforce the same configuration for all hashes, so this should be fine - - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - - const u64 size_per_accel = (128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra)) >> tmto; - - int lines_sz = 4096; - char *lines_buf = hcmalloc (lines_sz); - int lines_pos = 0; - - hc_device_param_t *device_param = &backend_ctx->devices_param[device_id]; - - const u32 device_processors = device_param->device_processors; - - const u64 available_mem = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)); - - u32 kernel_accel_new = device_processors; - - if (kernel_accel) - { - // from command line or tuning db has priority - - kernel_accel_new = user_options->kernel_accel; - } - else - { - // find a nice kernel_accel programmatically - - if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) - { - if ((size_per_accel * device_processors) > available_mem) // not enough memory - { - const float multi = (float) available_mem / size_per_accel; - - int accel_multi; - - for (accel_multi = 1; accel_multi <= 2; accel_multi++) - { - kernel_accel_new = multi * (1 << accel_multi); - - if (kernel_accel_new >= device_processors) break; - } - - // we need some space for tmps[], ... - - kernel_accel_new -= (1 << accel_multi); - - // clamp if close to device processors -- 10% good? - - if ((kernel_accel_new > device_processors) && ((kernel_accel_new - device_processors) <= (device_processors / 10))) - { - kernel_accel_new = device_processors; - } - } - else - { - for (int i = 1; i <= 8; i++) - { - if ((size_per_accel * device_processors * i) < available_mem) - { - kernel_accel_new = device_processors * i; - } - } - } - } - else - { - for (int i = 1; i <= 8; i++) - { - if ((size_per_accel * device_processors * i) < available_mem) - { - kernel_accel_new = device_processors * i; - } - } - } - } - - // fix tmto if user allows - - if (tmto == 0) - { - const u32 tmto_start = 1; - const u32 tmto_stop = 5; - - for (u32 tmto_new = tmto_start; tmto_new <= tmto_stop; tmto_new++) - { - if (available_mem > (kernel_accel_new * (size_per_accel >> tmto_new))) - { - tmto = tmto_new; - - break; - } - } - } - - char *new_device_name = hcstrdup (device_param->device_name); - - for (size_t i = 0; i < strlen (new_device_name); i++) - { - if (new_device_name[i] == ' ') new_device_name[i] = '_'; - } - - lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", new_device_name, user_options->hash_mode, kernel_accel_new); - - hcfree (new_device_name); - - return lines_buf; -} - -u64 module_extra_buffer_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - // we need to set the self-test hash settings to pass the self-test - // the decoder for the self-test is called after this function - - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - - const u64 size_per_accel = 128 * scrypt_r * scrypt_N * module_kernel_threads_max (hashconfig, user_options, user_options_extra); - - u64 size_scrypt = size_per_accel * device_param->kernel_accel_max; - - return size_scrypt / (1 << tmto); -} - -u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u64 tmp_size = 0; // we'll add some later - - return tmp_size; -} - -u64 module_extra_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes) -{ - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 scrypt_p = (hashes->salts_buf[0].scrypt_p) ? hashes->salts_buf[0].scrypt_p : SCRYPT_P; - - // we need to check that all hashes have the same scrypt settings - - for (u32 i = 1; i < hashes->salts_cnt; i++) - { - if ((hashes->salts_buf[i].scrypt_N != scrypt_N) - || (hashes->salts_buf[i].scrypt_r != scrypt_r) - || (hashes->salts_buf[i].scrypt_p != scrypt_p)) - { - return -1; - } - } - - const u64 tmp_size = 128ULL * scrypt_r * scrypt_p; - - return tmp_size; -} - -bool module_warmup_disable (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - return true; -} - -char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 scrypt_p = (hashes->salts_buf[0].scrypt_p) ? hashes->salts_buf[0].scrypt_p : SCRYPT_P; - - const u64 extra_buffer_size = device_param->extra_buffer_size; - - const u64 kernel_power_max = ((OPTS_TYPE & OPTS_TYPE_MP_MULTI_DISABLE) ? 1 : device_param->device_processors) * device_param->kernel_threads_max * device_param->kernel_accel_max; - - const u64 size_scrypt = 128ULL * scrypt_r * scrypt_N; - - const u64 scrypt_tmto_final = (kernel_power_max * size_scrypt) / extra_buffer_size; - - const u64 tmp_size = 128ULL * scrypt_r * scrypt_p; - - char *jit_build_options = NULL; - - hc_asprintf (&jit_build_options, "-D SCRYPT_N=%u -D SCRYPT_R=%u -D SCRYPT_P=%u -D SCRYPT_TMTO=%" PRIu64 " -D SCRYPT_TMP_ELEM=%" PRIu64, - hashes->salts_buf[0].scrypt_N, - hashes->salts_buf[0].scrypt_r, - hashes->salts_buf[0].scrypt_p, - scrypt_tmto_final, - tmp_size / 16); - - return jit_build_options; -} - int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len) { u32 *digest = (u32 *) digest_buf; @@ -459,9 +225,9 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_dgst_size = module_dgst_size; module_ctx->module_dictstat_disable = MODULE_DEFAULT; module_ctx->module_esalt_size = MODULE_DEFAULT; - module_ctx->module_extra_buffer_size = module_extra_buffer_size; - module_ctx->module_extra_tmp_size = module_extra_tmp_size; - module_ctx->module_extra_tuningdb_block = module_extra_tuningdb_block; + module_ctx->module_extra_buffer_size = scrypt_module_extra_buffer_size; + module_ctx->module_extra_tmp_size = scrypt_module_extra_tmp_size; + module_ctx->module_extra_tuningdb_block = scrypt_module_extra_tuningdb_block; module_ctx->module_forced_outfile_format = MODULE_DEFAULT; module_ctx->module_hash_binary_count = MODULE_DEFAULT; module_ctx->module_hash_binary_parse = MODULE_DEFAULT; @@ -487,14 +253,14 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = module_jit_build_options; + module_ctx->module_jit_build_options = scrypt_module_jit_build_options; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; - module_ctx->module_kernel_loops_max = module_kernel_loops_max; - module_ctx->module_kernel_loops_min = module_kernel_loops_min; - module_ctx->module_kernel_threads_max = module_kernel_threads_max; - module_ctx->module_kernel_threads_min = module_kernel_threads_min; + module_ctx->module_kernel_loops_max = scrypt_module_kernel_loops_max; + module_ctx->module_kernel_loops_min = scrypt_module_kernel_loops_min; + module_ctx->module_kernel_threads_max = scrypt_module_kernel_threads_max; + module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; module_ctx->module_opti_type = module_opti_type; @@ -505,7 +271,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_potfile_disable = MODULE_DEFAULT; module_ctx->module_potfile_keep_all_hashes = MODULE_DEFAULT; module_ctx->module_pwdump_column = MODULE_DEFAULT; - module_ctx->module_pw_max = module_pw_max; + module_ctx->module_pw_max = MODULE_DEFAULT; module_ctx->module_pw_min = module_pw_min; module_ctx->module_salt_max = MODULE_DEFAULT; module_ctx->module_salt_min = MODULE_DEFAULT; @@ -513,7 +279,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_separator = MODULE_DEFAULT; module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; - module_ctx->module_tmp_size = module_tmp_size; + module_ctx->module_tmp_size = scrypt_module_tmp_size; module_ctx->module_unstable_warning = MODULE_DEFAULT; - module_ctx->module_warmup_disable = module_warmup_disable; + module_ctx->module_warmup_disable = scrypt_module_warmup_disable; } diff --git a/src/modules/scrypt_common.c b/src/modules/scrypt_common.c new file mode 100644 index 000000000..f97d0f657 --- /dev/null +++ b/src/modules/scrypt_common.c @@ -0,0 +1,251 @@ + +#include +#include "common.h" +#include "types.h" +#include "modules.h" +#include "bitops.h" +#include "convert.h" +#include "shared.h" +#include "memory.h" + +u32 scrypt_module_kernel_loops_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u32 kernel_loops_min = 1024; + + return kernel_loops_min; +} + +u32 scrypt_module_kernel_loops_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u32 kernel_loops_max = 1024; + + return kernel_loops_max; +} + +u32 scrypt_module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u32 kernel_threads_max = (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : SCRYPT_THREADS; + + return kernel_threads_max; +} + +u32 tmto = 0; + +u32 scrypt_exptected_threads (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) +{ + u32 threads = scrypt_module_kernel_threads_max (hashconfig, user_options, user_options_extra); + + if (hashconfig->opts_type & OPTS_TYPE_NATIVE_THREADS) + { + if (device_param->opencl_device_type & CL_DEVICE_TYPE_CPU) + { + threads = 1; + } + } + + return threads; +} + +const char *scrypt_module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes, const u32 device_id, const u32 kernel_accel) +{ + hc_device_param_t *device_param = &backend_ctx->devices_param[device_id]; + + // preprocess tmto in case user has overridden + // it's important to set to 0 otherwise so we can postprocess tmto in that case + + tmto = (user_options->scrypt_tmto_chgd == true) ? user_options->scrypt_tmto : 0; + + // we enforce the same configuration for all hashes, so this should be fine + + const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; + const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; + const u64 scrypt_p = (hashes->salts_buf[0].scrypt_p) ? hashes->salts_buf[0].scrypt_p : SCRYPT_P; + + const u64 size_per_accel = (128 * scrypt_r * scrypt_N * scrypt_exptected_threads (hashconfig, user_options, user_options_extra, device_param)) >> tmto; + + const u64 state_per_accel = (128 * scrypt_r * scrypt_p * scrypt_exptected_threads (hashconfig, user_options, user_options_extra, device_param)); + + int lines_sz = 4096; + char *lines_buf = hcmalloc (lines_sz); + int lines_pos = 0; + + const u32 device_processors = device_param->device_processors; + + const u32 device_local_mem_size = device_param->device_local_mem_size; + + const u64 available_mem = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)); + + u32 kernel_accel_new = device_processors; + + if (kernel_accel) + { + // from command line or tuning db has priority + + kernel_accel_new = user_options->kernel_accel; + } + else + { + // find a nice kernel_accel programmatically + + if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) + { + if ((size_per_accel * device_processors) > available_mem) // not enough memory + { + const float multi = (float) available_mem / size_per_accel; + + int accel_multi; + + for (accel_multi = 1; accel_multi <= 2; accel_multi++) + { + kernel_accel_new = multi * (1 << accel_multi); + + if (kernel_accel_new >= device_processors) break; + } + + // we need some space for tmps[], ... + + kernel_accel_new -= (1 << accel_multi); + + // clamp if close to device processors -- 16% seems fine on a 2080ti, and on a 4090 + + if ((kernel_accel_new > device_processors) && ((device_processors * 1.16) > kernel_accel_new)) + { + kernel_accel_new = device_processors; + } + } + else + { + for (int i = 1; i <= 8; i++) + { + if ((size_per_accel * device_processors * i) < available_mem) + { + kernel_accel_new = device_processors * i; + } + } + } + } + else + { + for (int i = 1; i <= 8; i++) + { + if ((size_per_accel * device_processors * i) < available_mem) + { + kernel_accel_new = device_processors * i; + } + } + } + } + + // fix tmto if user allows + + if (tmto == 0) + { + const u32 tmto_start = 1; + const u32 tmto_stop = 5; + + for (u32 tmto_new = tmto_start; tmto_new <= tmto_stop; tmto_new++) + { + // global memory check + if (available_mem < (kernel_accel_new * (size_per_accel >> tmto_new))) continue; + + // also need local memory check because in kernel we have: + // LOCAL_VK uint4 T_s[MAX_THREADS_PER_BLOCK][STATE_CNT4]; // 32 * 128 * r * p = 32KiB we're close if there's no TMTO + if (device_local_mem_size < (state_per_accel >> tmto_new)) continue; + + tmto = tmto_new; + + break; + } + } + + char *new_device_name = hcstrdup (device_param->device_name); + + for (size_t i = 0; i < strlen (new_device_name); i++) + { + if (new_device_name[i] == ' ') new_device_name[i] = '_'; + } + + lines_pos += snprintf (lines_buf + lines_pos, lines_sz - lines_pos, "%s * %u 1 %u A\n", new_device_name, user_options->hash_mode, kernel_accel_new); + + hcfree (new_device_name); + + return lines_buf; +} + +u64 scrypt_module_extra_buffer_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) +{ + // we need to set the self-test hash settings to pass the self-test + // the decoder for the self-test is called after this function + + const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; + const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; + + const u64 size_per_accel = 128 * scrypt_r * scrypt_N * scrypt_exptected_threads (hashconfig, user_options, user_options_extra, device_param); + + u64 size_scrypt = size_per_accel * device_param->kernel_accel_max; + + return size_scrypt / (1 << tmto); +} + +u64 scrypt_module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u64 tmp_size = 0; // we'll add some later + + return tmp_size; +} + +u64 scrypt_module_extra_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes) +{ + const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; + const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; + const u64 scrypt_p = (hashes->salts_buf[0].scrypt_p) ? hashes->salts_buf[0].scrypt_p : SCRYPT_P; + + // we need to check that all hashes have the same scrypt settings + + for (u32 i = 1; i < hashes->salts_cnt; i++) + { + if ((hashes->salts_buf[i].scrypt_N != scrypt_N) + || (hashes->salts_buf[i].scrypt_r != scrypt_r) + || (hashes->salts_buf[i].scrypt_p != scrypt_p)) + { + return -1; + } + } + + const u64 tmp_size = 128ULL * scrypt_r * scrypt_p; + + return tmp_size; +} + +bool scrypt_module_warmup_disable (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + return true; +} + +char *scrypt_module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) +{ + const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; + const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; + const u64 scrypt_p = (hashes->salts_buf[0].scrypt_p) ? hashes->salts_buf[0].scrypt_p : SCRYPT_P; + + const u64 extra_buffer_size = device_param->extra_buffer_size; + + const u64 kernel_power_max = ((OPTS_TYPE & OPTS_TYPE_MP_MULTI_DISABLE) ? 1 : device_param->device_processors) * device_param->kernel_threads_max * device_param->kernel_accel_max; + + const u64 size_scrypt = 128ULL * scrypt_r * scrypt_N; + + const u64 scrypt_tmto_final = (kernel_power_max * size_scrypt) / extra_buffer_size; + + const u64 tmp_size = 128ULL * scrypt_r * scrypt_p; + + char *jit_build_options = NULL; + + hc_asprintf (&jit_build_options, "-D SCRYPT_N=%u -D SCRYPT_R=%u -D SCRYPT_P=%u -D SCRYPT_TMTO=%" PRIu64 " -D SCRYPT_TMP_ELEM=%" PRIu64, + hashes->salts_buf[0].scrypt_N, + hashes->salts_buf[0].scrypt_r, + hashes->salts_buf[0].scrypt_p, + scrypt_tmto_final, + tmp_size / 16); + + return jit_build_options; +} From cb7848f956c783eb763dc19b2b0c7af43c9a0a98 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Sat, 14 Jun 2025 22:36:14 +0200 Subject: [PATCH 62/95] Change the default benchmark mask from ?b?b?b?b?b?b?b to ?a?a?a?a?a?a?a to avoid inconsistencies when converting between UTF-8 and UTF-16 --- src/interface.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/interface.c b/src/interface.c index b1c1bc32b..3c9c7ed2d 100644 --- a/src/interface.c +++ b/src/interface.c @@ -580,7 +580,7 @@ void hashconfig_destroy (hashcat_ctx_t *hashcat_ctx) const char *default_benchmark_mask (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { - const char *mask = "?b?b?b?b?b?b?b"; + const char *mask = "?a?a?a?a?a?a?a"; return mask; } From 07395626fa31e0b935e6107c5fd2d5f1e9a1deed Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Sun, 15 Jun 2025 14:13:48 +0200 Subject: [PATCH 63/95] Introduce hashes_init_stage5() and call module_extra_tmp_size() there. At this stage, the self-test hash is initialized and its values can be used. Remove hard-coded SCRYPT N, R, and P values in modules, except where they are intentionally hardcoded. Fix a bug that always caused a TMTO value of 1, even when it was not needed. Respect device_available_mem and device_maxmem_alloc values even if a reliable low-level free memory API is present, and always select the lowest of all available limits. Fix benchmark_deep.pl mask to avoid UTF-8 rejects. Improve error messages when the check verifying that all SCRYPT configuration settings across all hashes are identical is triggered. Also improve the error message shown when the SCRYPT configuration of the self-test hash does not match that of the target hash. Fix a bug where a low-tuned SCRYPT hash combined with a TMTO could result in fewer than 1024 iterations, which breaks the hard-coded minimum of 1024 iterations in the SCRYPT kernel. --- include/hashes.h | 1 + src/backend.c | 3 +- src/hashcat.c | 6 ++ src/hashes.c | 108 ++++++++++++++++++++++++++++++------ src/modules/module_08900.c | 4 -- src/modules/module_09300.c | 13 ++--- src/modules/module_15700.c | 4 -- src/modules/module_22700.c | 10 +--- src/modules/module_24000.c | 10 +--- src/modules/module_27700.c | 4 -- src/modules/module_28200.c | 4 -- src/modules/module_29800.c | 4 -- src/modules/scrypt_common.c | 84 ++++++++++++++++------------ tools/benchmark_deep.pl | 2 +- 14 files changed, 161 insertions(+), 96 deletions(-) diff --git a/include/hashes.h b/include/hashes.h index 9daa87583..35b5a1d42 100644 --- a/include/hashes.h +++ b/include/hashes.h @@ -25,6 +25,7 @@ int hashes_init_stage1 (hashcat_ctx_t *hashcat_ctx); int hashes_init_stage2 (hashcat_ctx_t *hashcat_ctx); int hashes_init_stage3 (hashcat_ctx_t *hashcat_ctx); int hashes_init_stage4 (hashcat_ctx_t *hashcat_ctx); +int hashes_init_stage5 (hashcat_ctx_t *hashcat_ctx); int hashes_init_selftest (hashcat_ctx_t *hashcat_ctx); int hashes_init_benchmark (hashcat_ctx_t *hashcat_ctx); int hashes_init_zerohash (hashcat_ctx_t *hashcat_ctx); diff --git a/src/backend.c b/src/backend.c index abd2ff382..4a7e36be3 100644 --- a/src/backend.c +++ b/src/backend.c @@ -9677,7 +9677,8 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) continue; } - device_param->device_available_mem = device_param->device_global_mem - used_bytes; + device_param->device_available_mem = MIN (device_param->device_available_mem, device_param->device_global_mem - used_bytes); + device_param->device_available_mem = MIN (device_param->device_available_mem, device_param->device_maxmem_alloc); break; } diff --git a/src/hashcat.c b/src/hashcat.c index 9907e1229..e5852522e 100644 --- a/src/hashcat.c +++ b/src/hashcat.c @@ -728,6 +728,12 @@ static int outer_loop (hashcat_ctx_t *hashcat_ctx) if (hashes_init_selftest (hashcat_ctx) == -1) return -1; + /** + * load hashes, post automatisation + */ + + if (hashes_init_stage5 (hashcat_ctx) == -1) return -1; + /** * load hashes, benchmark */ diff --git a/src/hashes.c b/src/hashes.c index 4699328df..78a6d5b90 100644 --- a/src/hashes.c +++ b/src/hashes.c @@ -2236,9 +2236,7 @@ int hashes_init_stage4 (hashcat_ctx_t *hashcat_ctx) { hashconfig_t *hashconfig = hashcat_ctx->hashconfig; hashes_t *hashes = hashcat_ctx->hashes; - module_ctx_t *module_ctx = hashcat_ctx->module_ctx; user_options_t *user_options = hashcat_ctx->user_options; - user_options_extra_t *user_options_extra = hashcat_ctx->user_options_extra; if (hashes->salts_cnt == 1) hashconfig->opti_type |= OPTI_TYPE_SINGLE_SALT; @@ -2317,22 +2315,6 @@ int hashes_init_stage4 (hashcat_ctx_t *hashcat_ctx) } } - // time to update extra_tmp_size which is tmp_size value based on hash configuration - - if (module_ctx->module_extra_tmp_size != MODULE_DEFAULT) - { - const u64 extra_tmp_size = module_ctx->module_extra_tmp_size (hashconfig, user_options, user_options_extra, hashes); - - if (extra_tmp_size == (u64) -1) - { - event_log_error (hashcat_ctx, "Mixed hash settings are not supported."); - - return -1; - } - - hashconfig->tmp_size = extra_tmp_size; - } - // at this point we no longer need hash_t* structure hash_t *hashes_buf = hashes->hashes_buf; @@ -2368,6 +2350,96 @@ int hashes_init_stage4 (hashcat_ctx_t *hashcat_ctx) return 0; } +int hashes_init_stage5 (hashcat_ctx_t *hashcat_ctx) +{ + hashconfig_t *hashconfig = hashcat_ctx->hashconfig; + hashes_t *hashes = hashcat_ctx->hashes; + module_ctx_t *module_ctx = hashcat_ctx->module_ctx; + user_options_t *user_options = hashcat_ctx->user_options; + user_options_extra_t *user_options_extra = hashcat_ctx->user_options_extra; + + // time to update extra_tmp_size which is tmp_size value based on hash configuration + + if (module_ctx->module_extra_tmp_size != MODULE_DEFAULT) + { + const u64 extra_tmp_size = module_ctx->module_extra_tmp_size (hashconfig, user_options, user_options_extra, hashes); + + if ((extra_tmp_size & (1ULL << 62)) || (extra_tmp_size & (1ULL << 63))) + { + const u64 salt_pos = extra_tmp_size & 0xffffffff; + + char *tmp_buf = (char *) hcmalloc (HCBUFSIZ_LARGE); + + const int tmp_len = hash_encode (hashcat_ctx->hashconfig, hashcat_ctx->hashes, hashcat_ctx->module_ctx, tmp_buf, HCBUFSIZ_LARGE, salt_pos, 0); + + tmp_buf[tmp_len] = 0; + + compress_terminal_line_length (tmp_buf, 47, 6); + + char *user_hash = strdup (tmp_buf); + + if (extra_tmp_size & (1ULL << 62)) + { + strncpy (tmp_buf, hashconfig->st_hash, HCBUFSIZ_LARGE - 1); + + compress_terminal_line_length (tmp_buf, 47, 6); + + char *st_hash = strdup (tmp_buf); + + event_log_error (hashcat_ctx, "ERROR: Incompatible self-test SCRYPT configuration detected."); + + event_log_warning (hashcat_ctx, "The specified target hash:"); + event_log_warning (hashcat_ctx, " -> %s", user_hash); + event_log_warning (hashcat_ctx, "does not match the SCRYPT configuration of the self-test hash:"); + event_log_warning (hashcat_ctx, " -> %s", st_hash); + event_log_warning (hashcat_ctx, "The JIT-compiled kernel for this SCRYPT configuration may be incompatible."); + event_log_warning (hashcat_ctx, "You must disable the self-test functionality or recompile the plugin with a matching self-test hash."); + event_log_warning (hashcat_ctx, "To disable the self-test, use the --self-test-disable option."); + event_log_warning (hashcat_ctx, NULL); + + hcfree (tmp_buf); + hcfree (user_hash); + hcfree (st_hash); + + return -1; + } + + if (extra_tmp_size & (1ULL << 63)) + { + const int tmp_len = hash_encode (hashcat_ctx->hashconfig, hashcat_ctx->hashes, hashcat_ctx->module_ctx, tmp_buf, HCBUFSIZ_LARGE, 0, 0); + + tmp_buf[tmp_len] = 0; + + compress_terminal_line_length (tmp_buf, 47, 6); + + char *user_hash2 = strdup (tmp_buf); + + event_log_error (hashcat_ctx, "ERROR: Mixed SCRYPT configuration detected."); + + event_log_warning (hashcat_ctx, "The specified target hash:"); + event_log_warning (hashcat_ctx, " -> %s", user_hash); + event_log_warning (hashcat_ctx, "does not match the SCRYPT configuration of another target hash:"); + event_log_warning (hashcat_ctx, " -> %s", user_hash2); + event_log_warning (hashcat_ctx, "Please run these hashes in separate cracking sessions."); + event_log_warning (hashcat_ctx, NULL); + + hcfree (tmp_buf); + hcfree (user_hash); + hcfree (user_hash2); + + return -1; + } + + hcfree (tmp_buf); + hcfree (user_hash); + } + + hashconfig->tmp_size = extra_tmp_size; + } + + return 0; +} + int hashes_init_selftest (hashcat_ctx_t *hashcat_ctx) { folder_config_t *folder_config = hashcat_ctx->folder_config; diff --git a/src/modules/module_08900.c b/src/modules/module_08900.c index 3e2af586a..155e1277d 100644 --- a/src/modules/module_08900.c +++ b/src/modules/module_08900.c @@ -50,10 +50,6 @@ static const char *SIGNATURE_SCRYPT = "SCRYPT"; static const u32 SCRYPT_THREADS = 32; -static const u64 SCRYPT_N = 16384; -static const u64 SCRYPT_R = 8; -static const u64 SCRYPT_P = 1; - #include "scrypt_common.c" int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len) diff --git a/src/modules/module_09300.c b/src/modules/module_09300.c index 05f25e62b..12e0620b0 100644 --- a/src/modules/module_09300.c +++ b/src/modules/module_09300.c @@ -50,10 +50,6 @@ static const char *SIGNATURE_CISCO9 = "$9$"; static const u32 SCRYPT_THREADS = 32; -static const u64 SCRYPT_N = 16384; -static const u64 SCRYPT_R = 1; -static const u64 SCRYPT_P = 1; - #include "scrypt_common.c" int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len) @@ -96,14 +92,15 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE salt->salt_len = salt_len; - salt->scrypt_N = SCRYPT_N; - salt->scrypt_r = SCRYPT_R; - salt->scrypt_p = SCRYPT_P; + // fixed scrypt configuration in this mode + + salt->scrypt_N = 16384; + salt->scrypt_r = 1; + salt->scrypt_p = 1; salt->salt_iter = salt->scrypt_N; salt->salt_repeats = salt->scrypt_p - 1; - // base64 decode hash const u8 *hash_pos = token.buf[2]; diff --git a/src/modules/module_15700.c b/src/modules/module_15700.c index 6a29c0ce8..ef3976cac 100644 --- a/src/modules/module_15700.c +++ b/src/modules/module_15700.c @@ -58,10 +58,6 @@ static const char *SIGNATURE_ETHEREUM_SCRYPT = "$ethereum$s"; static const u32 SCRYPT_THREADS = 4; -static const u64 SCRYPT_N = 262144; -static const u64 SCRYPT_R = 8; -static const u64 SCRYPT_P = 1; - #include "scrypt_common.c" u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) diff --git a/src/modules/module_22700.c b/src/modules/module_22700.c index 0fddd735c..e198f7cbe 100644 --- a/src/modules/module_22700.c +++ b/src/modules/module_22700.c @@ -50,10 +50,6 @@ static const char *SIGNATURE_MULTIBIT = "$multibit$"; static const u32 SCRYPT_THREADS = 32; -static const u64 SCRYPT_N = 16384; -static const u64 SCRYPT_R = 8; -static const u64 SCRYPT_P = 1; - #include "scrypt_common.c" int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len) @@ -98,9 +94,9 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE // scrypt settings - salt->scrypt_N = SCRYPT_N; - salt->scrypt_r = SCRYPT_R; - salt->scrypt_p = SCRYPT_P; + salt->scrypt_N = 16384; + salt->scrypt_r = 8; + salt->scrypt_p = 1; salt->salt_iter = salt->scrypt_N; salt->salt_repeats = salt->scrypt_p - 1; diff --git a/src/modules/module_24000.c b/src/modules/module_24000.c index 774b05fd2..9bb0df257 100644 --- a/src/modules/module_24000.c +++ b/src/modules/module_24000.c @@ -58,10 +58,6 @@ static const char *SIGNATURE_BESTCRYPT_SCRYPT = "$bcve$"; static const u32 SCRYPT_THREADS = 16; -static const u64 SCRYPT_N = 32768; -static const u64 SCRYPT_R = 16; -static const u64 SCRYPT_P = 1; - #include "scrypt_common.c" u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) @@ -123,9 +119,9 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE // scrypt settings - const u32 scrypt_N = SCRYPT_N; - const u32 scrypt_r = SCRYPT_R; - const u32 scrypt_p = SCRYPT_P; + const u32 scrypt_N = 32768; + const u32 scrypt_r = 16; + const u32 scrypt_p = 1; salt->scrypt_N = scrypt_N; salt->scrypt_r = scrypt_r; diff --git a/src/modules/module_27700.c b/src/modules/module_27700.c index 5176a6a7e..e78f7d8a3 100644 --- a/src/modules/module_27700.c +++ b/src/modules/module_27700.c @@ -50,10 +50,6 @@ static const char *SIGNATURE_MULTIBIT = "$multibit$"; static const u32 SCRYPT_THREADS = 32; -static const u64 SCRYPT_N = 16384; -static const u64 SCRYPT_R = 8; -static const u64 SCRYPT_P = 1; - #include "scrypt_common.c" int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len) diff --git a/src/modules/module_28200.c b/src/modules/module_28200.c index c4149ae94..03c75f588 100644 --- a/src/modules/module_28200.c +++ b/src/modules/module_28200.c @@ -58,10 +58,6 @@ static const char *SIGNATURE_EXODUS = "EXODUS"; static const u32 SCRYPT_THREADS = 32; -static const u64 SCRYPT_N = 16384; -static const u64 SCRYPT_R = 8; -static const u64 SCRYPT_P = 1; - #include "scrypt_common.c" u32 module_pw_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) diff --git a/src/modules/module_29800.c b/src/modules/module_29800.c index b919ab176..e02f495b6 100644 --- a/src/modules/module_29800.c +++ b/src/modules/module_29800.c @@ -50,10 +50,6 @@ static const char *SIGNATURE_BISQ = "$bisq$"; static const u32 SCRYPT_THREADS = 16; -static const u64 SCRYPT_N = 32768; -static const u64 SCRYPT_R = 8; -static const u64 SCRYPT_P = 6; - #include "scrypt_common.c" u32 module_pw_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) diff --git a/src/modules/scrypt_common.c b/src/modules/scrypt_common.c index f97d0f657..8070afa50 100644 --- a/src/modules/scrypt_common.c +++ b/src/modules/scrypt_common.c @@ -55,15 +55,14 @@ const char *scrypt_module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t tmto = (user_options->scrypt_tmto_chgd == true) ? user_options->scrypt_tmto : 0; - // we enforce the same configuration for all hashes, so this should be fine + // we enforce the same configuration for all hashes, so the next lines should be fine - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 scrypt_p = (hashes->salts_buf[0].scrypt_p) ? hashes->salts_buf[0].scrypt_p : SCRYPT_P; + const u32 scrypt_N = hashes->salts_buf[0].scrypt_N; + const u32 scrypt_r = hashes->salts_buf[0].scrypt_r; + const u32 scrypt_p = hashes->salts_buf[0].scrypt_p; - const u64 size_per_accel = (128 * scrypt_r * scrypt_N * scrypt_exptected_threads (hashconfig, user_options, user_options_extra, device_param)) >> tmto; - - const u64 state_per_accel = (128 * scrypt_r * scrypt_p * scrypt_exptected_threads (hashconfig, user_options, user_options_extra, device_param)); + const u64 size_per_accel = (128ULL * scrypt_r * scrypt_N * scrypt_exptected_threads (hashconfig, user_options, user_options_extra, device_param)) >> tmto; + const u64 state_per_accel = (128ULL * scrypt_r * scrypt_p * scrypt_exptected_threads (hashconfig, user_options, user_options_extra, device_param)); int lines_sz = 4096; char *lines_buf = hcmalloc (lines_sz); @@ -140,11 +139,14 @@ const char *scrypt_module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t if (tmto == 0) { - const u32 tmto_start = 1; + const u32 tmto_start = 0; const u32 tmto_stop = 5; for (u32 tmto_new = tmto_start; tmto_new <= tmto_stop; tmto_new++) { + // we have 1024 hard-coded in the kernel + if ((scrypt_N / (1 << tmto_new)) < 1024) continue; + // global memory check if (available_mem < (kernel_accel_new * (size_per_accel >> tmto_new))) continue; @@ -177,13 +179,22 @@ u64 scrypt_module_extra_buffer_size (MAYBE_UNUSED const hashconfig_t *hashconfig // we need to set the self-test hash settings to pass the self-test // the decoder for the self-test is called after this function - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; + const u32 scrypt_N = hashes->salts_buf[0].scrypt_N; + const u32 scrypt_r = hashes->salts_buf[0].scrypt_r; + //const u32 scrypt_p = hashes->salts_buf[0].scrypt_p; - const u64 size_per_accel = 128 * scrypt_r * scrypt_N * scrypt_exptected_threads (hashconfig, user_options, user_options_extra, device_param); + const u64 size_per_accel = 128ULL * scrypt_r * scrypt_N * scrypt_exptected_threads (hashconfig, user_options, user_options_extra, device_param); u64 size_scrypt = size_per_accel * device_param->kernel_accel_max; + // We must maintain at least 1024 iteration it's hard-coded in the kernel + if ((scrypt_N / (1 << tmto)) < 1024) + { + fprintf (stderr, "ERROR: SCRYPT-N parameter too low. Invalid tmto specified?\n"); + + return -1; + } + return size_scrypt / (1 << tmto); } @@ -196,19 +207,32 @@ u64 scrypt_module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_U u64 scrypt_module_extra_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes) { - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 scrypt_p = (hashes->salts_buf[0].scrypt_p) ? hashes->salts_buf[0].scrypt_p : SCRYPT_P; + const u32 scrypt_N = hashes->salts_buf[0].scrypt_N; + const u32 scrypt_r = hashes->salts_buf[0].scrypt_r; + const u32 scrypt_p = hashes->salts_buf[0].scrypt_p; + // in general, since we compile the kernel based on N, r, p, so the JIT can optimize it, we can't have other configuration settings // we need to check that all hashes have the same scrypt settings for (u32 i = 1; i < hashes->salts_cnt; i++) { - if ((hashes->salts_buf[i].scrypt_N != scrypt_N) - || (hashes->salts_buf[i].scrypt_r != scrypt_r) - || (hashes->salts_buf[i].scrypt_p != scrypt_p)) + if ((scrypt_N != hashes->salts_buf[i].scrypt_N) + || (scrypt_r != hashes->salts_buf[i].scrypt_r) + || (scrypt_p != hashes->salts_buf[i].scrypt_p)) { - return -1; + return (1ULL << 63) + i; + } + } + + // now that we know they all have the same settings, we also need to check the self-test hash is different to what the user hash is using + + if (user_options->self_test == true) + { + if ((scrypt_N != hashes->st_salts_buf[0].scrypt_N) + || (scrypt_r != hashes->st_salts_buf[0].scrypt_r) + || (scrypt_p != hashes->st_salts_buf[0].scrypt_p)) + { + return (1ULL << 62); } } @@ -224,27 +248,19 @@ bool scrypt_module_warmup_disable (MAYBE_UNUSED const hashconfig_t *hashconfig, char *scrypt_module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) { - const u64 scrypt_N = (hashes->salts_buf[0].scrypt_N) ? hashes->salts_buf[0].scrypt_N : SCRYPT_N; - const u64 scrypt_r = (hashes->salts_buf[0].scrypt_r) ? hashes->salts_buf[0].scrypt_r : SCRYPT_R; - const u64 scrypt_p = (hashes->salts_buf[0].scrypt_p) ? hashes->salts_buf[0].scrypt_p : SCRYPT_P; - - const u64 extra_buffer_size = device_param->extra_buffer_size; - - const u64 kernel_power_max = ((OPTS_TYPE & OPTS_TYPE_MP_MULTI_DISABLE) ? 1 : device_param->device_processors) * device_param->kernel_threads_max * device_param->kernel_accel_max; - - const u64 size_scrypt = 128ULL * scrypt_r * scrypt_N; - - const u64 scrypt_tmto_final = (kernel_power_max * size_scrypt) / extra_buffer_size; + const u32 scrypt_N = hashes->salts_buf[0].scrypt_N; + const u32 scrypt_r = hashes->salts_buf[0].scrypt_r; + const u32 scrypt_p = hashes->salts_buf[0].scrypt_p; const u64 tmp_size = 128ULL * scrypt_r * scrypt_p; char *jit_build_options = NULL; - hc_asprintf (&jit_build_options, "-D SCRYPT_N=%u -D SCRYPT_R=%u -D SCRYPT_P=%u -D SCRYPT_TMTO=%" PRIu64 " -D SCRYPT_TMP_ELEM=%" PRIu64, - hashes->salts_buf[0].scrypt_N, - hashes->salts_buf[0].scrypt_r, - hashes->salts_buf[0].scrypt_p, - scrypt_tmto_final, + hc_asprintf (&jit_build_options, "-D SCRYPT_N=%u -D SCRYPT_R=%u -D SCRYPT_P=%u -D SCRYPT_TMTO=%u -D SCRYPT_TMP_ELEM=%" PRIu64, + scrypt_N, + scrypt_r, + scrypt_p, + tmto + 1, tmp_size / 16); return jit_build_options; diff --git a/tools/benchmark_deep.pl b/tools/benchmark_deep.pl index 41c03ac7f..2a917e2f1 100755 --- a/tools/benchmark_deep.pl +++ b/tools/benchmark_deep.pl @@ -17,7 +17,7 @@ my $device = 1; my $workload_profile = 3; my $runtime = 24; my $sleep_sec = 12; -my $default_mask = "?b?b?b?b?b?b?b"; +my $default_mask = "?a?a?a?a?a?a?a"; my $result = "result.txt"; my $old_hashcat = 0; # requires to have ran with new hashcat before to create the hashfiles my $repeats = 0; From c61c1f48c457bfea22caaaf5f836b8cd8ed8669c Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Sun, 15 Jun 2025 16:17:13 +0200 Subject: [PATCH 64/95] Modules: Updated module_unstable_warning for hash-mode 1500, 3000, 14000 --- src/modules/module_01500.c | 16 ++++++++++++++-- src/modules/module_03000.c | 9 +++++++++ src/modules/module_14000.c | 9 +++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/modules/module_01500.c b/src/modules/module_01500.c index 29c652099..a00ced43a 100644 --- a/src/modules/module_01500.c +++ b/src/modules/module_01500.c @@ -46,9 +46,21 @@ const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) { - // Intel(R) Xeon(R) W-3223 CPU @ 3.50GHz; OpenCL C 1.2; 11.3.1; 20E241 - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE || device_param->opencl_platform_vendor_id == VENDOR_ID_INTEL_SDK) && (device_param->opencl_device_type & CL_DEVICE_TYPE_CPU)) + if (device_param->opencl_device_type & CL_DEVICE_TYPE_CPU) { + if (device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) + { + // works on Apple Intel: Intel(R) Core(TM) i7-4578U CPU @ 3.00GHz + return false; + } + + if (strncmp (device_param->device_name, "AMD EPYC", 8) == 0) + { + // works on Linux: AMD EPYC 7642 48-Core Processor, OpenCL 2.1 (Build 0) + return false; + } + + // skip by default for now return true; } diff --git a/src/modules/module_03000.c b/src/modules/module_03000.c index 3bfb28b74..f498c1eed 100644 --- a/src/modules/module_03000.c +++ b/src/modules/module_03000.c @@ -54,6 +54,15 @@ bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE // Intel(R) Xeon(R) W-3223 CPU @ 3.50GHz; OpenCL C 1.2; 11.3.1; 20E241 if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE || device_param->opencl_platform_vendor_id == VENDOR_ID_INTEL_SDK) && (device_param->opencl_device_type & CL_DEVICE_TYPE_CPU)) { + if (strncmp (device_param->device_name, "AMD EPYC", 8) == 0) + { + // works on: AMD EPYC 7642 48-Core Processor, OpenCL 2.1 (Build 0) + return false; + } + + // fail also on Apple Intel + + // skip by default for now return true; } diff --git a/src/modules/module_14000.c b/src/modules/module_14000.c index 3a5cf6c4f..bc23c05bd 100644 --- a/src/modules/module_14000.c +++ b/src/modules/module_14000.c @@ -49,6 +49,15 @@ bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE // Intel(R) Xeon(R) W-3223 CPU @ 3.50GHz; OpenCL C 1.2; 11.3.1; 20E241 if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE || device_param->opencl_platform_vendor_id == VENDOR_ID_INTEL_SDK) && (device_param->opencl_device_type & CL_DEVICE_TYPE_CPU)) { + if (strncmp (device_param->device_name, "AMD EPYC", 8) == 0) + { + // works on: AMD EPYC 7642 48-Core Processor, OpenCL 2.1 (Build 0) + return false; + } + + // fail also on Apple Intel + + // skip by default for now return true; } From 4d2485db0fbf74925498b54c68c6ff0f819f6d55 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Sun, 15 Jun 2025 18:00:08 +0200 Subject: [PATCH 65/95] Re-enable warmup on SCRYPT based algorithms for more accurate results. Fix TMTO handling --- OpenCL/inc_hash_scrypt.cl | 12 ++++++------ src/modules/module_08900.c | 2 +- src/modules/module_09300.c | 2 +- src/modules/module_15700.c | 2 +- src/modules/module_22700.c | 2 +- src/modules/module_24000.c | 2 +- src/modules/module_27700.c | 2 +- src/modules/module_28200.c | 2 +- src/modules/module_29800.c | 2 +- src/modules/scrypt_common.c | 31 +++++++++++++------------------ 10 files changed, 27 insertions(+), 32 deletions(-) diff --git a/OpenCL/inc_hash_scrypt.cl b/OpenCL/inc_hash_scrypt.cl index 697ed77bf..6c59404a0 100644 --- a/OpenCL/inc_hash_scrypt.cl +++ b/OpenCL/inc_hash_scrypt.cl @@ -291,7 +291,7 @@ DECLSPEC void scrypt_smix_init (LOCAL_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL_A DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) #endif { - const u32 ySIZE = SCRYPT_N / SCRYPT_TMTO; + const u32 ySIZE = SCRYPT_N >> SCRYPT_TMTO; const u32 zSIZE = STATE_CNT4; const u32 x = (u32) gid; @@ -314,9 +314,9 @@ DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL for (u32 z = 0; z < zSIZE; z++) V[CO] = X[z]; #ifdef IS_HIP - for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r_l ((LOCAL_AS u32 *) X); + for (u32 i = 0; i < (1 << SCRYPT_TMTO); i++) salsa_r_l ((LOCAL_AS u32 *) X); #else - for (u32 i = 0; i < SCRYPT_TMTO; i++) salsa_r_p ((PRIVATE_AS u32 *) X); + for (u32 i = 0; i < (1 << SCRYPT_TMTO); i++) salsa_r_p ((PRIVATE_AS u32 *) X); #endif } } @@ -327,7 +327,7 @@ DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, LOCAL_AS uint4 *T, GLOBAL_A DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, PRIVATE_AS uint4 *T, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) #endif { - const u32 ySIZE = SCRYPT_N / SCRYPT_TMTO; + const u32 ySIZE = SCRYPT_N >> SCRYPT_TMTO; const u32 zSIZE = STATE_CNT4; const u32 x = (u32) gid; @@ -351,9 +351,9 @@ DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, PRIVATE_AS uint4 *T, GLOBAL { const u32 k = X[zSIZE - 4].x & (SCRYPT_N - 1); - const u32 y = k / SCRYPT_TMTO; + const u32 y = k >> SCRYPT_TMTO; - const u32 km = k - (y * SCRYPT_TMTO); + const u32 km = k - (y << SCRYPT_TMTO); for (u32 z = 0; z < zSIZE; z++) T[z] = V[CO]; diff --git a/src/modules/module_08900.c b/src/modules/module_08900.c index 155e1277d..44cf20537 100644 --- a/src/modules/module_08900.c +++ b/src/modules/module_08900.c @@ -247,5 +247,5 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = scrypt_module_tmp_size; module_ctx->module_unstable_warning = MODULE_DEFAULT; - module_ctx->module_warmup_disable = scrypt_module_warmup_disable; + module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_09300.c b/src/modules/module_09300.c index 12e0620b0..4293053ab 100644 --- a/src/modules/module_09300.c +++ b/src/modules/module_09300.c @@ -209,5 +209,5 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = scrypt_module_tmp_size; module_ctx->module_unstable_warning = MODULE_DEFAULT; - module_ctx->module_warmup_disable = scrypt_module_warmup_disable; + module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_15700.c b/src/modules/module_15700.c index ef3976cac..c4b04ab90 100644 --- a/src/modules/module_15700.c +++ b/src/modules/module_15700.c @@ -308,5 +308,5 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = scrypt_module_tmp_size; module_ctx->module_unstable_warning = MODULE_DEFAULT; - module_ctx->module_warmup_disable = scrypt_module_warmup_disable; + module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_22700.c b/src/modules/module_22700.c index e198f7cbe..b5f3bafb8 100644 --- a/src/modules/module_22700.c +++ b/src/modules/module_22700.c @@ -246,5 +246,5 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = scrypt_module_tmp_size; module_ctx->module_unstable_warning = MODULE_DEFAULT; - module_ctx->module_warmup_disable = scrypt_module_warmup_disable; + module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_24000.c b/src/modules/module_24000.c index 9bb0df257..b13d398e0 100644 --- a/src/modules/module_24000.c +++ b/src/modules/module_24000.c @@ -263,5 +263,5 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = scrypt_module_tmp_size; module_ctx->module_unstable_warning = MODULE_DEFAULT; - module_ctx->module_warmup_disable = scrypt_module_warmup_disable; + module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_27700.c b/src/modules/module_27700.c index e78f7d8a3..837418626 100644 --- a/src/modules/module_27700.c +++ b/src/modules/module_27700.c @@ -270,5 +270,5 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = scrypt_module_tmp_size; module_ctx->module_unstable_warning = MODULE_DEFAULT; - module_ctx->module_warmup_disable = scrypt_module_warmup_disable; + module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_28200.c b/src/modules/module_28200.c index 03c75f588..a8540a1c9 100644 --- a/src/modules/module_28200.c +++ b/src/modules/module_28200.c @@ -366,5 +366,5 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = scrypt_module_tmp_size; module_ctx->module_unstable_warning = MODULE_DEFAULT; - module_ctx->module_warmup_disable = scrypt_module_warmup_disable; + module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_29800.c b/src/modules/module_29800.c index e02f495b6..fd78316f0 100644 --- a/src/modules/module_29800.c +++ b/src/modules/module_29800.c @@ -277,5 +277,5 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = scrypt_module_tmp_size; module_ctx->module_unstable_warning = MODULE_DEFAULT; - module_ctx->module_warmup_disable = scrypt_module_warmup_disable; + module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/scrypt_common.c b/src/modules/scrypt_common.c index 8070afa50..baf811d46 100644 --- a/src/modules/scrypt_common.c +++ b/src/modules/scrypt_common.c @@ -57,9 +57,9 @@ const char *scrypt_module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t // we enforce the same configuration for all hashes, so the next lines should be fine - const u32 scrypt_N = hashes->salts_buf[0].scrypt_N; - const u32 scrypt_r = hashes->salts_buf[0].scrypt_r; - const u32 scrypt_p = hashes->salts_buf[0].scrypt_p; + const u32 scrypt_N = (hashes->salts_buf[0].scrypt_N == 0) ? hashes->st_salts_buf[0].scrypt_N : hashes->salts_buf[0].scrypt_N; + const u32 scrypt_r = (hashes->salts_buf[0].scrypt_r == 0) ? hashes->st_salts_buf[0].scrypt_r : hashes->salts_buf[0].scrypt_r; + const u32 scrypt_p = (hashes->salts_buf[0].scrypt_p == 0) ? hashes->st_salts_buf[0].scrypt_p : hashes->salts_buf[0].scrypt_p; const u64 size_per_accel = (128ULL * scrypt_r * scrypt_N * scrypt_exptected_threads (hashconfig, user_options, user_options_extra, device_param)) >> tmto; const u64 state_per_accel = (128ULL * scrypt_r * scrypt_p * scrypt_exptected_threads (hashconfig, user_options, user_options_extra, device_param)); @@ -179,9 +179,9 @@ u64 scrypt_module_extra_buffer_size (MAYBE_UNUSED const hashconfig_t *hashconfig // we need to set the self-test hash settings to pass the self-test // the decoder for the self-test is called after this function - const u32 scrypt_N = hashes->salts_buf[0].scrypt_N; - const u32 scrypt_r = hashes->salts_buf[0].scrypt_r; - //const u32 scrypt_p = hashes->salts_buf[0].scrypt_p; + const u32 scrypt_N = (hashes->salts_buf[0].scrypt_N == 0) ? hashes->st_salts_buf[0].scrypt_N : hashes->salts_buf[0].scrypt_N; + const u32 scrypt_r = (hashes->salts_buf[0].scrypt_r == 0) ? hashes->st_salts_buf[0].scrypt_r : hashes->salts_buf[0].scrypt_r; + //const u32 scrypt_p = (hashes->salts_buf[0].scrypt_p == 0) ? hashes->st_salts_buf[0].scrypt_p : hashes->salts_buf[0].scrypt_p; const u64 size_per_accel = 128ULL * scrypt_r * scrypt_N * scrypt_exptected_threads (hashconfig, user_options, user_options_extra, device_param); @@ -207,9 +207,9 @@ u64 scrypt_module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_U u64 scrypt_module_extra_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes) { - const u32 scrypt_N = hashes->salts_buf[0].scrypt_N; - const u32 scrypt_r = hashes->salts_buf[0].scrypt_r; - const u32 scrypt_p = hashes->salts_buf[0].scrypt_p; + const u32 scrypt_N = (hashes->salts_buf[0].scrypt_N == 0) ? hashes->st_salts_buf[0].scrypt_N : hashes->salts_buf[0].scrypt_N; + const u32 scrypt_r = (hashes->salts_buf[0].scrypt_r == 0) ? hashes->st_salts_buf[0].scrypt_r : hashes->salts_buf[0].scrypt_r; + const u32 scrypt_p = (hashes->salts_buf[0].scrypt_p == 0) ? hashes->st_salts_buf[0].scrypt_p : hashes->salts_buf[0].scrypt_p; // in general, since we compile the kernel based on N, r, p, so the JIT can optimize it, we can't have other configuration settings // we need to check that all hashes have the same scrypt settings @@ -241,16 +241,11 @@ u64 scrypt_module_extra_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, M return tmp_size; } -bool scrypt_module_warmup_disable (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - return true; -} - char *scrypt_module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) { - const u32 scrypt_N = hashes->salts_buf[0].scrypt_N; - const u32 scrypt_r = hashes->salts_buf[0].scrypt_r; - const u32 scrypt_p = hashes->salts_buf[0].scrypt_p; + const u32 scrypt_N = (hashes->salts_buf[0].scrypt_N == 0) ? hashes->st_salts_buf[0].scrypt_N : hashes->salts_buf[0].scrypt_N; + const u32 scrypt_r = (hashes->salts_buf[0].scrypt_r == 0) ? hashes->st_salts_buf[0].scrypt_r : hashes->salts_buf[0].scrypt_r; + const u32 scrypt_p = (hashes->salts_buf[0].scrypt_p == 0) ? hashes->st_salts_buf[0].scrypt_p : hashes->salts_buf[0].scrypt_p; const u64 tmp_size = 128ULL * scrypt_r * scrypt_p; @@ -260,7 +255,7 @@ char *scrypt_module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconf scrypt_N, scrypt_r, scrypt_p, - tmto + 1, + tmto, tmp_size / 16); return jit_build_options; From e134564a731885ad8e8b56c87ca61c2b53961359 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Sun, 15 Jun 2025 21:14:40 +0200 Subject: [PATCH 66/95] Increase default iteration count per kernel invocation from 1024 to 2048 Add support for lower iteration counts per kernel invocation than the default, enabling TMTO for low scrypt configurations, such as N=1024 Use TMTO 2 if it reaches 4 times the device processor count, instead of TMTO 1 always Improve performance for low scrypt configurations (hash-mode 9300) Fix unit test for 15700 with correct scrypt configurations Disable CPU over subscription for SCRYPT based algorithms --- OpenCL/inc_hash_scrypt.cl | 6 ++- OpenCL/inc_hash_scrypt.h | 14 ++++++- src/modules/scrypt_common.c | 76 +++++++++++++++++------------------- tools/test_modules/m15700.pm | 4 +- 4 files changed, 55 insertions(+), 45 deletions(-) diff --git a/OpenCL/inc_hash_scrypt.cl b/OpenCL/inc_hash_scrypt.cl index 6c59404a0..9662e330c 100644 --- a/OpenCL/inc_hash_scrypt.cl +++ b/OpenCL/inc_hash_scrypt.cl @@ -345,9 +345,11 @@ DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, PRIVATE_AS uint4 *T, GLOBAL case 3: V = V3; break; } - // note: fixed 1024 iterations = forced -u 1024 + // note: max 2048 iterations = forced -u 2048 - for (u32 N_pos = 0; N_pos < 1024; N_pos++) + const u32 N_max = (2048 > ySIZE) ? ySIZE : 2048; + + for (u32 N_pos = 0; N_pos < N_max; N_pos++) { const u32 k = X[zSIZE - 4].x & (SCRYPT_N - 1); diff --git a/OpenCL/inc_hash_scrypt.h b/OpenCL/inc_hash_scrypt.h index 3ae019a6e..a41b09def 100644 --- a/OpenCL/inc_hash_scrypt.h +++ b/OpenCL/inc_hash_scrypt.h @@ -26,8 +26,20 @@ inline __device__ uint4 operator + (const uint4 a, const uint4 b) { return mak inline __device__ uint4 operator ^ (const uint4 a, const uint4 b) { return make_uint4 ((a.x ^ b.x), (a.y ^ b.y), (a.z ^ b.z), (a.w ^ b.w)); } inline __device__ uint4 operator | (const uint4 a, const uint4 b) { return make_uint4 ((a.x | b.x), (a.y | b.y), (a.z | b.z), (a.w | b.w)); } inline __device__ void operator ^= ( uint4 &a, const uint4 b) { a.x ^= b.x; a.y ^= b.y; a.z ^= b.z; a.w ^= b.w; } +#endif -inline __device__ uint4 rotate (const uint4 a, const int n) { return ((a << n) | ((a >> (32 - n)))); } +#if defined IS_CUDA || defined IS_HIP +inline __device__ uint4 rotate (const uint4 a, const int n) +{ + uint4 r; + + r.x = hc_rotl32_S (r.x, n); + r.y = hc_rotl32_S (r.y, n); + r.z = hc_rotl32_S (r.z, n); + r.w = hc_rotl32_S (r.w, n); + + return r; +} #endif #endif diff --git a/src/modules/scrypt_common.c b/src/modules/scrypt_common.c index baf811d46..059f2fca8 100644 --- a/src/modules/scrypt_common.c +++ b/src/modules/scrypt_common.c @@ -10,14 +10,14 @@ u32 scrypt_module_kernel_loops_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { - const u32 kernel_loops_min = 1024; + const u32 kernel_loops_min = 2048; return kernel_loops_min; } u32 scrypt_module_kernel_loops_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { - const u32 kernel_loops_max = 1024; + const u32 kernel_loops_max = 2048; return kernel_loops_max; } @@ -84,7 +84,8 @@ const char *scrypt_module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t } else { - // find a nice kernel_accel programmatically + // find a nice kernel_accel for gpus programmatically + // on cpus there's no need for over subscription with scrypt if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) { @@ -92,45 +93,51 @@ const char *scrypt_module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t { const float multi = (float) available_mem / size_per_accel; - int accel_multi; - - for (accel_multi = 1; accel_multi <= 2; accel_multi++) + if ((multi * 2) >= device_processors) { - kernel_accel_new = multi * (1 << accel_multi); + kernel_accel_new = multi * 2; + kernel_accel_new -= 2; - if (kernel_accel_new >= device_processors) break; + if ((multi * 4) >= device_processors * 2) + { + kernel_accel_new = multi * 4; + kernel_accel_new -= 4; + } + } + else if ((multi * 4) >= device_processors) + { + kernel_accel_new = multi * 4; + kernel_accel_new -= 4; } - - // we need some space for tmps[], ... - - kernel_accel_new -= (1 << accel_multi); // clamp if close to device processors -- 16% seems fine on a 2080ti, and on a 4090 - if ((kernel_accel_new > device_processors) && ((device_processors * 1.16) > kernel_accel_new)) + if (kernel_accel_new > device_processors) { - kernel_accel_new = device_processors; + const u32 extra = kernel_accel_new % device_processors; + + if (extra < (device_processors * 0.16)) + { + kernel_accel_new -= extra; + } } } else { - for (int i = 1; i <= 8; i++) + u64 multi = available_mem / size_per_accel; + + if (tmto == 0) { - if ((size_per_accel * device_processors * i) < available_mem) - { - kernel_accel_new = device_processors * i; - } - } - } - } - else - { - for (int i = 1; i <= 8; i++) - { - if ((size_per_accel * device_processors * i) < available_mem) - { - kernel_accel_new = device_processors * i; + tmto = 2; // we radically assign tmto = 2, since most gpus seem to enjoy that tmto + + multi = available_mem / (size_per_accel >> tmto); } + + multi /= device_processors; + multi -= 4; + multi = MIN (16, multi); + + kernel_accel_new = device_processors * multi; // should be safe because of tmto } } } @@ -144,9 +151,6 @@ const char *scrypt_module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t for (u32 tmto_new = tmto_start; tmto_new <= tmto_stop; tmto_new++) { - // we have 1024 hard-coded in the kernel - if ((scrypt_N / (1 << tmto_new)) < 1024) continue; - // global memory check if (available_mem < (kernel_accel_new * (size_per_accel >> tmto_new))) continue; @@ -187,14 +191,6 @@ u64 scrypt_module_extra_buffer_size (MAYBE_UNUSED const hashconfig_t *hashconfig u64 size_scrypt = size_per_accel * device_param->kernel_accel_max; - // We must maintain at least 1024 iteration it's hard-coded in the kernel - if ((scrypt_N / (1 << tmto)) < 1024) - { - fprintf (stderr, "ERROR: SCRYPT-N parameter too low. Invalid tmto specified?\n"); - - return -1; - } - return size_scrypt / (1 << tmto); } diff --git a/tools/test_modules/m15700.pm b/tools/test_modules/m15700.pm index 896ce66e5..abee738bf 100644 --- a/tools/test_modules/m15700.pm +++ b/tools/test_modules/m15700.pm @@ -17,8 +17,8 @@ sub module_generate_hash { my $word = shift; my $salt = shift; - my $scrypt_N = shift || 1024 ; # 262144 originally - my $scrypt_r = shift || 1; # 8 originally + my $scrypt_N = shift || 262144; + my $scrypt_r = shift || 8; my $scrypt_p = shift || 1; my $ciphertext = shift || random_bytes (32); From 619b4a399845015c760553bbb8d9d16c9a413f09 Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Mon, 16 Jun 2025 07:52:22 +0200 Subject: [PATCH 67/95] Modules: Updated module_unstable_warning for hash-mode 19200 --- src/modules/module_19200.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/modules/module_19200.c b/src/modules/module_19200.c index 1e3681bb5..967e47915 100644 --- a/src/modules/module_19200.c +++ b/src/modules/module_19200.c @@ -58,6 +58,12 @@ bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE { if ((device_param->opencl_platform_vendor_id == VENDOR_ID_INTEL_SDK) && (device_param->opencl_device_type & CL_DEVICE_TYPE_CPU)) { + if (strncmp (device_param->device_name, "AMD EPYC", 8) == 0) + { + // works on Linux: AMD EPYC 7642 48-Core Processor, OpenCL 2.1 (Build 0) + return false; + } + return true; } From 027a3a0b395511a33c504beab278af68d231f399 Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Mon, 16 Jun 2025 08:05:50 +0200 Subject: [PATCH 68/95] Modules: Updated module_unstable_warning for hash-mode 1500 --- src/modules/module_01500.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/modules/module_01500.c b/src/modules/module_01500.c index a00ced43a..b66dddff1 100644 --- a/src/modules/module_01500.c +++ b/src/modules/module_01500.c @@ -60,6 +60,12 @@ bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE return false; } + if (device_param->opencl_platform_vendor_id != VENDOR_ID_INTEL_SDK) + { + // works on Linux/POCL + return false; + } + // skip by default for now return true; } From 4b93a6e93c3ed72b2f2b9c3a5a8f36906566f8cd Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Tue, 17 Jun 2025 13:32:57 +0200 Subject: [PATCH 69/95] Add support for detecting unified GPU memory on CUDA and HIP (previously available only for OpenCL and Metal). Do not adjust kernel-accel or scrypt-tmto for GPUs with unified memory, typically integrated GPUs in CPUs (APUs). Redesign the "4-buffer" strategy to avoid overallocation from naive division by four, which can significantly increase memory usage for high scrypt configurations (e.g., 256k:8:1). Update the scrypt B[] access pattern to match the new "4-buffer" design. Allow user-specified kernel-accel and scrypt-tmto values, individually or both, via command line and tuning database. Any unspecified parameters are adjusted automatically. Permit user-defined combinations of scrypt-tmto and kernel-accel even if they may exceed available memory. --- OpenCL/inc_comp_multi_iba.cl | 2 +- OpenCL/inc_hash_scrypt.cl | 22 ++-- OpenCL/inc_hash_scrypt.h | 3 +- OpenCL/inc_platform.cl | 10 ++ src/backend.c | 144 ++++++++++++++++++------ src/modules/scrypt_common.c | 209 +++++++++++++++++++++-------------- 6 files changed, 262 insertions(+), 128 deletions(-) diff --git a/OpenCL/inc_comp_multi_iba.cl b/OpenCL/inc_comp_multi_iba.cl index 9a41cc17c..05d8bf3b1 100644 --- a/OpenCL/inc_comp_multi_iba.cl +++ b/OpenCL/inc_comp_multi_iba.cl @@ -3,7 +3,7 @@ for (int digest_pos = 0; digest_pos < DIGESTS_CNT; digest_pos++) { const u32 final_hash_pos = DIGESTS_OFFSET_HOST + digest_pos; - const digest_t *digest = digests_buf + final_hash_pos; + GLOBAL_AS const digest_t *digest = digests_buf + final_hash_pos; const int invalid_bits = count_bits_32 (digest->digest_buf[0], r0) + count_bits_32 (digest->digest_buf[1], r1) diff --git a/OpenCL/inc_hash_scrypt.cl b/OpenCL/inc_hash_scrypt.cl index 9662e330c..6655e2191 100644 --- a/OpenCL/inc_hash_scrypt.cl +++ b/OpenCL/inc_hash_scrypt.cl @@ -294,10 +294,12 @@ DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL const u32 ySIZE = SCRYPT_N >> SCRYPT_TMTO; const u32 zSIZE = STATE_CNT4; - const u32 x = (u32) gid; + const u64 bid = get_group_id(0); + const u64 lsz = get_local_size(0); + const u64 lid = get_local_id(0); - const u32 xd4 = x / 4; - const u32 xm4 = x & 3; + const u32 xd4 = bid / 4; + const u32 xm4 = bid & 3; GLOBAL_AS uint4 *V; @@ -311,7 +313,7 @@ DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL for (u32 y = 0; y < ySIZE; y++) { - for (u32 z = 0; z < zSIZE; z++) V[CO] = X[z]; + for (u32 z = 0; z < zSIZE; z++) V[VIDX(xd4, lsz, lid, ySIZE, zSIZE, y, z)] = X[z]; #ifdef IS_HIP for (u32 i = 0; i < (1 << SCRYPT_TMTO); i++) salsa_r_l ((LOCAL_AS u32 *) X); @@ -330,10 +332,12 @@ DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, PRIVATE_AS uint4 *T, GLOBAL const u32 ySIZE = SCRYPT_N >> SCRYPT_TMTO; const u32 zSIZE = STATE_CNT4; - const u32 x = (u32) gid; + const u64 bid = get_group_id(0); + const u64 lsz = get_local_size(0); + const u64 lid = get_local_id(0); - const u32 xd4 = x / 4; - const u32 xm4 = x & 3; + const u32 xd4 = bid / 4; + const u32 xm4 = bid & 3; GLOBAL_AS uint4 *V; @@ -347,7 +351,7 @@ DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, PRIVATE_AS uint4 *T, GLOBAL // note: max 2048 iterations = forced -u 2048 - const u32 N_max = (2048 > ySIZE) ? ySIZE : 2048; + const u32 N_max = (SCRYPT_N < 2048) ? SCRYPT_N : 2048; for (u32 N_pos = 0; N_pos < N_max; N_pos++) { @@ -357,7 +361,7 @@ DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, PRIVATE_AS uint4 *T, GLOBAL const u32 km = k - (y << SCRYPT_TMTO); - for (u32 z = 0; z < zSIZE; z++) T[z] = V[CO]; + for (u32 z = 0; z < zSIZE; z++) T[z] = V[VIDX(xd4, lsz, lid, ySIZE, zSIZE, y, z)]; #ifdef IS_HIP for (u32 i = 0; i < km; i++) salsa_r_l ((LOCAL_AS u32 *) T); diff --git a/OpenCL/inc_hash_scrypt.h b/OpenCL/inc_hash_scrypt.h index a41b09def..6f3864cdd 100644 --- a/OpenCL/inc_hash_scrypt.h +++ b/OpenCL/inc_hash_scrypt.h @@ -15,8 +15,7 @@ #define STATE_CNT GET_STATE_CNT (SCRYPT_R) #define STATE_CNT4 (STATE_CNT / 4) -#define Coord(xd4,y,z) (((xd4) * ySIZE * zSIZE) + ((y) * zSIZE) + (z)) -#define CO Coord(xd4,y,z) +#define VIDX(bid4,lsz,lid,ySIZE,zSIZE,y,z) (((bid4) * (lsz) * (ySIZE) * (zSIZE)) + ((lid) * (ySIZE) * (zSIZE)) + ((y) * (zSIZE)) + (z)) #if defined IS_CUDA inline __device__ uint4 operator & (const uint4 a, const u32 b) { return make_uint4 ((a.x & b ), (a.y & b ), (a.z & b ), (a.w & b )); } diff --git a/OpenCL/inc_platform.cl b/OpenCL/inc_platform.cl index 99d2cea13..1125236dd 100644 --- a/OpenCL/inc_platform.cl +++ b/OpenCL/inc_platform.cl @@ -104,6 +104,11 @@ DECLSPEC u32 hc_atomic_or (GLOBAL_AS u32 *p, volatile const u32 val) return atomicOr (p, val); } +DECLSPEC size_t get_group_id (const u32 dimindx __attribute__((unused))) +{ + return blockIdx.x; +} + DECLSPEC size_t get_global_id (const u32 dimindx __attribute__((unused))) { return (blockIdx.x * blockDim.x) + threadIdx.x; @@ -280,6 +285,11 @@ DECLSPEC u32 hc_atomic_or (GLOBAL_AS u32 *p, volatile const u32 val) return atomicOr (p, val); } +DECLSPEC size_t get_group_id (const u32 dimindx __attribute__((unused))) +{ + return blockIdx.x; +} + DECLSPEC size_t get_global_id (const u32 dimindx __attribute__((unused))) { return (blockIdx.x * blockDim.x) + threadIdx.x; diff --git a/src/backend.c b/src/backend.c index 4a7e36be3..9b1f290a5 100644 --- a/src/backend.c +++ b/src/backend.c @@ -5305,6 +5305,19 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) hc_string_trim_trailing (device_name); + // unified memory + + int device_host_unified_memory = 0; + + if (hc_cuDeviceGetAttribute (hashcat_ctx, &device_host_unified_memory, CU_DEVICE_ATTRIBUTE_INTEGRATED, cuda_device) == -1) + { + device_param->skipped = true; + + continue; + } + + device_param->device_host_unified_memory = device_host_unified_memory; + // device_processors int device_processors = 0; @@ -5735,6 +5748,19 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) hc_string_trim_trailing (device_name); + // unified memory + + int device_host_unified_memory = 0; + + if (hc_hipDeviceGetAttribute (hashcat_ctx, &device_host_unified_memory, hipDeviceAttributeIntegrated, hip_device) == -1) + { + device_param->skipped = true; + + continue; + } + + device_param->device_host_unified_memory = device_host_unified_memory; + // device_processors int device_processors = 0; @@ -9705,11 +9731,16 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) u32 _kernel_accel = 0; - tuning_db_entry_t *tuningdb_entry = tuning_db_search (hashcat_ctx, device_param->device_name, device_param->opencl_device_type, user_options->attack_mode, hashconfig->hash_mode); + if (user_options->kernel_accel_chgd == true) + { + _kernel_accel = user_options->kernel_accel; + } + else + { + tuning_db_entry_t *tuningdb_entry = tuning_db_search (hashcat_ctx, device_param->device_name, device_param->opencl_device_type, user_options->attack_mode, hashconfig->hash_mode); - if (tuningdb_entry != NULL) _kernel_accel = tuningdb_entry->kernel_accel; - - if (user_options->kernel_accel_chgd == true) _kernel_accel = user_options->kernel_accel; + if (tuningdb_entry != NULL) _kernel_accel = tuningdb_entry->kernel_accel; + } const char *extra_tuningdb_block = module_ctx->module_extra_tuningdb_block (hashconfig, user_options, user_options_extra, backend_ctx, hashes, device_id, _kernel_accel); @@ -10405,7 +10436,10 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) // extra buffer - u64 size_extra_buffer = 4; + u64 size_extra_buffer1 = 4; + u64 size_extra_buffer2 = 4; + u64 size_extra_buffer3 = 4; + u64 size_extra_buffer4 = 4; if (module_ctx->module_extra_buffer_size != MODULE_DEFAULT) { @@ -10423,20 +10457,51 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) device_param->extra_buffer_size = extra_buffer_size; - // for the size we actually allocate we need to cheat a bit in order to make it more easy for plugin developer. - // - // we will divide this size by 4 to workaround opencl limitation. - // this collides with a theoretical scenario (like -n1 -T1) where there's only one workitem, - // because inside the kernel the target buffer is selected by workitem_id / 4. - // but the maximum size of the buffer would be only 1/4 of what is needed -> overflow. - // - // to workaround this we make sure that there's always a full buffer in each of the 4 allocated buffers available. + /** + * We use a "4-buffer" strategy for certain hash types (like scrypt) + * that require large scratch buffers per work-item. + * + * The kernel assigns each work-item to one of 4 sub-buffers using: + * buffer index = workitem_id % 4 + * + * This means that each of the 4 sub-buffers must be large enough to hold + * all work-items that map to it. However, the total number of work-items + * is not always a multiple of 4. If we naively split the total buffer size + * evenly into 4 parts, the last chunk may be too small and cause buffer + * overflows for configurations where work-items spill into a partially sized chunk. + * + * Previous versions worked around this by over-allocating a full extra buffer, + * but this wasted gpu memory for large hashes like scrypt with high N. + * + * This improved logic computes the exact number of work-items assigned to + * each of the 4 chunks and sizes each chunk precisely: + * + * - The first 'leftover' chunks get one extra work-item to cover any remainder. + * - This guarantees each chunk is large enough for its assigned work-items. + */ - const u64 kernel_power_max = ((hashconfig->opts_type & OPTS_TYPE_MP_MULTI_DISABLE) ? 1 : device_param->device_processors) * device_param->kernel_threads_max * device_param->kernel_accel_max; + const u64 kernel_power_max = ((hashconfig->opts_type & OPTS_TYPE_MP_MULTI_DISABLE) ? 1 : device_param->device_processors) * device_param->kernel_accel_max; - const u64 extra_buffer_size_one = extra_buffer_size / kernel_power_max; + const u64 extra_buffer_size_threads = extra_buffer_size / kernel_power_max; - size_extra_buffer = extra_buffer_size + (extra_buffer_size_one * 4); + const u64 workitems_per_chunk = kernel_power_max / 4; + + const u64 base_chunk_size = workitems_per_chunk * extra_buffer_size_threads; + + size_extra_buffer1 = base_chunk_size; + size_extra_buffer2 = base_chunk_size; + size_extra_buffer3 = base_chunk_size; + size_extra_buffer4 = base_chunk_size; + + const u64 leftover = kernel_power_max % 4; + + switch (leftover) + { + case 3: size_extra_buffer3 += extra_buffer_size_threads; // fall-through + case 2: size_extra_buffer2 += extra_buffer_size_threads; // fall-through + case 1: size_extra_buffer1 += extra_buffer_size_threads; // fall-through + case 0: break; + } } // kern type @@ -11343,7 +11408,10 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) + size_shown + size_salts + size_results - + size_extra_buffer + + size_extra_buffer1 + + size_extra_buffer2 + + size_extra_buffer3 + + size_extra_buffer4 + size_st_digests + size_st_salts + size_st_esalts @@ -11380,10 +11448,10 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) if (hc_cuMemAlloc (hashcat_ctx, &device_param->cuda_d_digests_shown, size_shown) == -1) return -1; if (hc_cuMemAlloc (hashcat_ctx, &device_param->cuda_d_salt_bufs, size_salts) == -1) return -1; if (hc_cuMemAlloc (hashcat_ctx, &device_param->cuda_d_result, size_results) == -1) return -1; - if (hc_cuMemAlloc (hashcat_ctx, &device_param->cuda_d_extra0_buf, size_extra_buffer / 4) == -1) return -1; - if (hc_cuMemAlloc (hashcat_ctx, &device_param->cuda_d_extra1_buf, size_extra_buffer / 4) == -1) return -1; - if (hc_cuMemAlloc (hashcat_ctx, &device_param->cuda_d_extra2_buf, size_extra_buffer / 4) == -1) return -1; - if (hc_cuMemAlloc (hashcat_ctx, &device_param->cuda_d_extra3_buf, size_extra_buffer / 4) == -1) return -1; + if (hc_cuMemAlloc (hashcat_ctx, &device_param->cuda_d_extra0_buf, size_extra_buffer1) == -1) return -1; + if (hc_cuMemAlloc (hashcat_ctx, &device_param->cuda_d_extra1_buf, size_extra_buffer2) == -1) return -1; + if (hc_cuMemAlloc (hashcat_ctx, &device_param->cuda_d_extra2_buf, size_extra_buffer3) == -1) return -1; + if (hc_cuMemAlloc (hashcat_ctx, &device_param->cuda_d_extra3_buf, size_extra_buffer4) == -1) return -1; if (hc_cuMemAlloc (hashcat_ctx, &device_param->cuda_d_st_digests_buf, size_st_digests) == -1) return -1; if (hc_cuMemAlloc (hashcat_ctx, &device_param->cuda_d_st_salts_buf, size_st_salts) == -1) return -1; if (hc_cuMemAlloc (hashcat_ctx, &device_param->cuda_d_kernel_param, size_kernel_params) == -1) return -1; @@ -11491,10 +11559,10 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) if (hc_hipMemAlloc (hashcat_ctx, &device_param->hip_d_digests_shown, size_shown) == -1) return -1; if (hc_hipMemAlloc (hashcat_ctx, &device_param->hip_d_salt_bufs, size_salts) == -1) return -1; if (hc_hipMemAlloc (hashcat_ctx, &device_param->hip_d_result, size_results) == -1) return -1; - if (hc_hipMemAlloc (hashcat_ctx, &device_param->hip_d_extra0_buf, size_extra_buffer / 4) == -1) return -1; - if (hc_hipMemAlloc (hashcat_ctx, &device_param->hip_d_extra1_buf, size_extra_buffer / 4) == -1) return -1; - if (hc_hipMemAlloc (hashcat_ctx, &device_param->hip_d_extra2_buf, size_extra_buffer / 4) == -1) return -1; - if (hc_hipMemAlloc (hashcat_ctx, &device_param->hip_d_extra3_buf, size_extra_buffer / 4) == -1) return -1; + if (hc_hipMemAlloc (hashcat_ctx, &device_param->hip_d_extra0_buf, size_extra_buffer1) == -1) return -1; + if (hc_hipMemAlloc (hashcat_ctx, &device_param->hip_d_extra1_buf, size_extra_buffer2) == -1) return -1; + if (hc_hipMemAlloc (hashcat_ctx, &device_param->hip_d_extra2_buf, size_extra_buffer3) == -1) return -1; + if (hc_hipMemAlloc (hashcat_ctx, &device_param->hip_d_extra3_buf, size_extra_buffer4) == -1) return -1; if (hc_hipMemAlloc (hashcat_ctx, &device_param->hip_d_st_digests_buf, size_st_digests) == -1) return -1; if (hc_hipMemAlloc (hashcat_ctx, &device_param->hip_d_st_salts_buf, size_st_salts) == -1) return -1; if (hc_hipMemAlloc (hashcat_ctx, &device_param->hip_d_kernel_param, size_kernel_params) == -1) return -1; @@ -11614,10 +11682,10 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) // shared if (hc_mtlCreateBuffer (hashcat_ctx, device_param->metal_device, size_results, NULL, &device_param->metal_d_result) == -1) return -1; - if (hc_mtlCreateBuffer (hashcat_ctx, device_param->metal_device, size_extra_buffer / 4, NULL, &device_param->metal_d_extra0_buf) == -1) return -1; - if (hc_mtlCreateBuffer (hashcat_ctx, device_param->metal_device, size_extra_buffer / 4, NULL, &device_param->metal_d_extra1_buf) == -1) return -1; - if (hc_mtlCreateBuffer (hashcat_ctx, device_param->metal_device, size_extra_buffer / 4, NULL, &device_param->metal_d_extra2_buf) == -1) return -1; - if (hc_mtlCreateBuffer (hashcat_ctx, device_param->metal_device, size_extra_buffer / 4, NULL, &device_param->metal_d_extra3_buf) == -1) return -1; + if (hc_mtlCreateBuffer (hashcat_ctx, device_param->metal_device, size_extra_buffer1, NULL, &device_param->metal_d_extra0_buf) == -1) return -1; + if (hc_mtlCreateBuffer (hashcat_ctx, device_param->metal_device, size_extra_buffer2, NULL, &device_param->metal_d_extra1_buf) == -1) return -1; + if (hc_mtlCreateBuffer (hashcat_ctx, device_param->metal_device, size_extra_buffer3, NULL, &device_param->metal_d_extra2_buf) == -1) return -1; + if (hc_mtlCreateBuffer (hashcat_ctx, device_param->metal_device, size_extra_buffer4, NULL, &device_param->metal_d_extra3_buf) == -1) return -1; // gpu only if (hc_mtlCreateBuffer (hashcat_ctx, device_param->metal_device, size_st_digests, NULL, &device_param->metal_d_st_digests_buf) == -1) return -1; @@ -11712,10 +11780,10 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) if (hc_clCreateBuffer (hashcat_ctx, device_param->opencl_context, CL_MEM_READ_WRITE, size_shown, NULL, &device_param->opencl_d_digests_shown) == -1) return -1; if (hc_clCreateBuffer (hashcat_ctx, device_param->opencl_context, CL_MEM_READ_ONLY, size_salts, NULL, &device_param->opencl_d_salt_bufs) == -1) return -1; if (hc_clCreateBuffer (hashcat_ctx, device_param->opencl_context, CL_MEM_READ_WRITE, size_results, NULL, &device_param->opencl_d_result) == -1) return -1; - if (hc_clCreateBuffer (hashcat_ctx, device_param->opencl_context, CL_MEM_READ_WRITE, size_extra_buffer / 4, NULL, &device_param->opencl_d_extra0_buf) == -1) return -1; - if (hc_clCreateBuffer (hashcat_ctx, device_param->opencl_context, CL_MEM_READ_WRITE, size_extra_buffer / 4, NULL, &device_param->opencl_d_extra1_buf) == -1) return -1; - if (hc_clCreateBuffer (hashcat_ctx, device_param->opencl_context, CL_MEM_READ_WRITE, size_extra_buffer / 4, NULL, &device_param->opencl_d_extra2_buf) == -1) return -1; - if (hc_clCreateBuffer (hashcat_ctx, device_param->opencl_context, CL_MEM_READ_WRITE, size_extra_buffer / 4, NULL, &device_param->opencl_d_extra3_buf) == -1) return -1; + if (hc_clCreateBuffer (hashcat_ctx, device_param->opencl_context, CL_MEM_READ_WRITE, size_extra_buffer1, NULL, &device_param->opencl_d_extra0_buf) == -1) return -1; + if (hc_clCreateBuffer (hashcat_ctx, device_param->opencl_context, CL_MEM_READ_WRITE, size_extra_buffer2, NULL, &device_param->opencl_d_extra1_buf) == -1) return -1; + if (hc_clCreateBuffer (hashcat_ctx, device_param->opencl_context, CL_MEM_READ_WRITE, size_extra_buffer3, NULL, &device_param->opencl_d_extra2_buf) == -1) return -1; + if (hc_clCreateBuffer (hashcat_ctx, device_param->opencl_context, CL_MEM_READ_WRITE, size_extra_buffer4, NULL, &device_param->opencl_d_extra3_buf) == -1) return -1; if (hc_clCreateBuffer (hashcat_ctx, device_param->opencl_context, CL_MEM_READ_ONLY, size_st_digests, NULL, &device_param->opencl_d_st_digests_buf) == -1) return -1; if (hc_clCreateBuffer (hashcat_ctx, device_param->opencl_context, CL_MEM_READ_ONLY, size_st_salts, NULL, &device_param->opencl_d_st_salts_buf) == -1) return -1; if (hc_clCreateBuffer (hashcat_ctx, device_param->opencl_context, CL_MEM_READ_ONLY, size_kernel_params, NULL, &device_param->opencl_d_kernel_param) == -1) return -1; @@ -15734,7 +15802,10 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) if (size_rules > undocumented_single_allocation_apple) memory_limit_hit = 1; if (size_rules_c > undocumented_single_allocation_apple) memory_limit_hit = 1; if (size_salts > undocumented_single_allocation_apple) memory_limit_hit = 1; - if ((size_extra_buffer / 4) > undocumented_single_allocation_apple) memory_limit_hit = 1; + if (size_extra_buffer1 > undocumented_single_allocation_apple) memory_limit_hit = 1; + if (size_extra_buffer2 > undocumented_single_allocation_apple) memory_limit_hit = 1; + if (size_extra_buffer3 > undocumented_single_allocation_apple) memory_limit_hit = 1; + if (size_extra_buffer4 > undocumented_single_allocation_apple) memory_limit_hit = 1; if (size_shown > undocumented_single_allocation_apple) memory_limit_hit = 1; if (size_tm > undocumented_single_allocation_apple) memory_limit_hit = 1; if (size_tmps > undocumented_single_allocation_apple) memory_limit_hit = 1; @@ -15769,7 +15840,10 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) + size_rules + size_rules_c + size_salts - + size_extra_buffer + + size_extra_buffer1 + + size_extra_buffer2 + + size_extra_buffer3 + + size_extra_buffer4 + size_shown + size_tm + size_tmps diff --git a/src/modules/scrypt_common.c b/src/modules/scrypt_common.c index 059f2fca8..971683ae5 100644 --- a/src/modules/scrypt_common.c +++ b/src/modules/scrypt_common.c @@ -46,22 +46,17 @@ u32 scrypt_exptected_threads (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE return threads; } -const char *scrypt_module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes, const u32 device_id, const u32 kernel_accel) +const char *scrypt_module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, const backend_ctx_t *backend_ctx, MAYBE_UNUSED const hashes_t *hashes, const u32 device_id, const u32 kernel_accel_user) { hc_device_param_t *device_param = &backend_ctx->devices_param[device_id]; - // preprocess tmto in case user has overridden - // it's important to set to 0 otherwise so we can postprocess tmto in that case - - tmto = (user_options->scrypt_tmto_chgd == true) ? user_options->scrypt_tmto : 0; - // we enforce the same configuration for all hashes, so the next lines should be fine const u32 scrypt_N = (hashes->salts_buf[0].scrypt_N == 0) ? hashes->st_salts_buf[0].scrypt_N : hashes->salts_buf[0].scrypt_N; const u32 scrypt_r = (hashes->salts_buf[0].scrypt_r == 0) ? hashes->st_salts_buf[0].scrypt_r : hashes->salts_buf[0].scrypt_r; const u32 scrypt_p = (hashes->salts_buf[0].scrypt_p == 0) ? hashes->st_salts_buf[0].scrypt_p : hashes->salts_buf[0].scrypt_p; - const u64 size_per_accel = (128ULL * scrypt_r * scrypt_N * scrypt_exptected_threads (hashconfig, user_options, user_options_extra, device_param)) >> tmto; + const u64 size_per_accel = (128ULL * scrypt_r * scrypt_N * scrypt_exptected_threads (hashconfig, user_options, user_options_extra, device_param)); const u64 state_per_accel = (128ULL * scrypt_r * scrypt_p * scrypt_exptected_threads (hashconfig, user_options, user_options_extra, device_param)); int lines_sz = 4096; @@ -72,95 +67,144 @@ const char *scrypt_module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t const u32 device_local_mem_size = device_param->device_local_mem_size; - const u64 available_mem = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)); + const u64 fixed_mem = (512 * 1024 * 1024); // some storage we need for pws[], tmps[], and others + + const u64 available_mem = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)) - fixed_mem; + + tmto = 0; u32 kernel_accel_new = device_processors; - if (kernel_accel) + if (kernel_accel_user) { - // from command line or tuning db has priority + kernel_accel_new = kernel_accel_user; - kernel_accel_new = user_options->kernel_accel; - } - else - { - // find a nice kernel_accel for gpus programmatically - // on cpus there's no need for over subscription with scrypt - - if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) + if (user_options->scrypt_tmto_chgd == true) { - if ((size_per_accel * device_processors) > available_mem) // not enough memory + // in this branch the user can shoot themselves into the foot + + tmto = user_options->scrypt_tmto; + } + else + { + // only option to save the user is to increase tmto + + for (tmto = 0; tmto < 6; tmto++) { - const float multi = (float) available_mem / size_per_accel; + const u64 size_per_accel_tmto = size_per_accel >> tmto; - if ((multi * 2) >= device_processors) - { - kernel_accel_new = multi * 2; - kernel_accel_new -= 2; + if ((size_per_accel_tmto * kernel_accel_new) > available_mem) continue; // not enough memory - if ((multi * 4) >= device_processors * 2) - { - kernel_accel_new = multi * 4; - kernel_accel_new -= 4; - } - } - else if ((multi * 4) >= device_processors) - { - kernel_accel_new = multi * 4; - kernel_accel_new -= 4; - } - - // clamp if close to device processors -- 16% seems fine on a 2080ti, and on a 4090 - - if (kernel_accel_new > device_processors) - { - const u32 extra = kernel_accel_new % device_processors; - - if (extra < (device_processors * 0.16)) - { - kernel_accel_new -= extra; - } - } - } - else - { - u64 multi = available_mem / size_per_accel; - - if (tmto == 0) - { - tmto = 2; // we radically assign tmto = 2, since most gpus seem to enjoy that tmto - - multi = available_mem / (size_per_accel >> tmto); - } - - multi /= device_processors; - multi -= 4; - multi = MIN (16, multi); - - kernel_accel_new = device_processors * multi; // should be safe because of tmto + break; } } } - - // fix tmto if user allows - - if (tmto == 0) + else { - const u32 tmto_start = 0; - const u32 tmto_stop = 5; - - for (u32 tmto_new = tmto_start; tmto_new <= tmto_stop; tmto_new++) + if (user_options->scrypt_tmto_chgd == true) { - // global memory check - if (available_mem < (kernel_accel_new * (size_per_accel >> tmto_new))) continue; + tmto = user_options->scrypt_tmto; + } + else + { + // This is the typical case and the main challenge: choosing the right TMTO value. + // Finding a consistently good algorithm is nearly impossible due to the many factors + // that influence performance. There is no clear rule of thumb. + // + // For example, consider the default scrypt configuration with N=16k and r=8. + // + // In one test with an NVIDIA mobile GPU with 16 GiB of memory (minus X), the device could + // use 28/58 processors. In theory, increasing the TMTO should increase + // performance, but in practice it had no effect at all. + // + // In another test with an NVIDIA discrete GPU with 11 GiB (minus X), the device initially + // used 19/68 processors. Increasing the TMTO to utilize all 68 processors + // did yield the expected performance improvement, matching the theory. + // + // However, with an AMD discrete GPU with 24 GiB (minus X), the optimal case used 46/48 + // processors. Increasing the TMTO should have reduced performance, but + // instead it nearly doubled the speed?! This might be related to AMD GPUs performing + // best with a thread count of 64 instead of 32, but in practice, using 64 threads + // shows little difference compared to 32, suggesting that at a very low level, + // only 32 threads may actually be active. + // + // This algorithm is far from ideal. Fortunately, we have a tuning database, + // so users can find the best -n value for their specific setup, and a forced -n value + // allows to easily calculate the TMTO. - // also need local memory check because in kernel we have: - // LOCAL_VK uint4 T_s[MAX_THREADS_PER_BLOCK][STATE_CNT4]; // 32 * 128 * r * p = 32KiB we're close if there's no TMTO - if (device_local_mem_size < (state_per_accel >> tmto_new)) continue; + if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) + { + for (tmto = 0; tmto < 2; tmto++) // results in tmto = 2 + { + if (device_param->device_host_unified_memory == 1) break; // do not touch - tmto = tmto_new; + if ((device_param->opencl_device_vendor_id == VENDOR_ID_AMD) + || (device_param->opencl_device_vendor_id == VENDOR_ID_AMD_USE_HIP)) + { + if (tmto == 0) continue; // at least 1 + } - break; + const u64 size_per_accel_tmto = size_per_accel >> tmto; + + const float blocks = (float) available_mem / size_per_accel_tmto; + + const float blocks_perc = device_processors / blocks; + + if (blocks_perc > 1.16) continue; + + // probably very low scrypt configuration = register pressure becomes a bottleneck + if ((blocks_perc * (1 << tmto)) < 0.4) continue; + + break; + } + + if (device_param->is_hip == true) + { + // we use some local memory to speed up things, so + // we need to make sure there's enough local memory available + + u64 state_per_accel_tmto = state_per_accel >> tmto; + + while (state_per_accel_tmto > device_local_mem_size) + { + tmto++; + + state_per_accel_tmto = state_per_accel >> tmto; + } + } + } + } + + // from here tmto is known, and we need to update kernel_accel + + if ((device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) && (device_param->device_host_unified_memory == false)) + { + const u64 size_per_accel_tmto = size_per_accel >> tmto; + + kernel_accel_new = available_mem / size_per_accel_tmto; + + kernel_accel_new = MIN (kernel_accel_new, 1024); // max supported + + // luxury option, clamp if we have twice the processors + + if (kernel_accel_new > (device_processors * 2)) + { + const u32 extra = kernel_accel_new % device_processors; + + kernel_accel_new -= extra; + } + + // clamp if close to device processors -- 16% seems fine on a 2080ti, and on a 4090 + + if (kernel_accel_new > device_processors) + { + const u32 extra = kernel_accel_new % device_processors; + + if (extra < (device_processors * 0.16)) + { + kernel_accel_new -= extra; + } + } } } @@ -189,9 +233,11 @@ u64 scrypt_module_extra_buffer_size (MAYBE_UNUSED const hashconfig_t *hashconfig const u64 size_per_accel = 128ULL * scrypt_r * scrypt_N * scrypt_exptected_threads (hashconfig, user_options, user_options_extra, device_param); - u64 size_scrypt = size_per_accel * device_param->kernel_accel_max; + const u64 size_per_accel_tmto = size_per_accel >> tmto; - return size_scrypt / (1 << tmto); + const u64 size_scrypt = device_param->kernel_accel_max * size_per_accel_tmto; + + return size_scrypt; } u64 scrypt_module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) @@ -256,3 +302,4 @@ char *scrypt_module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconf return jit_build_options; } + From 64dcf4e69d39de730ef02719d402d5700dcc199c Mon Sep 17 00:00:00 2001 From: Kuan-Wei Chiu Date: Tue, 17 Jun 2025 21:13:35 +0800 Subject: [PATCH 70/95] Fix incorrect comparison result in sort_pot_orig_line() The original sort_pot_orig_line() function returned 0 even when a < b, violating the C standard requirements for qsort() comparison functions. Specifically, it broke antisymmetry and transitivity, which can result in undefined behavior. In some versions of glibc, this leads not only to incorrect sorting but also potential memory corruption[1]. Fix the issue by returning -1 when a < b, restoring compliance with the standard. Link: https://www.qualys.com/2024/01/30/qsort.txt [1] Fixes: 6adc217ba ("Keep output of --show and --left in the original ordering of the input hash file") --- src/potfile.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/potfile.c b/src/potfile.c index a912e1f50..afafca2f1 100644 --- a/src/potfile.c +++ b/src/potfile.c @@ -81,7 +81,10 @@ int sort_pot_orig_line (const void *v1, const void *v2) const pot_orig_line_entry_t *t1 = (const pot_orig_line_entry_t *) v1; const pot_orig_line_entry_t *t2 = (const pot_orig_line_entry_t *) v2; - return t1->line_pos > t2->line_pos; + if (t1->line_pos > t2->line_pos) return 1; + if (t1->line_pos < t2->line_pos) return -1; + + return 0; } // the problem with the GNU tdestroy () function is that it doesn't work with mingw etc From 4af26080b817b8db88553e4000ae7e792f74a9eb Mon Sep 17 00:00:00 2001 From: Kuan-Wei Chiu Date: Tue, 17 Jun 2025 21:24:47 +0800 Subject: [PATCH 71/95] Fix incorrect comparison result in sort_by_src_len() The original sort_by_src_len() function returned 0 even when a > b, violating the C standard requirements for qsort() comparison functions. Specifically, it broke antisymmetry and transitivity, which can result in undefined behavior. In some versions of glibc, this leads not only to incorrect sorting but also potential memory corruption[1]. Fix the issue by returning -1 when a > b, restoring compliance with the standard. Link: https://www.qualys.com/2024/01/30/qsort.txt [1] Fixes: 8eb2558a7 ("Add -m 6211 module and moved some code around") --- src/keyboard_layout.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/keyboard_layout.c b/src/keyboard_layout.c index 18e338038..83a85a847 100644 --- a/src/keyboard_layout.c +++ b/src/keyboard_layout.c @@ -15,7 +15,10 @@ static int sort_by_src_len (const void *p1, const void *p2) const keyboard_layout_mapping_t *k1 = (const keyboard_layout_mapping_t *) p1; const keyboard_layout_mapping_t *k2 = (const keyboard_layout_mapping_t *) p2; - return k1->src_len < k2->src_len; + if (k1->src_len < k2->src_len) return 1; + if (k1->src_len > k2->src_len) return -1; + + return 0; } bool initialize_keyboard_layout_mapping (const char *filename, keyboard_layout_mapping_t *keyboard_layout_mapping, int *keyboard_layout_mapping_cnt) From 7fe091f4a347cfa9369725933d6df0019d136812 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Tue, 17 Jun 2025 19:09:53 +0200 Subject: [PATCH 72/95] Always use the low-level API to query used memory on a device and silently ignore if unavailable. The workaround using EXTRA_SIZE should no longer be needed, so we disable it for now and monitor for any issues with memory allocation. Fixed a bug where a scrypt-based algorithm on an API would require only a single work item, resulting in size_extra_buffer4 being zero, which fails on OpenCL since it does not allow zero-byte allocations. Ignore TMTO increase on low scrypt configurations if the R value is higher than 1. --- src/backend.c | 38 ++++++++++++++++++++++++------------- src/modules/scrypt_common.c | 9 ++++++--- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/src/backend.c b/src/backend.c index 9b1f290a5..88a375eb5 100644 --- a/src/backend.c +++ b/src/backend.c @@ -9643,6 +9643,18 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) const int device_id = device_param->device_id; + /** + * Query used memory from the device using low-level API and update device_available_mem + * If there's no low-level API available we will silently ignore + */ + + const u64 used_bytes = hm_get_memoryused_with_devices_idx (hashcat_ctx, device_id); + + if (used_bytes) + { + device_param->device_available_mem = MIN (device_param->device_available_mem, device_param->device_global_mem - used_bytes); + } + /** * module depending checks */ @@ -9704,7 +9716,6 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) } device_param->device_available_mem = MIN (device_param->device_available_mem, device_param->device_global_mem - used_bytes); - device_param->device_available_mem = MIN (device_param->device_available_mem, device_param->device_maxmem_alloc); break; } @@ -9734,7 +9745,7 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) if (user_options->kernel_accel_chgd == true) { _kernel_accel = user_options->kernel_accel; - } + } else { tuning_db_entry_t *tuningdb_entry = tuning_db_search (hashcat_ctx, device_param->device_name, device_param->opencl_device_type, user_options->attack_mode, hashconfig->hash_mode); @@ -10436,10 +10447,10 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) // extra buffer - u64 size_extra_buffer1 = 4; - u64 size_extra_buffer2 = 4; - u64 size_extra_buffer3 = 4; - u64 size_extra_buffer4 = 4; + u64 size_extra_buffer1 = 4096; + u64 size_extra_buffer2 = 4096; + u64 size_extra_buffer3 = 4096; + u64 size_extra_buffer4 = 4096; if (module_ctx->module_extra_buffer_size != MODULE_DEFAULT) { @@ -10488,10 +10499,10 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) const u64 base_chunk_size = workitems_per_chunk * extra_buffer_size_threads; - size_extra_buffer1 = base_chunk_size; - size_extra_buffer2 = base_chunk_size; - size_extra_buffer3 = base_chunk_size; - size_extra_buffer4 = base_chunk_size; + size_extra_buffer1 += base_chunk_size; + size_extra_buffer2 += base_chunk_size; + size_extra_buffer3 += base_chunk_size; + size_extra_buffer4 += base_chunk_size; const u64 leftover = kernel_power_max % 4; @@ -15764,11 +15775,12 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) // sometimes device_available_mem and device_maxmem_alloc reported back from the opencl runtime are a bit inaccurate. // let's add some extra space just to be sure. // now depends on the kernel-accel value (where scrypt and similar benefits), but also hard minimum 64mb and maximum 1024mb limit + // let's see if we still need this now that we have low-level API to report free memory - u64 EXTRA_SPACE = (1024ULL * 1024ULL) * kernel_accel_max; + u64 EXTRA_SPACE = 4096; //(1024ULL * 1024ULL) * kernel_accel_max; - EXTRA_SPACE = MAX (EXTRA_SPACE, ( 256ULL * 1024ULL * 1024ULL)); - EXTRA_SPACE = MIN (EXTRA_SPACE, (1024ULL * 1024ULL * 1024ULL)); + //EXTRA_SPACE = MAX (EXTRA_SPACE, ( 256ULL * 1024ULL * 1024ULL)); + //EXTRA_SPACE = MIN (EXTRA_SPACE, (1024ULL * 1024ULL * 1024ULL)); if ((size_pws + EXTRA_SPACE) > device_param->device_maxmem_alloc) memory_limit_hit = 1; if ((size_tmps + EXTRA_SPACE) > device_param->device_maxmem_alloc) memory_limit_hit = 1; diff --git a/src/modules/scrypt_common.c b/src/modules/scrypt_common.c index 971683ae5..bbaa3b556 100644 --- a/src/modules/scrypt_common.c +++ b/src/modules/scrypt_common.c @@ -110,7 +110,7 @@ const char *scrypt_module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t // This is the typical case and the main challenge: choosing the right TMTO value. // Finding a consistently good algorithm is nearly impossible due to the many factors // that influence performance. There is no clear rule of thumb. - // + // // For example, consider the default scrypt configuration with N=16k and r=8. // // In one test with an NVIDIA mobile GPU with 16 GiB of memory (minus X), the device could @@ -153,14 +153,17 @@ const char *scrypt_module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t if (blocks_perc > 1.16) continue; // probably very low scrypt configuration = register pressure becomes a bottleneck - if ((blocks_perc * (1 << tmto)) < 0.4) continue; + if ((blocks_perc * (1 << tmto)) < 0.4) + { + if (scrypt_r == 1) continue; + } break; } if (device_param->is_hip == true) { - // we use some local memory to speed up things, so + // we use some local memory to speed up things, so // we need to make sure there's enough local memory available u64 state_per_accel_tmto = state_per_accel >> tmto; From 564c560dcbdc6ca3d5a13d5a80425ef840f1b8a6 Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Tue, 17 Jun 2025 22:17:59 +0200 Subject: [PATCH 73/95] porting the new scrypt engine to Apple Metal --- OpenCL/inc_common.h | 3 ++- OpenCL/inc_hash_scrypt.cl | 16 ++++------------ OpenCL/inc_platform.h | 1 + OpenCL/m08900-pure.cl | 8 ++++++-- OpenCL/m15700-pure.cl | 8 ++++++-- OpenCL/m22700-pure.cl | 8 ++++++-- OpenCL/m24000-pure.cl | 8 ++++++-- OpenCL/m27700-pure.cl | 8 ++++++-- OpenCL/m28200-pure.cl | 8 ++++++-- OpenCL/m29800-pure.cl | 8 ++++++-- 10 files changed, 49 insertions(+), 27 deletions(-) diff --git a/OpenCL/inc_common.h b/OpenCL/inc_common.h index 03382886e..0b51fbd29 100644 --- a/OpenCL/inc_common.h +++ b/OpenCL/inc_common.h @@ -126,7 +126,8 @@ #define KERN_ATTR_MAIN_PARAMS \ uint hc_gid [[ thread_position_in_grid ]], \ uint hc_lid [[ thread_position_in_threadgroup ]], \ - uint hc_lsz [[ threads_per_threadgroup ]] + uint hc_lsz [[ threads_per_threadgroup ]], \ + uint hc_bid [[ threadgroup_position_in_grid ]] #endif // IS_METAL /* diff --git a/OpenCL/inc_hash_scrypt.cl b/OpenCL/inc_hash_scrypt.cl index 6655e2191..05a3464de 100644 --- a/OpenCL/inc_hash_scrypt.cl +++ b/OpenCL/inc_hash_scrypt.cl @@ -286,18 +286,14 @@ DECLSPEC void salsa_r_p (PRIVATE_AS u32 *TI) } #ifdef IS_HIP -DECLSPEC void scrypt_smix_init (LOCAL_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) +DECLSPEC void scrypt_smix_init (LOCAL_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid, const u64 lid, const u64 lsz, const u64 bid) #else -DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) +DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid, const u64 lid, const u64 lsz, const u64 bid) #endif { const u32 ySIZE = SCRYPT_N >> SCRYPT_TMTO; const u32 zSIZE = STATE_CNT4; - const u64 bid = get_group_id(0); - const u64 lsz = get_local_size(0); - const u64 lid = get_local_id(0); - const u32 xd4 = bid / 4; const u32 xm4 = bid & 3; @@ -324,18 +320,14 @@ DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL } #ifdef IS_HIP -DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, LOCAL_AS uint4 *T, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) +DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, LOCAL_AS uint4 *T, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid, const u64 lid, const u64 lsz, const u64 bid) #else -DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, PRIVATE_AS uint4 *T, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid) +DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, PRIVATE_AS uint4 *T, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid, const u64 lid, const u64 lsz, const u64 bid) #endif { const u32 ySIZE = SCRYPT_N >> SCRYPT_TMTO; const u32 zSIZE = STATE_CNT4; - const u64 bid = get_group_id(0); - const u64 lsz = get_local_size(0); - const u64 lid = get_local_id(0); - const u32 xd4 = bid / 4; const u32 xm4 = bid & 3; diff --git a/OpenCL/inc_platform.h b/OpenCL/inc_platform.h index 1e7805290..cc6489afe 100644 --- a/OpenCL/inc_platform.h +++ b/OpenCL/inc_platform.h @@ -74,6 +74,7 @@ DECLSPEC u32 hc_atomic_or (volatile GLOBAL_AS u32 *p, volatile const u32 val); #define get_global_id(param) hc_gid #define get_local_id(param) hc_lid #define get_local_size(param) hc_lsz +#define get_group_id(param) hc_bid DECLSPEC u32x rotl32 (const u32x a, const int n); DECLSPEC u32x rotr32 (const u32x a, const int n); diff --git a/OpenCL/m08900-pure.cl b/OpenCL/m08900-pure.cl index 69f5624c5..2cd5e1729 100644 --- a/OpenCL/m08900-pure.cl +++ b/OpenCL/m08900-pure.cl @@ -40,6 +40,8 @@ KERNEL_FQ void HC_ATTR_SEQ m08900_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); + const u64 lsz = get_local_size (0); + const u64 bid = get_group_id (0); if (gid >= GID_CNT) return; @@ -61,7 +63,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08900_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - scrypt_smix_init (X, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid); + scrypt_smix_init (X, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid, lid, lsz, bid); for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } @@ -70,6 +72,8 @@ KERNEL_FQ void HC_ATTR_SEQ m08900_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); + const u64 lsz = get_local_size (0); + const u64 bid = get_group_id (0); if (gid >= GID_CNT) return; @@ -93,7 +97,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08900_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - scrypt_smix_loop (X, T, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid); + scrypt_smix_loop (X, T, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid, lid, lsz, bid); for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } diff --git a/OpenCL/m15700-pure.cl b/OpenCL/m15700-pure.cl index c357e6d97..aa7e497ee 100644 --- a/OpenCL/m15700-pure.cl +++ b/OpenCL/m15700-pure.cl @@ -176,6 +176,8 @@ KERNEL_FQ void HC_ATTR_SEQ m15700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); + const u64 lsz = get_local_size (0); + const u64 bid = get_group_id (0); if (gid >= GID_CNT) return; @@ -197,7 +199,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - scrypt_smix_init (X, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid); + scrypt_smix_init (X, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid, lid, lsz, bid); for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } @@ -206,6 +208,8 @@ KERNEL_FQ void HC_ATTR_SEQ m15700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); + const u64 lsz = get_local_size (0); + const u64 bid = get_group_id (0); if (gid >= GID_CNT) return; @@ -229,7 +233,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - scrypt_smix_loop (X, T, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid); + scrypt_smix_loop (X, T, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid, lid, lsz, bid); for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } diff --git a/OpenCL/m22700-pure.cl b/OpenCL/m22700-pure.cl index 2ac914cdd..be6c18cb9 100644 --- a/OpenCL/m22700-pure.cl +++ b/OpenCL/m22700-pure.cl @@ -119,6 +119,8 @@ KERNEL_FQ void HC_ATTR_SEQ m22700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); + const u64 lsz = get_local_size (0); + const u64 bid = get_group_id (0); if (gid >= GID_CNT) return; @@ -140,7 +142,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - scrypt_smix_init (X, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid); + scrypt_smix_init (X, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid, lid, lsz, bid); for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } @@ -149,6 +151,8 @@ KERNEL_FQ void HC_ATTR_SEQ m22700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); + const u64 lsz = get_local_size (0); + const u64 bid = get_group_id (0); if (gid >= GID_CNT) return; @@ -172,7 +176,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - scrypt_smix_loop (X, T, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid); + scrypt_smix_loop (X, T, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid, lid, lsz, bid); for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } diff --git a/OpenCL/m24000-pure.cl b/OpenCL/m24000-pure.cl index d7d7ed03c..d00e4c139 100644 --- a/OpenCL/m24000-pure.cl +++ b/OpenCL/m24000-pure.cl @@ -184,6 +184,8 @@ KERNEL_FQ void HC_ATTR_SEQ m24000_loop_prepare (KERN_ATTR_TMPS_ESALT (scrypt_tmp const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); + const u64 lsz = get_local_size (0); + const u64 bid = get_group_id (0); if (gid >= GID_CNT) return; @@ -202,7 +204,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24000_loop_prepare (KERN_ATTR_TMPS_ESALT (scrypt_tmp for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - scrypt_smix_init (X, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid); + scrypt_smix_init (X, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid, lid, lsz, bid); for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } @@ -211,6 +213,8 @@ KERNEL_FQ void HC_ATTR_SEQ m24000_loop (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, best { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); + const u64 lsz = get_local_size (0); + const u64 bid = get_group_id (0); if (gid >= GID_CNT) return; @@ -234,7 +238,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24000_loop (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, best for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - scrypt_smix_loop (X, T, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid); + scrypt_smix_loop (X, T, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid, lid, lsz, bid); for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } diff --git a/OpenCL/m27700-pure.cl b/OpenCL/m27700-pure.cl index 752342015..2bbe3ba01 100644 --- a/OpenCL/m27700-pure.cl +++ b/OpenCL/m27700-pure.cl @@ -69,6 +69,8 @@ KERNEL_FQ void HC_ATTR_SEQ m27700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); + const u64 lsz = get_local_size (0); + const u64 bid = get_group_id (0); if (gid >= GID_CNT) return; @@ -90,7 +92,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - scrypt_smix_init (X, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid); + scrypt_smix_init (X, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid, lid, lsz, bid); for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } @@ -99,6 +101,8 @@ KERNEL_FQ void HC_ATTR_SEQ m27700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); + const u64 lsz = get_local_size (0); + const u64 bid = get_group_id (0); if (gid >= GID_CNT) return; @@ -122,7 +126,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - scrypt_smix_loop (X, T, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid); + scrypt_smix_loop (X, T, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid, lid, lsz, bid); for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } diff --git a/OpenCL/m28200-pure.cl b/OpenCL/m28200-pure.cl index ff34ba8a2..18f0cb161 100644 --- a/OpenCL/m28200-pure.cl +++ b/OpenCL/m28200-pure.cl @@ -50,6 +50,8 @@ KERNEL_FQ void HC_ATTR_SEQ m28200_loop_prepare (KERN_ATTR_TMPS_ESALT (exodus_tmp { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); + const u64 lsz = get_local_size (0); + const u64 bid = get_group_id (0); if (gid >= GID_CNT) return; @@ -71,7 +73,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28200_loop_prepare (KERN_ATTR_TMPS_ESALT (exodus_tmp for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - scrypt_smix_init (X, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid); + scrypt_smix_init (X, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid, lid, lsz, bid); for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } @@ -80,6 +82,8 @@ KERNEL_FQ void HC_ATTR_SEQ m28200_loop (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exod { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); + const u64 lsz = get_local_size (0); + const u64 bid = get_group_id (0); if (gid >= GID_CNT) return; @@ -103,7 +107,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28200_loop (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exod for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - scrypt_smix_loop (X, T, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid); + scrypt_smix_loop (X, T, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid, lid, lsz, bid); for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } diff --git a/OpenCL/m29800-pure.cl b/OpenCL/m29800-pure.cl index 51b208e3c..fb58a9822 100644 --- a/OpenCL/m29800-pure.cl +++ b/OpenCL/m29800-pure.cl @@ -69,6 +69,8 @@ KERNEL_FQ void HC_ATTR_SEQ m29800_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); + const u64 lsz = get_local_size (0); + const u64 bid = get_group_id (0); if (gid >= GID_CNT) return; @@ -90,7 +92,7 @@ KERNEL_FQ void HC_ATTR_SEQ m29800_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - scrypt_smix_init (X, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid); + scrypt_smix_init (X, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid, lid, lsz, bid); for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } @@ -99,6 +101,8 @@ KERNEL_FQ void HC_ATTR_SEQ m29800_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); + const u64 lsz = get_local_size (0); + const u64 bid = get_group_id (0); if (gid >= GID_CNT) return; @@ -122,7 +126,7 @@ KERNEL_FQ void HC_ATTR_SEQ m29800_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - scrypt_smix_loop (X, T, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid); + scrypt_smix_loop (X, T, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid, lid, lsz, bid); for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } From 13245b5563d4f815523d3f4b1d94999bcec44722 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Wed, 18 Jun 2025 10:08:56 +0200 Subject: [PATCH 74/95] Add HC_ATTR_SEQ macro to CUDA kernels. It is left empty so that users can optionally add __launch_bounds__ or other launch attributes if needed. Add MAX_THREADS_PER_BLOCK macro to CUDA kernels. It defaults to 1024 or a lower value if limited by the plugin module or specified via the -T command line option. For CUDA, lower the C++ dialect from C++17 to C++14 to reduce JIT compile time. Also add support for --split-compile and --minimal flags to further improve NVRTC compile performance. Remove power-hungry NVIDIA settings and fix missing sudo calls in tools/benchmark_deep.pl. Remove NEW_SIMD_CODE macro from kernels that do not support SIMD (no u32x). --- OpenCL/inc_vendor.h | 3 +++ OpenCL/m02501-pure.cl | 2 +- OpenCL/m16801-pure.cl | 2 +- OpenCL/m31400_a0-pure.cl | 2 +- OpenCL/m31400_a1-pure.cl | 2 +- src/backend.c | 55 ++++++++++++++++++++++++++++++++-------- tools/benchmark_deep.pl | 10 +++----- 7 files changed, 55 insertions(+), 21 deletions(-) diff --git a/OpenCL/inc_vendor.h b/OpenCL/inc_vendor.h index b443e3f96..38afefebe 100644 --- a/OpenCL/inc_vendor.h +++ b/OpenCL/inc_vendor.h @@ -157,6 +157,9 @@ using namespace metal; #elif defined IS_HIP #define HC_ATTR_SEQ __launch_bounds__((MAX_THREADS_PER_BLOCK), 0) #define DECLSPEC __device__ HC_INLINE +#elif defined IS_CUDA +#define HC_ATTR_SEQ +#define DECLSPEC #else #define HC_ATTR_SEQ #define DECLSPEC diff --git a/OpenCL/m02501-pure.cl b/OpenCL/m02501-pure.cl index f220ac4fd..bf76498fe 100644 --- a/OpenCL/m02501-pure.cl +++ b/OpenCL/m02501-pure.cl @@ -3,7 +3,7 @@ * License.....: MIT */ -#define NEW_SIMD_CODE +//#define NEW_SIMD_CODE #ifdef KERNEL_STATIC #include M2S(INCLUDE_PATH/inc_vendor.h) diff --git a/OpenCL/m16801-pure.cl b/OpenCL/m16801-pure.cl index 3cf16de21..1452ab973 100644 --- a/OpenCL/m16801-pure.cl +++ b/OpenCL/m16801-pure.cl @@ -3,7 +3,7 @@ * License.....: MIT */ -#define NEW_SIMD_CODE +//#define NEW_SIMD_CODE #ifdef KERNEL_STATIC #include M2S(INCLUDE_PATH/inc_vendor.h) diff --git a/OpenCL/m31400_a0-pure.cl b/OpenCL/m31400_a0-pure.cl index ce85ada6b..54a7103d5 100644 --- a/OpenCL/m31400_a0-pure.cl +++ b/OpenCL/m31400_a0-pure.cl @@ -3,7 +3,7 @@ * License.....: MIT */ -#define NEW_SIMD_CODE +//#define NEW_SIMD_CODE #ifdef KERNEL_STATIC #include M2S(INCLUDE_PATH/inc_vendor.h) diff --git a/OpenCL/m31400_a1-pure.cl b/OpenCL/m31400_a1-pure.cl index 6d076cee2..3cec07e91 100644 --- a/OpenCL/m31400_a1-pure.cl +++ b/OpenCL/m31400_a1-pure.cl @@ -3,7 +3,7 @@ * License.....: MIT */ -#define NEW_SIMD_CODE +//#define NEW_SIMD_CODE #ifdef KERNEL_STATIC #include M2S(INCLUDE_PATH/inc_vendor.h) diff --git a/src/backend.c b/src/backend.c index 88a375eb5..057d27252 100644 --- a/src/backend.c +++ b/src/backend.c @@ -8914,6 +8914,7 @@ static bool load_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_p static bool load_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, const char *kernel_name, char *source_file, char *cached_file, const char *build_options_buf, const bool cache_disable, cl_program *opencl_program, CUmodule *cuda_module, hipModule_t *hip_module, MAYBE_UNUSED void *metal_library) #endif { + const backend_ctx_t *backend_ctx = hashcat_ctx->backend_ctx; const hashconfig_t *hashconfig = hashcat_ctx->hashconfig; const user_options_t *user_options = hashcat_ctx->user_options; const folder_config_t *folder_config = hashcat_ctx->folder_config; @@ -8961,27 +8962,61 @@ static bool load_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_p if (hc_nvrtcCreateProgram (hashcat_ctx, &program, kernel_sources[0], kernel_name, 0, NULL, NULL) == -1) return false; - char **nvrtc_options = (char **) hccalloc (7 + strlen (build_options_buf) + 1, sizeof (char *)); // ... + char **nvrtc_options = (char **) hccalloc (12 + strlen (build_options_buf) + 1, sizeof (char *)); // ... - nvrtc_options[0] = "--restrict"; - nvrtc_options[1] = "--device-as-default-execution-space"; - nvrtc_options[2] = "--gpu-architecture"; + if (backend_ctx->nvrtc_driver_version >= 12000) + { + nvrtc_options[0] = "--std=c++14"; + } + else + { + // some placeholder + nvrtc_options[0] = "--restrict"; + } - hc_asprintf (&nvrtc_options[3], "compute_%d%d", device_param->sm_major, device_param->sm_minor); + nvrtc_options[1] = "--restrict"; + nvrtc_options[2] = "--device-as-default-execution-space"; + nvrtc_options[3] = "--gpu-architecture"; + + hc_asprintf (&nvrtc_options[4], "compute_%d%d", device_param->sm_major, device_param->sm_minor); + + if (backend_ctx->nvrtc_driver_version >= 12010) + { + nvrtc_options[5] = "--split-compile"; + + hc_asprintf (&nvrtc_options[6], "%d", 0); + } + else + { + // some placeholder + nvrtc_options[5] = "--restrict"; + nvrtc_options[6] = "--restrict"; + } + + if (backend_ctx->nvrtc_driver_version >= 12040) + { + nvrtc_options[7] = "--minimal"; + } + else + { + // some placeholder + nvrtc_options[7] = "--restrict"; + } // untested on windows, but it should work #if defined (_WIN) || defined (__CYGWIN__) || defined (__MSYS__) - hc_asprintf (&nvrtc_options[4], "-D INCLUDE_PATH=%s", "OpenCL"); + hc_asprintf (&nvrtc_options[8], "-D INCLUDE_PATH=%s", "OpenCL"); #else - hc_asprintf (&nvrtc_options[4], "-D INCLUDE_PATH=%s", folder_config->cpath_real); + hc_asprintf (&nvrtc_options[8], "-D INCLUDE_PATH=%s", folder_config->cpath_real); #endif - hc_asprintf (&nvrtc_options[5], "-D XM2S(x)=#x"); - hc_asprintf (&nvrtc_options[6], "-D M2S(x)=XM2S(x)"); + hc_asprintf (&nvrtc_options[9], "-D XM2S(x)=#x"); + hc_asprintf (&nvrtc_options[10], "-D M2S(x)=XM2S(x)"); + hc_asprintf (&nvrtc_options[11], "-D MAX_THREADS_PER_BLOCK=%d", (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : device_param->kernel_threads_max); char *nvrtc_options_string = hcstrdup (build_options_buf); - const int num_options = 7 + nvrtc_make_options_array_from_string (nvrtc_options_string, nvrtc_options + 7); + const int num_options = 12 + nvrtc_make_options_array_from_string (nvrtc_options_string, nvrtc_options + 12); const int rc_nvrtcCompileProgram = hc_nvrtcCompileProgram (hashcat_ctx, program, num_options, (const char * const *) nvrtc_options); diff --git a/tools/benchmark_deep.pl b/tools/benchmark_deep.pl index 2a917e2f1..a7a09ae9f 100755 --- a/tools/benchmark_deep.pl +++ b/tools/benchmark_deep.pl @@ -25,22 +25,18 @@ my $cpu_benchmark = 0; print "\nHardware preparations... You may need to adjust some settings and probably can ignore some of the error\n\n"; -system ("echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor"); +system ("echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor"); if ($cpu_benchmark == 1) { - system ("echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo"); ## for CPU benchmark Intel - system ("echo 0 > /sys/devices/system/cpu/cpufreq/boost"); ## for CPU benchmark AMD + system ("sudo echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo"); ## for CPU benchmark Intel + system ("sudo echo 0 > /sys/devices/system/cpu/cpufreq/boost"); ## for CPU benchmark AMD } else { system ("rocm-smi --resetprofile --resetclocks --resetfans"); system ("rocm-smi --setfan 100% --setperflevel high"); - system ("nvidia-smi -rac"); - system ("nvidia-smi -pm ENABLED"); - system ("nvidia-smi -acp UNRESTRICTED"); - system ("nvidia-smi -pl 225"); ## needs per-gpu adjust system ("nvidia-settings -a GPUPowerMizerMode=1 -a GPUFanControlState=1 -a GPUTargetFanSpeed=100"); } From 40a2dbe5eca722af63a42eac878f73ef11fd1fad Mon Sep 17 00:00:00 2001 From: Dhruv Date: Wed, 18 Jun 2025 15:01:27 +0100 Subject: [PATCH 75/95] Update hashcat-assimilation-bridge-development.md I believe the generetic is a typo and should be generic in the help/documentation strings for bridge parameters in the bridge_init() function. --- docs/hashcat-assimilation-bridge-development.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/hashcat-assimilation-bridge-development.md b/docs/hashcat-assimilation-bridge-development.md index 459a786fd..72794c494 100644 --- a/docs/hashcat-assimilation-bridge-development.md +++ b/docs/hashcat-assimilation-bridge-development.md @@ -102,10 +102,10 @@ Each of these bridge unit maps to one virtual backend device, which allows async From the bridge_init() function you have access to the following generic parameters, set on the command line by the user: ```c -+ " --bridge-parameter1 | Str | Sets the generatic parameter 1 for a Bridge |", -+ " --bridge-parameter2 | Str | Sets the generatic parameter 2 for a Bridge |", -+ " --bridge-parameter3 | Str | Sets the generatic parameter 3 for a Bridge |", -+ " --bridge-parameter4 | Str | Sets the generatic parameter 4 for a Bridge |", ++ " --bridge-parameter1 | Str | Sets the generic parameter 1 for a Bridge |", ++ " --bridge-parameter2 | Str | Sets the generic parameter 2 for a Bridge |", ++ " --bridge-parameter3 | Str | Sets the generic parameter 3 for a Bridge |", ++ " --bridge-parameter4 | Str | Sets the generic parameter 4 for a Bridge |", ``` ## Virtual Backend Devices From 1a20e781310d770f70ef9ad66ecbdab529414e66 Mon Sep 17 00:00:00 2001 From: Dhruv Date: Wed, 18 Jun 2025 15:06:13 +0100 Subject: [PATCH 76/95] Update hashcat-assimilation-bridge.md - Fixed typos and improved clarity --- docs/hashcat-assimilation-bridge.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/hashcat-assimilation-bridge.md b/docs/hashcat-assimilation-bridge.md index 7959120f2..f1606f405 100644 --- a/docs/hashcat-assimilation-bridge.md +++ b/docs/hashcat-assimilation-bridge.md @@ -15,7 +15,7 @@ Hashcat v7 introduces support for an embedded Python interpreter as its premier - Hash modes `-m 72000` and `-m 73000` use embedded Python; start with `-m 73000`. - These demonstrate a "generic hash" model, enabling full hash mode creation in Python. - Users don’t need to recompile when making changes. -- Python’s crypto ecosystem helps developers or AI generate new hash mode code easily and performant. +- Python’s crypto ecosystem helps developers or AI generate new hash mode code easily and efficiently. - Here's a sample how a user can add `yescrypt` (`$y$...`) support with just one line of code: ```python @@ -29,7 +29,7 @@ This is just a preview. See `docs/hashcat-python-plugin-quickstart.md` for detai ### Hybrid Architecture -Note that tn the Python example, only CPU resources are used and Hashcat does not transform Python into GPU code. However, the Bridge supports hybrid setups, where part of the workload runs on a traditional backend and another part on the Bridge. This model allows performance-critical components to be handled by the most suitable type of compute unit. +Note that in the Python example, only CPU resources are used and Hashcat does not transform Python into GPU code. However, the Bridge supports hybrid setups, where part of the workload runs on a traditional backend and another part on the Bridge. This model allows performance-critical components to be handled by the most suitable type of compute unit. For example, in hash mode `-m 70100`, a demonstration of SCRYPT, the PBKDF2 stage runs on a GPU using OpenCL/CUDA/HIP/Metal, while the memory-intensive `smix()` runs on the CPU through a bridge using the scrypt-jane implementation. This could just as easily be offloaded to an FPGA instead, which would benefit from reduced code complexity and increased parallelization boosting performance significantly. @@ -70,4 +70,4 @@ Depending on interface compatibility, code from other password cracking tools (e The Assimilation Bridge introduces a highly extensible mechanism to integrate custom compute resources and logic into Hashcat. -For hands-on examples and developer guidance, refer to the the accompanying documentation in `docs/hashcat-assimiliation-bridge-development.md` (first draft). +For hands-on examples and developer guidance, refer to the accompanying documentation in `docs/hashcat-assimiliation-bridge-development.md` (first draft). From a472c572f623dbb56c6058e4a77c224ecc9b9fb3 Mon Sep 17 00:00:00 2001 From: Dhruv Date: Wed, 18 Jun 2025 15:23:43 +0100 Subject: [PATCH 77/95] Update hashcat-python-plugin-development-guide.md - Changed some mistakes e.g. duplicates "the the" and improved some clarity too. --- docs/hashcat-python-plugin-development-guide.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/hashcat-python-plugin-development-guide.md b/docs/hashcat-python-plugin-development-guide.md index e955ef72a..308b6d918 100644 --- a/docs/hashcat-python-plugin-development-guide.md +++ b/docs/hashcat-python-plugin-development-guide.md @@ -72,7 +72,7 @@ Here: - `extract_esalts()` is an optional function to deserialize binary esalt blobs. Depends on your hash, if esalts (such as binary blobs for decryption) are required. - `hcsp.init()` stores these so that `handle_queue()` (described later) can call `calc_hash()` for each password in a batch. -Note the the ctx will hold your salt data from all hashes. Whenever calc_hash() is called, this context is given. If you have multiple hashes with multiple salts, the context will have all of them. The helper module hcsp.init() will deserialze the static salt and the dynamic salt and store the data in your context. +Note the the ctx will hold your salt data from all hashes. Whenever calc_hash() is called, this context is given. If you have multiple hashes with multiple salts, the context will have all of them. The helper module hcsp.init() will deserialize the static salt and the dynamic salt and store the data in your context. A typical `term()` might look like this: @@ -90,7 +90,7 @@ def kernel_loop(ctx,passwords,salt_id,is_selftest): return hcsp.handle_queue(ctx,passwords,salt_id,is_selftest) ``` -Hashcat optimizes performance by sending password candidates in batches. The `passwords` parameter in `kernel_loop()` is a list. Instead of manually looping over them, the helper module will queue them, and call your callback function which you had specified in the `init()` function before. The idea is that whenever your calc_hash() is called, it will always be only about one password and one salt (and optional some binary blobs), and you do not have to deal with queuing, whatever it is threaded or not threaded. +Hashcat optimizes performance by sending password candidates in batches. The `passwords` parameter in `kernel_loop()` is a list. Instead of manually looping over them, the helper module will queue them, and call your callback function which you had specified in the `init()` function before. The idea is that whenever your calc_hash() is called, it will always be only about one password and one salt (and optional some binary blobs), and you do not have to deal with queuing, whether it is threaded or not. Of course, you can also fully control this yourself: @@ -103,7 +103,7 @@ def calc_hash(ctx, password, salt_id, is_selftest): If you want to control all by youself, here's what's important to know: - salt_id: Basically a index number which tells you about which salt your calculation is about. When you initially receive the context, it will hold all salts at once, and you need to store them in the context. The helper scripts do that for your, but just for you to know, its the salt_id which tells the handle_queue() which salt data to pick before it calls your hash_calc() function. -- is_selftest: Historically hashcat keeps two parallel structures for the the selftest hash and real hash. As such they arrive in the context buffer, and you need to make a decision on that `is_selftest` flag which salt buffer to pick. +- is_selftest: Historically hashcat keeps two parallel structures for the selftest hash and real hash. As such they arrive in the context buffer, and you need to make a decision on that `is_selftest` flag which salt buffer to pick. ## 5. Esalts and Structured Binary Blobs, and fixed Salts From c033873e4bd419e39df52dc308c95e74f14f145d Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Wed, 18 Jun 2025 18:29:47 +0200 Subject: [PATCH 78/95] Update hipDeviceAttribute_t for ROCm 6.x Add hipDeviceProp_t and bindings for hipGetDeviceProperties(), hipGetDeviceProperties is required to retrieve gcnArchName[]. Add gcnArchName[] to select the correct --gpu-architecture value for a specific device when using hiprtc. Include sm_major and sm_minor for CUDA and gcnArchName for HIP in the kernel filename hash. Update nvrtc_options[] and hiprtc_options[] to avoid unused variables, eliminating the use of --restrict as a placeholder and preventing nvrtc from aborting. Add check_file_suffix() and remove_file_suffix() helper functions. --- include/ext_hip.h | 258 ++++++++++++++++++++++++++++++++++++++++------ include/shared.h | 3 + include/types.h | 1 + src/backend.c | 106 +++++++++---------- src/ext_hip.c | 28 +++++ src/shared.c | 29 ++++++ 6 files changed, 335 insertions(+), 90 deletions(-) diff --git a/include/ext_hip.h b/include/ext_hip.h index eb0d52a59..b9dfcb4c8 100644 --- a/include/ext_hip.h +++ b/include/ext_hip.h @@ -165,38 +165,43 @@ typedef enum __HIP_NODISCARD hipError_t { #undef __HIP_NODISCARD + +/** + * hipDeviceAttribute_t + * hipDeviceAttributeUnused number: 5 + */ typedef enum hipDeviceAttribute_t { hipDeviceAttributeCudaCompatibleBegin = 0, hipDeviceAttributeEccEnabled = hipDeviceAttributeCudaCompatibleBegin, ///< Whether ECC support is enabled. hipDeviceAttributeAccessPolicyMaxWindowSize, ///< Cuda only. The maximum size of the window policy in bytes. - hipDeviceAttributeAsyncEngineCount, ///< Cuda only. Asynchronous engines number. + hipDeviceAttributeAsyncEngineCount, ///< Asynchronous engines number. hipDeviceAttributeCanMapHostMemory, ///< Whether host memory can be mapped into device address space - hipDeviceAttributeCanUseHostPointerForRegisteredMem,///< Cuda only. Device can access host registered memory + hipDeviceAttributeCanUseHostPointerForRegisteredMem,///< Device can access host registered memory ///< at the same virtual address as the CPU hipDeviceAttributeClockRate, ///< Peak clock frequency in kilohertz. hipDeviceAttributeComputeMode, ///< Compute mode that device is currently in. - hipDeviceAttributeComputePreemptionSupported, ///< Cuda only. Device supports Compute Preemption. + hipDeviceAttributeComputePreemptionSupported, ///< Device supports Compute Preemption. hipDeviceAttributeConcurrentKernels, ///< Device can possibly execute multiple kernels concurrently. hipDeviceAttributeConcurrentManagedAccess, ///< Device can coherently access managed memory concurrently with the CPU hipDeviceAttributeCooperativeLaunch, ///< Support cooperative launch hipDeviceAttributeCooperativeMultiDeviceLaunch, ///< Support cooperative launch on multiple devices - hipDeviceAttributeDeviceOverlap, ///< Cuda only. Device can concurrently copy memory and execute a kernel. + hipDeviceAttributeDeviceOverlap, ///< Device can concurrently copy memory and execute a kernel. ///< Deprecated. Use instead asyncEngineCount. hipDeviceAttributeDirectManagedMemAccessFromHost, ///< Host can directly access managed memory on ///< the device without migration - hipDeviceAttributeGlobalL1CacheSupported, ///< Cuda only. Device supports caching globals in L1 - hipDeviceAttributeHostNativeAtomicSupported, ///< Cuda only. Link between the device and the host supports native atomic operations + hipDeviceAttributeGlobalL1CacheSupported, ///< Device supports caching globals in L1 + hipDeviceAttributeHostNativeAtomicSupported, ///< Link between the device and the host supports native atomic operations hipDeviceAttributeIntegrated, ///< Device is integrated GPU hipDeviceAttributeIsMultiGpuBoard, ///< Multiple GPU devices. hipDeviceAttributeKernelExecTimeout, ///< Run time limit for kernels executed on the device hipDeviceAttributeL2CacheSize, ///< Size of L2 cache in bytes. 0 if the device doesn't have L2 cache. hipDeviceAttributeLocalL1CacheSupported, ///< caching locals in L1 is supported - hipDeviceAttributeLuid, ///< Cuda only. 8-byte locally unique identifier in 8 bytes. Undefined on TCC and non-Windows platforms - hipDeviceAttributeLuidDeviceNodeMask, ///< Cuda only. Luid device node mask. Undefined on TCC and non-Windows platforms + hipDeviceAttributeLuid, ///< 8-byte locally unique identifier in 8 bytes. Undefined on TCC and non-Windows platforms + hipDeviceAttributeLuidDeviceNodeMask, ///< Luid device node mask. Undefined on TCC and non-Windows platforms hipDeviceAttributeComputeCapabilityMajor, ///< Major compute capability version number. hipDeviceAttributeManagedMemory, ///< Device supports allocating managed memory on this system - hipDeviceAttributeMaxBlocksPerMultiProcessor, ///< Cuda only. Max block size per multiprocessor + hipDeviceAttributeMaxBlocksPerMultiProcessor, ///< Max block size per multiprocessor hipDeviceAttributeMaxBlockDimX, ///< Max block size in width. hipDeviceAttributeMaxBlockDimY, ///< Max block size in height. hipDeviceAttributeMaxBlockDimZ, ///< Max block size in depth. @@ -211,22 +216,22 @@ typedef enum hipDeviceAttribute_t { hipDeviceAttributeMaxSurfaceCubemap, ///< Cuda only. Maximum dimensions of Cubemap surface. hipDeviceAttributeMaxSurfaceCubemapLayered, ///< Cuda only. Maximum dimension of Cubemap layered surface. hipDeviceAttributeMaxTexture1DWidth, ///< Maximum size of 1D texture. - hipDeviceAttributeMaxTexture1DLayered, ///< Cuda only. Maximum dimensions of 1D layered texture. + hipDeviceAttributeMaxTexture1DLayered, ///< Maximum dimensions of 1D layered texture. hipDeviceAttributeMaxTexture1DLinear, ///< Maximum number of elements allocatable in a 1D linear texture. ///< Use cudaDeviceGetTexture1DLinearMaxWidth() instead on Cuda. - hipDeviceAttributeMaxTexture1DMipmap, ///< Cuda only. Maximum size of 1D mipmapped texture. + hipDeviceAttributeMaxTexture1DMipmap, ///< Maximum size of 1D mipmapped texture. hipDeviceAttributeMaxTexture2DWidth, ///< Maximum dimension width of 2D texture. - hipDeviceAttributeMaxTexture2DHeight, ///< Maximum dimension height of 2D texture. - hipDeviceAttributeMaxTexture2DGather, ///< Cuda only. Maximum dimensions of 2D texture if gather operations performed. - hipDeviceAttributeMaxTexture2DLayered, ///< Cuda only. Maximum dimensions of 2D layered texture. - hipDeviceAttributeMaxTexture2DLinear, ///< Cuda only. Maximum dimensions (width, height, pitch) of 2D textures bound to pitched memory. - hipDeviceAttributeMaxTexture2DMipmap, ///< Cuda only. Maximum dimensions of 2D mipmapped texture. + hipDeviceAttributeMaxTexture2DHeight, ///< Maximum dimension hight of 2D texture. + hipDeviceAttributeMaxTexture2DGather, ///< Maximum dimensions of 2D texture if gather operations performed. + hipDeviceAttributeMaxTexture2DLayered, ///< Maximum dimensions of 2D layered texture. + hipDeviceAttributeMaxTexture2DLinear, ///< Maximum dimensions (width, height, pitch) of 2D textures bound to pitched memory. + hipDeviceAttributeMaxTexture2DMipmap, ///< Maximum dimensions of 2D mipmapped texture. hipDeviceAttributeMaxTexture3DWidth, ///< Maximum dimension width of 3D texture. hipDeviceAttributeMaxTexture3DHeight, ///< Maximum dimension height of 3D texture. hipDeviceAttributeMaxTexture3DDepth, ///< Maximum dimension depth of 3D texture. - hipDeviceAttributeMaxTexture3DAlt, ///< Cuda only. Maximum dimensions of alternate 3D texture. - hipDeviceAttributeMaxTextureCubemap, ///< Cuda only. Maximum dimensions of Cubemap texture - hipDeviceAttributeMaxTextureCubemapLayered, ///< Cuda only. Maximum dimensions of Cubemap layered texture. + hipDeviceAttributeMaxTexture3DAlt, ///< Maximum dimensions of alternate 3D texture. + hipDeviceAttributeMaxTextureCubemap, ///< Maximum dimensions of Cubemap texture + hipDeviceAttributeMaxTextureCubemapLayered, ///< Maximum dimensions of Cubemap layered texture. hipDeviceAttributeMaxThreadsDim, ///< Maximum dimension of a block hipDeviceAttributeMaxThreadsPerBlock, ///< Maximum number of threads per block. hipDeviceAttributeMaxThreadsPerMultiProcessor, ///< Maximum resident threads per multiprocessor. @@ -234,45 +239,47 @@ typedef enum hipDeviceAttribute_t { hipDeviceAttributeMemoryBusWidth, ///< Global memory bus width in bits. hipDeviceAttributeMemoryClockRate, ///< Peak memory clock frequency in kilohertz. hipDeviceAttributeComputeCapabilityMinor, ///< Minor compute capability version number. - hipDeviceAttributeMultiGpuBoardGroupID, ///< Cuda only. Unique ID of device group on the same multi-GPU board + hipDeviceAttributeMultiGpuBoardGroupID, ///< Unique ID of device group on the same multi-GPU board hipDeviceAttributeMultiprocessorCount, ///< Number of multiprocessors on the device. - hipDeviceAttributeName, ///< Device name. + hipDeviceAttributeUnused1, ///< Previously hipDeviceAttributeName hipDeviceAttributePageableMemoryAccess, ///< Device supports coherently accessing pageable memory ///< without calling hipHostRegister on it hipDeviceAttributePageableMemoryAccessUsesHostPageTables, ///< Device accesses pageable memory via the host's page tables hipDeviceAttributePciBusId, ///< PCI Bus ID. hipDeviceAttributePciDeviceId, ///< PCI Device ID. hipDeviceAttributePciDomainID, ///< PCI Domain ID. - hipDeviceAttributePersistingL2CacheMaxSize, ///< Cuda11 only. Maximum l2 persisting lines capacity in bytes + hipDeviceAttributePersistingL2CacheMaxSize, ///< Maximum l2 persisting lines capacity in bytes hipDeviceAttributeMaxRegistersPerBlock, ///< 32-bit registers available to a thread block. This number is shared ///< by all thread blocks simultaneously resident on a multiprocessor. hipDeviceAttributeMaxRegistersPerMultiprocessor, ///< 32-bit registers available per block. - hipDeviceAttributeReservedSharedMemPerBlock, ///< Cuda11 only. Shared memory reserved by CUDA driver per block. + hipDeviceAttributeReservedSharedMemPerBlock, ///< Shared memory reserved by CUDA driver per block. hipDeviceAttributeMaxSharedMemoryPerBlock, ///< Maximum shared memory available per block in bytes. - hipDeviceAttributeSharedMemPerBlockOptin, ///< Cuda only. Maximum shared memory per block usable by special opt in. - hipDeviceAttributeSharedMemPerMultiprocessor, ///< Cuda only. Shared memory available per multiprocessor. + hipDeviceAttributeSharedMemPerBlockOptin, ///< Maximum shared memory per block usable by special opt in. + hipDeviceAttributeSharedMemPerMultiprocessor, ///< Shared memory available per multiprocessor. hipDeviceAttributeSingleToDoublePrecisionPerfRatio, ///< Cuda only. Performance ratio of single precision to double precision. - hipDeviceAttributeStreamPrioritiesSupported, ///< Cuda only. Whether to support stream priorities. - hipDeviceAttributeSurfaceAlignment, ///< Cuda only. Alignment requirement for surfaces + hipDeviceAttributeStreamPrioritiesSupported, ///< Whether to support stream priorities. + hipDeviceAttributeSurfaceAlignment, ///< Alignment requirement for surfaces hipDeviceAttributeTccDriver, ///< Cuda only. Whether device is a Tesla device using TCC driver hipDeviceAttributeTextureAlignment, ///< Alignment requirement for textures hipDeviceAttributeTexturePitchAlignment, ///< Pitch alignment requirement for 2D texture references bound to pitched memory; hipDeviceAttributeTotalConstantMemory, ///< Constant memory size in bytes. - hipDeviceAttributeTotalGlobalMem, ///< Global memory available on device. + hipDeviceAttributeTotalGlobalMem, ///< Global memory available on devicice. hipDeviceAttributeUnifiedAddressing, ///< Cuda only. An unified address space shared with the host. - hipDeviceAttributeUuid, ///< Cuda only. Unique ID in 16 byte. + hipDeviceAttributeUnused2, ///< Previously hipDeviceAttributeUuid hipDeviceAttributeWarpSize, ///< Warp size in threads. hipDeviceAttributeMemoryPoolsSupported, ///< Device supports HIP Stream Ordered Memory Allocator hipDeviceAttributeVirtualMemoryManagementSupported, ///< Device supports HIP virtual memory management + hipDeviceAttributeHostRegisterSupported, ///< Can device support host memory registration via hipHostRegister + hipDeviceAttributeMemoryPoolSupportedHandleTypes, ///< Supported handle mask for HIP Stream Ordered Memory Allocator hipDeviceAttributeCudaCompatibleEnd = 9999, hipDeviceAttributeAmdSpecificBegin = 10000, hipDeviceAttributeClockInstructionRate = hipDeviceAttributeAmdSpecificBegin, ///< Frequency in khz of the timer used by the device-side "clock*" - hipDeviceAttributeArch, ///< Device architecture + hipDeviceAttributeUnused3, ///< Previously hipDeviceAttributeArch hipDeviceAttributeMaxSharedMemoryPerMultiprocessor, ///< Maximum Shared Memory PerMultiprocessor. - hipDeviceAttributeGcnArch, ///< Device gcn architecture - hipDeviceAttributeGcnArchName, ///< Device gcnArch name in 256 bytes + hipDeviceAttributeUnused4, ///< Previously hipDeviceAttributeGcnArch + hipDeviceAttributeUnused5, ///< Previously hipDeviceAttributeGcnArchName hipDeviceAttributeHdpMemFlushCntl, ///< Address of the HDP_MEM_COHERENCY_FLUSH_CNTL register hipDeviceAttributeHdpRegFlushCntl, ///< Address of the HDP_REG_COHERENCY_FLUSH_CNTL register hipDeviceAttributeCooperativeMultiDeviceUnmatchedFunc, ///< Supports cooperative launch on multiple @@ -298,6 +305,190 @@ typedef enum hipDeviceAttribute_t { // Extended attributes for vendors } hipDeviceAttribute_t; +/** + * hipDeviceArch_t + * + */ +typedef struct { + // 32-bit Atomics + unsigned hasGlobalInt32Atomics : 1; ///< 32-bit integer atomics for global memory. + unsigned hasGlobalFloatAtomicExch : 1; ///< 32-bit float atomic exch for global memory. + unsigned hasSharedInt32Atomics : 1; ///< 32-bit integer atomics for shared memory. + unsigned hasSharedFloatAtomicExch : 1; ///< 32-bit float atomic exch for shared memory. + unsigned hasFloatAtomicAdd : 1; ///< 32-bit float atomic add in global and shared memory. + + // 64-bit Atomics + unsigned hasGlobalInt64Atomics : 1; ///< 64-bit integer atomics for global memory. + unsigned hasSharedInt64Atomics : 1; ///< 64-bit integer atomics for shared memory. + + // Doubles + unsigned hasDoubles : 1; ///< Double-precision floating point. + + // Warp cross-lane operations + unsigned hasWarpVote : 1; ///< Warp vote instructions (__any, __all). + unsigned hasWarpBallot : 1; ///< Warp ballot instructions (__ballot). + unsigned hasWarpShuffle : 1; ///< Warp shuffle operations. (__shfl_*). + unsigned hasFunnelShift : 1; ///< Funnel two words into one with shift&mask caps. + + // Sync + unsigned hasThreadFenceSystem : 1; ///< __threadfence_system. + unsigned hasSyncThreadsExt : 1; ///< __syncthreads_count, syncthreads_and, syncthreads_or. + + // Misc + unsigned hasSurfaceFuncs : 1; ///< Surface functions. + unsigned has3dGrid : 1; ///< Grid and group dims are 3D (rather than 2D). + unsigned hasDynamicParallelism : 1; ///< Dynamic parallelism. +} hipDeviceArch_t; + +typedef struct hipUUID_t { + char bytes[16]; +} hipUUID; + + +/** + * hipDeviceProp + * + */ +typedef struct hipDeviceProp_t { + char name[256]; ///< Device name. + hipUUID uuid; ///< UUID of a device + char luid[8]; ///< 8-byte unique identifier. Only valid on windows + unsigned int luidDeviceNodeMask; ///< LUID node mask + size_t totalGlobalMem; ///< Size of global memory region (in bytes). + size_t sharedMemPerBlock; ///< Size of shared memory per block (in bytes). + int regsPerBlock; ///< Registers per block. + int warpSize; ///< Warp size. + size_t memPitch; ///< Maximum pitch in bytes allowed by memory copies + ///< pitched memory + int maxThreadsPerBlock; ///< Max work items per work group or workgroup max size. + int maxThreadsDim[3]; ///< Max number of threads in each dimension (XYZ) of a block. + int maxGridSize[3]; ///< Max grid dimensions (XYZ). + int clockRate; ///< Max clock frequency of the multiProcessors in khz. + size_t totalConstMem; ///< Size of shared constant memory region on the device + ///< (in bytes). + int major; ///< Major compute capability. On HCC, this is an approximation and features may + ///< differ from CUDA CC. See the arch feature flags for portable ways to query + ///< feature caps. + int minor; ///< Minor compute capability. On HCC, this is an approximation and features may + ///< differ from CUDA CC. See the arch feature flags for portable ways to query + ///< feature caps. + size_t textureAlignment; ///< Alignment requirement for textures + size_t texturePitchAlignment; ///< Pitch alignment requirement for texture references bound to + int deviceOverlap; ///< Deprecated. Use asyncEngineCount instead + int multiProcessorCount; ///< Number of multi-processors (compute units). + int kernelExecTimeoutEnabled; ///< Run time limit for kernels executed on the device + int integrated; ///< APU vs dGPU + int canMapHostMemory; ///< Check whether HIP can map host memory + int computeMode; ///< Compute mode. + int maxTexture1D; ///< Maximum number of elements in 1D images + int maxTexture1DMipmap; ///< Maximum 1D mipmap texture size + int maxTexture1DLinear; ///< Maximum size for 1D textures bound to linear memory + int maxTexture2D[2]; ///< Maximum dimensions (width, height) of 2D images, in image elements + int maxTexture2DMipmap[2]; ///< Maximum number of elements in 2D array mipmap of images + int maxTexture2DLinear[3]; ///< Maximum 2D tex dimensions if tex are bound to pitched memory + int maxTexture2DGather[2]; ///< Maximum 2D tex dimensions if gather has to be performed + int maxTexture3D[3]; ///< Maximum dimensions (width, height, depth) of 3D images, in image + ///< elements + int maxTexture3DAlt[3]; ///< Maximum alternate 3D texture dims + int maxTextureCubemap; ///< Maximum cubemap texture dims + int maxTexture1DLayered[2]; ///< Maximum number of elements in 1D array images + int maxTexture2DLayered[3]; ///< Maximum number of elements in 2D array images + int maxTextureCubemapLayered[2]; ///< Maximum cubemaps layered texture dims + int maxSurface1D; ///< Maximum 1D surface size + int maxSurface2D[2]; ///< Maximum 2D surface size + int maxSurface3D[3]; ///< Maximum 3D surface size + int maxSurface1DLayered[2]; ///< Maximum 1D layered surface size + int maxSurface2DLayered[3]; ///< Maximum 2D layared surface size + int maxSurfaceCubemap; ///< Maximum cubemap surface size + int maxSurfaceCubemapLayered[2]; ///< Maximum cubemap layered surface size + size_t surfaceAlignment; ///< Alignment requirement for surface + int concurrentKernels; ///< Device can possibly execute multiple kernels concurrently. + int ECCEnabled; ///< Device has ECC support enabled + int pciBusID; ///< PCI Bus ID. + int pciDeviceID; ///< PCI Device ID. + int pciDomainID; ///< PCI Domain ID + int tccDriver; ///< 1:If device is Tesla device using TCC driver, else 0 + int asyncEngineCount; ///< Number of async engines + int unifiedAddressing; ///< Does device and host share unified address space + int memoryClockRate; ///< Max global memory clock frequency in khz. + int memoryBusWidth; ///< Global memory bus width in bits. + int l2CacheSize; ///< L2 cache size. + int persistingL2CacheMaxSize; ///< Device's max L2 persisting lines in bytes + int maxThreadsPerMultiProcessor; ///< Maximum resident threads per multi-processor. + int streamPrioritiesSupported; ///< Device supports stream priority + int globalL1CacheSupported; ///< Indicates globals are cached in L1 + int localL1CacheSupported; ///< Locals are cahced in L1 + size_t sharedMemPerMultiprocessor; ///< Amount of shared memory available per multiprocessor. + int regsPerMultiprocessor; ///< registers available per multiprocessor + int managedMemory; ///< Device supports allocating managed memory on this system + int isMultiGpuBoard; ///< 1 if device is on a multi-GPU board, 0 if not. + int multiGpuBoardGroupID; ///< Unique identifier for a group of devices on same multiboard GPU + int hostNativeAtomicSupported; ///< Link between host and device supports native atomics + int singleToDoublePrecisionPerfRatio; ///< Deprecated. CUDA only. + int pageableMemoryAccess; ///< Device supports coherently accessing pageable memory + ///< without calling hipHostRegister on it + int concurrentManagedAccess; ///< Device can coherently access managed memory concurrently with + ///< the CPU + int computePreemptionSupported; ///< Is compute preemption supported on the device + int canUseHostPointerForRegisteredMem; ///< Device can access host registered memory with same + ///< address as the host + int cooperativeLaunch; ///< HIP device supports cooperative launch + int cooperativeMultiDeviceLaunch; ///< HIP device supports cooperative launch on multiple + ///< devices + size_t + sharedMemPerBlockOptin; ///< Per device m ax shared mem per block usable by special opt in + int pageableMemoryAccessUsesHostPageTables; ///< Device accesses pageable memory via the host's + ///< page tables + int directManagedMemAccessFromHost; ///< Host can directly access managed memory on the device + ///< without migration + int maxBlocksPerMultiProcessor; ///< Max number of blocks on CU + int accessPolicyMaxWindowSize; ///< Max value of access policy window + size_t reservedSharedMemPerBlock; ///< Shared memory reserved by driver per block + int hostRegisterSupported; ///< Device supports hipHostRegister + int sparseHipArraySupported; ///< Indicates if device supports sparse hip arrays + int hostRegisterReadOnlySupported; ///< Device supports using the hipHostRegisterReadOnly flag + ///< with hipHostRegistger + int timelineSemaphoreInteropSupported; ///< Indicates external timeline semaphore support + int memoryPoolsSupported; ///< Indicates if device supports hipMallocAsync and hipMemPool APIs + int gpuDirectRDMASupported; ///< Indicates device support of RDMA APIs + unsigned int gpuDirectRDMAFlushWritesOptions; ///< Bitmask to be interpreted according to + ///< hipFlushGPUDirectRDMAWritesOptions + int gpuDirectRDMAWritesOrdering; ///< value of hipGPUDirectRDMAWritesOrdering + unsigned int + memoryPoolSupportedHandleTypes; ///< Bitmask of handle types support with mempool based IPC + int deferredMappingHipArraySupported; ///< Device supports deferred mapping HIP arrays and HIP + ///< mipmapped arrays + int ipcEventSupported; ///< Device supports IPC events + int clusterLaunch; ///< Device supports cluster launch + int unifiedFunctionPointers; ///< Indicates device supports unified function pointers + int reserved[63]; ///< CUDA Reserved. + + int hipReserved[32]; ///< Reserved for adding new entries for HIP/CUDA. + + /* HIP Only struct members */ + char gcnArchName[256]; ///< AMD GCN Arch Name. HIP Only. + size_t maxSharedMemoryPerMultiProcessor; ///< Maximum Shared Memory Per CU. HIP Only. + int clockInstructionRate; ///< Frequency in khz of the timer used by the device-side "clock*" + ///< instructions. New for HIP. + hipDeviceArch_t arch; ///< Architectural feature flags. New for HIP. + unsigned int* hdpMemFlushCntl; ///< Addres of HDP_MEM_COHERENCY_FLUSH_CNTL register + unsigned int* hdpRegFlushCntl; ///< Addres of HDP_REG_COHERENCY_FLUSH_CNTL register + int cooperativeMultiDeviceUnmatchedFunc; ///< HIP device supports cooperative launch on + ///< multiple + /// devices with unmatched functions + int cooperativeMultiDeviceUnmatchedGridDim; ///< HIP device supports cooperative launch on + ///< multiple + /// devices with unmatched grid dimensions + int cooperativeMultiDeviceUnmatchedBlockDim; ///< HIP device supports cooperative launch on + ///< multiple + /// devices with unmatched block dimensions + int cooperativeMultiDeviceUnmatchedSharedMem; ///< HIP device supports cooperative launch on + ///< multiple + /// devices with unmatched shared memories + int isLargeBar; ///< 1: if it is a large PCI bar device, else 0 + int asicRevision; ///< Revision of the GPU in this device +} hipDeviceProp_t; + //Flags that can be used with hipStreamCreateWithFlags. /** Default stream creation flags. These are used with hipStreamCreate().*/ #define hipStreamDefault 0x00 @@ -410,6 +601,7 @@ typedef hipError_t (HIP_API_CALL *HIP_HIPRUNTIMEGETVERSION) (int *); typedef hipError_t (HIP_API_CALL *HIP_HIPSTREAMCREATE) (hipStream_t *, unsigned int); typedef hipError_t (HIP_API_CALL *HIP_HIPSTREAMDESTROY) (hipStream_t); typedef hipError_t (HIP_API_CALL *HIP_HIPSTREAMSYNCHRONIZE) (hipStream_t); +typedef hipError_t (HIP_API_CALL *HIP_HIPGETDEVICEPROPERTIES) (hipDeviceProp_t *, hipDevice_t); typedef struct hc_hip_lib { @@ -453,6 +645,7 @@ typedef struct hc_hip_lib HIP_HIPSTREAMCREATE hipStreamCreate; HIP_HIPSTREAMDESTROY hipStreamDestroy; HIP_HIPSTREAMSYNCHRONIZE hipStreamSynchronize; + HIP_HIPGETDEVICEPROPERTIES hipGetDeviceProperties; } hc_hip_lib_t; @@ -498,5 +691,6 @@ int hc_hipRuntimeGetVersion (void *hashcat_ctx, int *runtimeVersion); int hc_hipStreamCreate (void *hashcat_ctx, hipStream_t *phStream, unsigned int Flags); int hc_hipStreamDestroy (void *hashcat_ctx, hipStream_t hStream); int hc_hipStreamSynchronize (void *hashcat_ctx, hipStream_t hStream); +int hc_hipGetDeviceProperties (void *hashcat_ctx, hipDeviceProp_t *prop, hipDevice_t dev); #endif // HC_EXT_HIP_H diff --git a/include/shared.h b/include/shared.h index bcc98e5d9..bc27b49e0 100644 --- a/include/shared.h +++ b/include/shared.h @@ -114,4 +114,7 @@ bool is_apple_silicon (void); char *file_to_buffer (const char *filename); +bool check_file_suffix (const char *file, const char *suffix); +bool remove_file_suffix (char *file, const char *suffix); + #endif // HC_SHARED_H diff --git a/include/types.h b/include/types.h index 8f265ab14..da6f12c62 100644 --- a/include/types.h +++ b/include/types.h @@ -1235,6 +1235,7 @@ typedef struct hc_device_param int sm_major; int sm_minor; + char *gcnArchName; u32 kernel_exec_timeout; u32 kernel_preferred_wgs_multiple; diff --git a/src/backend.c b/src/backend.c index 057d27252..c69792622 100644 --- a/src/backend.c +++ b/src/backend.c @@ -408,7 +408,7 @@ static bool cuda_test_instruction (hashcat_ctx_t *hashcat_ctx, const int sm_majo nvrtc_options[0] = "--restrict"; nvrtc_options[1] = "--gpu-architecture"; - hc_asprintf (&nvrtc_options[2], "compute_%d%d", sm_major, sm_minor); + hc_asprintf (&nvrtc_options[2], "compute_%d", (device_param->sm_major * 10) + device_param->sm_minor); nvrtc_options[3] = NULL; @@ -5804,6 +5804,19 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) device_param->hip_warp_size = hip_warp_size; + // gcnArchName + + hipDeviceProp_t prop; + + if (hc_hipGetDeviceProperties (hashcat_ctx, &prop, hip_device) == -1) + { + device_param->skipped = true; + + continue; + } + + device_param->gcnArchName = strdup (prop.gcnArchName); + // sm_minor, sm_major int sm_major = 0; @@ -8962,61 +8975,47 @@ static bool load_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_p if (hc_nvrtcCreateProgram (hashcat_ctx, &program, kernel_sources[0], kernel_name, 0, NULL, NULL) == -1) return false; - char **nvrtc_options = (char **) hccalloc (12 + strlen (build_options_buf) + 1, sizeof (char *)); // ... + char **nvrtc_options = (char **) hccalloc (16 + strlen (build_options_buf) + 1, sizeof (char *)); // ... + + int nvrtc_options_idx = 0; if (backend_ctx->nvrtc_driver_version >= 12000) { - nvrtc_options[0] = "--std=c++14"; - } - else - { - // some placeholder - nvrtc_options[0] = "--restrict"; + nvrtc_options[nvrtc_options_idx++] = "--std=c++14"; } - nvrtc_options[1] = "--restrict"; - nvrtc_options[2] = "--device-as-default-execution-space"; - nvrtc_options[3] = "--gpu-architecture"; + nvrtc_options[nvrtc_options_idx++] = "--restrict"; + nvrtc_options[nvrtc_options_idx++] = "--device-as-default-execution-space"; + nvrtc_options[nvrtc_options_idx++] = "--gpu-architecture"; - hc_asprintf (&nvrtc_options[4], "compute_%d%d", device_param->sm_major, device_param->sm_minor); + hc_asprintf (&nvrtc_options[nvrtc_options_idx++], "compute_%d", (device_param->sm_major * 10) + device_param->sm_minor); if (backend_ctx->nvrtc_driver_version >= 12010) { - nvrtc_options[5] = "--split-compile"; + nvrtc_options[nvrtc_options_idx++] = "--split-compile"; - hc_asprintf (&nvrtc_options[6], "%d", 0); - } - else - { - // some placeholder - nvrtc_options[5] = "--restrict"; - nvrtc_options[6] = "--restrict"; + hc_asprintf (&nvrtc_options[nvrtc_options_idx++], "%d", 0); } if (backend_ctx->nvrtc_driver_version >= 12040) { - nvrtc_options[7] = "--minimal"; - } - else - { - // some placeholder - nvrtc_options[7] = "--restrict"; + nvrtc_options[nvrtc_options_idx++] = "--minimal"; } // untested on windows, but it should work #if defined (_WIN) || defined (__CYGWIN__) || defined (__MSYS__) - hc_asprintf (&nvrtc_options[8], "-D INCLUDE_PATH=%s", "OpenCL"); + hc_asprintf (&nvrtc_options[nvrtc_options_idx++], "-D INCLUDE_PATH=%s", "OpenCL"); #else - hc_asprintf (&nvrtc_options[8], "-D INCLUDE_PATH=%s", folder_config->cpath_real); + hc_asprintf (&nvrtc_options[nvrtc_options_idx++], "-D INCLUDE_PATH=%s", folder_config->cpath_real); #endif - hc_asprintf (&nvrtc_options[9], "-D XM2S(x)=#x"); - hc_asprintf (&nvrtc_options[10], "-D M2S(x)=XM2S(x)"); - hc_asprintf (&nvrtc_options[11], "-D MAX_THREADS_PER_BLOCK=%d", (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : device_param->kernel_threads_max); + hc_asprintf (&nvrtc_options[nvrtc_options_idx++], "-D XM2S(x)=#x"); + hc_asprintf (&nvrtc_options[nvrtc_options_idx++], "-D M2S(x)=XM2S(x)"); + hc_asprintf (&nvrtc_options[nvrtc_options_idx++], "-D MAX_THREADS_PER_BLOCK=%d", (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : device_param->kernel_threads_max); char *nvrtc_options_string = hcstrdup (build_options_buf); - const int num_options = 12 + nvrtc_make_options_array_from_string (nvrtc_options_string, nvrtc_options + 12); + const int num_options = nvrtc_options_idx + nvrtc_make_options_array_from_string (nvrtc_options_string, nvrtc_options + nvrtc_options_idx); const int rc_nvrtcCompileProgram = hc_nvrtcCompileProgram (hashcat_ctx, program, num_options, (const char * const *) nvrtc_options); @@ -9238,42 +9237,27 @@ static bool load_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_p if (hc_hiprtcCreateProgram (hashcat_ctx, &program, kernel_sources[0], kernel_name, 0, NULL, NULL) == -1) return false; - char **hiprtc_options = (char **) hccalloc (8 + strlen (build_options_buf) + 1, sizeof (char *)); // ... + char **hiprtc_options = (char **) hccalloc (16 + strlen (build_options_buf) + 1, sizeof (char *)); // ... - //hiprtc_options[0] = "--restrict"; - //hiprtc_options[1] = "--device-as-default-execution-space"; - //hiprtc_options[2] = "--gpu-architecture"; + int hiprtc_options_idx = 0; - hc_asprintf (&hiprtc_options[0], "-D MAX_THREADS_PER_BLOCK=%d", (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : device_param->kernel_threads_max); - - /* 4.3 linux - hiprtc_options[1] = "-I"; - hiprtc_options[2] = "/opt/rocm/hip/bin/include"; - hiprtc_options[3] = "-I"; - hiprtc_options[4] = "/opt/rocm/include"; - hiprtc_options[5] = "-I"; - */ - - hiprtc_options[1] = ""; - hiprtc_options[2] = ""; - hiprtc_options[3] = ""; - hiprtc_options[4] = ""; - hiprtc_options[5] = ""; + hc_asprintf (&hiprtc_options[hiprtc_options_idx++], "-D MAX_THREADS_PER_BLOCK=%d", (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : device_param->kernel_threads_max); + hc_asprintf (&hiprtc_options[hiprtc_options_idx++], "--gpu-architecture=%s", device_param->gcnArchName); // untested but it should work #if defined (_WIN) || defined (__CYGWIN__) || defined (__MSYS__) - hc_asprintf (&hiprtc_options[5], "-D INCLUDE_PATH=%s/OpenCL/", folder_config->cwd); + hc_asprintf (&hiprtc_options[hiprtc_options_idx++], "-D INCLUDE_PATH=%s/OpenCL/", folder_config->cwd); // ugly, but required since HIPRTC is changing the current working folder to the temporary compile folder #else - hc_asprintf (&hiprtc_options[5], "-D INCLUDE_PATH=%s", folder_config->cpath_real); + hc_asprintf (&hiprtc_options[hiprtc_options_idx++], "-D INCLUDE_PATH=%s", folder_config->cpath_real); #endif - hc_asprintf (&hiprtc_options[6], "-D XM2S(x)=#x"); - hc_asprintf (&hiprtc_options[7], "-D M2S(x)=XM2S(x)"); + hc_asprintf (&hiprtc_options[hiprtc_options_idx++], "-D XM2S(x)=#x"); + hc_asprintf (&hiprtc_options[hiprtc_options_idx++], "-D M2S(x)=XM2S(x)"); char *hiprtc_options_string = hcstrdup (build_options_buf); - const int num_options = 8 + hiprtc_make_options_array_from_string (hiprtc_options_string, hiprtc_options + 8); + const int num_options = hiprtc_options_idx + hiprtc_make_options_array_from_string (hiprtc_options_string, hiprtc_options + hiprtc_options_idx); const int rc_hiprtcCompileProgram = hc_hiprtcCompileProgram (hashcat_ctx, program, num_options, (const char * const *) hiprtc_options); @@ -10674,11 +10658,14 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) char device_name_chksum_amp_mp[HCBUFSIZ_TINY] = { 0 }; - const size_t dnclen_amp_mp = snprintf (device_name_chksum_amp_mp, HCBUFSIZ_TINY, "%d-%d-%d-%u-%d-%u-%s-%s-%s-%u-%u", + const size_t dnclen_amp_mp = snprintf (device_name_chksum_amp_mp, HCBUFSIZ_TINY, "%d-%d-%d-%u-%u-%u-%s-%d-%u-%s-%s-%s-%u-%u", backend_ctx->comptime, backend_ctx->cuda_driver_version, backend_ctx->hip_runtimeVersion, backend_ctx->metal_runtimeVersion, + device_param->sm_major, + device_param->sm_minor, + (device_param->is_hip == true) ? device_param->gcnArchName : "", device_param->is_opencl, device_param->opencl_platform_vendor_id, device_param->device_name, @@ -11237,11 +11224,14 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) const u32 extra_value = (user_options->attack_mode == ATTACK_MODE_ASSOCIATION) ? ATTACK_MODE_ASSOCIATION : ATTACK_MODE_NONE; - const size_t dnclen = snprintf (device_name_chksum, HCBUFSIZ_TINY, "%d-%d-%d-%u-%d-%u-%s-%s-%s-%d-%u-%u-%u-%u-%s", + const size_t dnclen = snprintf (device_name_chksum, HCBUFSIZ_TINY, "%d-%d-%d-%u-%u-%u-%s-%d-%u-%s-%s-%s-%d-%u-%u-%u-%u-%s", backend_ctx->comptime, backend_ctx->cuda_driver_version, backend_ctx->hip_runtimeVersion, backend_ctx->metal_runtimeVersion, + device_param->sm_major, + device_param->sm_minor, + (device_param->is_hip == true) ? device_param->gcnArchName : "", device_param->is_opencl, device_param->opencl_platform_vendor_id, device_param->device_name, diff --git a/src/ext_hip.c b/src/ext_hip.c index 0611733aa..75b061037 100644 --- a/src/ext_hip.c +++ b/src/ext_hip.c @@ -154,6 +154,7 @@ int hip_init (void *hashcat_ctx) HC_LOAD_FUNC_HIP (hip, hipStreamCreate, hipStreamCreate, HIP_HIPSTREAMCREATE, HIP, 1); HC_LOAD_FUNC_HIP (hip, hipStreamDestroy, hipStreamDestroy, HIP_HIPSTREAMDESTROY, HIP, 1); HC_LOAD_FUNC_HIP (hip, hipStreamSynchronize, hipStreamSynchronize, HIP_HIPSTREAMSYNCHRONIZE, HIP, 1); + HC_LOAD_FUNC_HIP (hip, hipGetDeviceProperties, hipGetDevicePropertiesR0600, HIP_HIPGETDEVICEPROPERTIES, HIP, 1); return 0; } @@ -1148,3 +1149,30 @@ int hc_hipStreamSynchronize (void *hashcat_ctx, hipStream_t hStream) return 0; } + +int hc_hipGetDeviceProperties (void *hashcat_ctx, hipDeviceProp_t *prop, hipDevice_t dev) +{ + backend_ctx_t *backend_ctx = ((hashcat_ctx_t *) hashcat_ctx)->backend_ctx; + + HIP_PTR *hip = (HIP_PTR *) backend_ctx->hip; + + const hipError_t HIP_err = hip->hipGetDeviceProperties (prop, dev); + + if (HIP_err != hipSuccess) + { + const char *pStr = NULL; + + if (hip->hipGetErrorString (HIP_err, &pStr) == hipSuccess) + { + event_log_error (hashcat_ctx, "hipDeviceGetAttribute(): %s", pStr); + } + else + { + event_log_error (hashcat_ctx, "hipDeviceGetAttribute(): %d", HIP_err); + } + + return -1; + } + + return 0; +} diff --git a/src/shared.c b/src/shared.c index 47645d655..4661c6934 100644 --- a/src/shared.c +++ b/src/shared.c @@ -1553,3 +1553,32 @@ int extract_dynamicx_hash (const u8 *input_buf, const int input_len, u8 **output return hash_mode; } + +bool check_file_suffix (const char *file, const char *suffix) +{ + if (file == NULL) return false; + if (suffix == NULL) return false; + + const size_t len_file = strlen (file); + const size_t len_suffix = strlen (suffix); + + if (len_suffix > len_file) return false; + + return strcmp (file + len_file - len_suffix, suffix) == 0; +} + +bool remove_file_suffix (char *file, const char *suffix) +{ + if (file == NULL) return false; + if (suffix == NULL) return false; + + if (check_file_suffix (file, suffix) == false) return false; + + const size_t len_file = strlen (file); + const size_t len_suffix = strlen (suffix); + + file[len_file - len_suffix] = 0; + + return true; +} + From 4ed91e430f0ad751cc83204f7a0345e6364ab2d4 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Wed, 18 Jun 2025 20:16:08 +0200 Subject: [PATCH 79/95] Refactor Python bridge to load source files as scripts instead of modules. Previously, the bridge loaded user source files as Python modules, which required stripping extensions and could lead to confusing name conflicts. Now, it loads them as regular Python scripts, which is more intuitive and aligns better with user expectations. --- Python/generic_hash_mp.py | 8 +- Python/generic_hash_sp.py | 11 +- Python/hcmp.py | 23 ++- Python/hcsp.py | 15 +- src/bridges/bridge_python_generic_hash_mp.c | 114 +++++++++++-- src/bridges/bridge_python_generic_hash_sp.c | 167 ++++++++++++++++---- 6 files changed, 273 insertions(+), 65 deletions(-) diff --git a/Python/generic_hash_mp.py b/Python/generic_hash_mp.py index 44003bdd3..53c00f6b4 100644 --- a/Python/generic_hash_mp.py +++ b/Python/generic_hash_mp.py @@ -37,7 +37,7 @@ def kernel_loop(ctx,passwords,salt_id,is_selftest): return hcmp.handle_queue(ctx,passwords,salt_id,is_selftest) def init(ctx): - hcmp.init(ctx,calc_hash,extract_esalts) + hcmp.init(ctx,extract_esalts) def term(ctx): hcmp.term(ctx) @@ -51,7 +51,8 @@ if __name__ == '__main__': "salts_buf": bytes(568), "esalts_buf": bytes(131080), "st_salts_buf": bytes(568), - "st_esalts_buf": bytes(131080) + "st_esalts_buf": bytes(131080), + "parallelism": 4 } init(ctx) hashcat_passwords = 256 @@ -62,5 +63,6 @@ if __name__ == '__main__': hashes = kernel_loop(ctx,passwords,0,False) passwords.clear() hashes = kernel_loop(ctx,passwords,0,False) ## remaining entries - if(len(hashes)): print(hashes[-1]) + if hashes: + print(hashes[-1]) term(ctx) diff --git a/Python/generic_hash_sp.py b/Python/generic_hash_sp.py index 76cc13f5b..d985b1693 100644 --- a/Python/generic_hash_sp.py +++ b/Python/generic_hash_sp.py @@ -37,7 +37,7 @@ def kernel_loop(ctx,passwords,salt_id,is_selftest): return hcsp.handle_queue(ctx,passwords,salt_id,is_selftest) def init(ctx): - hcsp.init(ctx,calc_hash,extract_esalts) + hcsp.init(ctx,extract_esalts) def term(ctx): hcsp.term(ctx) @@ -51,16 +51,19 @@ if __name__ == '__main__': "salts_buf": bytes(568), "esalts_buf": bytes(131080), "st_salts_buf": bytes(568), - "st_esalts_buf": bytes(131080) + "st_esalts_buf": bytes(131080), + "parallelism": 1 } init(ctx) hashcat_passwords = 256 passwords = [] for line in sys.stdin: passwords.append(bytes(line.rstrip(), 'utf-8')) - if(len(passwords) == hashcat_passwords): + if len(passwords) == hashcat_passwords: hashes = kernel_loop(ctx,passwords,0,False) passwords.clear() hashes = kernel_loop(ctx,passwords,0,False) ## remaining entries - if(len(hashes)): print(hashes[-1]) + if hashes: + print(hashes[-1]) term(ctx) + diff --git a/Python/hcmp.py b/Python/hcmp.py index 1e55ebfab..60af98b16 100644 --- a/Python/hcmp.py +++ b/Python/hcmp.py @@ -1,7 +1,13 @@ -import hcshared +import importlib import multiprocessing +import hcshared -def init(ctx: dict, user_fn, extract_esalts): +def _worker_batch(chunk, salt_id, is_selftest, module_name, salts, st_salts): + user_module = importlib.import_module(module_name) + calc_hash = getattr(user_module, "calc_hash") + return hcshared._worker_batch(chunk, salt_id, is_selftest, calc_hash, salts, st_salts) + +def init(ctx: dict, extract_esalts): # Extract and merge salts and esalts salts = hcshared.extract_salts(ctx["salts_buf"]) esalts = extract_esalts(ctx["esalts_buf"]) @@ -13,18 +19,19 @@ def init(ctx: dict, user_fn, extract_esalts): for salt, esalt in zip(st_salts, st_esalts): salt["esalt"] = esalt - # Save state in ctx + # Save in ctx ctx["salts"] = salts ctx["st_salts"] = st_salts - ctx["user_fn"] = user_fn + ctx["module_name"] = ctx.get("module_name", "__main__") + ctx["pool"] = multiprocessing.Pool(processes=ctx["parallelism"]) return def handle_queue(ctx: dict, passwords: list, salt_id: int, is_selftest: bool) -> list: - user_fn = ctx["user_fn"] + pool = ctx["pool"] salts = ctx["salts"] st_salts = ctx["st_salts"] - pool = ctx["pool"] + module_name = ctx["module_name"] parallelism = ctx["parallelism"] chunk_size = (len(passwords) + parallelism - 1) // parallelism @@ -34,8 +41,8 @@ def handle_queue(ctx: dict, passwords: list, salt_id: int, is_selftest: bool) -> for chunk in chunks: if chunk: jobs.append(pool.apply_async( - hcshared._worker_batch, - args=(chunk, salt_id, is_selftest, user_fn, salts, st_salts) + _worker_batch, + args=(chunk, salt_id, is_selftest, module_name, salts, st_salts) )) hashes = [] diff --git a/Python/hcsp.py b/Python/hcsp.py index 308529cfc..792674e74 100644 --- a/Python/hcsp.py +++ b/Python/hcsp.py @@ -1,12 +1,16 @@ +import importlib import hcshared def handle_queue(ctx: dict, passwords: list, salt_id: int, is_selftest: bool) -> list: - user_fn = ctx["user_fn"] + user_module = importlib.import_module(ctx["module_name"]) + calc_hash = getattr(user_module, "calc_hash") + salts = ctx["salts"] st_salts = ctx["st_salts"] - return hcshared._worker_batch (passwords, salt_id, is_selftest, user_fn, salts, st_salts) -def init(ctx: dict,user_fn,extract_esalts): + return hcshared._worker_batch(passwords, salt_id, is_selftest, calc_hash, salts, st_salts) + +def init(ctx: dict, extract_esalts): # Extract and merge salts and esalts salts = hcshared.extract_salts(ctx["salts_buf"]) esalts = extract_esalts(ctx["esalts_buf"]) @@ -18,10 +22,11 @@ def init(ctx: dict,user_fn,extract_esalts): for salt, esalt in zip(st_salts, st_esalts): salt["esalt"] = esalt - # Save state in ctx + # Store final state ctx["salts"] = salts ctx["st_salts"] = st_salts - ctx["user_fn"] = user_fn + ctx["module_name"] = ctx.get("module_name", "__main__") + return def term(ctx: dict): diff --git a/src/bridges/bridge_python_generic_hash_mp.c b/src/bridges/bridge_python_generic_hash_mp.c index a40d55373..f5d31aeab 100644 --- a/src/bridges/bridge_python_generic_hash_mp.c +++ b/src/bridges/bridge_python_generic_hash_mp.c @@ -72,6 +72,9 @@ typedef void (PYTHON_API_CALL *PYEXITSTATUSEXCEPTION) typedef PyStatus (PYTHON_API_CALL *PYINITIALIZEFROMCONFIG) (const PyConfig *); typedef void (PYTHON_API_CALL *PYEVAL_RESTORETHREAD) (PyThreadState *); typedef const char *(PYTHON_API_CALL *PYGETVERSION) (void); +typedef PyObject *(PYTHON_API_CALL *PY_COMPILESTRINGEXFLAGS) (const char *, const char *, int, PyCompilerFlags *, int); +typedef PyObject *(PYTHON_API_CALL *PYEVAL_EVALCODE) (PyObject *, PyObject *, PyObject *); +typedef PyObject *(PYTHON_API_CALL *PYEVAL_GETBUILTINS) (void); typedef struct hc_python_lib { @@ -125,6 +128,9 @@ typedef struct hc_python_lib PYINITIALIZEFROMCONFIG Py_InitializeFromConfig; PYEVAL_RESTORETHREAD PyEval_RestoreThread; PYGETVERSION Py_GetVersion; + PY_COMPILESTRINGEXFLAGS Py_CompileStringExFlags; + PYEVAL_EVALCODE PyEval_EvalCode; + PYEVAL_GETBUILTINS PyEval_GetBuiltins; } hc_python_lib_t; @@ -168,7 +174,7 @@ typedef struct PyObject *pArgs; PyObject *pContext; - PyObject *pModule; + PyObject *pGlobals; PyObject *pFunc_Init; PyObject *pFunc_Term; PyObject *pFunc_kernel_loop; @@ -189,11 +195,73 @@ typedef struct } python_interpreter_t; #if defined (_WIN) || defined (__CYGWIN__) || defined (__APPLE__) -static char *DEFAULT_SOURCE_FILENAME = "generic_hash_sp"; +static char *DEFAULT_SOURCE_FILENAME = "./Python/generic_hash_sp.py"; #else -static char *DEFAULT_SOURCE_FILENAME = "generic_hash_mp"; +static char *DEFAULT_SOURCE_FILENAME = "./Python/generic_hash_mp.py"; #endif +const char *extract_module_name (const char *path) +{ + char *filename = strdup (path); + + remove_file_suffix (filename, ".py"); + + const char *slash = strrchr (filename, '/'); + const char *backslash = strrchr (filename, '\\'); + + const char *module_name = NULL; + + if (slash) + { + module_name = slash + 1; + } + else if (backslash) + { + module_name = backslash + 1; + } + else + { + module_name = filename; + } + + return module_name; +} + +char *load_source (const char *filename) +{ + FILE *fp = fopen (filename, "r"); + + if (fp == NULL) + { + fprintf (stderr, "%s: %s\n", filename, strerror (errno)); + + return NULL; + } + + fseek (fp, 0, SEEK_END); + + const size_t size = ftell (fp); + + fseek (fp, 0, SEEK_SET); + + char *source = hcmalloc (size + 1); + + if (fread (source, 1, size, fp) != size) + { + fprintf (stderr, "%s: %s\n", filename, strerror (errno)); + + hcfree (source); + + return NULL; + } + + source[size] = 0; + + fclose (fp); + + return source; +} + #if defined (_WIN) #define DEVNULL "NUL" #else @@ -618,6 +686,9 @@ static bool init_python (hc_python_lib_t *python) //HC_LOAD_FUNC_PYTHON (python, Py_ExitStatusException, Py_ExitStatusException, PYEXITSTATUSEXCEPTION, PYTHON, 1); //HC_LOAD_FUNC_PYTHON (python, Py_InitializeFromConfig, Py_InitializeFromConfig, PYINITIALIZEFROMCONFIG, PYTHON, 1); HC_LOAD_FUNC_PYTHON (python, PyEval_RestoreThread, PyEval_RestoreThread, PYEVAL_RESTORETHREAD, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, Py_CompileStringExFlags, Py_CompileStringExFlags, PY_COMPILESTRINGEXFLAGS, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyEval_EvalCode, PyEval_EvalCode, PYEVAL_EVALCODE, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyEval_GetBuiltins, PyEval_GetBuiltins, PYEVAL_GETBUILTINS, PYTHON, 1); return true; } @@ -720,29 +791,39 @@ void *platform_init (user_options_t *user_options) fprintf (stderr, " For multithreading on Windows and MacOS, please use -m 72000 instead.\n\n"); #endif - python_interpreter->source_filename = (user_options->bridge_parameter1) ? user_options->bridge_parameter1 : DEFAULT_SOURCE_FILENAME; + python_interpreter->source_filename = (user_options->bridge_parameter1 == NULL) ? DEFAULT_SOURCE_FILENAME : user_options->bridge_parameter1; - PyObject *pName = python->PyUnicode_DecodeFSDefault (python_interpreter->source_filename); + char *source = load_source (python_interpreter->source_filename); - if (pName == NULL) + if (source == NULL) return NULL; + + PyObject *code = python->Py_CompileStringExFlags (source, python_interpreter->source_filename, Py_file_input, NULL, -1); + + free (source); + + if (code == NULL) { python->PyErr_Print (); return false; } - unit_buf->pModule = python->PyImport_Import (pName); + unit_buf->pGlobals = python->PyDict_New (); - if (unit_buf->pModule == NULL) + python->PyDict_SetItemString (unit_buf->pGlobals, "__builtins__", python->PyEval_GetBuiltins ()); + + PyObject *result = python->PyEval_EvalCode (code, unit_buf->pGlobals, unit_buf->pGlobals); + + if (result == NULL) { python->PyErr_Print (); return false; } - python->Py_DecRef (pName); + python->Py_DecRef (result); - unit_buf->pFunc_Init = python->PyObject_GetAttrString (unit_buf->pModule, "init"); + unit_buf->pFunc_Init = python->PyDict_GetItemString (unit_buf->pGlobals, "init"); if (unit_buf->pFunc_Init == NULL) { @@ -751,7 +832,7 @@ void *platform_init (user_options_t *user_options) return false; } - unit_buf->pFunc_Term = python->PyObject_GetAttrString (unit_buf->pModule, "term"); + unit_buf->pFunc_Term = python->PyDict_GetItemString (unit_buf->pGlobals, "term"); if (unit_buf->pFunc_Term == NULL) { @@ -760,7 +841,7 @@ void *platform_init (user_options_t *user_options) return false; } - unit_buf->pFunc_kernel_loop = python->PyObject_GetAttrString (unit_buf->pModule, "kernel_loop"); + unit_buf->pFunc_kernel_loop = python->PyDict_GetItemString (unit_buf->pGlobals, "kernel_loop"); if (unit_buf->pFunc_kernel_loop == NULL) { @@ -815,7 +896,7 @@ void platform_term (void *platform_context) python->Py_DecRef (unit_buf->pFunc_kernel_loop); python->Py_DecRef (unit_buf->pFunc_Term); python->Py_DecRef (unit_buf->pFunc_Init); - python->Py_DecRef (unit_buf->pModule); + python->Py_DecRef (unit_buf->pGlobals); //python->PyEval_RestoreThread (python_interpreter->tstate); @@ -840,6 +921,9 @@ bool thread_init (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_pa int rc = 0; + const char *module_name = extract_module_name (python_interpreter->source_filename); + + rc |= python->PyDict_SetItemString (unit_buf->pContext, "module_name", python->PyUnicode_FromString ((const char *) module_name)); rc |= python->PyDict_SetItemString (unit_buf->pContext, "parallelism", python->PyLong_FromLong (unit_buf->parallelism)); rc |= python->PyDict_SetItemString (unit_buf->pContext, "salts_cnt", python->PyLong_FromLong (hashes->salts_cnt)); rc |= python->PyDict_SetItemString (unit_buf->pContext, "salts_size", python->PyLong_FromLong (sizeof (salt_t))); @@ -1052,7 +1136,7 @@ const char *st_update_hash (MAYBE_UNUSED void *platform_context) unit_buf->gstate = python->PyGILState_Ensure (); - PyObject *constant = python->PyObject_GetAttrString (unit_buf->pModule, "ST_HASH"); + PyObject *constant = python->PyDict_GetItemString (unit_buf->pGlobals, "ST_HASH"); if (constant == NULL) { @@ -1080,7 +1164,7 @@ const char *st_update_pass (MAYBE_UNUSED void *platform_context) unit_buf->gstate = python->PyGILState_Ensure (); - PyObject *constant = python->PyObject_GetAttrString (unit_buf->pModule, "ST_PASS"); + PyObject *constant = python->PyDict_GetItemString (unit_buf->pGlobals, "ST_PASS"); if (constant == NULL) { diff --git a/src/bridges/bridge_python_generic_hash_sp.c b/src/bridges/bridge_python_generic_hash_sp.c index beeb7d948..a53d4391a 100644 --- a/src/bridges/bridge_python_generic_hash_sp.c +++ b/src/bridges/bridge_python_generic_hash_sp.c @@ -72,6 +72,9 @@ typedef void (PYTHON_API_CALL *PYEXITSTATUSEXCEPTION) typedef PyStatus (PYTHON_API_CALL *PYINITIALIZEFROMCONFIG) (const PyConfig *); typedef void (PYTHON_API_CALL *PYEVAL_RESTORETHREAD) (PyThreadState *); typedef const char *(PYTHON_API_CALL *PYGETVERSION) (void); +typedef PyObject *(PYTHON_API_CALL *PY_COMPILESTRINGEXFLAGS) (const char *, const char *, int, PyCompilerFlags *, int); +typedef PyObject *(PYTHON_API_CALL *PYEVAL_EVALCODE) (PyObject *, PyObject *, PyObject *); +typedef PyObject *(PYTHON_API_CALL *PYEVAL_GETBUILTINS) (void); typedef struct hc_python_lib { @@ -125,6 +128,9 @@ typedef struct hc_python_lib PYINITIALIZEFROMCONFIG Py_InitializeFromConfig; PYEVAL_RESTORETHREAD PyEval_RestoreThread; PYGETVERSION Py_GetVersion; + PY_COMPILESTRINGEXFLAGS Py_CompileStringExFlags; + PYEVAL_EVALCODE PyEval_EvalCode; + PYEVAL_GETBUILTINS PyEval_GetBuiltins; } hc_python_lib_t; @@ -166,7 +172,7 @@ typedef struct PyObject *pArgs; PyObject *pContext; - PyObject *pModule; + PyObject *pGlobals; PyObject *pFunc_Init; PyObject *pFunc_Term; PyObject *pFunc_kernel_loop; @@ -186,7 +192,69 @@ typedef struct } python_interpreter_t; -static char *DEFAULT_SOURCE_FILENAME = "generic_hash_sp"; +static char *DEFAULT_SOURCE_FILENAME = "./Python/generic_hash_sp.py"; + +const char *extract_module_name (const char *path) +{ + char *filename = strdup (path); + + remove_file_suffix (filename, ".py"); + + const char *slash = strrchr (filename, '/'); + const char *backslash = strrchr (filename, '\\'); + + const char *module_name = NULL; + + if (slash) + { + module_name = slash + 1; + } + else if (backslash) + { + module_name = backslash + 1; + } + else + { + module_name = filename; + } + + return module_name; +} + +char *load_source (const char *filename) +{ + FILE *fp = fopen (filename, "r"); + + if (fp == NULL) + { + fprintf (stderr, "%s: %s\n", filename, strerror (errno)); + + return NULL; + } + + fseek (fp, 0, SEEK_END); + + const size_t size = ftell (fp); + + fseek (fp, 0, SEEK_SET); + + char *source = hcmalloc (size + 1); + + if (fread (source, 1, size, fp) != size) + { + fprintf (stderr, "%s: %s\n", filename, strerror (errno)); + + hcfree (source); + + return NULL; + } + + source[size] = 0; + + fclose (fp); + + return source; +} #if defined (_WIN) #define DEVNULL "NUL" @@ -628,6 +696,9 @@ static bool init_python (hc_python_lib_t *python) //HC_LOAD_FUNC_PYTHON (python, Py_ExitStatusException, Py_ExitStatusException, PYEXITSTATUSEXCEPTION, PYTHON, 1); //HC_LOAD_FUNC_PYTHON (python, Py_InitializeFromConfig, Py_InitializeFromConfig, PYINITIALIZEFROMCONFIG, PYTHON, 1); HC_LOAD_FUNC_PYTHON (python, PyEval_RestoreThread, PyEval_RestoreThread, PYEVAL_RESTORETHREAD, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, Py_CompileStringExFlags, Py_CompileStringExFlags, PY_COMPILESTRINGEXFLAGS, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyEval_EvalCode, PyEval_EvalCode, PYEVAL_EVALCODE, PYTHON, 1); + HC_LOAD_FUNC_PYTHON (python, PyEval_GetBuiltins, PyEval_GetBuiltins, PYEVAL_GETBUILTINS, PYTHON, 1); return true; } @@ -703,7 +774,7 @@ void *platform_init (user_options_t *user_options) python_interpreter->thread_state = python->PyEval_SaveThread (); - python_interpreter->source_filename = (user_options->bridge_parameter1) ? user_options->bridge_parameter1 : DEFAULT_SOURCE_FILENAME; + python_interpreter->source_filename = (user_options->bridge_parameter1 == NULL) ? DEFAULT_SOURCE_FILENAME : user_options->bridge_parameter1; if (units_init (python_interpreter) == false) { @@ -772,27 +843,37 @@ bool thread_init (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_pa python->Py_DecRef (path); python->Py_DecRef (sys); - PyObject *pName = python->PyUnicode_DecodeFSDefault (python_interpreter->source_filename); + char *source = load_source (python_interpreter->source_filename); - if (pName == NULL) + if (source == NULL) return NULL; + + PyObject *code = python->Py_CompileStringExFlags (source, python_interpreter->source_filename, Py_file_input, NULL, -1); + + free (source); + + if (code == NULL) { python->PyErr_Print (); return false; } - unit_buf->pModule = python->PyImport_Import (pName); + unit_buf->pGlobals = python->PyDict_New (); - if (unit_buf->pModule == NULL) + python->PyDict_SetItemString (unit_buf->pGlobals, "__builtins__", python->PyEval_GetBuiltins ()); + + PyObject *result = python->PyEval_EvalCode (code, unit_buf->pGlobals, unit_buf->pGlobals); + + if (result == NULL) { python->PyErr_Print (); return false; } - python->Py_DecRef (pName); + python->Py_DecRef (result); - unit_buf->pFunc_Init = python->PyObject_GetAttrString (unit_buf->pModule, "init"); + unit_buf->pFunc_Init = python->PyDict_GetItemString (unit_buf->pGlobals, "init"); if (unit_buf->pFunc_Init == NULL) { @@ -801,7 +882,7 @@ bool thread_init (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_pa return false; } - unit_buf->pFunc_Term = python->PyObject_GetAttrString (unit_buf->pModule, "term"); + unit_buf->pFunc_Term = python->PyDict_GetItemString (unit_buf->pGlobals, "term"); if (unit_buf->pFunc_Term == NULL) { @@ -810,7 +891,7 @@ bool thread_init (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_pa return false; } - unit_buf->pFunc_kernel_loop = python->PyObject_GetAttrString (unit_buf->pModule, "kernel_loop"); + unit_buf->pFunc_kernel_loop = python->PyDict_GetItemString (unit_buf->pGlobals, "kernel_loop"); if (unit_buf->pFunc_kernel_loop == NULL) { @@ -830,8 +911,13 @@ bool thread_init (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_pa return false; } + const char *module_name = extract_module_name (python_interpreter->source_filename); + int rc = 0; + + + rc |= python->PyDict_SetItemString (unit_buf->pContext, "module_name", python->PyUnicode_FromString ((const char *) module_name)); rc |= python->PyDict_SetItemString (unit_buf->pContext, "salts_cnt", python->PyLong_FromLong (hashes->salts_cnt)); rc |= python->PyDict_SetItemString (unit_buf->pContext, "salts_size", python->PyLong_FromLong (sizeof (salt_t))); rc |= python->PyDict_SetItemString (unit_buf->pContext, "salts_buf", python->PyBytes_FromStringAndSize ((const char *) hashes->salts_buf, sizeof (salt_t) * hashes->salts_cnt)); @@ -904,6 +990,7 @@ void thread_term (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_pa hc_python_lib_t *python = python_interpreter->python; + python->PyDict_DelItemString (unit_buf->pContext, "module_name"); python->PyDict_DelItemString (unit_buf->pContext, "salts_cnt"); python->PyDict_DelItemString (unit_buf->pContext, "salts_size"); python->PyDict_DelItemString (unit_buf->pContext, "salts_buf"); @@ -937,7 +1024,7 @@ void thread_term (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_pa python->Py_DecRef (unit_buf->pFunc_kernel_loop); python->Py_DecRef (unit_buf->pFunc_Term); python->Py_DecRef (unit_buf->pFunc_Init); - python->Py_DecRef (unit_buf->pModule); + python->Py_DecRef (unit_buf->pGlobals); python->Py_EndInterpreter (unit_buf->tstate); } @@ -1059,35 +1146,45 @@ const char *st_update_hash (MAYBE_UNUSED void *platform_context) python->PyEval_RestoreThread (python_interpreter->thread_state); + // this is ugly to load that entire thing just to get that one variable + PyObject *sys = python->PyImport_ImportModule ("sys"); PyObject *path = python->PyObject_GetAttrString (sys, "path"); python->PyList_Append (path, python->PyUnicode_FromString ("./Python")); python->Py_DecRef (path); python->Py_DecRef (sys); - PyObject *pName = python->PyUnicode_DecodeFSDefault (python_interpreter->source_filename); + char *source = load_source (python_interpreter->source_filename); - if (pName == NULL) + if (source == NULL) return NULL; + + PyObject *code = python->Py_CompileStringExFlags (source, python_interpreter->source_filename, Py_file_input, NULL, -1); + + free (source); + + if (code == NULL) { python->PyErr_Print (); - python_interpreter->thread_state = python->PyEval_SaveThread (); - return false; } - PyObject *pModule = python->PyImport_Import (pName); + PyObject *pGlobals = python->PyDict_New (); - if (pModule == NULL) + python->PyDict_SetItemString (pGlobals, "__builtins__", python->PyEval_GetBuiltins ()); + + PyObject *result = python->PyEval_EvalCode (code, pGlobals, pGlobals); + + if (result == NULL) { python->PyErr_Print (); - python_interpreter->thread_state = python->PyEval_SaveThread (); - return false; } - PyObject *constant = python->PyObject_GetAttrString (pModule, "ST_HASH"); + python->Py_DecRef (result); + + PyObject *constant = python->PyDict_GetItemString (pGlobals, "ST_HASH"); if (constant == NULL) { @@ -1119,29 +1216,39 @@ const char *st_update_pass (MAYBE_UNUSED void *platform_context) python->Py_DecRef (path); python->Py_DecRef (sys); - PyObject *pName = python->PyUnicode_DecodeFSDefault (python_interpreter->source_filename); + // this is ugly to load that entire thing just to get that one variable - if (pName == NULL) + char *source = load_source (python_interpreter->source_filename); + + if (source == NULL) return NULL; + + PyObject *code = python->Py_CompileStringExFlags (source, python_interpreter->source_filename, Py_file_input, NULL, -1); + + free (source); + + if (code == NULL) { python->PyErr_Print (); - python_interpreter->thread_state = python->PyEval_SaveThread (); - return false; } - PyObject *pModule = python->PyImport_Import (pName); + PyObject *pGlobals = python->PyDict_New (); - if (pModule == NULL) + python->PyDict_SetItemString (pGlobals, "__builtins__", python->PyEval_GetBuiltins ()); + + PyObject *result = python->PyEval_EvalCode (code, pGlobals, pGlobals); + + if (result == NULL) { python->PyErr_Print (); - python_interpreter->thread_state = python->PyEval_SaveThread (); - return false; } - PyObject *constant = python->PyObject_GetAttrString (pModule, "ST_PASS"); + python->Py_DecRef (result); + + PyObject *constant = python->PyDict_GetItemString (pGlobals, "ST_PASS"); if (constant == NULL) { From ce17d5271c97caed557b721092b6644bb6d8b264 Mon Sep 17 00:00:00 2001 From: Dhruv Date: Thu, 19 Jun 2025 12:29:57 +0100 Subject: [PATCH 80/95] Update usage.c Fix typo: change 'generatic' to 'generic' in usage.c --- src/usage.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/usage.c b/src/usage.c index 83794204e..e0d7c8253 100644 --- a/src/usage.c +++ b/src/usage.c @@ -94,10 +94,10 @@ static const char *const USAGE_BIG_PRE_HASHMODES[] = " -c, --segment-size | Num | Sets size in MB to cache from the wordfile to X | -c 32", " --bitmap-min | Num | Sets minimum bits allowed for bitmaps to X | --bitmap-min=24", " --bitmap-max | Num | Sets maximum bits allowed for bitmaps to X | --bitmap-max=24", - " --bridge-parameter1 | Str | Sets the generatic parameter 1 for a Bridge |", - " --bridge-parameter2 | Str | Sets the generatic parameter 2 for a Bridge |", - " --bridge-parameter3 | Str | Sets the generatic parameter 3 for a Bridge |", - " --bridge-parameter4 | Str | Sets the generatic parameter 4 for a Bridge |", + " --bridge-parameter1 | Str | Sets the generic parameter 1 for a Bridge |", + " --bridge-parameter2 | Str | Sets the generic parameter 2 for a Bridge |", + " --bridge-parameter3 | Str | Sets the generic parameter 3 for a Bridge |", + " --bridge-parameter4 | Str | Sets the generic parameter 4 for a Bridge |", " --cpu-affinity | Str | Locks to CPU devices, separated with commas | --cpu-affinity=1,2,3", " --hook-threads | Num | Sets number of threads for a hook (per compute unit) | --hook-threads=8", " --hash-info | | Show information for each hash-mode |", From 301dbe9bf367db7b6868aa41cdf662c71c7068e8 Mon Sep 17 00:00:00 2001 From: Dhruv Date: Fri, 20 Jun 2025 13:16:43 +0100 Subject: [PATCH 81/95] Update usage.c fix spaces --- src/usage.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/usage.c b/src/usage.c index e0d7c8253..01cb31bfe 100644 --- a/src/usage.c +++ b/src/usage.c @@ -94,10 +94,10 @@ static const char *const USAGE_BIG_PRE_HASHMODES[] = " -c, --segment-size | Num | Sets size in MB to cache from the wordfile to X | -c 32", " --bitmap-min | Num | Sets minimum bits allowed for bitmaps to X | --bitmap-min=24", " --bitmap-max | Num | Sets maximum bits allowed for bitmaps to X | --bitmap-max=24", - " --bridge-parameter1 | Str | Sets the generic parameter 1 for a Bridge |", - " --bridge-parameter2 | Str | Sets the generic parameter 2 for a Bridge |", - " --bridge-parameter3 | Str | Sets the generic parameter 3 for a Bridge |", - " --bridge-parameter4 | Str | Sets the generic parameter 4 for a Bridge |", + " --bridge-parameter1 | Str | Sets the generic parameter 1 for a Bridge |", + " --bridge-parameter2 | Str | Sets the generic parameter 2 for a Bridge |", + " --bridge-parameter3 | Str | Sets the generic parameter 3 for a Bridge |", + " --bridge-parameter4 | Str | Sets the generic parameter 4 for a Bridge |", " --cpu-affinity | Str | Locks to CPU devices, separated with commas | --cpu-affinity=1,2,3", " --hook-threads | Num | Sets number of threads for a hook (per compute unit) | --hook-threads=8", " --hash-info | | Show information for each hash-mode |", From b7c8fcf27c726cab00ec90143485a4cd4a169df4 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Sat, 21 Jun 2025 07:09:20 +0200 Subject: [PATCH 82/95] Removed shared-memory based optimization for SCRYPT on HIP, because the shared-memory buffer is incompatible with TMTO, which is limiting SCRYPT-R to a maximum of 8. This change also simplifies the code, allowing removal of large sections of duplicated code. Removed the section in scrypt_module_extra_tuningdb_block() that increased TMTO when there was insufficient shared memory, as this is no longer applicable. Refactored inc_hash_scrypt.cl almost completely and improved macro names in inc_hash_scrypt.h. Adapted all existing SCRYPT-based plugins to the new standard. If you have custom SCRYPT based plugins use hash-mode 8900 as reference. Fixed some compiler warnings in inc_platform.cl. Cleaned up code paths in inc_vendor.h for finding values for HC_ATTR_SEQ and DECLSPEC. Removed option --device-as-default-execution-space from nvrtc for hiprtc compatibility. As a result, added __device__ back to DECLSPEC. Removed option --restrict from nvrtc compile options since we actually alias some buffers. Added --gpu-max-threads-per-block to hiprtc options. Added -D MAX_THREADS_PER_BLOCK to OpenCL options (currently unused). Removed all OPTS_TYPE_MP_MULTI_DISABLE entries for SNMPv3-based plugins. These plugins consume large amounts of memory and for this reason,limited kernel_accel max to 256. This may still be high, but hashcat will automatically tune down kernel_accel if insufficient memory is detected. Removed command `rocm-smi --resetprofile --resetclocks --resetfans` from benchmark_deep.pl, since some AMD GPUs become artificially slow for a while after running these commands. Replaced load_source() with file_to_buffer() from shared.c, which does the exact same operations. Moved suppress_stderr() and restore_stderr() to shared.c and reused them in both Python bridges and opencl_test_instruction(), where the same type of code existed. --- OpenCL/inc_hash_scrypt.cl | 589 ++++++++------------ OpenCL/inc_hash_scrypt.h | 43 +- OpenCL/inc_platform.cl | 4 +- OpenCL/inc_vendor.h | 30 +- OpenCL/m08900-pure.cl | 75 +-- OpenCL/m15700-pure.cl | 75 +-- OpenCL/m22700-pure.cl | 95 ++-- OpenCL/m24000-pure.cl | 84 ++- OpenCL/m27700-pure.cl | 95 ++-- OpenCL/m28200-pure.cl | 83 ++- OpenCL/m29800-pure.cl | 95 ++-- include/shared.h | 3 + src/backend.c | 18 +- src/bridges/bridge_python_generic_hash_mp.c | 85 +-- src/bridges/bridge_python_generic_hash_sp.c | 87 +-- src/modules/module_25000.c | 25 +- src/modules/module_25100.c | 25 +- src/modules/module_25200.c | 25 +- src/modules/module_26700.c | 22 +- src/modules/module_26800.c | 22 +- src/modules/module_26900.c | 22 +- src/modules/module_27300.c | 22 +- src/modules/scrypt_common.c | 23 +- src/shared.c | 37 ++ tools/benchmark_deep.pl | 2 +- 25 files changed, 702 insertions(+), 984 deletions(-) diff --git a/OpenCL/inc_hash_scrypt.cl b/OpenCL/inc_hash_scrypt.cl index 05a3464de..f18f75250 100644 --- a/OpenCL/inc_hash_scrypt.cl +++ b/OpenCL/inc_hash_scrypt.cl @@ -9,441 +9,288 @@ #include "inc_common.h" #include "inc_hash_scrypt.h" -DECLSPEC void salsa_r_l (LOCAL_AS u32 *TI) +DECLSPEC void salsa_r (PRIVATE_AS u32 *TI) { - u32 x[16]; + u32 TT[STATE_CNT4/2]; // we actually nned 16 here for SALSA, but we reuse that buffer for blockmix - for (int j = 0; j < 16; j++) x[j] = TI[STATE_CNT - 16 + j]; + for (int j = 0; j < SALSA_CNT4; j++) TT[j] = TI[STATE_CNT4 - 16 + j]; - for (int i = 0; i < STATE_CNT; i += 16) + for (int i = 0; i < STATE_CNT4; i += SALSA_CNT4) { - for (int j = 0; j < 16; j++) - { - x[j] ^= TI[i + j]; - } + for (int j = 0; j < SALSA_CNT4; j++) TT[j] ^= TI[i + j]; - for (int j = 0; j < 16; j++) - { - TI[i + j] = x[j]; - } + for (int j = 0; j < SALSA_CNT4; j++) TI[i + j] = TT[j]; for (int r = 0; r < 4; r++) { u32 t0, t1, t2, t3; - t0 = x[ 0] + x[12]; - t1 = x[ 1] + x[13]; - t2 = x[ 2] + x[14]; - t3 = x[ 3] + x[15]; - x[ 4] ^= hc_rotl32_S (t0, 7); - x[ 5] ^= hc_rotl32_S (t1, 7); - x[ 6] ^= hc_rotl32_S (t2, 7); - x[ 7] ^= hc_rotl32_S (t3, 7); + t0 = TT[ 0] + TT[12]; + t1 = TT[ 1] + TT[13]; + t2 = TT[ 2] + TT[14]; + t3 = TT[ 3] + TT[15]; + TT[ 4] ^= hc_rotl32_S (t0, 7); + TT[ 5] ^= hc_rotl32_S (t1, 7); + TT[ 6] ^= hc_rotl32_S (t2, 7); + TT[ 7] ^= hc_rotl32_S (t3, 7); - t0 = x[ 4] + x[ 0]; - t1 = x[ 5] + x[ 1]; - t2 = x[ 6] + x[ 2]; - t3 = x[ 7] + x[ 3]; - x[ 8] ^= hc_rotl32_S (t0, 9); - x[ 9] ^= hc_rotl32_S (t1, 9); - x[10] ^= hc_rotl32_S (t2, 9); - x[11] ^= hc_rotl32_S (t3, 9); + t0 = TT[ 4] + TT[ 0]; + t1 = TT[ 5] + TT[ 1]; + t2 = TT[ 6] + TT[ 2]; + t3 = TT[ 7] + TT[ 3]; + TT[ 8] ^= hc_rotl32_S (t0, 9); + TT[ 9] ^= hc_rotl32_S (t1, 9); + TT[10] ^= hc_rotl32_S (t2, 9); + TT[11] ^= hc_rotl32_S (t3, 9); - t0 = x[ 8] + x[ 4]; - t1 = x[ 9] + x[ 5]; - t2 = x[10] + x[ 6]; - t3 = x[11] + x[ 7]; - x[12] ^= hc_rotl32_S (t0, 13); - x[13] ^= hc_rotl32_S (t1, 13); - x[14] ^= hc_rotl32_S (t2, 13); - x[15] ^= hc_rotl32_S (t3, 13); + t0 = TT[ 8] + TT[ 4]; + t1 = TT[ 9] + TT[ 5]; + t2 = TT[10] + TT[ 6]; + t3 = TT[11] + TT[ 7]; + TT[12] ^= hc_rotl32_S (t0, 13); + TT[13] ^= hc_rotl32_S (t1, 13); + TT[14] ^= hc_rotl32_S (t2, 13); + TT[15] ^= hc_rotl32_S (t3, 13); - t0 = x[12] + x[ 8]; - t1 = x[13] + x[ 9]; - t2 = x[14] + x[10]; - t3 = x[15] + x[11]; - x[ 0] ^= hc_rotl32_S (t0, 18); - x[ 1] ^= hc_rotl32_S (t1, 18); - x[ 2] ^= hc_rotl32_S (t2, 18); - x[ 3] ^= hc_rotl32_S (t3, 18); + t0 = TT[12] + TT[ 8]; + t1 = TT[13] + TT[ 9]; + t2 = TT[14] + TT[10]; + t3 = TT[15] + TT[11]; + TT[ 0] ^= hc_rotl32_S (t0, 18); + TT[ 1] ^= hc_rotl32_S (t1, 18); + TT[ 2] ^= hc_rotl32_S (t2, 18); + TT[ 3] ^= hc_rotl32_S (t3, 18); - t0 = x[ 4]; x[ 4] = x[ 7]; x[ 7] = x[ 6]; x[ 6] = x[ 5]; x[ 5] = t0; - t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; - t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; - t0 = x[12]; x[12] = x[13]; x[13] = x[14]; x[14] = x[15]; x[15] = t0; + t0 = TT[ 4]; TT[ 4] = TT[ 7]; TT[ 7] = TT[ 6]; TT[ 6] = TT[ 5]; TT[ 5] = t0; + t0 = TT[ 8]; TT[ 8] = TT[10]; TT[10] = t0; + t0 = TT[ 9]; TT[ 9] = TT[11]; TT[11] = t0; + t0 = TT[12]; TT[12] = TT[13]; TT[13] = TT[14]; TT[14] = TT[15]; TT[15] = t0; - t0 = x[ 0] + x[ 4]; - t1 = x[ 1] + x[ 5]; - t2 = x[ 2] + x[ 6]; - t3 = x[ 3] + x[ 7]; - x[12] ^= hc_rotl32_S (t0, 7); - x[13] ^= hc_rotl32_S (t1, 7); - x[14] ^= hc_rotl32_S (t2, 7); - x[15] ^= hc_rotl32_S (t3, 7); + t0 = TT[ 0] + TT[ 4]; + t1 = TT[ 1] + TT[ 5]; + t2 = TT[ 2] + TT[ 6]; + t3 = TT[ 3] + TT[ 7]; + TT[12] ^= hc_rotl32_S (t0, 7); + TT[13] ^= hc_rotl32_S (t1, 7); + TT[14] ^= hc_rotl32_S (t2, 7); + TT[15] ^= hc_rotl32_S (t3, 7); - t0 = x[12] + x[ 0]; - t1 = x[13] + x[ 1]; - t2 = x[14] + x[ 2]; - t3 = x[15] + x[ 3]; - x[ 8] ^= hc_rotl32_S (t0, 9); - x[ 9] ^= hc_rotl32_S (t1, 9); - x[10] ^= hc_rotl32_S (t2, 9); - x[11] ^= hc_rotl32_S (t3, 9); + t0 = TT[12] + TT[ 0]; + t1 = TT[13] + TT[ 1]; + t2 = TT[14] + TT[ 2]; + t3 = TT[15] + TT[ 3]; + TT[ 8] ^= hc_rotl32_S (t0, 9); + TT[ 9] ^= hc_rotl32_S (t1, 9); + TT[10] ^= hc_rotl32_S (t2, 9); + TT[11] ^= hc_rotl32_S (t3, 9); - t0 = x[ 8] + x[12]; - t1 = x[ 9] + x[13]; - t2 = x[10] + x[14]; - t3 = x[11] + x[15]; - x[ 4] ^= hc_rotl32_S (t0, 13); - x[ 5] ^= hc_rotl32_S (t1, 13); - x[ 6] ^= hc_rotl32_S (t2, 13); - x[ 7] ^= hc_rotl32_S (t3, 13); + t0 = TT[ 8] + TT[12]; + t1 = TT[ 9] + TT[13]; + t2 = TT[10] + TT[14]; + t3 = TT[11] + TT[15]; + TT[ 4] ^= hc_rotl32_S (t0, 13); + TT[ 5] ^= hc_rotl32_S (t1, 13); + TT[ 6] ^= hc_rotl32_S (t2, 13); + TT[ 7] ^= hc_rotl32_S (t3, 13); - t0 = x[ 4] + x[ 8]; - t1 = x[ 5] + x[ 9]; - t2 = x[ 6] + x[10]; - t3 = x[ 7] + x[11]; - x[ 0] ^= hc_rotl32_S (t0, 18); - x[ 1] ^= hc_rotl32_S (t1, 18); - x[ 2] ^= hc_rotl32_S (t2, 18); - x[ 3] ^= hc_rotl32_S (t3, 18); + t0 = TT[ 4] + TT[ 8]; + t1 = TT[ 5] + TT[ 9]; + t2 = TT[ 6] + TT[10]; + t3 = TT[ 7] + TT[11]; + TT[ 0] ^= hc_rotl32_S (t0, 18); + TT[ 1] ^= hc_rotl32_S (t1, 18); + TT[ 2] ^= hc_rotl32_S (t2, 18); + TT[ 3] ^= hc_rotl32_S (t3, 18); - t0 = x[ 4]; x[ 4] = x[ 5]; x[ 5] = x[ 6]; x[ 6] = x[ 7]; x[ 7] = t0; - t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; - t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; - t0 = x[15]; x[15] = x[14]; x[14] = x[13]; x[13] = x[12]; x[12] = t0; + t0 = TT[ 4]; TT[ 4] = TT[ 5]; TT[ 5] = TT[ 6]; TT[ 6] = TT[ 7]; TT[ 7] = t0; + t0 = TT[ 8]; TT[ 8] = TT[10]; TT[10] = t0; + t0 = TT[ 9]; TT[ 9] = TT[11]; TT[11] = t0; + t0 = TT[15]; TT[15] = TT[14]; TT[14] = TT[13]; TT[13] = TT[12]; TT[12] = t0; } - for (int j = 0; j < 16; j++) - { - x[j] += TI[i + j]; - } + for (int j = 0; j < SALSA_CNT4; j++) TT[j] += TI[i + j]; - for (int j = 0; j < 16; j++) - { - TI[i + j] = x[j]; - } + for (int j = 0; j < SALSA_CNT4; j++) TI[i + j] = TT[j]; } #if SCRYPT_R > 1 - u32 TT[STATE_CNT / 2]; - - for (int dst_off = 0, src_off = 16; src_off < STATE_CNT; dst_off += 16, src_off += 32) + for (int dst_off = 0, src_off = SALSA_CNT4; src_off < STATE_CNT4; dst_off += SALSA_CNT4, src_off += SALSA_CNT4 * 2) { - for (int j = 0; j < 16; j++) TT[dst_off + j] = TI[src_off + j]; + for (int j = 0; j < SALSA_CNT4; j++) TT[dst_off + j] = TI[src_off + j]; } - for (int dst_off = 16, src_off = 32; src_off < STATE_CNT; dst_off += 16, src_off += 32) + for (int dst_off = SALSA_CNT4, src_off = SALSA_CNT4 * 2; src_off < STATE_CNT4; dst_off += SALSA_CNT4, src_off += SALSA_CNT4 * 2) { - for (int j = 0; j < 16; j++) TI[dst_off + j] = TI[src_off + j]; + for (int j = 0; j < SALSA_CNT4; j++) TI[dst_off + j] = TI[src_off + j]; } - for (int dst_off = STATE_CNT / 2, src_off = 0; dst_off < STATE_CNT; dst_off += 16, src_off += 16) + for (int dst_off = STATE_CNT4 / 2, src_off = 0; dst_off < STATE_CNT4; dst_off += SALSA_CNT4, src_off += SALSA_CNT4) { - for (int j = 0; j < 16; j++) TI[dst_off + j] = TT[src_off + j]; + for (int j = 0; j < SALSA_CNT4; j++) TI[dst_off + j] = TT[src_off + j]; } #endif } -DECLSPEC void salsa_r_p (PRIVATE_AS u32 *TI) -{ - u32 x[16]; - - for (int j = 0; j < 16; j++) x[j] = TI[STATE_CNT - 16 + j]; - - for (int i = 0; i < STATE_CNT; i += 16) - { - for (int j = 0; j < 16; j++) - { - x[j] ^= TI[i + j]; - } - - for (int j = 0; j < 16; j++) - { - TI[i + j] = x[j]; - } - - for (int r = 0; r < 4; r++) - { - u32 t0, t1, t2, t3; - - t0 = x[ 0] + x[12]; - t1 = x[ 1] + x[13]; - t2 = x[ 2] + x[14]; - t3 = x[ 3] + x[15]; - x[ 4] ^= hc_rotl32_S (t0, 7); - x[ 5] ^= hc_rotl32_S (t1, 7); - x[ 6] ^= hc_rotl32_S (t2, 7); - x[ 7] ^= hc_rotl32_S (t3, 7); - - t0 = x[ 4] + x[ 0]; - t1 = x[ 5] + x[ 1]; - t2 = x[ 6] + x[ 2]; - t3 = x[ 7] + x[ 3]; - x[ 8] ^= hc_rotl32_S (t0, 9); - x[ 9] ^= hc_rotl32_S (t1, 9); - x[10] ^= hc_rotl32_S (t2, 9); - x[11] ^= hc_rotl32_S (t3, 9); - - t0 = x[ 8] + x[ 4]; - t1 = x[ 9] + x[ 5]; - t2 = x[10] + x[ 6]; - t3 = x[11] + x[ 7]; - x[12] ^= hc_rotl32_S (t0, 13); - x[13] ^= hc_rotl32_S (t1, 13); - x[14] ^= hc_rotl32_S (t2, 13); - x[15] ^= hc_rotl32_S (t3, 13); - - t0 = x[12] + x[ 8]; - t1 = x[13] + x[ 9]; - t2 = x[14] + x[10]; - t3 = x[15] + x[11]; - x[ 0] ^= hc_rotl32_S (t0, 18); - x[ 1] ^= hc_rotl32_S (t1, 18); - x[ 2] ^= hc_rotl32_S (t2, 18); - x[ 3] ^= hc_rotl32_S (t3, 18); - - t0 = x[ 4]; x[ 4] = x[ 7]; x[ 7] = x[ 6]; x[ 6] = x[ 5]; x[ 5] = t0; - t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; - t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; - t0 = x[12]; x[12] = x[13]; x[13] = x[14]; x[14] = x[15]; x[15] = t0; - - t0 = x[ 0] + x[ 4]; - t1 = x[ 1] + x[ 5]; - t2 = x[ 2] + x[ 6]; - t3 = x[ 3] + x[ 7]; - x[12] ^= hc_rotl32_S (t0, 7); - x[13] ^= hc_rotl32_S (t1, 7); - x[14] ^= hc_rotl32_S (t2, 7); - x[15] ^= hc_rotl32_S (t3, 7); - - t0 = x[12] + x[ 0]; - t1 = x[13] + x[ 1]; - t2 = x[14] + x[ 2]; - t3 = x[15] + x[ 3]; - x[ 8] ^= hc_rotl32_S (t0, 9); - x[ 9] ^= hc_rotl32_S (t1, 9); - x[10] ^= hc_rotl32_S (t2, 9); - x[11] ^= hc_rotl32_S (t3, 9); - - t0 = x[ 8] + x[12]; - t1 = x[ 9] + x[13]; - t2 = x[10] + x[14]; - t3 = x[11] + x[15]; - x[ 4] ^= hc_rotl32_S (t0, 13); - x[ 5] ^= hc_rotl32_S (t1, 13); - x[ 6] ^= hc_rotl32_S (t2, 13); - x[ 7] ^= hc_rotl32_S (t3, 13); - - t0 = x[ 4] + x[ 8]; - t1 = x[ 5] + x[ 9]; - t2 = x[ 6] + x[10]; - t3 = x[ 7] + x[11]; - x[ 0] ^= hc_rotl32_S (t0, 18); - x[ 1] ^= hc_rotl32_S (t1, 18); - x[ 2] ^= hc_rotl32_S (t2, 18); - x[ 3] ^= hc_rotl32_S (t3, 18); - - t0 = x[ 4]; x[ 4] = x[ 5]; x[ 5] = x[ 6]; x[ 6] = x[ 7]; x[ 7] = t0; - t0 = x[ 8]; x[ 8] = x[10]; x[10] = t0; - t0 = x[ 9]; x[ 9] = x[11]; x[11] = t0; - t0 = x[15]; x[15] = x[14]; x[14] = x[13]; x[13] = x[12]; x[12] = t0; - } - - for (int j = 0; j < 16; j++) - { - x[j] += TI[i + j]; - } - - for (int j = 0; j < 16; j++) - { - TI[i + j] = x[j]; - } - } - - #if SCRYPT_R > 1 - - u32 TT[STATE_CNT / 2]; - - for (int dst_off = 0, src_off = 16; src_off < STATE_CNT; dst_off += 16, src_off += 32) - { - for (int j = 0; j < 16; j++) TT[dst_off + j] = TI[src_off + j]; - } - - for (int dst_off = 16, src_off = 32; src_off < STATE_CNT; dst_off += 16, src_off += 32) - { - for (int j = 0; j < 16; j++) TI[dst_off + j] = TI[src_off + j]; - } - - for (int dst_off = STATE_CNT / 2, src_off = 0; dst_off < STATE_CNT; dst_off += 16, src_off += 16) - { - for (int j = 0; j < 16; j++) TI[dst_off + j] = TT[src_off + j]; - } - - #endif -} - -#ifdef IS_HIP -DECLSPEC void scrypt_smix_init (LOCAL_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid, const u64 lid, const u64 lsz, const u64 bid) -#else -DECLSPEC void scrypt_smix_init (PRIVATE_AS uint4 *X, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid, const u64 lid, const u64 lsz, const u64 bid) -#endif +DECLSPEC void scrypt_smix_init (PRIVATE_AS u32 *X, GLOBAL_AS void *V0, GLOBAL_AS void *V1, GLOBAL_AS void *V2, GLOBAL_AS void *V3, const u32 gid, const u32 lid, const u32 lsz, const u32 bid) { const u32 ySIZE = SCRYPT_N >> SCRYPT_TMTO; - const u32 zSIZE = STATE_CNT4; + const u32 zSIZE = STATE_CNT44; const u32 xd4 = bid / 4; const u32 xm4 = bid & 3; + PRIVATE_AS uint4 *X4 = (PRIVATE_AS uint4 *) X; + GLOBAL_AS uint4 *V; switch (xm4) { - case 0: V = V0; break; - case 1: V = V1; break; - case 2: V = V2; break; - case 3: V = V3; break; + case 0: V = (GLOBAL_AS uint4 *) V0; break; + case 1: V = (GLOBAL_AS uint4 *) V1; break; + case 2: V = (GLOBAL_AS uint4 *) V2; break; + case 3: V = (GLOBAL_AS uint4 *) V3; break; } for (u32 y = 0; y < ySIZE; y++) { - for (u32 z = 0; z < zSIZE; z++) V[VIDX(xd4, lsz, lid, ySIZE, zSIZE, y, z)] = X[z]; + for (u32 z = 0; z < zSIZE; z++) V[VIDX(xd4, lsz, lid, ySIZE, zSIZE, y, z)] = X4[z]; - #ifdef IS_HIP - for (u32 i = 0; i < (1 << SCRYPT_TMTO); i++) salsa_r_l ((LOCAL_AS u32 *) X); - #else - for (u32 i = 0; i < (1 << SCRYPT_TMTO); i++) salsa_r_p ((PRIVATE_AS u32 *) X); - #endif + for (u32 i = 0; i < (1 << SCRYPT_TMTO); i++) salsa_r (X); } } -#ifdef IS_HIP -DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, LOCAL_AS uint4 *T, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid, const u64 lid, const u64 lsz, const u64 bid) -#else -DECLSPEC void scrypt_smix_loop (PRIVATE_AS uint4 *X, PRIVATE_AS uint4 *T, GLOBAL_AS uint4 *V0, GLOBAL_AS uint4 *V1, GLOBAL_AS uint4 *V2, GLOBAL_AS uint4 *V3, const u64 gid, const u64 lid, const u64 lsz, const u64 bid) -#endif +DECLSPEC void scrypt_smix_loop (PRIVATE_AS u32 *X, PRIVATE_AS u32 *T, GLOBAL_AS void *V0, GLOBAL_AS void *V1, GLOBAL_AS void *V2, GLOBAL_AS void *V3, const u32 gid, const u32 lid, const u32 lsz, const u32 bid) { const u32 ySIZE = SCRYPT_N >> SCRYPT_TMTO; - const u32 zSIZE = STATE_CNT4; + const u32 zSIZE = STATE_CNT44; const u32 xd4 = bid / 4; const u32 xm4 = bid & 3; + PRIVATE_AS uint4 *X4 = (PRIVATE_AS uint4 *) X; + PRIVATE_AS uint4 *T4 = (PRIVATE_AS uint4 *) T; + GLOBAL_AS uint4 *V; switch (xm4) { - case 0: V = V0; break; - case 1: V = V1; break; - case 2: V = V2; break; - case 3: V = V3; break; + case 0: V = (GLOBAL_AS uint4 *) V0; break; + case 1: V = (GLOBAL_AS uint4 *) V1; break; + case 2: V = (GLOBAL_AS uint4 *) V2; break; + case 3: V = (GLOBAL_AS uint4 *) V3; break; } - // note: max 2048 iterations = forced -u 2048 + // note: max 1024 iterations = forced -u 2048 const u32 N_max = (SCRYPT_N < 2048) ? SCRYPT_N : 2048; for (u32 N_pos = 0; N_pos < N_max; N_pos++) { - const u32 k = X[zSIZE - 4].x & (SCRYPT_N - 1); + const u32 k = X4[zSIZE - 4].x & (SCRYPT_N - 1); const u32 y = k >> SCRYPT_TMTO; const u32 km = k - (y << SCRYPT_TMTO); - for (u32 z = 0; z < zSIZE; z++) T[z] = V[VIDX(xd4, lsz, lid, ySIZE, zSIZE, y, z)]; + for (u32 z = 0; z < zSIZE; z++) T4[z] = V[VIDX(xd4, lsz, lid, ySIZE, zSIZE, y, z)]; - #ifdef IS_HIP - for (u32 i = 0; i < km; i++) salsa_r_l ((LOCAL_AS u32 *) T); - #else - for (u32 i = 0; i < km; i++) salsa_r_p ((PRIVATE_AS u32 *) T); - #endif + for (u32 i = 0; i < km; i++) salsa_r (T); - for (u32 z = 0; z < zSIZE; z++) X[z] ^= T[z]; + for (u32 z = 0; z < zSIZE; z++) X4[z] = X4[z] ^ T4[z]; - salsa_r_p ((PRIVATE_AS u32 *) X); + salsa_r (X); } } -DECLSPEC void scrypt_blockmix_in (GLOBAL_AS uint4 *out_buf, const int out_len) +DECLSPEC void scrypt_blockmix_in (PRIVATE_AS u32 *out_buf, const int out_len) { - for (int i = 0, j = 0; i < out_len; i += 64, j += 4) + for (int i = 0, j = 0; i < out_len; i += SALSA_SZ, j += SALSA_CNT4) { - uint4 T[4]; + u32 X[SALSA_CNT4]; - T[0] = out_buf[j + 0]; - T[1] = out_buf[j + 1]; - T[2] = out_buf[j + 2]; - T[3] = out_buf[j + 3]; + X[ 0] = out_buf[j + 0]; + X[ 1] = out_buf[j + 5]; + X[ 2] = out_buf[j + 10]; + X[ 3] = out_buf[j + 15]; + X[ 4] = out_buf[j + 4]; + X[ 5] = out_buf[j + 9]; + X[ 6] = out_buf[j + 14]; + X[ 7] = out_buf[j + 3]; + X[ 8] = out_buf[j + 8]; + X[ 9] = out_buf[j + 13]; + X[10] = out_buf[j + 2]; + X[11] = out_buf[j + 7]; + X[12] = out_buf[j + 12]; + X[13] = out_buf[j + 1]; + X[14] = out_buf[j + 6]; + X[15] = out_buf[j + 11]; - uint4 X[4]; - - #if defined IS_CUDA || defined IS_HIP - X[0] = make_uint4 (T[0].x, T[1].y, T[2].z, T[3].w); - X[1] = make_uint4 (T[1].x, T[2].y, T[3].z, T[0].w); - X[2] = make_uint4 (T[2].x, T[3].y, T[0].z, T[1].w); - X[3] = make_uint4 (T[3].x, T[0].y, T[1].z, T[2].w); - #elif defined IS_METAL - X[0] = uint4 (T[0].x, T[1].y, T[2].z, T[3].w); - X[1] = uint4 (T[1].x, T[2].y, T[3].z, T[0].w); - X[2] = uint4 (T[2].x, T[3].y, T[0].z, T[1].w); - X[3] = uint4 (T[3].x, T[0].y, T[1].z, T[2].w); - #else - X[0] = (uint4) (T[0].x, T[1].y, T[2].z, T[3].w); - X[1] = (uint4) (T[1].x, T[2].y, T[3].z, T[0].w); - X[2] = (uint4) (T[2].x, T[3].y, T[0].z, T[1].w); - X[3] = (uint4) (T[3].x, T[0].y, T[1].z, T[2].w); - #endif - - out_buf[j + 0] = X[0]; - out_buf[j + 1] = X[1]; - out_buf[j + 2] = X[2]; - out_buf[j + 3] = X[3]; + out_buf[j + 0] = X[ 0]; + out_buf[j + 1] = X[ 1]; + out_buf[j + 2] = X[ 2]; + out_buf[j + 3] = X[ 3]; + out_buf[j + 4] = X[ 4]; + out_buf[j + 5] = X[ 5]; + out_buf[j + 6] = X[ 6]; + out_buf[j + 7] = X[ 7]; + out_buf[j + 8] = X[ 8]; + out_buf[j + 9] = X[ 9]; + out_buf[j + 10] = X[10]; + out_buf[j + 11] = X[11]; + out_buf[j + 12] = X[12]; + out_buf[j + 13] = X[13]; + out_buf[j + 14] = X[14]; + out_buf[j + 15] = X[15]; } } -DECLSPEC void scrypt_blockmix_out (GLOBAL_AS uint4 *out_buf, const int out_len) +DECLSPEC void scrypt_blockmix_out (PRIVATE_AS u32 *out_buf, const int out_len) { - for (int i = 0, j = 0; i < out_len; i += 64, j += 4) + for (int i = 0, j = 0; i < out_len; i += SALSA_SZ, j += SALSA_CNT4) { - uint4 X[4]; + u32 T[SALSA_CNT4]; - X[0] = out_buf[j + 0]; - X[1] = out_buf[j + 1]; - X[2] = out_buf[j + 2]; - X[3] = out_buf[j + 3]; + T[ 0] = out_buf[j + 0]; + T[ 1] = out_buf[j + 13]; + T[ 2] = out_buf[j + 10]; + T[ 3] = out_buf[j + 7]; + T[ 4] = out_buf[j + 4]; + T[ 5] = out_buf[j + 1]; + T[ 6] = out_buf[j + 14]; + T[ 7] = out_buf[j + 11]; + T[ 8] = out_buf[j + 8]; + T[ 9] = out_buf[j + 5]; + T[10] = out_buf[j + 2]; + T[11] = out_buf[j + 15]; + T[12] = out_buf[j + 12]; + T[13] = out_buf[j + 9]; + T[14] = out_buf[j + 6]; + T[15] = out_buf[j + 3]; - uint4 T[4]; - - #if defined IS_CUDA || defined IS_HIP - T[0] = make_uint4 (X[0].x, X[3].y, X[2].z, X[1].w); - T[1] = make_uint4 (X[1].x, X[0].y, X[3].z, X[2].w); - T[2] = make_uint4 (X[2].x, X[1].y, X[0].z, X[3].w); - T[3] = make_uint4 (X[3].x, X[2].y, X[1].z, X[0].w); - #elif defined IS_METAL - T[0] = uint4 (X[0].x, X[3].y, X[2].z, X[1].w); - T[1] = uint4 (X[1].x, X[0].y, X[3].z, X[2].w); - T[2] = uint4 (X[2].x, X[1].y, X[0].z, X[3].w); - T[3] = uint4 (X[3].x, X[2].y, X[1].z, X[0].w); - #else - T[0] = (uint4) (X[0].x, X[3].y, X[2].z, X[1].w); - T[1] = (uint4) (X[1].x, X[0].y, X[3].z, X[2].w); - T[2] = (uint4) (X[2].x, X[1].y, X[0].z, X[3].w); - T[3] = (uint4) (X[3].x, X[2].y, X[1].z, X[0].w); - #endif - - out_buf[j + 0] = T[0]; - out_buf[j + 1] = T[1]; - out_buf[j + 2] = T[2]; - out_buf[j + 3] = T[3]; + out_buf[j + 0] = T[ 0]; + out_buf[j + 1] = T[ 1]; + out_buf[j + 2] = T[ 2]; + out_buf[j + 3] = T[ 3]; + out_buf[j + 4] = T[ 4]; + out_buf[j + 5] = T[ 5]; + out_buf[j + 6] = T[ 6]; + out_buf[j + 7] = T[ 7]; + out_buf[j + 8] = T[ 8]; + out_buf[j + 9] = T[ 9]; + out_buf[j + 10] = T[10]; + out_buf[j + 11] = T[11]; + out_buf[j + 12] = T[12]; + out_buf[j + 13] = T[13]; + out_buf[j + 14] = T[14]; + out_buf[j + 15] = T[15]; } } -DECLSPEC void scrypt_pbkdf2_body (PRIVATE_AS sha256_hmac_ctx_t *sha256_hmac_ctx, GLOBAL_AS uint4 *out_buf, const int out_len) +DECLSPEC void scrypt_pbkdf2_body (PRIVATE_AS sha256_hmac_ctx_t *sha256_hmac_ctx, PRIVATE_AS u32 *out_buf, const int out_len) { - for (int i = 0, j = 1, k = 0; i < out_len; i += 32, j += 1, k += 2) + for (int i = 0, j = 1, k = 0; i < out_len; i += 32, j += 1, k += 8) { sha256_hmac_ctx_t sha256_hmac_ctx2 = *sha256_hmac_ctx; @@ -473,34 +320,56 @@ DECLSPEC void scrypt_pbkdf2_body (PRIVATE_AS sha256_hmac_ctx_t *sha256_hmac_ctx, sha256_hmac_final (&sha256_hmac_ctx2); - u32 digest[8]; + // this will not work if user specifies output length not a multiple of 4 + // probably never happens... + // let's hope the compiler will auto optimize this since out_len is very likely + // a constant at caller level - digest[0] = hc_swap32_S (sha256_hmac_ctx2.opad.h[0]); - digest[1] = hc_swap32_S (sha256_hmac_ctx2.opad.h[1]); - digest[2] = hc_swap32_S (sha256_hmac_ctx2.opad.h[2]); - digest[3] = hc_swap32_S (sha256_hmac_ctx2.opad.h[3]); - digest[4] = hc_swap32_S (sha256_hmac_ctx2.opad.h[4]); - digest[5] = hc_swap32_S (sha256_hmac_ctx2.opad.h[5]); - digest[6] = hc_swap32_S (sha256_hmac_ctx2.opad.h[6]); - digest[7] = hc_swap32_S (sha256_hmac_ctx2.opad.h[7]); - - #if defined IS_CUDA || defined IS_HIP - const uint4 tmp0 = make_uint4 (digest[0], digest[1], digest[2], digest[3]); - const uint4 tmp1 = make_uint4 (digest[4], digest[5], digest[6], digest[7]); - #elif defined IS_METAL - const uint4 tmp0 = uint4 (digest[0], digest[1], digest[2], digest[3]); - const uint4 tmp1 = uint4 (digest[4], digest[5], digest[6], digest[7]); - #else - const uint4 tmp0 = (uint4) (digest[0], digest[1], digest[2], digest[3]); - const uint4 tmp1 = (uint4) (digest[4], digest[5], digest[6], digest[7]); - #endif - - out_buf[k + 0] = tmp0; - out_buf[k + 1] = tmp1; + if (out_len >= (i + 4)) out_buf[k + 0] = hc_swap32_S (sha256_hmac_ctx2.opad.h[0]); + if (out_len >= (i + 8)) out_buf[k + 1] = hc_swap32_S (sha256_hmac_ctx2.opad.h[1]); + if (out_len >= (i + 12)) out_buf[k + 2] = hc_swap32_S (sha256_hmac_ctx2.opad.h[2]); + if (out_len >= (i + 16)) out_buf[k + 3] = hc_swap32_S (sha256_hmac_ctx2.opad.h[3]); + if (out_len >= (i + 20)) out_buf[k + 4] = hc_swap32_S (sha256_hmac_ctx2.opad.h[4]); + if (out_len >= (i + 24)) out_buf[k + 5] = hc_swap32_S (sha256_hmac_ctx2.opad.h[5]); + if (out_len >= (i + 28)) out_buf[k + 6] = hc_swap32_S (sha256_hmac_ctx2.opad.h[6]); + if (out_len >= (i + 32)) out_buf[k + 7] = hc_swap32_S (sha256_hmac_ctx2.opad.h[7]); } } -DECLSPEC void scrypt_pbkdf2 (GLOBAL_AS const u32 *pw_buf, const int pw_len, GLOBAL_AS const u32 *salt_buf, const int salt_len, GLOBAL_AS uint4 *out_buf, const int out_len) +DECLSPEC void scrypt_pbkdf2_pp (PRIVATE_AS const u32 *pw_buf, const int pw_len, PRIVATE_AS const u32 *salt_buf, const int salt_len, PRIVATE_AS u32 *out_buf, const int out_len) +{ + sha256_hmac_ctx_t sha256_hmac_ctx; + + sha256_hmac_init_swap (&sha256_hmac_ctx, pw_buf, pw_len); + + sha256_hmac_update_swap (&sha256_hmac_ctx, salt_buf, salt_len); + + scrypt_pbkdf2_body (&sha256_hmac_ctx, out_buf, out_len); +} + +DECLSPEC void scrypt_pbkdf2_pg (PRIVATE_AS const u32 *pw_buf, const int pw_len, GLOBAL_AS const u32 *salt_buf, const int salt_len, PRIVATE_AS u32 *out_buf, const int out_len) +{ + sha256_hmac_ctx_t sha256_hmac_ctx; + + sha256_hmac_init_swap (&sha256_hmac_ctx, pw_buf, pw_len); + + sha256_hmac_update_global_swap (&sha256_hmac_ctx, salt_buf, salt_len); + + scrypt_pbkdf2_body (&sha256_hmac_ctx, out_buf, out_len); +} + +DECLSPEC void scrypt_pbkdf2_gp (GLOBAL_AS const u32 *pw_buf, const int pw_len, PRIVATE_AS const u32 *salt_buf, const int salt_len, PRIVATE_AS u32 *out_buf, const int out_len) +{ + sha256_hmac_ctx_t sha256_hmac_ctx; + + sha256_hmac_init_global_swap (&sha256_hmac_ctx, pw_buf, pw_len); + + sha256_hmac_update_swap (&sha256_hmac_ctx, salt_buf, salt_len); + + scrypt_pbkdf2_body (&sha256_hmac_ctx, out_buf, out_len); +} + +DECLSPEC void scrypt_pbkdf2_gg (GLOBAL_AS const u32 *pw_buf, const int pw_len, GLOBAL_AS const u32 *salt_buf, const int salt_len, PRIVATE_AS u32 *out_buf, const int out_len) { sha256_hmac_ctx_t sha256_hmac_ctx; diff --git a/OpenCL/inc_hash_scrypt.h b/OpenCL/inc_hash_scrypt.h index 6f3864cdd..9945c79a5 100644 --- a/OpenCL/inc_hash_scrypt.h +++ b/OpenCL/inc_hash_scrypt.h @@ -6,39 +6,40 @@ #ifndef INC_HASH_SCRYPT_H #define INC_HASH_SCRYPT_H -#define GET_SCRYPT_CNT(r,p) (2 * (r) * 16 * (p)) -#define GET_SMIX_CNT(r,N) (2 * (r) * 16 * (N)) -#define GET_STATE_CNT(r) (2 * (r) * 16) +#define GET_SCRYPT_SZ(r,p) (128 * (r) * (p)) +#define GET_STATE_SZ(r) (128 * (r)) -#define SCRYPT_CNT GET_SCRYPT_CNT (SCRYPT_R, SCRYPT_P) -#define SCRYPT_CNT4 (SCRYPT_CNT / 4) -#define STATE_CNT GET_STATE_CNT (SCRYPT_R) -#define STATE_CNT4 (STATE_CNT / 4) +// _SZ is true sizes as bytes +#define SCRYPT_SZ GET_SCRYPT_SZ (SCRYPT_R, SCRYPT_P) +#define STATE_SZ GET_STATE_SZ (SCRYPT_R) + +// _CNT is size as whatever /X datatype +#define SCRYPT_CNT4 (SCRYPT_SZ / 4) +#define STATE_CNT4 (STATE_SZ / 4) + +// this would be uint4, feels more natural than 16 +#define SCRYPT_CNT44 ((SCRYPT_SZ / 4) / 4) +#define STATE_CNT44 ((STATE_SZ / 4) / 4) + +#define SALSA_SZ 64 +#define SALSA_CNT4 (SALSA_SZ / 4) #define VIDX(bid4,lsz,lid,ySIZE,zSIZE,y,z) (((bid4) * (lsz) * (ySIZE) * (zSIZE)) + ((lid) * (ySIZE) * (zSIZE)) + ((y) * (zSIZE)) + (z)) #if defined IS_CUDA -inline __device__ uint4 operator & (const uint4 a, const u32 b) { return make_uint4 ((a.x & b ), (a.y & b ), (a.z & b ), (a.w & b )); } -inline __device__ uint4 operator << (const uint4 a, const u32 b) { return make_uint4 ((a.x << b ), (a.y << b ), (a.z << b ), (a.w << b )); } -inline __device__ uint4 operator >> (const uint4 a, const u32 b) { return make_uint4 ((a.x >> b ), (a.y >> b ), (a.z >> b ), (a.w >> b )); } -inline __device__ uint4 operator + (const uint4 a, const uint4 b) { return make_uint4 ((a.x + b.x), (a.y + b.y), (a.z + b.z), (a.w + b.w)); } -inline __device__ uint4 operator ^ (const uint4 a, const uint4 b) { return make_uint4 ((a.x ^ b.x), (a.y ^ b.y), (a.z ^ b.z), (a.w ^ b.w)); } -inline __device__ uint4 operator | (const uint4 a, const uint4 b) { return make_uint4 ((a.x | b.x), (a.y | b.y), (a.z | b.z), (a.w | b.w)); } -inline __device__ void operator ^= ( uint4 &a, const uint4 b) { a.x ^= b.x; a.y ^= b.y; a.z ^= b.z; a.w ^= b.w; } -#endif -#if defined IS_CUDA || defined IS_HIP -inline __device__ uint4 rotate (const uint4 a, const int n) +DECLSPEC uint4 operator ^ (const uint4 a, const uint4 b) { uint4 r; - r.x = hc_rotl32_S (r.x, n); - r.y = hc_rotl32_S (r.y, n); - r.z = hc_rotl32_S (r.z, n); - r.w = hc_rotl32_S (r.w, n); + r.x = a.x ^ b.x; + r.y = a.y ^ b.y; + r.z = a.z ^ b.z; + r.w = a.w ^ b.w; return r; } + #endif #endif diff --git a/OpenCL/inc_platform.cl b/OpenCL/inc_platform.cl index 1125236dd..c04575066 100644 --- a/OpenCL/inc_platform.cl +++ b/OpenCL/inc_platform.cl @@ -131,7 +131,7 @@ DECLSPEC u32x rotl32 (const u32x a, const int n) return __funnelshift_l(a, a, n); #endif - u32x t; + u32x t = 0; #if VECT_SIZE >= 2 t.s0 = __funnelshift_l(a.s0, a.s0, n); @@ -171,7 +171,7 @@ DECLSPEC u32x rotr32 (const u32x a, const int n) return __funnelshift_r(a, a, n); #endif - u32x t; + u32x t = 0; #if VECT_SIZE >= 2 t.s0 = __funnelshift_r(a.s0, a.s0, n); diff --git a/OpenCL/inc_vendor.h b/OpenCL/inc_vendor.h index 38afefebe..5d269beec 100644 --- a/OpenCL/inc_vendor.h +++ b/OpenCL/inc_vendor.h @@ -148,30 +148,20 @@ using namespace metal; #define HC_INLINE inline static #endif +#if defined IS_AMD && defined IS_GPU +#define DECLSPEC HC_INLINE +#elif defined IS_CUDA +#define DECLSPEC __device__ +#elif defined IS_HIP +#define DECLSPEC __device__ +#else +#define DECLSPEC +#endif + #if defined FIXED_LOCAL_SIZE #define HC_ATTR_SEQ FIXED_THREAD_COUNT((FIXED_LOCAL_SIZE)) #else -#if defined IS_AMD && defined IS_GPU #define HC_ATTR_SEQ -#define DECLSPEC HC_INLINE -#elif defined IS_HIP -#define HC_ATTR_SEQ __launch_bounds__((MAX_THREADS_PER_BLOCK), 0) -#define DECLSPEC __device__ HC_INLINE -#elif defined IS_CUDA -#define HC_ATTR_SEQ -#define DECLSPEC -#else -#define HC_ATTR_SEQ -#define DECLSPEC -#endif -#endif - -#if defined IS_AMD && defined IS_GPU -#define DECLSPEC HC_INLINE -#elif defined IS_HIP -#define DECLSPEC __device__ HC_INLINE -#else -#define DECLSPEC #endif /** diff --git a/OpenCL/m08900-pure.cl b/OpenCL/m08900-pure.cl index 2cd5e1729..bc2730be9 100644 --- a/OpenCL/m08900-pure.cl +++ b/OpenCL/m08900-pure.cl @@ -21,7 +21,7 @@ typedef struct #define SCRYPT_TMP_ELEM 1 #endif - uint4 P[SCRYPT_TMP_ELEM]; + u32 P[SCRYPT_TMP_ELEM]; } scrypt_tmp_t; @@ -31,9 +31,13 @@ KERNEL_FQ void HC_ATTR_SEQ m08900_init (KERN_ATTR_TMPS (scrypt_tmp_t)) if (gid >= GID_CNT) return; - scrypt_pbkdf2 (pws[gid].i, pws[gid].pw_len, salt_bufs[SALT_POS_HOST].salt_buf, salt_bufs[SALT_POS_HOST].salt_len, tmps[gid].P, SCRYPT_CNT * 4); + u32 out[SCRYPT_CNT4]; - scrypt_blockmix_in (tmps[gid].P, SCRYPT_CNT * 4); + scrypt_pbkdf2_gg (pws[gid].i, pws[gid].pw_len, salt_bufs[SALT_POS_HOST].salt_buf, salt_bufs[SALT_POS_HOST].salt_len, out, SCRYPT_SZ); + + scrypt_blockmix_in (out, SCRYPT_SZ); + + for (u32 i = 0; i < SCRYPT_CNT4; i++) tmps[gid].P[i] = out[i]; } KERNEL_FQ void HC_ATTR_SEQ m08900_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) @@ -45,27 +49,15 @@ KERNEL_FQ void HC_ATTR_SEQ m08900_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) if (gid >= GID_CNT) return; - GLOBAL_AS uint4 *d_scrypt0_buf = (GLOBAL_AS uint4 *) d_extra0_buf; - GLOBAL_AS uint4 *d_scrypt1_buf = (GLOBAL_AS uint4 *) d_extra1_buf; - GLOBAL_AS uint4 *d_scrypt2_buf = (GLOBAL_AS uint4 *) d_extra2_buf; - GLOBAL_AS uint4 *d_scrypt3_buf = (GLOBAL_AS uint4 *) d_extra3_buf; + u32 X[STATE_CNT4]; - #ifdef IS_HIP - LOCAL_VK uint4 X_s[MAX_THREADS_PER_BLOCK][STATE_CNT4]; - LOCAL_AS uint4 *X = X_s[lid]; - #else - uint4 X[STATE_CNT4]; - #endif + GLOBAL_AS u32 *P = tmps[gid].P + (SALT_REPEAT * STATE_CNT4); - const u32 P_offset = SALT_REPEAT * STATE_CNT4; + for (u32 z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - GLOBAL_AS uint4 *P = tmps[gid].P + P_offset; + scrypt_smix_init (X, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); - for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - - scrypt_smix_init (X, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid, lid, lsz, bid); - - for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; + for (u32 z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } KERNEL_FQ void HC_ATTR_SEQ m08900_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) @@ -77,29 +69,16 @@ KERNEL_FQ void HC_ATTR_SEQ m08900_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) if (gid >= GID_CNT) return; - GLOBAL_AS uint4 *d_scrypt0_buf = (GLOBAL_AS uint4 *) d_extra0_buf; - GLOBAL_AS uint4 *d_scrypt1_buf = (GLOBAL_AS uint4 *) d_extra1_buf; - GLOBAL_AS uint4 *d_scrypt2_buf = (GLOBAL_AS uint4 *) d_extra2_buf; - GLOBAL_AS uint4 *d_scrypt3_buf = (GLOBAL_AS uint4 *) d_extra3_buf; + u32 X[STATE_CNT4]; + u32 T[STATE_CNT4]; - uint4 X[STATE_CNT4]; + GLOBAL_AS u32 *P = tmps[gid].P + (SALT_REPEAT * STATE_CNT4); - #ifdef IS_HIP - LOCAL_VK uint4 T_s[MAX_THREADS_PER_BLOCK][STATE_CNT4]; - LOCAL_AS uint4 *T = T_s[lid]; - #else - uint4 T[STATE_CNT4]; - #endif + for (u32 z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - const u32 P_offset = SALT_REPEAT * STATE_CNT4; + scrypt_smix_loop (X, T, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); - GLOBAL_AS uint4 *P = tmps[gid].P + P_offset; - - for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - - scrypt_smix_loop (X, T, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid, lid, lsz, bid); - - for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; + for (u32 z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } KERNEL_FQ void HC_ATTR_SEQ m08900_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) @@ -108,14 +87,20 @@ KERNEL_FQ void HC_ATTR_SEQ m08900_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) if (gid >= GID_CNT) return; - scrypt_blockmix_out (tmps[gid].P, SCRYPT_CNT * 4); + u32 x[SCRYPT_CNT4]; - scrypt_pbkdf2 (pws[gid].i, pws[gid].pw_len, (GLOBAL_AS const u32 *) tmps[gid].P, SCRYPT_CNT * 4, tmps[gid].P, 16); + for (u32 i = 0; i < SCRYPT_CNT4; i++) x[i] = tmps[gid].P[i]; - const u32 r0 = tmps[gid].P[0].x; - const u32 r1 = tmps[gid].P[0].y; - const u32 r2 = tmps[gid].P[0].z; - const u32 r3 = tmps[gid].P[0].w; + scrypt_blockmix_out (x, SCRYPT_SZ); + + u32 out[4]; + + scrypt_pbkdf2_gp (pws[gid].i, pws[gid].pw_len, x, SCRYPT_SZ, out, 16); + + const u32 r0 = out[0]; + const u32 r1 = out[1]; + const u32 r2 = out[2]; + const u32 r3 = out[3]; #define il_pos 0 diff --git a/OpenCL/m15700-pure.cl b/OpenCL/m15700-pure.cl index aa7e497ee..99e3bd78f 100644 --- a/OpenCL/m15700-pure.cl +++ b/OpenCL/m15700-pure.cl @@ -21,7 +21,7 @@ typedef struct #define SCRYPT_TMP_ELEM 1 #endif - uint4 P[SCRYPT_TMP_ELEM]; + u32 P[SCRYPT_TMP_ELEM]; } scrypt_tmp_t; @@ -167,9 +167,13 @@ KERNEL_FQ void HC_ATTR_SEQ m15700_init (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, ethe if (gid >= GID_CNT) return; - scrypt_pbkdf2 (pws[gid].i, pws[gid].pw_len, salt_bufs[SALT_POS_HOST].salt_buf, salt_bufs[SALT_POS_HOST].salt_len, tmps[gid].P, SCRYPT_CNT * 4); + u32 out[SCRYPT_CNT4]; - scrypt_blockmix_in (tmps[gid].P, SCRYPT_CNT * 4); + scrypt_pbkdf2_gg (pws[gid].i, pws[gid].pw_len, salt_bufs[SALT_POS_HOST].salt_buf, salt_bufs[SALT_POS_HOST].salt_len, out, SCRYPT_SZ); + + scrypt_blockmix_in (out, SCRYPT_SZ); + + for (u32 i = 0; i < SCRYPT_CNT4; i++) tmps[gid].P[i] = out[i]; } KERNEL_FQ void HC_ATTR_SEQ m15700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) @@ -181,27 +185,15 @@ KERNEL_FQ void HC_ATTR_SEQ m15700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) if (gid >= GID_CNT) return; - GLOBAL_AS uint4 *d_scrypt0_buf = (GLOBAL_AS uint4 *) d_extra0_buf; - GLOBAL_AS uint4 *d_scrypt1_buf = (GLOBAL_AS uint4 *) d_extra1_buf; - GLOBAL_AS uint4 *d_scrypt2_buf = (GLOBAL_AS uint4 *) d_extra2_buf; - GLOBAL_AS uint4 *d_scrypt3_buf = (GLOBAL_AS uint4 *) d_extra3_buf; + u32 X[STATE_CNT4]; - #ifdef IS_HIP - LOCAL_VK uint4 X_s[MAX_THREADS_PER_BLOCK][STATE_CNT4]; - LOCAL_AS uint4 *X = X_s[lid]; - #else - uint4 X[STATE_CNT4]; - #endif + GLOBAL_AS u32 *P = tmps[gid].P + (SALT_REPEAT * STATE_CNT4); - const u32 P_offset = SALT_REPEAT * STATE_CNT4; + for (u32 z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - GLOBAL_AS uint4 *P = tmps[gid].P + P_offset; + scrypt_smix_init (X, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); - for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - - scrypt_smix_init (X, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid, lid, lsz, bid); - - for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; + for (u32 z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } KERNEL_FQ void HC_ATTR_SEQ m15700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) @@ -213,29 +205,16 @@ KERNEL_FQ void HC_ATTR_SEQ m15700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) if (gid >= GID_CNT) return; - GLOBAL_AS uint4 *d_scrypt0_buf = (GLOBAL_AS uint4 *) d_extra0_buf; - GLOBAL_AS uint4 *d_scrypt1_buf = (GLOBAL_AS uint4 *) d_extra1_buf; - GLOBAL_AS uint4 *d_scrypt2_buf = (GLOBAL_AS uint4 *) d_extra2_buf; - GLOBAL_AS uint4 *d_scrypt3_buf = (GLOBAL_AS uint4 *) d_extra3_buf; + u32 X[STATE_CNT4]; + u32 T[STATE_CNT4]; - uint4 X[STATE_CNT4]; + GLOBAL_AS u32 *P = tmps[gid].P + (SALT_REPEAT * STATE_CNT4); - #ifdef IS_HIP - LOCAL_VK uint4 T_s[MAX_THREADS_PER_BLOCK][STATE_CNT4]; - LOCAL_AS uint4 *T = T_s[lid]; - #else - uint4 T[STATE_CNT4]; - #endif + for (u32 z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - const u32 P_offset = SALT_REPEAT * STATE_CNT4; + scrypt_smix_loop (X, T, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); - GLOBAL_AS uint4 *P = tmps[gid].P + P_offset; - - for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - - scrypt_smix_loop (X, T, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid, lid, lsz, bid); - - for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; + for (u32 z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } KERNEL_FQ void HC_ATTR_SEQ m15700_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, ethereum_scrypt_t)) @@ -244,9 +223,15 @@ KERNEL_FQ void HC_ATTR_SEQ m15700_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, ethe if (gid >= GID_CNT) return; - scrypt_blockmix_out (tmps[gid].P, SCRYPT_CNT * 4); + u32 x[SCRYPT_CNT4]; - scrypt_pbkdf2 (pws[gid].i, pws[gid].pw_len, (GLOBAL_AS const u32 *) tmps[gid].P, SCRYPT_CNT * 4, tmps[gid].P, 32); + for (u32 i = 0; i < SCRYPT_CNT4; i++) x[i] = tmps[gid].P[i]; + + scrypt_blockmix_out (x, SCRYPT_SZ); + + u32 out[8]; + + scrypt_pbkdf2_gp (pws[gid].i, pws[gid].pw_len, x, SCRYPT_SZ, out, 32); /** * keccak @@ -265,10 +250,10 @@ KERNEL_FQ void HC_ATTR_SEQ m15700_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, ethe u32 key[4]; - key[0] = tmps[gid].P[1].x; - key[1] = tmps[gid].P[1].y; - key[2] = tmps[gid].P[1].z; - key[3] = tmps[gid].P[1].w; + key[0] = out[4]; + key[1] = out[5]; + key[2] = out[6]; + key[3] = out[7]; u64 st[25]; diff --git a/OpenCL/m22700-pure.cl b/OpenCL/m22700-pure.cl index be6c18cb9..e9873a21f 100644 --- a/OpenCL/m22700-pure.cl +++ b/OpenCL/m22700-pure.cl @@ -22,7 +22,7 @@ typedef struct #define SCRYPT_TMP_ELEM 1 #endif - uint4 P[SCRYPT_TMP_ELEM]; + u32 P[SCRYPT_TMP_ELEM]; } scrypt_tmp_t; @@ -96,23 +96,18 @@ KERNEL_FQ void HC_ATTR_SEQ m22700_init (KERN_ATTR_TMPS (scrypt_tmp_t)) | ((w[j] << 8) & 0xff00ff00); } - sha256_hmac_ctx_t sha256_hmac_ctx; + u32 s[16] = { 0 }; - sha256_hmac_init_swap (&sha256_hmac_ctx, w, w_len); + s[0] = hc_swap32_S (MULTIBIT_S0); + s[1] = hc_swap32_S (MULTIBIT_S1); - u32 x0[4] = { 0 }; - u32 x1[4] = { 0 }; - u32 x2[4] = { 0 }; - u32 x3[4] = { 0 }; + u32 out[SCRYPT_CNT4]; - x0[0] = MULTIBIT_S0; - x0[1] = MULTIBIT_S1; + scrypt_pbkdf2_pp (w, w_len, s, 8, out, SCRYPT_SZ); - sha256_hmac_update_64 (&sha256_hmac_ctx, x0, x1, x2, x3, 8); + scrypt_blockmix_in (out, SCRYPT_SZ); - scrypt_pbkdf2_body (&sha256_hmac_ctx, tmps[gid].P, SCRYPT_CNT * 4); - - scrypt_blockmix_in (tmps[gid].P, SCRYPT_CNT * 4); + for (u32 i = 0; i < SCRYPT_CNT4; i++) tmps[gid].P[i] = out[i]; } KERNEL_FQ void HC_ATTR_SEQ m22700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) @@ -124,27 +119,15 @@ KERNEL_FQ void HC_ATTR_SEQ m22700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) if (gid >= GID_CNT) return; - GLOBAL_AS uint4 *d_scrypt0_buf = (GLOBAL_AS uint4 *) d_extra0_buf; - GLOBAL_AS uint4 *d_scrypt1_buf = (GLOBAL_AS uint4 *) d_extra1_buf; - GLOBAL_AS uint4 *d_scrypt2_buf = (GLOBAL_AS uint4 *) d_extra2_buf; - GLOBAL_AS uint4 *d_scrypt3_buf = (GLOBAL_AS uint4 *) d_extra3_buf; + u32 X[STATE_CNT4]; - #ifdef IS_HIP - LOCAL_VK uint4 X_s[MAX_THREADS_PER_BLOCK][STATE_CNT4]; - LOCAL_AS uint4 *X = X_s[lid]; - #else - uint4 X[STATE_CNT4]; - #endif + GLOBAL_AS u32 *P = tmps[gid].P + (SALT_REPEAT * STATE_CNT4); - const u32 P_offset = SALT_REPEAT * STATE_CNT4; + for (u32 z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - GLOBAL_AS uint4 *P = tmps[gid].P + P_offset; + scrypt_smix_init (X, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); - for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - - scrypt_smix_init (X, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid, lid, lsz, bid); - - for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; + for (u32 z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } KERNEL_FQ void HC_ATTR_SEQ m22700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) @@ -156,29 +139,16 @@ KERNEL_FQ void HC_ATTR_SEQ m22700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) if (gid >= GID_CNT) return; - GLOBAL_AS uint4 *d_scrypt0_buf = (GLOBAL_AS uint4 *) d_extra0_buf; - GLOBAL_AS uint4 *d_scrypt1_buf = (GLOBAL_AS uint4 *) d_extra1_buf; - GLOBAL_AS uint4 *d_scrypt2_buf = (GLOBAL_AS uint4 *) d_extra2_buf; - GLOBAL_AS uint4 *d_scrypt3_buf = (GLOBAL_AS uint4 *) d_extra3_buf; + u32 X[STATE_CNT4]; + u32 T[STATE_CNT4]; - uint4 X[STATE_CNT4]; + GLOBAL_AS u32 *P = tmps[gid].P + (SALT_REPEAT * STATE_CNT4); - #ifdef IS_HIP - LOCAL_VK uint4 T_s[MAX_THREADS_PER_BLOCK][STATE_CNT4]; - LOCAL_AS uint4 *T = T_s[lid]; - #else - uint4 T[STATE_CNT4]; - #endif + for (u32 z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - const u32 P_offset = SALT_REPEAT * STATE_CNT4; + scrypt_smix_loop (X, T, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); - GLOBAL_AS uint4 *P = tmps[gid].P + P_offset; - - for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - - scrypt_smix_loop (X, T, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid, lid, lsz, bid); - - for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; + for (u32 z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } KERNEL_FQ void HC_ATTR_SEQ m22700_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) @@ -261,28 +231,29 @@ KERNEL_FQ void HC_ATTR_SEQ m22700_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) | ((w[j] << 8) & 0xff00ff00); } - scrypt_blockmix_out (tmps[gid].P, SCRYPT_CNT * 4); - sha256_hmac_ctx_t ctx; + u32 x[SCRYPT_CNT4]; - sha256_hmac_init_swap (&ctx, w, w_len); + for (u32 i = 0; i < SCRYPT_CNT4; i++) x[i] = tmps[gid].P[i]; - sha256_hmac_update_global_swap (&ctx, (GLOBAL_AS const u32 *) tmps[gid].P, SCRYPT_CNT * 4); + scrypt_blockmix_out (x, SCRYPT_SZ); - scrypt_pbkdf2_body (&ctx, tmps[gid].P, 16); + u32 out[8]; + + scrypt_pbkdf2_pp (w, w_len, x, SCRYPT_SZ, out, 32); // AES256-CBC decrypt with IV from salt buffer (dynamic, alternative 1): u32 key[8]; - key[0] = tmps[gid].P[0].x; - key[1] = tmps[gid].P[0].y; - key[2] = tmps[gid].P[0].z; - key[3] = tmps[gid].P[0].w; - key[4] = tmps[gid].P[1].x; - key[5] = tmps[gid].P[1].y; - key[6] = tmps[gid].P[1].z; - key[7] = tmps[gid].P[1].w; + key[0] = out[0]; + key[1] = out[1]; + key[2] = out[2]; + key[3] = out[3]; + key[4] = out[4]; + key[5] = out[5]; + key[6] = out[6]; + key[7] = out[7]; #define KEYLEN 60 diff --git a/OpenCL/m24000-pure.cl b/OpenCL/m24000-pure.cl index d00e4c139..fa22ebab4 100644 --- a/OpenCL/m24000-pure.cl +++ b/OpenCL/m24000-pure.cl @@ -22,7 +22,7 @@ typedef struct #define SCRYPT_TMP_ELEM 1 #endif - uint4 P[SCRYPT_TMP_ELEM]; + u32 P[SCRYPT_TMP_ELEM]; } scrypt_tmp_t; @@ -171,17 +171,17 @@ KERNEL_FQ void HC_ATTR_SEQ m24000_init (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, best if (gid >= GID_CNT) return; - scrypt_pbkdf2 (pws[gid].i, pws[gid].pw_len, salt_bufs[SALT_POS_HOST].salt_buf, salt_bufs[SALT_POS_HOST].salt_len, tmps[gid].P, SCRYPT_CNT * 4); + u32 out[SCRYPT_CNT4]; - scrypt_blockmix_in (tmps[gid].P, SCRYPT_CNT * 4); + scrypt_pbkdf2_gg (pws[gid].i, pws[gid].pw_len, salt_bufs[SALT_POS_HOST].salt_buf, salt_bufs[SALT_POS_HOST].salt_len, out, SCRYPT_SZ); + + scrypt_blockmix_in (out, SCRYPT_SZ); + + for (u32 i = 0; i < SCRYPT_CNT4; i++) tmps[gid].P[i] = out[i]; } KERNEL_FQ void HC_ATTR_SEQ m24000_loop_prepare (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, bestcrypt_scrypt_t)) { - /** - * base - */ - const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); const u64 lsz = get_local_size (0); @@ -189,24 +189,15 @@ KERNEL_FQ void HC_ATTR_SEQ m24000_loop_prepare (KERN_ATTR_TMPS_ESALT (scrypt_tmp if (gid >= GID_CNT) return; - // SCRYPT part, init V + u32 X[STATE_CNT4]; - GLOBAL_AS uint4 *d_scrypt0_buf = (GLOBAL_AS uint4 *) d_extra0_buf; - GLOBAL_AS uint4 *d_scrypt1_buf = (GLOBAL_AS uint4 *) d_extra1_buf; - GLOBAL_AS uint4 *d_scrypt2_buf = (GLOBAL_AS uint4 *) d_extra2_buf; - GLOBAL_AS uint4 *d_scrypt3_buf = (GLOBAL_AS uint4 *) d_extra3_buf; + GLOBAL_AS u32 *P = tmps[gid].P + (SALT_REPEAT * STATE_CNT4); - uint4 X[STATE_CNT4]; + for (u32 z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - const u32 P_offset = SALT_REPEAT * STATE_CNT4; + scrypt_smix_init (X, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); - GLOBAL_AS uint4 *P = tmps[gid].P + P_offset; - - for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - - scrypt_smix_init (X, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid, lid, lsz, bid); - - for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; + for (u32 z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } KERNEL_FQ void HC_ATTR_SEQ m24000_loop (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, bestcrypt_scrypt_t)) @@ -218,29 +209,16 @@ KERNEL_FQ void HC_ATTR_SEQ m24000_loop (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, best if (gid >= GID_CNT) return; - GLOBAL_AS uint4 *d_scrypt0_buf = (GLOBAL_AS uint4 *) d_extra0_buf; - GLOBAL_AS uint4 *d_scrypt1_buf = (GLOBAL_AS uint4 *) d_extra1_buf; - GLOBAL_AS uint4 *d_scrypt2_buf = (GLOBAL_AS uint4 *) d_extra2_buf; - GLOBAL_AS uint4 *d_scrypt3_buf = (GLOBAL_AS uint4 *) d_extra3_buf; + u32 X[STATE_CNT4]; + u32 T[STATE_CNT4]; - uint4 X[STATE_CNT4]; + GLOBAL_AS u32 *P = tmps[gid].P + (SALT_REPEAT * STATE_CNT4); - #ifdef IS_HIP - LOCAL_VK uint4 T_s[MAX_THREADS_PER_BLOCK][STATE_CNT4]; - LOCAL_AS uint4 *T = T_s[lid]; - #else - uint4 T[STATE_CNT4]; - #endif + for (u32 z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - const u32 P_offset = SALT_REPEAT * STATE_CNT4; + scrypt_smix_loop (X, T, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); - GLOBAL_AS uint4 *P = tmps[gid].P + P_offset; - - for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - - scrypt_smix_loop (X, T, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid, lid, lsz, bid); - - for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; + for (u32 z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } KERNEL_FQ void HC_ATTR_SEQ m24000_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, bestcrypt_scrypt_t)) @@ -305,9 +283,15 @@ KERNEL_FQ void HC_ATTR_SEQ m24000_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, best if (gid >= GID_CNT) return; - scrypt_blockmix_out (tmps[gid].P, SCRYPT_CNT * 4); + u32 x[SCRYPT_CNT4]; - scrypt_pbkdf2 (pws[gid].i, pws[gid].pw_len, (GLOBAL_AS const u32 *) tmps[gid].P, SCRYPT_CNT * 4, tmps[gid].P, 32); + for (u32 i = 0; i < SCRYPT_CNT4; i++) x[i] = tmps[gid].P[i]; + + scrypt_blockmix_out (x, SCRYPT_SZ); + + u32 out[8]; + + scrypt_pbkdf2_gp (pws[gid].i, pws[gid].pw_len, x, SCRYPT_SZ, out, 32); u32 version = esalt_bufs[DIGESTS_OFFSET_HOST].version; @@ -317,14 +301,14 @@ KERNEL_FQ void HC_ATTR_SEQ m24000_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, best u32 key[8]; - key[0] = tmps[gid].P[0].x; - key[1] = tmps[gid].P[0].y; - key[2] = tmps[gid].P[0].z; - key[3] = tmps[gid].P[0].w; - key[4] = tmps[gid].P[1].x; - key[5] = tmps[gid].P[1].y; - key[6] = tmps[gid].P[1].z; - key[7] = tmps[gid].P[1].w; + key[0] = out[0]; + key[1] = out[1]; + key[2] = out[2]; + key[3] = out[3]; + key[4] = out[4]; + key[5] = out[5]; + key[6] = out[6]; + key[7] = out[7]; if (version == 0x38) //0x38 is char for '8' which is the crypto type passed in position 3 of hash ( $08$ ) { diff --git a/OpenCL/m27700-pure.cl b/OpenCL/m27700-pure.cl index 2bbe3ba01..a6482afdf 100644 --- a/OpenCL/m27700-pure.cl +++ b/OpenCL/m27700-pure.cl @@ -19,7 +19,7 @@ typedef struct #define SCRYPT_TMP_ELEM 1 #endif - uint4 P[SCRYPT_TMP_ELEM]; + u32 P[SCRYPT_TMP_ELEM]; } scrypt_tmp_t; @@ -46,23 +46,18 @@ KERNEL_FQ void HC_ATTR_SEQ m27700_init (KERN_ATTR_TMPS (scrypt_tmp_t)) | ((w[j] << 8) & 0xff00ff00); } - sha256_hmac_ctx_t sha256_hmac_ctx; + u32 s[16] = { 0 }; - sha256_hmac_init_swap (&sha256_hmac_ctx, w, w_len); + s[0] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[0]); + s[1] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[1]); - u32 x0[4] = { 0 }; - u32 x1[4] = { 0 }; - u32 x2[4] = { 0 }; - u32 x3[4] = { 0 }; + u32 out[SCRYPT_CNT4]; - x0[0] = salt_bufs[SALT_POS_HOST].salt_buf[0]; - x0[1] = salt_bufs[SALT_POS_HOST].salt_buf[1]; + scrypt_pbkdf2_pp (w, w_len, s, 8, out, SCRYPT_SZ); - sha256_hmac_update_64 (&sha256_hmac_ctx, x0, x1, x2, x3, 8); + scrypt_blockmix_in (out, SCRYPT_SZ); - scrypt_pbkdf2_body (&sha256_hmac_ctx, tmps[gid].P, SCRYPT_CNT * 4); - - scrypt_blockmix_in (tmps[gid].P, SCRYPT_CNT * 4); + for (u32 i = 0; i < SCRYPT_CNT4; i++) tmps[gid].P[i] = out[i]; } KERNEL_FQ void HC_ATTR_SEQ m27700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) @@ -74,27 +69,15 @@ KERNEL_FQ void HC_ATTR_SEQ m27700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) if (gid >= GID_CNT) return; - GLOBAL_AS uint4 *d_scrypt0_buf = (GLOBAL_AS uint4 *) d_extra0_buf; - GLOBAL_AS uint4 *d_scrypt1_buf = (GLOBAL_AS uint4 *) d_extra1_buf; - GLOBAL_AS uint4 *d_scrypt2_buf = (GLOBAL_AS uint4 *) d_extra2_buf; - GLOBAL_AS uint4 *d_scrypt3_buf = (GLOBAL_AS uint4 *) d_extra3_buf; + u32 X[STATE_CNT4]; - #ifdef IS_HIP - LOCAL_VK uint4 X_s[MAX_THREADS_PER_BLOCK][STATE_CNT4]; - LOCAL_AS uint4 *X = X_s[lid]; - #else - uint4 X[STATE_CNT4]; - #endif + GLOBAL_AS u32 *P = tmps[gid].P + (SALT_REPEAT * STATE_CNT4); - const u32 P_offset = SALT_REPEAT * STATE_CNT4; + for (u32 z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - GLOBAL_AS uint4 *P = tmps[gid].P + P_offset; + scrypt_smix_init (X, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); - for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - - scrypt_smix_init (X, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid, lid, lsz, bid); - - for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; + for (u32 z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } KERNEL_FQ void HC_ATTR_SEQ m27700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) @@ -106,29 +89,16 @@ KERNEL_FQ void HC_ATTR_SEQ m27700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) if (gid >= GID_CNT) return; - GLOBAL_AS uint4 *d_scrypt0_buf = (GLOBAL_AS uint4 *) d_extra0_buf; - GLOBAL_AS uint4 *d_scrypt1_buf = (GLOBAL_AS uint4 *) d_extra1_buf; - GLOBAL_AS uint4 *d_scrypt2_buf = (GLOBAL_AS uint4 *) d_extra2_buf; - GLOBAL_AS uint4 *d_scrypt3_buf = (GLOBAL_AS uint4 *) d_extra3_buf; + u32 X[STATE_CNT4]; + u32 T[STATE_CNT4]; - uint4 X[STATE_CNT4]; + GLOBAL_AS u32 *P = tmps[gid].P + (SALT_REPEAT * STATE_CNT4); - #ifdef IS_HIP - LOCAL_VK uint4 T_s[MAX_THREADS_PER_BLOCK][STATE_CNT4]; - LOCAL_AS uint4 *T = T_s[lid]; - #else - uint4 T[STATE_CNT4]; - #endif + for (u32 z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - const u32 P_offset = SALT_REPEAT * STATE_CNT4; + scrypt_smix_loop (X, T, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); - GLOBAL_AS uint4 *P = tmps[gid].P + P_offset; - - for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - - scrypt_smix_loop (X, T, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid, lid, lsz, bid); - - for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; + for (u32 z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } KERNEL_FQ void HC_ATTR_SEQ m27700_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) @@ -211,28 +181,29 @@ KERNEL_FQ void HC_ATTR_SEQ m27700_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) | ((w[j] << 8) & 0xff00ff00); } - scrypt_blockmix_out (tmps[gid].P, SCRYPT_CNT * 4); - sha256_hmac_ctx_t ctx; + u32 x[SCRYPT_CNT4]; - sha256_hmac_init_swap (&ctx, w, w_len); + for (u32 i = 0; i < SCRYPT_CNT4; i++) x[i] = tmps[gid].P[i]; - sha256_hmac_update_global_swap (&ctx, (GLOBAL_AS const u32 *) tmps[gid].P, SCRYPT_CNT * 4); + scrypt_blockmix_out (x, SCRYPT_SZ); - scrypt_pbkdf2_body (&ctx, tmps[gid].P, 16); + u32 out[8]; + + scrypt_pbkdf2_pp (w, w_len, x, SCRYPT_SZ, out, 32); // AES256-CBC decrypt u32 key[8]; - key[0] = tmps[gid].P[0].x; - key[1] = tmps[gid].P[0].y; - key[2] = tmps[gid].P[0].z; - key[3] = tmps[gid].P[0].w; - key[4] = tmps[gid].P[1].x; - key[5] = tmps[gid].P[1].y; - key[6] = tmps[gid].P[1].z; - key[7] = tmps[gid].P[1].w; + key[0] = out[0]; + key[1] = out[1]; + key[2] = out[2]; + key[3] = out[3]; + key[4] = out[4]; + key[5] = out[5]; + key[6] = out[6]; + key[7] = out[7]; #define KEYLEN 60 diff --git a/OpenCL/m28200-pure.cl b/OpenCL/m28200-pure.cl index 18f0cb161..e335b89bf 100644 --- a/OpenCL/m28200-pure.cl +++ b/OpenCL/m28200-pure.cl @@ -23,7 +23,7 @@ typedef struct exodus_tmp #define SCRYPT_TMP_ELEM 1 #endif - uint4 P[SCRYPT_TMP_ELEM]; + u32 P[SCRYPT_TMP_ELEM]; } exodus_tmp_t; @@ -41,9 +41,13 @@ KERNEL_FQ void HC_ATTR_SEQ m28200_init (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exod if (gid >= GID_CNT) return; - scrypt_pbkdf2 (pws[gid].i, pws[gid].pw_len, salt_bufs[SALT_POS_HOST].salt_buf, salt_bufs[SALT_POS_HOST].salt_len, tmps[gid].P, SCRYPT_CNT * 4); + u32 out[SCRYPT_CNT4]; - scrypt_blockmix_in (tmps[gid].P, SCRYPT_CNT * 4); + scrypt_pbkdf2_gg (pws[gid].i, pws[gid].pw_len, salt_bufs[SALT_POS_HOST].salt_buf, salt_bufs[SALT_POS_HOST].salt_len, out, SCRYPT_SZ); + + scrypt_blockmix_in (out, SCRYPT_SZ); + + for (u32 i = 0; i < SCRYPT_CNT4; i++) tmps[gid].P[i] = out[i]; } KERNEL_FQ void HC_ATTR_SEQ m28200_loop_prepare (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exodus_t)) @@ -55,27 +59,15 @@ KERNEL_FQ void HC_ATTR_SEQ m28200_loop_prepare (KERN_ATTR_TMPS_ESALT (exodus_tmp if (gid >= GID_CNT) return; - GLOBAL_AS uint4 *d_scrypt0_buf = (GLOBAL_AS uint4 *) d_extra0_buf; - GLOBAL_AS uint4 *d_scrypt1_buf = (GLOBAL_AS uint4 *) d_extra1_buf; - GLOBAL_AS uint4 *d_scrypt2_buf = (GLOBAL_AS uint4 *) d_extra2_buf; - GLOBAL_AS uint4 *d_scrypt3_buf = (GLOBAL_AS uint4 *) d_extra3_buf; + u32 X[STATE_CNT4]; - #ifdef IS_HIP - LOCAL_VK uint4 X_s[MAX_THREADS_PER_BLOCK][STATE_CNT4]; - LOCAL_AS uint4 *X = X_s[lid]; - #else - uint4 X[STATE_CNT4]; - #endif + GLOBAL_AS u32 *P = tmps[gid].P + (SALT_REPEAT * STATE_CNT4); - const u32 P_offset = SALT_REPEAT * STATE_CNT4; + for (u32 z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - GLOBAL_AS uint4 *P = tmps[gid].P + P_offset; + scrypt_smix_init (X, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); - for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - - scrypt_smix_init (X, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid, lid, lsz, bid); - - for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; + for (u32 z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } KERNEL_FQ void HC_ATTR_SEQ m28200_loop (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exodus_t)) @@ -87,29 +79,16 @@ KERNEL_FQ void HC_ATTR_SEQ m28200_loop (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exod if (gid >= GID_CNT) return; - GLOBAL_AS uint4 *d_scrypt0_buf = (GLOBAL_AS uint4 *) d_extra0_buf; - GLOBAL_AS uint4 *d_scrypt1_buf = (GLOBAL_AS uint4 *) d_extra1_buf; - GLOBAL_AS uint4 *d_scrypt2_buf = (GLOBAL_AS uint4 *) d_extra2_buf; - GLOBAL_AS uint4 *d_scrypt3_buf = (GLOBAL_AS uint4 *) d_extra3_buf; + u32 X[STATE_CNT4]; + u32 T[STATE_CNT4]; - uint4 X[STATE_CNT4]; + GLOBAL_AS u32 *P = tmps[gid].P + (SALT_REPEAT * STATE_CNT4); - #ifdef IS_HIP - LOCAL_VK uint4 T_s[MAX_THREADS_PER_BLOCK][STATE_CNT4]; - LOCAL_AS uint4 *T = T_s[lid]; - #else - uint4 T[STATE_CNT4]; - #endif + for (u32 z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - const u32 P_offset = SALT_REPEAT * STATE_CNT4; + scrypt_smix_loop (X, T, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); - GLOBAL_AS uint4 *P = tmps[gid].P + P_offset; - - for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - - scrypt_smix_loop (X, T, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid, lid, lsz, bid); - - for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; + for (u32 z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } KERNEL_FQ void HC_ATTR_SEQ m28200_comp (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exodus_t)) @@ -171,22 +150,28 @@ KERNEL_FQ void HC_ATTR_SEQ m28200_comp (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exod if (gid >= GID_CNT) return; - scrypt_blockmix_out (tmps[gid].P, SCRYPT_CNT * 4); + u32 x[SCRYPT_CNT4]; - scrypt_pbkdf2 (pws[gid].i, pws[gid].pw_len, (GLOBAL_AS const u32 *) tmps[gid].P, SCRYPT_CNT * 4, tmps[gid].P, 32); + for (u32 i = 0; i < SCRYPT_CNT4; i++) x[i] = tmps[gid].P[i]; + + scrypt_blockmix_out (x, SCRYPT_SZ); + + u32 out[8]; + + scrypt_pbkdf2_gp (pws[gid].i, pws[gid].pw_len, x, SCRYPT_SZ, out, 32); // GCM stuff u32 ukey[8]; - ukey[0] = hc_swap32_S (tmps[gid].P[0].x); - ukey[1] = hc_swap32_S (tmps[gid].P[0].y); - ukey[2] = hc_swap32_S (tmps[gid].P[0].z); - ukey[3] = hc_swap32_S (tmps[gid].P[0].w); - ukey[4] = hc_swap32_S (tmps[gid].P[1].x); - ukey[5] = hc_swap32_S (tmps[gid].P[1].y); - ukey[6] = hc_swap32_S (tmps[gid].P[1].z); - ukey[7] = hc_swap32_S (tmps[gid].P[1].w); + ukey[0] = hc_swap32_S (out[0]); + ukey[1] = hc_swap32_S (out[1]); + ukey[2] = hc_swap32_S (out[2]); + ukey[3] = hc_swap32_S (out[3]); + ukey[4] = hc_swap32_S (out[4]); + ukey[5] = hc_swap32_S (out[5]); + ukey[6] = hc_swap32_S (out[6]); + ukey[7] = hc_swap32_S (out[7]); u32 key[60] = { 0 }; u32 subKey[4] = { 0 }; diff --git a/OpenCL/m29800-pure.cl b/OpenCL/m29800-pure.cl index fb58a9822..98d3fca70 100644 --- a/OpenCL/m29800-pure.cl +++ b/OpenCL/m29800-pure.cl @@ -19,7 +19,7 @@ typedef struct #define SCRYPT_TMP_ELEM 1 #endif - uint4 P[SCRYPT_TMP_ELEM]; + u32 P[SCRYPT_TMP_ELEM]; } scrypt_tmp_t; @@ -46,23 +46,18 @@ KERNEL_FQ void HC_ATTR_SEQ m29800_init (KERN_ATTR_TMPS (scrypt_tmp_t)) | ((w[j] << 8) & 0xff00ff00); } - sha256_hmac_ctx_t sha256_hmac_ctx; + u32 s[16] = { 0 }; - sha256_hmac_init_swap (&sha256_hmac_ctx, w, w_len); + s[0] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[0]); + s[1] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[1]); - u32 x0[4] = { 0 }; - u32 x1[4] = { 0 }; - u32 x2[4] = { 0 }; - u32 x3[4] = { 0 }; + u32 out[SCRYPT_CNT4]; - x0[0] = salt_bufs[SALT_POS_HOST].salt_buf[0]; - x0[1] = salt_bufs[SALT_POS_HOST].salt_buf[1]; + scrypt_pbkdf2_pp (w, w_len, s, 8, out, SCRYPT_SZ); - sha256_hmac_update_64 (&sha256_hmac_ctx, x0, x1, x2, x3, 8); + scrypt_blockmix_in (out, SCRYPT_SZ); - scrypt_pbkdf2_body (&sha256_hmac_ctx, tmps[gid].P, SCRYPT_CNT * 4); - - scrypt_blockmix_in (tmps[gid].P, SCRYPT_CNT * 4); + for (u32 i = 0; i < SCRYPT_CNT4; i++) tmps[gid].P[i] = out[i]; } KERNEL_FQ void HC_ATTR_SEQ m29800_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) @@ -74,27 +69,15 @@ KERNEL_FQ void HC_ATTR_SEQ m29800_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) if (gid >= GID_CNT) return; - GLOBAL_AS uint4 *d_scrypt0_buf = (GLOBAL_AS uint4 *) d_extra0_buf; - GLOBAL_AS uint4 *d_scrypt1_buf = (GLOBAL_AS uint4 *) d_extra1_buf; - GLOBAL_AS uint4 *d_scrypt2_buf = (GLOBAL_AS uint4 *) d_extra2_buf; - GLOBAL_AS uint4 *d_scrypt3_buf = (GLOBAL_AS uint4 *) d_extra3_buf; + u32 X[STATE_CNT4]; - #ifdef IS_HIP - LOCAL_VK uint4 X_s[MAX_THREADS_PER_BLOCK][STATE_CNT4]; - LOCAL_AS uint4 *X = X_s[lid]; - #else - uint4 X[STATE_CNT4]; - #endif + GLOBAL_AS u32 *P = tmps[gid].P + (SALT_REPEAT * STATE_CNT4); - const u32 P_offset = SALT_REPEAT * STATE_CNT4; + for (u32 z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - GLOBAL_AS uint4 *P = tmps[gid].P + P_offset; + scrypt_smix_init (X, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); - for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - - scrypt_smix_init (X, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid, lid, lsz, bid); - - for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; + for (u32 z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } KERNEL_FQ void HC_ATTR_SEQ m29800_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) @@ -106,29 +89,16 @@ KERNEL_FQ void HC_ATTR_SEQ m29800_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) if (gid >= GID_CNT) return; - GLOBAL_AS uint4 *d_scrypt0_buf = (GLOBAL_AS uint4 *) d_extra0_buf; - GLOBAL_AS uint4 *d_scrypt1_buf = (GLOBAL_AS uint4 *) d_extra1_buf; - GLOBAL_AS uint4 *d_scrypt2_buf = (GLOBAL_AS uint4 *) d_extra2_buf; - GLOBAL_AS uint4 *d_scrypt3_buf = (GLOBAL_AS uint4 *) d_extra3_buf; + u32 X[STATE_CNT4]; + u32 T[STATE_CNT4]; - uint4 X[STATE_CNT4]; + GLOBAL_AS u32 *P = tmps[gid].P + (SALT_REPEAT * STATE_CNT4); - #ifdef IS_HIP - LOCAL_VK uint4 T_s[MAX_THREADS_PER_BLOCK][STATE_CNT4]; - LOCAL_AS uint4 *T = T_s[lid]; - #else - uint4 T[STATE_CNT4]; - #endif + for (u32 z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - const u32 P_offset = SALT_REPEAT * STATE_CNT4; + scrypt_smix_loop (X, T, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); - GLOBAL_AS uint4 *P = tmps[gid].P + P_offset; - - for (int z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - - scrypt_smix_loop (X, T, d_scrypt0_buf, d_scrypt1_buf, d_scrypt2_buf, d_scrypt3_buf, gid, lid, lsz, bid); - - for (int z = 0; z < STATE_CNT4; z++) P[z] = X[z]; + for (u32 z = 0; z < STATE_CNT4; z++) P[z] = X[z]; } KERNEL_FQ void HC_ATTR_SEQ m29800_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) @@ -211,28 +181,29 @@ KERNEL_FQ void HC_ATTR_SEQ m29800_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) | ((w[j] << 8) & 0xff00ff00); } - scrypt_blockmix_out (tmps[gid].P, SCRYPT_CNT * 4); - sha256_hmac_ctx_t ctx; + u32 x[SCRYPT_CNT4]; - sha256_hmac_init_swap (&ctx, w, w_len); + for (u32 i = 0; i < SCRYPT_CNT4; i++) x[i] = tmps[gid].P[i]; - sha256_hmac_update_global_swap (&ctx, (GLOBAL_AS const u32 *) tmps[gid].P, SCRYPT_CNT * 4); + scrypt_blockmix_out (x, SCRYPT_SZ); - scrypt_pbkdf2_body (&ctx, tmps[gid].P, 16); + u32 out[8]; + + scrypt_pbkdf2_pp (w, w_len, x, SCRYPT_SZ, out, 32); // AES256-CBC decrypt u32 key[8]; - key[0] = tmps[gid].P[0].x; - key[1] = tmps[gid].P[0].y; - key[2] = tmps[gid].P[0].z; - key[3] = tmps[gid].P[0].w; - key[4] = tmps[gid].P[1].x; - key[5] = tmps[gid].P[1].y; - key[6] = tmps[gid].P[1].z; - key[7] = tmps[gid].P[1].w; + key[0] = out[0]; + key[1] = out[1]; + key[2] = out[2]; + key[3] = out[3]; + key[4] = out[4]; + key[5] = out[5]; + key[6] = out[6]; + key[7] = out[7]; #define KEYLEN 60 diff --git a/include/shared.h b/include/shared.h index bc27b49e0..2c7f801f6 100644 --- a/include/shared.h +++ b/include/shared.h @@ -117,4 +117,7 @@ char *file_to_buffer (const char *filename); bool check_file_suffix (const char *file, const char *suffix); bool remove_file_suffix (char *file, const char *suffix); +int suppress_stderr (void); +void restore_stderr (int saved_fd); + #endif // HC_SHARED_H diff --git a/src/backend.c b/src/backend.c index c69792622..51375a56a 100644 --- a/src/backend.c +++ b/src/backend.c @@ -486,22 +486,13 @@ static bool opencl_test_instruction (hashcat_ctx_t *hashcat_ctx, cl_context cont OCL_PTR *ocl = (OCL_PTR *) backend_ctx->ocl; #ifndef DEBUG - const int fd_stderr = fileno (stderr); - const int stderr_bak = dup (fd_stderr); - #ifdef _WIN - const int tmp = open ("NUL", O_WRONLY); - #else - const int tmp = open ("/dev/null", O_WRONLY); - #endif - dup2 (tmp, fd_stderr); - close (tmp); + int saved_stderr = suppress_stderr (); #endif const int CL_rc = ocl->clBuildProgram (program, 1, &device, NULL, NULL, NULL); #ifndef DEBUG - dup2 (stderr_bak, fd_stderr); - close (stderr_bak); + restore_stderr (saved_stderr); #endif if (CL_rc != CL_SUCCESS) @@ -8984,8 +8975,7 @@ static bool load_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_p nvrtc_options[nvrtc_options_idx++] = "--std=c++14"; } - nvrtc_options[nvrtc_options_idx++] = "--restrict"; - nvrtc_options[nvrtc_options_idx++] = "--device-as-default-execution-space"; + //nvrtc_options[nvrtc_options_idx++] = "--restrict"; nvrtc_options[nvrtc_options_idx++] = "--gpu-architecture"; hc_asprintf (&nvrtc_options[nvrtc_options_idx++], "compute_%d", (device_param->sm_major * 10) + device_param->sm_minor); @@ -9243,6 +9233,7 @@ static bool load_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_p hc_asprintf (&hiprtc_options[hiprtc_options_idx++], "-D MAX_THREADS_PER_BLOCK=%d", (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : device_param->kernel_threads_max); hc_asprintf (&hiprtc_options[hiprtc_options_idx++], "--gpu-architecture=%s", device_param->gcnArchName); + hc_asprintf (&hiprtc_options[hiprtc_options_idx++], "--gpu-max-threads-per-block=%d", (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : device_param->kernel_threads_max); // untested but it should work #if defined (_WIN) || defined (__CYGWIN__) || defined (__MSYS__) @@ -10598,6 +10589,7 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) build_options_len += snprintf (build_options_buf + build_options_len, build_options_sz - build_options_len, "-D XM2S(x)=#x "); build_options_len += snprintf (build_options_buf + build_options_len, build_options_sz - build_options_len, "-D M2S(x)=XM2S(x) "); + build_options_len += snprintf (build_options_buf + build_options_len, build_options_sz - build_options_len, "-D MAX_THREADS_PER_BLOCK=%d ", (user_options->kernel_threads_chgd == true) ? user_options->kernel_threads : device_param->kernel_threads_max); #if defined (__APPLE__) if (is_apple_silicon () == true) diff --git a/src/bridges/bridge_python_generic_hash_mp.c b/src/bridges/bridge_python_generic_hash_mp.c index f5d31aeab..4dcfe0ea5 100644 --- a/src/bridges/bridge_python_generic_hash_mp.c +++ b/src/bridges/bridge_python_generic_hash_mp.c @@ -195,9 +195,9 @@ typedef struct } python_interpreter_t; #if defined (_WIN) || defined (__CYGWIN__) || defined (__APPLE__) -static char *DEFAULT_SOURCE_FILENAME = "./Python/generic_hash_sp.py"; +static char *DEFAULT_SOURCE_FILENAME = "Python/generic_hash_sp.py"; #else -static char *DEFAULT_SOURCE_FILENAME = "./Python/generic_hash_mp.py"; +static char *DEFAULT_SOURCE_FILENAME = "Python/generic_hash_mp.py"; #endif const char *extract_module_name (const char *path) @@ -227,78 +227,6 @@ const char *extract_module_name (const char *path) return module_name; } -char *load_source (const char *filename) -{ - FILE *fp = fopen (filename, "r"); - - if (fp == NULL) - { - fprintf (stderr, "%s: %s\n", filename, strerror (errno)); - - return NULL; - } - - fseek (fp, 0, SEEK_END); - - const size_t size = ftell (fp); - - fseek (fp, 0, SEEK_SET); - - char *source = hcmalloc (size + 1); - - if (fread (source, 1, size, fp) != size) - { - fprintf (stderr, "%s: %s\n", filename, strerror (errno)); - - hcfree (source); - - return NULL; - } - - source[size] = 0; - - fclose (fp); - - return source; -} - -#if defined (_WIN) -#define DEVNULL "NUL" -#else -#define DEVNULL "/dev/null" -#endif - -static int suppress_stderr (void) -{ - int null_fd = open (DEVNULL, O_WRONLY); - - if (null_fd < 0) return -1; - - int saved_fd = dup (fileno (stderr)); - - if (saved_fd < 0) - { - close (null_fd); - - return -1; - } - - dup2 (null_fd, fileno (stderr)); - - close (null_fd); - - return saved_fd; -} - -static void restore_stderr (int saved_fd) -{ - if (saved_fd < 0) return; - - dup2 (saved_fd, fileno (stderr)); - - close (saved_fd); -} - static char *expand_pyenv_libpath (const char *prefix, const int maj, const int min) { char *out = NULL; @@ -793,9 +721,14 @@ void *platform_init (user_options_t *user_options) python_interpreter->source_filename = (user_options->bridge_parameter1 == NULL) ? DEFAULT_SOURCE_FILENAME : user_options->bridge_parameter1; - char *source = load_source (python_interpreter->source_filename); + char *source = file_to_buffer (python_interpreter->source_filename); - if (source == NULL) return NULL; + if (source == NULL) + { + fprintf (stderr, "ERROR: %s: %s\n\n", python_interpreter->source_filename, strerror (errno)); + + return NULL; + } PyObject *code = python->Py_CompileStringExFlags (source, python_interpreter->source_filename, Py_file_input, NULL, -1); diff --git a/src/bridges/bridge_python_generic_hash_sp.c b/src/bridges/bridge_python_generic_hash_sp.c index a53d4391a..3d2dbb994 100644 --- a/src/bridges/bridge_python_generic_hash_sp.c +++ b/src/bridges/bridge_python_generic_hash_sp.c @@ -192,7 +192,7 @@ typedef struct } python_interpreter_t; -static char *DEFAULT_SOURCE_FILENAME = "./Python/generic_hash_sp.py"; +static char *DEFAULT_SOURCE_FILENAME = "Python/generic_hash_sp.py"; const char *extract_module_name (const char *path) { @@ -221,78 +221,6 @@ const char *extract_module_name (const char *path) return module_name; } -char *load_source (const char *filename) -{ - FILE *fp = fopen (filename, "r"); - - if (fp == NULL) - { - fprintf (stderr, "%s: %s\n", filename, strerror (errno)); - - return NULL; - } - - fseek (fp, 0, SEEK_END); - - const size_t size = ftell (fp); - - fseek (fp, 0, SEEK_SET); - - char *source = hcmalloc (size + 1); - - if (fread (source, 1, size, fp) != size) - { - fprintf (stderr, "%s: %s\n", filename, strerror (errno)); - - hcfree (source); - - return NULL; - } - - source[size] = 0; - - fclose (fp); - - return source; -} - -#if defined (_WIN) -#define DEVNULL "NUL" -#else -#define DEVNULL "/dev/null" -#endif - -static int suppress_stderr (void) -{ - int null_fd = open (DEVNULL, O_WRONLY); - - if (null_fd < 0) return -1; - - int saved_fd = dup (fileno (stderr)); - - if (saved_fd < 0) - { - close (null_fd); - - return -1; - } - - dup2 (null_fd, fileno (stderr)); - - close (null_fd); - - return saved_fd; -} - -static void restore_stderr (int saved_fd) -{ - if (saved_fd < 0) return; - - dup2 (saved_fd, fileno (stderr)); - - close (saved_fd); -} - static char *expand_pyenv_libpath (const char *prefix, const int maj, const int min) { char *out = NULL; @@ -843,7 +771,7 @@ bool thread_init (MAYBE_UNUSED void *platform_context, MAYBE_UNUSED hc_device_pa python->Py_DecRef (path); python->Py_DecRef (sys); - char *source = load_source (python_interpreter->source_filename); + char *source = file_to_buffer (python_interpreter->source_filename); if (source == NULL) return NULL; @@ -1154,9 +1082,14 @@ const char *st_update_hash (MAYBE_UNUSED void *platform_context) python->Py_DecRef (path); python->Py_DecRef (sys); - char *source = load_source (python_interpreter->source_filename); + char *source = file_to_buffer (python_interpreter->source_filename); - if (source == NULL) return NULL; + if (source == NULL) + { + fprintf (stderr, "ERROR: %s: %s\n\n", python_interpreter->source_filename, strerror (errno)); + + return NULL; + } PyObject *code = python->Py_CompileStringExFlags (source, python_interpreter->source_filename, Py_file_input, NULL, -1); @@ -1218,7 +1151,7 @@ const char *st_update_pass (MAYBE_UNUSED void *platform_context) // this is ugly to load that entire thing just to get that one variable - char *source = load_source (python_interpreter->source_filename); + char *source = file_to_buffer (python_interpreter->source_filename); if (source == NULL) return NULL; diff --git a/src/modules/module_25000.c b/src/modules/module_25000.c index a3dd1872c..897d51791 100644 --- a/src/modules/module_25000.c +++ b/src/modules/module_25000.c @@ -23,8 +23,7 @@ static const char *HASH_NAME = "SNMPv3 HMAC-MD5-96/HMAC-SHA1-96"; static const u64 KERN_TYPE = 25000; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE - | OPTS_TYPE_PT_GENERATE_LE - | OPTS_TYPE_MP_MULTI_DISABLE; + | OPTS_TYPE_PT_GENERATE_LE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat1"; static const char *ST_HASH = "$SNMPv3$0$45889431$30818f0201033011020409242fc0020300ffe304010102010304383036041180001f88808106d566db57fd600000000002011002020118040a6d61747269785f4d4435040c0000000000000000000000000400303d041180001f88808106d566db57fd60000000000400a226020411f319300201000201003018301606082b06010201010200060a2b06010401bf0803020a$80001f88808106d566db57fd6000000000$1b37c3ea872731f922959e90"; @@ -118,6 +117,24 @@ u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED c return tmp_size; } +u32 module_kernel_accel_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + // due to the large tmps structure + + const u32 kernel_accel_max = 256; + + return kernel_accel_max; +} + +u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + // due to the large tmps structure + + const u32 kernel_threads_max = 32; + + return kernel_threads_max; +} + u32 module_kernel_loops_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { // we need to fix iteration count to guarantee the loop count is a multiple of 64 @@ -337,11 +354,11 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook_size = MODULE_DEFAULT; module_ctx->module_jit_build_options = MODULE_DEFAULT; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; - module_ctx->module_kernel_accel_max = MODULE_DEFAULT; + module_ctx->module_kernel_accel_max = module_kernel_accel_max; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; module_ctx->module_kernel_loops_max = module_kernel_loops_max; module_ctx->module_kernel_loops_min = module_kernel_loops_min; - module_ctx->module_kernel_threads_max = MODULE_DEFAULT; + module_ctx->module_kernel_threads_max = module_kernel_threads_max; module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; diff --git a/src/modules/module_25100.c b/src/modules/module_25100.c index 24fd1ca74..57de16c79 100644 --- a/src/modules/module_25100.c +++ b/src/modules/module_25100.c @@ -23,8 +23,7 @@ static const char *HASH_NAME = "SNMPv3 HMAC-MD5-96"; static const u64 KERN_TYPE = 25100; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE - | OPTS_TYPE_PT_GENERATE_LE - | OPTS_TYPE_MP_MULTI_DISABLE; + | OPTS_TYPE_PT_GENERATE_LE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat1"; static const char *ST_HASH = "$SNMPv3$1$45889431$30818f0201033011020409242fc0020300ffe304010102010304383036041180001f88808106d566db57fd600000000002011002020118040a6d61747269785f4d4435040c0000000000000000000000000400303d041180001f88808106d566db57fd60000000000400a226020411f319300201000201003018301606082b06010201010200060a2b06010401bf0803020a$80001f88808106d566db57fd6000000000$1b37c3ea872731f922959e90"; @@ -114,6 +113,24 @@ u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED c return tmp_size; } +u32 module_kernel_accel_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + // due to the large tmps structure + + const u32 kernel_accel_max = 256; + + return kernel_accel_max; +} + +u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + // due to the large tmps structure + + const u32 kernel_threads_max = 32; + + return kernel_threads_max; +} + u32 module_kernel_loops_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { // we need to fix iteration count to guarantee the loop count is a multiple of 64 @@ -318,11 +335,11 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook_size = MODULE_DEFAULT; module_ctx->module_jit_build_options = MODULE_DEFAULT; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; - module_ctx->module_kernel_accel_max = MODULE_DEFAULT; + module_ctx->module_kernel_accel_max = module_kernel_accel_max; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; module_ctx->module_kernel_loops_max = module_kernel_loops_max; module_ctx->module_kernel_loops_min = module_kernel_loops_min; - module_ctx->module_kernel_threads_max = MODULE_DEFAULT; + module_ctx->module_kernel_threads_max = module_kernel_threads_max; module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; diff --git a/src/modules/module_25200.c b/src/modules/module_25200.c index 22a671253..29674aa17 100644 --- a/src/modules/module_25200.c +++ b/src/modules/module_25200.c @@ -23,8 +23,7 @@ static const char *HASH_NAME = "SNMPv3 HMAC-SHA1-96"; static const u64 KERN_TYPE = 25200; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE - | OPTS_TYPE_PT_GENERATE_LE - | OPTS_TYPE_MP_MULTI_DISABLE; + | OPTS_TYPE_PT_GENERATE_LE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat1"; static const char *ST_HASH = "$SNMPv3$2$45889431$30818f02010330110204371780f3020300ffe304010102010304383036041180001f88808106d566db57fd600000000002011002020118040a6d61747269785f534841040c0000000000000000000000000400303d041180001f88808106d566db57fd60000000000400a2260204073557d50201000201003018301606082b06010201010200060a2b06010401bf0803020a$80001f88808106d566db57fd6000000000$81f14f1930589f26f6755f6b"; @@ -114,6 +113,24 @@ u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED c return tmp_size; } +u32 module_kernel_accel_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + // due to the large tmps structure + + const u32 kernel_accel_max = 256; + + return kernel_accel_max; +} + +u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + // due to the large tmps structure + + const u32 kernel_threads_max = 32; + + return kernel_threads_max; +} + u32 module_kernel_loops_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { // we need to fix iteration count to guarantee the loop count is a multiple of 64 @@ -329,11 +346,11 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook_size = MODULE_DEFAULT; module_ctx->module_jit_build_options = MODULE_DEFAULT; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; - module_ctx->module_kernel_accel_max = MODULE_DEFAULT; + module_ctx->module_kernel_accel_max = module_kernel_accel_max; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; module_ctx->module_kernel_loops_max = module_kernel_loops_max; module_ctx->module_kernel_loops_min = module_kernel_loops_min; - module_ctx->module_kernel_threads_max = MODULE_DEFAULT; + module_ctx->module_kernel_threads_max = module_kernel_threads_max; module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; diff --git a/src/modules/module_26700.c b/src/modules/module_26700.c index e802726f6..82132f35e 100644 --- a/src/modules/module_26700.c +++ b/src/modules/module_26700.c @@ -115,6 +115,24 @@ u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED c return tmp_size; } +u32 module_kernel_accel_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + // due to the large tmps structure + + const u32 kernel_accel_max = 256; + + return kernel_accel_max; +} + +u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + // due to the large tmps structure + + const u32 kernel_threads_max = 32; + + return kernel_threads_max; +} + u32 module_kernel_loops_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { // we need to fix iteration count to guarantee the loop count is a multiple of 64 @@ -332,11 +350,11 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook_size = MODULE_DEFAULT; module_ctx->module_jit_build_options = MODULE_DEFAULT; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; - module_ctx->module_kernel_accel_max = MODULE_DEFAULT; + module_ctx->module_kernel_accel_max = module_kernel_accel_max; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; module_ctx->module_kernel_loops_max = module_kernel_loops_max; module_ctx->module_kernel_loops_min = module_kernel_loops_min; - module_ctx->module_kernel_threads_max = MODULE_DEFAULT; + module_ctx->module_kernel_threads_max = module_kernel_threads_max; module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; diff --git a/src/modules/module_26800.c b/src/modules/module_26800.c index 7363bedff..0c15fe0a0 100644 --- a/src/modules/module_26800.c +++ b/src/modules/module_26800.c @@ -115,6 +115,24 @@ u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED c return tmp_size; } +u32 module_kernel_accel_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + // due to the large tmps structure + + const u32 kernel_accel_max = 256; + + return kernel_accel_max; +} + +u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + // due to the large tmps structure + + const u32 kernel_threads_max = 32; + + return kernel_threads_max; +} + u32 module_kernel_loops_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { // we need to fix iteration count to guarantee the loop count is a multiple of 64 @@ -340,11 +358,11 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook_size = MODULE_DEFAULT; module_ctx->module_jit_build_options = MODULE_DEFAULT; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; - module_ctx->module_kernel_accel_max = MODULE_DEFAULT; + module_ctx->module_kernel_accel_max = module_kernel_accel_max; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; module_ctx->module_kernel_loops_max = module_kernel_loops_max; module_ctx->module_kernel_loops_min = module_kernel_loops_min; - module_ctx->module_kernel_threads_max = MODULE_DEFAULT; + module_ctx->module_kernel_threads_max = module_kernel_threads_max; module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; diff --git a/src/modules/module_26900.c b/src/modules/module_26900.c index 5282933a6..975a97c83 100644 --- a/src/modules/module_26900.c +++ b/src/modules/module_26900.c @@ -149,6 +149,24 @@ u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED c return tmp_size; } +u32 module_kernel_accel_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + // due to the large tmps structure + + const u32 kernel_accel_max = 256; + + return kernel_accel_max; +} + +u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + // due to the large tmps structure + + const u32 kernel_threads_max = 32; + + return kernel_threads_max; +} + u32 module_kernel_loops_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { // we need to fix iteration count to guarantee the loop count is a multiple of SNMPV3_MAX_PW_LENGTH @@ -383,11 +401,11 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook_size = MODULE_DEFAULT; module_ctx->module_jit_build_options = module_jit_build_options; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; - module_ctx->module_kernel_accel_max = MODULE_DEFAULT; + module_ctx->module_kernel_accel_max = module_kernel_accel_max; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; module_ctx->module_kernel_loops_max = module_kernel_loops_max; module_ctx->module_kernel_loops_min = module_kernel_loops_min; - module_ctx->module_kernel_threads_max = MODULE_DEFAULT; + module_ctx->module_kernel_threads_max = module_kernel_threads_max; module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; diff --git a/src/modules/module_27300.c b/src/modules/module_27300.c index 535f7bc36..2514d95a1 100644 --- a/src/modules/module_27300.c +++ b/src/modules/module_27300.c @@ -149,6 +149,24 @@ u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED c return tmp_size; } +u32 module_kernel_accel_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + // due to the large tmps structure + + const u32 kernel_accel_max = 256; + + return kernel_accel_max; +} + +u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + // due to the large tmps structure + + const u32 kernel_threads_max = 32; + + return kernel_threads_max; +} + u32 module_kernel_loops_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { // we need to fix iteration count to guarantee the loop count is a multiple of SNMPV3_MAX_PW_LENGTH @@ -379,11 +397,11 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook_size = MODULE_DEFAULT; module_ctx->module_jit_build_options = module_jit_build_options; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; - module_ctx->module_kernel_accel_max = MODULE_DEFAULT; + module_ctx->module_kernel_accel_max = module_kernel_accel_max; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; module_ctx->module_kernel_loops_max = module_kernel_loops_max; module_ctx->module_kernel_loops_min = module_kernel_loops_min; - module_ctx->module_kernel_threads_max = MODULE_DEFAULT; + module_ctx->module_kernel_threads_max = module_kernel_threads_max; module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; diff --git a/src/modules/scrypt_common.c b/src/modules/scrypt_common.c index bbaa3b556..081d63f01 100644 --- a/src/modules/scrypt_common.c +++ b/src/modules/scrypt_common.c @@ -54,10 +54,10 @@ const char *scrypt_module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t const u32 scrypt_N = (hashes->salts_buf[0].scrypt_N == 0) ? hashes->st_salts_buf[0].scrypt_N : hashes->salts_buf[0].scrypt_N; const u32 scrypt_r = (hashes->salts_buf[0].scrypt_r == 0) ? hashes->st_salts_buf[0].scrypt_r : hashes->salts_buf[0].scrypt_r; - const u32 scrypt_p = (hashes->salts_buf[0].scrypt_p == 0) ? hashes->st_salts_buf[0].scrypt_p : hashes->salts_buf[0].scrypt_p; + //const u32 scrypt_p = (hashes->salts_buf[0].scrypt_p == 0) ? hashes->st_salts_buf[0].scrypt_p : hashes->salts_buf[0].scrypt_p; const u64 size_per_accel = (128ULL * scrypt_r * scrypt_N * scrypt_exptected_threads (hashconfig, user_options, user_options_extra, device_param)); - const u64 state_per_accel = (128ULL * scrypt_r * scrypt_p * scrypt_exptected_threads (hashconfig, user_options, user_options_extra, device_param)); + //const u64 state_per_accel = (128ULL * scrypt_r * scrypt_p * scrypt_exptected_threads (hashconfig, user_options, user_options_extra, device_param)); int lines_sz = 4096; char *lines_buf = hcmalloc (lines_sz); @@ -65,7 +65,7 @@ const char *scrypt_module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t const u32 device_processors = device_param->device_processors; - const u32 device_local_mem_size = device_param->device_local_mem_size; + //const u32 device_local_mem_size = device_param->device_local_mem_size; const u64 fixed_mem = (512 * 1024 * 1024); // some storage we need for pws[], tmps[], and others @@ -160,21 +160,6 @@ const char *scrypt_module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t break; } - - if (device_param->is_hip == true) - { - // we use some local memory to speed up things, so - // we need to make sure there's enough local memory available - - u64 state_per_accel_tmto = state_per_accel >> tmto; - - while (state_per_accel_tmto > device_local_mem_size) - { - tmto++; - - state_per_accel_tmto = state_per_accel >> tmto; - } - } } } @@ -301,7 +286,7 @@ char *scrypt_module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconf scrypt_r, scrypt_p, tmto, - tmp_size / 16); + tmp_size / 4); return jit_build_options; } diff --git a/src/shared.c b/src/shared.c index 4661c6934..3a4a1cfe2 100644 --- a/src/shared.c +++ b/src/shared.c @@ -1582,3 +1582,40 @@ bool remove_file_suffix (char *file, const char *suffix) return true; } +#if defined (_WIN) +#define DEVNULL "NUL" +#else +#define DEVNULL "/dev/null" +#endif + +int suppress_stderr (void) +{ + int null_fd = open (DEVNULL, O_WRONLY); + + if (null_fd < 0) return -1; + + int saved_fd = dup (fileno (stderr)); + + if (saved_fd < 0) + { + close (null_fd); + + return -1; + } + + dup2 (null_fd, fileno (stderr)); + + close (null_fd); + + return saved_fd; +} + +void restore_stderr (int saved_fd) +{ + if (saved_fd < 0) return; + + dup2 (saved_fd, fileno (stderr)); + + close (saved_fd); +} + diff --git a/tools/benchmark_deep.pl b/tools/benchmark_deep.pl index a7a09ae9f..09e38928a 100755 --- a/tools/benchmark_deep.pl +++ b/tools/benchmark_deep.pl @@ -34,7 +34,7 @@ if ($cpu_benchmark == 1) } else { - system ("rocm-smi --resetprofile --resetclocks --resetfans"); + #system ("rocm-smi --resetprofile --resetclocks --resetfans"); system ("rocm-smi --setfan 100% --setperflevel high"); system ("nvidia-settings -a GPUPowerMizerMode=1 -a GPUFanControlState=1 -a GPUTargetFanSpeed=100"); From 15ada5124ea257429103c084b68580ba0a55c478 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Sat, 21 Jun 2025 17:41:26 +0200 Subject: [PATCH 83/95] Further simplified the use of inc_hash_scrypt.cl without any speed regression, and updated all affected plugin kernels. Use m08900-pure.cl as a template. Updated kernel declarations from "KERNEL_FQ void HC_ATTR_SEQ" to "KERNEL_FQ KERNEL_FA void". Please update your custom plugin kernels accordingly. Added spilling size as a factor in calculating usable memory per device. This is based on undocumented variables and may not be 100% accurate, but it works well in practice. Added a compiler hint to scrypt-based kernels indicating the guaranteed maximum thread count per kernel invocation. Removed redundant kernel code 29800, as it is identical to 27700, and updated the plugin. --- OpenCL/amp_a0.cl | 2 +- OpenCL/amp_a1.cl | 2 +- OpenCL/amp_a3.cl | 2 +- OpenCL/inc_hash_scrypt.cl | 255 +++++++++++++++++++++++++--------- OpenCL/inc_hash_scrypt.h | 12 ++ OpenCL/inc_vendor.h | 12 +- OpenCL/m00000_a0-optimized.cl | 12 +- OpenCL/m00000_a0-pure.cl | 4 +- OpenCL/m00000_a1-optimized.cl | 12 +- OpenCL/m00000_a1-pure.cl | 4 +- OpenCL/m00000_a3-optimized.cl | 12 +- OpenCL/m00000_a3-pure.cl | 4 +- OpenCL/m00010_a0-optimized.cl | 12 +- OpenCL/m00010_a0-pure.cl | 4 +- OpenCL/m00010_a1-optimized.cl | 12 +- OpenCL/m00010_a1-pure.cl | 4 +- OpenCL/m00010_a3-optimized.cl | 12 +- OpenCL/m00010_a3-pure.cl | 4 +- OpenCL/m00020_a0-optimized.cl | 12 +- OpenCL/m00020_a0-pure.cl | 4 +- OpenCL/m00020_a1-optimized.cl | 12 +- OpenCL/m00020_a1-pure.cl | 4 +- OpenCL/m00020_a3-optimized.cl | 12 +- OpenCL/m00020_a3-pure.cl | 4 +- OpenCL/m00030_a0-optimized.cl | 12 +- OpenCL/m00030_a0-pure.cl | 4 +- OpenCL/m00030_a1-optimized.cl | 12 +- OpenCL/m00030_a1-pure.cl | 4 +- OpenCL/m00030_a3-optimized.cl | 12 +- OpenCL/m00030_a3-pure.cl | 4 +- OpenCL/m00040_a0-optimized.cl | 12 +- OpenCL/m00040_a0-pure.cl | 4 +- OpenCL/m00040_a1-optimized.cl | 12 +- OpenCL/m00040_a1-pure.cl | 4 +- OpenCL/m00040_a3-optimized.cl | 12 +- OpenCL/m00040_a3-pure.cl | 4 +- OpenCL/m00050_a0-optimized.cl | 12 +- OpenCL/m00050_a0-pure.cl | 4 +- OpenCL/m00050_a1-optimized.cl | 12 +- OpenCL/m00050_a1-pure.cl | 4 +- OpenCL/m00050_a3-optimized.cl | 12 +- OpenCL/m00050_a3-pure.cl | 4 +- OpenCL/m00060_a0-optimized.cl | 12 +- OpenCL/m00060_a0-pure.cl | 4 +- OpenCL/m00060_a1-optimized.cl | 12 +- OpenCL/m00060_a1-pure.cl | 4 +- OpenCL/m00060_a3-optimized.cl | 12 +- OpenCL/m00060_a3-pure.cl | 4 +- OpenCL/m00070_a0-optimized.cl | 12 +- OpenCL/m00070_a0-pure.cl | 4 +- OpenCL/m00070_a1-optimized.cl | 12 +- OpenCL/m00070_a1-pure.cl | 4 +- OpenCL/m00070_a3-optimized.cl | 12 +- OpenCL/m00070_a3-pure.cl | 4 +- OpenCL/m00100_a0-optimized.cl | 12 +- OpenCL/m00100_a0-pure.cl | 4 +- OpenCL/m00100_a1-optimized.cl | 12 +- OpenCL/m00100_a1-pure.cl | 4 +- OpenCL/m00100_a3-optimized.cl | 12 +- OpenCL/m00100_a3-pure.cl | 4 +- OpenCL/m00110_a0-optimized.cl | 12 +- OpenCL/m00110_a0-pure.cl | 4 +- OpenCL/m00110_a1-optimized.cl | 12 +- OpenCL/m00110_a1-pure.cl | 4 +- OpenCL/m00110_a3-optimized.cl | 12 +- OpenCL/m00110_a3-pure.cl | 4 +- OpenCL/m00120_a0-optimized.cl | 12 +- OpenCL/m00120_a0-pure.cl | 4 +- OpenCL/m00120_a1-optimized.cl | 12 +- OpenCL/m00120_a1-pure.cl | 4 +- OpenCL/m00120_a3-optimized.cl | 12 +- OpenCL/m00120_a3-pure.cl | 4 +- OpenCL/m00130_a0-optimized.cl | 12 +- OpenCL/m00130_a0-pure.cl | 4 +- OpenCL/m00130_a1-optimized.cl | 12 +- OpenCL/m00130_a1-pure.cl | 4 +- OpenCL/m00130_a3-optimized.cl | 12 +- OpenCL/m00130_a3-pure.cl | 4 +- OpenCL/m00140_a0-optimized.cl | 12 +- OpenCL/m00140_a0-pure.cl | 4 +- OpenCL/m00140_a1-optimized.cl | 12 +- OpenCL/m00140_a1-pure.cl | 4 +- OpenCL/m00140_a3-optimized.cl | 12 +- OpenCL/m00140_a3-pure.cl | 4 +- OpenCL/m00150_a0-optimized.cl | 12 +- OpenCL/m00150_a0-pure.cl | 4 +- OpenCL/m00150_a1-optimized.cl | 12 +- OpenCL/m00150_a1-pure.cl | 4 +- OpenCL/m00150_a3-optimized.cl | 12 +- OpenCL/m00150_a3-pure.cl | 4 +- OpenCL/m00160_a0-optimized.cl | 12 +- OpenCL/m00160_a0-pure.cl | 4 +- OpenCL/m00160_a1-optimized.cl | 12 +- OpenCL/m00160_a1-pure.cl | 4 +- OpenCL/m00160_a3-optimized.cl | 12 +- OpenCL/m00160_a3-pure.cl | 4 +- OpenCL/m00170_a0-optimized.cl | 12 +- OpenCL/m00170_a0-pure.cl | 4 +- OpenCL/m00170_a1-optimized.cl | 12 +- OpenCL/m00170_a1-pure.cl | 4 +- OpenCL/m00170_a3-optimized.cl | 12 +- OpenCL/m00170_a3-pure.cl | 4 +- OpenCL/m00200_a0-optimized.cl | 12 +- OpenCL/m00200_a1-optimized.cl | 12 +- OpenCL/m00200_a3-optimized.cl | 12 +- OpenCL/m00300_a0-optimized.cl | 12 +- OpenCL/m00300_a0-pure.cl | 4 +- OpenCL/m00300_a1-optimized.cl | 12 +- OpenCL/m00300_a1-pure.cl | 4 +- OpenCL/m00300_a3-optimized.cl | 12 +- OpenCL/m00300_a3-pure.cl | 4 +- OpenCL/m00400-optimized.cl | 6 +- OpenCL/m00400-pure.cl | 6 +- OpenCL/m00500-optimized.cl | 6 +- OpenCL/m00500-pure.cl | 6 +- OpenCL/m00600_a0-optimized.cl | 12 +- OpenCL/m00600_a0-pure.cl | 4 +- OpenCL/m00600_a1-optimized.cl | 12 +- OpenCL/m00600_a1-pure.cl | 4 +- OpenCL/m00600_a3-optimized.cl | 12 +- OpenCL/m00600_a3-pure.cl | 4 +- OpenCL/m00610_a0-optimized.cl | 12 +- OpenCL/m00610_a0-pure.cl | 4 +- OpenCL/m00610_a1-optimized.cl | 12 +- OpenCL/m00610_a1-pure.cl | 4 +- OpenCL/m00610_a3-optimized.cl | 12 +- OpenCL/m00610_a3-pure.cl | 4 +- OpenCL/m00620_a0-optimized.cl | 12 +- OpenCL/m00620_a0-pure.cl | 4 +- OpenCL/m00620_a1-optimized.cl | 12 +- OpenCL/m00620_a1-pure.cl | 4 +- OpenCL/m00620_a3-optimized.cl | 12 +- OpenCL/m00620_a3-pure.cl | 4 +- OpenCL/m00900_a0-optimized.cl | 12 +- OpenCL/m00900_a0-pure.cl | 4 +- OpenCL/m00900_a1-optimized.cl | 12 +- OpenCL/m00900_a1-pure.cl | 4 +- OpenCL/m00900_a3-optimized.cl | 12 +- OpenCL/m00900_a3-pure.cl | 4 +- OpenCL/m01000_a0-optimized.cl | 12 +- OpenCL/m01000_a0-pure.cl | 4 +- OpenCL/m01000_a1-optimized.cl | 12 +- OpenCL/m01000_a1-pure.cl | 4 +- OpenCL/m01000_a3-optimized.cl | 12 +- OpenCL/m01000_a3-pure.cl | 4 +- OpenCL/m01100_a0-optimized.cl | 12 +- OpenCL/m01100_a0-pure.cl | 4 +- OpenCL/m01100_a1-optimized.cl | 12 +- OpenCL/m01100_a1-pure.cl | 4 +- OpenCL/m01100_a3-optimized.cl | 12 +- OpenCL/m01100_a3-pure.cl | 4 +- OpenCL/m01300_a0-optimized.cl | 12 +- OpenCL/m01300_a0-pure.cl | 4 +- OpenCL/m01300_a1-optimized.cl | 12 +- OpenCL/m01300_a1-pure.cl | 4 +- OpenCL/m01300_a3-optimized.cl | 12 +- OpenCL/m01300_a3-pure.cl | 4 +- OpenCL/m01400_a0-optimized.cl | 12 +- OpenCL/m01400_a0-pure.cl | 4 +- OpenCL/m01400_a1-optimized.cl | 12 +- OpenCL/m01400_a1-pure.cl | 4 +- OpenCL/m01400_a3-optimized.cl | 12 +- OpenCL/m01400_a3-pure.cl | 4 +- OpenCL/m01410_a0-optimized.cl | 12 +- OpenCL/m01410_a0-pure.cl | 4 +- OpenCL/m01410_a1-optimized.cl | 12 +- OpenCL/m01410_a1-pure.cl | 4 +- OpenCL/m01410_a3-optimized.cl | 12 +- OpenCL/m01410_a3-pure.cl | 4 +- OpenCL/m01420_a0-optimized.cl | 12 +- OpenCL/m01420_a0-pure.cl | 4 +- OpenCL/m01420_a1-optimized.cl | 12 +- OpenCL/m01420_a1-pure.cl | 4 +- OpenCL/m01420_a3-optimized.cl | 12 +- OpenCL/m01420_a3-pure.cl | 4 +- OpenCL/m01430_a0-optimized.cl | 12 +- OpenCL/m01430_a0-pure.cl | 4 +- OpenCL/m01430_a1-optimized.cl | 12 +- OpenCL/m01430_a1-pure.cl | 4 +- OpenCL/m01430_a3-optimized.cl | 12 +- OpenCL/m01430_a3-pure.cl | 4 +- OpenCL/m01440_a0-optimized.cl | 12 +- OpenCL/m01440_a0-pure.cl | 4 +- OpenCL/m01440_a1-optimized.cl | 12 +- OpenCL/m01440_a1-pure.cl | 4 +- OpenCL/m01440_a3-optimized.cl | 12 +- OpenCL/m01440_a3-pure.cl | 4 +- OpenCL/m01450_a0-optimized.cl | 12 +- OpenCL/m01450_a0-pure.cl | 4 +- OpenCL/m01450_a1-optimized.cl | 12 +- OpenCL/m01450_a1-pure.cl | 4 +- OpenCL/m01450_a3-optimized.cl | 12 +- OpenCL/m01450_a3-pure.cl | 4 +- OpenCL/m01460_a0-optimized.cl | 12 +- OpenCL/m01460_a0-pure.cl | 4 +- OpenCL/m01460_a1-optimized.cl | 12 +- OpenCL/m01460_a1-pure.cl | 4 +- OpenCL/m01460_a3-optimized.cl | 12 +- OpenCL/m01460_a3-pure.cl | 4 +- OpenCL/m01470_a0-optimized.cl | 12 +- OpenCL/m01470_a0-pure.cl | 4 +- OpenCL/m01470_a1-optimized.cl | 12 +- OpenCL/m01470_a1-pure.cl | 4 +- OpenCL/m01470_a3-optimized.cl | 12 +- OpenCL/m01470_a3-pure.cl | 4 +- OpenCL/m01500_a0-pure.cl | 4 +- OpenCL/m01500_a1-pure.cl | 4 +- OpenCL/m01500_a3-pure.cl | 10 +- OpenCL/m01600-optimized.cl | 6 +- OpenCL/m01600-pure.cl | 6 +- OpenCL/m01700_a0-optimized.cl | 12 +- OpenCL/m01700_a0-pure.cl | 4 +- OpenCL/m01700_a1-optimized.cl | 12 +- OpenCL/m01700_a1-pure.cl | 4 +- OpenCL/m01700_a3-optimized.cl | 12 +- OpenCL/m01700_a3-pure.cl | 4 +- OpenCL/m01710_a0-optimized.cl | 12 +- OpenCL/m01710_a0-pure.cl | 4 +- OpenCL/m01710_a1-optimized.cl | 12 +- OpenCL/m01710_a1-pure.cl | 4 +- OpenCL/m01710_a3-optimized.cl | 12 +- OpenCL/m01710_a3-pure.cl | 4 +- OpenCL/m01720_a0-optimized.cl | 12 +- OpenCL/m01720_a0-pure.cl | 4 +- OpenCL/m01720_a1-optimized.cl | 12 +- OpenCL/m01720_a1-pure.cl | 4 +- OpenCL/m01720_a3-optimized.cl | 12 +- OpenCL/m01720_a3-pure.cl | 4 +- OpenCL/m01730_a0-optimized.cl | 12 +- OpenCL/m01730_a0-pure.cl | 4 +- OpenCL/m01730_a1-optimized.cl | 12 +- OpenCL/m01730_a1-pure.cl | 4 +- OpenCL/m01730_a3-optimized.cl | 12 +- OpenCL/m01730_a3-pure.cl | 4 +- OpenCL/m01740_a0-optimized.cl | 12 +- OpenCL/m01740_a0-pure.cl | 4 +- OpenCL/m01740_a1-optimized.cl | 12 +- OpenCL/m01740_a1-pure.cl | 4 +- OpenCL/m01740_a3-optimized.cl | 12 +- OpenCL/m01740_a3-pure.cl | 4 +- OpenCL/m01750_a0-optimized.cl | 12 +- OpenCL/m01750_a0-pure.cl | 4 +- OpenCL/m01750_a1-optimized.cl | 12 +- OpenCL/m01750_a1-pure.cl | 4 +- OpenCL/m01750_a3-optimized.cl | 12 +- OpenCL/m01750_a3-pure.cl | 4 +- OpenCL/m01760_a0-optimized.cl | 12 +- OpenCL/m01760_a0-pure.cl | 4 +- OpenCL/m01760_a1-optimized.cl | 12 +- OpenCL/m01760_a1-pure.cl | 4 +- OpenCL/m01760_a3-optimized.cl | 12 +- OpenCL/m01760_a3-pure.cl | 4 +- OpenCL/m01770_a0-optimized.cl | 12 +- OpenCL/m01770_a0-pure.cl | 4 +- OpenCL/m01770_a1-optimized.cl | 12 +- OpenCL/m01770_a1-pure.cl | 4 +- OpenCL/m01770_a3-optimized.cl | 12 +- OpenCL/m01770_a3-pure.cl | 4 +- OpenCL/m01800-optimized.cl | 6 +- OpenCL/m01800-pure.cl | 6 +- OpenCL/m02000_a0-optimized.cl | 12 +- OpenCL/m02000_a0-pure.cl | 4 +- OpenCL/m02000_a1-optimized.cl | 12 +- OpenCL/m02000_a1-pure.cl | 4 +- OpenCL/m02000_a3-optimized.cl | 12 +- OpenCL/m02000_a3-pure.cl | 4 +- OpenCL/m02100-pure.cl | 6 +- OpenCL/m02400_a0-optimized.cl | 12 +- OpenCL/m02400_a1-optimized.cl | 12 +- OpenCL/m02400_a3-optimized.cl | 12 +- OpenCL/m02410_a0-optimized.cl | 12 +- OpenCL/m02410_a1-optimized.cl | 12 +- OpenCL/m02410_a3-optimized.cl | 12 +- OpenCL/m02500-pure.cl | 12 +- OpenCL/m02501-pure.cl | 12 +- OpenCL/m02610_a0-optimized.cl | 12 +- OpenCL/m02610_a0-pure.cl | 4 +- OpenCL/m02610_a1-optimized.cl | 12 +- OpenCL/m02610_a1-pure.cl | 4 +- OpenCL/m02610_a3-optimized.cl | 12 +- OpenCL/m02610_a3-pure.cl | 4 +- OpenCL/m02630_a0-optimized.cl | 12 +- OpenCL/m02630_a0-pure.cl | 4 +- OpenCL/m02630_a1-optimized.cl | 12 +- OpenCL/m02630_a1-pure.cl | 4 +- OpenCL/m02630_a3-optimized.cl | 12 +- OpenCL/m02630_a3-pure.cl | 4 +- OpenCL/m02710_a0-optimized.cl | 12 +- OpenCL/m02710_a1-optimized.cl | 12 +- OpenCL/m02710_a3-optimized.cl | 12 +- OpenCL/m02810_a0-optimized.cl | 12 +- OpenCL/m02810_a0-pure.cl | 4 +- OpenCL/m02810_a1-optimized.cl | 12 +- OpenCL/m02810_a1-pure.cl | 4 +- OpenCL/m02810_a3-optimized.cl | 12 +- OpenCL/m02810_a3-pure.cl | 4 +- OpenCL/m03000_a0-pure.cl | 4 +- OpenCL/m03000_a1-pure.cl | 4 +- OpenCL/m03000_a3-pure.cl | 6 +- OpenCL/m03100_a0-optimized.cl | 12 +- OpenCL/m03100_a1-optimized.cl | 12 +- OpenCL/m03100_a3-optimized.cl | 12 +- OpenCL/m03200-pure.cl | 6 +- OpenCL/m03500_a0-optimized.cl | 12 +- OpenCL/m03500_a0-pure.cl | 4 +- OpenCL/m03500_a1-optimized.cl | 12 +- OpenCL/m03500_a1-pure.cl | 4 +- OpenCL/m03500_a3-optimized.cl | 12 +- OpenCL/m03500_a3-pure.cl | 4 +- OpenCL/m03610_a0-optimized.cl | 12 +- OpenCL/m03610_a0-pure.cl | 4 +- OpenCL/m03610_a1-optimized.cl | 12 +- OpenCL/m03610_a1-pure.cl | 4 +- OpenCL/m03610_a3-optimized.cl | 12 +- OpenCL/m03610_a3-pure.cl | 4 +- OpenCL/m03710_a0-optimized.cl | 12 +- OpenCL/m03710_a0-pure.cl | 4 +- OpenCL/m03710_a1-optimized.cl | 12 +- OpenCL/m03710_a1-pure.cl | 4 +- OpenCL/m03710_a3-optimized.cl | 12 +- OpenCL/m03710_a3-pure.cl | 4 +- OpenCL/m03730_a0-pure.cl | 4 +- OpenCL/m03730_a1-pure.cl | 4 +- OpenCL/m03730_a3-pure.cl | 4 +- OpenCL/m03800_a0-optimized.cl | 12 +- OpenCL/m03800_a0-pure.cl | 4 +- OpenCL/m03800_a1-optimized.cl | 12 +- OpenCL/m03800_a1-pure.cl | 4 +- OpenCL/m03800_a3-optimized.cl | 12 +- OpenCL/m03800_a3-pure.cl | 4 +- OpenCL/m03910_a0-optimized.cl | 12 +- OpenCL/m03910_a0-pure.cl | 4 +- OpenCL/m03910_a1-optimized.cl | 12 +- OpenCL/m03910_a1-pure.cl | 4 +- OpenCL/m03910_a3-optimized.cl | 12 +- OpenCL/m03910_a3-pure.cl | 4 +- OpenCL/m04010_a0-optimized.cl | 12 +- OpenCL/m04010_a0-pure.cl | 4 +- OpenCL/m04010_a1-optimized.cl | 12 +- OpenCL/m04010_a1-pure.cl | 4 +- OpenCL/m04010_a3-optimized.cl | 12 +- OpenCL/m04010_a3-pure.cl | 4 +- OpenCL/m04110_a0-optimized.cl | 12 +- OpenCL/m04110_a0-pure.cl | 4 +- OpenCL/m04110_a1-optimized.cl | 12 +- OpenCL/m04110_a1-pure.cl | 4 +- OpenCL/m04110_a3-optimized.cl | 12 +- OpenCL/m04110_a3-pure.cl | 4 +- OpenCL/m04310_a0-optimized.cl | 12 +- OpenCL/m04310_a0-pure.cl | 4 +- OpenCL/m04310_a1-optimized.cl | 12 +- OpenCL/m04310_a1-pure.cl | 4 +- OpenCL/m04310_a3-optimized.cl | 12 +- OpenCL/m04310_a3-pure.cl | 4 +- OpenCL/m04400_a0-optimized.cl | 12 +- OpenCL/m04400_a0-pure.cl | 4 +- OpenCL/m04400_a1-optimized.cl | 12 +- OpenCL/m04400_a1-pure.cl | 4 +- OpenCL/m04400_a3-optimized.cl | 12 +- OpenCL/m04400_a3-pure.cl | 4 +- OpenCL/m04410_a0-optimized.cl | 12 +- OpenCL/m04410_a0-pure.cl | 4 +- OpenCL/m04410_a1-optimized.cl | 12 +- OpenCL/m04410_a1-pure.cl | 4 +- OpenCL/m04410_a3-optimized.cl | 12 +- OpenCL/m04410_a3-pure.cl | 4 +- OpenCL/m04420_a0-optimized.cl | 12 +- OpenCL/m04420_a0-pure.cl | 4 +- OpenCL/m04420_a1-optimized.cl | 12 +- OpenCL/m04420_a1-pure.cl | 4 +- OpenCL/m04420_a3-optimized.cl | 12 +- OpenCL/m04420_a3-pure.cl | 4 +- OpenCL/m04430_a0-optimized.cl | 12 +- OpenCL/m04430_a0-pure.cl | 4 +- OpenCL/m04430_a1-optimized.cl | 12 +- OpenCL/m04430_a1-pure.cl | 4 +- OpenCL/m04430_a3-optimized.cl | 12 +- OpenCL/m04430_a3-pure.cl | 4 +- OpenCL/m04500_a0-optimized.cl | 12 +- OpenCL/m04500_a0-pure.cl | 4 +- OpenCL/m04500_a1-optimized.cl | 12 +- OpenCL/m04500_a1-pure.cl | 4 +- OpenCL/m04500_a3-optimized.cl | 12 +- OpenCL/m04500_a3-pure.cl | 4 +- OpenCL/m04510_a0-optimized.cl | 12 +- OpenCL/m04510_a0-pure.cl | 4 +- OpenCL/m04510_a1-optimized.cl | 12 +- OpenCL/m04510_a1-pure.cl | 4 +- OpenCL/m04510_a3-optimized.cl | 12 +- OpenCL/m04510_a3-pure.cl | 4 +- OpenCL/m04520_a0-optimized.cl | 12 +- OpenCL/m04520_a0-pure.cl | 4 +- OpenCL/m04520_a1-optimized.cl | 12 +- OpenCL/m04520_a1-pure.cl | 4 +- OpenCL/m04520_a3-optimized.cl | 12 +- OpenCL/m04520_a3-pure.cl | 4 +- OpenCL/m04700_a0-optimized.cl | 12 +- OpenCL/m04700_a0-pure.cl | 4 +- OpenCL/m04700_a1-optimized.cl | 12 +- OpenCL/m04700_a1-pure.cl | 4 +- OpenCL/m04700_a3-optimized.cl | 12 +- OpenCL/m04700_a3-pure.cl | 4 +- OpenCL/m04710_a0-optimized.cl | 12 +- OpenCL/m04710_a0-pure.cl | 4 +- OpenCL/m04710_a1-optimized.cl | 12 +- OpenCL/m04710_a1-pure.cl | 4 +- OpenCL/m04710_a3-optimized.cl | 12 +- OpenCL/m04710_a3-pure.cl | 4 +- OpenCL/m04800_a0-optimized.cl | 12 +- OpenCL/m04800_a0-pure.cl | 4 +- OpenCL/m04800_a1-optimized.cl | 12 +- OpenCL/m04800_a1-pure.cl | 4 +- OpenCL/m04800_a3-optimized.cl | 12 +- OpenCL/m04800_a3-pure.cl | 4 +- OpenCL/m04900_a0-optimized.cl | 12 +- OpenCL/m04900_a0-pure.cl | 4 +- OpenCL/m04900_a1-optimized.cl | 12 +- OpenCL/m04900_a1-pure.cl | 4 +- OpenCL/m04900_a3-optimized.cl | 12 +- OpenCL/m04900_a3-pure.cl | 4 +- OpenCL/m05000_a0-optimized.cl | 12 +- OpenCL/m05000_a0-pure.cl | 4 +- OpenCL/m05000_a1-optimized.cl | 12 +- OpenCL/m05000_a1-pure.cl | 4 +- OpenCL/m05000_a3-optimized.cl | 12 +- OpenCL/m05000_a3-pure.cl | 4 +- OpenCL/m05100_a0-optimized.cl | 12 +- OpenCL/m05100_a0-pure.cl | 4 +- OpenCL/m05100_a1-optimized.cl | 12 +- OpenCL/m05100_a1-pure.cl | 4 +- OpenCL/m05100_a3-optimized.cl | 12 +- OpenCL/m05100_a3-pure.cl | 4 +- OpenCL/m05200-pure.cl | 6 +- OpenCL/m05300_a0-optimized.cl | 12 +- OpenCL/m05300_a0-pure.cl | 4 +- OpenCL/m05300_a1-optimized.cl | 12 +- OpenCL/m05300_a1-pure.cl | 4 +- OpenCL/m05300_a3-optimized.cl | 12 +- OpenCL/m05300_a3-pure.cl | 4 +- OpenCL/m05400_a0-optimized.cl | 12 +- OpenCL/m05400_a0-pure.cl | 4 +- OpenCL/m05400_a1-optimized.cl | 12 +- OpenCL/m05400_a1-pure.cl | 4 +- OpenCL/m05400_a3-optimized.cl | 12 +- OpenCL/m05400_a3-pure.cl | 4 +- OpenCL/m05500_a0-optimized.cl | 12 +- OpenCL/m05500_a0-pure.cl | 4 +- OpenCL/m05500_a1-optimized.cl | 12 +- OpenCL/m05500_a1-pure.cl | 4 +- OpenCL/m05500_a3-optimized.cl | 12 +- OpenCL/m05500_a3-pure.cl | 4 +- OpenCL/m05600_a0-optimized.cl | 12 +- OpenCL/m05600_a0-pure.cl | 4 +- OpenCL/m05600_a1-optimized.cl | 12 +- OpenCL/m05600_a1-pure.cl | 4 +- OpenCL/m05600_a3-optimized.cl | 12 +- OpenCL/m05600_a3-pure.cl | 4 +- OpenCL/m05800-optimized.cl | 6 +- OpenCL/m05800-pure.cl | 6 +- OpenCL/m06000_a0-optimized.cl | 12 +- OpenCL/m06000_a0-pure.cl | 4 +- OpenCL/m06000_a1-optimized.cl | 12 +- OpenCL/m06000_a1-pure.cl | 4 +- OpenCL/m06000_a3-optimized.cl | 12 +- OpenCL/m06000_a3-pure.cl | 4 +- OpenCL/m06050_a0-pure.cl | 4 +- OpenCL/m06050_a1-pure.cl | 4 +- OpenCL/m06050_a3-pure.cl | 4 +- OpenCL/m06060_a0-pure.cl | 4 +- OpenCL/m06060_a1-pure.cl | 4 +- OpenCL/m06060_a3-pure.cl | 4 +- OpenCL/m06100_a0-optimized.cl | 12 +- OpenCL/m06100_a0-pure.cl | 4 +- OpenCL/m06100_a1-optimized.cl | 12 +- OpenCL/m06100_a1-pure.cl | 4 +- OpenCL/m06100_a3-optimized.cl | 12 +- OpenCL/m06100_a3-pure.cl | 4 +- OpenCL/m06211-pure.cl | 6 +- OpenCL/m06212-pure.cl | 6 +- OpenCL/m06213-pure.cl | 6 +- OpenCL/m06221-pure.cl | 6 +- OpenCL/m06222-pure.cl | 6 +- OpenCL/m06223-pure.cl | 6 +- OpenCL/m06231-pure.cl | 6 +- OpenCL/m06232-pure.cl | 6 +- OpenCL/m06233-pure.cl | 6 +- OpenCL/m06300-optimized.cl | 6 +- OpenCL/m06300-pure.cl | 6 +- OpenCL/m06400-pure.cl | 6 +- OpenCL/m06500-pure.cl | 6 +- OpenCL/m06600-pure.cl | 6 +- OpenCL/m06700-pure.cl | 6 +- OpenCL/m06800-pure.cl | 6 +- OpenCL/m06900_a0-optimized.cl | 12 +- OpenCL/m06900_a1-optimized.cl | 12 +- OpenCL/m06900_a3-optimized.cl | 12 +- OpenCL/m07000_a0-optimized.cl | 12 +- OpenCL/m07000_a0-pure.cl | 4 +- OpenCL/m07000_a1-optimized.cl | 12 +- OpenCL/m07000_a1-pure.cl | 4 +- OpenCL/m07000_a3-optimized.cl | 12 +- OpenCL/m07000_a3-pure.cl | 4 +- OpenCL/m07100-pure.cl | 6 +- OpenCL/m07300_a0-optimized.cl | 12 +- OpenCL/m07300_a0-pure.cl | 4 +- OpenCL/m07300_a1-optimized.cl | 12 +- OpenCL/m07300_a1-pure.cl | 4 +- OpenCL/m07300_a3-optimized.cl | 12 +- OpenCL/m07300_a3-pure.cl | 4 +- OpenCL/m07350_a0-optimized.cl | 12 +- OpenCL/m07350_a0-pure.cl | 4 +- OpenCL/m07350_a1-optimized.cl | 12 +- OpenCL/m07350_a1-pure.cl | 4 +- OpenCL/m07350_a3-optimized.cl | 12 +- OpenCL/m07350_a3-pure.cl | 4 +- OpenCL/m07400-optimized.cl | 6 +- OpenCL/m07400-pure.cl | 6 +- OpenCL/m07500_a0-optimized.cl | 12 +- OpenCL/m07500_a0-pure.cl | 4 +- OpenCL/m07500_a1-optimized.cl | 12 +- OpenCL/m07500_a1-pure.cl | 4 +- OpenCL/m07500_a3-optimized.cl | 12 +- OpenCL/m07500_a3-pure.cl | 4 +- OpenCL/m07700_a0-optimized.cl | 12 +- OpenCL/m07700_a1-optimized.cl | 12 +- OpenCL/m07700_a3-optimized.cl | 12 +- OpenCL/m07701_a0-optimized.cl | 12 +- OpenCL/m07701_a1-optimized.cl | 12 +- OpenCL/m07701_a3-optimized.cl | 12 +- OpenCL/m07800_a0-optimized.cl | 12 +- OpenCL/m07800_a1-optimized.cl | 12 +- OpenCL/m07800_a3-optimized.cl | 12 +- OpenCL/m07801_a0-optimized.cl | 12 +- OpenCL/m07801_a1-optimized.cl | 12 +- OpenCL/m07801_a3-optimized.cl | 12 +- OpenCL/m07900-pure.cl | 6 +- OpenCL/m08000_a0-optimized.cl | 12 +- OpenCL/m08000_a1-optimized.cl | 12 +- OpenCL/m08000_a3-optimized.cl | 12 +- OpenCL/m08100_a0-optimized.cl | 12 +- OpenCL/m08100_a0-pure.cl | 4 +- OpenCL/m08100_a1-optimized.cl | 12 +- OpenCL/m08100_a1-pure.cl | 4 +- OpenCL/m08100_a3-optimized.cl | 12 +- OpenCL/m08100_a3-pure.cl | 4 +- OpenCL/m08200-pure.cl | 6 +- OpenCL/m08300_a0-optimized.cl | 12 +- OpenCL/m08300_a0-pure.cl | 4 +- OpenCL/m08300_a1-optimized.cl | 12 +- OpenCL/m08300_a1-pure.cl | 4 +- OpenCL/m08300_a3-optimized.cl | 12 +- OpenCL/m08300_a3-pure.cl | 4 +- OpenCL/m08400_a0-optimized.cl | 12 +- OpenCL/m08400_a0-pure.cl | 4 +- OpenCL/m08400_a1-optimized.cl | 12 +- OpenCL/m08400_a1-pure.cl | 4 +- OpenCL/m08400_a3-optimized.cl | 12 +- OpenCL/m08400_a3-pure.cl | 4 +- OpenCL/m08500_a0-pure.cl | 4 +- OpenCL/m08500_a1-pure.cl | 4 +- OpenCL/m08500_a3-pure.cl | 4 +- OpenCL/m08600_a0-pure.cl | 4 +- OpenCL/m08600_a1-pure.cl | 4 +- OpenCL/m08600_a3-pure.cl | 4 +- OpenCL/m08700_a0-optimized.cl | 12 +- OpenCL/m08700_a1-optimized.cl | 12 +- OpenCL/m08700_a3-optimized.cl | 12 +- OpenCL/m08800-pure.cl | 6 +- OpenCL/m08900-pure.cl | 50 ++----- OpenCL/m09000-pure.cl | 6 +- OpenCL/m09100-pure.cl | 6 +- OpenCL/m09400-pure.cl | 6 +- OpenCL/m09500-pure.cl | 6 +- OpenCL/m09600-pure.cl | 6 +- OpenCL/m09700_a0-optimized.cl | 12 +- OpenCL/m09700_a1-optimized.cl | 12 +- OpenCL/m09700_a3-optimized.cl | 12 +- OpenCL/m09710_a0-optimized.cl | 12 +- OpenCL/m09710_a1-optimized.cl | 12 +- OpenCL/m09710_a3-optimized.cl | 12 +- OpenCL/m09720_a0-optimized.cl | 12 +- OpenCL/m09720_a1-optimized.cl | 12 +- OpenCL/m09720_a3-optimized.cl | 12 +- OpenCL/m09800_a0-optimized.cl | 12 +- OpenCL/m09800_a1-optimized.cl | 12 +- OpenCL/m09800_a3-optimized.cl | 12 +- OpenCL/m09810_a0-optimized.cl | 12 +- OpenCL/m09810_a1-optimized.cl | 12 +- OpenCL/m09810_a3-optimized.cl | 12 +- OpenCL/m09820_a0-optimized.cl | 12 +- OpenCL/m09820_a1-optimized.cl | 12 +- OpenCL/m09820_a3-optimized.cl | 12 +- OpenCL/m09900_a0-optimized.cl | 12 +- OpenCL/m09900_a0-pure.cl | 4 +- OpenCL/m09900_a1-optimized.cl | 12 +- OpenCL/m09900_a1-pure.cl | 4 +- OpenCL/m09900_a3-optimized.cl | 12 +- OpenCL/m09900_a3-pure.cl | 4 +- OpenCL/m10100_a0-optimized.cl | 12 +- OpenCL/m10100_a1-optimized.cl | 12 +- OpenCL/m10100_a3-optimized.cl | 12 +- OpenCL/m10300-pure.cl | 6 +- OpenCL/m10400_a0-optimized.cl | 12 +- OpenCL/m10400_a1-optimized.cl | 12 +- OpenCL/m10400_a3-optimized.cl | 12 +- OpenCL/m10410_a0-optimized.cl | 12 +- OpenCL/m10410_a1-optimized.cl | 12 +- OpenCL/m10410_a3-optimized.cl | 12 +- OpenCL/m10420_a0-optimized.cl | 12 +- OpenCL/m10420_a1-optimized.cl | 12 +- OpenCL/m10420_a3-optimized.cl | 12 +- OpenCL/m10500-pure.cl | 6 +- OpenCL/m10700-optimized.cl | 6 +- OpenCL/m10700-pure.cl | 6 +- OpenCL/m10800_a0-optimized.cl | 12 +- OpenCL/m10800_a0-pure.cl | 4 +- OpenCL/m10800_a1-optimized.cl | 12 +- OpenCL/m10800_a1-pure.cl | 4 +- OpenCL/m10800_a3-optimized.cl | 12 +- OpenCL/m10800_a3-pure.cl | 4 +- OpenCL/m10810_a0-optimized.cl | 12 +- OpenCL/m10810_a0-pure.cl | 4 +- OpenCL/m10810_a1-optimized.cl | 12 +- OpenCL/m10810_a1-pure.cl | 4 +- OpenCL/m10810_a3-optimized.cl | 12 +- OpenCL/m10810_a3-pure.cl | 4 +- OpenCL/m10820_a0-optimized.cl | 12 +- OpenCL/m10820_a0-pure.cl | 4 +- OpenCL/m10820_a1-optimized.cl | 12 +- OpenCL/m10820_a1-pure.cl | 4 +- OpenCL/m10820_a3-optimized.cl | 12 +- OpenCL/m10820_a3-pure.cl | 4 +- OpenCL/m10830_a0-optimized.cl | 12 +- OpenCL/m10830_a0-pure.cl | 4 +- OpenCL/m10830_a1-optimized.cl | 12 +- OpenCL/m10830_a1-pure.cl | 4 +- OpenCL/m10830_a3-optimized.cl | 12 +- OpenCL/m10830_a3-pure.cl | 4 +- OpenCL/m10840_a0-optimized.cl | 12 +- OpenCL/m10840_a0-pure.cl | 4 +- OpenCL/m10840_a1-optimized.cl | 12 +- OpenCL/m10840_a1-pure.cl | 4 +- OpenCL/m10840_a3-optimized.cl | 12 +- OpenCL/m10840_a3-pure.cl | 4 +- OpenCL/m10870_a0-optimized.cl | 12 +- OpenCL/m10870_a0-pure.cl | 4 +- OpenCL/m10870_a1-optimized.cl | 12 +- OpenCL/m10870_a1-pure.cl | 4 +- OpenCL/m10870_a3-optimized.cl | 12 +- OpenCL/m10870_a3-pure.cl | 4 +- OpenCL/m10900-pure.cl | 6 +- OpenCL/m11000_a0-optimized.cl | 12 +- OpenCL/m11000_a0-pure.cl | 4 +- OpenCL/m11000_a1-optimized.cl | 12 +- OpenCL/m11000_a1-pure.cl | 4 +- OpenCL/m11000_a3-optimized.cl | 12 +- OpenCL/m11000_a3-pure.cl | 4 +- OpenCL/m11100_a0-optimized.cl | 12 +- OpenCL/m11100_a0-pure.cl | 4 +- OpenCL/m11100_a1-optimized.cl | 12 +- OpenCL/m11100_a1-pure.cl | 4 +- OpenCL/m11100_a3-optimized.cl | 12 +- OpenCL/m11100_a3-pure.cl | 4 +- OpenCL/m11200_a0-optimized.cl | 12 +- OpenCL/m11200_a0-pure.cl | 4 +- OpenCL/m11200_a1-optimized.cl | 12 +- OpenCL/m11200_a1-pure.cl | 4 +- OpenCL/m11200_a3-optimized.cl | 12 +- OpenCL/m11200_a3-pure.cl | 4 +- OpenCL/m11300-pure.cl | 6 +- OpenCL/m11400_a0-pure.cl | 4 +- OpenCL/m11400_a1-pure.cl | 4 +- OpenCL/m11400_a3-pure.cl | 4 +- OpenCL/m11500_a0-optimized.cl | 12 +- OpenCL/m11500_a0-pure.cl | 4 +- OpenCL/m11500_a1-optimized.cl | 12 +- OpenCL/m11500_a1-pure.cl | 4 +- OpenCL/m11500_a3-optimized.cl | 12 +- OpenCL/m11500_a3-pure.cl | 4 +- OpenCL/m11600-optimized.cl | 8 +- OpenCL/m11600-pure.cl | 8 +- OpenCL/m11700_a0-optimized.cl | 12 +- OpenCL/m11700_a0-pure.cl | 4 +- OpenCL/m11700_a1-optimized.cl | 12 +- OpenCL/m11700_a1-pure.cl | 4 +- OpenCL/m11700_a3-optimized.cl | 12 +- OpenCL/m11700_a3-pure.cl | 4 +- OpenCL/m11750_a0-pure.cl | 4 +- OpenCL/m11750_a1-pure.cl | 4 +- OpenCL/m11750_a3-pure.cl | 4 +- OpenCL/m11760_a0-pure.cl | 4 +- OpenCL/m11760_a1-pure.cl | 4 +- OpenCL/m11760_a3-pure.cl | 4 +- OpenCL/m11800_a0-optimized.cl | 12 +- OpenCL/m11800_a0-pure.cl | 4 +- OpenCL/m11800_a1-optimized.cl | 12 +- OpenCL/m11800_a1-pure.cl | 4 +- OpenCL/m11800_a3-optimized.cl | 12 +- OpenCL/m11800_a3-pure.cl | 4 +- OpenCL/m11850_a0-pure.cl | 4 +- OpenCL/m11850_a1-pure.cl | 4 +- OpenCL/m11850_a3-pure.cl | 4 +- OpenCL/m11860_a0-pure.cl | 4 +- OpenCL/m11860_a1-pure.cl | 4 +- OpenCL/m11860_a3-pure.cl | 4 +- OpenCL/m11900-pure.cl | 6 +- OpenCL/m12000-pure.cl | 6 +- OpenCL/m12200-pure.cl | 6 +- OpenCL/m12300-pure.cl | 6 +- OpenCL/m12400-pure.cl | 6 +- OpenCL/m12500-optimized.cl | 6 +- OpenCL/m12500-pure.cl | 6 +- OpenCL/m12600_a0-optimized.cl | 12 +- OpenCL/m12600_a0-pure.cl | 4 +- OpenCL/m12600_a1-optimized.cl | 12 +- OpenCL/m12600_a1-pure.cl | 4 +- OpenCL/m12600_a3-optimized.cl | 12 +- OpenCL/m12600_a3-pure.cl | 4 +- OpenCL/m12700-pure.cl | 6 +- OpenCL/m12800-pure.cl | 6 +- OpenCL/m12900-pure.cl | 6 +- OpenCL/m13000-pure.cl | 6 +- OpenCL/m13100_a0-optimized.cl | 12 +- OpenCL/m13100_a0-pure.cl | 4 +- OpenCL/m13100_a1-optimized.cl | 12 +- OpenCL/m13100_a1-pure.cl | 4 +- OpenCL/m13100_a3-optimized.cl | 12 +- OpenCL/m13100_a3-pure.cl | 4 +- OpenCL/m13200-pure.cl | 6 +- OpenCL/m13300_a0-optimized.cl | 12 +- OpenCL/m13300_a0-pure.cl | 4 +- OpenCL/m13300_a1-optimized.cl | 12 +- OpenCL/m13300_a1-pure.cl | 4 +- OpenCL/m13300_a3-optimized.cl | 12 +- OpenCL/m13300_a3-pure.cl | 4 +- OpenCL/m13400-pure.cl | 6 +- OpenCL/m13500_a0-optimized.cl | 12 +- OpenCL/m13500_a0-pure.cl | 4 +- OpenCL/m13500_a1-optimized.cl | 12 +- OpenCL/m13500_a1-pure.cl | 4 +- OpenCL/m13500_a3-optimized.cl | 12 +- OpenCL/m13500_a3-pure.cl | 4 +- OpenCL/m13600-pure.cl | 6 +- OpenCL/m13711-pure.cl | 8 +- OpenCL/m13712-pure.cl | 8 +- OpenCL/m13713-pure.cl | 8 +- OpenCL/m13721-pure.cl | 8 +- OpenCL/m13722-pure.cl | 8 +- OpenCL/m13723-pure.cl | 8 +- OpenCL/m13731-pure.cl | 8 +- OpenCL/m13732-pure.cl | 8 +- OpenCL/m13733-pure.cl | 8 +- OpenCL/m13751-pure.cl | 8 +- OpenCL/m13752-pure.cl | 8 +- OpenCL/m13753-pure.cl | 8 +- OpenCL/m13771-pure.cl | 8 +- OpenCL/m13772-pure.cl | 8 +- OpenCL/m13773-pure.cl | 8 +- OpenCL/m13800_a0-optimized.cl | 12 +- OpenCL/m13800_a0-pure.cl | 4 +- OpenCL/m13800_a1-optimized.cl | 12 +- OpenCL/m13800_a1-pure.cl | 4 +- OpenCL/m13800_a3-optimized.cl | 12 +- OpenCL/m13800_a3-pure.cl | 4 +- OpenCL/m13900_a0-optimized.cl | 12 +- OpenCL/m13900_a0-pure.cl | 4 +- OpenCL/m13900_a1-optimized.cl | 12 +- OpenCL/m13900_a1-pure.cl | 4 +- OpenCL/m13900_a3-optimized.cl | 12 +- OpenCL/m13900_a3-pure.cl | 4 +- OpenCL/m14000_a0-pure.cl | 4 +- OpenCL/m14000_a1-pure.cl | 4 +- OpenCL/m14000_a3-pure.cl | 6 +- OpenCL/m14100_a0-pure.cl | 4 +- OpenCL/m14100_a1-pure.cl | 4 +- OpenCL/m14100_a3-pure.cl | 4 +- OpenCL/m14400_a0-optimized.cl | 12 +- OpenCL/m14400_a0-pure.cl | 4 +- OpenCL/m14400_a1-optimized.cl | 12 +- OpenCL/m14400_a1-pure.cl | 4 +- OpenCL/m14400_a3-optimized.cl | 12 +- OpenCL/m14400_a3-pure.cl | 4 +- OpenCL/m14511_a0-pure.cl | 4 +- OpenCL/m14511_a1-pure.cl | 4 +- OpenCL/m14511_a3-pure.cl | 4 +- OpenCL/m14512_a0-pure.cl | 4 +- OpenCL/m14512_a1-pure.cl | 4 +- OpenCL/m14512_a3-pure.cl | 4 +- OpenCL/m14513_a0-pure.cl | 4 +- OpenCL/m14513_a1-pure.cl | 4 +- OpenCL/m14513_a3-pure.cl | 4 +- OpenCL/m14521_a0-pure.cl | 4 +- OpenCL/m14521_a1-pure.cl | 4 +- OpenCL/m14521_a3-pure.cl | 4 +- OpenCL/m14522_a0-pure.cl | 4 +- OpenCL/m14522_a1-pure.cl | 4 +- OpenCL/m14522_a3-pure.cl | 4 +- OpenCL/m14523_a0-pure.cl | 4 +- OpenCL/m14523_a1-pure.cl | 4 +- OpenCL/m14523_a3-pure.cl | 4 +- OpenCL/m14531_a0-pure.cl | 4 +- OpenCL/m14531_a1-pure.cl | 4 +- OpenCL/m14531_a3-pure.cl | 4 +- OpenCL/m14532_a0-pure.cl | 4 +- OpenCL/m14532_a1-pure.cl | 4 +- OpenCL/m14532_a3-pure.cl | 4 +- OpenCL/m14533_a0-pure.cl | 4 +- OpenCL/m14533_a1-pure.cl | 4 +- OpenCL/m14533_a3-pure.cl | 4 +- OpenCL/m14541_a0-pure.cl | 4 +- OpenCL/m14541_a1-pure.cl | 4 +- OpenCL/m14541_a3-pure.cl | 4 +- OpenCL/m14542_a0-pure.cl | 4 +- OpenCL/m14542_a1-pure.cl | 4 +- OpenCL/m14542_a3-pure.cl | 4 +- OpenCL/m14543_a0-pure.cl | 4 +- OpenCL/m14543_a1-pure.cl | 4 +- OpenCL/m14543_a3-pure.cl | 4 +- OpenCL/m14551_a0-pure.cl | 4 +- OpenCL/m14551_a1-pure.cl | 4 +- OpenCL/m14551_a3-pure.cl | 4 +- OpenCL/m14552_a0-pure.cl | 4 +- OpenCL/m14552_a1-pure.cl | 4 +- OpenCL/m14552_a3-pure.cl | 4 +- OpenCL/m14553_a0-pure.cl | 4 +- OpenCL/m14553_a1-pure.cl | 4 +- OpenCL/m14553_a3-pure.cl | 4 +- OpenCL/m14611-pure.cl | 6 +- OpenCL/m14612-pure.cl | 6 +- OpenCL/m14613-pure.cl | 6 +- OpenCL/m14621-pure.cl | 6 +- OpenCL/m14622-pure.cl | 6 +- OpenCL/m14623-pure.cl | 6 +- OpenCL/m14631-pure.cl | 6 +- OpenCL/m14632-pure.cl | 6 +- OpenCL/m14633-pure.cl | 6 +- OpenCL/m14641-pure.cl | 6 +- OpenCL/m14642-pure.cl | 6 +- OpenCL/m14643-pure.cl | 6 +- OpenCL/m14700-pure.cl | 6 +- OpenCL/m14800-pure.cl | 10 +- OpenCL/m14900_a0-optimized.cl | 12 +- OpenCL/m14900_a1-optimized.cl | 12 +- OpenCL/m14900_a3-optimized.cl | 12 +- OpenCL/m15000_a0-optimized.cl | 12 +- OpenCL/m15000_a0-pure.cl | 4 +- OpenCL/m15000_a1-optimized.cl | 12 +- OpenCL/m15000_a1-pure.cl | 4 +- OpenCL/m15000_a3-optimized.cl | 12 +- OpenCL/m15000_a3-pure.cl | 4 +- OpenCL/m15100-pure.cl | 6 +- OpenCL/m15300-pure.cl | 6 +- OpenCL/m15310-pure.cl | 10 +- OpenCL/m15400_a0-optimized.cl | 12 +- OpenCL/m15400_a1-optimized.cl | 12 +- OpenCL/m15400_a3-optimized.cl | 12 +- OpenCL/m15500_a0-optimized.cl | 12 +- OpenCL/m15500_a0-pure.cl | 4 +- OpenCL/m15500_a1-optimized.cl | 12 +- OpenCL/m15500_a1-pure.cl | 4 +- OpenCL/m15500_a3-optimized.cl | 12 +- OpenCL/m15500_a3-pure.cl | 4 +- OpenCL/m15600-pure.cl | 6 +- OpenCL/m15700-pure.cl | 50 ++----- OpenCL/m15900-pure.cl | 6 +- OpenCL/m15910-pure.cl | 10 +- OpenCL/m16000_a0-pure.cl | 4 +- OpenCL/m16000_a1-pure.cl | 4 +- OpenCL/m16000_a3-pure.cl | 4 +- OpenCL/m16100_a0-optimized.cl | 12 +- OpenCL/m16100_a0-pure.cl | 4 +- OpenCL/m16100_a1-optimized.cl | 12 +- OpenCL/m16100_a1-pure.cl | 4 +- OpenCL/m16100_a3-optimized.cl | 12 +- OpenCL/m16100_a3-pure.cl | 4 +- OpenCL/m16200-pure.cl | 6 +- OpenCL/m16300-pure.cl | 6 +- OpenCL/m16400_a0-optimized.cl | 12 +- OpenCL/m16400_a0-pure.cl | 4 +- OpenCL/m16400_a1-optimized.cl | 12 +- OpenCL/m16400_a1-pure.cl | 4 +- OpenCL/m16400_a3-optimized.cl | 12 +- OpenCL/m16400_a3-pure.cl | 4 +- OpenCL/m16511_a0-pure.cl | 4 +- OpenCL/m16511_a1-pure.cl | 4 +- OpenCL/m16511_a3-pure.cl | 4 +- OpenCL/m16512_a0-pure.cl | 4 +- OpenCL/m16512_a1-pure.cl | 4 +- OpenCL/m16512_a3-pure.cl | 4 +- OpenCL/m16513_a0-pure.cl | 4 +- OpenCL/m16513_a1-pure.cl | 4 +- OpenCL/m16513_a3-pure.cl | 4 +- OpenCL/m16600_a0-optimized.cl | 12 +- OpenCL/m16600_a0-pure.cl | 4 +- OpenCL/m16600_a1-optimized.cl | 12 +- OpenCL/m16600_a1-pure.cl | 4 +- OpenCL/m16600_a3-optimized.cl | 12 +- OpenCL/m16600_a3-pure.cl | 4 +- OpenCL/m16800-pure.cl | 8 +- OpenCL/m16801-pure.cl | 8 +- OpenCL/m16900-pure.cl | 6 +- OpenCL/m17010-pure.cl | 12 +- OpenCL/m17020-pure.cl | 12 +- OpenCL/m17030-pure.cl | 12 +- OpenCL/m17040-pure.cl | 10 +- OpenCL/m17200_a0-pure.cl | 4 +- OpenCL/m17200_a1-pure.cl | 4 +- OpenCL/m17200_a3-pure.cl | 4 +- OpenCL/m17210_a0-pure.cl | 4 +- OpenCL/m17210_a1-pure.cl | 4 +- OpenCL/m17210_a3-pure.cl | 4 +- OpenCL/m17220_a0-pure.cl | 4 +- OpenCL/m17220_a1-pure.cl | 4 +- OpenCL/m17220_a3-pure.cl | 4 +- OpenCL/m17225_a0-pure.cl | 4 +- OpenCL/m17225_a1-pure.cl | 4 +- OpenCL/m17225_a3-pure.cl | 4 +- OpenCL/m17230_a0-pure.cl | 4 +- OpenCL/m17230_a1-pure.cl | 4 +- OpenCL/m17230_a3-pure.cl | 4 +- OpenCL/m17300_a0-optimized.cl | 12 +- OpenCL/m17300_a1-optimized.cl | 12 +- OpenCL/m17300_a3-optimized.cl | 12 +- OpenCL/m17400_a0-optimized.cl | 12 +- OpenCL/m17400_a1-optimized.cl | 12 +- OpenCL/m17400_a3-optimized.cl | 12 +- OpenCL/m17500_a0-optimized.cl | 12 +- OpenCL/m17500_a1-optimized.cl | 12 +- OpenCL/m17500_a3-optimized.cl | 12 +- OpenCL/m17600_a0-optimized.cl | 12 +- OpenCL/m17600_a1-optimized.cl | 12 +- OpenCL/m17600_a3-optimized.cl | 12 +- OpenCL/m17700_a0-optimized.cl | 12 +- OpenCL/m17700_a1-optimized.cl | 12 +- OpenCL/m17700_a3-optimized.cl | 12 +- OpenCL/m17800_a0-optimized.cl | 12 +- OpenCL/m17800_a1-optimized.cl | 12 +- OpenCL/m17800_a3-optimized.cl | 12 +- OpenCL/m17900_a0-optimized.cl | 12 +- OpenCL/m17900_a1-optimized.cl | 12 +- OpenCL/m17900_a3-optimized.cl | 12 +- OpenCL/m18000_a0-optimized.cl | 12 +- OpenCL/m18000_a1-optimized.cl | 12 +- OpenCL/m18000_a3-optimized.cl | 12 +- OpenCL/m18100_a0-pure.cl | 4 +- OpenCL/m18100_a1-pure.cl | 4 +- OpenCL/m18100_a3-pure.cl | 4 +- OpenCL/m18200_a0-optimized.cl | 12 +- OpenCL/m18200_a0-pure.cl | 4 +- OpenCL/m18200_a1-optimized.cl | 12 +- OpenCL/m18200_a1-pure.cl | 4 +- OpenCL/m18200_a3-optimized.cl | 12 +- OpenCL/m18200_a3-pure.cl | 4 +- OpenCL/m18300-pure.cl | 6 +- OpenCL/m18400-pure.cl | 6 +- OpenCL/m18500_a0-pure.cl | 4 +- OpenCL/m18500_a1-pure.cl | 4 +- OpenCL/m18500_a3-pure.cl | 4 +- OpenCL/m18600-pure.cl | 6 +- OpenCL/m18700_a0-optimized.cl | 12 +- OpenCL/m18700_a0-pure.cl | 4 +- OpenCL/m18700_a1-optimized.cl | 12 +- OpenCL/m18700_a1-pure.cl | 4 +- OpenCL/m18700_a3-optimized.cl | 12 +- OpenCL/m18700_a3-pure.cl | 4 +- OpenCL/m18800-pure.cl | 6 +- OpenCL/m18900-pure.cl | 6 +- OpenCL/m19000-pure.cl | 6 +- OpenCL/m19100-pure.cl | 6 +- OpenCL/m19200-pure.cl | 6 +- OpenCL/m19300_a0-pure.cl | 4 +- OpenCL/m19300_a1-pure.cl | 4 +- OpenCL/m19300_a3-pure.cl | 4 +- OpenCL/m19500_a0-pure.cl | 4 +- OpenCL/m19500_a1-pure.cl | 4 +- OpenCL/m19500_a3-pure.cl | 4 +- OpenCL/m19600-pure.cl | 6 +- OpenCL/m19700-pure.cl | 6 +- OpenCL/m19800-pure.cl | 6 +- OpenCL/m19900-pure.cl | 6 +- OpenCL/m20011-pure.cl | 6 +- OpenCL/m20012-pure.cl | 6 +- OpenCL/m20013-pure.cl | 6 +- OpenCL/m20500_a0-pure.cl | 4 +- OpenCL/m20500_a1-pure.cl | 4 +- OpenCL/m20500_a3-pure.cl | 4 +- OpenCL/m20510_a0-pure.cl | 4 +- OpenCL/m20510_a1-pure.cl | 4 +- OpenCL/m20510_a3-pure.cl | 4 +- OpenCL/m20600-pure.cl | 6 +- OpenCL/m20710_a0-optimized.cl | 12 +- OpenCL/m20710_a0-pure.cl | 4 +- OpenCL/m20710_a1-optimized.cl | 12 +- OpenCL/m20710_a1-pure.cl | 4 +- OpenCL/m20710_a3-optimized.cl | 12 +- OpenCL/m20710_a3-pure.cl | 4 +- OpenCL/m20712_a0-optimized.cl | 12 +- OpenCL/m20712_a0-pure.cl | 4 +- OpenCL/m20712_a1-optimized.cl | 12 +- OpenCL/m20712_a1-pure.cl | 4 +- OpenCL/m20712_a3-optimized.cl | 12 +- OpenCL/m20712_a3-pure.cl | 4 +- OpenCL/m20720_a0-pure.cl | 4 +- OpenCL/m20720_a1-pure.cl | 4 +- OpenCL/m20720_a3-pure.cl | 4 +- OpenCL/m20730_a0-pure.cl | 4 +- OpenCL/m20730_a1-pure.cl | 4 +- OpenCL/m20730_a3-pure.cl | 4 +- OpenCL/m20800_a0-optimized.cl | 12 +- OpenCL/m20800_a0-pure.cl | 4 +- OpenCL/m20800_a1-optimized.cl | 12 +- OpenCL/m20800_a1-pure.cl | 4 +- OpenCL/m20800_a3-optimized.cl | 12 +- OpenCL/m20800_a3-pure.cl | 4 +- OpenCL/m20900_a0-optimized.cl | 12 +- OpenCL/m20900_a0-pure.cl | 4 +- OpenCL/m20900_a1-optimized.cl | 12 +- OpenCL/m20900_a1-pure.cl | 4 +- OpenCL/m20900_a3-optimized.cl | 12 +- OpenCL/m20900_a3-pure.cl | 4 +- OpenCL/m21000_a0-optimized.cl | 12 +- OpenCL/m21000_a0-pure.cl | 4 +- OpenCL/m21000_a1-optimized.cl | 12 +- OpenCL/m21000_a1-pure.cl | 4 +- OpenCL/m21000_a3-optimized.cl | 12 +- OpenCL/m21000_a3-pure.cl | 4 +- OpenCL/m21100_a0-optimized.cl | 12 +- OpenCL/m21100_a0-pure.cl | 4 +- OpenCL/m21100_a1-optimized.cl | 12 +- OpenCL/m21100_a1-pure.cl | 4 +- OpenCL/m21100_a3-optimized.cl | 12 +- OpenCL/m21100_a3-pure.cl | 4 +- OpenCL/m21200_a0-optimized.cl | 12 +- OpenCL/m21200_a0-pure.cl | 4 +- OpenCL/m21200_a1-optimized.cl | 12 +- OpenCL/m21200_a1-pure.cl | 4 +- OpenCL/m21200_a3-optimized.cl | 12 +- OpenCL/m21200_a3-pure.cl | 4 +- OpenCL/m21300_a0-pure.cl | 4 +- OpenCL/m21300_a1-pure.cl | 4 +- OpenCL/m21300_a3-pure.cl | 4 +- OpenCL/m21310_a0-pure.cl | 4 +- OpenCL/m21310_a1-pure.cl | 4 +- OpenCL/m21310_a3-pure.cl | 4 +- OpenCL/m21400_a0-optimized.cl | 12 +- OpenCL/m21400_a0-pure.cl | 4 +- OpenCL/m21400_a1-optimized.cl | 12 +- OpenCL/m21400_a1-pure.cl | 4 +- OpenCL/m21400_a3-optimized.cl | 12 +- OpenCL/m21400_a3-pure.cl | 4 +- OpenCL/m21420_a0-pure.cl | 4 +- OpenCL/m21420_a1-pure.cl | 4 +- OpenCL/m21420_a3-pure.cl | 4 +- OpenCL/m21500-pure.cl | 6 +- OpenCL/m21600-pure.cl | 6 +- OpenCL/m21700-pure.cl | 6 +- OpenCL/m21800-pure.cl | 6 +- OpenCL/m22000-pure.cl | 14 +- OpenCL/m22001-pure.cl | 14 +- OpenCL/m22100-pure.cl | 6 +- OpenCL/m22200_a0-optimized.cl | 12 +- OpenCL/m22200_a0-pure.cl | 4 +- OpenCL/m22200_a1-optimized.cl | 12 +- OpenCL/m22200_a1-pure.cl | 4 +- OpenCL/m22200_a3-optimized.cl | 12 +- OpenCL/m22200_a3-pure.cl | 4 +- OpenCL/m22300_a0-optimized.cl | 12 +- OpenCL/m22300_a0-pure.cl | 4 +- OpenCL/m22300_a1-optimized.cl | 12 +- OpenCL/m22300_a1-pure.cl | 4 +- OpenCL/m22300_a3-optimized.cl | 12 +- OpenCL/m22300_a3-pure.cl | 4 +- OpenCL/m22400-pure.cl | 6 +- OpenCL/m22500_a0-optimized.cl | 12 +- OpenCL/m22500_a0-pure.cl | 4 +- OpenCL/m22500_a1-optimized.cl | 12 +- OpenCL/m22500_a1-pure.cl | 4 +- OpenCL/m22500_a3-optimized.cl | 12 +- OpenCL/m22500_a3-pure.cl | 4 +- OpenCL/m22600-pure.cl | 6 +- OpenCL/m22700-pure.cl | 50 ++----- OpenCL/m22911_a0-pure.cl | 4 +- OpenCL/m22911_a1-pure.cl | 4 +- OpenCL/m22911_a3-pure.cl | 4 +- OpenCL/m22921_a0-pure.cl | 4 +- OpenCL/m22921_a1-pure.cl | 4 +- OpenCL/m22921_a3-pure.cl | 4 +- OpenCL/m22931_a0-pure.cl | 4 +- OpenCL/m22931_a1-pure.cl | 4 +- OpenCL/m22931_a3-pure.cl | 4 +- OpenCL/m22941_a0-pure.cl | 4 +- OpenCL/m22941_a1-pure.cl | 4 +- OpenCL/m22941_a3-pure.cl | 4 +- OpenCL/m22951_a0-pure.cl | 4 +- OpenCL/m22951_a1-pure.cl | 4 +- OpenCL/m22951_a3-pure.cl | 4 +- OpenCL/m23001_a0-optimized.cl | 12 +- OpenCL/m23001_a0-pure.cl | 4 +- OpenCL/m23001_a1-optimized.cl | 12 +- OpenCL/m23001_a1-pure.cl | 4 +- OpenCL/m23001_a3-optimized.cl | 12 +- OpenCL/m23001_a3-pure.cl | 4 +- OpenCL/m23002_a0-optimized.cl | 12 +- OpenCL/m23002_a0-pure.cl | 4 +- OpenCL/m23002_a1-optimized.cl | 12 +- OpenCL/m23002_a1-pure.cl | 4 +- OpenCL/m23002_a3-optimized.cl | 12 +- OpenCL/m23002_a3-pure.cl | 4 +- OpenCL/m23003_a0-optimized.cl | 12 +- OpenCL/m23003_a0-pure.cl | 4 +- OpenCL/m23003_a1-optimized.cl | 12 +- OpenCL/m23003_a1-pure.cl | 4 +- OpenCL/m23003_a3-optimized.cl | 12 +- OpenCL/m23003_a3-pure.cl | 4 +- OpenCL/m23100-pure.cl | 6 +- OpenCL/m23200-pure.cl | 6 +- OpenCL/m23300-pure.cl | 6 +- OpenCL/m23400-pure.cl | 10 +- OpenCL/m23500-pure.cl | 10 +- OpenCL/m23600-pure.cl | 10 +- OpenCL/m23700-optimized.cl | 8 +- OpenCL/m23700-pure.cl | 6 +- OpenCL/m23800-optimized.cl | 8 +- OpenCL/m23800-pure.cl | 8 +- OpenCL/m23900-pure.cl | 6 +- OpenCL/m24000-pure.cl | 50 ++----- OpenCL/m24100-pure.cl | 6 +- OpenCL/m24200-pure.cl | 6 +- OpenCL/m24300_a0-optimized.cl | 12 +- OpenCL/m24300_a0-pure.cl | 4 +- OpenCL/m24300_a1-optimized.cl | 12 +- OpenCL/m24300_a1-pure.cl | 4 +- OpenCL/m24300_a3-optimized.cl | 12 +- OpenCL/m24300_a3-pure.cl | 4 +- OpenCL/m24410-pure.cl | 6 +- OpenCL/m24420-pure.cl | 6 +- OpenCL/m24500-pure.cl | 6 +- OpenCL/m24610-pure.cl | 6 +- OpenCL/m24620-pure.cl | 6 +- OpenCL/m24630-pure.cl | 6 +- OpenCL/m24700_a0-optimized.cl | 12 +- OpenCL/m24700_a0-pure.cl | 4 +- OpenCL/m24700_a1-optimized.cl | 12 +- OpenCL/m24700_a1-pure.cl | 4 +- OpenCL/m24700_a3-optimized.cl | 12 +- OpenCL/m24700_a3-pure.cl | 4 +- OpenCL/m24800_a0-optimized.cl | 12 +- OpenCL/m24800_a0-pure.cl | 4 +- OpenCL/m24800_a1-optimized.cl | 12 +- OpenCL/m24800_a1-pure.cl | 4 +- OpenCL/m24800_a3-optimized.cl | 12 +- OpenCL/m24800_a3-pure.cl | 4 +- OpenCL/m24900_a0-optimized.cl | 12 +- OpenCL/m24900_a1-optimized.cl | 12 +- OpenCL/m24900_a3-optimized.cl | 12 +- OpenCL/m25000-pure.cl | 6 +- OpenCL/m25100-pure.cl | 6 +- OpenCL/m25200-pure.cl | 6 +- OpenCL/m25300-pure.cl | 6 +- OpenCL/m25400-pure.cl | 6 +- OpenCL/m25500-pure.cl | 8 +- OpenCL/m25600-pure.cl | 6 +- OpenCL/m25700_a0-optimized.cl | 12 +- OpenCL/m25700_a1-optimized.cl | 12 +- OpenCL/m25700_a3-optimized.cl | 12 +- OpenCL/m25800-pure.cl | 6 +- OpenCL/m25900-pure.cl | 6 +- OpenCL/m26000_a0-pure.cl | 4 +- OpenCL/m26000_a1-pure.cl | 4 +- OpenCL/m26000_a3-pure.cl | 4 +- OpenCL/m26100-pure.cl | 6 +- OpenCL/m26200_a0-pure.cl | 4 +- OpenCL/m26200_a1-pure.cl | 4 +- OpenCL/m26200_a3-pure.cl | 4 +- OpenCL/m26300_a0-pure.cl | 4 +- OpenCL/m26300_a1-pure.cl | 4 +- OpenCL/m26300_a3-pure.cl | 4 +- OpenCL/m26401_a0-optimized.cl | 12 +- OpenCL/m26401_a1-optimized.cl | 12 +- OpenCL/m26401_a3-optimized.cl | 12 +- OpenCL/m26402_a0-optimized.cl | 12 +- OpenCL/m26402_a1-optimized.cl | 12 +- OpenCL/m26402_a3-optimized.cl | 12 +- OpenCL/m26403_a0-optimized.cl | 12 +- OpenCL/m26403_a1-optimized.cl | 12 +- OpenCL/m26403_a3-optimized.cl | 12 +- OpenCL/m26500-pure.cl | 6 +- OpenCL/m26600-pure.cl | 6 +- OpenCL/m26610-pure.cl | 6 +- OpenCL/m26700-pure.cl | 6 +- OpenCL/m26800-pure.cl | 6 +- OpenCL/m26900-pure.cl | 6 +- OpenCL/m27000-pure.cl | 6 +- OpenCL/m27100-pure.cl | 6 +- OpenCL/m27200_a0-optimized.cl | 12 +- OpenCL/m27200_a0-pure.cl | 4 +- OpenCL/m27200_a1-optimized.cl | 12 +- OpenCL/m27200_a1-pure.cl | 4 +- OpenCL/m27200_a3-optimized.cl | 12 +- OpenCL/m27200_a3-pure.cl | 4 +- OpenCL/m27300-pure.cl | 6 +- OpenCL/m27400-pure.cl | 6 +- OpenCL/m27500-pure.cl | 10 +- OpenCL/m27600-pure.cl | 10 +- OpenCL/m27700-pure.cl | 51 ++----- OpenCL/m27800_a0-optimized.cl | 12 +- OpenCL/m27800_a1-optimized.cl | 12 +- OpenCL/m27800_a3-optimized.cl | 12 +- OpenCL/m27900_a0-optimized.cl | 12 +- OpenCL/m27900_a0-pure.cl | 4 +- OpenCL/m27900_a1-optimized.cl | 12 +- OpenCL/m27900_a1-pure.cl | 4 +- OpenCL/m27900_a3-optimized.cl | 12 +- OpenCL/m27900_a3-pure.cl | 4 +- OpenCL/m28000_a0-optimized.cl | 12 +- OpenCL/m28000_a0-pure.cl | 4 +- OpenCL/m28000_a1-optimized.cl | 12 +- OpenCL/m28000_a1-pure.cl | 4 +- OpenCL/m28000_a3-optimized.cl | 12 +- OpenCL/m28000_a3-pure.cl | 4 +- OpenCL/m28100-pure.cl | 6 +- OpenCL/m28200-pure.cl | 50 ++----- OpenCL/m28300_a0-pure.cl | 4 +- OpenCL/m28300_a1-pure.cl | 4 +- OpenCL/m28300_a3-pure.cl | 4 +- OpenCL/m28400-pure.cl | 6 +- OpenCL/m28501_a0-pure.cl | 4 +- OpenCL/m28501_a1-pure.cl | 4 +- OpenCL/m28501_a3-pure.cl | 4 +- OpenCL/m28502_a0-pure.cl | 4 +- OpenCL/m28502_a1-pure.cl | 4 +- OpenCL/m28502_a3-pure.cl | 4 +- OpenCL/m28505_a0-pure.cl | 4 +- OpenCL/m28505_a1-pure.cl | 4 +- OpenCL/m28505_a3-pure.cl | 4 +- OpenCL/m28506_a0-pure.cl | 4 +- OpenCL/m28506_a1-pure.cl | 4 +- OpenCL/m28506_a3-pure.cl | 4 +- OpenCL/m28600-pure.cl | 6 +- OpenCL/m28700_a0-optimized.cl | 12 +- OpenCL/m28700_a0-pure.cl | 4 +- OpenCL/m28700_a1-optimized.cl | 12 +- OpenCL/m28700_a1-pure.cl | 4 +- OpenCL/m28700_a3-optimized.cl | 12 +- OpenCL/m28700_a3-pure.cl | 4 +- OpenCL/m28800-pure.cl | 6 +- OpenCL/m28900-pure.cl | 6 +- OpenCL/m29000_a0-pure.cl | 4 +- OpenCL/m29000_a1-pure.cl | 4 +- OpenCL/m29000_a3-pure.cl | 4 +- OpenCL/m29100_a0-pure.cl | 4 +- OpenCL/m29100_a1-pure.cl | 4 +- OpenCL/m29100_a3-pure.cl | 4 +- OpenCL/m29200_a0-pure.cl | 4 +- OpenCL/m29200_a1-pure.cl | 4 +- OpenCL/m29200_a3-pure.cl | 4 +- OpenCL/m29600-pure.cl | 6 +- OpenCL/m29700-pure.cl | 6 +- OpenCL/m29800-pure.cl | 249 --------------------------------- OpenCL/m29910-pure.cl | 6 +- OpenCL/m29920-pure.cl | 6 +- OpenCL/m29930-pure.cl | 6 +- OpenCL/m29940-pure.cl | 6 +- OpenCL/m30420_a0-optimized.cl | 12 +- OpenCL/m30420_a0-pure.cl | 4 +- OpenCL/m30420_a1-optimized.cl | 12 +- OpenCL/m30420_a1-pure.cl | 4 +- OpenCL/m30420_a3-optimized.cl | 12 +- OpenCL/m30420_a3-pure.cl | 4 +- OpenCL/m30500_a0-optimized.cl | 12 +- OpenCL/m30500_a0-pure.cl | 4 +- OpenCL/m30500_a1-optimized.cl | 12 +- OpenCL/m30500_a1-pure.cl | 4 +- OpenCL/m30500_a3-optimized.cl | 12 +- OpenCL/m30500_a3-pure.cl | 4 +- OpenCL/m30600-pure.cl | 6 +- OpenCL/m30700_a0-optimized.cl | 12 +- OpenCL/m30700_a0-pure.cl | 4 +- OpenCL/m30700_a1-optimized.cl | 12 +- OpenCL/m30700_a1-pure.cl | 4 +- OpenCL/m30700_a3-optimized.cl | 12 +- OpenCL/m30700_a3-pure.cl | 4 +- OpenCL/m30901_a0-pure.cl | 4 +- OpenCL/m30901_a1-pure.cl | 4 +- OpenCL/m30901_a3-pure.cl | 4 +- OpenCL/m30902_a0-pure.cl | 4 +- OpenCL/m30902_a1-pure.cl | 4 +- OpenCL/m30902_a3-pure.cl | 4 +- OpenCL/m30905_a0-pure.cl | 4 +- OpenCL/m30905_a1-pure.cl | 4 +- OpenCL/m30905_a3-pure.cl | 4 +- OpenCL/m30906_a0-pure.cl | 4 +- OpenCL/m30906_a1-pure.cl | 4 +- OpenCL/m30906_a3-pure.cl | 4 +- OpenCL/m31000_a0-optimized.cl | 12 +- OpenCL/m31000_a0-pure.cl | 4 +- OpenCL/m31000_a1-optimized.cl | 12 +- OpenCL/m31000_a1-pure.cl | 4 +- OpenCL/m31000_a3-optimized.cl | 12 +- OpenCL/m31000_a3-pure.cl | 4 +- OpenCL/m31100_a0-optimized.cl | 12 +- OpenCL/m31100_a0-pure.cl | 4 +- OpenCL/m31100_a1-optimized.cl | 12 +- OpenCL/m31100_a1-pure.cl | 4 +- OpenCL/m31100_a3-optimized.cl | 12 +- OpenCL/m31100_a3-pure.cl | 4 +- OpenCL/m31200-pure.cl | 6 +- OpenCL/m31300_a0-optimized.cl | 12 +- OpenCL/m31300_a0-pure.cl | 4 +- OpenCL/m31300_a1-optimized.cl | 12 +- OpenCL/m31300_a1-pure.cl | 4 +- OpenCL/m31300_a3-optimized.cl | 12 +- OpenCL/m31300_a3-pure.cl | 4 +- OpenCL/m31400_a0-optimized.cl | 12 +- OpenCL/m31400_a0-pure.cl | 4 +- OpenCL/m31400_a1-optimized.cl | 12 +- OpenCL/m31400_a1-pure.cl | 4 +- OpenCL/m31400_a3-optimized.cl | 12 +- OpenCL/m31400_a3-pure.cl | 4 +- OpenCL/m31500-pure.cl | 6 +- OpenCL/m31600-pure.cl | 6 +- OpenCL/m31700_a0-pure.cl | 4 +- OpenCL/m31700_a1-pure.cl | 4 +- OpenCL/m31700_a3-pure.cl | 4 +- OpenCL/m31800-pure.cl | 6 +- OpenCL/m31900-pure.cl | 6 +- OpenCL/m32000-pure.cl | 6 +- OpenCL/m32010-pure.cl | 6 +- OpenCL/m32020-pure.cl | 6 +- OpenCL/m32030-pure.cl | 6 +- OpenCL/m32040-pure.cl | 6 +- OpenCL/m32100-pure.cl | 6 +- OpenCL/m32200-pure.cl | 6 +- OpenCL/m32300_a0-optimized.cl | 12 +- OpenCL/m32300_a0-pure.cl | 4 +- OpenCL/m32300_a1-optimized.cl | 12 +- OpenCL/m32300_a1-pure.cl | 4 +- OpenCL/m32300_a3-optimized.cl | 12 +- OpenCL/m32300_a3-pure.cl | 4 +- OpenCL/m32410_a0-pure.cl | 4 +- OpenCL/m32410_a1-pure.cl | 4 +- OpenCL/m32410_a3-pure.cl | 4 +- OpenCL/m32420_a0-pure.cl | 4 +- OpenCL/m32420_a1-pure.cl | 4 +- OpenCL/m32420_a3-pure.cl | 4 +- OpenCL/m32500-pure.cl | 6 +- OpenCL/m32600_a0-pure.cl | 4 +- OpenCL/m32600_a1-pure.cl | 4 +- OpenCL/m32600_a3-pure.cl | 4 +- OpenCL/m32700-pure.cl | 6 +- OpenCL/m33300_a0-pure.cl | 4 +- OpenCL/m33300_a1-pure.cl | 4 +- OpenCL/m33300_a3-pure.cl | 4 +- OpenCL/m33500_a0-optimized.cl | 12 +- OpenCL/m33500_a1-optimized.cl | 12 +- OpenCL/m33500_a3-optimized.cl | 12 +- OpenCL/m33501_a0-optimized.cl | 12 +- OpenCL/m33501_a1-optimized.cl | 12 +- OpenCL/m33501_a3-optimized.cl | 12 +- OpenCL/m33502_a0-optimized.cl | 12 +- OpenCL/m33502_a1-optimized.cl | 12 +- OpenCL/m33502_a3-optimized.cl | 12 +- OpenCL/m33700-pure.cl | 6 +- OpenCL/m33800-pure.cl | 10 +- OpenCL/m70000-pure.cl | 6 +- OpenCL/m70100-pure.cl | 6 +- OpenCL/m72000-pure.cl | 6 +- OpenCL/m73000-pure.cl | 6 +- OpenCL/markov_be.cl | 6 +- OpenCL/markov_le.cl | 6 +- OpenCL/shared.cl | 10 +- src/modules/module_29800.c | 2 +- src/modules/scrypt_common.c | 36 ++++- 1373 files changed, 5411 insertions(+), 5658 deletions(-) delete mode 100644 OpenCL/m29800-pure.cl diff --git a/OpenCL/amp_a0.cl b/OpenCL/amp_a0.cl index e09b9fbb2..5e4a1ae55 100644 --- a/OpenCL/amp_a0.cl +++ b/OpenCL/amp_a0.cl @@ -13,7 +13,7 @@ #include M2S(INCLUDE_PATH/inc_amp.h) #endif -KERNEL_FQ void HC_ATTR_SEQ amp (KERN_ATTR_AMP) +KERNEL_FQ KERNEL_FA void amp (KERN_ATTR_AMP) { const u64 gid = get_global_id (0); diff --git a/OpenCL/amp_a1.cl b/OpenCL/amp_a1.cl index eff542abe..b1cfc1c1d 100644 --- a/OpenCL/amp_a1.cl +++ b/OpenCL/amp_a1.cl @@ -11,7 +11,7 @@ #include M2S(INCLUDE_PATH/inc_amp.h) #endif -KERNEL_FQ void HC_ATTR_SEQ amp (KERN_ATTR_AMP) +KERNEL_FQ KERNEL_FA void amp (KERN_ATTR_AMP) { const u64 gid = get_global_id (0); diff --git a/OpenCL/amp_a3.cl b/OpenCL/amp_a3.cl index e657252eb..a5b74c85f 100644 --- a/OpenCL/amp_a3.cl +++ b/OpenCL/amp_a3.cl @@ -10,7 +10,7 @@ #include M2S(INCLUDE_PATH/inc_amp.h) #endif -KERNEL_FQ void HC_ATTR_SEQ amp (KERN_ATTR_AMP) +KERNEL_FQ KERNEL_FA void amp (KERN_ATTR_AMP) { const u64 gid = get_global_id (0); diff --git a/OpenCL/inc_hash_scrypt.cl b/OpenCL/inc_hash_scrypt.cl index f18f75250..d0c7e6a65 100644 --- a/OpenCL/inc_hash_scrypt.cl +++ b/OpenCL/inc_hash_scrypt.cl @@ -9,9 +9,31 @@ #include "inc_common.h" #include "inc_hash_scrypt.h" +#if SCRYPT_R > 1 +DECLSPEC void shuffle (PRIVATE_AS u32 *TI) +{ + u32 TT[STATE_CNT4 / 2]; + + for (int dst_off = 0, src_off = SALSA_CNT4; src_off < STATE_CNT4; dst_off += SALSA_CNT4, src_off += SALSA_CNT4 * 2) + { + for (int j = 0; j < SALSA_CNT4; j++) TT[dst_off + j] = TI[src_off + j]; + } + + for (int dst_off = SALSA_CNT4, src_off = SALSA_CNT4 * 2; src_off < STATE_CNT4; dst_off += SALSA_CNT4, src_off += SALSA_CNT4 * 2) + { + for (int j = 0; j < SALSA_CNT4; j++) TI[dst_off + j] = TI[src_off + j]; + } + + for (int dst_off = STATE_CNT4 / 2, src_off = 0; dst_off < STATE_CNT4; dst_off += SALSA_CNT4, src_off += SALSA_CNT4) + { + for (int j = 0; j < SALSA_CNT4; j++) TI[dst_off + j] = TT[src_off + j]; + } +} +#endif + DECLSPEC void salsa_r (PRIVATE_AS u32 *TI) { - u32 TT[STATE_CNT4/2]; // we actually nned 16 here for SALSA, but we reuse that buffer for blockmix + u32 TT[16]; for (int j = 0; j < SALSA_CNT4; j++) TT[j] = TI[STATE_CNT4 - 16 + j]; @@ -112,28 +134,9 @@ DECLSPEC void salsa_r (PRIVATE_AS u32 *TI) for (int j = 0; j < SALSA_CNT4; j++) TI[i + j] = TT[j]; } - - #if SCRYPT_R > 1 - - for (int dst_off = 0, src_off = SALSA_CNT4; src_off < STATE_CNT4; dst_off += SALSA_CNT4, src_off += SALSA_CNT4 * 2) - { - for (int j = 0; j < SALSA_CNT4; j++) TT[dst_off + j] = TI[src_off + j]; - } - - for (int dst_off = SALSA_CNT4, src_off = SALSA_CNT4 * 2; src_off < STATE_CNT4; dst_off += SALSA_CNT4, src_off += SALSA_CNT4 * 2) - { - for (int j = 0; j < SALSA_CNT4; j++) TI[dst_off + j] = TI[src_off + j]; - } - - for (int dst_off = STATE_CNT4 / 2, src_off = 0; dst_off < STATE_CNT4; dst_off += SALSA_CNT4, src_off += SALSA_CNT4) - { - for (int j = 0; j < SALSA_CNT4; j++) TI[dst_off + j] = TT[src_off + j]; - } - - #endif } -DECLSPEC void scrypt_smix_init (PRIVATE_AS u32 *X, GLOBAL_AS void *V0, GLOBAL_AS void *V1, GLOBAL_AS void *V2, GLOBAL_AS void *V3, const u32 gid, const u32 lid, const u32 lsz, const u32 bid) +DECLSPEC void scrypt_smix_init (GLOBAL_AS u32 *P, PRIVATE_AS u32 *X, GLOBAL_AS void *V0, GLOBAL_AS void *V1, GLOBAL_AS void *V2, GLOBAL_AS void *V3, const u32 gid, const u32 lid, const u32 lsz, const u32 bid) { const u32 ySIZE = SCRYPT_N >> SCRYPT_TMTO; const u32 zSIZE = STATE_CNT44; @@ -153,15 +156,26 @@ DECLSPEC void scrypt_smix_init (PRIVATE_AS u32 *X, GLOBAL_AS void *V0, GLOBAL_AS case 3: V = (GLOBAL_AS uint4 *) V3; break; } + for (u32 i = 0; i < STATE_CNT4; i++) X[i] = P[i]; + for (u32 y = 0; y < ySIZE; y++) { for (u32 z = 0; z < zSIZE; z++) V[VIDX(xd4, lsz, lid, ySIZE, zSIZE, y, z)] = X4[z]; - for (u32 i = 0; i < (1 << SCRYPT_TMTO); i++) salsa_r (X); + for (u32 i = 0; i < (1 << SCRYPT_TMTO); i++) + { + salsa_r (X); + + #if SCRYPT_R > 1 + shuffle (X); + #endif + } } + + for (u32 i = 0; i < STATE_CNT4; i++) P[i] = X[i]; } -DECLSPEC void scrypt_smix_loop (PRIVATE_AS u32 *X, PRIVATE_AS u32 *T, GLOBAL_AS void *V0, GLOBAL_AS void *V1, GLOBAL_AS void *V2, GLOBAL_AS void *V3, const u32 gid, const u32 lid, const u32 lsz, const u32 bid) +DECLSPEC void scrypt_smix_loop (GLOBAL_AS u32 *P, PRIVATE_AS u32 *X, PRIVATE_AS u32 *T, GLOBAL_AS void *V0, GLOBAL_AS void *V1, GLOBAL_AS void *V2, GLOBAL_AS void *V3, const u32 gid, const u32 lid, const u32 lsz, const u32 bid) { const u32 ySIZE = SCRYPT_N >> SCRYPT_TMTO; const u32 zSIZE = STATE_CNT44; @@ -182,6 +196,8 @@ DECLSPEC void scrypt_smix_loop (PRIVATE_AS u32 *X, PRIVATE_AS u32 *T, GLOBAL_AS case 3: V = (GLOBAL_AS uint4 *) V3; break; } + for (u32 i = 0; i < STATE_CNT4; i++) X[i] = P[i]; + // note: max 1024 iterations = forced -u 2048 const u32 N_max = (SCRYPT_N < 2048) ? SCRYPT_N : 2048; @@ -196,36 +212,49 @@ DECLSPEC void scrypt_smix_loop (PRIVATE_AS u32 *X, PRIVATE_AS u32 *T, GLOBAL_AS for (u32 z = 0; z < zSIZE; z++) T4[z] = V[VIDX(xd4, lsz, lid, ySIZE, zSIZE, y, z)]; - for (u32 i = 0; i < km; i++) salsa_r (T); + for (u32 i = 0; i < km; i++) + { + salsa_r (T); + + #if SCRYPT_R > 1 + shuffle (T); + #endif + } for (u32 z = 0; z < zSIZE; z++) X4[z] = X4[z] ^ T4[z]; salsa_r (X); + + #if SCRYPT_R > 1 + shuffle (X); + #endif } + + for (u32 i = 0; i < STATE_CNT4; i++) P[i] = X[i]; } -DECLSPEC void scrypt_blockmix_in (PRIVATE_AS u32 *out_buf, const int out_len) +DECLSPEC void scrypt_blockmix_in (GLOBAL_AS u32 *in_buf, GLOBAL_AS u32 *out_buf, const int out_len) { for (int i = 0, j = 0; i < out_len; i += SALSA_SZ, j += SALSA_CNT4) { u32 X[SALSA_CNT4]; - X[ 0] = out_buf[j + 0]; - X[ 1] = out_buf[j + 5]; - X[ 2] = out_buf[j + 10]; - X[ 3] = out_buf[j + 15]; - X[ 4] = out_buf[j + 4]; - X[ 5] = out_buf[j + 9]; - X[ 6] = out_buf[j + 14]; - X[ 7] = out_buf[j + 3]; - X[ 8] = out_buf[j + 8]; - X[ 9] = out_buf[j + 13]; - X[10] = out_buf[j + 2]; - X[11] = out_buf[j + 7]; - X[12] = out_buf[j + 12]; - X[13] = out_buf[j + 1]; - X[14] = out_buf[j + 6]; - X[15] = out_buf[j + 11]; + X[ 0] = in_buf[j + 0]; + X[ 1] = in_buf[j + 5]; + X[ 2] = in_buf[j + 10]; + X[ 3] = in_buf[j + 15]; + X[ 4] = in_buf[j + 4]; + X[ 5] = in_buf[j + 9]; + X[ 6] = in_buf[j + 14]; + X[ 7] = in_buf[j + 3]; + X[ 8] = in_buf[j + 8]; + X[ 9] = in_buf[j + 13]; + X[10] = in_buf[j + 2]; + X[11] = in_buf[j + 7]; + X[12] = in_buf[j + 12]; + X[13] = in_buf[j + 1]; + X[14] = in_buf[j + 6]; + X[15] = in_buf[j + 11]; out_buf[j + 0] = X[ 0]; out_buf[j + 1] = X[ 1]; @@ -246,28 +275,28 @@ DECLSPEC void scrypt_blockmix_in (PRIVATE_AS u32 *out_buf, const int out_len) } } -DECLSPEC void scrypt_blockmix_out (PRIVATE_AS u32 *out_buf, const int out_len) +DECLSPEC void scrypt_blockmix_out (GLOBAL_AS u32 *in_buf, GLOBAL_AS u32 *out_buf, const int out_len) { for (int i = 0, j = 0; i < out_len; i += SALSA_SZ, j += SALSA_CNT4) { u32 T[SALSA_CNT4]; - T[ 0] = out_buf[j + 0]; - T[ 1] = out_buf[j + 13]; - T[ 2] = out_buf[j + 10]; - T[ 3] = out_buf[j + 7]; - T[ 4] = out_buf[j + 4]; - T[ 5] = out_buf[j + 1]; - T[ 6] = out_buf[j + 14]; - T[ 7] = out_buf[j + 11]; - T[ 8] = out_buf[j + 8]; - T[ 9] = out_buf[j + 5]; - T[10] = out_buf[j + 2]; - T[11] = out_buf[j + 15]; - T[12] = out_buf[j + 12]; - T[13] = out_buf[j + 9]; - T[14] = out_buf[j + 6]; - T[15] = out_buf[j + 3]; + T[ 0] = in_buf[j + 0]; + T[ 1] = in_buf[j + 13]; + T[ 2] = in_buf[j + 10]; + T[ 3] = in_buf[j + 7]; + T[ 4] = in_buf[j + 4]; + T[ 5] = in_buf[j + 1]; + T[ 6] = in_buf[j + 14]; + T[ 7] = in_buf[j + 11]; + T[ 8] = in_buf[j + 8]; + T[ 9] = in_buf[j + 5]; + T[10] = in_buf[j + 2]; + T[11] = in_buf[j + 15]; + T[12] = in_buf[j + 12]; + T[13] = in_buf[j + 9]; + T[14] = in_buf[j + 6]; + T[15] = in_buf[j + 3]; out_buf[j + 0] = T[ 0]; out_buf[j + 1] = T[ 1]; @@ -288,7 +317,7 @@ DECLSPEC void scrypt_blockmix_out (PRIVATE_AS u32 *out_buf, const int out_len) } } -DECLSPEC void scrypt_pbkdf2_body (PRIVATE_AS sha256_hmac_ctx_t *sha256_hmac_ctx, PRIVATE_AS u32 *out_buf, const int out_len) +DECLSPEC void scrypt_pbkdf2_body_pp (PRIVATE_AS sha256_hmac_ctx_t *sha256_hmac_ctx, PRIVATE_AS u32 *out_buf, const int out_len) { for (int i = 0, j = 1, k = 0; i < out_len; i += 32, j += 1, k += 8) { @@ -336,7 +365,55 @@ DECLSPEC void scrypt_pbkdf2_body (PRIVATE_AS sha256_hmac_ctx_t *sha256_hmac_ctx, } } -DECLSPEC void scrypt_pbkdf2_pp (PRIVATE_AS const u32 *pw_buf, const int pw_len, PRIVATE_AS const u32 *salt_buf, const int salt_len, PRIVATE_AS u32 *out_buf, const int out_len) +DECLSPEC void scrypt_pbkdf2_body_pg (PRIVATE_AS sha256_hmac_ctx_t *sha256_hmac_ctx, GLOBAL_AS u32 *out_buf, const int out_len) +{ + for (int i = 0, j = 1, k = 0; i < out_len; i += 32, j += 1, k += 8) + { + sha256_hmac_ctx_t sha256_hmac_ctx2 = *sha256_hmac_ctx; + + u32 w0[4]; + u32 w1[4]; + u32 w2[4]; + u32 w3[4]; + + w0[0] = j; + w0[1] = 0; + w0[2] = 0; + w0[3] = 0; + w1[0] = 0; + w1[1] = 0; + w1[2] = 0; + w1[3] = 0; + w2[0] = 0; + w2[1] = 0; + w2[2] = 0; + w2[3] = 0; + w3[0] = 0; + w3[1] = 0; + w3[2] = 0; + w3[3] = 0; + + sha256_hmac_update_64 (&sha256_hmac_ctx2, w0, w1, w2, w3, 4); + + sha256_hmac_final (&sha256_hmac_ctx2); + + // this will not work if user specifies output length not a multiple of 4 + // probably never happens... + // let's hope the compiler will auto optimize this since out_len is very likely + // a constant at caller level + + if (out_len >= (i + 4)) out_buf[k + 0] = hc_swap32_S (sha256_hmac_ctx2.opad.h[0]); + if (out_len >= (i + 8)) out_buf[k + 1] = hc_swap32_S (sha256_hmac_ctx2.opad.h[1]); + if (out_len >= (i + 12)) out_buf[k + 2] = hc_swap32_S (sha256_hmac_ctx2.opad.h[2]); + if (out_len >= (i + 16)) out_buf[k + 3] = hc_swap32_S (sha256_hmac_ctx2.opad.h[3]); + if (out_len >= (i + 20)) out_buf[k + 4] = hc_swap32_S (sha256_hmac_ctx2.opad.h[4]); + if (out_len >= (i + 24)) out_buf[k + 5] = hc_swap32_S (sha256_hmac_ctx2.opad.h[5]); + if (out_len >= (i + 28)) out_buf[k + 6] = hc_swap32_S (sha256_hmac_ctx2.opad.h[6]); + if (out_len >= (i + 32)) out_buf[k + 7] = hc_swap32_S (sha256_hmac_ctx2.opad.h[7]); + } +} + +DECLSPEC void scrypt_pbkdf2_ppp (PRIVATE_AS const u32 *pw_buf, const int pw_len, PRIVATE_AS const u32 *salt_buf, const int salt_len, PRIVATE_AS u32 *out_buf, const int out_len) { sha256_hmac_ctx_t sha256_hmac_ctx; @@ -344,10 +421,10 @@ DECLSPEC void scrypt_pbkdf2_pp (PRIVATE_AS const u32 *pw_buf, const int pw_len, sha256_hmac_update_swap (&sha256_hmac_ctx, salt_buf, salt_len); - scrypt_pbkdf2_body (&sha256_hmac_ctx, out_buf, out_len); + scrypt_pbkdf2_body_pp (&sha256_hmac_ctx, out_buf, out_len); } -DECLSPEC void scrypt_pbkdf2_pg (PRIVATE_AS const u32 *pw_buf, const int pw_len, GLOBAL_AS const u32 *salt_buf, const int salt_len, PRIVATE_AS u32 *out_buf, const int out_len) +DECLSPEC void scrypt_pbkdf2_pgp (PRIVATE_AS const u32 *pw_buf, const int pw_len, GLOBAL_AS const u32 *salt_buf, const int salt_len, PRIVATE_AS u32 *out_buf, const int out_len) { sha256_hmac_ctx_t sha256_hmac_ctx; @@ -355,10 +432,10 @@ DECLSPEC void scrypt_pbkdf2_pg (PRIVATE_AS const u32 *pw_buf, const int pw_len, sha256_hmac_update_global_swap (&sha256_hmac_ctx, salt_buf, salt_len); - scrypt_pbkdf2_body (&sha256_hmac_ctx, out_buf, out_len); + scrypt_pbkdf2_body_pp (&sha256_hmac_ctx, out_buf, out_len); } -DECLSPEC void scrypt_pbkdf2_gp (GLOBAL_AS const u32 *pw_buf, const int pw_len, PRIVATE_AS const u32 *salt_buf, const int salt_len, PRIVATE_AS u32 *out_buf, const int out_len) +DECLSPEC void scrypt_pbkdf2_gpp (GLOBAL_AS const u32 *pw_buf, const int pw_len, PRIVATE_AS const u32 *salt_buf, const int salt_len, PRIVATE_AS u32 *out_buf, const int out_len) { sha256_hmac_ctx_t sha256_hmac_ctx; @@ -366,10 +443,10 @@ DECLSPEC void scrypt_pbkdf2_gp (GLOBAL_AS const u32 *pw_buf, const int pw_len, P sha256_hmac_update_swap (&sha256_hmac_ctx, salt_buf, salt_len); - scrypt_pbkdf2_body (&sha256_hmac_ctx, out_buf, out_len); + scrypt_pbkdf2_body_pp (&sha256_hmac_ctx, out_buf, out_len); } -DECLSPEC void scrypt_pbkdf2_gg (GLOBAL_AS const u32 *pw_buf, const int pw_len, GLOBAL_AS const u32 *salt_buf, const int salt_len, PRIVATE_AS u32 *out_buf, const int out_len) +DECLSPEC void scrypt_pbkdf2_ggp (GLOBAL_AS const u32 *pw_buf, const int pw_len, GLOBAL_AS const u32 *salt_buf, const int salt_len, PRIVATE_AS u32 *out_buf, const int out_len) { sha256_hmac_ctx_t sha256_hmac_ctx; @@ -377,6 +454,50 @@ DECLSPEC void scrypt_pbkdf2_gg (GLOBAL_AS const u32 *pw_buf, const int pw_len, G sha256_hmac_update_global_swap (&sha256_hmac_ctx, salt_buf, salt_len); - scrypt_pbkdf2_body (&sha256_hmac_ctx, out_buf, out_len); + scrypt_pbkdf2_body_pp (&sha256_hmac_ctx, out_buf, out_len); +} + +DECLSPEC void scrypt_pbkdf2_ppg (PRIVATE_AS const u32 *pw_buf, const int pw_len, PRIVATE_AS const u32 *salt_buf, const int salt_len, GLOBAL_AS u32 *out_buf, const int out_len) +{ + sha256_hmac_ctx_t sha256_hmac_ctx; + + sha256_hmac_init_swap (&sha256_hmac_ctx, pw_buf, pw_len); + + sha256_hmac_update_swap (&sha256_hmac_ctx, salt_buf, salt_len); + + scrypt_pbkdf2_body_pg (&sha256_hmac_ctx, out_buf, out_len); +} + +DECLSPEC void scrypt_pbkdf2_pgg (PRIVATE_AS const u32 *pw_buf, const int pw_len, GLOBAL_AS const u32 *salt_buf, const int salt_len, GLOBAL_AS u32 *out_buf, const int out_len) +{ + sha256_hmac_ctx_t sha256_hmac_ctx; + + sha256_hmac_init_swap (&sha256_hmac_ctx, pw_buf, pw_len); + + sha256_hmac_update_global_swap (&sha256_hmac_ctx, salt_buf, salt_len); + + scrypt_pbkdf2_body_pg (&sha256_hmac_ctx, out_buf, out_len); +} + +DECLSPEC void scrypt_pbkdf2_gpg (GLOBAL_AS const u32 *pw_buf, const int pw_len, PRIVATE_AS const u32 *salt_buf, const int salt_len, GLOBAL_AS u32 *out_buf, const int out_len) +{ + sha256_hmac_ctx_t sha256_hmac_ctx; + + sha256_hmac_init_global_swap (&sha256_hmac_ctx, pw_buf, pw_len); + + sha256_hmac_update_swap (&sha256_hmac_ctx, salt_buf, salt_len); + + scrypt_pbkdf2_body_pg (&sha256_hmac_ctx, out_buf, out_len); +} + +DECLSPEC void scrypt_pbkdf2_ggg (GLOBAL_AS const u32 *pw_buf, const int pw_len, GLOBAL_AS const u32 *salt_buf, const int salt_len, GLOBAL_AS u32 *out_buf, const int out_len) +{ + sha256_hmac_ctx_t sha256_hmac_ctx; + + sha256_hmac_init_global_swap (&sha256_hmac_ctx, pw_buf, pw_len); + + sha256_hmac_update_global_swap (&sha256_hmac_ctx, salt_buf, salt_len); + + scrypt_pbkdf2_body_pg (&sha256_hmac_ctx, out_buf, out_len); } diff --git a/OpenCL/inc_hash_scrypt.h b/OpenCL/inc_hash_scrypt.h index 9945c79a5..0fe8e527e 100644 --- a/OpenCL/inc_hash_scrypt.h +++ b/OpenCL/inc_hash_scrypt.h @@ -23,6 +23,7 @@ #define SALSA_SZ 64 #define SALSA_CNT4 (SALSA_SZ / 4) +#define SALSA_CNT44 ((SALSA_SZ / 4) / 4) #define VIDX(bid4,lsz,lid,ySIZE,zSIZE,y,z) (((bid4) * (lsz) * (ySIZE) * (zSIZE)) + ((lid) * (ySIZE) * (zSIZE)) + ((y) * (zSIZE)) + (z)) @@ -42,4 +43,15 @@ DECLSPEC uint4 operator ^ (const uint4 a, const uint4 b) #endif +typedef struct +{ + #ifndef SCRYPT_TMP_ELEM + #define SCRYPT_TMP_ELEM 1 + #endif + + u32 in[SCRYPT_TMP_ELEM / 2]; + u32 out[SCRYPT_TMP_ELEM / 2]; + +} scrypt_tmp_t; + #endif diff --git a/OpenCL/inc_vendor.h b/OpenCL/inc_vendor.h index 5d269beec..4221b3b9f 100644 --- a/OpenCL/inc_vendor.h +++ b/OpenCL/inc_vendor.h @@ -66,6 +66,12 @@ using namespace metal; #define KERNEL_FQ __kernel #endif +#if defined FIXED_LOCAL_SIZE +#define KERNEL_FA FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE) +#else +#define KERNEL_FA +#endif + #ifndef MAYBE_UNUSED #define MAYBE_UNUSED #endif @@ -158,12 +164,6 @@ using namespace metal; #define DECLSPEC #endif -#if defined FIXED_LOCAL_SIZE -#define HC_ATTR_SEQ FIXED_THREAD_COUNT((FIXED_LOCAL_SIZE)) -#else -#define HC_ATTR_SEQ -#endif - /** * AMD specific */ diff --git a/OpenCL/m00000_a0-optimized.cl b/OpenCL/m00000_a0-optimized.cl index 565fbf6a0..ba6dae580 100644 --- a/OpenCL/m00000_a0-optimized.cl +++ b/OpenCL/m00000_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00000_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00000_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -143,15 +143,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00000_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00000_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00000_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00000_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00000_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00000_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00000_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -293,10 +293,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00000_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00000_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00000_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00000_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00000_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00000_a0-pure.cl b/OpenCL/m00000_a0-pure.cl index 2dce8f19d..283aaeead 100644 --- a/OpenCL/m00000_a0-pure.cl +++ b/OpenCL/m00000_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00000_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00000_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00000_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00000_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00000_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00000_a1-optimized.cl b/OpenCL/m00000_a1-optimized.cl index 8f78de8e6..3cf9851c0 100644 --- a/OpenCL/m00000_a1-optimized.cl +++ b/OpenCL/m00000_a1-optimized.cl @@ -15,7 +15,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00000_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -201,15 +201,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00000_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00000_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00000_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00000_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -410,10 +410,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00000_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00000_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00000_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00000_a1-pure.cl b/OpenCL/m00000_a1-pure.cl index 4da9fa9be..16bffa5fe 100644 --- a/OpenCL/m00000_a1-pure.cl +++ b/OpenCL/m00000_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00000_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00000_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00000_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00000_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00000_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00000_a3-optimized.cl b/OpenCL/m00000_a3-optimized.cl index 4e4d607d4..4b22bd0c9 100644 --- a/OpenCL/m00000_a3-optimized.cl +++ b/OpenCL/m00000_a3-optimized.cl @@ -423,7 +423,7 @@ DECLSPEC void m00000s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m00000_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00000_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -463,7 +463,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00000_m04 (KERN_ATTR_VECTOR ()) m00000m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00000_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00000_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -503,7 +503,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00000_m08 (KERN_ATTR_VECTOR ()) m00000m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00000_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00000_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -543,7 +543,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00000_m16 (KERN_ATTR_VECTOR ()) m00000m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00000_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00000_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -583,7 +583,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00000_s04 (KERN_ATTR_VECTOR ()) m00000s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00000_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00000_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -623,7 +623,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00000_s08 (KERN_ATTR_VECTOR ()) m00000s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00000_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00000_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m00000_a3-pure.cl b/OpenCL/m00000_a3-pure.cl index 3582c4f9a..e05d4d292 100644 --- a/OpenCL/m00000_a3-pure.cl +++ b/OpenCL/m00000_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00000_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00000_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00000_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00000_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00000_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00010_a0-optimized.cl b/OpenCL/m00010_a0-optimized.cl index f1c8dc697..5bb64a831 100644 --- a/OpenCL/m00010_a0-optimized.cl +++ b/OpenCL/m00010_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00010_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00010_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -217,15 +217,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00010_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00010_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00010_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00010_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00010_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00010_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00010_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -441,10 +441,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00010_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00010_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00010_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00010_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00010_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00010_a0-pure.cl b/OpenCL/m00010_a0-pure.cl index 5decf5b9d..0b9a8472c 100644 --- a/OpenCL/m00010_a0-pure.cl +++ b/OpenCL/m00010_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00010_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00010_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00010_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00010_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00010_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00010_a1-optimized.cl b/OpenCL/m00010_a1-optimized.cl index 428f283fe..2d2fdfc82 100644 --- a/OpenCL/m00010_a1-optimized.cl +++ b/OpenCL/m00010_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00010_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00010_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -275,15 +275,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00010_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00010_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00010_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00010_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00010_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00010_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00010_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -559,10 +559,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00010_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00010_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00010_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00010_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00010_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00010_a1-pure.cl b/OpenCL/m00010_a1-pure.cl index 3a1cec1ee..7ef618342 100644 --- a/OpenCL/m00010_a1-pure.cl +++ b/OpenCL/m00010_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00010_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00010_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -67,7 +67,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00010_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00010_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00010_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00010_a3-optimized.cl b/OpenCL/m00010_a3-optimized.cl index 296cd2432..1cad7a5dd 100644 --- a/OpenCL/m00010_a3-optimized.cl +++ b/OpenCL/m00010_a3-optimized.cl @@ -472,7 +472,7 @@ DECLSPEC void m00010s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m00010_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00010_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -512,7 +512,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00010_m04 (KERN_ATTR_VECTOR ()) m00010m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00010_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00010_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -552,7 +552,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00010_m08 (KERN_ATTR_VECTOR ()) m00010m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00010_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00010_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -592,7 +592,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00010_m16 (KERN_ATTR_VECTOR ()) m00010m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00010_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00010_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -632,7 +632,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00010_s04 (KERN_ATTR_VECTOR ()) m00010s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00010_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00010_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -672,7 +672,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00010_s08 (KERN_ATTR_VECTOR ()) m00010s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00010_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00010_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m00010_a3-pure.cl b/OpenCL/m00010_a3-pure.cl index 83af011db..e7f149e4c 100644 --- a/OpenCL/m00010_a3-pure.cl +++ b/OpenCL/m00010_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00010_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00010_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00010_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00010_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00010_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00020_a0-optimized.cl b/OpenCL/m00020_a0-optimized.cl index a3572eb90..d0947fc7a 100644 --- a/OpenCL/m00020_a0-optimized.cl +++ b/OpenCL/m00020_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00020_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00020_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -197,15 +197,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00020_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00020_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00020_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00020_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00020_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00020_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00020_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -401,10 +401,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00020_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00020_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00020_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00020_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00020_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00020_a0-pure.cl b/OpenCL/m00020_a0-pure.cl index 51c53358f..1e2cb8614 100644 --- a/OpenCL/m00020_a0-pure.cl +++ b/OpenCL/m00020_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00020_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00020_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -64,7 +64,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00020_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00020_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00020_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00020_a1-optimized.cl b/OpenCL/m00020_a1-optimized.cl index e8c3fcbf7..8a73ef7f9 100644 --- a/OpenCL/m00020_a1-optimized.cl +++ b/OpenCL/m00020_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00020_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00020_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -253,15 +253,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00020_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00020_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00020_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00020_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00020_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00020_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00020_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -515,10 +515,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00020_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00020_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00020_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00020_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00020_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00020_a1-pure.cl b/OpenCL/m00020_a1-pure.cl index 7bec72c21..4da56b6a3 100644 --- a/OpenCL/m00020_a1-pure.cl +++ b/OpenCL/m00020_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00020_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00020_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -58,7 +58,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00020_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00020_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00020_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00020_a3-optimized.cl b/OpenCL/m00020_a3-optimized.cl index de749b9e2..428ae4221 100644 --- a/OpenCL/m00020_a3-optimized.cl +++ b/OpenCL/m00020_a3-optimized.cl @@ -373,7 +373,7 @@ DECLSPEC void m00020s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m00020_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00020_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -422,7 +422,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00020_m04 (KERN_ATTR_BASIC ()) m00020m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00020_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00020_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -471,7 +471,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00020_m08 (KERN_ATTR_BASIC ()) m00020m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00020_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00020_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -520,7 +520,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00020_m16 (KERN_ATTR_BASIC ()) m00020m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00020_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00020_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -569,7 +569,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00020_s04 (KERN_ATTR_BASIC ()) m00020s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00020_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00020_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -618,7 +618,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00020_s08 (KERN_ATTR_BASIC ()) m00020s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00020_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00020_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m00020_a3-pure.cl b/OpenCL/m00020_a3-pure.cl index 96f650814..b7083fa9a 100644 --- a/OpenCL/m00020_a3-pure.cl +++ b/OpenCL/m00020_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00020_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00020_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -75,7 +75,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00020_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00020_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00020_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00030_a0-optimized.cl b/OpenCL/m00030_a0-optimized.cl index ad44498c9..9704afb47 100644 --- a/OpenCL/m00030_a0-optimized.cl +++ b/OpenCL/m00030_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00030_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00030_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -222,15 +222,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00030_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00030_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00030_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00030_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00030_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00030_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00030_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -451,10 +451,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00030_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00030_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00030_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00030_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00030_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00030_a0-pure.cl b/OpenCL/m00030_a0-pure.cl index 9ad5e1201..445fff4ec 100644 --- a/OpenCL/m00030_a0-pure.cl +++ b/OpenCL/m00030_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00030_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00030_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00030_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00030_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00030_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00030_a1-optimized.cl b/OpenCL/m00030_a1-optimized.cl index 7cc881a53..b00a2e21d 100644 --- a/OpenCL/m00030_a1-optimized.cl +++ b/OpenCL/m00030_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00030_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00030_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -280,15 +280,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00030_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00030_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00030_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00030_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00030_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00030_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00030_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -569,10 +569,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00030_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00030_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00030_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00030_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00030_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00030_a1-pure.cl b/OpenCL/m00030_a1-pure.cl index ae5b04121..8ea89c339 100644 --- a/OpenCL/m00030_a1-pure.cl +++ b/OpenCL/m00030_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00030_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00030_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -67,7 +67,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00030_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00030_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00030_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00030_a3-optimized.cl b/OpenCL/m00030_a3-optimized.cl index b79163461..d8dd49c9d 100644 --- a/OpenCL/m00030_a3-optimized.cl +++ b/OpenCL/m00030_a3-optimized.cl @@ -472,7 +472,7 @@ DECLSPEC void m00030s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m00030_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00030_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -512,7 +512,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00030_m04 (KERN_ATTR_VECTOR ()) m00030m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00030_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00030_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -552,7 +552,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00030_m08 (KERN_ATTR_VECTOR ()) m00030m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00030_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00030_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -592,7 +592,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00030_m16 (KERN_ATTR_VECTOR ()) m00030m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00030_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00030_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -632,7 +632,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00030_s04 (KERN_ATTR_VECTOR ()) m00030s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00030_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00030_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -672,7 +672,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00030_s08 (KERN_ATTR_VECTOR ()) m00030s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00030_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00030_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m00030_a3-pure.cl b/OpenCL/m00030_a3-pure.cl index 60963fab0..79e2f9058 100644 --- a/OpenCL/m00030_a3-pure.cl +++ b/OpenCL/m00030_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00030_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00030_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -96,7 +96,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00030_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00030_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00030_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00040_a0-optimized.cl b/OpenCL/m00040_a0-optimized.cl index 49f7bfa9d..01c2ae417 100644 --- a/OpenCL/m00040_a0-optimized.cl +++ b/OpenCL/m00040_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00040_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00040_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -202,15 +202,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00040_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00040_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00040_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00040_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00040_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00040_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00040_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -411,10 +411,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00040_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00040_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00040_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00040_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00040_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00040_a0-pure.cl b/OpenCL/m00040_a0-pure.cl index ccbef3c5f..7e58eca6e 100644 --- a/OpenCL/m00040_a0-pure.cl +++ b/OpenCL/m00040_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00040_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00040_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -64,7 +64,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00040_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00040_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00040_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00040_a1-optimized.cl b/OpenCL/m00040_a1-optimized.cl index 7bb0ace78..7c2aa5095 100644 --- a/OpenCL/m00040_a1-optimized.cl +++ b/OpenCL/m00040_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00040_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00040_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -258,15 +258,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00040_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00040_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00040_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00040_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00040_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00040_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00040_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -525,10 +525,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00040_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00040_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00040_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00040_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00040_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00040_a1-pure.cl b/OpenCL/m00040_a1-pure.cl index d372f75a4..97be5b283 100644 --- a/OpenCL/m00040_a1-pure.cl +++ b/OpenCL/m00040_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00040_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00040_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -58,7 +58,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00040_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00040_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00040_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00040_a3-optimized.cl b/OpenCL/m00040_a3-optimized.cl index 5ae016dd3..43316408a 100644 --- a/OpenCL/m00040_a3-optimized.cl +++ b/OpenCL/m00040_a3-optimized.cl @@ -373,7 +373,7 @@ DECLSPEC void m00040s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m00040_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00040_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -422,7 +422,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00040_m04 (KERN_ATTR_BASIC ()) m00040m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00040_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00040_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -471,7 +471,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00040_m08 (KERN_ATTR_BASIC ()) m00040m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00040_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00040_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -520,7 +520,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00040_m16 (KERN_ATTR_BASIC ()) m00040m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00040_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00040_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -569,7 +569,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00040_s04 (KERN_ATTR_BASIC ()) m00040s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00040_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00040_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -618,7 +618,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00040_s08 (KERN_ATTR_BASIC ()) m00040s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00040_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00040_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m00040_a3-pure.cl b/OpenCL/m00040_a3-pure.cl index 0fc3425d5..5a7738356 100644 --- a/OpenCL/m00040_a3-pure.cl +++ b/OpenCL/m00040_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00040_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00040_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -87,7 +87,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00040_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00040_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00040_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00050_a0-optimized.cl b/OpenCL/m00050_a0-optimized.cl index 25b66a683..509d31df4 100644 --- a/OpenCL/m00050_a0-optimized.cl +++ b/OpenCL/m00050_a0-optimized.cl @@ -101,7 +101,7 @@ DECLSPEC void hmac_md5_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_AS md5_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m00050_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00050_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -206,15 +206,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00050_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00050_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00050_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00050_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00050_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00050_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00050_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -331,10 +331,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00050_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00050_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00050_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00050_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00050_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00050_a0-pure.cl b/OpenCL/m00050_a0-pure.cl index d1141b5a1..bb5c811a9 100644 --- a/OpenCL/m00050_a0-pure.cl +++ b/OpenCL/m00050_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00050_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00050_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00050_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00050_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00050_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00050_a1-optimized.cl b/OpenCL/m00050_a1-optimized.cl index 900a28be7..7413dd42e 100644 --- a/OpenCL/m00050_a1-optimized.cl +++ b/OpenCL/m00050_a1-optimized.cl @@ -99,7 +99,7 @@ DECLSPEC void hmac_md5_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_AS md5_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m00050_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00050_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -264,15 +264,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00050_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00050_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00050_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00050_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00050_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00050_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00050_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -449,10 +449,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00050_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00050_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00050_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00050_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00050_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00050_a1-pure.cl b/OpenCL/m00050_a1-pure.cl index 855c7cd56..f971bdff6 100644 --- a/OpenCL/m00050_a1-pure.cl +++ b/OpenCL/m00050_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00050_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00050_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -92,7 +92,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00050_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00050_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00050_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00050_a3-optimized.cl b/OpenCL/m00050_a3-optimized.cl index 40e21fd92..eacd34b81 100644 --- a/OpenCL/m00050_a3-optimized.cl +++ b/OpenCL/m00050_a3-optimized.cl @@ -315,7 +315,7 @@ DECLSPEC void m00050s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m00050_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00050_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -364,7 +364,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00050_m04 (KERN_ATTR_BASIC ()) m00050m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00050_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00050_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -413,7 +413,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00050_m08 (KERN_ATTR_BASIC ()) m00050m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00050_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00050_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -462,7 +462,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00050_m16 (KERN_ATTR_BASIC ()) m00050m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00050_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00050_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -511,7 +511,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00050_s04 (KERN_ATTR_BASIC ()) m00050s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00050_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00050_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -560,7 +560,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00050_s08 (KERN_ATTR_BASIC ()) m00050s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00050_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00050_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m00050_a3-pure.cl b/OpenCL/m00050_a3-pure.cl index 93b7f9f40..7b0347976 100644 --- a/OpenCL/m00050_a3-pure.cl +++ b/OpenCL/m00050_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00050_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00050_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -78,7 +78,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00050_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00050_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00050_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00060_a0-optimized.cl b/OpenCL/m00060_a0-optimized.cl index 2cca873ce..35a377d6b 100644 --- a/OpenCL/m00060_a0-optimized.cl +++ b/OpenCL/m00060_a0-optimized.cl @@ -101,7 +101,7 @@ DECLSPEC void hmac_md5_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_AS md5_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m00060_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00060_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -228,15 +228,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00060_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00060_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00060_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00060_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00060_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00060_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00060_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -375,10 +375,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00060_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00060_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00060_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00060_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00060_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00060_a0-pure.cl b/OpenCL/m00060_a0-pure.cl index 0ca9338b4..e625e900d 100644 --- a/OpenCL/m00060_a0-pure.cl +++ b/OpenCL/m00060_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00060_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00060_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00060_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00060_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00060_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00060_a1-optimized.cl b/OpenCL/m00060_a1-optimized.cl index 635c5b98a..053efe581 100644 --- a/OpenCL/m00060_a1-optimized.cl +++ b/OpenCL/m00060_a1-optimized.cl @@ -99,7 +99,7 @@ DECLSPEC void hmac_md5_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_AS md5_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m00060_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00060_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -267,15 +267,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00060_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00060_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00060_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00060_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00060_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00060_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00060_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -455,10 +455,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00060_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00060_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00060_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00060_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00060_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00060_a1-pure.cl b/OpenCL/m00060_a1-pure.cl index 9710d0c10..2da99ce5b 100644 --- a/OpenCL/m00060_a1-pure.cl +++ b/OpenCL/m00060_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00060_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00060_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -94,7 +94,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00060_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00060_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00060_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00060_a3-optimized.cl b/OpenCL/m00060_a3-optimized.cl index 823c143ae..70cc97da0 100644 --- a/OpenCL/m00060_a3-optimized.cl +++ b/OpenCL/m00060_a3-optimized.cl @@ -311,7 +311,7 @@ DECLSPEC void m00060s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m00060_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00060_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -360,7 +360,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00060_m04 (KERN_ATTR_BASIC ()) m00060m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00060_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00060_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -409,7 +409,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00060_m08 (KERN_ATTR_BASIC ()) m00060m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00060_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00060_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -458,7 +458,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00060_m16 (KERN_ATTR_BASIC ()) m00060m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00060_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00060_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -507,7 +507,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00060_s04 (KERN_ATTR_BASIC ()) m00060s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00060_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00060_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -556,7 +556,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00060_s08 (KERN_ATTR_BASIC ()) m00060s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00060_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00060_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m00060_a3-pure.cl b/OpenCL/m00060_a3-pure.cl index 3eb62ef5b..ef34c2124 100644 --- a/OpenCL/m00060_a3-pure.cl +++ b/OpenCL/m00060_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00060_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00060_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00060_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00060_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00060_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00070_a0-optimized.cl b/OpenCL/m00070_a0-optimized.cl index a713936ad..870cb50b9 100644 --- a/OpenCL/m00070_a0-optimized.cl +++ b/OpenCL/m00070_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00070_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00070_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -152,15 +152,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00070_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00070_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00070_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00070_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00070_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00070_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00070_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -311,10 +311,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00070_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00070_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00070_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00070_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00070_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00070_a0-pure.cl b/OpenCL/m00070_a0-pure.cl index 602fa7b8f..a57981059 100644 --- a/OpenCL/m00070_a0-pure.cl +++ b/OpenCL/m00070_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00070_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00070_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00070_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00070_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00070_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00070_a1-optimized.cl b/OpenCL/m00070_a1-optimized.cl index e691e5604..0a916e5ed 100644 --- a/OpenCL/m00070_a1-optimized.cl +++ b/OpenCL/m00070_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00070_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00070_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -210,15 +210,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00070_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00070_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00070_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00070_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00070_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00070_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00070_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -429,10 +429,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00070_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00070_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00070_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00070_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00070_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00070_a1-pure.cl b/OpenCL/m00070_a1-pure.cl index b47f6cb08..dd6e3e51f 100644 --- a/OpenCL/m00070_a1-pure.cl +++ b/OpenCL/m00070_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00070_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00070_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00070_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00070_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00070_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00070_a3-optimized.cl b/OpenCL/m00070_a3-optimized.cl index ba7c58ce0..6b9dfc180 100644 --- a/OpenCL/m00070_a3-optimized.cl +++ b/OpenCL/m00070_a3-optimized.cl @@ -426,7 +426,7 @@ DECLSPEC void m00070s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m00070_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00070_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -466,7 +466,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00070_m04 (KERN_ATTR_VECTOR ()) m00070m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00070_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00070_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -506,7 +506,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00070_m08 (KERN_ATTR_VECTOR ()) m00070m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00070_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00070_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -546,7 +546,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00070_m16 (KERN_ATTR_VECTOR ()) m00070m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00070_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00070_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -586,7 +586,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00070_s04 (KERN_ATTR_VECTOR ()) m00070s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00070_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00070_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -626,7 +626,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00070_s08 (KERN_ATTR_VECTOR ()) m00070s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00070_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00070_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m00070_a3-pure.cl b/OpenCL/m00070_a3-pure.cl index 22a82bd84..9bca35d8a 100644 --- a/OpenCL/m00070_a3-pure.cl +++ b/OpenCL/m00070_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00070_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00070_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -83,7 +83,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00070_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00070_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00070_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00100_a0-optimized.cl b/OpenCL/m00100_a0-optimized.cl index 0d8d82a58..fd79e84da 100644 --- a/OpenCL/m00100_a0-optimized.cl +++ b/OpenCL/m00100_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00100_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00100_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -188,15 +188,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00100_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00100_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00100_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00100_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00100_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00100_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00100_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -389,10 +389,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00100_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00100_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00100_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00100_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00100_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00100_a0-pure.cl b/OpenCL/m00100_a0-pure.cl index 702c52d9a..0bef6afb6 100644 --- a/OpenCL/m00100_a0-pure.cl +++ b/OpenCL/m00100_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00100_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00100_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00100_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00100_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00100_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00100_a1-optimized.cl b/OpenCL/m00100_a1-optimized.cl index 59f49d433..6f1a15db4 100644 --- a/OpenCL/m00100_a1-optimized.cl +++ b/OpenCL/m00100_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00100_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00100_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -244,15 +244,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00100_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00100_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00100_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00100_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00100_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00100_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00100_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -503,10 +503,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00100_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00100_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00100_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00100_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00100_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00100_a1-pure.cl b/OpenCL/m00100_a1-pure.cl index 5692f6c31..95f5e7af1 100644 --- a/OpenCL/m00100_a1-pure.cl +++ b/OpenCL/m00100_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00100_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00100_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00100_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00100_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00100_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00100_a3-optimized.cl b/OpenCL/m00100_a3-optimized.cl index 772b9ee1e..b3132558c 100644 --- a/OpenCL/m00100_a3-optimized.cl +++ b/OpenCL/m00100_a3-optimized.cl @@ -516,7 +516,7 @@ DECLSPEC void m00100s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m00100_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00100_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -556,7 +556,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00100_m04 (KERN_ATTR_VECTOR ()) m00100m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00100_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00100_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -596,7 +596,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00100_m08 (KERN_ATTR_VECTOR ()) m00100m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00100_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00100_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -636,7 +636,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00100_m16 (KERN_ATTR_VECTOR ()) m00100m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00100_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00100_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -676,7 +676,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00100_s04 (KERN_ATTR_VECTOR ()) m00100s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00100_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00100_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -716,7 +716,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00100_s08 (KERN_ATTR_VECTOR ()) m00100s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00100_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00100_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m00100_a3-pure.cl b/OpenCL/m00100_a3-pure.cl index 92ccdd776..206f9271f 100644 --- a/OpenCL/m00100_a3-pure.cl +++ b/OpenCL/m00100_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00100_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00100_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00100_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00100_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00100_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00110_a0-optimized.cl b/OpenCL/m00110_a0-optimized.cl index 0e8f63edf..21de3710e 100644 --- a/OpenCL/m00110_a0-optimized.cl +++ b/OpenCL/m00110_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00110_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00110_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -261,15 +261,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00110_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00110_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00110_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00110_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00110_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00110_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00110_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -535,10 +535,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00110_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00110_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00110_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00110_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00110_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00110_a0-pure.cl b/OpenCL/m00110_a0-pure.cl index 812d274ab..e1ba326df 100644 --- a/OpenCL/m00110_a0-pure.cl +++ b/OpenCL/m00110_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00110_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00110_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00110_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00110_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00110_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00110_a1-optimized.cl b/OpenCL/m00110_a1-optimized.cl index a20483fab..52fc35227 100644 --- a/OpenCL/m00110_a1-optimized.cl +++ b/OpenCL/m00110_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00110_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00110_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -319,15 +319,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00110_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00110_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00110_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00110_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00110_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00110_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00110_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -653,10 +653,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00110_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00110_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00110_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00110_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00110_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00110_a1-pure.cl b/OpenCL/m00110_a1-pure.cl index 3f889aaad..758c3d672 100644 --- a/OpenCL/m00110_a1-pure.cl +++ b/OpenCL/m00110_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00110_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00110_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -67,7 +67,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00110_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00110_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00110_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00110_a3-optimized.cl b/OpenCL/m00110_a3-optimized.cl index ef007b45e..bd00afdec 100644 --- a/OpenCL/m00110_a3-optimized.cl +++ b/OpenCL/m00110_a3-optimized.cl @@ -564,7 +564,7 @@ DECLSPEC void m00110s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m00110_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00110_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -604,7 +604,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00110_m04 (KERN_ATTR_VECTOR ()) m00110m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00110_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00110_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -644,7 +644,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00110_m08 (KERN_ATTR_VECTOR ()) m00110m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00110_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00110_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -684,7 +684,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00110_m16 (KERN_ATTR_VECTOR ()) m00110m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00110_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00110_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -724,7 +724,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00110_s04 (KERN_ATTR_VECTOR ()) m00110s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00110_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00110_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -764,7 +764,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00110_s08 (KERN_ATTR_VECTOR ()) m00110s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00110_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00110_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m00110_a3-pure.cl b/OpenCL/m00110_a3-pure.cl index 3c365c4eb..0ba65e4cf 100644 --- a/OpenCL/m00110_a3-pure.cl +++ b/OpenCL/m00110_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00110_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00110_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00110_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00110_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00110_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00120_a0-optimized.cl b/OpenCL/m00120_a0-optimized.cl index 2f52c73b6..9af2d1fae 100644 --- a/OpenCL/m00120_a0-optimized.cl +++ b/OpenCL/m00120_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00120_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00120_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -253,15 +253,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00120_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00120_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00120_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00120_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00120_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00120_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00120_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -507,10 +507,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00120_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00120_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00120_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00120_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00120_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00120_a0-pure.cl b/OpenCL/m00120_a0-pure.cl index f9d4e3d93..35f8b4805 100644 --- a/OpenCL/m00120_a0-pure.cl +++ b/OpenCL/m00120_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00120_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00120_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -64,7 +64,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00120_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00120_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00120_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00120_a1-optimized.cl b/OpenCL/m00120_a1-optimized.cl index b0519f5e1..d94b728ba 100644 --- a/OpenCL/m00120_a1-optimized.cl +++ b/OpenCL/m00120_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00120_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00120_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -309,15 +309,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00120_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00120_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00120_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00120_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00120_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00120_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00120_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -621,10 +621,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00120_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00120_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00120_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00120_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00120_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00120_a1-pure.cl b/OpenCL/m00120_a1-pure.cl index 13afd0bd4..52d4c32d4 100644 --- a/OpenCL/m00120_a1-pure.cl +++ b/OpenCL/m00120_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00120_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00120_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -58,7 +58,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00120_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00120_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00120_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00120_a3-optimized.cl b/OpenCL/m00120_a3-optimized.cl index d6ffdf912..f3ef7665a 100644 --- a/OpenCL/m00120_a3-optimized.cl +++ b/OpenCL/m00120_a3-optimized.cl @@ -467,7 +467,7 @@ DECLSPEC void m00120s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m00120_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00120_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -516,7 +516,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00120_m04 (KERN_ATTR_BASIC ()) m00120m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00120_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00120_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -565,7 +565,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00120_m08 (KERN_ATTR_BASIC ()) m00120m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00120_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00120_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -614,7 +614,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00120_m16 (KERN_ATTR_BASIC ()) m00120m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00120_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00120_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -663,7 +663,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00120_s04 (KERN_ATTR_BASIC ()) m00120s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00120_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00120_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -712,7 +712,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00120_s08 (KERN_ATTR_BASIC ()) m00120s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00120_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00120_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m00120_a3-pure.cl b/OpenCL/m00120_a3-pure.cl index 0d567d6b1..5bf4a7bbc 100644 --- a/OpenCL/m00120_a3-pure.cl +++ b/OpenCL/m00120_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00120_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00120_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -75,7 +75,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00120_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00120_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00120_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00130_a0-optimized.cl b/OpenCL/m00130_a0-optimized.cl index 6d67251db..35a848780 100644 --- a/OpenCL/m00130_a0-optimized.cl +++ b/OpenCL/m00130_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00130_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00130_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -266,15 +266,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00130_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00130_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00130_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00130_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00130_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00130_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00130_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -545,10 +545,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00130_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00130_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00130_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00130_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00130_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00130_a0-pure.cl b/OpenCL/m00130_a0-pure.cl index d6ad720eb..8cdc95f11 100644 --- a/OpenCL/m00130_a0-pure.cl +++ b/OpenCL/m00130_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00130_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00130_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00130_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00130_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00130_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00130_a1-optimized.cl b/OpenCL/m00130_a1-optimized.cl index b8412d61f..de94f6571 100644 --- a/OpenCL/m00130_a1-optimized.cl +++ b/OpenCL/m00130_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00130_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00130_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -324,15 +324,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00130_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00130_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00130_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00130_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00130_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00130_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00130_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -663,10 +663,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00130_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00130_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00130_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00130_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00130_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00130_a1-pure.cl b/OpenCL/m00130_a1-pure.cl index dc11b3398..58668c131 100644 --- a/OpenCL/m00130_a1-pure.cl +++ b/OpenCL/m00130_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00130_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00130_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -67,7 +67,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00130_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00130_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00130_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00130_a3-optimized.cl b/OpenCL/m00130_a3-optimized.cl index cb5babd4a..f085cca4d 100644 --- a/OpenCL/m00130_a3-optimized.cl +++ b/OpenCL/m00130_a3-optimized.cl @@ -564,7 +564,7 @@ DECLSPEC void m00130s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m00130_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00130_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -604,7 +604,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00130_m04 (KERN_ATTR_VECTOR ()) m00130m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00130_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00130_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -644,7 +644,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00130_m08 (KERN_ATTR_VECTOR ()) m00130m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00130_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00130_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -684,7 +684,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00130_m16 (KERN_ATTR_VECTOR ()) m00130m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00130_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00130_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -724,7 +724,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00130_s04 (KERN_ATTR_VECTOR ()) m00130s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00130_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00130_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -764,7 +764,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00130_s08 (KERN_ATTR_VECTOR ()) m00130s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00130_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00130_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m00130_a3-pure.cl b/OpenCL/m00130_a3-pure.cl index ccfd74c6a..1ae2cfdfe 100644 --- a/OpenCL/m00130_a3-pure.cl +++ b/OpenCL/m00130_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00130_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00130_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00130_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00130_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00130_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00140_a0-optimized.cl b/OpenCL/m00140_a0-optimized.cl index d1a8675f4..5fed269f3 100644 --- a/OpenCL/m00140_a0-optimized.cl +++ b/OpenCL/m00140_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00140_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00140_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -246,15 +246,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00140_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00140_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00140_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00140_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00140_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00140_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00140_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -505,10 +505,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00140_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00140_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00140_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00140_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00140_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00140_a0-pure.cl b/OpenCL/m00140_a0-pure.cl index d0e5f3265..ae213125f 100644 --- a/OpenCL/m00140_a0-pure.cl +++ b/OpenCL/m00140_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00140_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00140_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -64,7 +64,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00140_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00140_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00140_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00140_a1-optimized.cl b/OpenCL/m00140_a1-optimized.cl index d87be7e2f..81ddff1f1 100644 --- a/OpenCL/m00140_a1-optimized.cl +++ b/OpenCL/m00140_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00140_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00140_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -302,15 +302,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00140_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00140_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00140_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00140_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00140_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00140_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00140_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -619,10 +619,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00140_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00140_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00140_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00140_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00140_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00140_a1-pure.cl b/OpenCL/m00140_a1-pure.cl index d433e2f84..7fadd12bc 100644 --- a/OpenCL/m00140_a1-pure.cl +++ b/OpenCL/m00140_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00140_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00140_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -58,7 +58,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00140_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00140_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00140_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00140_a3-optimized.cl b/OpenCL/m00140_a3-optimized.cl index ead2365b2..baec78f05 100644 --- a/OpenCL/m00140_a3-optimized.cl +++ b/OpenCL/m00140_a3-optimized.cl @@ -467,7 +467,7 @@ DECLSPEC void m00140s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m00140_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00140_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -516,7 +516,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00140_m04 (KERN_ATTR_BASIC ()) m00140m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00140_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00140_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -565,7 +565,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00140_m08 (KERN_ATTR_BASIC ()) m00140m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00140_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00140_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -614,7 +614,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00140_m16 (KERN_ATTR_BASIC ()) m00140m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00140_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00140_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -663,7 +663,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00140_s04 (KERN_ATTR_BASIC ()) m00140s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00140_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00140_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -712,7 +712,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00140_s08 (KERN_ATTR_BASIC ()) m00140s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00140_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00140_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m00140_a3-pure.cl b/OpenCL/m00140_a3-pure.cl index f58633634..aee5f7d5f 100644 --- a/OpenCL/m00140_a3-pure.cl +++ b/OpenCL/m00140_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00140_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00140_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -75,7 +75,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00140_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00140_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00140_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00150_a0-optimized.cl b/OpenCL/m00150_a0-optimized.cl index 3bd130a13..fd981eb51 100644 --- a/OpenCL/m00150_a0-optimized.cl +++ b/OpenCL/m00150_a0-optimized.cl @@ -105,7 +105,7 @@ DECLSPEC void hmac_sha1_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_A sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m00150_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00150_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -219,15 +219,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00150_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00150_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00150_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00150_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00150_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00150_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00150_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -353,10 +353,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00150_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00150_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00150_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00150_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00150_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00150_a0-pure.cl b/OpenCL/m00150_a0-pure.cl index e40fb42e6..4acba3e47 100644 --- a/OpenCL/m00150_a0-pure.cl +++ b/OpenCL/m00150_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00150_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00150_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00150_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00150_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00150_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00150_a1-optimized.cl b/OpenCL/m00150_a1-optimized.cl index 2869a4976..adc3fc0fb 100644 --- a/OpenCL/m00150_a1-optimized.cl +++ b/OpenCL/m00150_a1-optimized.cl @@ -103,7 +103,7 @@ DECLSPEC void hmac_sha1_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_A sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m00150_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00150_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -285,15 +285,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00150_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00150_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00150_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00150_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00150_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00150_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00150_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -487,10 +487,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00150_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00150_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00150_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00150_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00150_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00150_a1-pure.cl b/OpenCL/m00150_a1-pure.cl index afac04952..395244729 100644 --- a/OpenCL/m00150_a1-pure.cl +++ b/OpenCL/m00150_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00150_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00150_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -92,7 +92,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00150_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00150_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00150_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00150_a3-optimized.cl b/OpenCL/m00150_a3-optimized.cl index 3b7851153..de810699e 100644 --- a/OpenCL/m00150_a3-optimized.cl +++ b/OpenCL/m00150_a3-optimized.cl @@ -319,7 +319,7 @@ DECLSPEC void m00150s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m00150_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00150_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -368,7 +368,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00150_m04 (KERN_ATTR_BASIC ()) m00150m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00150_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00150_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -417,7 +417,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00150_m08 (KERN_ATTR_BASIC ()) m00150m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00150_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00150_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -466,7 +466,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00150_m16 (KERN_ATTR_BASIC ()) m00150m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00150_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00150_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -515,7 +515,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00150_s04 (KERN_ATTR_BASIC ()) m00150s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00150_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00150_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -564,7 +564,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00150_s08 (KERN_ATTR_BASIC ()) m00150s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00150_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00150_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m00150_a3-pure.cl b/OpenCL/m00150_a3-pure.cl index 70b4be04d..57674fc54 100644 --- a/OpenCL/m00150_a3-pure.cl +++ b/OpenCL/m00150_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00150_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00150_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -78,7 +78,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00150_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00150_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00150_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00160_a0-optimized.cl b/OpenCL/m00160_a0-optimized.cl index 75c51edc5..3b7e295e8 100644 --- a/OpenCL/m00160_a0-optimized.cl +++ b/OpenCL/m00160_a0-optimized.cl @@ -105,7 +105,7 @@ DECLSPEC void hmac_sha1_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_A sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m00160_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00160_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -232,15 +232,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00160_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00160_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00160_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00160_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00160_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00160_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00160_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -379,10 +379,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00160_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00160_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00160_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00160_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00160_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00160_a0-pure.cl b/OpenCL/m00160_a0-pure.cl index 3bfc522a9..a818239b9 100644 --- a/OpenCL/m00160_a0-pure.cl +++ b/OpenCL/m00160_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00160_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00160_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00160_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00160_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00160_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00160_a1-optimized.cl b/OpenCL/m00160_a1-optimized.cl index e1c9807be..196bfc827 100644 --- a/OpenCL/m00160_a1-optimized.cl +++ b/OpenCL/m00160_a1-optimized.cl @@ -103,7 +103,7 @@ DECLSPEC void hmac_sha1_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_A sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m00160_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00160_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -290,15 +290,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00160_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00160_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00160_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00160_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00160_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00160_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00160_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -497,10 +497,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00160_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00160_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00160_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00160_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00160_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00160_a1-pure.cl b/OpenCL/m00160_a1-pure.cl index 2489d9b79..a9d7b13de 100644 --- a/OpenCL/m00160_a1-pure.cl +++ b/OpenCL/m00160_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00160_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00160_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -94,7 +94,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00160_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00160_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00160_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00160_a3-optimized.cl b/OpenCL/m00160_a3-optimized.cl index b401e1df3..ae8ac654b 100644 --- a/OpenCL/m00160_a3-optimized.cl +++ b/OpenCL/m00160_a3-optimized.cl @@ -315,7 +315,7 @@ DECLSPEC void m00160s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m00160_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00160_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -364,7 +364,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00160_m04 (KERN_ATTR_BASIC ()) m00160m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00160_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00160_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -413,7 +413,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00160_m08 (KERN_ATTR_BASIC ()) m00160m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00160_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00160_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -462,7 +462,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00160_m16 (KERN_ATTR_BASIC ()) m00160m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00160_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00160_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -511,7 +511,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00160_s04 (KERN_ATTR_BASIC ()) m00160s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00160_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00160_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -560,7 +560,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00160_s08 (KERN_ATTR_BASIC ()) m00160s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00160_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00160_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m00160_a3-pure.cl b/OpenCL/m00160_a3-pure.cl index 4874d3dfe..45e55bce3 100644 --- a/OpenCL/m00160_a3-pure.cl +++ b/OpenCL/m00160_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00160_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00160_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00160_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00160_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00160_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00170_a0-optimized.cl b/OpenCL/m00170_a0-optimized.cl index 16be4e154..2376b88bd 100644 --- a/OpenCL/m00170_a0-optimized.cl +++ b/OpenCL/m00170_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00170_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00170_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -193,15 +193,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00170_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00170_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00170_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00170_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00170_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00170_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00170_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -399,10 +399,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00170_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00170_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00170_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00170_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00170_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00170_a0-pure.cl b/OpenCL/m00170_a0-pure.cl index e22864f8d..89aed961a 100644 --- a/OpenCL/m00170_a0-pure.cl +++ b/OpenCL/m00170_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00170_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00170_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00170_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00170_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00170_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00170_a1-optimized.cl b/OpenCL/m00170_a1-optimized.cl index 2215464cc..84ea48f4b 100644 --- a/OpenCL/m00170_a1-optimized.cl +++ b/OpenCL/m00170_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00170_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00170_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -249,15 +249,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00170_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00170_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00170_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00170_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00170_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00170_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00170_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -513,10 +513,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00170_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00170_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00170_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00170_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00170_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00170_a1-pure.cl b/OpenCL/m00170_a1-pure.cl index 748e5e1e6..354ed502a 100644 --- a/OpenCL/m00170_a1-pure.cl +++ b/OpenCL/m00170_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00170_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00170_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00170_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00170_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00170_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00170_a3-optimized.cl b/OpenCL/m00170_a3-optimized.cl index 5774a3d48..77217b348 100644 --- a/OpenCL/m00170_a3-optimized.cl +++ b/OpenCL/m00170_a3-optimized.cl @@ -513,7 +513,7 @@ DECLSPEC void m00170s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m00170_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00170_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -553,7 +553,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00170_m04 (KERN_ATTR_VECTOR ()) m00170m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00170_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00170_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -593,7 +593,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00170_m08 (KERN_ATTR_VECTOR ()) m00170m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00170_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00170_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -633,7 +633,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00170_m16 (KERN_ATTR_VECTOR ()) m00170m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00170_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00170_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -673,7 +673,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00170_s04 (KERN_ATTR_VECTOR ()) m00170s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00170_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00170_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -713,7 +713,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00170_s08 (KERN_ATTR_VECTOR ()) m00170s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00170_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00170_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m00170_a3-pure.cl b/OpenCL/m00170_a3-pure.cl index bdb3d6a92..a399605ff 100644 --- a/OpenCL/m00170_a3-pure.cl +++ b/OpenCL/m00170_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00170_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00170_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00170_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00170_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00170_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00200_a0-optimized.cl b/OpenCL/m00200_a0-optimized.cl index e62e6edc8..713ff7b04 100644 --- a/OpenCL/m00200_a0-optimized.cl +++ b/OpenCL/m00200_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_simd.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00200_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00200_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -134,15 +134,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00200_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00200_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00200_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00200_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00200_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00200_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00200_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -272,10 +272,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00200_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00200_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00200_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00200_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00200_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00200_a1-optimized.cl b/OpenCL/m00200_a1-optimized.cl index ef9004e69..fcef4548a 100644 --- a/OpenCL/m00200_a1-optimized.cl +++ b/OpenCL/m00200_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_simd.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00200_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00200_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -196,15 +196,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00200_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00200_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00200_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00200_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00200_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00200_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00200_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -398,10 +398,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00200_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00200_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00200_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00200_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00200_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00200_a3-optimized.cl b/OpenCL/m00200_a3-optimized.cl index e08b42b0d..3c2a6fe3d 100644 --- a/OpenCL/m00200_a3-optimized.cl +++ b/OpenCL/m00200_a3-optimized.cl @@ -340,7 +340,7 @@ DECLSPEC void m00200s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO CODE_POST_S; } -KERNEL_FQ void HC_ATTR_SEQ m00200_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00200_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -380,7 +380,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00200_m04 (KERN_ATTR_VECTOR ()) m00200m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00200_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00200_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -420,7 +420,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00200_m08 (KERN_ATTR_VECTOR ()) m00200m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00200_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00200_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -460,7 +460,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00200_m16 (KERN_ATTR_VECTOR ()) m00200m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00200_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00200_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -500,7 +500,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00200_s04 (KERN_ATTR_VECTOR ()) m00200s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00200_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00200_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -540,7 +540,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00200_s08 (KERN_ATTR_VECTOR ()) m00200s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00200_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00200_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m00300_a0-optimized.cl b/OpenCL/m00300_a0-optimized.cl index 5be00b4fb..d4f10f46f 100644 --- a/OpenCL/m00300_a0-optimized.cl +++ b/OpenCL/m00300_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00300_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00300_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -313,15 +313,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00300_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00300_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00300_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00300_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00300_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00300_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00300_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -639,10 +639,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00300_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00300_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00300_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00300_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00300_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00300_a0-pure.cl b/OpenCL/m00300_a0-pure.cl index 496436a14..7398af811 100644 --- a/OpenCL/m00300_a0-pure.cl +++ b/OpenCL/m00300_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00300_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00300_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -83,7 +83,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00300_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00300_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00300_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00300_a1-optimized.cl b/OpenCL/m00300_a1-optimized.cl index 2876543bc..2206be011 100644 --- a/OpenCL/m00300_a1-optimized.cl +++ b/OpenCL/m00300_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00300_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00300_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -369,15 +369,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00300_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00300_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00300_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00300_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00300_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00300_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00300_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -753,10 +753,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00300_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00300_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00300_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00300_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00300_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00300_a1-pure.cl b/OpenCL/m00300_a1-pure.cl index cb9667833..c27282a6e 100644 --- a/OpenCL/m00300_a1-pure.cl +++ b/OpenCL/m00300_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00300_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00300_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -79,7 +79,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00300_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00300_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00300_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00300_a3-optimized.cl b/OpenCL/m00300_a3-optimized.cl index c883c6bcc..b6a5f211a 100644 --- a/OpenCL/m00300_a3-optimized.cl +++ b/OpenCL/m00300_a3-optimized.cl @@ -767,7 +767,7 @@ DECLSPEC void m00300s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m00300_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00300_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -807,7 +807,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00300_m04 (KERN_ATTR_VECTOR ()) m00300m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00300_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00300_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -847,7 +847,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00300_m08 (KERN_ATTR_VECTOR ()) m00300m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00300_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00300_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -887,7 +887,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00300_m16 (KERN_ATTR_VECTOR ()) m00300m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00300_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00300_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -927,7 +927,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00300_s04 (KERN_ATTR_VECTOR ()) m00300s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00300_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00300_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -967,7 +967,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00300_s08 (KERN_ATTR_VECTOR ()) m00300s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00300_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00300_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m00300_a3-pure.cl b/OpenCL/m00300_a3-pure.cl index c9c17712d..c7432e0b2 100644 --- a/OpenCL/m00300_a3-pure.cl +++ b/OpenCL/m00300_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00300_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00300_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -92,7 +92,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00300_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00300_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00300_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00400-optimized.cl b/OpenCL/m00400-optimized.cl index a8b94d1de..993ef9a36 100644 --- a/OpenCL/m00400-optimized.cl +++ b/OpenCL/m00400-optimized.cl @@ -23,7 +23,7 @@ typedef struct phpass_tmp } phpass_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m00400_init (KERN_ATTR_TMPS (phpass_tmp_t)) +KERNEL_FQ KERNEL_FA void m00400_init (KERN_ATTR_TMPS (phpass_tmp_t)) { /** * base @@ -120,7 +120,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00400_init (KERN_ATTR_TMPS (phpass_tmp_t)) tmps[gid].digest_buf[3] = digest[3]; } -KERNEL_FQ void HC_ATTR_SEQ m00400_loop (KERN_ATTR_TMPS (phpass_tmp_t)) +KERNEL_FQ KERNEL_FA void m00400_loop (KERN_ATTR_TMPS (phpass_tmp_t)) { /** * base @@ -211,7 +211,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00400_loop (KERN_ATTR_TMPS (phpass_tmp_t)) unpackv (tmps, digest_buf, gid, 3, digest[3]); } -KERNEL_FQ void HC_ATTR_SEQ m00400_comp (KERN_ATTR_TMPS (phpass_tmp_t)) +KERNEL_FQ KERNEL_FA void m00400_comp (KERN_ATTR_TMPS (phpass_tmp_t)) { /** * modifier diff --git a/OpenCL/m00400-pure.cl b/OpenCL/m00400-pure.cl index 9648ef530..20cbc91af 100644 --- a/OpenCL/m00400-pure.cl +++ b/OpenCL/m00400-pure.cl @@ -23,7 +23,7 @@ typedef struct phpass_tmp } phpass_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m00400_init (KERN_ATTR_TMPS (phpass_tmp_t)) +KERNEL_FQ KERNEL_FA void m00400_init (KERN_ATTR_TMPS (phpass_tmp_t)) { /** * base @@ -60,7 +60,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00400_init (KERN_ATTR_TMPS (phpass_tmp_t)) tmps[gid].digest_buf[3] = digest[3]; } -KERNEL_FQ void HC_ATTR_SEQ m00400_loop (KERN_ATTR_TMPS (phpass_tmp_t)) +KERNEL_FQ KERNEL_FA void m00400_loop (KERN_ATTR_TMPS (phpass_tmp_t)) { /** * base @@ -161,7 +161,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00400_loop (KERN_ATTR_TMPS (phpass_tmp_t)) tmps[gid].digest_buf[3] = digest[3]; } -KERNEL_FQ void HC_ATTR_SEQ m00400_comp (KERN_ATTR_TMPS (phpass_tmp_t)) +KERNEL_FQ KERNEL_FA void m00400_comp (KERN_ATTR_TMPS (phpass_tmp_t)) { /** * modifier diff --git a/OpenCL/m00500-optimized.cl b/OpenCL/m00500-optimized.cl index b3952468e..d7b7f57d2 100644 --- a/OpenCL/m00500-optimized.cl +++ b/OpenCL/m00500-optimized.cl @@ -659,7 +659,7 @@ DECLSPEC void append_1st (PRIVATE_AS u32 *block0, PRIVATE_AS u32 *block1, PRIVAT } } -KERNEL_FQ void HC_ATTR_SEQ m00500_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m00500_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * base @@ -822,7 +822,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00500_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) tmps[gid].digest_buf[3] = digest[3]; } -KERNEL_FQ void HC_ATTR_SEQ m00500_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m00500_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * base @@ -1010,7 +1010,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00500_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) tmps[gid].digest_buf[3] = digest[3]; } -KERNEL_FQ void HC_ATTR_SEQ m00500_comp (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m00500_comp (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * modifier diff --git a/OpenCL/m00500-pure.cl b/OpenCL/m00500-pure.cl index cb5fd15c1..bb1605d98 100644 --- a/OpenCL/m00500-pure.cl +++ b/OpenCL/m00500-pure.cl @@ -24,7 +24,7 @@ typedef struct md5crypt_tmp #define md5crypt_magic 0x00243124u -KERNEL_FQ void HC_ATTR_SEQ m00500_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m00500_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * base @@ -130,7 +130,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00500_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) tmps[gid].digest_buf[3] = md5_ctx.h[3]; } -KERNEL_FQ void HC_ATTR_SEQ m00500_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m00500_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * base @@ -225,7 +225,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00500_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) tmps[gid].digest_buf[3] = digest[3]; } -KERNEL_FQ void HC_ATTR_SEQ m00500_comp (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m00500_comp (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * modifier diff --git a/OpenCL/m00600_a0-optimized.cl b/OpenCL/m00600_a0-optimized.cl index 72643abc3..b66891bb2 100644 --- a/OpenCL/m00600_a0-optimized.cl +++ b/OpenCL/m00600_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2b.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00600_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00600_m04 (KERN_ATTR_RULES ()) { /** * base @@ -94,15 +94,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00600_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00600_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00600_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00600_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00600_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00600_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00600_s04 (KERN_ATTR_RULES ()) { /** * base @@ -192,10 +192,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00600_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00600_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00600_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00600_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00600_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00600_a0-pure.cl b/OpenCL/m00600_a0-pure.cl index 109bbca8a..686c6e404 100644 --- a/OpenCL/m00600_a0-pure.cl +++ b/OpenCL/m00600_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2b.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00600_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00600_mxx (KERN_ATTR_RULES ()) { /** * base @@ -57,7 +57,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00600_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00600_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00600_sxx (KERN_ATTR_RULES ()) { /** * base diff --git a/OpenCL/m00600_a1-optimized.cl b/OpenCL/m00600_a1-optimized.cl index a200b51dc..686ca4547 100644 --- a/OpenCL/m00600_a1-optimized.cl +++ b/OpenCL/m00600_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2b.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00600_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00600_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -152,15 +152,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00600_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00600_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00600_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00600_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00600_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00600_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00600_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -310,10 +310,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00600_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00600_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00600_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00600_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00600_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00600_a1-pure.cl b/OpenCL/m00600_a1-pure.cl index 42595f67b..cf9007fe9 100644 --- a/OpenCL/m00600_a1-pure.cl +++ b/OpenCL/m00600_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2b.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00600_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00600_mxx (KERN_ATTR_BASIC ()) { /** * base @@ -55,7 +55,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00600_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00600_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00600_sxx (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m00600_a3-optimized.cl b/OpenCL/m00600_a3-optimized.cl index 7f17a2b11..a8774830d 100644 --- a/OpenCL/m00600_a3-optimized.cl +++ b/OpenCL/m00600_a3-optimized.cl @@ -186,7 +186,7 @@ DECLSPEC void m00600s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m00600_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00600_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -226,7 +226,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00600_m04 (KERN_ATTR_VECTOR ()) m00600m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00600_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00600_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -266,7 +266,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00600_m08 (KERN_ATTR_VECTOR ()) m00600m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00600_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00600_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -306,7 +306,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00600_m16 (KERN_ATTR_VECTOR ()) m00600m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00600_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00600_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -346,7 +346,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00600_s04 (KERN_ATTR_VECTOR ()) m00600s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00600_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00600_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -386,7 +386,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00600_s08 (KERN_ATTR_VECTOR ()) m00600s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00600_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00600_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m00600_a3-pure.cl b/OpenCL/m00600_a3-pure.cl index 23627b7b3..93005c627 100644 --- a/OpenCL/m00600_a3-pure.cl +++ b/OpenCL/m00600_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2b.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00600_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00600_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -66,7 +66,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00600_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00600_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00600_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00610_a0-optimized.cl b/OpenCL/m00610_a0-optimized.cl index a0ea005f7..be62aad8e 100644 --- a/OpenCL/m00610_a0-optimized.cl +++ b/OpenCL/m00610_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2b.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00610_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00610_m04 (KERN_ATTR_RULES ()) { /** * base @@ -173,15 +173,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00610_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00610_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00610_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00610_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00610_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00610_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00610_s04 (KERN_ATTR_RULES ()) { /** * base @@ -350,11 +350,11 @@ KERNEL_FQ void HC_ATTR_SEQ m00610_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00610_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00610_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00610_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00610_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00610_a0-pure.cl b/OpenCL/m00610_a0-pure.cl index 34c25301d..d126761eb 100644 --- a/OpenCL/m00610_a0-pure.cl +++ b/OpenCL/m00610_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2b.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00610_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00610_mxx (KERN_ATTR_RULES ()) { /** * base @@ -68,7 +68,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00610_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00610_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00610_sxx (KERN_ATTR_RULES ()) { /** * base diff --git a/OpenCL/m00610_a1-optimized.cl b/OpenCL/m00610_a1-optimized.cl index efb8c62b7..246dddef7 100644 --- a/OpenCL/m00610_a1-optimized.cl +++ b/OpenCL/m00610_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2b.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00610_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00610_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -231,15 +231,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00610_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00610_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00610_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00610_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00610_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00610_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00610_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -468,11 +468,11 @@ KERNEL_FQ void HC_ATTR_SEQ m00610_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00610_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00610_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00610_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00610_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00610_a1-pure.cl b/OpenCL/m00610_a1-pure.cl index d6499bae5..b04796a55 100644 --- a/OpenCL/m00610_a1-pure.cl +++ b/OpenCL/m00610_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2b.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00610_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00610_mxx (KERN_ATTR_BASIC ()) { /** * base @@ -66,7 +66,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00610_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00610_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00610_sxx (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m00610_a3-optimized.cl b/OpenCL/m00610_a3-optimized.cl index e97084e23..bc9b38266 100644 --- a/OpenCL/m00610_a3-optimized.cl +++ b/OpenCL/m00610_a3-optimized.cl @@ -222,7 +222,7 @@ DECLSPEC void m00610s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m00610_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00610_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -262,7 +262,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00610_m04 (KERN_ATTR_VECTOR ()) m00610m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00610_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00610_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -302,7 +302,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00610_m08 (KERN_ATTR_VECTOR ()) m00610m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00610_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00610_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -342,7 +342,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00610_m16 (KERN_ATTR_VECTOR ()) m00610m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00610_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00610_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -382,7 +382,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00610_s04 (KERN_ATTR_VECTOR ()) m00610s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00610_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00610_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -422,7 +422,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00610_s08 (KERN_ATTR_VECTOR ()) m00610s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00610_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00610_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m00610_a3-pure.cl b/OpenCL/m00610_a3-pure.cl index a4fbc8651..c84377d6c 100644 --- a/OpenCL/m00610_a3-pure.cl +++ b/OpenCL/m00610_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2b.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00610_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00610_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -79,7 +79,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00610_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00610_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00610_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00620_a0-optimized.cl b/OpenCL/m00620_a0-optimized.cl index b2a9f7896..d6be652b9 100644 --- a/OpenCL/m00620_a0-optimized.cl +++ b/OpenCL/m00620_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2b.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00620_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00620_m04 (KERN_ATTR_RULES ()) { /** * base @@ -151,15 +151,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00620_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00620_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00620_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00620_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00620_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00620_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00620_s04 (KERN_ATTR_RULES ()) { /** * base @@ -306,11 +306,11 @@ KERNEL_FQ void HC_ATTR_SEQ m00620_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00620_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00620_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00620_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00620_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00620_a0-pure.cl b/OpenCL/m00620_a0-pure.cl index ce329c425..d35f3ce76 100644 --- a/OpenCL/m00620_a0-pure.cl +++ b/OpenCL/m00620_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2b.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00620_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00620_mxx (KERN_ATTR_RULES ()) { /** * base @@ -62,7 +62,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00620_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00620_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00620_sxx (KERN_ATTR_RULES ()) { /** * base diff --git a/OpenCL/m00620_a1-optimized.cl b/OpenCL/m00620_a1-optimized.cl index b50cdb3b7..bd4e6ae8e 100644 --- a/OpenCL/m00620_a1-optimized.cl +++ b/OpenCL/m00620_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2b.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00620_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00620_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -209,15 +209,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00620_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00620_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00620_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00620_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00620_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00620_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00620_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -424,11 +424,11 @@ KERNEL_FQ void HC_ATTR_SEQ m00620_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00620_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00620_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00620_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00620_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00620_a1-pure.cl b/OpenCL/m00620_a1-pure.cl index a0b620328..25ad2115a 100644 --- a/OpenCL/m00620_a1-pure.cl +++ b/OpenCL/m00620_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2b.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00620_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00620_mxx (KERN_ATTR_BASIC ()) { /** * base @@ -57,7 +57,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00620_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00620_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00620_sxx (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m00620_a3-optimized.cl b/OpenCL/m00620_a3-optimized.cl index 6d05afe81..e063d7fc1 100644 --- a/OpenCL/m00620_a3-optimized.cl +++ b/OpenCL/m00620_a3-optimized.cl @@ -294,7 +294,7 @@ DECLSPEC void m00620s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m00620_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00620_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -343,7 +343,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00620_m04 (KERN_ATTR_BASIC ()) m00620m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00620_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00620_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -392,7 +392,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00620_m08 (KERN_ATTR_BASIC ()) m00620m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00620_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00620_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -441,7 +441,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00620_m16 (KERN_ATTR_BASIC ()) m00620m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00620_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00620_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -490,7 +490,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00620_s04 (KERN_ATTR_BASIC ()) m00620s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00620_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00620_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -539,7 +539,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00620_s08 (KERN_ATTR_BASIC ()) m00620s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00620_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00620_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m00620_a3-pure.cl b/OpenCL/m00620_a3-pure.cl index cc18a0f0f..67b5f0b9e 100644 --- a/OpenCL/m00620_a3-pure.cl +++ b/OpenCL/m00620_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2b.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00620_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00620_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -74,7 +74,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00620_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00620_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00620_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m00900_a0-optimized.cl b/OpenCL/m00900_a0-optimized.cl index 8b17771a7..26d63da8a 100644 --- a/OpenCL/m00900_a0-optimized.cl +++ b/OpenCL/m00900_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md4.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00900_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00900_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -124,15 +124,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00900_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00900_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00900_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00900_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00900_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00900_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00900_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -255,10 +255,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00900_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00900_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00900_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00900_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00900_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m00900_a0-pure.cl b/OpenCL/m00900_a0-pure.cl index 9d7234e7f..bf58b7c98 100644 --- a/OpenCL/m00900_a0-pure.cl +++ b/OpenCL/m00900_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md4.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00900_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00900_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00900_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00900_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m00900_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m00900_a1-optimized.cl b/OpenCL/m00900_a1-optimized.cl index db7afcd8b..826880268 100644 --- a/OpenCL/m00900_a1-optimized.cl +++ b/OpenCL/m00900_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md4.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00900_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -181,15 +181,15 @@ KERNEL_FQ void HC_ATTR_SEQ m00900_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00900_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00900_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00900_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -371,10 +371,10 @@ KERNEL_FQ void HC_ATTR_SEQ m00900_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00900_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m00900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00900_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m00900_a1-pure.cl b/OpenCL/m00900_a1-pure.cl index ba049ca3d..a51fe1e85 100644 --- a/OpenCL/m00900_a1-pure.cl +++ b/OpenCL/m00900_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md4.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00900_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00900_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00900_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00900_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m00900_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m00900_a3-optimized.cl b/OpenCL/m00900_a3-optimized.cl index 092341866..706ff5924 100644 --- a/OpenCL/m00900_a3-optimized.cl +++ b/OpenCL/m00900_a3-optimized.cl @@ -347,7 +347,7 @@ DECLSPEC void m00900s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m00900_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00900_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -387,7 +387,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00900_m04 (KERN_ATTR_VECTOR ()) m00900m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00900_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00900_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -427,7 +427,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00900_m08 (KERN_ATTR_VECTOR ()) m00900m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00900_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00900_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -467,7 +467,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00900_m16 (KERN_ATTR_VECTOR ()) m00900m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00900_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00900_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -507,7 +507,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00900_s04 (KERN_ATTR_VECTOR ()) m00900s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00900_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00900_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -547,7 +547,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00900_s08 (KERN_ATTR_VECTOR ()) m00900s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m00900_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00900_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m00900_a3-pure.cl b/OpenCL/m00900_a3-pure.cl index 0737d311a..96a375a8c 100644 --- a/OpenCL/m00900_a3-pure.cl +++ b/OpenCL/m00900_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md4.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m00900_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00900_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void HC_ATTR_SEQ m00900_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m00900_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m00900_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01000_a0-optimized.cl b/OpenCL/m01000_a0-optimized.cl index eccf2ba26..e769e4360 100644 --- a/OpenCL/m01000_a0-optimized.cl +++ b/OpenCL/m01000_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md4.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01000_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01000_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -127,15 +127,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01000_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01000_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01000_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01000_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01000_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01000_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01000_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -261,10 +261,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01000_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01000_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01000_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01000_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01000_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01000_a0-pure.cl b/OpenCL/m01000_a0-pure.cl index 4934d2924..5907bcad6 100644 --- a/OpenCL/m01000_a0-pure.cl +++ b/OpenCL/m01000_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md4.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01000_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01000_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01000_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01000_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01000_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01000_a1-optimized.cl b/OpenCL/m01000_a1-optimized.cl index 2a7d39a9e..954467b3e 100644 --- a/OpenCL/m01000_a1-optimized.cl +++ b/OpenCL/m01000_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md4.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01000_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -187,15 +187,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01000_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01000_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01000_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01000_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -383,10 +383,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01000_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01000_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01000_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01000_a1-pure.cl b/OpenCL/m01000_a1-pure.cl index 59f5d9ce2..41b103ea4 100644 --- a/OpenCL/m01000_a1-pure.cl +++ b/OpenCL/m01000_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md4.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01000_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01000_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01000_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01000_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01000_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01000_a3-optimized.cl b/OpenCL/m01000_a3-optimized.cl index 2e55b98c1..4360b62b4 100644 --- a/OpenCL/m01000_a3-optimized.cl +++ b/OpenCL/m01000_a3-optimized.cl @@ -347,7 +347,7 @@ DECLSPEC void m01000s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m01000_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01000_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -387,7 +387,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01000_m04 (KERN_ATTR_VECTOR ()) m01000m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01000_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01000_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -427,7 +427,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01000_m08 (KERN_ATTR_VECTOR ()) m01000m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01000_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01000_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -467,7 +467,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01000_m16 (KERN_ATTR_VECTOR ()) m01000m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01000_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01000_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -507,7 +507,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01000_s04 (KERN_ATTR_VECTOR ()) m01000s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01000_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01000_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -547,7 +547,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01000_s08 (KERN_ATTR_VECTOR ()) m01000s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01000_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01000_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m01000_a3-pure.cl b/OpenCL/m01000_a3-pure.cl index 1c3e7bc49..6cc7b57bc 100644 --- a/OpenCL/m01000_a3-pure.cl +++ b/OpenCL/m01000_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md4.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01000_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01000_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -83,7 +83,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01000_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01000_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01000_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01100_a0-optimized.cl b/OpenCL/m01100_a0-optimized.cl index 8ea11de43..2188b95ad 100644 --- a/OpenCL/m01100_a0-optimized.cl +++ b/OpenCL/m01100_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md4.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01100_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01100_m04 (KERN_ATTR_RULES ()) { /** * base @@ -227,15 +227,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01100_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01100_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01100_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01100_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01100_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01100_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01100_s04 (KERN_ATTR_RULES ()) { /** * base @@ -461,10 +461,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01100_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01100_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01100_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01100_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01100_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01100_a0-pure.cl b/OpenCL/m01100_a0-pure.cl index b5a7f6e2b..869fc3ab5 100644 --- a/OpenCL/m01100_a0-pure.cl +++ b/OpenCL/m01100_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md4.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01100_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01100_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -84,7 +84,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01100_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01100_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01100_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01100_a1-optimized.cl b/OpenCL/m01100_a1-optimized.cl index 9313b6ce6..3abdd43d4 100644 --- a/OpenCL/m01100_a1-optimized.cl +++ b/OpenCL/m01100_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md4.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01100_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01100_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -287,15 +287,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01100_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01100_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01100_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01100_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01100_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01100_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01100_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -583,10 +583,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01100_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01100_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01100_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01100_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01100_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01100_a1-pure.cl b/OpenCL/m01100_a1-pure.cl index cc8b59777..f8e9fb2a9 100644 --- a/OpenCL/m01100_a1-pure.cl +++ b/OpenCL/m01100_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md4.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01100_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01100_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01100_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01100_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01100_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01100_a3-optimized.cl b/OpenCL/m01100_a3-optimized.cl index 35c26ef5a..d7253f1cc 100644 --- a/OpenCL/m01100_a3-optimized.cl +++ b/OpenCL/m01100_a3-optimized.cl @@ -493,7 +493,7 @@ DECLSPEC void m01100s (LOCAL_AS salt_t *s_salt_buf, PRIVATE_AS u32 *w, const u32 } } -KERNEL_FQ void HC_ATTR_SEQ m01100_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01100_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -548,7 +548,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01100_m04 (KERN_ATTR_VECTOR ()) m01100m (s_salt_buf, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01100_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01100_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -603,7 +603,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01100_m08 (KERN_ATTR_VECTOR ()) m01100m (s_salt_buf, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01100_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01100_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -658,7 +658,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01100_m16 (KERN_ATTR_VECTOR ()) m01100m (s_salt_buf, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01100_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01100_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -713,7 +713,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01100_s04 (KERN_ATTR_VECTOR ()) m01100s (s_salt_buf, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01100_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01100_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -768,7 +768,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01100_s08 (KERN_ATTR_VECTOR ()) m01100s (s_salt_buf, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01100_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01100_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m01100_a3-pure.cl b/OpenCL/m01100_a3-pure.cl index 687126d39..5924876d2 100644 --- a/OpenCL/m01100_a3-pure.cl +++ b/OpenCL/m01100_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md4.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01100_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01100_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -122,7 +122,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01100_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01100_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01100_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01300_a0-optimized.cl b/OpenCL/m01300_a0-optimized.cl index b50f950f9..d2785fcd8 100644 --- a/OpenCL/m01300_a0-optimized.cl +++ b/OpenCL/m01300_a0-optimized.cl @@ -29,7 +29,7 @@ g = 0; \ } -KERNEL_FQ void HC_ATTR_SEQ m01300_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01300_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -176,15 +176,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01300_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01300_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01300_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01300_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01300_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01300_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01300_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -362,10 +362,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01300_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01300_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01300_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01300_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01300_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01300_a0-pure.cl b/OpenCL/m01300_a0-pure.cl index a978a5df6..2a798d59f 100644 --- a/OpenCL/m01300_a0-pure.cl +++ b/OpenCL/m01300_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha224.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01300_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01300_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01300_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01300_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01300_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01300_a1-optimized.cl b/OpenCL/m01300_a1-optimized.cl index bc24adbc5..141fb139b 100644 --- a/OpenCL/m01300_a1-optimized.cl +++ b/OpenCL/m01300_a1-optimized.cl @@ -27,7 +27,7 @@ g = 0; \ } -KERNEL_FQ void HC_ATTR_SEQ m01300_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01300_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -232,15 +232,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01300_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01300_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01300_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01300_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01300_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01300_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01300_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -476,10 +476,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01300_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01300_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01300_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01300_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01300_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01300_a1-pure.cl b/OpenCL/m01300_a1-pure.cl index 5dfb3df3b..5cc91ff33 100644 --- a/OpenCL/m01300_a1-pure.cl +++ b/OpenCL/m01300_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha224.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01300_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01300_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01300_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01300_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01300_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01300_a3-optimized.cl b/OpenCL/m01300_a3-optimized.cl index 91d32df5b..132748c1f 100644 --- a/OpenCL/m01300_a3-optimized.cl +++ b/OpenCL/m01300_a3-optimized.cl @@ -290,7 +290,7 @@ DECLSPEC void m01300s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m01300_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01300_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -330,7 +330,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01300_m04 (KERN_ATTR_VECTOR ()) m01300m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01300_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01300_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -370,7 +370,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01300_m08 (KERN_ATTR_VECTOR ()) m01300m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01300_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01300_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -410,7 +410,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01300_m16 (KERN_ATTR_VECTOR ()) m01300m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01300_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01300_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -450,7 +450,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01300_s04 (KERN_ATTR_VECTOR ()) m01300s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01300_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01300_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -490,7 +490,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01300_s08 (KERN_ATTR_VECTOR ()) m01300s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01300_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01300_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m01300_a3-pure.cl b/OpenCL/m01300_a3-pure.cl index 9c7c04d23..491792ea6 100644 --- a/OpenCL/m01300_a3-pure.cl +++ b/OpenCL/m01300_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha224.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01300_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01300_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01300_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01300_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01300_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01400_a0-optimized.cl b/OpenCL/m01400_a0-optimized.cl index 8324073ff..511b15e4f 100644 --- a/OpenCL/m01400_a0-optimized.cl +++ b/OpenCL/m01400_a0-optimized.cl @@ -30,7 +30,7 @@ h = 0; \ } -KERNEL_FQ void HC_ATTR_SEQ m01400_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01400_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -177,15 +177,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01400_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01400_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01400_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01400_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01400_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01400_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01400_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -365,10 +365,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01400_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01400_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01400_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01400_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01400_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01400_a0-pure.cl b/OpenCL/m01400_a0-pure.cl index 3148ec349..002b9cf9b 100644 --- a/OpenCL/m01400_a0-pure.cl +++ b/OpenCL/m01400_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01400_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01400_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01400_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01400_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01400_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01400_a1-optimized.cl b/OpenCL/m01400_a1-optimized.cl index 54ed34bab..992c36d5c 100644 --- a/OpenCL/m01400_a1-optimized.cl +++ b/OpenCL/m01400_a1-optimized.cl @@ -28,7 +28,7 @@ h = 0; \ } -KERNEL_FQ void HC_ATTR_SEQ m01400_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01400_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -233,15 +233,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01400_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01400_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01400_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01400_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01400_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01400_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01400_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -479,10 +479,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01400_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01400_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01400_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01400_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01400_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01400_a1-pure.cl b/OpenCL/m01400_a1-pure.cl index 57c346fff..868e6f9b6 100644 --- a/OpenCL/m01400_a1-pure.cl +++ b/OpenCL/m01400_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01400_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01400_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01400_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01400_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01400_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01400_a3-optimized.cl b/OpenCL/m01400_a3-optimized.cl index 5c0172406..6cec22dae 100644 --- a/OpenCL/m01400_a3-optimized.cl +++ b/OpenCL/m01400_a3-optimized.cl @@ -293,7 +293,7 @@ DECLSPEC void m01400s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m01400_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01400_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -333,7 +333,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01400_m04 (KERN_ATTR_VECTOR ()) m01400m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01400_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01400_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -373,7 +373,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01400_m08 (KERN_ATTR_VECTOR ()) m01400m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01400_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01400_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -413,7 +413,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01400_m16 (KERN_ATTR_VECTOR ()) m01400m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01400_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01400_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -453,7 +453,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01400_s04 (KERN_ATTR_VECTOR ()) m01400s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01400_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01400_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -493,7 +493,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01400_s08 (KERN_ATTR_VECTOR ()) m01400s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01400_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01400_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m01400_a3-pure.cl b/OpenCL/m01400_a3-pure.cl index 311f7a057..c4a457e42 100644 --- a/OpenCL/m01400_a3-pure.cl +++ b/OpenCL/m01400_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01400_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01400_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01400_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01400_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01400_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01410_a0-optimized.cl b/OpenCL/m01410_a0-optimized.cl index 6f995c8cf..dc4c2d068 100644 --- a/OpenCL/m01410_a0-optimized.cl +++ b/OpenCL/m01410_a0-optimized.cl @@ -30,7 +30,7 @@ h = 0; \ } -KERNEL_FQ void HC_ATTR_SEQ m01410_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01410_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -250,15 +250,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01410_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01410_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01410_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01410_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01410_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01410_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01410_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -511,10 +511,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01410_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01410_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01410_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01410_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01410_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01410_a0-pure.cl b/OpenCL/m01410_a0-pure.cl index 91a4277f3..d2b65cb4f 100644 --- a/OpenCL/m01410_a0-pure.cl +++ b/OpenCL/m01410_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01410_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01410_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01410_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01410_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01410_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01410_a1-optimized.cl b/OpenCL/m01410_a1-optimized.cl index 9f3344899..e879d80b7 100644 --- a/OpenCL/m01410_a1-optimized.cl +++ b/OpenCL/m01410_a1-optimized.cl @@ -28,7 +28,7 @@ h = 0; \ } -KERNEL_FQ void HC_ATTR_SEQ m01410_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01410_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -308,15 +308,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01410_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01410_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01410_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01410_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01410_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01410_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01410_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -629,10 +629,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01410_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01410_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01410_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01410_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01410_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01410_a1-pure.cl b/OpenCL/m01410_a1-pure.cl index c5f0d5d7f..a27236812 100644 --- a/OpenCL/m01410_a1-pure.cl +++ b/OpenCL/m01410_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01410_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01410_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -67,7 +67,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01410_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01410_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01410_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01410_a3-optimized.cl b/OpenCL/m01410_a3-optimized.cl index be68d9207..935acdfed 100644 --- a/OpenCL/m01410_a3-optimized.cl +++ b/OpenCL/m01410_a3-optimized.cl @@ -344,7 +344,7 @@ DECLSPEC void m01410s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m01410_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01410_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -384,7 +384,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01410_m04 (KERN_ATTR_VECTOR ()) m01410m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01410_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01410_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -424,7 +424,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01410_m08 (KERN_ATTR_VECTOR ()) m01410m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01410_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01410_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -464,7 +464,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01410_m16 (KERN_ATTR_VECTOR ()) m01410m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01410_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01410_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -504,7 +504,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01410_s04 (KERN_ATTR_VECTOR ()) m01410s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01410_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01410_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -544,7 +544,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01410_s08 (KERN_ATTR_VECTOR ()) m01410s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01410_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01410_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m01410_a3-pure.cl b/OpenCL/m01410_a3-pure.cl index 2f714401c..792065f92 100644 --- a/OpenCL/m01410_a3-pure.cl +++ b/OpenCL/m01410_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01410_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01410_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01410_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01410_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01410_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01420_a0-optimized.cl b/OpenCL/m01420_a0-optimized.cl index 970e50167..553d6a5b0 100644 --- a/OpenCL/m01420_a0-optimized.cl +++ b/OpenCL/m01420_a0-optimized.cl @@ -30,7 +30,7 @@ h = 0; \ } -KERNEL_FQ void HC_ATTR_SEQ m01420_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01420_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -230,15 +230,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01420_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01420_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01420_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01420_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01420_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01420_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01420_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -471,10 +471,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01420_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01420_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01420_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01420_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01420_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01420_a0-pure.cl b/OpenCL/m01420_a0-pure.cl index 1a5fbc39f..037b6dd85 100644 --- a/OpenCL/m01420_a0-pure.cl +++ b/OpenCL/m01420_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01420_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01420_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -64,7 +64,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01420_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01420_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01420_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01420_a1-optimized.cl b/OpenCL/m01420_a1-optimized.cl index 39680d0ba..f7fd380bc 100644 --- a/OpenCL/m01420_a1-optimized.cl +++ b/OpenCL/m01420_a1-optimized.cl @@ -28,7 +28,7 @@ h = 0; \ } -KERNEL_FQ void HC_ATTR_SEQ m01420_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01420_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -286,15 +286,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01420_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01420_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01420_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01420_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01420_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01420_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01420_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -585,10 +585,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01420_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01420_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01420_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01420_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01420_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01420_a1-pure.cl b/OpenCL/m01420_a1-pure.cl index fa365ebf6..8ac8bdd36 100644 --- a/OpenCL/m01420_a1-pure.cl +++ b/OpenCL/m01420_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01420_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01420_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -58,7 +58,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01420_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01420_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01420_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01420_a3-optimized.cl b/OpenCL/m01420_a3-optimized.cl index d59abc28d..fd585d33f 100644 --- a/OpenCL/m01420_a3-optimized.cl +++ b/OpenCL/m01420_a3-optimized.cl @@ -443,7 +443,7 @@ DECLSPEC void m01420s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m01420_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01420_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -492,7 +492,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01420_m04 (KERN_ATTR_BASIC ()) m01420m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01420_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01420_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -541,7 +541,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01420_m08 (KERN_ATTR_BASIC ()) m01420m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01420_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01420_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -590,7 +590,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01420_m16 (KERN_ATTR_BASIC ()) m01420m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01420_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01420_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -639,7 +639,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01420_s04 (KERN_ATTR_BASIC ()) m01420s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01420_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01420_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -688,7 +688,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01420_s08 (KERN_ATTR_BASIC ()) m01420s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01420_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01420_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m01420_a3-pure.cl b/OpenCL/m01420_a3-pure.cl index 998de6ea4..a8e3eaa1d 100644 --- a/OpenCL/m01420_a3-pure.cl +++ b/OpenCL/m01420_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01420_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01420_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -75,7 +75,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01420_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01420_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01420_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01430_a0-optimized.cl b/OpenCL/m01430_a0-optimized.cl index fce561f8d..8107e625e 100644 --- a/OpenCL/m01430_a0-optimized.cl +++ b/OpenCL/m01430_a0-optimized.cl @@ -30,7 +30,7 @@ h = 0; \ } -KERNEL_FQ void HC_ATTR_SEQ m01430_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01430_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -255,15 +255,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01430_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01430_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01430_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01430_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01430_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01430_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01430_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -521,10 +521,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01430_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01430_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01430_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01430_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01430_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01430_a0-pure.cl b/OpenCL/m01430_a0-pure.cl index ed9bba7e0..a791c0654 100644 --- a/OpenCL/m01430_a0-pure.cl +++ b/OpenCL/m01430_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01430_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01430_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01430_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01430_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01430_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01430_a1-optimized.cl b/OpenCL/m01430_a1-optimized.cl index 44f6cc3b0..6e225dd2f 100644 --- a/OpenCL/m01430_a1-optimized.cl +++ b/OpenCL/m01430_a1-optimized.cl @@ -28,7 +28,7 @@ h = 0; \ } -KERNEL_FQ void HC_ATTR_SEQ m01430_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01430_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -313,15 +313,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01430_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01430_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01430_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01430_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01430_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01430_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01430_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -639,10 +639,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01430_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01430_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01430_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01430_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01430_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01430_a1-pure.cl b/OpenCL/m01430_a1-pure.cl index 8b16ee251..b55c5ab94 100644 --- a/OpenCL/m01430_a1-pure.cl +++ b/OpenCL/m01430_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01430_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01430_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -67,7 +67,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01430_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01430_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01430_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01430_a3-optimized.cl b/OpenCL/m01430_a3-optimized.cl index a097554a7..60e56fae7 100644 --- a/OpenCL/m01430_a3-optimized.cl +++ b/OpenCL/m01430_a3-optimized.cl @@ -344,7 +344,7 @@ DECLSPEC void m01430s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m01430_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01430_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -384,7 +384,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01430_m04 (KERN_ATTR_VECTOR ()) m01430m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01430_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01430_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -424,7 +424,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01430_m08 (KERN_ATTR_VECTOR ()) m01430m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01430_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01430_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -464,7 +464,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01430_m16 (KERN_ATTR_VECTOR ()) m01430m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01430_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01430_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -504,7 +504,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01430_s04 (KERN_ATTR_VECTOR ()) m01430s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01430_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01430_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -544,7 +544,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01430_s08 (KERN_ATTR_VECTOR ()) m01430s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01430_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01430_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m01430_a3-pure.cl b/OpenCL/m01430_a3-pure.cl index bd94748a6..87cd121d8 100644 --- a/OpenCL/m01430_a3-pure.cl +++ b/OpenCL/m01430_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01430_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01430_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01430_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01430_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01430_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01440_a0-optimized.cl b/OpenCL/m01440_a0-optimized.cl index 679c97f4f..20b619abd 100644 --- a/OpenCL/m01440_a0-optimized.cl +++ b/OpenCL/m01440_a0-optimized.cl @@ -30,7 +30,7 @@ h = 0; \ } -KERNEL_FQ void HC_ATTR_SEQ m01440_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01440_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -235,15 +235,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01440_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01440_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01440_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01440_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01440_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01440_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01440_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -481,10 +481,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01440_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01440_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01440_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01440_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01440_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01440_a0-pure.cl b/OpenCL/m01440_a0-pure.cl index cd463928b..5fe4fd6a1 100644 --- a/OpenCL/m01440_a0-pure.cl +++ b/OpenCL/m01440_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01440_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01440_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -64,7 +64,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01440_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01440_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01440_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01440_a1-optimized.cl b/OpenCL/m01440_a1-optimized.cl index 4cadbeab5..3d4408445 100644 --- a/OpenCL/m01440_a1-optimized.cl +++ b/OpenCL/m01440_a1-optimized.cl @@ -28,7 +28,7 @@ h = 0; \ } -KERNEL_FQ void HC_ATTR_SEQ m01440_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01440_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -291,15 +291,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01440_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01440_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01440_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01440_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01440_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01440_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01440_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -595,10 +595,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01440_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01440_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01440_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01440_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01440_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01440_a1-pure.cl b/OpenCL/m01440_a1-pure.cl index 5ab4daf6a..de83b2fd9 100644 --- a/OpenCL/m01440_a1-pure.cl +++ b/OpenCL/m01440_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01440_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01440_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -58,7 +58,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01440_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01440_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01440_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01440_a3-optimized.cl b/OpenCL/m01440_a3-optimized.cl index 70954978d..2f8b3a06c 100644 --- a/OpenCL/m01440_a3-optimized.cl +++ b/OpenCL/m01440_a3-optimized.cl @@ -443,7 +443,7 @@ DECLSPEC void m01440s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m01440_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01440_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -492,7 +492,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01440_m04 (KERN_ATTR_BASIC ()) m01440m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01440_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01440_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -541,7 +541,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01440_m08 (KERN_ATTR_BASIC ()) m01440m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01440_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01440_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -590,7 +590,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01440_m16 (KERN_ATTR_BASIC ()) m01440m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01440_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01440_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -639,7 +639,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01440_s04 (KERN_ATTR_BASIC ()) m01440s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01440_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01440_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -688,7 +688,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01440_s08 (KERN_ATTR_BASIC ()) m01440s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01440_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01440_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m01440_a3-pure.cl b/OpenCL/m01440_a3-pure.cl index df3ce8099..d20546de8 100644 --- a/OpenCL/m01440_a3-pure.cl +++ b/OpenCL/m01440_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01440_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01440_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -75,7 +75,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01440_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01440_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01440_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01450_a0-optimized.cl b/OpenCL/m01450_a0-optimized.cl index a8cb98718..bf5043c6e 100644 --- a/OpenCL/m01450_a0-optimized.cl +++ b/OpenCL/m01450_a0-optimized.cl @@ -117,7 +117,7 @@ DECLSPEC void hmac_sha256_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m01450_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01450_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -231,15 +231,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01450_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01450_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01450_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01450_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01450_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01450_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01450_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -365,10 +365,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01450_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01450_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01450_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01450_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01450_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01450_a0-pure.cl b/OpenCL/m01450_a0-pure.cl index e3971b35f..1d5edb8dd 100644 --- a/OpenCL/m01450_a0-pure.cl +++ b/OpenCL/m01450_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01450_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01450_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01450_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01450_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01450_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01450_a1-optimized.cl b/OpenCL/m01450_a1-optimized.cl index 6114c0740..42917ce80 100644 --- a/OpenCL/m01450_a1-optimized.cl +++ b/OpenCL/m01450_a1-optimized.cl @@ -115,7 +115,7 @@ DECLSPEC void hmac_sha256_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m01450_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01450_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -297,15 +297,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01450_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01450_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01450_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01450_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01450_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01450_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01450_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -499,10 +499,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01450_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01450_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01450_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01450_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01450_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01450_a1-pure.cl b/OpenCL/m01450_a1-pure.cl index 5032c09ee..fda90f7a1 100644 --- a/OpenCL/m01450_a1-pure.cl +++ b/OpenCL/m01450_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01450_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01450_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -92,7 +92,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01450_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01450_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01450_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01450_a3-optimized.cl b/OpenCL/m01450_a3-optimized.cl index c08243469..dad463cf6 100644 --- a/OpenCL/m01450_a3-optimized.cl +++ b/OpenCL/m01450_a3-optimized.cl @@ -331,7 +331,7 @@ DECLSPEC void m01450s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m01450_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01450_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -380,7 +380,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01450_m04 (KERN_ATTR_BASIC ()) m01450m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01450_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01450_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -429,7 +429,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01450_m08 (KERN_ATTR_BASIC ()) m01450m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01450_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01450_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -478,7 +478,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01450_m16 (KERN_ATTR_BASIC ()) m01450m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01450_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01450_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -527,7 +527,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01450_s04 (KERN_ATTR_BASIC ()) m01450s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01450_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01450_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -576,7 +576,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01450_s08 (KERN_ATTR_BASIC ()) m01450s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01450_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01450_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m01450_a3-pure.cl b/OpenCL/m01450_a3-pure.cl index 97064dd5d..4f089698c 100644 --- a/OpenCL/m01450_a3-pure.cl +++ b/OpenCL/m01450_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01450_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01450_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -78,7 +78,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01450_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01450_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01450_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01460_a0-optimized.cl b/OpenCL/m01460_a0-optimized.cl index a69ce5a19..fab2a2e5f 100644 --- a/OpenCL/m01460_a0-optimized.cl +++ b/OpenCL/m01460_a0-optimized.cl @@ -117,7 +117,7 @@ DECLSPEC void hmac_sha256_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m01460_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01460_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -244,15 +244,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01460_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01460_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01460_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01460_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01460_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01460_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01460_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -391,10 +391,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01460_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01460_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01460_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01460_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01460_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01460_a0-pure.cl b/OpenCL/m01460_a0-pure.cl index 8cb08f30e..5dc2ba300 100644 --- a/OpenCL/m01460_a0-pure.cl +++ b/OpenCL/m01460_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01460_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01460_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01460_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01460_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01460_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01460_a1-optimized.cl b/OpenCL/m01460_a1-optimized.cl index 548876cb9..0ed4b8a8a 100644 --- a/OpenCL/m01460_a1-optimized.cl +++ b/OpenCL/m01460_a1-optimized.cl @@ -115,7 +115,7 @@ DECLSPEC void hmac_sha256_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m01460_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01460_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -302,15 +302,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01460_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01460_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01460_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01460_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01460_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01460_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01460_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -509,10 +509,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01460_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01460_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01460_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01460_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01460_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01460_a1-pure.cl b/OpenCL/m01460_a1-pure.cl index 0dae76818..862fa584a 100644 --- a/OpenCL/m01460_a1-pure.cl +++ b/OpenCL/m01460_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01460_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01460_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -94,7 +94,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01460_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01460_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01460_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01460_a3-optimized.cl b/OpenCL/m01460_a3-optimized.cl index 04848e834..10c6053e1 100644 --- a/OpenCL/m01460_a3-optimized.cl +++ b/OpenCL/m01460_a3-optimized.cl @@ -327,7 +327,7 @@ DECLSPEC void m01460s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m01460_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01460_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -376,7 +376,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01460_m04 (KERN_ATTR_BASIC ()) m01460m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01460_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01460_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -425,7 +425,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01460_m08 (KERN_ATTR_BASIC ()) m01460m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01460_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01460_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -474,7 +474,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01460_m16 (KERN_ATTR_BASIC ()) m01460m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01460_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01460_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -523,7 +523,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01460_s04 (KERN_ATTR_BASIC ()) m01460s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01460_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01460_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -572,7 +572,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01460_s08 (KERN_ATTR_BASIC ()) m01460s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01460_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01460_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m01460_a3-pure.cl b/OpenCL/m01460_a3-pure.cl index 2621c623d..967677511 100644 --- a/OpenCL/m01460_a3-pure.cl +++ b/OpenCL/m01460_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01460_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01460_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01460_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01460_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01460_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01470_a0-optimized.cl b/OpenCL/m01470_a0-optimized.cl index c90923d3d..269e2a6a4 100644 --- a/OpenCL/m01470_a0-optimized.cl +++ b/OpenCL/m01470_a0-optimized.cl @@ -30,7 +30,7 @@ h = 0; \ } -KERNEL_FQ void HC_ATTR_SEQ m01470_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01470_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -182,15 +182,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01470_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01470_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01470_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01470_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01470_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01470_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01470_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -375,10 +375,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01470_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01470_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01470_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01470_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01470_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01470_a0-pure.cl b/OpenCL/m01470_a0-pure.cl index c664eee91..beefea18a 100644 --- a/OpenCL/m01470_a0-pure.cl +++ b/OpenCL/m01470_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01470_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01470_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -62,7 +62,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01470_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01470_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01470_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01470_a1-optimized.cl b/OpenCL/m01470_a1-optimized.cl index 93af6ba9a..c528febf8 100644 --- a/OpenCL/m01470_a1-optimized.cl +++ b/OpenCL/m01470_a1-optimized.cl @@ -28,7 +28,7 @@ h = 0; \ } -KERNEL_FQ void HC_ATTR_SEQ m01470_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01470_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -238,15 +238,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01470_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01470_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01470_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01470_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01470_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01470_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01470_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -489,10 +489,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01470_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01470_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01470_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01470_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01470_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01470_a1-pure.cl b/OpenCL/m01470_a1-pure.cl index 1e0022f48..971100e6b 100644 --- a/OpenCL/m01470_a1-pure.cl +++ b/OpenCL/m01470_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01470_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01470_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01470_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01470_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01470_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01470_a3-optimized.cl b/OpenCL/m01470_a3-optimized.cl index 1f50fee43..d5e287964 100644 --- a/OpenCL/m01470_a3-optimized.cl +++ b/OpenCL/m01470_a3-optimized.cl @@ -345,7 +345,7 @@ DECLSPEC void m01470s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m01470_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01470_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -394,7 +394,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01470_m04 (KERN_ATTR_BASIC ()) m01470m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01470_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01470_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -443,7 +443,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01470_m08 (KERN_ATTR_BASIC ()) m01470m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01470_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01470_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -492,7 +492,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01470_m16 (KERN_ATTR_BASIC ()) m01470m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01470_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01470_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -541,7 +541,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01470_s04 (KERN_ATTR_BASIC ()) m01470s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01470_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01470_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -590,7 +590,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01470_s08 (KERN_ATTR_BASIC ()) m01470s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01470_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01470_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m01470_a3-pure.cl b/OpenCL/m01470_a3-pure.cl index 183dd48cd..fee6f362f 100644 --- a/OpenCL/m01470_a3-pure.cl +++ b/OpenCL/m01470_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01470_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01470_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -73,7 +73,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01470_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01470_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01470_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01500_a0-pure.cl b/OpenCL/m01500_a0-pure.cl index 3b3ab3602..c4f39f20d 100644 --- a/OpenCL/m01500_a0-pure.cl +++ b/OpenCL/m01500_a0-pure.cl @@ -482,7 +482,7 @@ DECLSPEC void _des_crypt_encrypt (PRIVATE_AS u32 *iv, u32 mask, PRIVATE_AS u32 iv[1] = hc_rotl32 (l, 31); } -KERNEL_FQ void HC_ATTR_SEQ m01500_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01500_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -566,7 +566,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01500_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01500_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01500_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01500_a1-pure.cl b/OpenCL/m01500_a1-pure.cl index 1ce28aea8..5c5c4e335 100644 --- a/OpenCL/m01500_a1-pure.cl +++ b/OpenCL/m01500_a1-pure.cl @@ -480,7 +480,7 @@ DECLSPEC void _des_crypt_encrypt (PRIVATE_AS u32 *iv, u32 mask, PRIVATE_AS u32x iv[1] = hc_rotl32 (l, 31); } -KERNEL_FQ void HC_ATTR_SEQ m01500_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01500_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -643,7 +643,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01500_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01500_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01500_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01500_a3-pure.cl b/OpenCL/m01500_a3-pure.cl index 0823a99d1..1feeba9c2 100644 --- a/OpenCL/m01500_a3-pure.cl +++ b/OpenCL/m01500_a3-pure.cl @@ -1885,7 +1885,7 @@ DECLSPEC void transpose32c (PRIVATE_AS u32 *data) // transpose bitslice mod : attention race conditions, need different buffers for *in and *out // -KERNEL_FQ void HC_ATTR_SEQ m01500_tm (KERN_ATTR_TM) +KERNEL_FQ KERNEL_FA void m01500_tm (KERN_ATTR_TM) { const u64 gid = get_global_id (0); @@ -1915,11 +1915,11 @@ KERNEL_FQ void HC_ATTR_SEQ m01500_tm (KERN_ATTR_TM) #ifndef DESCRYPT_SALT -KERNEL_FQ void HC_ATTR_SEQ m01500_sxx (KERN_ATTR_BITSLICE ()) +KERNEL_FQ KERNEL_FA void m01500_sxx (KERN_ATTR_BITSLICE ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01500_mxx (KERN_ATTR_BITSLICE ()) +KERNEL_FQ KERNEL_FA void m01500_mxx (KERN_ATTR_BITSLICE ()) { /** * base @@ -2294,7 +2294,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01500_mxx (KERN_ATTR_BITSLICE ()) #else -KERNEL_FQ void HC_ATTR_SEQ m01500_sxx (KERN_ATTR_BITSLICE ()) +KERNEL_FQ KERNEL_FA void m01500_sxx (KERN_ATTR_BITSLICE ()) { /** * base @@ -2688,7 +2688,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01500_sxx (KERN_ATTR_BITSLICE ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01500_mxx (KERN_ATTR_BITSLICE ()) +KERNEL_FQ KERNEL_FA void m01500_mxx (KERN_ATTR_BITSLICE ()) { } diff --git a/OpenCL/m01600-optimized.cl b/OpenCL/m01600-optimized.cl index 38270f7b0..d113243e1 100644 --- a/OpenCL/m01600-optimized.cl +++ b/OpenCL/m01600-optimized.cl @@ -674,7 +674,7 @@ DECLSPEC void append_1st (PRIVATE_AS u32 *block0, PRIVATE_AS u32 *block1, PRIVAT } } -KERNEL_FQ void HC_ATTR_SEQ m01600_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m01600_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * base @@ -837,7 +837,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01600_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) tmps[gid].digest_buf[3] = digest[3]; } -KERNEL_FQ void HC_ATTR_SEQ m01600_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m01600_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * base @@ -1025,7 +1025,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01600_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) tmps[gid].digest_buf[3] = digest[3]; } -KERNEL_FQ void HC_ATTR_SEQ m01600_comp (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m01600_comp (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * modifier diff --git a/OpenCL/m01600-pure.cl b/OpenCL/m01600-pure.cl index 5d7edeab8..96ee4bbb3 100644 --- a/OpenCL/m01600-pure.cl +++ b/OpenCL/m01600-pure.cl @@ -25,7 +25,7 @@ typedef struct md5crypt_tmp #define md5apr1_magic0 0x72706124u #define md5apr1_magic1 0x00002431u -KERNEL_FQ void HC_ATTR_SEQ m01600_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m01600_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * base @@ -132,7 +132,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01600_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) tmps[gid].digest_buf[3] = md5_ctx.h[3]; } -KERNEL_FQ void HC_ATTR_SEQ m01600_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m01600_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * base @@ -227,7 +227,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01600_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) tmps[gid].digest_buf[3] = digest[3]; } -KERNEL_FQ void HC_ATTR_SEQ m01600_comp (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m01600_comp (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * modifier diff --git a/OpenCL/m01700_a0-optimized.cl b/OpenCL/m01700_a0-optimized.cl index 92605c15d..af7f4f89c 100644 --- a/OpenCL/m01700_a0-optimized.cl +++ b/OpenCL/m01700_a0-optimized.cl @@ -122,7 +122,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void HC_ATTR_SEQ m01700_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01700_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -215,15 +215,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01700_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01700_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01700_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01700_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01700_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01700_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01700_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -328,10 +328,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01700_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01700_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01700_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01700_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01700_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01700_a0-pure.cl b/OpenCL/m01700_a0-pure.cl index 08c381811..e71c37b48 100644 --- a/OpenCL/m01700_a0-pure.cl +++ b/OpenCL/m01700_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01700_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01700_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01700_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01700_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01700_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01700_a1-optimized.cl b/OpenCL/m01700_a1-optimized.cl index 854889299..d9d7791c6 100644 --- a/OpenCL/m01700_a1-optimized.cl +++ b/OpenCL/m01700_a1-optimized.cl @@ -120,7 +120,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void HC_ATTR_SEQ m01700_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01700_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -271,15 +271,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01700_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01700_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01700_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01700_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01700_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01700_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01700_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -442,10 +442,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01700_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01700_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01700_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01700_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01700_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01700_a1-pure.cl b/OpenCL/m01700_a1-pure.cl index 3171feb4e..91b36c2d4 100644 --- a/OpenCL/m01700_a1-pure.cl +++ b/OpenCL/m01700_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01700_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01700_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01700_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01700_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01700_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01700_a3-optimized.cl b/OpenCL/m01700_a3-optimized.cl index aee1ce2dd..6e6e179fa 100644 --- a/OpenCL/m01700_a3-optimized.cl +++ b/OpenCL/m01700_a3-optimized.cl @@ -256,7 +256,7 @@ DECLSPEC void m01700s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m01700_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01700_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -296,7 +296,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01700_m04 (KERN_ATTR_VECTOR ()) m01700m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01700_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01700_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -336,7 +336,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01700_m08 (KERN_ATTR_VECTOR ()) m01700m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01700_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01700_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -376,7 +376,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01700_m16 (KERN_ATTR_VECTOR ()) m01700m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01700_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01700_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -416,7 +416,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01700_s04 (KERN_ATTR_VECTOR ()) m01700s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01700_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01700_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -456,7 +456,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01700_s08 (KERN_ATTR_VECTOR ()) m01700s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01700_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01700_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m01700_a3-pure.cl b/OpenCL/m01700_a3-pure.cl index 86e719a88..78b0dcfe4 100644 --- a/OpenCL/m01700_a3-pure.cl +++ b/OpenCL/m01700_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01700_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01700_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01700_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01700_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01700_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01710_a0-optimized.cl b/OpenCL/m01710_a0-optimized.cl index 861b8f04d..2ec8f8243 100644 --- a/OpenCL/m01710_a0-optimized.cl +++ b/OpenCL/m01710_a0-optimized.cl @@ -122,7 +122,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void HC_ATTR_SEQ m01710_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01710_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -288,15 +288,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01710_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01710_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01710_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01710_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01710_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01710_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01710_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -474,10 +474,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01710_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01710_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01710_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01710_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01710_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01710_a0-pure.cl b/OpenCL/m01710_a0-pure.cl index a35c3ceea..f73767598 100644 --- a/OpenCL/m01710_a0-pure.cl +++ b/OpenCL/m01710_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01710_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01710_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01710_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01710_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01710_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01710_a1-optimized.cl b/OpenCL/m01710_a1-optimized.cl index 563cf257b..32f974b09 100644 --- a/OpenCL/m01710_a1-optimized.cl +++ b/OpenCL/m01710_a1-optimized.cl @@ -120,7 +120,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void HC_ATTR_SEQ m01710_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01710_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -346,15 +346,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01710_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01710_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01710_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01710_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01710_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01710_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01710_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -592,10 +592,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01710_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01710_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01710_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01710_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01710_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01710_a1-pure.cl b/OpenCL/m01710_a1-pure.cl index d1845b7a0..a77c2a8a9 100644 --- a/OpenCL/m01710_a1-pure.cl +++ b/OpenCL/m01710_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01710_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01710_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -67,7 +67,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01710_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01710_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01710_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01710_a3-optimized.cl b/OpenCL/m01710_a3-optimized.cl index 2893d5aaa..6ae9344e5 100644 --- a/OpenCL/m01710_a3-optimized.cl +++ b/OpenCL/m01710_a3-optimized.cl @@ -307,7 +307,7 @@ DECLSPEC void m01710s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m01710_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01710_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -347,7 +347,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01710_m04 (KERN_ATTR_VECTOR ()) m01710m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01710_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01710_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -387,7 +387,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01710_m08 (KERN_ATTR_VECTOR ()) m01710m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01710_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01710_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -427,7 +427,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01710_m16 (KERN_ATTR_VECTOR ()) m01710m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01710_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01710_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -467,7 +467,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01710_s04 (KERN_ATTR_VECTOR ()) m01710s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01710_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01710_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -507,7 +507,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01710_s08 (KERN_ATTR_VECTOR ()) m01710s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01710_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01710_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m01710_a3-pure.cl b/OpenCL/m01710_a3-pure.cl index deb999393..f27f6a528 100644 --- a/OpenCL/m01710_a3-pure.cl +++ b/OpenCL/m01710_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01710_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01710_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01710_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01710_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01710_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01720_a0-optimized.cl b/OpenCL/m01720_a0-optimized.cl index d0763acce..b82a837c6 100644 --- a/OpenCL/m01720_a0-optimized.cl +++ b/OpenCL/m01720_a0-optimized.cl @@ -122,7 +122,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void HC_ATTR_SEQ m01720_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01720_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -268,15 +268,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01720_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01720_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01720_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01720_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01720_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01720_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01720_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -434,10 +434,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01720_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01720_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01720_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01720_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01720_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01720_a0-pure.cl b/OpenCL/m01720_a0-pure.cl index bf690d1f9..443fea316 100644 --- a/OpenCL/m01720_a0-pure.cl +++ b/OpenCL/m01720_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01720_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01720_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -64,7 +64,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01720_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01720_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01720_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01720_a1-optimized.cl b/OpenCL/m01720_a1-optimized.cl index 83b8838c5..158151798 100644 --- a/OpenCL/m01720_a1-optimized.cl +++ b/OpenCL/m01720_a1-optimized.cl @@ -120,7 +120,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void HC_ATTR_SEQ m01720_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01720_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -324,15 +324,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01720_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01720_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01720_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01720_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01720_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01720_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01720_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -548,10 +548,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01720_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01720_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01720_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01720_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01720_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01720_a1-pure.cl b/OpenCL/m01720_a1-pure.cl index 5dffba6c1..ed26b6514 100644 --- a/OpenCL/m01720_a1-pure.cl +++ b/OpenCL/m01720_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01720_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01720_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -58,7 +58,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01720_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01720_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01720_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01720_a3-optimized.cl b/OpenCL/m01720_a3-optimized.cl index d37014204..856c65204 100644 --- a/OpenCL/m01720_a3-optimized.cl +++ b/OpenCL/m01720_a3-optimized.cl @@ -362,7 +362,7 @@ DECLSPEC void m01720s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m01720_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01720_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -411,7 +411,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01720_m04 (KERN_ATTR_BASIC ()) m01720m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01720_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01720_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -460,7 +460,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01720_m08 (KERN_ATTR_BASIC ()) m01720m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01720_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01720_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -509,7 +509,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01720_m16 (KERN_ATTR_BASIC ()) m01720m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01720_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01720_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -558,7 +558,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01720_s04 (KERN_ATTR_BASIC ()) m01720s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01720_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01720_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -607,7 +607,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01720_s08 (KERN_ATTR_BASIC ()) m01720s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01720_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01720_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m01720_a3-pure.cl b/OpenCL/m01720_a3-pure.cl index 4820e931b..26cc51ebf 100644 --- a/OpenCL/m01720_a3-pure.cl +++ b/OpenCL/m01720_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01720_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01720_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -75,7 +75,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01720_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01720_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01720_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01730_a0-optimized.cl b/OpenCL/m01730_a0-optimized.cl index 5eec58984..311b4df11 100644 --- a/OpenCL/m01730_a0-optimized.cl +++ b/OpenCL/m01730_a0-optimized.cl @@ -122,7 +122,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void HC_ATTR_SEQ m01730_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01730_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -293,15 +293,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01730_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01730_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01730_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01730_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01730_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01730_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01730_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -484,10 +484,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01730_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01730_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01730_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01730_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01730_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01730_a0-pure.cl b/OpenCL/m01730_a0-pure.cl index 7deed7724..fb7c40184 100644 --- a/OpenCL/m01730_a0-pure.cl +++ b/OpenCL/m01730_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01730_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01730_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01730_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01730_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01730_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01730_a1-optimized.cl b/OpenCL/m01730_a1-optimized.cl index 1836c668a..ea2821c4f 100644 --- a/OpenCL/m01730_a1-optimized.cl +++ b/OpenCL/m01730_a1-optimized.cl @@ -120,7 +120,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void HC_ATTR_SEQ m01730_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01730_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -351,15 +351,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01730_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01730_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01730_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01730_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01730_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01730_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01730_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -602,10 +602,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01730_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01730_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01730_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01730_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01730_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01730_a1-pure.cl b/OpenCL/m01730_a1-pure.cl index 711e64d02..6e38be410 100644 --- a/OpenCL/m01730_a1-pure.cl +++ b/OpenCL/m01730_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01730_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01730_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -67,7 +67,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01730_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01730_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01730_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01730_a3-optimized.cl b/OpenCL/m01730_a3-optimized.cl index 1e5fba2c1..7ca2a5e0a 100644 --- a/OpenCL/m01730_a3-optimized.cl +++ b/OpenCL/m01730_a3-optimized.cl @@ -307,7 +307,7 @@ DECLSPEC void m01730s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m01730_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01730_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -347,7 +347,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01730_m04 (KERN_ATTR_VECTOR ()) m01730m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01730_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01730_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -387,7 +387,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01730_m08 (KERN_ATTR_VECTOR ()) m01730m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01730_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01730_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -427,7 +427,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01730_m16 (KERN_ATTR_VECTOR ()) m01730m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01730_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01730_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -467,7 +467,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01730_s04 (KERN_ATTR_VECTOR ()) m01730s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01730_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01730_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -507,7 +507,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01730_s08 (KERN_ATTR_VECTOR ()) m01730s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01730_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01730_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m01730_a3-pure.cl b/OpenCL/m01730_a3-pure.cl index a97e9abb3..4b6911199 100644 --- a/OpenCL/m01730_a3-pure.cl +++ b/OpenCL/m01730_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01730_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01730_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01730_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01730_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01730_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01740_a0-optimized.cl b/OpenCL/m01740_a0-optimized.cl index 4132e930c..57eceb1f3 100644 --- a/OpenCL/m01740_a0-optimized.cl +++ b/OpenCL/m01740_a0-optimized.cl @@ -122,7 +122,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void HC_ATTR_SEQ m01740_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01740_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -273,15 +273,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01740_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01740_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01740_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01740_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01740_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01740_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01740_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -444,10 +444,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01740_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01740_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01740_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01740_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01740_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01740_a0-pure.cl b/OpenCL/m01740_a0-pure.cl index 2cfcfe14c..5a33f36e6 100644 --- a/OpenCL/m01740_a0-pure.cl +++ b/OpenCL/m01740_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01740_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01740_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -64,7 +64,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01740_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01740_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01740_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01740_a1-optimized.cl b/OpenCL/m01740_a1-optimized.cl index 6426ca3cd..063ad53d1 100644 --- a/OpenCL/m01740_a1-optimized.cl +++ b/OpenCL/m01740_a1-optimized.cl @@ -120,7 +120,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void HC_ATTR_SEQ m01740_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01740_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -329,15 +329,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01740_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01740_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01740_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01740_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01740_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01740_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01740_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -558,10 +558,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01740_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01740_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01740_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01740_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01740_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01740_a1-pure.cl b/OpenCL/m01740_a1-pure.cl index 60cd364e0..b15ab489c 100644 --- a/OpenCL/m01740_a1-pure.cl +++ b/OpenCL/m01740_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01740_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01740_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -58,7 +58,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01740_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01740_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01740_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01740_a3-optimized.cl b/OpenCL/m01740_a3-optimized.cl index 0a6e54d81..b1b9f8e47 100644 --- a/OpenCL/m01740_a3-optimized.cl +++ b/OpenCL/m01740_a3-optimized.cl @@ -362,7 +362,7 @@ DECLSPEC void m01740s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m01740_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01740_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -411,7 +411,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01740_m04 (KERN_ATTR_BASIC ()) m01740m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01740_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01740_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -460,7 +460,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01740_m08 (KERN_ATTR_BASIC ()) m01740m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01740_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01740_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -509,7 +509,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01740_m16 (KERN_ATTR_BASIC ()) m01740m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01740_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01740_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -558,7 +558,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01740_s04 (KERN_ATTR_BASIC ()) m01740s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01740_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01740_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -607,7 +607,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01740_s08 (KERN_ATTR_BASIC ()) m01740s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01740_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01740_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m01740_a3-pure.cl b/OpenCL/m01740_a3-pure.cl index 1d27f3998..48cb4485d 100644 --- a/OpenCL/m01740_a3-pure.cl +++ b/OpenCL/m01740_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01740_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01740_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -75,7 +75,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01740_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01740_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01740_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01750_a0-optimized.cl b/OpenCL/m01750_a0-optimized.cl index c6f9a1ef7..d19cdb97c 100644 --- a/OpenCL/m01750_a0-optimized.cl +++ b/OpenCL/m01750_a0-optimized.cl @@ -191,7 +191,7 @@ DECLSPEC void hmac_sha512_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha512_transform_transport_vector (w0_t, w1_t, w2_t, w3_t, digest); } -KERNEL_FQ void HC_ATTR_SEQ m01750_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01750_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -310,15 +310,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01750_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01750_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01750_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01750_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01750_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01750_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01750_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -449,10 +449,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01750_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01750_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01750_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01750_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01750_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01750_a0-pure.cl b/OpenCL/m01750_a0-pure.cl index 5b8958ee3..90f9a0b74 100644 --- a/OpenCL/m01750_a0-pure.cl +++ b/OpenCL/m01750_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01750_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01750_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01750_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01750_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01750_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01750_a1-optimized.cl b/OpenCL/m01750_a1-optimized.cl index 746a924d7..3c8a21025 100644 --- a/OpenCL/m01750_a1-optimized.cl +++ b/OpenCL/m01750_a1-optimized.cl @@ -189,7 +189,7 @@ DECLSPEC void hmac_sha512_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha512_transform_transport_vector (w0_t, w1_t, w2_t, w3_t, digest); } -KERNEL_FQ void HC_ATTR_SEQ m01750_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01750_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -376,15 +376,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01750_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01750_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01750_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01750_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01750_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01750_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01750_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -583,10 +583,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01750_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01750_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01750_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01750_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01750_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01750_a1-pure.cl b/OpenCL/m01750_a1-pure.cl index 608054bf3..135e50d06 100644 --- a/OpenCL/m01750_a1-pure.cl +++ b/OpenCL/m01750_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01750_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01750_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -92,7 +92,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01750_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01750_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01750_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01750_a3-optimized.cl b/OpenCL/m01750_a3-optimized.cl index 0a7c13d35..e422db63c 100644 --- a/OpenCL/m01750_a3-optimized.cl +++ b/OpenCL/m01750_a3-optimized.cl @@ -415,7 +415,7 @@ DECLSPEC void m01750s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m01750_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01750_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -464,7 +464,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01750_m04 (KERN_ATTR_BASIC ()) m01750m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01750_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01750_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -513,7 +513,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01750_m08 (KERN_ATTR_BASIC ()) m01750m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01750_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01750_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -562,7 +562,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01750_m16 (KERN_ATTR_BASIC ()) m01750m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01750_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01750_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -611,7 +611,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01750_s04 (KERN_ATTR_BASIC ()) m01750s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01750_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01750_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -660,7 +660,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01750_s08 (KERN_ATTR_BASIC ()) m01750s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01750_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01750_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m01750_a3-pure.cl b/OpenCL/m01750_a3-pure.cl index f89f033be..bcb295bf0 100644 --- a/OpenCL/m01750_a3-pure.cl +++ b/OpenCL/m01750_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01750_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01750_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -78,7 +78,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01750_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01750_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01750_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01760_a0-optimized.cl b/OpenCL/m01760_a0-optimized.cl index b79a830b7..4b20511c5 100644 --- a/OpenCL/m01760_a0-optimized.cl +++ b/OpenCL/m01760_a0-optimized.cl @@ -191,7 +191,7 @@ DECLSPEC void hmac_sha512_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha512_transform_transport_vector (w0_t, w1_t, w2_t, w3_t, digest); } -KERNEL_FQ void HC_ATTR_SEQ m01760_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01760_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -323,15 +323,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01760_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01760_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01760_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01760_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01760_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01760_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01760_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -475,10 +475,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01760_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01760_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01760_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01760_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01760_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01760_a0-pure.cl b/OpenCL/m01760_a0-pure.cl index 91cbdee15..891b11edd 100644 --- a/OpenCL/m01760_a0-pure.cl +++ b/OpenCL/m01760_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01760_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01760_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01760_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01760_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01760_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01760_a1-optimized.cl b/OpenCL/m01760_a1-optimized.cl index f652d1d28..b6a67ddfa 100644 --- a/OpenCL/m01760_a1-optimized.cl +++ b/OpenCL/m01760_a1-optimized.cl @@ -189,7 +189,7 @@ DECLSPEC void hmac_sha512_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha512_transform_transport_vector (w0_t, w1_t, w2_t, w3_t, digest); } -KERNEL_FQ void HC_ATTR_SEQ m01760_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01760_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -381,15 +381,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01760_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01760_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01760_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01760_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01760_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01760_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01760_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -593,10 +593,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01760_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01760_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01760_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01760_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01760_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01760_a1-pure.cl b/OpenCL/m01760_a1-pure.cl index 0a3460c69..398bb97b4 100644 --- a/OpenCL/m01760_a1-pure.cl +++ b/OpenCL/m01760_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01760_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01760_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -94,7 +94,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01760_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01760_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01760_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01760_a3-optimized.cl b/OpenCL/m01760_a3-optimized.cl index 03f86721c..2d83dd07a 100644 --- a/OpenCL/m01760_a3-optimized.cl +++ b/OpenCL/m01760_a3-optimized.cl @@ -411,7 +411,7 @@ DECLSPEC void m01760s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m01760_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01760_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -460,7 +460,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01760_m04 (KERN_ATTR_BASIC ()) m01760m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01760_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01760_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -509,7 +509,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01760_m08 (KERN_ATTR_BASIC ()) m01760m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01760_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01760_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -558,7 +558,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01760_m16 (KERN_ATTR_BASIC ()) m01760m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01760_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01760_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -607,7 +607,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01760_s04 (KERN_ATTR_BASIC ()) m01760s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01760_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01760_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -656,7 +656,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01760_s08 (KERN_ATTR_BASIC ()) m01760s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01760_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01760_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m01760_a3-pure.cl b/OpenCL/m01760_a3-pure.cl index b00cdcf64..91b43658a 100644 --- a/OpenCL/m01760_a3-pure.cl +++ b/OpenCL/m01760_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01760_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01760_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01760_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01760_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01760_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01770_a0-optimized.cl b/OpenCL/m01770_a0-optimized.cl index 917a7ad4b..e5cc7f117 100644 --- a/OpenCL/m01770_a0-optimized.cl +++ b/OpenCL/m01770_a0-optimized.cl @@ -122,7 +122,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void HC_ATTR_SEQ m01770_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01770_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -220,15 +220,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01770_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01770_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01770_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01770_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01770_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01770_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01770_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -338,10 +338,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01770_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01770_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01770_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01770_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01770_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m01770_a0-pure.cl b/OpenCL/m01770_a0-pure.cl index 7c026653e..4f9e35880 100644 --- a/OpenCL/m01770_a0-pure.cl +++ b/OpenCL/m01770_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01770_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01770_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01770_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01770_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m01770_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m01770_a1-optimized.cl b/OpenCL/m01770_a1-optimized.cl index c96298241..3d39d2fd3 100644 --- a/OpenCL/m01770_a1-optimized.cl +++ b/OpenCL/m01770_a1-optimized.cl @@ -120,7 +120,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void HC_ATTR_SEQ m01770_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01770_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -276,15 +276,15 @@ KERNEL_FQ void HC_ATTR_SEQ m01770_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01770_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01770_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01770_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01770_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01770_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01770_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -452,10 +452,10 @@ KERNEL_FQ void HC_ATTR_SEQ m01770_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01770_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01770_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m01770_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01770_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m01770_a1-pure.cl b/OpenCL/m01770_a1-pure.cl index 900aaf082..2f547c660 100644 --- a/OpenCL/m01770_a1-pure.cl +++ b/OpenCL/m01770_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01770_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01770_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01770_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01770_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m01770_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m01770_a3-optimized.cl b/OpenCL/m01770_a3-optimized.cl index 7847aa924..06bf8f2b0 100644 --- a/OpenCL/m01770_a3-optimized.cl +++ b/OpenCL/m01770_a3-optimized.cl @@ -258,7 +258,7 @@ DECLSPEC void m01770s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m01770_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01770_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -298,7 +298,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01770_m04 (KERN_ATTR_VECTOR ()) m01770m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01770_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01770_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -338,7 +338,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01770_m08 (KERN_ATTR_VECTOR ()) m01770m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01770_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01770_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -378,7 +378,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01770_m16 (KERN_ATTR_VECTOR ()) m01770m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01770_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01770_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -418,7 +418,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01770_s04 (KERN_ATTR_VECTOR ()) m01770s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01770_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01770_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -458,7 +458,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01770_s08 (KERN_ATTR_VECTOR ()) m01770s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m01770_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01770_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m01770_a3-pure.cl b/OpenCL/m01770_a3-pure.cl index aecd964bb..67f41b4ff 100644 --- a/OpenCL/m01770_a3-pure.cl +++ b/OpenCL/m01770_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m01770_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01770_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01770_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m01770_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m01770_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m01800-optimized.cl b/OpenCL/m01800-optimized.cl index 978e0c672..b7c17ad5d 100644 --- a/OpenCL/m01800-optimized.cl +++ b/OpenCL/m01800-optimized.cl @@ -171,7 +171,7 @@ DECLSPEC void orig_sha512_final (PRIVATE_AS orig_sha512_ctx_t *sha512_ctx) sha512_transform_transport (sha512_ctx->buf, sha512_ctx->state); } -KERNEL_FQ void HC_ATTR_SEQ m01800_init (KERN_ATTR_TMPS (sha512crypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m01800_init (KERN_ATTR_TMPS (sha512crypt_tmp_t)) { /** * base @@ -300,7 +300,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01800_init (KERN_ATTR_TMPS (sha512crypt_tmp_t)) tmps[gid].l_s_bytes[1] = sha512_ctx.state[1]; } -KERNEL_FQ void HC_ATTR_SEQ m01800_loop (KERN_ATTR_TMPS (sha512crypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m01800_loop (KERN_ATTR_TMPS (sha512crypt_tmp_t)) { /** * base @@ -477,7 +477,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01800_loop (KERN_ATTR_TMPS (sha512crypt_tmp_t)) tmps[gid].l_alt_result[7] = l_alt_result[7]; } -KERNEL_FQ void HC_ATTR_SEQ m01800_comp (KERN_ATTR_TMPS (sha512crypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m01800_comp (KERN_ATTR_TMPS (sha512crypt_tmp_t)) { /** * base diff --git a/OpenCL/m01800-pure.cl b/OpenCL/m01800-pure.cl index 2d4a917ed..6a7a7efe0 100644 --- a/OpenCL/m01800-pure.cl +++ b/OpenCL/m01800-pure.cl @@ -28,7 +28,7 @@ typedef struct sha512crypt_tmp } sha512crypt_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m01800_init (KERN_ATTR_TMPS (sha512crypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m01800_init (KERN_ATTR_TMPS (sha512crypt_tmp_t)) { /** * base @@ -313,7 +313,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01800_init (KERN_ATTR_TMPS (sha512crypt_tmp_t)) for (int i = 0; i < 64; i++) tmps[gid].s_bytes[i] = s_final[i]; } -KERNEL_FQ void HC_ATTR_SEQ m01800_loop (KERN_ATTR_TMPS (sha512crypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m01800_loop (KERN_ATTR_TMPS (sha512crypt_tmp_t)) { /** * base @@ -397,7 +397,7 @@ KERNEL_FQ void HC_ATTR_SEQ m01800_loop (KERN_ATTR_TMPS (sha512crypt_tmp_t)) for (int i = 0; i < 16; i++) tmps[gid].alt_result[i] = alt_result[i]; } -KERNEL_FQ void HC_ATTR_SEQ m01800_comp (KERN_ATTR_TMPS (sha512crypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m01800_comp (KERN_ATTR_TMPS (sha512crypt_tmp_t)) { /** * base diff --git a/OpenCL/m02000_a0-optimized.cl b/OpenCL/m02000_a0-optimized.cl index f7597cc9c..0a598feb2 100644 --- a/OpenCL/m02000_a0-optimized.cl +++ b/OpenCL/m02000_a0-optimized.cl @@ -10,26 +10,26 @@ #include M2S(INCLUDE_PATH/inc_common.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m02000_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02000_m04 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02000_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02000_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02000_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02000_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02000_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02000_s04 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02000_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02000_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02000_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02000_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m02000_a0-pure.cl b/OpenCL/m02000_a0-pure.cl index 280e4bf4a..443d84c19 100644 --- a/OpenCL/m02000_a0-pure.cl +++ b/OpenCL/m02000_a0-pure.cl @@ -10,10 +10,10 @@ #include M2S(INCLUDE_PATH/inc_common.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m02000_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02000_mxx (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02000_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02000_sxx (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m02000_a1-optimized.cl b/OpenCL/m02000_a1-optimized.cl index 7ff89e2b9..59ba09fe6 100644 --- a/OpenCL/m02000_a1-optimized.cl +++ b/OpenCL/m02000_a1-optimized.cl @@ -10,26 +10,26 @@ #include M2S(INCLUDE_PATH/inc_common.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m02000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02000_m04 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02000_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02000_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02000_s04 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02000_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02000_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m02000_a1-pure.cl b/OpenCL/m02000_a1-pure.cl index 2043d4d2d..654eeceed 100644 --- a/OpenCL/m02000_a1-pure.cl +++ b/OpenCL/m02000_a1-pure.cl @@ -10,10 +10,10 @@ #include M2S(INCLUDE_PATH/inc_common.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m02000_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02000_mxx (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02000_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02000_sxx (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m02000_a3-optimized.cl b/OpenCL/m02000_a3-optimized.cl index 7ff89e2b9..59ba09fe6 100644 --- a/OpenCL/m02000_a3-optimized.cl +++ b/OpenCL/m02000_a3-optimized.cl @@ -10,26 +10,26 @@ #include M2S(INCLUDE_PATH/inc_common.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m02000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02000_m04 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02000_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02000_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02000_s04 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02000_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02000_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m02000_a3-pure.cl b/OpenCL/m02000_a3-pure.cl index 2043d4d2d..654eeceed 100644 --- a/OpenCL/m02000_a3-pure.cl +++ b/OpenCL/m02000_a3-pure.cl @@ -10,10 +10,10 @@ #include M2S(INCLUDE_PATH/inc_common.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m02000_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02000_mxx (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02000_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02000_sxx (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m02100-pure.cl b/OpenCL/m02100-pure.cl index a52f7db3d..a44f889fd 100644 --- a/OpenCL/m02100-pure.cl +++ b/OpenCL/m02100-pure.cl @@ -65,7 +65,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m02100_init (KERN_ATTR_TMPS (dcc2_tmp_t)) +KERNEL_FQ KERNEL_FA void m02100_init (KERN_ATTR_TMPS (dcc2_tmp_t)) { /** * base @@ -180,7 +180,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02100_init (KERN_ATTR_TMPS (dcc2_tmp_t)) tmps[gid].out[3] = tmps[gid].dgst[3]; } -KERNEL_FQ void HC_ATTR_SEQ m02100_loop (KERN_ATTR_TMPS (dcc2_tmp_t)) +KERNEL_FQ KERNEL_FA void m02100_loop (KERN_ATTR_TMPS (dcc2_tmp_t)) { /** * base @@ -267,7 +267,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02100_loop (KERN_ATTR_TMPS (dcc2_tmp_t)) unpackv (tmps, out, gid, 3, out[3]); } -KERNEL_FQ void HC_ATTR_SEQ m02100_comp (KERN_ATTR_TMPS (dcc2_tmp_t)) +KERNEL_FQ KERNEL_FA void m02100_comp (KERN_ATTR_TMPS (dcc2_tmp_t)) { /** * base diff --git a/OpenCL/m02400_a0-optimized.cl b/OpenCL/m02400_a0-optimized.cl index d26341057..89cbcf525 100644 --- a/OpenCL/m02400_a0-optimized.cl +++ b/OpenCL/m02400_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m02400_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02400_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -177,15 +177,15 @@ KERNEL_FQ void HC_ATTR_SEQ m02400_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02400_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02400_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02400_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02400_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02400_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02400_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -361,10 +361,10 @@ KERNEL_FQ void HC_ATTR_SEQ m02400_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02400_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02400_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02400_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02400_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m02400_a1-optimized.cl b/OpenCL/m02400_a1-optimized.cl index c81356298..c9a1a23ae 100644 --- a/OpenCL/m02400_a1-optimized.cl +++ b/OpenCL/m02400_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m02400_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02400_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -239,15 +239,15 @@ KERNEL_FQ void HC_ATTR_SEQ m02400_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02400_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02400_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02400_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02400_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02400_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02400_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -487,10 +487,10 @@ KERNEL_FQ void HC_ATTR_SEQ m02400_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02400_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02400_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02400_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02400_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m02400_a3-optimized.cl b/OpenCL/m02400_a3-optimized.cl index b2222db8e..02974d53b 100644 --- a/OpenCL/m02400_a3-optimized.cl +++ b/OpenCL/m02400_a3-optimized.cl @@ -453,7 +453,7 @@ DECLSPEC void m02400s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m02400_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m02400_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -493,7 +493,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02400_m04 (KERN_ATTR_VECTOR ()) m02400m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m02400_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m02400_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -533,7 +533,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02400_m08 (KERN_ATTR_VECTOR ()) m02400m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m02400_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m02400_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -573,7 +573,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02400_m16 (KERN_ATTR_VECTOR ()) m02400m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m02400_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m02400_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -613,7 +613,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02400_s04 (KERN_ATTR_VECTOR ()) m02400s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m02400_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m02400_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -653,7 +653,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02400_s08 (KERN_ATTR_VECTOR ()) m02400s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m02400_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m02400_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m02410_a0-optimized.cl b/OpenCL/m02410_a0-optimized.cl index b5c3b0d87..4a702680b 100644 --- a/OpenCL/m02410_a0-optimized.cl +++ b/OpenCL/m02410_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m02410_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02410_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -256,15 +256,15 @@ KERNEL_FQ void HC_ATTR_SEQ m02410_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02410_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02410_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02410_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02410_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02410_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02410_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -519,10 +519,10 @@ KERNEL_FQ void HC_ATTR_SEQ m02410_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02410_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02410_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02410_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02410_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m02410_a1-optimized.cl b/OpenCL/m02410_a1-optimized.cl index 692b65005..934e0d026 100644 --- a/OpenCL/m02410_a1-optimized.cl +++ b/OpenCL/m02410_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m02410_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02410_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -314,15 +314,15 @@ KERNEL_FQ void HC_ATTR_SEQ m02410_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02410_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02410_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02410_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02410_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02410_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02410_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -637,10 +637,10 @@ KERNEL_FQ void HC_ATTR_SEQ m02410_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02410_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02410_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02410_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02410_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m02410_a3-optimized.cl b/OpenCL/m02410_a3-optimized.cl index 6dae686f7..5af9e342f 100644 --- a/OpenCL/m02410_a3-optimized.cl +++ b/OpenCL/m02410_a3-optimized.cl @@ -551,7 +551,7 @@ DECLSPEC void m02410s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m02410_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m02410_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -591,7 +591,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02410_m04 (KERN_ATTR_VECTOR ()) m02410m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m02410_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m02410_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -631,7 +631,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02410_m08 (KERN_ATTR_VECTOR ()) m02410m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m02410_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m02410_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -671,7 +671,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02410_m16 (KERN_ATTR_VECTOR ()) m02410m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m02410_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m02410_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -711,7 +711,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02410_s04 (KERN_ATTR_VECTOR ()) m02410s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m02410_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m02410_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -751,7 +751,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02410_s08 (KERN_ATTR_VECTOR ()) m02410s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m02410_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m02410_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m02500-pure.cl b/OpenCL/m02500-pure.cl index 03484a373..2a4e84b68 100644 --- a/OpenCL/m02500-pure.cl +++ b/OpenCL/m02500-pure.cl @@ -128,7 +128,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m02500_init (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_eapol_t)) +KERNEL_FQ KERNEL_FA void m02500_init (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_eapol_t)) { /** * base @@ -236,7 +236,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02500_init (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, tmps[gid].out[9] = sha1_hmac_ctx2.opad.h[4]; } -KERNEL_FQ void HC_ATTR_SEQ m02500_loop (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_eapol_t)) +KERNEL_FQ KERNEL_FA void m02500_loop (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_eapol_t)) { const u64 gid = get_global_id (0); @@ -379,12 +379,12 @@ KERNEL_FQ void HC_ATTR_SEQ m02500_loop (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, unpackv (tmps, out, gid, 9, out[4]); } -KERNEL_FQ void HC_ATTR_SEQ m02500_comp (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_eapol_t)) +KERNEL_FQ KERNEL_FA void m02500_comp (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_eapol_t)) { // not in use here, special case... } -KERNEL_FQ void HC_ATTR_SEQ m02500_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_eapol_t)) +KERNEL_FQ KERNEL_FA void m02500_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_eapol_t)) { const u64 gid = get_global_id (0); @@ -572,7 +572,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02500_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m02500_aux2 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_eapol_t)) +KERNEL_FQ KERNEL_FA void m02500_aux2 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_eapol_t)) { const u64 gid = get_global_id (0); @@ -755,7 +755,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02500_aux2 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m02500_aux3 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_eapol_t)) +KERNEL_FQ KERNEL_FA void m02500_aux3 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_eapol_t)) { /** * aes shared diff --git a/OpenCL/m02501-pure.cl b/OpenCL/m02501-pure.cl index bf76498fe..24bd5409c 100644 --- a/OpenCL/m02501-pure.cl +++ b/OpenCL/m02501-pure.cl @@ -102,7 +102,7 @@ DECLSPEC void make_kn (u32 *k) k[3] ^= c * 0x87000000; } -KERNEL_FQ void HC_ATTR_SEQ m02501_init (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_eapol_t)) +KERNEL_FQ KERNEL_FA void m02501_init (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_eapol_t)) { const u64 gid = get_global_id (0); @@ -148,19 +148,19 @@ KERNEL_FQ void HC_ATTR_SEQ m02501_init (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa tmps[gid].out[7] = hc_swap32_S (out[7]); } -KERNEL_FQ void HC_ATTR_SEQ m02501_loop (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_eapol_t)) +KERNEL_FQ KERNEL_FA void m02501_loop (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_eapol_t)) { const u64 gid = get_global_id (0); if (gid >= GID_CNT) return; } -KERNEL_FQ void HC_ATTR_SEQ m02501_comp (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_eapol_t)) +KERNEL_FQ KERNEL_FA void m02501_comp (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_eapol_t)) { // not in use here, special case... } -KERNEL_FQ void HC_ATTR_SEQ m02501_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_eapol_t)) +KERNEL_FQ KERNEL_FA void m02501_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_eapol_t)) { const u64 gid = get_global_id (0); @@ -348,7 +348,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02501_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa } } -KERNEL_FQ void HC_ATTR_SEQ m02501_aux2 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_eapol_t)) +KERNEL_FQ KERNEL_FA void m02501_aux2 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_eapol_t)) { const u64 gid = get_global_id (0); @@ -531,7 +531,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02501_aux2 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa } } -KERNEL_FQ void HC_ATTR_SEQ m02501_aux3 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_eapol_t)) +KERNEL_FQ KERNEL_FA void m02501_aux3 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_eapol_t)) { /** * aes shared diff --git a/OpenCL/m02610_a0-optimized.cl b/OpenCL/m02610_a0-optimized.cl index 29ac2bea5..253136c4c 100644 --- a/OpenCL/m02610_a0-optimized.cl +++ b/OpenCL/m02610_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m02610_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02610_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -304,15 +304,15 @@ KERNEL_FQ void HC_ATTR_SEQ m02610_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02610_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02610_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02610_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02610_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02610_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02610_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -603,10 +603,10 @@ KERNEL_FQ void HC_ATTR_SEQ m02610_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02610_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02610_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02610_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02610_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m02610_a0-pure.cl b/OpenCL/m02610_a0-pure.cl index e178e82f4..101a16095 100644 --- a/OpenCL/m02610_a0-pure.cl +++ b/OpenCL/m02610_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m02610_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02610_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -131,7 +131,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02610_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02610_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02610_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m02610_a1-optimized.cl b/OpenCL/m02610_a1-optimized.cl index 82b11d37d..1f402a48f 100644 --- a/OpenCL/m02610_a1-optimized.cl +++ b/OpenCL/m02610_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m02610_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02610_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -361,15 +361,15 @@ KERNEL_FQ void HC_ATTR_SEQ m02610_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02610_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02610_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02610_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02610_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02610_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02610_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -719,10 +719,10 @@ KERNEL_FQ void HC_ATTR_SEQ m02610_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02610_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02610_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02610_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02610_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m02610_a1-pure.cl b/OpenCL/m02610_a1-pure.cl index 1b9be9b53..d69d19bd9 100644 --- a/OpenCL/m02610_a1-pure.cl +++ b/OpenCL/m02610_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m02610_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02610_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -127,7 +127,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02610_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02610_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02610_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m02610_a3-optimized.cl b/OpenCL/m02610_a3-optimized.cl index 8c6296630..ceaec427b 100644 --- a/OpenCL/m02610_a3-optimized.cl +++ b/OpenCL/m02610_a3-optimized.cl @@ -552,7 +552,7 @@ DECLSPEC void m02610s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m02610_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02610_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -622,7 +622,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02610_m04 (KERN_ATTR_BASIC ()) m02610m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m02610_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02610_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -692,7 +692,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02610_m08 (KERN_ATTR_BASIC ()) m02610m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m02610_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02610_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -762,7 +762,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02610_m16 (KERN_ATTR_BASIC ()) m02610m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m02610_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02610_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -832,7 +832,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02610_s04 (KERN_ATTR_BASIC ()) m02610s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m02610_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02610_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -902,7 +902,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02610_s08 (KERN_ATTR_BASIC ()) m02610s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m02610_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02610_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m02610_a3-pure.cl b/OpenCL/m02610_a3-pure.cl index 36bf15a5f..dce67c176 100644 --- a/OpenCL/m02610_a3-pure.cl +++ b/OpenCL/m02610_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m02610_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m02610_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -140,7 +140,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02610_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02610_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m02610_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m02630_a0-optimized.cl b/OpenCL/m02630_a0-optimized.cl index b2dc24624..03386c7d8 100644 --- a/OpenCL/m02630_a0-optimized.cl +++ b/OpenCL/m02630_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m02630_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02630_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -370,15 +370,15 @@ KERNEL_FQ void HC_ATTR_SEQ m02630_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02630_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02630_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02630_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02630_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02630_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02630_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -735,10 +735,10 @@ KERNEL_FQ void HC_ATTR_SEQ m02630_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02630_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02630_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02630_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02630_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m02630_a0-pure.cl b/OpenCL/m02630_a0-pure.cl index f3b89f02c..f2a3f285d 100644 --- a/OpenCL/m02630_a0-pure.cl +++ b/OpenCL/m02630_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m02630_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02630_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -137,7 +137,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02630_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02630_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02630_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m02630_a1-optimized.cl b/OpenCL/m02630_a1-optimized.cl index 79b723978..59b660619 100644 --- a/OpenCL/m02630_a1-optimized.cl +++ b/OpenCL/m02630_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m02630_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02630_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -428,15 +428,15 @@ KERNEL_FQ void HC_ATTR_SEQ m02630_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02630_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02630_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02630_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02630_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02630_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02630_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -853,10 +853,10 @@ KERNEL_FQ void HC_ATTR_SEQ m02630_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02630_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02630_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02630_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02630_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m02630_a1-pure.cl b/OpenCL/m02630_a1-pure.cl index 3f28b6f5b..4da81a509 100644 --- a/OpenCL/m02630_a1-pure.cl +++ b/OpenCL/m02630_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m02630_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02630_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -135,7 +135,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02630_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02630_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02630_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m02630_a3-optimized.cl b/OpenCL/m02630_a3-optimized.cl index e838b5474..d51e4fa2c 100644 --- a/OpenCL/m02630_a3-optimized.cl +++ b/OpenCL/m02630_a3-optimized.cl @@ -642,7 +642,7 @@ DECLSPEC void m02630s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m02630_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02630_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -712,7 +712,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02630_m04 (KERN_ATTR_BASIC ()) m02630m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m02630_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02630_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -782,7 +782,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02630_m08 (KERN_ATTR_BASIC ()) m02630m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m02630_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02630_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -852,7 +852,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02630_m16 (KERN_ATTR_BASIC ()) m02630m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m02630_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02630_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -922,7 +922,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02630_s04 (KERN_ATTR_BASIC ()) m02630s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m02630_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02630_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -992,7 +992,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02630_s08 (KERN_ATTR_BASIC ()) m02630s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m02630_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02630_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m02630_a3-pure.cl b/OpenCL/m02630_a3-pure.cl index a23414cfb..683e1d180 100644 --- a/OpenCL/m02630_a3-pure.cl +++ b/OpenCL/m02630_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m02630_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m02630_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -148,7 +148,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02630_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02630_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m02630_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m02710_a0-optimized.cl b/OpenCL/m02710_a0-optimized.cl index 70e35e6f2..ce5d2456b 100644 --- a/OpenCL/m02710_a0-optimized.cl +++ b/OpenCL/m02710_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m02710_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02710_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -389,15 +389,15 @@ KERNEL_FQ void HC_ATTR_SEQ m02710_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02710_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02710_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02710_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02710_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02710_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02710_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -773,10 +773,10 @@ KERNEL_FQ void HC_ATTR_SEQ m02710_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02710_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02710_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02710_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02710_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m02710_a1-optimized.cl b/OpenCL/m02710_a1-optimized.cl index 38c96444b..8414e2160 100644 --- a/OpenCL/m02710_a1-optimized.cl +++ b/OpenCL/m02710_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m02710_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02710_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -446,15 +446,15 @@ KERNEL_FQ void HC_ATTR_SEQ m02710_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02710_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02710_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02710_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02710_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02710_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02710_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -889,10 +889,10 @@ KERNEL_FQ void HC_ATTR_SEQ m02710_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02710_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02710_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02710_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02710_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m02710_a3-optimized.cl b/OpenCL/m02710_a3-optimized.cl index d1a02db1f..c21894f76 100644 --- a/OpenCL/m02710_a3-optimized.cl +++ b/OpenCL/m02710_a3-optimized.cl @@ -721,7 +721,7 @@ DECLSPEC void m02710s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m02710_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02710_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -791,7 +791,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02710_m04 (KERN_ATTR_BASIC ()) m02710m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m02710_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02710_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -861,7 +861,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02710_m08 (KERN_ATTR_BASIC ()) m02710m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m02710_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02710_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -931,7 +931,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02710_m16 (KERN_ATTR_BASIC ()) m02710m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m02710_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02710_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1001,7 +1001,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02710_s04 (KERN_ATTR_BASIC ()) m02710s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m02710_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02710_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1071,7 +1071,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02710_s08 (KERN_ATTR_BASIC ()) m02710s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m02710_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02710_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m02810_a0-optimized.cl b/OpenCL/m02810_a0-optimized.cl index 6b673bf56..450a53108 100644 --- a/OpenCL/m02810_a0-optimized.cl +++ b/OpenCL/m02810_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m02810_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02810_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -388,15 +388,15 @@ KERNEL_FQ void HC_ATTR_SEQ m02810_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02810_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02810_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02810_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02810_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02810_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02810_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -771,10 +771,10 @@ KERNEL_FQ void HC_ATTR_SEQ m02810_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02810_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02810_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02810_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02810_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m02810_a0-pure.cl b/OpenCL/m02810_a0-pure.cl index 5ef5d972e..c90833ed0 100644 --- a/OpenCL/m02810_a0-pure.cl +++ b/OpenCL/m02810_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m02810_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02810_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -154,7 +154,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02810_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02810_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m02810_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m02810_a1-optimized.cl b/OpenCL/m02810_a1-optimized.cl index 605c8a669..914302e5f 100644 --- a/OpenCL/m02810_a1-optimized.cl +++ b/OpenCL/m02810_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m02810_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02810_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -445,15 +445,15 @@ KERNEL_FQ void HC_ATTR_SEQ m02810_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02810_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02810_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02810_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02810_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02810_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02810_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -887,10 +887,10 @@ KERNEL_FQ void HC_ATTR_SEQ m02810_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02810_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02810_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m02810_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02810_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m02810_a1-pure.cl b/OpenCL/m02810_a1-pure.cl index 7d48641c9..693b02b41 100644 --- a/OpenCL/m02810_a1-pure.cl +++ b/OpenCL/m02810_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m02810_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02810_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -150,7 +150,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02810_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02810_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02810_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m02810_a3-optimized.cl b/OpenCL/m02810_a3-optimized.cl index 95837b073..989ae8a69 100644 --- a/OpenCL/m02810_a3-optimized.cl +++ b/OpenCL/m02810_a3-optimized.cl @@ -719,7 +719,7 @@ DECLSPEC void m02810s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m02810_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02810_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -789,7 +789,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02810_m04 (KERN_ATTR_BASIC ()) m02810m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m02810_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02810_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -859,7 +859,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02810_m08 (KERN_ATTR_BASIC ()) m02810m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m02810_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02810_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -929,7 +929,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02810_m16 (KERN_ATTR_BASIC ()) m02810m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m02810_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02810_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -999,7 +999,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02810_s04 (KERN_ATTR_BASIC ()) m02810s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m02810_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02810_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1069,7 +1069,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02810_s08 (KERN_ATTR_BASIC ()) m02810s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m02810_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m02810_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m02810_a3-pure.cl b/OpenCL/m02810_a3-pure.cl index 42128e7e1..36fde14ef 100644 --- a/OpenCL/m02810_a3-pure.cl +++ b/OpenCL/m02810_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m02810_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m02810_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -163,7 +163,7 @@ KERNEL_FQ void HC_ATTR_SEQ m02810_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m02810_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m02810_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m03000_a0-pure.cl b/OpenCL/m03000_a0-pure.cl index a78a7f02d..1bf3551ef 100644 --- a/OpenCL/m03000_a0-pure.cl +++ b/OpenCL/m03000_a0-pure.cl @@ -492,7 +492,7 @@ DECLSPEC void transform_netntlmv1_key (const u32 w0, const u32x w1, PRIVATE_AS u | ((k[7] & 0xff) << 24); } -KERNEL_FQ void HC_ATTR_SEQ m03000_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03000_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -577,7 +577,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03000_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03000_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03000_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m03000_a1-pure.cl b/OpenCL/m03000_a1-pure.cl index 7e14ea6cb..0b9205628 100644 --- a/OpenCL/m03000_a1-pure.cl +++ b/OpenCL/m03000_a1-pure.cl @@ -490,7 +490,7 @@ DECLSPEC void transform_netntlmv1_key (const u32 w0, const u32x w1, PRIVATE_AS u | ((k[7] & 0xff) << 24); } -KERNEL_FQ void HC_ATTR_SEQ m03000_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03000_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -654,7 +654,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03000_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03000_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03000_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m03000_a3-pure.cl b/OpenCL/m03000_a3-pure.cl index 42a3facbd..4cbbb0234 100644 --- a/OpenCL/m03000_a3-pure.cl +++ b/OpenCL/m03000_a3-pure.cl @@ -1730,7 +1730,7 @@ DECLSPEC void transpose32c (PRIVATE_AS u32 *data) // transpose bitslice mod : attention race conditions, need different buffers for *in and *out // -KERNEL_FQ void HC_ATTR_SEQ m03000_tm (KERN_ATTR_TM) +KERNEL_FQ KERNEL_FA void m03000_tm (KERN_ATTR_TM) { const u64 gid = get_global_id (0); @@ -1754,7 +1754,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03000_tm (KERN_ATTR_TM) } } -KERNEL_FQ void HC_ATTR_SEQ m03000_mxx (KERN_ATTR_BITSLICE ()) +KERNEL_FQ KERNEL_FA void m03000_mxx (KERN_ATTR_BITSLICE ()) { /** * base @@ -2127,7 +2127,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03000_mxx (KERN_ATTR_BITSLICE ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03000_sxx (KERN_ATTR_BITSLICE ()) +KERNEL_FQ KERNEL_FA void m03000_sxx (KERN_ATTR_BITSLICE ()) { /** * base diff --git a/OpenCL/m03100_a0-optimized.cl b/OpenCL/m03100_a0-optimized.cl index 983c91121..a1a131f1c 100644 --- a/OpenCL/m03100_a0-optimized.cl +++ b/OpenCL/m03100_a0-optimized.cl @@ -17,7 +17,7 @@ #include M2S(INCLUDE_PATH/inc_cipher_des.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m03100_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03100_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -241,15 +241,15 @@ KERNEL_FQ void HC_ATTR_SEQ m03100_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03100_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03100_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03100_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03100_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03100_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03100_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -485,10 +485,10 @@ KERNEL_FQ void HC_ATTR_SEQ m03100_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03100_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03100_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03100_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03100_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m03100_a1-optimized.cl b/OpenCL/m03100_a1-optimized.cl index d6643552d..547e36ca2 100644 --- a/OpenCL/m03100_a1-optimized.cl +++ b/OpenCL/m03100_a1-optimized.cl @@ -15,7 +15,7 @@ #include M2S(INCLUDE_PATH/inc_cipher_des.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m03100_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03100_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -299,15 +299,15 @@ KERNEL_FQ void HC_ATTR_SEQ m03100_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03100_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03100_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03100_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03100_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03100_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03100_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -603,10 +603,10 @@ KERNEL_FQ void HC_ATTR_SEQ m03100_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03100_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03100_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03100_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03100_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m03100_a3-optimized.cl b/OpenCL/m03100_a3-optimized.cl index 2fdcd11a6..3579a68f4 100644 --- a/OpenCL/m03100_a3-optimized.cl +++ b/OpenCL/m03100_a3-optimized.cl @@ -382,7 +382,7 @@ DECLSPEC void m03100s (SHM_TYPE u32 (*s_SPtrans)[64], SHM_TYPE u32 (*s_skb)[64], } } -KERNEL_FQ void HC_ATTR_SEQ m03100_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m03100_m04 (KERN_ATTR_VECTOR ()) { /** * modifier @@ -465,7 +465,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03100_m04 (KERN_ATTR_VECTOR ()) m03100m (s_SPtrans, s_skb, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m03100_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m03100_m08 (KERN_ATTR_VECTOR ()) { /** * modifier @@ -548,11 +548,11 @@ KERNEL_FQ void HC_ATTR_SEQ m03100_m08 (KERN_ATTR_VECTOR ()) m03100m (s_SPtrans, s_skb, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m03100_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m03100_m16 (KERN_ATTR_VECTOR ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03100_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m03100_s04 (KERN_ATTR_VECTOR ()) { /** * modifier @@ -635,7 +635,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03100_s04 (KERN_ATTR_VECTOR ()) m03100s (s_SPtrans, s_skb, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m03100_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m03100_s08 (KERN_ATTR_VECTOR ()) { /** * modifier @@ -718,6 +718,6 @@ KERNEL_FQ void HC_ATTR_SEQ m03100_s08 (KERN_ATTR_VECTOR ()) m03100s (s_SPtrans, s_skb, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m03100_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m03100_s16 (KERN_ATTR_VECTOR ()) { } diff --git a/OpenCL/m03200-pure.cl b/OpenCL/m03200-pure.cl index 634188466..5340015ce 100644 --- a/OpenCL/m03200-pure.cl +++ b/OpenCL/m03200-pure.cl @@ -425,7 +425,7 @@ DECLSPEC void expand_key (PRIVATE_AS u32 *E, PRIVATE_AS u32 *W, const int len) } } -KERNEL_FQ void HC_ATTR_SEQ m03200_init (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m03200_init (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base @@ -647,7 +647,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03200_init (KERN_ATTR_TMPS (bcrypt_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m03200_loop (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m03200_loop (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base @@ -850,7 +850,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03200_loop (KERN_ATTR_TMPS (bcrypt_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m03200_comp (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m03200_comp (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base diff --git a/OpenCL/m03500_a0-optimized.cl b/OpenCL/m03500_a0-optimized.cl index 497b715a7..21104d773 100644 --- a/OpenCL/m03500_a0-optimized.cl +++ b/OpenCL/m03500_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m03500_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03500_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -410,15 +410,15 @@ KERNEL_FQ void HC_ATTR_SEQ m03500_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03500_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03500_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03500_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03500_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03500_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03500_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -815,10 +815,10 @@ KERNEL_FQ void HC_ATTR_SEQ m03500_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03500_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03500_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03500_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03500_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m03500_a0-pure.cl b/OpenCL/m03500_a0-pure.cl index b9d4f68f8..5295405f1 100644 --- a/OpenCL/m03500_a0-pure.cl +++ b/OpenCL/m03500_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m03500_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03500_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -161,7 +161,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03500_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03500_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03500_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m03500_a1-optimized.cl b/OpenCL/m03500_a1-optimized.cl index efb358c57..bb2c1c46f 100644 --- a/OpenCL/m03500_a1-optimized.cl +++ b/OpenCL/m03500_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m03500_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03500_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -467,15 +467,15 @@ KERNEL_FQ void HC_ATTR_SEQ m03500_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03500_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03500_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03500_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03500_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03500_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03500_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -931,10 +931,10 @@ KERNEL_FQ void HC_ATTR_SEQ m03500_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03500_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03500_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03500_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03500_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m03500_a1-pure.cl b/OpenCL/m03500_a1-pure.cl index 700f8569a..ae0cd94b3 100644 --- a/OpenCL/m03500_a1-pure.cl +++ b/OpenCL/m03500_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m03500_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03500_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -157,7 +157,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03500_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03500_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03500_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m03500_a3-optimized.cl b/OpenCL/m03500_a3-optimized.cl index c6958c5ed..95f7dccac 100644 --- a/OpenCL/m03500_a3-optimized.cl +++ b/OpenCL/m03500_a3-optimized.cl @@ -764,7 +764,7 @@ DECLSPEC void m03500s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m03500_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03500_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -834,7 +834,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03500_m04 (KERN_ATTR_BASIC ()) m03500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m03500_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03500_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -904,7 +904,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03500_m08 (KERN_ATTR_BASIC ()) m03500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m03500_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03500_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -974,7 +974,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03500_m16 (KERN_ATTR_BASIC ()) m03500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m03500_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03500_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1044,7 +1044,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03500_s04 (KERN_ATTR_BASIC ()) m03500s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m03500_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03500_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1114,7 +1114,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03500_s08 (KERN_ATTR_BASIC ()) m03500s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m03500_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03500_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m03500_a3-pure.cl b/OpenCL/m03500_a3-pure.cl index 9db03bc36..42aa475a2 100644 --- a/OpenCL/m03500_a3-pure.cl +++ b/OpenCL/m03500_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m03500_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m03500_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -170,7 +170,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03500_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03500_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m03500_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m03610_a0-optimized.cl b/OpenCL/m03610_a0-optimized.cl index 616a18ea3..9bb77ad5f 100644 --- a/OpenCL/m03610_a0-optimized.cl +++ b/OpenCL/m03610_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m03610_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03610_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -408,15 +408,15 @@ KERNEL_FQ void HC_ATTR_SEQ m03610_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03610_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03610_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03610_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03610_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03610_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03610_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -811,10 +811,10 @@ KERNEL_FQ void HC_ATTR_SEQ m03610_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03610_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03610_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03610_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03610_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m03610_a0-pure.cl b/OpenCL/m03610_a0-pure.cl index 9ce718551..de94a30eb 100644 --- a/OpenCL/m03610_a0-pure.cl +++ b/OpenCL/m03610_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m03610_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03610_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -161,7 +161,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03610_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03610_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03610_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m03610_a1-optimized.cl b/OpenCL/m03610_a1-optimized.cl index 84294280f..3128d1615 100644 --- a/OpenCL/m03610_a1-optimized.cl +++ b/OpenCL/m03610_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m03610_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03610_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -464,15 +464,15 @@ KERNEL_FQ void HC_ATTR_SEQ m03610_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03610_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03610_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03610_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03610_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03610_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03610_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -925,10 +925,10 @@ KERNEL_FQ void HC_ATTR_SEQ m03610_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03610_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03610_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03610_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03610_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m03610_a1-pure.cl b/OpenCL/m03610_a1-pure.cl index 268125267..72695b1c2 100644 --- a/OpenCL/m03610_a1-pure.cl +++ b/OpenCL/m03610_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m03610_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03610_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -157,7 +157,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03610_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03610_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03610_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m03610_a3-optimized.cl b/OpenCL/m03610_a3-optimized.cl index 15eb1eff4..6bd2c0771 100644 --- a/OpenCL/m03610_a3-optimized.cl +++ b/OpenCL/m03610_a3-optimized.cl @@ -758,7 +758,7 @@ DECLSPEC void m03610s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m03610_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03610_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -828,7 +828,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03610_m04 (KERN_ATTR_BASIC ()) m03610m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m03610_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03610_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -898,7 +898,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03610_m08 (KERN_ATTR_BASIC ()) m03610m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m03610_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03610_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -968,7 +968,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03610_m16 (KERN_ATTR_BASIC ()) m03610m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m03610_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03610_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1038,7 +1038,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03610_s04 (KERN_ATTR_BASIC ()) m03610s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m03610_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03610_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1108,7 +1108,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03610_s08 (KERN_ATTR_BASIC ()) m03610s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m03610_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03610_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m03610_a3-pure.cl b/OpenCL/m03610_a3-pure.cl index 1c103bad5..8b628c92e 100644 --- a/OpenCL/m03610_a3-pure.cl +++ b/OpenCL/m03610_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m03610_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m03610_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -170,7 +170,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03610_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03610_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m03610_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m03710_a0-optimized.cl b/OpenCL/m03710_a0-optimized.cl index 9babadf62..41087021d 100644 --- a/OpenCL/m03710_a0-optimized.cl +++ b/OpenCL/m03710_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m03710_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03710_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -335,15 +335,15 @@ KERNEL_FQ void HC_ATTR_SEQ m03710_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03710_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03710_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03710_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03710_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03710_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03710_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -665,10 +665,10 @@ KERNEL_FQ void HC_ATTR_SEQ m03710_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03710_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03710_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03710_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03710_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m03710_a0-pure.cl b/OpenCL/m03710_a0-pure.cl index a844b4c5a..835ed51e8 100644 --- a/OpenCL/m03710_a0-pure.cl +++ b/OpenCL/m03710_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m03710_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03710_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -144,7 +144,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03710_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03710_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03710_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m03710_a1-optimized.cl b/OpenCL/m03710_a1-optimized.cl index 8dff4d145..e127548f4 100644 --- a/OpenCL/m03710_a1-optimized.cl +++ b/OpenCL/m03710_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m03710_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03710_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -392,15 +392,15 @@ KERNEL_FQ void HC_ATTR_SEQ m03710_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03710_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03710_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03710_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03710_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03710_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03710_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -781,10 +781,10 @@ KERNEL_FQ void HC_ATTR_SEQ m03710_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03710_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03710_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03710_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03710_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m03710_a1-pure.cl b/OpenCL/m03710_a1-pure.cl index 72d6f0261..03771e070 100644 --- a/OpenCL/m03710_a1-pure.cl +++ b/OpenCL/m03710_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m03710_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03710_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -140,7 +140,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03710_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03710_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03710_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m03710_a3-optimized.cl b/OpenCL/m03710_a3-optimized.cl index 06ce5ff93..6bf63fd0e 100644 --- a/OpenCL/m03710_a3-optimized.cl +++ b/OpenCL/m03710_a3-optimized.cl @@ -613,7 +613,7 @@ DECLSPEC void m03710s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m03710_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03710_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -683,7 +683,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03710_m04 (KERN_ATTR_BASIC ()) m03710m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m03710_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03710_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -753,7 +753,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03710_m08 (KERN_ATTR_BASIC ()) m03710m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m03710_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03710_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -823,7 +823,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03710_m16 (KERN_ATTR_BASIC ()) m03710m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m03710_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03710_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -893,7 +893,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03710_s04 (KERN_ATTR_BASIC ()) m03710s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m03710_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03710_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -963,7 +963,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03710_s08 (KERN_ATTR_BASIC ()) m03710s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m03710_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03710_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m03710_a3-pure.cl b/OpenCL/m03710_a3-pure.cl index caff7e13d..1c475a0a7 100644 --- a/OpenCL/m03710_a3-pure.cl +++ b/OpenCL/m03710_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m03710_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m03710_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -153,7 +153,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03710_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03710_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m03710_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m03730_a0-pure.cl b/OpenCL/m03730_a0-pure.cl index 0506ff766..9083bf05d 100644 --- a/OpenCL/m03730_a0-pure.cl +++ b/OpenCL/m03730_a0-pure.cl @@ -38,7 +38,7 @@ typedef struct md5_double_salt } md5_double_salt_t; -KERNEL_FQ void HC_ATTR_SEQ m03730_mxx (KERN_ATTR_ESALT (md5_double_salt_t)) +KERNEL_FQ KERNEL_FA void m03730_mxx (KERN_ATTR_ESALT (md5_double_salt_t)) { /** * modifier @@ -156,7 +156,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03730_mxx (KERN_ATTR_ESALT (md5_double_salt_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m03730_sxx (KERN_ATTR_ESALT (md5_double_salt_t)) +KERNEL_FQ KERNEL_FA void m03730_sxx (KERN_ATTR_ESALT (md5_double_salt_t)) { /** * modifier diff --git a/OpenCL/m03730_a1-pure.cl b/OpenCL/m03730_a1-pure.cl index 12f5f7dcb..2ad5a9e1d 100644 --- a/OpenCL/m03730_a1-pure.cl +++ b/OpenCL/m03730_a1-pure.cl @@ -36,7 +36,7 @@ typedef struct md5_double_salt } md5_double_salt_t; -KERNEL_FQ void HC_ATTR_SEQ m03730_mxx (KERN_ATTR_ESALT (md5_double_salt_t)) +KERNEL_FQ KERNEL_FA void m03730_mxx (KERN_ATTR_ESALT (md5_double_salt_t)) { /** * modifier @@ -152,7 +152,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03730_mxx (KERN_ATTR_ESALT (md5_double_salt_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m03730_sxx (KERN_ATTR_ESALT (md5_double_salt_t)) +KERNEL_FQ KERNEL_FA void m03730_sxx (KERN_ATTR_ESALT (md5_double_salt_t)) { /** * modifier diff --git a/OpenCL/m03730_a3-pure.cl b/OpenCL/m03730_a3-pure.cl index bd5bb3573..ae6b84c9a 100644 --- a/OpenCL/m03730_a3-pure.cl +++ b/OpenCL/m03730_a3-pure.cl @@ -36,7 +36,7 @@ typedef struct md5_double_salt } md5_double_salt_t; -KERNEL_FQ void HC_ATTR_SEQ m03730_mxx (KERN_ATTR_VECTOR_ESALT (md5_double_salt_t)) +KERNEL_FQ KERNEL_FA void m03730_mxx (KERN_ATTR_VECTOR_ESALT (md5_double_salt_t)) { /** * modifier @@ -176,7 +176,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03730_mxx (KERN_ATTR_VECTOR_ESALT (md5_double_salt_t } } -KERNEL_FQ void HC_ATTR_SEQ m03730_sxx (KERN_ATTR_VECTOR_ESALT (md5_double_salt_t)) +KERNEL_FQ KERNEL_FA void m03730_sxx (KERN_ATTR_VECTOR_ESALT (md5_double_salt_t)) { /** * modifier diff --git a/OpenCL/m03800_a0-optimized.cl b/OpenCL/m03800_a0-optimized.cl index 2977f86cf..145e52c68 100644 --- a/OpenCL/m03800_a0-optimized.cl +++ b/OpenCL/m03800_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m03800_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03800_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -247,15 +247,15 @@ KERNEL_FQ void HC_ATTR_SEQ m03800_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03800_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03800_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03800_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03800_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03800_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03800_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -501,10 +501,10 @@ KERNEL_FQ void HC_ATTR_SEQ m03800_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03800_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03800_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03800_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03800_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m03800_a0-pure.cl b/OpenCL/m03800_a0-pure.cl index 37cf988f7..7341cd5a7 100644 --- a/OpenCL/m03800_a0-pure.cl +++ b/OpenCL/m03800_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m03800_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03800_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -75,7 +75,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03800_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03800_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03800_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m03800_a1-optimized.cl b/OpenCL/m03800_a1-optimized.cl index a9e232e05..70b495e88 100644 --- a/OpenCL/m03800_a1-optimized.cl +++ b/OpenCL/m03800_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m03800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03800_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -305,15 +305,15 @@ KERNEL_FQ void HC_ATTR_SEQ m03800_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03800_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03800_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03800_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -619,10 +619,10 @@ KERNEL_FQ void HC_ATTR_SEQ m03800_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03800_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03800_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m03800_a1-pure.cl b/OpenCL/m03800_a1-pure.cl index 6c683fc9c..1acee959f 100644 --- a/OpenCL/m03800_a1-pure.cl +++ b/OpenCL/m03800_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m03800_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03800_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03800_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03800_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03800_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m03800_a3-optimized.cl b/OpenCL/m03800_a3-optimized.cl index 99c59b319..9a7265de8 100644 --- a/OpenCL/m03800_a3-optimized.cl +++ b/OpenCL/m03800_a3-optimized.cl @@ -471,7 +471,7 @@ DECLSPEC void m03800s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m03800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03800_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -524,7 +524,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03800_m04 (KERN_ATTR_BASIC ()) m03800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m03800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03800_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -577,7 +577,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03800_m08 (KERN_ATTR_BASIC ()) m03800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m03800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03800_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -630,7 +630,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03800_m16 (KERN_ATTR_BASIC ()) m03800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m03800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03800_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -683,7 +683,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03800_s04 (KERN_ATTR_BASIC ()) m03800s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m03800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03800_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -736,7 +736,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03800_s08 (KERN_ATTR_BASIC ()) m03800s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m03800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03800_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m03800_a3-pure.cl b/OpenCL/m03800_a3-pure.cl index d5c4075e6..4dd5652ff 100644 --- a/OpenCL/m03800_a3-pure.cl +++ b/OpenCL/m03800_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m03800_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m03800_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -86,7 +86,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03800_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03800_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m03800_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m03910_a0-optimized.cl b/OpenCL/m03910_a0-optimized.cl index 93a2f7355..a13a5f5ea 100644 --- a/OpenCL/m03910_a0-optimized.cl +++ b/OpenCL/m03910_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m03910_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03910_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -388,15 +388,15 @@ KERNEL_FQ void HC_ATTR_SEQ m03910_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03910_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03910_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03910_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03910_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03910_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03910_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -771,10 +771,10 @@ KERNEL_FQ void HC_ATTR_SEQ m03910_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03910_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03910_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03910_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03910_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m03910_a0-pure.cl b/OpenCL/m03910_a0-pure.cl index 1e903182e..367319814 100644 --- a/OpenCL/m03910_a0-pure.cl +++ b/OpenCL/m03910_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m03910_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03910_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -154,7 +154,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03910_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03910_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m03910_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m03910_a1-optimized.cl b/OpenCL/m03910_a1-optimized.cl index 94b686808..6a40fbd76 100644 --- a/OpenCL/m03910_a1-optimized.cl +++ b/OpenCL/m03910_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m03910_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03910_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -445,15 +445,15 @@ KERNEL_FQ void HC_ATTR_SEQ m03910_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03910_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03910_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03910_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03910_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03910_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03910_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -887,10 +887,10 @@ KERNEL_FQ void HC_ATTR_SEQ m03910_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03910_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03910_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m03910_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03910_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m03910_a1-pure.cl b/OpenCL/m03910_a1-pure.cl index ce3264a17..27748d64c 100644 --- a/OpenCL/m03910_a1-pure.cl +++ b/OpenCL/m03910_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m03910_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03910_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -150,7 +150,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03910_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03910_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03910_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m03910_a3-optimized.cl b/OpenCL/m03910_a3-optimized.cl index 8317808b1..1b82b961a 100644 --- a/OpenCL/m03910_a3-optimized.cl +++ b/OpenCL/m03910_a3-optimized.cl @@ -719,7 +719,7 @@ DECLSPEC void m03910s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m03910_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03910_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -789,7 +789,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03910_m04 (KERN_ATTR_BASIC ()) m03910m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m03910_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03910_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -859,7 +859,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03910_m08 (KERN_ATTR_BASIC ()) m03910m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m03910_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03910_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -929,7 +929,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03910_m16 (KERN_ATTR_BASIC ()) m03910m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m03910_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03910_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -999,7 +999,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03910_s04 (KERN_ATTR_BASIC ()) m03910s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m03910_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03910_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1069,7 +1069,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03910_s08 (KERN_ATTR_BASIC ()) m03910s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m03910_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m03910_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m03910_a3-pure.cl b/OpenCL/m03910_a3-pure.cl index 3a35c1aa0..318e86ce0 100644 --- a/OpenCL/m03910_a3-pure.cl +++ b/OpenCL/m03910_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m03910_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m03910_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -163,7 +163,7 @@ KERNEL_FQ void HC_ATTR_SEQ m03910_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m03910_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m03910_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m04010_a0-optimized.cl b/OpenCL/m04010_a0-optimized.cl index 2818eb5be..981b4b136 100644 --- a/OpenCL/m04010_a0-optimized.cl +++ b/OpenCL/m04010_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04010_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04010_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -361,15 +361,15 @@ KERNEL_FQ void HC_ATTR_SEQ m04010_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04010_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04010_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04010_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04010_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04010_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04010_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -717,10 +717,10 @@ KERNEL_FQ void HC_ATTR_SEQ m04010_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04010_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04010_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04010_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04010_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m04010_a0-pure.cl b/OpenCL/m04010_a0-pure.cl index 5c4fddca0..4ec77ff15 100644 --- a/OpenCL/m04010_a0-pure.cl +++ b/OpenCL/m04010_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04010_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04010_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -135,7 +135,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04010_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04010_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04010_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m04010_a1-optimized.cl b/OpenCL/m04010_a1-optimized.cl index ea159639e..20cd96844 100644 --- a/OpenCL/m04010_a1-optimized.cl +++ b/OpenCL/m04010_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04010_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04010_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -417,15 +417,15 @@ KERNEL_FQ void HC_ATTR_SEQ m04010_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04010_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04010_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04010_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04010_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04010_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04010_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -831,10 +831,10 @@ KERNEL_FQ void HC_ATTR_SEQ m04010_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04010_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04010_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04010_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04010_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m04010_a1-pure.cl b/OpenCL/m04010_a1-pure.cl index f10f50bd4..1e717bbf6 100644 --- a/OpenCL/m04010_a1-pure.cl +++ b/OpenCL/m04010_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04010_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04010_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -131,7 +131,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04010_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04010_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04010_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m04010_a3-optimized.cl b/OpenCL/m04010_a3-optimized.cl index aeecf3c22..8442089be 100644 --- a/OpenCL/m04010_a3-optimized.cl +++ b/OpenCL/m04010_a3-optimized.cl @@ -653,7 +653,7 @@ DECLSPEC void m04010s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m04010_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04010_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -723,7 +723,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04010_m04 (KERN_ATTR_BASIC ()) m04010m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04010_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04010_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -793,7 +793,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04010_m08 (KERN_ATTR_BASIC ()) m04010m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04010_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04010_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -863,7 +863,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04010_m16 (KERN_ATTR_BASIC ()) m04010m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04010_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04010_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -933,7 +933,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04010_s04 (KERN_ATTR_BASIC ()) m04010s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04010_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04010_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1003,7 +1003,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04010_s08 (KERN_ATTR_BASIC ()) m04010s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04010_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04010_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m04010_a3-pure.cl b/OpenCL/m04010_a3-pure.cl index f2b6a1d1d..0409b60cb 100644 --- a/OpenCL/m04010_a3-pure.cl +++ b/OpenCL/m04010_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04010_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m04010_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -148,7 +148,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04010_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04010_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m04010_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m04110_a0-optimized.cl b/OpenCL/m04110_a0-optimized.cl index 586104b1c..68f99f996 100644 --- a/OpenCL/m04110_a0-optimized.cl +++ b/OpenCL/m04110_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04110_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04110_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -406,15 +406,15 @@ KERNEL_FQ void HC_ATTR_SEQ m04110_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04110_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04110_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04110_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04110_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04110_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04110_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -807,10 +807,10 @@ KERNEL_FQ void HC_ATTR_SEQ m04110_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04110_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04110_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04110_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04110_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m04110_a0-pure.cl b/OpenCL/m04110_a0-pure.cl index a6c865768..9a9de7f0e 100644 --- a/OpenCL/m04110_a0-pure.cl +++ b/OpenCL/m04110_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04110_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04110_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -148,7 +148,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04110_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04110_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04110_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m04110_a1-optimized.cl b/OpenCL/m04110_a1-optimized.cl index 980c83838..26457d24c 100644 --- a/OpenCL/m04110_a1-optimized.cl +++ b/OpenCL/m04110_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04110_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04110_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -464,15 +464,15 @@ KERNEL_FQ void HC_ATTR_SEQ m04110_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04110_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04110_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04110_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04110_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04110_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04110_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -925,10 +925,10 @@ KERNEL_FQ void HC_ATTR_SEQ m04110_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04110_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04110_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04110_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04110_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m04110_a1-pure.cl b/OpenCL/m04110_a1-pure.cl index cd1f003f5..8d34d8305 100644 --- a/OpenCL/m04110_a1-pure.cl +++ b/OpenCL/m04110_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04110_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04110_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -144,7 +144,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04110_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04110_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04110_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m04110_a3-optimized.cl b/OpenCL/m04110_a3-optimized.cl index 481ba3633..f98871708 100644 --- a/OpenCL/m04110_a3-optimized.cl +++ b/OpenCL/m04110_a3-optimized.cl @@ -709,7 +709,7 @@ DECLSPEC void m04110s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m04110_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04110_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -779,7 +779,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04110_m04 (KERN_ATTR_BASIC ()) m04110m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04110_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04110_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -849,7 +849,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04110_m08 (KERN_ATTR_BASIC ()) m04110m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04110_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04110_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -919,7 +919,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04110_m16 (KERN_ATTR_BASIC ()) m04110m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04110_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04110_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -989,7 +989,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04110_s04 (KERN_ATTR_BASIC ()) m04110s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04110_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04110_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1059,7 +1059,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04110_s08 (KERN_ATTR_BASIC ()) m04110s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04110_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04110_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m04110_a3-pure.cl b/OpenCL/m04110_a3-pure.cl index 7783dad10..c1e02f9d7 100644 --- a/OpenCL/m04110_a3-pure.cl +++ b/OpenCL/m04110_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04110_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m04110_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -159,7 +159,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04110_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04110_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m04110_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m04310_a0-optimized.cl b/OpenCL/m04310_a0-optimized.cl index 64b40ba7b..4b0e75c7a 100644 --- a/OpenCL/m04310_a0-optimized.cl +++ b/OpenCL/m04310_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_upper8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04310_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04310_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -304,15 +304,15 @@ KERNEL_FQ void HC_ATTR_SEQ m04310_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04310_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04310_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04310_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04310_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04310_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04310_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -603,10 +603,10 @@ KERNEL_FQ void HC_ATTR_SEQ m04310_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04310_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04310_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04310_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04310_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m04310_a0-pure.cl b/OpenCL/m04310_a0-pure.cl index 7254be823..ae988e45d 100644 --- a/OpenCL/m04310_a0-pure.cl +++ b/OpenCL/m04310_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_upper8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04310_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04310_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -131,7 +131,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04310_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04310_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04310_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m04310_a1-optimized.cl b/OpenCL/m04310_a1-optimized.cl index 7beced80d..779c1a902 100644 --- a/OpenCL/m04310_a1-optimized.cl +++ b/OpenCL/m04310_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_upper8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04310_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04310_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -361,15 +361,15 @@ KERNEL_FQ void HC_ATTR_SEQ m04310_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04310_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04310_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04310_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04310_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04310_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04310_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -719,10 +719,10 @@ KERNEL_FQ void HC_ATTR_SEQ m04310_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04310_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04310_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04310_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04310_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m04310_a1-pure.cl b/OpenCL/m04310_a1-pure.cl index b75b00cf1..34810c5b9 100644 --- a/OpenCL/m04310_a1-pure.cl +++ b/OpenCL/m04310_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_upper8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04310_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04310_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -127,7 +127,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04310_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04310_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04310_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m04310_a3-optimized.cl b/OpenCL/m04310_a3-optimized.cl index a74af0159..21ca961fe 100644 --- a/OpenCL/m04310_a3-optimized.cl +++ b/OpenCL/m04310_a3-optimized.cl @@ -552,7 +552,7 @@ DECLSPEC void m04310s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m04310_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04310_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -622,7 +622,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04310_m04 (KERN_ATTR_BASIC ()) m04310m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04310_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04310_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -692,7 +692,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04310_m08 (KERN_ATTR_BASIC ()) m04310m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04310_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04310_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -762,7 +762,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04310_m16 (KERN_ATTR_BASIC ()) m04310m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04310_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04310_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -832,7 +832,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04310_s04 (KERN_ATTR_BASIC ()) m04310s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04310_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04310_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -902,7 +902,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04310_s08 (KERN_ATTR_BASIC ()) m04310s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04310_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04310_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m04310_a3-pure.cl b/OpenCL/m04310_a3-pure.cl index fcc51234b..63994c713 100644 --- a/OpenCL/m04310_a3-pure.cl +++ b/OpenCL/m04310_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_upper8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04310_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m04310_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -140,7 +140,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04310_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04310_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m04310_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m04400_a0-optimized.cl b/OpenCL/m04400_a0-optimized.cl index f4692d08d..891bd8da5 100644 --- a/OpenCL/m04400_a0-optimized.cl +++ b/OpenCL/m04400_a0-optimized.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04400_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04400_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -331,15 +331,15 @@ KERNEL_FQ void HC_ATTR_SEQ m04400_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04400_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04400_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04400_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04400_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04400_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04400_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -656,10 +656,10 @@ KERNEL_FQ void HC_ATTR_SEQ m04400_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04400_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04400_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04400_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04400_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m04400_a0-pure.cl b/OpenCL/m04400_a0-pure.cl index a5f6cd30d..87cd1f4d7 100644 --- a/OpenCL/m04400_a0-pure.cl +++ b/OpenCL/m04400_a0-pure.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04400_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04400_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -126,7 +126,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04400_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04400_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04400_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m04400_a1-optimized.cl b/OpenCL/m04400_a1-optimized.cl index 25c90d3b4..314e9cbed 100644 --- a/OpenCL/m04400_a1-optimized.cl +++ b/OpenCL/m04400_a1-optimized.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04400_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04400_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -387,15 +387,15 @@ KERNEL_FQ void HC_ATTR_SEQ m04400_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04400_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04400_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04400_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04400_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04400_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04400_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -770,10 +770,10 @@ KERNEL_FQ void HC_ATTR_SEQ m04400_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04400_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04400_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04400_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04400_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m04400_a1-pure.cl b/OpenCL/m04400_a1-pure.cl index 9fce785e9..208523dae 100644 --- a/OpenCL/m04400_a1-pure.cl +++ b/OpenCL/m04400_a1-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04400_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04400_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -122,7 +122,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04400_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04400_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04400_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m04400_a3-optimized.cl b/OpenCL/m04400_a3-optimized.cl index 03d26b4d3..3a03611e1 100644 --- a/OpenCL/m04400_a3-optimized.cl +++ b/OpenCL/m04400_a3-optimized.cl @@ -558,7 +558,7 @@ DECLSPEC void m04400s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m04400_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04400_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -628,7 +628,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04400_m04 (KERN_ATTR_BASIC ()) m04400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04400_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04400_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -698,7 +698,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04400_m08 (KERN_ATTR_BASIC ()) m04400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04400_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04400_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -768,7 +768,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04400_m16 (KERN_ATTR_BASIC ()) m04400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04400_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04400_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -838,7 +838,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04400_s04 (KERN_ATTR_BASIC ()) m04400s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04400_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04400_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -908,7 +908,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04400_s08 (KERN_ATTR_BASIC ()) m04400s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04400_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04400_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m04400_a3-pure.cl b/OpenCL/m04400_a3-pure.cl index 1e47d6146..71a917453 100644 --- a/OpenCL/m04400_a3-pure.cl +++ b/OpenCL/m04400_a3-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04400_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m04400_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -135,7 +135,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04400_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04400_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m04400_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m04410_a0-optimized.cl b/OpenCL/m04410_a0-optimized.cl index ffeb0f015..32fbfcf5a 100644 --- a/OpenCL/m04410_a0-optimized.cl +++ b/OpenCL/m04410_a0-optimized.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04410_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04410_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -650,15 +650,15 @@ KERNEL_FQ void HC_ATTR_SEQ m04410_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04410_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04410_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04410_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04410_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04410_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04410_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -1294,10 +1294,10 @@ KERNEL_FQ void HC_ATTR_SEQ m04410_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04410_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04410_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04410_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04410_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m04410_a0-pure.cl b/OpenCL/m04410_a0-pure.cl index f3eb9bb00..b6e2f26f0 100644 --- a/OpenCL/m04410_a0-pure.cl +++ b/OpenCL/m04410_a0-pure.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04410_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04410_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -148,7 +148,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04410_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04410_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04410_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m04410_a1-optimized.cl b/OpenCL/m04410_a1-optimized.cl index 7741e1b32..bde1a9ff0 100644 --- a/OpenCL/m04410_a1-optimized.cl +++ b/OpenCL/m04410_a1-optimized.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04410_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04410_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -706,15 +706,15 @@ KERNEL_FQ void HC_ATTR_SEQ m04410_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04410_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04410_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04410_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04410_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04410_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04410_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -1408,10 +1408,10 @@ KERNEL_FQ void HC_ATTR_SEQ m04410_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04410_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04410_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04410_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04410_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m04410_a1-pure.cl b/OpenCL/m04410_a1-pure.cl index 2cd4a39bf..2a9f11531 100644 --- a/OpenCL/m04410_a1-pure.cl +++ b/OpenCL/m04410_a1-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04410_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04410_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -144,7 +144,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04410_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04410_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04410_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m04410_a3-optimized.cl b/OpenCL/m04410_a3-optimized.cl index 4fd442eed..1a217562e 100644 --- a/OpenCL/m04410_a3-optimized.cl +++ b/OpenCL/m04410_a3-optimized.cl @@ -1196,7 +1196,7 @@ DECLSPEC void m04410s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m04410_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04410_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -1266,7 +1266,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04410_m04 (KERN_ATTR_BASIC ()) m04410m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04410_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04410_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -1336,7 +1336,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04410_m08 (KERN_ATTR_BASIC ()) m04410m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04410_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04410_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -1406,7 +1406,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04410_m16 (KERN_ATTR_BASIC ()) m04410m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04410_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04410_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1476,7 +1476,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04410_s04 (KERN_ATTR_BASIC ()) m04410s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04410_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04410_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1546,7 +1546,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04410_s08 (KERN_ATTR_BASIC ()) m04410s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04410_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04410_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m04410_a3-pure.cl b/OpenCL/m04410_a3-pure.cl index 6e88f45a4..cfd402b9c 100644 --- a/OpenCL/m04410_a3-pure.cl +++ b/OpenCL/m04410_a3-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04410_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m04410_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -157,7 +157,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04410_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04410_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m04410_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m04420_a0-optimized.cl b/OpenCL/m04420_a0-optimized.cl index 8d55d58fb..d1c49c7a5 100644 --- a/OpenCL/m04420_a0-optimized.cl +++ b/OpenCL/m04420_a0-optimized.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04420_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04420_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -405,15 +405,15 @@ KERNEL_FQ void HC_ATTR_SEQ m04420_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04420_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04420_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04420_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04420_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04420_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04420_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -804,10 +804,10 @@ KERNEL_FQ void HC_ATTR_SEQ m04420_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04420_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04420_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04420_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04420_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m04420_a0-pure.cl b/OpenCL/m04420_a0-pure.cl index 923d1d119..f9a5f9daf 100644 --- a/OpenCL/m04420_a0-pure.cl +++ b/OpenCL/m04420_a0-pure.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04420_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04420_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -148,7 +148,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04420_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04420_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04420_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m04420_a1-optimized.cl b/OpenCL/m04420_a1-optimized.cl index 546818bd2..7a17a98e9 100644 --- a/OpenCL/m04420_a1-optimized.cl +++ b/OpenCL/m04420_a1-optimized.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04420_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04420_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -463,15 +463,15 @@ KERNEL_FQ void HC_ATTR_SEQ m04420_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04420_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04420_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04420_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04420_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04420_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04420_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -922,10 +922,10 @@ KERNEL_FQ void HC_ATTR_SEQ m04420_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04420_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04420_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04420_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04420_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m04420_a1-pure.cl b/OpenCL/m04420_a1-pure.cl index b44226098..b8a4fbdce 100644 --- a/OpenCL/m04420_a1-pure.cl +++ b/OpenCL/m04420_a1-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04420_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04420_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -144,7 +144,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04420_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04420_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04420_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m04420_a3-optimized.cl b/OpenCL/m04420_a3-optimized.cl index a6c1e2b75..df794dccd 100644 --- a/OpenCL/m04420_a3-optimized.cl +++ b/OpenCL/m04420_a3-optimized.cl @@ -706,7 +706,7 @@ DECLSPEC void m04420s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m04420_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04420_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -776,7 +776,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04420_m04 (KERN_ATTR_BASIC ()) m04420m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04420_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04420_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -846,7 +846,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04420_m08 (KERN_ATTR_BASIC ()) m04420m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04420_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04420_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -916,7 +916,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04420_m16 (KERN_ATTR_BASIC ()) m04420m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04420_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04420_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -986,7 +986,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04420_s04 (KERN_ATTR_BASIC ()) m04420s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04420_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04420_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1056,7 +1056,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04420_s08 (KERN_ATTR_BASIC ()) m04420s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04420_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04420_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m04420_a3-pure.cl b/OpenCL/m04420_a3-pure.cl index 99dcbebd4..9e4648f6c 100644 --- a/OpenCL/m04420_a3-pure.cl +++ b/OpenCL/m04420_a3-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04420_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m04420_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -157,7 +157,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04420_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04420_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m04420_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m04430_a0-optimized.cl b/OpenCL/m04430_a0-optimized.cl index da3a0358f..b82cc7b73 100644 --- a/OpenCL/m04430_a0-optimized.cl +++ b/OpenCL/m04430_a0-optimized.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04430_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04430_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -385,15 +385,15 @@ KERNEL_FQ void HC_ATTR_SEQ m04430_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04430_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04430_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04430_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04430_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04430_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04430_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -764,10 +764,10 @@ KERNEL_FQ void HC_ATTR_SEQ m04430_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04430_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04430_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04430_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04430_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m04430_a0-pure.cl b/OpenCL/m04430_a0-pure.cl index ef33923b7..b54521b65 100644 --- a/OpenCL/m04430_a0-pure.cl +++ b/OpenCL/m04430_a0-pure.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04430_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04430_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -141,7 +141,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04430_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04430_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04430_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m04430_a1-optimized.cl b/OpenCL/m04430_a1-optimized.cl index 9d9392769..aa6453ace 100644 --- a/OpenCL/m04430_a1-optimized.cl +++ b/OpenCL/m04430_a1-optimized.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04430_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04430_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -441,15 +441,15 @@ KERNEL_FQ void HC_ATTR_SEQ m04430_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04430_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04430_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04430_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04430_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04430_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04430_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -877,10 +877,10 @@ KERNEL_FQ void HC_ATTR_SEQ m04430_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04430_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04430_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04430_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04430_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m04430_a1-pure.cl b/OpenCL/m04430_a1-pure.cl index aed95f4fb..b990d90fb 100644 --- a/OpenCL/m04430_a1-pure.cl +++ b/OpenCL/m04430_a1-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04430_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04430_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -135,7 +135,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04430_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04430_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04430_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m04430_a3-optimized.cl b/OpenCL/m04430_a3-optimized.cl index 5727609a4..0914baccc 100644 --- a/OpenCL/m04430_a3-optimized.cl +++ b/OpenCL/m04430_a3-optimized.cl @@ -702,7 +702,7 @@ DECLSPEC void m04430s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m04430_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04430_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -772,7 +772,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04430_m04 (KERN_ATTR_BASIC ()) m04430m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04430_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04430_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -842,7 +842,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04430_m08 (KERN_ATTR_BASIC ()) m04430m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04430_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04430_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -912,7 +912,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04430_m16 (KERN_ATTR_BASIC ()) m04430m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04430_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04430_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -982,7 +982,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04430_s04 (KERN_ATTR_BASIC ()) m04430s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04430_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04430_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1052,7 +1052,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04430_s08 (KERN_ATTR_BASIC ()) m04430s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04430_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04430_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m04430_a3-pure.cl b/OpenCL/m04430_a3-pure.cl index 443c436b2..abeaa803c 100644 --- a/OpenCL/m04430_a3-pure.cl +++ b/OpenCL/m04430_a3-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04430_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m04430_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -152,7 +152,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04430_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04430_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m04430_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m04500_a0-optimized.cl b/OpenCL/m04500_a0-optimized.cl index e08c2b6ef..a4ada9fb0 100644 --- a/OpenCL/m04500_a0-optimized.cl +++ b/OpenCL/m04500_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04500_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04500_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -357,15 +357,15 @@ KERNEL_FQ void HC_ATTR_SEQ m04500_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04500_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04500_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04500_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04500_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04500_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04500_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -715,10 +715,10 @@ KERNEL_FQ void HC_ATTR_SEQ m04500_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04500_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04500_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04500_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04500_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m04500_a0-pure.cl b/OpenCL/m04500_a0-pure.cl index 75ad529e2..34a9e75d7 100644 --- a/OpenCL/m04500_a0-pure.cl +++ b/OpenCL/m04500_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04500_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04500_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -125,7 +125,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04500_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04500_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04500_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m04500_a1-optimized.cl b/OpenCL/m04500_a1-optimized.cl index 94db62269..27251248a 100644 --- a/OpenCL/m04500_a1-optimized.cl +++ b/OpenCL/m04500_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04500_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04500_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -413,15 +413,15 @@ KERNEL_FQ void HC_ATTR_SEQ m04500_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04500_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04500_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04500_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04500_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04500_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04500_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -829,10 +829,10 @@ KERNEL_FQ void HC_ATTR_SEQ m04500_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04500_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04500_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04500_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04500_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m04500_a1-pure.cl b/OpenCL/m04500_a1-pure.cl index e10fecd3e..0aac24706 100644 --- a/OpenCL/m04500_a1-pure.cl +++ b/OpenCL/m04500_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04500_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04500_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -121,7 +121,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04500_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04500_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04500_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m04500_a3-optimized.cl b/OpenCL/m04500_a3-optimized.cl index 1a1593e63..e689f0716 100644 --- a/OpenCL/m04500_a3-optimized.cl +++ b/OpenCL/m04500_a3-optimized.cl @@ -617,7 +617,7 @@ DECLSPEC void m04500s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m04500_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04500_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -687,7 +687,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04500_m04 (KERN_ATTR_BASIC ()) m04500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04500_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04500_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -757,7 +757,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04500_m08 (KERN_ATTR_BASIC ()) m04500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04500_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04500_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -827,7 +827,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04500_m16 (KERN_ATTR_BASIC ()) m04500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04500_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04500_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -897,7 +897,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04500_s04 (KERN_ATTR_BASIC ()) m04500s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04500_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04500_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -967,7 +967,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04500_s08 (KERN_ATTR_BASIC ()) m04500s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04500_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04500_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m04500_a3-pure.cl b/OpenCL/m04500_a3-pure.cl index ba5028d3c..3517541fc 100644 --- a/OpenCL/m04500_a3-pure.cl +++ b/OpenCL/m04500_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04500_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m04500_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -134,7 +134,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04500_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04500_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m04500_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m04510_a0-optimized.cl b/OpenCL/m04510_a0-optimized.cl index f3f564def..945d341d0 100644 --- a/OpenCL/m04510_a0-optimized.cl +++ b/OpenCL/m04510_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04510_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04510_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -1024,15 +1024,15 @@ KERNEL_FQ void HC_ATTR_SEQ m04510_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04510_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04510_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04510_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04510_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04510_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04510_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -2045,10 +2045,10 @@ KERNEL_FQ void HC_ATTR_SEQ m04510_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04510_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04510_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04510_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04510_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m04510_a0-pure.cl b/OpenCL/m04510_a0-pure.cl index 5c2f90cfc..f7d2ea92b 100644 --- a/OpenCL/m04510_a0-pure.cl +++ b/OpenCL/m04510_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04510_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04510_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -131,7 +131,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04510_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04510_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04510_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m04510_a1-optimized.cl b/OpenCL/m04510_a1-optimized.cl index 94d74eea0..f4627d4a4 100644 --- a/OpenCL/m04510_a1-optimized.cl +++ b/OpenCL/m04510_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04510_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04510_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -1079,15 +1079,15 @@ KERNEL_FQ void HC_ATTR_SEQ m04510_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04510_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04510_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04510_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04510_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04510_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04510_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -2157,10 +2157,10 @@ KERNEL_FQ void HC_ATTR_SEQ m04510_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04510_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04510_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04510_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04510_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m04510_a1-pure.cl b/OpenCL/m04510_a1-pure.cl index 804fe89c0..02f37b99e 100644 --- a/OpenCL/m04510_a1-pure.cl +++ b/OpenCL/m04510_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04510_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04510_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -127,7 +127,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04510_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04510_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04510_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m04510_a3-optimized.cl b/OpenCL/m04510_a3-optimized.cl index 24fa11ba9..c449f79fc 100644 --- a/OpenCL/m04510_a3-optimized.cl +++ b/OpenCL/m04510_a3-optimized.cl @@ -1947,7 +1947,7 @@ DECLSPEC void m04510s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m04510_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04510_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -2017,7 +2017,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04510_m04 (KERN_ATTR_BASIC ()) m04510m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04510_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04510_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -2087,7 +2087,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04510_m08 (KERN_ATTR_BASIC ()) m04510m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04510_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04510_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -2157,7 +2157,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04510_m16 (KERN_ATTR_BASIC ()) m04510m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04510_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04510_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -2227,7 +2227,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04510_s04 (KERN_ATTR_BASIC ()) m04510s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04510_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04510_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -2297,7 +2297,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04510_s08 (KERN_ATTR_BASIC ()) m04510s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04510_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04510_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m04510_a3-pure.cl b/OpenCL/m04510_a3-pure.cl index 5b96c046f..f37739add 100644 --- a/OpenCL/m04510_a3-pure.cl +++ b/OpenCL/m04510_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04510_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m04510_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -135,7 +135,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04510_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04510_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m04510_sxx (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m04520_a0-optimized.cl b/OpenCL/m04520_a0-optimized.cl index 1248b956d..eb446e0eb 100644 --- a/OpenCL/m04520_a0-optimized.cl +++ b/OpenCL/m04520_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04520_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04520_m04 (KERN_ATTR_RULES ()) { /** * base @@ -588,15 +588,15 @@ KERNEL_FQ void HC_ATTR_SEQ m04520_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04520_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04520_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04520_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04520_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04520_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04520_s04 (KERN_ATTR_RULES ()) { /** * base @@ -1168,10 +1168,10 @@ KERNEL_FQ void HC_ATTR_SEQ m04520_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04520_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04520_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04520_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04520_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m04520_a0-pure.cl b/OpenCL/m04520_a0-pure.cl index 8df531927..060a50412 100644 --- a/OpenCL/m04520_a0-pure.cl +++ b/OpenCL/m04520_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04520_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04520_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -140,7 +140,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04520_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04520_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04520_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m04520_a1-optimized.cl b/OpenCL/m04520_a1-optimized.cl index b13c5526b..4f430379d 100644 --- a/OpenCL/m04520_a1-optimized.cl +++ b/OpenCL/m04520_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04520_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04520_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -644,15 +644,15 @@ KERNEL_FQ void HC_ATTR_SEQ m04520_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04520_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04520_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04520_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04520_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04520_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04520_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1282,10 +1282,10 @@ KERNEL_FQ void HC_ATTR_SEQ m04520_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04520_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04520_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04520_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04520_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m04520_a1-pure.cl b/OpenCL/m04520_a1-pure.cl index f19a9c274..909120ec4 100644 --- a/OpenCL/m04520_a1-pure.cl +++ b/OpenCL/m04520_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04520_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04520_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -136,7 +136,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04520_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04520_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04520_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m04520_a3-optimized.cl b/OpenCL/m04520_a3-optimized.cl index 3784e3b47..eba840108 100644 --- a/OpenCL/m04520_a3-optimized.cl +++ b/OpenCL/m04520_a3-optimized.cl @@ -1070,7 +1070,7 @@ DECLSPEC void m04520s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m04520_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04520_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -1140,7 +1140,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04520_m04 (KERN_ATTR_BASIC ()) m04520m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04520_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04520_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -1210,7 +1210,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04520_m08 (KERN_ATTR_BASIC ()) m04520m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04520_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04520_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -1280,7 +1280,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04520_m16 (KERN_ATTR_BASIC ()) m04520m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04520_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04520_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1350,7 +1350,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04520_s04 (KERN_ATTR_BASIC ()) m04520s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04520_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04520_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1420,7 +1420,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04520_s08 (KERN_ATTR_BASIC ()) m04520s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04520_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04520_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m04520_a3-pure.cl b/OpenCL/m04520_a3-pure.cl index 3a03c537d..3b393a9b7 100644 --- a/OpenCL/m04520_a3-pure.cl +++ b/OpenCL/m04520_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04520_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m04520_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -151,7 +151,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04520_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04520_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m04520_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m04700_a0-optimized.cl b/OpenCL/m04700_a0-optimized.cl index 84e537625..5ebc61e52 100644 --- a/OpenCL/m04700_a0-optimized.cl +++ b/OpenCL/m04700_a0-optimized.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04700_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04700_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -314,15 +314,15 @@ KERNEL_FQ void HC_ATTR_SEQ m04700_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04700_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04700_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04700_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04700_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04700_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04700_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -628,10 +628,10 @@ KERNEL_FQ void HC_ATTR_SEQ m04700_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04700_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04700_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04700_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04700_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m04700_a0-pure.cl b/OpenCL/m04700_a0-pure.cl index 64ad56396..3a48346fe 100644 --- a/OpenCL/m04700_a0-pure.cl +++ b/OpenCL/m04700_a0-pure.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04700_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04700_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -121,7 +121,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04700_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04700_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04700_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m04700_a1-optimized.cl b/OpenCL/m04700_a1-optimized.cl index 832df1f99..3cd748109 100644 --- a/OpenCL/m04700_a1-optimized.cl +++ b/OpenCL/m04700_a1-optimized.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04700_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04700_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -367,15 +367,15 @@ KERNEL_FQ void HC_ATTR_SEQ m04700_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04700_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04700_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04700_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04700_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04700_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04700_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -736,10 +736,10 @@ KERNEL_FQ void HC_ATTR_SEQ m04700_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04700_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04700_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04700_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04700_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m04700_a1-pure.cl b/OpenCL/m04700_a1-pure.cl index 13d416840..beda5345a 100644 --- a/OpenCL/m04700_a1-pure.cl +++ b/OpenCL/m04700_a1-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04700_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04700_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -117,7 +117,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04700_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04700_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04700_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m04700_a3-optimized.cl b/OpenCL/m04700_a3-optimized.cl index 1a14e2af4..bbca7ef7c 100644 --- a/OpenCL/m04700_a3-optimized.cl +++ b/OpenCL/m04700_a3-optimized.cl @@ -558,7 +558,7 @@ DECLSPEC void m04700s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m04700_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04700_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -628,7 +628,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04700_m04 (KERN_ATTR_BASIC ()) m04700m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04700_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04700_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -698,7 +698,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04700_m08 (KERN_ATTR_BASIC ()) m04700m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04700_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04700_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -768,7 +768,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04700_m16 (KERN_ATTR_BASIC ()) m04700m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04700_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04700_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -838,7 +838,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04700_s04 (KERN_ATTR_BASIC ()) m04700s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04700_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04700_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -908,7 +908,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04700_s08 (KERN_ATTR_BASIC ()) m04700s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04700_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04700_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m04700_a3-pure.cl b/OpenCL/m04700_a3-pure.cl index 737211c1d..9231b2eec 100644 --- a/OpenCL/m04700_a3-pure.cl +++ b/OpenCL/m04700_a3-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04700_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m04700_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -130,7 +130,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04700_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04700_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m04700_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m04710_a0-optimized.cl b/OpenCL/m04710_a0-optimized.cl index 5b5efd8db..f1066a2e4 100644 --- a/OpenCL/m04710_a0-optimized.cl +++ b/OpenCL/m04710_a0-optimized.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04710_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04710_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -724,15 +724,15 @@ KERNEL_FQ void HC_ATTR_SEQ m04710_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04710_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04710_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04710_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04710_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04710_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04710_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -1443,10 +1443,10 @@ KERNEL_FQ void HC_ATTR_SEQ m04710_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04710_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04710_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04710_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04710_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m04710_a0-pure.cl b/OpenCL/m04710_a0-pure.cl index 98364d7a6..21d579855 100644 --- a/OpenCL/m04710_a0-pure.cl +++ b/OpenCL/m04710_a0-pure.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04710_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04710_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -146,7 +146,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04710_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04710_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04710_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m04710_a1-optimized.cl b/OpenCL/m04710_a1-optimized.cl index 27782c0bd..dfa30d855 100644 --- a/OpenCL/m04710_a1-optimized.cl +++ b/OpenCL/m04710_a1-optimized.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04710_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04710_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -777,15 +777,15 @@ KERNEL_FQ void HC_ATTR_SEQ m04710_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04710_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04710_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04710_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04710_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04710_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04710_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -1551,10 +1551,10 @@ KERNEL_FQ void HC_ATTR_SEQ m04710_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04710_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04710_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04710_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04710_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m04710_a1-pure.cl b/OpenCL/m04710_a1-pure.cl index a865031f1..b3566e3b4 100644 --- a/OpenCL/m04710_a1-pure.cl +++ b/OpenCL/m04710_a1-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04710_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04710_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -142,7 +142,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04710_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04710_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04710_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m04710_a3-optimized.cl b/OpenCL/m04710_a3-optimized.cl index fdc0ebc19..1015e1ea0 100644 --- a/OpenCL/m04710_a3-optimized.cl +++ b/OpenCL/m04710_a3-optimized.cl @@ -1373,7 +1373,7 @@ DECLSPEC void m04710s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m04710_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04710_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -1443,7 +1443,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04710_m04 (KERN_ATTR_BASIC ()) m04710m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04710_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04710_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -1513,7 +1513,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04710_m08 (KERN_ATTR_BASIC ()) m04710m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04710_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04710_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -1583,7 +1583,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04710_m16 (KERN_ATTR_BASIC ()) m04710m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04710_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04710_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1653,7 +1653,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04710_s04 (KERN_ATTR_BASIC ()) m04710s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04710_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04710_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1723,7 +1723,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04710_s08 (KERN_ATTR_BASIC ()) m04710s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m04710_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04710_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m04710_a3-pure.cl b/OpenCL/m04710_a3-pure.cl index a4352d41b..f30c850e1 100644 --- a/OpenCL/m04710_a3-pure.cl +++ b/OpenCL/m04710_a3-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04710_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m04710_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -155,7 +155,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04710_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04710_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m04710_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m04800_a0-optimized.cl b/OpenCL/m04800_a0-optimized.cl index 62bfb653a..7b5f724bb 100644 --- a/OpenCL/m04800_a0-optimized.cl +++ b/OpenCL/m04800_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m04800_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04800_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -213,15 +213,15 @@ KERNEL_FQ void HC_ATTR_SEQ m04800_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04800_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04800_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04800_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04800_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04800_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04800_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -433,10 +433,10 @@ KERNEL_FQ void HC_ATTR_SEQ m04800_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04800_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04800_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04800_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04800_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m04800_a0-pure.cl b/OpenCL/m04800_a0-pure.cl index ca34cde99..446663598 100644 --- a/OpenCL/m04800_a0-pure.cl +++ b/OpenCL/m04800_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m04800_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04800_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -77,7 +77,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04800_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04800_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04800_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m04800_a1-optimized.cl b/OpenCL/m04800_a1-optimized.cl index 388584cf8..06d721f10 100644 --- a/OpenCL/m04800_a1-optimized.cl +++ b/OpenCL/m04800_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m04800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04800_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -283,15 +283,15 @@ KERNEL_FQ void HC_ATTR_SEQ m04800_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04800_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04800_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04800_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -563,10 +563,10 @@ KERNEL_FQ void HC_ATTR_SEQ m04800_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04800_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04800_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m04800_a1-pure.cl b/OpenCL/m04800_a1-pure.cl index aa08dc0de..daf93e493 100644 --- a/OpenCL/m04800_a1-pure.cl +++ b/OpenCL/m04800_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m04800_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04800_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04800_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04800_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04800_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m04800_a3-optimized.cl b/OpenCL/m04800_a3-optimized.cl index 2e93ae5bd..97f3d4113 100644 --- a/OpenCL/m04800_a3-optimized.cl +++ b/OpenCL/m04800_a3-optimized.cl @@ -391,7 +391,7 @@ DECLSPEC void m04800s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m04800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04800_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -444,7 +444,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04800_m04 (KERN_ATTR_BASIC ()) m04800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m04800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04800_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -497,7 +497,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04800_m08 (KERN_ATTR_BASIC ()) m04800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m04800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04800_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -550,7 +550,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04800_m16 (KERN_ATTR_BASIC ()) m04800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m04800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04800_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -603,7 +603,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04800_s04 (KERN_ATTR_BASIC ()) m04800s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m04800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04800_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -656,7 +656,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04800_s08 (KERN_ATTR_BASIC ()) m04800s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m04800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04800_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m04800_a3-pure.cl b/OpenCL/m04800_a3-pure.cl index 58fbe934f..4186e675e 100644 --- a/OpenCL/m04800_a3-pure.cl +++ b/OpenCL/m04800_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m04800_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m04800_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -88,7 +88,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04800_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04800_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m04800_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m04900_a0-optimized.cl b/OpenCL/m04900_a0-optimized.cl index f300e4eca..d731b60af 100644 --- a/OpenCL/m04900_a0-optimized.cl +++ b/OpenCL/m04900_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m04900_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04900_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -288,15 +288,15 @@ KERNEL_FQ void HC_ATTR_SEQ m04900_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04900_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04900_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04900_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04900_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04900_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04900_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -589,10 +589,10 @@ KERNEL_FQ void HC_ATTR_SEQ m04900_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04900_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04900_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04900_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04900_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m04900_a0-pure.cl b/OpenCL/m04900_a0-pure.cl index f5c42620d..e393fcea7 100644 --- a/OpenCL/m04900_a0-pure.cl +++ b/OpenCL/m04900_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m04900_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04900_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -75,7 +75,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04900_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04900_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m04900_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m04900_a1-optimized.cl b/OpenCL/m04900_a1-optimized.cl index 5b9650fe1..062e533ca 100644 --- a/OpenCL/m04900_a1-optimized.cl +++ b/OpenCL/m04900_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m04900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04900_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -346,15 +346,15 @@ KERNEL_FQ void HC_ATTR_SEQ m04900_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04900_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04900_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04900_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -707,10 +707,10 @@ KERNEL_FQ void HC_ATTR_SEQ m04900_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04900_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m04900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04900_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m04900_a1-pure.cl b/OpenCL/m04900_a1-pure.cl index 7d9c8897a..fe7ea6bff 100644 --- a/OpenCL/m04900_a1-pure.cl +++ b/OpenCL/m04900_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m04900_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04900_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04900_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04900_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04900_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m04900_a3-optimized.cl b/OpenCL/m04900_a3-optimized.cl index d74956474..ca4d6f037 100644 --- a/OpenCL/m04900_a3-optimized.cl +++ b/OpenCL/m04900_a3-optimized.cl @@ -563,7 +563,7 @@ DECLSPEC void m04900s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m04900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04900_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -616,7 +616,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04900_m04 (KERN_ATTR_BASIC ()) m04900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m04900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04900_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -669,7 +669,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04900_m08 (KERN_ATTR_BASIC ()) m04900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m04900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04900_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -722,7 +722,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04900_m16 (KERN_ATTR_BASIC ()) m04900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m04900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04900_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -775,7 +775,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04900_s04 (KERN_ATTR_BASIC ()) m04900s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m04900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04900_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -828,7 +828,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04900_s08 (KERN_ATTR_BASIC ()) m04900s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m04900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m04900_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m04900_a3-pure.cl b/OpenCL/m04900_a3-pure.cl index e94b22c94..e3bcd5eeb 100644 --- a/OpenCL/m04900_a3-pure.cl +++ b/OpenCL/m04900_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m04900_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m04900_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -86,7 +86,7 @@ KERNEL_FQ void HC_ATTR_SEQ m04900_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m04900_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m04900_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m05000_a0-optimized.cl b/OpenCL/m05000_a0-optimized.cl index 4b4edba8f..0c40ac0ca 100644 --- a/OpenCL/m05000_a0-optimized.cl +++ b/OpenCL/m05000_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m05000_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m05000_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -458,15 +458,15 @@ KERNEL_FQ void HC_ATTR_SEQ m05000_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m05000_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m05000_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m05000_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m05000_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m05000_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m05000_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -917,10 +917,10 @@ KERNEL_FQ void HC_ATTR_SEQ m05000_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m05000_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m05000_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m05000_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m05000_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m05000_a0-pure.cl b/OpenCL/m05000_a0-pure.cl index 73839a0fc..8b37666a9 100644 --- a/OpenCL/m05000_a0-pure.cl +++ b/OpenCL/m05000_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m05000_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m05000_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -140,7 +140,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05000_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m05000_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m05000_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m05000_a1-optimized.cl b/OpenCL/m05000_a1-optimized.cl index 383359966..d7ddd83dd 100644 --- a/OpenCL/m05000_a1-optimized.cl +++ b/OpenCL/m05000_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m05000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05000_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -516,15 +516,15 @@ KERNEL_FQ void HC_ATTR_SEQ m05000_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m05000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05000_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m05000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05000_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m05000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05000_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -1035,10 +1035,10 @@ KERNEL_FQ void HC_ATTR_SEQ m05000_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m05000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05000_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m05000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05000_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m05000_a1-pure.cl b/OpenCL/m05000_a1-pure.cl index 6a0bde1ef..485299b48 100644 --- a/OpenCL/m05000_a1-pure.cl +++ b/OpenCL/m05000_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m05000_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05000_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -134,7 +134,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05000_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m05000_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05000_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m05000_a3-optimized.cl b/OpenCL/m05000_a3-optimized.cl index d60a7f197..1337eae0b 100644 --- a/OpenCL/m05000_a3-optimized.cl +++ b/OpenCL/m05000_a3-optimized.cl @@ -855,7 +855,7 @@ DECLSPEC void m05000s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m05000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05000_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -921,7 +921,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05000_m04 (KERN_ATTR_BASIC ()) m05000m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m05000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05000_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -987,7 +987,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05000_m08 (KERN_ATTR_BASIC ()) m05000m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m05000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05000_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -1053,7 +1053,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05000_m16 (KERN_ATTR_BASIC ()) m05000m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m05000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05000_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1119,7 +1119,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05000_s04 (KERN_ATTR_BASIC ()) m05000s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m05000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05000_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1185,7 +1185,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05000_s08 (KERN_ATTR_BASIC ()) m05000s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m05000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05000_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m05000_a3-pure.cl b/OpenCL/m05000_a3-pure.cl index 9579df82b..29db44cca 100644 --- a/OpenCL/m05000_a3-pure.cl +++ b/OpenCL/m05000_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m05000_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m05000_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -151,7 +151,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05000_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m05000_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m05000_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m05100_a0-optimized.cl b/OpenCL/m05100_a0-optimized.cl index 3743bce14..365f18153 100644 --- a/OpenCL/m05100_a0-optimized.cl +++ b/OpenCL/m05100_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m05100_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m05100_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -156,15 +156,15 @@ KERNEL_FQ void HC_ATTR_SEQ m05100_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m05100_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m05100_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m05100_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m05100_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m05100_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m05100_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -316,10 +316,10 @@ KERNEL_FQ void HC_ATTR_SEQ m05100_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m05100_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m05100_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m05100_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m05100_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m05100_a0-pure.cl b/OpenCL/m05100_a0-pure.cl index fdf901862..6dd302f07 100644 --- a/OpenCL/m05100_a0-pure.cl +++ b/OpenCL/m05100_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m05100_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m05100_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -64,7 +64,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05100_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m05100_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m05100_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m05100_a1-optimized.cl b/OpenCL/m05100_a1-optimized.cl index f1af6d92b..b1067f98a 100644 --- a/OpenCL/m05100_a1-optimized.cl +++ b/OpenCL/m05100_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m05100_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05100_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -209,15 +209,15 @@ KERNEL_FQ void HC_ATTR_SEQ m05100_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m05100_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05100_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m05100_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05100_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m05100_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05100_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -424,10 +424,10 @@ KERNEL_FQ void HC_ATTR_SEQ m05100_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m05100_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05100_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m05100_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05100_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m05100_a1-pure.cl b/OpenCL/m05100_a1-pure.cl index de574e374..450a51554 100644 --- a/OpenCL/m05100_a1-pure.cl +++ b/OpenCL/m05100_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m05100_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05100_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05100_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m05100_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05100_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m05100_a3-optimized.cl b/OpenCL/m05100_a3-optimized.cl index 70ae97a53..8078f768b 100644 --- a/OpenCL/m05100_a3-optimized.cl +++ b/OpenCL/m05100_a3-optimized.cl @@ -290,7 +290,7 @@ DECLSPEC void m05100s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m05100_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05100_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -339,7 +339,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05100_m04 (KERN_ATTR_BASIC ()) m05100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m05100_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05100_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -388,7 +388,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05100_m08 (KERN_ATTR_BASIC ()) m05100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m05100_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05100_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -437,7 +437,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05100_m16 (KERN_ATTR_BASIC ()) m05100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m05100_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05100_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -486,7 +486,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05100_s04 (KERN_ATTR_BASIC ()) m05100s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m05100_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05100_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -535,7 +535,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05100_s08 (KERN_ATTR_BASIC ()) m05100s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m05100_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05100_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m05100_a3-pure.cl b/OpenCL/m05100_a3-pure.cl index c46a0e4ab..71751804e 100644 --- a/OpenCL/m05100_a3-pure.cl +++ b/OpenCL/m05100_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m05100_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m05100_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -73,7 +73,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05100_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m05100_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m05100_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m05200-pure.cl b/OpenCL/m05200-pure.cl index 0b58a1629..2fc06f2b9 100644 --- a/OpenCL/m05200-pure.cl +++ b/OpenCL/m05200-pure.cl @@ -23,7 +23,7 @@ typedef struct pwsafe3_tmp } pwsafe3_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m05200_init (KERN_ATTR_TMPS (pwsafe3_tmp_t)) +KERNEL_FQ KERNEL_FA void m05200_init (KERN_ATTR_TMPS (pwsafe3_tmp_t)) { /** * base @@ -53,7 +53,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05200_init (KERN_ATTR_TMPS (pwsafe3_tmp_t)) tmps[gid].digest_buf[7] = ctx.h[7]; } -KERNEL_FQ void HC_ATTR_SEQ m05200_loop (KERN_ATTR_TMPS (pwsafe3_tmp_t)) +KERNEL_FQ KERNEL_FA void m05200_loop (KERN_ATTR_TMPS (pwsafe3_tmp_t)) { const u64 gid = get_global_id (0); @@ -120,7 +120,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05200_loop (KERN_ATTR_TMPS (pwsafe3_tmp_t)) unpackv (tmps, digest_buf, gid, 7, digest[7]); } -KERNEL_FQ void HC_ATTR_SEQ m05200_comp (KERN_ATTR_TMPS (pwsafe3_tmp_t)) +KERNEL_FQ KERNEL_FA void m05200_comp (KERN_ATTR_TMPS (pwsafe3_tmp_t)) { /** * modifier diff --git a/OpenCL/m05300_a0-optimized.cl b/OpenCL/m05300_a0-optimized.cl index 304a52be1..5ff12ea49 100644 --- a/OpenCL/m05300_a0-optimized.cl +++ b/OpenCL/m05300_a0-optimized.cl @@ -111,7 +111,7 @@ DECLSPEC void hmac_md5_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_AS md5_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m05300_m04 (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05300_m04 (KERN_ATTR_RULES_ESALT (ikepsk_t)) { /** * modifier @@ -278,15 +278,15 @@ KERNEL_FQ void HC_ATTR_SEQ m05300_m04 (KERN_ATTR_RULES_ESALT (ikepsk_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m05300_m08 (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05300_m08 (KERN_ATTR_RULES_ESALT (ikepsk_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m05300_m16 (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05300_m16 (KERN_ATTR_RULES_ESALT (ikepsk_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m05300_s04 (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05300_s04 (KERN_ATTR_RULES_ESALT (ikepsk_t)) { /** * modifier @@ -465,10 +465,10 @@ KERNEL_FQ void HC_ATTR_SEQ m05300_s04 (KERN_ATTR_RULES_ESALT (ikepsk_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m05300_s08 (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05300_s08 (KERN_ATTR_RULES_ESALT (ikepsk_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m05300_s16 (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05300_s16 (KERN_ATTR_RULES_ESALT (ikepsk_t)) { } diff --git a/OpenCL/m05300_a0-pure.cl b/OpenCL/m05300_a0-pure.cl index 46ed095cf..1af5de49c 100644 --- a/OpenCL/m05300_a0-pure.cl +++ b/OpenCL/m05300_a0-pure.cl @@ -26,7 +26,7 @@ typedef struct ikepsk } ikepsk_t; -KERNEL_FQ void HC_ATTR_SEQ m05300_mxx (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05300_mxx (KERN_ATTR_RULES_ESALT (ikepsk_t)) { /** * modifier @@ -100,7 +100,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05300_mxx (KERN_ATTR_RULES_ESALT (ikepsk_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m05300_sxx (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05300_sxx (KERN_ATTR_RULES_ESALT (ikepsk_t)) { /** * modifier diff --git a/OpenCL/m05300_a1-optimized.cl b/OpenCL/m05300_a1-optimized.cl index 4436b877b..adfc8a698 100644 --- a/OpenCL/m05300_a1-optimized.cl +++ b/OpenCL/m05300_a1-optimized.cl @@ -109,7 +109,7 @@ DECLSPEC void hmac_md5_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_AS md5_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m05300_m04 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05300_m04 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -336,15 +336,15 @@ KERNEL_FQ void HC_ATTR_SEQ m05300_m04 (KERN_ATTR_ESALT (ikepsk_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m05300_m08 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05300_m08 (KERN_ATTR_ESALT (ikepsk_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m05300_m16 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05300_m16 (KERN_ATTR_ESALT (ikepsk_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m05300_s04 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05300_s04 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -583,10 +583,10 @@ KERNEL_FQ void HC_ATTR_SEQ m05300_s04 (KERN_ATTR_ESALT (ikepsk_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m05300_s08 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05300_s08 (KERN_ATTR_ESALT (ikepsk_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m05300_s16 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05300_s16 (KERN_ATTR_ESALT (ikepsk_t)) { } diff --git a/OpenCL/m05300_a1-pure.cl b/OpenCL/m05300_a1-pure.cl index 781da5eca..702d49e01 100644 --- a/OpenCL/m05300_a1-pure.cl +++ b/OpenCL/m05300_a1-pure.cl @@ -24,7 +24,7 @@ typedef struct ikepsk } ikepsk_t; -KERNEL_FQ void HC_ATTR_SEQ m05300_mxx (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05300_mxx (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -123,7 +123,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05300_mxx (KERN_ATTR_ESALT (ikepsk_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m05300_sxx (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05300_sxx (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier diff --git a/OpenCL/m05300_a3-optimized.cl b/OpenCL/m05300_a3-optimized.cl index 2be6bc7aa..b927a26d0 100644 --- a/OpenCL/m05300_a3-optimized.cl +++ b/OpenCL/m05300_a3-optimized.cl @@ -409,7 +409,7 @@ DECLSPEC void m05300s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m05300_m04 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05300_m04 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -482,7 +482,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05300_m04 (KERN_ATTR_ESALT (ikepsk_t)) m05300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_msg_buf, s_nr_buf); } -KERNEL_FQ void HC_ATTR_SEQ m05300_m08 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05300_m08 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -555,7 +555,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05300_m08 (KERN_ATTR_ESALT (ikepsk_t)) m05300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_msg_buf, s_nr_buf); } -KERNEL_FQ void HC_ATTR_SEQ m05300_m16 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05300_m16 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -628,7 +628,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05300_m16 (KERN_ATTR_ESALT (ikepsk_t)) m05300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_msg_buf, s_nr_buf); } -KERNEL_FQ void HC_ATTR_SEQ m05300_s04 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05300_s04 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -701,7 +701,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05300_s04 (KERN_ATTR_ESALT (ikepsk_t)) m05300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_msg_buf, s_nr_buf); } -KERNEL_FQ void HC_ATTR_SEQ m05300_s08 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05300_s08 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -774,7 +774,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05300_s08 (KERN_ATTR_ESALT (ikepsk_t)) m05300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_msg_buf, s_nr_buf); } -KERNEL_FQ void HC_ATTR_SEQ m05300_s16 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05300_s16 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier diff --git a/OpenCL/m05300_a3-pure.cl b/OpenCL/m05300_a3-pure.cl index 0636c4d67..24aa07b9e 100644 --- a/OpenCL/m05300_a3-pure.cl +++ b/OpenCL/m05300_a3-pure.cl @@ -24,7 +24,7 @@ typedef struct ikepsk } ikepsk_t; -KERNEL_FQ void HC_ATTR_SEQ m05300_mxx (KERN_ATTR_VECTOR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05300_mxx (KERN_ATTR_VECTOR_ESALT (ikepsk_t)) { /** * modifier @@ -109,7 +109,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05300_mxx (KERN_ATTR_VECTOR_ESALT (ikepsk_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m05300_sxx (KERN_ATTR_VECTOR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05300_sxx (KERN_ATTR_VECTOR_ESALT (ikepsk_t)) { /** * modifier diff --git a/OpenCL/m05400_a0-optimized.cl b/OpenCL/m05400_a0-optimized.cl index 1fa298673..10941fe02 100644 --- a/OpenCL/m05400_a0-optimized.cl +++ b/OpenCL/m05400_a0-optimized.cl @@ -115,7 +115,7 @@ DECLSPEC void hmac_sha1_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_A sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m05400_m04 (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05400_m04 (KERN_ATTR_RULES_ESALT (ikepsk_t)) { /** * modifier @@ -291,15 +291,15 @@ KERNEL_FQ void HC_ATTR_SEQ m05400_m04 (KERN_ATTR_RULES_ESALT (ikepsk_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m05400_m08 (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05400_m08 (KERN_ATTR_RULES_ESALT (ikepsk_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m05400_m16 (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05400_m16 (KERN_ATTR_RULES_ESALT (ikepsk_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m05400_s04 (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05400_s04 (KERN_ATTR_RULES_ESALT (ikepsk_t)) { /** * modifier @@ -487,10 +487,10 @@ KERNEL_FQ void HC_ATTR_SEQ m05400_s04 (KERN_ATTR_RULES_ESALT (ikepsk_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m05400_s08 (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05400_s08 (KERN_ATTR_RULES_ESALT (ikepsk_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m05400_s16 (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05400_s16 (KERN_ATTR_RULES_ESALT (ikepsk_t)) { } diff --git a/OpenCL/m05400_a0-pure.cl b/OpenCL/m05400_a0-pure.cl index 7a5b2b24d..ab1a412f8 100644 --- a/OpenCL/m05400_a0-pure.cl +++ b/OpenCL/m05400_a0-pure.cl @@ -26,7 +26,7 @@ typedef struct ikepsk } ikepsk_t; -KERNEL_FQ void HC_ATTR_SEQ m05400_mxx (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05400_mxx (KERN_ATTR_RULES_ESALT (ikepsk_t)) { /** * modifier @@ -100,7 +100,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05400_mxx (KERN_ATTR_RULES_ESALT (ikepsk_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m05400_sxx (KERN_ATTR_RULES_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05400_sxx (KERN_ATTR_RULES_ESALT (ikepsk_t)) { /** * modifier diff --git a/OpenCL/m05400_a1-optimized.cl b/OpenCL/m05400_a1-optimized.cl index 0f733d808..a9bf97330 100644 --- a/OpenCL/m05400_a1-optimized.cl +++ b/OpenCL/m05400_a1-optimized.cl @@ -113,7 +113,7 @@ DECLSPEC void hmac_sha1_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_A sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m05400_m04 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05400_m04 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -357,15 +357,15 @@ KERNEL_FQ void HC_ATTR_SEQ m05400_m04 (KERN_ATTR_ESALT (ikepsk_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m05400_m08 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05400_m08 (KERN_ATTR_ESALT (ikepsk_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m05400_m16 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05400_m16 (KERN_ATTR_ESALT (ikepsk_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m05400_s04 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05400_s04 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -621,10 +621,10 @@ KERNEL_FQ void HC_ATTR_SEQ m05400_s04 (KERN_ATTR_ESALT (ikepsk_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m05400_s08 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05400_s08 (KERN_ATTR_ESALT (ikepsk_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m05400_s16 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05400_s16 (KERN_ATTR_ESALT (ikepsk_t)) { } diff --git a/OpenCL/m05400_a1-pure.cl b/OpenCL/m05400_a1-pure.cl index 4c41ff13f..bd55728f9 100644 --- a/OpenCL/m05400_a1-pure.cl +++ b/OpenCL/m05400_a1-pure.cl @@ -24,7 +24,7 @@ typedef struct ikepsk } ikepsk_t; -KERNEL_FQ void HC_ATTR_SEQ m05400_mxx (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05400_mxx (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -123,7 +123,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05400_mxx (KERN_ATTR_ESALT (ikepsk_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m05400_sxx (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05400_sxx (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier diff --git a/OpenCL/m05400_a3-optimized.cl b/OpenCL/m05400_a3-optimized.cl index be5ee8299..ae69521fb 100644 --- a/OpenCL/m05400_a3-optimized.cl +++ b/OpenCL/m05400_a3-optimized.cl @@ -413,7 +413,7 @@ DECLSPEC void m05400s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m05400_m04 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05400_m04 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -486,7 +486,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05400_m04 (KERN_ATTR_ESALT (ikepsk_t)) m05400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_msg_buf, s_nr_buf); } -KERNEL_FQ void HC_ATTR_SEQ m05400_m08 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05400_m08 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -559,7 +559,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05400_m08 (KERN_ATTR_ESALT (ikepsk_t)) m05400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_msg_buf, s_nr_buf); } -KERNEL_FQ void HC_ATTR_SEQ m05400_m16 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05400_m16 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -632,7 +632,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05400_m16 (KERN_ATTR_ESALT (ikepsk_t)) m05400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_msg_buf, s_nr_buf); } -KERNEL_FQ void HC_ATTR_SEQ m05400_s04 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05400_s04 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -705,7 +705,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05400_s04 (KERN_ATTR_ESALT (ikepsk_t)) m05400s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_msg_buf, s_nr_buf); } -KERNEL_FQ void HC_ATTR_SEQ m05400_s08 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05400_s08 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier @@ -778,7 +778,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05400_s08 (KERN_ATTR_ESALT (ikepsk_t)) m05400s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_msg_buf, s_nr_buf); } -KERNEL_FQ void HC_ATTR_SEQ m05400_s16 (KERN_ATTR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05400_s16 (KERN_ATTR_ESALT (ikepsk_t)) { /** * modifier diff --git a/OpenCL/m05400_a3-pure.cl b/OpenCL/m05400_a3-pure.cl index 76eb104b1..6f7719ca4 100644 --- a/OpenCL/m05400_a3-pure.cl +++ b/OpenCL/m05400_a3-pure.cl @@ -24,7 +24,7 @@ typedef struct ikepsk } ikepsk_t; -KERNEL_FQ void HC_ATTR_SEQ m05400_mxx (KERN_ATTR_VECTOR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05400_mxx (KERN_ATTR_VECTOR_ESALT (ikepsk_t)) { /** * modifier @@ -109,7 +109,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05400_mxx (KERN_ATTR_VECTOR_ESALT (ikepsk_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m05400_sxx (KERN_ATTR_VECTOR_ESALT (ikepsk_t)) +KERNEL_FQ KERNEL_FA void m05400_sxx (KERN_ATTR_VECTOR_ESALT (ikepsk_t)) { /** * modifier diff --git a/OpenCL/m05500_a0-optimized.cl b/OpenCL/m05500_a0-optimized.cl index d7dd89591..989e05c4f 100644 --- a/OpenCL/m05500_a0-optimized.cl +++ b/OpenCL/m05500_a0-optimized.cl @@ -502,7 +502,7 @@ DECLSPEC void transform_netntlmv1_key (const u32x w0, const u32x w1, PRIVATE_AS | ((k[7] & 0xff) << 24); } -KERNEL_FQ void HC_ATTR_SEQ m05500_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m05500_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -716,15 +716,15 @@ KERNEL_FQ void HC_ATTR_SEQ m05500_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m05500_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m05500_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m05500_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m05500_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m05500_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m05500_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -952,10 +952,10 @@ KERNEL_FQ void HC_ATTR_SEQ m05500_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m05500_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m05500_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m05500_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m05500_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m05500_a0-pure.cl b/OpenCL/m05500_a0-pure.cl index 35d27e95c..6b15c1414 100644 --- a/OpenCL/m05500_a0-pure.cl +++ b/OpenCL/m05500_a0-pure.cl @@ -502,7 +502,7 @@ DECLSPEC void transform_netntlmv1_key (const u32 w0, const u32 w1, PRIVATE_AS u3 | ((k[7] & 0xff) << 24); } -KERNEL_FQ void HC_ATTR_SEQ m05500_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m05500_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -635,7 +635,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05500_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m05500_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m05500_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m05500_a1-optimized.cl b/OpenCL/m05500_a1-optimized.cl index 8ad05199c..619827e06 100644 --- a/OpenCL/m05500_a1-optimized.cl +++ b/OpenCL/m05500_a1-optimized.cl @@ -500,7 +500,7 @@ DECLSPEC void transform_netntlmv1_key (const u32x w0, const u32x w1, PRIVATE_AS | ((k[7] & 0xff) << 24); } -KERNEL_FQ void HC_ATTR_SEQ m05500_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05500_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -767,15 +767,15 @@ KERNEL_FQ void HC_ATTR_SEQ m05500_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m05500_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05500_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m05500_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05500_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m05500_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05500_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -1061,10 +1061,10 @@ KERNEL_FQ void HC_ATTR_SEQ m05500_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m05500_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05500_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m05500_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05500_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m05500_a1-pure.cl b/OpenCL/m05500_a1-pure.cl index 8836cc07c..57fb3a40d 100644 --- a/OpenCL/m05500_a1-pure.cl +++ b/OpenCL/m05500_a1-pure.cl @@ -500,7 +500,7 @@ DECLSPEC void transform_netntlmv1_key (const u32 w0, const u32 w1, PRIVATE_AS u3 | ((k[7] & 0xff) << 24); } -KERNEL_FQ void HC_ATTR_SEQ m05500_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05500_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -631,7 +631,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05500_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m05500_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m05500_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m05500_a3-optimized.cl b/OpenCL/m05500_a3-optimized.cl index 095b98a2f..08a6bff51 100644 --- a/OpenCL/m05500_a3-optimized.cl +++ b/OpenCL/m05500_a3-optimized.cl @@ -827,7 +827,7 @@ DECLSPEC void m05500s (SHM_TYPE u32 (*s_SPtrans)[64], SHM_TYPE u32 (*s_skb)[64], } } -KERNEL_FQ void HC_ATTR_SEQ m05500_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m05500_m04 (KERN_ATTR_VECTOR ()) { /** * modifier @@ -910,7 +910,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05500_m04 (KERN_ATTR_VECTOR ()) m05500m (s_SPtrans, s_skb, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m05500_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m05500_m08 (KERN_ATTR_VECTOR ()) { /** * modifier @@ -993,7 +993,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05500_m08 (KERN_ATTR_VECTOR ()) m05500m (s_SPtrans, s_skb, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m05500_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m05500_m16 (KERN_ATTR_VECTOR ()) { /** * modifier @@ -1076,7 +1076,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05500_m16 (KERN_ATTR_VECTOR ()) m05500m (s_SPtrans, s_skb, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m05500_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m05500_s04 (KERN_ATTR_VECTOR ()) { /** * modifier @@ -1159,7 +1159,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05500_s04 (KERN_ATTR_VECTOR ()) m05500s (s_SPtrans, s_skb, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m05500_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m05500_s08 (KERN_ATTR_VECTOR ()) { /** * modifier @@ -1242,7 +1242,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05500_s08 (KERN_ATTR_VECTOR ()) m05500s (s_SPtrans, s_skb, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m05500_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m05500_s16 (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m05500_a3-pure.cl b/OpenCL/m05500_a3-pure.cl index 464573c8e..4306fc9d8 100644 --- a/OpenCL/m05500_a3-pure.cl +++ b/OpenCL/m05500_a3-pure.cl @@ -500,7 +500,7 @@ DECLSPEC void transform_netntlmv1_key (const u32x w0, const u32x w1, PRIVATE_AS | ((k[7] & 0xff) << 24); } -KERNEL_FQ void HC_ATTR_SEQ m05500_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m05500_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -658,7 +658,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05500_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m05500_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m05500_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m05600_a0-optimized.cl b/OpenCL/m05600_a0-optimized.cl index 25958c3a1..4c8408ea1 100644 --- a/OpenCL/m05600_a0-optimized.cl +++ b/OpenCL/m05600_a0-optimized.cl @@ -114,7 +114,7 @@ DECLSPEC void hmac_md5_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_AS md5_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m05600_m04 (KERN_ATTR_RULES_ESALT (netntlm_t)) +KERNEL_FQ KERNEL_FA void m05600_m04 (KERN_ATTR_RULES_ESALT (netntlm_t)) { /** * modifier @@ -345,15 +345,15 @@ KERNEL_FQ void HC_ATTR_SEQ m05600_m04 (KERN_ATTR_RULES_ESALT (netntlm_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m05600_m08 (KERN_ATTR_RULES_ESALT (netntlm_t)) +KERNEL_FQ KERNEL_FA void m05600_m08 (KERN_ATTR_RULES_ESALT (netntlm_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m05600_m16 (KERN_ATTR_RULES_ESALT (netntlm_t)) +KERNEL_FQ KERNEL_FA void m05600_m16 (KERN_ATTR_RULES_ESALT (netntlm_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m05600_s04 (KERN_ATTR_RULES_ESALT (netntlm_t)) +KERNEL_FQ KERNEL_FA void m05600_s04 (KERN_ATTR_RULES_ESALT (netntlm_t)) { /** * modifier @@ -596,10 +596,10 @@ KERNEL_FQ void HC_ATTR_SEQ m05600_s04 (KERN_ATTR_RULES_ESALT (netntlm_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m05600_s08 (KERN_ATTR_RULES_ESALT (netntlm_t)) +KERNEL_FQ KERNEL_FA void m05600_s08 (KERN_ATTR_RULES_ESALT (netntlm_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m05600_s16 (KERN_ATTR_RULES_ESALT (netntlm_t)) +KERNEL_FQ KERNEL_FA void m05600_s16 (KERN_ATTR_RULES_ESALT (netntlm_t)) { } diff --git a/OpenCL/m05600_a0-pure.cl b/OpenCL/m05600_a0-pure.cl index ebe418137..7f6affa61 100644 --- a/OpenCL/m05600_a0-pure.cl +++ b/OpenCL/m05600_a0-pure.cl @@ -29,7 +29,7 @@ typedef struct netntlm } netntlm_t; -KERNEL_FQ void HC_ATTR_SEQ m05600_mxx (KERN_ATTR_RULES_ESALT (netntlm_t)) +KERNEL_FQ KERNEL_FA void m05600_mxx (KERN_ATTR_RULES_ESALT (netntlm_t)) { /** * modifier @@ -128,7 +128,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05600_mxx (KERN_ATTR_RULES_ESALT (netntlm_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m05600_sxx (KERN_ATTR_RULES_ESALT (netntlm_t)) +KERNEL_FQ KERNEL_FA void m05600_sxx (KERN_ATTR_RULES_ESALT (netntlm_t)) { /** * modifier diff --git a/OpenCL/m05600_a1-optimized.cl b/OpenCL/m05600_a1-optimized.cl index 11318d25c..35939a0b9 100644 --- a/OpenCL/m05600_a1-optimized.cl +++ b/OpenCL/m05600_a1-optimized.cl @@ -112,7 +112,7 @@ DECLSPEC void hmac_md5_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_AS md5_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m05600_m04 (KERN_ATTR_ESALT (netntlm_t)) +KERNEL_FQ KERNEL_FA void m05600_m04 (KERN_ATTR_ESALT (netntlm_t)) { /** * modifier @@ -401,15 +401,15 @@ KERNEL_FQ void HC_ATTR_SEQ m05600_m04 (KERN_ATTR_ESALT (netntlm_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m05600_m08 (KERN_ATTR_ESALT (netntlm_t)) +KERNEL_FQ KERNEL_FA void m05600_m08 (KERN_ATTR_ESALT (netntlm_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m05600_m16 (KERN_ATTR_ESALT (netntlm_t)) +KERNEL_FQ KERNEL_FA void m05600_m16 (KERN_ATTR_ESALT (netntlm_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m05600_s04 (KERN_ATTR_ESALT (netntlm_t)) +KERNEL_FQ KERNEL_FA void m05600_s04 (KERN_ATTR_ESALT (netntlm_t)) { /** * modifier @@ -710,10 +710,10 @@ KERNEL_FQ void HC_ATTR_SEQ m05600_s04 (KERN_ATTR_ESALT (netntlm_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m05600_s08 (KERN_ATTR_ESALT (netntlm_t)) +KERNEL_FQ KERNEL_FA void m05600_s08 (KERN_ATTR_ESALT (netntlm_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m05600_s16 (KERN_ATTR_ESALT (netntlm_t)) +KERNEL_FQ KERNEL_FA void m05600_s16 (KERN_ATTR_ESALT (netntlm_t)) { } diff --git a/OpenCL/m05600_a1-pure.cl b/OpenCL/m05600_a1-pure.cl index 234fed876..8844eb855 100644 --- a/OpenCL/m05600_a1-pure.cl +++ b/OpenCL/m05600_a1-pure.cl @@ -27,7 +27,7 @@ typedef struct netntlm } netntlm_t; -KERNEL_FQ void HC_ATTR_SEQ m05600_mxx (KERN_ATTR_ESALT (netntlm_t)) +KERNEL_FQ KERNEL_FA void m05600_mxx (KERN_ATTR_ESALT (netntlm_t)) { /** * modifier @@ -124,7 +124,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05600_mxx (KERN_ATTR_ESALT (netntlm_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m05600_sxx (KERN_ATTR_ESALT (netntlm_t)) +KERNEL_FQ KERNEL_FA void m05600_sxx (KERN_ATTR_ESALT (netntlm_t)) { /** * modifier diff --git a/OpenCL/m05600_a3-optimized.cl b/OpenCL/m05600_a3-optimized.cl index 265f984dd..76ab35328 100644 --- a/OpenCL/m05600_a3-optimized.cl +++ b/OpenCL/m05600_a3-optimized.cl @@ -530,7 +530,7 @@ DECLSPEC void m05600s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m05600_m04 (KERN_ATTR_ESALT (netntlm_t)) +KERNEL_FQ KERNEL_FA void m05600_m04 (KERN_ATTR_ESALT (netntlm_t)) { /** * modifier @@ -603,7 +603,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05600_m04 (KERN_ATTR_ESALT (netntlm_t)) m05600m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_userdomain_buf, s_chall_buf); } -KERNEL_FQ void HC_ATTR_SEQ m05600_m08 (KERN_ATTR_ESALT (netntlm_t)) +KERNEL_FQ KERNEL_FA void m05600_m08 (KERN_ATTR_ESALT (netntlm_t)) { /** * modifier @@ -676,7 +676,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05600_m08 (KERN_ATTR_ESALT (netntlm_t)) m05600m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_userdomain_buf, s_chall_buf); } -KERNEL_FQ void HC_ATTR_SEQ m05600_m16 (KERN_ATTR_ESALT (netntlm_t)) +KERNEL_FQ KERNEL_FA void m05600_m16 (KERN_ATTR_ESALT (netntlm_t)) { /** * modifier @@ -749,7 +749,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05600_m16 (KERN_ATTR_ESALT (netntlm_t)) m05600m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_userdomain_buf, s_chall_buf); } -KERNEL_FQ void HC_ATTR_SEQ m05600_s04 (KERN_ATTR_ESALT (netntlm_t)) +KERNEL_FQ KERNEL_FA void m05600_s04 (KERN_ATTR_ESALT (netntlm_t)) { /** * modifier @@ -822,7 +822,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05600_s04 (KERN_ATTR_ESALT (netntlm_t)) m05600s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_userdomain_buf, s_chall_buf); } -KERNEL_FQ void HC_ATTR_SEQ m05600_s08 (KERN_ATTR_ESALT (netntlm_t)) +KERNEL_FQ KERNEL_FA void m05600_s08 (KERN_ATTR_ESALT (netntlm_t)) { /** * modifier @@ -895,7 +895,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05600_s08 (KERN_ATTR_ESALT (netntlm_t)) m05600s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_userdomain_buf, s_chall_buf); } -KERNEL_FQ void HC_ATTR_SEQ m05600_s16 (KERN_ATTR_ESALT (netntlm_t)) +KERNEL_FQ KERNEL_FA void m05600_s16 (KERN_ATTR_ESALT (netntlm_t)) { /** * modifier diff --git a/OpenCL/m05600_a3-pure.cl b/OpenCL/m05600_a3-pure.cl index 68472ea8f..d4e0937fe 100644 --- a/OpenCL/m05600_a3-pure.cl +++ b/OpenCL/m05600_a3-pure.cl @@ -27,7 +27,7 @@ typedef struct netntlm } netntlm_t; -KERNEL_FQ void HC_ATTR_SEQ m05600_mxx (KERN_ATTR_VECTOR_ESALT (netntlm_t)) +KERNEL_FQ KERNEL_FA void m05600_mxx (KERN_ATTR_VECTOR_ESALT (netntlm_t)) { /** * modifier @@ -137,7 +137,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05600_mxx (KERN_ATTR_VECTOR_ESALT (netntlm_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m05600_sxx (KERN_ATTR_VECTOR_ESALT (netntlm_t)) +KERNEL_FQ KERNEL_FA void m05600_sxx (KERN_ATTR_VECTOR_ESALT (netntlm_t)) { /** * modifier diff --git a/OpenCL/m05800-optimized.cl b/OpenCL/m05800-optimized.cl index e64fe685c..37bbcf883 100644 --- a/OpenCL/m05800-optimized.cl +++ b/OpenCL/m05800-optimized.cl @@ -315,7 +315,7 @@ DECLSPEC void append_salt (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u3 } } -KERNEL_FQ void HC_ATTR_SEQ m05800_init (KERN_ATTR_TMPS (androidpin_tmp_t)) +KERNEL_FQ KERNEL_FA void m05800_init (KERN_ATTR_TMPS (androidpin_tmp_t)) { /** * base @@ -404,7 +404,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05800_init (KERN_ATTR_TMPS (androidpin_tmp_t)) tmps[gid].digest_buf[4] = digest[4]; } -KERNEL_FQ void HC_ATTR_SEQ m05800_loop (KERN_ATTR_TMPS (androidpin_tmp_t)) +KERNEL_FQ KERNEL_FA void m05800_loop (KERN_ATTR_TMPS (androidpin_tmp_t)) { /** * base @@ -523,7 +523,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05800_loop (KERN_ATTR_TMPS (androidpin_tmp_t)) tmps[gid].digest_buf[4] = digest[4]; } -KERNEL_FQ void HC_ATTR_SEQ m05800_comp (KERN_ATTR_TMPS (androidpin_tmp_t)) +KERNEL_FQ KERNEL_FA void m05800_comp (KERN_ATTR_TMPS (androidpin_tmp_t)) { /** * modifier diff --git a/OpenCL/m05800-pure.cl b/OpenCL/m05800-pure.cl index c4498517c..aa8672d09 100644 --- a/OpenCL/m05800-pure.cl +++ b/OpenCL/m05800-pure.cl @@ -188,7 +188,7 @@ CONSTANT_VK u32a c_pc_len[1024] = 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 }; -KERNEL_FQ void HC_ATTR_SEQ m05800_init (KERN_ATTR_TMPS (androidpin_tmp_t)) +KERNEL_FQ KERNEL_FA void m05800_init (KERN_ATTR_TMPS (androidpin_tmp_t)) { const u64 gid = get_global_id (0); @@ -218,7 +218,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05800_init (KERN_ATTR_TMPS (androidpin_tmp_t)) tmps[gid].digest_buf[4] = ctx.h[4]; } -KERNEL_FQ void HC_ATTR_SEQ m05800_loop (KERN_ATTR_TMPS (androidpin_tmp_t)) +KERNEL_FQ KERNEL_FA void m05800_loop (KERN_ATTR_TMPS (androidpin_tmp_t)) { /** * base @@ -317,7 +317,7 @@ KERNEL_FQ void HC_ATTR_SEQ m05800_loop (KERN_ATTR_TMPS (androidpin_tmp_t)) tmps[gid].digest_buf[4] = digest[4]; } -KERNEL_FQ void HC_ATTR_SEQ m05800_comp (KERN_ATTR_TMPS (androidpin_tmp_t)) +KERNEL_FQ KERNEL_FA void m05800_comp (KERN_ATTR_TMPS (androidpin_tmp_t)) { /** * modifier diff --git a/OpenCL/m06000_a0-optimized.cl b/OpenCL/m06000_a0-optimized.cl index 78a1e41cb..23cbb34f5 100644 --- a/OpenCL/m06000_a0-optimized.cl +++ b/OpenCL/m06000_a0-optimized.cl @@ -21,7 +21,7 @@ DECLSPEC void ripemd160_transform_transport_vector (PRIVATE_AS const u32x *w, PR ripemd160_transform_vector (w + 0, w + 4, w + 8, w + 12, dgst); } -KERNEL_FQ void HC_ATTR_SEQ m06000_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m06000_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -103,15 +103,15 @@ KERNEL_FQ void HC_ATTR_SEQ m06000_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m06000_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m06000_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m06000_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m06000_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m06000_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m06000_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -205,10 +205,10 @@ KERNEL_FQ void HC_ATTR_SEQ m06000_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m06000_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m06000_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m06000_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m06000_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m06000_a0-pure.cl b/OpenCL/m06000_a0-pure.cl index 3773fbd51..7a0f62353 100644 --- a/OpenCL/m06000_a0-pure.cl +++ b/OpenCL/m06000_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_ripemd160.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m06000_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m06000_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06000_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m06000_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m06000_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m06000_a1-optimized.cl b/OpenCL/m06000_a1-optimized.cl index 99188ab33..7af74d9d1 100644 --- a/OpenCL/m06000_a1-optimized.cl +++ b/OpenCL/m06000_a1-optimized.cl @@ -19,7 +19,7 @@ DECLSPEC void ripemd160_transform_transport_vector (PRIVATE_AS const u32x *w, PR ripemd160_transform_vector (w + 0, w + 4, w + 8, w + 12, dgst); } -KERNEL_FQ void HC_ATTR_SEQ m06000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06000_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -159,15 +159,15 @@ KERNEL_FQ void HC_ATTR_SEQ m06000_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m06000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06000_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m06000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06000_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m06000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06000_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -319,10 +319,10 @@ KERNEL_FQ void HC_ATTR_SEQ m06000_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m06000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06000_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m06000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06000_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m06000_a1-pure.cl b/OpenCL/m06000_a1-pure.cl index c9460c706..87e5fafb6 100644 --- a/OpenCL/m06000_a1-pure.cl +++ b/OpenCL/m06000_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_ripemd160.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m06000_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06000_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06000_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m06000_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06000_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m06000_a3-optimized.cl b/OpenCL/m06000_a3-optimized.cl index 6d4069a7f..57c65263e 100644 --- a/OpenCL/m06000_a3-optimized.cl +++ b/OpenCL/m06000_a3-optimized.cl @@ -141,7 +141,7 @@ DECLSPEC void m06000s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m06000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06000_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -190,7 +190,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06000_m04 (KERN_ATTR_BASIC ()) m06000m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m06000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06000_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -239,7 +239,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06000_m08 (KERN_ATTR_BASIC ()) m06000m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m06000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06000_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -288,7 +288,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06000_m16 (KERN_ATTR_BASIC ()) m06000m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m06000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06000_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -337,7 +337,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06000_s04 (KERN_ATTR_BASIC ()) m06000s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m06000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06000_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -386,7 +386,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06000_s08 (KERN_ATTR_BASIC ()) m06000s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m06000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06000_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m06000_a3-pure.cl b/OpenCL/m06000_a3-pure.cl index 1b037ff9a..d6a23ea12 100644 --- a/OpenCL/m06000_a3-pure.cl +++ b/OpenCL/m06000_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_ripemd160.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m06000_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m06000_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06000_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m06000_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m06000_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m06050_a0-pure.cl b/OpenCL/m06050_a0-pure.cl index 0fbf0112a..1dff54588 100644 --- a/OpenCL/m06050_a0-pure.cl +++ b/OpenCL/m06050_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_ripemd160.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m06050_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m06050_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06050_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m06050_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m06050_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m06050_a1-pure.cl b/OpenCL/m06050_a1-pure.cl index 816eeba2e..609d9fce8 100644 --- a/OpenCL/m06050_a1-pure.cl +++ b/OpenCL/m06050_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_ripemd160.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m06050_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06050_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -92,7 +92,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06050_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m06050_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06050_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m06050_a3-pure.cl b/OpenCL/m06050_a3-pure.cl index 54e335a2a..cee483653 100644 --- a/OpenCL/m06050_a3-pure.cl +++ b/OpenCL/m06050_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_ripemd160.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m06050_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m06050_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -78,7 +78,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06050_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m06050_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m06050_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m06060_a0-pure.cl b/OpenCL/m06060_a0-pure.cl index 1052ac5f4..be76268b6 100644 --- a/OpenCL/m06060_a0-pure.cl +++ b/OpenCL/m06060_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_ripemd160.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m06060_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m06060_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06060_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m06060_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m06060_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m06060_a1-pure.cl b/OpenCL/m06060_a1-pure.cl index a93d77eb1..85bc6766f 100644 --- a/OpenCL/m06060_a1-pure.cl +++ b/OpenCL/m06060_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_ripemd160.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m06060_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06060_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -94,7 +94,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06060_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m06060_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06060_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m06060_a3-pure.cl b/OpenCL/m06060_a3-pure.cl index aa9f73995..724590c2f 100644 --- a/OpenCL/m06060_a3-pure.cl +++ b/OpenCL/m06060_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_ripemd160.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m06060_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m06060_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06060_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m06060_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m06060_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m06100_a0-optimized.cl b/OpenCL/m06100_a0-optimized.cl index ceb470442..b99efe822 100644 --- a/OpenCL/m06100_a0-optimized.cl +++ b/OpenCL/m06100_a0-optimized.cl @@ -21,7 +21,7 @@ DECLSPEC void whirlpool_transform_transport_vector (PRIVATE_AS const u32x *w, PR whirlpool_transform_vector (w + 0, w + 4, w + 8, w + 12, digest, s_MT0, s_MT1, s_MT2, s_MT3, s_MT4, s_MT5, s_MT6, s_MT7); } -KERNEL_FQ void HC_ATTR_SEQ m06100_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m06100_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -156,15 +156,15 @@ KERNEL_FQ void HC_ATTR_SEQ m06100_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m06100_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m06100_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m06100_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m06100_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m06100_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m06100_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -311,10 +311,10 @@ KERNEL_FQ void HC_ATTR_SEQ m06100_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m06100_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m06100_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m06100_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m06100_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m06100_a0-pure.cl b/OpenCL/m06100_a0-pure.cl index 63f4e5e71..b8de4be0a 100644 --- a/OpenCL/m06100_a0-pure.cl +++ b/OpenCL/m06100_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_whirlpool.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m06100_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m06100_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -103,7 +103,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06100_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m06100_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m06100_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m06100_a1-optimized.cl b/OpenCL/m06100_a1-optimized.cl index 9eea1caa5..15218383f 100644 --- a/OpenCL/m06100_a1-optimized.cl +++ b/OpenCL/m06100_a1-optimized.cl @@ -19,7 +19,7 @@ DECLSPEC void whirlpool_transform_transport_vector (PRIVATE_AS const u32x *w, PR whirlpool_transform_vector (w + 0, w + 4, w + 8, w + 12, digest, s_MT0, s_MT1, s_MT2, s_MT3, s_MT4, s_MT5, s_MT6, s_MT7); } -KERNEL_FQ void HC_ATTR_SEQ m06100_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06100_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -212,15 +212,15 @@ KERNEL_FQ void HC_ATTR_SEQ m06100_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m06100_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06100_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m06100_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06100_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m06100_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06100_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -425,10 +425,10 @@ KERNEL_FQ void HC_ATTR_SEQ m06100_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m06100_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06100_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m06100_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06100_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m06100_a1-pure.cl b/OpenCL/m06100_a1-pure.cl index 8cace5623..b108ff19d 100644 --- a/OpenCL/m06100_a1-pure.cl +++ b/OpenCL/m06100_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_whirlpool.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m06100_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06100_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -99,7 +99,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06100_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m06100_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06100_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m06100_a3-optimized.cl b/OpenCL/m06100_a3-optimized.cl index 668e22714..cd3e84704 100644 --- a/OpenCL/m06100_a3-optimized.cl +++ b/OpenCL/m06100_a3-optimized.cl @@ -163,7 +163,7 @@ DECLSPEC void m06100s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m06100_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06100_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -258,7 +258,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06100_m04 (KERN_ATTR_BASIC ()) m06100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_MT0, s_MT1, s_MT2, s_MT3, s_MT4, s_MT5, s_MT6, s_MT7); } -KERNEL_FQ void HC_ATTR_SEQ m06100_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06100_m08 (KERN_ATTR_BASIC ()) { /** * modifier @@ -353,11 +353,11 @@ KERNEL_FQ void HC_ATTR_SEQ m06100_m08 (KERN_ATTR_BASIC ()) m06100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_MT0, s_MT1, s_MT2, s_MT3, s_MT4, s_MT5, s_MT6, s_MT7); } -KERNEL_FQ void HC_ATTR_SEQ m06100_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06100_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m06100_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06100_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -452,7 +452,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06100_s04 (KERN_ATTR_BASIC ()) m06100s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_MT0, s_MT1, s_MT2, s_MT3, s_MT4, s_MT5, s_MT6, s_MT7); } -KERNEL_FQ void HC_ATTR_SEQ m06100_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06100_s08 (KERN_ATTR_BASIC ()) { /** * modifier @@ -547,6 +547,6 @@ KERNEL_FQ void HC_ATTR_SEQ m06100_s08 (KERN_ATTR_BASIC ()) m06100s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_MT0, s_MT1, s_MT2, s_MT3, s_MT4, s_MT5, s_MT6, s_MT7); } -KERNEL_FQ void HC_ATTR_SEQ m06100_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06100_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m06100_a3-pure.cl b/OpenCL/m06100_a3-pure.cl index 1b8b092ac..24d84465c 100644 --- a/OpenCL/m06100_a3-pure.cl +++ b/OpenCL/m06100_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_whirlpool.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m06100_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m06100_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -112,7 +112,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06100_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m06100_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m06100_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m06211-pure.cl b/OpenCL/m06211-pure.cl index 9b4351e7b..15b74abe5 100644 --- a/OpenCL/m06211-pure.cl +++ b/OpenCL/m06211-pure.cl @@ -84,7 +84,7 @@ DECLSPEC void hmac_ripemd160_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PR ripemd160_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m06211_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ KERNEL_FA void m06211_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -214,7 +214,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06211_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m06211_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ KERNEL_FA void m06211_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { const u64 gid = get_global_id (0); @@ -299,7 +299,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06211_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m06211_comp (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ KERNEL_FA void m06211_comp (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m06212-pure.cl b/OpenCL/m06212-pure.cl index 9ed498233..7885a0662 100644 --- a/OpenCL/m06212-pure.cl +++ b/OpenCL/m06212-pure.cl @@ -84,7 +84,7 @@ DECLSPEC void hmac_ripemd160_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PR ripemd160_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m06212_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ KERNEL_FA void m06212_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -214,7 +214,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06212_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m06212_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ KERNEL_FA void m06212_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { const u64 gid = get_global_id (0); @@ -299,7 +299,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06212_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m06212_comp (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ KERNEL_FA void m06212_comp (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m06213-pure.cl b/OpenCL/m06213-pure.cl index 8c5435e63..45172d8bd 100644 --- a/OpenCL/m06213-pure.cl +++ b/OpenCL/m06213-pure.cl @@ -84,7 +84,7 @@ DECLSPEC void hmac_ripemd160_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PR ripemd160_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m06213_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ KERNEL_FA void m06213_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -214,7 +214,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06213_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m06213_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ KERNEL_FA void m06213_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { const u64 gid = get_global_id (0); @@ -299,7 +299,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06213_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m06213_comp (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ KERNEL_FA void m06213_comp (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m06221-pure.cl b/OpenCL/m06221-pure.cl index ae27ea541..e1689b874 100644 --- a/OpenCL/m06221-pure.cl +++ b/OpenCL/m06221-pure.cl @@ -106,7 +106,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void HC_ATTR_SEQ m06221_init (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) +KERNEL_FQ KERNEL_FA void m06221_init (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -268,7 +268,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06221_init (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m06221_loop (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) +KERNEL_FQ KERNEL_FA void m06221_loop (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) { const u64 gid = get_global_id (0); @@ -394,7 +394,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06221_loop (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m06221_comp (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) +KERNEL_FQ KERNEL_FA void m06221_comp (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m06222-pure.cl b/OpenCL/m06222-pure.cl index 112620f16..f6ab92797 100644 --- a/OpenCL/m06222-pure.cl +++ b/OpenCL/m06222-pure.cl @@ -106,7 +106,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void HC_ATTR_SEQ m06222_init (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) +KERNEL_FQ KERNEL_FA void m06222_init (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -268,7 +268,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06222_init (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m06222_loop (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) +KERNEL_FQ KERNEL_FA void m06222_loop (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) { const u64 gid = get_global_id (0); @@ -394,7 +394,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06222_loop (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m06222_comp (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) +KERNEL_FQ KERNEL_FA void m06222_comp (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m06223-pure.cl b/OpenCL/m06223-pure.cl index 36795e9fb..93caffef4 100644 --- a/OpenCL/m06223-pure.cl +++ b/OpenCL/m06223-pure.cl @@ -106,7 +106,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void HC_ATTR_SEQ m06223_init (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) +KERNEL_FQ KERNEL_FA void m06223_init (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -268,7 +268,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06223_init (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m06223_loop (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) +KERNEL_FQ KERNEL_FA void m06223_loop (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) { const u64 gid = get_global_id (0); @@ -394,7 +394,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06223_loop (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m06223_comp (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) +KERNEL_FQ KERNEL_FA void m06223_comp (KERN_ATTR_TMPS_ESALT (tc64_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m06231-pure.cl b/OpenCL/m06231-pure.cl index 34a9c20f5..ff6eeef70 100644 --- a/OpenCL/m06231-pure.cl +++ b/OpenCL/m06231-pure.cl @@ -144,7 +144,7 @@ DECLSPEC void hmac_whirlpool_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PR whirlpool_transform_vector (w0, w1, w2, w3, digest, s_MT0, s_MT1, s_MT2, s_MT3, s_MT4, s_MT5, s_MT6, s_MT7); } -KERNEL_FQ void HC_ATTR_SEQ m06231_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ KERNEL_FA void m06231_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -360,7 +360,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06231_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m06231_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ KERNEL_FA void m06231_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { /** * Whirlpool shared @@ -566,7 +566,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06231_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m06231_comp (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ KERNEL_FA void m06231_comp (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m06232-pure.cl b/OpenCL/m06232-pure.cl index 0108383c8..237906b4e 100644 --- a/OpenCL/m06232-pure.cl +++ b/OpenCL/m06232-pure.cl @@ -144,7 +144,7 @@ DECLSPEC void hmac_whirlpool_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PR whirlpool_transform_vector (w0, w1, w2, w3, digest, s_MT0, s_MT1, s_MT2, s_MT3, s_MT4, s_MT5, s_MT6, s_MT7); } -KERNEL_FQ void HC_ATTR_SEQ m06232_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ KERNEL_FA void m06232_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -360,7 +360,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06232_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m06232_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ KERNEL_FA void m06232_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { /** * Whirlpool shared @@ -566,7 +566,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06232_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m06232_comp (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ KERNEL_FA void m06232_comp (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m06233-pure.cl b/OpenCL/m06233-pure.cl index 45b767d7d..4d030b294 100644 --- a/OpenCL/m06233-pure.cl +++ b/OpenCL/m06233-pure.cl @@ -144,7 +144,7 @@ DECLSPEC void hmac_whirlpool_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PR whirlpool_transform_vector (w0, w1, w2, w3, digest, s_MT0, s_MT1, s_MT2, s_MT3, s_MT4, s_MT5, s_MT6, s_MT7); } -KERNEL_FQ void HC_ATTR_SEQ m06233_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ KERNEL_FA void m06233_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -360,7 +360,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06233_init (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m06233_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ KERNEL_FA void m06233_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { /** * Whirlpool shared @@ -566,7 +566,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06233_loop (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m06233_comp (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) +KERNEL_FQ KERNEL_FA void m06233_comp (KERN_ATTR_TMPS_ESALT (tc_tmp_t, tc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m06300-optimized.cl b/OpenCL/m06300-optimized.cl index 830ddc4e6..39865927c 100644 --- a/OpenCL/m06300-optimized.cl +++ b/OpenCL/m06300-optimized.cl @@ -573,7 +573,7 @@ DECLSPEC void append_1st (PRIVATE_AS u32 *block0, PRIVATE_AS u32 *block1, PRIVAT } } -KERNEL_FQ void HC_ATTR_SEQ m06300_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m06300_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * base @@ -731,7 +731,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06300_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) tmps[gid].digest_buf[3] = digest[3]; } -KERNEL_FQ void HC_ATTR_SEQ m06300_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m06300_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * base @@ -919,7 +919,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06300_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) tmps[gid].digest_buf[3] = digest[3]; } -KERNEL_FQ void HC_ATTR_SEQ m06300_comp (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m06300_comp (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * modifier diff --git a/OpenCL/m06300-pure.cl b/OpenCL/m06300-pure.cl index 41f194683..c0f0465fb 100644 --- a/OpenCL/m06300-pure.cl +++ b/OpenCL/m06300-pure.cl @@ -22,7 +22,7 @@ typedef struct md5crypt_tmp } md5crypt_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m06300_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m06300_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * base @@ -122,7 +122,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06300_init (KERN_ATTR_TMPS (md5crypt_tmp_t)) tmps[gid].digest_buf[3] = md5_ctx.h[3]; } -KERNEL_FQ void HC_ATTR_SEQ m06300_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m06300_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * base @@ -217,7 +217,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06300_loop (KERN_ATTR_TMPS (md5crypt_tmp_t)) tmps[gid].digest_buf[3] = digest[3]; } -KERNEL_FQ void HC_ATTR_SEQ m06300_comp (KERN_ATTR_TMPS (md5crypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m06300_comp (KERN_ATTR_TMPS (md5crypt_tmp_t)) { /** * modifier diff --git a/OpenCL/m06400-pure.cl b/OpenCL/m06400-pure.cl index eb2d1fb72..8185a5406 100644 --- a/OpenCL/m06400-pure.cl +++ b/OpenCL/m06400-pure.cl @@ -69,7 +69,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m06400_init (KERN_ATTR_TMPS (sha256aix_tmp_t)) +KERNEL_FQ KERNEL_FA void m06400_init (KERN_ATTR_TMPS (sha256aix_tmp_t)) { /** * base @@ -153,7 +153,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06400_init (KERN_ATTR_TMPS (sha256aix_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m06400_loop (KERN_ATTR_TMPS (sha256aix_tmp_t)) +KERNEL_FQ KERNEL_FA void m06400_loop (KERN_ATTR_TMPS (sha256aix_tmp_t)) { const u64 gid = get_global_id (0); @@ -259,7 +259,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06400_loop (KERN_ATTR_TMPS (sha256aix_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m06400_comp (KERN_ATTR_TMPS (sha256aix_tmp_t)) +KERNEL_FQ KERNEL_FA void m06400_comp (KERN_ATTR_TMPS (sha256aix_tmp_t)) { /** * base diff --git a/OpenCL/m06500-pure.cl b/OpenCL/m06500-pure.cl index 3808e9fe7..f3c8f678b 100644 --- a/OpenCL/m06500-pure.cl +++ b/OpenCL/m06500-pure.cl @@ -85,7 +85,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void HC_ATTR_SEQ m06500_init (KERN_ATTR_TMPS (sha512aix_tmp_t)) +KERNEL_FQ KERNEL_FA void m06500_init (KERN_ATTR_TMPS (sha512aix_tmp_t)) { /** * base @@ -184,7 +184,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06500_init (KERN_ATTR_TMPS (sha512aix_tmp_t)) tmps[gid].out[7] = sha512_hmac_ctx.opad.h[7]; } -KERNEL_FQ void HC_ATTR_SEQ m06500_loop (KERN_ATTR_TMPS (sha512aix_tmp_t)) +KERNEL_FQ KERNEL_FA void m06500_loop (KERN_ATTR_TMPS (sha512aix_tmp_t)) { const u64 gid = get_global_id (0); @@ -307,7 +307,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06500_loop (KERN_ATTR_TMPS (sha512aix_tmp_t)) unpack64v (tmps, out, gid, 7, out[7]); } -KERNEL_FQ void HC_ATTR_SEQ m06500_comp (KERN_ATTR_TMPS (sha512aix_tmp_t)) +KERNEL_FQ KERNEL_FA void m06500_comp (KERN_ATTR_TMPS (sha512aix_tmp_t)) { /** * base diff --git a/OpenCL/m06600-pure.cl b/OpenCL/m06600-pure.cl index f12316aba..2d67a6e24 100644 --- a/OpenCL/m06600-pure.cl +++ b/OpenCL/m06600-pure.cl @@ -64,7 +64,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m06600_init (KERN_ATTR_TMPS (agilekey_tmp_t)) +KERNEL_FQ KERNEL_FA void m06600_init (KERN_ATTR_TMPS (agilekey_tmp_t)) { /** * base @@ -144,7 +144,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06600_init (KERN_ATTR_TMPS (agilekey_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m06600_loop (KERN_ATTR_TMPS (agilekey_tmp_t)) +KERNEL_FQ KERNEL_FA void m06600_loop (KERN_ATTR_TMPS (agilekey_tmp_t)) { const u64 gid = get_global_id (0); @@ -229,7 +229,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06600_loop (KERN_ATTR_TMPS (agilekey_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m06600_comp (KERN_ATTR_TMPS (agilekey_tmp_t)) +KERNEL_FQ KERNEL_FA void m06600_comp (KERN_ATTR_TMPS (agilekey_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m06700-pure.cl b/OpenCL/m06700-pure.cl index a7994d2b9..3bc502cef 100644 --- a/OpenCL/m06700-pure.cl +++ b/OpenCL/m06700-pure.cl @@ -63,7 +63,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m06700_init (KERN_ATTR_TMPS (sha1aix_tmp_t)) +KERNEL_FQ KERNEL_FA void m06700_init (KERN_ATTR_TMPS (sha1aix_tmp_t)) { /** * base @@ -135,7 +135,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06700_init (KERN_ATTR_TMPS (sha1aix_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m06700_loop (KERN_ATTR_TMPS (sha1aix_tmp_t)) +KERNEL_FQ KERNEL_FA void m06700_loop (KERN_ATTR_TMPS (sha1aix_tmp_t)) { const u64 gid = get_global_id (0); @@ -220,7 +220,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06700_loop (KERN_ATTR_TMPS (sha1aix_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m06700_comp (KERN_ATTR_TMPS (sha1aix_tmp_t)) +KERNEL_FQ KERNEL_FA void m06700_comp (KERN_ATTR_TMPS (sha1aix_tmp_t)) { /** * base diff --git a/OpenCL/m06800-pure.cl b/OpenCL/m06800-pure.cl index afa24cf47..dd1145a79 100644 --- a/OpenCL/m06800-pure.cl +++ b/OpenCL/m06800-pure.cl @@ -75,7 +75,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m06800_init (KERN_ATTR_TMPS_ESALT (lastpass_tmp_t, lastpass_t)) +KERNEL_FQ KERNEL_FA void m06800_init (KERN_ATTR_TMPS_ESALT (lastpass_tmp_t, lastpass_t)) { /** * base @@ -159,7 +159,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06800_init (KERN_ATTR_TMPS_ESALT (lastpass_tmp_t, la } } -KERNEL_FQ void HC_ATTR_SEQ m06800_loop (KERN_ATTR_TMPS_ESALT (lastpass_tmp_t, lastpass_t)) +KERNEL_FQ KERNEL_FA void m06800_loop (KERN_ATTR_TMPS_ESALT (lastpass_tmp_t, lastpass_t)) { const u64 gid = get_global_id (0); @@ -265,7 +265,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06800_loop (KERN_ATTR_TMPS_ESALT (lastpass_tmp_t, la } } -KERNEL_FQ void HC_ATTR_SEQ m06800_comp (KERN_ATTR_TMPS_ESALT (lastpass_tmp_t, lastpass_t)) +KERNEL_FQ KERNEL_FA void m06800_comp (KERN_ATTR_TMPS_ESALT (lastpass_tmp_t, lastpass_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m06900_a0-optimized.cl b/OpenCL/m06900_a0-optimized.cl index 23a831384..f9784431c 100644 --- a/OpenCL/m06900_a0-optimized.cl +++ b/OpenCL/m06900_a0-optimized.cl @@ -698,7 +698,7 @@ CONSTANT_VK u32a c_tables[4][256] = R (k, h, s, 6, t); \ } -KERNEL_FQ void HC_ATTR_SEQ m06900_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m06900_m04 (KERN_ATTR_RULES ()) { /** * base @@ -906,15 +906,15 @@ KERNEL_FQ void HC_ATTR_SEQ m06900_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m06900_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m06900_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m06900_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m06900_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m06900_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m06900_s04 (KERN_ATTR_RULES ()) { /** * base @@ -1138,10 +1138,10 @@ KERNEL_FQ void HC_ATTR_SEQ m06900_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m06900_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m06900_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m06900_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m06900_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m06900_a1-optimized.cl b/OpenCL/m06900_a1-optimized.cl index a11165b08..e42c2a6c3 100644 --- a/OpenCL/m06900_a1-optimized.cl +++ b/OpenCL/m06900_a1-optimized.cl @@ -696,7 +696,7 @@ CONSTANT_VK u32a c_tables[4][256] = R (k, h, s, 6, t); \ } -KERNEL_FQ void HC_ATTR_SEQ m06900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06900_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -958,15 +958,15 @@ KERNEL_FQ void HC_ATTR_SEQ m06900_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m06900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06900_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m06900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06900_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m06900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06900_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1240,10 +1240,10 @@ KERNEL_FQ void HC_ATTR_SEQ m06900_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m06900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06900_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m06900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06900_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m06900_a3-optimized.cl b/OpenCL/m06900_a3-optimized.cl index a6d8bd40b..d71302d55 100644 --- a/OpenCL/m06900_a3-optimized.cl +++ b/OpenCL/m06900_a3-optimized.cl @@ -1050,7 +1050,7 @@ DECLSPEC void m06900s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m06900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06900_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -1119,7 +1119,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06900_m04 (KERN_ATTR_BASIC ()) m06900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_tables); } -KERNEL_FQ void HC_ATTR_SEQ m06900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06900_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -1188,11 +1188,11 @@ KERNEL_FQ void HC_ATTR_SEQ m06900_m08 (KERN_ATTR_BASIC ()) m06900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_tables); } -KERNEL_FQ void HC_ATTR_SEQ m06900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06900_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m06900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06900_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1261,7 +1261,7 @@ KERNEL_FQ void HC_ATTR_SEQ m06900_s04 (KERN_ATTR_BASIC ()) m06900s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_tables); } -KERNEL_FQ void HC_ATTR_SEQ m06900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06900_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1330,6 +1330,6 @@ KERNEL_FQ void HC_ATTR_SEQ m06900_s08 (KERN_ATTR_BASIC ()) m06900s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_tables); } -KERNEL_FQ void HC_ATTR_SEQ m06900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m06900_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m07000_a0-optimized.cl b/OpenCL/m07000_a0-optimized.cl index 8f17f8b82..7e0b71b17 100644 --- a/OpenCL/m07000_a0-optimized.cl +++ b/OpenCL/m07000_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m07000_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07000_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -270,15 +270,15 @@ KERNEL_FQ void HC_ATTR_SEQ m07000_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m07000_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07000_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07000_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07000_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07000_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07000_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -553,10 +553,10 @@ KERNEL_FQ void HC_ATTR_SEQ m07000_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m07000_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07000_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07000_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07000_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m07000_a0-pure.cl b/OpenCL/m07000_a0-pure.cl index 9452785d1..938205612 100644 --- a/OpenCL/m07000_a0-pure.cl +++ b/OpenCL/m07000_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m07000_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07000_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -92,7 +92,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07000_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m07000_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07000_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m07000_a1-optimized.cl b/OpenCL/m07000_a1-optimized.cl index bb72c01a0..914761dd6 100644 --- a/OpenCL/m07000_a1-optimized.cl +++ b/OpenCL/m07000_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m07000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07000_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -328,15 +328,15 @@ KERNEL_FQ void HC_ATTR_SEQ m07000_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m07000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07000_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07000_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07000_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -671,10 +671,10 @@ KERNEL_FQ void HC_ATTR_SEQ m07000_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m07000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07000_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07000_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m07000_a1-pure.cl b/OpenCL/m07000_a1-pure.cl index 50ce56e29..434aaa8cf 100644 --- a/OpenCL/m07000_a1-pure.cl +++ b/OpenCL/m07000_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m07000_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07000_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -86,7 +86,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07000_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m07000_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07000_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m07000_a3-optimized.cl b/OpenCL/m07000_a3-optimized.cl index 3d5478366..6a5e9bf86 100644 --- a/OpenCL/m07000_a3-optimized.cl +++ b/OpenCL/m07000_a3-optimized.cl @@ -563,7 +563,7 @@ DECLSPEC void m07000s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m07000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07000_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -616,7 +616,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07000_m04 (KERN_ATTR_BASIC ()) m07000m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m07000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07000_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -669,7 +669,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07000_m08 (KERN_ATTR_BASIC ()) m07000m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m07000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07000_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -722,7 +722,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07000_m16 (KERN_ATTR_BASIC ()) m07000m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m07000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07000_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -775,7 +775,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07000_s04 (KERN_ATTR_BASIC ()) m07000s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m07000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07000_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -828,7 +828,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07000_s08 (KERN_ATTR_BASIC ()) m07000s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m07000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07000_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m07000_a3-pure.cl b/OpenCL/m07000_a3-pure.cl index 08b6a9691..01982d278 100644 --- a/OpenCL/m07000_a3-pure.cl +++ b/OpenCL/m07000_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m07000_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m07000_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -103,7 +103,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07000_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m07000_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m07000_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m07100-pure.cl b/OpenCL/m07100-pure.cl index 12809b0e1..e8add2df6 100644 --- a/OpenCL/m07100-pure.cl +++ b/OpenCL/m07100-pure.cl @@ -91,7 +91,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void HC_ATTR_SEQ m07100_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, pbkdf2_sha512_t)) +KERNEL_FQ KERNEL_FA void m07100_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, pbkdf2_sha512_t)) { /** * base @@ -195,7 +195,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07100_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m07100_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, pbkdf2_sha512_t)) +KERNEL_FQ KERNEL_FA void m07100_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, pbkdf2_sha512_t)) { const u64 gid = get_global_id (0); @@ -321,7 +321,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07100_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m07100_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, pbkdf2_sha512_t)) +KERNEL_FQ KERNEL_FA void m07100_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, pbkdf2_sha512_t)) { /** * base diff --git a/OpenCL/m07300_a0-optimized.cl b/OpenCL/m07300_a0-optimized.cl index 8f27d7daf..5f6fe0475 100644 --- a/OpenCL/m07300_a0-optimized.cl +++ b/OpenCL/m07300_a0-optimized.cl @@ -112,7 +112,7 @@ DECLSPEC void hmac_sha1_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_A sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m07300_m04 (KERN_ATTR_RULES_ESALT (rakp_t)) +KERNEL_FQ KERNEL_FA void m07300_m04 (KERN_ATTR_RULES_ESALT (rakp_t)) { /** * modifier @@ -240,15 +240,15 @@ KERNEL_FQ void HC_ATTR_SEQ m07300_m04 (KERN_ATTR_RULES_ESALT (rakp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m07300_m08 (KERN_ATTR_RULES_ESALT (rakp_t)) +KERNEL_FQ KERNEL_FA void m07300_m08 (KERN_ATTR_RULES_ESALT (rakp_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m07300_m16 (KERN_ATTR_RULES_ESALT (rakp_t)) +KERNEL_FQ KERNEL_FA void m07300_m16 (KERN_ATTR_RULES_ESALT (rakp_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m07300_s04 (KERN_ATTR_RULES_ESALT (rakp_t)) +KERNEL_FQ KERNEL_FA void m07300_s04 (KERN_ATTR_RULES_ESALT (rakp_t)) { /** * modifier @@ -388,10 +388,10 @@ KERNEL_FQ void HC_ATTR_SEQ m07300_s04 (KERN_ATTR_RULES_ESALT (rakp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m07300_s08 (KERN_ATTR_RULES_ESALT (rakp_t)) +KERNEL_FQ KERNEL_FA void m07300_s08 (KERN_ATTR_RULES_ESALT (rakp_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m07300_s16 (KERN_ATTR_RULES_ESALT (rakp_t)) +KERNEL_FQ KERNEL_FA void m07300_s16 (KERN_ATTR_RULES_ESALT (rakp_t)) { } diff --git a/OpenCL/m07300_a0-pure.cl b/OpenCL/m07300_a0-pure.cl index ba91d436c..4aa9fbf4c 100644 --- a/OpenCL/m07300_a0-pure.cl +++ b/OpenCL/m07300_a0-pure.cl @@ -23,7 +23,7 @@ typedef struct rakp } rakp_t; -KERNEL_FQ void HC_ATTR_SEQ m07300_mxx (KERN_ATTR_RULES_ESALT (rakp_t)) +KERNEL_FQ KERNEL_FA void m07300_mxx (KERN_ATTR_RULES_ESALT (rakp_t)) { /** * modifier @@ -67,7 +67,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07300_mxx (KERN_ATTR_RULES_ESALT (rakp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m07300_sxx (KERN_ATTR_RULES_ESALT (rakp_t)) +KERNEL_FQ KERNEL_FA void m07300_sxx (KERN_ATTR_RULES_ESALT (rakp_t)) { /** * modifier diff --git a/OpenCL/m07300_a1-optimized.cl b/OpenCL/m07300_a1-optimized.cl index 89fd5dce9..fad8c8382 100644 --- a/OpenCL/m07300_a1-optimized.cl +++ b/OpenCL/m07300_a1-optimized.cl @@ -110,7 +110,7 @@ DECLSPEC void hmac_sha1_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_A sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m07300_m04 (KERN_ATTR_ESALT (rakp_t)) +KERNEL_FQ KERNEL_FA void m07300_m04 (KERN_ATTR_ESALT (rakp_t)) { /** * modifier @@ -306,15 +306,15 @@ KERNEL_FQ void HC_ATTR_SEQ m07300_m04 (KERN_ATTR_ESALT (rakp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m07300_m08 (KERN_ATTR_ESALT (rakp_t)) +KERNEL_FQ KERNEL_FA void m07300_m08 (KERN_ATTR_ESALT (rakp_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m07300_m16 (KERN_ATTR_ESALT (rakp_t)) +KERNEL_FQ KERNEL_FA void m07300_m16 (KERN_ATTR_ESALT (rakp_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m07300_s04 (KERN_ATTR_ESALT (rakp_t)) +KERNEL_FQ KERNEL_FA void m07300_s04 (KERN_ATTR_ESALT (rakp_t)) { /** * modifier @@ -522,10 +522,10 @@ KERNEL_FQ void HC_ATTR_SEQ m07300_s04 (KERN_ATTR_ESALT (rakp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m07300_s08 (KERN_ATTR_ESALT (rakp_t)) +KERNEL_FQ KERNEL_FA void m07300_s08 (KERN_ATTR_ESALT (rakp_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m07300_s16 (KERN_ATTR_ESALT (rakp_t)) +KERNEL_FQ KERNEL_FA void m07300_s16 (KERN_ATTR_ESALT (rakp_t)) { } diff --git a/OpenCL/m07300_a1-pure.cl b/OpenCL/m07300_a1-pure.cl index 7da3ef9fd..08bfefa03 100644 --- a/OpenCL/m07300_a1-pure.cl +++ b/OpenCL/m07300_a1-pure.cl @@ -21,7 +21,7 @@ typedef struct rakp } rakp_t; -KERNEL_FQ void HC_ATTR_SEQ m07300_mxx (KERN_ATTR_ESALT (rakp_t)) +KERNEL_FQ KERNEL_FA void m07300_mxx (KERN_ATTR_ESALT (rakp_t)) { /** * modifier @@ -90,7 +90,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07300_mxx (KERN_ATTR_ESALT (rakp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m07300_sxx (KERN_ATTR_ESALT (rakp_t)) +KERNEL_FQ KERNEL_FA void m07300_sxx (KERN_ATTR_ESALT (rakp_t)) { /** * modifier diff --git a/OpenCL/m07300_a3-optimized.cl b/OpenCL/m07300_a3-optimized.cl index 61ae658bd..322f3c06b 100644 --- a/OpenCL/m07300_a3-optimized.cl +++ b/OpenCL/m07300_a3-optimized.cl @@ -336,7 +336,7 @@ DECLSPEC void m07300s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m07300_m04 (KERN_ATTR_ESALT (rakp_t)) +KERNEL_FQ KERNEL_FA void m07300_m04 (KERN_ATTR_ESALT (rakp_t)) { /** * modifier @@ -402,7 +402,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07300_m04 (KERN_ATTR_ESALT (rakp_t)) m07300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_esalt_buf); } -KERNEL_FQ void HC_ATTR_SEQ m07300_m08 (KERN_ATTR_ESALT (rakp_t)) +KERNEL_FQ KERNEL_FA void m07300_m08 (KERN_ATTR_ESALT (rakp_t)) { /** * modifiers are taken from args @@ -468,7 +468,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07300_m08 (KERN_ATTR_ESALT (rakp_t)) m07300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_esalt_buf); } -KERNEL_FQ void HC_ATTR_SEQ m07300_m16 (KERN_ATTR_ESALT (rakp_t)) +KERNEL_FQ KERNEL_FA void m07300_m16 (KERN_ATTR_ESALT (rakp_t)) { /** * modifiers are taken from args @@ -534,7 +534,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07300_m16 (KERN_ATTR_ESALT (rakp_t)) m07300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_esalt_buf); } -KERNEL_FQ void HC_ATTR_SEQ m07300_s04 (KERN_ATTR_ESALT (rakp_t)) +KERNEL_FQ KERNEL_FA void m07300_s04 (KERN_ATTR_ESALT (rakp_t)) { /** * modifier @@ -600,7 +600,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07300_s04 (KERN_ATTR_ESALT (rakp_t)) m07300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_esalt_buf); } -KERNEL_FQ void HC_ATTR_SEQ m07300_s08 (KERN_ATTR_ESALT (rakp_t)) +KERNEL_FQ KERNEL_FA void m07300_s08 (KERN_ATTR_ESALT (rakp_t)) { /** * modifier @@ -666,7 +666,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07300_s08 (KERN_ATTR_ESALT (rakp_t)) m07300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, s_esalt_buf); } -KERNEL_FQ void HC_ATTR_SEQ m07300_s16 (KERN_ATTR_ESALT (rakp_t)) +KERNEL_FQ KERNEL_FA void m07300_s16 (KERN_ATTR_ESALT (rakp_t)) { /** * modifier diff --git a/OpenCL/m07300_a3-pure.cl b/OpenCL/m07300_a3-pure.cl index febe3d5dc..4b4a9abf9 100644 --- a/OpenCL/m07300_a3-pure.cl +++ b/OpenCL/m07300_a3-pure.cl @@ -21,7 +21,7 @@ typedef struct rakp } rakp_t; -KERNEL_FQ void HC_ATTR_SEQ m07300_mxx (KERN_ATTR_VECTOR_ESALT (rakp_t)) +KERNEL_FQ KERNEL_FA void m07300_mxx (KERN_ATTR_VECTOR_ESALT (rakp_t)) { /** * modifier @@ -76,7 +76,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07300_mxx (KERN_ATTR_VECTOR_ESALT (rakp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m07300_sxx (KERN_ATTR_VECTOR_ESALT (rakp_t)) +KERNEL_FQ KERNEL_FA void m07300_sxx (KERN_ATTR_VECTOR_ESALT (rakp_t)) { /** * modifier diff --git a/OpenCL/m07350_a0-optimized.cl b/OpenCL/m07350_a0-optimized.cl index 65603445d..d82add460 100644 --- a/OpenCL/m07350_a0-optimized.cl +++ b/OpenCL/m07350_a0-optimized.cl @@ -74,7 +74,7 @@ DECLSPEC void hmac_md5_pad (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_AS md5_transform_vector (w0, w1, w2, w3, opad); } -KERNEL_FQ void HC_ATTR_SEQ m07350_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07350_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -221,15 +221,15 @@ KERNEL_FQ void HC_ATTR_SEQ m07350_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m07350_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07350_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07350_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07350_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07350_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07350_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -388,10 +388,10 @@ KERNEL_FQ void HC_ATTR_SEQ m07350_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m07350_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07350_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07350_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07350_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m07350_a0-pure.cl b/OpenCL/m07350_a0-pure.cl index e3ae9af31..0efd0e429 100644 --- a/OpenCL/m07350_a0-pure.cl +++ b/OpenCL/m07350_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m07350_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07350_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07350_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m07350_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07350_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m07350_a1-optimized.cl b/OpenCL/m07350_a1-optimized.cl index a04605542..3b272e6bb 100644 --- a/OpenCL/m07350_a1-optimized.cl +++ b/OpenCL/m07350_a1-optimized.cl @@ -101,7 +101,7 @@ DECLSPEC void hmac_md5_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_AS } */ -KERNEL_FQ void HC_ATTR_SEQ m07350_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07350_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -358,15 +358,15 @@ KERNEL_FQ void HC_ATTR_SEQ m07350_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m07350_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07350_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07350_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07350_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07350_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07350_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -635,10 +635,10 @@ KERNEL_FQ void HC_ATTR_SEQ m07350_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m07350_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07350_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07350_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07350_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m07350_a1-pure.cl b/OpenCL/m07350_a1-pure.cl index 5eb139744..11ba923f5 100644 --- a/OpenCL/m07350_a1-pure.cl +++ b/OpenCL/m07350_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m07350_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07350_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -92,7 +92,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07350_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m07350_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07350_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m07350_a3-optimized.cl b/OpenCL/m07350_a3-optimized.cl index f6341671c..72728c563 100644 --- a/OpenCL/m07350_a3-optimized.cl +++ b/OpenCL/m07350_a3-optimized.cl @@ -365,7 +365,7 @@ DECLSPEC void m07350s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m07350_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07350_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -414,7 +414,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07350_m04 (KERN_ATTR_BASIC ()) m07350m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m07350_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07350_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -463,7 +463,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07350_m08 (KERN_ATTR_BASIC ()) m07350m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m07350_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07350_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -512,7 +512,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07350_m16 (KERN_ATTR_BASIC ()) m07350m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m07350_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07350_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -561,7 +561,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07350_s04 (KERN_ATTR_BASIC ()) m07350s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m07350_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07350_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -610,7 +610,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07350_s08 (KERN_ATTR_BASIC ()) m07350s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m07350_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07350_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m07350_a3-pure.cl b/OpenCL/m07350_a3-pure.cl index 2826384a0..d2702b485 100644 --- a/OpenCL/m07350_a3-pure.cl +++ b/OpenCL/m07350_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m07350_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m07350_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -78,7 +78,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07350_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m07350_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m07350_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m07400-optimized.cl b/OpenCL/m07400-optimized.cl index aa2e3e9ed..1a3ea413c 100644 --- a/OpenCL/m07400-optimized.cl +++ b/OpenCL/m07400-optimized.cl @@ -1178,7 +1178,7 @@ DECLSPEC u32 memcat24 (PRIVATE_AS u32 *block, const u32 offset, PRIVATE_AS const return offset + append_len; } -KERNEL_FQ void HC_ATTR_SEQ m07400_init (KERN_ATTR_TMPS (sha256crypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m07400_init (KERN_ATTR_TMPS (sha256crypt_tmp_t)) { /** * base @@ -1526,7 +1526,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07400_init (KERN_ATTR_TMPS (sha256crypt_tmp_t)) tmps[gid].s_bytes[4] = s_bytes[4]; } -KERNEL_FQ void HC_ATTR_SEQ m07400_loop (KERN_ATTR_TMPS (sha256crypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m07400_loop (KERN_ATTR_TMPS (sha256crypt_tmp_t)) { /** * base @@ -1737,7 +1737,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07400_loop (KERN_ATTR_TMPS (sha256crypt_tmp_t)) tmps[gid].alt_result[7] = alt_result[7]; } -KERNEL_FQ void HC_ATTR_SEQ m07400_comp (KERN_ATTR_TMPS (sha256crypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m07400_comp (KERN_ATTR_TMPS (sha256crypt_tmp_t)) { /** * base diff --git a/OpenCL/m07400-pure.cl b/OpenCL/m07400-pure.cl index 1190b1583..e42b07c8d 100644 --- a/OpenCL/m07400-pure.cl +++ b/OpenCL/m07400-pure.cl @@ -24,7 +24,7 @@ typedef struct sha256crypt_tmp } sha256crypt_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m07400_init (KERN_ATTR_TMPS (sha256crypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m07400_init (KERN_ATTR_TMPS (sha256crypt_tmp_t)) { /** * base @@ -261,7 +261,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07400_init (KERN_ATTR_TMPS (sha256crypt_tmp_t)) for (int i = 0; i < 64; i++) tmps[gid].s_bytes[i] = s_final[i]; } -KERNEL_FQ void HC_ATTR_SEQ m07400_loop (KERN_ATTR_TMPS (sha256crypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m07400_loop (KERN_ATTR_TMPS (sha256crypt_tmp_t)) { /** * base @@ -345,7 +345,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07400_loop (KERN_ATTR_TMPS (sha256crypt_tmp_t)) tmps[gid].alt_result[7] = alt_result[7]; } -KERNEL_FQ void HC_ATTR_SEQ m07400_comp (KERN_ATTR_TMPS (sha256crypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m07400_comp (KERN_ATTR_TMPS (sha256crypt_tmp_t)) { /** * base diff --git a/OpenCL/m07500_a0-optimized.cl b/OpenCL/m07500_a0-optimized.cl index 349e221df..659b36c25 100644 --- a/OpenCL/m07500_a0-optimized.cl +++ b/OpenCL/m07500_a0-optimized.cl @@ -273,7 +273,7 @@ DECLSPEC void kerb_prepare (PRIVATE_AS const u32 *w0, PRIVATE_AS const u32 *w1, hmac_md5_run (w0_t, w1_t, w2_t, w3_t, ipad, opad, digest); } -KERNEL_FQ void HC_ATTR_SEQ m07500_m04 (KERN_ATTR_RULES_ESALT (krb5pa_t)) +KERNEL_FQ KERNEL_FA void m07500_m04 (KERN_ATTR_RULES_ESALT (krb5pa_t)) { /** * modifier @@ -369,15 +369,15 @@ KERNEL_FQ void HC_ATTR_SEQ m07500_m04 (KERN_ATTR_RULES_ESALT (krb5pa_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m07500_m08 (KERN_ATTR_RULES_ESALT (krb5pa_t)) +KERNEL_FQ KERNEL_FA void m07500_m08 (KERN_ATTR_RULES_ESALT (krb5pa_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m07500_m16 (KERN_ATTR_RULES_ESALT (krb5pa_t)) +KERNEL_FQ KERNEL_FA void m07500_m16 (KERN_ATTR_RULES_ESALT (krb5pa_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m07500_s04 (KERN_ATTR_RULES_ESALT (krb5pa_t)) +KERNEL_FQ KERNEL_FA void m07500_s04 (KERN_ATTR_RULES_ESALT (krb5pa_t)) { /** * modifier @@ -473,10 +473,10 @@ KERNEL_FQ void HC_ATTR_SEQ m07500_s04 (KERN_ATTR_RULES_ESALT (krb5pa_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m07500_s08 (KERN_ATTR_RULES_ESALT (krb5pa_t)) +KERNEL_FQ KERNEL_FA void m07500_s08 (KERN_ATTR_RULES_ESALT (krb5pa_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m07500_s16 (KERN_ATTR_RULES_ESALT (krb5pa_t)) +KERNEL_FQ KERNEL_FA void m07500_s16 (KERN_ATTR_RULES_ESALT (krb5pa_t)) { } diff --git a/OpenCL/m07500_a0-pure.cl b/OpenCL/m07500_a0-pure.cl index d31b69935..da773d3cc 100644 --- a/OpenCL/m07500_a0-pure.cl +++ b/OpenCL/m07500_a0-pure.cl @@ -157,7 +157,7 @@ DECLSPEC void kerb_prepare (PRIVATE_AS const u32 *K, PRIVATE_AS const u32 *check digest[3] = ctx.opad.h[3]; } -KERNEL_FQ void HC_ATTR_SEQ m07500_mxx (KERN_ATTR_RULES_ESALT (krb5pa_t)) +KERNEL_FQ KERNEL_FA void m07500_mxx (KERN_ATTR_RULES_ESALT (krb5pa_t)) { /** * modifier @@ -226,7 +226,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07500_mxx (KERN_ATTR_RULES_ESALT (krb5pa_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m07500_sxx (KERN_ATTR_RULES_ESALT (krb5pa_t)) +KERNEL_FQ KERNEL_FA void m07500_sxx (KERN_ATTR_RULES_ESALT (krb5pa_t)) { /** * modifier diff --git a/OpenCL/m07500_a1-optimized.cl b/OpenCL/m07500_a1-optimized.cl index 0918d2f2b..29d350099 100644 --- a/OpenCL/m07500_a1-optimized.cl +++ b/OpenCL/m07500_a1-optimized.cl @@ -271,7 +271,7 @@ DECLSPEC void kerb_prepare (PRIVATE_AS const u32 *w0, PRIVATE_AS const u32 *w1, hmac_md5_run (w0_t, w1_t, w2_t, w3_t, ipad, opad, digest); } -KERNEL_FQ void HC_ATTR_SEQ m07500_m04 (KERN_ATTR_ESALT (krb5pa_t)) +KERNEL_FQ KERNEL_FA void m07500_m04 (KERN_ATTR_ESALT (krb5pa_t)) { /** * modifier @@ -417,15 +417,15 @@ KERNEL_FQ void HC_ATTR_SEQ m07500_m04 (KERN_ATTR_ESALT (krb5pa_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m07500_m08 (KERN_ATTR_ESALT (krb5pa_t)) +KERNEL_FQ KERNEL_FA void m07500_m08 (KERN_ATTR_ESALT (krb5pa_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m07500_m16 (KERN_ATTR_ESALT (krb5pa_t)) +KERNEL_FQ KERNEL_FA void m07500_m16 (KERN_ATTR_ESALT (krb5pa_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m07500_s04 (KERN_ATTR_ESALT (krb5pa_t)) +KERNEL_FQ KERNEL_FA void m07500_s04 (KERN_ATTR_ESALT (krb5pa_t)) { /** * modifier @@ -571,10 +571,10 @@ KERNEL_FQ void HC_ATTR_SEQ m07500_s04 (KERN_ATTR_ESALT (krb5pa_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m07500_s08 (KERN_ATTR_ESALT (krb5pa_t)) +KERNEL_FQ KERNEL_FA void m07500_s08 (KERN_ATTR_ESALT (krb5pa_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m07500_s16 (KERN_ATTR_ESALT (krb5pa_t)) +KERNEL_FQ KERNEL_FA void m07500_s16 (KERN_ATTR_ESALT (krb5pa_t)) { } diff --git a/OpenCL/m07500_a1-pure.cl b/OpenCL/m07500_a1-pure.cl index 21c092249..6d51d3928 100644 --- a/OpenCL/m07500_a1-pure.cl +++ b/OpenCL/m07500_a1-pure.cl @@ -155,7 +155,7 @@ DECLSPEC void kerb_prepare (PRIVATE_AS const u32 *K, PRIVATE_AS const u32 *check digest[3] = ctx.opad.h[3]; } -KERNEL_FQ void HC_ATTR_SEQ m07500_mxx (KERN_ATTR_ESALT (krb5pa_t)) +KERNEL_FQ KERNEL_FA void m07500_mxx (KERN_ATTR_ESALT (krb5pa_t)) { /** * modifier @@ -222,7 +222,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07500_mxx (KERN_ATTR_ESALT (krb5pa_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m07500_sxx (KERN_ATTR_ESALT (krb5pa_t)) +KERNEL_FQ KERNEL_FA void m07500_sxx (KERN_ATTR_ESALT (krb5pa_t)) { /** * modifier diff --git a/OpenCL/m07500_a3-optimized.cl b/OpenCL/m07500_a3-optimized.cl index b379bad6b..392dca645 100644 --- a/OpenCL/m07500_a3-optimized.cl +++ b/OpenCL/m07500_a3-optimized.cl @@ -358,7 +358,7 @@ DECLSPEC void m07500 (LOCAL_AS u32 *S, PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, P } } -KERNEL_FQ void HC_ATTR_SEQ m07500_m04 (KERN_ATTR_ESALT (krb5pa_t)) +KERNEL_FQ KERNEL_FA void m07500_m04 (KERN_ATTR_ESALT (krb5pa_t)) { /** * base @@ -409,7 +409,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07500_m04 (KERN_ATTR_ESALT (krb5pa_t)) m07500 (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m07500_m08 (KERN_ATTR_ESALT (krb5pa_t)) +KERNEL_FQ KERNEL_FA void m07500_m08 (KERN_ATTR_ESALT (krb5pa_t)) { /** * base @@ -460,11 +460,11 @@ KERNEL_FQ void HC_ATTR_SEQ m07500_m08 (KERN_ATTR_ESALT (krb5pa_t)) m07500 (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m07500_m16 (KERN_ATTR_ESALT (krb5pa_t)) +KERNEL_FQ KERNEL_FA void m07500_m16 (KERN_ATTR_ESALT (krb5pa_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m07500_s04 (KERN_ATTR_ESALT (krb5pa_t)) +KERNEL_FQ KERNEL_FA void m07500_s04 (KERN_ATTR_ESALT (krb5pa_t)) { /** * base @@ -515,7 +515,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07500_s04 (KERN_ATTR_ESALT (krb5pa_t)) m07500 (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m07500_s08 (KERN_ATTR_ESALT (krb5pa_t)) +KERNEL_FQ KERNEL_FA void m07500_s08 (KERN_ATTR_ESALT (krb5pa_t)) { /** * base @@ -566,6 +566,6 @@ KERNEL_FQ void HC_ATTR_SEQ m07500_s08 (KERN_ATTR_ESALT (krb5pa_t)) m07500 (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m07500_s16 (KERN_ATTR_ESALT (krb5pa_t)) +KERNEL_FQ KERNEL_FA void m07500_s16 (KERN_ATTR_ESALT (krb5pa_t)) { } diff --git a/OpenCL/m07500_a3-pure.cl b/OpenCL/m07500_a3-pure.cl index 66a05f744..cc16e2805 100644 --- a/OpenCL/m07500_a3-pure.cl +++ b/OpenCL/m07500_a3-pure.cl @@ -155,7 +155,7 @@ DECLSPEC void kerb_prepare (PRIVATE_AS const u32 *K, PRIVATE_AS const u32 *check digest[3] = ctx.opad.h[3]; } -KERNEL_FQ void HC_ATTR_SEQ m07500_mxx (KERN_ATTR_VECTOR_ESALT (krb5pa_t)) +KERNEL_FQ KERNEL_FA void m07500_mxx (KERN_ATTR_VECTOR_ESALT (krb5pa_t)) { /** * modifier @@ -247,7 +247,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07500_mxx (KERN_ATTR_VECTOR_ESALT (krb5pa_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m07500_sxx (KERN_ATTR_VECTOR_ESALT (krb5pa_t)) +KERNEL_FQ KERNEL_FA void m07500_sxx (KERN_ATTR_VECTOR_ESALT (krb5pa_t)) { /** * modifier diff --git a/OpenCL/m07700_a0-optimized.cl b/OpenCL/m07700_a0-optimized.cl index b77b61ff3..7f46eed87 100644 --- a/OpenCL/m07700_a0-optimized.cl +++ b/OpenCL/m07700_a0-optimized.cl @@ -155,7 +155,7 @@ DECLSPEC u32 walld0rf_magic (PRIVATE_AS const u32 *w0, const u32 pw_len, PRIVATE return sum20; } -KERNEL_FQ void HC_ATTR_SEQ m07700_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07700_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -311,15 +311,15 @@ KERNEL_FQ void HC_ATTR_SEQ m07700_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m07700_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07700_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07700_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07700_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07700_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07700_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -487,10 +487,10 @@ KERNEL_FQ void HC_ATTR_SEQ m07700_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m07700_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07700_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07700_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07700_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m07700_a1-optimized.cl b/OpenCL/m07700_a1-optimized.cl index d8261c789..7ce7198d3 100644 --- a/OpenCL/m07700_a1-optimized.cl +++ b/OpenCL/m07700_a1-optimized.cl @@ -146,7 +146,7 @@ DECLSPEC u32 walld0rf_magic (PRIVATE_AS const u32 *w0, const u32 pw_len, PRIVATE return sum20; } -KERNEL_FQ void HC_ATTR_SEQ m07700_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07700_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -345,15 +345,15 @@ KERNEL_FQ void HC_ATTR_SEQ m07700_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m07700_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07700_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07700_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07700_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07700_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07700_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -564,10 +564,10 @@ KERNEL_FQ void HC_ATTR_SEQ m07700_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m07700_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07700_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07700_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07700_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m07700_a3-optimized.cl b/OpenCL/m07700_a3-optimized.cl index 374df50d2..7505431c4 100644 --- a/OpenCL/m07700_a3-optimized.cl +++ b/OpenCL/m07700_a3-optimized.cl @@ -393,7 +393,7 @@ DECLSPEC void m07700s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m07700_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07700_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -446,7 +446,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07700_m04 (KERN_ATTR_BASIC ()) m07700m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m07700_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07700_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -499,11 +499,11 @@ KERNEL_FQ void HC_ATTR_SEQ m07700_m08 (KERN_ATTR_BASIC ()) m07700m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m07700_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07700_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07700_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07700_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -556,7 +556,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07700_s04 (KERN_ATTR_BASIC ()) m07700s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m07700_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07700_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -609,6 +609,6 @@ KERNEL_FQ void HC_ATTR_SEQ m07700_s08 (KERN_ATTR_BASIC ()) m07700s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m07700_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07700_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m07701_a0-optimized.cl b/OpenCL/m07701_a0-optimized.cl index 1ca796ce0..bf7a9f6c1 100644 --- a/OpenCL/m07701_a0-optimized.cl +++ b/OpenCL/m07701_a0-optimized.cl @@ -148,7 +148,7 @@ DECLSPEC u32 walld0rf_magic (PRIVATE_AS const u32 *w0, const u32 pw_len, PRIVATE return sum20; } -KERNEL_FQ void HC_ATTR_SEQ m07701_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07701_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -304,15 +304,15 @@ KERNEL_FQ void HC_ATTR_SEQ m07701_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m07701_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07701_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07701_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07701_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07701_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07701_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -480,10 +480,10 @@ KERNEL_FQ void HC_ATTR_SEQ m07701_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m07701_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07701_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07701_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07701_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m07701_a1-optimized.cl b/OpenCL/m07701_a1-optimized.cl index a909609a1..97e9a50a4 100644 --- a/OpenCL/m07701_a1-optimized.cl +++ b/OpenCL/m07701_a1-optimized.cl @@ -146,7 +146,7 @@ DECLSPEC u32 walld0rf_magic (PRIVATE_AS const u32 *w0, const u32 pw_len, PRIVATE return sum20; } -KERNEL_FQ void HC_ATTR_SEQ m07701_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07701_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -345,15 +345,15 @@ KERNEL_FQ void HC_ATTR_SEQ m07701_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m07701_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07701_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07701_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07701_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07701_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07701_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -564,10 +564,10 @@ KERNEL_FQ void HC_ATTR_SEQ m07701_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m07701_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07701_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07701_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07701_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m07701_a3-optimized.cl b/OpenCL/m07701_a3-optimized.cl index 7eca44110..830f4af87 100644 --- a/OpenCL/m07701_a3-optimized.cl +++ b/OpenCL/m07701_a3-optimized.cl @@ -393,7 +393,7 @@ DECLSPEC void m07701s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m07701_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07701_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -446,7 +446,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07701_m04 (KERN_ATTR_BASIC ()) m07701m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m07701_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07701_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -499,11 +499,11 @@ KERNEL_FQ void HC_ATTR_SEQ m07701_m08 (KERN_ATTR_BASIC ()) m07701m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m07701_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07701_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07701_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07701_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -556,7 +556,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07701_s04 (KERN_ATTR_BASIC ()) m07701s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m07701_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07701_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -609,6 +609,6 @@ KERNEL_FQ void HC_ATTR_SEQ m07701_s08 (KERN_ATTR_BASIC ()) m07701s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m07701_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07701_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m07800_a0-optimized.cl b/OpenCL/m07800_a0-optimized.cl index e67f774f0..7bf4bd7a1 100644 --- a/OpenCL/m07800_a0-optimized.cl +++ b/OpenCL/m07800_a0-optimized.cl @@ -54,7 +54,7 @@ DECLSPEC void SETSHIFTEDINT (PRIVATE_AS u32 *a, const int n, const u32 v) a[d + 1] = l32_from_64_S (tmp); } -KERNEL_FQ void HC_ATTR_SEQ m07800_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07800_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -298,15 +298,15 @@ KERNEL_FQ void HC_ATTR_SEQ m07800_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m07800_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07800_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07800_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07800_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07800_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07800_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -562,10 +562,10 @@ KERNEL_FQ void HC_ATTR_SEQ m07800_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m07800_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07800_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07800_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07800_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m07800_a1-optimized.cl b/OpenCL/m07800_a1-optimized.cl index 765835f07..0c72423f7 100644 --- a/OpenCL/m07800_a1-optimized.cl +++ b/OpenCL/m07800_a1-optimized.cl @@ -52,7 +52,7 @@ DECLSPEC void SETSHIFTEDINT (PRIVATE_AS u32 *a, const int n, const u32 v) a[d + 1] = l32_from_64_S (tmp); } -KERNEL_FQ void HC_ATTR_SEQ m07800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07800_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -356,15 +356,15 @@ KERNEL_FQ void HC_ATTR_SEQ m07800_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m07800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07800_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07800_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07800_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -680,10 +680,10 @@ KERNEL_FQ void HC_ATTR_SEQ m07800_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m07800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07800_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07800_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m07800_a3-optimized.cl b/OpenCL/m07800_a3-optimized.cl index ce7135caf..5b442f6c6 100644 --- a/OpenCL/m07800_a3-optimized.cl +++ b/OpenCL/m07800_a3-optimized.cl @@ -498,7 +498,7 @@ DECLSPEC void m07800s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m07800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07800_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -553,7 +553,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07800_m04 (KERN_ATTR_BASIC ()) m07800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m07800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07800_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -608,11 +608,11 @@ KERNEL_FQ void HC_ATTR_SEQ m07800_m08 (KERN_ATTR_BASIC ()) m07800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m07800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07800_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07800_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -667,7 +667,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07800_s04 (KERN_ATTR_BASIC ()) m07800s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m07800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07800_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -722,6 +722,6 @@ KERNEL_FQ void HC_ATTR_SEQ m07800_s08 (KERN_ATTR_BASIC ()) m07800s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m07800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07800_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m07801_a0-optimized.cl b/OpenCL/m07801_a0-optimized.cl index 4dc1a15d8..c5f7cb0d5 100644 --- a/OpenCL/m07801_a0-optimized.cl +++ b/OpenCL/m07801_a0-optimized.cl @@ -54,7 +54,7 @@ DECLSPEC void SETSHIFTEDINT (PRIVATE_AS u32 *a, const int n, const u32 v) a[d + 1] = l32_from_64_S (tmp); } -KERNEL_FQ void HC_ATTR_SEQ m07801_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07801_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -298,15 +298,15 @@ KERNEL_FQ void HC_ATTR_SEQ m07801_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m07801_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07801_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07801_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07801_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07801_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07801_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -562,10 +562,10 @@ KERNEL_FQ void HC_ATTR_SEQ m07801_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m07801_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07801_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07801_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m07801_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m07801_a1-optimized.cl b/OpenCL/m07801_a1-optimized.cl index b8b4738f3..10608c0ba 100644 --- a/OpenCL/m07801_a1-optimized.cl +++ b/OpenCL/m07801_a1-optimized.cl @@ -52,7 +52,7 @@ DECLSPEC void SETSHIFTEDINT (PRIVATE_AS u32 *a, const int n, const u32 v) a[d + 1] = l32_from_64_S (tmp); } -KERNEL_FQ void HC_ATTR_SEQ m07801_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07801_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -356,15 +356,15 @@ KERNEL_FQ void HC_ATTR_SEQ m07801_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m07801_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07801_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07801_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07801_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07801_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07801_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -680,10 +680,10 @@ KERNEL_FQ void HC_ATTR_SEQ m07801_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m07801_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07801_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07801_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07801_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m07801_a3-optimized.cl b/OpenCL/m07801_a3-optimized.cl index e760af4ae..340aa6258 100644 --- a/OpenCL/m07801_a3-optimized.cl +++ b/OpenCL/m07801_a3-optimized.cl @@ -498,7 +498,7 @@ DECLSPEC void m07801s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m07801_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07801_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -553,7 +553,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07801_m04 (KERN_ATTR_BASIC ()) m07801m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m07801_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07801_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -608,11 +608,11 @@ KERNEL_FQ void HC_ATTR_SEQ m07801_m08 (KERN_ATTR_BASIC ()) m07801m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m07801_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07801_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m07801_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07801_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -667,7 +667,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07801_s04 (KERN_ATTR_BASIC ()) m07801s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m07801_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07801_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -722,6 +722,6 @@ KERNEL_FQ void HC_ATTR_SEQ m07801_s08 (KERN_ATTR_BASIC ()) m07801s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m07801_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m07801_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m07900-pure.cl b/OpenCL/m07900-pure.cl index cfda6eade..5052ac20c 100644 --- a/OpenCL/m07900-pure.cl +++ b/OpenCL/m07900-pure.cl @@ -20,7 +20,7 @@ typedef struct drupal7_tmp } drupal7_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m07900_init (KERN_ATTR_TMPS (drupal7_tmp_t)) +KERNEL_FQ KERNEL_FA void m07900_init (KERN_ATTR_TMPS (drupal7_tmp_t)) { /** * base @@ -50,7 +50,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07900_init (KERN_ATTR_TMPS (drupal7_tmp_t)) tmps[gid].digest_buf[7] = ctx.h[7]; } -KERNEL_FQ void HC_ATTR_SEQ m07900_loop (KERN_ATTR_TMPS (drupal7_tmp_t)) +KERNEL_FQ KERNEL_FA void m07900_loop (KERN_ATTR_TMPS (drupal7_tmp_t)) { /** * base @@ -204,7 +204,7 @@ KERNEL_FQ void HC_ATTR_SEQ m07900_loop (KERN_ATTR_TMPS (drupal7_tmp_t)) tmps[gid].digest_buf[7] = digest[7]; } -KERNEL_FQ void HC_ATTR_SEQ m07900_comp (KERN_ATTR_TMPS (drupal7_tmp_t)) +KERNEL_FQ KERNEL_FA void m07900_comp (KERN_ATTR_TMPS (drupal7_tmp_t)) { /** * modifier diff --git a/OpenCL/m08000_a0-optimized.cl b/OpenCL/m08000_a0-optimized.cl index 7697d08fb..c40f73a28 100644 --- a/OpenCL/m08000_a0-optimized.cl +++ b/OpenCL/m08000_a0-optimized.cl @@ -218,7 +218,7 @@ DECLSPEC void sha256_transform_s (PRIVATE_AS u32x *digest, LOCAL_AS u32 *w) digest[7] += h; } -KERNEL_FQ void HC_ATTR_SEQ m08000_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08000_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -381,15 +381,15 @@ KERNEL_FQ void HC_ATTR_SEQ m08000_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08000_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08000_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m08000_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08000_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m08000_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08000_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -564,10 +564,10 @@ KERNEL_FQ void HC_ATTR_SEQ m08000_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08000_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08000_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m08000_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08000_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m08000_a1-optimized.cl b/OpenCL/m08000_a1-optimized.cl index a957271fd..0e9a701d7 100644 --- a/OpenCL/m08000_a1-optimized.cl +++ b/OpenCL/m08000_a1-optimized.cl @@ -216,7 +216,7 @@ DECLSPEC void sha256_transform_s (PRIVATE_AS u32x *digest, LOCAL_AS u32 *w) digest[7] += h; } -KERNEL_FQ void HC_ATTR_SEQ m08000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08000_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -433,15 +433,15 @@ KERNEL_FQ void HC_ATTR_SEQ m08000_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08000_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m08000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08000_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m08000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08000_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -670,10 +670,10 @@ KERNEL_FQ void HC_ATTR_SEQ m08000_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08000_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m08000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08000_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m08000_a3-optimized.cl b/OpenCL/m08000_a3-optimized.cl index ffe903b13..09ce853ca 100644 --- a/OpenCL/m08000_a3-optimized.cl +++ b/OpenCL/m08000_a3-optimized.cl @@ -464,7 +464,7 @@ DECLSPEC void m08000s (LOCAL_AS u32 *w_s1, LOCAL_AS u32 *w_s2, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m08000_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m08000_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -505,7 +505,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08000_m04 (KERN_ATTR_VECTOR ()) m08000m (w_s1, w_s2, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m08000_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m08000_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -546,7 +546,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08000_m08 (KERN_ATTR_VECTOR ()) m08000m (w_s1, w_s2, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m08000_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m08000_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -587,7 +587,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08000_m16 (KERN_ATTR_VECTOR ()) m08000m (w_s1, w_s2, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m08000_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m08000_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -628,7 +628,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08000_s04 (KERN_ATTR_VECTOR ()) m08000s (w_s1, w_s2, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m08000_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m08000_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -669,7 +669,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08000_s08 (KERN_ATTR_VECTOR ()) m08000s (w_s1, w_s2, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m08000_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m08000_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m08100_a0-optimized.cl b/OpenCL/m08100_a0-optimized.cl index 20023eba1..0d2c66d68 100644 --- a/OpenCL/m08100_a0-optimized.cl +++ b/OpenCL/m08100_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m08100_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08100_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -220,15 +220,15 @@ KERNEL_FQ void HC_ATTR_SEQ m08100_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08100_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08100_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m08100_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08100_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m08100_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08100_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -453,10 +453,10 @@ KERNEL_FQ void HC_ATTR_SEQ m08100_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08100_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08100_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m08100_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08100_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m08100_a0-pure.cl b/OpenCL/m08100_a0-pure.cl index decc7b9fd..f19f3c1c8 100644 --- a/OpenCL/m08100_a0-pure.cl +++ b/OpenCL/m08100_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m08100_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08100_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -68,7 +68,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08100_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08100_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08100_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m08100_a1-optimized.cl b/OpenCL/m08100_a1-optimized.cl index eb4834215..3d4f115c9 100644 --- a/OpenCL/m08100_a1-optimized.cl +++ b/OpenCL/m08100_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m08100_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08100_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -289,15 +289,15 @@ KERNEL_FQ void HC_ATTR_SEQ m08100_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08100_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08100_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m08100_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08100_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m08100_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08100_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -581,10 +581,10 @@ KERNEL_FQ void HC_ATTR_SEQ m08100_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08100_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08100_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m08100_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08100_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m08100_a1-pure.cl b/OpenCL/m08100_a1-pure.cl index b2aa7c57d..21a103538 100644 --- a/OpenCL/m08100_a1-pure.cl +++ b/OpenCL/m08100_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m08100_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08100_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -63,7 +63,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08100_mxx (KERN_ATTR_BASIC ()) } -KERNEL_FQ void HC_ATTR_SEQ m08100_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08100_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m08100_a3-optimized.cl b/OpenCL/m08100_a3-optimized.cl index e41b966fc..dfbf6e20e 100644 --- a/OpenCL/m08100_a3-optimized.cl +++ b/OpenCL/m08100_a3-optimized.cl @@ -351,7 +351,7 @@ DECLSPEC void m08100s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m08100_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08100_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -417,7 +417,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08100_m04 (KERN_ATTR_BASIC ()) m08100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m08100_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08100_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -491,7 +491,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08100_m08 (KERN_ATTR_BASIC ()) m08100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m08100_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08100_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -580,7 +580,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08100_m16 (KERN_ATTR_BASIC ()) m08100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m08100_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08100_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -646,7 +646,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08100_s04 (KERN_ATTR_BASIC ()) m08100s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m08100_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08100_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -720,7 +720,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08100_s08 (KERN_ATTR_BASIC ()) m08100s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m08100_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08100_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m08100_a3-pure.cl b/OpenCL/m08100_a3-pure.cl index 4c546de05..499dd9132 100644 --- a/OpenCL/m08100_a3-pure.cl +++ b/OpenCL/m08100_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m08100_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m08100_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -79,7 +79,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08100_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08100_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m08100_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m08200-pure.cl b/OpenCL/m08200-pure.cl index c7043b92b..cc54ad2ce 100644 --- a/OpenCL/m08200-pure.cl +++ b/OpenCL/m08200-pure.cl @@ -93,7 +93,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void HC_ATTR_SEQ m08200_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, cloudkey_t)) +KERNEL_FQ KERNEL_FA void m08200_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, cloudkey_t)) { /** * base @@ -197,7 +197,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08200_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m08200_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, cloudkey_t)) +KERNEL_FQ KERNEL_FA void m08200_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, cloudkey_t)) { const u64 gid = get_global_id (0); @@ -323,7 +323,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08200_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m08200_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, cloudkey_t)) +KERNEL_FQ KERNEL_FA void m08200_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, cloudkey_t)) { /** * base diff --git a/OpenCL/m08300_a0-optimized.cl b/OpenCL/m08300_a0-optimized.cl index 1c42c7873..53f19f614 100644 --- a/OpenCL/m08300_a0-optimized.cl +++ b/OpenCL/m08300_a0-optimized.cl @@ -173,7 +173,7 @@ DECLSPEC u32 replace_dot_by_len (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE out_len.s##n++; \ } -KERNEL_FQ void HC_ATTR_SEQ m08300_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08300_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -457,15 +457,15 @@ KERNEL_FQ void HC_ATTR_SEQ m08300_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08300_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08300_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m08300_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08300_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m08300_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08300_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -761,10 +761,10 @@ KERNEL_FQ void HC_ATTR_SEQ m08300_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08300_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08300_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m08300_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08300_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m08300_a0-pure.cl b/OpenCL/m08300_a0-pure.cl index 51fc7c7ef..5b8f3bbdb 100644 --- a/OpenCL/m08300_a0-pure.cl +++ b/OpenCL/m08300_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m08300_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08300_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -148,7 +148,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08300_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08300_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08300_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m08300_a1-optimized.cl b/OpenCL/m08300_a1-optimized.cl index 986676cec..227a865a4 100644 --- a/OpenCL/m08300_a1-optimized.cl +++ b/OpenCL/m08300_a1-optimized.cl @@ -171,7 +171,7 @@ DECLSPEC u32 replace_dot_by_len (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE pw_len.s##n++; \ } -KERNEL_FQ void HC_ATTR_SEQ m08300_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08300_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -515,15 +515,15 @@ KERNEL_FQ void HC_ATTR_SEQ m08300_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08300_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08300_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m08300_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08300_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m08300_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08300_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -879,10 +879,10 @@ KERNEL_FQ void HC_ATTR_SEQ m08300_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08300_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08300_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m08300_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08300_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m08300_a1-pure.cl b/OpenCL/m08300_a1-pure.cl index 1346fa199..e9c8c6059 100644 --- a/OpenCL/m08300_a1-pure.cl +++ b/OpenCL/m08300_a1-pure.cl @@ -50,7 +50,7 @@ DECLSPEC const u32 replace_dot_by_len (PRIVATE_AS pw_t *out, GLOBAL_AS const pw_ return cur_len; } -KERNEL_FQ void HC_ATTR_SEQ m08300_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08300_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -167,7 +167,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08300_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08300_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08300_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m08300_a3-optimized.cl b/OpenCL/m08300_a3-optimized.cl index dcd0ad49a..dcbec54ce 100644 --- a/OpenCL/m08300_a3-optimized.cl +++ b/OpenCL/m08300_a3-optimized.cl @@ -651,7 +651,7 @@ DECLSPEC void m08300s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m08300_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08300_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -700,7 +700,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08300_m04 (KERN_ATTR_BASIC ()) m08300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m08300_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08300_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -749,7 +749,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08300_m08 (KERN_ATTR_BASIC ()) m08300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m08300_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08300_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -798,7 +798,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08300_m16 (KERN_ATTR_BASIC ()) m08300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m08300_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08300_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -847,7 +847,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08300_s04 (KERN_ATTR_BASIC ()) m08300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m08300_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08300_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -896,7 +896,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08300_s08 (KERN_ATTR_BASIC ()) m08300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m08300_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08300_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m08300_a3-pure.cl b/OpenCL/m08300_a3-pure.cl index 2415acb97..000d2e124 100644 --- a/OpenCL/m08300_a3-pure.cl +++ b/OpenCL/m08300_a3-pure.cl @@ -25,7 +25,7 @@ len.s##n++; \ } -KERNEL_FQ void HC_ATTR_SEQ m08300_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m08300_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -198,7 +198,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08300_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08300_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m08300_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m08400_a0-optimized.cl b/OpenCL/m08400_a0-optimized.cl index 718406292..098d66fa3 100644 --- a/OpenCL/m08400_a0-optimized.cl +++ b/OpenCL/m08400_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m08400_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08400_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -274,15 +274,15 @@ KERNEL_FQ void HC_ATTR_SEQ m08400_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08400_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08400_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m08400_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08400_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m08400_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08400_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -540,10 +540,10 @@ KERNEL_FQ void HC_ATTR_SEQ m08400_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08400_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08400_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m08400_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08400_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m08400_a0-pure.cl b/OpenCL/m08400_a0-pure.cl index f42af7d41..a50483266 100644 --- a/OpenCL/m08400_a0-pure.cl +++ b/OpenCL/m08400_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m08400_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08400_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -179,7 +179,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08400_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08400_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08400_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m08400_a1-optimized.cl b/OpenCL/m08400_a1-optimized.cl index 60a1b4988..14e3544df 100644 --- a/OpenCL/m08400_a1-optimized.cl +++ b/OpenCL/m08400_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m08400_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08400_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -330,15 +330,15 @@ KERNEL_FQ void HC_ATTR_SEQ m08400_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08400_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08400_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m08400_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08400_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m08400_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08400_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -654,10 +654,10 @@ KERNEL_FQ void HC_ATTR_SEQ m08400_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08400_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08400_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m08400_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08400_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m08400_a1-pure.cl b/OpenCL/m08400_a1-pure.cl index e4e00efc1..5d08d0f9c 100644 --- a/OpenCL/m08400_a1-pure.cl +++ b/OpenCL/m08400_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m08400_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08400_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -175,7 +175,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08400_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08400_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08400_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m08400_a3-optimized.cl b/OpenCL/m08400_a3-optimized.cl index 5a89de6bb..58c56a1db 100644 --- a/OpenCL/m08400_a3-optimized.cl +++ b/OpenCL/m08400_a3-optimized.cl @@ -452,7 +452,7 @@ DECLSPEC void m08400s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m08400_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08400_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -522,7 +522,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08400_m04 (KERN_ATTR_BASIC ()) m08400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m08400_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08400_m08 (KERN_ATTR_BASIC ()) { /** * modifier @@ -592,7 +592,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08400_m08 (KERN_ATTR_BASIC ()) m08400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m08400_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08400_m16 (KERN_ATTR_BASIC ()) { /** * modifier @@ -662,7 +662,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08400_m16 (KERN_ATTR_BASIC ()) m08400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m08400_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08400_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -732,7 +732,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08400_s04 (KERN_ATTR_BASIC ()) m08400s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m08400_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08400_s08 (KERN_ATTR_BASIC ()) { /** * modifier @@ -802,7 +802,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08400_s08 (KERN_ATTR_BASIC ()) m08400s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m08400_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08400_s16 (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m08400_a3-pure.cl b/OpenCL/m08400_a3-pure.cl index 03cdd8de0..078b69c53 100644 --- a/OpenCL/m08400_a3-pure.cl +++ b/OpenCL/m08400_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m08400_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m08400_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -192,7 +192,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08400_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08400_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m08400_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m08500_a0-pure.cl b/OpenCL/m08500_a0-pure.cl index d20c06e03..c3d9f791d 100644 --- a/OpenCL/m08500_a0-pure.cl +++ b/OpenCL/m08500_a0-pure.cl @@ -522,7 +522,7 @@ DECLSPEC void transform_racf_key (const u32 w0, const u32x w1, PRIVATE_AS u32x * | BOX1 (((w1 >> 24) & 0xff), c_ascii_to_ebcdic_pc) << 24; } -KERNEL_FQ void HC_ATTR_SEQ m08500_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08500_mxx (KERN_ATTR_RULES ()) { /** * base @@ -620,7 +620,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08500_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08500_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08500_sxx (KERN_ATTR_RULES ()) { /** * base diff --git a/OpenCL/m08500_a1-pure.cl b/OpenCL/m08500_a1-pure.cl index e44828dad..21f7dc3c0 100644 --- a/OpenCL/m08500_a1-pure.cl +++ b/OpenCL/m08500_a1-pure.cl @@ -520,7 +520,7 @@ DECLSPEC void transform_racf_key (const u32 w0, const u32x w1, PRIVATE_AS u32x * | BOX1 (((w1 >> 24) & 0xff), c_ascii_to_ebcdic_pc) << 24; } -KERNEL_FQ void HC_ATTR_SEQ m08500_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08500_mxx (KERN_ATTR_BASIC ()) { /** * base @@ -676,7 +676,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08500_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08500_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08500_sxx (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m08500_a3-pure.cl b/OpenCL/m08500_a3-pure.cl index f21acff22..29aff1efc 100644 --- a/OpenCL/m08500_a3-pure.cl +++ b/OpenCL/m08500_a3-pure.cl @@ -652,7 +652,7 @@ DECLSPEC void m08500s (LOCAL_AS u32 (*s_SPtrans)[64], LOCAL_AS u32 (*s_skb)[64], } } -KERNEL_FQ void HC_ATTR_SEQ m08500_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m08500_mxx (KERN_ATTR_VECTOR ()) { /** * base @@ -726,7 +726,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08500_mxx (KERN_ATTR_VECTOR ()) m08500m (s_SPtrans, s_skb, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m08500_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m08500_sxx (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m08600_a0-pure.cl b/OpenCL/m08600_a0-pure.cl index d7bc1cdae..2840a00e8 100644 --- a/OpenCL/m08600_a0-pure.cl +++ b/OpenCL/m08600_a0-pure.cl @@ -265,7 +265,7 @@ DECLSPEC void domino_big_md (PRIVATE_AS const u32 *saved_key, const u32 size, PR mdtransform_norecalc (state, checksum, s_lotus_magic_table); } -KERNEL_FQ void HC_ATTR_SEQ m08600_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08600_mxx (KERN_ATTR_RULES ()) { /** * base @@ -329,7 +329,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08600_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08600_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08600_sxx (KERN_ATTR_RULES ()) { /** * base diff --git a/OpenCL/m08600_a1-pure.cl b/OpenCL/m08600_a1-pure.cl index 8e349f8b1..e50585d39 100644 --- a/OpenCL/m08600_a1-pure.cl +++ b/OpenCL/m08600_a1-pure.cl @@ -263,7 +263,7 @@ DECLSPEC void domino_big_md (PRIVATE_AS const u32 *saved_key, const u32 size, PR mdtransform_norecalc (state, checksum, s_lotus_magic_table); } -KERNEL_FQ void HC_ATTR_SEQ m08600_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08600_mxx (KERN_ATTR_BASIC ()) { /** * base @@ -387,7 +387,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08600_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08600_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08600_sxx (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m08600_a3-pure.cl b/OpenCL/m08600_a3-pure.cl index 41995b3f0..5a3c801d7 100644 --- a/OpenCL/m08600_a3-pure.cl +++ b/OpenCL/m08600_a3-pure.cl @@ -362,7 +362,7 @@ DECLSPEC void m08600s (LOCAL_AS u32 *s_lotus_magic_table, PRIVATE_AS u32 *w, con } } -KERNEL_FQ void HC_ATTR_SEQ m08600_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m08600_mxx (KERN_ATTR_VECTOR ()) { /** * base @@ -419,7 +419,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08600_mxx (KERN_ATTR_VECTOR ()) m08600m (s_lotus_magic_table, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m08600_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m08600_sxx (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m08700_a0-optimized.cl b/OpenCL/m08700_a0-optimized.cl index 330db9283..69660d4ca 100644 --- a/OpenCL/m08700_a0-optimized.cl +++ b/OpenCL/m08700_a0-optimized.cl @@ -302,7 +302,7 @@ DECLSPEC void domino_big_md (PRIVATE_AS const u32x *saved_key, const u32 size, P mdtransform_norecalc (state, checksum, s_lotus_magic_table); } -KERNEL_FQ void HC_ATTR_SEQ m08700_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08700_m04 (KERN_ATTR_RULES ()) { /** * base @@ -481,15 +481,15 @@ KERNEL_FQ void HC_ATTR_SEQ m08700_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08700_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08700_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m08700_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08700_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m08700_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08700_s04 (KERN_ATTR_RULES ()) { /** * base @@ -680,10 +680,10 @@ KERNEL_FQ void HC_ATTR_SEQ m08700_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08700_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08700_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m08700_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m08700_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m08700_a1-optimized.cl b/OpenCL/m08700_a1-optimized.cl index 4bec676fa..6cea71887 100644 --- a/OpenCL/m08700_a1-optimized.cl +++ b/OpenCL/m08700_a1-optimized.cl @@ -300,7 +300,7 @@ DECLSPEC void domino_big_md (PRIVATE_AS const u32x *saved_key, const u32 size, P mdtransform_norecalc (state, checksum, s_lotus_magic_table); } -KERNEL_FQ void HC_ATTR_SEQ m08700_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08700_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -539,15 +539,15 @@ KERNEL_FQ void HC_ATTR_SEQ m08700_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08700_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08700_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m08700_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08700_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m08700_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08700_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -798,10 +798,10 @@ KERNEL_FQ void HC_ATTR_SEQ m08700_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m08700_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08700_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m08700_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m08700_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m08700_a3-optimized.cl b/OpenCL/m08700_a3-optimized.cl index d14bd5edc..3fc49c389 100644 --- a/OpenCL/m08700_a3-optimized.cl +++ b/OpenCL/m08700_a3-optimized.cl @@ -573,7 +573,7 @@ DECLSPEC void m08700s (LOCAL_AS u32 *s_lotus_magic_table, LOCAL_AS u32 *l_bin2as } } -KERNEL_FQ void HC_ATTR_SEQ m08700_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m08700_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -641,7 +641,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08700_m04 (KERN_ATTR_VECTOR ()) m08700m (s_lotus_magic_table, l_bin2asc, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m08700_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m08700_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -709,7 +709,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08700_m08 (KERN_ATTR_VECTOR ()) m08700m (s_lotus_magic_table, l_bin2asc, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m08700_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m08700_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -777,7 +777,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08700_m16 (KERN_ATTR_VECTOR ()) m08700m (s_lotus_magic_table, l_bin2asc, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m08700_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m08700_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -845,7 +845,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08700_s04 (KERN_ATTR_VECTOR ()) m08700s (s_lotus_magic_table, l_bin2asc, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m08700_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m08700_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -913,7 +913,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08700_s08 (KERN_ATTR_VECTOR ()) m08700s (s_lotus_magic_table, l_bin2asc, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m08700_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m08700_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m08800-pure.cl b/OpenCL/m08800-pure.cl index 505ce7ed9..43c1e281a 100644 --- a/OpenCL/m08800-pure.cl +++ b/OpenCL/m08800-pure.cl @@ -68,7 +68,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m08800_init (KERN_ATTR_TMPS_ESALT (androidfde_tmp_t, androidfde_t)) +KERNEL_FQ KERNEL_FA void m08800_init (KERN_ATTR_TMPS_ESALT (androidfde_tmp_t, androidfde_t)) { /** * base @@ -140,7 +140,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08800_init (KERN_ATTR_TMPS_ESALT (androidfde_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m08800_loop (KERN_ATTR_TMPS_ESALT (androidfde_tmp_t, androidfde_t)) +KERNEL_FQ KERNEL_FA void m08800_loop (KERN_ATTR_TMPS_ESALT (androidfde_tmp_t, androidfde_t)) { const u64 gid = get_global_id (0); @@ -225,7 +225,7 @@ KERNEL_FQ void HC_ATTR_SEQ m08800_loop (KERN_ATTR_TMPS_ESALT (androidfde_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m08800_comp (KERN_ATTR_TMPS_ESALT (androidfde_tmp_t, androidfde_t)) +KERNEL_FQ KERNEL_FA void m08800_comp (KERN_ATTR_TMPS_ESALT (androidfde_tmp_t, androidfde_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m08900-pure.cl b/OpenCL/m08900-pure.cl index bc2730be9..126f421b1 100644 --- a/OpenCL/m08900-pure.cl +++ b/OpenCL/m08900-pure.cl @@ -15,32 +15,18 @@ #define COMPARE_S M2S(INCLUDE_PATH/inc_comp_single.cl) #define COMPARE_M M2S(INCLUDE_PATH/inc_comp_multi.cl) -typedef struct -{ - #ifndef SCRYPT_TMP_ELEM - #define SCRYPT_TMP_ELEM 1 - #endif - - u32 P[SCRYPT_TMP_ELEM]; - -} scrypt_tmp_t; - -KERNEL_FQ void HC_ATTR_SEQ m08900_init (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m08900_init (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); if (gid >= GID_CNT) return; - u32 out[SCRYPT_CNT4]; + scrypt_pbkdf2_ggg (pws[gid].i, pws[gid].pw_len, salt_bufs[SALT_POS_HOST].salt_buf, salt_bufs[SALT_POS_HOST].salt_len, tmps[gid].in, SCRYPT_SZ); - scrypt_pbkdf2_gg (pws[gid].i, pws[gid].pw_len, salt_bufs[SALT_POS_HOST].salt_buf, salt_bufs[SALT_POS_HOST].salt_len, out, SCRYPT_SZ); - - scrypt_blockmix_in (out, SCRYPT_SZ); - - for (u32 i = 0; i < SCRYPT_CNT4; i++) tmps[gid].P[i] = out[i]; + scrypt_blockmix_in (tmps[gid].in, tmps[gid].out, SCRYPT_SZ); } -KERNEL_FQ void HC_ATTR_SEQ m08900_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m08900_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -51,16 +37,12 @@ KERNEL_FQ void HC_ATTR_SEQ m08900_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) u32 X[STATE_CNT4]; - GLOBAL_AS u32 *P = tmps[gid].P + (SALT_REPEAT * STATE_CNT4); + GLOBAL_AS u32 *P = tmps[gid].out + (SALT_REPEAT * STATE_CNT4); - for (u32 z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - - scrypt_smix_init (X, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); - - for (u32 z = 0; z < STATE_CNT4; z++) P[z] = X[z]; + scrypt_smix_init (P, X, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); } -KERNEL_FQ void HC_ATTR_SEQ m08900_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m08900_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -72,30 +54,22 @@ KERNEL_FQ void HC_ATTR_SEQ m08900_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) u32 X[STATE_CNT4]; u32 T[STATE_CNT4]; - GLOBAL_AS u32 *P = tmps[gid].P + (SALT_REPEAT * STATE_CNT4); + GLOBAL_AS u32 *P = tmps[gid].out + (SALT_REPEAT * STATE_CNT4); - for (u32 z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - - scrypt_smix_loop (X, T, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); - - for (u32 z = 0; z < STATE_CNT4; z++) P[z] = X[z]; + scrypt_smix_loop (P, X, T, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); } -KERNEL_FQ void HC_ATTR_SEQ m08900_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m08900_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); if (gid >= GID_CNT) return; - u32 x[SCRYPT_CNT4]; - - for (u32 i = 0; i < SCRYPT_CNT4; i++) x[i] = tmps[gid].P[i]; - - scrypt_blockmix_out (x, SCRYPT_SZ); + scrypt_blockmix_out (tmps[gid].out, tmps[gid].in, SCRYPT_SZ); u32 out[4]; - scrypt_pbkdf2_gp (pws[gid].i, pws[gid].pw_len, x, SCRYPT_SZ, out, 16); + scrypt_pbkdf2_ggp (pws[gid].i, pws[gid].pw_len, tmps[gid].in, SCRYPT_SZ, out, 16); const u32 r0 = out[0]; const u32 r1 = out[1]; diff --git a/OpenCL/m09000-pure.cl b/OpenCL/m09000-pure.cl index 2de60f2da..d8ef5f6a4 100644 --- a/OpenCL/m09000-pure.cl +++ b/OpenCL/m09000-pure.cl @@ -406,7 +406,7 @@ DECLSPEC inline void SET_KEY32 (LOCAL_AS u32 *S, const u64 key, const u32 val) extern __shared__ u32 S[]; #endif -KERNEL_FQ void HC_ATTR_SEQ m09000_init (KERN_ATTR_TMPS (pwsafe2_tmp_t)) +KERNEL_FQ KERNEL_FA void m09000_init (KERN_ATTR_TMPS (pwsafe2_tmp_t)) { /** * base @@ -636,7 +636,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09000_init (KERN_ATTR_TMPS (pwsafe2_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m09000_loop (KERN_ATTR_TMPS (pwsafe2_tmp_t)) +KERNEL_FQ KERNEL_FA void m09000_loop (KERN_ATTR_TMPS (pwsafe2_tmp_t)) { /** * base @@ -705,7 +705,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09000_loop (KERN_ATTR_TMPS (pwsafe2_tmp_t)) tmps[gid].digest[1] = R0; } -KERNEL_FQ void HC_ATTR_SEQ m09000_comp (KERN_ATTR_TMPS (pwsafe2_tmp_t)) +KERNEL_FQ KERNEL_FA void m09000_comp (KERN_ATTR_TMPS (pwsafe2_tmp_t)) { /** * base diff --git a/OpenCL/m09100-pure.cl b/OpenCL/m09100-pure.cl index e4c1080f6..794e4f971 100644 --- a/OpenCL/m09100-pure.cl +++ b/OpenCL/m09100-pure.cl @@ -424,7 +424,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m09100_init (KERN_ATTR_TMPS (lotus8_tmp_t)) +KERNEL_FQ KERNEL_FA void m09100_init (KERN_ATTR_TMPS (lotus8_tmp_t)) { /** * base @@ -696,7 +696,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09100_init (KERN_ATTR_TMPS (lotus8_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m09100_loop (KERN_ATTR_TMPS (lotus8_tmp_t)) +KERNEL_FQ KERNEL_FA void m09100_loop (KERN_ATTR_TMPS (lotus8_tmp_t)) { const u64 gid = get_global_id (0); @@ -781,7 +781,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09100_loop (KERN_ATTR_TMPS (lotus8_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m09100_comp (KERN_ATTR_TMPS (lotus8_tmp_t)) +KERNEL_FQ KERNEL_FA void m09100_comp (KERN_ATTR_TMPS (lotus8_tmp_t)) { /** * base diff --git a/OpenCL/m09400-pure.cl b/OpenCL/m09400-pure.cl index 8fa99c333..523d0f1ca 100644 --- a/OpenCL/m09400-pure.cl +++ b/OpenCL/m09400-pure.cl @@ -33,7 +33,7 @@ typedef struct office2007 } office2007_t; -KERNEL_FQ void HC_ATTR_SEQ m09400_init (KERN_ATTR_TMPS_ESALT (office2007_tmp_t, office2007_t)) +KERNEL_FQ KERNEL_FA void m09400_init (KERN_ATTR_TMPS_ESALT (office2007_tmp_t, office2007_t)) { /** * base @@ -60,7 +60,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09400_init (KERN_ATTR_TMPS_ESALT (office2007_tmp_t, tmps[gid].out[4] = ctx.h[4]; } -KERNEL_FQ void HC_ATTR_SEQ m09400_loop (KERN_ATTR_TMPS_ESALT (office2007_tmp_t, office2007_t)) +KERNEL_FQ KERNEL_FA void m09400_loop (KERN_ATTR_TMPS_ESALT (office2007_tmp_t, office2007_t)) { const u64 gid = get_global_id (0); @@ -127,7 +127,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09400_loop (KERN_ATTR_TMPS_ESALT (office2007_tmp_t, unpackv (tmps, out, gid, 4, t4); } -KERNEL_FQ void HC_ATTR_SEQ m09400_comp (KERN_ATTR_TMPS_ESALT (office2007_tmp_t, office2007_t)) +KERNEL_FQ KERNEL_FA void m09400_comp (KERN_ATTR_TMPS_ESALT (office2007_tmp_t, office2007_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m09500-pure.cl b/OpenCL/m09500-pure.cl index a09826aa0..03fbe15cf 100644 --- a/OpenCL/m09500-pure.cl +++ b/OpenCL/m09500-pure.cl @@ -31,7 +31,7 @@ typedef struct office2010_tmp } office2010_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m09500_init (KERN_ATTR_TMPS_ESALT (office2010_tmp_t, office2010_t)) +KERNEL_FQ KERNEL_FA void m09500_init (KERN_ATTR_TMPS_ESALT (office2010_tmp_t, office2010_t)) { /** * base @@ -58,7 +58,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09500_init (KERN_ATTR_TMPS_ESALT (office2010_tmp_t, tmps[gid].out[4] = ctx.h[4]; } -KERNEL_FQ void HC_ATTR_SEQ m09500_loop (KERN_ATTR_TMPS_ESALT (office2010_tmp_t, office2010_t)) +KERNEL_FQ KERNEL_FA void m09500_loop (KERN_ATTR_TMPS_ESALT (office2010_tmp_t, office2010_t)) { const u64 gid = get_global_id (0); @@ -125,7 +125,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09500_loop (KERN_ATTR_TMPS_ESALT (office2010_tmp_t, unpackv (tmps, out, gid, 4, t4); } -KERNEL_FQ void HC_ATTR_SEQ m09500_comp (KERN_ATTR_TMPS_ESALT (office2010_tmp_t, office2010_t)) +KERNEL_FQ KERNEL_FA void m09500_comp (KERN_ATTR_TMPS_ESALT (office2010_tmp_t, office2010_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m09600-pure.cl b/OpenCL/m09600-pure.cl index 4136323be..e4c2510ea 100644 --- a/OpenCL/m09600-pure.cl +++ b/OpenCL/m09600-pure.cl @@ -31,7 +31,7 @@ typedef struct office2013 } office2013_t; -KERNEL_FQ void HC_ATTR_SEQ m09600_init (KERN_ATTR_TMPS_ESALT (office2013_tmp_t, office2013_t)) +KERNEL_FQ KERNEL_FA void m09600_init (KERN_ATTR_TMPS_ESALT (office2013_tmp_t, office2013_t)) { /** * base @@ -61,7 +61,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09600_init (KERN_ATTR_TMPS_ESALT (office2013_tmp_t, tmps[gid].out[7] = ctx.h[7]; } -KERNEL_FQ void HC_ATTR_SEQ m09600_loop (KERN_ATTR_TMPS_ESALT (office2013_tmp_t, office2013_t)) +KERNEL_FQ KERNEL_FA void m09600_loop (KERN_ATTR_TMPS_ESALT (office2013_tmp_t, office2013_t)) { const u64 gid = get_global_id (0); @@ -171,7 +171,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09600_loop (KERN_ATTR_TMPS_ESALT (office2013_tmp_t, unpack64v (tmps, out, gid, 7, t7); } -KERNEL_FQ void HC_ATTR_SEQ m09600_comp (KERN_ATTR_TMPS_ESALT (office2013_tmp_t, office2013_t)) +KERNEL_FQ KERNEL_FA void m09600_comp (KERN_ATTR_TMPS_ESALT (office2013_tmp_t, office2013_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m09700_a0-optimized.cl b/OpenCL/m09700_a0-optimized.cl index 60659884f..cebaa2441 100644 --- a/OpenCL/m09700_a0-optimized.cl +++ b/OpenCL/m09700_a0-optimized.cl @@ -371,7 +371,7 @@ DECLSPEC void gen336 (PRIVATE_AS u32 *digest_pre, PRIVATE_AS u32 *salt_buf, PRIV md5_transform (w0_t, w1_t, w2_t, w3_t, digest); } -KERNEL_FQ void HC_ATTR_SEQ m09700_m04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09700_m04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { /** * modifier @@ -548,15 +548,15 @@ KERNEL_FQ void HC_ATTR_SEQ m09700_m04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m09700_m08 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09700_m08 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09700_m16 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09700_m16 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09700_s04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09700_s04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { /** * modifier @@ -745,10 +745,10 @@ KERNEL_FQ void HC_ATTR_SEQ m09700_s04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m09700_s08 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09700_s08 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09700_s16 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09700_s16 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { } diff --git a/OpenCL/m09700_a1-optimized.cl b/OpenCL/m09700_a1-optimized.cl index b47ae648f..5d679a8ef 100644 --- a/OpenCL/m09700_a1-optimized.cl +++ b/OpenCL/m09700_a1-optimized.cl @@ -369,7 +369,7 @@ DECLSPEC void gen336 (PRIVATE_AS u32 *digest_pre, PRIVATE_AS u32 *salt_buf, PRIV md5_transform (w0_t, w1_t, w2_t, w3_t, digest); } -KERNEL_FQ void HC_ATTR_SEQ m09700_m04 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09700_m04 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * modifier @@ -604,15 +604,15 @@ KERNEL_FQ void HC_ATTR_SEQ m09700_m04 (KERN_ATTR_ESALT (oldoffice01_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m09700_m08 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09700_m08 (KERN_ATTR_ESALT (oldoffice01_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09700_m16 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09700_m16 (KERN_ATTR_ESALT (oldoffice01_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09700_s04 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09700_s04 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * modifier @@ -859,10 +859,10 @@ KERNEL_FQ void HC_ATTR_SEQ m09700_s04 (KERN_ATTR_ESALT (oldoffice01_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m09700_s08 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09700_s08 (KERN_ATTR_ESALT (oldoffice01_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09700_s16 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09700_s16 (KERN_ATTR_ESALT (oldoffice01_t)) { } diff --git a/OpenCL/m09700_a3-optimized.cl b/OpenCL/m09700_a3-optimized.cl index 80e7a4eab..3953b3718 100644 --- a/OpenCL/m09700_a3-optimized.cl +++ b/OpenCL/m09700_a3-optimized.cl @@ -828,7 +828,7 @@ DECLSPEC void m09700s (LOCAL_AS u32 *S, PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, } } -KERNEL_FQ void HC_ATTR_SEQ m09700_m04 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09700_m04 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * base @@ -879,7 +879,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09700_m04 (KERN_ATTR_ESALT (oldoffice01_t)) m09700m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m09700_m08 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09700_m08 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * base @@ -930,11 +930,11 @@ KERNEL_FQ void HC_ATTR_SEQ m09700_m08 (KERN_ATTR_ESALT (oldoffice01_t)) m09700m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m09700_m16 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09700_m16 (KERN_ATTR_ESALT (oldoffice01_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09700_s04 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09700_s04 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * base @@ -985,7 +985,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09700_s04 (KERN_ATTR_ESALT (oldoffice01_t)) m09700s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m09700_s08 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09700_s08 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * base @@ -1036,6 +1036,6 @@ KERNEL_FQ void HC_ATTR_SEQ m09700_s08 (KERN_ATTR_ESALT (oldoffice01_t)) m09700s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m09700_s16 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09700_s16 (KERN_ATTR_ESALT (oldoffice01_t)) { } diff --git a/OpenCL/m09710_a0-optimized.cl b/OpenCL/m09710_a0-optimized.cl index 47998ae63..3ebd47076 100644 --- a/OpenCL/m09710_a0-optimized.cl +++ b/OpenCL/m09710_a0-optimized.cl @@ -27,7 +27,7 @@ typedef struct oldoffice01 } oldoffice01_t; -KERNEL_FQ void HC_ATTR_SEQ m09710_m04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09710_m04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { /** * modifier @@ -155,15 +155,15 @@ KERNEL_FQ void HC_ATTR_SEQ m09710_m04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m09710_m08 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09710_m08 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09710_m16 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09710_m16 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09710_s04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09710_s04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { /** * modifier @@ -303,10 +303,10 @@ KERNEL_FQ void HC_ATTR_SEQ m09710_s04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m09710_s08 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09710_s08 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09710_s16 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09710_s16 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { } diff --git a/OpenCL/m09710_a1-optimized.cl b/OpenCL/m09710_a1-optimized.cl index 921fa18e3..f6189624e 100644 --- a/OpenCL/m09710_a1-optimized.cl +++ b/OpenCL/m09710_a1-optimized.cl @@ -25,7 +25,7 @@ typedef struct oldoffice01 } oldoffice01_t; -KERNEL_FQ void HC_ATTR_SEQ m09710_m04 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09710_m04 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * modifier @@ -199,15 +199,15 @@ KERNEL_FQ void HC_ATTR_SEQ m09710_m04 (KERN_ATTR_ESALT (oldoffice01_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m09710_m08 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09710_m08 (KERN_ATTR_ESALT (oldoffice01_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09710_m16 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09710_m16 (KERN_ATTR_ESALT (oldoffice01_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09710_s04 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09710_s04 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * modifier @@ -393,10 +393,10 @@ KERNEL_FQ void HC_ATTR_SEQ m09710_s04 (KERN_ATTR_ESALT (oldoffice01_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m09710_s08 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09710_s08 (KERN_ATTR_ESALT (oldoffice01_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09710_s16 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09710_s16 (KERN_ATTR_ESALT (oldoffice01_t)) { } diff --git a/OpenCL/m09710_a3-optimized.cl b/OpenCL/m09710_a3-optimized.cl index b296df5d3..1403d9aa1 100644 --- a/OpenCL/m09710_a3-optimized.cl +++ b/OpenCL/m09710_a3-optimized.cl @@ -237,7 +237,7 @@ DECLSPEC void m09710s (LOCAL_AS u32 *S, PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, } } -KERNEL_FQ void HC_ATTR_SEQ m09710_m04 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09710_m04 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * base @@ -288,15 +288,15 @@ KERNEL_FQ void HC_ATTR_SEQ m09710_m04 (KERN_ATTR_ESALT (oldoffice01_t)) m09710m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m09710_m08 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09710_m08 (KERN_ATTR_ESALT (oldoffice01_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09710_m16 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09710_m16 (KERN_ATTR_ESALT (oldoffice01_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09710_s04 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09710_s04 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * base @@ -347,10 +347,10 @@ KERNEL_FQ void HC_ATTR_SEQ m09710_s04 (KERN_ATTR_ESALT (oldoffice01_t)) m09710s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m09710_s08 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09710_s08 (KERN_ATTR_ESALT (oldoffice01_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09710_s16 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09710_s16 (KERN_ATTR_ESALT (oldoffice01_t)) { } diff --git a/OpenCL/m09720_a0-optimized.cl b/OpenCL/m09720_a0-optimized.cl index f0b9b0f3d..9673787c9 100644 --- a/OpenCL/m09720_a0-optimized.cl +++ b/OpenCL/m09720_a0-optimized.cl @@ -369,7 +369,7 @@ DECLSPEC void gen336 (PRIVATE_AS u32x *digest_pre, PRIVATE_AS u32 *salt_buf, PRI md5_transform_vector (w0_t, w1_t, w2_t, w3_t, digest); } -KERNEL_FQ void HC_ATTR_SEQ m09720_m04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09720_m04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { /** * modifier @@ -467,15 +467,15 @@ KERNEL_FQ void HC_ATTR_SEQ m09720_m04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m09720_m08 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09720_m08 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09720_m16 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09720_m16 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09720_s04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09720_s04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { /** * modifier @@ -585,10 +585,10 @@ KERNEL_FQ void HC_ATTR_SEQ m09720_s04 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m09720_s08 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09720_s08 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09720_s16 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09720_s16 (KERN_ATTR_RULES_ESALT (oldoffice01_t)) { } diff --git a/OpenCL/m09720_a1-optimized.cl b/OpenCL/m09720_a1-optimized.cl index 885da5f07..d8ab038ce 100644 --- a/OpenCL/m09720_a1-optimized.cl +++ b/OpenCL/m09720_a1-optimized.cl @@ -367,7 +367,7 @@ DECLSPEC void gen336 (PRIVATE_AS u32x *digest_pre, PRIVATE_AS u32 *salt_buf, PRI md5_transform_vector (w0_t, w1_t, w2_t, w3_t, digest); } -KERNEL_FQ void HC_ATTR_SEQ m09720_m04 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09720_m04 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * modifier @@ -515,15 +515,15 @@ KERNEL_FQ void HC_ATTR_SEQ m09720_m04 (KERN_ATTR_ESALT (oldoffice01_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m09720_m08 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09720_m08 (KERN_ATTR_ESALT (oldoffice01_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09720_m16 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09720_m16 (KERN_ATTR_ESALT (oldoffice01_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09720_s04 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09720_s04 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * modifier @@ -683,10 +683,10 @@ KERNEL_FQ void HC_ATTR_SEQ m09720_s04 (KERN_ATTR_ESALT (oldoffice01_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m09720_s08 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09720_s08 (KERN_ATTR_ESALT (oldoffice01_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09720_s16 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09720_s16 (KERN_ATTR_ESALT (oldoffice01_t)) { } diff --git a/OpenCL/m09720_a3-optimized.cl b/OpenCL/m09720_a3-optimized.cl index 91e06cdab..f35547726 100644 --- a/OpenCL/m09720_a3-optimized.cl +++ b/OpenCL/m09720_a3-optimized.cl @@ -553,7 +553,7 @@ DECLSPEC void m09720s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m09720_m04 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09720_m04 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * base @@ -602,7 +602,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09720_m04 (KERN_ATTR_ESALT (oldoffice01_t)) m09720m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m09720_m08 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09720_m08 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * base @@ -651,11 +651,11 @@ KERNEL_FQ void HC_ATTR_SEQ m09720_m08 (KERN_ATTR_ESALT (oldoffice01_t)) m09720m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m09720_m16 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09720_m16 (KERN_ATTR_ESALT (oldoffice01_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09720_s04 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09720_s04 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * base @@ -704,7 +704,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09720_s04 (KERN_ATTR_ESALT (oldoffice01_t)) m09720s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m09720_s08 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09720_s08 (KERN_ATTR_ESALT (oldoffice01_t)) { /** * base @@ -753,6 +753,6 @@ KERNEL_FQ void HC_ATTR_SEQ m09720_s08 (KERN_ATTR_ESALT (oldoffice01_t)) m09720s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m09720_s16 (KERN_ATTR_ESALT (oldoffice01_t)) +KERNEL_FQ KERNEL_FA void m09720_s16 (KERN_ATTR_ESALT (oldoffice01_t)) { } diff --git a/OpenCL/m09800_a0-optimized.cl b/OpenCL/m09800_a0-optimized.cl index c1d0640ab..f51dfd726 100644 --- a/OpenCL/m09800_a0-optimized.cl +++ b/OpenCL/m09800_a0-optimized.cl @@ -31,7 +31,7 @@ typedef struct oldoffice34 } oldoffice34_t; -KERNEL_FQ void HC_ATTR_SEQ m09800_m04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09800_m04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { /** * modifier @@ -309,15 +309,15 @@ KERNEL_FQ void HC_ATTR_SEQ m09800_m04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m09800_m08 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09800_m08 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09800_m16 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09800_m16 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09800_s04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09800_s04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { /** * modifier @@ -606,10 +606,10 @@ KERNEL_FQ void HC_ATTR_SEQ m09800_s04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m09800_s08 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09800_s08 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09800_s16 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09800_s16 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { } diff --git a/OpenCL/m09800_a1-optimized.cl b/OpenCL/m09800_a1-optimized.cl index ddbae47aa..86759d633 100644 --- a/OpenCL/m09800_a1-optimized.cl +++ b/OpenCL/m09800_a1-optimized.cl @@ -29,7 +29,7 @@ typedef struct oldoffice34 } oldoffice34_t; -KERNEL_FQ void HC_ATTR_SEQ m09800_m04 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09800_m04 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * modifier @@ -357,15 +357,15 @@ KERNEL_FQ void HC_ATTR_SEQ m09800_m04 (KERN_ATTR_ESALT (oldoffice34_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m09800_m08 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09800_m08 (KERN_ATTR_ESALT (oldoffice34_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09800_m16 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09800_m16 (KERN_ATTR_ESALT (oldoffice34_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09800_s04 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09800_s04 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * modifier @@ -704,10 +704,10 @@ KERNEL_FQ void HC_ATTR_SEQ m09800_s04 (KERN_ATTR_ESALT (oldoffice34_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m09800_s08 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09800_s08 (KERN_ATTR_ESALT (oldoffice34_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09800_s16 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09800_s16 (KERN_ATTR_ESALT (oldoffice34_t)) { } diff --git a/OpenCL/m09800_a3-optimized.cl b/OpenCL/m09800_a3-optimized.cl index a19ba98e6..534cbad4b 100644 --- a/OpenCL/m09800_a3-optimized.cl +++ b/OpenCL/m09800_a3-optimized.cl @@ -531,7 +531,7 @@ DECLSPEC void m09800s (LOCAL_AS u32 *S, PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, } } -KERNEL_FQ void HC_ATTR_SEQ m09800_m04 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09800_m04 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base @@ -582,7 +582,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09800_m04 (KERN_ATTR_ESALT (oldoffice34_t)) m09800m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m09800_m08 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09800_m08 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base @@ -633,7 +633,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09800_m08 (KERN_ATTR_ESALT (oldoffice34_t)) m09800m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m09800_m16 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09800_m16 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base @@ -684,7 +684,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09800_m16 (KERN_ATTR_ESALT (oldoffice34_t)) m09800m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m09800_s04 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09800_s04 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base @@ -735,7 +735,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09800_s04 (KERN_ATTR_ESALT (oldoffice34_t)) m09800s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m09800_s08 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09800_s08 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base @@ -786,7 +786,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09800_s08 (KERN_ATTR_ESALT (oldoffice34_t)) m09800s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m09800_s16 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09800_s16 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base diff --git a/OpenCL/m09810_a0-optimized.cl b/OpenCL/m09810_a0-optimized.cl index 55494578f..aa3b983e6 100644 --- a/OpenCL/m09810_a0-optimized.cl +++ b/OpenCL/m09810_a0-optimized.cl @@ -29,7 +29,7 @@ typedef struct oldoffice34 } oldoffice34_t; -KERNEL_FQ void HC_ATTR_SEQ m09810_m04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09810_m04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { /** * modifier @@ -144,15 +144,15 @@ KERNEL_FQ void HC_ATTR_SEQ m09810_m04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m09810_m08 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09810_m08 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09810_m16 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09810_m16 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09810_s04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09810_s04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { /** * modifier @@ -279,10 +279,10 @@ KERNEL_FQ void HC_ATTR_SEQ m09810_s04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m09810_s08 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09810_s08 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09810_s16 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09810_s16 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { } diff --git a/OpenCL/m09810_a1-optimized.cl b/OpenCL/m09810_a1-optimized.cl index 22b2004bf..cfd0fc883 100644 --- a/OpenCL/m09810_a1-optimized.cl +++ b/OpenCL/m09810_a1-optimized.cl @@ -27,7 +27,7 @@ typedef struct oldoffice34 } oldoffice34_t; -KERNEL_FQ void HC_ATTR_SEQ m09810_m04 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09810_m04 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * modifier @@ -188,15 +188,15 @@ KERNEL_FQ void HC_ATTR_SEQ m09810_m04 (KERN_ATTR_ESALT (oldoffice34_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m09810_m08 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09810_m08 (KERN_ATTR_ESALT (oldoffice34_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09810_m16 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09810_m16 (KERN_ATTR_ESALT (oldoffice34_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09810_s04 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09810_s04 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * modifier @@ -369,10 +369,10 @@ KERNEL_FQ void HC_ATTR_SEQ m09810_s04 (KERN_ATTR_ESALT (oldoffice34_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m09810_s08 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09810_s08 (KERN_ATTR_ESALT (oldoffice34_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09810_s16 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09810_s16 (KERN_ATTR_ESALT (oldoffice34_t)) { } diff --git a/OpenCL/m09810_a3-optimized.cl b/OpenCL/m09810_a3-optimized.cl index 7ca6f2a29..ffb7a5e43 100644 --- a/OpenCL/m09810_a3-optimized.cl +++ b/OpenCL/m09810_a3-optimized.cl @@ -209,7 +209,7 @@ DECLSPEC void m09810s (LOCAL_AS u32 *S, PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, } } -KERNEL_FQ void HC_ATTR_SEQ m09810_m04 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09810_m04 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base @@ -260,7 +260,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09810_m04 (KERN_ATTR_ESALT (oldoffice34_t)) m09810m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m09810_m08 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09810_m08 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base @@ -311,7 +311,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09810_m08 (KERN_ATTR_ESALT (oldoffice34_t)) m09810m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m09810_m16 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09810_m16 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base @@ -362,7 +362,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09810_m16 (KERN_ATTR_ESALT (oldoffice34_t)) m09810m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m09810_s04 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09810_s04 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base @@ -413,7 +413,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09810_s04 (KERN_ATTR_ESALT (oldoffice34_t)) m09810s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m09810_s08 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09810_s08 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base @@ -464,7 +464,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09810_s08 (KERN_ATTR_ESALT (oldoffice34_t)) m09810s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m09810_s16 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09810_s16 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base diff --git a/OpenCL/m09820_a0-optimized.cl b/OpenCL/m09820_a0-optimized.cl index b07e32fbf..7a5b02956 100644 --- a/OpenCL/m09820_a0-optimized.cl +++ b/OpenCL/m09820_a0-optimized.cl @@ -31,7 +31,7 @@ typedef struct oldoffice34 } oldoffice34_t; -KERNEL_FQ void HC_ATTR_SEQ m09820_m04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09820_m04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { /** * modifier @@ -253,15 +253,15 @@ KERNEL_FQ void HC_ATTR_SEQ m09820_m04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m09820_m08 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09820_m08 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09820_m16 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09820_m16 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09820_s04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09820_s04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { /** * modifier @@ -492,10 +492,10 @@ KERNEL_FQ void HC_ATTR_SEQ m09820_s04 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m09820_s08 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09820_s08 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09820_s16 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09820_s16 (KERN_ATTR_RULES_ESALT (oldoffice34_t)) { } diff --git a/OpenCL/m09820_a1-optimized.cl b/OpenCL/m09820_a1-optimized.cl index c22d93f7b..4b04ec596 100644 --- a/OpenCL/m09820_a1-optimized.cl +++ b/OpenCL/m09820_a1-optimized.cl @@ -29,7 +29,7 @@ typedef struct oldoffice34 } oldoffice34_t; -KERNEL_FQ void HC_ATTR_SEQ m09820_m04 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09820_m04 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * modifier @@ -301,15 +301,15 @@ KERNEL_FQ void HC_ATTR_SEQ m09820_m04 (KERN_ATTR_ESALT (oldoffice34_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m09820_m08 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09820_m08 (KERN_ATTR_ESALT (oldoffice34_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09820_m16 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09820_m16 (KERN_ATTR_ESALT (oldoffice34_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09820_s04 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09820_s04 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * modifier @@ -590,10 +590,10 @@ KERNEL_FQ void HC_ATTR_SEQ m09820_s04 (KERN_ATTR_ESALT (oldoffice34_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m09820_s08 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09820_s08 (KERN_ATTR_ESALT (oldoffice34_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m09820_s16 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09820_s16 (KERN_ATTR_ESALT (oldoffice34_t)) { } diff --git a/OpenCL/m09820_a3-optimized.cl b/OpenCL/m09820_a3-optimized.cl index d258a48e9..c7c846b36 100644 --- a/OpenCL/m09820_a3-optimized.cl +++ b/OpenCL/m09820_a3-optimized.cl @@ -416,7 +416,7 @@ DECLSPEC void m09820s (LOCAL_AS u32 *S, PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, } } -KERNEL_FQ void HC_ATTR_SEQ m09820_m04 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09820_m04 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base @@ -467,7 +467,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09820_m04 (KERN_ATTR_ESALT (oldoffice34_t)) m09820m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m09820_m08 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09820_m08 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base @@ -518,7 +518,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09820_m08 (KERN_ATTR_ESALT (oldoffice34_t)) m09820m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m09820_m16 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09820_m16 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base @@ -569,7 +569,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09820_m16 (KERN_ATTR_ESALT (oldoffice34_t)) m09820m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m09820_s04 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09820_s04 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base @@ -620,7 +620,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09820_s04 (KERN_ATTR_ESALT (oldoffice34_t)) m09820s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m09820_s08 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09820_s08 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base @@ -671,7 +671,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09820_s08 (KERN_ATTR_ESALT (oldoffice34_t)) m09820s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m09820_s16 (KERN_ATTR_ESALT (oldoffice34_t)) +KERNEL_FQ KERNEL_FA void m09820_s16 (KERN_ATTR_ESALT (oldoffice34_t)) { /** * base diff --git a/OpenCL/m09900_a0-optimized.cl b/OpenCL/m09900_a0-optimized.cl index c12656908..217da7f5c 100644 --- a/OpenCL/m09900_a0-optimized.cl +++ b/OpenCL/m09900_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m09900_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m09900_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -242,15 +242,15 @@ KERNEL_FQ void HC_ATTR_SEQ m09900_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m09900_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m09900_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m09900_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m09900_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m09900_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m09900_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -491,10 +491,10 @@ KERNEL_FQ void HC_ATTR_SEQ m09900_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m09900_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m09900_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m09900_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m09900_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m09900_a0-pure.cl b/OpenCL/m09900_a0-pure.cl index 9ec8dcb57..5679142b8 100644 --- a/OpenCL/m09900_a0-pure.cl +++ b/OpenCL/m09900_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m09900_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m09900_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09900_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m09900_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m09900_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m09900_a1-optimized.cl b/OpenCL/m09900_a1-optimized.cl index c2f6f8eb3..dacdb4ca1 100644 --- a/OpenCL/m09900_a1-optimized.cl +++ b/OpenCL/m09900_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m09900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m09900_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -300,15 +300,15 @@ KERNEL_FQ void HC_ATTR_SEQ m09900_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m09900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m09900_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m09900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m09900_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m09900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m09900_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -609,10 +609,10 @@ KERNEL_FQ void HC_ATTR_SEQ m09900_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m09900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m09900_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m09900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m09900_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m09900_a1-pure.cl b/OpenCL/m09900_a1-pure.cl index 5cb119840..69ac972ae 100644 --- a/OpenCL/m09900_a1-pure.cl +++ b/OpenCL/m09900_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m09900_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m09900_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09900_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m09900_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m09900_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m09900_a3-optimized.cl b/OpenCL/m09900_a3-optimized.cl index 0866e2932..ce13b0673 100644 --- a/OpenCL/m09900_a3-optimized.cl +++ b/OpenCL/m09900_a3-optimized.cl @@ -585,7 +585,7 @@ DECLSPEC void m09900s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m09900_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m09900_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -625,7 +625,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09900_m04 (KERN_ATTR_VECTOR ()) m09900m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m09900_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m09900_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -665,7 +665,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09900_m08 (KERN_ATTR_VECTOR ()) m09900m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m09900_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m09900_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -705,7 +705,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09900_m16 (KERN_ATTR_VECTOR ()) m09900m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m09900_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m09900_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -745,7 +745,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09900_s04 (KERN_ATTR_VECTOR ()) m09900s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m09900_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m09900_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -785,7 +785,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09900_s08 (KERN_ATTR_VECTOR ()) m09900s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m09900_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m09900_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m09900_a3-pure.cl b/OpenCL/m09900_a3-pure.cl index 6971266ab..d206bd3fd 100644 --- a/OpenCL/m09900_a3-pure.cl +++ b/OpenCL/m09900_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m09900_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m09900_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void HC_ATTR_SEQ m09900_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m09900_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m09900_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m10100_a0-optimized.cl b/OpenCL/m10100_a0-optimized.cl index 1115a7a98..13fe2e72b 100644 --- a/OpenCL/m10100_a0-optimized.cl +++ b/OpenCL/m10100_a0-optimized.cl @@ -85,7 +85,7 @@ DECLSPEC u64x siphash_rot32 (const u64x a) (v1) ^= (v2); \ (v2) = siphash_rot32 ((v2)) -KERNEL_FQ void HC_ATTR_SEQ m10100_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10100_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -204,15 +204,15 @@ KERNEL_FQ void HC_ATTR_SEQ m10100_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10100_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10100_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10100_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10100_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10100_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10100_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -343,10 +343,10 @@ KERNEL_FQ void HC_ATTR_SEQ m10100_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10100_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10100_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10100_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10100_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m10100_a1-optimized.cl b/OpenCL/m10100_a1-optimized.cl index d9bfcaa85..557b919b0 100644 --- a/OpenCL/m10100_a1-optimized.cl +++ b/OpenCL/m10100_a1-optimized.cl @@ -83,7 +83,7 @@ DECLSPEC u64x siphash_rot32 (const u64x a) (v1) ^= (v2); \ (v2) = siphash_rot32 ((v2)) -KERNEL_FQ void HC_ATTR_SEQ m10100_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10100_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -262,15 +262,15 @@ KERNEL_FQ void HC_ATTR_SEQ m10100_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10100_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10100_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10100_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10100_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10100_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10100_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -461,10 +461,10 @@ KERNEL_FQ void HC_ATTR_SEQ m10100_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10100_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10100_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10100_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10100_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m10100_a3-optimized.cl b/OpenCL/m10100_a3-optimized.cl index e4fbc766e..8370fe013 100644 --- a/OpenCL/m10100_a3-optimized.cl +++ b/OpenCL/m10100_a3-optimized.cl @@ -276,7 +276,7 @@ DECLSPEC void m10100s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m10100_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10100_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -316,7 +316,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10100_m04 (KERN_ATTR_VECTOR ()) m10100m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10100_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10100_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -356,7 +356,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10100_m08 (KERN_ATTR_VECTOR ()) m10100m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10100_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10100_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -396,7 +396,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10100_m16 (KERN_ATTR_VECTOR ()) m10100m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10100_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10100_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -436,7 +436,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10100_s04 (KERN_ATTR_VECTOR ()) m10100s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10100_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10100_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -476,7 +476,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10100_s08 (KERN_ATTR_VECTOR ()) m10100s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10100_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10100_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m10300-pure.cl b/OpenCL/m10300-pure.cl index fa73e47d0..ff3cd4c4b 100644 --- a/OpenCL/m10300-pure.cl +++ b/OpenCL/m10300-pure.cl @@ -20,7 +20,7 @@ typedef struct saph_sha1_tmp } saph_sha1_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m10300_init (KERN_ATTR_TMPS (saph_sha1_tmp_t)) +KERNEL_FQ KERNEL_FA void m10300_init (KERN_ATTR_TMPS (saph_sha1_tmp_t)) { /** * base @@ -47,7 +47,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10300_init (KERN_ATTR_TMPS (saph_sha1_tmp_t)) tmps[gid].digest_buf[4] = ctx.h[4]; } -KERNEL_FQ void HC_ATTR_SEQ m10300_loop (KERN_ATTR_TMPS (saph_sha1_tmp_t)) +KERNEL_FQ KERNEL_FA void m10300_loop (KERN_ATTR_TMPS (saph_sha1_tmp_t)) { /** * base @@ -127,7 +127,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10300_loop (KERN_ATTR_TMPS (saph_sha1_tmp_t)) tmps[gid].digest_buf[4] = digest[4]; } -KERNEL_FQ void HC_ATTR_SEQ m10300_comp (KERN_ATTR_TMPS (saph_sha1_tmp_t)) +KERNEL_FQ KERNEL_FA void m10300_comp (KERN_ATTR_TMPS (saph_sha1_tmp_t)) { /** * modifier diff --git a/OpenCL/m10400_a0-optimized.cl b/OpenCL/m10400_a0-optimized.cl index a74dac2cf..374980daf 100644 --- a/OpenCL/m10400_a0-optimized.cl +++ b/OpenCL/m10400_a0-optimized.cl @@ -41,7 +41,7 @@ typedef struct pdf } pdf_t; -KERNEL_FQ void HC_ATTR_SEQ m10400_m04 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10400_m04 (KERN_ATTR_RULES_ESALT (pdf_t)) { /** * modifier @@ -223,15 +223,15 @@ KERNEL_FQ void HC_ATTR_SEQ m10400_m04 (KERN_ATTR_RULES_ESALT (pdf_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m10400_m08 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10400_m08 (KERN_ATTR_RULES_ESALT (pdf_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m10400_m16 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10400_m16 (KERN_ATTR_RULES_ESALT (pdf_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m10400_s04 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10400_s04 (KERN_ATTR_RULES_ESALT (pdf_t)) { /** * modifier @@ -425,10 +425,10 @@ KERNEL_FQ void HC_ATTR_SEQ m10400_s04 (KERN_ATTR_RULES_ESALT (pdf_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m10400_s08 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10400_s08 (KERN_ATTR_RULES_ESALT (pdf_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m10400_s16 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10400_s16 (KERN_ATTR_RULES_ESALT (pdf_t)) { } diff --git a/OpenCL/m10400_a1-optimized.cl b/OpenCL/m10400_a1-optimized.cl index 706ba58bc..f11835643 100644 --- a/OpenCL/m10400_a1-optimized.cl +++ b/OpenCL/m10400_a1-optimized.cl @@ -39,7 +39,7 @@ typedef struct pdf } pdf_t; -KERNEL_FQ void HC_ATTR_SEQ m10400_m04 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10400_m04 (KERN_ATTR_ESALT (pdf_t)) { /** * modifier @@ -281,15 +281,15 @@ KERNEL_FQ void HC_ATTR_SEQ m10400_m04 (KERN_ATTR_ESALT (pdf_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m10400_m08 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10400_m08 (KERN_ATTR_ESALT (pdf_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m10400_m16 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10400_m16 (KERN_ATTR_ESALT (pdf_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m10400_s04 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10400_s04 (KERN_ATTR_ESALT (pdf_t)) { /** * modifier @@ -543,10 +543,10 @@ KERNEL_FQ void HC_ATTR_SEQ m10400_s04 (KERN_ATTR_ESALT (pdf_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m10400_s08 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10400_s08 (KERN_ATTR_ESALT (pdf_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m10400_s16 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10400_s16 (KERN_ATTR_ESALT (pdf_t)) { } diff --git a/OpenCL/m10400_a3-optimized.cl b/OpenCL/m10400_a3-optimized.cl index 4f038bbf3..044752b43 100644 --- a/OpenCL/m10400_a3-optimized.cl +++ b/OpenCL/m10400_a3-optimized.cl @@ -397,7 +397,7 @@ DECLSPEC void m10400s (LOCAL_AS u32 *S, PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, } } -KERNEL_FQ void HC_ATTR_SEQ m10400_m04 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10400_m04 (KERN_ATTR_ESALT (pdf_t)) { /** * base @@ -448,7 +448,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10400_m04 (KERN_ATTR_ESALT (pdf_t)) m10400m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10400_m08 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10400_m08 (KERN_ATTR_ESALT (pdf_t)) { /** * base @@ -499,7 +499,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10400_m08 (KERN_ATTR_ESALT (pdf_t)) m10400m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10400_m16 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10400_m16 (KERN_ATTR_ESALT (pdf_t)) { /** * base @@ -550,7 +550,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10400_m16 (KERN_ATTR_ESALT (pdf_t)) m10400m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10400_s04 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10400_s04 (KERN_ATTR_ESALT (pdf_t)) { /** * base @@ -601,7 +601,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10400_s04 (KERN_ATTR_ESALT (pdf_t)) m10400s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10400_s08 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10400_s08 (KERN_ATTR_ESALT (pdf_t)) { /** * base @@ -652,7 +652,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10400_s08 (KERN_ATTR_ESALT (pdf_t)) m10400s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10400_s16 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10400_s16 (KERN_ATTR_ESALT (pdf_t)) { /** * base diff --git a/OpenCL/m10410_a0-optimized.cl b/OpenCL/m10410_a0-optimized.cl index a1bde21a9..28251f827 100644 --- a/OpenCL/m10410_a0-optimized.cl +++ b/OpenCL/m10410_a0-optimized.cl @@ -41,7 +41,7 @@ typedef struct pdf } pdf_t; -KERNEL_FQ void HC_ATTR_SEQ m10410_m04 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10410_m04 (KERN_ATTR_RULES_ESALT (pdf_t)) { /** * modifier @@ -120,15 +120,15 @@ KERNEL_FQ void HC_ATTR_SEQ m10410_m04 (KERN_ATTR_RULES_ESALT (pdf_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m10410_m08 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10410_m08 (KERN_ATTR_RULES_ESALT (pdf_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m10410_m16 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10410_m16 (KERN_ATTR_RULES_ESALT (pdf_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m10410_s04 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10410_s04 (KERN_ATTR_RULES_ESALT (pdf_t)) { /** * modifier @@ -219,10 +219,10 @@ KERNEL_FQ void HC_ATTR_SEQ m10410_s04 (KERN_ATTR_RULES_ESALT (pdf_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m10410_s08 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10410_s08 (KERN_ATTR_RULES_ESALT (pdf_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m10410_s16 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10410_s16 (KERN_ATTR_RULES_ESALT (pdf_t)) { } diff --git a/OpenCL/m10410_a1-optimized.cl b/OpenCL/m10410_a1-optimized.cl index 7f51dded5..4ead5106b 100644 --- a/OpenCL/m10410_a1-optimized.cl +++ b/OpenCL/m10410_a1-optimized.cl @@ -39,7 +39,7 @@ typedef struct pdf } pdf_t; -KERNEL_FQ void HC_ATTR_SEQ m10410_m04 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10410_m04 (KERN_ATTR_ESALT (pdf_t)) { /** * modifier @@ -187,15 +187,15 @@ KERNEL_FQ void HC_ATTR_SEQ m10410_m04 (KERN_ATTR_ESALT (pdf_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m10410_m08 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10410_m08 (KERN_ATTR_ESALT (pdf_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m10410_m16 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10410_m16 (KERN_ATTR_ESALT (pdf_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m10410_s04 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10410_s04 (KERN_ATTR_ESALT (pdf_t)) { /** * modifier @@ -355,10 +355,10 @@ KERNEL_FQ void HC_ATTR_SEQ m10410_s04 (KERN_ATTR_ESALT (pdf_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m10410_s08 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10410_s08 (KERN_ATTR_ESALT (pdf_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m10410_s16 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10410_s16 (KERN_ATTR_ESALT (pdf_t)) { } diff --git a/OpenCL/m10410_a3-optimized.cl b/OpenCL/m10410_a3-optimized.cl index fbd8e540e..e1bb0f2f5 100644 --- a/OpenCL/m10410_a3-optimized.cl +++ b/OpenCL/m10410_a3-optimized.cl @@ -151,7 +151,7 @@ DECLSPEC void m10410s (LOCAL_AS u32 *S, PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, } } -KERNEL_FQ void HC_ATTR_SEQ m10410_m04 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10410_m04 (KERN_ATTR_ESALT (pdf_t)) { /** * base @@ -202,7 +202,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10410_m04 (KERN_ATTR_ESALT (pdf_t)) m10410m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10410_m08 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10410_m08 (KERN_ATTR_ESALT (pdf_t)) { /** * base @@ -253,7 +253,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10410_m08 (KERN_ATTR_ESALT (pdf_t)) m10410m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10410_m16 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10410_m16 (KERN_ATTR_ESALT (pdf_t)) { /** * base @@ -304,7 +304,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10410_m16 (KERN_ATTR_ESALT (pdf_t)) m10410m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10410_s04 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10410_s04 (KERN_ATTR_ESALT (pdf_t)) { /** * base @@ -355,7 +355,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10410_s04 (KERN_ATTR_ESALT (pdf_t)) m10410s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10410_s08 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10410_s08 (KERN_ATTR_ESALT (pdf_t)) { /** * base @@ -406,7 +406,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10410_s08 (KERN_ATTR_ESALT (pdf_t)) m10410s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10410_s16 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10410_s16 (KERN_ATTR_ESALT (pdf_t)) { /** * base diff --git a/OpenCL/m10420_a0-optimized.cl b/OpenCL/m10420_a0-optimized.cl index 89af53096..981c32385 100644 --- a/OpenCL/m10420_a0-optimized.cl +++ b/OpenCL/m10420_a0-optimized.cl @@ -51,7 +51,7 @@ typedef struct pdf } pdf_t; -KERNEL_FQ void HC_ATTR_SEQ m10420_m04 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10420_m04 (KERN_ATTR_RULES_ESALT (pdf_t)) { /** * modifier @@ -204,15 +204,15 @@ KERNEL_FQ void HC_ATTR_SEQ m10420_m04 (KERN_ATTR_RULES_ESALT (pdf_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m10420_m08 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10420_m08 (KERN_ATTR_RULES_ESALT (pdf_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m10420_m16 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10420_m16 (KERN_ATTR_RULES_ESALT (pdf_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m10420_s04 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10420_s04 (KERN_ATTR_RULES_ESALT (pdf_t)) { /** * modifier @@ -377,10 +377,10 @@ KERNEL_FQ void HC_ATTR_SEQ m10420_s04 (KERN_ATTR_RULES_ESALT (pdf_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m10420_s08 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10420_s08 (KERN_ATTR_RULES_ESALT (pdf_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m10420_s16 (KERN_ATTR_RULES_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10420_s16 (KERN_ATTR_RULES_ESALT (pdf_t)) { } diff --git a/OpenCL/m10420_a1-optimized.cl b/OpenCL/m10420_a1-optimized.cl index f9124b9fa..add621053 100644 --- a/OpenCL/m10420_a1-optimized.cl +++ b/OpenCL/m10420_a1-optimized.cl @@ -49,7 +49,7 @@ typedef struct pdf } pdf_t; -KERNEL_FQ void HC_ATTR_SEQ m10420_m04 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10420_m04 (KERN_ATTR_ESALT (pdf_t)) { /** * modifier @@ -262,15 +262,15 @@ KERNEL_FQ void HC_ATTR_SEQ m10420_m04 (KERN_ATTR_ESALT (pdf_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m10420_m08 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10420_m08 (KERN_ATTR_ESALT (pdf_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m10420_m16 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10420_m16 (KERN_ATTR_ESALT (pdf_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m10420_s04 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10420_s04 (KERN_ATTR_ESALT (pdf_t)) { /** * modifier @@ -495,10 +495,10 @@ KERNEL_FQ void HC_ATTR_SEQ m10420_s04 (KERN_ATTR_ESALT (pdf_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m10420_s08 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10420_s08 (KERN_ATTR_ESALT (pdf_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m10420_s16 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10420_s16 (KERN_ATTR_ESALT (pdf_t)) { } diff --git a/OpenCL/m10420_a3-optimized.cl b/OpenCL/m10420_a3-optimized.cl index f5c0c2cdd..97769040e 100644 --- a/OpenCL/m10420_a3-optimized.cl +++ b/OpenCL/m10420_a3-optimized.cl @@ -361,7 +361,7 @@ DECLSPEC void m10420s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m10420_m04 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10420_m04 (KERN_ATTR_ESALT (pdf_t)) { /** * base @@ -410,7 +410,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10420_m04 (KERN_ATTR_ESALT (pdf_t)) m10420m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10420_m08 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10420_m08 (KERN_ATTR_ESALT (pdf_t)) { /** * base @@ -459,7 +459,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10420_m08 (KERN_ATTR_ESALT (pdf_t)) m10420m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10420_m16 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10420_m16 (KERN_ATTR_ESALT (pdf_t)) { /** * base @@ -508,7 +508,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10420_m16 (KERN_ATTR_ESALT (pdf_t)) m10420m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10420_s04 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10420_s04 (KERN_ATTR_ESALT (pdf_t)) { /** * base @@ -557,7 +557,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10420_s04 (KERN_ATTR_ESALT (pdf_t)) m10420s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10420_s08 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10420_s08 (KERN_ATTR_ESALT (pdf_t)) { /** * base @@ -606,7 +606,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10420_s08 (KERN_ATTR_ESALT (pdf_t)) m10420s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10420_s16 (KERN_ATTR_ESALT (pdf_t)) +KERNEL_FQ KERNEL_FA void m10420_s16 (KERN_ATTR_ESALT (pdf_t)) { /** * base diff --git a/OpenCL/m10500-pure.cl b/OpenCL/m10500-pure.cl index a21205911..dc0d711d2 100644 --- a/OpenCL/m10500-pure.cl +++ b/OpenCL/m10500-pure.cl @@ -45,7 +45,7 @@ typedef struct pdf14_tmp } pdf14_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m10500_init (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t)) +KERNEL_FQ KERNEL_FA void m10500_init (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t)) { /** * base @@ -232,7 +232,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10500_init (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t tmps[gid].out[3] = 0; } -KERNEL_FQ void HC_ATTR_SEQ m10500_loop (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t)) +KERNEL_FQ KERNEL_FA void m10500_loop (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t)) { /** * base @@ -333,7 +333,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10500_loop (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t tmps[gid].out[3] = out[3]; } -KERNEL_FQ void HC_ATTR_SEQ m10500_comp (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t)) +KERNEL_FQ KERNEL_FA void m10500_comp (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t)) { /** * modifier diff --git a/OpenCL/m10700-optimized.cl b/OpenCL/m10700-optimized.cl index 945f8bb93..deb9870b0 100644 --- a/OpenCL/m10700-optimized.cl +++ b/OpenCL/m10700-optimized.cl @@ -563,7 +563,7 @@ DECLSPEC u32 do_round (LOCAL_AS u32 *sc, PRIVATE_AS const u32 *pw, const u32 pw_ return ex; } -KERNEL_FQ void HC_ATTR_SEQ m10700_init (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf_t)) +KERNEL_FQ KERNEL_FA void m10700_init (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf_t)) { /** * base @@ -595,7 +595,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10700_init (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf tmps[gid].W_len = WORDSZ256; } -KERNEL_FQ void HC_ATTR_SEQ m10700_loop (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf_t)) +KERNEL_FQ KERNEL_FA void m10700_loop (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -695,7 +695,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10700_loop (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf tmps[gid].W_len = ctx.W_len; } -KERNEL_FQ void HC_ATTR_SEQ m10700_comp (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf_t)) +KERNEL_FQ KERNEL_FA void m10700_comp (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf_t)) { /** * modifier diff --git a/OpenCL/m10700-pure.cl b/OpenCL/m10700-pure.cl index e43c9fb7e..688caf153 100644 --- a/OpenCL/m10700-pure.cl +++ b/OpenCL/m10700-pure.cl @@ -1167,7 +1167,7 @@ DECLSPEC u32 do_round (PRIVATE_AS const u32 *w, const u32 pw_len, PRIVATE_AS pdf return ex; } -KERNEL_FQ void HC_ATTR_SEQ m10700_init (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf_t)) +KERNEL_FQ KERNEL_FA void m10700_init (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf_t)) { /** * base @@ -1211,7 +1211,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10700_init (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf tmps[gid] = tmp; } -KERNEL_FQ void HC_ATTR_SEQ m10700_loop (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf_t)) +KERNEL_FQ KERNEL_FA void m10700_loop (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -1289,7 +1289,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10700_loop (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf tmps[gid] = tmp; } -KERNEL_FQ void HC_ATTR_SEQ m10700_comp (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf_t)) +KERNEL_FQ KERNEL_FA void m10700_comp (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf_t)) { /** * modifier diff --git a/OpenCL/m10800_a0-optimized.cl b/OpenCL/m10800_a0-optimized.cl index ba060d8e9..6182d81d3 100644 --- a/OpenCL/m10800_a0-optimized.cl +++ b/OpenCL/m10800_a0-optimized.cl @@ -122,7 +122,7 @@ DECLSPEC void sha384_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = 0; } -KERNEL_FQ void HC_ATTR_SEQ m10800_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10800_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -215,15 +215,15 @@ KERNEL_FQ void HC_ATTR_SEQ m10800_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10800_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10800_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10800_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10800_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10800_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10800_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -328,10 +328,10 @@ KERNEL_FQ void HC_ATTR_SEQ m10800_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10800_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10800_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10800_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10800_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m10800_a0-pure.cl b/OpenCL/m10800_a0-pure.cl index 7cec38cab..a1d3ff787 100644 --- a/OpenCL/m10800_a0-pure.cl +++ b/OpenCL/m10800_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m10800_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10800_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10800_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10800_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10800_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m10800_a1-optimized.cl b/OpenCL/m10800_a1-optimized.cl index e640bbbd1..0dd77c59d 100644 --- a/OpenCL/m10800_a1-optimized.cl +++ b/OpenCL/m10800_a1-optimized.cl @@ -120,7 +120,7 @@ DECLSPEC void sha384_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = 0; } -KERNEL_FQ void HC_ATTR_SEQ m10800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10800_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -271,15 +271,15 @@ KERNEL_FQ void HC_ATTR_SEQ m10800_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10800_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10800_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10800_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -442,10 +442,10 @@ KERNEL_FQ void HC_ATTR_SEQ m10800_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10800_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10800_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m10800_a1-pure.cl b/OpenCL/m10800_a1-pure.cl index 233b85fa4..f2422a392 100644 --- a/OpenCL/m10800_a1-pure.cl +++ b/OpenCL/m10800_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m10800_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10800_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10800_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10800_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10800_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m10800_a3-optimized.cl b/OpenCL/m10800_a3-optimized.cl index 6f0938e61..342e46d7f 100644 --- a/OpenCL/m10800_a3-optimized.cl +++ b/OpenCL/m10800_a3-optimized.cl @@ -256,7 +256,7 @@ DECLSPEC void m10800s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m10800_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10800_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -296,7 +296,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10800_m04 (KERN_ATTR_VECTOR ()) m10800m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10800_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10800_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -336,7 +336,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10800_m08 (KERN_ATTR_VECTOR ()) m10800m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10800_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10800_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -376,7 +376,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10800_m16 (KERN_ATTR_VECTOR ()) m10800m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10800_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10800_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -416,7 +416,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10800_s04 (KERN_ATTR_VECTOR ()) m10800s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10800_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10800_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -456,7 +456,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10800_s08 (KERN_ATTR_VECTOR ()) m10800s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10800_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10800_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m10800_a3-pure.cl b/OpenCL/m10800_a3-pure.cl index 0665e1bc5..cc4bdf4e5 100644 --- a/OpenCL/m10800_a3-pure.cl +++ b/OpenCL/m10800_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m10800_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10800_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10800_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10800_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10800_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m10810_a0-optimized.cl b/OpenCL/m10810_a0-optimized.cl index 619349678..c833aaf14 100644 --- a/OpenCL/m10810_a0-optimized.cl +++ b/OpenCL/m10810_a0-optimized.cl @@ -122,7 +122,7 @@ DECLSPEC void sha384_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = 0; } -KERNEL_FQ void HC_ATTR_SEQ m10810_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10810_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -288,15 +288,15 @@ KERNEL_FQ void HC_ATTR_SEQ m10810_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10810_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10810_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10810_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10810_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10810_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10810_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -474,10 +474,10 @@ KERNEL_FQ void HC_ATTR_SEQ m10810_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10810_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10810_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10810_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10810_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m10810_a0-pure.cl b/OpenCL/m10810_a0-pure.cl index d1c437948..dc7bb4739 100644 --- a/OpenCL/m10810_a0-pure.cl +++ b/OpenCL/m10810_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m10810_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10810_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10810_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10810_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10810_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m10810_a1-optimized.cl b/OpenCL/m10810_a1-optimized.cl index 928f50b27..7834db98e 100644 --- a/OpenCL/m10810_a1-optimized.cl +++ b/OpenCL/m10810_a1-optimized.cl @@ -120,7 +120,7 @@ DECLSPEC void sha384_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = 0; } -KERNEL_FQ void HC_ATTR_SEQ m10810_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10810_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -346,15 +346,15 @@ KERNEL_FQ void HC_ATTR_SEQ m10810_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10810_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10810_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10810_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10810_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10810_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10810_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -592,10 +592,10 @@ KERNEL_FQ void HC_ATTR_SEQ m10810_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10810_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10810_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10810_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10810_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m10810_a1-pure.cl b/OpenCL/m10810_a1-pure.cl index c310dad31..459ee66e3 100644 --- a/OpenCL/m10810_a1-pure.cl +++ b/OpenCL/m10810_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m10810_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10810_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -67,7 +67,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10810_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10810_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10810_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m10810_a3-optimized.cl b/OpenCL/m10810_a3-optimized.cl index 461cd593e..a14ac91ef 100644 --- a/OpenCL/m10810_a3-optimized.cl +++ b/OpenCL/m10810_a3-optimized.cl @@ -307,7 +307,7 @@ DECLSPEC void m10810s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m10810_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10810_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -347,7 +347,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10810_m04 (KERN_ATTR_VECTOR ()) m10810m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10810_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10810_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -387,7 +387,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10810_m08 (KERN_ATTR_VECTOR ()) m10810m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10810_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10810_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -427,7 +427,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10810_m16 (KERN_ATTR_VECTOR ()) m10810m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10810_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10810_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -467,7 +467,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10810_s04 (KERN_ATTR_VECTOR ()) m10810s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10810_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10810_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -507,7 +507,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10810_s08 (KERN_ATTR_VECTOR ()) m10810s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10810_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10810_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m10810_a3-pure.cl b/OpenCL/m10810_a3-pure.cl index 2cb82c2b0..d9ede0052 100644 --- a/OpenCL/m10810_a3-pure.cl +++ b/OpenCL/m10810_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m10810_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10810_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10810_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10810_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10810_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m10820_a0-optimized.cl b/OpenCL/m10820_a0-optimized.cl index 7fbce095c..2c1b43994 100644 --- a/OpenCL/m10820_a0-optimized.cl +++ b/OpenCL/m10820_a0-optimized.cl @@ -122,7 +122,7 @@ DECLSPEC void sha384_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = 0; } -KERNEL_FQ void HC_ATTR_SEQ m10820_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10820_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -268,15 +268,15 @@ KERNEL_FQ void HC_ATTR_SEQ m10820_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10820_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10820_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10820_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10820_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10820_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10820_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -434,10 +434,10 @@ KERNEL_FQ void HC_ATTR_SEQ m10820_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10820_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10820_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10820_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10820_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m10820_a0-pure.cl b/OpenCL/m10820_a0-pure.cl index 8abd99158..ca0af920a 100644 --- a/OpenCL/m10820_a0-pure.cl +++ b/OpenCL/m10820_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m10820_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10820_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -64,7 +64,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10820_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10820_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10820_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m10820_a1-optimized.cl b/OpenCL/m10820_a1-optimized.cl index 11dff838f..cfa3f7a35 100644 --- a/OpenCL/m10820_a1-optimized.cl +++ b/OpenCL/m10820_a1-optimized.cl @@ -120,7 +120,7 @@ DECLSPEC void sha384_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = 0; } -KERNEL_FQ void HC_ATTR_SEQ m10820_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10820_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -324,15 +324,15 @@ KERNEL_FQ void HC_ATTR_SEQ m10820_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10820_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10820_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10820_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10820_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10820_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10820_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -548,10 +548,10 @@ KERNEL_FQ void HC_ATTR_SEQ m10820_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10820_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10820_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10820_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10820_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m10820_a1-pure.cl b/OpenCL/m10820_a1-pure.cl index 56ebe7666..c6bb0daf2 100644 --- a/OpenCL/m10820_a1-pure.cl +++ b/OpenCL/m10820_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m10820_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10820_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -58,7 +58,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10820_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10820_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10820_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m10820_a3-optimized.cl b/OpenCL/m10820_a3-optimized.cl index cb24d336d..f83649e0c 100644 --- a/OpenCL/m10820_a3-optimized.cl +++ b/OpenCL/m10820_a3-optimized.cl @@ -362,7 +362,7 @@ DECLSPEC void m10820s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_BASIC } } -KERNEL_FQ void HC_ATTR_SEQ m10820_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10820_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -402,7 +402,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10820_m04 (KERN_ATTR_BASIC ()) m10820m (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10820_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10820_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -442,7 +442,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10820_m08 (KERN_ATTR_BASIC ()) m10820m (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10820_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10820_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -482,7 +482,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10820_m16 (KERN_ATTR_BASIC ()) m10820m (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10820_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10820_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -522,7 +522,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10820_s04 (KERN_ATTR_BASIC ()) m10820s (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10820_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10820_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -562,7 +562,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10820_s08 (KERN_ATTR_BASIC ()) m10820s (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10820_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10820_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m10820_a3-pure.cl b/OpenCL/m10820_a3-pure.cl index e82851561..1b0b4bc83 100644 --- a/OpenCL/m10820_a3-pure.cl +++ b/OpenCL/m10820_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m10820_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10820_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -75,7 +75,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10820_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10820_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10820_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m10830_a0-optimized.cl b/OpenCL/m10830_a0-optimized.cl index 3a7a8d9ad..22a03dd59 100644 --- a/OpenCL/m10830_a0-optimized.cl +++ b/OpenCL/m10830_a0-optimized.cl @@ -122,7 +122,7 @@ DECLSPEC void sha384_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = 0; } -KERNEL_FQ void HC_ATTR_SEQ m10830_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10830_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -293,15 +293,15 @@ KERNEL_FQ void HC_ATTR_SEQ m10830_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10830_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10830_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10830_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10830_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10830_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10830_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -484,10 +484,10 @@ KERNEL_FQ void HC_ATTR_SEQ m10830_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10830_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10830_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10830_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10830_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m10830_a0-pure.cl b/OpenCL/m10830_a0-pure.cl index 783d505b3..c40ac5e30 100644 --- a/OpenCL/m10830_a0-pure.cl +++ b/OpenCL/m10830_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m10830_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10830_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10830_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10830_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10830_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m10830_a1-optimized.cl b/OpenCL/m10830_a1-optimized.cl index 51895bb94..38ae65d22 100644 --- a/OpenCL/m10830_a1-optimized.cl +++ b/OpenCL/m10830_a1-optimized.cl @@ -120,7 +120,7 @@ DECLSPEC void sha384_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = 0; } -KERNEL_FQ void HC_ATTR_SEQ m10830_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10830_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -351,15 +351,15 @@ KERNEL_FQ void HC_ATTR_SEQ m10830_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10830_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10830_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10830_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10830_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10830_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10830_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -602,10 +602,10 @@ KERNEL_FQ void HC_ATTR_SEQ m10830_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10830_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10830_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10830_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10830_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m10830_a1-pure.cl b/OpenCL/m10830_a1-pure.cl index 205a85654..c0376c124 100644 --- a/OpenCL/m10830_a1-pure.cl +++ b/OpenCL/m10830_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m10830_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10830_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -67,7 +67,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10830_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10830_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10830_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m10830_a3-optimized.cl b/OpenCL/m10830_a3-optimized.cl index 41fb2e780..81e590b10 100644 --- a/OpenCL/m10830_a3-optimized.cl +++ b/OpenCL/m10830_a3-optimized.cl @@ -307,7 +307,7 @@ DECLSPEC void m10830s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m10830_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10830_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -347,7 +347,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10830_m04 (KERN_ATTR_VECTOR ()) m10830m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10830_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10830_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -387,7 +387,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10830_m08 (KERN_ATTR_VECTOR ()) m10830m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10830_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10830_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -427,7 +427,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10830_m16 (KERN_ATTR_VECTOR ()) m10830m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10830_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10830_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -467,7 +467,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10830_s04 (KERN_ATTR_VECTOR ()) m10830s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10830_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10830_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -507,7 +507,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10830_s08 (KERN_ATTR_VECTOR ()) m10830s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10830_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10830_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m10830_a3-pure.cl b/OpenCL/m10830_a3-pure.cl index 12784b957..989133aa1 100644 --- a/OpenCL/m10830_a3-pure.cl +++ b/OpenCL/m10830_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m10830_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10830_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10830_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10830_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10830_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m10840_a0-optimized.cl b/OpenCL/m10840_a0-optimized.cl index 4e124ed6d..6ff980fb4 100644 --- a/OpenCL/m10840_a0-optimized.cl +++ b/OpenCL/m10840_a0-optimized.cl @@ -122,7 +122,7 @@ DECLSPEC void sha384_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = 0; } -KERNEL_FQ void HC_ATTR_SEQ m10840_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10840_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -273,15 +273,15 @@ KERNEL_FQ void HC_ATTR_SEQ m10840_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10840_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10840_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10840_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10840_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10840_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10840_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -444,10 +444,10 @@ KERNEL_FQ void HC_ATTR_SEQ m10840_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10840_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10840_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10840_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10840_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m10840_a0-pure.cl b/OpenCL/m10840_a0-pure.cl index 9011ae561..22b180ecd 100644 --- a/OpenCL/m10840_a0-pure.cl +++ b/OpenCL/m10840_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m10840_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10840_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -64,7 +64,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10840_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10840_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10840_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m10840_a1-optimized.cl b/OpenCL/m10840_a1-optimized.cl index 839107c4b..85eafd57b 100644 --- a/OpenCL/m10840_a1-optimized.cl +++ b/OpenCL/m10840_a1-optimized.cl @@ -120,7 +120,7 @@ DECLSPEC void sha384_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = 0; } -KERNEL_FQ void HC_ATTR_SEQ m10840_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10840_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -329,15 +329,15 @@ KERNEL_FQ void HC_ATTR_SEQ m10840_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10840_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10840_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10840_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10840_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10840_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10840_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -558,10 +558,10 @@ KERNEL_FQ void HC_ATTR_SEQ m10840_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10840_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10840_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10840_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10840_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m10840_a1-pure.cl b/OpenCL/m10840_a1-pure.cl index 60faf375b..62c6c56a7 100644 --- a/OpenCL/m10840_a1-pure.cl +++ b/OpenCL/m10840_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m10840_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10840_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -58,7 +58,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10840_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10840_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10840_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m10840_a3-optimized.cl b/OpenCL/m10840_a3-optimized.cl index 74e797a51..b0e9ed875 100644 --- a/OpenCL/m10840_a3-optimized.cl +++ b/OpenCL/m10840_a3-optimized.cl @@ -362,7 +362,7 @@ DECLSPEC void m10840s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_BASIC } } -KERNEL_FQ void HC_ATTR_SEQ m10840_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10840_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -402,7 +402,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10840_m04 (KERN_ATTR_BASIC ()) m10840m (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10840_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10840_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -442,7 +442,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10840_m08 (KERN_ATTR_BASIC ()) m10840m (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10840_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10840_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -482,7 +482,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10840_m16 (KERN_ATTR_BASIC ()) m10840m (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10840_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10840_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -522,7 +522,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10840_s04 (KERN_ATTR_BASIC ()) m10840s (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10840_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10840_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -562,7 +562,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10840_s08 (KERN_ATTR_BASIC ()) m10840s (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10840_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10840_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m10840_a3-pure.cl b/OpenCL/m10840_a3-pure.cl index 88be817f1..6ec9cc3c0 100644 --- a/OpenCL/m10840_a3-pure.cl +++ b/OpenCL/m10840_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m10840_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10840_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -75,7 +75,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10840_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10840_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10840_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m10870_a0-optimized.cl b/OpenCL/m10870_a0-optimized.cl index d2e5e77d5..1dfc798f1 100644 --- a/OpenCL/m10870_a0-optimized.cl +++ b/OpenCL/m10870_a0-optimized.cl @@ -122,7 +122,7 @@ DECLSPEC void sha384_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = 0; } -KERNEL_FQ void HC_ATTR_SEQ m10870_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10870_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -220,15 +220,15 @@ KERNEL_FQ void HC_ATTR_SEQ m10870_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10870_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10870_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10870_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10870_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10870_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10870_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -338,10 +338,10 @@ KERNEL_FQ void HC_ATTR_SEQ m10870_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10870_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10870_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10870_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10870_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m10870_a0-pure.cl b/OpenCL/m10870_a0-pure.cl index 88c8c3af4..15bd04d9e 100644 --- a/OpenCL/m10870_a0-pure.cl +++ b/OpenCL/m10870_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m10870_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10870_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10870_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10870_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m10870_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m10870_a1-optimized.cl b/OpenCL/m10870_a1-optimized.cl index 8bba3c7f3..a2095ed4e 100644 --- a/OpenCL/m10870_a1-optimized.cl +++ b/OpenCL/m10870_a1-optimized.cl @@ -120,7 +120,7 @@ DECLSPEC void sha384_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = 0; } -KERNEL_FQ void HC_ATTR_SEQ m10870_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10870_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -276,15 +276,15 @@ KERNEL_FQ void HC_ATTR_SEQ m10870_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10870_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10870_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10870_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10870_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10870_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10870_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -452,10 +452,10 @@ KERNEL_FQ void HC_ATTR_SEQ m10870_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10870_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10870_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m10870_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10870_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m10870_a1-pure.cl b/OpenCL/m10870_a1-pure.cl index a178dbf58..99776d0f6 100644 --- a/OpenCL/m10870_a1-pure.cl +++ b/OpenCL/m10870_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m10870_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10870_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10870_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10870_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m10870_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m10870_a3-optimized.cl b/OpenCL/m10870_a3-optimized.cl index 3f291d6f8..ec1d7e675 100644 --- a/OpenCL/m10870_a3-optimized.cl +++ b/OpenCL/m10870_a3-optimized.cl @@ -256,7 +256,7 @@ DECLSPEC void m10870s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m10870_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10870_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -296,7 +296,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10870_m04 (KERN_ATTR_VECTOR ()) m10870m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10870_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10870_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -336,7 +336,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10870_m08 (KERN_ATTR_VECTOR ()) m10870m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10870_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10870_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -376,7 +376,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10870_m16 (KERN_ATTR_VECTOR ()) m10870m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10870_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10870_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -416,7 +416,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10870_s04 (KERN_ATTR_VECTOR ()) m10870s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10870_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10870_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -456,7 +456,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10870_s08 (KERN_ATTR_VECTOR ()) m10870s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m10870_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10870_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m10870_a3-pure.cl b/OpenCL/m10870_a3-pure.cl index 2196964d6..115016dc4 100644 --- a/OpenCL/m10870_a3-pure.cl +++ b/OpenCL/m10870_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha384.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m10870_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10870_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10870_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m10870_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m10870_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m10900-pure.cl b/OpenCL/m10900-pure.cl index 261555f19..3e19c16a4 100644 --- a/OpenCL/m10900-pure.cl +++ b/OpenCL/m10900-pure.cl @@ -75,7 +75,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m10900_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) +KERNEL_FQ KERNEL_FA void m10900_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) { /** * base @@ -159,7 +159,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10900_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m10900_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) +KERNEL_FQ KERNEL_FA void m10900_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) { const u64 gid = get_global_id (0); @@ -265,7 +265,7 @@ KERNEL_FQ void HC_ATTR_SEQ m10900_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m10900_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) +KERNEL_FQ KERNEL_FA void m10900_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) { /** * base diff --git a/OpenCL/m11000_a0-optimized.cl b/OpenCL/m11000_a0-optimized.cl index 0cb23bc5f..5103db800 100644 --- a/OpenCL/m11000_a0-optimized.cl +++ b/OpenCL/m11000_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m11000_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11000_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -305,15 +305,15 @@ KERNEL_FQ void HC_ATTR_SEQ m11000_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11000_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11000_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11000_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11000_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11000_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11000_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -614,10 +614,10 @@ KERNEL_FQ void HC_ATTR_SEQ m11000_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11000_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11000_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11000_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11000_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m11000_a0-pure.cl b/OpenCL/m11000_a0-pure.cl index b4b9ecc80..f9d468470 100644 --- a/OpenCL/m11000_a0-pure.cl +++ b/OpenCL/m11000_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m11000_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11000_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -64,7 +64,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11000_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11000_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11000_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m11000_a1-optimized.cl b/OpenCL/m11000_a1-optimized.cl index d7cf4abcb..5851f5501 100644 --- a/OpenCL/m11000_a1-optimized.cl +++ b/OpenCL/m11000_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m11000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11000_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -361,15 +361,15 @@ KERNEL_FQ void HC_ATTR_SEQ m11000_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11000_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11000_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11000_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -728,10 +728,10 @@ KERNEL_FQ void HC_ATTR_SEQ m11000_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11000_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11000_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m11000_a1-pure.cl b/OpenCL/m11000_a1-pure.cl index 36ccb13b7..9a71ab94d 100644 --- a/OpenCL/m11000_a1-pure.cl +++ b/OpenCL/m11000_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m11000_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11000_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -58,7 +58,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11000_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11000_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11000_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m11000_a3-optimized.cl b/OpenCL/m11000_a3-optimized.cl index 73216677d..a35bb460c 100644 --- a/OpenCL/m11000_a3-optimized.cl +++ b/OpenCL/m11000_a3-optimized.cl @@ -550,7 +550,7 @@ DECLSPEC void m11000s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m11000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11000_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -599,7 +599,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11000_m04 (KERN_ATTR_BASIC ()) m11000m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m11000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11000_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -648,7 +648,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11000_m08 (KERN_ATTR_BASIC ()) m11000m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m11000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11000_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -697,7 +697,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11000_m16 (KERN_ATTR_BASIC ()) m11000m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m11000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11000_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -746,7 +746,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11000_s04 (KERN_ATTR_BASIC ()) m11000s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m11000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11000_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -795,7 +795,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11000_s08 (KERN_ATTR_BASIC ()) m11000s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m11000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11000_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m11000_a3-pure.cl b/OpenCL/m11000_a3-pure.cl index 20fcd77ae..4892b6af3 100644 --- a/OpenCL/m11000_a3-pure.cl +++ b/OpenCL/m11000_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m11000_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m11000_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -75,7 +75,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11000_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11000_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m11000_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m11100_a0-optimized.cl b/OpenCL/m11100_a0-optimized.cl index 353208664..44cd453df 100644 --- a/OpenCL/m11100_a0-optimized.cl +++ b/OpenCL/m11100_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m11100_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11100_m04 (KERN_ATTR_RULES ()) { /** * base @@ -354,15 +354,15 @@ KERNEL_FQ void HC_ATTR_SEQ m11100_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11100_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11100_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11100_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11100_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11100_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11100_s04 (KERN_ATTR_RULES ()) { /** * base @@ -703,10 +703,10 @@ KERNEL_FQ void HC_ATTR_SEQ m11100_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11100_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11100_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11100_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11100_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m11100_a0-pure.cl b/OpenCL/m11100_a0-pure.cl index e924cf779..728ad90df 100644 --- a/OpenCL/m11100_a0-pure.cl +++ b/OpenCL/m11100_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m11100_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11100_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -174,7 +174,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11100_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11100_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11100_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m11100_a1-optimized.cl b/OpenCL/m11100_a1-optimized.cl index 6b93cf1aa..6b6182bf9 100644 --- a/OpenCL/m11100_a1-optimized.cl +++ b/OpenCL/m11100_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m11100_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11100_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -412,15 +412,15 @@ KERNEL_FQ void HC_ATTR_SEQ m11100_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11100_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11100_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11100_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11100_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11100_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11100_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -821,10 +821,10 @@ KERNEL_FQ void HC_ATTR_SEQ m11100_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11100_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11100_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11100_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11100_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m11100_a1-pure.cl b/OpenCL/m11100_a1-pure.cl index 9fc017665..8e485d844 100644 --- a/OpenCL/m11100_a1-pure.cl +++ b/OpenCL/m11100_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m11100_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11100_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -170,7 +170,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11100_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11100_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11100_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m11100_a3-optimized.cl b/OpenCL/m11100_a3-optimized.cl index 96256abdd..5781e0bfd 100644 --- a/OpenCL/m11100_a3-optimized.cl +++ b/OpenCL/m11100_a3-optimized.cl @@ -645,7 +645,7 @@ DECLSPEC void m11100s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m11100_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11100_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -715,7 +715,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11100_m04 (KERN_ATTR_BASIC ()) m11100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m11100_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11100_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -785,7 +785,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11100_m08 (KERN_ATTR_BASIC ()) m11100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m11100_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11100_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -855,7 +855,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11100_m16 (KERN_ATTR_BASIC ()) m11100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m11100_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11100_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -925,7 +925,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11100_s04 (KERN_ATTR_BASIC ()) m11100s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m11100_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11100_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -995,7 +995,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11100_s08 (KERN_ATTR_BASIC ()) m11100s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m11100_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11100_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m11100_a3-pure.cl b/OpenCL/m11100_a3-pure.cl index f9c1174a6..450965776 100644 --- a/OpenCL/m11100_a3-pure.cl +++ b/OpenCL/m11100_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m11100_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m11100_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -213,7 +213,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11100_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11100_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m11100_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m11200_a0-optimized.cl b/OpenCL/m11200_a0-optimized.cl index c10a3c12b..4898d94ae 100644 --- a/OpenCL/m11200_a0-optimized.cl +++ b/OpenCL/m11200_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m11200_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11200_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -470,15 +470,15 @@ KERNEL_FQ void HC_ATTR_SEQ m11200_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11200_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11200_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11200_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11200_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11200_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11200_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -944,10 +944,10 @@ KERNEL_FQ void HC_ATTR_SEQ m11200_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11200_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11200_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11200_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11200_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m11200_a0-pure.cl b/OpenCL/m11200_a0-pure.cl index 1e723af07..0fddb9a46 100644 --- a/OpenCL/m11200_a0-pure.cl +++ b/OpenCL/m11200_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m11200_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11200_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -132,7 +132,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11200_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11200_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11200_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m11200_a1-optimized.cl b/OpenCL/m11200_a1-optimized.cl index 5821478a6..fe734cf1b 100644 --- a/OpenCL/m11200_a1-optimized.cl +++ b/OpenCL/m11200_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m11200_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11200_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -526,15 +526,15 @@ KERNEL_FQ void HC_ATTR_SEQ m11200_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11200_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11200_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11200_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11200_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11200_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11200_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -1058,10 +1058,10 @@ KERNEL_FQ void HC_ATTR_SEQ m11200_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11200_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11200_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11200_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11200_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m11200_a1-pure.cl b/OpenCL/m11200_a1-pure.cl index 99edaf1b9..7e0c5c3e7 100644 --- a/OpenCL/m11200_a1-pure.cl +++ b/OpenCL/m11200_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m11200_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11200_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -128,7 +128,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11200_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11200_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11200_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m11200_a3-optimized.cl b/OpenCL/m11200_a3-optimized.cl index 296d23fb2..1ce0ff377 100644 --- a/OpenCL/m11200_a3-optimized.cl +++ b/OpenCL/m11200_a3-optimized.cl @@ -880,7 +880,7 @@ DECLSPEC void m11200s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m11200_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11200_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -933,7 +933,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11200_m04 (KERN_ATTR_BASIC ()) m11200m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m11200_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11200_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -986,7 +986,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11200_m08 (KERN_ATTR_BASIC ()) m11200m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m11200_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11200_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -1039,7 +1039,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11200_m16 (KERN_ATTR_BASIC ()) m11200m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m11200_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11200_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1092,7 +1092,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11200_s04 (KERN_ATTR_BASIC ()) m11200s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m11200_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11200_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1145,7 +1145,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11200_s08 (KERN_ATTR_BASIC ()) m11200s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m11200_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11200_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m11200_a3-pure.cl b/OpenCL/m11200_a3-pure.cl index 170403f6e..0578f3a56 100644 --- a/OpenCL/m11200_a3-pure.cl +++ b/OpenCL/m11200_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m11200_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m11200_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -155,7 +155,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11200_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11200_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m11200_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m11300-pure.cl b/OpenCL/m11300-pure.cl index 119dddd94..438f806f7 100644 --- a/OpenCL/m11300-pure.cl +++ b/OpenCL/m11300-pure.cl @@ -89,7 +89,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void HC_ATTR_SEQ m11300_init (KERN_ATTR_TMPS_ESALT (bitcoin_wallet_tmp_t, bitcoin_wallet_t)) +KERNEL_FQ KERNEL_FA void m11300_init (KERN_ATTR_TMPS_ESALT (bitcoin_wallet_tmp_t, bitcoin_wallet_t)) { /** * base @@ -119,7 +119,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11300_init (KERN_ATTR_TMPS_ESALT (bitcoin_wallet_tmp tmps[gid].dgst[7] = ctx.h[7]; } -KERNEL_FQ void HC_ATTR_SEQ m11300_loop (KERN_ATTR_TMPS_ESALT (bitcoin_wallet_tmp_t, bitcoin_wallet_t)) +KERNEL_FQ KERNEL_FA void m11300_loop (KERN_ATTR_TMPS_ESALT (bitcoin_wallet_tmp_t, bitcoin_wallet_t)) { const u64 gid = get_global_id (0); @@ -211,7 +211,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11300_loop (KERN_ATTR_TMPS_ESALT (bitcoin_wallet_tmp unpack64v (tmps, dgst, gid, 7, t7); } -KERNEL_FQ void HC_ATTR_SEQ m11300_comp (KERN_ATTR_TMPS_ESALT (bitcoin_wallet_tmp_t, bitcoin_wallet_t)) +KERNEL_FQ KERNEL_FA void m11300_comp (KERN_ATTR_TMPS_ESALT (bitcoin_wallet_tmp_t, bitcoin_wallet_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m11400_a0-pure.cl b/OpenCL/m11400_a0-pure.cl index 6e55285df..fe3e08c3e 100644 --- a/OpenCL/m11400_a0-pure.cl +++ b/OpenCL/m11400_a0-pure.cl @@ -38,7 +38,7 @@ typedef struct sip #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m11400_mxx (KERN_ATTR_RULES_ESALT (sip_t)) +KERNEL_FQ KERNEL_FA void m11400_mxx (KERN_ATTR_RULES_ESALT (sip_t)) { /** * modifier @@ -136,7 +136,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11400_mxx (KERN_ATTR_RULES_ESALT (sip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m11400_sxx (KERN_ATTR_RULES_ESALT (sip_t)) +KERNEL_FQ KERNEL_FA void m11400_sxx (KERN_ATTR_RULES_ESALT (sip_t)) { /** * modifier diff --git a/OpenCL/m11400_a1-pure.cl b/OpenCL/m11400_a1-pure.cl index 091c1aa3d..823abe3cb 100644 --- a/OpenCL/m11400_a1-pure.cl +++ b/OpenCL/m11400_a1-pure.cl @@ -36,7 +36,7 @@ typedef struct sip #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m11400_mxx (KERN_ATTR_ESALT (sip_t)) +KERNEL_FQ KERNEL_FA void m11400_mxx (KERN_ATTR_ESALT (sip_t)) { /** * modifier @@ -130,7 +130,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11400_mxx (KERN_ATTR_ESALT (sip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m11400_sxx (KERN_ATTR_ESALT (sip_t)) +KERNEL_FQ KERNEL_FA void m11400_sxx (KERN_ATTR_ESALT (sip_t)) { /** * modifier diff --git a/OpenCL/m11400_a3-pure.cl b/OpenCL/m11400_a3-pure.cl index 8eef3eca5..c429e8ff4 100644 --- a/OpenCL/m11400_a3-pure.cl +++ b/OpenCL/m11400_a3-pure.cl @@ -36,7 +36,7 @@ typedef struct sip #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m11400_mxx (KERN_ATTR_VECTOR_ESALT (sip_t)) +KERNEL_FQ KERNEL_FA void m11400_mxx (KERN_ATTR_VECTOR_ESALT (sip_t)) { /** * modifier @@ -156,7 +156,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11400_mxx (KERN_ATTR_VECTOR_ESALT (sip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m11400_sxx (KERN_ATTR_VECTOR_ESALT (sip_t)) +KERNEL_FQ KERNEL_FA void m11400_sxx (KERN_ATTR_VECTOR_ESALT (sip_t)) { /** * modifier diff --git a/OpenCL/m11500_a0-optimized.cl b/OpenCL/m11500_a0-optimized.cl index 6eac6eea6..8ce45c649 100644 --- a/OpenCL/m11500_a0-optimized.cl +++ b/OpenCL/m11500_a0-optimized.cl @@ -135,7 +135,7 @@ DECLSPEC u32x crc32 (PRIVATE_AS const u32x *w, const u32 pw_len, const u32 iv) return ~a; } -KERNEL_FQ void HC_ATTR_SEQ m11500_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11500_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -215,15 +215,15 @@ KERNEL_FQ void HC_ATTR_SEQ m11500_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11500_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11500_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11500_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11500_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11500_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11500_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -315,10 +315,10 @@ KERNEL_FQ void HC_ATTR_SEQ m11500_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11500_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11500_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11500_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11500_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m11500_a0-pure.cl b/OpenCL/m11500_a0-pure.cl index e8b29c3de..4b37034c1 100644 --- a/OpenCL/m11500_a0-pure.cl +++ b/OpenCL/m11500_a0-pure.cl @@ -123,7 +123,7 @@ DECLSPEC u32x crc32 (PRIVATE_AS const u32x *w, const u32 pw_len, const u32 iv) return ~a; } -KERNEL_FQ void HC_ATTR_SEQ m11500_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11500_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -169,7 +169,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11500_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11500_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11500_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m11500_a1-optimized.cl b/OpenCL/m11500_a1-optimized.cl index e7f4e1fd7..78ff20370 100644 --- a/OpenCL/m11500_a1-optimized.cl +++ b/OpenCL/m11500_a1-optimized.cl @@ -133,7 +133,7 @@ DECLSPEC u32x crc32 (PRIVATE_AS const u32x *w, const u32 pw_len, const u32 iv) return ~a; } -KERNEL_FQ void HC_ATTR_SEQ m11500_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11500_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -273,15 +273,15 @@ KERNEL_FQ void HC_ATTR_SEQ m11500_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11500_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11500_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11500_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11500_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11500_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11500_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -433,10 +433,10 @@ KERNEL_FQ void HC_ATTR_SEQ m11500_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11500_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11500_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11500_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11500_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m11500_a1-pure.cl b/OpenCL/m11500_a1-pure.cl index d76d7f4f4..4621690ba 100644 --- a/OpenCL/m11500_a1-pure.cl +++ b/OpenCL/m11500_a1-pure.cl @@ -121,7 +121,7 @@ DECLSPEC u32x crc32_g (GLOBAL_AS const u32x *w, const u32 pw_len, const u32 iv) return ~a; } -KERNEL_FQ void HC_ATTR_SEQ m11500_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11500_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -163,7 +163,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11500_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11500_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11500_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m11500_a3-optimized.cl b/OpenCL/m11500_a3-optimized.cl index 2374728e3..5e369be7e 100644 --- a/OpenCL/m11500_a3-optimized.cl +++ b/OpenCL/m11500_a3-optimized.cl @@ -255,7 +255,7 @@ DECLSPEC void m11500s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_BASIC } } -KERNEL_FQ void HC_ATTR_SEQ m11500_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11500_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -295,7 +295,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11500_m04 (KERN_ATTR_BASIC ()) m11500m (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m11500_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11500_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -335,7 +335,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11500_m08 (KERN_ATTR_BASIC ()) m11500m (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m11500_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11500_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -375,7 +375,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11500_m16 (KERN_ATTR_BASIC ()) m11500m (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m11500_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11500_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -415,7 +415,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11500_s04 (KERN_ATTR_BASIC ()) m11500s (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m11500_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11500_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -455,7 +455,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11500_s08 (KERN_ATTR_BASIC ()) m11500s (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m11500_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11500_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m11500_a3-pure.cl b/OpenCL/m11500_a3-pure.cl index 834f9a913..054d61b16 100644 --- a/OpenCL/m11500_a3-pure.cl +++ b/OpenCL/m11500_a3-pure.cl @@ -121,7 +121,7 @@ DECLSPEC u32x crc32 (PRIVATE_AS const u32x *w, const u32 pw_len, const u32 iv) return ~a; } -KERNEL_FQ void HC_ATTR_SEQ m11500_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m11500_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -174,7 +174,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11500_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11500_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m11500_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m11600-optimized.cl b/OpenCL/m11600-optimized.cl index d4c618bf1..2d2eb61d3 100644 --- a/OpenCL/m11600-optimized.cl +++ b/OpenCL/m11600-optimized.cl @@ -40,7 +40,7 @@ typedef struct #define MIN(a,b) (((a) < (b)) ? (a) : (b)) -KERNEL_FQ void HC_ATTR_SEQ m11600_init (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) +KERNEL_FQ KERNEL_FA void m11600_init (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) { /** * base @@ -62,7 +62,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11600_init (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, s tmps[gid].len = 0; } -KERNEL_FQ void HC_ATTR_SEQ m11600_loop (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) +KERNEL_FQ KERNEL_FA void m11600_loop (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) { const u64 gid = get_global_id (0); @@ -178,7 +178,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11600_loop (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, s tmps[gid].h[7] = h[7]; } -KERNEL_FQ void HC_ATTR_SEQ m11600_hook23 (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) +KERNEL_FQ KERNEL_FA void m11600_hook23 (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) { const u64 gid = get_global_id (0); @@ -233,7 +233,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11600_hook23 (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, hooks[gid].ukey[7] = hc_swap32_S (h[7]); } -KERNEL_FQ void HC_ATTR_SEQ m11600_comp (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) +KERNEL_FQ KERNEL_FA void m11600_comp (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) { /** * base diff --git a/OpenCL/m11600-pure.cl b/OpenCL/m11600-pure.cl index d02928bc9..85e59a4da 100644 --- a/OpenCL/m11600-pure.cl +++ b/OpenCL/m11600-pure.cl @@ -140,7 +140,7 @@ DECLSPEC void memcat8c_be (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u3 } } -KERNEL_FQ void HC_ATTR_SEQ m11600_init (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) +KERNEL_FQ KERNEL_FA void m11600_init (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) { /** * base @@ -187,7 +187,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11600_init (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, s tmps[gid].len = ctx.len; } -KERNEL_FQ void HC_ATTR_SEQ m11600_loop (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) +KERNEL_FQ KERNEL_FA void m11600_loop (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) { /** * base @@ -286,7 +286,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11600_loop (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, s tmps[gid].len = ctx.len; } -KERNEL_FQ void HC_ATTR_SEQ m11600_hook23 (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) +KERNEL_FQ KERNEL_FA void m11600_hook23 (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) { const u64 gid = get_global_id (0); @@ -341,7 +341,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11600_hook23 (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, hooks[gid].ukey[7] = hc_swap32_S (h[7]); } -KERNEL_FQ void HC_ATTR_SEQ m11600_comp (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) +KERNEL_FQ KERNEL_FA void m11600_comp (KERN_ATTR_TMPS_HOOKS (seven_zip_tmp_t, seven_zip_hook_t)) { /** * base diff --git a/OpenCL/m11700_a0-optimized.cl b/OpenCL/m11700_a0-optimized.cl index 206a44d9e..72bb1db5e 100644 --- a/OpenCL/m11700_a0-optimized.cl +++ b/OpenCL/m11700_a0-optimized.cl @@ -87,7 +87,7 @@ DECLSPEC void streebog_g (PRIVATE_AS u64x *h, PRIVATE_AS const u64x *m, LOCAL_AS } } -KERNEL_FQ void HC_ATTR_SEQ m11700_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11700_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -237,15 +237,15 @@ KERNEL_FQ void HC_ATTR_SEQ m11700_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11700_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11700_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11700_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11700_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11700_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11700_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -407,10 +407,10 @@ KERNEL_FQ void HC_ATTR_SEQ m11700_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11700_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11700_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11700_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11700_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m11700_a0-pure.cl b/OpenCL/m11700_a0-pure.cl index a94f9833f..d565046eb 100644 --- a/OpenCL/m11700_a0-pure.cl +++ b/OpenCL/m11700_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m11700_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11700_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -89,7 +89,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11700_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11700_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11700_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m11700_a1-optimized.cl b/OpenCL/m11700_a1-optimized.cl index 4ec7d6e07..9bbbfe1c9 100644 --- a/OpenCL/m11700_a1-optimized.cl +++ b/OpenCL/m11700_a1-optimized.cl @@ -85,7 +85,7 @@ DECLSPEC void streebog_g (PRIVATE_AS u64x *h, PRIVATE_AS const u64x *m, LOCAL_AS } } -KERNEL_FQ void HC_ATTR_SEQ m11700_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11700_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -293,15 +293,15 @@ KERNEL_FQ void HC_ATTR_SEQ m11700_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11700_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11700_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11700_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11700_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11700_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11700_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -521,10 +521,10 @@ KERNEL_FQ void HC_ATTR_SEQ m11700_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11700_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11700_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11700_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11700_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m11700_a1-pure.cl b/OpenCL/m11700_a1-pure.cl index 429766047..48346a286 100644 --- a/OpenCL/m11700_a1-pure.cl +++ b/OpenCL/m11700_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m11700_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11700_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -85,7 +85,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11700_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11700_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11700_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m11700_a3-optimized.cl b/OpenCL/m11700_a3-optimized.cl index 3af7e6d46..d98def3d8 100644 --- a/OpenCL/m11700_a3-optimized.cl +++ b/OpenCL/m11700_a3-optimized.cl @@ -248,7 +248,7 @@ DECLSPEC void m11700s (LOCAL_AS u64 (*s_sbob_sl64)[256], PRIVATE_AS u32 *w, cons } } -KERNEL_FQ void HC_ATTR_SEQ m11700_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11700_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -312,7 +312,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11700_m04 (KERN_ATTR_BASIC ()) m11700m (s_sbob_sl64, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m11700_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11700_m08 (KERN_ATTR_BASIC ()) { /** * modifier @@ -376,7 +376,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11700_m08 (KERN_ATTR_BASIC ()) m11700m (s_sbob_sl64, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m11700_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11700_m16 (KERN_ATTR_BASIC ()) { /** * modifier @@ -440,7 +440,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11700_m16 (KERN_ATTR_BASIC ()) m11700m (s_sbob_sl64, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m11700_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11700_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -504,7 +504,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11700_s04 (KERN_ATTR_BASIC ()) m11700s (s_sbob_sl64, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m11700_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11700_s08 (KERN_ATTR_BASIC ()) { /** * modifier @@ -568,7 +568,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11700_s08 (KERN_ATTR_BASIC ()) m11700s (s_sbob_sl64, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m11700_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11700_s16 (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m11700_a3-pure.cl b/OpenCL/m11700_a3-pure.cl index 207ee3e93..66d3e37f9 100644 --- a/OpenCL/m11700_a3-pure.cl +++ b/OpenCL/m11700_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m11700_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m11700_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -98,7 +98,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11700_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11700_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m11700_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m11750_a0-pure.cl b/OpenCL/m11750_a0-pure.cl index 04fc48826..92a7487b2 100644 --- a/OpenCL/m11750_a0-pure.cl +++ b/OpenCL/m11750_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m11750_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11750_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -98,7 +98,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11750_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11750_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11750_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m11750_a1-pure.cl b/OpenCL/m11750_a1-pure.cl index 447390f17..bfa16fda1 100644 --- a/OpenCL/m11750_a1-pure.cl +++ b/OpenCL/m11750_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m11750_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11750_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -121,7 +121,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11750_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11750_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11750_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m11750_a3-pure.cl b/OpenCL/m11750_a3-pure.cl index 21eb5d1d2..6bd7fb57e 100644 --- a/OpenCL/m11750_a3-pure.cl +++ b/OpenCL/m11750_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m11750_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m11750_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -107,7 +107,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11750_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11750_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m11750_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m11760_a0-pure.cl b/OpenCL/m11760_a0-pure.cl index eb905e532..1222b9b18 100644 --- a/OpenCL/m11760_a0-pure.cl +++ b/OpenCL/m11760_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m11760_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11760_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -100,7 +100,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11760_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11760_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11760_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m11760_a1-pure.cl b/OpenCL/m11760_a1-pure.cl index 30402cc0d..9a9f9c963 100644 --- a/OpenCL/m11760_a1-pure.cl +++ b/OpenCL/m11760_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m11760_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11760_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -123,7 +123,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11760_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11760_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11760_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m11760_a3-pure.cl b/OpenCL/m11760_a3-pure.cl index 24def4823..89c539460 100644 --- a/OpenCL/m11760_a3-pure.cl +++ b/OpenCL/m11760_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m11760_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m11760_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -109,7 +109,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11760_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11760_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m11760_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m11800_a0-optimized.cl b/OpenCL/m11800_a0-optimized.cl index 9e61a3136..7b5669204 100644 --- a/OpenCL/m11800_a0-optimized.cl +++ b/OpenCL/m11800_a0-optimized.cl @@ -87,7 +87,7 @@ DECLSPEC void streebog_g (PRIVATE_AS u64x *h, PRIVATE_AS const u64x *m, LOCAL_AS } } -KERNEL_FQ void HC_ATTR_SEQ m11800_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11800_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -237,15 +237,15 @@ KERNEL_FQ void HC_ATTR_SEQ m11800_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11800_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11800_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11800_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11800_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11800_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11800_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -407,10 +407,10 @@ KERNEL_FQ void HC_ATTR_SEQ m11800_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11800_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11800_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11800_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11800_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m11800_a0-pure.cl b/OpenCL/m11800_a0-pure.cl index 64c7b29ec..202d2c30a 100644 --- a/OpenCL/m11800_a0-pure.cl +++ b/OpenCL/m11800_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m11800_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11800_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -89,7 +89,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11800_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11800_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11800_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m11800_a1-optimized.cl b/OpenCL/m11800_a1-optimized.cl index ca9ae3f03..031ccd4f7 100644 --- a/OpenCL/m11800_a1-optimized.cl +++ b/OpenCL/m11800_a1-optimized.cl @@ -85,7 +85,7 @@ DECLSPEC void streebog_g (PRIVATE_AS u64x *h, PRIVATE_AS const u64x *m, LOCAL_AS } } -KERNEL_FQ void HC_ATTR_SEQ m11800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11800_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -293,15 +293,15 @@ KERNEL_FQ void HC_ATTR_SEQ m11800_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11800_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11800_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11800_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -521,10 +521,10 @@ KERNEL_FQ void HC_ATTR_SEQ m11800_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11800_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m11800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11800_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m11800_a1-pure.cl b/OpenCL/m11800_a1-pure.cl index e6f1a2550..8de94d8d3 100644 --- a/OpenCL/m11800_a1-pure.cl +++ b/OpenCL/m11800_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m11800_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11800_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -85,7 +85,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11800_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11800_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11800_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m11800_a3-optimized.cl b/OpenCL/m11800_a3-optimized.cl index ff35c2d82..7f97b54f9 100644 --- a/OpenCL/m11800_a3-optimized.cl +++ b/OpenCL/m11800_a3-optimized.cl @@ -248,7 +248,7 @@ DECLSPEC void m11800s (LOCAL_AS u64 (*s_sbob_sl64)[256], PRIVATE_AS u32 *w, cons } } -KERNEL_FQ void HC_ATTR_SEQ m11800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11800_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -312,7 +312,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11800_m04 (KERN_ATTR_BASIC ()) m11800m (s_sbob_sl64, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m11800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11800_m08 (KERN_ATTR_BASIC ()) { /** * modifier @@ -376,7 +376,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11800_m08 (KERN_ATTR_BASIC ()) m11800m (s_sbob_sl64, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m11800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11800_m16 (KERN_ATTR_BASIC ()) { /** * modifier @@ -440,7 +440,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11800_m16 (KERN_ATTR_BASIC ()) m11800m (s_sbob_sl64, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m11800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11800_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -504,7 +504,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11800_s04 (KERN_ATTR_BASIC ()) m11800s (s_sbob_sl64, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m11800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11800_s08 (KERN_ATTR_BASIC ()) { /** * modifier @@ -568,7 +568,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11800_s08 (KERN_ATTR_BASIC ()) m11800s (s_sbob_sl64, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m11800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11800_s16 (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m11800_a3-pure.cl b/OpenCL/m11800_a3-pure.cl index 733b52d8a..33fde0e74 100644 --- a/OpenCL/m11800_a3-pure.cl +++ b/OpenCL/m11800_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m11800_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m11800_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -98,7 +98,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11800_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11800_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m11800_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m11850_a0-pure.cl b/OpenCL/m11850_a0-pure.cl index 2d15e1fdb..f9f72fbac 100644 --- a/OpenCL/m11850_a0-pure.cl +++ b/OpenCL/m11850_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m11850_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11850_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -98,7 +98,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11850_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11850_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11850_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m11850_a1-pure.cl b/OpenCL/m11850_a1-pure.cl index 41c11ad26..8eb3b2a87 100644 --- a/OpenCL/m11850_a1-pure.cl +++ b/OpenCL/m11850_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m11850_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11850_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -121,7 +121,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11850_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11850_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11850_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m11850_a3-pure.cl b/OpenCL/m11850_a3-pure.cl index 6bfa73484..2804d410d 100644 --- a/OpenCL/m11850_a3-pure.cl +++ b/OpenCL/m11850_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m11850_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m11850_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -107,7 +107,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11850_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11850_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m11850_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m11860_a0-pure.cl b/OpenCL/m11860_a0-pure.cl index b0fabfe21..65f8a1fe5 100644 --- a/OpenCL/m11860_a0-pure.cl +++ b/OpenCL/m11860_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m11860_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11860_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -100,7 +100,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11860_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11860_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m11860_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m11860_a1-pure.cl b/OpenCL/m11860_a1-pure.cl index 6acc35462..8bd4459ed 100644 --- a/OpenCL/m11860_a1-pure.cl +++ b/OpenCL/m11860_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m11860_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11860_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -123,7 +123,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11860_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11860_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m11860_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m11860_a3-pure.cl b/OpenCL/m11860_a3-pure.cl index cf1aedc7e..75d3d9129 100644 --- a/OpenCL/m11860_a3-pure.cl +++ b/OpenCL/m11860_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_streebog512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m11860_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m11860_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -109,7 +109,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11860_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m11860_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m11860_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m11900-pure.cl b/OpenCL/m11900-pure.cl index 84fca48a9..d00200784 100644 --- a/OpenCL/m11900-pure.cl +++ b/OpenCL/m11900-pure.cl @@ -67,7 +67,7 @@ DECLSPEC void hmac_md5_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_ md5_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m11900_init (KERN_ATTR_TMPS_ESALT (pbkdf2_md5_tmp_t, pbkdf2_md5_t)) +KERNEL_FQ KERNEL_FA void m11900_init (KERN_ATTR_TMPS_ESALT (pbkdf2_md5_tmp_t, pbkdf2_md5_t)) { /** * base @@ -135,7 +135,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11900_init (KERN_ATTR_TMPS_ESALT (pbkdf2_md5_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m11900_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_md5_tmp_t, pbkdf2_md5_t)) +KERNEL_FQ KERNEL_FA void m11900_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_md5_tmp_t, pbkdf2_md5_t)) { const u64 gid = get_global_id (0); @@ -213,7 +213,7 @@ KERNEL_FQ void HC_ATTR_SEQ m11900_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_md5_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m11900_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_md5_tmp_t, pbkdf2_md5_t)) +KERNEL_FQ KERNEL_FA void m11900_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_md5_tmp_t, pbkdf2_md5_t)) { /** * base diff --git a/OpenCL/m12000-pure.cl b/OpenCL/m12000-pure.cl index 5ade6d791..ae47e1677 100644 --- a/OpenCL/m12000-pure.cl +++ b/OpenCL/m12000-pure.cl @@ -69,7 +69,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m12000_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, pbkdf2_sha1_t)) +KERNEL_FQ KERNEL_FA void m12000_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, pbkdf2_sha1_t)) { /** * base @@ -141,7 +141,7 @@ KERNEL_FQ void HC_ATTR_SEQ m12000_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m12000_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, pbkdf2_sha1_t)) +KERNEL_FQ KERNEL_FA void m12000_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, pbkdf2_sha1_t)) { const u64 gid = get_global_id (0); @@ -226,7 +226,7 @@ KERNEL_FQ void HC_ATTR_SEQ m12000_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m12000_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, pbkdf2_sha1_t)) +KERNEL_FQ KERNEL_FA void m12000_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, pbkdf2_sha1_t)) { /** * base diff --git a/OpenCL/m12200-pure.cl b/OpenCL/m12200-pure.cl index cedb389b6..91d55adaf 100644 --- a/OpenCL/m12200-pure.cl +++ b/OpenCL/m12200-pure.cl @@ -23,7 +23,7 @@ typedef struct ecryptfs_tmp } ecryptfs_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m12200_init (KERN_ATTR_TMPS (ecryptfs_tmp_t)) +KERNEL_FQ KERNEL_FA void m12200_init (KERN_ATTR_TMPS (ecryptfs_tmp_t)) { /** * base @@ -53,7 +53,7 @@ KERNEL_FQ void HC_ATTR_SEQ m12200_init (KERN_ATTR_TMPS (ecryptfs_tmp_t)) tmps[gid].out[7] = ctx.h[7]; } -KERNEL_FQ void HC_ATTR_SEQ m12200_loop (KERN_ATTR_TMPS (ecryptfs_tmp_t)) +KERNEL_FQ KERNEL_FA void m12200_loop (KERN_ATTR_TMPS (ecryptfs_tmp_t)) { const u64 gid = get_global_id (0); @@ -162,7 +162,7 @@ KERNEL_FQ void HC_ATTR_SEQ m12200_loop (KERN_ATTR_TMPS (ecryptfs_tmp_t)) unpack64v (tmps, out, gid, 7, t7); } -KERNEL_FQ void HC_ATTR_SEQ m12200_comp (KERN_ATTR_TMPS (ecryptfs_tmp_t)) +KERNEL_FQ KERNEL_FA void m12200_comp (KERN_ATTR_TMPS (ecryptfs_tmp_t)) { /** * base diff --git a/OpenCL/m12300-pure.cl b/OpenCL/m12300-pure.cl index 96d013826..f5d7318f2 100644 --- a/OpenCL/m12300-pure.cl +++ b/OpenCL/m12300-pure.cl @@ -85,7 +85,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void HC_ATTR_SEQ m12300_init (KERN_ATTR_TMPS (oraclet_tmp_t)) +KERNEL_FQ KERNEL_FA void m12300_init (KERN_ATTR_TMPS (oraclet_tmp_t)) { /** * base @@ -224,7 +224,7 @@ KERNEL_FQ void HC_ATTR_SEQ m12300_init (KERN_ATTR_TMPS (oraclet_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m12300_loop (KERN_ATTR_TMPS (oraclet_tmp_t)) +KERNEL_FQ KERNEL_FA void m12300_loop (KERN_ATTR_TMPS (oraclet_tmp_t)) { const u64 gid = get_global_id (0); @@ -350,7 +350,7 @@ KERNEL_FQ void HC_ATTR_SEQ m12300_loop (KERN_ATTR_TMPS (oraclet_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m12300_comp (KERN_ATTR_TMPS (oraclet_tmp_t)) +KERNEL_FQ KERNEL_FA void m12300_comp (KERN_ATTR_TMPS (oraclet_tmp_t)) { /** * base diff --git a/OpenCL/m12400-pure.cl b/OpenCL/m12400-pure.cl index bc718706b..19bc2a8ca 100644 --- a/OpenCL/m12400-pure.cl +++ b/OpenCL/m12400-pure.cl @@ -497,7 +497,7 @@ DECLSPEC void _des_crypt_encrypt (PRIVATE_AS u32 *iv, u32 mask, u32 rounds, PRIV iv[1] = l; } -KERNEL_FQ void HC_ATTR_SEQ m12400_init (KERN_ATTR_TMPS (bsdicrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m12400_init (KERN_ATTR_TMPS (bsdicrypt_tmp_t)) { /** * base @@ -633,7 +633,7 @@ KERNEL_FQ void HC_ATTR_SEQ m12400_init (KERN_ATTR_TMPS (bsdicrypt_tmp_t)) tmps[gid].iv[1] = 0; } -KERNEL_FQ void HC_ATTR_SEQ m12400_loop (KERN_ATTR_TMPS (bsdicrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m12400_loop (KERN_ATTR_TMPS (bsdicrypt_tmp_t)) { /** * base @@ -730,7 +730,7 @@ KERNEL_FQ void HC_ATTR_SEQ m12400_loop (KERN_ATTR_TMPS (bsdicrypt_tmp_t)) tmps[gid].iv[1] = iv[1]; } -KERNEL_FQ void HC_ATTR_SEQ m12400_comp (KERN_ATTR_TMPS (bsdicrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m12400_comp (KERN_ATTR_TMPS (bsdicrypt_tmp_t)) { /** * base diff --git a/OpenCL/m12500-optimized.cl b/OpenCL/m12500-optimized.cl index 06c12abb2..c0e42f123 100644 --- a/OpenCL/m12500-optimized.cl +++ b/OpenCL/m12500-optimized.cl @@ -31,7 +31,7 @@ typedef struct rar3_tmp } rar3_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m12500_init (KERN_ATTR_TMPS (rar3_tmp_t)) +KERNEL_FQ KERNEL_FA void m12500_init (KERN_ATTR_TMPS (rar3_tmp_t)) { /** * base @@ -48,7 +48,7 @@ KERNEL_FQ void HC_ATTR_SEQ m12500_init (KERN_ATTR_TMPS (rar3_tmp_t)) tmps[gid].dgst[0][4] = SHA1M_E; } -KERNEL_FQ void HC_ATTR_SEQ m12500_loop (KERN_ATTR_TMPS (rar3_tmp_t)) +KERNEL_FQ KERNEL_FA void m12500_loop (KERN_ATTR_TMPS (rar3_tmp_t)) { const u64 gid = get_global_id (0); @@ -237,7 +237,7 @@ KERNEL_FQ void HC_ATTR_SEQ m12500_loop (KERN_ATTR_TMPS (rar3_tmp_t)) tmps[gid].dgst[init_pos + 1][4] = dgst[4]; } -KERNEL_FQ void HC_ATTR_SEQ m12500_comp (KERN_ATTR_TMPS (rar3_tmp_t)) +KERNEL_FQ KERNEL_FA void m12500_comp (KERN_ATTR_TMPS (rar3_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m12500-pure.cl b/OpenCL/m12500-pure.cl index db3f227c1..9ae20dc50 100644 --- a/OpenCL/m12500-pure.cl +++ b/OpenCL/m12500-pure.cl @@ -728,7 +728,7 @@ DECLSPEC void sha1_update_rar29 (PRIVATE_AS sha1_ctx_t *ctx, PRIVATE_AS u32 *w, } } -KERNEL_FQ void HC_ATTR_SEQ m12500_init (KERN_ATTR_TMPS (rar3_tmp_t)) +KERNEL_FQ KERNEL_FA void m12500_init (KERN_ATTR_TMPS (rar3_tmp_t)) { /** * base @@ -796,7 +796,7 @@ KERNEL_FQ void HC_ATTR_SEQ m12500_init (KERN_ATTR_TMPS (rar3_tmp_t)) tmps[gid].iv[3] = 0; } -KERNEL_FQ void HC_ATTR_SEQ m12500_loop (KERN_ATTR_TMPS (rar3_tmp_t)) +KERNEL_FQ KERNEL_FA void m12500_loop (KERN_ATTR_TMPS (rar3_tmp_t)) { const u64 gid = get_global_id (0); @@ -911,7 +911,7 @@ KERNEL_FQ void HC_ATTR_SEQ m12500_loop (KERN_ATTR_TMPS (rar3_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m12500_comp (KERN_ATTR_TMPS (rar3_tmp_t)) +KERNEL_FQ KERNEL_FA void m12500_comp (KERN_ATTR_TMPS (rar3_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m12600_a0-optimized.cl b/OpenCL/m12600_a0-optimized.cl index cfbe35302..ddc22b9b5 100644 --- a/OpenCL/m12600_a0-optimized.cl +++ b/OpenCL/m12600_a0-optimized.cl @@ -29,7 +29,7 @@ #define uint_to_hex_upper8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m12600_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m12600_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -361,15 +361,15 @@ KERNEL_FQ void HC_ATTR_SEQ m12600_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m12600_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m12600_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m12600_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m12600_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m12600_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m12600_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -716,10 +716,10 @@ KERNEL_FQ void HC_ATTR_SEQ m12600_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m12600_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m12600_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m12600_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m12600_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m12600_a0-pure.cl b/OpenCL/m12600_a0-pure.cl index d988fc04f..5f4d61093 100644 --- a/OpenCL/m12600_a0-pure.cl +++ b/OpenCL/m12600_a0-pure.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m12600_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m12600_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -165,7 +165,7 @@ KERNEL_FQ void HC_ATTR_SEQ m12600_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m12600_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m12600_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m12600_a1-optimized.cl b/OpenCL/m12600_a1-optimized.cl index 0a8750a93..5237e904f 100644 --- a/OpenCL/m12600_a1-optimized.cl +++ b/OpenCL/m12600_a1-optimized.cl @@ -27,7 +27,7 @@ #define uint_to_hex_upper8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m12600_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m12600_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -417,15 +417,15 @@ KERNEL_FQ void HC_ATTR_SEQ m12600_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m12600_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m12600_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m12600_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m12600_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m12600_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m12600_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -830,10 +830,10 @@ KERNEL_FQ void HC_ATTR_SEQ m12600_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m12600_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m12600_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m12600_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m12600_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m12600_a1-pure.cl b/OpenCL/m12600_a1-pure.cl index ee660d497..491eb077e 100644 --- a/OpenCL/m12600_a1-pure.cl +++ b/OpenCL/m12600_a1-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m12600_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m12600_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -161,7 +161,7 @@ KERNEL_FQ void HC_ATTR_SEQ m12600_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m12600_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m12600_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m12600_a3-optimized.cl b/OpenCL/m12600_a3-optimized.cl index 58a53447b..84ca582f7 100644 --- a/OpenCL/m12600_a3-optimized.cl +++ b/OpenCL/m12600_a3-optimized.cl @@ -618,7 +618,7 @@ DECLSPEC void m12600s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m12600_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m12600_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -688,7 +688,7 @@ KERNEL_FQ void HC_ATTR_SEQ m12600_m04 (KERN_ATTR_BASIC ()) m12600m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m12600_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m12600_m08 (KERN_ATTR_BASIC ()) { /** * modifier @@ -758,7 +758,7 @@ KERNEL_FQ void HC_ATTR_SEQ m12600_m08 (KERN_ATTR_BASIC ()) m12600m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m12600_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m12600_m16 (KERN_ATTR_BASIC ()) { /** * modifier @@ -828,7 +828,7 @@ KERNEL_FQ void HC_ATTR_SEQ m12600_m16 (KERN_ATTR_BASIC ()) m12600m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m12600_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m12600_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -898,7 +898,7 @@ KERNEL_FQ void HC_ATTR_SEQ m12600_s04 (KERN_ATTR_BASIC ()) m12600s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m12600_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m12600_s08 (KERN_ATTR_BASIC ()) { /** * modifier @@ -968,7 +968,7 @@ KERNEL_FQ void HC_ATTR_SEQ m12600_s08 (KERN_ATTR_BASIC ()) m12600s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m12600_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m12600_s16 (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m12600_a3-pure.cl b/OpenCL/m12600_a3-pure.cl index 71b3f9007..09b0f889f 100644 --- a/OpenCL/m12600_a3-pure.cl +++ b/OpenCL/m12600_a3-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m12600_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m12600_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -174,7 +174,7 @@ KERNEL_FQ void HC_ATTR_SEQ m12600_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m12600_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m12600_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m12700-pure.cl b/OpenCL/m12700-pure.cl index b164d6514..39a1cc859 100644 --- a/OpenCL/m12700-pure.cl +++ b/OpenCL/m12700-pure.cl @@ -78,7 +78,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m12700_init (KERN_ATTR_TMPS (mywallet_tmp_t)) +KERNEL_FQ KERNEL_FA void m12700_init (KERN_ATTR_TMPS (mywallet_tmp_t)) { /** * base @@ -167,7 +167,7 @@ KERNEL_FQ void HC_ATTR_SEQ m12700_init (KERN_ATTR_TMPS (mywallet_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m12700_loop (KERN_ATTR_TMPS (mywallet_tmp_t)) +KERNEL_FQ KERNEL_FA void m12700_loop (KERN_ATTR_TMPS (mywallet_tmp_t)) { const u64 gid = get_global_id (0); @@ -252,7 +252,7 @@ KERNEL_FQ void HC_ATTR_SEQ m12700_loop (KERN_ATTR_TMPS (mywallet_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m12700_comp (KERN_ATTR_TMPS (mywallet_tmp_t)) +KERNEL_FQ KERNEL_FA void m12700_comp (KERN_ATTR_TMPS (mywallet_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m12800-pure.cl b/OpenCL/m12800-pure.cl index 63557b0c1..4001a8e43 100644 --- a/OpenCL/m12800-pure.cl +++ b/OpenCL/m12800-pure.cl @@ -76,7 +76,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m12800_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) +KERNEL_FQ KERNEL_FA void m12800_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) { /** * base @@ -244,7 +244,7 @@ KERNEL_FQ void HC_ATTR_SEQ m12800_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m12800_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) +KERNEL_FQ KERNEL_FA void m12800_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) { const u64 gid = get_global_id (0); @@ -350,7 +350,7 @@ KERNEL_FQ void HC_ATTR_SEQ m12800_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m12800_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) +KERNEL_FQ KERNEL_FA void m12800_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) { /** * base diff --git a/OpenCL/m12900-pure.cl b/OpenCL/m12900-pure.cl index 02b25953c..98727c3f9 100644 --- a/OpenCL/m12900-pure.cl +++ b/OpenCL/m12900-pure.cl @@ -75,7 +75,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m12900_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) +KERNEL_FQ KERNEL_FA void m12900_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) { /** * base @@ -176,7 +176,7 @@ KERNEL_FQ void HC_ATTR_SEQ m12900_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m12900_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) +KERNEL_FQ KERNEL_FA void m12900_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) { const u64 gid = get_global_id (0); @@ -282,7 +282,7 @@ KERNEL_FQ void HC_ATTR_SEQ m12900_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m12900_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) +KERNEL_FQ KERNEL_FA void m12900_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_t)) { /** * base diff --git a/OpenCL/m13000-pure.cl b/OpenCL/m13000-pure.cl index 30a53d3c8..c83223689 100644 --- a/OpenCL/m13000-pure.cl +++ b/OpenCL/m13000-pure.cl @@ -69,7 +69,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m13000_init (KERN_ATTR_TMPS (pbkdf2_sha256_tmp_t)) +KERNEL_FQ KERNEL_FA void m13000_init (KERN_ATTR_TMPS (pbkdf2_sha256_tmp_t)) { /** * base @@ -153,7 +153,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13000_init (KERN_ATTR_TMPS (pbkdf2_sha256_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13000_loop (KERN_ATTR_TMPS (pbkdf2_sha256_tmp_t)) +KERNEL_FQ KERNEL_FA void m13000_loop (KERN_ATTR_TMPS (pbkdf2_sha256_tmp_t)) { const u64 gid = get_global_id (0); @@ -259,7 +259,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13000_loop (KERN_ATTR_TMPS (pbkdf2_sha256_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13000_comp (KERN_ATTR_TMPS (pbkdf2_sha256_tmp_t)) +KERNEL_FQ KERNEL_FA void m13000_comp (KERN_ATTR_TMPS (pbkdf2_sha256_tmp_t)) { /** * base diff --git a/OpenCL/m13100_a0-optimized.cl b/OpenCL/m13100_a0-optimized.cl index d0d53ee09..5706ceae9 100644 --- a/OpenCL/m13100_a0-optimized.cl +++ b/OpenCL/m13100_a0-optimized.cl @@ -454,7 +454,7 @@ DECLSPEC void kerb_prepare (PRIVATE_AS const u32 *w0, PRIVATE_AS const u32 *w1, hmac_md5_run (w0_t, w1_t, w2_t, w3_t, ipad, opad, digest); } -KERNEL_FQ void HC_ATTR_SEQ m13100_m04 (KERN_ATTR_RULES_ESALT (krb5tgs_t)) +KERNEL_FQ KERNEL_FA void m13100_m04 (KERN_ATTR_RULES_ESALT (krb5tgs_t)) { /** * modifier @@ -542,15 +542,15 @@ KERNEL_FQ void HC_ATTR_SEQ m13100_m04 (KERN_ATTR_RULES_ESALT (krb5tgs_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13100_m08 (KERN_ATTR_RULES_ESALT (krb5tgs_t)) +KERNEL_FQ KERNEL_FA void m13100_m08 (KERN_ATTR_RULES_ESALT (krb5tgs_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m13100_m16 (KERN_ATTR_RULES_ESALT (krb5tgs_t)) +KERNEL_FQ KERNEL_FA void m13100_m16 (KERN_ATTR_RULES_ESALT (krb5tgs_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m13100_s04 (KERN_ATTR_RULES_ESALT (krb5tgs_t)) +KERNEL_FQ KERNEL_FA void m13100_s04 (KERN_ATTR_RULES_ESALT (krb5tgs_t)) { /** * modifier @@ -638,10 +638,10 @@ KERNEL_FQ void HC_ATTR_SEQ m13100_s04 (KERN_ATTR_RULES_ESALT (krb5tgs_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13100_s08 (KERN_ATTR_RULES_ESALT (krb5tgs_t)) +KERNEL_FQ KERNEL_FA void m13100_s08 (KERN_ATTR_RULES_ESALT (krb5tgs_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m13100_s16 (KERN_ATTR_RULES_ESALT (krb5tgs_t)) +KERNEL_FQ KERNEL_FA void m13100_s16 (KERN_ATTR_RULES_ESALT (krb5tgs_t)) { } diff --git a/OpenCL/m13100_a0-pure.cl b/OpenCL/m13100_a0-pure.cl index 976f58259..0eb6e08da 100644 --- a/OpenCL/m13100_a0-pure.cl +++ b/OpenCL/m13100_a0-pure.cl @@ -266,7 +266,7 @@ DECLSPEC void kerb_prepare (PRIVATE_AS const u32 *K, PRIVATE_AS const u32 *check K2[3] = ctx1.opad.h[3]; } -KERNEL_FQ void HC_ATTR_SEQ m13100_mxx (KERN_ATTR_RULES_ESALT (krb5tgs_t)) +KERNEL_FQ KERNEL_FA void m13100_mxx (KERN_ATTR_RULES_ESALT (krb5tgs_t)) { /** * modifier @@ -326,7 +326,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13100_mxx (KERN_ATTR_RULES_ESALT (krb5tgs_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13100_sxx (KERN_ATTR_RULES_ESALT (krb5tgs_t)) +KERNEL_FQ KERNEL_FA void m13100_sxx (KERN_ATTR_RULES_ESALT (krb5tgs_t)) { /** * modifier diff --git a/OpenCL/m13100_a1-optimized.cl b/OpenCL/m13100_a1-optimized.cl index 1b64e10ed..4f10747a6 100644 --- a/OpenCL/m13100_a1-optimized.cl +++ b/OpenCL/m13100_a1-optimized.cl @@ -452,7 +452,7 @@ DECLSPEC void kerb_prepare (PRIVATE_AS const u32 *w0, PRIVATE_AS const u32 *w1, hmac_md5_run (w0_t, w1_t, w2_t, w3_t, ipad, opad, digest); } -KERNEL_FQ void HC_ATTR_SEQ m13100_m04 (KERN_ATTR_ESALT (krb5tgs_t)) +KERNEL_FQ KERNEL_FA void m13100_m04 (KERN_ATTR_ESALT (krb5tgs_t)) { /** * modifier @@ -589,15 +589,15 @@ KERNEL_FQ void HC_ATTR_SEQ m13100_m04 (KERN_ATTR_ESALT (krb5tgs_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13100_m08 (KERN_ATTR_ESALT (krb5tgs_t)) +KERNEL_FQ KERNEL_FA void m13100_m08 (KERN_ATTR_ESALT (krb5tgs_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m13100_m16 (KERN_ATTR_ESALT (krb5tgs_t)) +KERNEL_FQ KERNEL_FA void m13100_m16 (KERN_ATTR_ESALT (krb5tgs_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m13100_s04 (KERN_ATTR_ESALT (krb5tgs_t)) +KERNEL_FQ KERNEL_FA void m13100_s04 (KERN_ATTR_ESALT (krb5tgs_t)) { /** * modifier @@ -734,10 +734,10 @@ KERNEL_FQ void HC_ATTR_SEQ m13100_s04 (KERN_ATTR_ESALT (krb5tgs_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13100_s08 (KERN_ATTR_ESALT (krb5tgs_t)) +KERNEL_FQ KERNEL_FA void m13100_s08 (KERN_ATTR_ESALT (krb5tgs_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m13100_s16 (KERN_ATTR_ESALT (krb5tgs_t)) +KERNEL_FQ KERNEL_FA void m13100_s16 (KERN_ATTR_ESALT (krb5tgs_t)) { } diff --git a/OpenCL/m13100_a1-pure.cl b/OpenCL/m13100_a1-pure.cl index 12ab9b3bd..07cd7fcbc 100644 --- a/OpenCL/m13100_a1-pure.cl +++ b/OpenCL/m13100_a1-pure.cl @@ -264,7 +264,7 @@ DECLSPEC void kerb_prepare (PRIVATE_AS const u32 *K, PRIVATE_AS const u32 *check K2[3] = ctx1.opad.h[3]; } -KERNEL_FQ void HC_ATTR_SEQ m13100_mxx (KERN_ATTR_ESALT (krb5tgs_t)) +KERNEL_FQ KERNEL_FA void m13100_mxx (KERN_ATTR_ESALT (krb5tgs_t)) { /** * modifier @@ -322,7 +322,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13100_mxx (KERN_ATTR_ESALT (krb5tgs_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13100_sxx (KERN_ATTR_ESALT (krb5tgs_t)) +KERNEL_FQ KERNEL_FA void m13100_sxx (KERN_ATTR_ESALT (krb5tgs_t)) { /** * modifier diff --git a/OpenCL/m13100_a3-optimized.cl b/OpenCL/m13100_a3-optimized.cl index dfdf64dcb..ac6de9f82 100644 --- a/OpenCL/m13100_a3-optimized.cl +++ b/OpenCL/m13100_a3-optimized.cl @@ -508,7 +508,7 @@ DECLSPEC void m13100 (LOCAL_AS u32 *S, PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, P } } -KERNEL_FQ void HC_ATTR_SEQ m13100_m04 (KERN_ATTR_ESALT (krb5tgs_t)) +KERNEL_FQ KERNEL_FA void m13100_m04 (KERN_ATTR_ESALT (krb5tgs_t)) { /** * base @@ -559,7 +559,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13100_m04 (KERN_ATTR_ESALT (krb5tgs_t)) m13100 (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m13100_m08 (KERN_ATTR_ESALT (krb5tgs_t)) +KERNEL_FQ KERNEL_FA void m13100_m08 (KERN_ATTR_ESALT (krb5tgs_t)) { /** * base @@ -610,11 +610,11 @@ KERNEL_FQ void HC_ATTR_SEQ m13100_m08 (KERN_ATTR_ESALT (krb5tgs_t)) m13100 (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m13100_m16 (KERN_ATTR_ESALT (krb5tgs_t)) +KERNEL_FQ KERNEL_FA void m13100_m16 (KERN_ATTR_ESALT (krb5tgs_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m13100_s04 (KERN_ATTR_ESALT (krb5tgs_t)) +KERNEL_FQ KERNEL_FA void m13100_s04 (KERN_ATTR_ESALT (krb5tgs_t)) { /** * base @@ -665,7 +665,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13100_s04 (KERN_ATTR_ESALT (krb5tgs_t)) m13100 (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m13100_s08 (KERN_ATTR_ESALT (krb5tgs_t)) +KERNEL_FQ KERNEL_FA void m13100_s08 (KERN_ATTR_ESALT (krb5tgs_t)) { /** * base @@ -716,6 +716,6 @@ KERNEL_FQ void HC_ATTR_SEQ m13100_s08 (KERN_ATTR_ESALT (krb5tgs_t)) m13100 (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m13100_s16 (KERN_ATTR_ESALT (krb5tgs_t)) +KERNEL_FQ KERNEL_FA void m13100_s16 (KERN_ATTR_ESALT (krb5tgs_t)) { } diff --git a/OpenCL/m13100_a3-pure.cl b/OpenCL/m13100_a3-pure.cl index 522278381..960ddadfa 100644 --- a/OpenCL/m13100_a3-pure.cl +++ b/OpenCL/m13100_a3-pure.cl @@ -264,7 +264,7 @@ DECLSPEC void kerb_prepare (PRIVATE_AS const u32 *K, PRIVATE_AS const u32 *check K2[3] = ctx1.opad.h[3]; } -KERNEL_FQ void HC_ATTR_SEQ m13100_mxx (KERN_ATTR_VECTOR_ESALT (krb5tgs_t)) +KERNEL_FQ KERNEL_FA void m13100_mxx (KERN_ATTR_VECTOR_ESALT (krb5tgs_t)) { /** * modifier @@ -335,7 +335,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13100_mxx (KERN_ATTR_VECTOR_ESALT (krb5tgs_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13100_sxx (KERN_ATTR_VECTOR_ESALT (krb5tgs_t)) +KERNEL_FQ KERNEL_FA void m13100_sxx (KERN_ATTR_VECTOR_ESALT (krb5tgs_t)) { /** * modifier diff --git a/OpenCL/m13200-pure.cl b/OpenCL/m13200-pure.cl index e7a6aa7a2..30c697e9b 100644 --- a/OpenCL/m13200-pure.cl +++ b/OpenCL/m13200-pure.cl @@ -20,7 +20,7 @@ typedef struct axcrypt_tmp } axcrypt_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m13200_init (KERN_ATTR_TMPS (axcrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m13200_init (KERN_ATTR_TMPS (axcrypt_tmp_t)) { /** * base @@ -74,7 +74,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13200_init (KERN_ATTR_TMPS (axcrypt_tmp_t)) tmps[gid].cipher[3] = 0; } -KERNEL_FQ void HC_ATTR_SEQ m13200_loop (KERN_ATTR_TMPS (axcrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m13200_loop (KERN_ATTR_TMPS (axcrypt_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -211,7 +211,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13200_loop (KERN_ATTR_TMPS (axcrypt_tmp_t)) tmps[gid].cipher[3] = cipher[3]; } -KERNEL_FQ void HC_ATTR_SEQ m13200_comp (KERN_ATTR_TMPS (axcrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m13200_comp (KERN_ATTR_TMPS (axcrypt_tmp_t)) { /** * base diff --git a/OpenCL/m13300_a0-optimized.cl b/OpenCL/m13300_a0-optimized.cl index b987f600d..2d4622911 100644 --- a/OpenCL/m13300_a0-optimized.cl +++ b/OpenCL/m13300_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m13300_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m13300_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -195,15 +195,15 @@ KERNEL_FQ void HC_ATTR_SEQ m13300_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m13300_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m13300_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m13300_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m13300_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m13300_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m13300_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -394,10 +394,10 @@ KERNEL_FQ void HC_ATTR_SEQ m13300_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m13300_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m13300_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m13300_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m13300_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m13300_a0-pure.cl b/OpenCL/m13300_a0-pure.cl index 1480c683d..bc6da5ee9 100644 --- a/OpenCL/m13300_a0-pure.cl +++ b/OpenCL/m13300_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m13300_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m13300_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -62,7 +62,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13300_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m13300_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m13300_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m13300_a1-optimized.cl b/OpenCL/m13300_a1-optimized.cl index cede4b975..092d8402c 100644 --- a/OpenCL/m13300_a1-optimized.cl +++ b/OpenCL/m13300_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m13300_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m13300_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -251,15 +251,15 @@ KERNEL_FQ void HC_ATTR_SEQ m13300_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m13300_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m13300_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m13300_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m13300_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m13300_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m13300_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -508,10 +508,10 @@ KERNEL_FQ void HC_ATTR_SEQ m13300_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m13300_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m13300_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m13300_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m13300_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m13300_a1-pure.cl b/OpenCL/m13300_a1-pure.cl index 01c8a7be9..48f853213 100644 --- a/OpenCL/m13300_a1-pure.cl +++ b/OpenCL/m13300_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m13300_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m13300_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -58,7 +58,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13300_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m13300_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m13300_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m13300_a3-optimized.cl b/OpenCL/m13300_a3-optimized.cl index a009f8754..1622f8c9a 100644 --- a/OpenCL/m13300_a3-optimized.cl +++ b/OpenCL/m13300_a3-optimized.cl @@ -522,7 +522,7 @@ DECLSPEC void m13300s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m13300_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m13300_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -562,7 +562,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13300_m04 (KERN_ATTR_VECTOR ()) m13300m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m13300_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m13300_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -602,7 +602,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13300_m08 (KERN_ATTR_VECTOR ()) m13300m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m13300_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m13300_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -642,7 +642,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13300_m16 (KERN_ATTR_VECTOR ()) m13300m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m13300_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m13300_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -682,7 +682,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13300_s04 (KERN_ATTR_VECTOR ()) m13300s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m13300_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m13300_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -722,7 +722,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13300_s08 (KERN_ATTR_VECTOR ()) m13300s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m13300_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m13300_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m13300_a3-pure.cl b/OpenCL/m13300_a3-pure.cl index f64e9c3a5..93bace4da 100644 --- a/OpenCL/m13300_a3-pure.cl +++ b/OpenCL/m13300_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m13300_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m13300_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13300_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m13300_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m13300_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m13400-pure.cl b/OpenCL/m13400-pure.cl index a9a41aec0..2d4fc3f02 100644 --- a/OpenCL/m13400-pure.cl +++ b/OpenCL/m13400-pure.cl @@ -45,7 +45,7 @@ typedef struct keepass } keepass_t; -KERNEL_FQ void HC_ATTR_SEQ m13400_init (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, keepass_t)) +KERNEL_FQ KERNEL_FA void m13400_init (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, keepass_t)) { /** * base @@ -164,7 +164,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13400_init (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, kee tmps[gid].tmp_digest[7] = digest[7]; } -KERNEL_FQ void HC_ATTR_SEQ m13400_loop (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, keepass_t)) +KERNEL_FQ KERNEL_FA void m13400_loop (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, keepass_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -252,7 +252,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13400_loop (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, kee tmps[gid].tmp_digest[7] = data1[3]; } -KERNEL_FQ void HC_ATTR_SEQ m13400_comp (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, keepass_t)) +KERNEL_FQ KERNEL_FA void m13400_comp (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, keepass_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13500_a0-optimized.cl b/OpenCL/m13500_a0-optimized.cl index fca00d284..0b0afedb5 100644 --- a/OpenCL/m13500_a0-optimized.cl +++ b/OpenCL/m13500_a0-optimized.cl @@ -27,7 +27,7 @@ typedef struct pstoken } pstoken_t; -KERNEL_FQ void HC_ATTR_SEQ m13500_m04 (KERN_ATTR_RULES_ESALT (pstoken_t)) +KERNEL_FQ KERNEL_FA void m13500_m04 (KERN_ATTR_RULES_ESALT (pstoken_t)) { /** * modifier @@ -444,15 +444,15 @@ KERNEL_FQ void HC_ATTR_SEQ m13500_m04 (KERN_ATTR_RULES_ESALT (pstoken_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13500_m08 (KERN_ATTR_RULES_ESALT (pstoken_t)) +KERNEL_FQ KERNEL_FA void m13500_m08 (KERN_ATTR_RULES_ESALT (pstoken_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m13500_m16 (KERN_ATTR_RULES_ESALT (pstoken_t)) +KERNEL_FQ KERNEL_FA void m13500_m16 (KERN_ATTR_RULES_ESALT (pstoken_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m13500_s04 (KERN_ATTR_RULES_ESALT (pstoken_t)) +KERNEL_FQ KERNEL_FA void m13500_s04 (KERN_ATTR_RULES_ESALT (pstoken_t)) { /** * modifier @@ -881,10 +881,10 @@ KERNEL_FQ void HC_ATTR_SEQ m13500_s04 (KERN_ATTR_RULES_ESALT (pstoken_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13500_s08 (KERN_ATTR_RULES_ESALT (pstoken_t)) +KERNEL_FQ KERNEL_FA void m13500_s08 (KERN_ATTR_RULES_ESALT (pstoken_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m13500_s16 (KERN_ATTR_RULES_ESALT (pstoken_t)) +KERNEL_FQ KERNEL_FA void m13500_s16 (KERN_ATTR_RULES_ESALT (pstoken_t)) { } diff --git a/OpenCL/m13500_a0-pure.cl b/OpenCL/m13500_a0-pure.cl index 991f9c700..4312d3d6a 100644 --- a/OpenCL/m13500_a0-pure.cl +++ b/OpenCL/m13500_a0-pure.cl @@ -26,7 +26,7 @@ typedef struct pstoken } pstoken_t; -KERNEL_FQ void HC_ATTR_SEQ m13500_mxx (KERN_ATTR_RULES_ESALT (pstoken_t)) +KERNEL_FQ KERNEL_FA void m13500_mxx (KERN_ATTR_RULES_ESALT (pstoken_t)) { /** * modifier @@ -101,7 +101,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13500_mxx (KERN_ATTR_RULES_ESALT (pstoken_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13500_sxx (KERN_ATTR_RULES_ESALT (pstoken_t)) +KERNEL_FQ KERNEL_FA void m13500_sxx (KERN_ATTR_RULES_ESALT (pstoken_t)) { /** * modifier diff --git a/OpenCL/m13500_a1-optimized.cl b/OpenCL/m13500_a1-optimized.cl index fe4afda13..823dcc34d 100644 --- a/OpenCL/m13500_a1-optimized.cl +++ b/OpenCL/m13500_a1-optimized.cl @@ -25,7 +25,7 @@ typedef struct pstoken } pstoken_t; -KERNEL_FQ void HC_ATTR_SEQ m13500_m04 (KERN_ATTR_ESALT (pstoken_t)) +KERNEL_FQ KERNEL_FA void m13500_m04 (KERN_ATTR_ESALT (pstoken_t)) { /** * modifier @@ -494,15 +494,15 @@ KERNEL_FQ void HC_ATTR_SEQ m13500_m04 (KERN_ATTR_ESALT (pstoken_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13500_m08 (KERN_ATTR_ESALT (pstoken_t)) +KERNEL_FQ KERNEL_FA void m13500_m08 (KERN_ATTR_ESALT (pstoken_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m13500_m16 (KERN_ATTR_ESALT (pstoken_t)) +KERNEL_FQ KERNEL_FA void m13500_m16 (KERN_ATTR_ESALT (pstoken_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m13500_s04 (KERN_ATTR_ESALT (pstoken_t)) +KERNEL_FQ KERNEL_FA void m13500_s04 (KERN_ATTR_ESALT (pstoken_t)) { /** * modifier @@ -983,10 +983,10 @@ KERNEL_FQ void HC_ATTR_SEQ m13500_s04 (KERN_ATTR_ESALT (pstoken_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13500_s08 (KERN_ATTR_ESALT (pstoken_t)) +KERNEL_FQ KERNEL_FA void m13500_s08 (KERN_ATTR_ESALT (pstoken_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m13500_s16 (KERN_ATTR_ESALT (pstoken_t)) +KERNEL_FQ KERNEL_FA void m13500_s16 (KERN_ATTR_ESALT (pstoken_t)) { } diff --git a/OpenCL/m13500_a1-pure.cl b/OpenCL/m13500_a1-pure.cl index a2d53c3e8..3851b6fab 100644 --- a/OpenCL/m13500_a1-pure.cl +++ b/OpenCL/m13500_a1-pure.cl @@ -24,7 +24,7 @@ typedef struct pstoken } pstoken_t; -KERNEL_FQ void HC_ATTR_SEQ m13500_mxx (KERN_ATTR_ESALT (pstoken_t)) +KERNEL_FQ KERNEL_FA void m13500_mxx (KERN_ATTR_ESALT (pstoken_t)) { /** * modifier @@ -95,7 +95,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13500_mxx (KERN_ATTR_ESALT (pstoken_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13500_sxx (KERN_ATTR_ESALT (pstoken_t)) +KERNEL_FQ KERNEL_FA void m13500_sxx (KERN_ATTR_ESALT (pstoken_t)) { /** * modifier diff --git a/OpenCL/m13500_a3-optimized.cl b/OpenCL/m13500_a3-optimized.cl index 126f56a11..7a942b224 100644 --- a/OpenCL/m13500_a3-optimized.cl +++ b/OpenCL/m13500_a3-optimized.cl @@ -817,7 +817,7 @@ DECLSPEC void m13500s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m13500_m04 (KERN_ATTR_ESALT (pstoken_t)) +KERNEL_FQ KERNEL_FA void m13500_m04 (KERN_ATTR_ESALT (pstoken_t)) { /** * base @@ -866,7 +866,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13500_m04 (KERN_ATTR_ESALT (pstoken_t)) m13500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m13500_m08 (KERN_ATTR_ESALT (pstoken_t)) +KERNEL_FQ KERNEL_FA void m13500_m08 (KERN_ATTR_ESALT (pstoken_t)) { /** * base @@ -915,7 +915,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13500_m08 (KERN_ATTR_ESALT (pstoken_t)) m13500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m13500_m16 (KERN_ATTR_ESALT (pstoken_t)) +KERNEL_FQ KERNEL_FA void m13500_m16 (KERN_ATTR_ESALT (pstoken_t)) { /** * base @@ -964,7 +964,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13500_m16 (KERN_ATTR_ESALT (pstoken_t)) m13500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m13500_s04 (KERN_ATTR_ESALT (pstoken_t)) +KERNEL_FQ KERNEL_FA void m13500_s04 (KERN_ATTR_ESALT (pstoken_t)) { /** * base @@ -1013,7 +1013,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13500_s04 (KERN_ATTR_ESALT (pstoken_t)) m13500s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m13500_s08 (KERN_ATTR_ESALT (pstoken_t)) +KERNEL_FQ KERNEL_FA void m13500_s08 (KERN_ATTR_ESALT (pstoken_t)) { /** * base @@ -1062,7 +1062,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13500_s08 (KERN_ATTR_ESALT (pstoken_t)) m13500s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m13500_s16 (KERN_ATTR_ESALT (pstoken_t)) +KERNEL_FQ KERNEL_FA void m13500_s16 (KERN_ATTR_ESALT (pstoken_t)) { /** * base diff --git a/OpenCL/m13500_a3-pure.cl b/OpenCL/m13500_a3-pure.cl index 80ffdd0fe..f66e71239 100644 --- a/OpenCL/m13500_a3-pure.cl +++ b/OpenCL/m13500_a3-pure.cl @@ -24,7 +24,7 @@ typedef struct pstoken } pstoken_t; -KERNEL_FQ void HC_ATTR_SEQ m13500_mxx (KERN_ATTR_VECTOR_ESALT (pstoken_t)) +KERNEL_FQ KERNEL_FA void m13500_mxx (KERN_ATTR_VECTOR_ESALT (pstoken_t)) { /** * modifier @@ -112,7 +112,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13500_mxx (KERN_ATTR_VECTOR_ESALT (pstoken_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13500_sxx (KERN_ATTR_VECTOR_ESALT (pstoken_t)) +KERNEL_FQ KERNEL_FA void m13500_sxx (KERN_ATTR_VECTOR_ESALT (pstoken_t)) { /** * modifier diff --git a/OpenCL/m13600-pure.cl b/OpenCL/m13600-pure.cl index 0ac35a165..a5577bbaa 100644 --- a/OpenCL/m13600-pure.cl +++ b/OpenCL/m13600-pure.cl @@ -79,7 +79,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m13600_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, zip2_t)) +KERNEL_FQ KERNEL_FA void m13600_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, zip2_t)) { /** * base @@ -188,7 +188,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13600_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m13600_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, zip2_t)) +KERNEL_FQ KERNEL_FA void m13600_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, zip2_t)) { const u64 gid = get_global_id (0); @@ -302,7 +302,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13600_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m13600_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, zip2_t)) +KERNEL_FQ KERNEL_FA void m13600_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, zip2_t)) { /** * base diff --git a/OpenCL/m13711-pure.cl b/OpenCL/m13711-pure.cl index 76ab6d8f3..b7f67269f 100644 --- a/OpenCL/m13711-pure.cl +++ b/OpenCL/m13711-pure.cl @@ -124,7 +124,7 @@ DECLSPEC void hmac_ripemd160_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PR ripemd160_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m13711_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13711_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -254,7 +254,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13711_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13711_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13711_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); @@ -385,7 +385,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13711_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13711_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13711_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -457,7 +457,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13711_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m13711_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13711_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13712-pure.cl b/OpenCL/m13712-pure.cl index a71118ebc..5f3e6f910 100644 --- a/OpenCL/m13712-pure.cl +++ b/OpenCL/m13712-pure.cl @@ -175,7 +175,7 @@ DECLSPEC void hmac_ripemd160_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PR ripemd160_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m13712_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13712_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -305,7 +305,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13712_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13712_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13712_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); @@ -436,7 +436,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13712_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13712_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13712_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -513,7 +513,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13712_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m13712_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13712_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13713-pure.cl b/OpenCL/m13713-pure.cl index 89dd9a58c..7c4296269 100644 --- a/OpenCL/m13713-pure.cl +++ b/OpenCL/m13713-pure.cl @@ -240,7 +240,7 @@ DECLSPEC void hmac_ripemd160_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PR ripemd160_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m13713_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13713_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -370,7 +370,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13713_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13713_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13713_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); @@ -501,7 +501,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13713_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13713_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13713_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -583,7 +583,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13713_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m13713_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13713_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13721-pure.cl b/OpenCL/m13721-pure.cl index ad4fb1f82..2e7c2dd48 100644 --- a/OpenCL/m13721-pure.cl +++ b/OpenCL/m13721-pure.cl @@ -146,7 +146,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void HC_ATTR_SEQ m13721_init (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13721_init (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -308,7 +308,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13721_init (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13721_loop (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13721_loop (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) { const u64 gid = get_global_id (0); @@ -483,7 +483,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13721_loop (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13721_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13721_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -555,7 +555,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13721_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m13721_comp (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13721_comp (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13722-pure.cl b/OpenCL/m13722-pure.cl index fb71d683e..d8c0eacc8 100644 --- a/OpenCL/m13722-pure.cl +++ b/OpenCL/m13722-pure.cl @@ -197,7 +197,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void HC_ATTR_SEQ m13722_init (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13722_init (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -359,7 +359,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13722_init (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13722_loop (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13722_loop (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) { const u64 gid = get_global_id (0); @@ -534,7 +534,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13722_loop (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13722_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13722_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -611,7 +611,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13722_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m13722_comp (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13722_comp (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13723-pure.cl b/OpenCL/m13723-pure.cl index 978d364c5..42e3cf63e 100644 --- a/OpenCL/m13723-pure.cl +++ b/OpenCL/m13723-pure.cl @@ -262,7 +262,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void HC_ATTR_SEQ m13723_init (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13723_init (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -424,7 +424,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13723_init (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13723_loop (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13723_loop (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) { const u64 gid = get_global_id (0); @@ -599,7 +599,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13723_loop (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13723_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13723_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -681,7 +681,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13723_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m13723_comp (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13723_comp (KERN_ATTR_TMPS_ESALT (vc64_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13731-pure.cl b/OpenCL/m13731-pure.cl index 3e0e78ff2..ebd10aecc 100644 --- a/OpenCL/m13731-pure.cl +++ b/OpenCL/m13731-pure.cl @@ -184,7 +184,7 @@ DECLSPEC void hmac_whirlpool_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PR whirlpool_transform_vector (w0, w1, w2, w3, digest, s_MT0, s_MT1, s_MT2, s_MT3, s_MT4, s_MT5, s_MT6, s_MT7); } -KERNEL_FQ void HC_ATTR_SEQ m13731_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13731_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -400,7 +400,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13731_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13731_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13731_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -663,7 +663,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13731_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13731_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13731_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -735,7 +735,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13731_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m13731_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13731_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13732-pure.cl b/OpenCL/m13732-pure.cl index 5e7176021..2b981463f 100644 --- a/OpenCL/m13732-pure.cl +++ b/OpenCL/m13732-pure.cl @@ -235,7 +235,7 @@ DECLSPEC void hmac_whirlpool_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PR whirlpool_transform_vector (w0, w1, w2, w3, digest, s_MT0, s_MT1, s_MT2, s_MT3, s_MT4, s_MT5, s_MT6, s_MT7); } -KERNEL_FQ void HC_ATTR_SEQ m13732_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13732_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -451,7 +451,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13732_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13732_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13732_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -714,7 +714,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13732_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13732_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13732_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -791,7 +791,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13732_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m13732_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13732_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13733-pure.cl b/OpenCL/m13733-pure.cl index ce11c1f1b..afc129827 100644 --- a/OpenCL/m13733-pure.cl +++ b/OpenCL/m13733-pure.cl @@ -300,7 +300,7 @@ DECLSPEC void hmac_whirlpool_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PR whirlpool_transform_vector (w0, w1, w2, w3, digest, s_MT0, s_MT1, s_MT2, s_MT3, s_MT4, s_MT5, s_MT6, s_MT7); } -KERNEL_FQ void HC_ATTR_SEQ m13733_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13733_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -516,7 +516,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13733_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13733_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13733_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -779,7 +779,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13733_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13733_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13733_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -861,7 +861,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13733_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m13733_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13733_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13751-pure.cl b/OpenCL/m13751-pure.cl index 1b01931e5..b504c4c42 100644 --- a/OpenCL/m13751-pure.cl +++ b/OpenCL/m13751-pure.cl @@ -130,7 +130,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m13751_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13751_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -276,7 +276,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13751_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13751_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13751_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); @@ -460,7 +460,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13751_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13751_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13751_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -532,7 +532,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13751_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m13751_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13751_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13752-pure.cl b/OpenCL/m13752-pure.cl index f8ffca28b..f823064cd 100644 --- a/OpenCL/m13752-pure.cl +++ b/OpenCL/m13752-pure.cl @@ -181,7 +181,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m13752_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13752_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -327,7 +327,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13752_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13752_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13752_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); @@ -482,7 +482,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13752_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13752_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13752_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -559,7 +559,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13752_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m13752_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13752_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13753-pure.cl b/OpenCL/m13753-pure.cl index 4d2a90f34..485983b26 100644 --- a/OpenCL/m13753-pure.cl +++ b/OpenCL/m13753-pure.cl @@ -246,7 +246,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m13753_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13753_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -392,7 +392,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13753_init (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13753_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13753_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); @@ -547,7 +547,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13753_loop (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13753_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13753_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -629,7 +629,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13753_loop_extended (KERN_ATTR_TMPS_ESALT (vc_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m13753_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13753_comp (KERN_ATTR_TMPS_ESALT (vc_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13771-pure.cl b/OpenCL/m13771-pure.cl index 8bbedbd55..21d9a1824 100644 --- a/OpenCL/m13771-pure.cl +++ b/OpenCL/m13771-pure.cl @@ -176,7 +176,7 @@ DECLSPEC void hmac_streebog512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, streebog512_g_vector (digest, nullbuf, message, s_sbob_sl64); } -KERNEL_FQ void HC_ATTR_SEQ m13771_init (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13771_init (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -356,7 +356,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13771_init (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, v } } -KERNEL_FQ void HC_ATTR_SEQ m13771_loop (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13771_loop (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -562,7 +562,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13771_loop (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, v } } -KERNEL_FQ void HC_ATTR_SEQ m13771_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13771_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -634,7 +634,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13771_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_sbog } } -KERNEL_FQ void HC_ATTR_SEQ m13771_comp (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13771_comp (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13772-pure.cl b/OpenCL/m13772-pure.cl index a305cc6c2..f6b7d9402 100644 --- a/OpenCL/m13772-pure.cl +++ b/OpenCL/m13772-pure.cl @@ -227,7 +227,7 @@ DECLSPEC void hmac_streebog512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, streebog512_g_vector (digest, nullbuf, message, s_sbob_sl64); } -KERNEL_FQ void HC_ATTR_SEQ m13772_init (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13772_init (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -451,7 +451,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13772_init (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, v tmps[gid].out[i + 7] = tmps[gid].dgst[i + 7]; } -KERNEL_FQ void HC_ATTR_SEQ m13772_loop (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13772_loop (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -657,7 +657,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13772_loop (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, v } } -KERNEL_FQ void HC_ATTR_SEQ m13772_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13772_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -734,7 +734,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13772_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_sbog } } -KERNEL_FQ void HC_ATTR_SEQ m13772_comp (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13772_comp (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13773-pure.cl b/OpenCL/m13773-pure.cl index 3db98fa73..5b9411215 100644 --- a/OpenCL/m13773-pure.cl +++ b/OpenCL/m13773-pure.cl @@ -292,7 +292,7 @@ DECLSPEC void hmac_streebog512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, streebog512_g_vector (digest, nullbuf, message, s_sbob_sl64); } -KERNEL_FQ void HC_ATTR_SEQ m13773_init (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13773_init (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -560,7 +560,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13773_init (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, v tmps[gid].out[i + 7] = tmps[gid].dgst[i + 7]; } -KERNEL_FQ void HC_ATTR_SEQ m13773_loop (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13773_loop (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -766,7 +766,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13773_loop (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, v } } -KERNEL_FQ void HC_ATTR_SEQ m13773_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13773_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -848,7 +848,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13773_loop_extended (KERN_ATTR_TMPS_ESALT (vc64_sbog } } -KERNEL_FQ void HC_ATTR_SEQ m13773_comp (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) +KERNEL_FQ KERNEL_FA void m13773_comp (KERN_ATTR_TMPS_ESALT (vc64_sbog_tmp_t, vc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m13800_a0-optimized.cl b/OpenCL/m13800_a0-optimized.cl index 1f956db85..2562fac9b 100644 --- a/OpenCL/m13800_a0-optimized.cl +++ b/OpenCL/m13800_a0-optimized.cl @@ -410,7 +410,7 @@ DECLSPEC void memcat64c_be (PRIVATE_AS u32x *block, const u32 offset, PRIVATE_AS } } -KERNEL_FQ void HC_ATTR_SEQ m13800_m04 (KERN_ATTR_RULES_ESALT (win8phone_t)) +KERNEL_FQ KERNEL_FA void m13800_m04 (KERN_ATTR_RULES_ESALT (win8phone_t)) { /** * modifier @@ -598,15 +598,15 @@ KERNEL_FQ void HC_ATTR_SEQ m13800_m04 (KERN_ATTR_RULES_ESALT (win8phone_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13800_m08 (KERN_ATTR_RULES_ESALT (win8phone_t)) +KERNEL_FQ KERNEL_FA void m13800_m08 (KERN_ATTR_RULES_ESALT (win8phone_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m13800_m16 (KERN_ATTR_RULES_ESALT (win8phone_t)) +KERNEL_FQ KERNEL_FA void m13800_m16 (KERN_ATTR_RULES_ESALT (win8phone_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m13800_s04 (KERN_ATTR_RULES_ESALT (win8phone_t)) +KERNEL_FQ KERNEL_FA void m13800_s04 (KERN_ATTR_RULES_ESALT (win8phone_t)) { /** * modifier @@ -806,10 +806,10 @@ KERNEL_FQ void HC_ATTR_SEQ m13800_s04 (KERN_ATTR_RULES_ESALT (win8phone_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13800_s08 (KERN_ATTR_RULES_ESALT (win8phone_t)) +KERNEL_FQ KERNEL_FA void m13800_s08 (KERN_ATTR_RULES_ESALT (win8phone_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m13800_s16 (KERN_ATTR_RULES_ESALT (win8phone_t)) +KERNEL_FQ KERNEL_FA void m13800_s16 (KERN_ATTR_RULES_ESALT (win8phone_t)) { } diff --git a/OpenCL/m13800_a0-pure.cl b/OpenCL/m13800_a0-pure.cl index bfaf22173..ba45d033e 100644 --- a/OpenCL/m13800_a0-pure.cl +++ b/OpenCL/m13800_a0-pure.cl @@ -22,7 +22,7 @@ typedef struct win8phone } win8phone_t; -KERNEL_FQ void HC_ATTR_SEQ m13800_mxx (KERN_ATTR_RULES_ESALT (win8phone_t)) +KERNEL_FQ KERNEL_FA void m13800_mxx (KERN_ATTR_RULES_ESALT (win8phone_t)) { /** * modifier @@ -68,7 +68,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13800_mxx (KERN_ATTR_RULES_ESALT (win8phone_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13800_sxx (KERN_ATTR_RULES_ESALT (win8phone_t)) +KERNEL_FQ KERNEL_FA void m13800_sxx (KERN_ATTR_RULES_ESALT (win8phone_t)) { /** * modifier diff --git a/OpenCL/m13800_a1-optimized.cl b/OpenCL/m13800_a1-optimized.cl index ba8791c0f..2ea23421b 100644 --- a/OpenCL/m13800_a1-optimized.cl +++ b/OpenCL/m13800_a1-optimized.cl @@ -408,7 +408,7 @@ DECLSPEC void memcat64c_be (PRIVATE_AS u32x *block, const u32 offset, PRIVATE_AS } } -KERNEL_FQ void HC_ATTR_SEQ m13800_m04 (KERN_ATTR_ESALT (win8phone_t)) +KERNEL_FQ KERNEL_FA void m13800_m04 (KERN_ATTR_ESALT (win8phone_t)) { /** * modifier @@ -652,15 +652,15 @@ KERNEL_FQ void HC_ATTR_SEQ m13800_m04 (KERN_ATTR_ESALT (win8phone_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13800_m08 (KERN_ATTR_ESALT (win8phone_t)) +KERNEL_FQ KERNEL_FA void m13800_m08 (KERN_ATTR_ESALT (win8phone_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m13800_m16 (KERN_ATTR_ESALT (win8phone_t)) +KERNEL_FQ KERNEL_FA void m13800_m16 (KERN_ATTR_ESALT (win8phone_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m13800_s04 (KERN_ATTR_ESALT (win8phone_t)) +KERNEL_FQ KERNEL_FA void m13800_s04 (KERN_ATTR_ESALT (win8phone_t)) { /** * modifier @@ -916,10 +916,10 @@ KERNEL_FQ void HC_ATTR_SEQ m13800_s04 (KERN_ATTR_ESALT (win8phone_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13800_s08 (KERN_ATTR_ESALT (win8phone_t)) +KERNEL_FQ KERNEL_FA void m13800_s08 (KERN_ATTR_ESALT (win8phone_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m13800_s16 (KERN_ATTR_ESALT (win8phone_t)) +KERNEL_FQ KERNEL_FA void m13800_s16 (KERN_ATTR_ESALT (win8phone_t)) { } diff --git a/OpenCL/m13800_a1-pure.cl b/OpenCL/m13800_a1-pure.cl index b287fb389..036086f8a 100644 --- a/OpenCL/m13800_a1-pure.cl +++ b/OpenCL/m13800_a1-pure.cl @@ -20,7 +20,7 @@ typedef struct win8phone } win8phone_t; -KERNEL_FQ void HC_ATTR_SEQ m13800_mxx (KERN_ATTR_ESALT (win8phone_t)) +KERNEL_FQ KERNEL_FA void m13800_mxx (KERN_ATTR_ESALT (win8phone_t)) { /** * modifier @@ -64,7 +64,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13800_mxx (KERN_ATTR_ESALT (win8phone_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13800_sxx (KERN_ATTR_ESALT (win8phone_t)) +KERNEL_FQ KERNEL_FA void m13800_sxx (KERN_ATTR_ESALT (win8phone_t)) { /** * modifier diff --git a/OpenCL/m13800_a3-optimized.cl b/OpenCL/m13800_a3-optimized.cl index 151d13ce1..d79a9e8f7 100644 --- a/OpenCL/m13800_a3-optimized.cl +++ b/OpenCL/m13800_a3-optimized.cl @@ -709,7 +709,7 @@ DECLSPEC void m13800s (LOCAL_AS u32 *s_esalt, PRIVATE_AS u32 *w, const u32 pw_le } } -KERNEL_FQ void HC_ATTR_SEQ m13800_m04 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) +KERNEL_FQ KERNEL_FA void m13800_m04 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) { /** * modifier @@ -766,7 +766,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13800_m04 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) m13800m (s_esalt, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m13800_m08 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) +KERNEL_FQ KERNEL_FA void m13800_m08 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) { /** * modifier @@ -823,7 +823,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13800_m08 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) m13800m (s_esalt, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m13800_m16 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) +KERNEL_FQ KERNEL_FA void m13800_m16 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) { /** * modifier @@ -880,7 +880,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13800_m16 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) m13800m (s_esalt, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m13800_s04 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) +KERNEL_FQ KERNEL_FA void m13800_s04 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) { /** * modifier @@ -937,7 +937,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13800_s04 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) m13800s (s_esalt, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m13800_s08 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) +KERNEL_FQ KERNEL_FA void m13800_s08 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) { /** * modifier @@ -994,7 +994,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13800_s08 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) m13800s (s_esalt, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m13800_s16 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) +KERNEL_FQ KERNEL_FA void m13800_s16 (KERN_ATTR_VECTOR_ESALT (win8phone_t)) { /** * modifier diff --git a/OpenCL/m13800_a3-pure.cl b/OpenCL/m13800_a3-pure.cl index 4fe593d39..6e433819c 100644 --- a/OpenCL/m13800_a3-pure.cl +++ b/OpenCL/m13800_a3-pure.cl @@ -20,7 +20,7 @@ typedef struct win8phone } win8phone_t; -KERNEL_FQ void HC_ATTR_SEQ m13800_mxx (KERN_ATTR_VECTOR_ESALT (win8phone_t)) +KERNEL_FQ KERNEL_FA void m13800_mxx (KERN_ATTR_VECTOR_ESALT (win8phone_t)) { /** * modifier @@ -86,7 +86,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13800_mxx (KERN_ATTR_VECTOR_ESALT (win8phone_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m13800_sxx (KERN_ATTR_VECTOR_ESALT (win8phone_t)) +KERNEL_FQ KERNEL_FA void m13800_sxx (KERN_ATTR_VECTOR_ESALT (win8phone_t)) { /** * modifier diff --git a/OpenCL/m13900_a0-optimized.cl b/OpenCL/m13900_a0-optimized.cl index ebd91174f..7f7a5b891 100644 --- a/OpenCL/m13900_a0-optimized.cl +++ b/OpenCL/m13900_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m13900_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m13900_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -247,15 +247,15 @@ KERNEL_FQ void HC_ATTR_SEQ m13900_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m13900_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m13900_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m13900_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m13900_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m13900_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m13900_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -486,10 +486,10 @@ KERNEL_FQ void HC_ATTR_SEQ m13900_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m13900_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m13900_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m13900_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m13900_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m13900_a0-pure.cl b/OpenCL/m13900_a0-pure.cl index f90a8c20b..a62859e7c 100644 --- a/OpenCL/m13900_a0-pure.cl +++ b/OpenCL/m13900_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m13900_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m13900_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -179,7 +179,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13900_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m13900_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m13900_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m13900_a1-optimized.cl b/OpenCL/m13900_a1-optimized.cl index d1d8e122a..6dbac3ab0 100644 --- a/OpenCL/m13900_a1-optimized.cl +++ b/OpenCL/m13900_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m13900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m13900_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -303,15 +303,15 @@ KERNEL_FQ void HC_ATTR_SEQ m13900_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m13900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m13900_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m13900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m13900_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m13900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m13900_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -600,10 +600,10 @@ KERNEL_FQ void HC_ATTR_SEQ m13900_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m13900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m13900_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m13900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m13900_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m13900_a1-pure.cl b/OpenCL/m13900_a1-pure.cl index 44bd25e52..bb7f5fa34 100644 --- a/OpenCL/m13900_a1-pure.cl +++ b/OpenCL/m13900_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m13900_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m13900_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -175,7 +175,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13900_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m13900_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m13900_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m13900_a3-optimized.cl b/OpenCL/m13900_a3-optimized.cl index 52a5eac15..50bfc8ebf 100644 --- a/OpenCL/m13900_a3-optimized.cl +++ b/OpenCL/m13900_a3-optimized.cl @@ -409,7 +409,7 @@ DECLSPEC void m13900s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m13900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m13900_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -479,7 +479,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13900_m04 (KERN_ATTR_BASIC ()) m13900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m13900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m13900_m08 (KERN_ATTR_BASIC ()) { /** * modifier @@ -549,7 +549,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13900_m08 (KERN_ATTR_BASIC ()) m13900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m13900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m13900_m16 (KERN_ATTR_BASIC ()) { /** * modifier @@ -619,7 +619,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13900_m16 (KERN_ATTR_BASIC ()) m13900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m13900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m13900_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -689,7 +689,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13900_s04 (KERN_ATTR_BASIC ()) m13900s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m13900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m13900_s08 (KERN_ATTR_BASIC ()) { /** * modifier @@ -759,7 +759,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13900_s08 (KERN_ATTR_BASIC ()) m13900s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m13900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m13900_s16 (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m13900_a3-pure.cl b/OpenCL/m13900_a3-pure.cl index 79f8ca395..e200881a9 100644 --- a/OpenCL/m13900_a3-pure.cl +++ b/OpenCL/m13900_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m13900_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m13900_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -192,7 +192,7 @@ KERNEL_FQ void HC_ATTR_SEQ m13900_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m13900_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m13900_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m14000_a0-pure.cl b/OpenCL/m14000_a0-pure.cl index 0e15496a0..61c443477 100644 --- a/OpenCL/m14000_a0-pure.cl +++ b/OpenCL/m14000_a0-pure.cl @@ -497,7 +497,7 @@ DECLSPEC void _des_crypt_keysetup (u32 c, u32 d, PRIVATE_AS u32 *Kc, PRIVATE_AS } } -KERNEL_FQ void HC_ATTR_SEQ m14000_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m14000_mxx (KERN_ATTR_RULES ()) { /** * base @@ -602,7 +602,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14000_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m14000_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m14000_sxx (KERN_ATTR_RULES ()) { /** * base diff --git a/OpenCL/m14000_a1-pure.cl b/OpenCL/m14000_a1-pure.cl index 3242d1285..5ef0b3ef7 100644 --- a/OpenCL/m14000_a1-pure.cl +++ b/OpenCL/m14000_a1-pure.cl @@ -487,7 +487,7 @@ DECLSPEC void _des_crypt_keysetup (u32 c, u32 d, PRIVATE_AS u32 *Kc, PRIVATE_AS } } -KERNEL_FQ void HC_ATTR_SEQ m14000_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14000_mxx (KERN_ATTR_BASIC ()) { /** * base @@ -635,7 +635,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14000_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m14000_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14000_sxx (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m14000_a3-pure.cl b/OpenCL/m14000_a3-pure.cl index 9a8fdc75e..28931f4dd 100644 --- a/OpenCL/m14000_a3-pure.cl +++ b/OpenCL/m14000_a3-pure.cl @@ -1730,7 +1730,7 @@ DECLSPEC void transpose32c (PRIVATE_AS u32 *data) // transpose bitslice mod : attention race conditions, need different buffers for *in and *out // -KERNEL_FQ void HC_ATTR_SEQ m14000_tm (KERN_ATTR_TM) +KERNEL_FQ KERNEL_FA void m14000_tm (KERN_ATTR_TM) { const u64 gid = get_global_id (0); @@ -1756,7 +1756,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14000_tm (KERN_ATTR_TM) } } -KERNEL_FQ void HC_ATTR_SEQ m14000_mxx (KERN_ATTR_BITSLICE ()) +KERNEL_FQ KERNEL_FA void m14000_mxx (KERN_ATTR_BITSLICE ()) { /** * base @@ -2200,7 +2200,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14000_mxx (KERN_ATTR_BITSLICE ()) } } -KERNEL_FQ void HC_ATTR_SEQ m14000_sxx (KERN_ATTR_BITSLICE ()) +KERNEL_FQ KERNEL_FA void m14000_sxx (KERN_ATTR_BITSLICE ()) { /** * base diff --git a/OpenCL/m14100_a0-pure.cl b/OpenCL/m14100_a0-pure.cl index 8bd7c1b24..61a533806 100644 --- a/OpenCL/m14100_a0-pure.cl +++ b/OpenCL/m14100_a0-pure.cl @@ -541,7 +541,7 @@ DECLSPEC void _des_crypt_keysetup (u32 c, u32 d, PRIVATE_AS u32 *Kc, PRIVATE_AS } } -KERNEL_FQ void HC_ATTR_SEQ m14100_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m14100_mxx (KERN_ATTR_RULES ()) { /** * base @@ -676,7 +676,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14100_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m14100_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m14100_sxx (KERN_ATTR_RULES ()) { /** * base diff --git a/OpenCL/m14100_a1-pure.cl b/OpenCL/m14100_a1-pure.cl index 04120dae5..6656793ae 100644 --- a/OpenCL/m14100_a1-pure.cl +++ b/OpenCL/m14100_a1-pure.cl @@ -531,7 +531,7 @@ DECLSPEC void _des_crypt_keysetup (u32 c, u32 d, PRIVATE_AS u32 *Kc, PRIVATE_AS } } -KERNEL_FQ void HC_ATTR_SEQ m14100_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14100_mxx (KERN_ATTR_BASIC ()) { /** * base @@ -714,7 +714,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14100_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m14100_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14100_sxx (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m14100_a3-pure.cl b/OpenCL/m14100_a3-pure.cl index 6cfd5d794..2ba0a471a 100644 --- a/OpenCL/m14100_a3-pure.cl +++ b/OpenCL/m14100_a3-pure.cl @@ -730,7 +730,7 @@ DECLSPEC void m14100s (LOCAL_AS u32 (*s_SPtrans)[64], LOCAL_AS u32 (*s_skb)[64], } } -KERNEL_FQ void HC_ATTR_SEQ m14100_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14100_mxx (KERN_ATTR_BASIC ()) { /** * base @@ -804,7 +804,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14100_mxx (KERN_ATTR_BASIC ()) m14100m (s_SPtrans, s_skb, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m14100_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14100_sxx (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m14400_a0-optimized.cl b/OpenCL/m14400_a0-optimized.cl index 6aa05b003..db149eda5 100644 --- a/OpenCL/m14400_a0-optimized.cl +++ b/OpenCL/m14400_a0-optimized.cl @@ -118,7 +118,7 @@ DECLSPEC void shift_2 (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w w0[0] = 0 | w0[0] << 16; } -KERNEL_FQ void HC_ATTR_SEQ m14400_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m14400_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -381,15 +381,15 @@ KERNEL_FQ void HC_ATTR_SEQ m14400_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m14400_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m14400_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m14400_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m14400_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m14400_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m14400_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -664,10 +664,10 @@ KERNEL_FQ void HC_ATTR_SEQ m14400_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m14400_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m14400_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m14400_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m14400_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m14400_a0-pure.cl b/OpenCL/m14400_a0-pure.cl index 583ccf752..71bea1413 100644 --- a/OpenCL/m14400_a0-pure.cl +++ b/OpenCL/m14400_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m14400_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m14400_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -275,7 +275,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14400_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m14400_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m14400_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m14400_a1-optimized.cl b/OpenCL/m14400_a1-optimized.cl index ff92046fd..68fbac6ea 100644 --- a/OpenCL/m14400_a1-optimized.cl +++ b/OpenCL/m14400_a1-optimized.cl @@ -118,7 +118,7 @@ DECLSPEC void shift_2 (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w w0[0] = 0 | w0[0] << 16; } -KERNEL_FQ void HC_ATTR_SEQ m14400_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14400_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -445,15 +445,15 @@ KERNEL_FQ void HC_ATTR_SEQ m14400_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m14400_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14400_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m14400_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14400_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m14400_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14400_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -792,10 +792,10 @@ KERNEL_FQ void HC_ATTR_SEQ m14400_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m14400_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14400_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m14400_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14400_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m14400_a1-pure.cl b/OpenCL/m14400_a1-pure.cl index c86633a86..f66976563 100644 --- a/OpenCL/m14400_a1-pure.cl +++ b/OpenCL/m14400_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m14400_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14400_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -271,7 +271,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14400_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m14400_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14400_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m14400_a3-optimized.cl b/OpenCL/m14400_a3-optimized.cl index a36a0e66c..9e4903c1b 100644 --- a/OpenCL/m14400_a3-optimized.cl +++ b/OpenCL/m14400_a3-optimized.cl @@ -622,7 +622,7 @@ DECLSPEC void m14400s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m14400_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14400_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -692,7 +692,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14400_m04 (KERN_ATTR_BASIC ()) m14400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m14400_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14400_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -762,7 +762,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14400_m08 (KERN_ATTR_BASIC ()) m14400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m14400_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14400_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -832,7 +832,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14400_m16 (KERN_ATTR_BASIC ()) m14400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m14400_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14400_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -902,7 +902,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14400_s04 (KERN_ATTR_BASIC ()) m14400s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m14400_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14400_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -972,7 +972,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14400_s08 (KERN_ATTR_BASIC ()) m14400s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m14400_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14400_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m14400_a3-pure.cl b/OpenCL/m14400_a3-pure.cl index d1812d1f7..05e33c017 100644 --- a/OpenCL/m14400_a3-pure.cl +++ b/OpenCL/m14400_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m14400_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m14400_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -296,7 +296,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14400_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m14400_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m14400_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m14511_a0-pure.cl b/OpenCL/m14511_a0-pure.cl index b4b0b35d0..9a93ea18f 100644 --- a/OpenCL/m14511_a0-pure.cl +++ b/OpenCL/m14511_a0-pure.cl @@ -24,7 +24,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14511_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14511_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier @@ -200,7 +200,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14511_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14511_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14511_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14511_a1-pure.cl b/OpenCL/m14511_a1-pure.cl index ec8131c3a..03afc331e 100644 --- a/OpenCL/m14511_a1-pure.cl +++ b/OpenCL/m14511_a1-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14511_mxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14511_mxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier @@ -210,7 +210,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14511_mxx (KERN_ATTR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14511_sxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14511_sxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14511_a3-pure.cl b/OpenCL/m14511_a3-pure.cl index 969699dc9..a3527efc8 100644 --- a/OpenCL/m14511_a3-pure.cl +++ b/OpenCL/m14511_a3-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14511_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14511_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier @@ -203,7 +203,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14511_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14511_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14511_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14512_a0-pure.cl b/OpenCL/m14512_a0-pure.cl index 11a3071e7..0c4d80651 100644 --- a/OpenCL/m14512_a0-pure.cl +++ b/OpenCL/m14512_a0-pure.cl @@ -24,7 +24,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14512_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14512_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier @@ -164,7 +164,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14512_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14512_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14512_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14512_a1-pure.cl b/OpenCL/m14512_a1-pure.cl index a6be29429..73cf1ee56 100644 --- a/OpenCL/m14512_a1-pure.cl +++ b/OpenCL/m14512_a1-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14512_mxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14512_mxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier @@ -174,7 +174,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14512_mxx (KERN_ATTR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14512_sxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14512_sxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14512_a3-pure.cl b/OpenCL/m14512_a3-pure.cl index e08927bc1..611689dfd 100644 --- a/OpenCL/m14512_a3-pure.cl +++ b/OpenCL/m14512_a3-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14512_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14512_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier @@ -167,7 +167,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14512_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14512_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14512_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14513_a0-pure.cl b/OpenCL/m14513_a0-pure.cl index 4f7cc5ed2..4a476d997 100644 --- a/OpenCL/m14513_a0-pure.cl +++ b/OpenCL/m14513_a0-pure.cl @@ -24,7 +24,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14513_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14513_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier @@ -165,7 +165,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14513_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14513_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14513_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14513_a1-pure.cl b/OpenCL/m14513_a1-pure.cl index da16877df..d96d6c55f 100644 --- a/OpenCL/m14513_a1-pure.cl +++ b/OpenCL/m14513_a1-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14513_mxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14513_mxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier @@ -175,7 +175,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14513_mxx (KERN_ATTR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14513_sxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14513_sxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14513_a3-pure.cl b/OpenCL/m14513_a3-pure.cl index d99f43a4a..43fbfbd51 100644 --- a/OpenCL/m14513_a3-pure.cl +++ b/OpenCL/m14513_a3-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14513_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14513_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier @@ -168,7 +168,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14513_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14513_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14513_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14521_a0-pure.cl b/OpenCL/m14521_a0-pure.cl index 5bac5f5b3..79621b104 100644 --- a/OpenCL/m14521_a0-pure.cl +++ b/OpenCL/m14521_a0-pure.cl @@ -24,7 +24,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14521_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14521_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier @@ -181,7 +181,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14521_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14521_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14521_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14521_a1-pure.cl b/OpenCL/m14521_a1-pure.cl index 815525b14..333115adb 100644 --- a/OpenCL/m14521_a1-pure.cl +++ b/OpenCL/m14521_a1-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14521_mxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14521_mxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier @@ -177,7 +177,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14521_mxx (KERN_ATTR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14521_sxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14521_sxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14521_a3-pure.cl b/OpenCL/m14521_a3-pure.cl index e63f5f0ce..fffff55c1 100644 --- a/OpenCL/m14521_a3-pure.cl +++ b/OpenCL/m14521_a3-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14521_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14521_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier @@ -190,7 +190,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14521_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14521_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14521_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14522_a0-pure.cl b/OpenCL/m14522_a0-pure.cl index 3bc127b21..7cd0bb2d3 100644 --- a/OpenCL/m14522_a0-pure.cl +++ b/OpenCL/m14522_a0-pure.cl @@ -24,7 +24,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14522_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14522_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier @@ -145,7 +145,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14522_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14522_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14522_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14522_a1-pure.cl b/OpenCL/m14522_a1-pure.cl index 43f1e09c3..aa5303193 100644 --- a/OpenCL/m14522_a1-pure.cl +++ b/OpenCL/m14522_a1-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14522_mxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14522_mxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier @@ -141,7 +141,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14522_mxx (KERN_ATTR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14522_sxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14522_sxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14522_a3-pure.cl b/OpenCL/m14522_a3-pure.cl index c72282bd5..efc78c2cc 100644 --- a/OpenCL/m14522_a3-pure.cl +++ b/OpenCL/m14522_a3-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14522_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14522_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier @@ -154,7 +154,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14522_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14522_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14522_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14523_a0-pure.cl b/OpenCL/m14523_a0-pure.cl index d5beea061..78730c2b4 100644 --- a/OpenCL/m14523_a0-pure.cl +++ b/OpenCL/m14523_a0-pure.cl @@ -24,7 +24,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14523_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14523_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier @@ -146,7 +146,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14523_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14523_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14523_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14523_a1-pure.cl b/OpenCL/m14523_a1-pure.cl index 3ed56f238..4b12f749e 100644 --- a/OpenCL/m14523_a1-pure.cl +++ b/OpenCL/m14523_a1-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14523_mxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14523_mxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier @@ -142,7 +142,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14523_mxx (KERN_ATTR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14523_sxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14523_sxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14523_a3-pure.cl b/OpenCL/m14523_a3-pure.cl index 699e2cb07..375e738b2 100644 --- a/OpenCL/m14523_a3-pure.cl +++ b/OpenCL/m14523_a3-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14523_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14523_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier @@ -155,7 +155,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14523_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14523_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14523_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14531_a0-pure.cl b/OpenCL/m14531_a0-pure.cl index 4e478a752..555912185 100644 --- a/OpenCL/m14531_a0-pure.cl +++ b/OpenCL/m14531_a0-pure.cl @@ -24,7 +24,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14531_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14531_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier @@ -181,7 +181,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14531_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14531_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14531_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14531_a1-pure.cl b/OpenCL/m14531_a1-pure.cl index 6fdd46d4b..d4175e226 100644 --- a/OpenCL/m14531_a1-pure.cl +++ b/OpenCL/m14531_a1-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14531_mxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14531_mxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier @@ -177,7 +177,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14531_mxx (KERN_ATTR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14531_sxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14531_sxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14531_a3-pure.cl b/OpenCL/m14531_a3-pure.cl index d7f71985d..3ae49a255 100644 --- a/OpenCL/m14531_a3-pure.cl +++ b/OpenCL/m14531_a3-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14531_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14531_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier @@ -190,7 +190,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14531_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14531_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14531_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14532_a0-pure.cl b/OpenCL/m14532_a0-pure.cl index 32234c534..5235a3f26 100644 --- a/OpenCL/m14532_a0-pure.cl +++ b/OpenCL/m14532_a0-pure.cl @@ -24,7 +24,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14532_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14532_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier @@ -145,7 +145,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14532_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14532_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14532_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14532_a1-pure.cl b/OpenCL/m14532_a1-pure.cl index d410f1a81..6e0efe3a0 100644 --- a/OpenCL/m14532_a1-pure.cl +++ b/OpenCL/m14532_a1-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14532_mxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14532_mxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier @@ -141,7 +141,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14532_mxx (KERN_ATTR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14532_sxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14532_sxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14532_a3-pure.cl b/OpenCL/m14532_a3-pure.cl index 088a79041..593a5c299 100644 --- a/OpenCL/m14532_a3-pure.cl +++ b/OpenCL/m14532_a3-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14532_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14532_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier @@ -154,7 +154,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14532_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14532_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14532_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14533_a0-pure.cl b/OpenCL/m14533_a0-pure.cl index c239dfaac..b4fe23cd1 100644 --- a/OpenCL/m14533_a0-pure.cl +++ b/OpenCL/m14533_a0-pure.cl @@ -24,7 +24,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14533_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14533_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier @@ -146,7 +146,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14533_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14533_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14533_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14533_a1-pure.cl b/OpenCL/m14533_a1-pure.cl index aac4c3a03..e3c0d9032 100644 --- a/OpenCL/m14533_a1-pure.cl +++ b/OpenCL/m14533_a1-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14533_mxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14533_mxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier @@ -142,7 +142,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14533_mxx (KERN_ATTR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14533_sxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14533_sxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14533_a3-pure.cl b/OpenCL/m14533_a3-pure.cl index bfda0d082..df7fbe92c 100644 --- a/OpenCL/m14533_a3-pure.cl +++ b/OpenCL/m14533_a3-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14533_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14533_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier @@ -155,7 +155,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14533_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14533_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14533_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14541_a0-pure.cl b/OpenCL/m14541_a0-pure.cl index 2ef1ad9ee..ee7344489 100644 --- a/OpenCL/m14541_a0-pure.cl +++ b/OpenCL/m14541_a0-pure.cl @@ -24,7 +24,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14541_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14541_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier @@ -200,7 +200,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14541_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14541_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14541_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14541_a1-pure.cl b/OpenCL/m14541_a1-pure.cl index 366e77e75..27bcf929f 100644 --- a/OpenCL/m14541_a1-pure.cl +++ b/OpenCL/m14541_a1-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14541_mxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14541_mxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier @@ -210,7 +210,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14541_mxx (KERN_ATTR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14541_sxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14541_sxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14541_a3-pure.cl b/OpenCL/m14541_a3-pure.cl index 7c66bb6b0..cf51c0ad3 100644 --- a/OpenCL/m14541_a3-pure.cl +++ b/OpenCL/m14541_a3-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14541_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14541_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier @@ -203,7 +203,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14541_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14541_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14541_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14542_a0-pure.cl b/OpenCL/m14542_a0-pure.cl index ce32d535f..82b05a70a 100644 --- a/OpenCL/m14542_a0-pure.cl +++ b/OpenCL/m14542_a0-pure.cl @@ -24,7 +24,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14542_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14542_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier @@ -164,7 +164,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14542_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14542_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14542_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14542_a1-pure.cl b/OpenCL/m14542_a1-pure.cl index 3c221d0a5..a75335c00 100644 --- a/OpenCL/m14542_a1-pure.cl +++ b/OpenCL/m14542_a1-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14542_mxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14542_mxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier @@ -174,7 +174,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14542_mxx (KERN_ATTR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14542_sxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14542_sxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14542_a3-pure.cl b/OpenCL/m14542_a3-pure.cl index 687ed6df7..4308ef6f8 100644 --- a/OpenCL/m14542_a3-pure.cl +++ b/OpenCL/m14542_a3-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14542_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14542_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier @@ -167,7 +167,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14542_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14542_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14542_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14543_a0-pure.cl b/OpenCL/m14543_a0-pure.cl index be628da66..10713ca4b 100644 --- a/OpenCL/m14543_a0-pure.cl +++ b/OpenCL/m14543_a0-pure.cl @@ -24,7 +24,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14543_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14543_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier @@ -165,7 +165,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14543_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14543_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14543_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14543_a1-pure.cl b/OpenCL/m14543_a1-pure.cl index 194864f4f..e969805ce 100644 --- a/OpenCL/m14543_a1-pure.cl +++ b/OpenCL/m14543_a1-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14543_mxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14543_mxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier @@ -175,7 +175,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14543_mxx (KERN_ATTR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14543_sxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14543_sxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14543_a3-pure.cl b/OpenCL/m14543_a3-pure.cl index b164cec0a..ba9694bf8 100644 --- a/OpenCL/m14543_a3-pure.cl +++ b/OpenCL/m14543_a3-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14543_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14543_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier @@ -168,7 +168,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14543_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14543_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14543_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14551_a0-pure.cl b/OpenCL/m14551_a0-pure.cl index 6dec5f5a6..aa8920792 100644 --- a/OpenCL/m14551_a0-pure.cl +++ b/OpenCL/m14551_a0-pure.cl @@ -24,7 +24,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14551_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14551_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier @@ -208,7 +208,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14551_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14551_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14551_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14551_a1-pure.cl b/OpenCL/m14551_a1-pure.cl index f2ae8814d..e2e48c52f 100644 --- a/OpenCL/m14551_a1-pure.cl +++ b/OpenCL/m14551_a1-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14551_mxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14551_mxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier @@ -204,7 +204,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14551_mxx (KERN_ATTR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14551_sxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14551_sxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14551_a3-pure.cl b/OpenCL/m14551_a3-pure.cl index 39a3671b6..8fc4534ae 100644 --- a/OpenCL/m14551_a3-pure.cl +++ b/OpenCL/m14551_a3-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14551_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14551_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier @@ -217,7 +217,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14551_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14551_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14551_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14552_a0-pure.cl b/OpenCL/m14552_a0-pure.cl index f768f000f..c77be4763 100644 --- a/OpenCL/m14552_a0-pure.cl +++ b/OpenCL/m14552_a0-pure.cl @@ -24,7 +24,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14552_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14552_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier @@ -190,7 +190,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14552_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14552_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14552_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14552_a1-pure.cl b/OpenCL/m14552_a1-pure.cl index 689040b26..848a69d9c 100644 --- a/OpenCL/m14552_a1-pure.cl +++ b/OpenCL/m14552_a1-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14552_mxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14552_mxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier @@ -186,7 +186,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14552_mxx (KERN_ATTR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14552_sxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14552_sxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14552_a3-pure.cl b/OpenCL/m14552_a3-pure.cl index 9c767e0fb..ec7993a89 100644 --- a/OpenCL/m14552_a3-pure.cl +++ b/OpenCL/m14552_a3-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14552_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14552_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier @@ -199,7 +199,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14552_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14552_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14552_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14553_a0-pure.cl b/OpenCL/m14553_a0-pure.cl index 381c433b9..c2658b110 100644 --- a/OpenCL/m14553_a0-pure.cl +++ b/OpenCL/m14553_a0-pure.cl @@ -24,7 +24,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14553_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14553_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier @@ -191,7 +191,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14553_mxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14553_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14553_sxx (KERN_ATTR_RULES_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14553_a1-pure.cl b/OpenCL/m14553_a1-pure.cl index 57bc2e5a2..bd000b4c3 100644 --- a/OpenCL/m14553_a1-pure.cl +++ b/OpenCL/m14553_a1-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14553_mxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14553_mxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier @@ -187,7 +187,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14553_mxx (KERN_ATTR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14553_sxx (KERN_ATTR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14553_sxx (KERN_ATTR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14553_a3-pure.cl b/OpenCL/m14553_a3-pure.cl index ba83d6eb2..e8348f472 100644 --- a/OpenCL/m14553_a3-pure.cl +++ b/OpenCL/m14553_a3-pure.cl @@ -22,7 +22,7 @@ typedef struct cryptoapi } cryptoapi_t; -KERNEL_FQ void HC_ATTR_SEQ m14553_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14553_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier @@ -200,7 +200,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14553_mxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m14553_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) +KERNEL_FQ KERNEL_FA void m14553_sxx (KERN_ATTR_VECTOR_ESALT (cryptoapi_t)) { /** * modifier diff --git a/OpenCL/m14611-pure.cl b/OpenCL/m14611-pure.cl index 84e4b4a60..bdef8c740 100644 --- a/OpenCL/m14611-pure.cl +++ b/OpenCL/m14611-pure.cl @@ -136,7 +136,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m14611_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14611_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { /** * base @@ -210,7 +210,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14611_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t } } -KERNEL_FQ void HC_ATTR_SEQ m14611_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14611_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); @@ -297,7 +297,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14611_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t } } -KERNEL_FQ void HC_ATTR_SEQ m14611_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14611_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m14612-pure.cl b/OpenCL/m14612-pure.cl index 1380a5f2a..0ab2ac8f0 100644 --- a/OpenCL/m14612-pure.cl +++ b/OpenCL/m14612-pure.cl @@ -136,7 +136,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m14612_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14612_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { /** * base @@ -210,7 +210,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14612_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t } } -KERNEL_FQ void HC_ATTR_SEQ m14612_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14612_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); @@ -297,7 +297,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14612_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t } } -KERNEL_FQ void HC_ATTR_SEQ m14612_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14612_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m14613-pure.cl b/OpenCL/m14613-pure.cl index d9e9c21ff..c234a239f 100644 --- a/OpenCL/m14613-pure.cl +++ b/OpenCL/m14613-pure.cl @@ -136,7 +136,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m14613_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14613_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { /** * base @@ -210,7 +210,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14613_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t } } -KERNEL_FQ void HC_ATTR_SEQ m14613_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14613_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); @@ -297,7 +297,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14613_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t } } -KERNEL_FQ void HC_ATTR_SEQ m14613_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14613_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m14621-pure.cl b/OpenCL/m14621-pure.cl index f79c780ba..1eefdbf8b 100644 --- a/OpenCL/m14621-pure.cl +++ b/OpenCL/m14621-pure.cl @@ -142,7 +142,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m14621_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14621_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { /** * base @@ -228,7 +228,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14621_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t } } -KERNEL_FQ void HC_ATTR_SEQ m14621_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14621_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); @@ -336,7 +336,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14621_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t } } -KERNEL_FQ void HC_ATTR_SEQ m14621_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14621_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m14622-pure.cl b/OpenCL/m14622-pure.cl index f69df29b0..105195198 100644 --- a/OpenCL/m14622-pure.cl +++ b/OpenCL/m14622-pure.cl @@ -142,7 +142,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m14622_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14622_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { /** * base @@ -228,7 +228,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14622_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t } } -KERNEL_FQ void HC_ATTR_SEQ m14622_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14622_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); @@ -336,7 +336,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14622_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t } } -KERNEL_FQ void HC_ATTR_SEQ m14622_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14622_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m14623-pure.cl b/OpenCL/m14623-pure.cl index 9816d7d66..0912d706f 100644 --- a/OpenCL/m14623-pure.cl +++ b/OpenCL/m14623-pure.cl @@ -142,7 +142,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m14623_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14623_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { /** * base @@ -228,7 +228,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14623_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t } } -KERNEL_FQ void HC_ATTR_SEQ m14623_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14623_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); @@ -336,7 +336,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14623_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t } } -KERNEL_FQ void HC_ATTR_SEQ m14623_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14623_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m14631-pure.cl b/OpenCL/m14631-pure.cl index a39f50346..bd282089f 100644 --- a/OpenCL/m14631-pure.cl +++ b/OpenCL/m14631-pure.cl @@ -158,7 +158,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void HC_ATTR_SEQ m14631_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14631_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { /** * base @@ -264,7 +264,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14631_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t } } -KERNEL_FQ void HC_ATTR_SEQ m14631_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14631_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); @@ -392,7 +392,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14631_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t } } -KERNEL_FQ void HC_ATTR_SEQ m14631_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14631_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m14632-pure.cl b/OpenCL/m14632-pure.cl index 22057fe0e..e2a3a7e11 100644 --- a/OpenCL/m14632-pure.cl +++ b/OpenCL/m14632-pure.cl @@ -158,7 +158,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void HC_ATTR_SEQ m14632_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14632_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { /** * base @@ -264,7 +264,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14632_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t } } -KERNEL_FQ void HC_ATTR_SEQ m14632_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14632_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); @@ -392,7 +392,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14632_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t } } -KERNEL_FQ void HC_ATTR_SEQ m14632_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14632_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m14633-pure.cl b/OpenCL/m14633-pure.cl index fd061f07d..beb5f8657 100644 --- a/OpenCL/m14633-pure.cl +++ b/OpenCL/m14633-pure.cl @@ -158,7 +158,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void HC_ATTR_SEQ m14633_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14633_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { /** * base @@ -264,7 +264,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14633_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t } } -KERNEL_FQ void HC_ATTR_SEQ m14633_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14633_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); @@ -392,7 +392,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14633_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t } } -KERNEL_FQ void HC_ATTR_SEQ m14633_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14633_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m14641-pure.cl b/OpenCL/m14641-pure.cl index 98bb38c7c..ca75aa00d 100644 --- a/OpenCL/m14641-pure.cl +++ b/OpenCL/m14641-pure.cl @@ -136,7 +136,7 @@ DECLSPEC void hmac_ripemd160_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PR ripemd160_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m14641_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14641_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { /** * base @@ -210,7 +210,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14641_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t } } -KERNEL_FQ void HC_ATTR_SEQ m14641_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14641_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); @@ -297,7 +297,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14641_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t } } -KERNEL_FQ void HC_ATTR_SEQ m14641_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14641_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m14642-pure.cl b/OpenCL/m14642-pure.cl index 59c29ee4d..08cfaff70 100644 --- a/OpenCL/m14642-pure.cl +++ b/OpenCL/m14642-pure.cl @@ -136,7 +136,7 @@ DECLSPEC void hmac_ripemd160_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PR ripemd160_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m14642_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14642_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { /** * base @@ -210,7 +210,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14642_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t } } -KERNEL_FQ void HC_ATTR_SEQ m14642_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14642_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); @@ -297,7 +297,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14642_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t } } -KERNEL_FQ void HC_ATTR_SEQ m14642_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14642_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m14643-pure.cl b/OpenCL/m14643-pure.cl index 13d3c314f..d5ace42bb 100644 --- a/OpenCL/m14643-pure.cl +++ b/OpenCL/m14643-pure.cl @@ -136,7 +136,7 @@ DECLSPEC void hmac_ripemd160_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PR ripemd160_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m14643_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14643_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { /** * base @@ -210,7 +210,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14643_init (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t } } -KERNEL_FQ void HC_ATTR_SEQ m14643_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14643_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); @@ -297,7 +297,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14643_loop (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t } } -KERNEL_FQ void HC_ATTR_SEQ m14643_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) +KERNEL_FQ KERNEL_FA void m14643_comp (KERN_ATTR_TMPS_ESALT (luks_tmp_t, luks_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m14700-pure.cl b/OpenCL/m14700-pure.cl index b3af03235..a795e8e22 100644 --- a/OpenCL/m14700-pure.cl +++ b/OpenCL/m14700-pure.cl @@ -71,7 +71,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m14700_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, itunes_backup_t)) +KERNEL_FQ KERNEL_FA void m14700_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, itunes_backup_t)) { /** * base @@ -143,7 +143,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14700_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m14700_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, itunes_backup_t)) +KERNEL_FQ KERNEL_FA void m14700_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, itunes_backup_t)) { const u64 gid = get_global_id (0); @@ -228,7 +228,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14700_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m14700_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, itunes_backup_t)) +KERNEL_FQ KERNEL_FA void m14700_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, itunes_backup_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m14800-pure.cl b/OpenCL/m14800-pure.cl index eb3526c74..e7cac034d 100644 --- a/OpenCL/m14800-pure.cl +++ b/OpenCL/m14800-pure.cl @@ -111,7 +111,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m14800_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, itunes_backup_t)) +KERNEL_FQ KERNEL_FA void m14800_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, itunes_backup_t)) { /** * base @@ -212,7 +212,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14800_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m14800_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, itunes_backup_t)) +KERNEL_FQ KERNEL_FA void m14800_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, itunes_backup_t)) { const u64 gid = get_global_id (0); @@ -318,7 +318,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14800_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m14800_init2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, itunes_backup_t)) +KERNEL_FQ KERNEL_FA void m14800_init2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, itunes_backup_t)) { /** * base @@ -407,7 +407,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14800_init2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp } } -KERNEL_FQ void HC_ATTR_SEQ m14800_loop2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, itunes_backup_t)) +KERNEL_FQ KERNEL_FA void m14800_loop2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, itunes_backup_t)) { const u64 gid = get_global_id (0); @@ -492,7 +492,7 @@ KERNEL_FQ void HC_ATTR_SEQ m14800_loop2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp } } -KERNEL_FQ void HC_ATTR_SEQ m14800_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, itunes_backup_t)) +KERNEL_FQ KERNEL_FA void m14800_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, itunes_backup_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m14900_a0-optimized.cl b/OpenCL/m14900_a0-optimized.cl index b78393beb..9255b0940 100644 --- a/OpenCL/m14900_a0-optimized.cl +++ b/OpenCL/m14900_a0-optimized.cl @@ -105,7 +105,7 @@ DECLSPEC u32 skip32 (LOCAL_AS u8 *s_ftable, const u32 KP, PRIVATE_AS const u32 * return r; } -KERNEL_FQ void HC_ATTR_SEQ m14900_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m14900_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -188,15 +188,15 @@ KERNEL_FQ void HC_ATTR_SEQ m14900_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m14900_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m14900_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m14900_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m14900_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m14900_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m14900_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -291,10 +291,10 @@ KERNEL_FQ void HC_ATTR_SEQ m14900_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m14900_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m14900_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m14900_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m14900_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m14900_a1-optimized.cl b/OpenCL/m14900_a1-optimized.cl index bb915e0ab..27bfc7568 100644 --- a/OpenCL/m14900_a1-optimized.cl +++ b/OpenCL/m14900_a1-optimized.cl @@ -103,7 +103,7 @@ DECLSPEC u32 skip32 (LOCAL_AS u8 *s_ftable, const u32 KP, PRIVATE_AS const u32 * return r; } -KERNEL_FQ void HC_ATTR_SEQ m14900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14900_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -250,15 +250,15 @@ KERNEL_FQ void HC_ATTR_SEQ m14900_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m14900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14900_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m14900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14900_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m14900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14900_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -417,10 +417,10 @@ KERNEL_FQ void HC_ATTR_SEQ m14900_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m14900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14900_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m14900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14900_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m14900_a3-optimized.cl b/OpenCL/m14900_a3-optimized.cl index a61d23d3e..fb79ab712 100644 --- a/OpenCL/m14900_a3-optimized.cl +++ b/OpenCL/m14900_a3-optimized.cl @@ -205,7 +205,7 @@ DECLSPEC void m14900s (LOCAL_AS u8 *s_ftable, PRIVATE_AS u32 *w0, PRIVATE_AS u32 } } -KERNEL_FQ void HC_ATTR_SEQ m14900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14900_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -271,15 +271,15 @@ KERNEL_FQ void HC_ATTR_SEQ m14900_m04 (KERN_ATTR_BASIC ()) m14900m (s_ftable, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m14900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14900_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m14900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14900_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m14900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14900_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -345,10 +345,10 @@ KERNEL_FQ void HC_ATTR_SEQ m14900_s04 (KERN_ATTR_BASIC ()) m14900s (s_ftable, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m14900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14900_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m14900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m14900_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m15000_a0-optimized.cl b/OpenCL/m15000_a0-optimized.cl index 4cf58a81d..154ebbd97 100644 --- a/OpenCL/m15000_a0-optimized.cl +++ b/OpenCL/m15000_a0-optimized.cl @@ -115,7 +115,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void HC_ATTR_SEQ m15000_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m15000_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -312,15 +312,15 @@ KERNEL_FQ void HC_ATTR_SEQ m15000_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m15000_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m15000_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m15000_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m15000_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m15000_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m15000_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -529,10 +529,10 @@ KERNEL_FQ void HC_ATTR_SEQ m15000_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m15000_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m15000_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m15000_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m15000_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m15000_a0-pure.cl b/OpenCL/m15000_a0-pure.cl index d0a2a64c7..87b9f02bb 100644 --- a/OpenCL/m15000_a0-pure.cl +++ b/OpenCL/m15000_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m15000_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m15000_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15000_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m15000_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m15000_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m15000_a1-optimized.cl b/OpenCL/m15000_a1-optimized.cl index 29ba83d22..419ee07d3 100644 --- a/OpenCL/m15000_a1-optimized.cl +++ b/OpenCL/m15000_a1-optimized.cl @@ -113,7 +113,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void HC_ATTR_SEQ m15000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m15000_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -370,15 +370,15 @@ KERNEL_FQ void HC_ATTR_SEQ m15000_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m15000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m15000_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m15000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m15000_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m15000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m15000_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -647,10 +647,10 @@ KERNEL_FQ void HC_ATTR_SEQ m15000_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m15000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m15000_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m15000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m15000_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m15000_a1-pure.cl b/OpenCL/m15000_a1-pure.cl index be8dc7b74..a4a086e38 100644 --- a/OpenCL/m15000_a1-pure.cl +++ b/OpenCL/m15000_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m15000_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m15000_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -67,7 +67,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15000_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m15000_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m15000_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m15000_a3-optimized.cl b/OpenCL/m15000_a3-optimized.cl index bf4bd12cb..274b64265 100644 --- a/OpenCL/m15000_a3-optimized.cl +++ b/OpenCL/m15000_a3-optimized.cl @@ -437,7 +437,7 @@ DECLSPEC void m15000s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m15000_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m15000_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -477,7 +477,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15000_m04 (KERN_ATTR_VECTOR ()) m15000m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m15000_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m15000_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -517,7 +517,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15000_m08 (KERN_ATTR_VECTOR ()) m15000m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m15000_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m15000_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -557,7 +557,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15000_m16 (KERN_ATTR_VECTOR ()) m15000m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m15000_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m15000_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -597,7 +597,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15000_s04 (KERN_ATTR_VECTOR ()) m15000s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m15000_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m15000_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -637,7 +637,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15000_s08 (KERN_ATTR_VECTOR ()) m15000s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m15000_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m15000_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m15000_a3-pure.cl b/OpenCL/m15000_a3-pure.cl index cd383d8a3..76c88b2ff 100644 --- a/OpenCL/m15000_a3-pure.cl +++ b/OpenCL/m15000_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m15000_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m15000_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -80,7 +80,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15000_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m15000_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m15000_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m15100-pure.cl b/OpenCL/m15100-pure.cl index 750f2a533..fbba7afc1 100644 --- a/OpenCL/m15100-pure.cl +++ b/OpenCL/m15100-pure.cl @@ -64,7 +64,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m15100_init (KERN_ATTR_TMPS (pbkdf1_sha1_tmp_t)) +KERNEL_FQ KERNEL_FA void m15100_init (KERN_ATTR_TMPS (pbkdf1_sha1_tmp_t)) { /** * base @@ -101,7 +101,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15100_init (KERN_ATTR_TMPS (pbkdf1_sha1_tmp_t)) tmps[gid].out[4] = sha1_hmac_ctx.opad.h[4]; } -KERNEL_FQ void HC_ATTR_SEQ m15100_loop (KERN_ATTR_TMPS (pbkdf1_sha1_tmp_t)) +KERNEL_FQ KERNEL_FA void m15100_loop (KERN_ATTR_TMPS (pbkdf1_sha1_tmp_t)) { const u64 gid = get_global_id (0); @@ -164,7 +164,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15100_loop (KERN_ATTR_TMPS (pbkdf1_sha1_tmp_t)) unpackv (tmps, out, gid, 4, out[4]); } -KERNEL_FQ void HC_ATTR_SEQ m15100_comp (KERN_ATTR_TMPS (pbkdf1_sha1_tmp_t)) +KERNEL_FQ KERNEL_FA void m15100_comp (KERN_ATTR_TMPS (pbkdf1_sha1_tmp_t)) { /** * base diff --git a/OpenCL/m15300-pure.cl b/OpenCL/m15300-pure.cl index cf46002a1..8deb497a0 100644 --- a/OpenCL/m15300-pure.cl +++ b/OpenCL/m15300-pure.cl @@ -86,7 +86,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m15300_init (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) +KERNEL_FQ KERNEL_FA void m15300_init (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) { /** * base @@ -283,7 +283,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15300_init (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, } } -KERNEL_FQ void HC_ATTR_SEQ m15300_loop (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) +KERNEL_FQ KERNEL_FA void m15300_loop (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) { /** * base @@ -372,7 +372,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15300_loop (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, } } -KERNEL_FQ void HC_ATTR_SEQ m15300_comp (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) +KERNEL_FQ KERNEL_FA void m15300_comp (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m15310-pure.cl b/OpenCL/m15310-pure.cl index f56e1b94e..e0036942e 100644 --- a/OpenCL/m15310-pure.cl +++ b/OpenCL/m15310-pure.cl @@ -130,7 +130,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m15310_init (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) +KERNEL_FQ KERNEL_FA void m15310_init (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) { /** * base @@ -252,7 +252,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15310_init (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, } } -KERNEL_FQ void HC_ATTR_SEQ m15310_loop (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) +KERNEL_FQ KERNEL_FA void m15310_loop (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) { const u64 gid = get_global_id (0); @@ -358,7 +358,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15310_loop (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, } } -KERNEL_FQ void HC_ATTR_SEQ m15310_init2 (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) +KERNEL_FQ KERNEL_FA void m15310_init2 (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) { /** * base @@ -599,7 +599,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15310_init2 (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, } } -KERNEL_FQ void HC_ATTR_SEQ m15310_loop2 (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) +KERNEL_FQ KERNEL_FA void m15310_loop2 (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) { /** * base @@ -688,7 +688,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15310_loop2 (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, } } -KERNEL_FQ void HC_ATTR_SEQ m15310_comp (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) +KERNEL_FQ KERNEL_FA void m15310_comp (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v1_t, dpapimk_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m15400_a0-optimized.cl b/OpenCL/m15400_a0-optimized.cl index c558e8437..d2df7d4f9 100644 --- a/OpenCL/m15400_a0-optimized.cl +++ b/OpenCL/m15400_a0-optimized.cl @@ -238,7 +238,7 @@ DECLSPEC void chacha20_transform (PRIVATE_AS const u32x *w0, PRIVATE_AS const u3 } } -KERNEL_FQ void HC_ATTR_SEQ m15400_m04 (KERN_ATTR_RULES_ESALT (chacha20_t)) +KERNEL_FQ KERNEL_FA void m15400_m04 (KERN_ATTR_RULES_ESALT (chacha20_t)) { /** * modifier @@ -308,15 +308,15 @@ KERNEL_FQ void HC_ATTR_SEQ m15400_m04 (KERN_ATTR_RULES_ESALT (chacha20_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m15400_m08 (KERN_ATTR_RULES_ESALT (chacha20_t)) +KERNEL_FQ KERNEL_FA void m15400_m08 (KERN_ATTR_RULES_ESALT (chacha20_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m15400_m16 (KERN_ATTR_RULES_ESALT (chacha20_t)) +KERNEL_FQ KERNEL_FA void m15400_m16 (KERN_ATTR_RULES_ESALT (chacha20_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m15400_s04 (KERN_ATTR_RULES_ESALT (chacha20_t)) +KERNEL_FQ KERNEL_FA void m15400_s04 (KERN_ATTR_RULES_ESALT (chacha20_t)) { /** * modifier @@ -398,10 +398,10 @@ KERNEL_FQ void HC_ATTR_SEQ m15400_s04 (KERN_ATTR_RULES_ESALT (chacha20_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m15400_s08 (KERN_ATTR_RULES_ESALT (chacha20_t)) +KERNEL_FQ KERNEL_FA void m15400_s08 (KERN_ATTR_RULES_ESALT (chacha20_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m15400_s16 (KERN_ATTR_RULES_ESALT (chacha20_t)) +KERNEL_FQ KERNEL_FA void m15400_s16 (KERN_ATTR_RULES_ESALT (chacha20_t)) { } diff --git a/OpenCL/m15400_a1-optimized.cl b/OpenCL/m15400_a1-optimized.cl index 8406e899f..c140058df 100644 --- a/OpenCL/m15400_a1-optimized.cl +++ b/OpenCL/m15400_a1-optimized.cl @@ -236,7 +236,7 @@ DECLSPEC void chacha20_transform (PRIVATE_AS const u32x *w0, PRIVATE_AS const u3 } } -KERNEL_FQ void HC_ATTR_SEQ m15400_m04 (KERN_ATTR_ESALT (chacha20_t)) +KERNEL_FQ KERNEL_FA void m15400_m04 (KERN_ATTR_ESALT (chacha20_t)) { /** * modifier @@ -357,15 +357,15 @@ KERNEL_FQ void HC_ATTR_SEQ m15400_m04 (KERN_ATTR_ESALT (chacha20_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m15400_m08 (KERN_ATTR_ESALT (chacha20_t)) +KERNEL_FQ KERNEL_FA void m15400_m08 (KERN_ATTR_ESALT (chacha20_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m15400_m16 (KERN_ATTR_ESALT (chacha20_t)) +KERNEL_FQ KERNEL_FA void m15400_m16 (KERN_ATTR_ESALT (chacha20_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m15400_s04 (KERN_ATTR_ESALT (chacha20_t)) +KERNEL_FQ KERNEL_FA void m15400_s04 (KERN_ATTR_ESALT (chacha20_t)) { /** * modifier @@ -498,10 +498,10 @@ KERNEL_FQ void HC_ATTR_SEQ m15400_s04 (KERN_ATTR_ESALT (chacha20_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m15400_s08 (KERN_ATTR_ESALT (chacha20_t)) +KERNEL_FQ KERNEL_FA void m15400_s08 (KERN_ATTR_ESALT (chacha20_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m15400_s16 (KERN_ATTR_ESALT (chacha20_t)) +KERNEL_FQ KERNEL_FA void m15400_s16 (KERN_ATTR_ESALT (chacha20_t)) { } diff --git a/OpenCL/m15400_a3-optimized.cl b/OpenCL/m15400_a3-optimized.cl index 73a7919b9..a0f856bac 100644 --- a/OpenCL/m15400_a3-optimized.cl +++ b/OpenCL/m15400_a3-optimized.cl @@ -236,17 +236,17 @@ DECLSPEC void chacha20_transform (PRIVATE_AS const u32x *w0, PRIVATE_AS const u3 } } -KERNEL_FQ void HC_ATTR_SEQ m15400_m04 (KERN_ATTR_VECTOR_ESALT (chacha20_t)) +KERNEL_FQ KERNEL_FA void m15400_m04 (KERN_ATTR_VECTOR_ESALT (chacha20_t)) { // fixed size 32 } -KERNEL_FQ void HC_ATTR_SEQ m15400_m08 (KERN_ATTR_VECTOR_ESALT (chacha20_t)) +KERNEL_FQ KERNEL_FA void m15400_m08 (KERN_ATTR_VECTOR_ESALT (chacha20_t)) { // fixed size 32 } -KERNEL_FQ void HC_ATTR_SEQ m15400_m16 (KERN_ATTR_VECTOR_ESALT (chacha20_t)) +KERNEL_FQ KERNEL_FA void m15400_m16 (KERN_ATTR_VECTOR_ESALT (chacha20_t)) { /** * modifier @@ -326,17 +326,17 @@ KERNEL_FQ void HC_ATTR_SEQ m15400_m16 (KERN_ATTR_VECTOR_ESALT (chacha20_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m15400_s04 (KERN_ATTR_VECTOR_ESALT (chacha20_t)) +KERNEL_FQ KERNEL_FA void m15400_s04 (KERN_ATTR_VECTOR_ESALT (chacha20_t)) { // fixed size 32 } -KERNEL_FQ void HC_ATTR_SEQ m15400_s08 (KERN_ATTR_VECTOR_ESALT (chacha20_t)) +KERNEL_FQ KERNEL_FA void m15400_s08 (KERN_ATTR_VECTOR_ESALT (chacha20_t)) { // fixed size 32 } -KERNEL_FQ void HC_ATTR_SEQ m15400_s16 (KERN_ATTR_VECTOR_ESALT (chacha20_t)) +KERNEL_FQ KERNEL_FA void m15400_s16 (KERN_ATTR_VECTOR_ESALT (chacha20_t)) { /** * modifier diff --git a/OpenCL/m15500_a0-optimized.cl b/OpenCL/m15500_a0-optimized.cl index 42a31dd7e..e3ea59427 100644 --- a/OpenCL/m15500_a0-optimized.cl +++ b/OpenCL/m15500_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m15500_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m15500_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -264,15 +264,15 @@ KERNEL_FQ void HC_ATTR_SEQ m15500_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m15500_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m15500_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m15500_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m15500_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m15500_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m15500_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -532,10 +532,10 @@ KERNEL_FQ void HC_ATTR_SEQ m15500_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m15500_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m15500_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m15500_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m15500_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m15500_a0-pure.cl b/OpenCL/m15500_a0-pure.cl index 3f5948815..d2c568e3e 100644 --- a/OpenCL/m15500_a0-pure.cl +++ b/OpenCL/m15500_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m15500_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m15500_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -77,7 +77,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15500_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m15500_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m15500_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m15500_a1-optimized.cl b/OpenCL/m15500_a1-optimized.cl index 4de4bab58..3c11ee2a1 100644 --- a/OpenCL/m15500_a1-optimized.cl +++ b/OpenCL/m15500_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m15500_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m15500_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -322,15 +322,15 @@ KERNEL_FQ void HC_ATTR_SEQ m15500_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m15500_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m15500_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m15500_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m15500_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m15500_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m15500_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -650,10 +650,10 @@ KERNEL_FQ void HC_ATTR_SEQ m15500_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m15500_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m15500_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m15500_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m15500_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m15500_a1-pure.cl b/OpenCL/m15500_a1-pure.cl index b4ca91df3..d98047710 100644 --- a/OpenCL/m15500_a1-pure.cl +++ b/OpenCL/m15500_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m15500_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m15500_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -73,7 +73,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15500_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m15500_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m15500_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m15500_a3-optimized.cl b/OpenCL/m15500_a3-optimized.cl index 7259094ae..2a99be21d 100644 --- a/OpenCL/m15500_a3-optimized.cl +++ b/OpenCL/m15500_a3-optimized.cl @@ -580,7 +580,7 @@ DECLSPEC void m15500s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m15500_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m15500_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -620,7 +620,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15500_m04 (KERN_ATTR_VECTOR ()) m15500m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m15500_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m15500_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -660,7 +660,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15500_m08 (KERN_ATTR_VECTOR ()) m15500m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m15500_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m15500_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -700,7 +700,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15500_m16 (KERN_ATTR_VECTOR ()) m15500m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m15500_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m15500_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -740,7 +740,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15500_s04 (KERN_ATTR_VECTOR ()) m15500s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m15500_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m15500_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -780,7 +780,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15500_s08 (KERN_ATTR_VECTOR ()) m15500s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m15500_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m15500_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m15500_a3-pure.cl b/OpenCL/m15500_a3-pure.cl index 0e6e18aaf..b838b8ad2 100644 --- a/OpenCL/m15500_a3-pure.cl +++ b/OpenCL/m15500_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m15500_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m15500_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -86,7 +86,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15500_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m15500_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m15500_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m15600-pure.cl b/OpenCL/m15600-pure.cl index 31982d8cd..08d05e039 100644 --- a/OpenCL/m15600-pure.cl +++ b/OpenCL/m15600-pure.cl @@ -205,7 +205,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m15600_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ethereum_pbkdf2_t)) +KERNEL_FQ KERNEL_FA void m15600_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ethereum_pbkdf2_t)) { /** * base @@ -289,7 +289,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15600_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m15600_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ethereum_pbkdf2_t)) +KERNEL_FQ KERNEL_FA void m15600_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ethereum_pbkdf2_t)) { const u64 gid = get_global_id (0); @@ -395,7 +395,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15600_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m15600_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ethereum_pbkdf2_t)) +KERNEL_FQ KERNEL_FA void m15600_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ethereum_pbkdf2_t)) { /** * base diff --git a/OpenCL/m15700-pure.cl b/OpenCL/m15700-pure.cl index 99e3bd78f..2e9e1bf45 100644 --- a/OpenCL/m15700-pure.cl +++ b/OpenCL/m15700-pure.cl @@ -15,16 +15,6 @@ #define COMPARE_S M2S(INCLUDE_PATH/inc_comp_single.cl) #define COMPARE_M M2S(INCLUDE_PATH/inc_comp_multi.cl) -typedef struct -{ - #ifndef SCRYPT_TMP_ELEM - #define SCRYPT_TMP_ELEM 1 - #endif - - u32 P[SCRYPT_TMP_ELEM]; - -} scrypt_tmp_t; - typedef struct ethereum_scrypt { u32 salt_buf[16]; @@ -161,22 +151,18 @@ DECLSPEC void keccak_transform_S (PRIVATE_AS u64 *st) } } -KERNEL_FQ void HC_ATTR_SEQ m15700_init (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, ethereum_scrypt_t)) +KERNEL_FQ KERNEL_FA void m15700_init (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, ethereum_scrypt_t)) { const u64 gid = get_global_id (0); if (gid >= GID_CNT) return; - u32 out[SCRYPT_CNT4]; + scrypt_pbkdf2_ggg (pws[gid].i, pws[gid].pw_len, salt_bufs[SALT_POS_HOST].salt_buf, salt_bufs[SALT_POS_HOST].salt_len, tmps[gid].in, SCRYPT_SZ); - scrypt_pbkdf2_gg (pws[gid].i, pws[gid].pw_len, salt_bufs[SALT_POS_HOST].salt_buf, salt_bufs[SALT_POS_HOST].salt_len, out, SCRYPT_SZ); - - scrypt_blockmix_in (out, SCRYPT_SZ); - - for (u32 i = 0; i < SCRYPT_CNT4; i++) tmps[gid].P[i] = out[i]; + scrypt_blockmix_in (tmps[gid].in, tmps[gid].out, SCRYPT_SZ); } -KERNEL_FQ void HC_ATTR_SEQ m15700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m15700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -187,16 +173,12 @@ KERNEL_FQ void HC_ATTR_SEQ m15700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) u32 X[STATE_CNT4]; - GLOBAL_AS u32 *P = tmps[gid].P + (SALT_REPEAT * STATE_CNT4); + GLOBAL_AS u32 *P = tmps[gid].out + (SALT_REPEAT * STATE_CNT4); - for (u32 z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - - scrypt_smix_init (X, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); - - for (u32 z = 0; z < STATE_CNT4; z++) P[z] = X[z]; + scrypt_smix_init (P, X, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); } -KERNEL_FQ void HC_ATTR_SEQ m15700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m15700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -208,30 +190,22 @@ KERNEL_FQ void HC_ATTR_SEQ m15700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) u32 X[STATE_CNT4]; u32 T[STATE_CNT4]; - GLOBAL_AS u32 *P = tmps[gid].P + (SALT_REPEAT * STATE_CNT4); + GLOBAL_AS u32 *P = tmps[gid].out + (SALT_REPEAT * STATE_CNT4); - for (u32 z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - - scrypt_smix_loop (X, T, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); - - for (u32 z = 0; z < STATE_CNT4; z++) P[z] = X[z]; + scrypt_smix_loop (P, X, T, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); } -KERNEL_FQ void HC_ATTR_SEQ m15700_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, ethereum_scrypt_t)) +KERNEL_FQ KERNEL_FA void m15700_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, ethereum_scrypt_t)) { const u64 gid = get_global_id (0); if (gid >= GID_CNT) return; - u32 x[SCRYPT_CNT4]; - - for (u32 i = 0; i < SCRYPT_CNT4; i++) x[i] = tmps[gid].P[i]; - - scrypt_blockmix_out (x, SCRYPT_SZ); + scrypt_blockmix_out (tmps[gid].out, tmps[gid].in, SCRYPT_SZ); u32 out[8]; - scrypt_pbkdf2_gp (pws[gid].i, pws[gid].pw_len, x, SCRYPT_SZ, out, 32); + scrypt_pbkdf2_ggp (pws[gid].i, pws[gid].pw_len, tmps[gid].in, SCRYPT_SZ, out, 32); /** * keccak diff --git a/OpenCL/m15900-pure.cl b/OpenCL/m15900-pure.cl index 96f7992e5..a5c2ada6b 100644 --- a/OpenCL/m15900-pure.cl +++ b/OpenCL/m15900-pure.cl @@ -109,7 +109,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void HC_ATTR_SEQ m15900_init (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) +KERNEL_FQ KERNEL_FA void m15900_init (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) { /** * base @@ -371,7 +371,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15900_init (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, } } -KERNEL_FQ void HC_ATTR_SEQ m15900_loop (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) +KERNEL_FQ KERNEL_FA void m15900_loop (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) { /** * base @@ -501,7 +501,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15900_loop (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, } } -KERNEL_FQ void HC_ATTR_SEQ m15900_comp (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) +KERNEL_FQ KERNEL_FA void m15900_comp (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m15910-pure.cl b/OpenCL/m15910-pure.cl index a808d7b1b..6f080d699 100644 --- a/OpenCL/m15910-pure.cl +++ b/OpenCL/m15910-pure.cl @@ -159,7 +159,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void HC_ATTR_SEQ m15910_init (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) +KERNEL_FQ KERNEL_FA void m15910_init (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) { /** * base @@ -281,7 +281,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15910_init (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, } } -KERNEL_FQ void HC_ATTR_SEQ m15910_loop (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) +KERNEL_FQ KERNEL_FA void m15910_loop (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) { const u64 gid = get_global_id (0); @@ -387,7 +387,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15910_loop (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, } } -KERNEL_FQ void HC_ATTR_SEQ m15910_init2 (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) +KERNEL_FQ KERNEL_FA void m15910_init2 (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) { /** * base @@ -693,7 +693,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15910_init2 (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, } } -KERNEL_FQ void HC_ATTR_SEQ m15910_loop2 (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) +KERNEL_FQ KERNEL_FA void m15910_loop2 (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) { /** * base @@ -823,7 +823,7 @@ KERNEL_FQ void HC_ATTR_SEQ m15910_loop2 (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, } } -KERNEL_FQ void HC_ATTR_SEQ m15910_comp (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) +KERNEL_FQ KERNEL_FA void m15910_comp (KERN_ATTR_TMPS_ESALT (dpapimk_tmp_v2_t, dpapimk_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m16000_a0-pure.cl b/OpenCL/m16000_a0-pure.cl index e77ef4662..5207544fd 100644 --- a/OpenCL/m16000_a0-pure.cl +++ b/OpenCL/m16000_a0-pure.cl @@ -494,7 +494,7 @@ DECLSPEC void _des_crypt_encrypt (PRIVATE_AS u32 *iv, u32 mask, PRIVATE_AS u32x iv[1] = hc_rotl32 (l, 31); } -KERNEL_FQ void HC_ATTR_SEQ m16000_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m16000_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -587,7 +587,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16000_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m16000_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m16000_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m16000_a1-pure.cl b/OpenCL/m16000_a1-pure.cl index 822dd3e34..1ac5c55e0 100644 --- a/OpenCL/m16000_a1-pure.cl +++ b/OpenCL/m16000_a1-pure.cl @@ -492,7 +492,7 @@ DECLSPEC void _des_crypt_encrypt (PRIVATE_AS u32 *iv, u32 mask, PRIVATE_AS u32x iv[1] = hc_rotl32 (l, 31); } -KERNEL_FQ void HC_ATTR_SEQ m16000_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m16000_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -664,7 +664,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16000_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m16000_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m16000_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m16000_a3-pure.cl b/OpenCL/m16000_a3-pure.cl index 18a17a411..cea8b57fa 100644 --- a/OpenCL/m16000_a3-pure.cl +++ b/OpenCL/m16000_a3-pure.cl @@ -492,7 +492,7 @@ DECLSPEC void _des_crypt_encrypt (PRIVATE_AS u32 *iv, u32 mask, PRIVATE_AS u32x iv[1] = hc_rotl32 (l, 31); } -KERNEL_FQ void HC_ATTR_SEQ m16000_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m16000_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -613,7 +613,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16000_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m16000_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m16000_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m16100_a0-optimized.cl b/OpenCL/m16100_a0-optimized.cl index eb1fe4901..d808d97e2 100644 --- a/OpenCL/m16100_a0-optimized.cl +++ b/OpenCL/m16100_a0-optimized.cl @@ -27,7 +27,7 @@ typedef struct tacacs_plus } tacacs_plus_t; -KERNEL_FQ void HC_ATTR_SEQ m16100_m04 (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) +KERNEL_FQ KERNEL_FA void m16100_m04 (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) { /** * modifier @@ -304,15 +304,15 @@ KERNEL_FQ void HC_ATTR_SEQ m16100_m04 (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m16100_m08 (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) +KERNEL_FQ KERNEL_FA void m16100_m08 (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m16100_m16 (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) +KERNEL_FQ KERNEL_FA void m16100_m16 (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m16100_s04 (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) +KERNEL_FQ KERNEL_FA void m16100_s04 (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) { /** * modifier @@ -589,10 +589,10 @@ KERNEL_FQ void HC_ATTR_SEQ m16100_s04 (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m16100_s08 (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) +KERNEL_FQ KERNEL_FA void m16100_s08 (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m16100_s16 (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) +KERNEL_FQ KERNEL_FA void m16100_s16 (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) { } diff --git a/OpenCL/m16100_a0-pure.cl b/OpenCL/m16100_a0-pure.cl index 53a0366e4..ebc316e9c 100644 --- a/OpenCL/m16100_a0-pure.cl +++ b/OpenCL/m16100_a0-pure.cl @@ -27,7 +27,7 @@ typedef struct tacacs_plus } tacacs_plus_t; -KERNEL_FQ void HC_ATTR_SEQ m16100_mxx (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) +KERNEL_FQ KERNEL_FA void m16100_mxx (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) { /** * modifier @@ -189,7 +189,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16100_mxx (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m16100_sxx (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) +KERNEL_FQ KERNEL_FA void m16100_sxx (KERN_ATTR_RULES_ESALT (tacacs_plus_t)) { /** * modifier diff --git a/OpenCL/m16100_a1-optimized.cl b/OpenCL/m16100_a1-optimized.cl index b60e607f8..8de440e95 100644 --- a/OpenCL/m16100_a1-optimized.cl +++ b/OpenCL/m16100_a1-optimized.cl @@ -25,7 +25,7 @@ typedef struct tacacs_plus } tacacs_plus_t; -KERNEL_FQ void HC_ATTR_SEQ m16100_m04 (KERN_ATTR_ESALT (tacacs_plus_t)) +KERNEL_FQ KERNEL_FA void m16100_m04 (KERN_ATTR_ESALT (tacacs_plus_t)) { /** * modifier @@ -363,15 +363,15 @@ KERNEL_FQ void HC_ATTR_SEQ m16100_m04 (KERN_ATTR_ESALT (tacacs_plus_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m16100_m08 (KERN_ATTR_ESALT (tacacs_plus_t)) +KERNEL_FQ KERNEL_FA void m16100_m08 (KERN_ATTR_ESALT (tacacs_plus_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m16100_m16 (KERN_ATTR_ESALT (tacacs_plus_t)) +KERNEL_FQ KERNEL_FA void m16100_m16 (KERN_ATTR_ESALT (tacacs_plus_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m16100_s04 (KERN_ATTR_ESALT (tacacs_plus_t)) +KERNEL_FQ KERNEL_FA void m16100_s04 (KERN_ATTR_ESALT (tacacs_plus_t)) { /** * modifier @@ -709,10 +709,10 @@ KERNEL_FQ void HC_ATTR_SEQ m16100_s04 (KERN_ATTR_ESALT (tacacs_plus_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m16100_s08 (KERN_ATTR_ESALT (tacacs_plus_t)) +KERNEL_FQ KERNEL_FA void m16100_s08 (KERN_ATTR_ESALT (tacacs_plus_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m16100_s16 (KERN_ATTR_ESALT (tacacs_plus_t)) +KERNEL_FQ KERNEL_FA void m16100_s16 (KERN_ATTR_ESALT (tacacs_plus_t)) { } diff --git a/OpenCL/m16100_a1-pure.cl b/OpenCL/m16100_a1-pure.cl index 99d81bc3c..7470968f8 100644 --- a/OpenCL/m16100_a1-pure.cl +++ b/OpenCL/m16100_a1-pure.cl @@ -24,7 +24,7 @@ typedef struct tacacs_plus } tacacs_plus_t; -KERNEL_FQ void HC_ATTR_SEQ m16100_mxx (KERN_ATTR_ESALT (tacacs_plus_t)) +KERNEL_FQ KERNEL_FA void m16100_mxx (KERN_ATTR_ESALT (tacacs_plus_t)) { /** * modifier @@ -182,7 +182,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16100_mxx (KERN_ATTR_ESALT (tacacs_plus_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m16100_sxx (KERN_ATTR_ESALT (tacacs_plus_t)) +KERNEL_FQ KERNEL_FA void m16100_sxx (KERN_ATTR_ESALT (tacacs_plus_t)) { /** * modifier diff --git a/OpenCL/m16100_a3-optimized.cl b/OpenCL/m16100_a3-optimized.cl index 950322dcb..ccd88c0e1 100644 --- a/OpenCL/m16100_a3-optimized.cl +++ b/OpenCL/m16100_a3-optimized.cl @@ -525,7 +525,7 @@ DECLSPEC void m16100s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m16100_m04 (KERN_ATTR_ESALT (tacacs_plus_t)) +KERNEL_FQ KERNEL_FA void m16100_m04 (KERN_ATTR_ESALT (tacacs_plus_t)) { /** * base @@ -574,7 +574,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16100_m04 (KERN_ATTR_ESALT (tacacs_plus_t)) m16100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m16100_m08 (KERN_ATTR_ESALT (tacacs_plus_t)) +KERNEL_FQ KERNEL_FA void m16100_m08 (KERN_ATTR_ESALT (tacacs_plus_t)) { /** * base @@ -623,7 +623,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16100_m08 (KERN_ATTR_ESALT (tacacs_plus_t)) m16100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m16100_m16 (KERN_ATTR_ESALT (tacacs_plus_t)) +KERNEL_FQ KERNEL_FA void m16100_m16 (KERN_ATTR_ESALT (tacacs_plus_t)) { /** * base @@ -672,7 +672,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16100_m16 (KERN_ATTR_ESALT (tacacs_plus_t)) m16100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m16100_s04 (KERN_ATTR_ESALT (tacacs_plus_t)) +KERNEL_FQ KERNEL_FA void m16100_s04 (KERN_ATTR_ESALT (tacacs_plus_t)) { /** * base @@ -721,7 +721,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16100_s04 (KERN_ATTR_ESALT (tacacs_plus_t)) m16100s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m16100_s08 (KERN_ATTR_ESALT (tacacs_plus_t)) +KERNEL_FQ KERNEL_FA void m16100_s08 (KERN_ATTR_ESALT (tacacs_plus_t)) { /** * base @@ -770,7 +770,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16100_s08 (KERN_ATTR_ESALT (tacacs_plus_t)) m16100s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m16100_s16 (KERN_ATTR_ESALT (tacacs_plus_t)) +KERNEL_FQ KERNEL_FA void m16100_s16 (KERN_ATTR_ESALT (tacacs_plus_t)) { /** * base diff --git a/OpenCL/m16100_a3-pure.cl b/OpenCL/m16100_a3-pure.cl index 875dc176f..9908831c5 100644 --- a/OpenCL/m16100_a3-pure.cl +++ b/OpenCL/m16100_a3-pure.cl @@ -24,7 +24,7 @@ typedef struct tacacs_plus } tacacs_plus_t; -KERNEL_FQ void HC_ATTR_SEQ m16100_mxx (KERN_ATTR_VECTOR_ESALT (tacacs_plus_t)) +KERNEL_FQ KERNEL_FA void m16100_mxx (KERN_ATTR_VECTOR_ESALT (tacacs_plus_t)) { /** * modifier @@ -199,7 +199,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16100_mxx (KERN_ATTR_VECTOR_ESALT (tacacs_plus_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m16100_sxx (KERN_ATTR_VECTOR_ESALT (tacacs_plus_t)) +KERNEL_FQ KERNEL_FA void m16100_sxx (KERN_ATTR_VECTOR_ESALT (tacacs_plus_t)) { /** * modifier diff --git a/OpenCL/m16200-pure.cl b/OpenCL/m16200-pure.cl index 0e9ff5646..5bb9e772d 100644 --- a/OpenCL/m16200-pure.cl +++ b/OpenCL/m16200-pure.cl @@ -79,7 +79,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m16200_init (KERN_ATTR_TMPS_ESALT (apple_secure_notes_tmp_t, apple_secure_notes_t)) +KERNEL_FQ KERNEL_FA void m16200_init (KERN_ATTR_TMPS_ESALT (apple_secure_notes_tmp_t, apple_secure_notes_t)) { /** * base @@ -163,7 +163,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16200_init (KERN_ATTR_TMPS_ESALT (apple_secure_notes } } -KERNEL_FQ void HC_ATTR_SEQ m16200_loop (KERN_ATTR_TMPS_ESALT (apple_secure_notes_tmp_t, apple_secure_notes_t)) +KERNEL_FQ KERNEL_FA void m16200_loop (KERN_ATTR_TMPS_ESALT (apple_secure_notes_tmp_t, apple_secure_notes_t)) { const u64 gid = get_global_id (0); @@ -269,7 +269,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16200_loop (KERN_ATTR_TMPS_ESALT (apple_secure_notes } } -KERNEL_FQ void HC_ATTR_SEQ m16200_comp (KERN_ATTR_TMPS_ESALT (apple_secure_notes_tmp_t, apple_secure_notes_t)) +KERNEL_FQ KERNEL_FA void m16200_comp (KERN_ATTR_TMPS_ESALT (apple_secure_notes_tmp_t, apple_secure_notes_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m16300-pure.cl b/OpenCL/m16300-pure.cl index cba3c0127..a65cac579 100644 --- a/OpenCL/m16300-pure.cl +++ b/OpenCL/m16300-pure.cl @@ -207,7 +207,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m16300_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ethereum_presale_t)) +KERNEL_FQ KERNEL_FA void m16300_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ethereum_presale_t)) { /** * base @@ -291,7 +291,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16300_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m16300_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ethereum_presale_t)) +KERNEL_FQ KERNEL_FA void m16300_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ethereum_presale_t)) { const u64 gid = get_global_id (0); @@ -397,7 +397,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16300_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m16300_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ethereum_presale_t)) +KERNEL_FQ KERNEL_FA void m16300_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ethereum_presale_t)) { /** * base diff --git a/OpenCL/m16400_a0-optimized.cl b/OpenCL/m16400_a0-optimized.cl index c3826bc98..b863b036d 100644 --- a/OpenCL/m16400_a0-optimized.cl +++ b/OpenCL/m16400_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m16400_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m16400_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -155,15 +155,15 @@ KERNEL_FQ void HC_ATTR_SEQ m16400_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m16400_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m16400_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m16400_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m16400_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m16400_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m16400_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -317,10 +317,10 @@ KERNEL_FQ void HC_ATTR_SEQ m16400_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m16400_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m16400_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m16400_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m16400_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m16400_a0-pure.cl b/OpenCL/m16400_a0-pure.cl index ec7b4bdb5..af25ddee5 100644 --- a/OpenCL/m16400_a0-pure.cl +++ b/OpenCL/m16400_a0-pure.cl @@ -176,7 +176,7 @@ DECLSPEC void cram_md5_final (PRIVATE_AS md5_ctx_t *ctx) cram_md5_transform (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h); } -KERNEL_FQ void HC_ATTR_SEQ m16400_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m16400_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -220,7 +220,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16400_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m16400_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m16400_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m16400_a1-optimized.cl b/OpenCL/m16400_a1-optimized.cl index 3b4cd0227..da143dbe6 100644 --- a/OpenCL/m16400_a1-optimized.cl +++ b/OpenCL/m16400_a1-optimized.cl @@ -15,7 +15,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m16400_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m16400_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -201,15 +201,15 @@ KERNEL_FQ void HC_ATTR_SEQ m16400_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m16400_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m16400_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m16400_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m16400_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m16400_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m16400_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -410,10 +410,10 @@ KERNEL_FQ void HC_ATTR_SEQ m16400_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m16400_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m16400_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m16400_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m16400_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m16400_a1-pure.cl b/OpenCL/m16400_a1-pure.cl index c470acf22..3247cc36b 100644 --- a/OpenCL/m16400_a1-pure.cl +++ b/OpenCL/m16400_a1-pure.cl @@ -174,7 +174,7 @@ DECLSPEC void cram_md5_final (PRIVATE_AS md5_ctx_t *ctx) cram_md5_transform (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h); } -KERNEL_FQ void HC_ATTR_SEQ m16400_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m16400_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -216,7 +216,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16400_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m16400_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m16400_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m16400_a3-optimized.cl b/OpenCL/m16400_a3-optimized.cl index 1392ece32..366664c42 100644 --- a/OpenCL/m16400_a3-optimized.cl +++ b/OpenCL/m16400_a3-optimized.cl @@ -463,7 +463,7 @@ DECLSPEC void m16400s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m16400_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m16400_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -503,7 +503,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16400_m04 (KERN_ATTR_VECTOR ()) m16400m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m16400_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m16400_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -543,7 +543,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16400_m08 (KERN_ATTR_VECTOR ()) m16400m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m16400_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m16400_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -583,7 +583,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16400_m16 (KERN_ATTR_VECTOR ()) m16400m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m16400_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m16400_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -623,7 +623,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16400_s04 (KERN_ATTR_VECTOR ()) m16400s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m16400_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m16400_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -663,7 +663,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16400_s08 (KERN_ATTR_VECTOR ()) m16400s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m16400_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m16400_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m16400_a3-pure.cl b/OpenCL/m16400_a3-pure.cl index 5bac2cbe9..acc6ab6f6 100644 --- a/OpenCL/m16400_a3-pure.cl +++ b/OpenCL/m16400_a3-pure.cl @@ -175,7 +175,7 @@ DECLSPEC void cram_md5_final_vector (PRIVATE_AS md5_ctx_vector_t *ctx) cram_md5_transform_vector (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h); } -KERNEL_FQ void HC_ATTR_SEQ m16400_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m16400_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -230,7 +230,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16400_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m16400_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m16400_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m16511_a0-pure.cl b/OpenCL/m16511_a0-pure.cl index 7aec79d1f..d84519877 100644 --- a/OpenCL/m16511_a0-pure.cl +++ b/OpenCL/m16511_a0-pure.cl @@ -25,7 +25,7 @@ typedef struct jwt } jwt_t; -KERNEL_FQ void HC_ATTR_SEQ m16511_mxx (KERN_ATTR_RULES_ESALT (jwt_t)) +KERNEL_FQ KERNEL_FA void m16511_mxx (KERN_ATTR_RULES_ESALT (jwt_t)) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16511_mxx (KERN_ATTR_RULES_ESALT (jwt_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m16511_sxx (KERN_ATTR_RULES_ESALT (jwt_t)) +KERNEL_FQ KERNEL_FA void m16511_sxx (KERN_ATTR_RULES_ESALT (jwt_t)) { /** * modifier diff --git a/OpenCL/m16511_a1-pure.cl b/OpenCL/m16511_a1-pure.cl index 576ff8065..39f466d11 100644 --- a/OpenCL/m16511_a1-pure.cl +++ b/OpenCL/m16511_a1-pure.cl @@ -23,7 +23,7 @@ typedef struct jwt } jwt_t; -KERNEL_FQ void HC_ATTR_SEQ m16511_mxx (KERN_ATTR_ESALT (jwt_t)) +KERNEL_FQ KERNEL_FA void m16511_mxx (KERN_ATTR_ESALT (jwt_t)) { /** * modifier @@ -92,7 +92,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16511_mxx (KERN_ATTR_ESALT (jwt_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m16511_sxx (KERN_ATTR_ESALT (jwt_t)) +KERNEL_FQ KERNEL_FA void m16511_sxx (KERN_ATTR_ESALT (jwt_t)) { /** * modifier diff --git a/OpenCL/m16511_a3-pure.cl b/OpenCL/m16511_a3-pure.cl index 34c2ad669..a2ee8414f 100644 --- a/OpenCL/m16511_a3-pure.cl +++ b/OpenCL/m16511_a3-pure.cl @@ -23,7 +23,7 @@ typedef struct jwt } jwt_t; -KERNEL_FQ void HC_ATTR_SEQ m16511_mxx (KERN_ATTR_VECTOR_ESALT (jwt_t)) +KERNEL_FQ KERNEL_FA void m16511_mxx (KERN_ATTR_VECTOR_ESALT (jwt_t)) { /** * modifier @@ -78,7 +78,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16511_mxx (KERN_ATTR_VECTOR_ESALT (jwt_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m16511_sxx (KERN_ATTR_VECTOR_ESALT (jwt_t)) +KERNEL_FQ KERNEL_FA void m16511_sxx (KERN_ATTR_VECTOR_ESALT (jwt_t)) { /** * modifier diff --git a/OpenCL/m16512_a0-pure.cl b/OpenCL/m16512_a0-pure.cl index 072901118..89e87de4f 100644 --- a/OpenCL/m16512_a0-pure.cl +++ b/OpenCL/m16512_a0-pure.cl @@ -25,7 +25,7 @@ typedef struct jwt } jwt_t; -KERNEL_FQ void HC_ATTR_SEQ m16512_mxx (KERN_ATTR_RULES_ESALT (jwt_t)) +KERNEL_FQ KERNEL_FA void m16512_mxx (KERN_ATTR_RULES_ESALT (jwt_t)) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16512_mxx (KERN_ATTR_RULES_ESALT (jwt_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m16512_sxx (KERN_ATTR_RULES_ESALT (jwt_t)) +KERNEL_FQ KERNEL_FA void m16512_sxx (KERN_ATTR_RULES_ESALT (jwt_t)) { /** * modifier diff --git a/OpenCL/m16512_a1-pure.cl b/OpenCL/m16512_a1-pure.cl index b73bc26c6..a55529392 100644 --- a/OpenCL/m16512_a1-pure.cl +++ b/OpenCL/m16512_a1-pure.cl @@ -23,7 +23,7 @@ typedef struct jwt } jwt_t; -KERNEL_FQ void HC_ATTR_SEQ m16512_mxx (KERN_ATTR_ESALT (jwt_t)) +KERNEL_FQ KERNEL_FA void m16512_mxx (KERN_ATTR_ESALT (jwt_t)) { /** * modifier @@ -92,7 +92,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16512_mxx (KERN_ATTR_ESALT (jwt_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m16512_sxx (KERN_ATTR_ESALT (jwt_t)) +KERNEL_FQ KERNEL_FA void m16512_sxx (KERN_ATTR_ESALT (jwt_t)) { /** * modifier diff --git a/OpenCL/m16512_a3-pure.cl b/OpenCL/m16512_a3-pure.cl index d74dfb54f..34aab0b2c 100644 --- a/OpenCL/m16512_a3-pure.cl +++ b/OpenCL/m16512_a3-pure.cl @@ -23,7 +23,7 @@ typedef struct jwt } jwt_t; -KERNEL_FQ void HC_ATTR_SEQ m16512_mxx (KERN_ATTR_VECTOR_ESALT (jwt_t)) +KERNEL_FQ KERNEL_FA void m16512_mxx (KERN_ATTR_VECTOR_ESALT (jwt_t)) { /** * modifier @@ -78,7 +78,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16512_mxx (KERN_ATTR_VECTOR_ESALT (jwt_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m16512_sxx (KERN_ATTR_VECTOR_ESALT (jwt_t)) +KERNEL_FQ KERNEL_FA void m16512_sxx (KERN_ATTR_VECTOR_ESALT (jwt_t)) { /** * modifier diff --git a/OpenCL/m16513_a0-pure.cl b/OpenCL/m16513_a0-pure.cl index 9ef35c320..733070149 100644 --- a/OpenCL/m16513_a0-pure.cl +++ b/OpenCL/m16513_a0-pure.cl @@ -25,7 +25,7 @@ typedef struct jwt } jwt_t; -KERNEL_FQ void HC_ATTR_SEQ m16513_mxx (KERN_ATTR_RULES_ESALT (jwt_t)) +KERNEL_FQ KERNEL_FA void m16513_mxx (KERN_ATTR_RULES_ESALT (jwt_t)) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16513_mxx (KERN_ATTR_RULES_ESALT (jwt_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m16513_sxx (KERN_ATTR_RULES_ESALT (jwt_t)) +KERNEL_FQ KERNEL_FA void m16513_sxx (KERN_ATTR_RULES_ESALT (jwt_t)) { /** * modifier diff --git a/OpenCL/m16513_a1-pure.cl b/OpenCL/m16513_a1-pure.cl index 7293415c5..4159757b4 100644 --- a/OpenCL/m16513_a1-pure.cl +++ b/OpenCL/m16513_a1-pure.cl @@ -23,7 +23,7 @@ typedef struct jwt } jwt_t; -KERNEL_FQ void HC_ATTR_SEQ m16513_mxx (KERN_ATTR_ESALT (jwt_t)) +KERNEL_FQ KERNEL_FA void m16513_mxx (KERN_ATTR_ESALT (jwt_t)) { /** * modifier @@ -92,7 +92,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16513_mxx (KERN_ATTR_ESALT (jwt_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m16513_sxx (KERN_ATTR_ESALT (jwt_t)) +KERNEL_FQ KERNEL_FA void m16513_sxx (KERN_ATTR_ESALT (jwt_t)) { /** * modifier diff --git a/OpenCL/m16513_a3-pure.cl b/OpenCL/m16513_a3-pure.cl index fc0314d0d..56c7f5444 100644 --- a/OpenCL/m16513_a3-pure.cl +++ b/OpenCL/m16513_a3-pure.cl @@ -23,7 +23,7 @@ typedef struct jwt } jwt_t; -KERNEL_FQ void HC_ATTR_SEQ m16513_mxx (KERN_ATTR_VECTOR_ESALT (jwt_t)) +KERNEL_FQ KERNEL_FA void m16513_mxx (KERN_ATTR_VECTOR_ESALT (jwt_t)) { /** * modifier @@ -78,7 +78,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16513_mxx (KERN_ATTR_VECTOR_ESALT (jwt_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m16513_sxx (KERN_ATTR_VECTOR_ESALT (jwt_t)) +KERNEL_FQ KERNEL_FA void m16513_sxx (KERN_ATTR_VECTOR_ESALT (jwt_t)) { /** * modifier diff --git a/OpenCL/m16600_a0-optimized.cl b/OpenCL/m16600_a0-optimized.cl index b82c41478..1d3b4871f 100644 --- a/OpenCL/m16600_a0-optimized.cl +++ b/OpenCL/m16600_a0-optimized.cl @@ -25,7 +25,7 @@ typedef struct electrum_wallet } electrum_wallet_t; -KERNEL_FQ void HC_ATTR_SEQ m16600_m04 (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) +KERNEL_FQ KERNEL_FA void m16600_m04 (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) { /** * base @@ -429,15 +429,15 @@ KERNEL_FQ void HC_ATTR_SEQ m16600_m04 (KERN_ATTR_RULES_ESALT (electrum_wallet_t) } } -KERNEL_FQ void HC_ATTR_SEQ m16600_m08 (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) +KERNEL_FQ KERNEL_FA void m16600_m08 (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m16600_m16 (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) +KERNEL_FQ KERNEL_FA void m16600_m16 (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m16600_s04 (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) +KERNEL_FQ KERNEL_FA void m16600_s04 (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) { /** * base @@ -841,10 +841,10 @@ KERNEL_FQ void HC_ATTR_SEQ m16600_s04 (KERN_ATTR_RULES_ESALT (electrum_wallet_t) } } -KERNEL_FQ void HC_ATTR_SEQ m16600_s08 (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) +KERNEL_FQ KERNEL_FA void m16600_s08 (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m16600_s16 (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) +KERNEL_FQ KERNEL_FA void m16600_s16 (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) { } diff --git a/OpenCL/m16600_a0-pure.cl b/OpenCL/m16600_a0-pure.cl index d0d84eff6..40655d3b6 100644 --- a/OpenCL/m16600_a0-pure.cl +++ b/OpenCL/m16600_a0-pure.cl @@ -25,7 +25,7 @@ typedef struct electrum_wallet } electrum_wallet_t; -KERNEL_FQ void HC_ATTR_SEQ m16600_mxx (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) +KERNEL_FQ KERNEL_FA void m16600_mxx (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) { /** * base @@ -243,7 +243,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16600_mxx (KERN_ATTR_RULES_ESALT (electrum_wallet_t) } } -KERNEL_FQ void HC_ATTR_SEQ m16600_sxx (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) +KERNEL_FQ KERNEL_FA void m16600_sxx (KERN_ATTR_RULES_ESALT (electrum_wallet_t)) { /** * base diff --git a/OpenCL/m16600_a1-optimized.cl b/OpenCL/m16600_a1-optimized.cl index d12751f86..0a51cd748 100644 --- a/OpenCL/m16600_a1-optimized.cl +++ b/OpenCL/m16600_a1-optimized.cl @@ -23,7 +23,7 @@ typedef struct electrum_wallet } electrum_wallet_t; -KERNEL_FQ void HC_ATTR_SEQ m16600_m04 (KERN_ATTR_ESALT (electrum_wallet_t)) +KERNEL_FQ KERNEL_FA void m16600_m04 (KERN_ATTR_ESALT (electrum_wallet_t)) { /** * base @@ -485,15 +485,15 @@ KERNEL_FQ void HC_ATTR_SEQ m16600_m04 (KERN_ATTR_ESALT (electrum_wallet_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m16600_m08 (KERN_ATTR_ESALT (electrum_wallet_t)) +KERNEL_FQ KERNEL_FA void m16600_m08 (KERN_ATTR_ESALT (electrum_wallet_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m16600_m16 (KERN_ATTR_ESALT (electrum_wallet_t)) +KERNEL_FQ KERNEL_FA void m16600_m16 (KERN_ATTR_ESALT (electrum_wallet_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m16600_s04 (KERN_ATTR_ESALT (electrum_wallet_t)) +KERNEL_FQ KERNEL_FA void m16600_s04 (KERN_ATTR_ESALT (electrum_wallet_t)) { /** * base @@ -955,10 +955,10 @@ KERNEL_FQ void HC_ATTR_SEQ m16600_s04 (KERN_ATTR_ESALT (electrum_wallet_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m16600_s08 (KERN_ATTR_ESALT (electrum_wallet_t)) +KERNEL_FQ KERNEL_FA void m16600_s08 (KERN_ATTR_ESALT (electrum_wallet_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m16600_s16 (KERN_ATTR_ESALT (electrum_wallet_t)) +KERNEL_FQ KERNEL_FA void m16600_s16 (KERN_ATTR_ESALT (electrum_wallet_t)) { } diff --git a/OpenCL/m16600_a1-pure.cl b/OpenCL/m16600_a1-pure.cl index a8cafa420..b654820c4 100644 --- a/OpenCL/m16600_a1-pure.cl +++ b/OpenCL/m16600_a1-pure.cl @@ -23,7 +23,7 @@ typedef struct electrum_wallet } electrum_wallet_t; -KERNEL_FQ void HC_ATTR_SEQ m16600_mxx (KERN_ATTR_ESALT (electrum_wallet_t)) +KERNEL_FQ KERNEL_FA void m16600_mxx (KERN_ATTR_ESALT (electrum_wallet_t)) { /** * base @@ -239,7 +239,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16600_mxx (KERN_ATTR_ESALT (electrum_wallet_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m16600_sxx (KERN_ATTR_ESALT (electrum_wallet_t)) +KERNEL_FQ KERNEL_FA void m16600_sxx (KERN_ATTR_ESALT (electrum_wallet_t)) { /** * base diff --git a/OpenCL/m16600_a3-optimized.cl b/OpenCL/m16600_a3-optimized.cl index 3a6ca0f69..45760ab33 100644 --- a/OpenCL/m16600_a3-optimized.cl +++ b/OpenCL/m16600_a3-optimized.cl @@ -204,7 +204,7 @@ DECLSPEC void m16600 (SHM_TYPE u32a *s_te0, SHM_TYPE u32a *s_te1, SHM_TYPE u32a } } -KERNEL_FQ void HC_ATTR_SEQ m16600_m04 (KERN_ATTR_ESALT (electrum_wallet_t)) +KERNEL_FQ KERNEL_FA void m16600_m04 (KERN_ATTR_ESALT (electrum_wallet_t)) { /** * base @@ -299,7 +299,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16600_m04 (KERN_ATTR_ESALT (electrum_wallet_t)) m16600 (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m16600_m08 (KERN_ATTR_ESALT (electrum_wallet_t)) +KERNEL_FQ KERNEL_FA void m16600_m08 (KERN_ATTR_ESALT (electrum_wallet_t)) { /** * base @@ -394,7 +394,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16600_m08 (KERN_ATTR_ESALT (electrum_wallet_t)) m16600 (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m16600_m16 (KERN_ATTR_ESALT (electrum_wallet_t)) +KERNEL_FQ KERNEL_FA void m16600_m16 (KERN_ATTR_ESALT (electrum_wallet_t)) { /** * base @@ -489,7 +489,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16600_m16 (KERN_ATTR_ESALT (electrum_wallet_t)) m16600 (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m16600_s04 (KERN_ATTR_ESALT (electrum_wallet_t)) +KERNEL_FQ KERNEL_FA void m16600_s04 (KERN_ATTR_ESALT (electrum_wallet_t)) { /** * base @@ -584,7 +584,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16600_s04 (KERN_ATTR_ESALT (electrum_wallet_t)) m16600 (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m16600_s08 (KERN_ATTR_ESALT (electrum_wallet_t)) +KERNEL_FQ KERNEL_FA void m16600_s08 (KERN_ATTR_ESALT (electrum_wallet_t)) { /** * base @@ -679,7 +679,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16600_s08 (KERN_ATTR_ESALT (electrum_wallet_t)) m16600 (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m16600_s16 (KERN_ATTR_ESALT (electrum_wallet_t)) +KERNEL_FQ KERNEL_FA void m16600_s16 (KERN_ATTR_ESALT (electrum_wallet_t)) { /** * base diff --git a/OpenCL/m16600_a3-pure.cl b/OpenCL/m16600_a3-pure.cl index 6e649cf86..a611b6759 100644 --- a/OpenCL/m16600_a3-pure.cl +++ b/OpenCL/m16600_a3-pure.cl @@ -23,7 +23,7 @@ typedef struct electrum_wallet } electrum_wallet_t; -KERNEL_FQ void HC_ATTR_SEQ m16600_mxx (KERN_ATTR_VECTOR_ESALT (electrum_wallet_t)) +KERNEL_FQ KERNEL_FA void m16600_mxx (KERN_ATTR_VECTOR_ESALT (electrum_wallet_t)) { /** * base @@ -252,7 +252,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16600_mxx (KERN_ATTR_VECTOR_ESALT (electrum_wallet_t } } -KERNEL_FQ void HC_ATTR_SEQ m16600_sxx (KERN_ATTR_VECTOR_ESALT (electrum_wallet_t)) +KERNEL_FQ KERNEL_FA void m16600_sxx (KERN_ATTR_VECTOR_ESALT (electrum_wallet_t)) { /** * base diff --git a/OpenCL/m16800-pure.cl b/OpenCL/m16800-pure.cl index 964fd6278..f6d24a330 100644 --- a/OpenCL/m16800-pure.cl +++ b/OpenCL/m16800-pure.cl @@ -81,7 +81,7 @@ DECLSPEC void hmac_sha1_run_V (u32x *w0, u32x *w1, u32x *w2, u32x *w3, const u32 sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m16800_init (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_pmkid_t)) +KERNEL_FQ KERNEL_FA void m16800_init (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_pmkid_t)) { /** * base @@ -189,7 +189,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16800_init (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, tmps[gid].out[9] = sha1_hmac_ctx2.opad.h[4]; } -KERNEL_FQ void HC_ATTR_SEQ m16800_loop (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_pmkid_t)) +KERNEL_FQ KERNEL_FA void m16800_loop (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_pmkid_t)) { const u64 gid = get_global_id (0); @@ -332,12 +332,12 @@ KERNEL_FQ void HC_ATTR_SEQ m16800_loop (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, unpackv (tmps, out, gid, 9, out[4]); } -KERNEL_FQ void HC_ATTR_SEQ m16800_comp (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_pmkid_t)) +KERNEL_FQ KERNEL_FA void m16800_comp (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_pmkid_t)) { // not in use here, special case... } -KERNEL_FQ void HC_ATTR_SEQ m16800_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_pmkid_t)) +KERNEL_FQ KERNEL_FA void m16800_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_pmkid_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m16801-pure.cl b/OpenCL/m16801-pure.cl index 1452ab973..daf6f0f23 100644 --- a/OpenCL/m16801-pure.cl +++ b/OpenCL/m16801-pure.cl @@ -58,7 +58,7 @@ DECLSPEC u8 hex_to_u8 (const u8 *hex) } #endif -KERNEL_FQ void HC_ATTR_SEQ m16801_init (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_pmkid_t)) +KERNEL_FQ KERNEL_FA void m16801_init (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_pmkid_t)) { const u64 gid = get_global_id (0); @@ -104,19 +104,19 @@ KERNEL_FQ void HC_ATTR_SEQ m16801_init (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa tmps[gid].out[7] = hc_swap32_S (out[7]); } -KERNEL_FQ void HC_ATTR_SEQ m16801_loop (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_pmkid_t)) +KERNEL_FQ KERNEL_FA void m16801_loop (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_pmkid_t)) { const u64 gid = get_global_id (0); if (gid >= GID_CNT) return; } -KERNEL_FQ void HC_ATTR_SEQ m16801_comp (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_pmkid_t)) +KERNEL_FQ KERNEL_FA void m16801_comp (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_pmkid_t)) { // not in use here, special case... } -KERNEL_FQ void HC_ATTR_SEQ m16801_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_pmkid_t)) +KERNEL_FQ KERNEL_FA void m16801_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_pmkid_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m16900-pure.cl b/OpenCL/m16900-pure.cl index 705c72795..985c23093 100644 --- a/OpenCL/m16900-pure.cl +++ b/OpenCL/m16900-pure.cl @@ -78,7 +78,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m16900_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ansible_vault_t)) +KERNEL_FQ KERNEL_FA void m16900_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ansible_vault_t)) { /** * base @@ -162,7 +162,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16900_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m16900_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ansible_vault_t)) +KERNEL_FQ KERNEL_FA void m16900_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ansible_vault_t)) { const u64 gid = get_global_id (0); @@ -268,7 +268,7 @@ KERNEL_FQ void HC_ATTR_SEQ m16900_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m16900_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ansible_vault_t)) +KERNEL_FQ KERNEL_FA void m16900_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, ansible_vault_t)) { /** * base diff --git a/OpenCL/m17010-pure.cl b/OpenCL/m17010-pure.cl index 1bc9fe36d..4c4e41571 100644 --- a/OpenCL/m17010-pure.cl +++ b/OpenCL/m17010-pure.cl @@ -211,7 +211,7 @@ DECLSPEC int check_decoded_data (PRIVATE_AS u32 *decoded_data, const u32 decoded && (expected_sha1[4] == hc_swap32_S (ctx.h[4])); } -KERNEL_FQ void HC_ATTR_SEQ m17010_init (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ KERNEL_FA void m17010_init (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { const u64 gid = get_global_id (0); @@ -260,7 +260,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17010_init (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) tmps[gid].len = 0; } -KERNEL_FQ void HC_ATTR_SEQ m17010_loop_prepare (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ KERNEL_FA void m17010_loop_prepare (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { const u64 gid = get_global_id (0); @@ -286,7 +286,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17010_loop_prepare (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, tmps[gid].len = SALT_REPEAT; } -KERNEL_FQ void HC_ATTR_SEQ m17010_loop (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ KERNEL_FA void m17010_loop (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { const u64 gid = get_global_id (0); @@ -358,12 +358,12 @@ KERNEL_FQ void HC_ATTR_SEQ m17010_loop (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) tmps[gid].len = ctx.len; } -KERNEL_FQ void HC_ATTR_SEQ m17010_comp (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ KERNEL_FA void m17010_comp (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { // not in use here, special case... } -KERNEL_FQ void HC_ATTR_SEQ m17010_aux1 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ KERNEL_FA void m17010_aux1 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { /** * modifier @@ -433,7 +433,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17010_aux1 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m17010_aux2 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ KERNEL_FA void m17010_aux2 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { /** * modifier diff --git a/OpenCL/m17020-pure.cl b/OpenCL/m17020-pure.cl index c7c4021d6..29fda3bfa 100644 --- a/OpenCL/m17020-pure.cl +++ b/OpenCL/m17020-pure.cl @@ -216,7 +216,7 @@ DECLSPEC int check_decoded_data (PRIVATE_AS u32 *decoded_data, const u32 decoded && (expected_sha1[4] == hc_swap32_S (ctx.h[4])); } -KERNEL_FQ void HC_ATTR_SEQ m17020_init (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ KERNEL_FA void m17020_init (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { const u64 gid = get_global_id (0); @@ -266,7 +266,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17020_init (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) tmps[gid].len = 0; } -KERNEL_FQ void HC_ATTR_SEQ m17020_loop_prepare (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ KERNEL_FA void m17020_loop_prepare (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { const u64 gid = get_global_id (0); @@ -308,7 +308,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17020_loop_prepare (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, tmps[gid].len = 0; } -KERNEL_FQ void HC_ATTR_SEQ m17020_loop (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ KERNEL_FA void m17020_loop (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { const u64 gid = get_global_id (0); @@ -386,12 +386,12 @@ KERNEL_FQ void HC_ATTR_SEQ m17020_loop (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) tmps[gid].len = ctx.len; } -KERNEL_FQ void HC_ATTR_SEQ m17020_comp (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ KERNEL_FA void m17020_comp (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { // not in use here, special case... } -KERNEL_FQ void HC_ATTR_SEQ m17020_aux1 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ KERNEL_FA void m17020_aux1 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { /** * modifier @@ -464,7 +464,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17020_aux1 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m17020_aux2 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ KERNEL_FA void m17020_aux2 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { /** * modifier diff --git a/OpenCL/m17030-pure.cl b/OpenCL/m17030-pure.cl index 3865a7eb0..b31f2eeb2 100644 --- a/OpenCL/m17030-pure.cl +++ b/OpenCL/m17030-pure.cl @@ -212,7 +212,7 @@ DECLSPEC int check_decoded_data (PRIVATE_AS u32 *decoded_data, const u32 decoded && (expected_sha1[4] == hc_swap32_S (ctx.h[4])); } -KERNEL_FQ void HC_ATTR_SEQ m17030_init (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ KERNEL_FA void m17030_init (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { const u64 gid = get_global_id (0); @@ -262,7 +262,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17030_init (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) tmps[gid].len = 0; } -KERNEL_FQ void HC_ATTR_SEQ m17030_loop_prepare (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ KERNEL_FA void m17030_loop_prepare (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { const u64 gid = get_global_id (0); @@ -288,7 +288,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17030_loop_prepare (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, tmps[gid].len = 0; } -KERNEL_FQ void HC_ATTR_SEQ m17030_loop (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ KERNEL_FA void m17030_loop (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { const u64 gid = get_global_id (0); @@ -358,12 +358,12 @@ KERNEL_FQ void HC_ATTR_SEQ m17030_loop (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) tmps[gid].len = ctx.len; } -KERNEL_FQ void HC_ATTR_SEQ m17030_comp (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ KERNEL_FA void m17030_comp (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { // not in use here, special case... } -KERNEL_FQ void HC_ATTR_SEQ m17030_aux1 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ KERNEL_FA void m17030_aux1 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { /** * modifier @@ -436,7 +436,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17030_aux1 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m17030_aux2 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ KERNEL_FA void m17030_aux2 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { /** * modifier diff --git a/OpenCL/m17040-pure.cl b/OpenCL/m17040-pure.cl index e268ce44c..020ab6b64 100644 --- a/OpenCL/m17040-pure.cl +++ b/OpenCL/m17040-pure.cl @@ -193,7 +193,7 @@ DECLSPEC int check_decoded_data (PRIVATE_AS u32 *decoded_data, const u32 decoded && (expected_sha1[4] == hc_swap32_S (ctx.h[4])); } -KERNEL_FQ void HC_ATTR_SEQ m17040_init (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ KERNEL_FA void m17040_init (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { const u64 gid = get_global_id (0); @@ -242,7 +242,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17040_init (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) tmps[gid].len = 0; } -KERNEL_FQ void HC_ATTR_SEQ m17040_loop_prepare (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ KERNEL_FA void m17040_loop_prepare (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { const u64 gid = get_global_id (0); @@ -279,7 +279,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17040_loop_prepare (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, tmps[gid].len = 0; } -KERNEL_FQ void HC_ATTR_SEQ m17040_loop (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ KERNEL_FA void m17040_loop (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -336,12 +336,12 @@ KERNEL_FQ void HC_ATTR_SEQ m17040_loop (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) tmps[gid].len = ctx.len; } -KERNEL_FQ void HC_ATTR_SEQ m17040_comp (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ KERNEL_FA void m17040_comp (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { // not in use here, special case... } -KERNEL_FQ void HC_ATTR_SEQ m17040_aux1 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) +KERNEL_FQ KERNEL_FA void m17040_aux1 (KERN_ATTR_TMPS_ESALT (gpg_tmp_t, gpg_t)) { /** * modifier diff --git a/OpenCL/m17200_a0-pure.cl b/OpenCL/m17200_a0-pure.cl index 134318275..cc85a10c9 100644 --- a/OpenCL/m17200_a0-pure.cl +++ b/OpenCL/m17200_a0-pure.cl @@ -529,7 +529,7 @@ DECLSPEC int check_inflate_code1 (u8 *next, int left) } } -KERNEL_FQ void HC_ATTR_SEQ m17200_sxx (KERN_ATTR_RULES_ESALT (pkzip_t)) +KERNEL_FQ KERNEL_FA void m17200_sxx (KERN_ATTR_RULES_ESALT (pkzip_t)) { /** * modifier @@ -767,7 +767,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17200_sxx (KERN_ATTR_RULES_ESALT (pkzip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m17200_mxx (KERN_ATTR_RULES_ESALT (pkzip_t)) +KERNEL_FQ KERNEL_FA void m17200_mxx (KERN_ATTR_RULES_ESALT (pkzip_t)) { /** * modifier diff --git a/OpenCL/m17200_a1-pure.cl b/OpenCL/m17200_a1-pure.cl index d23ca640b..7943ee531 100644 --- a/OpenCL/m17200_a1-pure.cl +++ b/OpenCL/m17200_a1-pure.cl @@ -527,7 +527,7 @@ DECLSPEC int check_inflate_code1 (PRIVATE_AS u8 *next, int left) } } -KERNEL_FQ void HC_ATTR_SEQ m17200_sxx (KERN_ATTR_ESALT (pkzip_t)) +KERNEL_FQ KERNEL_FA void m17200_sxx (KERN_ATTR_ESALT (pkzip_t)) { /** * modifier @@ -769,7 +769,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17200_sxx (KERN_ATTR_ESALT (pkzip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m17200_mxx (KERN_ATTR_ESALT (pkzip_t)) +KERNEL_FQ KERNEL_FA void m17200_mxx (KERN_ATTR_ESALT (pkzip_t)) { /** * modifier diff --git a/OpenCL/m17200_a3-pure.cl b/OpenCL/m17200_a3-pure.cl index a7be151f2..a370910a5 100644 --- a/OpenCL/m17200_a3-pure.cl +++ b/OpenCL/m17200_a3-pure.cl @@ -528,7 +528,7 @@ DECLSPEC int check_inflate_code1 (u8 *next, int left) } } -KERNEL_FQ void HC_ATTR_SEQ m17200_sxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) +KERNEL_FQ KERNEL_FA void m17200_sxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) { /** * modifier @@ -782,7 +782,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17200_sxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m17200_mxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) +KERNEL_FQ KERNEL_FA void m17200_mxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) { /** * modifier diff --git a/OpenCL/m17210_a0-pure.cl b/OpenCL/m17210_a0-pure.cl index ccc596181..6ad437ac4 100644 --- a/OpenCL/m17210_a0-pure.cl +++ b/OpenCL/m17210_a0-pure.cl @@ -220,7 +220,7 @@ CONSTANT_VK u32a crc32tab[256] = 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d }; -KERNEL_FQ void HC_ATTR_SEQ m17210_sxx (KERN_ATTR_RULES_ESALT (pkzip_t)) +KERNEL_FQ KERNEL_FA void m17210_sxx (KERN_ATTR_RULES_ESALT (pkzip_t)) { /** * modifier @@ -459,7 +459,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17210_sxx (KERN_ATTR_RULES_ESALT (pkzip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m17210_mxx (KERN_ATTR_RULES_ESALT (pkzip_t)) +KERNEL_FQ KERNEL_FA void m17210_mxx (KERN_ATTR_RULES_ESALT (pkzip_t)) { /** * modifier diff --git a/OpenCL/m17210_a1-pure.cl b/OpenCL/m17210_a1-pure.cl index e93fef661..5ecdd74e5 100644 --- a/OpenCL/m17210_a1-pure.cl +++ b/OpenCL/m17210_a1-pure.cl @@ -218,7 +218,7 @@ CONSTANT_VK u32a crc32tab[256] = 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d }; -KERNEL_FQ void HC_ATTR_SEQ m17210_sxx (KERN_ATTR_ESALT (pkzip_t)) +KERNEL_FQ KERNEL_FA void m17210_sxx (KERN_ATTR_ESALT (pkzip_t)) { /** * modifier @@ -459,7 +459,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17210_sxx (KERN_ATTR_ESALT (pkzip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m17210_mxx (KERN_ATTR_ESALT (pkzip_t)) +KERNEL_FQ KERNEL_FA void m17210_mxx (KERN_ATTR_ESALT (pkzip_t)) { /** * modifier diff --git a/OpenCL/m17210_a3-pure.cl b/OpenCL/m17210_a3-pure.cl index 1bc833010..49859cd31 100644 --- a/OpenCL/m17210_a3-pure.cl +++ b/OpenCL/m17210_a3-pure.cl @@ -218,7 +218,7 @@ CONSTANT_VK u32a crc32tab[256] = 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d }; -KERNEL_FQ void HC_ATTR_SEQ m17210_sxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) +KERNEL_FQ KERNEL_FA void m17210_sxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) { /** * modifier @@ -471,7 +471,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17210_sxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m17210_mxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) +KERNEL_FQ KERNEL_FA void m17210_mxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) { /** * modifier diff --git a/OpenCL/m17220_a0-pure.cl b/OpenCL/m17220_a0-pure.cl index 077011bee..1c7d0155c 100644 --- a/OpenCL/m17220_a0-pure.cl +++ b/OpenCL/m17220_a0-pure.cl @@ -527,7 +527,7 @@ DECLSPEC int check_inflate_code1 (u8 *next, int left) } } -KERNEL_FQ void HC_ATTR_SEQ m17220_sxx (KERN_ATTR_RULES_ESALT (pkzip_t)) +KERNEL_FQ KERNEL_FA void m17220_sxx (KERN_ATTR_RULES_ESALT (pkzip_t)) { /** * modifier @@ -792,7 +792,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17220_sxx (KERN_ATTR_RULES_ESALT (pkzip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m17220_mxx (KERN_ATTR_RULES_ESALT (pkzip_t)) +KERNEL_FQ KERNEL_FA void m17220_mxx (KERN_ATTR_RULES_ESALT (pkzip_t)) { /** * modifier diff --git a/OpenCL/m17220_a1-pure.cl b/OpenCL/m17220_a1-pure.cl index 5624fa593..a0256b90e 100644 --- a/OpenCL/m17220_a1-pure.cl +++ b/OpenCL/m17220_a1-pure.cl @@ -525,7 +525,7 @@ DECLSPEC int check_inflate_code1 (PRIVATE_AS u8 *next, int left) } } -KERNEL_FQ void HC_ATTR_SEQ m17220_sxx (KERN_ATTR_ESALT (pkzip_t)) +KERNEL_FQ KERNEL_FA void m17220_sxx (KERN_ATTR_ESALT (pkzip_t)) { /** * modifier @@ -792,7 +792,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17220_sxx (KERN_ATTR_ESALT (pkzip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m17220_mxx (KERN_ATTR_ESALT (pkzip_t)) +KERNEL_FQ KERNEL_FA void m17220_mxx (KERN_ATTR_ESALT (pkzip_t)) { /** * modifier diff --git a/OpenCL/m17220_a3-pure.cl b/OpenCL/m17220_a3-pure.cl index f05e81570..a0bd659db 100644 --- a/OpenCL/m17220_a3-pure.cl +++ b/OpenCL/m17220_a3-pure.cl @@ -525,7 +525,7 @@ DECLSPEC int check_inflate_code1 (u8 *next, int left) } } -KERNEL_FQ void HC_ATTR_SEQ m17220_sxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) +KERNEL_FQ KERNEL_FA void m17220_sxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) { /** * modifier @@ -804,7 +804,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17220_sxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m17220_mxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) +KERNEL_FQ KERNEL_FA void m17220_mxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) { /** * modifier diff --git a/OpenCL/m17225_a0-pure.cl b/OpenCL/m17225_a0-pure.cl index 00c06b196..487aa2823 100644 --- a/OpenCL/m17225_a0-pure.cl +++ b/OpenCL/m17225_a0-pure.cl @@ -527,7 +527,7 @@ DECLSPEC int check_inflate_code1 (u8 *next, int left) } } -KERNEL_FQ void HC_ATTR_SEQ m17225_sxx (KERN_ATTR_RULES_ESALT (pkzip_t)) +KERNEL_FQ KERNEL_FA void m17225_sxx (KERN_ATTR_RULES_ESALT (pkzip_t)) { /** * modifier @@ -855,7 +855,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17225_sxx (KERN_ATTR_RULES_ESALT (pkzip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m17225_mxx (KERN_ATTR_RULES_ESALT (pkzip_t)) +KERNEL_FQ KERNEL_FA void m17225_mxx (KERN_ATTR_RULES_ESALT (pkzip_t)) { /** * modifier diff --git a/OpenCL/m17225_a1-pure.cl b/OpenCL/m17225_a1-pure.cl index 42c86079f..cf6cae8b9 100644 --- a/OpenCL/m17225_a1-pure.cl +++ b/OpenCL/m17225_a1-pure.cl @@ -525,7 +525,7 @@ DECLSPEC int check_inflate_code1 (PRIVATE_AS u8 *next, int left) } } -KERNEL_FQ void HC_ATTR_SEQ m17225_sxx (KERN_ATTR_ESALT (pkzip_t)) +KERNEL_FQ KERNEL_FA void m17225_sxx (KERN_ATTR_ESALT (pkzip_t)) { /** * modifier @@ -854,7 +854,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17225_sxx (KERN_ATTR_ESALT (pkzip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m17225_mxx (KERN_ATTR_ESALT (pkzip_t)) +KERNEL_FQ KERNEL_FA void m17225_mxx (KERN_ATTR_ESALT (pkzip_t)) { /** * modifier diff --git a/OpenCL/m17225_a3-pure.cl b/OpenCL/m17225_a3-pure.cl index e350deb96..f563a1aee 100644 --- a/OpenCL/m17225_a3-pure.cl +++ b/OpenCL/m17225_a3-pure.cl @@ -525,7 +525,7 @@ DECLSPEC int check_inflate_code1 (u8 *next, int left) } } -KERNEL_FQ void HC_ATTR_SEQ m17225_sxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) +KERNEL_FQ KERNEL_FA void m17225_sxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) { /** * modifier @@ -866,7 +866,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17225_sxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m17225_mxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) +KERNEL_FQ KERNEL_FA void m17225_mxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) { /** * modifier diff --git a/OpenCL/m17230_a0-pure.cl b/OpenCL/m17230_a0-pure.cl index 83cee4daf..39d1e022f 100644 --- a/OpenCL/m17230_a0-pure.cl +++ b/OpenCL/m17230_a0-pure.cl @@ -220,7 +220,7 @@ CONSTANT_VK u32a crc32tab[256] = 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d }; -KERNEL_FQ void HC_ATTR_SEQ m17230_sxx (KERN_ATTR_RULES_ESALT (pkzip_t)) +KERNEL_FQ KERNEL_FA void m17230_sxx (KERN_ATTR_RULES_ESALT (pkzip_t)) { /** * modifier @@ -390,7 +390,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17230_sxx (KERN_ATTR_RULES_ESALT (pkzip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m17230_mxx (KERN_ATTR_RULES_ESALT (pkzip_t)) +KERNEL_FQ KERNEL_FA void m17230_mxx (KERN_ATTR_RULES_ESALT (pkzip_t)) { /** * modifier diff --git a/OpenCL/m17230_a1-pure.cl b/OpenCL/m17230_a1-pure.cl index f89e23046..08dc09322 100644 --- a/OpenCL/m17230_a1-pure.cl +++ b/OpenCL/m17230_a1-pure.cl @@ -218,7 +218,7 @@ CONSTANT_VK u32a crc32tab[256] = 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d }; -KERNEL_FQ void HC_ATTR_SEQ m17230_sxx (KERN_ATTR_ESALT (pkzip_t)) +KERNEL_FQ KERNEL_FA void m17230_sxx (KERN_ATTR_ESALT (pkzip_t)) { /** * modifier @@ -390,7 +390,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17230_sxx (KERN_ATTR_ESALT (pkzip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m17230_mxx (KERN_ATTR_ESALT (pkzip_t)) +KERNEL_FQ KERNEL_FA void m17230_mxx (KERN_ATTR_ESALT (pkzip_t)) { /** * modifier diff --git a/OpenCL/m17230_a3-pure.cl b/OpenCL/m17230_a3-pure.cl index f5dcfd923..42215c69a 100644 --- a/OpenCL/m17230_a3-pure.cl +++ b/OpenCL/m17230_a3-pure.cl @@ -218,7 +218,7 @@ CONSTANT_VK u32a crc32tab[256] = 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d }; -KERNEL_FQ void HC_ATTR_SEQ m17230_sxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) +KERNEL_FQ KERNEL_FA void m17230_sxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) { /** * modifier @@ -404,7 +404,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17230_sxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m17230_mxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) +KERNEL_FQ KERNEL_FA void m17230_mxx (KERN_ATTR_VECTOR_ESALT (pkzip_t)) { /** * modifier diff --git a/OpenCL/m17300_a0-optimized.cl b/OpenCL/m17300_a0-optimized.cl index d61df5dcb..d47fba4c2 100644 --- a/OpenCL/m17300_a0-optimized.cl +++ b/OpenCL/m17300_a0-optimized.cl @@ -29,7 +29,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void HC_ATTR_SEQ m17300_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17300_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -239,15 +239,15 @@ KERNEL_FQ void HC_ATTR_SEQ m17300_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m17300_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17300_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17300_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17300_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17300_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17300_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -469,10 +469,10 @@ KERNEL_FQ void HC_ATTR_SEQ m17300_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m17300_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17300_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17300_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17300_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m17300_a1-optimized.cl b/OpenCL/m17300_a1-optimized.cl index d3976cfac..4e5e9e1fc 100644 --- a/OpenCL/m17300_a1-optimized.cl +++ b/OpenCL/m17300_a1-optimized.cl @@ -27,7 +27,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void HC_ATTR_SEQ m17300_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17300_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -296,15 +296,15 @@ KERNEL_FQ void HC_ATTR_SEQ m17300_m04 (KERN_ATTR_BASIC ()) } -KERNEL_FQ void HC_ATTR_SEQ m17300_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17300_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17300_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17300_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17300_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17300_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -584,10 +584,10 @@ KERNEL_FQ void HC_ATTR_SEQ m17300_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m17300_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17300_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17300_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17300_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m17300_a3-optimized.cl b/OpenCL/m17300_a3-optimized.cl index ea9ddead4..23f32510c 100644 --- a/OpenCL/m17300_a3-optimized.cl +++ b/OpenCL/m17300_a3-optimized.cl @@ -405,7 +405,7 @@ DECLSPEC void m17300s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m17300_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17300_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -454,7 +454,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17300_m04 (KERN_ATTR_BASIC ()) m17300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17300_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17300_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -503,7 +503,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17300_m08 (KERN_ATTR_BASIC ()) m17300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17300_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17300_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -552,7 +552,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17300_m16 (KERN_ATTR_BASIC ()) m17300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17300_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17300_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -601,7 +601,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17300_s04 (KERN_ATTR_BASIC ()) m17300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17300_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17300_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -650,7 +650,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17300_s08 (KERN_ATTR_BASIC ()) m17300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17300_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17300_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m17400_a0-optimized.cl b/OpenCL/m17400_a0-optimized.cl index b95ba78c4..b2fb8ce70 100644 --- a/OpenCL/m17400_a0-optimized.cl +++ b/OpenCL/m17400_a0-optimized.cl @@ -29,7 +29,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void HC_ATTR_SEQ m17400_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17400_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -239,15 +239,15 @@ KERNEL_FQ void HC_ATTR_SEQ m17400_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m17400_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17400_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17400_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17400_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17400_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17400_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -469,10 +469,10 @@ KERNEL_FQ void HC_ATTR_SEQ m17400_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m17400_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17400_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17400_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17400_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m17400_a1-optimized.cl b/OpenCL/m17400_a1-optimized.cl index b76181977..d20988369 100644 --- a/OpenCL/m17400_a1-optimized.cl +++ b/OpenCL/m17400_a1-optimized.cl @@ -27,7 +27,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void HC_ATTR_SEQ m17400_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17400_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -296,15 +296,15 @@ KERNEL_FQ void HC_ATTR_SEQ m17400_m04 (KERN_ATTR_BASIC ()) } -KERNEL_FQ void HC_ATTR_SEQ m17400_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17400_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17400_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17400_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17400_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17400_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -584,10 +584,10 @@ KERNEL_FQ void HC_ATTR_SEQ m17400_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m17400_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17400_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17400_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17400_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m17400_a3-optimized.cl b/OpenCL/m17400_a3-optimized.cl index 80e5ef294..23e561f36 100644 --- a/OpenCL/m17400_a3-optimized.cl +++ b/OpenCL/m17400_a3-optimized.cl @@ -405,7 +405,7 @@ DECLSPEC void m17400s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m17400_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17400_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -454,7 +454,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17400_m04 (KERN_ATTR_BASIC ()) m17400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17400_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17400_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -503,7 +503,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17400_m08 (KERN_ATTR_BASIC ()) m17400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17400_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17400_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -552,7 +552,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17400_m16 (KERN_ATTR_BASIC ()) m17400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17400_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17400_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -601,7 +601,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17400_s04 (KERN_ATTR_BASIC ()) m17400s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17400_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17400_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -650,7 +650,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17400_s08 (KERN_ATTR_BASIC ()) m17400s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17400_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17400_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m17500_a0-optimized.cl b/OpenCL/m17500_a0-optimized.cl index e89cc1188..5071b90e7 100644 --- a/OpenCL/m17500_a0-optimized.cl +++ b/OpenCL/m17500_a0-optimized.cl @@ -29,7 +29,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void HC_ATTR_SEQ m17500_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17500_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -239,15 +239,15 @@ KERNEL_FQ void HC_ATTR_SEQ m17500_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m17500_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17500_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17500_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17500_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17500_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17500_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -469,10 +469,10 @@ KERNEL_FQ void HC_ATTR_SEQ m17500_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m17500_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17500_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17500_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17500_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m17500_a1-optimized.cl b/OpenCL/m17500_a1-optimized.cl index 6bdea81d0..eed7bb6c3 100644 --- a/OpenCL/m17500_a1-optimized.cl +++ b/OpenCL/m17500_a1-optimized.cl @@ -27,7 +27,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void HC_ATTR_SEQ m17500_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17500_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -296,15 +296,15 @@ KERNEL_FQ void HC_ATTR_SEQ m17500_m04 (KERN_ATTR_BASIC ()) } -KERNEL_FQ void HC_ATTR_SEQ m17500_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17500_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17500_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17500_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17500_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17500_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -584,10 +584,10 @@ KERNEL_FQ void HC_ATTR_SEQ m17500_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m17500_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17500_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17500_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17500_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m17500_a3-optimized.cl b/OpenCL/m17500_a3-optimized.cl index 99f2bc144..3103985a7 100644 --- a/OpenCL/m17500_a3-optimized.cl +++ b/OpenCL/m17500_a3-optimized.cl @@ -405,7 +405,7 @@ DECLSPEC void m17500s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m17500_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17500_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -454,7 +454,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17500_m04 (KERN_ATTR_BASIC ()) m17500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17500_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17500_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -503,7 +503,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17500_m08 (KERN_ATTR_BASIC ()) m17500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17500_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17500_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -552,7 +552,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17500_m16 (KERN_ATTR_BASIC ()) m17500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17500_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17500_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -601,7 +601,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17500_s04 (KERN_ATTR_BASIC ()) m17500s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17500_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17500_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -650,7 +650,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17500_s08 (KERN_ATTR_BASIC ()) m17500s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17500_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17500_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m17600_a0-optimized.cl b/OpenCL/m17600_a0-optimized.cl index 5ec268781..e34a3607a 100644 --- a/OpenCL/m17600_a0-optimized.cl +++ b/OpenCL/m17600_a0-optimized.cl @@ -29,7 +29,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void HC_ATTR_SEQ m17600_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17600_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -239,15 +239,15 @@ KERNEL_FQ void HC_ATTR_SEQ m17600_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m17600_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17600_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17600_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17600_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17600_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17600_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -469,10 +469,10 @@ KERNEL_FQ void HC_ATTR_SEQ m17600_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m17600_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17600_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17600_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17600_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m17600_a1-optimized.cl b/OpenCL/m17600_a1-optimized.cl index 446311cd1..ebf3fc6e8 100644 --- a/OpenCL/m17600_a1-optimized.cl +++ b/OpenCL/m17600_a1-optimized.cl @@ -27,7 +27,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void HC_ATTR_SEQ m17600_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17600_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -296,15 +296,15 @@ KERNEL_FQ void HC_ATTR_SEQ m17600_m04 (KERN_ATTR_BASIC ()) } -KERNEL_FQ void HC_ATTR_SEQ m17600_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17600_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17600_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17600_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17600_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17600_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -584,10 +584,10 @@ KERNEL_FQ void HC_ATTR_SEQ m17600_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m17600_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17600_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17600_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17600_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m17600_a3-optimized.cl b/OpenCL/m17600_a3-optimized.cl index 8b2031210..942fdb507 100644 --- a/OpenCL/m17600_a3-optimized.cl +++ b/OpenCL/m17600_a3-optimized.cl @@ -405,7 +405,7 @@ DECLSPEC void m17600s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m17600_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17600_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -454,7 +454,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17600_m04 (KERN_ATTR_BASIC ()) m17600m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17600_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17600_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -503,7 +503,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17600_m08 (KERN_ATTR_BASIC ()) m17600m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17600_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17600_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -552,7 +552,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17600_m16 (KERN_ATTR_BASIC ()) m17600m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17600_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17600_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -601,7 +601,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17600_s04 (KERN_ATTR_BASIC ()) m17600s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17600_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17600_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -650,7 +650,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17600_s08 (KERN_ATTR_BASIC ()) m17600s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17600_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17600_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m17700_a0-optimized.cl b/OpenCL/m17700_a0-optimized.cl index 1271c7049..a6b285ca8 100644 --- a/OpenCL/m17700_a0-optimized.cl +++ b/OpenCL/m17700_a0-optimized.cl @@ -29,7 +29,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void HC_ATTR_SEQ m17700_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17700_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -239,15 +239,15 @@ KERNEL_FQ void HC_ATTR_SEQ m17700_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m17700_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17700_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17700_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17700_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17700_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17700_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -469,10 +469,10 @@ KERNEL_FQ void HC_ATTR_SEQ m17700_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m17700_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17700_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17700_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17700_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m17700_a1-optimized.cl b/OpenCL/m17700_a1-optimized.cl index 633e01b0b..eab16275e 100644 --- a/OpenCL/m17700_a1-optimized.cl +++ b/OpenCL/m17700_a1-optimized.cl @@ -27,7 +27,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void HC_ATTR_SEQ m17700_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17700_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -296,15 +296,15 @@ KERNEL_FQ void HC_ATTR_SEQ m17700_m04 (KERN_ATTR_BASIC ()) } -KERNEL_FQ void HC_ATTR_SEQ m17700_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17700_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17700_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17700_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17700_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17700_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -584,10 +584,10 @@ KERNEL_FQ void HC_ATTR_SEQ m17700_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m17700_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17700_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17700_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17700_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m17700_a3-optimized.cl b/OpenCL/m17700_a3-optimized.cl index 98e736c0a..d62f67c91 100644 --- a/OpenCL/m17700_a3-optimized.cl +++ b/OpenCL/m17700_a3-optimized.cl @@ -405,7 +405,7 @@ DECLSPEC void m17300s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m17700_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17700_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -454,7 +454,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17700_m04 (KERN_ATTR_BASIC ()) m17300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17700_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17700_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -503,7 +503,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17700_m08 (KERN_ATTR_BASIC ()) m17300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17700_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17700_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -552,7 +552,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17700_m16 (KERN_ATTR_BASIC ()) m17300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17700_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17700_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -601,7 +601,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17700_s04 (KERN_ATTR_BASIC ()) m17300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17700_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17700_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -650,7 +650,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17700_s08 (KERN_ATTR_BASIC ()) m17300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17700_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17700_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m17800_a0-optimized.cl b/OpenCL/m17800_a0-optimized.cl index 637493ac8..53d5dfa50 100644 --- a/OpenCL/m17800_a0-optimized.cl +++ b/OpenCL/m17800_a0-optimized.cl @@ -29,7 +29,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void HC_ATTR_SEQ m17800_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17800_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -239,15 +239,15 @@ KERNEL_FQ void HC_ATTR_SEQ m17800_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m17800_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17800_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17800_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17800_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17800_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17800_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -469,10 +469,10 @@ KERNEL_FQ void HC_ATTR_SEQ m17800_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m17800_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17800_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17800_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17800_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m17800_a1-optimized.cl b/OpenCL/m17800_a1-optimized.cl index 0ff854bdb..d33b5744f 100644 --- a/OpenCL/m17800_a1-optimized.cl +++ b/OpenCL/m17800_a1-optimized.cl @@ -27,7 +27,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void HC_ATTR_SEQ m17800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17800_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -296,15 +296,15 @@ KERNEL_FQ void HC_ATTR_SEQ m17800_m04 (KERN_ATTR_BASIC ()) } -KERNEL_FQ void HC_ATTR_SEQ m17800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17800_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17800_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17800_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -584,10 +584,10 @@ KERNEL_FQ void HC_ATTR_SEQ m17800_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m17800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17800_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17800_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m17800_a3-optimized.cl b/OpenCL/m17800_a3-optimized.cl index 065002d72..455db7ecd 100644 --- a/OpenCL/m17800_a3-optimized.cl +++ b/OpenCL/m17800_a3-optimized.cl @@ -405,7 +405,7 @@ DECLSPEC void m17400s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m17800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17800_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -454,7 +454,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17800_m04 (KERN_ATTR_BASIC ()) m17400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17800_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -503,7 +503,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17800_m08 (KERN_ATTR_BASIC ()) m17400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17800_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -552,7 +552,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17800_m16 (KERN_ATTR_BASIC ()) m17400m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17800_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -601,7 +601,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17800_s04 (KERN_ATTR_BASIC ()) m17400s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17800_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -650,7 +650,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17800_s08 (KERN_ATTR_BASIC ()) m17400s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17800_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m17900_a0-optimized.cl b/OpenCL/m17900_a0-optimized.cl index 488b67a21..ccd5339eb 100644 --- a/OpenCL/m17900_a0-optimized.cl +++ b/OpenCL/m17900_a0-optimized.cl @@ -29,7 +29,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void HC_ATTR_SEQ m17900_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17900_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -239,15 +239,15 @@ KERNEL_FQ void HC_ATTR_SEQ m17900_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m17900_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17900_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17900_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17900_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17900_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17900_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -469,10 +469,10 @@ KERNEL_FQ void HC_ATTR_SEQ m17900_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m17900_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17900_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17900_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m17900_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m17900_a1-optimized.cl b/OpenCL/m17900_a1-optimized.cl index 7e871fd0b..d82ba8721 100644 --- a/OpenCL/m17900_a1-optimized.cl +++ b/OpenCL/m17900_a1-optimized.cl @@ -27,7 +27,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void HC_ATTR_SEQ m17900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17900_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -296,15 +296,15 @@ KERNEL_FQ void HC_ATTR_SEQ m17900_m04 (KERN_ATTR_BASIC ()) } -KERNEL_FQ void HC_ATTR_SEQ m17900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17900_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17900_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17900_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -584,10 +584,10 @@ KERNEL_FQ void HC_ATTR_SEQ m17900_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m17900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17900_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m17900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17900_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m17900_a3-optimized.cl b/OpenCL/m17900_a3-optimized.cl index cbbc93959..833821819 100644 --- a/OpenCL/m17900_a3-optimized.cl +++ b/OpenCL/m17900_a3-optimized.cl @@ -405,7 +405,7 @@ DECLSPEC void m17500s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m17900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17900_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -454,7 +454,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17900_m04 (KERN_ATTR_BASIC ()) m17500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17900_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -503,7 +503,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17900_m08 (KERN_ATTR_BASIC ()) m17500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17900_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -552,7 +552,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17900_m16 (KERN_ATTR_BASIC ()) m17500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17900_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -601,7 +601,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17900_s04 (KERN_ATTR_BASIC ()) m17500s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17900_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -650,7 +650,7 @@ KERNEL_FQ void HC_ATTR_SEQ m17900_s08 (KERN_ATTR_BASIC ()) m17500s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m17900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m17900_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m18000_a0-optimized.cl b/OpenCL/m18000_a0-optimized.cl index 69f48c6f6..e19fbfe35 100644 --- a/OpenCL/m18000_a0-optimized.cl +++ b/OpenCL/m18000_a0-optimized.cl @@ -29,7 +29,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void HC_ATTR_SEQ m18000_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m18000_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -239,15 +239,15 @@ KERNEL_FQ void HC_ATTR_SEQ m18000_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m18000_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m18000_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m18000_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m18000_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m18000_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m18000_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -469,10 +469,10 @@ KERNEL_FQ void HC_ATTR_SEQ m18000_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m18000_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m18000_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m18000_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m18000_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m18000_a1-optimized.cl b/OpenCL/m18000_a1-optimized.cl index f852f27ed..3e7108512 100644 --- a/OpenCL/m18000_a1-optimized.cl +++ b/OpenCL/m18000_a1-optimized.cl @@ -27,7 +27,7 @@ CONSTANT_VK u64a keccakf_rndc[24] = #define KECCAK_ROUNDS 24 #endif -KERNEL_FQ void HC_ATTR_SEQ m18000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m18000_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -296,15 +296,15 @@ KERNEL_FQ void HC_ATTR_SEQ m18000_m04 (KERN_ATTR_BASIC ()) } -KERNEL_FQ void HC_ATTR_SEQ m18000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m18000_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m18000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m18000_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m18000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m18000_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -584,10 +584,10 @@ KERNEL_FQ void HC_ATTR_SEQ m18000_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m18000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m18000_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m18000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m18000_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m18000_a3-optimized.cl b/OpenCL/m18000_a3-optimized.cl index 76f0d7f72..c7fec3218 100644 --- a/OpenCL/m18000_a3-optimized.cl +++ b/OpenCL/m18000_a3-optimized.cl @@ -405,7 +405,7 @@ DECLSPEC void m17600s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m18000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m18000_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -454,7 +454,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18000_m04 (KERN_ATTR_BASIC ()) m17600m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m18000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m18000_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -503,7 +503,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18000_m08 (KERN_ATTR_BASIC ()) m17600m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m18000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m18000_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -552,7 +552,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18000_m16 (KERN_ATTR_BASIC ()) m17600m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m18000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m18000_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -601,7 +601,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18000_s04 (KERN_ATTR_BASIC ()) m17600s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m18000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m18000_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -650,7 +650,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18000_s08 (KERN_ATTR_BASIC ()) m17600s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m18000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m18000_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m18100_a0-pure.cl b/OpenCL/m18100_a0-pure.cl index 93e7148bf..4450254ad 100644 --- a/OpenCL/m18100_a0-pure.cl +++ b/OpenCL/m18100_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m18100_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m18100_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -93,7 +93,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18100_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m18100_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m18100_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m18100_a1-pure.cl b/OpenCL/m18100_a1-pure.cl index dd4aee14d..513080220 100644 --- a/OpenCL/m18100_a1-pure.cl +++ b/OpenCL/m18100_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m18100_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m18100_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -116,7 +116,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18100_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m18100_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m18100_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m18100_a3-pure.cl b/OpenCL/m18100_a3-pure.cl index d824f1b8d..b219cf37d 100644 --- a/OpenCL/m18100_a3-pure.cl +++ b/OpenCL/m18100_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m18100_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m18100_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -103,7 +103,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18100_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m18100_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m18100_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m18200_a0-optimized.cl b/OpenCL/m18200_a0-optimized.cl index 77cb7e010..1192c2f87 100644 --- a/OpenCL/m18200_a0-optimized.cl +++ b/OpenCL/m18200_a0-optimized.cl @@ -452,7 +452,7 @@ DECLSPEC void kerb_prepare (PRIVATE_AS const u32 *w0, PRIVATE_AS const u32 *w1, hmac_md5_run (w0_t, w1_t, w2_t, w3_t, ipad, opad, digest); } -KERNEL_FQ void HC_ATTR_SEQ m18200_m04 (KERN_ATTR_RULES_ESALT (krb5asrep_t)) +KERNEL_FQ KERNEL_FA void m18200_m04 (KERN_ATTR_RULES_ESALT (krb5asrep_t)) { /** * modifier @@ -540,15 +540,15 @@ KERNEL_FQ void HC_ATTR_SEQ m18200_m04 (KERN_ATTR_RULES_ESALT (krb5asrep_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m18200_m08 (KERN_ATTR_RULES_ESALT (krb5asrep_t)) +KERNEL_FQ KERNEL_FA void m18200_m08 (KERN_ATTR_RULES_ESALT (krb5asrep_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m18200_m16 (KERN_ATTR_RULES_ESALT (krb5asrep_t)) +KERNEL_FQ KERNEL_FA void m18200_m16 (KERN_ATTR_RULES_ESALT (krb5asrep_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m18200_s04 (KERN_ATTR_RULES_ESALT (krb5asrep_t)) +KERNEL_FQ KERNEL_FA void m18200_s04 (KERN_ATTR_RULES_ESALT (krb5asrep_t)) { /** * modifier @@ -636,10 +636,10 @@ KERNEL_FQ void HC_ATTR_SEQ m18200_s04 (KERN_ATTR_RULES_ESALT (krb5asrep_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m18200_s08 (KERN_ATTR_RULES_ESALT (krb5asrep_t)) +KERNEL_FQ KERNEL_FA void m18200_s08 (KERN_ATTR_RULES_ESALT (krb5asrep_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m18200_s16 (KERN_ATTR_RULES_ESALT (krb5asrep_t)) +KERNEL_FQ KERNEL_FA void m18200_s16 (KERN_ATTR_RULES_ESALT (krb5asrep_t)) { } diff --git a/OpenCL/m18200_a0-pure.cl b/OpenCL/m18200_a0-pure.cl index f9b218ee3..430170c45 100644 --- a/OpenCL/m18200_a0-pure.cl +++ b/OpenCL/m18200_a0-pure.cl @@ -264,7 +264,7 @@ DECLSPEC void kerb_prepare (PRIVATE_AS const u32 *K, PRIVATE_AS const u32 *check K2[3] = ctx1.opad.h[3]; } -KERNEL_FQ void HC_ATTR_SEQ m18200_mxx (KERN_ATTR_RULES_ESALT (krb5asrep_t)) +KERNEL_FQ KERNEL_FA void m18200_mxx (KERN_ATTR_RULES_ESALT (krb5asrep_t)) { /** * modifier @@ -324,7 +324,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18200_mxx (KERN_ATTR_RULES_ESALT (krb5asrep_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m18200_sxx (KERN_ATTR_RULES_ESALT (krb5asrep_t)) +KERNEL_FQ KERNEL_FA void m18200_sxx (KERN_ATTR_RULES_ESALT (krb5asrep_t)) { /** * modifier diff --git a/OpenCL/m18200_a1-optimized.cl b/OpenCL/m18200_a1-optimized.cl index 249d20cf5..41b6daeb5 100644 --- a/OpenCL/m18200_a1-optimized.cl +++ b/OpenCL/m18200_a1-optimized.cl @@ -450,7 +450,7 @@ DECLSPEC void kerb_prepare (PRIVATE_AS const u32 *w0, PRIVATE_AS const u32 *w1, hmac_md5_run (w0_t, w1_t, w2_t, w3_t, ipad, opad, digest); } -KERNEL_FQ void HC_ATTR_SEQ m18200_m04 (KERN_ATTR_ESALT (krb5asrep_t)) +KERNEL_FQ KERNEL_FA void m18200_m04 (KERN_ATTR_ESALT (krb5asrep_t)) { /** * modifier @@ -587,15 +587,15 @@ KERNEL_FQ void HC_ATTR_SEQ m18200_m04 (KERN_ATTR_ESALT (krb5asrep_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m18200_m08 (KERN_ATTR_ESALT (krb5asrep_t)) +KERNEL_FQ KERNEL_FA void m18200_m08 (KERN_ATTR_ESALT (krb5asrep_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m18200_m16 (KERN_ATTR_ESALT (krb5asrep_t)) +KERNEL_FQ KERNEL_FA void m18200_m16 (KERN_ATTR_ESALT (krb5asrep_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m18200_s04 (KERN_ATTR_ESALT (krb5asrep_t)) +KERNEL_FQ KERNEL_FA void m18200_s04 (KERN_ATTR_ESALT (krb5asrep_t)) { /** * modifier @@ -732,10 +732,10 @@ KERNEL_FQ void HC_ATTR_SEQ m18200_s04 (KERN_ATTR_ESALT (krb5asrep_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m18200_s08 (KERN_ATTR_ESALT (krb5asrep_t)) +KERNEL_FQ KERNEL_FA void m18200_s08 (KERN_ATTR_ESALT (krb5asrep_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m18200_s16 (KERN_ATTR_ESALT (krb5asrep_t)) +KERNEL_FQ KERNEL_FA void m18200_s16 (KERN_ATTR_ESALT (krb5asrep_t)) { } diff --git a/OpenCL/m18200_a1-pure.cl b/OpenCL/m18200_a1-pure.cl index 6ee9e7bd0..9f6023a0d 100644 --- a/OpenCL/m18200_a1-pure.cl +++ b/OpenCL/m18200_a1-pure.cl @@ -262,7 +262,7 @@ DECLSPEC void kerb_prepare (PRIVATE_AS const u32 *K, PRIVATE_AS const u32 *check K2[3] = ctx1.opad.h[3]; } -KERNEL_FQ void HC_ATTR_SEQ m18200_mxx (KERN_ATTR_ESALT (krb5asrep_t)) +KERNEL_FQ KERNEL_FA void m18200_mxx (KERN_ATTR_ESALT (krb5asrep_t)) { /** * modifier @@ -320,7 +320,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18200_mxx (KERN_ATTR_ESALT (krb5asrep_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m18200_sxx (KERN_ATTR_ESALT (krb5asrep_t)) +KERNEL_FQ KERNEL_FA void m18200_sxx (KERN_ATTR_ESALT (krb5asrep_t)) { /** * modifier diff --git a/OpenCL/m18200_a3-optimized.cl b/OpenCL/m18200_a3-optimized.cl index c76034d70..5c767e2f5 100644 --- a/OpenCL/m18200_a3-optimized.cl +++ b/OpenCL/m18200_a3-optimized.cl @@ -506,7 +506,7 @@ DECLSPEC void m18200 (LOCAL_AS u32 *S, PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, P } } -KERNEL_FQ void HC_ATTR_SEQ m18200_m04 (KERN_ATTR_ESALT (krb5asrep_t)) +KERNEL_FQ KERNEL_FA void m18200_m04 (KERN_ATTR_ESALT (krb5asrep_t)) { /** * base @@ -557,7 +557,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18200_m04 (KERN_ATTR_ESALT (krb5asrep_t)) m18200 (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m18200_m08 (KERN_ATTR_ESALT (krb5asrep_t)) +KERNEL_FQ KERNEL_FA void m18200_m08 (KERN_ATTR_ESALT (krb5asrep_t)) { /** * base @@ -608,11 +608,11 @@ KERNEL_FQ void HC_ATTR_SEQ m18200_m08 (KERN_ATTR_ESALT (krb5asrep_t)) m18200 (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m18200_m16 (KERN_ATTR_ESALT (krb5asrep_t)) +KERNEL_FQ KERNEL_FA void m18200_m16 (KERN_ATTR_ESALT (krb5asrep_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m18200_s04 (KERN_ATTR_ESALT (krb5asrep_t)) +KERNEL_FQ KERNEL_FA void m18200_s04 (KERN_ATTR_ESALT (krb5asrep_t)) { /** * base @@ -663,7 +663,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18200_s04 (KERN_ATTR_ESALT (krb5asrep_t)) m18200 (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m18200_s08 (KERN_ATTR_ESALT (krb5asrep_t)) +KERNEL_FQ KERNEL_FA void m18200_s08 (KERN_ATTR_ESALT (krb5asrep_t)) { /** * base @@ -714,6 +714,6 @@ KERNEL_FQ void HC_ATTR_SEQ m18200_s08 (KERN_ATTR_ESALT (krb5asrep_t)) m18200 (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m18200_s16 (KERN_ATTR_ESALT (krb5asrep_t)) +KERNEL_FQ KERNEL_FA void m18200_s16 (KERN_ATTR_ESALT (krb5asrep_t)) { } diff --git a/OpenCL/m18200_a3-pure.cl b/OpenCL/m18200_a3-pure.cl index 4ab2fd0fc..30eb42eea 100644 --- a/OpenCL/m18200_a3-pure.cl +++ b/OpenCL/m18200_a3-pure.cl @@ -262,7 +262,7 @@ DECLSPEC void kerb_prepare (PRIVATE_AS const u32 *K, PRIVATE_AS const u32 *check K2[3] = ctx1.opad.h[3]; } -KERNEL_FQ void HC_ATTR_SEQ m18200_mxx (KERN_ATTR_VECTOR_ESALT (krb5asrep_t)) +KERNEL_FQ KERNEL_FA void m18200_mxx (KERN_ATTR_VECTOR_ESALT (krb5asrep_t)) { /** * modifier @@ -333,7 +333,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18200_mxx (KERN_ATTR_VECTOR_ESALT (krb5asrep_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m18200_sxx (KERN_ATTR_VECTOR_ESALT (krb5asrep_t)) +KERNEL_FQ KERNEL_FA void m18200_sxx (KERN_ATTR_VECTOR_ESALT (krb5asrep_t)) { /** * modifier diff --git a/OpenCL/m18300-pure.cl b/OpenCL/m18300-pure.cl index 1103cf905..1da6951cb 100644 --- a/OpenCL/m18300-pure.cl +++ b/OpenCL/m18300-pure.cl @@ -79,7 +79,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m18300_init (KERN_ATTR_TMPS_ESALT (apple_secure_notes_tmp_t, apple_secure_notes_t)) +KERNEL_FQ KERNEL_FA void m18300_init (KERN_ATTR_TMPS_ESALT (apple_secure_notes_tmp_t, apple_secure_notes_t)) { /** * base @@ -163,7 +163,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18300_init (KERN_ATTR_TMPS_ESALT (apple_secure_notes } } -KERNEL_FQ void HC_ATTR_SEQ m18300_loop (KERN_ATTR_TMPS_ESALT (apple_secure_notes_tmp_t, apple_secure_notes_t)) +KERNEL_FQ KERNEL_FA void m18300_loop (KERN_ATTR_TMPS_ESALT (apple_secure_notes_tmp_t, apple_secure_notes_t)) { const u64 gid = get_global_id (0); @@ -269,7 +269,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18300_loop (KERN_ATTR_TMPS_ESALT (apple_secure_notes } } -KERNEL_FQ void HC_ATTR_SEQ m18300_comp (KERN_ATTR_TMPS_ESALT (apple_secure_notes_tmp_t, apple_secure_notes_t)) +KERNEL_FQ KERNEL_FA void m18300_comp (KERN_ATTR_TMPS_ESALT (apple_secure_notes_tmp_t, apple_secure_notes_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m18400-pure.cl b/OpenCL/m18400-pure.cl index 5fcd8dd7b..59c22df6e 100644 --- a/OpenCL/m18400-pure.cl +++ b/OpenCL/m18400-pure.cl @@ -75,7 +75,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m18400_init (KERN_ATTR_TMPS_ESALT (odf12_tmp_t, odf12_t)) +KERNEL_FQ KERNEL_FA void m18400_init (KERN_ATTR_TMPS_ESALT (odf12_tmp_t, odf12_t)) { /** * base @@ -180,7 +180,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18400_init (KERN_ATTR_TMPS_ESALT (odf12_tmp_t, odf12 } } -KERNEL_FQ void HC_ATTR_SEQ m18400_loop (KERN_ATTR_TMPS_ESALT (odf12_tmp_t, odf12_t)) +KERNEL_FQ KERNEL_FA void m18400_loop (KERN_ATTR_TMPS_ESALT (odf12_tmp_t, odf12_t)) { const u64 gid = get_global_id (0); @@ -266,7 +266,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18400_loop (KERN_ATTR_TMPS_ESALT (odf12_tmp_t, odf12 } } -KERNEL_FQ void HC_ATTR_SEQ m18400_comp (KERN_ATTR_TMPS_ESALT (odf12_tmp_t, odf12_t)) +KERNEL_FQ KERNEL_FA void m18400_comp (KERN_ATTR_TMPS_ESALT (odf12_tmp_t, odf12_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m18500_a0-pure.cl b/OpenCL/m18500_a0-pure.cl index d3f412ce5..9d2742b26 100644 --- a/OpenCL/m18500_a0-pure.cl +++ b/OpenCL/m18500_a0-pure.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m18500_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m18500_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -145,7 +145,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18500_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m18500_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m18500_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m18500_a1-pure.cl b/OpenCL/m18500_a1-pure.cl index 4d29a3e21..0344ef3e7 100644 --- a/OpenCL/m18500_a1-pure.cl +++ b/OpenCL/m18500_a1-pure.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m18500_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m18500_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -144,7 +144,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18500_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m18500_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m18500_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m18500_a3-pure.cl b/OpenCL/m18500_a3-pure.cl index 88a7ffabf..ba342c963 100644 --- a/OpenCL/m18500_a3-pure.cl +++ b/OpenCL/m18500_a3-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m18500_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m18500_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -154,7 +154,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18500_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m18500_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m18500_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m18600-pure.cl b/OpenCL/m18600-pure.cl index 6d380ac66..54bba75d7 100644 --- a/OpenCL/m18600-pure.cl +++ b/OpenCL/m18600-pure.cl @@ -452,7 +452,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m18600_init (KERN_ATTR_TMPS_ESALT (odf11_tmp_t, odf11_t)) +KERNEL_FQ KERNEL_FA void m18600_init (KERN_ATTR_TMPS_ESALT (odf11_tmp_t, odf11_t)) { /** * base @@ -554,7 +554,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18600_init (KERN_ATTR_TMPS_ESALT (odf11_tmp_t, odf11 tmps[gid].out[4] = tmps[gid].dgst[4]; } -KERNEL_FQ void HC_ATTR_SEQ m18600_loop (KERN_ATTR_TMPS_ESALT (odf11_tmp_t, odf11_t)) +KERNEL_FQ KERNEL_FA void m18600_loop (KERN_ATTR_TMPS_ESALT (odf11_tmp_t, odf11_t)) { const u64 gid = get_global_id (0); @@ -636,7 +636,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18600_loop (KERN_ATTR_TMPS_ESALT (odf11_tmp_t, odf11 } } -KERNEL_FQ void HC_ATTR_SEQ FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE_COMP) m18600_comp (KERN_ATTR_TMPS_ESALT (odf11_tmp_t, odf11_t)) +KERNEL_FQ KERNEL_FA void FIXED_THREAD_COUNT(FIXED_LOCAL_SIZE_COMP) m18600_comp (KERN_ATTR_TMPS_ESALT (odf11_tmp_t, odf11_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m18700_a0-optimized.cl b/OpenCL/m18700_a0-optimized.cl index a86b3323d..960079b8f 100644 --- a/OpenCL/m18700_a0-optimized.cl +++ b/OpenCL/m18700_a0-optimized.cl @@ -53,7 +53,7 @@ DECLSPEC u32 hashCode (const u32 init, PRIVATE_AS const u32 *w, const u32 pw_len return hash; } -KERNEL_FQ void HC_ATTR_SEQ m18700_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m18700_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -104,15 +104,15 @@ KERNEL_FQ void HC_ATTR_SEQ m18700_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m18700_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m18700_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m18700_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m18700_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m18700_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m18700_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -175,10 +175,10 @@ KERNEL_FQ void HC_ATTR_SEQ m18700_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m18700_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m18700_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m18700_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m18700_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m18700_a0-pure.cl b/OpenCL/m18700_a0-pure.cl index e7b9eb1a5..d95902f5c 100644 --- a/OpenCL/m18700_a0-pure.cl +++ b/OpenCL/m18700_a0-pure.cl @@ -54,7 +54,7 @@ DECLSPEC u32 hashCode (const u32 init, PRIVATE_AS const u32 *w, const u32 pw_len return hash; } -KERNEL_FQ void HC_ATTR_SEQ m18700_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m18700_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -92,7 +92,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18700_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m18700_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m18700_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m18700_a1-optimized.cl b/OpenCL/m18700_a1-optimized.cl index 116e02b5c..d8c549a0e 100644 --- a/OpenCL/m18700_a1-optimized.cl +++ b/OpenCL/m18700_a1-optimized.cl @@ -53,7 +53,7 @@ DECLSPEC u32 hashCode_g (const u32 init, GLOBAL_AS const u32 *w, const u32 pw_le return hash; } -KERNEL_FQ void HC_ATTR_SEQ m18700_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m18700_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -97,15 +97,15 @@ KERNEL_FQ void HC_ATTR_SEQ m18700_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m18700_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m18700_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m18700_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m18700_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m18700_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m18700_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -161,10 +161,10 @@ KERNEL_FQ void HC_ATTR_SEQ m18700_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m18700_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m18700_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m18700_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m18700_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m18700_a1-pure.cl b/OpenCL/m18700_a1-pure.cl index 8a57a2a5c..3f16de698 100644 --- a/OpenCL/m18700_a1-pure.cl +++ b/OpenCL/m18700_a1-pure.cl @@ -52,7 +52,7 @@ DECLSPEC u32 hashCode_g (const u32 init, GLOBAL_AS const u32 *w, const u32 pw_le return hash; } -KERNEL_FQ void HC_ATTR_SEQ m18700_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m18700_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -91,7 +91,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18700_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m18700_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m18700_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m18700_a3-optimized.cl b/OpenCL/m18700_a3-optimized.cl index 40168e7c6..4a3e7b47d 100644 --- a/OpenCL/m18700_a3-optimized.cl +++ b/OpenCL/m18700_a3-optimized.cl @@ -140,7 +140,7 @@ DECLSPEC void m18700s (PRIVATE_AS const u32 *w, const u32 pw_len, KERN_ATTR_FUNC } } -KERNEL_FQ void HC_ATTR_SEQ m18700_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m18700_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -180,7 +180,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18700_m04 (KERN_ATTR_VECTOR ()) m18700m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m18700_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m18700_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -220,7 +220,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18700_m08 (KERN_ATTR_VECTOR ()) m18700m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m18700_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m18700_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -260,7 +260,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18700_m16 (KERN_ATTR_VECTOR ()) m18700m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m18700_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m18700_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -300,7 +300,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18700_s04 (KERN_ATTR_VECTOR ()) m18700s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m18700_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m18700_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -340,7 +340,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18700_s08 (KERN_ATTR_VECTOR ()) m18700s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m18700_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m18700_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m18700_a3-pure.cl b/OpenCL/m18700_a3-pure.cl index c7b18eced..52d2fcd66 100644 --- a/OpenCL/m18700_a3-pure.cl +++ b/OpenCL/m18700_a3-pure.cl @@ -70,7 +70,7 @@ DECLSPEC u32x hashCode_w0 (const u32x init, const u32x w0, PRIVATE_AS const u32 return hash; } -KERNEL_FQ void HC_ATTR_SEQ m18700_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m18700_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -117,7 +117,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18700_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m18700_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m18700_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m18800-pure.cl b/OpenCL/m18800-pure.cl index ea2213464..17c7d1c51 100644 --- a/OpenCL/m18800-pure.cl +++ b/OpenCL/m18800-pure.cl @@ -23,7 +23,7 @@ typedef struct bsp_tmp } bsp_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m18800_init (KERN_ATTR_TMPS (bsp_tmp_t)) +KERNEL_FQ KERNEL_FA void m18800_init (KERN_ATTR_TMPS (bsp_tmp_t)) { /** * base @@ -53,7 +53,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18800_init (KERN_ATTR_TMPS (bsp_tmp_t)) tmps[gid].hash[7] = ctx.h[7]; } -KERNEL_FQ void HC_ATTR_SEQ m18800_loop (KERN_ATTR_TMPS (bsp_tmp_t)) +KERNEL_FQ KERNEL_FA void m18800_loop (KERN_ATTR_TMPS (bsp_tmp_t)) { const u64 gid = get_global_id (0); @@ -116,7 +116,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18800_loop (KERN_ATTR_TMPS (bsp_tmp_t)) unpackv (tmps, hash, gid, 7, digest[7]); } -KERNEL_FQ void HC_ATTR_SEQ m18800_comp (KERN_ATTR_TMPS (bsp_tmp_t)) +KERNEL_FQ KERNEL_FA void m18800_comp (KERN_ATTR_TMPS (bsp_tmp_t)) { /** * modifier diff --git a/OpenCL/m18900-pure.cl b/OpenCL/m18900-pure.cl index f858b91bb..d88f31e01 100644 --- a/OpenCL/m18900-pure.cl +++ b/OpenCL/m18900-pure.cl @@ -76,7 +76,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m18900_init (KERN_ATTR_TMPS_ESALT (android_backup_tmp_t, android_backup_t)) +KERNEL_FQ KERNEL_FA void m18900_init (KERN_ATTR_TMPS_ESALT (android_backup_tmp_t, android_backup_t)) { /** * base @@ -148,7 +148,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18900_init (KERN_ATTR_TMPS_ESALT (android_backup_tmp } } -KERNEL_FQ void HC_ATTR_SEQ m18900_loop (KERN_ATTR_TMPS_ESALT (android_backup_tmp_t, android_backup_t)) +KERNEL_FQ KERNEL_FA void m18900_loop (KERN_ATTR_TMPS_ESALT (android_backup_tmp_t, android_backup_t)) { const u64 gid = get_global_id (0); @@ -233,7 +233,7 @@ KERNEL_FQ void HC_ATTR_SEQ m18900_loop (KERN_ATTR_TMPS_ESALT (android_backup_tmp } } -KERNEL_FQ void HC_ATTR_SEQ m18900_comp (KERN_ATTR_TMPS_ESALT (android_backup_tmp_t, android_backup_t)) +KERNEL_FQ KERNEL_FA void m18900_comp (KERN_ATTR_TMPS_ESALT (android_backup_tmp_t, android_backup_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m19000-pure.cl b/OpenCL/m19000-pure.cl index 88e503867..fc234dc1a 100644 --- a/OpenCL/m19000-pure.cl +++ b/OpenCL/m19000-pure.cl @@ -23,7 +23,7 @@ typedef struct qnx_md5_tmp } qnx_md5_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m19000_init (KERN_ATTR_TMPS (qnx_md5_tmp_t)) +KERNEL_FQ KERNEL_FA void m19000_init (KERN_ATTR_TMPS (qnx_md5_tmp_t)) { /** * base @@ -66,7 +66,7 @@ KERNEL_FQ void HC_ATTR_SEQ m19000_init (KERN_ATTR_TMPS (qnx_md5_tmp_t)) tmps[gid].md5_ctx = md5_ctx; } -KERNEL_FQ void HC_ATTR_SEQ m19000_loop (KERN_ATTR_TMPS (qnx_md5_tmp_t)) +KERNEL_FQ KERNEL_FA void m19000_loop (KERN_ATTR_TMPS (qnx_md5_tmp_t)) { /** * base @@ -95,7 +95,7 @@ KERNEL_FQ void HC_ATTR_SEQ m19000_loop (KERN_ATTR_TMPS (qnx_md5_tmp_t)) tmps[gid].md5_ctx = md5_ctx; } -KERNEL_FQ void HC_ATTR_SEQ m19000_comp (KERN_ATTR_TMPS (qnx_md5_tmp_t)) +KERNEL_FQ KERNEL_FA void m19000_comp (KERN_ATTR_TMPS (qnx_md5_tmp_t)) { /** * modifier diff --git a/OpenCL/m19100-pure.cl b/OpenCL/m19100-pure.cl index f7456e5ea..f94d0464a 100644 --- a/OpenCL/m19100-pure.cl +++ b/OpenCL/m19100-pure.cl @@ -23,7 +23,7 @@ typedef struct qnx_sha256_tmp } qnx_sha256_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m19100_init (KERN_ATTR_TMPS (qnx_sha256_tmp_t)) +KERNEL_FQ KERNEL_FA void m19100_init (KERN_ATTR_TMPS (qnx_sha256_tmp_t)) { /** * base @@ -66,7 +66,7 @@ KERNEL_FQ void HC_ATTR_SEQ m19100_init (KERN_ATTR_TMPS (qnx_sha256_tmp_t)) tmps[gid].sha256_ctx = sha256_ctx; } -KERNEL_FQ void HC_ATTR_SEQ m19100_loop (KERN_ATTR_TMPS (qnx_sha256_tmp_t)) +KERNEL_FQ KERNEL_FA void m19100_loop (KERN_ATTR_TMPS (qnx_sha256_tmp_t)) { /** * base @@ -95,7 +95,7 @@ KERNEL_FQ void HC_ATTR_SEQ m19100_loop (KERN_ATTR_TMPS (qnx_sha256_tmp_t)) tmps[gid].sha256_ctx = sha256_ctx; } -KERNEL_FQ void HC_ATTR_SEQ m19100_comp (KERN_ATTR_TMPS (qnx_sha256_tmp_t)) +KERNEL_FQ KERNEL_FA void m19100_comp (KERN_ATTR_TMPS (qnx_sha256_tmp_t)) { /** * modifier diff --git a/OpenCL/m19200-pure.cl b/OpenCL/m19200-pure.cl index f61df414d..58eb69d1c 100644 --- a/OpenCL/m19200-pure.cl +++ b/OpenCL/m19200-pure.cl @@ -298,7 +298,7 @@ DECLSPEC void sha512_final_qnxbug (PRIVATE_AS sha512_ctx_t *ctx, u32 sav) sha512_transform (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->w4, ctx->w5, ctx->w6, ctx->w7, ctx->h); } -KERNEL_FQ void HC_ATTR_SEQ m19200_init (KERN_ATTR_TMPS (qnx_sha512_tmp_t)) +KERNEL_FQ KERNEL_FA void m19200_init (KERN_ATTR_TMPS (qnx_sha512_tmp_t)) { /** * base @@ -342,7 +342,7 @@ KERNEL_FQ void HC_ATTR_SEQ m19200_init (KERN_ATTR_TMPS (qnx_sha512_tmp_t)) tmps[gid].sav = 0; } -KERNEL_FQ void HC_ATTR_SEQ m19200_loop (KERN_ATTR_TMPS (qnx_sha512_tmp_t)) +KERNEL_FQ KERNEL_FA void m19200_loop (KERN_ATTR_TMPS (qnx_sha512_tmp_t)) { /** * base @@ -373,7 +373,7 @@ KERNEL_FQ void HC_ATTR_SEQ m19200_loop (KERN_ATTR_TMPS (qnx_sha512_tmp_t)) tmps[gid].sav = sav; } -KERNEL_FQ void HC_ATTR_SEQ m19200_comp (KERN_ATTR_TMPS (qnx_sha512_tmp_t)) +KERNEL_FQ KERNEL_FA void m19200_comp (KERN_ATTR_TMPS (qnx_sha512_tmp_t)) { /** * modifier diff --git a/OpenCL/m19300_a0-pure.cl b/OpenCL/m19300_a0-pure.cl index 55a91964b..2461ebc46 100644 --- a/OpenCL/m19300_a0-pure.cl +++ b/OpenCL/m19300_a0-pure.cl @@ -26,7 +26,7 @@ typedef struct sha1_double_salt } sha1_double_salt_t; -KERNEL_FQ void HC_ATTR_SEQ m19300_mxx (KERN_ATTR_RULES_ESALT (sha1_double_salt_t)) +KERNEL_FQ KERNEL_FA void m19300_mxx (KERN_ATTR_RULES_ESALT (sha1_double_salt_t)) { /** * modifier @@ -85,7 +85,7 @@ KERNEL_FQ void HC_ATTR_SEQ m19300_mxx (KERN_ATTR_RULES_ESALT (sha1_double_salt_t } } -KERNEL_FQ void HC_ATTR_SEQ m19300_sxx (KERN_ATTR_RULES_ESALT (sha1_double_salt_t)) +KERNEL_FQ KERNEL_FA void m19300_sxx (KERN_ATTR_RULES_ESALT (sha1_double_salt_t)) { /** * modifier diff --git a/OpenCL/m19300_a1-pure.cl b/OpenCL/m19300_a1-pure.cl index 9ff4b53ed..0aede4dce 100644 --- a/OpenCL/m19300_a1-pure.cl +++ b/OpenCL/m19300_a1-pure.cl @@ -24,7 +24,7 @@ typedef struct sha1_double_salt } sha1_double_salt_t; -KERNEL_FQ void HC_ATTR_SEQ m19300_mxx (KERN_ATTR_ESALT (sha1_double_salt_t)) +KERNEL_FQ KERNEL_FA void m19300_mxx (KERN_ATTR_ESALT (sha1_double_salt_t)) { /** * modifier @@ -79,7 +79,7 @@ KERNEL_FQ void HC_ATTR_SEQ m19300_mxx (KERN_ATTR_ESALT (sha1_double_salt_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m19300_sxx (KERN_ATTR_ESALT (sha1_double_salt_t)) +KERNEL_FQ KERNEL_FA void m19300_sxx (KERN_ATTR_ESALT (sha1_double_salt_t)) { /** * modifier diff --git a/OpenCL/m19300_a3-pure.cl b/OpenCL/m19300_a3-pure.cl index 95387e258..bfea266e9 100644 --- a/OpenCL/m19300_a3-pure.cl +++ b/OpenCL/m19300_a3-pure.cl @@ -24,7 +24,7 @@ typedef struct sha1_double_salt } sha1_double_salt_t; -KERNEL_FQ void HC_ATTR_SEQ m19300_mxx (KERN_ATTR_VECTOR_ESALT (sha1_double_salt_t)) +KERNEL_FQ KERNEL_FA void m19300_mxx (KERN_ATTR_VECTOR_ESALT (sha1_double_salt_t)) { /** * modifier @@ -96,7 +96,7 @@ KERNEL_FQ void HC_ATTR_SEQ m19300_mxx (KERN_ATTR_VECTOR_ESALT (sha1_double_salt_ } } -KERNEL_FQ void HC_ATTR_SEQ m19300_sxx (KERN_ATTR_VECTOR_ESALT (sha1_double_salt_t)) +KERNEL_FQ KERNEL_FA void m19300_sxx (KERN_ATTR_VECTOR_ESALT (sha1_double_salt_t)) { /** * modifier diff --git a/OpenCL/m19500_a0-pure.cl b/OpenCL/m19500_a0-pure.cl index e3b2acf56..d28bbc7aa 100644 --- a/OpenCL/m19500_a0-pure.cl +++ b/OpenCL/m19500_a0-pure.cl @@ -38,7 +38,7 @@ typedef struct devise_hash #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m19500_mxx (KERN_ATTR_RULES_ESALT (devise_hash_t)) +KERNEL_FQ KERNEL_FA void m19500_mxx (KERN_ATTR_RULES_ESALT (devise_hash_t)) { /** * modifier @@ -173,7 +173,7 @@ KERNEL_FQ void HC_ATTR_SEQ m19500_mxx (KERN_ATTR_RULES_ESALT (devise_hash_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m19500_sxx (KERN_ATTR_RULES_ESALT (devise_hash_t)) +KERNEL_FQ KERNEL_FA void m19500_sxx (KERN_ATTR_RULES_ESALT (devise_hash_t)) { /** * modifier diff --git a/OpenCL/m19500_a1-pure.cl b/OpenCL/m19500_a1-pure.cl index 57de72a51..62c6f60f2 100644 --- a/OpenCL/m19500_a1-pure.cl +++ b/OpenCL/m19500_a1-pure.cl @@ -36,7 +36,7 @@ typedef struct devise_hash #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m19500_mxx (KERN_ATTR_ESALT (devise_hash_t)) +KERNEL_FQ KERNEL_FA void m19500_mxx (KERN_ATTR_ESALT (devise_hash_t)) { /** * modifier @@ -167,7 +167,7 @@ KERNEL_FQ void HC_ATTR_SEQ m19500_mxx (KERN_ATTR_ESALT (devise_hash_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m19500_sxx (KERN_ATTR_ESALT (devise_hash_t)) +KERNEL_FQ KERNEL_FA void m19500_sxx (KERN_ATTR_ESALT (devise_hash_t)) { /** * modifier diff --git a/OpenCL/m19500_a3-pure.cl b/OpenCL/m19500_a3-pure.cl index eaa6db9f5..1e63bf291 100644 --- a/OpenCL/m19500_a3-pure.cl +++ b/OpenCL/m19500_a3-pure.cl @@ -36,7 +36,7 @@ typedef struct devise_hash #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m19500_mxx (KERN_ATTR_VECTOR_ESALT (devise_hash_t)) +KERNEL_FQ KERNEL_FA void m19500_mxx (KERN_ATTR_VECTOR_ESALT (devise_hash_t)) { /** * modifier @@ -182,7 +182,7 @@ KERNEL_FQ void HC_ATTR_SEQ m19500_mxx (KERN_ATTR_VECTOR_ESALT (devise_hash_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m19500_sxx (KERN_ATTR_VECTOR_ESALT (devise_hash_t)) +KERNEL_FQ KERNEL_FA void m19500_sxx (KERN_ATTR_VECTOR_ESALT (devise_hash_t)) { /** * modifier diff --git a/OpenCL/m19600-pure.cl b/OpenCL/m19600-pure.cl index 59c3cb6fe..d5924dc7e 100644 --- a/OpenCL/m19600-pure.cl +++ b/OpenCL/m19600-pure.cl @@ -115,7 +115,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m19600_init (KERN_ATTR_TMPS_ESALT (krb5tgs_17_tmp_t, krb5tgs_17_t)) +KERNEL_FQ KERNEL_FA void m19600_init (KERN_ATTR_TMPS_ESALT (krb5tgs_17_tmp_t, krb5tgs_17_t)) { /** * base @@ -193,7 +193,7 @@ KERNEL_FQ void HC_ATTR_SEQ m19600_init (KERN_ATTR_TMPS_ESALT (krb5tgs_17_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m19600_loop (KERN_ATTR_TMPS_ESALT (krb5tgs_17_tmp_t, krb5tgs_17_t)) +KERNEL_FQ KERNEL_FA void m19600_loop (KERN_ATTR_TMPS_ESALT (krb5tgs_17_tmp_t, krb5tgs_17_t)) { /** * base @@ -281,7 +281,7 @@ KERNEL_FQ void HC_ATTR_SEQ m19600_loop (KERN_ATTR_TMPS_ESALT (krb5tgs_17_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m19600_comp (KERN_ATTR_TMPS_ESALT (krb5tgs_17_tmp_t, krb5tgs_17_t)) +KERNEL_FQ KERNEL_FA void m19600_comp (KERN_ATTR_TMPS_ESALT (krb5tgs_17_tmp_t, krb5tgs_17_t)) { /** * base diff --git a/OpenCL/m19700-pure.cl b/OpenCL/m19700-pure.cl index 63d9e59e7..4584ff380 100644 --- a/OpenCL/m19700-pure.cl +++ b/OpenCL/m19700-pure.cl @@ -115,7 +115,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m19700_init (KERN_ATTR_TMPS_ESALT (krb5tgs_18_tmp_t, krb5tgs_18_t)) +KERNEL_FQ KERNEL_FA void m19700_init (KERN_ATTR_TMPS_ESALT (krb5tgs_18_tmp_t, krb5tgs_18_t)) { /** * base @@ -193,7 +193,7 @@ KERNEL_FQ void HC_ATTR_SEQ m19700_init (KERN_ATTR_TMPS_ESALT (krb5tgs_18_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m19700_loop (KERN_ATTR_TMPS_ESALT (krb5tgs_18_tmp_t, krb5tgs_18_t)) +KERNEL_FQ KERNEL_FA void m19700_loop (KERN_ATTR_TMPS_ESALT (krb5tgs_18_tmp_t, krb5tgs_18_t)) { /** * base @@ -281,7 +281,7 @@ KERNEL_FQ void HC_ATTR_SEQ m19700_loop (KERN_ATTR_TMPS_ESALT (krb5tgs_18_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m19700_comp (KERN_ATTR_TMPS_ESALT (krb5tgs_18_tmp_t, krb5tgs_18_t)) +KERNEL_FQ KERNEL_FA void m19700_comp (KERN_ATTR_TMPS_ESALT (krb5tgs_18_tmp_t, krb5tgs_18_t)) { /** * base diff --git a/OpenCL/m19800-pure.cl b/OpenCL/m19800-pure.cl index 1bba8d07a..c3d0d6129 100644 --- a/OpenCL/m19800-pure.cl +++ b/OpenCL/m19800-pure.cl @@ -115,7 +115,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m19800_init (KERN_ATTR_TMPS_ESALT (krb5pa_17_tmp_t, krb5pa_17_t)) +KERNEL_FQ KERNEL_FA void m19800_init (KERN_ATTR_TMPS_ESALT (krb5pa_17_tmp_t, krb5pa_17_t)) { /** * base @@ -193,7 +193,7 @@ KERNEL_FQ void HC_ATTR_SEQ m19800_init (KERN_ATTR_TMPS_ESALT (krb5pa_17_tmp_t, k } } -KERNEL_FQ void HC_ATTR_SEQ m19800_loop (KERN_ATTR_TMPS_ESALT (krb5pa_17_tmp_t, krb5pa_17_t)) +KERNEL_FQ KERNEL_FA void m19800_loop (KERN_ATTR_TMPS_ESALT (krb5pa_17_tmp_t, krb5pa_17_t)) { /** * base @@ -281,7 +281,7 @@ KERNEL_FQ void HC_ATTR_SEQ m19800_loop (KERN_ATTR_TMPS_ESALT (krb5pa_17_tmp_t, k } } -KERNEL_FQ void HC_ATTR_SEQ m19800_comp (KERN_ATTR_TMPS_ESALT (krb5pa_17_tmp_t, krb5pa_17_t)) +KERNEL_FQ KERNEL_FA void m19800_comp (KERN_ATTR_TMPS_ESALT (krb5pa_17_tmp_t, krb5pa_17_t)) { /** * base diff --git a/OpenCL/m19900-pure.cl b/OpenCL/m19900-pure.cl index cf7710fc3..301939dde 100644 --- a/OpenCL/m19900-pure.cl +++ b/OpenCL/m19900-pure.cl @@ -115,7 +115,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m19900_init (KERN_ATTR_TMPS_ESALT (krb5pa_18_tmp_t, krb5pa_18_t)) +KERNEL_FQ KERNEL_FA void m19900_init (KERN_ATTR_TMPS_ESALT (krb5pa_18_tmp_t, krb5pa_18_t)) { /** * base @@ -193,7 +193,7 @@ KERNEL_FQ void HC_ATTR_SEQ m19900_init (KERN_ATTR_TMPS_ESALT (krb5pa_18_tmp_t, k } } -KERNEL_FQ void HC_ATTR_SEQ m19900_loop (KERN_ATTR_TMPS_ESALT (krb5pa_18_tmp_t, krb5pa_18_t)) +KERNEL_FQ KERNEL_FA void m19900_loop (KERN_ATTR_TMPS_ESALT (krb5pa_18_tmp_t, krb5pa_18_t)) { /** * base @@ -282,7 +282,7 @@ KERNEL_FQ void HC_ATTR_SEQ m19900_loop (KERN_ATTR_TMPS_ESALT (krb5pa_18_tmp_t, k } } -KERNEL_FQ void HC_ATTR_SEQ m19900_comp (KERN_ATTR_TMPS_ESALT (krb5pa_18_tmp_t, krb5pa_18_t)) +KERNEL_FQ KERNEL_FA void m19900_comp (KERN_ATTR_TMPS_ESALT (krb5pa_18_tmp_t, krb5pa_18_t)) { /** * base diff --git a/OpenCL/m20011-pure.cl b/OpenCL/m20011-pure.cl index 204a0f1b9..ca1e785c8 100644 --- a/OpenCL/m20011-pure.cl +++ b/OpenCL/m20011-pure.cl @@ -92,7 +92,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void HC_ATTR_SEQ m20011_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) +KERNEL_FQ KERNEL_FA void m20011_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) { /** * base @@ -196,7 +196,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20011_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m20011_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) +KERNEL_FQ KERNEL_FA void m20011_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) { const u64 gid = get_global_id (0); @@ -322,7 +322,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20011_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m20011_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) +KERNEL_FQ KERNEL_FA void m20011_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m20012-pure.cl b/OpenCL/m20012-pure.cl index 40705faed..f5cb9fff5 100644 --- a/OpenCL/m20012-pure.cl +++ b/OpenCL/m20012-pure.cl @@ -92,7 +92,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void HC_ATTR_SEQ m20012_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) +KERNEL_FQ KERNEL_FA void m20012_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) { /** * base @@ -196,7 +196,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20012_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m20012_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) +KERNEL_FQ KERNEL_FA void m20012_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) { const u64 gid = get_global_id (0); @@ -322,7 +322,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20012_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m20012_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) +KERNEL_FQ KERNEL_FA void m20012_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m20013-pure.cl b/OpenCL/m20013-pure.cl index 5160c8d7b..ebb610504 100644 --- a/OpenCL/m20013-pure.cl +++ b/OpenCL/m20013-pure.cl @@ -92,7 +92,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void HC_ATTR_SEQ m20013_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) +KERNEL_FQ KERNEL_FA void m20013_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) { /** * base @@ -196,7 +196,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20013_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m20013_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) +KERNEL_FQ KERNEL_FA void m20013_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) { const u64 gid = get_global_id (0); @@ -322,7 +322,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20013_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m20013_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) +KERNEL_FQ KERNEL_FA void m20013_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, diskcryptor_esalt_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m20500_a0-pure.cl b/OpenCL/m20500_a0-pure.cl index 02eaf15a5..f9a112314 100644 --- a/OpenCL/m20500_a0-pure.cl +++ b/OpenCL/m20500_a0-pure.cl @@ -151,7 +151,7 @@ CONSTANT_VK u32a crc32tab[256] = 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d }; -KERNEL_FQ void HC_ATTR_SEQ m20500_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20500_sxx (KERN_ATTR_RULES ()) { /** * modifier @@ -225,7 +225,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20500_sxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20500_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20500_mxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m20500_a1-pure.cl b/OpenCL/m20500_a1-pure.cl index cef2fd117..687d6d2f8 100644 --- a/OpenCL/m20500_a1-pure.cl +++ b/OpenCL/m20500_a1-pure.cl @@ -149,7 +149,7 @@ CONSTANT_VK u32a crc32tab[256] = 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d }; -KERNEL_FQ void HC_ATTR_SEQ m20500_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20500_sxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -225,7 +225,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20500_sxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20500_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20500_mxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m20500_a3-pure.cl b/OpenCL/m20500_a3-pure.cl index 6a72fd14a..eb33dda6d 100644 --- a/OpenCL/m20500_a3-pure.cl +++ b/OpenCL/m20500_a3-pure.cl @@ -245,7 +245,7 @@ CONSTANT_VK u32a crc32tab[256] = 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d }; -KERNEL_FQ void HC_ATTR_SEQ m20500_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m20500_sxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -359,7 +359,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20500_sxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20500_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m20500_mxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m20510_a0-pure.cl b/OpenCL/m20510_a0-pure.cl index a38bcdf2e..aa031c31a 100644 --- a/OpenCL/m20510_a0-pure.cl +++ b/OpenCL/m20510_a0-pure.cl @@ -465,7 +465,7 @@ DECLSPEC int derivelast6bytes (const u32x k0, const u32x k1, const u32x k2, PRIV return 0; } -KERNEL_FQ void HC_ATTR_SEQ m20510_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20510_sxx (KERN_ATTR_RULES ()) { /** * modifier @@ -581,7 +581,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20510_sxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20510_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20510_mxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m20510_a1-pure.cl b/OpenCL/m20510_a1-pure.cl index b537ab389..80d97e94f 100644 --- a/OpenCL/m20510_a1-pure.cl +++ b/OpenCL/m20510_a1-pure.cl @@ -463,7 +463,7 @@ DECLSPEC int derivelast6bytes (const u32x k0, const u32x k1, const u32x k2, PRIV return 0; } -KERNEL_FQ void HC_ATTR_SEQ m20510_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20510_sxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -585,7 +585,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20510_sxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20510_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20510_mxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m20510_a3-pure.cl b/OpenCL/m20510_a3-pure.cl index 20712a88d..34ea3c6c4 100644 --- a/OpenCL/m20510_a3-pure.cl +++ b/OpenCL/m20510_a3-pure.cl @@ -463,7 +463,7 @@ DECLSPEC int derivelast6bytes (const u32x k0, const u32x k1, const u32x k2, PRIV return 0; } -KERNEL_FQ void HC_ATTR_SEQ m20510_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m20510_sxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -604,7 +604,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20510_sxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20510_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m20510_mxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m20600-pure.cl b/OpenCL/m20600-pure.cl index c3e61e48b..1927af091 100644 --- a/OpenCL/m20600-pure.cl +++ b/OpenCL/m20600-pure.cl @@ -25,7 +25,7 @@ typedef struct omt_sha256_tmp } omt_sha256_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m20600_init (KERN_ATTR_TMPS (omt_sha256_tmp_t)) +KERNEL_FQ KERNEL_FA void m20600_init (KERN_ATTR_TMPS (omt_sha256_tmp_t)) { /** * base @@ -59,7 +59,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20600_init (KERN_ATTR_TMPS (omt_sha256_tmp_t)) tmps[gid].digest_buf[7] = sha256_ctx.h[7]; } -KERNEL_FQ void HC_ATTR_SEQ m20600_loop (KERN_ATTR_TMPS (omt_sha256_tmp_t)) +KERNEL_FQ KERNEL_FA void m20600_loop (KERN_ATTR_TMPS (omt_sha256_tmp_t)) { /** * base @@ -135,7 +135,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20600_loop (KERN_ATTR_TMPS (omt_sha256_tmp_t)) unpackv (tmps, digest_buf, gid, 7, digest[7]); } -KERNEL_FQ void HC_ATTR_SEQ m20600_comp (KERN_ATTR_TMPS (omt_sha256_tmp_t)) +KERNEL_FQ KERNEL_FA void m20600_comp (KERN_ATTR_TMPS (omt_sha256_tmp_t)) { /** * modifier diff --git a/OpenCL/m20710_a0-optimized.cl b/OpenCL/m20710_a0-optimized.cl index 7aff75125..ebf87bf3e 100644 --- a/OpenCL/m20710_a0-optimized.cl +++ b/OpenCL/m20710_a0-optimized.cl @@ -42,7 +42,7 @@ h = 0; \ } -KERNEL_FQ void HC_ATTR_SEQ m20710_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20710_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -620,15 +620,15 @@ KERNEL_FQ void HC_ATTR_SEQ m20710_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20710_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20710_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m20710_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20710_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m20710_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20710_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -1224,10 +1224,10 @@ KERNEL_FQ void HC_ATTR_SEQ m20710_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20710_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20710_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m20710_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20710_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m20710_a0-pure.cl b/OpenCL/m20710_a0-pure.cl index e69bb3147..a70bb5527 100644 --- a/OpenCL/m20710_a0-pure.cl +++ b/OpenCL/m20710_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m20710_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20710_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -140,7 +140,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20710_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20710_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20710_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m20710_a1-optimized.cl b/OpenCL/m20710_a1-optimized.cl index 87f653ae6..7fb3745af 100644 --- a/OpenCL/m20710_a1-optimized.cl +++ b/OpenCL/m20710_a1-optimized.cl @@ -40,7 +40,7 @@ h = 0; \ } -KERNEL_FQ void HC_ATTR_SEQ m20710_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20710_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -676,15 +676,15 @@ KERNEL_FQ void HC_ATTR_SEQ m20710_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20710_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20710_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m20710_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20710_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m20710_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20710_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -1338,10 +1338,10 @@ KERNEL_FQ void HC_ATTR_SEQ m20710_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20710_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20710_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m20710_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20710_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m20710_a1-pure.cl b/OpenCL/m20710_a1-pure.cl index 5b192c33c..e79ea916a 100644 --- a/OpenCL/m20710_a1-pure.cl +++ b/OpenCL/m20710_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m20710_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20710_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -136,7 +136,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20710_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20710_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20710_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m20710_a3-optimized.cl b/OpenCL/m20710_a3-optimized.cl index 5e80a137a..3f85a2413 100644 --- a/OpenCL/m20710_a3-optimized.cl +++ b/OpenCL/m20710_a3-optimized.cl @@ -1123,7 +1123,7 @@ DECLSPEC void m20710s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m20710_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m20710_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -1184,7 +1184,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20710_m04 (KERN_ATTR_VECTOR ()) m20710m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m20710_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m20710_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -1245,7 +1245,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20710_m08 (KERN_ATTR_VECTOR ()) m20710m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m20710_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m20710_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -1306,7 +1306,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20710_m16 (KERN_ATTR_VECTOR ()) m20710m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m20710_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m20710_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -1367,7 +1367,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20710_s04 (KERN_ATTR_VECTOR ()) m20710s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m20710_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m20710_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -1428,7 +1428,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20710_s08 (KERN_ATTR_VECTOR ()) m20710s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m20710_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m20710_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m20710_a3-pure.cl b/OpenCL/m20710_a3-pure.cl index 976a5ccc6..08bc4157a 100644 --- a/OpenCL/m20710_a3-pure.cl +++ b/OpenCL/m20710_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m20710_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m20710_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -149,7 +149,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20710_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20710_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m20710_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m20712_a0-optimized.cl b/OpenCL/m20712_a0-optimized.cl index 8ac940598..3ff867c7f 100644 --- a/OpenCL/m20712_a0-optimized.cl +++ b/OpenCL/m20712_a0-optimized.cl @@ -42,7 +42,7 @@ h = 0; \ } -KERNEL_FQ void HC_ATTR_SEQ m20712_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20712_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -620,15 +620,15 @@ KERNEL_FQ void HC_ATTR_SEQ m20712_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20712_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20712_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m20712_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20712_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m20712_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20712_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -1224,10 +1224,10 @@ KERNEL_FQ void HC_ATTR_SEQ m20712_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20712_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20712_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m20712_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20712_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m20712_a0-pure.cl b/OpenCL/m20712_a0-pure.cl index 7db08ce71..ae9cadb18 100644 --- a/OpenCL/m20712_a0-pure.cl +++ b/OpenCL/m20712_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m20712_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20712_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -140,7 +140,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20712_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20712_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20712_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m20712_a1-optimized.cl b/OpenCL/m20712_a1-optimized.cl index 95c934d82..3979e8e73 100644 --- a/OpenCL/m20712_a1-optimized.cl +++ b/OpenCL/m20712_a1-optimized.cl @@ -40,7 +40,7 @@ h = 0; \ } -KERNEL_FQ void HC_ATTR_SEQ m20712_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20712_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -676,15 +676,15 @@ KERNEL_FQ void HC_ATTR_SEQ m20712_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20712_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20712_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m20712_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20712_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m20712_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20712_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -1338,10 +1338,10 @@ KERNEL_FQ void HC_ATTR_SEQ m20712_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20712_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20712_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m20712_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20712_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m20712_a1-pure.cl b/OpenCL/m20712_a1-pure.cl index 2068ccc2a..8bb18c4c1 100644 --- a/OpenCL/m20712_a1-pure.cl +++ b/OpenCL/m20712_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m20712_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20712_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -136,7 +136,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20712_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20712_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20712_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m20712_a3-optimized.cl b/OpenCL/m20712_a3-optimized.cl index bcbb4d88d..8008a7a93 100644 --- a/OpenCL/m20712_a3-optimized.cl +++ b/OpenCL/m20712_a3-optimized.cl @@ -1123,7 +1123,7 @@ DECLSPEC void m20712s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m20712_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m20712_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -1184,7 +1184,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20712_m04 (KERN_ATTR_VECTOR ()) m20712m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m20712_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m20712_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -1245,7 +1245,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20712_m08 (KERN_ATTR_VECTOR ()) m20712m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m20712_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m20712_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -1306,7 +1306,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20712_m16 (KERN_ATTR_VECTOR ()) m20712m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m20712_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m20712_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -1367,7 +1367,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20712_s04 (KERN_ATTR_VECTOR ()) m20712s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m20712_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m20712_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -1428,7 +1428,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20712_s08 (KERN_ATTR_VECTOR ()) m20712s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m20712_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m20712_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m20712_a3-pure.cl b/OpenCL/m20712_a3-pure.cl index e8883bb27..715441e84 100644 --- a/OpenCL/m20712_a3-pure.cl +++ b/OpenCL/m20712_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m20712_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m20712_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -149,7 +149,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20712_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20712_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m20712_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m20720_a0-pure.cl b/OpenCL/m20720_a0-pure.cl index 65dcac871..558f4f298 100644 --- a/OpenCL/m20720_a0-pure.cl +++ b/OpenCL/m20720_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m20720_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20720_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -140,7 +140,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20720_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20720_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20720_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m20720_a1-pure.cl b/OpenCL/m20720_a1-pure.cl index 550d49c8e..534b2b46b 100644 --- a/OpenCL/m20720_a1-pure.cl +++ b/OpenCL/m20720_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m20720_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20720_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -136,7 +136,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20720_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20720_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20720_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m20720_a3-pure.cl b/OpenCL/m20720_a3-pure.cl index 904d870f1..0a02220e5 100644 --- a/OpenCL/m20720_a3-pure.cl +++ b/OpenCL/m20720_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m20720_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m20720_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -149,7 +149,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20720_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20720_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m20720_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m20730_a0-pure.cl b/OpenCL/m20730_a0-pure.cl index 93598a57f..e87187d91 100644 --- a/OpenCL/m20730_a0-pure.cl +++ b/OpenCL/m20730_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m20730_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20730_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -134,7 +134,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20730_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20730_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20730_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m20730_a1-pure.cl b/OpenCL/m20730_a1-pure.cl index f79ef3717..1971c359f 100644 --- a/OpenCL/m20730_a1-pure.cl +++ b/OpenCL/m20730_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m20730_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20730_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -135,7 +135,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20730_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20730_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20730_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m20730_a3-pure.cl b/OpenCL/m20730_a3-pure.cl index 15502c4af..9c1b3654a 100644 --- a/OpenCL/m20730_a3-pure.cl +++ b/OpenCL/m20730_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m20730_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m20730_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -148,7 +148,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20730_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20730_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m20730_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m20800_a0-optimized.cl b/OpenCL/m20800_a0-optimized.cl index 80614b93c..bc46b754c 100644 --- a/OpenCL/m20800_a0-optimized.cl +++ b/OpenCL/m20800_a0-optimized.cl @@ -43,7 +43,7 @@ h = 0; \ } -KERNEL_FQ void HC_ATTR_SEQ m20800_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20800_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -306,15 +306,15 @@ KERNEL_FQ void HC_ATTR_SEQ m20800_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20800_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20800_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m20800_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20800_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m20800_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20800_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -610,10 +610,10 @@ KERNEL_FQ void HC_ATTR_SEQ m20800_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20800_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20800_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m20800_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20800_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m20800_a0-pure.cl b/OpenCL/m20800_a0-pure.cl index 09028270f..69aad87a1 100644 --- a/OpenCL/m20800_a0-pure.cl +++ b/OpenCL/m20800_a0-pure.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m20800_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20800_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -130,7 +130,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20800_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20800_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20800_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m20800_a1-optimized.cl b/OpenCL/m20800_a1-optimized.cl index 689c516d8..8af3c5d8f 100644 --- a/OpenCL/m20800_a1-optimized.cl +++ b/OpenCL/m20800_a1-optimized.cl @@ -41,7 +41,7 @@ h = 0; \ } -KERNEL_FQ void HC_ATTR_SEQ m20800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20800_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -359,15 +359,15 @@ KERNEL_FQ void HC_ATTR_SEQ m20800_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20800_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m20800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20800_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m20800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20800_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -718,10 +718,10 @@ KERNEL_FQ void HC_ATTR_SEQ m20800_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20800_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m20800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20800_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m20800_a1-pure.cl b/OpenCL/m20800_a1-pure.cl index e750f1c0b..b7141405e 100644 --- a/OpenCL/m20800_a1-pure.cl +++ b/OpenCL/m20800_a1-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m20800_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20800_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -126,7 +126,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20800_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20800_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20800_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m20800_a3-optimized.cl b/OpenCL/m20800_a3-optimized.cl index d1a317226..8953d20a1 100644 --- a/OpenCL/m20800_a3-optimized.cl +++ b/OpenCL/m20800_a3-optimized.cl @@ -540,7 +540,7 @@ DECLSPEC void m20800s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m20800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20800_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -610,7 +610,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20800_m04 (KERN_ATTR_BASIC ()) m20800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m20800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20800_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -680,7 +680,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20800_m08 (KERN_ATTR_BASIC ()) m20800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m20800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20800_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -750,7 +750,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20800_m16 (KERN_ATTR_BASIC ()) m20800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m20800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20800_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -820,7 +820,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20800_s04 (KERN_ATTR_BASIC ()) m20800s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m20800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20800_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -890,7 +890,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20800_s08 (KERN_ATTR_BASIC ()) m20800s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m20800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20800_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m20800_a3-pure.cl b/OpenCL/m20800_a3-pure.cl index f9214f4c5..0295e6a8e 100644 --- a/OpenCL/m20800_a3-pure.cl +++ b/OpenCL/m20800_a3-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m20800_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m20800_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -139,7 +139,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20800_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20800_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m20800_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m20900_a0-optimized.cl b/OpenCL/m20900_a0-optimized.cl index 9f87e5118..428a2ee3d 100644 --- a/OpenCL/m20900_a0-optimized.cl +++ b/OpenCL/m20900_a0-optimized.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m20900_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20900_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -731,15 +731,15 @@ KERNEL_FQ void HC_ATTR_SEQ m20900_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20900_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20900_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m20900_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20900_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m20900_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20900_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -1456,10 +1456,10 @@ KERNEL_FQ void HC_ATTR_SEQ m20900_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20900_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20900_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m20900_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20900_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m20900_a0-pure.cl b/OpenCL/m20900_a0-pure.cl index a7b80040b..7bd06863f 100644 --- a/OpenCL/m20900_a0-pure.cl +++ b/OpenCL/m20900_a0-pure.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m20900_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20900_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -209,7 +209,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20900_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20900_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m20900_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m20900_a1-optimized.cl b/OpenCL/m20900_a1-optimized.cl index df2d02df6..b6fe3c802 100644 --- a/OpenCL/m20900_a1-optimized.cl +++ b/OpenCL/m20900_a1-optimized.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m20900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20900_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -787,15 +787,15 @@ KERNEL_FQ void HC_ATTR_SEQ m20900_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20900_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m20900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20900_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m20900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20900_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -1570,10 +1570,10 @@ KERNEL_FQ void HC_ATTR_SEQ m20900_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20900_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m20900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20900_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m20900_a1-pure.cl b/OpenCL/m20900_a1-pure.cl index 226c6fc71..b115c6ef4 100644 --- a/OpenCL/m20900_a1-pure.cl +++ b/OpenCL/m20900_a1-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m20900_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20900_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -209,7 +209,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20900_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20900_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20900_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m20900_a3-optimized.cl b/OpenCL/m20900_a3-optimized.cl index 90613b961..e3c0d74b7 100644 --- a/OpenCL/m20900_a3-optimized.cl +++ b/OpenCL/m20900_a3-optimized.cl @@ -1358,7 +1358,7 @@ DECLSPEC void m20900s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m20900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20900_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -1428,7 +1428,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20900_m04 (KERN_ATTR_BASIC ()) m20900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m20900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20900_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -1498,7 +1498,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20900_m08 (KERN_ATTR_BASIC ()) m20900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m20900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20900_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -1568,7 +1568,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20900_m16 (KERN_ATTR_BASIC ()) m20900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m20900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20900_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1638,7 +1638,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20900_s04 (KERN_ATTR_BASIC ()) m20900s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m20900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20900_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1708,7 +1708,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20900_s08 (KERN_ATTR_BASIC ()) m20900s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m20900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m20900_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m20900_a3-pure.cl b/OpenCL/m20900_a3-pure.cl index 8582e8a5c..dc172f931 100644 --- a/OpenCL/m20900_a3-pure.cl +++ b/OpenCL/m20900_a3-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m20900_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m20900_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -218,7 +218,7 @@ KERNEL_FQ void HC_ATTR_SEQ m20900_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m20900_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m20900_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m21000_a0-optimized.cl b/OpenCL/m21000_a0-optimized.cl index 4407991e0..50689b2a6 100644 --- a/OpenCL/m21000_a0-optimized.cl +++ b/OpenCL/m21000_a0-optimized.cl @@ -125,7 +125,7 @@ DECLSPEC void sha512_transform_opt (PRIVATE_AS const u32x *w0, PRIVATE_AS const digest[7] = h; } -KERNEL_FQ void HC_ATTR_SEQ m21000_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21000_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -266,15 +266,15 @@ KERNEL_FQ void HC_ATTR_SEQ m21000_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21000_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21000_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m21000_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21000_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m21000_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21000_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -427,10 +427,10 @@ KERNEL_FQ void HC_ATTR_SEQ m21000_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21000_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21000_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m21000_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21000_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m21000_a0-pure.cl b/OpenCL/m21000_a0-pure.cl index 02eb56a9c..353fa154d 100644 --- a/OpenCL/m21000_a0-pure.cl +++ b/OpenCL/m21000_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m21000_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21000_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -87,7 +87,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21000_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21000_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21000_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m21000_a1-optimized.cl b/OpenCL/m21000_a1-optimized.cl index 1b673cdcb..65f71f146 100644 --- a/OpenCL/m21000_a1-optimized.cl +++ b/OpenCL/m21000_a1-optimized.cl @@ -218,7 +218,7 @@ DECLSPEC void sha512_transform_opt (PRIVATE_AS const u32x *w0, PRIVATE_AS const digest[7] = h; } -KERNEL_FQ void HC_ATTR_SEQ m21000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21000_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -397,15 +397,15 @@ KERNEL_FQ void HC_ATTR_SEQ m21000_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21000_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m21000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21000_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m21000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21000_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -596,10 +596,10 @@ KERNEL_FQ void HC_ATTR_SEQ m21000_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21000_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m21000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21000_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m21000_a1-pure.cl b/OpenCL/m21000_a1-pure.cl index c7d623690..ca52a9518 100644 --- a/OpenCL/m21000_a1-pure.cl +++ b/OpenCL/m21000_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m21000_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21000_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -83,7 +83,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21000_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21000_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21000_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m21000_a3-optimized.cl b/OpenCL/m21000_a3-optimized.cl index da62eecfe..0ae103080 100644 --- a/OpenCL/m21000_a3-optimized.cl +++ b/OpenCL/m21000_a3-optimized.cl @@ -410,7 +410,7 @@ DECLSPEC void m21000s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m21000_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m21000_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -450,7 +450,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21000_m04 (KERN_ATTR_VECTOR ()) m21000m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m21000_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m21000_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -490,7 +490,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21000_m08 (KERN_ATTR_VECTOR ()) m21000m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m21000_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m21000_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -530,7 +530,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21000_m16 (KERN_ATTR_VECTOR ()) m21000m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m21000_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m21000_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -570,7 +570,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21000_s04 (KERN_ATTR_VECTOR ()) m21000s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m21000_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m21000_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -610,7 +610,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21000_s08 (KERN_ATTR_VECTOR ()) m21000s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m21000_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m21000_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m21000_a3-pure.cl b/OpenCL/m21000_a3-pure.cl index 82f53bf70..48393a4b6 100644 --- a/OpenCL/m21000_a3-pure.cl +++ b/OpenCL/m21000_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m21000_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m21000_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -96,7 +96,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21000_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21000_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m21000_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m21100_a0-optimized.cl b/OpenCL/m21100_a0-optimized.cl index 2b9aef1bc..9536e3d7e 100644 --- a/OpenCL/m21100_a0-optimized.cl +++ b/OpenCL/m21100_a0-optimized.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m21100_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21100_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -386,15 +386,15 @@ KERNEL_FQ void HC_ATTR_SEQ m21100_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21100_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21100_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m21100_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21100_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m21100_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21100_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -772,10 +772,10 @@ KERNEL_FQ void HC_ATTR_SEQ m21100_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21100_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21100_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m21100_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21100_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m21100_a0-pure.cl b/OpenCL/m21100_a0-pure.cl index 688cb3f01..625ebd1d9 100644 --- a/OpenCL/m21100_a0-pure.cl +++ b/OpenCL/m21100_a0-pure.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m21100_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21100_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -146,7 +146,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21100_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21100_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21100_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m21100_a1-optimized.cl b/OpenCL/m21100_a1-optimized.cl index ce982ed89..7155fb117 100644 --- a/OpenCL/m21100_a1-optimized.cl +++ b/OpenCL/m21100_a1-optimized.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m21100_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21100_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -442,15 +442,15 @@ KERNEL_FQ void HC_ATTR_SEQ m21100_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21100_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21100_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m21100_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21100_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m21100_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21100_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -886,10 +886,10 @@ KERNEL_FQ void HC_ATTR_SEQ m21100_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21100_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21100_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m21100_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21100_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m21100_a1-pure.cl b/OpenCL/m21100_a1-pure.cl index 98ee7ef27..04cb75709 100644 --- a/OpenCL/m21100_a1-pure.cl +++ b/OpenCL/m21100_a1-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m21100_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21100_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -142,7 +142,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21100_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21100_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21100_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m21100_a3-optimized.cl b/OpenCL/m21100_a3-optimized.cl index 5e2a97567..ce58cf443 100644 --- a/OpenCL/m21100_a3-optimized.cl +++ b/OpenCL/m21100_a3-optimized.cl @@ -634,7 +634,7 @@ DECLSPEC void m21100s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m21100_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21100_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -704,7 +704,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21100_m04 (KERN_ATTR_BASIC ()) m21100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m21100_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21100_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -774,7 +774,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21100_m08 (KERN_ATTR_BASIC ()) m21100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m21100_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21100_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -844,7 +844,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21100_m16 (KERN_ATTR_BASIC ()) m21100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m21100_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21100_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -914,7 +914,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21100_s04 (KERN_ATTR_BASIC ()) m21100s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m21100_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21100_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -984,7 +984,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21100_s08 (KERN_ATTR_BASIC ()) m21100s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m21100_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21100_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m21100_a3-pure.cl b/OpenCL/m21100_a3-pure.cl index 593f6f942..021798167 100644 --- a/OpenCL/m21100_a3-pure.cl +++ b/OpenCL/m21100_a3-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m21100_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m21100_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -155,7 +155,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21100_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21100_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m21100_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m21200_a0-optimized.cl b/OpenCL/m21200_a0-optimized.cl index 40136ee83..3a2c9578f 100644 --- a/OpenCL/m21200_a0-optimized.cl +++ b/OpenCL/m21200_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m21200_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21200_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -442,15 +442,15 @@ KERNEL_FQ void HC_ATTR_SEQ m21200_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21200_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21200_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m21200_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21200_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m21200_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21200_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -879,10 +879,10 @@ KERNEL_FQ void HC_ATTR_SEQ m21200_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21200_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21200_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m21200_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21200_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m21200_a0-pure.cl b/OpenCL/m21200_a0-pure.cl index cae391caf..96fe90131 100644 --- a/OpenCL/m21200_a0-pure.cl +++ b/OpenCL/m21200_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m21200_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21200_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -166,7 +166,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21200_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21200_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21200_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m21200_a1-optimized.cl b/OpenCL/m21200_a1-optimized.cl index 85a2c3d70..260e537df 100644 --- a/OpenCL/m21200_a1-optimized.cl +++ b/OpenCL/m21200_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m21200_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21200_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -498,15 +498,15 @@ KERNEL_FQ void HC_ATTR_SEQ m21200_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21200_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21200_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m21200_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21200_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m21200_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21200_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -993,10 +993,10 @@ KERNEL_FQ void HC_ATTR_SEQ m21200_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21200_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21200_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m21200_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21200_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m21200_a1-pure.cl b/OpenCL/m21200_a1-pure.cl index 5b8590c7b..5aaa9dc74 100644 --- a/OpenCL/m21200_a1-pure.cl +++ b/OpenCL/m21200_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m21200_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21200_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -162,7 +162,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21200_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21200_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21200_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m21200_a3-optimized.cl b/OpenCL/m21200_a3-optimized.cl index 4ab6caedd..521c5b811 100644 --- a/OpenCL/m21200_a3-optimized.cl +++ b/OpenCL/m21200_a3-optimized.cl @@ -781,7 +781,7 @@ DECLSPEC void m21200s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m21200_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21200_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -851,7 +851,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21200_m04 (KERN_ATTR_BASIC ()) m21200m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m21200_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21200_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -921,7 +921,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21200_m08 (KERN_ATTR_BASIC ()) m21200m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m21200_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21200_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -991,7 +991,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21200_m16 (KERN_ATTR_BASIC ()) m21200m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m21200_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21200_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1061,7 +1061,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21200_s04 (KERN_ATTR_BASIC ()) m21200s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m21200_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21200_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1131,7 +1131,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21200_s08 (KERN_ATTR_BASIC ()) m21200s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m21200_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21200_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m21200_a3-pure.cl b/OpenCL/m21200_a3-pure.cl index 1395d5c09..6b6702b46 100644 --- a/OpenCL/m21200_a3-pure.cl +++ b/OpenCL/m21200_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m21200_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m21200_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -173,7 +173,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21200_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21200_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m21200_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m21300_a0-pure.cl b/OpenCL/m21300_a0-pure.cl index fe8d316aa..acad2e499 100644 --- a/OpenCL/m21300_a0-pure.cl +++ b/OpenCL/m21300_a0-pure.cl @@ -29,7 +29,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m21300_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21300_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -146,7 +146,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21300_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21300_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21300_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m21300_a1-pure.cl b/OpenCL/m21300_a1-pure.cl index e7e58d03e..97a5a5d5c 100644 --- a/OpenCL/m21300_a1-pure.cl +++ b/OpenCL/m21300_a1-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m21300_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21300_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -140,7 +140,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21300_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21300_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21300_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m21300_a3-pure.cl b/OpenCL/m21300_a3-pure.cl index 91b279a23..8fa0bb5af 100644 --- a/OpenCL/m21300_a3-pure.cl +++ b/OpenCL/m21300_a3-pure.cl @@ -27,7 +27,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m21300_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m21300_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -159,7 +159,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21300_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21300_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m21300_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m21310_a0-pure.cl b/OpenCL/m21310_a0-pure.cl index c14d713be..154f3030d 100644 --- a/OpenCL/m21310_a0-pure.cl +++ b/OpenCL/m21310_a0-pure.cl @@ -39,7 +39,7 @@ typedef struct md5_double_salt } md5_double_salt_t; -KERNEL_FQ void HC_ATTR_SEQ m21310_mxx (KERN_ATTR_RULES_ESALT (md5_double_salt_t)) +KERNEL_FQ KERNEL_FA void m21310_mxx (KERN_ATTR_RULES_ESALT (md5_double_salt_t)) { /** * modifier @@ -153,7 +153,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21310_mxx (KERN_ATTR_RULES_ESALT (md5_double_salt_t) } } -KERNEL_FQ void HC_ATTR_SEQ m21310_sxx (KERN_ATTR_RULES_ESALT (md5_double_salt_t)) +KERNEL_FQ KERNEL_FA void m21310_sxx (KERN_ATTR_RULES_ESALT (md5_double_salt_t)) { /** * modifier diff --git a/OpenCL/m21310_a1-pure.cl b/OpenCL/m21310_a1-pure.cl index 353023724..512c460cc 100644 --- a/OpenCL/m21310_a1-pure.cl +++ b/OpenCL/m21310_a1-pure.cl @@ -37,7 +37,7 @@ typedef struct md5_double_salt } md5_double_salt_t; -KERNEL_FQ void HC_ATTR_SEQ m21310_mxx (KERN_ATTR_ESALT (md5_double_salt)) +KERNEL_FQ KERNEL_FA void m21310_mxx (KERN_ATTR_ESALT (md5_double_salt)) { /** * modifier @@ -149,7 +149,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21310_mxx (KERN_ATTR_ESALT (md5_double_salt)) } } -KERNEL_FQ void HC_ATTR_SEQ m21310_sxx (KERN_ATTR_ESALT (md5_double_salt)) +KERNEL_FQ KERNEL_FA void m21310_sxx (KERN_ATTR_ESALT (md5_double_salt)) { /** * modifier diff --git a/OpenCL/m21310_a3-pure.cl b/OpenCL/m21310_a3-pure.cl index 8ffef046f..5837f74b7 100644 --- a/OpenCL/m21310_a3-pure.cl +++ b/OpenCL/m21310_a3-pure.cl @@ -37,7 +37,7 @@ typedef struct md5_double_salt } md5_double_salt_t; -KERNEL_FQ void HC_ATTR_SEQ m21310_mxx (KERN_ATTR_VECTOR_ESALT (md5_double_salt)) +KERNEL_FQ KERNEL_FA void m21310_mxx (KERN_ATTR_VECTOR_ESALT (md5_double_salt)) { /** * modifier @@ -168,7 +168,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21310_mxx (KERN_ATTR_VECTOR_ESALT (md5_double_salt)) } } -KERNEL_FQ void HC_ATTR_SEQ m21310_sxx (KERN_ATTR_VECTOR_ESALT (md5_double_salt)) +KERNEL_FQ KERNEL_FA void m21310_sxx (KERN_ATTR_VECTOR_ESALT (md5_double_salt)) { /** * modifier diff --git a/OpenCL/m21400_a0-optimized.cl b/OpenCL/m21400_a0-optimized.cl index 6f421834d..9b76e15ce 100644 --- a/OpenCL/m21400_a0-optimized.cl +++ b/OpenCL/m21400_a0-optimized.cl @@ -30,7 +30,7 @@ h = 0; \ } -KERNEL_FQ void HC_ATTR_SEQ m21400_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21400_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -277,15 +277,15 @@ KERNEL_FQ void HC_ATTR_SEQ m21400_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21400_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21400_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m21400_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21400_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m21400_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21400_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -565,10 +565,10 @@ KERNEL_FQ void HC_ATTR_SEQ m21400_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21400_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21400_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m21400_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21400_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m21400_a0-pure.cl b/OpenCL/m21400_a0-pure.cl index 04f8c0126..e00e4e67f 100644 --- a/OpenCL/m21400_a0-pure.cl +++ b/OpenCL/m21400_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m21400_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21400_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -91,7 +91,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21400_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21400_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21400_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m21400_a1-optimized.cl b/OpenCL/m21400_a1-optimized.cl index 5c4b4189c..d767ac996 100644 --- a/OpenCL/m21400_a1-optimized.cl +++ b/OpenCL/m21400_a1-optimized.cl @@ -28,7 +28,7 @@ h = 0; \ } -KERNEL_FQ void HC_ATTR_SEQ m21400_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21400_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -333,15 +333,15 @@ KERNEL_FQ void HC_ATTR_SEQ m21400_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21400_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21400_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m21400_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21400_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m21400_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21400_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -679,10 +679,10 @@ KERNEL_FQ void HC_ATTR_SEQ m21400_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21400_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21400_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m21400_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21400_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m21400_a1-pure.cl b/OpenCL/m21400_a1-pure.cl index ea88e75c8..49c1761c4 100644 --- a/OpenCL/m21400_a1-pure.cl +++ b/OpenCL/m21400_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m21400_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21400_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -87,7 +87,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21400_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21400_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21400_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m21400_a3-optimized.cl b/OpenCL/m21400_a3-optimized.cl index d77a4ee3a..158fe8cde 100644 --- a/OpenCL/m21400_a3-optimized.cl +++ b/OpenCL/m21400_a3-optimized.cl @@ -493,7 +493,7 @@ DECLSPEC void m21400s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m21400_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m21400_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -533,7 +533,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21400_m04 (KERN_ATTR_VECTOR ()) m21400m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m21400_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m21400_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -573,7 +573,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21400_m08 (KERN_ATTR_VECTOR ()) m21400m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m21400_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m21400_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -613,7 +613,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21400_m16 (KERN_ATTR_VECTOR ()) m21400m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m21400_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m21400_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -653,7 +653,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21400_s04 (KERN_ATTR_VECTOR ()) m21400s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m21400_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m21400_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -693,7 +693,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21400_s08 (KERN_ATTR_VECTOR ()) m21400s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m21400_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m21400_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m21400_a3-pure.cl b/OpenCL/m21400_a3-pure.cl index 4f61de64a..25ec481ef 100644 --- a/OpenCL/m21400_a3-pure.cl +++ b/OpenCL/m21400_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m21400_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m21400_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -100,7 +100,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21400_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21400_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m21400_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m21420_a0-pure.cl b/OpenCL/m21420_a0-pure.cl index 2992e3446..557de6769 100644 --- a/OpenCL/m21420_a0-pure.cl +++ b/OpenCL/m21420_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m21420_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21420_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -111,7 +111,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21420_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21420_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m21420_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m21420_a1-pure.cl b/OpenCL/m21420_a1-pure.cl index d613b2e3c..4c0aca32a 100644 --- a/OpenCL/m21420_a1-pure.cl +++ b/OpenCL/m21420_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m21420_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21420_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -107,7 +107,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21420_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21420_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m21420_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m21420_a3-pure.cl b/OpenCL/m21420_a3-pure.cl index 17ddf7c88..4a513a9ac 100644 --- a/OpenCL/m21420_a3-pure.cl +++ b/OpenCL/m21420_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m21420_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m21420_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -120,7 +120,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21420_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m21420_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m21420_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m21500-pure.cl b/OpenCL/m21500-pure.cl index 69d676a0d..5b069bb1b 100644 --- a/OpenCL/m21500-pure.cl +++ b/OpenCL/m21500-pure.cl @@ -70,7 +70,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m21500_init (KERN_ATTR_TMPS_ESALT (solarwinds_tmp_t, solarwinds_t)) +KERNEL_FQ KERNEL_FA void m21500_init (KERN_ATTR_TMPS_ESALT (solarwinds_tmp_t, solarwinds_t)) { /** * base @@ -142,7 +142,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21500_init (KERN_ATTR_TMPS_ESALT (solarwinds_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m21500_loop (KERN_ATTR_TMPS_ESALT (solarwinds_tmp_t, solarwinds_t)) +KERNEL_FQ KERNEL_FA void m21500_loop (KERN_ATTR_TMPS_ESALT (solarwinds_tmp_t, solarwinds_t)) { const u64 gid = get_global_id (0); @@ -227,7 +227,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21500_loop (KERN_ATTR_TMPS_ESALT (solarwinds_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m21500_comp (KERN_ATTR_TMPS_ESALT (solarwinds_tmp_t, solarwinds_t)) +KERNEL_FQ KERNEL_FA void m21500_comp (KERN_ATTR_TMPS_ESALT (solarwinds_tmp_t, solarwinds_t)) { /** * base diff --git a/OpenCL/m21600-pure.cl b/OpenCL/m21600-pure.cl index ca888a606..e49d14b30 100644 --- a/OpenCL/m21600-pure.cl +++ b/OpenCL/m21600-pure.cl @@ -85,7 +85,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void HC_ATTR_SEQ m21600_init (KERN_ATTR_TMPS (web2py_sha512_tmp_t)) +KERNEL_FQ KERNEL_FA void m21600_init (KERN_ATTR_TMPS (web2py_sha512_tmp_t)) { /** * base @@ -189,7 +189,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21600_init (KERN_ATTR_TMPS (web2py_sha512_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m21600_loop (KERN_ATTR_TMPS (web2py_sha512_tmp_t)) +KERNEL_FQ KERNEL_FA void m21600_loop (KERN_ATTR_TMPS (web2py_sha512_tmp_t)) { const u64 gid = get_global_id (0); @@ -315,7 +315,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21600_loop (KERN_ATTR_TMPS (web2py_sha512_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m21600_comp (KERN_ATTR_TMPS (web2py_sha512_tmp_t)) +KERNEL_FQ KERNEL_FA void m21600_comp (KERN_ATTR_TMPS (web2py_sha512_tmp_t)) { /** * base diff --git a/OpenCL/m21700-pure.cl b/OpenCL/m21700-pure.cl index 697fc1072..6ad2488ca 100644 --- a/OpenCL/m21700-pure.cl +++ b/OpenCL/m21700-pure.cl @@ -95,7 +95,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void HC_ATTR_SEQ m21700_init (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, electrum_t)) +KERNEL_FQ KERNEL_FA void m21700_init (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, electrum_t)) { /** * base @@ -192,7 +192,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21700_init (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, el tmps[gid].out[7] = tmps[gid].dgst[7]; } -KERNEL_FQ void HC_ATTR_SEQ m21700_loop (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, electrum_t)) +KERNEL_FQ KERNEL_FA void m21700_loop (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, electrum_t)) { const u64 gid = get_global_id (0); @@ -315,7 +315,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21700_loop (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, el unpack64v (tmps, out, gid, 7, out[7]); } -KERNEL_FQ void HC_ATTR_SEQ m21700_comp (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, electrum_t)) +KERNEL_FQ KERNEL_FA void m21700_comp (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, electrum_t)) { /** * base diff --git a/OpenCL/m21800-pure.cl b/OpenCL/m21800-pure.cl index e81f487e9..a9b2bf635 100644 --- a/OpenCL/m21800-pure.cl +++ b/OpenCL/m21800-pure.cl @@ -96,7 +96,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void HC_ATTR_SEQ m21800_init (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, electrum_t)) +KERNEL_FQ KERNEL_FA void m21800_init (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, electrum_t)) { /** * base @@ -193,7 +193,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21800_init (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, el tmps[gid].out[7] = tmps[gid].dgst[7]; } -KERNEL_FQ void HC_ATTR_SEQ m21800_loop (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, electrum_t)) +KERNEL_FQ KERNEL_FA void m21800_loop (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, electrum_t)) { const u64 gid = get_global_id (0); @@ -316,7 +316,7 @@ KERNEL_FQ void HC_ATTR_SEQ m21800_loop (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, el unpack64v (tmps, out, gid, 7, out[7]); } -KERNEL_FQ void HC_ATTR_SEQ m21800_comp (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, electrum_t)) +KERNEL_FQ KERNEL_FA void m21800_comp (KERN_ATTR_TMPS_ESALT (electrum_tmp_t, electrum_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22000-pure.cl b/OpenCL/m22000-pure.cl index 8c4e1c325..f6462637c 100644 --- a/OpenCL/m22000-pure.cl +++ b/OpenCL/m22000-pure.cl @@ -145,7 +145,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m22000_init (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) +KERNEL_FQ KERNEL_FA void m22000_init (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) { /** * base @@ -253,7 +253,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22000_init (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, tmps[gid].out[9] = sha1_hmac_ctx2.opad.h[4]; } -KERNEL_FQ void HC_ATTR_SEQ m22000_loop (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) +KERNEL_FQ KERNEL_FA void m22000_loop (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) { const u64 gid = get_global_id (0); @@ -396,12 +396,12 @@ KERNEL_FQ void HC_ATTR_SEQ m22000_loop (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, unpackv (tmps, out, gid, 9, out[4]); } -KERNEL_FQ void HC_ATTR_SEQ m22000_comp (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) +KERNEL_FQ KERNEL_FA void m22000_comp (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) { // not in use here, special case... } -KERNEL_FQ void HC_ATTR_SEQ m22000_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) +KERNEL_FQ KERNEL_FA void m22000_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) { const u64 gid = get_global_id (0); @@ -594,7 +594,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22000_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m22000_aux2 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) +KERNEL_FQ KERNEL_FA void m22000_aux2 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) { const u64 gid = get_global_id (0); @@ -777,7 +777,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22000_aux2 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m22000_aux3 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) +KERNEL_FQ KERNEL_FA void m22000_aux3 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) { /** * aes shared @@ -1071,7 +1071,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22000_aux3 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m22000_aux4 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) +KERNEL_FQ KERNEL_FA void m22000_aux4 (KERN_ATTR_TMPS_ESALT (wpa_pbkdf2_tmp_t, wpa_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m22001-pure.cl b/OpenCL/m22001-pure.cl index 133f63ff7..d26a276f1 100644 --- a/OpenCL/m22001-pure.cl +++ b/OpenCL/m22001-pure.cl @@ -158,7 +158,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m22001_init (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) +KERNEL_FQ KERNEL_FA void m22001_init (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) { const u64 gid = get_global_id (0); @@ -203,17 +203,17 @@ KERNEL_FQ void HC_ATTR_SEQ m22001_init (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa tmps[gid].out[7] = hc_swap32_S (out[7]); } -KERNEL_FQ void HC_ATTR_SEQ m22001_loop (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) +KERNEL_FQ KERNEL_FA void m22001_loop (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) { // not in use here, special case... } -KERNEL_FQ void HC_ATTR_SEQ m22001_comp (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) +KERNEL_FQ KERNEL_FA void m22001_comp (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) { // not in use here, special case... } -KERNEL_FQ void HC_ATTR_SEQ m22001_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) +KERNEL_FQ KERNEL_FA void m22001_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) { const u64 gid = get_global_id (0); @@ -406,7 +406,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22001_aux1 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa } } -KERNEL_FQ void HC_ATTR_SEQ m22001_aux2 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) +KERNEL_FQ KERNEL_FA void m22001_aux2 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) { const u64 gid = get_global_id (0); @@ -589,7 +589,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22001_aux2 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa } } -KERNEL_FQ void HC_ATTR_SEQ m22001_aux3 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) +KERNEL_FQ KERNEL_FA void m22001_aux3 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) { /** * aes shared @@ -883,7 +883,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22001_aux3 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa } } -KERNEL_FQ void HC_ATTR_SEQ m22001_aux4 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) +KERNEL_FQ KERNEL_FA void m22001_aux4 (KERN_ATTR_TMPS_ESALT (wpa_pmk_tmp_t, wpa_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m22100-pure.cl b/OpenCL/m22100-pure.cl index 773c910cd..36930325e 100644 --- a/OpenCL/m22100-pure.cl +++ b/OpenCL/m22100-pure.cl @@ -133,7 +133,7 @@ DECLSPEC void sha256_transform_vector_pc (PRIVATE_AS const u32x *w0, PRIVATE_AS digest[7] += h; } -KERNEL_FQ void HC_ATTR_SEQ m22100_init (KERN_ATTR_TMPS_ESALT (bitlocker_tmp_t, bitlocker_t)) +KERNEL_FQ KERNEL_FA void m22100_init (KERN_ATTR_TMPS_ESALT (bitlocker_tmp_t, bitlocker_t)) { /** * base @@ -193,7 +193,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22100_init (KERN_ATTR_TMPS_ESALT (bitlocker_tmp_t, b tmps[gid].last_hash[7] = 0; } -KERNEL_FQ void HC_ATTR_SEQ m22100_loop (KERN_ATTR_TMPS_ESALT (bitlocker_tmp_t, bitlocker_t)) +KERNEL_FQ KERNEL_FA void m22100_loop (KERN_ATTR_TMPS_ESALT (bitlocker_tmp_t, bitlocker_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -347,7 +347,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22100_loop (KERN_ATTR_TMPS_ESALT (bitlocker_tmp_t, b unpackv (tmps, last_hash, gid, 7, w1[3]); } -KERNEL_FQ void HC_ATTR_SEQ m22100_comp (KERN_ATTR_TMPS_ESALT (bitlocker_tmp_t, bitlocker_t)) +KERNEL_FQ KERNEL_FA void m22100_comp (KERN_ATTR_TMPS_ESALT (bitlocker_tmp_t, bitlocker_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22200_a0-optimized.cl b/OpenCL/m22200_a0-optimized.cl index ea8ff7dc6..73ae7e9aa 100644 --- a/OpenCL/m22200_a0-optimized.cl +++ b/OpenCL/m22200_a0-optimized.cl @@ -122,7 +122,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void HC_ATTR_SEQ m22200_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m22200_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -237,15 +237,15 @@ KERNEL_FQ void HC_ATTR_SEQ m22200_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m22200_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m22200_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m22200_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m22200_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m22200_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m22200_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -373,10 +373,10 @@ KERNEL_FQ void HC_ATTR_SEQ m22200_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m22200_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m22200_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m22200_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m22200_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m22200_a0-pure.cl b/OpenCL/m22200_a0-pure.cl index 4e824b9f5..8c1338596 100644 --- a/OpenCL/m22200_a0-pure.cl +++ b/OpenCL/m22200_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m22200_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m22200_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -68,7 +68,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22200_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m22200_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m22200_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m22200_a1-optimized.cl b/OpenCL/m22200_a1-optimized.cl index 5d883e355..7ce510ba9 100644 --- a/OpenCL/m22200_a1-optimized.cl +++ b/OpenCL/m22200_a1-optimized.cl @@ -120,7 +120,7 @@ DECLSPEC void sha512_transform_intern (PRIVATE_AS const u32x *w0, PRIVATE_AS con digest[7] = h; } -KERNEL_FQ void HC_ATTR_SEQ m22200_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22200_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -307,15 +307,15 @@ KERNEL_FQ void HC_ATTR_SEQ m22200_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m22200_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22200_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m22200_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22200_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m22200_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22200_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -502,10 +502,10 @@ KERNEL_FQ void HC_ATTR_SEQ m22200_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m22200_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22200_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m22200_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22200_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m22200_a1-pure.cl b/OpenCL/m22200_a1-pure.cl index 2e6683a4b..aad1d3179 100644 --- a/OpenCL/m22200_a1-pure.cl +++ b/OpenCL/m22200_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m22200_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22200_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -63,7 +63,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22200_mxx (KERN_ATTR_BASIC ()) } -KERNEL_FQ void HC_ATTR_SEQ m22200_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22200_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m22200_a3-optimized.cl b/OpenCL/m22200_a3-optimized.cl index 2d1b28a79..feae41218 100644 --- a/OpenCL/m22200_a3-optimized.cl +++ b/OpenCL/m22200_a3-optimized.cl @@ -282,7 +282,7 @@ DECLSPEC void m22200s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m22200_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22200_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -348,7 +348,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22200_m04 (KERN_ATTR_BASIC ()) m22200m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m22200_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22200_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -422,7 +422,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22200_m08 (KERN_ATTR_BASIC ()) m22200m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m22200_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22200_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -511,7 +511,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22200_m16 (KERN_ATTR_BASIC ()) m22200m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m22200_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22200_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -577,7 +577,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22200_s04 (KERN_ATTR_BASIC ()) m22200s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m22200_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22200_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -651,7 +651,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22200_s08 (KERN_ATTR_BASIC ()) m22200s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m22200_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22200_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m22200_a3-pure.cl b/OpenCL/m22200_a3-pure.cl index dd0442fa1..a06b6c4e6 100644 --- a/OpenCL/m22200_a3-pure.cl +++ b/OpenCL/m22200_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m22200_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m22200_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -79,7 +79,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22200_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m22200_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m22200_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m22300_a0-optimized.cl b/OpenCL/m22300_a0-optimized.cl index 51343a714..4d22d3e16 100644 --- a/OpenCL/m22300_a0-optimized.cl +++ b/OpenCL/m22300_a0-optimized.cl @@ -30,7 +30,7 @@ h = 0; \ } -KERNEL_FQ void HC_ATTR_SEQ m22300_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m22300_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -277,15 +277,15 @@ KERNEL_FQ void HC_ATTR_SEQ m22300_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m22300_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m22300_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m22300_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m22300_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m22300_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m22300_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -565,10 +565,10 @@ KERNEL_FQ void HC_ATTR_SEQ m22300_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m22300_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m22300_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m22300_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m22300_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m22300_a0-pure.cl b/OpenCL/m22300_a0-pure.cl index ba04eb049..338608d14 100644 --- a/OpenCL/m22300_a0-pure.cl +++ b/OpenCL/m22300_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m22300_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m22300_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -75,7 +75,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22300_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m22300_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m22300_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m22300_a1-optimized.cl b/OpenCL/m22300_a1-optimized.cl index 82a0a4d51..3d1614871 100644 --- a/OpenCL/m22300_a1-optimized.cl +++ b/OpenCL/m22300_a1-optimized.cl @@ -28,7 +28,7 @@ h = 0; \ } -KERNEL_FQ void HC_ATTR_SEQ m22300_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22300_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -335,15 +335,15 @@ KERNEL_FQ void HC_ATTR_SEQ m22300_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m22300_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22300_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m22300_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22300_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m22300_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22300_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -683,10 +683,10 @@ KERNEL_FQ void HC_ATTR_SEQ m22300_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m22300_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22300_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m22300_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22300_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m22300_a1-pure.cl b/OpenCL/m22300_a1-pure.cl index 861741b05..a71525f1f 100644 --- a/OpenCL/m22300_a1-pure.cl +++ b/OpenCL/m22300_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m22300_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22300_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22300_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m22300_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22300_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m22300_a3-optimized.cl b/OpenCL/m22300_a3-optimized.cl index fc7d87c4d..e4c06bf76 100644 --- a/OpenCL/m22300_a3-optimized.cl +++ b/OpenCL/m22300_a3-optimized.cl @@ -537,7 +537,7 @@ DECLSPEC void m22300s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m22300_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22300_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -586,7 +586,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22300_m04 (KERN_ATTR_BASIC ()) m22300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m22300_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22300_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -635,7 +635,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22300_m08 (KERN_ATTR_BASIC ()) m22300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m22300_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22300_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -684,7 +684,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22300_m16 (KERN_ATTR_BASIC ()) m22300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m22300_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22300_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -733,7 +733,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22300_s04 (KERN_ATTR_BASIC ()) m22300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m22300_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22300_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -782,7 +782,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22300_s08 (KERN_ATTR_BASIC ()) m22300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m22300_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22300_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m22300_a3-pure.cl b/OpenCL/m22300_a3-pure.cl index 22a5f174e..c34bc3a0a 100644 --- a/OpenCL/m22300_a3-pure.cl +++ b/OpenCL/m22300_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m22300_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m22300_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -86,7 +86,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22300_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m22300_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m22300_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m22400-pure.cl b/OpenCL/m22400-pure.cl index b6916b462..6daf00114 100644 --- a/OpenCL/m22400-pure.cl +++ b/OpenCL/m22400-pure.cl @@ -31,7 +31,7 @@ typedef struct aescrypt_tmp } aescrypt_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m22400_init (KERN_ATTR_TMPS_ESALT (aescrypt_tmp_t, aescrypt_t)) +KERNEL_FQ KERNEL_FA void m22400_init (KERN_ATTR_TMPS_ESALT (aescrypt_tmp_t, aescrypt_t)) { /** * base @@ -110,7 +110,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22400_init (KERN_ATTR_TMPS_ESALT (aescrypt_tmp_t, ae tmps[gid].len = final_len; } -KERNEL_FQ void HC_ATTR_SEQ m22400_loop (KERN_ATTR_TMPS_ESALT (aescrypt_tmp_t, aescrypt_t)) +KERNEL_FQ KERNEL_FA void m22400_loop (KERN_ATTR_TMPS_ESALT (aescrypt_tmp_t, aescrypt_t)) { const u64 gid = get_global_id (0); @@ -214,7 +214,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22400_loop (KERN_ATTR_TMPS_ESALT (aescrypt_tmp_t, ae tmps[gid].pass[7] = w[7]; } -KERNEL_FQ void HC_ATTR_SEQ m22400_comp (KERN_ATTR_TMPS_ESALT (aescrypt_tmp_t, aescrypt_t)) +KERNEL_FQ KERNEL_FA void m22400_comp (KERN_ATTR_TMPS_ESALT (aescrypt_tmp_t, aescrypt_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m22500_a0-optimized.cl b/OpenCL/m22500_a0-optimized.cl index 33454830e..7b8ecf5a7 100644 --- a/OpenCL/m22500_a0-optimized.cl +++ b/OpenCL/m22500_a0-optimized.cl @@ -29,7 +29,7 @@ DECLSPEC int is_valid_bitcoinj_8 (const u8 v) return 1; } -KERNEL_FQ void HC_ATTR_SEQ m22500_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m22500_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -616,15 +616,15 @@ KERNEL_FQ void HC_ATTR_SEQ m22500_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m22500_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m22500_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m22500_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m22500_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m22500_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m22500_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -1211,10 +1211,10 @@ KERNEL_FQ void HC_ATTR_SEQ m22500_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m22500_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m22500_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m22500_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m22500_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m22500_a0-pure.cl b/OpenCL/m22500_a0-pure.cl index b75ab45f4..1d67a95d7 100644 --- a/OpenCL/m22500_a0-pure.cl +++ b/OpenCL/m22500_a0-pure.cl @@ -29,7 +29,7 @@ DECLSPEC int is_valid_bitcoinj_8 (const u8 v) return 1; } -KERNEL_FQ void HC_ATTR_SEQ m22500_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m22500_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -325,7 +325,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22500_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m22500_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m22500_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m22500_a1-optimized.cl b/OpenCL/m22500_a1-optimized.cl index d622b616c..fdd78ba1a 100644 --- a/OpenCL/m22500_a1-optimized.cl +++ b/OpenCL/m22500_a1-optimized.cl @@ -28,7 +28,7 @@ DECLSPEC int is_valid_bitcoinj_8 (const u8 v) return 1; } -KERNEL_FQ void HC_ATTR_SEQ m22500_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22500_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -675,15 +675,15 @@ KERNEL_FQ void HC_ATTR_SEQ m22500_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m22500_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22500_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m22500_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22500_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m22500_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22500_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -1330,10 +1330,10 @@ KERNEL_FQ void HC_ATTR_SEQ m22500_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m22500_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22500_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m22500_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22500_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m22500_a1-pure.cl b/OpenCL/m22500_a1-pure.cl index 8ab215f46..fb3c210d4 100644 --- a/OpenCL/m22500_a1-pure.cl +++ b/OpenCL/m22500_a1-pure.cl @@ -27,7 +27,7 @@ DECLSPEC int is_valid_bitcoinj_8 (const u8 v) return 1; } -KERNEL_FQ void HC_ATTR_SEQ m22500_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22500_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -329,7 +329,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22500_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m22500_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m22500_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m22500_a3-optimized.cl b/OpenCL/m22500_a3-optimized.cl index 9550e2c03..e7466d88e 100644 --- a/OpenCL/m22500_a3-optimized.cl +++ b/OpenCL/m22500_a3-optimized.cl @@ -602,7 +602,7 @@ DECLSPEC void m22500 (SHM_TYPE u32a *s_te0, SHM_TYPE u32a *s_te1, SHM_TYPE u32a } } -KERNEL_FQ void HC_ATTR_SEQ m22500_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m22500_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -697,7 +697,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22500_m04 (KERN_ATTR_VECTOR ()) m22500 (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m22500_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m22500_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -792,7 +792,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22500_m08 (KERN_ATTR_VECTOR ()) m22500 (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m22500_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m22500_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -887,7 +887,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22500_m16 (KERN_ATTR_VECTOR ()) m22500 (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m22500_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m22500_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -982,7 +982,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22500_s04 (KERN_ATTR_VECTOR ()) m22500 (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m22500_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m22500_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -1077,7 +1077,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22500_s08 (KERN_ATTR_VECTOR ()) m22500 (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m22500_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m22500_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m22500_a3-pure.cl b/OpenCL/m22500_a3-pure.cl index e041240be..5b9d85287 100644 --- a/OpenCL/m22500_a3-pure.cl +++ b/OpenCL/m22500_a3-pure.cl @@ -27,7 +27,7 @@ DECLSPEC int is_valid_bitcoinj_8 (const u8 v) return 1; } -KERNEL_FQ void HC_ATTR_SEQ m22500_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m22500_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -338,7 +338,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22500_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m22500_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m22500_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m22600-pure.cl b/OpenCL/m22600-pure.cl index 2e30ac148..30fd96fd7 100644 --- a/OpenCL/m22600-pure.cl +++ b/OpenCL/m22600-pure.cl @@ -108,7 +108,7 @@ DECLSPEC void sha1_run (PRIVATE_AS u32 *w, PRIVATE_AS u32 *res) res[4] = digest[4]; } -KERNEL_FQ void HC_ATTR_SEQ m22600_init (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, telegram_t)) +KERNEL_FQ KERNEL_FA void m22600_init (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, telegram_t)) { /** * base @@ -182,7 +182,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22600_init (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, te } } -KERNEL_FQ void HC_ATTR_SEQ m22600_loop (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, telegram_t)) +KERNEL_FQ KERNEL_FA void m22600_loop (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, telegram_t)) { const u64 gid = get_global_id (0); @@ -267,7 +267,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22600_loop (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, te } } -KERNEL_FQ void HC_ATTR_SEQ m22600_comp (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, telegram_t)) +KERNEL_FQ KERNEL_FA void m22600_comp (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, telegram_t)) { /** * base diff --git a/OpenCL/m22700-pure.cl b/OpenCL/m22700-pure.cl index e9873a21f..981880169 100644 --- a/OpenCL/m22700-pure.cl +++ b/OpenCL/m22700-pure.cl @@ -16,16 +16,6 @@ #define COMPARE_S M2S(INCLUDE_PATH/inc_comp_single.cl) #define COMPARE_M M2S(INCLUDE_PATH/inc_comp_multi.cl) -typedef struct -{ - #ifndef SCRYPT_TMP_ELEM - #define SCRYPT_TMP_ELEM 1 - #endif - - u32 P[SCRYPT_TMP_ELEM]; - -} scrypt_tmp_t; - // fixed MultiBit salt (not a bug) #define MULTIBIT_S0 0x35510380 @@ -73,7 +63,7 @@ DECLSPEC int is_valid_bitcoinj (PRIVATE_AS const u32 *w) return 1; } -KERNEL_FQ void HC_ATTR_SEQ m22700_init (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m22700_init (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); @@ -101,16 +91,12 @@ KERNEL_FQ void HC_ATTR_SEQ m22700_init (KERN_ATTR_TMPS (scrypt_tmp_t)) s[0] = hc_swap32_S (MULTIBIT_S0); s[1] = hc_swap32_S (MULTIBIT_S1); - u32 out[SCRYPT_CNT4]; + scrypt_pbkdf2_ppg (w, w_len, s, 8, tmps[gid].in, SCRYPT_SZ); - scrypt_pbkdf2_pp (w, w_len, s, 8, out, SCRYPT_SZ); - - scrypt_blockmix_in (out, SCRYPT_SZ); - - for (u32 i = 0; i < SCRYPT_CNT4; i++) tmps[gid].P[i] = out[i]; + scrypt_blockmix_in (tmps[gid].in, tmps[gid].out, SCRYPT_SZ); } -KERNEL_FQ void HC_ATTR_SEQ m22700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m22700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -121,16 +107,12 @@ KERNEL_FQ void HC_ATTR_SEQ m22700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) u32 X[STATE_CNT4]; - GLOBAL_AS u32 *P = tmps[gid].P + (SALT_REPEAT * STATE_CNT4); + GLOBAL_AS u32 *P = tmps[gid].out + (SALT_REPEAT * STATE_CNT4); - for (u32 z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - - scrypt_smix_init (X, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); - - for (u32 z = 0; z < STATE_CNT4; z++) P[z] = X[z]; + scrypt_smix_init (P, X, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); } -KERNEL_FQ void HC_ATTR_SEQ m22700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m22700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -142,16 +124,12 @@ KERNEL_FQ void HC_ATTR_SEQ m22700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) u32 X[STATE_CNT4]; u32 T[STATE_CNT4]; - GLOBAL_AS u32 *P = tmps[gid].P + (SALT_REPEAT * STATE_CNT4); + GLOBAL_AS u32 *P = tmps[gid].out + (SALT_REPEAT * STATE_CNT4); - for (u32 z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - - scrypt_smix_loop (X, T, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); - - for (u32 z = 0; z < STATE_CNT4; z++) P[z] = X[z]; + scrypt_smix_loop (P, X, T, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); } -KERNEL_FQ void HC_ATTR_SEQ m22700_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m22700_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -232,15 +210,11 @@ KERNEL_FQ void HC_ATTR_SEQ m22700_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) } - u32 x[SCRYPT_CNT4]; - - for (u32 i = 0; i < SCRYPT_CNT4; i++) x[i] = tmps[gid].P[i]; - - scrypt_blockmix_out (x, SCRYPT_SZ); + scrypt_blockmix_out (tmps[gid].out, tmps[gid].in, SCRYPT_SZ); u32 out[8]; - scrypt_pbkdf2_pp (w, w_len, x, SCRYPT_SZ, out, 32); + scrypt_pbkdf2_pgp (w, w_len, tmps[gid].in, SCRYPT_SZ, out, 32); // AES256-CBC decrypt with IV from salt buffer (dynamic, alternative 1): diff --git a/OpenCL/m22911_a0-pure.cl b/OpenCL/m22911_a0-pure.cl index 807b8c2b4..c79750b3c 100644 --- a/OpenCL/m22911_a0-pure.cl +++ b/OpenCL/m22911_a0-pure.cl @@ -26,7 +26,7 @@ typedef struct pem } pem_t; -KERNEL_FQ void HC_ATTR_SEQ m22911_mxx (KERN_ATTR_RULES_ESALT (pem_t)) +KERNEL_FQ KERNEL_FA void m22911_mxx (KERN_ATTR_RULES_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -236,7 +236,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22911_mxx (KERN_ATTR_RULES_ESALT (pem_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m22911_sxx (KERN_ATTR_RULES_ESALT (pem_t)) +KERNEL_FQ KERNEL_FA void m22911_sxx (KERN_ATTR_RULES_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22911_a1-pure.cl b/OpenCL/m22911_a1-pure.cl index 82d811599..7d52a8ab5 100644 --- a/OpenCL/m22911_a1-pure.cl +++ b/OpenCL/m22911_a1-pure.cl @@ -24,7 +24,7 @@ typedef struct pem } pem_t; -KERNEL_FQ void HC_ATTR_SEQ m22911_mxx (KERN_ATTR_ESALT (pem_t)) +KERNEL_FQ KERNEL_FA void m22911_mxx (KERN_ATTR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -232,7 +232,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22911_mxx (KERN_ATTR_ESALT (pem_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m22911_sxx (KERN_ATTR_ESALT (pem_t)) +KERNEL_FQ KERNEL_FA void m22911_sxx (KERN_ATTR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22911_a3-pure.cl b/OpenCL/m22911_a3-pure.cl index d2c03ae1d..485964606 100644 --- a/OpenCL/m22911_a3-pure.cl +++ b/OpenCL/m22911_a3-pure.cl @@ -24,7 +24,7 @@ typedef struct pem } pem_t; -KERNEL_FQ void HC_ATTR_SEQ m22911_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) +KERNEL_FQ KERNEL_FA void m22911_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -249,7 +249,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22911_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m22911_sxx (KERN_ATTR_VECTOR_ESALT (pem_t)) +KERNEL_FQ KERNEL_FA void m22911_sxx (KERN_ATTR_VECTOR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22921_a0-pure.cl b/OpenCL/m22921_a0-pure.cl index 68d2b964b..7be554f4a 100644 --- a/OpenCL/m22921_a0-pure.cl +++ b/OpenCL/m22921_a0-pure.cl @@ -26,7 +26,7 @@ typedef struct pem } pem_t; -KERNEL_FQ void HC_ATTR_SEQ m22921_mxx (KERN_ATTR_RULES_ESALT (pem_t)) +KERNEL_FQ KERNEL_FA void m22921_mxx (KERN_ATTR_RULES_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -203,7 +203,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22921_mxx (KERN_ATTR_RULES_ESALT (pem_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m22921_sxx (KERN_ATTR_RULES_ESALT (pem_t)) +KERNEL_FQ KERNEL_FA void m22921_sxx (KERN_ATTR_RULES_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22921_a1-pure.cl b/OpenCL/m22921_a1-pure.cl index 7f70467b1..ccdb2d09e 100644 --- a/OpenCL/m22921_a1-pure.cl +++ b/OpenCL/m22921_a1-pure.cl @@ -24,7 +24,7 @@ typedef struct pem } pem_t; -KERNEL_FQ void HC_ATTR_SEQ m22921_mxx (KERN_ATTR_ESALT (pem_t)) +KERNEL_FQ KERNEL_FA void m22921_mxx (KERN_ATTR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -197,7 +197,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22921_mxx (KERN_ATTR_ESALT (pem_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m22921_sxx (KERN_ATTR_ESALT (pem_t)) +KERNEL_FQ KERNEL_FA void m22921_sxx (KERN_ATTR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22921_a3-pure.cl b/OpenCL/m22921_a3-pure.cl index 234d39c75..8bc06cdcb 100644 --- a/OpenCL/m22921_a3-pure.cl +++ b/OpenCL/m22921_a3-pure.cl @@ -24,7 +24,7 @@ typedef struct pem } pem_t; -KERNEL_FQ void HC_ATTR_SEQ m22921_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) +KERNEL_FQ KERNEL_FA void m22921_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -217,7 +217,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22921_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) } -KERNEL_FQ void HC_ATTR_SEQ m22921_sxx (KERN_ATTR_VECTOR_ESALT (pem_t)) +KERNEL_FQ KERNEL_FA void m22921_sxx (KERN_ATTR_VECTOR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22931_a0-pure.cl b/OpenCL/m22931_a0-pure.cl index 55e25a747..25fcc6d13 100644 --- a/OpenCL/m22931_a0-pure.cl +++ b/OpenCL/m22931_a0-pure.cl @@ -26,7 +26,7 @@ typedef struct pem } pem_t; -KERNEL_FQ void HC_ATTR_SEQ m22931_mxx (KERN_ATTR_RULES_ESALT (pem_t)) +KERNEL_FQ KERNEL_FA void m22931_mxx (KERN_ATTR_RULES_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -237,7 +237,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22931_mxx (KERN_ATTR_RULES_ESALT (pem_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m22931_sxx (KERN_ATTR_RULES_ESALT (pem_t)) +KERNEL_FQ KERNEL_FA void m22931_sxx (KERN_ATTR_RULES_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22931_a1-pure.cl b/OpenCL/m22931_a1-pure.cl index 8063d2c94..549dc49e6 100644 --- a/OpenCL/m22931_a1-pure.cl +++ b/OpenCL/m22931_a1-pure.cl @@ -24,7 +24,7 @@ typedef struct pem } pem_t; -KERNEL_FQ void HC_ATTR_SEQ m22931_mxx (KERN_ATTR_ESALT (pem_t)) +KERNEL_FQ KERNEL_FA void m22931_mxx (KERN_ATTR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -231,7 +231,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22931_mxx (KERN_ATTR_ESALT (pem_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m22931_sxx (KERN_ATTR_ESALT (pem_t)) +KERNEL_FQ KERNEL_FA void m22931_sxx (KERN_ATTR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22931_a3-pure.cl b/OpenCL/m22931_a3-pure.cl index 085b54240..21ccd1ee3 100644 --- a/OpenCL/m22931_a3-pure.cl +++ b/OpenCL/m22931_a3-pure.cl @@ -24,7 +24,7 @@ typedef struct pem } pem_t; -KERNEL_FQ void HC_ATTR_SEQ m22931_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) +KERNEL_FQ KERNEL_FA void m22931_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -250,7 +250,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22931_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m22931_sxx (KERN_ATTR_VECTOR_ESALT (pem_t)) +KERNEL_FQ KERNEL_FA void m22931_sxx (KERN_ATTR_VECTOR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22941_a0-pure.cl b/OpenCL/m22941_a0-pure.cl index 463bb5000..791727f95 100644 --- a/OpenCL/m22941_a0-pure.cl +++ b/OpenCL/m22941_a0-pure.cl @@ -26,7 +26,7 @@ typedef struct pem } pem_t; -KERNEL_FQ void HC_ATTR_SEQ m22941_mxx (KERN_ATTR_RULES_ESALT (pem_t)) +KERNEL_FQ KERNEL_FA void m22941_mxx (KERN_ATTR_RULES_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -257,7 +257,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22941_mxx (KERN_ATTR_RULES_ESALT (pem_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m22941_sxx (KERN_ATTR_RULES_ESALT (pem_t)) +KERNEL_FQ KERNEL_FA void m22941_sxx (KERN_ATTR_RULES_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22941_a1-pure.cl b/OpenCL/m22941_a1-pure.cl index 2800377cd..4826f2a3d 100644 --- a/OpenCL/m22941_a1-pure.cl +++ b/OpenCL/m22941_a1-pure.cl @@ -24,7 +24,7 @@ typedef struct pem } pem_t; -KERNEL_FQ void HC_ATTR_SEQ m22941_mxx (KERN_ATTR_ESALT (pem_t)) +KERNEL_FQ KERNEL_FA void m22941_mxx (KERN_ATTR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -253,7 +253,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22941_mxx (KERN_ATTR_ESALT (pem_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m22941_sxx (KERN_ATTR_ESALT (pem_t)) +KERNEL_FQ KERNEL_FA void m22941_sxx (KERN_ATTR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22941_a3-pure.cl b/OpenCL/m22941_a3-pure.cl index 9706b5a5f..799552d97 100644 --- a/OpenCL/m22941_a3-pure.cl +++ b/OpenCL/m22941_a3-pure.cl @@ -24,7 +24,7 @@ typedef struct pem } pem_t; -KERNEL_FQ void HC_ATTR_SEQ m22941_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) +KERNEL_FQ KERNEL_FA void m22941_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -270,7 +270,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22941_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m22941_sxx (KERN_ATTR_VECTOR_ESALT (pem_t)) +KERNEL_FQ KERNEL_FA void m22941_sxx (KERN_ATTR_VECTOR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22951_a0-pure.cl b/OpenCL/m22951_a0-pure.cl index 33cb26990..4b9821177 100644 --- a/OpenCL/m22951_a0-pure.cl +++ b/OpenCL/m22951_a0-pure.cl @@ -26,7 +26,7 @@ typedef struct pem } pem_t; -KERNEL_FQ void HC_ATTR_SEQ m22951_mxx (KERN_ATTR_RULES_ESALT (pem_t)) +KERNEL_FQ KERNEL_FA void m22951_mxx (KERN_ATTR_RULES_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -261,7 +261,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22951_mxx (KERN_ATTR_RULES_ESALT (pem_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m22951_sxx (KERN_ATTR_RULES_ESALT (pem_t)) +KERNEL_FQ KERNEL_FA void m22951_sxx (KERN_ATTR_RULES_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22951_a1-pure.cl b/OpenCL/m22951_a1-pure.cl index 2079aff3f..18f2b1fb5 100644 --- a/OpenCL/m22951_a1-pure.cl +++ b/OpenCL/m22951_a1-pure.cl @@ -24,7 +24,7 @@ typedef struct pem } pem_t; -KERNEL_FQ void HC_ATTR_SEQ m22951_mxx (KERN_ATTR_ESALT (pem_t)) +KERNEL_FQ KERNEL_FA void m22951_mxx (KERN_ATTR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -257,7 +257,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22951_mxx (KERN_ATTR_ESALT (pem_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m22951_sxx (KERN_ATTR_ESALT (pem_t)) +KERNEL_FQ KERNEL_FA void m22951_sxx (KERN_ATTR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m22951_a3-pure.cl b/OpenCL/m22951_a3-pure.cl index b5bead74c..01b06914f 100644 --- a/OpenCL/m22951_a3-pure.cl +++ b/OpenCL/m22951_a3-pure.cl @@ -24,7 +24,7 @@ typedef struct pem } pem_t; -KERNEL_FQ void HC_ATTR_SEQ m22951_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) +KERNEL_FQ KERNEL_FA void m22951_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -274,7 +274,7 @@ KERNEL_FQ void HC_ATTR_SEQ m22951_mxx (KERN_ATTR_VECTOR_ESALT (pem_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m22951_sxx (KERN_ATTR_VECTOR_ESALT (pem_t)) +KERNEL_FQ KERNEL_FA void m22951_sxx (KERN_ATTR_VECTOR_ESALT (pem_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m23001_a0-optimized.cl b/OpenCL/m23001_a0-optimized.cl index e5757d33c..33a896ec8 100644 --- a/OpenCL/m23001_a0-optimized.cl +++ b/OpenCL/m23001_a0-optimized.cl @@ -26,7 +26,7 @@ typedef struct securezip } securezip_t; -KERNEL_FQ void HC_ATTR_SEQ m23001_m04 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23001_m04 (KERN_ATTR_RULES_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -352,15 +352,15 @@ KERNEL_FQ void HC_ATTR_SEQ m23001_m04 (KERN_ATTR_RULES_ESALT (securezip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m23001_m08 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23001_m08 (KERN_ATTR_RULES_ESALT (securezip_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m23001_m16 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23001_m16 (KERN_ATTR_RULES_ESALT (securezip_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m23001_s04 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23001_s04 (KERN_ATTR_RULES_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -686,10 +686,10 @@ KERNEL_FQ void HC_ATTR_SEQ m23001_s04 (KERN_ATTR_RULES_ESALT (securezip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m23001_s08 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23001_s08 (KERN_ATTR_RULES_ESALT (securezip_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m23001_s16 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23001_s16 (KERN_ATTR_RULES_ESALT (securezip_t)) { } diff --git a/OpenCL/m23001_a0-pure.cl b/OpenCL/m23001_a0-pure.cl index af66056aa..08b2b4994 100644 --- a/OpenCL/m23001_a0-pure.cl +++ b/OpenCL/m23001_a0-pure.cl @@ -26,7 +26,7 @@ typedef struct securezip } securezip_t; -KERNEL_FQ void HC_ATTR_SEQ m23001_mxx (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23001_mxx (KERN_ATTR_RULES_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -218,7 +218,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23001_mxx (KERN_ATTR_RULES_ESALT (securezip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m23001_sxx (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23001_sxx (KERN_ATTR_RULES_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m23001_a1-optimized.cl b/OpenCL/m23001_a1-optimized.cl index c5e5e70fb..dc0663c0d 100644 --- a/OpenCL/m23001_a1-optimized.cl +++ b/OpenCL/m23001_a1-optimized.cl @@ -24,7 +24,7 @@ typedef struct securezip } securezip_t; -KERNEL_FQ void HC_ATTR_SEQ m23001_m04 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23001_m04 (KERN_ATTR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -408,15 +408,15 @@ KERNEL_FQ void HC_ATTR_SEQ m23001_m04 (KERN_ATTR_ESALT (securezip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m23001_m08 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23001_m08 (KERN_ATTR_ESALT (securezip_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m23001_m16 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23001_m16 (KERN_ATTR_ESALT (securezip_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m23001_s04 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23001_s04 (KERN_ATTR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -800,10 +800,10 @@ KERNEL_FQ void HC_ATTR_SEQ m23001_s04 (KERN_ATTR_ESALT (securezip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m23001_s08 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23001_s08 (KERN_ATTR_ESALT (securezip_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m23001_s16 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23001_s16 (KERN_ATTR_ESALT (securezip_t)) { } diff --git a/OpenCL/m23001_a1-pure.cl b/OpenCL/m23001_a1-pure.cl index 65457567d..99eeb98ae 100644 --- a/OpenCL/m23001_a1-pure.cl +++ b/OpenCL/m23001_a1-pure.cl @@ -24,7 +24,7 @@ typedef struct securezip } securezip_t; -KERNEL_FQ void HC_ATTR_SEQ m23001_mxx (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23001_mxx (KERN_ATTR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -214,7 +214,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23001_mxx (KERN_ATTR_ESALT (securezip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m23001_sxx (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23001_sxx (KERN_ATTR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m23001_a3-optimized.cl b/OpenCL/m23001_a3-optimized.cl index e0d22b5ce..e38d3bb0c 100644 --- a/OpenCL/m23001_a3-optimized.cl +++ b/OpenCL/m23001_a3-optimized.cl @@ -728,7 +728,7 @@ DECLSPEC void m23001s (SHM_TYPE u32a *s_te0, SHM_TYPE u32a *s_te1, SHM_TYPE u32a } } -KERNEL_FQ void HC_ATTR_SEQ m23001_m04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23001_m04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base @@ -819,7 +819,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23001_m04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) m23001m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m23001_m08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23001_m08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base @@ -910,7 +910,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23001_m08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) m23001m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m23001_m16 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23001_m16 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base @@ -1001,7 +1001,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23001_m16 (KERN_ATTR_VECTOR_ESALT (securezip_t)) m23001m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m23001_s04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23001_s04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base @@ -1092,7 +1092,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23001_s04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) m23001s (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m23001_s08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23001_s08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base @@ -1183,7 +1183,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23001_s08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) m23001s (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m23001_s16 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23001_s16 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base diff --git a/OpenCL/m23001_a3-pure.cl b/OpenCL/m23001_a3-pure.cl index 4921f3429..2b0659135 100644 --- a/OpenCL/m23001_a3-pure.cl +++ b/OpenCL/m23001_a3-pure.cl @@ -24,7 +24,7 @@ typedef struct securezip } securezip_t; -KERNEL_FQ void HC_ATTR_SEQ m23001_mxx (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23001_mxx (KERN_ATTR_VECTOR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -227,7 +227,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23001_mxx (KERN_ATTR_VECTOR_ESALT (securezip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m23001_sxx (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23001_sxx (KERN_ATTR_VECTOR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m23002_a0-optimized.cl b/OpenCL/m23002_a0-optimized.cl index 0f9c25051..30e239339 100644 --- a/OpenCL/m23002_a0-optimized.cl +++ b/OpenCL/m23002_a0-optimized.cl @@ -26,7 +26,7 @@ typedef struct securezip } securezip_t; -KERNEL_FQ void HC_ATTR_SEQ m23002_m04 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23002_m04 (KERN_ATTR_RULES_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -405,15 +405,15 @@ KERNEL_FQ void HC_ATTR_SEQ m23002_m04 (KERN_ATTR_RULES_ESALT (securezip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m23002_m08 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23002_m08 (KERN_ATTR_RULES_ESALT (securezip_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m23002_m16 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23002_m16 (KERN_ATTR_RULES_ESALT (securezip_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m23002_s04 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23002_s04 (KERN_ATTR_RULES_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -792,10 +792,10 @@ KERNEL_FQ void HC_ATTR_SEQ m23002_s04 (KERN_ATTR_RULES_ESALT (securezip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m23002_s08 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23002_s08 (KERN_ATTR_RULES_ESALT (securezip_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m23002_s16 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23002_s16 (KERN_ATTR_RULES_ESALT (securezip_t)) { } diff --git a/OpenCL/m23002_a0-pure.cl b/OpenCL/m23002_a0-pure.cl index dc3aaa285..d49f1badc 100644 --- a/OpenCL/m23002_a0-pure.cl +++ b/OpenCL/m23002_a0-pure.cl @@ -26,7 +26,7 @@ typedef struct securezip } securezip_t; -KERNEL_FQ void HC_ATTR_SEQ m23002_mxx (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23002_mxx (KERN_ATTR_RULES_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -271,7 +271,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23002_mxx (KERN_ATTR_RULES_ESALT (securezip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m23002_sxx (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23002_sxx (KERN_ATTR_RULES_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m23002_a1-optimized.cl b/OpenCL/m23002_a1-optimized.cl index 61bb6e749..4cad747f0 100644 --- a/OpenCL/m23002_a1-optimized.cl +++ b/OpenCL/m23002_a1-optimized.cl @@ -24,7 +24,7 @@ typedef struct securezip } securezip_t; -KERNEL_FQ void HC_ATTR_SEQ m23002_m04 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23002_m04 (KERN_ATTR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -461,15 +461,15 @@ KERNEL_FQ void HC_ATTR_SEQ m23002_m04 (KERN_ATTR_ESALT (securezip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m23002_m08 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23002_m08 (KERN_ATTR_ESALT (securezip_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m23002_m16 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23002_m16 (KERN_ATTR_ESALT (securezip_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m23002_s04 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23002_s04 (KERN_ATTR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -906,10 +906,10 @@ KERNEL_FQ void HC_ATTR_SEQ m23002_s04 (KERN_ATTR_ESALT (securezip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m23002_s08 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23002_s08 (KERN_ATTR_ESALT (securezip_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m23002_s16 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23002_s16 (KERN_ATTR_ESALT (securezip_t)) { } diff --git a/OpenCL/m23002_a1-pure.cl b/OpenCL/m23002_a1-pure.cl index 38509ae29..acab135e1 100644 --- a/OpenCL/m23002_a1-pure.cl +++ b/OpenCL/m23002_a1-pure.cl @@ -24,7 +24,7 @@ typedef struct securezip } securezip_t; -KERNEL_FQ void HC_ATTR_SEQ m23002_mxx (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23002_mxx (KERN_ATTR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -267,7 +267,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23002_mxx (KERN_ATTR_ESALT (securezip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m23002_sxx (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23002_sxx (KERN_ATTR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m23002_a3-optimized.cl b/OpenCL/m23002_a3-optimized.cl index ddc15e43e..ddf04dcc0 100644 --- a/OpenCL/m23002_a3-optimized.cl +++ b/OpenCL/m23002_a3-optimized.cl @@ -834,7 +834,7 @@ DECLSPEC void m23002s (SHM_TYPE u32a *s_te0, SHM_TYPE u32a *s_te1, SHM_TYPE u32a } } -KERNEL_FQ void HC_ATTR_SEQ m23002_m04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23002_m04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base @@ -925,7 +925,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23002_m04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) m23002m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m23002_m08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23002_m08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base @@ -1016,7 +1016,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23002_m08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) m23002m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m23002_m16 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23002_m16 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base @@ -1107,7 +1107,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23002_m16 (KERN_ATTR_VECTOR_ESALT (securezip_t)) m23002m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m23002_s04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23002_s04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base @@ -1198,7 +1198,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23002_s04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) m23002s (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m23002_s08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23002_s08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base @@ -1289,7 +1289,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23002_s08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) m23002s (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m23002_s16 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23002_s16 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base diff --git a/OpenCL/m23002_a3-pure.cl b/OpenCL/m23002_a3-pure.cl index dbb73d19f..4c1399268 100644 --- a/OpenCL/m23002_a3-pure.cl +++ b/OpenCL/m23002_a3-pure.cl @@ -24,7 +24,7 @@ typedef struct securezip } securezip_t; -KERNEL_FQ void HC_ATTR_SEQ m23002_mxx (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23002_mxx (KERN_ATTR_VECTOR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -280,7 +280,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23002_mxx (KERN_ATTR_VECTOR_ESALT (securezip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m23002_sxx (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23002_sxx (KERN_ATTR_VECTOR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m23003_a0-optimized.cl b/OpenCL/m23003_a0-optimized.cl index 7f1485308..508372f1e 100644 --- a/OpenCL/m23003_a0-optimized.cl +++ b/OpenCL/m23003_a0-optimized.cl @@ -26,7 +26,7 @@ typedef struct securezip } securezip_t; -KERNEL_FQ void HC_ATTR_SEQ m23003_m04 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23003_m04 (KERN_ATTR_RULES_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -407,15 +407,15 @@ KERNEL_FQ void HC_ATTR_SEQ m23003_m04 (KERN_ATTR_RULES_ESALT (securezip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m23003_m08 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23003_m08 (KERN_ATTR_RULES_ESALT (securezip_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m23003_m16 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23003_m16 (KERN_ATTR_RULES_ESALT (securezip_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m23003_s04 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23003_s04 (KERN_ATTR_RULES_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -796,10 +796,10 @@ KERNEL_FQ void HC_ATTR_SEQ m23003_s04 (KERN_ATTR_RULES_ESALT (securezip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m23003_s08 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23003_s08 (KERN_ATTR_RULES_ESALT (securezip_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m23003_s16 (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23003_s16 (KERN_ATTR_RULES_ESALT (securezip_t)) { } diff --git a/OpenCL/m23003_a0-pure.cl b/OpenCL/m23003_a0-pure.cl index ad94c169e..ed121ce49 100644 --- a/OpenCL/m23003_a0-pure.cl +++ b/OpenCL/m23003_a0-pure.cl @@ -26,7 +26,7 @@ typedef struct securezip } securezip_t; -KERNEL_FQ void HC_ATTR_SEQ m23003_mxx (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23003_mxx (KERN_ATTR_RULES_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -273,7 +273,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23003_mxx (KERN_ATTR_RULES_ESALT (securezip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m23003_sxx (KERN_ATTR_RULES_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23003_sxx (KERN_ATTR_RULES_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m23003_a1-optimized.cl b/OpenCL/m23003_a1-optimized.cl index a8a43040c..c5637a0cb 100644 --- a/OpenCL/m23003_a1-optimized.cl +++ b/OpenCL/m23003_a1-optimized.cl @@ -24,7 +24,7 @@ typedef struct securezip } securezip_t; -KERNEL_FQ void HC_ATTR_SEQ m23003_m04 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23003_m04 (KERN_ATTR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -463,15 +463,15 @@ KERNEL_FQ void HC_ATTR_SEQ m23003_m04 (KERN_ATTR_ESALT (securezip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m23003_m08 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23003_m08 (KERN_ATTR_ESALT (securezip_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m23003_m16 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23003_m16 (KERN_ATTR_ESALT (securezip_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m23003_s04 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23003_s04 (KERN_ATTR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -910,10 +910,10 @@ KERNEL_FQ void HC_ATTR_SEQ m23003_s04 (KERN_ATTR_ESALT (securezip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m23003_s08 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23003_s08 (KERN_ATTR_ESALT (securezip_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m23003_s16 (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23003_s16 (KERN_ATTR_ESALT (securezip_t)) { } diff --git a/OpenCL/m23003_a1-pure.cl b/OpenCL/m23003_a1-pure.cl index 16a4b6e59..cf2196505 100644 --- a/OpenCL/m23003_a1-pure.cl +++ b/OpenCL/m23003_a1-pure.cl @@ -24,7 +24,7 @@ typedef struct securezip } securezip_t; -KERNEL_FQ void HC_ATTR_SEQ m23003_mxx (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23003_mxx (KERN_ATTR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -269,7 +269,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23003_mxx (KERN_ATTR_ESALT (securezip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m23003_sxx (KERN_ATTR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23003_sxx (KERN_ATTR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m23003_a3-optimized.cl b/OpenCL/m23003_a3-optimized.cl index ef1b334c6..b42f99255 100644 --- a/OpenCL/m23003_a3-optimized.cl +++ b/OpenCL/m23003_a3-optimized.cl @@ -838,7 +838,7 @@ DECLSPEC void m23003s (SHM_TYPE u32a *s_te0, SHM_TYPE u32a *s_te1, SHM_TYPE u32a } } -KERNEL_FQ void HC_ATTR_SEQ m23003_m04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23003_m04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base @@ -929,7 +929,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23003_m04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) m23003m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m23003_m08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23003_m08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base @@ -1020,7 +1020,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23003_m08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) m23003m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m23003_m16 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23003_m16 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base @@ -1111,7 +1111,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23003_m16 (KERN_ATTR_VECTOR_ESALT (securezip_t)) m23003m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m23003_s04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23003_s04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base @@ -1202,7 +1202,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23003_s04 (KERN_ATTR_VECTOR_ESALT (securezip_t)) m23003s (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m23003_s08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23003_s08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base @@ -1293,7 +1293,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23003_s08 (KERN_ATTR_VECTOR_ESALT (securezip_t)) m23003s (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m23003_s16 (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23003_s16 (KERN_ATTR_VECTOR_ESALT (securezip_t)) { /** * base diff --git a/OpenCL/m23003_a3-pure.cl b/OpenCL/m23003_a3-pure.cl index 5519c32ad..0ef8191af 100644 --- a/OpenCL/m23003_a3-pure.cl +++ b/OpenCL/m23003_a3-pure.cl @@ -24,7 +24,7 @@ typedef struct securezip } securezip_t; -KERNEL_FQ void HC_ATTR_SEQ m23003_mxx (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23003_mxx (KERN_ATTR_VECTOR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -282,7 +282,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23003_mxx (KERN_ATTR_VECTOR_ESALT (securezip_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m23003_sxx (KERN_ATTR_VECTOR_ESALT (securezip_t)) +KERNEL_FQ KERNEL_FA void m23003_sxx (KERN_ATTR_VECTOR_ESALT (securezip_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m23100-pure.cl b/OpenCL/m23100-pure.cl index 189460f82..72944c449 100644 --- a/OpenCL/m23100-pure.cl +++ b/OpenCL/m23100-pure.cl @@ -68,7 +68,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m23100_init (KERN_ATTR_TMPS_ESALT (keychain_tmp_t, keychain_t)) +KERNEL_FQ KERNEL_FA void m23100_init (KERN_ATTR_TMPS_ESALT (keychain_tmp_t, keychain_t)) { /** * base @@ -140,7 +140,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23100_init (KERN_ATTR_TMPS_ESALT (keychain_tmp_t, ke } } -KERNEL_FQ void HC_ATTR_SEQ m23100_loop (KERN_ATTR_TMPS_ESALT (keychain_tmp_t, keychain_t)) +KERNEL_FQ KERNEL_FA void m23100_loop (KERN_ATTR_TMPS_ESALT (keychain_tmp_t, keychain_t)) { const u64 gid = get_global_id (0); @@ -225,7 +225,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23100_loop (KERN_ATTR_TMPS_ESALT (keychain_tmp_t, ke } } -KERNEL_FQ void HC_ATTR_SEQ m23100_comp (KERN_ATTR_TMPS_ESALT (keychain_tmp_t, keychain_t)) +KERNEL_FQ KERNEL_FA void m23100_comp (KERN_ATTR_TMPS_ESALT (keychain_tmp_t, keychain_t)) { /** * base diff --git a/OpenCL/m23200-pure.cl b/OpenCL/m23200-pure.cl index 2ee8f5d90..21c8c1e5a 100644 --- a/OpenCL/m23200-pure.cl +++ b/OpenCL/m23200-pure.cl @@ -63,7 +63,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m23200_init (KERN_ATTR_TMPS (xmpp_tmp_t)) +KERNEL_FQ KERNEL_FA void m23200_init (KERN_ATTR_TMPS (xmpp_tmp_t)) { /** * base @@ -135,7 +135,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23200_init (KERN_ATTR_TMPS (xmpp_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m23200_loop (KERN_ATTR_TMPS (xmpp_tmp_t)) +KERNEL_FQ KERNEL_FA void m23200_loop (KERN_ATTR_TMPS (xmpp_tmp_t)) { const u64 gid = get_global_id (0); @@ -220,7 +220,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23200_loop (KERN_ATTR_TMPS (xmpp_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m23200_comp (KERN_ATTR_TMPS (xmpp_tmp_t)) +KERNEL_FQ KERNEL_FA void m23200_comp (KERN_ATTR_TMPS (xmpp_tmp_t)) { /** * base diff --git a/OpenCL/m23300-pure.cl b/OpenCL/m23300-pure.cl index 706017e57..385fdd6d1 100644 --- a/OpenCL/m23300-pure.cl +++ b/OpenCL/m23300-pure.cl @@ -69,7 +69,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m23300_init (KERN_ATTR_TMPS_ESALT (iwork_tmp_t, iwork_t)) +KERNEL_FQ KERNEL_FA void m23300_init (KERN_ATTR_TMPS_ESALT (iwork_tmp_t, iwork_t)) { /** * base @@ -158,7 +158,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23300_init (KERN_ATTR_TMPS_ESALT (iwork_tmp_t, iwork } } -KERNEL_FQ void HC_ATTR_SEQ m23300_loop (KERN_ATTR_TMPS_ESALT (iwork_tmp_t, iwork_t)) +KERNEL_FQ KERNEL_FA void m23300_loop (KERN_ATTR_TMPS_ESALT (iwork_tmp_t, iwork_t)) { const u64 gid = get_global_id (0); @@ -243,7 +243,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23300_loop (KERN_ATTR_TMPS_ESALT (iwork_tmp_t, iwork } } -KERNEL_FQ void HC_ATTR_SEQ m23300_comp (KERN_ATTR_TMPS_ESALT (iwork_tmp_t, iwork_t)) +KERNEL_FQ KERNEL_FA void m23300_comp (KERN_ATTR_TMPS_ESALT (iwork_tmp_t, iwork_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m23400-pure.cl b/OpenCL/m23400-pure.cl index 9690388c7..6a0ae1f11 100644 --- a/OpenCL/m23400-pure.cl +++ b/OpenCL/m23400-pure.cl @@ -69,7 +69,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m23400_init (KERN_ATTR_TMPS (bitwarden_tmp_t)) +KERNEL_FQ KERNEL_FA void m23400_init (KERN_ATTR_TMPS (bitwarden_tmp_t)) { /** * base @@ -150,7 +150,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23400_init (KERN_ATTR_TMPS (bitwarden_tmp_t)) tmps[gid].out[7] = tmps[gid].dgst[7]; } -KERNEL_FQ void HC_ATTR_SEQ m23400_loop (KERN_ATTR_TMPS (bitwarden_tmp_t)) +KERNEL_FQ KERNEL_FA void m23400_loop (KERN_ATTR_TMPS (bitwarden_tmp_t)) { const u64 gid = get_global_id (0); @@ -253,7 +253,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23400_loop (KERN_ATTR_TMPS (bitwarden_tmp_t)) unpackv (tmps, out, gid, 7, out[7]); } -KERNEL_FQ void HC_ATTR_SEQ m23400_init2 (KERN_ATTR_TMPS (bitwarden_tmp_t)) +KERNEL_FQ KERNEL_FA void m23400_init2 (KERN_ATTR_TMPS (bitwarden_tmp_t)) { /** * base @@ -345,7 +345,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23400_init2 (KERN_ATTR_TMPS (bitwarden_tmp_t)) tmps[gid].out[7] = tmps[gid].dgst[7]; } -KERNEL_FQ void HC_ATTR_SEQ m23400_loop2 (KERN_ATTR_TMPS (bitwarden_tmp_t)) +KERNEL_FQ KERNEL_FA void m23400_loop2 (KERN_ATTR_TMPS (bitwarden_tmp_t)) { const u64 gid = get_global_id (0); @@ -448,7 +448,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23400_loop2 (KERN_ATTR_TMPS (bitwarden_tmp_t)) unpackv (tmps, out, gid, 7, out[7]); } -KERNEL_FQ void HC_ATTR_SEQ m23400_comp (KERN_ATTR_TMPS (bitwarden_tmp_t)) +KERNEL_FQ KERNEL_FA void m23400_comp (KERN_ATTR_TMPS (bitwarden_tmp_t)) { /** * base diff --git a/OpenCL/m23500-pure.cl b/OpenCL/m23500-pure.cl index 5847d5351..e4c1a3d10 100644 --- a/OpenCL/m23500-pure.cl +++ b/OpenCL/m23500-pure.cl @@ -93,7 +93,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void HC_ATTR_SEQ m23500_init (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) +KERNEL_FQ KERNEL_FA void m23500_init (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) { /** * base @@ -197,7 +197,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23500_init (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, ax } } -KERNEL_FQ void HC_ATTR_SEQ m23500_loop (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) +KERNEL_FQ KERNEL_FA void m23500_loop (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) { const u64 gid = get_global_id (0); @@ -323,7 +323,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23500_loop (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, ax } } -KERNEL_FQ void HC_ATTR_SEQ m23500_init2 (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) +KERNEL_FQ KERNEL_FA void m23500_init2 (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) { /** * base @@ -377,7 +377,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23500_init2 (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, a } } -KERNEL_FQ void HC_ATTR_SEQ m23500_loop2 (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) +KERNEL_FQ KERNEL_FA void m23500_loop2 (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) { /** * base @@ -498,7 +498,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23500_loop2 (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, a } } -KERNEL_FQ void HC_ATTR_SEQ m23500_comp (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) +KERNEL_FQ KERNEL_FA void m23500_comp (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) { /** * base diff --git a/OpenCL/m23600-pure.cl b/OpenCL/m23600-pure.cl index 248c13510..a1258681b 100644 --- a/OpenCL/m23600-pure.cl +++ b/OpenCL/m23600-pure.cl @@ -93,7 +93,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void HC_ATTR_SEQ m23600_init (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) +KERNEL_FQ KERNEL_FA void m23600_init (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) { /** * base @@ -197,7 +197,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23600_init (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, ax } } -KERNEL_FQ void HC_ATTR_SEQ m23600_loop (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) +KERNEL_FQ KERNEL_FA void m23600_loop (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) { const u64 gid = get_global_id (0); @@ -323,7 +323,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23600_loop (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, ax } } -KERNEL_FQ void HC_ATTR_SEQ m23600_init2 (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) +KERNEL_FQ KERNEL_FA void m23600_init2 (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) { /** * base @@ -389,7 +389,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23600_init2 (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, a } } -KERNEL_FQ void HC_ATTR_SEQ m23600_loop2 (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) +KERNEL_FQ KERNEL_FA void m23600_loop2 (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) { /** * base @@ -514,7 +514,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23600_loop2 (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, a } } -KERNEL_FQ void HC_ATTR_SEQ m23600_comp (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) +KERNEL_FQ KERNEL_FA void m23600_comp (KERN_ATTR_TMPS_ESALT (axcrypt2_tmp_t, axcrypt2_t)) { /** * base diff --git a/OpenCL/m23700-optimized.cl b/OpenCL/m23700-optimized.cl index 799cfe84f..ca5b565d0 100644 --- a/OpenCL/m23700-optimized.cl +++ b/OpenCL/m23700-optimized.cl @@ -137,7 +137,7 @@ DECLSPEC u32 round_crc32_16 (const u32 crc32, PRIVATE_AS const u32 *buf, const u return c; } -KERNEL_FQ void HC_ATTR_SEQ m23700_init (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) +KERNEL_FQ KERNEL_FA void m23700_init (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) { /** * base @@ -155,7 +155,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23700_init (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t } /* -KERNEL_FQ void HC_ATTR_SEQ m23700_loop (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) +KERNEL_FQ KERNEL_FA void m23700_loop (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) { const u64 gid = get_global_id (0); @@ -490,7 +490,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23700_loop (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t } */ -KERNEL_FQ void HC_ATTR_SEQ m23700_loop (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) +KERNEL_FQ KERNEL_FA void m23700_loop (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) { const u64 gid = get_global_id (0); @@ -679,7 +679,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23700_loop (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t tmps[gid].dgst[init_pos + 1][4] = dgst[4]; } -KERNEL_FQ void HC_ATTR_SEQ m23700_comp (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) +KERNEL_FQ KERNEL_FA void m23700_comp (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m23700-pure.cl b/OpenCL/m23700-pure.cl index 9093f6201..4e520a5cd 100644 --- a/OpenCL/m23700-pure.cl +++ b/OpenCL/m23700-pure.cl @@ -836,7 +836,7 @@ DECLSPEC void sha1_update_rar29 (PRIVATE_AS sha1_ctx_t *ctx, PRIVATE_AS u32 *w, } } -KERNEL_FQ void HC_ATTR_SEQ m23700_init (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) +KERNEL_FQ KERNEL_FA void m23700_init (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) { /** * base @@ -904,7 +904,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23700_init (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t tmps[gid].iv[3] = 0; } -KERNEL_FQ void HC_ATTR_SEQ m23700_loop (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) +KERNEL_FQ KERNEL_FA void m23700_loop (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) { const u64 gid = get_global_id (0); @@ -1020,7 +1020,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23700_loop (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t } } -KERNEL_FQ void HC_ATTR_SEQ m23700_comp (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) +KERNEL_FQ KERNEL_FA void m23700_comp (KERN_ATTR_TMPS_ESALT (rar3_tmp_t, rar3_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m23800-optimized.cl b/OpenCL/m23800-optimized.cl index ce1e60a1a..5551cf0cd 100644 --- a/OpenCL/m23800-optimized.cl +++ b/OpenCL/m23800-optimized.cl @@ -50,7 +50,7 @@ typedef struct rar3_hook } rar3_hook_t; -KERNEL_FQ void HC_ATTR_SEQ m23800_init (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) +KERNEL_FQ KERNEL_FA void m23800_init (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) { /** * base @@ -67,7 +67,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23800_init (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, tmps[gid].dgst[0][4] = SHA1M_E; } -KERNEL_FQ void HC_ATTR_SEQ m23800_loop (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) +KERNEL_FQ KERNEL_FA void m23800_loop (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) { const u64 gid = get_global_id (0); @@ -256,7 +256,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23800_loop (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, tmps[gid].dgst[init_pos + 1][4] = dgst[4]; } -KERNEL_FQ void HC_ATTR_SEQ m23800_hook23 (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) +KERNEL_FQ KERNEL_FA void m23800_hook23 (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -487,7 +487,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23800_hook23 (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t hooks[gid].first_block_decrypted[3] = hc_swap32_S (out[3]); } -KERNEL_FQ void HC_ATTR_SEQ m23800_comp (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) +KERNEL_FQ KERNEL_FA void m23800_comp (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) { /** * base diff --git a/OpenCL/m23800-pure.cl b/OpenCL/m23800-pure.cl index 66b4d025e..71bd9a50f 100644 --- a/OpenCL/m23800-pure.cl +++ b/OpenCL/m23800-pure.cl @@ -749,7 +749,7 @@ DECLSPEC void sha1_update_rar29 (PRIVATE_AS sha1_ctx_t *ctx, PRIVATE_AS u32 *w, } } -KERNEL_FQ void HC_ATTR_SEQ m23800_init (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) +KERNEL_FQ KERNEL_FA void m23800_init (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) { /** * base @@ -817,7 +817,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23800_init (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, tmps[gid].iv[3] = 0; } -KERNEL_FQ void HC_ATTR_SEQ m23800_loop (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) +KERNEL_FQ KERNEL_FA void m23800_loop (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) { const u64 gid = get_global_id (0); @@ -933,7 +933,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23800_loop (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m23800_hook23 (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) +KERNEL_FQ KERNEL_FA void m23800_hook23 (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -1088,7 +1088,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23800_hook23 (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t hooks[gid].first_block_decrypted[3] = hc_swap32_S (out[3]); } -KERNEL_FQ void HC_ATTR_SEQ m23800_comp (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) +KERNEL_FQ KERNEL_FA void m23800_comp (KERN_ATTR_TMPS_HOOKS_ESALT (rar3_tmp_t, rar3_hook_t, rar3_t)) { /** * base diff --git a/OpenCL/m23900-pure.cl b/OpenCL/m23900-pure.cl index 4368f5cc9..415acbede 100644 --- a/OpenCL/m23900-pure.cl +++ b/OpenCL/m23900-pure.cl @@ -29,7 +29,7 @@ typedef struct bestcrypt } bestcrypt_t; -KERNEL_FQ void HC_ATTR_SEQ m23900_init (KERN_ATTR_TMPS_ESALT (bestcrypt_tmp_t, bestcrypt_t)) +KERNEL_FQ KERNEL_FA void m23900_init (KERN_ATTR_TMPS_ESALT (bestcrypt_tmp_t, bestcrypt_t)) { const u64 gid = get_global_id (0); @@ -103,7 +103,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23900_init (KERN_ATTR_TMPS_ESALT (bestcrypt_tmp_t, b } } -KERNEL_FQ void HC_ATTR_SEQ m23900_loop (KERN_ATTR_TMPS_ESALT (bestcrypt_tmp_t, bestcrypt_t)) +KERNEL_FQ KERNEL_FA void m23900_loop (KERN_ATTR_TMPS_ESALT (bestcrypt_tmp_t, bestcrypt_t)) { const u64 gid = get_global_id (0); @@ -251,7 +251,7 @@ KERNEL_FQ void HC_ATTR_SEQ m23900_loop (KERN_ATTR_TMPS_ESALT (bestcrypt_tmp_t, b tmps[gid].out[7] = digest[7]; } -KERNEL_FQ void HC_ATTR_SEQ m23900_comp (KERN_ATTR_TMPS_ESALT (bestcrypt_tmp_t, bestcrypt_t)) +KERNEL_FQ KERNEL_FA void m23900_comp (KERN_ATTR_TMPS_ESALT (bestcrypt_tmp_t, bestcrypt_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m24000-pure.cl b/OpenCL/m24000-pure.cl index fa22ebab4..a80607187 100644 --- a/OpenCL/m24000-pure.cl +++ b/OpenCL/m24000-pure.cl @@ -16,16 +16,6 @@ #include M2S(INCLUDE_PATH/inc_cipher_camellia.cl) #endif -typedef struct -{ - #ifndef SCRYPT_TMP_ELEM - #define SCRYPT_TMP_ELEM 1 - #endif - - u32 P[SCRYPT_TMP_ELEM]; - -} scrypt_tmp_t; - typedef struct bestcrypt_scrypt { u32 salt_buf[24]; @@ -165,22 +155,18 @@ DECLSPEC void keccak_transform_S (PRIVATE_AS u64 *st) } } -KERNEL_FQ void HC_ATTR_SEQ m24000_init (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, bestcrypt_scrypt_t)) +KERNEL_FQ KERNEL_FA void m24000_init (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, bestcrypt_scrypt_t)) { const u64 gid = get_global_id (0); if (gid >= GID_CNT) return; - u32 out[SCRYPT_CNT4]; + scrypt_pbkdf2_ggg (pws[gid].i, pws[gid].pw_len, salt_bufs[SALT_POS_HOST].salt_buf, salt_bufs[SALT_POS_HOST].salt_len, tmps[gid].in, SCRYPT_SZ); - scrypt_pbkdf2_gg (pws[gid].i, pws[gid].pw_len, salt_bufs[SALT_POS_HOST].salt_buf, salt_bufs[SALT_POS_HOST].salt_len, out, SCRYPT_SZ); - - scrypt_blockmix_in (out, SCRYPT_SZ); - - for (u32 i = 0; i < SCRYPT_CNT4; i++) tmps[gid].P[i] = out[i]; + scrypt_blockmix_in (tmps[gid].in, tmps[gid].out, SCRYPT_SZ); } -KERNEL_FQ void HC_ATTR_SEQ m24000_loop_prepare (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, bestcrypt_scrypt_t)) +KERNEL_FQ KERNEL_FA void m24000_loop_prepare (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, bestcrypt_scrypt_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -191,16 +177,12 @@ KERNEL_FQ void HC_ATTR_SEQ m24000_loop_prepare (KERN_ATTR_TMPS_ESALT (scrypt_tmp u32 X[STATE_CNT4]; - GLOBAL_AS u32 *P = tmps[gid].P + (SALT_REPEAT * STATE_CNT4); + GLOBAL_AS u32 *P = tmps[gid].out + (SALT_REPEAT * STATE_CNT4); - for (u32 z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - - scrypt_smix_init (X, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); - - for (u32 z = 0; z < STATE_CNT4; z++) P[z] = X[z]; + scrypt_smix_init (P, X, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); } -KERNEL_FQ void HC_ATTR_SEQ m24000_loop (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, bestcrypt_scrypt_t)) +KERNEL_FQ KERNEL_FA void m24000_loop (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, bestcrypt_scrypt_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -212,16 +194,12 @@ KERNEL_FQ void HC_ATTR_SEQ m24000_loop (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, best u32 X[STATE_CNT4]; u32 T[STATE_CNT4]; - GLOBAL_AS u32 *P = tmps[gid].P + (SALT_REPEAT * STATE_CNT4); + GLOBAL_AS u32 *P = tmps[gid].out + (SALT_REPEAT * STATE_CNT4); - for (u32 z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - - scrypt_smix_loop (X, T, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); - - for (u32 z = 0; z < STATE_CNT4; z++) P[z] = X[z]; + scrypt_smix_loop (P, X, T, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); } -KERNEL_FQ void HC_ATTR_SEQ m24000_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, bestcrypt_scrypt_t)) +KERNEL_FQ KERNEL_FA void m24000_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, bestcrypt_scrypt_t)) { /** * base @@ -283,15 +261,11 @@ KERNEL_FQ void HC_ATTR_SEQ m24000_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, best if (gid >= GID_CNT) return; - u32 x[SCRYPT_CNT4]; - - for (u32 i = 0; i < SCRYPT_CNT4; i++) x[i] = tmps[gid].P[i]; - - scrypt_blockmix_out (x, SCRYPT_SZ); + scrypt_blockmix_out (tmps[gid].out, tmps[gid].in, SCRYPT_SZ); u32 out[8]; - scrypt_pbkdf2_gp (pws[gid].i, pws[gid].pw_len, x, SCRYPT_SZ, out, 32); + scrypt_pbkdf2_ggp (pws[gid].i, pws[gid].pw_len, tmps[gid].in, SCRYPT_SZ, out, 32); u32 version = esalt_bufs[DIGESTS_OFFSET_HOST].version; diff --git a/OpenCL/m24100-pure.cl b/OpenCL/m24100-pure.cl index 06304c12d..79adf0f62 100644 --- a/OpenCL/m24100-pure.cl +++ b/OpenCL/m24100-pure.cl @@ -73,7 +73,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m24100_init (KERN_ATTR_TMPS_ESALT (mongodb_sha1_tmp_t, mongodb_sha1_t)) +KERNEL_FQ KERNEL_FA void m24100_init (KERN_ATTR_TMPS_ESALT (mongodb_sha1_tmp_t, mongodb_sha1_t)) { /** * modifier @@ -199,7 +199,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24100_init (KERN_ATTR_TMPS_ESALT (mongodb_sha1_tmp_t } } -KERNEL_FQ void HC_ATTR_SEQ m24100_loop (KERN_ATTR_TMPS_ESALT (mongodb_sha1_tmp_t, mongodb_sha1_t)) +KERNEL_FQ KERNEL_FA void m24100_loop (KERN_ATTR_TMPS_ESALT (mongodb_sha1_tmp_t, mongodb_sha1_t)) { const u64 gid = get_global_id (0); @@ -284,7 +284,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24100_loop (KERN_ATTR_TMPS_ESALT (mongodb_sha1_tmp_t } } -KERNEL_FQ void HC_ATTR_SEQ m24100_comp (KERN_ATTR_TMPS_ESALT (mongodb_sha1_tmp_t, mongodb_sha1_t)) +KERNEL_FQ KERNEL_FA void m24100_comp (KERN_ATTR_TMPS_ESALT (mongodb_sha1_tmp_t, mongodb_sha1_t)) { /** * base diff --git a/OpenCL/m24200-pure.cl b/OpenCL/m24200-pure.cl index 918b12890..a1ec3e140 100644 --- a/OpenCL/m24200-pure.cl +++ b/OpenCL/m24200-pure.cl @@ -78,7 +78,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m24200_init (KERN_ATTR_TMPS_ESALT (mongodb_sha256_tmp_t, mongodb_sha256_t)) +KERNEL_FQ KERNEL_FA void m24200_init (KERN_ATTR_TMPS_ESALT (mongodb_sha256_tmp_t, mongodb_sha256_t)) { /** * base @@ -162,7 +162,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24200_init (KERN_ATTR_TMPS_ESALT (mongodb_sha256_tmp } } -KERNEL_FQ void HC_ATTR_SEQ m24200_loop (KERN_ATTR_TMPS_ESALT (mongodb_sha256_tmp_t, mongodb_sha256_t)) +KERNEL_FQ KERNEL_FA void m24200_loop (KERN_ATTR_TMPS_ESALT (mongodb_sha256_tmp_t, mongodb_sha256_t)) { const u64 gid = get_global_id (0); @@ -268,7 +268,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24200_loop (KERN_ATTR_TMPS_ESALT (mongodb_sha256_tmp } } -KERNEL_FQ void HC_ATTR_SEQ m24200_comp (KERN_ATTR_TMPS_ESALT (mongodb_sha256_tmp_t, mongodb_sha256_t)) +KERNEL_FQ KERNEL_FA void m24200_comp (KERN_ATTR_TMPS_ESALT (mongodb_sha256_tmp_t, mongodb_sha256_t)) { /** * base diff --git a/OpenCL/m24300_a0-optimized.cl b/OpenCL/m24300_a0-optimized.cl index c07d38750..afb2e0179 100644 --- a/OpenCL/m24300_a0-optimized.cl +++ b/OpenCL/m24300_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m24300_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m24300_m04 (KERN_ATTR_RULES ()) { /** * base @@ -635,15 +635,15 @@ KERNEL_FQ void HC_ATTR_SEQ m24300_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m24300_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m24300_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m24300_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m24300_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m24300_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m24300_s04 (KERN_ATTR_RULES ()) { /** * base @@ -1263,10 +1263,10 @@ KERNEL_FQ void HC_ATTR_SEQ m24300_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m24300_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m24300_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m24300_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m24300_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m24300_a0-pure.cl b/OpenCL/m24300_a0-pure.cl index 8b5a9d24f..9fa7ba09e 100644 --- a/OpenCL/m24300_a0-pure.cl +++ b/OpenCL/m24300_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m24300_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m24300_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -142,7 +142,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24300_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m24300_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m24300_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m24300_a1-optimized.cl b/OpenCL/m24300_a1-optimized.cl index ef96f2340..27fece6e3 100644 --- a/OpenCL/m24300_a1-optimized.cl +++ b/OpenCL/m24300_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m24300_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24300_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -689,15 +689,15 @@ KERNEL_FQ void HC_ATTR_SEQ m24300_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m24300_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24300_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m24300_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24300_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m24300_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24300_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1372,10 +1372,10 @@ KERNEL_FQ void HC_ATTR_SEQ m24300_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m24300_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24300_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m24300_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24300_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m24300_a1-pure.cl b/OpenCL/m24300_a1-pure.cl index 5de3e967d..84f2cf3e7 100644 --- a/OpenCL/m24300_a1-pure.cl +++ b/OpenCL/m24300_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m24300_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24300_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -138,7 +138,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24300_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m24300_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24300_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m24300_a3-optimized.cl b/OpenCL/m24300_a3-optimized.cl index d7978686f..a3125ea93 100644 --- a/OpenCL/m24300_a3-optimized.cl +++ b/OpenCL/m24300_a3-optimized.cl @@ -1162,7 +1162,7 @@ DECLSPEC void m24300s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m24300_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24300_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -1232,7 +1232,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24300_m04 (KERN_ATTR_BASIC ()) m24300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m24300_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24300_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -1302,7 +1302,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24300_m08 (KERN_ATTR_BASIC ()) m24300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m24300_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24300_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -1372,7 +1372,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24300_m16 (KERN_ATTR_BASIC ()) m24300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m24300_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24300_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1442,7 +1442,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24300_s04 (KERN_ATTR_BASIC ()) m24300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m24300_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24300_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1512,7 +1512,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24300_s08 (KERN_ATTR_BASIC ()) m24300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m24300_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24300_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m24300_a3-pure.cl b/OpenCL/m24300_a3-pure.cl index 4aea2249c..fdd1da566 100644 --- a/OpenCL/m24300_a3-pure.cl +++ b/OpenCL/m24300_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8_le(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m24300_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m24300_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -162,7 +162,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24300_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m24300_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m24300_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m24410-pure.cl b/OpenCL/m24410-pure.cl index 474a648c1..7d19c4023 100644 --- a/OpenCL/m24410-pure.cl +++ b/OpenCL/m24410-pure.cl @@ -90,7 +90,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m24410_init (KERN_ATTR_TMPS_ESALT (pkcs_sha1_tmp_t, pkcs_t)) +KERNEL_FQ KERNEL_FA void m24410_init (KERN_ATTR_TMPS_ESALT (pkcs_sha1_tmp_t, pkcs_t)) { /** * base @@ -169,7 +169,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24410_init (KERN_ATTR_TMPS_ESALT (pkcs_sha1_tmp_t, p } } -KERNEL_FQ void HC_ATTR_SEQ m24410_loop (KERN_ATTR_TMPS_ESALT (pkcs_sha1_tmp_t, pkcs_t)) +KERNEL_FQ KERNEL_FA void m24410_loop (KERN_ATTR_TMPS_ESALT (pkcs_sha1_tmp_t, pkcs_t)) { const u64 gid = get_global_id (0); @@ -261,7 +261,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24410_loop (KERN_ATTR_TMPS_ESALT (pkcs_sha1_tmp_t, p } } -KERNEL_FQ void HC_ATTR_SEQ m24410_comp (KERN_ATTR_TMPS_ESALT (pkcs_sha1_tmp_t, pkcs_t)) +KERNEL_FQ KERNEL_FA void m24410_comp (KERN_ATTR_TMPS_ESALT (pkcs_sha1_tmp_t, pkcs_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m24420-pure.cl b/OpenCL/m24420-pure.cl index 5eb0140e0..613d03862 100644 --- a/OpenCL/m24420-pure.cl +++ b/OpenCL/m24420-pure.cl @@ -89,7 +89,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m24420_init (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) +KERNEL_FQ KERNEL_FA void m24420_init (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) { /** * base @@ -173,7 +173,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24420_init (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m24420_loop (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) +KERNEL_FQ KERNEL_FA void m24420_loop (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) { const u64 gid = get_global_id (0); @@ -279,7 +279,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24420_loop (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m24420_comp (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) +KERNEL_FQ KERNEL_FA void m24420_comp (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m24500-pure.cl b/OpenCL/m24500-pure.cl index 312778e36..6a926cccc 100644 --- a/OpenCL/m24500-pure.cl +++ b/OpenCL/m24500-pure.cl @@ -131,7 +131,7 @@ DECLSPEC void sha1_run (PRIVATE_AS u32 *w, PRIVATE_AS u32 *res) res[4] = digest[4]; } -KERNEL_FQ void HC_ATTR_SEQ m24500_init (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, telegram_t)) +KERNEL_FQ KERNEL_FA void m24500_init (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, telegram_t)) { /** * base @@ -266,7 +266,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24500_init (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, te } } -KERNEL_FQ void HC_ATTR_SEQ m24500_loop (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, telegram_t)) +KERNEL_FQ KERNEL_FA void m24500_loop (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, telegram_t)) { const u64 gid = get_global_id (0); @@ -392,7 +392,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24500_loop (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, te } } -KERNEL_FQ void HC_ATTR_SEQ m24500_comp (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, telegram_t)) +KERNEL_FQ KERNEL_FA void m24500_comp (KERN_ATTR_TMPS_ESALT (telegram_tmp_t, telegram_t)) { /** * base diff --git a/OpenCL/m24610-pure.cl b/OpenCL/m24610-pure.cl index ff0de9bc9..a21bff789 100644 --- a/OpenCL/m24610-pure.cl +++ b/OpenCL/m24610-pure.cl @@ -73,7 +73,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m24610_init (KERN_ATTR_TMPS_ESALT (sqlcipher_sha1_tmp_t, sqlcipher_t)) +KERNEL_FQ KERNEL_FA void m24610_init (KERN_ATTR_TMPS_ESALT (sqlcipher_sha1_tmp_t, sqlcipher_t)) { /** * base @@ -145,7 +145,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24610_init (KERN_ATTR_TMPS_ESALT (sqlcipher_sha1_tmp } } -KERNEL_FQ void HC_ATTR_SEQ m24610_loop (KERN_ATTR_TMPS_ESALT (sqlcipher_sha1_tmp_t, sqlcipher_t)) +KERNEL_FQ KERNEL_FA void m24610_loop (KERN_ATTR_TMPS_ESALT (sqlcipher_sha1_tmp_t, sqlcipher_t)) { const u64 gid = get_global_id (0); @@ -230,7 +230,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24610_loop (KERN_ATTR_TMPS_ESALT (sqlcipher_sha1_tmp } } -KERNEL_FQ void HC_ATTR_SEQ m24610_comp (KERN_ATTR_TMPS_ESALT (sqlcipher_sha1_tmp_t, sqlcipher_t)) +KERNEL_FQ KERNEL_FA void m24610_comp (KERN_ATTR_TMPS_ESALT (sqlcipher_sha1_tmp_t, sqlcipher_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m24620-pure.cl b/OpenCL/m24620-pure.cl index 3ecb175de..dd794ee87 100644 --- a/OpenCL/m24620-pure.cl +++ b/OpenCL/m24620-pure.cl @@ -79,7 +79,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m24620_init (KERN_ATTR_TMPS_ESALT (sqlcipher_sha256_tmp_t, sqlcipher_t)) +KERNEL_FQ KERNEL_FA void m24620_init (KERN_ATTR_TMPS_ESALT (sqlcipher_sha256_tmp_t, sqlcipher_t)) { /** * base @@ -163,7 +163,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24620_init (KERN_ATTR_TMPS_ESALT (sqlcipher_sha256_t } } -KERNEL_FQ void HC_ATTR_SEQ m24620_loop (KERN_ATTR_TMPS_ESALT (sqlcipher_sha256_tmp_t, sqlcipher_t)) +KERNEL_FQ KERNEL_FA void m24620_loop (KERN_ATTR_TMPS_ESALT (sqlcipher_sha256_tmp_t, sqlcipher_t)) { const u64 gid = get_global_id (0); @@ -269,7 +269,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24620_loop (KERN_ATTR_TMPS_ESALT (sqlcipher_sha256_t } } -KERNEL_FQ void HC_ATTR_SEQ m24620_comp (KERN_ATTR_TMPS_ESALT (sqlcipher_sha256_tmp_t, sqlcipher_t)) +KERNEL_FQ KERNEL_FA void m24620_comp (KERN_ATTR_TMPS_ESALT (sqlcipher_sha256_tmp_t, sqlcipher_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m24630-pure.cl b/OpenCL/m24630-pure.cl index d2d7b7f61..fc868004a 100644 --- a/OpenCL/m24630-pure.cl +++ b/OpenCL/m24630-pure.cl @@ -95,7 +95,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void HC_ATTR_SEQ m24630_init (KERN_ATTR_TMPS_ESALT (sqlcipher_sha512_tmp_t, sqlcipher_t)) +KERNEL_FQ KERNEL_FA void m24630_init (KERN_ATTR_TMPS_ESALT (sqlcipher_sha512_tmp_t, sqlcipher_t)) { /** * base @@ -199,7 +199,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24630_init (KERN_ATTR_TMPS_ESALT (sqlcipher_sha512_t } } -KERNEL_FQ void HC_ATTR_SEQ m24630_loop (KERN_ATTR_TMPS_ESALT (sqlcipher_sha512_tmp_t, sqlcipher_t)) +KERNEL_FQ KERNEL_FA void m24630_loop (KERN_ATTR_TMPS_ESALT (sqlcipher_sha512_tmp_t, sqlcipher_t)) { const u64 gid = get_global_id (0); @@ -325,7 +325,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24630_loop (KERN_ATTR_TMPS_ESALT (sqlcipher_sha512_t } } -KERNEL_FQ void HC_ATTR_SEQ m24630_comp (KERN_ATTR_TMPS_ESALT (sqlcipher_sha512_tmp_t, sqlcipher_t)) +KERNEL_FQ KERNEL_FA void m24630_comp (KERN_ATTR_TMPS_ESALT (sqlcipher_sha512_tmp_t, sqlcipher_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m24700_a0-optimized.cl b/OpenCL/m24700_a0-optimized.cl index f43c2f74a..107bd2c25 100644 --- a/OpenCL/m24700_a0-optimized.cl +++ b/OpenCL/m24700_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m24700_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m24700_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -240,15 +240,15 @@ KERNEL_FQ void HC_ATTR_SEQ m24700_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m24700_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m24700_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m24700_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m24700_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m24700_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m24700_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -487,10 +487,10 @@ KERNEL_FQ void HC_ATTR_SEQ m24700_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m24700_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m24700_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m24700_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m24700_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m24700_a0-pure.cl b/OpenCL/m24700_a0-pure.cl index ab5cd2f66..f714f31d4 100644 --- a/OpenCL/m24700_a0-pure.cl +++ b/OpenCL/m24700_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m24700_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m24700_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -73,7 +73,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24700_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m24700_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m24700_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m24700_a1-optimized.cl b/OpenCL/m24700_a1-optimized.cl index 364f6c947..e6938e04c 100644 --- a/OpenCL/m24700_a1-optimized.cl +++ b/OpenCL/m24700_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m24700_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24700_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -297,15 +297,15 @@ KERNEL_FQ void HC_ATTR_SEQ m24700_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m24700_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24700_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m24700_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24700_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m24700_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24700_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -603,10 +603,10 @@ KERNEL_FQ void HC_ATTR_SEQ m24700_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m24700_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24700_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m24700_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24700_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m24700_a1-pure.cl b/OpenCL/m24700_a1-pure.cl index 6413c850e..9e2edac7b 100644 --- a/OpenCL/m24700_a1-pure.cl +++ b/OpenCL/m24700_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m24700_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24700_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24700_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m24700_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24700_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m24700_a3-optimized.cl b/OpenCL/m24700_a3-optimized.cl index 4c98c19a2..1530b4ee0 100644 --- a/OpenCL/m24700_a3-optimized.cl +++ b/OpenCL/m24700_a3-optimized.cl @@ -473,7 +473,7 @@ DECLSPEC void m24700s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m24700_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24700_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -526,7 +526,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24700_m04 (KERN_ATTR_BASIC ()) m24700m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m24700_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24700_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -579,7 +579,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24700_m08 (KERN_ATTR_BASIC ()) m24700m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m24700_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24700_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -632,7 +632,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24700_m16 (KERN_ATTR_BASIC ()) m24700m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m24700_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24700_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -685,7 +685,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24700_s04 (KERN_ATTR_BASIC ()) m24700s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m24700_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24700_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -738,7 +738,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24700_s08 (KERN_ATTR_BASIC ()) m24700s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m24700_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24700_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m24700_a3-pure.cl b/OpenCL/m24700_a3-pure.cl index 1698b0a61..3becd9709 100644 --- a/OpenCL/m24700_a3-pure.cl +++ b/OpenCL/m24700_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m24700_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m24700_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -82,7 +82,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24700_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m24700_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m24700_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m24800_a0-optimized.cl b/OpenCL/m24800_a0-optimized.cl index 71fb8a20c..a7e2132a6 100644 --- a/OpenCL/m24800_a0-optimized.cl +++ b/OpenCL/m24800_a0-optimized.cl @@ -105,7 +105,7 @@ DECLSPEC void hmac_sha1_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_A sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m24800_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m24800_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -219,15 +219,15 @@ KERNEL_FQ void HC_ATTR_SEQ m24800_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m24800_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m24800_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m24800_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m24800_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m24800_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m24800_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -353,10 +353,10 @@ KERNEL_FQ void HC_ATTR_SEQ m24800_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m24800_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m24800_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m24800_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m24800_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m24800_a0-pure.cl b/OpenCL/m24800_a0-pure.cl index 7085425b3..2afaff370 100644 --- a/OpenCL/m24800_a0-pure.cl +++ b/OpenCL/m24800_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m24800_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m24800_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -72,7 +72,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24800_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m24800_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m24800_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m24800_a1-optimized.cl b/OpenCL/m24800_a1-optimized.cl index b58cef9f8..18d96b694 100644 --- a/OpenCL/m24800_a1-optimized.cl +++ b/OpenCL/m24800_a1-optimized.cl @@ -103,7 +103,7 @@ DECLSPEC void hmac_sha1_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE_A sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m24800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24800_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -269,15 +269,15 @@ KERNEL_FQ void HC_ATTR_SEQ m24800_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m24800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24800_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m24800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24800_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m24800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24800_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -455,10 +455,10 @@ KERNEL_FQ void HC_ATTR_SEQ m24800_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m24800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24800_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m24800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24800_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m24800_a1-pure.cl b/OpenCL/m24800_a1-pure.cl index 467c2a016..e427e4ef3 100644 --- a/OpenCL/m24800_a1-pure.cl +++ b/OpenCL/m24800_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m24800_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24800_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -95,7 +95,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24800_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m24800_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24800_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m24800_a3-optimized.cl b/OpenCL/m24800_a3-optimized.cl index 740c6bb07..adedf6a26 100644 --- a/OpenCL/m24800_a3-optimized.cl +++ b/OpenCL/m24800_a3-optimized.cl @@ -323,7 +323,7 @@ DECLSPEC void m24800s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m24800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24800_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -372,7 +372,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24800_m04 (KERN_ATTR_BASIC ()) m24800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m24800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24800_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -421,7 +421,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24800_m08 (KERN_ATTR_BASIC ()) m24800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m24800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24800_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -470,7 +470,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24800_m16 (KERN_ATTR_BASIC ()) m24800m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m24800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24800_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -519,7 +519,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24800_s04 (KERN_ATTR_BASIC ()) m24800s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m24800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24800_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -568,7 +568,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24800_s08 (KERN_ATTR_BASIC ()) m24800s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m24800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24800_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m24800_a3-pure.cl b/OpenCL/m24800_a3-pure.cl index b8b594a85..791eb85ca 100644 --- a/OpenCL/m24800_a3-pure.cl +++ b/OpenCL/m24800_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m24800_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m24800_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -81,7 +81,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24800_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m24800_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m24800_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m24900_a0-optimized.cl b/OpenCL/m24900_a0-optimized.cl index 6b8a7ec5f..0e69cb252 100644 --- a/OpenCL/m24900_a0-optimized.cl +++ b/OpenCL/m24900_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m24900_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m24900_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -162,15 +162,15 @@ KERNEL_FQ void HC_ATTR_SEQ m24900_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m24900_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m24900_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m24900_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m24900_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m24900_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m24900_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -328,10 +328,10 @@ KERNEL_FQ void HC_ATTR_SEQ m24900_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m24900_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m24900_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m24900_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m24900_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m24900_a1-optimized.cl b/OpenCL/m24900_a1-optimized.cl index 0e60859fc..b0315f681 100644 --- a/OpenCL/m24900_a1-optimized.cl +++ b/OpenCL/m24900_a1-optimized.cl @@ -15,7 +15,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m24900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24900_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -220,15 +220,15 @@ KERNEL_FQ void HC_ATTR_SEQ m24900_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m24900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24900_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m24900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24900_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m24900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24900_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -445,10 +445,10 @@ KERNEL_FQ void HC_ATTR_SEQ m24900_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m24900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24900_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m24900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24900_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m24900_a3-optimized.cl b/OpenCL/m24900_a3-optimized.cl index 12eacbc10..04bdbe539 100644 --- a/OpenCL/m24900_a3-optimized.cl +++ b/OpenCL/m24900_a3-optimized.cl @@ -310,7 +310,7 @@ DECLSPEC void m24900s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m24900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24900_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -359,7 +359,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24900_m04 (KERN_ATTR_BASIC ()) m24900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m24900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24900_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -408,7 +408,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24900_m08 (KERN_ATTR_BASIC ()) m24900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m24900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24900_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -457,7 +457,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24900_m16 (KERN_ATTR_BASIC ()) m24900m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m24900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24900_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -506,7 +506,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24900_s04 (KERN_ATTR_BASIC ()) m24900s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m24900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24900_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -555,7 +555,7 @@ KERNEL_FQ void HC_ATTR_SEQ m24900_s08 (KERN_ATTR_BASIC ()) m24900s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m24900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m24900_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m25000-pure.cl b/OpenCL/m25000-pure.cl index 06fb6a1d4..8efb6366c 100644 --- a/OpenCL/m25000-pure.cl +++ b/OpenCL/m25000-pure.cl @@ -59,7 +59,7 @@ typedef struct snmpv3 } snmpv3_t; -KERNEL_FQ void HC_ATTR_SEQ m25000_init (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, snmpv3_t)) +KERNEL_FQ KERNEL_FA void m25000_init (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, snmpv3_t)) { /** * modifier @@ -165,7 +165,7 @@ KERNEL_FQ void HC_ATTR_SEQ m25000_init (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, sn tmps[gid].h_sha1[4] = SHA1M_E; } -KERNEL_FQ void HC_ATTR_SEQ m25000_loop (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, snmpv3_t)) +KERNEL_FQ KERNEL_FA void m25000_loop (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, snmpv3_t)) { /** * base @@ -337,7 +337,7 @@ KERNEL_FQ void HC_ATTR_SEQ m25000_loop (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, sn tmps[gid].h_sha1[4] = h_sha1[4]; } -KERNEL_FQ void HC_ATTR_SEQ m25000_comp (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, snmpv3_t)) +KERNEL_FQ KERNEL_FA void m25000_comp (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, snmpv3_t)) { /** * modifier diff --git a/OpenCL/m25100-pure.cl b/OpenCL/m25100-pure.cl index 7447a4002..a8555530c 100644 --- a/OpenCL/m25100-pure.cl +++ b/OpenCL/m25100-pure.cl @@ -54,7 +54,7 @@ typedef struct snmpv3 } snmpv3_t; -KERNEL_FQ void HC_ATTR_SEQ m25100_init (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, snmpv3_t)) +KERNEL_FQ KERNEL_FA void m25100_init (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, snmpv3_t)) { /** * modifier @@ -131,7 +131,7 @@ KERNEL_FQ void HC_ATTR_SEQ m25100_init (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, sn tmps[gid].h[3] = MD5M_D; } -KERNEL_FQ void HC_ATTR_SEQ m25100_loop (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, snmpv3_t)) +KERNEL_FQ KERNEL_FA void m25100_loop (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, snmpv3_t)) { /** * base @@ -228,7 +228,7 @@ KERNEL_FQ void HC_ATTR_SEQ m25100_loop (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, sn tmps[gid].h[3] = h[3]; } -KERNEL_FQ void HC_ATTR_SEQ m25100_comp (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, snmpv3_t)) +KERNEL_FQ KERNEL_FA void m25100_comp (KERN_ATTR_TMPS_ESALT (hmac_md5_tmp_t, snmpv3_t)) { /** * modifier diff --git a/OpenCL/m25200-pure.cl b/OpenCL/m25200-pure.cl index 724d945ea..e4bcea075 100644 --- a/OpenCL/m25200-pure.cl +++ b/OpenCL/m25200-pure.cl @@ -54,7 +54,7 @@ typedef struct snmpv3 } snmpv3_t; -KERNEL_FQ void HC_ATTR_SEQ m25200_init (KERN_ATTR_TMPS_ESALT (hmac_sha1_tmp_t, snmpv3_t)) +KERNEL_FQ KERNEL_FA void m25200_init (KERN_ATTR_TMPS_ESALT (hmac_sha1_tmp_t, snmpv3_t)) { /** * modifier @@ -132,7 +132,7 @@ KERNEL_FQ void HC_ATTR_SEQ m25200_init (KERN_ATTR_TMPS_ESALT (hmac_sha1_tmp_t, s tmps[gid].h[4] = SHA1M_E; } -KERNEL_FQ void HC_ATTR_SEQ m25200_loop (KERN_ATTR_TMPS_ESALT (hmac_sha1_tmp_t, snmpv3_t)) +KERNEL_FQ KERNEL_FA void m25200_loop (KERN_ATTR_TMPS_ESALT (hmac_sha1_tmp_t, snmpv3_t)) { /** * base @@ -231,7 +231,7 @@ KERNEL_FQ void HC_ATTR_SEQ m25200_loop (KERN_ATTR_TMPS_ESALT (hmac_sha1_tmp_t, s tmps[gid].h[4] = h[4]; } -KERNEL_FQ void HC_ATTR_SEQ m25200_comp (KERN_ATTR_TMPS_ESALT (hmac_sha1_tmp_t, snmpv3_t)) +KERNEL_FQ KERNEL_FA void m25200_comp (KERN_ATTR_TMPS_ESALT (hmac_sha1_tmp_t, snmpv3_t)) { /** * modifier diff --git a/OpenCL/m25300-pure.cl b/OpenCL/m25300-pure.cl index 68185d6e6..04c2ca6f1 100644 --- a/OpenCL/m25300-pure.cl +++ b/OpenCL/m25300-pure.cl @@ -23,7 +23,7 @@ typedef struct office2016_tmp } office2016_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m25300_init (KERN_ATTR_TMPS (office2016_tmp_t)) +KERNEL_FQ KERNEL_FA void m25300_init (KERN_ATTR_TMPS (office2016_tmp_t)) { /** * base @@ -53,7 +53,7 @@ KERNEL_FQ void HC_ATTR_SEQ m25300_init (KERN_ATTR_TMPS (office2016_tmp_t)) tmps[gid].out[7] = ctx.h[7]; } -KERNEL_FQ void HC_ATTR_SEQ m25300_loop (KERN_ATTR_TMPS (office2016_tmp_t)) +KERNEL_FQ KERNEL_FA void m25300_loop (KERN_ATTR_TMPS (office2016_tmp_t)) { const u64 gid = get_global_id (0); @@ -163,7 +163,7 @@ KERNEL_FQ void HC_ATTR_SEQ m25300_loop (KERN_ATTR_TMPS (office2016_tmp_t)) unpack64v (tmps, out, gid, 7, t7); } -KERNEL_FQ void HC_ATTR_SEQ m25300_comp (KERN_ATTR_TMPS (office2016_tmp_t)) +KERNEL_FQ KERNEL_FA void m25300_comp (KERN_ATTR_TMPS (office2016_tmp_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m25400-pure.cl b/OpenCL/m25400-pure.cl index 138cf7ea0..ae10ebc42 100644 --- a/OpenCL/m25400-pure.cl +++ b/OpenCL/m25400-pure.cl @@ -49,7 +49,7 @@ typedef struct pdf14_tmp } pdf14_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m25400_init (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t)) +KERNEL_FQ KERNEL_FA void m25400_init (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t)) { /** * base @@ -191,7 +191,7 @@ KERNEL_FQ void HC_ATTR_SEQ m25400_init (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t tmps[gid].out[7] = 0; // we only need the size of out for the plaintext check } -KERNEL_FQ void HC_ATTR_SEQ m25400_loop (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t)) +KERNEL_FQ KERNEL_FA void m25400_loop (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t)) { /** * base @@ -315,7 +315,7 @@ KERNEL_FQ void HC_ATTR_SEQ m25400_loop (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t tmps[gid].digest[3] = digest[3]; } -KERNEL_FQ void HC_ATTR_SEQ m25400_comp (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t)) +KERNEL_FQ KERNEL_FA void m25400_comp (KERN_ATTR_TMPS_ESALT (pdf14_tmp_t, pdf_t)) { const u32 digest[4] = { diff --git a/OpenCL/m25500-pure.cl b/OpenCL/m25500-pure.cl index e5edf2777..9bb47f474 100644 --- a/OpenCL/m25500-pure.cl +++ b/OpenCL/m25500-pure.cl @@ -81,7 +81,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m25500_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) +KERNEL_FQ KERNEL_FA void m25500_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) { /** * base @@ -165,7 +165,7 @@ KERNEL_FQ void HC_ATTR_SEQ m25500_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m25500_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) +KERNEL_FQ KERNEL_FA void m25500_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) { const u64 gid = get_global_id (0); @@ -271,7 +271,7 @@ KERNEL_FQ void HC_ATTR_SEQ m25500_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m25500_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) +KERNEL_FQ KERNEL_FA void m25500_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -407,7 +407,7 @@ KERNEL_FQ void HC_ATTR_SEQ m25500_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_ /* Optimized GCM: No real speed benefit. For documentation purpose -KERNEL_FQ void HC_ATTR_SEQ m25500_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) +KERNEL_FQ KERNEL_FA void m25500_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m25600-pure.cl b/OpenCL/m25600-pure.cl index 278dab51d..80f9eb9d7 100644 --- a/OpenCL/m25600-pure.cl +++ b/OpenCL/m25600-pure.cl @@ -447,7 +447,7 @@ DECLSPEC u32 u16_bin_to_u32_hex (const u32 v) | ((v1 < 10) ? '0' + v1 : 'a' - 10 + v1) << 0; } -KERNEL_FQ void HC_ATTR_SEQ m25600_init (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m25600_init (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base @@ -686,7 +686,7 @@ KERNEL_FQ void HC_ATTR_SEQ m25600_init (KERN_ATTR_TMPS (bcrypt_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m25600_loop (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m25600_loop (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base @@ -889,7 +889,7 @@ KERNEL_FQ void HC_ATTR_SEQ m25600_loop (KERN_ATTR_TMPS (bcrypt_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m25600_comp (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m25600_comp (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base diff --git a/OpenCL/m25700_a0-optimized.cl b/OpenCL/m25700_a0-optimized.cl index 637d0f5b7..82d7e8924 100644 --- a/OpenCL/m25700_a0-optimized.cl +++ b/OpenCL/m25700_a0-optimized.cl @@ -51,7 +51,7 @@ DECLSPEC u32 MurmurHash (const u32 seed, PRIVATE_AS const u32 *w, const u32 pw_l return hash; } -KERNEL_FQ void HC_ATTR_SEQ m25700_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m25700_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -108,15 +108,15 @@ KERNEL_FQ void HC_ATTR_SEQ m25700_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m25700_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m25700_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m25700_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m25700_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m25700_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m25700_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -185,10 +185,10 @@ KERNEL_FQ void HC_ATTR_SEQ m25700_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m25700_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m25700_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m25700_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m25700_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m25700_a1-optimized.cl b/OpenCL/m25700_a1-optimized.cl index 4c76e77a8..163ed4741 100644 --- a/OpenCL/m25700_a1-optimized.cl +++ b/OpenCL/m25700_a1-optimized.cl @@ -50,7 +50,7 @@ DECLSPEC u32 MurmurHash (const u32 seed, PRIVATE_AS const u32 *w, const u32 pw_l return hash; } -KERNEL_FQ void HC_ATTR_SEQ m25700_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m25700_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -163,15 +163,15 @@ KERNEL_FQ void HC_ATTR_SEQ m25700_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m25700_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m25700_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m25700_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m25700_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m25700_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m25700_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -296,10 +296,10 @@ KERNEL_FQ void HC_ATTR_SEQ m25700_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m25700_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m25700_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m25700_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m25700_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m25700_a3-optimized.cl b/OpenCL/m25700_a3-optimized.cl index 4c749f701..6541c12a8 100644 --- a/OpenCL/m25700_a3-optimized.cl +++ b/OpenCL/m25700_a3-optimized.cl @@ -182,7 +182,7 @@ DECLSPEC void m25700s (PRIVATE_AS const u32 *data, const u32 pw_len, KERN_ATTR_F } } -KERNEL_FQ void HC_ATTR_SEQ m25700_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m25700_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -222,7 +222,7 @@ KERNEL_FQ void HC_ATTR_SEQ m25700_m04 (KERN_ATTR_VECTOR ()) m25700m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m25700_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m25700_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -262,7 +262,7 @@ KERNEL_FQ void HC_ATTR_SEQ m25700_m08 (KERN_ATTR_VECTOR ()) m25700m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m25700_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m25700_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -302,7 +302,7 @@ KERNEL_FQ void HC_ATTR_SEQ m25700_m16 (KERN_ATTR_VECTOR ()) m25700m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m25700_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m25700_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -342,7 +342,7 @@ KERNEL_FQ void HC_ATTR_SEQ m25700_s04 (KERN_ATTR_VECTOR ()) m25700s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m25700_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m25700_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -382,7 +382,7 @@ KERNEL_FQ void HC_ATTR_SEQ m25700_s08 (KERN_ATTR_VECTOR ()) m25700s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m25700_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m25700_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m25800-pure.cl b/OpenCL/m25800-pure.cl index b1407e5f3..9bfa5583e 100644 --- a/OpenCL/m25800-pure.cl +++ b/OpenCL/m25800-pure.cl @@ -443,7 +443,7 @@ DECLSPEC u32 u16_bin_to_u32_hex (const u32 v) | ((v1 < 10) ? '0' + v1 : 'a' - 10 + v1) << 0; } -KERNEL_FQ void HC_ATTR_SEQ m25800_init (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m25800_init (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base @@ -685,7 +685,7 @@ KERNEL_FQ void HC_ATTR_SEQ m25800_init (KERN_ATTR_TMPS (bcrypt_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m25800_loop (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m25800_loop (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base @@ -888,7 +888,7 @@ KERNEL_FQ void HC_ATTR_SEQ m25800_loop (KERN_ATTR_TMPS (bcrypt_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m25800_comp (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m25800_comp (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base diff --git a/OpenCL/m25900-pure.cl b/OpenCL/m25900-pure.cl index 2ab92c283..04b66242b 100644 --- a/OpenCL/m25900-pure.cl +++ b/OpenCL/m25900-pure.cl @@ -100,7 +100,7 @@ DECLSPEC void aes128_encrypt_cbc (PRIVATE_AS const u32 *aes_ks, PRIVATE_AS u32 * aes_iv[3] = out[3]; } -KERNEL_FQ void HC_ATTR_SEQ m25900_init (KERN_ATTR_TMPS (pbkdf2_sha256_tmp_t)) +KERNEL_FQ KERNEL_FA void m25900_init (KERN_ATTR_TMPS (pbkdf2_sha256_tmp_t)) { /** * base @@ -184,7 +184,7 @@ KERNEL_FQ void HC_ATTR_SEQ m25900_init (KERN_ATTR_TMPS (pbkdf2_sha256_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m25900_loop (KERN_ATTR_TMPS (pbkdf2_sha256_tmp_t)) +KERNEL_FQ KERNEL_FA void m25900_loop (KERN_ATTR_TMPS (pbkdf2_sha256_tmp_t)) { const u64 gid = get_global_id(0); @@ -290,7 +290,7 @@ KERNEL_FQ void HC_ATTR_SEQ m25900_loop (KERN_ATTR_TMPS (pbkdf2_sha256_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m25900_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, blocks_t)) +KERNEL_FQ KERNEL_FA void m25900_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, blocks_t)) { /** * base diff --git a/OpenCL/m26000_a0-pure.cl b/OpenCL/m26000_a0-pure.cl index 5fa521a29..e5eb380e7 100644 --- a/OpenCL/m26000_a0-pure.cl +++ b/OpenCL/m26000_a0-pure.cl @@ -23,7 +23,7 @@ typedef struct mozilla_3des } mozilla_3des_t; -KERNEL_FQ void HC_ATTR_SEQ m26000_mxx (KERN_ATTR_RULES_ESALT (mozilla_3des_t)) +KERNEL_FQ KERNEL_FA void m26000_mxx (KERN_ATTR_RULES_ESALT (mozilla_3des_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -365,7 +365,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26000_mxx (KERN_ATTR_RULES_ESALT (mozilla_3des_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m26000_sxx (KERN_ATTR_RULES_ESALT (mozilla_3des_t)) +KERNEL_FQ KERNEL_FA void m26000_sxx (KERN_ATTR_RULES_ESALT (mozilla_3des_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m26000_a1-pure.cl b/OpenCL/m26000_a1-pure.cl index cdaf5f254..5f178d8b5 100644 --- a/OpenCL/m26000_a1-pure.cl +++ b/OpenCL/m26000_a1-pure.cl @@ -21,7 +21,7 @@ typedef struct mozilla_3des } mozilla_3des_t; -KERNEL_FQ void HC_ATTR_SEQ m26000_mxx (KERN_ATTR_ESALT (mozilla_3des_t)) +KERNEL_FQ KERNEL_FA void m26000_mxx (KERN_ATTR_ESALT (mozilla_3des_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -388,7 +388,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26000_mxx (KERN_ATTR_ESALT (mozilla_3des_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m26000_sxx (KERN_ATTR_ESALT (mozilla_3des_t)) +KERNEL_FQ KERNEL_FA void m26000_sxx (KERN_ATTR_ESALT (mozilla_3des_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m26000_a3-pure.cl b/OpenCL/m26000_a3-pure.cl index 860013e10..77d395de6 100644 --- a/OpenCL/m26000_a3-pure.cl +++ b/OpenCL/m26000_a3-pure.cl @@ -21,7 +21,7 @@ typedef struct mozilla_3des } mozilla_3des_t; -KERNEL_FQ void HC_ATTR_SEQ m26000_mxx (KERN_ATTR_VECTOR_ESALT (mozilla_3des_t)) +KERNEL_FQ KERNEL_FA void m26000_mxx (KERN_ATTR_VECTOR_ESALT (mozilla_3des_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -374,7 +374,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26000_mxx (KERN_ATTR_VECTOR_ESALT (mozilla_3des_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m26000_sxx (KERN_ATTR_VECTOR_ESALT (mozilla_3des_t)) +KERNEL_FQ KERNEL_FA void m26000_sxx (KERN_ATTR_VECTOR_ESALT (mozilla_3des_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m26100-pure.cl b/OpenCL/m26100-pure.cl index a93c263a4..03f7dd0e7 100644 --- a/OpenCL/m26100-pure.cl +++ b/OpenCL/m26100-pure.cl @@ -78,7 +78,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m26100_init (KERN_ATTR_TMPS_ESALT (mozilla_aes_tmp_t, mozilla_aes_t)) +KERNEL_FQ KERNEL_FA void m26100_init (KERN_ATTR_TMPS_ESALT (mozilla_aes_tmp_t, mozilla_aes_t)) { /** * base @@ -203,7 +203,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26100_init (KERN_ATTR_TMPS_ESALT (mozilla_aes_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m26100_loop (KERN_ATTR_TMPS_ESALT (mozilla_aes_tmp_t, mozilla_aes_t)) +KERNEL_FQ KERNEL_FA void m26100_loop (KERN_ATTR_TMPS_ESALT (mozilla_aes_tmp_t, mozilla_aes_t)) { const u64 gid = get_global_id (0); @@ -309,7 +309,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26100_loop (KERN_ATTR_TMPS_ESALT (mozilla_aes_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m26100_comp (KERN_ATTR_TMPS_ESALT (mozilla_aes_tmp_t, mozilla_aes_t)) +KERNEL_FQ KERNEL_FA void m26100_comp (KERN_ATTR_TMPS_ESALT (mozilla_aes_tmp_t, mozilla_aes_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m26200_a0-pure.cl b/OpenCL/m26200_a0-pure.cl index 06caaa28f..e37a59969 100644 --- a/OpenCL/m26200_a0-pure.cl +++ b/OpenCL/m26200_a0-pure.cl @@ -35,7 +35,7 @@ CONSTANT_VK u32a PE_CONST[256] = 17408, 33985, 34177, 17728, 34561, 18368, 18048, 34369, 33281, 17088, 17280, 33601, 16640, 33217, 32897, 16448 }; -KERNEL_FQ void HC_ATTR_SEQ m26200_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m26200_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -128,7 +128,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26200_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m26200_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m26200_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m26200_a1-pure.cl b/OpenCL/m26200_a1-pure.cl index 1ede47faa..d22b2e009 100644 --- a/OpenCL/m26200_a1-pure.cl +++ b/OpenCL/m26200_a1-pure.cl @@ -33,7 +33,7 @@ CONSTANT_VK u32a PE_CONST[256] = 17408, 33985, 34177, 17728, 34561, 18368, 18048, 34369, 33281, 17088, 17280, 33601, 16640, 33217, 32897, 16448 }; -KERNEL_FQ void HC_ATTR_SEQ m26200_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m26200_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -193,7 +193,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26200_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m26200_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m26200_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m26200_a3-pure.cl b/OpenCL/m26200_a3-pure.cl index 440caf060..5bc2a9cc1 100644 --- a/OpenCL/m26200_a3-pure.cl +++ b/OpenCL/m26200_a3-pure.cl @@ -33,7 +33,7 @@ CONSTANT_VK u32a PE_CONST[256] = 17408, 33985, 34177, 17728, 34561, 18368, 18048, 34369, 33281, 17088, 17280, 33601, 16640, 33217, 32897, 16448 }; -KERNEL_FQ void HC_ATTR_SEQ m26200_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m26200_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -137,7 +137,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26200_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m26200_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m26200_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m26300_a0-pure.cl b/OpenCL/m26300_a0-pure.cl index ac3dc06c1..3f590d5f0 100644 --- a/OpenCL/m26300_a0-pure.cl +++ b/OpenCL/m26300_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m26300_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m26300_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -92,7 +92,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26300_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m26300_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m26300_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m26300_a1-pure.cl b/OpenCL/m26300_a1-pure.cl index 5bffcea35..85a45006f 100644 --- a/OpenCL/m26300_a1-pure.cl +++ b/OpenCL/m26300_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m26300_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m26300_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -86,7 +86,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26300_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m26300_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m26300_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m26300_a3-pure.cl b/OpenCL/m26300_a3-pure.cl index 9767f6564..c2f8ba348 100644 --- a/OpenCL/m26300_a3-pure.cl +++ b/OpenCL/m26300_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m26300_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m26300_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -103,7 +103,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26300_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m26300_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m26300_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m26401_a0-optimized.cl b/OpenCL/m26401_a0-optimized.cl index 9f7916aed..3c4958b6c 100644 --- a/OpenCL/m26401_a0-optimized.cl +++ b/OpenCL/m26401_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_cipher_aes.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m26401_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m26401_m04 (KERN_ATTR_RULES ()) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -142,15 +142,15 @@ KERNEL_FQ void HC_ATTR_SEQ m26401_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m26401_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m26401_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m26401_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m26401_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m26401_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m26401_s04 (KERN_ATTR_RULES ()) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -288,10 +288,10 @@ KERNEL_FQ void HC_ATTR_SEQ m26401_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m26401_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m26401_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m26401_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m26401_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m26401_a1-optimized.cl b/OpenCL/m26401_a1-optimized.cl index ac2038594..105d103cf 100644 --- a/OpenCL/m26401_a1-optimized.cl +++ b/OpenCL/m26401_a1-optimized.cl @@ -15,7 +15,7 @@ #include M2S(INCLUDE_PATH/inc_cipher_aes.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m26401_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m26401_m04 (KERN_ATTR_BASIC ()) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -194,15 +194,15 @@ KERNEL_FQ void HC_ATTR_SEQ m26401_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m26401_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m26401_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m26401_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m26401_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m26401_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m26401_s04 (KERN_ATTR_BASIC ()) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -393,10 +393,10 @@ KERNEL_FQ void HC_ATTR_SEQ m26401_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m26401_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m26401_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m26401_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m26401_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m26401_a3-optimized.cl b/OpenCL/m26401_a3-optimized.cl index 028500b38..c756216ae 100644 --- a/OpenCL/m26401_a3-optimized.cl +++ b/OpenCL/m26401_a3-optimized.cl @@ -136,7 +136,7 @@ DECLSPEC void m26401s (SHM_TYPE u32a *s_te0, SHM_TYPE u32a *s_te1, SHM_TYPE u32a } } -KERNEL_FQ void HC_ATTR_SEQ m26401_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m26401_m04 (KERN_ATTR_VECTOR ()) { const u64 lid = get_local_id (0); const u64 gid = get_global_id (0); @@ -227,7 +227,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26401_m04 (KERN_ATTR_VECTOR ()) m26401m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m26401_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m26401_m08 (KERN_ATTR_VECTOR ()) { const u64 lid = get_local_id (0); const u64 gid = get_global_id (0); @@ -318,11 +318,11 @@ KERNEL_FQ void HC_ATTR_SEQ m26401_m08 (KERN_ATTR_VECTOR ()) m26401m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m26401_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m26401_m16 (KERN_ATTR_VECTOR ()) { } -KERNEL_FQ void HC_ATTR_SEQ m26401_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m26401_s04 (KERN_ATTR_VECTOR ()) { const u64 lid = get_local_id (0); const u64 gid = get_global_id (0); @@ -413,7 +413,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26401_s04 (KERN_ATTR_VECTOR ()) m26401s (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m26401_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m26401_s08 (KERN_ATTR_VECTOR ()) { const u64 lid = get_local_id (0); const u64 gid = get_global_id (0); @@ -504,6 +504,6 @@ KERNEL_FQ void HC_ATTR_SEQ m26401_s08 (KERN_ATTR_VECTOR ()) m26401s (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m26401_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m26401_s16 (KERN_ATTR_VECTOR ()) { } diff --git a/OpenCL/m26402_a0-optimized.cl b/OpenCL/m26402_a0-optimized.cl index f5e899c41..bfc1e3a0c 100644 --- a/OpenCL/m26402_a0-optimized.cl +++ b/OpenCL/m26402_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_cipher_aes.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m26402_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m26402_m04 (KERN_ATTR_RULES ()) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -144,15 +144,15 @@ KERNEL_FQ void HC_ATTR_SEQ m26402_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m26402_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m26402_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m26402_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m26402_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m26402_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m26402_s04 (KERN_ATTR_RULES ()) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -292,10 +292,10 @@ KERNEL_FQ void HC_ATTR_SEQ m26402_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m26402_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m26402_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m26402_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m26402_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m26402_a1-optimized.cl b/OpenCL/m26402_a1-optimized.cl index 9796d7c83..bc8fec95b 100644 --- a/OpenCL/m26402_a1-optimized.cl +++ b/OpenCL/m26402_a1-optimized.cl @@ -15,7 +15,7 @@ #include M2S(INCLUDE_PATH/inc_cipher_aes.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m26402_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m26402_m04 (KERN_ATTR_BASIC ()) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -200,15 +200,15 @@ KERNEL_FQ void HC_ATTR_SEQ m26402_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m26402_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m26402_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m26402_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m26402_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m26402_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m26402_s04 (KERN_ATTR_BASIC ()) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -405,10 +405,10 @@ KERNEL_FQ void HC_ATTR_SEQ m26402_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m26402_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m26402_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m26402_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m26402_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m26402_a3-optimized.cl b/OpenCL/m26402_a3-optimized.cl index 9829bd180..5a4e0f7e4 100644 --- a/OpenCL/m26402_a3-optimized.cl +++ b/OpenCL/m26402_a3-optimized.cl @@ -140,7 +140,7 @@ DECLSPEC void m26402s (SHM_TYPE u32a *s_te0, SHM_TYPE u32a *s_te1, SHM_TYPE u32a } } -KERNEL_FQ void HC_ATTR_SEQ m26402_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m26402_m04 (KERN_ATTR_VECTOR ()) { const u64 lid = get_local_id (0); const u64 gid = get_global_id (0); @@ -231,7 +231,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26402_m04 (KERN_ATTR_VECTOR ()) m26402m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m26402_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m26402_m08 (KERN_ATTR_VECTOR ()) { const u64 lid = get_local_id (0); const u64 gid = get_global_id (0); @@ -322,11 +322,11 @@ KERNEL_FQ void HC_ATTR_SEQ m26402_m08 (KERN_ATTR_VECTOR ()) m26402m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m26402_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m26402_m16 (KERN_ATTR_VECTOR ()) { } -KERNEL_FQ void HC_ATTR_SEQ m26402_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m26402_s04 (KERN_ATTR_VECTOR ()) { const u64 lid = get_local_id (0); const u64 gid = get_global_id (0); @@ -417,7 +417,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26402_s04 (KERN_ATTR_VECTOR ()) m26402s (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m26402_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m26402_s08 (KERN_ATTR_VECTOR ()) { const u64 lid = get_local_id (0); const u64 gid = get_global_id (0); @@ -508,6 +508,6 @@ KERNEL_FQ void HC_ATTR_SEQ m26402_s08 (KERN_ATTR_VECTOR ()) m26402s (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m26402_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m26402_s16 (KERN_ATTR_VECTOR ()) { } diff --git a/OpenCL/m26403_a0-optimized.cl b/OpenCL/m26403_a0-optimized.cl index a225d376e..ea019a16d 100644 --- a/OpenCL/m26403_a0-optimized.cl +++ b/OpenCL/m26403_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_cipher_aes.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m26403_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m26403_m04 (KERN_ATTR_RULES ()) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -146,15 +146,15 @@ KERNEL_FQ void HC_ATTR_SEQ m26403_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m26403_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m26403_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m26403_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m26403_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m26403_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m26403_s04 (KERN_ATTR_RULES ()) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -296,10 +296,10 @@ KERNEL_FQ void HC_ATTR_SEQ m26403_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m26403_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m26403_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m26403_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m26403_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m26403_a1-optimized.cl b/OpenCL/m26403_a1-optimized.cl index 12cd99b3f..b8502d9c3 100644 --- a/OpenCL/m26403_a1-optimized.cl +++ b/OpenCL/m26403_a1-optimized.cl @@ -15,7 +15,7 @@ #include M2S(INCLUDE_PATH/inc_cipher_aes.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m26403_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m26403_m04 (KERN_ATTR_BASIC ()) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -206,15 +206,15 @@ KERNEL_FQ void HC_ATTR_SEQ m26403_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m26403_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m26403_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m26403_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m26403_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m26403_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m26403_s04 (KERN_ATTR_BASIC ()) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -417,10 +417,10 @@ KERNEL_FQ void HC_ATTR_SEQ m26403_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m26403_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m26403_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m26403_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m26403_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m26403_a3-optimized.cl b/OpenCL/m26403_a3-optimized.cl index ab5a7de5c..b123f3e15 100644 --- a/OpenCL/m26403_a3-optimized.cl +++ b/OpenCL/m26403_a3-optimized.cl @@ -144,7 +144,7 @@ DECLSPEC void m26403s (SHM_TYPE u32a *s_te0, SHM_TYPE u32a *s_te1, SHM_TYPE u32a } } -KERNEL_FQ void HC_ATTR_SEQ m26403_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m26403_m04 (KERN_ATTR_VECTOR ()) { const u64 lid = get_local_id (0); const u64 gid = get_global_id (0); @@ -235,7 +235,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26403_m04 (KERN_ATTR_VECTOR ()) m26403m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m26403_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m26403_m08 (KERN_ATTR_VECTOR ()) { const u64 lid = get_local_id (0); const u64 gid = get_global_id (0); @@ -326,7 +326,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26403_m08 (KERN_ATTR_VECTOR ()) m26403m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m26403_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m26403_m16 (KERN_ATTR_VECTOR ()) { const u64 lid = get_local_id (0); const u64 gid = get_global_id (0); @@ -417,7 +417,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26403_m16 (KERN_ATTR_VECTOR ()) m26403m (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m26403_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m26403_s04 (KERN_ATTR_VECTOR ()) { const u64 lid = get_local_id (0); const u64 gid = get_global_id (0); @@ -508,7 +508,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26403_s04 (KERN_ATTR_VECTOR ()) m26403s (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m26403_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m26403_s08 (KERN_ATTR_VECTOR ()) { const u64 lid = get_local_id (0); const u64 gid = get_global_id (0); @@ -599,7 +599,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26403_s08 (KERN_ATTR_VECTOR ()) m26403s (s_te0, s_te1, s_te2, s_te3, s_te4, s_td0, s_td1, s_td2, s_td3, s_td4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m26403_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m26403_s16 (KERN_ATTR_VECTOR ()) { const u64 lid = get_local_id (0); const u64 gid = get_global_id (0); diff --git a/OpenCL/m26500-pure.cl b/OpenCL/m26500-pure.cl index a790299b3..7061ec738 100644 --- a/OpenCL/m26500-pure.cl +++ b/OpenCL/m26500-pure.cl @@ -73,7 +73,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m26500_init (KERN_ATTR_TMPS_ESALT (iphone_passcode_tmp_t, iphone_passcode_t)) +KERNEL_FQ KERNEL_FA void m26500_init (KERN_ATTR_TMPS_ESALT (iphone_passcode_tmp_t, iphone_passcode_t)) { /** * base @@ -167,7 +167,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26500_init (KERN_ATTR_TMPS_ESALT (iphone_passcode_tm tmps[gid].iv[3] = 0; } -KERNEL_FQ void HC_ATTR_SEQ m26500_loop (KERN_ATTR_TMPS_ESALT (iphone_passcode_tmp_t, iphone_passcode_t)) +KERNEL_FQ KERNEL_FA void m26500_loop (KERN_ATTR_TMPS_ESALT (iphone_passcode_tmp_t, iphone_passcode_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -298,7 +298,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26500_loop (KERN_ATTR_TMPS_ESALT (iphone_passcode_tm tmps[gid].iv[3] = iv[3]; } -KERNEL_FQ void HC_ATTR_SEQ m26500_comp (KERN_ATTR_TMPS_ESALT (iphone_passcode_tmp_t, iphone_passcode_t)) +KERNEL_FQ KERNEL_FA void m26500_comp (KERN_ATTR_TMPS_ESALT (iphone_passcode_tmp_t, iphone_passcode_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m26600-pure.cl b/OpenCL/m26600-pure.cl index 56fb0271a..0ed264a28 100644 --- a/OpenCL/m26600-pure.cl +++ b/OpenCL/m26600-pure.cl @@ -81,7 +81,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m26600_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) +KERNEL_FQ KERNEL_FA void m26600_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) { /** * base @@ -165,7 +165,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26600_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m26600_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) +KERNEL_FQ KERNEL_FA void m26600_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) { const u64 gid = get_global_id (0); @@ -271,7 +271,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26600_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m26600_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) +KERNEL_FQ KERNEL_FA void m26600_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m26610-pure.cl b/OpenCL/m26610-pure.cl index 63baa2719..8ca397629 100644 --- a/OpenCL/m26610-pure.cl +++ b/OpenCL/m26610-pure.cl @@ -81,7 +81,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m26610_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) +KERNEL_FQ KERNEL_FA void m26610_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) { /** * base @@ -165,7 +165,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26610_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m26610_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) +KERNEL_FQ KERNEL_FA void m26610_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) { const u64 gid = get_global_id (0); @@ -271,7 +271,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26610_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m26610_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) +KERNEL_FQ KERNEL_FA void m26610_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, pbkdf2_sha256_aes_gcm_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m26700-pure.cl b/OpenCL/m26700-pure.cl index 5de4da6d8..14be99636 100644 --- a/OpenCL/m26700-pure.cl +++ b/OpenCL/m26700-pure.cl @@ -54,7 +54,7 @@ typedef struct snmpv3 } snmpv3_t; -KERNEL_FQ void HC_ATTR_SEQ m26700_init (KERN_ATTR_TMPS_ESALT (hmac_sha224_tmp_t, snmpv3_t)) +KERNEL_FQ KERNEL_FA void m26700_init (KERN_ATTR_TMPS_ESALT (hmac_sha224_tmp_t, snmpv3_t)) { /** * modifier @@ -135,7 +135,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26700_init (KERN_ATTR_TMPS_ESALT (hmac_sha224_tmp_t, tmps[gid].h[7] = SHA224M_H; } -KERNEL_FQ void HC_ATTR_SEQ m26700_loop (KERN_ATTR_TMPS_ESALT (hmac_sha224_tmp_t, snmpv3_t)) +KERNEL_FQ KERNEL_FA void m26700_loop (KERN_ATTR_TMPS_ESALT (hmac_sha224_tmp_t, snmpv3_t)) { /** * base @@ -240,7 +240,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26700_loop (KERN_ATTR_TMPS_ESALT (hmac_sha224_tmp_t, tmps[gid].h[7] = h[7]; } -KERNEL_FQ void HC_ATTR_SEQ m26700_comp (KERN_ATTR_TMPS_ESALT (hmac_sha224_tmp_t, snmpv3_t)) +KERNEL_FQ KERNEL_FA void m26700_comp (KERN_ATTR_TMPS_ESALT (hmac_sha224_tmp_t, snmpv3_t)) { /** * modifier diff --git a/OpenCL/m26800-pure.cl b/OpenCL/m26800-pure.cl index 260191e91..d0906f532 100644 --- a/OpenCL/m26800-pure.cl +++ b/OpenCL/m26800-pure.cl @@ -54,7 +54,7 @@ typedef struct snmpv3 } snmpv3_t; -KERNEL_FQ void HC_ATTR_SEQ m26800_init (KERN_ATTR_TMPS_ESALT (hmac_sha256_tmp_t, snmpv3_t)) +KERNEL_FQ KERNEL_FA void m26800_init (KERN_ATTR_TMPS_ESALT (hmac_sha256_tmp_t, snmpv3_t)) { /** * modifier @@ -135,7 +135,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26800_init (KERN_ATTR_TMPS_ESALT (hmac_sha256_tmp_t, tmps[gid].h[7] = SHA256M_H; } -KERNEL_FQ void HC_ATTR_SEQ m26800_loop (KERN_ATTR_TMPS_ESALT (hmac_sha256_tmp_t, snmpv3_t)) +KERNEL_FQ KERNEL_FA void m26800_loop (KERN_ATTR_TMPS_ESALT (hmac_sha256_tmp_t, snmpv3_t)) { /** * base @@ -240,7 +240,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26800_loop (KERN_ATTR_TMPS_ESALT (hmac_sha256_tmp_t, tmps[gid].h[7] = h[7]; } -KERNEL_FQ void HC_ATTR_SEQ m26800_comp (KERN_ATTR_TMPS_ESALT (hmac_sha256_tmp_t, snmpv3_t)) +KERNEL_FQ KERNEL_FA void m26800_comp (KERN_ATTR_TMPS_ESALT (hmac_sha256_tmp_t, snmpv3_t)) { /** * modifier diff --git a/OpenCL/m26900-pure.cl b/OpenCL/m26900-pure.cl index e27e9b819..d5a48d653 100644 --- a/OpenCL/m26900-pure.cl +++ b/OpenCL/m26900-pure.cl @@ -54,7 +54,7 @@ typedef struct snmpv3 } snmpv3_t; -KERNEL_FQ void HC_ATTR_SEQ m26900_init (KERN_ATTR_TMPS_ESALT (hmac_sha384_tmp_t, snmpv3_t)) +KERNEL_FQ KERNEL_FA void m26900_init (KERN_ATTR_TMPS_ESALT (hmac_sha384_tmp_t, snmpv3_t)) { /** * modifier @@ -151,7 +151,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26900_init (KERN_ATTR_TMPS_ESALT (hmac_sha384_tmp_t, tmps[gid].h[7] = SHA384M_H; } -KERNEL_FQ void HC_ATTR_SEQ m26900_loop (KERN_ATTR_TMPS_ESALT (hmac_sha384_tmp_t, snmpv3_t)) +KERNEL_FQ KERNEL_FA void m26900_loop (KERN_ATTR_TMPS_ESALT (hmac_sha384_tmp_t, snmpv3_t)) { /** * base @@ -296,7 +296,7 @@ KERNEL_FQ void HC_ATTR_SEQ m26900_loop (KERN_ATTR_TMPS_ESALT (hmac_sha384_tmp_t, tmps[gid].h[7] = h[7]; } -KERNEL_FQ void HC_ATTR_SEQ m26900_comp (KERN_ATTR_TMPS_ESALT (hmac_sha384_tmp_t, snmpv3_t)) +KERNEL_FQ KERNEL_FA void m26900_comp (KERN_ATTR_TMPS_ESALT (hmac_sha384_tmp_t, snmpv3_t)) { /** * modifier diff --git a/OpenCL/m27000-pure.cl b/OpenCL/m27000-pure.cl index ff5a7eb9f..60ca8a322 100644 --- a/OpenCL/m27000-pure.cl +++ b/OpenCL/m27000-pure.cl @@ -528,7 +528,7 @@ typedef struct netntlm_tmp } netntlm_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m27000_init (KERN_ATTR_TMPS_ESALT (netntlm_tmp_t, netntlm_t)) +KERNEL_FQ KERNEL_FA void m27000_init (KERN_ATTR_TMPS_ESALT (netntlm_tmp_t, netntlm_t)) { /** * modifier @@ -572,12 +572,12 @@ KERNEL_FQ void HC_ATTR_SEQ m27000_init (KERN_ATTR_TMPS_ESALT (netntlm_tmp_t, net } -KERNEL_FQ void HC_ATTR_SEQ m27000_loop (KERN_ATTR_TMPS_ESALT (netntlm_tmp_t, netntlm_t)) +KERNEL_FQ KERNEL_FA void m27000_loop (KERN_ATTR_TMPS_ESALT (netntlm_tmp_t, netntlm_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m27000_comp (KERN_ATTR_TMPS_ESALT (netntlm_tmp_t, netntlm_t)) +KERNEL_FQ KERNEL_FA void m27000_comp (KERN_ATTR_TMPS_ESALT (netntlm_tmp_t, netntlm_t)) { /** * modifier diff --git a/OpenCL/m27100-pure.cl b/OpenCL/m27100-pure.cl index 6ac3c6773..e15531cec 100644 --- a/OpenCL/m27100-pure.cl +++ b/OpenCL/m27100-pure.cl @@ -56,7 +56,7 @@ typedef struct netntlmv2_tmp } netntlm_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m27100_init (KERN_ATTR_TMPS_ESALT (netntlm_tmp_t, netntlm_t)) +KERNEL_FQ KERNEL_FA void m27100_init (KERN_ATTR_TMPS_ESALT (netntlm_tmp_t, netntlm_t)) { /** * modifier @@ -100,13 +100,13 @@ KERNEL_FQ void HC_ATTR_SEQ m27100_init (KERN_ATTR_TMPS_ESALT (netntlm_tmp_t, net } -KERNEL_FQ void HC_ATTR_SEQ m27100_loop (KERN_ATTR_TMPS_ESALT (netntlm_tmp_t, netntlm_t)) +KERNEL_FQ KERNEL_FA void m27100_loop (KERN_ATTR_TMPS_ESALT (netntlm_tmp_t, netntlm_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m27100_comp (KERN_ATTR_TMPS_ESALT (netntlm_tmp_t, netntlm_t)) +KERNEL_FQ KERNEL_FA void m27100_comp (KERN_ATTR_TMPS_ESALT (netntlm_tmp_t, netntlm_t)) { /** * modifier diff --git a/OpenCL/m27200_a0-optimized.cl b/OpenCL/m27200_a0-optimized.cl index 67999dc6a..fd45f4b28 100644 --- a/OpenCL/m27200_a0-optimized.cl +++ b/OpenCL/m27200_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m27200_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m27200_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -251,15 +251,15 @@ KERNEL_FQ void HC_ATTR_SEQ m27200_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m27200_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m27200_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m27200_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m27200_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m27200_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m27200_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -504,10 +504,10 @@ KERNEL_FQ void HC_ATTR_SEQ m27200_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m27200_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m27200_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m27200_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m27200_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m27200_a0-pure.cl b/OpenCL/m27200_a0-pure.cl index 35483a8f2..b95164fc4 100644 --- a/OpenCL/m27200_a0-pure.cl +++ b/OpenCL/m27200_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m27200_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m27200_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -72,7 +72,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27200_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m27200_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m27200_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m27200_a1-optimized.cl b/OpenCL/m27200_a1-optimized.cl index 2e069f6d4..0c53527f7 100644 --- a/OpenCL/m27200_a1-optimized.cl +++ b/OpenCL/m27200_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m27200_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27200_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -309,15 +309,15 @@ KERNEL_FQ void HC_ATTR_SEQ m27200_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m27200_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27200_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m27200_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27200_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m27200_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27200_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -621,10 +621,10 @@ KERNEL_FQ void HC_ATTR_SEQ m27200_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m27200_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27200_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m27200_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27200_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m27200_a1-pure.cl b/OpenCL/m27200_a1-pure.cl index f3261533e..4ab4907e4 100644 --- a/OpenCL/m27200_a1-pure.cl +++ b/OpenCL/m27200_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m27200_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27200_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -66,7 +66,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27200_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m27200_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27200_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m27200_a3-optimized.cl b/OpenCL/m27200_a3-optimized.cl index fb653d7a0..6189293ad 100644 --- a/OpenCL/m27200_a3-optimized.cl +++ b/OpenCL/m27200_a3-optimized.cl @@ -539,7 +539,7 @@ DECLSPEC void m27200s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m27200_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27200_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -588,7 +588,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27200_m04 (KERN_ATTR_BASIC ()) m27200m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m27200_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27200_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -637,7 +637,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27200_m08 (KERN_ATTR_BASIC ()) m27200m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m27200_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27200_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -686,7 +686,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27200_m16 (KERN_ATTR_BASIC ()) m27200m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m27200_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27200_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -735,7 +735,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27200_s04 (KERN_ATTR_BASIC ()) m27200s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m27200_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27200_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -784,7 +784,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27200_s08 (KERN_ATTR_BASIC ()) m27200s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m27200_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27200_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m27200_a3-pure.cl b/OpenCL/m27200_a3-pure.cl index b79bb8ada..822555cac 100644 --- a/OpenCL/m27200_a3-pure.cl +++ b/OpenCL/m27200_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m27200_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m27200_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -85,7 +85,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27200_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m27200_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m27200_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m27300-pure.cl b/OpenCL/m27300-pure.cl index b8cea3625..71f767071 100644 --- a/OpenCL/m27300-pure.cl +++ b/OpenCL/m27300-pure.cl @@ -54,7 +54,7 @@ typedef struct snmpv3 } snmpv3_t; -KERNEL_FQ void HC_ATTR_SEQ m27300_init (KERN_ATTR_TMPS_ESALT (hmac_sha512_tmp_t, snmpv3_t)) +KERNEL_FQ KERNEL_FA void m27300_init (KERN_ATTR_TMPS_ESALT (hmac_sha512_tmp_t, snmpv3_t)) { /** * modifier @@ -151,7 +151,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27300_init (KERN_ATTR_TMPS_ESALT (hmac_sha512_tmp_t, tmps[gid].h[7] = SHA512M_H; } -KERNEL_FQ void HC_ATTR_SEQ m27300_loop (KERN_ATTR_TMPS_ESALT (hmac_sha512_tmp_t, snmpv3_t)) +KERNEL_FQ KERNEL_FA void m27300_loop (KERN_ATTR_TMPS_ESALT (hmac_sha512_tmp_t, snmpv3_t)) { /** * base @@ -296,7 +296,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27300_loop (KERN_ATTR_TMPS_ESALT (hmac_sha512_tmp_t, tmps[gid].h[7] = h[7]; } -KERNEL_FQ void HC_ATTR_SEQ m27300_comp (KERN_ATTR_TMPS_ESALT (hmac_sha512_tmp_t, snmpv3_t)) +KERNEL_FQ KERNEL_FA void m27300_comp (KERN_ATTR_TMPS_ESALT (hmac_sha512_tmp_t, snmpv3_t)) { /** * modifier diff --git a/OpenCL/m27400-pure.cl b/OpenCL/m27400-pure.cl index 1a4f3d56b..bdbf272fb 100644 --- a/OpenCL/m27400-pure.cl +++ b/OpenCL/m27400-pure.cl @@ -72,7 +72,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m27400_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, vmware_vmx_t)) +KERNEL_FQ KERNEL_FA void m27400_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, vmware_vmx_t)) { /** * base @@ -144,7 +144,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27400_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m27400_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, vmware_vmx_t)) +KERNEL_FQ KERNEL_FA void m27400_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, vmware_vmx_t)) { const u64 gid = get_global_id (0); @@ -229,7 +229,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27400_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m27400_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, vmware_vmx_t)) +KERNEL_FQ KERNEL_FA void m27400_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, vmware_vmx_t)) { /** * base diff --git a/OpenCL/m27500-pure.cl b/OpenCL/m27500-pure.cl index 5a1efc724..3ff56cc61 100644 --- a/OpenCL/m27500-pure.cl +++ b/OpenCL/m27500-pure.cl @@ -92,7 +92,7 @@ DECLSPEC void xts_mul2 (PRIVATE_AS u32 *in, PRIVATE_AS u32 *out) out[0] ^= c * 0x87; } -KERNEL_FQ void HC_ATTR_SEQ m27500_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) +KERNEL_FQ KERNEL_FA void m27500_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) { /** * base @@ -176,7 +176,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27500_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m27500_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) +KERNEL_FQ KERNEL_FA void m27500_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) { const u64 gid = get_global_id (0); @@ -282,7 +282,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27500_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m27500_init2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) +KERNEL_FQ KERNEL_FA void m27500_init2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -538,7 +538,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27500_init2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp } } -KERNEL_FQ void HC_ATTR_SEQ m27500_loop2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) +KERNEL_FQ KERNEL_FA void m27500_loop2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) { const u64 gid = get_global_id (0); @@ -644,7 +644,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27500_loop2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp } } -KERNEL_FQ void HC_ATTR_SEQ m27500_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) +KERNEL_FQ KERNEL_FA void m27500_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m27600-pure.cl b/OpenCL/m27600-pure.cl index ec012bc77..553a46bd9 100644 --- a/OpenCL/m27600-pure.cl +++ b/OpenCL/m27600-pure.cl @@ -92,7 +92,7 @@ DECLSPEC void xts_mul2 (PRIVATE_AS u32 *in, PRIVATE_AS u32 *out) out[0] ^= c * 0x87; } -KERNEL_FQ void HC_ATTR_SEQ m27600_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) +KERNEL_FQ KERNEL_FA void m27600_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) { /** * base @@ -176,7 +176,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27600_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m27600_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) +KERNEL_FQ KERNEL_FA void m27600_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) { const u64 gid = get_global_id (0); @@ -282,7 +282,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27600_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m27600_init2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) +KERNEL_FQ KERNEL_FA void m27600_init2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -616,7 +616,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27600_init2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp } } -KERNEL_FQ void HC_ATTR_SEQ m27600_loop2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) +KERNEL_FQ KERNEL_FA void m27600_loop2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) { const u64 gid = get_global_id (0); @@ -722,7 +722,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27600_loop2 (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp } } -KERNEL_FQ void HC_ATTR_SEQ m27600_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) +KERNEL_FQ KERNEL_FA void m27600_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, vbox_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m27700-pure.cl b/OpenCL/m27700-pure.cl index a6482afdf..c1f930ebc 100644 --- a/OpenCL/m27700-pure.cl +++ b/OpenCL/m27700-pure.cl @@ -13,17 +13,7 @@ #include M2S(INCLUDE_PATH/inc_cipher_aes.cl) #endif -typedef struct -{ - #ifndef SCRYPT_TMP_ELEM - #define SCRYPT_TMP_ELEM 1 - #endif - - u32 P[SCRYPT_TMP_ELEM]; - -} scrypt_tmp_t; - -KERNEL_FQ void HC_ATTR_SEQ m27700_init (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m27700_init (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); @@ -51,16 +41,12 @@ KERNEL_FQ void HC_ATTR_SEQ m27700_init (KERN_ATTR_TMPS (scrypt_tmp_t)) s[0] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[0]); s[1] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[1]); - u32 out[SCRYPT_CNT4]; + scrypt_pbkdf2_ppg (w, w_len, s, 8, tmps[gid].in, SCRYPT_SZ); - scrypt_pbkdf2_pp (w, w_len, s, 8, out, SCRYPT_SZ); - - scrypt_blockmix_in (out, SCRYPT_SZ); - - for (u32 i = 0; i < SCRYPT_CNT4; i++) tmps[gid].P[i] = out[i]; + scrypt_blockmix_in (tmps[gid].in, tmps[gid].out, SCRYPT_SZ); } -KERNEL_FQ void HC_ATTR_SEQ m27700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m27700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -71,16 +57,12 @@ KERNEL_FQ void HC_ATTR_SEQ m27700_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) u32 X[STATE_CNT4]; - GLOBAL_AS u32 *P = tmps[gid].P + (SALT_REPEAT * STATE_CNT4); + GLOBAL_AS u32 *P = tmps[gid].out + (SALT_REPEAT * STATE_CNT4); - for (u32 z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - - scrypt_smix_init (X, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); - - for (u32 z = 0; z < STATE_CNT4; z++) P[z] = X[z]; + scrypt_smix_init (P, X, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); } -KERNEL_FQ void HC_ATTR_SEQ m27700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m27700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -92,16 +74,12 @@ KERNEL_FQ void HC_ATTR_SEQ m27700_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) u32 X[STATE_CNT4]; u32 T[STATE_CNT4]; - GLOBAL_AS u32 *P = tmps[gid].P + (SALT_REPEAT * STATE_CNT4); + GLOBAL_AS u32 *P = tmps[gid].out + (SALT_REPEAT * STATE_CNT4); - for (u32 z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - - scrypt_smix_loop (X, T, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); - - for (u32 z = 0; z < STATE_CNT4; z++) P[z] = X[z]; + scrypt_smix_loop (P, X, T, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); } -KERNEL_FQ void HC_ATTR_SEQ m27700_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m27700_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -181,16 +159,11 @@ KERNEL_FQ void HC_ATTR_SEQ m27700_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) | ((w[j] << 8) & 0xff00ff00); } - - u32 x[SCRYPT_CNT4]; - - for (u32 i = 0; i < SCRYPT_CNT4; i++) x[i] = tmps[gid].P[i]; - - scrypt_blockmix_out (x, SCRYPT_SZ); + scrypt_blockmix_out (tmps[gid].out, tmps[gid].in, SCRYPT_SZ); u32 out[8]; - scrypt_pbkdf2_pp (w, w_len, x, SCRYPT_SZ, out, 32); + scrypt_pbkdf2_pgp (w, w_len, tmps[gid].in, SCRYPT_SZ, out, 32); // AES256-CBC decrypt diff --git a/OpenCL/m27800_a0-optimized.cl b/OpenCL/m27800_a0-optimized.cl index 0d08e6f44..81d70d10b 100644 --- a/OpenCL/m27800_a0-optimized.cl +++ b/OpenCL/m27800_a0-optimized.cl @@ -55,7 +55,7 @@ DECLSPEC u32 MurmurHash3 (const u32 seed, PRIVATE_AS const u32 *data, const u32 return checksum ^ (checksum >> 16); } -KERNEL_FQ void HC_ATTR_SEQ m27800_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m27800_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -112,15 +112,15 @@ KERNEL_FQ void HC_ATTR_SEQ m27800_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m27800_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m27800_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m27800_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m27800_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m27800_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m27800_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -189,10 +189,10 @@ KERNEL_FQ void HC_ATTR_SEQ m27800_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m27800_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m27800_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m27800_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m27800_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m27800_a1-optimized.cl b/OpenCL/m27800_a1-optimized.cl index a934da219..66927e35f 100644 --- a/OpenCL/m27800_a1-optimized.cl +++ b/OpenCL/m27800_a1-optimized.cl @@ -53,7 +53,7 @@ DECLSPEC u32 MurmurHash3 (const u32 seed, PRIVATE_AS const u32 *data, const u32 return checksum ^ (checksum >> 16); } -KERNEL_FQ void HC_ATTR_SEQ m27800_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27800_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -166,15 +166,15 @@ KERNEL_FQ void HC_ATTR_SEQ m27800_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m27800_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27800_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m27800_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27800_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m27800_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27800_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -299,10 +299,10 @@ KERNEL_FQ void HC_ATTR_SEQ m27800_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m27800_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27800_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m27800_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27800_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m27800_a3-optimized.cl b/OpenCL/m27800_a3-optimized.cl index f94c9da00..da67f0df3 100644 --- a/OpenCL/m27800_a3-optimized.cl +++ b/OpenCL/m27800_a3-optimized.cl @@ -185,7 +185,7 @@ DECLSPEC void m27800s (PRIVATE_AS const u32 *data, const u32 pw_len, KERN_ATTR_F } } -KERNEL_FQ void HC_ATTR_SEQ m27800_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m27800_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -225,7 +225,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27800_m04 (KERN_ATTR_VECTOR ()) m27800m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m27800_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m27800_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -265,7 +265,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27800_m08 (KERN_ATTR_VECTOR ()) m27800m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m27800_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m27800_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -305,7 +305,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27800_m16 (KERN_ATTR_VECTOR ()) m27800m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m27800_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m27800_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -345,7 +345,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27800_s04 (KERN_ATTR_VECTOR ()) m27800s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m27800_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m27800_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -385,7 +385,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27800_s08 (KERN_ATTR_VECTOR ()) m27800s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m27800_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m27800_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m27900_a0-optimized.cl b/OpenCL/m27900_a0-optimized.cl index a72e9841d..955eda573 100644 --- a/OpenCL/m27900_a0-optimized.cl +++ b/OpenCL/m27900_a0-optimized.cl @@ -135,7 +135,7 @@ DECLSPEC u32x crc32c (PRIVATE_AS const u32x *w, const u32 pw_len, const u32 iv) return ~a; } -KERNEL_FQ void HC_ATTR_SEQ m27900_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m27900_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -215,15 +215,15 @@ KERNEL_FQ void HC_ATTR_SEQ m27900_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m27900_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m27900_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m27900_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m27900_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m27900_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m27900_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -315,10 +315,10 @@ KERNEL_FQ void HC_ATTR_SEQ m27900_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m27900_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m27900_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m27900_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m27900_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m27900_a0-pure.cl b/OpenCL/m27900_a0-pure.cl index 7ec0d4da6..a321907b3 100644 --- a/OpenCL/m27900_a0-pure.cl +++ b/OpenCL/m27900_a0-pure.cl @@ -123,7 +123,7 @@ DECLSPEC u32x crc32c (PRIVATE_AS const u32x *w, const u32 pw_len, const u32 iv) return ~a; } -KERNEL_FQ void HC_ATTR_SEQ m27900_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m27900_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -169,7 +169,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27900_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m27900_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m27900_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m27900_a1-optimized.cl b/OpenCL/m27900_a1-optimized.cl index b4054c4a3..209ffe13c 100644 --- a/OpenCL/m27900_a1-optimized.cl +++ b/OpenCL/m27900_a1-optimized.cl @@ -133,7 +133,7 @@ DECLSPEC u32x crc32c (PRIVATE_AS const u32x *w, const u32 pw_len, const u32 iv) return ~a; } -KERNEL_FQ void HC_ATTR_SEQ m27900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27900_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -273,15 +273,15 @@ KERNEL_FQ void HC_ATTR_SEQ m27900_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m27900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27900_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m27900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27900_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m27900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27900_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -433,10 +433,10 @@ KERNEL_FQ void HC_ATTR_SEQ m27900_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m27900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27900_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m27900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27900_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m27900_a1-pure.cl b/OpenCL/m27900_a1-pure.cl index b4c5cd2f5..542da85ca 100644 --- a/OpenCL/m27900_a1-pure.cl +++ b/OpenCL/m27900_a1-pure.cl @@ -121,7 +121,7 @@ DECLSPEC u32x crc32c_g (GLOBAL_AS const u32x *w, const u32 pw_len, const u32 iv) return ~a; } -KERNEL_FQ void HC_ATTR_SEQ m27900_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27900_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -163,7 +163,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27900_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m27900_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27900_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m27900_a3-optimized.cl b/OpenCL/m27900_a3-optimized.cl index 5e48c1029..9e90fed1d 100644 --- a/OpenCL/m27900_a3-optimized.cl +++ b/OpenCL/m27900_a3-optimized.cl @@ -255,7 +255,7 @@ DECLSPEC void m27900s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_BASIC } } -KERNEL_FQ void HC_ATTR_SEQ m27900_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27900_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -295,7 +295,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27900_m04 (KERN_ATTR_BASIC ()) m27900m (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m27900_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27900_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -335,7 +335,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27900_m08 (KERN_ATTR_BASIC ()) m27900m (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m27900_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27900_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -375,7 +375,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27900_m16 (KERN_ATTR_BASIC ()) m27900m (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m27900_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27900_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -415,7 +415,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27900_s04 (KERN_ATTR_BASIC ()) m27900s (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m27900_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27900_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -455,7 +455,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27900_s08 (KERN_ATTR_BASIC ()) m27900s (w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m27900_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m27900_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m27900_a3-pure.cl b/OpenCL/m27900_a3-pure.cl index 3e837ac18..e3d3048e5 100644 --- a/OpenCL/m27900_a3-pure.cl +++ b/OpenCL/m27900_a3-pure.cl @@ -121,7 +121,7 @@ DECLSPEC u32x crc32c (PRIVATE_AS const u32x *w, const u32 pw_len, const u32 iv) return ~a; } -KERNEL_FQ void HC_ATTR_SEQ m27900_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m27900_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -174,7 +174,7 @@ KERNEL_FQ void HC_ATTR_SEQ m27900_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m27900_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m27900_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m28000_a0-optimized.cl b/OpenCL/m28000_a0-optimized.cl index 18a27d1f4..a8861d117 100644 --- a/OpenCL/m28000_a0-optimized.cl +++ b/OpenCL/m28000_a0-optimized.cl @@ -195,7 +195,7 @@ DECLSPEC u64 crc64jones (PRIVATE_AS const u32 *w, const u32 pw_len, const u64 iv return a; } -KERNEL_FQ void HC_ATTR_SEQ m28000_m04 (KERN_ATTR_RULES_ESALT (crc64_t)) +KERNEL_FQ KERNEL_FA void m28000_m04 (KERN_ATTR_RULES_ESALT (crc64_t)) { /** * modifier @@ -299,15 +299,15 @@ KERNEL_FQ void HC_ATTR_SEQ m28000_m04 (KERN_ATTR_RULES_ESALT (crc64_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m28000_m08 (KERN_ATTR_RULES_ESALT (crc64_t)) +KERNEL_FQ KERNEL_FA void m28000_m08 (KERN_ATTR_RULES_ESALT (crc64_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m28000_m16 (KERN_ATTR_RULES_ESALT (crc64_t)) +KERNEL_FQ KERNEL_FA void m28000_m16 (KERN_ATTR_RULES_ESALT (crc64_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m28000_s04 (KERN_ATTR_RULES_ESALT (crc64_t)) +KERNEL_FQ KERNEL_FA void m28000_s04 (KERN_ATTR_RULES_ESALT (crc64_t)) { /** * modifier @@ -423,10 +423,10 @@ KERNEL_FQ void HC_ATTR_SEQ m28000_s04 (KERN_ATTR_RULES_ESALT (crc64_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m28000_s08 (KERN_ATTR_RULES_ESALT (crc64_t)) +KERNEL_FQ KERNEL_FA void m28000_s08 (KERN_ATTR_RULES_ESALT (crc64_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m28000_s16 (KERN_ATTR_RULES_ESALT (crc64_t)) +KERNEL_FQ KERNEL_FA void m28000_s16 (KERN_ATTR_RULES_ESALT (crc64_t)) { } diff --git a/OpenCL/m28000_a0-pure.cl b/OpenCL/m28000_a0-pure.cl index c1a24417f..5e8805555 100644 --- a/OpenCL/m28000_a0-pure.cl +++ b/OpenCL/m28000_a0-pure.cl @@ -183,7 +183,7 @@ DECLSPEC u64 crc64jones (PRIVATE_AS const u32 *w, const u32 pw_len, const u64 iv return a; } -KERNEL_FQ void HC_ATTR_SEQ m28000_mxx (KERN_ATTR_RULES_ESALT (crc64_t)) +KERNEL_FQ KERNEL_FA void m28000_mxx (KERN_ATTR_RULES_ESALT (crc64_t)) { /** * modifier @@ -253,7 +253,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28000_mxx (KERN_ATTR_RULES_ESALT (crc64_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m28000_sxx (KERN_ATTR_RULES_ESALT (crc64_t)) +KERNEL_FQ KERNEL_FA void m28000_sxx (KERN_ATTR_RULES_ESALT (crc64_t)) { /** * modifier diff --git a/OpenCL/m28000_a1-optimized.cl b/OpenCL/m28000_a1-optimized.cl index 35b90fdc3..25aa706f1 100644 --- a/OpenCL/m28000_a1-optimized.cl +++ b/OpenCL/m28000_a1-optimized.cl @@ -193,7 +193,7 @@ DECLSPEC u64 crc64jones (PRIVATE_AS const u32 *w, const u32 pw_len, const u64 iv return a; } -KERNEL_FQ void HC_ATTR_SEQ m28000_m04 (KERN_ATTR_ESALT (crc64_t)) +KERNEL_FQ KERNEL_FA void m28000_m04 (KERN_ATTR_ESALT (crc64_t)) { /** * modifier @@ -357,15 +357,15 @@ KERNEL_FQ void HC_ATTR_SEQ m28000_m04 (KERN_ATTR_ESALT (crc64_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m28000_m08 (KERN_ATTR_ESALT (crc64_t)) +KERNEL_FQ KERNEL_FA void m28000_m08 (KERN_ATTR_ESALT (crc64_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m28000_m16 (KERN_ATTR_ESALT (crc64_t)) +KERNEL_FQ KERNEL_FA void m28000_m16 (KERN_ATTR_ESALT (crc64_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m28000_s04 (KERN_ATTR_ESALT (crc64_t)) +KERNEL_FQ KERNEL_FA void m28000_s04 (KERN_ATTR_ESALT (crc64_t)) { /** * modifier @@ -541,10 +541,10 @@ KERNEL_FQ void HC_ATTR_SEQ m28000_s04 (KERN_ATTR_ESALT (crc64_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m28000_s08 (KERN_ATTR_ESALT (crc64_t)) +KERNEL_FQ KERNEL_FA void m28000_s08 (KERN_ATTR_ESALT (crc64_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m28000_s16 (KERN_ATTR_ESALT (crc64_t)) +KERNEL_FQ KERNEL_FA void m28000_s16 (KERN_ATTR_ESALT (crc64_t)) { } diff --git a/OpenCL/m28000_a1-pure.cl b/OpenCL/m28000_a1-pure.cl index 827c9439f..e27654c85 100644 --- a/OpenCL/m28000_a1-pure.cl +++ b/OpenCL/m28000_a1-pure.cl @@ -181,7 +181,7 @@ DECLSPEC u64 crc64jones_g (GLOBAL_AS const u32 *w, const u32 pw_len, const u64 i return a; } -KERNEL_FQ void HC_ATTR_SEQ m28000_mxx (KERN_ATTR_ESALT (crc64_t)) +KERNEL_FQ KERNEL_FA void m28000_mxx (KERN_ATTR_ESALT (crc64_t)) { /** * modifier @@ -243,7 +243,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28000_mxx (KERN_ATTR_ESALT (crc64_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m28000_sxx (KERN_ATTR_ESALT (crc64_t)) +KERNEL_FQ KERNEL_FA void m28000_sxx (KERN_ATTR_ESALT (crc64_t)) { /** * modifier diff --git a/OpenCL/m28000_a3-optimized.cl b/OpenCL/m28000_a3-optimized.cl index 5f4f3eb11..6f1185ada 100644 --- a/OpenCL/m28000_a3-optimized.cl +++ b/OpenCL/m28000_a3-optimized.cl @@ -321,7 +321,7 @@ DECLSPEC void m28000s (SHM_TYPE u64 *s_crc64jonestab, PRIVATE_AS u32 *w, const u } } -KERNEL_FQ void HC_ATTR_SEQ m28000_m04 (KERN_ATTR_ESALT (crc64_t)) +KERNEL_FQ KERNEL_FA void m28000_m04 (KERN_ATTR_ESALT (crc64_t)) { /** * modifier @@ -386,7 +386,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28000_m04 (KERN_ATTR_ESALT (crc64_t)) m28000m (s_crc64jonestab, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m28000_m08 (KERN_ATTR_ESALT (crc64_t)) +KERNEL_FQ KERNEL_FA void m28000_m08 (KERN_ATTR_ESALT (crc64_t)) { /** * modifier @@ -451,7 +451,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28000_m08 (KERN_ATTR_ESALT (crc64_t)) m28000m (s_crc64jonestab, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m28000_m16 (KERN_ATTR_ESALT (crc64_t)) +KERNEL_FQ KERNEL_FA void m28000_m16 (KERN_ATTR_ESALT (crc64_t)) { /** * modifier @@ -516,7 +516,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28000_m16 (KERN_ATTR_ESALT (crc64_t)) m28000m (s_crc64jonestab, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m28000_s04 (KERN_ATTR_ESALT (crc64_t)) +KERNEL_FQ KERNEL_FA void m28000_s04 (KERN_ATTR_ESALT (crc64_t)) { /** * modifier @@ -581,7 +581,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28000_s04 (KERN_ATTR_ESALT (crc64_t)) m28000s (s_crc64jonestab, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m28000_s08 (KERN_ATTR_ESALT (crc64_t)) +KERNEL_FQ KERNEL_FA void m28000_s08 (KERN_ATTR_ESALT (crc64_t)) { /** * modifier @@ -646,7 +646,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28000_s08 (KERN_ATTR_ESALT (crc64_t)) m28000s (s_crc64jonestab, w, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m28000_s16 (KERN_ATTR_ESALT (crc64_t)) +KERNEL_FQ KERNEL_FA void m28000_s16 (KERN_ATTR_ESALT (crc64_t)) { /** * modifier diff --git a/OpenCL/m28000_a3-pure.cl b/OpenCL/m28000_a3-pure.cl index efce81920..bc6edf3f8 100644 --- a/OpenCL/m28000_a3-pure.cl +++ b/OpenCL/m28000_a3-pure.cl @@ -181,7 +181,7 @@ DECLSPEC u64 crc64jones (PRIVATE_AS const u32 *w, const u32 pw_len, const u64 iv return a; } -KERNEL_FQ void HC_ATTR_SEQ m28000_mxx (KERN_ATTR_VECTOR_ESALT (crc64_t)) +KERNEL_FQ KERNEL_FA void m28000_mxx (KERN_ATTR_VECTOR_ESALT (crc64_t)) { /** * modifier @@ -254,7 +254,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28000_mxx (KERN_ATTR_VECTOR_ESALT (crc64_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m28000_sxx (KERN_ATTR_VECTOR_ESALT (crc64_t)) +KERNEL_FQ KERNEL_FA void m28000_sxx (KERN_ATTR_VECTOR_ESALT (crc64_t)) { /** * modifier diff --git a/OpenCL/m28100-pure.cl b/OpenCL/m28100-pure.cl index e62a5b785..0dfa4924d 100644 --- a/OpenCL/m28100-pure.cl +++ b/OpenCL/m28100-pure.cl @@ -88,7 +88,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m28100_init (KERN_ATTR_TMPS_ESALT (winhello_tmp_t, winhello_t)) +KERNEL_FQ KERNEL_FA void m28100_init (KERN_ATTR_TMPS_ESALT (winhello_tmp_t, winhello_t)) { /** * base @@ -203,7 +203,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28100_init (KERN_ATTR_TMPS_ESALT (winhello_tmp_t, wi } } -KERNEL_FQ void HC_ATTR_SEQ m28100_loop (KERN_ATTR_TMPS_ESALT (winhello_tmp_t, winhello_t)) +KERNEL_FQ KERNEL_FA void m28100_loop (KERN_ATTR_TMPS_ESALT (winhello_tmp_t, winhello_t)) { const u64 gid = get_global_id (0); @@ -309,7 +309,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28100_loop (KERN_ATTR_TMPS_ESALT (winhello_tmp_t, wi } } -KERNEL_FQ void HC_ATTR_SEQ m28100_comp (KERN_ATTR_TMPS_ESALT (winhello_tmp_t, winhello_t)) +KERNEL_FQ KERNEL_FA void m28100_comp (KERN_ATTR_TMPS_ESALT (winhello_tmp_t, winhello_t)) { /** * base diff --git a/OpenCL/m28200-pure.cl b/OpenCL/m28200-pure.cl index e335b89bf..92b7a2434 100644 --- a/OpenCL/m28200-pure.cl +++ b/OpenCL/m28200-pure.cl @@ -17,16 +17,6 @@ #define COMPARE_S M2S(INCLUDE_PATH/inc_comp_single.cl) #define COMPARE_M M2S(INCLUDE_PATH/inc_comp_multi.cl) -typedef struct exodus_tmp -{ - #ifndef SCRYPT_TMP_ELEM - #define SCRYPT_TMP_ELEM 1 - #endif - - u32 P[SCRYPT_TMP_ELEM]; - -} exodus_tmp_t; - typedef struct exodus { u32 iv[4]; @@ -35,22 +25,18 @@ typedef struct exodus } exodus_t; -KERNEL_FQ void HC_ATTR_SEQ m28200_init (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exodus_t)) +KERNEL_FQ KERNEL_FA void m28200_init (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, exodus_t)) { const u64 gid = get_global_id (0); if (gid >= GID_CNT) return; - u32 out[SCRYPT_CNT4]; + scrypt_pbkdf2_ggg (pws[gid].i, pws[gid].pw_len, salt_bufs[SALT_POS_HOST].salt_buf, salt_bufs[SALT_POS_HOST].salt_len, tmps[gid].in, SCRYPT_SZ); - scrypt_pbkdf2_gg (pws[gid].i, pws[gid].pw_len, salt_bufs[SALT_POS_HOST].salt_buf, salt_bufs[SALT_POS_HOST].salt_len, out, SCRYPT_SZ); - - scrypt_blockmix_in (out, SCRYPT_SZ); - - for (u32 i = 0; i < SCRYPT_CNT4; i++) tmps[gid].P[i] = out[i]; + scrypt_blockmix_in (tmps[gid].in, tmps[gid].out, SCRYPT_SZ); } -KERNEL_FQ void HC_ATTR_SEQ m28200_loop_prepare (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exodus_t)) +KERNEL_FQ KERNEL_FA void m28200_loop_prepare (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, exodus_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -61,16 +47,12 @@ KERNEL_FQ void HC_ATTR_SEQ m28200_loop_prepare (KERN_ATTR_TMPS_ESALT (exodus_tmp u32 X[STATE_CNT4]; - GLOBAL_AS u32 *P = tmps[gid].P + (SALT_REPEAT * STATE_CNT4); + GLOBAL_AS u32 *P = tmps[gid].out + (SALT_REPEAT * STATE_CNT4); - for (u32 z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - - scrypt_smix_init (X, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); - - for (u32 z = 0; z < STATE_CNT4; z++) P[z] = X[z]; + scrypt_smix_init (P, X, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); } -KERNEL_FQ void HC_ATTR_SEQ m28200_loop (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exodus_t)) +KERNEL_FQ KERNEL_FA void m28200_loop (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, exodus_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -82,16 +64,12 @@ KERNEL_FQ void HC_ATTR_SEQ m28200_loop (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exod u32 X[STATE_CNT4]; u32 T[STATE_CNT4]; - GLOBAL_AS u32 *P = tmps[gid].P + (SALT_REPEAT * STATE_CNT4); + GLOBAL_AS u32 *P = tmps[gid].out + (SALT_REPEAT * STATE_CNT4); - for (u32 z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - - scrypt_smix_loop (X, T, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); - - for (u32 z = 0; z < STATE_CNT4; z++) P[z] = X[z]; + scrypt_smix_loop (P, X, T, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); } -KERNEL_FQ void HC_ATTR_SEQ m28200_comp (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exodus_t)) +KERNEL_FQ KERNEL_FA void m28200_comp (KERN_ATTR_TMPS_ESALT (scrypt_tmp_t, exodus_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -150,15 +128,11 @@ KERNEL_FQ void HC_ATTR_SEQ m28200_comp (KERN_ATTR_TMPS_ESALT (exodus_tmp_t, exod if (gid >= GID_CNT) return; - u32 x[SCRYPT_CNT4]; - - for (u32 i = 0; i < SCRYPT_CNT4; i++) x[i] = tmps[gid].P[i]; - - scrypt_blockmix_out (x, SCRYPT_SZ); + scrypt_blockmix_out (tmps[gid].out, tmps[gid].in, SCRYPT_SZ); u32 out[8]; - scrypt_pbkdf2_gp (pws[gid].i, pws[gid].pw_len, x, SCRYPT_SZ, out, 32); + scrypt_pbkdf2_ggp (pws[gid].i, pws[gid].pw_len, tmps[gid].in, SCRYPT_SZ, out, 32); // GCM stuff diff --git a/OpenCL/m28300_a0-pure.cl b/OpenCL/m28300_a0-pure.cl index 59e119765..a6c78bd07 100644 --- a/OpenCL/m28300_a0-pure.cl +++ b/OpenCL/m28300_a0-pure.cl @@ -36,7 +36,7 @@ CONSTANT_VK u32 bin2base64[0x40] = #define int_to_base64(c) make_u32x (s_bin2base64[(c).s0], s_bin2base64[(c).s1], s_bin2base64[(c).s2], s_bin2base64[(c).s3], s_bin2base64[(c).s4], s_bin2base64[(c).s5], s_bin2base64[(c).s6], s_bin2base64[(c).s7], s_bin2base64[(c).s8], s_bin2base64[(c).s9], s_bin2base64[(c).sa], s_bin2base64[(c).sb], s_bin2base64[(c).sc], s_bin2base64[(c).sd], s_bin2base64[(c).se], s_bin2base64[(c).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m28300_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m28300_mxx (KERN_ATTR_RULES ()) { /** * base @@ -184,7 +184,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28300_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m28300_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m28300_sxx (KERN_ATTR_RULES ()) { /** * base diff --git a/OpenCL/m28300_a1-pure.cl b/OpenCL/m28300_a1-pure.cl index 0f0f33729..7535c3b07 100644 --- a/OpenCL/m28300_a1-pure.cl +++ b/OpenCL/m28300_a1-pure.cl @@ -34,7 +34,7 @@ CONSTANT_VK u32 bin2base64[0x40] = #define int_to_base64(c) make_u32x (s_bin2base64[(c).s0], s_bin2base64[(c).s1], s_bin2base64[(c).s2], s_bin2base64[(c).s3], s_bin2base64[(c).s4], s_bin2base64[(c).s5], s_bin2base64[(c).s6], s_bin2base64[(c).s7], s_bin2base64[(c).s8], s_bin2base64[(c).s9], s_bin2base64[(c).sa], s_bin2base64[(c).sb], s_bin2base64[(c).sc], s_bin2base64[(c).sd], s_bin2base64[(c).se], s_bin2base64[(c).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m28300_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m28300_mxx (KERN_ATTR_BASIC ()) { /** * base @@ -180,7 +180,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28300_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m28300_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m28300_sxx (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m28300_a3-pure.cl b/OpenCL/m28300_a3-pure.cl index 47dd46819..29b1e21ba 100644 --- a/OpenCL/m28300_a3-pure.cl +++ b/OpenCL/m28300_a3-pure.cl @@ -34,7 +34,7 @@ CONSTANT_VK u32 bin2base64[0x40] = #define int_to_base64(c) make_u32x (s_bin2base64[(c).s0], s_bin2base64[(c).s1], s_bin2base64[(c).s2], s_bin2base64[(c).s3], s_bin2base64[(c).s4], s_bin2base64[(c).s5], s_bin2base64[(c).s6], s_bin2base64[(c).s7], s_bin2base64[(c).s8], s_bin2base64[(c).s9], s_bin2base64[(c).sa], s_bin2base64[(c).sb], s_bin2base64[(c).sc], s_bin2base64[(c).sd], s_bin2base64[(c).se], s_bin2base64[(c).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m28300_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m28300_mxx (KERN_ATTR_VECTOR ()) { /** * base @@ -193,7 +193,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28300_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m28300_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m28300_sxx (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m28400-pure.cl b/OpenCL/m28400-pure.cl index add3f0579..3d8af6ae7 100644 --- a/OpenCL/m28400-pure.cl +++ b/OpenCL/m28400-pure.cl @@ -423,7 +423,7 @@ DECLSPEC u32 u16_bin_to_u32_hex (const u32 v) | ((v1 < 10) ? '0' + v1 : 'a' - 10 + v1) << 0; } -KERNEL_FQ void HC_ATTR_SEQ m28400_init (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m28400_init (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base @@ -659,7 +659,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28400_init (KERN_ATTR_TMPS (bcrypt_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m28400_loop (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m28400_loop (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base @@ -862,7 +862,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28400_loop (KERN_ATTR_TMPS (bcrypt_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m28400_comp (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m28400_comp (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base diff --git a/OpenCL/m28501_a0-pure.cl b/OpenCL/m28501_a0-pure.cl index 6ac90fd4b..9f0d8c197 100644 --- a/OpenCL/m28501_a0-pure.cl +++ b/OpenCL/m28501_a0-pure.cl @@ -21,7 +21,7 @@ #include M2S(INCLUDE_PATH/inc_ecc_secp256k1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m28501_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m28501_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -162,7 +162,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28501_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m28501_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m28501_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m28501_a1-pure.cl b/OpenCL/m28501_a1-pure.cl index 99911ca10..b078b0bc3 100644 --- a/OpenCL/m28501_a1-pure.cl +++ b/OpenCL/m28501_a1-pure.cl @@ -19,7 +19,7 @@ #include M2S(INCLUDE_PATH/inc_ecc_secp256k1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m28501_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m28501_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -200,7 +200,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28501_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m28501_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m28501_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m28501_a3-pure.cl b/OpenCL/m28501_a3-pure.cl index 24bef94f8..30ba29601 100644 --- a/OpenCL/m28501_a3-pure.cl +++ b/OpenCL/m28501_a3-pure.cl @@ -61,7 +61,7 @@ // } // }; -KERNEL_FQ void HC_ATTR_SEQ m28501_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m28501_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -220,7 +220,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28501_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m28501_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m28501_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m28502_a0-pure.cl b/OpenCL/m28502_a0-pure.cl index 0313f1022..44a8fa9c4 100644 --- a/OpenCL/m28502_a0-pure.cl +++ b/OpenCL/m28502_a0-pure.cl @@ -21,7 +21,7 @@ #include M2S(INCLUDE_PATH/inc_ecc_secp256k1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m28502_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m28502_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -163,7 +163,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28502_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m28502_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m28502_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m28502_a1-pure.cl b/OpenCL/m28502_a1-pure.cl index 9b31fe4c0..442ec2f25 100644 --- a/OpenCL/m28502_a1-pure.cl +++ b/OpenCL/m28502_a1-pure.cl @@ -19,7 +19,7 @@ #include M2S(INCLUDE_PATH/inc_ecc_secp256k1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m28502_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m28502_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -201,7 +201,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28502_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m28502_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m28502_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m28502_a3-pure.cl b/OpenCL/m28502_a3-pure.cl index eec975cb0..cfdd43275 100644 --- a/OpenCL/m28502_a3-pure.cl +++ b/OpenCL/m28502_a3-pure.cl @@ -19,7 +19,7 @@ #include M2S(INCLUDE_PATH/inc_ecc_secp256k1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m28502_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m28502_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -179,7 +179,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28502_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m28502_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m28502_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m28505_a0-pure.cl b/OpenCL/m28505_a0-pure.cl index d4ae3e7e5..a44a13eac 100644 --- a/OpenCL/m28505_a0-pure.cl +++ b/OpenCL/m28505_a0-pure.cl @@ -21,7 +21,7 @@ #include M2S(INCLUDE_PATH/inc_ecc_secp256k1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m28505_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m28505_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -186,7 +186,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28505_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m28505_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m28505_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m28505_a1-pure.cl b/OpenCL/m28505_a1-pure.cl index 013a70d99..32ba42a3a 100644 --- a/OpenCL/m28505_a1-pure.cl +++ b/OpenCL/m28505_a1-pure.cl @@ -19,7 +19,7 @@ #include M2S(INCLUDE_PATH/inc_ecc_secp256k1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m28505_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m28505_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -224,7 +224,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28505_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m28505_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m28505_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m28505_a3-pure.cl b/OpenCL/m28505_a3-pure.cl index 773732931..8b26928b9 100644 --- a/OpenCL/m28505_a3-pure.cl +++ b/OpenCL/m28505_a3-pure.cl @@ -20,7 +20,7 @@ #include M2S(INCLUDE_PATH/inc_ecc_secp256k1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m28505_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m28505_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -203,7 +203,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28505_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m28505_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m28505_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m28506_a0-pure.cl b/OpenCL/m28506_a0-pure.cl index e8c389f63..90426a852 100644 --- a/OpenCL/m28506_a0-pure.cl +++ b/OpenCL/m28506_a0-pure.cl @@ -21,7 +21,7 @@ #include M2S(INCLUDE_PATH/inc_ecc_secp256k1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m28506_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m28506_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -187,7 +187,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28506_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m28506_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m28506_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m28506_a1-pure.cl b/OpenCL/m28506_a1-pure.cl index 0d6051847..9d3cbd471 100644 --- a/OpenCL/m28506_a1-pure.cl +++ b/OpenCL/m28506_a1-pure.cl @@ -19,7 +19,7 @@ #include M2S(INCLUDE_PATH/inc_ecc_secp256k1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m28506_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m28506_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -225,7 +225,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28506_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m28506_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m28506_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m28506_a3-pure.cl b/OpenCL/m28506_a3-pure.cl index 70c7f57b6..daf409411 100644 --- a/OpenCL/m28506_a3-pure.cl +++ b/OpenCL/m28506_a3-pure.cl @@ -19,7 +19,7 @@ #include M2S(INCLUDE_PATH/inc_ecc_secp256k1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m28506_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m28506_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -203,7 +203,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28506_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m28506_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m28506_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m28600-pure.cl b/OpenCL/m28600-pure.cl index f7b6084d9..e119404e2 100644 --- a/OpenCL/m28600-pure.cl +++ b/OpenCL/m28600-pure.cl @@ -79,7 +79,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m28600_init (KERN_ATTR_TMPS_ESALT (postgres_sha256_tmp_t, postgres_sha256_t)) +KERNEL_FQ KERNEL_FA void m28600_init (KERN_ATTR_TMPS_ESALT (postgres_sha256_tmp_t, postgres_sha256_t)) { /** * base @@ -163,7 +163,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28600_init (KERN_ATTR_TMPS_ESALT (postgres_sha256_tm } } -KERNEL_FQ void HC_ATTR_SEQ m28600_loop (KERN_ATTR_TMPS_ESALT (postgres_sha256_tmp_t, postgres_sha256_t)) +KERNEL_FQ KERNEL_FA void m28600_loop (KERN_ATTR_TMPS_ESALT (postgres_sha256_tmp_t, postgres_sha256_t)) { const u64 gid = get_global_id (0); @@ -269,7 +269,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28600_loop (KERN_ATTR_TMPS_ESALT (postgres_sha256_tm } } -KERNEL_FQ void HC_ATTR_SEQ m28600_comp (KERN_ATTR_TMPS_ESALT (postgres_sha256_tmp_t, postgres_sha256_t)) +KERNEL_FQ KERNEL_FA void m28600_comp (KERN_ATTR_TMPS_ESALT (postgres_sha256_tmp_t, postgres_sha256_t)) { /** * base diff --git a/OpenCL/m28700_a0-optimized.cl b/OpenCL/m28700_a0-optimized.cl index 7bbc234f3..d946fdd59 100644 --- a/OpenCL/m28700_a0-optimized.cl +++ b/OpenCL/m28700_a0-optimized.cl @@ -139,7 +139,7 @@ DECLSPEC void hmac_sha256_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m28700_m04 (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) +KERNEL_FQ KERNEL_FA void m28700_m04 (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) { /** * modifier @@ -431,15 +431,15 @@ KERNEL_FQ void HC_ATTR_SEQ m28700_m04 (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m28700_m08 (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) +KERNEL_FQ KERNEL_FA void m28700_m08 (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m28700_m16 (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) +KERNEL_FQ KERNEL_FA void m28700_m16 (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m28700_s04 (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) +KERNEL_FQ KERNEL_FA void m28700_s04 (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) { /** * modifier @@ -743,10 +743,10 @@ KERNEL_FQ void HC_ATTR_SEQ m28700_s04 (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m28700_s08 (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) +KERNEL_FQ KERNEL_FA void m28700_s08 (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m28700_s16 (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) +KERNEL_FQ KERNEL_FA void m28700_s16 (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) { } diff --git a/OpenCL/m28700_a0-pure.cl b/OpenCL/m28700_a0-pure.cl index 49f2ee843..2fb4615eb 100644 --- a/OpenCL/m28700_a0-pure.cl +++ b/OpenCL/m28700_a0-pure.cl @@ -38,7 +38,7 @@ typedef struct aws4_sig_v4 } aws4_sig_v4_t; -KERNEL_FQ void HC_ATTR_SEQ m28700_mxx (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) +KERNEL_FQ KERNEL_FA void m28700_mxx (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) { /** * modifier @@ -264,7 +264,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28700_mxx (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m28700_sxx (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) +KERNEL_FQ KERNEL_FA void m28700_sxx (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) { /** * modifier diff --git a/OpenCL/m28700_a1-optimized.cl b/OpenCL/m28700_a1-optimized.cl index 6f8bfb0ab..9de44dfc9 100644 --- a/OpenCL/m28700_a1-optimized.cl +++ b/OpenCL/m28700_a1-optimized.cl @@ -137,7 +137,7 @@ DECLSPEC void hmac_sha256_run (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m28700_m04 (KERN_ATTR_ESALT (aws4_sig_v4_t)) +KERNEL_FQ KERNEL_FA void m28700_m04 (KERN_ATTR_ESALT (aws4_sig_v4_t)) { /** * modifier @@ -498,15 +498,15 @@ KERNEL_FQ void HC_ATTR_SEQ m28700_m04 (KERN_ATTR_ESALT (aws4_sig_v4_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m28700_m08 (KERN_ATTR_ESALT (aws4_sig_v4_t)) +KERNEL_FQ KERNEL_FA void m28700_m08 (KERN_ATTR_ESALT (aws4_sig_v4_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m28700_m16 (KERN_ATTR_ESALT (aws4_sig_v4_t)) +KERNEL_FQ KERNEL_FA void m28700_m16 (KERN_ATTR_ESALT (aws4_sig_v4_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m28700_s04 (KERN_ATTR_ESALT (aws4_sig_v4_t)) +KERNEL_FQ KERNEL_FA void m28700_s04 (KERN_ATTR_ESALT (aws4_sig_v4_t)) { /** * modifier @@ -879,10 +879,10 @@ KERNEL_FQ void HC_ATTR_SEQ m28700_s04 (KERN_ATTR_ESALT (aws4_sig_v4_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m28700_s08 (KERN_ATTR_ESALT (aws4_sig_v4_t)) +KERNEL_FQ KERNEL_FA void m28700_s08 (KERN_ATTR_ESALT (aws4_sig_v4_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m28700_s16 (KERN_ATTR_ESALT (aws4_sig_v4_t)) +KERNEL_FQ KERNEL_FA void m28700_s16 (KERN_ATTR_ESALT (aws4_sig_v4_t)) { } diff --git a/OpenCL/m28700_a1-pure.cl b/OpenCL/m28700_a1-pure.cl index f99ee5f72..b64ae5e79 100644 --- a/OpenCL/m28700_a1-pure.cl +++ b/OpenCL/m28700_a1-pure.cl @@ -36,7 +36,7 @@ typedef struct aws4_sig_v4 } aws4_sig_v4_t; -KERNEL_FQ void HC_ATTR_SEQ m28700_mxx (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) +KERNEL_FQ KERNEL_FA void m28700_mxx (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) { /** * modifier @@ -285,7 +285,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28700_mxx (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m28700_sxx (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) +KERNEL_FQ KERNEL_FA void m28700_sxx (KERN_ATTR_RULES_ESALT (aws4_sig_v4_t)) { /** * modifier diff --git a/OpenCL/m28700_a3-optimized.cl b/OpenCL/m28700_a3-optimized.cl index 3fb758087..e3d66daa8 100644 --- a/OpenCL/m28700_a3-optimized.cl +++ b/OpenCL/m28700_a3-optimized.cl @@ -701,7 +701,7 @@ DECLSPEC void m28700s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m28700_m04 (KERN_ATTR_ESALT (aws4_sig_v4_t)) +KERNEL_FQ KERNEL_FA void m28700_m04 (KERN_ATTR_ESALT (aws4_sig_v4_t)) { /** * base @@ -750,7 +750,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28700_m04 (KERN_ATTR_ESALT (aws4_sig_v4_t)) m28700m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m28700_m08 (KERN_ATTR_ESALT (aws4_sig_v4_t)) +KERNEL_FQ KERNEL_FA void m28700_m08 (KERN_ATTR_ESALT (aws4_sig_v4_t)) { /** * base @@ -799,7 +799,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28700_m08 (KERN_ATTR_ESALT (aws4_sig_v4_t)) m28700m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m28700_m16 (KERN_ATTR_ESALT (aws4_sig_v4_t)) +KERNEL_FQ KERNEL_FA void m28700_m16 (KERN_ATTR_ESALT (aws4_sig_v4_t)) { /** * base @@ -848,7 +848,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28700_m16 (KERN_ATTR_ESALT (aws4_sig_v4_t)) m28700m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m28700_s04 (KERN_ATTR_ESALT (aws4_sig_v4_t)) +KERNEL_FQ KERNEL_FA void m28700_s04 (KERN_ATTR_ESALT (aws4_sig_v4_t)) { /** * base @@ -897,7 +897,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28700_s04 (KERN_ATTR_ESALT (aws4_sig_v4_t)) m28700s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m28700_s08 (KERN_ATTR_ESALT (aws4_sig_v4_t)) +KERNEL_FQ KERNEL_FA void m28700_s08 (KERN_ATTR_ESALT (aws4_sig_v4_t)) { /** * base @@ -946,7 +946,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28700_s08 (KERN_ATTR_ESALT (aws4_sig_v4_t)) m28700s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m28700_s16 (KERN_ATTR_ESALT (aws4_sig_v4_t)) +KERNEL_FQ KERNEL_FA void m28700_s16 (KERN_ATTR_ESALT (aws4_sig_v4_t)) { /** * base diff --git a/OpenCL/m28700_a3-pure.cl b/OpenCL/m28700_a3-pure.cl index 358854684..11abdb800 100644 --- a/OpenCL/m28700_a3-pure.cl +++ b/OpenCL/m28700_a3-pure.cl @@ -36,7 +36,7 @@ typedef struct aws4_sig_v4 } aws4_sig_v4_t; -KERNEL_FQ void HC_ATTR_SEQ m28700_mxx (KERN_ATTR_VECTOR_ESALT (aws4_sig_v4_t)) +KERNEL_FQ KERNEL_FA void m28700_mxx (KERN_ATTR_VECTOR_ESALT (aws4_sig_v4_t)) { /** * modifier @@ -246,7 +246,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28700_mxx (KERN_ATTR_VECTOR_ESALT (aws4_sig_v4_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m28700_sxx (KERN_ATTR_VECTOR_ESALT (aws4_sig_v4_t)) +KERNEL_FQ KERNEL_FA void m28700_sxx (KERN_ATTR_VECTOR_ESALT (aws4_sig_v4_t)) { /** * modifier diff --git a/OpenCL/m28800-pure.cl b/OpenCL/m28800-pure.cl index 31882693d..b822a17b8 100644 --- a/OpenCL/m28800-pure.cl +++ b/OpenCL/m28800-pure.cl @@ -114,7 +114,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m28800_init (KERN_ATTR_TMPS_ESALT (krb5db_17_tmp_t, krb5db_17_t)) +KERNEL_FQ KERNEL_FA void m28800_init (KERN_ATTR_TMPS_ESALT (krb5db_17_tmp_t, krb5db_17_t)) { /** * base @@ -192,7 +192,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28800_init (KERN_ATTR_TMPS_ESALT (krb5db_17_tmp_t, k } } -KERNEL_FQ void HC_ATTR_SEQ m28800_loop (KERN_ATTR_TMPS_ESALT (krb5db_17_tmp_t, krb5db_17_t)) +KERNEL_FQ KERNEL_FA void m28800_loop (KERN_ATTR_TMPS_ESALT (krb5db_17_tmp_t, krb5db_17_t)) { /** * base @@ -280,7 +280,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28800_loop (KERN_ATTR_TMPS_ESALT (krb5db_17_tmp_t, k } } -KERNEL_FQ void HC_ATTR_SEQ m28800_comp (KERN_ATTR_TMPS_ESALT (krb5db_17_tmp_t, krb5db_17_t)) +KERNEL_FQ KERNEL_FA void m28800_comp (KERN_ATTR_TMPS_ESALT (krb5db_17_tmp_t, krb5db_17_t)) { /** * base diff --git a/OpenCL/m28900-pure.cl b/OpenCL/m28900-pure.cl index 12965e599..9c018bd7e 100644 --- a/OpenCL/m28900-pure.cl +++ b/OpenCL/m28900-pure.cl @@ -114,7 +114,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m28900_init (KERN_ATTR_TMPS_ESALT (krb5db_18_tmp_t, krb5db_18_t)) +KERNEL_FQ KERNEL_FA void m28900_init (KERN_ATTR_TMPS_ESALT (krb5db_18_tmp_t, krb5db_18_t)) { /** * base @@ -192,7 +192,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28900_init (KERN_ATTR_TMPS_ESALT (krb5db_18_tmp_t, k } } -KERNEL_FQ void HC_ATTR_SEQ m28900_loop (KERN_ATTR_TMPS_ESALT (krb5db_18_tmp_t, krb5db_18_t)) +KERNEL_FQ KERNEL_FA void m28900_loop (KERN_ATTR_TMPS_ESALT (krb5db_18_tmp_t, krb5db_18_t)) { /** * base @@ -280,7 +280,7 @@ KERNEL_FQ void HC_ATTR_SEQ m28900_loop (KERN_ATTR_TMPS_ESALT (krb5db_18_tmp_t, k } } -KERNEL_FQ void HC_ATTR_SEQ m28900_comp (KERN_ATTR_TMPS_ESALT (krb5db_18_tmp_t, krb5db_18_t)) +KERNEL_FQ KERNEL_FA void m28900_comp (KERN_ATTR_TMPS_ESALT (krb5db_18_tmp_t, krb5db_18_t)) { /** * base diff --git a/OpenCL/m29000_a0-pure.cl b/OpenCL/m29000_a0-pure.cl index 3aaf9ae75..30c774b91 100644 --- a/OpenCL/m29000_a0-pure.cl +++ b/OpenCL/m29000_a0-pure.cl @@ -26,7 +26,7 @@ typedef struct sha1_double_salt } sha1_double_salt_t; -KERNEL_FQ void HC_ATTR_SEQ m29000_mxx (KERN_ATTR_RULES_ESALT (sha1_double_salt_t)) +KERNEL_FQ KERNEL_FA void m29000_mxx (KERN_ATTR_RULES_ESALT (sha1_double_salt_t)) { /** * modifier @@ -112,7 +112,7 @@ KERNEL_FQ void HC_ATTR_SEQ m29000_mxx (KERN_ATTR_RULES_ESALT (sha1_double_salt_t } } -KERNEL_FQ void HC_ATTR_SEQ m29000_sxx (KERN_ATTR_RULES_ESALT (sha1_double_salt_t)) +KERNEL_FQ KERNEL_FA void m29000_sxx (KERN_ATTR_RULES_ESALT (sha1_double_salt_t)) { /** * modifier diff --git a/OpenCL/m29000_a1-pure.cl b/OpenCL/m29000_a1-pure.cl index b39ab4bc2..0e4ef3265 100644 --- a/OpenCL/m29000_a1-pure.cl +++ b/OpenCL/m29000_a1-pure.cl @@ -24,7 +24,7 @@ typedef struct sha1_double_salt } sha1_double_salt_t; -KERNEL_FQ void HC_ATTR_SEQ m29000_mxx (KERN_ATTR_ESALT (sha1_double_salt_t)) +KERNEL_FQ KERNEL_FA void m29000_mxx (KERN_ATTR_ESALT (sha1_double_salt_t)) { /** * modifier @@ -115,7 +115,7 @@ KERNEL_FQ void HC_ATTR_SEQ m29000_mxx (KERN_ATTR_ESALT (sha1_double_salt_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m29000_sxx (KERN_ATTR_ESALT (sha1_double_salt_t)) +KERNEL_FQ KERNEL_FA void m29000_sxx (KERN_ATTR_ESALT (sha1_double_salt_t)) { /** * modifier diff --git a/OpenCL/m29000_a3-pure.cl b/OpenCL/m29000_a3-pure.cl index 53d188034..19823bfcd 100644 --- a/OpenCL/m29000_a3-pure.cl +++ b/OpenCL/m29000_a3-pure.cl @@ -24,7 +24,7 @@ typedef struct sha1_double_salt } sha1_double_salt_t; -KERNEL_FQ void HC_ATTR_SEQ m29000_mxx (KERN_ATTR_VECTOR_ESALT (sha1_double_salt_t)) +KERNEL_FQ KERNEL_FA void m29000_mxx (KERN_ATTR_VECTOR_ESALT (sha1_double_salt_t)) { /** * modifier @@ -121,7 +121,7 @@ KERNEL_FQ void HC_ATTR_SEQ m29000_mxx (KERN_ATTR_VECTOR_ESALT (sha1_double_salt_ } } -KERNEL_FQ void HC_ATTR_SEQ m29000_sxx (KERN_ATTR_VECTOR_ESALT (sha1_double_salt_t)) +KERNEL_FQ KERNEL_FA void m29000_sxx (KERN_ATTR_VECTOR_ESALT (sha1_double_salt_t)) { /** * modifier diff --git a/OpenCL/m29100_a0-pure.cl b/OpenCL/m29100_a0-pure.cl index 5bc4830e3..6176de75d 100644 --- a/OpenCL/m29100_a0-pure.cl +++ b/OpenCL/m29100_a0-pure.cl @@ -17,7 +17,7 @@ #endif -KERNEL_FQ void HC_ATTR_SEQ m29100_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m29100_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -104,7 +104,7 @@ KERNEL_FQ void HC_ATTR_SEQ m29100_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m29100_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m29100_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m29100_a1-pure.cl b/OpenCL/m29100_a1-pure.cl index 72cd63b64..de8f95da2 100644 --- a/OpenCL/m29100_a1-pure.cl +++ b/OpenCL/m29100_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m29100_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m29100_mxx (KERN_ATTR_BASIC ()) { /** @@ -124,7 +124,7 @@ KERNEL_FQ void HC_ATTR_SEQ m29100_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m29100_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m29100_sxx (KERN_ATTR_BASIC ()) { /** diff --git a/OpenCL/m29100_a3-pure.cl b/OpenCL/m29100_a3-pure.cl index 28a341d39..d8aff6810 100644 --- a/OpenCL/m29100_a3-pure.cl +++ b/OpenCL/m29100_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha1.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m29100_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m29100_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -110,7 +110,7 @@ KERNEL_FQ void HC_ATTR_SEQ m29100_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m29100_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m29100_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m29200_a0-pure.cl b/OpenCL/m29200_a0-pure.cl index 1d019d2b5..e16fd9f2e 100644 --- a/OpenCL/m29200_a0-pure.cl +++ b/OpenCL/m29200_a0-pure.cl @@ -32,7 +32,7 @@ typedef struct radmin3 } radmin3_t; -KERNEL_FQ void HC_ATTR_SEQ m29200_mxx (KERN_ATTR_RULES_ESALT (radmin3_t)) +KERNEL_FQ KERNEL_FA void m29200_mxx (KERN_ATTR_RULES_ESALT (radmin3_t)) { /** * modifier @@ -288,7 +288,7 @@ KERNEL_FQ void HC_ATTR_SEQ m29200_mxx (KERN_ATTR_RULES_ESALT (radmin3_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m29200_sxx (KERN_ATTR_RULES_ESALT (radmin3_t)) +KERNEL_FQ KERNEL_FA void m29200_sxx (KERN_ATTR_RULES_ESALT (radmin3_t)) { /** * modifier diff --git a/OpenCL/m29200_a1-pure.cl b/OpenCL/m29200_a1-pure.cl index 163d050d2..d0d30a1e9 100644 --- a/OpenCL/m29200_a1-pure.cl +++ b/OpenCL/m29200_a1-pure.cl @@ -30,7 +30,7 @@ typedef struct radmin3 } radmin3_t; -KERNEL_FQ void HC_ATTR_SEQ m29200_mxx (KERN_ATTR_ESALT (radmin3_t)) +KERNEL_FQ KERNEL_FA void m29200_mxx (KERN_ATTR_ESALT (radmin3_t)) { /** * modifier @@ -291,7 +291,7 @@ KERNEL_FQ void HC_ATTR_SEQ m29200_mxx (KERN_ATTR_ESALT (radmin3_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m29200_sxx (KERN_ATTR_ESALT (radmin3_t)) +KERNEL_FQ KERNEL_FA void m29200_sxx (KERN_ATTR_ESALT (radmin3_t)) { /** * modifier diff --git a/OpenCL/m29200_a3-pure.cl b/OpenCL/m29200_a3-pure.cl index 880b2a4f9..e8ea5b85b 100644 --- a/OpenCL/m29200_a3-pure.cl +++ b/OpenCL/m29200_a3-pure.cl @@ -30,7 +30,7 @@ typedef struct radmin3 } radmin3_t; -KERNEL_FQ void HC_ATTR_SEQ m29200_mxx (KERN_ATTR_VECTOR_ESALT (radmin3_t)) +KERNEL_FQ KERNEL_FA void m29200_mxx (KERN_ATTR_VECTOR_ESALT (radmin3_t)) { /** * modifier @@ -298,7 +298,7 @@ KERNEL_FQ void HC_ATTR_SEQ m29200_mxx (KERN_ATTR_VECTOR_ESALT (radmin3_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m29200_sxx (KERN_ATTR_VECTOR_ESALT (radmin3_t)) +KERNEL_FQ KERNEL_FA void m29200_sxx (KERN_ATTR_VECTOR_ESALT (radmin3_t)) { /** * modifier diff --git a/OpenCL/m29600-pure.cl b/OpenCL/m29600-pure.cl index 586543fc1..e07a0637e 100644 --- a/OpenCL/m29600-pure.cl +++ b/OpenCL/m29600-pure.cl @@ -75,7 +75,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m29600_init (KERN_ATTR_TMPS_ESALT (pbkdf_sha1_tmp_t,terra_t)) +KERNEL_FQ KERNEL_FA void m29600_init (KERN_ATTR_TMPS_ESALT (pbkdf_sha1_tmp_t,terra_t)) { const u64 gid = get_global_id (0); if (gid >= GID_CNT) return; @@ -155,7 +155,7 @@ KERNEL_FQ void HC_ATTR_SEQ m29600_init (KERN_ATTR_TMPS_ESALT (pbkdf_sha1_tmp_t,t } } -KERNEL_FQ void HC_ATTR_SEQ m29600_loop (KERN_ATTR_TMPS_ESALT (pbkdf_sha1_tmp_t,terra_t)) +KERNEL_FQ KERNEL_FA void m29600_loop (KERN_ATTR_TMPS_ESALT (pbkdf_sha1_tmp_t,terra_t)) { const u64 gid = get_global_id (0); @@ -241,7 +241,7 @@ KERNEL_FQ void HC_ATTR_SEQ m29600_loop (KERN_ATTR_TMPS_ESALT (pbkdf_sha1_tmp_t,t } } -KERNEL_FQ void HC_ATTR_SEQ m29600_comp (KERN_ATTR_TMPS_ESALT (pbkdf_sha1_tmp_t,terra_t)) +KERNEL_FQ KERNEL_FA void m29600_comp (KERN_ATTR_TMPS_ESALT (pbkdf_sha1_tmp_t,terra_t)) { /** * base diff --git a/OpenCL/m29700-pure.cl b/OpenCL/m29700-pure.cl index c970848e2..61171e391 100644 --- a/OpenCL/m29700-pure.cl +++ b/OpenCL/m29700-pure.cl @@ -45,7 +45,7 @@ typedef struct keepass } keepass_t; -KERNEL_FQ void HC_ATTR_SEQ m29700_init (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, keepass_t)) +KERNEL_FQ KERNEL_FA void m29700_init (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, keepass_t)) { /** * base @@ -84,7 +84,7 @@ KERNEL_FQ void HC_ATTR_SEQ m29700_init (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, kee tmps[gid].tmp_digest[7] = digest[7]; } -KERNEL_FQ void HC_ATTR_SEQ m29700_loop (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, keepass_t)) +KERNEL_FQ KERNEL_FA void m29700_loop (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, keepass_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); @@ -172,7 +172,7 @@ KERNEL_FQ void HC_ATTR_SEQ m29700_loop (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, kee tmps[gid].tmp_digest[7] = data1[3]; } -KERNEL_FQ void HC_ATTR_SEQ m29700_comp (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, keepass_t)) +KERNEL_FQ KERNEL_FA void m29700_comp (KERN_ATTR_TMPS_ESALT (keepass_tmp_t, keepass_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m29800-pure.cl b/OpenCL/m29800-pure.cl deleted file mode 100644 index 98d3fca70..000000000 --- a/OpenCL/m29800-pure.cl +++ /dev/null @@ -1,249 +0,0 @@ -/** - * Author......: See docs/credits.txt - * License.....: MIT - */ - -#ifdef KERNEL_STATIC -#include M2S(INCLUDE_PATH/inc_vendor.h) -#include M2S(INCLUDE_PATH/inc_types.h) -#include M2S(INCLUDE_PATH/inc_platform.cl) -#include M2S(INCLUDE_PATH/inc_common.cl) -#include M2S(INCLUDE_PATH/inc_hash_sha256.cl) -#include M2S(INCLUDE_PATH/inc_hash_scrypt.cl) -#include M2S(INCLUDE_PATH/inc_cipher_aes.cl) -#endif - -typedef struct -{ - #ifndef SCRYPT_TMP_ELEM - #define SCRYPT_TMP_ELEM 1 - #endif - - u32 P[SCRYPT_TMP_ELEM]; - -} scrypt_tmp_t; - -KERNEL_FQ void HC_ATTR_SEQ m29800_init (KERN_ATTR_TMPS (scrypt_tmp_t)) -{ - const u64 gid = get_global_id (0); - - if (gid >= GID_CNT) return; - - u32 w[128] = { 0 }; - - hc_enc_t hc_enc; - - hc_enc_init (&hc_enc); - - const int w_len = hc_enc_next_global (&hc_enc, pws[gid].i, pws[gid].pw_len, 256, w, sizeof (w)); - - if (w_len == -1) return; - - // utf16le to utf16be - for (int i = 0, j = 0; i < w_len; i += 4, j += 1) - { - w[j] = ((w[j] >> 8) & 0x00ff00ff) - | ((w[j] << 8) & 0xff00ff00); - } - - u32 s[16] = { 0 }; - - s[0] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[0]); - s[1] = hc_swap32_S (salt_bufs[SALT_POS_HOST].salt_buf[1]); - - u32 out[SCRYPT_CNT4]; - - scrypt_pbkdf2_pp (w, w_len, s, 8, out, SCRYPT_SZ); - - scrypt_blockmix_in (out, SCRYPT_SZ); - - for (u32 i = 0; i < SCRYPT_CNT4; i++) tmps[gid].P[i] = out[i]; -} - -KERNEL_FQ void HC_ATTR_SEQ m29800_loop_prepare (KERN_ATTR_TMPS (scrypt_tmp_t)) -{ - const u64 gid = get_global_id (0); - const u64 lid = get_local_id (0); - const u64 lsz = get_local_size (0); - const u64 bid = get_group_id (0); - - if (gid >= GID_CNT) return; - - u32 X[STATE_CNT4]; - - GLOBAL_AS u32 *P = tmps[gid].P + (SALT_REPEAT * STATE_CNT4); - - for (u32 z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - - scrypt_smix_init (X, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); - - for (u32 z = 0; z < STATE_CNT4; z++) P[z] = X[z]; -} - -KERNEL_FQ void HC_ATTR_SEQ m29800_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) -{ - const u64 gid = get_global_id (0); - const u64 lid = get_local_id (0); - const u64 lsz = get_local_size (0); - const u64 bid = get_group_id (0); - - if (gid >= GID_CNT) return; - - u32 X[STATE_CNT4]; - u32 T[STATE_CNT4]; - - GLOBAL_AS u32 *P = tmps[gid].P + (SALT_REPEAT * STATE_CNT4); - - for (u32 z = 0; z < STATE_CNT4; z++) X[z] = P[z]; - - scrypt_smix_loop (X, T, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, gid, lid, lsz, bid); - - for (u32 z = 0; z < STATE_CNT4; z++) P[z] = X[z]; -} - -KERNEL_FQ void HC_ATTR_SEQ m29800_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) -{ - const u64 gid = get_global_id (0); - const u64 lid = get_local_id (0); - const u64 lsz = get_local_size (0); - - /** - * aes shared - */ - - #ifdef REAL_SHM - - LOCAL_VK u32 s_td0[256]; - LOCAL_VK u32 s_td1[256]; - LOCAL_VK u32 s_td2[256]; - LOCAL_VK u32 s_td3[256]; - LOCAL_VK u32 s_td4[256]; - - LOCAL_VK u32 s_te0[256]; - LOCAL_VK u32 s_te1[256]; - LOCAL_VK u32 s_te2[256]; - LOCAL_VK u32 s_te3[256]; - LOCAL_VK u32 s_te4[256]; - - for (u32 i = lid; i < 256; i += lsz) - { - s_td0[i] = td0[i]; - s_td1[i] = td1[i]; - s_td2[i] = td2[i]; - s_td3[i] = td3[i]; - s_td4[i] = td4[i]; - - s_te0[i] = te0[i]; - s_te1[i] = te1[i]; - s_te2[i] = te2[i]; - s_te3[i] = te3[i]; - s_te4[i] = te4[i]; - } - - SYNC_THREADS (); - - #else - - CONSTANT_AS u32a *s_td0 = td0; - CONSTANT_AS u32a *s_td1 = td1; - CONSTANT_AS u32a *s_td2 = td2; - CONSTANT_AS u32a *s_td3 = td3; - CONSTANT_AS u32a *s_td4 = td4; - - CONSTANT_AS u32a *s_te0 = te0; - CONSTANT_AS u32a *s_te1 = te1; - CONSTANT_AS u32a *s_te2 = te2; - CONSTANT_AS u32a *s_te3 = te3; - CONSTANT_AS u32a *s_te4 = te4; - - #endif - - if (gid >= GID_CNT) return; - - /** - * 2nd pbkdf2, creates B - */ - - u32 w[128] = { 0 }; - - hc_enc_t hc_enc; - - hc_enc_init (&hc_enc); - - const int w_len = hc_enc_next_global (&hc_enc, pws[gid].i, pws[gid].pw_len, 256, w, sizeof (w)); - - if (w_len == -1) return; - - // utf16le to utf16be - for (int i = 0, j = 0; i < w_len; i += 4, j += 1) - { - w[j] = ((w[j] >> 8) & 0x00ff00ff) - | ((w[j] << 8) & 0xff00ff00); - } - - - u32 x[SCRYPT_CNT4]; - - for (u32 i = 0; i < SCRYPT_CNT4; i++) x[i] = tmps[gid].P[i]; - - scrypt_blockmix_out (x, SCRYPT_SZ); - - u32 out[8]; - - scrypt_pbkdf2_pp (w, w_len, x, SCRYPT_SZ, out, 32); - - // AES256-CBC decrypt - - u32 key[8]; - - key[0] = out[0]; - key[1] = out[1]; - key[2] = out[2]; - key[3] = out[3]; - key[4] = out[4]; - key[5] = out[5]; - key[6] = out[6]; - key[7] = out[7]; - - #define KEYLEN 60 - - u32 ks[KEYLEN]; - - aes256_set_decrypt_key (ks, key, s_te0, s_te1, s_te2, s_te3, s_td0, s_td1, s_td2, s_td3); - - u32 iv[4]; - - iv[0] = salt_bufs[SALT_POS_HOST].salt_buf[2]; - iv[1] = salt_bufs[SALT_POS_HOST].salt_buf[3]; - iv[2] = salt_bufs[SALT_POS_HOST].salt_buf[4]; - iv[3] = salt_bufs[SALT_POS_HOST].salt_buf[5]; - - u32 enc[4]; - - enc[0] = salt_bufs[SALT_POS_HOST].salt_buf[6]; - enc[1] = salt_bufs[SALT_POS_HOST].salt_buf[7]; - enc[2] = salt_bufs[SALT_POS_HOST].salt_buf[8]; - enc[3] = salt_bufs[SALT_POS_HOST].salt_buf[9]; - - u32 dec[4]; - - aes256_decrypt (ks, enc, dec, s_td0, s_td1, s_td2, s_td3, s_td4); - - dec[0] ^= iv[0]; - dec[1] ^= iv[1]; - dec[2] ^= iv[2]; - dec[3] ^= iv[3]; - - if ((dec[0] == 0x10101010) && - (dec[1] == 0x10101010) && - (dec[2] == 0x10101010) && - (dec[3] == 0x10101010)) - { - if (hc_atomic_inc (&hashes_shown[DIGESTS_OFFSET_HOST]) == 0) - { - mark_hash (plains_buf, d_return_buf, SALT_POS_HOST, DIGESTS_CNT, 0, DIGESTS_OFFSET_HOST + 0, gid, 0, 0, 0); - } - - return; - } -} diff --git a/OpenCL/m29910-pure.cl b/OpenCL/m29910-pure.cl index 191f38884..9bd893ebe 100644 --- a/OpenCL/m29910-pure.cl +++ b/OpenCL/m29910-pure.cl @@ -87,7 +87,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m29910_init (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) +KERNEL_FQ KERNEL_FA void m29910_init (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) { /** * base @@ -173,7 +173,7 @@ KERNEL_FQ void HC_ATTR_SEQ m29910_init (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t } } -KERNEL_FQ void HC_ATTR_SEQ m29910_loop (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) +KERNEL_FQ KERNEL_FA void m29910_loop (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) { const u64 gid = get_global_id (0); @@ -281,7 +281,7 @@ KERNEL_FQ void HC_ATTR_SEQ m29910_loop (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t } } -KERNEL_FQ void HC_ATTR_SEQ m29910_comp (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) +KERNEL_FQ KERNEL_FA void m29910_comp (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m29920-pure.cl b/OpenCL/m29920-pure.cl index c8180bc1b..15317afeb 100644 --- a/OpenCL/m29920-pure.cl +++ b/OpenCL/m29920-pure.cl @@ -87,7 +87,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m29920_init (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) +KERNEL_FQ KERNEL_FA void m29920_init (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) { /** * base @@ -173,7 +173,7 @@ KERNEL_FQ void HC_ATTR_SEQ m29920_init (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t } } -KERNEL_FQ void HC_ATTR_SEQ m29920_loop (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) +KERNEL_FQ KERNEL_FA void m29920_loop (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) { const u64 gid = get_global_id (0); @@ -281,7 +281,7 @@ KERNEL_FQ void HC_ATTR_SEQ m29920_loop (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t } } -KERNEL_FQ void HC_ATTR_SEQ m29920_comp (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) +KERNEL_FQ KERNEL_FA void m29920_comp (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m29930-pure.cl b/OpenCL/m29930-pure.cl index bcd7639a5..d3284a718 100644 --- a/OpenCL/m29930-pure.cl +++ b/OpenCL/m29930-pure.cl @@ -52,7 +52,7 @@ CONSTANT_VK u32a default_salts[32] = 0xeae3f44e, 0xaf4a8f84, 0xf1fab308, 0x8569bef8 }; -KERNEL_FQ void HC_ATTR_SEQ m29930_init (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) +KERNEL_FQ KERNEL_FA void m29930_init (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) { /** * base @@ -81,7 +81,7 @@ KERNEL_FQ void HC_ATTR_SEQ m29930_init (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t tmps[gid].out_buf[3] = 0; } -KERNEL_FQ void HC_ATTR_SEQ m29930_loop (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) +KERNEL_FQ KERNEL_FA void m29930_loop (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) { const u64 gid = get_global_id (0); @@ -154,7 +154,7 @@ KERNEL_FQ void HC_ATTR_SEQ m29930_loop (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t unpackv (tmps, out_buf, gid, 3, out[3]); } -KERNEL_FQ void HC_ATTR_SEQ m29930_comp (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) +KERNEL_FQ KERNEL_FA void m29930_comp (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m29940-pure.cl b/OpenCL/m29940-pure.cl index 1ad96b59d..d321c2bfc 100644 --- a/OpenCL/m29940-pure.cl +++ b/OpenCL/m29940-pure.cl @@ -52,7 +52,7 @@ CONSTANT_VK u32a default_salts[32] = 0xeae3f44e, 0xaf4a8f84, 0xf1fab308, 0x8569bef8 }; -KERNEL_FQ void HC_ATTR_SEQ m29940_init (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) +KERNEL_FQ KERNEL_FA void m29940_init (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) { /** * base @@ -81,7 +81,7 @@ KERNEL_FQ void HC_ATTR_SEQ m29940_init (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t tmps[gid].out_buf[3] = 0; } -KERNEL_FQ void HC_ATTR_SEQ m29940_loop (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) +KERNEL_FQ KERNEL_FA void m29940_loop (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) { const u64 gid = get_global_id (0); @@ -154,7 +154,7 @@ KERNEL_FQ void HC_ATTR_SEQ m29940_loop (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t unpackv (tmps, out_buf, gid, 3, out[3]); } -KERNEL_FQ void HC_ATTR_SEQ m29940_comp (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) +KERNEL_FQ KERNEL_FA void m29940_comp (KERN_ATTR_TMPS_ESALT (encdatavault_tmp_t, encdatavault_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m30420_a0-optimized.cl b/OpenCL/m30420_a0-optimized.cl index e8f9bdccd..9da71c166 100644 --- a/OpenCL/m30420_a0-optimized.cl +++ b/OpenCL/m30420_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m30420_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30420_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -163,15 +163,15 @@ KERNEL_FQ void HC_ATTR_SEQ m30420_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30420_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30420_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m30420_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30420_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m30420_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30420_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -330,10 +330,10 @@ KERNEL_FQ void HC_ATTR_SEQ m30420_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30420_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30420_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m30420_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30420_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m30420_a0-pure.cl b/OpenCL/m30420_a0-pure.cl index 364be8688..52728b163 100644 --- a/OpenCL/m30420_a0-pure.cl +++ b/OpenCL/m30420_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m30420_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30420_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30420_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30420_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30420_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m30420_a1-optimized.cl b/OpenCL/m30420_a1-optimized.cl index 9fb4e7a33..7ca50d36a 100644 --- a/OpenCL/m30420_a1-optimized.cl +++ b/OpenCL/m30420_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m30420_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30420_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -219,15 +219,15 @@ KERNEL_FQ void HC_ATTR_SEQ m30420_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30420_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30420_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m30420_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30420_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m30420_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30420_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -444,10 +444,10 @@ KERNEL_FQ void HC_ATTR_SEQ m30420_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30420_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30420_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m30420_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30420_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m30420_a1-pure.cl b/OpenCL/m30420_a1-pure.cl index 611369c6a..9d803f2e5 100644 --- a/OpenCL/m30420_a1-pure.cl +++ b/OpenCL/m30420_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m30420_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30420_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30420_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30420_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30420_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m30420_a3-optimized.cl b/OpenCL/m30420_a3-optimized.cl index d2fbb33d0..5a2fd1195 100644 --- a/OpenCL/m30420_a3-optimized.cl +++ b/OpenCL/m30420_a3-optimized.cl @@ -258,7 +258,7 @@ DECLSPEC void m30420s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m30420_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m30420_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -298,7 +298,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30420_m04 (KERN_ATTR_VECTOR ()) m30420m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m30420_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m30420_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -338,7 +338,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30420_m08 (KERN_ATTR_VECTOR ()) m30420m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m30420_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m30420_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -378,7 +378,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30420_m16 (KERN_ATTR_VECTOR ()) m30420m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m30420_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m30420_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -418,7 +418,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30420_s04 (KERN_ATTR_VECTOR ()) m30420s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m30420_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m30420_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -458,7 +458,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30420_s08 (KERN_ATTR_VECTOR ()) m30420s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m30420_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m30420_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m30420_a3-pure.cl b/OpenCL/m30420_a3-pure.cl index 44b8a64ca..509eb453d 100644 --- a/OpenCL/m30420_a3-pure.cl +++ b/OpenCL/m30420_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m30420_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m30420_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30420_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30420_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m30420_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m30500_a0-optimized.cl b/OpenCL/m30500_a0-optimized.cl index 83024f6c3..21a8f69b5 100644 --- a/OpenCL/m30500_a0-optimized.cl +++ b/OpenCL/m30500_a0-optimized.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m30500_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30500_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -492,15 +492,15 @@ KERNEL_FQ void HC_ATTR_SEQ m30500_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30500_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30500_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m30500_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30500_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m30500_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30500_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -979,10 +979,10 @@ KERNEL_FQ void HC_ATTR_SEQ m30500_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30500_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30500_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m30500_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30500_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m30500_a0-pure.cl b/OpenCL/m30500_a0-pure.cl index f0f9a1f69..f37f85576 100644 --- a/OpenCL/m30500_a0-pure.cl +++ b/OpenCL/m30500_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m30500_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30500_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -184,7 +184,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30500_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30500_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30500_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m30500_a1-optimized.cl b/OpenCL/m30500_a1-optimized.cl index c9b85c5df..327db8db8 100644 --- a/OpenCL/m30500_a1-optimized.cl +++ b/OpenCL/m30500_a1-optimized.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m30500_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30500_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -549,15 +549,15 @@ KERNEL_FQ void HC_ATTR_SEQ m30500_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30500_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30500_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m30500_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30500_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m30500_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30500_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -1095,10 +1095,10 @@ KERNEL_FQ void HC_ATTR_SEQ m30500_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30500_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30500_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m30500_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30500_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m30500_a1-pure.cl b/OpenCL/m30500_a1-pure.cl index 043aaf6f4..2c13c2262 100644 --- a/OpenCL/m30500_a1-pure.cl +++ b/OpenCL/m30500_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m30500_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30500_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -180,7 +180,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30500_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30500_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30500_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m30500_a3-optimized.cl b/OpenCL/m30500_a3-optimized.cl index 5b44ee9a1..1f7d44408 100644 --- a/OpenCL/m30500_a3-optimized.cl +++ b/OpenCL/m30500_a3-optimized.cl @@ -929,7 +929,7 @@ DECLSPEC void m30500s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m30500_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30500_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -999,7 +999,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30500_m04 (KERN_ATTR_BASIC ()) m30500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m30500_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30500_m08 (KERN_ATTR_BASIC ()) { /** * base @@ -1069,7 +1069,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30500_m08 (KERN_ATTR_BASIC ()) m30500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m30500_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30500_m16 (KERN_ATTR_BASIC ()) { /** * base @@ -1139,7 +1139,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30500_m16 (KERN_ATTR_BASIC ()) m30500m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m30500_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30500_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -1209,7 +1209,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30500_s04 (KERN_ATTR_BASIC ()) m30500s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m30500_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30500_s08 (KERN_ATTR_BASIC ()) { /** * base @@ -1279,7 +1279,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30500_s08 (KERN_ATTR_BASIC ()) m30500s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m30500_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30500_s16 (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m30500_a3-pure.cl b/OpenCL/m30500_a3-pure.cl index 9813bf2cc..86508df81 100644 --- a/OpenCL/m30500_a3-pure.cl +++ b/OpenCL/m30500_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m30500_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m30500_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -193,7 +193,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30500_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30500_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m30500_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m30600-pure.cl b/OpenCL/m30600-pure.cl index 26b9cc2a0..dc1ebbe2d 100644 --- a/OpenCL/m30600-pure.cl +++ b/OpenCL/m30600-pure.cl @@ -444,7 +444,7 @@ DECLSPEC u32 u16_bin_to_u32_hex (const u32 v) | ((v1 < 10) ? '0' + v1 : 'a' - 10 + v1) << 0; } -KERNEL_FQ void HC_ATTR_SEQ m30600_init (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m30600_init (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base @@ -695,7 +695,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30600_init (KERN_ATTR_TMPS (bcrypt_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m30600_loop (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m30600_loop (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base @@ -898,7 +898,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30600_loop (KERN_ATTR_TMPS (bcrypt_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m30600_comp (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m30600_comp (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base diff --git a/OpenCL/m30700_a0-optimized.cl b/OpenCL/m30700_a0-optimized.cl index e30ed0b93..30d18fbe2 100644 --- a/OpenCL/m30700_a0-optimized.cl +++ b/OpenCL/m30700_a0-optimized.cl @@ -30,7 +30,7 @@ h = 0; \ } -KERNEL_FQ void HC_ATTR_SEQ m30700_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30700_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -186,15 +186,15 @@ KERNEL_FQ void HC_ATTR_SEQ m30700_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30700_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30700_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m30700_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30700_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m30700_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30700_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -383,10 +383,10 @@ KERNEL_FQ void HC_ATTR_SEQ m30700_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30700_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30700_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m30700_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30700_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m30700_a0-pure.cl b/OpenCL/m30700_a0-pure.cl index 031177c3c..2fca62245 100644 --- a/OpenCL/m30700_a0-pure.cl +++ b/OpenCL/m30700_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m30700_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30700_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -71,7 +71,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30700_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30700_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30700_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m30700_a1-optimized.cl b/OpenCL/m30700_a1-optimized.cl index c7a965ac0..d03e60628 100644 --- a/OpenCL/m30700_a1-optimized.cl +++ b/OpenCL/m30700_a1-optimized.cl @@ -28,7 +28,7 @@ h = 0; \ } -KERNEL_FQ void HC_ATTR_SEQ m30700_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30700_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -242,15 +242,15 @@ KERNEL_FQ void HC_ATTR_SEQ m30700_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30700_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30700_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m30700_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30700_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m30700_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30700_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -497,10 +497,10 @@ KERNEL_FQ void HC_ATTR_SEQ m30700_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30700_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30700_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m30700_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30700_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m30700_a1-pure.cl b/OpenCL/m30700_a1-pure.cl index a81352df5..3ba191501 100644 --- a/OpenCL/m30700_a1-pure.cl +++ b/OpenCL/m30700_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m30700_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30700_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -65,7 +65,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30700_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30700_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30700_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m30700_a3-optimized.cl b/OpenCL/m30700_a3-optimized.cl index 3a29cb947..a72d1559d 100644 --- a/OpenCL/m30700_a3-optimized.cl +++ b/OpenCL/m30700_a3-optimized.cl @@ -311,7 +311,7 @@ DECLSPEC void m30700s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m30700_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m30700_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -351,7 +351,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30700_m04 (KERN_ATTR_VECTOR ()) m30700m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m30700_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m30700_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -391,7 +391,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30700_m08 (KERN_ATTR_VECTOR ()) m30700m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m30700_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m30700_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -431,7 +431,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30700_m16 (KERN_ATTR_VECTOR ()) m30700m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m30700_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m30700_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -471,7 +471,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30700_s04 (KERN_ATTR_VECTOR ()) m30700s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m30700_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m30700_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -511,7 +511,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30700_s08 (KERN_ATTR_VECTOR ()) m30700s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m30700_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m30700_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m30700_a3-pure.cl b/OpenCL/m30700_a3-pure.cl index 6cea90732..08d9ba797 100644 --- a/OpenCL/m30700_a3-pure.cl +++ b/OpenCL/m30700_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha256.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m30700_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m30700_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -82,7 +82,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30700_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30700_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m30700_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m30901_a0-pure.cl b/OpenCL/m30901_a0-pure.cl index 4607a2f78..4dd177a04 100644 --- a/OpenCL/m30901_a0-pure.cl +++ b/OpenCL/m30901_a0-pure.cl @@ -42,7 +42,7 @@ DECLSPEC u32 hex_u32_to_u32 (PRIVATE_AS const u32 hex0, PRIVATE_AS const u32 hex return (v); } -KERNEL_FQ void HC_ATTR_SEQ m30901_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30901_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -161,7 +161,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30901_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30901_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30901_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m30901_a1-pure.cl b/OpenCL/m30901_a1-pure.cl index 48d9ca837..a577f6669 100644 --- a/OpenCL/m30901_a1-pure.cl +++ b/OpenCL/m30901_a1-pure.cl @@ -40,7 +40,7 @@ DECLSPEC u32 hex_u32_to_u32 (PRIVATE_AS const u32 hex0, PRIVATE_AS const u32 hex return (v); } -KERNEL_FQ void HC_ATTR_SEQ m30901_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30901_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -187,7 +187,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30901_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30901_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30901_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m30901_a3-pure.cl b/OpenCL/m30901_a3-pure.cl index a154ccc41..66b7557cf 100644 --- a/OpenCL/m30901_a3-pure.cl +++ b/OpenCL/m30901_a3-pure.cl @@ -82,7 +82,7 @@ DECLSPEC u32 hex_u32_to_u32 (PRIVATE_AS const u32 hex0, PRIVATE_AS const u32 hex return (v); } -KERNEL_FQ void HC_ATTR_SEQ m30901_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m30901_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -217,7 +217,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30901_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30901_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m30901_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m30902_a0-pure.cl b/OpenCL/m30902_a0-pure.cl index 864e70ae7..4ceef3158 100644 --- a/OpenCL/m30902_a0-pure.cl +++ b/OpenCL/m30902_a0-pure.cl @@ -42,7 +42,7 @@ DECLSPEC u32 hex_u32_to_u32 (PRIVATE_AS const u32 hex0, PRIVATE_AS const u32 hex return (v); } -KERNEL_FQ void HC_ATTR_SEQ m30902_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30902_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -167,7 +167,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30902_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30902_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30902_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m30902_a1-pure.cl b/OpenCL/m30902_a1-pure.cl index 40c6f1bd5..55f090e62 100644 --- a/OpenCL/m30902_a1-pure.cl +++ b/OpenCL/m30902_a1-pure.cl @@ -40,7 +40,7 @@ DECLSPEC u32 hex_u32_to_u32 (PRIVATE_AS const u32 hex0, PRIVATE_AS const u32 hex return (v); } -KERNEL_FQ void HC_ATTR_SEQ m30902_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30902_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -193,7 +193,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30902_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30902_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30902_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m30902_a3-pure.cl b/OpenCL/m30902_a3-pure.cl index cdae0dc6d..36a7191c4 100644 --- a/OpenCL/m30902_a3-pure.cl +++ b/OpenCL/m30902_a3-pure.cl @@ -40,7 +40,7 @@ DECLSPEC u32 hex_u32_to_u32 (PRIVATE_AS const u32 hex0, PRIVATE_AS const u32 hex return (v); } -KERNEL_FQ void HC_ATTR_SEQ m30902_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m30902_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -181,7 +181,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30902_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30902_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m30902_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m30905_a0-pure.cl b/OpenCL/m30905_a0-pure.cl index 64cdb3fc7..b60085021 100644 --- a/OpenCL/m30905_a0-pure.cl +++ b/OpenCL/m30905_a0-pure.cl @@ -42,7 +42,7 @@ DECLSPEC u32 hex_u32_to_u32 (PRIVATE_AS const u32 hex0, PRIVATE_AS const u32 hex return (v); } -KERNEL_FQ void HC_ATTR_SEQ m30905_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30905_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -185,7 +185,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30905_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30905_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30905_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m30905_a1-pure.cl b/OpenCL/m30905_a1-pure.cl index 533cb231e..5da3ed631 100644 --- a/OpenCL/m30905_a1-pure.cl +++ b/OpenCL/m30905_a1-pure.cl @@ -40,7 +40,7 @@ DECLSPEC u32 hex_u32_to_u32 (PRIVATE_AS const u32 hex0, PRIVATE_AS const u32 hex return (v); } -KERNEL_FQ void HC_ATTR_SEQ m30905_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30905_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -211,7 +211,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30905_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30905_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30905_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m30905_a3-pure.cl b/OpenCL/m30905_a3-pure.cl index 1fb573a39..2efe255bb 100644 --- a/OpenCL/m30905_a3-pure.cl +++ b/OpenCL/m30905_a3-pure.cl @@ -41,7 +41,7 @@ DECLSPEC u32 hex_u32_to_u32 (PRIVATE_AS const u32 hex0, PRIVATE_AS const u32 hex return (v); } -KERNEL_FQ void HC_ATTR_SEQ m30905_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m30905_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -200,7 +200,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30905_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30905_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m30905_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m30906_a0-pure.cl b/OpenCL/m30906_a0-pure.cl index 3b4d7357a..1812284e1 100644 --- a/OpenCL/m30906_a0-pure.cl +++ b/OpenCL/m30906_a0-pure.cl @@ -42,7 +42,7 @@ DECLSPEC u32 hex_u32_to_u32 (PRIVATE_AS const u32 hex0, PRIVATE_AS const u32 hex return (v); } -KERNEL_FQ void HC_ATTR_SEQ m30906_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30906_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -191,7 +191,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30906_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30906_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m30906_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m30906_a1-pure.cl b/OpenCL/m30906_a1-pure.cl index 532e255cd..46b12eb3b 100644 --- a/OpenCL/m30906_a1-pure.cl +++ b/OpenCL/m30906_a1-pure.cl @@ -40,7 +40,7 @@ DECLSPEC u32 hex_u32_to_u32 (PRIVATE_AS const u32 hex0, PRIVATE_AS const u32 hex return (v); } -KERNEL_FQ void HC_ATTR_SEQ m30906_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30906_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -217,7 +217,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30906_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30906_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m30906_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m30906_a3-pure.cl b/OpenCL/m30906_a3-pure.cl index 365bcb787..e2a5a341f 100644 --- a/OpenCL/m30906_a3-pure.cl +++ b/OpenCL/m30906_a3-pure.cl @@ -40,7 +40,7 @@ DECLSPEC u32 hex_u32_to_u32 (PRIVATE_AS const u32 hex0, PRIVATE_AS const u32 hex return (v); } -KERNEL_FQ void HC_ATTR_SEQ m30906_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m30906_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -205,7 +205,7 @@ KERNEL_FQ void HC_ATTR_SEQ m30906_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m30906_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m30906_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m31000_a0-optimized.cl b/OpenCL/m31000_a0-optimized.cl index bbaeabd0e..7c06fb4f2 100644 --- a/OpenCL/m31000_a0-optimized.cl +++ b/OpenCL/m31000_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2s.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m31000_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m31000_m04 (KERN_ATTR_RULES ()) { /** * base @@ -92,15 +92,15 @@ KERNEL_FQ void HC_ATTR_SEQ m31000_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m31000_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m31000_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m31000_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m31000_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m31000_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m31000_s04 (KERN_ATTR_RULES ()) { /** * base @@ -188,10 +188,10 @@ KERNEL_FQ void HC_ATTR_SEQ m31000_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m31000_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m31000_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m31000_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m31000_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m31000_a0-pure.cl b/OpenCL/m31000_a0-pure.cl index a98787f17..6792d0d89 100644 --- a/OpenCL/m31000_a0-pure.cl +++ b/OpenCL/m31000_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2s.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m31000_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m31000_mxx (KERN_ATTR_RULES ()) { /** * base @@ -57,7 +57,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31000_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m31000_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m31000_sxx (KERN_ATTR_RULES ()) { /** * base diff --git a/OpenCL/m31000_a1-optimized.cl b/OpenCL/m31000_a1-optimized.cl index 7d71dd656..22aa3b11b 100644 --- a/OpenCL/m31000_a1-optimized.cl +++ b/OpenCL/m31000_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2s.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m31000_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m31000_m04 (KERN_ATTR_BASIC ()) { /** * base @@ -152,15 +152,15 @@ KERNEL_FQ void HC_ATTR_SEQ m31000_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m31000_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m31000_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m31000_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m31000_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m31000_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m31000_s04 (KERN_ATTR_BASIC ()) { /** * base @@ -311,10 +311,10 @@ KERNEL_FQ void HC_ATTR_SEQ m31000_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m31000_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m31000_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m31000_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m31000_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m31000_a1-pure.cl b/OpenCL/m31000_a1-pure.cl index 659a64057..c9d3c2be6 100644 --- a/OpenCL/m31000_a1-pure.cl +++ b/OpenCL/m31000_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2s.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m31000_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m31000_mxx (KERN_ATTR_BASIC ()) { /** * base @@ -55,7 +55,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31000_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m31000_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m31000_sxx (KERN_ATTR_BASIC ()) { /** * base diff --git a/OpenCL/m31000_a3-optimized.cl b/OpenCL/m31000_a3-optimized.cl index 57c2fe89c..451104801 100644 --- a/OpenCL/m31000_a3-optimized.cl +++ b/OpenCL/m31000_a3-optimized.cl @@ -142,7 +142,7 @@ DECLSPEC void m31000s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m31000_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m31000_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -182,7 +182,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31000_m04 (KERN_ATTR_VECTOR ()) m31000m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m31000_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m31000_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -222,7 +222,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31000_m08 (KERN_ATTR_VECTOR ()) m31000m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m31000_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m31000_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -262,7 +262,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31000_m16 (KERN_ATTR_VECTOR ()) m31000m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m31000_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m31000_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -302,7 +302,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31000_s04 (KERN_ATTR_VECTOR ()) m31000s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m31000_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m31000_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -342,7 +342,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31000_s08 (KERN_ATTR_VECTOR ()) m31000s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m31000_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m31000_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m31000_a3-pure.cl b/OpenCL/m31000_a3-pure.cl index 3128959a8..9456dcde4 100644 --- a/OpenCL/m31000_a3-pure.cl +++ b/OpenCL/m31000_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2s.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m31000_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m31000_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -66,7 +66,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31000_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m31000_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m31000_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m31100_a0-optimized.cl b/OpenCL/m31100_a0-optimized.cl index 1a4c5781e..9cbeeacac 100644 --- a/OpenCL/m31100_a0-optimized.cl +++ b/OpenCL/m31100_a0-optimized.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sm3.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m31100_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m31100_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -163,15 +163,15 @@ KERNEL_FQ void HC_ATTR_SEQ m31100_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m31100_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m31100_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m31100_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m31100_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m31100_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m31100_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -335,10 +335,10 @@ KERNEL_FQ void HC_ATTR_SEQ m31100_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m31100_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m31100_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m31100_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m31100_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m31100_a0-pure.cl b/OpenCL/m31100_a0-pure.cl index d572deacc..9b8f4b2ff 100644 --- a/OpenCL/m31100_a0-pure.cl +++ b/OpenCL/m31100_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sm3.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m31100_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m31100_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -60,7 +60,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31100_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m31100_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m31100_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m31100_a1-optimized.cl b/OpenCL/m31100_a1-optimized.cl index 5dea365e9..2ff8ca04d 100644 --- a/OpenCL/m31100_a1-optimized.cl +++ b/OpenCL/m31100_a1-optimized.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sm3.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m31100_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m31100_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -219,15 +219,15 @@ KERNEL_FQ void HC_ATTR_SEQ m31100_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m31100_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m31100_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m31100_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m31100_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m31100_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m31100_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -449,10 +449,10 @@ KERNEL_FQ void HC_ATTR_SEQ m31100_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m31100_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m31100_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m31100_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m31100_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m31100_a1-pure.cl b/OpenCL/m31100_a1-pure.cl index f80206efb..474962708 100644 --- a/OpenCL/m31100_a1-pure.cl +++ b/OpenCL/m31100_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sm3.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m31100_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m31100_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -56,7 +56,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31100_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m31100_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m31100_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m31100_a3-optimized.cl b/OpenCL/m31100_a3-optimized.cl index be2cecec2..8ec75e45f 100644 --- a/OpenCL/m31100_a3-optimized.cl +++ b/OpenCL/m31100_a3-optimized.cl @@ -498,7 +498,7 @@ DECLSPEC void m31100s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } */ -KERNEL_FQ void HC_ATTR_SEQ m31100_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m31100_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -538,7 +538,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31100_m04 (KERN_ATTR_VECTOR ()) m31100m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m31100_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m31100_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -578,7 +578,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31100_m08 (KERN_ATTR_VECTOR ()) m31100m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m31100_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m31100_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -618,7 +618,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31100_m16 (KERN_ATTR_VECTOR ()) m31100m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m31100_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m31100_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -658,7 +658,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31100_s04 (KERN_ATTR_VECTOR ()) m31100s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m31100_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m31100_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -698,7 +698,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31100_s08 (KERN_ATTR_VECTOR ()) m31100s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m31100_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m31100_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m31100_a3-pure.cl b/OpenCL/m31100_a3-pure.cl index 0f9cd9acc..9db1e470a 100644 --- a/OpenCL/m31100_a3-pure.cl +++ b/OpenCL/m31100_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sm3.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m31100_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m31100_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31100_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m31100_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m31100_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m31200-pure.cl b/OpenCL/m31200-pure.cl index eea813e05..ef634ca11 100644 --- a/OpenCL/m31200-pure.cl +++ b/OpenCL/m31200-pure.cl @@ -70,7 +70,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m31200_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, veeam_vbk_t)) +KERNEL_FQ KERNEL_FA void m31200_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, veeam_vbk_t)) { /** * base @@ -142,7 +142,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31200_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m31200_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, veeam_vbk_t)) +KERNEL_FQ KERNEL_FA void m31200_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, veeam_vbk_t)) { const u64 gid = get_global_id (0); @@ -227,7 +227,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31200_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m31200_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, veeam_vbk_t)) +KERNEL_FQ KERNEL_FA void m31200_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha1_tmp_t, veeam_vbk_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m31300_a0-optimized.cl b/OpenCL/m31300_a0-optimized.cl index 7297fe6ec..abd3c540a 100644 --- a/OpenCL/m31300_a0-optimized.cl +++ b/OpenCL/m31300_a0-optimized.cl @@ -17,7 +17,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m31300_m04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m31300_m04 (KERN_ATTR_RULES ()) { /** * modifier @@ -343,15 +343,15 @@ KERNEL_FQ void HC_ATTR_SEQ m31300_m04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m31300_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m31300_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m31300_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m31300_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m31300_s04 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m31300_s04 (KERN_ATTR_RULES ()) { /** * modifier @@ -689,10 +689,10 @@ KERNEL_FQ void HC_ATTR_SEQ m31300_s04 (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m31300_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m31300_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m31300_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m31300_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m31300_a0-pure.cl b/OpenCL/m31300_a0-pure.cl index ad76c7c68..6e50e7223 100644 --- a/OpenCL/m31300_a0-pure.cl +++ b/OpenCL/m31300_a0-pure.cl @@ -17,7 +17,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m31300_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m31300_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -114,7 +114,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31300_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m31300_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m31300_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m31300_a1-optimized.cl b/OpenCL/m31300_a1-optimized.cl index 7c0b16065..f120c456e 100644 --- a/OpenCL/m31300_a1-optimized.cl +++ b/OpenCL/m31300_a1-optimized.cl @@ -15,7 +15,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m31300_m04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m31300_m04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -403,15 +403,15 @@ KERNEL_FQ void HC_ATTR_SEQ m31300_m04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m31300_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m31300_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m31300_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m31300_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m31300_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m31300_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -812,10 +812,10 @@ KERNEL_FQ void HC_ATTR_SEQ m31300_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m31300_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m31300_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m31300_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m31300_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m31300_a1-pure.cl b/OpenCL/m31300_a1-pure.cl index 4c1bf9d4f..db42e61ea 100644 --- a/OpenCL/m31300_a1-pure.cl +++ b/OpenCL/m31300_a1-pure.cl @@ -15,7 +15,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m31300_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m31300_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -110,7 +110,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31300_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m31300_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m31300_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m31300_a3-optimized.cl b/OpenCL/m31300_a3-optimized.cl index 43b380954..d8f64aaaf 100644 --- a/OpenCL/m31300_a3-optimized.cl +++ b/OpenCL/m31300_a3-optimized.cl @@ -725,7 +725,7 @@ DECLSPEC void m31300s (PRIVATE_AS u32 *w, const u32 pw_len, KERN_ATTR_FUNC_VECTO } } -KERNEL_FQ void HC_ATTR_SEQ m31300_m04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m31300_m04 (KERN_ATTR_VECTOR ()) { /** * base @@ -765,7 +765,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31300_m04 (KERN_ATTR_VECTOR ()) m31300m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m31300_m08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m31300_m08 (KERN_ATTR_VECTOR ()) { /** * base @@ -805,7 +805,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31300_m08 (KERN_ATTR_VECTOR ()) m31300m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m31300_m16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m31300_m16 (KERN_ATTR_VECTOR ()) { /** * base @@ -845,7 +845,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31300_m16 (KERN_ATTR_VECTOR ()) m31300m (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m31300_s04 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m31300_s04 (KERN_ATTR_VECTOR ()) { /** * base @@ -885,7 +885,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31300_s04 (KERN_ATTR_VECTOR ()) m31300s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m31300_s08 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m31300_s08 (KERN_ATTR_VECTOR ()) { /** * base @@ -925,7 +925,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31300_s08 (KERN_ATTR_VECTOR ()) m31300s (w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m31300_s16 (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m31300_s16 (KERN_ATTR_VECTOR ()) { /** * base diff --git a/OpenCL/m31300_a3-pure.cl b/OpenCL/m31300_a3-pure.cl index 93288eb36..d6dd0a02e 100644 --- a/OpenCL/m31300_a3-pure.cl +++ b/OpenCL/m31300_a3-pure.cl @@ -15,7 +15,7 @@ #include M2S(INCLUDE_PATH/inc_hash_md5.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m31300_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m31300_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -165,7 +165,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31300_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m31300_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m31300_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m31400_a0-optimized.cl b/OpenCL/m31400_a0-optimized.cl index eb7dac328..3d386cb7c 100644 --- a/OpenCL/m31400_a0-optimized.cl +++ b/OpenCL/m31400_a0-optimized.cl @@ -303,15 +303,15 @@ DECLSPEC void aes256_scrt_format_VV (PRIVATE_AS u32 *aes_ks, PRIVATE_AS u32x *w, #endif } -KERNEL_FQ void HC_ATTR_SEQ m31400_m16 (KERN_ATTR_RULES_ESALT (scrtv2_t)) +KERNEL_FQ KERNEL_FA void m31400_m16 (KERN_ATTR_RULES_ESALT (scrtv2_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m31400_m08 (KERN_ATTR_RULES_ESALT (scrtv2_t)) +KERNEL_FQ KERNEL_FA void m31400_m08 (KERN_ATTR_RULES_ESALT (scrtv2_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m31400_m04 (KERN_ATTR_RULES_ESALT (scrtv2_t)) +KERNEL_FQ KERNEL_FA void m31400_m04 (KERN_ATTR_RULES_ESALT (scrtv2_t)) { /** * modifier @@ -520,15 +520,15 @@ KERNEL_FQ void HC_ATTR_SEQ m31400_m04 (KERN_ATTR_RULES_ESALT (scrtv2_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m31400_s16 (KERN_ATTR_RULES_ESALT (scrtv2_t)) +KERNEL_FQ KERNEL_FA void m31400_s16 (KERN_ATTR_RULES_ESALT (scrtv2_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m31400_s08 (KERN_ATTR_RULES_ESALT (scrtv2_t)) +KERNEL_FQ KERNEL_FA void m31400_s08 (KERN_ATTR_RULES_ESALT (scrtv2_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m31400_s04 (KERN_ATTR_RULES_ESALT (scrtv2_t)) +KERNEL_FQ KERNEL_FA void m31400_s04 (KERN_ATTR_RULES_ESALT (scrtv2_t)) { /** * modifier diff --git a/OpenCL/m31400_a0-pure.cl b/OpenCL/m31400_a0-pure.cl index 54a7103d5..50a005e33 100644 --- a/OpenCL/m31400_a0-pure.cl +++ b/OpenCL/m31400_a0-pure.cl @@ -135,7 +135,7 @@ DECLSPEC void aes256_scrt_format (PRIVATE_AS u32 *aes_ks, PRIVATE_AS u32 *pw, co AES256_encrypt (aes_ks, hash, out, s_te0, s_te1, s_te2, s_te3, s_te4); } -KERNEL_FQ void HC_ATTR_SEQ m31400_mxx (KERN_ATTR_RULES_ESALT (scrtv2_t)) +KERNEL_FQ KERNEL_FA void m31400_mxx (KERN_ATTR_RULES_ESALT (scrtv2_t)) { /** * modifier @@ -219,7 +219,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31400_mxx (KERN_ATTR_RULES_ESALT (scrtv2_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m31400_sxx (KERN_ATTR_RULES_ESALT (scrtv2_t)) +KERNEL_FQ KERNEL_FA void m31400_sxx (KERN_ATTR_RULES_ESALT (scrtv2_t)) { /** * modifier diff --git a/OpenCL/m31400_a1-optimized.cl b/OpenCL/m31400_a1-optimized.cl index 26419644a..aba0ad4fa 100644 --- a/OpenCL/m31400_a1-optimized.cl +++ b/OpenCL/m31400_a1-optimized.cl @@ -300,7 +300,7 @@ DECLSPEC void aes256_scrt_format_VV (PRIVATE_AS u32 *aes_ks, PRIVATE_AS u32x *w, #endif } -KERNEL_FQ void HC_ATTR_SEQ m31400_m04 (KERN_ATTR_ESALT (scrtv2_t)) +KERNEL_FQ KERNEL_FA void m31400_m04 (KERN_ATTR_ESALT (scrtv2_t)) { /** * modifier @@ -586,15 +586,15 @@ KERNEL_FQ void HC_ATTR_SEQ m31400_m04 (KERN_ATTR_ESALT (scrtv2_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m31400_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m31400_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m31400_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m31400_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m31400_s04 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m31400_s04 (KERN_ATTR_BASIC ()) { /** * modifier @@ -892,10 +892,10 @@ KERNEL_FQ void HC_ATTR_SEQ m31400_s04 (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m31400_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m31400_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m31400_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m31400_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m31400_a1-pure.cl b/OpenCL/m31400_a1-pure.cl index 3cec07e91..96774ca7b 100644 --- a/OpenCL/m31400_a1-pure.cl +++ b/OpenCL/m31400_a1-pure.cl @@ -135,7 +135,7 @@ DECLSPEC void aes256_scrt_format (PRIVATE_AS u32 *aes_ks, PRIVATE_AS u32 *pw, co AES256_encrypt (aes_ks, hash, out, s_te0, s_te1, s_te2, s_te3, s_te4); } -KERNEL_FQ void HC_ATTR_SEQ m31400_mxx (KERN_ATTR_ESALT (scrtv2_t)) +KERNEL_FQ KERNEL_FA void m31400_mxx (KERN_ATTR_ESALT (scrtv2_t)) { /** * modifier @@ -225,7 +225,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31400_mxx (KERN_ATTR_ESALT (scrtv2_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m31400_sxx (KERN_ATTR_ESALT (scrtv2_t)) +KERNEL_FQ KERNEL_FA void m31400_sxx (KERN_ATTR_ESALT (scrtv2_t)) { /** * modifier diff --git a/OpenCL/m31400_a3-optimized.cl b/OpenCL/m31400_a3-optimized.cl index b887309c9..bc30d42c3 100644 --- a/OpenCL/m31400_a3-optimized.cl +++ b/OpenCL/m31400_a3-optimized.cl @@ -478,7 +478,7 @@ DECLSPEC void m31400m (SHM_TYPE u32a *s_te0, SHM_TYPE u32a *s_te1, SHM_TYPE u32a } } -KERNEL_FQ void HC_ATTR_SEQ m31400_m04 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) +KERNEL_FQ KERNEL_FA void m31400_m04 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) { /** * base @@ -551,7 +551,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31400_m04 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) m31400m (s_te0, s_te1, s_te2, s_te3, s_te4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m31400_m08 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) +KERNEL_FQ KERNEL_FA void m31400_m08 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) { /** * base @@ -624,7 +624,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31400_m08 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) m31400m (s_te0, s_te1, s_te2, s_te3, s_te4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m31400_m16 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) +KERNEL_FQ KERNEL_FA void m31400_m16 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) { /** * base @@ -885,7 +885,7 @@ DECLSPEC void m31400s (SHM_TYPE u32a *s_te0, SHM_TYPE u32a *s_te1, SHM_TYPE u32a } } -KERNEL_FQ void HC_ATTR_SEQ m31400_s04 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) +KERNEL_FQ KERNEL_FA void m31400_s04 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) { /** * base @@ -957,7 +957,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31400_s04 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) m31400s (s_te0, s_te1, s_te2, s_te3, s_te4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m31400_s08 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) +KERNEL_FQ KERNEL_FA void m31400_s08 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) { /** * base @@ -1030,7 +1030,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31400_s08 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) m31400s (s_te0, s_te1, s_te2, s_te3, s_te4, w, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m31400_s16 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) +KERNEL_FQ KERNEL_FA void m31400_s16 (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) { /** * base diff --git a/OpenCL/m31400_a3-pure.cl b/OpenCL/m31400_a3-pure.cl index a2e1174eb..09d450df9 100644 --- a/OpenCL/m31400_a3-pure.cl +++ b/OpenCL/m31400_a3-pure.cl @@ -305,7 +305,7 @@ DECLSPEC void aes256_scrt_format_VV (PRIVATE_AS u32 *aes_ks, PRIVATE_AS u32x *w, #endif } -KERNEL_FQ void HC_ATTR_SEQ m31400_mxx (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) +KERNEL_FQ KERNEL_FA void m31400_mxx (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) { /** * modifier @@ -400,7 +400,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31400_mxx (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m31400_sxx (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) +KERNEL_FQ KERNEL_FA void m31400_sxx (KERN_ATTR_VECTOR_ESALT (scrtv2_t)) { /** * modifier diff --git a/OpenCL/m31500-pure.cl b/OpenCL/m31500-pure.cl index 9bee3da14..4911c632a 100644 --- a/OpenCL/m31500-pure.cl +++ b/OpenCL/m31500-pure.cl @@ -41,7 +41,7 @@ typedef struct dcc_tmp } dcc_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m31500_init (KERN_ATTR_TMPS (dcc_tmp_t)) +KERNEL_FQ KERNEL_FA void m31500_init (KERN_ATTR_TMPS (dcc_tmp_t)) { /** * modifier @@ -79,12 +79,12 @@ KERNEL_FQ void HC_ATTR_SEQ m31500_init (KERN_ATTR_TMPS (dcc_tmp_t)) tmps[gid].digest_buf[3] = out[3]; } -KERNEL_FQ void HC_ATTR_SEQ m31500_loop (KERN_ATTR_TMPS (dcc_tmp_t)) +KERNEL_FQ KERNEL_FA void m31500_loop (KERN_ATTR_TMPS (dcc_tmp_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m31500_comp (KERN_ATTR_TMPS (dcc_tmp_t)) +KERNEL_FQ KERNEL_FA void m31500_comp (KERN_ATTR_TMPS (dcc_tmp_t)) { /** * modifier diff --git a/OpenCL/m31600-pure.cl b/OpenCL/m31600-pure.cl index 2fae3b56a..93925cb4c 100644 --- a/OpenCL/m31600-pure.cl +++ b/OpenCL/m31600-pure.cl @@ -82,7 +82,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m31600_init (KERN_ATTR_TMPS (dcc2_tmp_t)) +KERNEL_FQ KERNEL_FA void m31600_init (KERN_ATTR_TMPS (dcc2_tmp_t)) { /** * base @@ -210,7 +210,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31600_init (KERN_ATTR_TMPS (dcc2_tmp_t)) tmps[gid].out[3] = tmps[gid].dgst[3]; } -KERNEL_FQ void HC_ATTR_SEQ m31600_loop (KERN_ATTR_TMPS (dcc2_tmp_t)) +KERNEL_FQ KERNEL_FA void m31600_loop (KERN_ATTR_TMPS (dcc2_tmp_t)) { /** * base @@ -297,7 +297,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31600_loop (KERN_ATTR_TMPS (dcc2_tmp_t)) unpackv (tmps, out, gid, 3, out[3]); } -KERNEL_FQ void HC_ATTR_SEQ m31600_comp (KERN_ATTR_TMPS (dcc2_tmp_t)) +KERNEL_FQ KERNEL_FA void m31600_comp (KERN_ATTR_TMPS (dcc2_tmp_t)) { /** * base diff --git a/OpenCL/m31700_a0-pure.cl b/OpenCL/m31700_a0-pure.cl index d11de4b16..551ab69b0 100644 --- a/OpenCL/m31700_a0-pure.cl +++ b/OpenCL/m31700_a0-pure.cl @@ -38,7 +38,7 @@ typedef struct md5_double_salt } md5_double_salt_t; -KERNEL_FQ void HC_ATTR_SEQ m31700_mxx (KERN_ATTR_RULES_ESALT (md5_double_salt_t)) +KERNEL_FQ KERNEL_FA void m31700_mxx (KERN_ATTR_RULES_ESALT (md5_double_salt_t)) { /** * modifier @@ -180,7 +180,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31700_mxx (KERN_ATTR_RULES_ESALT (md5_double_salt_t) } } -KERNEL_FQ void HC_ATTR_SEQ m31700_sxx (KERN_ATTR_RULES_ESALT (md5_double_salt_t)) +KERNEL_FQ KERNEL_FA void m31700_sxx (KERN_ATTR_RULES_ESALT (md5_double_salt_t)) { /** * modifier diff --git a/OpenCL/m31700_a1-pure.cl b/OpenCL/m31700_a1-pure.cl index 2cdf3baee..06b2e22af 100644 --- a/OpenCL/m31700_a1-pure.cl +++ b/OpenCL/m31700_a1-pure.cl @@ -36,7 +36,7 @@ typedef struct md5_double_salt } md5_double_salt_t; -KERNEL_FQ void HC_ATTR_SEQ m31700_mxx (KERN_ATTR_ESALT (md5_double_salt_t)) +KERNEL_FQ KERNEL_FA void m31700_mxx (KERN_ATTR_ESALT (md5_double_salt_t)) { /** * modifier @@ -176,7 +176,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31700_mxx (KERN_ATTR_ESALT (md5_double_salt_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m31700_sxx (KERN_ATTR_ESALT (md5_double_salt_t)) +KERNEL_FQ KERNEL_FA void m31700_sxx (KERN_ATTR_ESALT (md5_double_salt_t)) { /** * modifier diff --git a/OpenCL/m31700_a3-pure.cl b/OpenCL/m31700_a3-pure.cl index 0eb1ab7c5..487179006 100644 --- a/OpenCL/m31700_a3-pure.cl +++ b/OpenCL/m31700_a3-pure.cl @@ -36,7 +36,7 @@ typedef struct md5_double_salt } md5_double_salt_t; -KERNEL_FQ void HC_ATTR_SEQ m31700_mxx (KERN_ATTR_VECTOR_ESALT (md5_double_salt_t)) +KERNEL_FQ KERNEL_FA void m31700_mxx (KERN_ATTR_VECTOR_ESALT (md5_double_salt_t)) { /** * modifier @@ -189,7 +189,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31700_mxx (KERN_ATTR_VECTOR_ESALT (md5_double_salt_t } } -KERNEL_FQ void HC_ATTR_SEQ m31700_sxx (KERN_ATTR_VECTOR_ESALT (md5_double_salt_t)) +KERNEL_FQ KERNEL_FA void m31700_sxx (KERN_ATTR_VECTOR_ESALT (md5_double_salt_t)) { /** * modifier diff --git a/OpenCL/m31800-pure.cl b/OpenCL/m31800-pure.cl index 76f9b837c..ec89c7e1a 100644 --- a/OpenCL/m31800-pure.cl +++ b/OpenCL/m31800-pure.cl @@ -88,7 +88,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m31800_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, onepassword8_t)) +KERNEL_FQ KERNEL_FA void m31800_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, onepassword8_t)) { /** * base @@ -191,7 +191,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31800_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m31800_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, onepassword8_t)) +KERNEL_FQ KERNEL_FA void m31800_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, onepassword8_t)) { const u64 gid = get_global_id (0); @@ -297,7 +297,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31800_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m31800_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, onepassword8_t)) +KERNEL_FQ KERNEL_FA void m31800_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha256_tmp_t, onepassword8_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m31900-pure.cl b/OpenCL/m31900-pure.cl index 661c3a85c..a68c1702d 100644 --- a/OpenCL/m31900-pure.cl +++ b/OpenCL/m31900-pure.cl @@ -96,7 +96,7 @@ DECLSPEC void hmac_sha512_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha512_transform_vector (w0, w1, w2, w3, w4, w5, w6, w7, digest); } -KERNEL_FQ void HC_ATTR_SEQ m31900_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, pbkdf2_sha512_aes_cbc_t)) +KERNEL_FQ KERNEL_FA void m31900_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, pbkdf2_sha512_aes_cbc_t)) { /** * base @@ -200,7 +200,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31900_init (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m31900_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, pbkdf2_sha512_aes_cbc_t)) +KERNEL_FQ KERNEL_FA void m31900_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, pbkdf2_sha512_aes_cbc_t)) { const u64 gid = get_global_id (0); @@ -326,7 +326,7 @@ KERNEL_FQ void HC_ATTR_SEQ m31900_loop (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_ } } -KERNEL_FQ void HC_ATTR_SEQ m31900_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, pbkdf2_sha512_aes_cbc_t)) +KERNEL_FQ KERNEL_FA void m31900_comp (KERN_ATTR_TMPS_ESALT (pbkdf2_sha512_tmp_t, pbkdf2_sha512_aes_cbc_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m32000-pure.cl b/OpenCL/m32000-pure.cl index 0d3975f8b..8257eda4a 100644 --- a/OpenCL/m32000-pure.cl +++ b/OpenCL/m32000-pure.cl @@ -23,7 +23,7 @@ typedef struct netiq_sspr_md5_tmp } netiq_sspr_md5_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m32000_init (KERN_ATTR_TMPS (netiq_sspr_md5_tmp_t)) +KERNEL_FQ KERNEL_FA void m32000_init (KERN_ATTR_TMPS (netiq_sspr_md5_tmp_t)) { /** * base @@ -47,7 +47,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32000_init (KERN_ATTR_TMPS (netiq_sspr_md5_tmp_t)) tmps[gid].dgst[3] = ctx.h[3]; } -KERNEL_FQ void HC_ATTR_SEQ m32000_loop (KERN_ATTR_TMPS (netiq_sspr_md5_tmp_t)) +KERNEL_FQ KERNEL_FA void m32000_loop (KERN_ATTR_TMPS (netiq_sspr_md5_tmp_t)) { const u64 gid = get_global_id (0); @@ -108,7 +108,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32000_loop (KERN_ATTR_TMPS (netiq_sspr_md5_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m32000_comp (KERN_ATTR_TMPS (netiq_sspr_md5_tmp_t)) +KERNEL_FQ KERNEL_FA void m32000_comp (KERN_ATTR_TMPS (netiq_sspr_md5_tmp_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m32010-pure.cl b/OpenCL/m32010-pure.cl index 18ca02660..08a9a44a4 100644 --- a/OpenCL/m32010-pure.cl +++ b/OpenCL/m32010-pure.cl @@ -23,7 +23,7 @@ typedef struct netiq_sspr_sha1_tmp } netiq_sspr_sha1_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m32010_init (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) +KERNEL_FQ KERNEL_FA void m32010_init (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) { /** * base @@ -48,7 +48,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32010_init (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) tmps[gid].dgst[4] = ctx.h[4]; } -KERNEL_FQ void HC_ATTR_SEQ m32010_loop (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) +KERNEL_FQ KERNEL_FA void m32010_loop (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) { const u64 gid = get_global_id (0); @@ -113,7 +113,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32010_loop (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m32010_comp (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) +KERNEL_FQ KERNEL_FA void m32010_comp (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m32020-pure.cl b/OpenCL/m32020-pure.cl index e65a8a0a5..dccaf8f91 100644 --- a/OpenCL/m32020-pure.cl +++ b/OpenCL/m32020-pure.cl @@ -23,7 +23,7 @@ typedef struct netiq_sspr_sha1_tmp } netiq_sspr_sha1_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m32020_init (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) +KERNEL_FQ KERNEL_FA void m32020_init (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) { /** * base @@ -50,7 +50,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32020_init (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) tmps[gid].dgst[4] = ctx.h[4]; } -KERNEL_FQ void HC_ATTR_SEQ m32020_loop (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) +KERNEL_FQ KERNEL_FA void m32020_loop (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) { const u64 gid = get_global_id (0); @@ -115,7 +115,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32020_loop (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m32020_comp (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) +KERNEL_FQ KERNEL_FA void m32020_comp (KERN_ATTR_TMPS (netiq_sspr_sha1_tmp_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m32030-pure.cl b/OpenCL/m32030-pure.cl index 4dcfe16b9..358d01165 100644 --- a/OpenCL/m32030-pure.cl +++ b/OpenCL/m32030-pure.cl @@ -23,7 +23,7 @@ typedef struct netiq_sspr_sha256_tmp } netiq_sspr_sha256_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m32030_init (KERN_ATTR_TMPS (netiq_sspr_sha256_tmp_t)) +KERNEL_FQ KERNEL_FA void m32030_init (KERN_ATTR_TMPS (netiq_sspr_sha256_tmp_t)) { /** * base @@ -53,7 +53,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32030_init (KERN_ATTR_TMPS (netiq_sspr_sha256_tmp_t) tmps[gid].dgst[7] = ctx.h[7]; } -KERNEL_FQ void HC_ATTR_SEQ m32030_loop (KERN_ATTR_TMPS (netiq_sspr_sha256_tmp_t)) +KERNEL_FQ KERNEL_FA void m32030_loop (KERN_ATTR_TMPS (netiq_sspr_sha256_tmp_t)) { const u64 gid = get_global_id (0); @@ -130,7 +130,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32030_loop (KERN_ATTR_TMPS (netiq_sspr_sha256_tmp_t) } } -KERNEL_FQ void HC_ATTR_SEQ m32030_comp (KERN_ATTR_TMPS (netiq_sspr_sha256_tmp_t)) +KERNEL_FQ KERNEL_FA void m32030_comp (KERN_ATTR_TMPS (netiq_sspr_sha256_tmp_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m32040-pure.cl b/OpenCL/m32040-pure.cl index c5fb0fb3c..73b0d2b55 100644 --- a/OpenCL/m32040-pure.cl +++ b/OpenCL/m32040-pure.cl @@ -23,7 +23,7 @@ typedef struct netiq_sspr_sha512_tmp } netiq_sspr_sha512_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m32040_init (KERN_ATTR_TMPS (netiq_sspr_sha512_tmp_t)) +KERNEL_FQ KERNEL_FA void m32040_init (KERN_ATTR_TMPS (netiq_sspr_sha512_tmp_t)) { /** * base @@ -53,7 +53,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32040_init (KERN_ATTR_TMPS (netiq_sspr_sha512_tmp_t) tmps[gid].dgst[7] = ctx.h[7]; } -KERNEL_FQ void HC_ATTR_SEQ m32040_loop (KERN_ATTR_TMPS (netiq_sspr_sha512_tmp_t)) +KERNEL_FQ KERNEL_FA void m32040_loop (KERN_ATTR_TMPS (netiq_sspr_sha512_tmp_t)) { const u64 gid = get_global_id (0); @@ -150,7 +150,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32040_loop (KERN_ATTR_TMPS (netiq_sspr_sha512_tmp_t) } } -KERNEL_FQ void HC_ATTR_SEQ m32040_comp (KERN_ATTR_TMPS (netiq_sspr_sha512_tmp_t)) +KERNEL_FQ KERNEL_FA void m32040_comp (KERN_ATTR_TMPS (netiq_sspr_sha512_tmp_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m32100-pure.cl b/OpenCL/m32100-pure.cl index fe2730abf..57e4272c8 100644 --- a/OpenCL/m32100-pure.cl +++ b/OpenCL/m32100-pure.cl @@ -116,7 +116,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m32100_init (KERN_ATTR_TMPS_ESALT (krb5asrep_17_tmp_t, krb5asrep_17_t)) +KERNEL_FQ KERNEL_FA void m32100_init (KERN_ATTR_TMPS_ESALT (krb5asrep_17_tmp_t, krb5asrep_17_t)) { /** * base @@ -194,7 +194,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32100_init (KERN_ATTR_TMPS_ESALT (krb5asrep_17_tmp_t } } -KERNEL_FQ void HC_ATTR_SEQ m32100_loop (KERN_ATTR_TMPS_ESALT (krb5asrep_17_tmp_t, krb5asrep_17_t)) +KERNEL_FQ KERNEL_FA void m32100_loop (KERN_ATTR_TMPS_ESALT (krb5asrep_17_tmp_t, krb5asrep_17_t)) { /** * base @@ -282,7 +282,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32100_loop (KERN_ATTR_TMPS_ESALT (krb5asrep_17_tmp_t } } -KERNEL_FQ void HC_ATTR_SEQ m32100_comp (KERN_ATTR_TMPS_ESALT (krb5asrep_17_tmp_t, krb5asrep_17_t)) +KERNEL_FQ KERNEL_FA void m32100_comp (KERN_ATTR_TMPS_ESALT (krb5asrep_17_tmp_t, krb5asrep_17_t)) { /** * base diff --git a/OpenCL/m32200-pure.cl b/OpenCL/m32200-pure.cl index 7dc292115..76a8c07a6 100644 --- a/OpenCL/m32200-pure.cl +++ b/OpenCL/m32200-pure.cl @@ -116,7 +116,7 @@ DECLSPEC void hmac_sha1_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVATE sha1_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m32200_init (KERN_ATTR_TMPS_ESALT (krb5asrep_18_tmp_t, krb5asrep_18_t)) +KERNEL_FQ KERNEL_FA void m32200_init (KERN_ATTR_TMPS_ESALT (krb5asrep_18_tmp_t, krb5asrep_18_t)) { /** * base @@ -194,7 +194,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32200_init (KERN_ATTR_TMPS_ESALT (krb5asrep_18_tmp_t } } -KERNEL_FQ void HC_ATTR_SEQ m32200_loop (KERN_ATTR_TMPS_ESALT (krb5asrep_18_tmp_t, krb5asrep_18_t)) +KERNEL_FQ KERNEL_FA void m32200_loop (KERN_ATTR_TMPS_ESALT (krb5asrep_18_tmp_t, krb5asrep_18_t)) { /** * base @@ -282,7 +282,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32200_loop (KERN_ATTR_TMPS_ESALT (krb5asrep_18_tmp_t } } -KERNEL_FQ void HC_ATTR_SEQ m32200_comp (KERN_ATTR_TMPS_ESALT (krb5asrep_18_tmp_t, krb5asrep_18_t)) +KERNEL_FQ KERNEL_FA void m32200_comp (KERN_ATTR_TMPS_ESALT (krb5asrep_18_tmp_t, krb5asrep_18_t)) { /** * base diff --git a/OpenCL/m32300_a0-optimized.cl b/OpenCL/m32300_a0-optimized.cl index 2d40860cd..5d0b3eeee 100644 --- a/OpenCL/m32300_a0-optimized.cl +++ b/OpenCL/m32300_a0-optimized.cl @@ -41,7 +41,7 @@ typedef struct md5_triple_salt } md5_triple_salt_t; -KERNEL_FQ void HC_ATTR_SEQ m32300_m04 (KERN_ATTR_RULES_ESALT (md5_triple_salt_t)) +KERNEL_FQ KERNEL_FA void m32300_m04 (KERN_ATTR_RULES_ESALT (md5_triple_salt_t)) { /** * modifier @@ -413,15 +413,15 @@ KERNEL_FQ void HC_ATTR_SEQ m32300_m04 (KERN_ATTR_RULES_ESALT (md5_triple_salt_t) } } -KERNEL_FQ void HC_ATTR_SEQ m32300_m08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m32300_m08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m32300_m16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m32300_m16 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m32300_s04 (KERN_ATTR_RULES_ESALT (md5_triple_salt_t)) +KERNEL_FQ KERNEL_FA void m32300_s04 (KERN_ATTR_RULES_ESALT (md5_triple_salt_t)) { /** * modifier @@ -804,10 +804,10 @@ KERNEL_FQ void HC_ATTR_SEQ m32300_s04 (KERN_ATTR_RULES_ESALT (md5_triple_salt_t) } } -KERNEL_FQ void HC_ATTR_SEQ m32300_s08 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m32300_s08 (KERN_ATTR_RULES ()) { } -KERNEL_FQ void HC_ATTR_SEQ m32300_s16 (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m32300_s16 (KERN_ATTR_RULES ()) { } diff --git a/OpenCL/m32300_a0-pure.cl b/OpenCL/m32300_a0-pure.cl index 57fc0f2db..a0a663bff 100644 --- a/OpenCL/m32300_a0-pure.cl +++ b/OpenCL/m32300_a0-pure.cl @@ -41,7 +41,7 @@ typedef struct md5_triple_salt } md5_triple_salt_t; -KERNEL_FQ void HC_ATTR_SEQ m32300_mxx (KERN_ATTR_RULES_ESALT (md5_triple_salt_t)) +KERNEL_FQ KERNEL_FA void m32300_mxx (KERN_ATTR_RULES_ESALT (md5_triple_salt_t)) { /** * modifier @@ -208,7 +208,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32300_mxx (KERN_ATTR_RULES_ESALT (md5_triple_salt_t) } } -KERNEL_FQ void HC_ATTR_SEQ m32300_sxx (KERN_ATTR_RULES_ESALT (md5_triple_salt_t)) +KERNEL_FQ KERNEL_FA void m32300_sxx (KERN_ATTR_RULES_ESALT (md5_triple_salt_t)) { /** * modifier diff --git a/OpenCL/m32300_a1-optimized.cl b/OpenCL/m32300_a1-optimized.cl index b073db7a6..d3a9d2efe 100644 --- a/OpenCL/m32300_a1-optimized.cl +++ b/OpenCL/m32300_a1-optimized.cl @@ -39,7 +39,7 @@ typedef struct md5_triple_salt } md5_triple_salt_t; -KERNEL_FQ void HC_ATTR_SEQ m32300_m04 (KERN_ATTR_ESALT (md5_triple_salt_t)) +KERNEL_FQ KERNEL_FA void m32300_m04 (KERN_ATTR_ESALT (md5_triple_salt_t)) { /** * modifier @@ -466,15 +466,15 @@ KERNEL_FQ void HC_ATTR_SEQ m32300_m04 (KERN_ATTR_ESALT (md5_triple_salt_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m32300_m08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m32300_m08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m32300_m16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m32300_m16 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m32300_s04 (KERN_ATTR_ESALT (md5_triple_salt_t)) +KERNEL_FQ KERNEL_FA void m32300_s04 (KERN_ATTR_ESALT (md5_triple_salt_t)) { /** * modifier @@ -916,10 +916,10 @@ KERNEL_FQ void HC_ATTR_SEQ m32300_s04 (KERN_ATTR_ESALT (md5_triple_salt_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m32300_s08 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m32300_s08 (KERN_ATTR_BASIC ()) { } -KERNEL_FQ void HC_ATTR_SEQ m32300_s16 (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m32300_s16 (KERN_ATTR_BASIC ()) { } diff --git a/OpenCL/m32300_a1-pure.cl b/OpenCL/m32300_a1-pure.cl index 1a29b6639..47dd89d72 100644 --- a/OpenCL/m32300_a1-pure.cl +++ b/OpenCL/m32300_a1-pure.cl @@ -39,7 +39,7 @@ typedef struct md5_triple_salt } md5_triple_salt_t; -KERNEL_FQ void HC_ATTR_SEQ m32300_mxx (KERN_ATTR_ESALT (md5_triple_salt_t)) +KERNEL_FQ KERNEL_FA void m32300_mxx (KERN_ATTR_ESALT (md5_triple_salt_t)) { /** * modifier @@ -204,7 +204,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32300_mxx (KERN_ATTR_ESALT (md5_triple_salt_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m32300_sxx (KERN_ATTR_ESALT (md5_triple_salt_t)) +KERNEL_FQ KERNEL_FA void m32300_sxx (KERN_ATTR_ESALT (md5_triple_salt_t)) { /** * modifier diff --git a/OpenCL/m32300_a3-optimized.cl b/OpenCL/m32300_a3-optimized.cl index 5365f4890..603dbcdbc 100644 --- a/OpenCL/m32300_a3-optimized.cl +++ b/OpenCL/m32300_a3-optimized.cl @@ -748,7 +748,7 @@ DECLSPEC void m32300s (PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, PRIVATE_AS u32 *w } } -KERNEL_FQ void HC_ATTR_SEQ m32300_m04 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) +KERNEL_FQ KERNEL_FA void m32300_m04 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) { /** * base @@ -818,7 +818,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32300_m04 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t m32300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m32300_m08 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) +KERNEL_FQ KERNEL_FA void m32300_m08 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) { /** * base @@ -888,7 +888,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32300_m08 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t m32300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m32300_m16 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) +KERNEL_FQ KERNEL_FA void m32300_m16 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) { /** * base @@ -958,7 +958,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32300_m16 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t m32300m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m32300_s04 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) +KERNEL_FQ KERNEL_FA void m32300_s04 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) { /** * base @@ -1028,7 +1028,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32300_s04 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t m32300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m32300_s08 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) +KERNEL_FQ KERNEL_FA void m32300_s08 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) { /** * base @@ -1098,7 +1098,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32300_s08 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t m32300s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, words_buf_r, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz, l_bin2asc); } -KERNEL_FQ void HC_ATTR_SEQ m32300_s16 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) +KERNEL_FQ KERNEL_FA void m32300_s16 (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) { /** * base diff --git a/OpenCL/m32300_a3-pure.cl b/OpenCL/m32300_a3-pure.cl index afb20656b..87ce4ca12 100644 --- a/OpenCL/m32300_a3-pure.cl +++ b/OpenCL/m32300_a3-pure.cl @@ -39,7 +39,7 @@ typedef struct md5_triple_salt } md5_triple_salt_t; -KERNEL_FQ void HC_ATTR_SEQ m32300_mxx (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) +KERNEL_FQ KERNEL_FA void m32300_mxx (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) { /** * modifier @@ -217,7 +217,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32300_mxx (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t } } -KERNEL_FQ void HC_ATTR_SEQ m32300_sxx (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) +KERNEL_FQ KERNEL_FA void m32300_sxx (KERN_ATTR_VECTOR_ESALT (md5_triple_salt_t)) { /** * modifier diff --git a/OpenCL/m32410_a0-pure.cl b/OpenCL/m32410_a0-pure.cl index fdf17e50a..79ca3d5c6 100644 --- a/OpenCL/m32410_a0-pure.cl +++ b/OpenCL/m32410_a0-pure.cl @@ -28,7 +28,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m32410_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m32410_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -192,7 +192,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32410_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m32410_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m32410_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m32410_a1-pure.cl b/OpenCL/m32410_a1-pure.cl index db2b62968..c94d252a8 100644 --- a/OpenCL/m32410_a1-pure.cl +++ b/OpenCL/m32410_a1-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m32410_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m32410_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -188,7 +188,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32410_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m32410_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m32410_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m32410_a3-pure.cl b/OpenCL/m32410_a3-pure.cl index 40efa9cf9..e58b8c94a 100644 --- a/OpenCL/m32410_a3-pure.cl +++ b/OpenCL/m32410_a3-pure.cl @@ -26,7 +26,7 @@ #define uint_to_hex_lower8(i) make_u32x (l_bin2asc[(i).s0], l_bin2asc[(i).s1], l_bin2asc[(i).s2], l_bin2asc[(i).s3], l_bin2asc[(i).s4], l_bin2asc[(i).s5], l_bin2asc[(i).s6], l_bin2asc[(i).s7], l_bin2asc[(i).s8], l_bin2asc[(i).s9], l_bin2asc[(i).sa], l_bin2asc[(i).sb], l_bin2asc[(i).sc], l_bin2asc[(i).sd], l_bin2asc[(i).se], l_bin2asc[(i).sf]) #endif -KERNEL_FQ void HC_ATTR_SEQ m32410_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m32410_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -201,7 +201,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32410_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m32410_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m32410_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m32420_a0-pure.cl b/OpenCL/m32420_a0-pure.cl index ac5bdb6a8..11159cb07 100644 --- a/OpenCL/m32420_a0-pure.cl +++ b/OpenCL/m32420_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m32420_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m32420_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -122,7 +122,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32420_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m32420_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m32420_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m32420_a1-pure.cl b/OpenCL/m32420_a1-pure.cl index ac7c855b1..8a5ab0976 100644 --- a/OpenCL/m32420_a1-pure.cl +++ b/OpenCL/m32420_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m32420_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m32420_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -118,7 +118,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32420_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m32420_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m32420_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m32420_a3-pure.cl b/OpenCL/m32420_a3-pure.cl index 97f98b835..e67961591 100644 --- a/OpenCL/m32420_a3-pure.cl +++ b/OpenCL/m32420_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_sha512.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m32420_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m32420_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -140,7 +140,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32420_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m32420_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m32420_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m32500-pure.cl b/OpenCL/m32500-pure.cl index 510243599..9a0a5a08d 100644 --- a/OpenCL/m32500-pure.cl +++ b/OpenCL/m32500-pure.cl @@ -127,7 +127,7 @@ DECLSPEC void base64_encode_sha256 (u32 *out, const u32 *in) } //--------------------------------------------------------------------------------------- -KERNEL_FQ void HC_ATTR_SEQ m32500_init (KERN_ATTR_TMPS_ESALT (doge_tmp_t, payload_t)) +KERNEL_FQ KERNEL_FA void m32500_init (KERN_ATTR_TMPS_ESALT (doge_tmp_t, payload_t)) { const u64 gid = get_global_id (0); @@ -220,7 +220,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32500_init (KERN_ATTR_TMPS_ESALT (doge_tmp_t, payloa } -KERNEL_FQ void HC_ATTR_SEQ m32500_loop (KERN_ATTR_TMPS_ESALT (doge_tmp_t, payload_t)) +KERNEL_FQ KERNEL_FA void m32500_loop (KERN_ATTR_TMPS_ESALT (doge_tmp_t, payload_t)) { //pbkdf2hmac here @@ -328,7 +328,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32500_loop (KERN_ATTR_TMPS_ESALT (doge_tmp_t, payloa } } -KERNEL_FQ void HC_ATTR_SEQ m32500_comp (KERN_ATTR_TMPS_ESALT (doge_tmp_t, payload_t)) +KERNEL_FQ KERNEL_FA void m32500_comp (KERN_ATTR_TMPS_ESALT (doge_tmp_t, payload_t)) { /** * base diff --git a/OpenCL/m32600_a0-pure.cl b/OpenCL/m32600_a0-pure.cl index 224bdf578..c15b27ee9 100644 --- a/OpenCL/m32600_a0-pure.cl +++ b/OpenCL/m32600_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_whirlpool.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m32600_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m32600_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -118,7 +118,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32600_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m32600_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m32600_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m32600_a1-pure.cl b/OpenCL/m32600_a1-pure.cl index ab26a0579..05e5da59c 100644 --- a/OpenCL/m32600_a1-pure.cl +++ b/OpenCL/m32600_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_whirlpool.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m32600_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m32600_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -112,7 +112,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32600_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m32600_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m32600_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m32600_a3-pure.cl b/OpenCL/m32600_a3-pure.cl index 90ac75850..bd5580bd0 100644 --- a/OpenCL/m32600_a3-pure.cl +++ b/OpenCL/m32600_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_whirlpool.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m32600_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m32600_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -127,7 +127,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32600_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m32600_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m32600_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m32700-pure.cl b/OpenCL/m32700-pure.cl index bf9f366e3..1779c1be6 100644 --- a/OpenCL/m32700-pure.cl +++ b/OpenCL/m32700-pure.cl @@ -120,7 +120,7 @@ DECLSPEC void sha1_final_32700 (PRIVATE_AS sha1_ctx_t *ctx) sha1_transform (ctx->w0, ctx->w1, ctx->w2, ctx->w3, ctx->h); } -KERNEL_FQ void HC_ATTR_SEQ m32700_init (KERN_ATTR_TMPS (sha1_tmp_t)) +KERNEL_FQ KERNEL_FA void m32700_init (KERN_ATTR_TMPS (sha1_tmp_t)) { const u64 gid = get_global_id (0); @@ -161,7 +161,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32700_init (KERN_ATTR_TMPS (sha1_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m32700_loop (KERN_ATTR_TMPS (sha1_tmp_t)) +KERNEL_FQ KERNEL_FA void m32700_loop (KERN_ATTR_TMPS (sha1_tmp_t)) { const u64 gid = get_global_id (0); @@ -193,7 +193,7 @@ KERNEL_FQ void HC_ATTR_SEQ m32700_loop (KERN_ATTR_TMPS (sha1_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m32700_comp (KERN_ATTR_TMPS (sha1_tmp_t)) +KERNEL_FQ KERNEL_FA void m32700_comp (KERN_ATTR_TMPS (sha1_tmp_t)) { const u64 gid = get_global_id (0); diff --git a/OpenCL/m33300_a0-pure.cl b/OpenCL/m33300_a0-pure.cl index bfdf62879..eade1317c 100644 --- a/OpenCL/m33300_a0-pure.cl +++ b/OpenCL/m33300_a0-pure.cl @@ -16,7 +16,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2s.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m33300_mxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m33300_mxx (KERN_ATTR_RULES ()) { /** * modifier @@ -69,7 +69,7 @@ KERNEL_FQ void HC_ATTR_SEQ m33300_mxx (KERN_ATTR_RULES ()) } } -KERNEL_FQ void HC_ATTR_SEQ m33300_sxx (KERN_ATTR_RULES ()) +KERNEL_FQ KERNEL_FA void m33300_sxx (KERN_ATTR_RULES ()) { /** * modifier diff --git a/OpenCL/m33300_a1-pure.cl b/OpenCL/m33300_a1-pure.cl index 320ff4784..53d7496a5 100644 --- a/OpenCL/m33300_a1-pure.cl +++ b/OpenCL/m33300_a1-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2s.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m33300_mxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m33300_mxx (KERN_ATTR_BASIC ()) { /** * modifier @@ -92,7 +92,7 @@ KERNEL_FQ void HC_ATTR_SEQ m33300_mxx (KERN_ATTR_BASIC ()) } } -KERNEL_FQ void HC_ATTR_SEQ m33300_sxx (KERN_ATTR_BASIC ()) +KERNEL_FQ KERNEL_FA void m33300_sxx (KERN_ATTR_BASIC ()) { /** * modifier diff --git a/OpenCL/m33300_a3-pure.cl b/OpenCL/m33300_a3-pure.cl index 5f0d4261a..a1ae75885 100644 --- a/OpenCL/m33300_a3-pure.cl +++ b/OpenCL/m33300_a3-pure.cl @@ -14,7 +14,7 @@ #include M2S(INCLUDE_PATH/inc_hash_blake2s.cl) #endif -KERNEL_FQ void HC_ATTR_SEQ m33300_mxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m33300_mxx (KERN_ATTR_VECTOR ()) { /** * modifier @@ -78,7 +78,7 @@ KERNEL_FQ void HC_ATTR_SEQ m33300_mxx (KERN_ATTR_VECTOR ()) } } -KERNEL_FQ void HC_ATTR_SEQ m33300_sxx (KERN_ATTR_VECTOR ()) +KERNEL_FQ KERNEL_FA void m33300_sxx (KERN_ATTR_VECTOR ()) { /** * modifier diff --git a/OpenCL/m33500_a0-optimized.cl b/OpenCL/m33500_a0-optimized.cl index 3ea5edb5e..dc8684b7d 100644 --- a/OpenCL/m33500_a0-optimized.cl +++ b/OpenCL/m33500_a0-optimized.cl @@ -40,7 +40,7 @@ CONSTANT_VK u32 pt_masks[8] = 0 }; -KERNEL_FQ void HC_ATTR_SEQ m33500_m04 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33500_m04 (KERN_ATTR_RULES_ESALT (rc4_t)) { /** * base @@ -123,15 +123,15 @@ KERNEL_FQ void HC_ATTR_SEQ m33500_m04 (KERN_ATTR_RULES_ESALT (rc4_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m33500_m08 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33500_m08 (KERN_ATTR_RULES_ESALT (rc4_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m33500_m16 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33500_m16 (KERN_ATTR_RULES_ESALT (rc4_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m33500_s04 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33500_s04 (KERN_ATTR_RULES_ESALT (rc4_t)) { /** * base @@ -230,10 +230,10 @@ KERNEL_FQ void HC_ATTR_SEQ m33500_s04 (KERN_ATTR_RULES_ESALT (rc4_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m33500_s08 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33500_s08 (KERN_ATTR_RULES_ESALT (rc4_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m33500_s16 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33500_s16 (KERN_ATTR_RULES_ESALT (rc4_t)) { } diff --git a/OpenCL/m33500_a1-optimized.cl b/OpenCL/m33500_a1-optimized.cl index 6ea4e254c..b2b091bc6 100644 --- a/OpenCL/m33500_a1-optimized.cl +++ b/OpenCL/m33500_a1-optimized.cl @@ -38,7 +38,7 @@ CONSTANT_VK u32 pt_masks[8] = 0 }; -KERNEL_FQ void HC_ATTR_SEQ m33500_m04 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33500_m04 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -172,15 +172,15 @@ KERNEL_FQ void HC_ATTR_SEQ m33500_m04 (KERN_ATTR_ESALT (rc4_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m33500_m08 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33500_m08 (KERN_ATTR_ESALT (rc4_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m33500_m16 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33500_m16 (KERN_ATTR_ESALT (rc4_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m33500_s04 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33500_s04 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -326,10 +326,10 @@ KERNEL_FQ void HC_ATTR_SEQ m33500_s04 (KERN_ATTR_ESALT (rc4_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m33500_s08 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33500_s08 (KERN_ATTR_ESALT (rc4_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m33500_s16 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33500_s16 (KERN_ATTR_ESALT (rc4_t)) { } diff --git a/OpenCL/m33500_a3-optimized.cl b/OpenCL/m33500_a3-optimized.cl index 050a89e55..db49a047d 100644 --- a/OpenCL/m33500_a3-optimized.cl +++ b/OpenCL/m33500_a3-optimized.cl @@ -180,7 +180,7 @@ DECLSPEC void m33500s (LOCAL_AS u32 *S, PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, } } -KERNEL_FQ void HC_ATTR_SEQ m33500_m04 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33500_m04 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -231,7 +231,7 @@ KERNEL_FQ void HC_ATTR_SEQ m33500_m04 (KERN_ATTR_ESALT (rc4_t)) m33500m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m33500_m08 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33500_m08 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -282,7 +282,7 @@ KERNEL_FQ void HC_ATTR_SEQ m33500_m08 (KERN_ATTR_ESALT (rc4_t)) m33500m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m33500_m16 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33500_m16 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -333,7 +333,7 @@ KERNEL_FQ void HC_ATTR_SEQ m33500_m16 (KERN_ATTR_ESALT (rc4_t)) m33500m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m33500_s04 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33500_s04 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -384,7 +384,7 @@ KERNEL_FQ void HC_ATTR_SEQ m33500_s04 (KERN_ATTR_ESALT (rc4_t)) m33500s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m33500_s08 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33500_s08 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -435,7 +435,7 @@ KERNEL_FQ void HC_ATTR_SEQ m33500_s08 (KERN_ATTR_ESALT (rc4_t)) m33500s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m33500_s16 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33500_s16 (KERN_ATTR_ESALT (rc4_t)) { /** * base diff --git a/OpenCL/m33501_a0-optimized.cl b/OpenCL/m33501_a0-optimized.cl index 9a663241d..ff691591f 100644 --- a/OpenCL/m33501_a0-optimized.cl +++ b/OpenCL/m33501_a0-optimized.cl @@ -44,7 +44,7 @@ CONSTANT_VK u32 pt_masks[12] = 0 }; -KERNEL_FQ void HC_ATTR_SEQ m33501_m04 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33501_m04 (KERN_ATTR_RULES_ESALT (rc4_t)) { /** * base @@ -137,15 +137,15 @@ KERNEL_FQ void HC_ATTR_SEQ m33501_m04 (KERN_ATTR_RULES_ESALT (rc4_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m33501_m08 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33501_m08 (KERN_ATTR_RULES_ESALT (rc4_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m33501_m16 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33501_m16 (KERN_ATTR_RULES_ESALT (rc4_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m33501_s04 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33501_s04 (KERN_ATTR_RULES_ESALT (rc4_t)) { /** * base @@ -254,10 +254,10 @@ KERNEL_FQ void HC_ATTR_SEQ m33501_s04 (KERN_ATTR_RULES_ESALT (rc4_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m33501_s08 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33501_s08 (KERN_ATTR_RULES_ESALT (rc4_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m33501_s16 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33501_s16 (KERN_ATTR_RULES_ESALT (rc4_t)) { } diff --git a/OpenCL/m33501_a1-optimized.cl b/OpenCL/m33501_a1-optimized.cl index e3f988682..267f7cfb7 100644 --- a/OpenCL/m33501_a1-optimized.cl +++ b/OpenCL/m33501_a1-optimized.cl @@ -42,7 +42,7 @@ CONSTANT_VK u32 pt_masks[12] = 0 }; -KERNEL_FQ void HC_ATTR_SEQ m33501_m04 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33501_m04 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -186,15 +186,15 @@ KERNEL_FQ void HC_ATTR_SEQ m33501_m04 (KERN_ATTR_ESALT (rc4_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m33501_m08 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33501_m08 (KERN_ATTR_ESALT (rc4_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m33501_m16 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33501_m16 (KERN_ATTR_ESALT (rc4_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m33501_s04 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33501_s04 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -350,10 +350,10 @@ KERNEL_FQ void HC_ATTR_SEQ m33501_s04 (KERN_ATTR_ESALT (rc4_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m33501_s08 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33501_s08 (KERN_ATTR_ESALT (rc4_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m33501_s16 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33501_s16 (KERN_ATTR_ESALT (rc4_t)) { } diff --git a/OpenCL/m33501_a3-optimized.cl b/OpenCL/m33501_a3-optimized.cl index d26288170..19378d768 100644 --- a/OpenCL/m33501_a3-optimized.cl +++ b/OpenCL/m33501_a3-optimized.cl @@ -202,7 +202,7 @@ DECLSPEC void m33501s (LOCAL_AS u32 *S, PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, } } -KERNEL_FQ void HC_ATTR_SEQ m33501_m04 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33501_m04 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -253,7 +253,7 @@ KERNEL_FQ void HC_ATTR_SEQ m33501_m04 (KERN_ATTR_ESALT (rc4_t)) m33501m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m33501_m08 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33501_m08 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -304,7 +304,7 @@ KERNEL_FQ void HC_ATTR_SEQ m33501_m08 (KERN_ATTR_ESALT (rc4_t)) m33501m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m33501_m16 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33501_m16 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -355,7 +355,7 @@ KERNEL_FQ void HC_ATTR_SEQ m33501_m16 (KERN_ATTR_ESALT (rc4_t)) m33501m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m33501_s04 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33501_s04 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -406,7 +406,7 @@ KERNEL_FQ void HC_ATTR_SEQ m33501_s04 (KERN_ATTR_ESALT (rc4_t)) m33501s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m33501_s08 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33501_s08 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -457,7 +457,7 @@ KERNEL_FQ void HC_ATTR_SEQ m33501_s08 (KERN_ATTR_ESALT (rc4_t)) m33501s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m33501_s16 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33501_s16 (KERN_ATTR_ESALT (rc4_t)) { /** * base diff --git a/OpenCL/m33502_a0-optimized.cl b/OpenCL/m33502_a0-optimized.cl index 99657dea4..85de1d900 100644 --- a/OpenCL/m33502_a0-optimized.cl +++ b/OpenCL/m33502_a0-optimized.cl @@ -48,7 +48,7 @@ CONSTANT_VK u32 pt_masks[16] = 0 }; -KERNEL_FQ void HC_ATTR_SEQ m33502_m04 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33502_m04 (KERN_ATTR_RULES_ESALT (rc4_t)) { /** * base @@ -148,15 +148,15 @@ KERNEL_FQ void HC_ATTR_SEQ m33502_m04 (KERN_ATTR_RULES_ESALT (rc4_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m33502_m08 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33502_m08 (KERN_ATTR_RULES_ESALT (rc4_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m33502_m16 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33502_m16 (KERN_ATTR_RULES_ESALT (rc4_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m33502_s04 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33502_s04 (KERN_ATTR_RULES_ESALT (rc4_t)) { /** * base @@ -272,10 +272,10 @@ KERNEL_FQ void HC_ATTR_SEQ m33502_s04 (KERN_ATTR_RULES_ESALT (rc4_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m33502_s08 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33502_s08 (KERN_ATTR_RULES_ESALT (rc4_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m33502_s16 (KERN_ATTR_RULES_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33502_s16 (KERN_ATTR_RULES_ESALT (rc4_t)) { } diff --git a/OpenCL/m33502_a1-optimized.cl b/OpenCL/m33502_a1-optimized.cl index 450322d81..8aca6d8e4 100644 --- a/OpenCL/m33502_a1-optimized.cl +++ b/OpenCL/m33502_a1-optimized.cl @@ -46,7 +46,7 @@ CONSTANT_VK u32 pt_masks[16] = 0 }; -KERNEL_FQ void HC_ATTR_SEQ m33502_m04 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33502_m04 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -197,15 +197,15 @@ KERNEL_FQ void HC_ATTR_SEQ m33502_m04 (KERN_ATTR_ESALT (rc4_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m33502_m08 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33502_m08 (KERN_ATTR_ESALT (rc4_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m33502_m16 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33502_m16 (KERN_ATTR_ESALT (rc4_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m33502_s04 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33502_s04 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -368,10 +368,10 @@ KERNEL_FQ void HC_ATTR_SEQ m33502_s04 (KERN_ATTR_ESALT (rc4_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m33502_s08 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33502_s08 (KERN_ATTR_ESALT (rc4_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m33502_s16 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33502_s16 (KERN_ATTR_ESALT (rc4_t)) { } diff --git a/OpenCL/m33502_a3-optimized.cl b/OpenCL/m33502_a3-optimized.cl index 60f348068..8042776ce 100644 --- a/OpenCL/m33502_a3-optimized.cl +++ b/OpenCL/m33502_a3-optimized.cl @@ -220,7 +220,7 @@ DECLSPEC void m33502s (LOCAL_AS u32 *S, PRIVATE_AS u32 *w0, PRIVATE_AS u32 *w1, } } -KERNEL_FQ void HC_ATTR_SEQ m33502_m04 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33502_m04 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -271,7 +271,7 @@ KERNEL_FQ void HC_ATTR_SEQ m33502_m04 (KERN_ATTR_ESALT (rc4_t)) m33502m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m33502_m08 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33502_m08 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -322,7 +322,7 @@ KERNEL_FQ void HC_ATTR_SEQ m33502_m08 (KERN_ATTR_ESALT (rc4_t)) m33502m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m33502_m16 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33502_m16 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -373,7 +373,7 @@ KERNEL_FQ void HC_ATTR_SEQ m33502_m16 (KERN_ATTR_ESALT (rc4_t)) m33502m (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m33502_s04 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33502_s04 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -424,7 +424,7 @@ KERNEL_FQ void HC_ATTR_SEQ m33502_s04 (KERN_ATTR_ESALT (rc4_t)) m33502s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m33502_s08 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33502_s08 (KERN_ATTR_ESALT (rc4_t)) { /** * base @@ -475,7 +475,7 @@ KERNEL_FQ void HC_ATTR_SEQ m33502_s08 (KERN_ATTR_ESALT (rc4_t)) m33502s (S, w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_extra0_buf, d_extra1_buf, d_extra2_buf, d_extra3_buf, kernel_param, gid, lid, lsz); } -KERNEL_FQ void HC_ATTR_SEQ m33502_s16 (KERN_ATTR_ESALT (rc4_t)) +KERNEL_FQ KERNEL_FA void m33502_s16 (KERN_ATTR_ESALT (rc4_t)) { /** * base diff --git a/OpenCL/m33700-pure.cl b/OpenCL/m33700-pure.cl index 8be18a4da..7811340ea 100644 --- a/OpenCL/m33700-pure.cl +++ b/OpenCL/m33700-pure.cl @@ -75,7 +75,7 @@ DECLSPEC void hmac_sha256_run_V (PRIVATE_AS u32x *w0, PRIVATE_AS u32x *w1, PRIVA sha256_transform_vector (w0, w1, w2, w3, digest); } -KERNEL_FQ void HC_ATTR_SEQ m33700_init (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) +KERNEL_FQ KERNEL_FA void m33700_init (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) { /** * base @@ -157,7 +157,7 @@ KERNEL_FQ void HC_ATTR_SEQ m33700_init (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m33700_loop (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) +KERNEL_FQ KERNEL_FA void m33700_loop (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) { const u64 gid = get_global_id (0); @@ -263,7 +263,7 @@ KERNEL_FQ void HC_ATTR_SEQ m33700_loop (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, } } -KERNEL_FQ void HC_ATTR_SEQ m33700_comp (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) +KERNEL_FQ KERNEL_FA void m33700_comp (KERN_ATTR_TMPS_ESALT (pkcs_sha256_tmp_t, pkcs_t)) { const u64 gid = get_global_id (0); const u64 lid = get_local_id (0); diff --git a/OpenCL/m33800-pure.cl b/OpenCL/m33800-pure.cl index 7a6d03740..646a68c7b 100644 --- a/OpenCL/m33800-pure.cl +++ b/OpenCL/m33800-pure.cl @@ -433,7 +433,7 @@ DECLSPEC void expand_key (PRIVATE_AS u32 *E, PRIVATE_AS u32 *W, const int len) } } -KERNEL_FQ void HC_ATTR_SEQ m33800_init (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m33800_init (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base @@ -655,7 +655,7 @@ KERNEL_FQ void HC_ATTR_SEQ m33800_init (KERN_ATTR_TMPS (bcrypt_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m33800_loop (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m33800_loop (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base @@ -858,7 +858,7 @@ KERNEL_FQ void HC_ATTR_SEQ m33800_loop (KERN_ATTR_TMPS (bcrypt_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m33800_init2 (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m33800_init2 (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base @@ -1153,7 +1153,7 @@ KERNEL_FQ void HC_ATTR_SEQ m33800_init2 (KERN_ATTR_TMPS (bcrypt_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m33800_loop2 (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m33800_loop2 (KERN_ATTR_TMPS (bcrypt_tmp_t)) { // the second loop is the same as the first one, only different "password" in init2 #if defined IS_CUDA || defined IS_HIP @@ -1215,7 +1215,7 @@ KERNEL_FQ void HC_ATTR_SEQ m33800_loop2 (KERN_ATTR_TMPS (bcrypt_tmp_t)) #endif } -KERNEL_FQ void HC_ATTR_SEQ m33800_comp (KERN_ATTR_TMPS (bcrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m33800_comp (KERN_ATTR_TMPS (bcrypt_tmp_t)) { /** * base diff --git a/OpenCL/m70000-pure.cl b/OpenCL/m70000-pure.cl index b779db741..70bfd8d61 100644 --- a/OpenCL/m70000-pure.cl +++ b/OpenCL/m70000-pure.cl @@ -26,7 +26,7 @@ typedef struct } argon2_reference_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m70000_init (KERN_ATTR_TMPS (argon2_reference_tmp_t)) +KERNEL_FQ KERNEL_FA void m70000_init (KERN_ATTR_TMPS (argon2_reference_tmp_t)) { const u64 gid = get_global_id (0); @@ -42,11 +42,11 @@ KERNEL_FQ void HC_ATTR_SEQ m70000_init (KERN_ATTR_TMPS (argon2_reference_tmp_t)) tmps[gid].pw_len = pw_len; } -KERNEL_FQ void HC_ATTR_SEQ m70000_loop (KERN_ATTR_TMPS (argon2_reference_tmp_t)) +KERNEL_FQ KERNEL_FA void m70000_loop (KERN_ATTR_TMPS (argon2_reference_tmp_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m70000_comp (KERN_ATTR_TMPS (argon2_reference_tmp_t)) +KERNEL_FQ KERNEL_FA void m70000_comp (KERN_ATTR_TMPS (argon2_reference_tmp_t)) { /** * base diff --git a/OpenCL/m70100-pure.cl b/OpenCL/m70100-pure.cl index cb5269c21..38b603457 100644 --- a/OpenCL/m70100-pure.cl +++ b/OpenCL/m70100-pure.cl @@ -26,7 +26,7 @@ typedef struct } scrypt_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m70100_init (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m70100_init (KERN_ATTR_TMPS (scrypt_tmp_t)) { /** * base @@ -101,11 +101,11 @@ KERNEL_FQ void HC_ATTR_SEQ m70100_init (KERN_ATTR_TMPS (scrypt_tmp_t)) } } -KERNEL_FQ void HC_ATTR_SEQ m70100_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m70100_loop (KERN_ATTR_TMPS (scrypt_tmp_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m70100_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) +KERNEL_FQ KERNEL_FA void m70100_comp (KERN_ATTR_TMPS (scrypt_tmp_t)) { /** * base diff --git a/OpenCL/m72000-pure.cl b/OpenCL/m72000-pure.cl index 0905c07a2..340b88ff3 100644 --- a/OpenCL/m72000-pure.cl +++ b/OpenCL/m72000-pure.cl @@ -28,7 +28,7 @@ typedef struct } generic_io_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m72000_init (KERN_ATTR_TMPS (generic_io_tmp_t)) +KERNEL_FQ KERNEL_FA void m72000_init (KERN_ATTR_TMPS (generic_io_tmp_t)) { const u64 gid = get_global_id (0); @@ -44,11 +44,11 @@ KERNEL_FQ void HC_ATTR_SEQ m72000_init (KERN_ATTR_TMPS (generic_io_tmp_t)) tmps[gid].pw_len = pw_len; } -KERNEL_FQ void HC_ATTR_SEQ m72000_loop (KERN_ATTR_TMPS (generic_io_tmp_t)) +KERNEL_FQ KERNEL_FA void m72000_loop (KERN_ATTR_TMPS (generic_io_tmp_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m72000_comp (KERN_ATTR_TMPS (generic_io_tmp_t)) +KERNEL_FQ KERNEL_FA void m72000_comp (KERN_ATTR_TMPS (generic_io_tmp_t)) { /** * base diff --git a/OpenCL/m73000-pure.cl b/OpenCL/m73000-pure.cl index 6d7d1d184..bfb95c7d3 100644 --- a/OpenCL/m73000-pure.cl +++ b/OpenCL/m73000-pure.cl @@ -28,7 +28,7 @@ typedef struct } generic_io_tmp_t; -KERNEL_FQ void HC_ATTR_SEQ m73000_init (KERN_ATTR_TMPS (generic_io_tmp_t)) +KERNEL_FQ KERNEL_FA void m73000_init (KERN_ATTR_TMPS (generic_io_tmp_t)) { const u64 gid = get_global_id (0); @@ -44,11 +44,11 @@ KERNEL_FQ void HC_ATTR_SEQ m73000_init (KERN_ATTR_TMPS (generic_io_tmp_t)) tmps[gid].pw_len = pw_len; } -KERNEL_FQ void HC_ATTR_SEQ m73000_loop (KERN_ATTR_TMPS (generic_io_tmp_t)) +KERNEL_FQ KERNEL_FA void m73000_loop (KERN_ATTR_TMPS (generic_io_tmp_t)) { } -KERNEL_FQ void HC_ATTR_SEQ m73000_comp (KERN_ATTR_TMPS (generic_io_tmp_t)) +KERNEL_FQ KERNEL_FA void m73000_comp (KERN_ATTR_TMPS (generic_io_tmp_t)) { /** * base diff --git a/OpenCL/markov_be.cl b/OpenCL/markov_be.cl index 650767d7f..fb5ac8549 100644 --- a/OpenCL/markov_be.cl +++ b/OpenCL/markov_be.cl @@ -47,7 +47,7 @@ DECLSPEC void generate_pw (PRIVATE_AS u32 *pw_buf, GLOBAL_AS const cs_t *root_cs if (bits15) pw_buf[15] = (pw_l_len + pw_r_len) * 8; } -KERNEL_FQ void HC_ATTR_SEQ l_markov (KERN_ATTR_L_MARKOV) +KERNEL_FQ KERNEL_FA void l_markov (KERN_ATTR_L_MARKOV) { const u64 gid = get_global_id (0); @@ -128,7 +128,7 @@ KERNEL_FQ void HC_ATTR_SEQ l_markov (KERN_ATTR_L_MARKOV) pws_buf_l[gid] = pw; } -KERNEL_FQ void HC_ATTR_SEQ r_markov (KERN_ATTR_R_MARKOV) +KERNEL_FQ KERNEL_FA void r_markov (KERN_ATTR_R_MARKOV) { const u64 gid = get_global_id (0); @@ -206,7 +206,7 @@ KERNEL_FQ void HC_ATTR_SEQ r_markov (KERN_ATTR_R_MARKOV) pws_buf_r[gid].i = pw.i[0]; } -KERNEL_FQ void HC_ATTR_SEQ C_markov (KERN_ATTR_C_MARKOV) +KERNEL_FQ KERNEL_FA void C_markov (KERN_ATTR_C_MARKOV) { const u64 gid = get_global_id (0); diff --git a/OpenCL/markov_le.cl b/OpenCL/markov_le.cl index 5ff18285d..57e1e2ae6 100644 --- a/OpenCL/markov_le.cl +++ b/OpenCL/markov_le.cl @@ -47,7 +47,7 @@ DECLSPEC void generate_pw (PRIVATE_AS u32 *pw_buf, GLOBAL_AS const cs_t *root_cs if (bits15) pw_buf[15] = (pw_l_len + pw_r_len) * 8; } -KERNEL_FQ void HC_ATTR_SEQ l_markov (KERN_ATTR_L_MARKOV) +KERNEL_FQ KERNEL_FA void l_markov (KERN_ATTR_L_MARKOV) { const u64 gid = get_global_id (0); @@ -127,7 +127,7 @@ KERNEL_FQ void HC_ATTR_SEQ l_markov (KERN_ATTR_L_MARKOV) pws_buf_l[gid] = pw; } -KERNEL_FQ void HC_ATTR_SEQ r_markov (KERN_ATTR_R_MARKOV) +KERNEL_FQ KERNEL_FA void r_markov (KERN_ATTR_R_MARKOV) { const u64 gid = get_global_id (0); @@ -205,7 +205,7 @@ KERNEL_FQ void HC_ATTR_SEQ r_markov (KERN_ATTR_R_MARKOV) pws_buf_r[gid].i = pw.i[0]; } -KERNEL_FQ void HC_ATTR_SEQ C_markov (KERN_ATTR_C_MARKOV) +KERNEL_FQ KERNEL_FA void C_markov (KERN_ATTR_C_MARKOV) { const u64 gid = get_global_id (0); diff --git a/OpenCL/shared.cl b/OpenCL/shared.cl index 0c60cf7d9..ef06f856d 100644 --- a/OpenCL/shared.cl +++ b/OpenCL/shared.cl @@ -94,7 +94,7 @@ DECLSPEC void gpu_decompress_entry (GLOBAL_AS pw_idx_t *pws_idx, GLOBAL_AS u32 * *buf = pw; } -KERNEL_FQ void HC_ATTR_SEQ gpu_decompress (KERN_ATTR_GPU_DECOMPRESS) +KERNEL_FQ KERNEL_FA void gpu_decompress (KERN_ATTR_GPU_DECOMPRESS) { const u64 gid = get_global_id (0); @@ -107,7 +107,7 @@ KERNEL_FQ void HC_ATTR_SEQ gpu_decompress (KERN_ATTR_GPU_DECOMPRESS) pws_buf[gid] = pw; } -KERNEL_FQ void HC_ATTR_SEQ gpu_memset (KERN_ATTR_GPU_MEMSET) +KERNEL_FQ KERNEL_FA void gpu_memset (KERN_ATTR_GPU_MEMSET) { const u64 gid = get_global_id (0); @@ -139,7 +139,7 @@ KERNEL_FQ void HC_ATTR_SEQ gpu_memset (KERN_ATTR_GPU_MEMSET) buf[gid] = r; } -KERNEL_FQ void HC_ATTR_SEQ gpu_bzero (KERN_ATTR_GPU_BZERO) +KERNEL_FQ KERNEL_FA void gpu_bzero (KERN_ATTR_GPU_BZERO) { const u64 gid = get_global_id (0); @@ -171,7 +171,7 @@ KERNEL_FQ void HC_ATTR_SEQ gpu_bzero (KERN_ATTR_GPU_BZERO) buf[gid] = r; } -KERNEL_FQ void HC_ATTR_SEQ gpu_atinit (KERN_ATTR_GPU_ATINIT) +KERNEL_FQ KERNEL_FA void gpu_atinit (KERN_ATTR_GPU_ATINIT) { const u64 gid = get_global_id (0); @@ -253,7 +253,7 @@ KERNEL_FQ void HC_ATTR_SEQ gpu_atinit (KERN_ATTR_GPU_ATINIT) buf[gid] = pw; } -KERNEL_FQ void HC_ATTR_SEQ gpu_utf8_to_utf16 (KERN_ATTR_GPU_UTF8_TO_UTF16) +KERNEL_FQ KERNEL_FA void gpu_utf8_to_utf16 (KERN_ATTR_GPU_UTF8_TO_UTF16) { const u64 gid = get_global_id (0); diff --git a/src/modules/module_29800.c b/src/modules/module_29800.c index fd78316f0..5e3517e20 100644 --- a/src/modules/module_29800.c +++ b/src/modules/module_29800.c @@ -20,7 +20,7 @@ static const u32 DGST_POS3 = 3; static const u32 DGST_SIZE = DGST_SIZE_4_4; static const u32 HASH_CATEGORY = HASH_CATEGORY_CRYPTOCURRENCY_WALLET; static const char *HASH_NAME = "Bisq .wallet (scrypt)"; -static const u64 KERN_TYPE = 29800; +static const u64 KERN_TYPE = 27700; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_LE diff --git a/src/modules/scrypt_common.c b/src/modules/scrypt_common.c index 081d63f01..000115a8a 100644 --- a/src/modules/scrypt_common.c +++ b/src/modules/scrypt_common.c @@ -65,11 +65,24 @@ const char *scrypt_module_extra_tuningdb_block (MAYBE_UNUSED const hashconfig_t const u32 device_processors = device_param->device_processors; + const u32 device_maxworkgroup_size = device_param->device_maxworkgroup_size; + //const u32 device_local_mem_size = device_param->device_local_mem_size; - const u64 fixed_mem = (512 * 1024 * 1024); // some storage we need for pws[], tmps[], and others + const u64 fixed_mem = (128 * 1024 * 1024); // some storage we need for pws[], tmps[], and others. Is around 72MiB in reality. - const u64 available_mem = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)) - fixed_mem; + // SCRYPT kernels cause significant spilling, which increases global memory requirements. + // The variables the runtime uses to allocate global memory for this spilling are undocumented. + // As a result, launching the kernel can run into memory allocation errors, especially on devices with a large SM count and a high SCRYPT-R value. + // Based on testing, we assume the following behavior: + // The runtime uses device_maxworkgroup_size as the thread count, multiplies it by the SM count, and then multiplies that by the spill size. + // Additionally, it completely ignores our specified grid sizes, which could otherwise help mitigate this. + // We assume other runtimes behave similarly. + // Note: we need to allocate the 128R buffer three times: main context, TMTO temporary buffer, (half-size) BlockMix. + + const u64 spill_mem = 3 * ((128ULL * scrypt_r) * device_processors * device_maxworkgroup_size); + + const u64 available_mem = MIN (device_param->device_available_mem, (device_param->device_maxmem_alloc * 4)) - (fixed_mem + spill_mem); tmto = 0; @@ -266,7 +279,15 @@ u64 scrypt_module_extra_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, M } } - const u64 tmp_size = 128ULL * scrypt_r * scrypt_p; + // this is what we call SCRYPT_SZ in kernel + + u64 tmp_size = 128ULL * scrypt_r * scrypt_p; + + // we need twice the size of SCRYPT_SZ so we can have two elements of that size. + // we can safely process blockmix on the second element without modifying the first element. + // this can be useful when using hooks in combination with P > 1 + + tmp_size *= 2; return tmp_size; } @@ -277,11 +298,16 @@ char *scrypt_module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconf const u32 scrypt_r = (hashes->salts_buf[0].scrypt_r == 0) ? hashes->st_salts_buf[0].scrypt_r : hashes->salts_buf[0].scrypt_r; const u32 scrypt_p = (hashes->salts_buf[0].scrypt_p == 0) ? hashes->st_salts_buf[0].scrypt_p : hashes->salts_buf[0].scrypt_p; - const u64 tmp_size = 128ULL * scrypt_r * scrypt_p; + u64 tmp_size = 128ULL * scrypt_r * scrypt_p; + + tmp_size *= 2; // see scrypt_module_extra_tmp_size for details char *jit_build_options = NULL; - hc_asprintf (&jit_build_options, "-D SCRYPT_N=%u -D SCRYPT_R=%u -D SCRYPT_P=%u -D SCRYPT_TMTO=%u -D SCRYPT_TMP_ELEM=%" PRIu64, + const u32 expected_threads = scrypt_exptected_threads (hashconfig, user_options, user_options_extra, device_param); + + hc_asprintf (&jit_build_options, "-D FIXED_LOCAL_SIZE=%u -D SCRYPT_N=%u -D SCRYPT_R=%u -D SCRYPT_P=%u -D SCRYPT_TMTO=%u -D SCRYPT_TMP_ELEM=%" PRIu64, + expected_threads, scrypt_N, scrypt_r, scrypt_p, From ed10e6a913142b0ad0e31f70f9c35da06956de9f Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Sun, 22 Jun 2025 20:17:52 +0200 Subject: [PATCH 84/95] Autotune and Benchmark refactoring MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This change affects three key areas, each improving autotuning: - Autotune refactoring itself The main autotune algorithm had become too complex to maintain and has now been rewritten from scratch. The engine is now closer to the old v6.0.0 version, using a much more straightforward approach. Additionally, the backend is now informed when the autotune engine runs its operations and runs an extra invisible kernel invocation. This significantly improves runtime accuracy because the same caching mechanisms which kick in normal cracking sessions now also apply during autotuning. This leads to more consistent and reliable automatic workload tuning. - Benchmarking and '--speed-only' accuracy bugs fixed Benchmark runtimes had become too short, especially since the default benchmark mask changed from '?b?b?b?b?b?b?b' to '?a?a?a?a?a?a?a?a'. For very fast hashes like NTLM, benchmarks often stopped immediately when base words needed to be regenerated, producing highly inaccurate results. This issue also misled users tuning '-n' values, as manually oversubscribing kernels could mask the problem, creating the impression that increasing '-n' had a larger impact on performance than it truly does. While '-n' still has an effect, it’s not as significant. With this fix, users achieve the same speed without needing to tune '-n' manually. The bug was fixed by enforcing a minimum benchmark runtime of 4 seconds, regardless of kernel runtime or kernel type. This ensures more stable and realistic benchmark results, but typically increasing the benchmark duration by up to 4 seconds. - Kernel-Threads set to 32 and plugin configuration cleanup Some plugin configurations existed solely to work around the old benchmarking bug and can now be removed. For example, 'OPTS_TYPE_MAXIMUM_THREADS' is no longer required and has been removed from all plugins, although the parameter itself remains to avoid breaking custom plugins. Because increasing threads beyond 32 no longer offers meaningful performance gains, the default is now capped at 32 (unless overridden with '-T'). This simplifies GPU memory management. Currently, work-item counts are indirectly limited by buffer sizes (e.g., 'pws_buf[]'), which must not exceed 4 GiB (a hard-coded limit). This buffer size depends on the product of 'kernel-accel', 'kernel-threads', and the device’s compute units. By reducing the default threads from 1024 to 32, there is now more space available for base words. --- include/backend.h | 4 +- src/autotune.c | 144 ++++--------------------------------- src/backend.c | 110 ++++++++++++++++------------ src/modules/module_01800.c | 13 +--- src/modules/module_06231.c | 3 +- src/modules/module_06232.c | 3 +- src/modules/module_06233.c | 3 +- src/modules/module_08700.c | 3 +- src/modules/module_09600.c | 11 ++- src/modules/module_10700.c | 3 +- src/modules/module_11700.c | 3 +- src/modules/module_11750.c | 3 +- src/modules/module_11760.c | 3 +- src/modules/module_11800.c | 3 +- src/modules/module_11850.c | 3 +- src/modules/module_11860.c | 3 +- src/modules/module_13100.c | 3 +- src/modules/module_13731.c | 3 +- src/modules/module_13732.c | 3 +- src/modules/module_13733.c | 3 +- src/modules/module_13771.c | 3 +- src/modules/module_13772.c | 3 +- src/modules/module_13773.c | 3 +- src/modules/module_13781.c | 3 +- src/modules/module_13782.c | 3 +- src/modules/module_13783.c | 3 +- src/modules/module_18600.c | 3 +- src/modules/module_19000.c | 3 +- src/modules/module_19300.c | 3 +- src/modules/module_20510.c | 1 - src/modules/module_21000.c | 3 +- src/modules/module_24500.c | 3 +- src/modules/module_26000.c | 3 +- src/modules/module_27000.c | 1 - src/modules/module_27100.c | 1 - src/modules/module_29431.c | 3 +- src/modules/module_29432.c | 3 +- src/modules/module_29433.c | 3 +- src/selftest.c | 36 +++++----- src/user_options.c | 2 +- 40 files changed, 141 insertions(+), 272 deletions(-) diff --git a/include/backend.h b/include/backend.h index 0e3fe2359..339fd6bf9 100644 --- a/include/backend.h +++ b/include/backend.h @@ -56,7 +56,7 @@ int gidd_to_pw_t (hashcat_ctx_t *hashcat_ctx, hc_devi int copy_pws_idx (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, u64 gidd, const u64 cnt, pw_idx_t *dest); int copy_pws_comp (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, u32 off, u32 cnt, u32 *dest); -int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, const u32 highest_pw_len, const u64 pws_pos, const u64 pws_cnt, const u32 fast_iteration, const u32 salt_pos); +int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, const u32 highest_pw_len, const u64 pws_pos, const u64 pws_cnt, const u32 fast_iteration, const u32 salt_pos, const bool is_autotune); int run_cuda_kernel_atinit (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, CUdeviceptr buf, const u64 num); int run_cuda_kernel_utf8toutf16le (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, CUdeviceptr buf, const u64 num); @@ -84,7 +84,7 @@ int run_opencl_kernel_memset (hashcat_ctx_t *hashcat_ctx, hc_devi int run_opencl_kernel_memset32 (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, cl_mem buf, const u64 offset, const u32 value, const u64 size); int run_opencl_kernel_bzero (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, cl_mem buf, const u64 size); -int run_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, const u32 kern_run, const u64 pws_pos, const u64 num, const u32 event_update, const u32 iteration); +int run_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, const u32 kern_run, const u64 pws_pos, const u64 num, const u32 event_update, const u32 iteration, const bool is_autotune); int run_kernel_mp (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, const u32 kern_run, const u64 num); int run_kernel_tm (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param); int run_kernel_amp (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, const u64 num); diff --git a/src/autotune.c b/src/autotune.c index 64bfab721..754b4827a 100644 --- a/src/autotune.c +++ b/src/autotune.c @@ -47,16 +47,16 @@ static double try_run (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_par { if (hashconfig->opti_type & OPTI_TYPE_OPTIMIZED_KERNEL) { - run_kernel (hashcat_ctx, device_param, KERN_RUN_1, 0, kernel_power_try, true, 0); + run_kernel (hashcat_ctx, device_param, KERN_RUN_1, 0, kernel_power_try, true, 0, true); } else { - run_kernel (hashcat_ctx, device_param, KERN_RUN_4, 0, kernel_power_try, true, 0); + run_kernel (hashcat_ctx, device_param, KERN_RUN_4, 0, kernel_power_try, true, 0, true); } } else { - run_kernel (hashcat_ctx, device_param, KERN_RUN_2, 0, kernel_power_try, true, 0); + run_kernel (hashcat_ctx, device_param, KERN_RUN_2, 0, kernel_power_try, true, 0, true); } device_param->spin_damp = spin_damp_sav; @@ -142,28 +142,21 @@ static int autotune (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param // this thread limiting is also performed inside run_kernel() so we need to redo it here, too u32 kernel_wgs = 0; - u32 kernel_wgs_multiple = 0; if (hashconfig->attack_exec == ATTACK_EXEC_INSIDE_KERNEL) { if (hashconfig->opti_type & OPTI_TYPE_OPTIMIZED_KERNEL) { kernel_wgs = device_param->kernel_wgs1; - - kernel_wgs_multiple = device_param->kernel_preferred_wgs_multiple1; } else { kernel_wgs = device_param->kernel_wgs4; - - kernel_wgs_multiple = device_param->kernel_preferred_wgs_multiple4; } } else { kernel_wgs = device_param->kernel_wgs2; - - kernel_wgs_multiple = device_param->kernel_preferred_wgs_multiple2; } u32 kernel_threads = kernel_threads_max; @@ -298,13 +291,13 @@ static int autotune (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param device_param->kernel_threads = device_param->kernel_wgs1; - run_kernel (hashcat_ctx, device_param, KERN_RUN_1, 0, kernel_power_max, false, 0); + run_kernel (hashcat_ctx, device_param, KERN_RUN_1, 0, kernel_power_max, false, 0, true); if (hashconfig->opts_type & OPTS_TYPE_LOOP_PREPARE) { device_param->kernel_threads = device_param->kernel_wgs2p; - run_kernel (hashcat_ctx, device_param, KERN_RUN_2P, 0, kernel_power_max, false, 0); + run_kernel (hashcat_ctx, device_param, KERN_RUN_2P, 0, kernel_power_max, false, 0, true); } device_param->kernel_threads = kernel_threads_sav; @@ -312,8 +305,6 @@ static int autotune (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param // Do a pre-autotune test run to find out if kernel runtime is above some TDR limit - u32 kernel_loops_max_reduced = kernel_loops_max; - if (true) { double exec_msec = try_run (hashcat_ctx, device_param, kernel_accel_min, kernel_loops_min, kernel_threads); @@ -326,146 +317,39 @@ static int autotune (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param return -1; } - - exec_msec = try_run (hashcat_ctx, device_param, kernel_accel_min, kernel_loops_min, kernel_threads); - - const u32 mm = kernel_loops_max / kernel_loops_min; - - if ((exec_msec * mm) > target_msec) - { - const u32 loops_valid = (const u32) (target_msec / exec_msec); - - kernel_loops_max_reduced = kernel_loops_min * loops_valid; - } } - // first find out highest kernel-loops that stays below target_msec + // v7 autotuner is a lot more straight forward - if (kernel_loops_min < kernel_loops_max) + for (u32 kernel_loops_test = kernel_loops_min; kernel_loops_test <= kernel_loops_max; kernel_loops_test <<= 1) { - for (kernel_loops = kernel_loops_max; kernel_loops > kernel_loops_min; kernel_loops >>= 1) - { - if (kernel_loops > kernel_loops_max_reduced) continue; + double exec_msec = try_run (hashcat_ctx, device_param, kernel_accel_min, kernel_loops_test, kernel_threads); - double exec_msec = try_run_times (hashcat_ctx, device_param, kernel_accel_min, kernel_loops, kernel_threads, 1); + if (exec_msec > target_msec) break; - if (exec_msec < target_msec) break; - } + kernel_loops = kernel_loops_test; } - #define STEPS_CNT 16 + #define STEPS_CNT 12 - // now the same for kernel-accel but with the new kernel-loops from previous loop set + // now we tune for kernel-accel but with the new kernel-loops from previous loop set if (kernel_accel_min < kernel_accel_max) { for (int i = 0; i < STEPS_CNT; i++) { - const u32 kernel_accel_try = 1U << i; + const u32 kernel_accel_try = kernel_accel * 2; if (kernel_accel_try < kernel_accel_min) continue; if (kernel_accel_try > kernel_accel_max) break; - double exec_msec = try_run_times (hashcat_ctx, device_param, kernel_accel_try, kernel_loops, kernel_threads, 1); + double exec_msec = try_run_times (hashcat_ctx, device_param, kernel_accel_try, kernel_loops, kernel_threads, 3); if (exec_msec > target_msec) break; kernel_accel = kernel_accel_try; } } - - // now find the middle balance between kernel_accel and kernel_loops - // while respecting allowed ranges at the same time - - if (kernel_accel < kernel_loops) - { - const u32 kernel_accel_orig = kernel_accel; - const u32 kernel_loops_orig = kernel_loops; - - double exec_msec_prev = try_run_times (hashcat_ctx, device_param, kernel_accel, kernel_loops, kernel_threads, 1); - - for (int i = 1; i < STEPS_CNT; i++) - { - const u32 kernel_accel_try = kernel_accel_orig * (1U << i); - const u32 kernel_loops_try = kernel_loops_orig / (1U << i); - - if (kernel_accel_try < kernel_accel_min) continue; - if (kernel_accel_try > kernel_accel_max) break; - - if (kernel_loops_try > kernel_loops_max) continue; - if (kernel_loops_try < kernel_loops_min) break; - - // do a real test - - const double exec_msec = try_run_times (hashcat_ctx, device_param, kernel_accel_try, kernel_loops_try, kernel_threads, 1); - - if (exec_msec_prev < exec_msec) break; - - exec_msec_prev = exec_msec; - - // so far, so good! save - - kernel_accel = kernel_accel_try; - kernel_loops = kernel_loops_try; - - // too much if the next test is true - - if (kernel_loops_try < kernel_accel_try) break; - } - } - - double exec_msec_pre_final = try_run_times (hashcat_ctx, device_param, kernel_accel, kernel_loops, kernel_threads, 1); - - const u32 exec_left = (const u32) (target_msec / exec_msec_pre_final); - - const u32 accel_left = kernel_accel_max / kernel_accel; - - const u32 exec_accel_min = MIN (exec_left, accel_left); // we want that to be int - - if (exec_accel_min >= 1) - { - // this is safe to not overflow kernel_accel_max because of accel_left - - kernel_accel *= exec_accel_min; - } - - // v6.2.4 new section: find thread count - // This is not as effective as it could be because of inaccurate kernel return timers - // But is better than fixed values - // Timers in this section are critical, so we rerun measurements 3 times - - if (kernel_threads_max > kernel_threads_min) - { - const u32 kernel_accel_orig = kernel_accel; - const u32 kernel_threads_orig = kernel_threads; - - double exec_msec_prev = try_run_times (hashcat_ctx, device_param, kernel_accel, kernel_loops, kernel_threads, 3); - - for (int i = 1; i < STEPS_CNT; i++) - { - const u32 kernel_accel_try = kernel_accel_orig * (1U << i); - const u32 kernel_threads_try = kernel_threads_orig / (1U << i); - - // since we do not modify total amount of workitems, we can (and need) to do increase kernel_accel_max - - const u32 kernel_accel_max_try = kernel_accel_max * (1U << i); - - if (kernel_accel_try > kernel_accel_max_try) break; - - if (kernel_threads_try < kernel_threads_min) break; - - if (kernel_threads_try % kernel_wgs_multiple) break; // this would just be waste of time - - double exec_msec = try_run_times (hashcat_ctx, device_param, kernel_accel_try, kernel_loops, kernel_threads_try, 3); - - if (exec_msec > exec_msec_prev) continue; - - exec_msec_prev = exec_msec; - - kernel_accel = kernel_accel_try; - kernel_threads = kernel_threads_try; - } - } } // reset them fake words diff --git a/src/backend.c b/src/backend.c index 51375a56a..d9880c195 100644 --- a/src/backend.c +++ b/src/backend.c @@ -941,7 +941,7 @@ int copy_pws_comp (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, return 0; } -int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, const u32 highest_pw_len, const u64 pws_pos, const u64 pws_cnt, const u32 fast_iteration, const u32 salt_pos) +int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, const u32 highest_pw_len, const u64 pws_pos, const u64 pws_cnt, const u32 fast_iteration, const u32 salt_pos, const bool is_autotune) { bridge_ctx_t *bridge_ctx = hashcat_ctx->bridge_ctx; hashconfig_t *hashconfig = hashcat_ctx->hashconfig; @@ -1025,20 +1025,20 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, if (highest_pw_len < 16) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_1, pws_pos, pws_cnt, true, fast_iteration) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_1, pws_pos, pws_cnt, true, fast_iteration, is_autotune) == -1) return -1; } else if (highest_pw_len < 32) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_2, pws_pos, pws_cnt, true, fast_iteration) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_2, pws_pos, pws_cnt, true, fast_iteration, is_autotune) == -1) return -1; } else { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_3, pws_pos, pws_cnt, true, fast_iteration) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_3, pws_pos, pws_cnt, true, fast_iteration, is_autotune) == -1) return -1; } } else { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_4, pws_pos, pws_cnt, true, fast_iteration) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_4, pws_pos, pws_cnt, true, fast_iteration, is_autotune) == -1) return -1; } } else @@ -1159,12 +1159,12 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, if (hashconfig->opts_type & OPTS_TYPE_INIT) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_1, pws_pos, pws_cnt, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_1, pws_pos, pws_cnt, false, 0, is_autotune) == -1) return -1; } if (hashconfig->opts_type & OPTS_TYPE_HOOK12) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_12, pws_pos, pws_cnt, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_12, pws_pos, pws_cnt, false, 0, is_autotune) == -1) return -1; if (device_param->is_cuda == true) { @@ -1259,7 +1259,7 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, if (hashconfig->opts_type & OPTS_TYPE_LOOP_PREPARE) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_2P, pws_pos, pws_cnt, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_2P, pws_pos, pws_cnt, false, 0, is_autotune) == -1) return -1; } if (true) @@ -1279,12 +1279,12 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, if (hashconfig->opts_type & OPTS_TYPE_LOOP) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_2, pws_pos, pws_cnt, true, slow_iteration) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_2, pws_pos, pws_cnt, true, slow_iteration, is_autotune) == -1) return -1; } if (hashconfig->opts_type & OPTS_TYPE_LOOP_EXTENDED) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_2E, pws_pos, pws_cnt, true, slow_iteration) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_2E, pws_pos, pws_cnt, true, slow_iteration, is_autotune) == -1) return -1; } //bug? @@ -1416,7 +1416,7 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, if (hashconfig->opts_type & OPTS_TYPE_HOOK23) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_23, pws_pos, pws_cnt, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_23, pws_pos, pws_cnt, false, 0, is_autotune) == -1) return -1; if (device_param->is_cuda == true) { @@ -1508,7 +1508,7 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, if (hashconfig->opts_type & OPTS_TYPE_INIT2) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_INIT2, pws_pos, pws_cnt, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_INIT2, pws_pos, pws_cnt, false, 0, is_autotune) == -1) return -1; } if (true) @@ -1521,7 +1521,7 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, if (hashconfig->opts_type & OPTS_TYPE_LOOP2_PREPARE) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_LOOP2P, pws_pos, pws_cnt, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_LOOP2P, pws_pos, pws_cnt, false, 0, is_autotune) == -1) return -1; } if (hashconfig->opts_type & OPTS_TYPE_LOOP2) @@ -1539,7 +1539,7 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, device_param->kernel_param.loop_pos = loop_pos; device_param->kernel_param.loop_cnt = loop_left; - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_LOOP2, pws_pos, pws_cnt, true, slow_iteration) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_LOOP2, pws_pos, pws_cnt, true, slow_iteration, is_autotune) == -1) return -1; //bug? //while (status_ctx->run_thread_level2 == false) break; @@ -1647,7 +1647,7 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, if (hashconfig->opts_type & OPTS_TYPE_AUX1) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_AUX1, pws_pos, pws_cnt, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_AUX1, pws_pos, pws_cnt, false, 0, is_autotune) == -1) return -1; if (status_ctx->run_thread_level2 == false) break; @@ -1656,7 +1656,7 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, if (hashconfig->opts_type & OPTS_TYPE_AUX2) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_AUX2, pws_pos, pws_cnt, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_AUX2, pws_pos, pws_cnt, false, 0, is_autotune) == -1) return -1; if (status_ctx->run_thread_level2 == false) break; @@ -1665,7 +1665,7 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, if (hashconfig->opts_type & OPTS_TYPE_AUX3) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_AUX3, pws_pos, pws_cnt, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_AUX3, pws_pos, pws_cnt, false, 0, is_autotune) == -1) return -1; if (status_ctx->run_thread_level2 == false) break; @@ -1674,7 +1674,7 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, if (hashconfig->opts_type & OPTS_TYPE_AUX4) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_AUX4, pws_pos, pws_cnt, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_AUX4, pws_pos, pws_cnt, false, 0, is_autotune) == -1) return -1; if (status_ctx->run_thread_level2 == false) break; @@ -1685,7 +1685,7 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, { if (hashconfig->opts_type & OPTS_TYPE_COMP) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_3, pws_pos, pws_cnt, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_3, pws_pos, pws_cnt, false, 0, is_autotune) == -1) return -1; } if (status_ctx->run_thread_level2 == false) break; @@ -1703,7 +1703,7 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, const u32 deep_comp_kernel = module_ctx->module_deep_comp_kernel (hashes, salt_pos, loops_pos); - if (run_kernel (hashcat_ctx, device_param, deep_comp_kernel, pws_pos, pws_cnt, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, deep_comp_kernel, pws_pos, pws_cnt, false, 0, is_autotune) == -1) return -1; if (status_ctx->run_thread_level2 == false) break; } @@ -1713,7 +1713,7 @@ int choose_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, { if (hashconfig->opts_type & OPTS_TYPE_COMP) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_3, pws_pos, pws_cnt, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_3, pws_pos, pws_cnt, false, 0, is_autotune) == -1) return -1; } } } @@ -2268,7 +2268,7 @@ int run_opencl_kernel_bzero (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *devi return 0; } -int run_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, const u32 kern_run, const u64 pws_pos, const u64 num, const u32 event_update, const u32 iteration) +int run_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, const u32 kern_run, const u64 pws_pos, const u64 num, const u32 event_update, const u32 iteration, const bool is_autotune) { const hashconfig_t *hashconfig = hashcat_ctx->hashconfig; const status_ctx_t *status_ctx = hashcat_ctx->status_ctx; @@ -2431,6 +2431,11 @@ int run_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, con } } + if (is_autotune == true) + { + if (hc_cuLaunchKernel (hashcat_ctx, cuda_function, num_elements, 1, 1, kernel_threads, 1, 1, dynamic_shared_mem, device_param->cuda_stream, device_param->kernel_params, NULL) == -1) return -1; + } + if (hc_cuEventRecord (hashcat_ctx, device_param->cuda_event1, device_param->cuda_stream) == -1) return -1; if (hc_cuLaunchKernel (hashcat_ctx, cuda_function, num_elements, 1, 1, kernel_threads, 1, 1, dynamic_shared_mem, device_param->cuda_stream, device_param->kernel_params, NULL) == -1) return -1; @@ -2527,6 +2532,11 @@ int run_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, con } } + if (is_autotune == true) + { + if (hc_hipLaunchKernel (hashcat_ctx, hip_function, num_elements, 1, 1, kernel_threads, 1, 1, dynamic_shared_mem, device_param->hip_stream, device_param->kernel_params, NULL) == -1) return -1; + } + if (hc_hipEventRecord (hashcat_ctx, device_param->hip_event1, device_param->hip_stream) == -1) return -1; if (hc_hipLaunchKernel (hashcat_ctx, hip_function, num_elements, 1, 1, kernel_threads, 1, 1, dynamic_shared_mem, device_param->hip_stream, device_param->kernel_params, NULL) == -1) return -1; @@ -2650,6 +2660,11 @@ int run_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, con const size_t global_work_size[3] = { num_elements, 1, 1 }; const size_t local_work_size[3] = { kernel_threads, 1, 1 }; + if (is_autotune == true) + { + hc_mtlEncodeComputeCommand (hashcat_ctx, metal_command_encoder, metal_command_buffer, global_work_size[0], local_work_size[0], &ms); + } + double ms = 0; const int rc_cc = hc_mtlEncodeComputeCommand (hashcat_ctx, metal_command_encoder, metal_command_buffer, global_work_size[0], local_work_size[0], &ms); @@ -2760,6 +2775,11 @@ int run_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, con const size_t global_work_size[3] = { num_elements, 1, 1 }; const size_t local_work_size[3] = { kernel_threads, 1, 1 }; + if (is_autotune == true) + { + if (hc_clEnqueueNDRangeKernel (hashcat_ctx, device_param->opencl_command_queue, opencl_kernel, 1, NULL, global_work_size, local_work_size, 0, NULL, &opencl_event) == -1) return -1; + } + if (hc_clEnqueueNDRangeKernel (hashcat_ctx, device_param->opencl_command_queue, opencl_kernel, 1, NULL, global_work_size, local_work_size, 0, NULL, &opencl_event) == -1) return -1; // spin damper section @@ -3683,6 +3703,23 @@ int run_copy (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, const } } + if (device_param->is_cuda == true) + { + if (hc_cuStreamSynchronize (hashcat_ctx, device_param->cuda_stream) == -1) return -1; + } + + if (device_param->is_hip == true) + { + if (hc_hipStreamSynchronize (hashcat_ctx, device_param->hip_stream) == -1) return -1; + } + + #if defined (__APPLE__) + if (device_param->is_metal == true) + { + // what to do here? + } + #endif + if (device_param->is_opencl == true) { if (hc_clFlush (hashcat_ctx, device_param->opencl_command_queue) == -1) return -1; @@ -3756,13 +3793,6 @@ int run_cracker (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, co device_param->outerloop_pos = 0; device_param->outerloop_left = pws_cnt; - // we ignore the time to copy data over pci bus in this case - - if (user_options->speed_only == true) - { - hc_timer_set (&device_param->timer_speed); - } - // loop start: most outer loop = salt iteration, then innerloops (if multi) u32 salts_cnt = hashes->salts_cnt; @@ -4290,7 +4320,7 @@ int run_cracker (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, co } } - if (choose_kernel (hashcat_ctx, device_param, highest_pw_len, pws_pos, pws_cnt, fast_iteration, salt_pos) == -1) return -1; + if (choose_kernel (hashcat_ctx, device_param, highest_pw_len, pws_pos, pws_cnt, fast_iteration, salt_pos, false) == -1) return -1; /** * benchmark was aborted because too long kernel runtime (slow hashes only) @@ -4357,16 +4387,6 @@ int run_cracker (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, co if (user_options->speed_only == true) { - // let's abort this so that the user doesn't have to wait too long on the result - // for slow hashes it's fine anyway as boost mode should be turned on - - if (hashconfig->attack_exec == ATTACK_EXEC_OUTSIDE_KERNEL) - { - device_param->speed_only_finish = true; - - break; - } - double total_msec = device_param->speed_msec[0]; for (u32 speed_pos = 1; speed_pos < device_param->speed_pos; speed_pos++) @@ -4443,7 +4463,7 @@ int run_cracker (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, co device_param->outerloop_msec = total_msec * hashes->salts_cnt * device_param->outerloop_multi; - device_param->speed_only_finish = true; + //device_param->speed_only_finish = true; } if (iconv_enabled == true) @@ -10188,8 +10208,10 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) } else { - if (device_param->is_hip == true) - { + // v7 test, needs some larger test, but I think we will need to stick to this + + //if (device_param->is_hip == true) + //{ const u32 native_threads = device_param->kernel_preferred_wgs_multiple; if ((native_threads >= device_param->kernel_threads_min) && (native_threads <= device_param->kernel_threads_max)) @@ -10201,7 +10223,7 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) { // abort? } - } + //} } // this seems to work always diff --git a/src/modules/module_01800.c b/src/modules/module_01800.c index 3e47ca1b5..fea4851c6 100644 --- a/src/modules/module_01800.c +++ b/src/modules/module_01800.c @@ -22,9 +22,7 @@ static const u64 KERN_TYPE = 1800; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE | OPTI_TYPE_USES_BITS_64; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE - | OPTS_TYPE_PT_GENERATE_LE - | OPTS_TYPE_MP_MULTI_DISABLE - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_PT_GENERATE_LE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "$6$72820166$U4DVzpcYxgw7MVVDGGvB2/H5lRistD5.Ah4upwENR5UtffLR4X4SxSzfREv8z6wVl0jRFX40/KnYVvK4829kD1"; @@ -417,13 +415,6 @@ static void sha512crypt_encode (const u8 digest[64], u8 buf[86]) buf[85] = int_to_itoa64 (l & 0x3f); //l >>= 6; } -u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_threads_max = 256; - - return kernel_threads_max; -} - bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) { if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) @@ -616,7 +607,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_kernel_accel_min = MODULE_DEFAULT; module_ctx->module_kernel_loops_max = MODULE_DEFAULT; module_ctx->module_kernel_loops_min = MODULE_DEFAULT; - module_ctx->module_kernel_threads_max = module_kernel_threads_max; + module_ctx->module_kernel_threads_max = MODULE_DEFAULT; module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; diff --git a/src/modules/module_06231.c b/src/modules/module_06231.c index 72525f3a0..9dbc28864 100644 --- a/src/modules/module_06231.c +++ b/src/modules/module_06231.c @@ -26,8 +26,7 @@ static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE | OPTI_TYPE_SLOW_HASH_SIMD_LOOP; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_LE - | OPTS_TYPE_BINARY_HASHFILE - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_BINARY_HASHFILE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "cf53d4153414b63285e701e52c2d99e148c6ccc4508132f82cb41862d0a0ac9ea16274285ac261c339c1508eec9fea54c33e382458662913678f2a88a84959a678e238973985ec670d50252677430587ee28b72bfa5edfb2f79c40b734ba8a54a3662642a6ab067e75f41154688ad4adb5d6decd891462dd537188195a51e06fa5baf22b69d0f472cfeeae77ab9a90091731863af1d8b5b380da179fa7d5227ef031732b1ae06e0fe34c0b28b7a64eac34e5a08e09d7001394b3afc804ac69bf819cdd2d383fe96a721f7c683628da8e529d84bdaa68d702573d8f7ef26f75d1bd5c91efa88cb33b1e9c006b87981c55ed3b8063ab7068f8e99b128bc56ea3e883efa55d6f340b2681e50405d91f5f6d76cdbeac404944164d329d3ee01311de0bc6547310f126b5a4c0e9fb74825f91faefa60b7ac828819d4544c1872ff5041e61d5cf093553f427358b2181046376d7b876e1bccf0774d5d251b7c922c214bb5c70c715165d028e1dca73e7adeca3396d77f6e597a10dd4c58f37fdbbdc1d04cd8890ba4c5025776a88a349bb925add13193becf1ca10fe32536db0c0b06a1ef799fb692e304b3716ca5a8a80859c4012ca3e06701b46b5a32f4d10e285a0cdaf6c24e0d98139e7f306e52503c9b503aa28f1fbbb236284907068074fcb3e267e3c4aab2bd3b79b24a7a08106bb55850fa2bb8e2f6d9919a6743cb822c164"; diff --git a/src/modules/module_06232.c b/src/modules/module_06232.c index 962f3541c..83088fd6b 100644 --- a/src/modules/module_06232.c +++ b/src/modules/module_06232.c @@ -26,8 +26,7 @@ static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE | OPTI_TYPE_SLOW_HASH_SIMD_LOOP; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_LE - | OPTS_TYPE_BINARY_HASHFILE - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_BINARY_HASHFILE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "e9e503972b72dee996b0bfced2df003a54b42399e3586520cf1f69475ba32aff564e40e604a505af95ce15220f558ae815e94ce4953882a8299ee3fffb12e9bd62bf8e2c41c0a8337ce20d45715440cc83e394200d351c5b04be5b70fa11b8467320a091a1d703c88cc7b26fd114795c04a973b3266ba97f55d4b4e4771bb1b4a6aabc9d57e03f0ae7c8a77dfc3d37078efba45031e7d63bb514726e2f2dc6da8cce167a17e36b32c326a5bcaa2c4b445f6e10e1f899a9adcc2a698769f900b7909f7aec52fc9862d75286ffda67933f9c52e5c681d590ad0329b85f8db0f6bb6daa3b2d55b62c65da37e3e7fcb99954e0abe20c39724e8fb2c7f839ec67d35f151dfd8c4dd4bc8dc4393fab291efa08cc0099277d219a0ba4c6272af3684d8043ed3f502b98e196dc7aa0291627613179199976f28eff08649acf70aa0c0dc5896ed13eb18ea28fdd6c460a9c7cfedeab5ac80a3c195226cfca094a7590fa2ae5ed2133ba09b5466b2049b6291f8dcf345e5718a4c0ef3f9c8d8e07d0e5dddd07452b533fbf243ef063fb6d26759ae725d8ca430f8cf17b86665d23bdff1c9dbdfe601b88e87cb7c89f23abc4a8bb1f0b7375cc29b1d81c950ffe92e16e2080e1d6270bbb3ba753322d2b623caed87213e552c33e699d4010f0f61df2b7f460d7cd82e70a711388f1c0b591d424259d3de8b3628daf62c6c5b71864eb0e7d31"; diff --git a/src/modules/module_06233.c b/src/modules/module_06233.c index 4dbf860a8..5c928a646 100644 --- a/src/modules/module_06233.c +++ b/src/modules/module_06233.c @@ -26,8 +26,7 @@ static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE | OPTI_TYPE_SLOW_HASH_SIMD_LOOP; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_LE - | OPTS_TYPE_BINARY_HASHFILE - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_BINARY_HASHFILE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "de7d6725cc4c910a7e96307df69d41335e64d17b4425ca5bf1730f27820f92df9f20f3e855d8566eb5255927153f987348789666c8e563e366a09e68a8126b11c25ac817b2706dde5cec3946e64332b21b41b928985c1a637559ead5b4fecac74ff0d625ef6d8be93dea3eaca05394f23ee9e079d3504a77b4c0b22d3cfcafa9c670966bfa3a5f30539250d97267a9e56b5a1437b1fd2ce58f4ab78b52ba61d01c28d7a6b726d92c8819711c70f820690cf2b9bbef75f196ba87fb5f72a29e213096a8be3b6e6d0ff3dc22563dc9e7d95be68ad169c233289fccfdc2f5528c658cb178b4e78d54e96cb452859b01dd756ca0245bdd586fb450e84988071428c80af0a6dc5f16dea8094da3acb51ac5d2a710414256b2423e0333584437ea9a65a07f06bd241103a478d137e9a274a78a19d3ca121f1bc10e4c9e5fc277d23107db1fb447f71ba0f92b20e3ead77cffaca25f772182705a75e500d9aab3996bfda042f4bdfe35a3a477e355c76a711ad0f64848d6144073ce6ec4152c87973fc3e69626523463812061c51f51fc08487e8a4dbae1ca7965c11f222c607688b3384c5c29d4fe91d14d2cc940a6a9d94486d1823261928d88f56fe00e206d7a31734de0217afd38afa3d2cf3499c2dcff13332a369c4b1f39867f6dfc83ec32d19b931b082f07acac7e70bdd537e8432245c11662d89ec3cc97e582de5d2cc6bde7"; diff --git a/src/modules/module_08700.c b/src/modules/module_08700.c index 8351a9dc0..39b157196 100644 --- a/src/modules/module_08700.c +++ b/src/modules/module_08700.c @@ -23,8 +23,7 @@ static const u32 OPTI_TYPE = OPTI_TYPE_EARLY_SKIP | OPTI_TYPE_NOT_ITERATED | OPTI_TYPE_RAW_HASH; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE - | OPTS_TYPE_PT_GENERATE_LE - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_PT_GENERATE_LE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "(GDJ0nDZI8l8RJzlRbemg)"; diff --git a/src/modules/module_09600.c b/src/modules/module_09600.c index d6b4b589d..e0f7727fe 100644 --- a/src/modules/module_09600.c +++ b/src/modules/module_09600.c @@ -24,9 +24,7 @@ static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE | OPTI_TYPE_SLOW_HASH_SIMD_LOOP; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_LE - | OPTS_TYPE_MP_MULTI_DISABLE - | OPTS_TYPE_DEEP_COMP_KERNEL - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_DEEP_COMP_KERNEL; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "$office$*2013*100000*256*16*67805436882475302087847656644837*0c392d3b9ca889656d1e615c54f9f3c9*612b79e33b96322c3253fc8a0f314463cd76bc4efe1352f7efffca0f374f7e4b"; @@ -61,6 +59,13 @@ typedef struct office2013_tmp static const char *SIGNATURE_OFFICE2013 = "$office$"; +u32 module_kernel_loops_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u32 kernel_loops_max = 1000; + + return kernel_loops_max; +} + bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) { if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) diff --git a/src/modules/module_10700.c b/src/modules/module_10700.c index 3c5f332c6..5a4f52746 100644 --- a/src/modules/module_10700.c +++ b/src/modules/module_10700.c @@ -24,8 +24,7 @@ static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE | OPTI_TYPE_REGISTER_LIMIT; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_LE - | OPTS_TYPE_HASH_COPY - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_HASH_COPY; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "$pdf$5*6*256*-1028*1*16*62137640825124540503886403748430*127*0391647179352257f7181236ba371e540c2dbb82fac1c462313eb58b772a54956213764082512454050388640374843000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000*127*00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000*32*0000000000000000000000000000000000000000000000000000000000000000*32*0000000000000000000000000000000000000000000000000000000000000000"; diff --git a/src/modules/module_11700.c b/src/modules/module_11700.c index 9de690ddc..9df95c265 100644 --- a/src/modules/module_11700.c +++ b/src/modules/module_11700.c @@ -23,8 +23,7 @@ static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE | OPTI_TYPE_USES_BITS_64; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_LE - | OPTS_TYPE_PT_ADD01 - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_PT_ADD01; static const u32 SALT_TYPE = SALT_TYPE_NONE; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "57e9e50caec93d72e9498c211d6dc4f4d328248b48ecf46ba7abfa874f666e36"; diff --git a/src/modules/module_11750.c b/src/modules/module_11750.c index 1e3b779a7..afd277f68 100644 --- a/src/modules/module_11750.c +++ b/src/modules/module_11750.c @@ -23,8 +23,7 @@ static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE | OPTI_TYPE_USES_BITS_64; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_LE - | OPTS_TYPE_PT_ADD01 - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_PT_ADD01; static const u32 SALT_TYPE = SALT_TYPE_GENERIC; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "0f71c7c82700c9094ca95eee3d804cc283b538bec49428a9ef8da7b34effb3ba:08151337"; diff --git a/src/modules/module_11760.c b/src/modules/module_11760.c index 25e931699..df888f5aa 100644 --- a/src/modules/module_11760.c +++ b/src/modules/module_11760.c @@ -23,8 +23,7 @@ static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE | OPTI_TYPE_USES_BITS_64; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_LE - | OPTS_TYPE_PT_ADD01 - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_PT_ADD01; static const u32 SALT_TYPE = SALT_TYPE_GENERIC; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "d5c6b874338a492ac57ddc6871afc3c70dcfd264185a69d84cf839a07ef92b2c:08151337"; diff --git a/src/modules/module_11800.c b/src/modules/module_11800.c index d06f91bdc..7e8711f94 100644 --- a/src/modules/module_11800.c +++ b/src/modules/module_11800.c @@ -23,8 +23,7 @@ static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE | OPTI_TYPE_USES_BITS_64; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_LE - | OPTS_TYPE_PT_ADD01 - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_PT_ADD01; static const u32 SALT_TYPE = SALT_TYPE_NONE; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "5d5bdba48c8f89ee6c0a0e11023540424283e84902de08013aeeb626e819950bb32842903593a1d2e8f71897ff7fe72e17ac9ba8ce1d1d2f7e9c4359ea63bdc3"; diff --git a/src/modules/module_11850.c b/src/modules/module_11850.c index ca04fbfaa..28ccdc94f 100644 --- a/src/modules/module_11850.c +++ b/src/modules/module_11850.c @@ -23,8 +23,7 @@ static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE | OPTI_TYPE_USES_BITS_64; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_LE - | OPTS_TYPE_PT_ADD01 - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_PT_ADD01; static const u32 SALT_TYPE = SALT_TYPE_GENERIC; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "be4555415af4a05078dcf260bb3c0a35948135df3dbf93f7c8b80574ceb0d71ea4312127f839b7707bf39ccc932d9e7cb799671183455889e8dde3738dfab5b6:08151337"; diff --git a/src/modules/module_11860.c b/src/modules/module_11860.c index 835d5819f..f08306f3d 100644 --- a/src/modules/module_11860.c +++ b/src/modules/module_11860.c @@ -23,8 +23,7 @@ static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE | OPTI_TYPE_USES_BITS_64; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_LE - | OPTS_TYPE_PT_ADD01 - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_PT_ADD01; static const u32 SALT_TYPE = SALT_TYPE_GENERIC; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "bebf6831b3f9f958acb345a88cb98f30cb0374cff13e6012818487c8dc8d5857f23bca2caed280195ad558b8ce393503e632e901e8d1eb2ccb349a544ac195fd:08151337"; diff --git a/src/modules/module_13100.c b/src/modules/module_13100.c index 6d18aa116..49b609d54 100644 --- a/src/modules/module_13100.c +++ b/src/modules/module_13100.c @@ -22,8 +22,7 @@ static const u64 KERN_TYPE = 13100; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE | OPTI_TYPE_NOT_ITERATED; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE - | OPTS_TYPE_PT_GENERATE_LE - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_PT_GENERATE_LE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "$krb5tgs$23$*user$realm$test/spn*$b548e10f5694ae018d7ad63c257af7dc$35e8e45658860bc31a859b41a08989265f4ef8afd75652ab4d7a30ef151bf6350d879ae189a8cb769e01fa573c6315232b37e4bcad9105520640a781e5fd85c09615e78267e494f433f067cc6958200a82f70627ce0eebc2ac445729c2a8a0255dc3ede2c4973d2d93ac8c1a56b26444df300cb93045d05ff2326affaa3ae97f5cd866c14b78a459f0933a550e0b6507bf8af27c2391ef69fbdd649dd059a4b9ae2440edd96c82479645ccdb06bae0eead3b7f639178a90cf24d9a"; diff --git a/src/modules/module_13731.c b/src/modules/module_13731.c index 843ea9595..53e77b18c 100644 --- a/src/modules/module_13731.c +++ b/src/modules/module_13731.c @@ -29,8 +29,7 @@ static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_BINARY_HASHFILE | OPTS_TYPE_LOOP_EXTENDED | OPTS_TYPE_MP_MULTI_DISABLE - | OPTS_TYPE_COPY_TMPS - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_COPY_TMPS; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "48f79476aa0aa8327a8a9056e61450f4e2883c9e9669142f2e2f022c2f85303b897d088dea03d64329f6c402a56fed05b3919715929090a25c8ae84c67dbdb364ebfa3e9ccc0b391c130a4c3dd6495a1d6eb5d2eab72f8009096f7475ecb736bb3225b6da144e1596d859dad159fae5a739beea88ea074771e9d0b2d7c48ae302606a60d7cff6db54f3e460c548c06a4f47dc1ac203a8c8349fbff6a652219a63f27bc76327543e22be4f8dab8e4f90a4283fbf1552119fe24114ce8869eb20ce87dd72300f7aad3f7b4a26a355f16517725449151cf0373dbd0b281f6ac753485a14a5361cc75d40928e241a6b4684658801774843238048cf8c7f2fd88950abac040e12b0c41fdcaca3702907e951ec11c061a91b3050a4855abe6f3b50b4bd0b17c4be1f5b50b873eadc2d8446cd72c4fcac576bbce3acea769f740c5322ee8c927ffd4dd11c8a9e66f06e58df2e5d4d85c13b44c412bab839c9512b7a0acdd97b37dcccc4b70854eda0f36de12d62dd10cc13bc6154103d083bf6540bc78e5d0aad5d063cc74dad4cbe6e060febda2a9fd79c238f99dcb0766ff4addcfd0c03e619c765f65b1c75d5d22c6536958bcda78077ff44b64c4da741bf50154df310d4e0724238a777b524237b9478277e400ad8146dc3ca1da83e3d2f1c5115a4b7fcdc71dd7d56ba86a2f9b721c9a4137aabb07c3c5fedcf5342c4fae4898c9"; diff --git a/src/modules/module_13732.c b/src/modules/module_13732.c index 0dd660582..2435a0478 100644 --- a/src/modules/module_13732.c +++ b/src/modules/module_13732.c @@ -29,8 +29,7 @@ static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_BINARY_HASHFILE | OPTS_TYPE_LOOP_EXTENDED | OPTS_TYPE_MP_MULTI_DISABLE - | OPTS_TYPE_COPY_TMPS - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_COPY_TMPS; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "1b721942019ebe8cedddbed7744a0702c0e053281a467e0ed69bf875c7406407d72eb8f2aea21270e41898c0a2c14382f86e04c15e7bc019d1d9dd813eabee0ae5173e3cb1d927859d3e6de1006335a5184ae12b4c8dc2db2b1cd785063152a776f4dc5cacc1856a919b880d704b7450f5a0e0c9521bc9b4d67213c36a50e6664a1cbcea33f997b858e654111c7e9fca74f361528e85a28880381ec2600e3c1cd508c3833dd21cc91978185cba53caefd7b3c82d219d49f0b41e536d32e8d3ce194ad7923ca742213e19dcebdbd9687979d5a594654a5c611e8b829c4019e90a3cfb14e5fd7f8ed91e0fc79eed182399f02a3e3e202d4becaa6730e1f05f99ce06ce16dba7777ccddac72e85f2d3be5ecc9c808ac273f10ceb71cad666166abc327c4061a5f47424a5b6d9d093782f34b49924342a2e8cea663446ed4232a9a415ee2dfde988fa827b06d7438fec20ad0689543c3ee4602ce3ec3806fc7d668ef7e34330edd1e077b329a7627fa3ae5c89308258a17ecefbee114c80c2ab06f8271f14de8f2d13d1d6e5a119b71a6bae88ab151f76cdb2442284bc481d0df7e2163c3acfe763d3968195450d275af9034a00184a30cefed163e636626bffe6a35df3472508a49cb2b9b4c4a95d11c5d17e4e0539e9f13112125515778bcd1c2813c62a02673663062ad60583ec6a02c8a572865829e5b8c767b285728bea4907"; diff --git a/src/modules/module_13733.c b/src/modules/module_13733.c index 5cc512263..9c2729067 100644 --- a/src/modules/module_13733.c +++ b/src/modules/module_13733.c @@ -29,8 +29,7 @@ static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_BINARY_HASHFILE | OPTS_TYPE_LOOP_EXTENDED | OPTS_TYPE_MP_MULTI_DISABLE - | OPTS_TYPE_COPY_TMPS - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_COPY_TMPS; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "5eb128daef63eff7e6db6aa10a8858f89964f47844acca68df82ebb2e73866fa75e3b7a53f9d2ff1ecdd1f4dc90e9c0fdf51f60d11b1992cd2971b4889edfc8920bbf346fd7693f675b617cb9e4e9a43e6f445021068fc13453b130f2eb1d753ee83ecc61dabec293e88b62110cf6a8fab670e171f6aba2226550b54893263f5fa086b3cc41dd3db2eae07b585e5162c7a0d9723a426d408d83266c4d6018dc1b8b456d28a224033a30bfe62b1e58c2ddf596e07f7ff31849a6f5cfcc1c977b82d8484c270d44ededb0afdb781295e92968fc8cc69766af0ce1e72f02d6b4e124ba4b1af71519dcaade857bb3f371f93a350da6e65ee46c2ac782f134c75c10fe9d653fccc08c614dc362871911af8b83bdfc479f770dfe4b3c86b5d895842c53852fe4912738f848bf7c3e10b8189d25faceab9ef30b6fa0284edaa471752ac2b65335179b8d605417709f64fded7d94383618a921660d4cdb190bbb3769a8e56d2cd1ee07078ebc3b68ebeb016893f7099018e40cb326e32b29a62806eaf1a3fd382f4f876bf721eadfc019c5545813e81fd7168995f743663b136762b07910a63b6eec5b728a4ad07a689cceecb14c2802f334401a0a4fd2ec49e2da7f3cb24d6181f01ceed93ee73dedc3378133c83c9a71155c86785ff20dd5a64323d2fd4bf076bab3c17a1bb45edf81c30a7bd7dbbb097ece0dca83fff9138d56ae668"; diff --git a/src/modules/module_13771.c b/src/modules/module_13771.c index 74efd072e..b753d171f 100644 --- a/src/modules/module_13771.c +++ b/src/modules/module_13771.c @@ -30,8 +30,7 @@ static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_BINARY_HASHFILE | OPTS_TYPE_LOOP_EXTENDED | OPTS_TYPE_MP_MULTI_DISABLE - | OPTS_TYPE_COPY_TMPS - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_COPY_TMPS; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "444ec71554f0a2989b34bd8a5750ae7b5ed8b1ccdead29120fc030bd5186f312a7fa18ab4f4389d7798e43c073afd1e71dda2052db38dec04a700e8d6b488802ead0cf95d6e6cecc8eaf6464baf94a64acbbd1a86f826333115b6380bda18cf936150efd6ffc2a344bb78b0b4875781a8c5079772429ef50ddf148f35895496d2e39f32ffaf68a007b070b0beaad316c4b3adf43c0c58ad24430a34abf168ed455b64958ca5465cae0684adadc00f7b9c13fc7671b4520892d23aebff49ea92bc15e804cc650dc3bbd5b8f5122051636f0c576977d4b64ba355bf6e6a8e042fc5165f2a8affa51aa12ff718cee4c543976bf565997b4b57c74e79584e317f4bdb3920f2937c4251af87f432bb8ce78dcb30675246f0303db4aaea913c93be5a26d16dbf8d4d20773aa2a4608d2151491ca6593b51965baeaf9b58f78905df522bf88976fe9436a916c8de38d5a6ca7ca7f436e7982a36335a404298304322ebe194bb34e91e8f7ee7c6541679bb0ce9d80bf4431d1c475b1a785e943e57f8e27a4e665940389b6da2771bd27d943955185379f83ca6a124ec55b2b63d4ef2e2ad6ee27de25f959708f3a64facfe07f06e29459a14f02699751d530f258d0c744a759c188de4f9423f2bd21d3d999ea28df4f3a93a2c47a7e788fe43ccbfbe267277b048002da1ef8c1e7b26690230285675a3a8fdc0f2acf46a4cb24141b3ad1"; diff --git a/src/modules/module_13772.c b/src/modules/module_13772.c index 3a990cc06..6494ee637 100644 --- a/src/modules/module_13772.c +++ b/src/modules/module_13772.c @@ -30,8 +30,7 @@ static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_BINARY_HASHFILE | OPTS_TYPE_LOOP_EXTENDED | OPTS_TYPE_MP_MULTI_DISABLE - | OPTS_TYPE_COPY_TMPS - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_COPY_TMPS; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "0f5da0b17c60edcd392058752ec29c389b140b54cd1f94de43dccea703b1fd37936e75a500b7f9d4e94e7f214c4696c051be9697792a856ebf9c0f5a598cf8ba5621e49c7505eba3b4738acdc860b6ed648f52e5b673ae06bb04616de438a090ab19abea11c30984ead06859de9b7aec8e436c40816f67a56cb53d5f125e58c42225315a4bf494da8128f0df924bcf6ad4b91c9efc5cb0be67cb0cd753c392388d780f57aba39197513a191cc684e9ebee41bc901dd99e9a625141cf98e55e8f74d838baea3bf8f411b85c14eff8cddd1720c2539eef7a38a72c4ed9745a05476b6a16bcda2a5391c94b6f499e3bea64ff412d03d060741e938ed3dc905d8bd6dbb2420e9277251ebe3421be389ea8b02782baeb258b9ec7e0732b3817ee6da58209871aee4e16d57a132c6215782364570238157d8a7fdcd29f54ab2295f68d027dc9f2e0c951afad7500cafe3219e6530699918ac55f4fa1141bc3596155b05bae2fdc8b0a5438edeb5bb0cfac592565b20645be90b406a1fd59846957e7539fd8423bfd4c7ae7d608aacb084ae887baa1a83b14afff8d2063565086c66e293234a8667af39642b90a38c3a5bd4fa8a787c60f73882535c9b34cb7b243465dcc32aff29cee0e741ff059c6acd8ddcbdb3cfafecdcd0f45c84dd871be4fbffd5ac2ab9e01898009adcf7d932c37d6568ad875e4d6ea15db29a1e8ba5a4e86bd"; diff --git a/src/modules/module_13773.c b/src/modules/module_13773.c index fd9dd44ff..6f2740347 100644 --- a/src/modules/module_13773.c +++ b/src/modules/module_13773.c @@ -30,8 +30,7 @@ static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_BINARY_HASHFILE | OPTS_TYPE_LOOP_EXTENDED | OPTS_TYPE_MP_MULTI_DISABLE - | OPTS_TYPE_COPY_TMPS - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_COPY_TMPS; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "18d2e8314961850f8fc26d2bc6f896db9c4eee301b5fa7295615166552b2422042c6cf6212187ec9c0234908e7934009c23ceed0c4858a7a4deecbc59b50a303afdc7d583cde1b0c06f0bf56162ef1d6d8df8f194aadcbe395780b3d1d7127faf39910eb10f4805abdd1c3ef7a66972603124a475e2b9224699e60a9e12f4096597f20c5fb0528f590d7bd317e41dc6a2128cf5e58a99803a28c213feb8286350b1d7ab56d43bb52e511f3c860e5002472a4454a549509c8ce0c34f17ece23d5b61aa7c63389c8ca44ed10c2caae03e7ed30b3ef98565926d7e4f3a2a9abf03b278083bed7aaadd78d5bffb7cd45ffae92990c06d9e9f375a77a94226035d1f90e177c46a04dab416dfb7ed7c4ed9ee7e84580bed65c5fee9f4b1545b9a7cf6af533870d393eced609aebe308ec1eee3729da09eb7df7a8d1282b15c4a1b8266a456c06b4ea20c209c549d5d6b58a861f8e15cca3b6cef114accbf470ec76d717f6d7d416d7a32f064ab560c1167f9ef4e93310fbd927b088bffbb0cf5d5c2e271c9cad4c604e489e9983a990b23e1a2f973682fdfe38df385474f73ecdc9bce701d01d627192d3051240f4b96bbdcf2346b275e05aa75add4acb97b286cc00e830fee95d0f86a8b1e315ccb6f3f8642180392b3baac01ed2c97c200489b5e5ca4dcb0a6417e622b6196482a10e640b2b6b08e3f62acac3d45dfc6b88c666205"; diff --git a/src/modules/module_13781.c b/src/modules/module_13781.c index fcc2ed181..fbbb6b0bf 100644 --- a/src/modules/module_13781.c +++ b/src/modules/module_13781.c @@ -31,8 +31,7 @@ static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_LOOP_EXTENDED | OPTS_TYPE_MP_MULTI_DISABLE | OPTS_TYPE_KEYBOARD_MAPPING - | OPTS_TYPE_COPY_TMPS - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_COPY_TMPS; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "2bfe4a72e13388a9ce074bbe0711a48d62f123df85b09e0350771edc4a0e4f397038a49b900275c9158145a96b52f95e92f927b3f963c7eadb71a07518d643231041c457d2794d0aa505f794153b52b24441271185d386833fbabf0e880c51b544f583d0db2ab6a926ddd3cdd0b68a61d7f5fe3f0ac6aa06ca676a868f373d35073605cf9d521ff55862b5005213a881a7b9025afc3409fa34dc86496620835df072fecd5b501f15e08113835c510d9f0bfd09d2ef1ac0e7bd01f0523d74a54fe984eb497cb960cce5bb154e024dc0c6c61a61e20a45a8f8ef319c63ca9646fbe00930302a5910891a1bc84bd936c926ca535b3b40c9e0ab255363b24a28bb8216d3d32244a725774e6ebbd73d6d3f2a2adcbc28d5341679cbb747efd56db1a09ce80b24640583ffc6f7ca5bd60d59114afcc78601184ba8feadb8d472f86c32bebf70e8158aa56f9db3b3200ef432aa7b370aa4ba408ef11b70d6806f1a21aaa3b629fa06f71dac0ae3e0ce95c7e5b550fc8c46017e151cbbcdf64b3b62b1b846a08925a217227286acfdad35b28407d589bec9578c2a4e9a4320f4a78e1e590fdf53c0a20fe0a1bb6c7d693abcd0e991c449e569477980d4b8972d21e4abc917d897e48ca427c954c3a3e0c8465ef40de51ffc9188047c043224c4a18638f1d91cd88c36623a1d880f18fd0d6ca0b3bbfa7d5d795acfb63576e2c2d83772e8"; diff --git a/src/modules/module_13782.c b/src/modules/module_13782.c index 2772e0bcb..e1e6c89c4 100644 --- a/src/modules/module_13782.c +++ b/src/modules/module_13782.c @@ -31,8 +31,7 @@ static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_LOOP_EXTENDED | OPTS_TYPE_MP_MULTI_DISABLE | OPTS_TYPE_KEYBOARD_MAPPING - | OPTS_TYPE_COPY_TMPS - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_COPY_TMPS; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "af7a64c7c81f608527552532cc7049b0d369e2ce20202d7a41ffb94300cbc9c7ce2130247f49ace4c1512fc3d1b4289ca965e8eb065b35faee5b8479a4e43c4a269f4ee7f6d20f22fe61b2570d46df07b4307f44ba6926f3b44524f0a47be2a0d677d225e2c50ff618b2e5078a19f0613a856bb3145d765cc4c1726aef27b5f03648dcf421b040e7b4fde3193ad9f8a0ae6d91c079610f826e3d556776753d8ca11320632c16a2e49a4eec6e8371681b39be2d7bb826d81dea19eb1dda2e6c71c520a2ad9128b3209a7caf10c196a16ac6f4267ffea8e7be7ddb856976438e0e997773dab75e3dfe0c047f82e4ed0b6e107261b891c4b161fa3c29017428afaaabee5c2dc727fa23b4195265716d92d06e7b828535a77521113077e6f219d7ca721eb5dab66524a530ca3ceba52e3703ec3f435ad1dfee092b090174f4acd1546107db5b403a0ba4fa90c0b4ec19af92a54ebedfd28783dcd83c78499bd33baf3ed10af229ff29634110e2970b6c04232dc95120a365947688abe011f0c8de0e651d9bd112ce0bdf80c4e37c77b962d92f1418272e7484df5217f5f2f3ba1e9b965773ed2727c5d03938516dd789236479b5ff340335c92260b1ad82a313ffa568f912fac799f93b857aaff7b4d76cb525f120a0a9efc376d39c8e27866eff689be01f5adf693ae63ad4b2a77ca96ea985ab7931457f4d8d1afaeb7e423dd752"; diff --git a/src/modules/module_13783.c b/src/modules/module_13783.c index 8765fc6c8..b1339f7a4 100644 --- a/src/modules/module_13783.c +++ b/src/modules/module_13783.c @@ -31,8 +31,7 @@ static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_LOOP_EXTENDED | OPTS_TYPE_MP_MULTI_DISABLE | OPTS_TYPE_KEYBOARD_MAPPING - | OPTS_TYPE_COPY_TMPS - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_COPY_TMPS; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "0c9d7444e9e64a833e857163787b2f6349224bdb4bbf788ce25156c870514226674725be3eebc3f2a2c2ee8adbf8bb3ec1405a333e8e091cec0c5aa77fa9b65048ca01d954912bf3a3b1c38c00297a33ea0e014156ce08d9526150c085e5e2776a1faeb272c6e9539f466f4f93ffe6497c77d3aed54ffcdf1a3e6171cffac7b2ad96bd9e7cc553058894058def68beea05891b0ce734b6a166b8a5f24b4052fc7014b424bd6c33c9d710fb409cdf1a6c7567c1ba6a3010b03f9bda8aa2ef6733542d198a316da0c83106a6c31043f11ac191169db3db994493168ea996737355ccff84f27f6792b3dc87025d3594edb9e759ba3885980df17bc8c751ce3aba0df67aa7997906348729e81c4893cc654dc6b1da3ff7c588a327f45b8acff976d0593cc607dad48a25468d7c3ebc6dd49aa32fc526dd513852cdec4b36f3683b4998800afa25bb968c242d4c66b9b0c77b20d7bd40ffb403e9e087990d59c94ee7d36e9ebfa35a310bab963c253596e6bc89f67d5307823851c526ac789d0628a3eb81f2cdfd7d7612d8be1dade1b17f30aa2bb5d02eb8534caca0c334a269085939a5041c4ad112d325b1bfe3e9851bfdcad80bbc05ecbddc3f2ac09e2ad7182daf6ca5ccc510a100514f5d2dce1ff5046e0c8e7edf0bdc27f8fcdf4e9b3bce786c24bfa28dacee65ee8c913fc18eee5df61b8a43224f3a9c4e1b5de7b600d9e0"; diff --git a/src/modules/module_18600.c b/src/modules/module_18600.c index 86605e2e6..e97870d51 100644 --- a/src/modules/module_18600.c +++ b/src/modules/module_18600.c @@ -23,8 +23,7 @@ static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE | OPTI_TYPE_SLOW_HASH_SIMD_LOOP; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_LE - | OPTS_TYPE_DYNAMIC_SHARED - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_DYNAMIC_SHARED; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "$odf$*0*0*1024*16*bff753835f4ea15644b8a2f8e4b5be3d147b9576*8*ee371da34333b69d*16*a902eff54a4d782a26a899a31f97bef4*0*dae7e41fbc3a500d3ce152edd8876c4f38fb17d673ee2ac44ef1e0e283622cd2ae298a82d8d98f2ea737247881fc353e73a2f535c6e13e0cdc60821c1a61c53a4b0c46ff3a3b355d7b793fad50de15999fc7c1194321d1c54316c3806956c4a3ade7daabb912a2a36398eba883af088b3cb69b43365d9ba9fce3fb0c1524f73947a7e9fc1bf3adb5f85a367035feacb5d97c578b037144c2793f34aa09dcd04bdaa455aee0d4c52fe377248611dd56f2bd4eb294673525db905f5d905a28dec0909348e6bf94bcebf03ddd61a48797cd5728ce6dbb71037b268f526e806401abcf495f6edd0b5d87118671ec690d4627f86a43e51c7f6d42a75a56eec51204d47e115e813ed4425c97b16b195e02ce776c185194b9de43ae89f356e29face016cb393d6fb93af8ea305d921d5592dd184051ac790b9b90266f52b8d53ce1cb1d762942d6d5bbd0e3821be21af9fa6874ba0c60e64f41d3e5b6caca1c53b575afdc5d8f6a3edbf874dbe009c6cb296466fe9637aed4aed8a43a95ea7d26b4090ad33d4ee7a83844b0893e8bc0f04944205fb9576cb5720f019028cd75ca9ac47b3e5fa231354d74135564df43b659cfaea7e195c4a896e0e0e0c85dc9ce3a9ce9ba552bc2a6dbac4901c19558818e1957ed72d78662bb5ba53475ca584371f1825ae0c92322a4404e63c2baad92665aac29b5c6f96e1e6338d48fb0aef4d0b686063974f58b839484f8dcf0a02537cba67a7d2c4de13125d74820cb07ec72782035af1ea6c4db61c77016d1c021b63c8b07adb4e8510f5c41bbc501f60f3dd16462399b52eb146787e38e700147c7aa23ac4d5d22d9d1c93e67a01c92a197d4765cbf8d56a862a1205abb450a182913a69b8d5334a59924f86fb3ccd0dcfe7426053e26ba26b57c05f38d85863fff1f81135b0366e8cd8680663ae8aaf7d005317b849d5e08be882708fa0d8d02d47e89150124b507c34845c922b95e62aa0b3fef218773d7aeb572c67b35ad8787f31ecc6e1846b673b8ba6172223176eabf0020b6aa3aa71405b40b2fc2127bf9741a103f1d8eca21bf27328cdf15153f2f223eff7b831a72ed8ecacf4ea8df4ea44f3a3921e5a88fb2cfa355ece0f05cbc88fdd1ecd368d6e3b2dfabd999e5b708f1bccaeebb296c9d7b76659967742fe966aa6871cbbffe710b0cd838c6e02e6eb608cb5c81d066b60b5b3604396331d97d4a2c4c2317406e48c9f5387a2c72511d1e6899bd450e9ca88d535755bcfddb53a6df118cd9cdc7d8b4b814f7bc17684d8e5975defaa25d06f410ed0724c16b8f69ec3869bc1f05c71483666968d1c04509875dadd72c6182733d564eb1a7d555dc34f6b817c5418626214d0b2c3901c5a46f5b20fddfdf9f71a7dfd75b9928778a3f65e1832dff22be973c2b259744d500a3027c2a2e08972eaaad4c5c4ec871"; diff --git a/src/modules/module_19000.c b/src/modules/module_19000.c index d8cd72d1c..d6c1787f1 100644 --- a/src/modules/module_19000.c +++ b/src/modules/module_19000.c @@ -23,8 +23,7 @@ static const char *HASH_NAME = "QNX /etc/shadow (MD5)"; static const u64 KERN_TYPE = 19000; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE - | OPTS_TYPE_PT_GENERATE_LE - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_PT_GENERATE_LE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "@m@75f6f129f9c9e77b6b1b78f791ed764a@8741857532330050"; diff --git a/src/modules/module_19300.c b/src/modules/module_19300.c index aca7830a6..85b83b695 100644 --- a/src/modules/module_19300.c +++ b/src/modules/module_19300.c @@ -23,8 +23,7 @@ static const u64 KERN_TYPE = 19300; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE | OPTI_TYPE_RAW_HASH; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE - | OPTS_TYPE_PT_GENERATE_BE - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_PT_GENERATE_BE; static const u32 SALT_TYPE = SALT_TYPE_GENERIC; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "630d2e918ab98e5fad9c61c0e4697654c4c16d73:18463812876898603420835420139870031762867:4449516425193605979760642927684590668549584534278112685644182848763890902699756869283142014018311837025441092624864168514500447147373198033271040848851687108629922695275682773136540885737874252666804716579965812709728589952868736177317883550827482248620334"; diff --git a/src/modules/module_20510.c b/src/modules/module_20510.c index 4c8a340fc..394a69a3b 100644 --- a/src/modules/module_20510.c +++ b/src/modules/module_20510.c @@ -80,7 +80,6 @@ static const u64 KERN_TYPE = 20510; static const u32 OPTI_TYPE = 0; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_COPY_TMPS - | OPTS_TYPE_MAXIMUM_THREADS | OPTS_TYPE_AUTODETECT_DISABLE | OPTS_TYPE_SUGGEST_KG; static const u32 SALT_TYPE = SALT_TYPE_NONE; diff --git a/src/modules/module_21000.c b/src/modules/module_21000.c index 4a5137e54..bfb8067a7 100644 --- a/src/modules/module_21000.c +++ b/src/modules/module_21000.c @@ -29,8 +29,7 @@ static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_BE | OPTS_TYPE_PT_ADD80 - | OPTS_TYPE_PT_ADDBITS15 - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_PT_ADDBITS15; static const u32 SALT_TYPE = SALT_TYPE_NONE; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "caec04bdf7c17f763a9ec7439f7c9abda112f1bfc9b1bb684fef9b6142636979b9896cfc236896d821a69a961a143dd19c96d59777258201f1bbe5ecc2a2ecf5"; diff --git a/src/modules/module_24500.c b/src/modules/module_24500.c index 17b67bf8f..3b4e6159b 100644 --- a/src/modules/module_24500.c +++ b/src/modules/module_24500.c @@ -23,8 +23,7 @@ static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE | OPTI_TYPE_USES_BITS_64 | OPTI_TYPE_SLOW_HASH_SIMD_LOOP; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE - | OPTS_TYPE_PT_GENERATE_LE - | OPTS_TYPE_MP_MULTI_DISABLE; + | OPTS_TYPE_PT_GENERATE_LE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "$telegram$2*100000*77461dcb457ce9539f8e4235d33bd12455b4a38446e63b52ecdf2e7b65af4476*f705dda3247df6d690dfc7f44d8c666979737cae9505d961130071bcc18eeadaef0320ac6985e4a116834c0761e55314464aae56dadb8f80ab8886c16f72f8b95adca08b56a60c4303d84210f75cfd78a3e1a197c84a747988ce2e1b247397b61041823bdb33932714ba16ca7279e6c36b75d3f994479a469b50a7b2c7299a4d7aadb775fb030d3bb55ca77b7ce8ac2f5cf5eb7bdbcc10821b8953a4734b448060246e5bb93f130d6d3f2e28b9e04f2a064820be562274c040cd849f1473d45141559fc45da4c54abeaf5ca40d2d57f8f8e33bdb232c7279872f758b3fb452713b5d91c855383f7cec8376649a53b83951cf8edd519a99e91b8a6cb90153088e35d9fed332c7253771740f49f9dc40c7da50352656395bbfeae63e10f754d24a"; diff --git a/src/modules/module_26000.c b/src/modules/module_26000.c index 459bb3588..35a6dd937 100644 --- a/src/modules/module_26000.c +++ b/src/modules/module_26000.c @@ -22,8 +22,7 @@ static const u64 KERN_TYPE = 26000; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE | OPTI_TYPE_NOT_ITERATED; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE - | OPTS_TYPE_PT_GENERATE_BE - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_PT_GENERATE_BE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "$mozilla$*3DES*b735d19e6cadb5136376a98c2369f22819d08c79*2b36961682200a877f7d5550975b614acc9fefe3*f03f3575fd5bdbc9e32232316eab7623"; diff --git a/src/modules/module_27000.c b/src/modules/module_27000.c index 88f0695fa..672800eed 100644 --- a/src/modules/module_27000.c +++ b/src/modules/module_27000.c @@ -28,7 +28,6 @@ static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_ADDBITS14 | OPTS_TYPE_PT_UTF16LE | OPTS_TYPE_ST_HEX - | OPTS_TYPE_MAXIMUM_THREADS | OPTS_TYPE_AUTODETECT_DISABLE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "b4b9b02e6f09a9bd760f388b67351e2b"; diff --git a/src/modules/module_27100.c b/src/modules/module_27100.c index 65a1f8717..1c981fbc1 100644 --- a/src/modules/module_27100.c +++ b/src/modules/module_27100.c @@ -28,7 +28,6 @@ static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_ADDBITS14 | OPTS_TYPE_PT_UTF16LE | OPTS_TYPE_ST_HEX - | OPTS_TYPE_MAXIMUM_THREADS | OPTS_TYPE_AUTODETECT_DISABLE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "b4b9b02e6f09a9bd760f388b67351e2b"; diff --git a/src/modules/module_29431.c b/src/modules/module_29431.c index eccc2beda..a22c24e3d 100644 --- a/src/modules/module_29431.c +++ b/src/modules/module_29431.c @@ -28,8 +28,7 @@ static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_LE | OPTS_TYPE_LOOP_EXTENDED | OPTS_TYPE_MP_MULTI_DISABLE - | OPTS_TYPE_COPY_TMPS - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_COPY_TMPS; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "$veracrypt$48f79476aa0aa8327a8a9056e61450f4e2883c9e9669142f2e2f022c2f85303b897d088dea03d64329f6c402a56fed05b3919715929090a25c8ae84c67dbdb36$4ebfa3e9ccc0b391c130a4c3dd6495a1d6eb5d2eab72f8009096f7475ecb736bb3225b6da144e1596d859dad159fae5a739beea88ea074771e9d0b2d7c48ae302606a60d7cff6db54f3e460c548c06a4f47dc1ac203a8c8349fbff6a652219a63f27bc76327543e22be4f8dab8e4f90a4283fbf1552119fe24114ce8869eb20ce87dd72300f7aad3f7b4a26a355f16517725449151cf0373dbd0b281f6ac753485a14a5361cc75d40928e241a6b4684658801774843238048cf8c7f2fd88950abac040e12b0c41fdcaca3702907e951ec11c061a91b3050a4855abe6f3b50b4bd0b17c4be1f5b50b873eadc2d8446cd72c4fcac576bbce3acea769f740c5322ee8c927ffd4dd11c8a9e66f06e58df2e5d4d85c13b44c412bab839c9512b7a0acdd97b37dcccc4b70854eda0f36de12d62dd10cc13bc6154103d083bf6540bc78e5d0aad5d063cc74dad4cbe6e060febda2a9fd79c238f99dcb0766ff4addcfd0c03e619c765f65b1c75d5d22c6536958bcda78077ff44b64c4da741bf50154df310d4e0724238a777b524237b9478277e400ad8146dc3ca1da83e3d2f1c5115a4b7fcdc71dd7d56ba86a2f9b721c9a4137aabb07c3c5fedcf5342c4fae4898c9"; diff --git a/src/modules/module_29432.c b/src/modules/module_29432.c index 6e8de6aac..563b254c0 100644 --- a/src/modules/module_29432.c +++ b/src/modules/module_29432.c @@ -28,8 +28,7 @@ static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_LE | OPTS_TYPE_LOOP_EXTENDED | OPTS_TYPE_MP_MULTI_DISABLE - | OPTS_TYPE_COPY_TMPS - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_COPY_TMPS; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "$veracrypt$1b721942019ebe8cedddbed7744a0702c0e053281a467e0ed69bf875c7406407d72eb8f2aea21270e41898c0a2c14382f86e04c15e7bc019d1d9dd813eabee0a$e5173e3cb1d927859d3e6de1006335a5184ae12b4c8dc2db2b1cd785063152a776f4dc5cacc1856a919b880d704b7450f5a0e0c9521bc9b4d67213c36a50e6664a1cbcea33f997b858e654111c7e9fca74f361528e85a28880381ec2600e3c1cd508c3833dd21cc91978185cba53caefd7b3c82d219d49f0b41e536d32e8d3ce194ad7923ca742213e19dcebdbd9687979d5a594654a5c611e8b829c4019e90a3cfb14e5fd7f8ed91e0fc79eed182399f02a3e3e202d4becaa6730e1f05f99ce06ce16dba7777ccddac72e85f2d3be5ecc9c808ac273f10ceb71cad666166abc327c4061a5f47424a5b6d9d093782f34b49924342a2e8cea663446ed4232a9a415ee2dfde988fa827b06d7438fec20ad0689543c3ee4602ce3ec3806fc7d668ef7e34330edd1e077b329a7627fa3ae5c89308258a17ecefbee114c80c2ab06f8271f14de8f2d13d1d6e5a119b71a6bae88ab151f76cdb2442284bc481d0df7e2163c3acfe763d3968195450d275af9034a00184a30cefed163e636626bffe6a35df3472508a49cb2b9b4c4a95d11c5d17e4e0539e9f13112125515778bcd1c2813c62a02673663062ad60583ec6a02c8a572865829e5b8c767b285728bea4907"; diff --git a/src/modules/module_29433.c b/src/modules/module_29433.c index b746e43f9..90e2033c9 100644 --- a/src/modules/module_29433.c +++ b/src/modules/module_29433.c @@ -28,8 +28,7 @@ static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_LE | OPTS_TYPE_LOOP_EXTENDED | OPTS_TYPE_MP_MULTI_DISABLE - | OPTS_TYPE_COPY_TMPS - | OPTS_TYPE_MAXIMUM_THREADS; + | OPTS_TYPE_COPY_TMPS; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "$veracrypt$5eb128daef63eff7e6db6aa10a8858f89964f47844acca68df82ebb2e73866fa75e3b7a53f9d2ff1ecdd1f4dc90e9c0fdf51f60d11b1992cd2971b4889edfc89$20bbf346fd7693f675b617cb9e4e9a43e6f445021068fc13453b130f2eb1d753ee83ecc61dabec293e88b62110cf6a8fab670e171f6aba2226550b54893263f5fa086b3cc41dd3db2eae07b585e5162c7a0d9723a426d408d83266c4d6018dc1b8b456d28a224033a30bfe62b1e58c2ddf596e07f7ff31849a6f5cfcc1c977b82d8484c270d44ededb0afdb781295e92968fc8cc69766af0ce1e72f02d6b4e124ba4b1af71519dcaade857bb3f371f93a350da6e65ee46c2ac782f134c75c10fe9d653fccc08c614dc362871911af8b83bdfc479f770dfe4b3c86b5d895842c53852fe4912738f848bf7c3e10b8189d25faceab9ef30b6fa0284edaa471752ac2b65335179b8d605417709f64fded7d94383618a921660d4cdb190bbb3769a8e56d2cd1ee07078ebc3b68ebeb016893f7099018e40cb326e32b29a62806eaf1a3fd382f4f876bf721eadfc019c5545813e81fd7168995f743663b136762b07910a63b6eec5b728a4ad07a689cceecb14c2802f334401a0a4fd2ec49e2da7f3cb24d6181f01ceed93ee73dedc3378133c83c9a71155c86785ff20dd5a64323d2fd4bf076bab3c17a1bb45edf81c30a7bd7dbbb097ece0dca83fff9138d56ae668"; diff --git a/src/selftest.c b/src/selftest.c index f237aa94b..f1b2b2dd5 100644 --- a/src/selftest.c +++ b/src/selftest.c @@ -516,20 +516,20 @@ static int selftest (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param { if (highest_pw_len < 16) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_1, 0, 1, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_1, 0, 1, false, 0, false) == -1) return -1; } else if (highest_pw_len < 32) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_2, 0, 1, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_2, 0, 1, false, 0, false) == -1) return -1; } else { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_3, 0, 1, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_3, 0, 1, false, 0, false) == -1) return -1; } } else { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_4, 0, 1, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_4, 0, 1, false, 0, false) == -1) return -1; } } else @@ -563,12 +563,12 @@ static int selftest (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param if (hashconfig->opts_type & OPTS_TYPE_INIT) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_1, 0, 1, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_1, 0, 1, false, 0, false) == -1) return -1; } if (hashconfig->opts_type & OPTS_TYPE_HOOK12) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_12, 0, 1, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_12, 0, 1, false, 0, false) == -1) return -1; if (device_param->is_cuda == true) { @@ -636,7 +636,7 @@ static int selftest (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param if (hashconfig->opts_type & OPTS_TYPE_LOOP_PREPARE) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_2P, 0, 1, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_2P, 0, 1, false, 0, false) == -1) return -1; } const u32 iter = salt_buf->salt_iter; @@ -652,12 +652,12 @@ static int selftest (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param if (hashconfig->opts_type & OPTS_TYPE_LOOP) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_2, 0, 1, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_2, 0, 1, false, 0, false) == -1) return -1; } if (hashconfig->opts_type & OPTS_TYPE_LOOP_EXTENDED) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_2E, 0, 1, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_2E, 0, 1, false, 0, false) == -1) return -1; } if (hashconfig->bridge_type & BRIDGE_TYPE_LAUNCH_LOOP) @@ -739,7 +739,7 @@ static int selftest (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param if (hashconfig->opts_type & OPTS_TYPE_HOOK23) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_23, 0, 1, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_23, 0, 1, false, 0, false) == -1) return -1; if (device_param->is_cuda == true) { @@ -796,7 +796,7 @@ static int selftest (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param if (hashconfig->opts_type & OPTS_TYPE_INIT2) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_INIT2, 0, 1, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_INIT2, 0, 1, false, 0, false) == -1) return -1; } for (u32 salt_repeat = 0; salt_repeat <= salt_repeats; salt_repeat++) @@ -805,7 +805,7 @@ static int selftest (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param if (hashconfig->opts_type & OPTS_TYPE_LOOP2_PREPARE) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_LOOP2P, 0, 1, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_LOOP2P, 0, 1, false, 0, false) == -1) return -1; } if (hashconfig->opts_type & OPTS_TYPE_LOOP2) @@ -821,7 +821,7 @@ static int selftest (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param device_param->kernel_param.loop_pos = loop_pos; device_param->kernel_param.loop_cnt = loop_left; - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_LOOP2, 0, 1, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_LOOP2, 0, 1, false, 0, false) == -1) return -1; if (hashconfig->bridge_type & BRIDGE_TYPE_LAUNCH_LOOP2) { @@ -904,28 +904,28 @@ static int selftest (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param if (hashconfig->opts_type & OPTS_TYPE_AUX1) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_AUX1, 0, 1, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_AUX1, 0, 1, false, 0, false) == -1) return -1; } if (hashconfig->opts_type & OPTS_TYPE_AUX2) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_AUX2, 0, 1, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_AUX2, 0, 1, false, 0, false) == -1) return -1; } if (hashconfig->opts_type & OPTS_TYPE_AUX3) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_AUX3, 0, 1, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_AUX3, 0, 1, false, 0, false) == -1) return -1; } if (hashconfig->opts_type & OPTS_TYPE_AUX4) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_AUX4, 0, 1, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_AUX4, 0, 1, false, 0, false) == -1) return -1; } } if (hashconfig->opts_type & OPTS_TYPE_COMP) { - if (run_kernel (hashcat_ctx, device_param, KERN_RUN_3, 0, 1, false, 0) == -1) return -1; + if (run_kernel (hashcat_ctx, device_param, KERN_RUN_3, 0, 1, false, 0, false) == -1) return -1; } } diff --git a/src/user_options.c b/src/user_options.c index 5de443725..23e195ee6 100644 --- a/src/user_options.c +++ b/src/user_options.c @@ -1042,7 +1042,7 @@ int user_options_sanity (hashcat_ctx_t *hashcat_ctx) return -1; } - if (user_options->kernel_loops > 1024) + if (user_options->kernel_loops > KERNEL_LOOPS_MAX) { event_log_error (hashcat_ctx, "Invalid kernel-loops specified."); From df30dfd5c4223159cbe33f680720bf6048c8b0b2 Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Sun, 22 Jun 2025 21:06:31 +0200 Subject: [PATCH 85/95] fix is_autotune checks on Apple Metal --- src/backend.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/backend.c b/src/backend.c index d9880c195..02cdd73b8 100644 --- a/src/backend.c +++ b/src/backend.c @@ -2660,12 +2660,15 @@ int run_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, con const size_t global_work_size[3] = { num_elements, 1, 1 }; const size_t local_work_size[3] = { kernel_threads, 1, 1 }; + double ms = 0; + if (is_autotune == true) { hc_mtlEncodeComputeCommand (hashcat_ctx, metal_command_encoder, metal_command_buffer, global_work_size[0], local_work_size[0], &ms); - } - double ms = 0; + // hc_mtlEncodeComputeCommand_pre() must be called before every hc_mtlEncodeComputeCommand() + if (hc_mtlEncodeComputeCommand_pre (hashcat_ctx, metal_pipeline, device_param->metal_command_queue, &metal_command_buffer, &metal_command_encoder) == -1) return -1; + } const int rc_cc = hc_mtlEncodeComputeCommand (hashcat_ctx, metal_command_encoder, metal_command_buffer, global_work_size[0], local_work_size[0], &ms); From 0720d20cf39c9c22db9dd7c698ee50875795c2e0 Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Sun, 22 Jun 2025 21:47:28 +0200 Subject: [PATCH 86/95] fix memory leaks --- src/backend.c | 5 +++++ src/ext_sysfs_cpu.c | 49 +++++++++++++++++++++++++++------------------ src/user_options.c | 5 +++++ 3 files changed, 39 insertions(+), 20 deletions(-) diff --git a/src/backend.c b/src/backend.c index 02cdd73b8..32f4ec49b 100644 --- a/src/backend.c +++ b/src/backend.c @@ -8636,6 +8636,11 @@ void backend_ctx_devices_destroy (hashcat_ctx_t *hashcat_ctx) hcfree (device_param->opencl_device_c_version); hcfree (device_param->opencl_device_vendor); } + + if (device_param->is_hip == true) + { + hcfree (device_param->gcnArchName); + } } backend_ctx->backend_devices_cnt = 0; diff --git a/src/ext_sysfs_cpu.c b/src/ext_sysfs_cpu.c index 54683d741..5b89023d5 100644 --- a/src/ext_sysfs_cpu.c +++ b/src/ext_sysfs_cpu.c @@ -44,12 +44,9 @@ void sysfs_cpu_close (void *hashcat_ctx) char *hm_SYSFS_CPU_get_syspath_hwmon (void) { - char *found[4]; + char *found = NULL; - found[0] = NULL; - found[1] = NULL; - found[2] = NULL; - found[3] = NULL; + int best = 4; // 16 ok? @@ -61,31 +58,43 @@ char *hm_SYSFS_CPU_get_syspath_hwmon (void) HCFILE fp; - if (hc_fopen_raw (&fp, path, "rb") == false) continue; + if (hc_fopen_raw (&fp, path, "rb") == false) + { + hcfree (path); + + continue; + } char buf[64] = { 0 }; const size_t line_len = fgetl (&fp, buf, sizeof (buf)); - if (line_len) - { - if (strcmp (buf, SENSOR_CORETEMP) == 0) hc_asprintf (&found[0], "%s/hwmon%d", SYSFS_HWMON, i); - if (strcmp (buf, SENSOR_K10TEMP) == 0) hc_asprintf (&found[1], "%s/hwmon%d", SYSFS_HWMON, i); - if (strcmp (buf, SENSOR_K8TEMP) == 0) hc_asprintf (&found[2], "%s/hwmon%d", SYSFS_HWMON, i); - if (strcmp (buf, SENSOR_ACPITZ) == 0) hc_asprintf (&found[3], "%s/hwmon%d", SYSFS_HWMON, i); - } - hc_fclose (&fp); hcfree (path); + + if (line_len == 0) continue; + + int tmp_best = -1; + + if (strcmp (buf, SENSOR_CORETEMP) == 0) tmp_best = 0; + if (strcmp (buf, SENSOR_K10TEMP) == 0) tmp_best = 1; + if (strcmp (buf, SENSOR_K8TEMP) == 0) tmp_best = 2; + if (strcmp (buf, SENSOR_ACPITZ) == 0) tmp_best = 3; + + if (tmp_best >= 0 && tmp_best < best) + { + hcfree (found); + + best = tmp_best; + + hc_asprintf (&found, "%s/hwmon%d", SYSFS_HWMON, i); + + if (best == 0) break; + } } - if (found[0]) return found[0]; - if (found[1]) return found[1]; - if (found[2]) return found[2]; - if (found[3]) return found[3]; - - return NULL; + return found; } int hm_SYSFS_CPU_get_temperature_current (void *hashcat_ctx, int *val) diff --git a/src/user_options.c b/src/user_options.c index 23e195ee6..c2a1bd634 100644 --- a/src/user_options.c +++ b/src/user_options.c @@ -324,6 +324,11 @@ void user_options_destroy (hashcat_ctx_t *hashcat_ctx) hcfree (user_options->rp_files); + if (user_options->backend_info > 0) + { + hcfree (user_options->opencl_device_types); + } + //do not reset this, it might be used from main.c //memset (user_options, 0, sizeof (user_options_t)); } From baea7933a82fb9c8c8849239e069e19883cfc6b8 Mon Sep 17 00:00:00 2001 From: Gabriele Gristina Date: Sun, 22 Jun 2025 22:04:38 +0200 Subject: [PATCH 87/95] fix memory leaks (2) --- src/backend.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/backend.c b/src/backend.c index 32f4ec49b..2fb3f0cb4 100644 --- a/src/backend.c +++ b/src/backend.c @@ -5168,6 +5168,8 @@ int backend_ctx_init (hashcat_ctx_t *hashcat_ctx) event_log_warning (hashcat_ctx, " \"CUDA Toolkit\" (9.0 or later)"); event_log_warning (hashcat_ctx, NULL); + hcfree (backend_ctx->devices_param); + return -1; } From 13a7b56febd75669c42364617dee1d574173f477 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Mon, 23 Jun 2025 12:30:12 +0200 Subject: [PATCH 88/95] Improve the logic for when to use funnelshift and when not to. Some algorithms, such as SHA1-HMAC and DCC1, do not work well with it, so it has been disabled for them. Fix the automatic reduction of the kernel-accel maximum based on available memory per device by accounting for the additional size needed to handle register spilling. Fix the tools/benchmark_deep.pl script to recognize benchmark masks more reliably. --- OpenCL/inc_platform.cl | 210 ++++++++++++++++++++++--------------- OpenCL/inc_vendor.h | 7 ++ src/backend.c | 16 ++- src/modules/module_00150.c | 11 +- src/modules/module_01100.c | 11 +- src/modules/module_06000.c | 11 +- src/modules/module_06211.c | 11 +- src/modules/module_06212.c | 11 +- src/modules/module_06213.c | 11 +- src/modules/module_08600.c | 14 ++- src/modules/module_08700.c | 14 ++- src/modules/module_09710.c | 3 +- src/modules/module_09810.c | 3 +- src/modules/module_10410.c | 3 +- src/modules/module_11000.c | 11 +- src/modules/module_14400.c | 11 +- src/modules/module_14900.c | 3 +- src/modules/module_16000.c | 15 ++- src/modules/module_16600.c | 14 ++- src/modules/module_20510.c | 14 ++- tools/benchmark_deep.pl | 4 +- 21 files changed, 302 insertions(+), 106 deletions(-) diff --git a/OpenCL/inc_platform.cl b/OpenCL/inc_platform.cl index c04575066..9af10e9ba 100644 --- a/OpenCL/inc_platform.cl +++ b/OpenCL/inc_platform.cl @@ -128,108 +128,128 @@ DECLSPEC size_t get_local_size (const u32 dimindx __attribute__((unused))) DECLSPEC u32x rotl32 (const u32x a, const int n) { #if VECT_SIZE == 1 - return __funnelshift_l(a, a, n); - #endif + + return rotl32_S (a, n); + + #else u32x t = 0; #if VECT_SIZE >= 2 - t.s0 = __funnelshift_l(a.s0, a.s0, n); - t.s1 = __funnelshift_l(a.s1, a.s1, n); + t.s0 = rotl32_S (a.s0, n); + t.s1 = rotl32_S (a.s1, n); #endif #if VECT_SIZE >= 4 - t.s2 = __funnelshift_l(a.s2, a.s2, n); - t.s3 = __funnelshift_l(a.s3, a.s3, n); + t.s2 = rotl32_S (a.s2, n); + t.s3 = rotl32_S (a.s3, n); #endif #if VECT_SIZE >= 8 - t.s4 = __funnelshift_l(a.s4, a.s4, n); - t.s5 = __funnelshift_l(a.s5, a.s5, n); - t.s6 = __funnelshift_l(a.s6, a.s6, n); - t.s7 = __funnelshift_l(a.s7, a.s7, n); + t.s4 = rotl32_S (a.s4, n); + t.s5 = rotl32_S (a.s5, n); + t.s6 = rotl32_S (a.s6, n); + t.s7 = rotl32_S (a.s7, n); #endif #if VECT_SIZE >= 16 - t.s8 = __funnelshift_l(a.s8, a.s8, n); - t.s9 = __funnelshift_l(a.s9, a.s9, n); - t.sa = __funnelshift_l(a.sa, a.sa, n); - t.sb = __funnelshift_l(a.sb, a.sb, n); - t.sc = __funnelshift_l(a.sc, a.sc, n); - t.sd = __funnelshift_l(a.sd, a.sd, n); - t.se = __funnelshift_l(a.se, a.se, n); - t.sf = __funnelshift_l(a.sf, a.sf, n); + t.s8 = rotl32_S (a.s8, n); + t.s9 = rotl32_S (a.s9, n); + t.sa = rotl32_S (a.sa, n); + t.sb = rotl32_S (a.sb, n); + t.sc = rotl32_S (a.sc, n); + t.sd = rotl32_S (a.sd, n); + t.se = rotl32_S (a.se, n); + t.sf = rotl32_S (a.sf, n); #endif return t; - //return ((a << n) | ((a >> (32 - n)))); + + #endif } DECLSPEC u32x rotr32 (const u32x a, const int n) { #if VECT_SIZE == 1 - return __funnelshift_r(a, a, n); - #endif + + return rotr32_S (a, n); + + #else u32x t = 0; #if VECT_SIZE >= 2 - t.s0 = __funnelshift_r(a.s0, a.s0, n); - t.s1 = __funnelshift_r(a.s1, a.s1, n); + t.s0 = rotr32_S (a.s0, n); + t.s1 = rotr32_S (a.s1, n); #endif #if VECT_SIZE >= 4 - t.s2 = __funnelshift_r(a.s2, a.s2, n); - t.s3 = __funnelshift_r(a.s3, a.s3, n); + t.s2 = rotr32_S (a.s2, n); + t.s3 = rotr32_S (a.s3, n); #endif #if VECT_SIZE >= 8 - t.s4 = __funnelshift_r(a.s4, a.s4, n); - t.s5 = __funnelshift_r(a.s5, a.s5, n); - t.s6 = __funnelshift_r(a.s6, a.s6, n); - t.s7 = __funnelshift_r(a.s7, a.s7, n); + t.s4 = rotr32_S (a.s4, n); + t.s5 = rotr32_S (a.s5, n); + t.s6 = rotr32_S (a.s6, n); + t.s7 = rotr32_S (a.s7, n); #endif #if VECT_SIZE >= 16 - t.s8 = __funnelshift_r(a.s8, a.s8, n); - t.s9 = __funnelshift_r(a.s9, a.s9, n); - t.sa = __funnelshift_r(a.sa, a.sa, n); - t.sb = __funnelshift_r(a.sb, a.sb, n); - t.sc = __funnelshift_r(a.sc, a.sc, n); - t.sd = __funnelshift_r(a.sd, a.sd, n); - t.se = __funnelshift_r(a.se, a.se, n); - t.sf = __funnelshift_r(a.sf, a.sf, n); + t.s8 = rotr32_S (a.s8, n); + t.s9 = rotr32_S (a.s9, n); + t.sa = rotr32_S (a.sa, n); + t.sb = rotr32_S (a.sb, n); + t.sc = rotr32_S (a.sc, n); + t.sd = rotr32_S (a.sd, n); + t.se = rotr32_S (a.se, n); + t.sf = rotr32_S (a.sf, n); #endif return t; - //return ((a >> n) | ((a << (32 - n)))); + + #endif } DECLSPEC u32 rotl32_S (const u32 a, const int n) { - return __funnelshift_l(a, a, n); - //return ((a << n) | ((a >> (32 - n)))); + #ifdef USE_FUNNELSHIFT + return __funnelshift_l (a, a, n); + #else + return ((a << n) | ((a >> (32 - n)))); + #endif } DECLSPEC u32 rotr32_S (const u32 a, const int n) { - return __funnelshift_r(a, a, n); - //return ((a >> n) | ((a << (32 - n)))); + #ifdef USE_FUNNELSHIFT + return __funnelshift_r (a, a, n); + #else + return ((a >> n) | ((a << (32 - n)))); + #endif } DECLSPEC u64x rotl64 (const u64x a, const int n) { + #if VECT_SIZE == 1 + return rotl64_S (a, n); + #else return ((a << n) | ((a >> (64 - n)))); + #endif } DECLSPEC u64x rotr64 (const u64x a, const int n) { + #if VECT_SIZE == 1 + return rotr64_S (a, n); + #else return ((a >> n) | ((a << (64 - n)))); + #endif } DECLSPEC u64 rotl64_S (const u64 a, const int n) { - return ((a << n) | ((a >> (64 - n)))); + return rotr64_S (a, 64 - n); } DECLSPEC u64 rotr64_S (const u64 a, const int n) @@ -309,93 +329,105 @@ DECLSPEC size_t get_local_size (const u32 dimindx __attribute__((unused))) DECLSPEC u32x rotl32 (const u32x a, const int n) { #if VECT_SIZE == 1 - return __funnelshift_l(a, a, n); - #endif - u32x t; + return rotl32_S (a, n); + + #else + + u32x t = 0; #if VECT_SIZE >= 2 - t.s0 = __funnelshift_l(a.s0, a.s0, n); - t.s1 = __funnelshift_l(a.s1, a.s1, n); + t.s0 = rotl32_S (a.s0, n); + t.s1 = rotl32_S (a.s1, n); #endif #if VECT_SIZE >= 4 - t.s2 = __funnelshift_l(a.s2, a.s2, n); - t.s3 = __funnelshift_l(a.s3, a.s3, n); + t.s2 = rotl32_S (a.s2, n); + t.s3 = rotl32_S (a.s3, n); #endif #if VECT_SIZE >= 8 - t.s4 = __funnelshift_l(a.s4, a.s4, n); - t.s5 = __funnelshift_l(a.s5, a.s5, n); - t.s6 = __funnelshift_l(a.s6, a.s6, n); - t.s7 = __funnelshift_l(a.s7, a.s7, n); + t.s4 = rotl32_S (a.s4, n); + t.s5 = rotl32_S (a.s5, n); + t.s6 = rotl32_S (a.s6, n); + t.s7 = rotl32_S (a.s7, n); #endif #if VECT_SIZE >= 16 - t.s8 = __funnelshift_l(a.s8, a.s8, n); - t.s9 = __funnelshift_l(a.s9, a.s9, n); - t.sa = __funnelshift_l(a.sa, a.sa, n); - t.sb = __funnelshift_l(a.sb, a.sb, n); - t.sc = __funnelshift_l(a.sc, a.sc, n); - t.sd = __funnelshift_l(a.sd, a.sd, n); - t.se = __funnelshift_l(a.se, a.se, n); - t.sf = __funnelshift_l(a.sf, a.sf, n); + t.s8 = rotl32_S (a.s8, n); + t.s9 = rotl32_S (a.s9, n); + t.sa = rotl32_S (a.sa, n); + t.sb = rotl32_S (a.sb, n); + t.sc = rotl32_S (a.sc, n); + t.sd = rotl32_S (a.sd, n); + t.se = rotl32_S (a.se, n); + t.sf = rotl32_S (a.sf, n); #endif return t; - //return ((a << n) | ((a >> (32 - n)))); + + #endif } DECLSPEC u32x rotr32 (const u32x a, const int n) { #if VECT_SIZE == 1 - return __funnelshift_r(a, a, n); - #endif - u32x t; + return rotr32_S (a, n); + + #else + + u32x t = 0; #if VECT_SIZE >= 2 - t.s0 = __funnelshift_r(a.s0, a.s0, n); - t.s1 = __funnelshift_r(a.s1, a.s1, n); + t.s0 = rotr32_S (a.s0, n); + t.s1 = rotr32_S (a.s1, n); #endif #if VECT_SIZE >= 4 - t.s2 = __funnelshift_r(a.s2, a.s2, n); - t.s3 = __funnelshift_r(a.s3, a.s3, n); + t.s2 = rotr32_S (a.s2, n); + t.s3 = rotr32_S (a.s3, n); #endif #if VECT_SIZE >= 8 - t.s4 = __funnelshift_r(a.s4, a.s4, n); - t.s5 = __funnelshift_r(a.s5, a.s5, n); - t.s6 = __funnelshift_r(a.s6, a.s6, n); - t.s7 = __funnelshift_r(a.s7, a.s7, n); + t.s4 = rotr32_S (a.s4, n); + t.s5 = rotr32_S (a.s5, n); + t.s6 = rotr32_S (a.s6, n); + t.s7 = rotr32_S (a.s7, n); #endif #if VECT_SIZE >= 16 - t.s8 = __funnelshift_r(a.s8, a.s8, n); - t.s9 = __funnelshift_r(a.s9, a.s9, n); - t.sa = __funnelshift_r(a.sa, a.sa, n); - t.sb = __funnelshift_r(a.sb, a.sb, n); - t.sc = __funnelshift_r(a.sc, a.sc, n); - t.sd = __funnelshift_r(a.sd, a.sd, n); - t.se = __funnelshift_r(a.se, a.se, n); - t.sf = __funnelshift_r(a.sf, a.sf, n); + t.s8 = rotr32_S (a.s8, n); + t.s9 = rotr32_S (a.s9, n); + t.sa = rotr32_S (a.sa, n); + t.sb = rotr32_S (a.sb, n); + t.sc = rotr32_S (a.sc, n); + t.sd = rotr32_S (a.sd, n); + t.se = rotr32_S (a.se, n); + t.sf = rotr32_S (a.sf, n); #endif return t; - //return ((a >> n) | ((a << (32 - n)))); + + #endif } DECLSPEC u32 rotl32_S (const u32 a, const int n) { - return __funnelshift_l(a, a, n); - //return ((a << n) | ((a >> (32 - n)))); + #ifdef USE_FUNNELSHIFT + return __funnelshift_l (a, a, n); + #else + return ((a << n) | ((a >> (32 - n)))); + #endif } DECLSPEC u32 rotr32_S (const u32 a, const int n) { - return __funnelshift_r(a, a, n); - //return ((a >> n) | ((a << (32 - n)))); + #ifdef USE_FUNNELSHIFT + return __funnelshift_r (a, a, n); + #else + return ((a >> n) | ((a << (32 - n)))); + #endif } DECLSPEC u64x rotl64 (const u64x a, const int n) @@ -423,6 +455,7 @@ DECLSPEC u64 rotl64_S (const u64 a, const int n) DECLSPEC u64 rotr64_S (const u64 a, const int n) { + #ifdef USE_FUNNELSHIFT vconv64_t in; in.v64 = a; @@ -444,6 +477,9 @@ DECLSPEC u64 rotr64_S (const u64 a, const int n) } return out.v64; + #else + return ((a >> n) | ((a << (64 - n)))); + #endif } #define FIXED_THREAD_COUNT(n) __launch_bounds__((n), 0) diff --git a/OpenCL/inc_vendor.h b/OpenCL/inc_vendor.h index 4221b3b9f..a52b4c899 100644 --- a/OpenCL/inc_vendor.h +++ b/OpenCL/inc_vendor.h @@ -183,11 +183,13 @@ using namespace metal; #ifdef IS_CUDA #define USE_BITSELECT #define USE_ROTATE +#define USE_FUNNELSHIFT #endif #ifdef IS_HIP #define USE_BITSELECT #define USE_ROTATE +#define USE_FUNNELSHIFT #endif #ifdef IS_ROCM @@ -218,4 +220,9 @@ using namespace metal; #define s3 w #endif +// some algorithms do not like this, eg 150, 1100, ... +#ifdef NO_FUNNELSHIFT +#undef USE_FUNNELSHIFT +#endif + #endif // INC_VENDOR_H diff --git a/src/backend.c b/src/backend.c index 02cdd73b8..578431158 100644 --- a/src/backend.c +++ b/src/backend.c @@ -15769,6 +15769,19 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) { const u64 kernel_power_max = hardware_power_max * kernel_accel_max; + // size_spilling: we cannot query this directly. + // Example output: + // ptxas . 4096 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads + // However, this is very relevant for us. In theory, these numbers could reach gigabytes, + // but in practice, excessive spilling would make the kernel too slow, + // and the kernel developer would adapt accordingly. We'll assume a maximum spilling buffer + // size of 4 KiB per thread for now. + // This setting will reduce the available memory pool on a 4090: + // 4 * 1024 * 128 * 32 = 16 MiB per -n accel, + // which adds up to 2 GiB with -n 128. + + size_t size_spilling = kernel_power_max * (4 * 1024); + // size_pws size_pws = kernel_power_max * sizeof (pw_t); @@ -15904,7 +15917,8 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) + size_st_digests + size_st_salts + size_st_esalts - + size_kernel_params; + + size_kernel_params + + size_spilling; if ((size_total + EXTRA_SPACE) > device_param->device_available_mem) memory_limit_hit = 1; diff --git a/src/modules/module_00150.c b/src/modules/module_00150.c index 74c00d8c5..4a36fc8c5 100644 --- a/src/modules/module_00150.c +++ b/src/modules/module_00150.c @@ -44,6 +44,15 @@ u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, const char *module_st_hash (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_HASH; } const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_PASS; } +char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) +{ + char *jit_build_options = NULL; + + hc_asprintf (&jit_build_options, "-D NO_FUNNELSHIFT"); + + return jit_build_options; +} + int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len) { u32 *digest = (u32 *) digest_buf; @@ -190,7 +199,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = MODULE_DEFAULT; + module_ctx->module_jit_build_options = module_jit_build_options; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; diff --git a/src/modules/module_01100.c b/src/modules/module_01100.c index ddd4948c9..1c3cbd731 100644 --- a/src/modules/module_01100.c +++ b/src/modules/module_01100.c @@ -50,6 +50,15 @@ u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, const char *module_st_hash (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_HASH; } const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_PASS; } +char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) +{ + char *jit_build_options = NULL; + + hc_asprintf (&jit_build_options, "-D NO_FUNNELSHIFT"); + + return jit_build_options; +} + int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len) { u32 *digest = (u32 *) digest_buf; @@ -197,7 +206,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = MODULE_DEFAULT; + module_ctx->module_jit_build_options = module_jit_build_options; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; diff --git a/src/modules/module_06000.c b/src/modules/module_06000.c index 81aba5f37..8b118d9af 100644 --- a/src/modules/module_06000.c +++ b/src/modules/module_06000.c @@ -42,6 +42,15 @@ u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, const char *module_st_hash (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_HASH; } const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_PASS; } +char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) +{ + char *jit_build_options = NULL; + + hc_asprintf (&jit_build_options, "-D NO_FUNNELSHIFT"); + + return jit_build_options; +} + int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len) { u32 *digest = (u32 *) digest_buf; @@ -150,7 +159,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = MODULE_DEFAULT; + module_ctx->module_jit_build_options = module_jit_build_options; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; diff --git a/src/modules/module_06211.c b/src/modules/module_06211.c index c444626e5..d2d9ff3ce 100644 --- a/src/modules/module_06211.c +++ b/src/modules/module_06211.c @@ -77,6 +77,15 @@ typedef struct tc static const int ROUNDS_TRUECRYPT_2K = 2000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; +char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) +{ + char *jit_build_options = NULL; + + hc_asprintf (&jit_build_options, "-D NO_FUNNELSHIFT"); + + return jit_build_options; +} + bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) { if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) @@ -298,7 +307,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = MODULE_DEFAULT; + module_ctx->module_jit_build_options = module_jit_build_options; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; diff --git a/src/modules/module_06212.c b/src/modules/module_06212.c index 7ea785b75..e5560fa3d 100644 --- a/src/modules/module_06212.c +++ b/src/modules/module_06212.c @@ -77,6 +77,15 @@ typedef struct tc static const int ROUNDS_TRUECRYPT_2K = 2000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; +char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) +{ + char *jit_build_options = NULL; + + hc_asprintf (&jit_build_options, "-D NO_FUNNELSHIFT"); + + return jit_build_options; +} + bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) { if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) @@ -298,7 +307,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = MODULE_DEFAULT; + module_ctx->module_jit_build_options = module_jit_build_options; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; diff --git a/src/modules/module_06213.c b/src/modules/module_06213.c index 690a3faec..8ab92f5c5 100644 --- a/src/modules/module_06213.c +++ b/src/modules/module_06213.c @@ -77,6 +77,15 @@ typedef struct tc static const int ROUNDS_TRUECRYPT_2K = 2000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; +char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) +{ + char *jit_build_options = NULL; + + hc_asprintf (&jit_build_options, "-D NO_FUNNELSHIFT"); + + return jit_build_options; +} + bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) { if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) @@ -304,7 +313,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = MODULE_DEFAULT; + module_ctx->module_jit_build_options = module_jit_build_options; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; diff --git a/src/modules/module_08600.c b/src/modules/module_08600.c index f1e83a17e..c72da5c7f 100644 --- a/src/modules/module_08600.c +++ b/src/modules/module_08600.c @@ -44,6 +44,18 @@ u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, const char *module_st_hash (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_HASH; } const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_PASS; } +char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) +{ + char *jit_build_options = NULL; + + if (device_param->is_cuda == true) + { + hc_asprintf (&jit_build_options, "-D FIXED_LOCAL_SIZE=%u", (u32) device_param->device_maxworkgroup_size); + } + + return jit_build_options; +} + u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const u32 pw_max = 16; // Lotus Notes/Domino 5 limits itself to 16 @@ -146,7 +158,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = MODULE_DEFAULT; + module_ctx->module_jit_build_options = module_jit_build_options; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; diff --git a/src/modules/module_08700.c b/src/modules/module_08700.c index 39b157196..cf4c428cf 100644 --- a/src/modules/module_08700.c +++ b/src/modules/module_08700.c @@ -43,6 +43,18 @@ u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, const char *module_st_hash (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_HASH; } const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_PASS; } +char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) +{ + char *jit_build_options = NULL; + + if (device_param->is_cuda == true) + { + hc_asprintf (&jit_build_options, "-D FIXED_LOCAL_SIZE=%u", (u32) device_param->device_maxworkgroup_size); + } + + return jit_build_options; +} + u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const bool optimized_kernel = (hashconfig->opti_type & OPTI_TYPE_OPTIMIZED_KERNEL); @@ -188,7 +200,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = MODULE_DEFAULT; + module_ctx->module_jit_build_options = module_jit_build_options; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; diff --git a/src/modules/module_09710.c b/src/modules/module_09710.c index f4520d3d3..1698ba1bc 100644 --- a/src/modules/module_09710.c +++ b/src/modules/module_09710.c @@ -28,6 +28,7 @@ static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_ALWAYS_HEXIFY | OPTS_TYPE_AUTODETECT_DISABLE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; +static const char *BENCHMARK_MASK = "?b?b?b?b?b"; static const char *ST_PASS = "\x91\xb2\xe0\x62\xb9"; static const char *ST_HASH = "$oldoffice$0*55045061647456688860411218030058*e7e24d163fbd743992d4b8892bf3f2f7*493410dbc832557d3fe1870ace8397e2"; @@ -134,7 +135,7 @@ u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED con const char *module_benchmark_mask (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { - return "?b?b?b?b?b"; + return BENCHMARK_MASK; } u32 module_forced_outfile_format (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) diff --git a/src/modules/module_09810.c b/src/modules/module_09810.c index 433616cf1..a4aa244e4 100644 --- a/src/modules/module_09810.c +++ b/src/modules/module_09810.c @@ -27,6 +27,7 @@ static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_ALWAYS_HEXIFY | OPTS_TYPE_AUTODETECT_DISABLE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; +static const char *BENCHMARK_MASK = "?b?b?b?b?b"; static const char *ST_PASS = "\xb8\xf6\x36\x19\xca"; static const char *ST_HASH = "$oldoffice$3*83328705222323020515404251156288*2855956a165ff6511bc7f4cd77b9e101*941861655e73a09c40f7b1e9dfd0c256ed285acd"; @@ -135,7 +136,7 @@ u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED con const char *module_benchmark_mask (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { - return "?b?b?b?b?b"; + return BENCHMARK_MASK; } u32 module_forced_outfile_format (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) diff --git a/src/modules/module_10410.c b/src/modules/module_10410.c index 25f3417de..063ac4916 100644 --- a/src/modules/module_10410.c +++ b/src/modules/module_10410.c @@ -26,6 +26,7 @@ static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_ALWAYS_HEXIFY | OPTS_TYPE_AUTODETECT_DISABLE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; +static const char *BENCHMARK_MASK = "?b?b?b?b?b"; static const char *ST_PASS = "\x6a\x8a\xed\xcc\xb7"; static const char *ST_HASH = "$pdf$1*2*40*-1*0*16*01221086741440841668371056103222*32*27c3fecef6d46a78eb61b8b4dbc690f5f8a2912bbb9afc842c12d79481568b74*32*0000000000000000000000000000000000000000000000000000000000000000"; @@ -144,7 +145,7 @@ u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED con const char *module_benchmark_mask (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { - return "?b?b?b?b?b"; + return BENCHMARK_MASK; } u32 module_forced_outfile_format (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) diff --git a/src/modules/module_11000.c b/src/modules/module_11000.c index 536e30e73..916f0ffa1 100644 --- a/src/modules/module_11000.c +++ b/src/modules/module_11000.c @@ -45,6 +45,15 @@ u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, const char *module_st_hash (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_HASH; } const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_PASS; } +char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) +{ + char *jit_build_options = NULL; + + hc_asprintf (&jit_build_options, "-D NO_FUNNELSHIFT"); + + return jit_build_options; +} + u32 module_salt_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const u32 salt_min = 56; @@ -181,7 +190,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = MODULE_DEFAULT; + module_ctx->module_jit_build_options = module_jit_build_options; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; diff --git a/src/modules/module_14400.c b/src/modules/module_14400.c index 8512337b7..18c8d4c4a 100644 --- a/src/modules/module_14400.c +++ b/src/modules/module_14400.c @@ -43,6 +43,15 @@ u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, const char *module_st_hash (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_HASH; } const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_PASS; } +char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) +{ + char *jit_build_options = NULL; + + hc_asprintf (&jit_build_options, "-D NO_FUNNELSHIFT"); + + return jit_build_options; +} + u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const bool optimized_kernel = (hashconfig->opti_type & OPTI_TYPE_OPTIMIZED_KERNEL); @@ -188,7 +197,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = MODULE_DEFAULT; + module_ctx->module_jit_build_options = module_jit_build_options; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; diff --git a/src/modules/module_14900.c b/src/modules/module_14900.c index 7de3dba45..cbe009024 100644 --- a/src/modules/module_14900.c +++ b/src/modules/module_14900.c @@ -24,6 +24,7 @@ static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_LE | OPTS_TYPE_SUGGEST_KG; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; +static const char *BENCHMARK_MASK = "?b?b?b?b?bxxxxx"; static const char *ST_PASS = "hashcat!!!"; static const char *ST_HASH = "7090b6b9:04223875"; @@ -58,7 +59,7 @@ u32 module_pw_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED con const char *module_benchmark_mask (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { - return "?b?b?b?b?bxxxxx"; + return BENCHMARK_MASK; } int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len) diff --git a/src/modules/module_16000.c b/src/modules/module_16000.c index 9781e0e72..7da4eccc7 100644 --- a/src/modules/module_16000.c +++ b/src/modules/module_16000.c @@ -42,6 +42,19 @@ u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, const char *module_st_hash (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_HASH; } const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_PASS; } + +char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) +{ + char *jit_build_options = NULL; + + if (device_param->is_cuda == true) + { + hc_asprintf (&jit_build_options, "-D FIXED_LOCAL_SIZE=%u", (u32) device_param->device_maxworkgroup_size); + } + + return jit_build_options; +} + u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const u32 pw_max = 8; // Underlaying DES max @@ -166,7 +179,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = MODULE_DEFAULT; + module_ctx->module_jit_build_options = module_jit_build_options; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; diff --git a/src/modules/module_16600.c b/src/modules/module_16600.c index 89cecad59..75d6b3cb5 100644 --- a/src/modules/module_16600.c +++ b/src/modules/module_16600.c @@ -55,6 +55,18 @@ typedef struct electrum_wallet static const char *SIGNATURE_ELECTRUM_WALLET = "$electrum$"; +char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) +{ + char *jit_build_options = NULL; + + if (device_param->is_cuda == true) + { + hc_asprintf (&jit_build_options, "-D FIXED_LOCAL_SIZE=%u", (u32) device_param->device_maxworkgroup_size); + } + + return jit_build_options; +} + u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const u64 esalt_size = (const u64) sizeof (electrum_wallet_t); @@ -232,7 +244,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = MODULE_DEFAULT; + module_ctx->module_jit_build_options = module_jit_build_options; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; diff --git a/src/modules/module_20510.c b/src/modules/module_20510.c index 394a69a3b..8fa2d2f35 100644 --- a/src/modules/module_20510.c +++ b/src/modules/module_20510.c @@ -108,6 +108,18 @@ typedef struct pkzip_extra } pkzip_extra_t; +char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) +{ + char *jit_build_options = NULL; + + if (device_param->is_cuda == true) + { + hc_asprintf (&jit_build_options, "-D FIXED_LOCAL_SIZE=%u", (u32) device_param->device_maxworkgroup_size); + } + + return jit_build_options; +} + u32 module_hashes_count_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const u64 tmp_size = 1; @@ -243,7 +255,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = MODULE_DEFAULT; + module_ctx->module_jit_build_options = module_jit_build_options; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; diff --git a/tools/benchmark_deep.pl b/tools/benchmark_deep.pl index 09e38928a..b75d371a0 100755 --- a/tools/benchmark_deep.pl +++ b/tools/benchmark_deep.pl @@ -548,7 +548,7 @@ sub get_module close (IN); - my $mask = (defined $benchmark_mask) ? $benchmark_mask : $default_mask; + my $mask = $default_mask; if ($pw_min != -1) { @@ -571,6 +571,8 @@ sub get_module } } + $mask = (defined $benchmark_mask) ? $benchmark_mask : $mask; + my $module = { "is_binary" => $is_binary, From 69a585fa4a876dd042eb6c4f2d336abc53eb65c8 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Tue, 24 Jun 2025 20:19:42 +0200 Subject: [PATCH 89/95] Autotune refactoring II: dynamic threads-per-block - Integrated occupancy hints from vendor APIs (CUDA, HIP) to set a dynamic threads-per-block limit per kernel instead of using static values. - Added `find_tuning_function()` to identify the relevant kernel. - Autotuner now runs in three stages: threads -> loops -> accel. The first two stages now stop increasing when the tested kernel runtime gets too close to the target runtime (96ms for `-w 3`), leaving headroom for the next stage to adjust in a finer sense. - Accel tuning now uses a capped floating-point multiplier instead of powers of two. - Removed workarounds for missing thread autotuning in plugins. - Removed the hardcoded 4GiB host memory limit for accel. Added a cross-platform `get_free_memory()` to check actual free RAM during GPU initialization, preventing underutilization of high-end GPUs like the 4090. If needed, users can still cap memory usage with `-T` or `-n`. - Updated enums for ROCm 6.4.x and CUDA 12.9. - Added code to detect kernel register spilling. That's relevant so we can keep free enough global memory on the runtime for the runtime to handle spills efficiently. --- include/autotune.h | 2 + include/ext_cuda.h | 460 +++++++++++++++++++++++-------------- include/ext_hip.h | 23 +- include/shared.h | 2 + include/types.h | 2 + src/autotune.c | 106 +++++++-- src/backend.c | 353 +++++++++++++++++++++++++--- src/ext_cuda.c | 31 +++ src/ext_hip.c | 28 +++ src/modules/module_03000.c | 7 + src/modules/module_03200.c | 18 +- src/modules/module_06231.c | 9 +- src/modules/module_06232.c | 9 +- src/modules/module_06233.c | 9 +- src/modules/module_08600.c | 14 +- src/modules/module_08700.c | 14 +- src/modules/module_09800.c | 4 +- src/modules/module_10700.c | 9 +- src/modules/module_12700.c | 20 +- src/modules/module_13731.c | 9 +- src/modules/module_13732.c | 9 +- src/modules/module_13733.c | 9 +- src/modules/module_16000.c | 15 +- src/modules/module_17200.c | 3 +- src/modules/module_17220.c | 3 +- src/modules/module_17225.c | 3 +- src/modules/module_19000.c | 9 +- src/modules/module_19300.c | 9 +- src/modules/module_20510.c | 14 +- src/modules/module_21800.c | 3 +- src/modules/module_25000.c | 22 +- src/modules/module_25100.c | 22 +- src/modules/module_25200.c | 22 +- src/modules/module_25400.c | 18 +- src/modules/module_26700.c | 22 +- src/modules/module_26800.c | 22 +- src/modules/module_26900.c | 22 +- src/modules/module_27300.c | 22 +- src/modules/module_30901.c | 1 - src/modules/module_30902.c | 1 - src/modules/module_30903.c | 1 - src/modules/module_30904.c | 1 - src/modules/module_30905.c | 1 - src/modules/module_30906.c | 1 - src/shared.c | 81 +++++++ 45 files changed, 952 insertions(+), 513 deletions(-) diff --git a/include/autotune.h b/include/autotune.h index 09d297d04..d919b02ba 100644 --- a/include/autotune.h +++ b/include/autotune.h @@ -6,6 +6,8 @@ #ifndef HC_AUTOTUNE_H #define HC_AUTOTUNE_H +int find_tuning_function (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param); + HC_API_CALL void *thread_autotune (void *p); #endif // HC_AUTOTUNE_H diff --git a/include/ext_cuda.h b/include/ext_cuda.h index 3a05aff1a..44ae01cd6 100644 --- a/include/ext_cuda.h +++ b/include/ext_cuda.h @@ -712,118 +712,160 @@ typedef enum CUjit_option_enum /** * Device properties */ -typedef enum CUdevice_attribute_enum -{ - CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK = 1, /**< Maximum number of threads per block */ - CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X = 2, /**< Maximum block dimension X */ - CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y = 3, /**< Maximum block dimension Y */ - CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Z = 4, /**< Maximum block dimension Z */ - CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X = 5, /**< Maximum grid dimension X */ - CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Y = 6, /**< Maximum grid dimension Y */ - CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Z = 7, /**< Maximum grid dimension Z */ - CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK = 8, /**< Maximum shared memory available per block in bytes */ - CU_DEVICE_ATTRIBUTE_SHARED_MEMORY_PER_BLOCK = 8, /**< Deprecated, use CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK */ - CU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY = 9, /**< Memory available on device for __constant__ variables in a CUDA C kernel in bytes */ - CU_DEVICE_ATTRIBUTE_WARP_SIZE = 10, /**< Warp size in threads */ - CU_DEVICE_ATTRIBUTE_MAX_PITCH = 11, /**< Maximum pitch in bytes allowed by memory copies */ - CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK = 12, /**< Maximum number of 32-bit registers available per block */ - CU_DEVICE_ATTRIBUTE_REGISTERS_PER_BLOCK = 12, /**< Deprecated, use CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK */ - CU_DEVICE_ATTRIBUTE_CLOCK_RATE = 13, /**< Typical clock frequency in kilohertz */ - CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT = 14, /**< Alignment requirement for textures */ - CU_DEVICE_ATTRIBUTE_GPU_OVERLAP = 15, /**< Device can possibly copy memory and execute a kernel concurrently. Deprecated. Use instead CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT. */ - CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT = 16, /**< Number of multiprocessors on device */ - CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT = 17, /**< Specifies whether there is a run time limit on kernels */ - CU_DEVICE_ATTRIBUTE_INTEGRATED = 18, /**< Device is integrated with host memory */ - CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY = 19, /**< Device can map host memory into CUDA address space */ - CU_DEVICE_ATTRIBUTE_COMPUTE_MODE = 20, /**< Compute mode (See ::CUcomputemode for details) */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH = 21, /**< Maximum 1D texture width */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_WIDTH = 22, /**< Maximum 2D texture width */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_HEIGHT = 23, /**< Maximum 2D texture height */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH = 24, /**< Maximum 3D texture width */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT = 25, /**< Maximum 3D texture height */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH = 26, /**< Maximum 3D texture depth */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH = 27, /**< Maximum 2D layered texture width */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT = 28, /**< Maximum 2D layered texture height */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS = 29, /**< Maximum layers in a 2D layered texture */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_ARRAY_WIDTH = 27, /**< Deprecated, use CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_ARRAY_HEIGHT = 28, /**< Deprecated, use CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_ARRAY_NUMSLICES = 29, /**< Deprecated, use CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS */ - CU_DEVICE_ATTRIBUTE_SURFACE_ALIGNMENT = 30, /**< Alignment requirement for surfaces */ - CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS = 31, /**< Device can possibly execute multiple kernels concurrently */ - CU_DEVICE_ATTRIBUTE_ECC_ENABLED = 32, /**< Device has ECC support enabled */ - CU_DEVICE_ATTRIBUTE_PCI_BUS_ID = 33, /**< PCI bus ID of the device */ - CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID = 34, /**< PCI device ID of the device */ - CU_DEVICE_ATTRIBUTE_TCC_DRIVER = 35, /**< Device is using TCC driver model */ - CU_DEVICE_ATTRIBUTE_MEMORY_CLOCK_RATE = 36, /**< Peak memory clock frequency in kilohertz */ - CU_DEVICE_ATTRIBUTE_GLOBAL_MEMORY_BUS_WIDTH = 37, /**< Global memory bus width in bits */ - CU_DEVICE_ATTRIBUTE_L2_CACHE_SIZE = 38, /**< Size of L2 cache in bytes */ - CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR = 39, /**< Maximum resident threads per multiprocessor */ - CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT = 40, /**< Number of asynchronous engines */ - CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING = 41, /**< Device shares a unified address space with the host */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_WIDTH = 42, /**< Maximum 1D layered texture width */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_LAYERS = 43, /**< Maximum layers in a 1D layered texture */ - CU_DEVICE_ATTRIBUTE_CAN_TEX2D_GATHER = 44, /**< Deprecated, do not use. */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_WIDTH = 45, /**< Maximum 2D texture width if CUDA_ARRAY3D_TEXTURE_GATHER is set */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_HEIGHT = 46, /**< Maximum 2D texture height if CUDA_ARRAY3D_TEXTURE_GATHER is set */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH_ALTERNATE = 47, /**< Alternate maximum 3D texture width */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT_ALTERNATE = 48,/**< Alternate maximum 3D texture height */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH_ALTERNATE = 49, /**< Alternate maximum 3D texture depth */ - CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID = 50, /**< PCI domain ID of the device */ - CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT = 51, /**< Pitch alignment requirement for textures */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_WIDTH = 52, /**< Maximum cubemap texture width/height */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_WIDTH = 53, /**< Maximum cubemap layered texture width/height */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_LAYERS = 54, /**< Maximum layers in a cubemap layered texture */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_WIDTH = 55, /**< Maximum 1D surface width */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_WIDTH = 56, /**< Maximum 2D surface width */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_HEIGHT = 57, /**< Maximum 2D surface height */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_WIDTH = 58, /**< Maximum 3D surface width */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_HEIGHT = 59, /**< Maximum 3D surface height */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_DEPTH = 60, /**< Maximum 3D surface depth */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_WIDTH = 61, /**< Maximum 1D layered surface width */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_LAYERS = 62, /**< Maximum layers in a 1D layered surface */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_WIDTH = 63, /**< Maximum 2D layered surface width */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_HEIGHT = 64, /**< Maximum 2D layered surface height */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_LAYERS = 65, /**< Maximum layers in a 2D layered surface */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_WIDTH = 66, /**< Maximum cubemap surface width */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_WIDTH = 67, /**< Maximum cubemap layered surface width */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_LAYERS = 68, /**< Maximum layers in a cubemap layered surface */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH = 69, /**< Maximum 1D linear texture width */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH = 70, /**< Maximum 2D linear texture width */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT = 71, /**< Maximum 2D linear texture height */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH = 72, /**< Maximum 2D linear texture pitch in bytes */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_WIDTH = 73, /**< Maximum mipmapped 2D texture width */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_HEIGHT = 74,/**< Maximum mipmapped 2D texture height */ - CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR = 75, /**< Major compute capability version number */ - CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR = 76, /**< Minor compute capability version number */ - CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH = 77, /**< Maximum mipmapped 1D texture width */ - CU_DEVICE_ATTRIBUTE_STREAM_PRIORITIES_SUPPORTED = 78, /**< Device supports stream priorities */ - CU_DEVICE_ATTRIBUTE_GLOBAL_L1_CACHE_SUPPORTED = 79, /**< Device supports caching globals in L1 */ - CU_DEVICE_ATTRIBUTE_LOCAL_L1_CACHE_SUPPORTED = 80, /**< Device supports caching locals in L1 */ - CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR = 81, /**< Maximum shared memory available per multiprocessor in bytes */ - CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR = 82, /**< Maximum number of 32-bit registers available per multiprocessor */ - CU_DEVICE_ATTRIBUTE_MANAGED_MEMORY = 83, /**< Device can allocate managed memory on this system */ - CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD = 84, /**< Device is on a multi-GPU board */ - CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD_GROUP_ID = 85, /**< Unique id for a group of devices on the same multi-GPU board */ - CU_DEVICE_ATTRIBUTE_HOST_NATIVE_ATOMIC_SUPPORTED = 86, /**< Link between the device and the host supports native atomic operations (this is a placeholder attribute, and is not supported on any current hardware)*/ - CU_DEVICE_ATTRIBUTE_SINGLE_TO_DOUBLE_PRECISION_PERF_RATIO = 87, /**< Ratio of single precision performance (in floating-point operations per second) to double precision performance */ - CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS = 88, /**< Device supports coherently accessing pageable memory without calling cudaHostRegister on it */ - CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS = 89, /**< Device can coherently access managed memory concurrently with the CPU */ - CU_DEVICE_ATTRIBUTE_COMPUTE_PREEMPTION_SUPPORTED = 90, /**< Device supports compute preemption. */ - CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM = 91, /**< Device can access host registered memory at the same virtual address as the CPU */ - CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_MEM_OPS = 92, /**< ::cuStreamBatchMemOp and related APIs are supported. */ - CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS = 93, /**< 64-bit operations are supported in ::cuStreamBatchMemOp and related APIs. */ - CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR = 94, /**< ::CU_STREAM_WAIT_VALUE_NOR is supported. */ - CU_DEVICE_ATTRIBUTE_COOPERATIVE_LAUNCH = 95, /**< Device supports launching cooperative kernels via ::cuLaunchCooperativeKernel */ - CU_DEVICE_ATTRIBUTE_COOPERATIVE_MULTI_DEVICE_LAUNCH = 96, /**< Device can participate in cooperative kernels launched via ::cuLaunchCooperativeKernelMultiDevice */ - CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN = 97, /**< Maximum optin shared memory per block */ - CU_DEVICE_ATTRIBUTE_CAN_FLUSH_REMOTE_WRITES = 98, /**< Both the ::CU_STREAM_WAIT_VALUE_FLUSH flag and the ::CU_STREAM_MEM_OP_FLUSH_REMOTE_WRITES MemOp are supported on the device. See \ref CUDA_MEMOP for additional details. */ - CU_DEVICE_ATTRIBUTE_HOST_REGISTER_SUPPORTED = 99, /**< Device supports host memory registration via ::cudaHostRegister. */ - CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES = 100, /**< Device accesses pageable memory via the host's page tables. */ - CU_DEVICE_ATTRIBUTE_DIRECT_MANAGED_MEM_ACCESS_FROM_HOST = 101, /**< The host can directly access managed memory on the device without migration. */ - CU_DEVICE_ATTRIBUTE_MAX - +typedef enum CUdevice_attribute_enum { + CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK = 1, /**< Maximum number of threads per block */ + CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X = 2, /**< Maximum block dimension X */ + CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y = 3, /**< Maximum block dimension Y */ + CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Z = 4, /**< Maximum block dimension Z */ + CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X = 5, /**< Maximum grid dimension X */ + CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Y = 6, /**< Maximum grid dimension Y */ + CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Z = 7, /**< Maximum grid dimension Z */ + CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK = 8, /**< Maximum shared memory available per block in bytes */ + CU_DEVICE_ATTRIBUTE_SHARED_MEMORY_PER_BLOCK = 8, /**< Deprecated, use CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK */ + CU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY = 9, /**< Memory available on device for __constant__ variables in a CUDA C kernel in bytes */ + CU_DEVICE_ATTRIBUTE_WARP_SIZE = 10, /**< Warp size in threads */ + CU_DEVICE_ATTRIBUTE_MAX_PITCH = 11, /**< Maximum pitch in bytes allowed by memory copies */ + CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK = 12, /**< Maximum number of 32-bit registers available per block */ + CU_DEVICE_ATTRIBUTE_REGISTERS_PER_BLOCK = 12, /**< Deprecated, use CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK */ + CU_DEVICE_ATTRIBUTE_CLOCK_RATE = 13, /**< Typical clock frequency in kilohertz */ + CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT = 14, /**< Alignment requirement for textures */ + CU_DEVICE_ATTRIBUTE_GPU_OVERLAP = 15, /**< Device can possibly copy memory and execute a kernel concurrently. Deprecated. Use instead CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT. */ + CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT = 16, /**< Number of multiprocessors on device */ + CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT = 17, /**< Specifies whether there is a run time limit on kernels */ + CU_DEVICE_ATTRIBUTE_INTEGRATED = 18, /**< Device is integrated with host memory */ + CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY = 19, /**< Device can map host memory into CUDA address space */ + CU_DEVICE_ATTRIBUTE_COMPUTE_MODE = 20, /**< Compute mode (See ::CUcomputemode for details) */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH = 21, /**< Maximum 1D texture width */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_WIDTH = 22, /**< Maximum 2D texture width */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_HEIGHT = 23, /**< Maximum 2D texture height */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH = 24, /**< Maximum 3D texture width */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT = 25, /**< Maximum 3D texture height */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH = 26, /**< Maximum 3D texture depth */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH = 27, /**< Maximum 2D layered texture width */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT = 28, /**< Maximum 2D layered texture height */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS = 29, /**< Maximum layers in a 2D layered texture */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_ARRAY_WIDTH = 27, /**< Deprecated, use CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_ARRAY_HEIGHT = 28, /**< Deprecated, use CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_ARRAY_NUMSLICES = 29, /**< Deprecated, use CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS */ + CU_DEVICE_ATTRIBUTE_SURFACE_ALIGNMENT = 30, /**< Alignment requirement for surfaces */ + CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS = 31, /**< Device can possibly execute multiple kernels concurrently */ + CU_DEVICE_ATTRIBUTE_ECC_ENABLED = 32, /**< Device has ECC support enabled */ + CU_DEVICE_ATTRIBUTE_PCI_BUS_ID = 33, /**< PCI bus ID of the device */ + CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID = 34, /**< PCI device ID of the device */ + CU_DEVICE_ATTRIBUTE_TCC_DRIVER = 35, /**< Device is using TCC driver model */ + CU_DEVICE_ATTRIBUTE_MEMORY_CLOCK_RATE = 36, /**< Peak memory clock frequency in kilohertz */ + CU_DEVICE_ATTRIBUTE_GLOBAL_MEMORY_BUS_WIDTH = 37, /**< Global memory bus width in bits */ + CU_DEVICE_ATTRIBUTE_L2_CACHE_SIZE = 38, /**< Size of L2 cache in bytes */ + CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR = 39, /**< Maximum resident threads per multiprocessor */ + CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT = 40, /**< Number of asynchronous engines */ + CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING = 41, /**< Device shares a unified address space with the host */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_WIDTH = 42, /**< Maximum 1D layered texture width */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_LAYERS = 43, /**< Maximum layers in a 1D layered texture */ + CU_DEVICE_ATTRIBUTE_CAN_TEX2D_GATHER = 44, /**< Deprecated, do not use. */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_WIDTH = 45, /**< Maximum 2D texture width if CUDA_ARRAY3D_TEXTURE_GATHER is set */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_HEIGHT = 46, /**< Maximum 2D texture height if CUDA_ARRAY3D_TEXTURE_GATHER is set */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH_ALTERNATE = 47, /**< Alternate maximum 3D texture width */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT_ALTERNATE = 48, /**< Alternate maximum 3D texture height */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH_ALTERNATE = 49, /**< Alternate maximum 3D texture depth */ + CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID = 50, /**< PCI domain ID of the device */ + CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT = 51, /**< Pitch alignment requirement for textures */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_WIDTH = 52, /**< Maximum cubemap texture width/height */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_WIDTH = 53, /**< Maximum cubemap layered texture width/height */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_LAYERS = 54, /**< Maximum layers in a cubemap layered texture */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_WIDTH = 55, /**< Maximum 1D surface width */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_WIDTH = 56, /**< Maximum 2D surface width */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_HEIGHT = 57, /**< Maximum 2D surface height */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_WIDTH = 58, /**< Maximum 3D surface width */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_HEIGHT = 59, /**< Maximum 3D surface height */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_DEPTH = 60, /**< Maximum 3D surface depth */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_WIDTH = 61, /**< Maximum 1D layered surface width */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_LAYERS = 62, /**< Maximum layers in a 1D layered surface */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_WIDTH = 63, /**< Maximum 2D layered surface width */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_HEIGHT = 64, /**< Maximum 2D layered surface height */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_LAYERS = 65, /**< Maximum layers in a 2D layered surface */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_WIDTH = 66, /**< Maximum cubemap surface width */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_WIDTH = 67, /**< Maximum cubemap layered surface width */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_LAYERS = 68, /**< Maximum layers in a cubemap layered surface */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH = 69, /**< Deprecated, do not use. Use cudaDeviceGetTexture1DLinearMaxWidth() or cuDeviceGetTexture1DLinearMaxWidth() instead. */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH = 70, /**< Maximum 2D linear texture width */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT = 71, /**< Maximum 2D linear texture height */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH = 72, /**< Maximum 2D linear texture pitch in bytes */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_WIDTH = 73, /**< Maximum mipmapped 2D texture width */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_HEIGHT = 74, /**< Maximum mipmapped 2D texture height */ + CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR = 75, /**< Major compute capability version number */ + CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR = 76, /**< Minor compute capability version number */ + CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH = 77, /**< Maximum mipmapped 1D texture width */ + CU_DEVICE_ATTRIBUTE_STREAM_PRIORITIES_SUPPORTED = 78, /**< Device supports stream priorities */ + CU_DEVICE_ATTRIBUTE_GLOBAL_L1_CACHE_SUPPORTED = 79, /**< Device supports caching globals in L1 */ + CU_DEVICE_ATTRIBUTE_LOCAL_L1_CACHE_SUPPORTED = 80, /**< Device supports caching locals in L1 */ + CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR = 81, /**< Maximum shared memory available per multiprocessor in bytes */ + CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR = 82, /**< Maximum number of 32-bit registers available per multiprocessor */ + CU_DEVICE_ATTRIBUTE_MANAGED_MEMORY = 83, /**< Device can allocate managed memory on this system */ + CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD = 84, /**< Device is on a multi-GPU board */ + CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD_GROUP_ID = 85, /**< Unique id for a group of devices on the same multi-GPU board */ + CU_DEVICE_ATTRIBUTE_HOST_NATIVE_ATOMIC_SUPPORTED = 86, /**< Link between the device and the host supports native atomic operations */ + CU_DEVICE_ATTRIBUTE_SINGLE_TO_DOUBLE_PRECISION_PERF_RATIO = 87, /**< Ratio of single precision performance (in floating-point operations per second) to double precision performance */ + CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS = 88, /**< Device supports coherently accessing pageable memory without calling cudaHostRegister on it */ + CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS = 89, /**< Device can coherently access managed memory concurrently with the CPU */ + CU_DEVICE_ATTRIBUTE_COMPUTE_PREEMPTION_SUPPORTED = 90, /**< Device supports compute preemption. */ + CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM = 91, /**< Device can access host registered memory at the same virtual address as the CPU */ + CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_MEM_OPS_V1 = 92, /**< Deprecated, along with v1 MemOps API, ::cuStreamBatchMemOp and related APIs are supported. */ + CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS_V1 = 93, /**< Deprecated, along with v1 MemOps API, 64-bit operations are supported in ::cuStreamBatchMemOp and related APIs. */ + CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR_V1 = 94, /**< Deprecated, along with v1 MemOps API, ::CU_STREAM_WAIT_VALUE_NOR is supported. */ + CU_DEVICE_ATTRIBUTE_COOPERATIVE_LAUNCH = 95, /**< Device supports launching cooperative kernels via ::cuLaunchCooperativeKernel */ + CU_DEVICE_ATTRIBUTE_COOPERATIVE_MULTI_DEVICE_LAUNCH = 96, /**< Deprecated, ::cuLaunchCooperativeKernelMultiDevice is deprecated. */ + CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN = 97, /**< Maximum optin shared memory per block */ + CU_DEVICE_ATTRIBUTE_CAN_FLUSH_REMOTE_WRITES = 98, /**< The ::CU_STREAM_WAIT_VALUE_FLUSH flag and the ::CU_STREAM_MEM_OP_FLUSH_REMOTE_WRITES MemOp are supported on the device. See \ref CUDA_MEMOP for additional details. */ + CU_DEVICE_ATTRIBUTE_HOST_REGISTER_SUPPORTED = 99, /**< Device supports host memory registration via ::cudaHostRegister. */ + CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES = 100, /**< Device accesses pageable memory via the host's page tables. */ + CU_DEVICE_ATTRIBUTE_DIRECT_MANAGED_MEM_ACCESS_FROM_HOST = 101, /**< The host can directly access managed memory on the device without migration. */ + CU_DEVICE_ATTRIBUTE_VIRTUAL_ADDRESS_MANAGEMENT_SUPPORTED = 102, /**< Deprecated, Use CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED*/ + CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED = 102, /**< Device supports virtual memory management APIs like ::cuMemAddressReserve, ::cuMemCreate, ::cuMemMap and related APIs */ + CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR_SUPPORTED = 103, /**< Device supports exporting memory to a posix file descriptor with ::cuMemExportToShareableHandle, if requested via ::cuMemCreate */ + CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_HANDLE_SUPPORTED = 104, /**< Device supports exporting memory to a Win32 NT handle with ::cuMemExportToShareableHandle, if requested via ::cuMemCreate */ + CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_KMT_HANDLE_SUPPORTED = 105, /**< Device supports exporting memory to a Win32 KMT handle with ::cuMemExportToShareableHandle, if requested via ::cuMemCreate */ + CU_DEVICE_ATTRIBUTE_MAX_BLOCKS_PER_MULTIPROCESSOR = 106, /**< Maximum number of blocks per multiprocessor */ + CU_DEVICE_ATTRIBUTE_GENERIC_COMPRESSION_SUPPORTED = 107, /**< Device supports compression of memory */ + CU_DEVICE_ATTRIBUTE_MAX_PERSISTING_L2_CACHE_SIZE = 108, /**< Maximum L2 persisting lines capacity setting in bytes. */ + CU_DEVICE_ATTRIBUTE_MAX_ACCESS_POLICY_WINDOW_SIZE = 109, /**< Maximum value of CUaccessPolicyWindow::num_bytes. */ + CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WITH_CUDA_VMM_SUPPORTED = 110, /**< Device supports specifying the GPUDirect RDMA flag with ::cuMemCreate */ + CU_DEVICE_ATTRIBUTE_RESERVED_SHARED_MEMORY_PER_BLOCK = 111, /**< Shared memory reserved by CUDA driver per block in bytes */ + CU_DEVICE_ATTRIBUTE_SPARSE_CUDA_ARRAY_SUPPORTED = 112, /**< Device supports sparse CUDA arrays and sparse CUDA mipmapped arrays */ + CU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED = 113, /**< Device supports using the ::cuMemHostRegister flag ::CU_MEMHOSTERGISTER_READ_ONLY to register memory that must be mapped as read-only to the GPU */ + CU_DEVICE_ATTRIBUTE_TIMELINE_SEMAPHORE_INTEROP_SUPPORTED = 114, /**< External timeline semaphore interop is supported on the device */ + CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED = 115, /**< Device supports using the ::cuMemAllocAsync and ::cuMemPool family of APIs */ + CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_SUPPORTED = 116, /**< Device supports GPUDirect RDMA APIs, like nvidia_p2p_get_pages (see https://docs.nvidia.com/cuda/gpudirect-rdma for more information) */ + CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_FLUSH_WRITES_OPTIONS = 117, /**< The returned attribute shall be interpreted as a bitmask, where the individual bits are described by the ::CUflushGPUDirectRDMAWritesOptions enum */ + CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WRITES_ORDERING = 118, /**< GPUDirect RDMA writes to the device do not need to be flushed for consumers within the scope indicated by the returned attribute. See ::CUGPUDirectRDMAWritesOrdering for the numerical values returned here. */ + CU_DEVICE_ATTRIBUTE_MEMPOOL_SUPPORTED_HANDLE_TYPES = 119, /**< Handle types supported with mempool based IPC */ + CU_DEVICE_ATTRIBUTE_CLUSTER_LAUNCH = 120, /**< Indicates device supports cluster launch */ + CU_DEVICE_ATTRIBUTE_DEFERRED_MAPPING_CUDA_ARRAY_SUPPORTED = 121, /**< Device supports deferred mapping CUDA arrays and CUDA mipmapped arrays */ + CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS = 122, /**< 64-bit operations are supported in ::cuStreamBatchMemOp and related MemOp APIs. */ + CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR = 123, /**< ::CU_STREAM_WAIT_VALUE_NOR is supported by MemOp APIs. */ + CU_DEVICE_ATTRIBUTE_DMA_BUF_SUPPORTED = 124, /**< Device supports buffer sharing with dma_buf mechanism. */ + CU_DEVICE_ATTRIBUTE_IPC_EVENT_SUPPORTED = 125, /**< Device supports IPC Events. */ + CU_DEVICE_ATTRIBUTE_MEM_SYNC_DOMAIN_COUNT = 126, /**< Number of memory domains the device supports. */ + CU_DEVICE_ATTRIBUTE_TENSOR_MAP_ACCESS_SUPPORTED = 127, /**< Device supports accessing memory using Tensor Map. */ + CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_FABRIC_SUPPORTED = 128, /**< Device supports exporting memory to a fabric handle with cuMemExportToShareableHandle() or requested with cuMemCreate() */ + CU_DEVICE_ATTRIBUTE_UNIFIED_FUNCTION_POINTERS = 129, /**< Device supports unified function pointers. */ + CU_DEVICE_ATTRIBUTE_NUMA_CONFIG = 130, /**< NUMA configuration of a device: value is of type ::CUdeviceNumaConfig enum */ + CU_DEVICE_ATTRIBUTE_NUMA_ID = 131, /**< NUMA node ID of the GPU memory */ + CU_DEVICE_ATTRIBUTE_MULTICAST_SUPPORTED = 132, /**< Device supports switch multicast and reduction operations. */ + CU_DEVICE_ATTRIBUTE_MPS_ENABLED = 133, /**< Indicates if contexts created on this device will be shared via MPS */ + CU_DEVICE_ATTRIBUTE_HOST_NUMA_ID = 134, /**< NUMA ID of the host node closest to the device. Returns -1 when system does not support NUMA. */ + CU_DEVICE_ATTRIBUTE_D3D12_CIG_SUPPORTED = 135, /**< Device supports CIG with D3D12. */ + CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_ALGORITHM_MASK = 136, /**< The returned valued shall be interpreted as a bitmask, where the individual bits are described by the ::CUmemDecompressAlgorithm enum. */ + CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_MAXIMUM_LENGTH = 137, /**< The returned valued is the maximum length in bytes of a single decompress operation that is allowed. */ + CU_DEVICE_ATTRIBUTE_VULKAN_CIG_SUPPORTED = 138, /**< Device supports CIG with Vulkan. */ + CU_DEVICE_ATTRIBUTE_GPU_PCI_DEVICE_ID = 139, /**< The combined 16-bit PCI device ID and 16-bit PCI vendor ID. */ + CU_DEVICE_ATTRIBUTE_GPU_PCI_SUBSYSTEM_ID = 140, /**< The combined 16-bit PCI subsystem ID and 16-bit PCI subsystem vendor ID. */ + CU_DEVICE_ATTRIBUTE_HOST_NUMA_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED = 141, /**< Device supports HOST_NUMA location with the virtual memory management APIs like ::cuMemCreate, ::cuMemMap and related APIs */ + CU_DEVICE_ATTRIBUTE_HOST_NUMA_MEMORY_POOLS_SUPPORTED = 142, /**< Device supports HOST_NUMA location with the ::cuMemAllocAsync and ::cuMemPool family of APIs */ + CU_DEVICE_ATTRIBUTE_HOST_NUMA_MULTINODE_IPC_SUPPORTED = 143, /**< Device supports HOST_NUMA location IPC between nodes in a multi-node system. */ + CU_DEVICE_ATTRIBUTE_MAX } CUdevice_attribute; + /** * Function cache configurations */ @@ -850,81 +892,148 @@ typedef enum CUsharedconfig_enum /** * Function properties */ -typedef enum CUfunction_attribute_enum -{ - /** - * The maximum number of threads per block, beyond which a launch of the - * function would fail. This number depends on both the function and the - * device on which the function is currently loaded. - */ - CU_FUNC_ATTRIBUTE_MAX_THREADS_PER_BLOCK = 0, +typedef enum CUfunction_attribute_enum { + /** + * The maximum number of threads per block, beyond which a launch of the + * function would fail. This number depends on both the function and the + * device on which the function is currently loaded. + */ + CU_FUNC_ATTRIBUTE_MAX_THREADS_PER_BLOCK = 0, - /** - * The size in bytes of statically-allocated shared memory required by - * this function. This does not include dynamically-allocated shared - * memory requested by the user at runtime. - */ - CU_FUNC_ATTRIBUTE_SHARED_SIZE_BYTES = 1, + /** + * The size in bytes of statically-allocated shared memory required by + * this function. This does not include dynamically-allocated shared + * memory requested by the user at runtime. + */ + CU_FUNC_ATTRIBUTE_SHARED_SIZE_BYTES = 1, - /** - * The size in bytes of user-allocated constant memory required by this - * function. - */ - CU_FUNC_ATTRIBUTE_CONST_SIZE_BYTES = 2, + /** + * The size in bytes of user-allocated constant memory required by this + * function. + */ + CU_FUNC_ATTRIBUTE_CONST_SIZE_BYTES = 2, - /** - * The size in bytes of local memory used by each thread of this function. - */ - CU_FUNC_ATTRIBUTE_LOCAL_SIZE_BYTES = 3, + /** + * The size in bytes of local memory used by each thread of this function. + */ + CU_FUNC_ATTRIBUTE_LOCAL_SIZE_BYTES = 3, - /** - * The number of registers used by each thread of this function. - */ - CU_FUNC_ATTRIBUTE_NUM_REGS = 4, + /** + * The number of registers used by each thread of this function. + */ + CU_FUNC_ATTRIBUTE_NUM_REGS = 4, - /** - * The PTX virtual architecture version for which the function was - * compiled. This value is the major PTX version * 10 + the minor PTX - * version, so a PTX version 1.3 function would return the value 13. - * Note that this may return the undefined value of 0 for cubins - * compiled prior to CUDA 3.0. - */ - CU_FUNC_ATTRIBUTE_PTX_VERSION = 5, + /** + * The PTX virtual architecture version for which the function was + * compiled. This value is the major PTX version * 10 + the minor PTX + * version, so a PTX version 1.3 function would return the value 13. + * Note that this may return the undefined value of 0 for cubins + * compiled prior to CUDA 3.0. + */ + CU_FUNC_ATTRIBUTE_PTX_VERSION = 5, - /** - * The binary architecture version for which the function was compiled. - * This value is the major binary version * 10 + the minor binary version, - * so a binary version 1.3 function would return the value 13. Note that - * this will return a value of 10 for legacy cubins that do not have a - * properly-encoded binary architecture version. - */ - CU_FUNC_ATTRIBUTE_BINARY_VERSION = 6, + /** + * The binary architecture version for which the function was compiled. + * This value is the major binary version * 10 + the minor binary version, + * so a binary version 1.3 function would return the value 13. Note that + * this will return a value of 10 for legacy cubins that do not have a + * properly-encoded binary architecture version. + */ + CU_FUNC_ATTRIBUTE_BINARY_VERSION = 6, - /** - * The attribute to indicate whether the function has been compiled with - * user specified option "-Xptxas --dlcm=ca" set . - */ - CU_FUNC_ATTRIBUTE_CACHE_MODE_CA = 7, + /** + * The attribute to indicate whether the function has been compiled with + * user specified option "-Xptxas --dlcm=ca" set . + */ + CU_FUNC_ATTRIBUTE_CACHE_MODE_CA = 7, - /** - * The maximum size in bytes of dynamically-allocated shared memory that can be used by - * this function. If the user-specified dynamic shared memory size is larger than this - * value, the launch will fail. - * See ::cuFuncSetAttribute - */ - CU_FUNC_ATTRIBUTE_MAX_DYNAMIC_SHARED_SIZE_BYTES = 8, + /** + * The maximum size in bytes of dynamically-allocated shared memory that can be used by + * this function. If the user-specified dynamic shared memory size is larger than this + * value, the launch will fail. + * See ::cuFuncSetAttribute, ::cuKernelSetAttribute + */ + CU_FUNC_ATTRIBUTE_MAX_DYNAMIC_SHARED_SIZE_BYTES = 8, - /** - * On devices where the L1 cache and shared memory use the same hardware resources, - * this sets the shared memory carveout preference, in percent of the total shared memory. - * Refer to ::CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR. - * This is only a hint, and the driver can choose a different ratio if required to execute the function. - * See ::cuFuncSetAttribute - */ - CU_FUNC_ATTRIBUTE_PREFERRED_SHARED_MEMORY_CARVEOUT = 9, + /** + * On devices where the L1 cache and shared memory use the same hardware resources, + * this sets the shared memory carveout preference, in percent of the total shared memory. + * Refer to ::CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR. + * This is only a hint, and the driver can choose a different ratio if required to execute the function. + * See ::cuFuncSetAttribute, ::cuKernelSetAttribute + */ + CU_FUNC_ATTRIBUTE_PREFERRED_SHARED_MEMORY_CARVEOUT = 9, - CU_FUNC_ATTRIBUTE_MAX + /** + * If this attribute is set, the kernel must launch with a valid cluster + * size specified. + * See ::cuFuncSetAttribute, ::cuKernelSetAttribute + */ + CU_FUNC_ATTRIBUTE_CLUSTER_SIZE_MUST_BE_SET = 10, + /** + * The required cluster width in blocks. The values must either all be 0 or + * all be positive. The validity of the cluster dimensions is otherwise + * checked at launch time. + * + * If the value is set during compile time, it cannot be set at runtime. + * Setting it at runtime will return CUDA_ERROR_NOT_PERMITTED. + * See ::cuFuncSetAttribute, ::cuKernelSetAttribute + */ + CU_FUNC_ATTRIBUTE_REQUIRED_CLUSTER_WIDTH = 11, + + /** + * The required cluster height in blocks. The values must either all be 0 or + * all be positive. The validity of the cluster dimensions is otherwise + * checked at launch time. + * + * If the value is set during compile time, it cannot be set at runtime. + * Setting it at runtime should return CUDA_ERROR_NOT_PERMITTED. + * See ::cuFuncSetAttribute, ::cuKernelSetAttribute + */ + CU_FUNC_ATTRIBUTE_REQUIRED_CLUSTER_HEIGHT = 12, + + /** + * The required cluster depth in blocks. The values must either all be 0 or + * all be positive. The validity of the cluster dimensions is otherwise + * checked at launch time. + * + * If the value is set during compile time, it cannot be set at runtime. + * Setting it at runtime should return CUDA_ERROR_NOT_PERMITTED. + * See ::cuFuncSetAttribute, ::cuKernelSetAttribute + */ + CU_FUNC_ATTRIBUTE_REQUIRED_CLUSTER_DEPTH = 13, + + /** + * Whether the function can be launched with non-portable cluster size. 1 is + * allowed, 0 is disallowed. A non-portable cluster size may only function + * on the specific SKUs the program is tested on. The launch might fail if + * the program is run on a different hardware platform. + * + * CUDA API provides cudaOccupancyMaxActiveClusters to assist with checking + * whether the desired size can be launched on the current device. + * + * Portable Cluster Size + * + * A portable cluster size is guaranteed to be functional on all compute + * capabilities higher than the target compute capability. The portable + * cluster size for sm_90 is 8 blocks per cluster. This value may increase + * for future compute capabilities. + * + * The specific hardware unit may support higher cluster sizes that’s not + * guaranteed to be portable. + * See ::cuFuncSetAttribute, ::cuKernelSetAttribute + */ + CU_FUNC_ATTRIBUTE_NON_PORTABLE_CLUSTER_SIZE_ALLOWED = 14, + + /** + * The block scheduling policy of a function. The value type is + * CUclusterSchedulingPolicy / cudaClusterSchedulingPolicy. + * See ::cuFuncSetAttribute, ::cuKernelSetAttribute + */ + CU_FUNC_ATTRIBUTE_CLUSTER_SCHEDULING_POLICY_PREFERENCE = 15, + + CU_FUNC_ATTRIBUTE_MAX } CUfunction_attribute; /** @@ -1069,6 +1178,7 @@ typedef CUresult (CUDA_API_CALL *CUDA_CULINKCREATE) (unsigned int, C typedef CUresult (CUDA_API_CALL *CUDA_CULINKADDDATA) (CUlinkState, CUjitInputType, void *, size_t, const char *, unsigned int, CUjit_option *, void **); typedef CUresult (CUDA_API_CALL *CUDA_CULINKDESTROY) (CUlinkState); typedef CUresult (CUDA_API_CALL *CUDA_CULINKCOMPLETE) (CUlinkState, void **, size_t *); +typedef CUresult (CUDA_API_CALL *CUDA_CUOCCUPANCYMAXBLOCKSPERMULTIPROCESSOR) (int *, CUfunction, int, size_t); typedef struct hc_cuda_lib { @@ -1131,6 +1241,7 @@ typedef struct hc_cuda_lib CUDA_CULINKADDDATA cuLinkAddData; CUDA_CULINKDESTROY cuLinkDestroy; CUDA_CULINKCOMPLETE cuLinkComplete; + CUDA_CUOCCUPANCYMAXBLOCKSPERMULTIPROCESSOR cuOccupancyMaxActiveBlocksPerMultiprocessor; } hc_cuda_lib_t; @@ -1181,5 +1292,6 @@ int hc_cuLinkCreate (void *hashcat_ctx, unsigned int numOptions, CUji int hc_cuLinkAddData (void *hashcat_ctx, CUlinkState state, CUjitInputType type, void *data, size_t size, const char *name, unsigned int numOptions, CUjit_option *options, void **optionValues); int hc_cuLinkDestroy (void *hashcat_ctx, CUlinkState state); int hc_cuLinkComplete (void *hashcat_ctx, CUlinkState state, void **cubinOut, size_t *sizeOut); +int hc_cuOccupancyMaxActiveBlocksPerMultiprocessor (void *hashcat_ctx, int *numBlocks, CUfunction func, int blockSize, size_t dynamicSMemSize); #endif // HC_EXT_CUDA_H diff --git a/include/ext_hip.h b/include/ext_hip.h index b9dfcb4c8..4cc6fb797 100644 --- a/include/ext_hip.h +++ b/include/ext_hip.h @@ -15,16 +15,16 @@ typedef void* hipDeviceptr_t; typedef enum hipFunction_attribute { - HIP_FUNC_ATTRIBUTE_MAX_THREADS_PER_BLOCK, - HIP_FUNC_ATTRIBUTE_SHARED_SIZE_BYTES, - HIP_FUNC_ATTRIBUTE_CONST_SIZE_BYTES, - HIP_FUNC_ATTRIBUTE_LOCAL_SIZE_BYTES, - HIP_FUNC_ATTRIBUTE_NUM_REGS, - HIP_FUNC_ATTRIBUTE_PTX_VERSION, - HIP_FUNC_ATTRIBUTE_BINARY_VERSION, - HIP_FUNC_ATTRIBUTE_CACHE_MODE_CA, - HIP_FUNC_ATTRIBUTE_MAX_DYNAMIC_SHARED_SIZE_BYTES, - HIP_FUNC_ATTRIBUTE_PREFERRED_SHARED_MEMORY_CARVEOUT, + HIP_FUNC_ATTRIBUTE_MAX_THREADS_PER_BLOCK, ///< The maximum number of threads per block. Depends on function and device. + HIP_FUNC_ATTRIBUTE_SHARED_SIZE_BYTES, ///< The statically allocated shared memory size in bytes per block required by the function. + HIP_FUNC_ATTRIBUTE_CONST_SIZE_BYTES, ///< The user-allocated constant memory by the function in bytes. + HIP_FUNC_ATTRIBUTE_LOCAL_SIZE_BYTES, ///< The local memory usage of each thread by this function in bytes. + HIP_FUNC_ATTRIBUTE_NUM_REGS, ///< The number of registers used by each thread of this function. + HIP_FUNC_ATTRIBUTE_PTX_VERSION, ///< PTX version + HIP_FUNC_ATTRIBUTE_BINARY_VERSION, ///< Binary version + HIP_FUNC_ATTRIBUTE_CACHE_MODE_CA, ///< Cache mode + HIP_FUNC_ATTRIBUTE_MAX_DYNAMIC_SHARED_SIZE_BYTES, ///< The maximum dynamic shared memory per block for this function in bytes. + HIP_FUNC_ATTRIBUTE_PREFERRED_SHARED_MEMORY_CARVEOUT, ///< The shared memory carveout preference in percent of the maximum shared memory. HIP_FUNC_ATTRIBUTE_MAX } hipFunction_attribute; @@ -602,6 +602,7 @@ typedef hipError_t (HIP_API_CALL *HIP_HIPSTREAMCREATE) (hipStream_t *, typedef hipError_t (HIP_API_CALL *HIP_HIPSTREAMDESTROY) (hipStream_t); typedef hipError_t (HIP_API_CALL *HIP_HIPSTREAMSYNCHRONIZE) (hipStream_t); typedef hipError_t (HIP_API_CALL *HIP_HIPGETDEVICEPROPERTIES) (hipDeviceProp_t *, hipDevice_t); +typedef hipError_t (HIP_API_CALL *HIP_HIPMODULEOCCUPANCYMAXACTIVEBLOCKSPERMULTIPROCESSOR) (int *, hipFunction_t, int, size_t); typedef struct hc_hip_lib { @@ -646,6 +647,7 @@ typedef struct hc_hip_lib HIP_HIPSTREAMDESTROY hipStreamDestroy; HIP_HIPSTREAMSYNCHRONIZE hipStreamSynchronize; HIP_HIPGETDEVICEPROPERTIES hipGetDeviceProperties; + HIP_HIPMODULEOCCUPANCYMAXACTIVEBLOCKSPERMULTIPROCESSOR hipModuleOccupancyMaxActiveBlocksPerMultiprocessor; } hc_hip_lib_t; @@ -692,5 +694,6 @@ int hc_hipStreamCreate (void *hashcat_ctx, hipStream_t *phStream, unsign int hc_hipStreamDestroy (void *hashcat_ctx, hipStream_t hStream); int hc_hipStreamSynchronize (void *hashcat_ctx, hipStream_t hStream); int hc_hipGetDeviceProperties (void *hashcat_ctx, hipDeviceProp_t *prop, hipDevice_t dev); +int hc_hipModuleOccupancyMaxActiveBlocksPerMultiprocessor (void *hashcat_ctx, int *numBlocks, hipFunction_t f, int blockSize, size_t dynSharedMemPerBlk); #endif // HC_EXT_HIP_H diff --git a/include/shared.h b/include/shared.h index 2c7f801f6..013cb1157 100644 --- a/include/shared.h +++ b/include/shared.h @@ -120,4 +120,6 @@ bool remove_file_suffix (char *file, const char *suffix); int suppress_stderr (void); void restore_stderr (int saved_fd); +bool get_free_memory (u64 *free_mem); + #endif // HC_SHARED_H diff --git a/include/types.h b/include/types.h index da6f12c62..a9ef1f229 100644 --- a/include/types.h +++ b/include/types.h @@ -1236,6 +1236,8 @@ typedef struct hc_device_param int sm_major; int sm_minor; char *gcnArchName; + int regsPerBlock; + int regsPerMultiprocessor; u32 kernel_exec_timeout; u32 kernel_preferred_wgs_multiple; diff --git a/src/autotune.c b/src/autotune.c index 754b4827a..ca62bc957 100644 --- a/src/autotune.c +++ b/src/autotune.c @@ -10,6 +10,29 @@ #include "status.h" #include "autotune.h" +int find_tuning_function (hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED hc_device_param_t *device_param) +{ + hashconfig_t *hashconfig = hashcat_ctx->hashconfig; + + if (hashconfig->attack_exec == ATTACK_EXEC_INSIDE_KERNEL) + { + if (hashconfig->opti_type & OPTI_TYPE_OPTIMIZED_KERNEL) + { + return KERN_RUN_1; + } + else + { + return KERN_RUN_4; + } + } + else + { + return KERN_RUN_2; + } + + return -1; +} + static double try_run (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, const u32 kernel_accel, const u32 kernel_loops, const u32 kernel_threads) { hashconfig_t *hashconfig = hashcat_ctx->hashconfig; @@ -43,21 +66,9 @@ static double try_run (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_par device_param->spin_damp = 0; - if (hashconfig->attack_exec == ATTACK_EXEC_INSIDE_KERNEL) - { - if (hashconfig->opti_type & OPTI_TYPE_OPTIMIZED_KERNEL) - { - run_kernel (hashcat_ctx, device_param, KERN_RUN_1, 0, kernel_power_try, true, 0, true); - } - else - { - run_kernel (hashcat_ctx, device_param, KERN_RUN_4, 0, kernel_power_try, true, 0, true); - } - } - else - { - run_kernel (hashcat_ctx, device_param, KERN_RUN_2, 0, kernel_power_try, true, 0, true); - } + const u32 kern_run = find_tuning_function (hashcat_ctx, device_param); + + run_kernel (hashcat_ctx, device_param, kern_run, 0, kernel_power_try, true, 0, true); device_param->spin_damp = spin_damp_sav; @@ -84,6 +95,7 @@ static double try_run_times (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *devi return exec_msec_best; } +/* static u32 previous_power_of_two (const u32 x) { // https://stackoverflow.com/questions/2679815/previous-power-of-2 @@ -101,6 +113,7 @@ static u32 previous_power_of_two (const u32 x) return r - (r >> 1); } +*/ static int autotune (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param) { @@ -120,6 +133,16 @@ static int autotune (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param const u32 kernel_threads_min = device_param->kernel_threads_min; const u32 kernel_threads_max = device_param->kernel_threads_max; + /* + printf ("starting autotune with: %d %d %d %d %d %d\n", + kernel_accel_min, + kernel_accel_max, + kernel_loops_min, + kernel_loops_max, + kernel_threads_min, + kernel_threads_max); + */ + // stores the minimum values // they could be used if the autotune fails and user specify --force @@ -136,11 +159,13 @@ static int autotune (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param u32 kernel_accel = kernel_accel_min; u32 kernel_loops = kernel_loops_min; + u32 kernel_threads = kernel_threads_min; // for the threads we take as initial value what we receive from the runtime // but is only to start with something, we will fine tune this value as soon as we have our workload specified // this thread limiting is also performed inside run_kernel() so we need to redo it here, too + /* u32 kernel_wgs = 0; if (hashconfig->attack_exec == ATTACK_EXEC_INSIDE_KERNEL) @@ -168,18 +193,20 @@ static int autotune (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param // having a value power of 2 makes it easier to divide + const u32 kernel_threads_p2 = previous_power_of_two (kernel_threads); if ((kernel_threads_p2 >= kernel_threads_min) && (kernel_threads_p2 <= kernel_threads_max)) { kernel_threads = kernel_threads_p2; } + */ // in this case the user specified a fixed -n and -u on the commandline // no way to tune anything // but we need to run a few caching rounds - if ((kernel_accel_min == kernel_accel_max) && (kernel_loops_min == kernel_loops_max)) + if ((kernel_threads_min == kernel_threads_max) && (kernel_accel_min == kernel_accel_max) && (kernel_loops_min == kernel_loops_max)) { #if defined (DEBUG) @@ -323,13 +350,38 @@ static int autotune (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param for (u32 kernel_loops_test = kernel_loops_min; kernel_loops_test <= kernel_loops_max; kernel_loops_test <<= 1) { - double exec_msec = try_run (hashcat_ctx, device_param, kernel_accel_min, kernel_loops_test, kernel_threads); + double exec_msec = try_run_times (hashcat_ctx, device_param, kernel_accel_min, kernel_loops_test, kernel_threads_min, 2); + //printf ("loop %f %u %u %u\n", exec_msec, kernel_accel_min, kernel_loops_test, kernel_threads_min); if (exec_msec > target_msec) break; + if (kernel_loops >= 32) + { + // we want a little room for threads to play with so not full target_msec + + if (exec_msec > target_msec / 8) break; + } + kernel_loops = kernel_loops_test; } + for (u32 kernel_threads_test = kernel_threads_min; kernel_threads_test <= kernel_threads_max; kernel_threads_test <<= 1) + { + double exec_msec = try_run_times (hashcat_ctx, device_param, kernel_accel_min, kernel_loops, kernel_threads_test, 2); + + //printf ("threads %f %u %u %u\n", exec_msec, kernel_accel_min, kernel_loops, kernel_threads_test); + if (exec_msec > target_msec) break; + + if (kernel_threads >= 32) + { + // we want a little room for accel to play with so not full target_msec + + if (exec_msec > target_msec / 8) break; + } + + kernel_threads = kernel_threads_test; + } + #define STEPS_CNT 12 // now we tune for kernel-accel but with the new kernel-loops from previous loop set @@ -338,18 +390,30 @@ static int autotune (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param { for (int i = 0; i < STEPS_CNT; i++) { - const u32 kernel_accel_try = kernel_accel * 2; + const u32 kernel_accel_try = kernel_accel; if (kernel_accel_try < kernel_accel_min) continue; if (kernel_accel_try > kernel_accel_max) break; - double exec_msec = try_run_times (hashcat_ctx, device_param, kernel_accel_try, kernel_loops, kernel_threads, 3); + double exec_msec = try_run_times (hashcat_ctx, device_param, kernel_accel_try, kernel_loops, kernel_threads, 2); + //printf ("accel %f %u %u %u\n", exec_msec, kernel_accel_try, kernel_loops, kernel_threads); if (exec_msec > target_msec) break; - kernel_accel = kernel_accel_try; + float multi = target_msec / exec_msec; + + // we cap that multiplier, because on low accel numbers we do not run into spilling + multi = (multi > 4) ? 4 : multi; + + kernel_accel = (float) kernel_accel_try * multi; + + if (kernel_accel == kernel_accel_try) break; // too close } + + if (kernel_accel > kernel_accel_max) kernel_accel = kernel_accel_max; } + + if (kernel_accel > 64) kernel_accel -= kernel_accel % 32; } // reset them fake words @@ -429,6 +493,8 @@ static int autotune (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param device_param->kernel_power = kernel_power; + //printf ("Final: %d %d %d %d %d\n", kernel_accel, kernel_loops, kernel_threads, hardware_power, kernel_power); + return 0; } diff --git a/src/backend.c b/src/backend.c index f3f64f4d0..a71bac223 100644 --- a/src/backend.c +++ b/src/backend.c @@ -25,6 +25,7 @@ #include "backend.h" #include "terminal.h" #include "hwmon.h" +#include "autotune.h" #if defined (__linux__) static const char *const dri_card0_path = "/dev/dri/card0"; @@ -97,6 +98,192 @@ static bool is_same_device (const hc_device_param_t *src, const hc_device_param_ return true; } +static const int kern_run_cnt = 15; + +static const int kern_run_all[] = +{ + KERN_RUN_1, + KERN_RUN_12, + KERN_RUN_2P, + KERN_RUN_2, + KERN_RUN_2E, + KERN_RUN_23, + KERN_RUN_3, + KERN_RUN_4, + KERN_RUN_INIT2, + KERN_RUN_LOOP2P, + KERN_RUN_LOOP2, + KERN_RUN_AUX1, + KERN_RUN_AUX2, + KERN_RUN_AUX3, + KERN_RUN_AUX4, +}; + +static cl_kernel opencl_kernel_with_id (hc_device_param_t *device_param, const int kern_run) +{ + switch (kern_run) + { + case KERN_RUN_1: return device_param->opencl_kernel1; break; + case KERN_RUN_12: return device_param->opencl_kernel12; break; + case KERN_RUN_2P: return device_param->opencl_kernel2p; break; + case KERN_RUN_2: return device_param->opencl_kernel2; break; + case KERN_RUN_2E: return device_param->opencl_kernel2e; break; + case KERN_RUN_23: return device_param->opencl_kernel23; break; + case KERN_RUN_3: return device_param->opencl_kernel3; break; + case KERN_RUN_4: return device_param->opencl_kernel4; break; + case KERN_RUN_INIT2: return device_param->opencl_kernel_init2; break; + case KERN_RUN_LOOP2P: return device_param->opencl_kernel_loop2p; break; + case KERN_RUN_LOOP2: return device_param->opencl_kernel_loop2; break; + case KERN_RUN_AUX1: return device_param->opencl_kernel_aux1; break; + case KERN_RUN_AUX2: return device_param->opencl_kernel_aux1; break; + case KERN_RUN_AUX3: return device_param->opencl_kernel_aux1; break; + case KERN_RUN_AUX4: return device_param->opencl_kernel_aux1; break; + } + + return NULL; +} + +static hipFunction_t hip_function_with_id (hc_device_param_t *device_param, const int kern_run) +{ + switch (kern_run) + { + case KERN_RUN_1: return device_param->hip_function1; break; + case KERN_RUN_12: return device_param->hip_function12; break; + case KERN_RUN_2P: return device_param->hip_function2p; break; + case KERN_RUN_2: return device_param->hip_function2; break; + case KERN_RUN_2E: return device_param->hip_function2e; break; + case KERN_RUN_23: return device_param->hip_function23; break; + case KERN_RUN_3: return device_param->hip_function3; break; + case KERN_RUN_4: return device_param->hip_function4; break; + case KERN_RUN_INIT2: return device_param->hip_function_init2; break; + case KERN_RUN_LOOP2P: return device_param->hip_function_loop2p; break; + case KERN_RUN_LOOP2: return device_param->hip_function_loop2; break; + case KERN_RUN_AUX1: return device_param->hip_function_aux1; break; + case KERN_RUN_AUX2: return device_param->hip_function_aux2; break; + case KERN_RUN_AUX3: return device_param->hip_function_aux3; break; + case KERN_RUN_AUX4: return device_param->hip_function_aux4; break; + } + + return NULL; +} + +static CUfunction cuda_function_with_id (hc_device_param_t *device_param, const int kern_run) +{ + switch (kern_run) + { + case KERN_RUN_1: return device_param->cuda_function1; break; + case KERN_RUN_12: return device_param->cuda_function12; break; + case KERN_RUN_2P: return device_param->cuda_function2p; break; + case KERN_RUN_2: return device_param->cuda_function2; break; + case KERN_RUN_2E: return device_param->cuda_function2e; break; + case KERN_RUN_23: return device_param->cuda_function23; break; + case KERN_RUN_3: return device_param->cuda_function3; break; + case KERN_RUN_4: return device_param->cuda_function4; break; + case KERN_RUN_INIT2: return device_param->cuda_function_init2; break; + case KERN_RUN_LOOP2P: return device_param->cuda_function_loop2p; break; + case KERN_RUN_LOOP2: return device_param->cuda_function_loop2; break; + case KERN_RUN_AUX1: return device_param->cuda_function_aux1; break; + case KERN_RUN_AUX2: return device_param->cuda_function_aux2; break; + case KERN_RUN_AUX3: return device_param->cuda_function_aux3; break; + case KERN_RUN_AUX4: return device_param->cuda_function_aux4; break; + } + + return NULL; +} + +int opencl_query_threads_per_block (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, cl_kernel kernel) +{ + size_t threads_per_block = 0; + + if (hc_clGetKernelWorkGroupInfo (hashcat_ctx, kernel, device_param->opencl_device, CL_KERNEL_WORK_GROUP_SIZE, sizeof (threads_per_block), &threads_per_block, NULL) == -1) return -1; + + return threads_per_block; +} + +int opencl_query_max_local_size_bytes (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param) +{ + size_t max_local_size_bytes = 0; + + for (int kern_run_idx = 0; kern_run_idx < kern_run_cnt; kern_run_idx++) + { + cl_kernel kernel = opencl_kernel_with_id (device_param, kern_run_all[kern_run_idx]); + + if (kernel == NULL) continue; + + size_t local_size_bytes = 0; + + if (hc_clGetKernelWorkGroupInfo (hashcat_ctx, kernel, device_param->opencl_device, CL_KERNEL_PRIVATE_MEM_SIZE, sizeof (local_size_bytes), &local_size_bytes, NULL) == -1) return -1; + + if (local_size_bytes == 0) continue; + + max_local_size_bytes = MAX (max_local_size_bytes, local_size_bytes); + } + + return (int) max_local_size_bytes; +} + +int hip_query_threads_per_block (hashcat_ctx_t *hashcat_ctx, hipFunction_t hip_function) +{ + int threads_per_block = 0; + + if (hc_hipFuncGetAttribute (hashcat_ctx, &threads_per_block, HIP_FUNC_ATTRIBUTE_MAX_THREADS_PER_BLOCK, hip_function) == -1) return -1; + + return threads_per_block; +} + +int hip_query_max_local_size_bytes (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param) +{ + int max_local_size_bytes = 0; + + for (int kern_run_idx = 0; kern_run_idx < kern_run_cnt; kern_run_idx++) + { + hipFunction_t hip_function = hip_function_with_id (device_param, kern_run_all[kern_run_idx]); + + if (hip_function == NULL) continue; + + int local_size_bytes = 0; + + if (hc_hipFuncGetAttribute (hashcat_ctx, &local_size_bytes, HIP_FUNC_ATTRIBUTE_LOCAL_SIZE_BYTES, hip_function) == -1) return -1; + + if (local_size_bytes == 0) continue; + + max_local_size_bytes = MAX (max_local_size_bytes, local_size_bytes); + } + + return max_local_size_bytes; +} + +int cuda_query_threads_per_block (hashcat_ctx_t *hashcat_ctx, CUfunction cuda_function) +{ + int threads_per_block = 0; + + if (hc_cuFuncGetAttribute (hashcat_ctx, &threads_per_block, CU_FUNC_ATTRIBUTE_MAX_THREADS_PER_BLOCK, cuda_function) == -1) return -1; + + return threads_per_block; +} + +int cuda_query_max_local_size_bytes (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param) +{ + int max_local_size_bytes = 0; + + for (int kern_run_idx = 0; kern_run_idx < kern_run_cnt; kern_run_idx++) + { + CUfunction cuda_function = cuda_function_with_id (device_param, kern_run_all[kern_run_idx]); + + if (cuda_function == NULL) continue; + + int local_size_bytes = 0; + + if (hc_cuFuncGetAttribute (hashcat_ctx, &local_size_bytes, CU_FUNC_ATTRIBUTE_LOCAL_SIZE_BYTES, cuda_function) == -1) return -1; + + if (local_size_bytes == 0) continue; + + max_local_size_bytes = MAX (max_local_size_bytes, local_size_bytes); + } + + return max_local_size_bytes; +} + static int backend_ctx_find_alias_devices (hashcat_ctx_t *hashcat_ctx) { backend_ctx_t *backend_ctx = hashcat_ctx->backend_ctx; @@ -5321,6 +5508,32 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) hc_string_trim_trailing (device_name); + // regsPerBlock + + int max_registers_per_block = 0; + + if (hc_cuDeviceGetAttribute (hashcat_ctx, &max_registers_per_block, CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK, cuda_device) == -1) + { + device_param->skipped = true; + + continue; + } + + device_param->regsPerBlock = max_registers_per_block; + + // regsPerMultiprocessor + + int max_registers_per_multiprocessor = 0; + + if (hc_cuDeviceGetAttribute (hashcat_ctx, &max_registers_per_multiprocessor, CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR, cuda_device) == -1) + { + device_param->skipped = true; + + continue; + } + + device_param->regsPerMultiprocessor = max_registers_per_multiprocessor; + // unified memory int device_host_unified_memory = 0; @@ -5833,6 +6046,28 @@ int backend_ctx_devices_init (hashcat_ctx_t *hashcat_ctx, const int comptime) device_param->gcnArchName = strdup (prop.gcnArchName); + // regsPerBlock + + if (hc_hipGetDeviceProperties (hashcat_ctx, &prop, hip_device) == -1) + { + device_param->skipped = true; + + continue; + } + + device_param->regsPerBlock = prop.regsPerBlock; + + // regsPerMultiprocessor + + if (hc_hipGetDeviceProperties (hashcat_ctx, &prop, hip_device) == -1) + { + device_param->skipped = true; + + continue; + } + + device_param->regsPerMultiprocessor = prop.regsPerMultiprocessor; + // sm_minor, sm_major int sm_major = 0; @@ -10220,8 +10455,22 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) { // v7 test, needs some larger test, but I think we will need to stick to this - //if (device_param->is_hip == true) - //{ + if (device_param->is_cuda == true) + { + // we will find this after loading the kernel with suppport of runtime api + } + else if (device_param->is_hip == true) + { + // we will find this after loading the kernel with suppport of runtime api + } + else if (device_param->is_opencl == true) + { + // we will find this after loading the kernel with suppport of runtime api + } + else if (device_param->is_metal == true) + { + // metal: todo - remove this section after below section is implemented + const u32 native_threads = device_param->kernel_preferred_wgs_multiple; if ((native_threads >= device_param->kernel_threads_min) && (native_threads <= device_param->kernel_threads_max)) @@ -10233,7 +10482,7 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) { // abort? } - //} + } } // this seems to work always @@ -15655,6 +15904,51 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) } } + u32 threads_per_block = 32; + + if (device_param->is_cuda == true) + { + const int kern_run = find_tuning_function (hashcat_ctx, device_param); + + CUfunction func = cuda_function_with_id (device_param, kern_run); + + threads_per_block = cuda_query_threads_per_block (hashcat_ctx, func); + } + else if (device_param->is_hip == true) + { + const int kern_run = find_tuning_function (hashcat_ctx, device_param); + + hipFunction_t func = hip_function_with_id (device_param, kern_run); + + threads_per_block = hip_query_threads_per_block (hashcat_ctx, func); + } + else if (device_param->is_opencl == true) + { + const int kern_run = find_tuning_function (hashcat_ctx, device_param); + + cl_kernel kernel = opencl_kernel_with_id (device_param, kern_run); + + threads_per_block = opencl_query_threads_per_block (hashcat_ctx, device_param, kernel); + } + else if (device_param->is_metal == true) + { + threads_per_block = device_param->kernel_preferred_wgs_multiple; + } + + if ((threads_per_block >= device_param->kernel_threads_min) && (threads_per_block <= device_param->kernel_threads_max)) + { + //printf ("auto thread max: %d\n", threads_per_block); + device_param->kernel_threads_max = threads_per_block; + } + + const u32 threads_per_block_p2f = threads_per_block / (threads_per_block & -threads_per_block); + + if ((threads_per_block_p2f >= device_param->kernel_threads_min) && (threads_per_block_p2f <= device_param->kernel_threads_max)) + { + //printf ("auto thread min: %d\n", threads_per_block_p2f); + device_param->kernel_threads_min = threads_per_block_p2f; + } + // this is required because inside the kernels there is this: // __local pw_t s_pws[64]; @@ -15700,21 +15994,11 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) u32 kernel_accel_min = device_param->kernel_accel_min; u32 kernel_accel_max = device_param->kernel_accel_max; - // We need to deal with the situation that the total video RAM > total host RAM. - // For the opposite direction, we do that in the loop section below. - // Especially in multi-GPU setups that is very likely. - // The buffers which actually take a lot of memory (except for SCRYPT) are the ones for the password candidates. - // They are stored in an aligned order for better performance, but this increases the memory pressure. - // The best way to keep these buffers to a reasonable size is by controlling the kernel_accel parameter. - // - // In theory this check could be disabled if we check if total video RAM < total host RAM, - // but at this point of initialization phase we don't have this information available. + // check if there's enough host memory left for upcoming allocations, otherwise reduce skip device and present user an option to deal with - // We need to hard-code some value, let's assume that (in 2021) the host has at least 4GB ram per active GPU + u64 accel_limit = 0; - const u64 SIZE_4GB = 4ULL * 1024 * 1024 * 1024; - - u64 accel_limit = SIZE_4GB; + get_free_memory (&accel_limit); // in slow candidate mode we need to keep the buffers on the host alive // a high accel value doesn't help much here anyway @@ -15748,7 +16032,7 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) if (kernel_accel_min > kernel_accel_max) { - event_log_error (hashcat_ctx, "* Device #%u: Too many compute units to keep minimum kernel accel limit.", device_id + 1); + event_log_error (hashcat_ctx, "* Device #%u: Not enough host memory left for this device, skipping...", device_id + 1); event_log_error (hashcat_ctx, " Retry with lower --kernel-threads value."); backend_kernel_accel_warnings++; @@ -15772,22 +16056,33 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) u64 size_brain_link_out = 4; #endif + u32 local_size_bytes = 0; + + if ((device_param->is_cuda == true) || (device_param->is_hip == true) || (device_param->is_opencl == true)) + { + if (device_param->is_cuda == true) local_size_bytes = cuda_query_max_local_size_bytes (hashcat_ctx, device_param); + if (device_param->is_hip == true) local_size_bytes = hip_query_max_local_size_bytes (hashcat_ctx, device_param); + if (device_param->is_opencl == true) local_size_bytes = opencl_query_max_local_size_bytes (hashcat_ctx, device_param); + // metal todo + + // use this parameter to tune down kernel_accel_max, because it has such a huge impact on memory requirement + // let's target a maximum use of memory of 8GiB so that there's some room left for other stuff + + if (local_size_bytes) + { + const u64 SIZE_8GiB = 8ULL * 1024 * 1024 * 1024; + + const u64 max_accel = SIZE_8GiB / (hardware_power_max * local_size_bytes); + + kernel_accel_max = MIN (kernel_accel_max, max_accel); + } + } + while (kernel_accel_max >= kernel_accel_min) { const u64 kernel_power_max = hardware_power_max * kernel_accel_max; - // size_spilling: we cannot query this directly. - // Example output: - // ptxas . 4096 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads - // However, this is very relevant for us. In theory, these numbers could reach gigabytes, - // but in practice, excessive spilling would make the kernel too slow, - // and the kernel developer would adapt accordingly. We'll assume a maximum spilling buffer - // size of 4 KiB per thread for now. - // This setting will reduce the available memory pool on a 4090: - // 4 * 1024 * 128 * 32 = 16 MiB per -n accel, - // which adds up to 2 GiB with -n 128. - - size_t size_spilling = kernel_power_max * (4 * 1024); + const u64 size_spilling = kernel_power_max * local_size_bytes; // size_pws diff --git a/src/ext_cuda.c b/src/ext_cuda.c index dbafa065e..4c0db9ffb 100644 --- a/src/ext_cuda.c +++ b/src/ext_cuda.c @@ -107,6 +107,9 @@ int cuda_init (void *hashcat_ctx) HC_LOAD_FUNC_CUDA (cuda, cuStreamDestroy, cuStreamDestroy_v2, CUDA_CUSTREAMDESTROY, CUDA, 1); HC_LOAD_FUNC_CUDA (cuda, cuStreamSynchronize, cuStreamSynchronize, CUDA_CUSTREAMSYNCHRONIZE, CUDA, 1); HC_LOAD_FUNC_CUDA (cuda, cuStreamWaitEvent, cuStreamWaitEvent, CUDA_CUSTREAMWAITEVENT, CUDA, 1); + HC_LOAD_FUNC_CUDA (cuda, cuStreamWaitEvent, cuStreamWaitEvent, CUDA_CUSTREAMWAITEVENT, CUDA, 1); + HC_LOAD_FUNC_CUDA (cuda, cuOccupancyMaxActiveBlocksPerMultiprocessor, cuOccupancyMaxActiveBlocksPerMultiprocessor, CUDA_CUOCCUPANCYMAXBLOCKSPERMULTIPROCESSOR, CUDA, 1); + #if defined (WITH_CUBIN) HC_LOAD_FUNC_CUDA (cuda, cuLinkCreate, cuLinkCreate_v2, CUDA_CULINKCREATE, CUDA, 1); HC_LOAD_FUNC_CUDA (cuda, cuLinkAddData, cuLinkAddData_v2, CUDA_CULINKADDDATA, CUDA, 1); @@ -1269,3 +1272,31 @@ int hc_cuLinkComplete (void *hashcat_ctx, CUlinkState state, void **cubinOut, si return 0; } + +int hc_cuOccupancyMaxActiveBlocksPerMultiprocessor (void *hashcat_ctx, int *numBlocks, CUfunction func, int blockSize, size_t dynamicSMemSize) +{ + backend_ctx_t *backend_ctx = ((hashcat_ctx_t *) hashcat_ctx)->backend_ctx; + + CUDA_PTR *cuda = (CUDA_PTR *) backend_ctx->cuda; + + const CUresult CU_err = cuda->cuOccupancyMaxActiveBlocksPerMultiprocessor (numBlocks, func, blockSize, dynamicSMemSize); + + if (CU_err != CUDA_SUCCESS) + { + const char *pStr = NULL; + + if (cuda->cuGetErrorString (CU_err, &pStr) == CUDA_SUCCESS) + { + event_log_error (hashcat_ctx, "cuOccupancyMaxActiveBlocksPerMultiprocessor(): %s", pStr); + } + else + { + event_log_error (hashcat_ctx, "cuOccupancyMaxActiveBlocksPerMultiprocessor(): %d", CU_err); + } + + return -1; + } + + return 0; +} + diff --git a/src/ext_hip.c b/src/ext_hip.c index 75b061037..c0145504b 100644 --- a/src/ext_hip.c +++ b/src/ext_hip.c @@ -155,6 +155,7 @@ int hip_init (void *hashcat_ctx) HC_LOAD_FUNC_HIP (hip, hipStreamDestroy, hipStreamDestroy, HIP_HIPSTREAMDESTROY, HIP, 1); HC_LOAD_FUNC_HIP (hip, hipStreamSynchronize, hipStreamSynchronize, HIP_HIPSTREAMSYNCHRONIZE, HIP, 1); HC_LOAD_FUNC_HIP (hip, hipGetDeviceProperties, hipGetDevicePropertiesR0600, HIP_HIPGETDEVICEPROPERTIES, HIP, 1); + HC_LOAD_FUNC_HIP (hip, hipModuleOccupancyMaxActiveBlocksPerMultiprocessor, hipModuleOccupancyMaxActiveBlocksPerMultiprocessor, HIP_HIPMODULEOCCUPANCYMAXACTIVEBLOCKSPERMULTIPROCESSOR, HIP, 1); return 0; } @@ -1176,3 +1177,30 @@ int hc_hipGetDeviceProperties (void *hashcat_ctx, hipDeviceProp_t *prop, hipDevi return 0; } + +int hc_hipModuleOccupancyMaxActiveBlocksPerMultiprocessor (void *hashcat_ctx, int *numBlocks, hipFunction_t f, int blockSize, size_t dynSharedMemPerBlk) +{ + backend_ctx_t *backend_ctx = ((hashcat_ctx_t *) hashcat_ctx)->backend_ctx; + + HIP_PTR *hip = (HIP_PTR *) backend_ctx->hip; + + const hipError_t HIP_err = hip->hipModuleOccupancyMaxActiveBlocksPerMultiprocessor (numBlocks, f, blockSize, dynSharedMemPerBlk); + + if (HIP_err != hipSuccess) + { + const char *pStr = NULL; + + if (hip->hipGetErrorString (HIP_err, &pStr) == hipSuccess) + { + event_log_error (hashcat_ctx, "hipModuleOccupancyMaxActiveBlocksPerMultiprocessor(): %s", pStr); + } + else + { + event_log_error (hashcat_ctx, "hipModuleOccupancyMaxActiveBlocksPerMultiprocessor(): %d", HIP_err); + } + + return -1; + } + + return 0; +} diff --git a/src/modules/module_03000.c b/src/modules/module_03000.c index f498c1eed..2da2023f0 100644 --- a/src/modules/module_03000.c +++ b/src/modules/module_03000.c @@ -49,6 +49,13 @@ u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, const char *module_st_hash (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_HASH; } const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_PASS; } +u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u32 kernel_threads_max = 64; + + return kernel_threads_max; +} + bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) { // Intel(R) Xeon(R) W-3223 CPU @ 3.50GHz; OpenCL C 1.2; 11.3.1; 20E241 diff --git a/src/modules/module_03200.c b/src/modules/module_03200.c index 633a27037..9e2579df9 100644 --- a/src/modules/module_03200.c +++ b/src/modules/module_03200.c @@ -60,6 +60,20 @@ typedef struct bcrypt_tmp } bcrypt_tmp_t; +u32 module_kernel_loops_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u32 kernel_loops_min = 32; + + return kernel_loops_min; +} + +u32 module_kernel_loops_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u32 kernel_loops_max = 32; + + return kernel_loops_max; +} + bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) { if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) @@ -356,8 +370,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_jit_cache_disable = module_jit_cache_disable; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; - module_ctx->module_kernel_loops_max = MODULE_DEFAULT; - module_ctx->module_kernel_loops_min = MODULE_DEFAULT; + module_ctx->module_kernel_loops_max = module_kernel_loops_max; + module_ctx->module_kernel_loops_min = module_kernel_loops_min; module_ctx->module_kernel_threads_max = MODULE_DEFAULT; module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; diff --git a/src/modules/module_06231.c b/src/modules/module_06231.c index 9dbc28864..72724d56f 100644 --- a/src/modules/module_06231.c +++ b/src/modules/module_06231.c @@ -77,13 +77,6 @@ typedef struct tc static const int ROUNDS_TRUECRYPT_1K = 1000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; -u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_threads_max = 64; - - return kernel_threads_max; -} - bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) { if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) @@ -319,7 +312,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_kernel_accel_min = MODULE_DEFAULT; module_ctx->module_kernel_loops_max = MODULE_DEFAULT; module_ctx->module_kernel_loops_min = MODULE_DEFAULT; - module_ctx->module_kernel_threads_max = module_kernel_threads_max; + module_ctx->module_kernel_threads_max = MODULE_DEFAULT; module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; diff --git a/src/modules/module_06232.c b/src/modules/module_06232.c index 83088fd6b..46ce7d4fa 100644 --- a/src/modules/module_06232.c +++ b/src/modules/module_06232.c @@ -77,13 +77,6 @@ typedef struct tc static const int ROUNDS_TRUECRYPT_1K = 1000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; -u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_threads_max = 64; - - return kernel_threads_max; -} - bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) { if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) @@ -319,7 +312,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_kernel_accel_min = MODULE_DEFAULT; module_ctx->module_kernel_loops_max = MODULE_DEFAULT; module_ctx->module_kernel_loops_min = MODULE_DEFAULT; - module_ctx->module_kernel_threads_max = module_kernel_threads_max; + module_ctx->module_kernel_threads_max = MODULE_DEFAULT; module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; diff --git a/src/modules/module_06233.c b/src/modules/module_06233.c index 5c928a646..6380775fe 100644 --- a/src/modules/module_06233.c +++ b/src/modules/module_06233.c @@ -77,13 +77,6 @@ typedef struct tc static const int ROUNDS_TRUECRYPT_1K = 1000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; -u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_threads_max = 64; - - return kernel_threads_max; -} - bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) { if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) @@ -319,7 +312,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_kernel_accel_min = MODULE_DEFAULT; module_ctx->module_kernel_loops_max = MODULE_DEFAULT; module_ctx->module_kernel_loops_min = MODULE_DEFAULT; - module_ctx->module_kernel_threads_max = module_kernel_threads_max; + module_ctx->module_kernel_threads_max = MODULE_DEFAULT; module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; diff --git a/src/modules/module_08600.c b/src/modules/module_08600.c index c72da5c7f..f1e83a17e 100644 --- a/src/modules/module_08600.c +++ b/src/modules/module_08600.c @@ -44,18 +44,6 @@ u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, const char *module_st_hash (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_HASH; } const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_PASS; } -char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - char *jit_build_options = NULL; - - if (device_param->is_cuda == true) - { - hc_asprintf (&jit_build_options, "-D FIXED_LOCAL_SIZE=%u", (u32) device_param->device_maxworkgroup_size); - } - - return jit_build_options; -} - u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const u32 pw_max = 16; // Lotus Notes/Domino 5 limits itself to 16 @@ -158,7 +146,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = module_jit_build_options; + module_ctx->module_jit_build_options = MODULE_DEFAULT; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; diff --git a/src/modules/module_08700.c b/src/modules/module_08700.c index cf4c428cf..39b157196 100644 --- a/src/modules/module_08700.c +++ b/src/modules/module_08700.c @@ -43,18 +43,6 @@ u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, const char *module_st_hash (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_HASH; } const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_PASS; } -char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - char *jit_build_options = NULL; - - if (device_param->is_cuda == true) - { - hc_asprintf (&jit_build_options, "-D FIXED_LOCAL_SIZE=%u", (u32) device_param->device_maxworkgroup_size); - } - - return jit_build_options; -} - u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const bool optimized_kernel = (hashconfig->opti_type & OPTI_TYPE_OPTIMIZED_KERNEL); @@ -200,7 +188,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = module_jit_build_options; + module_ctx->module_jit_build_options = MODULE_DEFAULT; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; diff --git a/src/modules/module_09800.c b/src/modules/module_09800.c index 11c5f8ef1..31085ff4c 100644 --- a/src/modules/module_09800.c +++ b/src/modules/module_09800.c @@ -101,7 +101,9 @@ char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAY } else { - native_threads = device_param->kernel_preferred_wgs_multiple; + const u32 possible = MIN (device_param->device_local_mem_size / 256, 32768 / 256); + + native_threads = possible - (possible % device_param->kernel_preferred_wgs_multiple); } #endif diff --git a/src/modules/module_10700.c b/src/modules/module_10700.c index 5a4f52746..c19918a53 100644 --- a/src/modules/module_10700.c +++ b/src/modules/module_10700.c @@ -128,7 +128,14 @@ u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED con u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { - const u32 kernel_threads_max = 256; + const bool optimized_kernel = (hashconfig->opti_type & OPTI_TYPE_OPTIMIZED_KERNEL); + + u32 kernel_threads_max = KERNEL_THREADS_MAX; + + if (optimized_kernel == true) + { + kernel_threads_max = 256; + } return kernel_threads_max; } diff --git a/src/modules/module_12700.c b/src/modules/module_12700.c index 1d885ade2..7a5fa69fc 100644 --- a/src/modules/module_12700.c +++ b/src/modules/module_12700.c @@ -56,6 +56,20 @@ typedef struct mywallet_tmp static const char *SIGNATURE_MYWALLET = "$blockchain$"; static const int ROUNDS_MYWALLET = 10; +u32 module_kernel_loops_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u32 kernel_loops_min = ROUNDS_MYWALLET - 1; + + return kernel_loops_min; +} + +u32 module_kernel_loops_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u32 kernel_loops_max = ROUNDS_MYWALLET - 1; + + return kernel_loops_max; +} + u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const u64 tmp_size = (const u64) sizeof (mywallet_tmp_t); @@ -154,7 +168,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_benchmark_charset = MODULE_DEFAULT; module_ctx->module_benchmark_salt = MODULE_DEFAULT; module_ctx->module_bridge_name = MODULE_DEFAULT; - module_ctx->module_bridge_type = MODULE_DEFAULT; + module_ctx->module_bridge_type = MODULE_DEFAULT; module_ctx->module_build_plain_postprocess = MODULE_DEFAULT; module_ctx->module_deep_comp_kernel = MODULE_DEFAULT; module_ctx->module_deprecated_notice = MODULE_DEFAULT; @@ -197,8 +211,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; - module_ctx->module_kernel_loops_max = MODULE_DEFAULT; - module_ctx->module_kernel_loops_min = MODULE_DEFAULT; + module_ctx->module_kernel_loops_max = module_kernel_loops_min; + module_ctx->module_kernel_loops_min = module_kernel_loops_max; module_ctx->module_kernel_threads_max = MODULE_DEFAULT; module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; diff --git a/src/modules/module_13731.c b/src/modules/module_13731.c index 53e77b18c..27f0e5033 100644 --- a/src/modules/module_13731.c +++ b/src/modules/module_13731.c @@ -87,13 +87,6 @@ typedef struct vc static const int ROUNDS_VERACRYPT_500000 = 500000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; -u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_threads_max = 64; - - return kernel_threads_max; -} - int module_build_plain_postprocess (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const void *tmps, const u32 *src_buf, MAYBE_UNUSED const size_t src_sz, MAYBE_UNUSED const int src_len, u32 *dst_buf, MAYBE_UNUSED const size_t dst_sz) { const vc_tmp_t *vc_tmp = (const vc_tmp_t *) tmps; @@ -352,7 +345,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_kernel_accel_min = MODULE_DEFAULT; module_ctx->module_kernel_loops_max = module_kernel_loops_max; module_ctx->module_kernel_loops_min = MODULE_DEFAULT; - module_ctx->module_kernel_threads_max = module_kernel_threads_max; + module_ctx->module_kernel_threads_max = MODULE_DEFAULT; module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; diff --git a/src/modules/module_13732.c b/src/modules/module_13732.c index 2435a0478..e78dbaa83 100644 --- a/src/modules/module_13732.c +++ b/src/modules/module_13732.c @@ -87,13 +87,6 @@ typedef struct vc static const int ROUNDS_VERACRYPT_500000 = 500000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; -u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_threads_max = 64; - - return kernel_threads_max; -} - int module_build_plain_postprocess (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const void *tmps, const u32 *src_buf, MAYBE_UNUSED const size_t src_sz, MAYBE_UNUSED const int src_len, u32 *dst_buf, MAYBE_UNUSED const size_t dst_sz) { const vc_tmp_t *vc_tmp = (const vc_tmp_t *) tmps; @@ -352,7 +345,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_kernel_accel_min = MODULE_DEFAULT; module_ctx->module_kernel_loops_max = module_kernel_loops_max; module_ctx->module_kernel_loops_min = MODULE_DEFAULT; - module_ctx->module_kernel_threads_max = module_kernel_threads_max; + module_ctx->module_kernel_threads_max = MODULE_DEFAULT; module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; diff --git a/src/modules/module_13733.c b/src/modules/module_13733.c index 9c2729067..1d7c36628 100644 --- a/src/modules/module_13733.c +++ b/src/modules/module_13733.c @@ -87,13 +87,6 @@ typedef struct vc static const int ROUNDS_VERACRYPT_500000 = 500000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; -u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_threads_max = 64; - - return kernel_threads_max; -} - int module_build_plain_postprocess (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const void *tmps, const u32 *src_buf, MAYBE_UNUSED const size_t src_sz, MAYBE_UNUSED const int src_len, u32 *dst_buf, MAYBE_UNUSED const size_t dst_sz) { const vc_tmp_t *vc_tmp = (const vc_tmp_t *) tmps; @@ -352,7 +345,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_kernel_accel_min = MODULE_DEFAULT; module_ctx->module_kernel_loops_max = module_kernel_loops_max; module_ctx->module_kernel_loops_min = MODULE_DEFAULT; - module_ctx->module_kernel_threads_max = module_kernel_threads_max; + module_ctx->module_kernel_threads_max = MODULE_DEFAULT; module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; diff --git a/src/modules/module_16000.c b/src/modules/module_16000.c index 7da4eccc7..9781e0e72 100644 --- a/src/modules/module_16000.c +++ b/src/modules/module_16000.c @@ -42,19 +42,6 @@ u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, const char *module_st_hash (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_HASH; } const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_PASS; } - -char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - char *jit_build_options = NULL; - - if (device_param->is_cuda == true) - { - hc_asprintf (&jit_build_options, "-D FIXED_LOCAL_SIZE=%u", (u32) device_param->device_maxworkgroup_size); - } - - return jit_build_options; -} - u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const u32 pw_max = 8; // Underlaying DES max @@ -179,7 +166,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = module_jit_build_options; + module_ctx->module_jit_build_options = MODULE_DEFAULT; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; diff --git a/src/modules/module_17200.c b/src/modules/module_17200.c index 84fd6af85..1810182bb 100644 --- a/src/modules/module_17200.c +++ b/src/modules/module_17200.c @@ -103,8 +103,7 @@ static const u32 HASH_CATEGORY = HASH_CATEGORY_ARCHIVE; static const char *HASH_NAME = "PKZIP (Compressed)"; static const u64 KERN_TYPE = 17200; static const u32 OPTI_TYPE = 0; -static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE - | OPTS_TYPE_NATIVE_THREADS; +static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "$pkzip2$1*1*2*0*e3*1c5*eda7a8de*0*28*8*e3*eda7*5096*a9fc1f4e951c8fb3031a6f903e5f4e3211c8fdc4671547bf77f6f682afbfcc7475d83898985621a7af9bccd1349d1976500a68c48f630b7f22d7a0955524d768e34868880461335417ddd149c65a917c0eb0a4bf7224e24a1e04cf4ace5eef52205f4452e66ded937db9545f843a68b1e84a2e933cc05fb36d3db90e6c5faf1bee2249fdd06a7307849902a8bb24ec7e8a0886a4544ca47979a9dfeefe034bdfc5bd593904cfe9a5309dd199d337d3183f307c2cb39622549a5b9b8b485b7949a4803f63f67ca427a0640ad3793a519b2476c52198488e3e2e04cac202d624fb7d13c2*$/pkzip2$"; diff --git a/src/modules/module_17220.c b/src/modules/module_17220.c index 56c34d255..e9fa6ffec 100644 --- a/src/modules/module_17220.c +++ b/src/modules/module_17220.c @@ -103,8 +103,7 @@ static const u32 HASH_CATEGORY = HASH_CATEGORY_ARCHIVE; static const char *HASH_NAME = "PKZIP (Compressed Multi-File)"; static const u64 KERN_TYPE = 17220; static const u32 OPTI_TYPE = 0; -static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE - | OPTS_TYPE_NATIVE_THREADS; +static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "$pkzip2$3*1*1*0*8*24*a425*8827*d1730095cd829e245df04ebba6c52c0573d49d3bbeab6cb385b7fa8a28dcccd3098bfdd7*1*0*8*24*2a74*882a*51281ac874a60baedc375ca645888d29780e20d4076edd1e7154a99bde982152a736311f*2*0*e3*1c5*eda7a8de*0*29*8*e3*eda7*5096*1455781b59707f5151139e018bdcfeebfc89bc37e372883a7ec0670a5eafc622feb338f9b021b6601a674094898a91beac70e41e675f77702834ca6156111a1bf7361bc9f3715d77dfcdd626634c68354c6f2e5e0a7b1e1ce84a44e632d0f6e36019feeab92fb7eac9dda8df436e287aafece95d042059a1b27d533c5eab62c1c559af220dc432f2eb1a38a70f29e8f3cb5a207704274d1e305d7402180fd47e026522792f5113c52a116d5bb25b67074ffd6f4926b221555234aabddc69775335d592d5c7d22462b75de1259e8342a9ba71cb06223d13c7f51f13be2ad76352c3b8ed*$/pkzip2$"; diff --git a/src/modules/module_17225.c b/src/modules/module_17225.c index 6b6fac8fd..41debbd09 100644 --- a/src/modules/module_17225.c +++ b/src/modules/module_17225.c @@ -103,8 +103,7 @@ static const u32 HASH_CATEGORY = HASH_CATEGORY_ARCHIVE; static const char *HASH_NAME = "PKZIP (Mixed Multi-File)"; static const u64 KERN_TYPE = 17225; static const u32 OPTI_TYPE = 0; -static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE - | OPTS_TYPE_NATIVE_THREADS; +static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "$pkzip2$3*1*1*0*0*24*3e2c*3ef8*0619e9d17ff3f994065b99b1fa8aef41c056edf9fa4540919c109742dcb32f797fc90ce0*1*0*8*24*431a*3f26*18e2461c0dbad89bd9cc763067a020c89b5e16195b1ac5fa7fb13bd246d000b6833a2988*2*0*23*17*1e3c1a16*2e4*2f*0*23*1e3c*3f2d*54ea4dbc711026561485bbd191bf300ae24fa0997f3779b688cdad323985f8d3bb8b0c*$/pkzip2$"; diff --git a/src/modules/module_19000.c b/src/modules/module_19000.c index d6c1787f1..fcea5d683 100644 --- a/src/modules/module_19000.c +++ b/src/modules/module_19000.c @@ -51,13 +51,6 @@ typedef struct qnx_md5_tmp static const int ROUNDS_QNX = 1000; -u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_threads_max = 64; - - return kernel_threads_max; -} - u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const u64 tmp_size = (const u64) sizeof (qnx_md5_tmp_t); @@ -241,7 +234,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_kernel_accel_min = MODULE_DEFAULT; module_ctx->module_kernel_loops_max = MODULE_DEFAULT; module_ctx->module_kernel_loops_min = MODULE_DEFAULT; - module_ctx->module_kernel_threads_max = module_kernel_threads_max; + module_ctx->module_kernel_threads_max = MODULE_DEFAULT; module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; diff --git a/src/modules/module_19300.c b/src/modules/module_19300.c index 85b83b695..6715e7ae7 100644 --- a/src/modules/module_19300.c +++ b/src/modules/module_19300.c @@ -53,13 +53,6 @@ typedef struct sha1_double_salt } sha1_double_salt_t; -u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const u32 kernel_threads_max = 256; - - return kernel_threads_max; -} - u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const u64 esalt_size = (const u64) sizeof (sha1_double_salt_t); @@ -257,7 +250,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_kernel_accel_min = MODULE_DEFAULT; module_ctx->module_kernel_loops_max = MODULE_DEFAULT; module_ctx->module_kernel_loops_min = MODULE_DEFAULT; - module_ctx->module_kernel_threads_max = module_kernel_threads_max; + module_ctx->module_kernel_threads_max = MODULE_DEFAULT; module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; diff --git a/src/modules/module_20510.c b/src/modules/module_20510.c index 8fa2d2f35..394a69a3b 100644 --- a/src/modules/module_20510.c +++ b/src/modules/module_20510.c @@ -108,18 +108,6 @@ typedef struct pkzip_extra } pkzip_extra_t; -char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - char *jit_build_options = NULL; - - if (device_param->is_cuda == true) - { - hc_asprintf (&jit_build_options, "-D FIXED_LOCAL_SIZE=%u", (u32) device_param->device_maxworkgroup_size); - } - - return jit_build_options; -} - u32 module_hashes_count_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const u64 tmp_size = 1; @@ -255,7 +243,7 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook23 = MODULE_DEFAULT; module_ctx->module_hook_salt_size = MODULE_DEFAULT; module_ctx->module_hook_size = MODULE_DEFAULT; - module_ctx->module_jit_build_options = module_jit_build_options; + module_ctx->module_jit_build_options = MODULE_DEFAULT; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; diff --git a/src/modules/module_21800.c b/src/modules/module_21800.c index 16f97979a..a64448e7b 100644 --- a/src/modules/module_21800.c +++ b/src/modules/module_21800.c @@ -26,8 +26,7 @@ static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE | OPTI_TYPE_SLOW_HASH_SIMD_LOOP; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_LE - | OPTS_TYPE_DEEP_COMP_KERNEL - | OPTS_TYPE_NATIVE_THREADS; + | OPTS_TYPE_DEEP_COMP_KERNEL; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat"; static const char *ST_HASH = "$electrum$5*02170fee7c35f1ef3b229edc90fbd0793b688a0d6f41137a97aab2343d315cce16*94cf72d8f5d774932b414a3344984859e43721268d2eb35fa531de5a2fc7024b463c730a54f4f46229dd9fede5034b19ac415c2916e9c16b02094f845795df0c397ff76d597886b1f9e014ad1a8f64a3f617d9900aa645b3ba86f16ce542251fc22c41d93fa6bc118be96d9582917e19d2a299743331804cfc7ce2c035367b4cbcfb70adfb1e10a0f2795769f2165d8fd13daa8b45eeac495b5b63e91a87f63b42e483f84a881e49adecacf6519cb564694b42dd9fe80fcbc6cdb63cf5ae33f35255266f5c2524dd93d3cc15eba0f2ccdc3c109cc2d7e8f711b8b440f168caf8b005e8bcdfe694148e94a04d2a738f09349a96600bd8e8edae793b26ebae231022f24e96cb158db141ac40400a9e9ef099e673cfe017281537c57f82fb45c62bdb64462235a6eefb594961d5eb2c46537958e4d04250804c6e9f343ab7a0db07af6b8a9d1a6c5cfcd311b8fb8383ac9ed9d98d427d526c2f517fc97473bd87cb59899bd0e8fb8c57fa0f7e0d53daa57c972cf92764af4b1725a5fb8f504b663ec519731929b3caaa793d8ee74293eee27d0e208a60e26290bc546e6fa9ed865076e13febfea249729218c1b5752e912055fbf993fbac5df2cca2b37c5e0f9c30789858ceeb3c482a8db123966775aeed2eee2fc34efb160d164929f51589bff748ca773f38978bff3508d5a7591fb2d2795df983504a788071f469d78c88fd7899cabbc5804f458653d0206b82771a59522e1fa794d7de1536c51a437f5d6df5efd6654678e5794ca429b5752e1103340ed80786f1e9da7f5b39af628b2212e4d88cd36b8a7136d50a6b6e275ab406ba7c57cc70d77d01c4c16e9363901164fa92dc9e9b99219d5376f24862e775968605001e71b000e2c7123b4b43f3ca40db17efd729388782e46e64d43ccb947db4eb1473ff1a3836b74fe312cd1a33b73b8b8d80c087088932277773c329f2f66a01d6b3fc1e651c56959ebbed7b14a21b977f3acdedf1a0d98d519a74b50c39b3052d840106da4145345d86ec0461cddafacc2a4f0dd646457ad05bf04dcbcc80516a5c5ed14d2d639a70e77b686f19cbfb63f546d81ae19cc8ba35cce3f3b5b9602df25b678e14411fecec87b8347f5047513df415c6b1a3d39871a6bcb0f67d9cf8311596deae45fd1d84a04fd58f1fd55c5156b7309af09094c99a53674809cb87a45f95a2d69f9997a38085519cb4e056f9efd56672a2c1fe927d5ea8eec25b8aff6e56f9a2310f1a481daf407b8adf16201da267c59973920fd21bb087b88123ef98709839d6a3ee34efb8ccd5c15ed0e46cff3172682769531164b66c8689c35a26299dd26d09233d1f64f9667474141cf9c6a6de7f2bc52c3bb44cfe679ff4b912c06df406283836b3581773cb76d375304f46239da5996594a8d03b14c02f1b35a432dc44a96331242ae31174*33a7ee59d6d17ed1ee99dc0a71771227e6f3734b17ba36eb589bdced56244135"; diff --git a/src/modules/module_25000.c b/src/modules/module_25000.c index 897d51791..86681ea80 100644 --- a/src/modules/module_25000.c +++ b/src/modules/module_25000.c @@ -117,24 +117,6 @@ u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED c return tmp_size; } -u32 module_kernel_accel_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - // due to the large tmps structure - - const u32 kernel_accel_max = 256; - - return kernel_accel_max; -} - -u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - // due to the large tmps structure - - const u32 kernel_threads_max = 32; - - return kernel_threads_max; -} - u32 module_kernel_loops_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { // we need to fix iteration count to guarantee the loop count is a multiple of 64 @@ -354,11 +336,11 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook_size = MODULE_DEFAULT; module_ctx->module_jit_build_options = MODULE_DEFAULT; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; - module_ctx->module_kernel_accel_max = module_kernel_accel_max; + module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; module_ctx->module_kernel_loops_max = module_kernel_loops_max; module_ctx->module_kernel_loops_min = module_kernel_loops_min; - module_ctx->module_kernel_threads_max = module_kernel_threads_max; + module_ctx->module_kernel_threads_max = MODULE_DEFAULT; module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; diff --git a/src/modules/module_25100.c b/src/modules/module_25100.c index 57de16c79..65ecce1ce 100644 --- a/src/modules/module_25100.c +++ b/src/modules/module_25100.c @@ -113,24 +113,6 @@ u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED c return tmp_size; } -u32 module_kernel_accel_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - // due to the large tmps structure - - const u32 kernel_accel_max = 256; - - return kernel_accel_max; -} - -u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - // due to the large tmps structure - - const u32 kernel_threads_max = 32; - - return kernel_threads_max; -} - u32 module_kernel_loops_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { // we need to fix iteration count to guarantee the loop count is a multiple of 64 @@ -335,11 +317,11 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook_size = MODULE_DEFAULT; module_ctx->module_jit_build_options = MODULE_DEFAULT; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; - module_ctx->module_kernel_accel_max = module_kernel_accel_max; + module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; module_ctx->module_kernel_loops_max = module_kernel_loops_max; module_ctx->module_kernel_loops_min = module_kernel_loops_min; - module_ctx->module_kernel_threads_max = module_kernel_threads_max; + module_ctx->module_kernel_threads_max = MODULE_DEFAULT; module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; diff --git a/src/modules/module_25200.c b/src/modules/module_25200.c index 29674aa17..eecaaa9e7 100644 --- a/src/modules/module_25200.c +++ b/src/modules/module_25200.c @@ -113,24 +113,6 @@ u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED c return tmp_size; } -u32 module_kernel_accel_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - // due to the large tmps structure - - const u32 kernel_accel_max = 256; - - return kernel_accel_max; -} - -u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - // due to the large tmps structure - - const u32 kernel_threads_max = 32; - - return kernel_threads_max; -} - u32 module_kernel_loops_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { // we need to fix iteration count to guarantee the loop count is a multiple of 64 @@ -346,11 +328,11 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook_size = MODULE_DEFAULT; module_ctx->module_jit_build_options = MODULE_DEFAULT; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; - module_ctx->module_kernel_accel_max = module_kernel_accel_max; + module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; module_ctx->module_kernel_loops_max = module_kernel_loops_max; module_ctx->module_kernel_loops_min = module_kernel_loops_min; - module_ctx->module_kernel_threads_max = module_kernel_threads_max; + module_ctx->module_kernel_threads_max = MODULE_DEFAULT; module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; diff --git a/src/modules/module_25400.c b/src/modules/module_25400.c index dbe2f8469..c7c3a0bd3 100644 --- a/src/modules/module_25400.c +++ b/src/modules/module_25400.c @@ -82,6 +82,20 @@ typedef struct pdf14_tmp static const char *SIGNATURE_PDF = "$pdf$"; +u32 module_kernel_loops_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u32 kernel_loops_min = 70; + + return kernel_loops_min; +} + +u32 module_kernel_loops_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + const u32 kernel_loops_max = 70; + + return kernel_loops_max; +} + static void md5_complete_no_limit (u32 digest[4], const u32 *plain, const u32 plain_len) { // plain = u32 tmp_md5_buf[64] so this is compatible @@ -715,8 +729,8 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; - module_ctx->module_kernel_loops_max = MODULE_DEFAULT; - module_ctx->module_kernel_loops_min = MODULE_DEFAULT; + module_ctx->module_kernel_loops_max = module_kernel_loops_max; + module_ctx->module_kernel_loops_min = module_kernel_loops_min; module_ctx->module_kernel_threads_max = MODULE_DEFAULT; module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; diff --git a/src/modules/module_26700.c b/src/modules/module_26700.c index 82132f35e..e802726f6 100644 --- a/src/modules/module_26700.c +++ b/src/modules/module_26700.c @@ -115,24 +115,6 @@ u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED c return tmp_size; } -u32 module_kernel_accel_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - // due to the large tmps structure - - const u32 kernel_accel_max = 256; - - return kernel_accel_max; -} - -u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - // due to the large tmps structure - - const u32 kernel_threads_max = 32; - - return kernel_threads_max; -} - u32 module_kernel_loops_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { // we need to fix iteration count to guarantee the loop count is a multiple of 64 @@ -350,11 +332,11 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook_size = MODULE_DEFAULT; module_ctx->module_jit_build_options = MODULE_DEFAULT; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; - module_ctx->module_kernel_accel_max = module_kernel_accel_max; + module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; module_ctx->module_kernel_loops_max = module_kernel_loops_max; module_ctx->module_kernel_loops_min = module_kernel_loops_min; - module_ctx->module_kernel_threads_max = module_kernel_threads_max; + module_ctx->module_kernel_threads_max = MODULE_DEFAULT; module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; diff --git a/src/modules/module_26800.c b/src/modules/module_26800.c index 0c15fe0a0..7363bedff 100644 --- a/src/modules/module_26800.c +++ b/src/modules/module_26800.c @@ -115,24 +115,6 @@ u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED c return tmp_size; } -u32 module_kernel_accel_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - // due to the large tmps structure - - const u32 kernel_accel_max = 256; - - return kernel_accel_max; -} - -u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - // due to the large tmps structure - - const u32 kernel_threads_max = 32; - - return kernel_threads_max; -} - u32 module_kernel_loops_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { // we need to fix iteration count to guarantee the loop count is a multiple of 64 @@ -358,11 +340,11 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook_size = MODULE_DEFAULT; module_ctx->module_jit_build_options = MODULE_DEFAULT; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; - module_ctx->module_kernel_accel_max = module_kernel_accel_max; + module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; module_ctx->module_kernel_loops_max = module_kernel_loops_max; module_ctx->module_kernel_loops_min = module_kernel_loops_min; - module_ctx->module_kernel_threads_max = module_kernel_threads_max; + module_ctx->module_kernel_threads_max = MODULE_DEFAULT; module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; diff --git a/src/modules/module_26900.c b/src/modules/module_26900.c index 975a97c83..5282933a6 100644 --- a/src/modules/module_26900.c +++ b/src/modules/module_26900.c @@ -149,24 +149,6 @@ u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED c return tmp_size; } -u32 module_kernel_accel_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - // due to the large tmps structure - - const u32 kernel_accel_max = 256; - - return kernel_accel_max; -} - -u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - // due to the large tmps structure - - const u32 kernel_threads_max = 32; - - return kernel_threads_max; -} - u32 module_kernel_loops_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { // we need to fix iteration count to guarantee the loop count is a multiple of SNMPV3_MAX_PW_LENGTH @@ -401,11 +383,11 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook_size = MODULE_DEFAULT; module_ctx->module_jit_build_options = module_jit_build_options; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; - module_ctx->module_kernel_accel_max = module_kernel_accel_max; + module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; module_ctx->module_kernel_loops_max = module_kernel_loops_max; module_ctx->module_kernel_loops_min = module_kernel_loops_min; - module_ctx->module_kernel_threads_max = module_kernel_threads_max; + module_ctx->module_kernel_threads_max = MODULE_DEFAULT; module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; diff --git a/src/modules/module_27300.c b/src/modules/module_27300.c index 2514d95a1..535f7bc36 100644 --- a/src/modules/module_27300.c +++ b/src/modules/module_27300.c @@ -149,24 +149,6 @@ u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED c return tmp_size; } -u32 module_kernel_accel_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - // due to the large tmps structure - - const u32 kernel_accel_max = 256; - - return kernel_accel_max; -} - -u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - // due to the large tmps structure - - const u32 kernel_threads_max = 32; - - return kernel_threads_max; -} - u32 module_kernel_loops_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { // we need to fix iteration count to guarantee the loop count is a multiple of SNMPV3_MAX_PW_LENGTH @@ -397,11 +379,11 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_hook_size = MODULE_DEFAULT; module_ctx->module_jit_build_options = module_jit_build_options; module_ctx->module_jit_cache_disable = MODULE_DEFAULT; - module_ctx->module_kernel_accel_max = module_kernel_accel_max; + module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; module_ctx->module_kernel_loops_max = module_kernel_loops_max; module_ctx->module_kernel_loops_min = module_kernel_loops_min; - module_ctx->module_kernel_threads_max = module_kernel_threads_max; + module_ctx->module_kernel_threads_max = MODULE_DEFAULT; module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; diff --git a/src/modules/module_30901.c b/src/modules/module_30901.c index d5e424c7f..24c2b372d 100644 --- a/src/modules/module_30901.c +++ b/src/modules/module_30901.c @@ -24,7 +24,6 @@ static const char *HASH_NAME = "Bitcoin raw private key (P2PKH), compres static const u64 KERN_TYPE = 30901; static const u32 OPTI_TYPE = OPTI_TYPE_NOT_SALTED; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE - | OPTS_TYPE_NATIVE_THREADS | OPTS_TYPE_PT_GENERATE_LE; static const u32 SALT_TYPE = SALT_TYPE_NONE; static const char *ST_PASS = "59887ec9920239bd45b6a9f82b7c4e024f80beaf887e5ee6aac5de0a899d3068"; diff --git a/src/modules/module_30902.c b/src/modules/module_30902.c index 3c8306a39..ad4aab7db 100644 --- a/src/modules/module_30902.c +++ b/src/modules/module_30902.c @@ -24,7 +24,6 @@ static const char *HASH_NAME = "Bitcoin raw private key (P2PKH), uncompr static const u64 KERN_TYPE = 30902; static const u32 OPTI_TYPE = OPTI_TYPE_NOT_SALTED; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE - | OPTS_TYPE_NATIVE_THREADS | OPTS_TYPE_PT_GENERATE_LE; static const u32 SALT_TYPE = SALT_TYPE_NONE; static const char *ST_PASS = "2006a306cf8f61c18c4e78e5fc0f5a7aa473b5ffb41f34344a32f8e042786fa1"; diff --git a/src/modules/module_30903.c b/src/modules/module_30903.c index e48098d43..319871186 100644 --- a/src/modules/module_30903.c +++ b/src/modules/module_30903.c @@ -22,7 +22,6 @@ static const char *HASH_NAME = "Bitcoin raw private key (P2WPKH, Bech32) static const u64 KERN_TYPE = 30901; static const u32 OPTI_TYPE = OPTI_TYPE_NOT_SALTED; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE - | OPTS_TYPE_NATIVE_THREADS | OPTS_TYPE_PT_GENERATE_LE; static const u32 SALT_TYPE = SALT_TYPE_NONE; static const char *ST_PASS = "4d1987d7a341d51557af59996845740135ab2506515426ada57cc8ec05adf794"; diff --git a/src/modules/module_30904.c b/src/modules/module_30904.c index 309bf8b67..01681e5dd 100644 --- a/src/modules/module_30904.c +++ b/src/modules/module_30904.c @@ -22,7 +22,6 @@ static const char *HASH_NAME = "Bitcoin raw private key (P2WPKH, Bech32) static const u64 KERN_TYPE = 30902; static const u32 OPTI_TYPE = OPTI_TYPE_NOT_SALTED; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE - | OPTS_TYPE_NATIVE_THREADS | OPTS_TYPE_PT_GENERATE_LE; static const u32 SALT_TYPE = SALT_TYPE_NONE; static const char *ST_PASS = "25c9f8f734d87aacd9308705ca50b9819a57425ffbfae41cef869b19764d72c2"; diff --git a/src/modules/module_30905.c b/src/modules/module_30905.c index 2bae3bb29..352cb832d 100644 --- a/src/modules/module_30905.c +++ b/src/modules/module_30905.c @@ -24,7 +24,6 @@ static const char *HASH_NAME = "Bitcoin raw private key (P2SH(P2WPKH)), static const u64 KERN_TYPE = 30905; static const u32 OPTI_TYPE = OPTI_TYPE_NOT_SALTED; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE - | OPTS_TYPE_NATIVE_THREADS | OPTS_TYPE_PT_GENERATE_LE; static const u32 SALT_TYPE = SALT_TYPE_NONE; static const char *ST_PASS = "83b45ff8d85f37aafc05a8accd1f1cd5e50868b57e2ef0ef6f287bb4d8d17786"; diff --git a/src/modules/module_30906.c b/src/modules/module_30906.c index 1efb5bb65..982baa384 100644 --- a/src/modules/module_30906.c +++ b/src/modules/module_30906.c @@ -24,7 +24,6 @@ static const char *HASH_NAME = "Bitcoin raw private key (P2SH(P2WPKH)), static const u64 KERN_TYPE = 30906; static const u32 OPTI_TYPE = OPTI_TYPE_NOT_SALTED; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE - | OPTS_TYPE_NATIVE_THREADS | OPTS_TYPE_PT_GENERATE_LE; static const u32 SALT_TYPE = SALT_TYPE_NONE; static const char *ST_PASS = "4c969ccc86d9e1f557b4ff1f19badc9a99718dd2aec8fcf66460612e05f5f7dd"; diff --git a/src/shared.c b/src/shared.c index 3a4a1cfe2..f790d09fa 100644 --- a/src/shared.c +++ b/src/shared.c @@ -17,6 +17,7 @@ #if defined (__APPLE__) #include +#include #endif #if defined (_WIN) @@ -1619,3 +1620,83 @@ void restore_stderr (int saved_fd) close (saved_fd); } +bool get_free_memory (u64 *free_mem) +{ + #if defined(_WIN) || defined(__CYGWIN__) || defined(__MSYS__) + + MEMORYSTATUSEX memStatus; + + memStatus.dwLength = sizeof (memStatus); + + if (GlobalMemoryStatusEx (&memStatus)) + { + *free_mem = (u64) memStatus.ullAvailPhys; + + return true; + } + else + { + return false; + } + + #elif defined(__APPLE__) + + mach_port_t host_port = mach_host_self (); + + mach_msg_type_number_t count = HOST_VM_INFO_COUNT; + + vm_statistics_data_t vm_stat; + + if (host_statistics (host_port, HOST_VM_INFO, (host_info_t) &vm_stat, &count) != KERN_SUCCESS) + { + return false; + } + + int64_t page_size; + + host_page_size (host_port, (vm_size_t*) &page_size); + + *free_mem = (u64) (vm_stat.free_count + vm_stat.inactive_count) * page_size; + + return true; + + #elif defined(__linux__) + + FILE *fp = fopen ("/proc/meminfo", "r"); + + if (fp == NULL) return false; + + char line[256]; + + u64 memFree = 0; + u64 buffers = 0; + u64 cached = 0; + + while (fgets (line, sizeof (line), fp)) + { + if (sscanf (line, "MemFree: %lu kB", &memFree) == 1) + { + continue; + } + else if (sscanf (line, "Buffers: %lu kB", &buffers) == 1) + { + continue; + } + else if (sscanf (line, "Cached: %lu kB", &cached) == 1) + { + continue; + } + } + + fclose (fp); + + *free_mem = (memFree + buffers + cached) * 1024; + + return true; + + #else + + return false; + + #endif +} From 189e8acdf9ea60aea7aed1dc9b52397a999b5c4e Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Tue, 24 Jun 2025 22:21:47 +0200 Subject: [PATCH 90/95] Small tweak for new autotuner --- src/autotune.c | 107 ++++++++++++++++++++++++++++++++++++++++++++++++- src/shared.c | 1 + 2 files changed, 106 insertions(+), 2 deletions(-) diff --git a/src/autotune.c b/src/autotune.c index ca62bc957..cfde1abed 100644 --- a/src/autotune.c +++ b/src/autotune.c @@ -95,7 +95,11 @@ static double try_run_times (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *devi return exec_msec_best; } -/* +static bool is_power_of_2 (const u32 n) +{ + return n != 0 && (n & (n - 1)) == 0; +} + static u32 previous_power_of_two (const u32 x) { // https://stackoverflow.com/questions/2679815/previous-power-of-2 @@ -113,7 +117,23 @@ static u32 previous_power_of_two (const u32 x) return r - (r >> 1); } -*/ + +static u32 next_power_of_two (const u32 x) +{ + if (x == 0) return 1; + + u32 r = x - 1; + + r |= (r >> 1); + r |= (r >> 2); + r |= (r >> 4); + r |= (r >> 8); + r |= (r >> 16); + + r++; + + return r; +} static int autotune (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param) { @@ -416,6 +436,89 @@ static int autotune (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param if (kernel_accel > 64) kernel_accel -= kernel_accel % 32; } + // some final play, if we have strange numbers from the APIs, namely 96, 384, and such + + if (is_power_of_2 (kernel_threads) == false) + { + u32 fun[2]; + + fun[0] = previous_power_of_two (kernel_threads); + fun[1] = next_power_of_two (kernel_threads); + + float fact[2]; + + fact[0] = (float) kernel_threads / fun[0]; + fact[1] = (float) kernel_threads / fun[1]; + + float ms_prev = try_run_times (hashcat_ctx, device_param, kernel_accel, kernel_loops, kernel_threads, 2); + + float res[2]; + + for (int i = 0; i < 2; i++) + { + const float ms = try_run_times (hashcat_ctx, device_param, kernel_accel * fact[i], kernel_loops, fun[i], 2); + + res[i] = ms_prev / ms; + } + + const int sel = (res[0] > res[1]) ? 0 : 1; + + if (res[sel] > 1.01) + { + const u32 kernel_accel_new = kernel_accel * fact[sel]; + const u32 kernel_threads_new = fun[sel]; + + if ((kernel_accel_new >= kernel_accel_min) && (kernel_accel_new <= kernel_accel_max)) + { + // we can't check kernel_threads because that is for sure outside the range + + kernel_accel = kernel_accel_new; + kernel_threads = kernel_threads_new; + } + } + } + else + { + // that's also nice + + u32 fun[2]; + + fun[0] = kernel_threads >> 1; + fun[1] = kernel_threads << 1; + + float fact[2]; + + fact[0] = (float) kernel_threads / fun[0]; + fact[1] = (float) kernel_threads / fun[1]; + + float ms_prev = try_run_times (hashcat_ctx, device_param, kernel_accel, kernel_loops, kernel_threads, 2); + + float res[2]; + + for (int i = 0; i < 2; i++) + { + const float ms = try_run_times (hashcat_ctx, device_param, kernel_accel * fact[i], kernel_loops, fun[i], 2); + + res[i] = ms_prev / ms; + } + + const int sel = (res[0] > res[1]) ? 0 : 1; + + if (res[sel] > 1.01) + { + const u32 kernel_accel_new = kernel_accel * fact[sel]; + const u32 kernel_threads_new = fun[sel]; + + if ((kernel_accel_new >= kernel_accel_min) && (kernel_accel_new <= kernel_accel_max)) + { + // we can't check kernel_threads because that is for sure outside the range + + kernel_accel = kernel_accel_new; + kernel_threads = kernel_threads_new; + } + } + } + // reset them fake words // reset other buffers in case autotune cracked something diff --git a/src/shared.c b/src/shared.c index f790d09fa..a7d8dca4e 100644 --- a/src/shared.c +++ b/src/shared.c @@ -21,6 +21,7 @@ #endif #if defined (_WIN) +#include #include #endif From 45a3820560cdffbaa5abbfa5407c8f9bd88b44a8 Mon Sep 17 00:00:00 2001 From: lhywk Date: Wed, 25 Jun 2025 04:47:03 +0000 Subject: [PATCH 91/95] Fix: close server_fd on brain_server() --- src/brain.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/brain.c b/src/brain.c index fbb1f206a..88b896c55 100644 --- a/src/brain.c +++ b/src/brain.c @@ -3052,6 +3052,8 @@ int brain_server (const char *listen_host, const int listen_port, const char *br { brain_logging (stderr, 0, "setsockopt: %s\n", strerror (errno)); + close(server_fd); + if (brain_password == NULL) hcfree (auth_password); return -1; @@ -3061,6 +3063,8 @@ int brain_server (const char *listen_host, const int listen_port, const char *br { brain_logging (stderr, 0, "setsockopt: %s\n", strerror (errno)); + close(server_fd); + if (brain_password == NULL) hcfree (auth_password); return -1; @@ -3104,6 +3108,8 @@ int brain_server (const char *listen_host, const int listen_port, const char *br { brain_logging (stderr, 0, "%s: %s\n", listen_host, gai_strerror (rc_getaddrinfo)); + close(server_fd); + if (brain_password == NULL) hcfree (auth_password); return -1; @@ -3114,6 +3120,8 @@ int brain_server (const char *listen_host, const int listen_port, const char *br { brain_logging (stderr, 0, "bind: %s\n", strerror (errno)); + close(server_fd); + if (brain_password == NULL) hcfree (auth_password); return -1; @@ -3123,6 +3131,8 @@ int brain_server (const char *listen_host, const int listen_port, const char *br { brain_logging (stderr, 0, "listen: %s\n", strerror (errno)); + close(server_fd); + if (brain_password == NULL) hcfree (auth_password); return -1; From 62a5a85dd6565e118191ed68bca854c09068dfcb Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Wed, 25 Jun 2025 11:21:51 +0200 Subject: [PATCH 92/95] Added 'next_power_of_two()' and moved both 'next_power_of_two()' and 'previous_power_of_two()' to 'shared.c' Improved autotuner tweak logic and added boundary checks for accel and threads Fixed available host memory detection on Windows Fixed compilation error in MSYS2 native shell Introduced an 8 GiB host memory usage limit per GPU, even if more is available Replaced fixed-size host memory detection per GPU with a dynamic kernel-accel based method (similar to GPU memory detection) Disabled hash-mode autodetection in the python bridge Removed default invocation of 'rocm-smi' in 'benchmark_deep.pl' to avoid skewed initial results Reduced default runtime in 'benchmark_deep.pl' scripts due to improved benchmark accuracy in hashcat in general --- include/shared.h | 3 + src/autotune.c | 164 ++++++++++++------------------------- src/backend.c | 69 +++++++--------- src/modules/module_72000.c | 1 + src/modules/module_73000.c | 1 + src/shared.c | 87 +++++++++++--------- tools/benchmark_deep.pl | 8 +- 7 files changed, 139 insertions(+), 194 deletions(-) diff --git a/include/shared.h b/include/shared.h index 013cb1157..ae968281c 100644 --- a/include/shared.h +++ b/include/shared.h @@ -122,4 +122,7 @@ void restore_stderr (int saved_fd); bool get_free_memory (u64 *free_mem); +u32 previous_power_of_two (const u32 x); +u32 next_power_of_two (const u32 x); + #endif // HC_SHARED_H diff --git a/src/autotune.c b/src/autotune.c index cfde1abed..8030d878a 100644 --- a/src/autotune.c +++ b/src/autotune.c @@ -8,6 +8,7 @@ #include "event.h" #include "backend.h" #include "status.h" +#include "shared.h" #include "autotune.h" int find_tuning_function (hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED hc_device_param_t *device_param) @@ -95,46 +96,6 @@ static double try_run_times (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *devi return exec_msec_best; } -static bool is_power_of_2 (const u32 n) -{ - return n != 0 && (n & (n - 1)) == 0; -} - -static u32 previous_power_of_two (const u32 x) -{ - // https://stackoverflow.com/questions/2679815/previous-power-of-2 - // really cool! - - if (x == 0) return 0; - - u32 r = x; - - r |= (r >> 1); - r |= (r >> 2); - r |= (r >> 4); - r |= (r >> 8); - r |= (r >> 16); - - return r - (r >> 1); -} - -static u32 next_power_of_two (const u32 x) -{ - if (x == 0) return 1; - - u32 r = x - 1; - - r |= (r >> 1); - r |= (r >> 2); - r |= (r >> 4); - r |= (r >> 8); - r |= (r >> 16); - - r++; - - return r; -} - static int autotune (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param) { const hashconfig_t *hashconfig = hashcat_ctx->hashconfig; @@ -434,87 +395,70 @@ static int autotune (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param } if (kernel_accel > 64) kernel_accel -= kernel_accel % 32; - } - // some final play, if we have strange numbers from the APIs, namely 96, 384, and such - - if (is_power_of_2 (kernel_threads) == false) - { - u32 fun[2]; - - fun[0] = previous_power_of_two (kernel_threads); - fun[1] = next_power_of_two (kernel_threads); - - float fact[2]; - - fact[0] = (float) kernel_threads / fun[0]; - fact[1] = (float) kernel_threads / fun[1]; - - float ms_prev = try_run_times (hashcat_ctx, device_param, kernel_accel, kernel_loops, kernel_threads, 2); - - float res[2]; - - for (int i = 0; i < 2; i++) + if (device_param->opencl_device_type & CL_DEVICE_TYPE_CPU) { - const float ms = try_run_times (hashcat_ctx, device_param, kernel_accel * fact[i], kernel_loops, fun[i], 2); - - res[i] = ms_prev / ms; + if (kernel_accel > device_param->device_processors) kernel_accel -= kernel_accel % device_param->device_processors; } - const int sel = (res[0] > res[1]) ? 0 : 1; + // some final play, if we have strange numbers from the APIs, namely 96, 384, and such - if (res[sel] > 1.01) + if ((kernel_accel_min == kernel_accel_max) || (kernel_threads_min == kernel_threads_max)) { - const u32 kernel_accel_new = kernel_accel * fact[sel]; - const u32 kernel_threads_new = fun[sel]; + } + else + { + u32 fun[2]; - if ((kernel_accel_new >= kernel_accel_min) && (kernel_accel_new <= kernel_accel_max)) + if (is_power_of_2 (kernel_threads) == false) { - // we can't check kernel_threads because that is for sure outside the range - - kernel_accel = kernel_accel_new; - kernel_threads = kernel_threads_new; + fun[0] = previous_power_of_two (kernel_threads); + fun[1] = next_power_of_two (kernel_threads); } - } - } - else - { - // that's also nice - - u32 fun[2]; - - fun[0] = kernel_threads >> 1; - fun[1] = kernel_threads << 1; - - float fact[2]; - - fact[0] = (float) kernel_threads / fun[0]; - fact[1] = (float) kernel_threads / fun[1]; - - float ms_prev = try_run_times (hashcat_ctx, device_param, kernel_accel, kernel_loops, kernel_threads, 2); - - float res[2]; - - for (int i = 0; i < 2; i++) - { - const float ms = try_run_times (hashcat_ctx, device_param, kernel_accel * fact[i], kernel_loops, fun[i], 2); - - res[i] = ms_prev / ms; - } - - const int sel = (res[0] > res[1]) ? 0 : 1; - - if (res[sel] > 1.01) - { - const u32 kernel_accel_new = kernel_accel * fact[sel]; - const u32 kernel_threads_new = fun[sel]; - - if ((kernel_accel_new >= kernel_accel_min) && (kernel_accel_new <= kernel_accel_max)) + else { - // we can't check kernel_threads because that is for sure outside the range + fun[0] = kernel_threads >> 1; + fun[1] = kernel_threads << 1; + } - kernel_accel = kernel_accel_new; - kernel_threads = kernel_threads_new; + float fact[2]; + + fact[0] = (float) kernel_threads / fun[0]; + fact[1] = (float) kernel_threads / fun[1]; + + float ms_prev = try_run_times (hashcat_ctx, device_param, kernel_accel, kernel_loops, kernel_threads, 2); + + float res[2] = { 0 }; + + for (int i = 0; i < 2; i++) + { + const u32 kernel_threads_test = fun[i]; + const u32 kernel_accel_test = kernel_accel * fact[i]; + + if (kernel_accel_test == 0) continue; + if (kernel_threads_test == 0) continue; + + if (kernel_threads_test > device_param->device_maxworkgroup_size) continue; + + const float ms = try_run_times (hashcat_ctx, device_param, kernel_accel_test, kernel_loops, kernel_threads_test, 2); + + res[i] = ms_prev / ms; + } + + const int sel = (res[0] > res[1]) ? 0 : 1; + + if (res[sel] > 1.01) + { + const u32 kernel_accel_new = kernel_accel * fact[sel]; + const u32 kernel_threads_new = fun[sel]; + + if ((kernel_accel_new >= kernel_accel_min) && (kernel_accel_new <= kernel_accel_max)) + { + // we can't check kernel_threads because that is for sure outside the range + + kernel_accel = kernel_accel_new; + kernel_threads = kernel_threads_new; + } } } } diff --git a/src/backend.c b/src/backend.c index a71bac223..cc0be63ad 100644 --- a/src/backend.c +++ b/src/backend.c @@ -15996,49 +15996,23 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) // check if there's enough host memory left for upcoming allocations, otherwise reduce skip device and present user an option to deal with - u64 accel_limit = 0; + u64 accel_limit_host = 0; - get_free_memory (&accel_limit); - - // in slow candidate mode we need to keep the buffers on the host alive - // a high accel value doesn't help much here anyway - - if (user_options->slow_candidates == true) + if (get_free_memory (&accel_limit_host) == false) { - // Tested with NTLM, almost no difference in performance + const u64 GiB4 = 4ULL * 1024 * 1024 * 1024; - accel_limit /= 8; + event_log_warning (hashcat_ctx, "Couldn't query the OS for free memory, assuming 4GiB"); + + accel_limit_host = GiB4; } - - // this is device_processors * kernel_threads - - accel_limit /= hardware_power_max; - - // single password candidate size - - accel_limit /= sizeof (pw_t); - - // pws[], pws_comp[] and pw_pre[] are some large blocks with password candidates - - accel_limit /= 3; - - // Is possible that the GPU simply has too much hardware resources and 8GB per GPU is not enough, but OTOH we can't get lower than 1 - - accel_limit = MAX (accel_limit, 1); - - // I think vector size is not required because vector_size is dividing the pws_cnt in run_kernel() - - kernel_accel_max = MIN (kernel_accel_max, accel_limit); - - if (kernel_accel_min > kernel_accel_max) + else { - event_log_error (hashcat_ctx, "* Device #%u: Not enough host memory left for this device, skipping...", device_id + 1); - event_log_error (hashcat_ctx, " Retry with lower --kernel-threads value."); + // even tho let's not be greedy - backend_kernel_accel_warnings++; + const u64 GiB8 = 8ULL * 1024 * 1024 * 1024; - device_param->skipped_warning = true; - continue; + accel_limit_host = MIN (accel_limit_host, GiB8); } // Opposite direction check: find out if we would request too much memory on memory blocks which are based on kernel_accel @@ -16184,6 +16158,8 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) if (size_kernel_params > undocumented_single_allocation_apple) memory_limit_hit = 1; } + const u64 size_device_extra = (1024 * 1024 * 1024); + const u64 size_total = bitmap_ctx->bitmap_size + bitmap_ctx->bitmap_size @@ -16220,9 +16196,10 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) + size_st_salts + size_st_esalts + size_kernel_params - + size_spilling; + + size_spilling + + size_device_extra; - if ((size_total + EXTRA_SPACE) > device_param->device_available_mem) memory_limit_hit = 1; + if ((size_total + EXTRA_SPACE) > MIN (device_param->device_available_mem, device_param->device_maxmem_alloc)) memory_limit_hit = 1; if (memory_limit_hit == 1) { @@ -16231,6 +16208,8 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) continue; } + const u64 size_host_extra = (512 * 1024 * 1024); + const u64 size_total_host = size_pws_comp + size_pws_idx @@ -16240,7 +16219,17 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) + size_brain_link_out #endif + size_pws_pre - + size_pws_base; + + size_pws_base + + size_host_extra; + + if ((size_total_host + EXTRA_SPACE) > accel_limit_host) memory_limit_hit = 1; + + if (memory_limit_hit == 1) + { + kernel_accel_max--; + + continue; + } size_total_host_all += size_total_host; @@ -16249,7 +16238,7 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) if (kernel_accel_max < kernel_accel_min) { - event_log_error (hashcat_ctx, "* Device #%u: Not enough allocatable device memory for this attack.", device_id + 1); + event_log_error (hashcat_ctx, "* Device #%u: Not enough allocatable device memory or free host memory for mapping.", device_id + 1); backend_memory_hit_warnings++; diff --git a/src/modules/module_72000.c b/src/modules/module_72000.c index a1268759e..d9995764c 100644 --- a/src/modules/module_72000.c +++ b/src/modules/module_72000.c @@ -25,6 +25,7 @@ static const u64 KERN_TYPE = 72000; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_LE + | OPTS_TYPE_AUTODETECT_DISABLE | OPTS_TYPE_NATIVE_THREADS | OPTS_TYPE_MP_MULTI_DISABLE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; diff --git a/src/modules/module_73000.c b/src/modules/module_73000.c index f8516ce00..351893f26 100644 --- a/src/modules/module_73000.c +++ b/src/modules/module_73000.c @@ -25,6 +25,7 @@ static const u64 KERN_TYPE = 73000; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_LE + | OPTS_TYPE_AUTODETECT_DISABLE | OPTS_TYPE_NATIVE_THREADS | OPTS_TYPE_MP_MULTI_DISABLE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; diff --git a/src/shared.c b/src/shared.c index a7d8dca4e..3c4f9c43f 100644 --- a/src/shared.c +++ b/src/shared.c @@ -21,13 +21,12 @@ #endif #if defined (_WIN) -#include #include #endif -#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__MSYS__) -#else +#if defined (_POSIX) #include +#include #endif static const char *const PA_000 = "OK"; @@ -1462,13 +1461,13 @@ int generic_salt_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, const u8 * return tmp_len; } -int get_current_arch() +int get_current_arch () { - #if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__MSYS__) + #if defined (_WIN) SYSTEM_INFO sysinfo; - GetNativeSystemInfo(&sysinfo); + GetNativeSystemInfo (&sysinfo); switch (sysinfo.wProcessorArchitecture) { @@ -1623,7 +1622,7 @@ void restore_stderr (int saved_fd) bool get_free_memory (u64 *free_mem) { - #if defined(_WIN) || defined(__CYGWIN__) || defined(__MSYS__) + #if defined (_WIN) MEMORYSTATUSEX memStatus; @@ -1640,7 +1639,7 @@ bool get_free_memory (u64 *free_mem) return false; } - #elif defined(__APPLE__) + #elif defined (__APPLE__) mach_port_t host_port = mach_host_self (); @@ -1661,43 +1660,51 @@ bool get_free_memory (u64 *free_mem) return true; - #elif defined(__linux__) + #else - FILE *fp = fopen ("/proc/meminfo", "r"); + struct sysinfo info; - if (fp == NULL) return false; + if (sysinfo (&info) != 0) return false; - char line[256]; - - u64 memFree = 0; - u64 buffers = 0; - u64 cached = 0; - - while (fgets (line, sizeof (line), fp)) - { - if (sscanf (line, "MemFree: %lu kB", &memFree) == 1) - { - continue; - } - else if (sscanf (line, "Buffers: %lu kB", &buffers) == 1) - { - continue; - } - else if (sscanf (line, "Cached: %lu kB", &cached) == 1) - { - continue; - } - } - - fclose (fp); - - *free_mem = (memFree + buffers + cached) * 1024; + *free_mem = (u64) info.freeram * info.mem_unit; return true; - #else - - return false; - #endif } + +u32 previous_power_of_two (const u32 x) +{ + // https://stackoverflow.com/questions/2679815/previous-power-of-2 + // really cool! + + if (x == 0) return 0; + + u32 r = x; + + r |= (r >> 1); + r |= (r >> 2); + r |= (r >> 4); + r |= (r >> 8); + r |= (r >> 16); + + return r - (r >> 1); +} + +u32 next_power_of_two (const u32 x) +{ + if (x == 0) return 1; + + u32 r = x - 1; + + r |= (r >> 1); + r |= (r >> 2); + r |= (r >> 4); + r |= (r >> 8); + r |= (r >> 16); + + r++; + + return r; +} + diff --git a/tools/benchmark_deep.pl b/tools/benchmark_deep.pl index b75d371a0..f6369e995 100755 --- a/tools/benchmark_deep.pl +++ b/tools/benchmark_deep.pl @@ -15,8 +15,8 @@ my $kernels_cache = "$hashcat_path/kernels"; my $hashcat_bin = "$hashcat_path/hashcat"; my $device = 1; my $workload_profile = 3; -my $runtime = 24; -my $sleep_sec = 12; +my $runtime = 11; +my $sleep_sec = 13; my $default_mask = "?a?a?a?a?a?a?a"; my $result = "result.txt"; my $old_hashcat = 0; # requires to have ran with new hashcat before to create the hashfiles @@ -34,8 +34,8 @@ if ($cpu_benchmark == 1) } else { - #system ("rocm-smi --resetprofile --resetclocks --resetfans"); - system ("rocm-smi --setfan 100% --setperflevel high"); + #system ("rocm-smi --resetprofile --resetclocks --resetfans"); + #system ("rocm-smi --setfan 100% --setperflevel high"); system ("nvidia-settings -a GPUPowerMizerMode=1 -a GPUFanControlState=1 -a GPUTargetFanSpeed=100"); } From 58fa783095cace2ec6cf4962f86898a3520c38d9 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Wed, 25 Jun 2025 22:10:29 +0200 Subject: [PATCH 93/95] Enhanced the auto-tune engine: when a kernel runs with a single thread and no accel, it should finish quickly (ideally under 1 ms). If it doesn't, the kernel is likely overloaded with code. If such a kernel also uses barriers (e.g., to load shared storage with multiple threads), high iteration counts cause unnecessary thread waiting. To address this, we now skip increasing the loop count if the runtime exceeds either 1/8 of the target time (based on the -w setting) or a hard-coded threshold of 4 ms. Improved shared memory handling for -m 10700. Removed the hard-coded limit of 256 threads and now dynamically check the device's shared memory pool to adapt threads accordingly. Implemented a feature request to display non-default session names early during startup. Added a check for the number of registers required by a kernel (CUDA and HIP only). This allows us to estimate the max threads per block before entering the auto-tune engine and make pre-adjustments. Fixed Metal command encoder argument to work with the new auto-tuner's extra kernel invocation. Fixed incorrect host memory calculation logic during automatic kernel-accel reduction for scrypt-based algorithms. This ensures memory constraints are respected. Improved several plugins by setting maximum loop counts and others using the OPTS_TYPE_NATIVE_THREADS option. Fixed compilation on Apple platforms by excluding '#include '. --- OpenCL/m10700-optimized.cl | 2 +- include/types.h | 1 + src/autotune.c | 13 +++--- src/backend.c | 86 +++++++++++++++++++++++++++++--------- src/modules/module_10700.c | 86 +++++++++++++++++++++++--------------- src/modules/module_14000.c | 1 + src/modules/module_25000.c | 1 + src/modules/module_25100.c | 1 + src/modules/module_25200.c | 1 + src/modules/module_26700.c | 1 + src/modules/module_26800.c | 1 + src/modules/module_26900.c | 1 + src/modules/module_27300.c | 1 + src/shared.c | 2 + src/terminal.c | 19 +++++---- src/user_options.c | 3 +- 16 files changed, 153 insertions(+), 67 deletions(-) diff --git a/OpenCL/m10700-optimized.cl b/OpenCL/m10700-optimized.cl index deb9870b0..b665dbbf3 100644 --- a/OpenCL/m10700-optimized.cl +++ b/OpenCL/m10700-optimized.cl @@ -666,7 +666,7 @@ KERNEL_FQ KERNEL_FA void m10700_loop (KERN_ATTR_TMPS_ESALT (pdf17l8_tmp_t, pdf_t ctx.dgst_len = tmps[gid].dgst_len; ctx.W_len = tmps[gid].W_len; - LOCAL_VK u32 s_sc[256][PWMAXSZ4 + BLMAXSZ4 + AESSZ4]; + LOCAL_VK u32 s_sc[FIXED_LOCAL_SIZE][PWMAXSZ4 + BLMAXSZ4 + AESSZ4]; u32 ex = 0; diff --git a/include/types.h b/include/types.h index a9ef1f229..0456736c6 100644 --- a/include/types.h +++ b/include/types.h @@ -2404,6 +2404,7 @@ typedef struct user_options bool separator_chgd; bool rule_buf_l_chgd; bool rule_buf_r_chgd; + bool session_chgd; bool advice; bool benchmark; diff --git a/src/autotune.c b/src/autotune.c index 8030d878a..25a97fe35 100644 --- a/src/autotune.c +++ b/src/autotune.c @@ -336,12 +336,15 @@ static int autotune (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param //printf ("loop %f %u %u %u\n", exec_msec, kernel_accel_min, kernel_loops_test, kernel_threads_min); if (exec_msec > target_msec) break; - if (kernel_loops >= 32) - { - // we want a little room for threads to play with so not full target_msec + // we want a little room for threads to play with so not full target_msec - if (exec_msec > target_msec / 8) break; - } + if (exec_msec > target_msec / 8) break; + + // in general, an unparallelized kernel should not run that long. + // if the kernel uses barriers it will have a bad impact on performance. + // streebog is a good testing example + + if (exec_msec > 4) break; kernel_loops = kernel_loops_test; } diff --git a/src/backend.c b/src/backend.c index cc0be63ad..7d3eca338 100644 --- a/src/backend.c +++ b/src/backend.c @@ -222,6 +222,15 @@ int opencl_query_max_local_size_bytes (hashcat_ctx_t *hashcat_ctx, hc_device_par return (int) max_local_size_bytes; } +int hip_query_num_regs (hashcat_ctx_t *hashcat_ctx, hipFunction_t hip_function) +{ + int num_regs = 0; + + if (hc_hipFuncGetAttribute (hashcat_ctx, &num_regs, HIP_FUNC_ATTRIBUTE_NUM_REGS, hip_function) == -1) return -1; + + return num_regs; +} + int hip_query_threads_per_block (hashcat_ctx_t *hashcat_ctx, hipFunction_t hip_function) { int threads_per_block = 0; @@ -253,6 +262,15 @@ int hip_query_max_local_size_bytes (hashcat_ctx_t *hashcat_ctx, hc_device_param_ return max_local_size_bytes; } +int cuda_query_num_regs (hashcat_ctx_t *hashcat_ctx, CUfunction cuda_function) +{ + int num_regs = 0; + + if (hc_cuFuncGetAttribute (hashcat_ctx, &num_regs, CU_FUNC_ATTRIBUTE_NUM_REGS, cuda_function) == -1) return -1; + + return num_regs; +} + int cuda_query_threads_per_block (hashcat_ctx_t *hashcat_ctx, CUfunction cuda_function) { int threads_per_block = 0; @@ -2783,18 +2801,17 @@ int run_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, con if (hc_mtlEncodeComputeCommand_pre (hashcat_ctx, metal_pipeline, device_param->metal_command_queue, &metal_command_buffer, &metal_command_encoder) == -1) return -1; - // all buffers must be allocated - int tmp_buf_cnt = 0; - mtl_mem tmp_buf[25] = { 0 }; + mtl_mem metal_buffer = NULL; + if (hc_mtlCreateBuffer (hashcat_ctx, device_param->metal_device, sizeof (u8), NULL, &metal_buffer) == -1) return -1; + + // all buffers must be allocated for (u32 i = 0; i <= 24; i++) { // allocate fake buffer if NULL if (device_param->kernel_params[i] == NULL) { - if (hc_mtlCreateBuffer (hashcat_ctx, device_param->metal_device, sizeof (u8), NULL, &tmp_buf[tmp_buf_cnt]) == -1) return -1; - if (hc_mtlSetCommandEncoderArg (hashcat_ctx, metal_command_encoder, 0, i, tmp_buf[tmp_buf_cnt], NULL, 0) == -1) return -1; - tmp_buf_cnt++; + if (hc_mtlSetCommandEncoderArg (hashcat_ctx, metal_command_encoder, 0, i, metal_buffer, NULL, 0) == -1) return -1; } else { @@ -2855,6 +2872,19 @@ int run_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, con // hc_mtlEncodeComputeCommand_pre() must be called before every hc_mtlEncodeComputeCommand() if (hc_mtlEncodeComputeCommand_pre (hashcat_ctx, metal_pipeline, device_param->metal_command_queue, &metal_command_buffer, &metal_command_encoder) == -1) return -1; + + for (u32 i = 0; i <= 24; i++) + { + // allocate fake buffer if NULL + if (device_param->kernel_params[i] == NULL) + { + if (hc_mtlSetCommandEncoderArg (hashcat_ctx, metal_command_encoder, 0, i, metal_buffer, NULL, 0) == -1) return -1; + } + else + { + if (hc_mtlSetCommandEncoderArg (hashcat_ctx, metal_command_encoder, 0, i, device_param->kernel_params[i], NULL, 0) == -1) return -1; + } + } } const int rc_cc = hc_mtlEncodeComputeCommand (hashcat_ctx, metal_command_encoder, metal_command_buffer, global_work_size[0], local_work_size[0], &ms); @@ -2882,12 +2912,6 @@ int run_kernel (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param, con // release tmp_buf - for (int i = 0; i < tmp_buf_cnt; i++) - { - hc_mtlReleaseMemObject (hashcat_ctx, tmp_buf[i]); - tmp_buf[i] = NULL; - } - if (rc_cc == -1) return -1; } #endif // __APPLE__ @@ -15913,6 +15937,17 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) CUfunction func = cuda_function_with_id (device_param, kern_run); threads_per_block = cuda_query_threads_per_block (hashcat_ctx, func); + + const u32 num_regs = cuda_query_num_regs (hashcat_ctx, func); + + if (num_regs) + { + u32 threads_per_block_with_regs = (floor) ((float) device_param->regsPerBlock / num_regs); + + if (threads_per_block_with_regs > device_param->kernel_preferred_wgs_multiple) threads_per_block_with_regs -= threads_per_block_with_regs % device_param->kernel_preferred_wgs_multiple; + + threads_per_block = MIN (threads_per_block, threads_per_block_with_regs); + } } else if (device_param->is_hip == true) { @@ -15921,6 +15956,17 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) hipFunction_t func = hip_function_with_id (device_param, kern_run); threads_per_block = hip_query_threads_per_block (hashcat_ctx, func); + + const u32 num_regs = hip_query_num_regs (hashcat_ctx, func); + + if (num_regs) + { + u32 threads_per_block_with_regs = (floor) ((float) device_param->regsPerBlock / num_regs); + + if (threads_per_block_with_regs > device_param->kernel_preferred_wgs_multiple) threads_per_block_with_regs -= threads_per_block_with_regs % device_param->kernel_preferred_wgs_multiple; + + threads_per_block = MIN (threads_per_block, threads_per_block_with_regs); + } } else if (device_param->is_opencl == true) { @@ -15929,6 +15975,8 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) cl_kernel kernel = opencl_kernel_with_id (device_param, kern_run); threads_per_block = opencl_query_threads_per_block (hashcat_ctx, device_param, kernel); + + // num_regs check should be included in opencl's CL_KERNEL_WORK_GROUP_SIZE } else if (device_param->is_metal == true) { @@ -16052,6 +16100,10 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) } } + const u64 size_device_extra1234 = size_extra_buffer1 + size_extra_buffer2 + size_extra_buffer3 + size_extra_buffer4; + + const u64 size_device_extra = MAX ((1024 * 1024 * 1024), size_device_extra1234); + while (kernel_accel_max >= kernel_accel_min) { const u64 kernel_power_max = hardware_power_max * kernel_accel_max; @@ -16158,8 +16210,6 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) if (size_kernel_params > undocumented_single_allocation_apple) memory_limit_hit = 1; } - const u64 size_device_extra = (1024 * 1024 * 1024); - const u64 size_total = bitmap_ctx->bitmap_size + bitmap_ctx->bitmap_size @@ -16185,10 +16235,7 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) + size_rules + size_rules_c + size_salts - + size_extra_buffer1 - + size_extra_buffer2 - + size_extra_buffer3 - + size_extra_buffer4 + + size_device_extra + size_shown + size_tm + size_tmps @@ -16196,8 +16243,7 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) + size_st_salts + size_st_esalts + size_kernel_params - + size_spilling - + size_device_extra; + + size_spilling; if ((size_total + EXTRA_SPACE) > MIN (device_param->device_available_mem, device_param->device_maxmem_alloc)) memory_limit_hit = 1; diff --git a/src/modules/module_10700.c b/src/modules/module_10700.c index c19918a53..4a7725e52 100644 --- a/src/modules/module_10700.c +++ b/src/modules/module_10700.c @@ -81,6 +81,30 @@ typedef struct pdf17l8_tmp static const char *SIGNATURE_PDF = "$pdf$"; static const int ROUNDS_PDF17L8 = 64; +u32 module_kernel_loops_min (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + u32 kernel_loops_min = KERNEL_LOOPS_MIN; + + if (hashconfig->opti_type & OPTI_TYPE_OPTIMIZED_KERNEL) + { + kernel_loops_min = 1; + } + + return kernel_loops_min; +} + +u32 module_kernel_loops_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) +{ + u32 kernel_loops_max = KERNEL_LOOPS_MAX; + + if (hashconfig->opti_type & OPTI_TYPE_OPTIMIZED_KERNEL) + { + kernel_loops_max = 1; + } + + return kernel_loops_max; +} + bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) { if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) @@ -126,44 +150,40 @@ u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED con return pw_max; } -u32 module_kernel_threads_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) -{ - const bool optimized_kernel = (hashconfig->opti_type & OPTI_TYPE_OPTIMIZED_KERNEL); - - u32 kernel_threads_max = KERNEL_THREADS_MAX; - - if (optimized_kernel == true) - { - kernel_threads_max = 256; - } - - return kernel_threads_max; -} - char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) { char *jit_build_options = NULL; - if (device_param->is_metal == true) + if (hashconfig->opti_type & OPTI_TYPE_OPTIMIZED_KERNEL) { - hc_asprintf (&jit_build_options, "-D FORCE_DISABLE_SHM"); - } + u32 native_threads = 0; - if ((device_param->opencl_device_vendor_id == VENDOR_ID_AMD) && (device_param->has_vperm == false)) - { - // this is a workaround to avoid a Segmentation fault and self-test fails on AMD GPU PRO - - hc_asprintf (&jit_build_options, "-cl-opt-disable"); - } - - if ((device_param->opencl_device_vendor_id == VENDOR_ID_AMD) && (device_param->has_vperm == true)) - { - if ((hashconfig->opti_type & OPTI_TYPE_OPTIMIZED_KERNEL) == 0) + if (device_param->opencl_device_type & CL_DEVICE_TYPE_CPU) { - // this is a workaround to avoid a compile time of over an hour (and then to not work) on ROCM in pure kernel mode - - hc_asprintf (&jit_build_options, "-cl-opt-disable"); + native_threads = 1; } + else if (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU) + { + #if defined (__APPLE__) + + native_threads = 32; + + #else + + if (device_param->device_local_mem_size < 49152) + { + native_threads = MIN (device_param->kernel_preferred_wgs_multiple, 32); // We can't just set 32, because Intel GPU need 8 + } + else + { + // to go over 48KiB, we need to use dynamic shared mem + native_threads = 49152 / 128; + } + + #endif + } + + hc_asprintf (&jit_build_options, "-D FIXED_LOCAL_SIZE=%u -D _unroll", native_threads); } return jit_build_options; @@ -397,9 +417,9 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_jit_cache_disable = MODULE_DEFAULT; module_ctx->module_kernel_accel_max = MODULE_DEFAULT; module_ctx->module_kernel_accel_min = MODULE_DEFAULT; - module_ctx->module_kernel_loops_max = MODULE_DEFAULT; - module_ctx->module_kernel_loops_min = MODULE_DEFAULT; - module_ctx->module_kernel_threads_max = module_kernel_threads_max; + module_ctx->module_kernel_loops_max = module_kernel_loops_max; + module_ctx->module_kernel_loops_min = module_kernel_loops_min; + module_ctx->module_kernel_threads_max = MODULE_DEFAULT; module_ctx->module_kernel_threads_min = MODULE_DEFAULT; module_ctx->module_kern_type = module_kern_type; module_ctx->module_kern_type_dynamic = MODULE_DEFAULT; diff --git a/src/modules/module_14000.c b/src/modules/module_14000.c index bc23c05bd..bb8c141e8 100644 --- a/src/modules/module_14000.c +++ b/src/modules/module_14000.c @@ -23,6 +23,7 @@ static const u64 KERN_TYPE = 14000; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE | OPTS_TYPE_PT_GENERATE_LE + | OPTS_TYPE_NATIVE_THREADS | OPTS_TYPE_TM_KERNEL | OPTS_TYPE_ST_HEX; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; diff --git a/src/modules/module_25000.c b/src/modules/module_25000.c index 86681ea80..ebafcb331 100644 --- a/src/modules/module_25000.c +++ b/src/modules/module_25000.c @@ -23,6 +23,7 @@ static const char *HASH_NAME = "SNMPv3 HMAC-MD5-96/HMAC-SHA1-96"; static const u64 KERN_TYPE = 25000; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE + | OPTS_TYPE_NATIVE_THREADS | OPTS_TYPE_PT_GENERATE_LE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat1"; diff --git a/src/modules/module_25100.c b/src/modules/module_25100.c index 65ecce1ce..29e2592e9 100644 --- a/src/modules/module_25100.c +++ b/src/modules/module_25100.c @@ -23,6 +23,7 @@ static const char *HASH_NAME = "SNMPv3 HMAC-MD5-96"; static const u64 KERN_TYPE = 25100; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE + | OPTS_TYPE_NATIVE_THREADS | OPTS_TYPE_PT_GENERATE_LE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat1"; diff --git a/src/modules/module_25200.c b/src/modules/module_25200.c index eecaaa9e7..27740b6bf 100644 --- a/src/modules/module_25200.c +++ b/src/modules/module_25200.c @@ -23,6 +23,7 @@ static const char *HASH_NAME = "SNMPv3 HMAC-SHA1-96"; static const u64 KERN_TYPE = 25200; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE + | OPTS_TYPE_NATIVE_THREADS | OPTS_TYPE_PT_GENERATE_LE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat1"; diff --git a/src/modules/module_26700.c b/src/modules/module_26700.c index e802726f6..63854c0d2 100644 --- a/src/modules/module_26700.c +++ b/src/modules/module_26700.c @@ -23,6 +23,7 @@ static const char *HASH_NAME = "SNMPv3 HMAC-SHA224-128"; static const u64 KERN_TYPE = 26700; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE + | OPTS_TYPE_NATIVE_THREADS | OPTS_TYPE_PT_GENERATE_LE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat1"; diff --git a/src/modules/module_26800.c b/src/modules/module_26800.c index 7363bedff..024bfa636 100644 --- a/src/modules/module_26800.c +++ b/src/modules/module_26800.c @@ -23,6 +23,7 @@ static const char *HASH_NAME = "SNMPv3 HMAC-SHA256-192"; static const u64 KERN_TYPE = 26800; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE + | OPTS_TYPE_NATIVE_THREADS | OPTS_TYPE_PT_GENERATE_LE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat1"; diff --git a/src/modules/module_26900.c b/src/modules/module_26900.c index 5282933a6..8d916ebf2 100644 --- a/src/modules/module_26900.c +++ b/src/modules/module_26900.c @@ -24,6 +24,7 @@ static const u64 KERN_TYPE = 26900; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE | OPTI_TYPE_USES_BITS_64; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE + | OPTS_TYPE_NATIVE_THREADS | OPTS_TYPE_PT_GENERATE_LE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat1"; diff --git a/src/modules/module_27300.c b/src/modules/module_27300.c index 535f7bc36..ff20acc9d 100644 --- a/src/modules/module_27300.c +++ b/src/modules/module_27300.c @@ -24,6 +24,7 @@ static const u64 KERN_TYPE = 27300; static const u32 OPTI_TYPE = OPTI_TYPE_ZERO_BYTE | OPTI_TYPE_USES_BITS_64; static const u64 OPTS_TYPE = OPTS_TYPE_STOCK_MODULE + | OPTS_TYPE_NATIVE_THREADS | OPTS_TYPE_PT_GENERATE_LE; static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED; static const char *ST_PASS = "hashcat1"; diff --git a/src/shared.c b/src/shared.c index 3c4f9c43f..25bbf5005 100644 --- a/src/shared.c +++ b/src/shared.c @@ -26,8 +26,10 @@ #if defined (_POSIX) #include +#if !defined (__APPLE__) #include #endif +#endif static const char *const PA_000 = "OK"; static const char *const PA_001 = "Ignored due to comment"; diff --git a/src/terminal.c b/src/terminal.c index 04b157400..948b4795d 100644 --- a/src/terminal.c +++ b/src/terminal.c @@ -101,6 +101,11 @@ void welcome_screen (hashcat_ctx_t *hashcat_ctx, const char *version_tag) event_log_info (hashcat_ctx, "%s (%s) starting in hash-info mode", PROGNAME, version_tag); event_log_info (hashcat_ctx, NULL); } + else if (user_options->session_chgd == true) + { + event_log_info (hashcat_ctx, "%s (%s) starting - session [%s]", PROGNAME, version_tag, user_options->session); + event_log_info (hashcat_ctx, NULL); + } else { event_log_info (hashcat_ctx, "%s (%s) starting", PROGNAME, version_tag); @@ -1503,8 +1508,8 @@ void backend_info_compact (hashcat_ctx_t *hashcat_ctx) event_log_info (hashcat_ctx, "* Unit #%02d: %s", i + 1, bridge_ctx->get_unit_info (bridge_ctx->platform_context, i)); } } - - event_log_info (hashcat_ctx, NULL); + + event_log_info (hashcat_ctx, NULL); } /** @@ -1707,7 +1712,7 @@ void backend_info_compact (hashcat_ctx_t *hashcat_ctx) // hide empty Metal platforms if (metal_devices_cnt) - { + { char *metal_runtimeVersionStr = backend_ctx->metal_runtimeVersionStr; size_t len = event_log_info (hashcat_ctx, "METAL API (Metal %s)", metal_runtimeVersionStr); @@ -1749,7 +1754,7 @@ void backend_info_compact (hashcat_ctx_t *hashcat_ctx) device_id + 1, unit_count, device_name); } - + } else { @@ -2583,7 +2588,7 @@ void status_display (hashcat_ctx_t *hashcat_ctx) if (hashcat_status->device_info_cnt == 1) { const device_info_t *device_info0 = hashcat_status->device_info_buf + 0; - + event_log_info (hashcat_ctx, "Speed.#%02u........: %9sH/s (%0.2fms) @ Accel:%u Loops:%u Thr:%u Vec:%u", 0 + 1, device_info0->speed_sec_dev, @@ -2825,7 +2830,7 @@ void status_display (hashcat_ctx_t *hashcat_ctx) device_info->iteration_pos_dev + device_info->iteration_left_dev); } } - + //if (hashconfig->opts_type & OPTS_TYPE_SLOW_CANDIDATES) if (user_options->slow_candidates == true) { @@ -2840,7 +2845,7 @@ void status_display (hashcat_ctx_t *hashcat_ctx) { const device_info_t *device_info = hashcat_status->device_info_buf + 0; - if (device_info->guess_candidates_dev) + if (device_info->guess_candidates_dev) { event_log_info (hashcat_ctx, "Candidates.#%02u...: %s", 0 + 1, diff --git a/src/user_options.c b/src/user_options.c index c2a1bd634..f70a2640f 100644 --- a/src/user_options.c +++ b/src/user_options.c @@ -466,7 +466,8 @@ int user_options_getopt (hashcat_ctx_t *hashcat_ctx, int argc, char **argv) case IDX_STATUS_TIMER: user_options->status_timer = hc_strtoul (optarg, NULL, 10); break; case IDX_MACHINE_READABLE: user_options->machine_readable = true; break; case IDX_LOOPBACK: user_options->loopback = true; break; - case IDX_SESSION: user_options->session = optarg; break; + case IDX_SESSION: user_options->session = optarg; + user_options->session_chgd = true; break; case IDX_HASH_MODE: user_options->hash_mode = hc_strtoul (optarg, NULL, 10); user_options->hash_mode_chgd = true; break; case IDX_RUNTIME: user_options->runtime = hc_strtoul (optarg, NULL, 10); From 825491aa6ced90cd1992e4387cd4dcb6627e6100 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Thu, 26 Jun 2025 09:47:36 +0200 Subject: [PATCH 94/95] Rewrote the SCRYPT core to work around a segmentation fault bug in the Intel OpenCL CPU runtime, without negatively affecting other runtimes. Fixed the automatic kernel acceleration adjustment routine to account for some OpenCL runtime's buffer size limitation (1/4). Added a missing license header to scrypt_commit.c (MIT). --- OpenCL/inc_hash_scrypt.cl | 12 ++++++++++-- OpenCL/inc_hash_scrypt.h | 2 +- src/backend.c | 2 +- src/modules/scrypt_common.c | 5 +++++ 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/OpenCL/inc_hash_scrypt.cl b/OpenCL/inc_hash_scrypt.cl index d0c7e6a65..e03eb42d4 100644 --- a/OpenCL/inc_hash_scrypt.cl +++ b/OpenCL/inc_hash_scrypt.cl @@ -156,11 +156,15 @@ DECLSPEC void scrypt_smix_init (GLOBAL_AS u32 *P, PRIVATE_AS u32 *X, GLOBAL_AS v case 3: V = (GLOBAL_AS uint4 *) V3; break; } + GLOBAL_AS uint4 *Vx = V + (xd4 * lsz * ySIZE * zSIZE) + (lid * ySIZE * zSIZE); + for (u32 i = 0; i < STATE_CNT4; i++) X[i] = P[i]; for (u32 y = 0; y < ySIZE; y++) { - for (u32 z = 0; z < zSIZE; z++) V[VIDX(xd4, lsz, lid, ySIZE, zSIZE, y, z)] = X4[z]; + GLOBAL_AS uint4 *Vxx = Vx + (y * zSIZE); + + for (u32 z = 0; z < zSIZE; z++) *Vxx++ = X4[z]; for (u32 i = 0; i < (1 << SCRYPT_TMTO); i++) { @@ -196,6 +200,8 @@ DECLSPEC void scrypt_smix_loop (GLOBAL_AS u32 *P, PRIVATE_AS u32 *X, PRIVATE_AS case 3: V = (GLOBAL_AS uint4 *) V3; break; } + GLOBAL_AS uint4 *Vx = V + (xd4 * lsz * ySIZE * zSIZE) + (lid * ySIZE * zSIZE); + for (u32 i = 0; i < STATE_CNT4; i++) X[i] = P[i]; // note: max 1024 iterations = forced -u 2048 @@ -210,7 +216,9 @@ DECLSPEC void scrypt_smix_loop (GLOBAL_AS u32 *P, PRIVATE_AS u32 *X, PRIVATE_AS const u32 km = k - (y << SCRYPT_TMTO); - for (u32 z = 0; z < zSIZE; z++) T4[z] = V[VIDX(xd4, lsz, lid, ySIZE, zSIZE, y, z)]; + GLOBAL_AS uint4 *Vxx = Vx + (y * zSIZE); + + for (u32 z = 0; z < zSIZE; z++) T4[z] = *Vxx++; for (u32 i = 0; i < km; i++) { diff --git a/OpenCL/inc_hash_scrypt.h b/OpenCL/inc_hash_scrypt.h index 0fe8e527e..808661726 100644 --- a/OpenCL/inc_hash_scrypt.h +++ b/OpenCL/inc_hash_scrypt.h @@ -25,7 +25,7 @@ #define SALSA_CNT4 (SALSA_SZ / 4) #define SALSA_CNT44 ((SALSA_SZ / 4) / 4) -#define VIDX(bid4,lsz,lid,ySIZE,zSIZE,y,z) (((bid4) * (lsz) * (ySIZE) * (zSIZE)) + ((lid) * (ySIZE) * (zSIZE)) + ((y) * (zSIZE)) + (z)) +//#define VIDX(bid4,lsz,lid,ySIZE,zSIZE,y,z) (((bid4) * (lsz) * (ySIZE) * (zSIZE)) + ((lid) * (ySIZE) * (zSIZE)) + ((y) * (zSIZE)) + (z)) #if defined IS_CUDA diff --git a/src/backend.c b/src/backend.c index 7d3eca338..6bb511c5b 100644 --- a/src/backend.c +++ b/src/backend.c @@ -16245,7 +16245,7 @@ int backend_session_begin (hashcat_ctx_t *hashcat_ctx) + size_kernel_params + size_spilling; - if ((size_total + EXTRA_SPACE) > MIN (device_param->device_available_mem, device_param->device_maxmem_alloc)) memory_limit_hit = 1; + if ((size_total + EXTRA_SPACE) > device_param->device_available_mem) memory_limit_hit = 1; if (memory_limit_hit == 1) { diff --git a/src/modules/scrypt_common.c b/src/modules/scrypt_common.c index 000115a8a..6d2c9a5f8 100644 --- a/src/modules/scrypt_common.c +++ b/src/modules/scrypt_common.c @@ -1,4 +1,9 @@ +/** + * Author......: See docs/credits.txt + * License.....: MIT + */ + #include #include "common.h" #include "types.h" From 3182af1bc980603b682beed9913ba3db26529170 Mon Sep 17 00:00:00 2001 From: Jens Steube Date: Thu, 26 Jun 2025 19:36:06 +0200 Subject: [PATCH 95/95] - Renamed shuffle() in inc_hash_scrypt.cl to avoid name collision with shuffle() present in some OpenCL runtimes - Updated autotune logic: if the best kernel-loop is not yet found and the current kernel-loops setting resulting in a kernel runtime which is already above a certain threshold, do not skip to kernel-threads or kernel-accel section if no variance is possible - Revised all plugin module_unstable_warning() checks for AMD Radeon Pro W5700X GPU on Metal: rechecked with the latest Metal version and removed those now fixed - Inform the user on startup when backend runtimes and devices are initialized - Fixed some file permissions in the tools/ folder --- OpenCL/inc_hash_scrypt.cl | 8 ++++---- include/types.h | 4 ++++ src/autotune.c | 14 ++++++++----- src/hashcat.c | 8 ++++++++ src/main.c | 40 +++++++++++++++++++++++++++++++++++++ src/modules/module_06211.c | 19 +----------------- src/modules/module_06212.c | 19 +----------------- src/modules/module_06213.c | 25 +---------------------- src/modules/module_06221.c | 27 +------------------------ src/modules/module_06222.c | 27 +------------------------ src/modules/module_06223.c | 30 +--------------------------- src/modules/module_06231.c | 25 +---------------------- src/modules/module_06232.c | 25 +---------------------- src/modules/module_06233.c | 25 +---------------------- src/modules/module_06241.c | 19 +----------------- src/modules/module_06242.c | 19 +----------------- src/modules/module_06243.c | 19 +----------------- src/modules/module_06500.c | 19 +----------------- src/modules/module_07100.c | 19 +----------------- src/modules/module_07200.c | 19 +----------------- src/modules/module_07900.c | 19 +----------------- src/modules/module_08200.c | 24 +--------------------- src/modules/module_12300.c | 19 +----------------- src/modules/module_13721.c | 19 +----------------- src/modules/module_13722.c | 25 +---------------------- src/modules/module_13723.c | 25 +---------------------- src/modules/module_15900.c | 25 +---------------------- src/modules/module_16300.c | 19 +----------------- src/modules/module_20011.c | 25 +---------------------- src/modules/module_20012.c | 25 +---------------------- src/modules/module_20013.c | 25 +---------------------- src/modules/module_21000.c | 19 +----------------- src/modules/module_21700.c | 30 +--------------------------- src/modules/module_22200.c | 19 +----------------- src/modules/module_23500.c | 19 +----------------- src/modules/module_23600.c | 19 +----------------- src/modules/module_23800.c | 17 +--------------- src/modules/module_28800.c | 19 +----------------- src/modules/module_28900.c | 19 +----------------- src/modules/module_29311.c | 19 +----------------- src/modules/module_29312.c | 19 +----------------- src/modules/module_29313.c | 19 +----------------- src/modules/module_29341.c | 19 +----------------- src/modules/module_29342.c | 19 +----------------- src/modules/module_29343.c | 19 +----------------- src/modules/module_29411.c | 19 +----------------- src/modules/module_29412.c | 19 +----------------- src/modules/module_29413.c | 27 +------------------------ src/modules/module_29441.c | 19 +----------------- src/modules/module_29442.c | 19 +----------------- src/modules/module_29443.c | 27 +------------------------ src/modules/module_29451.c | 27 +------------------------ src/modules/module_29452.c | 27 +------------------------ src/modules/module_29453.c | 27 +------------------------ src/modules/module_29461.c | 27 +------------------------ src/modules/module_29462.c | 27 +------------------------ src/modules/module_29463.c | 27 +------------------------ src/modules/scrypt_common.c | 2 +- tools/cachedata2hashcat.py | 0 59 files changed, 118 insertions(+), 1111 deletions(-) mode change 100644 => 100755 tools/cachedata2hashcat.py diff --git a/OpenCL/inc_hash_scrypt.cl b/OpenCL/inc_hash_scrypt.cl index e03eb42d4..45c054534 100644 --- a/OpenCL/inc_hash_scrypt.cl +++ b/OpenCL/inc_hash_scrypt.cl @@ -10,7 +10,7 @@ #include "inc_hash_scrypt.h" #if SCRYPT_R > 1 -DECLSPEC void shuffle (PRIVATE_AS u32 *TI) +DECLSPEC void scrypt_shuffle (PRIVATE_AS u32 *TI) { u32 TT[STATE_CNT4 / 2]; @@ -171,7 +171,7 @@ DECLSPEC void scrypt_smix_init (GLOBAL_AS u32 *P, PRIVATE_AS u32 *X, GLOBAL_AS v salsa_r (X); #if SCRYPT_R > 1 - shuffle (X); + scrypt_shuffle (X); #endif } } @@ -225,7 +225,7 @@ DECLSPEC void scrypt_smix_loop (GLOBAL_AS u32 *P, PRIVATE_AS u32 *X, PRIVATE_AS salsa_r (T); #if SCRYPT_R > 1 - shuffle (T); + scrypt_shuffle (T); #endif } @@ -234,7 +234,7 @@ DECLSPEC void scrypt_smix_loop (GLOBAL_AS u32 *P, PRIVATE_AS u32 *X, PRIVATE_AS salsa_r (X); #if SCRYPT_R > 1 - shuffle (X); + scrypt_shuffle (X); #endif } diff --git a/include/types.h b/include/types.h index 0456736c6..cd3331234 100644 --- a/include/types.h +++ b/include/types.h @@ -103,6 +103,10 @@ typedef enum event_identifier EVENT_AUTODETECT_STARTING = 0x00000101, EVENT_AUTOTUNE_FINISHED = 0x00000000, EVENT_AUTOTUNE_STARTING = 0x00000001, + EVENT_BACKEND_RUNTIMES_INIT_POST = 0x00000130, + EVENT_BACKEND_RUNTIMES_INIT_PRE = 0x00000131, + EVENT_BACKEND_DEVICES_INIT_POST = 0x00000132, + EVENT_BACKEND_DEVICES_INIT_PRE = 0x00000133, EVENT_BITMAP_INIT_POST = 0x00000010, EVENT_BITMAP_INIT_PRE = 0x00000011, EVENT_BITMAP_FINAL_OVERFLOW = 0x00000012, diff --git a/src/autotune.c b/src/autotune.c index 25a97fe35..b33ed36d6 100644 --- a/src/autotune.c +++ b/src/autotune.c @@ -337,14 +337,18 @@ static int autotune (hashcat_ctx_t *hashcat_ctx, hc_device_param_t *device_param if (exec_msec > target_msec) break; // we want a little room for threads to play with so not full target_msec + // but of course only if we are going to make use of that :) - if (exec_msec > target_msec / 8) break; + if ((kernel_accel_min < kernel_accel_max) || (kernel_threads_min < kernel_threads_max)) + { + if (exec_msec > target_msec / 8) break; - // in general, an unparallelized kernel should not run that long. - // if the kernel uses barriers it will have a bad impact on performance. - // streebog is a good testing example + // in general, an unparallelized kernel should not run that long. + // if the kernel uses barriers it will have a bad impact on performance. + // streebog is a good testing example - if (exec_msec > 4) break; + if (exec_msec > 4) break; + } kernel_loops = kernel_loops_test; } diff --git a/src/hashcat.c b/src/hashcat.c index e5852522e..5f54fd68e 100644 --- a/src/hashcat.c +++ b/src/hashcat.c @@ -1338,14 +1338,22 @@ int hashcat_session_init (hashcat_ctx_t *hashcat_ctx, const char *install_folder * Init backend library loader */ + EVENT (EVENT_BACKEND_RUNTIMES_INIT_PRE); + if (backend_ctx_init (hashcat_ctx) == -1) return -1; + EVENT (EVENT_BACKEND_RUNTIMES_INIT_POST); + /** * Init backend devices */ + EVENT (EVENT_BACKEND_DEVICES_INIT_PRE); + if (backend_ctx_devices_init (hashcat_ctx, comptime) == -1) return -1; + EVENT (EVENT_BACKEND_DEVICES_INIT_POST); + /** * HM devices: init */ diff --git a/src/main.c b/src/main.c index 25c6021f8..deef5873c 100644 --- a/src/main.c +++ b/src/main.c @@ -1157,6 +1157,42 @@ static void main_autotune_finished (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAY event_log_info_nn (hashcat_ctx, "Finished autotune"); } +static void main_backend_runtimes_init_pre (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len) +{ + const user_options_t *user_options = hashcat_ctx->user_options; + + if (user_options->quiet == true) return; + + event_log_info_nn (hashcat_ctx, "Initializing backend runtimes. Please be patient..."); +} + +static void main_backend_runtimes_init_post (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len) +{ + const user_options_t *user_options = hashcat_ctx->user_options; + + if (user_options->quiet == true) return; + + event_log_info_nn (hashcat_ctx, "Initialized backend runtimes"); +} + +static void main_backend_devices_init_pre (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len) +{ + const user_options_t *user_options = hashcat_ctx->user_options; + + if (user_options->quiet == true) return; + + event_log_info_nn (hashcat_ctx, "Initializing backend devices. Please be patient..."); +} + +static void main_backend_devices_init_post (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len) +{ + const user_options_t *user_options = hashcat_ctx->user_options; + + if (user_options->quiet == true) return; + + event_log_info_nn (hashcat_ctx, "Initialized backend devices"); +} + static void main_bridges_init_pre (MAYBE_UNUSED hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const void *buf, MAYBE_UNUSED const size_t len) { const user_options_t *user_options = hashcat_ctx->user_options; @@ -1203,6 +1239,10 @@ static void event (const u32 id, hashcat_ctx_t *hashcat_ctx, const void *buf, co case EVENT_SELFTEST_STARTING: main_selftest_starting (hashcat_ctx, buf, len); break; case EVENT_AUTODETECT_FINISHED: main_autodetect_finished (hashcat_ctx, buf, len); break; case EVENT_AUTODETECT_STARTING: main_autodetect_starting (hashcat_ctx, buf, len); break; + case EVENT_BACKEND_RUNTIMES_INIT_POST:main_backend_runtimes_init_post(hashcat_ctx, buf, len); break; + case EVENT_BACKEND_RUNTIMES_INIT_PRE: main_backend_runtimes_init_pre (hashcat_ctx, buf, len); break; + case EVENT_BACKEND_DEVICES_INIT_POST: main_backend_devices_init_post (hashcat_ctx, buf, len); break; + case EVENT_BACKEND_DEVICES_INIT_PRE: main_backend_devices_init_pre (hashcat_ctx, buf, len); break; case EVENT_BITMAP_INIT_POST: main_bitmap_init_post (hashcat_ctx, buf, len); break; case EVENT_BITMAP_INIT_PRE: main_bitmap_init_pre (hashcat_ctx, buf, len); break; case EVENT_BITMAP_FINAL_OVERFLOW: main_bitmap_final_overflow (hashcat_ctx, buf, len); break; diff --git a/src/modules/module_06211.c b/src/modules/module_06211.c index d2d9ff3ce..0faa59d79 100644 --- a/src/modules/module_06211.c +++ b/src/modules/module_06211.c @@ -86,23 +86,6 @@ char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAY return jit_build_options; } -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - } - - return false; -} - bool module_potfile_disable (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const bool potfile_disable = true; @@ -334,6 +317,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_06212.c b/src/modules/module_06212.c index e5560fa3d..8601a32ab 100644 --- a/src/modules/module_06212.c +++ b/src/modules/module_06212.c @@ -86,23 +86,6 @@ char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAY return jit_build_options; } -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - } - - return false; -} - bool module_potfile_disable (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const bool potfile_disable = true; @@ -334,6 +317,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_06213.c b/src/modules/module_06213.c index 8ab92f5c5..7f0af57cc 100644 --- a/src/modules/module_06213.c +++ b/src/modules/module_06213.c @@ -86,29 +86,6 @@ char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAY return jit_build_options; } -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "Intel", 5) == 0) - { - // Intel Iris Graphics, Metal Version 244.303: failed to create 'm06213_comp' pipeline, timeout reached - return true; - } - - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - } - - return false; -} - bool module_potfile_disable (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const bool potfile_disable = true; @@ -340,6 +317,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_06221.c b/src/modules/module_06221.c index 4a3b6813f..08a1abe3c 100644 --- a/src/modules/module_06221.c +++ b/src/modules/module_06221.c @@ -78,31 +78,6 @@ typedef struct tc static const int ROUNDS_TRUECRYPT_1K = 1000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - else - { - if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD) - { - // AMD Radeon Pro W5700X Compute Engine; 1.2 (Apr 22 2021 21:54:44); 11.3.1; 20E241 - self-test failed - return true; - } - } - } - - return false; -} - bool module_potfile_disable (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const bool potfile_disable = true; @@ -336,6 +311,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_06222.c b/src/modules/module_06222.c index 9017b9518..ae050a8fb 100644 --- a/src/modules/module_06222.c +++ b/src/modules/module_06222.c @@ -78,31 +78,6 @@ typedef struct tc static const int ROUNDS_TRUECRYPT_1K = 1000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - else - { - if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD) - { - // AMD Radeon Pro W5700X Compute Engine; 1.2 (Apr 22 2021 21:54:44); 11.3.1; 20E241 - self-test failed - return true; - } - } - } - - return false; -} - bool module_potfile_disable (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const bool potfile_disable = true; @@ -336,6 +311,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_06223.c b/src/modules/module_06223.c index 0d5863ee6..f424a1ede 100644 --- a/src/modules/module_06223.c +++ b/src/modules/module_06223.c @@ -78,34 +78,6 @@ typedef struct tc static const int ROUNDS_TRUECRYPT_1K = 1000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "Intel", 5) == 0) - { - // Intel Iris Graphics, Metal Version 244.303: failed to create 'm06223_comp' pipeline, timeout reached - return true; - } - - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - else if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD) - { - // AMD Radeon Pro W5700X, OpenCL: self-test failed - return true; - } - } - - return false; -} - bool module_potfile_disable (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const bool potfile_disable = true; @@ -339,6 +311,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_06231.c b/src/modules/module_06231.c index 72724d56f..11679dd43 100644 --- a/src/modules/module_06231.c +++ b/src/modules/module_06231.c @@ -77,29 +77,6 @@ typedef struct tc static const int ROUNDS_TRUECRYPT_1K = 1000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "Intel", 5) == 0) - { - // Intel Iris Graphics, Metal Version 244.303: failed to create 'm06231_init' pipeline, timeout reached - return true; - } - - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - } - - return false; -} - bool module_potfile_disable (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const bool potfile_disable = true; @@ -333,6 +310,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_06232.c b/src/modules/module_06232.c index 46ce7d4fa..3d02dbef4 100644 --- a/src/modules/module_06232.c +++ b/src/modules/module_06232.c @@ -77,29 +77,6 @@ typedef struct tc static const int ROUNDS_TRUECRYPT_1K = 1000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "Intel", 5) == 0) - { - // Intel Iris Graphics, Metal Version 244.303: failed to create 'm06232_init' pipeline, Compilation failed - return true; - } - - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - } - - return false; -} - bool module_potfile_disable (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const bool potfile_disable = true; @@ -333,6 +310,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_06233.c b/src/modules/module_06233.c index 6380775fe..337bf3beb 100644 --- a/src/modules/module_06233.c +++ b/src/modules/module_06233.c @@ -77,29 +77,6 @@ typedef struct tc static const int ROUNDS_TRUECRYPT_1K = 1000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "Intel", 5) == 0) - { - // Intel Iris Graphics, Metal Version 244.303: failed to create 'm06233_init' pipeline, Compilation failed - return true; - } - - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - } - - return false; -} - bool module_potfile_disable (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const bool potfile_disable = true; @@ -333,6 +310,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_06241.c b/src/modules/module_06241.c index 8ff907219..ff8647ae0 100644 --- a/src/modules/module_06241.c +++ b/src/modules/module_06241.c @@ -78,23 +78,6 @@ typedef struct tc static const int ROUNDS_TRUECRYPT_1K = 1000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - } - - return false; -} - int module_build_plain_postprocess (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const void *tmps, const u32 *src_buf, MAYBE_UNUSED const size_t src_sz, MAYBE_UNUSED const int src_len, u32 *dst_buf, MAYBE_UNUSED const size_t dst_sz) { const tc_t *tc = (const tc_t *) hashes->esalts_buf; @@ -340,6 +323,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_06242.c b/src/modules/module_06242.c index 2242fef5f..7bc2f961f 100644 --- a/src/modules/module_06242.c +++ b/src/modules/module_06242.c @@ -78,23 +78,6 @@ typedef struct tc static const int ROUNDS_TRUECRYPT_1K = 1000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - } - - return false; -} - int module_build_plain_postprocess (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const void *tmps, const u32 *src_buf, MAYBE_UNUSED const size_t src_sz, MAYBE_UNUSED const int src_len, u32 *dst_buf, MAYBE_UNUSED const size_t dst_sz) { const tc_t *tc = (const tc_t *) hashes->esalts_buf; @@ -340,6 +323,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_06243.c b/src/modules/module_06243.c index 6f8945a6c..a2205b498 100644 --- a/src/modules/module_06243.c +++ b/src/modules/module_06243.c @@ -78,23 +78,6 @@ typedef struct tc static const int ROUNDS_TRUECRYPT_1K = 1000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - } - - return false; -} - int module_build_plain_postprocess (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const void *tmps, const u32 *src_buf, MAYBE_UNUSED const size_t src_sz, MAYBE_UNUSED const int src_len, u32 *dst_buf, MAYBE_UNUSED const size_t dst_sz) { const tc_t *tc = (const tc_t *) hashes->esalts_buf; @@ -340,6 +323,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_06500.c b/src/modules/module_06500.c index 3fb9853dd..29ec729f3 100644 --- a/src/modules/module_06500.c +++ b/src/modules/module_06500.c @@ -411,23 +411,6 @@ static void sha512aix_encode (const u8 digest[64], u8 buf[86]) buf[85] = int_to_itoa64 (l & 0x3f); //l >>= 6; } -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - } - - return false; -} - u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const u64 tmp_size = (const u64) sizeof (sha512aix_tmp_t); @@ -627,6 +610,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_07100.c b/src/modules/module_07100.c index 51bd7c548..ec3924cec 100644 --- a/src/modules/module_07100.c +++ b/src/modules/module_07100.c @@ -85,23 +85,6 @@ u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED con return pw_max; } -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - } - - return false; -} - char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) { char *jit_build_options = NULL; @@ -442,6 +425,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_07200.c b/src/modules/module_07200.c index c54f4b53d..ed3485a70 100644 --- a/src/modules/module_07200.c +++ b/src/modules/module_07200.c @@ -61,23 +61,6 @@ typedef struct pbkdf2_sha512_tmp static const char *SIGNATURE_SHA512GRUB = "grub.pbkdf2.sha512."; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - } - - return false; -} - u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const u64 esalt_size = (const u64) sizeof (pbkdf2_sha512_t); @@ -299,6 +282,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_07900.c b/src/modules/module_07900.c index 02b9fd02d..29e458de3 100644 --- a/src/modules/module_07900.c +++ b/src/modules/module_07900.c @@ -51,23 +51,6 @@ typedef struct drupal7_tmp static const char *SIGNATURE_DRUPAL7 = "$S$"; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - } - - return false; -} - char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) { char *jit_build_options = NULL; @@ -525,6 +508,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_08200.c b/src/modules/module_08200.c index a91356024..6ebb1288d 100644 --- a/src/modules/module_08200.c +++ b/src/modules/module_08200.c @@ -60,28 +60,6 @@ typedef struct pbkdf2_sha512_tmp } pbkdf2_sha512_tmp_t; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_device_vendor_id == VENDOR_ID_INTEL_SDK) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - return true; - } - - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - } - - return false; -} - char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) { char *jit_build_options = NULL; @@ -350,6 +328,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_12300.c b/src/modules/module_12300.c index 6915855fd..c474e1cef 100644 --- a/src/modules/module_12300.c +++ b/src/modules/module_12300.c @@ -55,23 +55,6 @@ typedef struct oraclet_tmp static const int ROUNDS_ORACLET = 4096; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - } - - return false; -} - u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const u64 tmp_size = (const u64) sizeof (oraclet_tmp_t); @@ -264,6 +247,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_13721.c b/src/modules/module_13721.c index 67c7dafa9..b6c937875 100644 --- a/src/modules/module_13721.c +++ b/src/modules/module_13721.c @@ -89,23 +89,6 @@ typedef struct vc static const int ROUNDS_VERACRYPT_500000 = 500000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - } - - return false; -} - int module_build_plain_postprocess (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const void *tmps, const u32 *src_buf, MAYBE_UNUSED const size_t src_sz, MAYBE_UNUSED const int src_len, u32 *dst_buf, MAYBE_UNUSED const size_t dst_sz) { const vc64_tmp_t *vc64_tmp = (const vc64_tmp_t *) tmps; @@ -385,6 +368,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_13722.c b/src/modules/module_13722.c index ec06b5a00..89b65cf6b 100644 --- a/src/modules/module_13722.c +++ b/src/modules/module_13722.c @@ -89,29 +89,6 @@ typedef struct vc static const int ROUNDS_VERACRYPT_500000 = 500000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "Intel", 5) == 0) - { - // Intel Iris Graphics, Metal Version 244.303: failed to create 'm13722_comp' pipeline, timeout reached - return true; - } - - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - } - - return false; -} - int module_build_plain_postprocess (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const void *tmps, const u32 *src_buf, MAYBE_UNUSED const size_t src_sz, MAYBE_UNUSED const int src_len, u32 *dst_buf, MAYBE_UNUSED const size_t dst_sz) { const vc64_tmp_t *vc64_tmp = (const vc64_tmp_t *) tmps; @@ -391,6 +368,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_13723.c b/src/modules/module_13723.c index 7ef089514..92fb1bb5b 100644 --- a/src/modules/module_13723.c +++ b/src/modules/module_13723.c @@ -89,29 +89,6 @@ typedef struct vc static const int ROUNDS_VERACRYPT_500000 = 500000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "Intel", 5) == 0) - { - // Intel Iris Graphics, Metal Version 244.303: failed to create 'm13723_init' pipeline, timeout reached - return true; - } - - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - } - - return false; -} - int module_build_plain_postprocess (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const void *tmps, const u32 *src_buf, MAYBE_UNUSED const size_t src_sz, MAYBE_UNUSED const int src_len, u32 *dst_buf, MAYBE_UNUSED const size_t dst_sz) { const vc64_tmp_t *vc64_tmp = (const vc64_tmp_t *) tmps; @@ -391,6 +368,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_15900.c b/src/modules/module_15900.c index 42e24b3f1..5ba7bd83d 100644 --- a/src/modules/module_15900.c +++ b/src/modules/module_15900.c @@ -77,29 +77,6 @@ typedef struct dpapimk_tmp_v2 static const char *SIGNATURE_DPAPIMK = "$DPAPImk$"; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "Intel", 5) == 0) - { - // Intel Iris Graphics, Metal Version 244.303: failed to create 'm15900_init' pipeline, timeout reached - return true; - } - - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - } - - return false; -} - u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const u64 tmp_size = (const u64) sizeof (dpapimk_tmp_v2_t); @@ -471,6 +448,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_16300.c b/src/modules/module_16300.c index e11226609..e7507f1fa 100644 --- a/src/modules/module_16300.c +++ b/src/modules/module_16300.c @@ -64,23 +64,6 @@ typedef struct pbkdf2_sha256_tmp static const char *SIGNATURE_ETHEREUM_PRESALE = "$ethereum$w"; static const int ROUNDS_ETHEREUM_PRESALE = 2000; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - } - - return false; -} - char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) { char *jit_build_options = NULL; @@ -357,6 +340,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_20011.c b/src/modules/module_20011.c index 3f00a8751..bd9eb7976 100644 --- a/src/modules/module_20011.c +++ b/src/modules/module_20011.c @@ -64,29 +64,6 @@ static const int DISKCRYPTOR_VERSION = 0; static const int ROUNDS_DISKCRYPTOR = 1000; static const char *SIGNATURE_DISKCRYPTOR = "$diskcryptor$"; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "Intel", 5) == 0) - { - // Intel Iris Graphics, Metal Version 244.303: failed to create 'm20011_init' pipeline, timeout reached - return true; - } - - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - } - - return false; -} - u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const u64 tmp_size = (const u64) sizeof (pbkdf2_sha512_tmp_t); @@ -285,6 +262,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_20012.c b/src/modules/module_20012.c index 6bc4dd506..4eb42a35f 100644 --- a/src/modules/module_20012.c +++ b/src/modules/module_20012.c @@ -64,29 +64,6 @@ static const int DISKCRYPTOR_VERSION = 0; static const int ROUNDS_DISKCRYPTOR = 1000; static const char *SIGNATURE_DISKCRYPTOR = "$diskcryptor$"; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "Intel", 5) == 0) - { - // Intel Iris Graphics, Metal Version 244.303: failed to create 'm20012_init' pipeline, timeout reached - return true; - } - - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - } - - return false; -} - u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const u64 tmp_size = (const u64) sizeof (pbkdf2_sha512_tmp_t); @@ -285,6 +262,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_20013.c b/src/modules/module_20013.c index 5f3d4fbc0..b2ed70b35 100644 --- a/src/modules/module_20013.c +++ b/src/modules/module_20013.c @@ -64,29 +64,6 @@ static const int DISKCRYPTOR_VERSION = 0; static const int ROUNDS_DISKCRYPTOR = 1000; static const char *SIGNATURE_DISKCRYPTOR = "$diskcryptor$"; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "Intel", 5) == 0) - { - // Intel Iris Graphics, Metal Version 244.303: failed to create 'm20013_init' pipeline, timeout reached - return true; - } - - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - } - - return false; -} - u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const u64 tmp_size = (const u64) sizeof (pbkdf2_sha512_tmp_t); @@ -285,6 +262,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_21000.c b/src/modules/module_21000.c index bfb8067a7..1cb700b21 100644 --- a/src/modules/module_21000.c +++ b/src/modules/module_21000.c @@ -49,23 +49,6 @@ u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, const char *module_st_hash (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_HASH; } const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_PASS; } -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - } - - return false; -} - int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len) { u64 *digest = (u64 *) digest_buf; @@ -253,6 +236,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = MODULE_DEFAULT; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_21700.c b/src/modules/module_21700.c index 7767e456d..3daa3a11f 100644 --- a/src/modules/module_21700.c +++ b/src/modules/module_21700.c @@ -72,34 +72,6 @@ u32 module_deep_comp_kernel (MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED c return KERN_RUN_3; } -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_device_vendor_id == VENDOR_ID_INTEL_SDK) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - return true; - } - - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "Intel", 5) == 0) - { - // Intel Iris Graphics, Metal Version 244.303: self-test failed - return true; - } - - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - } - - return false; -} - char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) { char *jit_build_options = NULL; @@ -373,6 +345,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_22200.c b/src/modules/module_22200.c index e7bbcb5ef..229939159 100644 --- a/src/modules/module_22200.c +++ b/src/modules/module_22200.c @@ -49,23 +49,6 @@ const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, static const char *SIGNATURE_NETSCALER = "2"; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - } - - return false; -} - char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) { char *jit_build_options = NULL; @@ -310,6 +293,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = MODULE_DEFAULT; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_23500.c b/src/modules/module_23500.c index 797d31428..f3eb316dd 100644 --- a/src/modules/module_23500.c +++ b/src/modules/module_23500.c @@ -68,23 +68,6 @@ typedef struct axcrypt2_tmp static const char *SIGNATURE_AXCRYPT2 = "$axcrypt$"; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - } - - return false; -} - u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const u64 esalt_size = (const u64) sizeof (axcrypt2_t); @@ -372,6 +355,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_23600.c b/src/modules/module_23600.c index dae2ece19..fdb3467d1 100644 --- a/src/modules/module_23600.c +++ b/src/modules/module_23600.c @@ -68,23 +68,6 @@ typedef struct axcrypt2_tmp static const char *SIGNATURE_AXCRYPT2 = "$axcrypt$"; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "AMD Radeon", 10) == 0) - { - // AMD Radeon Pro W5700X, Metal.Version.: 261.13, compiler hangs - return true; - } - } - } - - return false; -} - u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const u64 esalt_size = (const u64) sizeof (axcrypt2_t); @@ -372,6 +355,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_23800.c b/src/modules/module_23800.c index 1b74f0291..615548bc0 100644 --- a/src/modules/module_23800.c +++ b/src/modules/module_23800.c @@ -203,21 +203,6 @@ static int check_huffman (const unsigned char *next) return 1; /* Passed this check! */ } -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->opencl_device_vendor_id == VENDOR_ID_INTEL_SDK || device_param->opencl_device_vendor_id == VENDOR_ID_AMD) - { - // AMD Radeon Pro W5700X Compute Engine; 1.2 (Apr 22 2021 21:54:44); 11.3.1; 20E241 - // Intel Iris - return true; - } - } - - return false; -} - bool module_hook_extra_param_init (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const folder_config_t *folder_config, MAYBE_UNUSED const backend_ctx_t *backend_ctx, void *hook_extra_param) { rar3_hook_extra_t *rar3_hook_extra = (rar3_hook_extra_t *) hook_extra_param; @@ -678,6 +663,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_28800.c b/src/modules/module_28800.c index e32b7873b..519299654 100644 --- a/src/modules/module_28800.c +++ b/src/modules/module_28800.c @@ -63,23 +63,6 @@ typedef struct krb5db_17_tmp static const char *SIGNATURE_KRB5DB = "$krb5db$17$"; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == false) - { - if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD) - { - // AMD Radeon Pro W5700X Compute Engine; 1.2 (Apr 22 2021 21:54:44); 11.3.1; 20E241 - return true; - } - } - } - - return false; -} - u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const u64 tmp_size = (const u64) sizeof (krb5db_17_tmp_t); @@ -335,6 +318,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_28900.c b/src/modules/module_28900.c index f6b348da2..6f20f3c59 100644 --- a/src/modules/module_28900.c +++ b/src/modules/module_28900.c @@ -63,23 +63,6 @@ typedef struct krb5db_18_tmp static const char *SIGNATURE_KRB5DB = "$krb5db$18$"; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == false) - { - if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD) - { - // AMD Radeon Pro W5700X Compute Engine; 1.2 (Apr 22 2021 21:54:44); 11.3.1; 20E241 - return true; - } - } - } - - return false; -} - u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const u64 tmp_size = (const u64) sizeof (krb5db_18_tmp_t); @@ -344,6 +327,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_29311.c b/src/modules/module_29311.c index dd29c4b54..cade1b3da 100644 --- a/src/modules/module_29311.c +++ b/src/modules/module_29311.c @@ -79,23 +79,6 @@ static const int ROUNDS_TRUECRYPT_2K = 2000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; static const char *SIGNATURE_TRUECRYPT = "$truecrypt$"; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == false) - { - if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD) - { - // AMD Radeon Pro W5700X Compute Engine; 1.2 (Apr 22 2021 21:54:44); 11.3.1; 20E241 - return true; - } - } - } - - return false; -} - u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const u64 esalt_size = (const u64) sizeof (tc_t); @@ -333,6 +316,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_29312.c b/src/modules/module_29312.c index bbfe15075..f284ffe7b 100644 --- a/src/modules/module_29312.c +++ b/src/modules/module_29312.c @@ -79,23 +79,6 @@ static const int ROUNDS_TRUECRYPT_2K = 2000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; static const char *SIGNATURE_TRUECRYPT = "$truecrypt$"; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == false) - { - if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD) - { - // AMD Radeon Pro W5700X Compute Engine; 1.2 (Apr 22 2021 21:54:44); 11.3.1; 20E241 - return true; - } - } - } - - return false; -} - u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const u64 esalt_size = (const u64) sizeof (tc_t); @@ -333,6 +316,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_29313.c b/src/modules/module_29313.c index c13fdade1..78e2067de 100644 --- a/src/modules/module_29313.c +++ b/src/modules/module_29313.c @@ -79,23 +79,6 @@ static const int ROUNDS_TRUECRYPT_2K = 2000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; static const char *SIGNATURE_TRUECRYPT = "$truecrypt$"; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == false) - { - if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD) - { - // AMD Radeon Pro W5700X Compute Engine; 1.2 (Apr 22 2021 21:54:44); 11.3.1; 20E241 - return true; - } - } - } - - return false; -} - u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { const u64 esalt_size = (const u64) sizeof (tc_t); @@ -333,6 +316,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_29341.c b/src/modules/module_29341.c index b9b24c85c..8acaf3586 100644 --- a/src/modules/module_29341.c +++ b/src/modules/module_29341.c @@ -80,23 +80,6 @@ static const int ROUNDS_TRUECRYPT_1K = 1000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; static const char *SIGNATURE_TRUECRYPT = "$truecrypt$"; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == false) - { - if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD) - { - // AMD Radeon Pro W5700X Compute Engine; 1.2 (Apr 22 2021 21:54:44); 11.3.1; 20E241 - return true; - } - } - } - - return false; -} - int module_build_plain_postprocess (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const void *tmps, const u32 *src_buf, MAYBE_UNUSED const size_t src_sz, MAYBE_UNUSED const int src_len, u32 *dst_buf, MAYBE_UNUSED const size_t dst_sz) { const tc_t *tc = (const tc_t *) hashes->esalts_buf; @@ -346,6 +329,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_29342.c b/src/modules/module_29342.c index b69ce942d..0dea3ce65 100644 --- a/src/modules/module_29342.c +++ b/src/modules/module_29342.c @@ -80,23 +80,6 @@ static const int ROUNDS_TRUECRYPT_1K = 1000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; static const char *SIGNATURE_TRUECRYPT = "$truecrypt$"; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == false) - { - if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD) - { - // AMD Radeon Pro W5700X Compute Engine; 1.2 (Apr 22 2021 21:54:44); 11.3.1; 20E241 - return true; - } - } - } - - return false; -} - int module_build_plain_postprocess (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const void *tmps, const u32 *src_buf, MAYBE_UNUSED const size_t src_sz, MAYBE_UNUSED const int src_len, u32 *dst_buf, MAYBE_UNUSED const size_t dst_sz) { const tc_t *tc = (const tc_t *) hashes->esalts_buf; @@ -346,6 +329,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_29343.c b/src/modules/module_29343.c index 3059a988c..5257bfc57 100644 --- a/src/modules/module_29343.c +++ b/src/modules/module_29343.c @@ -80,23 +80,6 @@ static const int ROUNDS_TRUECRYPT_1K = 1000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; static const char *SIGNATURE_TRUECRYPT = "$truecrypt$"; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == false) - { - if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD) - { - // AMD Radeon Pro W5700X Compute Engine; 1.2 (Apr 22 2021 21:54:44); 11.3.1; 20E241 - return true; - } - } - } - - return false; -} - int module_build_plain_postprocess (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const void *tmps, const u32 *src_buf, MAYBE_UNUSED const size_t src_sz, MAYBE_UNUSED const int src_len, u32 *dst_buf, MAYBE_UNUSED const size_t dst_sz) { const tc_t *tc = (const tc_t *) hashes->esalts_buf; @@ -346,6 +329,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_29411.c b/src/modules/module_29411.c index f26e4cf00..a3e7160eb 100644 --- a/src/modules/module_29411.c +++ b/src/modules/module_29411.c @@ -86,23 +86,6 @@ static const int ROUNDS_VERACRYPT_655331 = 655331; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; static const char *SIGNATURE_VERACRYPT = "$veracrypt$"; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == false) - { - if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD) - { - // AMD Radeon Pro W5700X Compute Engine; 1.2 (Apr 22 2021 21:54:44); 11.3.1; 20E241 - return true; - } - } - } - - return false; -} - int module_build_plain_postprocess (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const void *tmps, const u32 *src_buf, MAYBE_UNUSED const size_t src_sz, MAYBE_UNUSED const int src_len, u32 *dst_buf, MAYBE_UNUSED const size_t dst_sz) { const vc_tmp_t *vc_tmp = (const vc_tmp_t *) tmps; @@ -395,6 +378,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_29412.c b/src/modules/module_29412.c index 9dd4a5f94..969e6d355 100644 --- a/src/modules/module_29412.c +++ b/src/modules/module_29412.c @@ -86,23 +86,6 @@ static const int ROUNDS_VERACRYPT_655331 = 655331; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; static const char *SIGNATURE_VERACRYPT = "$veracrypt$"; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == false) - { - if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD) - { - // AMD Radeon Pro W5700X Compute Engine; 1.2 (Apr 22 2021 21:54:44); 11.3.1; 20E241 - return true; - } - } - } - - return false; -} - int module_build_plain_postprocess (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const void *tmps, const u32 *src_buf, MAYBE_UNUSED const size_t src_sz, MAYBE_UNUSED const int src_len, u32 *dst_buf, MAYBE_UNUSED const size_t dst_sz) { const vc_tmp_t *vc_tmp = (const vc_tmp_t *) tmps; @@ -395,6 +378,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_29413.c b/src/modules/module_29413.c index de25a35f8..6e67ec4df 100644 --- a/src/modules/module_29413.c +++ b/src/modules/module_29413.c @@ -86,31 +86,6 @@ static const int ROUNDS_VERACRYPT_655331 = 655331; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; static const char *SIGNATURE_VERACRYPT = "$veracrypt$"; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "Intel", 5) == 0) - { - // Intel Iris Graphics, Metal Version 244.303: failed to create 'm13713_loop_extended' pipeline, timeout reached - return true; - } - } - else - { - if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD) - { - // AMD Radeon Pro W5700X Compute Engine; 1.2 (Apr 22 2021 21:54:44); 11.3.1; 20E241 - return true; - } - } - } - - return false; -} - int module_build_plain_postprocess (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const void *tmps, const u32 *src_buf, MAYBE_UNUSED const size_t src_sz, MAYBE_UNUSED const int src_len, u32 *dst_buf, MAYBE_UNUSED const size_t dst_sz) { const vc_tmp_t *vc_tmp = (const vc_tmp_t *) tmps; @@ -403,6 +378,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_29441.c b/src/modules/module_29441.c index 6ccc1e38e..6bce07025 100644 --- a/src/modules/module_29441.c +++ b/src/modules/module_29441.c @@ -87,23 +87,6 @@ static const int ROUNDS_VERACRYPT_327661 = 327661; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; static const char *SIGNATURE_VERACRYPT = "$veracrypt$"; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == false) - { - if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD) - { - // AMD Radeon Pro W5700X Compute Engine; 1.2 (Apr 22 2021 21:54:44); 11.3.1; 20E241 - return true; - } - } - } - - return false; -} - int module_build_plain_postprocess (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const void *tmps, const u32 *src_buf, MAYBE_UNUSED const size_t src_sz, MAYBE_UNUSED const int src_len, u32 *dst_buf, MAYBE_UNUSED const size_t dst_sz) { const vc_t *vc = (const vc_t *) hashes->esalts_buf; @@ -397,6 +380,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_29442.c b/src/modules/module_29442.c index d30b7724e..d6616a7c3 100644 --- a/src/modules/module_29442.c +++ b/src/modules/module_29442.c @@ -87,23 +87,6 @@ static const int ROUNDS_VERACRYPT_327661 = 327661; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; static const char *SIGNATURE_VERACRYPT = "$veracrypt$"; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == false) - { - if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD) - { - // AMD Radeon Pro W5700X Compute Engine; 1.2 (Apr 22 2021 21:54:44); 11.3.1; 20E241 - return true; - } - } - } - - return false; -} - int module_build_plain_postprocess (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const void *tmps, const u32 *src_buf, MAYBE_UNUSED const size_t src_sz, MAYBE_UNUSED const int src_len, u32 *dst_buf, MAYBE_UNUSED const size_t dst_sz) { const vc_t *vc = (const vc_t *) hashes->esalts_buf; @@ -397,6 +380,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_29443.c b/src/modules/module_29443.c index 26837cf5e..fdfcf7324 100644 --- a/src/modules/module_29443.c +++ b/src/modules/module_29443.c @@ -87,31 +87,6 @@ static const int ROUNDS_VERACRYPT_327661 = 327661; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; static const char *SIGNATURE_VERACRYPT = "$veracrypt$"; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "Intel", 5) == 0) - { - // Intel Iris Graphics, Metal Version 244.303: failed to create 'm13713_loop_extended' pipeline, timeout reached - return true; - } - } - else - { - if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD) - { - // AMD Radeon Pro W5700X Compute Engine; 1.2 (Apr 22 2021 21:54:44); 11.3.1; 20E241 - return true; - } - } - } - - return false; -} - int module_build_plain_postprocess (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const void *tmps, const u32 *src_buf, MAYBE_UNUSED const size_t src_sz, MAYBE_UNUSED const int src_len, u32 *dst_buf, MAYBE_UNUSED const size_t dst_sz) { const vc_t *vc = (const vc_t *) hashes->esalts_buf; @@ -405,6 +380,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_29451.c b/src/modules/module_29451.c index 183ba7cdb..d0e527df2 100644 --- a/src/modules/module_29451.c +++ b/src/modules/module_29451.c @@ -86,31 +86,6 @@ static const int ROUNDS_VERACRYPT_500000 = 500000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; static const char *SIGNATURE_VERACRYPT = "$veracrypt$"; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "Intel", 5) == 0) - { - // Intel Iris Graphics, Metal Version 244.303: failed to create 'm13751_loop' pipeline, Compilation failed - return true; - } - } - else - { - if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD) - { - // AMD Radeon Pro W5700X Compute Engine; 1.2 (Apr 22 2021 21:54:44); 11.3.1; 20E241 - return true; - } - } - } - - return false; -} - char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) { char *jit_build_options = NULL; @@ -422,6 +397,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_29452.c b/src/modules/module_29452.c index 03b6dfefb..1bdf93209 100644 --- a/src/modules/module_29452.c +++ b/src/modules/module_29452.c @@ -86,31 +86,6 @@ static const int ROUNDS_VERACRYPT_500000 = 500000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; static const char *SIGNATURE_VERACRYPT = "$veracrypt$"; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "Intel", 5) == 0) - { - // Intel Iris Graphics, Metal Version 244.303: failed to create 'm13752_loop' pipeline, Compilation failed - return true; - } - } - else - { - if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD) - { - // AMD Radeon Pro W5700X Compute Engine; 1.2 (Apr 22 2021 21:54:44); 11.3.1; 20E241 - return true; - } - } - } - - return false; -} - char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) { char *jit_build_options = NULL; @@ -422,6 +397,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_29453.c b/src/modules/module_29453.c index c20a923f3..f73485a17 100644 --- a/src/modules/module_29453.c +++ b/src/modules/module_29453.c @@ -86,31 +86,6 @@ static const int ROUNDS_VERACRYPT_500000 = 500000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; static const char *SIGNATURE_VERACRYPT = "$veracrypt$"; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "Intel", 5) == 0) - { - // Intel Iris Graphics, Metal Version 244.303: failed to create 'm13753_loop_extended' pipeline, timeout reached - return true; - } - } - else - { - if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD) - { - // AMD Radeon Pro W5700X Compute Engine; 1.2 (Apr 22 2021 21:54:44); 11.3.1; 20E241 - return true; - } - } - } - - return false; -} - char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) { char *jit_build_options = NULL; @@ -422,6 +397,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_29461.c b/src/modules/module_29461.c index ff26fffa0..136d77532 100644 --- a/src/modules/module_29461.c +++ b/src/modules/module_29461.c @@ -87,31 +87,6 @@ static const int ROUNDS_VERACRYPT_200000 = 200000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; static const char *SIGNATURE_VERACRYPT = "$veracrypt$"; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "Intel", 5) == 0) - { - // Intel Iris Graphics, Metal Version 244.303: failed to create 'm13751_comp' pipeline, timeout reached - return true; - } - } - else - { - if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD) - { - // AMD Radeon Pro W5700X Compute Engine; 1.2 (Apr 22 2021 21:54:44); 11.3.1; 20E241 - return true; - } - } - } - - return false; -} - char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) { char *jit_build_options = NULL; @@ -424,6 +399,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_29462.c b/src/modules/module_29462.c index e7b5a9d68..c2bb7dfeb 100644 --- a/src/modules/module_29462.c +++ b/src/modules/module_29462.c @@ -87,31 +87,6 @@ static const int ROUNDS_VERACRYPT_200000 = 200000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; static const char *SIGNATURE_VERACRYPT = "$veracrypt$"; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "Intel", 5) == 0) - { - // Intel Iris Graphics, Metal Version 244.303: failed to create 'm13752_loop' pipeline, timeout reached - return true; - } - } - else - { - if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD) - { - // AMD Radeon Pro W5700X Compute Engine; 1.2 (Apr 22 2021 21:54:44); 11.3.1; 20E241 - return true; - } - } - } - - return false; -} - char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) { char *jit_build_options = NULL; @@ -424,6 +399,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/module_29463.c b/src/modules/module_29463.c index 9e58e087d..3c22d35c4 100644 --- a/src/modules/module_29463.c +++ b/src/modules/module_29463.c @@ -87,31 +87,6 @@ static const int ROUNDS_VERACRYPT_200000 = 200000; static const float MIN_SUFFICIENT_ENTROPY_FILE = 7.0f; static const char *SIGNATURE_VERACRYPT = "$veracrypt$"; -bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param) -{ - if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_GPU)) - { - if (device_param->is_metal == true) - { - if (strncmp (device_param->device_name, "Intel", 5) == 0) - { - // Intel Iris Graphics, Metal Version 244.303: failed to create 'm13753_loop_extended' pipeline, timeout reached - return true; - } - } - else - { - if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD) - { - // AMD Radeon Pro W5700X Compute Engine; 1.2 (Apr 22 2021 21:54:44); 11.3.1; 20E241 - return true; - } - } - } - - return false; -} - char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param) { char *jit_build_options = NULL; @@ -424,6 +399,6 @@ void module_init (module_ctx_t *module_ctx) module_ctx->module_st_hash = module_st_hash; module_ctx->module_st_pass = module_st_pass; module_ctx->module_tmp_size = module_tmp_size; - module_ctx->module_unstable_warning = module_unstable_warning; + module_ctx->module_unstable_warning = MODULE_DEFAULT; module_ctx->module_warmup_disable = MODULE_DEFAULT; } diff --git a/src/modules/scrypt_common.c b/src/modules/scrypt_common.c index 6d2c9a5f8..eadf0b8c2 100644 --- a/src/modules/scrypt_common.c +++ b/src/modules/scrypt_common.c @@ -274,7 +274,7 @@ u64 scrypt_module_extra_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, M // now that we know they all have the same settings, we also need to check the self-test hash is different to what the user hash is using - if (user_options->self_test == true) + if ((hashconfig->opts_type & OPTS_TYPE_SELF_TEST_DISABLE) == 0) { if ((scrypt_N != hashes->st_salts_buf[0].scrypt_N) || (scrypt_r != hashes->st_salts_buf[0].scrypt_r) diff --git a/tools/cachedata2hashcat.py b/tools/cachedata2hashcat.py old mode 100644 new mode 100755